diff --git a/Android.mk b/Android.mk
index 494ba1b..48415b3 100644
--- a/Android.mk
+++ b/Android.mk
@@ -31,6 +31,10 @@
 # So we first build the framework as a monolithic static library then split it
 # up into smaller pieces.
 # ============================================================
+
+# embedded builds use nothing in frameworks/base
+ifneq ($(ANDROID_BUILD_EMBEDDED),true)
+
 include $(CLEAR_VARS)
 
 # FRAMEWORKS_BASE_SUBDIRS comes from build/core/pathmap.mk
@@ -72,6 +76,8 @@
 	core/java/android/app/ISearchManagerCallback.aidl \
 	core/java/android/app/IServiceConnection.aidl \
 	core/java/android/app/IStopUserCallback.aidl \
+        core/java/android/app/task/ITaskCallback.aidl \
+        core/java/android/app/task/ITaskService.aidl \
 	core/java/android/app/IThumbnailReceiver.aidl \
 	core/java/android/app/IThumbnailRetriever.aidl \
 	core/java/android/app/ITransientNotification.aidl \
@@ -81,10 +87,14 @@
 	core/java/android/app/IWallpaperManager.aidl \
 	core/java/android/app/IWallpaperManagerCallback.aidl \
 	core/java/android/app/admin/IDevicePolicyManager.aidl \
+	core/java/android/app/trust/ITrustManager.aidl \
+	core/java/android/app/trust/ITrustListener.aidl \
 	core/java/android/app/backup/IBackupManager.aidl \
 	core/java/android/app/backup/IFullBackupRestoreObserver.aidl \
 	core/java/android/app/backup/IRestoreObserver.aidl \
 	core/java/android/app/backup/IRestoreSession.aidl \
+	core/java/android/app/maintenance/IIdleCallback.aidl \
+	core/java/android/app/maintenance/IIdleService.aidl \
 	core/java/android/bluetooth/IBluetooth.aidl \
 	core/java/android/bluetooth/IBluetoothA2dp.aidl \
 	core/java/android/bluetooth/IBluetoothCallback.aidl \
@@ -107,13 +117,16 @@
 	core/java/android/content/IIntentReceiver.aidl \
 	core/java/android/content/IIntentSender.aidl \
 	core/java/android/content/IOnPrimaryClipChangedListener.aidl \
-	core/java/android/content/IAnonymousSyncAdapter.aidl \
 	core/java/android/content/ISyncAdapter.aidl \
 	core/java/android/content/ISyncContext.aidl \
+	core/java/android/content/ISyncServiceAdapter.aidl \
 	core/java/android/content/ISyncStatusObserver.aidl \
+	core/java/android/content/pm/ILauncherApps.aidl \
+	core/java/android/content/pm/IOnAppsChangedListener.aidl \
 	core/java/android/content/pm/IPackageDataObserver.aidl \
 	core/java/android/content/pm/IPackageDeleteObserver.aidl \
 	core/java/android/content/pm/IPackageInstallObserver.aidl \
+	core/java/android/content/pm/IPackageInstallObserver2.aidl \
 	core/java/android/content/pm/IPackageManager.aidl \
 	core/java/android/content/pm/IPackageMoveObserver.aidl \
 	core/java/android/content/pm/IPackageStatsObserver.aidl \
@@ -144,6 +157,8 @@
 	core/java/android/net/INetworkManagementEventObserver.aidl \
 	core/java/android/net/INetworkPolicyListener.aidl \
 	core/java/android/net/INetworkPolicyManager.aidl \
+	core/java/android/net/INetworkScoreCache.aidl \
+	core/java/android/net/INetworkScoreService.aidl \
 	core/java/android/net/INetworkStatsService.aidl \
 	core/java/android/net/INetworkStatsSession.aidl \
 	core/java/android/net/nsd/INsdManager.aidl \
@@ -152,11 +167,13 @@
 	core/java/android/nfc/INfcAdapterExtras.aidl \
 	core/java/android/nfc/INfcTag.aidl \
 	core/java/android/nfc/INfcCardEmulation.aidl \
+	core/java/android/nfc/INfcUnlockSettings.aidl \
 	core/java/android/os/IBatteryPropertiesListener.aidl \
 	core/java/android/os/IBatteryPropertiesRegistrar.aidl \
 	core/java/android/os/ICancellationSignal.aidl \
 	core/java/android/os/IHardwareService.aidl \
 	core/java/android/os/IMessenger.aidl \
+	core/java/android/os/INetworkActivityListener.aidl \
 	core/java/android/os/INetworkManagementService.aidl \
 	core/java/android/os/IPermissionController.aidl \
 	core/java/android/os/IPowerManager.aidl \
@@ -166,6 +183,8 @@
 	core/java/android/os/IUserManager.aidl \
 	core/java/android/os/IVibratorService.aidl \
 	core/java/android/service/notification/INotificationListener.aidl \
+	core/java/android/service/notification/IConditionListener.aidl \
+	core/java/android/service/notification/IConditionProvider.aidl \
 	core/java/android/print/ILayoutResultCallback.aidl \
 	core/java/android/print/IPrinterDiscoveryObserver.aidl \
 	core/java/android/print/IPrintDocumentAdapter.aidl \
@@ -181,16 +200,26 @@
 	core/java/android/service/dreams/IDozeHardware.aidl \
 	core/java/android/service/dreams/IDreamManager.aidl \
 	core/java/android/service/dreams/IDreamService.aidl \
+	core/java/android/service/trust/ITrustAgentService.aidl \
+	core/java/android/service/trust/ITrustAgentServiceCallback.aidl \
+	core/java/android/service/voice/IVoiceInteractionService.aidl \
+	core/java/android/service/voice/IVoiceInteractionSession.aidl \
+	core/java/android/service/voice/IVoiceInteractionSessionService.aidl \
 	core/java/android/service/wallpaper/IWallpaperConnection.aidl \
 	core/java/android/service/wallpaper/IWallpaperEngine.aidl \
 	core/java/android/service/wallpaper/IWallpaperService.aidl \
+	core/java/android/tv/ITvInputClient.aidl \
+	core/java/android/tv/ITvInputManager.aidl \
+	core/java/android/tv/ITvInputService.aidl \
+	core/java/android/tv/ITvInputServiceCallback.aidl \
+	core/java/android/tv/ITvInputSession.aidl \
+	core/java/android/tv/ITvInputSessionCallback.aidl \
 	core/java/android/view/accessibility/IAccessibilityInteractionConnection.aidl\
 	core/java/android/view/accessibility/IAccessibilityInteractionConnectionCallback.aidl\
 	core/java/android/view/accessibility/IAccessibilityManager.aidl \
 	core/java/android/view/accessibility/IAccessibilityManagerClient.aidl \
 	core/java/android/view/IApplicationToken.aidl \
 	core/java/android/view/IAssetAtlas.aidl \
-	core/java/android/view/IMagnificationCallbacks.aidl \
 	core/java/android/view/IInputFilter.aidl \
 	core/java/android/view/IInputFilterHost.aidl \
 	core/java/android/view/IOnKeyguardExitResult.aidl \
@@ -209,6 +238,10 @@
 	core/java/com/android/internal/app/IBatteryStats.aidl \
 	core/java/com/android/internal/app/IProcessStats.aidl \
 	core/java/com/android/internal/app/IUsageStats.aidl \
+	core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl \
+	core/java/com/android/internal/app/IVoiceInteractor.aidl \
+	core/java/com/android/internal/app/IVoiceInteractorCallback.aidl \
+	core/java/com/android/internal/app/IVoiceInteractorRequest.aidl \
 	core/java/com/android/internal/app/IMediaContainerService.aidl \
 	core/java/com/android/internal/appwidget/IAppWidgetService.aidl \
 	core/java/com/android/internal/appwidget/IAppWidgetHost.aidl \
@@ -256,6 +289,8 @@
 	media/java/android/media/IAudioService.aidl \
 	media/java/android/media/IAudioFocusDispatcher.aidl \
 	media/java/android/media/IAudioRoutesObserver.aidl \
+	media/java/android/media/IMediaHTTPConnection.aidl \
+	media/java/android/media/IMediaHTTPService.aidl \
 	media/java/android/media/IMediaRouterClient.aidl \
 	media/java/android/media/IMediaRouterService.aidl \
 	media/java/android/media/IMediaScannerListener.aidl \
@@ -266,6 +301,14 @@
 	media/java/android/media/IRemoteDisplayProvider.aidl \
 	media/java/android/media/IRemoteVolumeObserver.aidl \
 	media/java/android/media/IRingtonePlayer.aidl \
+	media/java/android/media/routeprovider/IRouteConnection.aidl \
+	media/java/android/media/routeprovider/IRouteProvider.aidl \
+	media/java/android/media/routeprovider/IRouteProviderCallback.aidl \
+	media/java/android/media/session/ISessionController.aidl \
+	media/java/android/media/session/ISessionControllerCallback.aidl \
+	media/java/android/media/session/ISession.aidl \
+	media/java/android/media/session/ISessionCallback.aidl \
+	media/java/android/media/session/ISessionManager.aidl \
 	telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl \
 	telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl \
 	telephony/java/com/android/internal/telephony/ITelephony.aidl \
@@ -274,6 +317,7 @@
 	telephony/java/com/android/internal/telephony/ISms.aidl \
 	telephony/java/com/android/internal/telephony/IWapPushManager.aidl \
 	wifi/java/android/net/wifi/IWifiManager.aidl \
+	wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl \
 	wifi/java/android/net/wifi/p2p/IWifiP2pManager.aidl \
 	packages/services/PacProcessor/com/android/net/IProxyService.aidl \
 	packages/services/Proxy/com/android/net/IProxyCallback.aidl \
@@ -292,7 +336,7 @@
 
 LOCAL_MODULE := framework-base
 
-LOCAL_JAR_EXCLUDE_FILES := none
+LOCAL_RMTYPEDEFS := true
 
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
@@ -377,10 +421,23 @@
 	frameworks/base/core/java/android/os/DropBoxManager.aidl \
 	frameworks/base/core/java/android/os/ParcelFileDescriptor.aidl \
 	frameworks/base/core/java/android/os/ParcelUuid.aidl \
+	frameworks/base/core/java/android/print/PrinterInfo.aidl \
+	frameworks/base/core/java/android/print/PageRange.aidl \
+	frameworks/base/core/java/android/print/PrintAttributes.aidl \
+	frameworks/base/core/java/android/print/PrinterCapabilitiesInfo.aidl \
+	frameworks/base/core/java/android/print/PrinterId.aidl \
+	frameworks/base/core/java/android/print/PrintJobId.aidl \
+	frameworks/base/core/java/android/print/PrintJobInfo.aidl \
+	frameworks/base/core/java/android/view/accessibility/AccessibilityEvent.aidl \
+	frameworks/base/core/java/android/view/accessibility/AccessibilityNodeInfo.aidl \
+	frameworks/base/core/java/android/view/accessibility/AccessibilityRecord.aidl \
+	frameworks/base/core/java/android/view/accessibility/AccessibilityWindowInfo.aidl \
 	frameworks/base/core/java/android/view/KeyEvent.aidl \
 	frameworks/base/core/java/android/view/MotionEvent.aidl \
 	frameworks/base/core/java/android/view/Surface.aidl \
 	frameworks/base/core/java/android/view/WindowManager.aidl \
+	frameworks/base/core/java/android/view/WindowAnimationFrameStats.aidl \
+	frameworks/base/core/java/android/view/WindowContentFrameStats.aidl \
 	frameworks/base/core/java/android/widget/RemoteViews.aidl \
 	frameworks/base/core/java/com/android/internal/textservice/ISpellCheckerService.aidl \
 	frameworks/base/core/java/com/android/internal/textservice/ISpellCheckerSession.aidl \
@@ -594,6 +651,7 @@
 		$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
 		-stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android_stubs_current_intermediates/src \
 		-api $(INTERNAL_PLATFORM_API_FILE) \
+		-removedApi $(INTERNAL_PLATFORM_REMOVED_API_FILE) \
 		-nodocs
 
 LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
@@ -819,3 +877,5 @@
 ifeq (,$(ONE_SHOT_MAKEFILE))
 include $(call first-makefiles-under,$(LOCAL_PATH))
 endif
+
+endif # ANDROID_BUILD_EMBEDDED
diff --git a/CleanSpec.mk b/CleanSpec.mk
index ef3f4ae..c6f6a62 100644
--- a/CleanSpec.mk
+++ b/CleanSpec.mk
@@ -171,6 +171,7 @@
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/print/)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/printservice/)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/packages/services/Proxy/)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/print/IPrinterDiscoverySessionObserver.*)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/print/IPrinterDiscoverySessionClient.*)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/os/IBattery*)
@@ -185,6 +186,11 @@
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/framework-res_intermediates)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/print/IPrintClient.*)
 $(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/services_intermediates)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/media/java/android/media/IMedia*)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/view/IMagnificationCallbacks*)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/core/java/android/tv/)
+$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/framework-base_intermediates/src/media/java/android/media/)
+
 # ************************************************
 # NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
 # ************************************************
diff --git a/api/current.txt b/api/current.txt
index 0037911..3f6b297 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -9,6 +9,7 @@
     field public static final java.lang.String ACCESS_CHECKIN_PROPERTIES = "android.permission.ACCESS_CHECKIN_PROPERTIES";
     field public static final java.lang.String ACCESS_COARSE_LOCATION = "android.permission.ACCESS_COARSE_LOCATION";
     field public static final java.lang.String ACCESS_FINE_LOCATION = "android.permission.ACCESS_FINE_LOCATION";
+    field public static final java.lang.String ACCESS_INPUT_FLINGER = "android.permission.ACCESS_INPUT_FLINGER";
     field public static final java.lang.String ACCESS_LOCATION_EXTRA_COMMANDS = "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS";
     field public static final java.lang.String ACCESS_MOCK_LOCATION = "android.permission.ACCESS_MOCK_LOCATION";
     field public static final java.lang.String ACCESS_NETWORK_STATE = "android.permission.ACCESS_NETWORK_STATE";
@@ -26,7 +27,11 @@
     field public static final java.lang.String BIND_NOTIFICATION_LISTENER_SERVICE = "android.permission.BIND_NOTIFICATION_LISTENER_SERVICE";
     field public static final java.lang.String BIND_PRINT_SERVICE = "android.permission.BIND_PRINT_SERVICE";
     field public static final java.lang.String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS";
+    field public static final java.lang.String BIND_ROUTE_PROVIDER = "android.permission.BIND_ROUTE_PROVIDER";
     field public static final java.lang.String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE";
+    field public static final java.lang.String BIND_TRUST_AGENT_SERVICE = "android.permission.BIND_TRUST_AGENT_SERVICE";
+    field public static final java.lang.String BIND_TV_INPUT = "android.permission.BIND_TV_INPUT";
+    field public static final java.lang.String BIND_VOICE_INTERACTION = "android.permission.BIND_VOICE_INTERACTION";
     field public static final java.lang.String BIND_VPN_SERVICE = "android.permission.BIND_VPN_SERVICE";
     field public static final java.lang.String BIND_WALLPAPER = "android.permission.BIND_WALLPAPER";
     field public static final java.lang.String BLUETOOTH = "android.permission.BLUETOOTH";
@@ -109,6 +114,7 @@
     field public static final java.lang.String RECEIVE_SMS = "android.permission.RECEIVE_SMS";
     field public static final java.lang.String RECEIVE_WAP_PUSH = "android.permission.RECEIVE_WAP_PUSH";
     field public static final java.lang.String RECORD_AUDIO = "android.permission.RECORD_AUDIO";
+    field public static final java.lang.String RECOVERY = "android.permission.RECOVERY";
     field public static final java.lang.String REORDER_TASKS = "android.permission.REORDER_TASKS";
     field public static final deprecated java.lang.String RESTART_PACKAGES = "android.permission.RESTART_PACKAGES";
     field public static final java.lang.String SEND_RESPOND_VIA_MESSAGE = "android.permission.SEND_RESPOND_VIA_MESSAGE";
@@ -127,6 +133,7 @@
     field public static final java.lang.String SET_WALLPAPER = "android.permission.SET_WALLPAPER";
     field public static final java.lang.String SET_WALLPAPER_HINTS = "android.permission.SET_WALLPAPER_HINTS";
     field public static final java.lang.String SIGNAL_PERSISTENT_PROCESSES = "android.permission.SIGNAL_PERSISTENT_PROCESSES";
+    field public static final java.lang.String SIM_COMMUNICATION = "android.permission.SIM_COMMUNICATION";
     field public static final java.lang.String STATUS_BAR = "android.permission.STATUS_BAR";
     field public static final java.lang.String SUBSCRIBED_FEEDS_READ = "android.permission.SUBSCRIBED_FEEDS_READ";
     field public static final java.lang.String SUBSCRIBED_FEEDS_WRITE = "android.permission.SUBSCRIBED_FEEDS_WRITE";
@@ -243,6 +250,7 @@
     field public static final int actionBarTabBarStyle = 16843508; // 0x10102f4
     field public static final int actionBarTabStyle = 16843507; // 0x10102f3
     field public static final int actionBarTabTextStyle = 16843509; // 0x10102f5
+    field public static final int actionBarTheme = 16843837; // 0x101043d
     field public static final int actionBarWidgetTheme = 16843671; // 0x1010397
     field public static final int actionButtonStyle = 16843480; // 0x10102d8
     field public static final int actionDropDownStyle = 16843479; // 0x10102d7
@@ -286,6 +294,7 @@
     field public static final int alwaysDrawnWithCache = 16842991; // 0x10100ef
     field public static final int alwaysRetainTaskState = 16843267; // 0x1010203
     field public static final int angle = 16843168; // 0x10101a0
+    field public static final int animate = 16843823; // 0x101042f
     field public static final int animateFirstView = 16843477; // 0x10102d5
     field public static final int animateLayoutChanges = 16843506; // 0x10102f2
     field public static final int animateOnClick = 16843356; // 0x101025c
@@ -372,18 +381,29 @@
     field public static final int clipChildren = 16842986; // 0x10100ea
     field public static final int clipOrientation = 16843274; // 0x101020a
     field public static final int clipToPadding = 16842987; // 0x10100eb
+    field public static final int clipToPath = 16843822; // 0x101042e
     field public static final int codes = 16843330; // 0x1010242
     field public static final int collapseColumns = 16843083; // 0x101014b
     field public static final int color = 16843173; // 0x10101a5
+    field public static final int colorAccent = 16843842; // 0x1010442
     field public static final int colorActivatedHighlight = 16843664; // 0x1010390
     field public static final int colorBackground = 16842801; // 0x1010031
     field public static final int colorBackgroundCacheHint = 16843435; // 0x10102ab
+    field public static final int colorButtonNormal = 16843829; // 0x1010435
+    field public static final int colorButtonNormalColored = 16843831; // 0x1010437
+    field public static final int colorButtonPressed = 16843830; // 0x1010436
+    field public static final int colorButtonPressedColored = 16843832; // 0x1010438
+    field public static final int colorControlActivated = 16843828; // 0x1010434
+    field public static final int colorControlNormal = 16843827; // 0x1010433
     field public static final int colorFocusedHighlight = 16843663; // 0x101038f
     field public static final int colorForeground = 16842800; // 0x1010030
     field public static final int colorForegroundInverse = 16843270; // 0x1010206
     field public static final int colorLongPressedHighlight = 16843662; // 0x101038e
     field public static final int colorMultiSelectHighlight = 16843665; // 0x1010391
     field public static final int colorPressedHighlight = 16843661; // 0x101038d
+    field public static final int colorPrimary = 16843840; // 0x1010440
+    field public static final int colorPrimaryDark = 16843841; // 0x1010441
+    field public static final int colorPrimaryLight = 16843839; // 0x101043f
     field public static final int columnCount = 16843639; // 0x1010377
     field public static final int columnDelay = 16843215; // 0x10101cf
     field public static final int columnOrderPreserved = 16843640; // 0x1010378
@@ -398,6 +418,10 @@
     field public static final int content = 16843355; // 0x101025b
     field public static final int contentAuthority = 16843408; // 0x1010290
     field public static final int contentDescription = 16843379; // 0x1010273
+    field public static final int controlX1 = 16843799; // 0x1010417
+    field public static final int controlX2 = 16843801; // 0x1010419
+    field public static final int controlY1 = 16843800; // 0x1010418
+    field public static final int controlY2 = 16843802; // 0x101041a
     field public static final int cropToPadding = 16843043; // 0x1010123
     field public static final int cursorVisible = 16843090; // 0x1010152
     field public static final int customNavigationLayout = 16843474; // 0x10102d2
@@ -460,12 +484,14 @@
     field public static final int dropDownWidth = 16843362; // 0x1010262
     field public static final int duplicateParentState = 16842985; // 0x10100e9
     field public static final int duration = 16843160; // 0x1010198
+    field public static final int durations = 16843814; // 0x1010426
     field public static final int editTextBackground = 16843602; // 0x1010352
     field public static final int editTextColor = 16843601; // 0x1010351
     field public static final int editTextPreferenceStyle = 16842898; // 0x1010092
     field public static final int editTextStyle = 16842862; // 0x101006e
     field public static final deprecated int editable = 16843115; // 0x101016b
     field public static final int editorExtras = 16843300; // 0x1010224
+    field public static final int elevation = 16843853; // 0x101044d
     field public static final int ellipsize = 16842923; // 0x10100ab
     field public static final int ems = 16843096; // 0x1010158
     field public static final int enabled = 16842766; // 0x101000e
@@ -475,7 +501,9 @@
     field public static final int entries = 16842930; // 0x10100b2
     field public static final int entryValues = 16843256; // 0x10101f8
     field public static final int eventsInterceptionEnabled = 16843389; // 0x101027d
+    field public static final int excludeClass = 16843855; // 0x101044f
     field public static final int excludeFromRecents = 16842775; // 0x1010017
+    field public static final int excludeId = 16843854; // 0x101044e
     field public static final int exitFadeDuration = 16843533; // 0x101030d
     field public static final int expandableListPreferredChildIndicatorLeft = 16842834; // 0x1010052
     field public static final int expandableListPreferredChildIndicatorRight = 16842835; // 0x1010053
@@ -500,12 +528,15 @@
     field public static final int fastScrollOverlayPosition = 16843578; // 0x101033a
     field public static final int fastScrollPreviewBackgroundLeft = 16843575; // 0x1010337
     field public static final int fastScrollPreviewBackgroundRight = 16843576; // 0x1010338
+    field public static final int fastScrollStyle = 16843794; // 0x1010412
     field public static final int fastScrollTextColor = 16843609; // 0x1010359
     field public static final int fastScrollThumbDrawable = 16843574; // 0x1010336
     field public static final int fastScrollTrackDrawable = 16843577; // 0x1010339
+    field public static final int fill = 16843809; // 0x1010421
     field public static final int fillAfter = 16843197; // 0x10101bd
     field public static final int fillBefore = 16843196; // 0x10101bc
     field public static final int fillEnabled = 16843343; // 0x101024f
+    field public static final int fillOpacity = 16843808; // 0x1010420
     field public static final int fillViewport = 16843130; // 0x101017a
     field public static final int filter = 16843035; // 0x101011b
     field public static final int filterTouchesWhenObscured = 16843460; // 0x10102c4
@@ -525,6 +556,7 @@
     field public static final int format12Hour = 16843722; // 0x10103ca
     field public static final int format24Hour = 16843723; // 0x10103cb
     field public static final int fragment = 16843491; // 0x10102e3
+    field public static final int fragmentBreadCrumbsStyle = 16843793; // 0x1010411
     field public static final int fragmentCloseEnterAnimation = 16843495; // 0x10102e7
     field public static final int fragmentCloseExitAnimation = 16843496; // 0x10102e8
     field public static final int fragmentFadeEnterAnimation = 16843497; // 0x10102e9
@@ -566,6 +598,7 @@
     field public static final int headerBackground = 16843055; // 0x101012f
     field public static final int headerDividersEnabled = 16843310; // 0x101022e
     field public static final int height = 16843093; // 0x1010155
+    field public static final int hideOnContentScroll = 16843856; // 0x1010450
     field public static final int hint = 16843088; // 0x1010150
     field public static final int homeAsUpIndicator = 16843531; // 0x101030b
     field public static final int homeLayout = 16843549; // 0x101031d
@@ -653,6 +686,33 @@
     field public static final int keyboardMode = 16843341; // 0x101024d
     field public static final int keycode = 16842949; // 0x10100c5
     field public static final int killAfterRestore = 16843420; // 0x101029c
+    field public static final int l_resource_pad1 = 16843792; // 0x1010410
+    field public static final int l_resource_pad10 = 16843783; // 0x1010407
+    field public static final int l_resource_pad11 = 16843782; // 0x1010406
+    field public static final int l_resource_pad12 = 16843781; // 0x1010405
+    field public static final int l_resource_pad13 = 16843780; // 0x1010404
+    field public static final int l_resource_pad14 = 16843779; // 0x1010403
+    field public static final int l_resource_pad15 = 16843778; // 0x1010402
+    field public static final int l_resource_pad16 = 16843777; // 0x1010401
+    field public static final int l_resource_pad17 = 16843776; // 0x1010400
+    field public static final int l_resource_pad18 = 16843775; // 0x10103ff
+    field public static final int l_resource_pad19 = 16843774; // 0x10103fe
+    field public static final int l_resource_pad2 = 16843791; // 0x101040f
+    field public static final int l_resource_pad20 = 16843773; // 0x10103fd
+    field public static final int l_resource_pad21 = 16843772; // 0x10103fc
+    field public static final int l_resource_pad22 = 16843771; // 0x10103fb
+    field public static final int l_resource_pad23 = 16843770; // 0x10103fa
+    field public static final int l_resource_pad24 = 16843769; // 0x10103f9
+    field public static final int l_resource_pad25 = 16843768; // 0x10103f8
+    field public static final int l_resource_pad26 = 16843767; // 0x10103f7
+    field public static final int l_resource_pad27 = 16843766; // 0x10103f6
+    field public static final int l_resource_pad3 = 16843790; // 0x101040e
+    field public static final int l_resource_pad4 = 16843789; // 0x101040d
+    field public static final int l_resource_pad5 = 16843788; // 0x101040c
+    field public static final int l_resource_pad6 = 16843787; // 0x101040b
+    field public static final int l_resource_pad7 = 16843786; // 0x101040a
+    field public static final int l_resource_pad8 = 16843785; // 0x1010409
+    field public static final int l_resource_pad9 = 16843784; // 0x1010408
     field public static final int label = 16842753; // 0x1010001
     field public static final int labelFor = 16843718; // 0x10103c6
     field public static final int labelTextSize = 16843317; // 0x1010235
@@ -708,6 +768,7 @@
     field public static final int layout_x = 16843135; // 0x101017f
     field public static final int layout_y = 16843136; // 0x1010180
     field public static final int left = 16843181; // 0x10101ad
+    field public static final int limitTo = 16843824; // 0x1010430
     field public static final int lineSpacingExtra = 16843287; // 0x1010217
     field public static final int lineSpacingMultiplier = 16843288; // 0x1010218
     field public static final int lines = 16843092; // 0x1010154
@@ -769,6 +830,7 @@
     field public static final int name = 16842755; // 0x1010003
     field public static final int navigationMode = 16843471; // 0x10102cf
     field public static final int negativeButtonText = 16843254; // 0x10101f6
+    field public static final int nestedScrollingEnabled = 16843843; // 0x1010443
     field public static final int nextFocusDown = 16842980; // 0x10100e4
     field public static final int nextFocusForward = 16843580; // 0x101033c
     field public static final int nextFocusLeft = 16842977; // 0x10100e1
@@ -810,15 +872,18 @@
     field public static final int parentActivityName = 16843687; // 0x10103a7
     field public static final deprecated int password = 16843100; // 0x101015c
     field public static final int path = 16842794; // 0x101002a
+    field public static final int pathData = 16843810; // 0x1010422
     field public static final int pathPattern = 16842796; // 0x101002c
     field public static final int pathPrefix = 16842795; // 0x101002b
     field public static final int permission = 16842758; // 0x1010006
     field public static final int permissionFlags = 16843719; // 0x10103c7
     field public static final int permissionGroup = 16842762; // 0x101000a
     field public static final int permissionGroupFlags = 16843717; // 0x10103c5
+    field public static final int persistable = 16843833; // 0x1010439
     field public static final int persistent = 16842765; // 0x101000d
     field public static final int persistentDrawingCache = 16842990; // 0x10100ee
     field public static final deprecated int phoneNumber = 16843111; // 0x1010167
+    field public static final int pinned = 16843826; // 0x1010432
     field public static final int pivotX = 16843189; // 0x10101b5
     field public static final int pivotY = 16843190; // 0x10101b6
     field public static final int popupAnimationStyle = 16843465; // 0x10102c9
@@ -873,6 +938,7 @@
     field public static final int readPermission = 16842759; // 0x1010007
     field public static final int repeatCount = 16843199; // 0x10101bf
     field public static final int repeatMode = 16843200; // 0x10101c0
+    field public static final int repeatStyle = 16843816; // 0x1010428
     field public static final int reqFiveWayNav = 16843314; // 0x1010232
     field public static final int reqHardKeyboard = 16843305; // 0x1010229
     field public static final int reqKeyboardType = 16843304; // 0x1010228
@@ -882,6 +948,7 @@
     field public static final int required = 16843406; // 0x101028e
     field public static final int requiredAccountType = 16843734; // 0x10103d6
     field public static final int requiredForAllUsers = 16843728; // 0x10103d0
+    field public static final int requiredForProfile = 16843825; // 0x1010431
     field public static final int requiresFadingEdge = 16843685; // 0x10103a5
     field public static final int requiresSmallestWidthDp = 16843620; // 0x1010364
     field public static final int resizeMode = 16843619; // 0x1010363
@@ -945,6 +1012,8 @@
     field public static final int selectableItemBackground = 16843534; // 0x101030e
     field public static final int selectedDateVerticalBar = 16843591; // 0x1010347
     field public static final int selectedWeekBackgroundColor = 16843586; // 0x1010342
+    field public static final int sequence = 16843815; // 0x1010427
+    field public static final int sessionService = 16843850; // 0x101044a
     field public static final int settingsActivity = 16843301; // 0x1010225
     field public static final int shadowColor = 16843105; // 0x1010161
     field public static final int shadowDx = 16843106; // 0x1010162
@@ -952,6 +1021,7 @@
     field public static final int shadowRadius = 16843108; // 0x1010164
     field public static final int shape = 16843162; // 0x101019a
     field public static final int shareInterpolator = 16843195; // 0x10101bb
+    field public static final int sharedElementName = 16843803; // 0x101041b
     field public static final int sharedUserId = 16842763; // 0x101000b
     field public static final int sharedUserLabel = 16843361; // 0x1010261
     field public static final int shouldDisableView = 16843246; // 0x10101ee
@@ -965,6 +1035,7 @@
     field public static final int shrinkColumns = 16843082; // 0x101014a
     field public static final deprecated int singleLine = 16843101; // 0x101015d
     field public static final int singleUser = 16843711; // 0x10103bf
+    field public static final int slideEdge = 16843836; // 0x101043c
     field public static final int smallIcon = 16843422; // 0x101029e
     field public static final int smallScreens = 16843396; // 0x1010284
     field public static final int smoothScrollbar = 16843313; // 0x1010231
@@ -981,6 +1052,7 @@
     field public static final int sspPattern = 16843749; // 0x10103e5
     field public static final int sspPrefix = 16843748; // 0x10103e4
     field public static final int stackFromBottom = 16843005; // 0x10100fd
+    field public static final int stackViewStyle = 16843851; // 0x101044b
     field public static final int starStyle = 16842882; // 0x1010082
     field public static final int startColor = 16843165; // 0x101019d
     field public static final int startDelay = 16843746; // 0x10103e2
@@ -1015,7 +1087,13 @@
     field public static final int streamType = 16843273; // 0x1010209
     field public static final int stretchColumns = 16843081; // 0x1010149
     field public static final int stretchMode = 16843030; // 0x1010116
+    field public static final int stroke = 16843811; // 0x1010423
+    field public static final int strokeLineCap = 16843820; // 0x101042c
+    field public static final int strokeLineJoin = 16843821; // 0x101042d
+    field public static final int strokeOpacity = 16843812; // 0x1010424
+    field public static final int strokeWidth = 16843813; // 0x1010425
     field public static final int subtitle = 16843473; // 0x10102d1
+    field public static final int subtitleTextAppearance = 16843835; // 0x101043b
     field public static final int subtitleTextStyle = 16843513; // 0x10102f9
     field public static final int subtypeExtraValue = 16843674; // 0x101039a
     field public static final int subtypeId = 16843713; // 0x10103c1
@@ -1032,6 +1110,7 @@
     field public static final int switchMinWidth = 16843632; // 0x1010370
     field public static final int switchPadding = 16843633; // 0x1010371
     field public static final int switchPreferenceStyle = 16843629; // 0x101036d
+    field public static final int switchStyle = 16843852; // 0x101044c
     field public static final int switchTextAppearance = 16843630; // 0x101036e
     field public static final int switchTextOff = 16843628; // 0x101036c
     field public static final int switchTextOn = 16843627; // 0x101036b
@@ -1068,6 +1147,7 @@
     field public static final int textAppearanceLargeInverse = 16842819; // 0x1010043
     field public static final int textAppearanceLargePopupMenu = 16843521; // 0x1010301
     field public static final int textAppearanceListItem = 16843678; // 0x101039e
+    field public static final int textAppearanceListItemSecondary = 16843838; // 0x101043e
     field public static final int textAppearanceListItemSmall = 16843679; // 0x101039f
     field public static final int textAppearanceMedium = 16842817; // 0x1010041
     field public static final int textAppearanceMediumInverse = 16842820; // 0x1010044
@@ -1128,8 +1208,10 @@
     field public static final int tileMode = 16843265; // 0x1010201
     field public static final int timeZone = 16843724; // 0x10103cc
     field public static final int tint = 16843041; // 0x1010121
+    field public static final int tintMode = 16843798; // 0x1010416
     field public static final int title = 16843233; // 0x10101e1
     field public static final int titleCondensed = 16843234; // 0x10101e2
+    field public static final int titleTextAppearance = 16843834; // 0x101043a
     field public static final int titleTextStyle = 16843512; // 0x10102f8
     field public static final int toAlpha = 16843211; // 0x10101cb
     field public static final int toDegrees = 16843188; // 0x10101b4
@@ -1149,9 +1231,15 @@
     field public static final int transformPivotX = 16843552; // 0x1010320
     field public static final int transformPivotY = 16843553; // 0x1010321
     field public static final int transition = 16843743; // 0x10103df
+    field public static final int transitionGroup = 16843804; // 0x101041c
     field public static final int transitionOrdering = 16843744; // 0x10103e0
     field public static final int translationX = 16843554; // 0x1010322
     field public static final int translationY = 16843555; // 0x1010323
+    field public static final int translationZ = 16843797; // 0x1010415
+    field public static final int trigger = 16843805; // 0x101041d
+    field public static final int trimPathEnd = 16843818; // 0x101042a
+    field public static final int trimPathOffset = 16843819; // 0x101042b
+    field public static final int trimPathStart = 16843817; // 0x1010429
     field public static final int type = 16843169; // 0x10101a1
     field public static final int typeface = 16842902; // 0x1010096
     field public static final int uiOptions = 16843672; // 0x1010398
@@ -1176,6 +1264,8 @@
     field public static final int verticalGap = 16843328; // 0x1010240
     field public static final int verticalScrollbarPosition = 16843572; // 0x1010334
     field public static final int verticalSpacing = 16843029; // 0x1010115
+    field public static final int viewportHeight = 16843807; // 0x101041f
+    field public static final int viewportWidth = 16843806; // 0x101041e
     field public static final int visibility = 16842972; // 0x10100dc
     field public static final int visible = 16843156; // 0x1010194
     field public static final int vmSafeMode = 16843448; // 0x10102b8
@@ -1204,14 +1294,20 @@
     field public static final int windowActionBar = 16843469; // 0x10102cd
     field public static final int windowActionBarOverlay = 16843492; // 0x10102e4
     field public static final int windowActionModeOverlay = 16843485; // 0x10102dd
+    field public static final int windowAllowEnterTransitionOverlap = 16843849; // 0x1010449
+    field public static final int windowAllowExitTransitionOverlap = 16843848; // 0x1010448
     field public static final int windowAnimationStyle = 16842926; // 0x10100ae
     field public static final int windowBackground = 16842836; // 0x1010054
     field public static final int windowCloseOnTouchOutside = 16843611; // 0x101035b
     field public static final int windowContentOverlay = 16842841; // 0x1010059
+    field public static final int windowContentTransitionManager = 16843796; // 0x1010414
+    field public static final int windowContentTransitions = 16843795; // 0x1010413
     field public static final int windowDisablePreview = 16843298; // 0x1010222
     field public static final int windowEnableSplitTouch = 16843543; // 0x1010317
     field public static final int windowEnterAnimation = 16842932; // 0x10100b4
+    field public static final int windowEnterTransition = 16843844; // 0x1010444
     field public static final int windowExitAnimation = 16842933; // 0x10100b5
+    field public static final int windowExitTransition = 16843845; // 0x1010445
     field public static final int windowFrame = 16842837; // 0x1010055
     field public static final int windowFullscreen = 16843277; // 0x101020d
     field public static final int windowHideAnimation = 16842935; // 0x10100b7
@@ -1222,6 +1318,8 @@
     field public static final int windowNoDisplay = 16843294; // 0x101021e
     field public static final int windowNoTitle = 16842838; // 0x1010056
     field public static final int windowOverscan = 16843727; // 0x10103cf
+    field public static final int windowSharedElementEnterTransition = 16843846; // 0x1010446
+    field public static final int windowSharedElementExitTransition = 16843847; // 0x1010447
     field public static final int windowShowAnimation = 16842934; // 0x10100b6
     field public static final int windowShowWallpaper = 16843410; // 0x1010292
     field public static final int windowSoftInputMode = 16843307; // 0x101022b
@@ -1280,8 +1378,20 @@
     field public static final int app_icon_size = 17104896; // 0x1050000
     field public static final int dialog_min_width_major = 17104899; // 0x1050003
     field public static final int dialog_min_width_minor = 17104900; // 0x1050004
+    field public static final int l_resource_pad1 = 17104912; // 0x1050010
+    field public static final int l_resource_pad10 = 17104903; // 0x1050007
+    field public static final int l_resource_pad2 = 17104911; // 0x105000f
+    field public static final int l_resource_pad3 = 17104910; // 0x105000e
+    field public static final int l_resource_pad4 = 17104909; // 0x105000d
+    field public static final int l_resource_pad5 = 17104908; // 0x105000c
+    field public static final int l_resource_pad6 = 17104907; // 0x105000b
+    field public static final int l_resource_pad7 = 17104906; // 0x105000a
+    field public static final int l_resource_pad8 = 17104905; // 0x1050009
+    field public static final int l_resource_pad9 = 17104904; // 0x1050008
     field public static final int notification_large_icon_height = 17104902; // 0x1050006
     field public static final int notification_large_icon_width = 17104901; // 0x1050005
+    field public static final int recents_thumbnail_height = 17104913; // 0x1050011
+    field public static final int recents_thumbnail_width = 17104914; // 0x1050012
     field public static final int thumbnail_height = 17104897; // 0x1050001
     field public static final int thumbnail_width = 17104898; // 0x1050002
   }
@@ -1495,7 +1605,27 @@
     field public static final int inputArea = 16908318; // 0x102001e
     field public static final int inputExtractEditText = 16908325; // 0x1020025
     field public static final int keyboardView = 16908326; // 0x1020026
+    field public static final int l_resource_pad1 = 16908352; // 0x1020040
+    field public static final int l_resource_pad10 = 16908343; // 0x1020037
+    field public static final int l_resource_pad11 = 16908342; // 0x1020036
+    field public static final int l_resource_pad12 = 16908341; // 0x1020035
+    field public static final int l_resource_pad13 = 16908340; // 0x1020034
+    field public static final int l_resource_pad14 = 16908339; // 0x1020033
+    field public static final int l_resource_pad15 = 16908338; // 0x1020032
+    field public static final int l_resource_pad16 = 16908337; // 0x1020031
+    field public static final int l_resource_pad17 = 16908336; // 0x1020030
+    field public static final int l_resource_pad18 = 16908335; // 0x102002f
+    field public static final int l_resource_pad19 = 16908334; // 0x102002e
+    field public static final int l_resource_pad2 = 16908351; // 0x102003f
+    field public static final int l_resource_pad3 = 16908350; // 0x102003e
+    field public static final int l_resource_pad4 = 16908349; // 0x102003d
+    field public static final int l_resource_pad5 = 16908348; // 0x102003c
+    field public static final int l_resource_pad6 = 16908347; // 0x102003b
+    field public static final int l_resource_pad7 = 16908346; // 0x102003a
+    field public static final int l_resource_pad8 = 16908345; // 0x1020039
+    field public static final int l_resource_pad9 = 16908344; // 0x1020038
     field public static final int list = 16908298; // 0x102000a
+    field public static final int mask = 16908354; // 0x1020042
     field public static final int message = 16908299; // 0x102000b
     field public static final int paste = 16908322; // 0x1020022
     field public static final int primary = 16908300; // 0x102000c
@@ -1504,6 +1634,8 @@
     field public static final int selectAll = 16908319; // 0x102001f
     field public static final int selectTextMode = 16908333; // 0x102002d
     field public static final int selectedIcon = 16908302; // 0x102000e
+    field public static final int shared_element = 16908355; // 0x1020043
+    field public static final int shared_element_name = 16908353; // 0x1020041
     field public static final int startSelectingText = 16908328; // 0x1020028
     field public static final int stopSelectingText = 16908329; // 0x1020029
     field public static final int summary = 16908304; // 0x1020010
@@ -1539,7 +1671,14 @@
     field public static final int decelerate_cubic = 17563651; // 0x10c0003
     field public static final int decelerate_quad = 17563649; // 0x10c0001
     field public static final int decelerate_quint = 17563653; // 0x10c0005
+    field public static final int fast_out_linear_in = 17563667; // 0x10c0013
+    field public static final int fast_out_slow_in = 17563665; // 0x10c0011
+    field public static final int l_resource_pad1 = 17563664; // 0x10c0010
+    field public static final int l_resource_pad2 = 17563663; // 0x10c000f
+    field public static final int l_resource_pad3 = 17563662; // 0x10c000e
+    field public static final int l_resource_pad4 = 17563661; // 0x10c000d
     field public static final int linear = 17563659; // 0x10c000b
+    field public static final int linear_out_slow_in = 17563666; // 0x10c0012
     field public static final int overshoot = 17563656; // 0x10c0008
   }
 
@@ -1658,13 +1797,13 @@
     field public static final int TextAppearance_DeviceDefault_Widget = 16974265; // 0x10301b9
     field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Menu = 16974286; // 0x10301ce
     field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle = 16974279; // 0x10301c7
-    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse = 16974283; // 0x10301cb
+    field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionBar_Subtitle_Inverse = 16974283; // 0x10301cb
     field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title = 16974278; // 0x10301c6
-    field public static final int TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse = 16974282; // 0x10301ca
+    field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionBar_Title_Inverse = 16974282; // 0x10301ca
     field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle = 16974281; // 0x10301c9
-    field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse = 16974285; // 0x10301cd
+    field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionMode_Subtitle_Inverse = 16974285; // 0x10301cd
     field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title = 16974280; // 0x10301c8
-    field public static final int TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse = 16974284; // 0x10301cc
+    field public static final deprecated int TextAppearance_DeviceDefault_Widget_ActionMode_Title_Inverse = 16974284; // 0x10301cc
     field public static final int TextAppearance_DeviceDefault_Widget_Button = 16974266; // 0x10301ba
     field public static final int TextAppearance_DeviceDefault_Widget_DropDownHint = 16974271; // 0x10301bf
     field public static final int TextAppearance_DeviceDefault_Widget_DropDownItem = 16974272; // 0x10301c0
@@ -1718,6 +1857,52 @@
     field public static final int TextAppearance_Large_Inverse = 16973891; // 0x1030043
     field public static final int TextAppearance_Medium = 16973892; // 0x1030044
     field public static final int TextAppearance_Medium_Inverse = 16973893; // 0x1030045
+    field public static final int TextAppearance_Quantum = 16974352; // 0x1030210
+    field public static final int TextAppearance_Quantum_Body1 = 16974546; // 0x10302d2
+    field public static final int TextAppearance_Quantum_Body2 = 16974545; // 0x10302d1
+    field public static final int TextAppearance_Quantum_Button = 16974549; // 0x10302d5
+    field public static final int TextAppearance_Quantum_Caption = 16974547; // 0x10302d3
+    field public static final int TextAppearance_Quantum_DialogWindowTitle = 16974353; // 0x1030211
+    field public static final int TextAppearance_Quantum_Display1 = 16974541; // 0x10302cd
+    field public static final int TextAppearance_Quantum_Display2 = 16974540; // 0x10302cc
+    field public static final int TextAppearance_Quantum_Display3 = 16974539; // 0x10302cb
+    field public static final int TextAppearance_Quantum_Display4 = 16974538; // 0x10302ca
+    field public static final int TextAppearance_Quantum_Headline = 16974542; // 0x10302ce
+    field public static final int TextAppearance_Quantum_Inverse = 16974354; // 0x1030212
+    field public static final int TextAppearance_Quantum_Large = 16974355; // 0x1030213
+    field public static final int TextAppearance_Quantum_Large_Inverse = 16974356; // 0x1030214
+    field public static final int TextAppearance_Quantum_Medium = 16974357; // 0x1030215
+    field public static final int TextAppearance_Quantum_Medium_Inverse = 16974358; // 0x1030216
+    field public static final int TextAppearance_Quantum_Menu = 16974548; // 0x10302d4
+    field public static final int TextAppearance_Quantum_SearchResult_Subtitle = 16974359; // 0x1030217
+    field public static final int TextAppearance_Quantum_SearchResult_Title = 16974360; // 0x1030218
+    field public static final int TextAppearance_Quantum_Small = 16974361; // 0x1030219
+    field public static final int TextAppearance_Quantum_Small_Inverse = 16974362; // 0x103021a
+    field public static final int TextAppearance_Quantum_Subhead = 16974544; // 0x10302d0
+    field public static final int TextAppearance_Quantum_Title = 16974543; // 0x10302cf
+    field public static final int TextAppearance_Quantum_Widget = 16974364; // 0x103021c
+    field public static final int TextAppearance_Quantum_Widget_ActionBar_Menu = 16974365; // 0x103021d
+    field public static final int TextAppearance_Quantum_Widget_ActionBar_Subtitle = 16974366; // 0x103021e
+    field public static final int TextAppearance_Quantum_Widget_ActionBar_Subtitle_Inverse = 16974367; // 0x103021f
+    field public static final int TextAppearance_Quantum_Widget_ActionBar_Title = 16974368; // 0x1030220
+    field public static final int TextAppearance_Quantum_Widget_ActionBar_Title_Inverse = 16974369; // 0x1030221
+    field public static final int TextAppearance_Quantum_Widget_ActionMode_Subtitle = 16974370; // 0x1030222
+    field public static final int TextAppearance_Quantum_Widget_ActionMode_Subtitle_Inverse = 16974371; // 0x1030223
+    field public static final int TextAppearance_Quantum_Widget_ActionMode_Title = 16974372; // 0x1030224
+    field public static final int TextAppearance_Quantum_Widget_ActionMode_Title_Inverse = 16974373; // 0x1030225
+    field public static final int TextAppearance_Quantum_Widget_Button = 16974374; // 0x1030226
+    field public static final int TextAppearance_Quantum_Widget_DropDownHint = 16974375; // 0x1030227
+    field public static final int TextAppearance_Quantum_Widget_DropDownItem = 16974376; // 0x1030228
+    field public static final int TextAppearance_Quantum_Widget_EditText = 16974377; // 0x1030229
+    field public static final int TextAppearance_Quantum_Widget_IconMenu_Item = 16974378; // 0x103022a
+    field public static final int TextAppearance_Quantum_Widget_PopupMenu = 16974379; // 0x103022b
+    field public static final int TextAppearance_Quantum_Widget_PopupMenu_Large = 16974380; // 0x103022c
+    field public static final int TextAppearance_Quantum_Widget_PopupMenu_Small = 16974381; // 0x103022d
+    field public static final int TextAppearance_Quantum_Widget_TabWidget = 16974382; // 0x103022e
+    field public static final int TextAppearance_Quantum_Widget_TextView = 16974383; // 0x103022f
+    field public static final int TextAppearance_Quantum_Widget_TextView_PopupMenu = 16974384; // 0x1030230
+    field public static final int TextAppearance_Quantum_Widget_TextView_SpinnerItem = 16974385; // 0x1030231
+    field public static final int TextAppearance_Quantum_WindowTitle = 16974363; // 0x103021b
     field public static final int TextAppearance_Small = 16973894; // 0x1030046
     field public static final int TextAppearance_Small_Inverse = 16973895; // 0x1030047
     field public static final int TextAppearance_StatusBar_EventContent = 16973927; // 0x1030067
@@ -1812,6 +1997,34 @@
     field public static final int Theme_NoTitleBar_Fullscreen = 16973831; // 0x1030007
     field public static final int Theme_NoTitleBar_OverlayActionModes = 16973930; // 0x103006a
     field public static final int Theme_Panel = 16973913; // 0x1030059
+    field public static final int Theme_Quantum = 16974386; // 0x1030232
+    field public static final int Theme_Quantum_Dialog = 16974387; // 0x1030233
+    field public static final int Theme_Quantum_DialogWhenLarge = 16974391; // 0x1030237
+    field public static final int Theme_Quantum_DialogWhenLarge_NoActionBar = 16974392; // 0x1030238
+    field public static final int Theme_Quantum_Dialog_MinWidth = 16974388; // 0x1030234
+    field public static final int Theme_Quantum_Dialog_NoActionBar = 16974389; // 0x1030235
+    field public static final int Theme_Quantum_Dialog_NoActionBar_MinWidth = 16974390; // 0x1030236
+    field public static final int Theme_Quantum_InputMethod = 16974393; // 0x1030239
+    field public static final int Theme_Quantum_Light = 16974401; // 0x1030241
+    field public static final int Theme_Quantum_Light_DarkActionBar = 16974402; // 0x1030242
+    field public static final int Theme_Quantum_Light_Dialog = 16974403; // 0x1030243
+    field public static final int Theme_Quantum_Light_DialogWhenLarge = 16974407; // 0x1030247
+    field public static final int Theme_Quantum_Light_DialogWhenLarge_NoActionBar = 16974408; // 0x1030248
+    field public static final int Theme_Quantum_Light_Dialog_MinWidth = 16974404; // 0x1030244
+    field public static final int Theme_Quantum_Light_Dialog_NoActionBar = 16974405; // 0x1030245
+    field public static final int Theme_Quantum_Light_Dialog_NoActionBar_MinWidth = 16974406; // 0x1030246
+    field public static final int Theme_Quantum_Light_NoActionBar = 16974409; // 0x1030249
+    field public static final int Theme_Quantum_Light_NoActionBar_Fullscreen = 16974410; // 0x103024a
+    field public static final int Theme_Quantum_Light_NoActionBar_Overscan = 16974411; // 0x103024b
+    field public static final int Theme_Quantum_Light_NoActionBar_TranslucentDecor = 16974412; // 0x103024c
+    field public static final int Theme_Quantum_Light_Panel = 16974413; // 0x103024d
+    field public static final int Theme_Quantum_NoActionBar = 16974394; // 0x103023a
+    field public static final int Theme_Quantum_NoActionBar_Fullscreen = 16974395; // 0x103023b
+    field public static final int Theme_Quantum_NoActionBar_Overscan = 16974396; // 0x103023c
+    field public static final int Theme_Quantum_NoActionBar_TranslucentDecor = 16974397; // 0x103023d
+    field public static final int Theme_Quantum_Panel = 16974398; // 0x103023e
+    field public static final int Theme_Quantum_Wallpaper = 16974399; // 0x103023f
+    field public static final int Theme_Quantum_Wallpaper_NoTitleBar = 16974400; // 0x1030240
     field public static final int Theme_Translucent = 16973839; // 0x103000f
     field public static final int Theme_Translucent_NoTitleBar = 16973840; // 0x1030010
     field public static final int Theme_Translucent_NoTitleBar_Fullscreen = 16973841; // 0x1030011
@@ -1868,24 +2081,26 @@
     field public static final int Widget_DeviceDefault_DropDownItem_Spinner = 16974178; // 0x1030162
     field public static final int Widget_DeviceDefault_EditText = 16974154; // 0x103014a
     field public static final int Widget_DeviceDefault_ExpandableListView = 16974155; // 0x103014b
+    field public static final int Widget_DeviceDefault_FastScroll = 16974346; // 0x103020a
+    field public static final int Widget_DeviceDefault_FragmentBreadCrumbs = 16974347; // 0x103020b
     field public static final int Widget_DeviceDefault_GridView = 16974156; // 0x103014c
     field public static final int Widget_DeviceDefault_HorizontalScrollView = 16974171; // 0x103015b
     field public static final int Widget_DeviceDefault_ImageButton = 16974157; // 0x103014d
     field public static final int Widget_DeviceDefault_Light = 16974196; // 0x1030174
     field public static final int Widget_DeviceDefault_Light_ActionBar = 16974243; // 0x10301a3
     field public static final int Widget_DeviceDefault_Light_ActionBar_Solid = 16974247; // 0x10301a7
-    field public static final int Widget_DeviceDefault_Light_ActionBar_Solid_Inverse = 16974248; // 0x10301a8
+    field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_Solid_Inverse = 16974248; // 0x10301a8
     field public static final int Widget_DeviceDefault_Light_ActionBar_TabBar = 16974246; // 0x10301a6
-    field public static final int Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse = 16974249; // 0x10301a9
+    field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_TabBar_Inverse = 16974249; // 0x10301a9
     field public static final int Widget_DeviceDefault_Light_ActionBar_TabText = 16974245; // 0x10301a5
-    field public static final int Widget_DeviceDefault_Light_ActionBar_TabText_Inverse = 16974251; // 0x10301ab
+    field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_TabText_Inverse = 16974251; // 0x10301ab
     field public static final int Widget_DeviceDefault_Light_ActionBar_TabView = 16974244; // 0x10301a4
-    field public static final int Widget_DeviceDefault_Light_ActionBar_TabView_Inverse = 16974250; // 0x10301aa
+    field public static final deprecated int Widget_DeviceDefault_Light_ActionBar_TabView_Inverse = 16974250; // 0x10301aa
     field public static final int Widget_DeviceDefault_Light_ActionButton = 16974239; // 0x103019f
     field public static final int Widget_DeviceDefault_Light_ActionButton_CloseMode = 16974242; // 0x10301a2
     field public static final int Widget_DeviceDefault_Light_ActionButton_Overflow = 16974240; // 0x10301a0
     field public static final int Widget_DeviceDefault_Light_ActionMode = 16974241; // 0x10301a1
-    field public static final int Widget_DeviceDefault_Light_ActionMode_Inverse = 16974252; // 0x10301ac
+    field public static final deprecated int Widget_DeviceDefault_Light_ActionMode_Inverse = 16974252; // 0x10301ac
     field public static final int Widget_DeviceDefault_Light_AutoCompleteTextView = 16974203; // 0x103017b
     field public static final int Widget_DeviceDefault_Light_Button = 16974197; // 0x1030175
     field public static final int Widget_DeviceDefault_Light_Button_Borderless_Small = 16974201; // 0x1030179
@@ -1901,6 +2116,8 @@
     field public static final int Widget_DeviceDefault_Light_DropDownItem_Spinner = 16974233; // 0x1030199
     field public static final int Widget_DeviceDefault_Light_EditText = 16974206; // 0x103017e
     field public static final int Widget_DeviceDefault_Light_ExpandableListView = 16974207; // 0x103017f
+    field public static final int Widget_DeviceDefault_Light_FastScroll = 16974349; // 0x103020d
+    field public static final int Widget_DeviceDefault_Light_FragmentBreadCrumbs = 16974350; // 0x103020e
     field public static final int Widget_DeviceDefault_Light_GridView = 16974208; // 0x1030180
     field public static final int Widget_DeviceDefault_Light_HorizontalScrollView = 16974226; // 0x1030192
     field public static final int Widget_DeviceDefault_Light_ImageButton = 16974209; // 0x1030181
@@ -1924,6 +2141,7 @@
     field public static final int Widget_DeviceDefault_Light_ScrollView = 16974225; // 0x1030191
     field public static final int Widget_DeviceDefault_Light_SeekBar = 16974220; // 0x103018c
     field public static final int Widget_DeviceDefault_Light_Spinner = 16974227; // 0x1030193
+    field public static final int Widget_DeviceDefault_Light_StackView = 16974351; // 0x103020f
     field public static final int Widget_DeviceDefault_Light_Tab = 16974237; // 0x103019d
     field public static final int Widget_DeviceDefault_Light_TabWidget = 16974229; // 0x1030195
     field public static final int Widget_DeviceDefault_Light_TextView = 16974202; // 0x103017a
@@ -1947,6 +2165,7 @@
     field public static final int Widget_DeviceDefault_ScrollView = 16974170; // 0x103015a
     field public static final int Widget_DeviceDefault_SeekBar = 16974165; // 0x1030155
     field public static final int Widget_DeviceDefault_Spinner = 16974172; // 0x103015c
+    field public static final int Widget_DeviceDefault_StackView = 16974348; // 0x103020c
     field public static final int Widget_DeviceDefault_Tab = 16974189; // 0x103016d
     field public static final int Widget_DeviceDefault_TabWidget = 16974174; // 0x103015e
     field public static final int Widget_DeviceDefault_TextView = 16974150; // 0x1030146
@@ -1957,6 +2176,7 @@
     field public static final int Widget_DropDownItem_Spinner = 16973868; // 0x103002c
     field public static final int Widget_EditText = 16973859; // 0x1030023
     field public static final int Widget_ExpandableListView = 16973860; // 0x1030024
+    field public static final int Widget_FastScroll = 16974337; // 0x1030201
     field public static final int Widget_FragmentBreadCrumbs = 16973961; // 0x1030089
     field public static final int Widget_Gallery = 16973877; // 0x1030035
     field public static final int Widget_GridView = 16973874; // 0x1030032
@@ -1988,6 +2208,8 @@
     field public static final int Widget_Holo_DropDownItem_Spinner = 16973995; // 0x10300ab
     field public static final int Widget_Holo_EditText = 16973971; // 0x1030093
     field public static final int Widget_Holo_ExpandableListView = 16973972; // 0x1030094
+    field public static final int Widget_Holo_FastScroll = 16974339; // 0x1030203
+    field public static final int Widget_Holo_FragmentBreadCrumbs = 16974340; // 0x1030204
     field public static final int Widget_Holo_GridView = 16973973; // 0x1030095
     field public static final int Widget_Holo_HorizontalScrollView = 16973988; // 0x10300a4
     field public static final int Widget_Holo_ImageButton = 16973974; // 0x1030096
@@ -2008,6 +2230,7 @@
     field public static final int Widget_Holo_Light_ActionMode_Inverse = 16974119; // 0x1030127
     field public static final int Widget_Holo_Light_AutoCompleteTextView = 16974011; // 0x10300bb
     field public static final int Widget_Holo_Light_Button = 16974006; // 0x10300b6
+    field public static final int Widget_Holo_Light_Button_Borderless = 16974342; // 0x1030206
     field public static final int Widget_Holo_Light_Button_Borderless_Small = 16974107; // 0x103011b
     field public static final int Widget_Holo_Light_Button_Inset = 16974008; // 0x10300b8
     field public static final int Widget_Holo_Light_Button_Small = 16974007; // 0x10300b7
@@ -2021,6 +2244,8 @@
     field public static final int Widget_Holo_Light_DropDownItem_Spinner = 16974041; // 0x10300d9
     field public static final int Widget_Holo_Light_EditText = 16974014; // 0x10300be
     field public static final int Widget_Holo_Light_ExpandableListView = 16974015; // 0x10300bf
+    field public static final int Widget_Holo_Light_FastScroll = 16974343; // 0x1030207
+    field public static final int Widget_Holo_Light_FragmentBreadCrumbs = 16974344; // 0x1030208
     field public static final int Widget_Holo_Light_GridView = 16974016; // 0x10300c0
     field public static final int Widget_Holo_Light_HorizontalScrollView = 16974034; // 0x10300d2
     field public static final int Widget_Holo_Light_ImageButton = 16974017; // 0x10300c1
@@ -2044,6 +2269,7 @@
     field public static final int Widget_Holo_Light_ScrollView = 16974033; // 0x10300d1
     field public static final int Widget_Holo_Light_SeekBar = 16974028; // 0x10300cc
     field public static final int Widget_Holo_Light_Spinner = 16974035; // 0x10300d3
+    field public static final int Widget_Holo_Light_StackView = 16974345; // 0x1030209
     field public static final int Widget_Holo_Light_Tab = 16974052; // 0x10300e4
     field public static final int Widget_Holo_Light_TabWidget = 16974037; // 0x10300d5
     field public static final int Widget_Holo_Light_TextView = 16974010; // 0x10300ba
@@ -2067,6 +2293,7 @@
     field public static final int Widget_Holo_ScrollView = 16973987; // 0x10300a3
     field public static final int Widget_Holo_SeekBar = 16973982; // 0x103009e
     field public static final int Widget_Holo_Spinner = 16973989; // 0x10300a5
+    field public static final int Widget_Holo_StackView = 16974341; // 0x1030205
     field public static final int Widget_Holo_Tab = 16974051; // 0x10300e3
     field public static final int Widget_Holo_TabWidget = 16973991; // 0x10300a7
     field public static final int Widget_Holo_TextView = 16973967; // 0x103008f
@@ -2090,16 +2317,174 @@
     field public static final int Widget_ProgressBar_Large_Inverse = 16973916; // 0x103005c
     field public static final int Widget_ProgressBar_Small = 16973854; // 0x103001e
     field public static final int Widget_ProgressBar_Small_Inverse = 16973917; // 0x103005d
+    field public static final int Widget_Quantum = 16974414; // 0x103024e
+    field public static final int Widget_Quantum_ActionBar = 16974415; // 0x103024f
+    field public static final int Widget_Quantum_ActionBar_Solid = 16974416; // 0x1030250
+    field public static final int Widget_Quantum_ActionBar_TabBar = 16974417; // 0x1030251
+    field public static final int Widget_Quantum_ActionBar_TabText = 16974418; // 0x1030252
+    field public static final int Widget_Quantum_ActionBar_TabView = 16974419; // 0x1030253
+    field public static final int Widget_Quantum_ActionButton = 16974420; // 0x1030254
+    field public static final int Widget_Quantum_ActionButton_CloseMode = 16974421; // 0x1030255
+    field public static final int Widget_Quantum_ActionButton_Overflow = 16974422; // 0x1030256
+    field public static final int Widget_Quantum_ActionMode = 16974423; // 0x1030257
+    field public static final int Widget_Quantum_AutoCompleteTextView = 16974424; // 0x1030258
+    field public static final int Widget_Quantum_Button = 16974425; // 0x1030259
+    field public static final int Widget_Quantum_ButtonBar = 16974433; // 0x1030261
+    field public static final int Widget_Quantum_ButtonBar_AlertDialog = 16974434; // 0x1030262
+    field public static final int Widget_Quantum_Button_Borderless = 16974426; // 0x103025a
+    field public static final int Widget_Quantum_Button_Borderless_Small = 16974427; // 0x103025b
+    field public static final int Widget_Quantum_Button_Inset = 16974428; // 0x103025c
+    field public static final int Widget_Quantum_Button_Paper = 16974431; // 0x103025f
+    field public static final int Widget_Quantum_Button_Paper_Color = 16974432; // 0x1030260
+    field public static final int Widget_Quantum_Button_Small = 16974429; // 0x103025d
+    field public static final int Widget_Quantum_Button_Toggle = 16974430; // 0x103025e
+    field public static final int Widget_Quantum_CalendarView = 16974435; // 0x1030263
+    field public static final int Widget_Quantum_CheckedTextView = 16974436; // 0x1030264
+    field public static final int Widget_Quantum_CompoundButton_CheckBox = 16974437; // 0x1030265
+    field public static final int Widget_Quantum_CompoundButton_RadioButton = 16974438; // 0x1030266
+    field public static final int Widget_Quantum_CompoundButton_Star = 16974439; // 0x1030267
+    field public static final int Widget_Quantum_DatePicker = 16974440; // 0x1030268
+    field public static final int Widget_Quantum_DropDownItem = 16974441; // 0x1030269
+    field public static final int Widget_Quantum_DropDownItem_Spinner = 16974442; // 0x103026a
+    field public static final int Widget_Quantum_EditText = 16974443; // 0x103026b
+    field public static final int Widget_Quantum_ExpandableListView = 16974444; // 0x103026c
+    field public static final int Widget_Quantum_FastScroll = 16974445; // 0x103026d
+    field public static final int Widget_Quantum_FragmentBreadCrumbs = 16974446; // 0x103026e
+    field public static final int Widget_Quantum_GridView = 16974447; // 0x103026f
+    field public static final int Widget_Quantum_HorizontalScrollView = 16974448; // 0x1030270
+    field public static final int Widget_Quantum_ImageButton = 16974449; // 0x1030271
+    field public static final int Widget_Quantum_Light = 16974475; // 0x103028b
+    field public static final int Widget_Quantum_Light_ActionBar = 16974476; // 0x103028c
+    field public static final int Widget_Quantum_Light_ActionBar_Solid = 16974477; // 0x103028d
+    field public static final int Widget_Quantum_Light_ActionBar_TabBar = 16974478; // 0x103028e
+    field public static final int Widget_Quantum_Light_ActionBar_TabText = 16974479; // 0x103028f
+    field public static final int Widget_Quantum_Light_ActionBar_TabView = 16974480; // 0x1030290
+    field public static final int Widget_Quantum_Light_ActionButton = 16974481; // 0x1030291
+    field public static final int Widget_Quantum_Light_ActionButton_CloseMode = 16974482; // 0x1030292
+    field public static final int Widget_Quantum_Light_ActionButton_Overflow = 16974483; // 0x1030293
+    field public static final int Widget_Quantum_Light_ActionMode = 16974484; // 0x1030294
+    field public static final int Widget_Quantum_Light_AutoCompleteTextView = 16974485; // 0x1030295
+    field public static final int Widget_Quantum_Light_Button = 16974486; // 0x1030296
+    field public static final int Widget_Quantum_Light_ButtonBar = 16974494; // 0x103029e
+    field public static final int Widget_Quantum_Light_ButtonBar_AlertDialog = 16974495; // 0x103029f
+    field public static final int Widget_Quantum_Light_Button_Borderless = 16974487; // 0x1030297
+    field public static final int Widget_Quantum_Light_Button_Borderless_Small = 16974488; // 0x1030298
+    field public static final int Widget_Quantum_Light_Button_Inset = 16974489; // 0x1030299
+    field public static final int Widget_Quantum_Light_Button_Paper = 16974492; // 0x103029c
+    field public static final int Widget_Quantum_Light_Button_Paper_Color = 16974493; // 0x103029d
+    field public static final int Widget_Quantum_Light_Button_Small = 16974490; // 0x103029a
+    field public static final int Widget_Quantum_Light_Button_Toggle = 16974491; // 0x103029b
+    field public static final int Widget_Quantum_Light_CalendarView = 16974496; // 0x10302a0
+    field public static final int Widget_Quantum_Light_CheckedTextView = 16974497; // 0x10302a1
+    field public static final int Widget_Quantum_Light_CompoundButton_CheckBox = 16974498; // 0x10302a2
+    field public static final int Widget_Quantum_Light_CompoundButton_RadioButton = 16974499; // 0x10302a3
+    field public static final int Widget_Quantum_Light_CompoundButton_Star = 16974500; // 0x10302a4
+    field public static final int Widget_Quantum_Light_DropDownItem = 16974501; // 0x10302a5
+    field public static final int Widget_Quantum_Light_DropDownItem_Spinner = 16974502; // 0x10302a6
+    field public static final int Widget_Quantum_Light_EditText = 16974503; // 0x10302a7
+    field public static final int Widget_Quantum_Light_ExpandableListView = 16974504; // 0x10302a8
+    field public static final int Widget_Quantum_Light_FastScroll = 16974505; // 0x10302a9
+    field public static final int Widget_Quantum_Light_FragmentBreadCrumbs = 16974506; // 0x10302aa
+    field public static final int Widget_Quantum_Light_GridView = 16974507; // 0x10302ab
+    field public static final int Widget_Quantum_Light_HorizontalScrollView = 16974508; // 0x10302ac
+    field public static final int Widget_Quantum_Light_ImageButton = 16974509; // 0x10302ad
+    field public static final int Widget_Quantum_Light_ListPopupWindow = 16974510; // 0x10302ae
+    field public static final int Widget_Quantum_Light_ListView = 16974511; // 0x10302af
+    field public static final int Widget_Quantum_Light_ListView_DropDown = 16974512; // 0x10302b0
+    field public static final int Widget_Quantum_Light_MediaRouteButton = 16974513; // 0x10302b1
+    field public static final int Widget_Quantum_Light_PopupMenu = 16974514; // 0x10302b2
+    field public static final int Widget_Quantum_Light_PopupWindow = 16974515; // 0x10302b3
+    field public static final int Widget_Quantum_Light_ProgressBar = 16974516; // 0x10302b4
+    field public static final int Widget_Quantum_Light_ProgressBar_Horizontal = 16974517; // 0x10302b5
+    field public static final int Widget_Quantum_Light_ProgressBar_Inverse = 16974518; // 0x10302b6
+    field public static final int Widget_Quantum_Light_ProgressBar_Large = 16974519; // 0x10302b7
+    field public static final int Widget_Quantum_Light_ProgressBar_Large_Inverse = 16974520; // 0x10302b8
+    field public static final int Widget_Quantum_Light_ProgressBar_Small = 16974521; // 0x10302b9
+    field public static final int Widget_Quantum_Light_ProgressBar_Small_Inverse = 16974522; // 0x10302ba
+    field public static final int Widget_Quantum_Light_ProgressBar_Small_Title = 16974523; // 0x10302bb
+    field public static final int Widget_Quantum_Light_RatingBar = 16974524; // 0x10302bc
+    field public static final int Widget_Quantum_Light_RatingBar_Indicator = 16974525; // 0x10302bd
+    field public static final int Widget_Quantum_Light_RatingBar_Small = 16974526; // 0x10302be
+    field public static final int Widget_Quantum_Light_ScrollView = 16974527; // 0x10302bf
+    field public static final int Widget_Quantum_Light_SeekBar = 16974528; // 0x10302c0
+    field public static final int Widget_Quantum_Light_SegmentedButton = 16974529; // 0x10302c1
+    field public static final int Widget_Quantum_Light_Spinner = 16974531; // 0x10302c3
+    field public static final int Widget_Quantum_Light_StackView = 16974530; // 0x10302c2
+    field public static final int Widget_Quantum_Light_Tab = 16974532; // 0x10302c4
+    field public static final int Widget_Quantum_Light_TabWidget = 16974533; // 0x10302c5
+    field public static final int Widget_Quantum_Light_TextView = 16974534; // 0x10302c6
+    field public static final int Widget_Quantum_Light_TextView_SpinnerItem = 16974535; // 0x10302c7
+    field public static final int Widget_Quantum_Light_WebTextView = 16974536; // 0x10302c8
+    field public static final int Widget_Quantum_Light_WebView = 16974537; // 0x10302c9
+    field public static final int Widget_Quantum_ListPopupWindow = 16974450; // 0x1030272
+    field public static final int Widget_Quantum_ListView = 16974451; // 0x1030273
+    field public static final int Widget_Quantum_ListView_DropDown = 16974452; // 0x1030274
+    field public static final int Widget_Quantum_MediaRouteButton = 16974453; // 0x1030275
+    field public static final int Widget_Quantum_PopupMenu = 16974454; // 0x1030276
+    field public static final int Widget_Quantum_PopupWindow = 16974455; // 0x1030277
+    field public static final int Widget_Quantum_ProgressBar = 16974456; // 0x1030278
+    field public static final int Widget_Quantum_ProgressBar_Horizontal = 16974457; // 0x1030279
+    field public static final int Widget_Quantum_ProgressBar_Large = 16974458; // 0x103027a
+    field public static final int Widget_Quantum_ProgressBar_Small = 16974459; // 0x103027b
+    field public static final int Widget_Quantum_ProgressBar_Small_Title = 16974460; // 0x103027c
+    field public static final int Widget_Quantum_RatingBar = 16974461; // 0x103027d
+    field public static final int Widget_Quantum_RatingBar_Indicator = 16974462; // 0x103027e
+    field public static final int Widget_Quantum_RatingBar_Small = 16974463; // 0x103027f
+    field public static final int Widget_Quantum_ScrollView = 16974464; // 0x1030280
+    field public static final int Widget_Quantum_SeekBar = 16974465; // 0x1030281
+    field public static final int Widget_Quantum_SegmentedButton = 16974466; // 0x1030282
+    field public static final int Widget_Quantum_Spinner = 16974468; // 0x1030284
+    field public static final int Widget_Quantum_StackView = 16974467; // 0x1030283
+    field public static final int Widget_Quantum_Tab = 16974469; // 0x1030285
+    field public static final int Widget_Quantum_TabWidget = 16974470; // 0x1030286
+    field public static final int Widget_Quantum_TextView = 16974471; // 0x1030287
+    field public static final int Widget_Quantum_TextView_SpinnerItem = 16974472; // 0x1030288
+    field public static final int Widget_Quantum_WebTextView = 16974473; // 0x1030289
+    field public static final int Widget_Quantum_WebView = 16974474; // 0x103028a
     field public static final int Widget_RatingBar = 16973857; // 0x1030021
     field public static final int Widget_ScrollView = 16973869; // 0x103002d
     field public static final int Widget_SeekBar = 16973856; // 0x1030020
     field public static final int Widget_Spinner = 16973864; // 0x1030028
     field public static final int Widget_Spinner_DropDown = 16973955; // 0x1030083
+    field public static final int Widget_StackView = 16974338; // 0x1030202
     field public static final int Widget_TabWidget = 16973876; // 0x1030034
     field public static final int Widget_TextView = 16973858; // 0x1030022
     field public static final int Widget_TextView_PopupMenu = 16973865; // 0x1030029
     field public static final int Widget_TextView_SpinnerItem = 16973866; // 0x103002a
     field public static final int Widget_WebView = 16973875; // 0x1030033
+    field public static final int l_resource_pad1 = 16974336; // 0x1030200
+    field public static final int l_resource_pad10 = 16974327; // 0x10301f7
+    field public static final int l_resource_pad11 = 16974326; // 0x10301f6
+    field public static final int l_resource_pad12 = 16974325; // 0x10301f5
+    field public static final int l_resource_pad13 = 16974324; // 0x10301f4
+    field public static final int l_resource_pad14 = 16974323; // 0x10301f3
+    field public static final int l_resource_pad15 = 16974322; // 0x10301f2
+    field public static final int l_resource_pad16 = 16974321; // 0x10301f1
+    field public static final int l_resource_pad17 = 16974320; // 0x10301f0
+    field public static final int l_resource_pad18 = 16974319; // 0x10301ef
+    field public static final int l_resource_pad19 = 16974318; // 0x10301ee
+    field public static final int l_resource_pad2 = 16974335; // 0x10301ff
+    field public static final int l_resource_pad20 = 16974317; // 0x10301ed
+    field public static final int l_resource_pad21 = 16974316; // 0x10301ec
+    field public static final int l_resource_pad22 = 16974315; // 0x10301eb
+    field public static final int l_resource_pad23 = 16974314; // 0x10301ea
+    field public static final int l_resource_pad24 = 16974313; // 0x10301e9
+    field public static final int l_resource_pad25 = 16974312; // 0x10301e8
+    field public static final int l_resource_pad26 = 16974311; // 0x10301e7
+    field public static final int l_resource_pad27 = 16974310; // 0x10301e6
+    field public static final int l_resource_pad28 = 16974309; // 0x10301e5
+    field public static final int l_resource_pad3 = 16974334; // 0x10301fe
+    field public static final int l_resource_pad4 = 16974333; // 0x10301fd
+    field public static final int l_resource_pad5 = 16974332; // 0x10301fc
+    field public static final int l_resource_pad6 = 16974331; // 0x10301fb
+    field public static final int l_resource_pad7 = 16974330; // 0x10301fa
+    field public static final int l_resource_pad8 = 16974329; // 0x10301f9
+    field public static final int l_resource_pad9 = 16974328; // 0x10301f8
+  }
+
+  public static final class R.transition {
+    ctor public R.transition();
+    field public static final int no_transition = 17760256; // 0x10f0000
   }
 
   public static final class R.xml {
@@ -2112,8 +2497,10 @@
 
   public abstract class AccessibilityService extends android.app.Service {
     ctor public AccessibilityService();
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
     method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
     method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
+    method public java.util.List<android.view.accessibility.AccessibilityWindowInfo> getWindows();
     method public abstract void onAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
     method public final android.os.IBinder onBind(android.content.Intent);
     method protected boolean onGesture(int);
@@ -2179,6 +2566,7 @@
     field public static final int FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY = 8; // 0x8
     field public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 32; // 0x20
     field public static final int FLAG_REQUEST_TOUCH_EXPLORATION_MODE = 4; // 0x4
+    field public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 64; // 0x40
     field public int eventTypes;
     field public int feedbackType;
     field public int flags;
@@ -2439,11 +2827,23 @@
     method public java.lang.Object evaluate(float, java.lang.Object, java.lang.Object);
   }
 
+  public class FloatArrayEvaluator implements android.animation.TypeEvaluator {
+    ctor public FloatArrayEvaluator();
+    ctor public FloatArrayEvaluator(float[]);
+    method public float[] evaluate(float, float[], float[]);
+  }
+
   public class FloatEvaluator implements android.animation.TypeEvaluator {
     ctor public FloatEvaluator();
     method public java.lang.Float evaluate(float, java.lang.Number, java.lang.Number);
   }
 
+  public class IntArrayEvaluator implements android.animation.TypeEvaluator {
+    ctor public IntArrayEvaluator();
+    ctor public IntArrayEvaluator(int[]);
+    method public int[] evaluate(float, int[], int[]);
+  }
+
   public class IntEvaluator implements android.animation.TypeEvaluator {
     ctor public IntEvaluator();
     method public java.lang.Integer evaluate(float, java.lang.Integer, java.lang.Integer);
@@ -2512,18 +2912,39 @@
     ctor public ObjectAnimator();
     method public java.lang.String getPropertyName();
     method public java.lang.Object getTarget();
+    method public static android.animation.ObjectAnimator ofArgb(java.lang.Object, java.lang.String, int...);
+    method public static android.animation.ObjectAnimator ofArgb(T, android.util.Property<T, java.lang.Integer>, int...);
     method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, float...);
+    method public static android.animation.ObjectAnimator ofFloat(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, float...);
+    method public static android.animation.ObjectAnimator ofFloat(T, android.util.Property<T, java.lang.Float>, android.util.Property<T, java.lang.Float>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, int...);
+    method public static android.animation.ObjectAnimator ofInt(java.lang.Object, java.lang.String, java.lang.String, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, int...);
+    method public static android.animation.ObjectAnimator ofInt(T, android.util.Property<T, java.lang.Integer>, android.util.Property<T, java.lang.Integer>, android.graphics.Path);
+    method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, float[][]);
+    method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.graphics.Path);
+    method public static android.animation.ObjectAnimator ofMultiFloat(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, T...);
+    method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, int[][]);
+    method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.graphics.Path);
+    method public static android.animation.ObjectAnimator ofMultiInt(java.lang.Object, java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, T...);
     method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
+    method public static android.animation.ObjectAnimator ofObject(java.lang.Object, java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeEvaluator<V>, V...);
+    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, P>, android.animation.TypeConverter<V, P>, android.animation.TypeEvaluator<V>, V...);
+    method public static android.animation.ObjectAnimator ofObject(T, android.util.Property<T, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
     method public static android.animation.ObjectAnimator ofPropertyValuesHolder(java.lang.Object, android.animation.PropertyValuesHolder...);
     method public void setAutoCancel(boolean);
     method public void setProperty(android.util.Property);
     method public void setPropertyName(java.lang.String);
   }
 
+  public class PointFEvaluator implements android.animation.TypeEvaluator {
+    ctor public PointFEvaluator();
+    ctor public PointFEvaluator(android.graphics.PointF);
+    method public android.graphics.PointF evaluate(float, android.graphics.PointF, android.graphics.PointF);
+  }
+
   public class PropertyValuesHolder implements java.lang.Cloneable {
     method public android.animation.PropertyValuesHolder clone();
     method public java.lang.String getPropertyName();
@@ -2533,8 +2954,20 @@
     method public static android.animation.PropertyValuesHolder ofInt(android.util.Property<?, java.lang.Integer>, int...);
     method public static android.animation.PropertyValuesHolder ofKeyframe(java.lang.String, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofKeyframe(android.util.Property, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, float[][]);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.graphics.Path);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<V, float[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static android.animation.PropertyValuesHolder ofMultiFloat(java.lang.String, android.animation.TypeConverter<T, float[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, int[][]);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.graphics.Path);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<V, int[]>, android.animation.TypeEvaluator<V>, V...);
+    method public static android.animation.PropertyValuesHolder ofMultiInt(java.lang.String, android.animation.TypeConverter<T, int[]>, android.animation.TypeEvaluator<T>, android.animation.Keyframe...);
     method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeEvaluator, java.lang.Object...);
+    method public static android.animation.PropertyValuesHolder ofObject(java.lang.String, android.animation.TypeConverter<android.graphics.PointF, ?>, android.graphics.Path);
     method public static android.animation.PropertyValuesHolder ofObject(android.util.Property, android.animation.TypeEvaluator<V>, V...);
+    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<T, V>, android.animation.TypeEvaluator<T>, T...);
+    method public static android.animation.PropertyValuesHolder ofObject(android.util.Property<?, V>, android.animation.TypeConverter<android.graphics.PointF, V>, android.graphics.Path);
+    method public void setConverter(android.animation.TypeConverter);
     method public void setEvaluator(android.animation.TypeEvaluator);
     method public void setFloatValues(float...);
     method public void setIntValues(int...);
@@ -2546,6 +2979,7 @@
 
   public class RectEvaluator implements android.animation.TypeEvaluator {
     ctor public RectEvaluator();
+    ctor public RectEvaluator(android.graphics.Rect);
     method public android.graphics.Rect evaluate(float, android.graphics.Rect, android.graphics.Rect);
   }
 
@@ -2562,6 +2996,12 @@
     method public abstract float getInterpolation(float);
   }
 
+  public abstract class TypeConverter {
+    ctor public TypeConverter(java.lang.Class<T>, java.lang.Class<V>);
+    method public abstract V convert(T);
+    method public T convertBack(V);
+  }
+
   public abstract interface TypeEvaluator {
     method public abstract T evaluate(float, T, T);
   }
@@ -2580,6 +3020,7 @@
     method public long getStartDelay();
     method public android.animation.PropertyValuesHolder[] getValues();
     method public boolean isRunning();
+    method public static android.animation.ValueAnimator ofArgb(int...);
     method public static android.animation.ValueAnimator ofFloat(float...);
     method public static android.animation.ValueAnimator ofInt(int...);
     method public static android.animation.ValueAnimator ofObject(android.animation.TypeEvaluator, java.lang.Object...);
@@ -2625,30 +3066,32 @@
   public abstract class ActionBar {
     ctor public ActionBar();
     method public abstract void addOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener);
-    method public abstract void addTab(android.app.ActionBar.Tab);
-    method public abstract void addTab(android.app.ActionBar.Tab, boolean);
-    method public abstract void addTab(android.app.ActionBar.Tab, int);
-    method public abstract void addTab(android.app.ActionBar.Tab, int, boolean);
+    method public abstract deprecated void addTab(android.app.ActionBar.Tab);
+    method public abstract deprecated void addTab(android.app.ActionBar.Tab, boolean);
+    method public abstract deprecated void addTab(android.app.ActionBar.Tab, int);
+    method public abstract deprecated void addTab(android.app.ActionBar.Tab, int, boolean);
     method public abstract android.view.View getCustomView();
     method public abstract int getDisplayOptions();
     method public abstract int getHeight();
-    method public abstract int getNavigationItemCount();
-    method public abstract int getNavigationMode();
-    method public abstract int getSelectedNavigationIndex();
-    method public abstract android.app.ActionBar.Tab getSelectedTab();
+    method public int getHideOffset();
+    method public abstract deprecated int getNavigationItemCount();
+    method public abstract deprecated int getNavigationMode();
+    method public abstract deprecated int getSelectedNavigationIndex();
+    method public abstract deprecated android.app.ActionBar.Tab getSelectedTab();
     method public abstract java.lang.CharSequence getSubtitle();
-    method public abstract android.app.ActionBar.Tab getTabAt(int);
-    method public abstract int getTabCount();
+    method public abstract deprecated android.app.ActionBar.Tab getTabAt(int);
+    method public abstract deprecated int getTabCount();
     method public android.content.Context getThemedContext();
     method public abstract java.lang.CharSequence getTitle();
     method public abstract void hide();
+    method public boolean isHideOnContentScrollEnabled();
     method public abstract boolean isShowing();
-    method public abstract android.app.ActionBar.Tab newTab();
-    method public abstract void removeAllTabs();
+    method public abstract deprecated android.app.ActionBar.Tab newTab();
+    method public abstract deprecated void removeAllTabs();
     method public abstract void removeOnMenuVisibilityListener(android.app.ActionBar.OnMenuVisibilityListener);
-    method public abstract void removeTab(android.app.ActionBar.Tab);
-    method public abstract void removeTabAt(int);
-    method public abstract void selectTab(android.app.ActionBar.Tab);
+    method public abstract deprecated void removeTab(android.app.ActionBar.Tab);
+    method public abstract deprecated void removeTabAt(int);
+    method public abstract deprecated void selectTab(android.app.ActionBar.Tab);
     method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public abstract void setCustomView(android.view.View);
     method public abstract void setCustomView(android.view.View, android.app.ActionBar.LayoutParams);
@@ -2660,6 +3103,8 @@
     method public abstract void setDisplayShowHomeEnabled(boolean);
     method public abstract void setDisplayShowTitleEnabled(boolean);
     method public abstract void setDisplayUseLogoEnabled(boolean);
+    method public void setHideOffset(int);
+    method public void setHideOnContentScrollEnabled(boolean);
     method public void setHomeActionContentDescription(java.lang.CharSequence);
     method public void setHomeActionContentDescription(int);
     method public void setHomeAsUpIndicator(android.graphics.drawable.Drawable);
@@ -2667,11 +3112,11 @@
     method public void setHomeButtonEnabled(boolean);
     method public abstract void setIcon(int);
     method public abstract void setIcon(android.graphics.drawable.Drawable);
-    method public abstract void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.app.ActionBar.OnNavigationListener);
+    method public abstract deprecated void setListNavigationCallbacks(android.widget.SpinnerAdapter, android.app.ActionBar.OnNavigationListener);
     method public abstract void setLogo(int);
     method public abstract void setLogo(android.graphics.drawable.Drawable);
-    method public abstract void setNavigationMode(int);
-    method public abstract void setSelectedNavigationItem(int);
+    method public abstract deprecated void setNavigationMode(int);
+    method public abstract deprecated void setSelectedNavigationItem(int);
     method public void setSplitBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setStackedBackgroundDrawable(android.graphics.drawable.Drawable);
     method public abstract void setSubtitle(java.lang.CharSequence);
@@ -2684,9 +3129,9 @@
     field public static final int DISPLAY_SHOW_HOME = 2; // 0x2
     field public static final int DISPLAY_SHOW_TITLE = 8; // 0x8
     field public static final int DISPLAY_USE_LOGO = 1; // 0x1
-    field public static final int NAVIGATION_MODE_LIST = 1; // 0x1
-    field public static final int NAVIGATION_MODE_STANDARD = 0; // 0x0
-    field public static final int NAVIGATION_MODE_TABS = 2; // 0x2
+    field public static final deprecated int NAVIGATION_MODE_LIST = 1; // 0x1
+    field public static final deprecated int NAVIGATION_MODE_STANDARD = 0; // 0x0
+    field public static final deprecated int NAVIGATION_MODE_TABS = 2; // 0x2
   }
 
   public static class ActionBar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
@@ -2696,6 +3141,7 @@
     ctor public ActionBar.LayoutParams(int);
     ctor public ActionBar.LayoutParams(android.app.ActionBar.LayoutParams);
     ctor public ActionBar.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public ActionBar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
     field public int gravity;
   }
 
@@ -2703,11 +3149,11 @@
     method public abstract void onMenuVisibilityChanged(boolean);
   }
 
-  public static abstract interface ActionBar.OnNavigationListener {
+  public static abstract deprecated interface ActionBar.OnNavigationListener {
     method public abstract boolean onNavigationItemSelected(int, long);
   }
 
-  public static abstract class ActionBar.Tab {
+  public static abstract deprecated class ActionBar.Tab {
     ctor public ActionBar.Tab();
     method public abstract java.lang.CharSequence getContentDescription();
     method public abstract android.view.View getCustomView();
@@ -2729,7 +3175,7 @@
     field public static final int INVALID_POSITION = -1; // 0xffffffff
   }
 
-  public static abstract interface ActionBar.TabListener {
+  public static abstract deprecated interface ActionBar.TabListener {
     method public abstract void onTabReselected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
     method public abstract void onTabSelected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
     method public abstract void onTabUnselected(android.app.ActionBar.Tab, android.app.FragmentTransaction);
@@ -2754,13 +3200,17 @@
     method public void finishActivity(int);
     method public void finishActivityFromChild(android.app.Activity, int);
     method public void finishAffinity();
+    method public void finishAndRemoveTask();
     method public void finishFromChild(android.app.Activity);
+    method public void finishWithTransition();
     method public android.app.ActionBar getActionBar();
     method public final android.app.Application getApplication();
     method public android.content.ComponentName getCallingActivity();
     method public java.lang.String getCallingPackage();
     method public int getChangingConfigurations();
     method public android.content.ComponentName getComponentName();
+    method public android.transition.Scene getContentScene();
+    method public android.transition.TransitionManager getContentTransitionManager();
     method public android.view.View getCurrentFocus();
     method public android.app.FragmentManager getFragmentManager();
     method public android.content.Intent getIntent();
@@ -2776,6 +3226,7 @@
     method public int getTaskId();
     method public final java.lang.CharSequence getTitle();
     method public final int getTitleColor();
+    method public android.app.VoiceInteractor getVoiceInteractor();
     method public final int getVolumeControlStream();
     method public android.view.Window getWindow();
     method public android.view.WindowManager getWindowManager();
@@ -2787,6 +3238,7 @@
     method public boolean isFinishing();
     method public boolean isImmersive();
     method public boolean isTaskRoot();
+    method public boolean isVoiceInteraction();
     method public final deprecated android.database.Cursor managedQuery(android.net.Uri, java.lang.String[], java.lang.String, java.lang.String[], java.lang.String);
     method public boolean moveTaskToBack(boolean);
     method public boolean navigateUpTo(android.content.Intent);
@@ -2867,6 +3319,10 @@
     method public void reportFullyDrawn();
     method public final boolean requestWindowFeature(int);
     method public final void runOnUiThread(java.lang.Runnable);
+    method public void setActionBar(android.widget.Toolbar);
+    method public void setActivityLabelAndIcon(java.lang.CharSequence, android.graphics.Bitmap);
+    method public void setActivityTransitionListener(android.app.ActivityOptions.ActivityTransitionListener);
+    method public void setContentTransitionManager(android.transition.TransitionManager);
     method public void setContentView(int);
     method public void setContentView(android.view.View);
     method public void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
@@ -2888,7 +3344,7 @@
     method public final void setSecondaryProgress(int);
     method public void setTitle(java.lang.CharSequence);
     method public void setTitle(int);
-    method public void setTitleColor(int);
+    method public deprecated void setTitleColor(int);
     method public void setVisible(boolean);
     method public final void setVolumeControlStream(int);
     method public boolean shouldUpRecreateTask(android.content.Intent);
@@ -3002,6 +3458,8 @@
     method public void readFromParcel(android.os.Parcel);
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator CREATOR;
+    field public android.graphics.Bitmap activityIcon;
+    field public java.lang.CharSequence activityLabel;
     field public android.content.Intent baseIntent;
     field public java.lang.CharSequence description;
     field public int id;
@@ -3081,11 +3539,28 @@
   public class ActivityOptions {
     method public static android.app.ActivityOptions makeCustomAnimation(android.content.Context, int, int);
     method public static android.app.ActivityOptions makeScaleUpAnimation(android.view.View, int, int, int, int);
+    method public static android.app.ActivityOptions makeSceneTransitionAnimation(android.view.Window, android.view.View, java.lang.String);
+    method public static android.app.ActivityOptions makeSceneTransitionAnimation(android.view.Window, android.app.ActivityOptions.ActivityTransitionListener);
     method public static android.app.ActivityOptions makeThumbnailScaleUpAnimation(android.view.View, android.graphics.Bitmap, int, int);
     method public android.os.Bundle toBundle();
     method public void update(android.app.ActivityOptions);
   }
 
+  public static class ActivityOptions.ActivityTransitionListener {
+    ctor public ActivityOptions.ActivityTransitionListener();
+    method public android.util.Pair<android.view.View, java.lang.String>[] getSharedElementsMapping();
+    method public boolean handleRejectedSharedElements(java.util.List<android.view.View>);
+    method public void onCaptureSharedElementEnd(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+    method public void onCaptureSharedElementStart(java.util.List<java.lang.String>, java.util.List<android.view.View>, java.util.List<android.view.View>);
+    method public void onEnterReady();
+    method public void onExitTransitionComplete();
+    method public void onRemoteExitComplete();
+    method public void onSharedElementExitTransitionComplete();
+    method public void onSharedElementTransferred(java.util.List<java.lang.String>, java.util.List<android.view.View>);
+    method public void onStartEnterTransition(java.util.List<java.lang.String>, java.util.List<android.view.View>);
+    method public void onStartExitTransition(java.util.List<java.lang.String>, java.util.List<android.view.View>);
+  }
+
   public class AlarmManager {
     method public void cancel(android.app.PendingIntent);
     method public void set(int, long, android.app.PendingIntent);
@@ -3171,6 +3646,7 @@
     method public android.app.AlertDialog.Builder setSingleChoiceItems(android.widget.ListAdapter, int, android.content.DialogInterface.OnClickListener);
     method public android.app.AlertDialog.Builder setTitle(int);
     method public android.app.AlertDialog.Builder setTitle(java.lang.CharSequence);
+    method public android.app.AlertDialog.Builder setView(int);
     method public android.app.AlertDialog.Builder setView(android.view.View);
     method public android.app.AlertDialog show();
   }
@@ -3320,6 +3796,7 @@
     method public void addContentView(android.view.View, android.view.ViewGroup.LayoutParams);
     method public void cancel();
     method public void closeOptionsMenu();
+    method public void create();
     method public void dismiss();
     method public boolean dispatchGenericMotionEvent(android.view.MotionEvent);
     method public boolean dispatchKeyEvent(android.view.KeyEvent);
@@ -3607,6 +4084,7 @@
     ctor public FragmentBreadCrumbs(android.content.Context);
     ctor public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet);
     ctor public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet, int);
+    ctor public FragmentBreadCrumbs(android.content.Context, android.util.AttributeSet, int, int);
     method public void onBackStackChanged();
     method protected void onLayout(boolean, int, int, int, int);
     method public void setActivity(android.app.Activity);
@@ -3893,6 +4371,7 @@
     ctor public MediaRouteButton(android.content.Context);
     ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet);
     ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public MediaRouteButton(android.content.Context, android.util.AttributeSet, int, int);
     method public int getRouteTypes();
     method public void onAttachedToWindow();
     method public void onDetachedFromWindow();
@@ -3954,6 +4433,7 @@
     field public static final java.lang.String EXTRA_SMALL_ICON = "android.icon";
     field public static final java.lang.String EXTRA_SUB_TEXT = "android.subText";
     field public static final java.lang.String EXTRA_SUMMARY_TEXT = "android.summaryText";
+    field public static final java.lang.String EXTRA_TEMPLATE = "android.template";
     field public static final java.lang.String EXTRA_TEXT = "android.text";
     field public static final java.lang.String EXTRA_TEXT_LINES = "android.textLines";
     field public static final java.lang.String EXTRA_TITLE = "android.title";
@@ -3973,6 +4453,9 @@
     field public static final int PRIORITY_MAX = 2; // 0x2
     field public static final int PRIORITY_MIN = -2; // 0xfffffffe
     field public static final int STREAM_DEFAULT = -1; // 0xffffffff
+    field public static final int VISIBILITY_PRIVATE = 0; // 0x0
+    field public static final int VISIBILITY_PUBLIC = 1; // 0x1
+    field public static final int VISIBILITY_SECRET = -1; // 0xffffffff
     field public android.app.Notification.Action[] actions;
     field public int audioStreamType;
     field public android.widget.RemoteViews bigContentView;
@@ -3992,10 +4475,12 @@
     field public int ledOnMS;
     field public int number;
     field public int priority;
+    field public android.app.Notification publicVersion;
     field public android.net.Uri sound;
     field public java.lang.CharSequence tickerText;
     field public android.widget.RemoteViews tickerView;
     field public long[] vibrate;
+    field public int visibility;
     field public long when;
   }
 
@@ -4031,6 +4516,7 @@
     ctor public Notification.Builder(android.content.Context);
     method public android.app.Notification.Builder addAction(int, java.lang.CharSequence, android.app.PendingIntent);
     method public android.app.Notification.Builder addExtras(android.os.Bundle);
+    method public android.app.Notification.Builder addPerson(java.lang.String);
     method public android.app.Notification build();
     method public android.os.Bundle getExtras();
     method public deprecated android.app.Notification getNotification();
@@ -4053,6 +4539,7 @@
     method public android.app.Notification.Builder setOnlyAlertOnce(boolean);
     method public android.app.Notification.Builder setPriority(int);
     method public android.app.Notification.Builder setProgress(int, int, boolean);
+    method public android.app.Notification.Builder setPublicVersion(android.app.Notification);
     method public android.app.Notification.Builder setShowWhen(boolean);
     method public android.app.Notification.Builder setSmallIcon(int);
     method public android.app.Notification.Builder setSmallIcon(int, int);
@@ -4064,6 +4551,7 @@
     method public android.app.Notification.Builder setTicker(java.lang.CharSequence, android.widget.RemoteViews);
     method public android.app.Notification.Builder setUsesChronometer(boolean);
     method public android.app.Notification.Builder setVibrate(long[]);
+    method public android.app.Notification.Builder setVisibility(int);
     method public android.app.Notification.Builder setWhen(long);
   }
 
@@ -4327,9 +4815,15 @@
   }
 
   public final class UiAutomation {
+    method public void clearWindowAnimationFrameStats();
+    method public boolean clearWindowContentFrameStats(int);
     method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(java.lang.Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;
+    method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
     method public android.view.accessibility.AccessibilityNodeInfo getRootInActiveWindow();
     method public final android.accessibilityservice.AccessibilityServiceInfo getServiceInfo();
+    method public android.view.WindowAnimationFrameStats getWindowAnimationFrameStats();
+    method public android.view.WindowContentFrameStats getWindowContentFrameStats(int);
+    method public java.util.List<android.view.accessibility.AccessibilityWindowInfo> getWindows();
     method public boolean injectInputEvent(android.view.InputEvent, boolean);
     method public final boolean performGlobalAction(int);
     method public void setOnAccessibilityEventListener(android.app.UiAutomation.OnAccessibilityEventListener);
@@ -4371,6 +4865,29 @@
     field public static final int MODE_NIGHT_YES = 2; // 0x2
   }
 
+  public class VoiceInteractor {
+    method public boolean submitRequest(android.app.VoiceInteractor.Request);
+    method public boolean[] supportsCommands(java.lang.String[]);
+  }
+
+  public static class VoiceInteractor.CommandRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.CommandRequest(java.lang.String, android.os.Bundle);
+    method public void onCommandResult(android.os.Bundle);
+  }
+
+  public static class VoiceInteractor.ConfirmationRequest extends android.app.VoiceInteractor.Request {
+    ctor public VoiceInteractor.ConfirmationRequest(java.lang.CharSequence, android.os.Bundle);
+    method public void onConfirmationResult(boolean, android.os.Bundle);
+  }
+
+  public static abstract class VoiceInteractor.Request {
+    ctor public VoiceInteractor.Request();
+    method public void cancel();
+    method public android.app.Activity getActivity();
+    method public android.content.Context getContext();
+    method public void onCancel();
+  }
+
   public final class WallpaperInfo implements android.os.Parcelable {
     ctor public WallpaperInfo(android.content.Context, android.content.pm.ResolveInfo) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public int describeContents();
@@ -4464,6 +4981,7 @@
     method public void onPasswordExpiring(android.content.Context, android.content.Intent);
     method public void onPasswordFailed(android.content.Context, android.content.Intent);
     method public void onPasswordSucceeded(android.content.Context, android.content.Intent);
+    method public void onProfileProvisioningComplete(android.content.Context, android.content.Intent);
     method public void onReceive(android.content.Context, android.content.Intent);
     field public static final java.lang.String ACTION_DEVICE_ADMIN_DISABLED = "android.app.action.DEVICE_ADMIN_DISABLED";
     field public static final java.lang.String ACTION_DEVICE_ADMIN_DISABLE_REQUESTED = "android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED";
@@ -4472,12 +4990,20 @@
     field public static final java.lang.String ACTION_PASSWORD_EXPIRING = "android.app.action.ACTION_PASSWORD_EXPIRING";
     field public static final java.lang.String ACTION_PASSWORD_FAILED = "android.app.action.ACTION_PASSWORD_FAILED";
     field public static final java.lang.String ACTION_PASSWORD_SUCCEEDED = "android.app.action.ACTION_PASSWORD_SUCCEEDED";
+    field public static final java.lang.String ACTION_PROFILE_PROVISIONING_COMPLETE = "android.app.action.ACTION_PROFILE_PROVISIONING_COMPLETE";
     field public static final java.lang.String DEVICE_ADMIN_META_DATA = "android.app.device_admin";
     field public static final java.lang.String EXTRA_DISABLE_WARNING = "android.app.extra.DISABLE_WARNING";
   }
 
   public class DevicePolicyManager {
+    method public void addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName);
+    method public void addUserRestriction(android.content.ComponentName, java.lang.String);
+    method public void clearForwardingIntentFilters(android.content.ComponentName);
+    method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String);
+    method public void clearUserRestriction(android.content.ComponentName, java.lang.String);
+    method public void forwardMatchingIntents(android.content.ComponentName, android.content.IntentFilter, int);
     method public java.util.List<android.content.ComponentName> getActiveAdmins();
+    method public android.os.Bundle getApplicationRestrictions(android.content.ComponentName, java.lang.String);
     method public boolean getCameraDisabled(android.content.ComponentName);
     method public int getCurrentFailedPasswordAttempts();
     method public int getKeyguardDisabledFeatures(android.content.ComponentName);
@@ -4501,9 +5027,11 @@
     method public boolean isActivePasswordSufficient();
     method public boolean isAdminActive(android.content.ComponentName);
     method public boolean isDeviceOwnerApp(java.lang.String);
+    method public boolean isProfileOwnerApp(java.lang.String);
     method public void lockNow();
     method public void removeActiveAdmin(android.content.ComponentName);
     method public boolean resetPassword(java.lang.String, int);
+    method public void setApplicationRestrictions(android.content.ComponentName, java.lang.String, android.os.Bundle);
     method public void setCameraDisabled(android.content.ComponentName, boolean);
     method public void setKeyguardDisabledFeatures(android.content.ComponentName, int);
     method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int);
@@ -4518,9 +5046,11 @@
     method public void setPasswordMinimumSymbols(android.content.ComponentName, int);
     method public void setPasswordMinimumUpperCase(android.content.ComponentName, int);
     method public void setPasswordQuality(android.content.ComponentName, int);
+    method public void setProfileEnabled(android.content.ComponentName);
     method public int setStorageEncryption(android.content.ComponentName, boolean);
     method public void wipeData(int);
     field public static final java.lang.String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN";
+    field public static final java.lang.String ACTION_PROVISION_MANAGED_PROFILE = "android.app.action.ACTION_PROVISION_MANAGED_PROFILE";
     field public static final java.lang.String ACTION_SET_NEW_PASSWORD = "android.app.action.SET_NEW_PASSWORD";
     field public static final java.lang.String ACTION_START_ENCRYPTION = "android.app.action.START_ENCRYPTION";
     field public static final int ENCRYPTION_STATUS_ACTIVATING = 2; // 0x2
@@ -4529,9 +5059,16 @@
     field public static final int ENCRYPTION_STATUS_UNSUPPORTED = 0; // 0x0
     field public static final java.lang.String EXTRA_ADD_EXPLANATION = "android.app.extra.ADD_EXPLANATION";
     field public static final java.lang.String EXTRA_DEVICE_ADMIN = "android.app.extra.DEVICE_ADMIN";
+    field public static final java.lang.String EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME = "defaultManagedProfileName";
+    field public static final java.lang.String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME = "deviceAdminPackageName";
+    field public static int FLAG_TO_MANAGED_PROFILE;
+    field public static int FLAG_TO_PRIMARY_USER;
     field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff
     field public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0; // 0x0
     field public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 2; // 0x2
+    field public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 4; // 0x4
+    field public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 16; // 0x10
+    field public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 8; // 0x8
     field public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1; // 0x1
     field public static final int PASSWORD_QUALITY_ALPHABETIC = 262144; // 0x40000
     field public static final int PASSWORD_QUALITY_ALPHANUMERIC = 327680; // 0x50000
@@ -4628,6 +5165,41 @@
 
 }
 
+package android.app.maintenance {
+
+  public abstract class IdleService extends android.app.Service {
+    ctor public IdleService();
+    method public final void finishIdle();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract boolean onIdleStart();
+    method public abstract void onIdleStop();
+    field public static final java.lang.String PERMISSION_BIND = "android.permission.BIND_IDLE_SERVICE";
+    field public static final java.lang.String SERVICE_INTERFACE = "android.service.idle.IdleService";
+  }
+
+}
+
+package android.app.task {
+
+  public class TaskParams implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.os.Bundle getExtras();
+    method public int getTaskId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+  public abstract class TaskService extends android.app.Service {
+    ctor public TaskService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onStartTask(android.app.task.TaskParams);
+    method public abstract boolean onStopTask(android.app.task.TaskParams);
+    method public final void taskFinished(android.app.task.TaskParams, boolean);
+    field public static final java.lang.String PERMISSION_BIND = "android.permission.BIND_TASK_SERVICE";
+  }
+
+}
+
 package android.appwidget {
 
   public class AppWidgetHost {
@@ -4681,15 +5253,19 @@
     field public static final java.lang.String ACTION_APPWIDGET_DELETED = "android.appwidget.action.APPWIDGET_DELETED";
     field public static final java.lang.String ACTION_APPWIDGET_DISABLED = "android.appwidget.action.APPWIDGET_DISABLED";
     field public static final java.lang.String ACTION_APPWIDGET_ENABLED = "android.appwidget.action.APPWIDGET_ENABLED";
+    field public static final java.lang.String ACTION_APPWIDGET_HOST_RESTORED = "android.appwidget.action.APPWIDGET_HOST_RESTORED";
     field public static final java.lang.String ACTION_APPWIDGET_OPTIONS_CHANGED = "android.appwidget.action.APPWIDGET_UPDATE_OPTIONS";
     field public static final java.lang.String ACTION_APPWIDGET_PICK = "android.appwidget.action.APPWIDGET_PICK";
+    field public static final java.lang.String ACTION_APPWIDGET_RESTORED = "android.appwidget.action.APPWIDGET_RESTORED";
     field public static final java.lang.String ACTION_APPWIDGET_UPDATE = "android.appwidget.action.APPWIDGET_UPDATE";
     field public static final java.lang.String EXTRA_APPWIDGET_ID = "appWidgetId";
     field public static final java.lang.String EXTRA_APPWIDGET_IDS = "appWidgetIds";
+    field public static final java.lang.String EXTRA_APPWIDGET_OLD_IDS = "appWidgetOldIds";
     field public static final java.lang.String EXTRA_APPWIDGET_OPTIONS = "appWidgetOptions";
     field public static final java.lang.String EXTRA_APPWIDGET_PROVIDER = "appWidgetProvider";
     field public static final java.lang.String EXTRA_CUSTOM_EXTRAS = "customExtras";
     field public static final java.lang.String EXTRA_CUSTOM_INFO = "customInfo";
+    field public static final java.lang.String EXTRA_HOST_ID = "hostId";
     field public static final int INVALID_APPWIDGET_ID = 0; // 0x0
     field public static final java.lang.String META_DATA_APPWIDGET_PROVIDER = "android.appwidget.provider";
     field public static final java.lang.String OPTION_APPWIDGET_HOST_CATEGORY = "appWidgetCategory";
@@ -4706,6 +5282,7 @@
     method public void onDisabled(android.content.Context);
     method public void onEnabled(android.content.Context);
     method public void onReceive(android.content.Context, android.content.Intent);
+    method public void onRestored(android.content.Context, int[], int[]);
     method public void onUpdate(android.content.Context, android.appwidget.AppWidgetManager, int[]);
   }
 
@@ -5780,6 +6357,8 @@
     method public final android.os.Bundle call(android.net.Uri, java.lang.String, java.lang.String, android.os.Bundle);
     method public deprecated void cancelSync(android.net.Uri);
     method public static void cancelSync(android.accounts.Account, java.lang.String);
+    method public static void cancelSync(android.content.ComponentName);
+    method public static void cancelSync(android.content.SyncRequest);
     method public final android.net.Uri canonicalize(android.net.Uri);
     method public final int delete(android.net.Uri, java.lang.String, java.lang.String[]);
     method public static deprecated android.content.SyncInfo getCurrentSync();
@@ -5788,14 +6367,18 @@
     method public static boolean getMasterSyncAutomatically();
     method public java.util.List<android.content.UriPermission> getOutgoingPersistedUriPermissions();
     method public static java.util.List<android.content.PeriodicSync> getPeriodicSyncs(android.accounts.Account, java.lang.String);
+    method public static java.util.List<android.content.PeriodicSync> getPeriodicSyncs(android.content.ComponentName);
     method public java.util.List<android.content.UriPermission> getPersistedUriPermissions();
     method public java.lang.String[] getStreamTypes(android.net.Uri, java.lang.String);
     method public static android.content.SyncAdapterType[] getSyncAdapterTypes();
     method public static boolean getSyncAutomatically(android.accounts.Account, java.lang.String);
     method public final java.lang.String getType(android.net.Uri);
     method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public static boolean isServiceActive(android.content.ComponentName);
     method public static boolean isSyncActive(android.accounts.Account, java.lang.String);
+    method public static boolean isSyncActive(android.content.ComponentName);
     method public static boolean isSyncPending(android.accounts.Account, java.lang.String);
+    method public static boolean isSyncPending(android.content.ComponentName);
     method public void notifyChange(android.net.Uri, android.database.ContentObserver);
     method public void notifyChange(android.net.Uri, android.database.ContentObserver, boolean);
     method public final android.content.res.AssetFileDescriptor openAssetFileDescriptor(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
@@ -5817,6 +6400,7 @@
     method public static void requestSync(android.content.SyncRequest);
     method public static void setIsSyncable(android.accounts.Account, java.lang.String, int);
     method public static void setMasterSyncAutomatically(boolean);
+    method public static void setServiceActive(android.content.ComponentName, boolean);
     method public static void setSyncAutomatically(android.accounts.Account, java.lang.String, boolean);
     method public deprecated void startSync(android.net.Uri, android.os.Bundle);
     method public void takePersistableUriPermission(android.net.Uri, int);
@@ -5824,6 +6408,7 @@
     method public final void unregisterContentObserver(android.database.ContentObserver);
     method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
     method public static void validateSyncExtrasBundle(android.os.Bundle);
+    field public static final java.lang.String ANY_CURSOR_ITEM_TYPE = "vnd.android.cursor.item/*";
     field public static final java.lang.String CURSOR_DIR_BASE_TYPE = "vnd.android.cursor.dir";
     field public static final java.lang.String CURSOR_ITEM_BASE_TYPE = "vnd.android.cursor.item";
     field public static final java.lang.String SCHEME_ANDROID_RESOURCE = "android.resource";
@@ -5922,6 +6507,7 @@
     method public abstract android.content.ContentResolver getContentResolver();
     method public abstract java.io.File getDatabasePath(java.lang.String);
     method public abstract java.io.File getDir(java.lang.String, int);
+    method public final android.graphics.drawable.Drawable getDrawable(int);
     method public abstract java.io.File getExternalCacheDir();
     method public abstract java.io.File[] getExternalCacheDirs();
     method public abstract java.io.File getExternalFilesDir(java.lang.String);
@@ -5994,6 +6580,7 @@
     field public static final java.lang.String ALARM_SERVICE = "alarm";
     field public static final java.lang.String APP_OPS_SERVICE = "appops";
     field public static final java.lang.String AUDIO_SERVICE = "audio";
+    field public static final java.lang.String BATTERY_SERVICE = "batterymanager";
     field public static final int BIND_ABOVE_CLIENT = 8; // 0x8
     field public static final int BIND_ADJUST_WITH_ACTIVITY = 128; // 0x80
     field public static final int BIND_ALLOW_OOM_MANAGEMENT = 16; // 0x10
@@ -6003,6 +6590,7 @@
     field public static final int BIND_NOT_FOREGROUND = 4; // 0x4
     field public static final int BIND_WAIVE_PRIORITY = 32; // 0x20
     field public static final java.lang.String BLUETOOTH_SERVICE = "bluetooth";
+    field public static final java.lang.String CAMERA_SERVICE = "camera";
     field public static final java.lang.String CAPTIONING_SERVICE = "captioning";
     field public static final java.lang.String CLIPBOARD_SERVICE = "clipboard";
     field public static final java.lang.String CONNECTIVITY_SERVICE = "connectivity";
@@ -6018,9 +6606,11 @@
     field public static final java.lang.String INPUT_METHOD_SERVICE = "input_method";
     field public static final java.lang.String INPUT_SERVICE = "input";
     field public static final java.lang.String KEYGUARD_SERVICE = "keyguard";
+    field public static final java.lang.String LAUNCHER_APPS_SERVICE = "launcherapps";
     field public static final java.lang.String LAYOUT_INFLATER_SERVICE = "layout_inflater";
     field public static final java.lang.String LOCATION_SERVICE = "location";
     field public static final java.lang.String MEDIA_ROUTER_SERVICE = "media_router";
+    field public static final java.lang.String MEDIA_SESSION_SERVICE = "media_session";
     field public static final int MODE_APPEND = 32768; // 0x8000
     field public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 8; // 0x8
     field public static final int MODE_MULTI_PROCESS = 4; // 0x4
@@ -6037,11 +6627,13 @@
     field public static final java.lang.String STORAGE_SERVICE = "storage";
     field public static final java.lang.String TELEPHONY_SERVICE = "phone";
     field public static final java.lang.String TEXT_SERVICES_MANAGER_SERVICE = "textservices";
+    field public static final java.lang.String TV_INPUT_SERVICE = "tv_input";
     field public static final java.lang.String UI_MODE_SERVICE = "uimode";
     field public static final java.lang.String USB_SERVICE = "usb";
     field public static final java.lang.String USER_SERVICE = "user";
     field public static final java.lang.String VIBRATOR_SERVICE = "vibrator";
     field public static final java.lang.String WALLPAPER_SERVICE = "wallpaper";
+    field public static final java.lang.String WIFI_HOTSPOT_SERVICE = "wifihotspot";
     field public static final java.lang.String WIFI_P2P_SERVICE = "wifip2p";
     field public static final java.lang.String WIFI_SERVICE = "wifi";
     field public static final java.lang.String WINDOW_SERVICE = "window";
@@ -6342,6 +6934,7 @@
     field public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE";
     field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS";
     field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER";
+    field public static final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED = "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED";
     field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR";
     field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST";
     field public static final java.lang.String ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA";
@@ -6382,6 +6975,8 @@
     field public static final java.lang.String ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE";
     field public static final java.lang.String ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED";
     field public static final java.lang.String ACTION_MAIN = "android.intent.action.MAIN";
+    field public static final java.lang.String ACTION_MANAGED_PROFILE_ADDED = "android.intent.action.MANAGED_PROFILE_ADDED";
+    field public static final java.lang.String ACTION_MANAGED_PROFILE_REMOVED = "android.intent.action.MANAGED_PROFILE_REMOVED";
     field public static final java.lang.String ACTION_MANAGE_NETWORK_USAGE = "android.intent.action.MANAGE_NETWORK_USAGE";
     field public static final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE = "android.intent.action.MANAGE_PACKAGE_STORAGE";
     field public static final java.lang.String ACTION_MEDIA_BAD_REMOVAL = "android.intent.action.MEDIA_BAD_REMOVAL";
@@ -6414,6 +7009,7 @@
     field public static final java.lang.String ACTION_PASTE = "android.intent.action.PASTE";
     field public static final java.lang.String ACTION_PICK = "android.intent.action.PICK";
     field public static final java.lang.String ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY";
+    field public static final java.lang.String ACTION_PICK_DIRECTORY = "android.intent.action.PICK_DIRECTORY";
     field public static final java.lang.String ACTION_POWER_CONNECTED = "android.intent.action.ACTION_POWER_CONNECTED";
     field public static final java.lang.String ACTION_POWER_DISCONNECTED = "android.intent.action.ACTION_POWER_DISCONNECTED";
     field public static final java.lang.String ACTION_POWER_USAGE_SUMMARY = "android.intent.action.POWER_USAGE_SUMMARY";
@@ -6473,6 +7069,7 @@
     field public static final java.lang.String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER";
     field public static final java.lang.String CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK";
     field public static final java.lang.String CATEGORY_MONKEY = "android.intent.category.MONKEY";
+    field public static final java.lang.String CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
     field public static final java.lang.String CATEGORY_OPENABLE = "android.intent.category.OPENABLE";
     field public static final java.lang.String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE";
     field public static final java.lang.String CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE";
@@ -6480,6 +7077,7 @@
     field public static final java.lang.String CATEGORY_TAB = "android.intent.category.TAB";
     field public static final java.lang.String CATEGORY_TEST = "android.intent.category.TEST";
     field public static final java.lang.String CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST";
+    field public static final java.lang.String CATEGORY_VOICE = "android.intent.category.VOICE";
     field public static final android.os.Parcelable.Creator CREATOR;
     field public static final java.lang.String EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT";
     field public static final java.lang.String EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE";
@@ -6530,6 +7128,7 @@
     field public static final java.lang.String EXTRA_TEXT = "android.intent.extra.TEXT";
     field public static final java.lang.String EXTRA_TITLE = "android.intent.extra.TITLE";
     field public static final java.lang.String EXTRA_UID = "android.intent.extra.UID";
+    field public static final java.lang.String EXTRA_USER = "android.intent.extra.user";
     field public static final int FILL_IN_ACTION = 1; // 0x1
     field public static final int FILL_IN_CATEGORIES = 4; // 0x4
     field public static final int FILL_IN_CLIP_DATA = 128; // 0x80
@@ -6546,6 +7145,7 @@
     field public static final int FLAG_ACTIVITY_FORWARD_RESULT = 33554432; // 0x2000000
     field public static final int FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY = 1048576; // 0x100000
     field public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 134217728; // 0x8000000
+    field public static final int FLAG_ACTIVITY_NEW_DOCUMENT = 268959744; // 0x10080000
     field public static final int FLAG_ACTIVITY_NEW_TASK = 268435456; // 0x10000000
     field public static final int FLAG_ACTIVITY_NO_ANIMATION = 65536; // 0x10000
     field public static final int FLAG_ACTIVITY_NO_HISTORY = 1073741824; // 0x40000000
@@ -6559,6 +7159,7 @@
     field public static final int FLAG_EXCLUDE_STOPPED_PACKAGES = 16; // 0x10
     field public static final int FLAG_FROM_BACKGROUND = 4; // 0x4
     field public static final int FLAG_GRANT_PERSISTABLE_URI_PERMISSION = 64; // 0x40
+    field public static final int FLAG_GRANT_PREFIX_URI_PERMISSION = 128; // 0x80
     field public static final int FLAG_GRANT_READ_URI_PERMISSION = 1; // 0x1
     field public static final int FLAG_GRANT_WRITE_URI_PERMISSION = 2; // 0x2
     field public static final int FLAG_INCLUDE_STOPPED_PACKAGES = 32; // 0x20
@@ -6762,7 +7363,9 @@
     field public final android.accounts.Account account;
     field public final java.lang.String authority;
     field public final android.os.Bundle extras;
+    field public final boolean isService;
     field public final long period;
+    field public final android.content.ComponentName service;
   }
 
   public class ReceiverCallNotAllowedException extends android.util.AndroidRuntimeException {
@@ -6878,11 +7481,13 @@
     method public void writeToParcel(android.os.Parcel, int);
     field public final android.accounts.Account account;
     field public final java.lang.String authority;
+    field public final android.content.ComponentName service;
     field public final long startTime;
   }
 
   public class SyncRequest implements android.os.Parcelable {
     method public int describeContents();
+    method public boolean isExpedited();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator CREATOR;
   }
@@ -6897,7 +7502,10 @@
     method public android.content.SyncRequest.Builder setIgnoreSettings(boolean);
     method public android.content.SyncRequest.Builder setManual(boolean);
     method public android.content.SyncRequest.Builder setNoRetry(boolean);
+    method public android.content.SyncRequest.Builder setPriority(int);
     method public android.content.SyncRequest.Builder setSyncAdapter(android.accounts.Account, java.lang.String);
+    method public android.content.SyncRequest.Builder setSyncAdapter(android.content.ComponentName);
+    method public android.content.SyncRequest.Builder setTransferSize(long, long);
     method public android.content.SyncRequest.Builder syncOnce();
     method public android.content.SyncRequest.Builder syncPeriodic(long, long);
   }
@@ -6925,6 +7533,13 @@
     field public boolean tooManyRetries;
   }
 
+  public abstract class SyncService extends android.app.Service {
+    ctor public SyncService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract void onPerformSync(android.os.Bundle, android.content.SyncResult);
+    method protected boolean parallelSyncsEnabled();
+  }
+
   public class SyncStats implements android.os.Parcelable {
     ctor public SyncStats();
     ctor public SyncStats(android.os.Parcel);
@@ -6947,6 +7562,55 @@
     method public abstract void onStatusChanged(int);
   }
 
+  public class Task implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getBackoffPolicy();
+    method public android.os.Bundle getExtras();
+    method public long getInitialBackoffMillis();
+    method public long getIntervalMillis();
+    method public long getMaxExecutionDelayMillis();
+    method public long getMinLatencyMillis();
+    method public int getNetworkCapabilities();
+    method public java.lang.String getServiceClassName();
+    method public int getTaskId();
+    method public boolean isPeriodic();
+    method public boolean isRequireCharging();
+    method public boolean isRequireDeviceIdle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+  public static abstract interface Task.BackoffPolicy {
+    field public static final int EXPONENTIAL = 1; // 0x1
+    field public static final int LINEAR = 0; // 0x0
+  }
+
+  public final class Task.Builder {
+    ctor public Task.Builder(int, java.lang.Class<android.app.task.TaskService>);
+    method public android.content.Task build();
+    method public android.content.Task.Builder setBackoffCriteria(long, int);
+    method public android.content.Task.Builder setExtras(android.os.Bundle);
+    method public android.content.Task.Builder setMinimumLatency(long);
+    method public android.content.Task.Builder setOverrideDeadline(long);
+    method public android.content.Task.Builder setPeriodic(long);
+    method public android.content.Task.Builder setRequiredNetworkCapabilities(int);
+    method public android.content.Task.Builder setRequiresCharging(boolean);
+    method public android.content.Task.Builder setRequiresDeviceIdle(boolean);
+  }
+
+  public static abstract interface Task.NetworkType {
+    field public static final int ANY = 0; // 0x0
+    field public static final int UNMETERED = 1; // 0x1
+  }
+
+  public abstract class TaskManager {
+    ctor public TaskManager();
+    method public abstract void cancel(int);
+    method public abstract void cancelAll();
+    method public abstract java.util.List<android.content.Task> getAllPendingTasks();
+    method public abstract int schedule(android.content.Task);
+  }
+
   public class UriMatcher {
     ctor public UriMatcher(int);
     method public void addURI(java.lang.String, java.lang.String, int);
@@ -7171,6 +7835,35 @@
     field public static final android.os.Parcelable.Creator CREATOR;
   }
 
+  public class LauncherActivityInfo {
+    method public int getApplicationFlags();
+    method public android.graphics.drawable.Drawable getBadgedIcon(int);
+    method public android.content.ComponentName getComponentName();
+    method public long getFirstInstallTime();
+    method public android.graphics.drawable.Drawable getIcon(int);
+    method public java.lang.CharSequence getLabel();
+    method public java.lang.String getName();
+    method public android.os.UserHandle getUser();
+  }
+
+  public class LauncherApps {
+    method public synchronized void addOnAppsChangedListener(android.content.pm.LauncherApps.OnAppsChangedListener);
+    method public java.util.List<android.content.pm.LauncherActivityInfo> getActivityList(java.lang.String, android.os.UserHandle);
+    method public boolean isActivityEnabledForProfile(android.content.ComponentName, android.os.UserHandle);
+    method public boolean isPackageEnabledForProfile(java.lang.String, android.os.UserHandle);
+    method public synchronized void removeOnAppsChangedListener(android.content.pm.LauncherApps.OnAppsChangedListener);
+    method public android.content.pm.LauncherActivityInfo resolveActivity(android.content.Intent, android.os.UserHandle);
+    method public void startActivityForProfile(android.content.ComponentName, android.graphics.Rect, android.os.Bundle, android.os.UserHandle);
+  }
+
+  public static abstract interface LauncherApps.OnAppsChangedListener {
+    method public abstract void onPackageAdded(android.os.UserHandle, java.lang.String);
+    method public abstract void onPackageChanged(android.os.UserHandle, java.lang.String);
+    method public abstract void onPackageRemoved(android.os.UserHandle, java.lang.String);
+    method public abstract void onPackagesAvailable(android.os.UserHandle, java.lang.String[], boolean);
+    method public abstract void onPackagesUnavailable(android.os.UserHandle, java.lang.String[], boolean);
+  }
+
   public class PackageInfo implements android.os.Parcelable {
     ctor public PackageInfo();
     method public int describeContents();
@@ -7335,6 +8028,7 @@
     field public static final java.lang.String FEATURE_LOCATION = "android.hardware.location";
     field public static final java.lang.String FEATURE_LOCATION_GPS = "android.hardware.location.gps";
     field public static final java.lang.String FEATURE_LOCATION_NETWORK = "android.hardware.location.network";
+    field public static final java.lang.String FEATURE_MANAGEDPROFILES = "android.software.managedprofiles";
     field public static final java.lang.String FEATURE_MICROPHONE = "android.hardware.microphone";
     field public static final java.lang.String FEATURE_NFC = "android.hardware.nfc";
     field public static final java.lang.String FEATURE_NFC_HOST_CARD_EMULATION = "android.hardware.nfc.hce";
@@ -7585,7 +8279,6 @@
   public final class AssetManager.AssetInputStream extends java.io.InputStream {
     method public final int available() throws java.io.IOException;
     method public final void close() throws java.io.IOException;
-    method public final int getAssetInt();
     method public final void mark(int);
     method public final boolean markSupported();
     method public final int read() throws java.io.IOException;
@@ -7601,6 +8294,7 @@
     method public int describeContents();
     method public int getColorForState(int[], int);
     method public int getDefaultColor();
+    method public boolean isOpaque();
     method public boolean isStateful();
     method public static android.content.res.ColorStateList valueOf(int);
     method public android.content.res.ColorStateList withAlpha(int);
@@ -7734,7 +8428,9 @@
     method public int getDimensionPixelSize(int) throws android.content.res.Resources.NotFoundException;
     method public android.util.DisplayMetrics getDisplayMetrics();
     method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawable(int, android.content.res.Resources.Theme) throws android.content.res.Resources.NotFoundException;
     method public android.graphics.drawable.Drawable getDrawableForDensity(int, int) throws android.content.res.Resources.NotFoundException;
+    method public android.graphics.drawable.Drawable getDrawableForDensity(int, int, android.content.res.Resources.Theme);
     method public float getFraction(int, int, int);
     method public int getIdentifier(java.lang.String, java.lang.String, java.lang.String);
     method public int[] getIntArray(int) throws android.content.res.Resources.NotFoundException;
@@ -7778,6 +8474,8 @@
   public final class Resources.Theme {
     method public void applyStyle(int, boolean);
     method public void dump(int, java.lang.String, java.lang.String);
+    method public android.graphics.drawable.Drawable getDrawable(int) throws android.content.res.Resources.NotFoundException;
+    method public android.content.res.Resources getResources();
     method public android.content.res.TypedArray obtainStyledAttributes(int[]);
     method public android.content.res.TypedArray obtainStyledAttributes(int, int[]) throws android.content.res.Resources.NotFoundException;
     method public android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet, int[], int, int);
@@ -7808,6 +8506,7 @@
     method public java.lang.String getString(int);
     method public java.lang.CharSequence getText(int);
     method public java.lang.CharSequence[] getTextArray(int);
+    method public int getType(int);
     method public boolean getValue(int, android.util.TypedValue);
     method public boolean hasValue(int);
     method public int length();
@@ -8791,6 +9490,7 @@
     ctor public GestureOverlayView(android.content.Context);
     ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet);
     ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int);
+    ctor public GestureOverlayView(android.content.Context, android.util.AttributeSet, int, int);
     method public void addOnGestureListener(android.gesture.GestureOverlayView.OnGestureListener);
     method public void addOnGesturePerformedListener(android.gesture.GestureOverlayView.OnGesturePerformedListener);
     method public void addOnGesturingListener(android.gesture.GestureOverlayView.OnGesturingListener);
@@ -9117,8 +9817,8 @@
     method public void drawBitmap(android.graphics.Bitmap, float, float, android.graphics.Paint);
     method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.RectF, android.graphics.Paint);
     method public void drawBitmap(android.graphics.Bitmap, android.graphics.Rect, android.graphics.Rect, android.graphics.Paint);
-    method public void drawBitmap(int[], int, int, float, float, int, int, boolean, android.graphics.Paint);
-    method public void drawBitmap(int[], int, int, int, int, int, int, boolean, android.graphics.Paint);
+    method public deprecated void drawBitmap(int[], int, int, float, float, int, int, boolean, android.graphics.Paint);
+    method public deprecated void drawBitmap(int[], int, int, int, int, int, int, boolean, android.graphics.Paint);
     method public void drawBitmap(android.graphics.Bitmap, android.graphics.Matrix, android.graphics.Paint);
     method public void drawBitmapMesh(android.graphics.Bitmap, int, int, float[], int, int[], int, android.graphics.Paint);
     method public void drawCircle(float, float, float, android.graphics.Paint);
@@ -9143,6 +9843,7 @@
     method public void drawRect(android.graphics.Rect, android.graphics.Paint);
     method public void drawRect(float, float, float, float, android.graphics.Paint);
     method public void drawRoundRect(android.graphics.RectF, float, float, android.graphics.Paint);
+    method public void drawRoundRect(float, float, float, float, float, float, android.graphics.Paint);
     method public void drawText(char[], int, int, float, float, android.graphics.Paint);
     method public void drawText(java.lang.String, float, float, android.graphics.Paint);
     method public void drawText(java.lang.String, int, int, float, float, android.graphics.Paint);
@@ -9173,9 +9874,13 @@
     method public int save();
     method public int save(int);
     method public int saveLayer(android.graphics.RectF, android.graphics.Paint, int);
+    method public int saveLayer(android.graphics.RectF, android.graphics.Paint);
     method public int saveLayer(float, float, float, float, android.graphics.Paint, int);
+    method public int saveLayer(float, float, float, float, android.graphics.Paint);
     method public int saveLayerAlpha(android.graphics.RectF, int, int);
+    method public int saveLayerAlpha(android.graphics.RectF, int);
     method public int saveLayerAlpha(float, float, float, float, int, int);
+    method public int saveLayerAlpha(float, float, float, float, int);
     method public void scale(float, float);
     method public final void scale(float, float, float, float);
     method public void setBitmap(android.graphics.Bitmap);
@@ -9259,6 +9964,9 @@
   public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
     ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix);
     ctor public ColorMatrixColorFilter(float[]);
+    method public android.graphics.ColorMatrix getColorMatrix();
+    method public void setColorMatrix(android.graphics.ColorMatrix);
+    method public void setColorMatrix(float[]);
   }
 
   public class ComposePathEffect extends android.graphics.PathEffect {
@@ -9296,6 +10004,7 @@
     field public static final int JPEG = 256; // 0x100
     field public static final int NV16 = 16; // 0x10
     field public static final int NV21 = 17; // 0x11
+    field public static final int RAW_SENSOR = 32; // 0x20
     field public static final int RGB_565 = 4; // 0x4
     field public static final int UNKNOWN = 0; // 0x0
     field public static final int YUV_420_888 = 35; // 0x23
@@ -9333,6 +10042,10 @@
 
   public class LightingColorFilter extends android.graphics.ColorFilter {
     ctor public LightingColorFilter(int, int);
+    method public int getColorAdd();
+    method public int getColorMultiply();
+    method public void setColorAdd(int);
+    method public void setColorMultiply(int);
   }
 
   public class LinearGradient extends android.graphics.Shader {
@@ -9443,6 +10156,20 @@
     method public void setPaint(android.graphics.Paint);
   }
 
+  public final class Outline {
+    ctor public Outline();
+    ctor public Outline(android.graphics.Outline);
+    method public boolean isValid();
+    method public void set(android.graphics.Outline);
+    method public void setConvexPath(android.graphics.Path);
+    method public void setOval(int, int, int, int);
+    method public void setOval(android.graphics.Rect);
+    method public void setRect(int, int, int, int);
+    method public void setRect(android.graphics.Rect);
+    method public void setRoundRect(int, int, int, int, float);
+    method public void setRoundRect(android.graphics.Rect, float);
+  }
+
   public class Paint {
     ctor public Paint();
     ctor public Paint(int);
@@ -9490,6 +10217,7 @@
     method public android.graphics.Xfermode getXfermode();
     method public final boolean isAntiAlias();
     method public final boolean isDither();
+    method public boolean isElegantTextHeight();
     method public final boolean isFakeBoldText();
     method public final boolean isFilterBitmap();
     method public final boolean isLinearText();
@@ -9508,6 +10236,7 @@
     method public void setColor(int);
     method public android.graphics.ColorFilter setColorFilter(android.graphics.ColorFilter);
     method public void setDither(boolean);
+    method public void setElegantTextHeight(boolean);
     method public void setFakeBoldText(boolean);
     method public void setFilterBitmap(boolean);
     method public void setFlags(int);
@@ -9607,6 +10336,7 @@
     method public void addArc(android.graphics.RectF, float, float);
     method public void addCircle(float, float, float, android.graphics.Path.Direction);
     method public void addOval(android.graphics.RectF, android.graphics.Path.Direction);
+    method public void addOval(float, float, float, float, android.graphics.Path.Direction);
     method public void addPath(android.graphics.Path, float, float);
     method public void addPath(android.graphics.Path);
     method public void addPath(android.graphics.Path, android.graphics.Matrix);
@@ -9621,6 +10351,7 @@
     method public void cubicTo(float, float, float, float, float, float);
     method public android.graphics.Path.FillType getFillType();
     method public void incReserve(int);
+    method public boolean isConvex();
     method public boolean isEmpty();
     method public boolean isInverseFillType();
     method public boolean isRect(android.graphics.RectF);
@@ -9807,6 +10538,10 @@
 
   public class PorterDuffColorFilter extends android.graphics.ColorFilter {
     ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode);
+    method public int getColor();
+    method public android.graphics.PorterDuff.Mode getMode();
+    method public void setColor(int);
+    method public void setMode(android.graphics.PorterDuff.Mode);
   }
 
   public class PorterDuffXfermode extends android.graphics.Xfermode {
@@ -10080,6 +10815,7 @@
     method public final android.graphics.Paint getPaint();
     method public android.graphics.Shader.TileMode getTileModeX();
     method public android.graphics.Shader.TileMode getTileModeY();
+    method public android.content.res.ColorStateList getTint();
     method public boolean hasAntiAlias();
     method public boolean hasMipMap();
     method public final boolean isAutoMirrored();
@@ -10094,6 +10830,8 @@
     method public void setTileModeX(android.graphics.Shader.TileMode);
     method public void setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode);
     method public final void setTileModeY(android.graphics.Shader.TileMode);
+    method public void setTint(android.content.res.ColorStateList);
+    method public void setTintMode(android.graphics.PorterDuff.Mode);
   }
 
   public class ClipDrawable extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
@@ -10122,20 +10860,29 @@
 
   public abstract class Drawable {
     ctor public Drawable();
+    method public void applyTheme(android.content.res.Resources.Theme);
+    method public boolean canApplyTheme();
     method public void clearColorFilter();
+    method public void clearHotspots();
     method public final void copyBounds(android.graphics.Rect);
     method public final android.graphics.Rect copyBounds();
     method public static android.graphics.drawable.Drawable createFromPath(java.lang.String);
     method public static android.graphics.drawable.Drawable createFromResourceStream(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, java.lang.String);
     method public static android.graphics.drawable.Drawable createFromResourceStream(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, java.lang.String, android.graphics.BitmapFactory.Options);
+    method public static android.graphics.drawable.Drawable createFromResourceStreamThemed(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, java.lang.String, android.content.res.Resources.Theme);
+    method public static android.graphics.drawable.Drawable createFromResourceStreamThemed(android.content.res.Resources, android.util.TypedValue, java.io.InputStream, java.lang.String, android.graphics.BitmapFactory.Options, android.content.res.Resources.Theme);
     method public static android.graphics.drawable.Drawable createFromStream(java.io.InputStream, java.lang.String);
+    method public static android.graphics.drawable.Drawable createFromStreamThemed(java.io.InputStream, java.lang.String, android.content.res.Resources.Theme);
     method public static android.graphics.drawable.Drawable createFromXml(android.content.res.Resources, org.xmlpull.v1.XmlPullParser) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public static android.graphics.drawable.Drawable createFromXmlInner(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static android.graphics.drawable.Drawable createFromXmlInnerThemed(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public static android.graphics.drawable.Drawable createFromXmlThemed(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public abstract void draw(android.graphics.Canvas);
     method public int getAlpha();
     method public final android.graphics.Rect getBounds();
     method public android.graphics.drawable.Drawable.Callback getCallback();
     method public int getChangingConfigurations();
+    method public android.graphics.ColorFilter getColorFilter();
     method public android.graphics.drawable.Drawable.ConstantState getConstantState();
     method public android.graphics.drawable.Drawable getCurrent();
     method public int getIntrinsicHeight();
@@ -10144,10 +10891,12 @@
     method public int getMinimumHeight();
     method public int getMinimumWidth();
     method public abstract int getOpacity();
+    method public boolean getOutline(android.graphics.Outline);
     method public boolean getPadding(android.graphics.Rect);
     method public int[] getState();
     method public android.graphics.Region getTransparentRegion();
     method public void inflate(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+    method public void inflate(android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet, android.content.res.Resources.Theme) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
     method public void invalidateSelf();
     method public boolean isAutoMirrored();
     method public boolean isStateful();
@@ -10157,6 +10906,7 @@
     method protected void onBoundsChange(android.graphics.Rect);
     method protected boolean onLevelChange(int);
     method protected boolean onStateChange(int[]);
+    method public void removeHotspot(int);
     method public static int resolveOpacity(int, int);
     method public void scheduleSelf(java.lang.Runnable, long);
     method public abstract void setAlpha(int);
@@ -10169,9 +10919,11 @@
     method public void setColorFilter(int, android.graphics.PorterDuff.Mode);
     method public void setDither(boolean);
     method public void setFilterBitmap(boolean);
+    method public void setHotspot(int, float, float);
     method public final boolean setLevel(int);
     method public boolean setState(int[]);
     method public boolean setVisible(boolean, boolean);
+    method public boolean supportsHotspots();
     method public void unscheduleSelf(java.lang.Runnable);
   }
 
@@ -10183,9 +10935,11 @@
 
   public static abstract class Drawable.ConstantState {
     ctor public Drawable.ConstantState();
+    method public boolean canApplyTheme();
     method public abstract int getChangingConfigurations();
     method public abstract android.graphics.drawable.Drawable newDrawable();
     method public android.graphics.drawable.Drawable newDrawable(android.content.res.Resources);
+    method public android.graphics.drawable.Drawable newDrawable(android.content.res.Resources, android.content.res.Resources.Theme);
   }
 
   public class DrawableContainer extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
@@ -10228,14 +10982,40 @@
     method public final void setVariablePadding(boolean);
   }
 
+  public class DrawableWrapper extends android.graphics.drawable.Drawable implements android.graphics.drawable.Drawable.Callback {
+    ctor public DrawableWrapper();
+    method public void draw(android.graphics.Canvas);
+    method public android.graphics.Rect getDirtyBounds();
+    method protected final android.graphics.drawable.Drawable getDrawable();
+    method public int getOpacity();
+    method public final int[] getState();
+    method public void invalidateDrawable(android.graphics.drawable.Drawable);
+    method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
+    method public void setAlpha(int);
+    method public final void setBounds(int, int, int, int);
+    method public final void setBounds(android.graphics.Rect);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method protected void setConstantState(android.graphics.drawable.DrawableWrapper.WrapperState, android.content.res.Resources);
+    method protected final void setDrawable(android.graphics.drawable.Drawable, android.content.res.Resources);
+    method public final boolean setState(int[]);
+    method public void setXfermode(android.graphics.Xfermode);
+    method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
+  }
+
+  public static abstract class DrawableWrapper.WrapperState extends android.graphics.drawable.Drawable.ConstantState {
+    method public int getChangingConfigurations();
+  }
+
   public class GradientDrawable extends android.graphics.drawable.Drawable {
     ctor public GradientDrawable();
     ctor public GradientDrawable(android.graphics.drawable.GradientDrawable.Orientation, int[]);
     method public void draw(android.graphics.Canvas);
+    method public float getGradientRadius();
     method public int getOpacity();
     method public android.graphics.drawable.GradientDrawable.Orientation getOrientation();
     method public void setAlpha(int);
     method public void setColor(int);
+    method public void setColor(android.content.res.ColorStateList);
     method public void setColorFilter(android.graphics.ColorFilter);
     method public void setColors(int[]);
     method public void setCornerRadii(float[]);
@@ -10247,7 +11027,9 @@
     method public void setShape(int);
     method public void setSize(int, int);
     method public void setStroke(int, int);
+    method public void setStroke(int, android.content.res.ColorStateList);
     method public void setStroke(int, int, float, float);
+    method public void setStroke(int, android.content.res.ColorStateList, float, float);
     method public void setUseLevel(boolean);
     field public static final int LINE = 2; // 0x2
     field public static final int LINEAR_GRADIENT = 0; // 0x0
@@ -10292,6 +11074,7 @@
     method public int getId(int);
     method public int getNumberOfLayers();
     method public int getOpacity();
+    method public int getPaddingMode();
     method public void invalidateDrawable(android.graphics.drawable.Drawable);
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
@@ -10300,7 +11083,10 @@
     method public void setId(int, int);
     method public void setLayerInset(int, int, int, int, int);
     method public void setOpacity(int);
+    method public void setPaddingMode(int);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
+    field public static final int PADDING_MODE_NEST = 0; // 0x0
+    field public static final int PADDING_MODE_STACK = 1; // 0x1
   }
 
   public class LevelListDrawable extends android.graphics.drawable.DrawableContainer {
@@ -10316,11 +11102,14 @@
     method public void draw(android.graphics.Canvas);
     method public int getOpacity();
     method public android.graphics.Paint getPaint();
+    method public android.content.res.ColorStateList getTint();
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
     method public void setTargetDensity(android.graphics.Canvas);
     method public void setTargetDensity(android.util.DisplayMetrics);
     method public void setTargetDensity(int);
+    method public void setTint(android.content.res.ColorStateList);
+    method public void setTintMode(android.graphics.PorterDuff.Mode);
   }
 
   public class PaintDrawable extends android.graphics.drawable.ShapeDrawable {
@@ -10344,11 +11133,24 @@
     ctor public RotateDrawable();
     method public void draw(android.graphics.Canvas);
     method public android.graphics.drawable.Drawable getDrawable();
+    method public float getFromDegrees();
     method public int getOpacity();
+    method public float getPivotX();
+    method public float getPivotY();
+    method public float getToDegrees();
     method public void invalidateDrawable(android.graphics.drawable.Drawable);
+    method public boolean isPivotXRelative();
+    method public boolean isPivotYRelative();
     method public void scheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable, long);
     method public void setAlpha(int);
     method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDrawable(android.graphics.drawable.Drawable);
+    method public void setFromDegrees(float);
+    method public void setPivotX(float);
+    method public void setPivotXRelative(boolean);
+    method public void setPivotY(float);
+    method public void setPivotYRelative(boolean);
+    method public void setToDegrees(float);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
   }
 
@@ -10372,6 +11174,7 @@
     method public android.graphics.Paint getPaint();
     method public android.graphics.drawable.ShapeDrawable.ShaderFactory getShaderFactory();
     method public android.graphics.drawable.shapes.Shape getShape();
+    method public android.content.res.ColorStateList getTint();
     method protected boolean inflateTag(java.lang.String, android.content.res.Resources, org.xmlpull.v1.XmlPullParser, android.util.AttributeSet);
     method protected void onDraw(android.graphics.drawable.shapes.Shape, android.graphics.Canvas, android.graphics.Paint);
     method public void setAlpha(int);
@@ -10382,6 +11185,7 @@
     method public void setPadding(android.graphics.Rect);
     method public void setShaderFactory(android.graphics.drawable.ShapeDrawable.ShaderFactory);
     method public void setShape(android.graphics.drawable.shapes.Shape);
+    method public void setTint(android.content.res.ColorStateList);
   }
 
   public static abstract class ShapeDrawable.ShaderFactory {
@@ -10394,6 +11198,13 @@
     method public void addState(int[], android.graphics.drawable.Drawable);
   }
 
+  public class TouchFeedbackDrawable extends android.graphics.drawable.LayerDrawable {
+    method public android.graphics.Rect getDirtyBounds();
+    method public android.content.res.ColorStateList getTint();
+    method public void setTint(android.content.res.ColorStateList);
+    method public void setTintMode(android.graphics.PorterDuff.Mode);
+  }
+
   public class TransitionDrawable extends android.graphics.drawable.LayerDrawable implements android.graphics.drawable.Drawable.Callback {
     ctor public TransitionDrawable(android.graphics.drawable.Drawable[]);
     method public boolean isCrossFadeEnabled();
@@ -10403,6 +11214,24 @@
     method public void startTransition(int);
   }
 
+  public class VectorDrawable extends android.graphics.drawable.Drawable {
+    ctor public VectorDrawable();
+    method public void draw(android.graphics.Canvas);
+    method public float geAnimationFraction();
+    method public int getOpacity();
+    method public int getRepeatCount();
+    method public void setAlpha(int);
+    method public void setAnimationFraction(float);
+    method public void setColorFilter(android.graphics.ColorFilter);
+    method public void setDuration(long);
+    method public void setPadding(android.graphics.Rect);
+    method public void setPadding(int, int, int, int);
+    method public void setRepeatCount(int);
+    method public void setRepeatMode(int);
+    method public void start();
+    method public void stop();
+  }
+
 }
 
 package android.graphics.drawable.shapes {
@@ -10435,6 +11264,7 @@
     method public android.graphics.drawable.shapes.Shape clone() throws java.lang.CloneNotSupportedException;
     method public abstract void draw(android.graphics.Canvas, android.graphics.Paint);
     method public final float getHeight();
+    method public boolean getOutline(android.graphics.Outline);
     method public final float getWidth();
     method public boolean hasAlpha();
     method protected void onResize(float, float);
@@ -10927,6 +11757,496 @@
 
 }
 
+package android.hardware.camera2 {
+
+  public class CameraAccessException extends android.util.AndroidException {
+    ctor public CameraAccessException(int);
+    ctor public CameraAccessException(int, java.lang.String);
+    ctor public CameraAccessException(int, java.lang.String, java.lang.Throwable);
+    ctor public CameraAccessException(int, java.lang.Throwable);
+    method public final int getReason();
+    field public static final int CAMERA_DISABLED = 1; // 0x1
+    field public static final int CAMERA_DISCONNECTED = 2; // 0x2
+    field public static final int CAMERA_ERROR = 3; // 0x3
+  }
+
+  public final class CameraCharacteristics extends android.hardware.camera2.CameraMetadata {
+    method public T get(android.hardware.camera2.CameraMetadata.Key<T>);
+    method public java.util.List<android.hardware.camera2.CameraMetadata.Key<?>> getAvailableCaptureRequestKeys();
+    method public java.util.List<android.hardware.camera2.CameraMetadata.Key<?>> getAvailableCaptureResultKeys();
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_AVAILABLE_ANTIBANDING_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_AVAILABLE_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_COMPENSATION_RANGE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_COMPENSATION_STEP;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_AVAILABLE_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AVAILABLE_EFFECTS;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AVAILABLE_SCENE_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AWB_AVAILABLE_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_MAX_REGIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key EDGE_AVAILABLE_EDGE_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key FLASH_INFO_AVAILABLE;
+    field public static final android.hardware.camera2.CameraMetadata.Key HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key INFO_SUPPORTED_HARDWARE_LEVEL;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_AVAILABLE_THUMBNAIL_SIZES;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FACING;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_AVAILABLE_APERTURES;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_AVAILABLE_FILTER_DENSITIES;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_AVAILABLE_FOCAL_LENGTHS;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_FOCUS_DISTANCE_CALIBRATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_HYPERFOCAL_DISTANCE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_MINIMUM_FOCUS_DISTANCE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_INFO_SHADING_MAP_SIZE;
+    field public static final android.hardware.camera2.CameraMetadata.Key NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key REQUEST_AVAILABLE_CAPABILITIES;
+    field public static final android.hardware.camera2.CameraMetadata.Key REQUEST_MAX_NUM_INPUT_STREAMS;
+    field public static final android.hardware.camera2.CameraMetadata.Key REQUEST_MAX_NUM_OUTPUT_STREAMS;
+    field public static final android.hardware.camera2.CameraMetadata.Key REQUEST_PARTIAL_RESULT_COUNT;
+    field public static final android.hardware.camera2.CameraMetadata.Key REQUEST_PIPELINE_MAX_DEPTH;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_FORMATS;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_JPEG_MIN_DURATIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_JPEG_SIZES;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_MAX_DIGITAL_ZOOM;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_MIN_FRAME_DURATIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_PROCESSED_SIZES;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_STALL_DURATIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_AVAILABLE_STREAM_CONFIGURATIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_AVAILABLE_TEST_PATTERN_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_BASE_GAIN_FACTOR;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_BLACK_LEVEL_PATTERN;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_CALIBRATION_TRANSFORM1;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_CALIBRATION_TRANSFORM2;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_COLOR_TRANSFORM1;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_COLOR_TRANSFORM2;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_FORWARD_MATRIX1;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_FORWARD_MATRIX2;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_ACTIVE_ARRAY_SIZE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_COLOR_FILTER_ARRANGEMENT;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_EXPOSURE_TIME_RANGE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_MAX_FRAME_DURATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_PHYSICAL_SIZE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_PIXEL_ARRAY_SIZE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_SENSITIVITY_RANGE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_INFO_WHITE_LEVEL;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_MAX_ANALOG_SENSITIVITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_ORIENTATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_PROFILE_HUE_SAT_MAP_DIMENSIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_REFERENCE_ILLUMINANT1;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_REFERENCE_ILLUMINANT2;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_INFO_MAX_FACE_COUNT;
+    field public static final android.hardware.camera2.CameraMetadata.Key SYNC_MAX_LATENCY;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_AVAILABLE_TONE_MAP_MODES;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_MAX_CURVE_POINTS;
+  }
+
+  public abstract interface CameraDevice implements java.lang.AutoCloseable {
+    method public abstract int capture(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraDevice.CaptureListener, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int captureBurst(java.util.List<android.hardware.camera2.CaptureRequest>, android.hardware.camera2.CameraDevice.CaptureListener, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public abstract void close();
+    method public abstract void configureOutputs(java.util.List<android.view.Surface>) throws android.hardware.camera2.CameraAccessException;
+    method public abstract android.hardware.camera2.CaptureRequest.Builder createCaptureRequest(int) throws android.hardware.camera2.CameraAccessException;
+    method public abstract void flush() throws android.hardware.camera2.CameraAccessException;
+    method public abstract java.lang.String getId();
+    method public abstract int setRepeatingBurst(java.util.List<android.hardware.camera2.CaptureRequest>, android.hardware.camera2.CameraDevice.CaptureListener, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public abstract int setRepeatingRequest(android.hardware.camera2.CaptureRequest, android.hardware.camera2.CameraDevice.CaptureListener, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public abstract void stopRepeating() throws android.hardware.camera2.CameraAccessException;
+    field public static final int TEMPLATE_MANUAL = 6; // 0x6
+    field public static final int TEMPLATE_PREVIEW = 1; // 0x1
+    field public static final int TEMPLATE_RECORD = 3; // 0x3
+    field public static final int TEMPLATE_STILL_CAPTURE = 2; // 0x2
+    field public static final int TEMPLATE_VIDEO_SNAPSHOT = 4; // 0x4
+    field public static final int TEMPLATE_ZERO_SHUTTER_LAG = 5; // 0x5
+  }
+
+  public static abstract class CameraDevice.CaptureListener {
+    ctor public CameraDevice.CaptureListener();
+    method public void onCaptureCompleted(android.hardware.camera2.CameraDevice, android.hardware.camera2.CaptureRequest, android.hardware.camera2.CaptureResult);
+    method public void onCaptureFailed(android.hardware.camera2.CameraDevice, android.hardware.camera2.CaptureRequest, android.hardware.camera2.CaptureFailure);
+    method public void onCaptureSequenceCompleted(android.hardware.camera2.CameraDevice, int, int);
+    method public void onCaptureStarted(android.hardware.camera2.CameraDevice, android.hardware.camera2.CaptureRequest, long);
+  }
+
+  public static abstract class CameraDevice.StateListener {
+    ctor public CameraDevice.StateListener();
+    method public void onActive(android.hardware.camera2.CameraDevice);
+    method public void onBusy(android.hardware.camera2.CameraDevice);
+    method public void onClosed(android.hardware.camera2.CameraDevice);
+    method public abstract void onDisconnected(android.hardware.camera2.CameraDevice);
+    method public abstract void onError(android.hardware.camera2.CameraDevice, int);
+    method public void onIdle(android.hardware.camera2.CameraDevice);
+    method public abstract void onOpened(android.hardware.camera2.CameraDevice);
+    method public void onUnconfigured(android.hardware.camera2.CameraDevice);
+    field public static final int ERROR_CAMERA_DEVICE = 4; // 0x4
+    field public static final int ERROR_CAMERA_DISABLED = 3; // 0x3
+    field public static final int ERROR_CAMERA_IN_USE = 1; // 0x1
+    field public static final int ERROR_CAMERA_SERVICE = 5; // 0x5
+    field public static final int ERROR_MAX_CAMERAS_IN_USE = 2; // 0x2
+  }
+
+  public final class CameraManager {
+    method public void addAvailabilityListener(android.hardware.camera2.CameraManager.AvailabilityListener, android.os.Handler);
+    method public android.hardware.camera2.CameraCharacteristics getCameraCharacteristics(java.lang.String) throws android.hardware.camera2.CameraAccessException;
+    method public java.lang.String[] getCameraIdList() throws android.hardware.camera2.CameraAccessException;
+    method public void openCamera(java.lang.String, android.hardware.camera2.CameraDevice.StateListener, android.os.Handler) throws android.hardware.camera2.CameraAccessException;
+    method public void removeAvailabilityListener(android.hardware.camera2.CameraManager.AvailabilityListener);
+  }
+
+  public static abstract class CameraManager.AvailabilityListener {
+    ctor public CameraManager.AvailabilityListener();
+    method public void onCameraAvailable(java.lang.String);
+    method public void onCameraUnavailable(java.lang.String);
+  }
+
+  public abstract class CameraMetadata {
+    method public abstract T get(android.hardware.camera2.CameraMetadata.Key<T>);
+    method public java.util.List<android.hardware.camera2.CameraMetadata.Key<?>> getKeys();
+    field public static final int COLOR_CORRECTION_MODE_FAST = 1; // 0x1
+    field public static final int COLOR_CORRECTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int COLOR_CORRECTION_MODE_TRANSFORM_MATRIX = 0; // 0x0
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_50HZ = 1; // 0x1
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_60HZ = 2; // 0x2
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_AUTO = 3; // 0x3
+    field public static final int CONTROL_AE_ANTIBANDING_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AE_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AE_MODE_ON = 1; // 0x1
+    field public static final int CONTROL_AE_MODE_ON_ALWAYS_FLASH = 3; // 0x3
+    field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH = 2; // 0x2
+    field public static final int CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE = 4; // 0x4
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_IDLE = 0; // 0x0
+    field public static final int CONTROL_AE_PRECAPTURE_TRIGGER_START = 1; // 0x1
+    field public static final int CONTROL_AE_STATE_CONVERGED = 2; // 0x2
+    field public static final int CONTROL_AE_STATE_FLASH_REQUIRED = 4; // 0x4
+    field public static final int CONTROL_AE_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AE_STATE_LOCKED = 3; // 0x3
+    field public static final int CONTROL_AE_STATE_PRECAPTURE = 5; // 0x5
+    field public static final int CONTROL_AE_STATE_SEARCHING = 1; // 0x1
+    field public static final int CONTROL_AF_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_AF_MODE_CONTINUOUS_PICTURE = 4; // 0x4
+    field public static final int CONTROL_AF_MODE_CONTINUOUS_VIDEO = 3; // 0x3
+    field public static final int CONTROL_AF_MODE_EDOF = 5; // 0x5
+    field public static final int CONTROL_AF_MODE_MACRO = 2; // 0x2
+    field public static final int CONTROL_AF_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AF_STATE_ACTIVE_SCAN = 3; // 0x3
+    field public static final int CONTROL_AF_STATE_FOCUSED_LOCKED = 4; // 0x4
+    field public static final int CONTROL_AF_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AF_STATE_NOT_FOCUSED_LOCKED = 5; // 0x5
+    field public static final int CONTROL_AF_STATE_PASSIVE_FOCUSED = 2; // 0x2
+    field public static final int CONTROL_AF_STATE_PASSIVE_SCAN = 1; // 0x1
+    field public static final int CONTROL_AF_STATE_PASSIVE_UNFOCUSED = 6; // 0x6
+    field public static final int CONTROL_AF_TRIGGER_CANCEL = 2; // 0x2
+    field public static final int CONTROL_AF_TRIGGER_IDLE = 0; // 0x0
+    field public static final int CONTROL_AF_TRIGGER_START = 1; // 0x1
+    field public static final int CONTROL_AWB_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_AWB_MODE_CLOUDY_DAYLIGHT = 6; // 0x6
+    field public static final int CONTROL_AWB_MODE_DAYLIGHT = 5; // 0x5
+    field public static final int CONTROL_AWB_MODE_FLUORESCENT = 3; // 0x3
+    field public static final int CONTROL_AWB_MODE_INCANDESCENT = 2; // 0x2
+    field public static final int CONTROL_AWB_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_AWB_MODE_SHADE = 8; // 0x8
+    field public static final int CONTROL_AWB_MODE_TWILIGHT = 7; // 0x7
+    field public static final int CONTROL_AWB_MODE_WARM_FLUORESCENT = 4; // 0x4
+    field public static final int CONTROL_AWB_STATE_CONVERGED = 2; // 0x2
+    field public static final int CONTROL_AWB_STATE_INACTIVE = 0; // 0x0
+    field public static final int CONTROL_AWB_STATE_LOCKED = 3; // 0x3
+    field public static final int CONTROL_AWB_STATE_SEARCHING = 1; // 0x1
+    field public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0; // 0x0
+    field public static final int CONTROL_CAPTURE_INTENT_MANUAL = 6; // 0x6
+    field public static final int CONTROL_CAPTURE_INTENT_PREVIEW = 1; // 0x1
+    field public static final int CONTROL_CAPTURE_INTENT_STILL_CAPTURE = 2; // 0x2
+    field public static final int CONTROL_CAPTURE_INTENT_VIDEO_RECORD = 3; // 0x3
+    field public static final int CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT = 4; // 0x4
+    field public static final int CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG = 5; // 0x5
+    field public static final int CONTROL_EFFECT_MODE_AQUA = 8; // 0x8
+    field public static final int CONTROL_EFFECT_MODE_BLACKBOARD = 7; // 0x7
+    field public static final int CONTROL_EFFECT_MODE_MONO = 1; // 0x1
+    field public static final int CONTROL_EFFECT_MODE_NEGATIVE = 2; // 0x2
+    field public static final int CONTROL_EFFECT_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_EFFECT_MODE_POSTERIZE = 5; // 0x5
+    field public static final int CONTROL_EFFECT_MODE_SEPIA = 4; // 0x4
+    field public static final int CONTROL_EFFECT_MODE_SOLARIZE = 3; // 0x3
+    field public static final int CONTROL_EFFECT_MODE_WHITEBOARD = 6; // 0x6
+    field public static final int CONTROL_MODE_AUTO = 1; // 0x1
+    field public static final int CONTROL_MODE_OFF = 0; // 0x0
+    field public static final int CONTROL_MODE_OFF_KEEP_STATE = 3; // 0x3
+    field public static final int CONTROL_MODE_USE_SCENE_MODE = 2; // 0x2
+    field public static final int CONTROL_SCENE_MODE_ACTION = 2; // 0x2
+    field public static final int CONTROL_SCENE_MODE_BARCODE = 16; // 0x10
+    field public static final int CONTROL_SCENE_MODE_BEACH = 8; // 0x8
+    field public static final int CONTROL_SCENE_MODE_CANDLELIGHT = 15; // 0xf
+    field public static final int CONTROL_SCENE_MODE_DISABLED = 0; // 0x0
+    field public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1; // 0x1
+    field public static final int CONTROL_SCENE_MODE_FIREWORKS = 12; // 0xc
+    field public static final int CONTROL_SCENE_MODE_LANDSCAPE = 4; // 0x4
+    field public static final int CONTROL_SCENE_MODE_NIGHT = 5; // 0x5
+    field public static final int CONTROL_SCENE_MODE_NIGHT_PORTRAIT = 6; // 0x6
+    field public static final int CONTROL_SCENE_MODE_PARTY = 14; // 0xe
+    field public static final int CONTROL_SCENE_MODE_PORTRAIT = 3; // 0x3
+    field public static final int CONTROL_SCENE_MODE_SNOW = 9; // 0x9
+    field public static final int CONTROL_SCENE_MODE_SPORTS = 13; // 0xd
+    field public static final int CONTROL_SCENE_MODE_STEADYPHOTO = 11; // 0xb
+    field public static final int CONTROL_SCENE_MODE_SUNSET = 10; // 0xa
+    field public static final int CONTROL_SCENE_MODE_THEATRE = 7; // 0x7
+    field public static final int EDGE_MODE_FAST = 1; // 0x1
+    field public static final int EDGE_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int EDGE_MODE_OFF = 0; // 0x0
+    field public static final int FLASH_MODE_OFF = 0; // 0x0
+    field public static final int FLASH_MODE_SINGLE = 1; // 0x1
+    field public static final int FLASH_MODE_TORCH = 2; // 0x2
+    field public static final int FLASH_STATE_CHARGING = 1; // 0x1
+    field public static final int FLASH_STATE_FIRED = 3; // 0x3
+    field public static final int FLASH_STATE_PARTIAL = 4; // 0x4
+    field public static final int FLASH_STATE_READY = 2; // 0x2
+    field public static final int FLASH_STATE_UNAVAILABLE = 0; // 0x0
+    field public static final int HOT_PIXEL_MODE_FAST = 1; // 0x1
+    field public static final int HOT_PIXEL_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int HOT_PIXEL_MODE_OFF = 0; // 0x0
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_FULL = 1; // 0x1
+    field public static final int INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED = 0; // 0x0
+    field public static final int LENS_FACING_BACK = 1; // 0x1
+    field public static final int LENS_FACING_FRONT = 0; // 0x0
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1; // 0x1
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2; // 0x2
+    field public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0; // 0x0
+    field public static final int LENS_OPTICAL_STABILIZATION_MODE_OFF = 0; // 0x0
+    field public static final int LENS_OPTICAL_STABILIZATION_MODE_ON = 1; // 0x1
+    field public static final int LENS_STATE_MOVING = 1; // 0x1
+    field public static final int LENS_STATE_STATIONARY = 0; // 0x0
+    field public static final int NOISE_REDUCTION_MODE_FAST = 1; // 0x1
+    field public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int NOISE_REDUCTION_MODE_OFF = 0; // 0x0
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_DNG = 5; // 0x5
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR = 2; // 0x2
+    field public static final int REQUEST_AVAILABLE_CAPABILITIES_ZSL = 4; // 0x4
+    field public static final int SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT = 1; // 0x1
+    field public static final int SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT = 0; // 0x0
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3; // 0x3
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG = 2; // 0x2
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG = 1; // 0x1
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB = 4; // 0x4
+    field public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB = 0; // 0x0
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER = 10; // 0xa
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT = 14; // 0xe
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D50 = 23; // 0x17
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D55 = 20; // 0x14
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D65 = 21; // 0x15
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_D75 = 22; // 0x16
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT = 1; // 0x1
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT = 12; // 0xc
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT = 13; // 0xd
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER = 9; // 0x9
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLASH = 4; // 0x4
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT = 2; // 0x2
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN = 24; // 0x18
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_SHADE = 11; // 0xb
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A = 17; // 0x11
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B = 18; // 0x12
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C = 19; // 0x13
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN = 3; // 0x3
+    field public static final int SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT = 15; // 0xf
+    field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS = 2; // 0x2
+    field public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY = 3; // 0x3
+    field public static final int SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 256; // 0x100
+    field public static final int SENSOR_TEST_PATTERN_MODE_OFF = 0; // 0x0
+    field public static final int SENSOR_TEST_PATTERN_MODE_PN9 = 4; // 0x4
+    field public static final int SENSOR_TEST_PATTERN_MODE_SOLID_COLOR = 1; // 0x1
+    field public static final int SHADING_MODE_FAST = 1; // 0x1
+    field public static final int SHADING_MODE_HIGH_QUALITY = 2; // 0x2
+    field public static final int SHADING_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_FACE_DETECT_MODE_FULL = 2; // 0x2
+    field public static final int STATISTICS_FACE_DETECT_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_FACE_DETECT_MODE_SIMPLE = 1; // 0x1
+    field public static final int STATISTICS_LENS_SHADING_MAP_MODE_OFF = 0; // 0x0
+    field public static final int STATISTICS_LENS_SHADING_MAP_MODE_ON = 1; // 0x1
+    field public static final int STATISTICS_SCENE_FLICKER_50HZ = 1; // 0x1
+    field public static final int STATISTICS_SCENE_FLICKER_60HZ = 2; // 0x2
+    field public static final int STATISTICS_SCENE_FLICKER_NONE = 0; // 0x0
+    field public static final int SYNC_MAX_LATENCY_PER_FRAME_CONTROL = 0; // 0x0
+    field public static final int SYNC_MAX_LATENCY_UNKNOWN = -1; // 0xffffffff
+    field public static final int TONEMAP_MODE_CONTRAST_CURVE = 0; // 0x0
+    field public static final int TONEMAP_MODE_FAST = 1; // 0x1
+    field public static final int TONEMAP_MODE_HIGH_QUALITY = 2; // 0x2
+  }
+
+  public static class CameraMetadata.Key {
+    method public final boolean equals(java.lang.Object);
+    method public final java.lang.String getName();
+    method public final int hashCode();
+  }
+
+  public class CaptureFailure {
+    method public int getFrameNumber();
+    method public int getReason();
+    method public android.hardware.camera2.CaptureRequest getRequest();
+    method public int getSequenceId();
+    method public boolean wasImageCaptured();
+    field public static final int REASON_ERROR = 0; // 0x0
+    field public static final int REASON_FLUSHED = 1; // 0x1
+  }
+
+  public final class CaptureRequest extends android.hardware.camera2.CameraMetadata implements android.os.Parcelable {
+    method public int describeContents();
+    method public T get(android.hardware.camera2.CameraMetadata.Key<T>);
+    method public java.lang.Object getTag();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.hardware.camera2.CameraMetadata.Key BLACK_LEVEL_LOCK;
+    field public static final android.hardware.camera2.CameraMetadata.Key COLOR_CORRECTION_GAINS;
+    field public static final android.hardware.camera2.CameraMetadata.Key COLOR_CORRECTION_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key COLOR_CORRECTION_TRANSFORM;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_ANTIBANDING_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_EXPOSURE_COMPENSATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_LOCK;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_PRECAPTURE_TRIGGER;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_REGIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_TARGET_FPS_RANGE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_REGIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_TRIGGER;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AWB_LOCK;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AWB_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AWB_REGIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_CAPTURE_INTENT;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_EFFECT_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_SCENE_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_VIDEO_STABILIZATION_MODE;
+    field public static final android.os.Parcelable.Creator CREATOR;
+    field public static final android.hardware.camera2.CameraMetadata.Key EDGE_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key FLASH_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key HOT_PIXEL_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_GPS_COORDINATES;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_GPS_PROCESSING_METHOD;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_GPS_TIMESTAMP;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_ORIENTATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_QUALITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_THUMBNAIL_QUALITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_THUMBNAIL_SIZE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_APERTURE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FILTER_DENSITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FOCAL_LENGTH;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FOCUS_DISTANCE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_OPTICAL_STABILIZATION_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key NOISE_REDUCTION_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_CROP_REGION;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_EXPOSURE_TIME;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_FRAME_DURATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_SENSITIVITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_TEST_PATTERN_DATA;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_TEST_PATTERN_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SHADING_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_FACE_DETECT_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_HOT_PIXEL_MAP_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_LENS_SHADING_MAP_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_CURVE_BLUE;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_CURVE_GREEN;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_CURVE_RED;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_MODE;
+  }
+
+  public static final class CaptureRequest.Builder {
+    method public void addTarget(android.view.Surface);
+    method public android.hardware.camera2.CaptureRequest build();
+    method public T get(android.hardware.camera2.CameraMetadata.Key<T>);
+    method public void removeTarget(android.view.Surface);
+    method public void set(android.hardware.camera2.CameraMetadata.Key<T>, T);
+    method public void setTag(java.lang.Object);
+  }
+
+  public final class CaptureResult extends android.hardware.camera2.CameraMetadata {
+    method public T get(android.hardware.camera2.CameraMetadata.Key<T>);
+    method public int getFrameNumber();
+    method public android.hardware.camera2.CaptureRequest getRequest();
+    method public int getSequenceId();
+    field public static final android.hardware.camera2.CameraMetadata.Key BLACK_LEVEL_LOCK;
+    field public static final android.hardware.camera2.CameraMetadata.Key COLOR_CORRECTION_GAINS;
+    field public static final android.hardware.camera2.CameraMetadata.Key COLOR_CORRECTION_TRANSFORM;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_REGIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AE_STATE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_REGIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AF_STATE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AWB_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AWB_REGIONS;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_AWB_STATE;
+    field public static final android.hardware.camera2.CameraMetadata.Key CONTROL_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key EDGE_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key FLASH_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key FLASH_STATE;
+    field public static final android.hardware.camera2.CameraMetadata.Key HOT_PIXEL_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_GPS_COORDINATES;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_GPS_PROCESSING_METHOD;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_GPS_TIMESTAMP;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_ORIENTATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_QUALITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_THUMBNAIL_QUALITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key JPEG_THUMBNAIL_SIZE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_APERTURE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FILTER_DENSITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FOCAL_LENGTH;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FOCUS_DISTANCE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_FOCUS_RANGE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_OPTICAL_STABILIZATION_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key LENS_STATE;
+    field public static final android.hardware.camera2.CameraMetadata.Key NOISE_REDUCTION_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key REQUEST_FRAME_COUNT;
+    field public static final android.hardware.camera2.CameraMetadata.Key REQUEST_PIPELINE_DEPTH;
+    field public static final android.hardware.camera2.CameraMetadata.Key SCALER_CROP_REGION;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_EXPOSURE_TIME;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_FRAME_DURATION;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_GREEN_SPLIT;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_NEUTRAL_COLOR_POINT;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_PROFILE_HUE_SAT_MAP;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_PROFILE_TONE_CURVE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_SENSITIVITY;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_TEMPERATURE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_TEST_PATTERN_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key SENSOR_TIMESTAMP;
+    field public static final android.hardware.camera2.CameraMetadata.Key SHADING_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_FACES;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_FACE_DETECT_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_HOT_PIXEL_MAP;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_HOT_PIXEL_MAP_MODE;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_LENS_SHADING_MAP;
+    field public static final android.hardware.camera2.CameraMetadata.Key STATISTICS_SCENE_FLICKER;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_CURVE_BLUE;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_CURVE_GREEN;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_CURVE_RED;
+    field public static final android.hardware.camera2.CameraMetadata.Key TONEMAP_MODE;
+  }
+
+  public final class Face {
+    method public android.graphics.Rect getBounds();
+    method public int getId();
+    method public android.graphics.Point getLeftEyePosition();
+    method public android.graphics.Point getMouthPosition();
+    method public android.graphics.Point getRightEyePosition();
+    method public int getScore();
+    field public static final int ID_UNSUPPORTED = -1; // 0xffffffff
+    field public static final int SCORE_MAX = 100; // 0x64
+    field public static final int SCORE_MIN = 1; // 0x1
+  }
+
+  public final class Rational {
+    ctor public Rational(int, int);
+    method public int getDenominator();
+    method public int getNumerator();
+  }
+
+  public final class Size {
+    ctor public Size(int, int);
+    method public final int getHeight();
+    method public final int getWidth();
+  }
+
+}
+
 package android.hardware.display {
 
   public final class DisplayManager {
@@ -10967,7 +12287,6 @@
     method public static boolean isValidType(int);
     field public static final int ADDR_AUDIO_SYSTEM = 5; // 0x5
     field public static final int ADDR_BROADCAST = 15; // 0xf
-    field public static final int ADDR_FREE_USE = 14; // 0xe
     field public static final int ADDR_INVALID = -1; // 0xffffffff
     field public static final int ADDR_PLAYBACK_1 = 4; // 0x4
     field public static final int ADDR_PLAYBACK_2 = 8; // 0x8
@@ -10977,6 +12296,7 @@
     field public static final int ADDR_RECORDER_3 = 9; // 0x9
     field public static final int ADDR_RESERVED_1 = 12; // 0xc
     field public static final int ADDR_RESERVED_2 = 13; // 0xd
+    field public static final int ADDR_SPECIFIC_USE = 14; // 0xe
     field public static final int ADDR_TUNER_1 = 3; // 0x3
     field public static final int ADDR_TUNER_2 = 6; // 0x6
     field public static final int ADDR_TUNER_3 = 7; // 0x7
@@ -11074,6 +12394,17 @@
     method public void onMessageReceived(android.hardware.hdmi.HdmiCecMessage);
   }
 
+  public final class HdmiCecDeviceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getDeviceType();
+    method public java.lang.String getDisplayName();
+    method public int getLogicalAddress();
+    method public int getPhysicalAddress();
+    method public int getVendorId();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
   public final class HdmiCecManager {
     method public android.hardware.hdmi.HdmiCecClient getClient(int, android.hardware.hdmi.HdmiCecClient.Listener);
   }
@@ -11182,6 +12513,20 @@
     field public static final android.os.Parcelable.Creator CREATOR;
   }
 
+  public class UsbConfiguration implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getAttributes();
+    method public int getId();
+    method public android.hardware.usb.UsbInterface getInterface(int);
+    method public int getInterfaceCount();
+    method public int getMaxPower();
+    method public java.lang.String getName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int ATTR_REMOTE_WAKEUP_MASK = 32; // 0x20
+    field public static final int ATTR_SELF_POWERED_MASK = 64; // 0x40
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
   public final class UsbConstants {
     ctor public UsbConstants();
     field public static final int USB_CLASS_APP_SPEC = 254; // 0xfe
@@ -11221,6 +12566,8 @@
 
   public class UsbDevice implements android.os.Parcelable {
     method public int describeContents();
+    method public android.hardware.usb.UsbConfiguration getConfiguration(int);
+    method public int getConfigurationCount();
     method public int getDeviceClass();
     method public int getDeviceId();
     method public static int getDeviceId(java.lang.String);
@@ -11251,6 +12598,8 @@
     method public java.lang.String getSerial();
     method public boolean releaseInterface(android.hardware.usb.UsbInterface);
     method public android.hardware.usb.UsbRequest requestWait();
+    method public boolean setConfiguration(android.hardware.usb.UsbConfiguration);
+    method public boolean setInterface(android.hardware.usb.UsbInterface);
   }
 
   public class UsbEndpoint implements android.os.Parcelable {
@@ -11268,12 +12617,14 @@
 
   public class UsbInterface implements android.os.Parcelable {
     method public int describeContents();
+    method public int getAlternateSetting();
     method public android.hardware.usb.UsbEndpoint getEndpoint(int);
     method public int getEndpointCount();
     method public int getId();
     method public int getInterfaceClass();
     method public int getInterfaceProtocol();
     method public int getInterfaceSubclass();
+    method public java.lang.String getName();
     method public void writeToParcel(android.os.Parcel, int);
     field public static final android.os.Parcelable.Creator CREATOR;
   }
@@ -11343,6 +12694,7 @@
     ctor public ExtractEditText(android.content.Context);
     ctor public ExtractEditText(android.content.Context, android.util.AttributeSet);
     ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int);
+    ctor public ExtractEditText(android.content.Context, android.util.AttributeSet, int, int);
     method public void finishInternalChanges();
     method public boolean hasVerticalScrollBar();
     method public void startInternalChanges();
@@ -11357,6 +12709,7 @@
     method public android.view.inputmethod.InputConnection getCurrentInputConnection();
     method public android.view.inputmethod.EditorInfo getCurrentInputEditorInfo();
     method public boolean getCurrentInputStarted();
+    method public int getInputMethodWindowRecommendedHeight();
     method public android.view.LayoutInflater getLayoutInflater();
     method public int getMaxWidth();
     method public java.lang.CharSequence getTextForImeAction(int);
@@ -11413,6 +12766,7 @@
     method public void setBackDisposition(int);
     method public void setCandidatesView(android.view.View);
     method public void setCandidatesViewShown(boolean);
+    method public void setCursorAnchorMonitorMode(int);
     method public void setExtractView(android.view.View);
     method public void setExtractViewShown(boolean);
     method public void setInputView(android.view.View);
@@ -11424,6 +12778,8 @@
     field public static final int BACK_DISPOSITION_DEFAULT = 0; // 0x0
     field public static final int BACK_DISPOSITION_WILL_DISMISS = 2; // 0x2
     field public static final int BACK_DISPOSITION_WILL_NOT_DISMISS = 1; // 0x1
+    field public static final int CURSOR_ANCHOR_MONITOR_MODE_CURSOR_RECT = 1; // 0x1
+    field public static final int CURSOR_ANCHOR_MONITOR_MODE_NONE = 0; // 0x0
   }
 
   public class InputMethodService.InputMethodImpl extends android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodImpl {
@@ -11539,6 +12895,7 @@
   public class KeyboardView extends android.view.View implements android.view.View.OnClickListener {
     ctor public KeyboardView(android.content.Context, android.util.AttributeSet);
     ctor public KeyboardView(android.content.Context, android.util.AttributeSet, int);
+    ctor public KeyboardView(android.content.Context, android.util.AttributeSet, int, int);
     method public void closing();
     method public android.inputmethodservice.Keyboard getKeyboard();
     method protected android.inputmethodservice.KeyboardView.OnKeyboardActionListener getOnKeyboardActionListener();
@@ -11826,7 +13183,7 @@
     ctor public SettingInjectorService(java.lang.String);
     method public final android.os.IBinder onBind(android.content.Intent);
     method protected abstract boolean onGetEnabled();
-    method protected abstract java.lang.String onGetSummary();
+    method protected deprecated java.lang.String onGetSummary();
     method public final void onStart(android.content.Intent, int);
     method public final int onStartCommand(android.content.Intent, int, int);
     field public static final java.lang.String ACTION_INJECTED_SETTING_CHANGED = "android.location.InjectedSettingChanged";
@@ -12101,7 +13458,8 @@
     method public int setPlaybackRate(int);
     method public int setPositionNotificationPeriod(int);
     method protected deprecated void setState(int);
-    method public int setStereoVolume(float, float);
+    method public deprecated int setStereoVolume(float, float);
+    method public int setVolume(float);
     method public void stop() throws java.lang.IllegalStateException;
     method public int write(byte[], int, int);
     method public int write(short[], int, int);
@@ -12172,6 +13530,18 @@
     ctor public DeniedByServerException(java.lang.String);
   }
 
+  public final class DngCreator {
+    ctor public DngCreator(android.hardware.camera2.CameraCharacteristics, android.hardware.camera2.CaptureResult);
+    method public android.media.DngCreator setDescription(java.lang.String);
+    method public android.media.DngCreator setLocation(android.location.Location);
+    method public android.media.DngCreator setOrientation(int);
+    method public android.media.DngCreator setThumbnail(android.graphics.Bitmap);
+    method public android.media.DngCreator setThumbnail(android.media.Image);
+    method public void writeByteBuffer(java.io.OutputStream, java.nio.ByteBuffer, int, long) throws java.io.IOException;
+    method public void writeImage(java.io.OutputStream, android.media.Image) throws java.io.IOException;
+    method public void writeInputStream(java.io.OutputStream, java.io.InputStream, int, long) throws java.io.IOException;
+  }
+
   public class ExifInterface {
     ctor public ExifInterface(java.lang.String) throws java.io.IOException;
     method public double getAltitude(double);
@@ -12306,9 +13676,9 @@
 
   public final class MediaCodec {
     method public void configure(android.media.MediaFormat, android.view.Surface, android.media.MediaCrypto, int);
-    method public static android.media.MediaCodec createByCodecName(java.lang.String);
-    method public static android.media.MediaCodec createDecoderByType(java.lang.String);
-    method public static android.media.MediaCodec createEncoderByType(java.lang.String);
+    method public static android.media.MediaCodec createByCodecName(java.lang.String) throws java.io.IOException;
+    method public static android.media.MediaCodec createDecoderByType(java.lang.String) throws java.io.IOException;
+    method public static android.media.MediaCodec createEncoderByType(java.lang.String) throws java.io.IOException;
     method public final android.view.Surface createInputSurface();
     method public final int dequeueInputBuffer(long);
     method public final int dequeueOutputBuffer(android.media.MediaCodec.BufferInfo, long);
@@ -12322,6 +13692,7 @@
     method public final void queueSecureInputBuffer(int, int, android.media.MediaCodec.CryptoInfo, long, int) throws android.media.MediaCodec.CryptoException;
     method public final void release();
     method public final void releaseOutputBuffer(int, boolean);
+    method public void setNotificationCallback(android.media.MediaCodec.NotificationCallback);
     method public final void setParameters(android.os.Bundle);
     method public final void setVideoScalingMode(int);
     method public final void signalEndOfInputStream();
@@ -12371,6 +13742,10 @@
     field public int numSubSamples;
   }
 
+  public static abstract interface MediaCodec.NotificationCallback {
+    method public abstract void onCodecNotify(android.media.MediaCodec);
+  }
+
   public final class MediaCodecInfo {
     method public final android.media.MediaCodecInfo.CodecCapabilities getCapabilitiesForType(java.lang.String);
     method public final java.lang.String getName();
@@ -12738,6 +14113,7 @@
 
   public static final class MediaMuxer.OutputFormat {
     field public static final int MUXER_OUTPUT_MPEG_4 = 0; // 0x0
+    field public static final int MUXER_OUTPUT_WEBM = 1; // 0x1
   }
 
   public class MediaPlayer {
@@ -12862,6 +14238,7 @@
     ctor public MediaRecorder();
     method public static final int getAudioSourceMax();
     method public int getMaxAmplitude() throws java.lang.IllegalStateException;
+    method public android.view.Surface getSurface();
     method public void prepare() throws java.io.IOException, java.lang.IllegalStateException;
     method public void release();
     method public void reset();
@@ -12946,6 +14323,7 @@
   public final class MediaRecorder.VideoSource {
     field public static final int CAMERA = 1; // 0x1
     field public static final int DEFAULT = 0; // 0x0
+    field public static final int SURFACE = 2; // 0x2
   }
 
   public class MediaRouter {
@@ -13118,6 +14496,7 @@
     field public static final int RATING_4_STARS = 4; // 0x4
     field public static final int RATING_5_STARS = 5; // 0x5
     field public static final int RATING_HEART = 1; // 0x1
+    field public static final int RATING_NONE = 0; // 0x0
     field public static final int RATING_PERCENTAGE = 6; // 0x6
     field public static final int RATING_THUMB_UP_DOWN = 2; // 0x2
   }
@@ -13755,6 +15134,339 @@
 
 }
 
+package android.media.routeprovider {
+
+  public final class RouteConnection {
+    ctor public RouteConnection(android.media.routeprovider.RouteProviderService, android.media.session.RouteInfo);
+    method public android.media.routeprovider.RouteInterfaceHandler addRouteInterface(java.lang.String);
+    method public android.media.routeprovider.RouteInterfaceHandler getRouteInterface(java.lang.String);
+    method public void shutDown();
+  }
+
+  public final class RouteInterfaceHandler {
+    method public void addListener(android.media.routeprovider.RouteInterfaceHandler.CommandListener, android.os.Handler);
+    method public java.lang.String getName();
+    method public void removeListener(android.media.routeprovider.RouteInterfaceHandler.CommandListener);
+    method public void sendEvent(java.lang.String, android.os.Bundle);
+    method public static void sendResult(android.os.ResultReceiver, int, android.os.Bundle);
+  }
+
+  public static abstract class RouteInterfaceHandler.CommandListener {
+    ctor public RouteInterfaceHandler.CommandListener();
+    method public abstract boolean onCommand(android.media.routeprovider.RouteInterfaceHandler, java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+  }
+
+  public final class RoutePlaybackControlsHandler {
+    method public void addListener(android.media.routeprovider.RoutePlaybackControlsHandler.Listener);
+    method public void addListener(android.media.routeprovider.RoutePlaybackControlsHandler.Listener, android.os.Handler);
+    method public static android.media.routeprovider.RoutePlaybackControlsHandler addTo(android.media.routeprovider.RouteConnection);
+    method public void removeListener(android.media.routeprovider.RoutePlaybackControlsHandler.Listener);
+    method public void sendPlaybackChangeEvent(int);
+  }
+
+  public static abstract class RoutePlaybackControlsHandler.Listener extends android.media.routeprovider.RouteInterfaceHandler.CommandListener {
+    ctor public RoutePlaybackControlsHandler.Listener();
+    method public boolean fastForward();
+    method public long getCapabilities();
+    method public long getCurrentPosition();
+    method public final boolean onCommand(android.media.routeprovider.RouteInterfaceHandler, java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+    method public boolean pause();
+    method public void playNow(java.lang.String, android.os.ResultReceiver);
+    method public boolean resume();
+  }
+
+  public abstract class RouteProviderService extends android.app.Service {
+    ctor public RouteProviderService();
+    method public abstract android.media.routeprovider.RouteConnection connect(android.media.session.RouteInfo, android.media.routeprovider.RouteRequest);
+    method public abstract java.util.List<android.media.session.RouteInfo> getMatchingRoutes(java.util.List<android.media.routeprovider.RouteRequest>);
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void updateDiscoveryRequests(java.util.List<android.media.routeprovider.RouteRequest>);
+    field public static final java.lang.String SERVICE_INTERFACE = "com.android.media.session.MediaRouteProvider";
+  }
+
+  public final class RouteRequest implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.media.session.RouteOptions getConnectionOptions();
+    method public android.media.session.SessionInfo getSessionInfo();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+}
+
+package android.media.session {
+
+  public final class MediaMetadata implements android.os.Parcelable {
+    method public boolean containsKey(java.lang.String);
+    method public int describeContents();
+    method public android.graphics.Bitmap getBitmap(java.lang.String);
+    method public long getLong(java.lang.String);
+    method public android.media.Rating getRating(java.lang.String);
+    method public java.lang.String getString(java.lang.String);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+    field public static final java.lang.String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+    field public static final java.lang.String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+    field public static final java.lang.String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+    field public static final java.lang.String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+    field public static final java.lang.String METADATA_KEY_ART = "android.media.metadata.ART";
+    field public static final java.lang.String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+    field public static final java.lang.String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+    field public static final java.lang.String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+    field public static final java.lang.String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+    field public static final java.lang.String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+    field public static final java.lang.String METADATA_KEY_DATE = "android.media.metadata.DATE";
+    field public static final java.lang.String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+    field public static final java.lang.String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+    field public static final java.lang.String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+    field public static final java.lang.String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+    field public static final java.lang.String METADATA_KEY_RATING = "android.media.metadata.RATING";
+    field public static final java.lang.String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+    field public static final java.lang.String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+    field public static final java.lang.String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+    field public static final java.lang.String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+    field public static final java.lang.String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+  }
+
+  public static final class MediaMetadata.Builder {
+    ctor public MediaMetadata.Builder();
+    ctor public MediaMetadata.Builder(android.media.session.MediaMetadata);
+    method public android.media.session.MediaMetadata build();
+    method public android.media.session.MediaMetadata.Builder putBitmap(java.lang.String, android.graphics.Bitmap);
+    method public android.media.session.MediaMetadata.Builder putLong(java.lang.String, long);
+    method public android.media.session.MediaMetadata.Builder putRating(java.lang.String, android.media.Rating);
+    method public android.media.session.MediaMetadata.Builder putString(java.lang.String, java.lang.String);
+  }
+
+  public final class PlaybackState implements android.os.Parcelable {
+    ctor public PlaybackState();
+    ctor public PlaybackState(android.media.session.PlaybackState);
+    method public int describeContents();
+    method public long getActions();
+    method public long getBufferPosition();
+    method public java.lang.String getErrorMessage();
+    method public long getPosition();
+    method public float getRate();
+    method public int getState();
+    method public void setActions(long);
+    method public void setBufferPosition(long);
+    method public void setErrorMessage(java.lang.String);
+    method public void setState(int, long, float);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final long ACTION_FASTFORWARD = 64L; // 0x40L
+    field public static final long ACTION_NEXT_ITEM = 32L; // 0x20L
+    field public static final long ACTION_PAUSE = 2L; // 0x2L
+    field public static final long ACTION_PLAY = 4L; // 0x4L
+    field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
+    field public static final long ACTION_PREVIOUS_ITEM = 16L; // 0x10L
+    field public static final long ACTION_RATING = 128L; // 0x80L
+    field public static final long ACTION_REWIND = 8L; // 0x8L
+    field public static final long ACTION_SEEK_TO = 256L; // 0x100L
+    field public static final long ACTION_STOP = 1L; // 0x1L
+    field public static final android.os.Parcelable.Creator CREATOR;
+    field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
+    field public static final int PLAYSTATE_BUFFERING = 6; // 0x6
+    field public static final int PLAYSTATE_CONNECTING = 8; // 0x8
+    field public static final int PLAYSTATE_ERROR = 7; // 0x7
+    field public static final int PLAYSTATE_FAST_FORWARDING = 4; // 0x4
+    field public static final int PLAYSTATE_NONE = 0; // 0x0
+    field public static final int PLAYSTATE_PAUSED = 2; // 0x2
+    field public static final int PLAYSTATE_PLAYING = 3; // 0x3
+    field public static final int PLAYSTATE_REWINDING = 5; // 0x5
+    field public static final int PLAYSTATE_SKIPPING_BACKWARDS = 9; // 0x9
+    field public static final int PLAYSTATE_SKIPPING_FORWARDS = 10; // 0xa
+    field public static final int PLAYSTATE_STOPPED = 1; // 0x1
+  }
+
+  public final class Route {
+    method public android.media.session.RouteInterface getInterface(java.lang.String);
+    method public android.media.session.RouteOptions getOptions();
+    method public android.media.session.RouteInfo getRouteInfo();
+  }
+
+  public final class RouteInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.util.List<android.media.session.RouteOptions> getConnectionMethods();
+    method public java.lang.String getId();
+    method public java.lang.String getName();
+    method public java.lang.String getProvider();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+  public static final class RouteInfo.Builder {
+    ctor public RouteInfo.Builder(android.media.session.RouteInfo);
+    ctor public RouteInfo.Builder();
+    method public android.media.session.RouteInfo.Builder addRouteOptions(android.media.session.RouteOptions);
+    method public android.media.session.RouteInfo build();
+    method public android.media.session.RouteInfo.Builder clearRouteOptions();
+    method public int getOptionsSize();
+    method public android.media.session.RouteInfo.Builder setId(java.lang.String);
+    method public android.media.session.RouteInfo.Builder setName(java.lang.String);
+  }
+
+  public final class RouteInterface {
+    method public void addListener(android.media.session.RouteInterface.EventListener);
+    method public void addListener(android.media.session.RouteInterface.EventListener, android.os.Handler);
+    method public void removeListener(android.media.session.RouteInterface.EventListener);
+    method public boolean sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+    field public static final int RESULT_COMMAND_NOT_SUPPORTED = -3; // 0xfffffffd
+    field public static final int RESULT_ERROR = -1; // 0xffffffff
+    field public static final int RESULT_INTERFACE_NOT_SUPPORTED = -2; // 0xfffffffe
+    field public static final int RESULT_NOT_CONNECTED = -5; // 0xfffffffb
+    field public static final int RESULT_ROUTE_IS_STALE = -4; // 0xfffffffc
+    field public static final int RESULT_SUCCESS = 1; // 0x1
+  }
+
+  public static abstract class RouteInterface.EventListener {
+    ctor public RouteInterface.EventListener();
+    method public abstract void onEvent(java.lang.String, android.os.Bundle);
+  }
+
+  public final class RouteOptions implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.os.Bundle getConnectionParams();
+    method public java.util.List<java.lang.String> getInterfaceNames();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+  public static final class RouteOptions.Builder {
+    ctor public RouteOptions.Builder();
+    method public android.media.session.RouteOptions.Builder addInterface(java.lang.String);
+    method public android.media.session.RouteOptions build();
+    method public android.media.session.RouteOptions.Builder setParameters(android.os.Bundle);
+  }
+
+  public final class RoutePlaybackControls {
+    method public void addListener(android.media.session.RoutePlaybackControls.Listener);
+    method public void addListener(android.media.session.RoutePlaybackControls.Listener, android.os.Handler);
+    method public void fastForward();
+    method public static android.media.session.RoutePlaybackControls from(android.media.session.Route);
+    method public void getCapabilities(android.os.ResultReceiver);
+    method public void getCurrentPosition(android.os.ResultReceiver);
+    method public void pause();
+    method public void playNow(java.lang.String);
+    method public void removeListener(android.media.session.RoutePlaybackControls.Listener);
+    method public void resume();
+    field public static final java.lang.String NAME = "android.media.session.RoutePlaybackControls";
+  }
+
+  public static abstract class RoutePlaybackControls.Listener extends android.media.session.RouteInterface.EventListener {
+    ctor public RoutePlaybackControls.Listener();
+    method public final void onEvent(java.lang.String, android.os.Bundle);
+    method public void onMetadataUpdate(android.media.session.MediaMetadata);
+    method public void onPlaybackStateChange(int);
+  }
+
+  public final class Session {
+    method public void addCallback(android.media.session.Session.Callback);
+    method public void addCallback(android.media.session.Session.Callback, android.os.Handler);
+    method public void connect(android.media.session.RouteInfo, android.media.session.RouteOptions);
+    method public void disconnect(android.media.session.RouteInfo);
+    method public android.media.session.SessionToken getSessionToken();
+    method public android.media.session.TransportPerformer getTransportPerformer();
+    method public void publish();
+    method public void release();
+    method public void removeCallback(android.media.session.Session.Callback);
+    method public void sendEvent(java.lang.String, android.os.Bundle);
+    method public void setRouteOptions(java.util.List<android.media.session.RouteOptions>);
+    method public android.media.session.TransportPerformer setTransportPerformerEnabled();
+  }
+
+  public static abstract class Session.Callback {
+    ctor public Session.Callback();
+    method public void onCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+    method public void onMediaButton(android.content.Intent);
+    method public void onRequestRouteChange(android.media.session.RouteInfo);
+    method public void onRouteConnected(android.media.session.Route);
+    method public void onRouteDisconnected(android.media.session.Route, int);
+  }
+
+  public final class SessionController {
+    method public void addCallback(android.media.session.SessionController.Callback);
+    method public void addCallback(android.media.session.SessionController.Callback, android.os.Handler);
+    method public static android.media.session.SessionController fromToken(android.media.session.SessionToken);
+    method public android.media.session.TransportController getTransportController();
+    method public void removeCallback(android.media.session.SessionController.Callback);
+    method public void sendCommand(java.lang.String, android.os.Bundle, android.os.ResultReceiver);
+    method public void sendMediaButton(int);
+    method public void showRoutePicker();
+  }
+
+  public static abstract class SessionController.Callback {
+    ctor public SessionController.Callback();
+    method public void onEvent(java.lang.String, android.os.Bundle);
+    method public void onRouteChanged(android.media.session.RouteInfo);
+  }
+
+  public final class SessionInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public java.lang.String getId();
+    method public java.lang.String getPackageName();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+  public final class SessionManager {
+    method public android.media.session.Session createSession(java.lang.String);
+    method public java.util.List<android.media.session.SessionController> getActiveSessions();
+  }
+
+  public class SessionToken implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+  public final class TransportController {
+    method public void addStateListener(android.media.session.TransportController.TransportStateListener);
+    method public void addStateListener(android.media.session.TransportController.TransportStateListener, android.os.Handler);
+    method public void fastForward();
+    method public android.media.session.MediaMetadata getMetadata();
+    method public android.media.session.PlaybackState getPlaybackState();
+    method public int getRatingType();
+    method public void next();
+    method public void pause();
+    method public void play();
+    method public void previous();
+    method public void rate(android.media.Rating);
+    method public void removeStateListener(android.media.session.TransportController.TransportStateListener);
+    method public void rewind();
+    method public void seekTo(long);
+    method public void stop();
+  }
+
+  public static abstract class TransportController.TransportStateListener {
+    ctor public TransportController.TransportStateListener();
+    method public void onMetadataChanged(android.media.session.MediaMetadata);
+    method public void onPlaybackStateChanged(android.media.session.PlaybackState);
+  }
+
+  public final class TransportPerformer {
+    method public void addListener(android.media.session.TransportPerformer.Listener);
+    method public void addListener(android.media.session.TransportPerformer.Listener, android.os.Handler);
+    method public void removeListener(android.media.session.TransportPerformer.Listener);
+    method public final void setMetadata(android.media.session.MediaMetadata);
+    method public final void setPlaybackState(android.media.session.PlaybackState);
+  }
+
+  public static abstract class TransportPerformer.Listener {
+    ctor public TransportPerformer.Listener();
+    method public void onFastForward();
+    method public void onNext();
+    method public void onPause();
+    method public void onPlay();
+    method public void onPrevious();
+    method public void onRate(android.media.Rating);
+    method public void onRewind();
+    method public void onRouteFocusChange(int);
+    method public void onSeekTo(long);
+    method public void onStop();
+  }
+
+}
+
 package android.mtp {
 
   public final class MtpConstants {
@@ -13891,11 +15603,14 @@
     method public android.net.NetworkInfo getNetworkInfo(int);
     method public int getNetworkPreference();
     method public boolean isActiveNetworkMetered();
+    method public boolean isNetworkActive();
     method public static boolean isNetworkTypeValid(int);
+    method public void registerNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
     method public boolean requestRouteToHost(int, int);
     method public void setNetworkPreference(int);
     method public int startUsingNetworkFeature(int, java.lang.String);
     method public int stopUsingNetworkFeature(int, java.lang.String);
+    method public void unregisterNetworkActiveListener(android.net.ConnectivityManager.OnNetworkActiveListener);
     field public static final deprecated java.lang.String ACTION_BACKGROUND_DATA_SETTING_CHANGED = "android.net.conn.BACKGROUND_DATA_SETTING_CHANGED";
     field public static final java.lang.String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
     field public static final deprecated int DEFAULT_NETWORK_PREFERENCE = 1; // 0x1
@@ -13918,6 +15633,10 @@
     field public static final int TYPE_WIMAX = 6; // 0x6
   }
 
+  public static abstract interface ConnectivityManager.OnNetworkActiveListener {
+    method public abstract void onNetworkActive();
+  }
+
   public class Credentials {
     ctor public Credentials(int, int, int);
     method public int getGid();
@@ -14372,6 +16091,7 @@
   public class X509TrustManagerExtensions {
     ctor public X509TrustManagerExtensions(javax.net.ssl.X509TrustManager) throws java.lang.IllegalArgumentException;
     method public java.util.List<java.security.cert.X509Certificate> checkServerTrusted(java.security.cert.X509Certificate[], java.lang.String, java.lang.String) throws java.security.cert.CertificateException;
+    method public boolean isUserAddedCertificate(java.security.cert.X509Certificate);
   }
 
 }
@@ -14816,6 +16536,7 @@
     method public int describeContents();
     method public java.lang.String getBSSID();
     method public static android.net.NetworkInfo.DetailedState getDetailedStateOf(android.net.wifi.SupplicantState);
+    method public int getFrequency();
     method public boolean getHiddenSSID();
     method public int getIpAddress();
     method public int getLinkSpeed();
@@ -14825,6 +16546,7 @@
     method public java.lang.String getSSID();
     method public android.net.wifi.SupplicantState getSupplicantState();
     method public void writeToParcel(android.os.Parcel, int);
+    field public static final java.lang.String FREQUENCY_UNITS = "MHz";
     field public static final java.lang.String LINK_SPEED_UNITS = "Mbps";
   }
 
@@ -14916,6 +16638,19 @@
 
 }
 
+package android.net.wifi.hotspot {
+
+  public abstract interface IWifiHotspotManager implements android.os.IInterface {
+    method public abstract void test() throws android.os.RemoteException;
+  }
+
+  public class WifiHotspotManager {
+    ctor public WifiHotspotManager(android.content.Context, android.net.wifi.hotspot.IWifiHotspotManager);
+    method public void test();
+  }
+
+}
+
 package android.net.wifi.p2p {
 
   public class WifiP2pConfig implements android.os.Parcelable {
@@ -15137,6 +16872,7 @@
     method public static android.nfc.NdefRecord createApplicationRecord(java.lang.String);
     method public static android.nfc.NdefRecord createExternal(java.lang.String, java.lang.String, byte[]);
     method public static android.nfc.NdefRecord createMime(java.lang.String, byte[]);
+    method public static android.nfc.NdefRecord createTextRecord(java.lang.String, java.lang.String);
     method public static android.nfc.NdefRecord createUri(android.net.Uri);
     method public static android.nfc.NdefRecord createUri(java.lang.String);
     method public int describeContents();
@@ -15173,6 +16909,7 @@
     method public deprecated void enableForegroundNdefPush(android.app.Activity, android.nfc.NdefMessage);
     method public void enableReaderMode(android.app.Activity, android.nfc.NfcAdapter.ReaderCallback, int, android.os.Bundle);
     method public static android.nfc.NfcAdapter getDefaultAdapter(android.content.Context);
+    method public boolean invokeBeam(android.app.Activity);
     method public boolean isEnabled();
     method public boolean isNdefPushEnabled();
     method public void setBeamPushUris(android.net.Uri[], android.app.Activity);
@@ -15226,6 +16963,11 @@
     method public android.nfc.NfcAdapter getDefaultAdapter();
   }
 
+  public class NfcUnlock {
+    method public static synchronized android.nfc.NfcUnlock getInstance(android.nfc.NfcAdapter);
+    method public boolean getNfcUnlockEnabled();
+  }
+
   public final class Tag implements android.os.Parcelable {
     method public int describeContents();
     method public byte[] getId();
@@ -15243,11 +16985,24 @@
 
 package android.nfc.cardemulation {
 
+  public final class AidGroup implements android.os.Parcelable {
+    ctor public AidGroup(java.util.ArrayList<java.lang.String>, java.lang.String);
+    method public int describeContents();
+    method public java.util.ArrayList<java.lang.String> getAids();
+    method public java.lang.String getCategory();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+    field public static final int MAX_NUM_AIDS = 256; // 0x100
+  }
+
   public final class CardEmulation {
+    method public android.nfc.cardemulation.AidGroup getAidGroupForService(android.content.ComponentName, java.lang.String);
     method public static synchronized android.nfc.cardemulation.CardEmulation getInstance(android.nfc.NfcAdapter);
     method public int getSelectionModeForCategory(java.lang.String);
     method public boolean isDefaultServiceForAid(android.content.ComponentName, java.lang.String);
     method public boolean isDefaultServiceForCategory(android.content.ComponentName, java.lang.String);
+    method public boolean registerAidGroupForService(android.content.ComponentName, android.nfc.cardemulation.AidGroup);
+    method public boolean removeAidGroupForService(android.content.ComponentName, java.lang.String);
     field public static final java.lang.String ACTION_CHANGE_DEFAULT = "android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT";
     field public static final java.lang.String CATEGORY_OTHER = "other";
     field public static final java.lang.String CATEGORY_PAYMENT = "payment";
@@ -15598,8 +17353,10 @@
   }
 
   public abstract class EGLObjectHandle {
-    ctor protected EGLObjectHandle(int);
-    method public int getHandle();
+    ctor protected deprecated EGLObjectHandle(int);
+    ctor protected EGLObjectHandle(long);
+    method public deprecated int getHandle();
+    method public long getNativeHandle();
   }
 
   public class EGLSurface extends android.opengl.EGLObjectHandle {
@@ -16511,11 +18268,9 @@
     method public static void glGenTextures(int, java.nio.IntBuffer);
     method public static void glGenerateMipmap(int);
     method public static void glGetActiveAttrib(int, int, int, int[], int, int[], int, int[], int, byte[], int);
-    method public static void glGetActiveAttrib(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte);
     method public static java.lang.String glGetActiveAttrib(int, int, int[], int, int[], int);
     method public static java.lang.String glGetActiveAttrib(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
     method public static void glGetActiveUniform(int, int, int, int[], int, int[], int, int[], int, byte[], int);
-    method public static void glGetActiveUniform(int, int, int, java.nio.IntBuffer, java.nio.IntBuffer, java.nio.IntBuffer, byte);
     method public static java.lang.String glGetActiveUniform(int, int, int[], int, int[], int);
     method public static java.lang.String glGetActiveUniform(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
     method public static void glGetAttachedShaders(int, int, int[], int, int[], int);
@@ -16541,7 +18296,6 @@
     method public static void glGetShaderPrecisionFormat(int, int, int[], int, int[], int);
     method public static void glGetShaderPrecisionFormat(int, int, java.nio.IntBuffer, java.nio.IntBuffer);
     method public static void glGetShaderSource(int, int, int[], int, byte[], int);
-    method public static void glGetShaderSource(int, int, java.nio.IntBuffer, byte);
     method public static java.lang.String glGetShaderSource(int);
     method public static void glGetShaderiv(int, int, int[], int);
     method public static void glGetShaderiv(int, int, java.nio.IntBuffer);
@@ -17563,6 +19317,7 @@
 
   public class BatteryManager {
     ctor public BatteryManager();
+    method public android.os.BatteryProperty getProperty(int) throws android.os.RemoteException;
     field public static final int BATTERY_HEALTH_COLD = 7; // 0x7
     field public static final int BATTERY_HEALTH_DEAD = 4; // 0x4
     field public static final int BATTERY_HEALTH_GOOD = 2; // 0x2
@@ -17590,6 +19345,18 @@
     field public static final java.lang.String EXTRA_VOLTAGE = "voltage";
   }
 
+  public class BatteryProperty implements android.os.Parcelable {
+    method public int describeContents();
+    method public int getInt();
+    method public void readFromParcel(android.os.Parcel);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final int CAPACITY = 4; // 0x4
+    field public static final int CHARGE_COUNTER = 1; // 0x1
+    field public static final android.os.Parcelable.Creator CREATOR;
+    field public static final int CURRENT_AVERAGE = 3; // 0x3
+    field public static final int CURRENT_NOW = 2; // 0x2
+  }
+
   public class Binder implements android.os.IBinder {
     ctor public Binder();
     method public void attachInterface(android.os.IInterface, java.lang.String);
@@ -17671,13 +19438,15 @@
     field public static final int JELLY_BEAN_MR2 = 18; // 0x12
     field public static final int KITKAT = 19; // 0x13
     field public static final int KITKAT_WATCH = 10000; // 0x2710
+    field public static final int L = 10000; // 0x2710
   }
 
-  public final class Bundle implements java.lang.Cloneable android.os.Parcelable {
+  public final class Bundle extends android.os.CommonBundle {
     ctor public Bundle();
     ctor public Bundle(java.lang.ClassLoader);
     ctor public Bundle(int);
     ctor public Bundle(android.os.Bundle);
+    ctor public Bundle(android.os.PersistableBundle);
     method public void clear();
     method public java.lang.Object clone();
     method public boolean containsKey(java.lang.String);
@@ -17715,6 +19484,7 @@
     method public T getParcelable(java.lang.String);
     method public android.os.Parcelable[] getParcelableArray(java.lang.String);
     method public java.util.ArrayList<T> getParcelableArrayList(java.lang.String);
+    method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
     method public java.io.Serializable getSerializable(java.lang.String);
     method public short getShort(java.lang.String);
     method public short getShort(java.lang.String, short);
@@ -17728,6 +19498,7 @@
     method public boolean isEmpty();
     method public java.util.Set<java.lang.String> keySet();
     method public void putAll(android.os.Bundle);
+    method public void putAll(android.os.PersistableBundle);
     method public void putBinder(java.lang.String, android.os.IBinder);
     method public void putBoolean(java.lang.String, boolean);
     method public void putBooleanArray(java.lang.String, boolean[]);
@@ -17751,6 +19522,7 @@
     method public void putParcelable(java.lang.String, android.os.Parcelable);
     method public void putParcelableArray(java.lang.String, android.os.Parcelable[]);
     method public void putParcelableArrayList(java.lang.String, java.util.ArrayList<? extends android.os.Parcelable>);
+    method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
     method public void putSerializable(java.lang.String, java.io.Serializable);
     method public void putShort(java.lang.String, short);
     method public void putShortArray(java.lang.String, short[]);
@@ -17779,6 +19551,9 @@
     method public abstract void onCancel();
   }
 
+   abstract class CommonBundle implements java.lang.Cloneable android.os.Parcelable {
+  }
+
   public class ConditionVariable {
     ctor public ConditionVariable();
     ctor public ConditionVariable(boolean);
@@ -17790,7 +19565,7 @@
 
   public abstract class CountDownTimer {
     ctor public CountDownTimer(long, long);
-    method public final void cancel();
+    method public final synchronized void cancel();
     method public abstract void onFinish();
     method public abstract void onTick(long);
     method public final synchronized android.os.CountDownTimer start();
@@ -17942,10 +19717,13 @@
     method public static java.io.File getExternalStorageDirectory();
     method public static java.io.File getExternalStoragePublicDirectory(java.lang.String);
     method public static java.lang.String getExternalStorageState();
+    method public static java.lang.String getExternalStorageState(java.io.File);
     method public static java.io.File getRootDirectory();
-    method public static java.lang.String getStorageState(java.io.File);
+    method public static deprecated java.lang.String getStorageState(java.io.File);
     method public static boolean isExternalStorageEmulated();
+    method public static boolean isExternalStorageEmulated(java.io.File);
     method public static boolean isExternalStorageRemovable();
+    method public static boolean isExternalStorageRemovable(java.io.File);
     field public static java.lang.String DIRECTORY_ALARMS;
     field public static java.lang.String DIRECTORY_DCIM;
     field public static java.lang.String DIRECTORY_DOCUMENTS;
@@ -18176,7 +19954,6 @@
     method public final boolean hasFileDescriptors();
     method public final byte[] marshall();
     method public static android.os.Parcel obtain();
-    method protected static final android.os.Parcel obtain(int);
     method public final java.lang.Object[] readArray(java.lang.ClassLoader);
     method public final java.util.ArrayList readArrayList(java.lang.ClassLoader);
     method public final void readBinderArray(android.os.IBinder[]);
@@ -18203,6 +19980,8 @@
     method public final void readMap(java.util.Map, java.lang.ClassLoader);
     method public final T readParcelable(java.lang.ClassLoader);
     method public final android.os.Parcelable[] readParcelableArray(java.lang.ClassLoader);
+    method public final android.os.PersistableBundle readPersistableBundle();
+    method public final android.os.PersistableBundle readPersistableBundle(java.lang.ClassLoader);
     method public final java.io.Serializable readSerializable();
     method public final android.util.SparseArray readSparseArray(java.lang.ClassLoader);
     method public final android.util.SparseBooleanArray readSparseBooleanArray();
@@ -18243,6 +20022,7 @@
     method public final void writeNoException();
     method public final void writeParcelable(android.os.Parcelable, int);
     method public final void writeParcelableArray(T[], int);
+    method public final void writePersistableBundle(android.os.PersistableBundle);
     method public final void writeSerializable(java.io.Serializable);
     method public final void writeSparseArray(android.util.SparseArray<java.lang.Object>);
     method public final void writeSparseBooleanArray(android.util.SparseBooleanArray);
@@ -18353,6 +20133,51 @@
     field public static final int PATTERN_SIMPLE_GLOB = 2; // 0x2
   }
 
+  public final class PersistableBundle extends android.os.CommonBundle {
+    ctor public PersistableBundle();
+    ctor public PersistableBundle(java.lang.ClassLoader);
+    ctor public PersistableBundle(int);
+    ctor public PersistableBundle(android.os.PersistableBundle);
+    method public void clear();
+    method public java.lang.Object clone();
+    method public boolean containsKey(java.lang.String);
+    method public int describeContents();
+    method public java.lang.Object get(java.lang.String);
+    method public java.lang.ClassLoader getClassLoader();
+    method public double getDouble(java.lang.String);
+    method public double getDouble(java.lang.String, double);
+    method public double[] getDoubleArray(java.lang.String);
+    method public int getInt(java.lang.String);
+    method public int getInt(java.lang.String, int);
+    method public int[] getIntArray(java.lang.String);
+    method public long getLong(java.lang.String);
+    method public long getLong(java.lang.String, long);
+    method public long[] getLongArray(java.lang.String);
+    method public android.os.PersistableBundle getPersistableBundle(java.lang.String);
+    method public java.lang.String getString(java.lang.String);
+    method public java.lang.String getString(java.lang.String, java.lang.String);
+    method public java.lang.String[] getStringArray(java.lang.String);
+    method public boolean isEmpty();
+    method public java.util.Set<java.lang.String> keySet();
+    method public void putAll(android.os.PersistableBundle);
+    method public void putDouble(java.lang.String, double);
+    method public void putDoubleArray(java.lang.String, double[]);
+    method public void putInt(java.lang.String, int);
+    method public void putIntArray(java.lang.String, int[]);
+    method public void putLong(java.lang.String, long);
+    method public void putLongArray(java.lang.String, long[]);
+    method public void putPersistableBundle(java.lang.String, android.os.PersistableBundle);
+    method public void putString(java.lang.String, java.lang.String);
+    method public void putStringArray(java.lang.String, java.lang.String[]);
+    method public void readFromParcel(android.os.Parcel);
+    method public void remove(java.lang.String);
+    method public void setClassLoader(java.lang.ClassLoader);
+    method public int size();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+    field public static final android.os.PersistableBundle EMPTY;
+  }
+
   public final class PowerManager {
     method public void goToSleep(long);
     method public boolean isInteractive();
@@ -18365,6 +20190,7 @@
     field public static final deprecated int FULL_WAKE_LOCK = 26; // 0x1a
     field public static final int ON_AFTER_RELEASE = 536870912; // 0x20000000
     field public static final int PARTIAL_WAKE_LOCK = 1; // 0x1
+    field public static final java.lang.String REBOOT_RECOVERY = "recovery";
     field public static final deprecated int SCREEN_BRIGHT_WAKE_LOCK = 10; // 0xa
     field public static final deprecated int SCREEN_DIM_WAKE_LOCK = 6; // 0x6
   }
@@ -18567,10 +20393,12 @@
 
   public class UserManager {
     method public android.os.Bundle getApplicationRestrictions(java.lang.String);
+    method public android.graphics.drawable.Drawable getBadgedDrawableForUser(android.graphics.drawable.Drawable, android.os.UserHandle);
     method public long getSerialNumberForUser(android.os.UserHandle);
     method public int getUserCount();
     method public android.os.UserHandle getUserForSerialNumber(long);
     method public java.lang.String getUserName();
+    method public java.util.List<android.os.UserHandle> getUserProfiles();
     method public android.os.Bundle getUserRestrictions();
     method public android.os.Bundle getUserRestrictions(android.os.UserHandle);
     method public boolean isUserAGoat();
@@ -18595,8 +20423,10 @@
   public abstract class Vibrator {
     method public abstract void cancel();
     method public abstract boolean hasVibrator();
-    method public abstract void vibrate(long);
-    method public abstract void vibrate(long[], int);
+    method public void vibrate(long);
+    method public void vibrate(long, int);
+    method public void vibrate(long[], int);
+    method public void vibrate(long[], int, int);
   }
 
   public class WorkSource implements android.os.Parcelable {
@@ -18634,6 +20464,10 @@
     method public boolean isObbMounted(java.lang.String);
     method public boolean mountObb(java.lang.String, java.lang.String, android.os.storage.OnObbStateChangeListener);
     method public boolean unmountObb(java.lang.String, boolean, android.os.storage.OnObbStateChangeListener);
+    field public static final int CRYPT_TYPE_DEFAULT = 1; // 0x1
+    field public static final int CRYPT_TYPE_PASSWORD = 0; // 0x0
+    field public static final int CRYPT_TYPE_PATTERN = 2; // 0x2
+    field public static final int CRYPT_TYPE_PIN = 3; // 0x3
   }
 
 }
@@ -18642,13 +20476,16 @@
 
   public class CheckBoxPreference extends android.preference.TwoStatePreference {
     ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet, int, int);
     ctor public CheckBoxPreference(android.content.Context, android.util.AttributeSet);
     ctor public CheckBoxPreference(android.content.Context);
   }
 
   public abstract class DialogPreference extends android.preference.Preference implements android.content.DialogInterface.OnClickListener android.content.DialogInterface.OnDismissListener android.preference.PreferenceManager.OnActivityDestroyListener {
+    ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int, int);
     ctor public DialogPreference(android.content.Context, android.util.AttributeSet, int);
     ctor public DialogPreference(android.content.Context, android.util.AttributeSet);
+    ctor public DialogPreference(android.content.Context);
     method public android.app.Dialog getDialog();
     method public android.graphics.drawable.Drawable getDialogIcon();
     method public int getDialogLayoutResource();
@@ -18678,6 +20515,7 @@
   }
 
   public class EditTextPreference extends android.preference.DialogPreference {
+    ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int, int);
     ctor public EditTextPreference(android.content.Context, android.util.AttributeSet, int);
     ctor public EditTextPreference(android.content.Context, android.util.AttributeSet);
     ctor public EditTextPreference(android.content.Context);
@@ -18688,6 +20526,8 @@
   }
 
   public class ListPreference extends android.preference.DialogPreference {
+    ctor public ListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public ListPreference(android.content.Context, android.util.AttributeSet, int);
     ctor public ListPreference(android.content.Context, android.util.AttributeSet);
     ctor public ListPreference(android.content.Context);
     method public int findIndexOfValue(java.lang.String);
@@ -18704,6 +20544,8 @@
   }
 
   public class MultiSelectListPreference extends android.preference.DialogPreference {
+    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet, int);
     ctor public MultiSelectListPreference(android.content.Context, android.util.AttributeSet);
     ctor public MultiSelectListPreference(android.content.Context);
     method public int findIndexOfValue(java.lang.String);
@@ -18718,6 +20560,7 @@
   }
 
   public class Preference implements java.lang.Comparable {
+    ctor public Preference(android.content.Context, android.util.AttributeSet, int, int);
     ctor public Preference(android.content.Context, android.util.AttributeSet, int);
     ctor public Preference(android.content.Context, android.util.AttributeSet);
     ctor public Preference(android.content.Context);
@@ -18883,6 +20726,7 @@
   }
 
   public class PreferenceCategory extends android.preference.PreferenceGroup {
+    ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int, int);
     ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet, int);
     ctor public PreferenceCategory(android.content.Context, android.util.AttributeSet);
     ctor public PreferenceCategory(android.content.Context);
@@ -18904,6 +20748,7 @@
   }
 
   public abstract class PreferenceGroup extends android.preference.Preference {
+    ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int, int);
     ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet, int);
     ctor public PreferenceGroup(android.content.Context, android.util.AttributeSet);
     method public void addItemFromInflater(android.preference.Preference);
@@ -18958,6 +20803,7 @@
   }
 
   public class RingtonePreference extends android.preference.Preference implements android.preference.PreferenceManager.OnActivityResultListener {
+    ctor public RingtonePreference(android.content.Context, android.util.AttributeSet, int, int);
     ctor public RingtonePreference(android.content.Context, android.util.AttributeSet, int);
     ctor public RingtonePreference(android.content.Context, android.util.AttributeSet);
     ctor public RingtonePreference(android.content.Context);
@@ -18974,6 +20820,7 @@
   }
 
   public class SwitchPreference extends android.preference.TwoStatePreference {
+    ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int, int);
     ctor public SwitchPreference(android.content.Context, android.util.AttributeSet, int);
     ctor public SwitchPreference(android.content.Context, android.util.AttributeSet);
     ctor public SwitchPreference(android.content.Context);
@@ -18986,6 +20833,7 @@
   }
 
   public abstract class TwoStatePreference extends android.preference.Preference {
+    ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int, int);
     ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet, int);
     ctor public TwoStatePreference(android.content.Context, android.util.AttributeSet);
     ctor public TwoStatePreference(android.content.Context);
@@ -19741,16 +21589,24 @@
   public static class CallLog.Calls implements android.provider.BaseColumns {
     ctor public CallLog.Calls();
     method public static java.lang.String getLastOutgoingCall(android.content.Context);
+    field public static final java.lang.String CACHED_FORMATTED_NUMBER = "formatted_number";
+    field public static final java.lang.String CACHED_LOOKUP_URI = "lookup_uri";
+    field public static final java.lang.String CACHED_MATCHED_NUMBER = "matched_number";
     field public static final java.lang.String CACHED_NAME = "name";
+    field public static final java.lang.String CACHED_NORMALIZED_NUMBER = "normalized_number";
     field public static final java.lang.String CACHED_NUMBER_LABEL = "numberlabel";
     field public static final java.lang.String CACHED_NUMBER_TYPE = "numbertype";
+    field public static final java.lang.String CACHED_PHOTO_ID = "photo_id";
     field public static final android.net.Uri CONTENT_FILTER_URI;
     field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/calls";
     field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/calls";
     field public static final android.net.Uri CONTENT_URI;
+    field public static final android.net.Uri CONTENT_URI_WITH_VOICEMAIL;
+    field public static final java.lang.String COUNTRY_ISO = "countryiso";
     field public static final java.lang.String DATE = "date";
     field public static final java.lang.String DEFAULT_SORT_ORDER = "date DESC";
     field public static final java.lang.String DURATION = "duration";
+    field public static final java.lang.String GEOCODED_LOCATION = "geocoded_location";
     field public static final int INCOMING_TYPE = 1; // 0x1
     field public static final java.lang.String IS_READ = "is_read";
     field public static final java.lang.String LIMIT_PARAM_KEY = "limit";
@@ -19765,6 +21621,8 @@
     field public static final int PRESENTATION_RESTRICTED = 2; // 0x2
     field public static final int PRESENTATION_UNKNOWN = 3; // 0x3
     field public static final java.lang.String TYPE = "type";
+    field public static final int VOICEMAIL_TYPE = 4; // 0x4
+    field public static final java.lang.String VOICEMAIL_URI = "voicemail_uri";
   }
 
   public deprecated class Contacts {
@@ -19853,6 +21711,16 @@
     field public static final deprecated android.net.Uri DELETED_CONTENT_URI;
     field public static final deprecated java.lang.String GROUP_ANDROID_STARRED = "Starred in Android";
     field public static final deprecated java.lang.String GROUP_MY_CONTACTS = "Contacts";
+    field public static final java.lang.String NON_SYNCABLE_ACCOUNT = "non_syncable";
+    field public static final java.lang.String NON_SYNCABLE_ACCOUNT_TYPE = "android.local";
+    field public static final java.lang.String _SYNC_ACCOUNT = "_sync_account";
+    field public static final java.lang.String _SYNC_ACCOUNT_TYPE = "_sync_account_type";
+    field public static final java.lang.String _SYNC_DIRTY = "_sync_dirty";
+    field public static final java.lang.String _SYNC_ID = "_sync_id";
+    field public static final java.lang.String _SYNC_LOCAL_ID = "_sync_local_id";
+    field public static final java.lang.String _SYNC_MARK = "_sync_mark";
+    field public static final java.lang.String _SYNC_TIME = "_sync_time";
+    field public static final java.lang.String _SYNC_VERSION = "_sync_version";
   }
 
   public static abstract deprecated interface Contacts.GroupsColumns {
@@ -19954,9 +21822,19 @@
     field public static final deprecated android.net.Uri CONTENT_URI;
     field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "name ASC";
     field public static final deprecated android.net.Uri DELETED_CONTENT_URI;
+    field public static final java.lang.String NON_SYNCABLE_ACCOUNT = "non_syncable";
+    field public static final java.lang.String NON_SYNCABLE_ACCOUNT_TYPE = "android.local";
     field public static final deprecated java.lang.String PRIMARY_EMAIL_ID = "primary_email";
     field public static final deprecated java.lang.String PRIMARY_ORGANIZATION_ID = "primary_organization";
     field public static final deprecated java.lang.String PRIMARY_PHONE_ID = "primary_phone";
+    field public static final java.lang.String _SYNC_ACCOUNT = "_sync_account";
+    field public static final java.lang.String _SYNC_ACCOUNT_TYPE = "_sync_account_type";
+    field public static final java.lang.String _SYNC_DIRTY = "_sync_dirty";
+    field public static final java.lang.String _SYNC_ID = "_sync_id";
+    field public static final java.lang.String _SYNC_LOCAL_ID = "_sync_local_id";
+    field public static final java.lang.String _SYNC_MARK = "_sync_mark";
+    field public static final java.lang.String _SYNC_TIME = "_sync_time";
+    field public static final java.lang.String _SYNC_VERSION = "_sync_version";
   }
 
   public static final deprecated class Contacts.People.ContactMethods implements android.provider.BaseColumns android.provider.Contacts.ContactMethodsColumns android.provider.Contacts.PeopleColumns {
@@ -20019,6 +21897,16 @@
     field public static final deprecated java.lang.String CONTENT_DIRECTORY = "photo";
     field public static final deprecated android.net.Uri CONTENT_URI;
     field public static final deprecated java.lang.String DEFAULT_SORT_ORDER = "person ASC";
+    field public static final java.lang.String NON_SYNCABLE_ACCOUNT = "non_syncable";
+    field public static final java.lang.String NON_SYNCABLE_ACCOUNT_TYPE = "android.local";
+    field public static final java.lang.String _SYNC_ACCOUNT = "_sync_account";
+    field public static final java.lang.String _SYNC_ACCOUNT_TYPE = "_sync_account_type";
+    field public static final java.lang.String _SYNC_DIRTY = "_sync_dirty";
+    field public static final java.lang.String _SYNC_ID = "_sync_id";
+    field public static final java.lang.String _SYNC_LOCAL_ID = "_sync_local_id";
+    field public static final java.lang.String _SYNC_MARK = "_sync_mark";
+    field public static final java.lang.String _SYNC_TIME = "_sync_time";
+    field public static final java.lang.String _SYNC_VERSION = "_sync_version";
   }
 
   public static abstract deprecated interface Contacts.PhotosColumns {
@@ -20071,6 +21959,8 @@
     field public static final java.lang.String LIMIT_PARAM_KEY = "limit";
     field public static final java.lang.String PRIMARY_ACCOUNT_NAME = "name_for_primary_account";
     field public static final java.lang.String PRIMARY_ACCOUNT_TYPE = "type_for_primary_account";
+    field public static final java.lang.String REMOVE_DUPLICATE_ENTRIES = "remove_duplicate_entries";
+    field public static final java.lang.String STREQUENT_PHONE_ONLY = "strequent_phone_only";
   }
 
   public static final class ContactsContract.AggregationExceptions implements android.provider.BaseColumns {
@@ -20099,6 +21989,12 @@
     field public static final int TYPE_CUSTOM = 0; // 0x0
   }
 
+  public static final class ContactsContract.CommonDataKinds.Callable implements android.provider.ContactsContract.CommonDataKinds.CommonColumns android.provider.ContactsContract.DataColumnsWithJoins {
+    ctor public ContactsContract.CommonDataKinds.Callable();
+    field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final android.net.Uri CONTENT_URI;
+  }
+
   protected static abstract interface ContactsContract.CommonDataKinds.CommonColumns implements android.provider.ContactsContract.CommonDataKinds.BaseTypes {
     field public static final java.lang.String DATA = "data1";
     field public static final java.lang.String LABEL = "data3";
@@ -20277,6 +22173,7 @@
     field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/name";
     field public static final java.lang.String DISPLAY_NAME = "data1";
     field public static final java.lang.String FAMILY_NAME = "data3";
+    field public static final java.lang.String FULL_NAME_STYLE = "data10";
     field public static final java.lang.String GIVEN_NAME = "data2";
     field public static final java.lang.String MIDDLE_NAME = "data5";
     field public static final java.lang.String PHONETIC_FAMILY_NAME = "data9";
@@ -20330,6 +22227,7 @@
   protected static abstract interface ContactsContract.ContactOptionsColumns {
     field public static final java.lang.String CUSTOM_RINGTONE = "custom_ringtone";
     field public static final java.lang.String LAST_TIME_CONTACTED = "last_time_contacted";
+    field public static final java.lang.String PINNED = "pinned";
     field public static final java.lang.String SEND_TO_VOICEMAIL = "send_to_voicemail";
     field public static final java.lang.String STARRED = "starred";
     field public static final java.lang.String TIMES_CONTACTED = "times_contacted";
@@ -20356,6 +22254,7 @@
     field public static final android.net.Uri CONTENT_GROUP_URI;
     field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/contact";
     field public static final android.net.Uri CONTENT_LOOKUP_URI;
+    field public static final android.net.Uri CONTENT_MULTI_VCARD_URI;
     field public static final android.net.Uri CONTENT_STREQUENT_FILTER_URI;
     field public static final android.net.Uri CONTENT_STREQUENT_URI;
     field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/contact";
@@ -20588,6 +22487,7 @@
 
   public static final class ContactsContract.PhoneLookup implements android.provider.BaseColumns android.provider.ContactsContract.ContactOptionsColumns android.provider.ContactsContract.ContactsColumns android.provider.ContactsContract.PhoneLookupColumns {
     field public static final android.net.Uri CONTENT_FILTER_URI;
+    field public static final java.lang.String QUERY_PARAMETER_SIP_ADDRESS = "sip";
   }
 
   protected static abstract interface ContactsContract.PhoneLookupColumns {
@@ -20604,6 +22504,25 @@
     field public static final int UNDEFINED = 0; // 0x0
   }
 
+  public static final class ContactsContract.PinnedPositions {
+    ctor public ContactsContract.PinnedPositions();
+    field public static final int DEMOTED = -1; // 0xffffffff
+    field public static final java.lang.String STAR_WHEN_PINNING = "star_when_pinning";
+    field public static final java.lang.String UNDEMOTE = "undemote";
+    field public static final int UNPINNED = 2147483647; // 0x7fffffff
+    field public static final android.net.Uri UPDATE_URI;
+  }
+
+  public static final class ContactsContract.Preferences {
+    ctor public ContactsContract.Preferences();
+    field public static final java.lang.String DISPLAY_ORDER = "android.contacts.DISPLAY_ORDER";
+    field public static final int DISPLAY_ORDER_ALTERNATIVE = 2; // 0x2
+    field public static final int DISPLAY_ORDER_PRIMARY = 1; // 0x1
+    field public static final java.lang.String SORT_ORDER = "android.contacts.SORT_ORDER";
+    field public static final int SORT_ORDER_ALTERNATIVE = 2; // 0x2
+    field public static final int SORT_ORDER_PRIMARY = 1; // 0x1
+  }
+
   public static final deprecated class ContactsContract.Presence extends android.provider.ContactsContract.StatusUpdates {
     ctor public ContactsContract.Presence();
   }
@@ -20802,16 +22721,21 @@
 
   public final class DocumentsContract {
     method public static android.net.Uri buildChildDocumentsUri(java.lang.String, java.lang.String);
+    method public static android.net.Uri buildChildDocumentsViaUri(android.net.Uri, java.lang.String);
     method public static android.net.Uri buildDocumentUri(java.lang.String, java.lang.String);
+    method public static android.net.Uri buildDocumentViaUri(android.net.Uri, java.lang.String);
     method public static android.net.Uri buildRecentDocumentsUri(java.lang.String, java.lang.String);
     method public static android.net.Uri buildRootUri(java.lang.String, java.lang.String);
     method public static android.net.Uri buildRootsUri(java.lang.String);
     method public static android.net.Uri buildSearchDocumentsUri(java.lang.String, java.lang.String, java.lang.String);
+    method public static android.net.Uri buildViaUri(java.lang.String, java.lang.String);
+    method public static android.net.Uri createDocument(android.content.ContentResolver, android.net.Uri, java.lang.String, java.lang.String);
     method public static boolean deleteDocument(android.content.ContentResolver, android.net.Uri);
     method public static java.lang.String getDocumentId(android.net.Uri);
     method public static android.graphics.Bitmap getDocumentThumbnail(android.content.ContentResolver, android.net.Uri, android.graphics.Point, android.os.CancellationSignal);
     method public static java.lang.String getRootId(android.net.Uri);
     method public static java.lang.String getSearchDocumentsQuery(android.net.Uri);
+    method public static java.lang.String getViaDocumentId(android.net.Uri);
     method public static boolean isDocumentUri(android.content.Context, android.net.Uri);
     field public static final java.lang.String EXTRA_ERROR = "error";
     field public static final java.lang.String EXTRA_INFO = "info";
@@ -20848,6 +22772,7 @@
     field public static final java.lang.String COLUMN_TITLE = "title";
     field public static final int FLAG_LOCAL_ONLY = 2; // 0x2
     field public static final int FLAG_SUPPORTS_CREATE = 1; // 0x1
+    field public static final int FLAG_SUPPORTS_DIR_SELECTION = 16; // 0x10
     field public static final int FLAG_SUPPORTS_RECENTS = 4; // 0x4
     field public static final int FLAG_SUPPORTS_SEARCH = 8; // 0x8
   }
@@ -20860,6 +22785,9 @@
     method public java.lang.String getDocumentType(java.lang.String) throws java.io.FileNotFoundException;
     method public final java.lang.String getType(android.net.Uri);
     method public final android.net.Uri insert(android.net.Uri, android.content.ContentValues);
+    method public boolean isChildDocument(java.lang.String, java.lang.String);
+    method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
+    method public final android.content.res.AssetFileDescriptor openAssetFile(android.net.Uri, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method public abstract android.os.ParcelFileDescriptor openDocument(java.lang.String, java.lang.String, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method public android.content.res.AssetFileDescriptor openDocumentThumbnail(java.lang.String, android.graphics.Point, android.os.CancellationSignal) throws java.io.FileNotFoundException;
     method public final android.os.ParcelFileDescriptor openFile(android.net.Uri, java.lang.String) throws java.io.FileNotFoundException;
@@ -20872,6 +22800,7 @@
     method public android.database.Cursor queryRecentDocuments(java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
     method public abstract android.database.Cursor queryRoots(java.lang.String[]) throws java.io.FileNotFoundException;
     method public android.database.Cursor querySearchDocuments(java.lang.String, java.lang.String, java.lang.String[]) throws java.io.FileNotFoundException;
+    method public final void revokeDocumentPermission(java.lang.String);
     method public final int update(android.net.Uri, android.content.ContentValues, java.lang.String, java.lang.String[]);
   }
 
@@ -20905,6 +22834,9 @@
     field public static final java.lang.String EXTRA_MEDIA_ALBUM = "android.intent.extra.album";
     field public static final java.lang.String EXTRA_MEDIA_ARTIST = "android.intent.extra.artist";
     field public static final java.lang.String EXTRA_MEDIA_FOCUS = "android.intent.extra.focus";
+    field public static final java.lang.String EXTRA_MEDIA_GENRE = "android.intent.extra.genre";
+    field public static final java.lang.String EXTRA_MEDIA_PLAYLIST = "android.intent.extra.playlist";
+    field public static final java.lang.String EXTRA_MEDIA_RADIO_CHANNEL = "android.intent.extra.radio_channel";
     field public static final java.lang.String EXTRA_MEDIA_TITLE = "android.intent.extra.title";
     field public static final java.lang.String EXTRA_OUTPUT = "output";
     field public static final java.lang.String EXTRA_SCREEN_ORIENTATION = "android.intent.extra.screenOrientation";
@@ -21023,6 +22955,7 @@
     method public static android.net.Uri getContentUriForPath(java.lang.String);
     field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/audio";
     field public static final java.lang.String DEFAULT_SORT_ORDER = "title_key";
+    field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/audio";
     field public static final android.net.Uri EXTERNAL_CONTENT_URI;
     field public static final java.lang.String EXTRA_MAX_BYTES = "android.provider.MediaStore.extra.MAX_BYTES";
     field public static final android.net.Uri INTERNAL_CONTENT_URI;
@@ -21058,6 +22991,11 @@
     field public static final java.lang.String NAME = "name";
   }
 
+  public static final class MediaStore.Audio.Radio {
+    ctor public MediaStore.Audio.Radio();
+    field public static final java.lang.String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/radio";
+  }
+
   public static final class MediaStore.Files {
     ctor public MediaStore.Files();
     method public static android.net.Uri getContentUri(java.lang.String);
@@ -21371,6 +23309,7 @@
     field public static final java.lang.String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
     field public static final deprecated java.lang.String LOGGING_ID = "logging_id";
     field public static final deprecated java.lang.String NETWORK_PREFERENCE = "network_preference";
+    field public static final java.lang.String NFC_UNLOCK_ENABLED = "nfc_unlock_enabled";
     field public static final java.lang.String PARENTAL_CONTROL_ENABLED = "parental_control_enabled";
     field public static final java.lang.String PARENTAL_CONTROL_LAST_UPDATE = "parental_control_last_update";
     field public static final java.lang.String PARENTAL_CONTROL_REDIRECT_URL = "parental_control_redirect_url";
@@ -21838,6 +23777,71 @@
     field public static final java.lang.String TYPE = "type";
   }
 
+  public final class TvContract {
+    method public static final android.net.Uri buildChannelUri(long);
+    method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName);
+    method public static final android.net.Uri buildChannelsUriForInput(android.content.ComponentName, boolean);
+    method public static final android.net.Uri buildProgramUri(long);
+    method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri);
+    method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long);
+    field public static final java.lang.String AUTHORITY = "com.android.tv";
+  }
+
+  public static abstract interface TvContract.BaseTvColumns implements android.provider.BaseColumns {
+    field public static final java.lang.String PACKAGE_NAME = "package_name";
+  }
+
+  public static final class TvContract.Channels implements android.provider.TvContract.BaseTvColumns {
+    field public static final java.lang.String BROWSABLE = "browsable";
+    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.com.android.tv.channels";
+    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.com.android.tv.channels";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final java.lang.String DATA = "data";
+    field public static final java.lang.String DESCRIPTION = "description";
+    field public static final java.lang.String DISPLAY_NAME = "display_name";
+    field public static final java.lang.String DISPLAY_NUMBER = "display_number";
+    field public static final java.lang.String SERVICE_NAME = "service_name";
+    field public static final java.lang.String TRANSPORT_STREAM_ID = "transport_stream_id";
+    field public static final java.lang.String TYPE = "type";
+    field public static final int TYPE_1SEG = 263168; // 0x40400
+    field public static final int TYPE_ATSC = 196608; // 0x30000
+    field public static final int TYPE_ATSC_2_0 = 196609; // 0x30001
+    field public static final int TYPE_ATSC_M_H = 196864; // 0x30100
+    field public static final int TYPE_CMMB = 327936; // 0x50100
+    field public static final int TYPE_DTMB = 327680; // 0x50000
+    field public static final int TYPE_DVB_C = 131584; // 0x20200
+    field public static final int TYPE_DVB_C2 = 131585; // 0x20201
+    field public static final int TYPE_DVB_H = 131840; // 0x20300
+    field public static final int TYPE_DVB_S = 131328; // 0x20100
+    field public static final int TYPE_DVB_S2 = 131329; // 0x20101
+    field public static final int TYPE_DVB_SH = 132096; // 0x20400
+    field public static final int TYPE_DVB_T = 131072; // 0x20000
+    field public static final int TYPE_DVB_T2 = 131073; // 0x20001
+    field public static final int TYPE_ISDB_C = 262912; // 0x40300
+    field public static final int TYPE_ISDB_S = 262656; // 0x40200
+    field public static final int TYPE_ISDB_T = 262144; // 0x40000
+    field public static final int TYPE_ISDB_TB = 262400; // 0x40100
+    field public static final int TYPE_OTHER = 0; // 0x0
+    field public static final int TYPE_PASSTHROUGH = 65536; // 0x10000
+    field public static final int TYPE_S_DMB = 393472; // 0x60100
+    field public static final int TYPE_T_DMB = 393216; // 0x60000
+    field public static final java.lang.String VERSION_NUMBER = "version_number";
+  }
+
+  public static final class TvContract.Programs implements android.provider.TvContract.BaseTvColumns {
+    field public static final java.lang.String CHANNEL_ID = "channel_id";
+    field public static final java.lang.String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.com.android.tv.programs";
+    field public static final java.lang.String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.com.android.tv.programs";
+    field public static final android.net.Uri CONTENT_URI;
+    field public static final java.lang.String DATA = "data";
+    field public static final java.lang.String DESCRIPTION = "description";
+    field public static final java.lang.String END_TIME_UTC_MILLIS = "end_time_utc_millis";
+    field public static final java.lang.String LONG_DESCRIPTION = "long_description";
+    field public static final java.lang.String START_TIME_UTC_MILLIS = "start_time_utc_millis";
+    field public static final java.lang.String TITLE = "title";
+    field public static final java.lang.String VERSION_NUMBER = "version_number";
+  }
+
   public class UserDictionary {
     ctor public UserDictionary();
     field public static final java.lang.String AUTHORITY = "user_dictionary";
@@ -21911,15 +23915,18 @@
 package android.renderscript {
 
   public class Allocation extends android.renderscript.BaseObj {
+    method public void copy1DRangeFrom(int, int, java.lang.Object);
     method public void copy1DRangeFrom(int, int, int[]);
     method public void copy1DRangeFrom(int, int, short[]);
     method public void copy1DRangeFrom(int, int, byte[]);
     method public void copy1DRangeFrom(int, int, float[]);
     method public void copy1DRangeFrom(int, int, android.renderscript.Allocation, int);
+    method public void copy1DRangeFromUnchecked(int, int, java.lang.Object);
     method public void copy1DRangeFromUnchecked(int, int, int[]);
     method public void copy1DRangeFromUnchecked(int, int, short[]);
     method public void copy1DRangeFromUnchecked(int, int, byte[]);
     method public void copy1DRangeFromUnchecked(int, int, float[]);
+    method public void copy2DRangeFrom(int, int, int, int, java.lang.Object);
     method public void copy2DRangeFrom(int, int, int, int, byte[]);
     method public void copy2DRangeFrom(int, int, int, int, short[]);
     method public void copy2DRangeFrom(int, int, int, int, int[]);
@@ -21927,17 +23934,20 @@
     method public void copy2DRangeFrom(int, int, int, int, android.renderscript.Allocation, int, int);
     method public void copy2DRangeFrom(int, int, android.graphics.Bitmap);
     method public void copyFrom(android.renderscript.BaseObj[]);
+    method public void copyFrom(java.lang.Object);
     method public void copyFrom(int[]);
     method public void copyFrom(short[]);
     method public void copyFrom(byte[]);
     method public void copyFrom(float[]);
     method public void copyFrom(android.graphics.Bitmap);
     method public void copyFrom(android.renderscript.Allocation);
+    method public void copyFromUnchecked(java.lang.Object);
     method public void copyFromUnchecked(int[]);
     method public void copyFromUnchecked(short[]);
     method public void copyFromUnchecked(byte[]);
     method public void copyFromUnchecked(float[]);
     method public void copyTo(android.graphics.Bitmap);
+    method public void copyTo(java.lang.Object);
     method public void copyTo(byte[]);
     method public void copyTo(short[]);
     method public void copyTo(int[]);
@@ -22594,6 +24604,7 @@
   public final class ScriptIntrinsic3DLUT extends android.renderscript.ScriptIntrinsic {
     method public static android.renderscript.ScriptIntrinsic3DLUT create(android.renderscript.RenderScript, android.renderscript.Element);
     method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.KernelID getKernelID();
     method public void setLUT(android.renderscript.Allocation);
   }
@@ -22601,20 +24612,35 @@
   public class ScriptIntrinsicBlend extends android.renderscript.ScriptIntrinsic {
     method public static android.renderscript.ScriptIntrinsicBlend create(android.renderscript.RenderScript, android.renderscript.Element);
     method public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachAdd(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachClear(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachDst(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachDstAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachDstIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachDstOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachDstOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachMultiply(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachSrc(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachSrcAtop(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachSrcIn(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachSrcOut(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachSrcOver(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachSubtract(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEachXor(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.KernelID getKernelIDAdd();
     method public android.renderscript.Script.KernelID getKernelIDClear();
     method public android.renderscript.Script.KernelID getKernelIDDst();
@@ -22635,6 +24661,7 @@
   public final class ScriptIntrinsicBlur extends android.renderscript.ScriptIntrinsic {
     method public static android.renderscript.ScriptIntrinsicBlur create(android.renderscript.RenderScript, android.renderscript.Element);
     method public void forEach(android.renderscript.Allocation);
+    method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.FieldID getFieldID_Input();
     method public android.renderscript.Script.KernelID getKernelID();
     method public void setInput(android.renderscript.Allocation);
@@ -22645,6 +24672,7 @@
     method public static deprecated android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript, android.renderscript.Element);
     method public static android.renderscript.ScriptIntrinsicColorMatrix create(android.renderscript.RenderScript);
     method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.KernelID getKernelID();
     method public void setAdd(android.renderscript.Float4);
     method public void setAdd(float, float, float, float);
@@ -22658,6 +24686,7 @@
   public final class ScriptIntrinsicConvolve3x3 extends android.renderscript.ScriptIntrinsic {
     method public static android.renderscript.ScriptIntrinsicConvolve3x3 create(android.renderscript.RenderScript, android.renderscript.Element);
     method public void forEach(android.renderscript.Allocation);
+    method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.FieldID getFieldID_Input();
     method public android.renderscript.Script.KernelID getKernelID();
     method public void setCoefficients(float[]);
@@ -22667,6 +24696,7 @@
   public final class ScriptIntrinsicConvolve5x5 extends android.renderscript.ScriptIntrinsic {
     method public static android.renderscript.ScriptIntrinsicConvolve5x5 create(android.renderscript.RenderScript, android.renderscript.Element);
     method public void forEach(android.renderscript.Allocation);
+    method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.FieldID getFieldID_Input();
     method public android.renderscript.Script.KernelID getKernelID();
     method public void setCoefficients(float[]);
@@ -22676,7 +24706,9 @@
   public final class ScriptIntrinsicHistogram extends android.renderscript.ScriptIntrinsic {
     method public static android.renderscript.ScriptIntrinsicHistogram create(android.renderscript.RenderScript, android.renderscript.Element);
     method public void forEach(android.renderscript.Allocation);
+    method public void forEach(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public void forEach_Dot(android.renderscript.Allocation);
+    method public void forEach_Dot(android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.FieldID getFieldID_Input();
     method public android.renderscript.Script.KernelID getKernelID_Separate();
     method public void setDotCoefficients(float, float, float, float);
@@ -22686,6 +24718,7 @@
   public final class ScriptIntrinsicLUT extends android.renderscript.ScriptIntrinsic {
     method public static android.renderscript.ScriptIntrinsicLUT create(android.renderscript.RenderScript, android.renderscript.Element);
     method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation);
+    method public void forEach(android.renderscript.Allocation, android.renderscript.Allocation, android.renderscript.Script.LaunchOptions);
     method public android.renderscript.Script.KernelID getKernelID();
     method public void setAlpha(int, int);
     method public void setBlue(int, int);
@@ -22935,8 +24968,10 @@
   public abstract class NotificationListenerService extends android.app.Service {
     ctor public NotificationListenerService();
     method public final void cancelAllNotifications();
-    method public final void cancelNotification(java.lang.String, java.lang.String, int);
+    method public final deprecated void cancelNotification(java.lang.String, java.lang.String, int);
+    method public final void cancelNotification(java.lang.String);
     method public final void cancelNotifications(java.lang.String[]);
+    method public java.lang.String[] getActiveNotificationKeys();
     method public android.service.notification.StatusBarNotification[] getActiveNotifications();
     method public android.service.notification.StatusBarNotification[] getActiveNotifications(java.lang.String[]);
     method public android.os.IBinder onBind(android.content.Intent);
@@ -22957,7 +24992,8 @@
     method public java.lang.String getPackageName();
     method public long getPostTime();
     method public java.lang.String getTag();
-    method public int getUserId();
+    method public android.os.UserHandle getUser();
+    method public deprecated int getUserId();
     method public boolean isClearable();
     method public boolean isOngoing();
     method public void writeToParcel(android.os.Parcel, int);
@@ -22989,6 +25025,56 @@
 
 }
 
+package android.service.trust {
+
+  public class TrustAgentService extends android.app.Service {
+    ctor public TrustAgentService();
+    method protected final void enableTrust(java.lang.String, long, boolean);
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method protected void onUnlockAttempt(boolean);
+    method protected final void revokeTrust();
+    field public static final java.lang.String SERVICE_INTERFACE = "android.service.trust.TrustAgentService";
+    field public static final java.lang.String TRUST_AGENT_META_DATA = "android.service.trust.trustagent";
+  }
+
+}
+
+package android.service.voice {
+
+  public class VoiceInteractionService extends android.app.Service {
+    ctor public VoiceInteractionService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public void startVoiceActivity(android.content.Intent, android.os.Bundle);
+    field public static final java.lang.String SERVICE_INTERFACE = "android.service.voice.VoiceInteractionService";
+    field public static final java.lang.String SERVICE_META_DATA = "android.voice_interaction";
+  }
+
+  public abstract class VoiceInteractionSession {
+    ctor public VoiceInteractionSession(android.content.Context);
+    ctor public VoiceInteractionSession(android.content.Context, android.os.Handler);
+    method public abstract void onCancel(android.service.voice.VoiceInteractionSession.Request);
+    method public abstract void onCommand(android.service.voice.VoiceInteractionSession.Caller, android.service.voice.VoiceInteractionSession.Request, java.lang.String, android.os.Bundle);
+    method public abstract void onConfirm(android.service.voice.VoiceInteractionSession.Caller, android.service.voice.VoiceInteractionSession.Request, java.lang.String, android.os.Bundle);
+    method public abstract boolean[] onGetSupportedCommands(android.service.voice.VoiceInteractionSession.Caller, java.lang.String[]);
+  }
+
+  public static class VoiceInteractionSession.Caller {
+  }
+
+  public static class VoiceInteractionSession.Request {
+    method public void sendCancelResult();
+    method public void sendCommandResult(boolean, android.os.Bundle);
+    method public void sendConfirmResult(boolean, android.os.Bundle);
+  }
+
+  public abstract class VoiceInteractionSessionService extends android.app.Service {
+    ctor public VoiceInteractionSessionService();
+    method public android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.service.voice.VoiceInteractionSession onNewSession(android.os.Bundle);
+  }
+
+}
+
 package android.service.wallpaper {
 
   public abstract class WallpaperService extends android.app.Service {
@@ -23130,11 +25216,52 @@
 
 package android.speech.tts {
 
+  public final class RequestConfig {
+    method public android.os.Bundle getAudioParams();
+    method public android.speech.tts.VoiceInfo getVoice();
+    method public android.os.Bundle getVoiceParams();
+  }
+
+  public static final class RequestConfig.Builder {
+    method public android.speech.tts.RequestConfig build();
+    method public static android.speech.tts.RequestConfig.Builder newBuilder();
+    method public static android.speech.tts.RequestConfig.Builder newBuilder(android.speech.tts.RequestConfig);
+    method public android.speech.tts.RequestConfig.Builder setAudioParam(java.lang.String, java.lang.Object);
+    method public void setAudioParamPan(float);
+    method public void setAudioParamStream(int);
+    method public void setAudioParamVolume(float);
+    method public android.speech.tts.RequestConfig.Builder setVoice(android.speech.tts.VoiceInfo);
+    method public android.speech.tts.RequestConfig.Builder setVoiceParam(java.lang.String, java.lang.Object);
+  }
+
+  public final class RequestConfigHelper {
+    method public static android.speech.tts.RequestConfig highestQuality(android.speech.tts.TextToSpeechClient.EngineStatus, boolean, android.speech.tts.RequestConfigHelper.VoiceScorer);
+    method public static android.speech.tts.RequestConfig highestQuality(android.speech.tts.TextToSpeechClient.EngineStatus, boolean);
+  }
+
+  public static final class RequestConfigHelper.ExactLocaleMatcher implements android.speech.tts.RequestConfigHelper.VoiceScorer {
+    ctor public RequestConfigHelper.ExactLocaleMatcher(java.util.Locale);
+    method public int scoreVoice(android.speech.tts.VoiceInfo);
+  }
+
+  public static final class RequestConfigHelper.LanguageMatcher implements android.speech.tts.RequestConfigHelper.VoiceScorer {
+    ctor public RequestConfigHelper.LanguageMatcher(java.util.Locale);
+    method public int scoreVoice(android.speech.tts.VoiceInfo);
+  }
+
+  public static abstract interface RequestConfigHelper.VoiceScorer {
+    method public abstract int scoreVoice(android.speech.tts.VoiceInfo);
+  }
+
   public abstract interface SynthesisCallback {
     method public abstract int audioAvailable(byte[], int, int);
     method public abstract int done();
     method public abstract void error();
+    method public abstract void error(int);
+    method public abstract int fallback();
     method public abstract int getMaxBufferSize();
+    method public abstract boolean hasFinished();
+    method public abstract boolean hasStarted();
     method public abstract int start(int, int, int);
   }
 
@@ -23150,7 +25277,18 @@
     method public java.lang.String getVariant();
   }
 
-  public class TextToSpeech {
+  public final class SynthesisRequestV2 implements android.os.Parcelable {
+    ctor public SynthesisRequestV2(java.lang.String, java.lang.String, java.lang.String, android.os.Bundle, android.os.Bundle);
+    method public int describeContents();
+    method public android.os.Bundle getAudioParams();
+    method public java.lang.String getText();
+    method public java.lang.String getUtteranceId();
+    method public java.lang.String getVoiceName();
+    method public android.os.Bundle getVoiceParams();
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public deprecated class TextToSpeech {
     ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener);
     ctor public TextToSpeech(android.content.Context, android.speech.tts.TextToSpeech.OnInitListener, java.lang.String);
     method public int addEarcon(java.lang.String, java.lang.String, int);
@@ -23235,8 +25373,79 @@
     method public abstract void onUtteranceCompleted(java.lang.String);
   }
 
+  public class TextToSpeechClient {
+    ctor public TextToSpeechClient(android.content.Context, java.lang.String, boolean, android.speech.tts.TextToSpeechClient.RequestCallbacks, android.speech.tts.TextToSpeechClient.ConnectionCallbacks);
+    ctor public TextToSpeechClient(android.content.Context, android.speech.tts.TextToSpeechClient.RequestCallbacks, android.speech.tts.TextToSpeechClient.ConnectionCallbacks);
+    method public void connect();
+    method public void disconnect();
+    method public android.speech.tts.TextToSpeechClient.EngineStatus getEngineStatus();
+    method public boolean isConnected();
+    method public void queueAudio(android.net.Uri, android.speech.tts.TextToSpeechClient.UtteranceId, android.speech.tts.RequestConfig, android.speech.tts.TextToSpeechClient.RequestCallbacks);
+    method public void queueSilence(long, android.speech.tts.TextToSpeechClient.UtteranceId, android.speech.tts.TextToSpeechClient.RequestCallbacks);
+    method public void queueSpeak(java.lang.String, android.speech.tts.TextToSpeechClient.UtteranceId, android.speech.tts.RequestConfig, android.speech.tts.TextToSpeechClient.RequestCallbacks);
+    method public void queueSynthesizeToFile(java.lang.String, android.speech.tts.TextToSpeechClient.UtteranceId, java.io.File, android.speech.tts.RequestConfig, android.speech.tts.TextToSpeechClient.RequestCallbacks);
+    method public void stop();
+  }
+
+  public static abstract interface TextToSpeechClient.ConnectionCallbacks {
+    method public abstract void onConnectionFailure();
+    method public abstract void onConnectionSuccess();
+    method public abstract void onEngineStatusChange(android.speech.tts.TextToSpeechClient.EngineStatus);
+    method public abstract void onServiceDisconnected();
+  }
+
+  public static final class TextToSpeechClient.EngineStatus {
+    method public java.lang.String getEnginePackage();
+    method public java.util.List<android.speech.tts.VoiceInfo> getVoices();
+  }
+
+  public static final class TextToSpeechClient.Params {
+    field public static final java.lang.String AUDIO_PARAM_PAN = "pan";
+    field public static final java.lang.String AUDIO_PARAM_STREAM = "streamType";
+    field public static final java.lang.String AUDIO_PARAM_VOLUME = "volume";
+    field public static final java.lang.String FALLBACK_VOICE_NAME = "fallbackVoiceName";
+    field public static final java.lang.String NETWORK_RETRIES_COUNT = "networkRetriesCount";
+    field public static final java.lang.String NETWORK_TIMEOUT_MS = "networkTimeoutMs";
+    field public static final java.lang.String SPEECH_PITCH = "speechPitch";
+    field public static final java.lang.String SPEECH_SPEED = "speechSpeed";
+    field public static final java.lang.String TRACK_SUBUTTERANCE_PROGRESS = "trackSubutteranceProgress";
+  }
+
+  public static abstract class TextToSpeechClient.RequestCallbacks {
+    ctor public TextToSpeechClient.RequestCallbacks();
+    method public void onSynthesisFailure(android.speech.tts.TextToSpeechClient.UtteranceId, int);
+    method public void onSynthesisFallback(android.speech.tts.TextToSpeechClient.UtteranceId);
+    method public void onSynthesisProgress(android.speech.tts.TextToSpeechClient.UtteranceId, int, int);
+    method public void onSynthesisStart(android.speech.tts.TextToSpeechClient.UtteranceId);
+    method public void onSynthesisStop(android.speech.tts.TextToSpeechClient.UtteranceId);
+    method public void onSynthesisSuccess(android.speech.tts.TextToSpeechClient.UtteranceId);
+  }
+
+  public static final class TextToSpeechClient.Status {
+    field public static final int ERROR_DOWNLOADING_ADDITIONAL_DATA = 17; // 0x11
+    field public static final int ERROR_INVALID_REQUEST = 15; // 0xf
+    field public static final int ERROR_NETWORK = 13; // 0xd
+    field public static final int ERROR_NETWORK_TIMEOUT = 14; // 0xe
+    field public static final int ERROR_NON_UNIQUE_UTTERANCE_ID = 16; // 0x10
+    field public static final int ERROR_OUTPUT = 12; // 0xc
+    field public static final int ERROR_SERVICE = 11; // 0xb
+    field public static final int ERROR_SYNTHESIS = 10; // 0xa
+    field public static final int ERROR_UNKNOWN = -1; // 0xffffffff
+    field public static final int STOPPED = 100; // 0x64
+    field public static final int SUCCESS = 0; // 0x0
+  }
+
+  public static class TextToSpeechClient.UtteranceId {
+    ctor public TextToSpeechClient.UtteranceId();
+    method public final java.lang.String toUniqueString();
+  }
+
   public abstract class TextToSpeechService extends android.app.Service {
     ctor public TextToSpeechService();
+    method protected java.util.List<android.speech.tts.VoiceInfo> checkVoicesInfo();
+    method public void forceVoicesInfoCheck();
+    method public android.speech.tts.VoiceInfo getVoicesInfoWithName(java.lang.String);
+    method protected boolean implementsV2API();
     method public android.os.IBinder onBind(android.content.Intent);
     method protected java.util.Set<java.lang.String> onGetFeaturesForLanguage(java.lang.String, java.lang.String, java.lang.String);
     method protected abstract java.lang.String[] onGetLanguage();
@@ -23244,6 +25453,8 @@
     method protected abstract int onLoadLanguage(java.lang.String, java.lang.String, java.lang.String);
     method protected abstract void onStop();
     method protected abstract void onSynthesizeText(android.speech.tts.SynthesisRequest, android.speech.tts.SynthesisCallback);
+    method protected void onSynthesizeTextV2(android.speech.tts.SynthesisRequestV2, android.speech.tts.VoiceInfo, android.speech.tts.SynthesisCallback);
+    method protected void onVoicesInfoChange();
   }
 
   public abstract class UtteranceProgressListener {
@@ -23253,6 +25464,44 @@
     method public abstract void onStart(java.lang.String);
   }
 
+  public final class VoiceInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.os.Bundle getAdditionalFeatures();
+    method public int getLatency();
+    method public java.util.Locale getLocale();
+    method public java.lang.String getName();
+    method public android.os.Bundle getParamsWithDefaults();
+    method public int getQuality();
+    method public boolean getRequiresNetworkConnection();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final java.lang.String FEATURE_MAY_AUTOINSTALL = "mayAutoInstall";
+    field public static final java.lang.String FEATURE_SPEAKER_GENDER = "speakerGender";
+    field public static final java.lang.String FEATURE_WORDS_PER_MINUTE = "wordsPerMinute";
+    field public static final int LATENCY_HIGH = 400; // 0x190
+    field public static final int LATENCY_LOW = 200; // 0xc8
+    field public static final int LATENCY_NORMAL = 300; // 0x12c
+    field public static final int LATENCY_VERY_HIGH = 500; // 0x1f4
+    field public static final int LATENCY_VERY_LOW = 100; // 0x64
+    field public static final int QUALITY_HIGH = 400; // 0x190
+    field public static final int QUALITY_LOW = 200; // 0xc8
+    field public static final int QUALITY_NORMAL = 300; // 0x12c
+    field public static final int QUALITY_VERY_HIGH = 500; // 0x1f4
+    field public static final int QUALITY_VERY_LOW = 100; // 0x64
+  }
+
+  public static final class VoiceInfo.Builder {
+    ctor public VoiceInfo.Builder();
+    ctor public VoiceInfo.Builder(android.speech.tts.VoiceInfo);
+    method public android.speech.tts.VoiceInfo build();
+    method public android.speech.tts.VoiceInfo.Builder setAdditionalFeatures(android.os.Bundle);
+    method public android.speech.tts.VoiceInfo.Builder setLatency(int);
+    method public android.speech.tts.VoiceInfo.Builder setLocale(java.util.Locale);
+    method public android.speech.tts.VoiceInfo.Builder setName(java.lang.String);
+    method public android.speech.tts.VoiceInfo.Builder setParamsWithDefaults(android.os.Bundle);
+    method public android.speech.tts.VoiceInfo.Builder setQuality(int);
+    method public android.speech.tts.VoiceInfo.Builder setRequiresNetworkConnection(boolean);
+  }
+
 }
 
 package android.telephony {
@@ -23424,6 +25673,7 @@
 
   public class PhoneNumberFormattingTextWatcher implements android.text.TextWatcher {
     ctor public PhoneNumberFormattingTextWatcher();
+    ctor public PhoneNumberFormattingTextWatcher(java.lang.String);
     method public synchronized void afterTextChanged(android.text.Editable);
     method public void beforeTextChanged(java.lang.CharSequence, int, int, int);
     method public void onTextChanged(java.lang.CharSequence, int, int, int);
@@ -23438,11 +25688,14 @@
     method public static java.lang.String convertKeypadLettersToDigits(java.lang.String);
     method public static java.lang.String extractNetworkPortion(java.lang.String);
     method public static java.lang.String extractPostDialPortion(java.lang.String);
-    method public static void formatJapaneseNumber(android.text.Editable);
-    method public static void formatNanpNumber(android.text.Editable);
-    method public static java.lang.String formatNumber(java.lang.String);
-    method public static void formatNumber(android.text.Editable, int);
-    method public static int getFormatTypeForLocale(java.util.Locale);
+    method public static deprecated void formatJapaneseNumber(android.text.Editable);
+    method public static deprecated void formatNanpNumber(android.text.Editable);
+    method public static deprecated java.lang.String formatNumber(java.lang.String);
+    method public static deprecated void formatNumber(android.text.Editable, int);
+    method public static java.lang.String formatNumber(java.lang.String, java.lang.String);
+    method public static java.lang.String formatNumber(java.lang.String, java.lang.String, java.lang.String);
+    method public static java.lang.String formatNumberToE164(java.lang.String, java.lang.String);
+    method public static deprecated int getFormatTypeForLocale(java.util.Locale);
     method public static java.lang.String getNumberFromIntent(android.content.Intent, android.content.Context);
     method public static java.lang.String getStrippedReversed(java.lang.String);
     method public static final boolean is12Key(char);
@@ -23450,13 +25703,17 @@
     method public static boolean isEmergencyNumber(java.lang.String);
     method public static boolean isGlobalPhoneNumber(java.lang.String);
     method public static boolean isISODigit(char);
+    method public static boolean isLocalEmergencyNumber(java.lang.String, android.content.Context);
     method public static final boolean isNonSeparator(char);
     method public static final boolean isReallyDialable(char);
     method public static final boolean isStartsPostDial(char);
+    method public static boolean isVoiceMailNumber(java.lang.String);
     method public static boolean isWellFormedSmsAddress(java.lang.String);
     method public static byte[] networkPortionToCalledPartyBCD(java.lang.String);
     method public static byte[] networkPortionToCalledPartyBCDWithLength(java.lang.String);
+    method public static java.lang.String normalizeNumber(java.lang.String);
     method public static byte[] numberToCalledPartyBCD(java.lang.String);
+    method public static java.lang.String replaceUnicodeDigits(java.lang.String);
     method public static java.lang.String stringFromStringAndTOA(java.lang.String, int);
     method public static java.lang.String stripSeparators(java.lang.String);
     method public static java.lang.String toCallerIDMinMatch(java.lang.String);
@@ -23638,6 +25895,9 @@
     method public java.lang.String getVoiceMailAlphaTag();
     method public java.lang.String getVoiceMailNumber();
     method public boolean hasIccCard();
+    method public boolean iccCloseLogicalChannel(int);
+    method public int iccOpenLogicalChannel(java.lang.String);
+    method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String);
     method public boolean isNetworkRoaming();
     method public void listen(android.telephony.PhoneStateListener, int);
     field public static final java.lang.String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE";
@@ -25802,6 +28062,28 @@
     method public void setResizeClip(boolean);
   }
 
+  public class ChangeClipBounds extends android.transition.Transition {
+    ctor public ChangeClipBounds();
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class ChangeTransform extends android.transition.Transition {
+    ctor public ChangeTransform();
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
+  public class CircularPropagation extends android.transition.VisibilityPropagation {
+    ctor public CircularPropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+  }
+
+  public class Explode extends android.transition.Visibility {
+    ctor public Explode();
+  }
+
   public class Fade extends android.transition.Visibility {
     ctor public Fade();
     ctor public Fade(int);
@@ -25809,9 +28091,16 @@
     field public static final int OUT = 2; // 0x2
   }
 
+  public class MoveImage extends android.transition.Transition {
+    ctor public MoveImage();
+    method public void captureEndValues(android.transition.TransitionValues);
+    method public void captureStartValues(android.transition.TransitionValues);
+  }
+
   public final class Scene {
     ctor public Scene(android.view.ViewGroup);
-    ctor public Scene(android.view.ViewGroup, android.view.ViewGroup);
+    ctor public Scene(android.view.ViewGroup, android.view.View);
+    ctor public deprecated Scene(android.view.ViewGroup, android.view.ViewGroup);
     method public void enter();
     method public void exit();
     method public static android.transition.Scene getSceneForLayout(android.view.ViewGroup, int, android.content.Context);
@@ -25820,11 +28109,34 @@
     method public void setExitAction(java.lang.Runnable);
   }
 
+  public class SidePropagation extends android.transition.VisibilityPropagation {
+    ctor public SidePropagation();
+    method public long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+    method public void setPropagationSpeed(float);
+    method public void setSide(int);
+    field public static final int BOTTOM = 3; // 0x3
+    field public static final int LEFT = 0; // 0x0
+    field public static final int RIGHT = 2; // 0x2
+    field public static final int TOP = 1; // 0x1
+  }
+
+  public class Slide extends android.transition.Visibility {
+    ctor public Slide();
+    ctor public Slide(int);
+    method public void setSlideEdge(int);
+    field public static final int BOTTOM = 3; // 0x3
+    field public static final int LEFT = 0; // 0x0
+    field public static final int RIGHT = 2; // 0x2
+    field public static final int TOP = 1; // 0x1
+  }
+
   public abstract class Transition implements java.lang.Cloneable {
     ctor public Transition();
     method public android.transition.Transition addListener(android.transition.Transition.TransitionListener);
     method public android.transition.Transition addTarget(int);
+    method public android.transition.Transition addTarget(java.lang.Class);
     method public android.transition.Transition addTarget(android.view.View);
+    method public boolean canRemoveViews();
     method public abstract void captureEndValues(android.transition.TransitionValues);
     method public abstract void captureStartValues(android.transition.TransitionValues);
     method public android.transition.Transition clone();
@@ -25836,8 +28148,11 @@
     method public android.transition.Transition excludeTarget(android.view.View, boolean);
     method public android.transition.Transition excludeTarget(java.lang.Class, boolean);
     method public long getDuration();
+    method public android.graphics.Rect getEpicenter();
+    method public android.transition.Transition.EpicenterCallback getEpicenterCallback();
     method public android.animation.TimeInterpolator getInterpolator();
     method public java.lang.String getName();
+    method public android.transition.TransitionPropagation getPropagation();
     method public long getStartDelay();
     method public java.util.List<java.lang.Integer> getTargetIds();
     method public java.util.List<android.view.View> getTargets();
@@ -25847,10 +28162,17 @@
     method public android.transition.Transition removeTarget(int);
     method public android.transition.Transition removeTarget(android.view.View);
     method public android.transition.Transition setDuration(long);
+    method public void setEpicenterCallback(android.transition.Transition.EpicenterCallback);
     method public android.transition.Transition setInterpolator(android.animation.TimeInterpolator);
+    method public void setPropagation(android.transition.TransitionPropagation);
     method public android.transition.Transition setStartDelay(long);
   }
 
+  public static abstract class Transition.EpicenterCallback {
+    ctor public Transition.EpicenterCallback();
+    method public abstract android.graphics.Rect getEpicenter(android.transition.Transition);
+  }
+
   public static abstract interface Transition.TransitionListener {
     method public abstract void onTransitionCancel(android.transition.Transition);
     method public abstract void onTransitionEnd(android.transition.Transition);
@@ -25876,6 +28198,13 @@
     method public void transitionTo(android.transition.Scene);
   }
 
+  public abstract class TransitionPropagation {
+    ctor public TransitionPropagation();
+    method public abstract void captureValues(android.transition.TransitionValues);
+    method public abstract java.lang.String[] getPropagationProperties();
+    method public abstract long getStartDelay(android.view.ViewGroup, android.transition.Transition, android.transition.TransitionValues, android.transition.TransitionValues);
+  }
+
   public class TransitionSet extends android.transition.Transition {
     ctor public TransitionSet();
     method public android.transition.TransitionSet addTransition(android.transition.Transition);
@@ -25900,7 +28229,95 @@
     method public void captureStartValues(android.transition.TransitionValues);
     method public boolean isVisible(android.transition.TransitionValues);
     method public android.animation.Animator onAppear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int);
+    method public android.animation.Animator onAppear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues);
     method public android.animation.Animator onDisappear(android.view.ViewGroup, android.transition.TransitionValues, int, android.transition.TransitionValues, int);
+    method public android.animation.Animator onDisappear(android.view.ViewGroup, android.view.View, android.transition.TransitionValues, android.transition.TransitionValues);
+  }
+
+  public abstract class VisibilityPropagation extends android.transition.TransitionPropagation {
+    ctor public VisibilityPropagation();
+    method public void captureValues(android.transition.TransitionValues);
+    method public java.lang.String[] getPropagationProperties();
+    method public int getViewVisibility(android.transition.TransitionValues);
+    method public int getViewX(android.transition.TransitionValues);
+    method public int getViewY(android.transition.TransitionValues);
+  }
+
+}
+
+package android.tv {
+
+  public final class TvInputInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public android.content.ComponentName getComponent();
+    method public java.lang.String getId();
+    method public java.lang.String getPackageName();
+    method public java.lang.String getServiceName();
+    method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager);
+    method public void writeToParcel(android.os.Parcel, int);
+  }
+
+  public final class TvInputManager {
+    method public void createSession(android.content.ComponentName, android.tv.TvInputManager.SessionCreateCallback, android.os.Handler);
+    method public boolean getAvailability(android.content.ComponentName);
+    method public java.util.List<android.tv.TvInputInfo> getTvInputList();
+    method public void registerListener(android.content.ComponentName, android.tv.TvInputManager.TvInputListener, android.os.Handler);
+    method public void unregisterListener(android.content.ComponentName, android.tv.TvInputManager.TvInputListener);
+  }
+
+  public static final class TvInputManager.Session {
+    method public void release();
+    method public void setVolume(float);
+    method public void tune(android.net.Uri);
+  }
+
+  public static abstract interface TvInputManager.SessionCreateCallback {
+    method public abstract void onSessionCreated(android.tv.TvInputManager.Session);
+  }
+
+  public static abstract class TvInputManager.TvInputListener {
+    ctor public TvInputManager.TvInputListener();
+    method public void onAvailabilityChanged(android.content.ComponentName, boolean);
+  }
+
+  public abstract class TvInputService extends android.app.Service {
+    ctor public TvInputService();
+    method public final android.os.IBinder onBind(android.content.Intent);
+    method public abstract android.tv.TvInputService.TvInputSessionImpl onCreateSession();
+    method public final void setAvailable(boolean);
+    field public static final java.lang.String SERVICE_INTERFACE = "android.tv.TvInputService";
+  }
+
+  public abstract class TvInputService.TvInputSessionImpl implements android.view.KeyEvent.Callback {
+    ctor public TvInputService.TvInputSessionImpl();
+    method public android.view.View onCreateOverlayView();
+    method public boolean onGenericMotionEvent(android.view.MotionEvent);
+    method public boolean onKeyDown(int, android.view.KeyEvent);
+    method public boolean onKeyLongPress(int, android.view.KeyEvent);
+    method public boolean onKeyMultiple(int, int, android.view.KeyEvent);
+    method public boolean onKeyUp(int, android.view.KeyEvent);
+    method public abstract void onRelease();
+    method public abstract boolean onSetSurface(android.view.Surface);
+    method public abstract void onSetVolume(float);
+    method public boolean onTouchEvent(android.view.MotionEvent);
+    method public boolean onTrackballEvent(android.view.MotionEvent);
+    method public abstract boolean onTune(android.net.Uri);
+    method public void setOverlayViewEnabled(boolean);
+  }
+
+  public class TvView extends android.view.SurfaceView {
+    ctor public TvView(android.content.Context);
+    ctor public TvView(android.content.Context, android.util.AttributeSet);
+    ctor public TvView(android.content.Context, android.util.AttributeSet, int);
+    method public void bindTvInput(android.content.ComponentName, android.tv.TvInputManager.SessionCreateCallback);
+    method public boolean dispatchUnhandledInputEvent(android.view.InputEvent);
+    method public boolean onUnhandledInputEvent(android.view.InputEvent);
+    method public void setOnUnhandledInputEventListener(android.tv.TvView.OnUnhandledInputEventListener);
+    method public void unbindTvInput();
+  }
+
+  public static abstract interface TvView.OnUnhandledInputEventListener {
+    method public abstract boolean onUnhandledInputEvent(android.view.InputEvent);
   }
 
 }
@@ -26216,6 +28633,7 @@
     method public final V put(K, V);
     method public final synchronized int putCount();
     method public final V remove(K);
+    method public void resize(int);
     method public final synchronized int size();
     method protected int sizeOf(K, V);
     method public final synchronized java.util.Map<K, V> snapshot();
@@ -26264,9 +28682,9 @@
     field public static final java.lang.String GOOD_IRI_CHAR = "a-zA-Z0-9\u00a0-\ud7ff\uf900-\ufdcf\ufdf0-\uffef";
     field public static final java.util.regex.Pattern IP_ADDRESS;
     field public static final java.util.regex.Pattern PHONE;
-    field public static final java.util.regex.Pattern TOP_LEVEL_DOMAIN;
-    field public static final java.lang.String TOP_LEVEL_DOMAIN_STR = "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(biz|b[abdefghijmnorstvwyz])|(cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(edu|e[cegrstu])|f[ijkmor]|(gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(info|int|i[delmnoqrst])|(jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(name|net|n[acefgilopruz])|(org|om)|(pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw])";
-    field public static final java.lang.String TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL = "(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw]))";
+    field public static final deprecated java.util.regex.Pattern TOP_LEVEL_DOMAIN;
+    field public static final deprecated java.lang.String TOP_LEVEL_DOMAIN_STR = "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(biz|b[abdefghijmnorstvwyz])|(cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(edu|e[cegrstu])|f[ijkmor]|(gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(info|int|i[delmnoqrst])|(jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(name|net|n[acefgilopruz])|(org|om)|(pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw])";
+    field public static final deprecated java.lang.String TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL = "(?:(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])|(?:biz|b[abdefghijmnorstvwyz])|(?:cat|com|coop|c[acdfghiklmnoruvxyz])|d[ejkmoz]|(?:edu|e[cegrstu])|f[ijkmor]|(?:gov|g[abdefghilmnpqrstuwy])|h[kmnrtu]|(?:info|int|i[delmnoqrst])|(?:jobs|j[emop])|k[eghimnprwyz]|l[abcikrstuvy]|(?:mil|mobi|museum|m[acdeghklmnopqrstuvwxyz])|(?:name|net|n[acefgilopruz])|(?:org|om)|(?:pro|p[aefghklmnrstwy])|qa|r[eosuw]|s[abcdeghijklmnortuvyz]|(?:tel|travel|t[cdfghjklmnoprtvwz])|u[agksyz]|v[aceginu]|w[fs]|(?:\u03b4\u03bf\u03ba\u03b9\u03bc\u03ae|\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435|\u0440\u0444|\u0441\u0440\u0431|\u05d8\u05e2\u05e1\u05d8|\u0622\u0632\u0645\u0627\u06cc\u0634\u06cc|\u0625\u062e\u062a\u0628\u0627\u0631|\u0627\u0644\u0627\u0631\u062f\u0646|\u0627\u0644\u062c\u0632\u0627\u0626\u0631|\u0627\u0644\u0633\u0639\u0648\u062f\u064a\u0629|\u0627\u0644\u0645\u063a\u0631\u0628|\u0627\u0645\u0627\u0631\u0627\u062a|\u0628\u06be\u0627\u0631\u062a|\u062a\u0648\u0646\u0633|\u0633\u0648\u0631\u064a\u0629|\u0641\u0644\u0633\u0637\u064a\u0646|\u0642\u0637\u0631|\u0645\u0635\u0631|\u092a\u0930\u0940\u0915\u094d\u0937\u093e|\u092d\u093e\u0930\u0924|\u09ad\u09be\u09b0\u09a4|\u0a2d\u0a3e\u0a30\u0a24|\u0aad\u0abe\u0ab0\u0aa4|\u0b87\u0ba8\u0bcd\u0ba4\u0bbf\u0baf\u0bbe|\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8|\u0b9a\u0bbf\u0b99\u0bcd\u0b95\u0baa\u0bcd\u0baa\u0bc2\u0bb0\u0bcd|\u0baa\u0bb0\u0bbf\u0b9f\u0bcd\u0b9a\u0bc8|\u0c2d\u0c3e\u0c30\u0c24\u0c4d|\u0dbd\u0d82\u0d9a\u0dcf|\u0e44\u0e17\u0e22|\u30c6\u30b9\u30c8|\u4e2d\u56fd|\u4e2d\u570b|\u53f0\u6e7e|\u53f0\u7063|\u65b0\u52a0\u5761|\u6d4b\u8bd5|\u6e2c\u8a66|\u9999\u6e2f|\ud14c\uc2a4\ud2b8|\ud55c\uad6d|xn\\-\\-0zwm56d|xn\\-\\-11b5bs3a9aj6g|xn\\-\\-3e0b707e|xn\\-\\-45brj9c|xn\\-\\-80akhbyknj4f|xn\\-\\-90a3ac|xn\\-\\-9t4b11yi5a|xn\\-\\-clchc0ea0b2g2a9gcd|xn\\-\\-deba0ad|xn\\-\\-fiqs8s|xn\\-\\-fiqz9s|xn\\-\\-fpcrj9c3d|xn\\-\\-fzc2c9e2c|xn\\-\\-g6w251d|xn\\-\\-gecrj9c|xn\\-\\-h2brj9c|xn\\-\\-hgbk6aj7f53bba|xn\\-\\-hlcj6aya9esc7a|xn\\-\\-j6w193g|xn\\-\\-jxalpdlp|xn\\-\\-kgbechtv|xn\\-\\-kprw13d|xn\\-\\-kpry57d|xn\\-\\-lgbbat1ad8j|xn\\-\\-mgbaam7a8h|xn\\-\\-mgbayh7gpa|xn\\-\\-mgbbh1a71e|xn\\-\\-mgbc0a9azcg|xn\\-\\-mgberp4a5d4ar|xn\\-\\-o3cw4h|xn\\-\\-ogbpf8fl|xn\\-\\-p1ai|xn\\-\\-pgbs0dh|xn\\-\\-s9brj9c|xn\\-\\-wgbh1c|xn\\-\\-wgbl6a|xn\\-\\-xkc2al3hye2a|xn\\-\\-xkc2dl3a5ee0h|xn\\-\\-yfro4i67o|xn\\-\\-ygbi2ammx|xn\\-\\-zckzah|xxx)|y[et]|z[amw]))";
     field public static final java.util.regex.Pattern WEB_URL;
   }
 
@@ -26629,6 +29047,18 @@
     method public static android.view.FocusFinder getInstance();
   }
 
+  public abstract class FrameStats {
+    ctor public FrameStats();
+    method public final long getEndTimeNano();
+    method public final int getFrameCount();
+    method public final long getFramePresentedTimeNano(int);
+    method public final long getRefreshPeriodNano();
+    method public final long getStartTimeNano();
+    field public static final long UNDEFINED_TIME_NANO = -1L; // 0xffffffffffffffffL
+    field protected long[] mFramesPresentedTimeNano;
+    field protected long mRefreshPeriodNano;
+  }
+
   public class GestureDetector {
     ctor public deprecated GestureDetector(android.view.GestureDetector.OnGestureListener, android.os.Handler);
     ctor public deprecated GestureDetector(android.view.GestureDetector.OnGestureListener);
@@ -26710,6 +29140,7 @@
   }
 
   public class HapticFeedbackConstants {
+    field public static final int CLOCK_TICK = 4; // 0x4
     field public static final int FLAG_IGNORE_GLOBAL_SETTING = 2; // 0x2
     field public static final int FLAG_IGNORE_VIEW_SETTING = 1; // 0x1
     field public static final int KEYBOARD_TAP = 3; // 0x3
@@ -26896,10 +29327,8 @@
     method public final boolean hasModifiers(int);
     method public final boolean hasNoModifiers();
     method public final boolean isAltPressed();
-    method public final boolean isCancelKey();
     method public final boolean isCanceled();
     method public final boolean isCapsLockOn();
-    method public final boolean isConfirmKey();
     method public final boolean isCtrlPressed();
     method public final boolean isFunctionPressed();
     method public static final boolean isGamepadButton(int);
@@ -27665,6 +30094,7 @@
     ctor public SurfaceView(android.content.Context);
     ctor public SurfaceView(android.content.Context, android.util.AttributeSet);
     ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SurfaceView(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean gatherTransparentRegion(android.graphics.Region);
     method public android.view.SurfaceHolder getHolder();
     method public void setSecure(boolean);
@@ -27676,6 +30106,7 @@
     ctor public TextureView(android.content.Context);
     ctor public TextureView(android.content.Context, android.util.AttributeSet);
     ctor public TextureView(android.content.Context, android.util.AttributeSet, int);
+    ctor public TextureView(android.content.Context, android.util.AttributeSet, int, int);
     method public final void draw(android.graphics.Canvas);
     method public android.graphics.Bitmap getBitmap();
     method public android.graphics.Bitmap getBitmap(int, int);
@@ -27727,6 +30158,7 @@
     ctor public View(android.content.Context);
     ctor public View(android.content.Context, android.util.AttributeSet);
     ctor public View(android.content.Context, android.util.AttributeSet, int);
+    ctor public View(android.content.Context, android.util.AttributeSet, int, int);
     method public void addChildrenForAccessibility(java.util.ArrayList<android.view.View>);
     method public void addFocusables(java.util.ArrayList<android.view.View>, int);
     method public void addFocusables(java.util.ArrayList<android.view.View>, int, int);
@@ -27763,6 +30195,7 @@
     method protected int computeVerticalScrollRange();
     method public android.view.accessibility.AccessibilityNodeInfo createAccessibilityNodeInfo();
     method public void createContextMenu(android.view.ContextMenu);
+    method public final android.animation.ValueAnimator createRevealAnimator(int, int, float, float);
     method public void destroyDrawingCache();
     method public android.view.WindowInsets dispatchApplyWindowInsets(android.view.WindowInsets);
     method public void dispatchConfigurationChanged(android.content.res.Configuration);
@@ -27776,6 +30209,9 @@
     method public boolean dispatchKeyEvent(android.view.KeyEvent);
     method public boolean dispatchKeyEventPreIme(android.view.KeyEvent);
     method public boolean dispatchKeyShortcutEvent(android.view.KeyEvent);
+    method public boolean dispatchNestedFling(float, float, boolean);
+    method public boolean dispatchNestedPreScroll(int, int, int[], int[]);
+    method public boolean dispatchNestedScroll(int, int, int, int, int[]);
     method public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent);
     method protected void dispatchRestoreInstanceState(android.util.SparseArray<android.os.Parcelable>);
     method protected void dispatchSaveInstanceState(android.util.SparseArray<android.os.Parcelable>);
@@ -27812,6 +30248,7 @@
     method protected int getBottomPaddingOffset();
     method public float getCameraDistance();
     method public android.graphics.Rect getClipBounds();
+    method public final boolean getClipToOutline();
     method public java.lang.CharSequence getContentDescription();
     method public final android.content.Context getContext();
     method protected android.view.ContextMenu.ContextMenuInfo getContextMenuInfo();
@@ -27824,6 +30261,7 @@
     method public int getDrawingCacheQuality();
     method public void getDrawingRect(android.graphics.Rect);
     method public long getDrawingTime();
+    method public float getElevation();
     method public boolean getFilterTouchesWhenObscured();
     method public boolean getFitsSystemWindows();
     method public java.util.ArrayList<android.view.View> getFocusables(int);
@@ -27891,6 +30329,7 @@
     method public int getScrollBarStyle();
     method public final int getScrollX();
     method public final int getScrollY();
+    method public java.lang.String getSharedElementName();
     method public int getSolidColor();
     method protected int getSuggestedMinimumHeight();
     method protected int getSuggestedMinimumWidth();
@@ -27906,6 +30345,7 @@
     method public java.util.ArrayList<android.view.View> getTouchables();
     method public float getTranslationX();
     method public float getTranslationY();
+    method public float getTranslationZ();
     method public int getVerticalFadingEdgeLength();
     method public int getVerticalScrollbarPosition();
     method public int getVerticalScrollbarWidth();
@@ -27920,8 +30360,10 @@
     method public void getWindowVisibleDisplayFrame(android.graphics.Rect);
     method public float getX();
     method public float getY();
+    method public float getZ();
     method public boolean hasFocus();
     method public boolean hasFocusable();
+    method public boolean hasNestedScrollingParent();
     method public boolean hasOnClickListeners();
     method public boolean hasOverlappingRendering();
     method public boolean hasTransientState();
@@ -27933,6 +30375,7 @@
     method public void invalidate(int, int, int, int);
     method public void invalidate();
     method public void invalidateDrawable(android.graphics.drawable.Drawable);
+    method public boolean isAccessibilityFocused();
     method public boolean isActivated();
     method public boolean isAttachedToWindow();
     method public boolean isClickable();
@@ -27948,6 +30391,7 @@
     method public boolean isHorizontalFadingEdgeEnabled();
     method public boolean isHorizontalScrollBarEnabled();
     method public boolean isHovered();
+    method public boolean isImportantForAccessibility();
     method public boolean isInEditMode();
     method public boolean isInLayout();
     method public boolean isInTouchMode();
@@ -27955,6 +30399,7 @@
     method public boolean isLayoutDirectionResolved();
     method public boolean isLayoutRequested();
     method public boolean isLongClickable();
+    method public boolean isNestedScrollingEnabled();
     method public boolean isOpaque();
     method protected boolean isPaddingOffsetRequired();
     method public boolean isPaddingRelative();
@@ -28076,11 +30521,13 @@
     method public void setCameraDistance(float);
     method public void setClickable(boolean);
     method public void setClipBounds(android.graphics.Rect);
+    method public void setClipToOutline(boolean);
     method public void setContentDescription(java.lang.CharSequence);
     method public void setDrawingCacheBackgroundColor(int);
     method public void setDrawingCacheEnabled(boolean);
     method public void setDrawingCacheQuality(int);
     method public void setDuplicateParentStateEnabled(boolean);
+    method public void setElevation(float);
     method public void setEnabled(boolean);
     method public void setFadingEdgeLength(int);
     method public void setFilterTouchesWhenObscured(boolean);
@@ -28105,6 +30552,7 @@
     method protected final void setMeasuredDimension(int, int);
     method public void setMinimumHeight(int);
     method public void setMinimumWidth(int);
+    method public void setNestedScrollingEnabled(boolean);
     method public void setNextFocusDownId(int);
     method public void setNextFocusForwardId(int);
     method public void setNextFocusLeftId(int);
@@ -28121,6 +30569,7 @@
     method public void setOnLongClickListener(android.view.View.OnLongClickListener);
     method public void setOnSystemUiVisibilityChangeListener(android.view.View.OnSystemUiVisibilityChangeListener);
     method public void setOnTouchListener(android.view.View.OnTouchListener);
+    method public void setOutline(android.graphics.Outline);
     method public void setOverScrollMode(int);
     method public void setPadding(int, int, int, int);
     method public void setPaddingRelative(int, int, int, int);
@@ -28144,6 +30593,7 @@
     method public void setScrollY(int);
     method public void setScrollbarFadingEnabled(boolean);
     method public void setSelected(boolean);
+    method public void setSharedElementName(java.lang.String);
     method public void setSoundEffectsEnabled(boolean);
     method public void setSystemUiVisibility(int);
     method public void setTag(java.lang.Object);
@@ -28154,6 +30604,7 @@
     method public void setTouchDelegate(android.view.TouchDelegate);
     method public void setTranslationX(float);
     method public void setTranslationY(float);
+    method public void setTranslationZ(float);
     method public void setVerticalFadingEdgeEnabled(boolean);
     method public void setVerticalScrollBarEnabled(boolean);
     method public void setVerticalScrollbarPosition(int);
@@ -28162,10 +30613,13 @@
     method public void setWillNotDraw(boolean);
     method public void setX(float);
     method public void setY(float);
+    method public void setZ(float);
     method public boolean showContextMenu();
     method public android.view.ActionMode startActionMode(android.view.ActionMode.Callback);
     method public void startAnimation(android.view.animation.Animation);
     method public final boolean startDrag(android.content.ClipData, android.view.View.DragShadowBuilder, java.lang.Object, int);
+    method public boolean startNestedScroll(int);
+    method public void stopNestedScroll();
     method public void unscheduleDrawable(android.graphics.drawable.Drawable, java.lang.Runnable);
     method public void unscheduleDrawable(android.graphics.drawable.Drawable);
     method protected boolean verifyDrawable(android.graphics.drawable.Drawable);
@@ -28254,6 +30708,9 @@
     field public static final int SCROLLBAR_POSITION_DEFAULT = 0; // 0x0
     field public static final int SCROLLBAR_POSITION_LEFT = 1; // 0x1
     field public static final int SCROLLBAR_POSITION_RIGHT = 2; // 0x2
+    field public static final int SCROLL_AXIS_HORIZONTAL = 1; // 0x1
+    field public static final int SCROLL_AXIS_NONE = 0; // 0x0
+    field public static final int SCROLL_AXIS_VERTICAL = 2; // 0x2
     field protected static final int[] SELECTED_STATE_SET;
     field protected static final int[] SELECTED_WINDOW_FOCUSED_STATE_SET;
     field public static final int SOUND_EFFECTS_ENABLED = 134217728; // 0x8000000
@@ -28284,11 +30741,13 @@
     field public static final int TEXT_DIRECTION_RTL = 4; // 0x4
     field public static final android.util.Property TRANSLATION_X;
     field public static final android.util.Property TRANSLATION_Y;
+    field public static final android.util.Property TRANSLATION_Z;
     field protected static final java.lang.String VIEW_LOG_TAG = "View";
     field public static final int VISIBLE = 0; // 0x0
     field protected static final int[] WINDOW_FOCUSED_STATE_SET;
     field public static final android.util.Property X;
     field public static final android.util.Property Y;
+    field public static final android.util.Property Z;
   }
 
   public static class View.AccessibilityDelegate {
@@ -28474,6 +30933,7 @@
     ctor public ViewGroup(android.content.Context);
     ctor public ViewGroup(android.content.Context, android.util.AttributeSet);
     ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int);
+    ctor public ViewGroup(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean addStatesFromChildren();
     method public void addView(android.view.View);
     method public void addView(android.view.View, int);
@@ -28522,6 +30982,7 @@
     method public android.view.animation.Animation.AnimationListener getLayoutAnimationListener();
     method public int getLayoutMode();
     method public android.animation.LayoutTransition getLayoutTransition();
+    method public int getNestedScrollAxes();
     method public int getPersistentDrawingCache();
     method public int indexOfChild(android.view.View);
     method public final void invalidateChild(android.view.View, android.graphics.Rect);
@@ -28531,6 +30992,7 @@
     method protected boolean isChildrenDrawingOrderEnabled();
     method protected boolean isChildrenDrawnWithCacheEnabled();
     method public boolean isMotionEventSplittingEnabled();
+    method public boolean isTransitionGroup();
     method public final void layout(int, int, int, int);
     method protected void measureChild(android.view.View, int, int);
     method protected void measureChildWithMargins(android.view.View, int, int, int, int);
@@ -28541,8 +31003,14 @@
     method public boolean onInterceptHoverEvent(android.view.MotionEvent);
     method public boolean onInterceptTouchEvent(android.view.MotionEvent);
     method protected abstract void onLayout(boolean, int, int, int, int);
+    method public boolean onNestedFling(android.view.View, float, float, boolean);
+    method public void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public void onNestedScroll(android.view.View, int, int, int, int);
+    method public void onNestedScrollAccepted(android.view.View, android.view.View, int);
     method protected boolean onRequestFocusInDescendants(int, android.graphics.Rect);
     method public boolean onRequestSendAccessibilityEvent(android.view.View, android.view.accessibility.AccessibilityEvent);
+    method public boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public void onStopNestedScroll(android.view.View);
     method public void recomputeViewAttributes(android.view.View);
     method public void removeAllViews();
     method public void removeAllViewsInLayout();
@@ -28575,6 +31043,7 @@
     method public void setOnHierarchyChangeListener(android.view.ViewGroup.OnHierarchyChangeListener);
     method public void setPersistentDrawingCache(int);
     method protected void setStaticTransformationsEnabled(boolean);
+    method public void setTransitionGroup(boolean);
     method public boolean shouldDelayChildPressedState();
     method public boolean showContextMenuForChild(android.view.View);
     method public android.view.ActionMode startActionModeForChild(android.view.View, android.view.ActionMode.Callback);
@@ -28672,6 +31141,12 @@
     method public abstract boolean isTextAlignmentResolved();
     method public abstract boolean isTextDirectionResolved();
     method public abstract void notifySubtreeAccessibilityStateChanged(android.view.View, android.view.View, int);
+    method public abstract boolean onNestedFling(android.view.View, float, float, boolean);
+    method public abstract void onNestedPreScroll(android.view.View, int, int, int[]);
+    method public abstract void onNestedScroll(android.view.View, int, int, int, int);
+    method public abstract void onNestedScrollAccepted(android.view.View, android.view.View, int);
+    method public abstract boolean onStartNestedScroll(android.view.View, android.view.View, int);
+    method public abstract void onStopNestedScroll(android.view.View);
     method public abstract void recomputeViewAttributes(android.view.View);
     method public abstract void requestChildFocus(android.view.View, android.view.View);
     method public abstract boolean requestChildRectangleOnScreen(android.view.View, android.graphics.Rect, boolean);
@@ -28711,6 +31186,8 @@
     method public android.view.ViewPropertyAnimator translationXBy(float);
     method public android.view.ViewPropertyAnimator translationY(float);
     method public android.view.ViewPropertyAnimator translationYBy(float);
+    method public android.view.ViewPropertyAnimator translationZ(float);
+    method public android.view.ViewPropertyAnimator translationZBy(float);
     method public android.view.ViewPropertyAnimator withEndAction(java.lang.Runnable);
     method public android.view.ViewPropertyAnimator withLayer();
     method public android.view.ViewPropertyAnimator withStartAction(java.lang.Runnable);
@@ -28718,6 +31195,8 @@
     method public android.view.ViewPropertyAnimator xBy(float);
     method public android.view.ViewPropertyAnimator y(float);
     method public android.view.ViewPropertyAnimator yBy(float);
+    method public android.view.ViewPropertyAnimator z(float);
+    method public android.view.ViewPropertyAnimator zBy(float);
   }
 
   public final class ViewStub extends android.view.View {
@@ -28725,6 +31204,7 @@
     ctor public ViewStub(android.content.Context, int);
     ctor public ViewStub(android.content.Context, android.util.AttributeSet);
     ctor public ViewStub(android.content.Context, android.util.AttributeSet, int);
+    ctor public ViewStub(android.content.Context, android.util.AttributeSet, int, int);
     method public int getInflatedId();
     method public android.view.LayoutInflater getLayoutInflater();
     method public int getLayoutResource();
@@ -28804,16 +31284,24 @@
     method public abstract void closeAllPanels();
     method public abstract void closePanel(int);
     method public android.view.View findViewById(int);
+    method public boolean getAllowEnterTransitionOverlap();
+    method public boolean getAllowExitTransitionOverlap();
     method public final android.view.WindowManager.LayoutParams getAttributes();
     method public final android.view.Window.Callback getCallback();
     method public final android.view.Window getContainer();
+    method public android.transition.Scene getContentScene();
     method public final android.content.Context getContext();
     method public abstract android.view.View getCurrentFocus();
     method public abstract android.view.View getDecorView();
+    method public android.transition.Transition getEnterTransition();
+    method public android.transition.Transition getExitTransition();
     method protected final int getFeatures();
     method protected final int getForcedWindowFlags();
     method public abstract android.view.LayoutInflater getLayoutInflater();
     method protected final int getLocalFeatures();
+    method public android.transition.Transition getSharedElementEnterTransition();
+    method public android.transition.Transition getSharedElementExitTransition();
+    method public android.transition.TransitionManager getTransitionManager();
     method public abstract int getVolumeControlStream();
     method public android.view.WindowManager getWindowManager();
     method public final android.content.res.TypedArray getWindowStyle();
@@ -28836,6 +31324,8 @@
     method public boolean requestFeature(int);
     method public abstract void restoreHierarchyState(android.os.Bundle);
     method public abstract android.os.Bundle saveHierarchyState();
+    method public void setAllowEnterTransitionOverlap(boolean);
+    method public void setAllowExitTransitionOverlap(boolean);
     method public void setAttributes(android.view.WindowManager.LayoutParams);
     method public abstract void setBackgroundDrawable(android.graphics.drawable.Drawable);
     method public void setBackgroundDrawableResource(int);
@@ -28848,6 +31338,8 @@
     method public abstract void setContentView(android.view.View, android.view.ViewGroup.LayoutParams);
     method protected void setDefaultWindowFormat(int);
     method public void setDimAmount(float);
+    method public void setEnterTransition(android.transition.Transition);
+    method public void setExitTransition(android.transition.Transition);
     method public abstract void setFeatureDrawable(int, android.graphics.drawable.Drawable);
     method public abstract void setFeatureDrawableAlpha(int, int);
     method public abstract void setFeatureDrawableResource(int, int);
@@ -28860,9 +31352,12 @@
     method public void setLayout(int, int);
     method public void setLocalFocus(boolean, boolean);
     method public void setLogo(int);
+    method public void setSharedElementEnterTransition(android.transition.Transition);
+    method public void setSharedElementExitTransition(android.transition.Transition);
     method public void setSoftInputMode(int);
     method public abstract void setTitle(java.lang.CharSequence);
-    method public abstract void setTitleColor(int);
+    method public abstract deprecated void setTitleColor(int);
+    method public void setTransitionManager(android.transition.TransitionManager);
     method public void setType(int);
     method public void setUiOptions(int);
     method public void setUiOptions(int, int);
@@ -28883,6 +31378,7 @@
     field public static final int FEATURE_ACTION_BAR = 8; // 0x8
     field public static final int FEATURE_ACTION_BAR_OVERLAY = 9; // 0x9
     field public static final int FEATURE_ACTION_MODE_OVERLAY = 10; // 0xa
+    field public static final int FEATURE_CONTENT_TRANSITIONS = 12; // 0xc
     field public static final int FEATURE_CONTEXT_MENU = 6; // 0x6
     field public static final int FEATURE_CUSTOM_TITLE = 7; // 0x7
     field public static final int FEATURE_INDETERMINATE_PROGRESS = 5; // 0x5
@@ -28928,6 +31424,20 @@
     method public abstract android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode.Callback);
   }
 
+  public final class WindowAnimationFrameStats extends android.view.FrameStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
+  public final class WindowContentFrameStats extends android.view.FrameStats implements android.os.Parcelable {
+    method public int describeContents();
+    method public long getFramePostedTimeNano(int);
+    method public long getFrameReadyTimeNano(int);
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+  }
+
   public class WindowId implements android.os.Parcelable {
     method public int describeContents();
     method public boolean isFocused();
@@ -29169,6 +31679,7 @@
     field public static final int TYPE_VIEW_TEXT_CHANGED = 16; // 0x10
     field public static final int TYPE_VIEW_TEXT_SELECTION_CHANGED = 8192; // 0x2000
     field public static final int TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY = 131072; // 0x20000
+    field public static final int TYPE_WINDOWS_CHANGED = 4194304; // 0x400000
     field public static final int TYPE_WINDOW_CONTENT_CHANGED = 2048; // 0x800
     field public static final int TYPE_WINDOW_STATE_CHANGED = 32; // 0x20
   }
@@ -29232,6 +31743,7 @@
     method public int getTextSelectionEnd();
     method public int getTextSelectionStart();
     method public java.lang.String getViewIdResourceName();
+    method public android.view.accessibility.AccessibilityWindowInfo getWindow();
     method public int getWindowId();
     method public boolean isAccessibilityFocused();
     method public boolean isCheckable();
@@ -29257,6 +31769,9 @@
     method public boolean performAction(int, android.os.Bundle);
     method public void recycle();
     method public boolean refresh();
+    method public void removeAction(int);
+    method public boolean removeChild(android.view.View);
+    method public boolean removeChild(android.view.View, int);
     method public void setAccessibilityFocused(boolean);
     method public void setBoundsInParent(android.graphics.Rect);
     method public void setBoundsInScreen(android.graphics.Rect);
@@ -29303,6 +31818,7 @@
     field public static final java.lang.String ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT = "ACTION_ARGUMENT_MOVEMENT_GRANULARITY_INT";
     field public static final java.lang.String ACTION_ARGUMENT_SELECTION_END_INT = "ACTION_ARGUMENT_SELECTION_END_INT";
     field public static final java.lang.String ACTION_ARGUMENT_SELECTION_START_INT = "ACTION_ARGUMENT_SELECTION_START_INT";
+    field public static final java.lang.String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE = "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
     field public static final int ACTION_CLEAR_ACCESSIBILITY_FOCUS = 128; // 0x80
     field public static final int ACTION_CLEAR_FOCUS = 2; // 0x2
     field public static final int ACTION_CLEAR_SELECTION = 8; // 0x8
@@ -29323,6 +31839,7 @@
     field public static final int ACTION_SCROLL_FORWARD = 4096; // 0x1000
     field public static final int ACTION_SELECT = 4; // 0x4
     field public static final int ACTION_SET_SELECTION = 131072; // 0x20000
+    field public static final int ACTION_SET_TEXT = 2097152; // 0x200000
     field public static final android.os.Parcelable.Creator CREATOR;
     field public static final int FOCUS_ACCESSIBILITY = 2; // 0x2
     field public static final int FOCUS_INPUT = 1; // 0x1
@@ -29336,8 +31853,13 @@
   public static final class AccessibilityNodeInfo.CollectionInfo {
     method public int getColumnCount();
     method public int getRowCount();
+    method public int getSelectionMode();
     method public boolean isHierarchical();
     method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean);
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionInfo obtain(int, int, boolean, int);
+    field public static final int SELECTION_MODE_MULTIPLE = 2; // 0x2
+    field public static final int SELECTION_MODE_NONE = 0; // 0x0
+    field public static final int SELECTION_MODE_SINGLE = 1; // 0x1
   }
 
   public static final class AccessibilityNodeInfo.CollectionItemInfo {
@@ -29346,7 +31868,9 @@
     method public int getRowIndex();
     method public int getRowSpan();
     method public boolean isHeading();
+    method public boolean isSelected();
     method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean);
+    method public static android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo obtain(int, int, int, int, boolean, boolean);
   }
 
   public static final class AccessibilityNodeInfo.RangeInfo {
@@ -29366,6 +31890,7 @@
     method public java.util.List<android.view.accessibility.AccessibilityNodeInfo> findAccessibilityNodeInfosByText(java.lang.String, int);
     method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
     method public boolean performAction(int, int, android.os.Bundle);
+    field public static final int HOST_VIEW_ID = -1; // 0xffffffff
   }
 
   public class AccessibilityRecord {
@@ -29417,6 +31942,28 @@
     method public void setToIndex(int);
   }
 
+  public final class AccessibilityWindowInfo implements android.os.Parcelable {
+    method public int describeContents();
+    method public void getBoundsInScreen(android.graphics.Rect);
+    method public android.view.accessibility.AccessibilityWindowInfo getChild(int);
+    method public int getChildCount();
+    method public int getId();
+    method public int getLayer();
+    method public android.view.accessibility.AccessibilityWindowInfo getParent();
+    method public android.view.accessibility.AccessibilityNodeInfo getRoot();
+    method public int getType();
+    method public boolean isActive();
+    method public boolean isFocused();
+    method public static android.view.accessibility.AccessibilityWindowInfo obtain();
+    method public static android.view.accessibility.AccessibilityWindowInfo obtain(android.view.accessibility.AccessibilityWindowInfo);
+    method public void recycle();
+    method public void writeToParcel(android.os.Parcel, int);
+    field public static final android.os.Parcelable.Creator CREATOR;
+    field public static final int TYPE_APPLICATION = 1; // 0x1
+    field public static final int TYPE_INPUT_METHOD = 2; // 0x2
+    field public static final int TYPE_SYSTEM = 3; // 0x3
+  }
+
   public class CaptioningManager {
     method public void addCaptioningChangeListener(android.view.accessibility.CaptioningManager.CaptioningChangeListener);
     method public final float getFontScale();
@@ -29428,13 +31975,16 @@
 
   public static final class CaptioningManager.CaptionStyle {
     method public android.graphics.Typeface getTypeface();
+    field public static final int EDGE_TYPE_DEPRESSED = 4; // 0x4
     field public static final int EDGE_TYPE_DROP_SHADOW = 2; // 0x2
     field public static final int EDGE_TYPE_NONE = 0; // 0x0
     field public static final int EDGE_TYPE_OUTLINE = 1; // 0x1
+    field public static final int EDGE_TYPE_RAISED = 3; // 0x3
     field public final int backgroundColor;
     field public final int edgeColor;
     field public final int edgeType;
     field public final int foregroundColor;
+    field public final int windowColor;
   }
 
   public static abstract class CaptioningManager.CaptioningChangeListener {
@@ -29672,6 +32222,14 @@
     method public float getInterpolation(float);
   }
 
+  public class PathInterpolator implements android.view.animation.Interpolator {
+    ctor public PathInterpolator(android.graphics.Path);
+    ctor public PathInterpolator(float, float);
+    ctor public PathInterpolator(float, float, float, float);
+    ctor public PathInterpolator(android.content.Context, android.util.AttributeSet);
+    method public float getInterpolation(float);
+  }
+
   public class RotateAnimation extends android.view.animation.Animation {
     ctor public RotateAnimation(android.content.Context, android.util.AttributeSet);
     ctor public RotateAnimation(float, float);
@@ -30174,6 +32732,9 @@
     method public static synchronized android.webkit.CookieSyncManager createInstance(android.content.Context);
     method public static synchronized android.webkit.CookieSyncManager getInstance();
     method protected void syncFromRamToFlash();
+    field protected static final java.lang.String LOGTAG = "websync";
+    field protected android.webkit.WebViewDatabase mDataBase;
+    field protected android.os.Handler mHandler;
   }
 
   public class DateSorter {
@@ -30363,6 +32924,7 @@
     method public boolean getMediaPlaybackRequiresUserGesture();
     method public synchronized int getMinimumFontSize();
     method public synchronized int getMinimumLogicalFontSize();
+    method public abstract int getMixedContentMode();
     method public deprecated synchronized android.webkit.WebSettings.PluginState getPluginState();
     method public synchronized java.lang.String getSansSerifFontFamily();
     method public boolean getSaveFormData();
@@ -30407,6 +32969,7 @@
     method public void setMediaPlaybackRequiresUserGesture(boolean);
     method public synchronized void setMinimumFontSize(int);
     method public synchronized void setMinimumLogicalFontSize(int);
+    method public abstract void setMixedContentMode(int);
     method public void setNeedInitialFocus(boolean);
     method public deprecated synchronized void setPluginState(android.webkit.WebSettings.PluginState);
     method public deprecated synchronized void setRenderPriority(android.webkit.WebSettings.RenderPriority);
@@ -30428,6 +32991,9 @@
     field public static final int LOAD_DEFAULT = -1; // 0xffffffff
     field public static final deprecated int LOAD_NORMAL = 0; // 0x0
     field public static final int LOAD_NO_CACHE = 2; // 0x2
+    field public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0; // 0x0
+    field public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2; // 0x2
+    field public static final int MIXED_CONTENT_NEVER_ALLOW = 1; // 0x1
   }
 
   public static final class WebSettings.LayoutAlgorithm extends java.lang.Enum {
@@ -30510,6 +33076,7 @@
     ctor public WebView(android.content.Context);
     ctor public WebView(android.content.Context, android.util.AttributeSet);
     ctor public WebView(android.content.Context, android.util.AttributeSet, int);
+    ctor public WebView(android.content.Context, android.util.AttributeSet, int, int);
     ctor public deprecated WebView(android.content.Context, android.util.AttributeSet, int, boolean);
     method public void addJavascriptInterface(java.lang.Object, java.lang.String);
     method public boolean canGoBack();
@@ -30525,7 +33092,8 @@
     method public void clearSslPreferences();
     method public deprecated void clearView();
     method public android.webkit.WebBackForwardList copyBackForwardList();
-    method public android.print.PrintDocumentAdapter createPrintDocumentAdapter();
+    method public deprecated android.print.PrintDocumentAdapter createPrintDocumentAdapter();
+    method public android.print.PrintDocumentAdapter createPrintDocumentAdapter(java.lang.String);
     method public void destroy();
     method public void documentHasImages(android.os.Message);
     method public void evaluateJavascript(java.lang.String, android.webkit.ValueCallback<java.lang.String>);
@@ -30640,7 +33208,8 @@
     method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
     method public void onScaleChanged(android.webkit.WebView, float, float);
     method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
-    method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+    method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+    method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
     method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String);
     method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
     method public boolean shouldOverrideUrlLoading(android.webkit.WebView, java.lang.String);
@@ -30684,6 +33253,7 @@
     ctor public AbsListView(android.content.Context);
     ctor public AbsListView(android.content.Context, android.util.AttributeSet);
     ctor public AbsListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsListView(android.content.Context, android.util.AttributeSet, int, int);
     method public void afterTextChanged(android.text.Editable);
     method public void beforeTextChanged(java.lang.CharSequence, int, int, int);
     method public boolean canScrollList(int);
@@ -30735,6 +33305,7 @@
     method public void setDrawSelectorOnTop(boolean);
     method public void setFastScrollAlwaysVisible(boolean);
     method public void setFastScrollEnabled(boolean);
+    method public void setFastScrollStyle(int);
     method public void setFilterText(java.lang.String);
     method public void setFriction(float);
     method public void setItemChecked(int, boolean);
@@ -30744,6 +33315,7 @@
     method public void setRemoteViewsAdapter(android.content.Intent);
     method public void setScrollIndicators(android.view.View, android.view.View);
     method public void setScrollingCacheEnabled(boolean);
+    method public void setSelectionFromTop(int, int);
     method public void setSelector(int);
     method public void setSelector(android.graphics.drawable.Drawable);
     method public void setSmoothScrollbarEnabled(boolean);
@@ -30797,6 +33369,7 @@
     ctor public AbsSeekBar(android.content.Context);
     ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet);
     ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsSeekBar(android.content.Context, android.util.AttributeSet, int, int);
     method public int getKeyProgressIncrement();
     method public android.graphics.drawable.Drawable getThumb();
     method public int getThumbOffset();
@@ -30809,6 +33382,7 @@
     ctor public AbsSpinner(android.content.Context);
     ctor public AbsSpinner(android.content.Context, android.util.AttributeSet);
     ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsSpinner(android.content.Context, android.util.AttributeSet, int, int);
     method public android.widget.SpinnerAdapter getAdapter();
     method public android.view.View getSelectedView();
     method public void onRestoreInstanceState(android.os.Parcelable);
@@ -30823,6 +33397,7 @@
     ctor public AbsoluteLayout(android.content.Context);
     ctor public AbsoluteLayout(android.content.Context, android.util.AttributeSet);
     ctor public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public AbsoluteLayout(android.content.Context, android.util.AttributeSet, int, int);
     method protected void onLayout(boolean, int, int, int, int);
   }
 
@@ -30835,6 +33410,26 @@
     field public int y;
   }
 
+  public class ActionMenuView extends android.widget.LinearLayout {
+    ctor public ActionMenuView(android.content.Context);
+    ctor public ActionMenuView(android.content.Context, android.util.AttributeSet);
+    method public android.view.Menu getMenu();
+    method public void onConfigurationChanged(android.content.res.Configuration);
+    method public void onDetachedFromWindow();
+    method public void setOnMenuItemClickListener(android.widget.ActionMenuView.OnMenuItemClickListener);
+  }
+
+  public static class ActionMenuView.LayoutParams extends android.widget.LinearLayout.LayoutParams {
+    ctor public ActionMenuView.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public ActionMenuView.LayoutParams(android.view.ViewGroup.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(android.widget.ActionMenuView.LayoutParams);
+    ctor public ActionMenuView.LayoutParams(int, int);
+  }
+
+  public static abstract interface ActionMenuView.OnMenuItemClickListener {
+    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  }
+
   public abstract interface Adapter {
     method public abstract int getCount();
     method public abstract java.lang.Object getItem(int);
@@ -30854,6 +33449,7 @@
     ctor public AdapterView(android.content.Context);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet);
     ctor public AdapterView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterView(android.content.Context, android.util.AttributeSet, int, int);
     method public abstract T getAdapter();
     method public int getCount();
     method public android.view.View getEmptyView();
@@ -30907,6 +33503,7 @@
     ctor public AdapterViewAnimator(android.content.Context);
     ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet);
     ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterViewAnimator(android.content.Context, android.util.AttributeSet, int, int);
     method public void advance();
     method public void deferNotifyDataSetChanged();
     method public void fyiWillBeAdvancedByHostKThx();
@@ -30936,6 +33533,8 @@
   public class AdapterViewFlipper extends android.widget.AdapterViewAnimator {
     ctor public AdapterViewFlipper(android.content.Context);
     ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int);
+    ctor public AdapterViewFlipper(android.content.Context, android.util.AttributeSet, int, int);
     method public int getFlipInterval();
     method public boolean isAutoStart();
     method public boolean isFlipping();
@@ -30966,6 +33565,7 @@
     ctor public AnalogClock(android.content.Context);
     ctor public AnalogClock(android.content.Context, android.util.AttributeSet);
     ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int);
+    ctor public AnalogClock(android.content.Context, android.util.AttributeSet, int, int);
   }
 
   public class ArrayAdapter extends android.widget.BaseAdapter implements android.widget.Filterable {
@@ -30998,6 +33598,7 @@
     ctor public AutoCompleteTextView(android.content.Context);
     ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet);
     ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public AutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int);
     method public void clearListSelection();
     method protected java.lang.CharSequence convertSelectionToString(java.lang.Object);
     method public void dismissDropDown();
@@ -31090,12 +33691,14 @@
     ctor public Button(android.content.Context);
     ctor public Button(android.content.Context, android.util.AttributeSet);
     ctor public Button(android.content.Context, android.util.AttributeSet, int);
+    ctor public Button(android.content.Context, android.util.AttributeSet, int, int);
   }
 
   public class CalendarView extends android.widget.FrameLayout {
     ctor public CalendarView(android.content.Context);
     ctor public CalendarView(android.content.Context, android.util.AttributeSet);
     ctor public CalendarView(android.content.Context, android.util.AttributeSet, int);
+    ctor public CalendarView(android.content.Context, android.util.AttributeSet, int, int);
     method public long getDate();
     method public int getDateTextAppearance();
     method public int getFirstDayOfWeek();
@@ -31137,6 +33740,7 @@
     ctor public CheckBox(android.content.Context);
     ctor public CheckBox(android.content.Context, android.util.AttributeSet);
     ctor public CheckBox(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckBox(android.content.Context, android.util.AttributeSet, int, int);
   }
 
   public abstract interface Checkable {
@@ -31149,6 +33753,7 @@
     ctor public CheckedTextView(android.content.Context);
     ctor public CheckedTextView(android.content.Context, android.util.AttributeSet);
     ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public CheckedTextView(android.content.Context, android.util.AttributeSet, int, int);
     method public android.graphics.drawable.Drawable getCheckMarkDrawable();
     method public boolean isChecked();
     method public void setCheckMarkDrawable(int);
@@ -31161,6 +33766,7 @@
     ctor public Chronometer(android.content.Context);
     ctor public Chronometer(android.content.Context, android.util.AttributeSet);
     ctor public Chronometer(android.content.Context, android.util.AttributeSet, int);
+    ctor public Chronometer(android.content.Context, android.util.AttributeSet, int, int);
     method public long getBase();
     method public java.lang.String getFormat();
     method public android.widget.Chronometer.OnChronometerTickListener getOnChronometerTickListener();
@@ -31179,6 +33785,7 @@
     ctor public CompoundButton(android.content.Context);
     ctor public CompoundButton(android.content.Context, android.util.AttributeSet);
     ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public CompoundButton(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean isChecked();
     method public void setButtonDrawable(int);
     method public void setButtonDrawable(android.graphics.drawable.Drawable);
@@ -31250,6 +33857,7 @@
     ctor public DatePicker(android.content.Context);
     ctor public DatePicker(android.content.Context, android.util.AttributeSet);
     ctor public DatePicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public DatePicker(android.content.Context, android.util.AttributeSet, int, int);
     method public android.widget.CalendarView getCalendarView();
     method public boolean getCalendarViewShown();
     method public int getDayOfMonth();
@@ -31313,6 +33921,7 @@
     ctor public EditText(android.content.Context);
     ctor public EditText(android.content.Context, android.util.AttributeSet);
     ctor public EditText(android.content.Context, android.util.AttributeSet, int);
+    ctor public EditText(android.content.Context, android.util.AttributeSet, int, int);
     method public void extendSelection(int);
     method public void selectAll();
     method public void setSelection(int, int);
@@ -31344,6 +33953,7 @@
     ctor public ExpandableListView(android.content.Context);
     ctor public ExpandableListView(android.content.Context, android.util.AttributeSet);
     ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ExpandableListView(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean collapseGroup(int);
     method public boolean expandGroup(int);
     method public boolean expandGroup(int, boolean);
@@ -31433,6 +34043,7 @@
     ctor public FrameLayout(android.content.Context);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet);
     ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public FrameLayout(android.content.Context, android.util.AttributeSet, int, int);
     method public deprecated boolean getConsiderGoneChildrenWhenMeasuring();
     method public android.graphics.drawable.Drawable getForeground();
     method public int getForegroundGravity();
@@ -31457,6 +34068,7 @@
     ctor public Gallery(android.content.Context);
     ctor public Gallery(android.content.Context, android.util.AttributeSet);
     ctor public Gallery(android.content.Context, android.util.AttributeSet, int);
+    ctor public Gallery(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean onDown(android.view.MotionEvent);
     method public boolean onFling(android.view.MotionEvent, android.view.MotionEvent, float, float);
     method public void onLongPress(android.view.MotionEvent);
@@ -31477,9 +34089,10 @@
   }
 
   public class GridLayout extends android.view.ViewGroup {
-    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
-    ctor public GridLayout(android.content.Context, android.util.AttributeSet);
     ctor public GridLayout(android.content.Context);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridLayout(android.content.Context, android.util.AttributeSet, int, int);
     method public int getAlignmentMode();
     method public int getColumnCount();
     method public int getOrientation();
@@ -31537,6 +34150,7 @@
     ctor public GridView(android.content.Context);
     ctor public GridView(android.content.Context, android.util.AttributeSet);
     ctor public GridView(android.content.Context, android.util.AttributeSet, int);
+    ctor public GridView(android.content.Context, android.util.AttributeSet, int, int);
     method public android.widget.ListAdapter getAdapter();
     method public int getColumnWidth();
     method public int getGravity();
@@ -31594,6 +34208,7 @@
     ctor public HorizontalScrollView(android.content.Context);
     ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet);
     ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int);
+    ctor public HorizontalScrollView(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean arrowScroll(int);
     method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
     method public boolean executeKeyEvent(android.view.KeyEvent);
@@ -31613,6 +34228,7 @@
     ctor public ImageButton(android.content.Context);
     ctor public ImageButton(android.content.Context, android.util.AttributeSet);
     ctor public ImageButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public ImageButton(android.content.Context, android.util.AttributeSet, int, int);
   }
 
   public class ImageSwitcher extends android.widget.ViewSwitcher {
@@ -31627,6 +34243,7 @@
     ctor public ImageView(android.content.Context);
     ctor public ImageView(android.content.Context, android.util.AttributeSet);
     ctor public ImageView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ImageView(android.content.Context, android.util.AttributeSet, int, int);
     method public final void clearColorFilter();
     method public boolean getAdjustViewBounds();
     method public boolean getBaselineAlignBottom();
@@ -31678,6 +34295,7 @@
     ctor public LinearLayout(android.content.Context);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet);
     ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public LinearLayout(android.content.Context, android.util.AttributeSet, int, int);
     method public int getBaselineAlignedChildIndex();
     method public android.graphics.drawable.Drawable getDividerDrawable();
     method public int getDividerPadding();
@@ -31788,6 +34406,7 @@
     ctor public ListView(android.content.Context);
     ctor public ListView(android.content.Context, android.util.AttributeSet);
     ctor public ListView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ListView(android.content.Context, android.util.AttributeSet, int, int);
     method public void addFooterView(android.view.View, java.lang.Object, boolean);
     method public void addFooterView(android.view.View);
     method public void addHeaderView(android.view.View, java.lang.Object, boolean);
@@ -31817,7 +34436,6 @@
     method public void setOverscrollHeader(android.graphics.drawable.Drawable);
     method public void setSelection(int);
     method public void setSelectionAfterHeaderView();
-    method public void setSelectionFromTop(int, int);
     method public void smoothScrollByOffset(int);
   }
 
@@ -31860,6 +34478,7 @@
     ctor public MultiAutoCompleteTextView(android.content.Context);
     ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet);
     ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public MultiAutoCompleteTextView(android.content.Context, android.util.AttributeSet, int, int);
     method protected void performFiltering(java.lang.CharSequence, int, int, int);
     method public void setTokenizer(android.widget.MultiAutoCompleteTextView.Tokenizer);
   }
@@ -31881,6 +34500,7 @@
     ctor public NumberPicker(android.content.Context);
     ctor public NumberPicker(android.content.Context, android.util.AttributeSet);
     ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public NumberPicker(android.content.Context, android.util.AttributeSet, int, int);
     method public java.lang.String[] getDisplayedValues();
     method public int getMaxValue();
     method public int getMinValue();
@@ -32026,6 +34646,7 @@
     ctor public ProgressBar(android.content.Context);
     ctor public ProgressBar(android.content.Context, android.util.AttributeSet);
     ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public ProgressBar(android.content.Context, android.util.AttributeSet, int, int);
     method public android.graphics.drawable.Drawable getIndeterminateDrawable();
     method public android.view.animation.Interpolator getInterpolator();
     method public synchronized int getMax();
@@ -32039,11 +34660,13 @@
     method public android.os.Parcelable onSaveInstanceState();
     method public synchronized void setIndeterminate(boolean);
     method public void setIndeterminateDrawable(android.graphics.drawable.Drawable);
+    method public void setIndeterminateDrawableTiled(android.graphics.drawable.Drawable);
     method public void setInterpolator(android.content.Context, int);
     method public void setInterpolator(android.view.animation.Interpolator);
     method public synchronized void setMax(int);
     method public synchronized void setProgress(int);
     method public void setProgressDrawable(android.graphics.drawable.Drawable);
+    method public void setProgressDrawableTiled(android.graphics.drawable.Drawable);
     method public synchronized void setSecondaryProgress(int);
   }
 
@@ -32051,6 +34674,7 @@
     ctor public QuickContactBadge(android.content.Context);
     ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet);
     ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int);
+    ctor public QuickContactBadge(android.content.Context, android.util.AttributeSet, int, int);
     method public void assignContactFromEmail(java.lang.String, boolean);
     method public void assignContactFromEmail(java.lang.String, boolean, android.os.Bundle);
     method public void assignContactFromPhone(java.lang.String, boolean);
@@ -32060,6 +34684,7 @@
     method public void setExcludeMimes(java.lang.String[]);
     method public void setImageToDefault();
     method public void setMode(int);
+    method public void setOverlay(android.graphics.drawable.Drawable);
     field protected java.lang.String[] mExcludeMimes;
   }
 
@@ -32067,6 +34692,7 @@
     ctor public RadioButton(android.content.Context);
     ctor public RadioButton(android.content.Context, android.util.AttributeSet);
     ctor public RadioButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public RadioButton(android.content.Context, android.util.AttributeSet, int, int);
   }
 
   public class RadioGroup extends android.widget.LinearLayout {
@@ -32092,6 +34718,7 @@
 
   public class RatingBar extends android.widget.AbsSeekBar {
     ctor public RatingBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public RatingBar(android.content.Context, android.util.AttributeSet, int, int);
     ctor public RatingBar(android.content.Context, android.util.AttributeSet);
     ctor public RatingBar(android.content.Context);
     method public int getNumStars();
@@ -32114,6 +34741,7 @@
     ctor public RelativeLayout(android.content.Context);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet);
     ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int);
+    ctor public RelativeLayout(android.content.Context, android.util.AttributeSet, int, int);
     method public int getGravity();
     method protected void onLayout(boolean, int, int, int, int);
     method public void setGravity(int);
@@ -32262,6 +34890,7 @@
     ctor public ScrollView(android.content.Context);
     ctor public ScrollView(android.content.Context, android.util.AttributeSet);
     ctor public ScrollView(android.content.Context, android.util.AttributeSet, int);
+    ctor public ScrollView(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean arrowScroll(int);
     method protected int computeScrollDeltaToGetChildRectOnScreen(android.graphics.Rect);
     method public boolean executeKeyEvent(android.view.KeyEvent);
@@ -32306,6 +34935,8 @@
   public class SearchView extends android.widget.LinearLayout implements android.view.CollapsibleActionView {
     ctor public SearchView(android.content.Context);
     ctor public SearchView(android.content.Context, android.util.AttributeSet);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet, int);
+    ctor public SearchView(android.content.Context, android.util.AttributeSet, int, int);
     method public int getImeOptions();
     method public int getInputType();
     method public int getMaxWidth();
@@ -32360,6 +34991,7 @@
     ctor public SeekBar(android.content.Context);
     ctor public SeekBar(android.content.Context, android.util.AttributeSet);
     ctor public SeekBar(android.content.Context, android.util.AttributeSet, int);
+    ctor public SeekBar(android.content.Context, android.util.AttributeSet, int, int);
     method public void setOnSeekBarChangeListener(android.widget.SeekBar.OnSeekBarChangeListener);
   }
 
@@ -32461,6 +35093,7 @@
   public deprecated class SlidingDrawer extends android.view.ViewGroup {
     ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet);
     ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet, int);
+    ctor public SlidingDrawer(android.content.Context, android.util.AttributeSet, int, int);
     method public void animateClose();
     method public void animateOpen();
     method public void animateToggle();
@@ -32495,6 +35128,7 @@
   }
 
   public final class Space extends android.view.View {
+    ctor public Space(android.content.Context, android.util.AttributeSet, int, int);
     ctor public Space(android.content.Context, android.util.AttributeSet, int);
     ctor public Space(android.content.Context, android.util.AttributeSet);
     ctor public Space(android.content.Context);
@@ -32506,6 +35140,7 @@
     ctor public Spinner(android.content.Context, android.util.AttributeSet);
     ctor public Spinner(android.content.Context, android.util.AttributeSet, int);
     ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int);
+    ctor public Spinner(android.content.Context, android.util.AttributeSet, int, int, int);
     method public int getDropDownHorizontalOffset();
     method public int getDropDownVerticalOffset();
     method public int getDropDownWidth();
@@ -32533,12 +35168,14 @@
     ctor public StackView(android.content.Context);
     ctor public StackView(android.content.Context, android.util.AttributeSet);
     ctor public StackView(android.content.Context, android.util.AttributeSet, int);
+    ctor public StackView(android.content.Context, android.util.AttributeSet, int, int);
   }
 
   public class Switch extends android.widget.CompoundButton {
     ctor public Switch(android.content.Context);
     ctor public Switch(android.content.Context, android.util.AttributeSet);
     ctor public Switch(android.content.Context, android.util.AttributeSet, int);
+    ctor public Switch(android.content.Context, android.util.AttributeSet, int, int);
     method public int getSwitchMinWidth();
     method public int getSwitchPadding();
     method public java.lang.CharSequence getTextOff();
@@ -32564,6 +35201,8 @@
   public class TabHost extends android.widget.FrameLayout implements android.view.ViewTreeObserver.OnTouchModeChangeListener {
     ctor public TabHost(android.content.Context);
     ctor public TabHost(android.content.Context, android.util.AttributeSet);
+    ctor public TabHost(android.content.Context, android.util.AttributeSet, int);
+    ctor public TabHost(android.content.Context, android.util.AttributeSet, int, int);
     method public void addTab(android.widget.TabHost.TabSpec);
     method public void clearAllTabs();
     method public int getCurrentTab();
@@ -32603,6 +35242,7 @@
     ctor public TabWidget(android.content.Context);
     ctor public TabWidget(android.content.Context, android.util.AttributeSet);
     ctor public TabWidget(android.content.Context, android.util.AttributeSet, int);
+    ctor public TabWidget(android.content.Context, android.util.AttributeSet, int, int);
     method public void dispatchDraw(android.graphics.Canvas);
     method public void focusCurrentTab(int);
     method public android.view.View getChildTabViewAt(int);
@@ -32665,6 +35305,7 @@
     ctor public TextClock(android.content.Context);
     ctor public TextClock(android.content.Context, android.util.AttributeSet);
     ctor public TextClock(android.content.Context, android.util.AttributeSet, int);
+    ctor public TextClock(android.content.Context, android.util.AttributeSet, int, int);
     method public java.lang.CharSequence getFormat12Hour();
     method public java.lang.CharSequence getFormat24Hour();
     method public java.lang.String getTimeZone();
@@ -32687,6 +35328,7 @@
     ctor public TextView(android.content.Context);
     ctor public TextView(android.content.Context, android.util.AttributeSet);
     ctor public TextView(android.content.Context, android.util.AttributeSet, int);
+    ctor public TextView(android.content.Context, android.util.AttributeSet, int, int);
     method public void addTextChangedListener(android.text.TextWatcher);
     method public final void append(java.lang.CharSequence);
     method public void append(java.lang.CharSequence, int, int);
@@ -32806,6 +35448,7 @@
     method public void setCursorVisible(boolean);
     method public void setCustomSelectionActionModeCallback(android.view.ActionMode.Callback);
     method public final void setEditableFactory(android.text.Editable.Factory);
+    method public void setElegantTextHeight(boolean);
     method public void setEllipsize(android.text.TextUtils.TruncateAt);
     method public void setEms(int);
     method public void setError(java.lang.CharSequence);
@@ -32894,6 +35537,7 @@
     ctor public TimePicker(android.content.Context);
     ctor public TimePicker(android.content.Context, android.util.AttributeSet);
     ctor public TimePicker(android.content.Context, android.util.AttributeSet, int);
+    ctor public TimePicker(android.content.Context, android.util.AttributeSet, int, int);
     method public java.lang.Integer getCurrentHour();
     method public java.lang.Integer getCurrentMinute();
     method public boolean is24HourView();
@@ -32931,6 +35575,7 @@
   }
 
   public class ToggleButton extends android.widget.CompoundButton {
+    ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int, int);
     ctor public ToggleButton(android.content.Context, android.util.AttributeSet, int);
     ctor public ToggleButton(android.content.Context, android.util.AttributeSet);
     ctor public ToggleButton(android.content.Context);
@@ -32940,10 +35585,55 @@
     method public void setTextOn(java.lang.CharSequence);
   }
 
+  public class Toolbar extends android.view.ViewGroup {
+    ctor public Toolbar(android.content.Context);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int);
+    ctor public Toolbar(android.content.Context, android.util.AttributeSet, int, int);
+    method public android.graphics.drawable.Drawable getLogo();
+    method public java.lang.CharSequence getLogoDescription();
+    method public android.view.Menu getMenu();
+    method public android.graphics.drawable.Drawable getNavigationIcon();
+    method public java.lang.CharSequence getSubtitle();
+    method public java.lang.CharSequence getTitle();
+    method public void inflateMenu(int);
+    method protected void onLayout(boolean, int, int, int, int);
+    method public void setLogo(int);
+    method public void setLogo(android.graphics.drawable.Drawable);
+    method public void setLogoDescription(int);
+    method public void setLogoDescription(java.lang.CharSequence);
+    method public void setNavigationDescription(int);
+    method public void setNavigationDescription(java.lang.CharSequence);
+    method public void setNavigationIcon(int);
+    method public void setNavigationIcon(android.graphics.drawable.Drawable);
+    method public void setNavigationOnClickListener(android.view.View.OnClickListener);
+    method public void setOnMenuItemClickListener(android.widget.Toolbar.OnMenuItemClickListener);
+    method public void setSubtitle(int);
+    method public void setSubtitle(java.lang.CharSequence);
+    method public void setTitle(int);
+    method public void setTitle(java.lang.CharSequence);
+  }
+
+  public static class Toolbar.LayoutParams extends android.view.ViewGroup.MarginLayoutParams {
+    ctor public Toolbar.LayoutParams(android.content.Context, android.util.AttributeSet);
+    ctor public Toolbar.LayoutParams(int, int);
+    ctor public Toolbar.LayoutParams(int, int, int);
+    ctor public Toolbar.LayoutParams(int);
+    ctor public Toolbar.LayoutParams(android.widget.Toolbar.LayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.MarginLayoutParams);
+    ctor public Toolbar.LayoutParams(android.view.ViewGroup.LayoutParams);
+    field public int gravity;
+  }
+
+  public static abstract interface Toolbar.OnMenuItemClickListener {
+    method public abstract boolean onMenuItemClick(android.view.MenuItem);
+  }
+
   public deprecated class TwoLineListItem extends android.widget.RelativeLayout {
     ctor public TwoLineListItem(android.content.Context);
     ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet);
     ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet, int);
+    ctor public TwoLineListItem(android.content.Context, android.util.AttributeSet, int, int);
     method public android.widget.TextView getText1();
     method public android.widget.TextView getText2();
   }
@@ -32952,6 +35642,7 @@
     ctor public VideoView(android.content.Context);
     ctor public VideoView(android.content.Context, android.util.AttributeSet);
     ctor public VideoView(android.content.Context, android.util.AttributeSet, int);
+    ctor public VideoView(android.content.Context, android.util.AttributeSet, int, int);
     method public void addSubtitleSource(java.io.InputStream, android.media.MediaFormat);
     method public boolean canPause();
     method public boolean canSeekBackward();
@@ -33026,6 +35717,7 @@
     ctor public ZoomButton(android.content.Context);
     ctor public ZoomButton(android.content.Context, android.util.AttributeSet);
     ctor public ZoomButton(android.content.Context, android.util.AttributeSet, int);
+    ctor public ZoomButton(android.content.Context, android.util.AttributeSet, int, int);
     method public boolean onLongClick(android.view.View);
     method public void setZoomSpeed(long);
   }
@@ -34950,6 +37642,109 @@
     field public static final java.lang.Character.UnicodeBlock YI_SYLLABLES;
   }
 
+  public static final class Character.UnicodeScript extends java.lang.Enum {
+    method public static java.lang.Character.UnicodeScript forName(java.lang.String);
+    method public static java.lang.Character.UnicodeScript of(int);
+    method public static java.lang.Character.UnicodeScript valueOf(java.lang.String);
+    method public static final java.lang.Character.UnicodeScript[] values();
+    enum_constant public static final java.lang.Character.UnicodeScript ARABIC;
+    enum_constant public static final java.lang.Character.UnicodeScript ARMENIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript AVESTAN;
+    enum_constant public static final java.lang.Character.UnicodeScript BALINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BAMUM;
+    enum_constant public static final java.lang.Character.UnicodeScript BATAK;
+    enum_constant public static final java.lang.Character.UnicodeScript BENGALI;
+    enum_constant public static final java.lang.Character.UnicodeScript BOPOMOFO;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAHMI;
+    enum_constant public static final java.lang.Character.UnicodeScript BRAILLE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUGINESE;
+    enum_constant public static final java.lang.Character.UnicodeScript BUHID;
+    enum_constant public static final java.lang.Character.UnicodeScript CANADIAN_ABORIGINAL;
+    enum_constant public static final java.lang.Character.UnicodeScript CARIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript CHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript CHEROKEE;
+    enum_constant public static final java.lang.Character.UnicodeScript COMMON;
+    enum_constant public static final java.lang.Character.UnicodeScript COPTIC;
+    enum_constant public static final java.lang.Character.UnicodeScript CUNEIFORM;
+    enum_constant public static final java.lang.Character.UnicodeScript CYPRIOT;
+    enum_constant public static final java.lang.Character.UnicodeScript CYRILLIC;
+    enum_constant public static final java.lang.Character.UnicodeScript DESERET;
+    enum_constant public static final java.lang.Character.UnicodeScript DEVANAGARI;
+    enum_constant public static final java.lang.Character.UnicodeScript EGYPTIAN_HIEROGLYPHS;
+    enum_constant public static final java.lang.Character.UnicodeScript ETHIOPIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GEORGIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript GLAGOLITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GOTHIC;
+    enum_constant public static final java.lang.Character.UnicodeScript GREEK;
+    enum_constant public static final java.lang.Character.UnicodeScript GUJARATI;
+    enum_constant public static final java.lang.Character.UnicodeScript GURMUKHI;
+    enum_constant public static final java.lang.Character.UnicodeScript HAN;
+    enum_constant public static final java.lang.Character.UnicodeScript HANGUL;
+    enum_constant public static final java.lang.Character.UnicodeScript HANUNOO;
+    enum_constant public static final java.lang.Character.UnicodeScript HEBREW;
+    enum_constant public static final java.lang.Character.UnicodeScript HIRAGANA;
+    enum_constant public static final java.lang.Character.UnicodeScript IMPERIAL_ARAMAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript INHERITED;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PAHLAVI;
+    enum_constant public static final java.lang.Character.UnicodeScript INSCRIPTIONAL_PARTHIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript JAVANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript KAITHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KANNADA;
+    enum_constant public static final java.lang.Character.UnicodeScript KATAKANA;
+    enum_constant public static final java.lang.Character.UnicodeScript KAYAH_LI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHAROSHTHI;
+    enum_constant public static final java.lang.Character.UnicodeScript KHMER;
+    enum_constant public static final java.lang.Character.UnicodeScript LAO;
+    enum_constant public static final java.lang.Character.UnicodeScript LATIN;
+    enum_constant public static final java.lang.Character.UnicodeScript LEPCHA;
+    enum_constant public static final java.lang.Character.UnicodeScript LIMBU;
+    enum_constant public static final java.lang.Character.UnicodeScript LINEAR_B;
+    enum_constant public static final java.lang.Character.UnicodeScript LISU;
+    enum_constant public static final java.lang.Character.UnicodeScript LYCIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript LYDIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MALAYALAM;
+    enum_constant public static final java.lang.Character.UnicodeScript MANDAIC;
+    enum_constant public static final java.lang.Character.UnicodeScript MEETEI_MAYEK;
+    enum_constant public static final java.lang.Character.UnicodeScript MONGOLIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript MYANMAR;
+    enum_constant public static final java.lang.Character.UnicodeScript NEW_TAI_LUE;
+    enum_constant public static final java.lang.Character.UnicodeScript NKO;
+    enum_constant public static final java.lang.Character.UnicodeScript OGHAM;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_ITALIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_PERSIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_SOUTH_ARABIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript OLD_TURKIC;
+    enum_constant public static final java.lang.Character.UnicodeScript OL_CHIKI;
+    enum_constant public static final java.lang.Character.UnicodeScript ORIYA;
+    enum_constant public static final java.lang.Character.UnicodeScript OSMANYA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHAGS_PA;
+    enum_constant public static final java.lang.Character.UnicodeScript PHOENICIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript REJANG;
+    enum_constant public static final java.lang.Character.UnicodeScript RUNIC;
+    enum_constant public static final java.lang.Character.UnicodeScript SAMARITAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SAURASHTRA;
+    enum_constant public static final java.lang.Character.UnicodeScript SHAVIAN;
+    enum_constant public static final java.lang.Character.UnicodeScript SINHALA;
+    enum_constant public static final java.lang.Character.UnicodeScript SUNDANESE;
+    enum_constant public static final java.lang.Character.UnicodeScript SYLOTI_NAGRI;
+    enum_constant public static final java.lang.Character.UnicodeScript SYRIAC;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGALOG;
+    enum_constant public static final java.lang.Character.UnicodeScript TAGBANWA;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_LE;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_THAM;
+    enum_constant public static final java.lang.Character.UnicodeScript TAI_VIET;
+    enum_constant public static final java.lang.Character.UnicodeScript TAMIL;
+    enum_constant public static final java.lang.Character.UnicodeScript TELUGU;
+    enum_constant public static final java.lang.Character.UnicodeScript THAANA;
+    enum_constant public static final java.lang.Character.UnicodeScript THAI;
+    enum_constant public static final java.lang.Character.UnicodeScript TIBETAN;
+    enum_constant public static final java.lang.Character.UnicodeScript TIFINAGH;
+    enum_constant public static final java.lang.Character.UnicodeScript UGARITIC;
+    enum_constant public static final java.lang.Character.UnicodeScript UNKNOWN;
+    enum_constant public static final java.lang.Character.UnicodeScript VAI;
+    enum_constant public static final java.lang.Character.UnicodeScript YI;
+  }
+
   public final class Class implements java.lang.reflect.AnnotatedElement java.lang.reflect.GenericDeclaration java.io.Serializable java.lang.reflect.Type {
     method public java.lang.Class<? extends U> asSubclass(java.lang.Class<U>);
     method public T cast(java.lang.Object);
@@ -37185,6 +39980,11 @@
     method public abstract java.net.SocketImpl createSocketImpl();
   }
 
+  public abstract interface SocketOption {
+    method public abstract java.lang.String name();
+    method public abstract java.lang.Class<T> type();
+  }
+
   public abstract interface SocketOptions {
     method public abstract java.lang.Object getOption(int) throws java.net.SocketException;
     method public abstract void setOption(int, java.lang.Object) throws java.net.SocketException;
@@ -37215,6 +40015,21 @@
     ctor public SocketTimeoutException(java.lang.String);
   }
 
+  public final class StandardSocketOptions {
+    ctor public StandardSocketOptions();
+    field public static final java.net.SocketOption IP_MULTICAST_IF;
+    field public static final java.net.SocketOption IP_MULTICAST_LOOP;
+    field public static final java.net.SocketOption IP_MULTICAST_TTL;
+    field public static final java.net.SocketOption IP_TOS;
+    field public static final java.net.SocketOption SO_BROADCAST;
+    field public static final java.net.SocketOption SO_KEEPALIVE;
+    field public static final java.net.SocketOption SO_LINGER;
+    field public static final java.net.SocketOption SO_RCVBUF;
+    field public static final java.net.SocketOption SO_REUSEADDR;
+    field public static final java.net.SocketOption SO_SNDBUF;
+    field public static final java.net.SocketOption TCP_NODELAY;
+  }
+
   public final class URI implements java.lang.Comparable java.io.Serializable {
     ctor public URI(java.lang.String) throws java.net.URISyntaxException;
     ctor public URI(java.lang.String, java.lang.String, java.lang.String) throws java.net.URISyntaxException;
@@ -37310,6 +40125,7 @@
     method public java.lang.Object getContent(java.lang.Class[]) throws java.io.IOException;
     method public java.lang.String getContentEncoding();
     method public int getContentLength();
+    method public long getContentLengthLong();
     method public java.lang.String getContentType();
     method public long getDate();
     method public static boolean getDefaultAllowUserInteraction();
@@ -37324,6 +40140,7 @@
     method public long getHeaderFieldDate(java.lang.String, long);
     method public int getHeaderFieldInt(java.lang.String, int);
     method public java.lang.String getHeaderFieldKey(int);
+    method public long getHeaderFieldLong(java.lang.String, long);
     method public java.util.Map<java.lang.String, java.util.List<java.lang.String>> getHeaderFields();
     method public long getIfModifiedSince();
     method public java.io.InputStream getInputStream() throws java.io.IOException;
@@ -37674,6 +40491,10 @@
 
 package java.nio.channels {
 
+  public class AlreadyBoundException extends java.lang.IllegalStateException {
+    ctor public AlreadyBoundException();
+  }
+
   public class AlreadyConnectedException extends java.lang.IllegalStateException {
     ctor public AlreadyConnectedException();
   }
@@ -37723,8 +40544,11 @@
 
   public abstract class DatagramChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
     ctor protected DatagramChannel(java.nio.channels.spi.SelectorProvider);
+    method public java.nio.channels.DatagramChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel connect(java.net.SocketAddress) throws java.io.IOException;
     method public abstract java.nio.channels.DatagramChannel disconnect() throws java.io.IOException;
+    method public java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public T getOption(java.net.SocketOption<T>) throws java.io.IOException;
     method public abstract boolean isConnected();
     method public static java.nio.channels.DatagramChannel open() throws java.io.IOException;
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
@@ -37732,14 +40556,16 @@
     method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException;
     method public abstract java.net.SocketAddress receive(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract int send(java.nio.ByteBuffer, java.net.SocketAddress) throws java.io.IOException;
+    method public java.nio.channels.DatagramChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.DatagramSocket socket();
+    method public java.util.Set<java.net.SocketOption<?>> supportedOptions();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
     method public final synchronized long write(java.nio.ByteBuffer[]) throws java.io.IOException;
   }
 
-  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public abstract class FileChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel java.nio.channels.SeekableByteChannel {
     ctor protected FileChannel();
     method public abstract void force(boolean) throws java.io.IOException;
     method public final java.nio.channels.FileLock lock() throws java.io.IOException;
@@ -37803,6 +40629,14 @@
     method public abstract void close() throws java.io.IOException;
   }
 
+  public abstract interface NetworkChannel implements java.lang.AutoCloseable java.nio.channels.Channel java.io.Closeable {
+    method public abstract java.nio.channels.NetworkChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public abstract java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public abstract T getOption(java.net.SocketOption<T>) throws java.io.IOException;
+    method public abstract java.nio.channels.NetworkChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
+    method public abstract java.util.Set<java.net.SocketOption<?>> supportedOptions();
+  }
+
   public class NoConnectionPendingException extends java.lang.IllegalStateException {
     ctor public NoConnectionPendingException();
   }
@@ -37853,6 +40687,15 @@
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
   }
 
+  public abstract interface SeekableByteChannel implements java.nio.channels.ByteChannel {
+    method public abstract long position() throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel position(long) throws java.io.IOException;
+    method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
+    method public abstract long size() throws java.io.IOException;
+    method public abstract java.nio.channels.SeekableByteChannel truncate(long) throws java.io.IOException;
+    method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
+  }
+
   public abstract class SelectableChannel extends java.nio.channels.spi.AbstractInterruptibleChannel implements java.nio.channels.Channel {
     ctor protected SelectableChannel();
     method public abstract java.lang.Object blockingLock();
@@ -37901,18 +40744,27 @@
     method public abstract java.nio.channels.Selector wakeup();
   }
 
-  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel {
+  public abstract class ServerSocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.NetworkChannel {
     ctor protected ServerSocketChannel(java.nio.channels.spi.SelectorProvider);
     method public abstract java.nio.channels.SocketChannel accept() throws java.io.IOException;
+    method public final java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
+    method public java.nio.channels.ServerSocketChannel bind(java.net.SocketAddress, int) throws java.io.IOException;
+    method public java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public T getOption(java.net.SocketOption<T>) throws java.io.IOException;
     method public static java.nio.channels.ServerSocketChannel open() throws java.io.IOException;
+    method public java.nio.channels.ServerSocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.ServerSocket socket();
+    method public java.util.Set<java.net.SocketOption<?>> supportedOptions();
     method public final int validOps();
   }
 
-  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.ScatteringByteChannel {
+  public abstract class SocketChannel extends java.nio.channels.spi.AbstractSelectableChannel implements java.nio.channels.ByteChannel java.nio.channels.GatheringByteChannel java.nio.channels.NetworkChannel java.nio.channels.ScatteringByteChannel {
     ctor protected SocketChannel(java.nio.channels.spi.SelectorProvider);
+    method public java.nio.channels.SocketChannel bind(java.net.SocketAddress) throws java.io.IOException;
     method public abstract boolean connect(java.net.SocketAddress) throws java.io.IOException;
     method public abstract boolean finishConnect() throws java.io.IOException;
+    method public java.net.SocketAddress getLocalAddress() throws java.io.IOException;
+    method public T getOption(java.net.SocketOption<T>) throws java.io.IOException;
     method public abstract boolean isConnected();
     method public abstract boolean isConnectionPending();
     method public static java.nio.channels.SocketChannel open() throws java.io.IOException;
@@ -37920,7 +40772,9 @@
     method public abstract int read(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long read(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
     method public final synchronized long read(java.nio.ByteBuffer[]) throws java.io.IOException;
+    method public java.nio.channels.SocketChannel setOption(java.net.SocketOption<T>, T) throws java.io.IOException;
     method public abstract java.net.Socket socket();
+    method public java.util.Set<java.net.SocketOption<?>> supportedOptions();
     method public final int validOps();
     method public abstract int write(java.nio.ByteBuffer) throws java.io.IOException;
     method public abstract long write(java.nio.ByteBuffer[], int, int) throws java.io.IOException;
@@ -42164,6 +45018,13 @@
     method public int getWidth();
   }
 
+  public class IllformedLocaleException extends java.lang.RuntimeException {
+    ctor public IllformedLocaleException();
+    ctor public IllformedLocaleException(java.lang.String);
+    ctor public IllformedLocaleException(java.lang.String, int);
+    method public int getErrorIndex();
+  }
+
   public class InputMismatchException extends java.util.NoSuchElementException implements java.io.Serializable {
     ctor public InputMismatchException();
     ctor public InputMismatchException(java.lang.String);
@@ -42278,6 +45139,7 @@
     ctor public Locale(java.lang.String, java.lang.String);
     ctor public Locale(java.lang.String, java.lang.String, java.lang.String);
     method public java.lang.Object clone();
+    method public static java.util.Locale forLanguageTag(java.lang.String);
     method public static java.util.Locale[] getAvailableLocales();
     method public java.lang.String getCountry();
     method public static java.util.Locale getDefault();
@@ -42287,15 +45149,24 @@
     method public java.lang.String getDisplayLanguage(java.util.Locale);
     method public final java.lang.String getDisplayName();
     method public java.lang.String getDisplayName(java.util.Locale);
+    method public java.lang.String getDisplayScript();
+    method public java.lang.String getDisplayScript(java.util.Locale);
     method public final java.lang.String getDisplayVariant();
     method public java.lang.String getDisplayVariant(java.util.Locale);
+    method public java.lang.String getExtension(char);
+    method public java.util.Set<java.lang.Character> getExtensionKeys();
     method public java.lang.String getISO3Country();
     method public java.lang.String getISO3Language();
     method public static java.lang.String[] getISOCountries();
     method public static java.lang.String[] getISOLanguages();
     method public java.lang.String getLanguage();
+    method public java.lang.String getScript();
+    method public java.util.Set<java.lang.String> getUnicodeLocaleAttributes();
+    method public java.util.Set<java.lang.String> getUnicodeLocaleKeys();
+    method public java.lang.String getUnicodeLocaleType(java.lang.String);
     method public java.lang.String getVariant();
     method public static synchronized void setDefault(java.util.Locale);
+    method public java.lang.String toLanguageTag();
     method public final java.lang.String toString();
     field public static final java.util.Locale CANADA;
     field public static final java.util.Locale CANADA_FRENCH;
@@ -42313,14 +45184,33 @@
     field public static final java.util.Locale KOREA;
     field public static final java.util.Locale KOREAN;
     field public static final java.util.Locale PRC;
+    field public static final char PRIVATE_USE_EXTENSION = 120; // 0x0078 'x'
     field public static final java.util.Locale ROOT;
     field public static final java.util.Locale SIMPLIFIED_CHINESE;
     field public static final java.util.Locale TAIWAN;
     field public static final java.util.Locale TRADITIONAL_CHINESE;
     field public static final java.util.Locale UK;
+    field public static final char UNICODE_LOCALE_EXTENSION = 117; // 0x0075 'u'
     field public static final java.util.Locale US;
   }
 
+  public static final class Locale.Builder {
+    ctor public Locale.Builder();
+    method public java.util.Locale.Builder addUnicodeLocaleAttribute(java.lang.String);
+    method public java.util.Locale build();
+    method public java.util.Locale.Builder clear();
+    method public java.util.Locale.Builder clearExtensions();
+    method public java.util.Locale.Builder removeUnicodeLocaleAttribute(java.lang.String);
+    method public java.util.Locale.Builder setExtension(char, java.lang.String);
+    method public java.util.Locale.Builder setLanguage(java.lang.String);
+    method public java.util.Locale.Builder setLanguageTag(java.lang.String);
+    method public java.util.Locale.Builder setLocale(java.util.Locale);
+    method public java.util.Locale.Builder setRegion(java.lang.String);
+    method public java.util.Locale.Builder setScript(java.lang.String);
+    method public java.util.Locale.Builder setUnicodeLocaleKeyword(java.lang.String, java.lang.String);
+    method public java.util.Locale.Builder setVariant(java.lang.String);
+  }
+
   public abstract interface Map {
     method public abstract void clear();
     method public abstract boolean containsKey(java.lang.Object);
@@ -43007,6 +45897,35 @@
     method public V replace(K, V);
   }
 
+  public class ConcurrentLinkedDeque extends java.util.AbstractCollection implements java.util.Deque java.io.Serializable {
+    ctor public ConcurrentLinkedDeque();
+    ctor public ConcurrentLinkedDeque(java.util.Collection<? extends E>);
+    method public void addFirst(E);
+    method public void addLast(E);
+    method public java.util.Iterator<E> descendingIterator();
+    method public E element();
+    method public E getFirst();
+    method public E getLast();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E);
+    method public boolean offerFirst(E);
+    method public boolean offerLast(E);
+    method public E peek();
+    method public E peekFirst();
+    method public E peekLast();
+    method public E poll();
+    method public E pollFirst();
+    method public E pollLast();
+    method public E pop();
+    method public void push(E);
+    method public E remove();
+    method public E removeFirst();
+    method public boolean removeFirstOccurrence(java.lang.Object);
+    method public E removeLast();
+    method public boolean removeLastOccurrence(java.lang.Object);
+    method public int size();
+  }
+
   public class ConcurrentLinkedQueue extends java.util.AbstractQueue implements java.util.Queue java.io.Serializable {
     ctor public ConcurrentLinkedQueue();
     ctor public ConcurrentLinkedQueue(java.util.Collection<? extends E>);
@@ -43247,6 +46166,94 @@
     method public static java.util.concurrent.ScheduledExecutorService unconfigurableScheduledExecutorService(java.util.concurrent.ScheduledExecutorService);
   }
 
+  public class ForkJoinPool extends java.util.concurrent.AbstractExecutorService {
+    ctor public ForkJoinPool();
+    ctor public ForkJoinPool(int);
+    ctor public ForkJoinPool(int, java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory, java.lang.Thread.UncaughtExceptionHandler, boolean);
+    method public boolean awaitQuiescence(long, java.util.concurrent.TimeUnit);
+    method public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method protected int drainTasksTo(java.util.Collection<? super java.util.concurrent.ForkJoinTask<?>>);
+    method public void execute(java.util.concurrent.ForkJoinTask<?>);
+    method public void execute(java.lang.Runnable);
+    method public int getActiveThreadCount();
+    method public boolean getAsyncMode();
+    method public java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory getFactory();
+    method public int getParallelism();
+    method public int getPoolSize();
+    method public int getQueuedSubmissionCount();
+    method public long getQueuedTaskCount();
+    method public int getRunningThreadCount();
+    method public long getStealCount();
+    method public java.lang.Thread.UncaughtExceptionHandler getUncaughtExceptionHandler();
+    method public boolean hasQueuedSubmissions();
+    method public T invoke(java.util.concurrent.ForkJoinTask<T>);
+    method public boolean isQuiescent();
+    method public boolean isShutdown();
+    method public boolean isTerminated();
+    method public boolean isTerminating();
+    method public static void managedBlock(java.util.concurrent.ForkJoinPool.ManagedBlocker) throws java.lang.InterruptedException;
+    method protected java.util.concurrent.ForkJoinTask<?> pollSubmission();
+    method public void shutdown();
+    method public java.util.List<java.lang.Runnable> shutdownNow();
+    method public java.util.concurrent.ForkJoinTask<T> submit(java.util.concurrent.ForkJoinTask<T>);
+    field public static final java.util.concurrent.ForkJoinPool.ForkJoinWorkerThreadFactory defaultForkJoinWorkerThreadFactory;
+  }
+
+  public static abstract interface ForkJoinPool.ForkJoinWorkerThreadFactory {
+    method public abstract java.util.concurrent.ForkJoinWorkerThread newThread(java.util.concurrent.ForkJoinPool);
+  }
+
+  public static abstract interface ForkJoinPool.ManagedBlocker {
+    method public abstract boolean block() throws java.lang.InterruptedException;
+    method public abstract boolean isReleasable();
+  }
+
+  public abstract class ForkJoinTask implements java.util.concurrent.Future java.io.Serializable {
+    ctor public ForkJoinTask();
+    method public static java.util.concurrent.ForkJoinTask<?> adapt(java.lang.Runnable);
+    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.lang.Runnable, T);
+    method public static java.util.concurrent.ForkJoinTask<T> adapt(java.util.concurrent.Callable<? extends T>);
+    method public boolean cancel(boolean);
+    method public void complete(V);
+    method public void completeExceptionally(java.lang.Throwable);
+    method protected abstract boolean exec();
+    method public final java.util.concurrent.ForkJoinTask<V> fork();
+    method public final V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
+    method public final V get(long, java.util.concurrent.TimeUnit) throws java.util.concurrent.ExecutionException, java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public final java.lang.Throwable getException();
+    method public static java.util.concurrent.ForkJoinPool getPool();
+    method public static int getQueuedTaskCount();
+    method public abstract V getRawResult();
+    method public static int getSurplusQueuedTaskCount();
+    method public static void helpQuiesce();
+    method public static boolean inForkJoinPool();
+    method public final V invoke();
+    method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>, java.util.concurrent.ForkJoinTask<?>);
+    method public static void invokeAll(java.util.concurrent.ForkJoinTask<?>...);
+    method public static java.util.Collection<T> invokeAll(java.util.Collection<T>);
+    method public final boolean isCancelled();
+    method public final boolean isCompletedAbnormally();
+    method public final boolean isCompletedNormally();
+    method public final boolean isDone();
+    method public final V join();
+    method protected static java.util.concurrent.ForkJoinTask<?> peekNextLocalTask();
+    method protected static java.util.concurrent.ForkJoinTask<?> pollNextLocalTask();
+    method protected static java.util.concurrent.ForkJoinTask<?> pollTask();
+    method public final void quietlyInvoke();
+    method public final void quietlyJoin();
+    method public void reinitialize();
+    method protected abstract void setRawResult(V);
+    method public boolean tryUnfork();
+  }
+
+  public class ForkJoinWorkerThread extends java.lang.Thread {
+    ctor protected ForkJoinWorkerThread(java.util.concurrent.ForkJoinPool);
+    method public java.util.concurrent.ForkJoinPool getPool();
+    method public int getPoolIndex();
+    method protected void onStart();
+    method protected void onTermination(java.lang.Throwable);
+  }
+
   public abstract interface Future {
     method public abstract boolean cancel(boolean);
     method public abstract V get() throws java.util.concurrent.ExecutionException, java.lang.InterruptedException;
@@ -43331,6 +46338,52 @@
     method public E take() throws java.lang.InterruptedException;
   }
 
+  public class LinkedTransferQueue extends java.util.AbstractQueue implements java.io.Serializable java.util.concurrent.TransferQueue {
+    ctor public LinkedTransferQueue();
+    ctor public LinkedTransferQueue(java.util.Collection<? extends E>);
+    method public int drainTo(java.util.Collection<? super E>);
+    method public int drainTo(java.util.Collection<? super E>, int);
+    method public int getWaitingConsumerCount();
+    method public boolean hasWaitingConsumer();
+    method public java.util.Iterator<E> iterator();
+    method public boolean offer(E, long, java.util.concurrent.TimeUnit);
+    method public boolean offer(E);
+    method public E peek();
+    method public E poll(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+    method public E poll();
+    method public void put(E);
+    method public int remainingCapacity();
+    method public int size();
+    method public E take() throws java.lang.InterruptedException;
+    method public void transfer(E) throws java.lang.InterruptedException;
+    method public boolean tryTransfer(E);
+    method public boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
+  public class Phaser {
+    ctor public Phaser();
+    ctor public Phaser(int);
+    ctor public Phaser(java.util.concurrent.Phaser);
+    ctor public Phaser(java.util.concurrent.Phaser, int);
+    method public int arrive();
+    method public int arriveAndAwaitAdvance();
+    method public int arriveAndDeregister();
+    method public int awaitAdvance(int);
+    method public int awaitAdvanceInterruptibly(int) throws java.lang.InterruptedException;
+    method public int awaitAdvanceInterruptibly(int, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException, java.util.concurrent.TimeoutException;
+    method public int bulkRegister(int);
+    method public void forceTermination();
+    method public int getArrivedParties();
+    method public java.util.concurrent.Phaser getParent();
+    method public final int getPhase();
+    method public int getRegisteredParties();
+    method public java.util.concurrent.Phaser getRoot();
+    method public int getUnarrivedParties();
+    method public boolean isTerminated();
+    method protected boolean onAdvance(int, int);
+    method public int register();
+  }
+
   public class PriorityBlockingQueue extends java.util.AbstractQueue implements java.util.concurrent.BlockingQueue java.io.Serializable {
     ctor public PriorityBlockingQueue();
     ctor public PriorityBlockingQueue(int);
@@ -43351,6 +46404,22 @@
     method public E take() throws java.lang.InterruptedException;
   }
 
+  public abstract class RecursiveAction extends java.util.concurrent.ForkJoinTask {
+    ctor public RecursiveAction();
+    method protected abstract void compute();
+    method protected final boolean exec();
+    method public final java.lang.Void getRawResult();
+    method protected final void setRawResult(java.lang.Void);
+  }
+
+  public abstract class RecursiveTask extends java.util.concurrent.ForkJoinTask {
+    ctor public RecursiveTask();
+    method protected abstract V compute();
+    method protected final boolean exec();
+    method public final V getRawResult();
+    method protected final void setRawResult(V);
+  }
+
   public class RejectedExecutionException extends java.lang.RuntimeException {
     ctor public RejectedExecutionException();
     ctor public RejectedExecutionException(java.lang.String);
@@ -43389,12 +46458,14 @@
     method protected java.util.concurrent.RunnableScheduledFuture<V> decorateTask(java.util.concurrent.Callable<V>, java.util.concurrent.RunnableScheduledFuture<V>);
     method public boolean getContinueExistingPeriodicTasksAfterShutdownPolicy();
     method public boolean getExecuteExistingDelayedTasksAfterShutdownPolicy();
+    method public boolean getRemoveOnCancelPolicy();
     method public java.util.concurrent.ScheduledFuture<?> schedule(java.lang.Runnable, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<V> schedule(java.util.concurrent.Callable<V>, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleAtFixedRate(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public java.util.concurrent.ScheduledFuture<?> scheduleWithFixedDelay(java.lang.Runnable, long, long, java.util.concurrent.TimeUnit);
     method public void setContinueExistingPeriodicTasksAfterShutdownPolicy(boolean);
     method public void setExecuteExistingDelayedTasksAfterShutdownPolicy(boolean);
+    method public void setRemoveOnCancelPolicy(boolean);
   }
 
   public class Semaphore implements java.io.Serializable {
@@ -43440,6 +46511,15 @@
     method public abstract java.lang.Thread newThread(java.lang.Runnable);
   }
 
+  public class ThreadLocalRandom extends java.util.Random {
+    method public static java.util.concurrent.ThreadLocalRandom current();
+    method public double nextDouble(double);
+    method public double nextDouble(double, double);
+    method public int nextInt(int, int);
+    method public long nextLong(long);
+    method public long nextLong(long, long);
+  }
+
   public class ThreadPoolExecutor extends java.util.concurrent.AbstractExecutorService {
     ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>);
     ctor public ThreadPoolExecutor(int, int, long, java.util.concurrent.TimeUnit, java.util.concurrent.BlockingQueue<java.lang.Runnable>, java.util.concurrent.ThreadFactory);
@@ -43527,6 +46607,14 @@
     ctor public TimeoutException(java.lang.String);
   }
 
+  public abstract interface TransferQueue implements java.util.concurrent.BlockingQueue {
+    method public abstract int getWaitingConsumerCount();
+    method public abstract boolean hasWaitingConsumer();
+    method public abstract void transfer(E) throws java.lang.InterruptedException;
+    method public abstract boolean tryTransfer(E);
+    method public abstract boolean tryTransfer(E, long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException;
+  }
+
 }
 
 package java.util.concurrent.atomic {
@@ -43736,6 +46824,7 @@
     method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
     method public final java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
     method public final boolean hasContended();
+    method public final boolean hasQueuedPredecessors();
     method public final boolean hasQueuedThreads();
     method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedLongSynchronizer.ConditionObject);
     method protected boolean isHeldExclusively();
@@ -43782,6 +46871,7 @@
     method public final int getWaitQueueLength(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
     method public final java.util.Collection<java.lang.Thread> getWaitingThreads(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
     method public final boolean hasContended();
+    method public final boolean hasQueuedPredecessors();
     method public final boolean hasQueuedThreads();
     method public final boolean hasWaiters(java.util.concurrent.locks.AbstractQueuedSynchronizer.ConditionObject);
     method protected boolean isHeldExclusively();
@@ -44671,7 +47761,47 @@
     method public void setMethod(int);
     method public void setSize(long);
     method public void setTime(long);
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
     field public static final int DEFLATED = 8; // 0x8
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
     field public static final int STORED = 0; // 0x0
   }
 
@@ -44695,6 +47825,46 @@
     method public java.io.InputStream getInputStream(java.util.zip.ZipEntry) throws java.io.IOException;
     method public java.lang.String getName();
     method public int size();
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
     field public static final int OPEN_DELETE = 4; // 0x4
     field public static final int OPEN_READ = 1; // 0x1
   }
@@ -44704,6 +47874,46 @@
     method public void closeEntry() throws java.io.IOException;
     method protected java.util.zip.ZipEntry createZipEntry(java.lang.String);
     method public java.util.zip.ZipEntry getNextEntry() throws java.io.IOException;
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
   }
 
   public class ZipOutputStream extends java.util.zip.DeflaterOutputStream {
@@ -44713,7 +47923,47 @@
     method public void setComment(java.lang.String);
     method public void setLevel(int);
     method public void setMethod(int);
+    field public static final int CENATT = 36; // 0x24
+    field public static final int CENATX = 38; // 0x26
+    field public static final int CENCOM = 32; // 0x20
+    field public static final int CENCRC = 16; // 0x10
+    field public static final int CENDSK = 34; // 0x22
+    field public static final int CENEXT = 30; // 0x1e
+    field public static final int CENFLG = 8; // 0x8
+    field public static final int CENHDR = 46; // 0x2e
+    field public static final int CENHOW = 10; // 0xa
+    field public static final int CENLEN = 24; // 0x18
+    field public static final int CENNAM = 28; // 0x1c
+    field public static final int CENOFF = 42; // 0x2a
+    field public static final long CENSIG = 33639248L; // 0x2014b50L
+    field public static final int CENSIZ = 20; // 0x14
+    field public static final int CENTIM = 12; // 0xc
+    field public static final int CENVEM = 4; // 0x4
+    field public static final int CENVER = 6; // 0x6
     field public static final int DEFLATED = 8; // 0x8
+    field public static final int ENDCOM = 20; // 0x14
+    field public static final int ENDHDR = 22; // 0x16
+    field public static final int ENDOFF = 16; // 0x10
+    field public static final long ENDSIG = 101010256L; // 0x6054b50L
+    field public static final int ENDSIZ = 12; // 0xc
+    field public static final int ENDSUB = 8; // 0x8
+    field public static final int ENDTOT = 10; // 0xa
+    field public static final int EXTCRC = 4; // 0x4
+    field public static final int EXTHDR = 16; // 0x10
+    field public static final int EXTLEN = 12; // 0xc
+    field public static final long EXTSIG = 134695760L; // 0x8074b50L
+    field public static final int EXTSIZ = 8; // 0x8
+    field public static final int LOCCRC = 14; // 0xe
+    field public static final int LOCEXT = 28; // 0x1c
+    field public static final int LOCFLG = 6; // 0x6
+    field public static final int LOCHDR = 30; // 0x1e
+    field public static final int LOCHOW = 8; // 0x8
+    field public static final int LOCLEN = 22; // 0x16
+    field public static final int LOCNAM = 26; // 0x1a
+    field public static final long LOCSIG = 67324752L; // 0x4034b50L
+    field public static final int LOCSIZ = 18; // 0x12
+    field public static final int LOCTIM = 10; // 0xa
+    field public static final int LOCVER = 4; // 0x4
     field public static final int STORED = 0; // 0x0
   }
 
diff --git a/media/jni/mediaeditor/MODULE_LICENSE_APACHE2 b/api/removed.txt
similarity index 100%
rename from media/jni/mediaeditor/MODULE_LICENSE_APACHE2
rename to api/removed.txt
diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java
index 89e15d2..6b55b7b 100644
--- a/cmds/am/src/com/android/commands/am/Am.java
+++ b/cmds/am/src/com/android/commands/am/Am.java
@@ -114,6 +114,8 @@
                 "       am stack resize <STACK_ID> <LEFT,TOP,RIGHT,BOTTOM>\n" +
                 "       am stack list\n" +
                 "       am stack info <STACK_ID>\n" +
+                "       am lock-task <TASK_ID>\n" +
+                "       am lock-task stop\n" +
                 "\n" +
                 "am start: start an Activity.  Options are:\n" +
                 "    -D: enable debugging\n" +
@@ -218,6 +220,8 @@
                 "\n" +
                 "am stack info: display the information about activity stack <STACK_ID>.\n" +
                 "\n" +
+                "am lock-task: bring <TASK_ID> to the front and don't allow other tasks to run\n" +
+                "\n" +
                 "<INTENT> specifications include these flags and arguments:\n" +
                 "    [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]\n" +
                 "    [-c <CATEGORY> [-c <CATEGORY>] ...]\n" +
@@ -232,8 +236,11 @@
                 "    [--eia <EXTRA_KEY> <EXTRA_INT_VALUE>[,<EXTRA_INT_VALUE...]]\n" +
                 "    [--ela <EXTRA_KEY> <EXTRA_LONG_VALUE>[,<EXTRA_LONG_VALUE...]]\n" +
                 "    [--efa <EXTRA_KEY> <EXTRA_FLOAT_VALUE>[,<EXTRA_FLOAT_VALUE...]]\n" +
+                "    [--esa <EXTRA_KEY> <EXTRA_STRING_VALUE>[,<EXTRA_STRING_VALUE...]]\n" +
+                "        (to embed a comma into a string escape it using \"\\,\")\n" +
                 "    [-n <COMPONENT>] [-f <FLAGS>]\n" +
                 "    [--grant-read-uri-permission] [--grant-write-uri-permission]\n" +
+                "    [--grant-persistable-uri-permission] [--grant-prefix-uri-permission]\n" +
                 "    [--debug-log-resolution] [--exclude-stopped-packages]\n" +
                 "    [--include-stopped-packages]\n" +
                 "    [--activity-brought-to-front] [--activity-clear-top]\n" +
@@ -307,6 +314,8 @@
             runStopUser();
         } else if (op.equals("stack")) {
             runStack();
+        } else if (op.equals("lock-task")) {
+            runLockTask();
         } else {
             showError("Error: unknown command '" + op + "'");
         }
@@ -419,6 +428,15 @@
                 }
                 intent.putExtra(key, list);
                 hasIntentInfo = true;
+            } else if (opt.equals("--esa")) {
+                String key = nextArgRequired();
+                String value = nextArgRequired();
+                // Split on commas unless they are preceeded by an escape.
+                // The escape character must be escaped for the string and
+                // again for the regex, thus four escape characters become one.
+                String[] strings = value.split("(?<!\\\\),");
+                intent.putExtra(key, strings);
+                hasIntentInfo = true;
             } else if (opt.equals("--ez")) {
                 String key = nextArgRequired();
                 String value = nextArgRequired();
@@ -438,6 +456,10 @@
                 intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
             } else if (opt.equals("--grant-write-uri-permission")) {
                 intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+            } else if (opt.equals("--grant-persistable-uri-permission")) {
+                intent.addFlags(Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
+            } else if (opt.equals("--grant-prefix-uri-permission")) {
+                intent.addFlags(Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
             } else if (opt.equals("--exclude-stopped-packages")) {
                 intent.addFlags(Intent.FLAG_EXCLUDE_STOPPED_PACKAGES);
             } else if (opt.equals("--include-stopped-packages")) {
@@ -727,6 +749,11 @@
                             "Error: Activity not started, you do not "
                             + "have permission to access it.");
                     break;
+                case ActivityManager.START_NOT_VOICE_COMPATIBLE:
+                    out.println(
+                            "Error: Activity not started, voice control not allowed for: "
+                                    + intent);
+                    break;
                 default:
                     out.println(
                             "Error: Activity not started, unknown error code " + res);
@@ -1630,4 +1657,19 @@
         } catch (RemoteException e) {
         }
     }
+
+    private void runLockTask() throws Exception {
+        String taskIdStr = nextArgRequired();
+        try {
+            if (taskIdStr.equals("stop")) {
+                mAm.stopLockTaskMode();
+            } else {
+                int taskId = Integer.valueOf(taskIdStr);
+                mAm.startLockTaskMode(taskId);
+            }
+            System.err.println("Activity manager is " + (mAm.isInLockTaskMode() ? "" : "not ") +
+                    "in lockTaskMode");
+        } catch (RemoteException e) {
+        }
+    }
 }
diff --git a/cmds/bootanimation/Android.mk b/cmds/bootanimation/Android.mk
index dd987e0..c4fe6cf 100644
--- a/cmds/bootanimation/Android.mk
+++ b/cmds/bootanimation/Android.mk
@@ -19,9 +19,6 @@
     libGLESv1_CM \
     libgui
 
-LOCAL_C_INCLUDES := \
-	$(call include-path-for, corecg graphics)
-
 LOCAL_MODULE:= bootanimation
 
 ifdef TARGET_32_BIT_SURFACEFLINGER
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index 7f7ae2c..3dc024ed 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -36,15 +36,14 @@
 #include <ui/Rect.h>
 #include <ui/Region.h>
 #include <ui/DisplayInfo.h>
-#include <ui/FramebufferNativeWindow.h>
 
 #include <gui/ISurfaceComposer.h>
 #include <gui/Surface.h>
 #include <gui/SurfaceComposerClient.h>
 
-#include <core/SkBitmap.h>
-#include <core/SkStream.h>
-#include <core/SkImageDecoder.h>
+#include <SkBitmap.h>
+#include <SkStream.h>
+#include <SkImageDecoder.h>
 
 #include <GLES/gl.h>
 #include <GLES/glext.h>
@@ -52,6 +51,7 @@
 
 #include "BootAnimation.h"
 
+#define OEM_BOOTANIMATION_FILE "/oem/media/bootanimation.zip"
 #define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"
 #define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"
 #define EXIT_PROP_NAME "service.bootanim.exit"
@@ -127,7 +127,7 @@
     glGenTextures(1, &texture->name);
     glBindTexture(GL_TEXTURE_2D, texture->name);
 
-    switch (bitmap.getConfig()) {
+    switch (bitmap.config()) {
         case SkBitmap::kA8_Config:
             glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, w, h, 0, GL_ALPHA,
                     GL_UNSIGNED_BYTE, p);
@@ -190,7 +190,7 @@
     if (tw < w) tw <<= 1;
     if (th < h) th <<= 1;
 
-    switch (bitmap.getConfig()) {
+    switch (bitmap.config()) {
         case SkBitmap::kARGB_8888_Config:
             if (tw != w || th != h) {
                 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tw, th, 0, GL_RGBA,
@@ -289,6 +289,9 @@
             (access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK) == 0) &&
             ((zipFile = ZipFileRO::open(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE)) != NULL)) ||
 
+            ((access(OEM_BOOTANIMATION_FILE, R_OK) == 0) &&
+            ((zipFile = ZipFileRO::open(OEM_BOOTANIMATION_FILE)) != NULL)) ||
+
             ((access(SYSTEM_BOOTANIMATION_FILE, R_OK) == 0) &&
             ((zipFile = ZipFileRO::open(SYSTEM_BOOTANIMATION_FILE)) != NULL))) {
         mZip = zipFile;
diff --git a/cmds/bu/src/com/android/commands/bu/Backup.java b/cmds/bu/src/com/android/commands/bu/Backup.java
index 73fd660..2673031 100644
--- a/cmds/bu/src/com/android/commands/bu/Backup.java
+++ b/cmds/bu/src/com/android/commands/bu/Backup.java
@@ -68,6 +68,7 @@
         boolean saveObbs = false;
         boolean saveShared = false;
         boolean doEverything = false;
+        boolean doWidgets = false;
         boolean allIncludesSystem = true;
 
         String arg;
@@ -89,6 +90,10 @@
                     allIncludesSystem = true;
                 } else if ("-nosystem".equals(arg)) {
                     allIncludesSystem = false;
+                } else if ("-widgets".equals(arg)) {
+                    doWidgets = true;
+                } else if ("-nowidgets".equals(arg)) {
+                    doWidgets = false;
                 } else if ("-all".equals(arg)) {
                     doEverything = true;
                 } else {
@@ -114,8 +119,8 @@
         try {
             fd = ParcelFileDescriptor.adoptFd(socketFd);
             String[] packArray = new String[packages.size()];
-            mBackupManager.fullBackup(fd, saveApks, saveObbs, saveShared, doEverything,
-                    allIncludesSystem, packages.toArray(packArray));
+            mBackupManager.fullBackup(fd, saveApks, saveObbs, saveShared, doWidgets,
+                    doEverything, allIncludesSystem, packages.toArray(packArray));
         } catch (RemoteException e) {
             Log.e(TAG, "Unable to invoke backup manager for backup");
         } finally {
diff --git a/cmds/content/src/com/android/commands/content/Content.java b/cmds/content/src/com/android/commands/content/Content.java
index e66bdf4..948c9a2 100644
--- a/cmds/content/src/com/android/commands/content/Content.java
+++ b/cmds/content/src/com/android/commands/content/Content.java
@@ -26,9 +26,17 @@
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
 import android.os.UserHandle;
 import android.text.TextUtils;
 
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import libcore.io.IoUtils;
+
 /**
  * This class is a command line utility for manipulating content. A client
  * can insert, update, and remove records in a content provider. For example,
@@ -109,6 +117,12 @@
         + "  <METHOD> is the name of a provider-defined method\n"
         + "  <ARG> is an optional string argument\n"
         + "  <BINDING> is like --bind above, typed data of the form <KEY>:{b,s,i,l,f,d}:<VAL>\n"
+        + "\n"
+        + "usage: adb shell content read --uri <URI> [--user <USER_ID>]\n"
+        + "  Example:\n"
+        + "  # cat default ringtone to a file, then pull to host\n"
+        + "  adb shell 'content read --uri content://settings/system/ringtone >"
+                + " /mnt/sdcard/tmp.ogg' && adb pull /mnt/sdcard/tmp.ogg\n"
         + "\n";
 
     private static class Parser {
@@ -117,6 +131,7 @@
         private static final String ARGUMENT_UPDATE = "update";
         private static final String ARGUMENT_QUERY = "query";
         private static final String ARGUMENT_CALL = "call";
+        private static final String ARGUMENT_READ = "read";
         private static final String ARGUMENT_WHERE = "--where";
         private static final String ARGUMENT_BIND = "--bind";
         private static final String ARGUMENT_URI = "--uri";
@@ -154,6 +169,8 @@
                     return parseQueryCommand();
                 } else if (ARGUMENT_CALL.equals(operation)) {
                     return parseCallCommand();
+                } else if (ARGUMENT_READ.equals(operation)) {
+                    return parseReadCommand();
                 } else {
                     throw new IllegalArgumentException("Unsupported operation: " + operation);
                 }
@@ -273,6 +290,25 @@
             return new CallCommand(uri, userId, method, arg, values);
         }
 
+        private ReadCommand parseReadCommand() {
+            Uri uri = null;
+            int userId = UserHandle.USER_OWNER;
+            for (String argument; (argument = mTokenizer.nextArg())!= null;) {
+                if (ARGUMENT_URI.equals(argument)) {
+                    uri = Uri.parse(argumentValueRequired(argument));
+                } else if (ARGUMENT_USER.equals(argument)) {
+                    userId = Integer.parseInt(argumentValueRequired(argument));
+                } else {
+                    throw new IllegalArgumentException("Unsupported argument: " + argument);
+                }
+            }
+            if (uri == null) {
+                throw new IllegalArgumentException("Content provider URI not specified."
+                        + " Did you specify --uri argument?");
+            }
+            return new ReadCommand(uri, userId);
+        }
+
         public QueryCommand parseQueryCommand() {
             Uri uri = null;
             int userId = UserHandle.USER_OWNER;
@@ -458,6 +494,31 @@
         }
     }
 
+    private static class ReadCommand extends Command {
+        public ReadCommand(Uri uri, int userId) {
+            super(uri, userId);
+        }
+
+        @Override
+        public void onExecute(IContentProvider provider) throws Exception {
+            final ParcelFileDescriptor fd = provider.openFile(null, mUri, "r", null);
+            copy(new FileInputStream(fd.getFileDescriptor()), System.out);
+        }
+
+        private static void copy(InputStream is, OutputStream os) throws IOException {
+            final byte[] buffer = new byte[8 * 1024];
+            int read;
+            try {
+                while ((read = is.read(buffer)) > -1) {
+                    os.write(buffer, 0, read);
+                }
+            } finally {
+                IoUtils.closeQuietly(is);
+                IoUtils.closeQuietly(os);
+            }
+        }
+    }
+
     private static class QueryCommand extends DeleteCommand {
         final String[] mProjection;
         final String mSortOrder;
@@ -498,7 +559,7 @@
                                     columnValue = String.valueOf(cursor.getFloat(columnIndex));
                                     break;
                                 case Cursor.FIELD_TYPE_INTEGER:
-                                    columnValue = String.valueOf(cursor.getInt(columnIndex));
+                                    columnValue = String.valueOf(cursor.getLong(columnIndex));
                                     break;
                                 case Cursor.FIELD_TYPE_STRING:
                                     columnValue = cursor.getString(columnIndex);
diff --git a/cmds/idmap/scan.cpp b/cmds/idmap/scan.cpp
index c5fc941..1153f38 100644
--- a/cmds/idmap/scan.cpp
+++ b/cmds/idmap/scan.cpp
@@ -119,7 +119,8 @@
 
     int parse_manifest(const void *data, size_t size, const char *target_package_name)
     {
-        ResXMLTree parser(data, size);
+        ResXMLTree parser;
+        parser.setTo(data, size);
         if (parser.getError() != NO_ERROR) {
             ALOGD("%s failed to init xml parser, error=0x%08x\n", __FUNCTION__, parser.getError());
             return -1;
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index d1ded10..5454b46 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -18,13 +18,14 @@
 
 import android.app.ActivityManager;
 import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
 import android.content.ComponentName;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ContainerEncryptionParams;
 import android.content.pm.FeatureInfo;
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.IPackageDeleteObserver;
-import android.content.pm.IPackageInstallObserver;
+import android.content.pm.IPackageInstallObserver2;
 import android.content.pm.IPackageManager;
 import android.content.pm.InstrumentationInfo;
 import android.content.pm.PackageInfo;
@@ -38,7 +39,9 @@
 import android.content.res.AssetManager;
 import android.content.res.Resources;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.IUserManager;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
@@ -698,14 +701,23 @@
         ActivityManager.dumpPackageStateStatic(FileDescriptor.out, pkg);
     }
 
-    class PackageInstallObserver extends IPackageInstallObserver.Stub {
+    class PackageInstallObserver extends IPackageInstallObserver2.Stub {
         boolean finished;
         int result;
+        String extraPermission;
+        String extraPackage;
 
-        public void packageInstalled(String name, int status) {
+        @Override
+        public void packageInstalled(String name, Bundle extras, int status) {
             synchronized( this) {
                 finished = true;
                 result = status;
+                if (status == PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION) {
+                    extraPermission = extras.getString(
+                            PackageManager.EXTRA_FAILURE_EXISTING_PERMISSION);
+                    extraPackage = extras.getString(
+                            PackageManager.EXTRA_FAILURE_EXISTING_PACKAGE);
+                }
                 notifyAll();
             }
         }
@@ -715,7 +727,8 @@
      * Converts a failure code into a string by using reflection to find a matching constant
      * in PackageManager.
      */
-    private String installFailureToString(int result) {
+    private String installFailureToString(PackageInstallObserver obs) {
+        final int result = obs.result;
         Field[] fields = PackageManager.class.getFields();
         for (Field f: fields) {
             if (f.getType() == int.class) {
@@ -730,7 +743,16 @@
                         // get the int value and compare it to result.
                         try {
                             if (result == f.getInt(null)) {
-                                return fieldName;
+                                StringBuilder sb = new StringBuilder(64);
+                                sb.append(fieldName);
+                                if (obs.extraPermission != null) {
+                                    sb.append(" perm=");
+                                    sb.append(obs.extraPermission);
+                                }
+                                if (obs.extraPackage != null) {
+                                    sb.append(" pkg=" + obs.extraPackage);
+                                }
+                                return sb.toString();
                             }
                         } catch (IllegalAccessException e) {
                             // this shouldn't happen since we only look for public static fields.
@@ -954,7 +976,7 @@
             VerificationParams verificationParams = new VerificationParams(verificationURI,
                     originatingURI, referrerURI, VerificationParams.NO_UID, null);
 
-            mPm.installPackageWithVerificationAndEncryption(apkURI, obs, installFlags,
+            mPm.installPackageWithVerificationAndEncryptionEtc(apkURI, null, obs, installFlags,
                     installerPackageName, verificationParams, encryptionParams);
 
             synchronized (obs) {
@@ -968,7 +990,7 @@
                     System.out.println("Success");
                 } else {
                     System.err.println("Failure ["
-                            + installFailureToString(obs.result)
+                            + installFailureToString(obs)
                             + "]");
                 }
             }
@@ -1011,6 +1033,27 @@
 
     public void runCreateUser() {
         String name;
+        int userId = -1;
+        int flags = 0;
+        String opt;
+        while ((opt = nextOption()) != null) {
+            if ("--profileOf".equals(opt)) {
+                String optionData = nextOptionData();
+                if (optionData == null || !isNumber(optionData)) {
+                    System.err.println("Error: no USER_ID specified");
+                    showUsage();
+                    return;
+                } else {
+                    userId = Integer.parseInt(optionData);
+                }
+            } else if ("--managed".equals(opt)) {
+                flags |= UserInfo.FLAG_MANAGED_PROFILE;
+            } else {
+                System.err.println("Error: unknown option " + opt);
+                showUsage();
+                return;
+            }
+        }
         String arg = nextArg();
         if (arg == null) {
             System.err.println("Error: no user name specified.");
@@ -1018,7 +1061,16 @@
         }
         name = arg;
         try {
-            final UserInfo info = mUm.createUser(name, 0);
+            UserInfo info = null;
+            if (userId < 0) {
+                info = mUm.createUser(name, flags);
+            } else {
+                if (Process.myUid() != 0) {
+                    System.err.println("Error: not running as root.");
+                    return;
+                }
+                info = mUm.createProfileForUser(name, flags, userId);
+            }
             if (info != null) {
                 System.out.println("Success: created user id " + info.id);
             } else {
@@ -1058,13 +1110,16 @@
 
     public void runListUsers() {
         try {
+            IActivityManager am = ActivityManagerNative.getDefault();
+
             List<UserInfo> users = mUm.getUsers(false);
             if (users == null) {
                 System.err.println("Error: couldn't get users");
             } else {
                 System.out.println("Users:");
                 for (int i = 0; i < users.size(); i++) {
-                    System.out.println("\t" + users.get(i).toString());
+                    String running = am.isUserRunning(users.get(i).id, false) ? " running" : "";
+                    System.out.println("\t" + users.get(i).toString() + running);
                 }
             }
         } catch (RemoteException e) {
@@ -1530,7 +1585,7 @@
         System.err.println("       pm get-install-location");
         System.err.println("       pm set-permission-enforced PERMISSION [true|false]");
         System.err.println("       pm trim-caches DESIRED_FREE_SPACE");
-        System.err.println("       pm create-user USER_NAME");
+        System.err.println("       pm create-user [--relatedTo USER_ID] [--managed] USER_NAME");
         System.err.println("       pm remove-user USER_ID");
         System.err.println("       pm get-max-users");
         System.err.println("");
diff --git a/cmds/screencap/Android.mk b/cmds/screencap/Android.mk
index ca8008b..5c11b75 100644
--- a/cmds/screencap/Android.mk
+++ b/cmds/screencap/Android.mk
@@ -16,11 +16,4 @@
 
 LOCAL_MODULE_TAGS := optional
 
-LOCAL_C_INCLUDES += \
-	external/skia/include/core \
-	external/skia/include/effects \
-	external/skia/include/images \
-	external/skia/src/ports \
-	external/skia/include/utils
-
 include $(BUILD_EXECUTABLE)
diff --git a/cmds/screencap/screencap.cpp b/cmds/screencap/screencap.cpp
index a57de01..2efe4d3 100644
--- a/cmds/screencap/screencap.cpp
+++ b/cmds/screencap/screencap.cpp
@@ -141,7 +141,7 @@
 
     ScreenshotClient screenshot;
     sp<IBinder> display = SurfaceComposerClient::getBuiltInDisplay(displayId);
-    if (display != NULL && screenshot.update(display) == NO_ERROR) {
+    if (display != NULL && screenshot.update(display, false) == NO_ERROR) {
         base = screenshot.getPixels();
         w = screenshot.getWidth();
         h = screenshot.getHeight();
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index 1e3d5be..2620c44 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -23,14 +23,18 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.RemoteException;
+import android.os.SystemClock;
 import android.util.Log;
 import android.view.KeyEvent;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityInteractionClient;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityWindowInfo;
 
 import com.android.internal.os.HandlerCaller;
 
+import java.util.List;
+
 /**
  * An accessibility service runs in the background and receives callbacks by the system
  * when {@link AccessibilityEvent}s are fired. Such events denote some state transition
@@ -180,28 +184,37 @@
  * event generation has settled down.</p>
  * <h3>Event types</h3>
  * <ul>
- * <li>{@link AccessibilityEvent#TYPE_VIEW_CLICKED}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_LONG_CLICKED}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_FOCUSED}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_SELECTED}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED}
- * <li>{@link AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED}
- * <li>{@link AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED}
- * <li>{@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_START}
- * <li>{@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_END}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_HOVER_ENTER}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_HOVER_EXIT}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_SCROLLED}
- * <li>{@link AccessibilityEvent#TYPE_VIEW_TEXT_SELECTION_CHANGED}
- * <li>{@link AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED}
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_CLICKED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_LONG_CLICKED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_FOCUSED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_SELECTED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_TEXT_CHANGED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_WINDOW_STATE_CHANGED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_NOTIFICATION_STATE_CHANGED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_START}</li>
+ * <li>{@link AccessibilityEvent#TYPE_TOUCH_EXPLORATION_GESTURE_END}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_HOVER_ENTER}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_HOVER_EXIT}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_SCROLLED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_TEXT_SELECTION_CHANGED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_ANNOUNCEMENT}</li>
+ * <li>{@link AccessibilityEvent#TYPE_GESTURE_DETECTION_START}</li>
+ * <li>{@link AccessibilityEvent#TYPE_GESTURE_DETECTION_END}</li>
+ * <li>{@link AccessibilityEvent#TYPE_TOUCH_INTERACTION_START}</li>
+ * <li>{@link AccessibilityEvent#TYPE_TOUCH_INTERACTION_END}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUSED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_WINDOWS_CHANGED}</li>
+ * <li>{@link AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED}</li>
  * </ul>
  * <h3>Feedback types</h3>
  * <ul>
- * <li>{@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}
- * <li>{@link AccessibilityServiceInfo#FEEDBACK_HAPTIC}
- * <li>{@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}
- * <li>{@link AccessibilityServiceInfo#FEEDBACK_VISUAL}
- * <li>{@link AccessibilityServiceInfo#FEEDBACK_GENERIC}
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}</li>
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_HAPTIC}</li>
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_AUDIBLE}</li>
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_VISUAL}</li>
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_GENERIC}</li>
+ * <li>{@link AccessibilityServiceInfo#FEEDBACK_BRAILLE}</li>
  * </ul>
  * @see AccessibilityEvent
  * @see AccessibilityServiceInfo
@@ -443,8 +456,41 @@
     }
 
     /**
+     * Gets the windows on the screen. This method returns only the windows
+     * that a sighted user can interact with, as opposed to all windows.
+     * For example, if there is a modal dialog shown and the user cannot touch
+     * anything behind it, then only the modal window will be reported
+     * (assuming it is the top one). For convenience the returned windows
+     * are ordered in a descending layer order, which is the windows that
+     * are higher in the Z-order are reported first.
+     * <p>
+     * <strong>Note:</strong> In order to access the windows your service has
+     * to declare the capability to retrieve window content by setting the
+     * {@link android.R.styleable#AccessibilityService_canRetrieveWindowContent}
+     * property in its meta-data. For details refer to {@link #SERVICE_META_DATA}.
+     * Also the service has to opt-in to retrieve the interactive windows by
+     * setting the {@link AccessibilityServiceInfo#FLAG_RETRIEVE_INTERACTIVE_WINDOWS}
+     * flag.
+     * </p>
+     *
+     * @return The windows if there are windows and the service is can retrieve
+     *         them, otherwise an empty list.
+     */
+    public List<AccessibilityWindowInfo> getWindows() {
+        return AccessibilityInteractionClient.getInstance().getWindows(mConnectionId);
+    }
+
+    /**
      * Gets the root node in the currently active window if this service
-     * can retrieve window content.
+     * can retrieve window content. The active window is the one that the user
+     * is currently touching or the window with input focus, if the user is not
+     * touching any window.
+     * <p>
+     * <strong>Note:</strong> In order to access the root node your service has
+     * to declare the capability to retrieve window content by setting the
+     * {@link android.R.styleable#AccessibilityService_canRetrieveWindowContent}
+     * property in its meta-data. For details refer to {@link #SERVICE_META_DATA}.
+     * </p>
      *
      * @return The root node if this service can retrieve window content.
      */
@@ -480,6 +526,31 @@
     }
 
     /**
+     * Find the view that has the specified focus type. The search is performed
+     * across all windows.
+     * <p>
+     * <strong>Note:</strong> In order to access the windows your service has
+     * to declare the capability to retrieve window content by setting the
+     * {@link android.R.styleable#AccessibilityService_canRetrieveWindowContent}
+     * property in its meta-data. For details refer to {@link #SERVICE_META_DATA}.
+     * Also the service has to opt-in to retrieve the interactive windows by
+     * setting the {@link AccessibilityServiceInfo#FLAG_RETRIEVE_INTERACTIVE_WINDOWS}
+     * flag.Otherwise, the search will be performed only in the active window.
+     * </p>
+     *
+     * @param focus The focus to find. One of {@link AccessibilityNodeInfo#FOCUS_INPUT} or
+     *         {@link AccessibilityNodeInfo#FOCUS_ACCESSIBILITY}.
+     * @return The node info of the focused view or null.
+     *
+     * @see AccessibilityNodeInfo#FOCUS_INPUT
+     * @see AccessibilityNodeInfo#FOCUS_ACCESSIBILITY
+     */
+    public AccessibilityNodeInfo findFocus(int focus) {
+        return AccessibilityInteractionClient.getInstance().findFocus(mConnectionId,
+                AccessibilityNodeInfo.ANY_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID, focus);
+    }
+
+    /**
      * Gets the an {@link AccessibilityServiceInfo} describing this
      * {@link AccessibilityService}. This method is useful if one wants
      * to change some of the dynamically configurable properties at
@@ -584,12 +655,13 @@
 
         static final int NO_ID = -1;
 
-        private static final int DO_SET_SET_CONNECTION = 10;
-        private static final int DO_ON_INTERRUPT = 20;
-        private static final int DO_ON_ACCESSIBILITY_EVENT = 30;
-        private static final int DO_ON_GESTURE = 40;
-        private static final int DO_CLEAR_ACCESSIBILITY_NODE_INFO_CACHE = 50;
-        private static final int DO_ON_KEY_EVENT = 60;
+        private static final int DO_SET_SET_CONNECTION = 1;
+        private static final int DO_ON_INTERRUPT = 2;
+        private static final int DO_ON_ACCESSIBILITY_EVENT = 3;
+        private static final int DO_ON_GESTURE = 4;
+        private static final int DO_CLEAR_ACCESSIBILITY_CACHE = 5;
+        private static final int DO_ON_KEY_EVENT = 6;
+        private static final int DO_ON_WINDOWS_CHANGED = 7;
 
         private final HandlerCaller mCaller;
 
@@ -624,8 +696,8 @@
             mCaller.sendMessage(message);
         }
 
-        public void clearAccessibilityNodeInfoCache() {
-            Message message = mCaller.obtainMessage(DO_CLEAR_ACCESSIBILITY_NODE_INFO_CACHE);
+        public void clearAccessibilityCache() {
+            Message message = mCaller.obtainMessage(DO_CLEAR_ACCESSIBILITY_CACHE);
             mCaller.sendMessage(message);
         }
 
@@ -635,6 +707,13 @@
             mCaller.sendMessage(message);
         }
 
+        @Override
+        public void onWindowsChanged(int[] windowIds) {
+            Message message = mCaller.obtainMessageO(DO_ON_WINDOWS_CHANGED, windowIds);
+            mCaller.sendMessage(message);
+        }
+
+        @Override
         public void executeMessage(Message message) {
             switch (message.what) {
                 case DO_ON_ACCESSIBILITY_EVENT: {
@@ -642,12 +721,19 @@
                     if (event != null) {
                         AccessibilityInteractionClient.getInstance().onAccessibilityEvent(event);
                         mCallback.onAccessibilityEvent(event);
-                        event.recycle();
+                        // Make sure the event is recycled.
+                        try {
+                            event.recycle();
+                        } catch (IllegalStateException ise) {
+                            /* ignore - best effort */
+                        }
                     }
                 } return;
+
                 case DO_ON_INTERRUPT: {
                     mCallback.onInterrupt();
                 } return;
+
                 case DO_SET_SET_CONNECTION: {
                     mConnectionId = message.arg1;
                     IAccessibilityServiceConnection connection =
@@ -658,18 +744,22 @@
                         mCallback.onSetConnectionId(mConnectionId);
                         mCallback.onServiceConnected();
                     } else {
-                        AccessibilityInteractionClient.getInstance().removeConnection(mConnectionId);
+                        AccessibilityInteractionClient.getInstance().removeConnection(
+                                mConnectionId);
                         AccessibilityInteractionClient.getInstance().clearCache();
                         mCallback.onSetConnectionId(AccessibilityInteractionClient.NO_ID);
                     }
                 } return;
+
                 case DO_ON_GESTURE: {
                     final int gestureId = message.arg1;
                     mCallback.onGesture(gestureId);
                 } return;
-                case DO_CLEAR_ACCESSIBILITY_NODE_INFO_CACHE: {
+
+                case DO_CLEAR_ACCESSIBILITY_CACHE: {
                     AccessibilityInteractionClient.getInstance().clearCache();
                 } return;
+
                 case DO_ON_KEY_EVENT: {
                     KeyEvent event = (KeyEvent) message.obj;
                     try {
@@ -685,9 +775,40 @@
                             }
                         }
                     } finally {
-                        event.recycle();
+                        // Make sure the event is recycled.
+                        try {
+                            event.recycle();
+                        } catch (IllegalStateException ise) {
+                            /* ignore - best effort */
+                        }
                     }
                 } return;
+
+                case DO_ON_WINDOWS_CHANGED: {
+                    final int[] windowIds = (int[]) message.obj;
+
+                    // Update the cached windows first.
+                    // NOTE: The cache will hold on to the windows so do not recycle.
+                    if (windowIds != null) {
+                        AccessibilityInteractionClient.getInstance().removeWindows(windowIds);
+                    }
+
+                    // Let the client know the windows changed.
+                    AccessibilityEvent event = AccessibilityEvent.obtain(
+                            AccessibilityEvent.TYPE_WINDOWS_CHANGED);
+                    event.setEventTime(SystemClock.uptimeMillis());
+                    event.setSealed(true);
+
+                    mCallback.onAccessibilityEvent(event);
+
+                    // Make sure the event is recycled.
+                    try {
+                        event.recycle();
+                    } catch (IllegalStateException ise) {
+                        /* ignore - best effort */
+                    }
+                } break;
+
                 default :
                     Log.w(LOG_TAG, "Unknown message type " + message.what);
             }
diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
index bdc4fdde..4f9ba59 100644
--- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
+++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java
@@ -284,6 +284,27 @@
     public static final int FLAG_REQUEST_FILTER_KEY_EVENTS = 0x00000020;
 
     /**
+     * This flag indicates to the system that the accessibility service wants
+     * to access content of all interactive windows. An interactive window is a
+     * window that can be touched by a sighted user when explore by touch is not
+     * enabled. If this flag is not set your service will not receive
+     * {@link android.view.accessibility.AccessibilityEvent#TYPE_WINDOWS_CHANGED}
+     * events, calling AccessibilityService{@link AccessibilityService#getWindows()
+     * AccessibilityService.getWindows()} will return an empty list, and {@link
+     * AccessibilityNodeInfo#getWindow() AccessibilityNodeInfo.getWindow()} will
+     * return null.
+     * <p>
+     * Services that want to set this flag have to declare the capability
+     * to retrieve window content in their meta-data by setting the attribute
+     * {@link android.R.attr#canRetrieveWindowContent canRetrieveWindowContent} to
+     * true, otherwise this flag will be ignored. For how to declare the meta-data
+     * of a service refer to {@value AccessibilityService#SERVICE_META_DATA}.
+     * </p>
+     * @see android.R.styleable#AccessibilityService_canRetrieveWindowContent
+     */
+    public static final int FLAG_RETRIEVE_INTERACTIVE_WINDOWS = 0x00000040;
+
+    /**
      * The event types an {@link AccessibilityService} is interested in.
      * <p>
      *   <strong>Can be dynamically set at runtime.</strong>
@@ -302,6 +323,15 @@
      * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_SCROLLED
      * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_TEXT_SELECTION_CHANGED
      * @see android.view.accessibility.AccessibilityEvent#TYPE_WINDOW_CONTENT_CHANGED
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_TOUCH_INTERACTION_START
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_TOUCH_INTERACTION_END
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_ANNOUNCEMENT
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_GESTURE_DETECTION_START
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_GESTURE_DETECTION_END
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUSED
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY
+     * @see android.view.accessibility.AccessibilityEvent#TYPE_WINDOWS_CHANGED
      */
     public int eventTypes;
 
@@ -354,6 +384,7 @@
      * @see #FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY
      * @see #FLAG_REQUEST_FILTER_KEY_EVENTS
      * @see #FLAG_REPORT_VIEW_IDS
+     * @see #FLAG_RETRIEVE_INTERACTIVE_WINDOWS
      */
     public int flags;
 
@@ -449,7 +480,7 @@
                     com.android.internal.R.styleable.AccessibilityService_accessibilityFeedbackType,
                     0);
             notificationTimeout = asAttributes.getInt(
-                    com.android.internal.R.styleable.AccessibilityService_notificationTimeout, 
+                    com.android.internal.R.styleable.AccessibilityService_notificationTimeout,
                     0);
             flags = asAttributes.getInt(
                     com.android.internal.R.styleable.AccessibilityService_accessibilityFlags, 0);
@@ -861,6 +892,8 @@
                 return "FLAG_REPORT_VIEW_IDS";
             case FLAG_REQUEST_FILTER_KEY_EVENTS:
                 return "FLAG_REQUEST_FILTER_KEY_EVENTS";
+            case FLAG_RETRIEVE_INTERACTIVE_WINDOWS:
+                return "FLAG_RETRIEVE_INTERACTIVE_WINDOWS";
             default:
                 return null;
         }
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl
index c5e3d43a..edd8727 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl
@@ -18,6 +18,7 @@
 
 import android.accessibilityservice.IAccessibilityServiceConnection;
 import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityWindowInfo;
 import android.view.KeyEvent;
 
 /**
@@ -35,7 +36,9 @@
 
     void onGesture(int gesture);
 
-    void clearAccessibilityNodeInfoCache();
+    void clearAccessibilityCache();
 
     void onKeyEvent(in KeyEvent event, int sequence);
+
+    void onWindowsChanged(in int[] changedWindowIds);
 }
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
index 3df06b5..5f7a17d 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
@@ -21,6 +21,7 @@
 import android.view.MagnificationSpec;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
+import android.view.accessibility.AccessibilityWindowInfo;
 
 /**
  * Interface given to an AccessibilitySerivce to talk to the AccessibilityManagerService.
@@ -53,6 +54,10 @@
         int action, in Bundle arguments, int interactionId,
         IAccessibilityInteractionConnectionCallback callback, long threadId);
 
+    AccessibilityWindowInfo getWindow(int windowId);
+
+    List<AccessibilityWindowInfo> getWindows();
+
     AccessibilityServiceInfo getServiceInfo();
 
     boolean performGlobalAction(int action);
diff --git a/core/java/android/accounts/AccountAuthenticatorActivity.java b/core/java/android/accounts/AccountAuthenticatorActivity.java
index 6a55ddf..f9284e67 100644
--- a/core/java/android/accounts/AccountAuthenticatorActivity.java
+++ b/core/java/android/accounts/AccountAuthenticatorActivity.java
@@ -17,7 +17,6 @@
 package android.accounts;
 
 import android.app.Activity;
-import android.content.Intent;
 import android.os.Bundle;
 
 /**
diff --git a/core/java/android/accounts/AccountManagerFuture.java b/core/java/android/accounts/AccountManagerFuture.java
index a1ab00c..af00a08 100644
--- a/core/java/android/accounts/AccountManagerFuture.java
+++ b/core/java/android/accounts/AccountManagerFuture.java
@@ -15,10 +15,7 @@
  */
 package android.accounts;
 
-import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
 import java.io.IOException;
 
 /**
diff --git a/core/java/android/accounts/ChooseAccountActivity.java b/core/java/android/accounts/ChooseAccountActivity.java
index bfbae24..242b3ea 100644
--- a/core/java/android/accounts/ChooseAccountActivity.java
+++ b/core/java/android/accounts/ChooseAccountActivity.java
@@ -100,7 +100,7 @@
             try {
                 AuthenticatorDescription desc = mTypeToAuthDescription.get(accountType);
                 Context authContext = createPackageContext(desc.packageName, 0);
-                icon = authContext.getResources().getDrawable(desc.iconId);
+                icon = authContext.getDrawable(desc.iconId);
             } catch (PackageManager.NameNotFoundException e) {
                 // Nothing we can do much here, just log
                 if (Log.isLoggable(TAG, Log.WARN)) {
diff --git a/core/java/android/accounts/ChooseAccountTypeActivity.java b/core/java/android/accounts/ChooseAccountTypeActivity.java
index acc8549..a3222d8 100644
--- a/core/java/android/accounts/ChooseAccountTypeActivity.java
+++ b/core/java/android/accounts/ChooseAccountTypeActivity.java
@@ -129,7 +129,7 @@
             Drawable icon = null;
             try {
                 Context authContext = createPackageContext(desc.packageName, 0);
-                icon = authContext.getResources().getDrawable(desc.iconId);
+                icon = authContext.getDrawable(desc.iconId);
                 final CharSequence sequence = authContext.getResources().getText(desc.labelId);
                 if (sequence != null) {
                     name = sequence.toString();
diff --git a/core/java/android/accounts/GrantCredentialsPermissionActivity.java b/core/java/android/accounts/GrantCredentialsPermissionActivity.java
index 8b01c6a..12b2b9c 100644
--- a/core/java/android/accounts/GrantCredentialsPermissionActivity.java
+++ b/core/java/android/accounts/GrantCredentialsPermissionActivity.java
@@ -16,7 +16,6 @@
 package android.accounts;
 
 import android.app.Activity;
-import android.content.pm.RegisteredServicesCache;
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.widget.TextView;
@@ -30,7 +29,6 @@
 import com.android.internal.R;
 
 import java.io.IOException;
-import java.net.Authenticator;
 
 /**
  * @hide
diff --git a/core/java/android/alsa/AlsaCardsParser.java b/core/java/android/alsa/AlsaCardsParser.java
new file mode 100644
index 0000000..f9af979
--- /dev/null
+++ b/core/java/android/alsa/AlsaCardsParser.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2014 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.android.alsascan;
+
+import android.util.Slog;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Vector;
+
+/**
+ * @hide Retrieves information from an ALSA "cards" file.
+ */
+public class AlsaCardsParser {
+    private static final String TAG = "AlsaCardsParser";
+
+    private static LineTokenizer tokenizer_ = new LineTokenizer(" :[]");
+
+    public class AlsaCardRecord {
+        public int mCardNum = -1;
+        public String mField1 = "";
+        public String mCardName = "";
+        public String mCardDescription = "";
+
+        public AlsaCardRecord() {}
+
+        public boolean parse(String line, int lineIndex) {
+            int tokenIndex = 0;
+            int delimIndex = 0;
+            if (lineIndex == 0) {
+                // line # (skip)
+                tokenIndex = tokenizer_.nextToken(line, tokenIndex);
+                delimIndex = tokenizer_.nextDelimiter(line, tokenIndex);
+
+                // mField1
+                tokenIndex = tokenizer_.nextToken(line, delimIndex);
+                delimIndex = tokenizer_.nextDelimiter(line, tokenIndex);
+                mField1 = line.substring(tokenIndex, delimIndex);
+
+                // mCardName
+                tokenIndex = tokenizer_.nextToken(line, delimIndex);
+                // delimIndex = tokenizer_.nextDelimiter(line, tokenIndex);
+                mCardName = line.substring(tokenIndex);
+                // done
+              } else if (lineIndex == 1) {
+                  tokenIndex = tokenizer_.nextToken(line, 0);
+                  if (tokenIndex != -1) {
+                      mCardDescription = line.substring(tokenIndex);
+                  }
+            }
+
+            return true;
+        }
+
+        public String textFormat() {
+          return mCardName + " : " + mCardDescription;
+        }
+    }
+
+    private Vector<AlsaCardRecord> cardRecords_ = new Vector<AlsaCardRecord>();
+
+    public void scan() {
+          cardRecords_.clear();
+          final String cardsFilePath = "/proc/asound/cards";
+          File cardsFile = new File(cardsFilePath);
+          try {
+              FileReader reader = new FileReader(cardsFile);
+              BufferedReader bufferedReader = new BufferedReader(reader);
+              String line = "";
+              while ((line = bufferedReader.readLine()) != null) {
+                  AlsaCardRecord cardRecord = new AlsaCardRecord();
+                  cardRecord.parse(line, 0);
+                  cardRecord.parse(line = bufferedReader.readLine(), 1);
+                  cardRecords_.add(cardRecord);
+              }
+              reader.close();
+          } catch (FileNotFoundException e) {
+              e.printStackTrace();
+          } catch (IOException e) {
+              e.printStackTrace();
+          }
+      }
+
+      public AlsaCardRecord getCardRecordAt(int index) {
+          return cardRecords_.get(index);
+      }
+
+      public int getNumCardRecords() {
+          return cardRecords_.size();
+      }
+
+    public void Log() {
+      int numCardRecs = getNumCardRecords();
+      for (int index = 0; index < numCardRecs; ++index) {
+          Slog.w(TAG, "usb:" + getCardRecordAt(index).textFormat());
+      }
+    }
+
+    public AlsaCardsParser() {}
+}
diff --git a/core/java/android/alsa/AlsaDevicesParser.java b/core/java/android/alsa/AlsaDevicesParser.java
new file mode 100644
index 0000000..094c8a2
--- /dev/null
+++ b/core/java/android/alsa/AlsaDevicesParser.java
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2014 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.android.alsascan;
+
+import android.util.Slog;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.util.Vector;
+
+/**
+ * @hide
+ * Retrieves information from an ALSA "devices" file.
+ */
+public class AlsaDevicesParser {
+    private static final String TAG = "AlsaDevicesParser";
+
+    private static final int kIndex_CardDeviceField = 5;
+    private static final int kStartIndex_CardNum = 6;
+    private static final int kEndIndex_CardNum = 8; // one past
+    private static final int kStartIndex_DeviceNum = 9;
+    private static final int kEndIndex_DeviceNum = 11; // one past
+    private static final int kStartIndex_Type = 14;
+
+    private static LineTokenizer mTokenizer = new LineTokenizer(" :[]-");
+
+    private boolean mHasCaptureDevices = false;
+    private boolean mHasPlaybackDevices = false;
+    private boolean mHasMIDIDevices = false;
+
+    public class AlsaDeviceRecord {
+        public static final int kDeviceType_Unknown = -1;
+        public static final int kDeviceType_Audio = 0;
+        public static final int kDeviceType_Control = 1;
+        public static final int kDeviceType_MIDI = 2;
+
+        public static final int kDeviceDir_Unknown = -1;
+        public static final int kDeviceDir_Capture = 0;
+        public static final int kDeviceDir_Playback = 1;
+
+        int mCardNum = -1;
+        int mDeviceNum = -1;
+        int mDeviceType = kDeviceType_Unknown;
+        int mDeviceDir = kDeviceDir_Unknown;
+
+        public AlsaDeviceRecord() {
+        }
+
+        public boolean parse(String line) {
+            // "0123456789012345678901234567890"
+            // "  2: [ 0-31]: digital audio playback"
+            // "  3: [ 0-30]: digital audio capture"
+            // " 35: [ 1]   : control"
+            // " 36: [ 2- 0]: raw midi"
+
+            final int kToken_LineNum = 0;
+            final int kToken_CardNum = 1;
+            final int kToken_DeviceNum = 2;
+            final int kToken_Type0 = 3; // "digital", "control", "raw"
+            final int kToken_Type1 = 4; // "audio", "midi"
+            final int kToken_Type2 = 5; // "capture", "playback"
+
+            int tokenOffset = 0;
+            int delimOffset = 0;
+            int tokenIndex = kToken_LineNum;
+            while (true) {
+                tokenOffset = mTokenizer.nextToken(line, delimOffset);
+                if (tokenOffset == LineTokenizer.kTokenNotFound) {
+                    break; // bail
+                }
+                delimOffset = mTokenizer.nextDelimiter(line, tokenOffset);
+                if (delimOffset == LineTokenizer.kTokenNotFound) {
+                    delimOffset = line.length();
+                }
+                String token = line.substring(tokenOffset, delimOffset);
+
+                switch (tokenIndex) {
+                case kToken_LineNum:
+                    // ignore
+                    break;
+
+                case kToken_CardNum:
+                    mCardNum = Integer.parseInt(token);
+                    if (line.charAt(delimOffset) != '-') {
+                        tokenIndex++; // no device # in the token stream
+                    }
+                    break;
+
+                case kToken_DeviceNum:
+                    mDeviceNum = Integer.parseInt(token);
+                    break;
+
+                case kToken_Type0:
+                    if (token.equals("digital")) {
+                        // NOP
+                    } else if (token.equals("control")) {
+                        mDeviceType = kDeviceType_Control;
+                    } else if (token.equals("raw")) {
+                        // NOP
+                    }
+                    break;
+
+                case kToken_Type1:
+                    if (token.equals("audio")) {
+                        mDeviceType = kDeviceType_Audio;
+                    } else if (token.equals("midi")) {
+                        mDeviceType = kDeviceType_MIDI;
+                        mHasMIDIDevices = true;
+                    }
+                    break;
+
+                case kToken_Type2:
+                    if (token.equals("capture")) {
+                        mDeviceDir = kDeviceDir_Capture;
+                        mHasCaptureDevices = true;
+                    } else if (token.equals("playback")) {
+                        mDeviceDir = kDeviceDir_Playback;
+                        mHasPlaybackDevices = true;
+                    }
+                    break;
+                } // switch (tokenIndex)
+
+                tokenIndex++;
+            } // while (true)
+
+            return true;
+        } // parse()
+
+        public String textFormat() {
+            StringBuilder sb = new StringBuilder();
+            sb.append("[" + mCardNum + ":" + mDeviceNum + "]");
+
+            switch (mDeviceType) {
+            case kDeviceType_Unknown:
+                sb.append(" N/A");
+                break;
+            case kDeviceType_Audio:
+                sb.append(" Audio");
+                break;
+            case kDeviceType_Control:
+                sb.append(" Control");
+                break;
+            case kDeviceType_MIDI:
+                sb.append(" MIDI");
+                break;
+            }
+
+            switch (mDeviceDir) {
+            case kDeviceDir_Unknown:
+                sb.append(" N/A");
+                break;
+            case kDeviceDir_Capture:
+                sb.append(" Capture");
+                break;
+            case kDeviceDir_Playback:
+                sb.append(" Playback");
+                break;
+            }
+
+            return sb.toString();
+        }
+    }
+
+    private Vector<AlsaDeviceRecord>
+            deviceRecords_ = new Vector<AlsaDeviceRecord>();
+
+    private boolean isLineDeviceRecord(String line) {
+        return line.charAt(kIndex_CardDeviceField) == '[';
+    }
+
+    public AlsaDevicesParser() {
+    }
+
+    public int getNumDeviceRecords() {
+        return deviceRecords_.size();
+    }
+
+    public AlsaDeviceRecord getDeviceRecordAt(int index) {
+        return deviceRecords_.get(index);
+    }
+
+    public void Log() {
+        int numDevRecs = getNumDeviceRecords();
+        for (int index = 0; index < numDevRecs; ++index) {
+            Slog.w(TAG, "usb:" + getDeviceRecordAt(index).textFormat());
+        }
+    }
+
+    public boolean hasPlaybackDevices() {
+        return mHasPlaybackDevices;
+    }
+
+    public boolean hasPlaybackDevices(int card) {
+        for (int index = 0; index < deviceRecords_.size(); index++) {
+            AlsaDeviceRecord deviceRecord = deviceRecords_.get(index);
+            if (deviceRecord.mCardNum == card &&
+                deviceRecord.mDeviceType == AlsaDeviceRecord.kDeviceType_Audio &&
+                deviceRecord.mDeviceDir == AlsaDeviceRecord.kDeviceDir_Playback) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean hasCaptureDevices() {
+        return mHasCaptureDevices;
+    }
+
+    public boolean hasCaptureDevices(int card) {
+        for (int index = 0; index < deviceRecords_.size(); index++) {
+            AlsaDeviceRecord deviceRecord = deviceRecords_.get(index);
+            if (deviceRecord.mCardNum == card &&
+                deviceRecord.mDeviceType == AlsaDeviceRecord.kDeviceType_Audio &&
+                deviceRecord.mDeviceDir == AlsaDeviceRecord.kDeviceDir_Capture) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean hasMIDIDevices() {
+        return mHasMIDIDevices;
+    }
+
+    public boolean hasMIDIDevices(int card) {
+        for (int index = 0; index < deviceRecords_.size(); index++) {
+            AlsaDeviceRecord deviceRecord = deviceRecords_.get(index);
+            if (deviceRecord.mCardNum == card &&
+                deviceRecord.mDeviceType == AlsaDeviceRecord.kDeviceType_MIDI) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void scan() {
+        deviceRecords_.clear();
+
+        final String devicesFilePath = "/proc/asound/devices";
+        File devicesFile = new File(devicesFilePath);
+        try {
+            FileReader reader = new FileReader(devicesFile);
+            BufferedReader bufferedReader = new BufferedReader(reader);
+            String line = "";
+            while ((line = bufferedReader.readLine()) != null) {
+                if (isLineDeviceRecord(line)) {
+                    AlsaDeviceRecord deviceRecord = new AlsaDeviceRecord();
+                    deviceRecord.parse(line);
+                    deviceRecords_.add(deviceRecord);
+                }
+            }
+            reader.close();
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+} // class AlsaDevicesParser
+
diff --git a/core/java/android/alsa/LineTokenizer.java b/core/java/android/alsa/LineTokenizer.java
new file mode 100644
index 0000000..c138fc5
--- /dev/null
+++ b/core/java/android/alsa/LineTokenizer.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2014 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.android.alsascan;
+
+/**
+ * @hide
+ * Breaks lines in an ALSA "cards" or "devices" file into tokens.
+ * TODO(pmclean) Look into replacing this with String.split().
+ */
+public class LineTokenizer {
+    public static final int kTokenNotFound = -1;
+
+    private String mDelimiters = "";
+
+    public LineTokenizer(String delimiters) {
+        mDelimiters = delimiters;
+    }
+
+    int nextToken(String line, int startIndex) {
+        int len = line.length();
+        int offset = startIndex;
+        for (; offset < len; offset++) {
+            if (mDelimiters.indexOf(line.charAt(offset)) == -1) {
+                // past a delimiter
+                break;
+            }
+      }
+
+      return offset < len ? offset : kTokenNotFound;
+    }
+
+    int nextDelimiter(String line, int startIndex) {
+        int len = line.length();
+        int offset = startIndex;
+        for (; offset < len; offset++) {
+            if (mDelimiters.indexOf(line.charAt(offset)) != -1) {
+                // past a delimiter
+                break;
+            }
+        }
+
+      return offset < len ? offset : kTokenNotFound;
+    }
+}
diff --git a/core/java/android/animation/AnimatorInflater.java b/core/java/android/animation/AnimatorInflater.java
index d753e32..20236aa 100644
--- a/core/java/android/animation/AnimatorInflater.java
+++ b/core/java/android/animation/AnimatorInflater.java
@@ -215,7 +215,7 @@
                 (toType <= TypedValue.TYPE_LAST_COLOR_INT))) {
             // special case for colors: ignore valueType and get ints
             getFloats = false;
-            anim.setEvaluator(new ArgbEvaluator());
+            evaluator = ArgbEvaluator.getInstance();
         }
 
         if (getFloats) {
diff --git a/core/java/android/animation/ArgbEvaluator.java b/core/java/android/animation/ArgbEvaluator.java
index 717a3d9..ed07195 100644
--- a/core/java/android/animation/ArgbEvaluator.java
+++ b/core/java/android/animation/ArgbEvaluator.java
@@ -21,6 +21,19 @@
  * values that represent ARGB colors.
  */
 public class ArgbEvaluator implements TypeEvaluator {
+    private static final ArgbEvaluator sInstance = new ArgbEvaluator();
+
+    /**
+     * Returns an instance of <code>ArgbEvaluator</code> that may be used in
+     * {@link ValueAnimator#setEvaluator(TypeEvaluator)}. The same instance may
+     * be used in multiple <code>Animator</code>s because it holds no state.
+     * @return An instance of <code>ArgbEvalutor</code>.
+     *
+     * @hide
+     */
+    public static ArgbEvaluator getInstance() {
+        return sInstance;
+    }
 
     /**
      * This function returns the calculated in-between value for a color
diff --git a/core/java/android/animation/FloatArrayEvaluator.java b/core/java/android/animation/FloatArrayEvaluator.java
new file mode 100644
index 0000000..9ae1197
--- /dev/null
+++ b/core/java/android/animation/FloatArrayEvaluator.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2013 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 android.animation;
+
+/**
+ * This evaluator can be used to perform type interpolation between <code>float[]</code> values.
+ * Each index into the array is treated as a separate value to interpolate. For example,
+ * evaluating <code>{100, 200}</code> and <code>{300, 400}</code> will interpolate the value at
+ * the first index between 100 and 300 and the value at the second index value between 200 and 400.
+ */
+public class FloatArrayEvaluator implements TypeEvaluator<float[]> {
+
+    private float[] mArray;
+
+    /**
+     * Create a FloatArrayEvaluator that does not reuse the animated value. Care must be taken
+     * when using this option because on every evaluation a new <code>float[]</code> will be
+     * allocated.
+     *
+     * @see #FloatArrayEvaluator(float[])
+     */
+    public FloatArrayEvaluator() {
+    }
+
+    /**
+     * Create a FloatArrayEvaluator that reuses <code>reuseArray</code> for every evaluate() call.
+     * Caution must be taken to ensure that the value returned from
+     * {@link android.animation.ValueAnimator#getAnimatedValue()} is not cached, modified, or
+     * used across threads. The value will be modified on each <code>evaluate()</code> call.
+     *
+     * @param reuseArray The array to modify and return from <code>evaluate</code>.
+     */
+    public FloatArrayEvaluator(float[] reuseArray) {
+        mArray = reuseArray;
+    }
+
+    /**
+     * Interpolates the value at each index by the fraction. If
+     * {@link #FloatArrayEvaluator(float[])} was used to construct this object,
+     * <code>reuseArray</code> will be returned, otherwise a new <code>float[]</code>
+     * will be returned.
+     *
+     * @param fraction   The fraction from the starting to the ending values
+     * @param startValue The start value.
+     * @param endValue   The end value.
+     * @return A <code>float[]</code> where each element is an interpolation between
+     *         the same index in startValue and endValue.
+     */
+    @Override
+    public float[] evaluate(float fraction, float[] startValue, float[] endValue) {
+        float[] array = mArray;
+        if (array == null) {
+            array = new float[startValue.length];
+        }
+
+        for (int i = 0; i < array.length; i++) {
+            float start = startValue[i];
+            float end = endValue[i];
+            array[i] = start + (fraction * (end - start));
+        }
+        return array;
+    }
+}
diff --git a/core/java/android/animation/IntArrayEvaluator.java b/core/java/android/animation/IntArrayEvaluator.java
new file mode 100644
index 0000000..d7f10f3
--- /dev/null
+++ b/core/java/android/animation/IntArrayEvaluator.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2013 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 android.animation;
+
+/**
+ * This evaluator can be used to perform type interpolation between <code>int[]</code> values.
+ * Each index into the array is treated as a separate value to interpolate. For example,
+ * evaluating <code>{100, 200}</code> and <code>{300, 400}</code> will interpolate the value at
+ * the first index between 100 and 300 and the value at the second index value between 200 and 400.
+ */
+public class IntArrayEvaluator implements TypeEvaluator<int[]> {
+
+    private int[] mArray;
+
+    /**
+     * Create an IntArrayEvaluator that does not reuse the animated value. Care must be taken
+     * when using this option because on every evaluation a new <code>int[]</code> will be
+     * allocated.
+     *
+     * @see #IntArrayEvaluator(int[])
+     */
+    public IntArrayEvaluator() {
+    }
+
+    /**
+     * Create an IntArrayEvaluator that reuses <code>reuseArray</code> for every evaluate() call.
+     * Caution must be taken to ensure that the value returned from
+     * {@link android.animation.ValueAnimator#getAnimatedValue()} is not cached, modified, or
+     * used across threads. The value will be modified on each <code>evaluate()</code> call.
+     *
+     * @param reuseArray The array to modify and return from <code>evaluate</code>.
+     */
+    public IntArrayEvaluator(int[] reuseArray) {
+        mArray = reuseArray;
+    }
+
+    /**
+     * Interpolates the value at each index by the fraction. If {@link #IntArrayEvaluator(int[])}
+     * was used to construct this object, <code>reuseArray</code> will be returned, otherwise
+     * a new <code>int[]</code> will be returned.
+     *
+     * @param fraction   The fraction from the starting to the ending values
+     * @param startValue The start value.
+     * @param endValue   The end value.
+     * @return An <code>int[]</code> where each element is an interpolation between
+     *         the same index in startValue and endValue.
+     */
+    @Override
+    public int[] evaluate(float fraction, int[] startValue, int[] endValue) {
+        int[] array = mArray;
+        if (array == null) {
+            array = new int[startValue.length];
+        }
+        for (int i = 0; i < array.length; i++) {
+            int start = startValue[i];
+            int end = endValue[i];
+            array[i] = (int) (start + (fraction * (end - start)));
+        }
+        return array;
+    }
+}
diff --git a/core/java/android/animation/ObjectAnimator.java b/core/java/android/animation/ObjectAnimator.java
index 9c88ccf..c0ce795 100644
--- a/core/java/android/animation/ObjectAnimator.java
+++ b/core/java/android/animation/ObjectAnimator.java
@@ -16,6 +16,8 @@
 
 package android.animation;
 
+import android.graphics.Path;
+import android.graphics.PointF;
 import android.util.Log;
 import android.util.Property;
 
@@ -191,7 +193,7 @@
 
     /**
      * Constructs and returns an ObjectAnimator that animates between int values. A single
-     * value implies that that value is the one being animated to. Two values imply a starting
+     * value implies that that value is the one being animated to. Two values imply starting
      * and ending values. More than two values imply a starting value, values to animate through
      * along the way, and an ending value (these values will be distributed evenly across
      * the duration of the animation).
@@ -210,8 +212,33 @@
     }
 
     /**
+     * Constructs and returns an ObjectAnimator that animates coordinates along a <code>Path</code>
+     * using two properties. A <code>Path</code></> animation moves in two dimensions, animating
+     * coordinates <code>(x, y)</code> together to follow the line. In this variation, the
+     * coordinates are integers that are set to separate properties designated by
+     * <code>xPropertyName</code> and <code>yPropertyName</code>.
+     *
+     * @param target The object whose properties are to be animated. This object should
+     *               have public methods on it called <code>setNameX()</code> and
+     *               <code>setNameY</code>, where <code>nameX</code> and <code>nameY</code>
+     *               are the value of <code>xPropertyName</code> and <code>yPropertyName</code>
+     *               parameters, respectively.
+     * @param xPropertyName The name of the property for the x coordinate being animated.
+     * @param yPropertyName The name of the property for the y coordinate being animated.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static ObjectAnimator ofInt(Object target, String xPropertyName, String yPropertyName,
+            Path path) {
+        Keyframe[][] keyframes = PropertyValuesHolder.createKeyframes(path, true);
+        PropertyValuesHolder x = PropertyValuesHolder.ofKeyframe(xPropertyName, keyframes[0]);
+        PropertyValuesHolder y = PropertyValuesHolder.ofKeyframe(yPropertyName, keyframes[1]);
+        return ofPropertyValuesHolder(target, x, y);
+    }
+
+    /**
      * Constructs and returns an ObjectAnimator that animates between int values. A single
-     * value implies that that value is the one being animated to. Two values imply a starting
+     * value implies that that value is the one being animated to. Two values imply starting
      * and ending values. More than two values imply a starting value, values to animate through
      * along the way, and an ending value (these values will be distributed evenly across
      * the duration of the animation).
@@ -228,8 +255,135 @@
     }
 
     /**
+     * Constructs and returns an ObjectAnimator that animates coordinates along a <code>Path</code>
+     * using two properties.  A <code>Path</code></> animation moves in two dimensions, animating
+     * coordinates <code>(x, y)</code> together to follow the line. In this variation, the
+     * coordinates are integers that are set to separate properties, <code>xProperty</code> and
+     * <code>yProperty</code>.
+     *
+     * @param target The object whose properties are to be animated.
+     * @param xProperty The property for the x coordinate being animated.
+     * @param yProperty The property for the y coordinate being animated.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static <T> ObjectAnimator ofInt(T target, Property<T, Integer> xProperty,
+            Property<T, Integer> yProperty, Path path) {
+        Keyframe[][] keyframes = PropertyValuesHolder.createKeyframes(path, true);
+        PropertyValuesHolder x = PropertyValuesHolder.ofKeyframe(xProperty, keyframes[0]);
+        PropertyValuesHolder y = PropertyValuesHolder.ofKeyframe(yProperty, keyframes[1]);
+        return ofPropertyValuesHolder(target, x, y);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates over int values for a multiple
+     * parameters setter. Only public methods that take only int parameters are supported.
+     * Each <code>int[]</code> contains a complete set of parameters to the setter method.
+     * At least two <code>int[]</code> values must be provided, a start and end. More than two
+     * values imply a starting value, values to animate through along the way, and an ending
+     * value (these values will be distributed evenly across the duration of the animation).
+     *
+     * @param target The object whose property is to be animated. This object may
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter. <code>propertyName</code> may also
+     * be the case-sensitive complete name of the public setter method.
+     * @param propertyName The name of the property being animated or the name of the setter method.
+     * @param values A set of values that the animation will animate between over time.
+     * @return An ObjectAnimator object that is set up to animate between the given values.
+     */
+    public static ObjectAnimator ofMultiInt(Object target, String propertyName, int[][] values) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofMultiInt(propertyName, values);
+        return ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates the target using a multi-int setter
+     * along the given <code>Path</code>. A <code>Path</code></> animation moves in two dimensions,
+     * animating coordinates <code>(x, y)</code> together to follow the line. In this variation, the
+     * coordinates are integer x and y coordinates used in the first and second parameter of the
+     * setter, respectively.
+     *
+     * @param target The object whose property is to be animated. This object may
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter. <code>propertyName</code> may also
+     * be the case-sensitive complete name of the public setter method.
+     * @param propertyName The name of the property being animated or the name of the setter method.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static ObjectAnimator ofMultiInt(Object target, String propertyName, Path path) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofMultiInt(propertyName, path);
+        return ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates over values for a multiple int
+     * parameters setter. Only public methods that take only int parameters are supported.
+     * <p>At least two values must be provided, a start and end. More than two
+     * values imply a starting value, values to animate through along the way, and an ending
+     * value (these values will be distributed evenly across the duration of the animation).</p>
+     *
+     * @param target The object whose property is to be animated. This object may
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter. <code>propertyName</code> may also
+     * be the case-sensitive complete name of the public setter method.
+     * @param propertyName The name of the property being animated or the name of the setter method.
+     * @param converter Converts T objects into int parameters for the multi-value setter.
+     * @param evaluator A TypeEvaluator that will be called on each animation frame to
+     * provide the necessary interpolation between the Object values to derive the animated
+     * value.
+     * @param values A set of values that the animation will animate between over time.
+     * @return An ObjectAnimator object that is set up to animate between the given values.
+     */
+    public static <T> ObjectAnimator ofMultiInt(Object target, String propertyName,
+            TypeConverter<T, int[]> converter, TypeEvaluator<T> evaluator, T... values) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofMultiInt(propertyName, converter,
+                evaluator, values);
+        return ObjectAnimator.ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates between color values. A single
+     * value implies that that value is the one being animated to. Two values imply starting
+     * and ending values. More than two values imply a starting value, values to animate through
+     * along the way, and an ending value (these values will be distributed evenly across
+     * the duration of the animation).
+     *
+     * @param target The object whose property is to be animated. This object should
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter.
+     * @param propertyName The name of the property being animated.
+     * @param values A set of values that the animation will animate between over time.
+     * @return An ObjectAnimator object that is set up to animate between the given values.
+     */
+    public static ObjectAnimator ofArgb(Object target, String propertyName, int... values) {
+        ObjectAnimator animator = ofInt(target, propertyName, values);
+        animator.setEvaluator(ArgbEvaluator.getInstance());
+        return animator;
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates between color values. A single
+     * value implies that that value is the one being animated to. Two values imply starting
+     * and ending values. More than two values imply a starting value, values to animate through
+     * along the way, and an ending value (these values will be distributed evenly across
+     * the duration of the animation).
+     *
+     * @param target The object whose property is to be animated.
+     * @param property The property being animated.
+     * @param values A set of values that the animation will animate between over time.
+     * @return An ObjectAnimator object that is set up to animate between the given values.
+     */
+    public static <T> ObjectAnimator ofArgb(T target, Property<T, Integer> property,
+            int... values) {
+        ObjectAnimator animator = ofInt(target, property, values);
+        animator.setEvaluator(ArgbEvaluator.getInstance());
+        return animator;
+    }
+
+    /**
      * Constructs and returns an ObjectAnimator that animates between float values. A single
-     * value implies that that value is the one being animated to. Two values imply a starting
+     * value implies that that value is the one being animated to. Two values imply starting
      * and ending values. More than two values imply a starting value, values to animate through
      * along the way, and an ending value (these values will be distributed evenly across
      * the duration of the animation).
@@ -248,8 +402,33 @@
     }
 
     /**
+     * Constructs and returns an ObjectAnimator that animates coordinates along a <code>Path</code>
+     * using two properties. A <code>Path</code></> animation moves in two dimensions, animating
+     * coordinates <code>(x, y)</code> together to follow the line. In this variation, the
+     * coordinates are floats that are set to separate properties designated by
+     * <code>xPropertyName</code> and <code>yPropertyName</code>.
+     *
+     * @param target The object whose properties are to be animated. This object should
+     *               have public methods on it called <code>setNameX()</code> and
+     *               <code>setNameY</code>, where <code>nameX</code> and <code>nameY</code>
+     *               are the value of the <code>xPropertyName</code> and <code>yPropertyName</code>
+     *               parameters, respectively.
+     * @param xPropertyName The name of the property for the x coordinate being animated.
+     * @param yPropertyName The name of the property for the y coordinate being animated.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static ObjectAnimator ofFloat(Object target, String xPropertyName, String yPropertyName,
+            Path path) {
+        Keyframe[][] keyframes = PropertyValuesHolder.createKeyframes(path, false);
+        PropertyValuesHolder x = PropertyValuesHolder.ofKeyframe(xPropertyName, keyframes[0]);
+        PropertyValuesHolder y = PropertyValuesHolder.ofKeyframe(yPropertyName, keyframes[1]);
+        return ofPropertyValuesHolder(target, x, y);
+    }
+
+    /**
      * Constructs and returns an ObjectAnimator that animates between float values. A single
-     * value implies that that value is the one being animated to. Two values imply a starting
+     * value implies that that value is the one being animated to. Two values imply starting
      * and ending values. More than two values imply a starting value, values to animate through
      * along the way, and an ending value (these values will be distributed evenly across
      * the duration of the animation).
@@ -267,8 +446,94 @@
     }
 
     /**
+     * Constructs and returns an ObjectAnimator that animates coordinates along a <code>Path</code>
+     * using two properties. A <code>Path</code></> animation moves in two dimensions, animating
+     * coordinates <code>(x, y)</code> together to follow the line. In this variation, the
+     * coordinates are floats that are set to separate properties, <code>xProperty</code> and
+     * <code>yProperty</code>.
+     *
+     * @param target The object whose properties are to be animated.
+     * @param xProperty The property for the x coordinate being animated.
+     * @param yProperty The property for the y coordinate being animated.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static <T> ObjectAnimator ofFloat(T target, Property<T, Float> xProperty,
+            Property<T, Float> yProperty, Path path) {
+        return ofFloat(target, xProperty.getName(), yProperty.getName(), path);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates over float values for a multiple
+     * parameters setter. Only public methods that take only float parameters are supported.
+     * Each <code>float[]</code> contains a complete set of parameters to the setter method.
+     * At least two <code>float[]</code> values must be provided, a start and end. More than two
+     * values imply a starting value, values to animate through along the way, and an ending
+     * value (these values will be distributed evenly across the duration of the animation).
+     *
+     * @param target The object whose property is to be animated. This object may
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter. <code>propertyName</code> may also
+     * be the case-sensitive complete name of the public setter method.
+     * @param propertyName The name of the property being animated or the name of the setter method.
+     * @param values A set of values that the animation will animate between over time.
+     * @return An ObjectAnimator object that is set up to animate between the given values.
+     */
+    public static ObjectAnimator ofMultiFloat(Object target, String propertyName,
+            float[][] values) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofMultiFloat(propertyName, values);
+        return ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates the target using a multi-float setter
+     * along the given <code>Path</code>. A <code>Path</code></> animation moves in two dimensions,
+     * animating coordinates <code>(x, y)</code> together to follow the line. In this variation, the
+     * coordinates are float x and y coordinates used in the first and second parameter of the
+     * setter, respectively.
+     *
+     * @param target The object whose property is to be animated. This object may
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter. <code>propertyName</code> may also
+     * be the case-sensitive complete name of the public setter method.
+     * @param propertyName The name of the property being animated or the name of the setter method.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static ObjectAnimator ofMultiFloat(Object target, String propertyName, Path path) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofMultiFloat(propertyName, path);
+        return ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates over values for a multiple float
+     * parameters setter. Only public methods that take only float parameters are supported.
+     * <p>At least two values must be provided, a start and end. More than two
+     * values imply a starting value, values to animate through along the way, and an ending
+     * value (these values will be distributed evenly across the duration of the animation).</p>
+     *
+     * @param target The object whose property is to be animated. This object may
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter. <code>propertyName</code> may also
+     * be the case-sensitive complete name of the public setter method.
+     * @param propertyName The name of the property being animated or the name of the setter method.
+     * @param converter Converts T objects into float parameters for the multi-value setter.
+     * @param evaluator A TypeEvaluator that will be called on each animation frame to
+     * provide the necessary interpolation between the Object values to derive the animated
+     * value.
+     * @param values A set of values that the animation will animate between over time.
+     * @return An ObjectAnimator object that is set up to animate between the given values.
+     */
+    public static <T> ObjectAnimator ofMultiFloat(Object target, String propertyName,
+            TypeConverter<T, float[]> converter, TypeEvaluator<T> evaluator, T... values) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofMultiFloat(propertyName, converter,
+                evaluator, values);
+        return ObjectAnimator.ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
      * Constructs and returns an ObjectAnimator that animates between Object values. A single
-     * value implies that that value is the one being animated to. Two values imply a starting
+     * value implies that that value is the one being animated to. Two values imply starting
      * and ending values. More than two values imply a starting value, values to animate through
      * along the way, and an ending value (these values will be distributed evenly across
      * the duration of the animation).
@@ -292,8 +557,32 @@
     }
 
     /**
+     * Constructs and returns an ObjectAnimator that animates a property along a <code>Path</code>.
+     * A <code>Path</code></> animation moves in two dimensions, animating coordinates
+     * <code>(x, y)</code> together to follow the line. This variant animates the coordinates
+     * in a <code>PointF</code> to follow the <code>Path</code>. If the <code>Property</code>
+     * associated with <code>propertyName</code> uses a type other than <code>PointF</code>,
+     * <code>converter</code> can be used to change from <code>PointF</code> to the type
+     * associated with the <code>Property</code>.
+     *
+     * @param target The object whose property is to be animated. This object should
+     * have a public method on it called <code>setName()</code>, where <code>name</code> is
+     * the value of the <code>propertyName</code> parameter.
+     * @param propertyName The name of the property being animated.
+     * @param converter Converts a PointF to the type associated with the setter. May be
+     *                  null if conversion is unnecessary.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static ObjectAnimator ofObject(Object target, String propertyName,
+            TypeConverter<PointF, ?> converter, Path path) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofObject(propertyName, converter, path);
+        return ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
      * Constructs and returns an ObjectAnimator that animates between Object values. A single
-     * value implies that that value is the one being animated to. Two values imply a starting
+     * value implies that that value is the one being animated to. Two values imply starting
      * and ending values. More than two values imply a starting value, values to animate through
      * along the way, and an ending value (these values will be distributed evenly across
      * the duration of the animation).
@@ -315,6 +604,53 @@
     }
 
     /**
+     * Constructs and returns an ObjectAnimator that animates between Object values. A single
+     * value implies that that value is the one being animated to. Two values imply starting
+     * and ending values. More than two values imply a starting value, values to animate through
+     * along the way, and an ending value (these values will be distributed evenly across
+     * the duration of the animation). This variant supplies a <code>TypeConverter</code> to
+     * convert from the animated values to the type of the property. If only one value is
+     * supplied, the <code>TypeConverter</code> must implement
+     * {@link TypeConverter#convertBack(Object)} to retrieve the current value.
+     *
+     * @param target The object whose property is to be animated.
+     * @param property The property being animated.
+     * @param converter Converts the animated object to the Property type.
+     * @param evaluator A TypeEvaluator that will be called on each animation frame to
+     * provide the necessary interpolation between the Object values to derive the animated
+     * value.
+     * @param values A set of values that the animation will animate between over time.
+     * @return An ObjectAnimator object that is set up to animate between the given values.
+     */
+    public static <T, V, P> ObjectAnimator ofObject(T target, Property<T, P> property,
+            TypeConverter<V, P> converter, TypeEvaluator<V> evaluator, V... values) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofObject(property, converter, evaluator,
+                values);
+        return ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
+     * Constructs and returns an ObjectAnimator that animates a property along a <code>Path</code>.
+     * A <code>Path</code></> animation moves in two dimensions, animating coordinates
+     * <code>(x, y)</code> together to follow the line. This variant animates the coordinates
+     * in a <code>PointF</code> to follow the <code>Path</code>. If <code>property</code>
+     * uses a type other than <code>PointF</code>, <code>converter</code> can be used to change
+     * from <code>PointF</code> to the type associated with the <code>Property</code>.
+     *
+     * @param target The object whose property is to be animated.
+     * @param property The property being animated. Should not be null.
+     * @param converter Converts a PointF to the type associated with the setter. May be
+     *                  null if conversion is unnecessary.
+     * @param path The <code>Path</code> to animate values along.
+     * @return An ObjectAnimator object that is set up to animate along <code>path</code>.
+     */
+    public static <T, V> ObjectAnimator ofObject(T target, Property<T, V> property,
+            TypeConverter<PointF, V> converter, Path path) {
+        PropertyValuesHolder pvh = PropertyValuesHolder.ofObject(property, converter, path);
+        return ofPropertyValuesHolder(target, pvh);
+    }
+
+    /**
      * Constructs and returns an ObjectAnimator that animates between the sets of values specified
      * in <code>PropertyValueHolder</code> objects. This variant should be used when animating
      * several properties at once with the same ObjectAnimator, since PropertyValuesHolder allows
diff --git a/core/java/android/animation/PointFEvaluator.java b/core/java/android/animation/PointFEvaluator.java
new file mode 100644
index 0000000..91d501f
--- /dev/null
+++ b/core/java/android/animation/PointFEvaluator.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2013 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 android.animation;
+
+import android.graphics.PointF;
+
+/**
+ * This evaluator can be used to perform type interpolation between <code>PointF</code> values.
+ */
+public class PointFEvaluator implements TypeEvaluator<PointF> {
+
+    /**
+     * When null, a new PointF is returned on every evaluate call. When non-null,
+     * mPoint will be modified and returned on every evaluate.
+     */
+    private PointF mPoint;
+
+    /**
+     * Construct a PointFEvaluator that returns a new PointF on every evaluate call.
+     * To avoid creating an object for each evaluate call,
+     * {@link PointFEvaluator#PointFEvaluator(android.graphics.PointF)} should be used
+     * whenever possible.
+     */
+    public PointFEvaluator() {
+    }
+
+    /**
+     * Constructs a PointFEvaluator that modifies and returns <code>reuse</code>
+     * in {@link #evaluate(float, android.graphics.PointF, android.graphics.PointF)} calls.
+     * The value returned from
+     * {@link #evaluate(float, android.graphics.PointF, android.graphics.PointF)} should
+     * not be cached because it will change over time as the object is reused on each
+     * call.
+     *
+     * @param reuse A PointF to be modified and returned by evaluate.
+     */
+    public PointFEvaluator(PointF reuse) {
+        mPoint = reuse;
+    }
+
+    /**
+     * This function returns the result of linearly interpolating the start and
+     * end PointF values, with <code>fraction</code> representing the proportion
+     * between the start and end values. The calculation is a simple parametric
+     * calculation on each of the separate components in the PointF objects
+     * (x, y).
+     *
+     * <p>If {@link #PointFEvaluator(android.graphics.PointF)} was used to construct
+     * this PointFEvaluator, the object returned will be the <code>reuse</code>
+     * passed into the constructor.</p>
+     *
+     * @param fraction   The fraction from the starting to the ending values
+     * @param startValue The start PointF
+     * @param endValue   The end PointF
+     * @return A linear interpolation between the start and end values, given the
+     *         <code>fraction</code> parameter.
+     */
+    @Override
+    public PointF evaluate(float fraction, PointF startValue, PointF endValue) {
+        float x = startValue.x + (fraction * (endValue.x - startValue.x));
+        float y = startValue.y + (fraction * (endValue.y - startValue.y));
+
+        if (mPoint != null) {
+            mPoint.set(x, y);
+            return mPoint;
+        } else {
+            return new PointF(x, y);
+        }
+    }
+}
diff --git a/core/java/android/animation/PropertyValuesHolder.java b/core/java/android/animation/PropertyValuesHolder.java
index 21f6eda..8fce80a 100644
--- a/core/java/android/animation/PropertyValuesHolder.java
+++ b/core/java/android/animation/PropertyValuesHolder.java
@@ -16,6 +16,9 @@
 
 package android.animation;
 
+import android.graphics.Path;
+import android.graphics.PointF;
+import android.util.FloatMath;
 import android.util.FloatProperty;
 import android.util.IntProperty;
 import android.util.Log;
@@ -124,6 +127,11 @@
     private Object mAnimatedValue;
 
     /**
+     * Converts from the source Object type to the setter Object type.
+     */
+    private TypeConverter mConverter;
+
+    /**
      * Internal utility constructor, used by the factory methods to set the property name.
      * @param propertyName The name of the property for this holder.
      */
@@ -166,6 +174,104 @@
 
     /**
      * Constructs and returns a PropertyValuesHolder with a given property name and
+     * set of <code>int[]</code> values. At least two <code>int[]</code> values must be supplied,
+     * a start and end value. If more values are supplied, the values will be animated from the
+     * start, through all intermediate values to the end value. When used with ObjectAnimator,
+     * the elements of the array represent the parameters of the setter function.
+     *
+     * @param propertyName The name of the property being animated. Can also be the
+     *                     case-sensitive name of the entire setter method. Should not be null.
+     * @param values The values that the property will animate between.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     * @see IntArrayEvaluator#IntArrayEvaluator(int[])
+     * @see ObjectAnimator#ofMultiInt(Object, String, TypeConverter, TypeEvaluator, Object[])
+     */
+    public static PropertyValuesHolder ofMultiInt(String propertyName, int[][] values) {
+        if (values.length < 2) {
+            throw new IllegalArgumentException("At least 2 values must be supplied");
+        }
+        int numParameters = 0;
+        for (int i = 0; i < values.length; i++) {
+            if (values[i] == null) {
+                throw new IllegalArgumentException("values must not be null");
+            }
+            int length = values[i].length;
+            if (i == 0) {
+                numParameters = length;
+            } else if (length != numParameters) {
+                throw new IllegalArgumentException("Values must all have the same length");
+            }
+        }
+        IntArrayEvaluator evaluator = new IntArrayEvaluator(new int[numParameters]);
+        return new MultiIntValuesHolder(propertyName, null, evaluator, (Object[]) values);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder with a given property name to use
+     * as a multi-int setter. The values are animated along the path, with the first
+     * parameter of the setter set to the x coordinate and the second set to the y coordinate.
+     *
+     * @param propertyName The name of the property being animated. Can also be the
+     *                     case-sensitive name of the entire setter method. Should not be null.
+     *                     The setter must take exactly two <code>int</code> parameters.
+     * @param path The Path along which the values should be animated.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     * @see ObjectAnimator#ofPropertyValuesHolder(Object, PropertyValuesHolder...)
+     */
+    public static PropertyValuesHolder ofMultiInt(String propertyName, Path path) {
+        Keyframe[] keyframes = createKeyframes(path);
+        KeyframeSet keyframeSet = KeyframeSet.ofKeyframe(keyframes);
+        TypeEvaluator<PointF> evaluator = new PointFEvaluator(new PointF());
+        PointFToIntArray converter = new PointFToIntArray();
+        return new MultiIntValuesHolder(propertyName, converter, evaluator, keyframeSet);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder with a given property and
+     * set of Object values for use with ObjectAnimator multi-value setters. The Object
+     * values are converted to <code>int[]</code> using the converter.
+     *
+     * @param propertyName The property being animated or complete name of the setter.
+     *                     Should not be null.
+     * @param converter Used to convert the animated value to setter parameters.
+     * @param evaluator A TypeEvaluator that will be called on each animation frame to
+     * provide the necessary interpolation between the Object values to derive the animated
+     * value.
+     * @param values The values that the property will animate between.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     * @see ObjectAnimator#ofMultiInt(Object, String, TypeConverter, TypeEvaluator, Object[])
+     * @see ObjectAnimator#ofPropertyValuesHolder(Object, PropertyValuesHolder...)
+     */
+    public static <V> PropertyValuesHolder ofMultiInt(String propertyName,
+            TypeConverter<V, int[]> converter, TypeEvaluator<V> evaluator, V... values) {
+        return new MultiIntValuesHolder(propertyName, converter, evaluator, values);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder object with the specified property name or
+     * setter name for use in a multi-int setter function using ObjectAnimator. The values can be
+     * of any type, but the type should be consistent so that the supplied
+     * {@link android.animation.TypeEvaluator} can be used to to evaluate the animated value. The
+     * <code>converter</code> converts the values to parameters in the setter function.
+     *
+     * <p>At least two values must be supplied, a start and an end value.</p>
+     *
+     * @param propertyName The name of the property to associate with the set of values. This
+     *                     may also be the complete name of a setter function.
+     * @param converter    Converts <code>values</code> into int parameters for the setter.
+     *                     Can be null if the Keyframes have int[] values.
+     * @param evaluator    Used to interpolate between values.
+     * @param values       The values at specific fractional times to evaluate between
+     * @return A PropertyValuesHolder for a multi-int parameter setter.
+     */
+    public static <T> PropertyValuesHolder ofMultiInt(String propertyName,
+            TypeConverter<T, int[]> converter, TypeEvaluator<T> evaluator, Keyframe... values) {
+        KeyframeSet keyframeSet = KeyframeSet.ofKeyframe(values);
+        return new MultiIntValuesHolder(propertyName, converter, evaluator, keyframeSet);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder with a given property name and
      * set of float values.
      * @param propertyName The name of the property being animated.
      * @param values The values that the named property will animate between.
@@ -188,6 +294,103 @@
 
     /**
      * Constructs and returns a PropertyValuesHolder with a given property name and
+     * set of <code>float[]</code> values. At least two <code>float[]</code> values must be supplied,
+     * a start and end value. If more values are supplied, the values will be animated from the
+     * start, through all intermediate values to the end value. When used with ObjectAnimator,
+     * the elements of the array represent the parameters of the setter function.
+     *
+     * @param propertyName The name of the property being animated. Can also be the
+     *                     case-sensitive name of the entire setter method. Should not be null.
+     * @param values The values that the property will animate between.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     * @see FloatArrayEvaluator#FloatArrayEvaluator(float[])
+     * @see ObjectAnimator#ofMultiFloat(Object, String, TypeConverter, TypeEvaluator, Object[])
+     */
+    public static PropertyValuesHolder ofMultiFloat(String propertyName, float[][] values) {
+        if (values.length < 2) {
+            throw new IllegalArgumentException("At least 2 values must be supplied");
+        }
+        int numParameters = 0;
+        for (int i = 0; i < values.length; i++) {
+            if (values[i] == null) {
+                throw new IllegalArgumentException("values must not be null");
+            }
+            int length = values[i].length;
+            if (i == 0) {
+                numParameters = length;
+            } else if (length != numParameters) {
+                throw new IllegalArgumentException("Values must all have the same length");
+            }
+        }
+        FloatArrayEvaluator evaluator = new FloatArrayEvaluator(new float[numParameters]);
+        return new MultiFloatValuesHolder(propertyName, null, evaluator, (Object[]) values);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder with a given property name to use
+     * as a multi-float setter. The values are animated along the path, with the first
+     * parameter of the setter set to the x coordinate and the second set to the y coordinate.
+     *
+     * @param propertyName The name of the property being animated. Can also be the
+     *                     case-sensitive name of the entire setter method. Should not be null.
+     *                     The setter must take exactly two <code>float</code> parameters.
+     * @param path The Path along which the values should be animated.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     * @see ObjectAnimator#ofPropertyValuesHolder(Object, PropertyValuesHolder...)
+     */
+    public static PropertyValuesHolder ofMultiFloat(String propertyName, Path path) {
+        Keyframe[] keyframes = createKeyframes(path);
+        KeyframeSet keyframeSet = KeyframeSet.ofKeyframe(keyframes);
+        TypeEvaluator<PointF> evaluator = new PointFEvaluator(new PointF());
+        PointFToFloatArray converter = new PointFToFloatArray();
+        return new MultiFloatValuesHolder(propertyName, converter, evaluator, keyframeSet);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder with a given property and
+     * set of Object values for use with ObjectAnimator multi-value setters. The Object
+     * values are converted to <code>float[]</code> using the converter.
+     *
+     * @param propertyName The property being animated or complete name of the setter.
+     *                     Should not be null.
+     * @param converter Used to convert the animated value to setter parameters.
+     * @param evaluator A TypeEvaluator that will be called on each animation frame to
+     * provide the necessary interpolation between the Object values to derive the animated
+     * value.
+     * @param values The values that the property will animate between.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     * @see ObjectAnimator#ofMultiFloat(Object, String, TypeConverter, TypeEvaluator, Object[])
+     */
+    public static <V> PropertyValuesHolder ofMultiFloat(String propertyName,
+            TypeConverter<V, float[]> converter, TypeEvaluator<V> evaluator, V... values) {
+        return new MultiFloatValuesHolder(propertyName, converter, evaluator, values);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder object with the specified property name or
+     * setter name for use in a multi-float setter function using ObjectAnimator. The values can be
+     * of any type, but the type should be consistent so that the supplied
+     * {@link android.animation.TypeEvaluator} can be used to to evaluate the animated value. The
+     * <code>converter</code> converts the values to parameters in the setter function.
+     *
+     * <p>At least two values must be supplied, a start and an end value.</p>
+     *
+     * @param propertyName The name of the property to associate with the set of values. This
+     *                     may also be the complete name of a setter function.
+     * @param converter    Converts <code>values</code> into float parameters for the setter.
+     *                     Can be null if the Keyframes have float[] values.
+     * @param evaluator    Used to interpolate between values.
+     * @param values       The values at specific fractional times to evaluate between
+     * @return A PropertyValuesHolder for a multi-float parameter setter.
+     */
+    public static <T> PropertyValuesHolder ofMultiFloat(String propertyName,
+            TypeConverter<T, float[]> converter, TypeEvaluator<T> evaluator, Keyframe... values) {
+        KeyframeSet keyframeSet = KeyframeSet.ofKeyframe(values);
+        return new MultiFloatValuesHolder(propertyName, converter, evaluator, keyframeSet);
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder with a given property name and
      * set of Object values. This variant also takes a TypeEvaluator because the system
      * cannot automatically interpolate between objects of unknown type.
      *
@@ -207,6 +410,27 @@
     }
 
     /**
+     * Constructs and returns a PropertyValuesHolder with a given property name and
+     * a Path along which the values should be animated. This variant supports a
+     * <code>TypeConverter</code> to convert from <code>PointF</code> to the target
+     * type.
+     *
+     * @param propertyName The name of the property being animated.
+     * @param converter Converts a PointF to the type associated with the setter. May be
+     *                  null if conversion is unnecessary.
+     * @param path The Path along which the values should be animated.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     */
+    public static PropertyValuesHolder ofObject(String propertyName,
+            TypeConverter<PointF, ?> converter, Path path) {
+        Keyframe[] keyframes = createKeyframes(path);
+        PropertyValuesHolder pvh = ofKeyframe(propertyName, keyframes);
+        pvh.setEvaluator(new PointFEvaluator(new PointF()));
+        pvh.setConverter(converter);
+        return pvh;
+    }
+
+    /**
      * Constructs and returns a PropertyValuesHolder with a given property and
      * set of Object values. This variant also takes a TypeEvaluator because the system
      * cannot automatically interpolate between objects of unknown type.
@@ -227,6 +451,55 @@
     }
 
     /**
+     * Constructs and returns a PropertyValuesHolder with a given property and
+     * set of Object values. This variant also takes a TypeEvaluator because the system
+     * cannot automatically interpolate between objects of unknown type. This variant also
+     * takes a <code>TypeConverter</code> to convert from animated values to the type
+     * of the property. If only one value is supplied, the <code>TypeConverter</code>
+     * must implement {@link TypeConverter#convertBack(Object)} to retrieve the current
+     * value.
+     *
+     * @param property The property being animated. Should not be null.
+     * @param converter Converts the animated object to the Property type.
+     * @param evaluator A TypeEvaluator that will be called on each animation frame to
+     * provide the necessary interpolation between the Object values to derive the animated
+     * value.
+     * @param values The values that the property will animate between.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     * @see #setConverter(TypeConverter)
+     * @see TypeConverter
+     */
+    public static <T, V> PropertyValuesHolder ofObject(Property<?, V> property,
+            TypeConverter<T, V> converter, TypeEvaluator<T> evaluator, T... values) {
+        PropertyValuesHolder pvh = new PropertyValuesHolder(property);
+        pvh.setConverter(converter);
+        pvh.setObjectValues(values);
+        pvh.setEvaluator(evaluator);
+        return pvh;
+    }
+
+    /**
+     * Constructs and returns a PropertyValuesHolder with a given property and
+     * a Path along which the values should be animated. This variant supports a
+     * <code>TypeConverter</code> to convert from <code>PointF</code> to the target
+     * type.
+     *
+     * @param property The property being animated. Should not be null.
+     * @param converter Converts a PointF to the type associated with the setter. May be
+     *                  null if conversion is unnecessary.
+     * @param path The Path along which the values should be animated.
+     * @return PropertyValuesHolder The constructed PropertyValuesHolder object.
+     */
+    public static <V> PropertyValuesHolder ofObject(Property<?, V> property,
+            TypeConverter<PointF, V> converter, Path path) {
+        Keyframe[] keyframes = createKeyframes(path);
+        PropertyValuesHolder pvh = ofKeyframe(property, keyframes);
+        pvh.setEvaluator(new PointFEvaluator(new PointF()));
+        pvh.setConverter(converter);
+        return pvh;
+    }
+
+    /**
      * Constructs and returns a PropertyValuesHolder object with the specified property name and set
      * of values. These values can be of any type, but the type should be consistent so that
      * an appropriate {@link android.animation.TypeEvaluator} can be found that matches
@@ -361,6 +634,14 @@
     }
 
     /**
+     * Sets the converter to convert from the values type to the setter's parameter type.
+     * @param converter The converter to use to convert values.
+     */
+    public void setConverter(TypeConverter converter) {
+        mConverter = converter;
+    }
+
+    /**
      * Determine the setter or getter function using the JavaBeans convention of setFoo or
      * getFoo for a property named 'foo'. This function figures out what the name of the
      * function should be and uses reflection to find the Method with that name on the
@@ -389,22 +670,24 @@
         } else {
             args = new Class[1];
             Class typeVariants[];
-            if (mValueType.equals(Float.class)) {
+            if (valueType.equals(Float.class)) {
                 typeVariants = FLOAT_VARIANTS;
-            } else if (mValueType.equals(Integer.class)) {
+            } else if (valueType.equals(Integer.class)) {
                 typeVariants = INTEGER_VARIANTS;
-            } else if (mValueType.equals(Double.class)) {
+            } else if (valueType.equals(Double.class)) {
                 typeVariants = DOUBLE_VARIANTS;
             } else {
                 typeVariants = new Class[1];
-                typeVariants[0] = mValueType;
+                typeVariants[0] = valueType;
             }
             for (Class typeVariant : typeVariants) {
                 args[0] = typeVariant;
                 try {
                     returnVal = targetClass.getMethod(methodName, args);
-                    // change the value type to suit
-                    mValueType = typeVariant;
+                    if (mConverter == null) {
+                        // change the value type to suit
+                        mValueType = typeVariant;
+                    }
                     return returnVal;
                 } catch (NoSuchMethodException e) {
                     // Swallow the error and keep trying other variants
@@ -415,7 +698,7 @@
 
         if (returnVal == null) {
             Log.w("PropertyValuesHolder", "Method " +
-                    getMethodName(prefix, mPropertyName) + "() with type " + mValueType +
+                    getMethodName(prefix, mPropertyName) + "() with type " + valueType +
                     " not found on target class " + targetClass);
         }
 
@@ -465,7 +748,8 @@
      * @param targetClass The Class on which the requested method should exist.
      */
     void setupSetter(Class targetClass) {
-        mSetter = setupSetterOrGetter(targetClass, sSetterPropertyMap, "set", mValueType);
+        Class<?> propertyType = mConverter == null ? mValueType : mConverter.getTargetType();
+        mSetter = setupSetterOrGetter(targetClass, sSetterPropertyMap, "set", propertyType);
     }
 
     /**
@@ -489,10 +773,13 @@
         if (mProperty != null) {
             // check to make sure that mProperty is on the class of target
             try {
-                Object testValue = mProperty.get(target);
+                Object testValue = null;
                 for (Keyframe kf : mKeyframeSet.mKeyframes) {
                     if (!kf.hasValue()) {
-                        kf.setValue(mProperty.get(target));
+                        if (testValue == null) {
+                            testValue = convertBack(mProperty.get(target));
+                        }
+                        kf.setValue(testValue);
                     }
                 }
                 return;
@@ -516,7 +803,8 @@
                     }
                 }
                 try {
-                    kf.setValue(mGetter.invoke(target));
+                    Object value = convertBack(mGetter.invoke(target));
+                    kf.setValue(value);
                 } catch (InvocationTargetException e) {
                     Log.e("PropertyValuesHolder", e.toString());
                 } catch (IllegalAccessException e) {
@@ -526,6 +814,18 @@
         }
     }
 
+    private Object convertBack(Object value) {
+        if (mConverter != null) {
+            value = mConverter.convertBack(value);
+            if (value == null) {
+                throw new IllegalArgumentException("Converter "
+                        + mConverter.getClass().getName()
+                        + " must implement convertBack and not return null.");
+            }
+        }
+        return value;
+    }
+
     /**
      * Utility function to set the value stored in a particular Keyframe. The value used is
      * whatever the value is for the property name specified in the keyframe on the target object.
@@ -535,7 +835,8 @@
      */
     private void setupValue(Object target, Keyframe kf) {
         if (mProperty != null) {
-            kf.setValue(mProperty.get(target));
+            Object value = convertBack(mProperty.get(target));
+            kf.setValue(value);
         }
         try {
             if (mGetter == null) {
@@ -546,7 +847,8 @@
                     return;
                 }
             }
-            kf.setValue(mGetter.invoke(target));
+            Object value = convertBack(mGetter.invoke(target));
+            kf.setValue(value);
         } catch (InvocationTargetException e) {
             Log.e("PropertyValuesHolder", e.toString());
         } catch (IllegalAccessException e) {
@@ -657,7 +959,8 @@
      * @param fraction The elapsed, interpolated fraction of the animation.
      */
     void calculateValue(float fraction) {
-        mAnimatedValue = mKeyframeSet.getValue(fraction);
+        Object value = mKeyframeSet.getValue(fraction);
+        mAnimatedValue = mConverter == null ? value : mConverter.convert(value);
     }
 
     /**
@@ -1015,8 +1318,334 @@
 
     }
 
+    static class MultiFloatValuesHolder extends PropertyValuesHolder {
+        private long mJniSetter;
+        private static final HashMap<Class, HashMap<String, Long>> sJNISetterPropertyMap =
+                new HashMap<Class, HashMap<String, Long>>();
+
+        public MultiFloatValuesHolder(String propertyName, TypeConverter converter,
+                TypeEvaluator evaluator, Object... values) {
+            super(propertyName);
+            setConverter(converter);
+            setObjectValues(values);
+            setEvaluator(evaluator);
+        }
+
+        public MultiFloatValuesHolder(String propertyName, TypeConverter converter,
+                TypeEvaluator evaluator, KeyframeSet keyframeSet) {
+            super(propertyName);
+            setConverter(converter);
+            mKeyframeSet = keyframeSet;
+            setEvaluator(evaluator);
+        }
+
+        /**
+         * Internal function to set the value on the target object, using the setter set up
+         * earlier on this PropertyValuesHolder object. This function is called by ObjectAnimator
+         * to handle turning the value calculated by ValueAnimator into a value set on the object
+         * according to the name of the property.
+         *
+         * @param target The target object on which the value is set
+         */
+        @Override
+        void setAnimatedValue(Object target) {
+            float[] values = (float[]) getAnimatedValue();
+            int numParameters = values.length;
+            if (mJniSetter != 0) {
+                switch (numParameters) {
+                    case 1:
+                        nCallFloatMethod(target, mJniSetter, values[0]);
+                        break;
+                    case 2:
+                        nCallTwoFloatMethod(target, mJniSetter, values[0], values[1]);
+                        break;
+                    case 4:
+                        nCallFourFloatMethod(target, mJniSetter, values[0], values[1],
+                                values[2], values[3]);
+                        break;
+                    default: {
+                        nCallMultipleFloatMethod(target, mJniSetter, values);
+                        break;
+                    }
+                }
+            }
+        }
+
+        /**
+         * Internal function (called from ObjectAnimator) to set up the setter and getter
+         * prior to running the animation. No getter can be used for multiple parameters.
+         *
+         * @param target The object on which the setter exists.
+         */
+        @Override
+        void setupSetterAndGetter(Object target) {
+            setupSetter(target.getClass());
+        }
+
+        @Override
+        void setupSetter(Class targetClass) {
+            if (mJniSetter != 0) {
+                return;
+            }
+            try {
+                mPropertyMapLock.writeLock().lock();
+                HashMap<String, Long> propertyMap = sJNISetterPropertyMap.get(targetClass);
+                if (propertyMap != null) {
+                    Long jniSetterLong = propertyMap.get(mPropertyName);
+                    if (jniSetterLong != null) {
+                        mJniSetter = jniSetterLong;
+                    }
+                }
+                if (mJniSetter == 0) {
+                    String methodName = getMethodName("set", mPropertyName);
+                    calculateValue(0f);
+                    float[] values = (float[]) getAnimatedValue();
+                    int numParams = values.length;
+                    try {
+                        mJniSetter = nGetMultipleFloatMethod(targetClass, methodName, numParams);
+                    } catch (NoSuchMethodError e) {
+                        // try without the 'set' prefix
+                        mJniSetter = nGetMultipleFloatMethod(targetClass, mPropertyName, numParams);
+                    }
+                    if (mJniSetter != 0) {
+                        if (propertyMap == null) {
+                            propertyMap = new HashMap<String, Long>();
+                            sJNISetterPropertyMap.put(targetClass, propertyMap);
+                        }
+                        propertyMap.put(mPropertyName, mJniSetter);
+                    }
+                }
+            } finally {
+                mPropertyMapLock.writeLock().unlock();
+            }
+        }
+    }
+
+    static class MultiIntValuesHolder extends PropertyValuesHolder {
+        private long mJniSetter;
+        private static final HashMap<Class, HashMap<String, Long>> sJNISetterPropertyMap =
+                new HashMap<Class, HashMap<String, Long>>();
+
+        public MultiIntValuesHolder(String propertyName, TypeConverter converter,
+                TypeEvaluator evaluator, Object... values) {
+            super(propertyName);
+            setConverter(converter);
+            setObjectValues(values);
+            setEvaluator(evaluator);
+        }
+
+        public MultiIntValuesHolder(String propertyName, TypeConverter converter,
+                TypeEvaluator evaluator, KeyframeSet keyframeSet) {
+            super(propertyName);
+            setConverter(converter);
+            mKeyframeSet = keyframeSet;
+            setEvaluator(evaluator);
+        }
+
+        /**
+         * Internal function to set the value on the target object, using the setter set up
+         * earlier on this PropertyValuesHolder object. This function is called by ObjectAnimator
+         * to handle turning the value calculated by ValueAnimator into a value set on the object
+         * according to the name of the property.
+         *
+         * @param target The target object on which the value is set
+         */
+        @Override
+        void setAnimatedValue(Object target) {
+            int[] values = (int[]) getAnimatedValue();
+            int numParameters = values.length;
+            if (mJniSetter != 0) {
+                switch (numParameters) {
+                    case 1:
+                        nCallIntMethod(target, mJniSetter, values[0]);
+                        break;
+                    case 2:
+                        nCallTwoIntMethod(target, mJniSetter, values[0], values[1]);
+                        break;
+                    case 4:
+                        nCallFourIntMethod(target, mJniSetter, values[0], values[1],
+                                values[2], values[3]);
+                        break;
+                    default: {
+                        nCallMultipleIntMethod(target, mJniSetter, values);
+                        break;
+                    }
+                }
+            }
+        }
+
+        /**
+         * Internal function (called from ObjectAnimator) to set up the setter and getter
+         * prior to running the animation. No getter can be used for multiple parameters.
+         *
+         * @param target The object on which the setter exists.
+         */
+        @Override
+        void setupSetterAndGetter(Object target) {
+            setupSetter(target.getClass());
+        }
+
+        @Override
+        void setupSetter(Class targetClass) {
+            if (mJniSetter != 0) {
+                return;
+            }
+            try {
+                mPropertyMapLock.writeLock().lock();
+                HashMap<String, Long> propertyMap = sJNISetterPropertyMap.get(targetClass);
+                if (propertyMap != null) {
+                    Long jniSetterLong = propertyMap.get(mPropertyName);
+                    if (jniSetterLong != null) {
+                        mJniSetter = jniSetterLong;
+                    }
+                }
+                if (mJniSetter == 0) {
+                    String methodName = getMethodName("set", mPropertyName);
+                    calculateValue(0f);
+                    int[] values = (int[]) getAnimatedValue();
+                    int numParams = values.length;
+                    try {
+                        mJniSetter = nGetMultipleIntMethod(targetClass, methodName, numParams);
+                    } catch (NoSuchMethodError e) {
+                        // try without the 'set' prefix
+                        mJniSetter = nGetMultipleIntMethod(targetClass, mPropertyName, numParams);
+                    }
+                    if (mJniSetter != 0) {
+                        if (propertyMap == null) {
+                            propertyMap = new HashMap<String, Long>();
+                            sJNISetterPropertyMap.put(targetClass, propertyMap);
+                        }
+                        propertyMap.put(mPropertyName, mJniSetter);
+                    }
+                }
+            } finally {
+                mPropertyMapLock.writeLock().unlock();
+            }
+        }
+    }
+
+    /* Path interpolation relies on approximating the Path as a series of line segments.
+       The line segments are recursively divided until there is less than 1/2 pixel error
+       between the lines and the curve. Each point of the line segment is converted
+       to a Keyframe and a linear interpolation between Keyframes creates a good approximation
+       of the curve.
+
+       The fraction for each Keyframe is the length along the Path to the point, divided by
+       the total Path length. Two points may have the same fraction in the case of a move
+       command causing a disjoint Path.
+
+       The value for each Keyframe is either the point as a PointF or one of the x or y
+       coordinates as an int or float. In the latter case, two Keyframes are generated for
+       each point that have the same fraction. */
+
+    /**
+     * Returns separate Keyframes arrays for the x and y coordinates along a Path. If
+     * isInt is true, the Keyframes will be IntKeyframes, otherwise they will be FloatKeyframes.
+     * The element at index 0 are the x coordinate Keyframes and element at index 1 are the
+     * y coordinate Keyframes. The returned values can be linearly interpolated and get less
+     * than 1/2 pixel error.
+     */
+    static Keyframe[][] createKeyframes(Path path, boolean isInt) {
+        if (path == null || path.isEmpty()) {
+            throw new IllegalArgumentException("The path must not be null or empty");
+        }
+        float[] pointComponents = path.approximate(0.5f);
+
+        int numPoints = pointComponents.length / 3;
+
+        Keyframe[][] keyframes = new Keyframe[2][];
+        keyframes[0] = new Keyframe[numPoints];
+        keyframes[1] = new Keyframe[numPoints];
+        int componentIndex = 0;
+        for (int i = 0; i < numPoints; i++) {
+            float fraction = pointComponents[componentIndex++];
+            float x = pointComponents[componentIndex++];
+            float y = pointComponents[componentIndex++];
+            if (isInt) {
+                keyframes[0][i] = Keyframe.ofInt(fraction, Math.round(x));
+                keyframes[1][i] = Keyframe.ofInt(fraction, Math.round(y));
+            } else {
+                keyframes[0][i] = Keyframe.ofFloat(fraction, x);
+                keyframes[1][i] = Keyframe.ofFloat(fraction, y);
+            }
+        }
+        return keyframes;
+    }
+
+    /**
+     * Returns PointF Keyframes for a Path. The resulting points can be linearly interpolated
+     * with less than 1/2 pixel in error.
+     */
+    private static Keyframe[] createKeyframes(Path path) {
+        if (path == null || path.isEmpty()) {
+            throw new IllegalArgumentException("The path must not be null or empty");
+        }
+        float[] pointComponents = path.approximate(0.5f);
+
+        int numPoints = pointComponents.length / 3;
+
+        Keyframe[] keyframes = new Keyframe[numPoints];
+        int componentIndex = 0;
+        for (int i = 0; i < numPoints; i++) {
+            float fraction = pointComponents[componentIndex++];
+            float x = pointComponents[componentIndex++];
+            float y = pointComponents[componentIndex++];
+            keyframes[i] = Keyframe.ofObject(fraction, new PointF(x, y));
+        }
+        return keyframes;
+    }
+
+    /**
+     * Convert from PointF to float[] for multi-float setters along a Path.
+     */
+    private static class PointFToFloatArray extends TypeConverter<PointF, float[]> {
+        private float[] mCoordinates = new float[2];
+
+        public PointFToFloatArray() {
+            super(PointF.class, float[].class);
+        }
+
+        @Override
+        public float[] convert(PointF value) {
+            mCoordinates[0] = value.x;
+            mCoordinates[1] = value.y;
+            return mCoordinates;
+        }
+    };
+
+    /**
+     * Convert from PointF to int[] for multi-int setters along a Path.
+     */
+    private static class PointFToIntArray extends TypeConverter<PointF, int[]> {
+        private int[] mCoordinates = new int[2];
+
+        public PointFToIntArray() {
+            super(PointF.class, int[].class);
+        }
+
+        @Override
+        public int[] convert(PointF value) {
+            mCoordinates[0] = Math.round(value.x);
+            mCoordinates[1] = Math.round(value.y);
+            return mCoordinates;
+        }
+    };
+
     native static private long nGetIntMethod(Class targetClass, String methodName);
     native static private long nGetFloatMethod(Class targetClass, String methodName);
+    native static private long nGetMultipleIntMethod(Class targetClass, String methodName,
+            int numParams);
+    native static private long nGetMultipleFloatMethod(Class targetClass, String methodName,
+            int numParams);
     native static private void nCallIntMethod(Object target, long methodID, int arg);
     native static private void nCallFloatMethod(Object target, long methodID, float arg);
+    native static private void nCallTwoIntMethod(Object target, long methodID, int arg1, int arg2);
+    native static private void nCallFourIntMethod(Object target, long methodID, int arg1, int arg2,
+            int arg3, int arg4);
+    native static private void nCallMultipleIntMethod(Object target, long methodID, int[] args);
+    native static private void nCallTwoFloatMethod(Object target, long methodID, float arg1,
+            float arg2);
+    native static private void nCallFourFloatMethod(Object target, long methodID, float arg1,
+            float arg2, float arg3, float arg4);
+    native static private void nCallMultipleFloatMethod(Object target, long methodID, float[] args);
 }
diff --git a/core/java/android/animation/RectEvaluator.java b/core/java/android/animation/RectEvaluator.java
index 28d496b..23eb766 100644
--- a/core/java/android/animation/RectEvaluator.java
+++ b/core/java/android/animation/RectEvaluator.java
@@ -23,12 +23,45 @@
 public class RectEvaluator implements TypeEvaluator<Rect> {
 
     /**
+     * When null, a new Rect is returned on every evaluate call. When non-null,
+     * mRect will be modified and returned on every evaluate.
+     */
+    private Rect mRect;
+
+    /**
+     * Construct a RectEvaluator that returns a new Rect on every evaluate call.
+     * To avoid creating an object for each evaluate call,
+     * {@link RectEvaluator#RectEvaluator(android.graphics.Rect)} should be used
+     * whenever possible.
+     */
+    public RectEvaluator() {
+    }
+
+    /**
+     * Constructs a RectEvaluator that modifies and returns <code>reuseRect</code>
+     * in {@link #evaluate(float, android.graphics.Rect, android.graphics.Rect)} calls.
+     * The value returned from
+     * {@link #evaluate(float, android.graphics.Rect, android.graphics.Rect)} should
+     * not be cached because it will change over time as the object is reused on each
+     * call.
+     *
+     * @param reuseRect A Rect to be modified and returned by evaluate.
+     */
+    public RectEvaluator(Rect reuseRect) {
+        mRect = reuseRect;
+    }
+
+    /**
      * This function returns the result of linearly interpolating the start and
      * end Rect values, with <code>fraction</code> representing the proportion
      * between the start and end values. The calculation is a simple parametric
      * calculation on each of the separate components in the Rect objects
      * (left, top, right, and bottom).
      *
+     * <p>If {@link #RectEvaluator(android.graphics.Rect)} was used to construct
+     * this RectEvaluator, the object returned will be the <code>reuseRect</code>
+     * passed into the constructor.</p>
+     *
      * @param fraction   The fraction from the starting to the ending values
      * @param startValue The start Rect
      * @param endValue   The end Rect
@@ -37,9 +70,15 @@
      */
     @Override
     public Rect evaluate(float fraction, Rect startValue, Rect endValue) {
-        return new Rect(startValue.left + (int)((endValue.left - startValue.left) * fraction),
-                startValue.top + (int)((endValue.top - startValue.top) * fraction),
-                startValue.right + (int)((endValue.right - startValue.right) * fraction),
-                startValue.bottom + (int)((endValue.bottom - startValue.bottom) * fraction));
+        int left = startValue.left + (int) ((endValue.left - startValue.left) * fraction);
+        int top = startValue.top + (int) ((endValue.top - startValue.top) * fraction);
+        int right = startValue.right + (int) ((endValue.right - startValue.right) * fraction);
+        int bottom = startValue.bottom + (int) ((endValue.bottom - startValue.bottom) * fraction);
+        if (mRect == null) {
+            return new Rect(left, top, right, bottom);
+        } else {
+            mRect.set(left, top, right, bottom);
+            return mRect;
+        }
     }
 }
diff --git a/core/java/android/animation/RevealAnimator.java b/core/java/android/animation/RevealAnimator.java
new file mode 100644
index 0000000..77a536a
--- /dev/null
+++ b/core/java/android/animation/RevealAnimator.java
@@ -0,0 +1,141 @@
+/*
+ * Copyright (C) 2014 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 android.animation;
+
+import android.view.View;
+
+import java.util.ArrayList;
+
+/**
+ * Reveals a View with an animated clipping circle.
+ * The clipping is implemented efficiently by talking to a private reveal API on View.
+ * This hidden class currently only accessed by the {@link android.view.View}.
+ *
+ * @hide
+ */
+public class RevealAnimator extends ValueAnimator {
+    private final static String LOGTAG = "RevealAnimator";
+    private ValueAnimator.AnimatorListener mListener;
+    private ValueAnimator.AnimatorUpdateListener mUpdateListener;
+    private RevealCircle mReuseRevealCircle = new RevealCircle(0);
+    private RevealAnimator(final View clipView, final int x, final int y,
+            float startRadius, float endRadius, final boolean inverseClip) {
+
+        setObjectValues(new RevealCircle(startRadius), new RevealCircle(endRadius));
+        setEvaluator(new RevealCircleEvaluator(mReuseRevealCircle));
+
+        mUpdateListener = new ValueAnimator.AnimatorUpdateListener() {
+                @Override
+            public void onAnimationUpdate(ValueAnimator animation) {
+                RevealCircle circle = (RevealCircle) animation.getAnimatedValue();
+                float radius = circle.getRadius();
+                clipView.setRevealClip(true, inverseClip, x, y, radius);
+            }
+        };
+        mListener = new AnimatorListenerAdapter() {
+                @Override
+            public void onAnimationCancel(Animator animation) {
+                clipView.setRevealClip(false, false, 0, 0, 0);
+            }
+
+                @Override
+            public void onAnimationEnd(Animator animation) {
+                clipView.setRevealClip(false, false, 0, 0, 0);
+            }
+        };
+        addUpdateListener(mUpdateListener);
+        addListener(mListener);
+    }
+
+    public static RevealAnimator ofRevealCircle(View clipView, int x, int y,
+            float startRadius, float endRadius, boolean inverseClip) {
+        RevealAnimator anim = new RevealAnimator(clipView, x, y,
+                startRadius, endRadius, inverseClip);
+        return anim;
+    }
+
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void removeAllUpdateListeners() {
+        super.removeAllUpdateListeners();
+        addUpdateListener(mUpdateListener);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void removeAllListeners() {
+        super.removeAllListeners();
+        addListener(mListener);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public ArrayList<AnimatorListener> getListeners() {
+        ArrayList<AnimatorListener> allListeners =
+                (ArrayList<AnimatorListener>) super.getListeners().clone();
+        allListeners.remove(mListener);
+        return allListeners;
+    }
+
+    private class RevealCircle {
+        float mRadius;
+
+        public RevealCircle(float radius) {
+            mRadius = radius;
+        }
+
+        public void setRadius(float radius) {
+            mRadius = radius;
+        }
+
+        public float getRadius() {
+            return mRadius;
+        }
+    }
+
+    private class RevealCircleEvaluator implements TypeEvaluator<RevealCircle> {
+
+        private RevealCircle mRevealCircle;
+
+        public RevealCircleEvaluator() {
+        }
+
+        public RevealCircleEvaluator(RevealCircle reuseCircle) {
+            mRevealCircle = reuseCircle;
+        }
+
+        @Override
+        public RevealCircle evaluate(float fraction, RevealCircle startValue,
+                RevealCircle endValue) {
+            float currentRadius = startValue.mRadius
+                    + ((endValue.mRadius - startValue.mRadius) * fraction);
+            if (mRevealCircle == null) {
+                return new RevealCircle(currentRadius);
+            } else {
+                mRevealCircle.setRadius(currentRadius);
+                return mRevealCircle;
+            }
+        }
+    }
+}
diff --git a/core/java/android/animation/TypeConverter.java b/core/java/android/animation/TypeConverter.java
new file mode 100644
index 0000000..03b3eb5
--- /dev/null
+++ b/core/java/android/animation/TypeConverter.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2013 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 android.animation;
+
+/**
+ * Abstract base class used convert type T to another type V. This
+ * is necessary when the value types of in animation are different
+ * from the property type.
+ * @see PropertyValuesHolder#setConverter(TypeConverter)
+ */
+public abstract class TypeConverter<T, V> {
+    private Class<T> mFromClass;
+    private Class<V> mToClass;
+
+    public TypeConverter(Class<T> fromClass, Class<V> toClass) {
+        mFromClass = fromClass;
+        mToClass = toClass;
+    }
+
+    /**
+     * Returns the target converted type. Used by the animation system to determine
+     * the proper setter function to call.
+     * @return The Class to convert the input to.
+     */
+    Class<V> getTargetType() {
+        return mToClass;
+    }
+
+    /**
+     * Returns the source conversion type.
+     */
+    Class<T> getSourceType() {
+        return mFromClass;
+    }
+
+    /**
+     * Converts a value from one type to another.
+     * @param value The Object to convert.
+     * @return A value of type V, converted from <code>value</code>.
+     */
+    public abstract V convert(T value);
+
+    /**
+     * Does a conversion from the target type back to the source type. The subclass
+     * must implement this when a TypeConverter is used in animations and current
+     * values will need to be read for an animation. By default, this will return null,
+     * indicating that back-conversion is not supported.
+     * @param value The Object to convert.
+     * @return A value of type T, converted from <code>value</code>.
+     */
+    public T convertBack(V value) {
+        return null;
+    }
+}
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java
index 86da673..5338dd0 100644
--- a/core/java/android/animation/ValueAnimator.java
+++ b/core/java/android/animation/ValueAnimator.java
@@ -280,6 +280,24 @@
     }
 
     /**
+     * Constructs and returns a ValueAnimator that animates between color values. A single
+     * value implies that that value is the one being animated to. However, this is not typically
+     * useful in a ValueAnimator object because there is no way for the object to determine the
+     * starting value for the animation (unlike ObjectAnimator, which can derive that value
+     * from the target object and property being animated). Therefore, there should typically
+     * be two or more values.
+     *
+     * @param values A set of values that the animation will animate between over time.
+     * @return A ValueAnimator object that is set up to animate between the given values.
+     */
+    public static ValueAnimator ofArgb(int... values) {
+        ValueAnimator anim = new ValueAnimator();
+        anim.setIntValues(values);
+        anim.setEvaluator(ArgbEvaluator.getInstance());
+        return anim;
+    }
+
+    /**
      * Constructs and returns a ValueAnimator that animates between float values. A single
      * value implies that that value is the one being animated to. However, this is not typically
      * useful in a ValueAnimator object because there is no way for the object to determine the
@@ -1106,28 +1124,27 @@
         if (!mStartedDelay) {
             mStartedDelay = true;
             mDelayStartTime = currentTime;
-        } else {
-            if (mPaused) {
-                if (mPauseTime < 0) {
-                    mPauseTime = currentTime;
-                }
-                return false;
-            } else if (mResumed) {
-                mResumed = false;
-                if (mPauseTime > 0) {
-                    // Offset by the duration that the animation was paused
-                    mDelayStartTime += (currentTime - mPauseTime);
-                }
+        }
+        if (mPaused) {
+            if (mPauseTime < 0) {
+                mPauseTime = currentTime;
             }
-            long deltaTime = currentTime - mDelayStartTime;
-            if (deltaTime > mStartDelay) {
-                // startDelay ended - start the anim and record the
-                // mStartTime appropriately
-                mStartTime = currentTime - (deltaTime - mStartDelay);
-                mPlayingState = RUNNING;
-                return true;
+            return false;
+        } else if (mResumed) {
+            mResumed = false;
+            if (mPauseTime > 0) {
+                // Offset by the duration that the animation was paused
+                mDelayStartTime += (currentTime - mPauseTime);
             }
         }
+        long deltaTime = currentTime - mDelayStartTime;
+        if (deltaTime > mStartDelay) {
+            // startDelay ended - start the anim and record the
+            // mStartTime appropriately
+            mStartTime = currentTime - (deltaTime - mStartDelay);
+            mPlayingState = RUNNING;
+            return true;
+        }
         return false;
     }
 
diff --git a/core/java/android/annotation/AnimRes.java b/core/java/android/annotation/AnimRes.java
new file mode 100644
index 0000000..56f8acf
--- /dev/null
+++ b/core/java/android/annotation/AnimRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an anim resource reference (e.g. {@link android.R.anim#fade_in}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface AnimRes {
+}
diff --git a/core/java/android/annotation/AnimatorRes.java b/core/java/android/annotation/AnimatorRes.java
new file mode 100644
index 0000000..cd4c189
--- /dev/null
+++ b/core/java/android/annotation/AnimatorRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an animator resource reference (e.g. {@link android.R.animator#fade_in}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface AnimatorRes {
+}
diff --git a/core/java/android/annotation/AnyRes.java b/core/java/android/annotation/AnyRes.java
new file mode 100644
index 0000000..44411a0
--- /dev/null
+++ b/core/java/android/annotation/AnyRes.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a resource reference of any type. If the specific type is known, use
+ * one of the more specific annotations instead, such as {@link StringRes} or
+ * {@link DrawableRes}.
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface AnyRes {
+}
diff --git a/core/java/android/annotation/ArrayRes.java b/core/java/android/annotation/ArrayRes.java
new file mode 100644
index 0000000..1407af1
--- /dev/null
+++ b/core/java/android/annotation/ArrayRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an array resource reference (e.g. {@link android.R.array#phoneTypes}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface ArrayRes {
+}
diff --git a/core/java/android/annotation/AttrRes.java b/core/java/android/annotation/AttrRes.java
new file mode 100644
index 0000000..285b80c
--- /dev/null
+++ b/core/java/android/annotation/AttrRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an attribute reference (e.g. {@link android.R.attr#action}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface AttrRes {
+}
diff --git a/core/java/android/annotation/BoolRes.java b/core/java/android/annotation/BoolRes.java
new file mode 100644
index 0000000..f50785b
--- /dev/null
+++ b/core/java/android/annotation/BoolRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a boolean resource reference.
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface BoolRes {
+}
diff --git a/core/java/android/annotation/ColorRes.java b/core/java/android/annotation/ColorRes.java
new file mode 100644
index 0000000..061faa0
--- /dev/null
+++ b/core/java/android/annotation/ColorRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a color resource reference (e.g. {@link android.R.color#black}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface ColorRes {
+}
diff --git a/core/java/android/annotation/DimenRes.java b/core/java/android/annotation/DimenRes.java
new file mode 100644
index 0000000..02ae00c
--- /dev/null
+++ b/core/java/android/annotation/DimenRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a dimension resource reference (e.g. {@link android.R.dimen#app_icon_size}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface DimenRes {
+}
diff --git a/core/java/android/annotation/DrawableRes.java b/core/java/android/annotation/DrawableRes.java
new file mode 100644
index 0000000..ebefa1d
--- /dev/null
+++ b/core/java/android/annotation/DrawableRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a drawable resource reference (e.g. {@link android.R.attr#alertDialogIcon}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface DrawableRes {
+}
diff --git a/core/java/android/annotation/FractionRes.java b/core/java/android/annotation/FractionRes.java
new file mode 100644
index 0000000..fd84d3e
--- /dev/null
+++ b/core/java/android/annotation/FractionRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a fraction resource reference.
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface FractionRes {
+}
diff --git a/core/java/android/annotation/IdRes.java b/core/java/android/annotation/IdRes.java
new file mode 100644
index 0000000..b286965
--- /dev/null
+++ b/core/java/android/annotation/IdRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an id resource reference (e.g. {@link android.R.id#copy}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface IdRes {
+}
diff --git a/core/java/android/annotation/IntDef.java b/core/java/android/annotation/IntDef.java
new file mode 100644
index 0000000..3cae9c5
--- /dev/null
+++ b/core/java/android/annotation/IntDef.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+/**
+ * Denotes that the annotated element of integer type, represents
+ * a logical type and that its value should be one of the explicitly
+ * named constants. If the {@link #flag()} attribute is set to true,
+ * multiple constants can be combined.
+ * <p>
+ * Example:
+ * <pre>{@code
+ *  &#64;Retention(CLASS)
+ *  &#64;IntDef(&#123;NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS&#125;)
+ *  public &#64;interface NavigationMode &#123;&#125;
+ *  public static final int NAVIGATION_MODE_STANDARD = 0;
+ *  public static final int NAVIGATION_MODE_LIST = 1;
+ *  public static final int NAVIGATION_MODE_TABS = 2;
+ *  ...
+ *  public abstract void setNavigationMode(&#64;NavigationMode int mode);
+ *  &#64;NavigationMode
+ *  public abstract int getNavigationMode();
+ * }</pre>
+ * For a flag, set the flag attribute:
+ * <pre>{@code
+ *  &#64;IntDef(
+ *      flag = true
+ *      value = &#123;NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS&#125;)
+ * }</pre>
+ *
+ * @hide
+ */
+@Retention(CLASS)
+@Target({ANNOTATION_TYPE})
+public @interface IntDef {
+    /** Defines the allowed constants for this element */
+    long[] value() default {};
+
+    /** Defines whether the constants can be used as a flag, or just as an enum (the default) */
+    boolean flag() default false;
+}
diff --git a/core/java/android/annotation/IntegerRes.java b/core/java/android/annotation/IntegerRes.java
new file mode 100644
index 0000000..5313f4a
--- /dev/null
+++ b/core/java/android/annotation/IntegerRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an integer resource reference (e.g. {@link android.R.integer#config_shortAnimTime}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface IntegerRes {
+}
diff --git a/core/java/android/annotation/InterpolatorRes.java b/core/java/android/annotation/InterpolatorRes.java
new file mode 100644
index 0000000..8877a5f
--- /dev/null
+++ b/core/java/android/annotation/InterpolatorRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an interpolator resource reference (e.g. {@link android.R.interpolator#cycle}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface InterpolatorRes {
+}
diff --git a/core/java/android/annotation/LayoutRes.java b/core/java/android/annotation/LayoutRes.java
new file mode 100644
index 0000000..15ba86f
--- /dev/null
+++ b/core/java/android/annotation/LayoutRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a layout resource reference (e.g. {@link android.R.layout#list_content}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface LayoutRes {
+}
diff --git a/core/java/android/annotation/MenuRes.java b/core/java/android/annotation/MenuRes.java
new file mode 100644
index 0000000..b6dcc46
--- /dev/null
+++ b/core/java/android/annotation/MenuRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a menu resource reference.
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface MenuRes {
+}
diff --git a/core/java/android/annotation/NonNull.java b/core/java/android/annotation/NonNull.java
new file mode 100644
index 0000000..3ca9eea
--- /dev/null
+++ b/core/java/android/annotation/NonNull.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that a parameter, field or method return value can never be null.
+ * <p>
+ * This is a marker annotation and it has no specific attributes.
+ *
+ * @hide
+ */
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface NonNull {
+}
diff --git a/core/java/android/annotation/Nullable.java b/core/java/android/annotation/Nullable.java
new file mode 100644
index 0000000..43f42fa
--- /dev/null
+++ b/core/java/android/annotation/Nullable.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that a parameter, field or method return value can be null.
+ * <p>
+ * When decorating a method call parameter, this denotes that the parameter can
+ * legitimately be null and the method will gracefully deal with it. Typically
+ * used on optional parameters.
+ * <p>
+ * When decorating a method, this denotes the method might legitimately return
+ * null.
+ * <p>
+ * This is a marker annotation and it has no specific attributes.
+ *
+ * @hide
+ */
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface Nullable {
+}
diff --git a/core/java/android/annotation/PluralsRes.java b/core/java/android/annotation/PluralsRes.java
new file mode 100644
index 0000000..31ac729
--- /dev/null
+++ b/core/java/android/annotation/PluralsRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a plurals resource reference.
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface PluralsRes {
+}
diff --git a/core/java/android/annotation/RawRes.java b/core/java/android/annotation/RawRes.java
new file mode 100644
index 0000000..39970b3
--- /dev/null
+++ b/core/java/android/annotation/RawRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a raw resource reference.
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface RawRes {
+}
diff --git a/core/java/android/annotation/StringDef.java b/core/java/android/annotation/StringDef.java
new file mode 100644
index 0000000..5f7f380
--- /dev/null
+++ b/core/java/android/annotation/StringDef.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.RetentionPolicy.CLASS;
+
+/**
+ * Denotes that the annotated String element, represents a logical
+ * type and that its value should be one of the explicitly named constants.
+ * <p>
+ * Example:
+ * <pre>{@code
+ *  &#64;Retention(SOURCE)
+ *  &#64;StringDef(&#123;
+ *     POWER_SERVICE,
+ *     WINDOW_SERVICE,
+ *     LAYOUT_INFLATER_SERVICE
+ *  &#125;)
+ *  public &#64;interface ServiceName &#123;&#125;
+ *  public static final String POWER_SERVICE = "power";
+ *  public static final String WINDOW_SERVICE = "window";
+ *  public static final String LAYOUT_INFLATER_SERVICE = "layout_inflater";
+ *  ...
+ *  public abstract Object getSystemService(&#64;ServiceName String name);
+ * }</pre>
+ *
+ * @hide
+ */
+@Retention(CLASS)
+@Target({ANNOTATION_TYPE})
+public @interface StringDef {
+    /** Defines the allowed constants for this element */
+    String[] value() default {};
+}
diff --git a/core/java/android/annotation/StringRes.java b/core/java/android/annotation/StringRes.java
new file mode 100644
index 0000000..190b68a
--- /dev/null
+++ b/core/java/android/annotation/StringRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be a String resource reference (e.g. {@link android.R.string#ok}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface StringRes {
+}
diff --git a/core/java/android/annotation/StyleRes.java b/core/java/android/annotation/StyleRes.java
new file mode 100644
index 0000000..4453b8d
--- /dev/null
+++ b/core/java/android/annotation/StyleRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that a integer parameter, field or method return value is expected
+ * to be a style resource reference (e.g. {@link android.R.style#TextAppearance}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface StyleRes {
+}
diff --git a/core/java/android/annotation/StyleableRes.java b/core/java/android/annotation/StyleableRes.java
new file mode 100644
index 0000000..3c1895e
--- /dev/null
+++ b/core/java/android/annotation/StyleableRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that a integer parameter, field or method return value is expected
+ * to be a styleable resource reference (e.g. {@link android.R.styleable#TextView_text}).
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface StyleableRes {
+}
diff --git a/core/java/android/annotation/XmlRes.java b/core/java/android/annotation/XmlRes.java
new file mode 100644
index 0000000..5fb8a4a
--- /dev/null
+++ b/core/java/android/annotation/XmlRes.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 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 android.annotation;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.SOURCE;
+
+/**
+ * Denotes that an integer parameter, field or method return value is expected
+ * to be an XML resource reference.
+ *
+ * {@hide}
+ */
+@Documented
+@Retention(SOURCE)
+@Target({METHOD, PARAMETER, FIELD})
+public @interface XmlRes {
+}
diff --git a/core/java/android/app/ActionBar.java b/core/java/android/app/ActionBar.java
index c4ddf1f..3c3df01 100644
--- a/core/java/android/app/ActionBar.java
+++ b/core/java/android/app/ActionBar.java
@@ -16,10 +16,15 @@
 
 package android.app;
 
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
+import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
+import android.view.ActionMode;
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewDebug;
@@ -27,28 +32,57 @@
 import android.view.ViewGroup.MarginLayoutParams;
 import android.view.Window;
 import android.widget.SpinnerAdapter;
+import android.widget.Toolbar;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.util.Map;
 
 /**
- * A window feature at the top of the activity that may display the activity title, navigation
- * modes, and other interactive items.
+ * A primary toolbar within the activity that may display the activity title, application-level
+ * navigation affordances, and other interactive items.
+ *
  * <p>Beginning with Android 3.0 (API level 11), the action bar appears at the top of an
  * activity's window when the activity uses the system's {@link
  * android.R.style#Theme_Holo Holo} theme (or one of its descendant themes), which is the default.
  * You may otherwise add the action bar by calling {@link
  * android.view.Window#requestFeature requestFeature(FEATURE_ACTION_BAR)} or by declaring it in a
  * custom theme with the {@link android.R.styleable#Theme_windowActionBar windowActionBar} property.
- * <p>By default, the action bar shows the application icon on
+ * </p>
+ *
+ * <p>Beginning with Android L (API level 21), the action bar may be represented by any
+ * Toolbar widget within the application layout. The application may signal to the Activity
+ * which Toolbar should be treated as the Activity's action bar. Activities that use this
+ * feature should use one of the supplied <code>.NoActionBar</code> themes, set the
+ * {@link android.R.styleable#Theme_windowActionBar windowActionBar} attribute to <code>false</code>
+ * or otherwise not request the window feature.</p>
+ *
+ * <p>By adjusting the window features requested by the theme and the layouts used for
+ * an Activity's content view, an app can use the standard system action bar on older platform
+ * releases and the newer inline toolbars on newer platform releases. The <code>ActionBar</code>
+ * object obtained from the Activity can be used to control either configuration transparently.</p>
+ *
+ * <p>When using the Holo themes the action bar shows the application icon on
  * the left, followed by the activity title. If your activity has an options menu, you can make
  * select items accessible directly from the action bar as "action items". You can also
  * modify various characteristics of the action bar or remove it completely.</p>
+ *
+ * <p>When using the Quantum themes (default in API 21 or newer) the navigation button
+ * (formerly "Home") takes over the space previously occupied by the application icon.
+ * Apps wishing to express a stronger branding should use their brand colors heavily
+ * in the action bar and other application chrome or use a {@link #setLogo(int) logo}
+ * in place of their standard title text.</p>
+ *
  * <p>From your activity, you can retrieve an instance of {@link ActionBar} by calling {@link
  * android.app.Activity#getActionBar getActionBar()}.</p>
+ *
  * <p>In some cases, the action bar may be overlayed by another bar that enables contextual actions,
  * using an {@link android.view.ActionMode}. For example, when the user selects one or more items in
  * your activity, you can enable an action mode that offers actions specific to the selected
  * items, with a UI that temporarily replaces the action bar. Although the UI may occupy the
  * same space, the {@link android.view.ActionMode} APIs are distinct and independent from those for
- * {@link ActionBar}.
+ * {@link ActionBar}.</p>
+ *
  * <div class="special reference">
  * <h3>Developer Guides</h3>
  * <p>For information about how to use the action bar, including how to add action items, navigation
@@ -57,11 +91,21 @@
  * </div>
  */
 public abstract class ActionBar {
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
+    public @interface NavigationMode {}
+
     /**
      * Standard navigation mode. Consists of either a logo or icon
      * and title text with an optional subtitle. Clicking any of these elements
      * will dispatch onOptionsItemSelected to the host Activity with
      * a MenuItem with item ID android.R.id.home.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public static final int NAVIGATION_MODE_STANDARD = 0;
     
@@ -69,15 +113,38 @@
      * List navigation mode. Instead of static title text this mode
      * presents a list menu for navigation within the activity.
      * e.g. this might be presented to the user as a dropdown list.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public static final int NAVIGATION_MODE_LIST = 1;
     
     /**
      * Tab navigation mode. Instead of static title text this mode
      * presents a series of tabs for navigation within the activity.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public static final int NAVIGATION_MODE_TABS = 2;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(flag = true,
+            value = {
+                    DISPLAY_USE_LOGO,
+                    DISPLAY_SHOW_HOME,
+                    DISPLAY_HOME_AS_UP,
+                    DISPLAY_SHOW_TITLE,
+                    DISPLAY_SHOW_CUSTOM,
+                    DISPLAY_TITLE_MULTIPLE_LINES
+            })
+    public @interface DisplayOptions {}
+
     /**
      * Use logo instead of icon if available. This flag will cause appropriate
      * navigation modes to use a wider logo in place of the standard icon.
@@ -264,6 +331,11 @@
      *                within the dropdown navigation menu.
      * @param callback An OnNavigationListener that will receive events when the user
      *                 selects a navigation item.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void setListNavigationCallbacks(SpinnerAdapter adapter,
             OnNavigationListener callback);
@@ -272,6 +344,11 @@
      * Set the selected navigation item in list or tabbed navigation modes.
      *
      * @param position Position of the item to select.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void setSelectedNavigationItem(int position);
 
@@ -279,6 +356,11 @@
      * Get the position of the selected navigation item in list or tabbed navigation modes.
      *
      * @return Position of the selected item.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract int getSelectedNavigationIndex();
 
@@ -286,6 +368,11 @@
      * Get the number of navigation items present in the current navigation mode.
      *
      * @return Number of navigation items.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract int getNavigationItemCount();
 
@@ -341,7 +428,7 @@
      * @param options A combination of the bits defined by the DISPLAY_ constants
      *                defined in ActionBar.
      */
-    public abstract void setDisplayOptions(int options);
+    public abstract void setDisplayOptions(@DisplayOptions int options);
     
     /**
      * Set selected display options. Only the options specified by mask will be changed.
@@ -356,7 +443,7 @@
      *                defined in ActionBar.
      * @param mask A bit mask declaring which display options should be changed.
      */
-    public abstract void setDisplayOptions(int options, int mask);
+    public abstract void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask);
 
     /**
      * Set whether to display the activity logo rather than the activity icon.
@@ -431,7 +518,7 @@
      * @see #setStackedBackgroundDrawable(Drawable)
      * @see #setSplitBackgroundDrawable(Drawable)
      */
-    public abstract void setBackgroundDrawable(Drawable d);
+    public abstract void setBackgroundDrawable(@Nullable Drawable d);
 
     /**
      * Set the ActionBar's stacked background. This will appear
@@ -483,7 +570,13 @@
      * </ul>
      *
      * @return The current navigation mode.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
+    @NavigationMode
     public abstract int getNavigationMode();
 
     /**
@@ -493,8 +586,13 @@
      * @see #NAVIGATION_MODE_STANDARD
      * @see #NAVIGATION_MODE_LIST
      * @see #NAVIGATION_MODE_TABS
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
-    public abstract void setNavigationMode(int mode);
+    public abstract void setNavigationMode(@NavigationMode int mode);
 
     /**
      * @return The current set of display options. 
@@ -514,6 +612,11 @@
      * @return A new Tab
      *
      * @see #addTab(Tab)
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract Tab newTab();
 
@@ -522,6 +625,11 @@
      * If this is the first tab to be added it will become the selected tab.
      *
      * @param tab Tab to add
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void addTab(Tab tab);
 
@@ -530,6 +638,11 @@
      *
      * @param tab Tab to add
      * @param setSelected True if the added tab should become the selected tab.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void addTab(Tab tab, boolean setSelected);
 
@@ -540,6 +653,11 @@
      *
      * @param tab The tab to add
      * @param position The new position of the tab
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void addTab(Tab tab, int position);
 
@@ -550,6 +668,11 @@
      * @param tab The tab to add
      * @param position The new position of the tab
      * @param setSelected True if the added tab should become the selected tab.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void addTab(Tab tab, int position, boolean setSelected);
 
@@ -558,6 +681,11 @@
      * and another tab will be selected if present.
      *
      * @param tab The tab to remove
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void removeTab(Tab tab);
 
@@ -566,11 +694,21 @@
      * and another tab will be selected if present.
      *
      * @param position Position of the tab to remove
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void removeTabAt(int position);
 
     /**
      * Remove all tabs from the action bar and deselect the current tab.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void removeAllTabs();
 
@@ -580,6 +718,11 @@
      * <p>Note: If you want to select by index, use {@link #setSelectedNavigationItem(int)}.</p>
      *
      * @param tab Tab to select
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract void selectTab(Tab tab);
 
@@ -588,6 +731,11 @@
      * one tab present.
      *
      * @return The currently selected tab or null
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract Tab getSelectedTab();
 
@@ -596,12 +744,22 @@
      *
      * @param index Index value in the range 0-get
      * @return
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract Tab getTabAt(int index);
 
     /**
      * Returns the number of tabs currently registered with the action bar.
      * @return Tab count
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public abstract int getTabCount();
 
@@ -775,7 +933,93 @@
     public void setHomeActionContentDescription(int resId) { }
 
     /**
+     * Enable hiding the action bar on content scroll.
+     *
+     * <p>If enabled, the action bar will scroll out of sight along with a
+     * {@link View#setNestedScrollingEnabled(boolean) nested scrolling child} view's content.
+     * The action bar must be in {@link Window#FEATURE_ACTION_BAR_OVERLAY overlay mode}
+     * to enable hiding on content scroll.</p>
+     *
+     * <p>When partially scrolled off screen the action bar is considered
+     * {@link #hide() hidden}. A call to {@link #show() show} will cause it to return to full view.
+     * </p>
+     * @param hideOnContentScroll true to enable hiding on content scroll.
+     */
+    public void setHideOnContentScrollEnabled(boolean hideOnContentScroll) {
+        if (hideOnContentScroll) {
+            throw new UnsupportedOperationException("Hide on content scroll is not supported in " +
+                    "this action bar configuration.");
+        }
+    }
+
+    /**
+     * Return whether the action bar is configured to scroll out of sight along with
+     * a {@link View#setNestedScrollingEnabled(boolean) nested scrolling child}.
+     *
+     * @return true if hide-on-content-scroll is enabled
+     * @see #setHideOnContentScrollEnabled(boolean)
+     */
+    public boolean isHideOnContentScrollEnabled() {
+        return false;
+    }
+
+    /**
+     * Return the current vertical offset of the action bar.
+     *
+     * <p>The action bar's current hide offset is the distance that the action bar is currently
+     * scrolled offscreen in pixels. The valid range is 0 (fully visible) to the action bar's
+     * current measured {@link #getHeight() height} (fully invisible).</p>
+     *
+     * @return The action bar's offset toward its fully hidden state in pixels
+     */
+    public int getHideOffset() {
+        return 0;
+    }
+
+    /**
+     * Set the current hide offset of the action bar.
+     *
+     * <p>The action bar's current hide offset is the distance that the action bar is currently
+     * scrolled offscreen in pixels. The valid range is 0 (fully visible) to the action bar's
+     * current measured {@link #getHeight() height} (fully invisible).</p>
+     *
+     * @param offset The action bar's offset toward its fully hidden state in pixels.
+     */
+    public void setHideOffset(int offset) {
+        if (offset != 0) {
+            throw new UnsupportedOperationException("Setting an explicit action bar hide offset " +
+                    "is not supported in this action bar configuration.");
+        }
+    }
+
+    /** @hide */
+    public void setDefaultDisplayHomeAsUpEnabled(boolean enabled) {
+    }
+
+    /** @hide */
+    public void setShowHideAnimationEnabled(boolean enabled) {
+    }
+
+    /** @hide */
+    public void onConfigurationChanged(Configuration config) {
+    }
+
+    /** @hide */
+    public void dispatchMenuVisibilityChanged(boolean visible) {
+    }
+
+    /** @hide */
+    public ActionMode startActionMode(ActionMode.Callback callback) {
+        return null;
+    }
+
+    /**
      * Listener interface for ActionBar navigation events.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public interface OnNavigationListener {
         /**
@@ -808,6 +1052,11 @@
      * A tab in the action bar.
      *
      * <p>Tabs manage the hiding and showing of {@link Fragment}s.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public static abstract class Tab {
         /**
@@ -959,6 +1208,11 @@
 
     /**
      * Callback interface invoked when a tab is focused, unfocused, added, or removed.
+     *
+     * @deprecated Action bar navigation modes are deprecated and not supported by inline
+     * toolbar action bars. Consider using other
+     * <a href="http://developer.android.com/design/patterns/navigation.html">common
+     * navigation patterns</a> instead.
      */
     public interface TabListener {
         /**
@@ -1000,31 +1254,31 @@
      *
      * @attr ref android.R.styleable#ActionBar_LayoutParams_layout_gravity
      */
-    public static class LayoutParams extends MarginLayoutParams {
+    public static class LayoutParams extends ViewGroup.MarginLayoutParams {
         /**
          * Gravity for the view associated with these LayoutParams.
          *
          * @see android.view.Gravity
          */
         @ViewDebug.ExportedProperty(category = "layout", mapping = {
-            @ViewDebug.IntToString(from =  -1,                       to = "NONE"),
-            @ViewDebug.IntToString(from = Gravity.NO_GRAVITY,        to = "NONE"),
-            @ViewDebug.IntToString(from = Gravity.TOP,               to = "TOP"),
-            @ViewDebug.IntToString(from = Gravity.BOTTOM,            to = "BOTTOM"),
-            @ViewDebug.IntToString(from = Gravity.LEFT,              to = "LEFT"),
-            @ViewDebug.IntToString(from = Gravity.RIGHT,             to = "RIGHT"),
-            @ViewDebug.IntToString(from = Gravity.START,             to = "START"),
-            @ViewDebug.IntToString(from = Gravity.END,               to = "END"),
-            @ViewDebug.IntToString(from = Gravity.CENTER_VERTICAL,   to = "CENTER_VERTICAL"),
-            @ViewDebug.IntToString(from = Gravity.FILL_VERTICAL,     to = "FILL_VERTICAL"),
-            @ViewDebug.IntToString(from = Gravity.CENTER_HORIZONTAL, to = "CENTER_HORIZONTAL"),
-            @ViewDebug.IntToString(from = Gravity.FILL_HORIZONTAL,   to = "FILL_HORIZONTAL"),
-            @ViewDebug.IntToString(from = Gravity.CENTER,            to = "CENTER"),
-            @ViewDebug.IntToString(from = Gravity.FILL,              to = "FILL")
+                @ViewDebug.IntToString(from =  -1,                       to = "NONE"),
+                @ViewDebug.IntToString(from = Gravity.NO_GRAVITY,        to = "NONE"),
+                @ViewDebug.IntToString(from = Gravity.TOP,               to = "TOP"),
+                @ViewDebug.IntToString(from = Gravity.BOTTOM,            to = "BOTTOM"),
+                @ViewDebug.IntToString(from = Gravity.LEFT,              to = "LEFT"),
+                @ViewDebug.IntToString(from = Gravity.RIGHT,             to = "RIGHT"),
+                @ViewDebug.IntToString(from = Gravity.START,             to = "START"),
+                @ViewDebug.IntToString(from = Gravity.END,               to = "END"),
+                @ViewDebug.IntToString(from = Gravity.CENTER_VERTICAL,   to = "CENTER_VERTICAL"),
+                @ViewDebug.IntToString(from = Gravity.FILL_VERTICAL,     to = "FILL_VERTICAL"),
+                @ViewDebug.IntToString(from = Gravity.CENTER_HORIZONTAL, to = "CENTER_HORIZONTAL"),
+                @ViewDebug.IntToString(from = Gravity.FILL_HORIZONTAL,   to = "FILL_HORIZONTAL"),
+                @ViewDebug.IntToString(from = Gravity.CENTER,            to = "CENTER"),
+                @ViewDebug.IntToString(from = Gravity.FILL,              to = "FILL")
         })
         public int gravity = Gravity.NO_GRAVITY;
 
-        public LayoutParams(Context c, AttributeSet attrs) {
+        public LayoutParams(@NonNull Context c, AttributeSet attrs) {
             super(c, attrs);
 
             TypedArray a = c.obtainStyledAttributes(attrs,
@@ -1037,11 +1291,11 @@
 
         public LayoutParams(int width, int height) {
             super(width, height);
-            this.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
         }
 
         public LayoutParams(int width, int height, int gravity) {
             super(width, height);
+
             this.gravity = gravity;
         }
 
@@ -1051,12 +1305,14 @@
 
         public LayoutParams(LayoutParams source) {
             super(source);
-
-            this.gravity = source.gravity;
         }
 
         public LayoutParams(ViewGroup.LayoutParams source) {
             super(source);
         }
+
+        public LayoutParams(MarginLayoutParams source) {
+            super(source);
+        }
     }
 }
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 63c9fec..8981c88 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -16,11 +16,19 @@
 
 package android.app;
 
+import android.annotation.NonNull;
+import android.transition.Scene;
+import android.transition.TransitionManager;
 import android.util.ArrayMap;
 import android.util.SuperNotCalledException;
-import com.android.internal.app.ActionBarImpl;
+import android.widget.Toolbar;
+import com.android.internal.app.IVoiceInteractor;
+import com.android.internal.app.WindowDecorActionBar;
+import com.android.internal.app.ToolbarActionBar;
 import com.android.internal.policy.PolicyManager;
 
+import android.annotation.IntDef;
+import android.annotation.Nullable;
 import android.content.ComponentCallbacks2;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -84,6 +92,8 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -714,9 +724,11 @@
     /*package*/ boolean mWindowAdded = false;
     /*package*/ boolean mVisibleFromServer = false;
     /*package*/ boolean mVisibleFromClient = true;
-    /*package*/ ActionBarImpl mActionBar = null;
+    /*package*/ ActionBar mActionBar = null;
     private boolean mEnableDefaultActionBarUp;
 
+    private VoiceInteractor mVoiceInteractor;
+
     private CharSequence mTitle;
     private int mTitleColor = 0;
 
@@ -763,6 +775,8 @@
 
     private Thread mUiThread;
     final Handler mHandler = new Handler();
+    private ActivityOptions mCalledActivityOptions;
+    private EnterTransitionCoordinator mEnterTransitionCoordinator;
 
     /** Return the intent that started this activity. */
     public Intent getIntent() {
@@ -852,6 +866,7 @@
      * @see #getWindow
      * @see android.view.Window#getCurrentFocus
      */
+    @Nullable
     public View getCurrentFocus() {
         return mWindow != null ? mWindow.getCurrentFocus() : null;
     }
@@ -882,7 +897,7 @@
      * @see #onRestoreInstanceState
      * @see #onPostCreate
      */
-    protected void onCreate(Bundle savedInstanceState) {
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
         if (DEBUG_LIFECYCLE) Slog.v(TAG, "onCreate " + this + ": " + savedInstanceState);
         if (mLastNonConfigurationInstances != null) {
             mAllLoaderManagers = mLastNonConfigurationInstances.loaders;
@@ -1010,18 +1025,21 @@
      *     recently supplied in {@link #onSaveInstanceState}.  <b><i>Note: Otherwise it is null.</i></b>
      * @see #onCreate
      */
-    protected void onPostCreate(Bundle savedInstanceState) {
+    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
         if (!isChild()) {
             mTitleReady = true;
             onTitleChanged(getTitle(), getTitleColor());
         }
+        if (mEnterTransitionCoordinator != null) {
+            mEnterTransitionCoordinator.readyToEnter();
+        }
         mCalled = true;
     }
 
     /**
      * Called after {@link #onCreate} &mdash; or after {@link #onRestart} when  
      * the activity had been stopped, but is now again being displayed to the 
-	 * user.  It will be followed by {@link #onResume}.
+     * user.  It will be followed by {@link #onResume}.
      *
      * <p><em>Derived classes must call through to the super class's
      * implementation of this method.  If they do not, an exception will be
@@ -1095,6 +1113,7 @@
     protected void onResume() {
         if (DEBUG_LIFECYCLE) Slog.v(TAG, "onResume " + this);
         getApplication().dispatchActivityResumed(this);
+        mCalledActivityOptions = null;
         mCalled = true;
     }
 
@@ -1118,6 +1137,23 @@
     }
 
     /**
+     * Check whether this activity is running as part of a voice interaction with the user.
+     * If true, it should perform its interaction with the user through the
+     * {@link VoiceInteractor} returned by {@link #getVoiceInteractor}.
+     */
+    public boolean isVoiceInteraction() {
+        return mVoiceInteractor != null;
+    }
+
+    /**
+     * Retrieve the active {@link VoiceInteractor} that the user is going through to
+     * interact with this activity.
+     */
+    public VoiceInteractor getVoiceInteractor() {
+        return mVoiceInteractor;
+    }
+
+    /**
      * This is called for activities that set launchMode to "singleTop" in
      * their package, or if a client used the {@link Intent#FLAG_ACTIVITY_SINGLE_TOP}
      * flag when calling {@link #startActivity}.  In either case, when the
@@ -1347,6 +1383,7 @@
      * @see #onSaveInstanceState
      * @see #onPause
      */
+    @Nullable
     public CharSequence onCreateDescription() {
         return null;
     }
@@ -1386,6 +1423,10 @@
     protected void onStop() {
         if (DEBUG_LIFECYCLE) Slog.v(TAG, "onStop " + this);
         if (mActionBar != null) mActionBar.setShowHideAnimationEnabled(false);
+        if (mCalledActivityOptions != null) {
+            mCalledActivityOptions.dispatchActivityStopped();
+            mCalledActivityOptions = null;
+        }
         getApplication().dispatchActivityStopped(this);
         mTranslucentCallback = null;
         mCalled = true;
@@ -1551,6 +1592,7 @@
      * {@link Fragment#setRetainInstance(boolean)} instead; this is also
      * available on older platforms through the Android compatibility package.
      */
+    @Nullable
     @Deprecated
     public Object getLastNonConfigurationInstance() {
         return mLastNonConfigurationInstances != null
@@ -1630,6 +1672,7 @@
      * @return Returns the object previously returned by
      * {@link #onRetainNonConfigurationChildInstances()}
      */
+    @Nullable
     HashMap<String, Object> getLastNonConfigurationChildInstances() {
         return mLastNonConfigurationInstances != null
                 ? mLastNonConfigurationInstances.children : null;
@@ -1642,6 +1685,7 @@
      * set of child activities, such as ActivityGroup.  The same guarantees and restrictions apply
      * as for {@link #onRetainNonConfigurationInstance()}.  The default implementation returns null.
      */
+    @Nullable
     HashMap<String,Object> onRetainNonConfigurationChildInstances() {
         return null;
     }
@@ -1889,16 +1933,41 @@
      *
      * @return The Activity's ActionBar, or null if it does not have one.
      */
+    @Nullable
     public ActionBar getActionBar() {
-        initActionBar();
+        initWindowDecorActionBar();
         return mActionBar;
     }
+
+    /**
+     * Set a {@link android.widget.Toolbar Toolbar} to act as the {@link ActionBar} for this
+     * Activity window.
+     *
+     * <p>When set to a non-null value the {@link #getActionBar()} method will return
+     * an {@link ActionBar} object that can be used to control the given toolbar as if it were
+     * a traditional window decor action bar. The toolbar's menu will be populated with the
+     * Activity's options menu and the navigation button will be wired through the standard
+     * {@link android.R.id#home home} menu select action.</p>
+     *
+     * <p>In order to use a Toolbar within the Activity's window content the application
+     * must not request the window feature {@link Window#FEATURE_ACTION_BAR FEATURE_ACTION_BAR}.</p>
+     *
+     * @param actionBar Toolbar to set as the Activity's action bar
+     */
+    public void setActionBar(@Nullable Toolbar actionBar) {
+        if (getActionBar() instanceof WindowDecorActionBar) {
+            throw new IllegalStateException("This Activity already has an action bar supplied " +
+                    "by the window decor. Do not request Window.FEATURE_ACTION_BAR and set " +
+                    "android:windowActionBar to false in your theme to use a Toolbar instead.");
+        }
+        mActionBar = new ToolbarActionBar(actionBar);
+    }
     
     /**
      * Creates a new ActionBar, locates the inflated ActionBarView,
      * initializes the ActionBar with the view, and sets mActionBar.
      */
-    private void initActionBar() {
+    private void initWindowDecorActionBar() {
         Window window = getWindow();
 
         // Initializing the window decor can change window feature flags.
@@ -1909,7 +1978,7 @@
             return;
         }
 
-        mActionBar = new ActionBarImpl(this);
+        mActionBar = new WindowDecorActionBar(this);
         mActionBar.setDefaultDisplayHomeAsUpEnabled(mEnableDefaultActionBarUp);
 
         mWindow.setDefaultIcon(mActivityInfo.getIconResource());
@@ -1927,7 +1996,7 @@
      */
     public void setContentView(int layoutResID) {
         getWindow().setContentView(layoutResID);
-        initActionBar();
+        initWindowDecorActionBar();
     }
 
     /**
@@ -1947,7 +2016,7 @@
      */
     public void setContentView(View view) {
         getWindow().setContentView(view);
-        initActionBar();
+        initWindowDecorActionBar();
     }
 
     /**
@@ -1963,7 +2032,7 @@
      */
     public void setContentView(View view, ViewGroup.LayoutParams params) {
         getWindow().setContentView(view, params);
-        initActionBar();
+        initWindowDecorActionBar();
     }
 
     /**
@@ -1975,7 +2044,42 @@
      */
     public void addContentView(View view, ViewGroup.LayoutParams params) {
         getWindow().addContentView(view, params);
-        initActionBar();
+        initWindowDecorActionBar();
+    }
+
+    /**
+     * Retrieve the {@link TransitionManager} responsible for default transitions in this window.
+     * Requires {@link Window#FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * <p>This method will return non-null after content has been initialized (e.g. by using
+     * {@link #setContentView}) if {@link Window#FEATURE_CONTENT_TRANSITIONS} has been granted.</p>
+     *
+     * @return This window's content TransitionManager or null if none is set.
+     */
+    public TransitionManager getContentTransitionManager() {
+        return getWindow().getTransitionManager();
+    }
+
+    /**
+     * Set the {@link TransitionManager} to use for default transitions in this window.
+     * Requires {@link Window#FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * @param tm The TransitionManager to use for scene changes.
+     */
+    public void setContentTransitionManager(TransitionManager tm) {
+        getWindow().setTransitionManager(tm);
+    }
+
+    /**
+     * Retrieve the {@link Scene} representing this window's current content.
+     * Requires {@link Window#FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * <p>This method will return null if the current content is not represented by a Scene.</p>
+     *
+     * @return Current Scene being shown or null
+     */
+    public Scene getContentScene() {
+        return getWindow().getContentScene();
     }
 
     /**
@@ -1985,7 +2089,17 @@
     public void setFinishOnTouchOutside(boolean finish) {
         mWindow.setCloseOnTouchOutside(finish);
     }
-    
+
+    /** @hide */
+    @IntDef({
+            DEFAULT_KEYS_DISABLE,
+            DEFAULT_KEYS_DIALER,
+            DEFAULT_KEYS_SHORTCUT,
+            DEFAULT_KEYS_SEARCH_LOCAL,
+            DEFAULT_KEYS_SEARCH_GLOBAL})
+    @Retention(RetentionPolicy.SOURCE)
+    @interface DefaultKeyMode {}
+
     /**
      * Use with {@link #setDefaultKeyMode} to turn off default handling of
      * keys.
@@ -2055,7 +2169,7 @@
      * @see #DEFAULT_KEYS_SEARCH_GLOBAL
      * @see #onKeyDown
      */
-    public final void setDefaultKeyMode(int mode) {
+    public final void setDefaultKeyMode(@DefaultKeyMode int mode) {
         mDefaultKeyMode = mode;
         
         // Some modes use a SpannableStringBuilder to track & dispatch input events
@@ -2213,7 +2327,7 @@
      */
     public void onBackPressed() {
         if (!mFragments.popBackStackImmediate()) {
-            finish();
+            finishWithTransition();
         }
     }
 
@@ -2528,6 +2642,7 @@
      * simply returns null so that all panel sub-windows will have the default
      * menu behavior.
      */
+    @Nullable
     public View onCreatePanelView(int featureId) {
         return null;
     }
@@ -2574,7 +2689,7 @@
      */
     public boolean onMenuOpened(int featureId, Menu menu) {
         if (featureId == Window.FEATURE_ACTION_BAR) {
-            initActionBar();
+            initWindowDecorActionBar();
             if (mActionBar != null) {
                 mActionBar.dispatchMenuVisibilityChanged(true);
             } else {
@@ -2655,7 +2770,7 @@
                 break;
 
             case Window.FEATURE_ACTION_BAR:
-                initActionBar();
+                initWindowDecorActionBar();
                 mActionBar.dispatchMenuVisibilityChanged(false);
                 break;
         }
@@ -3025,6 +3140,7 @@
      * {@link FragmentManager} instead; this is also
      * available on older platforms through the Android compatibility package.
      */
+    @Nullable
     @Deprecated
     protected Dialog onCreateDialog(int id, Bundle args) {
         return onCreateDialog(id);
@@ -3112,6 +3228,7 @@
      * {@link FragmentManager} instead; this is also
      * available on older platforms through the Android compatibility package.
      */
+    @Nullable
     @Deprecated
     public final boolean showDialog(int id, Bundle args) {
         if (mManagedDialogs == null) {
@@ -3233,13 +3350,13 @@
      * <p>It is typically called from onSearchRequested(), either directly from 
      * Activity.onSearchRequested() or from an overridden version in any given 
      * Activity.  If your goal is simply to activate search, it is preferred to call
-     * onSearchRequested(), which may have been overriden elsewhere in your Activity.  If your goal
+     * onSearchRequested(), which may have been overridden elsewhere in your Activity.  If your goal
      * is to inject specific data such as context data, it is preferred to <i>override</i>
      * onSearchRequested(), so that any callers to it will benefit from the override.
      * 
      * @param initialQuery Any non-null non-empty string will be inserted as 
      * pre-entered text in the search query box.
-     * @param selectInitialQuery If true, the intial query will be preselected, which means that
+     * @param selectInitialQuery If true, the initial query will be preselected, which means that
      * any further typing will replace it.  This is useful for cases where an entire pre-formed
      * query is being inserted.  If false, the selection point will be placed at the end of the
      * inserted query.  This is useful when the inserted query is text that the user entered,
@@ -3257,11 +3374,11 @@
      * @see android.app.SearchManager
      * @see #onSearchRequested
      */
-    public void startSearch(String initialQuery, boolean selectInitialQuery, 
-            Bundle appSearchData, boolean globalSearch) {
+    public void startSearch(@Nullable String initialQuery, boolean selectInitialQuery,
+            @Nullable Bundle appSearchData, boolean globalSearch) {
         ensureSearchManager();
         mSearchManager.startSearch(initialQuery, selectInitialQuery, getComponentName(),
-                        appSearchData, globalSearch); 
+                appSearchData, globalSearch); 
     }
 
     /**
@@ -3274,7 +3391,7 @@
      * searches.  This data will be returned with SEARCH intent(s).  Null if
      * no extra data is required.
      */
-    public void triggerSearch(String query, Bundle appSearchData) {
+    public void triggerSearch(String query, @Nullable Bundle appSearchData) {
         ensureSearchManager();
         mSearchManager.triggerSearch(query, getComponentName(), appSearchData);
     }
@@ -3341,6 +3458,7 @@
      * Convenience for calling
      * {@link android.view.Window#getLayoutInflater}.
      */
+    @NonNull
     public LayoutInflater getLayoutInflater() {
         return getWindow().getLayoutInflater();
     }
@@ -3348,10 +3466,11 @@
     /**
      * Returns a {@link MenuInflater} with this context.
      */
+    @NonNull
     public MenuInflater getMenuInflater() {
         // Make sure that action views can get an appropriate theme.
         if (mMenuInflater == null) {
-            initActionBar();
+            initWindowDecorActionBar();
             if (mActionBar != null) {
                 mMenuInflater = new MenuInflater(mActionBar.getThemedContext(), this);
             } else {
@@ -3386,16 +3505,20 @@
      *
      * @throws android.content.ActivityNotFoundException
      *
-     * @see #startActivity 
+     * @see #startActivity
      */
     public void startActivityForResult(Intent intent, int requestCode) {
-        startActivityForResult(intent, requestCode, null);
+        Bundle options = null;
+        if (mWindow.hasFeature(Window.FEATURE_CONTENT_TRANSITIONS)) {
+            options = ActivityOptions.makeSceneTransitionAnimation(mWindow, null).toBundle();
+        }
+        startActivityForResult(intent, requestCode, options);
     }
 
     /**
      * Launch an activity for which you would like a result when it finished.
      * When this activity exits, your
-     * onActivityResult() method will be called with the given requestCode. 
+     * onActivityResult() method will be called with the given requestCode.
      * Using a negative requestCode is the same as calling 
      * {@link #startActivity} (the activity is not launched as a sub-activity).
      *
@@ -3408,9 +3531,9 @@
      *
      * <p>As a special case, if you call startActivityForResult() with a requestCode 
      * >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your
-     * activity, then your window will not be displayed until a result is 
-     * returned back from the started activity.  This is to avoid visible 
-     * flickering when redirecting to another activity. 
+     * activity, then your window will not be displayed until a result is
+     * returned back from the started activity.  This is to avoid visible
+     * flickering when redirecting to another activity.
      *
      * <p>This method throws {@link android.content.ActivityNotFoundException}
      * if there was no Activity found to run the given Intent.
@@ -3424,9 +3547,14 @@
      *
      * @throws android.content.ActivityNotFoundException
      *
-     * @see #startActivity 
+     * @see #startActivity
      */
-    public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
+    public void startActivityForResult(Intent intent, int requestCode, @Nullable Bundle options) {
+        if (options != null) {
+            ActivityOptions activityOptions = new ActivityOptions(options);
+            activityOptions.dispatchStartExit();
+            mCalledActivityOptions = activityOptions;
+        }
         if (mParent == null) {
             Instrumentation.ActivityResult ar =
                 mInstrumentation.execStartActivity(
@@ -3505,7 +3633,7 @@
      * @param extraFlags Always set to 0.
      */
     public void startIntentSenderForResult(IntentSender intent, int requestCode,
-            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
+            @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
             throws IntentSender.SendIntentException {
         startIntentSenderForResult(intent, requestCode, fillInIntent, flagsMask,
                 flagsValues, extraFlags, null);
@@ -3537,7 +3665,7 @@
      * override any that conflict with those given by the IntentSender.
      */
     public void startIntentSenderForResult(IntentSender intent, int requestCode,
-            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
+            @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
             Bundle options) throws IntentSender.SendIntentException {
         if (mParent == null) {
             startIntentSenderForResultInner(intent, requestCode, fillInIntent,
@@ -3599,7 +3727,7 @@
      */
     @Override
     public void startActivity(Intent intent) {
-        startActivity(intent, null);
+        this.startActivity(intent, null);
     }
 
     /**
@@ -3625,7 +3753,7 @@
      * @see #startActivityForResult 
      */
     @Override
-    public void startActivity(Intent intent, Bundle options) {
+    public void startActivity(Intent intent, @Nullable Bundle options) {
         if (options != null) {
             startActivityForResult(intent, -1, options);
         } else {
@@ -3674,7 +3802,7 @@
      * @see #startActivityForResult
      */
     @Override
-    public void startActivities(Intent[] intents, Bundle options) {
+    public void startActivities(Intent[] intents, @Nullable Bundle options) {
         mInstrumentation.execStartActivities(this, mMainThread.getApplicationThread(),
                 mToken, this, intents, options);
     }
@@ -3693,7 +3821,7 @@
      * @param extraFlags Always set to 0.
      */
     public void startIntentSender(IntentSender intent,
-            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
+            @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
             throws IntentSender.SendIntentException {
         startIntentSender(intent, fillInIntent, flagsMask, flagsValues,
                 extraFlags, null);
@@ -3720,7 +3848,7 @@
      * override any that conflict with those given by the IntentSender.
      */
     public void startIntentSender(IntentSender intent,
-            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
+            @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
             Bundle options) throws IntentSender.SendIntentException {
         if (options != null) {
             startIntentSenderForResult(intent, -1, fillInIntent, flagsMask,
@@ -3748,7 +3876,7 @@
      * @see #startActivity
      * @see #startActivityForResult
      */
-    public boolean startActivityIfNeeded(Intent intent, int requestCode) {
+    public boolean startActivityIfNeeded(@NonNull Intent intent, int requestCode) {
         return startActivityIfNeeded(intent, requestCode, null);
     }
 
@@ -3782,7 +3910,8 @@
      * @see #startActivity
      * @see #startActivityForResult
      */
-    public boolean startActivityIfNeeded(Intent intent, int requestCode, Bundle options) {
+    public boolean startActivityIfNeeded(@NonNull Intent intent, int requestCode,
+            @Nullable Bundle options) {
         if (mParent == null) {
             int result = ActivityManager.START_RETURN_INTENT_TO_CALLER;
             try {
@@ -3831,7 +3960,7 @@
      * wasn't.  In general, if true is returned you will then want to call
      * finish() on yourself.
      */
-    public boolean startNextMatchingActivity(Intent intent) {
+    public boolean startNextMatchingActivity(@NonNull Intent intent) {
         return startNextMatchingActivity(intent, null);
     }
 
@@ -3854,7 +3983,7 @@
      * wasn't.  In general, if true is returned you will then want to call
      * finish() on yourself.
      */
-    public boolean startNextMatchingActivity(Intent intent, Bundle options) {
+    public boolean startNextMatchingActivity(@NonNull Intent intent, @Nullable Bundle options) {
         if (mParent == null) {
             try {
                 intent.migrateExtraStreamToClipData();
@@ -3884,7 +4013,7 @@
      * @see #startActivity
      * @see #startActivityForResult
      */
-    public void startActivityFromChild(Activity child, Intent intent,
+    public void startActivityFromChild(@NonNull Activity child, Intent intent,
             int requestCode) {
         startActivityFromChild(child, intent, requestCode, null);
     }
@@ -3908,8 +4037,8 @@
      * @see #startActivity 
      * @see #startActivityForResult 
      */
-    public void startActivityFromChild(Activity child, Intent intent, 
-            int requestCode, Bundle options) {
+    public void startActivityFromChild(@NonNull Activity child, Intent intent,
+            int requestCode, @Nullable Bundle options) {
         Instrumentation.ActivityResult ar =
             mInstrumentation.execStartActivity(
                 this, mMainThread.getApplicationThread(), mToken, child,
@@ -3934,7 +4063,7 @@
      * @see Fragment#startActivity
      * @see Fragment#startActivityForResult
      */
-    public void startActivityFromFragment(Fragment fragment, Intent intent, 
+    public void startActivityFromFragment(@NonNull Fragment fragment, Intent intent,
             int requestCode) {
         startActivityFromFragment(fragment, intent, requestCode, null);
     }
@@ -3959,8 +4088,8 @@
      * @see Fragment#startActivity 
      * @see Fragment#startActivityForResult 
      */
-    public void startActivityFromFragment(Fragment fragment, Intent intent, 
-            int requestCode, Bundle options) {
+    public void startActivityFromFragment(@NonNull Fragment fragment, Intent intent,
+            int requestCode, @Nullable Bundle options) {
         Instrumentation.ActivityResult ar =
             mInstrumentation.execStartActivity(
                 this, mMainThread.getApplicationThread(), mToken, fragment,
@@ -3992,7 +4121,7 @@
      */
     public void startIntentSenderFromChild(Activity child, IntentSender intent,
             int requestCode, Intent fillInIntent, int flagsMask, int flagsValues,
-            int extraFlags, Bundle options)
+            int extraFlags, @Nullable Bundle options)
             throws IntentSender.SendIntentException {
         startIntentSenderForResultInner(intent, requestCode, fillInIntent,
                 flagsMask, flagsValues, child, options);
@@ -4091,6 +4220,7 @@
      * @return The package of the activity that will receive your
      *         reply, or null if none.
      */
+    @Nullable
     public String getCallingPackage() {
         try {
             return ActivityManagerNative.getDefault().getCallingPackage(mToken);
@@ -4113,6 +4243,7 @@
      * @return The ComponentName of the activity that will receive your
      *         reply, or null if none.
      */
+    @Nullable
     public ComponentName getCallingActivity() {
         try {
             return ActivityManagerNative.getDefault().getCallingActivity(mToken);
@@ -4203,11 +4334,10 @@
     }
 
     /**
-     * Call this when your activity is done and should be closed.  The
-     * ActivityResult is propagated back to whoever launched you via
-     * onActivityResult().
+     * Finishes the current activity and specifies whether to remove the task associated with this
+     * activity.
      */
-    public void finish() {
+    private void finish(boolean finishTask) {
         if (mParent == null) {
             int resultCode;
             Intent resultData;
@@ -4221,7 +4351,7 @@
                     resultData.prepareToLeaveProcess();
                 }
                 if (ActivityManagerNative.getDefault()
-                    .finishActivity(mToken, resultCode, resultData)) {
+                        .finishActivity(mToken, resultCode, resultData, finishTask)) {
                     mFinished = true;
                 }
             } catch (RemoteException e) {
@@ -4233,6 +4363,15 @@
     }
 
     /**
+     * Call this when your activity is done and should be closed.  The
+     * ActivityResult is propagated back to whoever launched you via
+     * onActivityResult().
+     */
+    public void finish() {
+        finish(false);
+    }
+
+    /**
      * Finish this activity as well as all activities immediately below it
      * in the current task that have the same affinity.  This is typically
      * used when an application can be launched on to another task (such as
@@ -4276,6 +4415,22 @@
     }
 
     /**
+     * Reverses the Activity Scene entry Transition and triggers the calling Activity
+     * to reverse its exit Transition. When the exit Transition completes,
+     * {@link #finish()} is called. If no entry Transition was used, finish() is called
+     * immediately and the Activity exit Transition is run.
+     * @see android.app.ActivityOptions#makeSceneTransitionAnimation(android.view.Window,
+     * android.app.ActivityOptions.ActivityTransitionListener)
+     */
+    public void finishWithTransition() {
+        if (mEnterTransitionCoordinator != null) {
+            mEnterTransitionCoordinator.startExit();
+        } else {
+            finish();
+        }
+    }
+
+    /**
      * Force finish another activity that you had previously started with
      * {@link #startActivityForResult}.
      * 
@@ -4305,7 +4460,7 @@
      * @param requestCode Request code that had been used to start the
      *                    activity.
      */
-    public void finishActivityFromChild(Activity child, int requestCode) {
+    public void finishActivityFromChild(@NonNull Activity child, int requestCode) {
         try {
             ActivityManagerNative.getDefault()
                 .finishSubActivity(mToken, child.mEmbeddedID, requestCode);
@@ -4315,6 +4470,14 @@
     }
 
     /**
+     * Call this when your activity is done and should be closed and the task should be completely
+     * removed as a part of finishing the Activity.
+     */
+    public void finishAndRemoveTask() {
+        finish(true);
+    }
+
+    /**
      * Called when an activity you launched exits, giving you the requestCode
      * you started it with, the resultCode it returned, and any additional
      * data from it.  The <var>resultCode</var> will be
@@ -4366,8 +4529,8 @@
      * 
      * @see PendingIntent
      */
-    public PendingIntent createPendingResult(int requestCode, Intent data,
-            int flags) {
+    public PendingIntent createPendingResult(int requestCode, @NonNull Intent data,
+            @PendingIntent.Flags int flags) {
         String packageName = getPackageName();
         try {
             data.prepareToLeaveProcess();
@@ -4394,7 +4557,7 @@
      * @param requestedOrientation An orientation constant as used in
      * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}.
      */
-    public void setRequestedOrientation(int requestedOrientation) {
+    public void setRequestedOrientation(@ActivityInfo.ScreenOrientation int requestedOrientation) {
         if (mParent == null) {
             try {
                 ActivityManagerNative.getDefault().setRequestedOrientation(
@@ -4416,6 +4579,7 @@
      * @return Returns an orientation constant as used in
      * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}.
      */
+    @ActivityInfo.ScreenOrientation
     public int getRequestedOrientation() {
         if (mParent == null) {
             try {
@@ -4487,6 +4651,7 @@
      * 
      * @return The local class name.
      */
+    @NonNull
     public String getLocalClassName() {
         final String pkg = getPackageName();
         final String cls = mComponent.getClassName();
@@ -4532,9 +4697,9 @@
         
         mSearchManager = new SearchManager(this, null);
     }
-    
+
     @Override
-    public Object getSystemService(String name) {
+    public Object getSystemService(@ServiceName @NonNull String name) {
         if (getBaseContext() == null) {
             throw new IllegalStateException(
                     "System services not available to Activities before onCreate()");
@@ -4574,6 +4739,17 @@
         setTitle(getText(titleId));
     }
 
+    /**
+     * Change the color of the title associated with this activity.
+     * <p>
+     * This method is deprecated starting in API Level 11 and replaced by action
+     * bar styles. For information on styling the Action Bar, read the <a
+     * href="{@docRoot} guide/topics/ui/actionbar.html">Action Bar</a> developer
+     * guide.
+     *
+     * @deprecated Use action bar styles instead.
+     */
+    @Deprecated
     public void setTitleColor(int textColor) {
         mTitleColor = textColor;
         onTitleChanged(mTitle, textColor);
@@ -4603,6 +4779,36 @@
     }
 
     /**
+     * Set a label and icon to be used in the Recents task display. When {@link
+     * ActivityManager#getRecentTasks} is called, the activities of each task are
+     * traversed in order from the topmost activity to the bottommost. As soon as one activity is
+     * found with either a non-null label or a non-null icon set by this call the traversal is
+     * ended. For each task those values will be returned in {@link
+     * ActivityManager.RecentTaskInfo#activityLabel} and {@link
+     * ActivityManager.RecentTaskInfo#activityIcon}.
+     *
+     * @see ActivityManager#getRecentTasks
+     * @see ActivityManager.RecentTaskInfo
+     *
+     * @param activityLabel The label to use in the RecentTaskInfo.
+     * @param activityIcon The Bitmap to use in the RecentTaskInfo.
+     */
+    public void setActivityLabelAndIcon(CharSequence activityLabel, Bitmap activityIcon) {
+        final Bitmap scaledIcon;
+        if (activityIcon != null) {
+            final int size = ActivityManager.getLauncherLargeIconSizeInner(this);
+            scaledIcon = Bitmap.createScaledBitmap(activityIcon, size, size, true);
+        } else {
+            scaledIcon = null;
+        }
+        try {
+            ActivityManagerNative.getDefault().setActivityLabelAndIcon(mToken, activityLabel,
+                    scaledIcon);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
      * Sets the visibility of the progress bar in the title.
      * <p>
      * In order for the progress bar to be shown, the feature must be requested
@@ -4639,7 +4845,8 @@
      */
     public final void setProgressBarIndeterminate(boolean indeterminate) {
         getWindow().setFeatureInt(Window.FEATURE_PROGRESS,
-                indeterminate ? Window.PROGRESS_INDETERMINATE_ON : Window.PROGRESS_INDETERMINATE_OFF);
+                indeterminate ? Window.PROGRESS_INDETERMINATE_ON
+                        : Window.PROGRESS_INDETERMINATE_OFF);
     }
     
     /**
@@ -4696,7 +4903,7 @@
 
     /**
      * Gets the suggested audio stream whose volume should be changed by the
-     * harwdare volume controls.
+     * hardware volume controls.
      * 
      * @return The suggested audio stream type whose volume should be changed by
      *         the hardware volume controls.
@@ -4732,6 +4939,7 @@
      * @see android.view.LayoutInflater#createView
      * @see android.view.Window#getLayoutInflater
      */
+    @Nullable
     public View onCreateView(String name, Context context, AttributeSet attrs) {
         return null;
     }
@@ -4990,6 +5198,7 @@
      *
      * @see ActionMode
      */
+    @Nullable
     public ActionMode startActionMode(ActionMode.Callback callback) {
         return mWindow.getDecorView().startActionMode(callback);
     }
@@ -5005,9 +5214,10 @@
      * @return The new action mode, or <code>null</code> if the activity does not want to
      *         provide special handling for this action mode. (It will be handled by the system.)
      */
+    @Nullable
     @Override
     public ActionMode onWindowStartingActionMode(ActionMode.Callback callback) {
-        initActionBar();
+        initWindowDecorActionBar();
         if (mActionBar != null) {
             return mActionBar.startActionMode(callback);
         }
@@ -5148,6 +5358,7 @@
      * @return a new Intent targeting the defined parent of this activity or null if
      *         there is no valid parent.
      */
+    @Nullable
     public Intent getParentActivityIntent() {
         final String parentName = mActivityInfo.parentActivityName;
         if (TextUtils.isEmpty(parentName)) {
@@ -5170,6 +5381,21 @@
         }
     }
 
+    /**
+     * When {@link android.app.ActivityOptions#makeSceneTransitionAnimation(android.view.Window,
+     * android.app.ActivityOptions.ActivityTransitionListener)} was used to start an Activity,
+     * the Window will be triggered to enter with a Transition. <code>listener</code> allows
+     * The Activity to listen to events of the entering transition and control the mapping of
+     * shared elements. This requires {@link Window#FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * @param listener Used to listen to events in the entering transition.
+     */
+    public void setActivityTransitionListener(ActivityOptions.ActivityTransitionListener listener) {
+        if (mEnterTransitionCoordinator != null) {
+            mEnterTransitionCoordinator.setActivityTransitionListener(listener);
+        }
+    }
+
     // ------------------ Internal API ------------------
     
     final void setParent(Activity parent) {
@@ -5190,6 +5416,16 @@
             CharSequence title, Activity parent, String id,
             NonConfigurationInstances lastNonConfigurationInstances,
             Configuration config) {
+        attach(context, aThread, instr, token, ident, application, intent, info, title, parent, id,
+                lastNonConfigurationInstances, config, null, null);
+    }
+
+    final void attach(Context context, ActivityThread aThread,
+            Instrumentation instr, IBinder token, int ident,
+            Application application, Intent intent, ActivityInfo info,
+            CharSequence title, Activity parent, String id,
+            NonConfigurationInstances lastNonConfigurationInstances,
+            Configuration config, Bundle options, IVoiceInteractor voiceInteractor) {
         attachBaseContext(context);
 
         mFragments.attachActivity(this, mContainer, null);
@@ -5204,7 +5440,7 @@
             mWindow.setUiOptions(info.uiOptions);
         }
         mUiThread = Thread.currentThread();
-        
+
         mMainThread = aThread;
         mInstrumentation = instr;
         mToken = token;
@@ -5217,6 +5453,8 @@
         mParent = parent;
         mEmbeddedID = id;
         mLastNonConfigurationInstances = lastNonConfigurationInstances;
+        mVoiceInteractor = voiceInteractor != null
+                ? new VoiceInteractor(this, this, voiceInteractor, Looper.myLooper()) : null;
 
         mWindow.setWindowManager(
                 (WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
@@ -5227,6 +5465,12 @@
         }
         mWindowManager = mWindow.getWindowManager();
         mCurrentConfig = config;
+        if (options != null) {
+            ActivityOptions activityOptions = new ActivityOptions(options);
+            if (activityOptions.getAnimationType() == ActivityOptions.ANIM_SCENE_TRANSITION) {
+                mEnterTransitionCoordinator = activityOptions.createEnterActivityTransition(this);
+            }
+        }
     }
 
     /** @hide */
@@ -5240,7 +5484,7 @@
                 com.android.internal.R.styleable.Window_windowNoDisplay, false);
         mFragments.dispatchActivityCreated();
     }
-    
+
     final void performStart() {
         mFragments.noteStateNotSaved();
         mCalled = false;
@@ -5397,7 +5641,7 @@
                     }
                 }
             }
-    
+
             mStopped = true;
         }
         mResumed = false;
@@ -5412,7 +5656,7 @@
             mLoaderManager.doDestroy();
         }
     }
-    
+
     /**
      * @hide
      */
@@ -5420,7 +5664,7 @@
         return mResumed;
     }
 
-    void dispatchActivityResult(String who, int requestCode, 
+    void dispatchActivityResult(String who, int requestCode,
         int resultCode, Intent data) {
         if (false) Log.v(
             TAG, "Dispatching result: who=" + who + ", reqCode=" + requestCode
@@ -5436,6 +5680,22 @@
         }
     }
 
+    /** @hide */
+    public void startLockTask() {
+        try {
+            ActivityManagerNative.getDefault().startLockTaskMode(mToken);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /** @hide */
+    public void stopLockTask() {
+        try {
+            ActivityManagerNative.getDefault().stopLockTaskMode();
+        } catch (RemoteException e) {
+        }
+    }
+
     /**
      * Interface for informing a translucent {@link Activity} once all visible activities below it
      * have completed drawing. This is necessary only after an {@link Activity} has been made
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java
index c877cd3..9239faf 100644
--- a/core/java/android/app/ActivityManager.java
+++ b/core/java/android/app/ActivityManager.java
@@ -76,6 +76,13 @@
     public static final String META_HOME_ALTERNATE = "android.app.home.alternate";
 
     /**
+     * Result for IActivityManager.startActivity: trying to start an activity under voice
+     * control when that activity does not support the VOICE category.
+     * @hide
+     */
+    public static final int START_NOT_VOICE_COMPATIBLE = -7;
+
+    /**
      * Result for IActivityManager.startActivity: an error where the
      * start had to be canceled.
      * @hide
@@ -155,6 +162,13 @@
     public static final int START_SWITCHES_CANCELED = 4;
 
     /**
+     * Result for IActivityManaqer.startActivity: a new activity was attempted to be started
+     * while in Lock Task Mode.
+     * @hide
+     */
+    public static final int START_RETURN_LOCK_TASK_MODE_VIOLATION = 5;
+
+    /**
      * Flag for IActivityManaqer.startActivity: do special start mode where
      * a new activity is launched only if it is needed.
      * @hide
@@ -502,6 +516,24 @@
          */
         public int stackId;
 
+        /**
+         * The id of the user the task was running as.
+         * @hide
+         */
+        public int userId;
+
+        /**
+         * The label of the highest activity in the task stack to have set a label using
+         * {@link Activity#setActivityLabelAndIcon(CharSequence, android.graphics.Bitmap)}.
+         */
+        public CharSequence activityLabel;
+
+        /**
+         * The Bitmap icon of the highest activity in the task stack to set a Bitmap using
+         * {@link Activity#setActivityLabelAndIcon(CharSequence, android.graphics.Bitmap)}.
+         */
+        public Bitmap activityIcon;
+
         public RecentTaskInfo() {
         }
 
@@ -523,20 +555,28 @@
             ComponentName.writeToParcel(origActivity, dest);
             TextUtils.writeToParcel(description, dest,
                     Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+            TextUtils.writeToParcel(activityLabel, dest,
+                    Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+            if (activityIcon == null) {
+                dest.writeInt(0);
+            } else {
+                dest.writeInt(1);
+                activityIcon.writeToParcel(dest, 0);
+            }
             dest.writeInt(stackId);
+            dest.writeInt(userId);
         }
 
         public void readFromParcel(Parcel source) {
             id = source.readInt();
             persistentId = source.readInt();
-            if (source.readInt() != 0) {
-                baseIntent = Intent.CREATOR.createFromParcel(source);
-            } else {
-                baseIntent = null;
-            }
+            baseIntent = source.readInt() > 0 ? Intent.CREATOR.createFromParcel(source) : null;
             origActivity = ComponentName.readFromParcel(source);
             description = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+            activityLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+            activityIcon = source.readInt() > 0 ? Bitmap.CREATOR.createFromParcel(source) : null;
             stackId = source.readInt();
+            userId = source.readInt();
         }
 
         public static final Creator<RecentTaskInfo> CREATOR
@@ -560,7 +600,7 @@
      * {@link android.content.Intent#FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS} flag.
      */
     public static final int RECENT_WITH_EXCLUDED = 0x0001;
-    
+
     /**
      * Provides a list that does not contain any
      * recent tasks that currently are not available to the user.
@@ -568,6 +608,13 @@
     public static final int RECENT_IGNORE_UNAVAILABLE = 0x0002;
 
     /**
+     * Provides a list that contains recent tasks for all
+     * profiles of a user.
+     * @hide
+     */
+    public static final int RECENT_INCLUDE_PROFILES = 0x0004;
+
+    /**
      * Return a list of the tasks that the user has recently launched, with
      * the most recent being first and older ones after in order.
      *
@@ -933,6 +980,16 @@
         }
     }
 
+    /** @hide */
+    public boolean isInHomeStack(int taskId) {
+        try {
+            return ActivityManagerNative.getDefault().isInHomeStack(taskId);
+        } catch (RemoteException e) {
+            // System dead, we will be dead too soon!
+            return false;
+        }
+    }
+
     /**
      * Flag for {@link #moveTaskToFront(int, int)}: also move the "home"
      * activity along with the task, so it is positioned immediately behind
@@ -1570,13 +1627,6 @@
         public int lastTrimLevel;
 
         /**
-         * Constant for {@link #importance}: this is a persistent process.
-         * Only used when reporting to process observers.
-         * @hide
-         */
-        public static final int IMPORTANCE_PERSISTENT = 50;
-
-        /**
          * Constant for {@link #importance}: this process is running the
          * foreground UI.
          */
@@ -1691,9 +1741,16 @@
          */
         public int importanceReasonImportance;
 
+        /**
+         * Current process state, as per PROCESS_STATE_* constants.
+         * @hide
+         */
+        public int processState;
+
         public RunningAppProcessInfo() {
             importance = IMPORTANCE_FOREGROUND;
             importanceReasonCode = REASON_UNKNOWN;
+            processState = PROCESS_STATE_IMPORTANT_FOREGROUND;
         }
         
         public RunningAppProcessInfo(String pProcessName, int pPid, String pArr[]) {
@@ -1719,6 +1776,7 @@
             dest.writeInt(importanceReasonPid);
             ComponentName.writeToParcel(importanceReasonComponent, dest);
             dest.writeInt(importanceReasonImportance);
+            dest.writeInt(processState);
         }
 
         public void readFromParcel(Parcel source) {
@@ -1734,6 +1792,7 @@
             importanceReasonPid = source.readInt();
             importanceReasonComponent = ComponentName.readFromParcel(source);
             importanceReasonImportance = source.readInt();
+            processState = source.readInt();
         }
 
         public static final Creator<RunningAppProcessInfo> CREATOR = 
@@ -1938,7 +1997,11 @@
      * @return dimensions of square icons in terms of pixels
      */
     public int getLauncherLargeIconSize() {
-        final Resources res = mContext.getResources();
+        return getLauncherLargeIconSizeInner(mContext);
+    }
+
+    static int getLauncherLargeIconSizeInner(Context context) {
+        final Resources res = context.getResources();
         final int size = res.getDimensionPixelSize(android.R.dimen.app_icon_size);
         final int sw = res.getConfiguration().smallestScreenWidthDp;
 
@@ -2222,4 +2285,35 @@
             e.printStackTrace(pw);
         }
     }
+
+    /**
+     * @hide
+     */
+    public void startLockTaskMode(int taskId) {
+        try {
+            ActivityManagerNative.getDefault().startLockTaskMode(taskId);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public void stopLockTaskMode() {
+        try {
+            ActivityManagerNative.getDefault().stopLockTaskMode();
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public boolean isInLockTaskMode() {
+        try {
+            return ActivityManagerNative.getDefault().isInLockTaskMode();
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
 }
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 14c495f..b1c37de 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -43,9 +43,11 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.StrictMode;
+import android.service.voice.IVoiceInteractionSession;
 import android.text.TextUtils;
 import android.util.Log;
 import android.util.Singleton;
+import com.android.internal.app.IVoiceInteractor;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -101,9 +103,9 @@
         }
     }
 
-    static public void noteWakeupAlarm(PendingIntent ps) {
+    static public void noteWakeupAlarm(PendingIntent ps, int sourceUid, String sourcePkg) {
         try {
-            getDefault().noteWakeupAlarm(ps.getTarget());
+            getDefault().noteWakeupAlarm(ps.getTarget(), sourceUid, sourcePkg);
         } catch (RemoteException ex) {
         }
     }
@@ -242,6 +244,33 @@
             return true;
         }
 
+        case START_VOICE_ACTIVITY_TRANSACTION:
+        {
+            data.enforceInterface(IActivityManager.descriptor);
+            String callingPackage = data.readString();
+            int callingPid = data.readInt();
+            int callingUid = data.readInt();
+            Intent intent = Intent.CREATOR.createFromParcel(data);
+            String resolvedType = data.readString();
+            IVoiceInteractionSession session = IVoiceInteractionSession.Stub.asInterface(
+                    data.readStrongBinder());
+            IVoiceInteractor interactor = IVoiceInteractor.Stub.asInterface(
+                    data.readStrongBinder());
+            int startFlags = data.readInt();
+            String profileFile = data.readString();
+            ParcelFileDescriptor profileFd = data.readInt() != 0
+                    ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
+            Bundle options = data.readInt() != 0
+                    ? Bundle.CREATOR.createFromParcel(data) : null;
+            int userId = data.readInt();
+            int result = startVoiceActivity(callingPackage, callingPid, callingUid,
+                    intent, resolvedType, session, interactor, startFlags,
+                    profileFile, profileFd, options, userId);
+            reply.writeNoException();
+            reply.writeInt(result);
+            return true;
+        }
+
         case START_NEXT_MATCHING_ACTIVITY_TRANSACTION:
         {
             data.enforceInterface(IActivityManager.descriptor);
@@ -263,7 +292,8 @@
             if (data.readInt() != 0) {
                 resultData = Intent.CREATOR.createFromParcel(data);
             }
-            boolean res = finishActivity(token, resultCode, resultData);
+            boolean finishTask = (data.readInt() != 0);
+            boolean res = finishActivity(token, resultCode, resultData, finishTask);
             reply.writeNoException();
             reply.writeInt(res ? 1 : 0);
             return true;
@@ -654,6 +684,15 @@
             return true;
         }
 
+        case IS_IN_HOME_STACK_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            int taskId = data.readInt();
+            boolean isInHomeStack = isInHomeStack(taskId);
+            reply.writeNoException();
+            reply.writeInt(isInHomeStack ? 1 : 0);
+            return true;
+        }
+
         case SET_FOCUSED_STACK_TRANSACTION: {
             data.enforceInterface(IActivityManager.descriptor);
             int stackId = data.readInt();
@@ -1244,7 +1283,9 @@
             data.enforceInterface(IActivityManager.descriptor);
             IIntentSender is = IIntentSender.Stub.asInterface(
                     data.readStrongBinder());
-            noteWakeupAlarm(is);
+            int sourceUid = data.readInt();
+            String sourcePkg = data.readString();
+            noteWakeupAlarm(is, sourceUid, sourcePkg);
             reply.writeNoException();
             return true;
         }
@@ -1686,6 +1727,15 @@
             return true;
         }
 
+        case START_USER_IN_BACKGROUND_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            int userid = data.readInt();
+            boolean result = startUserInBackground(userid);
+            reply.writeNoException();
+            reply.writeInt(result ? 1 : 0);
+            return true;
+        }
+
         case STOP_USER_TRANSACTION: {
             data.enforceInterface(IActivityManager.descriptor);
             int userid = data.readInt();
@@ -1816,6 +1866,17 @@
             return true;
         }
 
+        case GET_TAG_FOR_INTENT_SENDER_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            IIntentSender r = IIntentSender.Stub.asInterface(
+                data.readStrongBinder());
+            String prefix = data.readString();
+            String tag = getTagForIntentSender(r, prefix);
+            reply.writeNoException();
+            reply.writeString(tag);
+            return true;
+        }
+
         case UPDATE_PERSISTENT_CONFIGURATION_TRANSACTION: {
             data.enforceInterface(IActivityManager.descriptor);
             Configuration config = Configuration.CREATOR.createFromParcel(data);
@@ -2041,6 +2102,48 @@
             reply.writeStrongBinder(homeActivityToken);
             return true;
         }
+
+        case START_LOCK_TASK_BY_TASK_ID_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            final int taskId = data.readInt();
+            startLockTaskMode(taskId);
+            reply.writeNoException();
+            return true;
+        }
+
+        case START_LOCK_TASK_BY_TOKEN_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            IBinder token = data.readStrongBinder();
+            startLockTaskMode(token);
+            reply.writeNoException();
+            return true;
+        }
+
+        case STOP_LOCK_TASK_MODE_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            stopLockTaskMode();
+            reply.writeNoException();
+            return true;
+        }
+
+        case IS_IN_LOCK_TASK_MODE_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            final boolean isInLockTaskMode = isInLockTaskMode();
+            reply.writeNoException();
+            reply.writeInt(isInLockTaskMode ? 1 : 0);
+            return true;
+        }
+
+        case SET_ACTIVITY_LABEL_ICON_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            IBinder token = data.readStrongBinder();
+            CharSequence activityLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(data);
+            Bitmap activityIcon = data.readInt() > 0
+                    ? Bitmap.CREATOR.createFromParcel(data) : null;
+            setActivityLabelAndIcon(token, activityLabel, activityIcon);
+            reply.writeNoException();
+            return true;
+        }
         }
 
         return super.onTransact(code, data, reply, flags);
@@ -2249,6 +2352,42 @@
         data.recycle();
         return result;
     }
+    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
+            Intent intent, String resolvedType, IVoiceInteractionSession session,
+            IVoiceInteractor interactor, int startFlags, String profileFile,
+            ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeString(callingPackage);
+        data.writeInt(callingPid);
+        data.writeInt(callingUid);
+        intent.writeToParcel(data, 0);
+        data.writeString(resolvedType);
+        data.writeStrongBinder(session.asBinder());
+        data.writeStrongBinder(interactor.asBinder());
+        data.writeInt(startFlags);
+        data.writeString(profileFile);
+        if (profileFd != null) {
+            data.writeInt(1);
+            profileFd.writeToParcel(data, Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+        } else {
+            data.writeInt(0);
+        }
+        if (options != null) {
+            data.writeInt(1);
+            options.writeToParcel(data, 0);
+        } else {
+            data.writeInt(0);
+        }
+        data.writeInt(userId);
+        mRemote.transact(START_VOICE_ACTIVITY_TRANSACTION, data, reply, 0);
+        reply.readException();
+        int result = reply.readInt();
+        reply.recycle();
+        data.recycle();
+        return result;
+    }
     public boolean startNextMatchingActivity(IBinder callingActivity,
             Intent intent, Bundle options) throws RemoteException {
         Parcel data = Parcel.obtain();
@@ -2269,7 +2408,7 @@
         data.recycle();
         return result != 0;
     }
-    public boolean finishActivity(IBinder token, int resultCode, Intent resultData)
+    public boolean finishActivity(IBinder token, int resultCode, Intent resultData, boolean finishTask)
             throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
@@ -2282,6 +2421,7 @@
         } else {
             data.writeInt(0);
         }
+        data.writeInt(finishTask ? 1 : 0);
         mRemote.transact(FINISH_ACTIVITY_TRANSACTION, data, reply, 0);
         reply.readException();
         boolean res = reply.readInt() != 0;
@@ -2786,6 +2926,19 @@
         return info;
     }
     @Override
+    public boolean isInHomeStack(int taskId) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeInt(taskId);
+        mRemote.transact(IS_IN_HOME_STACK_TRANSACTION, data, reply, 0);
+        reply.readException();
+        boolean isInHomeStack = reply.readInt() > 0;
+        data.recycle();
+        reply.recycle();
+        return isInHomeStack;
+    }
+    @Override
     public void setFocusedStack(int stackId) throws RemoteException
     {
         Parcel data = Parcel.obtain();
@@ -3615,10 +3768,13 @@
         mRemote.transact(ENTER_SAFE_MODE_TRANSACTION, data, null, 0);
         data.recycle();
     }
-    public void noteWakeupAlarm(IIntentSender sender) throws RemoteException {
+    public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg)
+            throws RemoteException {
         Parcel data = Parcel.obtain();
-        data.writeStrongBinder(sender.asBinder());
         data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeStrongBinder(sender.asBinder());
+        data.writeInt(sourceUid);
+        data.writeString(sourcePkg);
         mRemote.transact(NOTE_WAKEUP_ALARM_TRANSACTION, data, null, 0);
         data.recycle();
     }
@@ -4229,6 +4385,19 @@
         return result;
     }
 
+    public boolean startUserInBackground(int userid) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeInt(userid);
+        mRemote.transact(START_USER_IN_BACKGROUND_TRANSACTION, data, reply, 0);
+        reply.readException();
+        boolean result = reply.readInt() != 0;
+        reply.recycle();
+        data.recycle();
+        return result;
+    }
+
     public int stopUser(int userid, IStopUserCallback callback) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
@@ -4371,6 +4540,21 @@
         return res;
     }
 
+    public String getTagForIntentSender(IIntentSender sender, String prefix)
+            throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeStrongBinder(sender.asBinder());
+        data.writeString(prefix);
+        mRemote.transact(GET_TAG_FOR_INTENT_SENDER_TRANSACTION, data, reply, 0);
+        reply.readException();
+        String res = reply.readString();
+        data.recycle();
+        reply.recycle();
+        return res;
+    }
+
     public void updatePersistentConfiguration(Configuration values) throws RemoteException
     {
         Parcel data = Parcel.obtain();
@@ -4686,5 +4870,74 @@
         return res;
     }
 
+    @Override
+    public void startLockTaskMode(int taskId) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeInt(taskId);
+        mRemote.transact(START_LOCK_TASK_BY_TASK_ID_TRANSACTION, data, reply, 0);
+        reply.readException();
+        data.recycle();
+        reply.recycle();
+    }
+
+    @Override
+    public void startLockTaskMode(IBinder token) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeStrongBinder(token);
+        mRemote.transact(START_LOCK_TASK_BY_TOKEN_TRANSACTION, data, reply, 0);
+        reply.readException();
+        data.recycle();
+        reply.recycle();
+    }
+
+    @Override
+    public void stopLockTaskMode() throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        mRemote.transact(STOP_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
+        reply.readException();
+        data.recycle();
+        reply.recycle();
+    }
+
+    @Override
+    public boolean isInLockTaskMode() throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        mRemote.transact(IS_IN_LOCK_TASK_MODE_TRANSACTION, data, reply, 0);
+        reply.readException();
+        boolean isInLockTaskMode = reply.readInt() == 1;
+        data.recycle();
+        reply.recycle();
+        return isInLockTaskMode;
+    }
+
+    @Override
+    public void setActivityLabelAndIcon(IBinder token, CharSequence activityLabel,
+            Bitmap activityIcon) throws RemoteException
+    {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeStrongBinder(token);
+        TextUtils.writeToParcel(activityLabel, data, 0);
+        if (activityIcon != null) {
+            data.writeInt(1);
+            activityIcon.writeToParcel(data, 0);
+        } else {
+            data.writeInt(0);
+        }
+        mRemote.transact(SET_ACTIVITY_LABEL_ICON_TRANSACTION, data, reply, IBinder.FLAG_ONEWAY);
+        reply.readException();
+        data.recycle();
+        reply.recycle();
+    }
+
     private IBinder mRemote;
 }
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index 87b1e24..a49359f 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -22,7 +22,15 @@
 import android.os.Handler;
 import android.os.IRemoteCallback;
 import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.transition.Transition;
+import android.util.ArrayMap;
+import android.util.Pair;
 import android.view.View;
+import android.view.Window;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * Helper class for building an options Bundle that can be used with
@@ -30,6 +38,8 @@
  * Context.startActivity(Intent, Bundle)} and related methods.
  */
 public class ActivityOptions {
+    private static final String TAG = "ActivityOptions";
+
     /**
      * The package name that created the options.
      * @hide
@@ -90,6 +100,14 @@
      */
     public static final String KEY_ANIM_START_LISTENER = "android:animStartListener";
 
+    /**
+     * For Activity transitions, the calling Activity's TransitionListener used to
+     * notify the called Activity when the shared element and the exit transitions
+     * complete.
+     */
+    private static final String KEY_TRANSITION_COMPLETE_LISTENER
+            = "android:transitionCompleteListener";
+
     /** @hide */
     public static final int ANIM_NONE = 0;
     /** @hide */
@@ -100,6 +118,8 @@
     public static final int ANIM_THUMBNAIL_SCALE_UP = 3;
     /** @hide */
     public static final int ANIM_THUMBNAIL_SCALE_DOWN = 4;
+    /** @hide */
+    public static final int ANIM_SCENE_TRANSITION = 5;
 
     private String mPackageName;
     private int mAnimationType = ANIM_NONE;
@@ -111,6 +131,7 @@
     private int mStartWidth;
     private int mStartHeight;
     private IRemoteCallback mAnimationStartedListener;
+    private ResultReceiver mExitReceiver;
 
     /**
      * Create an ActivityOptions specifying a custom animation to run when
@@ -156,11 +177,12 @@
         opts.mAnimationType = ANIM_CUSTOM;
         opts.mCustomEnterResId = enterResId;
         opts.mCustomExitResId = exitResId;
-        opts.setListener(handler, listener);
+        opts.setOnAnimationStartedListener(handler, listener);
         return opts;
     }
 
-    private void setListener(Handler handler, OnAnimationStartedListener listener) {
+    private void setOnAnimationStartedListener(Handler handler,
+            OnAnimationStartedListener listener) {
         if (listener != null) {
             final Handler h = handler;
             final OnAnimationStartedListener finalListener = listener;
@@ -298,7 +320,60 @@
         source.getLocationOnScreen(pts);
         opts.mStartX = pts[0] + startX;
         opts.mStartY = pts[1] + startY;
-        opts.setListener(source.getHandler(), listener);
+        opts.setOnAnimationStartedListener(source.getHandler(), listener);
+        return opts;
+    }
+
+    /**
+     * Create an ActivityOptions to transition between Activities using cross-Activity scene
+     * animations. This method carries the position of one shared element to the started Activity.
+     * The position of <code>sharedElement</code> will be used as the epicenter for the
+     * exit Transition. The position of the shared element in the launched Activity will be the
+     * epicenter of its entering Transition.
+     *
+     * <p>This requires {@link android.view.Window#FEATURE_CONTENT_TRANSITIONS} to be
+     * enabled on the calling Activity to cause an exit transition. The same must be in
+     * the called Activity to get an entering transition.</p>
+     * @param window The window containing shared elements.
+     * @param sharedElement The View to transition to the started Activity. sharedElement must
+     *                      have a non-null sharedElementName.
+     * @param sharedElementName The shared element name as used in the target Activity. This may
+     *                          be null if it has the same name as sharedElement.
+     * @return Returns a new ActivityOptions object that you can use to
+     *         supply these options as the options Bundle when starting an activity.
+     * @see android.transition.Transition#setEpicenterCallback(
+     *          android.transition.Transition.EpicenterCallback)
+     */
+    public static ActivityOptions makeSceneTransitionAnimation(Window window,
+            View sharedElement, String sharedElementName) {
+        return makeSceneTransitionAnimation(window,
+                new SharedElementMappingListener(sharedElement, sharedElementName));
+    }
+
+    /**
+     * Create an ActivityOptions to transition between Activities using cross-Activity scene
+     * animations. This method carries the position of multiple shared elements to the started
+     * Activity. The position of the first element in the value returned from
+     * {@link android.app.ActivityOptions.ActivityTransitionListener#getSharedElementsMapping()}
+     * will be used as the epicenter for the exit Transition. The position of the associated
+     * shared element in the launched Activity will be the epicenter of its entering Transition.
+     *
+     * <p>This requires {@link android.view.Window#FEATURE_CONTENT_TRANSITIONS} to be
+     * enabled on the calling Activity to cause an exit transition. The same must be in
+     * the called Activity to get an entering transition.</p>
+     * @param window The window containing shared elements.
+     * @param listener The listener to use to monitor activity transition events.
+     * @return Returns a new ActivityOptions object that you can use to
+     *         supply these options as the options Bundle when starting an activity.
+     * @see android.transition.Transition#setEpicenterCallback(
+     *          android.transition.Transition.EpicenterCallback)
+     */
+    public static ActivityOptions makeSceneTransitionAnimation(Window window,
+            ActivityTransitionListener listener) {
+        ActivityOptions opts = new ActivityOptions();
+        opts.mAnimationType = ANIM_SCENE_TRANSITION;
+        ExitTransitionCoordinator exit = new ExitTransitionCoordinator(window, listener);
+        opts.mExitReceiver = exit;
         return opts;
     }
 
@@ -309,23 +384,33 @@
     public ActivityOptions(Bundle opts) {
         mPackageName = opts.getString(KEY_PACKAGE_NAME);
         mAnimationType = opts.getInt(KEY_ANIM_TYPE);
-        if (mAnimationType == ANIM_CUSTOM) {
-            mCustomEnterResId = opts.getInt(KEY_ANIM_ENTER_RES_ID, 0);
-            mCustomExitResId = opts.getInt(KEY_ANIM_EXIT_RES_ID, 0);
-            mAnimationStartedListener = IRemoteCallback.Stub.asInterface(
-                    opts.getIBinder(KEY_ANIM_START_LISTENER));
-        } else if (mAnimationType == ANIM_SCALE_UP) {
-            mStartX = opts.getInt(KEY_ANIM_START_X, 0);
-            mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
-            mStartWidth = opts.getInt(KEY_ANIM_START_WIDTH, 0);
-            mStartHeight = opts.getInt(KEY_ANIM_START_HEIGHT, 0);
-        } else if (mAnimationType == ANIM_THUMBNAIL_SCALE_UP ||
-                mAnimationType == ANIM_THUMBNAIL_SCALE_DOWN) {
-            mThumbnail = (Bitmap)opts.getParcelable(KEY_ANIM_THUMBNAIL);
-            mStartX = opts.getInt(KEY_ANIM_START_X, 0);
-            mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
-            mAnimationStartedListener = IRemoteCallback.Stub.asInterface(
-                    opts.getIBinder(KEY_ANIM_START_LISTENER));
+        switch (mAnimationType) {
+            case ANIM_CUSTOM:
+                mCustomEnterResId = opts.getInt(KEY_ANIM_ENTER_RES_ID, 0);
+                mCustomExitResId = opts.getInt(KEY_ANIM_EXIT_RES_ID, 0);
+                mAnimationStartedListener = IRemoteCallback.Stub.asInterface(
+                        opts.getBinder(KEY_ANIM_START_LISTENER));
+                break;
+
+            case ANIM_SCALE_UP:
+                mStartX = opts.getInt(KEY_ANIM_START_X, 0);
+                mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
+                mStartWidth = opts.getInt(KEY_ANIM_START_WIDTH, 0);
+                mStartHeight = opts.getInt(KEY_ANIM_START_HEIGHT, 0);
+                break;
+
+            case ANIM_THUMBNAIL_SCALE_UP:
+            case ANIM_THUMBNAIL_SCALE_DOWN:
+                mThumbnail = (Bitmap)opts.getParcelable(KEY_ANIM_THUMBNAIL);
+                mStartX = opts.getInt(KEY_ANIM_START_X, 0);
+                mStartY = opts.getInt(KEY_ANIM_START_Y, 0);
+                mAnimationStartedListener = IRemoteCallback.Stub.asInterface(
+                        opts.getBinder(KEY_ANIM_START_LISTENER));
+                break;
+
+            case ANIM_SCENE_TRANSITION:
+                mExitReceiver = opts.getParcelable(KEY_TRANSITION_COMPLETE_LISTENER);
+                break;
         }
     }
 
@@ -380,6 +465,20 @@
     }
 
     /** @hide */
+    public void dispatchActivityStopped() {
+        if (mExitReceiver != null) {
+            mExitReceiver.send(ActivityTransitionCoordinator.MSG_ACTIVITY_STOPPED, null);
+        }
+    }
+
+    /** @hide */
+    public void dispatchStartExit() {
+        if (mExitReceiver != null) {
+            mExitReceiver.send(ActivityTransitionCoordinator.MSG_START_EXIT_TRANSITION, null);
+        }
+    }
+
+    /** @hide */
     public void abort() {
         if (mAnimationStartedListener != null) {
             try {
@@ -396,6 +495,15 @@
         }
     }
 
+    /** @hide */
+    public EnterTransitionCoordinator createEnterActivityTransition(Activity activity) {
+        EnterTransitionCoordinator coordinator = null;
+        if (mAnimationType == ANIM_SCENE_TRANSITION) {
+            coordinator = new EnterTransitionCoordinator(activity, mExitReceiver);
+        }
+        return coordinator;
+    }
+
     /**
      * Update the current values in this ActivityOptions from those supplied
      * in <var>otherOptions</var>.  Any values
@@ -405,15 +513,16 @@
         if (otherOptions.mPackageName != null) {
             mPackageName = otherOptions.mPackageName;
         }
+        mExitReceiver = null;
         switch (otherOptions.mAnimationType) {
             case ANIM_CUSTOM:
                 mAnimationType = otherOptions.mAnimationType;
                 mCustomEnterResId = otherOptions.mCustomEnterResId;
                 mCustomExitResId = otherOptions.mCustomExitResId;
                 mThumbnail = null;
-                if (otherOptions.mAnimationStartedListener != null) {
+                if (mAnimationStartedListener != null) {
                     try {
-                        otherOptions.mAnimationStartedListener.sendResult(null);
+                        mAnimationStartedListener.sendResult(null);
                     } catch (RemoteException e) {
                     }
                 }
@@ -425,9 +534,9 @@
                 mStartY = otherOptions.mStartY;
                 mStartWidth = otherOptions.mStartWidth;
                 mStartHeight = otherOptions.mStartHeight;
-                if (otherOptions.mAnimationStartedListener != null) {
+                if (mAnimationStartedListener != null) {
                     try {
-                        otherOptions.mAnimationStartedListener.sendResult(null);
+                        mAnimationStartedListener.sendResult(null);
                     } catch (RemoteException e) {
                     }
                 }
@@ -439,14 +548,20 @@
                 mThumbnail = otherOptions.mThumbnail;
                 mStartX = otherOptions.mStartX;
                 mStartY = otherOptions.mStartY;
-                if (otherOptions.mAnimationStartedListener != null) {
+                if (mAnimationStartedListener != null) {
                     try {
-                        otherOptions.mAnimationStartedListener.sendResult(null);
+                        mAnimationStartedListener.sendResult(null);
                     } catch (RemoteException e) {
                     }
                 }
                 mAnimationStartedListener = otherOptions.mAnimationStartedListener;
                 break;
+            case ANIM_SCENE_TRANSITION:
+                mAnimationType = otherOptions.mAnimationType;
+                mExitReceiver = otherOptions.mExitReceiver;
+                mThumbnail = null;
+                mAnimationStartedListener = null;
+                break;
         }
     }
 
@@ -468,7 +583,7 @@
                 b.putInt(KEY_ANIM_TYPE, mAnimationType);
                 b.putInt(KEY_ANIM_ENTER_RES_ID, mCustomEnterResId);
                 b.putInt(KEY_ANIM_EXIT_RES_ID, mCustomExitResId);
-                b.putIBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
+                b.putBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
                         != null ? mAnimationStartedListener.asBinder() : null);
                 break;
             case ANIM_SCALE_UP:
@@ -484,10 +599,153 @@
                 b.putParcelable(KEY_ANIM_THUMBNAIL, mThumbnail);
                 b.putInt(KEY_ANIM_START_X, mStartX);
                 b.putInt(KEY_ANIM_START_Y, mStartY);
-                b.putIBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
+                b.putBinder(KEY_ANIM_START_LISTENER, mAnimationStartedListener
                         != null ? mAnimationStartedListener.asBinder() : null);
                 break;
+            case ANIM_SCENE_TRANSITION:
+                b.putInt(KEY_ANIM_TYPE, mAnimationType);
+                if (mExitReceiver != null) {
+                    b.putParcelable(KEY_TRANSITION_COMPLETE_LISTENER, mExitReceiver);
+                }
+                break;
         }
         return b;
     }
+
+    /**
+     * Return the filtered options only meant to be seen by the target activity itself
+     * @hide
+     */
+    public ActivityOptions forTargetActivity() {
+        if (mAnimationType == ANIM_SCENE_TRANSITION) {
+            final ActivityOptions result = new ActivityOptions();
+            result.update(this);
+            return result;
+        }
+
+        return null;
+    }
+
+    /**
+     * Listener provided in
+     * {@link android.app.ActivityOptions#makeSceneTransitionAnimation(android.view.Window,
+     * android.app.ActivityOptions.ActivityTransitionListener)} or in
+     * {@link android.app.Activity#setActivityTransitionListener(
+     * android.app.ActivityOptions.ActivityTransitionListener)} to monitor the Activity transitions.
+     * The events can be used to customize or override Activity Transition behavior.
+     */
+    public static class ActivityTransitionListener {
+        /**
+         * Called when the enter Transition is ready to start, but hasn't started yet. If
+         * {@link android.view.Window#getEnterTransition()} is non-null,
+         * The entering views will be {@link View#INVISIBLE}.
+         */
+        public void onEnterReady() {}
+
+        /**
+         * Called when the remote exiting transition completes.
+         */
+        public void onRemoteExitComplete() {}
+
+        /**
+         * Called when the start state for shared elements is captured on enter.
+         *
+         * @param sharedElementNames The names of the shared elements that were accepted into
+         *                           the View hierarchy.
+         * @param sharedElements The shared elements that are part of the View hierarchy.
+         * @param sharedElementSnapshots The Views containing snap shots of the shared element
+         *                               from the launching Window. These elements will not
+         *                               be part of the scene, but will be positioned relative
+         *                               to the Window decor View.
+         */
+        public void onCaptureSharedElementStart(List<String> sharedElementNames,
+                List<View> sharedElements, List<View> sharedElementSnapshots) {}
+
+        /**
+         * Called when the end state for shared elements is captured on enter.
+         *
+         * @param sharedElementNames The names of the shared elements that were accepted into
+         *                           the View hierarchy.
+         * @param sharedElements The shared elements that are part of the View hierarchy.
+         * @param sharedElementSnapshots The Views containing snap shots of the shared element
+         *                               from the launching Window. These elements will not
+         *                               be part of the scene, but will be positioned relative
+         *                               to the Window decor View.
+         */
+        public void onCaptureSharedElementEnd(List<String> sharedElementNames,
+                List<View> sharedElements, List<View> sharedElementSnapshots) {}
+
+        /**
+         * Called when the enter Transition has been started.
+         * @param sharedElementNames The names of shared elements that were transferred.
+         * @param sharedElements The shared elements that were transferred.
+         */
+        public void onStartEnterTransition(List<String> sharedElementNames,
+                List<View> sharedElements) {}
+
+        /**
+         * Called when the exit Transition has been started.
+         * @param sharedElementNames The names of all shared elements that will be transferred.
+         * @param sharedElements All shared elements that will be transferred.
+         */
+        public void onStartExitTransition(List<String> sharedElementNames,
+                List<View> sharedElements) {}
+
+        /**
+         * Called when the exiting shared element transition completes.
+         */
+        public void onSharedElementExitTransitionComplete() {}
+
+        /**
+         * Called on exit when the shared element has been transferred.
+         * @param sharedElementNames The names of all shared elements that were transferred.
+         * @param sharedElements All shared elements that will were transferred.
+         */
+        public void onSharedElementTransferred(List<String> sharedElementNames,
+                List<View> sharedElements) {}
+
+        /**
+         * Called when the exit transition has completed.
+         */
+        public void onExitTransitionComplete() {}
+
+        /**
+         * Returns a mapping from a View in the View hierarchy to the shared element name used
+         * in the call. This is called twice -- once when the view is
+         * entering and again when it exits. A null return value indicates that the
+         * View hierachy can be trusted without any remapping.
+         * @return A map from a View in the hierarchy to the shared element name used in the
+         * call.
+         */
+        public Pair<View, String>[] getSharedElementsMapping() { return null; }
+
+        /**
+         * Returns <code>true</code> if the ActivityTransitionListener will handle removing
+         * rejected shared elements from the scene. If <code>false</code> is returned, a default
+         * animation will be used to remove the rejected shared elements from the scene.
+         *
+         * @param rejectedSharedElements Views containing visual information of shared elements
+         *                               that are not part of the entering scene. These Views
+         *                               are positioned relative to the Window decor View.
+         * @return <code>false</code> if the default animation should be used to remove the
+         * rejected shared elements from the scene or <code>true</code> if the listener provides
+         * custom handling.
+         */
+        public boolean handleRejectedSharedElements(List<View> rejectedSharedElements) {
+            return false;
+        }
+    }
+
+    private static class SharedElementMappingListener extends ActivityTransitionListener {
+        Pair<View, String>[] mSharedElementsMapping = new Pair[1];
+
+        public SharedElementMappingListener(View view, String name) {
+            mSharedElementsMapping[0] = Pair.create(view, name);
+        }
+
+        @Override
+        public Pair<View, String>[] getSharedElementsMapping() {
+            return mSharedElementsMapping;
+        }
+    }
 }
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java
index 7f8dbba..7dc21b4 100644
--- a/core/java/android/app/ActivityThread.java
+++ b/core/java/android/app/ActivityThread.java
@@ -56,6 +56,7 @@
 import android.os.Environment;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.IRemoteCallback;
 import android.os.Looper;
 import android.os.Message;
 import android.os.MessageQueue;
@@ -68,6 +69,8 @@
 import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
+import android.transition.Scene;
+import android.transition.TransitionManager;
 import android.provider.Settings;
 import android.util.AndroidRuntimeException;
 import android.util.ArrayMap;
@@ -75,6 +78,7 @@
 import android.util.EventLog;
 import android.util.Log;
 import android.util.LogPrinter;
+import android.util.Pair;
 import android.util.PrintWriterPrinter;
 import android.util.Slog;
 import android.util.SuperNotCalledException;
@@ -90,6 +94,7 @@
 import android.renderscript.RenderScript;
 import android.security.AndroidKeyStoreProvider;
 
+import com.android.internal.app.IVoiceInteractor;
 import com.android.internal.os.BinderInternal;
 import com.android.internal.os.RuntimeInit;
 import com.android.internal.os.SamplingProfilerIntegration;
@@ -261,6 +266,7 @@
         IBinder token;
         int ident;
         Intent intent;
+        IVoiceInteractor voiceInteractor;
         Bundle state;
         Activity activity;
         Window window;
@@ -289,6 +295,7 @@
         boolean isForward;
         int pendingConfigChanges;
         boolean onlyLocalRequest;
+        Bundle activityOptions;
 
         View mPendingRemoveWindow;
         WindowManager mPendingRemoveWindowManager;
@@ -581,9 +588,10 @@
         }
 
         public final void scheduleResumeActivity(IBinder token, int processState,
-                boolean isForward) {
+                boolean isForward, Bundle resumeArgs) {
             updateProcessState(processState, false);
-            sendMessage(H.RESUME_ACTIVITY, token, isForward ? 1 : 0);
+            sendMessage(H.RESUME_ACTIVITY, new Pair<IBinder, Bundle>(token, resumeArgs),
+                    isForward ? 1 : 0);
         }
 
         public final void scheduleSendResult(IBinder token, List<ResultInfo> results) {
@@ -597,9 +605,11 @@
         // activity itself back to the activity manager. (matters more with ipc)
         public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
                 ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
+                IVoiceInteractor voiceInteractor,
                 int procState, Bundle state, List<ResultInfo> pendingResults,
                 List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
-                String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler) {
+                String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler,
+                Bundle resumeArgs) {
 
             updateProcessState(procState, false);
 
@@ -608,6 +618,7 @@
             r.token = token;
             r.ident = ident;
             r.intent = intent;
+            r.voiceInteractor = voiceInteractor;
             r.activityInfo = info;
             r.compatInfo = compatInfo;
             r.state = state;
@@ -621,6 +632,7 @@
             r.profileFile = profileName;
             r.profileFd = profileFd;
             r.autoStopProfiler = autoStopProfiler;
+            r.activityOptions = resumeArgs;
 
             updatePendingConfiguration(curConfig);
 
@@ -1244,7 +1256,7 @@
             switch (msg.what) {
                 case LAUNCH_ACTIVITY: {
                     Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityStart");
-                    ActivityClientRecord r = (ActivityClientRecord)msg.obj;
+                    final ActivityClientRecord r = (ActivityClientRecord) msg.obj;
 
                     r.packageInfo = getPackageInfoNoCheck(
                             r.activityInfo.applicationInfo, r.compatInfo);
@@ -1290,7 +1302,8 @@
                     break;
                 case RESUME_ACTIVITY:
                     Trace.traceBegin(Trace.TRACE_TAG_ACTIVITY_MANAGER, "activityResume");
-                    handleResumeActivity((IBinder)msg.obj, true,
+                    final Pair<IBinder, Bundle> resumeArgs = (Pair<IBinder, Bundle>) msg.obj;
+                    handleResumeActivity(resumeArgs.first, resumeArgs.second, true,
                             msg.arg1 != 0, true);
                     Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
                     break;
@@ -1583,10 +1596,10 @@
     /**
      * Creates the top level resources for the given package.
      */
-    Resources getTopLevelResources(String resDir, String[] overlayDirs,
+    Resources getTopLevelResources(String resDir, String[] overlayDirs, String[] libDirs,
             int displayId, Configuration overrideConfiguration,
             LoadedApk pkgInfo) {
-        return mResourcesManager.getTopLevelResources(resDir, overlayDirs, displayId,
+        return mResourcesManager.getTopLevelResources(resDir, overlayDirs, libDirs, displayId,
                 overrideConfiguration, pkgInfo.getCompatibilityInfo(), null);
     }
 
@@ -2076,7 +2089,7 @@
                     + ", comp=" + name
                     + ", token=" + token);
         }
-        return performLaunchActivity(r, null);
+        return performLaunchActivity(r, null, null);
     }
 
     public final Activity getActivity(IBinder token) {
@@ -2129,7 +2142,8 @@
         sendMessage(H.CLEAN_UP_CONTEXT, cci);
     }
 
-    private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
+    private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent,
+            Bundle options) {
         // System.out.println("##### [" + System.currentTimeMillis() + "] ActivityThread.performLaunchActivity(" + r + ")");
 
         ActivityInfo aInfo = r.activityInfo;
@@ -2187,7 +2201,8 @@
                         + r.activityInfo.name + " with config " + config);
                 activity.attach(appContext, this, getInstrumentation(), r.token,
                         r.ident, app, r.intent, r.activityInfo, title, r.parent,
-                        r.embeddedID, r.lastNonConfigurationInstances, config);
+                        r.embeddedID, r.lastNonConfigurationInstances, config, options,
+                        r.voiceInteractor);
 
                 if (customIntent != null) {
                     activity.mIntent = customIntent;
@@ -2297,12 +2312,13 @@
 
         if (localLOGV) Slog.v(
             TAG, "Handling launch of " + r);
-        Activity a = performLaunchActivity(r, customIntent);
+
+        Activity a = performLaunchActivity(r, customIntent, r.activityOptions);
 
         if (a != null) {
             r.createdConfig = new Configuration(mConfiguration);
             Bundle oldState = r.state;
-            handleResumeActivity(r.token, false, r.isForward,
+            handleResumeActivity(r.token, r.activityOptions, false, r.isForward,
                     !r.activity.mFinished && !r.startsNotResumed);
 
             if (!r.activity.mFinished && r.startsNotResumed) {
@@ -2352,7 +2368,7 @@
             // manager to stop us.
             try {
                 ActivityManagerNative.getDefault()
-                    .finishActivity(r.token, Activity.RESULT_CANCELED, null);
+                    .finishActivity(r.token, Activity.RESULT_CANCELED, null, false);
             } catch (RemoteException ex) {
                 // Ignore
             }
@@ -2861,12 +2877,13 @@
         r.mPendingRemoveWindowManager = null;
     }
 
-    final void handleResumeActivity(IBinder token, boolean clearHide, boolean isForward,
-            boolean reallyResume) {
+    final void handleResumeActivity(IBinder token, Bundle resumeArgs,
+            boolean clearHide, boolean isForward, boolean reallyResume) {
         // If we are getting ready to gc after going to the background, well
         // we are back active so skip it.
         unscheduleGcIdler();
 
+        // TODO Push resumeArgs into the activity for consideration
         ActivityClientRecord r = performResumeActivity(token, clearHide);
 
         if (r != null) {
@@ -2972,7 +2989,7 @@
             // just end this activity.
             try {
                 ActivityManagerNative.getDefault()
-                    .finishActivity(token, Activity.RESULT_CANCELED, null);
+                    .finishActivity(token, Activity.RESULT_CANCELED, null, false);
             } catch (RemoteException ex) {
             }
         }
@@ -2991,11 +3008,19 @@
                 int h;
                 if (w < 0) {
                     Resources res = r.activity.getResources();
-                    mThumbnailHeight = h =
-                        res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_height);
-
-                    mThumbnailWidth = w =
-                        res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_width);
+                    Configuration config = res.getConfiguration();
+                    boolean useAlternateRecents = (config.smallestScreenWidthDp < 600);
+                    if (useAlternateRecents) {
+                        int wId = com.android.internal.R.dimen.recents_thumbnail_width;
+                        int hId = com.android.internal.R.dimen.recents_thumbnail_height;
+                        mThumbnailWidth = w = res.getDimensionPixelSize(wId);
+                        mThumbnailHeight = h = res.getDimensionPixelSize(hId);
+                    } else {
+                        mThumbnailHeight = h =
+                            res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_height);
+                        mThumbnailWidth = w =
+                            res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_width);
+                    }
                 } else {
                     h = mThumbnailHeight;
                 }
@@ -3787,6 +3812,7 @@
             }
         }
         r.startsNotResumed = tmp.startsNotResumed;
+        r.activityOptions = null;
 
         handleLaunchActivity(r, currentIntent);
     }
@@ -3964,6 +3990,7 @@
         ArrayList<ComponentCallbacks2> callbacks = collectComponentCallbacks(false, config);
 
         // Cleanup hardware accelerated stuff
+        // TODO: Do we actually want to do this in response to all config changes?
         WindowManagerGlobal.getInstance().trimLocalMemory();
 
         freeTextLayoutCachesIfNeeded(configDiff);
diff --git a/core/java/android/app/ActivityTransitionCoordinator.java b/core/java/android/app/ActivityTransitionCoordinator.java
new file mode 100644
index 0000000..3c1455b
--- /dev/null
+++ b/core/java/android/app/ActivityTransitionCoordinator.java
@@ -0,0 +1,842 @@
+/*
+ * Copyright (C) 2014 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 android.app;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
+import android.transition.Transition;
+import android.transition.TransitionManager;
+import android.transition.TransitionSet;
+import android.util.ArrayMap;
+import android.util.Pair;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroupOverlay;
+import android.view.ViewTreeObserver;
+import android.view.Window;
+import android.widget.ImageView;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Base class for ExitTransitionCoordinator and EnterTransitionCoordinator, classes
+ * that manage activity transitions and the communications coordinating them between
+ * Activities. The ExitTransitionCoordinator is created in the
+ * ActivityOptions#makeSceneTransitionAnimation. The EnterTransitionCoordinator
+ * is created by ActivityOptions#createEnterActivityTransition by Activity when the window is
+ * attached.
+ *
+ * Typical startActivity goes like this:
+ * 1) ExitTransitionCoordinator created with ActivityOptions#makeSceneTransitionAnimation
+ * 2) Activity#startActivity called and that calls startExit() through
+ *    ActivityOptions#dispatchStartExit
+ *    - Exit transition starts by setting transitioning Views to INVISIBLE
+ * 3) Launched Activity starts, creating an EnterTransitionCoordinator.
+ *    - The Window is made translucent
+ *    - The Window background alpha is set to 0
+ *    - The transitioning views are made INVISIBLE
+ *    - MSG_SET_LISTENER is sent back to the ExitTransitionCoordinator.
+ * 4) The shared element transition completes.
+ *    - MSG_TAKE_SHARED_ELEMENTS is sent to the EnterTransitionCoordinator
+ * 5) The MSG_TAKE_SHARED_ELEMENTS is received by the EnterTransitionCoordinator.
+ *    - Shared elements are made VISIBLE
+ *    - Shared elements positions and size are set to match the end state of the calling
+ *      Activity.
+ *    - The shared element transition is started
+ *    - If the window allows overlapping transitions, the views transition is started by setting
+ *      the entering Views to VISIBLE and the background alpha is animated to opaque.
+ *    - MSG_HIDE_SHARED_ELEMENTS is sent to the ExitTransitionCoordinator
+ * 6) MSG_HIDE_SHARED_ELEMENTS is received by the ExitTransitionCoordinator
+ *    - The shared elements are made INVISIBLE
+ * 7) The exit transition completes in the calling Activity.
+ *    - MSG_EXIT_TRANSITION_COMPLETE is sent to the EnterTransitionCoordinator.
+ * 8) The MSG_EXIT_TRANSITION_COMPLETE is received by the EnterTransitionCoordinator.
+ *    - If the window doesn't allow overlapping enter transitions, the enter transition is started
+ *      by setting entering views to VISIBLE and the background is animated to opaque.
+ * 9) The background opacity animation completes.
+ *    - The window is made opaque
+ * 10) The calling Activity gets an onStop() call
+ *    - onActivityStopped() is called and all exited Views are made VISIBLE.
+ *
+ * Typical finishWithTransition goes like this:
+ * 1) finishWithTransition() calls startExit()
+ *    - The Window start transitioning to Translucent
+ *    - If no background exists, a black background is substituted
+ *    - MSG_PREPARE_RESTORE is sent to the ExitTransitionCoordinator
+ *    - The shared elements in the scene are matched against those shared elements
+ *      that were sent by comparing the names.
+ *    - The exit transition is started by setting Views to INVISIBLE.
+ * 2) MSG_PREPARE_RESTORE is received by the EnterTransitionCoordinator
+ *    - All transitioning views are made VISIBLE to reverse what was done when onActivityStopped()
+ *      was called
+ * 3) The Window is made translucent and a callback is received
+ *    - The background alpha is animated to 0
+ * 4) The background alpha animation completes
+ * 5) The shared element transition completes
+ *    - After both 4 & 5 complete, MSG_TAKE_SHARED_ELEMENTS is sent to the
+ *      ExitTransitionCoordinator
+ * 6) MSG_TAKE_SHARED_ELEMENTS is received by ExitTransitionCoordinator
+ *    - Shared elements are made VISIBLE
+ *    - Shared elements positions and size are set to match the end state of the calling
+ *      Activity.
+ *    - The shared element transition is started
+ *    - If the window allows overlapping transitions, the views transition is started by setting
+ *      the entering Views to VISIBLE.
+ *    - MSG_HIDE_SHARED_ELEMENTS is sent to the EnterTransitionCoordinator
+ * 7) MSG_HIDE_SHARED_ELEMENTS is received by the EnterTransitionCoordinator
+ *    - The shared elements are made INVISIBLE
+ * 8) The exit transition completes in the finishing Activity.
+ *    - MSG_EXIT_TRANSITION_COMPLETE is sent to the ExitTransitionCoordinator.
+ *    - finish() is called on the exiting Activity
+ * 9) The MSG_EXIT_TRANSITION_COMPLETE is received by the ExitTransitionCoordinator.
+ *    - If the window doesn't allow overlapping enter transitions, the enter transition is started
+ *      by setting entering views to VISIBLE.
+ */
+abstract class ActivityTransitionCoordinator extends ResultReceiver {
+    private static final String TAG = "ActivityTransitionCoordinator";
+
+    /**
+     * The names of shared elements that are transitioned to the started Activity.
+     * This is also the name of shared elements that the started Activity accepted.
+     */
+    public static final String KEY_SHARED_ELEMENT_NAMES = "android:shared_element_names";
+
+    public static final String KEY_SHARED_ELEMENT_STATE = "android:shared_element_state";
+
+    /**
+     * For Activity transitions, the called Activity's listener to receive calls
+     * when transitions complete.
+     */
+    static final String KEY_TRANSITION_RESULTS_RECEIVER = "android:transitionTargetListener";
+
+    private static final String KEY_SCREEN_X = "shared_element:screenX";
+    private static final String KEY_SCREEN_Y = "shared_element:screenY";
+    private static final String KEY_TRANSLATION_Z = "shared_element:translationZ";
+    private static final String KEY_WIDTH = "shared_element:width";
+    private static final String KEY_HEIGHT = "shared_element:height";
+    private static final String KEY_NAME = "shared_element:name";
+    private static final String KEY_BITMAP = "shared_element:bitmap";
+
+    /**
+     * Sent by the exiting coordinator (either EnterTransitionCoordinator
+     * or ExitTransitionCoordinator) after the shared elements have
+     * become stationary (shared element transition completes). This tells
+     * the remote coordinator to take control of the shared elements and
+     * that animations may begin. The remote Activity won't start entering
+     * until this message is received, but may wait for
+     * MSG_EXIT_TRANSITION_COMPLETE if allowOverlappingTransitions() is true.
+     */
+    public static final int MSG_SET_LISTENER = 100;
+
+    /**
+     * Sent by the entering coordinator to tell the exiting coordinator
+     * to hide its shared elements after it has started its shared
+     * element transition. This is temporary until the
+     * interlock of shared elements is figured out.
+     */
+    public static final int MSG_HIDE_SHARED_ELEMENTS = 101;
+
+    /**
+     * Sent by the EnterTransitionCoordinator to tell the
+     * ExitTransitionCoordinator to hide all of its exited views after
+     * MSG_ACTIVITY_STOPPED has caused them all to show.
+     */
+    public static final int MSG_PREPARE_RESTORE = 102;
+
+    /**
+     * Sent by the exiting Activity in ActivityOptions#dispatchActivityStopped
+     * to leave the Activity in a good state after it has been hidden.
+     */
+    public static final int MSG_ACTIVITY_STOPPED = 103;
+
+    /**
+     * Sent by the exiting coordinator (either EnterTransitionCoordinator
+     * or ExitTransitionCoordinator) after the shared elements have
+     * become stationary (shared element transition completes). This tells
+     * the remote coordinator to take control of the shared elements and
+     * that animations may begin. The remote Activity won't start entering
+     * until this message is received, but may wait for
+     * MSG_EXIT_TRANSITION_COMPLETE if allowOverlappingTransitions() is true.
+     */
+    public static final int MSG_TAKE_SHARED_ELEMENTS = 104;
+
+    /**
+     * Sent by the exiting coordinator (either
+     * EnterTransitionCoordinator or ExitTransitionCoordinator) after
+     * the exiting Views have finished leaving the scene. This will
+     * be ignored if allowOverlappingTransitions() is true on the
+     * remote coordinator. If it is false, it will trigger the enter
+     * transition to start.
+     */
+    public static final int MSG_EXIT_TRANSITION_COMPLETE = 105;
+
+    /**
+     * Sent by Activity#startActivity to begin the exit transition.
+     */
+    public static final int MSG_START_EXIT_TRANSITION = 106;
+
+    private Window mWindow;
+    private ArrayList<View> mSharedElements = new ArrayList<View>();
+    private ArrayList<String> mTargetSharedNames = new ArrayList<String>();
+    private ActivityOptions.ActivityTransitionListener mListener =
+            new ActivityOptions.ActivityTransitionListener();
+    private ArrayList<View> mEnteringViews;
+    private ResultReceiver mRemoteResultReceiver;
+    private boolean mNotifiedSharedElementTransitionComplete;
+    private boolean mNotifiedExitTransitionComplete;
+    private boolean mSharedElementTransitionStarted;
+
+    private FixedEpicenterCallback mEpicenterCallback = new FixedEpicenterCallback();
+
+    private Transition.TransitionListener mSharedElementListener =
+            new Transition.TransitionListenerAdapter() {
+        @Override
+        public void onTransitionEnd(Transition transition) {
+            transition.removeListener(this);
+            onSharedElementTransitionEnd();
+        }
+    };
+
+    private Transition.TransitionListener mExitListener =
+            new Transition.TransitionListenerAdapter() {
+        @Override
+        public void onTransitionEnd(Transition transition) {
+            transition.removeListener(this);
+            onExitTransitionEnd();
+        }
+    };
+
+    public ActivityTransitionCoordinator(Window window)
+    {
+        super(new Handler());
+        mWindow = window;
+    }
+
+    // -------------------- ResultsReceiver Overrides ----------------------
+    @Override
+    protected void onReceiveResult(int resultCode, Bundle resultData) {
+        switch (resultCode) {
+            case MSG_SET_LISTENER:
+                ResultReceiver resultReceiver
+                        = resultData.getParcelable(KEY_TRANSITION_RESULTS_RECEIVER);
+                setRemoteResultReceiver(resultReceiver);
+                onSetResultReceiver();
+                break;
+            case MSG_HIDE_SHARED_ELEMENTS:
+                onHideSharedElements();
+                break;
+            case MSG_PREPARE_RESTORE:
+                onPrepareRestore();
+                break;
+            case MSG_EXIT_TRANSITION_COMPLETE:
+                if (!mSharedElementTransitionStarted) {
+                    send(resultCode, resultData);
+                } else {
+                    onRemoteSceneExitComplete();
+                }
+                break;
+            case MSG_TAKE_SHARED_ELEMENTS:
+                ArrayList<String> sharedElementNames
+                        = resultData.getStringArrayList(KEY_SHARED_ELEMENT_NAMES);
+                Bundle sharedElementState = resultData.getBundle(KEY_SHARED_ELEMENT_STATE);
+                onTakeSharedElements(sharedElementNames, sharedElementState);
+                break;
+            case MSG_ACTIVITY_STOPPED:
+                onActivityStopped();
+                break;
+            case MSG_START_EXIT_TRANSITION:
+                startExit();
+                break;
+        }
+    }
+
+    // -------------------- calls that can be overridden by subclasses --------------------
+
+    /**
+     * Called when MSG_SET_LISTENER is received. This will only be received by
+     * ExitTransitionCoordinator.
+     */
+    protected void onSetResultReceiver() {}
+
+    /**
+     * Called when MSG_HIDE_SHARED_ELEMENTS is received
+     */
+    protected void onHideSharedElements() {
+        setViewVisibility(getSharedElements(), View.INVISIBLE);
+        mListener.onSharedElementTransferred(getSharedElementNames(), getSharedElements());
+    }
+
+    /**
+     * Called when MSG_PREPARE_RESTORE is called. This will only be received by
+     * ExitTransitionCoordinator.
+     */
+    protected void onPrepareRestore() {
+        mListener.onEnterReady();
+    }
+
+    /**
+     * Called when MSG_EXIT_TRANSITION_COMPLETE is received -- the remote coordinator has
+     * completed its exit transition. This can be called by the ExitTransitionCoordinator when
+     * starting an Activity or EnterTransitionCoordinator when called with finishWithTransition.
+     */
+    protected void onRemoteSceneExitComplete() {
+        if (!allowOverlappingTransitions()) {
+            Transition transition = beginTransition(mEnteringViews, false, true, true);
+            onStartEnterTransition(transition, mEnteringViews);
+        }
+        mListener.onRemoteExitComplete();
+    }
+
+    /**
+     * Called when MSG_TAKE_SHARED_ELEMENTS is received. This means that the shared elements are
+     * in a stable state and ready to move to the Window.
+     * @param sharedElementNames The names of the shared elements to move.
+     * @param state Contains the shared element states (size & position)
+     */
+    protected void onTakeSharedElements(ArrayList<String> sharedElementNames, Bundle state) {
+        setSharedElements();
+        reconcileSharedElements(sharedElementNames);
+        mEnteringViews.removeAll(mSharedElements);
+        final ArrayList<View> accepted = new ArrayList<View>();
+        final ArrayList<View> rejected = new ArrayList<View>();
+        createSharedElementImages(accepted, rejected, sharedElementNames, state);
+        setSharedElementState(state, accepted);
+        handleRejected(rejected);
+
+        if (getViewsTransition() != null) {
+            setViewVisibility(mEnteringViews, View.INVISIBLE);
+        }
+        setViewVisibility(mSharedElements, View.VISIBLE);
+        Transition transition = beginTransition(mEnteringViews, true, allowOverlappingTransitions(),
+                true);
+
+        if (allowOverlappingTransitions()) {
+            onStartEnterTransition(transition, mEnteringViews);
+        }
+
+        mRemoteResultReceiver.send(MSG_HIDE_SHARED_ELEMENTS, null);
+    }
+
+    /**
+     * Called when MSG_ACTIVITY_STOPPED is received. This is received when Activity.onStop is
+     * called after running startActivity* is called using an Activity Transition.
+     */
+    protected void onActivityStopped() {}
+
+    /**
+     * Called when the start transition is ready to run. This may be immediately after
+     * MSG_TAKE_SHARED_ELEMENTS or MSG_EXIT_TRANSITION_COMPLETE, depending on whether
+     * overlapping transitions are allowed.
+     * @param transition The transition currently started.
+     * @param enteringViews The views entering the scene. This won't include shared elements.
+     */
+    protected void onStartEnterTransition(Transition transition, ArrayList<View> enteringViews) {
+        if (getViewsTransition() != null) {
+            setViewVisibility(enteringViews, View.VISIBLE);
+        }
+        mEnteringViews = null;
+        mListener.onStartEnterTransition(getSharedElementNames(), getSharedElements());
+    }
+
+    /**
+     * Called when the exit transition has started.
+     * @param exitingViews The views leaving the scene. This won't include shared elements.
+     */
+    protected void onStartExitTransition(ArrayList<View> exitingViews) {}
+
+    /**
+     * Called during the exit when the shared element transition has completed.
+     */
+    protected void onSharedElementTransitionEnd() {
+        Bundle bundle = new Bundle();
+        int[] tempLoc = new int[2];
+        for (int i = 0; i < mSharedElements.size(); i++) {
+            View sharedElement = mSharedElements.get(i);
+            String name = mTargetSharedNames.get(i);
+            captureSharedElementState(sharedElement, name, bundle, tempLoc);
+        }
+        Bundle allValues = new Bundle();
+        allValues.putStringArrayList(KEY_SHARED_ELEMENT_NAMES, getSharedElementNames());
+        allValues.putBundle(KEY_SHARED_ELEMENT_STATE, bundle);
+        sharedElementTransitionComplete(allValues);
+        mListener.onSharedElementExitTransitionComplete();
+    }
+
+    /**
+     * Called after the shared element transition is complete to pass the shared element state
+     * to the remote coordinator.
+     * @param bundle The Bundle to send to the coordinator containing the shared element state.
+     */
+    protected abstract void sharedElementTransitionComplete(Bundle bundle);
+
+    /**
+     * Called when the exit transition finishes.
+     */
+    protected void onExitTransitionEnd() {
+        mListener.onExitTransitionComplete();
+    }
+
+    /**
+     * Called to start the exit transition. Launched from ActivityOptions#dispatchStartExit
+     */
+    protected abstract void startExit();
+
+    /**
+     * A non-null transition indicates that the Views of the Window should be made INVISIBLE.
+     * @return The Transition used to cause transitioning views to either enter or exit the scene.
+     */
+    protected abstract Transition getViewsTransition();
+
+    /**
+     * @return The Transition used to move the shared elements from the start position and size
+     * to the end position and size.
+     */
+    protected abstract Transition getSharedElementTransition();
+
+    /**
+     * @return When the enter transition should overlap with the exit transition of the
+     * remote controller.
+     */
+    protected abstract boolean allowOverlappingTransitions();
+
+    // called by subclasses
+
+    protected void notifySharedElementTransitionComplete(Bundle sharedElements) {
+        if (!mNotifiedSharedElementTransitionComplete) {
+            mNotifiedSharedElementTransitionComplete = true;
+            mRemoteResultReceiver.send(MSG_TAKE_SHARED_ELEMENTS, sharedElements);
+        }
+    }
+
+    protected void notifyExitTransitionComplete() {
+        if (!mNotifiedExitTransitionComplete) {
+            mNotifiedExitTransitionComplete = true;
+            mRemoteResultReceiver.send(MSG_EXIT_TRANSITION_COMPLETE, null);
+        }
+    }
+
+    protected void notifyPrepareRestore() {
+        mRemoteResultReceiver.send(MSG_PREPARE_RESTORE, null);
+    }
+
+    protected void setRemoteResultReceiver(ResultReceiver resultReceiver) {
+        mRemoteResultReceiver = resultReceiver;
+    }
+
+    protected void notifySetListener() {
+        Bundle bundle = new Bundle();
+        bundle.putParcelable(KEY_TRANSITION_RESULTS_RECEIVER, this);
+        mRemoteResultReceiver.send(MSG_SET_LISTENER, bundle);
+    }
+
+    protected void setEnteringViews(ArrayList<View> views) {
+        mEnteringViews = views;
+    }
+
+    protected void setSharedElements() {
+        Pair<View, String>[] sharedElements = mListener.getSharedElementsMapping();
+        mSharedElements.clear();
+        mTargetSharedNames.clear();
+        if (sharedElements == null) {
+            ArrayMap<String, View> map = new ArrayMap<String, View>();
+            if (getViewsTransition() != null) {
+                setViewVisibility(mEnteringViews, View.VISIBLE);
+            }
+            getDecor().findSharedElements(map);
+            if (getViewsTransition() != null) {
+                setViewVisibility(mEnteringViews, View.INVISIBLE);
+            }
+            for (int i = 0; i < map.size(); i++) {
+                View view = map.valueAt(i);
+                String name = map.keyAt(i);
+                mSharedElements.add(view);
+                mTargetSharedNames.add(name);
+            }
+        } else {
+            for (int i = 0; i < sharedElements.length; i++) {
+                Pair<View, String> viewStringPair = sharedElements[i];
+                View view = viewStringPair.first;
+                String name = viewStringPair.second;
+                mSharedElements.add(view);
+                mTargetSharedNames.add(name);
+            }
+        }
+    }
+
+    protected ArrayList<View> getSharedElements() {
+        return mSharedElements;
+    }
+
+    protected ArrayList<String> getSharedElementNames() {
+        return mTargetSharedNames;
+    }
+
+    protected Window getWindow() {
+        return mWindow;
+    }
+
+    protected ViewGroup getDecor() {
+        return (mWindow == null) ? null : (ViewGroup) mWindow.getDecorView();
+    }
+
+    protected void startExitTransition(ArrayList<String> sharedElements) {
+        setSharedElements();
+        reconcileSharedElements(sharedElements);
+        ArrayList<View> transitioningViews = captureTransitioningViews();
+        beginTransition(transitioningViews, true, true, false);
+        onStartExitTransition(transitioningViews);
+        if (getViewsTransition() != null) {
+            setViewVisibility(transitioningViews, View.INVISIBLE);
+        }
+        mListener.onStartExitTransition(getSharedElementNames(), getSharedElements());
+    }
+
+    protected void clearConnections() {
+        mRemoteResultReceiver = null;
+    }
+
+    // public API
+
+    public void setActivityTransitionListener(ActivityOptions.ActivityTransitionListener listener) {
+        if (listener == null) {
+            mListener = new ActivityOptions.ActivityTransitionListener();
+        } else {
+            mListener = listener;
+        }
+    }
+
+    // private methods
+
+    private Transition configureTransition(Transition transition) {
+        if (transition != null) {
+            transition = transition.clone();
+            transition.setEpicenterCallback(mEpicenterCallback);
+        }
+        return transition;
+    }
+
+    private void reconcileSharedElements(ArrayList<String> sharedElementNames) {
+        // keep only those that are in sharedElementNames.
+        int numSharedElements = sharedElementNames.size();
+        int targetIndex = 0;
+        for (int i = 0; i < numSharedElements; i++) {
+            String name = sharedElementNames.get(i);
+            int index = mTargetSharedNames.indexOf(name);
+            if (index >= 0) {
+                // Swap the items at the indexes if necessary.
+                if (index != targetIndex) {
+                    View temp = mSharedElements.get(index);
+                    mSharedElements.set(index, mSharedElements.get(targetIndex));
+                    mSharedElements.set(targetIndex, temp);
+                    mTargetSharedNames.set(index, mTargetSharedNames.get(targetIndex));
+                    mTargetSharedNames.set(targetIndex, name);
+                }
+                targetIndex++;
+            }
+        }
+        for (int i = mSharedElements.size() - 1; i >= targetIndex; i--) {
+            mSharedElements.remove(i);
+            mTargetSharedNames.remove(i);
+        }
+        Rect epicenter = null;
+        if (!mTargetSharedNames.isEmpty()
+                && mTargetSharedNames.get(0).equals(sharedElementNames.get(0))) {
+            epicenter = calcEpicenter(mSharedElements.get(0));
+        }
+        mEpicenterCallback.setEpicenter(epicenter);
+    }
+
+    private void setSharedElementState(Bundle sharedElementState,
+            final ArrayList<View> acceptedOverlayViews) {
+        final int[] tempLoc = new int[2];
+        if (sharedElementState != null) {
+            for (int i = 0; i < mSharedElements.size(); i++) {
+                View sharedElement = mSharedElements.get(i);
+                View parent = (View) sharedElement.getParent();
+                parent.getLocationOnScreen(tempLoc);
+                String name = mTargetSharedNames.get(i);
+                setSharedElementState(sharedElement, name, sharedElementState, tempLoc);
+                sharedElement.requestLayout();
+            }
+        }
+        mListener.onCaptureSharedElementStart(mTargetSharedNames, mSharedElements,
+                acceptedOverlayViews);
+
+        getDecor().getViewTreeObserver().addOnPreDrawListener(
+                new ViewTreeObserver.OnPreDrawListener() {
+                    @Override
+                    public boolean onPreDraw() {
+                        getDecor().getViewTreeObserver().removeOnPreDrawListener(this);
+                        mListener.onCaptureSharedElementEnd(mTargetSharedNames, mSharedElements,
+                                acceptedOverlayViews);
+                        mSharedElementTransitionStarted = true;
+                        return true;
+                    }
+                }
+        );
+    }
+
+    /**
+     * Sets the captured values from a previous
+     * {@link #captureSharedElementState(android.view.View, String, android.os.Bundle, int[])}
+     * @param view The View to apply placement changes to.
+     * @param name The shared element name given from the source Activity.
+     * @param transitionArgs A <code>Bundle</code> containing all placementinformation for named
+     *                       shared elements in the scene.
+     * @param parentLoc The x and y coordinates of the parent's screen position.
+     */
+    private static void setSharedElementState(View view, String name, Bundle transitionArgs,
+            int[] parentLoc) {
+        Bundle sharedElementBundle = transitionArgs.getBundle(name);
+        if (sharedElementBundle == null) {
+            return;
+        }
+
+        float z = sharedElementBundle.getFloat(KEY_TRANSLATION_Z);
+        view.setTranslationZ(z);
+
+        int x = sharedElementBundle.getInt(KEY_SCREEN_X);
+        int y = sharedElementBundle.getInt(KEY_SCREEN_Y);
+        int width = sharedElementBundle.getInt(KEY_WIDTH);
+        int height = sharedElementBundle.getInt(KEY_HEIGHT);
+
+        int widthSpec = View.MeasureSpec.makeMeasureSpec(width, View.MeasureSpec.EXACTLY);
+        int heightSpec = View.MeasureSpec.makeMeasureSpec(height, View.MeasureSpec.EXACTLY);
+        view.measure(widthSpec, heightSpec);
+
+        int left = x - parentLoc[0];
+        int top = y - parentLoc[1];
+        int right = left + width;
+        int bottom = top + height;
+        view.layout(left, top, right, bottom);
+    }
+
+    /**
+     * Captures placement information for Views with a shared element name for
+     * Activity Transitions.
+     * @param view The View to capture the placement information for.
+     * @param name The shared element name in the target Activity to apply the placement
+     *             information for.
+     * @param transitionArgs Bundle to store shared element placement information.
+     * @param tempLoc A temporary int[2] for capturing the current location of views.
+     * @see #setSharedElementState(android.view.View, String, android.os.Bundle, int[])
+     */
+    private static void captureSharedElementState(View view, String name, Bundle transitionArgs,
+            int[] tempLoc) {
+        Bundle sharedElementBundle = new Bundle();
+        view.getLocationOnScreen(tempLoc);
+        float scaleX = view.getScaleX();
+        sharedElementBundle.putInt(KEY_SCREEN_X, tempLoc[0]);
+        int width = Math.round(view.getWidth() * scaleX);
+        sharedElementBundle.putInt(KEY_WIDTH, width);
+
+        float scaleY = view.getScaleY();
+        sharedElementBundle.putInt(KEY_SCREEN_Y, tempLoc[1]);
+        int height= Math.round(view.getHeight() * scaleY);
+        sharedElementBundle.putInt(KEY_HEIGHT, height);
+
+        sharedElementBundle.putFloat(KEY_TRANSLATION_Z, view.getTranslationZ());
+
+        sharedElementBundle.putString(KEY_NAME, view.getSharedElementName());
+
+        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(bitmap);
+        view.draw(canvas);
+        sharedElementBundle.putParcelable(KEY_BITMAP, bitmap);
+
+        transitionArgs.putBundle(name, sharedElementBundle);
+    }
+
+    private static Rect calcEpicenter(View view) {
+        int[] loc = new int[2];
+        view.getLocationOnScreen(loc);
+        int left = loc[0] + Math.round(view.getTranslationX());
+        int top = loc[1] + Math.round(view.getTranslationY());
+        int right = left + view.getWidth();
+        int bottom = top + view.getHeight();
+        return new Rect(left, top, right, bottom);
+    }
+
+    public static void setViewVisibility(Collection<View> views, int visibility) {
+        if (views != null) {
+            for (View view : views) {
+                view.setVisibility(visibility);
+            }
+        }
+    }
+
+    private static Transition addTransitionTargets(Transition transition, Collection<View> views) {
+        if (transition == null || views == null || views.isEmpty()) {
+            return null;
+        }
+        TransitionSet set = new TransitionSet();
+        set.addTransition(transition.clone());
+        if (views != null) {
+            for (View view: views) {
+                set.addTarget(view);
+            }
+        }
+        return set;
+    }
+
+    private ArrayList<View> captureTransitioningViews() {
+        if (getViewsTransition() == null) {
+            return null;
+        }
+        ArrayList<View> transitioningViews = new ArrayList<View>();
+        getDecor().captureTransitioningViews(transitioningViews);
+        transitioningViews.removeAll(getSharedElements());
+        return transitioningViews;
+    }
+
+    private Transition getSharedElementTransition(boolean isEnter) {
+        Transition transition = getSharedElementTransition();
+        if (transition == null) {
+            return null;
+        }
+        transition = configureTransition(transition);
+        if (!isEnter) {
+            transition.addListener(mSharedElementListener);
+        }
+        return transition;
+    }
+
+    private Transition getViewsTransition(ArrayList<View> transitioningViews, boolean isEnter) {
+        Transition transition = getViewsTransition();
+        if (transition == null) {
+            return null;
+        }
+        transition = configureTransition(transition);
+        if (!isEnter) {
+            transition.addListener(mExitListener);
+        }
+        return addTransitionTargets(transition, transitioningViews);
+    }
+
+    private Transition beginTransition(ArrayList<View> transitioningViews,
+            boolean transitionSharedElement, boolean transitionViews, boolean isEnter) {
+        Transition sharedElementTransition = null;
+        if (transitionSharedElement) {
+            sharedElementTransition = getSharedElementTransition(isEnter);
+            if (!isEnter && sharedElementTransition == null) {
+                onSharedElementTransitionEnd();
+            }
+        }
+        Transition viewsTransition = null;
+        if (transitionViews) {
+            viewsTransition = getViewsTransition(transitioningViews, isEnter);
+            if (!isEnter && viewsTransition == null) {
+                onExitTransitionEnd();
+            }
+        }
+
+        Transition transition = null;
+        if (sharedElementTransition == null) {
+            transition = viewsTransition;
+        } else if (viewsTransition == null) {
+            transition = sharedElementTransition;
+        } else {
+            TransitionSet set = new TransitionSet();
+            set.addTransition(sharedElementTransition);
+            set.addTransition(viewsTransition);
+            transition = set;
+        }
+        if (transition != null) {
+            TransitionManager.beginDelayedTransition(getDecor(), transition);
+            if (transitionSharedElement && !mSharedElements.isEmpty()) {
+                mSharedElements.get(0).invalidate();
+            } else if (transitionViews && !transitioningViews.isEmpty()) {
+                transitioningViews.get(0).invalidate();
+            }
+        }
+        return transition;
+    }
+
+    private void handleRejected(final ArrayList<View> rejected) {
+        int numRejected = rejected.size();
+        if (numRejected == 0) {
+            return;
+        }
+        boolean rejectionHandled = mListener.handleRejectedSharedElements(rejected);
+        if (rejectionHandled) {
+            return;
+        }
+
+        ViewGroupOverlay overlay = getDecor().getOverlay();
+        ObjectAnimator animator = null;
+        for (int i = 0; i < numRejected; i++) {
+            View view = rejected.get(i);
+            overlay.add(view);
+            animator = ObjectAnimator.ofFloat(view, View.ALPHA, 1, 0);
+            animator.start();
+        }
+        animator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                ViewGroupOverlay overlay = getDecor().getOverlay();
+                for (int i = rejected.size() - 1; i >= 0; i--) {
+                    overlay.remove(rejected.get(i));
+                }
+            }
+        });
+    }
+
+    private void createSharedElementImages(ArrayList<View> accepted, ArrayList<View> rejected,
+            ArrayList<String> sharedElementNames, Bundle state) {
+        int numSharedElements = sharedElementNames.size();
+        Context context = getWindow().getContext();
+        int[] parentLoc = new int[2];
+        getDecor().getLocationOnScreen(parentLoc);
+        for (int i = 0; i < numSharedElements; i++) {
+            String name = sharedElementNames.get(i);
+            Bundle sharedElementBundle = state.getBundle(name);
+            if (sharedElementBundle != null) {
+                Bitmap bitmap = sharedElementBundle.getParcelable(KEY_BITMAP);
+                ImageView imageView = new ImageView(context);
+                imageView.setId(com.android.internal.R.id.shared_element);
+                imageView.setScaleType(ImageView.ScaleType.CENTER);
+                imageView.setImageBitmap(bitmap);
+                imageView.setSharedElementName(name);
+                setSharedElementState(imageView, name, state, parentLoc);
+                if (mTargetSharedNames.contains(name)) {
+                    accepted.add(imageView);
+                } else {
+                    rejected.add(imageView);
+                }
+            }
+        }
+    }
+
+    private static class FixedEpicenterCallback extends Transition.EpicenterCallback {
+        private Rect mEpicenter;
+
+        public void setEpicenter(Rect epicenter) { mEpicenter = epicenter; }
+
+        @Override
+        public Rect getEpicenter(Transition transition) {
+            return mEpicenter;
+        }
+    }
+}
diff --git a/core/java/android/app/AlertDialog.java b/core/java/android/app/AlertDialog.java
index 10d5e25..ab148a9 100644
--- a/core/java/android/app/AlertDialog.java
+++ b/core/java/android/app/AlertDialog.java
@@ -27,7 +27,6 @@
 import android.util.TypedValue;
 import android.view.ContextThemeWrapper;
 import android.view.KeyEvent;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.WindowManager;
 import android.widget.AdapterView;
@@ -147,10 +146,10 @@
     }
 
     /**
-     * Gets one of the buttons used in the dialog.
-     * <p>
-     * If a button does not exist in the dialog, null will be returned.
-     * 
+     * Gets one of the buttons used in the dialog. Returns null if the specified
+     * button does not exist or the dialog has not yet been fully created (for
+     * example, via {@link #show()} or {@link #create()}).
+     *
      * @param whichButton The identifier of the button that should be returned.
      *            For example, this can be
      *            {@link DialogInterface#BUTTON_POSITIVE}.
@@ -159,7 +158,7 @@
     public Button getButton(int whichButton) {
         return mAlert.getButton(whichButton);
     }
-    
+
     /**
      * Gets the list view used in the dialog.
      *  
@@ -853,6 +852,21 @@
         }
         
         /**
+         * Set a custom view resource to be the contents of the Dialog. The
+         * resource will be inflated, adding all top-level views to the screen.
+         *
+         * @param layoutResId Resource ID to be inflated.
+         * @return This Builder object to allow for chaining of calls to set
+         *         methods
+         */
+        public Builder setView(int layoutResId) {
+            P.mView = null;
+            P.mViewLayoutResId = layoutResId;
+            P.mViewSpacingSpecified = false;
+            return this;
+        }
+
+        /**
          * Set a custom view to be the contents of the Dialog. If the supplied view is an instance
          * of a {@link ListView} the light background will be used.
          *
@@ -862,6 +876,7 @@
          */
         public Builder setView(View view) {
             P.mView = view;
+            P.mViewLayoutResId = 0;
             P.mViewSpacingSpecified = false;
             return this;
         }
@@ -891,6 +906,7 @@
         public Builder setView(View view, int viewSpacingLeft, int viewSpacingTop,
                 int viewSpacingRight, int viewSpacingBottom) {
             P.mView = view;
+            P.mViewLayoutResId = 0;
             P.mViewSpacingSpecified = true;
             P.mViewSpacingLeft = viewSpacingLeft;
             P.mViewSpacingTop = viewSpacingTop;
diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java
index 079cf7a..b616c1e 100644
--- a/core/java/android/app/AppOpsManager.java
+++ b/core/java/android/app/AppOpsManager.java
@@ -780,6 +780,25 @@
         }
     }
 
+    /**
+     * Set a non-persisted restriction on an audio operation at a stream-level.
+     * Restrictions are temporary additional constraints imposed on top of the persisted rules
+     * defined by {@link #setMode}.
+     *
+     * @param code The operation to restrict.
+     * @param stream The {@link android.media.AudioManager} stream type.
+     * @param mode The restriction mode (MODE_IGNORED,MODE_ERRORED) or MODE_ALLOWED to unrestrict.
+     * @param exceptionPackages Optional list of packages to exclude from the restriction.
+     * @hide
+     */
+    public void setRestriction(int code, int stream, int mode, String[] exceptionPackages) {
+        try {
+            final int uid = Binder.getCallingUid();
+            mService.setAudioRestriction(code, stream, uid, mode, exceptionPackages);
+        } catch (RemoteException e) {
+        }
+    }
+
     /** @hide */
     public void resetAllModes() {
         try {
@@ -1009,6 +1028,35 @@
     }
 
     /**
+     * Like {@link #checkOp} but at a stream-level for audio operations.
+     * @hide
+     */
+    public int checkAudioOp(int op, int stream, int uid, String packageName) {
+        try {
+            final int mode = mService.checkAudioOperation(op, stream, uid, packageName);
+            if (mode == MODE_ERRORED) {
+                throw new SecurityException(buildSecurityExceptionMsg(op, uid, packageName));
+            }
+            return mode;
+        } catch (RemoteException e) {
+        }
+        return MODE_IGNORED;
+    }
+
+    /**
+     * Like {@link #checkAudioOp} but instead of throwing a {@link SecurityException} it
+     * returns {@link #MODE_ERRORED}.
+     * @hide
+     */
+    public int checkAudioOpNoThrow(int op, int stream, int uid, String packageName) {
+        try {
+            return mService.checkAudioOperation(op, stream, uid, packageName);
+        } catch (RemoteException e) {
+        }
+        return MODE_IGNORED;
+    }
+
+    /**
      * Make note of an application performing an operation.  Note that you must pass
      * in both the uid and name of the application to be checked; this function will verify
      * that these two match, and if not, return {@link #MODE_IGNORED}.  If this call
diff --git a/core/java/android/app/ApplicationErrorReport.java b/core/java/android/app/ApplicationErrorReport.java
index c117486..8b132e0 100644
--- a/core/java/android/app/ApplicationErrorReport.java
+++ b/core/java/android/app/ApplicationErrorReport.java
@@ -24,7 +24,6 @@
 import android.content.pm.ResolveInfo;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.provider.Settings;
 import android.util.Printer;
diff --git a/core/java/android/app/ApplicationPackageManager.java b/core/java/android/app/ApplicationPackageManager.java
index c5e6ac4..ab62427 100644
--- a/core/java/android/app/ApplicationPackageManager.java
+++ b/core/java/android/app/ApplicationPackageManager.java
@@ -29,6 +29,7 @@
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.IPackageDeleteObserver;
 import android.content.pm.IPackageInstallObserver;
+import android.content.pm.IPackageInstallObserver2;
 import android.content.pm.IPackageManager;
 import android.content.pm.IPackageMoveObserver;
 import android.content.pm.IPackageStatsObserver;
@@ -57,8 +58,6 @@
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 
 /*package*/
@@ -825,7 +824,7 @@
         }
         Resources r = mContext.mMainThread.getTopLevelResources(
                 app.uid == Process.myUid() ? app.sourceDir : app.publicSourceDir,
-                app.resourceDirs, Display.DEFAULT_DISPLAY, null, mContext.mPackageInfo);
+                app.resourceDirs, null, Display.DEFAULT_DISPLAY, null, mContext.mPackageInfo);
         if (r != null) {
             return r;
         }
@@ -1093,7 +1092,7 @@
     public void installPackage(Uri packageURI, IPackageInstallObserver observer, int flags,
                                String installerPackageName) {
         try {
-            mPM.installPackage(packageURI, observer, flags, installerPackageName);
+            mPM.installPackageEtc(packageURI, observer, null, flags, installerPackageName);
         } catch (RemoteException e) {
             // Should never happen!
         }
@@ -1104,20 +1103,58 @@
             int flags, String installerPackageName, Uri verificationURI,
             ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
         try {
-            mPM.installPackageWithVerification(packageURI, observer, flags, installerPackageName,
-                    verificationURI, manifestDigest, encryptionParams);
+            mPM.installPackageWithVerificationEtc(packageURI, observer, null, flags,
+                    installerPackageName, verificationURI, manifestDigest, encryptionParams);
         } catch (RemoteException e) {
             // Should never happen!
         }
     }
 
     @Override
-	  public void installPackageWithVerificationAndEncryption(Uri packageURI,
+    public void installPackageWithVerificationAndEncryption(Uri packageURI,
             IPackageInstallObserver observer, int flags, String installerPackageName,
             VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
         try {
-            mPM.installPackageWithVerificationAndEncryption(packageURI, observer, flags,
-                    installerPackageName, verificationParams, encryptionParams);
+            mPM.installPackageWithVerificationAndEncryptionEtc(packageURI, observer, null,
+                    flags, installerPackageName, verificationParams, encryptionParams);
+        } catch (RemoteException e) {
+            // Should never happen!
+        }
+    }
+
+    // Expanded observer-API versions
+    @Override
+    public void installPackage(Uri packageURI, PackageInstallObserver observer,
+            int flags, String installerPackageName) {
+        try {
+            mPM.installPackageEtc(packageURI, null, observer.mObserver,
+                    flags, installerPackageName);
+        } catch (RemoteException e) {
+            // Should never happen!
+        }
+    }
+
+    @Override
+    public void installPackageWithVerification(Uri packageURI,
+            PackageInstallObserver observer, int flags, String installerPackageName,
+            Uri verificationURI, ManifestDigest manifestDigest,
+            ContainerEncryptionParams encryptionParams) {
+        try {
+            mPM.installPackageWithVerificationEtc(packageURI, null, observer.mObserver, flags,
+                    installerPackageName, verificationURI, manifestDigest, encryptionParams);
+        } catch (RemoteException e) {
+            // Should never happen!
+        }
+    }
+
+    @Override
+    public void installPackageWithVerificationAndEncryption(Uri packageURI,
+            PackageInstallObserver observer, int flags, String installerPackageName,
+            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
+        try {
+            mPM.installPackageWithVerificationAndEncryptionEtc(packageURI, null,
+                    observer.mObserver, flags, installerPackageName, verificationParams,
+                    encryptionParams);
         } catch (RemoteException e) {
             // Should never happen!
         }
diff --git a/core/java/android/app/ApplicationThreadNative.java b/core/java/android/app/ApplicationThreadNative.java
index cb453e2..fcc7f8e 100644
--- a/core/java/android/app/ApplicationThreadNative.java
+++ b/core/java/android/app/ApplicationThreadNative.java
@@ -33,6 +33,7 @@
 import android.os.IBinder;
 import android.os.Parcel;
 import android.os.ParcelFileDescriptor;
+import com.android.internal.app.IVoiceInteractor;
 
 import java.io.FileDescriptor;
 import java.io.IOException;
@@ -113,7 +114,8 @@
             IBinder b = data.readStrongBinder();
             int procState = data.readInt();
             boolean isForward = data.readInt() != 0;
-            scheduleResumeActivity(b, procState, isForward);
+            Bundle resumeArgs = data.readBundle();
+            scheduleResumeActivity(b, procState, isForward, resumeArgs);
             return true;
         }
         
@@ -135,6 +137,8 @@
             ActivityInfo info = ActivityInfo.CREATOR.createFromParcel(data);
             Configuration curConfig = Configuration.CREATOR.createFromParcel(data);
             CompatibilityInfo compatInfo = CompatibilityInfo.CREATOR.createFromParcel(data);
+            IVoiceInteractor voiceInteractor = IVoiceInteractor.Stub.asInterface(
+                    data.readStrongBinder());
             int procState = data.readInt();
             Bundle state = data.readBundle();
             List<ResultInfo> ri = data.createTypedArrayList(ResultInfo.CREATOR);
@@ -145,8 +149,11 @@
             ParcelFileDescriptor profileFd = data.readInt() != 0
                     ? ParcelFileDescriptor.CREATOR.createFromParcel(data) : null;
             boolean autoStopProfiler = data.readInt() != 0;
-            scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo, procState, state,
-                    ri, pi, notResumed, isForward, profileName, profileFd, autoStopProfiler);
+            Bundle resumeArgs = data.readBundle();
+            scheduleLaunchActivity(intent, b, ident, info, curConfig, compatInfo,
+                    voiceInteractor, procState, state,
+                    ri, pi, notResumed, isForward, profileName, profileFd, autoStopProfiler,
+                    resumeArgs);
             return true;
         }
         
@@ -705,20 +712,22 @@
         data.recycle();
     }
 
-    public final void scheduleResumeActivity(IBinder token, int procState, boolean isForward)
+    public final void scheduleResumeActivity(IBinder token, int procState, boolean isForward,
+            Bundle resumeArgs)
             throws RemoteException {
         Parcel data = Parcel.obtain();
         data.writeInterfaceToken(IApplicationThread.descriptor);
         data.writeStrongBinder(token);
         data.writeInt(procState);
         data.writeInt(isForward ? 1 : 0);
+        data.writeBundle(resumeArgs);
         mRemote.transact(SCHEDULE_RESUME_ACTIVITY_TRANSACTION, data, null,
                 IBinder.FLAG_ONEWAY);
         data.recycle();
     }
 
     public final void scheduleSendResult(IBinder token, List<ResultInfo> results)
-    		throws RemoteException {
+            throws RemoteException {
         Parcel data = Parcel.obtain();
         data.writeInterfaceToken(IApplicationThread.descriptor);
         data.writeStrongBinder(token);
@@ -730,10 +739,12 @@
 
     public final void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
             ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
+            IVoiceInteractor voiceInteractor,
             int procState, Bundle state, List<ResultInfo> pendingResults,
-    		List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
-    		String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
-    		throws RemoteException {
+            List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
+            String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler,
+            Bundle resumeArgs)
+            throws RemoteException {
         Parcel data = Parcel.obtain();
         data.writeInterfaceToken(IApplicationThread.descriptor);
         intent.writeToParcel(data, 0);
@@ -742,6 +753,7 @@
         info.writeToParcel(data, 0);
         curConfig.writeToParcel(data, 0);
         compatInfo.writeToParcel(data, 0);
+        data.writeStrongBinder(voiceInteractor != null ? voiceInteractor.asBinder() : null);
         data.writeInt(procState);
         data.writeBundle(state);
         data.writeTypedList(pendingResults);
@@ -756,6 +768,7 @@
             data.writeInt(0);
         }
         data.writeInt(autoStopProfiler ? 1 : 0);
+        data.writeBundle(resumeArgs);
         mRemote.transact(SCHEDULE_LAUNCH_ACTIVITY_TRANSACTION, data, null,
                 IBinder.FLAG_ONEWAY);
         data.recycle();
@@ -886,7 +899,7 @@
     }
 
     public final void scheduleServiceArgs(IBinder token, boolean taskRemoved, int startId,
-	    int flags, Intent args) throws RemoteException {
+            int flags, Intent args) throws RemoteException {
         Parcel data = Parcel.obtain();
         data.writeInterfaceToken(IApplicationThread.descriptor);
         data.writeStrongBinder(token);
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java
index 924d656..a4b2651 100644
--- a/core/java/android/app/ContextImpl.java
+++ b/core/java/android/app/ContextImpl.java
@@ -17,6 +17,7 @@
 package android.app;
 
 import android.os.Build;
+
 import com.android.internal.policy.PolicyManager;
 import com.android.internal.util.Preconditions;
 
@@ -35,7 +36,9 @@
 import android.content.ServiceConnection;
 import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.ILauncherApps;
 import android.content.pm.IPackageManager;
+import android.content.pm.LauncherApps;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.AssetManager;
@@ -64,18 +67,23 @@
 import android.location.LocationManager;
 import android.media.AudioManager;
 import android.media.MediaRouter;
+import android.media.session.SessionManager;
 import android.net.ConnectivityManager;
 import android.net.IConnectivityManager;
 import android.net.INetworkPolicyManager;
 import android.net.NetworkPolicyManager;
+import android.net.NetworkScoreManager;
 import android.net.Uri;
 import android.net.nsd.INsdManager;
 import android.net.nsd.NsdManager;
 import android.net.wifi.IWifiManager;
 import android.net.wifi.WifiManager;
+import android.net.wifi.hotspot.IWifiHotspotManager;
+import android.net.wifi.hotspot.WifiHotspotManager;
 import android.net.wifi.p2p.IWifiP2pManager;
 import android.net.wifi.p2p.WifiP2pManager;
 import android.nfc.NfcManager;
+import android.os.BatteryManager;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Debug;
@@ -99,6 +107,8 @@
 import android.print.IPrintManager;
 import android.print.PrintManager;
 import android.telephony.TelephonyManager;
+import android.tv.ITvInputManager;
+import android.tv.TvInputManager;
 import android.content.ClipboardManager;
 import android.util.AndroidRuntimeException;
 import android.util.ArrayMap;
@@ -115,6 +125,7 @@
 import android.accounts.AccountManager;
 import android.accounts.IAccountManager;
 import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.app.IAppOpsService;
@@ -395,6 +406,11 @@
                     return new DownloadManager(ctx.getContentResolver(), ctx.getPackageName());
                 }});
 
+        registerService(BATTERY_SERVICE, new ServiceFetcher() {
+                public Object createService(ContextImpl ctx) {
+                    return new BatteryManager();
+                }});
+
         registerService(NFC_SERVICE, new ServiceFetcher() {
                 public Object createService(ContextImpl ctx) {
                     return new NfcManager(ctx);
@@ -457,13 +473,14 @@
         registerService(NOTIFICATION_SERVICE, new ServiceFetcher() {
                 public Object createService(ContextImpl ctx) {
                     final Context outerContext = ctx.getOuterContext();
+                    // TODO: Why are we not just using the theme attribute
+                    // that defines the dialog theme?
                     return new NotificationManager(
                         new ContextThemeWrapper(outerContext,
-                                Resources.selectSystemTheme(0,
+                                outerContext.getResources().selectSystemTheme(0,
                                         outerContext.getApplicationInfo().targetSdkVersion,
-                                        com.android.internal.R.style.Theme_Dialog,
-                                        com.android.internal.R.style.Theme_Holo_Dialog,
-                                        com.android.internal.R.style.Theme_DeviceDefault_Dialog)),
+                                        com.android.internal.R.array.system_theme_sdks,
+                                        com.android.internal.R.array.system_theme_dialog_styles)),
                         ctx.mMainThread.getHandler());
                 }});
 
@@ -550,6 +567,13 @@
                     return new WifiManager(ctx.getOuterContext(), service);
                 }});
 
+        registerService(WIFI_HOTSPOT_SERVICE, new ServiceFetcher() {
+                public Object createService(ContextImpl ctx) {
+                    IBinder b = ServiceManager.getService(WIFI_HOTSPOT_SERVICE);
+                    IWifiHotspotManager service = IWifiHotspotManager.Stub.asInterface(b);
+                    return new WifiHotspotManager(ctx.getOuterContext(), service);
+                }});
+
         registerService(WIFI_P2P_SERVICE, new ServiceFetcher() {
                 public Object createService(ContextImpl ctx) {
                     IBinder b = ServiceManager.getService(WIFI_P2P_SERVICE);
@@ -592,6 +616,14 @@
             }
         });
 
+        registerService(LAUNCHER_APPS_SERVICE, new ServiceFetcher() {
+            public Object createService(ContextImpl ctx) {
+                IBinder b = ServiceManager.getService(LAUNCHER_APPS_SERVICE);
+                ILauncherApps service = ILauncherApps.Stub.asInterface(b);
+                return new LauncherApps(ctx, service);
+            }
+        });
+
         registerService(PRINT_SERVICE, new ServiceFetcher() {
             public Object createService(ContextImpl ctx) {
                 IBinder iBinder = ServiceManager.getService(Context.PRINT_SERVICE);
@@ -604,6 +636,31 @@
             public Object createService(ContextImpl ctx) {
                 return new ConsumerIrManager(ctx);
             }});
+
+        registerService(MEDIA_SESSION_SERVICE, new ServiceFetcher() {
+            public Object createService(ContextImpl ctx) {
+                return new SessionManager(ctx);
+            }
+        });
+        registerService(TRUST_SERVICE, new ServiceFetcher() {
+            public Object createService(ContextImpl ctx) {
+                IBinder b = ServiceManager.getService(TRUST_SERVICE);
+                return new TrustManager(b);
+            }
+        });
+
+        registerService(TV_INPUT_SERVICE, new ServiceFetcher() {
+            public Object createService(ContextImpl ctx) {
+                IBinder iBinder = ServiceManager.getService(TV_INPUT_SERVICE);
+                ITvInputManager service = ITvInputManager.Stub.asInterface(iBinder);
+                return new TvInputManager(service, UserHandle.myUserId());
+            }});
+
+        registerService(NETWORK_SCORE_SERVICE, new ServiceFetcher() {
+            public Object createService(ContextImpl ctx) {
+                return new NetworkScoreManager(ctx);
+            }
+        });
     }
 
     static ContextImpl getImpl(Context context) {
@@ -674,7 +731,7 @@
     @Override
     public Resources.Theme getTheme() {
         if (mTheme == null) {
-            mThemeResource = Resources.selectDefaultTheme(mThemeResource,
+            mThemeResource = mResources.selectDefaultTheme(mThemeResource,
                     getOuterContext().getApplicationInfo().targetSdkVersion);
             mTheme = mResources.newTheme();
             mTheme.applyStyle(mThemeResource, true);
@@ -1480,13 +1537,13 @@
 
     private void validateServiceIntent(Intent service) {
         if (service.getComponent() == null && service.getPackage() == null) {
-            if (true || getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.KITKAT) {
+            if (getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.L) {
+                IllegalArgumentException ex = new IllegalArgumentException(
+                        "Service Intent must be explicit: " + service);
+                throw ex;
+            } else {
                 Log.w(TAG, "Implicit intents with startService are not safe: " + service
                         + " " + Debug.getCallers(2, 3));
-                //IllegalArgumentException ex = new IllegalArgumentException(
-                //        "Service Intent must be explicit: " + service);
-                //Log.e(TAG, "This will become an error", ex);
-                //throw ex;
             }
         }
     }
@@ -1808,17 +1865,26 @@
     }
 
     private String uriModeFlagToString(int uriModeFlags) {
-        switch (uriModeFlags) {
-            case Intent.FLAG_GRANT_READ_URI_PERMISSION |
-                    Intent.FLAG_GRANT_WRITE_URI_PERMISSION:
-                return "read and write";
-            case Intent.FLAG_GRANT_READ_URI_PERMISSION:
-                return "read";
-            case Intent.FLAG_GRANT_WRITE_URI_PERMISSION:
-                return "write";
+        StringBuilder builder = new StringBuilder();
+        if ((uriModeFlags & Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
+            builder.append("read and ");
         }
-        throw new IllegalArgumentException(
-                "Unknown permission mode flags: " + uriModeFlags);
+        if ((uriModeFlags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0) {
+            builder.append("write and ");
+        }
+        if ((uriModeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0) {
+            builder.append("persistable and ");
+        }
+        if ((uriModeFlags & Intent.FLAG_GRANT_PREFIX_URI_PERMISSION) != 0) {
+            builder.append("prefix and ");
+        }
+
+        if (builder.length() > 5) {
+            builder.setLength(builder.length() - 5);
+            return builder.toString();
+        } else {
+            throw new IllegalArgumentException("Unknown permission mode flags: " + uriModeFlags);
+        }
     }
 
     private void enforceForUri(
@@ -2036,8 +2102,9 @@
                     || (compatInfo != null && compatInfo.applicationScale
                             != resources.getCompatibilityInfo().applicationScale)) {
                 resources = mResourcesManager.getTopLevelResources(
-                        packageInfo.getResDir(), packageInfo.getOverlayDirs(), displayId,
-                        overrideConfiguration, compatInfo, activityToken);
+                        packageInfo.getResDir(), packageInfo.getOverlayDirs(),
+                        packageInfo.getApplicationInfo().sharedLibraryFiles,
+                        displayId, overrideConfiguration, compatInfo, activityToken);
             }
         }
         mResources = resources;
diff --git a/core/java/android/app/Dialog.java b/core/java/android/app/Dialog.java
index a8277b5..07583fd 100644
--- a/core/java/android/app/Dialog.java
+++ b/core/java/android/app/Dialog.java
@@ -17,8 +17,7 @@
 package android.app;
 
 import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
-import com.android.internal.app.ActionBarImpl;
+import com.android.internal.app.WindowDecorActionBar;
 import com.android.internal.policy.PolicyManager;
 
 import android.content.ComponentName;
@@ -88,7 +87,7 @@
     final WindowManager mWindowManager;
     Window mWindow;
     View mDecor;
-    private ActionBarImpl mActionBar;
+    private ActionBar mActionBar;
     /**
      * This field should be made private, so it is hidden from the SDK.
      * {@hide}
@@ -240,6 +239,18 @@
     }
 
     /**
+     * Forces immediate creation of the dialog.
+     * <p>
+     * Note that you should not override this method to perform dialog creation.
+     * Rather, override {@link #onCreate(Bundle)}.
+     */
+    public void create() {
+        if (!mCreated) {
+            dispatchOnCreate(null);
+        }
+    }
+
+    /**
      * Start the dialog and display it on screen.  The window is placed in the
      * application layer and opaque.  Note that you should not override this
      * method to do initialization when the dialog is shown, instead implement
@@ -269,7 +280,7 @@
             final ApplicationInfo info = mContext.getApplicationInfo();
             mWindow.setDefaultIcon(info.icon);
             mWindow.setDefaultLogo(info.logo);
-            mActionBar = new ActionBarImpl(this);
+            mActionBar = new WindowDecorActionBar(this);
         }
 
         WindowManager.LayoutParams l = mWindow.getAttributes();
@@ -457,11 +468,12 @@
     }
 
     /**
-     * Finds a view that was identified by the id attribute from the XML that
-     * was processed in {@link #onStart}.
+     * Finds a child view with the given identifier. Returns null if the
+     * specified child view does not exist or the dialog has not yet been fully
+     * created (for example, via {@link #show()} or {@link #create()}).
      *
      * @param id the identifier of the view to find
-     * @return The view if found or null otherwise.
+     * @return The view with the given id or null.
      */
     public View findViewById(int id) {
         return mWindow.findViewById(id);
@@ -480,7 +492,7 @@
     /**
      * Set the screen content to an explicit view.  This view is placed
      * directly into the screen's view hierarchy.  It can itself be a complex
-     * view hierarhcy.
+     * view hierarchy.
      * 
      * @param view The desired content to display.
      */
diff --git a/core/java/android/app/EnterTransitionCoordinator.java b/core/java/android/app/EnterTransitionCoordinator.java
new file mode 100644
index 0000000..cbb8359
--- /dev/null
+++ b/core/java/android/app/EnterTransitionCoordinator.java
@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2014 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 android.app;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.ResultReceiver;
+import android.transition.Transition;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.view.Window;
+
+import java.util.ArrayList;
+
+/**
+ * This ActivityTransitionCoordinator is created by the Activity to manage
+ * the enter scene and shared element transfer as well as Activity#finishWithTransition
+ * exiting the Scene and transferring shared elements back to the called Activity.
+ */
+class EnterTransitionCoordinator extends ActivityTransitionCoordinator
+        implements ViewTreeObserver.OnPreDrawListener {
+    private static final String TAG = "EnterTransitionCoordinator";
+
+    // The background fade in/out duration. 150ms is pretty quick, but not abrupt.
+    private static final int FADE_BACKGROUND_DURATION_MS = 150;
+
+    /**
+     * The shared element names sent by the ExitTransitionCoordinator and may be
+     * shared when exiting back.
+     */
+    private ArrayList<String> mEnteringSharedElementNames;
+
+    /**
+     * The Activity that has created this coordinator. This is used solely to make the
+     * Window translucent/opaque.
+     */
+    private Activity mActivity;
+
+    /**
+     * True if the Window was opaque at the start and we should make it opaque again after
+     * enter transitions have completed.
+     */
+    private boolean mWasOpaque;
+
+    /**
+     * During exit, is the background alpha == 0?
+     */
+    private boolean mBackgroundFadedOut;
+
+    /**
+     * During exit, has the shared element transition completed?
+     */
+    private boolean mSharedElementTransitionComplete;
+
+    /**
+     * Has the exit started? We don't want to accidentally exit multiple times. e.g. when
+     * back is hit twice during the exit animation.
+     */
+    private boolean mExitTransitionStarted;
+
+    /**
+     * Has the exit transition ended?
+     */
+    private boolean mExitTransitionComplete;
+
+    /**
+     * We only want to make the Window transparent and set the background alpha once. After that,
+     * the Activity won't want the same enter transition.
+     */
+    private boolean mMadeReady;
+
+    /**
+     * True if Window.hasFeature(Window.FEATURE_CONTENT_TRANSITIONS) -- this means that
+     * enter and exit transitions should be active.
+     */
+    private boolean mSupportsTransition;
+
+    /**
+     * Background alpha animations may complete prior to receiving the callback for
+     * onTranslucentConversionComplete. If so, we need to immediately call to make the Window
+     * opaque.
+     */
+    private boolean mMakeOpaque;
+
+    public EnterTransitionCoordinator(Activity activity, ResultReceiver resultReceiver) {
+        super(activity.getWindow());
+        mActivity = activity;
+        setRemoteResultReceiver(resultReceiver);
+    }
+
+    public void readyToEnter() {
+        if (!mMadeReady) {
+            mMadeReady = true;
+            mSupportsTransition = getWindow().hasFeature(Window.FEATURE_CONTENT_TRANSITIONS);
+            if (mSupportsTransition) {
+                Window window = getWindow();
+                window.getDecorView().getViewTreeObserver().addOnPreDrawListener(this);
+                mActivity.overridePendingTransition(0, 0);
+                mActivity.convertToTranslucent(new Activity.TranslucentConversionListener() {
+                    @Override
+                    public void onTranslucentConversionComplete(boolean drawComplete) {
+                        mWasOpaque = true;
+                        if (mMakeOpaque) {
+                            mActivity.convertFromTranslucent();
+                        }
+                    }
+                });
+                Drawable background = getDecor().getBackground();
+                if (background != null) {
+                    window.setBackgroundDrawable(null);
+                    background.setAlpha(0);
+                    window.setBackgroundDrawable(background);
+                }
+            }
+        }
+    }
+
+    @Override
+    protected void onTakeSharedElements(ArrayList<String> sharedElementNames, Bundle state) {
+        mEnteringSharedElementNames = new ArrayList<String>();
+        mEnteringSharedElementNames.addAll(sharedElementNames);
+        super.onTakeSharedElements(sharedElementNames, state);
+    }
+
+    @Override
+    protected void sharedElementTransitionComplete(Bundle bundle) {
+        notifySharedElementTransitionComplete(bundle);
+        exitAfterSharedElementTransition();
+    }
+
+    @Override
+    public boolean onPreDraw() {
+        getWindow().getDecorView().getViewTreeObserver().removeOnPreDrawListener(this);
+        setEnteringViews(readyEnteringViews());
+        notifySetListener();
+        onPrepareRestore();
+        return false;
+    }
+
+    @Override
+    public void startExit() {
+        if (!mExitTransitionStarted) {
+            mExitTransitionStarted = true;
+            startExitTransition(mEnteringSharedElementNames);
+        }
+    }
+
+    @Override
+    protected Transition getViewsTransition() {
+        if (!mSupportsTransition) {
+            return null;
+        }
+        return getWindow().getEnterTransition();
+    }
+
+    @Override
+    protected Transition getSharedElementTransition() {
+        if (!mSupportsTransition) {
+            return null;
+        }
+        return getWindow().getSharedElementEnterTransition();
+    }
+
+    @Override
+    protected void onStartEnterTransition(Transition transition, ArrayList<View> enteringViews) {
+        Drawable background = getDecor().getBackground();
+        if (background != null) {
+            ObjectAnimator animator = ObjectAnimator.ofInt(background, "alpha", 255);
+            animator.setDuration(FADE_BACKGROUND_DURATION_MS);
+            animator.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mMakeOpaque = true;
+                    if (mWasOpaque) {
+                        mActivity.convertFromTranslucent();
+                    }
+                }
+            });
+            animator.start();
+        } else if (mWasOpaque) {
+            transition.addListener(new Transition.TransitionListenerAdapter() {
+                @Override
+                public void onTransitionEnd(Transition transition) {
+                    mMakeOpaque = true;
+                    mActivity.convertFromTranslucent();
+                }
+            });
+        }
+        super.onStartEnterTransition(transition, enteringViews);
+    }
+
+    public ArrayList<View> readyEnteringViews() {
+        ArrayList<View> enteringViews = new ArrayList<View>();
+        getDecor().captureTransitioningViews(enteringViews);
+        if (getViewsTransition() != null) {
+            setViewVisibility(enteringViews, View.INVISIBLE);
+        }
+        return enteringViews;
+    }
+
+    @Override
+    protected void startExitTransition(ArrayList<String> sharedElements) {
+        mMakeOpaque = false;
+        notifyPrepareRestore();
+
+        if (getDecor().getBackground() == null) {
+            ColorDrawable black = new ColorDrawable(0xFF000000);
+            getWindow().setBackgroundDrawable(black);
+        }
+        if (mWasOpaque) {
+            mActivity.convertToTranslucent(new Activity.TranslucentConversionListener() {
+                @Override
+                public void onTranslucentConversionComplete(boolean drawComplete) {
+                    fadeOutBackground();
+                }
+            });
+        } else {
+            fadeOutBackground();
+        }
+
+        super.startExitTransition(sharedElements);
+    }
+
+    private void fadeOutBackground() {
+        ObjectAnimator animator = ObjectAnimator.ofInt(getDecor().getBackground(),
+                "alpha", 0);
+        animator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mBackgroundFadedOut = true;
+                if (mSharedElementTransitionComplete) {
+                    EnterTransitionCoordinator.super.onSharedElementTransitionEnd();
+                }
+            }
+        });
+        animator.setDuration(FADE_BACKGROUND_DURATION_MS);
+        animator.start();
+    }
+
+    @Override
+    protected void onExitTransitionEnd() {
+        mExitTransitionComplete = true;
+        exitAfterSharedElementTransition();
+        super.onExitTransitionEnd();
+    }
+
+    @Override
+    protected void onSharedElementTransitionEnd() {
+        mSharedElementTransitionComplete = true;
+        if (mBackgroundFadedOut) {
+            super.onSharedElementTransitionEnd();
+        }
+    }
+
+    @Override
+    protected boolean allowOverlappingTransitions() {
+        return getWindow().getAllowEnterTransitionOverlap();
+    }
+
+    private void exitAfterSharedElementTransition() {
+        if (mSharedElementTransitionComplete && mExitTransitionComplete && mBackgroundFadedOut) {
+            mActivity.finish();
+            if (mSupportsTransition) {
+                mActivity.overridePendingTransition(0, 0);
+            }
+            notifyExitTransitionComplete();
+            clearConnections();
+        }
+    }
+}
diff --git a/core/java/android/app/ExitTransitionCoordinator.java b/core/java/android/app/ExitTransitionCoordinator.java
new file mode 100644
index 0000000..d920787
--- /dev/null
+++ b/core/java/android/app/ExitTransitionCoordinator.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2014 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 android.app;
+
+import android.os.Bundle;
+import android.transition.Transition;
+import android.util.Pair;
+import android.view.View;
+import android.view.Window;
+
+import java.util.ArrayList;
+
+/**
+ * This ActivityTransitionCoordinator is created in ActivityOptions#makeSceneTransitionAnimation
+ * to govern the exit of the Scene and the shared elements when calling an Activity as well as
+ * the reentry of the Scene when coming back from the called Activity.
+ */
+class ExitTransitionCoordinator extends ActivityTransitionCoordinator {
+    private static final String TAG = "ExitTransitionCoordinator";
+
+    /**
+     * The Views that have exited and need to be restored to VISIBLE when returning to the
+     * normal state.
+     */
+    private ArrayList<View> mTransitioningViews;
+
+    /**
+     * Has the exit started? We don't want to accidentally exit multiple times.
+     */
+    private boolean mExitStarted;
+
+    /**
+     * Has the called Activity's ResultReceiver been set?
+     */
+    private boolean mIsResultReceiverSet;
+
+    /**
+     * Has the exit transition completed? If so, we can notify as soon as the ResultReceiver
+     * has been set.
+     */
+    private boolean mExitComplete;
+
+    /**
+     * Has the shared element transition completed? If so, we can notify as soon as the
+     * ResultReceiver has been set.
+     */
+    private Bundle mSharedElements;
+
+    /**
+     * Has the shared element transition completed?
+     */
+    private boolean mSharedElementsComplete;
+
+    public ExitTransitionCoordinator(Window window,
+            ActivityOptions.ActivityTransitionListener listener) {
+        super(window);
+        setActivityTransitionListener(listener);
+    }
+
+    @Override
+    protected void onSetResultReceiver() {
+        mIsResultReceiverSet = true;
+        notifyCompletions();
+    }
+
+    @Override
+    protected void onPrepareRestore() {
+        makeTransitioningViewsInvisible();
+        setEnteringViews(mTransitioningViews);
+        mTransitioningViews = null;
+        super.onPrepareRestore();
+    }
+
+    @Override
+    protected void onTakeSharedElements(ArrayList<String> sharedElementNames, Bundle state) {
+        super.onTakeSharedElements(sharedElementNames, state);
+        clearConnections();
+    }
+
+    @Override
+    protected void onActivityStopped() {
+        if (getViewsTransition() != null) {
+            setViewVisibility(mTransitioningViews, View.VISIBLE);
+        }
+        super.onActivityStopped();
+    }
+
+    @Override
+    protected void sharedElementTransitionComplete(Bundle bundle) {
+        mSharedElements = bundle;
+        mSharedElementsComplete = true;
+        notifyCompletions();
+    }
+
+    @Override
+    protected void onExitTransitionEnd() {
+        mExitComplete = true;
+        notifyCompletions();
+        super.onExitTransitionEnd();
+    }
+
+    private void notifyCompletions() {
+        if (mIsResultReceiverSet && mSharedElementsComplete) {
+            if (mSharedElements != null) {
+                notifySharedElementTransitionComplete(mSharedElements);
+                mSharedElements = null;
+            }
+            if (mExitComplete) {
+                notifyExitTransitionComplete();
+            }
+        }
+    }
+
+    @Override
+    public void startExit() {
+        if (!mExitStarted) {
+            mExitStarted = true;
+            setSharedElements();
+            startExitTransition(getSharedElementNames());
+        }
+    }
+
+    @Override
+    protected Transition getViewsTransition() {
+        if (!getWindow().hasFeature(Window.FEATURE_CONTENT_TRANSITIONS)) {
+            return null;
+        }
+        return getWindow().getExitTransition();
+    }
+
+    @Override
+    protected Transition getSharedElementTransition() {
+        if (!getWindow().hasFeature(Window.FEATURE_CONTENT_TRANSITIONS)) {
+            return null;
+        }
+        return getWindow().getSharedElementExitTransition();
+    }
+
+    private void makeTransitioningViewsInvisible() {
+        if (getViewsTransition() != null) {
+            setViewVisibility(mTransitioningViews, View.INVISIBLE);
+        }
+    }
+
+    @Override
+    protected void onStartExitTransition(ArrayList<View> exitingViews) {
+        mTransitioningViews = new ArrayList<View>();
+        if (exitingViews != null) {
+            mTransitioningViews.addAll(exitingViews);
+        }
+        mTransitioningViews.addAll(getSharedElements());
+    }
+
+    @Override
+    protected boolean allowOverlappingTransitions() {
+        return getWindow().getAllowExitTransitionOverlap();
+    }
+}
diff --git a/core/java/android/app/ExpandableListActivity.java b/core/java/android/app/ExpandableListActivity.java
index 9651078..e08f25a 100644
--- a/core/java/android/app/ExpandableListActivity.java
+++ b/core/java/android/app/ExpandableListActivity.java
@@ -27,7 +27,6 @@
 import android.widget.ExpandableListView;
 import android.widget.SimpleCursorTreeAdapter;
 import android.widget.SimpleExpandableListAdapter;
-import android.widget.AdapterView.AdapterContextMenuInfo;
 
 import java.util.Map;
 
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index af8f177..6c0d379 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -17,6 +17,7 @@
 package android.app;
 
 import android.animation.Animator;
+import android.annotation.Nullable;
 import android.content.ComponentCallbacks2;
 import android.content.Context;
 import android.content.Intent;
@@ -575,7 +576,7 @@
      * the given fragment class.  This is a runtime exception; it is not
      * normally expected to happen.
      */
-    public static Fragment instantiate(Context context, String fname, Bundle args) {
+    public static Fragment instantiate(Context context, String fname, @Nullable Bundle args) {
         try {
             Class<?> clazz = sClassMap.get(fname);
             if (clazz == null) {
@@ -1213,7 +1214,8 @@
      * 
      * @return Return the View for the fragment's UI, or null.
      */
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+    @Nullable
+    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
             Bundle savedInstanceState) {
         return null;
     }
@@ -1228,7 +1230,7 @@
      * @param savedInstanceState If non-null, this fragment is being re-constructed
      * from a previous saved state as given here.
      */
-    public void onViewCreated(View view, Bundle savedInstanceState) {
+    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
     }
     
     /**
@@ -1237,6 +1239,7 @@
      * 
      * @return The fragment's root view, or null if it has no layout.
      */
+    @Nullable
     public View getView() {
         return mView;
     }
diff --git a/core/java/android/app/FragmentBreadCrumbs.java b/core/java/android/app/FragmentBreadCrumbs.java
index b810b89..e4de7af 100644
--- a/core/java/android/app/FragmentBreadCrumbs.java
+++ b/core/java/android/app/FragmentBreadCrumbs.java
@@ -81,14 +81,19 @@
     }
 
     public FragmentBreadCrumbs(Context context, AttributeSet attrs) {
-        this(context, attrs, android.R.style.Widget_FragmentBreadCrumbs);
+        this(context, attrs, com.android.internal.R.attr.fragmentBreadCrumbsStyle);
     }
 
-    public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public FragmentBreadCrumbs(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.FragmentBreadCrumbs, defStyle, 0);
+    public FragmentBreadCrumbs(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.FragmentBreadCrumbs, defStyleAttr, defStyleRes);
 
         mGravity = a.getInt(com.android.internal.R.styleable.FragmentBreadCrumbs_gravity,
                 DEFAULT_GRAVITY);
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 4e2a57d..6b94c4e 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -47,6 +47,8 @@
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.StrictMode;
+import android.service.voice.IVoiceInteractionSession;
+import com.android.internal.app.IVoiceInteractor;
 
 import java.util.List;
 
@@ -77,9 +79,13 @@
             IntentSender intent, Intent fillInIntent, String resolvedType,
             IBinder resultTo, String resultWho, int requestCode,
             int flagsMask, int flagsValues, Bundle options) throws RemoteException;
+    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
+            Intent intent, String resolvedType, IVoiceInteractionSession session,
+            IVoiceInteractor interactor, int flags, String profileFile,
+            ParcelFileDescriptor profileFd, Bundle options, int userId) throws RemoteException;
     public boolean startNextMatchingActivity(IBinder callingActivity,
             Intent intent, Bundle options) throws RemoteException;
-    public boolean finishActivity(IBinder token, int code, Intent data)
+    public boolean finishActivity(IBinder token, int code, Intent data, boolean finishTask)
             throws RemoteException;
     public void finishSubActivity(IBinder token, String resultWho, int requestCode) throws RemoteException;
     public boolean finishActivityAffinity(IBinder token) throws RemoteException;
@@ -122,6 +128,7 @@
     public void resizeStack(int stackId, Rect bounds) throws RemoteException;
     public List<StackInfo> getAllStackInfos() throws RemoteException;
     public StackInfo getStackInfo(int stackId) throws RemoteException;
+    public boolean isInHomeStack(int taskId) throws RemoteException;
     public void setFocusedStack(int stackId) throws RemoteException;
     public int getTaskForActivity(IBinder token, boolean onlyRoot) throws RemoteException;
     /* oneway */
@@ -241,7 +248,8 @@
 
     public void enterSafeMode() throws RemoteException;
     
-    public void noteWakeupAlarm(IIntentSender sender) throws RemoteException;
+    public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg)
+            throws RemoteException;
 
     public boolean killPids(int[] pids, String reason, boolean secure) throws RemoteException;
     public boolean killProcessesBelowForeground(String reason) throws RemoteException;
@@ -344,6 +352,7 @@
 
     // Multi-user APIs
     public boolean switchUser(int userid) throws RemoteException;
+    public boolean startUserInBackground(int userid) throws RemoteException;
     public int stopUser(int userid, IStopUserCallback callback) throws RemoteException;
     public UserInfo getCurrentUser() throws RemoteException;
     public boolean isUserRunning(int userid, boolean orStopping) throws RemoteException;
@@ -362,6 +371,8 @@
 
     public Intent getIntentForIntentSender(IIntentSender sender) throws RemoteException;
 
+    public String getTagForIntentSender(IIntentSender sender, String prefix) throws RemoteException;
+
     public void updatePersistentConfiguration(Configuration values) throws RemoteException;
 
     public long[] getProcessPss(int[] pids) throws RemoteException;
@@ -415,6 +426,22 @@
 
     public IBinder getHomeActivityToken() throws RemoteException;
 
+    /** @hide */
+    public void startLockTaskMode(int taskId) throws RemoteException;
+
+    /** @hide */
+    public void startLockTaskMode(IBinder token) throws RemoteException;
+
+    /** @hide */
+    public void stopLockTaskMode() throws RemoteException;
+
+    /** @hide */
+    public boolean isInLockTaskMode() throws RemoteException;
+
+    /** @hide */
+    public void setActivityLabelAndIcon(IBinder token, CharSequence activityLabel,
+            Bitmap activityBitmap) throws RemoteException;
+
     /*
      * Private non-Binder interfaces
      */
@@ -701,4 +728,16 @@
     int GET_HOME_ACTIVITY_TOKEN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+183;
     int GET_ACTIVITY_CONTAINER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+184;
     int DELETE_ACTIVITY_CONTAINER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+185;
+
+
+    // Start of L transactions
+    int GET_TAG_FOR_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+210;
+    int START_USER_IN_BACKGROUND_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+211;
+    int IS_IN_HOME_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+212;
+    int START_LOCK_TASK_BY_TASK_ID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+213;
+    int START_LOCK_TASK_BY_TOKEN_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+214;
+    int STOP_LOCK_TASK_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+215;
+    int IS_IN_LOCK_TASK_MODE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+216;
+    int SET_ACTIVITY_LABEL_ICON_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+217;
+    int START_VOICE_ACTIVITY_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+218;
 }
diff --git a/core/java/android/app/IApplicationThread.java b/core/java/android/app/IApplicationThread.java
index 3aceff9..f290e94 100644
--- a/core/java/android/app/IApplicationThread.java
+++ b/core/java/android/app/IApplicationThread.java
@@ -31,6 +31,8 @@
 import android.os.RemoteException;
 import android.os.IBinder;
 import android.os.IInterface;
+import android.service.voice.IVoiceInteractionSession;
+import com.android.internal.app.IVoiceInteractor;
 
 import java.io.FileDescriptor;
 import java.util.List;
@@ -50,15 +52,17 @@
             int configChanges) throws RemoteException;
     void scheduleWindowVisibility(IBinder token, boolean showWindow) throws RemoteException;
     void scheduleSleeping(IBinder token, boolean sleeping) throws RemoteException;
-    void scheduleResumeActivity(IBinder token, int procState, boolean isForward)
+    void scheduleResumeActivity(IBinder token, int procState, boolean isForward, Bundle resumeArgs)
             throws RemoteException;
     void scheduleSendResult(IBinder token, List<ResultInfo> results) throws RemoteException;
     void scheduleLaunchActivity(Intent intent, IBinder token, int ident,
             ActivityInfo info, Configuration curConfig, CompatibilityInfo compatInfo,
-            int procState, Bundle state, List<ResultInfo> pendingResults,
-    		List<Intent> pendingNewIntents, boolean notResumed, boolean isForward,
-    		String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler)
-    		throws RemoteException;
+            IVoiceInteractor voiceInteractor, int procState, Bundle state,
+            List<ResultInfo> pendingResults, List<Intent> pendingNewIntents, boolean notResumed,
+            boolean isForward,
+            String profileName, ParcelFileDescriptor profileFd, boolean autoStopProfiler,
+            Bundle resumeArgs)
+            throws RemoteException;
     void scheduleRelaunchActivity(IBinder token, List<ResultInfo> pendingResults,
             List<Intent> pendingNewIntents, int configChanges,
             boolean notResumed, Configuration config) throws RemoteException;
diff --git a/core/java/android/app/IBackupAgent.aidl b/core/java/android/app/IBackupAgent.aidl
index 087f83c..7036aea 100644
--- a/core/java/android/app/IBackupAgent.aidl
+++ b/core/java/android/app/IBackupAgent.aidl
@@ -76,8 +76,9 @@
      * @param callbackBinder Binder on which to indicate operation completion,
      *        passed here as a convenience to the agent.
      */
-    void doRestore(in ParcelFileDescriptor data, int appVersionCode,
-            in ParcelFileDescriptor newState, int token, IBackupManager callbackBinder);
+    void doRestore(in ParcelFileDescriptor data,
+            int appVersionCode, in ParcelFileDescriptor newState,
+            int token, IBackupManager callbackBinder);
 
     /**
      * Perform a "full" backup to the given file descriptor.  The output file is presumed
@@ -112,8 +113,23 @@
      * @param path Relative path of the file within its semantic domain.
      * @param mode Access mode of the file system entity, e.g. 0660.
      * @param mtime Last modification time of the file system entity.
+     * @param token Opaque token identifying this transaction.  This must
+     *        be echoed back to the backup service binder once the agent is
+     *        finished restoring the application based on the restore data
+     *        contents.
+     * @param callbackBinder Binder on which to indicate operation completion,
+     *        passed here as a convenience to the agent.
      */
     void doRestoreFile(in ParcelFileDescriptor data, long size,
             int type, String domain, String path, long mode, long mtime,
             int token, IBackupManager callbackBinder);
+
+    /**
+     * Out of band: instruct the agent to crash within the client process.  This is used
+     * when the backup infrastructure detects a semantic error post-hoc and needs to
+     * pass the problem back to the app.
+     *
+     * @param message The message to be passed to the agent's application in an exception.
+     */
+    void fail(String message);
 }
diff --git a/core/java/android/app/INotificationManager.aidl b/core/java/android/app/INotificationManager.aidl
index 9911467..b917263 100644
--- a/core/java/android/app/INotificationManager.aidl
+++ b/core/java/android/app/INotificationManager.aidl
@@ -18,11 +18,16 @@
 package android.app;
 
 import android.app.ITransientNotification;
-import android.service.notification.StatusBarNotification;
 import android.app.Notification;
 import android.content.ComponentName;
 import android.content.Intent;
+import android.net.Uri;
+import android.service.notification.Condition;
+import android.service.notification.IConditionListener;
+import android.service.notification.IConditionProvider;
 import android.service.notification.INotificationListener;
+import android.service.notification.StatusBarNotification;
+import android.service.notification.ZenModeConfig;
 
 /** {@hide} */
 interface INotificationManager
@@ -31,7 +36,7 @@
 
     void enqueueToast(String pkg, ITransientNotification callback, int duration);
     void cancelToast(String pkg, ITransientNotification callback);
-    void enqueueNotificationWithTag(String pkg, String basePkg, String tag, int id,
+    void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id,
             in Notification notification, inout int[] idReceived, int userId);
     void cancelNotificationWithTag(String pkg, String tag, int id, int userId);
 
@@ -49,4 +54,12 @@
 
     StatusBarNotification[] getActiveNotificationsFromListener(in INotificationListener token, in String[] keys);
     String[] getActiveNotificationKeysFromListener(in INotificationListener token);
+
+    ZenModeConfig getZenModeConfig();
+    boolean setZenModeConfig(in ZenModeConfig config);
+    oneway void notifyConditions(String pkg, in IConditionProvider provider, in Condition[] conditions);
+    oneway void requestZenModeConditions(in IConditionListener callback, int relevance);
+    oneway void setZenModeCondition(in Uri conditionId);
+    oneway void setAutomaticZenModeConditions(in Uri[] conditionIds);
+    Condition[] getAutomaticZenModeConditions();
 }
\ No newline at end of file
diff --git a/core/java/android/app/IProcessObserver.aidl b/core/java/android/app/IProcessObserver.aidl
index e587912..ecf2c73 100644
--- a/core/java/android/app/IProcessObserver.aidl
+++ b/core/java/android/app/IProcessObserver.aidl
@@ -20,7 +20,7 @@
 oneway interface IProcessObserver {
 
     void onForegroundActivitiesChanged(int pid, int uid, boolean foregroundActivities);
-    void onImportanceChanged(int pid, int uid, int importance);
+    void onProcessStateChanged(int pid, int uid, int procState);
     void onProcessDied(int pid, int uid);
 
 }
diff --git a/core/java/android/app/IUiAutomationConnection.aidl b/core/java/android/app/IUiAutomationConnection.aidl
index 09bf829..347de97 100644
--- a/core/java/android/app/IUiAutomationConnection.aidl
+++ b/core/java/android/app/IUiAutomationConnection.aidl
@@ -19,6 +19,8 @@
 import android.accessibilityservice.IAccessibilityServiceClient;
 import android.graphics.Bitmap;
 import android.view.InputEvent;
+import android.view.WindowContentFrameStats;
+import android.view.WindowAnimationFrameStats;
 import android.os.ParcelFileDescriptor;
 
 /**
@@ -26,7 +28,7 @@
  * on behalf of an instrumentation that it runs. These operations require
  * special permissions which the shell user has but the instrumentation does
  * not. Running privileged operations by the shell user on behalf of an
- * instrumentation is needed for running UiTestCases. 
+ * instrumentation is needed for running UiTestCases.
  *
  * {@hide}
  */
@@ -37,4 +39,8 @@
     boolean setRotation(int rotation);
     Bitmap takeScreenshot(int width, int height);
     void shutdown();
+    boolean clearWindowContentFrameStats(int windowId);
+    WindowContentFrameStats getWindowContentFrameStats(int windowId);
+    void clearWindowAnimationFrameStats();
+    WindowAnimationFrameStats getWindowAnimationFrameStats();
 }
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 028fa68..e58ccb8 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -1428,7 +1428,7 @@
     }
 
     /**
-     * Like {@link #execStartActivity(Context, IBinder, IBinder, Activity, Intent, int)},
+     * Like {@link #execStartActivity},
      * but accepts an array of activities to be started.  Note that active
      * {@link ActivityMonitor} objects only match against the first activity in
      * the array.
@@ -1442,7 +1442,7 @@
     }
 
     /**
-     * Like {@link #execStartActivity(Context, IBinder, IBinder, Activity, Intent, int)},
+     * Like {@link #execStartActivity},
      * but accepts an array of activities to be started.  Note that active
      * {@link ActivityMonitor} objects only match against the first activity in
      * the array.
@@ -1545,8 +1545,7 @@
     }
 
     /**
-     * Like {@link #execStartActivity(Context, IBinder, IBinder, Activity, Intent, int)},
-     * but for starting as a particular user.
+     * Like {@link #execStartActivity}, but for starting as a particular user.
      *
      * @param who The Context from which the activity is being started.
      * @param contextThread The main thread of the Context from which the activity
@@ -1616,7 +1615,8 @@
         mUiAutomationConnection = uiAutomationConnection;
     }
 
-    /*package*/ static void checkStartActivityResult(int res, Object intent) {
+    /** @hide */
+    public static void checkStartActivityResult(int res, Object intent) {
         if (res >= ActivityManager.START_SUCCESS) {
             return;
         }
@@ -1640,6 +1640,9 @@
             case ActivityManager.START_NOT_ACTIVITY:
                 throw new IllegalArgumentException(
                         "PendingIntent is not an activity");
+            case ActivityManager.START_NOT_VOICE_COMPATIBLE:
+                throw new SecurityException(
+                        "Starting under voice control not allowed for: " + intent);
             default:
                 throw new AndroidRuntimeException("Unknown error code "
                         + res + " when starting " + intent);
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index d409352..3ae8bfc 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -41,6 +41,7 @@
 import android.os.UserHandle;
 import android.util.AndroidRuntimeException;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.view.DisplayAdjustments;
 import android.view.Display;
 
@@ -48,6 +49,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.lang.ref.WeakReference;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.net.URL;
 import java.util.Enumeration;
 
@@ -485,7 +488,7 @@
     public Resources getResources(ActivityThread mainThread) {
         if (mResources == null) {
             mResources = mainThread.getTopLevelResources(mResDir, mOverlayDirs,
-                    Display.DEFAULT_DISPLAY, null, this);
+                    mApplicationInfo.sharedLibraryFiles, Display.DEFAULT_DISPLAY, null, this);
         }
         return mResources;
     }
@@ -530,10 +533,101 @@
                 }
             }
         }
-        
+
+        // Rewrite the R 'constants' for all library apks.
+        SparseArray<String> packageIdentifiers = getAssets(mActivityThread)
+                .getAssignedPackageIdentifiers();
+        final int N = packageIdentifiers.size();
+        for (int i = 0; i < N; i++) {
+            final int id = packageIdentifiers.keyAt(i);
+            if (id == 0x01 || id == 0x7f) {
+                continue;
+            }
+
+            rewriteRValues(getClassLoader(), packageIdentifiers.valueAt(i), id);
+        }
+
         return app;
     }
 
+    private void rewriteIntField(Field field, int packageId) throws IllegalAccessException {
+        int requiredModifiers = Modifier.STATIC | Modifier.PUBLIC;
+        int bannedModifiers = Modifier.FINAL;
+
+        int mod = field.getModifiers();
+        if ((mod & requiredModifiers) != requiredModifiers ||
+                (mod & bannedModifiers) != 0) {
+            throw new IllegalArgumentException("Field " + field.getName() +
+                    " is not rewritable");
+        }
+
+        if (field.getType() != int.class && field.getType() != Integer.class) {
+            throw new IllegalArgumentException("Field " + field.getName() +
+                    " is not an integer");
+        }
+
+        try {
+            int resId = field.getInt(null);
+            field.setInt(null, (resId & 0x00ffffff) | (packageId << 24));
+        } catch (IllegalAccessException e) {
+            // This should not occur (we check above if we can write to it)
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    private void rewriteIntArrayField(Field field, int packageId) {
+        int requiredModifiers = Modifier.STATIC | Modifier.PUBLIC;
+
+        if ((field.getModifiers() & requiredModifiers) != requiredModifiers) {
+            throw new IllegalArgumentException("Field " + field.getName() +
+                    " is not rewritable");
+        }
+
+        if (field.getType() != int[].class) {
+            throw new IllegalArgumentException("Field " + field.getName() +
+                    " is not an integer array");
+        }
+
+        try {
+            int[] array = (int[]) field.get(null);
+            for (int i = 0; i < array.length; i++) {
+                array[i] = (array[i] & 0x00ffffff) | (packageId << 24);
+            }
+        } catch (IllegalAccessException e) {
+            // This should not occur (we check above if we can write to it)
+            throw new IllegalArgumentException(e);
+        }
+    }
+
+    private void rewriteRValues(ClassLoader cl, String packageName, int id) {
+        try {
+            final Class<?> rClazz = cl.loadClass(packageName + ".R");
+            Class<?>[] declaredClasses = rClazz.getDeclaredClasses();
+            for (Class<?> clazz : declaredClasses) {
+                try {
+                    if (clazz.getSimpleName().equals("styleable")) {
+                        for (Field field : clazz.getDeclaredFields()) {
+                            if (field.getType() == int[].class) {
+                                rewriteIntArrayField(field, id);
+                            }
+                        }
+
+                    } else {
+                        for (Field field : clazz.getDeclaredFields()) {
+                            rewriteIntField(field, id);
+                        }
+                    }
+                } catch (Exception e) {
+                    throw new IllegalArgumentException("Failed to rewrite R values for " +
+                            clazz.getName(), e);
+                }
+            }
+
+        } catch (Exception e) {
+            throw new IllegalArgumentException("Failed to rewrite R values", e);
+        }
+    }
+
     public void removeContextRegistrations(Context context,
             String who, String what) {
         final boolean reportRegistrationLeaks = StrictMode.vmRegistrationLeaksEnabled();
diff --git a/core/java/android/app/MediaRouteButton.java b/core/java/android/app/MediaRouteButton.java
index a7982f4..fa2813e 100644
--- a/core/java/android/app/MediaRouteButton.java
+++ b/core/java/android/app/MediaRouteButton.java
@@ -73,13 +73,18 @@
     }
 
     public MediaRouteButton(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public MediaRouteButton(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         mRouter = (MediaRouter)context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
         mCallback = new MediaRouterCallback();
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.MediaRouteButton, defStyleAttr, 0);
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.MediaRouteButton, defStyleAttr, defStyleRes);
         setRemoteIndicatorDrawable(a.getDrawable(
                 com.android.internal.R.styleable.MediaRouteButton_externalRouteEnabledDrawable));
         mMinWidth = a.getDimensionPixelSize(
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 55e7470..25a1493 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -17,11 +17,14 @@
 package android.app;
 
 import com.android.internal.R;
+import com.android.internal.util.LegacyNotificationUtil;
 
+import android.annotation.IntDef;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.PorterDuff;
 import android.media.AudioManager;
 import android.net.Uri;
 import android.os.BadParcelableException;
@@ -37,6 +40,8 @@
 import android.widget.ProgressBar;
 import android.widget.RemoteViews;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.text.NumberFormat;
 import java.util.ArrayList;
 
@@ -201,6 +206,15 @@
      */
     public RemoteViews bigContentView;
 
+
+    /**
+     * @hide
+     * A medium-format version of {@link #contentView}, giving the Notification an
+     * opportunity to add action buttons to contentView. The system UI may
+     * choose to show this as a popup notification at its discretion.
+     */
+    public RemoteViews headsUpContentView;
+
     /**
      * The bitmap that may escape the bounds of the panel and bar.
      */
@@ -357,6 +371,11 @@
 
     public int flags;
 
+    /** @hide */
+    @IntDef({PRIORITY_DEFAULT,PRIORITY_LOW,PRIORITY_MIN,PRIORITY_HIGH,PRIORITY_MAX})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Priority {}
+
     /**
      * Default notification {@link #priority}. If your application does not prioritize its own
      * notifications, use this value for all notifications.
@@ -398,8 +417,34 @@
      * system will make a determination about how to interpret this priority when presenting
      * the notification.
      */
+    @Priority
     public int priority;
 
+
+    /**
+     * Sphere of visibility of this notification, which affects how and when the SystemUI reveals 
+     * the notification's presence and contents in untrusted situations (namely, on the secure 
+     * lockscreen).
+     *
+     * The default level, {@link #VISIBILITY_PRIVATE}, behaves exactly as notifications have always
+     * done on Android: The notification's {@link #icon} and {@link #tickerText} (if available) are
+     * shown in all situations, but the contents are only available if the device is unlocked for
+     * the appropriate user.
+     *
+     * A more permissive policy can be expressed by {@link #VISIBILITY_PUBLIC}; such a notification
+     * can be read even in an "insecure" context (that is, above a secure lockscreen).
+     * To modify the public version of this notification—for example, to redact some portions—see
+     * {@link Builder#setPublicVersion(Notification)}.
+     *
+     * Finally, a notification can be made {@link #VISIBILITY_SECRET}, which will suppress its icon
+     * and ticker until the user has bypassed the lockscreen.
+     */
+    public int visibility;
+
+    public static final int VISIBILITY_PUBLIC = 1;
+    public static final int VISIBILITY_PRIVATE = 0;
+    public static final int VISIBILITY_SECRET = -1;
+
     /**
      * Notification category: incoming call (voice or video) or similar synchronous communication request.
      */
@@ -588,6 +633,7 @@
      * notifications, each of which was supplied to {@link InboxStyle#addLine(CharSequence)}.
      */
     public static final String EXTRA_TEXT_LINES = "android.textLines";
+    public static final String EXTRA_TEMPLATE = "android.template";
 
     /**
      * {@link #extras} key: An array of people that this notification relates to, specified
@@ -716,6 +762,13 @@
     public Action[] actions;
 
     /**
+     * Replacement version of this notification whose content will be shown
+     * in an insecure context such as atop a secure keyguard. See {@link #visibility}
+     * and {@link #VISIBILITY_PUBLIC}.
+     */
+    public Notification publicVersion;
+
+    /**
      * Constructs a Notification object with default values.
      * You might want to consider using {@link Builder} instead.
      */
@@ -814,6 +867,16 @@
         if (parcel.readInt() != 0) {
             bigContentView = RemoteViews.CREATOR.createFromParcel(parcel);
         }
+
+        if (parcel.readInt() != 0) {
+            headsUpContentView = RemoteViews.CREATOR.createFromParcel(parcel);
+        }
+
+        visibility = parcel.readInt();
+
+        if (parcel.readInt() != 0) {
+            publicVersion = Notification.CREATOR.createFromParcel(parcel);
+        }
     }
 
     @Override
@@ -894,6 +957,17 @@
             that.bigContentView = this.bigContentView.clone();
         }
 
+        if (heavy && this.headsUpContentView != null) {
+            that.headsUpContentView = this.headsUpContentView.clone();
+        }
+
+        that.visibility = this.visibility;
+
+        if (this.publicVersion != null) {
+            that.publicVersion = new Notification();
+            this.publicVersion.cloneInto(that.publicVersion, heavy);
+        }
+
         if (!heavy) {
             that.lightenPayload(); // will clean out extras
         }
@@ -908,6 +982,7 @@
         tickerView = null;
         contentView = null;
         bigContentView = null;
+        headsUpContentView = null;
         largeIcon = null;
         if (extras != null) {
             extras.remove(Notification.EXTRA_LARGE_ICON);
@@ -1019,6 +1094,22 @@
         } else {
             parcel.writeInt(0);
         }
+
+        if (headsUpContentView != null) {
+            parcel.writeInt(1);
+            headsUpContentView.writeToParcel(parcel, 0);
+        } else {
+            parcel.writeInt(0);
+        }
+
+        parcel.writeInt(visibility);
+
+        if (publicVersion != null) {
+            parcel.writeInt(1);
+            publicVersion.writeToParcel(parcel, 0);
+        } else {
+            parcel.writeInt(0);
+        }
     }
 
     /**
@@ -1152,6 +1243,9 @@
         if (bigContentView != null) {
             bigContentView.setUser(user);
         }
+        if (headsUpContentView != null) {
+            headsUpContentView.setUser(user);
+        }
     }
 
     /**
@@ -1213,6 +1307,11 @@
         private boolean mUseChronometer;
         private Style mStyle;
         private boolean mShowWhen = true;
+        private int mVisibility = VISIBILITY_PRIVATE;
+        private Notification mPublicVersion = null;
+        private boolean mQuantumTheme;
+        private final LegacyNotificationUtil mLegacyNotificationUtil;
+        private ArrayList<String> mPeople;
 
         /**
          * Constructs a new Builder with the defaults:
@@ -1240,6 +1339,14 @@
             mWhen = System.currentTimeMillis();
             mAudioStreamType = STREAM_DEFAULT;
             mPriority = PRIORITY_DEFAULT;
+            mPeople = new ArrayList<String>();
+
+            // TODO: Decide on targetSdk from calling app whether to use quantum theme.
+            mQuantumTheme = true;
+
+            // TODO: Decide on targetSdk from calling app whether to instantiate the processor at
+            // all.
+            mLegacyNotificationUtil = LegacyNotificationUtil.getInstance();
         }
 
         /**
@@ -1602,7 +1709,7 @@
          *
          * @see Notification#priority
          */
-        public Builder setPriority(int pri) {
+        public Builder setPriority(@Priority int pri) {
             mPriority = pri;
             return this;
         }
@@ -1618,6 +1725,16 @@
         }
 
         /**
+         * Add a person that is relevant to this notification.
+         *
+         * @see Notification#EXTRA_PEOPLE
+         */
+        public Builder addPerson(String handle) {
+            mPeople.add(handle);
+            return this;
+        }
+
+        /**
          * Merge additional metadata into this notification.
          *
          * <p>Values within the Bundle will replace existing extras values in this Builder.
@@ -1704,6 +1821,30 @@
             return this;
         }
 
+        /**
+         * Specify the value of {@link #visibility}.
+
+         * @param visibility One of {@link #VISIBILITY_PRIVATE} (the default),
+         * {@link #VISIBILITY_SECRET}, or {@link #VISIBILITY_PUBLIC}.
+         *
+         * @return The same Builder.
+         */
+        public Builder setVisibility(int visibility) {
+            mVisibility = visibility;
+            return this;
+        }
+
+        /**
+         * Supply a replacement Notification whose contents should be shown in insecure contexts
+         * (i.e. atop the secure lockscreen). See {@link #visibility} and {@link #VISIBILITY_PUBLIC}.
+         * @param n A replacement notification, presumably with some or all info redacted.
+         * @return The same Builder.
+         */
+        public Builder setPublicVersion(Notification n) {
+            mPublicVersion = n;
+            return this;
+        }
+
         private void setFlag(int mask, boolean value) {
             if (value) {
                 mFlags |= mask;
@@ -1717,42 +1858,50 @@
             boolean showLine3 = false;
             boolean showLine2 = false;
             int smallIconImageViewId = R.id.icon;
-            if (mLargeIcon != null) {
-                contentView.setImageViewBitmap(R.id.icon, mLargeIcon);
-                smallIconImageViewId = R.id.right_icon;
-            }
-            if (mPriority < PRIORITY_LOW) {
+            if (!mQuantumTheme && mPriority < PRIORITY_LOW) {
                 contentView.setInt(R.id.icon,
                         "setBackgroundResource", R.drawable.notification_template_icon_low_bg);
                 contentView.setInt(R.id.status_bar_latest_event_content,
                         "setBackgroundResource", R.drawable.notification_bg_low);
             }
+            if (mLargeIcon != null) {
+                contentView.setImageViewBitmap(R.id.icon, mLargeIcon);
+                processLegacyLargeIcon(mLargeIcon, contentView);
+                smallIconImageViewId = R.id.right_icon;
+            }
             if (mSmallIcon != 0) {
                 contentView.setImageViewResource(smallIconImageViewId, mSmallIcon);
                 contentView.setViewVisibility(smallIconImageViewId, View.VISIBLE);
+                if (mLargeIcon != null) {
+                    processLegacySmallIcon(mSmallIcon, smallIconImageViewId, contentView);
+                } else {
+                    processLegacyLargeIcon(mSmallIcon, contentView);
+                }
+
             } else {
                 contentView.setViewVisibility(smallIconImageViewId, View.GONE);
             }
             if (mContentTitle != null) {
-                contentView.setTextViewText(R.id.title, mContentTitle);
+                contentView.setTextViewText(R.id.title, processLegacyText(mContentTitle));
             }
             if (mContentText != null) {
-                contentView.setTextViewText(R.id.text, mContentText);
+                contentView.setTextViewText(R.id.text, processLegacyText(mContentText));
                 showLine3 = true;
             }
             if (mContentInfo != null) {
-                contentView.setTextViewText(R.id.info, mContentInfo);
+                contentView.setTextViewText(R.id.info, processLegacyText(mContentInfo));
                 contentView.setViewVisibility(R.id.info, View.VISIBLE);
                 showLine3 = true;
             } else if (mNumber > 0) {
                 final int tooBig = mContext.getResources().getInteger(
                         R.integer.status_bar_notification_info_maxnum);
                 if (mNumber > tooBig) {
-                    contentView.setTextViewText(R.id.info, mContext.getResources().getString(
-                                R.string.status_bar_notification_info_overflow));
+                    contentView.setTextViewText(R.id.info, processLegacyText(
+                            mContext.getResources().getString(
+                                    R.string.status_bar_notification_info_overflow)));
                 } else {
                     NumberFormat f = NumberFormat.getIntegerInstance();
-                    contentView.setTextViewText(R.id.info, f.format(mNumber));
+                    contentView.setTextViewText(R.id.info, processLegacyText(f.format(mNumber)));
                 }
                 contentView.setViewVisibility(R.id.info, View.VISIBLE);
                 showLine3 = true;
@@ -1762,9 +1911,9 @@
 
             // Need to show three lines?
             if (mSubText != null) {
-                contentView.setTextViewText(R.id.text, mSubText);
+                contentView.setTextViewText(R.id.text, processLegacyText(mSubText));
                 if (mContentText != null) {
-                    contentView.setTextViewText(R.id.text2, mContentText);
+                    contentView.setTextViewText(R.id.text2, processLegacyText(mContentText));
                     contentView.setViewVisibility(R.id.text2, View.VISIBLE);
                     showLine2 = true;
                 } else {
@@ -1835,7 +1984,7 @@
             if (mContentView != null) {
                 return mContentView;
             } else {
-                return applyStandardTemplate(R.layout.notification_template_base, true); // no more special large_icon flavor
+                return applyStandardTemplate(getBaseLayoutResource(), true); // no more special large_icon flavor
             }
         }
 
@@ -1856,24 +2005,94 @@
         private RemoteViews makeBigContentView() {
             if (mActions.size() == 0) return null;
 
-            return applyStandardTemplateWithActions(R.layout.notification_template_big_base);
+            return applyStandardTemplateWithActions(getBigBaseLayoutResource());
         }
 
+        private RemoteViews makeHeadsUpContentView() {
+            if (mActions.size() == 0) return null;
+
+            return applyStandardTemplateWithActions(getBigBaseLayoutResource());
+        }
+
+
         private RemoteViews generateActionButton(Action action) {
             final boolean tombstone = (action.actionIntent == null);
             RemoteViews button = new RemoteViews(mContext.getPackageName(),
-                    tombstone ? R.layout.notification_action_tombstone
-                              : R.layout.notification_action);
+                    tombstone ? getActionTombstoneLayoutResource()
+                              : getActionLayoutResource());
             button.setTextViewCompoundDrawablesRelative(R.id.action0, action.icon, 0, 0, 0);
-            button.setTextViewText(R.id.action0, action.title);
+            button.setTextViewText(R.id.action0, processLegacyText(action.title));
             if (!tombstone) {
                 button.setOnClickPendingIntent(R.id.action0, action.actionIntent);
             }
             button.setContentDescription(R.id.action0, action.title);
+            processLegacyAction(action, button);
             return button;
         }
 
         /**
+         * @return Whether we are currently building a notification from a legacy (an app that
+         *         doesn't create quantum notifications by itself) app.
+         */
+        private boolean isLegacy() {
+            return mLegacyNotificationUtil != null;
+        }
+
+        private void processLegacyAction(Action action, RemoteViews button) {
+            if (isLegacy()) {
+                if (mLegacyNotificationUtil.isGrayscale(mContext, action.icon)) {
+                    button.setTextViewCompoundDrawablesRelativeColorFilter(R.id.action0, 0,
+                            mContext.getResources().getColor(
+                                    R.color.notification_action_legacy_color_filter),
+                            PorterDuff.Mode.MULTIPLY);
+                }
+            }
+        }
+
+        private CharSequence processLegacyText(CharSequence charSequence) {
+            if (isLegacy()) {
+                return mLegacyNotificationUtil.invertCharSequenceColors(charSequence);
+            } else {
+                return charSequence;
+            }
+        }
+
+        private void processLegacyLargeIcon(int largeIconId, RemoteViews contentView) {
+            if (isLegacy()) {
+                processLegacyLargeIcon(
+                        mLegacyNotificationUtil.isGrayscale(mContext, largeIconId),
+                        contentView);
+            }
+        }
+
+        private void processLegacyLargeIcon(Bitmap largeIcon, RemoteViews contentView) {
+            if (isLegacy()) {
+                processLegacyLargeIcon(
+                        mLegacyNotificationUtil.isGrayscale(largeIcon),
+                        contentView);
+            }
+        }
+
+        private void processLegacyLargeIcon(boolean isGrayscale, RemoteViews contentView) {
+            if (isLegacy() && isGrayscale) {
+                contentView.setInt(R.id.icon, "setBackgroundResource",
+                        R.drawable.notification_icon_legacy_bg_inset);
+            }
+        }
+
+        private void processLegacySmallIcon(int smallIconDrawableId, int smallIconImageViewId,
+                RemoteViews contentView) {
+            if (isLegacy()) {
+                if (mLegacyNotificationUtil.isGrayscale(mContext, smallIconDrawableId)) {
+                    contentView.setDrawableParameters(smallIconImageViewId, false, -1,
+                            mContext.getResources().getColor(
+                                    R.color.notification_action_legacy_color_filter),
+                            PorterDuff.Mode.MULTIPLY, -1);
+                }
+            }
+        }
+
+        /**
          * Apply the unstyled operations and return a new {@link Notification} object.
          * @hide
          */
@@ -1899,6 +2118,7 @@
             n.defaults = mDefaults;
             n.flags = mFlags;
             n.bigContentView = makeBigContentView();
+            n.headsUpContentView = makeHeadsUpContentView();
             if (mLedOnMs != 0 || mLedOffMs != 0) {
                 n.flags |= FLAG_SHOW_LIGHTS;
             }
@@ -1911,6 +2131,12 @@
                 n.actions = new Action[mActions.size()];
                 mActions.toArray(n.actions);
             }
+            n.visibility = mVisibility;
+
+            if (mPublicVersion != null) {
+                n.publicVersion = new Notification();
+                mPublicVersion.cloneInto(n.publicVersion, true);
+            }
 
             return n;
         }
@@ -1935,6 +2161,9 @@
             if (mLargeIcon != null) {
                 extras.putParcelable(EXTRA_LARGE_ICON, mLargeIcon);
             }
+            if (!mPeople.isEmpty()) {
+                extras.putStringArray(EXTRA_PEOPLE, mPeople.toArray(new String[mPeople.size()]));
+            }
         }
 
         /**
@@ -1975,6 +2204,49 @@
             build().cloneInto(n, true);
             return n;
         }
+
+
+        private int getBaseLayoutResource() {
+            return mQuantumTheme
+                    ? R.layout.notification_template_quantum_base
+                    : R.layout.notification_template_base;
+        }
+
+        private int getBigBaseLayoutResource() {
+            return mQuantumTheme
+                    ? R.layout.notification_template_quantum_big_base
+                    : R.layout.notification_template_big_base;
+        }
+
+        private int getBigPictureLayoutResource() {
+            return mQuantumTheme
+                    ? R.layout.notification_template_quantum_big_picture
+                    : R.layout.notification_template_big_picture;
+        }
+
+        private int getBigTextLayoutResource() {
+            return mQuantumTheme
+                    ? R.layout.notification_template_quantum_big_text
+                    : R.layout.notification_template_big_text;
+        }
+
+        private int getInboxLayoutResource() {
+            return mQuantumTheme
+                    ? R.layout.notification_template_quantum_inbox
+                    : R.layout.notification_template_inbox;
+        }
+
+        private int getActionLayoutResource() {
+            return mQuantumTheme
+                    ? R.layout.notification_quantum_action
+                    : R.layout.notification_action;
+        }
+
+        private int getActionTombstoneLayoutResource() {
+            return mQuantumTheme
+                    ? R.layout.notification_quantum_action_tombstone
+                    : R.layout.notification_action_tombstone;
+        }
     }
 
     /**
@@ -2039,7 +2311,7 @@
                     mSummaryTextSet ? mSummaryText
                                     : mBuilder.mSubText;
             if (overflowText != null) {
-                contentView.setTextViewText(R.id.text, overflowText);
+                contentView.setTextViewText(R.id.text, mBuilder.processLegacyText(overflowText));
                 contentView.setViewVisibility(R.id.overflow_divider, View.VISIBLE);
                 contentView.setViewVisibility(R.id.line3, View.VISIBLE);
             } else {
@@ -2060,6 +2332,7 @@
             if (mBigContentTitle != null) {
                 extras.putCharSequence(EXTRA_TITLE_BIG, mBigContentTitle);
             }
+            extras.putString(EXTRA_TEMPLATE, this.getClass().getName());
         }
 
         /**
@@ -2143,7 +2416,7 @@
         }
 
         private RemoteViews makeBigContentView() {
-            RemoteViews contentView = getStandardView(R.layout.notification_template_big_picture);
+            RemoteViews contentView = getStandardView(mBuilder.getBigPictureLayoutResource());
 
             contentView.setImageViewBitmap(R.id.big_picture, mPicture);
 
@@ -2242,14 +2515,14 @@
             final boolean hadThreeLines = (mBuilder.mContentText != null && mBuilder.mSubText != null);
             mBuilder.mContentText = null;
 
-            RemoteViews contentView = getStandardView(R.layout.notification_template_big_text);
+            RemoteViews contentView = getStandardView(mBuilder.getBigTextLayoutResource());
 
             if (hadThreeLines) {
                 // vertical centering
                 contentView.setViewPadding(R.id.line1, 0, 0, 0, 0);
             }
 
-            contentView.setTextViewText(R.id.big_text, mBigText);
+            contentView.setTextViewText(R.id.big_text, mBuilder.processLegacyText(mBigText));
             contentView.setViewVisibility(R.id.big_text, View.VISIBLE);
             contentView.setViewVisibility(R.id.text2, View.GONE);
 
@@ -2336,7 +2609,7 @@
         private RemoteViews makeBigContentView() {
             // Remove the content text so line3 disappears unless you have a summary
             mBuilder.mContentText = null;
-            RemoteViews contentView = getStandardView(R.layout.notification_template_inbox);
+            RemoteViews contentView = getStandardView(mBuilder.getInboxLayoutResource());
 
             contentView.setViewVisibility(R.id.text2, View.GONE);
 
@@ -2354,7 +2627,7 @@
                 CharSequence str = mTexts.get(i);
                 if (str != null && !str.equals("")) {
                     contentView.setViewVisibility(rowIds[i], View.VISIBLE);
-                    contentView.setTextViewText(rowIds[i], str);
+                    contentView.setTextViewText(rowIds[i], mBuilder.processLegacyText(str));
                 }
                 i++;
             }
diff --git a/core/java/android/app/OnActivityPausedListener.java b/core/java/android/app/OnActivityPausedListener.java
index 379f133..5003973 100644
--- a/core/java/android/app/OnActivityPausedListener.java
+++ b/core/java/android/app/OnActivityPausedListener.java
@@ -5,7 +5,7 @@
  * 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
+ *        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,
diff --git a/core/java/android/app/PackageInstallObserver.java b/core/java/android/app/PackageInstallObserver.java
new file mode 100644
index 0000000..dacffb4
--- /dev/null
+++ b/core/java/android/app/PackageInstallObserver.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 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 android.app;
+
+import android.content.pm.IPackageInstallObserver2;
+import android.os.Bundle;
+import android.os.RemoteException;
+
+/**
+ * @hide
+ *
+ * New-style observer for package installers to use.
+ */
+public class PackageInstallObserver {
+    IPackageInstallObserver2.Stub mObserver = new IPackageInstallObserver2.Stub() {
+        @Override
+        public void packageInstalled(String pkgName, Bundle extras, int result)
+                throws RemoteException {
+            PackageInstallObserver.this.packageInstalled(pkgName, extras, result);
+        }
+    };
+
+    /**
+     * This method will be called to report the result of the package installation attempt.
+     *
+     * @param pkgName Name of the package whose installation was attempted
+     * @param extras If non-null, this Bundle contains extras providing additional information
+     *        about an install failure.  See {@link android.content.pm.PackageManager} for
+     *        documentation about which extras apply to various failures; in particular the
+     *        strings named EXTRA_FAILURE_*.
+     * @param result The numeric success or failure code indicating the basic outcome
+     */
+    public void packageInstalled(String pkgName, Bundle extras, int result) {
+    }
+}
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 7129e9e..cf14202 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -16,6 +16,9 @@
 
 package android.app;
 
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IIntentReceiver;
@@ -30,6 +33,9 @@
 import android.os.UserHandle;
 import android.util.AndroidException;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * A description of an Intent and target action to perform with it.  Instances
  * of this class are created with {@link #getActivity}, {@link #getActivities},
@@ -86,6 +92,26 @@
 public final class PendingIntent implements Parcelable {
     private final IIntentSender mTarget;
 
+    /** @hide */
+    @IntDef(flag = true,
+            value = {
+                    FLAG_ONE_SHOT,
+                    FLAG_NO_CREATE,
+                    FLAG_CANCEL_CURRENT,
+                    FLAG_UPDATE_CURRENT,
+
+                    Intent.FILL_IN_ACTION,
+                    Intent.FILL_IN_DATA,
+                    Intent.FILL_IN_CATEGORIES,
+                    Intent.FILL_IN_COMPONENT,
+                    Intent.FILL_IN_PACKAGE,
+                    Intent.FILL_IN_SOURCE_BOUNDS,
+                    Intent.FILL_IN_SELECTOR,
+                    Intent.FILL_IN_CLIP_DATA
+            })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Flags {}
+
     /**
      * Flag indicating that this PendingIntent can be used only once.
      * For use with {@link #getActivity}, {@link #getBroadcast}, and
@@ -222,7 +248,7 @@
      * supplied.
      */
     public static PendingIntent getActivity(Context context, int requestCode,
-            Intent intent, int flags) {
+            Intent intent, @Flags int flags) {
         return getActivity(context, requestCode, intent, flags, null);
     }
 
@@ -255,7 +281,7 @@
      * supplied.
      */
     public static PendingIntent getActivity(Context context, int requestCode,
-            Intent intent, int flags, Bundle options) {
+            @NonNull Intent intent, @Flags int flags, @Nullable Bundle options) {
         String packageName = context.getPackageName();
         String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
                 context.getContentResolver()) : null;
@@ -280,7 +306,7 @@
      * activity is started, not when the pending intent is created.
      */
     public static PendingIntent getActivityAsUser(Context context, int requestCode,
-            Intent intent, int flags, Bundle options, UserHandle user) {
+            @NonNull Intent intent, int flags, Bundle options, UserHandle user) {
         String packageName = context.getPackageName();
         String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
                 context.getContentResolver()) : null;
@@ -345,7 +371,7 @@
      * supplied.
      */
     public static PendingIntent getActivities(Context context, int requestCode,
-            Intent[] intents, int flags) {
+            @NonNull Intent[] intents, @Flags int flags) {
         return getActivities(context, requestCode, intents, flags, null);
     }
 
@@ -395,7 +421,7 @@
      * supplied.
      */
     public static PendingIntent getActivities(Context context, int requestCode,
-            Intent[] intents, int flags, Bundle options) {
+            @NonNull Intent[] intents, @Flags int flags, @Nullable Bundle options) {
         String packageName = context.getPackageName();
         String[] resolvedTypes = new String[intents.length];
         for (int i=0; i<intents.length; i++) {
@@ -421,7 +447,7 @@
      * activity is started, not when the pending intent is created.
      */
     public static PendingIntent getActivitiesAsUser(Context context, int requestCode,
-            Intent[] intents, int flags, Bundle options, UserHandle user) {
+            @NonNull Intent[] intents, int flags, Bundle options, UserHandle user) {
         String packageName = context.getPackageName();
         String[] resolvedTypes = new String[intents.length];
         for (int i=0; i<intents.length; i++) {
@@ -465,7 +491,7 @@
      * supplied.
      */
     public static PendingIntent getBroadcast(Context context, int requestCode,
-            Intent intent, int flags) {
+            Intent intent, @Flags int flags) {
         return getBroadcastAsUser(context, requestCode, intent, flags,
                 new UserHandle(UserHandle.myUserId()));
     }
@@ -519,7 +545,7 @@
      * supplied.
      */
     public static PendingIntent getService(Context context, int requestCode,
-            Intent intent, int flags) {
+            @NonNull Intent intent, @Flags int flags) {
         String packageName = context.getPackageName();
         String resolvedType = intent != null ? intent.resolveTypeIfNeeded(
                 context.getContentResolver()) : null;
@@ -749,6 +775,7 @@
      * @return The package name of the PendingIntent, or null if there is
      * none associated with it.
      */
+    @Nullable
     public String getCreatorPackage() {
         try {
             return ActivityManagerNative.getDefault()
@@ -807,6 +834,7 @@
      * @return The user handle of the PendingIntent, or null if there is
      * none associated with it.
      */
+    @Nullable
     public UserHandle getCreatorUserHandle() {
         try {
             int uid = ActivityManagerNative.getDefault()
@@ -861,6 +889,20 @@
     }
 
     /**
+     * @hide
+     * Return descriptive tag for this PendingIntent.
+     */
+    public String getTag(String prefix) {
+        try {
+            return ActivityManagerNative.getDefault()
+                .getTagForIntentSender(mTarget, prefix);
+        } catch (RemoteException e) {
+            // Should never happen.
+            return null;
+        }
+    }
+
+    /**
      * Comparison operator on two PendingIntent objects, such that true
      * is returned then they both represent the same operation from the
      * same package.  This allows you to use {@link #getActivity},
@@ -922,8 +964,8 @@
      * @param sender The PendingIntent to write, or null.
      * @param out Where to write the PendingIntent.
      */
-    public static void writePendingIntentOrNullToParcel(PendingIntent sender,
-            Parcel out) {
+    public static void writePendingIntentOrNullToParcel(@Nullable PendingIntent sender,
+            @NonNull Parcel out) {
         out.writeStrongBinder(sender != null ? sender.mTarget.asBinder()
                 : null);
     }
@@ -938,7 +980,8 @@
      * @return Returns the Messenger read from the Parcel, or null if null had
      * been written.
      */
-    public static PendingIntent readPendingIntentOrNullFromParcel(Parcel in) {
+    @Nullable
+    public static PendingIntent readPendingIntentOrNullFromParcel(@NonNull Parcel in) {
         IBinder b = in.readStrongBinder();
         return b != null ? new PendingIntent(b) : null;
     }
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index 728f372..a67faa0 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -144,14 +144,16 @@
      * Creates the top level Resources for applications with the given compatibility info.
      *
      * @param resDir the resource directory.
+     * @param overlayDirs the resource overlay directories.
+     * @param libDirs the shared library resource dirs this app references.
      * @param compatInfo the compability info. Must not be null.
      * @param token the application token for determining stack bounds.
      */
-    public Resources getTopLevelResources(String resDir, String[] overlayDirs, int displayId,
-            Configuration overrideConfiguration, CompatibilityInfo compatInfo, IBinder token) {
+    public Resources getTopLevelResources(String resDir, String[] overlayDirs, String[] libDirs,
+            int displayId, Configuration overrideConfiguration, CompatibilityInfo compatInfo,
+            IBinder token) {
         final float scale = compatInfo.applicationScale;
-        ResourcesKey key = new ResourcesKey(resDir, displayId, overrideConfiguration, scale,
-                token);
+        ResourcesKey key = new ResourcesKey(resDir, displayId, overrideConfiguration, scale, token);
         Resources r;
         synchronized (this) {
             // Resources is app scale dependent.
@@ -186,6 +188,15 @@
             }
         }
 
+        if (libDirs != null) {
+            for (String libDir : libDirs) {
+                if (assets.addAssetPath(libDir) == 0) {
+                    Slog.w(TAG, "Asset path '" + libDir +
+                            "' does not exist or contains no resources.");
+                }
+            }
+        }
+
         //Slog.i(TAG, "Resource: key=" + key + ", display metrics=" + metrics);
         DisplayMetrics dm = getDisplayMetricsLocked(displayId);
         Configuration config;
diff --git a/core/java/android/app/ResultInfo.java b/core/java/android/app/ResultInfo.java
index 48a0fc2..5e0867c 100644
--- a/core/java/android/app/ResultInfo.java
+++ b/core/java/android/app/ResultInfo.java
@@ -17,12 +17,8 @@
 package android.app;
 
 import android.content.Intent;
-import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.Bundle;
-
-import java.util.Map;
 
 /**
  * {@hide}
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index d04e9db..af1810b 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -188,8 +188,7 @@
                 mSearchView.findViewById(com.android.internal.R.id.search_src_text);
         mAppIcon = (ImageView) findViewById(com.android.internal.R.id.search_app_icon);
         mSearchPlate = mSearchView.findViewById(com.android.internal.R.id.search_plate);
-        mWorkingSpinner = getContext().getResources().
-                getDrawable(com.android.internal.R.drawable.search_spinner);
+        mWorkingSpinner = getContext().getDrawable(com.android.internal.R.drawable.search_spinner);
         // TODO: Restore the spinner for slow suggestion lookups
         // mSearchAutoComplete.setCompoundDrawablesWithIntrinsicBounds(
         //        null, null, mWorkingSpinner, null);
@@ -458,7 +457,7 @@
 
         // optionally show one or the other.
         if (mSearchable.useBadgeIcon()) {
-            icon = mActivityContext.getResources().getDrawable(mSearchable.getIconId());
+            icon = mActivityContext.getDrawable(mSearchable.getIconId());
             visibility = View.VISIBLE;
             if (DBG) Log.d(LOG_TAG, "Using badge icon: " + mSearchable.getIconId());
         } else if (mSearchable.useBadgeLabel()) {
diff --git a/core/java/android/app/SearchManager.java b/core/java/android/app/SearchManager.java
index f9c245e..33c3409 100644
--- a/core/java/android/app/SearchManager.java
+++ b/core/java/android/app/SearchManager.java
@@ -22,7 +22,6 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.database.Cursor;
 import android.graphics.Rect;
@@ -34,7 +33,6 @@
 import android.os.UserHandle;
 import android.text.TextUtils;
 import android.util.Log;
-import android.util.Slog;
 import android.view.KeyEvent;
 
 import java.util.List;
diff --git a/core/java/android/app/SharedPreferencesImpl.java b/core/java/android/app/SharedPreferencesImpl.java
index a8896c2..4427ce1 100644
--- a/core/java/android/app/SharedPreferencesImpl.java
+++ b/core/java/android/app/SharedPreferencesImpl.java
@@ -45,7 +45,6 @@
 import java.util.Set;
 import java.util.WeakHashMap;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.ExecutorService;
 
 import libcore.io.IoUtils;
 
diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java
index 2045ed8..ce5306f 100644
--- a/core/java/android/app/StatusBarManager.java
+++ b/core/java/android/app/StatusBarManager.java
@@ -38,6 +38,7 @@
     public static final int DISABLE_NOTIFICATION_ICONS = View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS;
     public static final int DISABLE_NOTIFICATION_ALERTS
             = View.STATUS_BAR_DISABLE_NOTIFICATION_ALERTS;
+    @Deprecated
     public static final int DISABLE_NOTIFICATION_TICKER
             = View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER;
     public static final int DISABLE_SYSTEM_INFO = View.STATUS_BAR_DISABLE_SYSTEM_INFO;
@@ -59,6 +60,7 @@
             | DISABLE_SEARCH;
 
     public static final int NAVIGATION_HINT_BACK_ALT      = 1 << 0;
+    public static final int NAVIGATION_HINT_IME_SHOWN     = 1 << 1;
 
     public static final int WINDOW_STATUS_BAR = 1;
     public static final int WINDOW_NAVIGATION_BAR = 2;
diff --git a/core/java/android/app/TaskStackBuilder.java b/core/java/android/app/TaskStackBuilder.java
index 3e0ac7e..0077db1 100644
--- a/core/java/android/app/TaskStackBuilder.java
+++ b/core/java/android/app/TaskStackBuilder.java
@@ -16,6 +16,7 @@
 
 package android.app;
 
+import android.annotation.NonNull;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -244,7 +245,7 @@
      *
      * @return The obtained PendingIntent
      */
-    public PendingIntent getPendingIntent(int requestCode, int flags) {
+    public PendingIntent getPendingIntent(int requestCode, @PendingIntent.Flags int flags) {
         return getPendingIntent(requestCode, flags, null);
     }
 
@@ -263,7 +264,8 @@
      *
      * @return The obtained PendingIntent
      */
-    public PendingIntent getPendingIntent(int requestCode, int flags, Bundle options) {
+    public PendingIntent getPendingIntent(int requestCode, @PendingIntent.Flags int flags,
+            Bundle options) {
         if (mIntents.isEmpty()) {
             throw new IllegalStateException(
                     "No intents added to TaskStackBuilder; cannot getPendingIntent");
@@ -294,6 +296,7 @@
      *
      * @return An array containing the intents added to this builder.
      */
+    @NonNull
     public Intent[] getIntents() {
         Intent[] intents = new Intent[mIntents.size()];
         if (intents.length == 0) return intents;
diff --git a/core/java/android/app/TimePickerDialog.java b/core/java/android/app/TimePickerDialog.java
index 952227f..a85c61f 100644
--- a/core/java/android/app/TimePickerDialog.java
+++ b/core/java/android/app/TimePickerDialog.java
@@ -16,17 +16,19 @@
 
 package android.app;
 
-import com.android.internal.R;
-
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
 import android.os.Bundle;
+import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.widget.TimePicker;
 import android.widget.TimePicker.OnTimeChangedListener;
 
+import com.android.internal.R;
+
+
 /**
  * A dialog that prompts the user for the time of day using a {@link TimePicker}.
  *
@@ -38,7 +40,7 @@
 
     /**
      * The callback interface used to indicate the user is done filling in
-     * the time (they clicked on the 'Set' button).
+     * the time (they clicked on the 'Done' button).
      */
     public interface OnTimeSetListener {
 
@@ -55,7 +57,7 @@
     private static final String IS_24_HOUR = "is24hour";
 
     private final TimePicker mTimePicker;
-    private final OnTimeSetListener mCallback;
+    private final OnTimeSetListener mTimeSetCallback;
 
     int mInitialHourOfDay;
     int mInitialMinute;
@@ -74,6 +76,16 @@
         this(context, 0, callBack, hourOfDay, minute, is24HourView);
     }
 
+    static int resolveDialogTheme(Context context, int resid) {
+        if (resid == 0) {
+            TypedValue outValue = new TypedValue();
+            context.getTheme().resolveAttribute(R.attr.timePickerDialogTheme, outValue, true);
+            return outValue.resourceId;
+        } else {
+            return resid;
+        }
+    }
+
     /**
      * @param context Parent.
      * @param theme the theme to apply to this dialog
@@ -86,17 +98,13 @@
             int theme,
             OnTimeSetListener callBack,
             int hourOfDay, int minute, boolean is24HourView) {
-        super(context, theme);
-        mCallback = callBack;
+        super(context, resolveDialogTheme(context, theme));
+        mTimeSetCallback = callBack;
         mInitialHourOfDay = hourOfDay;
         mInitialMinute = minute;
         mIs24HourView = is24HourView;
 
-        setIcon(0);
-        setTitle(R.string.time_picker_dialog_title);
-
         Context themeContext = getContext();
-        setButton(BUTTON_POSITIVE, themeContext.getText(R.string.date_time_done), this);
 
         LayoutInflater inflater =
                 (LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -104,7 +112,18 @@
         setView(view);
         mTimePicker = (TimePicker) view.findViewById(R.id.timePicker);
 
-        // initialize state
+        // Initialize state
+        mTimePicker.setLegacyMode(false /* will show new UI */);
+        mTimePicker.setShowDoneButton(true);
+        mTimePicker.setDismissCallback(new TimePicker.TimePickerDismissCallback() {
+            @Override
+            public void dismiss(TimePicker view, boolean isCancel, int hourOfDay, int minute) {
+                if (!isCancel) {
+                    mTimeSetCallback.onTimeSet(view, hourOfDay, minute);
+                }
+                TimePickerDialog.this.dismiss();
+            }
+        });
         mTimePicker.setIs24HourView(mIs24HourView);
         mTimePicker.setCurrentHour(mInitialHourOfDay);
         mTimePicker.setCurrentMinute(mInitialMinute);
@@ -125,9 +144,9 @@
     }
 
     private void tryNotifyTimeSet() {
-        if (mCallback != null) {
+        if (mTimeSetCallback != null) {
             mTimePicker.clearFocus();
-            mCallback.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(),
+            mTimeSetCallback.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(),
                     mTimePicker.getCurrentMinute());
         }
     }
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
index 498fa42..9405325 100644
--- a/core/java/android/app/UiAutomation.java
+++ b/core/java/android/app/UiAutomation.java
@@ -33,12 +33,16 @@
 import android.view.InputEvent;
 import android.view.KeyEvent;
 import android.view.Surface;
+import android.view.WindowAnimationFrameStats;
+import android.view.WindowContentFrameStats;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityInteractionClient;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityWindowInfo;
 import android.view.accessibility.IAccessibilityInteractionConnection;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.concurrent.TimeoutException;
 
 /**
@@ -269,10 +273,10 @@
      * @param action The action to perform.
      * @return Whether the action was successfully performed.
      *
-     * @see AccessibilityService#GLOBAL_ACTION_BACK
-     * @see AccessibilityService#GLOBAL_ACTION_HOME
-     * @see AccessibilityService#GLOBAL_ACTION_NOTIFICATIONS
-     * @see AccessibilityService#GLOBAL_ACTION_RECENTS
+     * @see android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_BACK
+     * @see android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_HOME
+     * @see android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_NOTIFICATIONS
+     * @see android.accessibilityservice.AccessibilityService#GLOBAL_ACTION_RECENTS
      */
     public final boolean performGlobalAction(int action) {
         final IAccessibilityServiceConnection connection;
@@ -293,6 +297,28 @@
     }
 
     /**
+     * Find the view that has the specified focus type. The search is performed
+     * across all windows.
+     * <p>
+     * <strong>Note:</strong> In order to access the windows you have to opt-in
+     * to retrieve the interactive windows by setting the
+     * {@link AccessibilityServiceInfo#FLAG_RETRIEVE_INTERACTIVE_WINDOWS} flag.
+     * Otherwise, the search will be performed only in the active window.
+     * </p>
+     *
+     * @param focus The focus to find. One of {@link AccessibilityNodeInfo#FOCUS_INPUT} or
+     *         {@link AccessibilityNodeInfo#FOCUS_ACCESSIBILITY}.
+     * @return The node info of the focused view or null.
+     *
+     * @see AccessibilityNodeInfo#FOCUS_INPUT
+     * @see AccessibilityNodeInfo#FOCUS_ACCESSIBILITY
+     */
+    public AccessibilityNodeInfo findFocus(int focus) {
+        return AccessibilityInteractionClient.getInstance().findFocus(mConnectionId,
+                AccessibilityNodeInfo.ANY_WINDOW_ID, AccessibilityNodeInfo.ROOT_NODE_ID, focus);
+    }
+
+    /**
      * Gets the an {@link AccessibilityServiceInfo} describing this UiAutomation.
      * This method is useful if one wants to change some of the dynamically
      * configurable properties at runtime.
@@ -346,6 +372,33 @@
     }
 
     /**
+     * Gets the windows on the screen. This method returns only the windows
+     * that a sighted user can interact with, as opposed to all windows.
+     * For example, if there is a modal dialog shown and the user cannot touch
+     * anything behind it, then only the modal window will be reported
+     * (assuming it is the top one). For convenience the returned windows
+     * are ordered in a descending layer order, which is the windows that
+     * are higher in the Z-order are reported first.
+     * <p>
+     * <strong>Note:</strong> In order to access the windows you have to opt-in
+     * to retrieve the interactive windows by setting the
+     * {@link AccessibilityServiceInfo#FLAG_RETRIEVE_INTERACTIVE_WINDOWS} flag.
+     * </p>
+     *
+     * @return The windows if there are windows such, otherwise an empty list.
+     */
+    public List<AccessibilityWindowInfo> getWindows() {
+        final int connectionId;
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+            connectionId = mConnectionId;
+        }
+        // Calling out without a lock held.
+        return AccessibilityInteractionClient.getInstance()
+                .getWindows(connectionId);
+    }
+
+    /**
      * Gets the root {@link AccessibilityNodeInfo} in the active window.
      *
      * @return The root info.
@@ -632,7 +685,7 @@
      * potentially undesirable actions such as calling 911 or posting on public forums etc.
      *
      * @param enable whether to run in a "monkey" mode or not. Default is not.
-     * @see {@link ActivityManager#isUserAMonkey()}
+     * @see {@link android.app.ActivityManager#isUserAMonkey()}
      */
     public void setRunAsMonkey(boolean enable) {
         synchronized (mLock) {
@@ -645,6 +698,148 @@
         }
     }
 
+    /**
+     * Clears the frame statistics for the content of a given window. These
+     * statistics contain information about the most recently rendered content
+     * frames.
+     *
+     * @param windowId The window id.
+     * @return Whether the window is present and its frame statistics
+     *         were cleared.
+     *
+     * @see android.view.WindowContentFrameStats
+     * @see #getWindowContentFrameStats(int)
+     * @see #getWindows()
+     * @see AccessibilityWindowInfo#getId() AccessibilityWindowInfo.getId()
+     */
+    public boolean clearWindowContentFrameStats(int windowId) {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+        }
+        try {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Clearing content frame stats for window: " + windowId);
+            }
+            // Calling out without a lock held.
+            return mUiAutomationConnection.clearWindowContentFrameStats(windowId);
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error clearing window content frame stats!", re);
+        }
+        return false;
+    }
+
+    /**
+     * Gets the frame statistics for a given window. These statistics contain
+     * information about the most recently rendered content frames.
+     * <p>
+     * A typical usage requires clearing the window frame statistics via {@link
+     * #clearWindowContentFrameStats(int)} followed by an interaction with the UI and
+     * finally getting the window frame statistics via calling this method.
+     * </p>
+     * <pre>
+     * // Assume we have at least one window.
+     * final int windowId = getWindows().get(0).getId();
+     *
+     * // Start with a clean slate.
+     * uiAutimation.clearWindowContentFrameStats(windowId);
+     *
+     * // Do stuff with the UI.
+     *
+     * // Get the frame statistics.
+     * WindowContentFrameStats stats = uiAutomation.getWindowContentFrameStats(windowId);
+     * </pre>
+     *
+     * @param windowId The window id.
+     * @return The window frame statistics, or null if the window is not present.
+     *
+     * @see android.view.WindowContentFrameStats
+     * @see #clearWindowContentFrameStats(int)
+     * @see #getWindows()
+     * @see AccessibilityWindowInfo#getId() AccessibilityWindowInfo.getId()
+     */
+    public WindowContentFrameStats getWindowContentFrameStats(int windowId) {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+        }
+        try {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Getting content frame stats for window: " + windowId);
+            }
+            // Calling out without a lock held.
+            return mUiAutomationConnection.getWindowContentFrameStats(windowId);
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error getting window content frame stats!", re);
+        }
+        return null;
+    }
+
+    /**
+     * Clears the window animation rendering statistics. These statistics contain
+     * information about the most recently rendered window animation frames, i.e.
+     * for window transition animations.
+     *
+     * @see android.view.WindowAnimationFrameStats
+     * @see #getWindowAnimationFrameStats()
+     * @see android.R.styleable#WindowAnimation
+     */
+    public void clearWindowAnimationFrameStats() {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+        }
+        try {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Clearing window animation frame stats");
+            }
+            // Calling out without a lock held.
+            mUiAutomationConnection.clearWindowAnimationFrameStats();
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error clearing window animation frame stats!", re);
+        }
+    }
+
+    /**
+     * Gets the window animation frame statistics. These statistics contain
+     * information about the most recently rendered window animation frames, i.e.
+     * for window transition animations.
+     *
+     * <p>
+     * A typical usage requires clearing the window animation frame statistics via
+     * {@link #clearWindowAnimationFrameStats()} followed by an interaction that causes
+     * a window transition which uses a window animation and finally getting the window
+     * animation frame statistics by calling this method.
+     * </p>
+     * <pre>
+     * // Start with a clean slate.
+     * uiAutimation.clearWindowAnimationFrameStats();
+     *
+     * // Do stuff to trigger a window transition.
+     *
+     * // Get the frame statistics.
+     * WindowAnimationFrameStats stats = uiAutomation.getWindowAnimationFrameStats();
+     * </pre>
+     *
+     * @return The window animation frame statistics.
+     *
+     * @see android.view.WindowAnimationFrameStats
+     * @see #clearWindowAnimationFrameStats()
+     * @see android.R.styleable#WindowAnimation
+     */
+    public WindowAnimationFrameStats getWindowAnimationFrameStats() {
+        synchronized (mLock) {
+            throwIfNotConnectedLocked();
+        }
+        try {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Getting window animation frame stats");
+            }
+            // Calling out without a lock held.
+            return mUiAutomationConnection.getWindowAnimationFrameStats();
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error getting window animation frame stats!", re);
+        }
+        return null;
+    }
+
     private static float getDegreesForRotation(int value) {
         switch (value) {
             case Surface.ROTATION_90: {
diff --git a/core/java/android/app/UiAutomationConnection.java b/core/java/android/app/UiAutomationConnection.java
index 91b0d7c..fa40286 100644
--- a/core/java/android/app/UiAutomationConnection.java
+++ b/core/java/android/app/UiAutomationConnection.java
@@ -22,12 +22,15 @@
 import android.graphics.Bitmap;
 import android.hardware.input.InputManager;
 import android.os.Binder;
+import android.os.IBinder;
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.view.IWindowManager;
 import android.view.InputEvent;
 import android.view.SurfaceControl;
+import android.view.WindowAnimationFrameStats;
+import android.view.WindowContentFrameStats;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.IAccessibilityManager;
 
@@ -47,6 +50,9 @@
     private final IWindowManager mWindowManager = IWindowManager.Stub.asInterface(
             ServiceManager.getService(Service.WINDOW_SERVICE));
 
+    private final IAccessibilityManager mAccessibilityManager = IAccessibilityManager.Stub.asInterface(
+            ServiceManager.getService(Service.ACCESSIBILITY_SERVICE));
+
     private final Object mLock = new Object();
 
     private final Binder mToken = new Binder();
@@ -144,6 +150,76 @@
     }
 
     @Override
+    public boolean clearWindowContentFrameStats(int windowId) throws RemoteException {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            throwIfNotConnectedLocked();
+        }
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            IBinder token = mAccessibilityManager.getWindowToken(windowId);
+            if (token == null) {
+                return false;
+            }
+            return mWindowManager.clearWindowContentFrameStats(token);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public WindowContentFrameStats getWindowContentFrameStats(int windowId) throws RemoteException {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            throwIfNotConnectedLocked();
+        }
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            IBinder token = mAccessibilityManager.getWindowToken(windowId);
+            if (token == null) {
+                return null;
+            }
+            return mWindowManager.getWindowContentFrameStats(token);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public void clearWindowAnimationFrameStats() {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            throwIfNotConnectedLocked();
+        }
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            SurfaceControl.clearAnimationFrameStats();
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public WindowAnimationFrameStats getWindowAnimationFrameStats() {
+        synchronized (mLock) {
+            throwIfCalledByNotTrustedUidLocked();
+            throwIfShutdownLocked();
+            throwIfNotConnectedLocked();
+        }
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            WindowAnimationFrameStats stats = new WindowAnimationFrameStats();
+            SurfaceControl.getAnimationFrameStats(stats);
+            return stats;
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
     public void shutdown() {
         synchronized (mLock) {
             if (isConnectedLocked()) {
diff --git a/core/java/android/app/VoiceInteractor.java b/core/java/android/app/VoiceInteractor.java
new file mode 100644
index 0000000..6dc48b0
--- /dev/null
+++ b/core/java/android/app/VoiceInteractor.java
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2014 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 android.app;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.ArrayMap;
+import android.util.Log;
+import com.android.internal.app.IVoiceInteractor;
+import com.android.internal.app.IVoiceInteractorCallback;
+import com.android.internal.app.IVoiceInteractorRequest;
+import com.android.internal.os.HandlerCaller;
+import com.android.internal.os.SomeArgs;
+
+import java.util.WeakHashMap;
+
+/**
+ * Interface for an {@link Activity} to interact with the user through voice.
+ */
+public class VoiceInteractor {
+    static final String TAG = "VoiceInteractor";
+    static final boolean DEBUG = true;
+
+    final Context mContext;
+    final Activity mActivity;
+    final IVoiceInteractor mInteractor;
+    final HandlerCaller mHandlerCaller;
+    final HandlerCaller.Callback mHandlerCallerCallback = new HandlerCaller.Callback() {
+        @Override
+        public void executeMessage(Message msg) {
+            SomeArgs args = (SomeArgs)msg.obj;
+            Request request;
+            switch (msg.what) {
+                case MSG_CONFIRMATION_RESULT:
+                    request = pullRequest((IVoiceInteractorRequest)args.arg1, true);
+                    if (DEBUG) Log.d(TAG, "onConfirmResult: req="
+                            + ((IVoiceInteractorRequest)args.arg1).asBinder() + "/" + request
+                            + " confirmed=" + msg.arg1 + " result=" + args.arg2);
+                    if (request != null) {
+                        ((ConfirmationRequest)request).onConfirmationResult(msg.arg1 != 0,
+                                (Bundle) args.arg2);
+                        request.clear();
+                    }
+                    break;
+                case MSG_COMMAND_RESULT:
+                    request = pullRequest((IVoiceInteractorRequest)args.arg1, msg.arg1 != 0);
+                    if (DEBUG) Log.d(TAG, "onCommandResult: req="
+                            + ((IVoiceInteractorRequest)args.arg1).asBinder() + "/" + request
+                            + " result=" + args.arg2);
+                    if (request != null) {
+                        ((CommandRequest)request).onCommandResult((Bundle) args.arg2);
+                        if (msg.arg1 != 0) {
+                            request.clear();
+                        }
+                    }
+                    break;
+                case MSG_CANCEL_RESULT:
+                    request = pullRequest((IVoiceInteractorRequest)args.arg1, true);
+                    if (DEBUG) Log.d(TAG, "onCancelResult: req="
+                            + ((IVoiceInteractorRequest)args.arg1).asBinder() + "/" + request);
+                    if (request != null) {
+                        request.onCancel();
+                        request.clear();
+                    }
+                    break;
+            }
+        }
+    };
+
+    final IVoiceInteractorCallback.Stub mCallback = new IVoiceInteractorCallback.Stub() {
+        @Override
+        public void deliverConfirmationResult(IVoiceInteractorRequest request, boolean confirmed,
+                Bundle result) {
+            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageIOO(
+                    MSG_CONFIRMATION_RESULT, confirmed ? 1 : 0, request, result));
+        }
+
+        @Override
+        public void deliverCommandResult(IVoiceInteractorRequest request, boolean complete,
+                Bundle result) {
+            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageIOO(
+                    MSG_COMMAND_RESULT, complete ? 1 : 0, request, result));
+        }
+
+        @Override
+        public void deliverCancel(IVoiceInteractorRequest request) throws RemoteException {
+            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageO(
+                    MSG_CANCEL_RESULT, request));
+        }
+    };
+
+    final ArrayMap<IBinder, Request> mActiveRequests = new ArrayMap<IBinder, Request>();
+
+    static final int MSG_CONFIRMATION_RESULT = 1;
+    static final int MSG_COMMAND_RESULT = 2;
+    static final int MSG_CANCEL_RESULT = 3;
+
+    public static abstract class Request {
+        IVoiceInteractorRequest mRequestInterface;
+        Context mContext;
+        Activity mActivity;
+
+        public Request() {
+        }
+
+        public void cancel() {
+            try {
+                mRequestInterface.cancel();
+            } catch (RemoteException e) {
+                Log.w(TAG, "Voice interactor has died", e);
+            }
+        }
+
+        public Context getContext() {
+            return mContext;
+        }
+
+        public Activity getActivity() {
+            return mActivity;
+        }
+
+        public void onCancel() {
+        }
+
+        void clear() {
+            mRequestInterface = null;
+            mContext = null;
+            mActivity = null;
+        }
+
+        abstract IVoiceInteractorRequest submit(IVoiceInteractor interactor,
+                String packageName, IVoiceInteractorCallback callback) throws RemoteException;
+    }
+
+    public static class ConfirmationRequest extends Request {
+        final CharSequence mPrompt;
+        final Bundle mExtras;
+
+        /**
+         * Confirms an operation with the user via the trusted system
+         * VoiceInteractionService.  This allows an Activity to complete an unsafe operation that
+         * would require the user to touch the screen when voice interaction mode is not enabled.
+         * The result of the confirmation will be returned through an asynchronous call to
+         * either {@link #onConfirmationResult(boolean, android.os.Bundle)} or
+         * {@link #onCancel()}.
+         *
+         * <p>In some cases this may be a simple yes / no confirmation or the confirmation could
+         * include context information about how the action will be completed
+         * (e.g. booking a cab might include details about how long until the cab arrives)
+         * so the user can give a confirmation.
+         * @param prompt Optional confirmation text to read to the user as the action being
+         * confirmed.
+         * @param extras Additional optional information.
+         */
+        public ConfirmationRequest(CharSequence prompt, Bundle extras) {
+            mPrompt = prompt;
+            mExtras = extras;
+        }
+
+        public void onConfirmationResult(boolean confirmed, Bundle result) {
+        }
+
+        IVoiceInteractorRequest submit(IVoiceInteractor interactor, String packageName,
+                IVoiceInteractorCallback callback) throws RemoteException {
+            return interactor.startConfirmation(packageName, callback, mPrompt.toString(), mExtras);
+        }
+   }
+
+    public static class CommandRequest extends Request {
+        final String mCommand;
+        final Bundle mArgs;
+
+        /**
+         * Execute a command using the trusted system VoiceInteractionService.
+         * This allows an Activity to request additional information from the user needed to
+         * complete an action (e.g. booking a table might have several possible times that the
+         * user could select from or an app might need the user to agree to a terms of service).
+         * The result of the confirmation will be returned through an asynchronous call to
+         * either {@link #onCommandResult(android.os.Bundle)} or
+         * {@link #onCancel()}.
+         *
+         * <p>The command is a string that describes the generic operation to be performed.
+         * The command will determine how the properties in extras are interpreted and the set of
+         * available commands is expected to grow over time.  An example might be
+         * "com.google.voice.commands.REQUEST_NUMBER_BAGS" to request the number of bags as part of
+         * airline check-in.  (This is not an actual working example.)
+         *
+         * @param command The desired command to perform.
+         * @param args Additional arguments to control execution of the command.
+         */
+        public CommandRequest(String command, Bundle args) {
+            mCommand = command;
+            mArgs = args;
+        }
+
+        public void onCommandResult(Bundle result) {
+        }
+
+        IVoiceInteractorRequest submit(IVoiceInteractor interactor, String packageName,
+                IVoiceInteractorCallback callback) throws RemoteException {
+            return interactor.startConfirmation(packageName, callback, mCommand, mArgs);
+        }
+   }
+
+    VoiceInteractor(Context context, Activity activity, IVoiceInteractor interactor,
+            Looper looper) {
+        mContext = context;
+        mActivity = activity;
+        mInteractor = interactor;
+        mHandlerCaller = new HandlerCaller(context, looper, mHandlerCallerCallback, true);
+    }
+
+    Request pullRequest(IVoiceInteractorRequest request, boolean complete) {
+        synchronized (mActiveRequests) {
+            Request req = mActiveRequests.get(request.asBinder());
+            if (req != null && complete) {
+                mActiveRequests.remove(request.asBinder());
+            }
+            return req;
+        }
+    }
+
+    public boolean submitRequest(Request request) {
+        try {
+            IVoiceInteractorRequest ireq = request.submit(mInteractor,
+                    mContext.getOpPackageName(), mCallback);
+            request.mRequestInterface = ireq;
+            request.mContext = mContext;
+            request.mActivity = mActivity;
+            synchronized (mActiveRequests) {
+                mActiveRequests.put(ireq.asBinder(), request);
+            }
+            return true;
+        } catch (RemoteException e) {
+            Log.w(TAG, "Remove voice interactor service died", e);
+            return false;
+        }
+    }
+
+    /**
+     * Queries the supported commands available from the VoiceinteractionService.
+     * The command is a string that describes the generic operation to be performed.
+     * An example might be "com.google.voice.commands.REQUEST_NUMBER_BAGS" to request the number
+     * of bags as part of airline check-in.  (This is not an actual working example.)
+     *
+     * @param commands
+     */
+    public boolean[] supportsCommands(String[] commands) {
+        try {
+            boolean[] res = mInteractor.supportsCommands(mContext.getOpPackageName(), commands);
+            if (DEBUG) Log.d(TAG, "supportsCommands: cmds=" + commands + " res=" + res);
+            return res;
+        } catch (RemoteException e) {
+            throw new RuntimeException("Voice interactor has died", e);
+        }
+    }
+}
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 3a766b7..58d707c 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -16,6 +16,7 @@
 
 package android.app;
 
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
@@ -41,14 +42,17 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
-import android.os.Message;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.SystemProperties;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.WindowManagerGlobal;
 
 import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -66,6 +70,11 @@
     private float mWallpaperXStep = -1;
     private float mWallpaperYStep = -1;
 
+    /** {@hide} */
+    private static final String PROP_WALLPAPER = "ro.config.wallpaper";
+    /** {@hide} */
+    private static final String PROP_WALLPAPER_COMPONENT = "ro.config.wallpaper_component";
+
     /**
      * Activity Action: Show settings for choosing wallpaper. Do not use directly to construct
      * an intent; instead, use {@link #getCropAndSetWallpaperIntent}.
@@ -219,24 +228,9 @@
         
         private static final int MSG_CLEAR_WALLPAPER = 1;
         
-        private final Handler mHandler;
-        
         Globals(Looper looper) {
             IBinder b = ServiceManager.getService(Context.WALLPAPER_SERVICE);
             mService = IWallpaperManager.Stub.asInterface(b);
-            mHandler = new Handler(looper) {
-                @Override
-                public void handleMessage(Message msg) {
-                    switch (msg.what) {
-                        case MSG_CLEAR_WALLPAPER:
-                            synchronized (this) {
-                                mWallpaper = null;
-                                mDefaultWallpaper = null;
-                            }
-                            break;
-                    }
-                }
-            };
         }
         
         public void onWallpaperChanged() {
@@ -245,7 +239,10 @@
              * to null so if the user requests the wallpaper again then we'll
              * fetch it.
              */
-            mHandler.sendEmptyMessage(MSG_CLEAR_WALLPAPER);
+            synchronized (this) {
+                mWallpaper = null;
+                mDefaultWallpaper = null;
+            }
         }
 
         public Bitmap peekWallpaperBitmap(Context context, boolean returnDefault) {
@@ -278,7 +275,6 @@
             synchronized (this) {
                 mWallpaper = null;
                 mDefaultWallpaper = null;
-                mHandler.removeMessages(MSG_CLEAR_WALLPAPER);
             }
         }
 
@@ -313,8 +309,7 @@
         }
         
         private Bitmap getDefaultWallpaperLocked(Context context) {
-            InputStream is = context.getResources().openRawResource(
-                    com.android.internal.R.drawable.default_wallpaper);
+            InputStream is = openDefaultWallpaper(context);
             if (is != null) {
                 try {
                     BitmapFactory.Options options = new BitmapFactory.Options();
@@ -412,8 +407,7 @@
         horizontalAlignment = Math.max(0, Math.min(1, horizontalAlignment));
         verticalAlignment = Math.max(0, Math.min(1, verticalAlignment));
 
-        InputStream is = new BufferedInputStream(
-                resources.openRawResource(com.android.internal.R.drawable.default_wallpaper));
+        InputStream is = new BufferedInputStream(openDefaultWallpaper(mContext));
 
         if (is == null) {
             Log.e(TAG, "default wallpaper input stream is null");
@@ -438,8 +432,7 @@
                     }
                 }
 
-                is = new BufferedInputStream(resources.openRawResource(
-                        com.android.internal.R.drawable.default_wallpaper));
+                is = new BufferedInputStream(openDefaultWallpaper(mContext));
 
                 RectF cropRectF;
 
@@ -488,8 +481,7 @@
 
                 if (crop == null) {
                     // BitmapRegionDecoder has failed, try to crop in-memory
-                    is = new BufferedInputStream(resources.openRawResource(
-                            com.android.internal.R.drawable.default_wallpaper));
+                    is = new BufferedInputStream(openDefaultWallpaper(mContext));
                     Bitmap fullSize = null;
                     if (is != null) {
                         BitmapFactory.Options options = new BitmapFactory.Options();
@@ -1022,6 +1014,53 @@
      * wallpaper.
      */
     public void clear() throws IOException {
-        setResource(com.android.internal.R.drawable.default_wallpaper);
+        setStream(openDefaultWallpaper(mContext));
+    }
+
+    /**
+     * Open stream representing the default static image wallpaper.
+     *
+     * @hide
+     */
+    public static InputStream openDefaultWallpaper(Context context) {
+        final String path = SystemProperties.get(PROP_WALLPAPER);
+        if (!TextUtils.isEmpty(path)) {
+            final File file = new File(path);
+            if (file.exists()) {
+                try {
+                    return new FileInputStream(file);
+                } catch (IOException e) {
+                    // Ignored, fall back to platform default below
+                }
+            }
+        }
+        return context.getResources().openRawResource(
+                com.android.internal.R.drawable.default_wallpaper);
+    }
+
+    /**
+     * Return {@link ComponentName} of the default live wallpaper, or
+     * {@code null} if none is defined.
+     *
+     * @hide
+     */
+    public static ComponentName getDefaultWallpaperComponent(Context context) {
+        String flat = SystemProperties.get(PROP_WALLPAPER_COMPONENT);
+        if (!TextUtils.isEmpty(flat)) {
+            final ComponentName cn = ComponentName.unflattenFromString(flat);
+            if (cn != null) {
+                return cn;
+            }
+        }
+
+        flat = context.getString(com.android.internal.R.string.default_wallpaper_component);
+        if (!TextUtils.isEmpty(flat)) {
+            final ComponentName cn = ComponentName.unflattenFromString(flat);
+            if (cn != null) {
+                return cn;
+            }
+        }
+
+        return null;
     }
 }
diff --git a/core/java/android/app/admin/DeviceAdminInfo.java b/core/java/android/app/admin/DeviceAdminInfo.java
index 66fc816..3074b49 100644
--- a/core/java/android/app/admin/DeviceAdminInfo.java
+++ b/core/java/android/app/admin/DeviceAdminInfo.java
@@ -52,6 +52,22 @@
     static final String TAG = "DeviceAdminInfo";
 
     /**
+     * A type of policy that this device admin can use: device owner meta-policy
+     * for an admin that is designated as owner of the device.
+     *
+     * @hide
+     */
+    public static final int USES_POLICY_DEVICE_OWNER = -2;
+
+    /**
+     * A type of policy that this device admin can use: profile owner meta-policy
+     * for admins that have been installed as owner of some user profile.
+     *
+     * @hide
+     */
+    public static final int USES_POLICY_PROFILE_OWNER = -1;
+
+    /**
      * A type of policy that this device admin can use: limit the passwords
      * that the user can select, via {@link DevicePolicyManager#setPasswordQuality}
      * and {@link DevicePolicyManager#setPasswordMinimumLength}.
diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java
index 30b65de..f9d9059 100644
--- a/core/java/android/app/admin/DeviceAdminReceiver.java
+++ b/core/java/android/app/admin/DeviceAdminReceiver.java
@@ -29,25 +29,25 @@
  * Base class for implementing a device administration component.  This
  * class provides a convenience for interpreting the raw intent actions
  * that are sent by the system.
- * 
+ *
  * <p>The callback methods, like the base
  * {@link BroadcastReceiver#onReceive(Context, Intent) BroadcastReceiver.onReceive()}
  * method, happen on the main thread of the process.  Thus long running
  * operations must be done on another thread.  Note that because a receiver
  * is done once returning from its receive function, such long-running operations
  * should probably be done in a {@link Service}.
- * 
+ *
  * <p>When publishing your DeviceAdmin subclass as a receiver, it must
  * handle {@link #ACTION_DEVICE_ADMIN_ENABLED} and require the
  * {@link android.Manifest.permission#BIND_DEVICE_ADMIN} permission.  A typical
  * manifest entry would look like:</p>
- * 
+ *
  * {@sample development/samples/ApiDemos/AndroidManifest.xml device_admin_declaration}
- *   
+ *
  * <p>The meta-data referenced here provides addition information specific
  * to the device administrator, as parsed by the {@link DeviceAdminInfo} class.
  * A typical file would be:</p>
- * 
+ *
  * {@sample development/samples/ApiDemos/res/xml/device_admin_sample.xml meta_data}
  *
  * <div class="special reference">
@@ -86,7 +86,7 @@
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_DEVICE_ADMIN_DISABLE_REQUESTED
             = "android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED";
-    
+
     /**
      * A CharSequence that can be shown to the user informing them of the
      * impact of disabling your admin.
@@ -94,7 +94,7 @@
      * @see #ACTION_DEVICE_ADMIN_DISABLE_REQUESTED
      */
     public static final String EXTRA_DISABLE_WARNING = "android.app.extra.DISABLE_WARNING";
-    
+
     /**
      * Action sent to a device administrator when the user has disabled
      * it.  Upon return, the application no longer has access to the
@@ -107,7 +107,7 @@
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_DEVICE_ADMIN_DISABLED
             = "android.app.action.DEVICE_ADMIN_DISABLED";
-    
+
     /**
      * Action sent to a device administrator when the user has changed the
      * password of their device.  You can at this point check the characteristics
@@ -115,7 +115,7 @@
      * DevicePolicyManager.isActivePasswordSufficient()}.
      * You will generally
      * handle this in {@link DeviceAdminReceiver#onPasswordChanged}.
-     * 
+     *
      * <p>The calling device admin must have requested
      * {@link DeviceAdminInfo#USES_POLICY_LIMIT_PASSWORD} to receive
      * this broadcast.
@@ -123,7 +123,7 @@
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_PASSWORD_CHANGED
             = "android.app.action.ACTION_PASSWORD_CHANGED";
-    
+
     /**
      * Action sent to a device administrator when the user has failed at
      * attempted to enter the password.  You can at this point check the
@@ -131,7 +131,7 @@
      * {@link DevicePolicyManager#getCurrentFailedPasswordAttempts
      * DevicePolicyManager.getCurrentFailedPasswordAttempts()}.  You will generally
      * handle this in {@link DeviceAdminReceiver#onPasswordFailed}.
-     * 
+     *
      * <p>The calling device admin must have requested
      * {@link DeviceAdminInfo#USES_POLICY_WATCH_LOGIN} to receive
      * this broadcast.
@@ -139,11 +139,11 @@
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
     public static final String ACTION_PASSWORD_FAILED
             = "android.app.action.ACTION_PASSWORD_FAILED";
-    
+
     /**
      * Action sent to a device administrator when the user has successfully
      * entered their password, after failing one or more times.
-     * 
+     *
      * <p>The calling device admin must have requested
      * {@link DeviceAdminInfo#USES_POLICY_WATCH_LOGIN} to receive
      * this broadcast.
@@ -165,15 +165,31 @@
             = "android.app.action.ACTION_PASSWORD_EXPIRING";
 
     /**
+     * Broadcast Action: This broadcast is sent to the newly created profile when
+     * the provisioning of a managed profile has completed successfully.
+     *
+     * <p>The broadcast is limited to the package which started the provisioning as specified in
+     * the extra {@link DevicePolicyManager#EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME} of the
+     * {@link DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE} intent that started the
+     * provisioning. It is also limited to the managed profile.
+     *
+     * <p>Input: Nothing.</p>
+     * <p>Output: Nothing</p>
+     */
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_PROFILE_PROVISIONING_COMPLETE =
+            "android.app.action.ACTION_PROFILE_PROVISIONING_COMPLETE";
+
+    /**
      * Name under which a DevicePolicy component publishes information
      * about itself.  This meta-data must reference an XML resource containing
      * a device-admin tag.  XXX TO DO: describe syntax.
      */
     public static final String DEVICE_ADMIN_META_DATA = "android.app.device_admin";
-    
+
     private DevicePolicyManager mManager;
     private ComponentName mWho;
-    
+
     /**
      * Retrieve the DevicePolicyManager interface for this administrator to work
      * with the system.
@@ -186,7 +202,7 @@
                 Context.DEVICE_POLICY_SERVICE);
         return mManager;
     }
-    
+
     /**
      * Retrieve the ComponentName describing who this device administrator is, for
      * use in {@link DevicePolicyManager} APIs that require the administrator to
@@ -199,7 +215,7 @@
         mWho = new ComponentName(context, getClass());
         return mWho;
     }
-    
+
     /**
      * Called after the administrator is first enabled, as a result of
      * receiving {@link #ACTION_DEVICE_ADMIN_ENABLED}.  At this point you
@@ -209,7 +225,7 @@
      */
     public void onEnabled(Context context, Intent intent) {
     }
-    
+
     /**
      * Called when the user has asked to disable the administrator, as a result of
      * receiving {@link #ACTION_DEVICE_ADMIN_DISABLE_REQUESTED}, giving you
@@ -224,7 +240,7 @@
     public CharSequence onDisableRequested(Context context, Intent intent) {
         return null;
     }
-    
+
     /**
      * Called prior to the administrator being disabled, as a result of
      * receiving {@link #ACTION_DEVICE_ADMIN_DISABLED}.  Upon return, you
@@ -235,7 +251,7 @@
      */
     public void onDisabled(Context context, Intent intent) {
     }
-    
+
     /**
      * Called after the user has changed their password, as a result of
      * receiving {@link #ACTION_PASSWORD_CHANGED}.  At this point you
@@ -247,7 +263,7 @@
      */
     public void onPasswordChanged(Context context, Intent intent) {
     }
-    
+
     /**
      * Called after the user has failed at entering their current password, as a result of
      * receiving {@link #ACTION_PASSWORD_FAILED}.  At this point you
@@ -258,7 +274,7 @@
      */
     public void onPasswordFailed(Context context, Intent intent) {
     }
-    
+
     /**
      * Called after the user has succeeded at entering their current password,
      * as a result of receiving {@link #ACTION_PASSWORD_SUCCEEDED}.  This will
@@ -292,6 +308,26 @@
     }
 
     /**
+     * Called on the new profile when managed profile provisioning has completed.
+     * Managed profile provisioning is the process of setting up the device so that it has a
+     * separate profile which is managed by the mobile device management(mdm) application that
+     * triggered the provisioning.
+     *
+     * <p>As part of provisioning a new profile is created, the mdm is moved to the new profile and
+     * set as the owner of the profile so that it has full control over it.
+     * This intent is only received by the mdm package that is set as profile owner during
+     * provisioning.
+     *
+     * <p>Provisioning can be triggered via an intent with the action
+     * android.managedprovisioning.ACTION_PROVISION_MANAGED_PROFILE.
+     *
+     * @param context The running context as per {@link #onReceive}.
+     * @param intent The received intent as per {@link #onReceive}.
+     */
+    public void onProfileProvisioningComplete(Context context, Intent intent) {
+    }
+
+    /**
      * Intercept standard device administrator broadcasts.  Implementations
      * should not override this method; it is better to implement the
      * convenience callbacks for each action.
@@ -299,6 +335,7 @@
     @Override
     public void onReceive(Context context, Intent intent) {
         String action = intent.getAction();
+
         if (ACTION_PASSWORD_CHANGED.equals(action)) {
             onPasswordChanged(context, intent);
         } else if (ACTION_PASSWORD_FAILED.equals(action)) {
@@ -317,6 +354,8 @@
             onDisabled(context, intent);
         } else if (ACTION_PASSWORD_EXPIRING.equals(action)) {
             onPasswordExpiring(context, intent);
+        } else if (ACTION_PROFILE_PROVISIONING_COMPLETE.equals(action)) {
+            onProfileProvisioningComplete(context, intent);
         }
     }
 }
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index ab82531..6f68dfb 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -22,14 +22,18 @@
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.os.Bundle;
 import android.os.Handler;
+import android.os.Process;
 import android.os.RemoteCallback;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
+import android.service.trust.TrustAgentService;
 import android.util.Log;
 
 import com.android.org.conscrypt.TrustedCertificateStore;
@@ -75,6 +79,43 @@
     }
 
     /**
+     * Activity action: Starts the provisioning flow which sets up a managed profile.
+     * This intent will typically be sent by a mobile device management application(mdm).
+     * Managed profile provisioning creates a profile, moves the mdm to the profile,
+     * sets the mdm as the profile owner and removes all non required applications from the profile.
+     * As a profile owner the mdm than has full control over the managed profile.
+     *
+     * <p>The intent must contain the extras {@link #EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME} and
+     * {@link #EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME}.
+     *
+     * <p> When managed provisioning has completed, an intent of the type
+     * {@link DeviceAdminReceiver#ACTION_PROFILE_PROVISIONING_COMPLETE} is broadcasted to the
+     * mdm app on the managed profile.
+     *
+     * <p>Input: Nothing.</p>
+     * <p>Output: Nothing</p>
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_PROVISION_MANAGED_PROFILE
+        = "android.app.action.ACTION_PROVISION_MANAGED_PROFILE";
+
+    /**
+     * A String extra holding the name of the package of the mobile device management application
+     * that starts the managed provisioning flow. This package will be set as the profile owner.
+     * <p>Use with {@link #ACTION_PROVISION_MANAGED_PROFILE}.
+     */
+    public static final String EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME
+        = "deviceAdminPackageName";
+
+    /**
+     * A String extra holding the default name of the profile that is created during managed profile
+     * provisioning.
+     * <p>Use with {@link #ACTION_PROVISION_MANAGED_PROFILE}
+     */
+    public static final String EXTRA_PROVISIONING_DEFAULT_MANAGED_PROFILE_NAME
+        = "defaultManagedProfileName";
+
+    /**
      * Activity action: ask the user to add a new device administrator to the system.
      * The desired policy is the ComponentName of the policy in the
      * {@link #EXTRA_DEVICE_ADMIN} extra field.  This will invoke a UI to
@@ -131,6 +172,16 @@
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_SET_NEW_PASSWORD
             = "android.app.action.SET_NEW_PASSWORD";
+    /**
+     * Flag for {@link #forwardMatchingIntents}: the intents will forwarded to the primary user.
+     */
+    public static int FLAG_TO_PRIMARY_USER = 0x0001;
+
+    /**
+     * Flag for {@link #forwardMatchingIntents}: the intents will be forwarded to the managed
+     * profile.
+     */
+    public static int FLAG_TO_MANAGED_PROFILE = 0x0002;
 
     /**
      * Return true if the given administrator component is currently
@@ -1153,7 +1204,9 @@
                         }
                         exclSpec = listBuilder.toString();
                     }
-                    android.net.Proxy.validate(hostName, Integer.toString(port), exclSpec);
+                    if (android.net.Proxy.validate(hostName, Integer.toString(port), exclSpec)
+                            != android.net.Proxy.PROXY_VALID)
+                        throw new IllegalArgumentException();
                 }
                 return mService.setGlobalProxy(admin, hostSpec, exclSpec, UserHandle.myUserId());
             } catch (RemoteException e) {
@@ -1225,7 +1278,7 @@
     public static final int KEYGUARD_DISABLE_FEATURES_NONE = 0;
 
     /**
-     * Disable all keyguard widgets
+     * Disable all keyguard widgets. Has no effect.
      */
     public static final int KEYGUARD_DISABLE_WIDGETS_ALL = 1 << 0;
 
@@ -1235,6 +1288,22 @@
     public static final int KEYGUARD_DISABLE_SECURE_CAMERA = 1 << 1;
 
     /**
+     * Disable showing all notifications on secure keyguard screens (e.g. PIN/Pattern/Password)
+     */
+    public static final int KEYGUARD_DISABLE_SECURE_NOTIFICATIONS = 1 << 2;
+
+    /**
+     * Only allow redacted notifications on secure keyguard screens (e.g. PIN/Pattern/Password)
+     */
+    public static final int KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS = 1 << 3;
+
+    /**
+     * Ignore {@link TrustAgentService} state on secure keyguard screens
+     * (e.g. PIN/Pattern/Password).
+     */
+    public static final int KEYGUARD_DISABLE_TRUST_AGENTS = 1 << 4;
+
+    /**
      * Disable all current and future keyguard customizations.
      */
     public static final int KEYGUARD_DISABLE_FEATURES_ALL = 0x7fffffff;
@@ -1454,7 +1523,8 @@
      * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      * @param which {@link #KEYGUARD_DISABLE_FEATURES_NONE} (default),
      * {@link #KEYGUARD_DISABLE_WIDGETS_ALL}, {@link #KEYGUARD_DISABLE_SECURE_CAMERA},
-     * {@link #KEYGUARD_DISABLE_FEATURES_ALL}
+     * {@link #KEYGUARD_DISABLE_SECURE_NOTIFICATIONS}, {@link #KEYGUARD_DISABLE_TRUST_AGENTS},
+     * {@link #KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS}, {@link #KEYGUARD_DISABLE_FEATURES_ALL}
      */
     public void setKeyguardDisabledFeatures(ComponentName admin, int which) {
         if (mService != null) {
@@ -1493,10 +1563,10 @@
     /**
      * @hide
      */
-    public void setActiveAdmin(ComponentName policyReceiver, boolean refreshing) {
+    public void setActiveAdmin(ComponentName policyReceiver, boolean refreshing, int userHandle) {
         if (mService != null) {
             try {
-                mService.setActiveAdmin(policyReceiver, refreshing, UserHandle.myUserId());
+                mService.setActiveAdmin(policyReceiver, refreshing, userHandle);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed talking with device policy service", e);
             }
@@ -1504,6 +1574,13 @@
     }
 
     /**
+     * @hide
+     */
+    public void setActiveAdmin(ComponentName policyReceiver, boolean refreshing) {
+        setActiveAdmin(policyReceiver, refreshing, UserHandle.myUserId());
+    }
+
+    /**
      * Returns the DeviceAdminInfo as defined by the administrator's package info & meta-data
      * @hide
      */
@@ -1681,4 +1758,287 @@
         }
         return null;
     }
+
+    /**
+     * @hide
+     * Sets the given package as the profile owner of the given user profile. The package must
+     * already be installed and there shouldn't be an existing profile owner registered for this
+     * user. Also, this method must be called before the user has been used for the first time.
+     * @param packageName the package name of the application to be registered as profile owner.
+     * @param ownerName the human readable name of the organisation associated with this DPM.
+     * @param userHandle the userId to set the profile owner for.
+     * @return whether the package was successfully registered as the profile owner.
+     * @throws IllegalArgumentException if packageName is null, the package isn't installed, or
+     *         the user has already been set up.
+     */
+    public boolean setProfileOwner(String packageName, String ownerName, int userHandle)
+            throws IllegalArgumentException {
+        if (mService != null) {
+            try {
+                return mService.setProfileOwner(packageName, ownerName, userHandle);
+            } catch (RemoteException re) {
+                Log.w(TAG, "Failed to set profile owner", re);
+                throw new IllegalArgumentException("Couldn't set profile owner.", re);
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Sets the enabled state of the profile. A profile should be enabled only once it is ready to
+     * be used. Only the profile owner can call this.
+     *
+     * @see #isProfileOwnerApp
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     */
+    public void setProfileEnabled(ComponentName admin) {
+        if (mService != null) {
+            try {
+                mService.setProfileEnabled(admin);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
+     * Used to determine if a particular package is registered as the Profile Owner for the
+     * current user. A profile owner is a special device admin that has additional privileges
+     * within the managed profile.
+     *
+     * @param packageName The package name of the app to compare with the registered profile owner.
+     * @return Whether or not the package is registered as the profile owner.
+     */
+    public boolean isProfileOwnerApp(String packageName) {
+        if (mService != null) {
+            try {
+                String profileOwnerPackage = mService.getProfileOwner(
+                        Process.myUserHandle().getIdentifier());
+                return profileOwnerPackage != null && profileOwnerPackage.equals(packageName);
+            } catch (RemoteException re) {
+                Log.w(TAG, "Failed to check profile owner");
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @hide
+     * @return the packageName of the owner of the given user profile or null if no profile
+     * owner has been set for that user.
+     * @throws IllegalArgumentException if the userId is invalid.
+     */
+    public String getProfileOwner() throws IllegalArgumentException {
+        if (mService != null) {
+            try {
+                return mService.getProfileOwner(Process.myUserHandle().getIdentifier());
+            } catch (RemoteException re) {
+                Log.w(TAG, "Failed to get profile owner");
+                throw new IllegalArgumentException(
+                        "Requested profile owner for invalid userId", re);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @hide
+     * @return the human readable name of the organisation associated with this DPM or null if
+     *         one is not set.
+     * @throws IllegalArgumentException if the userId is invalid.
+     */
+    public String getProfileOwnerName() throws IllegalArgumentException {
+        if (mService != null) {
+            try {
+                return mService.getProfileOwnerName(Process.myUserHandle().getIdentifier());
+            } catch (RemoteException re) {
+                Log.w(TAG, "Failed to get profile owner");
+                throw new IllegalArgumentException(
+                        "Requested profile owner for invalid userId", re);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Called by a profile owner or device owner to add a default intent handler activity for
+     * intents that match a certain intent filter. This activity will remain the default intent
+     * handler even if the set of potential event handlers for the intent filter changes and if
+     * the intent preferences are reset.
+     *
+     * <p>The default disambiguation mechanism takes over if the activity is not installed
+     * (anymore). When the activity is (re)installed, it is automatically reset as default
+     * intent handler for the filter.
+     *
+     * <p>The calling device admin must be a profile owner or device owner. If it is not, a
+     * security exception will be thrown.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     * @param filter The IntentFilter for which a default handler is added.
+     * @param activity The Activity that is added as default intent handler.
+     */
+    public void addPersistentPreferredActivity(ComponentName admin, IntentFilter filter,
+            ComponentName activity) {
+        if (mService != null) {
+            try {
+                mService.addPersistentPreferredActivity(admin, filter, activity);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
+     * Called by a profile owner or device owner to remove all persistent intent handler preferences
+     * associated with the given package that were set by {@link #addPersistentPreferredActivity}.
+     *
+     * <p>The calling device admin must be a profile owner. If it is not, a security
+     * exception will be thrown.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     * @param packageName The name of the package for which preferences are removed.
+     */
+    public void clearPackagePersistentPreferredActivities(ComponentName admin,
+            String packageName) {
+        if (mService != null) {
+            try {
+                mService.clearPackagePersistentPreferredActivities(admin, packageName);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
+     * Called by a profile or device owner to set the application restrictions for a given target
+     * application running in the managed profile.
+     *
+     * <p>The provided {@link Bundle} consists of key-value pairs, where the types of values may be
+     * {@link Boolean}, {@link String}, or {@link String}[]. The recommended format for key strings
+     * is "com.example.packagename/example-setting" to avoid naming conflicts with library
+     * components such as {@link android.webkit.WebView}.
+     *
+     * <p>The application restrictions are only made visible to the target application and the
+     * profile or device owner.
+     *
+     * <p>The calling device admin must be a profile or device owner; if it is not, a security
+     * exception will be thrown.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     * @param packageName The name of the package to update restricted settings for.
+     * @param settings A {@link Bundle} to be parsed by the receiving application, conveying a new
+     * set of active restrictions.
+     */
+    public void setApplicationRestrictions(ComponentName admin, String packageName,
+            Bundle settings) {
+        if (mService != null) {
+            try {
+                mService.setApplicationRestrictions(admin, packageName, settings);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
+     * Called by a profile owner to forward intents sent from the managed profile to the owner, or
+     * from the owner to the managed profile.
+     * If an intent matches this intent filter, then activities belonging to the other user can
+     * respond to this intent.
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     * @param filter if an intent matches this IntentFilter, then it can be forwarded.
+     */
+    public void forwardMatchingIntents(ComponentName admin, IntentFilter filter, int flags) {
+        if (mService != null) {
+            try {
+                mService.forwardMatchingIntents(admin, filter, flags);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
+     * Called by a profile owner to remove all the forwarding intent filters from the current user
+     * and from the owner.
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     */
+    public void clearForwardingIntentFilters(ComponentName admin) {
+        if (mService != null) {
+            try {
+                mService.clearForwardingIntentFilters(admin);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
+     * Called by a profile or device owner to get the application restrictions for a given target
+     * application running in the managed profile.
+     *
+     * <p>The calling device admin must be a profile or device owner; if it is not, a security
+     * exception will be thrown.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+     * @param packageName The name of the package to fetch restricted settings of.
+     * @return {@link Bundle} of settings corresponding to what was set last time
+     * {@link DevicePolicyManager#setApplicationRestrictions} was called, or an empty {@link Bundle}
+     * if no restrictions have been set.
+     */
+    public Bundle getApplicationRestrictions(ComponentName admin, String packageName) {
+        if (mService != null) {
+            try {
+                return mService.getApplicationRestrictions(admin, packageName);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Called by a profile or device owner to set a user restriction specified
+     * by the key.
+     * <p>
+     * The calling device admin must be a profile or device owner; if it is not,
+     * a security exception will be thrown.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated
+     *            with.
+     * @param key The key of the restriction. See the constants in
+     *            {@link android.os.UserManager} for the list of keys.
+     */
+    public void addUserRestriction(ComponentName admin, String key) {
+        if (mService != null) {
+            try {
+                mService.setUserRestriction(admin, key, true);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
+
+    /**
+     * Called by a profile or device owner to clear a user restriction specified
+     * by the key.
+     * <p>
+     * The calling device admin must be a profile or device owner; if it is not,
+     * a security exception will be thrown.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated
+     *            with.
+     * @param key The key of the restriction. See the constants in
+     *            {@link android.os.UserManager} for the list of keys.
+     */
+    public void clearUserRestriction(ComponentName admin, String key) {
+        if (mService != null) {
+            try {
+                mService.setUserRestriction(admin, key, false);
+            } catch (RemoteException e) {
+                Log.w(TAG, "Failed talking with device policy service", e);
+            }
+        }
+    }
 }
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 172c47c..495a5f9 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -18,6 +18,8 @@
 package android.app.admin;
 
 import android.content.ComponentName;
+import android.content.IntentFilter;
+import android.os.Bundle;
 import android.os.RemoteCallback;
 
 /**
@@ -103,6 +105,21 @@
     String getDeviceOwner();
     String getDeviceOwnerName();
 
+    boolean setProfileOwner(String packageName, String ownerName, int userHandle);
+    String getProfileOwner(int userHandle);
+    String getProfileOwnerName(int userHandle);
+    void setProfileEnabled(in ComponentName who);
+
     boolean installCaCert(in byte[] certBuffer);
     void uninstallCaCert(in byte[] certBuffer);
+
+    void addPersistentPreferredActivity(in ComponentName admin, in IntentFilter filter, in ComponentName activity);
+    void clearPackagePersistentPreferredActivities(in ComponentName admin, String packageName);
+
+    void setApplicationRestrictions(in ComponentName who, in String packageName, in Bundle settings);
+    Bundle getApplicationRestrictions(in ComponentName who, in String packageName);
+
+    void setUserRestriction(in ComponentName who, in String key, boolean enable);
+    void forwardMatchingIntents(in ComponentName admin, in IntentFilter filter, int flags);
+    void clearForwardingIntentFilters(in ComponentName admin);
 }
diff --git a/core/java/android/app/backup/BackupAgent.java b/core/java/android/app/backup/BackupAgent.java
index 70a3797..886f1a6 100644
--- a/core/java/android/app/backup/BackupAgent.java
+++ b/core/java/android/app/backup/BackupAgent.java
@@ -127,6 +127,13 @@
 
     Handler mHandler = null;
 
+    Handler getHandler() {
+        if (mHandler == null) {
+            mHandler = new Handler(Looper.getMainLooper());
+        }
+        return mHandler;
+    }
+
     class SharedPrefsSynchronizer implements Runnable {
         public final CountDownLatch mLatch = new CountDownLatch(1);
 
@@ -139,12 +146,9 @@
 
     // Syncing shared preferences deferred writes needs to happen on the main looper thread
     private void waitForSharedPrefs() {
-        if (mHandler == null) {
-            mHandler = new Handler(Looper.getMainLooper());
-        }
-
+        Handler h = getHandler();
         final SharedPrefsSynchronizer s = new SharedPrefsSynchronizer();
-        mHandler.postAtFrontOfQueue(s);
+        h.postAtFrontOfQueue(s);
         try {
             s.mLatch.await();
         } catch (InterruptedException e) { /* ignored */ }
@@ -679,5 +683,23 @@
                 }
             }
         }
+
+        @Override
+        public void fail(String message) {
+            getHandler().post(new FailRunnable(message));
+        }
+    }
+
+    static class FailRunnable implements Runnable {
+        private String mMessage;
+
+        FailRunnable(String message) {
+            mMessage = message;
+        }
+
+        @Override
+        public void run() {
+            throw new IllegalStateException(mMessage);
+        }
     }
 }
diff --git a/core/java/android/app/backup/BackupDataOutput.java b/core/java/android/app/backup/BackupDataOutput.java
index 3a070b6..fc5fb3d 100644
--- a/core/java/android/app/backup/BackupDataOutput.java
+++ b/core/java/android/app/backup/BackupDataOutput.java
@@ -17,6 +17,7 @@
 package android.app.backup;
 
 import android.os.ParcelFileDescriptor;
+import android.os.Process;
 
 import java.io.FileDescriptor;
 import java.io.IOException;
@@ -76,7 +77,8 @@
     /**
      * Mark the beginning of one record in the backup data stream. This must be called before
      * {@link #writeEntityData}.
-     * @param key A string key that uniquely identifies the data record within the application
+     * @param key A string key that uniquely identifies the data record within the application.
+     *    Keys whose first character is \uFF00 or higher are not valid.
      * @param dataSize The size in bytes of this record's data.  Passing a dataSize
      *    of -1 indicates that the record under this key should be deleted.
      * @return The number of bytes written to the backup stream
diff --git a/core/java/android/app/backup/FullBackup.java b/core/java/android/app/backup/FullBackup.java
index 477285d..6ebb6c4 100644
--- a/core/java/android/app/backup/FullBackup.java
+++ b/core/java/android/app/backup/FullBackup.java
@@ -16,9 +16,6 @@
 
 package android.app.backup;
 
-import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
 import android.os.ParcelFileDescriptor;
 import android.system.ErrnoException;
 import android.system.Os;
diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl
index 12ee3b6..c629a2e 100644
--- a/core/java/android/app/backup/IBackupManager.aidl
+++ b/core/java/android/app/backup/IBackupManager.aidl
@@ -167,7 +167,7 @@
      *     are to be backed up.  The <code>allApps</code> parameter supersedes this.
      */
     void fullBackup(in ParcelFileDescriptor fd, boolean includeApks, boolean includeObbs,
-            boolean includeShared, boolean allApps, boolean allIncludesSystem,
+            boolean includeShared, boolean doWidgets, boolean allApps, boolean allIncludesSystem,
             in String[] packageNames);
 
     /**
diff --git a/core/java/android/app/backup/SharedPreferencesBackupHelper.java b/core/java/android/app/backup/SharedPreferencesBackupHelper.java
index 213bd31..939616b 100644
--- a/core/java/android/app/backup/SharedPreferencesBackupHelper.java
+++ b/core/java/android/app/backup/SharedPreferencesBackupHelper.java
@@ -18,7 +18,6 @@
 
 import android.app.QueuedWork;
 import android.content.Context;
-import android.content.SharedPreferences;
 import android.os.ParcelFileDescriptor;
 import android.util.Log;
 
diff --git a/core/java/android/app/maintenance/IIdleCallback.aidl b/core/java/android/app/maintenance/IIdleCallback.aidl
new file mode 100644
index 0000000..582dede
--- /dev/null
+++ b/core/java/android/app/maintenance/IIdleCallback.aidl
@@ -0,0 +1,53 @@
+/**
+ * Copyright 2014, 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 android.app.maintenance;
+
+import android.app.maintenance.IIdleService;
+
+/**
+ * The server side of the idle maintenance IPC protocols.  The app-side implementation
+ * invokes on this interface to indicate completion of the (asynchronous) instructions
+ * issued by the server.
+ *
+ * In all cases, the 'who' parameter is the caller's service binder, used to track
+ * which idle service instance is reporting.
+ *
+ * {@hide}
+ */
+interface IIdleCallback {
+    /**
+     * Acknowledge receipt and processing of the asynchronous "start idle work" incall.
+     * 'result' is true if the app wants some time to perform ongoing background
+     * idle-time work; or false if the app declares that it does not need any time
+     * for such work.
+     */
+    void acknowledgeStart(int token, boolean result);
+
+    /**
+     * Acknowledge receipt and processing of the asynchronous "stop idle work" incall.
+     */
+    void acknowledgeStop(int token);
+
+    /*
+     * Tell the idle service manager that we're done with our idle maintenance, so that
+     * it can go on to the next one and stop attributing wakelock time to us etc.
+     *
+     * @param opToken The identifier passed in the startIdleMaintenance() call that
+     *        indicated the beginning of this service's idle timeslice.
+     */
+    void idleFinished(int token);
+}
diff --git a/core/java/android/app/maintenance/IIdleService.aidl b/core/java/android/app/maintenance/IIdleService.aidl
new file mode 100644
index 0000000..54abccd
--- /dev/null
+++ b/core/java/android/app/maintenance/IIdleService.aidl
@@ -0,0 +1,34 @@
+/**
+ * Copyright 2014, 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 android.app.maintenance;
+
+import android.app.maintenance.IIdleCallback;
+
+/**
+ * Interface that the framework uses to communicate with application code
+ * that implements an idle-time "maintenance" service.  End user code does
+ * not implement this interface directly; instead, the app's idle service
+ * implementation will extend android.app.maintenance.IdleService.
+ * {@hide}
+ */
+oneway interface IIdleService {
+    /**
+     * Begin your idle-time work.
+     */
+    void startIdleMaintenance(IIdleCallback callbackBinder, int token);
+    void stopIdleMaintenance(IIdleCallback callbackBinder, int token);
+}
diff --git a/core/java/android/app/maintenance/IdleService.java b/core/java/android/app/maintenance/IdleService.java
new file mode 100644
index 0000000..2331b81
--- /dev/null
+++ b/core/java/android/app/maintenance/IdleService.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2014 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 android.app.maintenance;
+
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
+import android.app.Service;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Log;
+import android.util.Slog;
+
+/**
+ * Idle maintenance API.  Full docs TBW (to be written).
+ */
+public abstract class IdleService extends Service {
+    private static final String TAG = "IdleService";
+
+    static final int MSG_START = 1;
+    static final int MSG_STOP = 2;
+    static final int MSG_FINISH = 3;
+
+    IdleHandler mHandler;
+    IIdleCallback mCallbackBinder;
+    int mToken;
+    final Object mHandlerLock = new Object();
+
+    void ensureHandler() {
+        synchronized (mHandlerLock) {
+            if (mHandler == null) {
+                mHandler = new IdleHandler(getMainLooper());
+            }
+        }
+    }
+
+    /**
+     * TBW: the idle service should supply an intent-filter handling this intent
+     * <p>
+     * <p class="note">The application must also protect the idle service with the
+     * {@code "android.permission.BIND_IDLE_SERVICE"} permission to ensure that other
+     * applications cannot maliciously bind to it.  If an idle service's manifest
+     * declaration does not require that permission, it will never be invoked.
+     * </p>
+     */
+    @SdkConstant(SdkConstantType.SERVICE_ACTION)
+    public static final String SERVICE_INTERFACE =
+            "android.service.idle.IdleService";
+
+    /**
+     * Idle services must be protected with this permission:
+     *
+     * <pre class="prettyprint">
+     *     <service android:name="MyIdleService"
+     *              android:permission="android.permission.BIND_IDLE_SERVICE" >
+     *         ...
+     *     </service>
+     * </pre>
+     *
+     * <p>If an idle service is declared in the manifest but not protected with this
+     * permission, that service will be ignored by the OS.
+     */
+    public static final String PERMISSION_BIND =
+            "android.permission.BIND_IDLE_SERVICE";
+
+    // Trampoline: the callbacks are always run on the main thread
+    IIdleService mBinder = new IIdleService.Stub() {
+        @Override
+        public void startIdleMaintenance(IIdleCallback callbackBinder, int token)
+                throws RemoteException {
+            ensureHandler();
+            Message msg = mHandler.obtainMessage(MSG_START, token, 0, callbackBinder);
+            mHandler.sendMessage(msg);
+        }
+
+        @Override
+        public void stopIdleMaintenance(IIdleCallback callbackBinder, int token)
+                throws RemoteException {
+            ensureHandler();
+            Message msg = mHandler.obtainMessage(MSG_STOP, token, 0, callbackBinder);
+            mHandler.sendMessage(msg);
+        }
+    };
+
+    /**
+     * Your application may begin doing "idle" maintenance work in the background.
+     * <p>
+     * Your application may continue to run in the background until it receives a call
+     * to {@link #onIdleStop()}, at which point you <i>must</i> cease doing work.  The
+     * OS will hold a wakelock on your application's behalf from the time this method is
+     * called until after the following call to {@link #onIdleStop()} returns.
+     * </p>
+     * <p>
+     * Returning {@code false} from this method indicates that you have no ongoing work
+     * to do at present.  The OS will respond by immediately calling {@link #onIdleStop()}
+     * and returning your application to its normal stopped state.  Returning {@code true}
+     * indicates that the application is indeed performing ongoing work, so the OS will
+     * let your application run in this state until it's no longer appropriate.
+     * </p>
+     * <p>
+     * You will always receive a matching call to {@link #onIdleStop()} even if your
+     * application returns {@code false} from this method.
+     *
+     * @return {@code true} to indicate that the application wishes to perform some ongoing
+     *     background work; {@code false} to indicate that it does not need to perform such
+     *     work at present.
+     */
+    public abstract boolean onIdleStart();
+
+    /**
+     * Your app's maintenance opportunity is over.  Once the application returns from
+     * this method, the wakelock held by the OS on its behalf will be released.
+     */
+    public abstract void onIdleStop();
+
+    /**
+     * Tell the OS that you have finished your idle work.  Calling this more than once,
+     * or calling it when you have not received an {@link #onIdleStart()} callback, is
+     * an error.
+     *
+     * <p>It is safe to call {@link #finishIdle()} from any thread.
+     */
+    public final void finishIdle() {
+        ensureHandler();
+        mHandler.sendEmptyMessage(MSG_FINISH);
+    }
+
+    class IdleHandler extends Handler {
+        IdleHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_START: {
+                    // Call the concrete onIdleStart(), reporting its return value back to
+                    // the OS.  If onIdleStart() throws, report it as a 'false' return but
+                    // rethrow the exception at the offending app.
+                    boolean result = false;
+                    IIdleCallback callbackBinder = (IIdleCallback) msg.obj;
+                    mCallbackBinder = callbackBinder;
+                    final int token = mToken = msg.arg1;
+                    try {
+                        result = IdleService.this.onIdleStart();
+                    } catch (Exception e) {
+                        Log.e(TAG, "Unable to start idle workload", e);
+                        throw new RuntimeException(e);
+                    } finally {
+                        // don't bother if the service already called finishIdle()
+                        if (mCallbackBinder != null) {
+                            try {
+                                callbackBinder.acknowledgeStart(token, result);
+                            } catch (RemoteException re) {
+                                Log.e(TAG, "System unreachable to start idle workload");
+                            }
+                        }
+                    }
+                    break;
+                }
+
+                case MSG_STOP: {
+                    // Structured just like MSG_START for the stop-idle bookend call.
+                    IIdleCallback callbackBinder = (IIdleCallback) msg.obj;
+                    final int token = msg.arg1;
+                    try {
+                        IdleService.this.onIdleStop();
+                    } catch (Exception e) {
+                        Log.e(TAG, "Unable to stop idle workload", e);
+                        throw new RuntimeException(e);
+                    } finally {
+                        if (mCallbackBinder != null) {
+                            try {
+                                callbackBinder.acknowledgeStop(token);
+                            } catch (RemoteException re) {
+                                Log.e(TAG, "System unreachable to stop idle workload");
+                            }
+                        }
+                    }
+                    break;
+                }
+
+                case MSG_FINISH: {
+                    if (mCallbackBinder != null) {
+                        try {
+                            mCallbackBinder.idleFinished(mToken);
+                        } catch (RemoteException e) {
+                            Log.e(TAG, "System unreachable to finish idling");
+                        } finally {
+                            mCallbackBinder = null;
+                        }
+                    } else {
+                        Log.e(TAG, "finishIdle() called but the idle service is not started");
+                    }
+                    break;
+                }
+
+                default: {
+                    Slog.w(TAG, "Unknown message " + msg.what);
+                }
+            }
+        }
+    }
+
+    /** @hide */
+    @Override
+    public final IBinder onBind(Intent intent) {
+        return mBinder.asBinder();
+    }
+
+}
diff --git a/core/java/android/app/task/ITaskCallback.aidl b/core/java/android/app/task/ITaskCallback.aidl
new file mode 100644
index 0000000..ffa57d1
--- /dev/null
+++ b/core/java/android/app/task/ITaskCallback.aidl
@@ -0,0 +1,53 @@
+/**
+ * Copyright 2014, 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 android.app.task;
+
+import android.app.task.ITaskService;
+import android.app.task.TaskParams;
+
+/**
+ * The server side of the TaskManager IPC protocols.  The app-side implementation
+ * invokes on this interface to indicate completion of the (asynchronous) instructions
+ * issued by the server.
+ *
+ * In all cases, the 'who' parameter is the caller's service binder, used to track
+ * which Task Service instance is reporting.
+ *
+ * {@hide}
+ */
+interface ITaskCallback {
+    /**
+     * Immediate callback to the system after sending a start signal, used to quickly detect ANR.
+     *
+     * @param taskId Unique integer used to identify this task.
+     */
+    void acknowledgeStartMessage(int taskId);
+    /**
+     * Immediate callback to the system after sending a stop signal, used to quickly detect ANR.
+     *
+     * @param taskId Unique integer used to identify this task.
+     */
+    void acknowledgeStopMessage(int taskId);
+    /*
+     * Tell the task manager that the client is done with its execution, so that it can go on to
+     * the next one and stop attributing wakelock time to us etc.
+     *
+     * @param taskId Unique integer used to identify this task.
+     * @param reschedule Whether or not to reschedule this task.
+     */
+    void taskFinished(int taskId, boolean reschedule);
+}
diff --git a/core/java/android/app/task/ITaskService.aidl b/core/java/android/app/task/ITaskService.aidl
new file mode 100644
index 0000000..87b0191
--- /dev/null
+++ b/core/java/android/app/task/ITaskService.aidl
@@ -0,0 +1,35 @@
+/**
+ * Copyright 2014, 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 android.app.task;
+
+import android.app.task.ITaskCallback;
+import android.app.task.TaskParams;
+
+import android.os.Bundle;
+
+/**
+ * Interface that the framework uses to communicate with application code that implements a
+ * TaskService.  End user code does not implement this interface directly; instead, the app's
+ * service implementation will extend android.app.task.TaskService.
+ * {@hide}
+ */
+oneway interface ITaskService {
+    /** Begin execution of application's task. */
+    void startTask(in TaskParams taskParams);
+    /** Stop execution of application's task. */
+    void stopTask(in TaskParams taskParams);
+}
diff --git a/core/java/android/app/task/TaskParams.aidl b/core/java/android/app/task/TaskParams.aidl
new file mode 100644
index 0000000..9b25855
--- /dev/null
+++ b/core/java/android/app/task/TaskParams.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright 2014, 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 android.app.task;
+
+parcelable TaskParams;
\ No newline at end of file
diff --git a/core/java/android/app/task/TaskParams.java b/core/java/android/app/task/TaskParams.java
new file mode 100644
index 0000000..e2eafd8
--- /dev/null
+++ b/core/java/android/app/task/TaskParams.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2014 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 android.app.task;
+
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Contains the parameters used to configure/identify your task. You do not create this object
+ * yourself, instead it is handed in to your application by the System.
+ */
+public class TaskParams implements Parcelable {
+
+    private final int taskId;
+    private final Bundle extras;
+    private final IBinder mCallback;
+
+    /**
+     * @return The unique id of this task, specified at creation time.
+     */
+    public int getTaskId() {
+        return taskId;
+    }
+
+    /**
+     * @return The extras you passed in when constructing this task with
+     * {@link android.content.Task.Builder#setExtras(android.os.Bundle)}. This will
+     * never be null. If you did not set any extras this will be an empty bundle.
+     */
+    public Bundle getExtras() {
+        return extras;
+    }
+
+    /**
+     * @hide
+     */
+    public ITaskCallback getCallback() {
+        return ITaskCallback.Stub.asInterface(mCallback);
+    }
+
+    private TaskParams(Parcel in) {
+        taskId = in.readInt();
+        extras = in.readBundle();
+        mCallback = in.readStrongBinder();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(taskId);
+        dest.writeBundle(extras);
+        dest.writeStrongBinder(mCallback);
+    }
+
+    public static final Creator<TaskParams> CREATOR = new Creator<TaskParams>() {
+        @Override
+        public TaskParams createFromParcel(Parcel in) {
+            return new TaskParams(in);
+        }
+
+        @Override
+        public TaskParams[] newArray(int size) {
+            return new TaskParams[size];
+        }
+    };
+}
diff --git a/core/java/android/app/task/TaskService.java b/core/java/android/app/task/TaskService.java
new file mode 100644
index 0000000..81333be
--- /dev/null
+++ b/core/java/android/app/task/TaskService.java
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2014 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 android.app.task;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.internal.annotations.GuardedBy;
+
+/**
+ * <p>Entry point for the callback from the {@link android.content.TaskManager}.</p>
+ * <p>This is the base class that handles asynchronous requests that were previously scheduled. You
+ * are responsible for overriding {@link TaskService#onStartTask(TaskParams)}, which is where
+ * you will implement your task logic.</p>
+ * <p>This service executes each incoming task on a {@link android.os.Handler} running on your
+ * application's main thread. This means that you <b>must</b> offload your execution logic to
+ * another thread/handler/{@link android.os.AsyncTask} of your choosing. Not doing so will result
+ * in blocking any future callbacks from the TaskManager - specifically
+ * {@link #onStopTask(android.app.task.TaskParams)}, which is meant to inform you that the
+ * scheduling requirements are no longer being met.</p>
+ */
+public abstract class TaskService extends Service {
+    private static final String TAG = "TaskService";
+
+    /**
+     * Task services must be protected with this permission:
+     *
+     * <pre class="prettyprint">
+     *     <service android:name="MyTaskService"
+     *              android:permission="android.permission.BIND_TASK_SERVICE" >
+     *         ...
+     *     </service>
+     * </pre>
+     *
+     * <p>If a task service is declared in the manifest but not protected with this
+     * permission, that service will be ignored by the OS.
+     */
+    public static final String PERMISSION_BIND =
+            "android.permission.BIND_TASK_SERVICE";
+
+    /**
+     * Identifier for a message that will result in a call to
+     * {@link #onStartTask(android.app.task.TaskParams)}.
+     */
+    private final int MSG_EXECUTE_TASK = 0;
+    /**
+     * Message that will result in a call to {@link #onStopTask(android.app.task.TaskParams)}.
+     */
+    private final int MSG_STOP_TASK = 1;
+    /**
+     * Message that the client has completed execution of this task.
+     */
+    private final int MSG_TASK_FINISHED = 2;
+
+    /** Lock object for {@link #mHandler}. */
+    private final Object mHandlerLock = new Object();
+
+    /**
+     * Handler we post tasks to. Responsible for calling into the client logic, and handling the
+     * callback to the system.
+     */
+    @GuardedBy("mHandlerLock")
+    TaskHandler mHandler;
+
+    /** Binder for this service. */
+    ITaskService mBinder = new ITaskService.Stub() {
+        @Override
+        public void startTask(TaskParams taskParams) {
+            ensureHandler();
+            Message m = Message.obtain(mHandler, MSG_EXECUTE_TASK, taskParams);
+            m.sendToTarget();
+        }
+        @Override
+        public void stopTask(TaskParams taskParams) {
+            ensureHandler();
+            Message m = Message.obtain(mHandler, MSG_STOP_TASK, taskParams);
+            m.sendToTarget();
+        }
+    };
+
+    /** @hide */
+    void ensureHandler() {
+        synchronized (mHandlerLock) {
+            if (mHandler == null) {
+                mHandler = new TaskHandler(getMainLooper());
+            }
+        }
+    }
+
+    /**
+     * Runs on application's main thread - callbacks are meant to offboard work to some other
+     * (app-specified) mechanism.
+     * @hide
+     */
+    class TaskHandler extends Handler {
+        TaskHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            final TaskParams params = (TaskParams) msg.obj;
+            switch (msg.what) {
+                case MSG_EXECUTE_TASK:
+                    try {
+                        TaskService.this.onStartTask(params);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Error while executing task: " + params.getTaskId());
+                        throw new RuntimeException(e);
+                    } finally {
+                        maybeAckMessageReceived(params, MSG_EXECUTE_TASK);
+                    }
+                    break;
+                case MSG_STOP_TASK:
+                    try {
+                        TaskService.this.onStopTask(params);
+                    } catch (Exception e) {
+                        Log.e(TAG, "Application unable to handle onStopTask.", e);
+                        throw new RuntimeException(e);
+                    } finally {
+                        maybeAckMessageReceived(params, MSG_STOP_TASK);
+                    }
+                    break;
+                case MSG_TASK_FINISHED:
+                    final boolean needsReschedule = (msg.arg2 == 1);
+                    ITaskCallback callback = params.getCallback();
+                    if (callback != null) {
+                        try {
+                            callback.taskFinished(params.getTaskId(), needsReschedule);
+                        } catch (RemoteException e) {
+                            Log.e(TAG, "Error reporting task finish to system: binder has gone" +
+                                    "away.");
+                        }
+                    } else {
+                        Log.e(TAG, "finishTask() called for a nonexistent task id.");
+                    }
+                    break;
+                default:
+                    Log.e(TAG, "Unrecognised message received.");
+                    break;
+            }
+        }
+
+        /**
+         * Messages come in on the application's main thread, so rather than run the risk of
+         * waiting for an app that may be doing something foolhardy, we ack to the system after
+         * processing a message. This allows us to throw up an ANR dialogue as quickly as possible.
+         * @param params id of the task we're acking.
+         * @param state Information about what message we're acking.
+         */
+        private void maybeAckMessageReceived(TaskParams params, int state) {
+            final ITaskCallback callback = params.getCallback();
+            final int taskId = params.getTaskId();
+            if (callback != null) {
+                try {
+                    if (state == MSG_EXECUTE_TASK) {
+                        callback.acknowledgeStartMessage(taskId);
+                    } else if (state == MSG_STOP_TASK) {
+                        callback.acknowledgeStopMessage(taskId);
+                    }
+                } catch(RemoteException e) {
+                    Log.e(TAG, "System unreachable for starting task.");
+                }
+            } else {
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, state + ": Attempting to ack a task that has already been" +
+                            "processed.");
+                }
+            }
+        }
+    }
+
+    /** @hide */
+    public final IBinder onBind(Intent intent) {
+        return mBinder.asBinder();
+    }
+
+    /**
+     * Override this method with the callback logic for your task. Any such logic needs to be
+     * performed on a separate thread, as this function is executed on your application's main
+     * thread.
+     *
+     * @param params Parameters specifying info about this task, including the extras bundle you
+     *               optionally provided at task-creation time.
+     */
+    public abstract void onStartTask(TaskParams params);
+
+    /**
+     * This method is called if your task should be stopped even before you've called
+     * {@link #taskFinished(TaskParams, boolean)}.
+     *
+     * <p>This will happen if the requirements specified at schedule time are no longer met. For
+     * example you may have requested WiFi with
+     * {@link android.content.Task.Builder#setRequiredNetworkCapabilities(int)}, yet while your
+     * task was executing the user toggled WiFi. Another example is if you had specified
+     * {@link android.content.Task.Builder#setRequiresDeviceIdle(boolean)}, and the phone left its
+     * idle maintenance window. You are solely responsible for the behaviour of your application
+     * upon receipt of this message; your app will likely start to misbehave if you ignore it. One
+     * repercussion is that the system will cease to hold a wakelock for you.</p>
+     *
+     * <p>After you've done your clean-up you are still expected to call
+     * {@link #taskFinished(TaskParams, boolean)} this will inform the TaskManager that all is well, and
+     * allow you to reschedule your task as it is probably uncompleted. Until you call
+     * taskFinished() you will not receive any newly scheduled tasks with the given task id as the
+     * TaskManager will consider the task to be in an error state.</p>
+     *
+     * @param params Parameters specifying info about this task.
+     * @return True to indicate to the TaskManager whether you'd like to reschedule this task based
+     * on the criteria provided at task creation-time. False to drop the task. Regardless of the
+     * value returned, your task must stop executing.
+     */
+    public abstract boolean onStopTask(TaskParams params);
+
+    /**
+     * Callback to inform the TaskManager you have completed execution. This can be called from any
+     * thread, as it will ultimately be run on your application's main thread. When the system
+     * receives this message it will release the wakelock being held.
+     * <p>
+     *     You can specify post-execution behaviour to the scheduler here with <code>needsReschedule
+     *     </code>. This will apply a back-off timer to your task based on the default, or what was
+     *     set with {@link android.content.Task.Builder#setBackoffCriteria(long, int)}. The
+     *     original requirements are always honoured even for a backed-off task.
+     *     Note that a task running in idle mode will not be backed-off. Instead what will happen
+     *     is the task will be re-added to the queue and re-executed within a future idle
+     *     maintenance window.
+     * </p>
+     *
+     * @param params Parameters specifying system-provided info about this task, this was given to
+     *               your application in {@link #onStartTask(TaskParams)}.
+     * @param needsReschedule True if this task is complete, false if you want the TaskManager to
+     *                        reschedule you.
+     */
+    public final void taskFinished(TaskParams params, boolean needsReschedule) {
+        ensureHandler();
+        Message m = Message.obtain(mHandler, MSG_TASK_FINISHED, params);
+        m.arg2 = needsReschedule ? 1 : 0;
+        m.sendToTarget();
+    }
+}
\ No newline at end of file
diff --git a/core/java/android/app/trust/ITrustListener.aidl b/core/java/android/app/trust/ITrustListener.aidl
new file mode 100644
index 0000000..4680043
--- /dev/null
+++ b/core/java/android/app/trust/ITrustListener.aidl
@@ -0,0 +1,26 @@
+/*
+**
+** Copyright 2014, 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 android.app.trust;
+
+/**
+ * Private API to be notified about trust changes.
+ *
+ * {@hide}
+ */
+oneway interface ITrustListener {
+    void onTrustChanged(boolean enabled, int userId);
+}
\ No newline at end of file
diff --git a/core/java/android/app/trust/ITrustManager.aidl b/core/java/android/app/trust/ITrustManager.aidl
new file mode 100644
index 0000000..ad4ccbb
--- /dev/null
+++ b/core/java/android/app/trust/ITrustManager.aidl
@@ -0,0 +1,31 @@
+/*
+**
+** Copyright 2014, 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 android.app.trust;
+
+import android.app.trust.ITrustListener;
+
+/**
+ * System private API to comunicate with trust service.
+ *
+ * {@hide}
+ */
+interface ITrustManager {
+    void reportUnlockAttempt(boolean successful, int userId);
+    void reportEnabledTrustAgentsChanged(int userId);
+    void registerTrustListener(in ITrustListener trustListener);
+    void unregisterTrustListener(in ITrustListener trustListener);
+}
diff --git a/core/java/android/app/trust/TrustManager.java b/core/java/android/app/trust/TrustManager.java
new file mode 100644
index 0000000..e31c624
--- /dev/null
+++ b/core/java/android/app/trust/TrustManager.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2014 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 android.app.trust;
+
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.ArrayMap;
+import android.util.Log;
+
+/**
+ * See {@link com.android.server.trust.TrustManagerService}
+ * @hide
+ */
+public class TrustManager {
+
+    private static final int MSG_TRUST_CHANGED = 1;
+
+    private static final String TAG = "TrustManager";
+
+    private final ITrustManager mService;
+    private final ArrayMap<TrustListener, ITrustListener> mTrustListeners;
+
+    public TrustManager(IBinder b) {
+        mService = ITrustManager.Stub.asInterface(b);
+        mTrustListeners = new ArrayMap<TrustListener, ITrustListener>();
+    }
+
+    /**
+     * Reports that user {@param userId} has tried to unlock the device.
+     *
+     * @param successful if true, the unlock attempt was successful.
+     *
+     * Requires the {@link android.Manifest.permission#ACCESS_KEYGUARD_SECURE_STORAGE} permission.
+     */
+    public void reportUnlockAttempt(boolean successful, int userId) {
+        try {
+            mService.reportUnlockAttempt(successful, userId);
+        } catch (RemoteException e) {
+            onError(e);
+        }
+    }
+
+    /**
+     * Reports that the list of enabled trust agents changed for user {@param userId}.
+     *
+     * Requires the {@link android.Manifest.permission#ACCESS_KEYGUARD_SECURE_STORAGE} permission.
+     */
+    public void reportEnabledTrustAgentsChanged(int userId) {
+        try {
+            mService.reportEnabledTrustAgentsChanged(userId);
+        } catch (RemoteException e) {
+            onError(e);
+        }
+    }
+
+    /**
+     * Registers a listener for trust events.
+     *
+     * Requires the {@link android.Manifest.permission#TRUST_LISTENER} permission.
+     */
+    public void registerTrustListener(final TrustListener trustListener) {
+        try {
+            ITrustListener.Stub iTrustListener = new ITrustListener.Stub() {
+                @Override
+                public void onTrustChanged(boolean enabled, int userId) throws RemoteException {
+                    mHandler.obtainMessage(MSG_TRUST_CHANGED, (enabled ? 1 : 0), userId,
+                            trustListener).sendToTarget();
+                }
+            };
+            mService.registerTrustListener(iTrustListener);
+            mTrustListeners.put(trustListener, iTrustListener);
+        } catch (RemoteException e) {
+            onError(e);
+        }
+    }
+
+    /**
+     * Unregisters a listener for trust events.
+     *
+     * Requires the {@link android.Manifest.permission#TRUST_LISTENER} permission.
+     */
+    public void unregisterTrustListener(final TrustListener trustListener) {
+        ITrustListener iTrustListener = mTrustListeners.remove(trustListener);
+        if (iTrustListener != null) {
+            try {
+                mService.unregisterTrustListener(iTrustListener);
+            } catch (RemoteException e) {
+                onError(e);
+            }
+        }
+    }
+
+    private void onError(Exception e) {
+        Log.e(TAG, "Error while calling TrustManagerService", e);
+    }
+
+    private final Handler mHandler = new Handler(Looper.getMainLooper()) {
+        @Override
+        public void handleMessage(Message msg) {
+            switch(msg.what) {
+                case MSG_TRUST_CHANGED:
+                    ((TrustListener)msg.obj).onTrustChanged(msg.arg1 != 0, msg.arg2);
+                    break;
+            }
+        }
+    };
+
+    public interface TrustListener {
+
+        /**
+         * Reports that the trust state has changed.
+         * @param enabled if true, the system believes the environment to be trusted.
+         * @param userId the user, for which the trust changed.
+         */
+        void onTrustChanged(boolean enabled, int userId);
+    }
+}
diff --git a/core/java/android/appwidget/AppWidgetHost.java b/core/java/android/appwidget/AppWidgetHost.java
index f104d71..84d3835 100644
--- a/core/java/android/appwidget/AppWidgetHost.java
+++ b/core/java/android/appwidget/AppWidgetHost.java
@@ -19,7 +19,6 @@
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import android.app.ActivityThread;
 import android.content.Context;
 import android.os.Binder;
 import android.os.Handler;
@@ -31,7 +30,6 @@
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.util.TypedValue;
 import android.widget.RemoteViews;
 import android.widget.RemoteViews.OnClickHandler;
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index d1c7bec..dd3a871 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -16,7 +16,6 @@
 
 package android.appwidget;
 
-import android.app.ActivityManagerNative;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -215,6 +214,12 @@
     public static final String EXTRA_CUSTOM_INFO = "customInfo";
 
     /**
+     * An intent extra attached to the {@link #ACTION_APPWIDGET_HOST_RESTORED} broadcast,
+     * indicating the integer ID of the host whose widgets have just been restored.
+     */
+    public static final String EXTRA_HOST_ID = "hostId";
+
+    /**
      * An intent extra to pass to the AppWidget picker containing a {@link java.util.List} of
      * {@link android.os.Bundle} objects to mix in to the list of AppWidgets that are
      * installed.  It will be added to the extras object on the {@link android.content.Intent}
@@ -311,6 +316,86 @@
     public static final String ACTION_APPWIDGET_ENABLED = "android.appwidget.action.APPWIDGET_ENABLED";
 
     /**
+     * Sent to providers after AppWidget state related to the provider has been restored from
+     * backup. The intent contains information about how to translate AppWidget ids from the
+     * restored data to their new equivalents.
+     *
+     * <p>The intent will contain the following extras:
+     *
+     * <table>
+     *   <tr>
+     *     <td>{@link #EXTRA_APPWIDGET_OLD_IDS}</td>
+     *     <td>The set of appWidgetIds represented in a restored backup that have been successfully
+     *     incorporated into the current environment.  This may be all of the AppWidgets known
+     *     to this application, or just a subset.  Each entry in this array of appWidgetIds has
+     *     a corresponding entry in the {@link #EXTRA_APPWIDGET_IDS} extra.</td>
+     *  </tr>
+     *   <tr>
+     *     <td>{@link #EXTRA_APPWIDGET_IDS}</td>
+     *     <td>The set of appWidgetIds now valid for this application.  The app should look at
+     *     its restored widget configuration and translate each appWidgetId in the
+     *     {@link #EXTRA_APPWIDGET_OLD_IDS} array to its new value found at the corresponding
+     *     index within this array.</td>
+     *  </tr>
+     * </table>
+     *
+     * <p class="note">This is a protected intent that can only be sent
+     * by the system.
+     *
+     * @see {@link #ACTION_APPWIDGET_HOST_RESTORED} for the corresponding host broadcast
+     */
+    public static final String ACTION_APPWIDGET_RESTORED
+            = "android.appwidget.action.APPWIDGET_RESTORED";
+
+    /**
+     * Sent to widget hosts after AppWidget state related to the host has been restored from
+     * backup. The intent contains information about how to translate AppWidget ids from the
+     * restored data to their new equivalents.  If an application maintains multiple separate
+     * widget hosts instances, it will receive this broadcast separately for each one.
+     *
+     * <p>The intent will contain the following extras:
+     *
+     * <table>
+     *   <tr>
+     *     <td>{@link #EXTRA_APPWIDGET_OLD_IDS}</td>
+     *     <td>The set of appWidgetIds represented in a restored backup that have been successfully
+     *     incorporated into the current environment.  This may be all of the AppWidgets known
+     *     to this application, or just a subset.  Each entry in this array of appWidgetIds has
+     *     a corresponding entry in the {@link #EXTRA_APPWIDGET_IDS} extra.</td>
+     *  </tr>
+     *   <tr>
+     *     <td>{@link #EXTRA_APPWIDGET_IDS}</td>
+     *     <td>The set of appWidgetIds now valid for this application.  The app should look at
+     *     its restored widget configuration and translate each appWidgetId in the
+     *     {@link #EXTRA_APPWIDGET_OLD_IDS} array to its new value found at the corresponding
+     *     index within this array.</td>
+     *  </tr>
+     *  <tr>
+     *     <td>{@link #EXTRA_HOST_ID}</td>
+     *     <td>The integer ID of the widget host instance whose state has just been restored.</td>
+     *  </tr>
+     * </table>
+     *
+     * <p class="note">This is a protected intent that can only be sent
+     * by the system.
+     *
+     * @see {@link #ACTION_APPWIDGET_RESTORED} for the corresponding provider broadcast
+     */
+    public static final String ACTION_APPWIDGET_HOST_RESTORED
+            = "android.appwidget.action.APPWIDGET_HOST_RESTORED";
+
+    /**
+     * An intent extra that contains multiple appWidgetIds.  These are id values as
+     * they were provided to the application during a recent restore from backup.  It is
+     * attached to the {@link #ACTION_APPWIDGET_RESTORED} broadcast intent.
+     *
+     * <p>
+     * The value will be an int array that can be retrieved like this:
+     * {@sample frameworks/base/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/TestAppWidgetProvider.java getExtra_EXTRA_APPWIDGET_IDS}
+     */
+    public static final String EXTRA_APPWIDGET_OLD_IDS = "appWidgetOldIds";
+
+    /**
      * Field for the manifest meta-data tag.
      *
      * @see AppWidgetProviderInfo
diff --git a/core/java/android/appwidget/AppWidgetProvider.java b/core/java/android/appwidget/AppWidgetProvider.java
index edf142b..ab91edf 100644
--- a/core/java/android/appwidget/AppWidgetProvider.java
+++ b/core/java/android/appwidget/AppWidgetProvider.java
@@ -66,15 +66,13 @@
                     this.onUpdate(context, AppWidgetManager.getInstance(context), appWidgetIds);
                 }
             }
-        }
-        else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
+        } else if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
             Bundle extras = intent.getExtras();
             if (extras != null && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID)) {
                 final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
                 this.onDeleted(context, new int[] { appWidgetId });
             }
-        }
-        else if (AppWidgetManager.ACTION_APPWIDGET_OPTIONS_CHANGED.equals(action)) {
+        } else if (AppWidgetManager.ACTION_APPWIDGET_OPTIONS_CHANGED.equals(action)) {
             Bundle extras = intent.getExtras();
             if (extras != null && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_ID)
                     && extras.containsKey(AppWidgetManager.EXTRA_APPWIDGET_OPTIONS)) {
@@ -83,19 +81,28 @@
                 this.onAppWidgetOptionsChanged(context, AppWidgetManager.getInstance(context),
                         appWidgetId, widgetExtras);
             }
-        }
-        else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) {
+        } else if (AppWidgetManager.ACTION_APPWIDGET_ENABLED.equals(action)) {
             this.onEnabled(context);
-        }
-        else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) {
+        } else if (AppWidgetManager.ACTION_APPWIDGET_DISABLED.equals(action)) {
             this.onDisabled(context);
+        } else if (AppWidgetManager.ACTION_APPWIDGET_RESTORED.equals(action)) {
+            Bundle extras = intent.getExtras();
+            if (extras != null) {
+                int[] oldIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS);
+                int[] newIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);
+                if (oldIds != null && oldIds.length > 0) {
+                    this.onRestored(context, oldIds, newIds);
+                    this.onUpdate(context, AppWidgetManager.getInstance(context), newIds);
+                }
+            }
         }
     }
     // END_INCLUDE(onReceive)
 
     /**
-     * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_UPDATE} broadcast when
-     * this AppWidget provider is being asked to provide {@link android.widget.RemoteViews RemoteViews}
+     * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_UPDATE} and
+     * {@link AppWidgetManager#ACTION_APPWIDGET_RESTORED} broadcasts when this AppWidget
+     * provider is being asked to provide {@link android.widget.RemoteViews RemoteViews}
      * for a set of AppWidgets.  Override this method to implement your own AppWidget functionality.
      *
      * {@more}
@@ -123,8 +130,8 @@
      *                  running.
      * @param appWidgetManager A {@link AppWidgetManager} object you can call {@link
      *                  AppWidgetManager#updateAppWidget} on.
-     * @param appWidgetId The appWidgetId of the widget who's size changed.
-     * @param newOptions The appWidgetId of the widget who's size changed.
+     * @param appWidgetId The appWidgetId of the widget whose size changed.
+     * @param newOptions The appWidgetId of the widget whose size changed.
      *
      * @see AppWidgetManager#ACTION_APPWIDGET_OPTIONS_CHANGED
      */
@@ -181,4 +188,24 @@
      */
     public void onDisabled(Context context) {
     }
+
+    /**
+     * Called in response to the {@link AppWidgetManager#ACTION_APPWIDGET_RESTORED} broadcast
+     * when instances of this AppWidget provider have been restored from backup.  If your
+     * provider maintains any persistent data about its widget instances, override this method
+     * to remap the old AppWidgetIds to the new values and update any other app state that may
+     * be relevant.
+     *
+     * <p>This callback will be followed immediately by a call to {@link #onUpdate} so your
+     * provider can immediately generate new RemoteViews suitable for its newly-restored set
+     * of instances.
+     *
+     * {@more}
+     *
+     * @param context
+     * @param oldWidgetIds
+     * @param newWidgetIds
+     */
+    public void onRestored(Context context, int[] oldWidgetIds, int[] newWidgetIds) {
+    }
 }
diff --git a/core/java/android/appwidget/AppWidgetProviderInfo.java b/core/java/android/appwidget/AppWidgetProviderInfo.java
index 7b8b286..4b33799 100644
--- a/core/java/android/appwidget/AppWidgetProviderInfo.java
+++ b/core/java/android/appwidget/AppWidgetProviderInfo.java
@@ -172,7 +172,7 @@
      * <p>This field corresponds to the <code>android:previewImage</code> attribute in
      * the <code>&lt;receiver&gt;</code> element in the AndroidManifest.xml file.
      */
-	public int previewImage;
+    public int previewImage;
 
     /**
      * The rules by which a widget can be resized. See {@link #RESIZE_NONE},
diff --git a/core/java/android/bluetooth/BluetoothA2dp.java b/core/java/android/bluetooth/BluetoothA2dp.java
index 6f929f2..7b709ac 100644
--- a/core/java/android/bluetooth/BluetoothA2dp.java
+++ b/core/java/android/bluetooth/BluetoothA2dp.java
@@ -162,7 +162,8 @@
         Intent intent = new Intent(IBluetoothA2dp.class.getName());
         ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
         intent.setComponent(comp);
-        if (comp == null || !mContext.bindService(intent, mConnection, 0)) {
+        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
+                android.os.Process.myUserHandle())) {
             Log.e(TAG, "Could not bind to Bluetooth A2DP Service with " + intent);
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 646be06..e79deec 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -19,11 +19,9 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.Context;
-import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
-import android.os.Message;
 import android.os.ParcelUuid;
 import android.os.RemoteException;
 import android.os.ServiceManager;
@@ -39,7 +37,6 @@
 import java.util.HashSet;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Random;
 import java.util.Set;
 import java.util.UUID;
 
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index d789a944..a396a05 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -19,12 +19,10 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.Context;
-import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.ParcelUuid;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.util.Log;
 
 import java.io.IOException;
@@ -947,8 +945,13 @@
       *               was started.
       */
      public boolean fetchUuidsWithSdp() {
+        IBluetooth service = sService;
+        if (service == null) {
+            Log.e(TAG, "BT not enabled. Cannot fetchUuidsWithSdp");
+            return false;
+        }
         try {
-            return sService.fetchRemoteUuids(this);
+            return service.fetchRemoteUuids(this);
         } catch (RemoteException e) {Log.e(TAG, "", e);}
             return false;
     }
diff --git a/core/java/android/bluetooth/BluetoothGatt.java b/core/java/android/bluetooth/BluetoothGatt.java
index e7ab8de..ff3af7c 100644
--- a/core/java/android/bluetooth/BluetoothGatt.java
+++ b/core/java/android/bluetooth/BluetoothGatt.java
@@ -16,20 +16,9 @@
 
 package android.bluetooth;
 
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothProfile.ServiceListener;
-import android.bluetooth.IBluetoothManager;
-import android.bluetooth.IBluetoothStateChangeCallback;
-
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.IBinder;
 import android.os.ParcelUuid;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.util.Log;
 
 import java.util.ArrayList;
diff --git a/core/java/android/bluetooth/BluetoothGattCharacteristic.java b/core/java/android/bluetooth/BluetoothGattCharacteristic.java
index f0ecbb4..a86677c 100644
--- a/core/java/android/bluetooth/BluetoothGattCharacteristic.java
+++ b/core/java/android/bluetooth/BluetoothGattCharacteristic.java
@@ -16,7 +16,6 @@
 package android.bluetooth;
 
 import java.util.ArrayList;
-import java.util.IllegalFormatConversionException;
 import java.util.List;
 import java.util.UUID;
 
diff --git a/core/java/android/bluetooth/BluetoothGattServer.java b/core/java/android/bluetooth/BluetoothGattServer.java
index 153215c..0c00c06 100644
--- a/core/java/android/bluetooth/BluetoothGattServer.java
+++ b/core/java/android/bluetooth/BluetoothGattServer.java
@@ -19,18 +19,9 @@
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothProfile;
-import android.bluetooth.BluetoothProfile.ServiceListener;
-import android.bluetooth.IBluetoothManager;
-import android.bluetooth.IBluetoothStateChangeCallback;
-
-import android.content.ComponentName;
 import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.os.IBinder;
 import android.os.ParcelUuid;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.util.Log;
 
 import java.util.ArrayList;
diff --git a/core/java/android/bluetooth/BluetoothGattServerCallback.java b/core/java/android/bluetooth/BluetoothGattServerCallback.java
index f9f1d97..fc3ffe8 100644
--- a/core/java/android/bluetooth/BluetoothGattServerCallback.java
+++ b/core/java/android/bluetooth/BluetoothGattServerCallback.java
@@ -18,8 +18,6 @@
 
 import android.bluetooth.BluetoothDevice;
 
-import android.util.Log;
-
 /**
  * This abstract class is used to implement {@link BluetoothGattServer} callbacks.
  */
diff --git a/core/java/android/bluetooth/BluetoothHeadset.java b/core/java/android/bluetooth/BluetoothHeadset.java
index 8ee955d..f88a173 100644
--- a/core/java/android/bluetooth/BluetoothHeadset.java
+++ b/core/java/android/bluetooth/BluetoothHeadset.java
@@ -280,7 +280,8 @@
         Intent intent = new Intent(IBluetoothHeadset.class.getName());
         ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
         intent.setComponent(comp);
-        if (comp == null || !mContext.bindService(intent, mConnection, 0)) {
+        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
+                android.os.Process.myUserHandle())) {
             Log.e(TAG, "Could not bind to Bluetooth Headset Service with " + intent);
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothHealth.java b/core/java/android/bluetooth/BluetoothHealth.java
index 2e950fa..4949c24 100644
--- a/core/java/android/bluetooth/BluetoothHealth.java
+++ b/core/java/android/bluetooth/BluetoothHealth.java
@@ -23,7 +23,6 @@
 import android.os.IBinder;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.util.Log;
 
 import java.util.ArrayList;
@@ -488,7 +487,8 @@
         Intent intent = new Intent(IBluetoothHealth.class.getName());
         ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
         intent.setComponent(comp);
-        if (comp == null || !mContext.bindService(intent, mConnection, 0)) {
+        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
+                android.os.Process.myUserHandle())) {
             Log.e(TAG, "Could not bind to Bluetooth Health Service with " + intent);
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothInputDevice.java b/core/java/android/bluetooth/BluetoothInputDevice.java
index c48b15d..554df3e 100644
--- a/core/java/android/bluetooth/BluetoothInputDevice.java
+++ b/core/java/android/bluetooth/BluetoothInputDevice.java
@@ -24,7 +24,6 @@
 import android.content.ServiceConnection;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.util.Log;
 
 import java.util.ArrayList;
@@ -260,7 +259,8 @@
         Intent intent = new Intent(IBluetoothInputDevice.class.getName());
         ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
         intent.setComponent(comp);
-        if (comp == null || !mContext.bindService(intent, mConnection, 0)) {
+        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
+                android.os.Process.myUserHandle())) {
             Log.e(TAG, "Could not bind to Bluetooth HID Service with " + intent);
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothMap.java b/core/java/android/bluetooth/BluetoothMap.java
index 92a2f1e..7f57acf 100644
--- a/core/java/android/bluetooth/BluetoothMap.java
+++ b/core/java/android/bluetooth/BluetoothMap.java
@@ -22,9 +22,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.os.RemoteException;
-import android.os.IBinder;
-import android.os.ServiceManager;
+import android.os.*;
 import android.util.Log;
 
 /**
@@ -106,7 +104,8 @@
         Intent intent = new Intent(IBluetoothMap.class.getName());
         ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
         intent.setComponent(comp);
-        if (comp == null || !mContext.bindService(intent, mConnection, 0)) {
+        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
+                android.os.Process.myUserHandle())) {
             Log.e(TAG, "Could not bind to Bluetooth MAP Service with " + intent);
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothPan.java b/core/java/android/bluetooth/BluetoothPan.java
index b7a37f4..4f81f98 100644
--- a/core/java/android/bluetooth/BluetoothPan.java
+++ b/core/java/android/bluetooth/BluetoothPan.java
@@ -24,7 +24,6 @@
 import android.content.ServiceConnection;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.util.Log;
 
 import java.util.ArrayList;
@@ -146,7 +145,8 @@
         Intent intent = new Intent(IBluetoothPan.class.getName());
         ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
         intent.setComponent(comp);
-        if (comp == null || !mContext.bindService(intent, mConnection, 0)) {
+        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
+                android.os.Process.myUserHandle())) {
             Log.e(TAG, "Could not bind to Bluetooth Pan Service with " + intent);
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothPbap.java b/core/java/android/bluetooth/BluetoothPbap.java
index 7f45652..dc01fc7 100644
--- a/core/java/android/bluetooth/BluetoothPbap.java
+++ b/core/java/android/bluetooth/BluetoothPbap.java
@@ -22,7 +22,6 @@
 import android.content.ServiceConnection;
 import android.os.RemoteException;
 import android.os.IBinder;
-import android.os.ServiceManager;
 import android.util.Log;
 
 /**
@@ -161,7 +160,8 @@
         Intent intent = new Intent(IBluetoothPbap.class.getName());
         ComponentName comp = intent.resolveSystemService(mContext.getPackageManager(), 0);
         intent.setComponent(comp);
-        if (comp == null || !mContext.bindService(intent, mConnection, 0)) {
+        if (comp == null || !mContext.bindServiceAsUser(intent, mConnection, 0,
+                android.os.Process.myUserHandle())) {
             Log.e(TAG, "Could not bind to Bluetooth Pbap Service with " + intent);
             return false;
         }
diff --git a/core/java/android/bluetooth/BluetoothServerSocket.java b/core/java/android/bluetooth/BluetoothServerSocket.java
index 96be8a2..bc56e55 100644
--- a/core/java/android/bluetooth/BluetoothServerSocket.java
+++ b/core/java/android/bluetooth/BluetoothServerSocket.java
@@ -17,7 +17,6 @@
 package android.bluetooth;
 
 import android.os.Handler;
-import android.os.Message;
 import android.os.ParcelUuid;
 
 import java.io.Closeable;
diff --git a/core/java/android/bluetooth/BluetoothSocket.java b/core/java/android/bluetooth/BluetoothSocket.java
index 1e75fc2..f532f7c 100644
--- a/core/java/android/bluetooth/BluetoothSocket.java
+++ b/core/java/android/bluetooth/BluetoothSocket.java
@@ -16,21 +16,16 @@
 
 package android.bluetooth;
 
-import android.os.IBinder;
 import android.os.ParcelUuid;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.util.Log;
 
 import java.io.Closeable;
 import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.util.List;
 import java.util.Locale;
 import java.util.UUID;
 import android.net.LocalSocket;
@@ -462,8 +457,10 @@
                     mSocket.close();
                     mSocket = null;
                 }
-                if(mPfd != null)
-                    mPfd.detachFd();
+                if (mPfd != null) {
+                    mPfd.close();
+                    mPfd = null;
+                }
            }
         }
     }
diff --git a/core/java/android/bluetooth/BluetoothTetheringDataTracker.java b/core/java/android/bluetooth/BluetoothTetheringDataTracker.java
index 7745bb7..6dd551e 100644
--- a/core/java/android/bluetooth/BluetoothTetheringDataTracker.java
+++ b/core/java/android/bluetooth/BluetoothTetheringDataTracker.java
@@ -17,9 +17,6 @@
 package android.bluetooth;
 
 import android.net.BaseNetworkStateTracker;
-import android.os.IBinder;
-import android.os.ServiceManager;
-import android.os.INetworkManagementService;
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.DhcpResults;
@@ -35,11 +32,6 @@
 import android.os.Messenger;
 import android.text.TextUtils;
 import android.util.Log;
-import java.net.InterfaceAddress;
-import android.net.LinkAddress;
-import android.net.RouteInfo;
-import java.net.Inet4Address;
-import android.os.SystemProperties;
 
 import com.android.internal.util.AsyncChannel;
 
@@ -61,9 +53,6 @@
     private static final boolean DBG = true;
     private static final boolean VDBG = true;
 
-    // Event sent to the mBtdtHandler when DHCP fails so we can tear down the network.
-    private static final int EVENT_NETWORK_FAILED = 1;
-
     private AtomicBoolean mTeardownRequested = new AtomicBoolean(false);
     private AtomicBoolean mPrivateDnsRouteSet = new AtomicBoolean(false);
     private AtomicInteger mDefaultGatewayAddr = new AtomicInteger(0);
@@ -146,11 +135,6 @@
     }
 
     @Override
-    public void captivePortalCheckComplete() {
-        // not implemented
-    }
-
-    @Override
     public void captivePortalCheckCompleted(boolean isCaptivePortal) {
         // not implemented
     }
@@ -331,7 +315,6 @@
                     }
                     if (!success) {
                         Log.e(TAG, "DHCP request error:" + NetworkUtils.getDhcpError());
-                        mBtdtHandler.obtainMessage(EVENT_NETWORK_FAILED).sendToTarget();
                         return;
                     }
                     mLinkProperties = dhcpResults.linkProperties;
@@ -424,10 +407,6 @@
                     if (VDBG) Log.d(TAG, "got EVENT_NETWORK_DISCONNECTED, " + linkProperties);
                     mBtdt.stopReverseTether();
                     break;
-                case EVENT_NETWORK_FAILED:
-                    if (VDBG) Log.d(TAG, "got EVENT_NETWORK_FAILED");
-                    mBtdt.teardown();
-                    break;
             }
         }
     }
diff --git a/core/java/android/content/AsyncTaskLoader.java b/core/java/android/content/AsyncTaskLoader.java
index eb7426e..7241e0d 100644
--- a/core/java/android/content/AsyncTaskLoader.java
+++ b/core/java/android/content/AsyncTaskLoader.java
@@ -20,7 +20,7 @@
 import android.os.Handler;
 import android.os.OperationCanceledException;
 import android.os.SystemClock;
-import android.util.Slog;
+import android.util.Log;
 import android.util.TimeUtils;
 
 import java.io.FileDescriptor;
@@ -64,10 +64,10 @@
         /* Runs on a worker thread */
         @Override
         protected D doInBackground(Void... params) {
-            if (DEBUG) Slog.v(TAG, this + " >>> doInBackground");
+            if (DEBUG) Log.v(TAG, this + " >>> doInBackground");
             try {
                 D data = AsyncTaskLoader.this.onLoadInBackground();
-                if (DEBUG) Slog.v(TAG, this + "  <<< doInBackground");
+                if (DEBUG) Log.v(TAG, this + "  <<< doInBackground");
                 return data;
             } catch (OperationCanceledException ex) {
                 if (!isCancelled()) {
@@ -79,7 +79,7 @@
                     // So we treat this case as an unhandled exception.
                     throw ex;
                 }
-                if (DEBUG) Slog.v(TAG, this + "  <<< doInBackground (was canceled)", ex);
+                if (DEBUG) Log.v(TAG, this + "  <<< doInBackground (was canceled)", ex);
                 return null;
             }
         }
@@ -87,7 +87,7 @@
         /* Runs on the UI thread */
         @Override
         protected void onPostExecute(D data) {
-            if (DEBUG) Slog.v(TAG, this + " onPostExecute");
+            if (DEBUG) Log.v(TAG, this + " onPostExecute");
             try {
                 AsyncTaskLoader.this.dispatchOnLoadComplete(this, data);
             } finally {
@@ -98,7 +98,7 @@
         /* Runs on the UI thread */
         @Override
         protected void onCancelled(D data) {
-            if (DEBUG) Slog.v(TAG, this + " onCancelled");
+            if (DEBUG) Log.v(TAG, this + " onCancelled");
             try {
                 AsyncTaskLoader.this.dispatchOnCancelled(this, data);
             } finally {
@@ -162,18 +162,18 @@
         super.onForceLoad();
         cancelLoad();
         mTask = new LoadTask();
-        if (DEBUG) Slog.v(TAG, "Preparing load: mTask=" + mTask);
+        if (DEBUG) Log.v(TAG, "Preparing load: mTask=" + mTask);
         executePendingTask();
     }
 
     @Override
     protected boolean onCancelLoad() {
-        if (DEBUG) Slog.v(TAG, "onCancelLoad: mTask=" + mTask);
+        if (DEBUG) Log.v(TAG, "onCancelLoad: mTask=" + mTask);
         if (mTask != null) {
             if (mCancellingTask != null) {
                 // There was a pending task already waiting for a previous
                 // one being canceled; just drop it.
-                if (DEBUG) Slog.v(TAG,
+                if (DEBUG) Log.v(TAG,
                         "cancelLoad: still waiting for cancelled task; dropping next");
                 if (mTask.waiting) {
                     mTask.waiting = false;
@@ -184,14 +184,14 @@
             } else if (mTask.waiting) {
                 // There is a task, but it is waiting for the time it should
                 // execute.  We can just toss it.
-                if (DEBUG) Slog.v(TAG, "cancelLoad: task is waiting, dropping it");
+                if (DEBUG) Log.v(TAG, "cancelLoad: task is waiting, dropping it");
                 mTask.waiting = false;
                 mHandler.removeCallbacks(mTask);
                 mTask = null;
                 return false;
             } else {
                 boolean cancelled = mTask.cancel(false);
-                if (DEBUG) Slog.v(TAG, "cancelLoad: cancelled=" + cancelled);
+                if (DEBUG) Log.v(TAG, "cancelLoad: cancelled=" + cancelled);
                 if (cancelled) {
                     mCancellingTask = mTask;
                     cancelLoadInBackground();
@@ -223,7 +223,7 @@
                 long now = SystemClock.uptimeMillis();
                 if (now < (mLastLoadCompleteTime+mUpdateThrottle)) {
                     // Not yet time to do another load.
-                    if (DEBUG) Slog.v(TAG, "Waiting until "
+                    if (DEBUG) Log.v(TAG, "Waiting until "
                             + (mLastLoadCompleteTime+mUpdateThrottle)
                             + " to execute: " + mTask);
                     mTask.waiting = true;
@@ -231,7 +231,7 @@
                     return;
                 }
             }
-            if (DEBUG) Slog.v(TAG, "Executing: " + mTask);
+            if (DEBUG) Log.v(TAG, "Executing: " + mTask);
             mTask.executeOnExecutor(mExecutor, (Void[]) null);
         }
     }
@@ -239,11 +239,11 @@
     void dispatchOnCancelled(LoadTask task, D data) {
         onCanceled(data);
         if (mCancellingTask == task) {
-            if (DEBUG) Slog.v(TAG, "Cancelled task is now canceled!");
+            if (DEBUG) Log.v(TAG, "Cancelled task is now canceled!");
             rollbackContentChanged();
             mLastLoadCompleteTime = SystemClock.uptimeMillis();
             mCancellingTask = null;
-            if (DEBUG) Slog.v(TAG, "Delivering cancellation");
+            if (DEBUG) Log.v(TAG, "Delivering cancellation");
             deliverCancellation();
             executePendingTask();
         }
@@ -251,7 +251,7 @@
 
     void dispatchOnLoadComplete(LoadTask task, D data) {
         if (mTask != task) {
-            if (DEBUG) Slog.v(TAG, "Load complete of old task, trying to cancel");
+            if (DEBUG) Log.v(TAG, "Load complete of old task, trying to cancel");
             dispatchOnCancelled(task, data);
         } else {
             if (isAbandoned()) {
@@ -261,7 +261,7 @@
                 commitContentChanged();
                 mLastLoadCompleteTime = SystemClock.uptimeMillis();
                 mTask = null;
-                if (DEBUG) Slog.v(TAG, "Delivering result");
+                if (DEBUG) Log.v(TAG, "Delivering result");
                 deliverResult(data);
             }
         }
diff --git a/core/java/android/content/ClipboardManager.java b/core/java/android/content/ClipboardManager.java
index 73e6fd0..5653cad 100644
--- a/core/java/android/content/ClipboardManager.java
+++ b/core/java/android/content/ClipboardManager.java
@@ -22,8 +22,6 @@
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.ServiceManager;
-import android.os.StrictMode;
-import android.util.Log;
 
 import java.util.ArrayList;
 
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index 2bf4d7d..5b41394 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -141,7 +141,7 @@
     public static final String SYNC_EXTRAS_PRIORITY = "sync_priority";
 
     /** {@hide} Flag to allow sync to occur on metered network. */
-    public static final String SYNC_EXTRAS_DISALLOW_METERED = "disallow_metered";
+    public static final String SYNC_EXTRAS_DISALLOW_METERED = "allow_metered";
 
     /**
      * Set by the SyncManager to request that the SyncAdapter initialize itself for
@@ -192,6 +192,14 @@
      */
     public static final String CURSOR_DIR_BASE_TYPE = "vnd.android.cursor.dir";
 
+    /**
+     * This is the Android platform's generic MIME type to match any MIME
+     * type of the form "{@link #CURSOR_ITEM_BASE_TYPE}/{@code SUB_TYPE}".
+     * {@code SUB_TYPE} is the sub-type of the application-dependent
+     * content, e.g., "audio", "video", "playlist".
+     */
+    public static final String ANY_CURSOR_ITEM_TYPE = "vnd.android.cursor.item/*";
+
     /** @hide */
     public static final int SYNC_ERROR_SYNC_ALREADY_IN_PROGRESS = 1;
     /** @hide */
@@ -368,9 +376,7 @@
     }
 
     /**
-     * <p>
      * Query the given URI, returning a {@link Cursor} over the result set.
-     * </p>
      * <p>
      * For best performance, the caller should follow these guidelines:
      * <ul>
@@ -405,9 +411,8 @@
     }
 
     /**
-     * <p>
-     * Query the given URI, returning a {@link Cursor} over the result set.
-     * </p>
+     * Query the given URI, returning a {@link Cursor} over the result set
+     * with optional support for cancellation.
      * <p>
      * For best performance, the caller should follow these guidelines:
      * <ul>
@@ -1636,7 +1641,7 @@
      *
      * @see #getPersistedUriPermissions()
      */
-    public void takePersistableUriPermission(Uri uri, int modeFlags) {
+    public void takePersistableUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags) {
         try {
             ActivityManagerNative.getDefault().takePersistableUriPermission(uri, modeFlags);
         } catch (RemoteException e) {
@@ -1651,7 +1656,7 @@
      *
      * @see #getPersistedUriPermissions()
      */
-    public void releasePersistableUriPermission(Uri uri, int modeFlags) {
+    public void releasePersistableUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags) {
         try {
             ActivityManagerNative.getDefault().releasePersistableUriPermission(uri, modeFlags);
         } catch (RemoteException e) {
@@ -1751,7 +1756,7 @@
             new SyncRequest.Builder()
                 .setSyncAdapter(account, authority)
                 .setExtras(extras)
-                .syncOnce()
+                .syncOnce()     // Immediate sync.
                 .build();
         requestSync(request);
     }
@@ -1759,9 +1764,6 @@
     /**
      * Register a sync with the SyncManager. These requests are built using the
      * {@link SyncRequest.Builder}.
-     *
-     * @param request The immutable SyncRequest object containing the sync parameters. Use
-     * {@link SyncRequest.Builder} to construct these.
      */
     public static void requestSync(SyncRequest request) {
         try {
@@ -1829,12 +1831,25 @@
      */
     public static void cancelSync(Account account, String authority) {
         try {
-            getContentService().cancelSync(account, authority);
+            getContentService().cancelSync(account, authority, null);
         } catch (RemoteException e) {
         }
     }
 
     /**
+     * Cancel any active or pending syncs that are running on this service.
+     *
+     * @param cname the service for which to cancel all active/pending operations.
+     */
+    public static void cancelSync(ComponentName cname) {
+        try {
+            getContentService().cancelSync(null, null, cname);
+        } catch (RemoteException e) {
+            
+        }
+    }
+
+    /**
      * Get information about the SyncAdapters that are known to the system.
      * @return an array of SyncAdapters that have registered with the system
      */
@@ -1897,12 +1912,13 @@
      * {@link #SYNC_EXTRAS_INITIALIZE}, {@link #SYNC_EXTRAS_FORCE},
      * {@link #SYNC_EXTRAS_EXPEDITED}, {@link #SYNC_EXTRAS_MANUAL} set to true.
      * If any are supplied then an {@link IllegalArgumentException} will be thrown.
-     * <p>As of API level 19 this function introduces a default flexibility of ~4% (up to a maximum
-     * of one hour in the day) into the requested period. Use
-     * {@link SyncRequest.Builder#syncPeriodic(long, long)} to set this flexibility manually.
      *
      * <p>This method requires the caller to hold the permission
      * {@link android.Manifest.permission#WRITE_SYNC_SETTINGS}.
+     * <p>The bundle for a periodic sync can be queried by applications with the correct
+     * permissions using
+     * {@link ContentResolver#getPeriodicSyncs(Account account, String provider)}, so no
+     * sensitive data should be transferred here.
      *
      * @param account the account to specify in the sync
      * @param authority the provider to specify in the sync request
@@ -1932,6 +1948,26 @@
     }
 
     /**
+     * {@hide}
+     * Helper function to throw an <code>IllegalArgumentException</code> if any illegal
+     * extras were set for a periodic sync.
+     *
+     * @param extras bundle to validate.
+     */
+    public static boolean invalidPeriodicExtras(Bundle extras) {
+        if (extras.getBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false)
+                || extras.getBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false)
+                || extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false)
+                || extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false)
+                || extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false)
+                || extras.getBoolean(ContentResolver.SYNC_EXTRAS_FORCE, false)
+                || extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false)) {
+            return true;
+        }
+        return false;
+    }
+
+    /**
      * Remove a periodic sync. Has no affect if account, authority and extras don't match
      * an existing periodic sync.
      * <p>This method requires the caller to hold the permission
@@ -1951,6 +1987,31 @@
     }
 
     /**
+     * Remove the specified sync. This will cancel any pending or active syncs. If the request is
+     * for a periodic sync, this call will remove any future occurrences.
+     * <p>If a periodic sync is specified, the caller must hold the permission
+     * {@link android.Manifest.permission#WRITE_SYNC_SETTINGS}. If this SyncRequest targets a
+     * SyncService adapter,the calling application must be signed with the same certificate as the
+     * adapter.
+     *</p>It is possible to cancel a sync using a SyncRequest object that is not the same object
+     * with which you requested the sync. Do so by building a SyncRequest with the same
+     * service/adapter, frequency, <b>and</b> extras bundle.
+     *
+     * @param request SyncRequest object containing information about sync to cancel.
+     */
+    public static void cancelSync(SyncRequest request) {
+        if (request == null) {
+            throw new IllegalArgumentException("request cannot be null");
+        }
+        try {
+            getContentService().cancelRequest(request);
+        } catch (RemoteException e) {
+            // exception ignored; if this is thrown then it means the runtime is in the midst of
+            // being restarted
+        }
+    }
+
+    /**
      * Get the list of information about the periodic syncs for the given account and authority.
      * <p>This method requires the caller to hold the permission
      * {@link android.Manifest.permission#READ_SYNC_SETTINGS}.
@@ -1961,7 +2022,23 @@
      */
     public static List<PeriodicSync> getPeriodicSyncs(Account account, String authority) {
         try {
-            return getContentService().getPeriodicSyncs(account, authority);
+            return getContentService().getPeriodicSyncs(account, authority, null);
+        } catch (RemoteException e) {
+            throw new RuntimeException("the ContentService should always be reachable", e);
+        }
+    }
+
+    /**
+     * Return periodic syncs associated with the provided component.
+     * <p>The calling application must be signed with the same certificate as the target component,
+     * otherwise this call will fail.
+     */
+    public static List<PeriodicSync> getPeriodicSyncs(ComponentName cname) {
+        if (cname == null) {
+            throw new IllegalArgumentException("Component must not be null");
+        }
+        try {
+            return getContentService().getPeriodicSyncs(null, null, cname);
         } catch (RemoteException e) {
             throw new RuntimeException("the ContentService should always be reachable", e);
         }
@@ -1997,6 +2074,38 @@
     }
 
     /**
+     * Set whether the provided {@link SyncService} is available to process work.
+     * <p>This method requires the caller to hold the permission
+     * {@link android.Manifest.permission#WRITE_SYNC_SETTINGS}.
+     * <p>The calling application must be signed with the same certificate as the target component,
+     * otherwise this call will fail.
+     */
+    public static void setServiceActive(ComponentName cname, boolean active) {
+        try {
+            getContentService().setServiceActive(cname, active);
+        } catch (RemoteException e) {
+            // exception ignored; if this is thrown then it means the runtime is in the midst of
+            // being restarted
+        }
+    }
+
+    /**
+     * Query the state of this sync service.
+     * <p>Set with {@link #setServiceActive(ComponentName cname, boolean active)}.
+     * <p>The calling application must be signed with the same certificate as the target component,
+     * otherwise this call will fail.
+     * @param cname ComponentName referring to a {@link SyncService}
+     * @return true if jobs will be run on this service, false otherwise.
+     */
+    public static boolean isServiceActive(ComponentName cname) {
+        try {
+            return getContentService().isServiceActive(cname);
+        } catch (RemoteException e) {
+            throw new RuntimeException("the ContentService should always be reachable", e);
+        }
+    }
+
+    /**
      * Gets the master auto-sync setting that applies to all the providers and accounts.
      * If this is false then the per-provider auto-sync setting is ignored.
      * <p>This method requires the caller to hold the permission
@@ -2030,8 +2139,8 @@
     }
 
     /**
-     * Returns true if there is currently a sync operation for the given
-     * account or authority in the pending list, or actively being processed.
+     * Returns true if there is currently a sync operation for the given account or authority
+     * actively being processed.
      * <p>This method requires the caller to hold the permission
      * {@link android.Manifest.permission#READ_SYNC_STATS}.
      * @param account the account whose setting we are querying
@@ -2039,8 +2148,26 @@
      * @return true if a sync is active for the given account or authority.
      */
     public static boolean isSyncActive(Account account, String authority) {
+        if (account == null) {
+            throw new IllegalArgumentException("account must not be null");
+        }
+        if (authority == null) {
+            throw new IllegalArgumentException("authority must not be null");
+        }
+
         try {
-            return getContentService().isSyncActive(account, authority);
+            return getContentService().isSyncActive(account, authority, null);
+        } catch (RemoteException e) {
+            throw new RuntimeException("the ContentService should always be reachable", e);
+        }
+    }
+
+    public static boolean isSyncActive(ComponentName cname) {
+        if (cname == null) {
+            throw new IllegalArgumentException("component name must not be null");
+        }
+        try {
+            return getContentService().isSyncActive(null, null, cname);
         } catch (RemoteException e) {
             throw new RuntimeException("the ContentService should always be reachable", e);
         }
@@ -2098,7 +2225,7 @@
      */
     public static SyncStatusInfo getSyncStatus(Account account, String authority) {
         try {
-            return getContentService().getSyncStatus(account, authority);
+            return getContentService().getSyncStatus(account, authority, null);
         } catch (RemoteException e) {
             throw new RuntimeException("the ContentService should always be reachable", e);
         }
@@ -2114,7 +2241,15 @@
      */
     public static boolean isSyncPending(Account account, String authority) {
         try {
-            return getContentService().isSyncPending(account, authority);
+            return getContentService().isSyncPending(account, authority, null);
+        } catch (RemoteException e) {
+            throw new RuntimeException("the ContentService should always be reachable", e);
+        }
+    }
+
+    public static boolean isSyncPending(ComponentName cname) {
+        try {
+            return getContentService().isSyncPending(null, null, cname);
         } catch (RemoteException e) {
             throw new RuntimeException("the ContentService should always be reachable", e);
         }
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 5057cf4..de223a3 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -16,6 +16,10 @@
 
 package android.content;
 
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.StringDef;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.res.AssetManager;
@@ -47,6 +51,8 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 /**
  * Interface to global information about an application environment.  This is
@@ -132,6 +138,20 @@
      */
     public static final int MODE_ENABLE_WRITE_AHEAD_LOGGING = 0x0008;
 
+    /** @hide */
+    @IntDef(flag = true,
+            value = {
+                BIND_AUTO_CREATE,
+                BIND_AUTO_CREATE,
+                BIND_DEBUG_UNBIND,
+                BIND_NOT_FOREGROUND,
+                BIND_ABOVE_CLIENT,
+                BIND_ALLOW_OOM_MANAGEMENT,
+                BIND_WAIVE_PRIORITY
+            })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface BindServiceFlags {}
+
     /**
      * Flag for {@link #bindService}: automatically create the service as long
      * as the binding exists.  Note that while this will create the service,
@@ -222,6 +242,16 @@
     public static final int BIND_ADJUST_WITH_ACTIVITY = 0x0080;
 
     /**
+     * @hide Flag for {@link #bindService}: Treat the binding as hosting
+     * an activity, an unbinding as the activity going in the background.
+     * That is, when unbinding, the process when empty will go on the activity
+     * LRU list instead of the regular one, keeping it around more aggressively
+     * than it otherwise would be.  This is intended for use with IMEs to try
+     * to keep IME processes around for faster keyboard switching.
+     */
+    public static final int BIND_TREAT_LIKE_ACTIVITY = 0x08000000;
+
+    /**
      * @hide An idea that is not yet implemented.
      * Flag for {@link #bindService}: If binding from an activity, consider
      * this service to be visible like the binding activity is.  That is,
@@ -356,6 +386,19 @@
         return getResources().getString(resId, formatArgs);
     }
 
+    /**
+     * Return a drawable object associated with a particular resource ID and
+     * styled for the current theme.
+     *
+     * @param id The desired resource identifier, as generated by the aapt
+     *           tool. This integer encodes the package, type, and resource
+     *           entry. The value 0 is an invalid identifier.
+     * @return Drawable An object that can be used to draw this resource.
+     */
+    public final Drawable getDrawable(int id) {
+        return getResources().getDrawable(id, getTheme());
+    }
+
      /**
      * Set the base theme for this context.  Note that this should be called
      * before any views are instantiated in the Context (for example before
@@ -495,7 +538,7 @@
      * and {@link #MODE_WORLD_WRITEABLE} to control permissions.  The bit
      * {@link #MODE_MULTI_PROCESS} can also be used if multiple processes
      * are mutating the same SharedPreferences file.  {@link #MODE_MULTI_PROCESS}
-     * is always on in apps targetting Gingerbread (Android 2.3) and below, and
+     * is always on in apps targeting Gingerbread (Android 2.3) and below, and
      * off by default in later versions.
      *
      * @return The single {@link SharedPreferences} instance that can be used
@@ -680,7 +723,8 @@
      * @see #getFilesDir
      * @see android.os.Environment#getExternalStoragePublicDirectory
      */
-    public abstract File getExternalFilesDir(String type);
+    @Nullable
+    public abstract File getExternalFilesDir(@Nullable String type);
 
     /**
      * Returns absolute paths to application-specific directories on all
@@ -713,7 +757,7 @@
      * Returned paths may be {@code null} if a storage device is unavailable.
      *
      * @see #getExternalFilesDir(String)
-     * @see Environment#getStorageState(File)
+     * @see Environment#getExternalStorageState(File)
      */
     public abstract File[] getExternalFilesDirs(String type);
 
@@ -777,7 +821,7 @@
      * Returned paths may be {@code null} if a storage device is unavailable.
      *
      * @see #getObbDir()
-     * @see Environment#getStorageState(File)
+     * @see Environment#getExternalStorageState(File)
      */
     public abstract File[] getObbDirs();
 
@@ -846,6 +890,7 @@
      *
      * @see #getCacheDir
      */
+    @Nullable
     public abstract File getExternalCacheDir();
 
     /**
@@ -879,7 +924,7 @@
      * Returned paths may be {@code null} if a storage device is unavailable.
      *
      * @see #getExternalCacheDir()
-     * @see Environment#getStorageState(File)
+     * @see Environment#getExternalStorageState(File)
      */
     public abstract File[] getExternalCacheDirs();
 
@@ -966,7 +1011,8 @@
      * @see #deleteDatabase
      */
     public abstract SQLiteDatabase openOrCreateDatabase(String name,
-            int mode, CursorFactory factory, DatabaseErrorHandler errorHandler);
+            int mode, CursorFactory factory,
+            @Nullable DatabaseErrorHandler errorHandler);
 
     /**
      * Delete an existing private SQLiteDatabase associated with this Context's
@@ -1112,7 +1158,7 @@
      * @see #startActivity(Intent)
      * @see PackageManager#resolveActivity
      */
-    public abstract void startActivity(Intent intent, Bundle options);
+    public abstract void startActivity(Intent intent, @Nullable Bundle options);
 
     /**
      * Version of {@link #startActivity(Intent, Bundle)} that allows you to specify the
@@ -1128,7 +1174,7 @@
      * @throws ActivityNotFoundException &nbsp;
      * @hide
      */
-    public void startActivityAsUser(Intent intent, Bundle options, UserHandle userId) {
+    public void startActivityAsUser(Intent intent, @Nullable Bundle options, UserHandle userId) {
         throw new RuntimeException("Not implemented. Must override in a subclass.");
     }
 
@@ -1247,7 +1293,7 @@
      * @see #startIntentSender(IntentSender, Intent, int, int, int)
      */
     public abstract void startIntentSender(IntentSender intent,
-            Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
+            @Nullable Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
             Bundle options) throws IntentSender.SendIntentException;
 
     /**
@@ -1297,11 +1343,11 @@
      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
      */
     public abstract void sendBroadcast(Intent intent,
-            String receiverPermission);
+            @Nullable String receiverPermission);
 
     /**
      * Like {@link #sendBroadcast(Intent, String)}, but also allows specification
-     * of an assocated app op as per {@link android.app.AppOpsManager}.
+     * of an associated app op as per {@link android.app.AppOpsManager}.
      * @hide
      */
     public abstract void sendBroadcast(Intent intent,
@@ -1328,7 +1374,7 @@
      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
      */
     public abstract void sendOrderedBroadcast(Intent intent,
-            String receiverPermission);
+            @Nullable String receiverPermission);
 
     /**
      * Version of {@link #sendBroadcast(Intent)} that allows you to
@@ -1372,15 +1418,15 @@
      * @see #registerReceiver
      * @see android.app.Activity#RESULT_OK
      */
-    public abstract void sendOrderedBroadcast(Intent intent,
-            String receiverPermission, BroadcastReceiver resultReceiver,
-            Handler scheduler, int initialCode, String initialData,
-            Bundle initialExtras);
+    public abstract void sendOrderedBroadcast(@NonNull Intent intent,
+            @Nullable String receiverPermission, BroadcastReceiver resultReceiver,
+            @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
+            @Nullable Bundle initialExtras);
 
     /**
      * Like {@link #sendOrderedBroadcast(Intent, String, BroadcastReceiver, android.os.Handler,
      * int, String, android.os.Bundle)}, but also allows specification
-     * of an assocated app op as per {@link android.app.AppOpsManager}.
+     * of an associated app op as per {@link android.app.AppOpsManager}.
      * @hide
      */
     public abstract void sendOrderedBroadcast(Intent intent,
@@ -1415,7 +1461,7 @@
      * @see #sendBroadcast(Intent, String)
      */
     public abstract void sendBroadcastAsUser(Intent intent, UserHandle user,
-            String receiverPermission);
+            @Nullable String receiverPermission);
 
     /**
      * Version of
@@ -1448,8 +1494,9 @@
      * @see #sendOrderedBroadcast(Intent, String, BroadcastReceiver, Handler, int, String, Bundle)
      */
     public abstract void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
-            String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
-            int initialCode, String initialData, Bundle initialExtras);
+            @Nullable String receiverPermission, BroadcastReceiver resultReceiver,
+            @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
+            @Nullable  Bundle initialExtras);
 
     /**
      * Perform a {@link #sendBroadcast(Intent)} that is "sticky," meaning the
@@ -1514,8 +1561,8 @@
      */
     public abstract void sendStickyOrderedBroadcast(Intent intent,
             BroadcastReceiver resultReceiver,
-            Handler scheduler, int initialCode, String initialData,
-            Bundle initialExtras);
+            @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
+            @Nullable Bundle initialExtras);
 
     /**
      * Remove the data previously sent with {@link #sendStickyBroadcast},
@@ -1575,8 +1622,8 @@
      */
     public abstract void sendStickyOrderedBroadcastAsUser(Intent intent,
             UserHandle user, BroadcastReceiver resultReceiver,
-            Handler scheduler, int initialCode, String initialData,
-            Bundle initialExtras);
+            @Nullable Handler scheduler, int initialCode, @Nullable String initialData,
+            @Nullable Bundle initialExtras);
 
     /**
      * Version of {@link #removeStickyBroadcast(Intent)} that allows you to specify the
@@ -1643,7 +1690,8 @@
      * @see #sendBroadcast
      * @see #unregisterReceiver
      */
-    public abstract Intent registerReceiver(BroadcastReceiver receiver,
+    @Nullable
+    public abstract Intent registerReceiver(@Nullable BroadcastReceiver receiver,
                                             IntentFilter filter);
 
     /**
@@ -1677,8 +1725,10 @@
      * @see #sendBroadcast
      * @see #unregisterReceiver
      */
+    @Nullable
     public abstract Intent registerReceiver(BroadcastReceiver receiver,
-            IntentFilter filter, String broadcastPermission, Handler scheduler);
+            IntentFilter filter, @Nullable String broadcastPermission,
+            @Nullable Handler scheduler);
 
     /**
      * @hide
@@ -1704,9 +1754,10 @@
      * @see #sendBroadcast
      * @see #unregisterReceiver
      */
+    @Nullable
     public abstract Intent registerReceiverAsUser(BroadcastReceiver receiver,
-            UserHandle user, IntentFilter filter, String broadcastPermission,
-            Handler scheduler);
+            UserHandle user, IntentFilter filter, @Nullable String broadcastPermission,
+            @Nullable Handler scheduler);
 
     /**
      * Unregister a previously registered BroadcastReceiver.  <em>All</em>
@@ -1765,6 +1816,7 @@
      * @see #stopService
      * @see #bindService
      */
+    @Nullable
     public abstract ComponentName startService(Intent service);
 
     /**
@@ -1852,8 +1904,8 @@
      * @see #BIND_DEBUG_UNBIND
      * @see #BIND_NOT_FOREGROUND
      */
-    public abstract boolean bindService(Intent service, ServiceConnection conn,
-            int flags);
+    public abstract boolean bindService(Intent service, @NonNull ServiceConnection conn,
+            @BindServiceFlags int flags);
 
     /**
      * Same as {@link #bindService(Intent, ServiceConnection, int)}, but with an explicit userHandle
@@ -1874,7 +1926,7 @@
      *
      * @see #bindService
      */
-    public abstract void unbindService(ServiceConnection conn);
+    public abstract void unbindService(@NonNull ServiceConnection conn);
 
     /**
      * Start executing an {@link android.app.Instrumentation} class.  The given
@@ -1899,8 +1951,68 @@
      * @return {@code true} if the instrumentation was successfully started,
      * else {@code false} if it could not be found.
      */
-    public abstract boolean startInstrumentation(ComponentName className,
-            String profileFile, Bundle arguments);
+    public abstract boolean startInstrumentation(@NonNull ComponentName className,
+            @Nullable String profileFile, @Nullable Bundle arguments);
+
+    /** @hide */
+    @StringDef({
+            POWER_SERVICE,
+            WINDOW_SERVICE,
+            LAYOUT_INFLATER_SERVICE,
+            ACCOUNT_SERVICE,
+            ACTIVITY_SERVICE,
+            ALARM_SERVICE,
+            NOTIFICATION_SERVICE,
+            ACCESSIBILITY_SERVICE,
+            CAPTIONING_SERVICE,
+            KEYGUARD_SERVICE,
+            LOCATION_SERVICE,
+            //@hide: COUNTRY_DETECTOR,
+            SEARCH_SERVICE,
+            SENSOR_SERVICE,
+            STORAGE_SERVICE,
+            WALLPAPER_SERVICE,
+            VIBRATOR_SERVICE,
+            //@hide: STATUS_BAR_SERVICE,
+            CONNECTIVITY_SERVICE,
+            //@hide: UPDATE_LOCK_SERVICE,
+            //@hide: NETWORKMANAGEMENT_SERVICE,
+            //@hide: NETWORK_STATS_SERVICE,
+            //@hide: NETWORK_POLICY_SERVICE,
+            WIFI_SERVICE,
+            WIFI_HOTSPOT_SERVICE,
+            WIFI_P2P_SERVICE,
+            NSD_SERVICE,
+            AUDIO_SERVICE,
+            MEDIA_ROUTER_SERVICE,
+            TELEPHONY_SERVICE,
+            CLIPBOARD_SERVICE,
+            INPUT_METHOD_SERVICE,
+            TEXT_SERVICES_MANAGER_SERVICE,
+            //@hide: APPWIDGET_SERVICE,
+            //@hide: BACKUP_SERVICE,
+            DROPBOX_SERVICE,
+            DEVICE_POLICY_SERVICE,
+            UI_MODE_SERVICE,
+            DOWNLOAD_SERVICE,
+            NFC_SERVICE,
+            BLUETOOTH_SERVICE,
+            //@hide: SIP_SERVICE,
+            USB_SERVICE,
+            LAUNCHER_APPS_SERVICE,
+            //@hide: SERIAL_SERVICE,
+            INPUT_SERVICE,
+            DISPLAY_SERVICE,
+            //@hide: SCHEDULING_POLICY_SERVICE,
+            USER_SERVICE,
+            //@hide: APP_OPS_SERVICE
+            CAMERA_SERVICE,
+            PRINT_SERVICE,
+            MEDIA_SESSION_SERVICE,
+            BATTERY_SERVICE,
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ServiceName {}
 
     /**
      * Return the handle to a system-level service by name. The class of the
@@ -1949,6 +2061,8 @@
      * <dd> An {@link android.app.UiModeManager} for controlling UI modes.
      * <dt> {@link #DOWNLOAD_SERVICE} ("download")
      * <dd> A {@link android.app.DownloadManager} for requesting HTTP downloads
+     * <dt> {@link #BATTERY_SERVICE} ("batterymanager")
+     * <dd> A {@link android.os.BatteryManager} for managing battery state
      * </dl>
      *
      * <p>Note:  System services obtained via this API may be closely associated with
@@ -2002,8 +2116,10 @@
      * @see android.app.UiModeManager
      * @see #DOWNLOAD_SERVICE
      * @see android.app.DownloadManager
+     * @see #BATTERY_SERVICE
+     * @see android.os.BatteryManager
      */
-    public abstract Object getSystemService(String name);
+    public abstract Object getSystemService(@ServiceName @NonNull String name);
 
     /**
      * Use with {@link #getSystemService} to retrieve a
@@ -2221,6 +2337,16 @@
 
     /**
      * Use with {@link #getSystemService} to retrieve a {@link
+     * android.net.wifi.hotspot.WifiHotspotManager} for handling management of
+     * Wi-Fi hotspot access.
+     *
+     * @see #getSystemService
+     * @see android.net.wifi.hotspot.WifiHotspotManager
+     */
+    public static final String WIFI_HOTSPOT_SERVICE = "wifihotspot";
+
+    /**
+     * Use with {@link #getSystemService} to retrieve a {@link
      * android.net.wifi.p2p.WifiP2pManager} for handling management of
      * Wi-Fi peer-to-peer connections.
      *
@@ -2261,6 +2387,15 @@
 
     /**
      * Use with {@link #getSystemService} to retrieve a
+     * {@link android.media.session.SessionManager} for managing media Sessions.
+     *
+     * @see #getSystemService
+     * @see android.media.session.SessionManager
+     */
+    public static final String MEDIA_SESSION_SERVICE = "media_session";
+
+    /**
+     * Use with {@link #getSystemService} to retrieve a
      * {@link android.telephony.TelephonyManager} for handling management the
      * telephony features of the device.
      *
@@ -2307,6 +2442,14 @@
     public static final String APPWIDGET_SERVICE = "appwidget";
 
     /**
+     * Official published name of the (internal) voice interaction manager service.
+     *
+     * @hide
+     * @see #getSystemService
+     */
+    public static final String VOICE_INTERACTION_MANAGER_SERVICE = "voiceinteraction";
+
+    /**
      * Use with {@link #getSystemService} to retrieve an
      * {@link android.app.backup.IBackupManager IBackupManager} for communicating
      * with the backup mechanism.
@@ -2351,6 +2494,14 @@
 
     /**
      * Use with {@link #getSystemService} to retrieve a
+     * {@link android.os.BatteryManager} for managing battery state.
+     *
+     * @see #getSystemService
+     */
+    public static final String BATTERY_SERVICE = "batterymanager";
+
+    /**
+     * Use with {@link #getSystemService} to retrieve a
      * {@link android.nfc.NfcManager} for using NFC.
      *
      * @see #getSystemService
@@ -2434,6 +2585,16 @@
 
     /**
      * Use with {@link #getSystemService} to retrieve a
+     * {@link android.content.pm.LauncherApps} for querying and monitoring launchable apps across
+     * profiles of a user.
+     *
+     * @see #getSystemService
+     * @see android.content.pm.LauncherApps
+     */
+    public static final String LAUNCHER_APPS_SERVICE = "launcherapps";
+
+    /**
+     * Use with {@link #getSystemService} to retrieve a
      * {@link android.app.AppOpsManager} for tracking application operations
      * on the device.
      *
@@ -2449,7 +2610,6 @@
      *
      * @see #getSystemService
      * @see android.hardware.camera2.CameraManager
-     * @hide
      */
     public static final String CAMERA_SERVICE = "camera";
 
@@ -2473,6 +2633,32 @@
     public static final String CONSUMER_IR_SERVICE = "consumer_ir";
 
     /**
+     * {@link android.app.trust.TrustManager} for managing trust agents.
+     * @see #getSystemService
+     * @see android.app.trust.TrustManager
+     * @hide
+     */
+    public static final String TRUST_SERVICE = "trust";
+
+    /**
+     * Use with {@link #getSystemService} to retrieve a
+     * {@link android.tv.TvInputManager} for interacting with TV inputs on the
+     * device.
+     *
+     * @see #getSystemService
+     * @see android.tv.TvInputManager
+     */
+    public static final String TV_INPUT_SERVICE = "tv_input";
+
+    /**
+     * {@link android.net.NetworkScoreManager} for managing network scoring.
+     * @see #getSystemService
+     * @see android.net.NetworkScoreManager
+     * @hide
+     */
+    public static final String NETWORK_SCORE_SERVICE = "network_score";
+
+    /**
      * Determine whether the given permission is allowed for a particular
      * process and user ID running in the system.
      *
@@ -2488,7 +2674,8 @@
      * @see PackageManager#checkPermission(String, String)
      * @see #checkCallingPermission
      */
-    public abstract int checkPermission(String permission, int pid, int uid);
+    @PackageManager.PermissionResult
+    public abstract int checkPermission(@NonNull String permission, int pid, int uid);
 
     /**
      * Determine whether the calling process of an IPC you are handling has been
@@ -2511,7 +2698,8 @@
      * @see #checkPermission
      * @see #checkCallingOrSelfPermission
      */
-    public abstract int checkCallingPermission(String permission);
+    @PackageManager.PermissionResult
+    public abstract int checkCallingPermission(@NonNull String permission);
 
     /**
      * Determine whether the calling process of an IPC <em>or you</em> have been
@@ -2529,7 +2717,8 @@
      * @see #checkPermission
      * @see #checkCallingPermission
      */
-    public abstract int checkCallingOrSelfPermission(String permission);
+    @PackageManager.PermissionResult
+    public abstract int checkCallingOrSelfPermission(@NonNull String permission);
 
     /**
      * If the given permission is not allowed for a particular process
@@ -2544,7 +2733,7 @@
      * @see #checkPermission(String, int, int)
      */
     public abstract void enforcePermission(
-            String permission, int pid, int uid, String message);
+            @NonNull String permission, int pid, int uid, @Nullable String message);
 
     /**
      * If the calling process of an IPC you are handling has not been
@@ -2565,7 +2754,7 @@
      * @see #checkCallingPermission(String)
      */
     public abstract void enforceCallingPermission(
-            String permission, String message);
+            @NonNull String permission, @Nullable String message);
 
     /**
      * If neither you nor the calling process of an IPC you are
@@ -2581,7 +2770,7 @@
      * @see #checkCallingOrSelfPermission(String)
      */
     public abstract void enforceCallingOrSelfPermission(
-            String permission, String message);
+            @NonNull String permission, @Nullable String message);
 
     /**
      * Grant permission to access a specific Uri to another package, regardless
@@ -2610,14 +2799,18 @@
      * @param uri The Uri you would like to grant access to.
      * @param modeFlags The desired access modes.  Any combination of
      * {@link Intent#FLAG_GRANT_READ_URI_PERMISSION
-     * Intent.FLAG_GRANT_READ_URI_PERMISSION} or
+     * Intent.FLAG_GRANT_READ_URI_PERMISSION},
      * {@link Intent#FLAG_GRANT_WRITE_URI_PERMISSION
-     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.
+     * Intent.FLAG_GRANT_WRITE_URI_PERMISSION},
+     * {@link Intent#FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+     * Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION}, or
+     * {@link Intent#FLAG_GRANT_PREFIX_URI_PERMISSION
+     * Intent.FLAG_GRANT_PREFIX_URI_PERMISSION}.
      *
      * @see #revokeUriPermission
      */
     public abstract void grantUriPermission(String toPackage, Uri uri,
-            int modeFlags);
+            @Intent.GrantUriMode int modeFlags);
 
     /**
      * Remove all permissions to access a particular content provider Uri
@@ -2625,7 +2818,8 @@
      * Uri will match all previously granted Uris that are the same or a
      * sub-path of the given Uri.  That is, revoking "content://foo/target" will
      * revoke both "content://foo/target" and "content://foo/target/sub", but not
-     * "content://foo".
+     * "content://foo".  It will not remove any prefix grants that exist at a
+     * higher level.
      *
      * @param uri The Uri you would like to revoke access to.
      * @param modeFlags The desired access modes.  Any combination of
@@ -2636,7 +2830,7 @@
      *
      * @see #grantUriPermission
      */
-    public abstract void revokeUriPermission(Uri uri, int modeFlags);
+    public abstract void revokeUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags);
 
     /**
      * Determine whether a particular process and user ID has been granted
@@ -2659,7 +2853,8 @@
      *
      * @see #checkCallingUriPermission
      */
-    public abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags);
+    public abstract int checkUriPermission(Uri uri, int pid, int uid,
+            @Intent.AccessUriMode int modeFlags);
 
     /**
      * Determine whether the calling process and user ID has been
@@ -2682,7 +2877,7 @@
      *
      * @see #checkUriPermission(Uri, int, int, int)
      */
-    public abstract int checkCallingUriPermission(Uri uri, int modeFlags);
+    public abstract int checkCallingUriPermission(Uri uri, @Intent.AccessUriMode int modeFlags);
 
     /**
      * Determine whether the calling process of an IPC <em>or you</em> has been granted
@@ -2701,7 +2896,8 @@
      *
      * @see #checkCallingUriPermission
      */
-    public abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags);
+    public abstract int checkCallingOrSelfUriPermission(Uri uri,
+            @Intent.AccessUriMode int modeFlags);
 
     /**
      * Check both a Uri and normal permission.  This allows you to perform
@@ -2713,7 +2909,7 @@
      * @param readPermission The permission that provides overall read access,
      * or null to not do this check.
      * @param writePermission The permission that provides overall write
-     * acess, or null to not do this check.
+     * access, or null to not do this check.
      * @param pid The process ID being checked against.  Must be &gt; 0.
      * @param uid The user ID being checked against.  A uid of 0 is the root
      * user, which will pass every permission check.
@@ -2725,8 +2921,9 @@
      * is allowed to access that uri or holds one of the given permissions, or
      * {@link PackageManager#PERMISSION_DENIED} if it is not.
      */
-    public abstract int checkUriPermission(Uri uri, String readPermission,
-            String writePermission, int pid, int uid, int modeFlags);
+    public abstract int checkUriPermission(@Nullable Uri uri, @Nullable String readPermission,
+            @Nullable String writePermission, int pid, int uid,
+            @Intent.AccessUriMode int modeFlags);
 
     /**
      * If a particular process and user ID has not been granted
@@ -2748,7 +2945,7 @@
      * @see #checkUriPermission(Uri, int, int, int)
      */
     public abstract void enforceUriPermission(
-            Uri uri, int pid, int uid, int modeFlags, String message);
+            Uri uri, int pid, int uid, @Intent.AccessUriMode int modeFlags, String message);
 
     /**
      * If the calling process and user ID has not been granted
@@ -2770,7 +2967,7 @@
      * @see #checkCallingUriPermission(Uri, int)
      */
     public abstract void enforceCallingUriPermission(
-            Uri uri, int modeFlags, String message);
+            Uri uri, @Intent.AccessUriMode int modeFlags, String message);
 
     /**
      * If the calling process of an IPC <em>or you</em> has not been
@@ -2789,7 +2986,7 @@
      * @see #checkCallingOrSelfUriPermission(Uri, int)
      */
     public abstract void enforceCallingOrSelfUriPermission(
-            Uri uri, int modeFlags, String message);
+            Uri uri, @Intent.AccessUriMode int modeFlags, String message);
 
     /**
      * Enforce both a Uri and normal permission.  This allows you to perform
@@ -2801,7 +2998,7 @@
      * @param readPermission The permission that provides overall read access,
      * or null to not do this check.
      * @param writePermission The permission that provides overall write
-     * acess, or null to not do this check.
+     * access, or null to not do this check.
      * @param pid The process ID being checked against.  Must be &gt; 0.
      * @param uid The user ID being checked against.  A uid of 0 is the root
      * user, which will pass every permission check.
@@ -2813,8 +3010,15 @@
      * @see #checkUriPermission(Uri, String, String, int, int, int)
      */
     public abstract void enforceUriPermission(
-            Uri uri, String readPermission, String writePermission,
-            int pid, int uid, int modeFlags, String message);
+            @Nullable Uri uri, @Nullable String readPermission,
+            @Nullable String writePermission, int pid, int uid, @Intent.AccessUriMode int modeFlags,
+            @Nullable String message);
+
+    /** @hide */
+    @IntDef(flag = true,
+            value = {CONTEXT_INCLUDE_CODE, CONTEXT_IGNORE_SECURITY, CONTEXT_RESTRICTED})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface CreatePackageOptions {}
 
     /**
      * Flag for use with {@link #createPackageContext}: include the application
@@ -2872,7 +3076,7 @@
      * the given package name.
      */
     public abstract Context createPackageContext(String packageName,
-            int flags) throws PackageManager.NameNotFoundException;
+            @CreatePackageOptions int flags) throws PackageManager.NameNotFoundException;
 
     /**
      * Similar to {@link #createPackageContext(String, int)}, but with a
@@ -2908,7 +3112,8 @@
      *
      * @return A {@link Context} with the given configuration override.
      */
-    public abstract Context createConfigurationContext(Configuration overrideConfiguration);
+    public abstract Context createConfigurationContext(
+            @NonNull Configuration overrideConfiguration);
 
     /**
      * Return a new Context object for the current Context but whose resources
@@ -2928,7 +3133,7 @@
      *
      * @return A {@link Context} for the display.
      */
-    public abstract Context createDisplayContext(Display display);
+    public abstract Context createDisplayContext(@NonNull Display display);
 
     /**
      * Gets the display adjustments holder for this context.  This information
diff --git a/core/java/android/content/ContextWrapper.java b/core/java/android/content/ContextWrapper.java
index a708dad..93f6cdf 100644
--- a/core/java/android/content/ContextWrapper.java
+++ b/core/java/android/content/ContextWrapper.java
@@ -16,9 +16,6 @@
 
 package android.content;
 
-import android.app.Activity;
-import android.app.ActivityManagerNative;
-import android.app.LoadedApk;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.res.AssetManager;
@@ -33,7 +30,6 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
-import android.os.RemoteException;
 import android.os.UserHandle;
 import android.view.DisplayAdjustments;
 import android.view.Display;
diff --git a/core/java/android/content/CursorLoader.java b/core/java/android/content/CursorLoader.java
index 5d7d677..c78871c 100644
--- a/core/java/android/content/CursorLoader.java
+++ b/core/java/android/content/CursorLoader.java
@@ -16,7 +16,6 @@
 
 package android.content;
 
-import android.database.ContentObserver;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.CancellationSignal;
diff --git a/core/java/android/content/Entity.java b/core/java/android/content/Entity.java
index 7842de0..607cb3f 100644
--- a/core/java/android/content/Entity.java
+++ b/core/java/android/content/Entity.java
@@ -16,10 +16,7 @@
 
 package android.content;
 
-import android.os.Parcelable;
-import android.os.Parcel;
 import android.net.Uri;
-import android.util.Log;
 
 import java.util.ArrayList;
 
diff --git a/core/java/android/content/IAnonymousSyncAdapter.aidl b/core/java/android/content/IAnonymousSyncAdapter.aidl
deleted file mode 100644
index a80cea3..0000000
--- a/core/java/android/content/IAnonymousSyncAdapter.aidl
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2013 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 android.content;
-import android.os.Bundle;
-import android.content.ISyncContext;
-
-/**
- * Interface to define an anonymous service that is extended by developers
- * in order to perform anonymous syncs (syncs without an Account or Content
- * Provider specified). See {@link android.content.AbstractThreadedSyncAdapter}.
- * {@hide}
- */
-oneway interface IAnonymousSyncAdapter {
-
-    /**
-     * Initiate a sync. SyncAdapter-specific parameters may be specified in
-     * extras, which is guaranteed to not be null.
-     *
-     * @param syncContext the ISyncContext used to indicate the progress of the sync. When
-     *   the sync is finished (successfully or not) ISyncContext.onFinished() must be called.
-     * @param extras SyncAdapter-specific parameters.
-     *
-     */
-    void startSync(ISyncContext syncContext, in Bundle extras);
-
-    /**
-     * Cancel the currently ongoing sync.
-     */
-    void cancelSync(ISyncContext syncContext);
-
-}
diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl
index 9ad5a19..73a76e8 100644
--- a/core/java/android/content/IContentService.aidl
+++ b/core/java/android/content/IContentService.aidl
@@ -17,6 +17,7 @@
 package android.content;
 
 import android.accounts.Account;
+import android.content.ComponentName;
 import android.content.SyncInfo;
 import android.content.ISyncStatusObserver;
 import android.content.SyncAdapterType;
@@ -55,8 +56,14 @@
             int userHandle);
 
     void requestSync(in Account account, String authority, in Bundle extras);
+    /**
+     * Start a sync given a request.
+     */
     void sync(in SyncRequest request);
-    void cancelSync(in Account account, String authority);
+    void cancelSync(in Account account, String authority, in ComponentName cname);
+
+    /** Cancel a sync, providing information about the sync to be cancelled. */
+     void cancelRequest(in SyncRequest request);
 
     /**
      * Check if the provider should be synced when a network tickle is received
@@ -74,12 +81,14 @@
     void setSyncAutomatically(in Account account, String providerName, boolean sync);
 
     /**
-     * Get the frequency of the periodic poll, if any.
-     * @param providerName the provider whose setting we are querying
-     * @return the frequency of the periodic sync in seconds. If 0 then no periodic syncs
-     * will take place.
+     * Get a list of periodic operations for a specified authority, or service.
+     * @param account account for authority, must be null if cname is non-null.
+     * @param providerName name of provider, must be null if cname is non-null.
+     * @param cname component to identify sync service, must be null if account/providerName are
+     * non-null.
      */
-    List<PeriodicSync> getPeriodicSyncs(in Account account, String providerName);
+    List<PeriodicSync> getPeriodicSyncs(in Account account, String providerName,
+        in ComponentName cname);
 
     /**
      * Set whether or not the provider is to be synced on a periodic basis.
@@ -112,16 +121,23 @@
      */
     void setIsSyncable(in Account account, String providerName, int syncable);
 
+    /**
+     * Corresponds roughly to setIsSyncable(String account, String provider) for syncs that bind
+     * to a SyncService.
+     */
+    void setServiceActive(in ComponentName cname, boolean active);
+
+    /**
+     * Corresponds roughly to getIsSyncable(String account, String provider) for syncs that bind
+     * to a SyncService.
+     * @return 0 if this SyncService is not enabled, 1 if enabled, <0 if unknown.
+     */
+    boolean isServiceActive(in ComponentName cname);
+
     void setMasterSyncAutomatically(boolean flag);
 
     boolean getMasterSyncAutomatically();
 
-    /**
-     * Returns true if there is currently a sync operation for the given
-     * account or authority in the pending list, or actively being processed.
-     */
-    boolean isSyncActive(in Account account, String authority);
-
     List<SyncInfo> getCurrentSyncs();
 
     /**
@@ -131,17 +147,33 @@
     SyncAdapterType[] getSyncAdapterTypes();
 
     /**
+     * Returns true if there is currently a operation for the given account/authority or service
+     * actively being processed.
+     * @param account account for authority, must be null if cname is non-null.
+     * @param providerName name of provider, must be null if cname is non-null.
+     * @param cname component to identify sync service, must be null if account/providerName are
+     * non-null.
+     */
+    boolean isSyncActive(in Account account, String authority, in ComponentName cname);
+
+    /**
      * Returns the status that matches the authority. If there are multiples accounts for
      * the authority, the one with the latest "lastSuccessTime" status is returned.
-     * @param authority the authority whose row should be selected
-     * @return the SyncStatusInfo for the authority, or null if none exists
+     * @param account account for authority, must be null if cname is non-null.
+     * @param providerName name of provider, must be null if cname is non-null.
+     * @param cname component to identify sync service, must be null if account/providerName are
+     * non-null.
      */
-    SyncStatusInfo getSyncStatus(in Account account, String authority);
+    SyncStatusInfo getSyncStatus(in Account account, String authority, in ComponentName cname);
 
     /**
      * Return true if the pending status is true of any matching authorities.
+     * @param account account for authority, must be null if cname is non-null.
+     * @param providerName name of provider, must be null if cname is non-null.
+     * @param cname component to identify sync service, must be null if account/providerName are
+     * non-null.
      */
-    boolean isSyncPending(in Account account, String authority);
+    boolean isSyncPending(in Account account, String authority, in ComponentName cname);
 
     void addStatusChangeListener(int mask, ISyncStatusObserver callback);
 
diff --git a/core/java/android/content/ISyncServiceAdapter.aidl b/core/java/android/content/ISyncServiceAdapter.aidl
new file mode 100644
index 0000000..d419307
--- /dev/null
+++ b/core/java/android/content/ISyncServiceAdapter.aidl
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2013 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 android.content;
+import android.os.Bundle;
+import android.content.ISyncContext;
+
+/**
+ * Interface to define an anonymous service that is extended by developers
+ * in order to perform anonymous syncs (syncs without an Account or Content
+ * Provider specified). See {@link android.content.AbstractThreadedSyncAdapter}.
+ * {@hide}
+ */
+oneway interface ISyncServiceAdapter {
+
+    /**
+     * Initiate a sync. SyncAdapter-specific parameters may be specified in
+     * extras, which is guaranteed to not be null.
+     *
+     * @param syncContext the ISyncContext used to indicate the progress of the sync. When
+     *   the sync is finished (successfully or not) ISyncContext.onFinished() must be called.
+     * @param extras SyncAdapter-specific parameters.
+     *
+     */
+    void startSync(ISyncContext syncContext, in Bundle extras);
+
+    /**
+     * Cancel the currently ongoing sync.
+     */
+    void cancelSync(ISyncContext syncContext);
+
+}
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 95e27e2..ae5437b 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -18,9 +18,11 @@
 
 import android.content.pm.ApplicationInfo;
 import android.util.ArraySet;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import android.annotation.IntDef;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.pm.ActivityInfo;
@@ -45,6 +47,8 @@
 
 import java.io.IOException;
 import java.io.Serializable;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
@@ -861,8 +865,9 @@
         }
 
         // Migrate any clip data and flags from target.
-        int permFlags = target.getFlags()
-                & (FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION);
+        int permFlags = target.getFlags() & (FLAG_GRANT_READ_URI_PERMISSION
+                | FLAG_GRANT_WRITE_URI_PERMISSION | FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+                | FLAG_GRANT_PREFIX_URI_PERMISSION);
         if (permFlags != 0) {
             ClipData targetClipData = target.getClipData();
             if (targetClipData == null && target.getData() != null) {
@@ -2193,6 +2198,11 @@
     /**
      * Broadcast Action: Wired Headset plugged in or unplugged.
      *
+     * You <em>cannot</em> receive this through components declared
+     * in manifests, only by explicitly registering for it with
+     * {@link Context#registerReceiver(BroadcastReceiver, IntentFilter)
+     * Context.registerReceiver()}.
+     *
      * <p>The intent will have the following extra values:
      * <ul>
      *   <li><em>state</em> - 0 for unplugged, 1 for plugged. </li>
@@ -2298,6 +2308,16 @@
             = "android.intent.action.ADVANCED_SETTINGS";
 
     /**
+     *  Broadcast Action: Sent after application restrictions are changed.
+     *
+     * <p class="note">This is a protected intent that can only be sent
+     * by the system.</p>
+     */
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_APPLICATION_RESTRICTIONS_CHANGED =
+            "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED";
+
+    /**
      * Broadcast Action: An outgoing call is about to be placed.
      *
      * <p>The Intent will have the following extra value:</p>
@@ -2623,6 +2643,23 @@
             "android.intent.action.USER_INFO_CHANGED";
 
     /**
+     * Broadcast sent to the primary user when an associated managed profile is added (the profile
+     * was created and is ready to be used). Carries an extra {@link #EXTRA_USER} that specifies
+     * the UserHandle of the profile that was added. This is only sent to registered receivers,
+     * not manifest receivers.
+     */
+    public static final String ACTION_MANAGED_PROFILE_ADDED =
+            "android.intent.action.MANAGED_PROFILE_ADDED";
+
+    /**
+     * Broadcast sent to the primary user when an associated managed profile is removed. Carries an
+     * extra {@link #EXTRA_USER} that specifies the UserHandle of the profile that was removed. This
+     * is only sent to registered receivers, not manifest receivers.
+     */
+    public static final String ACTION_MANAGED_PROFILE_REMOVED =
+            "android.intent.action.MANAGED_PROFILE_REMOVED";
+
+    /**
      * Sent when the user taps on the clock widget in the system's "quick settings" area.
      */
     public static final String ACTION_QUICK_CLOCK =
@@ -2663,9 +2700,11 @@
      * take the persistable permissions using
      * {@link ContentResolver#takePersistableUriPermission(Uri, int)}.
      * <p>
-     * Callers can restrict document selection to a specific kind of data, such
-     * as photos, by setting one or more MIME types in
-     * {@link #EXTRA_MIME_TYPES}.
+     * Callers must indicate the acceptable document MIME types through
+     * {@link #setType(String)}. For example, to select photos, use
+     * {@code image/*}. If multiple disjoint MIME types are acceptable, define
+     * them in {@link #EXTRA_MIME_TYPES} and {@link #setType(String)} to
+     * {@literal *}/*.
      * <p>
      * If the caller can handle multiple returned items (the user performing
      * multiple selection), then you can specify {@link #EXTRA_ALLOW_MULTIPLE}
@@ -2675,9 +2714,10 @@
      * returned URIs can be opened with
      * {@link ContentResolver#openFileDescriptor(Uri, String)}.
      * <p>
-     * Output: The URI of the item that was picked. This must be a
-     * {@code content://} URI so that any receiver can access it. If multiple
-     * documents were selected, they are returned in {@link #getClipData()}.
+     * Output: The URI of the item that was picked, returned in
+     * {@link #getData()}. This must be a {@code content://} URI so that any
+     * receiver can access it. If multiple documents were selected, they are
+     * returned in {@link #getClipData()}.
      *
      * @see DocumentsContract
      * @see #ACTION_CREATE_DOCUMENT
@@ -2719,6 +2759,24 @@
     @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
     public static final String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT";
 
+    /**
+     * Activity Action: Allow the user to pick a directory. When invoked, the
+     * system will display the various {@link DocumentsProvider} instances
+     * installed on the device, letting the user navigate through them. Apps can
+     * fully manage documents within the returned directory.
+     * <p>
+     * To gain access to descendant (child, grandchild, etc) documents, use
+     * {@link DocumentsContract#buildDocumentViaUri(Uri, String)} and
+     * {@link DocumentsContract#buildChildDocumentsViaUri(Uri, String)} using
+     * the returned directory URI.
+     * <p>
+     * Output: The URI representing the selected directory.
+     *
+     * @see DocumentsContract
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_PICK_DIRECTORY = "android.intent.action.PICK_DIRECTORY";
+
     // ---------------------------------------------------------------------
     // ---------------------------------------------------------------------
     // Standard intent categories (see addCategory()).
@@ -2746,6 +2804,14 @@
     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
     public static final String CATEGORY_BROWSABLE = "android.intent.category.BROWSABLE";
     /**
+     * Categories for activities that can participate in voice interaction.
+     * An activity that supports this category must be prepared to run with
+     * no UI shown at all (though in some case it may have a UI shown), and
+     * rely on {@link android.app.VoiceInteractor} to interact with the user.
+     */
+    @SdkConstant(SdkConstantType.INTENT_CATEGORY)
+    public static final String CATEGORY_VOICE = "android.intent.category.VOICE";
+    /**
      * Set if the activity should be considered as an alternative action to
      * the data the user is currently viewing.  See also
      * {@link #CATEGORY_SELECTED_ALTERNATIVE} for an alternative action that
@@ -2899,6 +2965,14 @@
     @SdkConstant(SdkConstantType.INTENT_CATEGORY)
     public static final String CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE";
 
+    /**
+     * An activity that provides a user interface for adjusting notification preferences for its
+     * containing application. Optional but recommended for apps that post
+     * {@link android.app.Notification Notifications}.
+     */
+    @SdkConstant(SdkConstantType.INTENT_CATEGORY)
+    public static final String CATEGORY_NOTIFICATION_PREFERENCES = "android.intent.category.NOTIFICATION_PREFERENCES";
+
     // ---------------------------------------------------------------------
     // ---------------------------------------------------------------------
     // Application launch intent categories (see addCategory()).
@@ -3289,6 +3363,7 @@
      * @see #ACTION_GET_CONTENT
      * @see #ACTION_OPEN_DOCUMENT
      * @see #ACTION_CREATE_DOCUMENT
+     * @see #ACTION_PICK_DIRECTORY
      */
     public static final String EXTRA_LOCAL_ONLY =
             "android.intent.extra.LOCAL_ONLY";
@@ -3308,15 +3383,23 @@
             "android.intent.extra.ALLOW_MULTIPLE";
 
     /**
-     * The userHandle carried with broadcast intents related to addition, removal and switching of
-     * users
-     * - {@link #ACTION_USER_ADDED}, {@link #ACTION_USER_REMOVED} and {@link #ACTION_USER_SWITCHED}.
+     * The integer userHandle carried with broadcast intents related to addition, removal and
+     * switching of users and managed profiles - {@link #ACTION_USER_ADDED},
+     * {@link #ACTION_USER_REMOVED} and {@link #ACTION_USER_SWITCHED}.
+     *
      * @hide
      */
     public static final String EXTRA_USER_HANDLE =
             "android.intent.extra.user_handle";
 
     /**
+     * The UserHandle carried with broadcasts intents related to addition and removal of managed
+     * profiles - {@link #ACTION_MANAGED_PROFILE_ADDED} and {@link #ACTION_MANAGED_PROFILE_REMOVED}.
+     */
+    public static final String EXTRA_USER =
+            "android.intent.extra.user";
+
+    /**
      * Extra used in the response from a BroadcastReceiver that handles
      * {@link #ACTION_GET_RESTRICTION_ENTRIES}. The type of the extra is
      * <code>ArrayList&lt;RestrictionEntry&gt;</code>.
@@ -3373,6 +3456,30 @@
     // ---------------------------------------------------------------------
     // Intent flags (see mFlags variable).
 
+    /** @hide */
+    @IntDef(flag = true, value = {
+            FLAG_GRANT_READ_URI_PERMISSION, FLAG_GRANT_WRITE_URI_PERMISSION,
+            FLAG_GRANT_PERSISTABLE_URI_PERMISSION, FLAG_GRANT_PREFIX_URI_PERMISSION })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface GrantUriMode {}
+
+    /** @hide */
+    @IntDef(flag = true, value = {
+            FLAG_GRANT_READ_URI_PERMISSION, FLAG_GRANT_WRITE_URI_PERMISSION })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface AccessUriMode {}
+
+    /**
+     * Test if given mode flags specify an access mode, which must be at least
+     * read and/or write.
+     *
+     * @hide
+     */
+    public static boolean isAccessUriMode(int modeFlags) {
+        return (modeFlags & (Intent.FLAG_GRANT_READ_URI_PERMISSION
+                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION)) != 0;
+    }
+
     /**
      * If set, the recipient of this Intent will be granted permission to
      * perform read operations on the URI in the Intent's data and any URIs
@@ -3434,6 +3541,17 @@
     public static final int FLAG_GRANT_PERSISTABLE_URI_PERMISSION = 0x00000040;
 
     /**
+     * When combined with {@link #FLAG_GRANT_READ_URI_PERMISSION} and/or
+     * {@link #FLAG_GRANT_WRITE_URI_PERMISSION}, the URI permission grant
+     * applies to any URI that is a prefix match against the original granted
+     * URI. (Without this flag, the URI must match exactly for access to be
+     * granted.) Another URI is considered a prefix match only when scheme,
+     * authority, and all path segments defined by the prefix are an exact
+     * match.
+     */
+    public static final int FLAG_GRANT_PREFIX_URI_PERMISSION = 0x00000080;
+
+    /**
      * If set, the new activity is not kept in the history stack.  As soon as
      * the user navigates away from it, the activity is finished.  This may also
      * be set with the {@link android.R.styleable#AndroidManifestActivity_noHistory
@@ -3471,7 +3589,16 @@
      */
     public static final int FLAG_ACTIVITY_NEW_TASK = 0x10000000;
     /**
-     * <strong>Do not use this flag unless you are implementing your own
+     * This flag is used to create a new task and launch an activity into it.
+     * This flag is always paired with either {@link #FLAG_ACTIVITY_NEW_DOCUMENT}
+     * or {@link #FLAG_ACTIVITY_NEW_TASK}. In both cases these flags alone would
+     * search through existing tasks for ones matching this Intent. Only if no such
+     * task is found would a new task be created. When paired with
+     * FLAG_ACTIVITY_MULTIPLE_TASK both of these behaviors are modified to skip
+     * the search for a matching task and unconditionally start a new task.
+     *
+     * <strong>When used with {@link #FLAG_ACTIVITY_NEW_TASK} do not use this
+     * flag unless you are implementing your own
      * top-level application launcher.</strong>  Used in conjunction with
      * {@link #FLAG_ACTIVITY_NEW_TASK} to disable the
      * behavior of bringing an existing task to the foreground.  When set,
@@ -3483,12 +3610,18 @@
      * you should not use this flag unless you provide some way for a user to
      * return back to the tasks you have launched.</strong>
      *
-     * <p>This flag is ignored if
-     * {@link #FLAG_ACTIVITY_NEW_TASK} is not set.
+     * See {@link #FLAG_ACTIVITY_NEW_DOCUMENT} for details of this flag's use for
+     * creating new document tasks.
+     *
+     * <p>This flag is ignored if one of {@link #FLAG_ACTIVITY_NEW_TASK} or
+     * {@link #FLAG_ACTIVITY_NEW_TASK} is not also set.
      *
      * <p>See
      * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
      * Stack</a> for more information about tasks.
+     *
+     * @see #FLAG_ACTIVITY_NEW_DOCUMENT
+     * @see #FLAG_ACTIVITY_NEW_TASK
      */
     public static final int FLAG_ACTIVITY_MULTIPLE_TASK = 0x08000000;
     /**
@@ -3595,6 +3728,34 @@
      */
     public static final int FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET = 0x00080000;
     /**
+     * This flag is used to break out "documents" into separate tasks that can
+     * be reached via the Recents mechanism. Such a document is any kind of
+     * item for which an application may want to maintain multiple simultaneous
+     * instances. Examples might be text files, web pages, spreadsheets, or
+     * emails. Each such document will be in a separate task in the Recents list.
+     *
+     * <p>When set, the activity specified by this Intent will launch into a
+     * separate task rooted at that activity. The activity launched must be
+     * defined with {@link android.R.attr#launchMode} "standard" or "singleTop".
+     *
+     * <p>If FLAG_ACTIVITY_NEW_DOCUMENT is used without
+     * {@link #FLAG_ACTIVITY_MULTIPLE_TASK} then the activity manager will
+     * search for an existing task with a matching target activity and Intent
+     * data URI and relaunch that task, first finishing all activities down to
+     * the root activity and then calling the root activity's
+     * {@link android.app.Activity#onNewIntent(Intent)} method. If no existing
+     * task's root activity matches the Intent's data URI then a new task will
+     * be launched with the target activity as root.
+     *
+     * <p>When paired with {@link #FLAG_ACTIVITY_MULTIPLE_TASK} this will
+     * always create a new task. Thus the same document may be made to appear
+     * more than one time in Recents.
+     *
+     * @see #FLAG_ACTIVITY_MULTIPLE_TASK
+     */
+    public static final int FLAG_ACTIVITY_NEW_DOCUMENT =
+            FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET | FLAG_ACTIVITY_NEW_TASK;
+    /**
      * If set, this flag will prevent the normal {@link android.app.Activity#onUserLeaveHint}
      * callback from occurring on the current frontmost activity before it is
      * paused as the newly-started activity is brought to the front.
@@ -3710,9 +3871,9 @@
     /**
      * @hide Flags that can't be changed with PendingIntent.
      */
-    public static final int IMMUTABLE_FLAGS =
-            FLAG_GRANT_READ_URI_PERMISSION
-            | FLAG_GRANT_WRITE_URI_PERMISSION;
+    public static final int IMMUTABLE_FLAGS = FLAG_GRANT_READ_URI_PERMISSION
+            | FLAG_GRANT_WRITE_URI_PERMISSION | FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+            | FLAG_GRANT_PREFIX_URI_PERMISSION;
 
     // ---------------------------------------------------------------------
     // ---------------------------------------------------------------------
@@ -6250,6 +6411,8 @@
      *
      * @see #FLAG_GRANT_READ_URI_PERMISSION
      * @see #FLAG_GRANT_WRITE_URI_PERMISSION
+     * @see #FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+     * @see #FLAG_GRANT_PREFIX_URI_PERMISSION
      * @see #FLAG_DEBUG_LOG_RESOLUTION
      * @see #FLAG_FROM_BACKGROUND
      * @see #FLAG_ACTIVITY_BROUGHT_TO_FRONT
@@ -6260,6 +6423,7 @@
      * @see #FLAG_ACTIVITY_FORWARD_RESULT
      * @see #FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
      * @see #FLAG_ACTIVITY_MULTIPLE_TASK
+     * @see #FLAG_ACTIVITY_NEW_DOCUMENT
      * @see #FLAG_ACTIVITY_NEW_TASK
      * @see #FLAG_ACTIVITY_NO_ANIMATION
      * @see #FLAG_ACTIVITY_NO_HISTORY
@@ -6417,6 +6581,21 @@
         }
     }
 
+    /** @hide */
+    @IntDef(flag = true,
+            value = {
+                    FILL_IN_ACTION,
+                    FILL_IN_DATA,
+                    FILL_IN_CATEGORIES,
+                    FILL_IN_COMPONENT,
+                    FILL_IN_PACKAGE,
+                    FILL_IN_SOURCE_BOUNDS,
+                    FILL_IN_SELECTOR,
+                    FILL_IN_CLIP_DATA
+            })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FillInFlags {}
+
     /**
      * Use with {@link #fillIn} to allow the current action value to be
      * overwritten, even if it is already set.
@@ -6510,10 +6689,12 @@
      *
      * @return Returns a bit mask of {@link #FILL_IN_ACTION},
      * {@link #FILL_IN_DATA}, {@link #FILL_IN_CATEGORIES}, {@link #FILL_IN_PACKAGE},
-     * {@link #FILL_IN_COMPONENT}, {@link #FILL_IN_SOURCE_BOUNDS}, and
-     * {@link #FILL_IN_SELECTOR} indicating which fields were changed.
+     * {@link #FILL_IN_COMPONENT}, {@link #FILL_IN_SOURCE_BOUNDS},
+     * {@link #FILL_IN_SELECTOR} and {@link #FILL_IN_CLIP_DATA indicating which fields were
+     * changed.
      */
-    public int fillIn(Intent other, int flags) {
+    @FillInFlags
+    public int fillIn(Intent other, @FillInFlags int flags) {
         int changes = 0;
         if (other.mAction != null
                 && (mAction == null || (flags&FILL_IN_ACTION) != 0)) {
@@ -7263,9 +7444,10 @@
                     // Since we migrated in child, we need to promote ClipData
                     // and flags to ourselves to grant.
                     setClipData(target.getClipData());
-                    addFlags(target.getFlags()
-                            & (FLAG_GRANT_READ_URI_PERMISSION | FLAG_GRANT_WRITE_URI_PERMISSION
-                                    | FLAG_GRANT_PERSISTABLE_URI_PERMISSION));
+                    addFlags(target.getFlags() & (FLAG_GRANT_READ_URI_PERMISSION
+                            | FLAG_GRANT_WRITE_URI_PERMISSION
+                            | FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+                            | FLAG_GRANT_PREFIX_URI_PERMISSION));
                     return true;
                 } else {
                     return false;
@@ -7339,4 +7521,9 @@
         String htmlText = htmlTexts != null ? htmlTexts.get(which) : null;
         return new ClipData.Item(text, htmlText, null, uri);
     }
+
+    /** @hide */
+    public boolean isDocument() {
+        return (mFlags & FLAG_ACTIVITY_NEW_DOCUMENT) == FLAG_ACTIVITY_NEW_DOCUMENT;
+    }
 }
diff --git a/core/java/android/content/Loader.java b/core/java/android/content/Loader.java
index a045b3a..e9d82af 100644
--- a/core/java/android/content/Loader.java
+++ b/core/java/android/content/Loader.java
@@ -413,7 +413,7 @@
      * {@link #onReset()} happens.  You can retrieve the current abandoned
      * state with {@link #isAbandoned}.
      */
-    protected void onAbandon() {        
+    protected void onAbandon() {
     }
     
     /**
diff --git a/core/java/android/content/PeriodicSync.java b/core/java/android/content/PeriodicSync.java
index b586eec..836c6f8 100644
--- a/core/java/android/content/PeriodicSync.java
+++ b/core/java/android/content/PeriodicSync.java
@@ -29,13 +29,17 @@
     public final Account account;
     /** The authority of the sync. Can be null. */
     public final String authority;
+    /** The service for syncing, if this is an anonymous sync. Can be null.*/
+    public final ComponentName service;
     /** Any extras that parameters that are to be passed to the sync adapter. */
     public final Bundle extras;
     /** How frequently the sync should be scheduled, in seconds. Kept around for API purposes. */
     public final long period;
+    /** Whether this periodic sync runs on a {@link SyncService}. */
+    public final boolean isService;
     /**
-     * {@hide}
      * How much flexibility can be taken in scheduling the sync, in seconds.
+     * {@hide}
      */
     public final long flexTime;
 
@@ -48,44 +52,74 @@
     public PeriodicSync(Account account, String authority, Bundle extras, long periodInSeconds) {
         this.account = account;
         this.authority = authority;
+        this.service = null;
+        this.isService = false;
         if (extras == null) {
             this.extras = new Bundle();
         } else {
             this.extras = new Bundle(extras);
         }
         this.period = periodInSeconds;
-        // Initialise to a sane value.
+        // Old API uses default flex time. No-one should be using this ctor anyway.
         this.flexTime = 0L;
     }
 
     /**
-     * {@hide}
      * Create a copy of a periodic sync.
+     * {@hide}
      */
     public PeriodicSync(PeriodicSync other) {
         this.account = other.account;
         this.authority = other.authority;
+        this.service = other.service;
+        this.isService = other.isService;
         this.extras = new Bundle(other.extras);
         this.period = other.period;
         this.flexTime = other.flexTime;
     }
 
     /**
-     * {@hide}
      * A PeriodicSync for a sync with a specified provider.
+     * {@hide}
      */
     public PeriodicSync(Account account, String authority, Bundle extras,
             long period, long flexTime) {
         this.account = account;
         this.authority = authority;
+        this.service = null;
+        this.isService = false;
+        this.extras = new Bundle(extras);
+        this.period = period;
+        this.flexTime = flexTime;
+    }
+
+    /**
+     * A PeriodicSync for a sync with a specified SyncService.
+     * {@hide}
+     */
+    public PeriodicSync(ComponentName service, Bundle extras,
+            long period,
+            long flexTime) {
+        this.account = null;
+        this.authority = null;
+        this.service = service;
+        this.isService = true;
         this.extras = new Bundle(extras);
         this.period = period;
         this.flexTime = flexTime;
     }
 
     private PeriodicSync(Parcel in) {
-        this.account = in.readParcelable(null);
-        this.authority = in.readString();
+        this.isService = (in.readInt() != 0);
+        if (this.isService) {
+            this.service = in.readParcelable(null);
+            this.account = null;
+            this.authority = null;
+        } else {
+            this.account = in.readParcelable(null);
+            this.authority = in.readString();
+            this.service = null;
+        }
         this.extras = in.readBundle();
         this.period = in.readLong();
         this.flexTime = in.readLong();
@@ -98,8 +132,13 @@
 
     @Override
     public void writeToParcel(Parcel dest, int flags) {
-        dest.writeParcelable(account, flags);
-        dest.writeString(authority);
+        dest.writeInt(isService ? 1 : 0);
+        if (account == null && authority == null) {
+            dest.writeParcelable(service, flags);
+        } else {
+            dest.writeParcelable(account, flags);
+            dest.writeString(authority);
+        }
         dest.writeBundle(extras);
         dest.writeLong(period);
         dest.writeLong(flexTime);
@@ -126,14 +165,24 @@
             return false;
         }
         final PeriodicSync other = (PeriodicSync) o;
-        return account.equals(other.account)
-            && authority.equals(other.authority)
+        if (this.isService != other.isService) {
+            return false;
+        }
+        boolean equal = false;
+        if (this.isService) {
+            equal = service.equals(other.service);
+        } else {
+            equal = account.equals(other.account)
+                    && authority.equals(other.authority);
+        }
+        return equal
             && period == other.period
             && syncExtrasEquals(extras, other.extras);
     }
 
     /**
-     * Periodic sync extra comparison function.
+     * Periodic sync extra comparison function. Duplicated from
+     * {@link com.android.server.content.SyncManager#syncExtrasEquals(Bundle b1, Bundle b2)}
      * {@hide}
      */
     public static boolean syncExtrasEquals(Bundle b1, Bundle b2) {
@@ -158,6 +207,7 @@
     public String toString() {
         return "account: " + account +
                ", authority: " + authority +
+               ", service: " + service +
                ". period: " + period + "s " +
                ", flex: " + flexTime;
     }
diff --git a/core/java/android/content/RestrictionEntry.java b/core/java/android/content/RestrictionEntry.java
index 283a0977..3ff53bf 100644
--- a/core/java/android/content/RestrictionEntry.java
+++ b/core/java/android/content/RestrictionEntry.java
@@ -19,8 +19,6 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 
-import java.lang.annotation.Inherited;
-
 /**
  * Applications can expose restrictions for a restricted user on a
  * multiuser device. The administrator can configure these restrictions that will then be
diff --git a/core/java/android/content/SyncActivityTooManyDeletes.java b/core/java/android/content/SyncActivityTooManyDeletes.java
index 350f35e..093fb08 100644
--- a/core/java/android/content/SyncActivityTooManyDeletes.java
+++ b/core/java/android/content/SyncActivityTooManyDeletes.java
@@ -95,7 +95,7 @@
 //                try {
 //                    final Context authContext = createPackageContext(desc.packageName, 0);
 //                    ImageView imageView = new ImageView(this);
-//                    imageView.setImageDrawable(authContext.getResources().getDrawable(desc.iconId));
+//                    imageView.setImageDrawable(authContext.getDrawable(desc.iconId));
 //                    ll.addView(imageView, lp);
 //                } catch (PackageManager.NameNotFoundException e) {
 //                }
diff --git a/core/java/android/content/SyncInfo.java b/core/java/android/content/SyncInfo.java
index cffc653..146dd99 100644
--- a/core/java/android/content/SyncInfo.java
+++ b/core/java/android/content/SyncInfo.java
@@ -19,7 +19,6 @@
 import android.accounts.Account;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.Parcelable.Creator;
 
 /**
  * Information about the sync operation that is currently underway.
@@ -29,16 +28,24 @@
     public final int authorityId;
 
     /**
-     * The {@link Account} that is currently being synced.
+     * The {@link Account} that is currently being synced. Will be null if this sync is running via
+     * a {@link SyncService}.
      */
     public final Account account;
 
     /**
-     * The authority of the provider that is currently being synced.
+     * The authority of the provider that is currently being synced. Will be null if this sync
+     * is running via a {@link SyncService}.
      */
     public final String authority;
 
     /**
+     * The {@link SyncService} that is targeted by this operation. Null if this sync is running via
+     * a {@link AbstractThreadedSyncAdapter}. 
+     */
+    public final ComponentName service;
+
+    /**
      * The start time of the current sync operation in milliseconds since boot.
      * This is represented in elapsed real time.
      * See {@link android.os.SystemClock#elapsedRealtime()}.
@@ -46,12 +53,13 @@
     public final long startTime;
 
     /** @hide */
-    public SyncInfo(int authorityId, Account account, String authority,
+    public SyncInfo(int authorityId, Account account, String authority, ComponentName service,
             long startTime) {
         this.authorityId = authorityId;
         this.account = account;
         this.authority = authority;
         this.startTime = startTime;
+        this.service = service;
     }
 
     /** @hide */
@@ -60,6 +68,7 @@
         this.account = new Account(other.account.name, other.account.type);
         this.authority = other.authority;
         this.startTime = other.startTime;
+        this.service = other.service;
     }
 
     /** @hide */
@@ -70,17 +79,20 @@
     /** @hide */
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeInt(authorityId);
-        account.writeToParcel(parcel, 0);
+        parcel.writeParcelable(account, flags);
         parcel.writeString(authority);
         parcel.writeLong(startTime);
+        parcel.writeParcelable(service, flags);
+        
     }
 
     /** @hide */
     SyncInfo(Parcel parcel) {
         authorityId = parcel.readInt();
-        account = new Account(parcel);
+        account = parcel.readParcelable(Account.class.getClassLoader());
         authority = parcel.readString();
         startTime = parcel.readLong();
+        service = parcel.readParcelable(ComponentName.class.getClassLoader());
     }
 
     /** @hide */
diff --git a/core/java/android/content/SyncRequest.java b/core/java/android/content/SyncRequest.java
index 6ca283d..a9a62a7 100644
--- a/core/java/android/content/SyncRequest.java
+++ b/core/java/android/content/SyncRequest.java
@@ -23,15 +23,15 @@
 
 public class SyncRequest implements Parcelable {
     private static final String TAG = "SyncRequest";
-    /** Account to pass to the sync adapter. May be null. */
+    /** Account to pass to the sync adapter. Can be null. */
     private final Account mAccountToSync;
     /** Authority string that corresponds to a ContentProvider. */
     private final String mAuthority;
-    /** Sync service identifier. May be null.*/
+    /** {@link SyncService} identifier. */
     private final ComponentName mComponentInfo;
     /** Bundle containing user info as well as sync settings. */
     private final Bundle mExtras;
-    /** Disallow this sync request on metered networks. */
+    /** Don't allow this sync request on metered networks. */
     private final boolean mDisallowMetered;
     /**
      * Anticipated upload size in bytes.
@@ -69,18 +69,14 @@
         return mIsPeriodic;
     }
 
-    /**
-     * {@hide}
-     * @return whether this is an expedited sync.
-     */
     public boolean isExpedited() {
         return mIsExpedited;
     }
 
     /**
      * {@hide}
-     * @return true if this sync uses an account/authority pair, or false if this sync is bound to
-     * a Sync Service.
+     * @return true if this sync uses an account/authority pair, or false if
+     *         this is an anonymous sync bound to an @link AnonymousSyncService.
      */
     public boolean hasAuthority() {
         return mIsAuthority;
@@ -88,34 +84,51 @@
 
     /**
      * {@hide}
+     *
      * @return account object for this sync.
-     * @throws IllegalArgumentException if this function is called for a request that does not
-     * specify an account/provider authority.
+     * @throws IllegalArgumentException if this function is called for a request that targets a
+     * sync service.
      */
     public Account getAccount() {
         if (!hasAuthority()) {
-            throw new IllegalArgumentException("Cannot getAccount() for a sync that does not"
-                    + "specify an authority.");
+            throw new IllegalArgumentException("Cannot getAccount() for a sync that targets a sync"
+                    + "service.");
         }
         return mAccountToSync;
     }
 
     /**
      * {@hide}
+     *
      * @return provider for this sync.
-     * @throws IllegalArgumentException if this function is called for a request that does not
-     * specify an account/provider authority.
+     * @throws IllegalArgumentException if this function is called for a request that targets a
+     * sync service.
      */
     public String getProvider() {
         if (!hasAuthority()) {
-            throw new IllegalArgumentException("Cannot getProvider() for a sync that does not"
-                    + "specify a provider.");
+            throw new IllegalArgumentException("Cannot getProvider() for a sync that targets a"
+                    + "sync service.");
         }
         return mAuthority;
     }
 
     /**
      * {@hide}
+     * Throws a runtime IllegalArgumentException if this function is called for a
+     * SyncRequest that is bound to an account/provider.
+     *
+     * @return ComponentName for the service that this sync will bind to.
+     */
+    public ComponentName getService() {
+        if (hasAuthority()) {
+            throw new IllegalArgumentException(
+                    "Cannot getAnonymousService() for a sync that has specified a provider.");
+        }
+        return mComponentInfo;
+    }
+
+    /**
+     * {@hide}
      * Retrieve bundle for this SyncRequest. Will not be null.
      */
     public Bundle getBundle() {
@@ -129,7 +142,6 @@
     public long getSyncFlexTime() {
         return mSyncFlexTimeSecs;
     }
-
     /**
      * {@hide}
      * @return the last point in time at which this sync must scheduled.
@@ -216,7 +228,7 @@
     }
 
     /**
-     * Builder class for a {@link SyncRequest}. As you build your SyncRequest this class will also
+     * Builder class for a @link SyncRequest. As you build your SyncRequest this class will also
      * perform validation.
      */
     public static class Builder {
@@ -232,9 +244,12 @@
         private static final int SYNC_TARGET_SERVICE = 1;
         /** Specify that this is a sync with a provider. */
         private static final int SYNC_TARGET_ADAPTER = 2;
-        /** Earliest point of displacement into the future at which this sync can occur. */
+        /**
+         * Earliest point of displacement into the future at which this sync can
+         * occur.
+         */
         private long mSyncFlexTimeSecs;
-        /** Latest point of displacement into the future at which this sync must occur. */
+        /** Displacement into the future at which this sync must occur. */
         private long mSyncRunTimeSecs;
         /**
          * Sync configuration information - custom user data explicitly provided by the developer.
@@ -283,8 +298,9 @@
         private boolean mExpedited;
 
         /**
-         * The sync component that contains the sync logic if this is a provider-less sync,
-         * otherwise null.
+         * The {@link SyncService} component that
+         * contains the sync logic if this is a provider-less sync, otherwise
+         * null.
          */
         private ComponentName mComponentName;
         /**
@@ -320,11 +336,15 @@
 
         /**
          * Build a periodic sync. Either this or syncOnce() <b>must</b> be called for this builder.
-         * Syncs are identified by target {@link android.provider}/{@link android.accounts.Account}
-         * and by the contents of the extras bundle.
-         * You cannot reuse the same builder for one-time syncs (by calling this function) after
-         * having specified a periodic sync. If you do, an <code>IllegalArgumentException</code>
+         * Syncs are identified by target {@link SyncService}/{@link android.provider} and by the
+         * contents of the extras bundle.
+         * You cannot reuse the same builder for one-time syncs after having specified a periodic
+         * sync (by calling this function). If you do, an <code>IllegalArgumentException</code>
          * will be thrown.
+         * <p>The bundle for a periodic sync can be queried by applications with the correct
+         * permissions using
+         * {@link ContentResolver#getPeriodicSyncs(Account account, String provider)}, so no
+         * sensitive data should be transferred here.
          *
          * Example usage.
          *
@@ -375,7 +395,6 @@
         }
 
         /**
-         * {@hide}
          * Developer can provide insight into their payload size; optional. -1 specifies unknown,
          * so that you are not restricted to defining both fields.
          *
@@ -389,20 +408,28 @@
         }
 
         /**
-         * @see android.net.ConnectivityManager#isActiveNetworkMetered()
-         * @param disallow true to enforce that this transfer not occur on metered networks.
-         *                 Default false.
+         * Will throw an <code>IllegalArgumentException</code> if called and
+         * {@link #setIgnoreSettings(boolean ignoreSettings)} has already been called.
+         * @param disallow true to allow this transfer on metered networks. Default false.
+         * 
          */
         public Builder setDisallowMetered(boolean disallow) {
+            if (mIgnoreSettings && disallow) {
+                throw new IllegalArgumentException("setDisallowMetered(true) after having"
+                        + "specified that settings are ignored.");
+            }
             mDisallowMetered = disallow;
             return this;
         }
 
         /**
-         * Specify an authority and account for this transfer.
+         * Specify an authority and account for this transfer. Cannot be used with
+         * {@link #setSyncAdapter(ComponentName cname)}.
          *
-         * @param authority String identifying which content provider to sync.
-         * @param account Account to sync. Can be null unless this is a periodic sync.
+         * @param authority
+         * @param account Account to sync. Can be null unless this is a periodic
+         *            sync, for which verification by the ContentResolver will
+         *            fail. If a sync is performed without an account, the
          */
         public Builder setSyncAdapter(Account account, String authority) {
             if (mSyncTarget != SYNC_TARGET_UNKNOWN) {
@@ -419,10 +446,26 @@
         }
 
         /**
-         * Optional developer-provided extras handed back in
-         * {@link AbstractThreadedSyncAdapter#onPerformSync(Account, Bundle, String,
-         * ContentProviderClient, SyncResult)} occurs. This bundle is copied into the SyncRequest
-         * returned by {@link #build()}.
+         * Specify the {@link SyncService} component for this sync. This is not validated until
+         * sync time so providing an incorrect component name here will not fail. Cannot be used
+         * with {@link #setSyncAdapter(Account account, String authority)}.
+         *
+         * @param cname ComponentName to identify your Anonymous service
+         */
+        public Builder setSyncAdapter(ComponentName cname) {
+            if (mSyncTarget != SYNC_TARGET_UNKNOWN) {
+                throw new IllegalArgumentException("Sync target has already been defined.");
+            }
+            mSyncTarget = SYNC_TARGET_SERVICE;
+            mComponentName = cname;
+            mAccount = null;
+            mAuthority = null;
+            return this;
+        }
+
+        /**
+         * Developer-provided extras handed back when sync actually occurs. This bundle is copied
+         * into the SyncRequest returned by {@link #build()}.
          *
          * Example:
          * <pre>
@@ -436,7 +479,7 @@
          *     Bundle extras = new Bundle();
          *     extras.setString("data", syncData);
          *     builder.setExtras(extras);
-         *     ContentResolver.sync(builder.build()); // Each sync() request is for a unique sync.
+         *     ContentResolver.sync(builder.build()); // Each sync() request creates a unique sync.
          *   }
          * </pre>
          * Only values of the following types may be used in the extras bundle:
@@ -477,13 +520,19 @@
         /**
          * Convenience function for setting {@link ContentResolver#SYNC_EXTRAS_IGNORE_SETTINGS}.
          *
-         * A sync can specify that system sync settings be ignored (user has turned sync off). Not
-         * valid for periodic sync and will throw an <code>IllegalArgumentException</code> in
+         * Not valid for periodic sync and will throw an <code>IllegalArgumentException</code> in
          * {@link #build()}.
+         * <p>Throws <code>IllegalArgumentException</code> if called and
+         * {@link #setDisallowMetered(boolean)} has been set.
+         * 
          *
          * @param ignoreSettings true to ignore the sync automatically settings. Default false.
          */
         public Builder setIgnoreSettings(boolean ignoreSettings) {
+            if (mDisallowMetered && ignoreSettings) {
+                throw new IllegalArgumentException("setIgnoreSettings(true) after having specified"
+                        + " sync settings with this builder.");
+            }
             mIgnoreSettings = ignoreSettings;
             return this;
         }
@@ -491,13 +540,13 @@
         /**
          * Convenience function for setting {@link ContentResolver#SYNC_EXTRAS_IGNORE_BACKOFF}.
          *
-         * Force the sync scheduling process to ignore any back-off that was the result of a failed
-         * sync, as well as to invalidate any {@link SyncResult#delayUntil} value that may have
-         * been set by the adapter. Successive failures will not honor this flag. Not valid for
-         * periodic sync and will throw an <code>IllegalArgumentException</code> in
-         * {@link #build()}.
+         * Ignoring back-off will force the sync scheduling process to ignore any back-off that was
+         * the result of a failed sync, as well as to invalidate any {@link SyncResult#delayUntil}
+         * value that may have been set by the adapter. Successive failures will not honor this
+         * flag. Not valid for periodic sync and will throw an <code>IllegalArgumentException</code>
+         * in {@link #build()}.
          *
-         * @param ignoreBackoff ignore back-off settings. Default false.
+         * @param ignoreBackoff ignore back off settings. Default false.
          */
         public Builder setIgnoreBackoff(boolean ignoreBackoff) {
             mIgnoreBackoff = ignoreBackoff;
@@ -507,9 +556,8 @@
         /**
          * Convenience function for setting {@link ContentResolver#SYNC_EXTRAS_MANUAL}.
          *
-         * A manual sync is functionally equivalent to calling {@link #setIgnoreBackoff(boolean)}
-         * and {@link #setIgnoreSettings(boolean)}. Not valid for periodic sync and will throw an
-         * <code>IllegalArgumentException</code> in {@link #build()}.
+         * Not valid for periodic sync and will throw an <code>IllegalArgumentException</code> in
+         * {@link #build()}.
          *
          * @param isManual User-initiated sync or not. Default false.
          */
@@ -519,7 +567,7 @@
         }
 
         /**
-         * An expedited sync runs immediately and will preempt another non-expedited running sync.
+         * An expedited sync runs immediately and can preempt other non-expedited running syncs.
          *
          * Not valid for periodic sync and will throw an <code>IllegalArgumentException</code> in
          * {@link #build()}.
@@ -532,7 +580,6 @@
         }
 
         /**
-         * {@hide}
          * @param priority the priority of this request among all requests from the calling app.
          * Range of [-2,2] similar to how this is done with notifications.
          */
@@ -552,11 +599,11 @@
          *         builder.
          */
         public SyncRequest build() {
+            // Validate the extras bundle
+            ContentResolver.validateSyncExtrasBundle(mCustomExtras);
             if (mCustomExtras == null) {
                 mCustomExtras = new Bundle();
             }
-            // Validate the extras bundle
-            ContentResolver.validateSyncExtrasBundle(mCustomExtras);
             // Combine builder extra flags into the config bundle.
             mSyncConfigExtras = new Bundle();
             if (mIgnoreBackoff) {
@@ -575,51 +622,33 @@
                 mSyncConfigExtras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
             }
             if (mIsManual) {
-                mSyncConfigExtras.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);
+                mSyncConfigExtras.putBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, true);
+                mSyncConfigExtras.putBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, true);
             }
             mSyncConfigExtras.putLong(ContentResolver.SYNC_EXTRAS_EXPECTED_UPLOAD, mTxBytes);
             mSyncConfigExtras.putLong(ContentResolver.SYNC_EXTRAS_EXPECTED_DOWNLOAD, mRxBytes);
             mSyncConfigExtras.putInt(ContentResolver.SYNC_EXTRAS_PRIORITY, mPriority);
             if (mSyncType == SYNC_TYPE_PERIODIC) {
                 // If this is a periodic sync ensure than invalid extras were not set.
-                validatePeriodicExtras(mCustomExtras);
-                validatePeriodicExtras(mSyncConfigExtras);
-                // Verify that account and provider are not null.
-                if (mAccount == null) {
-                    throw new IllegalArgumentException("Account must not be null for periodic"
-                            + " sync.");
-                }
-                if (mAuthority == null) {
-                    throw new IllegalArgumentException("Authority must not be null for periodic"
-                            + " sync.");
+                if (ContentResolver.invalidPeriodicExtras(mCustomExtras) || 
+                        ContentResolver.invalidPeriodicExtras(mSyncConfigExtras)) {
+                    throw new IllegalArgumentException("Illegal extras were set");
                 }
             } else if (mSyncType == SYNC_TYPE_UNKNOWN) {
                 throw new IllegalArgumentException("Must call either syncOnce() or syncPeriodic()");
             }
+            if (mSyncTarget == SYNC_TARGET_SERVICE) {
+                if (mSyncConfigExtras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false)) {
+                    throw new IllegalArgumentException("Cannot specify an initialisation sync"
+                            + " that targets a service.");
+                }
+            }
             // Ensure that a target for the sync has been set.
             if (mSyncTarget == SYNC_TARGET_UNKNOWN) {
-                throw new IllegalArgumentException("Must specify an adapter with "
-                        + "setSyncAdapter(Account, String");
+                throw new IllegalArgumentException("Must specify an adapter with one of"
+                    + "setSyncAdapter(ComponentName) or setSyncAdapter(Account, String");
             }
             return new SyncRequest(this);
         }
-
-        /**
-         * Helper function to throw an <code>IllegalArgumentException</code> if any illegal
-         * extras were set for a periodic sync.
-         *
-         * @param extras bundle to validate.
-         */
-        private void validatePeriodicExtras(Bundle extras) {
-            if (extras.getBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, false)
-                    || extras.getBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false)
-                    || extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false)
-                    || extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false)
-                    || extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false)
-                    || extras.getBoolean(ContentResolver.SYNC_EXTRAS_FORCE, false)
-                    || extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false)) {
-                throw new IllegalArgumentException("Illegal extras were set");
-            }
-        }
-    }
+    }   
 }
diff --git a/core/java/android/content/SyncService.java b/core/java/android/content/SyncService.java
new file mode 100644
index 0000000..4df998c
--- /dev/null
+++ b/core/java/android/content/SyncService.java
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2013 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 android.content;
+
+import android.app.Service;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Process;
+import android.os.Trace;
+import android.util.SparseArray;
+import android.util.Log;
+
+import com.android.internal.annotations.GuardedBy;
+
+/**
+ * Simplified @link android.content.AbstractThreadedSyncAdapter. Folds that
+ * behaviour into a service to which the system can bind when requesting an
+ * anonymous (providerless/accountless) sync.
+ * <p>
+ * In order to perform an anonymous sync operation you must extend this service, implementing the
+ * abstract methods. This service must be declared in the application's manifest as usual. You
+ * can use this service for other work, however you <b> must not </b> override the onBind() method
+ * unless you know what you're doing, which limits the usefulness of this service for other work.
+ * <p>A {@link SyncService} can either be active or inactive. Different to an
+ * {@link AbstractThreadedSyncAdapter}, there is no
+ * {@link ContentResolver#setSyncAutomatically(android.accounts.Account account, String provider, boolean sync)},
+ * as well as no concept of initialisation (you can handle your own if needed).
+ *
+ * <pre>
+ * &lt;service android:name=".MySyncService"/&gt;
+ * </pre>
+ * Like @link android.content.AbstractThreadedSyncAdapter this service supports
+ * multiple syncs at the same time. Each incoming startSync() with a unique tag
+ * will spawn a thread to do the work of that sync. If startSync() is called
+ * with a tag that already exists, a SyncResult.ALREADY_IN_PROGRESS is returned.
+ * Remember that your service will spawn multiple threads if you schedule multiple syncs
+ * at once, so if you mutate local objects you must ensure synchronization.
+ */
+public abstract class SyncService extends Service {
+    private static final String TAG = "SyncService";
+
+    private final SyncAdapterImpl mSyncAdapter = new SyncAdapterImpl();
+
+    /** Keep track of on-going syncs, keyed by bundle. */
+    @GuardedBy("mSyncThreadLock")
+    private final SparseArray<SyncThread>
+            mSyncThreads = new SparseArray<SyncThread>();
+    /** Lock object for accessing the SyncThreads HashMap. */
+    private final Object mSyncThreadLock = new Object();
+    /**
+     * Default key for if this sync service does not support parallel operations. Currently not
+     * sure if null keys will make it into the ArrayMap for KLP, so keeping our default for now.
+     */
+    private static final int KEY_DEFAULT = 0;
+    /** Identifier for this sync service. */
+    private ComponentName mServiceComponent;
+
+    /** {@hide} */
+    public IBinder onBind(Intent intent) {
+        mServiceComponent = new ComponentName(this, getClass());
+        return mSyncAdapter.asBinder();
+    }
+
+    /** {@hide} */
+    private class SyncAdapterImpl extends ISyncServiceAdapter.Stub {
+        @Override
+        public void startSync(ISyncContext syncContext, Bundle extras) {
+            // Wrap the provided Sync Context because it may go away by the time
+            // we call it.
+            final SyncContext syncContextClient = new SyncContext(syncContext);
+            boolean alreadyInProgress = false;
+            final int extrasAsKey = extrasToKey(extras);
+            synchronized (mSyncThreadLock) {
+                if (mSyncThreads.get(extrasAsKey) == null) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "starting sync for : " + mServiceComponent);
+                    }
+                    // Start sync.
+                    SyncThread syncThread = new SyncThread(syncContextClient, extras);
+                    mSyncThreads.put(extrasAsKey, syncThread);
+                    syncThread.start();
+                } else {
+                    // Don't want to call back to SyncManager while still
+                    // holding lock.
+                    alreadyInProgress = true;
+                }
+            }
+            if (alreadyInProgress) {
+                syncContextClient.onFinished(SyncResult.ALREADY_IN_PROGRESS);
+            }
+        }
+
+        /**
+         * Used by the SM to cancel a specific sync using the
+         * com.android.server.content.SyncManager.ActiveSyncContext as a handle.
+         */
+        @Override
+        public void cancelSync(ISyncContext syncContext) {
+            SyncThread runningSync = null;
+            synchronized (mSyncThreadLock) {
+                for (int i = 0; i < mSyncThreads.size(); i++) {
+                    SyncThread thread = mSyncThreads.valueAt(i);
+                    if (thread.mSyncContext.getSyncContextBinder() == syncContext.asBinder()) {
+                        runningSync = thread;
+                        break;
+                    }
+                }
+            }
+            if (runningSync != null) {
+                runningSync.interrupt();
+            }
+        }
+    }
+
+    /**
+     * 
+     * @param extras Bundle for which to compute hash
+     * @return an integer hash that is equal to that of another bundle if they both contain the
+     * same key -> value mappings, however, not necessarily in order.
+     * Based on the toString() representation of the value mapped.
+     */
+    private int extrasToKey(Bundle extras) {
+        int hash = KEY_DEFAULT; // Empty bundle, or no parallel operations enabled.
+        if (parallelSyncsEnabled()) {
+            for (String key : extras.keySet()) {
+                String mapping = key + " " + extras.get(key).toString();
+                hash += mapping.hashCode();
+            }
+        }
+        return hash;
+    }
+
+    /**
+     * {@hide}
+     * Similar to {@link android.content.AbstractThreadedSyncAdapter.SyncThread}. However while
+     * the ATSA considers an already in-progress sync to be if the account provided is currently
+     * syncing, this anonymous sync has no notion of account and considers a sync unique if the
+     * provided bundle is different.
+     */
+    private class SyncThread extends Thread {
+        private final SyncContext mSyncContext;
+        private final Bundle mExtras;
+        private final int mThreadsKey;
+
+        public SyncThread(SyncContext syncContext, Bundle extras) {
+            mSyncContext = syncContext;
+            mExtras = extras;
+            mThreadsKey = extrasToKey(extras);
+        }
+
+        @Override
+        public void run() {
+            Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+
+            Trace.traceBegin(Trace.TRACE_TAG_SYNC_MANAGER, getApplication().getPackageName());
+
+            SyncResult syncResult = new SyncResult();
+            try {
+                if (isCancelled()) return;
+                // Run the sync.
+                SyncService.this.onPerformSync(mExtras, syncResult);
+            } finally {
+                Trace.traceEnd(Trace.TRACE_TAG_SYNC_MANAGER);
+                if (!isCancelled()) {
+                    mSyncContext.onFinished(syncResult);
+                }
+                // Synchronize so that the assignment will be seen by other
+                // threads that also synchronize accesses to mSyncThreads.
+                synchronized (mSyncThreadLock) {
+                    mSyncThreads.remove(mThreadsKey);
+                }
+            }
+        }
+
+        private boolean isCancelled() {
+            return Thread.currentThread().isInterrupted();
+        }
+    }
+
+    /**
+     * Initiate an anonymous sync using this service. SyncAdapter-specific
+     * parameters may be specified in extras, which is guaranteed to not be
+     * null.
+     */
+    public abstract void onPerformSync(Bundle extras, SyncResult syncResult);
+
+    /**
+     * Override this function to indicated whether you want to support parallel syncs.
+     * <p>If you override and return true multiple threads will be spawned within your Service to
+     * handle each concurrent sync request.
+     *
+     * @return false to indicate that this service does not support parallel operations by default.
+     */
+    protected boolean parallelSyncsEnabled() {
+        return false;
+    }
+}
diff --git a/core/java/android/content/Task.java b/core/java/android/content/Task.java
new file mode 100644
index 0000000..ed5ed884
--- /dev/null
+++ b/core/java/android/content/Task.java
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2014 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 android.content;
+
+import android.app.task.TaskService;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Container of data passed to the {@link android.content.TaskManager} fully encapsulating the
+ * parameters required to schedule work against the calling application. These are constructed
+ * using the {@link Task.Builder}.
+ */
+public class Task implements Parcelable {
+
+    public interface NetworkType {
+        public final int ANY = 0;
+        public final int UNMETERED = 1;
+    }
+
+    /**
+     * Linear: retry_time(failure_time, t) = failure_time + initial_retry_delay * t, t >= 1
+     * Expon: retry_time(failure_time, t) = failure_time + initial_retry_delay ^ t, t >= 1
+     */
+    public interface BackoffPolicy {
+        public final int LINEAR = 0;
+        public final int EXPONENTIAL = 1;
+    }
+
+    /**
+     * Unique task id associated with this class. This is assigned to your task by the scheduler.
+     */
+    public int getTaskId() {
+        return taskId;
+    }
+
+    /**
+     * Bundle of extras which are returned to your application at execution time.
+     */
+    public Bundle getExtras() {
+        return extras;
+    }
+
+    /**
+     * Name of the service endpoint that will be called back into by the TaskManager.
+     */
+    public String getServiceClassName() {
+        return serviceClassName;
+    }
+
+    /**
+     * Whether this task needs the device to be plugged in.
+     */
+    public boolean isRequireCharging() {
+        return requireCharging;
+    }
+
+    /**
+     * Whether this task needs the device to be in an Idle maintenance window.
+     */
+    public boolean isRequireDeviceIdle() {
+        return requireDeviceIdle;
+    }
+
+    /**
+     * See {@link android.content.Task.NetworkType} for a description of this value.
+     */
+    public int getNetworkCapabilities() {
+        return networkCapabilities;
+    }
+
+    /**
+     * Set for a task that does not recur periodically, to specify a delay after which the task
+     * will be eligible for execution. This value is not set if the task recurs periodically.
+     */
+    public long getMinLatencyMillis() {
+        return minLatencyMillis;
+    }
+
+    /**
+     * See {@link Builder#setOverrideDeadline(long)}. This value is not set if the task recurs
+     * periodically.
+     */
+    public long getMaxExecutionDelayMillis() {
+        return maxExecutionDelayMillis;
+    }
+
+    /**
+     * Track whether this task will repeat with a given period.
+     */
+    public boolean isPeriodic() {
+        return isPeriodic;
+    }
+
+    /**
+     * Set to the interval between occurrences of this task. This value is <b>not</b> set if the
+     * task does not recur periodically.
+     */
+    public long getIntervalMillis() {
+        return intervalMillis;
+    }
+
+    /**
+     * The amount of time the TaskManager will wait before rescheduling a failed task. This value
+     * will be increased depending on the backoff policy specified at task creation time. Defaults
+     * to 5 seconds.
+     */
+    public long getInitialBackoffMillis() {
+        return initialBackoffMillis;
+    }
+
+    /**
+     * See {@link android.content.Task.BackoffPolicy} for an explanation of the values this field
+     * can take. This defaults to exponential.
+     */
+    public int getBackoffPolicy() {
+        return backoffPolicy;
+    }
+
+    private final int taskId;
+    // TODO: Change this to use PersistableBundle when that lands in master.
+    private final Bundle extras;
+    private final String serviceClassName;
+    private final boolean requireCharging;
+    private final boolean requireDeviceIdle;
+    private final int networkCapabilities;
+    private final long minLatencyMillis;
+    private final long maxExecutionDelayMillis;
+    private final boolean isPeriodic;
+    private final long intervalMillis;
+    private final long initialBackoffMillis;
+    private final int backoffPolicy;
+
+    private Task(Parcel in) {
+        taskId = in.readInt();
+        extras = in.readBundle();
+        serviceClassName = in.readString();
+        requireCharging = in.readInt() == 1;
+        requireDeviceIdle = in.readInt() == 1;
+        networkCapabilities = in.readInt();
+        minLatencyMillis = in.readLong();
+        maxExecutionDelayMillis = in.readLong();
+        isPeriodic = in.readInt() == 1;
+        intervalMillis = in.readLong();
+        initialBackoffMillis = in.readLong();
+        backoffPolicy = in.readInt();
+    }
+
+    private Task(Task.Builder b) {
+        taskId = b.mTaskId;
+        extras = new Bundle(b.mExtras);
+        serviceClassName = b.mTaskServiceClassName;
+        requireCharging = b.mRequiresCharging;
+        requireDeviceIdle = b.mRequiresDeviceIdle;
+        networkCapabilities = b.mNetworkCapabilities;
+        minLatencyMillis = b.mMinLatencyMillis;
+        maxExecutionDelayMillis = b.mMaxExecutionDelayMillis;
+        isPeriodic = b.mIsPeriodic;
+        intervalMillis = b.mIntervalMillis;
+        initialBackoffMillis = b.mInitialBackoffMillis;
+        backoffPolicy = b.mBackoffPolicy;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(taskId);
+        out.writeBundle(extras);
+        out.writeString(serviceClassName);
+        out.writeInt(requireCharging ? 1 : 0);
+        out.writeInt(requireDeviceIdle ? 1 : 0);
+        out.writeInt(networkCapabilities);
+        out.writeLong(minLatencyMillis);
+        out.writeLong(maxExecutionDelayMillis);
+        out.writeInt(isPeriodic ? 1 : 0);
+        out.writeLong(intervalMillis);
+        out.writeLong(initialBackoffMillis);
+        out.writeInt(backoffPolicy);
+    }
+
+    public static final Creator<Task> CREATOR = new Creator<Task>() {
+        @Override
+        public Task createFromParcel(Parcel in) {
+            return new Task(in);
+        }
+
+        @Override
+        public Task[] newArray(int size) {
+            return new Task[size];
+        }
+    };
+
+    /**
+     * Builder class for constructing {@link Task} objects.
+     */
+    public final class Builder {
+        private int mTaskId;
+        private Bundle mExtras;
+        private String mTaskServiceClassName;
+        // Requirements.
+        private boolean mRequiresCharging;
+        private boolean mRequiresDeviceIdle;
+        private int mNetworkCapabilities;
+        // One-off parameters.
+        private long mMinLatencyMillis;
+        private long mMaxExecutionDelayMillis;
+        // Periodic parameters.
+        private boolean mIsPeriodic;
+        private long mIntervalMillis;
+        // Back-off parameters.
+        private long mInitialBackoffMillis = 5000L;
+        private int mBackoffPolicy = BackoffPolicy.EXPONENTIAL;
+        /** Easy way to track whether the client has tried to set a back-off policy. */
+        private boolean mBackoffPolicySet = false;
+
+        /**
+         * @param taskId Application-provided id for this task. Subsequent calls to cancel, or
+         *               tasks created with the same taskId, will update the pre-existing task with
+         *               the same id.
+         * @param cls The endpoint that you implement that will receive the callback from the
+         *            TaskManager.
+         */
+        public Builder(int taskId, Class<TaskService> cls) {
+            mTaskServiceClassName = cls.getClass().getName();
+            mTaskId = taskId;
+        }
+
+        /**
+         * Set optional extras. This is persisted, so we only allow primitive types.
+         * @param extras Bundle containing extras you want the scheduler to hold on to for you.
+         */
+        public Builder setExtras(Bundle extras) {
+            mExtras = extras;
+            return this;
+        }
+
+        /**
+         * Set some description of the kind of network capabilities you would like to have. This
+         * will be a parameter defined in {@link android.content.Task.NetworkType}.
+         * Not calling this function means the network is not necessary.
+         * Bear in mind that calling this function defines network as a strict requirement for your
+         * task if the network requested is not available your task will never run. See
+         * {@link #setOverrideDeadline(long)} to change this behaviour.
+         */
+        public Builder setRequiredNetworkCapabilities(int networkCapabilities) {
+            mNetworkCapabilities = networkCapabilities;
+            return this;
+        }
+
+        /*
+         * Specify that to run this task, the device needs to be plugged in. This defaults to
+         * false.
+         * @param requireCharging Whether or not the device is plugged in.
+         */
+        public Builder setRequiresCharging(boolean requiresCharging) {
+            mRequiresCharging = requiresCharging;
+            return this;
+        }
+
+        /**
+         * Specify that to run, the task needs the device to be in idle mode. This defaults to
+         * false.
+         * <p>Idle mode is a loose definition provided by the system, which means that the device
+         * is not in use, and has not been in use for some time. As such, it is a good time to
+         * perform resource heavy tasks. Bear in mind that battery usage will still be attributed
+         * to your application, and surfaced to the user in battery stats.</p>
+         * @param requiresDeviceIdle Whether or not the device need be within an idle maintenance
+         *                           window.
+         */
+        public Builder setRequiresDeviceIdle(boolean requiresDeviceIdle) {
+            mRequiresDeviceIdle = requiresDeviceIdle;
+            return this;
+        }
+
+        /**
+         * Specify that this task should recur with the provided interval, not more than once per
+         * period. You have no control over when within this interval this task will be executed,
+         * only the guarantee that it will be executed at most once within this interval.
+         * A periodic task will be repeated until the phone is turned off, however it will only be
+         * persisted if the client app has declared the
+         * {@link android.Manifest.permission#RECEIVE_BOOT_COMPLETED} permission. You can schedule
+         * periodic tasks without this permission, they simply will cease to exist after the phone
+         * restarts.
+         * Setting this function on the builder with {@link #setMinimumLatency(long)} or
+         * {@link #setOverrideDeadline(long)} will result in an error.
+         * @param intervalMillis Millisecond interval for which this task will repeat.
+         */
+        public Builder setPeriodic(long intervalMillis) {
+            mIsPeriodic = true;
+            mIntervalMillis = intervalMillis;
+            return this;
+        }
+
+        /**
+         * Specify that this task should be delayed by the provided amount of time.
+         * Because it doesn't make sense setting this property on a periodic task, doing so will
+         * throw an {@link java.lang.IllegalArgumentException} when
+         * {@link android.content.Task.Builder#build()} is called.
+         * @param minLatencyMillis Milliseconds before which this task will not be considered for
+         *                         execution.
+         */
+        public Builder setMinimumLatency(long minLatencyMillis) {
+            mMinLatencyMillis = minLatencyMillis;
+            return this;
+        }
+
+        /**
+         * Set deadline which is the maximum scheduling latency. The task will be run by this
+         * deadline even if other requirements are not met. Because it doesn't make sense setting
+         * this property on a periodic task, doing so will throw an
+         * {@link java.lang.IllegalArgumentException} when
+         * {@link android.content.Task.Builder#build()} is called.
+         */
+        public Builder setOverrideDeadline(long maxExecutionDelayMillis) {
+            mMaxExecutionDelayMillis = maxExecutionDelayMillis;
+            return this;
+        }
+
+        /**
+         * Set up the back-off/retry policy.
+         * This defaults to some respectable values: {5 seconds, Exponential}. We cap back-off at
+         * 1hr.
+         * Note that trying to set a backoff criteria for a task with
+         * {@link #setRequiresDeviceIdle(boolean)} will throw an exception when you call build().
+         * This is because back-off typically does not make sense for these types of tasks. See
+         * {@link android.app.task.TaskService#taskFinished(android.app.task.TaskParams, boolean)}
+         * for more description of the return value for the case of a task executing while in idle
+         * mode.
+         * @param initialBackoffMillis Millisecond time interval to wait initially when task has
+         *                             failed.
+         * @param backoffPolicy is one of {@link BackoffPolicy}
+         */
+        public Builder setBackoffCriteria(long initialBackoffMillis, int backoffPolicy) {
+            mBackoffPolicySet = true;
+            mInitialBackoffMillis = initialBackoffMillis;
+            mBackoffPolicy = backoffPolicy;
+            return this;
+        }
+
+        /**
+         * @return The task object to hand to the TaskManager. This object is immutable.
+         */
+        public Task build() {
+            // Check that extras bundle only contains primitive types.
+            try {
+                for (String key : extras.keySet()) {
+                    Object value = extras.get(key);
+                    if (value == null) continue;
+                    if (value instanceof Long) continue;
+                    if (value instanceof Integer) continue;
+                    if (value instanceof Boolean) continue;
+                    if (value instanceof Float) continue;
+                    if (value instanceof Double) continue;
+                    if (value instanceof String) continue;
+                    throw new IllegalArgumentException("Unexpected value type: "
+                            + value.getClass().getName());
+                }
+            } catch (IllegalArgumentException e) {
+                throw e;
+            } catch (RuntimeException exc) {
+                throw new IllegalArgumentException("error unparcelling Bundle", exc);
+            }
+            // Check that a deadline was not set on a periodic task.
+            if (mIsPeriodic && (mMaxExecutionDelayMillis != 0L)) {
+                throw new IllegalArgumentException("Can't call setOverrideDeadline() on a " +
+                        "periodic task.");
+            }
+            if (mIsPeriodic && (mMinLatencyMillis != 0L)) {
+                throw new IllegalArgumentException("Can't call setMinimumLatency() on a " +
+                        "periodic task");
+            }
+            if (mBackoffPolicySet && mRequiresDeviceIdle) {
+                throw new IllegalArgumentException("An idle mode task will not respect any" +
+                        " back-off policy, so calling setBackoffCriteria with" +
+                        " setRequiresDeviceIdle is an error.");
+            }
+            return new Task(this);
+        }
+    }
+
+}
diff --git a/core/java/android/content/TaskManager.java b/core/java/android/content/TaskManager.java
new file mode 100644
index 0000000..d28d78a
--- /dev/null
+++ b/core/java/android/content/TaskManager.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2014 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 android.content;
+
+import java.util.List;
+
+/**
+ * Class for scheduling various types of tasks with the scheduling framework on the device.
+ *
+ * Get an instance of this class through {@link Context#getSystemService(String)}.
+ */
+public abstract class TaskManager {
+    /*
+     * Returned from {@link #schedule(Task)} when an invalid parameter was supplied. This can occur
+     * if the run-time for your task is too short, or perhaps the system can't resolve the
+     * requisite {@link TaskService} in your package.
+     */
+    static final int RESULT_INVALID_PARAMETERS = -1;
+    /**
+     * Returned from {@link #schedule(Task)} if this application has made too many requests for
+     * work over too short a time.
+     */
+    // TODO: Determine if this is necessary.
+    static final int RESULT_OVER_QUOTA = -2;
+
+    /*
+     * @param task The task you wish scheduled. See {@link Task#TaskBuilder} for more detail on
+     * the sorts of tasks you can schedule.
+     * @return If >0, this int corresponds to the taskId of the successfully scheduled task.
+     * Otherwise you have to compare the return value to the error codes defined in this class.
+     */
+    public abstract int schedule(Task task);
+
+    /**
+     * Cancel a task that is pending in the TaskManager.
+     * @param taskId unique identifier for this task. Obtain this value from the tasks returned by
+     * {@link #getAllPendingTasks()}.
+     * @return
+     */
+    public abstract void cancel(int taskId);
+
+    /**
+     * Cancel all tasks that have been registered with the TaskManager by this package.
+     */
+    public abstract void cancelAll();
+
+    /**
+     * @return a list of all the tasks registered by this package that have not yet been executed.
+     */
+    public abstract List<Task> getAllPendingTasks();
+
+}
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java
index 941b726..c53e545 100644
--- a/core/java/android/content/pm/ActivityInfo.java
+++ b/core/java/android/content/pm/ActivityInfo.java
@@ -16,11 +16,15 @@
 
 package android.content.pm;
 
+import android.annotation.IntDef;
 import android.content.res.Configuration;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Printer;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * Information you can retrieve about a particular application
  * activity or receiver. This corresponds to information collected
@@ -185,6 +189,13 @@
      */
     public static final int FLAG_IMMERSIVE = 0x0800;
     /**
+     * Bit in {@link #flags} indicating that this activity is to be persisted across
+     * reboots for display in the Recents list.
+     * {@link android.R.attr#persistable}
+     * @hide
+     */
+    public static final int FLAG_PERSISTABLE = 0x1000;
+    /**
      * @hide Bit in {@link #flags}: If set, this component will only be seen
      * by the primary user.  Only works with broadcast receivers.  Set from the
      * android.R.attr#primaryUserOnly attribute.
@@ -219,6 +230,28 @@
      */
     public int flags;
 
+    /** @hide */
+    @IntDef({
+            SCREEN_ORIENTATION_UNSPECIFIED,
+            SCREEN_ORIENTATION_LANDSCAPE,
+            SCREEN_ORIENTATION_PORTRAIT,
+            SCREEN_ORIENTATION_USER,
+            SCREEN_ORIENTATION_BEHIND,
+            SCREEN_ORIENTATION_SENSOR,
+            SCREEN_ORIENTATION_NOSENSOR,
+            SCREEN_ORIENTATION_SENSOR_LANDSCAPE,
+            SCREEN_ORIENTATION_SENSOR_PORTRAIT,
+            SCREEN_ORIENTATION_REVERSE_LANDSCAPE,
+            SCREEN_ORIENTATION_REVERSE_PORTRAIT,
+            SCREEN_ORIENTATION_FULL_SENSOR,
+            SCREEN_ORIENTATION_USER_LANDSCAPE,
+            SCREEN_ORIENTATION_USER_PORTRAIT,
+            SCREEN_ORIENTATION_FULL_USER,
+            SCREEN_ORIENTATION_LOCKED
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ScreenOrientation {}
+
     /**
      * Constant corresponding to <code>unspecified</code> in
      * the {@link android.R.attr#screenOrientation} attribute.
@@ -330,6 +363,7 @@
      * {@link #SCREEN_ORIENTATION_FULL_USER},
      * {@link #SCREEN_ORIENTATION_LOCKED},
      */
+    @ScreenOrientation
     public int screenOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
     
     /**
diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java
index 0172509..0d1b262 100644
--- a/core/java/android/content/pm/ApplicationInfo.java
+++ b/core/java/android/content/pm/ApplicationInfo.java
@@ -344,7 +344,7 @@
      * the normal application lifecycle.
      *
      * <p>Comes from the
-     * {@link android.R.styleable#AndroidManifestApplication_cantSaveState android:cantSaveState}
+     * android.R.styleable#AndroidManifestApplication_cantSaveState
      * attribute of the &lt;application&gt; tag.
      *
      * {@hide}
@@ -471,7 +471,13 @@
      * behavior was introduced.
      */
     public int targetSdkVersion;
-    
+
+    /**
+     * The app's declared version code.
+     * @hide
+     */
+    public int versionCode;
+
     /**
      * When false, indicates that all components within this application are
      * considered disabled, regardless of their individually set enabled status.
@@ -523,7 +529,8 @@
         if (sharedLibraryFiles != null) {
             pw.println(prefix + "sharedLibraryFiles=" + sharedLibraryFiles);
         }
-        pw.println(prefix + "enabled=" + enabled + " targetSdkVersion=" + targetSdkVersion);
+        pw.println(prefix + "enabled=" + enabled + " targetSdkVersion=" + targetSdkVersion
+                + " versionCode=" + versionCode);
         if (manageSpaceActivityName != null) {
             pw.println(prefix + "manageSpaceActivityName="+manageSpaceActivityName);
         }
@@ -592,6 +599,7 @@
         dataDir = orig.dataDir;
         uid = orig.uid;
         targetSdkVersion = orig.targetSdkVersion;
+        versionCode = orig.versionCode;
         enabled = orig.enabled;
         enabledSetting = orig.enabledSetting;
         installLocation = orig.installLocation;
@@ -633,6 +641,7 @@
         dest.writeString(dataDir);
         dest.writeInt(uid);
         dest.writeInt(targetSdkVersion);
+        dest.writeInt(versionCode);
         dest.writeInt(enabled ? 1 : 0);
         dest.writeInt(enabledSetting);
         dest.writeInt(installLocation);
@@ -673,6 +682,7 @@
         dataDir = source.readString();
         uid = source.readInt();
         targetSdkVersion = source.readInt();
+        versionCode = source.readInt();
         enabled = source.readInt() != 0;
         enabledSetting = source.readInt();
         installLocation = source.readInt();
diff --git a/core/java/android/content/pm/FeatureInfo.java b/core/java/android/content/pm/FeatureInfo.java
index 89394f9..d919fc3 100644
--- a/core/java/android/content/pm/FeatureInfo.java
+++ b/core/java/android/content/pm/FeatureInfo.java
@@ -18,7 +18,6 @@
 
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.Parcelable.Creator;
 
 /**
  * A single feature that can be requested by an application. This corresponds
diff --git a/core/java/android/content/pm/ILauncherApps.aidl b/core/java/android/content/pm/ILauncherApps.aidl
new file mode 100644
index 0000000..0acf043
--- /dev/null
+++ b/core/java/android/content/pm/ILauncherApps.aidl
@@ -0,0 +1,40 @@
+/**
+ * Copyright (c) 2014, 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 android.content.pm;
+
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.IOnAppsChangedListener;
+import android.content.pm.ResolveInfo;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.UserHandle;
+import java.util.List;
+
+/**
+ * {@hide}
+ */
+interface ILauncherApps {
+    void addOnAppsChangedListener(in IOnAppsChangedListener listener);
+    void removeOnAppsChangedListener(in IOnAppsChangedListener listener);
+    List<ResolveInfo> getLauncherActivities(String packageName, in UserHandle user);
+    ResolveInfo resolveActivity(in Intent intent, in UserHandle user);
+    void startActivityAsUser(in ComponentName component, in Rect sourceBounds,
+            in Bundle opts, in UserHandle user);
+    boolean isPackageEnabled(String packageName, in UserHandle user);
+    boolean isActivityEnabled(in ComponentName component, in UserHandle user);
+}
diff --git a/core/java/android/content/pm/IOnAppsChangedListener.aidl b/core/java/android/content/pm/IOnAppsChangedListener.aidl
new file mode 100644
index 0000000..796b58d
--- /dev/null
+++ b/core/java/android/content/pm/IOnAppsChangedListener.aidl
@@ -0,0 +1,30 @@
+/**
+ * Copyright (c) 2014, 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 android.content.pm;
+
+import android.os.UserHandle;
+
+/**
+ * {@hide}
+ */
+oneway interface IOnAppsChangedListener {
+    void onPackageRemoved(in UserHandle user, String packageName);
+    void onPackageAdded(in UserHandle user, String packageName);
+    void onPackageChanged(in UserHandle user, String packageName);
+    void onPackagesAvailable(in UserHandle user, in String[] packageNames, boolean replacing);
+    void onPackagesUnavailable(in UserHandle user, in String[] packageNames, boolean replacing);
+}
diff --git a/core/java/android/content/pm/IPackageInstallObserver2.aidl b/core/java/android/content/pm/IPackageInstallObserver2.aidl
new file mode 100644
index 0000000..2602ab5
--- /dev/null
+++ b/core/java/android/content/pm/IPackageInstallObserver2.aidl
@@ -0,0 +1,45 @@
+/*
+**
+** Copyright 2014, 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 android.content.pm;
+
+import android.os.Bundle;
+
+/**
+ * API for installation callbacks from the Package Manager.  In certain result cases
+ * additional information will be provided.
+ * @hide
+ */
+oneway interface IPackageInstallObserver2 {
+    /**
+     * The install operation has completed.  {@code returnCode} holds a numeric code
+     * indicating success or failure.  In certain cases the {@code extras} Bundle will
+     * contain additional details:
+     *
+     * <p><table>
+     * <tr>
+     *   <td>INSTALL_FAILED_DUPLICATE_PERMISSION</td>
+     *   <td>Two strings are provided in the extras bundle: EXTRA_EXISTING_PERMISSION
+     *       is the name of the permission that the app is attempting to define, and
+     *       EXTRA_EXISTING_PACKAGE is the package name of the app which has already
+     *       defined the permission.</td>
+     * </tr>
+     * </table>
+     */
+    void packageInstalled(in String packageName, in Bundle extras, int returnCode);
+}
+
diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl
index 20002ad..cf9a296 100644
--- a/core/java/android/content/pm/IPackageManager.aidl
+++ b/core/java/android/content/pm/IPackageManager.aidl
@@ -25,6 +25,7 @@
 import android.content.pm.ContainerEncryptionParams;
 import android.content.pm.FeatureInfo;
 import android.content.pm.IPackageInstallObserver;
+import android.content.pm.IPackageInstallObserver2;
 import android.content.pm.IPackageDeleteObserver;
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.IPackageMoveObserver;
@@ -73,6 +74,9 @@
 
     ActivityInfo getActivityInfo(in ComponentName className, int flags, int userId);
 
+    boolean activitySupportsIntent(in ComponentName className, in Intent intent,
+            String resolvedType);
+
     ActivityInfo getReceiverInfo(in ComponentName className, int flags, int userId);
 
     ServiceInfo getServiceInfo(in ComponentName className, int flags, int userId);
@@ -107,6 +111,8 @@
 
     ResolveInfo resolveIntent(in Intent intent, String resolvedType, int flags, int userId);
 
+    boolean canForwardTo(in Intent intent, String resolvedType, int userIdFrom, int userIdDest);
+
     List<ResolveInfo> queryIntentActivities(in Intent intent, 
             String resolvedType, int flags, int userId);
 
@@ -237,6 +243,14 @@
     int getPreferredActivities(out List<IntentFilter> outFilters,
             out List<ComponentName> outActivities, String packageName);
 
+    void addPersistentPreferredActivity(in IntentFilter filter, in ComponentName activity, int userId);
+
+    void clearPackagePersistentPreferredActivities(String packageName, int userId);
+
+    void addForwardingIntentFilter(in IntentFilter filter, int userIdOrig, int userIdDest);
+
+    void clearForwardingIntentFilters(int userIdOrig);
+
     /**
      * Report the set of 'Home' activity candidates, plus (if any) which of them
      * is the current "always use this one" setting.
@@ -402,6 +416,21 @@
             in VerificationParams verificationParams,
             in ContainerEncryptionParams encryptionParams);
 
+    /** Expanded observer versions */
+    void installPackageEtc(in Uri packageURI, IPackageInstallObserver observer,
+            IPackageInstallObserver2 observer2, int flags, in String installerPackageName);
+
+    void installPackageWithVerificationEtc(in Uri packageURI,
+            in IPackageInstallObserver observer, IPackageInstallObserver2 observer2,
+            int flags, in String installerPackageName, in Uri verificationURI,
+            in ManifestDigest manifestDigest, in ContainerEncryptionParams encryptionParams);
+
+    void installPackageWithVerificationAndEncryptionEtc(in Uri packageURI,
+            in IPackageInstallObserver observer, in IPackageInstallObserver2 observer2,
+            int flags, in String installerPackageName,
+            in VerificationParams verificationParams,
+            in ContainerEncryptionParams encryptionParams);
+
     int installExistingPackageAsUser(String packageName, int userId);
 
     void verifyPendingInstall(int id, int verificationCode);
diff --git a/core/java/android/content/pm/LauncherActivityInfo.java b/core/java/android/content/pm/LauncherActivityInfo.java
new file mode 100644
index 0000000..9087338
--- /dev/null
+++ b/core/java/android/content/pm/LauncherActivityInfo.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2014 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 android.content.pm;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Bitmap.Config;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.Log;
+
+/**
+ * A representation of an activity that can belong to this user or a managed
+ * profile associated with this user. It can be used to query the label, icon
+ * and badged icon for the activity.
+ */
+public class LauncherActivityInfo {
+    private static final boolean DEBUG = false;
+    private static final String TAG = "LauncherActivityInfo";
+
+    private final PackageManager mPm;
+    private final UserManager mUm;
+
+    private ActivityInfo mActivityInfo;
+    private ComponentName mComponentName;
+    private UserHandle mUser;
+    // TODO: Fetch this value from PM
+    private long mFirstInstallTime;
+
+    /**
+     * Create a launchable activity object for a given ResolveInfo and user.
+     * 
+     * @param context The context for fetching resources.
+     * @param info ResolveInfo from which to create the LauncherActivityInfo.
+     * @param user The UserHandle of the profile to which this activity belongs.
+     */
+    LauncherActivityInfo(Context context, ResolveInfo info, UserHandle user) {
+        this(context);
+        this.mActivityInfo = info.activityInfo;
+        this.mComponentName = LauncherApps.getComponentName(info);
+        this.mUser = user;
+    }
+
+    LauncherActivityInfo(Context context) {
+        mPm = context.getPackageManager();
+        mUm = UserManager.get(context);
+    }
+
+    /**
+     * Returns the component name of this activity.
+     *
+     * @return ComponentName of the activity
+     */
+    public ComponentName getComponentName() {
+        return mComponentName;
+    }
+
+    /**
+     * Returns the user handle of the user profile that this activity belongs to.
+     *
+     * @return The UserHandle of the profile.
+     */
+    public UserHandle getUser() {
+        return mUser;
+    }
+
+    /**
+     * Retrieves the label for the activity.
+     * 
+     * @return The label for the activity.
+     */
+    public CharSequence getLabel() {
+        return mActivityInfo.loadLabel(mPm);
+    }
+
+    /**
+     * Returns the icon for this activity, without any badging for the profile.
+     * @param density The preferred density of the icon, zero for default density.
+     * @see #getBadgedIcon(int)
+     * @return The drawable associated with the activity
+     */
+    public Drawable getIcon(int density) {
+        // TODO: Use density
+        return mActivityInfo.loadIcon(mPm);
+    }
+
+    /**
+     * Returns the application flags from the ApplicationInfo of the activity.
+     * 
+     * @return Application flags
+     */
+    public int getApplicationFlags() {
+        return mActivityInfo.applicationInfo.flags;
+    }
+
+    /**
+     * Returns the time at which the package was first installed.
+     * @return The time of installation of the package, in milliseconds.
+     */
+    public long getFirstInstallTime() {
+        return mFirstInstallTime;
+    }
+
+    /**
+     * Returns the name for the acitivty from  android:name in the manifest.
+     * @return the name from android:name for the acitivity.
+     */
+    public String getName() {
+        return mActivityInfo.name;
+    }
+
+    /**
+     * Returns the activity icon with badging appropriate for the profile.
+     * @param density Optional density for the icon, or 0 to use the default density.
+     * @return A badged icon for the activity.
+     */
+    public Drawable getBadgedIcon(int density) {
+        int iconRes = mActivityInfo.getIconResource();
+        Resources resources = null;
+        Drawable originalIcon = null;
+        try {
+            resources = mPm.getResourcesForApplication(mActivityInfo.applicationInfo);
+            try {
+                if (density != 0) {
+                    originalIcon = resources.getDrawableForDensity(iconRes, density);
+                }
+            } catch (Resources.NotFoundException e) {
+            }
+        } catch (NameNotFoundException nnfe) {
+        }
+
+        if (originalIcon == null) {
+            originalIcon = mActivityInfo.loadIcon(mPm);
+        }
+
+        if (originalIcon instanceof BitmapDrawable) {
+            return mUm.getBadgedDrawableForUser(
+                    originalIcon, mUser);
+        } else {
+            Log.e(TAG, "Unable to create badged icon for " + mActivityInfo);
+        }
+        return originalIcon;
+    }
+}
diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java
new file mode 100644
index 0000000..8025b60
--- /dev/null
+++ b/core/java/android/content/pm/LauncherApps.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) 2014 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 android.content.pm;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ILauncherApps;
+import android.content.pm.IOnAppsChangedListener;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Class for retrieving a list of launchable activities for the current user and any associated
+ * managed profiles. This is mainly for use by launchers. Apps can be queried for each user profile.
+ * Since the PackageManager will not deliver package broadcasts for other profiles, you can register
+ * for package changes here.
+ */
+public class LauncherApps {
+
+    static final String TAG = "LauncherApps";
+    static final boolean DEBUG = false;
+
+    private Context mContext;
+    private ILauncherApps mService;
+
+    private List<OnAppsChangedListener> mListeners
+            = new ArrayList<OnAppsChangedListener>();
+
+    /**
+     * Callbacks for changes to this and related managed profiles.
+     */
+    public interface OnAppsChangedListener {
+        /**
+         * Indicates that a package was removed from the specified profile.
+         *
+         * @param user The UserHandle of the profile that generated the change.
+         * @param packageName The name of the package that was removed.
+         */
+        void onPackageRemoved(UserHandle user, String packageName);
+
+        /**
+         * Indicates that a package was added to the specified profile.
+         *
+         * @param user The UserHandle of the profile that generated the change.
+         * @param packageName The name of the package that was added.
+         */
+        void onPackageAdded(UserHandle user, String packageName);
+
+        /**
+         * Indicates that a package was modified in the specified profile.
+         *
+         * @param user The UserHandle of the profile that generated the change.
+         * @param packageName The name of the package that has changed.
+         */
+        void onPackageChanged(UserHandle user, String packageName);
+
+        /**
+         * Indicates that one or more packages have become available. For
+         * example, this can happen when a removable storage card has
+         * reappeared.
+         *
+         * @param user The UserHandle of the profile that generated the change.
+         * @param packageNames The names of the packages that have become
+         *            available.
+         * @param replacing Indicates whether these packages are replacing
+         *            existing ones.
+         */
+        void onPackagesAvailable(UserHandle user, String[] packageNames, boolean replacing);
+
+        /**
+         * Indicates that one or more packages have become unavailable. For
+         * example, this can happen when a removable storage card has been
+         * removed.
+         *
+         * @param user The UserHandle of the profile that generated the change.
+         * @param packageNames The names of the packages that have become
+         *            unavailable.
+         * @param replacing Indicates whether the packages are about to be
+         *            replaced with new versions.
+         */
+        void onPackagesUnavailable(UserHandle user, String[] packageNames, boolean replacing);
+    }
+
+    /** @hide */
+    public LauncherApps(Context context, ILauncherApps service) {
+        mContext = context;
+        mService = service;
+    }
+
+    /**
+     * Retrieves a list of launchable activities that match {@link Intent#ACTION_MAIN} and
+     * {@link Intent#CATEGORY_LAUNCHER}, for a specified user.
+     *
+     * @param packageName The specific package to query. If null, it checks all installed packages
+     *            in the profile.
+     * @param user The UserHandle of the profile.
+     * @return List of launchable activities. Can be an empty list but will not be null.
+     */
+    public List<LauncherActivityInfo> getActivityList(String packageName, UserHandle user) {
+        List<ResolveInfo> activities = null;
+        try {
+            activities = mService.getLauncherActivities(packageName, user);
+        } catch (RemoteException re) {
+        }
+        if (activities == null) {
+            return Collections.EMPTY_LIST;
+        }
+        ArrayList<LauncherActivityInfo> lais = new ArrayList<LauncherActivityInfo>();
+        final int count = activities.size();
+        for (int i = 0; i < count; i++) {
+            ResolveInfo ri = activities.get(i);
+            LauncherActivityInfo lai = new LauncherActivityInfo(mContext, ri, user);
+            if (DEBUG) {
+                Log.v(TAG, "Returning activity for profile " + user + " : "
+                        + lai.getComponentName());
+            }
+            lais.add(lai);
+        }
+        return lais;
+    }
+
+    static ComponentName getComponentName(ResolveInfo ri) {
+        return new ComponentName(ri.activityInfo.packageName, ri.activityInfo.name);
+    }
+
+    /**
+     * Returns the activity info for a given intent and user handle, if it resolves. Otherwise it
+     * returns null.
+     *
+     * @param intent The intent to find a match for.
+     * @param user The profile to look in for a match.
+     * @return An activity info object if there is a match.
+     */
+    public LauncherActivityInfo resolveActivity(Intent intent, UserHandle user) {
+        try {
+            ResolveInfo ri = mService.resolveActivity(intent, user);
+            if (ri != null) {
+                LauncherActivityInfo info = new LauncherActivityInfo(mContext, ri, user);
+                return info;
+            }
+        } catch (RemoteException re) {
+            return null;
+        }
+        return null;
+    }
+
+    /**
+     * Starts an activity in the specified profile.
+     *
+     * @param component The ComponentName of the activity to launch
+     * @param sourceBounds The Rect containing the source bounds of the clicked icon
+     * @param opts Options to pass to startActivity
+     * @param user The UserHandle of the profile
+     */
+    public void startActivityForProfile(ComponentName component, Rect sourceBounds,
+            Bundle opts, UserHandle user) {
+        if (DEBUG) {
+            Log.i(TAG, "StartActivityForProfile " + component + " " + user.getIdentifier());
+        }
+        try {
+            mService.startActivityAsUser(component, sourceBounds, opts, user);
+        } catch (RemoteException re) {
+            // Oops!
+        }
+    }
+
+    /**
+     * Checks if the package is installed and enabled for a profile.
+     *
+     * @param packageName The package to check.
+     * @param user The UserHandle of the profile.
+     *
+     * @return true if the package exists and is enabled.
+     */
+    public boolean isPackageEnabledForProfile(String packageName, UserHandle user) {
+        try {
+            return mService.isPackageEnabled(packageName, user);
+        } catch (RemoteException re) {
+            return false;
+        }
+    }
+
+    /**
+     * Checks if the activity exists and it enabled for a profile.
+     *
+     * @param component The activity to check.
+     * @param user The UserHandle of the profile.
+     *
+     * @return true if the activity exists and is enabled.
+     */
+    public boolean isActivityEnabledForProfile(ComponentName component, UserHandle user) {
+        try {
+            return mService.isActivityEnabled(component, user);
+        } catch (RemoteException re) {
+            return false;
+        }
+    }
+
+
+    /**
+     * Adds a listener for changes to packages in current and managed profiles.
+     *
+     * @param listener The listener to add.
+     */
+    public synchronized void addOnAppsChangedListener(OnAppsChangedListener listener) {
+        if (listener != null && !mListeners.contains(listener)) {
+            mListeners.add(listener);
+            if (mListeners.size() == 1) {
+                try {
+                    mService.addOnAppsChangedListener(mAppsChangedListener);
+                } catch (RemoteException re) {
+                }
+            }
+        }
+    }
+
+    /**
+     * Removes a listener that was previously added.
+     *
+     * @param listener The listener to remove.
+     * @see #addOnAppsChangedListener(OnAppsChangedListener)
+     */
+    public synchronized void removeOnAppsChangedListener(OnAppsChangedListener listener) {
+        mListeners.remove(listener);
+        if (mListeners.size() == 0) {
+            try {
+                mService.removeOnAppsChangedListener(mAppsChangedListener);
+            } catch (RemoteException re) {
+            }
+        }
+    }
+
+    private IOnAppsChangedListener.Stub mAppsChangedListener = new IOnAppsChangedListener.Stub() {
+
+        @Override
+        public void onPackageRemoved(UserHandle user, String packageName) throws RemoteException {
+            if (DEBUG) {
+                Log.d(TAG, "onPackageRemoved " + user.getIdentifier() + "," + packageName);
+            }
+            synchronized (LauncherApps.this) {
+                for (OnAppsChangedListener listener : mListeners) {
+                    listener.onPackageRemoved(user, packageName);
+                }
+            }
+        }
+
+        @Override
+        public void onPackageChanged(UserHandle user, String packageName) throws RemoteException {
+            if (DEBUG) {
+                Log.d(TAG, "onPackageChanged " + user.getIdentifier() + "," + packageName);
+            }
+            synchronized (LauncherApps.this) {
+                for (OnAppsChangedListener listener : mListeners) {
+                    listener.onPackageChanged(user, packageName);
+                }
+            }
+        }
+
+        @Override
+        public void onPackageAdded(UserHandle user, String packageName) throws RemoteException {
+            if (DEBUG) {
+                Log.d(TAG, "onPackageAdded " + user.getIdentifier() + "," + packageName);
+            }
+            synchronized (LauncherApps.this) {
+                for (OnAppsChangedListener listener : mListeners) {
+                    listener.onPackageAdded(user, packageName);
+                }
+            }
+        }
+
+        @Override
+        public void onPackagesAvailable(UserHandle user, String[] packageNames, boolean replacing)
+                throws RemoteException {
+            if (DEBUG) {
+                Log.d(TAG, "onPackagesAvailable " + user.getIdentifier() + "," + packageNames);
+            }
+            synchronized (LauncherApps.this) {
+                for (OnAppsChangedListener listener : mListeners) {
+                    listener.onPackagesAvailable(user, packageNames, replacing);
+                }
+            }
+        }
+
+        @Override
+        public void onPackagesUnavailable(UserHandle user, String[] packageNames, boolean replacing)
+                throws RemoteException {
+            if (DEBUG) {
+                Log.d(TAG, "onPackagesUnavailable " + user.getIdentifier() + "," + packageNames);
+            }
+            synchronized (LauncherApps.this) {
+                for (OnAppsChangedListener listener : mListeners) {
+                    listener.onPackagesUnavailable(user, packageNames, replacing);
+                }
+            }
+        }
+    };
+}
diff --git a/core/java/android/content/pm/PackageInfo.java b/core/java/android/content/pm/PackageInfo.java
index 785f2b4..ef0c4d5 100644
--- a/core/java/android/content/pm/PackageInfo.java
+++ b/core/java/android/content/pm/PackageInfo.java
@@ -209,6 +209,19 @@
      */
     public static final int INSTALL_LOCATION_PREFER_EXTERNAL = 2;
     /**
+     * Flag for {@link #requiredForProfile}
+     * The application will always be installed for a restricted profile.
+     * @hide
+     */
+    public static final int RESTRICTED_PROFILE = 1;
+    /**
+     * Flag for {@link #requiredForProfile}
+     * The application will always be installed for a managed profile.
+     * @hide
+     */
+    public static final int MANAGED_PROFILE = 2;
+
+    /**
      * The install location requested by the activity.  From the
      * {@link android.R.attr#installLocation} attribute, one of
      * {@link #INSTALL_LOCATION_AUTO},
@@ -218,6 +231,12 @@
      */
     public int installLocation = INSTALL_LOCATION_INTERNAL_ONLY;
 
+    /**
+     * Defines which profiles this app is required for.
+     * @hide
+     */
+    public int requiredForProfile;
+
     /** @hide */
     public boolean requiredForAllUsers;
 
@@ -276,6 +295,7 @@
         dest.writeTypedArray(reqFeatures, parcelableFlags);
         dest.writeInt(installLocation);
         dest.writeInt(requiredForAllUsers ? 1 : 0);
+        dest.writeInt(requiredForProfile);
         dest.writeString(restrictedAccountType);
         dest.writeString(requiredAccountType);
         dest.writeString(overlayTarget);
@@ -318,6 +338,7 @@
         reqFeatures = source.createTypedArray(FeatureInfo.CREATOR);
         installLocation = source.readInt();
         requiredForAllUsers = source.readInt() != 0;
+        requiredForProfile = source.readInt();
         restrictedAccountType = source.readString();
         requiredAccountType = source.readString();
         overlayTarget = source.readString();
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 226f5a6..484a2a1 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -16,8 +16,10 @@
 
 package android.content.pm;
 
+import android.annotation.IntDef;
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
+import android.app.PackageInstallObserver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
@@ -33,6 +35,8 @@
 import android.util.DisplayMetrics;
 
 import java.io.File;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.List;
 
 /**
@@ -190,6 +194,11 @@
      */
     public static final int MATCH_DEFAULT_ONLY   = 0x00010000;
 
+    /** @hide */
+    @IntDef({PERMISSION_GRANTED, PERMISSION_DENIED})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface PermissionResult {}
+
     /**
      * Permission check result: this is returned by {@link #checkPermission}
      * if the permission has been granted to the given package.
@@ -677,12 +686,26 @@
     /**
      * Installation failed return code: this is passed to the {@link IPackageInstallObserver} by
      * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
+     * if the system failed to install the package because it is attempting to define a
+     * permission that is already defined by some existing package.
+     *
+     * <p>The package name of the app which has already defined the permission is passed to
+     * a {@link IPackageInstallObserver2}, if any, as the {@link #EXTRA_EXISTING_PACKAGE}
+     * string extra; and the name of the permission being redefined is passed in the
+     * {@link #EXTRA_EXISTING_PERMISSION} string extra.
+     * @hide
+     */
+    public static final int INSTALL_FAILED_DUPLICATE_PERMISSION = -112;
+
+    /**
+     * Installation failed return code: this is passed to the {@link IPackageInstallObserver} by
+     * {@link #installPackage(android.net.Uri, IPackageInstallObserver, int)}
      * if the system failed to install the package because its packaged native code did not
      * match any of the ABIs supported by the system.
      *
      * @hide
      */
-    public static final int INSTALL_FAILED_NO_MATCHING_ABIS = -112;
+    public static final int INSTALL_FAILED_NO_MATCHING_ABIS = -113;
 
     /**
      * Internal return code for NativeLibraryHelper methods to indicate that the package
@@ -691,7 +714,7 @@
      *
      * @hide
      */
-    public static final int NO_NATIVE_LIBRARIES = -113;
+    public static final int NO_NATIVE_LIBRARIES = -114;
 
     /**
      * Flag parameter for {@link #deletePackage} to indicate that you don't want to delete the
@@ -1212,7 +1235,6 @@
      */
     @SdkConstant(SdkConstantType.FEATURE)
     public static final String FEATURE_LIVE_WALLPAPER = "android.software.live_wallpaper";
-
     /**
      * Feature for {@link #getSystemAvailableFeatures} and
      * {@link #hasSystemFeature}: The device supports app widgets.
@@ -1221,6 +1243,17 @@
     public static final String FEATURE_APP_WIDGETS = "android.software.app_widgets";
 
     /**
+     * @hide
+     * Feature for {@link #getSystemAvailableFeatures} and
+     * {@link #hasSystemFeature}: The device supports
+     * {@link android.service.voice.VoiceInteractionService} and
+     * {@link android.app.VoiceInteractor}.
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_VOICE_RECOGNIZERS = "android.software.voice_recognizers";
+
+
+    /**
      * Feature for {@link #getSystemAvailableFeatures} and
      * {@link #hasSystemFeature}: The device supports a home screen that is replaceable
      * by third party applications.
@@ -1314,6 +1347,13 @@
     public static final String FEATURE_BACKUP = "android.software.backup";
 
     /**
+     * Feature for {@link #getSystemAvailableFeatures} and {@link #hasSystemFeature}:
+     * The device supports managed profiles for enterprise users.
+     */
+    @SdkConstant(SdkConstantType.FEATURE)
+    public static final String FEATURE_MANAGEDPROFILES = "android.software.managedprofiles";
+
+    /**
      * Action to external storage service to clean out removed apps.
      * @hide
      */
@@ -1403,6 +1443,24 @@
             = "android.content.pm.extra.PERMISSION_LIST";
 
     /**
+     * String extra for {@link IPackageInstallObserver2} in the 'extras' Bundle in case of
+     * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}.  This extra names the package which provides
+     * the existing definition for the permission.
+     * @hide
+     */
+    public static final String EXTRA_FAILURE_EXISTING_PACKAGE
+            = "android.content.pm.extra.FAILURE_EXISTING_PACKAGE";
+
+    /**
+     * String extra for {@link IPackageInstallObserver2} in the 'extras' Bundle in case of
+     * {@link #INSTALL_FAILED_DUPLICATE_PERMISSION}.  This extra names the permission that is
+     * being redundantly defined by the package being installed.
+     * @hide
+     */
+    public static final String EXTRA_FAILURE_EXISTING_PERMISSION
+            = "android.content.pm.extra.FAILURE_EXISTING_PERMISSION";
+
+    /**
      * Retrieve overall information about an application package that is
      * installed on the system.
      * <p>
@@ -2781,11 +2839,14 @@
      * 'content:' URI.
      * @param observer An observer callback to get notified when the package installation is
      * complete. {@link IPackageInstallObserver#packageInstalled(String, int)} will be
-     * called when that happens.  observer may be null to indicate that no callback is desired.
+     * called when that happens.  This parameter must not be null.
      * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
      * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
      * @param installerPackageName Optional package name of the application that is performing the
      * installation. This identifies which market the package came from.
+     * @deprecated Use {@link #installPackage(Uri, IPackageInstallObserver2, int, String)}
+     * instead.  This method will continue to be supported but the older observer interface
+     * will not get additional failure details.
      */
     public abstract void installPackage(
             Uri packageURI, IPackageInstallObserver observer, int flags,
@@ -2801,11 +2862,9 @@
      * @param observer An observer callback to get notified when the package
      *            installation is complete.
      *            {@link IPackageInstallObserver#packageInstalled(String, int)}
-     *            will be called when that happens. observer may be null to
-     *            indicate that no callback is desired.
+     *            will be called when that happens. This parameter must not be null.
      * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
-     *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}
-     *            .
+     *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
      * @param installerPackageName Optional package name of the application that
      *            is performing the installation. This identifies which market
      *            the package came from.
@@ -2818,6 +2877,10 @@
      *            these parameters describing the encryption and authentication
      *            used. May be {@code null}.
      * @hide
+     * @deprecated Use {@link #installPackageWithVerification(Uri, IPackageInstallObserver2,
+     * int, String, Uri, ManifestDigest, ContainerEncryptionParams)} instead.  This method will
+     * continue to be supported but the older observer interface will not get additional failure
+     * details.
      */
     public abstract void installPackageWithVerification(Uri packageURI,
             IPackageInstallObserver observer, int flags, String installerPackageName,
@@ -2834,11 +2897,99 @@
      * @param observer An observer callback to get notified when the package
      *            installation is complete.
      *            {@link IPackageInstallObserver#packageInstalled(String, int)}
-     *            will be called when that happens. observer may be null to
-     *            indicate that no callback is desired.
+     *            will be called when that happens. This parameter must not be null.
      * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
-     *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}
-     *            .
+     *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
+     * @param installerPackageName Optional package name of the application that
+     *            is performing the installation. This identifies which market
+     *            the package came from.
+     * @param verificationParams an object that holds signal information to
+     *            assist verification. May be {@code null}.
+     * @param encryptionParams if the package to be installed is encrypted,
+     *            these parameters describing the encryption and authentication
+     *            used. May be {@code null}.
+     *
+     * @hide
+     * @deprecated Use {@link #installPackageWithVerificationAndEncryption(Uri,
+     * IPackageInstallObserver2, int, String, VerificationParams,
+     * ContainerEncryptionParams)} instead.  This method will continue to be
+     * supported but the older observer interface will not get additional failure details.
+     */
+    @Deprecated
+    public abstract void installPackageWithVerificationAndEncryption(Uri packageURI,
+            IPackageInstallObserver observer, int flags, String installerPackageName,
+            VerificationParams verificationParams,
+            ContainerEncryptionParams encryptionParams);
+
+    // Package-install variants that take the new, expanded form of observer interface.
+    // Note that these *also* take the original observer type and will redundantly
+    // report the same information to that observer if supplied; but it is not required.
+
+    /**
+     * @hide
+     *
+     * Install a package. Since this may take a little while, the result will
+     * be posted back to the given observer.  An installation will fail if the calling context
+     * lacks the {@link android.Manifest.permission#INSTALL_PACKAGES} permission, if the
+     * package named in the package file's manifest is already installed, or if there's no space
+     * available on the device.
+     *
+     * @param packageURI The location of the package file to install.  This can be a 'file:' or a
+     * 'content:' URI.
+     * @param observer An observer callback to get notified when the package installation is
+     * complete. {@link PackageInstallObserver#packageInstalled(String, Bundle, int)} will be
+     * called when that happens. This parameter must not be null.
+     * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
+     * {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
+     * @param installerPackageName Optional package name of the application that is performing the
+     * installation. This identifies which market the package came from.
+     */
+    public abstract void installPackage(
+            Uri packageURI, PackageInstallObserver observer,
+            int flags, String installerPackageName);
+
+    /**
+     * Similar to
+     * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
+     * with an extra verification file provided.
+     *
+     * @param packageURI The location of the package file to install. This can
+     *            be a 'file:' or a 'content:' URI.
+     * @param observer An observer callback to get notified when the package installation is
+     * complete. {@link PackageInstallObserver#packageInstalled(String, Bundle, int)} will be
+     * called when that happens. This parameter must not be null.
+     * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
+     *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
+     * @param installerPackageName Optional package name of the application that
+     *            is performing the installation. This identifies which market
+     *            the package came from.
+     * @param verificationURI The location of the supplementary verification
+     *            file. This can be a 'file:' or a 'content:' URI. May be
+     *            {@code null}.
+     * @param manifestDigest an object that holds the digest of the package
+     *            which can be used to verify ownership. May be {@code null}.
+     * @param encryptionParams if the package to be installed is encrypted,
+     *            these parameters describing the encryption and authentication
+     *            used. May be {@code null}.
+     * @hide
+     */
+    public abstract void installPackageWithVerification(Uri packageURI,
+            PackageInstallObserver observer, int flags, String installerPackageName,
+            Uri verificationURI, ManifestDigest manifestDigest,
+            ContainerEncryptionParams encryptionParams);
+
+    /**
+     * Similar to
+     * {@link #installPackage(Uri, IPackageInstallObserver, int, String)} but
+     * with an extra verification information provided.
+     *
+     * @param packageURI The location of the package file to install. This can
+     *            be a 'file:' or a 'content:' URI.
+     * @param observer An observer callback to get notified when the package installation is
+     * complete. {@link PackageInstallObserver#packageInstalled(String, Bundle, int)} will be
+     * called when that happens. This parameter must not be null.
+     * @param flags - possible values: {@link #INSTALL_FORWARD_LOCK},
+     *            {@link #INSTALL_REPLACE_EXISTING}, {@link #INSTALL_ALLOW_TEST}.
      * @param installerPackageName Optional package name of the application that
      *            is performing the installation. This identifies which market
      *            the package came from.
@@ -2851,9 +3002,8 @@
      * @hide
      */
     public abstract void installPackageWithVerificationAndEncryption(Uri packageURI,
-            IPackageInstallObserver observer, int flags, String installerPackageName,
-            VerificationParams verificationParams,
-            ContainerEncryptionParams encryptionParams);
+            PackageInstallObserver observer, int flags, String installerPackageName,
+            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams);
 
     /**
      * If there is already an application with the given package name installed
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 66d4f50..080b37b 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -50,6 +50,7 @@
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.X509EncodedKeySpec;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -57,7 +58,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.jar.JarEntry;
 import java.util.jar.StrictJarFile;
 import java.util.zip.ZipEntry;
 
@@ -148,8 +148,7 @@
     private String[] mSeparateProcesses;
     private boolean mOnlyCoreApps;
     private static final int SDK_VERSION = Build.VERSION.SDK_INT;
-    private static final String SDK_CODENAME = "REL".equals(Build.VERSION.CODENAME)
-            ? null : Build.VERSION.CODENAME;
+    private static final String[] SDK_CODENAMES = Build.VERSION.ACTIVE_CODENAMES;
 
     private int mParseError = PackageManager.INSTALL_SUCCEEDED;
 
@@ -306,6 +305,7 @@
         if ((pi.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) != 0
                 || (pi.applicationInfo.flags&ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
             pi.requiredForAllUsers = p.mRequiredForAllUsers;
+            pi.requiredForProfile = p.mRequiredForProfile;
         }
         pi.restrictedAccountType = p.mRestrictedAccountType;
         pi.requiredAccountType = p.mRequiredAccountType;
@@ -459,7 +459,7 @@
         return pi;
     }
 
-    private Certificate[] loadCertificates(StrictJarFile jarFile, ZipEntry je,
+    private Certificate[][] loadCertificates(StrictJarFile jarFile, ZipEntry je,
             byte[] readBuffer) {
         try {
             // We must read the stream for the JarEntry to retrieve
@@ -469,7 +469,7 @@
                 // not using
             }
             is.close();
-            return je != null ? jarFile.getCertificates(je) : null;
+            return je != null ? jarFile.getCertificateChains(je) : null;
         } catch (IOException e) {
             Slog.w(TAG, "Exception reading " + je.getName() + " in " + jarFile, e);
         } catch (RuntimeException e) {
@@ -632,7 +632,7 @@
         try {
             StrictJarFile jarFile = new StrictJarFile(mArchiveSourcePath);
 
-            Certificate[] certs = null;
+            Certificate[][] certs = null;
 
             if ((flags&PARSE_IS_SYSTEM) != 0) {
                 // If this package comes from the system image, then we
@@ -656,8 +656,8 @@
                         final int N = certs.length;
                         for (int i=0; i<N; i++) {
                             Slog.i(TAG, "  Public key: "
-                                    + certs[i].getPublicKey().getEncoded()
-                                    + " " + certs[i].getPublicKey());
+                                    + certs[i][0].getPublicKey().getEncoded()
+                                    + " " + certs[i][0].getPublicKey());
                         }
                     }
                 }
@@ -677,7 +677,7 @@
                                 ManifestDigest.fromInputStream(jarFile.getInputStream(je));
                     }
 
-                    final Certificate[] localCerts = loadCertificates(jarFile, je, readBuffer);
+                    final Certificate[][] localCerts = loadCertificates(jarFile, je, readBuffer);
                     if (DEBUG_JAR) {
                         Slog.i(TAG, "File " + mArchiveSourcePath + " entry " + je.getName()
                                 + ": certs=" + certs + " ("
@@ -726,8 +726,7 @@
                 final int N = certs.length;
                 pkg.mSignatures = new Signature[certs.length];
                 for (int i=0; i<N; i++) {
-                    pkg.mSignatures[i] = new Signature(
-                            certs[i].getEncoded());
+                    pkg.mSignatures[i] = new Signature(certs[i]);
                 }
             } else {
                 Slog.e(TAG, "Package " + pkg.packageName
@@ -739,7 +738,7 @@
             // Add the signing KeySet to the system
             pkg.mSigningKeys = new HashSet<PublicKey>();
             for (int i=0; i < certs.length; i++) {
-                pkg.mSigningKeys.add(certs[i].getPublicKey());
+                pkg.mSigningKeys.add(certs[i][0].getPublicKey());
             }
 
         } catch (CertificateEncodingException e) {
@@ -988,7 +987,7 @@
         
         TypedArray sa = res.obtainAttributes(attrs,
                 com.android.internal.R.styleable.AndroidManifest);
-        pkg.mVersionCode = sa.getInteger(
+        pkg.mVersionCode = pkg.applicationInfo.versionCode = sa.getInteger(
                 com.android.internal.R.styleable.AndroidManifest_versionCode, 0);
         pkg.mVersionName = sa.getNonConfigurationString(
                 com.android.internal.R.styleable.AndroidManifest_versionName, 0);
@@ -1009,13 +1008,14 @@
             pkg.mSharedUserLabel = sa.getResourceId(
                     com.android.internal.R.styleable.AndroidManifest_sharedUserLabel, 0);
         }
-        sa.recycle();
 
         pkg.installLocation = sa.getInteger(
                 com.android.internal.R.styleable.AndroidManifest_installLocation,
                 PARSE_DEFAULT_INSTALL_LOCATION);
         pkg.applicationInfo.installLocation = pkg.installLocation;
 
+        sa.recycle();
+
         /* Set the global "forward lock" flag */
         if ((flags & PARSE_FORWARD_LOCK) != 0) {
             pkg.applicationInfo.flags |= ApplicationInfo.FLAG_FORWARD_LOCK;
@@ -1104,7 +1104,6 @@
                 if (!parseUsesPermission(pkg, res, parser, attrs, outError)) {
                     return null;
                 }
-
             } else if (tagName.equals("uses-configuration")) {
                 ConfigurationInfo cPref = new ConfigurationInfo();
                 sa = res.obtainAttributes(attrs,
@@ -1200,10 +1199,18 @@
                     sa.recycle();
 
                     if (minCode != null) {
-                        if (!minCode.equals(SDK_CODENAME)) {
-                            if (SDK_CODENAME != null) {
+                        boolean allowedCodename = false;
+                        for (String codename : SDK_CODENAMES) {
+                            if (minCode.equals(codename)) {
+                                allowedCodename = true;
+                                break;
+                            }
+                        }
+                        if (!allowedCodename) {
+                            if (SDK_CODENAMES.length > 0) {
                                 outError[0] = "Requires development platform " + minCode
-                                        + " (current platform is " + SDK_CODENAME + ")";
+                                        + " (current platform is any of "
+                                        + Arrays.toString(SDK_CODENAMES) + ")";
                             } else {
                                 outError[0] = "Requires development platform " + minCode
                                         + " but this is a release platform.";
@@ -1219,10 +1226,18 @@
                     }
                     
                     if (targetCode != null) {
-                        if (!targetCode.equals(SDK_CODENAME)) {
-                            if (SDK_CODENAME != null) {
+                        boolean allowedCodename = false;
+                        for (String codename : SDK_CODENAMES) {
+                            if (targetCode.equals(codename)) {
+                                allowedCodename = true;
+                                break;
+                            }
+                        }
+                        if (!allowedCodename) {
+                            if (SDK_CODENAMES.length > 0) {
                                 outError[0] = "Requires development platform " + targetCode
-                                        + " (current platform is " + SDK_CODENAME + ")";
+                                        + " (current platform is any of "
+                                        + Arrays.toString(SDK_CODENAMES) + ")";
                             } else {
                                 outError[0] = "Requires development platform " + targetCode
                                         + " but this is a release platform.";
@@ -1986,6 +2001,8 @@
                 false)) {
             owner.mRequiredForAllUsers = true;
         }
+        owner.mRequiredForProfile = sa.getInt(
+                com.android.internal.R.styleable.AndroidManifestApplication_requiredForProfile, 0);
 
         String restrictedAccountType = sa.getString(com.android.internal.R.styleable
                 .AndroidManifestApplication_restrictedAccountType);
@@ -2446,6 +2463,11 @@
         }
 
         if (sa.getBoolean(
+                com.android.internal.R.styleable.AndroidManifestActivity_persistable, false)) {
+            a.info.flags |= ActivityInfo.FLAG_PERSISTABLE;
+        }
+
+        if (sa.getBoolean(
                 com.android.internal.R.styleable.AndroidManifestActivity_allowEmbedded,
                 false)) {
             a.info.flags |= ActivityInfo.FLAG_ALLOW_EMBEDDED;
@@ -3291,19 +3313,23 @@
         if (packageName == null || packageName.length() == 0) {
             Slog.i(TAG, "verifier package name was null; skipping");
             return null;
-        } else if (encodedPublicKey == null) {
-            Slog.i(TAG, "verifier " + packageName + " public key was null; skipping");
         }
 
-        PublicKey publicKey = parsePublicKey(encodedPublicKey);
-        if (publicKey != null) {
-            return new VerifierInfo(packageName, publicKey);
+        final PublicKey publicKey = parsePublicKey(encodedPublicKey);
+        if (publicKey == null) {
+            Slog.i(TAG, "Unable to parse verifier public key for " + packageName);
+            return null;
         }
 
-        return null;
+        return new VerifierInfo(packageName, publicKey);
     }
 
-    public static final PublicKey parsePublicKey(String encodedPublicKey) {
+    public static final PublicKey parsePublicKey(final String encodedPublicKey) {
+        if (encodedPublicKey == null) {
+            Slog.i(TAG, "Could not parse null public key");
+            return null;
+        }
+
         EncodedKeySpec keySpec;
         try {
             final byte[] encoded = Base64.decode(encodedPublicKey, Base64.DEFAULT);
@@ -3597,6 +3623,9 @@
         /* An app that's required for all users and cannot be uninstalled for a user */
         public boolean mRequiredForAllUsers;
 
+        /* For which types of profile this app is required */
+        public int mRequiredForProfile;
+
         /* The restricted account authenticator type that is used by this application */
         public String mRestrictedAccountType;
 
diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java
index 875e8de..4a743a5 100644
--- a/core/java/android/content/pm/RegisteredServicesCache.java
+++ b/core/java/android/content/pm/RegisteredServicesCache.java
@@ -140,12 +140,33 @@
         mContext.registerReceiver(mExternalReceiver, sdFilter);
     }
 
+    private final void handlePackageEvent(Intent intent, int userId) {
+        // Don't regenerate the services map when the package is removed or its
+        // ASEC container unmounted as a step in replacement.  The subsequent
+        // _ADDED / _AVAILABLE call will regenerate the map in the final state.
+        final String action = intent.getAction();
+        // it's a new-component action if it isn't some sort of removal
+        final boolean isRemoval = Intent.ACTION_PACKAGE_REMOVED.equals(action)
+                || Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE.equals(action);
+        // if it's a removal, is it part of an update-in-place step?
+        final boolean replacing = intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
+
+        if (isRemoval && replacing) {
+            // package is going away, but it's the middle of an upgrade: keep the current
+            // state and do nothing here.  This clause is intentionally empty.
+        } else {
+            // either we're adding/changing, or it's a removal without replacement, so
+            // we need to recalculate the set of available services
+            generateServicesMap(userId);
+        }
+    }
+
     private final BroadcastReceiver mPackageReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
             final int uid = intent.getIntExtra(Intent.EXTRA_UID, -1);
             if (uid != -1) {
-                generateServicesMap(UserHandle.getUserId(uid));
+                handlePackageEvent(intent, UserHandle.getUserId(uid));
             }
         }
     };
@@ -154,7 +175,7 @@
         @Override
         public void onReceive(Context context, Intent intent) {
             // External apps can't coexist with multi-user, so scan owner
-            generateServicesMap(UserHandle.USER_OWNER);
+            handlePackageEvent(intent, UserHandle.USER_OWNER);
         }
     };
 
diff --git a/core/java/android/content/pm/Signature.java b/core/java/android/content/pm/Signature.java
index 752bf8b..f4e7dc3 100644
--- a/core/java/android/content/pm/Signature.java
+++ b/core/java/android/content/pm/Signature.java
@@ -25,6 +25,7 @@
 import java.lang.ref.SoftReference;
 import java.security.PublicKey;
 import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.util.Arrays;
@@ -38,12 +39,28 @@
     private int mHashCode;
     private boolean mHaveHashCode;
     private SoftReference<String> mStringRef;
+    private Certificate[] mCertificateChain;
 
     /**
      * Create Signature from an existing raw byte array.
      */
     public Signature(byte[] signature) {
         mSignature = signature.clone();
+        mCertificateChain = null;
+    }
+
+    /**
+     * Create signature from a certificate chain. Used for backward
+     * compatibility.
+     *
+     * @throws CertificateEncodingException
+     * @hide
+     */
+    public Signature(Certificate[] certificateChain) throws CertificateEncodingException {
+        mSignature = certificateChain[0].getEncoded();
+        if (certificateChain.length > 1) {
+            mCertificateChain = Arrays.copyOfRange(certificateChain, 1, certificateChain.length);
+        }
     }
 
     private static final int parseHexDigit(int nibble) {
@@ -156,6 +173,29 @@
         return cert.getPublicKey();
     }
 
+    /**
+     * Used for compatibility code that needs to check the certificate chain
+     * during upgrades.
+     *
+     * @throws CertificateEncodingException
+     * @hide
+     */
+    public Signature[] getChainSignatures() throws CertificateEncodingException {
+        if (mCertificateChain == null) {
+            return new Signature[] { this };
+        }
+
+        Signature[] chain = new Signature[1 + mCertificateChain.length];
+        chain[0] = this;
+
+        int i = 1;
+        for (Certificate c : mCertificateChain) {
+            chain[i++] = new Signature(c.getEncoded());
+        }
+
+        return chain;
+    }
+
     @Override
     public boolean equals(Object obj) {
         try {
diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java
index 4c87830..c0383a3 100644
--- a/core/java/android/content/pm/UserInfo.java
+++ b/core/java/android/content/pm/UserInfo.java
@@ -18,6 +18,7 @@
 
 import android.os.Parcel;
 import android.os.Parcelable;
+import android.os.SystemProperties;
 import android.os.UserHandle;
 
 /**
@@ -26,8 +27,8 @@
  */
 public class UserInfo implements Parcelable {
 
-    /** 6 bits for user type */
-    public static final int FLAG_MASK_USER_TYPE = 0x0000003F;
+    /** 8 bits for user type */
+    public static final int FLAG_MASK_USER_TYPE = 0x000000FF;
 
     /**
      * *************************** NOTE ***************************
@@ -63,6 +64,20 @@
      */
     public static final int FLAG_INITIALIZED = 0x00000010;
 
+    /**
+     * Indicates that this user is a profile of another user, for example holding a users
+     * corporate data.
+     */
+    public static final int FLAG_MANAGED_PROFILE = 0x00000020;
+
+    /**
+     * Indicates that this user is disabled.
+     */
+    public static final int FLAG_DISABLED = 0x00000040;
+
+
+    public static final int NO_PROFILE_GROUP_ID = -1;
+
     public int id;
     public int serialNumber;
     public String name;
@@ -70,6 +85,7 @@
     public int flags;
     public long creationTime;
     public long lastLoggedInTime;
+    public int profileGroupId;
 
     /** User is only partially created. */
     public boolean partial;
@@ -83,6 +99,7 @@
         this.name = name;
         this.flags = flags;
         this.iconPath = iconPath;
+        this.profileGroupId = NO_PROFILE_GROUP_ID;
     }
 
     public boolean isPrimary() {
@@ -101,6 +118,22 @@
         return (flags & FLAG_RESTRICTED) == FLAG_RESTRICTED;
     }
 
+    public boolean isManagedProfile() {
+        return (flags & FLAG_MANAGED_PROFILE) == FLAG_MANAGED_PROFILE;
+    }
+
+    public boolean isEnabled() {
+        return (flags & FLAG_DISABLED) != FLAG_DISABLED;
+    }
+
+    /**
+     * @return true if this user can be switched to.
+     **/
+    public boolean supportsSwitchTo() {
+        // TODO remove fw.show_hidden_users when we have finished developing managed profiles.
+        return !isManagedProfile() || SystemProperties.getBoolean("fw.show_hidden_users", false);
+    }
+
     public UserInfo() {
     }
 
@@ -113,6 +146,7 @@
         creationTime = orig.creationTime;
         lastLoggedInTime = orig.lastLoggedInTime;
         partial = orig.partial;
+        profileGroupId = orig.profileGroupId;
     }
 
     public UserHandle getUserHandle() {
@@ -137,6 +171,7 @@
         dest.writeLong(creationTime);
         dest.writeLong(lastLoggedInTime);
         dest.writeInt(partial ? 1 : 0);
+        dest.writeInt(profileGroupId);
     }
 
     public static final Parcelable.Creator<UserInfo> CREATOR
@@ -158,5 +193,6 @@
         creationTime = source.readLong();
         lastLoggedInTime = source.readLong();
         partial = source.readInt() != 0;
+        profileGroupId = source.readInt();
     }
 }
diff --git a/core/java/android/content/pm/XmlSerializerAndParser.java b/core/java/android/content/pm/XmlSerializerAndParser.java
index 935fc02..20cb61c 100644
--- a/core/java/android/content/pm/XmlSerializerAndParser.java
+++ b/core/java/android/content/pm/XmlSerializerAndParser.java
@@ -19,7 +19,6 @@
 import org.xmlpull.v1.XmlSerializer;
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
-import android.os.Parcel;
 
 import java.io.IOException;
 
diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java
index 9ce17e4..0c04401 100644
--- a/core/java/android/content/res/AssetManager.java
+++ b/core/java/android/content/res/AssetManager.java
@@ -17,8 +17,8 @@
 package android.content.res;
 
 import android.os.ParcelFileDescriptor;
-import android.os.Trace;
 import android.util.Log;
+import android.util.SparseArray;
 import android.util.TypedValue;
 
 import java.io.FileNotFoundException;
@@ -267,11 +267,9 @@
         }
     }
 
-    /*package*/ final CharSequence getPooledString(int block, int id) {
-        //System.out.println("Get pooled: block=" + block
-        //                   + ", id=#" + Integer.toHexString(id)
-        //                   + ", blocks=" + mStringBlocks);
-        return mStringBlocks[block-1].get(id);
+    /*package*/ final CharSequence getPooledStringForCookie(int cookie, int id) {
+        // Cookies map to string blocks starting at 1.
+        return mStringBlocks[cookie - 1].get(id);
     }
 
     /**
@@ -536,6 +534,9 @@
     }
     
     public final class AssetInputStream extends InputStream {
+        /**
+         * @hide
+         */
         public final int getAssetInt() {
             throw new UnsupportedOperationException();
         }
@@ -720,6 +721,9 @@
     /*package*/ native static final boolean applyStyle(long theme,
             int defStyleAttr, int defStyleRes, long xmlParser,
             int[] inAttrs, int[] outValues, int[] outIndices);
+    /*package*/ native static final boolean resolveAttrs(long theme,
+            int defStyleAttr, int defStyleRes, int[] inValues,
+            int[] inAttrs, int[] outValues, int[] outIndices);
     /*package*/ native final boolean retrieveAttributes(
             long xmlParser, int[] inAttrs, int[] outValues, int[] outIndices);
     /*package*/ native final int getArraySize(int resource);
@@ -735,6 +739,11 @@
     /**
      * {@hide}
      */
+    public native final SparseArray<String> getAssignedPackageIdentifiers();
+
+    /**
+     * {@hide}
+     */
     public native static final int getGlobalAssetCount();
     
     /**
diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java
index bd23db4..5674154 100644
--- a/core/java/android/content/res/ColorStateList.java
+++ b/core/java/android/content/res/ColorStateList.java
@@ -16,12 +16,16 @@
 
 package android.content.res;
 
+import android.graphics.Color;
+
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
 import android.util.AttributeSet;
+import android.util.MathUtils;
 import android.util.SparseArray;
 import android.util.StateSet;
 import android.util.Xml;
@@ -171,17 +175,16 @@
      * Fill in this object based on the contents of an XML "selector" element.
      */
     private void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
-        throws XmlPullParserException, IOException {
+            throws XmlPullParserException, IOException {
 
         int type;
 
         final int innerDepth = parser.getDepth()+1;
         int depth;
 
-        int listAllocated = 20;
+        int[][] stateSpecList = ArrayUtils.newUnpaddedArray(int[].class, 20);
+        int[] colorList = new int[stateSpecList.length];
         int listSize = 0;
-        int[] colorList = new int[listAllocated];
-        int[][] stateSpecList = new int[listAllocated][];
 
         while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
                && ((depth=parser.getDepth()) >= innerDepth
@@ -194,6 +197,8 @@
                 continue;
             }
 
+            int alphaRes = 0;
+            float alpha = 1.0f;
             int colorRes = 0;
             int color = 0xffff0000;
             boolean haveColor = false;
@@ -205,17 +210,20 @@
             for (i = 0; i < numAttrs; i++) {
                 final int stateResId = attrs.getAttributeNameResource(i);
                 if (stateResId == 0) break;
-                if (stateResId == com.android.internal.R.attr.color) {
+                if (stateResId == com.android.internal.R.attr.alpha) {
+                    alphaRes = attrs.getAttributeResourceValue(i, 0);
+                    if (alphaRes == 0) {
+                        alpha = attrs.getAttributeFloatValue(i, 1.0f);
+                    }
+                } else if (stateResId == com.android.internal.R.attr.color) {
                     colorRes = attrs.getAttributeResourceValue(i, 0);
-
                     if (colorRes == 0) {
                         color = attrs.getAttributeIntValue(i, color);
                         haveColor = true;
                     }
                 } else {
                     stateSpec[j++] = attrs.getAttributeBooleanValue(i, false)
-                                  ? stateResId
-                                  : -stateResId;
+                            ? stateResId : -stateResId;
                 }
             }
             stateSpec = StateSet.trimStateSet(stateSpec, j);
@@ -228,25 +236,20 @@
                         + ": <item> tag requires a 'android:color' attribute.");
             }
 
+            if (alphaRes != 0) {
+                alpha = r.getFraction(alphaRes, 1, 1);
+            }
+
+            // Apply alpha modulation.
+            final int alphaMod = MathUtils.constrain((int) (Color.alpha(color) * alpha), 0, 255);
+            color = (color & 0xFFFFFF) | (alphaMod << 24);
+
             if (listSize == 0 || stateSpec.length == 0) {
                 mDefaultColor = color;
             }
-            
-            if (listSize + 1 >= listAllocated) {
-                listAllocated = ArrayUtils.idealIntArraySize(listSize + 1);
 
-                int[] ncolor = new int[listAllocated];
-                System.arraycopy(colorList, 0, ncolor, 0, listSize);
-
-                int[][] nstate = new int[listAllocated][];
-                System.arraycopy(stateSpecList, 0, nstate, 0, listSize);
-
-                colorList = ncolor;
-                stateSpecList = nstate;
-            }
-
-            colorList[listSize] = color;
-            stateSpecList[listSize] = stateSpec;
+            colorList = GrowingArrayUtils.append(colorList, listSize, color);
+            stateSpecList = GrowingArrayUtils.append(stateSpecList, listSize, stateSpec);
             listSize++;
         }
 
@@ -259,7 +262,17 @@
     public boolean isStateful() {
         return mStateSpecs.length > 1;
     }
-    
+
+    public boolean isOpaque() {
+        final int n = mColors.length;
+        for (int i = 0; i < n; i++) {
+            if (Color.alpha(mColors[i]) != 0xFF) {
+                return false;
+            }
+        }
+        return true;
+    }
+
     /**
      * Return the color associated with the given set of {@link android.view.View} states.
      *
@@ -289,6 +302,25 @@
         return mDefaultColor;
     }
 
+    /**
+     * Return the states in this {@link ColorStateList}.
+     * @return the states in this {@link ColorStateList}
+     * @hide
+     */
+    public int[][] getStates() {
+        return mStateSpecs;
+    }
+
+    /**
+     * Return the colors in this {@link ColorStateList}.
+     * @return the colors in this {@link ColorStateList}
+     * @hide
+     */
+    public int[] getColors() {
+        return mColors;
+    }
+
+    @Override
     public String toString() {
         return "ColorStateList{" +
                "mStateSpecs=" + Arrays.deepToString(mStateSpecs) +
@@ -296,14 +328,16 @@
                "mDefaultColor=" + mDefaultColor + '}';
     }
 
+    @Override
     public int describeContents() {
         return 0;
     }
 
+    @Override
     public void writeToParcel(Parcel dest, int flags) {
         final int N = mStateSpecs.length;
         dest.writeInt(N);
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             dest.writeIntArray(mStateSpecs[i]);
         }
         dest.writeIntArray(mColors);
@@ -311,17 +345,19 @@
 
     public static final Parcelable.Creator<ColorStateList> CREATOR =
             new Parcelable.Creator<ColorStateList>() {
+        @Override
         public ColorStateList[] newArray(int size) {
             return new ColorStateList[size];
         }
 
+        @Override
         public ColorStateList createFromParcel(Parcel source) {
             final int N = source.readInt();
-            int[][] stateSpecs = new int[N][];
-            for (int i=0; i<N; i++) {
+            final int[][] stateSpecs = new int[N][];
+            for (int i = 0; i < N; i++) {
                 stateSpecs[i] = source.createIntArray();
             }
-            int[] colors = source.createIntArray();
+            final int[] colors = source.createIntArray();
             return new ColorStateList(stateSpecs, colors);
         }
     };
diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java
index 7318652..1331777 100644
--- a/core/java/android/content/res/Resources.java
+++ b/core/java/android/content/res/Resources.java
@@ -34,9 +34,9 @@
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.util.TypedValue;
 import android.util.LongSparseArray;
-import android.view.DisplayAdjustments;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -72,86 +72,112 @@
  */
 public class Resources {
     static final String TAG = "Resources";
+
     private static final boolean DEBUG_LOAD = false;
     private static final boolean DEBUG_CONFIG = false;
-    private static final boolean DEBUG_ATTRIBUTES_CACHE = false;
     private static final boolean TRACE_FOR_PRELOAD = false;
     private static final boolean TRACE_FOR_MISS_PRELOAD = false;
 
+    private static final int LAYOUT_DIR_CONFIG = ActivityInfo.activityInfoConfigToNative(
+            ActivityInfo.CONFIG_LAYOUT_DIRECTION);
+
     private static final int ID_OTHER = 0x01000004;
 
     private static final Object sSync = new Object();
-    /*package*/ static Resources mSystem = null;
 
     // Information about preloaded resources.  Note that they are not
     // protected by a lock, because while preloading in zygote we are all
     // single-threaded, and after that these are immutable.
-    private static final LongSparseArray<Drawable.ConstantState>[] sPreloadedDrawables;
-    private static final LongSparseArray<Drawable.ConstantState> sPreloadedColorDrawables
-            = new LongSparseArray<Drawable.ConstantState>();
+    private static final LongSparseArray<ConstantState>[] sPreloadedDrawables;
+    private static final LongSparseArray<ConstantState> sPreloadedColorDrawables
+            = new LongSparseArray<ConstantState>();
     private static final LongSparseArray<ColorStateList> sPreloadedColorStateLists
             = new LongSparseArray<ColorStateList>();
 
+    // Used by BridgeResources in layoutlib
+    static Resources mSystem = null;
+
     private static boolean sPreloaded;
     private static int sPreloadedDensity;
 
     // These are protected by mAccessLock.
+    private final Object mAccessLock = new Object();
+    private final Configuration mTmpConfig = new Configuration();
+    private final ThemedCaches<ConstantState> mDrawableCache =
+            new ThemedCaches<ConstantState>();
+    private final ThemedCaches<ConstantState> mColorDrawableCache =
+            new ThemedCaches<ConstantState>();
+    private final LongSparseArray<WeakReference<ColorStateList>> mColorStateListCache =
+            new LongSparseArray<WeakReference<ColorStateList>>();
 
-    /*package*/ final Object mAccessLock = new Object();
-    /*package*/ final Configuration mTmpConfig = new Configuration();
-    /*package*/ TypedValue mTmpValue = new TypedValue();
-    /*package*/ final LongSparseArray<WeakReference<Drawable.ConstantState> > mDrawableCache
-            = new LongSparseArray<WeakReference<Drawable.ConstantState> >(0);
-    /*package*/ final LongSparseArray<WeakReference<ColorStateList> > mColorStateListCache
-            = new LongSparseArray<WeakReference<ColorStateList> >(0);
-    /*package*/ final LongSparseArray<WeakReference<Drawable.ConstantState> > mColorDrawableCache
-            = new LongSparseArray<WeakReference<Drawable.ConstantState> >(0);
-    /*package*/ boolean mPreloading;
+    private TypedValue mTmpValue = new TypedValue();
+    private boolean mPreloading;
 
-    /*package*/ TypedArray mCachedStyledAttributes = null;
-    RuntimeException mLastRetrievedAttrs = null;
+    private TypedArray mCachedStyledAttributes = null;
 
     private int mLastCachedXmlBlockIndex = -1;
     private final int[] mCachedXmlBlockIds = { 0, 0, 0, 0 };
     private final XmlBlock[] mCachedXmlBlocks = new XmlBlock[4];
 
-    /*package*/ final AssetManager mAssets;
+    private final AssetManager mAssets;
     private final Configuration mConfiguration = new Configuration();
-    /*package*/ final DisplayMetrics mMetrics = new DisplayMetrics();
+    private final DisplayMetrics mMetrics = new DisplayMetrics();
     private NativePluralRules mPluralRule;
 
     private CompatibilityInfo mCompatibilityInfo = CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO;
+
+    @SuppressWarnings("unused")
     private WeakReference<IBinder> mToken;
 
     static {
         sPreloadedDrawables = new LongSparseArray[2];
-        sPreloadedDrawables[0] = new LongSparseArray<Drawable.ConstantState>();
-        sPreloadedDrawables[1] = new LongSparseArray<Drawable.ConstantState>();
+        sPreloadedDrawables[0] = new LongSparseArray<ConstantState>();
+        sPreloadedDrawables[1] = new LongSparseArray<ConstantState>();
     }
 
-    /** @hide */
-    public static int selectDefaultTheme(int curTheme, int targetSdkVersion) {
+    /**
+     * Returns the most appropriate default theme for the specified target SDK version.
+     *
+     * @param curTheme The current theme, or 0 if not specified.
+     * @param targetSdkVersion The target SDK version.
+     * @return A theme resource identifier
+     * @hide
+     */
+    public int selectDefaultTheme(int curTheme, int targetSdkVersion) {
         return selectSystemTheme(curTheme, targetSdkVersion,
-                com.android.internal.R.style.Theme,
-                com.android.internal.R.style.Theme_Holo,
-                com.android.internal.R.style.Theme_DeviceDefault);
+                com.android.internal.R.array.system_theme_sdks,
+                com.android.internal.R.array.system_theme_styles);
     }
-    
-    /** @hide */
-    public static int selectSystemTheme(int curTheme, int targetSdkVersion,
-            int orig, int holo, int deviceDefault) {
+
+    /**
+     * Returns the most appropriate default theme for the specified target SDK version.
+     *
+     * @param curTheme The current theme, or 0 if not specified.
+     * @param targetSdkVersion The target SDK version.
+     * @param sdkArrayId Identifier for integer array resource containing
+     *        sorted minimum SDK versions. First entry must be 0.
+     * @param themeArrayId Identifier for array resource containing the
+     *        default themes that map to SDK versions.
+     * @return A theme resource identifier
+     * @hide
+     */
+    public int selectSystemTheme(
+            int curTheme, int targetSdkVersion, int sdkArrayId, int themeArrayId) {
         if (curTheme != 0) {
             return curTheme;
         }
-        if (targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) {
-            return orig;
+
+        final int[] targetSdks = getIntArray(sdkArrayId);
+        final TypedArray defaultThemes = obtainTypedArray(themeArrayId);
+        for (int i = targetSdks.length - 1; i > 0; i--) {
+            if (targetSdkVersion >= targetSdks[i]) {
+                return defaultThemes.getResourceId(i, 0);
+            }
         }
-        if (targetSdkVersion < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
-            return holo;
-        }
-        return deviceDefault;
+
+        return defaultThemes.getResourceId(0, 0);
     }
-    
+
     /**
      * This exception is thrown by the resource APIs when a requested resource
      * can not be found.
@@ -513,7 +539,7 @@
                                         + Integer.toHexString(id));
         }
         
-        TypedArray array = getCachedStyledAttributes(len);
+        TypedArray array = TypedArray.obtain(this, len);
         array.mLength = mAssets.retrieveArray(id, array.mData);
         array.mIndices[0] = 0;
         
@@ -681,12 +707,27 @@
      * @param id The desired resource identifier, as generated by the aapt
      *           tool. This integer encodes the package, type, and resource
      *           entry. The value 0 is an invalid identifier.
-     *
-     * @throws NotFoundException Throws NotFoundException if the given ID does not exist.
-     * 
      * @return Drawable An object that can be used to draw this resource.
+     * @throws NotFoundException Throws NotFoundException if the given ID does
+     *         not exist.
      */
     public Drawable getDrawable(int id) throws NotFoundException {
+        return getDrawable(id, null);
+    }
+
+    /**
+     * Return a drawable object associated with a particular resource ID and
+     * styled for the specified theme.
+     *
+     * @param id The desired resource identifier, as generated by the aapt
+     *           tool. This integer encodes the package, type, and resource
+     *           entry. The value 0 is an invalid identifier.
+     * @param theme The theme used to style the drawable attributes.
+     * @return Drawable An object that can be used to draw this resource.
+     * @throws NotFoundException Throws NotFoundException if the given ID does
+     *         not exist.
+     */
+    public Drawable getDrawable(int id, Theme theme) throws NotFoundException {
         TypedValue value;
         synchronized (mAccessLock) {
             value = mTmpValue;
@@ -697,7 +738,7 @@
             }
             getValue(id, value, true);
         }
-        Drawable res = loadDrawable(value, id);
+        final Drawable res = loadDrawable(value, id, theme);
         synchronized (mAccessLock) {
             if (mTmpValue == null) {
                 mTmpValue = value;
@@ -715,17 +756,36 @@
      * depending on the underlying resource -- for example, a solid color, PNG
      * image, scalable image, etc. The Drawable API hides these implementation
      * details.
-     * 
+     *
      * @param id The desired resource identifier, as generated by the aapt tool.
      *            This integer encodes the package, type, and resource entry.
      *            The value 0 is an invalid identifier.
      * @param density the desired screen density indicated by the resource as
      *            found in {@link DisplayMetrics}.
+     * @return Drawable An object that can be used to draw this resource.
      * @throws NotFoundException Throws NotFoundException if the given ID does
      *             not exist.
-     * @return Drawable An object that can be used to draw this resource.
+     * @see #getDrawableForDensity(int, int, Theme)
      */
     public Drawable getDrawableForDensity(int id, int density) throws NotFoundException {
+        return getDrawableForDensity(id, density, null);
+    }
+
+    /**
+     * Return a drawable object associated with a particular resource ID for the
+     * given screen density in DPI and styled for the specified theme.
+     *
+     * @param id The desired resource identifier, as generated by the aapt tool.
+     *            This integer encodes the package, type, and resource entry.
+     *            The value 0 is an invalid identifier.
+     * @param density The desired screen density indicated by the resource as
+     *            found in {@link DisplayMetrics}.
+     * @param theme The theme used to style the drawable attributes.
+     * @return Drawable An object that can be used to draw this resource.
+     * @throws NotFoundException Throws NotFoundException if the given ID does
+     *             not exist.
+     */
+    public Drawable getDrawableForDensity(int id, int density, Theme theme) {
         TypedValue value;
         synchronized (mAccessLock) {
             value = mTmpValue;
@@ -752,7 +812,7 @@
             }
         }
 
-        Drawable res = loadDrawable(value, id);
+        final Drawable res = loadDrawable(value, id, theme);
         synchronized (mAccessLock) {
             if (mTmpValue == null) {
                 mTmpValue = value;
@@ -1211,6 +1271,10 @@
          */
         public void applyStyle(int resid, boolean force) {
             AssetManager.applyThemeStyle(mTheme, resid, force);
+
+            // TODO: In very rare cases, we may end up with a hybrid theme
+            // that can't map to a single theme ID.
+            mThemeResId = resid;
         }
 
         /**
@@ -1224,6 +1288,8 @@
          */
         public void setTo(Theme other) {
             AssetManager.copyTheme(mTheme, other.mTheme);
+
+            mThemeResId = other.mThemeResId;
         }
 
         /**
@@ -1246,11 +1312,10 @@
          * @see #obtainStyledAttributes(AttributeSet, int[], int, int)
          */
         public TypedArray obtainStyledAttributes(int[] attrs) {
-            int len = attrs.length;
-            TypedArray array = getCachedStyledAttributes(len);
-            array.mRsrcs = attrs;
-            AssetManager.applyStyle(mTheme, 0, 0, 0, attrs,
-                    array.mData, array.mIndices);
+            final int len = attrs.length;
+            final TypedArray array = TypedArray.obtain(Resources.this, len);
+            array.mTheme = this;
+            AssetManager.applyStyle(mTheme, 0, 0, 0, attrs, array.mData, array.mIndices);
             return array;
         }
 
@@ -1274,14 +1339,10 @@
          * @see #obtainStyledAttributes(int[])
          * @see #obtainStyledAttributes(AttributeSet, int[], int, int)
          */
-        public TypedArray obtainStyledAttributes(int resid, int[] attrs)
-                throws NotFoundException {
-            int len = attrs.length;
-            TypedArray array = getCachedStyledAttributes(len);
-            array.mRsrcs = attrs;
-
-            AssetManager.applyStyle(mTheme, 0, resid, 0, attrs,
-                    array.mData, array.mIndices);
+        public TypedArray obtainStyledAttributes(int resid, int[] attrs) throws NotFoundException {
+            final int len = attrs.length;
+            final TypedArray array = TypedArray.obtain(Resources.this, len);
+            array.mTheme = this;
             if (false) {
                 int[] data = array.mData;
                 
@@ -1308,6 +1369,7 @@
                 }
                 System.out.println(s);
             }
+            AssetManager.applyStyle(mTheme, 0, resid, 0, attrs, array.mData, array.mIndices);
             return array;
         }
 
@@ -1361,20 +1423,18 @@
          */
         public TypedArray obtainStyledAttributes(AttributeSet set,
                 int[] attrs, int defStyleAttr, int defStyleRes) {
-            int len = attrs.length;
-            TypedArray array = getCachedStyledAttributes(len);
+            final int len = attrs.length;
+            final TypedArray array = TypedArray.obtain(Resources.this, len);
 
             // XXX note that for now we only work with compiled XML files.
             // To support generic XML files we will need to manually parse
             // out the attributes from the XML file (applying type information
             // contained in the resources and such).
-            XmlBlock.Parser parser = (XmlBlock.Parser)set;
-            AssetManager.applyStyle(
-                mTheme, defStyleAttr, defStyleRes,
-                parser != null ? parser.mParseState : 0, attrs,
-                        array.mData, array.mIndices);
+            final XmlBlock.Parser parser = (XmlBlock.Parser)set;
+            AssetManager.applyStyle(mTheme, defStyleAttr, defStyleRes,
+                    parser != null ? parser.mParseState : 0, attrs, array.mData, array.mIndices);
 
-            array.mRsrcs = attrs;
+            array.mTheme = this;
             array.mXml = parser;
 
             if (false) {
@@ -1410,6 +1470,45 @@
         }
 
         /**
+         * Retrieve the values for a set of attributes in the Theme. The
+         * contents of the typed array are ultimately filled in by
+         * {@link Resources#getValue}.
+         *
+         * @param values The base set of attribute values, must be equal
+         *               in length to {@code attrs} or {@code null}. All values
+         *               must be of type {@link TypedValue#TYPE_ATTRIBUTE}.
+         * @param attrs The desired attributes to be retrieved.
+         * @param defStyleAttr An attribute in the current theme that contains a
+         *                     reference to a style resource that supplies
+         *                     defaults values for the TypedArray.  Can be
+         *                     0 to not look for defaults.
+         * @param defStyleRes A resource identifier of a style resource that
+         *                    supplies default values for the TypedArray,
+         *                    used only if defStyleAttr is 0 or can not be found
+         *                    in the theme.  Can be 0 to not look for defaults.
+         * @return Returns a TypedArray holding an array of the attribute
+         *         values. Be sure to call {@link TypedArray#recycle()}
+         *         when done with it.
+         * @hide
+         */
+        public TypedArray resolveAttributes(int[] values, int[] attrs,
+                int defStyleAttr, int defStyleRes) {
+            final int len = attrs.length;
+            if (values != null && len != values.length) {
+                throw new IllegalArgumentException(
+                        "Base attribute values must be null or the same length as attrs");
+            }
+
+            final TypedArray array = TypedArray.obtain(Resources.this, len);
+            AssetManager.resolveAttrs(mTheme, defStyleAttr, defStyleRes,
+                    values, attrs, array.mData, array.mIndices);
+            array.mTheme = this;
+            array.mXml = null;
+
+            return array;
+        }
+
+        /**
          * Retrieve the value of an attribute in the Theme.  The contents of
          * <var>outValue</var> are ultimately filled in by
          * {@link Resources#getValue}.
@@ -1426,8 +1525,7 @@
          * @return boolean Returns true if the attribute was found and
          *         <var>outValue</var> is valid, else false.
          */
-        public boolean resolveAttribute(int resid, TypedValue outValue,
-                boolean resolveRefs) {
+        public boolean resolveAttribute(int resid, TypedValue outValue, boolean resolveRefs) {
             boolean got = mAssets.getThemeValue(mTheme, resid, outValue, resolveRefs);
             if (false) {
                 System.out.println(
@@ -1439,6 +1537,30 @@
         }
 
         /**
+         * Returns the resources to which this theme belongs.
+         *
+         * @return Resources to which this theme belongs.
+         */
+        public Resources getResources() {
+            return Resources.this;
+        }
+
+        /**
+         * Return a drawable object associated with a particular resource ID
+         * and styled for the Theme.
+         *
+         * @param id The desired resource identifier, as generated by the aapt
+         *           tool. This integer encodes the package, type, and resource
+         *           entry. The value 0 is an invalid identifier.
+         * @return Drawable An object that can be used to draw this resource.
+         * @throws NotFoundException Throws NotFoundException if the given ID
+         *         does not exist.
+         */
+        public Drawable getDrawable(int id) throws NotFoundException {
+            return Resources.this.getDrawable(id, this);
+        }
+
+        /**
          * Print contents of this theme out to the log.  For debugging only.
          * 
          * @param priority The log priority to use.
@@ -1448,7 +1570,8 @@
         public void dump(int priority, String tag, String prefix) {
             AssetManager.dumpTheme(mTheme, priority, tag, prefix);
         }
-        
+
+        @Override
         protected void finalize() throws Throwable {
             super.finalize();
             mAssets.releaseTheme(mTheme);
@@ -1459,13 +1582,21 @@
             mTheme = mAssets.createTheme();
         }
 
+        @SuppressWarnings("hiding")
         private final AssetManager mAssets;
         private final long mTheme;
 
+        /** Resource identifier for the theme. */
+        private int mThemeResId = 0;
+
         // Needed by layoutlib.
         /*package*/ long getNativeTheme() {
             return mTheme;
         }
+
+        /*package*/ int getAppliedStyleResId() {
+            return mThemeResId;
+        }
     }
 
     /**
@@ -1492,7 +1623,7 @@
      */
     public TypedArray obtainAttributes(AttributeSet set, int[] attrs) {
         int len = attrs.length;
-        TypedArray array = getCachedStyledAttributes(len);
+        TypedArray array = TypedArray.obtain(this, len);
 
         // XXX note that for now we only work with compiled XML files.
         // To support generic XML files we will need to manually parse
@@ -1502,7 +1633,6 @@
         mAssets.retrieveAttributes(parser.mParseState, attrs,
                 array.mData, array.mIndices);
 
-        array.mRsrcs = attrs;
         array.mXml = parser;
 
         return array;
@@ -1574,7 +1704,7 @@
 
             String locale = null;
             if (mConfiguration.locale != null) {
-                locale = mConfiguration.locale.toLanguageTag();
+                locale = adjustLanguageTag(localeToLanguageTag(mConfiguration.locale));
             }
             int width, height;
             if (mMetrics.widthPixels >= mMetrics.heightPixels) {
@@ -1607,8 +1737,8 @@
                         + " final compat is " + mCompatibilityInfo);
             }
 
-            clearDrawableCacheLocked(mDrawableCache, configChanges);
-            clearDrawableCacheLocked(mColorDrawableCache, configChanges);
+            clearDrawableCachesLocked(mDrawableCache, configChanges);
+            clearDrawableCachesLocked(mColorDrawableCache, configChanges);
 
             mColorStateListCache.clear();
 
@@ -1621,18 +1751,25 @@
         }
     }
 
+    private void clearDrawableCachesLocked(
+            ThemedCaches<ConstantState> caches, int configChanges) {
+        final int N = caches.size();
+        for (int i = 0; i < N; i++) {
+            clearDrawableCacheLocked(caches.valueAt(i), configChanges);
+        }
+    }
+
     private void clearDrawableCacheLocked(
-            LongSparseArray<WeakReference<ConstantState>> cache,
-            int configChanges) {
-        int N = cache.size();
+            LongSparseArray<WeakReference<ConstantState>> cache, int configChanges) {
         if (DEBUG_CONFIG) {
             Log.d(TAG, "Cleaning up drawables config changes: 0x"
                     + Integer.toHexString(configChanges));
         }
-        for (int i=0; i<N; i++) {
-            WeakReference<Drawable.ConstantState> ref = cache.valueAt(i);
+        final int N = cache.size();
+        for (int i = 0; i < N; i++) {
+            final WeakReference<ConstantState> ref = cache.valueAt(i);
             if (ref != null) {
-                Drawable.ConstantState cs = ref.get();
+                final ConstantState cs = ref.get();
                 if (cs != null) {
                     if (Configuration.needNewResources(
                             configChanges, cs.getChangingConfigurations())) {
@@ -1655,6 +1792,47 @@
         }
     }
 
+    // Locale.toLanguageTag() is not available in Java6. LayoutLib overrides
+    // this method to enable users to use Java6.
+    private String localeToLanguageTag(Locale locale) {
+        return locale.toLanguageTag();
+    }
+
+    /**
+     * {@code Locale.toLanguageTag} will transform the obsolete (and deprecated)
+     * language codes "in", "ji" and "iw" to "id", "yi" and "he" respectively.
+     *
+     * All released versions of android prior to "L" used the deprecated language
+     * tags, so we will need to support them for backwards compatibility.
+     *
+     * Note that this conversion needs to take place *after* the call to
+     * {@code toLanguageTag} because that will convert all the deprecated codes to
+     * the new ones, even if they're set manually.
+     */
+    private static String adjustLanguageTag(String languageTag) {
+        final int separator = languageTag.indexOf('-');
+        final String language;
+        final String remainder;
+
+        if (separator == -1) {
+            language = languageTag;
+            remainder = "";
+        } else {
+            language = languageTag.substring(0, separator);
+            remainder = languageTag.substring(separator);
+        }
+
+        if ("id".equals(language)) {
+            return "in" + remainder;
+        } else if ("yi".equals(language)) {
+            return "ji" + remainder;
+        } else if ("he".equals(language)) {
+            return "iw" + remainder;
+        } else {
+            return languageTag;
+        }
+    }
+
     /**
      * Update the system resources configuration if they have previously
      * been initialized.
@@ -1988,7 +2166,7 @@
     /**
      * @hide
      */
-    public LongSparseArray<Drawable.ConstantState> getPreloadedDrawables() {
+    public LongSparseArray<ConstantState> getPreloadedDrawables() {
         return sPreloadedDrawables[0];
     }
 
@@ -2006,6 +2184,8 @@
             } catch (NotFoundException e) {
                 resName = "?";
             }
+            // This should never happen in production, so we should log a
+            // warning even if we're not debugging.
             Log.w(TAG, "Preloaded " + name + " resource #0x"
                     + Integer.toHexString(resourceId)
                     + " (" + resName + ") that varies with configuration!!");
@@ -2025,169 +2205,198 @@
         return true;
     }
 
-    static private final int LAYOUT_DIR_CONFIG = ActivityInfo.activityInfoConfigToNative(
-            ActivityInfo.CONFIG_LAYOUT_DIRECTION);
-
-    /*package*/ Drawable loadDrawable(TypedValue value, int id)
-            throws NotFoundException {
-
+    /*package*/ Drawable loadDrawable(TypedValue value, int id, Theme theme) throws NotFoundException {
         if (TRACE_FOR_PRELOAD) {
             // Log only framework resources
             if ((id >>> 24) == 0x1) {
                 final String name = getResourceName(id);
-                if (name != null) android.util.Log.d("PreloadDrawable", name);
+                if (name != null) {
+                    Log.d("PreloadDrawable", name);
+                }
             }
         }
 
-        boolean isColorDrawable = false;
-        if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT &&
-                value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
+        final boolean isColorDrawable;
+        final ThemedCaches<ConstantState> caches;
+        final long key;
+        if (value.type >= TypedValue.TYPE_FIRST_COLOR_INT
+                && value.type <= TypedValue.TYPE_LAST_COLOR_INT) {
             isColorDrawable = true;
+            caches = mColorDrawableCache;
+            key = value.data;
+        } else {
+            isColorDrawable = false;
+            caches = mDrawableCache;
+            key = (((long) value.assetCookie) << 32) | value.data;
         }
-        final long key = isColorDrawable ? value.data :
-                (((long) value.assetCookie) << 32) | value.data;
 
-        Drawable dr = getCachedDrawable(isColorDrawable ? mColorDrawableCache : mDrawableCache, key);
-
-        if (dr != null) {
-            return dr;
+        // First, check whether we have a cached version of this drawable
+        // that's valid for the specified theme. This may apply a theme to a
+        // cached drawable that has themeable attributes but was not previously
+        // themed.
+        if (!mPreloading) {
+            final Drawable cachedDrawable = getCachedDrawable(caches, key, theme);
+            if (cachedDrawable != null) {
+                return cachedDrawable;
+            }
         }
-        Drawable.ConstantState cs;
+
+        // Next, check preloaded drawables. These are unthemed but may have
+        // themeable attributes.
+        final ConstantState cs;
         if (isColorDrawable) {
             cs = sPreloadedColorDrawables.get(key);
         } else {
             cs = sPreloadedDrawables[mConfiguration.getLayoutDirection()].get(key);
         }
+
+        final Drawable dr;
         if (cs != null) {
-            dr = cs.newDrawable(this);
+            dr = cs.newDrawable(this, theme);
+        } else if (isColorDrawable) {
+            dr = new ColorDrawable(value.data);
         } else {
-            if (isColorDrawable) {
-                dr = new ColorDrawable(value.data);
-            }
-
-            if (dr == null) {
-                if (value.string == null) {
-                    throw new NotFoundException(
-                            "Resource is not a Drawable (color or path): " + value);
-                }
-
-                String file = value.string.toString();
-
-                if (TRACE_FOR_MISS_PRELOAD) {
-                    // Log only framework resources
-                    if ((id >>> 24) == 0x1) {
-                        final String name = getResourceName(id);
-                        if (name != null) android.util.Log.d(TAG, "Loading framework drawable #"
-                                + Integer.toHexString(id) + ": " + name
-                                + " at " + file);
-                    }
-                }
-
-                if (DEBUG_LOAD) Log.v(TAG, "Loading drawable for cookie "
-                        + value.assetCookie + ": " + file);
-
-                if (file.endsWith(".xml")) {
-                    Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, file);
-                    try {
-                        XmlResourceParser rp = loadXmlResourceParser(
-                                file, id, value.assetCookie, "drawable");
-                        dr = Drawable.createFromXml(this, rp);
-                        rp.close();
-                    } catch (Exception e) {
-                        Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
-                        NotFoundException rnf = new NotFoundException(
-                            "File " + file + " from drawable resource ID #0x"
-                            + Integer.toHexString(id));
-                        rnf.initCause(e);
-                        throw rnf;
-                    }
-                    Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
-
-                } else {
-                    Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, file);
-                    try {
-                        InputStream is = mAssets.openNonAsset(
-                                value.assetCookie, file, AssetManager.ACCESS_STREAMING);
-        //                System.out.println("Opened file " + file + ": " + is);
-                        dr = Drawable.createFromResourceStream(this, value, is,
-                                file, null);
-                        is.close();
-        //                System.out.println("Created stream: " + dr);
-                    } catch (Exception e) {
-                        Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
-                        NotFoundException rnf = new NotFoundException(
-                            "File " + file + " from drawable resource ID #0x"
-                            + Integer.toHexString(id));
-                        rnf.initCause(e);
-                        throw rnf;
-                    }
-                    Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
-                }
-            }
+            dr = loadDrawableForCookie(value, id, theme);
         }
 
+        // If we were able to obtain a drawable, attempt to place it in the
+        // appropriate cache (e.g. no theme, themed, themeable).
         if (dr != null) {
             dr.setChangingConfigurations(value.changingConfigurations);
-            cs = dr.getConstantState();
-            if (cs != null) {
-                if (mPreloading) {
-                    final int changingConfigs = cs.getChangingConfigurations();
-                    if (isColorDrawable) {
-                        if (verifyPreloadConfig(changingConfigs, 0, value.resourceId,
-                                "drawable")) {
-                            sPreloadedColorDrawables.put(key, cs);
-                        }
-                    } else {
-                        if (verifyPreloadConfig(changingConfigs,
-                                LAYOUT_DIR_CONFIG, value.resourceId, "drawable")) {
-                            if ((changingConfigs&LAYOUT_DIR_CONFIG) == 0) {
-                                // If this resource does not vary based on layout direction,
-                                // we can put it in all of the preload maps.
-                                sPreloadedDrawables[0].put(key, cs);
-                                sPreloadedDrawables[1].put(key, cs);
-                            } else {
-                                // Otherwise, only in the layout dir we loaded it for.
-                                final LongSparseArray<Drawable.ConstantState> preloads
-                                        = sPreloadedDrawables[mConfiguration.getLayoutDirection()];
-                                preloads.put(key, cs);
-                            }
-                        }
-                    }
-                } else {
-                    synchronized (mAccessLock) {
-                        //Log.i(TAG, "Saving cached drawable @ #" +
-                        //        Integer.toHexString(key.intValue())
-                        //        + " in " + this + ": " + cs);
-                        if (isColorDrawable) {
-                            mColorDrawableCache.put(key, new WeakReference<Drawable.ConstantState>(cs));
-                        } else {
-                            mDrawableCache.put(key, new WeakReference<Drawable.ConstantState>(cs));
-                        }
-                    }
-                }
-            }
+            cacheDrawable(value, theme, isColorDrawable, caches, key, dr);
         }
 
         return dr;
     }
 
-    private Drawable getCachedDrawable(
-            LongSparseArray<WeakReference<ConstantState>> drawableCache,
-            long key) {
-        synchronized (mAccessLock) {
-            WeakReference<Drawable.ConstantState> wr = drawableCache.get(key);
-            if (wr != null) {   // we have the key
-                Drawable.ConstantState entry = wr.get();
-                if (entry != null) {
-                    //Log.i(TAG, "Returning cached drawable @ #" +
-                    //        Integer.toHexString(((Integer)key).intValue())
-                    //        + " in " + this + ": " + entry);
-                    return entry.newDrawable(this);
+    private void cacheDrawable(TypedValue value, Theme theme, boolean isColorDrawable,
+            ThemedCaches<ConstantState> caches, long key, Drawable dr) {
+        final ConstantState cs = dr.getConstantState();
+        if (cs == null) {
+            return;
+        }
+
+        if (mPreloading) {
+            // Preloaded drawables never have a theme, but may be themeable.
+            final int changingConfigs = cs.getChangingConfigurations();
+            if (isColorDrawable) {
+                if (verifyPreloadConfig(changingConfigs, 0, value.resourceId, "drawable")) {
+                    sPreloadedColorDrawables.put(key, cs);
                 }
-                else {  // our entry has been purged
-                    drawableCache.delete(key);
+            } else {
+                if (verifyPreloadConfig(
+                        changingConfigs, LAYOUT_DIR_CONFIG, value.resourceId, "drawable")) {
+                    if ((changingConfigs & LAYOUT_DIR_CONFIG) == 0) {
+                        // If this resource does not vary based on layout direction,
+                        // we can put it in all of the preload maps.
+                        sPreloadedDrawables[0].put(key, cs);
+                        sPreloadedDrawables[1].put(key, cs);
+                    } else {
+                        // Otherwise, only in the layout dir we loaded it for.
+                        sPreloadedDrawables[mConfiguration.getLayoutDirection()].put(key, cs);
+                    }
                 }
             }
+        } else {
+            synchronized (mAccessLock) {
+                final LongSparseArray<WeakReference<ConstantState>> themedCache;
+                themedCache = caches.getOrCreate(theme == null ? 0 : theme.mThemeResId);
+                themedCache.put(key, new WeakReference<ConstantState>(cs));
+            }
+        }
+    }
+
+    /**
+     * Loads a drawable from XML or resources stream.
+     */
+    private Drawable loadDrawableForCookie(TypedValue value, int id, Theme theme) {
+        if (value.string == null) {
+            throw new NotFoundException("Resource \"" + getResourceName(id) + "\" ("
+                    + Integer.toHexString(id) + ")  is not a Drawable (color or path): " + value);
+        }
+
+        final String file = value.string.toString();
+
+        if (TRACE_FOR_MISS_PRELOAD) {
+            // Log only framework resources
+            if ((id >>> 24) == 0x1) {
+                final String name = getResourceName(id);
+                if (name != null) {
+                    Log.d(TAG, "Loading framework drawable #" + Integer.toHexString(id)
+                            + ": " + name + " at " + file);
+                }
+            }
+        }
+
+        if (DEBUG_LOAD) {
+            Log.v(TAG, "Loading drawable for cookie " + value.assetCookie + ": " + file);
+        }
+
+        final Drawable dr;
+
+        Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, file);
+        try {
+            if (file.endsWith(".xml")) {
+                final XmlResourceParser rp = loadXmlResourceParser(
+                        file, id, value.assetCookie, "drawable");
+                dr = Drawable.createFromXmlThemed(this, rp, theme);
+                rp.close();
+            } else {
+                final InputStream is = mAssets.openNonAsset(
+                        value.assetCookie, file, AssetManager.ACCESS_STREAMING);
+                dr = Drawable.createFromResourceStreamThemed(this, value, is, file, null, theme);
+                is.close();
+            }
+        } catch (Exception e) {
+            Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
+            final NotFoundException rnf = new NotFoundException(
+                    "File " + file + " from drawable resource ID #0x" + Integer.toHexString(id));
+            rnf.initCause(e);
+            throw rnf;
+        }
+        Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
+
+        return dr;
+    }
+
+    private Drawable getCachedDrawable(ThemedCaches<ConstantState> caches, long key, Theme theme) {
+        synchronized (mAccessLock) {
+            final int themeKey = theme != null ? theme.mThemeResId : 0;
+            final LongSparseArray<WeakReference<ConstantState>> themedCache = caches.get(themeKey);
+            if (themedCache != null) {
+                final Drawable themedDrawable = getCachedDrawableLocked(themedCache, key);
+                if (themedDrawable != null) {
+                    return themedDrawable;
+                }
+            }
+
+            // No cached drawable, we'll need to create a new one.
+            return null;
+        }
+    }
+
+    private ConstantState getConstantStateLocked(
+            LongSparseArray<WeakReference<ConstantState>> drawableCache, long key) {
+        final WeakReference<ConstantState> wr = drawableCache.get(key);
+        if (wr != null) {   // we have the key
+            final ConstantState entry = wr.get();
+            if (entry != null) {
+                //Log.i(TAG, "Returning cached drawable @ #" +
+                //        Integer.toHexString(((Integer)key).intValue())
+                //        + " in " + this + ": " + entry);
+                return entry;
+            } else {  // our entry has been purged
+                drawableCache.delete(key);
+            }
+        }
+        return null;
+    }
+
+    private Drawable getCachedDrawableLocked(
+            LongSparseArray<WeakReference<ConstantState>> drawableCache, long key) {
+        final ConstantState entry = getConstantStateLocked(drawableCache, key);
+        if (entry != null) {
+            return entry.newDrawable(this);
         }
         return null;
     }
@@ -2240,12 +2449,12 @@
                     "Resource is not a ColorStateList (color or path): " + value);
         }
         
-        String file = value.string.toString();
+        final String file = value.string.toString();
 
         if (file.endsWith(".xml")) {
             Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, file);
             try {
-                XmlResourceParser rp = loadXmlResourceParser(
+                final XmlResourceParser rp = loadXmlResourceParser(
                         file, id, value.assetCookie, "colorstatelist"); 
                 csl = ColorStateList.createFromXml(this, rp);
                 rp.close();
@@ -2368,37 +2577,12 @@
                 + Integer.toHexString(id));
     }
 
-    private TypedArray getCachedStyledAttributes(int len) {
+    /*package*/ void recycleCachedStyledAttributes(TypedArray attrs) {
         synchronized (mAccessLock) {
-            TypedArray attrs = mCachedStyledAttributes;
-            if (attrs != null) {
-                mCachedStyledAttributes = null;
-                if (DEBUG_ATTRIBUTES_CACHE) {
-                    mLastRetrievedAttrs = new RuntimeException("here");
-                    mLastRetrievedAttrs.fillInStackTrace();
-                }
-
-                attrs.mLength = len;
-                int fullLen = len * AssetManager.STYLE_NUM_ENTRIES;
-                if (attrs.mData.length >= fullLen) {
-                    return attrs;
-                }
-                attrs.mData = new int[fullLen];
-                attrs.mIndices = new int[1+len];
-                return attrs;
+            final TypedArray cached = mCachedStyledAttributes;
+            if (cached == null || cached.mData.length < attrs.mData.length) {
+                mCachedStyledAttributes = attrs;
             }
-            if (DEBUG_ATTRIBUTES_CACHE) {
-                RuntimeException here = new RuntimeException("here");
-                here.fillInStackTrace();
-                if (mLastRetrievedAttrs != null) {
-                    Log.i(TAG, "Allocated new TypedArray of " + len + " in " + this, here);
-                    Log.i(TAG, "Last retrieved attributes here", mLastRetrievedAttrs);
-                }
-                mLastRetrievedAttrs = here;
-            }
-            return new TypedArray(this,
-                    new int[len*AssetManager.STYLE_NUM_ENTRIES],
-                    new int[1+len], len);
         }
     }
 
@@ -2412,4 +2596,21 @@
         updateConfiguration(null, null);
         mAssets.ensureStringBlocks();
     }
+
+    static class ThemedCaches<T> extends SparseArray<LongSparseArray<WeakReference<T>>> {
+        /**
+         * Returns the cache of drawables styled for the specified theme.
+         * <p>
+         * Drawables that have themeable attributes but were loaded without
+         * specifying a theme are cached at themeResId = 0.
+         */
+        public LongSparseArray<WeakReference<T>> getOrCreate(int themeResId) {
+            LongSparseArray<WeakReference<T>> result = get(themeResId);
+            if (result == null) {
+                result = new LongSparseArray<WeakReference<T>>(1);
+                put(themeResId, result);
+            }
+            return result;
+        }
+    }
 }
diff --git a/core/java/android/content/res/TypedArray.java b/core/java/android/content/res/TypedArray.java
index 83d48aa..15337ce 100644
--- a/core/java/android/content/res/TypedArray.java
+++ b/core/java/android/content/res/TypedArray.java
@@ -16,11 +16,11 @@
 
 package android.content.res;
 
-import android.content.pm.ActivityInfo;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.Log;
+import android.util.Pools.SynchronizedPool;
 import android.util.TypedValue;
 
 import com.android.internal.util.XmlUtils;
@@ -32,62 +32,112 @@
  * {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)}
  * or {@link Resources#obtainAttributes}.  Be
  * sure to call {@link #recycle} when done with them.
- * 
+ *
  * The indices used to retrieve values from this structure correspond to
  * the positions of the attributes given to obtainStyledAttributes.
  */
 public class TypedArray {
-    private final Resources mResources;
+    private static final SynchronizedPool<TypedArray> mPool = new SynchronizedPool<TypedArray>(5);
+
+    static TypedArray obtain(Resources res, int len) {
+        final TypedArray attrs = mPool.acquire();
+        if (attrs != null) {
+            attrs.mLength = len;
+            attrs.mResources = res;
+            attrs.mMetrics = res.getDisplayMetrics();
+            attrs.mAssets = res.getAssets();
+            attrs.mRecycled = false;
+
+            final int fullLen = len * AssetManager.STYLE_NUM_ENTRIES;
+            if (attrs.mData.length >= fullLen) {
+                return attrs;
+            }
+
+            attrs.mData = new int[fullLen];
+            attrs.mIndices = new int[1 + len];
+            return attrs;
+        }
+
+        return new TypedArray(res,
+                new int[len*AssetManager.STYLE_NUM_ENTRIES],
+                new int[1+len], len);
+    }
+
+    private Resources mResources;
+    private DisplayMetrics mMetrics;
+    private AssetManager mAssets;
+    private boolean mRecycled;
+
     /*package*/ XmlBlock.Parser mXml;
-    /*package*/ int[] mRsrcs;
+    /*package*/ Resources.Theme mTheme;
     /*package*/ int[] mData;
     /*package*/ int[] mIndices;
     /*package*/ int mLength;
     /*package*/ TypedValue mValue = new TypedValue();
-   
+
     /**
      * Return the number of values in this array.
      */
     public int length() {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         return mLength;
     }
-    
+
     /**
      * Return the number of indices in the array that actually have data.
      */
     public int getIndexCount() {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         return mIndices[0];
     }
-    
+
     /**
      * Return an index in the array that has data.
-     * 
+     *
      * @param at The index you would like to returned, ranging from 0 to
      * {@link #getIndexCount()}.
-     * 
+     *
      * @return The index at the given offset, which can be used with
      * {@link #getValue} and related APIs.
      */
     public int getIndex(int at) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         return mIndices[1+at];
     }
-    
+
     /**
      * Return the Resources object this array was loaded from.
      */
     public Resources getResources() {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         return mResources;
     }
-    
+
     /**
      * Retrieve the styled string value for the attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
-     * @return CharSequence holding string data.  May be styled.  Returns 
+     *
+     * @return CharSequence holding string data.  May be styled.  Returns
      *         null if the attribute is not defined.
      */
     public CharSequence getText(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -109,13 +159,17 @@
 
     /**
      * Retrieve the string value for the attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
+     *
      * @return String holding string data.  Any styling information is
      * removed.  Returns null if the attribute is not defined.
      */
     public String getString(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -143,14 +197,18 @@
      * attributes, or conversions from other types.  As such, this method
      * will only return strings for TypedArray objects that come from
      * attributes in an XML file.
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
+     *
      * @return String holding string data.  Any styling information is
      * removed.  Returns null if the attribute is not defined or is not
      * an immediate string value.
      */
     public String getNonResourceString(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -163,12 +221,12 @@
         }
         return null;
     }
-    
+
     /**
      * @hide
      * Retrieve the string value for the attribute at <var>index</var> that is
      * not allowed to change with the given configurations.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param allowedChangingConfigs Bit mask of configurations from
      * {@link Configuration}.NATIVE_CONFIG_* that are allowed to change.
@@ -177,6 +235,10 @@
      * removed.  Returns null if the attribute is not defined.
      */
     public String getNonConfigurationString(int index, int allowedChangingConfigs) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -202,13 +264,17 @@
 
     /**
      * Retrieve the boolean value for the attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined.
-     * 
+     *
      * @return Attribute boolean value, or defValue if not defined.
      */
     public boolean getBoolean(int index, boolean defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -232,13 +298,17 @@
 
     /**
      * Retrieve the integer value for the attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined.
-     * 
+     *
      * @return Attribute int value, or defValue if not defined.
      */
     public int getInt(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -262,12 +332,16 @@
 
     /**
      * Retrieve the float value for the attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
+     *
      * @return Attribute float value, or defValue if not defined..
      */
     public float getFloat(int index, float defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -292,20 +366,24 @@
               + Integer.toHexString(type));
         return defValue;
     }
-    
+
     /**
      * Retrieve the color value for the attribute at <var>index</var>.  If
      * the attribute references a color resource holding a complex
      * {@link android.content.res.ColorStateList}, then the default color from
      * the set is returned.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined or
      *                 not a resource.
-     * 
+     *
      * @return Attribute color value, or defValue if not defined.
      */
     public int getColor(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -332,12 +410,16 @@
      * Retrieve the ColorStateList for the attribute at <var>index</var>.
      * The value may be either a single solid color or a reference to
      * a color or complex {@link android.content.res.ColorStateList} description.
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
+     *
      * @return ColorStateList for the attribute, or null if not defined.
      */
     public ColorStateList getColorStateList(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         final TypedValue value = mValue;
         if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
             return mResources.loadColorStateList(value, value.resourceId);
@@ -347,14 +429,18 @@
 
     /**
      * Retrieve the integer value for the attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined or
      *                 not a resource.
-     * 
+     *
      * @return Attribute integer value, or defValue if not defined.
      */
     public int getInteger(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -370,22 +456,26 @@
     }
 
     /**
-     * Retrieve a dimensional unit attribute at <var>index</var>.  Unit 
-     * conversions are based on the current {@link DisplayMetrics} 
-     * associated with the resources this {@link TypedArray} object 
-     * came from. 
-     * 
+     * Retrieve a dimensional unit attribute at <var>index</var>.  Unit
+     * conversions are based on the current {@link DisplayMetrics}
+     * associated with the resources this {@link TypedArray} object
+     * came from.
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined or
      *                 not a resource.
-     * 
-     * @return Attribute dimension value multiplied by the appropriate 
+     *
+     * @return Attribute dimension value multiplied by the appropriate
      * metric, or defValue if not defined.
-     * 
+     *
      * @see #getDimensionPixelOffset
      * @see #getDimensionPixelSize
      */
     public float getDimension(int index, float defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -393,7 +483,7 @@
             return defValue;
         } else if (type == TypedValue.TYPE_DIMENSION) {
             return TypedValue.complexToDimension(
-                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
+                data[index+AssetManager.STYLE_DATA], mMetrics);
         }
 
         throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
@@ -406,18 +496,22 @@
      * {@link #getDimension}, except the returned value is converted to
      * integer pixels for you.  An offset conversion involves simply
      * truncating the base value to an integer.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined or
      *                 not a resource.
-     * 
-     * @return Attribute dimension value multiplied by the appropriate 
+     *
+     * @return Attribute dimension value multiplied by the appropriate
      * metric and truncated to integer pixels, or defValue if not defined.
-     * 
+     *
      * @see #getDimension
      * @see #getDimensionPixelSize
      */
     public int getDimensionPixelOffset(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -425,7 +519,7 @@
             return defValue;
         } else if (type == TypedValue.TYPE_DIMENSION) {
             return TypedValue.complexToDimensionPixelOffset(
-                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
+                data[index+AssetManager.STYLE_DATA], mMetrics);
         }
 
         throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
@@ -439,18 +533,22 @@
      * integer pixels for use as a size.  A size conversion involves
      * rounding the base value, and ensuring that a non-zero base value
      * is at least one pixel in size.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined or
      *                 not a resource.
-     * 
-     * @return Attribute dimension value multiplied by the appropriate 
+     *
+     * @return Attribute dimension value multiplied by the appropriate
      * metric and truncated to integer pixels, or defValue if not defined.
-     *  
+     *
      * @see #getDimension
      * @see #getDimensionPixelOffset
      */
     public int getDimensionPixelSize(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -458,7 +556,7 @@
             return defValue;
         } else if (type == TypedValue.TYPE_DIMENSION) {
             return TypedValue.complexToDimensionPixelSize(
-                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
+                data[index+AssetManager.STYLE_DATA], mMetrics);
         }
 
         throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
@@ -470,14 +568,18 @@
      * {@link android.view.ViewGroup}'s layout_width and layout_height
      * attributes.  This is only here for performance reasons; applications
      * should use {@link #getDimensionPixelSize}.
-     * 
+     *
      * @param index Index of the attribute to retrieve.
      * @param name Textual name of attribute for error reporting.
-     * 
-     * @return Attribute dimension value multiplied by the appropriate 
+     *
+     * @return Attribute dimension value multiplied by the appropriate
      * metric and truncated to integer pixels.
      */
     public int getLayoutDimension(int index, String name) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -486,27 +588,31 @@
             return data[index+AssetManager.STYLE_DATA];
         } else if (type == TypedValue.TYPE_DIMENSION) {
             return TypedValue.complexToDimensionPixelSize(
-                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
+                data[index+AssetManager.STYLE_DATA], mMetrics);
         }
 
         throw new RuntimeException(getPositionDescription()
                 + ": You must supply a " + name + " attribute.");
     }
-    
+
     /**
      * Special version of {@link #getDimensionPixelSize} for retrieving
      * {@link android.view.ViewGroup}'s layout_width and layout_height
      * attributes.  This is only here for performance reasons; applications
      * should use {@link #getDimensionPixelSize}.
-     * 
+     *
      * @param index Index of the attribute to retrieve.
      * @param defValue The default value to return if this attribute is not
      * default or contains the wrong type of data.
-     * 
-     * @return Attribute dimension value multiplied by the appropriate 
+     *
+     * @return Attribute dimension value multiplied by the appropriate
      * metric and truncated to integer pixels.
      */
     public int getLayoutDimension(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -515,7 +621,7 @@
             return data[index+AssetManager.STYLE_DATA];
         } else if (type == TypedValue.TYPE_DIMENSION) {
             return TypedValue.complexToDimensionPixelSize(
-                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
+                data[index+AssetManager.STYLE_DATA], mMetrics);
         }
 
         return defValue;
@@ -523,20 +629,24 @@
 
     /**
      * Retrieve a fractional unit attribute at <var>index</var>.
-     * 
-     * @param index Index of attribute to retrieve. 
-     * @param base The base value of this fraction.  In other words, a 
+     *
+     * @param index Index of attribute to retrieve.
+     * @param base The base value of this fraction.  In other words, a
      *             standard fraction is multiplied by this value.
-     * @param pbase The parent base value of this fraction.  In other 
+     * @param pbase The parent base value of this fraction.  In other
      *             words, a parent fraction (nn%p) is multiplied by this
      *             value.
      * @param defValue Value to return if the attribute is not defined or
      *                 not a resource.
-     * 
-     * @return Attribute fractional value multiplied by the appropriate 
-     * base value, or defValue if not defined. 
+     *
+     * @return Attribute fractional value multiplied by the appropriate
+     * base value, or defValue if not defined.
      */
     public float getFraction(int index, int base, int pbase, float defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
@@ -553,19 +663,23 @@
 
     /**
      * Retrieve the resource identifier for the attribute at
-     * <var>index</var>.  Note that attribute resource as resolved when 
-     * the overall {@link TypedArray} object is retrieved.  As a 
-     * result, this function will return the resource identifier of the 
-     * final resource value that was found, <em>not</em> necessarily the 
-     * original resource that was specified by the attribute. 
-     * 
+     * <var>index</var>.  Note that attribute resource as resolved when
+     * the overall {@link TypedArray} object is retrieved.  As a
+     * result, this function will return the resource identifier of the
+     * final resource value that was found, <em>not</em> necessarily the
+     * original resource that was specified by the attribute.
+     *
      * @param index Index of attribute to retrieve.
      * @param defValue Value to return if the attribute is not defined or
      *                 not a resource.
-     * 
+     *
      * @return Attribute resource identifier, or defValue if not defined.
      */
     public int getResourceId(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         if (data[index+AssetManager.STYLE_TYPE] != TypedValue.TYPE_NULL) {
@@ -578,16 +692,43 @@
     }
 
     /**
+     * Retrieve the theme attribute resource identifier for the attribute at
+     * <var>index</var>.
+     *
+     * @param index Index of attribute to retrieve.
+     * @param defValue Value to return if the attribute is not defined or not a
+     *            resource.
+     * @return Theme attribute resource identifier, or defValue if not defined.
+     * @hide
+     */
+    public int getThemeAttributeId(int index, int defValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
+        index *= AssetManager.STYLE_NUM_ENTRIES;
+        final int[] data = mData;
+        if (data[index + AssetManager.STYLE_TYPE] == TypedValue.TYPE_ATTRIBUTE) {
+            return data[index + AssetManager.STYLE_DATA];
+        }
+        return defValue;
+    }
+
+    /**
      * Retrieve the Drawable for the attribute at <var>index</var>.  This
      * gets the resource ID of the selected attribute, and uses
      * {@link Resources#getDrawable Resources.getDrawable} of the owning
      * Resources object to retrieve its Drawable.
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
+     *
      * @return Drawable for the attribute, or null if not defined.
      */
     public Drawable getDrawable(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         final TypedValue value = mValue;
         if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
             if (false) {
@@ -599,7 +740,7 @@
                                    + " cookie=" + value.assetCookie);
                 System.out.println("******************************************************************");
             }
-            return mResources.loadDrawable(value, value.resourceId);
+            return mResources.loadDrawable(value, value.resourceId, mTheme);
         }
         return null;
     }
@@ -609,12 +750,16 @@
      * This gets the resource ID of the selected attribute, and uses
      * {@link Resources#getTextArray Resources.getTextArray} of the owning
      * Resources object to retrieve its String[].
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
+     *
      * @return CharSequence[] for the attribute, or null if not defined.
      */
     public CharSequence[] getTextArray(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         final TypedValue value = mValue;
         if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
             if (false) {
@@ -633,43 +778,70 @@
 
     /**
      * Retrieve the raw TypedValue for the attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
      * @param outValue TypedValue object in which to place the attribute's
      *                 data.
-     * 
-     * @return Returns true if the value was retrieved, else false. 
+     *
+     * @return Returns true if the value was retrieved, else false.
      */
     public boolean getValue(int index, TypedValue outValue) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         return getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, outValue);
     }
 
     /**
+     * Returns the type of attribute at the specified index.
+     *
+     * @param index Index of attribute whose type to retrieve.
+     * @return Attribute type.
+     */
+    public int getType(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
+        index *= AssetManager.STYLE_NUM_ENTRIES;
+        return mData[index + AssetManager.STYLE_TYPE];
+    }
+
+    /**
      * Determines whether there is an attribute at <var>index</var>.
-     * 
+     *
      * @param index Index of attribute to retrieve.
-     * 
+     *
      * @return True if the attribute has a value, false otherwise.
      */
     public boolean hasValue(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         index *= AssetManager.STYLE_NUM_ENTRIES;
         final int[] data = mData;
         final int type = data[index+AssetManager.STYLE_TYPE];
         return type != TypedValue.TYPE_NULL;
     }
-    
+
     /**
-     * Retrieve the raw TypedValue for the attribute at <var>index</var> 
-     * and return a temporary object holding its data.  This object is only 
-     * valid until the next call on to {@link TypedArray}. 
-     * 
+     * Retrieve the raw TypedValue for the attribute at <var>index</var>
+     * and return a temporary object holding its data.  This object is only
+     * valid until the next call on to {@link TypedArray}.
+     *
      * @param index Index of attribute to retrieve.
-     * 
-     * @return Returns a TypedValue object if the attribute is defined, 
+     *
+     * @return Returns a TypedValue object if the attribute is defined,
      *         containing its data; otherwise returns null.  (You will not
      *         receive a TypedValue whose type is TYPE_NULL.)
      */
     public TypedValue peekValue(int index) {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         final TypedValue value = mValue;
         if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
             return value;
@@ -681,20 +853,66 @@
      * Returns a message about the parser state suitable for printing error messages.
      */
     public String getPositionDescription() {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
         return mXml != null ? mXml.getPositionDescription() : "<internal>";
     }
 
     /**
-     * Give back a previously retrieved array, for later re-use.
+     * Recycle the TypedArray, to be re-used by a later caller. After calling
+     * this function you must not ever touch the typed array again.
      */
     public void recycle() {
-        synchronized (mResources.mAccessLock) {
-            TypedArray cached = mResources.mCachedStyledAttributes;
-            if (cached == null || cached.mData.length < mData.length) {
-                mXml = null;
-                mResources.mCachedStyledAttributes = this;
+        if (mRecycled) {
+            throw new RuntimeException(toString() + " recycled twice!");
+        }
+
+        mRecycled = true;
+        mResources = null;
+        mMetrics = null;
+        mAssets = null;
+
+        // These may have been set by the client.
+        mXml = null;
+        mTheme = null;
+
+        synchronized (mPool) {
+            mPool.release(this);
+        }
+    }
+
+    /**
+     * Extracts theme attributes from a typed array for later resolution using
+     * {@link Theme#resolveAttributes(int[], int[], int, int)}.
+     *
+     * @param array An array to populate with theme attributes. If the array is
+     *            null or not large enough, a new array will be returned.
+     * @return an array of length {@link #getIndexCount()} populated with theme
+     *         attributes, or null if there are no theme attributes in the
+     *         typed array
+     * @hide
+     */
+    public int[] extractThemeAttrs() {
+        if (mRecycled) {
+            throw new RuntimeException("Cannot make calls to a recycled instance!");
+        }
+
+        int[] attrs = null;
+
+        final int N = length();
+        for (int i = 0; i < N; i++) {
+            final int attrId = getThemeAttributeId(i, 0);
+            if (attrId != 0) {
+                if (attrs == null) {
+                    attrs = new int[N];
+                }
+                attrs[i] = attrId;
             }
         }
+
+        return attrs;
     }
 
     private boolean getValueAt(int index, TypedValue outValue) {
@@ -723,18 +941,19 @@
             }
             return null;
         }
-        //System.out.println("Getting pooled from: " + v);
-        return mResources.mAssets.getPooledString(
-            cookie, data[index+AssetManager.STYLE_DATA]);
+        return mAssets.getPooledStringForCookie(cookie, data[index+AssetManager.STYLE_DATA]);
     }
 
     /*package*/ TypedArray(Resources resources, int[] data, int[] indices, int len) {
         mResources = resources;
+        mMetrics = mResources.getDisplayMetrics();
+        mAssets = mResources.getAssets();
         mData = data;
         mIndices = indices;
         mLength = len;
     }
 
+    @Override
     public String toString() {
         return Arrays.toString(mData);
     }
diff --git a/core/java/android/content/res/XmlBlock.java b/core/java/android/content/res/XmlBlock.java
index 3ad357f2..2f4d69b0 100644
--- a/core/java/android/content/res/XmlBlock.java
+++ b/core/java/android/content/res/XmlBlock.java
@@ -375,7 +375,7 @@
                 boolean defaultValue) {
             int t = nativeGetAttributeDataType(mParseState, idx);
             // Note: don't attempt to convert any other types, because
-            // we want to count on appt doing the conversion for us.
+            // we want to count on aapt doing the conversion for us.
             if (t >= TypedValue.TYPE_FIRST_INT &&
                 t <= TypedValue.TYPE_LAST_INT) {
                 return nativeGetAttributeData(mParseState, idx) != 0;
@@ -385,7 +385,7 @@
         public int getAttributeResourceValue(int idx, int defaultValue) {
             int t = nativeGetAttributeDataType(mParseState, idx);
             // Note: don't attempt to convert any other types, because
-            // we want to count on appt doing the conversion for us.
+            // we want to count on aapt doing the conversion for us.
             if (t == TypedValue.TYPE_REFERENCE) {
                 return nativeGetAttributeData(mParseState, idx);
             }
@@ -394,7 +394,7 @@
         public int getAttributeIntValue(int idx, int defaultValue) {
             int t = nativeGetAttributeDataType(mParseState, idx);
             // Note: don't attempt to convert any other types, because
-            // we want to count on appt doing the conversion for us.
+            // we want to count on aapt doing the conversion for us.
             if (t >= TypedValue.TYPE_FIRST_INT &&
                 t <= TypedValue.TYPE_LAST_INT) {
                 return nativeGetAttributeData(mParseState, idx);
@@ -404,7 +404,7 @@
         public int getAttributeUnsignedIntValue(int idx, int defaultValue) {
             int t = nativeGetAttributeDataType(mParseState, idx);
             // Note: don't attempt to convert any other types, because
-            // we want to count on appt doing the conversion for us.
+            // we want to count on aapt doing the conversion for us.
             if (t >= TypedValue.TYPE_FIRST_INT &&
                 t <= TypedValue.TYPE_LAST_INT) {
                 return nativeGetAttributeData(mParseState, idx);
@@ -414,7 +414,7 @@
         public float getAttributeFloatValue(int idx, float defaultValue) {
             int t = nativeGetAttributeDataType(mParseState, idx);
             // Note: don't attempt to convert any other types, because
-            // we want to count on appt doing the conversion for us.
+            // we want to count on aapt doing the conversion for us.
             if (t == TypedValue.TYPE_FLOAT) {
                 return Float.intBitsToFloat(
                     nativeGetAttributeData(mParseState, idx));
diff --git a/core/java/android/database/CursorToBulkCursorAdaptor.java b/core/java/android/database/CursorToBulkCursorAdaptor.java
index 82a61d4..7dcfae2 100644
--- a/core/java/android/database/CursorToBulkCursorAdaptor.java
+++ b/core/java/android/database/CursorToBulkCursorAdaptor.java
@@ -20,7 +20,6 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.util.Log;
 
 
 /**
diff --git a/core/java/android/database/sqlite/SQLiteOpenHelper.java b/core/java/android/database/sqlite/SQLiteOpenHelper.java
index 431eca2..2dd4800 100644
--- a/core/java/android/database/sqlite/SQLiteOpenHelper.java
+++ b/core/java/android/database/sqlite/SQLiteOpenHelper.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.database.DatabaseErrorHandler;
-import android.database.DefaultDatabaseErrorHandler;
 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 import android.util.Log;
 
diff --git a/core/java/android/ddm/DdmHandleNativeHeap.java b/core/java/android/ddm/DdmHandleNativeHeap.java
index 6bd65aa..775c570 100644
--- a/core/java/android/ddm/DdmHandleNativeHeap.java
+++ b/core/java/android/ddm/DdmHandleNativeHeap.java
@@ -20,7 +20,6 @@
 import org.apache.harmony.dalvik.ddmc.ChunkHandler;
 import org.apache.harmony.dalvik.ddmc.DdmServer;
 import android.util.Log;
-import java.nio.ByteBuffer;
 
 /**
  * Handle thread-related traffic.
diff --git a/core/java/android/ddm/DdmHandleProfiling.java b/core/java/android/ddm/DdmHandleProfiling.java
index 537763da..cce4dd2 100644
--- a/core/java/android/ddm/DdmHandleProfiling.java
+++ b/core/java/android/ddm/DdmHandleProfiling.java
@@ -21,7 +21,6 @@
 import org.apache.harmony.dalvik.ddmc.DdmServer;
 import android.os.Debug;
 import android.util.Log;
-import java.io.IOException;
 import java.nio.ByteBuffer;
 
 /**
diff --git a/core/java/android/gesture/GestureOverlayView.java b/core/java/android/gesture/GestureOverlayView.java
index 2d47f28..6e3a00f 100644
--- a/core/java/android/gesture/GestureOverlayView.java
+++ b/core/java/android/gesture/GestureOverlayView.java
@@ -134,11 +134,16 @@
         this(context, attrs, com.android.internal.R.attr.gestureOverlayViewStyle);
     }
 
-    public GestureOverlayView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public GestureOverlayView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.GestureOverlayView, defStyle, 0);
+    public GestureOverlayView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.GestureOverlayView, defStyleAttr, defStyleRes);
 
         mGestureStrokeWidth = a.getFloat(R.styleable.GestureOverlayView_gestureStrokeWidth,
                 mGestureStrokeWidth);
diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java
index eae4a46..35c86e7 100644
--- a/core/java/android/hardware/Camera.java
+++ b/core/java/android/hardware/Camera.java
@@ -47,7 +47,6 @@
 import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.concurrent.locks.ReentrantLock;
 
 /**
  * The Camera class is used to set image capture settings, start/stop preview,
diff --git a/core/java/android/hardware/GeomagneticField.java b/core/java/android/hardware/GeomagneticField.java
index 0369825..ef05732 100644
--- a/core/java/android/hardware/GeomagneticField.java
+++ b/core/java/android/hardware/GeomagneticField.java
@@ -361,7 +361,7 @@
             mP[0] = new float[] { 1.0f };
             mPDeriv[0] = new float[] { 0.0f };
             for (int n = 1; n <= maxN; n++) {
-            	mP[n] = new float[n + 1];
+                mP[n] = new float[n + 1];
                 mPDeriv[n] = new float[n + 1];
                 for (int m = 0; m <= n; m++) {
                     if (n == m) {
diff --git a/core/java/android/hardware/ICameraService.aidl b/core/java/android/hardware/ICameraService.aidl
index 542af6a..4c50dda 100644
--- a/core/java/android/hardware/ICameraService.aidl
+++ b/core/java/android/hardware/ICameraService.aidl
@@ -61,4 +61,12 @@
     int removeListener(ICameraServiceListener listener);
 
     int getCameraCharacteristics(int cameraId, out CameraMetadataNative info);
+
+    /**
+     * The java stubs for this method are not intended to be used.  Please use
+     * the native stub in frameworks/av/include/camera/ICameraService.h instead.
+     * The BinderHolder output is being used as a placeholder, and will not be
+     * well-formatted in the generated java method.
+     */
+    int getCameraVendorTagDescriptor(out BinderHolder desc);
 }
diff --git a/core/java/android/hardware/SerialManager.java b/core/java/android/hardware/SerialManager.java
index c5e1c2b..e0680bf22 100644
--- a/core/java/android/hardware/SerialManager.java
+++ b/core/java/android/hardware/SerialManager.java
@@ -17,16 +17,12 @@
 
 package android.hardware;
 
-import android.app.PendingIntent;
 import android.content.Context;
-import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.os.RemoteException;
-import android.os.SystemProperties;
 import android.util.Log;
 
 import java.io.IOException;
-import java.util.HashMap;
 
 /**
  * @hide
diff --git a/core/java/android/hardware/SerialPort.java b/core/java/android/hardware/SerialPort.java
index f50cdef..5d83d9c 100644
--- a/core/java/android/hardware/SerialPort.java
+++ b/core/java/android/hardware/SerialPort.java
@@ -17,14 +17,9 @@
 package android.hardware;
 
 import android.os.ParcelFileDescriptor;
-import android.util.Log;
 
 import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
 import java.io.IOException;
-import java.io.OutputStream;
 
 import java.nio.ByteBuffer;
 
diff --git a/core/java/android/hardware/camera2/CameraCharacteristics.java b/core/java/android/hardware/camera2/CameraCharacteristics.java
index a38beec..722d956 100644
--- a/core/java/android/hardware/camera2/CameraCharacteristics.java
+++ b/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -126,206 +126,300 @@
      * modify the comment blocks at the start or end.
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
 
+
     /**
-     * <p>
-     * Which set of antibanding modes are
-     * supported
-     * </p>
+     * <p>The set of auto-exposure antibanding modes that are
+     * supported by this camera device.</p>
+     * <p>Not all of the auto-exposure anti-banding modes may be
+     * supported by a given camera device. This field lists the
+     * valid anti-banding modes that the application may request
+     * for this camera device; they must include AUTO.</p>
      */
     public static final Key<byte[]> CONTROL_AE_AVAILABLE_ANTIBANDING_MODES =
             new Key<byte[]>("android.control.aeAvailableAntibandingModes", byte[].class);
 
     /**
-     * <p>
-     * List of frame rate ranges supported by the
-     * AE algorithm/hardware
-     * </p>
+     * <p>The set of auto-exposure modes that are supported by this
+     * camera device.</p>
+     * <p>Not all the auto-exposure modes may be supported by a
+     * given camera device, especially if no flash unit is
+     * available. This entry lists the valid modes for
+     * {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} for this camera device.</p>
+     * <p>All camera devices support ON, and all camera devices with
+     * flash units support ON_AUTO_FLASH and
+     * ON_ALWAYS_FLASH.</p>
+     * <p>FULL mode camera devices always support OFF mode,
+     * which enables application control of camera exposure time,
+     * sensitivity, and frame duration.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     */
+    public static final Key<byte[]> CONTROL_AE_AVAILABLE_MODES =
+            new Key<byte[]>("android.control.aeAvailableModes", byte[].class);
+
+    /**
+     * <p>List of frame rate ranges supported by the
+     * AE algorithm/hardware</p>
      */
     public static final Key<int[]> CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES =
             new Key<int[]>("android.control.aeAvailableTargetFpsRanges", int[].class);
 
     /**
-     * <p>
-     * Maximum and minimum exposure compensation
+     * <p>Maximum and minimum exposure compensation
      * setting, in counts of
-     * android.control.aeCompensationStepSize
-     * </p>
+     * {@link CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP android.control.aeCompensationStep}.</p>
+     *
+     * @see CameraCharacteristics#CONTROL_AE_COMPENSATION_STEP
      */
     public static final Key<int[]> CONTROL_AE_COMPENSATION_RANGE =
             new Key<int[]>("android.control.aeCompensationRange", int[].class);
 
     /**
-     * <p>
-     * Smallest step by which exposure compensation
-     * can be changed
-     * </p>
+     * <p>Smallest step by which exposure compensation
+     * can be changed</p>
      */
     public static final Key<Rational> CONTROL_AE_COMPENSATION_STEP =
             new Key<Rational>("android.control.aeCompensationStep", Rational.class);
 
     /**
-     * <p>
-     * List of AF modes that can be
-     * selected
-     * </p>
+     * <p>List of AF modes that can be
+     * selected with {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
+     * <p>Not all the auto-focus modes may be supported by a
+     * given camera device. This entry lists the valid modes for
+     * {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} for this camera device.</p>
+     * <p>All camera devices will support OFF mode, and all camera devices with
+     * adjustable focuser units (<code>{@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} &gt; 0</code>)
+     * will support AUTO mode.</p>
+     *
+     * @see CaptureRequest#CONTROL_AF_MODE
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
      */
     public static final Key<byte[]> CONTROL_AF_AVAILABLE_MODES =
             new Key<byte[]>("android.control.afAvailableModes", byte[].class);
 
     /**
-     * <p>
-     * what subset of the full color effect enum
-     * list is supported
-     * </p>
+     * <p>List containing the subset of color effects
+     * specified in {@link CaptureRequest#CONTROL_EFFECT_MODE android.control.effectMode} that is supported by
+     * this device.</p>
+     * <p>This list contains the color effect modes that can be applied to
+     * images produced by the camera device. Only modes that have
+     * been fully implemented for the current device may be included here.
+     * Implementations are not expected to be consistent across all devices.
+     * If no color effect modes are available for a device, this should
+     * simply be set to OFF.</p>
+     * <p>A color effect will only be applied if
+     * {@link CaptureRequest#CONTROL_MODE android.control.mode} != OFF.</p>
+     *
+     * @see CaptureRequest#CONTROL_EFFECT_MODE
+     * @see CaptureRequest#CONTROL_MODE
      */
     public static final Key<byte[]> CONTROL_AVAILABLE_EFFECTS =
             new Key<byte[]>("android.control.availableEffects", byte[].class);
 
     /**
-     * <p>
-     * what subset of the scene mode enum list is
-     * supported.
-     * </p>
+     * <p>List containing a subset of scene modes
+     * specified in {@link CaptureRequest#CONTROL_SCENE_MODE android.control.sceneMode}.</p>
+     * <p>This list contains scene modes that can be set for the camera device.
+     * Only scene modes that have been fully implemented for the
+     * camera device may be included here. Implementations are not expected
+     * to be consistent across all devices. If no scene modes are supported
+     * by the camera device, this will be set to <code>[DISABLED]</code>.</p>
+     *
+     * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final Key<byte[]> CONTROL_AVAILABLE_SCENE_MODES =
             new Key<byte[]>("android.control.availableSceneModes", byte[].class);
 
     /**
-     * <p>
-     * List of video stabilization modes that can
-     * be supported
-     * </p>
+     * <p>List of video stabilization modes that can
+     * be supported</p>
      */
     public static final Key<byte[]> CONTROL_AVAILABLE_VIDEO_STABILIZATION_MODES =
             new Key<byte[]>("android.control.availableVideoStabilizationModes", byte[].class);
 
     /**
+     * <p>The set of auto-white-balance modes ({@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode})
+     * that are supported by this camera device.</p>
+     * <p>Not all the auto-white-balance modes may be supported by a
+     * given camera device. This entry lists the valid modes for
+     * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} for this camera device.</p>
+     * <p>All camera devices will support ON mode.</p>
+     * <p>FULL mode camera devices will always support OFF mode,
+     * which enables application control of white balance, by using
+     * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform} and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}({@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} must be set to TRANSFORM_MATRIX).</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
+     * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final Key<byte[]> CONTROL_AWB_AVAILABLE_MODES =
             new Key<byte[]>("android.control.awbAvailableModes", byte[].class);
 
     /**
-     * <p>
-     * For AE, AWB, and AF, how many individual
-     * regions can be listed for metering?
-     * </p>
+     * <p>List of the maximum number of regions that can be used for metering in
+     * auto-exposure (AE), auto-white balance (AWB), and auto-focus (AF);
+     * this corresponds to the the maximum number of elements in
+     * {@link CaptureRequest#CONTROL_AE_REGIONS android.control.aeRegions}, {@link CaptureRequest#CONTROL_AWB_REGIONS android.control.awbRegions},
+     * and {@link CaptureRequest#CONTROL_AF_REGIONS android.control.afRegions}.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_REGIONS
+     * @see CaptureRequest#CONTROL_AF_REGIONS
+     * @see CaptureRequest#CONTROL_AWB_REGIONS
      */
-    public static final Key<Integer> CONTROL_MAX_REGIONS =
-            new Key<Integer>("android.control.maxRegions", int.class);
+    public static final Key<int[]> CONTROL_MAX_REGIONS =
+            new Key<int[]>("android.control.maxRegions", int[].class);
 
     /**
-     * <p>
-     * Whether this camera has a
-     * flash
-     * </p>
-     * <p>
-     * If no flash, none of the flash controls do
-     * anything. All other metadata should return 0
-     * </p>
+     * <p>The set of edge enhancement modes supported by this camera device.</p>
+     * <p>This tag lists the valid modes for {@link CaptureRequest#EDGE_MODE android.edge.mode}.</p>
+     * <p>Full-capability camera devices must always support OFF and FAST.</p>
+     *
+     * @see CaptureRequest#EDGE_MODE
      */
-    public static final Key<Byte> FLASH_INFO_AVAILABLE =
-            new Key<Byte>("android.flash.info.available", byte.class);
+    public static final Key<byte[]> EDGE_AVAILABLE_EDGE_MODES =
+            new Key<byte[]>("android.edge.availableEdgeModes", byte[].class);
 
     /**
-     * <p>
-     * Supported resolutions for the JPEG
-     * thumbnail
-     * </p>
+     * <p>Whether this camera device has a
+     * flash.</p>
+     * <p>If no flash, none of the flash controls do
+     * anything. All other metadata should return 0.</p>
+     */
+    public static final Key<Boolean> FLASH_INFO_AVAILABLE =
+            new Key<Boolean>("android.flash.info.available", boolean.class);
+
+    /**
+     * <p>The set of hot pixel correction modes that are supported by this
+     * camera device.</p>
+     * <p>This tag lists valid modes for {@link CaptureRequest#HOT_PIXEL_MODE android.hotPixel.mode}.</p>
+     * <p>FULL mode camera devices will always support FAST.</p>
+     *
+     * @see CaptureRequest#HOT_PIXEL_MODE
+     */
+    public static final Key<byte[]> HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES =
+            new Key<byte[]>("android.hotPixel.availableHotPixelModes", byte[].class);
+
+    /**
+     * <p>Supported resolutions for the JPEG thumbnail</p>
+     * <p>Below condiditions will be satisfied for this size list:</p>
+     * <ul>
+     * <li>The sizes will be sorted by increasing pixel area (width x height).
+     * If several resolutions have the same area, they will be sorted by increasing width.</li>
+     * <li>The aspect ratio of the largest thumbnail size will be same as the
+     * aspect ratio of largest JPEG output size in {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS android.scaler.availableStreamConfigurations}.
+     * The largest size is defined as the size that has the largest pixel area
+     * in a given size list.</li>
+     * <li>Each output JPEG size in {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS android.scaler.availableStreamConfigurations} will have at least
+     * one corresponding size that has the same aspect ratio in availableThumbnailSizes,
+     * and vice versa.</li>
+     * <li>All non (0, 0) sizes will have non-zero widths and heights.</li>
+     * </ul>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS
      */
     public static final Key<android.hardware.camera2.Size[]> JPEG_AVAILABLE_THUMBNAIL_SIZES =
             new Key<android.hardware.camera2.Size[]>("android.jpeg.availableThumbnailSizes", android.hardware.camera2.Size[].class);
 
     /**
-     * <p>
-     * List of supported aperture
-     * values
-     * </p>
-     * <p>
-     * If variable aperture not available, only setting
-     * should be for the fixed aperture
-     * </p>
+     * <p>List of supported aperture
+     * values.</p>
+     * <p>If the camera device doesn't support variable apertures,
+     * listed value will be the fixed aperture.</p>
+     * <p>If the camera device supports variable apertures, the aperture value
+     * in this list will be sorted in ascending order.</p>
      */
     public static final Key<float[]> LENS_INFO_AVAILABLE_APERTURES =
             new Key<float[]>("android.lens.info.availableApertures", float[].class);
 
     /**
-     * <p>
-     * List of supported ND filter
-     * values
-     * </p>
-     * <p>
-     * If not available, only setting is 0. Otherwise,
-     * lists the available exposure index values for dimming
-     * (2 would mean the filter is set to reduce incoming
-     * light by two stops)
-     * </p>
+     * <p>List of supported neutral density filter values for
+     * {@link CaptureRequest#LENS_FILTER_DENSITY android.lens.filterDensity}.</p>
+     * <p>If changing {@link CaptureRequest#LENS_FILTER_DENSITY android.lens.filterDensity} is not supported,
+     * availableFilterDensities must contain only 0. Otherwise, this
+     * list contains only the exact filter density values available on
+     * this camera device.</p>
+     *
+     * @see CaptureRequest#LENS_FILTER_DENSITY
      */
     public static final Key<float[]> LENS_INFO_AVAILABLE_FILTER_DENSITIES =
             new Key<float[]>("android.lens.info.availableFilterDensities", float[].class);
 
     /**
-     * <p>
-     * If fitted with optical zoom, what focal
-     * lengths are available. If not, the static focal
-     * length
-     * </p>
-     * <p>
-     * If optical zoom not supported, only one value
-     * should be reported
-     * </p>
+     * <p>The available focal lengths for this device for use with
+     * {@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}.</p>
+     * <p>If optical zoom is not supported, this will only report
+     * a single value corresponding to the static focal length of the
+     * device. Otherwise, this will report every focal length supported
+     * by the device.</p>
+     *
+     * @see CaptureRequest#LENS_FOCAL_LENGTH
      */
     public static final Key<float[]> LENS_INFO_AVAILABLE_FOCAL_LENGTHS =
             new Key<float[]>("android.lens.info.availableFocalLengths", float[].class);
 
     /**
-     * <p>
-     * List of supported optical image
-     * stabilization modes
-     * </p>
+     * <p>List containing a subset of the optical image
+     * stabilization (OIS) modes specified in
+     * {@link CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE android.lens.opticalStabilizationMode}.</p>
+     * <p>If OIS is not implemented for a given camera device, this should
+     * contain only OFF.</p>
+     *
+     * @see CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE
      */
     public static final Key<byte[]> LENS_INFO_AVAILABLE_OPTICAL_STABILIZATION =
             new Key<byte[]>("android.lens.info.availableOpticalStabilization", byte[].class);
 
     /**
-     * <p>
-     * Hyperfocal distance for this lens; set to
-     * 0 if fixed focus
-     * </p>
-     * <p>
-     * The hyperfocal distance is used for the old
-     * API's 'fixed' setting
-     * </p>
+     * <p>Optional. Hyperfocal distance for this lens.</p>
+     * <p>If the lens is fixed focus, the camera device will report 0.</p>
+     * <p>If the lens is not fixed focus, the camera device will report this
+     * field when {@link CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION android.lens.info.focusDistanceCalibration} is APPROXIMATE or CALIBRATED.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
      */
     public static final Key<Float> LENS_INFO_HYPERFOCAL_DISTANCE =
             new Key<Float>("android.lens.info.hyperfocalDistance", float.class);
 
     /**
-     * <p>
-     * Shortest distance from frontmost surface
-     * of the lens that can be focused correctly
-     * </p>
-     * <p>
-     * If the lens is fixed-focus, this should be
-     * 0
-     * </p>
+     * <p>Shortest distance from frontmost surface
+     * of the lens that can be focused correctly.</p>
+     * <p>If the lens is fixed-focus, this should be
+     * 0.</p>
      */
     public static final Key<Float> LENS_INFO_MINIMUM_FOCUS_DISTANCE =
             new Key<Float>("android.lens.info.minimumFocusDistance", float.class);
 
     /**
-     * <p>
-     * Dimensions of lens shading
-     * map
-     * </p>
+     * <p>Dimensions of lens shading map.</p>
+     * <p>The map should be on the order of 30-40 rows and columns, and
+     * must be smaller than 64x64.</p>
      */
     public static final Key<android.hardware.camera2.Size> LENS_INFO_SHADING_MAP_SIZE =
             new Key<android.hardware.camera2.Size>("android.lens.info.shadingMapSize", android.hardware.camera2.Size.class);
 
     /**
-     * <p>
-     * Direction the camera faces relative to
-     * device screen
-     * </p>
+     * <p>The lens focus distance calibration quality.</p>
+     * <p>The lens focus distance calibration quality determines the reliability of
+     * focus related metadata entries, i.e. {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance},
+     * {@link CaptureResult#LENS_FOCUS_RANGE android.lens.focusRange}, {@link CameraCharacteristics#LENS_INFO_HYPERFOCAL_DISTANCE android.lens.info.hyperfocalDistance}, and
+     * {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance}.</p>
+     *
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
+     * @see CaptureResult#LENS_FOCUS_RANGE
+     * @see CameraCharacteristics#LENS_INFO_HYPERFOCAL_DISTANCE
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
+     * @see #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED
+     * @see #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE
+     * @see #LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED
+     */
+    public static final Key<Integer> LENS_INFO_FOCUS_DISTANCE_CALIBRATION =
+            new Key<Integer>("android.lens.info.focusDistanceCalibration", int.class);
+
+    /**
+     * <p>Direction the camera faces relative to
+     * device screen</p>
      * @see #LENS_FACING_FRONT
      * @see #LENS_FACING_BACK
      */
@@ -333,292 +427,1011 @@
             new Key<Integer>("android.lens.facing", int.class);
 
     /**
-     * <p>
-     * If set to 1, the HAL will always split result
+     * <p>The set of noise reduction modes supported by this camera device.</p>
+     * <p>This tag lists the valid modes for {@link CaptureRequest#NOISE_REDUCTION_MODE android.noiseReduction.mode}.</p>
+     * <p>Full-capability camera devices must laways support OFF and FAST.</p>
+     *
+     * @see CaptureRequest#NOISE_REDUCTION_MODE
+     */
+    public static final Key<byte[]> NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES =
+            new Key<byte[]>("android.noiseReduction.availableNoiseReductionModes", byte[].class);
+
+    /**
+     * <p>If set to 1, the HAL will always split result
      * metadata for a single capture into multiple buffers,
-     * returned using multiple process_capture_result calls.
-     * </p>
-     * <p>
-     * Does not need to be listed in static
+     * returned using multiple process_capture_result calls.</p>
+     * <p>Does not need to be listed in static
      * metadata. Support for partial results will be reworked in
      * future versions of camera service. This quirk will stop
      * working at that point; DO NOT USE without careful
-     * consideration of future support.
-     * </p>
-     *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
+     * consideration of future support.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
      * @hide
      */
     public static final Key<Byte> QUIRKS_USE_PARTIAL_RESULT =
             new Key<Byte>("android.quirks.usePartialResult", byte.class);
 
     /**
-     * <p>
-     * How many output streams can be allocated at
-     * the same time for each type of stream
-     * </p>
-     * <p>
-     * Video snapshot with preview callbacks requires 3
-     * processed streams (preview, record, app callbacks) and
-     * one JPEG stream (snapshot)
-     * </p>
+     * <p>The maximum numbers of different types of output streams
+     * that can be configured and used simultaneously by a camera device.</p>
+     * <p>This is a 3 element tuple that contains the max number of output simultaneous
+     * streams for raw sensor, processed (but not stalling), and processed (and stalling)
+     * formats respectively. For example, assuming that JPEG is typically a processed and
+     * stalling stream, if max raw sensor format output stream number is 1, max YUV streams
+     * number is 3, and max JPEG stream number is 2, then this tuple should be <code>(1, 3, 2)</code>.</p>
+     * <p>This lists the upper bound of the number of output streams supported by
+     * the camera device. Using more streams simultaneously may require more hardware and
+     * CPU resources that will consume more power. The image format for a output stream can
+     * be any supported format provided by {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS android.scaler.availableStreamConfigurations}.
+     * The formats defined in {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS android.scaler.availableStreamConfigurations} can be catergorized
+     * into the 3 stream types as below:</p>
+     * <ul>
+     * <li>Processed (but stalling): any non-RAW format with a stallDurations &gt; 0.
+     * Typically JPEG format (ImageFormat#JPEG).</li>
+     * <li>Raw formats: ImageFormat#RAW_SENSOR and ImageFormat#RAW_OPAQUE.</li>
+     * <li>Processed (but not-stalling): any non-RAW format without a stall duration.
+     * Typically ImageFormat#YUV_420_888, ImageFormat#NV21, ImageFormat#YV12.</li>
+     * </ul>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS
      */
     public static final Key<int[]> REQUEST_MAX_NUM_OUTPUT_STREAMS =
             new Key<int[]>("android.request.maxNumOutputStreams", int[].class);
 
     /**
-     * <p>
-     * List of app-visible formats
-     * </p>
+     * <p>The maximum numbers of any type of input streams
+     * that can be configured and used simultaneously by a camera device.</p>
+     * <p>When set to 0, it means no input stream is supported.</p>
+     * <p>The image format for a input stream can be any supported
+     * format provided by
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP android.scaler.availableInputOutputFormatsMap}. When using an
+     * input stream, there must be at least one output stream
+     * configured to to receive the reprocessed images.</p>
+     * <p>For example, for Zero Shutter Lag (ZSL) still capture use case, the input
+     * stream image format will be RAW_OPAQUE, the associated output stream image format
+     * should be JPEG.</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP
+     */
+    public static final Key<Integer> REQUEST_MAX_NUM_INPUT_STREAMS =
+            new Key<Integer>("android.request.maxNumInputStreams", int.class);
+
+    /**
+     * <p>Specifies the number of maximum pipeline stages a frame
+     * has to go through from when it's exposed to when it's available
+     * to the framework.</p>
+     * <p>A typical minimum value for this is 2 (one stage to expose,
+     * one stage to readout) from the sensor. The ISP then usually adds
+     * its own stages to do custom HW processing. Further stages may be
+     * added by SW processing.</p>
+     * <p>Depending on what settings are used (e.g. YUV, JPEG) and what
+     * processing is enabled (e.g. face detection), the actual pipeline
+     * depth (specified by {@link CaptureResult#REQUEST_PIPELINE_DEPTH android.request.pipelineDepth}) may be less than
+     * the max pipeline depth.</p>
+     * <p>A pipeline depth of X stages is equivalent to a pipeline latency of
+     * X frame intervals.</p>
+     * <p>This value will be 8 or less.</p>
+     *
+     * @see CaptureResult#REQUEST_PIPELINE_DEPTH
+     */
+    public static final Key<Byte> REQUEST_PIPELINE_MAX_DEPTH =
+            new Key<Byte>("android.request.pipelineMaxDepth", byte.class);
+
+    /**
+     * <p>Optional. Defaults to 1. Defines how many sub-components
+     * a result will be composed of.</p>
+     * <p>In order to combat the pipeline latency, partial results
+     * may be delivered to the application layer from the camera device as
+     * soon as they are available.</p>
+     * <p>A value of 1 means that partial results are not supported.</p>
+     * <p>A typical use case for this might be: after requesting an AF lock the
+     * new AF state might be available 50% of the way through the pipeline.
+     * The camera device could then immediately dispatch this state via a
+     * partial result to the framework/application layer, and the rest of
+     * the metadata via later partial results.</p>
+     */
+    public static final Key<Integer> REQUEST_PARTIAL_RESULT_COUNT =
+            new Key<Integer>("android.request.partialResultCount", int.class);
+
+    /**
+     * <p>List of capabilities that the camera device
+     * advertises as fully supporting.</p>
+     * <p>A capability is a contract that the camera device makes in order
+     * to be able to satisfy one or more use cases.</p>
+     * <p>Listing a capability guarantees that the whole set of features
+     * required to support a common use will all be available.</p>
+     * <p>Using a subset of the functionality provided by an unsupported
+     * capability may be possible on a specific camera device implementation;
+     * to do this query each of android.request.availableRequestKeys,
+     * android.request.availableResultKeys,
+     * android.request.availableCharacteristicsKeys.</p>
+     * <p>XX: Maybe these should go into {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel}
+     * as a table instead?</p>
+     * <p>The following capabilities are guaranteed to be available on
+     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} <code>==</code> FULL devices:</p>
+     * <ul>
+     * <li>MANUAL_SENSOR</li>
+     * <li>ZSL</li>
+     * </ul>
+     * <p>Other capabilities may be available on either FULL or LIMITED
+     * devices, but the app. should query this field to be sure.</p>
+     *
+     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
+     * @see #REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE
+     * @see #REQUEST_AVAILABLE_CAPABILITIES_OPTIONAL
+     * @see #REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR
+     * @see #REQUEST_AVAILABLE_CAPABILITIES_GCAM
+     * @see #REQUEST_AVAILABLE_CAPABILITIES_ZSL
+     * @see #REQUEST_AVAILABLE_CAPABILITIES_DNG
+     */
+    public static final Key<Integer> REQUEST_AVAILABLE_CAPABILITIES =
+            new Key<Integer>("android.request.availableCapabilities", int.class);
+
+    /**
+     * <p>A list of all keys that the camera device has available
+     * to use with CaptureRequest.</p>
+     * <p>Attempting to set a key into a CaptureRequest that is not
+     * listed here will result in an invalid request and will be rejected
+     * by the camera device.</p>
+     * <p>This field can be used to query the feature set of a camera device
+     * at a more granular level than capabilities. This is especially
+     * important for optional keys that are not listed under any capability
+     * in {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}.</p>
+     * <p>TODO: This should be used by #getAvailableCaptureRequestKeys.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     * @hide
+     */
+    public static final Key<int[]> REQUEST_AVAILABLE_REQUEST_KEYS =
+            new Key<int[]>("android.request.availableRequestKeys", int[].class);
+
+    /**
+     * <p>A list of all keys that the camera device has available
+     * to use with CaptureResult.</p>
+     * <p>Attempting to get a key from a CaptureResult that is not
+     * listed here will always return a <code>null</code> value. Getting a key from
+     * a CaptureResult that is listed here must never return a <code>null</code>
+     * value.</p>
+     * <p>The following keys may return <code>null</code> unless they are enabled:</p>
+     * <ul>
+     * <li>{@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap} (non-null iff {@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode} == ON)</li>
+     * </ul>
+     * <p>(Those sometimes-null keys should nevertheless be listed here
+     * if they are available.)</p>
+     * <p>This field can be used to query the feature set of a camera device
+     * at a more granular level than capabilities. This is especially
+     * important for optional keys that are not listed under any capability
+     * in {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}.</p>
+     * <p>TODO: This should be used by #getAvailableCaptureResultKeys.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
+     * @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
+     * @hide
+     */
+    public static final Key<int[]> REQUEST_AVAILABLE_RESULT_KEYS =
+            new Key<int[]>("android.request.availableResultKeys", int[].class);
+
+    /**
+     * <p>A list of all keys that the camera device has available
+     * to use with CameraCharacteristics.</p>
+     * <p>This entry follows the same rules as
+     * android.request.availableResultKeys (except that it applies for
+     * CameraCharacteristics instead of CaptureResult). See above for more
+     * details.</p>
+     * <p>TODO: This should be used by CameraCharacteristics#getKeys.</p>
+     * @hide
+     */
+    public static final Key<int[]> REQUEST_AVAILABLE_CHARACTERISTICS_KEYS =
+            new Key<int[]>("android.request.availableCharacteristicsKeys", int[].class);
+
+    /**
+     * <p>The list of image formats that are supported by this
+     * camera device for output streams.</p>
+     * <p>All camera devices will support JPEG and YUV_420_888 formats.</p>
+     * <p>When set to YUV_420_888, application can access the YUV420 data directly.</p>
      */
     public static final Key<int[]> SCALER_AVAILABLE_FORMATS =
             new Key<int[]>("android.scaler.availableFormats", int[].class);
 
     /**
-     * <p>
-     * The minimum frame duration that is supported
-     * for each resolution in availableJpegSizes. Should
-     * correspond to the frame duration when only that JPEG
-     * stream is active and captured in a burst, with all
-     * processing set to FAST
-     * </p>
-     * <p>
-     * When multiple streams are configured, the minimum
-     * frame duration will be >= max(individual stream min
-     * durations)
-     * </p>
+     * <p>The minimum frame duration that is supported
+     * for each resolution in {@link CameraCharacteristics#SCALER_AVAILABLE_JPEG_SIZES android.scaler.availableJpegSizes}.</p>
+     * <p>This corresponds to the minimum steady-state frame duration when only
+     * that JPEG stream is active and captured in a burst, with all
+     * processing (typically in android.*.mode) set to FAST.</p>
+     * <p>When multiple streams are configured, the minimum
+     * frame duration will be &gt;= max(individual stream min
+     * durations)</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_JPEG_SIZES
      */
     public static final Key<long[]> SCALER_AVAILABLE_JPEG_MIN_DURATIONS =
             new Key<long[]>("android.scaler.availableJpegMinDurations", long[].class);
 
     /**
-     * <p>
-     * The resolutions available for output from
-     * the JPEG block. Listed as width x height
-     * </p>
+     * <p>The JPEG resolutions that are supported by this camera device.</p>
+     * <p>The resolutions are listed as <code>(width, height)</code> pairs. All camera devices will support
+     * sensor maximum resolution (defined by {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}).</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      */
     public static final Key<android.hardware.camera2.Size[]> SCALER_AVAILABLE_JPEG_SIZES =
             new Key<android.hardware.camera2.Size[]>("android.scaler.availableJpegSizes", android.hardware.camera2.Size[].class);
 
     /**
-     * <p>
-     * The maximum ratio between active area width
+     * <p>The maximum ratio between active area width
      * and crop region width, or between active area height and
      * crop region height, if the crop region height is larger
-     * than width
-     * </p>
+     * than width</p>
      */
     public static final Key<Float> SCALER_AVAILABLE_MAX_DIGITAL_ZOOM =
             new Key<Float>("android.scaler.availableMaxDigitalZoom", float.class);
 
     /**
-     * <p>
-     * The minimum frame duration that is supported
-     * for each resolution in availableProcessedSizes. Should
-     * correspond to the frame duration when only that processed
-     * stream is active, with all processing set to
-     * FAST
-     * </p>
-     * <p>
-     * When multiple streams are configured, the minimum
-     * frame duration will be >= max(individual stream min
-     * durations)
-     * </p>
+     * <p>For each available processed output size (defined in
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_PROCESSED_SIZES android.scaler.availableProcessedSizes}), this property lists the
+     * minimum supportable frame duration for that size.</p>
+     * <p>This should correspond to the frame duration when only that processed
+     * stream is active, with all processing (typically in android.*.mode)
+     * set to FAST.</p>
+     * <p>When multiple streams are configured, the minimum frame duration will
+     * be &gt;= max(individual stream min durations).</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_PROCESSED_SIZES
      */
     public static final Key<long[]> SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS =
             new Key<long[]>("android.scaler.availableProcessedMinDurations", long[].class);
 
     /**
-     * <p>
-     * The resolutions available for use with
+     * <p>The resolutions available for use with
      * processed output streams, such as YV12, NV12, and
      * platform opaque YUV/RGB streams to the GPU or video
-     * encoders. Listed as width, height
-     * </p>
-     * <p>
-     * The actual supported resolution list may be limited by
-     * consumer end points for different use cases. For example, for
-     * recording use case, the largest supported resolution may be
-     * limited by max supported size from encoder, for preview use
-     * case, the largest supported resolution may be limited by max
-     * resolution SurfaceTexture/SurfaceView can support.
-     * </p>
+     * encoders.</p>
+     * <p>The resolutions are listed as <code>(width, height)</code> pairs.</p>
+     * <p>For a given use case, the actual maximum supported resolution
+     * may be lower than what is listed here, depending on the destination
+     * Surface for the image data. For example, for recording video,
+     * the video encoder chosen may have a maximum size limit (e.g. 1080p)
+     * smaller than what the camera (e.g. maximum resolution is 3264x2448)
+     * can provide.</p>
+     * <p>Please reference the documentation for the image data destination to
+     * check if it limits the maximum size for image data.</p>
      */
     public static final Key<android.hardware.camera2.Size[]> SCALER_AVAILABLE_PROCESSED_SIZES =
             new Key<android.hardware.camera2.Size[]>("android.scaler.availableProcessedSizes", android.hardware.camera2.Size[].class);
 
     /**
-     * <p>
-     * Area of raw data which corresponds to only
-     * active pixels; smaller or equal to
-     * pixelArraySize.
-     * </p>
+     * <p>The mapping of image formats that are supported by this
+     * camera device for input streams, to their corresponding output formats.</p>
+     * <p>All camera devices with at least 1
+     * {@link CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS android.request.maxNumInputStreams} will have at least one
+     * available input format.</p>
+     * <p>The camera device will support the following map of formats,
+     * if its dependent capability is supported:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="left">Input Format</th>
+     * <th align="left">Output Format</th>
+     * <th align="left">Capability</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="left">RAW_OPAQUE</td>
+     * <td align="left">JPEG</td>
+     * <td align="left">ZSL</td>
+     * </tr>
+     * <tr>
+     * <td align="left">RAW_OPAQUE</td>
+     * <td align="left">YUV_420_888</td>
+     * <td align="left">ZSL</td>
+     * </tr>
+     * <tr>
+     * <td align="left">RAW_OPAQUE</td>
+     * <td align="left">RAW16</td>
+     * <td align="left">DNG</td>
+     * </tr>
+     * <tr>
+     * <td align="left">RAW16</td>
+     * <td align="left">YUV_420_888</td>
+     * <td align="left">DNG</td>
+     * </tr>
+     * <tr>
+     * <td align="left">RAW16</td>
+     * <td align="left">JPEG</td>
+     * <td align="left">DNG</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>For ZSL-capable camera devices, using the RAW_OPAQUE format
+     * as either input or output will never hurt maximum frame rate (i.e.
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS android.scaler.availableStallDurations} will not have RAW_OPAQUE).</p>
+     * <p>Attempting to configure an input stream with output streams not
+     * listed as available in this map is not valid.</p>
+     * <p>TODO: Add java type mapping for this property.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_MAX_NUM_INPUT_STREAMS
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS
+     */
+    public static final Key<int[]> SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP =
+            new Key<int[]>("android.scaler.availableInputOutputFormatsMap", int[].class);
+
+    /**
+     * <p>The available stream configurations that this
+     * camera device supports
+     * (i.e. format, width, height, output/input stream).</p>
+     * <p>The configurations are listed as <code>(format, width, height, input?)</code>
+     * tuples.</p>
+     * <p>All camera devices will support sensor maximum resolution (defined by
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}) for the JPEG format.</p>
+     * <p>For a given use case, the actual maximum supported resolution
+     * may be lower than what is listed here, depending on the destination
+     * Surface for the image data. For example, for recording video,
+     * the video encoder chosen may have a maximum size limit (e.g. 1080p)
+     * smaller than what the camera (e.g. maximum resolution is 3264x2448)
+     * can provide.</p>
+     * <p>Please reference the documentation for the image data destination to
+     * check if it limits the maximum size for image data.</p>
+     * <p>Not all output formats may be supported in a configuration with
+     * an input stream of a particular format. For more details, see
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP android.scaler.availableInputOutputFormatsMap}.</p>
+     * <p>The following table describes the minimum required output stream
+     * configurations based on the hardware level
+     * ({@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel}):</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">Format</th>
+     * <th align="center">Size</th>
+     * <th align="center">Hardware Level</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">JPEG</td>
+     * <td align="center">{@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}</td>
+     * <td align="center">Any</td>
+     * <td align="center"></td>
+     * </tr>
+     * <tr>
+     * <td align="center">JPEG</td>
+     * <td align="center">1920x1080 (1080p)</td>
+     * <td align="center">Any</td>
+     * <td align="center">if 1080p &lt;= activeArraySize</td>
+     * </tr>
+     * <tr>
+     * <td align="center">JPEG</td>
+     * <td align="center">1280x720 (720)</td>
+     * <td align="center">Any</td>
+     * <td align="center">if 720p &lt;= activeArraySize</td>
+     * </tr>
+     * <tr>
+     * <td align="center">JPEG</td>
+     * <td align="center">640x480 (480p)</td>
+     * <td align="center">Any</td>
+     * <td align="center">if 480p &lt;= activeArraySize</td>
+     * </tr>
+     * <tr>
+     * <td align="center">JPEG</td>
+     * <td align="center">320x240 (240p)</td>
+     * <td align="center">Any</td>
+     * <td align="center">if 240p &lt;= activeArraySize</td>
+     * </tr>
+     * <tr>
+     * <td align="center">YUV_420_888</td>
+     * <td align="center">all output sizes available for JPEG</td>
+     * <td align="center">FULL</td>
+     * <td align="center"></td>
+     * </tr>
+     * <tr>
+     * <td align="center">YUV_420_888</td>
+     * <td align="center">all output sizes available for JPEG, up to the maximum video size</td>
+     * <td align="center">LIMITED</td>
+     * <td align="center"></td>
+     * </tr>
+     * <tr>
+     * <td align="center">IMPLEMENTATION_DEFINED</td>
+     * <td align="center">same as YUV_420_888</td>
+     * <td align="center">Any</td>
+     * <td align="center"></td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>Refer to {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities} for additional
+     * mandatory stream configurations on a per-capability basis.</p>
+     *
+     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     * @see CameraCharacteristics#SCALER_AVAILABLE_INPUT_OUTPUT_FORMATS_MAP
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see #SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT
+     * @see #SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT
+     */
+    public static final Key<int[]> SCALER_AVAILABLE_STREAM_CONFIGURATIONS =
+            new Key<int[]>("android.scaler.availableStreamConfigurations", int[].class);
+
+    /**
+     * <p>This lists the minimum frame duration for each
+     * format/size combination.</p>
+     * <p>This should correspond to the frame duration when only that
+     * stream is active, with all processing (typically in android.*.mode)
+     * set to either OFF or FAST.</p>
+     * <p>When multiple streams are used in a request, the minimum frame
+     * duration will be max(individual stream min durations).</p>
+     * <p>The minimum frame duration of a stream (of a particular format, size)
+     * is the same regardless of whether the stream is input or output.</p>
+     * <p>See {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} and
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS android.scaler.availableStallDurations} for more details about
+     * calculating the max frame rate.</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     */
+    public static final Key<long[]> SCALER_AVAILABLE_MIN_FRAME_DURATIONS =
+            new Key<long[]>("android.scaler.availableMinFrameDurations", long[].class);
+
+    /**
+     * <p>This lists the maximum stall duration for each
+     * format/size combination.</p>
+     * <p>A stall duration is how much extra time would get added
+     * to the normal minimum frame duration for a repeating request
+     * that has streams with non-zero stall.</p>
+     * <p>For example, consider JPEG captures which have the following
+     * characteristics:</p>
+     * <ul>
+     * <li>JPEG streams act like processed YUV streams in requests for which
+     * they are not included; in requests in which they are directly
+     * referenced, they act as JPEG streams. This is because supporting a
+     * JPEG stream requires the underlying YUV data to always be ready for
+     * use by a JPEG encoder, but the encoder will only be used (and impact
+     * frame duration) on requests that actually reference a JPEG stream.</li>
+     * <li>The JPEG processor can run concurrently to the rest of the camera
+     * pipeline, but cannot process more than 1 capture at a time.</li>
+     * </ul>
+     * <p>In other words, using a repeating YUV request would result
+     * in a steady frame rate (let's say it's 30 FPS). If a single
+     * JPEG request is submitted periodically, the frame rate will stay
+     * at 30 FPS (as long as we wait for the previous JPEG to return each
+     * time). If we try to submit a repeating YUV + JPEG request, then
+     * the frame rate will drop from 30 FPS.</p>
+     * <p>In general, submitting a new request with a non-0 stall time
+     * stream will <em>not</em> cause a frame rate drop unless there are still
+     * outstanding buffers for that stream from previous requests.</p>
+     * <p>Submitting a repeating request with streams (call this <code>S</code>)
+     * is the same as setting the minimum frame duration from
+     * the normal minimum frame duration corresponding to <code>S</code>, added with
+     * the maximum stall duration for <code>S</code>.</p>
+     * <p>If interleaving requests with and without a stall duration,
+     * a request will stall by the maximum of the remaining times
+     * for each can-stall stream with outstanding buffers.</p>
+     * <p>This means that a stalling request will not have an exposure start
+     * until the stall has completed.</p>
+     * <p>This should correspond to the stall duration when only that stream is
+     * active, with all processing (typically in android.*.mode) set to FAST
+     * or OFF. Setting any of the processing modes to HIGH_QUALITY
+     * effectively results in an indeterminate stall duration for all
+     * streams in a request (the regular stall calculation rules are
+     * ignored).</p>
+     * <p>The following formats may always have a stall duration:</p>
+     * <ul>
+     * <li>JPEG</li>
+     * <li>RAW16</li>
+     * </ul>
+     * <p>The following formats will never have a stall duration:</p>
+     * <ul>
+     * <li>YUV_420_888</li>
+     * <li>IMPLEMENTATION_DEFINED</li>
+     * </ul>
+     * <p>All other formats may or may not have an allowed stall duration on
+     * a per-capability basis; refer to {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
+     * for more details.</p>
+     * <p>See {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} for more information about
+     * calculating the max frame rate (absent stalls).</p>
+     *
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     */
+    public static final Key<long[]> SCALER_AVAILABLE_STALL_DURATIONS =
+            new Key<long[]>("android.scaler.availableStallDurations", long[].class);
+
+    /**
+     * <p>Area of raw data which corresponds to only
+     * active pixels.</p>
+     * <p>It is smaller or equal to
+     * sensor full pixel array, which could include the black calibration pixels.</p>
      */
     public static final Key<android.graphics.Rect> SENSOR_INFO_ACTIVE_ARRAY_SIZE =
             new Key<android.graphics.Rect>("android.sensor.info.activeArraySize", android.graphics.Rect.class);
 
     /**
-     * <p>
-     * Range of valid sensitivities
-     * </p>
+     * <p>Range of valid sensitivities</p>
      */
     public static final Key<int[]> SENSOR_INFO_SENSITIVITY_RANGE =
             new Key<int[]>("android.sensor.info.sensitivityRange", int[].class);
 
     /**
-     * <p>
-     * Range of valid exposure
-     * times
-     * </p>
+     * <p>Arrangement of color filters on sensor;
+     * represents the colors in the top-left 2x2 section of
+     * the sensor, in reading order</p>
+     * @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB
+     * @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG
+     * @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG
+     * @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR
+     * @see #SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB
+     */
+    public static final Key<Integer> SENSOR_INFO_COLOR_FILTER_ARRANGEMENT =
+            new Key<Integer>("android.sensor.info.colorFilterArrangement", int.class);
+
+    /**
+     * <p>Range of valid exposure
+     * times used by {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}.</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
      */
     public static final Key<long[]> SENSOR_INFO_EXPOSURE_TIME_RANGE =
             new Key<long[]>("android.sensor.info.exposureTimeRange", long[].class);
 
     /**
-     * <p>
-     * Maximum possible frame duration (minimum frame
-     * rate)
-     * </p>
-     * <p>
-     * Minimum duration is a function of resolution,
-     * processing settings. See
-     * android.scaler.availableProcessedMinDurations
-     * android.scaler.availableJpegMinDurations
-     * android.scaler.availableRawMinDurations
-     * </p>
+     * <p>Maximum possible frame duration (minimum frame
+     * rate).</p>
+     * <p>The largest possible {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration}
+     * that will be accepted by the camera device. Attempting to use
+     * frame durations beyond the maximum will result in the frame duration
+     * being clipped to the maximum. See that control
+     * for a full definition of frame durations.</p>
+     * <p>Refer to
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS android.scaler.availableProcessedMinDurations},
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_JPEG_MIN_DURATIONS android.scaler.availableJpegMinDurations}, and
+     * android.scaler.availableRawMinDurations for the minimum
+     * frame duration values.</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_JPEG_MIN_DURATIONS
+     * @see CameraCharacteristics#SCALER_AVAILABLE_PROCESSED_MIN_DURATIONS
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
      */
     public static final Key<Long> SENSOR_INFO_MAX_FRAME_DURATION =
             new Key<Long>("android.sensor.info.maxFrameDuration", long.class);
 
     /**
-     * <p>
-     * The physical dimensions of the full pixel
-     * array
-     * </p>
-     * <p>
-     * Needed for FOV calculation for old API
-     * </p>
+     * <p>The physical dimensions of the full pixel
+     * array</p>
+     * <p>Needed for FOV calculation for old API</p>
      */
     public static final Key<float[]> SENSOR_INFO_PHYSICAL_SIZE =
             new Key<float[]>("android.sensor.info.physicalSize", float[].class);
 
     /**
-     * <p>
-     * Gain factor from electrons to raw units when
-     * ISO=100
-     * </p>
+     * <p>Dimensions of full pixel array, possibly
+     * including black calibration pixels.</p>
+     * <p>Maximum output resolution for raw format must
+     * match this in
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS android.scaler.availableStreamConfigurations}.</p>
      *
-     * <b>Optional</b> - This value may be null on some devices.
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS
+     */
+    public static final Key<android.hardware.camera2.Size> SENSOR_INFO_PIXEL_ARRAY_SIZE =
+            new Key<android.hardware.camera2.Size>("android.sensor.info.pixelArraySize", android.hardware.camera2.Size.class);
+
+    /**
+     * <p>Maximum raw value output by sensor.</p>
+     * <p>This specifies the fully-saturated encoding level for the raw
+     * sample values from the sensor.  This is typically caused by the
+     * sensor becoming highly non-linear or clipping. The minimum for
+     * each channel is specified by the offset in the
+     * {@link CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN android.sensor.blackLevelPattern} tag.</p>
+     * <p>The white level is typically determined either by sensor bit depth
+     * (8-14 bits is expected), or by the point where the sensor response
+     * becomes too non-linear to be useful.  The default value for this is
+     * maximum representable value for a 16-bit raw sample (2^16 - 1).</p>
      *
-     * <b>{@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL}</b> -
-     * Present on all devices that report being FULL level hardware devices in the
-     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL HARDWARE_LEVEL} key.
+     * @see CameraCharacteristics#SENSOR_BLACK_LEVEL_PATTERN
+     */
+    public static final Key<Integer> SENSOR_INFO_WHITE_LEVEL =
+            new Key<Integer>("android.sensor.info.whiteLevel", int.class);
+
+    /**
+     * <p>The standard reference illuminant used as the scene light source when
+     * calculating the {@link CameraCharacteristics#SENSOR_COLOR_TRANSFORM1 android.sensor.colorTransform1},
+     * {@link CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM1 android.sensor.calibrationTransform1}, and
+     * {@link CameraCharacteristics#SENSOR_FORWARD_MATRIX1 android.sensor.forwardMatrix1} matrices.</p>
+     * <p>The values in this tag correspond to the values defined for the
+     * EXIF LightSource tag. These illuminants are standard light sources
+     * that are often used calibrating camera devices.</p>
+     * <p>If this tag is present, then {@link CameraCharacteristics#SENSOR_COLOR_TRANSFORM1 android.sensor.colorTransform1},
+     * {@link CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM1 android.sensor.calibrationTransform1}, and
+     * {@link CameraCharacteristics#SENSOR_FORWARD_MATRIX1 android.sensor.forwardMatrix1} will also be present.</p>
+     * <p>Some devices may choose to provide a second set of calibration
+     * information for improved quality, including
+     * {@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2 android.sensor.referenceIlluminant2} and its corresponding matrices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM1
+     * @see CameraCharacteristics#SENSOR_COLOR_TRANSFORM1
+     * @see CameraCharacteristics#SENSOR_FORWARD_MATRIX1
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_FLASH
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_SHADE
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_D55
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_D65
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_D75
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_D50
+     * @see #SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN
+     */
+    public static final Key<Integer> SENSOR_REFERENCE_ILLUMINANT1 =
+            new Key<Integer>("android.sensor.referenceIlluminant1", int.class);
+
+    /**
+     * <p>The standard reference illuminant used as the scene light source when
+     * calculating the {@link CameraCharacteristics#SENSOR_COLOR_TRANSFORM2 android.sensor.colorTransform2},
+     * {@link CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM2 android.sensor.calibrationTransform2}, and
+     * {@link CameraCharacteristics#SENSOR_FORWARD_MATRIX2 android.sensor.forwardMatrix2} matrices.</p>
+     * <p>See {@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1} for more details.
+     * Valid values for this are the same as those given for the first
+     * reference illuminant.</p>
+     * <p>If this tag is present, then {@link CameraCharacteristics#SENSOR_COLOR_TRANSFORM2 android.sensor.colorTransform2},
+     * {@link CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM2 android.sensor.calibrationTransform2}, and
+     * {@link CameraCharacteristics#SENSOR_FORWARD_MATRIX2 android.sensor.forwardMatrix2} will also be present.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_CALIBRATION_TRANSFORM2
+     * @see CameraCharacteristics#SENSOR_COLOR_TRANSFORM2
+     * @see CameraCharacteristics#SENSOR_FORWARD_MATRIX2
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final Key<Byte> SENSOR_REFERENCE_ILLUMINANT2 =
+            new Key<Byte>("android.sensor.referenceIlluminant2", byte.class);
+
+    /**
+     * <p>A per-device calibration transform matrix that maps from the
+     * reference sensor colorspace to the actual device sensor colorspace.</p>
+     * <p>This matrix is used to correct for per-device variations in the
+     * sensor colorspace, and is used for processing raw buffer data.</p>
+     * <p>The matrix is expressed as a 3x3 matrix in row-major-order, and
+     * contains a per-device calibration transform that maps colors
+     * from reference sensor color space (i.e. the "golden module"
+     * colorspace) into this camera device's native sensor color
+     * space under the first reference illuminant
+     * ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1}).</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final Key<Rational[]> SENSOR_CALIBRATION_TRANSFORM1 =
+            new Key<Rational[]>("android.sensor.calibrationTransform1", Rational[].class);
+
+    /**
+     * <p>A per-device calibration transform matrix that maps from the
+     * reference sensor colorspace to the actual device sensor colorspace
+     * (this is the colorspace of the raw buffer data).</p>
+     * <p>This matrix is used to correct for per-device variations in the
+     * sensor colorspace, and is used for processing raw buffer data.</p>
+     * <p>The matrix is expressed as a 3x3 matrix in row-major-order, and
+     * contains a per-device calibration transform that maps colors
+     * from reference sensor color space (i.e. the "golden module"
+     * colorspace) into this camera device's native sensor color
+     * space under the second reference illuminant
+     * ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2 android.sensor.referenceIlluminant2}).</p>
+     * <p>This matrix will only be present if the second reference
+     * illuminant is present.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
+     */
+    public static final Key<Rational[]> SENSOR_CALIBRATION_TRANSFORM2 =
+            new Key<Rational[]>("android.sensor.calibrationTransform2", Rational[].class);
+
+    /**
+     * <p>A matrix that transforms color values from CIE XYZ color space to
+     * reference sensor color space.</p>
+     * <p>This matrix is used to convert from the standard CIE XYZ color
+     * space to the reference sensor colorspace, and is used when processing
+     * raw buffer data.</p>
+     * <p>The matrix is expressed as a 3x3 matrix in row-major-order, and
+     * contains a color transform matrix that maps colors from the CIE
+     * XYZ color space to the reference sensor color space (i.e. the
+     * "golden module" colorspace) under the first reference illuminant
+     * ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1}).</p>
+     * <p>The white points chosen in both the reference sensor color space
+     * and the CIE XYZ colorspace when calculating this transform will
+     * match the standard white point for the first reference illuminant
+     * (i.e. no chromatic adaptation will be applied by this transform).</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final Key<Rational[]> SENSOR_COLOR_TRANSFORM1 =
+            new Key<Rational[]>("android.sensor.colorTransform1", Rational[].class);
+
+    /**
+     * <p>A matrix that transforms color values from CIE XYZ color space to
+     * reference sensor color space.</p>
+     * <p>This matrix is used to convert from the standard CIE XYZ color
+     * space to the reference sensor colorspace, and is used when processing
+     * raw buffer data.</p>
+     * <p>The matrix is expressed as a 3x3 matrix in row-major-order, and
+     * contains a color transform matrix that maps colors from the CIE
+     * XYZ color space to the reference sensor color space (i.e. the
+     * "golden module" colorspace) under the second reference illuminant
+     * ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2 android.sensor.referenceIlluminant2}).</p>
+     * <p>The white points chosen in both the reference sensor color space
+     * and the CIE XYZ colorspace when calculating this transform will
+     * match the standard white point for the second reference illuminant
+     * (i.e. no chromatic adaptation will be applied by this transform).</p>
+     * <p>This matrix will only be present if the second reference
+     * illuminant is present.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
+     */
+    public static final Key<Rational[]> SENSOR_COLOR_TRANSFORM2 =
+            new Key<Rational[]>("android.sensor.colorTransform2", Rational[].class);
+
+    /**
+     * <p>A matrix that transforms white balanced camera colors from the reference
+     * sensor colorspace to the CIE XYZ colorspace with a D50 whitepoint.</p>
+     * <p>This matrix is used to convert to the standard CIE XYZ colorspace, and
+     * is used when processing raw buffer data.</p>
+     * <p>This matrix is expressed as a 3x3 matrix in row-major-order, and contains
+     * a color transform matrix that maps white balanced colors from the
+     * reference sensor color space to the CIE XYZ color space with a D50 white
+     * point.</p>
+     * <p>Under the first reference illuminant ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1 android.sensor.referenceIlluminant1})
+     * this matrix is chosen so that the standard white point for this reference
+     * illuminant in the reference sensor colorspace is mapped to D50 in the
+     * CIE XYZ colorspace.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final Key<Rational[]> SENSOR_FORWARD_MATRIX1 =
+            new Key<Rational[]>("android.sensor.forwardMatrix1", Rational[].class);
+
+    /**
+     * <p>A matrix that transforms white balanced camera colors from the reference
+     * sensor colorspace to the CIE XYZ colorspace with a D50 whitepoint.</p>
+     * <p>This matrix is used to convert to the standard CIE XYZ colorspace, and
+     * is used when processing raw buffer data.</p>
+     * <p>This matrix is expressed as a 3x3 matrix in row-major-order, and contains
+     * a color transform matrix that maps white balanced colors from the
+     * reference sensor color space to the CIE XYZ color space with a D50 white
+     * point.</p>
+     * <p>Under the second reference illuminant ({@link CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2 android.sensor.referenceIlluminant2})
+     * this matrix is chosen so that the standard white point for this reference
+     * illuminant in the reference sensor colorspace is mapped to D50 in the
+     * CIE XYZ colorspace.</p>
+     * <p>This matrix will only be present if the second reference
+     * illuminant is present.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT2
+     */
+    public static final Key<Rational[]> SENSOR_FORWARD_MATRIX2 =
+            new Key<Rational[]>("android.sensor.forwardMatrix2", Rational[].class);
+
+    /**
+     * <p>Gain factor from electrons to raw units when
+     * ISO=100</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     * <p><b>Full capability</b> -
+     * Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
+     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
+     *
+     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
      */
     public static final Key<Rational> SENSOR_BASE_GAIN_FACTOR =
             new Key<Rational>("android.sensor.baseGainFactor", Rational.class);
 
     /**
-     * <p>
-     * Maximum sensitivity that is implemented
-     * purely through analog gain
-     * </p>
-     * <p>
-     * For android.sensor.sensitivity values less than or
+     * <p>A fixed black level offset for each of the color filter arrangement
+     * (CFA) mosaic channels.</p>
+     * <p>This tag specifies the zero light value for each of the CFA mosaic
+     * channels in the camera sensor.  The maximal value output by the
+     * sensor is represented by the value in {@link CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL android.sensor.info.whiteLevel}.</p>
+     * <p>The values are given in row-column scan order, with the first value
+     * corresponding to the element of the CFA in row=0, column=0.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_WHITE_LEVEL
+     */
+    public static final Key<int[]> SENSOR_BLACK_LEVEL_PATTERN =
+            new Key<int[]>("android.sensor.blackLevelPattern", int[].class);
+
+    /**
+     * <p>Maximum sensitivity that is implemented
+     * purely through analog gain.</p>
+     * <p>For {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} values less than or
      * equal to this, all applied gain must be analog. For
-     * values above this, it can be a mix of analog and
-     * digital
-     * </p>
+     * values above this, the gain applied can be a mix of analog and
+     * digital.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     * <p><b>Full capability</b> -
+     * Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
+     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
      *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
-     * <b>{@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL}</b> -
-     * Present on all devices that report being FULL level hardware devices in the
-     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL HARDWARE_LEVEL} key.
+     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      */
     public static final Key<Integer> SENSOR_MAX_ANALOG_SENSITIVITY =
             new Key<Integer>("android.sensor.maxAnalogSensitivity", int.class);
 
     /**
-     * <p>
-     * Clockwise angle through which the output
+     * <p>Clockwise angle through which the output
      * image needs to be rotated to be upright on the device
      * screen in its native orientation. Also defines the
      * direction of rolling shutter readout, which is from top
-     * to bottom in the sensor's coordinate system
-     * </p>
+     * to bottom in the sensor's coordinate system</p>
      */
     public static final Key<Integer> SENSOR_ORIENTATION =
             new Key<Integer>("android.sensor.orientation", int.class);
 
     /**
-     * <p>
-     * Which face detection modes are available,
-     * if any
-     * </p>
-     * <p>
-     * OFF means face detection is disabled, it must
-     * be included in the list.
-     * </p><p>
-     * SIMPLE means the device supports the
+     * <p>The number of input samples for each dimension of
+     * {@link CaptureResult#SENSOR_PROFILE_HUE_SAT_MAP android.sensor.profileHueSatMap}.</p>
+     * <p>The number of input samples for the hue, saturation, and value
+     * dimension of {@link CaptureResult#SENSOR_PROFILE_HUE_SAT_MAP android.sensor.profileHueSatMap}. The order of the
+     * dimensions given is hue, saturation, value; where hue is the 0th
+     * element.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CaptureResult#SENSOR_PROFILE_HUE_SAT_MAP
+     */
+    public static final Key<int[]> SENSOR_PROFILE_HUE_SAT_MAP_DIMENSIONS =
+            new Key<int[]>("android.sensor.profileHueSatMapDimensions", int[].class);
+
+    /**
+     * <p>Optional. Defaults to [OFF]. Lists the supported test
+     * pattern modes for {@link CaptureRequest#SENSOR_TEST_PATTERN_MODE android.sensor.testPatternMode}.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final Key<int[]> SENSOR_AVAILABLE_TEST_PATTERN_MODES =
+            new Key<int[]>("android.sensor.availableTestPatternModes", int[].class);
+
+    /**
+     * <p>Which face detection modes are available,
+     * if any</p>
+     * <p>OFF means face detection is disabled, it must
+     * be included in the list.</p>
+     * <p>SIMPLE means the device supports the
      * android.statistics.faceRectangles and
-     * android.statistics.faceScores outputs.
-     * </p><p>
-     * FULL means the device additionally supports the
+     * android.statistics.faceScores outputs.</p>
+     * <p>FULL means the device additionally supports the
      * android.statistics.faceIds and
-     * android.statistics.faceLandmarks outputs.
-     * </p>
+     * android.statistics.faceLandmarks outputs.</p>
      */
     public static final Key<byte[]> STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES =
             new Key<byte[]>("android.statistics.info.availableFaceDetectModes", byte[].class);
 
     /**
-     * <p>
-     * Maximum number of simultaneously detectable
-     * faces
-     * </p>
+     * <p>Maximum number of simultaneously detectable
+     * faces</p>
      */
     public static final Key<Integer> STATISTICS_INFO_MAX_FACE_COUNT =
             new Key<Integer>("android.statistics.info.maxFaceCount", int.class);
 
     /**
-     * <p>
-     * Maximum number of supported points in the
-     * tonemap curve
-     * </p>
+     * <p>The set of hot pixel map output modes supported by this camera device.</p>
+     * <p>This tag lists valid output modes for {@link CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE android.statistics.hotPixelMapMode}.</p>
+     * <p>If no hotpixel map is available for this camera device, this will contain
+     * only OFF.  If the hotpixel map is available, this should include both
+     * the ON and OFF options.</p>
+     *
+     * @see CaptureRequest#STATISTICS_HOT_PIXEL_MAP_MODE
+     */
+    public static final Key<boolean[]> STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES =
+            new Key<boolean[]>("android.statistics.info.availableHotPixelMapModes", boolean[].class);
+
+    /**
+     * <p>Maximum number of supported points in the
+     * tonemap curve that can be used for {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed}, or
+     * {@link CaptureRequest#TONEMAP_CURVE_GREEN android.tonemap.curveGreen}, or {@link CaptureRequest#TONEMAP_CURVE_BLUE android.tonemap.curveBlue}.</p>
+     * <p>If the actual number of points provided by the application (in
+     * android.tonemap.curve*)  is less than max, the camera device will
+     * resample the curve to its internal representation, using linear
+     * interpolation.</p>
+     * <p>The output curves in the result metadata may have a different number
+     * of points than the input curves, and will represent the actual
+     * hardware curves used as closely as possible when linearly interpolated.</p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_BLUE
+     * @see CaptureRequest#TONEMAP_CURVE_GREEN
+     * @see CaptureRequest#TONEMAP_CURVE_RED
      */
     public static final Key<Integer> TONEMAP_MAX_CURVE_POINTS =
             new Key<Integer>("android.tonemap.maxCurvePoints", int.class);
 
     /**
-     * <p>
-     * A list of camera LEDs that are available on this system.
-     * </p>
-     * @see #LED_AVAILABLE_LEDS_TRANSMIT
+     * <p>The set of tonemapping modes supported by this camera device.</p>
+     * <p>This tag lists the valid modes for {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode}.</p>
+     * <p>Full-capability camera devices must always support CONTRAST_CURVE and
+     * FAST.</p>
      *
+     * @see CaptureRequest#TONEMAP_MODE
+     */
+    public static final Key<byte[]> TONEMAP_AVAILABLE_TONE_MAP_MODES =
+            new Key<byte[]>("android.tonemap.availableToneMapModes", byte[].class);
+
+    /**
+     * <p>A list of camera LEDs that are available on this system.</p>
+     * @see #LED_AVAILABLE_LEDS_TRANSMIT
      * @hide
      */
     public static final Key<int[]> LED_AVAILABLE_LEDS =
             new Key<int[]>("android.led.availableLeds", int[].class);
 
     /**
-     * <p>
-     * The camera 3 HAL device can implement one of two possible
-     * operational modes; limited and full. Full support is
-     * expected from new higher-end devices. Limited mode has
-     * hardware requirements roughly in line with those for a
-     * camera HAL device v1 implementation, and is expected from
-     * older or inexpensive devices. Full is a strict superset of
-     * limited, and they share the same essential operational flow.
-     * </p><p>
-     * For full details refer to "S3. Operational Modes" in camera3.h
-     * </p>
+     * <p>Generally classifies the overall set of the camera device functionality.</p>
+     * <p>Camera devices will come in two flavors: LIMITED and FULL.</p>
+     * <p>A FULL device has the most support possible and will enable the
+     * widest range of use cases such as:</p>
+     * <ul>
+     * <li>30 FPS at maximum resolution (== sensor resolution)</li>
+     * <li>Per frame control</li>
+     * <li>Manual sensor control</li>
+     * <li>Zero Shutter Lag (ZSL)</li>
+     * </ul>
+     * <p>A LIMITED device may have some or none of the above characteristics.
+     * To find out more refer to {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
      * @see #INFO_SUPPORTED_HARDWARE_LEVEL_LIMITED
      * @see #INFO_SUPPORTED_HARDWARE_LEVEL_FULL
      */
     public static final Key<Integer> INFO_SUPPORTED_HARDWARE_LEVEL =
             new Key<Integer>("android.info.supportedHardwareLevel", int.class);
 
+    /**
+     * <p>The maximum number of frames that can occur after a request
+     * (different than the previous) has been submitted, and before the
+     * result's state becomes synchronized (by setting
+     * android.sync.frameNumber to a non-negative value).</p>
+     * <p>This defines the maximum distance (in number of metadata results),
+     * between android.sync.frameNumber and the equivalent
+     * android.request.frameCount.</p>
+     * <p>In other words this acts as an upper boundary for how many frames
+     * must occur before the camera device knows for a fact that the new
+     * submitted camera settings have been applied in outgoing frames.</p>
+     * <p>For example if the distance was 2,</p>
+     * <pre><code>initial request = X (repeating)
+     * request1 = X
+     * request2 = Y
+     * request3 = Y
+     * request4 = Y
+     *
+     * where requestN has frameNumber N, and the first of the repeating
+     * initial request's has frameNumber F (and F &lt; 1).
+     *
+     * initial result = X' + { android.sync.frameNumber == F }
+     * result1 = X' + { android.sync.frameNumber == F }
+     * result2 = X' + { android.sync.frameNumber == CONVERGING }
+     * result3 = X' + { android.sync.frameNumber == CONVERGING }
+     * result4 = X' + { android.sync.frameNumber == 2 }
+     *
+     * where resultN has frameNumber N.
+     * </code></pre>
+     * <p>Since <code>result4</code> has a <code>frameNumber == 4</code> and
+     * <code>android.sync.frameNumber == 2</code>, the distance is clearly
+     * <code>4 - 2 = 2</code>.</p>
+     * @see #SYNC_MAX_LATENCY_PER_FRAME_CONTROL
+     * @see #SYNC_MAX_LATENCY_UNKNOWN
+     */
+    public static final Key<Integer> SYNC_MAX_LATENCY =
+            new Key<Integer>("android.sync.maxLatency", int.class);
+
     /*~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~
      * End generated code
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~O@*/
diff --git a/core/java/android/hardware/camera2/CameraDevice.java b/core/java/android/hardware/camera2/CameraDevice.java
index 9e8d7d1..bb290af 100644
--- a/core/java/android/hardware/camera2/CameraDevice.java
+++ b/core/java/android/hardware/camera2/CameraDevice.java
@@ -92,7 +92,6 @@
      * AE/AWB/AF should be on auto mode.
      *
      * @see #createCaptureRequest
-     * @hide
      */
     public static final int TEMPLATE_ZERO_SHUTTER_LAG = 5;
 
@@ -105,7 +104,6 @@
      * application depending on the intended use case.
      *
      * @see #createCaptureRequest
-     * @hide
      */
     public static final int TEMPLATE_MANUAL = 6;
 
@@ -501,31 +499,6 @@
     public void stopRepeating() throws CameraAccessException;
 
     /**
-     * <p>Wait until all the submitted requests have finished processing</p>
-     *
-     * <p>This method blocks until all the requests that have been submitted to
-     * the camera device, either through {@link #capture capture},
-     * {@link #captureBurst captureBurst},
-     * {@link #setRepeatingRequest setRepeatingRequest}, or
-     * {@link #setRepeatingBurst setRepeatingBurst}, have completed their
-     * processing.</p>
-     *
-     * <p>Once this call returns successfully, the device is in an idle state,
-     * and can be reconfigured with {@link #configureOutputs configureOutputs}.</p>
-     *
-     * <p>This method cannot be used if there is an active repeating request or
-     * burst, set with {@link #setRepeatingRequest setRepeatingRequest} or
-     * {@link #setRepeatingBurst setRepeatingBurst}. Call
-     * {@link #stopRepeating stopRepeating} before calling this method.</p>
-     *
-     * @throws CameraAccessException if the camera device is no longer connected
-     * @throws IllegalStateException if the camera device has been closed, the
-     * device has encountered a fatal error, or if there is an active repeating
-     * request or burst.
-     */
-    public void waitUntilIdle() throws CameraAccessException;
-
-    /**
      * Flush all captures currently pending and in-progress as fast as
      * possible.
      *
@@ -597,6 +570,14 @@
     public static abstract class CaptureListener {
 
         /**
+         * This constant is used to indicate that no images were captured for
+         * the request.
+         *
+         * @hide
+         */
+        public static final int NO_FRAMES_CAPTURED = -1;
+
+        /**
          * This method is called when the camera device has started capturing
          * the output image for the request, at the beginning of image exposure.
          *
@@ -720,9 +701,12 @@
          *            The CameraDevice sending the callback.
          * @param sequenceId
          *            A sequence ID returned by the {@link #capture} family of functions.
-         * @param frameNumber
+         * @param lastFrameNumber
          *            The last frame number (returned by {@link CaptureResult#getFrameNumber}
          *            or {@link CaptureFailure#getFrameNumber}) in the capture sequence.
+         *            The last frame number may be equal to NO_FRAMES_CAPTURED if no images
+         *            were captured for this sequence. This can happen, for example, when a
+         *            repeating request or burst is cleared right after being set.
          *
          * @see CaptureResult#getFrameNumber()
          * @see CaptureFailure#getFrameNumber()
@@ -730,7 +714,7 @@
          * @see CaptureFailure#getSequenceId()
          */
         public void onCaptureSequenceCompleted(CameraDevice camera,
-                int sequenceId, int frameNumber) {
+                int sequenceId, int lastFrameNumber) {
             // default empty implementation
         }
     }
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java
index 65b6c7a..0fcd598 100644
--- a/core/java/android/hardware/camera2/CameraManager.java
+++ b/core/java/android/hardware/camera2/CameraManager.java
@@ -19,7 +19,6 @@
 import android.content.Context;
 import android.hardware.ICameraService;
 import android.hardware.ICameraServiceListener;
-import android.hardware.IProCameraUser;
 import android.hardware.camera2.impl.CameraMetadataNative;
 import android.hardware.camera2.utils.CameraBinderDecorator;
 import android.hardware.camera2.utils.CameraRuntimeException;
@@ -49,6 +48,8 @@
  */
 public final class CameraManager {
 
+    private static final String TAG = "CameraManager";
+
     /**
      * This should match the ICameraService definition
      */
@@ -80,6 +81,14 @@
         mCameraService = CameraBinderDecorator.newInstance(cameraServiceRaw);
 
         try {
+            CameraBinderDecorator.throwOnError(
+                    CameraMetadataNative.nativeSetupGlobalVendorTagDescriptor());
+        } catch(CameraRuntimeException e) {
+            throw new IllegalStateException("Failed to setup camera vendor tags",
+                    e.asChecked());
+        }
+
+        try {
             mCameraService.addListener(new CameraServiceListener());
         } catch(CameraRuntimeException e) {
             throw new IllegalStateException("Failed to register a camera service listener",
diff --git a/core/java/android/hardware/camera2/CameraMetadata.java b/core/java/android/hardware/camera2/CameraMetadata.java
index 1d6ff7d..ba8db3a 100644
--- a/core/java/android/hardware/camera2/CameraMetadata.java
+++ b/core/java/android/hardware/camera2/CameraMetadata.java
@@ -168,7 +168,7 @@
 
             Key lhs = (Key) o;
 
-            return mName.equals(lhs.mName);
+            return mName.equals(lhs.mName) && mType.equals(lhs.mType);
         }
 
         /**
@@ -206,6 +206,45 @@
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
 
     //
+    // Enumeration values for CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
+    //
+
+    /**
+     * <p>The lens focus distance is not accurate, and the units used for
+     * {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} do not correspond to any physical units.
+     * Setting the lens to the same focus distance on separate occasions may
+     * result in a different real focus distance, depending on factors such
+     * as the orientation of the device, the age of the focusing mechanism,
+     * and the device temperature. The focus distance value will still be
+     * in the range of <code>[0, {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance}]</code>, where 0
+     * represents the farthest focus.</p>
+     *
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
+     * @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
+     */
+    public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_UNCALIBRATED = 0;
+
+    /**
+     * <p>The lens focus distance is measured in diopters. However, setting the lens
+     * to the same focus distance on separate occasions may result in a
+     * different real focus distance, depending on factors such as the
+     * orientation of the device, the age of the focusing mechanism, and
+     * the device temperature.</p>
+     * @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
+     */
+    public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_APPROXIMATE = 1;
+
+    /**
+     * <p>The lens focus distance is measured in diopters. The lens mechanism is
+     * calibrated so that setting the same focus distance is repeatable on
+     * multiple occasions with good accuracy, and the focus distance corresponds
+     * to the real physical distance to the plane of best focus.</p>
+     * @see CameraCharacteristics#LENS_INFO_FOCUS_DISTANCE_CALIBRATION
+     */
+    public static final int LENS_INFO_FOCUS_DISTANCE_CALIBRATION_CALIBRATED = 2;
+
+    //
     // Enumeration values for CameraCharacteristics#LENS_FACING
     //
 
@@ -220,13 +259,313 @@
     public static final int LENS_FACING_BACK = 1;
 
     //
+    // Enumeration values for CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+    //
+
+    /**
+     * <p>The minimal set of capabilities that every camera
+     * device (regardless of {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel})
+     * will support.</p>
+     * <p>The full set of features supported by this capability makes
+     * the camera2 api backwards compatible with the camera1
+     * (android.hardware.Camera) API.</p>
+     * <p>TODO: @hide this. Doesn't really mean anything except
+     * act as a catch-all for all the 'base' functionality.</p>
+     *
+     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     */
+    public static final int REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE = 0;
+
+    /**
+     * <p>This is a catch-all capability to include all other
+     * tags or functionality not encapsulated by one of the other
+     * capabilities.</p>
+     * <p>A typical example is all tags marked 'optional'.</p>
+     * <p>TODO: @hide. We may not need this if we @hide all the optional
+     * tags not belonging to a capability.</p>
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     */
+    public static final int REQUEST_AVAILABLE_CAPABILITIES_OPTIONAL = 1;
+
+    /**
+     * <p>The camera device can be manually controlled (3A algorithms such
+     * as auto exposure, and auto focus can be
+     * bypassed), this includes but is not limited to:</p>
+     * <ul>
+     * <li>Manual exposure control<ul>
+     * <li>{@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}</li>
+     * <li>{@link CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE android.sensor.info.exposureTimeRange}</li>
+     * </ul>
+     * </li>
+     * <li>Manual sensitivity control<ul>
+     * <li>{@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}</li>
+     * <li>{@link CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE android.sensor.info.sensitivityRange}</li>
+     * <li>{@link CameraCharacteristics#SENSOR_BASE_GAIN_FACTOR android.sensor.baseGainFactor}</li>
+     * </ul>
+     * </li>
+     * <li>Manual lens control<ul>
+     * <li>android.lens.*</li>
+     * </ul>
+     * </li>
+     * <li>Manual flash control<ul>
+     * <li>android.flash.*</li>
+     * </ul>
+     * </li>
+     * <li>Manual black level locking<ul>
+     * <li>{@link CaptureRequest#BLACK_LEVEL_LOCK android.blackLevel.lock}</li>
+     * </ul>
+     * </li>
+     * </ul>
+     * <p>If any of the above 3A algorithms are enabled, then the camera
+     * device will accurately report the values applied by 3A in the
+     * result.</p>
+     *
+     * @see CaptureRequest#BLACK_LEVEL_LOCK
+     * @see CameraCharacteristics#SENSOR_BASE_GAIN_FACTOR
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CameraCharacteristics#SENSOR_INFO_EXPOSURE_TIME_RANGE
+     * @see CameraCharacteristics#SENSOR_INFO_SENSITIVITY_RANGE
+     * @see CaptureRequest#SENSOR_SENSITIVITY
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     */
+    public static final int REQUEST_AVAILABLE_CAPABILITIES_MANUAL_SENSOR = 2;
+
+    /**
+     * <p>TODO: This should be @hide</p>
+     * <ul>
+     * <li>Manual tonemap control<ul>
+     * <li>{@link CaptureRequest#TONEMAP_CURVE_BLUE android.tonemap.curveBlue}</li>
+     * <li>{@link CaptureRequest#TONEMAP_CURVE_GREEN android.tonemap.curveGreen}</li>
+     * <li>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed}</li>
+     * <li>{@link CaptureRequest#TONEMAP_MODE android.tonemap.mode}</li>
+     * <li>{@link CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS android.tonemap.maxCurvePoints}</li>
+     * </ul>
+     * </li>
+     * <li>Manual white balance control<ul>
+     * <li>{@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}</li>
+     * <li>{@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}</li>
+     * </ul>
+     * </li>
+     * <li>Lens shading map information<ul>
+     * <li>{@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap}</li>
+     * <li>{@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize}</li>
+     * </ul>
+     * </li>
+     * </ul>
+     * <p>If auto white balance is enabled, then the camera device
+     * will accurately report the values applied by AWB in the result.</p>
+     * <p>The camera device will also support everything in MANUAL_SENSOR
+     * except manual lens control and manual flash control.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
+     * @see CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
+     * @see CaptureRequest#TONEMAP_CURVE_BLUE
+     * @see CaptureRequest#TONEMAP_CURVE_GREEN
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS
+     * @see CaptureRequest#TONEMAP_MODE
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     */
+    public static final int REQUEST_AVAILABLE_CAPABILITIES_GCAM = 3;
+
+    /**
+     * <p>The camera device supports the Zero Shutter Lag use case.</p>
+     * <ul>
+     * <li>At least one input stream can be used.</li>
+     * <li>RAW_OPAQUE is supported as an output/input format</li>
+     * <li>Using RAW_OPAQUE does not cause a frame rate drop
+     * relative to the sensor's maximum capture rate (at that
+     * resolution).</li>
+     * <li>RAW_OPAQUE will be reprocessable into both YUV_420_888
+     * and JPEG formats.</li>
+     * <li>The maximum available resolution for RAW_OPAQUE streams
+     * (both input/output) will match the maximum available
+     * resolution of JPEG streams.</li>
+     * </ul>
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     */
+    public static final int REQUEST_AVAILABLE_CAPABILITIES_ZSL = 4;
+
+    /**
+     * <p>The camera device supports outputting RAW buffers that can be
+     * saved offline into a DNG format. It can reprocess DNG
+     * files (produced from the same camera device) back into YUV.</p>
+     * <ul>
+     * <li>At least one input stream can be used.</li>
+     * <li>RAW16 is supported as output/input format.</li>
+     * <li>RAW16 is reprocessable into both YUV_420_888 and JPEG
+     * formats.</li>
+     * <li>The maximum available resolution for RAW16 streams (both
+     * input/output) will match the value in
+     * {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.</li>
+     * <li>All DNG-related optional metadata entries are provided
+     * by the camera device.</li>
+     * </ul>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
+     */
+    public static final int REQUEST_AVAILABLE_CAPABILITIES_DNG = 5;
+
+    //
+    // Enumeration values for CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS
+    //
+
+    /**
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS
+     */
+    public static final int SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT = 0;
+
+    /**
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STREAM_CONFIGURATIONS
+     */
+    public static final int SCALER_AVAILABLE_STREAM_CONFIGURATIONS_INPUT = 1;
+
+    //
+    // Enumeration values for CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
+    //
+
+    /**
+     * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
+     */
+    public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGGB = 0;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
+     */
+    public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GRBG = 1;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
+     */
+    public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_GBRG = 2;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
+     */
+    public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_BGGR = 3;
+
+    /**
+     * <p>Sensor is not Bayer; output has 3 16-bit
+     * values for each pixel, instead of just 1 16-bit value
+     * per pixel.</p>
+     * @see CameraCharacteristics#SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
+     */
+    public static final int SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_RGB = 4;
+
+    //
+    // Enumeration values for CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+    //
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT = 1;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_FLUORESCENT = 2;
+
+    /**
+     * <p>Incandescent light</p>
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_TUNGSTEN = 3;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_FLASH = 4;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_FINE_WEATHER = 9;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_CLOUDY_WEATHER = 10;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_SHADE = 11;
+
+    /**
+     * <p>D 5700 - 7100K</p>
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_DAYLIGHT_FLUORESCENT = 12;
+
+    /**
+     * <p>N 4600 - 5400K</p>
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_DAY_WHITE_FLUORESCENT = 13;
+
+    /**
+     * <p>W 3900 - 4500K</p>
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_COOL_WHITE_FLUORESCENT = 14;
+
+    /**
+     * <p>WW 3200 - 3700K</p>
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_WHITE_FLUORESCENT = 15;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_A = 17;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_B = 18;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_STANDARD_C = 19;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_D55 = 20;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_D65 = 21;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_D75 = 22;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_D50 = 23;
+
+    /**
+     * @see CameraCharacteristics#SENSOR_REFERENCE_ILLUMINANT1
+     */
+    public static final int SENSOR_REFERENCE_ILLUMINANT1_ISO_STUDIO_TUNGSTEN = 24;
+
+    //
     // Enumeration values for CameraCharacteristics#LED_AVAILABLE_LEDS
     //
 
     /**
-     * <p>
-     * android.led.transmit control is used
-     * </p>
+     * <p>android.led.transmit control is used</p>
      * @see CameraCharacteristics#LED_AVAILABLE_LEDS
      * @hide
      */
@@ -247,32 +586,75 @@
     public static final int INFO_SUPPORTED_HARDWARE_LEVEL_FULL = 1;
 
     //
+    // Enumeration values for CameraCharacteristics#SYNC_MAX_LATENCY
+    //
+
+    /**
+     * <p>Every frame has the requests immediately applied.
+     * (and furthermore for all results,
+     * <code>android.sync.frameNumber == android.request.frameCount</code>)</p>
+     * <p>Changing controls over multiple requests one after another will
+     * produce results that have those controls applied atomically
+     * each frame.</p>
+     * <p>All FULL capability devices will have this as their maxLatency.</p>
+     * @see CameraCharacteristics#SYNC_MAX_LATENCY
+     */
+    public static final int SYNC_MAX_LATENCY_PER_FRAME_CONTROL = 0;
+
+    /**
+     * <p>Each new frame has some subset (potentially the entire set)
+     * of the past requests applied to the camera settings.</p>
+     * <p>By submitting a series of identical requests, the camera device
+     * will eventually have the camera settings applied, but it is
+     * unknown when that exact point will be.</p>
+     * @see CameraCharacteristics#SYNC_MAX_LATENCY
+     */
+    public static final int SYNC_MAX_LATENCY_UNKNOWN = -1;
+
+    //
     // Enumeration values for CaptureRequest#COLOR_CORRECTION_MODE
     //
 
     /**
-     * <p>
-     * Use the android.colorCorrection.transform matrix
-     * and android.colorCorrection.gains to do color conversion
-     * </p>
+     * <p>Use the {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform} matrix
+     * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} to do color conversion.</p>
+     * <p>All advanced white balance adjustments (not specified
+     * by our white balance pipeline) must be disabled.</p>
+     * <p>If AWB is enabled with <code>{@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} != OFF</code>, then
+     * TRANSFORM_MATRIX is ignored. The camera device will override
+     * this value to either FAST or HIGH_QUALITY.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
+     * @see CaptureRequest#CONTROL_AWB_MODE
      * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final int COLOR_CORRECTION_MODE_TRANSFORM_MATRIX = 0;
 
     /**
-     * <p>
-     * Must not slow down frame rate relative to raw
-     * bayer output
-     * </p>
+     * <p>Must not slow down capture rate relative to sensor raw
+     * output.</p>
+     * <p>Advanced white balance adjustments above and beyond
+     * the specified white balance pipeline may be applied.</p>
+     * <p>If AWB is enabled with <code>{@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} != OFF</code>, then
+     * the camera device uses the last frame's AWB values
+     * (or defaults if AWB has never been run).</p>
+     *
+     * @see CaptureRequest#CONTROL_AWB_MODE
      * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final int COLOR_CORRECTION_MODE_FAST = 1;
 
     /**
-     * <p>
-     * Frame rate may be reduced by high
-     * quality
-     * </p>
+     * <p>Capture rate (relative to sensor raw output)
+     * may be reduced by high quality.</p>
+     * <p>Advanced white balance adjustments above and beyond
+     * the specified white balance pipeline may be applied.</p>
+     * <p>If AWB is enabled with <code>{@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} != OFF</code>, then
+     * the camera device uses the last frame's AWB values
+     * (or defaults if AWB has never been run).</p>
+     *
+     * @see CaptureRequest#CONTROL_AWB_MODE
      * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final int COLOR_CORRECTION_MODE_HIGH_QUALITY = 2;
@@ -282,21 +664,31 @@
     //
 
     /**
+     * <p>The camera device will not adjust exposure duration to
+     * avoid banding problems.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_OFF = 0;
 
     /**
+     * <p>The camera device will adjust exposure duration to
+     * avoid banding problems with 50Hz illumination sources.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_50HZ = 1;
 
     /**
+     * <p>The camera device will adjust exposure duration to
+     * avoid banding problems with 60Hz illumination
+     * sources.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_60HZ = 2;
 
     /**
+     * <p>The camera device will automatically adapt its
+     * antibanding routine to the current illumination
+     * conditions. This is the default.</p>
      * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
      */
     public static final int CONTROL_AE_ANTIBANDING_MODE_AUTO = 3;
@@ -306,52 +698,73 @@
     //
 
     /**
-     * <p>
-     * Autoexposure is disabled; sensor.exposureTime,
-     * sensor.sensitivity and sensor.frameDuration are used
-     * </p>
+     * <p>The camera device's autoexposure routine is disabled;
+     * the application-selected {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} are used by the camera
+     * device, along with android.flash.* fields, if there's
+     * a flash unit for this camera device.</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_OFF = 0;
 
     /**
-     * <p>
-     * Autoexposure is active, no flash
-     * control
-     * </p>
+     * <p>The camera device's autoexposure routine is active,
+     * with no flash control. The application's values for
+     * {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration} are ignored. The
+     * application has control over the various
+     * android.flash.* fields.</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON = 1;
 
     /**
-     * <p>
-     * if flash exists Autoexposure is active, auto
-     * flash control; flash may be fired when precapture
-     * trigger is activated, and for captures for which
-     * captureIntent = STILL_CAPTURE
-     * </p>
+     * <p>Like ON, except that the camera device also controls
+     * the camera's flash unit, firing it in low-light
+     * conditions. The flash may be fired during a
+     * precapture sequence (triggered by
+     * {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and may be fired
+     * for captures for which the
+     * {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} field is set to
+     * STILL_CAPTURE</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON_AUTO_FLASH = 2;
 
     /**
-     * <p>
-     * if flash exists Autoexposure is active, auto
-     * flash control for precapture trigger and always flash
-     * when captureIntent = STILL_CAPTURE
-     * </p>
+     * <p>Like ON, except that the camera device also controls
+     * the camera's flash unit, always firing it for still
+     * captures. The flash may be fired during a precapture
+     * sequence (triggered by
+     * {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}) and will always
+     * be fired for captures for which the
+     * {@link CaptureRequest#CONTROL_CAPTURE_INTENT android.control.captureIntent} field is set to
+     * STILL_CAPTURE</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON_ALWAYS_FLASH = 3;
 
     /**
-     * <p>
-     * optional Automatic red eye reduction with flash.
-     * If deemed necessary, red eye reduction sequence should
-     * fire when precapture trigger is activated, and final
-     * flash should fire when captureIntent =
-     * STILL_CAPTURE
-     * </p>
+     * <p>Like ON_AUTO_FLASH, but with automatic red eye
+     * reduction. If deemed necessary by the camera device,
+     * a red eye reduction flash will fire during the
+     * precapture sequence.</p>
      * @see CaptureRequest#CONTROL_AE_MODE
      */
     public static final int CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE = 4;
@@ -361,20 +774,15 @@
     //
 
     /**
-     * <p>
-     * The trigger is idle.
-     * </p>
+     * <p>The trigger is idle.</p>
      * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
      */
     public static final int CONTROL_AE_PRECAPTURE_TRIGGER_IDLE = 0;
 
     /**
-     * <p>
-     * The precapture metering sequence
-     * must be started. The exact effect of the precapture
-     * trigger depends on the current AE mode and
-     * state.
-     * </p>
+     * <p>The precapture metering sequence will be started
+     * by the camera device. The exact effect of the precapture
+     * trigger depends on the current AE mode and state.</p>
      * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
      */
     public static final int CONTROL_AE_PRECAPTURE_TRIGGER_START = 1;
@@ -384,55 +792,47 @@
     //
 
     /**
-     * <p>
-     * The 3A routines do not control the lens;
-     * android.lens.focusDistance is controlled by the
-     * application
-     * </p>
+     * <p>The auto-focus routine does not control the lens;
+     * {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} is controlled by the
+     * application</p>
+     *
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_OFF = 0;
 
     /**
-     * <p>
-     * if lens is not fixed focus.
-     * </p><p>
-     * Use android.lens.minimumFocusDistance to determine if lens
-     * is fixed focus In this mode, the lens does not move unless
+     * <p>If lens is not fixed focus.</p>
+     * <p>Use {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} to determine if lens
+     * is fixed-focus. In this mode, the lens does not move unless
      * the autofocus trigger action is called. When that trigger
      * is activated, AF must transition to ACTIVE_SCAN, then to
-     * the outcome of the scan (FOCUSED or
-     * NOT_FOCUSED).
-     * </p><p>
-     * Triggering cancel AF resets the lens position to default,
-     * and sets the AF state to INACTIVE.
-     * </p>
+     * the outcome of the scan (FOCUSED or NOT_FOCUSED).</p>
+     * <p>Triggering AF_CANCEL resets the lens position to default,
+     * and sets the AF state to INACTIVE.</p>
+     *
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_AUTO = 1;
 
     /**
-     * <p>
-     * In this mode, the lens does not move unless the
-     * autofocus trigger action is called.
-     * </p><p>
-     * When that trigger is activated, AF must transition to
+     * <p>In this mode, the lens does not move unless the
+     * autofocus trigger action is called.</p>
+     * <p>When that trigger is activated, AF must transition to
      * ACTIVE_SCAN, then to the outcome of the scan (FOCUSED or
      * NOT_FOCUSED).  Triggering cancel AF resets the lens
      * position to default, and sets the AF state to
-     * INACTIVE.
-     * </p>
+     * INACTIVE.</p>
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_MACRO = 2;
 
     /**
-     * <p>
-     * In this mode, the AF algorithm modifies the lens
+     * <p>In this mode, the AF algorithm modifies the lens
      * position continually to attempt to provide a
-     * constantly-in-focus image stream.
-     * </p><p>
-     * The focusing behavior should be suitable for good quality
+     * constantly-in-focus image stream.</p>
+     * <p>The focusing behavior should be suitable for good quality
      * video recording; typically this means slower focus
      * movement and no overshoots. When the AF trigger is not
      * involved, the AF algorithm should start in INACTIVE state,
@@ -440,25 +840,21 @@
      * states as appropriate. When the AF trigger is activated,
      * the algorithm should immediately transition into
      * AF_FOCUSED or AF_NOT_FOCUSED as appropriate, and lock the
-     * lens position until a cancel AF trigger is received.
-     * </p><p>
-     * Once cancel is received, the algorithm should transition
+     * lens position until a cancel AF trigger is received.</p>
+     * <p>Once cancel is received, the algorithm should transition
      * back to INACTIVE and resume passive scan. Note that this
      * behavior is not identical to CONTINUOUS_PICTURE, since an
      * ongoing PASSIVE_SCAN must immediately be
-     * canceled.
-     * </p>
+     * canceled.</p>
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_CONTINUOUS_VIDEO = 3;
 
     /**
-     * <p>
-     * In this mode, the AF algorithm modifies the lens
+     * <p>In this mode, the AF algorithm modifies the lens
      * position continually to attempt to provide a
-     * constantly-in-focus image stream.
-     * </p><p>
-     * The focusing behavior should be suitable for still image
+     * constantly-in-focus image stream.</p>
+     * <p>The focusing behavior should be suitable for still image
      * capture; typically this means focusing as fast as
      * possible. When the AF trigger is not involved, the AF
      * algorithm should start in INACTIVE state, and then
@@ -467,22 +863,18 @@
      * trigger is activated, the algorithm should finish its
      * PASSIVE_SCAN if active, and then transition into
      * AF_FOCUSED or AF_NOT_FOCUSED as appropriate, and lock the
-     * lens position until a cancel AF trigger is received.
-     * </p><p>
-     * When the AF cancel trigger is activated, the algorithm
+     * lens position until a cancel AF trigger is received.</p>
+     * <p>When the AF cancel trigger is activated, the algorithm
      * should transition back to INACTIVE and then act as if it
-     * has just been started.
-     * </p>
+     * has just been started.</p>
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_CONTINUOUS_PICTURE = 4;
 
     /**
-     * <p>
-     * Extended depth of field (digital focus). AF
+     * <p>Extended depth of field (digital focus). AF
      * trigger is ignored, AF state should always be
-     * INACTIVE.
-     * </p>
+     * INACTIVE.</p>
      * @see CaptureRequest#CONTROL_AF_MODE
      */
     public static final int CONTROL_AF_MODE_EDOF = 5;
@@ -492,26 +884,20 @@
     //
 
     /**
-     * <p>
-     * The trigger is idle.
-     * </p>
+     * <p>The trigger is idle.</p>
      * @see CaptureRequest#CONTROL_AF_TRIGGER
      */
     public static final int CONTROL_AF_TRIGGER_IDLE = 0;
 
     /**
-     * <p>
-     * Autofocus must trigger now.
-     * </p>
+     * <p>Autofocus will trigger now.</p>
      * @see CaptureRequest#CONTROL_AF_TRIGGER
      */
     public static final int CONTROL_AF_TRIGGER_START = 1;
 
     /**
-     * <p>
-     * Autofocus must return to initial
-     * state, and cancel any active trigger.
-     * </p>
+     * <p>Autofocus will return to its initial
+     * state, and cancel any currently active trigger.</p>
      * @see CaptureRequest#CONTROL_AF_TRIGGER
      */
     public static final int CONTROL_AF_TRIGGER_CANCEL = 2;
@@ -521,46 +907,89 @@
     //
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the application-selected color transform matrix
+     * ({@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}) and gains
+     * ({@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}) are used by the camera
+     * device for manual white balance control.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_OFF = 0;
 
     /**
+     * <p>The camera device's auto white balance routine is active;
+     * the application's values for {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}
+     * and {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} are ignored.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_AUTO = 1;
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the camera device uses incandescent light as the assumed scene
+     * illumination for white balance. While the exact white balance
+     * transforms are up to the camera device, they will approximately
+     * match the CIE standard illuminant A.</p>
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_INCANDESCENT = 2;
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the camera device uses fluorescent light as the assumed scene
+     * illumination for white balance. While the exact white balance
+     * transforms are up to the camera device, they will approximately
+     * match the CIE standard illuminant F2.</p>
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_FLUORESCENT = 3;
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the camera device uses warm fluorescent light as the assumed scene
+     * illumination for white balance. While the exact white balance
+     * transforms are up to the camera device, they will approximately
+     * match the CIE standard illuminant F4.</p>
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_WARM_FLUORESCENT = 4;
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the camera device uses daylight light as the assumed scene
+     * illumination for white balance. While the exact white balance
+     * transforms are up to the camera device, they will approximately
+     * match the CIE standard illuminant D65.</p>
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_DAYLIGHT = 5;
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the camera device uses cloudy daylight light as the assumed scene
+     * illumination for white balance.</p>
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_CLOUDY_DAYLIGHT = 6;
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the camera device uses twilight light as the assumed scene
+     * illumination for white balance.</p>
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_TWILIGHT = 7;
 
     /**
+     * <p>The camera device's auto white balance routine is disabled;
+     * the camera device uses shade light as the assumed scene
+     * illumination for white balance.</p>
      * @see CaptureRequest#CONTROL_AWB_MODE
      */
     public static final int CONTROL_AWB_MODE_SHADE = 8;
@@ -570,108 +999,125 @@
     //
 
     /**
-     * <p>
-     * This request doesn't fall into the other
+     * <p>This request doesn't fall into the other
      * categories. Default to preview-like
-     * behavior.
-     * </p>
+     * behavior.</p>
      * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      */
     public static final int CONTROL_CAPTURE_INTENT_CUSTOM = 0;
 
     /**
-     * <p>
-     * This request is for a preview-like usecase. The
+     * <p>This request is for a preview-like usecase. The
      * precapture trigger may be used to start off a metering
-     * w/flash sequence
-     * </p>
+     * w/flash sequence</p>
      * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      */
     public static final int CONTROL_CAPTURE_INTENT_PREVIEW = 1;
 
     /**
-     * <p>
-     * This request is for a still capture-type
-     * usecase.
-     * </p>
+     * <p>This request is for a still capture-type
+     * usecase.</p>
      * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      */
     public static final int CONTROL_CAPTURE_INTENT_STILL_CAPTURE = 2;
 
     /**
-     * <p>
-     * This request is for a video recording
-     * usecase.
-     * </p>
+     * <p>This request is for a video recording
+     * usecase.</p>
      * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      */
     public static final int CONTROL_CAPTURE_INTENT_VIDEO_RECORD = 3;
 
     /**
-     * <p>
-     * This request is for a video snapshot (still
-     * image while recording video) usecase
-     * </p>
+     * <p>This request is for a video snapshot (still
+     * image while recording video) usecase</p>
      * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      */
     public static final int CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT = 4;
 
     /**
-     * <p>
-     * This request is for a ZSL usecase; the
+     * <p>This request is for a ZSL usecase; the
      * application will stream full-resolution images and
      * reprocess one or several later for a final
-     * capture
-     * </p>
+     * capture</p>
      * @see CaptureRequest#CONTROL_CAPTURE_INTENT
      */
     public static final int CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG = 5;
 
+    /**
+     * <p>This request is for manual capture use case where
+     * the applications want to directly control the capture parameters
+     * (e.g. {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}, {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity} etc.).</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_SENSITIVITY
+     * @see CaptureRequest#CONTROL_CAPTURE_INTENT
+     */
+    public static final int CONTROL_CAPTURE_INTENT_MANUAL = 6;
+
     //
     // Enumeration values for CaptureRequest#CONTROL_EFFECT_MODE
     //
 
     /**
+     * <p>No color effect will be applied.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_OFF = 0;
 
     /**
+     * <p>A "monocolor" effect where the image is mapped into
+     * a single color.  This will typically be grayscale.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_MONO = 1;
 
     /**
+     * <p>A "photo-negative" effect where the image's colors
+     * are inverted.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_NEGATIVE = 2;
 
     /**
+     * <p>A "solarisation" effect (Sabattier effect) where the
+     * image is wholly or partially reversed in
+     * tone.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_SOLARIZE = 3;
 
     /**
+     * <p>A "sepia" effect where the image is mapped into warm
+     * gray, red, and brown tones.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_SEPIA = 4;
 
     /**
+     * <p>A "posterization" effect where the image uses
+     * discrete regions of tone rather than a continuous
+     * gradient of tones.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_POSTERIZE = 5;
 
     /**
+     * <p>A "whiteboard" effect where the image is typically displayed
+     * as regions of white, with black or grey details.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_WHITEBOARD = 6;
 
     /**
+     * <p>A "blackboard" effect where the image is typically displayed
+     * as regions of black, with white or grey details.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_BLACKBOARD = 7;
 
     /**
+     * <p>An "aqua" effect where a blue hue is added to the image.</p>
      * @see CaptureRequest#CONTROL_EFFECT_MODE
      */
     public static final int CONTROL_EFFECT_MODE_AQUA = 8;
@@ -681,137 +1127,169 @@
     //
 
     /**
-     * <p>
-     * Full application control of pipeline. All 3A
+     * <p>Full application control of pipeline. All 3A
      * routines are disabled, no other settings in
-     * android.control.* have any effect
-     * </p>
+     * android.control.* have any effect</p>
      * @see CaptureRequest#CONTROL_MODE
      */
     public static final int CONTROL_MODE_OFF = 0;
 
     /**
-     * <p>
-     * Use settings for each individual 3A routine.
+     * <p>Use settings for each individual 3A routine.
      * Manual control of capture parameters is disabled. All
      * controls in android.control.* besides sceneMode take
-     * effect
-     * </p>
+     * effect</p>
      * @see CaptureRequest#CONTROL_MODE
      */
     public static final int CONTROL_MODE_AUTO = 1;
 
     /**
-     * <p>
-     * Use specific scene mode. Enabling this disables
+     * <p>Use specific scene mode. Enabling this disables
      * control.aeMode, control.awbMode and control.afMode
-     * controls; the HAL must ignore those settings while
+     * controls; the camera device will ignore those settings while
      * USE_SCENE_MODE is active (except for FACE_PRIORITY
      * scene mode). Other control entries are still active.
-     * This setting can only be used if availableSceneModes !=
-     * UNSUPPORTED
-     * </p>
+     * This setting can only be used if scene mode is supported
+     * (i.e. {@link CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES android.control.availableSceneModes} contain some modes
+     * other than DISABLED).</p>
+     *
+     * @see CameraCharacteristics#CONTROL_AVAILABLE_SCENE_MODES
      * @see CaptureRequest#CONTROL_MODE
      */
     public static final int CONTROL_MODE_USE_SCENE_MODE = 2;
 
+    /**
+     * <p>Same as OFF mode, except that this capture will not be
+     * used by camera device background auto-exposure, auto-white balance and
+     * auto-focus algorithms to update their statistics.</p>
+     * @see CaptureRequest#CONTROL_MODE
+     */
+    public static final int CONTROL_MODE_OFF_KEEP_STATE = 3;
+
     //
     // Enumeration values for CaptureRequest#CONTROL_SCENE_MODE
     //
 
     /**
+     * <p>Indicates that no scene modes are set for a given capture request.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
-    public static final int CONTROL_SCENE_MODE_UNSUPPORTED = 0;
+    public static final int CONTROL_SCENE_MODE_DISABLED = 0;
 
     /**
-     * <p>
-     * if face detection support exists Use face
-     * detection data to drive 3A routines. If face detection
-     * statistics are disabled, should still operate correctly
-     * (but not return face detection statistics to the
-     * framework).
-     * </p><p>
-     * Unlike the other scene modes, aeMode, awbMode, and afMode
-     * remain active when FACE_PRIORITY is set. This is due to
-     * compatibility concerns with the old camera
-     * API
-     * </p>
+     * <p>If face detection support exists, use face
+     * detection data for auto-focus, auto-white balance, and
+     * auto-exposure routines. If face detection statistics are
+     * disabled (i.e. {@link CaptureRequest#STATISTICS_FACE_DETECT_MODE android.statistics.faceDetectMode} is set to OFF),
+     * this should still operate correctly (but will not return
+     * face detection statistics to the framework).</p>
+     * <p>Unlike the other scene modes, {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode},
+     * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, and {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}
+     * remain active when FACE_PRIORITY is set.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_AF_MODE
+     * @see CaptureRequest#CONTROL_AWB_MODE
+     * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_FACE_PRIORITY = 1;
 
     /**
+     * <p>Optimized for photos of quickly moving objects.
+     * Similar to SPORTS.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_ACTION = 2;
 
     /**
+     * <p>Optimized for still photos of people.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_PORTRAIT = 3;
 
     /**
+     * <p>Optimized for photos of distant macroscopic objects.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_LANDSCAPE = 4;
 
     /**
+     * <p>Optimized for low-light settings.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_NIGHT = 5;
 
     /**
+     * <p>Optimized for still photos of people in low-light
+     * settings.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_NIGHT_PORTRAIT = 6;
 
     /**
+     * <p>Optimized for dim, indoor settings where flash must
+     * remain off.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_THEATRE = 7;
 
     /**
+     * <p>Optimized for bright, outdoor beach settings.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_BEACH = 8;
 
     /**
+     * <p>Optimized for bright, outdoor settings containing snow.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_SNOW = 9;
 
     /**
+     * <p>Optimized for scenes of the setting sun.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_SUNSET = 10;
 
     /**
+     * <p>Optimized to avoid blurry photos due to small amounts of
+     * device motion (for example: due to hand shake).</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_STEADYPHOTO = 11;
 
     /**
+     * <p>Optimized for nighttime photos of fireworks.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_FIREWORKS = 12;
 
     /**
+     * <p>Optimized for photos of quickly moving people.
+     * Similar to ACTION.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_SPORTS = 13;
 
     /**
+     * <p>Optimized for dim, indoor settings with multiple moving
+     * people.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_PARTY = 14;
 
     /**
+     * <p>Optimized for dim settings where the main light source
+     * is a flame.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_CANDLELIGHT = 15;
 
     /**
+     * <p>Optimized for accurately capturing a photo of barcode
+     * for use by camera applications that wish to read the
+     * barcode value.</p>
      * @see CaptureRequest#CONTROL_SCENE_MODE
      */
     public static final int CONTROL_SCENE_MODE_BARCODE = 16;
@@ -821,27 +1299,21 @@
     //
 
     /**
-     * <p>
-     * No edge enhancement is applied
-     * </p>
+     * <p>No edge enhancement is applied</p>
      * @see CaptureRequest#EDGE_MODE
      */
     public static final int EDGE_MODE_OFF = 0;
 
     /**
-     * <p>
-     * Must not slow down frame rate relative to raw
-     * bayer output
-     * </p>
+     * <p>Must not slow down frame rate relative to sensor
+     * output</p>
      * @see CaptureRequest#EDGE_MODE
      */
     public static final int EDGE_MODE_FAST = 1;
 
     /**
-     * <p>
-     * Frame rate may be reduced by high
-     * quality
-     * </p>
+     * <p>Frame rate may be reduced by high
+     * quality</p>
      * @see CaptureRequest#EDGE_MODE
      */
     public static final int EDGE_MODE_HIGH_QUALITY = 2;
@@ -851,44 +1323,74 @@
     //
 
     /**
-     * <p>
-     * Do not fire the flash for this
-     * capture
-     * </p>
+     * <p>Do not fire the flash for this capture.</p>
      * @see CaptureRequest#FLASH_MODE
      */
     public static final int FLASH_MODE_OFF = 0;
 
     /**
-     * <p>
-     * if android.flash.available is true Fire flash
-     * for this capture based on firingPower,
-     * firingTime.
-     * </p>
+     * <p>If the flash is available and charged, fire flash
+     * for this capture based on android.flash.firingPower and
+     * android.flash.firingTime.</p>
      * @see CaptureRequest#FLASH_MODE
      */
     public static final int FLASH_MODE_SINGLE = 1;
 
     /**
-     * <p>
-     * if android.flash.available is true Flash
-     * continuously on, power set by
-     * firingPower
-     * </p>
+     * <p>Transition flash to continuously on.</p>
      * @see CaptureRequest#FLASH_MODE
      */
     public static final int FLASH_MODE_TORCH = 2;
 
     //
+    // Enumeration values for CaptureRequest#HOT_PIXEL_MODE
+    //
+
+    /**
+     * <p>The frame rate must not be reduced relative to sensor raw output
+     * for this option.</p>
+     * <p>No hot pixel correction is applied.
+     * The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
+     *
+     * @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
+     * @see CaptureRequest#HOT_PIXEL_MODE
+     */
+    public static final int HOT_PIXEL_MODE_OFF = 0;
+
+    /**
+     * <p>The frame rate must not be reduced relative to sensor raw output
+     * for this option.</p>
+     * <p>Hot pixel correction is applied.
+     * The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
+     *
+     * @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
+     * @see CaptureRequest#HOT_PIXEL_MODE
+     */
+    public static final int HOT_PIXEL_MODE_FAST = 1;
+
+    /**
+     * <p>The frame rate may be reduced relative to sensor raw output
+     * for this option.</p>
+     * <p>A high-quality hot pixel correction is applied.
+     * The hotpixel map may be returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.</p>
+     *
+     * @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
+     * @see CaptureRequest#HOT_PIXEL_MODE
+     */
+    public static final int HOT_PIXEL_MODE_HIGH_QUALITY = 2;
+
+    //
     // Enumeration values for CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE
     //
 
     /**
+     * <p>Optical stabilization is unavailable.</p>
      * @see CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE
      */
     public static final int LENS_OPTICAL_STABILIZATION_MODE_OFF = 0;
 
     /**
+     * <p>Optical stabilization is enabled.</p>
      * @see CaptureRequest#LENS_OPTICAL_STABILIZATION_MODE
      */
     public static final int LENS_OPTICAL_STABILIZATION_MODE_ON = 1;
@@ -898,32 +1400,153 @@
     //
 
     /**
-     * <p>
-     * No noise reduction is applied
-     * </p>
+     * <p>No noise reduction is applied</p>
      * @see CaptureRequest#NOISE_REDUCTION_MODE
      */
     public static final int NOISE_REDUCTION_MODE_OFF = 0;
 
     /**
-     * <p>
-     * Must not slow down frame rate relative to raw
-     * bayer output
-     * </p>
+     * <p>Must not slow down frame rate relative to sensor
+     * output</p>
      * @see CaptureRequest#NOISE_REDUCTION_MODE
      */
     public static final int NOISE_REDUCTION_MODE_FAST = 1;
 
     /**
-     * <p>
-     * May slow down frame rate to provide highest
-     * quality
-     * </p>
+     * <p>May slow down frame rate to provide highest
+     * quality</p>
      * @see CaptureRequest#NOISE_REDUCTION_MODE
      */
     public static final int NOISE_REDUCTION_MODE_HIGH_QUALITY = 2;
 
     //
+    // Enumeration values for CaptureRequest#SENSOR_TEST_PATTERN_MODE
+    //
+
+    /**
+     * <p>Default. No test pattern mode is used, and the camera
+     * device returns captures from the image sensor.</p>
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final int SENSOR_TEST_PATTERN_MODE_OFF = 0;
+
+    /**
+     * <p>Each pixel in <code>[R, G_even, G_odd, B]</code> is replaced by its
+     * respective color channel provided in
+     * {@link CaptureRequest#SENSOR_TEST_PATTERN_DATA android.sensor.testPatternData}.</p>
+     * <p>For example:</p>
+     * <pre><code>android.testPatternData = [0, 0xFFFFFFFF, 0xFFFFFFFF, 0]
+     * </code></pre>
+     * <p>All green pixels are 100% green. All red/blue pixels are black.</p>
+     * <pre><code>android.testPatternData = [0xFFFFFFFF, 0, 0xFFFFFFFF, 0]
+     * </code></pre>
+     * <p>All red pixels are 100% red. Only the odd green pixels
+     * are 100% green. All blue pixels are 100% black.</p>
+     *
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_DATA
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final int SENSOR_TEST_PATTERN_MODE_SOLID_COLOR = 1;
+
+    /**
+     * <p>All pixel data is replaced with an 8-bar color pattern.</p>
+     * <p>The vertical bars (left-to-right) are as follows:</p>
+     * <ul>
+     * <li>100% white</li>
+     * <li>yellow</li>
+     * <li>cyan</li>
+     * <li>green</li>
+     * <li>magenta</li>
+     * <li>red</li>
+     * <li>blue</li>
+     * <li>black</li>
+     * </ul>
+     * <p>In general the image would look like the following:</p>
+     * <pre><code>W Y C G M R B K
+     * W Y C G M R B K
+     * W Y C G M R B K
+     * W Y C G M R B K
+     * W Y C G M R B K
+     * . . . . . . . .
+     * . . . . . . . .
+     * . . . . . . . .
+     *
+     * (B = Blue, K = Black)
+     * </code></pre>
+     * <p>Each bar should take up 1/8 of the sensor pixel array width.
+     * When this is not possible, the bar size should be rounded
+     * down to the nearest integer and the pattern can repeat
+     * on the right side.</p>
+     * <p>Each bar's height must always take up the full sensor
+     * pixel array height.</p>
+     * <p>Each pixel in this test pattern must be set to either
+     * 0% intensity or 100% intensity.</p>
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS = 2;
+
+    /**
+     * <p>The test pattern is similar to COLOR_BARS, except that
+     * each bar should start at its specified color at the top,
+     * and fade to gray at the bottom.</p>
+     * <p>Furthermore each bar is further subdivided into a left and
+     * right half. The left half should have a smooth gradient,
+     * and the right half should have a quantized gradient.</p>
+     * <p>In particular, the right half's should consist of blocks of the
+     * same color for 1/16th active sensor pixel array width.</p>
+     * <p>The least significant bits in the quantized gradient should
+     * be copied from the most significant bits of the smooth gradient.</p>
+     * <p>The height of each bar should always be a multiple of 128.
+     * When this is not the case, the pattern should repeat at the bottom
+     * of the image.</p>
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final int SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY = 3;
+
+    /**
+     * <p>All pixel data is replaced by a pseudo-random sequence
+     * generated from a PN9 512-bit sequence (typically implemented
+     * in hardware with a linear feedback shift register).</p>
+     * <p>The generator should be reset at the beginning of each frame,
+     * and thus each subsequent raw frame with this test pattern should
+     * be exactly the same as the last.</p>
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final int SENSOR_TEST_PATTERN_MODE_PN9 = 4;
+
+    /**
+     * <p>The first custom test pattern. All custom patterns that are
+     * available only on this camera device are at least this numeric
+     * value.</p>
+     * <p>All of the custom test patterns will be static
+     * (that is the raw image must not vary from frame to frame).</p>
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final int SENSOR_TEST_PATTERN_MODE_CUSTOM1 = 256;
+
+    //
+    // Enumeration values for CaptureRequest#SHADING_MODE
+    //
+
+    /**
+     * <p>No lens shading correction is applied</p>
+     * @see CaptureRequest#SHADING_MODE
+     */
+    public static final int SHADING_MODE_OFF = 0;
+
+    /**
+     * <p>Must not slow down frame rate relative to sensor raw output</p>
+     * @see CaptureRequest#SHADING_MODE
+     */
+    public static final int SHADING_MODE_FAST = 1;
+
+    /**
+     * <p>Frame rate may be reduced by high quality</p>
+     * @see CaptureRequest#SHADING_MODE
+     */
+    public static final int SHADING_MODE_HIGH_QUALITY = 2;
+
+    //
     // Enumeration values for CaptureRequest#STATISTICS_FACE_DETECT_MODE
     //
 
@@ -933,19 +1556,15 @@
     public static final int STATISTICS_FACE_DETECT_MODE_OFF = 0;
 
     /**
-     * <p>
-     * Optional Return rectangle and confidence
-     * only
-     * </p>
+     * <p>Optional Return rectangle and confidence
+     * only</p>
      * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
      */
     public static final int STATISTICS_FACE_DETECT_MODE_SIMPLE = 1;
 
     /**
-     * <p>
-     * Optional Return all face
-     * metadata
-     * </p>
+     * <p>Optional Return all face
+     * metadata</p>
      * @see CaptureRequest#STATISTICS_FACE_DETECT_MODE
      */
     public static final int STATISTICS_FACE_DETECT_MODE_FULL = 2;
@@ -969,28 +1588,32 @@
     //
 
     /**
-     * <p>
-     * Use the tone mapping curve specified in
-     * android.tonemap.curve
-     * </p>
+     * <p>Use the tone mapping curve specified in
+     * the android.tonemap.curve* entries.</p>
+     * <p>All color enhancement and tonemapping must be disabled, except
+     * for applying the tonemapping curve specified by
+     * {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed}, {@link CaptureRequest#TONEMAP_CURVE_BLUE android.tonemap.curveBlue}, or
+     * {@link CaptureRequest#TONEMAP_CURVE_GREEN android.tonemap.curveGreen}.</p>
+     * <p>Must not slow down frame rate relative to raw
+     * sensor output.</p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_BLUE
+     * @see CaptureRequest#TONEMAP_CURVE_GREEN
+     * @see CaptureRequest#TONEMAP_CURVE_RED
      * @see CaptureRequest#TONEMAP_MODE
      */
     public static final int TONEMAP_MODE_CONTRAST_CURVE = 0;
 
     /**
-     * <p>
-     * Must not slow down frame rate relative to raw
-     * bayer output
-     * </p>
+     * <p>Advanced gamma mapping and color enhancement may be applied.</p>
+     * <p>Should not slow down frame rate relative to raw sensor output.</p>
      * @see CaptureRequest#TONEMAP_MODE
      */
     public static final int TONEMAP_MODE_FAST = 1;
 
     /**
-     * <p>
-     * Frame rate may be reduced by high
-     * quality
-     * </p>
+     * <p>Advanced gamma mapping and color enhancement may be applied.</p>
+     * <p>May slow down frame rate relative to raw sensor output.</p>
      * @see CaptureRequest#TONEMAP_MODE
      */
     public static final int TONEMAP_MODE_HIGH_QUALITY = 2;
@@ -1000,60 +1623,51 @@
     //
 
     /**
-     * <p>
-     * AE is off.  When a camera device is opened, it starts in
-     * this state.
-     * </p>
+     * <p>AE is off or recently reset. When a camera device is opened, it starts in
+     * this state. This is a transient state, the camera device may skip reporting
+     * this state in capture result.</p>
      * @see CaptureResult#CONTROL_AE_STATE
      */
     public static final int CONTROL_AE_STATE_INACTIVE = 0;
 
     /**
-     * <p>
-     * AE doesn't yet have a good set of control values
-     * for the current scene
-     * </p>
+     * <p>AE doesn't yet have a good set of control values
+     * for the current scene. This is a transient state, the camera device may skip
+     * reporting this state in capture result.</p>
      * @see CaptureResult#CONTROL_AE_STATE
      */
     public static final int CONTROL_AE_STATE_SEARCHING = 1;
 
     /**
-     * <p>
-     * AE has a good set of control values for the
-     * current scene
-     * </p>
+     * <p>AE has a good set of control values for the
+     * current scene.</p>
      * @see CaptureResult#CONTROL_AE_STATE
      */
     public static final int CONTROL_AE_STATE_CONVERGED = 2;
 
     /**
-     * <p>
-     * AE has been locked (aeMode =
-     * LOCKED)
-     * </p>
+     * <p>AE has been locked.</p>
      * @see CaptureResult#CONTROL_AE_STATE
      */
     public static final int CONTROL_AE_STATE_LOCKED = 3;
 
     /**
-     * <p>
-     * AE has a good set of control values, but flash
+     * <p>AE has a good set of control values, but flash
      * needs to be fired for good quality still
-     * capture
-     * </p>
+     * capture.</p>
      * @see CaptureResult#CONTROL_AE_STATE
      */
     public static final int CONTROL_AE_STATE_FLASH_REQUIRED = 4;
 
     /**
-     * <p>
-     * AE has been asked to do a precapture sequence
-     * (through the
-     * trigger_action(CAMERA2_TRIGGER_PRECAPTURE_METERING)
-     * call), and is currently executing it. Once PRECAPTURE
+     * <p>AE has been asked to do a precapture sequence
+     * (through the {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger} START),
+     * and is currently executing it. Once PRECAPTURE
      * completes, AE will transition to CONVERGED or
-     * FLASH_REQUIRED as appropriate
-     * </p>
+     * FLASH_REQUIRED as appropriate. This is a transient state, the
+     * camera device may skip reporting this state in capture result.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
      * @see CaptureResult#CONTROL_AE_STATE
      */
     public static final int CONTROL_AE_STATE_PRECAPTURE = 5;
@@ -1063,71 +1677,62 @@
     //
 
     /**
-     * <p>
-     * AF off or has not yet tried to scan/been asked
+     * <p>AF off or has not yet tried to scan/been asked
      * to scan.  When a camera device is opened, it starts in
-     * this state.
-     * </p>
+     * this state. This is a transient state, the camera device may
+     * skip reporting this state in capture result.</p>
      * @see CaptureResult#CONTROL_AF_STATE
      */
     public static final int CONTROL_AF_STATE_INACTIVE = 0;
 
     /**
-     * <p>
-     * if CONTINUOUS_* modes are supported. AF is
+     * <p>if CONTINUOUS_* modes are supported. AF is
      * currently doing an AF scan initiated by a continuous
-     * autofocus mode
-     * </p>
+     * autofocus mode. This is a transient state, the camera device may
+     * skip reporting this state in capture result.</p>
      * @see CaptureResult#CONTROL_AF_STATE
      */
     public static final int CONTROL_AF_STATE_PASSIVE_SCAN = 1;
 
     /**
-     * <p>
-     * if CONTINUOUS_* modes are supported. AF currently
+     * <p>if CONTINUOUS_* modes are supported. AF currently
      * believes it is in focus, but may restart scanning at
-     * any time.
-     * </p>
+     * any time. This is a transient state, the camera device may skip
+     * reporting this state in capture result.</p>
      * @see CaptureResult#CONTROL_AF_STATE
      */
     public static final int CONTROL_AF_STATE_PASSIVE_FOCUSED = 2;
 
     /**
-     * <p>
-     * if AUTO or MACRO modes are supported. AF is doing
-     * an AF scan because it was triggered by AF
-     * trigger
-     * </p>
+     * <p>if AUTO or MACRO modes are supported. AF is doing
+     * an AF scan because it was triggered by AF trigger. This is a
+     * transient state, the camera device may skip reporting
+     * this state in capture result.</p>
      * @see CaptureResult#CONTROL_AF_STATE
      */
     public static final int CONTROL_AF_STATE_ACTIVE_SCAN = 3;
 
     /**
-     * <p>
-     * if any AF mode besides OFF is supported. AF
+     * <p>if any AF mode besides OFF is supported. AF
      * believes it is focused correctly and is
-     * locked
-     * </p>
+     * locked.</p>
      * @see CaptureResult#CONTROL_AF_STATE
      */
     public static final int CONTROL_AF_STATE_FOCUSED_LOCKED = 4;
 
     /**
-     * <p>
-     * if any AF mode besides OFF is supported. AF has
+     * <p>if any AF mode besides OFF is supported. AF has
      * failed to focus successfully and is
-     * locked
-     * </p>
+     * locked.</p>
      * @see CaptureResult#CONTROL_AF_STATE
      */
     public static final int CONTROL_AF_STATE_NOT_FOCUSED_LOCKED = 5;
 
     /**
-     * <p>
-     * if CONTINUOUS_* modes are supported. AF finished a
+     * <p>if CONTINUOUS_* modes are supported. AF finished a
      * passive scan without finding focus, and may restart
-     * scanning at any time.
-     * </p>
+     * scanning at any time. This is a transient state, the camera
+     * device may skip reporting this state in capture result.</p>
      * @see CaptureResult#CONTROL_AF_STATE
      */
     public static final int CONTROL_AF_STATE_PASSIVE_UNFOCUSED = 6;
@@ -1137,37 +1742,30 @@
     //
 
     /**
-     * <p>
-     * AWB is not in auto mode.  When a camera device is opened, it
-     * starts in this state.
-     * </p>
+     * <p>AWB is not in auto mode.  When a camera device is opened, it
+     * starts in this state. This is a transient state, the camera device may
+     * skip reporting this state in capture result.</p>
      * @see CaptureResult#CONTROL_AWB_STATE
      */
     public static final int CONTROL_AWB_STATE_INACTIVE = 0;
 
     /**
-     * <p>
-     * AWB doesn't yet have a good set of control
-     * values for the current scene
-     * </p>
+     * <p>AWB doesn't yet have a good set of control
+     * values for the current scene. This is a transient state, the camera device
+     * may skip reporting this state in capture result.</p>
      * @see CaptureResult#CONTROL_AWB_STATE
      */
     public static final int CONTROL_AWB_STATE_SEARCHING = 1;
 
     /**
-     * <p>
-     * AWB has a good set of control values for the
-     * current scene
-     * </p>
+     * <p>AWB has a good set of control values for the
+     * current scene.</p>
      * @see CaptureResult#CONTROL_AWB_STATE
      */
     public static final int CONTROL_AWB_STATE_CONVERGED = 2;
 
     /**
-     * <p>
-     * AE has been locked (aeMode =
-     * LOCKED)
-     * </p>
+     * <p>AWB has been locked.</p>
      * @see CaptureResult#CONTROL_AWB_STATE
      */
     public static final int CONTROL_AWB_STATE_LOCKED = 3;
@@ -1177,50 +1775,61 @@
     //
 
     /**
-     * <p>
-     * No flash on camera
-     * </p>
+     * <p>No flash on camera.</p>
      * @see CaptureResult#FLASH_STATE
      */
     public static final int FLASH_STATE_UNAVAILABLE = 0;
 
     /**
-     * <p>
-     * if android.flash.available is true Flash is
-     * charging and cannot be fired
-     * </p>
+     * <p>Flash is charging and cannot be fired.</p>
      * @see CaptureResult#FLASH_STATE
      */
     public static final int FLASH_STATE_CHARGING = 1;
 
     /**
-     * <p>
-     * if android.flash.available is true Flash is
-     * ready to fire
-     * </p>
+     * <p>Flash is ready to fire.</p>
      * @see CaptureResult#FLASH_STATE
      */
     public static final int FLASH_STATE_READY = 2;
 
     /**
-     * <p>
-     * if android.flash.available is true Flash fired
-     * for this capture
-     * </p>
+     * <p>Flash fired for this capture.</p>
      * @see CaptureResult#FLASH_STATE
      */
     public static final int FLASH_STATE_FIRED = 3;
 
+    /**
+     * <p>Flash partially illuminated this frame. This is usually due to the next
+     * or previous frame having the flash fire, and the flash spilling into this capture
+     * due to hardware limitations.</p>
+     * @see CaptureResult#FLASH_STATE
+     */
+    public static final int FLASH_STATE_PARTIAL = 4;
+
     //
     // Enumeration values for CaptureResult#LENS_STATE
     //
 
     /**
+     * <p>The lens parameters ({@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}, {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance},
+     * {@link CaptureRequest#LENS_FILTER_DENSITY android.lens.filterDensity} and {@link CaptureRequest#LENS_APERTURE android.lens.aperture}) are not changing.</p>
+     *
+     * @see CaptureRequest#LENS_APERTURE
+     * @see CaptureRequest#LENS_FILTER_DENSITY
+     * @see CaptureRequest#LENS_FOCAL_LENGTH
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
      * @see CaptureResult#LENS_STATE
      */
     public static final int LENS_STATE_STATIONARY = 0;
 
     /**
+     * <p>Any of the lens parameters ({@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}, {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance},
+     * {@link CaptureRequest#LENS_FILTER_DENSITY android.lens.filterDensity} or {@link CaptureRequest#LENS_APERTURE android.lens.aperture}) is changing.</p>
+     *
+     * @see CaptureRequest#LENS_APERTURE
+     * @see CaptureRequest#LENS_FILTER_DENSITY
+     * @see CaptureRequest#LENS_FOCAL_LENGTH
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
      * @see CaptureResult#LENS_STATE
      */
     public static final int LENS_STATE_MOVING = 1;
@@ -1244,6 +1853,43 @@
      */
     public static final int STATISTICS_SCENE_FLICKER_60HZ = 2;
 
+    //
+    // Enumeration values for CaptureResult#SYNC_FRAME_NUMBER
+    //
+
+    /**
+     * <p>The current result is not yet fully synchronized to any request.
+     * Synchronization is in progress, and reading metadata from this
+     * result may include a mix of data that have taken effect since the
+     * last synchronization time.</p>
+     * <p>In some future result, within {@link CameraCharacteristics#SYNC_MAX_LATENCY android.sync.maxLatency} frames,
+     * this value will update to the actual frame number frame number
+     * the result is guaranteed to be synchronized to (as long as the
+     * request settings remain constant).</p>
+     *
+     * @see CameraCharacteristics#SYNC_MAX_LATENCY
+     * @see CaptureResult#SYNC_FRAME_NUMBER
+     * @hide
+     */
+    public static final int SYNC_FRAME_NUMBER_CONVERGING = -1;
+
+    /**
+     * <p>The current result's synchronization status is unknown. The
+     * result may have already converged, or it may be in progress.
+     * Reading from this result may include some mix of settings from
+     * past requests.</p>
+     * <p>After a settings change, the new settings will eventually all
+     * take effect for the output buffers and results. However, this
+     * value will not change when that happens. Altering settings
+     * rapidly may provide outcomes using mixes of settings from recent
+     * requests.</p>
+     * <p>This value is intended primarily for backwards compatibility with
+     * the older camera implementations (for android.hardware.Camera).</p>
+     * @see CaptureResult#SYNC_FRAME_NUMBER
+     * @hide
+     */
+    public static final int SYNC_FRAME_NUMBER_UNKNOWN = -2;
+
     /*~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~
      * End generated code
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~O@*/
diff --git a/core/java/android/hardware/camera2/CaptureFailure.java b/core/java/android/hardware/camera2/CaptureFailure.java
index 3b408cf..35f9af1 100644
--- a/core/java/android/hardware/camera2/CaptureFailure.java
+++ b/core/java/android/hardware/camera2/CaptureFailure.java
@@ -15,8 +15,6 @@
  */
 package android.hardware.camera2;
 
-import android.hardware.camera2.CameraDevice.CaptureListener;
-
 /**
  * A report of failed capture for a single image capture from the image sensor.
  *
diff --git a/core/java/android/hardware/camera2/CaptureRequest.java b/core/java/android/hardware/camera2/CaptureRequest.java
index 898f123..c4e342c 100644
--- a/core/java/android/hardware/camera2/CaptureRequest.java
+++ b/core/java/android/hardware/camera2/CaptureRequest.java
@@ -17,7 +17,6 @@
 package android.hardware.camera2;
 
 import android.hardware.camera2.impl.CameraMetadataNative;
-import android.hardware.camera2.CameraDevice.CaptureListener;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.view.Surface;
@@ -318,11 +317,52 @@
      * modify the comment blocks at the start or end.
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
 
+
     /**
-     * <p>
-     * When android.control.awbMode is not OFF, TRANSFORM_MATRIX
-     * should be ignored.
-     * </p>
+     * <p>The mode control selects how the image data is converted from the
+     * sensor's native color into linear sRGB color.</p>
+     * <p>When auto-white balance is enabled with {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, this
+     * control is overridden by the AWB routine. When AWB is disabled, the
+     * application controls how the color mapping is performed.</p>
+     * <p>We define the expected processing pipeline below. For consistency
+     * across devices, this is always the case with TRANSFORM_MATRIX.</p>
+     * <p>When either FULL or HIGH_QUALITY is used, the camera device may
+     * do additional processing but {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and
+     * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform} will still be provided by the
+     * camera device (in the results) and be roughly correct.</p>
+     * <p>Switching to TRANSFORM_MATRIX and using the data provided from
+     * FAST or HIGH_QUALITY will yield a picture with the same white point
+     * as what was produced by the camera device in the earlier frame.</p>
+     * <p>The expected processing pipeline is as follows:</p>
+     * <p><img alt="White balance processing pipeline" src="../../../../images/camera2/metadata/android.colorCorrection.mode/processing_pipeline.png" /></p>
+     * <p>The white balance is encoded by two values, a 4-channel white-balance
+     * gain vector (applied in the Bayer domain), and a 3x3 color transform
+     * matrix (applied after demosaic).</p>
+     * <p>The 4-channel white-balance gains are defined as:</p>
+     * <pre><code>{@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} = [ R G_even G_odd B ]
+     * </code></pre>
+     * <p>where <code>G_even</code> is the gain for green pixels on even rows of the
+     * output, and <code>G_odd</code> is the gain for green pixels on the odd rows.
+     * These may be identical for a given camera device implementation; if
+     * the camera device does not support a separate gain for even/odd green
+     * channels, it will use the <code>G_even</code> value, and write <code>G_odd</code> equal to
+     * <code>G_even</code> in the output result metadata.</p>
+     * <p>The matrices for color transforms are defined as a 9-entry vector:</p>
+     * <pre><code>{@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform} = [ I0 I1 I2 I3 I4 I5 I6 I7 I8 ]
+     * </code></pre>
+     * <p>which define a transform from input sensor colors, <code>P_in = [ r g b ]</code>,
+     * to output linear sRGB, <code>P_out = [ r' g' b' ]</code>,</p>
+     * <p>with colors as follows:</p>
+     * <pre><code>r' = I0r + I1g + I2b
+     * g' = I3r + I4g + I5b
+     * b' = I6r + I7g + I8b
+     * </code></pre>
+     * <p>Both the input and output value ranges must match. Overflow/underflow
+     * values are clipped to fit within the range.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
+     * @see CaptureRequest#CONTROL_AWB_MODE
      * @see #COLOR_CORRECTION_MODE_TRANSFORM_MATRIX
      * @see #COLOR_CORRECTION_MODE_FAST
      * @see #COLOR_CORRECTION_MODE_HIGH_QUALITY
@@ -331,55 +371,80 @@
             new Key<Integer>("android.colorCorrection.mode", int.class);
 
     /**
-     * <p>
-     * A color transform matrix to use to transform
-     * from sensor RGB color space to output linear sRGB color space
-     * </p>
-     * <p>
-     * This matrix is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * <p>A color transform matrix to use to transform
+     * from sensor RGB color space to output linear sRGB color space</p>
+     * <p>This matrix is either set by the camera device when the request
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.
-     * </p><p>
-     * In the latter case, the HAL may round the matrix to account
-     * for precision issues; the final rounded matrix should be
-     * reported back in this matrix result metadata.
-     * </p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
+     * <p>In the latter case, the camera device may round the matrix to account
+     * for precision issues; the final rounded matrix should be reported back
+     * in this matrix result metadata. The transform should keep the magnitude
+     * of the output color values within <code>[0, 1.0]</code> (assuming input color
+     * values is within the normalized range <code>[0, 1.0]</code>), or clipping may occur.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<Rational[]> COLOR_CORRECTION_TRANSFORM =
             new Key<Rational[]>("android.colorCorrection.transform", Rational[].class);
 
     /**
-     * <p>
-     * Gains applying to Bayer color channels for
-     * white-balance
-     * </p>
-     * <p>
-     * The 4-channel white-balance gains are defined in
-     * the order of [R G_even G_odd B], where G_even is the gain
-     * for green pixels on even rows of the output, and G_odd
-     * is the gain for greenpixels on the odd rows. if a HAL
+     * <p>Gains applying to Bayer raw color channels for
+     * white-balance.</p>
+     * <p>The 4-channel white-balance gains are defined in
+     * the order of <code>[R G_even G_odd B]</code>, where <code>G_even</code> is the gain
+     * for green pixels on even rows of the output, and <code>G_odd</code>
+     * is the gain for green pixels on the odd rows. if a HAL
      * does not support a separate gain for even/odd green channels,
-     * it should use the G_even value,and write G_odd equal to
-     * G_even in the output result metadata.
-     * </p><p>
-     * This array is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * it should use the <code>G_even</code> value, and write <code>G_odd</code> equal to
+     * <code>G_even</code> in the output result metadata.</p>
+     * <p>This array is either set by the camera device when the request
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.
-     * </p><p>
-     * The ouput should be the gains actually applied by the HAL to
-     * the current frame.
-     * </p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
+     * <p>The output should be the gains actually applied by the camera device to
+     * the current frame.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<float[]> COLOR_CORRECTION_GAINS =
             new Key<float[]>("android.colorCorrection.gains", float[].class);
 
     /**
-     * <p>
-     * Enum for controlling
-     * antibanding
-     * </p>
+     * <p>The desired setting for the camera device's auto-exposure
+     * algorithm's antibanding compensation.</p>
+     * <p>Some kinds of lighting fixtures, such as some fluorescent
+     * lights, flicker at the rate of the power supply frequency
+     * (60Hz or 50Hz, depending on country). While this is
+     * typically not noticeable to a person, it can be visible to
+     * a camera device. If a camera sets its exposure time to the
+     * wrong value, the flicker may become visible in the
+     * viewfinder as flicker or in a final captured image, as a
+     * set of variable-brightness bands across the image.</p>
+     * <p>Therefore, the auto-exposure routines of camera devices
+     * include antibanding routines that ensure that the chosen
+     * exposure value will not cause such banding. The choice of
+     * exposure time depends on the rate of flicker, which the
+     * camera device can detect automatically, or the expected
+     * rate can be selected by the application using this
+     * control.</p>
+     * <p>A given camera device may not support all of the possible
+     * options for the antibanding mode. The
+     * {@link CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES android.control.aeAvailableAntibandingModes} key contains
+     * the available modes for a given camera device.</p>
+     * <p>The default mode is AUTO, which must be supported by all
+     * camera devices.</p>
+     * <p>If manual exposure control is enabled (by setting
+     * {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} or {@link CaptureRequest#CONTROL_MODE android.control.mode} to OFF),
+     * then this setting has no effect, and the application must
+     * ensure it selects exposure times that do not cause banding
+     * issues. The {@link CaptureResult#STATISTICS_SCENE_FLICKER android.statistics.sceneFlicker} key can assist
+     * the application in this.</p>
+     *
+     * @see CameraCharacteristics#CONTROL_AE_AVAILABLE_ANTIBANDING_MODES
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CaptureResult#STATISTICS_SCENE_FLICKER
      * @see #CONTROL_AE_ANTIBANDING_MODE_OFF
      * @see #CONTROL_AE_ANTIBANDING_MODE_50HZ
      * @see #CONTROL_AE_ANTIBANDING_MODE_60HZ
@@ -389,42 +454,66 @@
             new Key<Integer>("android.control.aeAntibandingMode", int.class);
 
     /**
-     * <p>
-     * Adjustment to AE target image
-     * brightness
-     * </p>
-     * <p>
-     * For example, if EV step is 0.333, '6' will mean an
+     * <p>Adjustment to AE target image
+     * brightness</p>
+     * <p>For example, if EV step is 0.333, '6' will mean an
      * exposure compensation of +2 EV; -3 will mean an exposure
-     * compensation of -1
-     * </p>
+     * compensation of -1</p>
      */
     public static final Key<Integer> CONTROL_AE_EXPOSURE_COMPENSATION =
             new Key<Integer>("android.control.aeExposureCompensation", int.class);
 
     /**
-     * <p>
-     * Whether AE is currently locked to its latest
-     * calculated values
-     * </p>
-     * <p>
-     * Note that even when AE is locked, the flash may be
-     * fired if the AE mode is ON_AUTO_FLASH / ON_ALWAYS_FLASH /
-     * ON_AUTO_FLASH_REDEYE.
-     * </p>
+     * <p>Whether AE is currently locked to its latest
+     * calculated values.</p>
+     * <p>Note that even when AE is locked, the flash may be
+     * fired if the {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is ON_AUTO_FLASH / ON_ALWAYS_FLASH /
+     * ON_AUTO_FLASH_REDEYE.</p>
+     * <p>If AE precapture is triggered (see {@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger})
+     * when AE is already locked, the camera device will not change the exposure time
+     * ({@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}) and sensitivity ({@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity})
+     * parameters. The flash may be fired if the {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode}
+     * is ON_AUTO_FLASH/ON_AUTO_FLASH_REDEYE and the scene is too dark. If the
+     * {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is ON_ALWAYS_FLASH, the scene may become overexposed.</p>
+     * <p>See {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE lock related state transition details.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CaptureResult#CONTROL_AE_STATE
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      */
     public static final Key<Boolean> CONTROL_AE_LOCK =
             new Key<Boolean>("android.control.aeLock", boolean.class);
 
     /**
-     * <p>
-     * Whether AE is currently updating the sensor
-     * exposure and sensitivity fields
-     * </p>
-     * <p>
-     * Only effective if android.control.mode =
-     * AUTO
-     * </p>
+     * <p>The desired mode for the camera device's
+     * auto-exposure routine.</p>
+     * <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is
+     * AUTO.</p>
+     * <p>When set to any of the ON modes, the camera device's
+     * auto-exposure routine is enabled, overriding the
+     * application's selected exposure time, sensor sensitivity,
+     * and frame duration ({@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration}). If one of the FLASH modes
+     * is selected, the camera device's flash unit controls are
+     * also overridden.</p>
+     * <p>The FLASH modes are only available if the camera device
+     * has a flash unit ({@link CameraCharacteristics#FLASH_INFO_AVAILABLE android.flash.info.available} is <code>true</code>).</p>
+     * <p>If flash TORCH mode is desired, this field must be set to
+     * ON or OFF, and {@link CaptureRequest#FLASH_MODE android.flash.mode} set to TORCH.</p>
+     * <p>When set to any of the ON modes, the values chosen by the
+     * camera device auto-exposure routine for the overridden
+     * fields for a given capture will be available in its
+     * CaptureResult.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CameraCharacteristics#FLASH_INFO_AVAILABLE
+     * @see CaptureRequest#FLASH_MODE
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      * @see #CONTROL_AE_MODE_OFF
      * @see #CONTROL_AE_MODE_ON
      * @see #CONTROL_AE_MODE_ON_AUTO_FLASH
@@ -435,60 +524,52 @@
             new Key<Integer>("android.control.aeMode", int.class);
 
     /**
-     * <p>
-     * List of areas to use for
-     * metering
-     * </p>
-     * <p>
-     * Each area is a rectangle plus weight: xmin, ymin,
-     * xmax, ymax, weight. The rectangle is defined inclusive of the
-     * specified coordinates.
-     * </p><p>
-     * The coordinate system is based on the active pixel array,
+     * <p>List of areas to use for
+     * metering.</p>
+     * <p>Each area is a rectangle plus weight: xmin, ymin,
+     * xmax, ymax, weight. The rectangle is defined to be inclusive of the
+     * specified coordinates.</p>
+     * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
-     * should be nonnegative.
-     * </p><p>
-     * If all regions have 0 weight, then no specific metering area
-     * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
-     * should ignore the sections outside the region and output the
-     * used sections in the frame metadata
-     * </p>
+     * should be nonnegative.</p>
+     * <p>If all regions have 0 weight, then no specific metering area
+     * needs to be used by the camera device. If the metering region is
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the camera device
+     * will ignore the sections outside the region and output the
+     * used sections in the frame metadata.</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      */
     public static final Key<int[]> CONTROL_AE_REGIONS =
             new Key<int[]>("android.control.aeRegions", int[].class);
 
     /**
-     * <p>
-     * Range over which fps can be adjusted to
-     * maintain exposure
-     * </p>
-     * <p>
-     * Only constrains AE algorithm, not manual control
-     * of android.sensor.exposureTime
-     * </p>
+     * <p>Range over which fps can be adjusted to
+     * maintain exposure</p>
+     * <p>Only constrains AE algorithm, not manual control
+     * of {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime}</p>
+     *
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
      */
     public static final Key<int[]> CONTROL_AE_TARGET_FPS_RANGE =
             new Key<int[]>("android.control.aeTargetFpsRange", int[].class);
 
     /**
-     * <p>
-     * Whether the HAL must trigger precapture
-     * metering.
-     * </p>
-     * <p>
-     * This entry is normally set to IDLE, or is not
+     * <p>Whether the camera device will trigger a precapture
+     * metering sequence when it processes this request.</p>
+     * <p>This entry is normally set to IDLE, or is not
      * included at all in the request settings. When included and
-     * set to START, the HAL must trigger the autoexposure
-     * precapture metering sequence.
-     * </p><p>
-     * The effect of AE precapture trigger depends on the current
-     * AE mode and state; see the camera HAL device v3 header for
-     * details.
-     * </p>
+     * set to START, the camera device will trigger the autoexposure
+     * precapture metering sequence.</p>
+     * <p>The effect of AE precapture trigger depends on the current
+     * AE mode and state; see {@link CaptureResult#CONTROL_AE_STATE android.control.aeState} for AE precapture
+     * state transition details.</p>
+     *
+     * @see CaptureResult#CONTROL_AE_STATE
      * @see #CONTROL_AE_PRECAPTURE_TRIGGER_IDLE
      * @see #CONTROL_AE_PRECAPTURE_TRIGGER_START
      */
@@ -496,10 +577,17 @@
             new Key<Integer>("android.control.aePrecaptureTrigger", int.class);
 
     /**
-     * <p>
-     * Whether AF is currently enabled, and what
-     * mode it is set to
-     * </p>
+     * <p>Whether AF is currently enabled, and what
+     * mode it is set to</p>
+     * <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO and the lens is not fixed focus
+     * (i.e. <code>{@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} &gt; 0</code>).</p>
+     * <p>If the lens is controlled by the camera device auto-focus algorithm,
+     * the camera device will report the current AF status in {@link CaptureResult#CONTROL_AF_STATE android.control.afState}
+     * in result metadata.</p>
+     *
+     * @see CaptureResult#CONTROL_AF_STATE
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
      * @see #CONTROL_AF_MODE_OFF
      * @see #CONTROL_AF_MODE_AUTO
      * @see #CONTROL_AF_MODE_MACRO
@@ -511,46 +599,40 @@
             new Key<Integer>("android.control.afMode", int.class);
 
     /**
-     * <p>
-     * List of areas to use for focus
-     * estimation
-     * </p>
-     * <p>
-     * Each area is a rectangle plus weight: xmin, ymin,
-     * xmax, ymax, weight. The rectangle is defined inclusive of the
-     * specified coordinates.
-     * </p><p>
-     * The coordinate system is based on the active pixel array,
+     * <p>List of areas to use for focus
+     * estimation.</p>
+     * <p>Each area is a rectangle plus weight: xmin, ymin,
+     * xmax, ymax, weight. The rectangle is defined to be inclusive of the
+     * specified coordinates.</p>
+     * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
-     * should be nonnegative.
-     * </p><p>
-     * If all regions have 0 weight, then no specific focus area
-     * needs to be used by the HAL. If the focusing region is
-     * outside the current android.scaler.cropRegion, the HAL
-     * should ignore the sections outside the region and output the
-     * used sections in the frame metadata
-     * </p>
+     * should be nonnegative.</p>
+     * <p>If all regions have 0 weight, then no specific focus area
+     * needs to be used by the camera device. If the focusing region is
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the camera device
+     * will ignore the sections outside the region and output the
+     * used sections in the frame metadata.</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      */
     public static final Key<int[]> CONTROL_AF_REGIONS =
             new Key<int[]>("android.control.afRegions", int[].class);
 
     /**
-     * <p>
-     * Whether the HAL must trigger autofocus.
-     * </p>
-     * <p>
-     * This entry is normally set to IDLE, or is not
-     * included at all in the request settings.
-     * </p><p>
-     * When included and set to START, the HAL must trigger the
-     * autofocus algorithm. The effect of AF trigger depends on the
-     * current AF mode and state; see the camera HAL device v3
-     * header for details. When set to CANCEL, the HAL must cancel
-     * any active trigger, and return to initial AF state.
-     * </p>
+     * <p>Whether the camera device will trigger autofocus for this request.</p>
+     * <p>This entry is normally set to IDLE, or is not
+     * included at all in the request settings.</p>
+     * <p>When included and set to START, the camera device will trigger the
+     * autofocus algorithm. If autofocus is disabled, this trigger has no effect.</p>
+     * <p>When set to CANCEL, the camera device will cancel any active trigger,
+     * and return to its initial AF state.</p>
+     * <p>See {@link CaptureResult#CONTROL_AF_STATE android.control.afState} for what that means for each AF mode.</p>
+     *
+     * @see CaptureResult#CONTROL_AF_STATE
      * @see #CONTROL_AF_TRIGGER_IDLE
      * @see #CONTROL_AF_TRIGGER_START
      * @see #CONTROL_AF_TRIGGER_CANCEL
@@ -559,28 +641,36 @@
             new Key<Integer>("android.control.afTrigger", int.class);
 
     /**
-     * <p>
-     * Whether AWB is currently locked to its
-     * latest calculated values
-     * </p>
-     * <p>
-     * Note that AWB lock is only meaningful for AUTO
+     * <p>Whether AWB is currently locked to its
+     * latest calculated values.</p>
+     * <p>Note that AWB lock is only meaningful for AUTO
      * mode; in other modes, AWB is already fixed to a specific
-     * setting
-     * </p>
+     * setting.</p>
      */
     public static final Key<Boolean> CONTROL_AWB_LOCK =
             new Key<Boolean>("android.control.awbLock", boolean.class);
 
     /**
-     * <p>
-     * Whether AWB is currently setting the color
+     * <p>Whether AWB is currently setting the color
      * transform fields, and what its illumination target
-     * is
-     * </p>
-     * <p>
-     * [BC - AWB lock,AWB modes]
-     * </p>
+     * is.</p>
+     * <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is AUTO.</p>
+     * <p>When set to the ON mode, the camera device's auto white balance
+     * routine is enabled, overriding the application's selected
+     * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
+     * <p>When set to the OFF mode, the camera device's auto white balance
+     * routine is disabled. The application manually controls the white
+     * balance by {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}
+     * and {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
+     * <p>When set to any other modes, the camera device's auto white balance
+     * routine is disabled. The camera device uses each particular illumination
+     * target for white balance adjustment.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_AWB_MODE_OFF
      * @see #CONTROL_AWB_MODE_AUTO
      * @see #CONTROL_AWB_MODE_INCANDESCENT
@@ -595,58 +685,66 @@
             new Key<Integer>("android.control.awbMode", int.class);
 
     /**
-     * <p>
-     * List of areas to use for illuminant
-     * estimation
-     * </p>
-     * <p>
-     * Only used in AUTO mode.
-     * </p><p>
-     * Each area is a rectangle plus weight: xmin, ymin,
-     * xmax, ymax, weight. The rectangle is defined inclusive of the
-     * specified coordinates.
-     * </p><p>
-     * The coordinate system is based on the active pixel array,
+     * <p>List of areas to use for illuminant
+     * estimation.</p>
+     * <p>Only used in AUTO mode.</p>
+     * <p>Each area is a rectangle plus weight: xmin, ymin,
+     * xmax, ymax, weight. The rectangle is defined to be inclusive of the
+     * specified coordinates.</p>
+     * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
-     * should be nonnegative.
-     * </p><p>
-     * If all regions have 0 weight, then no specific metering area
-     * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
-     * should ignore the sections outside the region and output the
-     * used sections in the frame metadata
-     * </p>
+     * should be nonnegative.</p>
+     * <p>If all regions have 0 weight, then no specific auto-white balance (AWB) area
+     * needs to be used by the camera device. If the AWB region is
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the camera device
+     * will ignore the sections outside the region and output the
+     * used sections in the frame metadata.</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      */
     public static final Key<int[]> CONTROL_AWB_REGIONS =
             new Key<int[]>("android.control.awbRegions", int[].class);
 
     /**
-     * <p>
-     * Information to 3A routines about the purpose
-     * of this capture, to help decide optimal 3A
-     * strategy
-     * </p>
-     * <p>
-     * Only used if android.control.mode != OFF.
-     * </p>
+     * <p>Information to the camera device 3A (auto-exposure,
+     * auto-focus, auto-white balance) routines about the purpose
+     * of this capture, to help the camera device to decide optimal 3A
+     * strategy.</p>
+     * <p>This control (except for MANUAL) is only effective if
+     * <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} != OFF</code> and any 3A routine is active.</p>
+     * <p>ZERO_SHUTTER_LAG must be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
+     * contains ZSL. MANUAL must be supported if {@link CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES android.request.availableCapabilities}
+     * contains MANUAL_SENSOR.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES
      * @see #CONTROL_CAPTURE_INTENT_CUSTOM
      * @see #CONTROL_CAPTURE_INTENT_PREVIEW
      * @see #CONTROL_CAPTURE_INTENT_STILL_CAPTURE
      * @see #CONTROL_CAPTURE_INTENT_VIDEO_RECORD
      * @see #CONTROL_CAPTURE_INTENT_VIDEO_SNAPSHOT
      * @see #CONTROL_CAPTURE_INTENT_ZERO_SHUTTER_LAG
+     * @see #CONTROL_CAPTURE_INTENT_MANUAL
      */
     public static final Key<Integer> CONTROL_CAPTURE_INTENT =
             new Key<Integer>("android.control.captureIntent", int.class);
 
     /**
-     * <p>
-     * Whether any special color effect is in use.
-     * Only used if android.control.mode != OFF
-     * </p>
+     * <p>A special color effect to apply.</p>
+     * <p>When this mode is set, a color effect will be applied
+     * to images produced by the camera device. The interpretation
+     * and implementation of these color effects is left to the
+     * implementor of the camera device, and should not be
+     * depended on to be consistent (or present) across all
+     * devices.</p>
+     * <p>A color effect will only be applied if
+     * {@link CaptureRequest#CONTROL_MODE android.control.mode} != OFF.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_EFFECT_MODE_OFF
      * @see #CONTROL_EFFECT_MODE_MONO
      * @see #CONTROL_EFFECT_MODE_NEGATIVE
@@ -661,23 +759,50 @@
             new Key<Integer>("android.control.effectMode", int.class);
 
     /**
-     * <p>
-     * Overall mode of 3A control
-     * routines
-     * </p>
+     * <p>Overall mode of 3A control
+     * routines.</p>
+     * <p>High-level 3A control. When set to OFF, all 3A control
+     * by the camera device is disabled. The application must set the fields for
+     * capture parameters itself.</p>
+     * <p>When set to AUTO, the individual algorithm controls in
+     * android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
+     * <p>When set to USE_SCENE_MODE, the individual controls in
+     * android.control.* are mostly disabled, and the camera device implements
+     * one of the scene mode settings (such as ACTION, SUNSET, or PARTY)
+     * as it wishes. The camera device scene mode 3A settings are provided by
+     * android.control.sceneModeOverrides.</p>
+     * <p>When set to OFF_KEEP_STATE, it is similar to OFF mode, the only difference
+     * is that this frame will not be used by camera device background 3A statistics
+     * update, as if this frame is never captured. This mode can be used in the scenario
+     * where the application doesn't want a 3A manual control capture to affect
+     * the subsequent auto 3A capture results.</p>
+     *
+     * @see CaptureRequest#CONTROL_AF_MODE
      * @see #CONTROL_MODE_OFF
      * @see #CONTROL_MODE_AUTO
      * @see #CONTROL_MODE_USE_SCENE_MODE
+     * @see #CONTROL_MODE_OFF_KEEP_STATE
      */
     public static final Key<Integer> CONTROL_MODE =
             new Key<Integer>("android.control.mode", int.class);
 
     /**
-     * <p>
-     * Which scene mode is active when
-     * android.control.mode = SCENE_MODE
-     * </p>
-     * @see #CONTROL_SCENE_MODE_UNSUPPORTED
+     * <p>A camera mode optimized for conditions typical in a particular
+     * capture setting.</p>
+     * <p>This is the mode that that is active when
+     * <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code>. Aside from FACE_PRIORITY,
+     * these modes will disable {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode},
+     * {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}, and {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} while in use.</p>
+     * <p>The interpretation and implementation of these scene modes is left
+     * to the implementor of the camera device. Their behavior will not be
+     * consistent across all devices, and any given device may only implement
+     * a subset of these modes.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_AF_MODE
+     * @see CaptureRequest#CONTROL_AWB_MODE
+     * @see CaptureRequest#CONTROL_MODE
+     * @see #CONTROL_SCENE_MODE_DISABLED
      * @see #CONTROL_SCENE_MODE_FACE_PRIORITY
      * @see #CONTROL_SCENE_MODE_ACTION
      * @see #CONTROL_SCENE_MODE_PORTRAIT
@@ -699,24 +824,30 @@
             new Key<Integer>("android.control.sceneMode", int.class);
 
     /**
-     * <p>
-     * Whether video stabilization is
-     * active
-     * </p>
-     * <p>
-     * If enabled, video stabilization can modify the
-     * android.scaler.cropRegion to keep the video stream
-     * stabilized
-     * </p>
+     * <p>Whether video stabilization is
+     * active</p>
+     * <p>If enabled, video stabilization can modify the
+     * {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion} to keep the video stream
+     * stabilized</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
      */
     public static final Key<Boolean> CONTROL_VIDEO_STABILIZATION_MODE =
             new Key<Boolean>("android.control.videoStabilizationMode", boolean.class);
 
     /**
-     * <p>
-     * Operation mode for edge
-     * enhancement
-     * </p>
+     * <p>Operation mode for edge
+     * enhancement.</p>
+     * <p>Edge/sharpness/detail enhancement. OFF means no
+     * enhancement will be applied by the camera device.</p>
+     * <p>This must be set to one of the modes listed in {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}.</p>
+     * <p>FAST/HIGH_QUALITY both mean camera device determined enhancement
+     * will be applied. HIGH_QUALITY mode indicates that the
+     * camera device will use the highest-quality enhancement algorithms,
+     * even if it slows down capture rate. FAST means the camera device will
+     * not slow down capture rate when applying edge enhancement.</p>
+     *
+     * @see CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES
      * @see #EDGE_MODE_OFF
      * @see #EDGE_MODE_FAST
      * @see #EDGE_MODE_HIGH_QUALITY
@@ -725,9 +856,25 @@
             new Key<Integer>("android.edge.mode", int.class);
 
     /**
-     * <p>
-     * Select flash operation mode
-     * </p>
+     * <p>The desired mode for for the camera device's flash control.</p>
+     * <p>This control is only effective when flash unit is available
+     * (<code>{@link CameraCharacteristics#FLASH_INFO_AVAILABLE android.flash.info.available} == true</code>).</p>
+     * <p>When this control is used, the {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} must be set to ON or OFF.
+     * Otherwise, the camera device auto-exposure related flash control (ON_AUTO_FLASH,
+     * ON_ALWAYS_FLASH, or ON_AUTO_FLASH_REDEYE) will override this control.</p>
+     * <p>When set to OFF, the camera device will not fire flash for this capture.</p>
+     * <p>When set to SINGLE, the camera device will fire flash regardless of the camera
+     * device's auto-exposure routine's result. When used in still capture case, this
+     * control should be used along with AE precapture metering sequence
+     * ({@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}), otherwise, the image may be incorrectly exposed.</p>
+     * <p>When set to TORCH, the flash will be on continuously. This mode can be used
+     * for use cases such as preview, auto-focus assist, still capture, or video recording.</p>
+     * <p>The flash status will be reported by {@link CaptureResult#FLASH_STATE android.flash.state} in the capture result metadata.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CameraCharacteristics#FLASH_INFO_AVAILABLE
+     * @see CaptureResult#FLASH_STATE
      * @see #FLASH_MODE_OFF
      * @see #FLASH_MODE_SINGLE
      * @see #FLASH_MODE_TORCH
@@ -736,128 +883,171 @@
             new Key<Integer>("android.flash.mode", int.class);
 
     /**
-     * <p>
-     * GPS coordinates to include in output JPEG
-     * EXIF
-     * </p>
+     * <p>Set operational mode for hot pixel correction.</p>
+     * <p>Valid modes for this camera device are listed in
+     * {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}.</p>
+     * <p>Hotpixel correction interpolates out, or otherwise removes, pixels
+     * that do not accurately encode the incoming light (i.e. pixels that
+     * are stuck at an arbitrary value).</p>
+     *
+     * @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES
+     * @see #HOT_PIXEL_MODE_OFF
+     * @see #HOT_PIXEL_MODE_FAST
+     * @see #HOT_PIXEL_MODE_HIGH_QUALITY
+     */
+    public static final Key<Integer> HOT_PIXEL_MODE =
+            new Key<Integer>("android.hotPixel.mode", int.class);
+
+    /**
+     * <p>GPS coordinates to include in output JPEG
+     * EXIF</p>
      */
     public static final Key<double[]> JPEG_GPS_COORDINATES =
             new Key<double[]>("android.jpeg.gpsCoordinates", double[].class);
 
     /**
-     * <p>
-     * 32 characters describing GPS algorithm to
-     * include in EXIF
-     * </p>
+     * <p>32 characters describing GPS algorithm to
+     * include in EXIF</p>
      */
     public static final Key<String> JPEG_GPS_PROCESSING_METHOD =
             new Key<String>("android.jpeg.gpsProcessingMethod", String.class);
 
     /**
-     * <p>
-     * Time GPS fix was made to include in
-     * EXIF
-     * </p>
+     * <p>Time GPS fix was made to include in
+     * EXIF</p>
      */
     public static final Key<Long> JPEG_GPS_TIMESTAMP =
             new Key<Long>("android.jpeg.gpsTimestamp", long.class);
 
     /**
-     * <p>
-     * Orientation of JPEG image to
-     * write
-     * </p>
+     * <p>Orientation of JPEG image to
+     * write</p>
      */
     public static final Key<Integer> JPEG_ORIENTATION =
             new Key<Integer>("android.jpeg.orientation", int.class);
 
     /**
-     * <p>
-     * Compression quality of the final JPEG
-     * image
-     * </p>
-     * <p>
-     * 85-95 is typical usage range
-     * </p>
+     * <p>Compression quality of the final JPEG
+     * image</p>
+     * <p>85-95 is typical usage range</p>
      */
     public static final Key<Byte> JPEG_QUALITY =
             new Key<Byte>("android.jpeg.quality", byte.class);
 
     /**
-     * <p>
-     * Compression quality of JPEG
-     * thumbnail
-     * </p>
+     * <p>Compression quality of JPEG
+     * thumbnail</p>
      */
     public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
             new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
 
     /**
-     * <p>
-     * Resolution of embedded JPEG
-     * thumbnail
-     * </p>
+     * <p>Resolution of embedded JPEG thumbnail</p>
+     * <p>When set to (0, 0) value, the JPEG EXIF will not contain thumbnail,
+     * but the captured JPEG will still be a valid image.</p>
+     * <p>When a jpeg image capture is issued, the thumbnail size selected should have
+     * the same aspect ratio as the jpeg image.</p>
      */
     public static final Key<android.hardware.camera2.Size> JPEG_THUMBNAIL_SIZE =
             new Key<android.hardware.camera2.Size>("android.jpeg.thumbnailSize", android.hardware.camera2.Size.class);
 
     /**
-     * <p>
-     * Size of the lens aperture
-     * </p>
-     * <p>
-     * Will not be supported on most devices. Can only
-     * pick from supported list
-     * </p>
+     * <p>The ratio of lens focal length to the effective
+     * aperture diameter.</p>
+     * <p>This will only be supported on the camera devices that
+     * have variable aperture lens. The aperture value can only be
+     * one of the values listed in {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}.</p>
+     * <p>When this is supported and {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is OFF,
+     * this can be set along with {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration}
+     * to achieve manual exposure control.</p>
+     * <p>The requested aperture value may take several frames to reach the
+     * requested value; the camera device will report the current (intermediate)
+     * aperture size in capture result metadata while the aperture is changing.
+     * While the aperture is still changing, {@link CaptureResult#LENS_STATE android.lens.state} will be set to MOVING.</p>
+     * <p>When this is supported and {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is one of
+     * the ON modes, this will be overridden by the camera device
+     * auto-exposure algorithm, the overridden values are then provided
+     * back to the user in the corresponding result.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES
+     * @see CaptureResult#LENS_STATE
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      */
     public static final Key<Float> LENS_APERTURE =
             new Key<Float>("android.lens.aperture", float.class);
 
     /**
-     * <p>
-     * State of lens neutral density
-     * filter(s)
-     * </p>
-     * <p>
-     * Will not be supported on most devices. Can only
-     * pick from supported list
-     * </p>
+     * <p>State of lens neutral density filter(s).</p>
+     * <p>This will not be supported on most camera devices. On devices
+     * where this is supported, this may only be set to one of the
+     * values included in {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}.</p>
+     * <p>Lens filters are typically used to lower the amount of light the
+     * sensor is exposed to (measured in steps of EV). As used here, an EV
+     * step is the standard logarithmic representation, which are
+     * non-negative, and inversely proportional to the amount of light
+     * hitting the sensor.  For example, setting this to 0 would result
+     * in no reduction of the incoming light, and setting this to 2 would
+     * mean that the filter is set to reduce incoming light by two stops
+     * (allowing 1/4 of the prior amount of light to the sensor).</p>
+     * <p>It may take several frames before the lens filter density changes
+     * to the requested value. While the filter density is still changing,
+     * {@link CaptureResult#LENS_STATE android.lens.state} will be set to MOVING.</p>
+     *
+     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES
+     * @see CaptureResult#LENS_STATE
      */
     public static final Key<Float> LENS_FILTER_DENSITY =
             new Key<Float>("android.lens.filterDensity", float.class);
 
     /**
-     * <p>
-     * Lens optical zoom setting
-     * </p>
-     * <p>
-     * Will not be supported on most devices.
-     * </p>
+     * <p>The current lens focal length; used for optical zoom.</p>
+     * <p>This setting controls the physical focal length of the camera
+     * device's lens. Changing the focal length changes the field of
+     * view of the camera device, and is usually used for optical zoom.</p>
+     * <p>Like {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} and {@link CaptureRequest#LENS_APERTURE android.lens.aperture}, this
+     * setting won't be applied instantaneously, and it may take several
+     * frames before the lens can change to the requested focal length.
+     * While the focal length is still changing, {@link CaptureResult#LENS_STATE android.lens.state} will
+     * be set to MOVING.</p>
+     * <p>This is expected not to be supported on most devices.</p>
+     *
+     * @see CaptureRequest#LENS_APERTURE
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
+     * @see CaptureResult#LENS_STATE
      */
     public static final Key<Float> LENS_FOCAL_LENGTH =
             new Key<Float>("android.lens.focalLength", float.class);
 
     /**
-     * <p>
-     * Distance to plane of sharpest focus,
-     * measured from frontmost surface of the lens
-     * </p>
-     * <p>
-     * 0 = infinity focus. Used value should be clamped
-     * to (0,minimum focus distance)
-     * </p>
+     * <p>Distance to plane of sharpest focus,
+     * measured from frontmost surface of the lens</p>
+     * <p>0 means infinity focus. Used value will be clamped
+     * to [0, {@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance}].</p>
+     * <p>Like {@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}, this setting won't be applied
+     * instantaneously, and it may take several frames before the lens
+     * can move to the requested focus distance. While the lens is still moving,
+     * {@link CaptureResult#LENS_STATE android.lens.state} will be set to MOVING.</p>
+     *
+     * @see CaptureRequest#LENS_FOCAL_LENGTH
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
+     * @see CaptureResult#LENS_STATE
      */
     public static final Key<Float> LENS_FOCUS_DISTANCE =
             new Key<Float>("android.lens.focusDistance", float.class);
 
     /**
-     * <p>
-     * Whether optical image stabilization is
-     * enabled.
-     * </p>
-     * <p>
-     * Will not be supported on most devices.
-     * </p>
+     * <p>Sets whether the camera device uses optical image stabilization (OIS)
+     * when capturing images.</p>
+     * <p>OIS is used to compensate for motion blur due to small movements of
+     * the camera during capture. Unlike digital image stabilization, OIS makes
+     * use of mechanical elements to stabilize the camera sensor, and thus
+     * allows for longer exposure times before camera shake becomes
+     * apparent.</p>
+     * <p>This is not expected to be supported on most devices.</p>
      * @see #LENS_OPTICAL_STABILIZATION_MODE_OFF
      * @see #LENS_OPTICAL_STABILIZATION_MODE_ON
      */
@@ -865,10 +1055,19 @@
             new Key<Integer>("android.lens.opticalStabilizationMode", int.class);
 
     /**
-     * <p>
-     * Mode of operation for the noise reduction
-     * algorithm
-     * </p>
+     * <p>Mode of operation for the noise reduction
+     * algorithm</p>
+     * <p>Noise filtering control. OFF means no noise reduction
+     * will be applied by the camera device.</p>
+     * <p>This must be set to a valid mode in
+     * {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}.</p>
+     * <p>FAST/HIGH_QUALITY both mean camera device determined noise filtering
+     * will be applied. HIGH_QUALITY mode indicates that the camera device
+     * will use the highest-quality noise filtering algorithms,
+     * even if it slows down capture rate. FAST means the camera device should not
+     * slow down capture rate when applying noise filtering.</p>
+     *
+     * @see CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES
      * @see #NOISE_REDUCTION_MODE_OFF
      * @see #NOISE_REDUCTION_MODE_FAST
      * @see #NOISE_REDUCTION_MODE_HIGH_QUALITY
@@ -877,44 +1076,33 @@
             new Key<Integer>("android.noiseReduction.mode", int.class);
 
     /**
-     * <p>
-     * An application-specified ID for the current
+     * <p>An application-specified ID for the current
      * request. Must be maintained unchanged in output
-     * frame
-     * </p>
-     *
+     * frame</p>
      * @hide
      */
     public static final Key<Integer> REQUEST_ID =
             new Key<Integer>("android.request.id", int.class);
 
     /**
-     * <p>
-     * (x, y, width, height).
-     * </p><p>
-     * A rectangle with the top-level corner of (x,y) and size
+     * <p>(x, y, width, height).</p>
+     * <p>A rectangle with the top-level corner of (x,y) and size
      * (width, height). The region of the sensor that is used for
      * output. Each stream must use this rectangle to produce its
      * output, cropping to a smaller region if necessary to
-     * maintain the stream's aspect ratio.
-     * </p><p>
-     * HAL2.x uses only (x, y, width)
-     * </p>
-     * <p>
-     * Any additional per-stream cropping must be done to
-     * maximize the final pixel area of the stream.
-     * </p><p>
-     * For example, if the crop region is set to a 4:3 aspect
+     * maintain the stream's aspect ratio.</p>
+     * <p>HAL2.x uses only (x, y, width)</p>
+     * <p>Any additional per-stream cropping must be done to
+     * maximize the final pixel area of the stream.</p>
+     * <p>For example, if the crop region is set to a 4:3 aspect
      * ratio, then 4:3 streams should use the exact crop
      * region. 16:9 streams should further crop vertically
-     * (letterbox).
-     * </p><p>
-     * Conversely, if the crop region is set to a 16:9, then 4:3
+     * (letterbox).</p>
+     * <p>Conversely, if the crop region is set to a 16:9, then 4:3
      * outputs should crop horizontally (pillarbox), and 16:9
      * streams should match exactly. These additional crops must
-     * be centered within the crop region.
-     * </p><p>
-     * The output streams must maintain square pixels at all
+     * be centered within the crop region.</p>
+     * <p>The output streams must maintain square pixels at all
      * times, no matter what the relative aspect ratios of the
      * crop region and the stream are.  Negative values for
      * corner are allowed for raw output if full pixel array is
@@ -923,69 +1111,188 @@
      * for raw output, where only a few fixed scales may be
      * possible. The width and height of the crop region cannot
      * be set to be smaller than floor( activeArraySize.width /
-     * android.scaler.maxDigitalZoom ) and floor(
-     * activeArraySize.height / android.scaler.maxDigitalZoom),
-     * respectively.
-     * </p>
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} ) and floor(
+     * activeArraySize.height /
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom}), respectively.</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
      */
     public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
             new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
 
     /**
-     * <p>
-     * Duration each pixel is exposed to
-     * light.
-     * </p><p>
-     * If the sensor can't expose this exact duration, it should shorten the
-     * duration exposed to the nearest possible value (rather than expose longer).
-     * </p>
-     * <p>
-     * 1/10000 - 30 sec range. No bulb mode
-     * </p>
+     * <p>Duration each pixel is exposed to
+     * light.</p>
+     * <p>If the sensor can't expose this exact duration, it should shorten the
+     * duration exposed to the nearest possible value (rather than expose longer).</p>
      */
     public static final Key<Long> SENSOR_EXPOSURE_TIME =
             new Key<Long>("android.sensor.exposureTime", long.class);
 
     /**
-     * <p>
-     * Duration from start of frame exposure to
-     * start of next frame exposure
-     * </p>
-     * <p>
-     * Exposure time has priority, so duration is set to
-     * max(duration, exposure time + overhead)
-     * </p>
+     * <p>Duration from start of frame exposure to
+     * start of next frame exposure.</p>
+     * <p>The maximum frame rate that can be supported by a camera subsystem is
+     * a function of many factors:</p>
+     * <ul>
+     * <li>Requested resolutions of output image streams</li>
+     * <li>Availability of binning / skipping modes on the imager</li>
+     * <li>The bandwidth of the imager interface</li>
+     * <li>The bandwidth of the various ISP processing blocks</li>
+     * </ul>
+     * <p>Since these factors can vary greatly between different ISPs and
+     * sensors, the camera abstraction tries to represent the bandwidth
+     * restrictions with as simple a model as possible.</p>
+     * <p>The model presented has the following characteristics:</p>
+     * <ul>
+     * <li>The image sensor is always configured to output the smallest
+     * resolution possible given the application's requested output stream
+     * sizes.  The smallest resolution is defined as being at least as large
+     * as the largest requested output stream size; the camera pipeline must
+     * never digitally upsample sensor data when the crop region covers the
+     * whole sensor. In general, this means that if only small output stream
+     * resolutions are configured, the sensor can provide a higher frame
+     * rate.</li>
+     * <li>Since any request may use any or all the currently configured
+     * output streams, the sensor and ISP must be configured to support
+     * scaling a single capture to all the streams at the same time.  This
+     * means the camera pipeline must be ready to produce the largest
+     * requested output size without any delay.  Therefore, the overall
+     * frame rate of a given configured stream set is governed only by the
+     * largest requested stream resolution.</li>
+     * <li>Using more than one output stream in a request does not affect the
+     * frame duration.</li>
+     * <li>Certain format-streams may need to do additional background processing
+     * before data is consumed/produced by that stream. These processors
+     * can run concurrently to the rest of the camera pipeline, but
+     * cannot process more than 1 capture at a time.</li>
+     * </ul>
+     * <p>The necessary information for the application, given the model above,
+     * is provided via the {@link CameraCharacteristics#SCALER_AVAILABLE_MIN_FRAME_DURATIONS android.scaler.availableMinFrameDurations} field.
+     * These are used to determine the maximum frame rate / minimum frame
+     * duration that is possible for a given stream configuration.</p>
+     * <p>Specifically, the application can use the following rules to
+     * determine the minimum frame duration it can request from the camera
+     * device:</p>
+     * <ol>
+     * <li>Let the set of currently configured input/output streams
+     * be called <code>S</code>.</li>
+     * <li>Find the minimum frame durations for each stream in <code>S</code>, by
+     * looking it up in {@link CameraCharacteristics#SCALER_AVAILABLE_MIN_FRAME_DURATIONS android.scaler.availableMinFrameDurations} (with
+     * its respective size/format). Let this set of frame durations be called
+     * <code>F</code>.</li>
+     * <li>For any given request <code>R</code>, the minimum frame duration allowed
+     * for <code>R</code> is the maximum out of all values in <code>F</code>. Let the streams
+     * used in <code>R</code> be called <code>S_r</code>.</li>
+     * </ol>
+     * <p>If none of the streams in <code>S_r</code> have a stall time (listed in
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS android.scaler.availableStallDurations}), then the frame duration in
+     * <code>F</code> determines the steady state frame rate that the application will
+     * get if it uses <code>R</code> as a repeating request. Let this special kind
+     * of request be called <code>Rsimple</code>.</p>
+     * <p>A repeating request <code>Rsimple</code> can be <em>occasionally</em> interleaved
+     * by a single capture of a new request <code>Rstall</code> (which has at least
+     * one in-use stream with a non-0 stall time) and if <code>Rstall</code> has the
+     * same minimum frame duration this will not cause a frame rate loss
+     * if all buffers from the previous <code>Rstall</code> have already been
+     * delivered.</p>
+     * <p>For more details about stalling, see
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS android.scaler.availableStallDurations}.</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_MIN_FRAME_DURATIONS
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS
      */
     public static final Key<Long> SENSOR_FRAME_DURATION =
             new Key<Long>("android.sensor.frameDuration", long.class);
 
     /**
-     * <p>
-     * Gain applied to image data. Must be
+     * <p>Gain applied to image data. Must be
      * implemented through analog gain only if set to values
-     * below 'maximum analog sensitivity'.
-     * </p><p>
-     * If the sensor can't apply this exact gain, it should lessen the
-     * gain to the nearest possible value (rather than gain more).
-     * </p>
-     * <p>
-     * ISO 12232:2006 REI method
-     * </p>
+     * below 'maximum analog sensitivity'.</p>
+     * <p>If the sensor can't apply this exact gain, it should lessen the
+     * gain to the nearest possible value (rather than gain more).</p>
+     * <p>ISO 12232:2006 REI method</p>
      */
     public static final Key<Integer> SENSOR_SENSITIVITY =
             new Key<Integer>("android.sensor.sensitivity", int.class);
 
     /**
-     * <p>
-     * State of the face detector
-     * unit
-     * </p>
-     * <p>
-     * Whether face detection is enabled, and whether it
+     * <p>A pixel <code>[R, G_even, G_odd, B]</code> that supplies the test pattern
+     * when {@link CaptureRequest#SENSOR_TEST_PATTERN_MODE android.sensor.testPatternMode} is SOLID_COLOR.</p>
+     * <p>Each color channel is treated as an unsigned 32-bit integer.
+     * The camera device then uses the most significant X bits
+     * that correspond to how many bits are in its Bayer raw sensor
+     * output.</p>
+     * <p>For example, a sensor with RAW10 Bayer output would use the
+     * 10 most significant bits from each color channel.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CaptureRequest#SENSOR_TEST_PATTERN_MODE
+     */
+    public static final Key<int[]> SENSOR_TEST_PATTERN_DATA =
+            new Key<int[]>("android.sensor.testPatternData", int[].class);
+
+    /**
+     * <p>When enabled, the sensor sends a test pattern instead of
+     * doing a real exposure from the camera.</p>
+     * <p>When a test pattern is enabled, all manual sensor controls specified
+     * by android.sensor.* should be ignored. All other controls should
+     * work as normal.</p>
+     * <p>For example, if manual flash is enabled, flash firing should still
+     * occur (and that the test pattern remain unmodified, since the flash
+     * would not actually affect it).</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     * @see #SENSOR_TEST_PATTERN_MODE_OFF
+     * @see #SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
+     * @see #SENSOR_TEST_PATTERN_MODE_COLOR_BARS
+     * @see #SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY
+     * @see #SENSOR_TEST_PATTERN_MODE_PN9
+     * @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1
+     */
+    public static final Key<Integer> SENSOR_TEST_PATTERN_MODE =
+            new Key<Integer>("android.sensor.testPatternMode", int.class);
+
+    /**
+     * <p>Quality of lens shading correction applied
+     * to the image data.</p>
+     * <p>When set to OFF mode, no lens shading correction will be applied by the
+     * camera device, and an identity lens shading map data will be provided
+     * if <code>{@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode} == ON</code>. For example, for lens
+     * shading map with size specified as <code>{@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize} = [ 4, 3 ]</code>,
+     * the output {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap} for this case will be an identity map
+     * shown below:</p>
+     * <pre><code>[ 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,   1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0 ]
+     * </code></pre>
+     * <p>When set to other modes, lens shading correction will be applied by the
+     * camera device. Applications can request lens shading map data by setting
+     * {@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode} to ON, and then the camera device will provide
+     * lens shading map data in {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap}, with size specified
+     * by {@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize}.</p>
+     *
+     * @see CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
+     * @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
+     * @see #SHADING_MODE_OFF
+     * @see #SHADING_MODE_FAST
+     * @see #SHADING_MODE_HIGH_QUALITY
+     */
+    public static final Key<Integer> SHADING_MODE =
+            new Key<Integer>("android.shading.mode", int.class);
+
+    /**
+     * <p>State of the face detector
+     * unit</p>
+     * <p>Whether face detection is enabled, and whether it
      * should output just the basic fields or the full set of
      * fields. Value must be one of the
-     * android.statistics.info.availableFaceDetectModes.
-     * </p>
+     * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES android.statistics.info.availableFaceDetectModes}.</p>
+     *
+     * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES
      * @see #STATISTICS_FACE_DETECT_MODE_OFF
      * @see #STATISTICS_FACE_DETECT_MODE_SIMPLE
      * @see #STATISTICS_FACE_DETECT_MODE_FULL
@@ -994,15 +1301,25 @@
             new Key<Integer>("android.statistics.faceDetectMode", int.class);
 
     /**
-     * <p>
-     * Whether the HAL needs to output the lens
-     * shading map in output result metadata
-     * </p>
-     * <p>
-     * When set to ON,
-     * android.statistics.lensShadingMap must be provided in
-     * the output result metdata.
-     * </p>
+     * <p>Operating mode for hotpixel map generation.</p>
+     * <p>If set to ON, a hotpixel map is returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.
+     * If set to OFF, no hotpixel map should be returned.</p>
+     * <p>This must be set to a valid mode from {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}.</p>
+     *
+     * @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
+     * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES
+     */
+    public static final Key<Boolean> STATISTICS_HOT_PIXEL_MAP_MODE =
+            new Key<Boolean>("android.statistics.hotPixelMapMode", boolean.class);
+
+    /**
+     * <p>Whether the camera device will output the lens
+     * shading map in output result metadata.</p>
+     * <p>When set to ON,
+     * {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap} must be provided in
+     * the output result metadata.</p>
+     *
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
      * @see #STATISTICS_LENS_SHADING_MAP_MODE_OFF
      * @see #STATISTICS_LENS_SHADING_MAP_MODE_ON
      */
@@ -1010,61 +1327,110 @@
             new Key<Integer>("android.statistics.lensShadingMapMode", int.class);
 
     /**
-     * <p>
-     * Table mapping blue input values to output
-     * values
-     * </p>
-     * <p>
-     * Tonemapping / contrast / gamma curve for the blue
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.
-     * </p><p>
-     * See android.tonemap.curveRed for more details.
-     * </p>
+     * <p>Tonemapping / contrast / gamma curve for the blue
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_BLUE =
             new Key<float[]>("android.tonemap.curveBlue", float[].class);
 
     /**
-     * <p>
-     * Table mapping green input values to output
-     * values
-     * </p>
-     * <p>
-     * Tonemapping / contrast / gamma curve for the green
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.
-     * </p><p>
-     * See android.tonemap.curveRed for more details.
-     * </p>
+     * <p>Tonemapping / contrast / gamma curve for the green
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_GREEN =
             new Key<float[]>("android.tonemap.curveGreen", float[].class);
 
     /**
-     * <p>
-     * Table mapping red input values to output
-     * values
-     * </p>
-     * <p>
-     * Tonemapping / contrast / gamma curve for the red
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.
-     * </p><p>
-     * Since the input and output ranges may vary depending on
-     * the camera pipeline, the input and output pixel values
-     * are represented by normalized floating-point values
-     * between 0 and 1, with 0 == black and 1 == white.
-     * </p><p>
-     * The curve should be linearly interpolated between the
-     * defined points. The points will be listed in increasing
-     * order of P_IN. For example, if the array is: [0.0, 0.0,
-     * 0.3, 0.5, 1.0, 1.0], then the input->output mapping
-     * for a few sample points would be: 0 -> 0, 0.15 ->
-     * 0.25, 0.3 -> 0.5, 0.5 -> 0.64
-     * </p>
+     * <p>Tonemapping / contrast / gamma curve for the red
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>Each channel's curve is defined by an array of control points:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} =
+     * [ P0in, P0out, P1in, P1out, P2in, P2out, P3in, P3out, ..., PNin, PNout ]
+     * 2 &lt;= N &lt;= {@link CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS android.tonemap.maxCurvePoints}</code></pre>
+     * <p>These are sorted in order of increasing <code>Pin</code>; it is always
+     * guaranteed that input values 0.0 and 1.0 are included in the list to
+     * define a complete mapping. For input values between control points,
+     * the camera device must linearly interpolate between the control
+     * points.</p>
+     * <p>Each curve can have an independent number of points, and the number
+     * of points can be less than max (that is, the request doesn't have to
+     * always provide a curve with number of points equivalent to
+     * {@link CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS android.tonemap.maxCurvePoints}).</p>
+     * <p>A few examples, and their corresponding graphical mappings; these
+     * only specify the red channel and the precision is limited to 4
+     * digits, for conciseness.</p>
+     * <p>Linear mapping:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [ 0, 0, 1.0, 1.0 ]
+     * </code></pre>
+     * <p><img alt="Linear mapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/linear_tonemap.png" /></p>
+     * <p>Invert mapping:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [ 0, 1.0, 1.0, 0 ]
+     * </code></pre>
+     * <p><img alt="Inverting mapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/inverse_tonemap.png" /></p>
+     * <p>Gamma 1/2.2 mapping, with 16 control points:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [
+     * 0.0000, 0.0000, 0.0667, 0.2920, 0.1333, 0.4002, 0.2000, 0.4812,
+     * 0.2667, 0.5484, 0.3333, 0.6069, 0.4000, 0.6594, 0.4667, 0.7072,
+     * 0.5333, 0.7515, 0.6000, 0.7928, 0.6667, 0.8317, 0.7333, 0.8685,
+     * 0.8000, 0.9035, 0.8667, 0.9370, 0.9333, 0.9691, 1.0000, 1.0000 ]
+     * </code></pre>
+     * <p><img alt="Gamma = 1/2.2 tonemapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/gamma_tonemap.png" /></p>
+     * <p>Standard sRGB gamma mapping, per IEC 61966-2-1:1999, with 16 control points:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [
+     * 0.0000, 0.0000, 0.0667, 0.2864, 0.1333, 0.4007, 0.2000, 0.4845,
+     * 0.2667, 0.5532, 0.3333, 0.6125, 0.4000, 0.6652, 0.4667, 0.7130,
+     * 0.5333, 0.7569, 0.6000, 0.7977, 0.6667, 0.8360, 0.7333, 0.8721,
+     * 0.8000, 0.9063, 0.8667, 0.9389, 0.9333, 0.9701, 1.0000, 1.0000 ]
+     * </code></pre>
+     * <p><img alt="sRGB tonemapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png" /></p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_RED =
             new Key<float[]>("android.tonemap.curveRed", float[].class);
 
     /**
+     * <p>High-level global contrast/gamma/tonemapping control.</p>
+     * <p>When switching to an application-defined contrast curve by setting
+     * {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} to CONTRAST_CURVE, the curve is defined
+     * per-channel with a set of <code>(in, out)</code> points that specify the
+     * mapping from input high-bit-depth pixel value to the output
+     * low-bit-depth value.  Since the actual pixel ranges of both input
+     * and output may change depending on the camera pipeline, the values
+     * are specified by normalized floating-point numbers.</p>
+     * <p>More-complex color mapping operations such as 3D color look-up
+     * tables, selective chroma enhancement, or other non-linear color
+     * transforms will be disabled when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>This must be set to a valid mode in
+     * {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}.</p>
+     * <p>When using either FAST or HIGH_QUALITY, the camera device will
+     * emit its own tonemap curve in {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed},
+     * {@link CaptureRequest#TONEMAP_CURVE_GREEN android.tonemap.curveGreen}, and {@link CaptureRequest#TONEMAP_CURVE_BLUE android.tonemap.curveBlue}.
+     * These values are always available, and as close as possible to the
+     * actually used nonlinear/nonglobal transforms.</p>
+     * <p>If a request is sent with TRANSFORM_MATRIX with the camera device's
+     * provided curve in FAST or HIGH_QUALITY, the image's tonemap will be
+     * roughly the same.</p>
+     *
+     * @see CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES
+     * @see CaptureRequest#TONEMAP_CURVE_BLUE
+     * @see CaptureRequest#TONEMAP_CURVE_GREEN
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CaptureRequest#TONEMAP_MODE
      * @see #TONEMAP_MODE_CONTRAST_CURVE
      * @see #TONEMAP_MODE_FAST
      * @see #TONEMAP_MODE_HIGH_QUALITY
@@ -1073,49 +1439,59 @@
             new Key<Integer>("android.tonemap.mode", int.class);
 
     /**
-     * <p>
-     * This LED is nominally used to indicate to the user
+     * <p>This LED is nominally used to indicate to the user
      * that the camera is powered on and may be streaming images back to the
      * Application Processor. In certain rare circumstances, the OS may
      * disable this when video is processed locally and not transmitted to
-     * any untrusted applications.
-     * </p><p>
-     * In particular, the LED *must* always be on when the data could be
-     * transmitted off the device. The LED *should* always be on whenever
-     * data is stored locally on the device.
-     * </p><p>
-     * The LED *may* be off if a trusted application is using the data that
-     * doesn't violate the above rules.
-     * </p>
-     *
+     * any untrusted applications.</p>
+     * <p>In particular, the LED <em>must</em> always be on when the data could be
+     * transmitted off the device. The LED <em>should</em> always be on whenever
+     * data is stored locally on the device.</p>
+     * <p>The LED <em>may</em> be off if a trusted application is using the data that
+     * doesn't violate the above rules.</p>
      * @hide
      */
     public static final Key<Boolean> LED_TRANSMIT =
             new Key<Boolean>("android.led.transmit", boolean.class);
 
     /**
-     * <p>
-     * Whether black-level compensation is locked
-     * to its current values, or is free to vary
-     * </p>
-     * <p>
-     * When set to ON, the values used for black-level
-     * compensation must not change until the lock is set to
-     * OFF
-     * </p><p>
-     * Since changes to certain capture parameters (such as
+     * <p>Whether black-level compensation is locked
+     * to its current values, or is free to vary.</p>
+     * <p>When set to ON, the values used for black-level
+     * compensation will not change until the lock is set to
+     * OFF.</p>
+     * <p>Since changes to certain capture parameters (such as
      * exposure time) may require resetting of black level
-     * compensation, the HAL must report whether setting the
-     * black level lock was successful in the output result
-     * metadata.
-     * </p><p>
-     * The black level locking must happen at the sensor, and not at the ISP.
-     * If for some reason black level locking is no longer legal (for example,
-     * the analog gain has changed, which forces black levels to be
-     * recalculated), then the HAL is free to override this request (and it
-     * must report 'OFF' when this does happen) until the next time locking
-     * is legal again.
-     * </p>
+     * compensation, the camera device must report whether setting
+     * the black level lock was successful in the output result
+     * metadata.</p>
+     * <p>For example, if a sequence of requests is as follows:</p>
+     * <ul>
+     * <li>Request 1: Exposure = 10ms, Black level lock = OFF</li>
+     * <li>Request 2: Exposure = 10ms, Black level lock = ON</li>
+     * <li>Request 3: Exposure = 10ms, Black level lock = ON</li>
+     * <li>Request 4: Exposure = 20ms, Black level lock = ON</li>
+     * <li>Request 5: Exposure = 20ms, Black level lock = ON</li>
+     * <li>Request 6: Exposure = 20ms, Black level lock = ON</li>
+     * </ul>
+     * <p>And the exposure change in Request 4 requires the camera
+     * device to reset the black level offsets, then the output
+     * result metadata is expected to be:</p>
+     * <ul>
+     * <li>Result 1: Exposure = 10ms, Black level lock = OFF</li>
+     * <li>Result 2: Exposure = 10ms, Black level lock = ON</li>
+     * <li>Result 3: Exposure = 10ms, Black level lock = ON</li>
+     * <li>Result 4: Exposure = 20ms, Black level lock = OFF</li>
+     * <li>Result 5: Exposure = 20ms, Black level lock = ON</li>
+     * <li>Result 6: Exposure = 20ms, Black level lock = ON</li>
+     * </ul>
+     * <p>This indicates to the application that on frame 4, black
+     * levels were reset due to exposure value changes, and pixel
+     * values may not be consistent across captures.</p>
+     * <p>The camera device will maintain the lock to the extent
+     * possible, only overriding the lock to OFF when changes to
+     * other request parameters require a black level recalculation
+     * or reset.</p>
      */
     public static final Key<Boolean> BLACK_LEVEL_LOCK =
             new Key<Boolean>("android.blackLevel.lock", boolean.class);
diff --git a/core/java/android/hardware/camera2/CaptureResult.java b/core/java/android/hardware/camera2/CaptureResult.java
index 535b963..d8981c8 100644
--- a/core/java/android/hardware/camera2/CaptureResult.java
+++ b/core/java/android/hardware/camera2/CaptureResult.java
@@ -16,8 +16,6 @@
 
 package android.hardware.camera2;
 
-import android.graphics.Point;
-import android.graphics.Rect;
 import android.hardware.camera2.impl.CameraMetadataNative;
 
 /**
@@ -124,104 +122,308 @@
      * modify the comment blocks at the start or end.
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~*/
 
+
     /**
-     * <p>
-     * A color transform matrix to use to transform
-     * from sensor RGB color space to output linear sRGB color space
-     * </p>
-     * <p>
-     * This matrix is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * <p>A color transform matrix to use to transform
+     * from sensor RGB color space to output linear sRGB color space</p>
+     * <p>This matrix is either set by the camera device when the request
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.
-     * </p><p>
-     * In the latter case, the HAL may round the matrix to account
-     * for precision issues; the final rounded matrix should be
-     * reported back in this matrix result metadata.
-     * </p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
+     * <p>In the latter case, the camera device may round the matrix to account
+     * for precision issues; the final rounded matrix should be reported back
+     * in this matrix result metadata. The transform should keep the magnitude
+     * of the output color values within <code>[0, 1.0]</code> (assuming input color
+     * values is within the normalized range <code>[0, 1.0]</code>), or clipping may occur.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<Rational[]> COLOR_CORRECTION_TRANSFORM =
             new Key<Rational[]>("android.colorCorrection.transform", Rational[].class);
 
     /**
-     * <p>
-     * Gains applying to Bayer color channels for
-     * white-balance
-     * </p>
-     * <p>
-     * The 4-channel white-balance gains are defined in
-     * the order of [R G_even G_odd B], where G_even is the gain
-     * for green pixels on even rows of the output, and G_odd
-     * is the gain for greenpixels on the odd rows. if a HAL
+     * <p>Gains applying to Bayer raw color channels for
+     * white-balance.</p>
+     * <p>The 4-channel white-balance gains are defined in
+     * the order of <code>[R G_even G_odd B]</code>, where <code>G_even</code> is the gain
+     * for green pixels on even rows of the output, and <code>G_odd</code>
+     * is the gain for green pixels on the odd rows. if a HAL
      * does not support a separate gain for even/odd green channels,
-     * it should use the G_even value,and write G_odd equal to
-     * G_even in the output result metadata.
-     * </p><p>
-     * This array is either set by HAL when the request
-     * android.colorCorrection.mode is not TRANSFORM_MATRIX, or
+     * it should use the <code>G_even</code> value, and write <code>G_odd</code> equal to
+     * <code>G_even</code> in the output result metadata.</p>
+     * <p>This array is either set by the camera device when the request
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is not TRANSFORM_MATRIX, or
      * directly by the application in the request when the
-     * android.colorCorrection.mode is TRANSFORM_MATRIX.
-     * </p><p>
-     * The ouput should be the gains actually applied by the HAL to
-     * the current frame.
-     * </p>
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} is TRANSFORM_MATRIX.</p>
+     * <p>The output should be the gains actually applied by the camera device to
+     * the current frame.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
      */
     public static final Key<float[]> COLOR_CORRECTION_GAINS =
             new Key<float[]>("android.colorCorrection.gains", float[].class);
 
     /**
-     * <p>
-     * The ID sent with the latest
-     * CAMERA2_TRIGGER_PRECAPTURE_METERING call
-     * </p>
-     * <p>
-     * Must be 0 if no
+     * <p>The ID sent with the latest
+     * CAMERA2_TRIGGER_PRECAPTURE_METERING call</p>
+     * <p>Must be 0 if no
      * CAMERA2_TRIGGER_PRECAPTURE_METERING trigger received yet
      * by HAL. Always updated even if AE algorithm ignores the
-     * trigger
-     * </p>
-     *
+     * trigger</p>
      * @hide
      */
     public static final Key<Integer> CONTROL_AE_PRECAPTURE_ID =
             new Key<Integer>("android.control.aePrecaptureId", int.class);
 
     /**
-     * <p>
-     * List of areas to use for
-     * metering
-     * </p>
-     * <p>
-     * Each area is a rectangle plus weight: xmin, ymin,
-     * xmax, ymax, weight. The rectangle is defined inclusive of the
-     * specified coordinates.
-     * </p><p>
-     * The coordinate system is based on the active pixel array,
+     * <p>The desired mode for the camera device's
+     * auto-exposure routine.</p>
+     * <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is
+     * AUTO.</p>
+     * <p>When set to any of the ON modes, the camera device's
+     * auto-exposure routine is enabled, overriding the
+     * application's selected exposure time, sensor sensitivity,
+     * and frame duration ({@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and
+     * {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration}). If one of the FLASH modes
+     * is selected, the camera device's flash unit controls are
+     * also overridden.</p>
+     * <p>The FLASH modes are only available if the camera device
+     * has a flash unit ({@link CameraCharacteristics#FLASH_INFO_AVAILABLE android.flash.info.available} is <code>true</code>).</p>
+     * <p>If flash TORCH mode is desired, this field must be set to
+     * ON or OFF, and {@link CaptureRequest#FLASH_MODE android.flash.mode} set to TORCH.</p>
+     * <p>When set to any of the ON modes, the values chosen by the
+     * camera device auto-exposure routine for the overridden
+     * fields for a given capture will be available in its
+     * CaptureResult.</p>
+     *
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CameraCharacteristics#FLASH_INFO_AVAILABLE
+     * @see CaptureRequest#FLASH_MODE
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
+     * @see #CONTROL_AE_MODE_OFF
+     * @see #CONTROL_AE_MODE_ON
+     * @see #CONTROL_AE_MODE_ON_AUTO_FLASH
+     * @see #CONTROL_AE_MODE_ON_ALWAYS_FLASH
+     * @see #CONTROL_AE_MODE_ON_AUTO_FLASH_REDEYE
+     */
+    public static final Key<Integer> CONTROL_AE_MODE =
+            new Key<Integer>("android.control.aeMode", int.class);
+
+    /**
+     * <p>List of areas to use for
+     * metering.</p>
+     * <p>Each area is a rectangle plus weight: xmin, ymin,
+     * xmax, ymax, weight. The rectangle is defined to be inclusive of the
+     * specified coordinates.</p>
+     * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
-     * should be nonnegative.
-     * </p><p>
-     * If all regions have 0 weight, then no specific metering area
-     * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
-     * should ignore the sections outside the region and output the
-     * used sections in the frame metadata
-     * </p>
+     * should be nonnegative.</p>
+     * <p>If all regions have 0 weight, then no specific metering area
+     * needs to be used by the camera device. If the metering region is
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the camera device
+     * will ignore the sections outside the region and output the
+     * used sections in the frame metadata.</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      */
     public static final Key<int[]> CONTROL_AE_REGIONS =
             new Key<int[]>("android.control.aeRegions", int[].class);
 
     /**
-     * <p>
-     * Current state of AE algorithm
-     * </p>
-     * <p>
-     * Whenever the AE algorithm state changes, a
-     * MSG_AUTOEXPOSURE notification must be send if a
-     * notification callback is registered.
-     * </p>
+     * <p>Current state of AE algorithm</p>
+     * <p>Switching between or enabling AE modes ({@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode}) always
+     * resets the AE state to INACTIVE. Similarly, switching between {@link CaptureRequest#CONTROL_MODE android.control.mode},
+     * or {@link CaptureRequest#CONTROL_SCENE_MODE android.control.sceneMode} if <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code> resets all
+     * the algorithm states to INACTIVE.</p>
+     * <p>The camera device can do several state transitions between two results, if it is
+     * allowed by the state transition table. For example: INACTIVE may never actually be
+     * seen in a result.</p>
+     * <p>The state in the result is the state for this image (in sync with this image): if
+     * AE state becomes CONVERGED, then the image data associated with this result should
+     * be good to use.</p>
+     * <p>Below are state transition tables for different AE modes.</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center"></td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device auto exposure algorithm is disabled</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>When {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is AE_MODE_ON_*:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device initiates AE scan</td>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Values changing</td>
+     * </tr>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Values locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Camera device finishes AE scan</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Good values, not changing</td>
+     * </tr>
+     * <tr>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Camera device finishes AE scan</td>
+     * <td align="center">FLASH_REQUIRED</td>
+     * <td align="center">Converged but too dark w/o flash</td>
+     * </tr>
+     * <tr>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Values locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Camera device initiates AE scan</td>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Values changing</td>
+     * </tr>
+     * <tr>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Values locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FLASH_REQUIRED</td>
+     * <td align="center">Camera device initiates AE scan</td>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Values changing</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FLASH_REQUIRED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Values locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">LOCKED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is OFF</td>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Values not good after unlock</td>
+     * </tr>
+     * <tr>
+     * <td align="center">LOCKED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is OFF</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Values good after unlock</td>
+     * </tr>
+     * <tr>
+     * <td align="center">LOCKED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is OFF</td>
+     * <td align="center">FLASH_REQUIRED</td>
+     * <td align="center">Exposure good, but too dark</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PRECAPTURE</td>
+     * <td align="center">Sequence done. {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is OFF</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Ready for high-quality capture</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PRECAPTURE</td>
+     * <td align="center">Sequence done. {@link CaptureRequest#CONTROL_AE_LOCK android.control.aeLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Ready for high-quality capture</td>
+     * </tr>
+     * <tr>
+     * <td align="center">Any state</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger} is START</td>
+     * <td align="center">PRECAPTURE</td>
+     * <td align="center">Start AE precapture metering sequence</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>For the above table, the camera device may skip reporting any state changes that happen
+     * without application intervention (i.e. mode switch, trigger, locking). Any state that
+     * can be skipped in that manner is called a transient state.</p>
+     * <p>For example, for above AE modes (AE_MODE_ON_*), in addition to the state transitions
+     * listed in above table, it is also legal for the camera device to skip one or more
+     * transient states between two results. See below table for examples:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device finished AE scan</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Values are already good, transient states are skipped by camera device.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">Any state</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger} is START, sequence done</td>
+     * <td align="center">FLASH_REQUIRED</td>
+     * <td align="center">Converged but too dark w/o flash after a precapture sequence, transient states are skipped by camera device.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">Any state</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger} is START, sequence done</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Converged after a precapture sequence, transient states are skipped by camera device.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Camera device finished AE scan</td>
+     * <td align="center">FLASH_REQUIRED</td>
+     * <td align="center">Converged but too dark w/o flash after a new scan, transient states are skipped by camera device.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FLASH_REQUIRED</td>
+     * <td align="center">Camera device finished AE scan</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Converged after a new scan, transient states are skipped by camera device.</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     *
+     * @see CaptureRequest#CONTROL_AE_LOCK
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CaptureRequest#CONTROL_SCENE_MODE
      * @see #CONTROL_AE_STATE_INACTIVE
      * @see #CONTROL_AE_STATE_SEARCHING
      * @see #CONTROL_AE_STATE_CONVERGED
@@ -233,10 +435,17 @@
             new Key<Integer>("android.control.aeState", int.class);
 
     /**
-     * <p>
-     * Whether AF is currently enabled, and what
-     * mode it is set to
-     * </p>
+     * <p>Whether AF is currently enabled, and what
+     * mode it is set to</p>
+     * <p>Only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} = AUTO and the lens is not fixed focus
+     * (i.e. <code>{@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} &gt; 0</code>).</p>
+     * <p>If the lens is controlled by the camera device auto-focus algorithm,
+     * the camera device will report the current AF status in {@link CaptureResult#CONTROL_AF_STATE android.control.afState}
+     * in result metadata.</p>
+     *
+     * @see CaptureResult#CONTROL_AF_STATE
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
      * @see #CONTROL_AF_MODE_OFF
      * @see #CONTROL_AF_MODE_AUTO
      * @see #CONTROL_AF_MODE_MACRO
@@ -248,41 +457,415 @@
             new Key<Integer>("android.control.afMode", int.class);
 
     /**
-     * <p>
-     * List of areas to use for focus
-     * estimation
-     * </p>
-     * <p>
-     * Each area is a rectangle plus weight: xmin, ymin,
-     * xmax, ymax, weight. The rectangle is defined inclusive of the
-     * specified coordinates.
-     * </p><p>
-     * The coordinate system is based on the active pixel array,
+     * <p>List of areas to use for focus
+     * estimation.</p>
+     * <p>Each area is a rectangle plus weight: xmin, ymin,
+     * xmax, ymax, weight. The rectangle is defined to be inclusive of the
+     * specified coordinates.</p>
+     * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
-     * should be nonnegative.
-     * </p><p>
-     * If all regions have 0 weight, then no specific focus area
-     * needs to be used by the HAL. If the focusing region is
-     * outside the current android.scaler.cropRegion, the HAL
-     * should ignore the sections outside the region and output the
-     * used sections in the frame metadata
-     * </p>
+     * should be nonnegative.</p>
+     * <p>If all regions have 0 weight, then no specific focus area
+     * needs to be used by the camera device. If the focusing region is
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the camera device
+     * will ignore the sections outside the region and output the
+     * used sections in the frame metadata.</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      */
     public static final Key<int[]> CONTROL_AF_REGIONS =
             new Key<int[]>("android.control.afRegions", int[].class);
 
     /**
-     * <p>
-     * Current state of AF algorithm
-     * </p>
-     * <p>
-     * Whenever the AF algorithm state changes, a
-     * MSG_AUTOFOCUS notification must be send if a notification
-     * callback is registered.
-     * </p>
+     * <p>Current state of AF algorithm.</p>
+     * <p>Switching between or enabling AF modes ({@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}) always
+     * resets the AF state to INACTIVE. Similarly, switching between {@link CaptureRequest#CONTROL_MODE android.control.mode},
+     * or {@link CaptureRequest#CONTROL_SCENE_MODE android.control.sceneMode} if <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code> resets all
+     * the algorithm states to INACTIVE.</p>
+     * <p>The camera device can do several state transitions between two results, if it is
+     * allowed by the state transition table. For example: INACTIVE may never actually be
+     * seen in a result.</p>
+     * <p>The state in the result is the state for this image (in sync with this image): if
+     * AF state becomes FOCUSED, then the image data associated with this result should
+     * be sharp.</p>
+     * <p>Below are state transition tables for different AF modes.</p>
+     * <p>When {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} is AF_MODE_OFF or AF_MODE_EDOF:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center"></td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Never changes</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>When {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} is AF_MODE_AUTO or AF_MODE_MACRO:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">ACTIVE_SCAN</td>
+     * <td align="center">Start AF sweep, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">ACTIVE_SCAN</td>
+     * <td align="center">AF sweep done</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Focused, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">ACTIVE_SCAN</td>
+     * <td align="center">AF sweep done</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">Not focused, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">ACTIVE_SCAN</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Cancel/reset AF, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Cancel/reset AF</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">ACTIVE_SCAN</td>
+     * <td align="center">Start new sweep, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Cancel/reset AF</td>
+     * </tr>
+     * <tr>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">ACTIVE_SCAN</td>
+     * <td align="center">Start new sweep, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">Any state</td>
+     * <td align="center">Mode change</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center"></td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>For the above table, the camera device may skip reporting any state changes that happen
+     * without application intervention (i.e. mode switch, trigger, locking). Any state that
+     * can be skipped in that manner is called a transient state.</p>
+     * <p>For example, for these AF modes (AF_MODE_AUTO and AF_MODE_MACRO), in addition to the
+     * state transitions listed in above table, it is also legal for the camera device to skip
+     * one or more transient states between two results. See below table for examples:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Focus is already good or good after a scan, lens is now locked.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">Focus failed after a scan, lens is now locked.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Focus is already good or good after a scan, lens is now locked.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Focus is good after a scan, lens is not locked.</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>When {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} is AF_MODE_CONTINUOUS_VIDEO:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device initiates new scan</td>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Start AF scan, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF state query, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Camera device completes current scan</td>
+     * <td align="center">PASSIVE_FOCUSED</td>
+     * <td align="center">End AF scan, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Camera device fails current scan</td>
+     * <td align="center">PASSIVE_UNFOCUSED</td>
+     * <td align="center">End AF scan, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Immediate trans. If focus is good, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">Immediate trans. if focus is bad, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Reset lens position, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_FOCUSED</td>
+     * <td align="center">Camera device initiates new scan</td>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Start AF scan, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_UNFOCUSED</td>
+     * <td align="center">Camera device initiates new scan</td>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Start AF scan, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_FOCUSED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Immediate trans. Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_UNFOCUSED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">Immediate trans. Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">No effect</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Restart AF scan</td>
+     * </tr>
+     * <tr>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">No effect</td>
+     * </tr>
+     * <tr>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Restart AF scan</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>When {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode} is AF_MODE_CONTINUOUS_PICTURE:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device initiates new scan</td>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Start AF scan, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF state query, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Camera device completes current scan</td>
+     * <td align="center">PASSIVE_FOCUSED</td>
+     * <td align="center">End AF scan, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Camera device fails current scan</td>
+     * <td align="center">PASSIVE_UNFOCUSED</td>
+     * <td align="center">End AF scan, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Eventual trans. once focus good, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">Eventual trans. if cannot focus, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Reset lens position, Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_FOCUSED</td>
+     * <td align="center">Camera device initiates new scan</td>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Start AF scan, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_UNFOCUSED</td>
+     * <td align="center">Camera device initiates new scan</td>
+     * <td align="center">PASSIVE_SCAN</td>
+     * <td align="center">Start AF scan, Lens now moving</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_FOCUSED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">Immediate trans. Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">PASSIVE_UNFOCUSED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">Immediate trans. Lens now locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">No effect</td>
+     * </tr>
+     * <tr>
+     * <td align="center">FOCUSED_LOCKED</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Restart AF scan</td>
+     * </tr>
+     * <tr>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF_TRIGGER</td>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">No effect</td>
+     * </tr>
+     * <tr>
+     * <td align="center">NOT_FOCUSED_LOCKED</td>
+     * <td align="center">AF_CANCEL</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Restart AF scan</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>When switch between AF_MODE_CONTINUOUS_* (CAF modes) and AF_MODE_AUTO/AF_MODE_MACRO
+     * (AUTO modes), the initial INACTIVE or PASSIVE_SCAN states may be skipped by the
+     * camera device. When a trigger is included in a mode switch request, the trigger
+     * will be evaluated in the context of the new mode in the request.
+     * See below table for examples:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">any state</td>
+     * <td align="center">CAF--&gt;AUTO mode switch</td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Mode switch without trigger, initial state must be INACTIVE</td>
+     * </tr>
+     * <tr>
+     * <td align="center">any state</td>
+     * <td align="center">CAF--&gt;AUTO mode switch with AF_TRIGGER</td>
+     * <td align="center">trigger-reachable states from INACTIVE</td>
+     * <td align="center">Mode switch with trigger, INACTIVE is skipped</td>
+     * </tr>
+     * <tr>
+     * <td align="center">any state</td>
+     * <td align="center">AUTO--&gt;CAF mode switch</td>
+     * <td align="center">passively reachable states from INACTIVE</td>
+     * <td align="center">Mode switch without trigger, passive transient state is skipped</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     *
+     * @see CaptureRequest#CONTROL_AF_MODE
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CaptureRequest#CONTROL_SCENE_MODE
      * @see #CONTROL_AF_STATE_INACTIVE
      * @see #CONTROL_AF_STATE_PASSIVE_SCAN
      * @see #CONTROL_AF_STATE_PASSIVE_FOCUSED
@@ -295,30 +878,37 @@
             new Key<Integer>("android.control.afState", int.class);
 
     /**
-     * <p>
-     * The ID sent with the latest
-     * CAMERA2_TRIGGER_AUTOFOCUS call
-     * </p>
-     * <p>
-     * Must be 0 if no CAMERA2_TRIGGER_AUTOFOCUS trigger
+     * <p>The ID sent with the latest
+     * CAMERA2_TRIGGER_AUTOFOCUS call</p>
+     * <p>Must be 0 if no CAMERA2_TRIGGER_AUTOFOCUS trigger
      * received yet by HAL. Always updated even if AF algorithm
-     * ignores the trigger
-     * </p>
-     *
+     * ignores the trigger</p>
      * @hide
      */
     public static final Key<Integer> CONTROL_AF_TRIGGER_ID =
             new Key<Integer>("android.control.afTriggerId", int.class);
 
     /**
-     * <p>
-     * Whether AWB is currently setting the color
+     * <p>Whether AWB is currently setting the color
      * transform fields, and what its illumination target
-     * is
-     * </p>
-     * <p>
-     * [BC - AWB lock,AWB modes]
-     * </p>
+     * is.</p>
+     * <p>This control is only effective if {@link CaptureRequest#CONTROL_MODE android.control.mode} is AUTO.</p>
+     * <p>When set to the ON mode, the camera device's auto white balance
+     * routine is enabled, overriding the application's selected
+     * {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} and
+     * {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
+     * <p>When set to the OFF mode, the camera device's auto white balance
+     * routine is disabled. The application manually controls the white
+     * balance by {@link CaptureRequest#COLOR_CORRECTION_TRANSFORM android.colorCorrection.transform}, {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains}
+     * and {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode}.</p>
+     * <p>When set to any other modes, the camera device's auto white balance
+     * routine is disabled. The camera device uses each particular illumination
+     * target for white balance adjustment.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
+     * @see CaptureRequest#COLOR_CORRECTION_TRANSFORM
+     * @see CaptureRequest#CONTROL_MODE
      * @see #CONTROL_AWB_MODE_OFF
      * @see #CONTROL_AWB_MODE_AUTO
      * @see #CONTROL_AWB_MODE_INCANDESCENT
@@ -333,43 +923,152 @@
             new Key<Integer>("android.control.awbMode", int.class);
 
     /**
-     * <p>
-     * List of areas to use for illuminant
-     * estimation
-     * </p>
-     * <p>
-     * Only used in AUTO mode.
-     * </p><p>
-     * Each area is a rectangle plus weight: xmin, ymin,
-     * xmax, ymax, weight. The rectangle is defined inclusive of the
-     * specified coordinates.
-     * </p><p>
-     * The coordinate system is based on the active pixel array,
+     * <p>List of areas to use for illuminant
+     * estimation.</p>
+     * <p>Only used in AUTO mode.</p>
+     * <p>Each area is a rectangle plus weight: xmin, ymin,
+     * xmax, ymax, weight. The rectangle is defined to be inclusive of the
+     * specified coordinates.</p>
+     * <p>The coordinate system is based on the active pixel array,
      * with (0,0) being the top-left pixel in the active pixel array, and
-     * (android.sensor.info.activeArraySize.width - 1,
-     * android.sensor.info.activeArraySize.height - 1) being the
+     * ({@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.width - 1,
+     * {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.height - 1) being the
      * bottom-right pixel in the active pixel array. The weight
-     * should be nonnegative.
-     * </p><p>
-     * If all regions have 0 weight, then no specific metering area
-     * needs to be used by the HAL. If the metering region is
-     * outside the current android.scaler.cropRegion, the HAL
-     * should ignore the sections outside the region and output the
-     * used sections in the frame metadata
-     * </p>
+     * should be nonnegative.</p>
+     * <p>If all regions have 0 weight, then no specific auto-white balance (AWB) area
+     * needs to be used by the camera device. If the AWB region is
+     * outside the current {@link CaptureRequest#SCALER_CROP_REGION android.scaler.cropRegion}, the camera device
+     * will ignore the sections outside the region and output the
+     * used sections in the frame metadata.</p>
+     *
+     * @see CaptureRequest#SCALER_CROP_REGION
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
      */
     public static final Key<int[]> CONTROL_AWB_REGIONS =
             new Key<int[]>("android.control.awbRegions", int[].class);
 
     /**
-     * <p>
-     * Current state of AWB algorithm
-     * </p>
-     * <p>
-     * Whenever the AWB algorithm state changes, a
-     * MSG_AUTOWHITEBALANCE notification must be send if a
-     * notification callback is registered.
-     * </p>
+     * <p>Current state of AWB algorithm</p>
+     * <p>Switching between or enabling AWB modes ({@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode}) always
+     * resets the AWB state to INACTIVE. Similarly, switching between {@link CaptureRequest#CONTROL_MODE android.control.mode},
+     * or {@link CaptureRequest#CONTROL_SCENE_MODE android.control.sceneMode} if <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == USE_SCENE_MODE</code> resets all
+     * the algorithm states to INACTIVE.</p>
+     * <p>The camera device can do several state transitions between two results, if it is
+     * allowed by the state transition table. So INACTIVE may never actually be seen in
+     * a result.</p>
+     * <p>The state in the result is the state for this image (in sync with this image): if
+     * AWB state becomes CONVERGED, then the image data associated with this result should
+     * be good to use.</p>
+     * <p>Below are state transition tables for different AWB modes.</p>
+     * <p>When <code>{@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} != AWB_MODE_AUTO</code>:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center"></td>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device auto white balance algorithm is disabled</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>When {@link CaptureRequest#CONTROL_AWB_MODE android.control.awbMode} is AWB_MODE_AUTO:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device initiates AWB scan</td>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Values changing</td>
+     * </tr>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Values locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Camera device finishes AWB scan</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Good values, not changing</td>
+     * </tr>
+     * <tr>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Values locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Camera device initiates AWB scan</td>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Values changing</td>
+     * </tr>
+     * <tr>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock} is ON</td>
+     * <td align="center">LOCKED</td>
+     * <td align="center">Values locked</td>
+     * </tr>
+     * <tr>
+     * <td align="center">LOCKED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock} is OFF</td>
+     * <td align="center">SEARCHING</td>
+     * <td align="center">Values not good after unlock</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     * <p>For the above table, the camera device may skip reporting any state changes that happen
+     * without application intervention (i.e. mode switch, trigger, locking). Any state that
+     * can be skipped in that manner is called a transient state.</p>
+     * <p>For example, for this AWB mode (AWB_MODE_AUTO), in addition to the state transitions
+     * listed in above table, it is also legal for the camera device to skip one or more
+     * transient states between two results. See below table for examples:</p>
+     * <table>
+     * <thead>
+     * <tr>
+     * <th align="center">State</th>
+     * <th align="center">Transition Cause</th>
+     * <th align="center">New State</th>
+     * <th align="center">Notes</th>
+     * </tr>
+     * </thead>
+     * <tbody>
+     * <tr>
+     * <td align="center">INACTIVE</td>
+     * <td align="center">Camera device finished AWB scan</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Values are already good, transient states are skipped by camera device.</td>
+     * </tr>
+     * <tr>
+     * <td align="center">LOCKED</td>
+     * <td align="center">{@link CaptureRequest#CONTROL_AWB_LOCK android.control.awbLock} is OFF</td>
+     * <td align="center">CONVERGED</td>
+     * <td align="center">Values good after unlock, transient states are skipped by camera device.</td>
+     * </tr>
+     * </tbody>
+     * </table>
+     *
+     * @see CaptureRequest#CONTROL_AWB_LOCK
+     * @see CaptureRequest#CONTROL_AWB_MODE
+     * @see CaptureRequest#CONTROL_MODE
+     * @see CaptureRequest#CONTROL_SCENE_MODE
      * @see #CONTROL_AWB_STATE_INACTIVE
      * @see #CONTROL_AWB_STATE_SEARCHING
      * @see #CONTROL_AWB_STATE_CONVERGED
@@ -379,22 +1078,46 @@
             new Key<Integer>("android.control.awbState", int.class);
 
     /**
-     * <p>
-     * Overall mode of 3A control
-     * routines
-     * </p>
+     * <p>Overall mode of 3A control
+     * routines.</p>
+     * <p>High-level 3A control. When set to OFF, all 3A control
+     * by the camera device is disabled. The application must set the fields for
+     * capture parameters itself.</p>
+     * <p>When set to AUTO, the individual algorithm controls in
+     * android.control.* are in effect, such as {@link CaptureRequest#CONTROL_AF_MODE android.control.afMode}.</p>
+     * <p>When set to USE_SCENE_MODE, the individual controls in
+     * android.control.* are mostly disabled, and the camera device implements
+     * one of the scene mode settings (such as ACTION, SUNSET, or PARTY)
+     * as it wishes. The camera device scene mode 3A settings are provided by
+     * android.control.sceneModeOverrides.</p>
+     * <p>When set to OFF_KEEP_STATE, it is similar to OFF mode, the only difference
+     * is that this frame will not be used by camera device background 3A statistics
+     * update, as if this frame is never captured. This mode can be used in the scenario
+     * where the application doesn't want a 3A manual control capture to affect
+     * the subsequent auto 3A capture results.</p>
+     *
+     * @see CaptureRequest#CONTROL_AF_MODE
      * @see #CONTROL_MODE_OFF
      * @see #CONTROL_MODE_AUTO
      * @see #CONTROL_MODE_USE_SCENE_MODE
+     * @see #CONTROL_MODE_OFF_KEEP_STATE
      */
     public static final Key<Integer> CONTROL_MODE =
             new Key<Integer>("android.control.mode", int.class);
 
     /**
-     * <p>
-     * Operation mode for edge
-     * enhancement
-     * </p>
+     * <p>Operation mode for edge
+     * enhancement.</p>
+     * <p>Edge/sharpness/detail enhancement. OFF means no
+     * enhancement will be applied by the camera device.</p>
+     * <p>This must be set to one of the modes listed in {@link CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES android.edge.availableEdgeModes}.</p>
+     * <p>FAST/HIGH_QUALITY both mean camera device determined enhancement
+     * will be applied. HIGH_QUALITY mode indicates that the
+     * camera device will use the highest-quality enhancement algorithms,
+     * even if it slows down capture rate. FAST means the camera device will
+     * not slow down capture rate when applying edge enhancement.</p>
+     *
+     * @see CameraCharacteristics#EDGE_AVAILABLE_EDGE_MODES
      * @see #EDGE_MODE_OFF
      * @see #EDGE_MODE_FAST
      * @see #EDGE_MODE_HIGH_QUALITY
@@ -403,9 +1126,25 @@
             new Key<Integer>("android.edge.mode", int.class);
 
     /**
-     * <p>
-     * Select flash operation mode
-     * </p>
+     * <p>The desired mode for for the camera device's flash control.</p>
+     * <p>This control is only effective when flash unit is available
+     * (<code>{@link CameraCharacteristics#FLASH_INFO_AVAILABLE android.flash.info.available} == true</code>).</p>
+     * <p>When this control is used, the {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} must be set to ON or OFF.
+     * Otherwise, the camera device auto-exposure related flash control (ON_AUTO_FLASH,
+     * ON_ALWAYS_FLASH, or ON_AUTO_FLASH_REDEYE) will override this control.</p>
+     * <p>When set to OFF, the camera device will not fire flash for this capture.</p>
+     * <p>When set to SINGLE, the camera device will fire flash regardless of the camera
+     * device's auto-exposure routine's result. When used in still capture case, this
+     * control should be used along with AE precapture metering sequence
+     * ({@link CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER android.control.aePrecaptureTrigger}), otherwise, the image may be incorrectly exposed.</p>
+     * <p>When set to TORCH, the flash will be on continuously. This mode can be used
+     * for use cases such as preview, auto-focus assist, still capture, or video recording.</p>
+     * <p>The flash status will be reported by {@link CaptureResult#FLASH_STATE android.flash.state} in the capture result metadata.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_AE_PRECAPTURE_TRIGGER
+     * @see CameraCharacteristics#FLASH_INFO_AVAILABLE
+     * @see CaptureResult#FLASH_STATE
      * @see #FLASH_MODE_OFF
      * @see #FLASH_MODE_SINGLE
      * @see #FLASH_MODE_TORCH
@@ -414,153 +1153,188 @@
             new Key<Integer>("android.flash.mode", int.class);
 
     /**
-     * <p>
-     * Current state of the flash
-     * unit
-     * </p>
+     * <p>Current state of the flash
+     * unit.</p>
+     * <p>When the camera device doesn't have flash unit
+     * (i.e. <code>{@link CameraCharacteristics#FLASH_INFO_AVAILABLE android.flash.info.available} == false</code>), this state will always be UNAVAILABLE.
+     * Other states indicate the current flash status.</p>
+     *
+     * @see CameraCharacteristics#FLASH_INFO_AVAILABLE
      * @see #FLASH_STATE_UNAVAILABLE
      * @see #FLASH_STATE_CHARGING
      * @see #FLASH_STATE_READY
      * @see #FLASH_STATE_FIRED
+     * @see #FLASH_STATE_PARTIAL
      */
     public static final Key<Integer> FLASH_STATE =
             new Key<Integer>("android.flash.state", int.class);
 
     /**
-     * <p>
-     * GPS coordinates to include in output JPEG
-     * EXIF
-     * </p>
+     * <p>Set operational mode for hot pixel correction.</p>
+     * <p>Valid modes for this camera device are listed in
+     * {@link CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES android.hotPixel.availableHotPixelModes}.</p>
+     * <p>Hotpixel correction interpolates out, or otherwise removes, pixels
+     * that do not accurately encode the incoming light (i.e. pixels that
+     * are stuck at an arbitrary value).</p>
+     *
+     * @see CameraCharacteristics#HOT_PIXEL_AVAILABLE_HOT_PIXEL_MODES
+     * @see #HOT_PIXEL_MODE_OFF
+     * @see #HOT_PIXEL_MODE_FAST
+     * @see #HOT_PIXEL_MODE_HIGH_QUALITY
+     */
+    public static final Key<Integer> HOT_PIXEL_MODE =
+            new Key<Integer>("android.hotPixel.mode", int.class);
+
+    /**
+     * <p>GPS coordinates to include in output JPEG
+     * EXIF</p>
      */
     public static final Key<double[]> JPEG_GPS_COORDINATES =
             new Key<double[]>("android.jpeg.gpsCoordinates", double[].class);
 
     /**
-     * <p>
-     * 32 characters describing GPS algorithm to
-     * include in EXIF
-     * </p>
+     * <p>32 characters describing GPS algorithm to
+     * include in EXIF</p>
      */
     public static final Key<String> JPEG_GPS_PROCESSING_METHOD =
             new Key<String>("android.jpeg.gpsProcessingMethod", String.class);
 
     /**
-     * <p>
-     * Time GPS fix was made to include in
-     * EXIF
-     * </p>
+     * <p>Time GPS fix was made to include in
+     * EXIF</p>
      */
     public static final Key<Long> JPEG_GPS_TIMESTAMP =
             new Key<Long>("android.jpeg.gpsTimestamp", long.class);
 
     /**
-     * <p>
-     * Orientation of JPEG image to
-     * write
-     * </p>
+     * <p>Orientation of JPEG image to
+     * write</p>
      */
     public static final Key<Integer> JPEG_ORIENTATION =
             new Key<Integer>("android.jpeg.orientation", int.class);
 
     /**
-     * <p>
-     * Compression quality of the final JPEG
-     * image
-     * </p>
-     * <p>
-     * 85-95 is typical usage range
-     * </p>
+     * <p>Compression quality of the final JPEG
+     * image</p>
+     * <p>85-95 is typical usage range</p>
      */
     public static final Key<Byte> JPEG_QUALITY =
             new Key<Byte>("android.jpeg.quality", byte.class);
 
     /**
-     * <p>
-     * Compression quality of JPEG
-     * thumbnail
-     * </p>
+     * <p>Compression quality of JPEG
+     * thumbnail</p>
      */
     public static final Key<Byte> JPEG_THUMBNAIL_QUALITY =
             new Key<Byte>("android.jpeg.thumbnailQuality", byte.class);
 
     /**
-     * <p>
-     * Resolution of embedded JPEG
-     * thumbnail
-     * </p>
+     * <p>Resolution of embedded JPEG thumbnail</p>
+     * <p>When set to (0, 0) value, the JPEG EXIF will not contain thumbnail,
+     * but the captured JPEG will still be a valid image.</p>
+     * <p>When a jpeg image capture is issued, the thumbnail size selected should have
+     * the same aspect ratio as the jpeg image.</p>
      */
     public static final Key<android.hardware.camera2.Size> JPEG_THUMBNAIL_SIZE =
             new Key<android.hardware.camera2.Size>("android.jpeg.thumbnailSize", android.hardware.camera2.Size.class);
 
     /**
-     * <p>
-     * Size of the lens aperture
-     * </p>
-     * <p>
-     * Will not be supported on most devices. Can only
-     * pick from supported list
-     * </p>
+     * <p>The ratio of lens focal length to the effective
+     * aperture diameter.</p>
+     * <p>This will only be supported on the camera devices that
+     * have variable aperture lens. The aperture value can only be
+     * one of the values listed in {@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures}.</p>
+     * <p>When this is supported and {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is OFF,
+     * this can be set along with {@link CaptureRequest#SENSOR_EXPOSURE_TIME android.sensor.exposureTime},
+     * {@link CaptureRequest#SENSOR_SENSITIVITY android.sensor.sensitivity}, and {@link CaptureRequest#SENSOR_FRAME_DURATION android.sensor.frameDuration}
+     * to achieve manual exposure control.</p>
+     * <p>The requested aperture value may take several frames to reach the
+     * requested value; the camera device will report the current (intermediate)
+     * aperture size in capture result metadata while the aperture is changing.
+     * While the aperture is still changing, {@link CaptureResult#LENS_STATE android.lens.state} will be set to MOVING.</p>
+     * <p>When this is supported and {@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} is one of
+     * the ON modes, this will be overridden by the camera device
+     * auto-exposure algorithm, the overridden values are then provided
+     * back to the user in the corresponding result.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES
+     * @see CaptureResult#LENS_STATE
+     * @see CaptureRequest#SENSOR_EXPOSURE_TIME
+     * @see CaptureRequest#SENSOR_FRAME_DURATION
+     * @see CaptureRequest#SENSOR_SENSITIVITY
      */
     public static final Key<Float> LENS_APERTURE =
             new Key<Float>("android.lens.aperture", float.class);
 
     /**
-     * <p>
-     * State of lens neutral density
-     * filter(s)
-     * </p>
-     * <p>
-     * Will not be supported on most devices. Can only
-     * pick from supported list
-     * </p>
+     * <p>State of lens neutral density filter(s).</p>
+     * <p>This will not be supported on most camera devices. On devices
+     * where this is supported, this may only be set to one of the
+     * values included in {@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities}.</p>
+     * <p>Lens filters are typically used to lower the amount of light the
+     * sensor is exposed to (measured in steps of EV). As used here, an EV
+     * step is the standard logarithmic representation, which are
+     * non-negative, and inversely proportional to the amount of light
+     * hitting the sensor.  For example, setting this to 0 would result
+     * in no reduction of the incoming light, and setting this to 2 would
+     * mean that the filter is set to reduce incoming light by two stops
+     * (allowing 1/4 of the prior amount of light to the sensor).</p>
+     * <p>It may take several frames before the lens filter density changes
+     * to the requested value. While the filter density is still changing,
+     * {@link CaptureResult#LENS_STATE android.lens.state} will be set to MOVING.</p>
+     *
+     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES
+     * @see CaptureResult#LENS_STATE
      */
     public static final Key<Float> LENS_FILTER_DENSITY =
             new Key<Float>("android.lens.filterDensity", float.class);
 
     /**
-     * <p>
-     * Lens optical zoom setting
-     * </p>
-     * <p>
-     * Will not be supported on most devices.
-     * </p>
+     * <p>The current lens focal length; used for optical zoom.</p>
+     * <p>This setting controls the physical focal length of the camera
+     * device's lens. Changing the focal length changes the field of
+     * view of the camera device, and is usually used for optical zoom.</p>
+     * <p>Like {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} and {@link CaptureRequest#LENS_APERTURE android.lens.aperture}, this
+     * setting won't be applied instantaneously, and it may take several
+     * frames before the lens can change to the requested focal length.
+     * While the focal length is still changing, {@link CaptureResult#LENS_STATE android.lens.state} will
+     * be set to MOVING.</p>
+     * <p>This is expected not to be supported on most devices.</p>
+     *
+     * @see CaptureRequest#LENS_APERTURE
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
+     * @see CaptureResult#LENS_STATE
      */
     public static final Key<Float> LENS_FOCAL_LENGTH =
             new Key<Float>("android.lens.focalLength", float.class);
 
     /**
-     * <p>
-     * Distance to plane of sharpest focus,
-     * measured from frontmost surface of the lens
-     * </p>
-     * <p>
-     * Should be zero for fixed-focus cameras
-     * </p>
+     * <p>Distance to plane of sharpest focus,
+     * measured from frontmost surface of the lens</p>
+     * <p>Should be zero for fixed-focus cameras</p>
      */
     public static final Key<Float> LENS_FOCUS_DISTANCE =
             new Key<Float>("android.lens.focusDistance", float.class);
 
     /**
-     * <p>
-     * The range of scene distances that are in
-     * sharp focus (depth of field)
-     * </p>
-     * <p>
-     * If variable focus not supported, can still report
-     * fixed depth of field range
-     * </p>
+     * <p>The range of scene distances that are in
+     * sharp focus (depth of field)</p>
+     * <p>If variable focus not supported, can still report
+     * fixed depth of field range</p>
      */
     public static final Key<float[]> LENS_FOCUS_RANGE =
             new Key<float[]>("android.lens.focusRange", float[].class);
 
     /**
-     * <p>
-     * Whether optical image stabilization is
-     * enabled.
-     * </p>
-     * <p>
-     * Will not be supported on most devices.
-     * </p>
+     * <p>Sets whether the camera device uses optical image stabilization (OIS)
+     * when capturing images.</p>
+     * <p>OIS is used to compensate for motion blur due to small movements of
+     * the camera during capture. Unlike digital image stabilization, OIS makes
+     * use of mechanical elements to stabilize the camera sensor, and thus
+     * allows for longer exposure times before camera shake becomes
+     * apparent.</p>
+     * <p>This is not expected to be supported on most devices.</p>
      * @see #LENS_OPTICAL_STABILIZATION_MODE_OFF
      * @see #LENS_OPTICAL_STABILIZATION_MODE_ON
      */
@@ -568,9 +1342,35 @@
             new Key<Integer>("android.lens.opticalStabilizationMode", int.class);
 
     /**
-     * <p>
-     * Current lens status
-     * </p>
+     * <p>Current lens status.</p>
+     * <p>For lens parameters {@link CaptureRequest#LENS_FOCAL_LENGTH android.lens.focalLength}, {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance},
+     * {@link CaptureRequest#LENS_FILTER_DENSITY android.lens.filterDensity} and {@link CaptureRequest#LENS_APERTURE android.lens.aperture}, when changes are requested,
+     * they may take several frames to reach the requested values. This state indicates
+     * the current status of the lens parameters.</p>
+     * <p>When the state is STATIONARY, the lens parameters are not changing. This could be
+     * either because the parameters are all fixed, or because the lens has had enough
+     * time to reach the most recently-requested values.
+     * If all these lens parameters are not changable for a camera device, as listed below:</p>
+     * <ul>
+     * <li>Fixed focus (<code>{@link CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE android.lens.info.minimumFocusDistance} == 0</code>), which means
+     * {@link CaptureRequest#LENS_FOCUS_DISTANCE android.lens.focusDistance} parameter will always be 0.</li>
+     * <li>Fixed focal length ({@link CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS android.lens.info.availableFocalLengths} contains single value),
+     * which means the optical zoom is not supported.</li>
+     * <li>No ND filter ({@link CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES android.lens.info.availableFilterDensities} contains only 0).</li>
+     * <li>Fixed aperture ({@link CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES android.lens.info.availableApertures} contains single value).</li>
+     * </ul>
+     * <p>Then this state will always be STATIONARY.</p>
+     * <p>When the state is MOVING, it indicates that at least one of the lens parameters
+     * is changing.</p>
+     *
+     * @see CaptureRequest#LENS_APERTURE
+     * @see CaptureRequest#LENS_FILTER_DENSITY
+     * @see CaptureRequest#LENS_FOCAL_LENGTH
+     * @see CaptureRequest#LENS_FOCUS_DISTANCE
+     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_APERTURES
+     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_FILTER_DENSITIES
+     * @see CameraCharacteristics#LENS_INFO_AVAILABLE_FOCAL_LENGTHS
+     * @see CameraCharacteristics#LENS_INFO_MINIMUM_FOCUS_DISTANCE
      * @see #LENS_STATE_STATIONARY
      * @see #LENS_STATE_MOVING
      */
@@ -578,10 +1378,19 @@
             new Key<Integer>("android.lens.state", int.class);
 
     /**
-     * <p>
-     * Mode of operation for the noise reduction
-     * algorithm
-     * </p>
+     * <p>Mode of operation for the noise reduction
+     * algorithm</p>
+     * <p>Noise filtering control. OFF means no noise reduction
+     * will be applied by the camera device.</p>
+     * <p>This must be set to a valid mode in
+     * {@link CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES android.noiseReduction.availableNoiseReductionModes}.</p>
+     * <p>FAST/HIGH_QUALITY both mean camera device determined noise filtering
+     * will be applied. HIGH_QUALITY mode indicates that the camera device
+     * will use the highest-quality noise filtering algorithms,
+     * even if it slows down capture rate. FAST means the camera device should not
+     * slow down capture rate when applying noise filtering.</p>
+     *
+     * @see CameraCharacteristics#NOISE_REDUCTION_AVAILABLE_NOISE_REDUCTION_MODES
      * @see #NOISE_REDUCTION_MODE_OFF
      * @see #NOISE_REDUCTION_MODE_FAST
      * @see #NOISE_REDUCTION_MODE_HIGH_QUALITY
@@ -590,14 +1399,11 @@
             new Key<Integer>("android.noiseReduction.mode", int.class);
 
     /**
-     * <p>
-     * Whether a result given to the framework is the
+     * <p>Whether a result given to the framework is the
      * final one for the capture, or only a partial that contains a
      * subset of the full set of dynamic metadata
-     * values.
-     * </p>
-     * <p>
-     * The entries in the result metadata buffers for a
+     * values.</p>
+     * <p>The entries in the result metadata buffers for a
      * single capture may not overlap, except for this entry. The
      * FINAL buffers must retain FIFO ordering relative to the
      * requests that generate them, so the FINAL buffer for frame 3 must
@@ -605,68 +1411,64 @@
      * before the FINAL buffer for frame 4. PARTIAL buffers may be returned
      * in any order relative to other frames, but all PARTIAL buffers for a given
      * capture must arrive before the FINAL buffer for that capture. This entry may
-     * only be used by the HAL if quirks.usePartialResult is set to 1.
-     * </p>
-     *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
+     * only be used by the camera device if quirks.usePartialResult is set to 1.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
      * @hide
      */
     public static final Key<Boolean> QUIRKS_PARTIAL_RESULT =
             new Key<Boolean>("android.quirks.partialResult", boolean.class);
 
     /**
-     * <p>
-     * A frame counter set by the framework. This value monotonically
+     * <p>A frame counter set by the framework. This value monotonically
      * increases with every new result (that is, each new result has a unique
-     * frameCount value).
-     * </p>
-     * <p>
-     * Reset on release()
-     * </p>
+     * frameCount value).</p>
+     * <p>Reset on release()</p>
      */
     public static final Key<Integer> REQUEST_FRAME_COUNT =
             new Key<Integer>("android.request.frameCount", int.class);
 
     /**
-     * <p>
-     * An application-specified ID for the current
+     * <p>An application-specified ID for the current
      * request. Must be maintained unchanged in output
-     * frame
-     * </p>
-     *
+     * frame</p>
      * @hide
      */
     public static final Key<Integer> REQUEST_ID =
             new Key<Integer>("android.request.id", int.class);
 
     /**
-     * <p>
-     * (x, y, width, height).
-     * </p><p>
-     * A rectangle with the top-level corner of (x,y) and size
+     * <p>Specifies the number of pipeline stages the frame went
+     * through from when it was exposed to when the final completed result
+     * was available to the framework.</p>
+     * <p>Depending on what settings are used in the request, and
+     * what streams are configured, the data may undergo less processing,
+     * and some pipeline stages skipped.</p>
+     * <p>See {@link CameraCharacteristics#REQUEST_PIPELINE_MAX_DEPTH android.request.pipelineMaxDepth} for more details.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_PIPELINE_MAX_DEPTH
+     */
+    public static final Key<Byte> REQUEST_PIPELINE_DEPTH =
+            new Key<Byte>("android.request.pipelineDepth", byte.class);
+
+    /**
+     * <p>(x, y, width, height).</p>
+     * <p>A rectangle with the top-level corner of (x,y) and size
      * (width, height). The region of the sensor that is used for
      * output. Each stream must use this rectangle to produce its
      * output, cropping to a smaller region if necessary to
-     * maintain the stream's aspect ratio.
-     * </p><p>
-     * HAL2.x uses only (x, y, width)
-     * </p>
-     * <p>
-     * Any additional per-stream cropping must be done to
-     * maximize the final pixel area of the stream.
-     * </p><p>
-     * For example, if the crop region is set to a 4:3 aspect
+     * maintain the stream's aspect ratio.</p>
+     * <p>HAL2.x uses only (x, y, width)</p>
+     * <p>Any additional per-stream cropping must be done to
+     * maximize the final pixel area of the stream.</p>
+     * <p>For example, if the crop region is set to a 4:3 aspect
      * ratio, then 4:3 streams should use the exact crop
      * region. 16:9 streams should further crop vertically
-     * (letterbox).
-     * </p><p>
-     * Conversely, if the crop region is set to a 16:9, then 4:3
+     * (letterbox).</p>
+     * <p>Conversely, if the crop region is set to a 16:9, then 4:3
      * outputs should crop horizontally (pillarbox), and 16:9
      * streams should match exactly. These additional crops must
-     * be centered within the crop region.
-     * </p><p>
-     * The output streams must maintain square pixels at all
+     * be centered within the crop region.</p>
+     * <p>The output streams must maintain square pixels at all
      * times, no matter what the relative aspect ratios of the
      * crop region and the stream are.  Negative values for
      * corner are allowed for raw output if full pixel array is
@@ -675,100 +1477,277 @@
      * for raw output, where only a few fixed scales may be
      * possible. The width and height of the crop region cannot
      * be set to be smaller than floor( activeArraySize.width /
-     * android.scaler.maxDigitalZoom ) and floor(
-     * activeArraySize.height / android.scaler.maxDigitalZoom),
-     * respectively.
-     * </p>
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom} ) and floor(
+     * activeArraySize.height /
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM android.scaler.availableMaxDigitalZoom}), respectively.</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_MAX_DIGITAL_ZOOM
      */
     public static final Key<android.graphics.Rect> SCALER_CROP_REGION =
             new Key<android.graphics.Rect>("android.scaler.cropRegion", android.graphics.Rect.class);
 
     /**
-     * <p>
-     * Duration each pixel is exposed to
-     * light.
-     * </p><p>
-     * If the sensor can't expose this exact duration, it should shorten the
-     * duration exposed to the nearest possible value (rather than expose longer).
-     * </p>
-     * <p>
-     * 1/10000 - 30 sec range. No bulb mode
-     * </p>
+     * <p>Duration each pixel is exposed to
+     * light.</p>
+     * <p>If the sensor can't expose this exact duration, it should shorten the
+     * duration exposed to the nearest possible value (rather than expose longer).</p>
      */
     public static final Key<Long> SENSOR_EXPOSURE_TIME =
             new Key<Long>("android.sensor.exposureTime", long.class);
 
     /**
-     * <p>
-     * Duration from start of frame exposure to
-     * start of next frame exposure
-     * </p>
-     * <p>
-     * Exposure time has priority, so duration is set to
-     * max(duration, exposure time + overhead)
-     * </p>
+     * <p>Duration from start of frame exposure to
+     * start of next frame exposure.</p>
+     * <p>The maximum frame rate that can be supported by a camera subsystem is
+     * a function of many factors:</p>
+     * <ul>
+     * <li>Requested resolutions of output image streams</li>
+     * <li>Availability of binning / skipping modes on the imager</li>
+     * <li>The bandwidth of the imager interface</li>
+     * <li>The bandwidth of the various ISP processing blocks</li>
+     * </ul>
+     * <p>Since these factors can vary greatly between different ISPs and
+     * sensors, the camera abstraction tries to represent the bandwidth
+     * restrictions with as simple a model as possible.</p>
+     * <p>The model presented has the following characteristics:</p>
+     * <ul>
+     * <li>The image sensor is always configured to output the smallest
+     * resolution possible given the application's requested output stream
+     * sizes.  The smallest resolution is defined as being at least as large
+     * as the largest requested output stream size; the camera pipeline must
+     * never digitally upsample sensor data when the crop region covers the
+     * whole sensor. In general, this means that if only small output stream
+     * resolutions are configured, the sensor can provide a higher frame
+     * rate.</li>
+     * <li>Since any request may use any or all the currently configured
+     * output streams, the sensor and ISP must be configured to support
+     * scaling a single capture to all the streams at the same time.  This
+     * means the camera pipeline must be ready to produce the largest
+     * requested output size without any delay.  Therefore, the overall
+     * frame rate of a given configured stream set is governed only by the
+     * largest requested stream resolution.</li>
+     * <li>Using more than one output stream in a request does not affect the
+     * frame duration.</li>
+     * <li>Certain format-streams may need to do additional background processing
+     * before data is consumed/produced by that stream. These processors
+     * can run concurrently to the rest of the camera pipeline, but
+     * cannot process more than 1 capture at a time.</li>
+     * </ul>
+     * <p>The necessary information for the application, given the model above,
+     * is provided via the {@link CameraCharacteristics#SCALER_AVAILABLE_MIN_FRAME_DURATIONS android.scaler.availableMinFrameDurations} field.
+     * These are used to determine the maximum frame rate / minimum frame
+     * duration that is possible for a given stream configuration.</p>
+     * <p>Specifically, the application can use the following rules to
+     * determine the minimum frame duration it can request from the camera
+     * device:</p>
+     * <ol>
+     * <li>Let the set of currently configured input/output streams
+     * be called <code>S</code>.</li>
+     * <li>Find the minimum frame durations for each stream in <code>S</code>, by
+     * looking it up in {@link CameraCharacteristics#SCALER_AVAILABLE_MIN_FRAME_DURATIONS android.scaler.availableMinFrameDurations} (with
+     * its respective size/format). Let this set of frame durations be called
+     * <code>F</code>.</li>
+     * <li>For any given request <code>R</code>, the minimum frame duration allowed
+     * for <code>R</code> is the maximum out of all values in <code>F</code>. Let the streams
+     * used in <code>R</code> be called <code>S_r</code>.</li>
+     * </ol>
+     * <p>If none of the streams in <code>S_r</code> have a stall time (listed in
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS android.scaler.availableStallDurations}), then the frame duration in
+     * <code>F</code> determines the steady state frame rate that the application will
+     * get if it uses <code>R</code> as a repeating request. Let this special kind
+     * of request be called <code>Rsimple</code>.</p>
+     * <p>A repeating request <code>Rsimple</code> can be <em>occasionally</em> interleaved
+     * by a single capture of a new request <code>Rstall</code> (which has at least
+     * one in-use stream with a non-0 stall time) and if <code>Rstall</code> has the
+     * same minimum frame duration this will not cause a frame rate loss
+     * if all buffers from the previous <code>Rstall</code> have already been
+     * delivered.</p>
+     * <p>For more details about stalling, see
+     * {@link CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS android.scaler.availableStallDurations}.</p>
+     *
+     * @see CameraCharacteristics#SCALER_AVAILABLE_MIN_FRAME_DURATIONS
+     * @see CameraCharacteristics#SCALER_AVAILABLE_STALL_DURATIONS
      */
     public static final Key<Long> SENSOR_FRAME_DURATION =
             new Key<Long>("android.sensor.frameDuration", long.class);
 
     /**
-     * <p>
-     * Gain applied to image data. Must be
+     * <p>Gain applied to image data. Must be
      * implemented through analog gain only if set to values
-     * below 'maximum analog sensitivity'.
-     * </p><p>
-     * If the sensor can't apply this exact gain, it should lessen the
-     * gain to the nearest possible value (rather than gain more).
-     * </p>
-     * <p>
-     * ISO 12232:2006 REI method
-     * </p>
+     * below 'maximum analog sensitivity'.</p>
+     * <p>If the sensor can't apply this exact gain, it should lessen the
+     * gain to the nearest possible value (rather than gain more).</p>
+     * <p>ISO 12232:2006 REI method</p>
      */
     public static final Key<Integer> SENSOR_SENSITIVITY =
             new Key<Integer>("android.sensor.sensitivity", int.class);
 
     /**
-     * <p>
-     * Time at start of exposure of first
-     * row
-     * </p>
-     * <p>
-     * Monotonic, should be synced to other timestamps in
-     * system
-     * </p>
+     * <p>Time at start of exposure of first
+     * row</p>
+     * <p>Monotonic, should be synced to other timestamps in
+     * system</p>
      */
     public static final Key<Long> SENSOR_TIMESTAMP =
             new Key<Long>("android.sensor.timestamp", long.class);
 
     /**
-     * <p>
-     * The temperature of the sensor, sampled at the time
-     * exposure began for this frame.
-     * </p><p>
-     * The thermal diode being queried should be inside the sensor PCB, or
-     * somewhere close to it.
-     * </p>
+     * <p>The temperature of the sensor, sampled at the time
+     * exposure began for this frame.</p>
+     * <p>The thermal diode being queried should be inside the sensor PCB, or
+     * somewhere close to it.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     * <p><b>Full capability</b> -
+     * Present on all camera devices that report being {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL} devices in the
+     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL android.info.supportedHardwareLevel} key</p>
      *
-     * <b>Optional</b> - This value may be null on some devices.
-     *
-     * <b>{@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL_FULL HARDWARE_LEVEL_FULL}</b> -
-     * Present on all devices that report being FULL level hardware devices in the
-     * {@link CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL HARDWARE_LEVEL} key.
+     * @see CameraCharacteristics#INFO_SUPPORTED_HARDWARE_LEVEL
      */
     public static final Key<Float> SENSOR_TEMPERATURE =
             new Key<Float>("android.sensor.temperature", float.class);
 
     /**
-     * <p>
-     * State of the face detector
-     * unit
-     * </p>
-     * <p>
-     * Whether face detection is enabled, and whether it
+     * <p>The estimated camera neutral color in the native sensor colorspace at
+     * the time of capture.</p>
+     * <p>This value gives the neutral color point encoded as an RGB value in the
+     * native sensor color space.  The neutral color point indicates the
+     * currently estimated white point of the scene illumination.  It can be
+     * used to interpolate between the provided color transforms when
+     * processing raw sensor data.</p>
+     * <p>The order of the values is R, G, B; where R is in the lowest index.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     */
+    public static final Key<Rational[]> SENSOR_NEUTRAL_COLOR_POINT =
+            new Key<Rational[]>("android.sensor.neutralColorPoint", Rational[].class);
+
+    /**
+     * <p>A mapping containing a hue shift, saturation scale, and value scale
+     * for each pixel.</p>
+     * <p>hue_samples, saturation_samples, and value_samples are given in
+     * {@link CameraCharacteristics#SENSOR_PROFILE_HUE_SAT_MAP_DIMENSIONS android.sensor.profileHueSatMapDimensions}.</p>
+     * <p>Each entry of this map contains three floats corresponding to the
+     * hue shift, saturation scale, and value scale, respectively; where the
+     * hue shift has the lowest index. The map entries are stored in the tag
+     * in nested loop order, with the value divisions in the outer loop, the
+     * hue divisions in the middle loop, and the saturation divisions in the
+     * inner loop. All zero input saturation entries are required to have a
+     * value scale factor of 1.0.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_PROFILE_HUE_SAT_MAP_DIMENSIONS
+     */
+    public static final Key<float[]> SENSOR_PROFILE_HUE_SAT_MAP =
+            new Key<float[]>("android.sensor.profileHueSatMap", float[].class);
+
+    /**
+     * <p>A list of x,y samples defining a tone-mapping curve for gamma adjustment.</p>
+     * <p>This tag contains a default tone curve that can be applied while
+     * processing the image as a starting point for user adjustments.
+     * The curve is specified as a list of value pairs in linear gamma.
+     * The curve is interpolated using a cubic spline.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     */
+    public static final Key<float[]> SENSOR_PROFILE_TONE_CURVE =
+            new Key<float[]>("android.sensor.profileToneCurve", float[].class);
+
+    /**
+     * <p>The worst-case divergence between Bayer green channels.</p>
+     * <p>This value is an estimate of the worst case split between the
+     * Bayer green channels in the red and blue rows in the sensor color
+     * filter array.</p>
+     * <p>The green split is calculated as follows:</p>
+     * <ol>
+     * <li>A 5x5 pixel (or larger) window W within the active sensor array is
+     * chosen. The term 'pixel' here is taken to mean a group of 4 Bayer
+     * mosaic channels (R, Gr, Gb, B).  The location and size of the window
+     * chosen is implementation defined, and should be chosen to provide a
+     * green split estimate that is both representative of the entire image
+     * for this camera sensor, and can be calculated quickly.</li>
+     * <li>The arithmetic mean of the green channels from the red
+     * rows (mean_Gr) within W is computed.</li>
+     * <li>The arithmetic mean of the green channels from the blue
+     * rows (mean_Gb) within W is computed.</li>
+     * <li>The maximum ratio R of the two means is computed as follows:
+     * <code>R = max((mean_Gr + 1)/(mean_Gb + 1), (mean_Gb + 1)/(mean_Gr + 1))</code></li>
+     * </ol>
+     * <p>The ratio R is the green split divergence reported for this property,
+     * which represents how much the green channels differ in the mosaic
+     * pattern.  This value is typically used to determine the treatment of
+     * the green mosaic channels when demosaicing.</p>
+     * <p>The green split value can be roughly interpreted as follows:</p>
+     * <ul>
+     * <li>R &lt; 1.03 is a negligible split (&lt;3% divergence).</li>
+     * <li>1.20 &lt;= R &gt;= 1.03 will require some software
+     * correction to avoid demosaic errors (3-20% divergence).</li>
+     * <li>R &gt; 1.20 will require strong software correction to produce
+     * a usuable image (&gt;20% divergence).</li>
+     * </ul>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     */
+    public static final Key<Float> SENSOR_GREEN_SPLIT =
+            new Key<Float>("android.sensor.greenSplit", float.class);
+
+    /**
+     * <p>When enabled, the sensor sends a test pattern instead of
+     * doing a real exposure from the camera.</p>
+     * <p>When a test pattern is enabled, all manual sensor controls specified
+     * by android.sensor.* should be ignored. All other controls should
+     * work as normal.</p>
+     * <p>For example, if manual flash is enabled, flash firing should still
+     * occur (and that the test pattern remain unmodified, since the flash
+     * would not actually affect it).</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     * @see #SENSOR_TEST_PATTERN_MODE_OFF
+     * @see #SENSOR_TEST_PATTERN_MODE_SOLID_COLOR
+     * @see #SENSOR_TEST_PATTERN_MODE_COLOR_BARS
+     * @see #SENSOR_TEST_PATTERN_MODE_COLOR_BARS_FADE_TO_GRAY
+     * @see #SENSOR_TEST_PATTERN_MODE_PN9
+     * @see #SENSOR_TEST_PATTERN_MODE_CUSTOM1
+     */
+    public static final Key<Integer> SENSOR_TEST_PATTERN_MODE =
+            new Key<Integer>("android.sensor.testPatternMode", int.class);
+
+    /**
+     * <p>Quality of lens shading correction applied
+     * to the image data.</p>
+     * <p>When set to OFF mode, no lens shading correction will be applied by the
+     * camera device, and an identity lens shading map data will be provided
+     * if <code>{@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode} == ON</code>. For example, for lens
+     * shading map with size specified as <code>{@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize} = [ 4, 3 ]</code>,
+     * the output {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap} for this case will be an identity map
+     * shown below:</p>
+     * <pre><code>[ 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,   1.0, 1.0, 1.0, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.0, 1.0, 1.0, 1.0 ]
+     * </code></pre>
+     * <p>When set to other modes, lens shading correction will be applied by the
+     * camera device. Applications can request lens shading map data by setting
+     * {@link CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE android.statistics.lensShadingMapMode} to ON, and then the camera device will provide
+     * lens shading map data in {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap}, with size specified
+     * by {@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize}.</p>
+     *
+     * @see CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
+     * @see CaptureRequest#STATISTICS_LENS_SHADING_MAP_MODE
+     * @see #SHADING_MODE_OFF
+     * @see #SHADING_MODE_FAST
+     * @see #SHADING_MODE_HIGH_QUALITY
+     */
+    public static final Key<Integer> SHADING_MODE =
+            new Key<Integer>("android.shading.mode", int.class);
+
+    /**
+     * <p>State of the face detector
+     * unit</p>
+     * <p>Whether face detection is enabled, and whether it
      * should output just the basic fields or the full set of
      * fields. Value must be one of the
-     * android.statistics.info.availableFaceDetectModes.
-     * </p>
+     * {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES android.statistics.info.availableFaceDetectModes}.</p>
+     *
+     * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_FACE_DETECT_MODES
      * @see #STATISTICS_FACE_DETECT_MODE_OFF
      * @see #STATISTICS_FACE_DETECT_MODE_SIMPLE
      * @see #STATISTICS_FACE_DETECT_MODE_FULL
@@ -777,129 +1756,151 @@
             new Key<Integer>("android.statistics.faceDetectMode", int.class);
 
     /**
-     * <p>
-     * List of unique IDs for detected
-     * faces
-     * </p>
-     * <p>
-     * Only available if faceDetectMode == FULL
-     * </p>
+     * <p>List of unique IDs for detected
+     * faces</p>
+     * <p>Only available if faceDetectMode == FULL</p>
+     * @hide
      */
     public static final Key<int[]> STATISTICS_FACE_IDS =
             new Key<int[]>("android.statistics.faceIds", int[].class);
 
     /**
-     * <p>
-     * List of landmarks for detected
-     * faces
-     * </p>
-     * <p>
-     * Only available if faceDetectMode == FULL
-     * </p>
+     * <p>List of landmarks for detected
+     * faces</p>
+     * <p>Only available if faceDetectMode == FULL</p>
+     * @hide
      */
     public static final Key<int[]> STATISTICS_FACE_LANDMARKS =
             new Key<int[]>("android.statistics.faceLandmarks", int[].class);
 
     /**
-     * <p>
-     * List of the bounding rectangles for detected
-     * faces
-     * </p>
-     * <p>
-     * Only available if faceDetectMode != OFF
-     * </p>
+     * <p>List of the bounding rectangles for detected
+     * faces</p>
+     * <p>Only available if faceDetectMode != OFF</p>
+     * @hide
      */
     public static final Key<android.graphics.Rect[]> STATISTICS_FACE_RECTANGLES =
             new Key<android.graphics.Rect[]>("android.statistics.faceRectangles", android.graphics.Rect[].class);
 
     /**
-     * <p>
-     * List of the face confidence scores for
-     * detected faces
-     * </p>
-     * <p>
-     * Only available if faceDetectMode != OFF. The value should be
-     * meaningful (for example, setting 100 at all times is illegal).
-     * </p>
+     * <p>List of the face confidence scores for
+     * detected faces</p>
+     * <p>Only available if faceDetectMode != OFF. The value should be
+     * meaningful (for example, setting 100 at all times is illegal).</p>
+     * @hide
      */
     public static final Key<byte[]> STATISTICS_FACE_SCORES =
             new Key<byte[]>("android.statistics.faceScores", byte[].class);
 
     /**
-     * <p>
-     * A low-resolution map of lens shading, per
-     * color channel
-     * </p>
-     * <p>
-     * Assume bilinear interpolation of map. The least
-     * shaded section of the image should have a gain factor
-     * of 1; all other sections should have gains above 1.
-     * the map should be on the order of 30-40 rows, and
-     * must be smaller than 64x64.
-     * </p><p>
-     * When android.colorCorrection.mode = TRANSFORM_MATRIX, the map
-     * must take into account the colorCorrection settings.
-     * </p>
+     * <p>The shading map is a low-resolution floating-point map
+     * that lists the coefficients used to correct for vignetting, for each
+     * Bayer color channel.</p>
+     * <p>The least shaded section of the image should have a gain factor
+     * of 1; all other sections should have gains above 1.</p>
+     * <p>When {@link CaptureRequest#COLOR_CORRECTION_MODE android.colorCorrection.mode} = TRANSFORM_MATRIX, the map
+     * must take into account the colorCorrection settings.</p>
+     * <p>The shading map is for the entire active pixel array, and is not
+     * affected by the crop region specified in the request. Each shading map
+     * entry is the value of the shading compensation map over a specific
+     * pixel on the sensor.  Specifically, with a (N x M) resolution shading
+     * map, and an active pixel array size (W x H), shading map entry
+     * (x,y) ϵ (0 ... N-1, 0 ... M-1) is the value of the shading map at
+     * pixel ( ((W-1)/(N-1)) * x, ((H-1)/(M-1)) * y) for the four color channels.
+     * The map is assumed to be bilinearly interpolated between the sample points.</p>
+     * <p>The channel order is [R, Geven, Godd, B], where Geven is the green
+     * channel for the even rows of a Bayer pattern, and Godd is the odd rows.
+     * The shading map is stored in a fully interleaved format, and its size
+     * is provided in the camera static metadata by {@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize}.</p>
+     * <p>The shading map should have on the order of 30-40 rows and columns,
+     * and must be smaller than 64x64.</p>
+     * <p>As an example, given a very small map defined as:</p>
+     * <pre><code>{@link CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE android.lens.info.shadingMapSize} = [ 4, 3 ]
+     * {@link CaptureResult#STATISTICS_LENS_SHADING_MAP android.statistics.lensShadingMap} =
+     * [ 1.3, 1.2, 1.15, 1.2,  1.2, 1.2, 1.15, 1.2,
+     * 1.1, 1.2, 1.2, 1.2,  1.3, 1.2, 1.3, 1.3,
+     * 1.2, 1.2, 1.25, 1.1,  1.1, 1.1, 1.1, 1.0,
+     * 1.0, 1.0, 1.0, 1.0,  1.2, 1.3, 1.25, 1.2,
+     * 1.3, 1.2, 1.2, 1.3,   1.2, 1.15, 1.1, 1.2,
+     * 1.2, 1.1, 1.0, 1.2,  1.3, 1.15, 1.2, 1.3 ]
+     * </code></pre>
+     * <p>The low-resolution scaling map images for each channel are
+     * (displayed using nearest-neighbor interpolation):</p>
+     * <p><img alt="Red lens shading map" src="../../../../images/camera2/metadata/android.statistics.lensShadingMap/red_shading.png" />
+     * <img alt="Green (even rows) lens shading map" src="../../../../images/camera2/metadata/android.statistics.lensShadingMap/green_e_shading.png" />
+     * <img alt="Green (odd rows) lens shading map" src="../../../../images/camera2/metadata/android.statistics.lensShadingMap/green_o_shading.png" />
+     * <img alt="Blue lens shading map" src="../../../../images/camera2/metadata/android.statistics.lensShadingMap/blue_shading.png" /></p>
+     * <p>As a visualization only, inverting the full-color map to recover an
+     * image of a gray wall (using bicubic interpolation for visual quality) as captured by the sensor gives:</p>
+     * <p><img alt="Image of a uniform white wall (inverse shading map)" src="../../../../images/camera2/metadata/android.statistics.lensShadingMap/inv_shading.png" /></p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_MODE
+     * @see CameraCharacteristics#LENS_INFO_SHADING_MAP_SIZE
+     * @see CaptureResult#STATISTICS_LENS_SHADING_MAP
      */
     public static final Key<float[]> STATISTICS_LENS_SHADING_MAP =
             new Key<float[]>("android.statistics.lensShadingMap", float[].class);
 
     /**
-     * <p>
-     * The best-fit color channel gains calculated
-     * by the HAL's statistics units for the current output frame
-     * </p>
-     * <p>
-     * This may be different than the gains used for this frame,
+     * <p>The best-fit color channel gains calculated
+     * by the camera device's statistics units for the current output frame.</p>
+     * <p>This may be different than the gains used for this frame,
      * since statistics processing on data from a new frame
      * typically completes after the transform has already been
-     * applied to that frame.
-     * </p><p>
-     * The 4 channel gains are defined in Bayer domain,
-     * see android.colorCorrection.gains for details.
-     * </p><p>
-     * This value should always be calculated by the AWB block,
-     * regardless of the android.control.* current values.
-     * </p>
+     * applied to that frame.</p>
+     * <p>The 4 channel gains are defined in Bayer domain,
+     * see {@link CaptureRequest#COLOR_CORRECTION_GAINS android.colorCorrection.gains} for details.</p>
+     * <p>This value should always be calculated by the AWB block,
+     * regardless of the android.control.* current values.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     *
+     * @see CaptureRequest#COLOR_CORRECTION_GAINS
+     * @hide
      */
     public static final Key<float[]> STATISTICS_PREDICTED_COLOR_GAINS =
             new Key<float[]>("android.statistics.predictedColorGains", float[].class);
 
     /**
-     * <p>
-     * The best-fit color transform matrix estimate
-     * calculated by the HAL's statistics units for the current
-     * output frame
-     * </p>
-     * <p>
-     * The HAL must provide the estimate from its
+     * <p>The best-fit color transform matrix estimate
+     * calculated by the camera device's statistics units for the current
+     * output frame.</p>
+     * <p>The camera device will provide the estimate from its
      * statistics unit on the white balance transforms to use
-     * for the next frame. These are the values the HAL believes
+     * for the next frame. These are the values the camera device believes
      * are the best fit for the current output frame. This may
      * be different than the transform used for this frame, since
      * statistics processing on data from a new frame typically
      * completes after the transform has already been applied to
-     * that frame.
-     * </p><p>
-     * These estimates must be provided for all frames, even if
-     * capture settings and color transforms are set by the application.
-     * </p><p>
-     * This value should always be calculated by the AWB block,
-     * regardless of the android.control.* current values.
-     * </p>
+     * that frame.</p>
+     * <p>These estimates must be provided for all frames, even if
+     * capture settings and color transforms are set by the application.</p>
+     * <p>This value should always be calculated by the AWB block,
+     * regardless of the android.control.* current values.</p>
+     * <p><b>Optional</b> - This value may be {@code null} on some devices.</p>
+     * @hide
      */
     public static final Key<Rational[]> STATISTICS_PREDICTED_COLOR_TRANSFORM =
             new Key<Rational[]>("android.statistics.predictedColorTransform", Rational[].class);
 
     /**
-     * <p>
-     * The HAL estimated scene illumination lighting
-     * frequency
-     * </p>
-     * <p>
-     * Report NONE if there doesn't appear to be flickering
-     * illumination
-     * </p>
+     * <p>The camera device estimated scene illumination lighting
+     * frequency.</p>
+     * <p>Many light sources, such as most fluorescent lights, flicker at a rate
+     * that depends on the local utility power standards. This flicker must be
+     * accounted for by auto-exposure routines to avoid artifacts in captured images.
+     * The camera device uses this entry to tell the application what the scene
+     * illuminant frequency is.</p>
+     * <p>When manual exposure control is enabled
+     * (<code>{@link CaptureRequest#CONTROL_AE_MODE android.control.aeMode} == OFF</code> or <code>{@link CaptureRequest#CONTROL_MODE android.control.mode} == OFF</code>),
+     * the {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode} doesn't do the antibanding, and the
+     * application can ensure it selects exposure times that do not cause banding
+     * issues by looking into this metadata field. See {@link CaptureRequest#CONTROL_AE_ANTIBANDING_MODE android.control.aeAntibandingMode}
+     * for more details.</p>
+     * <p>Report NONE if there doesn't appear to be flickering illumination.</p>
+     *
+     * @see CaptureRequest#CONTROL_AE_ANTIBANDING_MODE
+     * @see CaptureRequest#CONTROL_AE_MODE
+     * @see CaptureRequest#CONTROL_MODE
      * @see #STATISTICS_SCENE_FLICKER_NONE
      * @see #STATISTICS_SCENE_FLICKER_50HZ
      * @see #STATISTICS_SCENE_FLICKER_60HZ
@@ -908,61 +1909,137 @@
             new Key<Integer>("android.statistics.sceneFlicker", int.class);
 
     /**
-     * <p>
-     * Table mapping blue input values to output
-     * values
-     * </p>
-     * <p>
-     * Tonemapping / contrast / gamma curve for the blue
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.
-     * </p><p>
-     * See android.tonemap.curveRed for more details.
-     * </p>
+     * <p>Operating mode for hotpixel map generation.</p>
+     * <p>If set to ON, a hotpixel map is returned in {@link CaptureResult#STATISTICS_HOT_PIXEL_MAP android.statistics.hotPixelMap}.
+     * If set to OFF, no hotpixel map should be returned.</p>
+     * <p>This must be set to a valid mode from {@link CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES android.statistics.info.availableHotPixelMapModes}.</p>
+     *
+     * @see CaptureResult#STATISTICS_HOT_PIXEL_MAP
+     * @see CameraCharacteristics#STATISTICS_INFO_AVAILABLE_HOT_PIXEL_MAP_MODES
+     */
+    public static final Key<Boolean> STATISTICS_HOT_PIXEL_MAP_MODE =
+            new Key<Boolean>("android.statistics.hotPixelMapMode", boolean.class);
+
+    /**
+     * <p>List of <code>(x, y)</code> coordinates of hot/defective pixels on the sensor.</p>
+     * <p>A coordinate <code>(x, y)</code> must lie between <code>(0, 0)</code>, and
+     * <code>(width - 1, height - 1)</code> (inclusive), which are the top-left and
+     * bottom-right of the pixel array, respectively. The width and
+     * height dimensions are given in {@link CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE android.sensor.info.pixelArraySize}.
+     * This may include hot pixels that lie outside of the active array
+     * bounds given by {@link CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE android.sensor.info.activeArraySize}.</p>
+     *
+     * @see CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE
+     * @see CameraCharacteristics#SENSOR_INFO_PIXEL_ARRAY_SIZE
+     */
+    public static final Key<int[]> STATISTICS_HOT_PIXEL_MAP =
+            new Key<int[]>("android.statistics.hotPixelMap", int[].class);
+
+    /**
+     * <p>Tonemapping / contrast / gamma curve for the blue
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_BLUE =
             new Key<float[]>("android.tonemap.curveBlue", float[].class);
 
     /**
-     * <p>
-     * Table mapping green input values to output
-     * values
-     * </p>
-     * <p>
-     * Tonemapping / contrast / gamma curve for the green
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.
-     * </p><p>
-     * See android.tonemap.curveRed for more details.
-     * </p>
+     * <p>Tonemapping / contrast / gamma curve for the green
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>See {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} for more details.</p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_GREEN =
             new Key<float[]>("android.tonemap.curveGreen", float[].class);
 
     /**
-     * <p>
-     * Table mapping red input values to output
-     * values
-     * </p>
-     * <p>
-     * Tonemapping / contrast / gamma curve for the red
-     * channel, to use when android.tonemap.mode is CONTRAST_CURVE.
-     * </p><p>
-     * Since the input and output ranges may vary depending on
-     * the camera pipeline, the input and output pixel values
-     * are represented by normalized floating-point values
-     * between 0 and 1, with 0 == black and 1 == white.
-     * </p><p>
-     * The curve should be linearly interpolated between the
-     * defined points. The points will be listed in increasing
-     * order of P_IN. For example, if the array is: [0.0, 0.0,
-     * 0.3, 0.5, 1.0, 1.0], then the input->output mapping
-     * for a few sample points would be: 0 -> 0, 0.15 ->
-     * 0.25, 0.3 -> 0.5, 0.5 -> 0.64
-     * </p>
+     * <p>Tonemapping / contrast / gamma curve for the red
+     * channel, to use when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>Each channel's curve is defined by an array of control points:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} =
+     * [ P0in, P0out, P1in, P1out, P2in, P2out, P3in, P3out, ..., PNin, PNout ]
+     * 2 &lt;= N &lt;= {@link CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS android.tonemap.maxCurvePoints}</code></pre>
+     * <p>These are sorted in order of increasing <code>Pin</code>; it is always
+     * guaranteed that input values 0.0 and 1.0 are included in the list to
+     * define a complete mapping. For input values between control points,
+     * the camera device must linearly interpolate between the control
+     * points.</p>
+     * <p>Each curve can have an independent number of points, and the number
+     * of points can be less than max (that is, the request doesn't have to
+     * always provide a curve with number of points equivalent to
+     * {@link CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS android.tonemap.maxCurvePoints}).</p>
+     * <p>A few examples, and their corresponding graphical mappings; these
+     * only specify the red channel and the precision is limited to 4
+     * digits, for conciseness.</p>
+     * <p>Linear mapping:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [ 0, 0, 1.0, 1.0 ]
+     * </code></pre>
+     * <p><img alt="Linear mapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/linear_tonemap.png" /></p>
+     * <p>Invert mapping:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [ 0, 1.0, 1.0, 0 ]
+     * </code></pre>
+     * <p><img alt="Inverting mapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/inverse_tonemap.png" /></p>
+     * <p>Gamma 1/2.2 mapping, with 16 control points:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [
+     * 0.0000, 0.0000, 0.0667, 0.2920, 0.1333, 0.4002, 0.2000, 0.4812,
+     * 0.2667, 0.5484, 0.3333, 0.6069, 0.4000, 0.6594, 0.4667, 0.7072,
+     * 0.5333, 0.7515, 0.6000, 0.7928, 0.6667, 0.8317, 0.7333, 0.8685,
+     * 0.8000, 0.9035, 0.8667, 0.9370, 0.9333, 0.9691, 1.0000, 1.0000 ]
+     * </code></pre>
+     * <p><img alt="Gamma = 1/2.2 tonemapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/gamma_tonemap.png" /></p>
+     * <p>Standard sRGB gamma mapping, per IEC 61966-2-1:1999, with 16 control points:</p>
+     * <pre><code>{@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed} = [
+     * 0.0000, 0.0000, 0.0667, 0.2864, 0.1333, 0.4007, 0.2000, 0.4845,
+     * 0.2667, 0.5532, 0.3333, 0.6125, 0.4000, 0.6652, 0.4667, 0.7130,
+     * 0.5333, 0.7569, 0.6000, 0.7977, 0.6667, 0.8360, 0.7333, 0.8721,
+     * 0.8000, 0.9063, 0.8667, 0.9389, 0.9333, 0.9701, 1.0000, 1.0000 ]
+     * </code></pre>
+     * <p><img alt="sRGB tonemapping curve" src="../../../../images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png" /></p>
+     *
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CameraCharacteristics#TONEMAP_MAX_CURVE_POINTS
+     * @see CaptureRequest#TONEMAP_MODE
      */
     public static final Key<float[]> TONEMAP_CURVE_RED =
             new Key<float[]>("android.tonemap.curveRed", float[].class);
 
     /**
+     * <p>High-level global contrast/gamma/tonemapping control.</p>
+     * <p>When switching to an application-defined contrast curve by setting
+     * {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} to CONTRAST_CURVE, the curve is defined
+     * per-channel with a set of <code>(in, out)</code> points that specify the
+     * mapping from input high-bit-depth pixel value to the output
+     * low-bit-depth value.  Since the actual pixel ranges of both input
+     * and output may change depending on the camera pipeline, the values
+     * are specified by normalized floating-point numbers.</p>
+     * <p>More-complex color mapping operations such as 3D color look-up
+     * tables, selective chroma enhancement, or other non-linear color
+     * transforms will be disabled when {@link CaptureRequest#TONEMAP_MODE android.tonemap.mode} is
+     * CONTRAST_CURVE.</p>
+     * <p>This must be set to a valid mode in
+     * {@link CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES android.tonemap.availableToneMapModes}.</p>
+     * <p>When using either FAST or HIGH_QUALITY, the camera device will
+     * emit its own tonemap curve in {@link CaptureRequest#TONEMAP_CURVE_RED android.tonemap.curveRed},
+     * {@link CaptureRequest#TONEMAP_CURVE_GREEN android.tonemap.curveGreen}, and {@link CaptureRequest#TONEMAP_CURVE_BLUE android.tonemap.curveBlue}.
+     * These values are always available, and as close as possible to the
+     * actually used nonlinear/nonglobal transforms.</p>
+     * <p>If a request is sent with TRANSFORM_MATRIX with the camera device's
+     * provided curve in FAST or HIGH_QUALITY, the image's tonemap will be
+     * roughly the same.</p>
+     *
+     * @see CameraCharacteristics#TONEMAP_AVAILABLE_TONE_MAP_MODES
+     * @see CaptureRequest#TONEMAP_CURVE_BLUE
+     * @see CaptureRequest#TONEMAP_CURVE_GREEN
+     * @see CaptureRequest#TONEMAP_CURVE_RED
+     * @see CaptureRequest#TONEMAP_MODE
      * @see #TONEMAP_MODE_CONTRAST_CURVE
      * @see #TONEMAP_MODE_FAST
      * @see #TONEMAP_MODE_HIGH_QUALITY
@@ -971,53 +2048,95 @@
             new Key<Integer>("android.tonemap.mode", int.class);
 
     /**
-     * <p>
-     * This LED is nominally used to indicate to the user
+     * <p>This LED is nominally used to indicate to the user
      * that the camera is powered on and may be streaming images back to the
      * Application Processor. In certain rare circumstances, the OS may
      * disable this when video is processed locally and not transmitted to
-     * any untrusted applications.
-     * </p><p>
-     * In particular, the LED *must* always be on when the data could be
-     * transmitted off the device. The LED *should* always be on whenever
-     * data is stored locally on the device.
-     * </p><p>
-     * The LED *may* be off if a trusted application is using the data that
-     * doesn't violate the above rules.
-     * </p>
-     *
+     * any untrusted applications.</p>
+     * <p>In particular, the LED <em>must</em> always be on when the data could be
+     * transmitted off the device. The LED <em>should</em> always be on whenever
+     * data is stored locally on the device.</p>
+     * <p>The LED <em>may</em> be off if a trusted application is using the data that
+     * doesn't violate the above rules.</p>
      * @hide
      */
     public static final Key<Boolean> LED_TRANSMIT =
             new Key<Boolean>("android.led.transmit", boolean.class);
 
     /**
-     * <p>
-     * Whether black-level compensation is locked
-     * to its current values, or is free to vary
-     * </p>
-     * <p>
-     * When set to ON, the values used for black-level
-     * compensation must not change until the lock is set to
-     * OFF
-     * </p><p>
-     * Since changes to certain capture parameters (such as
-     * exposure time) may require resetting of black level
-     * compensation, the HAL must report whether setting the
-     * black level lock was successful in the output result
-     * metadata.
-     * </p><p>
-     * The black level locking must happen at the sensor, and not at the ISP.
-     * If for some reason black level locking is no longer legal (for example,
-     * the analog gain has changed, which forces black levels to be
-     * recalculated), then the HAL is free to override this request (and it
-     * must report 'OFF' when this does happen) until the next time locking
-     * is legal again.
-     * </p>
+     * <p>Whether black-level compensation is locked
+     * to its current values, or is free to vary.</p>
+     * <p>Whether the black level offset was locked for this frame.  Should be
+     * ON if {@link CaptureRequest#BLACK_LEVEL_LOCK android.blackLevel.lock} was ON in the capture request, unless
+     * a change in other capture settings forced the camera device to
+     * perform a black level reset.</p>
+     *
+     * @see CaptureRequest#BLACK_LEVEL_LOCK
      */
     public static final Key<Boolean> BLACK_LEVEL_LOCK =
             new Key<Boolean>("android.blackLevel.lock", boolean.class);
 
+    /**
+     * <p>The frame number corresponding to the last request
+     * with which the output result (metadata + buffers) has been fully
+     * synchronized.</p>
+     * <p>When a request is submitted to the camera device, there is usually a
+     * delay of several frames before the controls get applied. A camera
+     * device may either choose to account for this delay by implementing a
+     * pipeline and carefully submit well-timed atomic control updates, or
+     * it may start streaming control changes that span over several frame
+     * boundaries.</p>
+     * <p>In the latter case, whenever a request's settings change relative to
+     * the previous submitted request, the full set of changes may take
+     * multiple frame durations to fully take effect. Some settings may
+     * take effect sooner (in less frame durations) than others.</p>
+     * <p>While a set of control changes are being propagated, this value
+     * will be CONVERGING.</p>
+     * <p>Once it is fully known that a set of control changes have been
+     * finished propagating, and the resulting updated control settings
+     * have been read back by the camera device, this value will be set
+     * to a non-negative frame number (corresponding to the request to
+     * which the results have synchronized to).</p>
+     * <p>Older camera device implementations may not have a way to detect
+     * when all camera controls have been applied, and will always set this
+     * value to UNKNOWN.</p>
+     * <p>FULL capability devices will always have this value set to the
+     * frame number of the request corresponding to this result.</p>
+     * <p><em>Further details</em>:</p>
+     * <ul>
+     * <li>Whenever a request differs from the last request, any future
+     * results not yet returned may have this value set to CONVERGING (this
+     * could include any in-progress captures not yet returned by the camera
+     * device, for more details see pipeline considerations below).</li>
+     * <li>Submitting a series of multiple requests that differ from the
+     * previous request (e.g. r1, r2, r3 s.t. r1 != r2 != r3)
+     * moves the new synchronization frame to the last non-repeating
+     * request (using the smallest frame number from the contiguous list of
+     * repeating requests).</li>
+     * <li>Submitting the same request repeatedly will not change this value
+     * to CONVERGING, if it was already a non-negative value.</li>
+     * <li>When this value changes to non-negative, that means that all of the
+     * metadata controls from the request have been applied, all of the
+     * metadata controls from the camera device have been read to the
+     * updated values (into the result), and all of the graphics buffers
+     * corresponding to this result are also synchronized to the request.</li>
+     * </ul>
+     * <p><em>Pipeline considerations</em>:</p>
+     * <p>Submitting a request with updated controls relative to the previously
+     * submitted requests may also invalidate the synchronization state
+     * of all the results corresponding to currently in-flight requests.</p>
+     * <p>In other words, results for this current request and up to
+     * {@link CameraCharacteristics#REQUEST_PIPELINE_MAX_DEPTH android.request.pipelineMaxDepth} prior requests may have their
+     * android.sync.frameNumber change to CONVERGING.</p>
+     *
+     * @see CameraCharacteristics#REQUEST_PIPELINE_MAX_DEPTH
+     * @see #SYNC_FRAME_NUMBER_CONVERGING
+     * @see #SYNC_FRAME_NUMBER_UNKNOWN
+     * @hide
+     */
+    public static final Key<Long> SYNC_FRAME_NUMBER =
+            new Key<Long>("android.sync.frameNumber", long.class);
+
     /*~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~
      * End generated code
      *~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~O@*/
diff --git a/core/java/android/hardware/camera2/CaptureResultExtras.aidl b/core/java/android/hardware/camera2/CaptureResultExtras.aidl
new file mode 100644
index 0000000..6587f02
--- /dev/null
+++ b/core/java/android/hardware/camera2/CaptureResultExtras.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.camera2;
+
+/** @hide */
+parcelable CaptureResultExtras;
diff --git a/core/java/android/hardware/camera2/CaptureResultExtras.java b/core/java/android/hardware/camera2/CaptureResultExtras.java
new file mode 100644
index 0000000..e5c2c1c
--- /dev/null
+++ b/core/java/android/hardware/camera2/CaptureResultExtras.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.camera2;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * @hide
+ */
+public class CaptureResultExtras implements Parcelable {
+    private int requestId;
+    private int subsequenceId;
+    private int afTriggerId;
+    private int precaptureTriggerId;
+    private long frameNumber;
+
+    public static final Parcelable.Creator<CaptureResultExtras> CREATOR =
+            new Parcelable.Creator<CaptureResultExtras>() {
+        @Override
+        public CaptureResultExtras createFromParcel(Parcel in) {
+            return new CaptureResultExtras(in);
+        }
+
+        @Override
+        public CaptureResultExtras[] newArray(int size) {
+            return new CaptureResultExtras[size];
+        }
+    };
+
+    private CaptureResultExtras(Parcel in) {
+        readFromParcel(in);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(requestId);
+        dest.writeInt(subsequenceId);
+        dest.writeInt(afTriggerId);
+        dest.writeInt(precaptureTriggerId);
+        dest.writeLong(frameNumber);
+    }
+
+    public void readFromParcel(Parcel in) {
+        requestId = in.readInt();
+        subsequenceId = in.readInt();
+        afTriggerId = in.readInt();
+        precaptureTriggerId = in.readInt();
+        frameNumber = in.readLong();
+    }
+
+    public int getRequestId() {
+        return requestId;
+    }
+
+    public int getSubsequenceId() {
+        return subsequenceId;
+    }
+
+    public int getAfTriggerId() {
+        return afTriggerId;
+    }
+
+    public int getPrecaptureTriggerId() {
+        return precaptureTriggerId;
+    }
+
+    public long getFrameNumber() {
+        return frameNumber;
+    }
+
+}
diff --git a/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl b/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl
index 02a73d66..a14d38b 100644
--- a/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl
+++ b/core/java/android/hardware/camera2/ICameraDeviceCallbacks.aidl
@@ -17,6 +17,7 @@
 package android.hardware.camera2;
 
 import android.hardware.camera2.impl.CameraMetadataNative;
+import android.hardware.camera2.CaptureResultExtras;
 
 /** @hide */
 interface ICameraDeviceCallbacks
@@ -25,8 +26,9 @@
      * Keep up-to-date with frameworks/av/include/camera/camera2/ICameraDeviceCallbacks.h
      */
 
-    oneway void onCameraError(int errorCode);
+    oneway void onCameraError(int errorCode, in CaptureResultExtras resultExtras);
     oneway void onCameraIdle();
-    oneway void onCaptureStarted(int requestId, long timestamp);
-    oneway void onResultReceived(int requestId, in CameraMetadataNative result);
+    oneway void onCaptureStarted(in CaptureResultExtras resultExtras, long timestamp);
+    oneway void onResultReceived(in CameraMetadataNative result,
+                                 in CaptureResultExtras resultExtras);
 }
diff --git a/core/java/android/hardware/camera2/ICameraDeviceUser.aidl b/core/java/android/hardware/camera2/ICameraDeviceUser.aidl
index 1936963..d77f3d1 100644
--- a/core/java/android/hardware/camera2/ICameraDeviceUser.aidl
+++ b/core/java/android/hardware/camera2/ICameraDeviceUser.aidl
@@ -20,6 +20,8 @@
 import android.hardware.camera2.impl.CameraMetadataNative;
 import android.hardware.camera2.CaptureRequest;
 
+import android.hardware.camera2.LongParcelable;
+
 /** @hide */
 interface ICameraDeviceUser
 {
@@ -31,9 +33,13 @@
     // ints here are status_t
 
     // non-negative value is the requestId. negative value is status_t
-    int submitRequest(in CaptureRequest request, boolean streaming);
+    int submitRequest(in CaptureRequest request, boolean streaming,
+                      out LongParcelable lastFrameNumber);
 
-    int cancelRequest(int requestId);
+    int submitRequestList(in List<CaptureRequest> requestList, boolean streaming,
+                          out LongParcelable lastFrameNumber);
+
+    int cancelRequest(int requestId, out LongParcelable lastFrameNumber);
 
     int deleteStream(int streamId);
 
@@ -46,5 +52,5 @@
 
     int waitUntilIdle();
 
-    int flush();
+    int flush(out LongParcelable lastFrameNumber);
 }
diff --git a/core/java/android/hardware/camera2/LongParcelable.aidl b/core/java/android/hardware/camera2/LongParcelable.aidl
new file mode 100644
index 0000000..7d7e51b
--- /dev/null
+++ b/core/java/android/hardware/camera2/LongParcelable.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.camera2;
+
+/** @hide */
+parcelable LongParcelable;
\ No newline at end of file
diff --git a/core/java/android/hardware/camera2/LongParcelable.java b/core/java/android/hardware/camera2/LongParcelable.java
new file mode 100644
index 0000000..97b0631
--- /dev/null
+++ b/core/java/android/hardware/camera2/LongParcelable.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.camera2;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * @hide
+ */
+public class LongParcelable implements Parcelable {
+    private long number;
+
+    public LongParcelable() {
+        this.number = 0;
+    }
+
+    public LongParcelable(long number) {
+        this.number = number;
+    }
+
+    public static final Parcelable.Creator<LongParcelable> CREATOR =
+            new Parcelable.Creator<LongParcelable>() {
+        @Override
+        public LongParcelable createFromParcel(Parcel in) {
+            return new LongParcelable(in);
+        }
+
+        @Override
+        public LongParcelable[] newArray(int size) {
+            return new LongParcelable[size];
+        }
+    };
+
+    private LongParcelable(Parcel in) {
+        readFromParcel(in);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeLong(number);
+    }
+
+    public void readFromParcel(Parcel in) {
+        number = in.readLong();
+    }
+
+    public long getNumber() {
+        return number;
+    }
+
+    public void setNumber(long number) {
+        this.number = number;
+    }
+
+}
diff --git a/core/java/android/hardware/camera2/impl/CameraDevice.java b/core/java/android/hardware/camera2/impl/CameraDevice.java
index 40586f0..988f8f9 100644
--- a/core/java/android/hardware/camera2/impl/CameraDevice.java
+++ b/core/java/android/hardware/camera2/impl/CameraDevice.java
@@ -21,8 +21,10 @@
 import android.hardware.camera2.CameraAccessException;
 import android.hardware.camera2.CaptureRequest;
 import android.hardware.camera2.CaptureResult;
+import android.hardware.camera2.CaptureResultExtras;
 import android.hardware.camera2.ICameraDeviceCallbacks;
 import android.hardware.camera2.ICameraDeviceUser;
+import android.hardware.camera2.LongParcelable;
 import android.hardware.camera2.utils.CameraBinderDecorator;
 import android.hardware.camera2.utils.CameraRuntimeException;
 import android.os.Handler;
@@ -33,10 +35,12 @@
 import android.util.SparseArray;
 import android.view.Surface;
 
+import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.TreeSet;
 
 /**
  * HAL2.1+ implementation of CameraDevice. Use CameraManager#open to instantiate
@@ -69,10 +73,24 @@
 
     private final String mCameraId;
 
+    /**
+     * A list tracking request and its expected last frame.
+     * Updated when calling ICameraDeviceUser methods.
+     */
+    private final List<SimpleEntry</*frameNumber*/Long, /*requestId*/Integer>>
+            mFrameNumberRequestPairs = new ArrayList<SimpleEntry<Long, Integer>>();
+
+    /**
+     * An object tracking received frame numbers.
+     * Updated when receiving callbacks from ICameraDeviceCallbacks.
+     */
+    private final FrameNumberTracker mFrameNumberTracker = new FrameNumberTracker();
+
     // Runnables for all state transitions, except error, which needs the
     // error code argument
 
     private final Runnable mCallOnOpened = new Runnable() {
+        @Override
         public void run() {
             if (!CameraDevice.this.isClosed()) {
                 mDeviceListener.onOpened(CameraDevice.this);
@@ -81,6 +99,7 @@
     };
 
     private final Runnable mCallOnUnconfigured = new Runnable() {
+        @Override
         public void run() {
             if (!CameraDevice.this.isClosed()) {
                 mDeviceListener.onUnconfigured(CameraDevice.this);
@@ -89,6 +108,7 @@
     };
 
     private final Runnable mCallOnActive = new Runnable() {
+        @Override
         public void run() {
             if (!CameraDevice.this.isClosed()) {
                 mDeviceListener.onActive(CameraDevice.this);
@@ -97,6 +117,7 @@
     };
 
     private final Runnable mCallOnBusy = new Runnable() {
+        @Override
         public void run() {
             if (!CameraDevice.this.isClosed()) {
                 mDeviceListener.onBusy(CameraDevice.this);
@@ -105,14 +126,14 @@
     };
 
     private final Runnable mCallOnClosed = new Runnable() {
+        @Override
         public void run() {
-            if (!CameraDevice.this.isClosed()) {
-                mDeviceListener.onClosed(CameraDevice.this);
-            }
+            mDeviceListener.onClosed(CameraDevice.this);
         }
     };
 
     private final Runnable mCallOnIdle = new Runnable() {
+        @Override
         public void run() {
             if (!CameraDevice.this.isClosed()) {
                 mDeviceListener.onIdle(CameraDevice.this);
@@ -121,6 +142,7 @@
     };
 
     private final Runnable mCallOnDisconnected = new Runnable() {
+        @Override
         public void run() {
             if (!CameraDevice.this.isClosed()) {
                 mDeviceListener.onDisconnected(CameraDevice.this);
@@ -135,7 +157,14 @@
         mCameraId = cameraId;
         mDeviceListener = listener;
         mDeviceHandler = handler;
-        TAG = String.format("CameraDevice-%s-JV", mCameraId);
+
+        final int MAX_TAG_LEN = 23;
+        String tag = String.format("CameraDevice-JV-%s", mCameraId);
+        if (tag.length() > MAX_TAG_LEN) {
+            tag = tag.substring(0, MAX_TAG_LEN);
+        }
+        TAG = tag;
+
         DEBUG = Log.isLoggable(TAG, Log.DEBUG);
     }
 
@@ -251,22 +280,96 @@
     @Override
     public int capture(CaptureRequest request, CaptureListener listener, Handler handler)
             throws CameraAccessException {
-        return submitCaptureRequest(request, listener, handler, /*streaming*/false);
+        if (DEBUG) {
+            Log.d(TAG, "calling capture");
+        }
+        List<CaptureRequest> requestList = new ArrayList<CaptureRequest>();
+        requestList.add(request);
+        return submitCaptureRequest(requestList, listener, handler, /*streaming*/false);
     }
 
     @Override
     public int captureBurst(List<CaptureRequest> requests, CaptureListener listener,
             Handler handler) throws CameraAccessException {
+        // TODO: remove this. Throw IAE if the request is null or empty. Need to update API doc.
         if (requests.isEmpty()) {
             Log.w(TAG, "Capture burst request list is empty, do nothing!");
             return -1;
         }
-        // TODO
-        throw new UnsupportedOperationException("Burst capture implemented yet");
-
+        return submitCaptureRequest(requests, listener, handler, /*streaming*/false);
     }
 
-    private int submitCaptureRequest(CaptureRequest request, CaptureListener listener,
+    /**
+     * This method checks lastFrameNumber returned from ICameraDeviceUser methods for
+     * starting and stopping repeating request and flushing.
+     *
+     * <p>If lastFrameNumber is NO_FRAMES_CAPTURED, it means that the request was never
+     * sent to HAL. Then onCaptureSequenceCompleted is immediately triggered.
+     * If lastFrameNumber is non-negative, then the requestId and lastFrameNumber pair
+     * is added to the list mFrameNumberRequestPairs.</p>
+     *
+     * @param requestId the request ID of the current repeating request.
+     *
+     * @param lastFrameNumber last frame number returned from binder.
+     */
+    private void checkEarlyTriggerSequenceComplete(
+            final int requestId, final long lastFrameNumber) {
+        // lastFrameNumber being equal to NO_FRAMES_CAPTURED means that the request
+        // was never sent to HAL. Should trigger onCaptureSequenceCompleted immediately.
+        if (lastFrameNumber == CaptureListener.NO_FRAMES_CAPTURED) {
+            final CaptureListenerHolder holder;
+            int index = mCaptureListenerMap.indexOfKey(requestId);
+            holder = (index >= 0) ? mCaptureListenerMap.valueAt(index) : null;
+            if (holder != null) {
+                mCaptureListenerMap.removeAt(index);
+                if (DEBUG) {
+                    Log.v(TAG, String.format(
+                            "remove holder for requestId %d, "
+                            + "because lastFrame is %d.",
+                            requestId, lastFrameNumber));
+                }
+            }
+
+            if (holder != null) {
+                if (DEBUG) {
+                    Log.v(TAG, "immediately trigger onCaptureSequenceCompleted because"
+                            + " request did not reach HAL");
+                }
+
+                Runnable resultDispatch = new Runnable() {
+                    @Override
+                    public void run() {
+                        if (!CameraDevice.this.isClosed()) {
+                            if (DEBUG) {
+                                Log.d(TAG, String.format(
+                                        "early trigger sequence complete for request %d",
+                                        requestId));
+                            }
+                            if (lastFrameNumber < Integer.MIN_VALUE
+                                    || lastFrameNumber > Integer.MAX_VALUE) {
+                                throw new AssertionError(lastFrameNumber + " cannot be cast to int");
+                            }
+                            holder.getListener().onCaptureSequenceCompleted(
+                                    CameraDevice.this,
+                                    requestId,
+                                    (int)lastFrameNumber);
+                        }
+                    }
+                };
+                holder.getHandler().post(resultDispatch);
+            } else {
+                Log.w(TAG, String.format(
+                        "did not register listener to request %d",
+                        requestId));
+            }
+        } else {
+            mFrameNumberRequestPairs.add(
+                    new SimpleEntry<Long, Integer>(lastFrameNumber,
+                            requestId));
+        }
+    }
+
+    private int submitCaptureRequest(List<CaptureRequest> requestList, CaptureListener listener,
             Handler handler, boolean repeating) throws CameraAccessException {
 
         // Need a valid handler, or current thread needs to have a looper, if
@@ -283,21 +386,39 @@
                 stopRepeating();
             }
 
+            LongParcelable lastFrameNumberRef = new LongParcelable();
             try {
-                requestId = mRemoteDevice.submitRequest(request, repeating);
+                requestId = mRemoteDevice.submitRequestList(requestList, repeating,
+                        /*out*/lastFrameNumberRef);
+                if (DEBUG) {
+                    Log.v(TAG, "last frame number " + lastFrameNumberRef.getNumber());
+                }
             } catch (CameraRuntimeException e) {
                 throw e.asChecked();
             } catch (RemoteException e) {
                 // impossible
                 return -1;
             }
+
             if (listener != null) {
-                mCaptureListenerMap.put(requestId, new CaptureListenerHolder(listener, request,
-                        handler, repeating));
+                mCaptureListenerMap.put(requestId, new CaptureListenerHolder(listener,
+                        requestList, handler, repeating));
+            } else {
+                if (DEBUG) {
+                    Log.d(TAG, "Listen for request " + requestId + " is null");
+                }
             }
 
+            long lastFrameNumber = lastFrameNumberRef.getNumber();
+
             if (repeating) {
+                if (mRepeatingRequestId != REQUEST_ID_NONE) {
+                    checkEarlyTriggerSequenceComplete(mRepeatingRequestId, lastFrameNumber);
+                }
                 mRepeatingRequestId = requestId;
+            } else {
+                mFrameNumberRequestPairs.add(
+                        new SimpleEntry<Long, Integer>(lastFrameNumber, requestId));
             }
 
             if (mIdle) {
@@ -312,18 +433,20 @@
     @Override
     public int setRepeatingRequest(CaptureRequest request, CaptureListener listener,
             Handler handler) throws CameraAccessException {
-        return submitCaptureRequest(request, listener, handler, /*streaming*/true);
+        List<CaptureRequest> requestList = new ArrayList<CaptureRequest>();
+        requestList.add(request);
+        return submitCaptureRequest(requestList, listener, handler, /*streaming*/true);
     }
 
     @Override
     public int setRepeatingBurst(List<CaptureRequest> requests, CaptureListener listener,
             Handler handler) throws CameraAccessException {
+        // TODO: remove this. Throw IAE if the request is null or empty. Need to update API doc.
         if (requests.isEmpty()) {
             Log.w(TAG, "Set Repeating burst request list is empty, do nothing!");
             return -1;
         }
-        // TODO
-        throw new UnsupportedOperationException("Burst capture implemented yet");
+        return submitCaptureRequest(requests, listener, handler, /*streaming*/true);
     }
 
     @Override
@@ -337,10 +460,17 @@
                 mRepeatingRequestId = REQUEST_ID_NONE;
 
                 // Queue for deletion after in-flight requests finish
-                mRepeatingRequestIdDeletedList.add(requestId);
+                if (mCaptureListenerMap.get(requestId) != null) {
+                    mRepeatingRequestIdDeletedList.add(requestId);
+                }
 
                 try {
-                    mRemoteDevice.cancelRequest(requestId);
+                    LongParcelable lastFrameNumberRef = new LongParcelable();
+                    mRemoteDevice.cancelRequest(requestId, /*out*/lastFrameNumberRef);
+                    long lastFrameNumber = lastFrameNumberRef.getNumber();
+
+                    checkEarlyTriggerSequenceComplete(requestId, lastFrameNumber);
+
                 } catch (CameraRuntimeException e) {
                     throw e.asChecked();
                 } catch (RemoteException e) {
@@ -351,8 +481,7 @@
         }
     }
 
-    @Override
-    public void waitUntilIdle() throws CameraAccessException {
+    private void waitUntilIdle() throws CameraAccessException {
 
         synchronized (mLock) {
             checkIfCameraClosed();
@@ -370,8 +499,6 @@
             }
 
             mRepeatingRequestId = REQUEST_ID_NONE;
-            mRepeatingRequestIdDeletedList.clear();
-            mCaptureListenerMap.clear();
         }
     }
 
@@ -382,7 +509,13 @@
 
             mDeviceHandler.post(mCallOnBusy);
             try {
-                mRemoteDevice.flush();
+                LongParcelable lastFrameNumberRef = new LongParcelable();
+                mRemoteDevice.flush(/*out*/lastFrameNumberRef);
+                if (mRepeatingRequestId != REQUEST_ID_NONE) {
+                    long lastFrameNumber = lastFrameNumberRef.getNumber();
+                    checkEarlyTriggerSequenceComplete(mRepeatingRequestId, lastFrameNumber);
+                    mRepeatingRequestId = REQUEST_ID_NONE;
+                }
             } catch (CameraRuntimeException e) {
                 throw e.asChecked();
             } catch (RemoteException e) {
@@ -428,18 +561,18 @@
 
         private final boolean mRepeating;
         private final CaptureListener mListener;
-        private final CaptureRequest mRequest;
+        private final List<CaptureRequest> mRequestList;
         private final Handler mHandler;
 
-        CaptureListenerHolder(CaptureListener listener, CaptureRequest request, Handler handler,
-                boolean repeating) {
+        CaptureListenerHolder(CaptureListener listener, List<CaptureRequest> requestList,
+                Handler handler, boolean repeating) {
             if (listener == null || handler == null) {
                 throw new UnsupportedOperationException(
                     "Must have a valid handler and a valid listener");
             }
             mRepeating = repeating;
             mHandler = handler;
-            mRequest = request;
+            mRequestList = new ArrayList<CaptureRequest>(requestList);
             mListener = listener;
         }
 
@@ -451,8 +584,24 @@
             return mListener;
         }
 
+        public CaptureRequest getRequest(int subsequenceId) {
+            if (subsequenceId >= mRequestList.size()) {
+                throw new IllegalArgumentException(
+                        String.format(
+                                "Requested subsequenceId %d is larger than request list size %d.",
+                                subsequenceId, mRequestList.size()));
+            } else {
+                if (subsequenceId < 0) {
+                    throw new IllegalArgumentException(String.format(
+                            "Requested subsequenceId %d is negative", subsequenceId));
+                } else {
+                    return mRequestList.get(subsequenceId);
+                }
+            }
+        }
+
         public CaptureRequest getRequest() {
-            return mRequest;
+            return getRequest(0);
         }
 
         public Handler getHandler() {
@@ -461,6 +610,117 @@
 
     }
 
+    /**
+     * This class tracks the last frame number for submitted requests.
+     */
+    public class FrameNumberTracker {
+
+        private long mCompletedFrameNumber = -1;
+        private final TreeSet<Long> mFutureErrorSet = new TreeSet<Long>();
+
+        private void update() {
+            Iterator<Long> iter = mFutureErrorSet.iterator();
+            while (iter.hasNext()) {
+                long errorFrameNumber = iter.next();
+                if (errorFrameNumber == mCompletedFrameNumber + 1) {
+                    mCompletedFrameNumber++;
+                    iter.remove();
+                } else {
+                    break;
+                }
+            }
+        }
+
+        /**
+         * This function is called every time when a result or an error is received.
+         * @param frameNumber: the frame number corresponding to the result or error
+         * @param isError: true if it is an error, false if it is not an error
+         */
+        public void updateTracker(long frameNumber, boolean isError) {
+            if (isError) {
+                mFutureErrorSet.add(frameNumber);
+            } else {
+                /**
+                 * HAL cannot send an OnResultReceived for frame N unless it knows for
+                 * sure that all frames prior to N have either errored out or completed.
+                 * So if the current frame is not an error, then all previous frames
+                 * should have arrived. The following line checks whether this holds.
+                 */
+                if (frameNumber != mCompletedFrameNumber + 1) {
+                    Log.e(TAG, String.format(
+                            "result frame number %d comes out of order, should be %d + 1",
+                            frameNumber, mCompletedFrameNumber));
+                }
+                mCompletedFrameNumber++;
+            }
+            update();
+        }
+
+        public long getCompletedFrameNumber() {
+            return mCompletedFrameNumber;
+        }
+
+    }
+
+    private void checkAndFireSequenceComplete() {
+        long completedFrameNumber = mFrameNumberTracker.getCompletedFrameNumber();
+        Iterator<SimpleEntry<Long, Integer> > iter = mFrameNumberRequestPairs.iterator();
+        while (iter.hasNext()) {
+            final SimpleEntry<Long, Integer> frameNumberRequestPair = iter.next();
+            if (frameNumberRequestPair.getKey() <= completedFrameNumber) {
+
+                // remove request from mCaptureListenerMap
+                final int requestId = frameNumberRequestPair.getValue();
+                final CaptureListenerHolder holder;
+                synchronized (mLock) {
+                    int index = mCaptureListenerMap.indexOfKey(requestId);
+                    holder = (index >= 0) ? mCaptureListenerMap.valueAt(index)
+                            : null;
+                    if (holder != null) {
+                        mCaptureListenerMap.removeAt(index);
+                        if (DEBUG) {
+                            Log.v(TAG, String.format(
+                                    "remove holder for requestId %d, "
+                                    + "because lastFrame %d is <= %d",
+                                    requestId, frameNumberRequestPair.getKey(),
+                                    completedFrameNumber));
+                        }
+                    }
+                }
+                iter.remove();
+
+                // Call onCaptureSequenceCompleted
+                if (holder != null) {
+                    Runnable resultDispatch = new Runnable() {
+                        @Override
+                        public void run() {
+                            if (!CameraDevice.this.isClosed()){
+                                if (DEBUG) {
+                                    Log.d(TAG, String.format(
+                                            "fire sequence complete for request %d",
+                                            requestId));
+                                }
+
+                                long lastFrameNumber = frameNumberRequestPair.getKey();
+                                if (lastFrameNumber < Integer.MIN_VALUE
+                                        || lastFrameNumber > Integer.MAX_VALUE) {
+                                    throw new AssertionError(lastFrameNumber
+                                            + " cannot be cast to int");
+                                }
+                                holder.getListener().onCaptureSequenceCompleted(
+                                    CameraDevice.this,
+                                    requestId,
+                                    (int)lastFrameNumber);
+                            }
+                        }
+                    };
+                    holder.getHandler().post(resultDispatch);
+                }
+
+            }
+        }
+    }
+
     public class CameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub {
 
         //
@@ -495,7 +755,7 @@
         }
 
         @Override
-        public void onCameraError(final int errorCode) {
+        public void onCameraError(final int errorCode, CaptureResultExtras resultExtras) {
             Runnable r = null;
             if (isClosed()) return;
 
@@ -510,6 +770,7 @@
                     case ERROR_CAMERA_DEVICE:
                     case ERROR_CAMERA_SERVICE:
                         r = new Runnable() {
+                            @Override
                             public void run() {
                                 if (!CameraDevice.this.isClosed()) {
                                     mDeviceListener.onError(CameraDevice.this, errorCode);
@@ -520,6 +781,14 @@
                 }
                 CameraDevice.this.mDeviceHandler.post(r);
             }
+
+            // Fire onCaptureSequenceCompleted
+            if (DEBUG) {
+                Log.v(TAG, String.format("got error frame %d", resultExtras.getFrameNumber()));
+            }
+            mFrameNumberTracker.updateTracker(resultExtras.getFrameNumber(), /*error*/true);
+            checkAndFireSequenceComplete();
+
         }
 
         @Override
@@ -538,7 +807,8 @@
         }
 
         @Override
-        public void onCaptureStarted(int requestId, final long timestamp) {
+        public void onCaptureStarted(final CaptureResultExtras resultExtras, final long timestamp) {
+            int requestId = resultExtras.getRequestId();
             if (DEBUG) {
                 Log.d(TAG, "Capture started for id " + requestId);
             }
@@ -558,11 +828,12 @@
             // Dispatch capture start notice
             holder.getHandler().post(
                 new Runnable() {
+                    @Override
                     public void run() {
                         if (!CameraDevice.this.isClosed()) {
                             holder.getListener().onCaptureStarted(
                                 CameraDevice.this,
-                                holder.getRequest(),
+                                holder.getRequest(resultExtras.getSubsequenceId()),
                                 timestamp);
                         }
                     }
@@ -570,56 +841,46 @@
         }
 
         @Override
-        public void onResultReceived(int requestId, CameraMetadataNative result)
-                throws RemoteException {
+        public void onResultReceived(CameraMetadataNative result,
+                CaptureResultExtras resultExtras) throws RemoteException {
+            int requestId = resultExtras.getRequestId();
             if (DEBUG) {
-                Log.d(TAG, "Received result for id " + requestId);
+                Log.v(TAG, "Received result frame " + resultExtras.getFrameNumber() + " for id "
+                        + requestId);
             }
             final CaptureListenerHolder holder;
+            synchronized (mLock) {
+                holder = CameraDevice.this.mCaptureListenerMap.get(requestId);
+            }
 
             Boolean quirkPartial = result.get(CaptureResult.QUIRKS_PARTIAL_RESULT);
             boolean quirkIsPartialResult = (quirkPartial != null && quirkPartial);
 
-            synchronized (mLock) {
-                // TODO: move this whole map into this class to make it more testable,
-                //        exposing the methods necessary like subscribeToRequest, unsubscribe..
-                // TODO: make class static class
-
-                holder = CameraDevice.this.mCaptureListenerMap.get(requestId);
-
-                // Clean up listener once we no longer expect to see it.
-                if (holder != null && !holder.isRepeating() && !quirkIsPartialResult) {
-                    CameraDevice.this.mCaptureListenerMap.remove(requestId);
-                }
-
-                // TODO: add 'capture sequence completed' callback to the
-                // service, and clean up repeating requests there instead.
-
-                // If we received a result for a repeating request and have
-                // prior repeating requests queued for deletion, remove those
-                // requests from mCaptureListenerMap.
-                if (holder != null && holder.isRepeating() && !quirkIsPartialResult
-                        && mRepeatingRequestIdDeletedList.size() > 0) {
-                    Iterator<Integer> iter = mRepeatingRequestIdDeletedList.iterator();
-                    while (iter.hasNext()) {
-                        int deletedRequestId = iter.next();
-                        if (deletedRequestId < requestId) {
-                            CameraDevice.this.mCaptureListenerMap.remove(deletedRequestId);
-                            iter.remove();
-                        }
-                    }
-                }
-
+            // Update tracker (increment counter) when it's not a partial result.
+            if (!quirkIsPartialResult) {
+                mFrameNumberTracker.updateTracker(resultExtras.getFrameNumber(), /*error*/false);
             }
 
             // Check if we have a listener for this
             if (holder == null) {
+                if (DEBUG) {
+                    Log.d(TAG,
+                            "holder is null, early return at frame "
+                                    + resultExtras.getFrameNumber());
+                }
                 return;
             }
 
-            if (isClosed()) return;
+            if (isClosed()) {
+                if (DEBUG) {
+                    Log.d(TAG,
+                            "camera is closed, early return at frame "
+                                    + resultExtras.getFrameNumber());
+                }
+                return;
+            }
 
-            final CaptureRequest request = holder.getRequest();
+            final CaptureRequest request = holder.getRequest(resultExtras.getSubsequenceId());
             final CaptureResult resultAsCapture = new CaptureResult(result, request, requestId);
 
             Runnable resultDispatch = null;
@@ -654,6 +915,11 @@
             }
 
             holder.getHandler().post(resultDispatch);
+
+            // Fire onCaptureSequenceCompleted
+            if (!quirkIsPartialResult) {
+                checkAndFireSequenceComplete();
+            }
         }
 
     }
diff --git a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
index 072c5bb..c5e5753 100644
--- a/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
+++ b/core/java/android/hardware/camera2/impl/CameraMetadataNative.java
@@ -105,6 +105,18 @@
     }
 
     /**
+     * Set the global client-side vendor tag descriptor to allow use of vendor
+     * tags in camera applications.
+     *
+     * @return int A native status_t value corresponding to one of the
+     * {@link CameraBinderDecorator} integer constants.
+     * @see CameraBinderDecorator#throwOnError
+     *
+     * @hide
+     */
+    public static native int nativeSetupGlobalVendorTagDescriptor();
+
+    /**
      * Set a camera metadata field to a value. The field definitions can be
      * found in {@link CameraCharacteristics}, {@link CaptureResult}, and
      * {@link CaptureRequest}.
@@ -448,7 +460,11 @@
         } else if (key.equals(CaptureResult.STATISTICS_FACES)) {
             return (T) getFaces();
         } else if (key.equals(CaptureResult.STATISTICS_FACE_RECTANGLES)) {
-            return (T) fixFaceRectangles();
+            return (T) getFaceRectangles();
+        } else if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_STREAM_CONFIGURATIONS)) {
+            return (T) getAvailableStreamConfigurations();
+        } else if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_MIN_FRAME_DURATIONS)) {
+            return (T) getAvailableMinFrameDurations();
         }
 
         // For other keys, get() falls back to getBase()
@@ -457,15 +473,62 @@
 
     private int[] getAvailableFormats() {
         int[] availableFormats = getBase(CameraCharacteristics.SCALER_AVAILABLE_FORMATS);
-        for (int i = 0; i < availableFormats.length; i++) {
-            // JPEG has different value between native and managed side, need override.
-            if (availableFormats[i] == NATIVE_JPEG_FORMAT) {
-                availableFormats[i] = ImageFormat.JPEG;
+        if (availableFormats != null) {
+            for (int i = 0; i < availableFormats.length; i++) {
+                // JPEG has different value between native and managed side, need override.
+                if (availableFormats[i] == NATIVE_JPEG_FORMAT) {
+                    availableFormats[i] = ImageFormat.JPEG;
+                }
             }
         }
+
         return availableFormats;
     }
 
+    private int[] getAvailableStreamConfigurations() {
+        final int NUM_ELEMENTS_IN_CONFIG = 4;
+        int[] availableConfigs =
+                getBase(CameraCharacteristics.SCALER_AVAILABLE_STREAM_CONFIGURATIONS);
+        if (availableConfigs != null) {
+            if (availableConfigs.length % NUM_ELEMENTS_IN_CONFIG != 0) {
+                Log.w(TAG, "availableStreamConfigurations is malformed, length must be multiple"
+                        + " of " + NUM_ELEMENTS_IN_CONFIG);
+                return availableConfigs;
+            }
+
+            for (int i = 0; i < availableConfigs.length; i += NUM_ELEMENTS_IN_CONFIG) {
+                // JPEG has different value between native and managed side, need override.
+                if (availableConfigs[i] == NATIVE_JPEG_FORMAT) {
+                    availableConfigs[i] = ImageFormat.JPEG;
+                }
+            }
+        }
+
+        return availableConfigs;
+    }
+
+    private long[] getAvailableMinFrameDurations() {
+        final int NUM_ELEMENTS_IN_DURATION = 4;
+        long[] availableMinDurations =
+                getBase(CameraCharacteristics.SCALER_AVAILABLE_MIN_FRAME_DURATIONS);
+        if (availableMinDurations != null) {
+            if (availableMinDurations.length % NUM_ELEMENTS_IN_DURATION != 0) {
+                Log.w(TAG, "availableStreamConfigurations is malformed, length must be multiple"
+                        + " of " + NUM_ELEMENTS_IN_DURATION);
+                return availableMinDurations;
+            }
+
+            for (int i = 0; i < availableMinDurations.length; i += NUM_ELEMENTS_IN_DURATION) {
+                // JPEG has different value between native and managed side, need override.
+                if (availableMinDurations[i] == NATIVE_JPEG_FORMAT) {
+                    availableMinDurations[i] = ImageFormat.JPEG;
+                }
+            }
+        }
+
+        return availableMinDurations;
+    }
+
     private Face[] getFaces() {
         final int FACE_LANDMARK_SIZE = 6;
 
@@ -550,7 +613,7 @@
     // (left, top, width, height) at the native level, so the normal Rect
     // conversion that does (l, t, w, h) -> (l, t, r, b) is unnecessary. Undo
     // that conversion here for just the faces.
-    private Rect[] fixFaceRectangles() {
+    private Rect[] getFaceRectangles() {
         Rect[] faceRectangles = getBase(CaptureResult.STATISTICS_FACE_RECTANGLES);
         if (faceRectangles == null) return null;
 
@@ -590,12 +653,58 @@
     private <T> boolean setOverride(Key<T> key, T value) {
         if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_FORMATS)) {
             return setAvailableFormats((int[]) value);
+        } else if (key.equals(CaptureResult.STATISTICS_FACE_RECTANGLES)) {
+            return setFaceRectangles((Rect[]) value);
+        } else if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_STREAM_CONFIGURATIONS)) {
+            return setAvailableStreamConfigurations((int[])value);
+        } else if (key.equals(CameraCharacteristics.SCALER_AVAILABLE_MIN_FRAME_DURATIONS)) {
+            return setAvailableMinFrameDurations((long[])value);
         }
 
         // For other keys, set() falls back to setBase().
         return false;
     }
 
+    private boolean setAvailableStreamConfigurations(int[] value) {
+        final int NUM_ELEMENTS_IN_CONFIG = 4;
+        int[] availableConfigs = value;
+        if (value == null) {
+            // Let setBase() to handle the null value case.
+            return false;
+        }
+
+        int[] newValues = new int[availableConfigs.length];
+        for (int i = 0; i < availableConfigs.length; i++) {
+            newValues[i] = availableConfigs[i];
+            if (i % NUM_ELEMENTS_IN_CONFIG == 0 && availableConfigs[i] == ImageFormat.JPEG) {
+                newValues[i] = NATIVE_JPEG_FORMAT;
+            }
+        }
+
+        setBase(CameraCharacteristics.SCALER_AVAILABLE_STREAM_CONFIGURATIONS, newValues);
+        return true;
+    }
+
+    private boolean setAvailableMinFrameDurations(long[] value) {
+        final int NUM_ELEMENTS_IN_DURATION = 4;
+        long[] availableDurations = value;
+        if (value == null) {
+            // Let setBase() to handle the null value case.
+            return false;
+        }
+
+        long[] newValues = new long[availableDurations.length];
+        for (int i = 0; i < availableDurations.length; i++) {
+            newValues[i] = availableDurations[i];
+            if (i % NUM_ELEMENTS_IN_DURATION == 0 && availableDurations[i] == ImageFormat.JPEG) {
+                newValues[i] = NATIVE_JPEG_FORMAT;
+            }
+        }
+
+        setBase(CameraCharacteristics.SCALER_AVAILABLE_MIN_FRAME_DURATIONS, newValues);
+        return true;
+    }
+
     private boolean setAvailableFormats(int[] value) {
         int[] availableFormat = value;
         if (value == null) {
@@ -615,6 +724,36 @@
         return true;
     }
 
+    /**
+     * Convert Face Rectangles from managed side to native side as they have different definitions.
+     * <p>
+     * Managed side face rectangles are defined as: left, top, width, height.
+     * Native side face rectangles are defined as: left, top, right, bottom.
+     * The input face rectangle need to be converted to native side definition when set is called.
+     * </p>
+     *
+     * @param faceRects Input face rectangles.
+     * @return true if face rectangles can be set successfully. Otherwise, Let the caller
+     *             (setBase) to handle it appropriately.
+     */
+    private boolean setFaceRectangles(Rect[] faceRects) {
+        if (faceRects == null) {
+            return false;
+        }
+
+        Rect[] newFaceRects = new Rect[faceRects.length];
+        for (int i = 0; i < newFaceRects.length; i++) {
+            newFaceRects[i] = new Rect(
+                    faceRects[i].left,
+                    faceRects[i].top,
+                    faceRects[i].right + faceRects[i].left,
+                    faceRects[i].bottom + faceRects[i].top);
+        }
+
+        setBase(CaptureResult.STATISTICS_FACE_RECTANGLES, newFaceRects);
+        return true;
+    }
+
     private long mMetadataPtr; // native CameraMetadata*
 
     private native long nativeAllocate();
diff --git a/core/java/android/hardware/camera2/package.html b/core/java/android/hardware/camera2/package.html
index c619984..9f6c2a9 100644
--- a/core/java/android/hardware/camera2/package.html
+++ b/core/java/android/hardware/camera2/package.html
@@ -80,7 +80,5 @@
 asynchronously relative to the output CaptureResult, sometimes
 substantially later.</p>
 
-{@hide}
-
 </BODY>
 </HTML>
diff --git a/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java b/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
index e535e00..328ccbe 100644
--- a/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
+++ b/core/java/android/hardware/camera2/utils/CameraBinderDecorator.java
@@ -64,47 +64,7 @@
             // int return type => status_t => convert to exception
             if (m.getReturnType() == Integer.TYPE) {
                 int returnValue = (Integer) result;
-
-                switch (returnValue) {
-                    case NO_ERROR:
-                        return;
-                    case PERMISSION_DENIED:
-                        throw new SecurityException("Lacking privileges to access camera service");
-                    case ALREADY_EXISTS:
-                        // This should be handled at the call site. Typically this isn't bad,
-                        // just means we tried to do an operation that already completed.
-                        return;
-                    case BAD_VALUE:
-                        throw new IllegalArgumentException("Bad argument passed to camera service");
-                    case DEAD_OBJECT:
-                        UncheckedThrow.throwAnyException(new CameraRuntimeException(
-                                CAMERA_DISCONNECTED));
-                    case EACCES:
-                        UncheckedThrow.throwAnyException(new CameraRuntimeException(
-                                CAMERA_DISABLED));
-                    case EBUSY:
-                        UncheckedThrow.throwAnyException(new CameraRuntimeException(
-                                CAMERA_IN_USE));
-                    case EUSERS:
-                        UncheckedThrow.throwAnyException(new CameraRuntimeException(
-                                MAX_CAMERAS_IN_USE));
-                    case ENODEV:
-                        UncheckedThrow.throwAnyException(new CameraRuntimeException(
-                                CAMERA_DISCONNECTED));
-                    case EOPNOTSUPP:
-                        UncheckedThrow.throwAnyException(new CameraRuntimeException(
-                                CAMERA_DEPRECATED_HAL));
-                }
-
-                /**
-                 * Trap the rest of the negative return values. If we have known
-                 * error codes i.e. ALREADY_EXISTS that aren't really runtime
-                 * errors, then add them to the top switch statement
-                 */
-                if (returnValue < 0) {
-                    throw new UnsupportedOperationException(String.format("Unknown error %d",
-                            returnValue));
-                }
+                throwOnError(returnValue);
             }
         }
 
@@ -131,6 +91,54 @@
     }
 
     /**
+     * Throw error codes returned by the camera service as exceptions.
+     *
+     * @param errorFlag error to throw as an exception.
+     */
+    public static void throwOnError(int errorFlag) {
+        switch (errorFlag) {
+            case NO_ERROR:
+                return;
+            case PERMISSION_DENIED:
+                throw new SecurityException("Lacking privileges to access camera service");
+            case ALREADY_EXISTS:
+                // This should be handled at the call site. Typically this isn't bad,
+                // just means we tried to do an operation that already completed.
+                return;
+            case BAD_VALUE:
+                throw new IllegalArgumentException("Bad argument passed to camera service");
+            case DEAD_OBJECT:
+                UncheckedThrow.throwAnyException(new CameraRuntimeException(
+                        CAMERA_DISCONNECTED));
+            case EACCES:
+                UncheckedThrow.throwAnyException(new CameraRuntimeException(
+                        CAMERA_DISABLED));
+            case EBUSY:
+                UncheckedThrow.throwAnyException(new CameraRuntimeException(
+                        CAMERA_IN_USE));
+            case EUSERS:
+                UncheckedThrow.throwAnyException(new CameraRuntimeException(
+                        MAX_CAMERAS_IN_USE));
+            case ENODEV:
+                UncheckedThrow.throwAnyException(new CameraRuntimeException(
+                        CAMERA_DISCONNECTED));
+            case EOPNOTSUPP:
+                UncheckedThrow.throwAnyException(new CameraRuntimeException(
+                        CAMERA_DEPRECATED_HAL));
+        }
+
+        /**
+         * Trap the rest of the negative return values. If we have known
+         * error codes i.e. ALREADY_EXISTS that aren't really runtime
+         * errors, then add them to the top switch statement
+         */
+        if (errorFlag < 0) {
+            throw new UnsupportedOperationException(String.format("Unknown error %d",
+                    errorFlag));
+        }
+    }
+
+    /**
      * <p>
      * Wraps the type T with a proxy that will check 'status_t' return codes
      * from the native side of the camera service, and throw Java exceptions
diff --git a/core/java/android/hardware/display/WifiDisplayStatus.java b/core/java/android/hardware/display/WifiDisplayStatus.java
index 5216727..b645662 100644
--- a/core/java/android/hardware/display/WifiDisplayStatus.java
+++ b/core/java/android/hardware/display/WifiDisplayStatus.java
@@ -20,8 +20,6 @@
 import android.os.Parcelable;
 
 import java.util.Arrays;
-import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Describes the current global state of Wifi display connectivity, including the
diff --git a/core/java/android/hardware/hdmi/HdmiCec.java b/core/java/android/hardware/hdmi/HdmiCec.java
index 8578a32..eafaed6 100644
--- a/core/java/android/hardware/hdmi/HdmiCec.java
+++ b/core/java/android/hardware/hdmi/HdmiCec.java
@@ -85,7 +85,7 @@
     public static final int ADDR_RESERVED_2 = 13;
 
     /** Logical address for TV other than the one assigned with {@link #ADDR_TV} */
-    public static final int ADDR_FREE_USE = 14;
+    public static final int ADDR_SPECIFIC_USE = 14;
 
     /** Logical address for devices to which address cannot be allocated */
     public static final int ADDR_UNREGISTERED = 15;
@@ -179,6 +179,7 @@
         DEVICE_RECORDER,  // ADDR_RECORDER_3
         DEVICE_TUNER,  // ADDR_TUNER_4
         DEVICE_PLAYBACK,  // ADDR_PLAYBACK_3
+        DEVICE_TV,  // ADDR_SPECIFIC_USE
     };
 
     private static final String[] DEFAULT_NAMES = {
@@ -194,6 +195,7 @@
         "Recorder_3",
         "Tuner_4",
         "Playback_3",
+        "Secondary_TV",
     };
 
     private HdmiCec() { }  // Prevents instantiation.
@@ -221,9 +223,7 @@
      * @return true if the given address is valid
      */
     public static boolean isValidAddress(int address) {
-        // TODO: We leave out the address 'free use(14)' for now. Check this later
-        //       again to make sure it is a valid address for communication.
-        return (ADDR_TV <= address && address <= ADDR_PLAYBACK_3);
+        return (ADDR_TV <= address && address <= ADDR_SPECIFIC_USE);
     }
 
     /**
diff --git a/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
new file mode 100644
index 0000000..9698445
--- /dev/null
+++ b/core/java/android/hardware/hdmi/HdmiCecDeviceInfo.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.hdmi;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A class to encapsulate device information for HDMI-CEC. This container
+ * include basic information such as logical address, physical address and
+ * device type, and additional information like vendor id and osd name.
+ */
+public final class HdmiCecDeviceInfo implements Parcelable {
+    // Logical address, phsical address, device type, vendor id and display name
+    // are immutable value.
+    private final int mLogicalAddress;
+    private final int mPhysicalAddress;
+    private final int mDeviceType;
+    private final int mVendorId;
+    private final String mDisplayName;
+
+
+    /**
+     * A helper class to deserialize {@link HdmiCecDeviceInfo} for a parcel.
+     */
+    public static final Parcelable.Creator<HdmiCecDeviceInfo> CREATOR =
+            new Parcelable.Creator<HdmiCecDeviceInfo>() {
+                @Override
+                public HdmiCecDeviceInfo createFromParcel(Parcel source) {
+                    int logicalAddress = source.readInt();
+                    int physicalAddress = source.readInt();
+                    int deviceType = source.readInt();
+                    int vendorId = source.readInt();
+                    String displayName = source.readString();
+                    return new HdmiCecDeviceInfo(logicalAddress, physicalAddress, deviceType,
+                            vendorId, displayName);
+                }
+
+                @Override
+                public HdmiCecDeviceInfo[] newArray(int size) {
+                    return new HdmiCecDeviceInfo[size];
+                }
+            };
+
+    /**
+     * Constructor.
+     *
+     * @param logicalAddress logical address of HDMI-Cec device.
+     *                       For more details, refer {@link HdmiCec}
+     * @param physicalAddress physical address of HDMI-Cec device
+     * @param deviceType type of device. For more details, refer {@link HdmiCec}
+     * @param vendorId vendor id of device. It's used for vendor specific command
+     * @param displayName name of device
+     * @hide
+     */
+    public HdmiCecDeviceInfo(int logicalAddress, int physicalAddress, int deviceType,
+            int vendorId, String displayName) {
+        mLogicalAddress = logicalAddress;
+        mPhysicalAddress = physicalAddress;
+        mDeviceType = deviceType;
+        mDisplayName = displayName;
+        mVendorId = vendorId;
+    }
+
+    /**
+     * Return the logical address of the device. It can have 0-15 values.
+     * For more details, refer constants between {@link HdmiCec#ADDR_TV}
+     * and {@link HdmiCec#ADDR_UNREGISTERED}.
+     */
+    public int getLogicalAddress() {
+        return mLogicalAddress;
+    }
+
+    /**
+     * Return the physical address of the device.
+     */
+    public int getPhysicalAddress() {
+        return mPhysicalAddress;
+    }
+
+    /**
+     * Return type of the device. For more details, refer constants between
+     * {@link HdmiCec#DEVICE_TV} and {@link HdmiCec#DEVICE_INACTIVE}.
+     */
+    public int getDeviceType() {
+        return mDeviceType;
+    }
+
+    /**
+     * Return display (OSD) name of the device.
+     */
+    public String getDisplayName() {
+        return mDisplayName;
+    }
+
+    /**
+     * Return vendor id of the device. Vendor id is used to distinguish devices
+     * built by other manufactures. This is required for vendor-specific command
+     * on CEC standard.
+     */
+    public int getVendorId() {
+        return mVendorId;
+    }
+
+    /**
+     * Describe the kinds of special objects contained in this Parcelable's
+     * marshalled representation.
+     */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * Serialize this object into a {@link Parcel}.
+     *
+     * @param dest The Parcel in which the object should be written.
+     * @param flags Additional flags about how the object should be written.
+     *        May be 0 or {@link Parcelable#PARCELABLE_WRITE_RETURN_VALUE}.
+     */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mLogicalAddress);
+        dest.writeInt(mPhysicalAddress);
+        dest.writeInt(mDeviceType);
+        dest.writeInt(mVendorId);
+        dest.writeString(mDisplayName);
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer s = new StringBuffer();
+        s.append("logical_address: ").append(mLogicalAddress).append(", ");
+        s.append("physical_address: ").append(mPhysicalAddress).append(", ");
+        s.append("device_type: ").append(mDeviceType).append(", ");
+        s.append("vendor_id: ").append(mVendorId).append(", ");
+        s.append("display_name: ").append(mDisplayName);
+        return s.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (!(obj instanceof HdmiCecDeviceInfo)) {
+            return false;
+        }
+
+        HdmiCecDeviceInfo other = (HdmiCecDeviceInfo) obj;
+        return mLogicalAddress == other.mLogicalAddress
+                && mPhysicalAddress == other.mPhysicalAddress
+                && mDeviceType == other.mDeviceType
+                && mVendorId == other.mVendorId
+                && mDisplayName.equals(other.mDisplayName);
+    }
+}
diff --git a/core/java/android/hardware/input/IInputManager.aidl b/core/java/android/hardware/input/IInputManager.aidl
index f1e7e98..465d142 100644
--- a/core/java/android/hardware/input/IInputManager.aidl
+++ b/core/java/android/hardware/input/IInputManager.aidl
@@ -19,6 +19,7 @@
 import android.hardware.input.InputDeviceIdentifier;
 import android.hardware.input.KeyboardLayout;
 import android.hardware.input.IInputDevicesChangedListener;
+import android.hardware.input.TouchCalibration;
 import android.os.IBinder;
 import android.view.InputDevice;
 import android.view.InputEvent;
@@ -39,6 +40,11 @@
     // applications, the caller must have the INJECT_EVENTS permission.
     boolean injectInputEvent(in InputEvent ev, int mode);
 
+    // Calibrate input device position
+    TouchCalibration getTouchCalibrationForInputDevice(String inputDeviceDescriptor, int rotation);
+    void setTouchCalibrationForInputDevice(String inputDeviceDescriptor, int rotation,
+            in TouchCalibration calibration);
+
     // Keyboard layouts configuration.
     KeyboardLayout[] getKeyboardLayouts();
     KeyboardLayout getKeyboardLayout(String keyboardLayoutDescriptor);
diff --git a/core/java/android/hardware/input/InputManager.java b/core/java/android/hardware/input/InputManager.java
index a2aeafb..b5efa8e 100644
--- a/core/java/android/hardware/input/InputManager.java
+++ b/core/java/android/hardware/input/InputManager.java
@@ -500,6 +500,45 @@
     }
 
     /**
+     * Gets the TouchCalibration applied to the specified input device's coordinates.
+     *
+     * @param inputDeviceDescriptor The input device descriptor.
+     * @return The TouchCalibration currently assigned for use with the given
+     * input device. If none is set, an identity TouchCalibration is returned.
+     *
+     * @hide
+     */
+    public TouchCalibration getTouchCalibration(String inputDeviceDescriptor, int surfaceRotation) {
+        try {
+            return mIm.getTouchCalibrationForInputDevice(inputDeviceDescriptor, surfaceRotation);
+        } catch (RemoteException ex) {
+            Log.w(TAG, "Could not get calibration matrix for input device.", ex);
+            return TouchCalibration.IDENTITY;
+        }
+    }
+
+    /**
+     * Sets the TouchCalibration to apply to the specified input device's coordinates.
+     * <p>
+     * This method may have the side-effect of causing the input device in question
+     * to be reconfigured. Requires {@link android.Manifest.permissions.SET_INPUT_CALIBRATION}.
+     * </p>
+     *
+     * @param inputDeviceDescriptor The input device descriptor.
+     * @param calibration The calibration to be applied
+     *
+     * @hide
+     */
+    public void setTouchCalibration(String inputDeviceDescriptor, int surfaceRotation,
+            TouchCalibration calibration) {
+        try {
+            mIm.setTouchCalibrationForInputDevice(inputDeviceDescriptor, surfaceRotation, calibration);
+        } catch (RemoteException ex) {
+            Log.w(TAG, "Could not set calibration matrix for input device.", ex);
+        }
+    }
+
+    /**
      * Gets the mouse pointer speed.
      * <p>
      * Only returns the permanent mouse pointer speed.  Ignores any temporary pointer
@@ -814,13 +853,21 @@
             return true;
         }
 
+        /**
+         * @hide
+         */
         @Override
-        public void vibrate(long milliseconds) {
+        public void vibrate(int uid, String opPkg, long milliseconds,
+                int streamHint) {
             vibrate(new long[] { 0, milliseconds}, -1);
         }
 
+        /**
+         * @hide
+         */
         @Override
-        public void vibrate(long[] pattern, int repeat) {
+        public void vibrate(int uid, String opPkg, long[] pattern, int repeat,
+                int streamHint) {
             if (repeat >= pattern.length) {
                 throw new ArrayIndexOutOfBoundsException();
             }
@@ -831,22 +878,6 @@
             }
         }
 
-        /**
-         * @hide
-         */
-        @Override
-        public void vibrate(int owningUid, String owningPackage, long milliseconds) {
-            vibrate(milliseconds);
-        }
-
-        /**
-         * @hide
-         */
-        @Override
-        public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat) {
-            vibrate(pattern, repeat);
-        }
-
         @Override
         public void cancel() {
             try {
diff --git a/core/java/android/hardware/input/TouchCalibration.aidl b/core/java/android/hardware/input/TouchCalibration.aidl
new file mode 100644
index 0000000..2c28774
--- /dev/null
+++ b/core/java/android/hardware/input/TouchCalibration.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.input;
+
+parcelable TouchCalibration;
diff --git a/core/java/android/hardware/input/TouchCalibration.java b/core/java/android/hardware/input/TouchCalibration.java
new file mode 100644
index 0000000..025fad0
--- /dev/null
+++ b/core/java/android/hardware/input/TouchCalibration.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.input;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Encapsulates calibration data for input devices.
+ *
+ * @hide
+ */
+public class TouchCalibration implements Parcelable {
+
+    public static final TouchCalibration IDENTITY = new TouchCalibration();
+
+    public static final Parcelable.Creator<TouchCalibration> CREATOR
+            = new Parcelable.Creator<TouchCalibration>() {
+        public TouchCalibration createFromParcel(Parcel in) {
+            return new TouchCalibration(in);
+        }
+
+        public TouchCalibration[] newArray(int size) {
+            return new TouchCalibration[size];
+        }
+    };
+
+    private final float mXScale, mXYMix, mXOffset;
+    private final float mYXMix, mYScale, mYOffset;
+
+    /**
+     * Create a new TouchCalibration initialized to the identity transformation.
+     */
+    public TouchCalibration() {
+        this(1,0,0,0,1,0);
+    }
+
+    /**
+     * Create a new TouchCalibration from affine transformation paramters.
+     * @param xScale   Influence of input x-axis value on output x-axis value.
+     * @param xyMix    Influence of input y-axis value on output x-axis value.
+     * @param xOffset  Constant offset to be applied to output x-axis value.
+     * @param yXMix    Influence of input x-axis value on output y-axis value.
+     * @param yScale   Influence of input y-axis value on output y-axis value.
+     * @param yOffset  Constant offset to be applied to output y-axis value.
+     */
+    public TouchCalibration(float xScale, float xyMix, float xOffset,
+            float yxMix, float yScale, float yOffset) {
+        mXScale  = xScale;
+        mXYMix   = xyMix;
+        mXOffset = xOffset;
+        mYXMix   = yxMix;
+        mYScale  = yScale;
+        mYOffset = yOffset;
+    }
+
+    public TouchCalibration(Parcel in) {
+        mXScale  = in.readFloat();
+        mXYMix   = in.readFloat();
+        mXOffset = in.readFloat();
+        mYXMix   = in.readFloat();
+        mYScale  = in.readFloat();
+        mYOffset = in.readFloat();
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeFloat(mXScale);
+        dest.writeFloat(mXYMix);
+        dest.writeFloat(mXOffset);
+        dest.writeFloat(mYXMix);
+        dest.writeFloat(mYScale);
+        dest.writeFloat(mYOffset);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public float[] getAffineTransform() {
+        return new float[] { mXScale, mXYMix, mXOffset, mYXMix, mYScale, mYOffset };
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this) {
+            return true;
+        } else if (obj instanceof TouchCalibration) {
+            TouchCalibration cal = (TouchCalibration)obj;
+
+            return (cal.mXScale  == mXScale)  &&
+                   (cal.mXYMix   == mXYMix)   &&
+                   (cal.mXOffset == mXOffset) &&
+                   (cal.mYXMix   == mYXMix)   &&
+                   (cal.mYScale  == mYScale)  &&
+                   (cal.mYOffset == mYOffset);
+        } else {
+            return false;
+        }
+    }
+
+    @Override
+    public int hashCode() {
+        return Float.floatToIntBits(mXScale)  ^
+               Float.floatToIntBits(mXYMix)   ^
+               Float.floatToIntBits(mXOffset) ^
+               Float.floatToIntBits(mYXMix)   ^
+               Float.floatToIntBits(mYScale)  ^
+               Float.floatToIntBits(mYOffset);
+    }
+}
diff --git a/core/java/android/hardware/location/GeofenceHardware.java b/core/java/android/hardware/location/GeofenceHardware.java
index 21de9f5..4c074e9 100644
--- a/core/java/android/hardware/location/GeofenceHardware.java
+++ b/core/java/android/hardware/location/GeofenceHardware.java
@@ -79,7 +79,7 @@
      */
     public static final int MONITOR_UNSUPPORTED = 2;
 
-    // The following constants need to match geofence flags in gps.h
+    // The following constants need to match geofence flags in gps.h and fused_location.h
     /**
      * The constant to indicate that the user has entered the geofence.
      */
@@ -92,7 +92,7 @@
 
     /**
      * The constant to indicate that the user is uncertain with respect to a
-     * geofence.                                                  nn
+     * geofence.
      */
     public static final int GEOFENCE_UNCERTAIN = 1<<2L;
 
diff --git a/core/java/android/hardware/location/GeofenceHardwareRequest.java b/core/java/android/hardware/location/GeofenceHardwareRequest.java
index 6e7b592..796d7f8 100644
--- a/core/java/android/hardware/location/GeofenceHardwareRequest.java
+++ b/core/java/android/hardware/location/GeofenceHardwareRequest.java
@@ -16,8 +16,6 @@
 
 package android.hardware.location;
 
-import android.location.Location;
-
 /**
  * This class represents the characteristics of the geofence.
  *
diff --git a/core/java/android/hardware/usb/UsbAccessory.java b/core/java/android/hardware/usb/UsbAccessory.java
index 5719452..2f9178c 100644
--- a/core/java/android/hardware/usb/UsbAccessory.java
+++ b/core/java/android/hardware/usb/UsbAccessory.java
@@ -16,10 +16,8 @@
 
 package android.hardware.usb;
 
-import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.util.Log;
 
 /**
  * A class representing a USB accessory, which is an external hardware component
diff --git a/core/java/android/hardware/usb/UsbConfiguration.java b/core/java/android/hardware/usb/UsbConfiguration.java
new file mode 100644
index 0000000..92d6f75
--- /dev/null
+++ b/core/java/android/hardware/usb/UsbConfiguration.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2014 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 android.hardware.usb;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A class representing a configuration on a {@link UsbDevice}.
+ * A USB configuration can have one or more interfaces, each one providing a different
+ * piece of functionality, separate from the other interfaces.
+ * An interface will have one or more {@link UsbEndpoint}s, which are the
+ * channels by which the host transfers data with the device.
+ *
+ * <div class="special reference">
+ * <h3>Developer Guides</h3>
+ * <p>For more information about communicating with USB hardware, read the
+ * <a href="{@docRoot}guide/topics/usb/index.html">USB</a> developer guide.</p>
+ * </div>
+ */
+public class UsbConfiguration implements Parcelable {
+
+    private final int mId;
+    private final String mName;
+    private final int mAttributes;
+    private final int mMaxPower;
+    private Parcelable[] mInterfaces;
+
+    /**
+     * Mask for "self-powered" bit in the configuration's attributes.
+     * @see #getAttributes
+     */
+    public static final int ATTR_SELF_POWERED_MASK = 1 << 6;
+
+    /**
+     * Mask for "remote wakeup" bit in the configuration's attributes.
+     * @see #getAttributes
+     */
+    public static final int ATTR_REMOTE_WAKEUP_MASK = 1 << 5;
+
+    /**
+     * UsbConfiguration should only be instantiated by UsbService implementation
+     * @hide
+     */
+    public UsbConfiguration(int id, String name, int attributes, int maxPower) {
+        mId = id;
+        mName = name;
+        mAttributes = attributes;
+        mMaxPower = maxPower;
+    }
+
+    /**
+     * Returns the configuration's ID field.
+     * This is an integer that uniquely identifies the configuration on the device.
+     *
+     * @return the configuration's ID
+     */
+    public int getId() {
+        return mId;
+    }
+
+    /**
+     * Returns the configuration's name.
+     *
+     * @return the configuration's name
+     */
+    public String getName() {
+        return mName;
+    }
+
+    /**
+     * Returns the configuration's attributes field.
+     * This field contains a bit field with the following flags:
+     *
+     * Bit 7: always set to 1
+     * Bit 6: self-powered
+     * Bit 5: remote wakeup enabled
+     * Bit 0-4: reserved
+     * @see #ATTR_SELF_POWERED_MASK
+     * @see #ATTR_REMOTE_WAKEUP_MASK
+     * @return the configuration's attributes
+     */
+    public int getAttributes() {
+        return mAttributes;
+    }
+
+    /**
+     * Returns the configuration's max power consumption, in milliamps.
+     *
+     * @return the configuration's max power
+     */
+    public int getMaxPower() {
+        return mMaxPower * 2;
+    }
+
+    /**
+     * Returns the number of {@link UsbInterface}s this configuration contains.
+     *
+     * @return the number of endpoints
+     */
+    public int getInterfaceCount() {
+        return mInterfaces.length;
+    }
+
+    /**
+     * Returns the {@link UsbInterface} at the given index.
+     *
+     * @return the interface
+     */
+    public UsbInterface getInterface(int index) {
+        return (UsbInterface)mInterfaces[index];
+    }
+
+    /**
+     * Only used by UsbService implementation
+     * @hide
+     */
+    public void setInterfaces(Parcelable[] interfaces) {
+        mInterfaces = interfaces;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder("UsbConfiguration[mId=" + mId +
+                ",mName=" + mName + ",mAttributes=" + mAttributes +
+                ",mMaxPower=" + mMaxPower + ",mInterfaces=[");
+        for (int i = 0; i < mInterfaces.length; i++) {
+            builder.append("\n");
+            builder.append(mInterfaces[i].toString());
+        }
+        builder.append("]");
+        return builder.toString();
+    }
+
+    public static final Parcelable.Creator<UsbConfiguration> CREATOR =
+        new Parcelable.Creator<UsbConfiguration>() {
+        public UsbConfiguration createFromParcel(Parcel in) {
+            int id = in.readInt();
+            String name = in.readString();
+            int attributes = in.readInt();
+            int maxPower = in.readInt();
+            Parcelable[] interfaces = in.readParcelableArray(UsbInterface.class.getClassLoader());
+            UsbConfiguration configuration = new UsbConfiguration(id, name, attributes, maxPower);
+            configuration.setInterfaces(interfaces);
+            return configuration;
+        }
+
+        public UsbConfiguration[] newArray(int size) {
+            return new UsbConfiguration[size];
+        }
+    };
+
+    public int describeContents() {
+        return 0;
+    }
+
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeInt(mId);
+        parcel.writeString(mName);
+        parcel.writeInt(mAttributes);
+        parcel.writeInt(mMaxPower);
+        parcel.writeParcelableArray(mInterfaces, 0);
+   }
+}
diff --git a/core/java/android/hardware/usb/UsbDevice.java b/core/java/android/hardware/usb/UsbDevice.java
index d1e63f6..d90e06e 100644
--- a/core/java/android/hardware/usb/UsbDevice.java
+++ b/core/java/android/hardware/usb/UsbDevice.java
@@ -16,12 +16,8 @@
 
 package android.hardware.usb;
 
-import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.util.Log;
-
-import java.io.FileDescriptor;
 
 /**
  * This class represents a USB device attached to the android device with the android device
@@ -54,7 +50,10 @@
     private final int mClass;
     private final int mSubclass;
     private final int mProtocol;
-    private final Parcelable[] mInterfaces;
+    private Parcelable[] mConfigurations;
+
+    // list of all interfaces on the device
+    private UsbInterface[] mInterfaces;
 
     /**
      * UsbDevice should only be instantiated by UsbService implementation
@@ -62,8 +61,7 @@
      */
     public UsbDevice(String name, int vendorId, int productId,
             int Class, int subClass, int protocol,
-            String manufacturerName, String productName, String serialNumber,
-            Parcelable[] interfaces) {
+            String manufacturerName, String productName, String serialNumber) {
         mName = name;
         mVendorId = vendorId;
         mProductId = productId;
@@ -73,7 +71,6 @@
         mManufacturerName = manufacturerName;
         mProductName = productName;
         mSerialNumber = serialNumber;
-        mInterfaces = interfaces;
     }
 
     /**
@@ -173,21 +170,74 @@
     }
 
     /**
+     * Returns the number of {@link UsbConfiguration}s this device contains.
+     *
+     * @return the number of configurations
+     */
+    public int getConfigurationCount() {
+        return mConfigurations.length;
+    }
+
+    /**
+     * Returns the {@link UsbConfiguration} at the given index.
+     *
+     * @return the configuration
+     */
+    public UsbConfiguration getConfiguration(int index) {
+        return (UsbConfiguration)mConfigurations[index];
+    }
+
+    private UsbInterface[] getInterfaceList() {
+        if (mInterfaces == null) {
+            int configurationCount = mConfigurations.length;
+            int interfaceCount = 0;
+            for (int i = 0; i < configurationCount; i++) {
+                UsbConfiguration configuration = (UsbConfiguration)mConfigurations[i];
+                interfaceCount += configuration.getInterfaceCount();
+            }
+
+            mInterfaces = new UsbInterface[interfaceCount];
+            int offset = 0;
+            for (int i = 0; i < configurationCount; i++) {
+                UsbConfiguration configuration = (UsbConfiguration)mConfigurations[i];
+                interfaceCount = configuration.getInterfaceCount();
+                for (int j = 0; j < interfaceCount; j++) {
+                    mInterfaces[offset++] = configuration.getInterface(j);
+                }
+            }
+        }
+
+        return mInterfaces;
+    }
+
+    /**
      * Returns the number of {@link UsbInterface}s this device contains.
+     * For devices with multiple configurations, you will probably want to use
+     * {@link UsbConfiguration#getInterfaceCount} instead.
      *
      * @return the number of interfaces
      */
     public int getInterfaceCount() {
-        return mInterfaces.length;
+        return getInterfaceList().length;
     }
 
     /**
      * Returns the {@link UsbInterface} at the given index.
+     * For devices with multiple configurations, you will probably want to use
+     * {@link UsbConfiguration#getInterface} instead.
      *
      * @return the interface
      */
     public UsbInterface getInterface(int index) {
-        return (UsbInterface)mInterfaces[index];
+        return getInterfaceList()[index];
+    }
+
+    /**
+     * Only used by UsbService implementation
+     * @hide
+     */
+    public void setConfigurations(Parcelable[] configuration) {
+        mConfigurations = configuration;
     }
 
     @Override
@@ -208,11 +258,17 @@
 
     @Override
     public String toString() {
-        return "UsbDevice[mName=" + mName + ",mVendorId=" + mVendorId +
-                ",mProductId=" + mProductId + ",mClass=" + mClass +
-                ",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol +
+        StringBuilder builder = new StringBuilder("UsbDevice[mName=" + mName +
+                ",mVendorId=" + mVendorId + ",mProductId=" + mProductId +
+                ",mClass=" + mClass + ",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol +
                 ",mManufacturerName=" + mManufacturerName + ",mProductName=" + mProductName +
-                ",mSerialNumber=" + mSerialNumber + ",mInterfaces=" + mInterfaces + "]";
+                ",mSerialNumber=" + mSerialNumber + ",mConfigurations=[");
+        for (int i = 0; i < mConfigurations.length; i++) {
+            builder.append("\n");
+            builder.append(mConfigurations[i].toString());
+        }
+        builder.append("]");
+        return builder.toString();
     }
 
     public static final Parcelable.Creator<UsbDevice> CREATOR =
@@ -227,9 +283,11 @@
             String manufacturerName = in.readString();
             String productName = in.readString();
             String serialNumber = in.readString();
-            Parcelable[] interfaces = in.readParcelableArray(UsbInterface.class.getClassLoader());
-            return new UsbDevice(name, vendorId, productId, clasz, subClass, protocol,
-                                 manufacturerName, productName, serialNumber, interfaces);
+            Parcelable[] configurations = in.readParcelableArray(UsbInterface.class.getClassLoader());
+            UsbDevice device = new UsbDevice(name, vendorId, productId, clasz, subClass, protocol,
+                                 manufacturerName, productName, serialNumber);
+            device.setConfigurations(configurations);
+            return device;
         }
 
         public UsbDevice[] newArray(int size) {
@@ -251,7 +309,7 @@
         parcel.writeString(mManufacturerName);
         parcel.writeString(mProductName);
         parcel.writeString(mSerialNumber);
-        parcel.writeParcelableArray(mInterfaces, 0);
+        parcel.writeParcelableArray(mConfigurations, 0);
    }
 
     public static int getDeviceId(String name) {
diff --git a/core/java/android/hardware/usb/UsbDeviceConnection.java b/core/java/android/hardware/usb/UsbDeviceConnection.java
index 389475f..6283951 100644
--- a/core/java/android/hardware/usb/UsbDeviceConnection.java
+++ b/core/java/android/hardware/usb/UsbDeviceConnection.java
@@ -101,6 +101,25 @@
     }
 
     /**
+     * Sets the current {@link android.hardware.usb.UsbInterface}.
+     * Used to select between two interfaces with the same ID but different alternate setting.
+     *
+     * @return true if the interface was successfully released
+     */
+    public boolean setInterface(UsbInterface intf) {
+        return native_set_interface(intf.getId(), intf.getAlternateSetting());
+    }
+
+    /**
+     * Sets the device's current {@link android.hardware.usb.UsbConfiguration}.
+     *
+     * @return true if the configuration was successfully set
+     */
+    public boolean setConfiguration(UsbConfiguration configuration) {
+        return native_set_configuration(configuration.getId());
+    }
+
+    /**
      * Performs a control transaction on endpoint zero for this device.
      * The direction of the transfer is determined by the request type.
      * If requestType & {@link UsbConstants#USB_ENDPOINT_DIR_MASK} is
@@ -236,6 +255,8 @@
     private native byte[] native_get_desc();
     private native boolean native_claim_interface(int interfaceID, boolean force);
     private native boolean native_release_interface(int interfaceID);
+    private native boolean native_set_interface(int interfaceID, int alternateSetting);
+    private native boolean native_set_configuration(int configurationID);
     private native int native_control_request(int requestType, int request, int value,
             int index, byte[] buffer, int offset, int length, int timeout);
     private native int native_bulk_request(int endpoint, byte[] buffer,
diff --git a/core/java/android/hardware/usb/UsbEndpoint.java b/core/java/android/hardware/usb/UsbEndpoint.java
index 753a447..708d651 100644
--- a/core/java/android/hardware/usb/UsbEndpoint.java
+++ b/core/java/android/hardware/usb/UsbEndpoint.java
@@ -16,7 +16,6 @@
 
 package android.hardware.usb;
 
-import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
 
diff --git a/core/java/android/hardware/usb/UsbInterface.java b/core/java/android/hardware/usb/UsbInterface.java
index d6c54a8..de01a88 100644
--- a/core/java/android/hardware/usb/UsbInterface.java
+++ b/core/java/android/hardware/usb/UsbInterface.java
@@ -16,7 +16,6 @@
 
 package android.hardware.usb;
 
-import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
 
@@ -36,27 +35,31 @@
 public class UsbInterface implements Parcelable {
 
     private final int mId;
+    private final int mAlternateSetting;
+    private final String mName;
     private final int mClass;
     private final int mSubclass;
     private final int mProtocol;
-    private final Parcelable[] mEndpoints;
+    private Parcelable[] mEndpoints;
 
     /**
      * UsbInterface should only be instantiated by UsbService implementation
      * @hide
      */
-    public UsbInterface(int id, int Class, int subClass, int protocol,
-            Parcelable[] endpoints) {
+    public UsbInterface(int id, int alternateSetting, String name,
+            int Class, int subClass, int protocol) {
         mId = id;
+        mAlternateSetting = alternateSetting;
+        mName = name;
         mClass = Class;
         mSubclass = subClass;
         mProtocol = protocol;
-        mEndpoints = endpoints;
     }
 
     /**
-     * Returns the interface's ID field.
-     * This is an integer that uniquely identifies the interface on the device.
+     * Returns the interface's bInterfaceNumber field.
+     * This is an integer that along with the alternate setting uniquely identifies
+     * the interface on the device.
      *
      * @return the interface's ID
      */
@@ -65,6 +68,28 @@
     }
 
     /**
+     * Returns the interface's bAlternateSetting field.
+     * This is an integer that along with the ID uniquely identifies
+     * the interface on the device.
+     * {@link UsbDeviceConnection#setInterface} can be used to switch between
+     * two interfaces with the same ID but different alternate setting.
+     *
+     * @return the interface's alternate setting
+     */
+    public int getAlternateSetting() {
+        return mAlternateSetting;
+    }
+
+    /**
+     * Returns the interface's name.
+     *
+     * @return the interface's name
+     */
+    public String getName() {
+        return mName;
+    }
+
+    /**
      * Returns the interface's class field.
      * Some useful constants for USB classes can be found in {@link UsbConstants}
      *
@@ -110,22 +135,42 @@
         return (UsbEndpoint)mEndpoints[index];
     }
 
+    /**
+     * Only used by UsbService implementation
+     * @hide
+     */
+    public void setEndpoints(Parcelable[] endpoints) {
+        mEndpoints = endpoints;
+    }
+
     @Override
     public String toString() {
-        return "UsbInterface[mId=" + mId + ",mClass=" + mClass +
+        StringBuilder builder = new StringBuilder("UsbInterface[mId=" + mId +
+                ",mAlternateSetting=" + mAlternateSetting +
+                ",mName=" + mName + ",mClass=" + mClass +
                 ",mSubclass=" + mSubclass + ",mProtocol=" + mProtocol +
-                ",mEndpoints=" + mEndpoints + "]";
+                ",mEndpoints=[");
+        for (int i = 0; i < mEndpoints.length; i++) {
+            builder.append("\n");
+            builder.append(mEndpoints[i].toString());
+        }
+        builder.append("]");
+        return builder.toString();
     }
 
     public static final Parcelable.Creator<UsbInterface> CREATOR =
         new Parcelable.Creator<UsbInterface>() {
         public UsbInterface createFromParcel(Parcel in) {
             int id = in.readInt();
+            int alternateSetting = in.readInt();
+            String name = in.readString();
             int Class = in.readInt();
             int subClass = in.readInt();
             int protocol = in.readInt();
             Parcelable[] endpoints = in.readParcelableArray(UsbEndpoint.class.getClassLoader());
-            return new UsbInterface(id, Class, subClass, protocol, endpoints);
+            UsbInterface intf = new UsbInterface(id, alternateSetting, name, Class, subClass, protocol);
+            intf.setEndpoints(endpoints);
+            return intf;
         }
 
         public UsbInterface[] newArray(int size) {
@@ -139,6 +184,8 @@
 
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeInt(mId);
+        parcel.writeInt(mAlternateSetting);
+        parcel.writeString(mName);
         parcel.writeInt(mClass);
         parcel.writeInt(mSubclass);
         parcel.writeInt(mProtocol);
diff --git a/core/java/android/inputmethodservice/ExtractButton.java b/core/java/android/inputmethodservice/ExtractButton.java
index b6b7595..fe63c1e 100644
--- a/core/java/android/inputmethodservice/ExtractButton.java
+++ b/core/java/android/inputmethodservice/ExtractButton.java
@@ -32,8 +32,12 @@
         super(context, attrs, com.android.internal.R.attr.buttonStyle);
     }
 
-    public ExtractButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ExtractButton(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ExtractButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
     
     /**
diff --git a/core/java/android/inputmethodservice/ExtractEditText.java b/core/java/android/inputmethodservice/ExtractEditText.java
index 23ae21b..48b604c 100644
--- a/core/java/android/inputmethodservice/ExtractEditText.java
+++ b/core/java/android/inputmethodservice/ExtractEditText.java
@@ -38,8 +38,12 @@
         super(context, attrs, com.android.internal.R.attr.editTextStyle);
     }
 
-    public ExtractEditText(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ExtractEditText(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ExtractEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
     
     void setIME(InputMethodService ime) {
diff --git a/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java b/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java
index bbea8ff..8437228 100644
--- a/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java
+++ b/core/java/android/inputmethodservice/IInputMethodSessionWrapper.java
@@ -25,7 +25,6 @@
 import android.os.Bundle;
 import android.os.Looper;
 import android.os.Message;
-import android.os.RemoteException;
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.InputChannel;
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 1b7d9ea..e6dbcd0 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -249,6 +249,18 @@
      */
     public static final int IME_VISIBLE = 0x2;
 
+    /**
+     * The IME does not require cursor/anchor position.
+     */
+    public static final int CURSOR_ANCHOR_MONITOR_MODE_NONE = 0x0;
+
+    /**
+     * Passing this flag into a call to {@link #setCursorAnchorMonitorMode(int)} will result in
+     * the cursor rectangle being provided in screen coordinates to subsequent
+     * {@link #onUpdateCursor(Rect)} callbacks.
+     */
+    public static final int CURSOR_ANCHOR_MONITOR_MODE_CURSOR_RECT = 0x1;
+
     InputMethodManager mImm;
     
     int mTheme = 0;
@@ -642,12 +654,11 @@
         return false;
     }
 
-    @Override public void onCreate() {
-        mTheme = Resources.selectSystemTheme(mTheme,
-                getApplicationInfo().targetSdkVersion,
-                android.R.style.Theme_InputMethod,
-                android.R.style.Theme_Holo_InputMethod,
-                android.R.style.Theme_DeviceDefault_InputMethod);
+    @Override
+    public void onCreate() {
+        mTheme = getResources().selectSystemTheme(mTheme, getApplicationInfo().targetSdkVersion,
+                com.android.internal.R.array.system_theme_sdks,
+                com.android.internal.R.array.system_theme_ime_styles);
         super.setTheme(mTheme);
         super.onCreate();
         mImm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
@@ -1692,15 +1703,24 @@
     }
 
     /**
-     * Called when the application has reported a new location of its text
-     * cursor.  This is only called if explicitly requested by the input method.
-     * The default implementation does nothing.
+     * Called when the application has reported a new location of its text cursor.  This is only
+     * called if explicitly requested by the input method.  The default implementation does nothing.
+     * @param newCursor The new cursor position, in screen coordinates if the input method calls
+     * {@link #setCursorAnchorMonitorMode} with {@link #CURSOR_ANCHOR_MONITOR_MODE_CURSOR_RECT}.
+     * Otherwise, this is in local coordinates.
      */
     public void onUpdateCursor(Rect newCursor) {
         // Intentionally empty
     }
 
     /**
+     * Update the cursor/anthor monitor mode.
+     */
+    public void setCursorAnchorMonitorMode(int monitorMode) {
+        mImm.setCursorAnchorMonitorMode(mToken, monitorMode);
+    }
+
+    /**
      * Close this input method's soft input area, removing it from the display.
      * The input method will continue running, but the user can no longer use
      * it to generate input by touching the screen.
@@ -2322,6 +2342,21 @@
     }
 
     /**
+     * @return The recommended height of the input method window.
+     * An IME author can get the last input method's height as the recommended height
+     * by calling this in
+     * {@link android.inputmethodservice.InputMethodService#onStartInputView(EditorInfo, boolean)}.
+     * If you don't need to use a predefined fixed height, you can avoid the window-resizing of IME
+     * switching by using this value as a visible inset height. It's efficient for the smooth
+     * transition between different IMEs. However, note that this may return 0 (or possibly
+     * unexpectedly low height). You should thus avoid relying on the return value of this method
+     * all the time. Please make sure to use a reasonable height for the IME.
+     */
+    public int getInputMethodWindowRecommendedHeight() {
+        return mImm.getInputMethodWindowVisibleHeight();
+    }
+
+    /**
      * Performs a dump of the InputMethodService's internal state.  Override
      * to add your own information to the dump.
      */
diff --git a/core/java/android/inputmethodservice/KeyboardView.java b/core/java/android/inputmethodservice/KeyboardView.java
index 4916244..af75a0a 100644
--- a/core/java/android/inputmethodservice/KeyboardView.java
+++ b/core/java/android/inputmethodservice/KeyboardView.java
@@ -279,12 +279,15 @@
         this(context, attrs, com.android.internal.R.attr.keyboardViewStyle);
     }
 
-    public KeyboardView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public KeyboardView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a =
-            context.obtainStyledAttributes(
-                attrs, android.R.styleable.KeyboardView, defStyle, 0);
+    public KeyboardView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, android.R.styleable.KeyboardView, defStyleAttr, defStyleRes);
 
         LayoutInflater inflate =
                 (LayoutInflater) context
diff --git a/core/java/android/net/BaseNetworkStateTracker.java b/core/java/android/net/BaseNetworkStateTracker.java
index 476fefe..804f8ee 100644
--- a/core/java/android/net/BaseNetworkStateTracker.java
+++ b/core/java/android/net/BaseNetworkStateTracker.java
@@ -20,10 +20,10 @@
 import android.os.Handler;
 import android.os.Messenger;
 
-import com.android.internal.util.Preconditions;
-
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import com.android.internal.util.Preconditions;
+
 /**
  * Interface to control and observe state of a specific network, hiding
  * network-specific details from {@link ConnectivityManager}. Surfaces events
@@ -108,11 +108,6 @@
     }
 
     @Override
-    public void captivePortalCheckComplete() {
-        // not implemented
-    }
-
-    @Override
     public void captivePortalCheckCompleted(boolean isCaptivePortal) {
         // not implemented
     }
diff --git a/core/java/android/net/CaptivePortalTracker.java b/core/java/android/net/CaptivePortalTracker.java
index d678f1e..89c17c7 100644
--- a/core/java/android/net/CaptivePortalTracker.java
+++ b/core/java/android/net/CaptivePortalTracker.java
@@ -48,7 +48,6 @@
 import java.net.HttpURLConnection;
 import java.net.InetAddress;
 import java.net.Inet4Address;
-import java.net.SocketTimeoutException;
 import java.net.URL;
 import java.net.UnknownHostException;
 import java.util.List;
@@ -84,13 +83,12 @@
     private String mServer;
     private String mUrl;
     private boolean mIsCaptivePortalCheckEnabled = false;
-    private IConnectivityManager mConnService;
-    private TelephonyManager mTelephonyManager;
-    private WifiManager mWifiManager;
-    private Context mContext;
+    private final IConnectivityManager mConnService;
+    private final TelephonyManager mTelephonyManager;
+    private final WifiManager mWifiManager;
+    private final Context mContext;
     private NetworkInfo mNetworkInfo;
 
-    private static final int CMD_DETECT_PORTAL          = 0;
     private static final int CMD_CONNECTIVITY_CHANGE    = 1;
     private static final int CMD_DELAYED_CAPTIVE_CHECK  = 2;
 
@@ -98,14 +96,15 @@
     private static final int DELAYED_CHECK_INTERVAL_MS = 10000;
     private int mDelayedCheckToken = 0;
 
-    private State mDefaultState = new DefaultState();
-    private State mNoActiveNetworkState = new NoActiveNetworkState();
-    private State mActiveNetworkState = new ActiveNetworkState();
-    private State mDelayedCaptiveCheckState = new DelayedCaptiveCheckState();
+    private final State mDefaultState = new DefaultState();
+    private final State mNoActiveNetworkState = new NoActiveNetworkState();
+    private final State mActiveNetworkState = new ActiveNetworkState();
+    private final State mDelayedCaptiveCheckState = new DelayedCaptiveCheckState();
 
     private static final String SETUP_WIZARD_PACKAGE = "com.google.android.setupwizard";
     private boolean mDeviceProvisioned = false;
-    private ProvisioningObserver mProvisioningObserver;
+    @SuppressWarnings("unused")
+    private final ProvisioningObserver mProvisioningObserver;
 
     private CaptivePortalTracker(Context context, IConnectivityManager cs) {
         super(TAG);
@@ -174,29 +173,11 @@
         return captivePortal;
     }
 
-    public void detectCaptivePortal(NetworkInfo info) {
-        sendMessage(obtainMessage(CMD_DETECT_PORTAL, info));
-    }
-
     private class DefaultState extends State {
 
         @Override
         public boolean processMessage(Message message) {
-            if (DBG) log(getName() + message.toString());
-            switch (message.what) {
-                case CMD_DETECT_PORTAL:
-                    NetworkInfo info = (NetworkInfo) message.obj;
-                    // Checking on a secondary connection is not supported
-                    // yet
-                    notifyPortalCheckComplete(info);
-                    break;
-                case CMD_CONNECTIVITY_CHANGE:
-                case CMD_DELAYED_CAPTIVE_CHECK:
-                    break;
-                default:
-                    loge("Ignoring " + message);
-                    break;
-            }
+            loge("Ignoring " + message);
             return HANDLED;
         }
     }
@@ -316,19 +297,6 @@
         }
     }
 
-    private void notifyPortalCheckComplete(NetworkInfo info) {
-        if (info == null) {
-            loge("notifyPortalCheckComplete on null");
-            return;
-        }
-        try {
-            if (DBG) log("notifyPortalCheckComplete: ni=" + info);
-            mConnService.captivePortalCheckComplete(info);
-        } catch(RemoteException e) {
-            e.printStackTrace();
-        }
-    }
-
     private void notifyPortalCheckCompleted(NetworkInfo info, boolean isCaptivePortal) {
         if (info == null) {
             loge("notifyPortalCheckComplete on null");
@@ -453,6 +421,13 @@
             case ConnectivityManager.TYPE_WIFI:
                 WifiInfo currentWifiInfo = mWifiManager.getConnectionInfo();
                 if (currentWifiInfo != null) {
+                    // NOTE: getSSID()'s behavior changed in API 17; before that, SSIDs were not
+                    // surrounded by double quotation marks (thus violating the Javadoc), but this
+                    // was changed to match the Javadoc in API 17. Since clients may have started
+                    // sanitizing the output of this method since API 17 was released, we should
+                    // not change it here as it would become impossible to tell whether the SSID is
+                    // simply being surrounded by quotes due to the API, or whether those quotes
+                    // are actually part of the SSID.
                     latencyBroadcast.putExtra(EXTRA_SSID, currentWifiInfo.getSSID());
                     latencyBroadcast.putExtra(EXTRA_BSSID, currentWifiInfo.getBSSID());
                 } else {
@@ -464,7 +439,6 @@
                 latencyBroadcast.putExtra(EXTRA_NETWORK_TYPE, mTelephonyManager.getNetworkType());
                 List<CellInfo> info = mTelephonyManager.getAllCellInfo();
                 if (info == null) return;
-                StringBuffer uniqueCellId = new StringBuffer();
                 int numRegisteredCellInfo = 0;
                 for (CellInfo cellInfo : info) {
                     if (cellInfo.isRegistered()) {
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 4eecfa9..3da00b1 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -23,10 +23,14 @@
 import android.content.Context;
 import android.os.Binder;
 import android.os.Build.VERSION_CODES;
+import android.os.IBinder;
+import android.os.INetworkActivityListener;
+import android.os.INetworkManagementService;
 import android.os.Messenger;
 import android.os.RemoteException;
-import android.os.ResultReceiver;
+import android.os.ServiceManager;
 import android.provider.Settings;
+import android.util.ArrayMap;
 
 import java.net.InetAddress;
 
@@ -77,7 +81,7 @@
 
     /**
      * Identical to {@link #CONNECTIVITY_ACTION} broadcast, but sent without any
-     * applicable {@link Settings.Secure#CONNECTIVITY_CHANGE_DELAY}.
+     * applicable {@link Settings.Global#CONNECTIVITY_CHANGE_DELAY}.
      *
      * @hide
      */
@@ -171,6 +175,11 @@
      * {@hide}
      */
     public static final String EXTRA_IS_ACTIVE = "isActive";
+    /**
+     * The lookup key for a long that contains the timestamp (nanos) of the radio state change.
+     * {@hide}
+     */
+    public static final String EXTRA_REALTIME_NS = "tsNanos";
 
     /**
      * Broadcast Action: The setting for background data usage has changed
@@ -403,6 +412,8 @@
 
     private final String mPackageName;
 
+    private INetworkManagementService mNMService;
+
     /**
      * Tests if a given integer represents a valid network type.
      * @param networkType the type to be tested
@@ -803,6 +814,8 @@
      * Ensure that a network route exists to deliver traffic to the specified
      * host via the specified network interface. An attempt to add a route that
      * already exists is ignored, but treated as successful.
+     * <p>This method requires the caller to hold the permission
+     * {@link android.Manifest.permission#CHANGE_NETWORK_STATE}.
      * @param networkType the type of the network over which traffic to the specified
      * host is to be routed
      * @param hostAddress the IP address of the host to which the route is desired
@@ -906,6 +919,92 @@
     }
 
     /**
+     * Callback for use with {@link ConnectivityManager#registerNetworkActiveListener} to
+     * find out when the current network has gone in to a high power state.
+     */
+    public interface OnNetworkActiveListener {
+        /**
+         * Called on the main thread of the process to report that the current data network
+         * has become active, and it is now a good time to perform any pending network
+         * operations.  Note that this listener only tells you when the network becomes
+         * active; if at any other time you want to know whether it is active (and thus okay
+         * to initiate network traffic), you can retrieve its instantaneous state with
+         * {@link ConnectivityManager#isNetworkActive}.
+         */
+        public void onNetworkActive();
+    }
+
+    private INetworkManagementService getNetworkManagementService() {
+        synchronized (this) {
+            if (mNMService != null) {
+                return mNMService;
+            }
+            IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
+            mNMService = INetworkManagementService.Stub.asInterface(b);
+            return mNMService;
+        }
+    }
+
+    private final ArrayMap<OnNetworkActiveListener, INetworkActivityListener>
+            mNetworkActivityListeners
+                    = new ArrayMap<OnNetworkActiveListener, INetworkActivityListener>();
+
+    /**
+     * Start listening to reports when the data network is active, meaning it is
+     * a good time to perform network traffic.  Use {@link #isNetworkActive()}
+     * to determine the current state of the network after registering the listener.
+     *
+     * @param l The listener to be told when the network is active.
+     */
+    public void registerNetworkActiveListener(final OnNetworkActiveListener l) {
+        INetworkActivityListener rl = new INetworkActivityListener.Stub() {
+            @Override
+            public void onNetworkActive() throws RemoteException {
+                l.onNetworkActive();
+            }
+        };
+
+        try {
+            getNetworkManagementService().registerNetworkActivityListener(rl);
+            mNetworkActivityListeners.put(l, rl);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Remove network active listener previously registered with
+     * {@link #registerNetworkActiveListener}.
+     *
+     * @param l Previously registered listener.
+     */
+    public void unregisterNetworkActiveListener(OnNetworkActiveListener l) {
+        INetworkActivityListener rl = mNetworkActivityListeners.get(l);
+        if (rl == null) {
+            throw new IllegalArgumentException("Listener not registered: " + l);
+        }
+        try {
+            getNetworkManagementService().unregisterNetworkActivityListener(rl);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Return whether the data network is currently active.  An active network means that
+     * it is currently in a high power state for performing data transmission.  On some
+     * types of networks, it may be expensive to move and stay in such a state, so it is
+     * more power efficient to batch network traffic together when the radio is already in
+     * this state.  This method tells you whether right now is currently a good time to
+     * initiate network traffic, as the network is already active.
+     */
+    public boolean isNetworkActive() {
+        try {
+            return getNetworkManagementService().isNetworkActive();
+        } catch (RemoteException e) {
+        }
+        return false;
+    }
+
+    /**
      * {@hide}
      */
     public ConnectivityManager(IConnectivityManager service, String packageName) {
@@ -1020,7 +1119,7 @@
 
     /**
      * Check if the device allows for tethering.  It may be disabled via
-     * {@code ro.tether.denied} system property, {@link Settings#TETHER_SUPPORTED} or
+     * {@code ro.tether.denied} system property, Settings.TETHER_SUPPORTED or
      * due to device configuration.
      *
      * @return a boolean - {@code true} indicating Tethering is supported.
@@ -1208,7 +1307,7 @@
      * doing something unusual like general internal filtering this may be useful.  On
      * a private network where the proxy is not accessible, you may break HTTP using this.
      *
-     * @param proxyProperties The a {@link ProxyProperites} object defining the new global
+     * @param p The a {@link ProxyProperties} object defining the new global
      *        HTTP proxy.  A {@code null} value will clear the global HTTP proxy.
      *
      * <p>This method requires the call to hold the permission
@@ -1341,24 +1440,6 @@
 
     /**
      * Signal that the captive portal check on the indicated network
-     * is complete and we can turn the network on for general use.
-     *
-     * @param info the {@link NetworkInfo} object for the networkType
-     *        in question.
-     *
-     * <p>This method requires the call to hold the permission
-     * {@link android.Manifest.permission#CONNECTIVITY_INTERNAL}.
-     * {@hide}
-     */
-    public void captivePortalCheckComplete(NetworkInfo info) {
-        try {
-            mService.captivePortalCheckComplete(info);
-        } catch (RemoteException e) {
-        }
-    }
-
-    /**
-     * Signal that the captive portal check on the indicated network
      * is complete and whether its a captive portal or not.
      *
      * @param info the {@link NetworkInfo} object for the networkType
@@ -1379,7 +1460,7 @@
     /**
      * Supply the backend messenger for a network tracker
      *
-     * @param type NetworkType to set
+     * @param networkType NetworkType to set
      * @param messenger {@link Messenger}
      * {@hide}
      */
diff --git a/core/java/android/net/DhcpInfo.java b/core/java/android/net/DhcpInfo.java
index 3bede5d..788d7d9 100644
--- a/core/java/android/net/DhcpInfo.java
+++ b/core/java/android/net/DhcpInfo.java
@@ -18,7 +18,6 @@
 
 import android.os.Parcelable;
 import android.os.Parcel;
-import java.net.InetAddress;
 
 /**
  * A simple object for retrieving the results of a DHCP request.
diff --git a/core/java/android/net/DhcpResults.java b/core/java/android/net/DhcpResults.java
index a3f70da..22b26b1 100644
--- a/core/java/android/net/DhcpResults.java
+++ b/core/java/android/net/DhcpResults.java
@@ -23,9 +23,6 @@
 
 import java.net.InetAddress;
 import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
 
 /**
  * A simple object for retrieving the results of a DHCP request.
diff --git a/core/java/android/net/DummyDataStateTracker.java b/core/java/android/net/DummyDataStateTracker.java
index 51a1191..a5d059e 100644
--- a/core/java/android/net/DummyDataStateTracker.java
+++ b/core/java/android/net/DummyDataStateTracker.java
@@ -117,11 +117,6 @@
     }
 
     @Override
-    public void captivePortalCheckComplete() {
-        // not implemented
-    }
-
-    @Override
     public void captivePortalCheckCompleted(boolean isCaptivePortal) {
         // not implemented
     }
diff --git a/core/java/android/net/EthernetDataTracker.java b/core/java/android/net/EthernetDataTracker.java
index cc8c771..10b5d0b 100644
--- a/core/java/android/net/EthernetDataTracker.java
+++ b/core/java/android/net/EthernetDataTracker.java
@@ -106,6 +106,24 @@
         mLinkCapabilities = new LinkCapabilities();
     }
 
+    private void interfaceUpdated() {
+        // we don't get link status indications unless the iface is up - bring it up
+        try {
+            mNMService.setInterfaceUp(mIface);
+            String hwAddr = null;
+            InterfaceConfiguration config = mNMService.getInterfaceConfig(mIface);
+            if (config != null) {
+                hwAddr = config.getHardwareAddress();
+            }
+            synchronized (this) {
+                mHwAddr = hwAddr;
+                mNetworkInfo.setExtraInfo(mHwAddr);
+            }
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error upping interface " + mIface + ": " + e);
+        }
+    }
+
     private void interfaceAdded(String iface) {
         if (!iface.matches(sIfaceMatch))
             return;
@@ -118,12 +136,7 @@
             mIface = iface;
         }
 
-        // we don't get link status indications unless the iface is up - bring it up
-        try {
-            mNMService.setInterfaceUp(iface);
-        } catch (Exception e) {
-            Log.e(TAG, "Error upping interface " + iface + ": " + e);
-        }
+        interfaceUpdated();
 
         mNetworkInfo.setIsAvailable(true);
         Message msg = mCsHandler.obtainMessage(EVENT_CONFIGURATION_CHANGED, mNetworkInfo);
@@ -159,15 +172,21 @@
 
         Log.d(TAG, "Removing " + iface);
         disconnect();
-        mIface = "";
+        synchronized (this) {
+            mIface = "";
+            mHwAddr = null;
+            mNetworkInfo.setExtraInfo(null);
+        }
     }
 
     private void runDhcp() {
         Thread dhcpThread = new Thread(new Runnable() {
             public void run() {
                 DhcpResults dhcpResults = new DhcpResults();
+                mNetworkInfo.setDetailedState(DetailedState.OBTAINING_IPADDR, null, mHwAddr);
                 if (!NetworkUtils.runDhcp(mIface, dhcpResults)) {
                     Log.e(TAG, "DHCP request error:" + NetworkUtils.getDhcpError());
+                    mNetworkInfo.setDetailedState(DetailedState.DISCONNECTED, null, mHwAddr);
                     return;
                 }
                 mLinkProperties = dhcpResults.linkProperties;
@@ -220,15 +239,7 @@
             for (String iface : ifaces) {
                 if (iface.matches(sIfaceMatch)) {
                     mIface = iface;
-                    mNMService.setInterfaceUp(iface);
-                    InterfaceConfiguration config = mNMService.getInterfaceConfig(iface);
-                    mLinkUp = config.hasFlag("up");
-                    if (config != null && mHwAddr == null) {
-                        mHwAddr = config.getHardwareAddress();
-                        if (mHwAddr != null) {
-                            mNetworkInfo.setExtraInfo(mHwAddr);
-                        }
-                    }
+                    interfaceUpdated();
 
                     // if a DHCP client had previously been started for this interface, then stop it
                     NetworkUtils.stopDhcp(mIface);
@@ -270,11 +281,6 @@
     }
 
     @Override
-    public void captivePortalCheckComplete() {
-        // not implemented
-    }
-
-    @Override
     public void captivePortalCheckCompleted(boolean isCaptivePortal) {
         // not implemented
     }
@@ -423,4 +429,9 @@
     public void supplyMessenger(Messenger messenger) {
         // not supported on this network
     }
+
+    @Override
+    public String getNetworkInterfaceName() {
+        return mIface;
+    }
 }
diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl
index 4bca7fe..381a817 100644
--- a/core/java/android/net/IConnectivityManager.aidl
+++ b/core/java/android/net/IConnectivityManager.aidl
@@ -129,8 +129,6 @@
 
     boolean updateLockdownVpn();
 
-    void captivePortalCheckComplete(in NetworkInfo info);
-
     void captivePortalCheckCompleted(in NetworkInfo info, boolean isCaptivePortal);
 
     void supplyMessenger(int networkType, in Messenger messenger);
diff --git a/core/java/android/net/INetworkManagementEventObserver.aidl b/core/java/android/net/INetworkManagementEventObserver.aidl
index 5b16f8b..dd9c39f 100644
--- a/core/java/android/net/INetworkManagementEventObserver.aidl
+++ b/core/java/android/net/INetworkManagementEventObserver.aidl
@@ -86,8 +86,9 @@
      *
      * @param iface The interface.
      * @param active  True if the interface is actively transmitting data, false if it is idle.
+     * @param tsNanos Elapsed realtime in nanos when the state of the network interface changed.
      */
-    void interfaceClassDataActivityChanged(String label, boolean active);
+    void interfaceClassDataActivityChanged(String label, boolean active, long tsNanos);
 
     /**
      * Information about available DNS servers has been received.
diff --git a/core/java/android/net/INetworkScoreCache.aidl b/core/java/android/net/INetworkScoreCache.aidl
new file mode 100644
index 0000000..35601ce
--- /dev/null
+++ b/core/java/android/net/INetworkScoreCache.aidl
@@ -0,0 +1,43 @@
+/**
+ * Copyright (c) 2014, 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 android.net;
+
+import android.net.ScoredNetwork;
+
+/**
+ * A service which stores a subset of scored networks from the active network scorer.
+ *
+ * <p>To be implemented by network subsystems (e.g. Wi-Fi). NetworkScoreService will propagate
+ * scores down to each subsystem depending on the network type. Implementations may register for
+ * a given network type by calling NetworkScoreManager.registerNetworkSubsystem.
+ *
+ * <p>A proper implementation should throw SecurityException whenever the caller is not privileged.
+ * It may request scores by calling NetworkScoreManager#requestScores(NetworkKey[]); a call to
+ * updateScores may follow but may not depending on the active scorer's implementation, and in
+ * general this method may be called at any time.
+ *
+ * <p>Implementations should also override dump() so that "adb shell dumpsys network_score" includes
+ * the current scores for each network for debugging purposes.
+ * @hide
+ */
+interface INetworkScoreCache
+{
+    void updateScores(in List<ScoredNetwork> networks);
+
+    void clearScores();
+}
+
diff --git a/core/java/android/net/INetworkScoreService.aidl b/core/java/android/net/INetworkScoreService.aidl
new file mode 100644
index 0000000..626bd2a
--- /dev/null
+++ b/core/java/android/net/INetworkScoreService.aidl
@@ -0,0 +1,61 @@
+/**
+ * Copyright (c) 2014, 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 android.net;
+
+import android.net.INetworkScoreCache;
+import android.net.ScoredNetwork;
+
+/**
+ * A service for updating network scores from a network scorer application.
+ * @hide
+ */
+interface INetworkScoreService
+{
+    /**
+     * Update scores.
+     * @return whether the update was successful.
+     * @throws SecurityException if the caller is not the current active scorer.
+     */
+    boolean updateScores(in ScoredNetwork[] networks);
+
+    /**
+     * Clear all scores.
+     * @return whether the clear was successful.
+     * @throws SecurityException if the caller is neither the current active scorer nor the system.
+     */
+    boolean clearScores();
+
+    /**
+     * Set the active scorer and clear existing scores.
+     * @param packageName the package name of the new scorer to use.
+     * @return true if the operation succeeded, or false if the new package is not a valid scorer.
+     * @throws SecurityException if the caller is not the system.
+     */
+    boolean setActiveScorer(in String packageName);
+
+    /**
+     * Register a network subsystem for scoring.
+     *
+     * @param networkType the type of network this cache can handle. See {@link NetworkKey#type}.
+     * @param scoreCache implementation of {@link INetworkScoreCache} to store the scores.
+     * @throws SecurityException if the caller is not the system.
+     * @throws IllegalArgumentException if a score cache is already registed for this type.
+     * @hide
+     */
+    void registerNetworkScoreCache(int networkType, INetworkScoreCache scoreCache);
+
+}
diff --git a/core/java/android/net/LinkSocketNotifier.java b/core/java/android/net/LinkSocketNotifier.java
index 28e2834..e2429d8 100644
--- a/core/java/android/net/LinkSocketNotifier.java
+++ b/core/java/android/net/LinkSocketNotifier.java
@@ -16,8 +16,6 @@
 
 package android.net;
 
-import java.util.Map;
-
 /**
  * Interface used to get feedback about a {@link android.net.LinkSocket}.  Instance is optionally
  * passed when a LinkSocket is constructed.  Multiple LinkSockets may use the same notifier.
diff --git a/core/java/android/net/MailTo.java b/core/java/android/net/MailTo.java
index b90dcb1..dadb6d9 100644
--- a/core/java/android/net/MailTo.java
+++ b/core/java/android/net/MailTo.java
@@ -19,7 +19,6 @@
 import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Set;
 
 /**
  *
diff --git a/core/java/android/net/MobileDataStateTracker.java b/core/java/android/net/MobileDataStateTracker.java
index 21352bf..30b61c5 100644
--- a/core/java/android/net/MobileDataStateTracker.java
+++ b/core/java/android/net/MobileDataStateTracker.java
@@ -54,7 +54,7 @@
 public class MobileDataStateTracker extends BaseNetworkStateTracker {
 
     private static final String TAG = "MobileDataStateTracker";
-    private static final boolean DBG = true;
+    private static final boolean DBG = false;
     private static final boolean VDBG = false;
 
     private PhoneConstants.DataState mMobileDataState;
@@ -306,18 +306,18 @@
                     if (VDBG) {
                         Slog.d(TAG, "TelephonyMgr.DataConnectionStateChanged");
                         if (mNetworkInfo != null) {
-                            Slog.d(TAG, "NetworkInfo = " + mNetworkInfo.toString());
-                            Slog.d(TAG, "subType = " + String.valueOf(mNetworkInfo.getSubtype()));
+                            Slog.d(TAG, "NetworkInfo = " + mNetworkInfo);
+                            Slog.d(TAG, "subType = " + mNetworkInfo.getSubtype());
                             Slog.d(TAG, "subType = " + mNetworkInfo.getSubtypeName());
                         }
                         if (mLinkProperties != null) {
-                            Slog.d(TAG, "LinkProperties = " + mLinkProperties.toString());
+                            Slog.d(TAG, "LinkProperties = " + mLinkProperties);
                         } else {
                             Slog.d(TAG, "LinkProperties = " );
                         }
 
                         if (mLinkCapabilities != null) {
-                            Slog.d(TAG, "LinkCapabilities = " + mLinkCapabilities.toString());
+                            Slog.d(TAG, "LinkCapabilities = " + mLinkCapabilities);
                         } else {
                             Slog.d(TAG, "LinkCapabilities = " );
                         }
@@ -460,11 +460,6 @@
     }
 
     @Override
-    public void captivePortalCheckComplete() {
-        // not implemented
-    }
-
-    @Override
     public void captivePortalCheckCompleted(boolean isCaptivePortal) {
         if (mIsCaptivePortal.getAndSet(isCaptivePortal) != isCaptivePortal) {
             // Captive portal change enable/disable failing fast
diff --git a/core/java/android/net/NetworkConfig.java b/core/java/android/net/NetworkConfig.java
index 5d95f41..32a2cda 100644
--- a/core/java/android/net/NetworkConfig.java
+++ b/core/java/android/net/NetworkConfig.java
@@ -16,7 +16,6 @@
 
 package android.net;
 
-import android.util.Log;
 import java.util.Locale;
 
 /**
diff --git a/core/java/android/net/NetworkInfo.java b/core/java/android/net/NetworkInfo.java
index 4d2a70d..53b1308 100644
--- a/core/java/android/net/NetworkInfo.java
+++ b/core/java/android/net/NetworkInfo.java
@@ -156,18 +156,20 @@
     /** {@hide} */
     public NetworkInfo(NetworkInfo source) {
         if (source != null) {
-            mNetworkType = source.mNetworkType;
-            mSubtype = source.mSubtype;
-            mTypeName = source.mTypeName;
-            mSubtypeName = source.mSubtypeName;
-            mState = source.mState;
-            mDetailedState = source.mDetailedState;
-            mReason = source.mReason;
-            mExtraInfo = source.mExtraInfo;
-            mIsFailover = source.mIsFailover;
-            mIsRoaming = source.mIsRoaming;
-            mIsAvailable = source.mIsAvailable;
-            mIsConnectedToProvisioningNetwork = source.mIsConnectedToProvisioningNetwork;
+            synchronized (source) {
+                mNetworkType = source.mNetworkType;
+                mSubtype = source.mSubtype;
+                mTypeName = source.mTypeName;
+                mSubtypeName = source.mSubtypeName;
+                mState = source.mState;
+                mDetailedState = source.mDetailedState;
+                mReason = source.mReason;
+                mExtraInfo = source.mExtraInfo;
+                mIsFailover = source.mIsFailover;
+                mIsRoaming = source.mIsRoaming;
+                mIsAvailable = source.mIsAvailable;
+                mIsConnectedToProvisioningNetwork = source.mIsConnectedToProvisioningNetwork;
+            }
         }
     }
 
diff --git a/core/java/android/net/NetworkKey.aidl b/core/java/android/net/NetworkKey.aidl
new file mode 100644
index 0000000..637075f
--- /dev/null
+++ b/core/java/android/net/NetworkKey.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.net;
+
+parcelable NetworkKey;
diff --git a/core/java/android/net/NetworkKey.java b/core/java/android/net/NetworkKey.java
new file mode 100644
index 0000000..bc19658
--- /dev/null
+++ b/core/java/android/net/NetworkKey.java
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Information which identifies a specific network.
+ *
+ * @hide
+ */
+// NOTE: Ideally, we would abstract away the details of what identifies a network of a specific
+// type, so that all networks appear the same and can be scored without concern to the network type
+// itself. However, because no such cross-type identifier currently exists in the Android framework,
+// and because systems might obtain information about networks from sources other than Android
+// devices, we need to provide identifying details about each specific network type (wifi, cell,
+// etc.) so that clients can pull out these details depending on the type of network.
+public class NetworkKey implements Parcelable {
+
+    /** A wifi network, for which {@link #wifiKey} will be populated. */
+    public static final int TYPE_WIFI = 1;
+
+    /**
+     * The type of this network.
+     * @see #TYPE_WIFI
+     */
+    public final int type;
+
+    /**
+     * Information identifying a Wi-Fi network. Only set when {@link #type} equals
+     * {@link #TYPE_WIFI}.
+     */
+    public final WifiKey wifiKey;
+
+    /**
+     * Construct a new {@link NetworkKey} for a Wi-Fi network.
+     * @param wifiKey the {@link WifiKey} identifying this Wi-Fi network.
+     */
+    public NetworkKey(WifiKey wifiKey) {
+        this.type = TYPE_WIFI;
+        this.wifiKey = wifiKey;
+    }
+
+    private NetworkKey(Parcel in) {
+        type = in.readInt();
+        switch (type) {
+            case TYPE_WIFI:
+                wifiKey = WifiKey.CREATOR.createFromParcel(in);
+                break;
+            default:
+                throw new IllegalArgumentException("Parcel has unknown type: " + type);
+        }
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(type);
+        switch (type) {
+            case TYPE_WIFI:
+                wifiKey.writeToParcel(out, flags);
+                break;
+            default:
+                throw new IllegalStateException("NetworkKey has unknown type " + type);
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        NetworkKey that = (NetworkKey) o;
+
+        return type == that.type && Objects.equals(wifiKey, that.wifiKey);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(type, wifiKey);
+    }
+
+    @Override
+    public String toString() {
+        switch (type) {
+            case TYPE_WIFI:
+                return wifiKey.toString();
+            default:
+                // Don't throw an exception here in case someone is logging this object in a catch
+                // block for debugging purposes.
+                return "InvalidKey";
+        }
+    }
+
+    public static final Parcelable.Creator<NetworkKey> CREATOR =
+            new Parcelable.Creator<NetworkKey>() {
+                @Override
+                public NetworkKey createFromParcel(Parcel in) {
+                    return new NetworkKey(in);
+                }
+
+                @Override
+                public NetworkKey[] newArray(int size) {
+                    return new NetworkKey[size];
+                }
+            };
+}
diff --git a/core/java/android/net/NetworkScoreManager.java b/core/java/android/net/NetworkScoreManager.java
new file mode 100644
index 0000000..352512e
--- /dev/null
+++ b/core/java/android/net/NetworkScoreManager.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.annotation.SdkConstant;
+import android.annotation.SdkConstant.SdkConstantType;
+import android.content.Context;
+import android.content.Intent;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+
+/**
+ * Class that manages communication between network subsystems and a network scorer.
+ *
+ * <p>You can get an instance of this class by calling
+ * {@link android.content.Context#getSystemService(String)}:
+ *
+ * <pre>NetworkScoreManager manager =
+ *     (NetworkScoreManager) getSystemService(Context.NETWORK_SCORE_SERVICE)</pre>
+ *
+ * <p>A network scorer is any application which:
+ * <ul>
+ * <li>Declares the {@link android.Manifest.permission#SCORE_NETWORKS} permission.
+ * <li>Includes a receiver for {@link #ACTION_SCORE_NETWORKS} guarded by the
+ *     {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission which scores networks
+ *     and (eventually) calls {@link #updateScores} with the results.
+ * </ul>
+ *
+ * <p>The system keeps track of an active scorer application; at any time, only this application
+ * will receive {@link #ACTION_SCORE_NETWORKS} broadcasts and will be permitted to call
+ * {@link #updateScores}. Applications may determine the current active scorer with
+ * {@link #getActiveScorerPackage()} and request to change the active scorer by sending an
+ * {@link #ACTION_CHANGE_ACTIVE} broadcast with another scorer.
+ *
+ * @hide
+ */
+public class NetworkScoreManager {
+    /**
+     * Activity action: ask the user to change the active network scorer. This will show a dialog
+     * that asks the user whether they want to replace the current active scorer with the one
+     * specified in {@link #EXTRA_PACKAGE_NAME}. The activity will finish with RESULT_OK if the
+     * active scorer was changed or RESULT_CANCELED if it failed for any reason.
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_CHANGE_ACTIVE = "android.net.scoring.CHANGE_ACTIVE";
+
+    /**
+     * Extra used with {@link #ACTION_CHANGE_ACTIVE} to specify the new scorer package. Set with
+     * {@link android.content.Intent#putExtra(String, String)}.
+     */
+    public static final String EXTRA_PACKAGE_NAME = "packageName";
+
+    /**
+     * Broadcast action: new network scores are being requested. This intent will only be delivered
+     * to the current active scorer app. That app is responsible for scoring the networks and
+     * calling {@link #updateScores} when complete. The networks to score are specified in
+     * {@link #EXTRA_NETWORKS_TO_SCORE}, and will generally consist of all networks which have been
+     * configured by the user as well as any open networks.
+     *
+     * <p class="note">This is a protected intent that can only be sent by the system.
+     */
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_SCORE_NETWORKS = "android.net.scoring.SCORE_NETWORKS";
+
+    /**
+     * Extra used with {@link #ACTION_SCORE_NETWORKS} to specify the networks to be scored, as an
+     * array of {@link NetworkKey}s. Can be obtained with
+     * {@link android.content.Intent#getParcelableArrayExtra(String)}}.
+     */
+    public static final String EXTRA_NETWORKS_TO_SCORE = "networksToScore";
+
+    private final Context mContext;
+    private final INetworkScoreService mService;
+
+    /** @hide */
+    public NetworkScoreManager(Context context) {
+        mContext = context;
+        IBinder iBinder = ServiceManager.getService(Context.NETWORK_SCORE_SERVICE);
+        mService = INetworkScoreService.Stub.asInterface(iBinder);
+    }
+
+    /**
+     * Obtain the package name of the current active network scorer.
+     *
+     * <p>At any time, only one scorer application will receive {@link #ACTION_SCORE_NETWORKS}
+     * broadcasts and be allowed to call {@link #updateScores}. Applications may use this method to
+     * determine the current scorer and offer the user the ability to select a different scorer via
+     * the {@link #ACTION_CHANGE_ACTIVE} intent.
+     * @return the full package name of the current active scorer, or null if there is no active
+     *         scorer.
+     */
+    public String getActiveScorerPackage() {
+        return NetworkScorerAppManager.getActiveScorer(mContext);
+    }
+
+    /**
+     * Update network scores.
+     *
+     * <p>This may be called at any time to re-score active networks. Scores will generally be
+     * updated quickly, but if this method is called too frequently, the scores may be held and
+     * applied at a later time.
+     *
+     * @param networks the networks which have been scored by the scorer.
+     * @return whether the update was successful.
+     * @throws SecurityException if the caller is not the active scorer.
+     */
+    public boolean updateScores(ScoredNetwork[] networks) throws SecurityException {
+        try {
+            return mService.updateScores(networks);
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Clear network scores.
+     *
+     * <p>Should be called when all scores need to be invalidated, i.e. because the scoring
+     * algorithm has changed and old scores can no longer be compared to future scores.
+     *
+     * <p>Note that scores will be cleared automatically when the active scorer changes, as scores
+     * from one scorer cannot be compared to those from another scorer.
+     *
+     * @return whether the clear was successful.
+     * @throws SecurityException if the caller is not the active scorer or privileged.
+     */
+    public boolean clearScores() throws SecurityException {
+        try {
+            return mService.clearScores();
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Set the active scorer to a new package and clear existing scores.
+     *
+     * @return true if the operation succeeded, or false if the new package is not a valid scorer.
+     * @throws SecurityException if the caller does not hold the
+     *         {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission indicating
+     *         that it can manage scorer applications.
+     * @hide
+     */
+    public boolean setActiveScorer(String packageName) throws SecurityException {
+        try {
+            return mService.setActiveScorer(packageName);
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Request scoring for networks.
+     *
+     * <p>Note that this is just a helper method to assemble the broadcast, and will run in the
+     * calling process.
+     *
+     * @return true if the broadcast was sent, or false if there is no active scorer.
+     * @throws SecurityException if the caller does not hold the
+     *         {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission.
+     * @hide
+     */
+    public boolean requestScores(NetworkKey[] networks) throws SecurityException {
+        String activeScorer = getActiveScorerPackage();
+        if (activeScorer == null) {
+            return false;
+        }
+        Intent intent = new Intent(ACTION_SCORE_NETWORKS);
+        intent.setPackage(activeScorer);
+        intent.putExtra(EXTRA_NETWORKS_TO_SCORE, networks);
+        mContext.sendBroadcast(intent);
+        return true;
+    }
+
+    /**
+     * Register a network score cache.
+     *
+     * @param networkType the type of network this cache can handle. See {@link NetworkKey#type}.
+     * @param scoreCache implementation of {@link INetworkScoreCache} to store the scores.
+     * @throws SecurityException if the caller does not hold the
+     *         {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission.
+     * @throws IllegalArgumentException if a score cache is already registered for this type.
+     * @hide
+     */
+    public void registerNetworkScoreCache(int networkType, INetworkScoreCache scoreCache) {
+        try {
+            mService.registerNetworkScoreCache(networkType, scoreCache);
+        } catch (RemoteException e) {
+        }
+    }
+}
diff --git a/core/java/android/net/NetworkScorerAppManager.java b/core/java/android/net/NetworkScorerAppManager.java
new file mode 100644
index 0000000..3660e7a
--- /dev/null
+++ b/core/java/android/net/NetworkScorerAppManager.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.Manifest.permission;
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Internal class for managing the primary network scorer application.
+ *
+ * @hide
+ */
+public final class NetworkScorerAppManager {
+    private static final String TAG = "NetworkScorerAppManager";
+
+    private static final Intent SCORE_INTENT =
+            new Intent(NetworkScoreManager.ACTION_SCORE_NETWORKS);
+
+    /** This class cannot be instantiated. */
+    private NetworkScorerAppManager() {}
+
+    /**
+     * Returns the list of available scorer app package names.
+     *
+     * <p>A network scorer is any application which:
+     * <ul>
+     * <li>Declares the {@link android.Manifest.permission#SCORE_NETWORKS} permission.
+     * <li>Includes a receiver for {@link NetworkScoreManager#ACTION_SCORE_NETWORKS} guarded by the
+     *     {@link android.Manifest.permission#BROADCAST_SCORE_NETWORKS} permission.
+     * </ul>
+     *
+     * @return the list of scorers, or the empty list if there are no valid scorers.
+     */
+    public static Collection<String> getAllValidScorers(Context context) {
+        List<String> scorers = new ArrayList<>();
+
+        PackageManager pm = context.getPackageManager();
+        List<ResolveInfo> receivers = pm.queryBroadcastReceivers(SCORE_INTENT, 0 /* flags */);
+        for (ResolveInfo receiver : receivers) {
+            // This field is a misnomer, see android.content.pm.ResolveInfo#activityInfo
+            final ActivityInfo receiverInfo = receiver.activityInfo;
+            if (receiverInfo == null) {
+                // Should never happen with queryBroadcastReceivers, but invalid nonetheless.
+                continue;
+            }
+            if (!permission.BROADCAST_SCORE_NETWORKS.equals(receiverInfo.permission)) {
+                // Receiver doesn't require the BROADCAST_SCORE_NETWORKS permission, which means
+                // anyone could trigger network scoring and flood the framework with score requests.
+                continue;
+            }
+            if (pm.checkPermission(permission.SCORE_NETWORKS, receiverInfo.packageName) !=
+                    PackageManager.PERMISSION_GRANTED) {
+                // Application doesn't hold the SCORE_NETWORKS permission, so the user never
+                // approved it as a network scorer.
+                continue;
+            }
+            scorers.add(receiverInfo.packageName);
+        }
+
+        return scorers;
+    }
+
+    /**
+     * Get the application package name to use for scoring networks.
+     *
+     * @return the scorer package or null if scoring is disabled (including if no scorer was ever
+     *     selected) or if the previously-set scorer is no longer a valid scorer app (e.g. because
+     *     it was disabled or uninstalled).
+     */
+    public static String getActiveScorer(Context context) {
+        String scorerPackage = Settings.Global.getString(context.getContentResolver(),
+                Global.NETWORK_SCORER_APP);
+        if (isPackageValidScorer(context, scorerPackage)) {
+            return scorerPackage;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Set the specified package as the default scorer application.
+     *
+     * <p>The caller must have permission to write to {@link Settings.Global}.
+     *
+     * @param context the context of the calling application
+     * @param packageName the packageName of the new scorer to use. If null, scoring will be
+     *     disabled. Otherwise, the scorer will only be set if it is a valid scorer application.
+     * @return true if the scorer was changed, or false if the package is not a valid scorer.
+     */
+    public static boolean setActiveScorer(Context context, String packageName) {
+        String oldPackageName = Settings.Global.getString(context.getContentResolver(),
+                Settings.Global.NETWORK_SCORER_APP);
+        if (TextUtils.equals(oldPackageName, packageName)) {
+            // No change.
+            return true;
+        }
+
+        Log.i(TAG, "Changing network scorer from " + oldPackageName + " to " + packageName);
+
+        if (packageName == null) {
+            Settings.Global.putString(context.getContentResolver(), Global.NETWORK_SCORER_APP,
+                    null);
+            return true;
+        } else {
+            // We only make the change if the new package is valid.
+            if (isPackageValidScorer(context, packageName)) {
+                Settings.Global.putString(context.getContentResolver(),
+                        Settings.Global.NETWORK_SCORER_APP, packageName);
+                return true;
+            } else {
+                Log.w(TAG, "Requested network scorer is not valid: " + packageName);
+                return false;
+            }
+        }
+    }
+
+    /** Determine whether the application with the given UID is the enabled scorer. */
+    public static boolean isCallerActiveScorer(Context context, int callingUid) {
+        String defaultApp = getActiveScorer(context);
+        if (defaultApp == null) {
+            return false;
+        }
+        AppOpsManager appOpsMgr = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+        try {
+            appOpsMgr.checkPackage(callingUid, defaultApp);
+            return true;
+        } catch (SecurityException e) {
+            return false;
+        }
+    }
+
+    /** Returns true if the given package is a valid scorer. */
+    public static boolean isPackageValidScorer(Context context, String packageName) {
+        Collection<String> applications = getAllValidScorers(context);
+        return packageName != null && applications.contains(packageName);
+    }
+}
diff --git a/core/java/android/net/NetworkStateTracker.java b/core/java/android/net/NetworkStateTracker.java
index 1ca9255..c49b1d1 100644
--- a/core/java/android/net/NetworkStateTracker.java
+++ b/core/java/android/net/NetworkStateTracker.java
@@ -144,11 +144,6 @@
     public boolean reconnect();
 
     /**
-     * Ready to switch on to the network after captive portal check
-     */
-    public void captivePortalCheckComplete();
-
-    /**
      * Captive portal check has completed
      */
     public void captivePortalCheckCompleted(boolean isCaptive);
diff --git a/core/java/android/net/NetworkStats.java b/core/java/android/net/NetworkStats.java
index a7aae2a..54d43d3 100644
--- a/core/java/android/net/NetworkStats.java
+++ b/core/java/android/net/NetworkStats.java
@@ -44,6 +44,8 @@
     public static final String IFACE_ALL = null;
     /** {@link #uid} value when UID details unavailable. */
     public static final int UID_ALL = -1;
+    /** {@link #tag} value matching any tag. */
+    public static final int TAG_ALL = -1;
     /** {@link #set} value when all sets combined. */
     public static final int SET_ALL = -1;
     /** {@link #set} value where background data is accounted. */
@@ -59,8 +61,9 @@
      * {@link SystemClock#elapsedRealtime()} timestamp when this data was
      * generated.
      */
-    private final long elapsedRealtime;
+    private long elapsedRealtime;
     private int size;
+    private int capacity;
     private String[] iface;
     private int[] uid;
     private int[] set;
@@ -152,20 +155,27 @@
     public NetworkStats(long elapsedRealtime, int initialSize) {
         this.elapsedRealtime = elapsedRealtime;
         this.size = 0;
-        this.iface = new String[initialSize];
-        this.uid = new int[initialSize];
-        this.set = new int[initialSize];
-        this.tag = new int[initialSize];
-        this.rxBytes = new long[initialSize];
-        this.rxPackets = new long[initialSize];
-        this.txBytes = new long[initialSize];
-        this.txPackets = new long[initialSize];
-        this.operations = new long[initialSize];
+        if (initialSize >= 0) {
+            this.capacity = initialSize;
+            this.iface = new String[initialSize];
+            this.uid = new int[initialSize];
+            this.set = new int[initialSize];
+            this.tag = new int[initialSize];
+            this.rxBytes = new long[initialSize];
+            this.rxPackets = new long[initialSize];
+            this.txBytes = new long[initialSize];
+            this.txPackets = new long[initialSize];
+            this.operations = new long[initialSize];
+        } else {
+            // Special case for use by NetworkStatsFactory to start out *really* empty.
+            this.capacity = 0;
+        }
     }
 
     public NetworkStats(Parcel parcel) {
         elapsedRealtime = parcel.readLong();
         size = parcel.readInt();
+        capacity = parcel.readInt();
         iface = parcel.createStringArray();
         uid = parcel.createIntArray();
         set = parcel.createIntArray();
@@ -181,6 +191,7 @@
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeLong(elapsedRealtime);
         dest.writeInt(size);
+        dest.writeInt(capacity);
         dest.writeStringArray(iface);
         dest.writeIntArray(uid);
         dest.writeIntArray(set);
@@ -222,8 +233,8 @@
      * object can be recycled across multiple calls.
      */
     public NetworkStats addValues(Entry entry) {
-        if (size >= this.iface.length) {
-            final int newLength = Math.max(iface.length, 10) * 3 / 2;
+        if (size >= capacity) {
+            final int newLength = Math.max(size, 10) * 3 / 2;
             iface = Arrays.copyOf(iface, newLength);
             uid = Arrays.copyOf(uid, newLength);
             set = Arrays.copyOf(set, newLength);
@@ -233,6 +244,7 @@
             txBytes = Arrays.copyOf(txBytes, newLength);
             txPackets = Arrays.copyOf(txPackets, newLength);
             operations = Arrays.copyOf(operations, newLength);
+            capacity = newLength;
         }
 
         iface[size] = entry.iface;
@@ -270,6 +282,10 @@
         return elapsedRealtime;
     }
 
+    public void setElapsedRealtime(long time) {
+        elapsedRealtime = time;
+    }
+
     /**
      * Return age of this {@link NetworkStats} object with respect to
      * {@link SystemClock#elapsedRealtime()}.
@@ -284,7 +300,7 @@
 
     @VisibleForTesting
     public int internalSize() {
-        return iface.length;
+        return capacity;
     }
 
     @Deprecated
@@ -491,6 +507,17 @@
     }
 
     /**
+     * Fast path for battery stats.
+     */
+    public long getTotalPackets() {
+        long total = 0;
+        for (int i = size-1; i >= 0; i--) {
+            total += rxPackets[i] + txPackets[i];
+        }
+        return total;
+    }
+
+    /**
      * Subtract the given {@link NetworkStats}, effectively leaving the delta
      * between two snapshots in time. Assumes that statistics rows collect over
      * time, and that none of them have disappeared.
@@ -507,8 +534,25 @@
      * If counters have rolled backwards, they are clamped to {@code 0} and
      * reported to the given {@link NonMonotonicObserver}.
      */
-    public static <C> NetworkStats subtract(
-            NetworkStats left, NetworkStats right, NonMonotonicObserver<C> observer, C cookie) {
+    public static <C> NetworkStats subtract(NetworkStats left, NetworkStats right,
+            NonMonotonicObserver<C> observer, C cookie) {
+        return subtract(left, right, observer, cookie, null);
+    }
+
+    /**
+     * Subtract the two given {@link NetworkStats} objects, returning the delta
+     * between two snapshots in time. Assumes that statistics rows collect over
+     * time, and that none of them have disappeared.
+     * <p>
+     * If counters have rolled backwards, they are clamped to {@code 0} and
+     * reported to the given {@link NonMonotonicObserver}.
+     * <p>
+     * If <var>recycle</var> is supplied, this NetworkStats object will be
+     * reused (and returned) as the result if it is large enough to contain
+     * the data.
+     */
+    public static <C> NetworkStats subtract(NetworkStats left, NetworkStats right,
+            NonMonotonicObserver<C> observer, C cookie, NetworkStats recycle) {
         long deltaRealtime = left.elapsedRealtime - right.elapsedRealtime;
         if (deltaRealtime < 0) {
             if (observer != null) {
@@ -519,7 +563,14 @@
 
         // result will have our rows, and elapsed time between snapshots
         final Entry entry = new Entry();
-        final NetworkStats result = new NetworkStats(deltaRealtime, left.size);
+        final NetworkStats result;
+        if (recycle != null && recycle.capacity >= left.size) {
+            result = recycle;
+            result.size = 0;
+            result.elapsedRealtime = deltaRealtime;
+        } else {
+            result = new NetworkStats(deltaRealtime, left.size);
+        }
         for (int i = 0; i < left.size; i++) {
             entry.iface = left.iface[i];
             entry.uid = left.uid[i];
diff --git a/core/java/android/net/Proxy.java b/core/java/android/net/Proxy.java
index c3e1438..bea8d1c 100644
--- a/core/java/android/net/Proxy.java
+++ b/core/java/android/net/Proxy.java
@@ -66,6 +66,19 @@
     /** {@hide} **/
     public static final String EXTRA_PROXY_INFO = "proxy";
 
+    /** @hide */
+    public static final int PROXY_VALID             = 0;
+    /** @hide */
+    public static final int PROXY_HOSTNAME_EMPTY    = 1;
+    /** @hide */
+    public static final int PROXY_HOSTNAME_INVALID  = 2;
+    /** @hide */
+    public static final int PROXY_PORT_EMPTY        = 3;
+    /** @hide */
+    public static final int PROXY_PORT_INVALID      = 4;
+    /** @hide */
+    public static final int PROXY_EXCLLIST_INVALID  = 5;
+
     private static ConnectivityManager sConnectivityManager = null;
 
     // Hostname / IP REGEX validation
@@ -77,8 +90,10 @@
 
     private static final Pattern HOSTNAME_PATTERN;
 
-    private static final String EXCLLIST_REGEXP = "$|^(.?" + NAME_IP_REGEX
-        + ")+(,(.?" + NAME_IP_REGEX + "))*$";
+    private static final String EXCL_REGEX =
+        "[a-zA-Z0-9*]+(\\-[a-zA-Z0-9*]+)*(\\.[a-zA-Z0-9*]+(\\-[a-zA-Z0-9*]+)*)*";
+
+    private static final String EXCLLIST_REGEXP = "^$|^" + EXCL_REGEX + "(," + EXCL_REGEX + ")*$";
 
     private static final Pattern EXCLLIST_PATTERN;
 
@@ -236,78 +251,27 @@
      * Validate syntax of hostname, port and exclusion list entries
      * {@hide}
      */
-    public static void validate(String hostname, String port, String exclList) {
+    public static int validate(String hostname, String port, String exclList) {
         Matcher match = HOSTNAME_PATTERN.matcher(hostname);
         Matcher listMatch = EXCLLIST_PATTERN.matcher(exclList);
 
-        if (!match.matches()) {
-            throw new IllegalArgumentException();
-        }
+        if (!match.matches()) return PROXY_HOSTNAME_INVALID;
 
-        if (!listMatch.matches()) {
-            throw new IllegalArgumentException();
-        }
+        if (!listMatch.matches()) return PROXY_EXCLLIST_INVALID;
 
-        if (hostname.length() > 0 && port.length() == 0) {
-            throw new IllegalArgumentException();
-        }
+        if (hostname.length() > 0 && port.length() == 0) return PROXY_PORT_EMPTY;
 
         if (port.length() > 0) {
-            if (hostname.length() == 0) {
-                throw new IllegalArgumentException();
-            }
+            if (hostname.length() == 0) return PROXY_HOSTNAME_EMPTY;
             int portVal = -1;
             try {
                 portVal = Integer.parseInt(port);
             } catch (NumberFormatException ex) {
-                throw new IllegalArgumentException();
+                return PROXY_PORT_INVALID;
             }
-            if (portVal <= 0 || portVal > 0xFFFF) {
-                throw new IllegalArgumentException();
-            }
+            if (portVal <= 0 || portVal > 0xFFFF) return PROXY_PORT_INVALID;
         }
-    }
-
-    static class AndroidProxySelectorRoutePlanner
-            extends org.apache.http.impl.conn.ProxySelectorRoutePlanner {
-
-        private Context mContext;
-
-        public AndroidProxySelectorRoutePlanner(SchemeRegistry schreg, ProxySelector prosel,
-                Context context) {
-            super(schreg, prosel);
-            mContext = context;
-        }
-
-        @Override
-        protected java.net.Proxy chooseProxy(List<java.net.Proxy> proxies, HttpHost target,
-                HttpRequest request, HttpContext context) {
-            return getProxy(mContext, target.getHostName());
-        }
-
-        @Override
-        protected HttpHost determineProxy(HttpHost target, HttpRequest request,
-                HttpContext context) {
-            return getPreferredHttpHost(mContext, target.getHostName());
-        }
-
-        @Override
-        public HttpRoute determineRoute(HttpHost target, HttpRequest request,
-                HttpContext context) {
-            HttpHost proxy = getPreferredHttpHost(mContext, target.getHostName());
-            if (proxy == null) {
-                return new HttpRoute(target);
-            } else {
-                return new HttpRoute(target, null, proxy, false);
-            }
-        }
-    }
-
-    /** @hide */
-    public static final HttpRoutePlanner getAndroidProxySelectorRoutePlanner(Context context) {
-        AndroidProxySelectorRoutePlanner ret = new AndroidProxySelectorRoutePlanner(
-                new SchemeRegistry(), ProxySelector.getDefault(), context);
-        return ret;
+        return PROXY_VALID;
     }
 
     /** @hide */
diff --git a/core/java/android/net/ProxyProperties.java b/core/java/android/net/ProxyProperties.java
index 010e527..50f45e8 100644
--- a/core/java/android/net/ProxyProperties.java
+++ b/core/java/android/net/ProxyProperties.java
@@ -22,7 +22,6 @@
 import android.text.TextUtils;
 
 import java.net.InetSocketAddress;
-import java.net.UnknownHostException;
 import java.util.Locale;
 
 /**
@@ -141,13 +140,9 @@
 
     public boolean isValid() {
         if (!TextUtils.isEmpty(mPacFileUrl)) return true;
-        try {
-            Proxy.validate(mHost == null ? "" : mHost, mPort == 0 ? "" : Integer.toString(mPort),
-                    mExclusionList == null ? "" : mExclusionList);
-        } catch (IllegalArgumentException e) {
-            return false;
-        }
-        return true;
+        return Proxy.PROXY_VALID == Proxy.validate(mHost == null ? "" : mHost,
+                                                mPort == 0 ? "" : Integer.toString(mPort),
+                                                mExclusionList == null ? "" : mExclusionList);
     }
 
     public java.net.Proxy makeProxy() {
diff --git a/core/java/android/net/RssiCurve.java b/core/java/android/net/RssiCurve.java
new file mode 100644
index 0000000..dd744d3
--- /dev/null
+++ b/core/java/android/net/RssiCurve.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * A curve defining the network score over a range of RSSI values.
+ *
+ * <p>For each RSSI bucket, the score may be any byte. Scores have no absolute meaning and are only
+ * considered relative to other scores assigned by the same scorer. Networks with no score are all
+ * considered equivalent and ranked below any network with a score.
+ *
+ * <p>For example, consider a curve starting at -110 dBm with a bucket width of 10 and the
+ * following buckets: {@code [-20, -10, 0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120]}.
+ * This represents a linear curve between -110 dBm and 30 dBm. It scores progressively higher at
+ * stronger signal strengths.
+ *
+ * <p>A network can be assigned a fixed score independent of RSSI by setting
+ * {@link #rssiBuckets} to a one-byte array whose element is the fixed score. {@link #start}
+ * should be set to the lowest RSSI value at which this fixed score should apply, and
+ * {@link #bucketWidth} should be set such that {@code start + bucketWidth} is equal to the
+ * highest RSSI value at which this fixed score should apply.
+ *
+ * <p>Note that RSSI values below -110 dBm or above 30 dBm are unlikely to cause any difference
+ * in connectivity behavior from those endpoints. That is, the connectivity framework will treat
+ * a network with a -120 dBm signal exactly as it would treat one with a -110 dBm signal.
+ * Therefore, graphs which specify scores outside this range may be truncated to this range by
+ * the system.
+ *
+ * @see ScoredNetwork
+ * @hide
+ */
+public class RssiCurve implements Parcelable {
+
+    /** The starting dBm of the curve. */
+    public final int start;
+
+    /** The width of each RSSI bucket, in dBm. */
+    public final int bucketWidth;
+
+    /** The score for each RSSI bucket. */
+    public final byte[] rssiBuckets;
+
+    /**
+     * Construct a new {@link RssiCurve}.
+     *
+     * @param start the starting dBm of the curve.
+     * @param bucketWidth the width of each RSSI bucket, in dBm.
+     * @param rssiBuckets the score for each RSSI bucket.
+     */
+    public RssiCurve(int start, int bucketWidth, byte[] rssiBuckets) {
+        this.start = start;
+        this.bucketWidth = bucketWidth;
+        if (rssiBuckets == null || rssiBuckets.length == 0) {
+            throw new IllegalArgumentException("rssiBuckets must be at least one element large.");
+        }
+        this.rssiBuckets = rssiBuckets;
+    }
+
+    private RssiCurve(Parcel in) {
+        start = in.readInt();
+        bucketWidth = in.readInt();
+        int bucketCount = in.readInt();
+        rssiBuckets = new byte[bucketCount];
+        in.readByteArray(rssiBuckets);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(start);
+        out.writeInt(bucketWidth);
+        out.writeInt(rssiBuckets.length);
+        out.writeByteArray(rssiBuckets);
+    }
+
+    /**
+     * Lookup the score for a given RSSI value.
+     *
+     * @param rssi The RSSI to lookup. If the RSSI falls below the start of the curve, the score at
+     *         the start of the curve will be returned. If it falls after the end of the curve, the
+     *         score at the end of the curve will be returned.
+     * @return the score for the given RSSI.
+     */
+    public byte lookupScore(int rssi) {
+        int index = (rssi - start) / bucketWidth;
+
+        // Snap the index to the closest bucket if it falls outside the curve.
+        if (index < 0) {
+            index = 0;
+        } else if (index > rssiBuckets.length - 1) {
+            index = rssiBuckets.length - 1;
+        }
+
+        return rssiBuckets[index];
+    }
+
+    /**
+     * Determine if two RSSI curves are defined in the same way.
+     *
+     * <p>Note that two curves can be equivalent but defined differently, e.g. if one bucket in one
+     * curve is split into two buckets in another. For the purpose of this method, these curves are
+     * not considered equal to each other.
+     */
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        RssiCurve rssiCurve = (RssiCurve) o;
+
+        return start == rssiCurve.start &&
+                bucketWidth == rssiCurve.bucketWidth &&
+                Arrays.equals(rssiBuckets, rssiCurve.rssiBuckets);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(start, bucketWidth, rssiBuckets);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append("RssiCurve[start=")
+                .append(start)
+                .append(",bucketWidth=")
+                .append(bucketWidth);
+
+        sb.append(",buckets=");
+        for (int i = 0; i < rssiBuckets.length; i++) {
+            sb.append(rssiBuckets[i]);
+            if (i < rssiBuckets.length - 1) {
+                sb.append(",");
+            }
+        }
+        sb.append("]");
+
+        return sb.toString();
+    }
+
+    public static final Creator<RssiCurve> CREATOR =
+            new Creator<RssiCurve>() {
+                @Override
+                public RssiCurve createFromParcel(Parcel in) {
+                    return new RssiCurve(in);
+                }
+
+                @Override
+                public RssiCurve[] newArray(int size) {
+                    return new RssiCurve[size];
+                }
+            };
+}
diff --git a/core/java/android/net/SSLCertificateSocketFactory.java b/core/java/android/net/SSLCertificateSocketFactory.java
index b0278d3..12e8791 100644
--- a/core/java/android/net/SSLCertificateSocketFactory.java
+++ b/core/java/android/net/SSLCertificateSocketFactory.java
@@ -135,7 +135,8 @@
      * disabled, using an optional handshake timeout and SSL session cache.
      *
      * <p class="caution"><b>Warning:</b> Sockets created using this factory
-     * are vulnerable to man-in-the-middle attacks!</p>
+     * are vulnerable to man-in-the-middle attacks!</p>. The caller must implement
+     * its own verification.
      *
      * @param handshakeTimeoutMillis to use for SSL connection handshake, or 0
      *         for none.  The socket timeout is reset to 0 after the handshake.
@@ -223,8 +224,6 @@
             if (mInsecureFactory == null) {
                 if (mSecure) {
                     Log.w(TAG, "*** BYPASSING SSL SECURITY CHECKS (socket.relaxsslcheck=yes) ***");
-                } else {
-                    Log.w(TAG, "Bypassing SSL security checks at caller's request");
                 }
                 mInsecureFactory = makeSocketFactory(mKeyManagers, INSECURE_TRUST_MANAGER);
             }
@@ -431,6 +430,7 @@
         s.setAlpnProtocols(mAlpnProtocols);
         s.setHandshakeTimeout(mHandshakeTimeoutMillis);
         s.setChannelIdPrivateKey(mChannelIdPrivateKey);
+        s.setHostname(host);
         if (mSecure) {
             verifyHostname(s, host);
         }
diff --git a/core/java/android/net/SSLSessionCache.java b/core/java/android/net/SSLSessionCache.java
index 15421de..65db2c3 100644
--- a/core/java/android/net/SSLSessionCache.java
+++ b/core/java/android/net/SSLSessionCache.java
@@ -19,12 +19,16 @@
 import android.content.Context;
 import android.util.Log;
 
+import com.android.org.conscrypt.ClientSessionContext;
 import com.android.org.conscrypt.FileClientSessionCache;
 import com.android.org.conscrypt.SSLClientSessionCache;
 
 import java.io.File;
 import java.io.IOException;
 
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLSessionContext;
+
 /**
  * File-based cache of established SSL sessions.  When re-establishing a
  * connection to the same server, using an SSL session cache can save some time,
@@ -38,6 +42,40 @@
     /* package */ final SSLClientSessionCache mSessionCache;
 
     /**
+     * Installs a {@link SSLSessionCache} on a {@link SSLContext}. The cache will
+     * be used on all socket factories created by this context (including factories
+     * created before this call).
+     *
+     * @param cache the cache instance to install, or {@code null} to uninstall any
+     *         existing cache.
+     * @param context the context to install it on.
+     * @throws IllegalArgumentException if the context does not support a session
+     *         cache.
+     *
+     * @hide candidate for public API
+     */
+    public static void install(SSLSessionCache cache, SSLContext context) {
+        SSLSessionContext clientContext = context.getClientSessionContext();
+        if (clientContext instanceof ClientSessionContext) {
+            ((ClientSessionContext) clientContext).setPersistentCache(
+                    cache == null ? null : cache.mSessionCache);
+        } else {
+            throw new IllegalArgumentException("Incompatible SSLContext: " + context);
+        }
+    }
+
+    /**
+     * NOTE: This needs to be Object (and not SSLClientSessionCache) because apps
+     * that build directly against the framework (and not the SDK) might not declare
+     * a dependency on conscrypt. Javac will then has fail while resolving constructors.
+     *
+     * @hide For unit test use only
+     */
+    public SSLSessionCache(Object cache) {
+        mSessionCache = (SSLClientSessionCache) cache;
+    }
+
+    /**
      * Create a session cache using the specified directory.
      * Individual session entries will be files within the directory.
      * Multiple instances for the same directory share data internally.
diff --git a/core/java/android/net/ScoredNetwork.aidl b/core/java/android/net/ScoredNetwork.aidl
new file mode 100644
index 0000000..f83db11
--- /dev/null
+++ b/core/java/android/net/ScoredNetwork.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.net;
+
+parcelable ScoredNetwork;
diff --git a/core/java/android/net/ScoredNetwork.java b/core/java/android/net/ScoredNetwork.java
new file mode 100644
index 0000000..7902313
--- /dev/null
+++ b/core/java/android/net/ScoredNetwork.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * A network identifier along with a score for the quality of that network.
+ *
+ * @hide
+ */
+public class ScoredNetwork implements Parcelable {
+
+    /** A {@link NetworkKey} uniquely identifying this network. */
+    public final NetworkKey networkKey;
+
+    /**
+     * The {@link RssiCurve} representing the scores for this network based on the RSSI.
+     *
+     * <p>This field is optional and may be set to null to indicate that no score is available for
+     * this network at this time. Such networks, along with networks for which the scorer has not
+     * responded, are always prioritized below scored networks, regardless of the score.
+     */
+    public final RssiCurve rssiCurve;
+
+    /**
+     * Construct a new {@link ScoredNetwork}.
+     *
+     * @param networkKey the {@link NetworkKey} uniquely identifying this network.
+     * @param rssiCurve the {@link RssiCurve} representing the scores for this network based on the
+     *     RSSI. This field is optional, and may be skipped to represent a network which the scorer
+     *     has opted not to score at this time. Passing a null value here is strongly preferred to
+     *     not returning any {@link ScoredNetwork} for a given {@link NetworkKey} because it
+     *     indicates to the system not to request scores for this network in the future, although
+     *     the scorer may choose to issue an out-of-band update at any time.
+     */
+    public ScoredNetwork(NetworkKey networkKey, RssiCurve rssiCurve) {
+        this.networkKey = networkKey;
+        this.rssiCurve = rssiCurve;
+    }
+
+    private ScoredNetwork(Parcel in) {
+        networkKey = NetworkKey.CREATOR.createFromParcel(in);
+        if (in.readByte() == 1) {
+            rssiCurve = RssiCurve.CREATOR.createFromParcel(in);
+        } else {
+            rssiCurve = null;
+        }
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        networkKey.writeToParcel(out, flags);
+        if (rssiCurve != null) {
+            out.writeByte((byte) 1);
+            rssiCurve.writeToParcel(out, flags);
+        } else {
+            out.writeByte((byte) 0);
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        ScoredNetwork that = (ScoredNetwork) o;
+
+        return Objects.equals(networkKey, that.networkKey) &&
+                Objects.equals(rssiCurve, that.rssiCurve);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(networkKey, rssiCurve);
+    }
+
+    @Override
+    public String toString() {
+        return "ScoredNetwork[key=" + networkKey + ",score=" + rssiCurve + "]";
+    }
+
+    public static final Parcelable.Creator<ScoredNetwork> CREATOR =
+            new Parcelable.Creator<ScoredNetwork>() {
+                @Override
+                public ScoredNetwork createFromParcel(Parcel in) {
+                    return new ScoredNetwork(in);
+                }
+
+                @Override
+                public ScoredNetwork[] newArray(int size) {
+                    return new ScoredNetwork[size];
+                }
+            };
+}
diff --git a/core/java/android/net/SntpClient.java b/core/java/android/net/SntpClient.java
index 316440f..7673011 100644
--- a/core/java/android/net/SntpClient.java
+++ b/core/java/android/net/SntpClient.java
@@ -19,7 +19,6 @@
 import android.os.SystemClock;
 import android.util.Log;
 
-import java.io.IOException;
 import java.net.DatagramPacket;
 import java.net.DatagramSocket;
 import java.net.InetAddress;
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java
index a7a8a0a..ce70455 100644
--- a/core/java/android/net/Uri.java
+++ b/core/java/android/net/Uri.java
@@ -21,6 +21,7 @@
 import android.os.Parcelable;
 import android.os.StrictMode;
 import android.util.Log;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.UnsupportedEncodingException;
@@ -32,8 +33,10 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
+import java.util.Objects;
 import java.util.RandomAccess;
 import java.util.Set;
+
 import libcore.net.UriCodec;
 
 /**
@@ -2338,4 +2341,29 @@
             StrictMode.onFileUriExposed(location);
         }
     }
+
+    /**
+     * Test if this is a path prefix match against the given Uri. Verifies that
+     * scheme, authority, and atomic path segments match.
+     *
+     * @hide
+     */
+    public boolean isPathPrefixMatch(Uri prefix) {
+        if (!Objects.equals(getScheme(), prefix.getScheme())) return false;
+        if (!Objects.equals(getAuthority(), prefix.getAuthority())) return false;
+
+        List<String> seg = getPathSegments();
+        List<String> prefixSeg = prefix.getPathSegments();
+
+        final int prefixSize = prefixSeg.size();
+        if (seg.size() < prefixSize) return false;
+
+        for (int i = 0; i < prefixSize; i++) {
+            if (!Objects.equals(seg.get(i), prefixSeg.get(i))) {
+                return false;
+            }
+        }
+
+        return true;
+    }
 }
diff --git a/core/java/android/net/WifiKey.java b/core/java/android/net/WifiKey.java
new file mode 100644
index 0000000..9e92e89
--- /dev/null
+++ b/core/java/android/net/WifiKey.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+import java.util.regex.Pattern;
+
+/**
+ * Information identifying a Wi-Fi network.
+ * @see NetworkKey
+ *
+ * @hide
+ */
+public class WifiKey implements Parcelable {
+
+    // Patterns used for validation.
+    private static final Pattern SSID_PATTERN = Pattern.compile("(\".*\")|(0x[\\p{XDigit}]+)");
+    private static final Pattern BSSID_PATTERN =
+            Pattern.compile("([\\p{XDigit}]{2}:){5}[\\p{XDigit}]{2}");
+
+    /**
+     * The service set identifier (SSID) of an 802.11 network. If the SSID can be decoded as
+     * UTF-8, it will be surrounded by double quotation marks. Otherwise, it will be a string of
+     * hex digits starting with 0x.
+     */
+    public final String ssid;
+
+    /**
+     * The basic service set identifier (BSSID) of an access point for this network. This will
+     * be in the form of a six-byte MAC address: {@code XX:XX:XX:XX:XX:XX}, where each X is a
+     * hexadecimal digit.
+     */
+    public final String bssid;
+
+    /**
+     * Construct a new {@link WifiKey} for the given Wi-Fi SSID/BSSID pair.
+     *
+     * @param ssid the service set identifier (SSID) of an 802.11 network. If the SSID can be
+     *         decoded as UTF-8, it should be surrounded by double quotation marks. Otherwise,
+     *         it should be a string of hex digits starting with 0x.
+     * @param bssid the basic service set identifier (BSSID) of this network's access point.
+     *         This should be in the form of a six-byte MAC address: {@code XX:XX:XX:XX:XX:XX},
+     *         where each X is a hexadecimal digit.
+     * @throws IllegalArgumentException if either the SSID or BSSID is invalid.
+     */
+    public WifiKey(String ssid, String bssid) {
+        if (!SSID_PATTERN.matcher(ssid).matches()) {
+            throw new IllegalArgumentException("Invalid ssid: " + ssid);
+        }
+        if (!BSSID_PATTERN.matcher(bssid).matches()) {
+            throw new IllegalArgumentException("Invalid bssid: " + bssid);
+        }
+        this.ssid = ssid;
+        this.bssid = bssid;
+    }
+
+    private WifiKey(Parcel in) {
+        ssid = in.readString();
+        bssid = in.readString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeString(ssid);
+        out.writeString(bssid);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        WifiKey wifiKey = (WifiKey) o;
+
+        return Objects.equals(ssid, wifiKey.ssid) && Objects.equals(bssid, wifiKey.bssid);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(ssid, bssid);
+    }
+
+    @Override
+    public String toString() {
+        return "WifiKey[SSID=" + ssid + ",BSSID=" + bssid + "]";
+    }
+
+    public static final Creator<WifiKey> CREATOR =
+            new Creator<WifiKey>() {
+                @Override
+                public WifiKey createFromParcel(Parcel in) {
+                    return new WifiKey(in);
+                }
+
+                @Override
+                public WifiKey[] newArray(int size) {
+                    return new WifiKey[size];
+                }
+            };
+}
diff --git a/core/java/android/net/dhcp/DhcpAckPacket.java b/core/java/android/net/dhcp/DhcpAckPacket.java
index 4eca531..7b8be9c 100644
--- a/core/java/android/net/dhcp/DhcpAckPacket.java
+++ b/core/java/android/net/dhcp/DhcpAckPacket.java
@@ -19,7 +19,6 @@
 import java.net.InetAddress;
 import java.net.Inet4Address;
 import java.nio.ByteBuffer;
-import java.util.List;
 
 /**
  * This class implements the DHCP-ACK packet.
diff --git a/core/java/android/net/dhcp/DhcpOfferPacket.java b/core/java/android/net/dhcp/DhcpOfferPacket.java
index 3d79f4d..f1c30e1 100644
--- a/core/java/android/net/dhcp/DhcpOfferPacket.java
+++ b/core/java/android/net/dhcp/DhcpOfferPacket.java
@@ -19,7 +19,6 @@
 import java.net.InetAddress;
 import java.net.Inet4Address;
 import java.nio.ByteBuffer;
-import java.util.List;
 
 /**
  * This class implements the DHCP-OFFER packet.
diff --git a/core/java/android/net/dhcp/DhcpPacket.java b/core/java/android/net/dhcp/DhcpPacket.java
index 317a9b4..c7c25f0 100644
--- a/core/java/android/net/dhcp/DhcpPacket.java
+++ b/core/java/android/net/dhcp/DhcpPacket.java
@@ -1,8 +1,5 @@
 package android.net.dhcp;
 
-import android.util.Log;
-
-import java.io.UnsupportedEncodingException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
diff --git a/core/java/android/net/dhcp/DhcpStateMachine.java b/core/java/android/net/dhcp/DhcpStateMachine.java
index b6c384d..bc9a798 100644
--- a/core/java/android/net/dhcp/DhcpStateMachine.java
+++ b/core/java/android/net/dhcp/DhcpStateMachine.java
@@ -17,7 +17,6 @@
 package android.net.dhcp;
 
 import java.net.InetAddress;
-import java.nio.ByteBuffer;
 import java.util.List;
 
 /**
diff --git a/core/java/android/net/http/AndroidHttpClientConnection.java b/core/java/android/net/http/AndroidHttpClientConnection.java
index eb96679..6d48fce 100644
--- a/core/java/android/net/http/AndroidHttpClientConnection.java
+++ b/core/java/android/net/http/AndroidHttpClientConnection.java
@@ -16,8 +16,6 @@
 
 package android.net.http;
 
-import org.apache.http.Header;
-
 import org.apache.http.HttpConnection;
 import org.apache.http.HttpClientConnection;
 import org.apache.http.HttpConnectionMetrics;
@@ -27,12 +25,10 @@
 import org.apache.http.HttpInetConnection;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseFactory;
 import org.apache.http.NoHttpResponseException;
 import org.apache.http.StatusLine;
 import org.apache.http.entity.BasicHttpEntity;
 import org.apache.http.entity.ContentLengthStrategy;
-import org.apache.http.impl.DefaultHttpResponseFactory;
 import org.apache.http.impl.HttpConnectionMetricsImpl;
 import org.apache.http.impl.entity.EntitySerializer;
 import org.apache.http.impl.entity.StrictContentLengthStrategy;
diff --git a/core/java/android/net/http/Connection.java b/core/java/android/net/http/Connection.java
index 95cecd2..834ad69 100644
--- a/core/java/android/net/http/Connection.java
+++ b/core/java/android/net/http/Connection.java
@@ -21,7 +21,6 @@
 
 import java.io.IOException;
 import java.net.UnknownHostException;
-import java.util.ListIterator;
 import java.util.LinkedList;
 
 import javax.net.ssl.SSLHandshakeException;
diff --git a/core/java/android/net/http/ConnectionThread.java b/core/java/android/net/http/ConnectionThread.java
index 32191d2..d825530 100644
--- a/core/java/android/net/http/ConnectionThread.java
+++ b/core/java/android/net/http/ConnectionThread.java
@@ -19,8 +19,6 @@
 import android.content.Context;
 import android.os.SystemClock;
 
-import org.apache.http.HttpHost;
-
 import java.lang.Thread;
 
 /**
diff --git a/core/java/android/net/http/HttpConnection.java b/core/java/android/net/http/HttpConnection.java
index 6df86bf..edf8fed3 100644
--- a/core/java/android/net/http/HttpConnection.java
+++ b/core/java/android/net/http/HttpConnection.java
@@ -21,9 +21,7 @@
 import java.net.Socket;
 import java.io.IOException;
 
-import org.apache.http.HttpClientConnection;
 import org.apache.http.HttpHost;
-import org.apache.http.impl.DefaultHttpClientConnection;
 import org.apache.http.params.BasicHttpParams;
 import org.apache.http.params.HttpConnectionParams;
 
diff --git a/core/java/android/net/http/HttpResponseCache.java b/core/java/android/net/http/HttpResponseCache.java
index 269dfb8..2785a15 100644
--- a/core/java/android/net/http/HttpResponseCache.java
+++ b/core/java/android/net/http/HttpResponseCache.java
@@ -17,9 +17,6 @@
 package android.net.http;
 
 import android.content.Context;
-import com.android.okhttp.OkResponseCache;
-import com.android.okhttp.ResponseSource;
-import com.android.okhttp.internal.DiskLruCache;
 import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
@@ -32,7 +29,6 @@
 import java.util.List;
 import java.util.Map;
 import javax.net.ssl.HttpsURLConnection;
-import libcore.io.IoUtils;
 import org.apache.http.impl.client.DefaultHttpClient;
 
 /**
diff --git a/core/java/android/net/http/HttpsConnection.java b/core/java/android/net/http/HttpsConnection.java
index 7a12e53..6bf01e2 100644
--- a/core/java/android/net/http/HttpsConnection.java
+++ b/core/java/android/net/http/HttpsConnection.java
@@ -40,7 +40,6 @@
 import javax.net.ssl.X509TrustManager;
 import java.io.File;
 import java.io.IOException;
-import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.security.KeyManagementException;
 import java.security.cert.X509Certificate;
diff --git a/core/java/android/net/http/Request.java b/core/java/android/net/http/Request.java
index 8c0d503..76d7bb9 100644
--- a/core/java/android/net/http/Request.java
+++ b/core/java/android/net/http/Request.java
@@ -26,15 +26,12 @@
 
 import org.apache.http.entity.InputStreamEntity;
 import org.apache.http.Header;
-import org.apache.http.HttpClientConnection;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpEntityEnclosingRequest;
 import org.apache.http.HttpException;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
-import org.apache.http.HttpVersion;
 import org.apache.http.ParseException;
 import org.apache.http.ProtocolVersion;
 
diff --git a/core/java/android/net/http/RequestQueue.java b/core/java/android/net/http/RequestQueue.java
index ce6b1ad..7d2da1b 100644
--- a/core/java/android/net/http/RequestQueue.java
+++ b/core/java/android/net/http/RequestQueue.java
@@ -29,10 +29,6 @@
 import android.net.NetworkInfo;
 import android.net.Proxy;
 import android.net.WebAddress;
-import android.os.Handler;
-import android.os.Message;
-import android.os.SystemProperties;
-import android.text.TextUtils;
 import android.util.Log;
 
 import java.io.InputStream;
diff --git a/core/java/android/net/http/X509TrustManagerExtensions.java b/core/java/android/net/http/X509TrustManagerExtensions.java
index d730a7b..830ddce 100644
--- a/core/java/android/net/http/X509TrustManagerExtensions.java
+++ b/core/java/android/net/http/X509TrustManagerExtensions.java
@@ -76,4 +76,18 @@
         return mDelegate.checkServerTrusted(chain, authType,
                 new DelegatingSSLSession.HostnameWrap(host));
     }
+
+    /**
+     * Checks whether a CA certificate is added by an user.
+     *
+     * <p>Since {@link X509TrustManager#checkServerTrusted} allows its parameter {@code chain} to
+     * chain up to user-added CA certificates, this method can be used to perform additional
+     * policies for user-added CA certificates.
+     *
+     * @return {@code true} to indicate that the certificate was added by the user, {@code false}
+     * otherwise.
+     */
+    public boolean isUserAddedCertificate(X509Certificate cert) {
+        return mDelegate.isUserAddedCertificate(cert);
+    }
 }
diff --git a/core/java/android/net/nsd/NsdManager.java b/core/java/android/net/nsd/NsdManager.java
index 7b2c623..377ed88 100644
--- a/core/java/android/net/nsd/NsdManager.java
+++ b/core/java/android/net/nsd/NsdManager.java
@@ -19,8 +19,6 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.Context;
-import android.os.Binder;
-import android.os.IBinder;
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Looper;
@@ -213,6 +211,7 @@
     private Context mContext;
 
     private static final int INVALID_LISTENER_KEY = 0;
+    private static final int BUSY_LISTENER_KEY = -1;
     private int mListenerKey = 1;
     private final SparseArray mListenerMap = new SparseArray();
     private final SparseArray<NsdServiceInfo> mServiceMap = new SparseArray<NsdServiceInfo>();
@@ -319,71 +318,74 @@
                 Log.d(TAG, "Stale key " + message.arg2);
                 return;
             }
-            boolean listenerRemove = true;
             NsdServiceInfo ns = getNsdService(message.arg2);
             switch (message.what) {
                 case DISCOVER_SERVICES_STARTED:
                     String s = getNsdServiceInfoType((NsdServiceInfo) message.obj);
                     ((DiscoveryListener) listener).onDiscoveryStarted(s);
-                    // Keep listener until stop discovery
-                    listenerRemove = false;
                     break;
                 case DISCOVER_SERVICES_FAILED:
+                    removeListener(message.arg2);
                     ((DiscoveryListener) listener).onStartDiscoveryFailed(getNsdServiceInfoType(ns),
                             message.arg1);
                     break;
                 case SERVICE_FOUND:
                     ((DiscoveryListener) listener).onServiceFound((NsdServiceInfo) message.obj);
-                    // Keep listener until stop discovery
-                    listenerRemove = false;
                     break;
                 case SERVICE_LOST:
                     ((DiscoveryListener) listener).onServiceLost((NsdServiceInfo) message.obj);
-                    // Keep listener until stop discovery
-                    listenerRemove = false;
                     break;
                 case STOP_DISCOVERY_FAILED:
+                    removeListener(message.arg2);
                     ((DiscoveryListener) listener).onStopDiscoveryFailed(getNsdServiceInfoType(ns),
                             message.arg1);
                     break;
                 case STOP_DISCOVERY_SUCCEEDED:
+                    removeListener(message.arg2);
                     ((DiscoveryListener) listener).onDiscoveryStopped(getNsdServiceInfoType(ns));
                     break;
                 case REGISTER_SERVICE_FAILED:
+                    removeListener(message.arg2);
                     ((RegistrationListener) listener).onRegistrationFailed(ns, message.arg1);
                     break;
                 case REGISTER_SERVICE_SUCCEEDED:
                     ((RegistrationListener) listener).onServiceRegistered(
                             (NsdServiceInfo) message.obj);
-                    // Keep listener until unregister
-                    listenerRemove = false;
                     break;
                 case UNREGISTER_SERVICE_FAILED:
+                    removeListener(message.arg2);
                     ((RegistrationListener) listener).onUnregistrationFailed(ns, message.arg1);
                     break;
                 case UNREGISTER_SERVICE_SUCCEEDED:
+                    removeListener(message.arg2);
                     ((RegistrationListener) listener).onServiceUnregistered(ns);
                     break;
                 case RESOLVE_SERVICE_FAILED:
+                    removeListener(message.arg2);
                     ((ResolveListener) listener).onResolveFailed(ns, message.arg1);
                     break;
                 case RESOLVE_SERVICE_SUCCEEDED:
+                    removeListener(message.arg2);
                     ((ResolveListener) listener).onServiceResolved((NsdServiceInfo) message.obj);
                     break;
                 default:
                     Log.d(TAG, "Ignored " + message);
                     break;
             }
-            if (listenerRemove) {
-                removeListener(message.arg2);
-            }
         }
     }
 
+    // if the listener is already in the map, reject it.  Otherwise, add it and
+    // return its key.
+
     private int putListener(Object listener, NsdServiceInfo s) {
         if (listener == null) return INVALID_LISTENER_KEY;
         int key;
         synchronized (mMapLock) {
+            int valueIndex = mListenerMap.indexOfValue(listener);
+            if (valueIndex != -1) {
+                return BUSY_LISTENER_KEY;
+            }
             do {
                 key = mListenerKey++;
             } while (key == INVALID_LISTENER_KEY);
@@ -424,7 +426,6 @@
         return INVALID_LISTENER_KEY;
     }
 
-
     private String getNsdServiceInfoType(NsdServiceInfo s) {
         if (s == null) return "?";
         return s.getServiceType();
@@ -451,14 +452,18 @@
      * Register a service to be discovered by other services.
      *
      * <p> The function call immediately returns after sending a request to register service
-     * to the framework. The application is notified of a success to initiate
-     * discovery through the callback {@link RegistrationListener#onServiceRegistered} or a failure
+     * to the framework. The application is notified of a successful registration
+     * through the callback {@link RegistrationListener#onServiceRegistered} or a failure
      * through {@link RegistrationListener#onRegistrationFailed}.
      *
+     * <p> The application should call {@link #unregisterService} when the service
+     * registration is no longer required, and/or whenever the application is stopped.
+     *
      * @param serviceInfo The service being registered
      * @param protocolType The service discovery protocol
      * @param listener The listener notifies of a successful registration and is used to
      * unregister this service through a call on {@link #unregisterService}. Cannot be null.
+     * Cannot be in use for an active service registration.
      */
     public void registerService(NsdServiceInfo serviceInfo, int protocolType,
             RegistrationListener listener) {
@@ -475,8 +480,11 @@
         if (protocolType != PROTOCOL_DNS_SD) {
             throw new IllegalArgumentException("Unsupported protocol");
         }
-        mAsyncChannel.sendMessage(REGISTER_SERVICE, 0, putListener(listener, serviceInfo),
-                serviceInfo);
+        int key = putListener(listener, serviceInfo);
+        if (key == BUSY_LISTENER_KEY) {
+            throw new IllegalArgumentException("listener already in use");
+        }
+        mAsyncChannel.sendMessage(REGISTER_SERVICE, 0, key, serviceInfo);
     }
 
     /**
@@ -486,7 +494,11 @@
      *
      * @param listener This should be the listener object that was passed to
      * {@link #registerService}. It identifies the service that should be unregistered
-     * and notifies of a successful unregistration.
+     * and notifies of a successful or unsuccessful unregistration via the listener
+     * callbacks.  In API versions 20 and above, the listener object may be used for
+     * another service registration once the callback has been called.  In API versions <= 19,
+     * there is no entirely reliable way to know when a listener may be re-used, and a new
+     * listener should be created for each service registration request.
      */
     public void unregisterService(RegistrationListener listener) {
         int id = getListenerKey(listener);
@@ -516,12 +528,16 @@
      * <p> Upon failure to start, service discovery is not active and application does
      * not need to invoke {@link #stopServiceDiscovery}
      *
+     * <p> The application should call {@link #stopServiceDiscovery} when discovery of this
+     * service type is no longer required, and/or whenever the application is paused or
+     * stopped.
+     *
      * @param serviceType The service type being discovered. Examples include "_http._tcp" for
      * http services or "_ipp._tcp" for printers
      * @param protocolType The service discovery protocol
      * @param listener  The listener notifies of a successful discovery and is used
      * to stop discovery on this serviceType through a call on {@link #stopServiceDiscovery}.
-     * Cannot be null.
+     * Cannot be null. Cannot be in use for an active service discovery.
      */
     public void discoverServices(String serviceType, int protocolType, DiscoveryListener listener) {
         if (listener == null) {
@@ -537,11 +553,17 @@
 
         NsdServiceInfo s = new NsdServiceInfo();
         s.setServiceType(serviceType);
-        mAsyncChannel.sendMessage(DISCOVER_SERVICES, 0, putListener(listener, s), s);
+
+        int key = putListener(listener, s);
+        if (key == BUSY_LISTENER_KEY) {
+            throw new IllegalArgumentException("listener already in use");
+        }
+
+        mAsyncChannel.sendMessage(DISCOVER_SERVICES, 0, key, s);
     }
 
     /**
-     * Stop service discovery initiated with {@link #discoverServices}. An active service
+     * Stop service discovery initiated with {@link #discoverServices}.  An active service
      * discovery is notified to the application with {@link DiscoveryListener#onDiscoveryStarted}
      * and it stays active until the application invokes a stop service discovery. A successful
      * stop is notified to with a call to {@link DiscoveryListener#onDiscoveryStopped}.
@@ -550,7 +572,11 @@
      * {@link DiscoveryListener#onStopDiscoveryFailed}.
      *
      * @param listener This should be the listener object that was passed to {@link #discoverServices}.
-     * It identifies the discovery that should be stopped and notifies of a successful stop.
+     * It identifies the discovery that should be stopped and notifies of a successful or
+     * unsuccessful stop.  In API versions 20 and above, the listener object may be used for
+     * another service discovery once the callback has been called.  In API versions <= 19,
+     * there is no entirely reliable way to know when a listener may be re-used, and a new
+     * listener should be created for each service discovery request.
      */
     public void stopServiceDiscovery(DiscoveryListener listener) {
         int id = getListenerKey(listener);
@@ -570,6 +596,7 @@
      *
      * @param serviceInfo service to be resolved
      * @param listener to receive callback upon success or failure. Cannot be null.
+     * Cannot be in use for an active service resolution.
      */
     public void resolveService(NsdServiceInfo serviceInfo, ResolveListener listener) {
         if (TextUtils.isEmpty(serviceInfo.getServiceName()) ||
@@ -579,8 +606,13 @@
         if (listener == null) {
             throw new IllegalArgumentException("listener cannot be null");
         }
-        mAsyncChannel.sendMessage(RESOLVE_SERVICE, 0, putListener(listener, serviceInfo),
-                serviceInfo);
+
+        int key = putListener(listener, serviceInfo);
+
+        if (key == BUSY_LISTENER_KEY) {
+            throw new IllegalArgumentException("listener already in use");
+        }
+        mAsyncChannel.sendMessage(RESOLVE_SERVICE, 0, key, serviceInfo);
     }
 
     /** Internal use only @hide */
diff --git a/core/java/android/nfc/INfcAdapter.aidl b/core/java/android/nfc/INfcAdapter.aidl
index 8414738..635a50f 100644
--- a/core/java/android/nfc/INfcAdapter.aidl
+++ b/core/java/android/nfc/INfcAdapter.aidl
@@ -25,6 +25,7 @@
 import android.nfc.INfcAdapterExtras;
 import android.nfc.INfcTag;
 import android.nfc.INfcCardEmulation;
+import android.nfc.INfcUnlockSettings;
 import android.os.Bundle;
 
 /**
@@ -35,6 +36,7 @@
     INfcTag getNfcTagInterface();
     INfcCardEmulation getNfcCardEmulationInterface();
     INfcAdapterExtras getNfcAdapterExtrasInterface(in String pkg);
+    INfcUnlockSettings getNfcUnlockSettingsInterface();
 
     int getState();
     boolean disable(boolean saveState);
@@ -46,6 +48,7 @@
     void setForegroundDispatch(in PendingIntent intent,
             in IntentFilter[] filters, in TechListParcel techLists);
     void setAppCallback(in IAppCallback callback);
+    void invokeBeam();
 
     void dispatch(in Tag tag);
 
diff --git a/core/java/android/nfc/INfcCardEmulation.aidl b/core/java/android/nfc/INfcCardEmulation.aidl
index b8a5ba7..ae9796b 100644
--- a/core/java/android/nfc/INfcCardEmulation.aidl
+++ b/core/java/android/nfc/INfcCardEmulation.aidl
@@ -17,6 +17,7 @@
 package android.nfc;
 
 import android.content.ComponentName;
+import android.nfc.cardemulation.AidGroup;
 import android.nfc.cardemulation.ApduServiceInfo;
 import android.os.RemoteCallback;
 
@@ -29,5 +30,8 @@
     boolean isDefaultServiceForAid(int userHandle, in ComponentName service, String aid);
     boolean setDefaultServiceForCategory(int userHandle, in ComponentName service, String category);
     boolean setDefaultForNextTap(int userHandle, in ComponentName service);
+    boolean registerAidGroupForService(int userHandle, in ComponentName service, in AidGroup aidGroup);
+    AidGroup getAidGroupForService(int userHandle, in ComponentName service, String category);
+    boolean removeAidGroupForService(int userHandle, in ComponentName service, String category);
     List<ApduServiceInfo> getServices(int userHandle, in String category);
 }
diff --git a/core/java/android/nfc/INfcUnlockSettings.aidl b/core/java/android/nfc/INfcUnlockSettings.aidl
new file mode 100644
index 0000000..649eeed
--- /dev/null
+++ b/core/java/android/nfc/INfcUnlockSettings.aidl
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2013 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 android.nfc;
+
+import android.nfc.Tag;
+import java.util.List;
+
+/**
+ * Interface to NFC unlock functionality.
+ *
+ * @hide
+ */
+interface INfcUnlockSettings {
+
+    /**
+     * Checks the validity of the tag and attempts to unlock the screen.
+     *
+     * @return true if the screen was successfuly unlocked.
+     */
+    boolean tryUnlock(int userId, in Tag tag);
+
+    /**
+     * Registers the given tag as an unlock tag. Subsequent calls to {@code tryUnlock}
+     * with the same {@code tag} should succeed.
+     *
+     * @return true if the tag was successfully registered.
+     */
+    boolean registerTag(int userId, in Tag tag);
+
+    /**
+     * Deregisters the tag with the corresponding timestamp.
+     * Subsequent calls to {@code tryUnlock} with the same tag should fail.
+     *
+     * @return true if the tag was successfully deleted.
+     */
+    boolean deregisterTag(int userId, long timestamp);
+
+    /**
+     * Used for user-visible rendering of registered tags.
+     *
+     * @return a list of the times in millis since epoch when the registered tags were paired.
+     */
+    long[] getTagRegistryTimes(int userId);
+
+    /**
+     * Determines the state of the NFC unlock feature.
+     *
+     * @return true if NFC unlock is enabled.
+     */
+    boolean getNfcUnlockEnabled(int userId);
+
+    /**
+     * Sets the state [ON | OFF] of the NFC unlock feature.
+     */
+    void setNfcUnlockEnabled(int userId, boolean enabled);
+}
diff --git a/core/java/android/nfc/NdefRecord.java b/core/java/android/nfc/NdefRecord.java
index 2b58818..83d17ba 100644
--- a/core/java/android/nfc/NdefRecord.java
+++ b/core/java/android/nfc/NdefRecord.java
@@ -20,6 +20,7 @@
 import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
+
 import java.nio.BufferUnderflowException;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
@@ -269,6 +270,7 @@
             "urn:epc:pat:", // 0x20
             "urn:epc:raw:", // 0x21
             "urn:epc:", // 0x22
+            "urn:nfc:", // 0x23
     };
 
     private static final int MAX_PAYLOAD_SIZE = 10 * (1 << 20);  // 10 MB payload limit
@@ -473,6 +475,45 @@
     }
 
     /**
+     * Create a new NDEF record containing UTF-8 text data.<p>
+     *
+     * The caller can either specify the language code for the provided text,
+     * or otherwise the language code corresponding to the current default
+     * locale will be used.
+     *
+     * Reference specification: NFCForum-TS-RTD_Text_1.0
+     * @param languageCode The languageCode for the record. If locale is empty or null,
+     *                     the language code of the current default locale will be used.
+     * @param text   The text to be encoded in the record. Will be represented in UTF-8 format.
+     * @throws IllegalArgumentException if text is null
+     */
+    public static NdefRecord createTextRecord(String languageCode, String text) {
+        if (text == null) throw new NullPointerException("text is null");
+
+        byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
+
+        byte[] languageCodeBytes = null;
+        if (languageCode != null && !languageCode.isEmpty()) {
+            languageCodeBytes = languageCode.getBytes(StandardCharsets.US_ASCII);
+        } else {
+            languageCodeBytes = Locale.getDefault().getLanguage().
+                    getBytes(StandardCharsets.US_ASCII);
+        }
+        // We only have 6 bits to indicate ISO/IANA language code.
+        if (languageCodeBytes.length >= 64) {
+            throw new IllegalArgumentException("language code is too long, must be <64 bytes.");
+        }
+        ByteBuffer buffer = ByteBuffer.allocate(1 + languageCodeBytes.length + textBytes.length);
+
+        byte status = (byte) (languageCodeBytes.length & 0xFF);
+        buffer.put(status);
+        buffer.put(languageCodeBytes);
+        buffer.put(textBytes);
+
+        return new NdefRecord(TNF_WELL_KNOWN, RTD_TEXT, null, buffer.array());
+    }
+
+    /**
      * Construct an NDEF Record from its component fields.<p>
      * Recommend to use helpers such as {#createUri} or
      * {{@link #createExternal} where possible, since they perform
@@ -774,7 +815,7 @@
                     throw new FormatException("expected TNF_UNCHANGED in non-leading chunk");
                 } else if (!inChunk && tnf == NdefRecord.TNF_UNCHANGED) {
                     throw new FormatException("" +
-                    		"unexpected TNF_UNCHANGED in first chunk or unchunked record");
+                            "unexpected TNF_UNCHANGED in first chunk or unchunked record");
                 }
 
                 int typeLength = buffer.get() & 0xFF;
diff --git a/core/java/android/nfc/NfcActivityManager.java b/core/java/android/nfc/NfcActivityManager.java
index 77c0234..8643f2e 100644
--- a/core/java/android/nfc/NfcActivityManager.java
+++ b/core/java/android/nfc/NfcActivityManager.java
@@ -18,6 +18,7 @@
 
 import android.app.Activity;
 import android.app.Application;
+import android.content.Intent;
 import android.net.Uri;
 import android.nfc.NfcAdapter.ReaderCallback;
 import android.os.Binder;
@@ -327,6 +328,7 @@
         NfcAdapter.CreateNdefMessageCallback ndefCallback;
         NfcAdapter.CreateBeamUrisCallback urisCallback;
         NdefMessage message;
+        Activity activity;
         Uri[] uris;
         int flags;
         synchronized (NfcActivityManager.this) {
@@ -338,6 +340,7 @@
             message = state.ndefMessage;
             uris = state.uris;
             flags = state.flags;
+            activity = state.activity;
         }
 
         // Make callbacks without lock
@@ -362,7 +365,13 @@
                 }
             }
         }
-
+        if (uris != null && uris.length > 0) {
+            for (Uri uri : uris) {
+                // Grant the NFC process permission to read these URIs
+                activity.grantUriPermission("com.android.nfc", uri,
+                        Intent.FLAG_GRANT_READ_URI_PERMISSION);
+            }
+        }
         return new BeamShareData(message, uris, flags);
     }
 
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 6743c6c..96a3947 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -292,6 +292,7 @@
     static INfcAdapter sService;
     static INfcTag sTagService;
     static INfcCardEmulation sCardEmulationService;
+    static INfcUnlockSettings sNfcUnlockSettingsService;
 
     /**
      * The NfcAdapter object for each application context.
@@ -432,6 +433,13 @@
                 throw new UnsupportedOperationException();
             }
 
+            try {
+               sNfcUnlockSettingsService = sService.getNfcUnlockSettingsInterface();
+            } catch (RemoteException e) {
+                Log.e(TAG, "could not retrieve NFC unlock settings service");
+                sNfcUnlockSettingsService = null;
+            }
+
             sIsInitialized = true;
         }
         if (context == null) {
@@ -549,6 +557,22 @@
     }
 
     /**
+     * Returns the binder interface to the NFC unlock service.
+     *
+     * @throws UnsupportedOperationException if the service is not available.
+     * @hide
+     */
+    public INfcUnlockSettings getNfcUnlockSettingsService() throws UnsupportedOperationException {
+         isEnabled();
+
+        if (sNfcUnlockSettingsService == null) {
+            throw new UnsupportedOperationException("NfcUnlockSettingsService not available");
+        }
+
+        return sNfcUnlockSettingsService;
+    }
+
+    /**
      * NFC service dead - attempt best effort recovery
      * @hide
      */
@@ -1225,6 +1249,45 @@
     }
 
     /**
+     * Manually invoke Android Beam to share data.
+     *
+     * <p>The Android Beam animation is normally only shown when two NFC-capable
+     * devices come into range.
+     * By calling this method, an Activity can invoke the Beam animation directly
+     * even if no other NFC device is in range yet. The Beam animation will then
+     * prompt the user to tap another NFC-capable device to complete the data
+     * transfer.
+     *
+     * <p>The main advantage of using this method is that it avoids the need for the
+     * user to tap the screen to complete the transfer, as this method already
+     * establishes the direction of the transfer and the consent of the user to
+     * share data. Callers are responsible for making sure that the user has
+     * consented to sharing data on NFC tap.
+     *
+     * <p>Note that to use this method, the passed in Activity must have already
+     * set data to share over Beam by using method calls such as
+     * {@link #setNdefPushMessageCallback} or
+     * {@link #setBeamPushUrisCallback}.
+     *
+     * @param activity the current foreground Activity that has registered data to share
+     * @return whether the Beam animation was successfully invoked
+     */
+    public boolean invokeBeam(Activity activity) {
+        if (activity == null) {
+            throw new NullPointerException("activity may not be null.");
+        }
+        enforceResumed(activity);
+        try {
+            sService.invokeBeam();
+            return true;
+        } catch (RemoteException e) {
+            Log.e(TAG, "invokeBeam: NFC process has died.");
+            attemptDeadServiceRecovery(e);
+            return false;
+        }
+    }
+
+    /**
      * Enable NDEF message push over NFC while this Activity is in the foreground.
      *
      * <p>You must explicitly call this method every time the activity is
diff --git a/core/java/android/nfc/NfcUnlock.java b/core/java/android/nfc/NfcUnlock.java
new file mode 100644
index 0000000..82dcd96
--- /dev/null
+++ b/core/java/android/nfc/NfcUnlock.java
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2013 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 android.nfc;
+
+import static com.android.internal.util.Preconditions.checkNotNull;
+
+import android.annotation.Nullable;
+import android.app.ActivityManager;
+import android.content.Context;
+import android.os.RemoteException;
+import android.os.SystemProperties;
+import android.util.Log;
+
+import java.util.HashMap;
+
+/**
+ * Provides an interface to read and update NFC unlock settings.
+ * <p/>
+ * Allows system services (currently exclusively LockSettingsService) to
+ * register NFC tags to be used to unlock the device, as well as the ability
+ * to enable/disable the service entirely.
+ *
+ */
+public class NfcUnlock {
+
+    /**
+     * Action to unlock the device.
+     *
+     * @hide
+     */
+    public static final String ACTION_NFC_UNLOCK = "android.nfc.ACTION_NFC_UNLOCK";
+    /**
+     * Permission to unlock the device.
+     *
+     * @hide
+     */
+    public static final String NFC_UNLOCK_PERMISSION = "android.permission.NFC_UNLOCK";
+
+    /**
+     * Property to enable NFC Unlock
+     *
+     * @hide
+     */
+    public static final String PROPERTY = "ro.com.android.nfc.unlock";
+
+    private static final String TAG = "NfcUnlock";
+    private static HashMap<Context, NfcUnlock> sNfcUnlocks = new HashMap<Context, NfcUnlock>();
+
+    private final Context mContext;
+    private final boolean mEnabled;
+    private INfcUnlockSettings sService;
+
+    private NfcUnlock(Context context, INfcUnlockSettings service) {
+        this.mContext = checkNotNull(context);
+        this.sService = checkNotNull(service);
+        this.mEnabled = getPropertyEnabled();
+    }
+
+    /**
+     * Returns an instance of {@link NfcUnlock}.
+     */
+    public static synchronized NfcUnlock getInstance(NfcAdapter nfcAdapter) {
+        Context context = nfcAdapter.getContext();
+        if (context == null) {
+            Log.e(TAG, "NfcAdapter context is null");
+            throw new UnsupportedOperationException();
+        }
+
+        NfcUnlock manager = sNfcUnlocks.get(context);
+        if (manager == null) {
+            INfcUnlockSettings service = nfcAdapter.getNfcUnlockSettingsService();
+            manager = new NfcUnlock(context, service);
+            sNfcUnlocks.put(context, manager);
+        }
+
+        return manager;
+    }
+
+    /**
+     * Registers the given {@code tag} as an unlock tag.
+     *
+     * @return true if the tag was successfully registered.
+     * @hide
+     */
+    public boolean registerTag(Tag tag) {
+        enforcePropertyEnabled();
+
+        int currentUser = ActivityManager.getCurrentUser();
+
+        try {
+            return sService.registerTag(currentUser, tag);
+        } catch (RemoteException e) {
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover NfcUnlockSettingsService");
+                return false;
+            }
+
+            try {
+                return sService.registerTag(currentUser, tag);
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to reach NfcUnlockSettingsService", ee);
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Deregisters the given {@code tag} as an unlock tag.
+     *
+     * @return true if the tag was successfully deregistered.
+     * @hide
+     */
+    public boolean deregisterTag(long timestamp) {
+        enforcePropertyEnabled();
+        int currentUser = ActivityManager.getCurrentUser();
+
+        try {
+            return sService.deregisterTag(currentUser, timestamp);
+        } catch (RemoteException e) {
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover NfcUnlockSettingsService");
+                return false;
+            }
+
+            try {
+                return sService.deregisterTag(currentUser, timestamp);
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to reach NfcUnlockSettingsService", ee);
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Determines the enable state of the NFC unlock feature.
+     *
+     * @return true if NFC unlock is enabled.
+     */
+    public boolean getNfcUnlockEnabled() {
+        enforcePropertyEnabled();
+        int currentUser = ActivityManager.getCurrentUser();
+
+        try {
+            return sService.getNfcUnlockEnabled(currentUser);
+        } catch (RemoteException e) {
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover NfcUnlockSettingsService");
+                return false;
+            }
+
+            try {
+                return sService.getNfcUnlockEnabled(currentUser);
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to reach NfcUnlockSettingsService", ee);
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Set the enable state of the NFC unlock feature.
+     *
+     * @return true if the setting was successfully persisted.
+     * @hide
+     */
+    public boolean setNfcUnlockEnabled(boolean enabled) {
+        enforcePropertyEnabled();
+        int currentUser = ActivityManager.getCurrentUser();
+
+        try {
+            sService.setNfcUnlockEnabled(currentUser, enabled);
+            return true;
+        }  catch (RemoteException e) {
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover NfcUnlockSettingsService");
+                return false;
+            }
+
+            try {
+                sService.setNfcUnlockEnabled(currentUser, enabled);
+                return true;
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to reach NfcUnlockSettingsService", ee);
+                return false;
+            }
+
+        }
+    }
+
+    /**
+     * Returns a list of times (in millis since epoch) corresponding to when
+     * unlock tags were registered.
+     *
+     * @hide
+     */
+    @Nullable
+    public long[] getTagRegistryTimes() {
+        enforcePropertyEnabled();
+        int currentUser = ActivityManager.getCurrentUser();
+
+        try {
+            return sService.getTagRegistryTimes(currentUser);
+        } catch (RemoteException e) {
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover NfcUnlockSettingsService");
+                return null;
+            }
+
+            try {
+                return sService.getTagRegistryTimes(currentUser);
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to reach NfcUnlockSettingsService", ee);
+                return null;
+            }
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public static boolean getPropertyEnabled() {
+        return SystemProperties.get(PROPERTY).equals("ON");
+    }
+
+    private void recoverService() {
+        NfcAdapter adapter = NfcAdapter.getDefaultAdapter(mContext);
+        sService = adapter.getNfcUnlockSettingsService();
+    }
+
+
+    private void enforcePropertyEnabled() {
+        if (!mEnabled) {
+            throw new UnsupportedOperationException("NFC Unlock property is not enabled");
+        }
+    }
+}
diff --git a/core/java/android/nfc/Tag.java b/core/java/android/nfc/Tag.java
index f2cd232..0d261d1 100644
--- a/core/java/android/nfc/Tag.java
+++ b/core/java/android/nfc/Tag.java
@@ -204,6 +204,14 @@
     }
 
     /**
+     * For use by NfcService only.
+     * @hide
+     */
+    public int[] getTechCodeList() {
+        return mTechList;
+    }
+
+    /**
      * Get the Tag Identifier (if it has one).
      * <p>The tag identifier is a low level serial number, used for anti-collision
      * and identification.
diff --git a/core/java/android/nfc/cardemulation/AidGroup.aidl b/core/java/android/nfc/cardemulation/AidGroup.aidl
new file mode 100644
index 0000000..56d6fa5
--- /dev/null
+++ b/core/java/android/nfc/cardemulation/AidGroup.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2013 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 android.nfc.cardemulation;
+
+parcelable AidGroup;
diff --git a/core/java/android/nfc/cardemulation/AidGroup.java b/core/java/android/nfc/cardemulation/AidGroup.java
new file mode 100644
index 0000000..2820f40
--- /dev/null
+++ b/core/java/android/nfc/cardemulation/AidGroup.java
@@ -0,0 +1,165 @@
+package android.nfc.cardemulation;
+
+import java.io.IOException;
+import java.util.ArrayList;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Log;
+
+/**
+ * The AidGroup class represents a group of ISO/IEC 7816-4
+ * Application Identifiers (AIDs) for a specific application
+ * category, along with a description resource describing
+ * the group.
+ */
+public final class AidGroup implements Parcelable {
+    /**
+     * The maximum number of AIDs that can be present in any one group.
+     */
+    public static final int MAX_NUM_AIDS = 256;
+
+    static final String TAG = "AidGroup";
+
+    final ArrayList<String> aids;
+    final String category;
+    final String description;
+
+    /**
+     * Creates a new AidGroup object.
+     *
+     * @param aids The list of AIDs present in the group
+     * @param category The category of this group
+     */
+    public AidGroup(ArrayList<String> aids, String category) {
+        if (aids == null || aids.size() == 0) {
+            throw new IllegalArgumentException("No AIDS in AID group.");
+        }
+        if (aids.size() > MAX_NUM_AIDS) {
+            throw new IllegalArgumentException("Too many AIDs in AID group.");
+        }
+        if (!isValidCategory(category)) {
+            throw new IllegalArgumentException("Category specified is not valid.");
+        }
+        this.aids = aids;
+        this.category = category;
+        this.description = null;
+    }
+
+    AidGroup(String category, String description) {
+        this.aids = new ArrayList<String>();
+        this.category = category;
+        this.description = description;
+    }
+
+    /**
+     * @return the category of this AID group
+     */
+    public String getCategory() {
+        return category;
+    }
+
+    /**
+     * @return the list of  AIDs in this group
+     */
+    public ArrayList<String> getAids() {
+        return aids;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder out = new StringBuilder("Category: " + category +
+                  ", AIDs:");
+        for (String aid : aids) {
+            out.append(aid);
+            out.append(", ");
+        }
+        return out.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(category);
+        dest.writeInt(aids.size());
+        if (aids.size() > 0) {
+            dest.writeStringList(aids);
+        }
+    }
+
+    public static final Parcelable.Creator<AidGroup> CREATOR =
+            new Parcelable.Creator<AidGroup>() {
+
+        @Override
+        public AidGroup createFromParcel(Parcel source) {
+            String category = source.readString();
+            int listSize = source.readInt();
+            ArrayList<String> aidList = new ArrayList<String>();
+            if (listSize > 0) {
+                source.readStringList(aidList);
+            }
+            return new AidGroup(aidList, category);
+        }
+
+        @Override
+        public AidGroup[] newArray(int size) {
+            return new AidGroup[size];
+        }
+    };
+
+    /**
+     * @hide
+     * Note: description is not serialized, since it's not localized
+     * and resource identifiers don't make sense to persist.
+     */
+    static public AidGroup createFromXml(XmlPullParser parser) throws XmlPullParserException, IOException {
+        String category = parser.getAttributeValue(null, "category");
+        ArrayList<String> aids = new ArrayList<String>();
+        int eventType = parser.getEventType();
+        int minDepth = parser.getDepth();
+        while (eventType != XmlPullParser.END_DOCUMENT && parser.getDepth() >= minDepth) {
+            if (eventType == XmlPullParser.START_TAG) {
+                String tagName = parser.getName();
+                if (tagName.equals("aid")) {
+                    String aid = parser.getAttributeValue(null, "value");
+                    if (aid != null) {
+                        aids.add(aid);
+                    }
+                } else {
+                    Log.d(TAG, "Ignorning unexpected tag: " + tagName);
+                }
+            }
+            eventType = parser.next();
+        }
+        if (category != null && aids.size() > 0) {
+            return new AidGroup(aids, category);
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public void writeAsXml(XmlSerializer out) throws IOException {
+        out.attribute(null, "category", category);
+        for (String aid : aids) {
+            out.startTag(null, "aid");
+            out.attribute(null, "value", aid);
+            out.endTag(null, "aid");
+        }
+    }
+
+    boolean isValidCategory(String category) {
+        return CardEmulation.CATEGORY_PAYMENT.equals(category) ||
+                CardEmulation.CATEGORY_OTHER.equals(category);
+    }
+}
diff --git a/core/java/android/nfc/cardemulation/ApduServiceInfo.java b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
index d7ef4bc..94f35ed 100644
--- a/core/java/android/nfc/cardemulation/ApduServiceInfo.java
+++ b/core/java/android/nfc/cardemulation/ApduServiceInfo.java
@@ -35,9 +35,12 @@
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
+import java.io.FileDescriptor;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @hide
@@ -56,24 +59,19 @@
     final String mDescription;
 
     /**
-     * Convenience AID list
-     */
-    final ArrayList<String> mAids;
-
-    /**
      * Whether this service represents AIDs running on the host CPU
      */
     final boolean mOnHost;
 
     /**
-     * All AID groups this service handles
+     * Mapping from category to static AID group
      */
-    final ArrayList<AidGroup> mAidGroups;
+    final HashMap<String, AidGroup> mStaticAidGroups;
 
     /**
-     * Convenience hashmap
+     * Mapping from category to dynamic AID group
      */
-    final HashMap<String, AidGroup> mCategoryToGroup;
+    final HashMap<String, AidGroup> mDynamicAidGroups;
 
     /**
      * Whether this service should only be started when the device is unlocked.
@@ -86,26 +84,33 @@
     final int mBannerResourceId;
 
     /**
+     * The uid of the package the service belongs to
+     */
+    final int mUid;
+    /**
      * @hide
      */
     public ApduServiceInfo(ResolveInfo info, boolean onHost, String description,
-            ArrayList<AidGroup> aidGroups, boolean requiresUnlock, int bannerResource) {
+            ArrayList<AidGroup> staticAidGroups, ArrayList<AidGroup> dynamicAidGroups,
+            boolean requiresUnlock, int bannerResource, int uid) {
         this.mService = info;
         this.mDescription = description;
-        this.mAidGroups = aidGroups;
-        this.mAids = new ArrayList<String>();
-        this.mCategoryToGroup = new HashMap<String, AidGroup>();
+        this.mStaticAidGroups = new HashMap<String, AidGroup>();
+        this.mDynamicAidGroups = new HashMap<String, AidGroup>();
         this.mOnHost = onHost;
         this.mRequiresDeviceUnlock = requiresUnlock;
-        for (AidGroup aidGroup : aidGroups) {
-            this.mCategoryToGroup.put(aidGroup.category, aidGroup);
-            this.mAids.addAll(aidGroup.aids);
+        for (AidGroup aidGroup : staticAidGroups) {
+            this.mStaticAidGroups.put(aidGroup.category, aidGroup);
+        }
+        for (AidGroup aidGroup : dynamicAidGroups) {
+            this.mDynamicAidGroups.put(aidGroup.category, aidGroup);
         }
         this.mBannerResourceId = bannerResource;
+        this.mUid = uid;
     }
 
-    public ApduServiceInfo(PackageManager pm, ResolveInfo info, boolean onHost)
-            throws XmlPullParserException, IOException {
+    public ApduServiceInfo(PackageManager pm, ResolveInfo info, boolean onHost) throws
+            XmlPullParserException, IOException {
         ServiceInfo si = info.serviceInfo;
         XmlResourceParser parser = null;
         try {
@@ -163,10 +168,10 @@
                 sa.recycle();
             }
 
-            mAidGroups = new ArrayList<AidGroup>();
-            mCategoryToGroup = new HashMap<String, AidGroup>();
-            mAids = new ArrayList<String>();
+            mStaticAidGroups = new HashMap<String, AidGroup>();
+            mDynamicAidGroups = new HashMap<String, AidGroup>();
             mOnHost = onHost;
+
             final int depth = parser.getDepth();
             AidGroup currentGroup = null;
 
@@ -179,14 +184,14 @@
                     final TypedArray groupAttrs = res.obtainAttributes(attrs,
                             com.android.internal.R.styleable.AidGroup);
                     // Get category of AID group
-                    String groupDescription = groupAttrs.getString(
-                            com.android.internal.R.styleable.AidGroup_description);
                     String groupCategory = groupAttrs.getString(
                             com.android.internal.R.styleable.AidGroup_category);
+                    String groupDescription = groupAttrs.getString(
+                            com.android.internal.R.styleable.AidGroup_description);
                     if (!CardEmulation.CATEGORY_PAYMENT.equals(groupCategory)) {
                         groupCategory = CardEmulation.CATEGORY_OTHER;
                     }
-                    currentGroup = mCategoryToGroup.get(groupCategory);
+                    currentGroup = mStaticAidGroups.get(groupCategory);
                     if (currentGroup != null) {
                         if (!CardEmulation.CATEGORY_OTHER.equals(groupCategory)) {
                             Log.e(TAG, "Not allowing multiple aid-groups in the " +
@@ -200,9 +205,8 @@
                 } else if (eventType == XmlPullParser.END_TAG && "aid-group".equals(tagName) &&
                         currentGroup != null) {
                     if (currentGroup.aids.size() > 0) {
-                        if (!mCategoryToGroup.containsKey(currentGroup.category)) {
-                            mAidGroups.add(currentGroup);
-                            mCategoryToGroup.put(currentGroup.category, currentGroup);
+                        if (!mStaticAidGroups.containsKey(currentGroup.category)) {
+                            mStaticAidGroups.put(currentGroup.category, currentGroup);
                         }
                     } else {
                         Log.e(TAG, "Not adding <aid-group> with empty or invalid AIDs");
@@ -216,7 +220,6 @@
                             toUpperCase();
                     if (isValidAid(aid) && !currentGroup.aids.contains(aid)) {
                         currentGroup.aids.add(aid);
-                        mAids.add(aid);
                     } else {
                         Log.e(TAG, "Ignoring invalid or duplicate aid: " + aid);
                     }
@@ -228,6 +231,8 @@
         } finally {
             if (parser != null) parser.close();
         }
+        // Set uid
+        mUid = si.applicationInfo.uid;
     }
 
     public ComponentName getComponent() {
@@ -235,16 +240,58 @@
                 mService.serviceInfo.name);
     }
 
+    /**
+     * Returns a consolidated list of AIDs from the AID groups
+     * registered by this service. Note that if a service has both
+     * a static (manifest-based) AID group for a category and a dynamic
+     * AID group, only the dynamically registered AIDs will be returned
+     * for that category.
+     * @return List of AIDs registered by the service
+     */
     public ArrayList<String> getAids() {
-        return mAids;
+        final ArrayList<String> aids = new ArrayList<String>();
+        for (AidGroup group : getAidGroups()) {
+            aids.addAll(group.aids);
+        }
+        return aids;
     }
 
+    /**
+     * Returns the registered AID group for this category.
+     */
+    public AidGroup getDynamicAidGroupForCategory(String category) {
+        return mDynamicAidGroups.get(category);
+    }
+
+    public boolean removeDynamicAidGroupForCategory(String category) {
+        return (mDynamicAidGroups.remove(category) != null);
+    }
+
+    /**
+     * Returns a consolidated list of AID groups
+     * registered by this service. Note that if a service has both
+     * a static (manifest-based) AID group for a category and a dynamic
+     * AID group, only the dynamically registered AID group will be returned
+     * for that category.
+     * @return List of AIDs registered by the service
+     */
     public ArrayList<AidGroup> getAidGroups() {
-        return mAidGroups;
+        final ArrayList<AidGroup> groups = new ArrayList<AidGroup>();
+        for (Map.Entry<String, AidGroup> entry : mDynamicAidGroups.entrySet()) {
+            groups.add(entry.getValue());
+        }
+        for (Map.Entry<String, AidGroup> entry : mStaticAidGroups.entrySet()) {
+            if (!mDynamicAidGroups.containsKey(entry.getKey())) {
+                // Consolidate AID groups - don't return static ones
+                // if a dynamic group exists for the category.
+                groups.add(entry.getValue());
+            }
+        }
+        return groups;
     }
 
     public boolean hasCategory(String category) {
-        return mCategoryToGroup.containsKey(category);
+        return (mStaticAidGroups.containsKey(category) || mDynamicAidGroups.containsKey(category));
     }
 
     public boolean isOnHost() {
@@ -259,6 +306,14 @@
         return mDescription;
     }
 
+    public int getUid() {
+        return mUid;
+    }
+
+    public void setOrReplaceDynamicAidGroup(AidGroup aidGroup) {
+        mDynamicAidGroups.put(aidGroup.getCategory(), aidGroup);
+    }
+
     public CharSequence loadLabel(PackageManager pm) {
         return mService.loadLabel(pm);
     }
@@ -304,8 +359,12 @@
         StringBuilder out = new StringBuilder("ApduService: ");
         out.append(getComponent());
         out.append(", description: " + mDescription);
-        out.append(", AID Groups: ");
-        for (AidGroup aidGroup : mAidGroups) {
+        out.append(", Static AID Groups: ");
+        for (AidGroup aidGroup : mStaticAidGroups.values()) {
+            out.append(aidGroup.toString());
+        }
+        out.append(", Dynamic AID Groups: ");
+        for (AidGroup aidGroup : mDynamicAidGroups.values()) {
             out.append(aidGroup.toString());
         }
         return out.toString();
@@ -336,12 +395,17 @@
         mService.writeToParcel(dest, flags);
         dest.writeString(mDescription);
         dest.writeInt(mOnHost ? 1 : 0);
-        dest.writeInt(mAidGroups.size());
-        if (mAidGroups.size() > 0) {
-            dest.writeTypedList(mAidGroups);
+        dest.writeInt(mStaticAidGroups.size());
+        if (mStaticAidGroups.size() > 0) {
+            dest.writeTypedList(new ArrayList<AidGroup>(mStaticAidGroups.values()));
+        }
+        dest.writeInt(mDynamicAidGroups.size());
+        if (mDynamicAidGroups.size() > 0) {
+            dest.writeTypedList(new ArrayList<AidGroup>(mDynamicAidGroups.values()));
         }
         dest.writeInt(mRequiresDeviceUnlock ? 1 : 0);
         dest.writeInt(mBannerResourceId);
+        dest.writeInt(mUid);
     };
 
     public static final Parcelable.Creator<ApduServiceInfo> CREATOR =
@@ -351,14 +415,21 @@
             ResolveInfo info = ResolveInfo.CREATOR.createFromParcel(source);
             String description = source.readString();
             boolean onHost = (source.readInt() != 0) ? true : false;
-            ArrayList<AidGroup> aidGroups = new ArrayList<AidGroup>();
-            int numGroups = source.readInt();
-            if (numGroups > 0) {
-                source.readTypedList(aidGroups, AidGroup.CREATOR);
+            ArrayList<AidGroup> staticAidGroups = new ArrayList<AidGroup>();
+            int numStaticGroups = source.readInt();
+            if (numStaticGroups > 0) {
+                source.readTypedList(staticAidGroups, AidGroup.CREATOR);
+            }
+            ArrayList<AidGroup> dynamicAidGroups = new ArrayList<AidGroup>();
+            int numDynamicGroups = source.readInt();
+            if (numDynamicGroups > 0) {
+                source.readTypedList(dynamicAidGroups, AidGroup.CREATOR);
             }
             boolean requiresUnlock = (source.readInt() != 0) ? true : false;
             int bannerResource = source.readInt();
-            return new ApduServiceInfo(info, onHost, description, aidGroups, requiresUnlock, bannerResource);
+            int uid = source.readInt();
+            return new ApduServiceInfo(info, onHost, description, staticAidGroups,
+                    dynamicAidGroups, requiresUnlock, bannerResource, uid);
         }
 
         @Override
@@ -367,76 +438,22 @@
         }
     };
 
-    public static class AidGroup implements Parcelable {
-        final ArrayList<String> aids;
-        final String category;
-        final String description;
-
-        AidGroup(ArrayList<String> aids, String category, String description) {
-            this.aids = aids;
-            this.category = category;
-            this.description = description;
-        }
-
-        AidGroup(String category, String description) {
-            this.aids = new ArrayList<String>();
-            this.category = category;
-            this.description = description;
-        }
-
-        public String getCategory() {
-            return category;
-        }
-
-        public ArrayList<String> getAids() {
-            return aids;
-        }
-
-        @Override
-        public String toString() {
-            StringBuilder out = new StringBuilder("Category: " + category +
-                      ", description: " + description + ", AIDs:");
-            for (String aid : aids) {
-                out.append(aid);
-                out.append(", ");
-            }
-            return out.toString();
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeString(category);
-            dest.writeString(description);
-            dest.writeInt(aids.size());
-            if (aids.size() > 0) {
-                dest.writeStringList(aids);
+    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        pw.println("    " + getComponent() +
+                " (Description: " + getDescription() + ")");
+        pw.println("    Static AID groups:");
+        for (AidGroup group : mStaticAidGroups.values()) {
+            pw.println("        Category: " + group.category);
+            for (String aid : group.aids) {
+                pw.println("            AID: " + aid);
             }
         }
-
-        public static final Parcelable.Creator<ApduServiceInfo.AidGroup> CREATOR =
-                new Parcelable.Creator<ApduServiceInfo.AidGroup>() {
-
-            @Override
-            public AidGroup createFromParcel(Parcel source) {
-                String category = source.readString();
-                String description = source.readString();
-                int listSize = source.readInt();
-                ArrayList<String> aidList = new ArrayList<String>();
-                if (listSize > 0) {
-                    source.readStringList(aidList);
-                }
-                return new AidGroup(aidList, category, description);
+        pw.println("    Dynamic AID groups:");
+        for (AidGroup group : mDynamicAidGroups.values()) {
+            pw.println("        Category: " + group.category);
+            for (String aid : group.aids) {
+                pw.println("            AID: " + aid);
             }
-
-            @Override
-            public AidGroup[] newArray(int size) {
-                return new AidGroup[size];
-            }
-        };
+        }
     }
 }
diff --git a/core/java/android/nfc/cardemulation/CardEmulation.java b/core/java/android/nfc/cardemulation/CardEmulation.java
index 58d9616..41f039c 100644
--- a/core/java/android/nfc/cardemulation/CardEmulation.java
+++ b/core/java/android/nfc/cardemulation/CardEmulation.java
@@ -168,6 +168,10 @@
         if (manager == null) {
             // Get card emu service
             INfcCardEmulation service = adapter.getCardEmulationService();
+            if (service == null) {
+                Log.e(TAG, "This device does not implement the INfcCardEmulation interface.");
+                throw new UnsupportedOperationException();
+            }
             manager = new CardEmulation(context, service);
             sCardEmus.put(context, manager);
         }
@@ -271,6 +275,109 @@
     }
 
     /**
+     * Registers a group of AIDs for the specified service.
+     *
+     * <p>If an AID group for that category was previously
+     * registered for this service (either statically
+     * through the manifest, or dynamically by using this API),
+     * that AID group will be replaced with this one.
+     *
+     * <p>Note that you can only register AIDs for a service that
+     * is running under the same UID as you are. Typically
+     * this means you need to call this from the same
+     * package as the service itself, though UIDs can also
+     * be shared between packages using shared UIDs.
+     *
+     * @param service The component name of the service
+     * @param aidGroup The group of AIDs to be registered
+     * @return whether the registration was successful.
+     */
+    public boolean registerAidGroupForService(ComponentName service, AidGroup aidGroup) {
+        try {
+            return sService.registerAidGroupForService(UserHandle.myUserId(), service, aidGroup);
+        } catch (RemoteException e) {
+            // Try one more time
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover CardEmulationService.");
+                return false;
+            }
+            try {
+                return sService.registerAidGroupForService(UserHandle.myUserId(), service,
+                        aidGroup);
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to reach CardEmulationService.");
+                return false;
+            }
+        }
+    }
+
+    /**
+     * Retrieves the currently registered AID group for the specified
+     * category for a service.
+     *
+     * <p>Note that this will only return AID groups that were dynamically
+     * registered using {@link #registerAidGroupForService(ComponentName, AidGroup)}
+     * method. It will *not* return AID groups that were statically registered
+     * in the manifest.
+     *
+     * @param service The component name of the service
+     * @param category The category of the AID group to be returned, e.g. {@link #CATEGORY_PAYMENT}
+     * @return The AID group, or null if it couldn't be found
+     */
+    public AidGroup getAidGroupForService(ComponentName service, String category) {
+        try {
+            return sService.getAidGroupForService(UserHandle.myUserId(), service, category);
+        } catch (RemoteException e) {
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover CardEmulationService.");
+                return null;
+            }
+            try {
+                return sService.getAidGroupForService(UserHandle.myUserId(), service, category);
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to recover CardEmulationService.");
+                return null;
+            }
+        }
+    }
+
+    /**
+     * Removes a registered AID group for the specified category for the
+     * service provided.
+     *
+     * <p>Note that this will only remove AID groups that were dynamically
+     * registered using the {@link #registerAidGroupForService(ComponentName, AidGroup)}
+     * method. It will *not* remove AID groups that were statically registered in
+     * the manifest. If a dynamically registered AID group is removed using
+     * this method, and a statically registered AID group for the same category
+     * exists in the manifest, that AID group will become active again.
+     *
+     * @param service The component name of the service
+     * @param category The category of the AID group to be removed, e.g. {@link #CATEGORY_PAYMENT}
+     * @return whether the group was successfully removed.
+     */
+    public boolean removeAidGroupForService(ComponentName service, String category) {
+        try {
+            return sService.removeAidGroupForService(UserHandle.myUserId(), service, category);
+        } catch (RemoteException e) {
+            // Try one more time
+            recoverService();
+            if (sService == null) {
+                Log.e(TAG, "Failed to recover CardEmulationService.");
+                return false;
+            }
+            try {
+                return sService.removeAidGroupForService(UserHandle.myUserId(), service, category);
+            } catch (RemoteException ee) {
+                Log.e(TAG, "Failed to reach CardEmulationService.");
+                return false;
+            }
+        }
+    }
+
+    /**
      * @hide
      */
     public boolean setDefaultServiceForCategory(ComponentName service, String category) {
diff --git a/core/java/android/nfc/tech/Ndef.java b/core/java/android/nfc/tech/Ndef.java
index f16dc3b..5852ce4 100644
--- a/core/java/android/nfc/tech/Ndef.java
+++ b/core/java/android/nfc/tech/Ndef.java
@@ -20,7 +20,6 @@
 import android.nfc.FormatException;
 import android.nfc.INfcTag;
 import android.nfc.NdefMessage;
-import android.nfc.NfcAdapter;
 import android.nfc.Tag;
 import android.nfc.TagLostException;
 import android.os.Bundle;
diff --git a/core/java/android/nfc/tech/NdefFormatable.java b/core/java/android/nfc/tech/NdefFormatable.java
index ffa6a2b..4175cd0 100644
--- a/core/java/android/nfc/tech/NdefFormatable.java
+++ b/core/java/android/nfc/tech/NdefFormatable.java
@@ -20,7 +20,6 @@
 import android.nfc.FormatException;
 import android.nfc.INfcTag;
 import android.nfc.NdefMessage;
-import android.nfc.NfcAdapter;
 import android.nfc.Tag;
 import android.nfc.TagLostException;
 import android.os.RemoteException;
diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java
index 26e09b6..4f91d19 100644
--- a/core/java/android/os/AsyncTask.java
+++ b/core/java/android/os/AsyncTask.java
@@ -40,7 +40,7 @@
  * and does not constitute a generic threading framework. AsyncTasks should ideally be
  * used for short operations (a few seconds at the most.) If you need to keep threads
  * running for long periods of time, it is highly recommended you use the various APIs
- * provided by the <code>java.util.concurrent</code> pacakge such as {@link Executor},
+ * provided by the <code>java.util.concurrent</code> package such as {@link Executor},
  * {@link ThreadPoolExecutor} and {@link FutureTask}.</p>
  *
  * <p>An asynchronous task is defined by a computation that runs on a background thread and
diff --git a/core/java/android/os/BatteryManager.java b/core/java/android/os/BatteryManager.java
index 2e38960..f339e52 100644
--- a/core/java/android/os/BatteryManager.java
+++ b/core/java/android/os/BatteryManager.java
@@ -16,9 +16,15 @@
 
 package android.os;
 
+import android.os.BatteryProperty;
+import android.os.IBatteryPropertiesRegistrar;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+
 /**
  * The BatteryManager class contains strings and constants used for values
- * in the {@link android.content.Intent#ACTION_BATTERY_CHANGED} Intent.
+ * in the {@link android.content.Intent#ACTION_BATTERY_CHANGED} Intent, and
+ * provides a method for querying battery and charging properties.
  */
 public class BatteryManager {
     /**
@@ -121,4 +127,30 @@
     /** @hide */
     public static final int BATTERY_PLUGGED_ANY =
             BATTERY_PLUGGED_AC | BATTERY_PLUGGED_USB | BATTERY_PLUGGED_WIRELESS;
+
+    private IBatteryPropertiesRegistrar mBatteryPropertiesRegistrar;
+
+    /**
+     * Return the requested battery property.
+     *
+     * @param id identifier from {@link BatteryProperty} of the requested property
+     * @return a {@link BatteryProperty} object that returns the property value, or null on error
+     */
+    public BatteryProperty getProperty(int id) throws RemoteException {
+        if (mBatteryPropertiesRegistrar == null) {
+            IBinder b = ServiceManager.getService("batteryproperties");
+            mBatteryPropertiesRegistrar =
+                IBatteryPropertiesRegistrar.Stub.asInterface(b);
+
+            if (mBatteryPropertiesRegistrar == null)
+                return null;
+        }
+
+        BatteryProperty prop = new BatteryProperty(Integer.MIN_VALUE);
+        if ((mBatteryPropertiesRegistrar.getProperty(id, prop) == 0) &&
+            (prop.getInt() != Integer.MIN_VALUE))
+            return prop;
+        else
+            return null;
+    }
 }
diff --git a/core/java/android/os/BatteryProperties.java b/core/java/android/os/BatteryProperties.java
index 5df5214..8f5cf8b 100644
--- a/core/java/android/os/BatteryProperties.java
+++ b/core/java/android/os/BatteryProperties.java
@@ -15,9 +15,6 @@
 
 package android.os;
 
-import android.os.Parcel;
-import android.os.Parcelable;
-
 /**
  * {@hide}
  */
@@ -30,11 +27,25 @@
     public boolean batteryPresent;
     public int batteryLevel;
     public int batteryVoltage;
-    public int batteryCurrentNow;
-    public int batteryChargeCounter;
     public int batteryTemperature;
     public String batteryTechnology;
 
+    public BatteryProperties() {
+    }
+
+    public void set(BatteryProperties other) {
+        chargerAcOnline = other.chargerAcOnline;
+        chargerUsbOnline = other.chargerUsbOnline;
+        chargerWirelessOnline = other.chargerWirelessOnline;
+        batteryStatus = other.batteryStatus;
+        batteryHealth = other.batteryHealth;
+        batteryPresent = other.batteryPresent;
+        batteryLevel = other.batteryLevel;
+        batteryVoltage = other.batteryVoltage;
+        batteryTemperature = other.batteryTemperature;
+        batteryTechnology = other.batteryTechnology;
+    }
+
     /*
      * Parcel read/write code must be kept in sync with
      * frameworks/native/services/batteryservice/BatteryProperties.cpp
@@ -49,8 +60,6 @@
         batteryPresent = p.readInt() == 1 ? true : false;
         batteryLevel = p.readInt();
         batteryVoltage = p.readInt();
-        batteryCurrentNow = p.readInt();
-        batteryChargeCounter = p.readInt();
         batteryTemperature = p.readInt();
         batteryTechnology = p.readString();
     }
@@ -64,8 +73,6 @@
         p.writeInt(batteryPresent ? 1 : 0);
         p.writeInt(batteryLevel);
         p.writeInt(batteryVoltage);
-        p.writeInt(batteryCurrentNow);
-        p.writeInt(batteryChargeCounter);
         p.writeInt(batteryTemperature);
         p.writeString(batteryTechnology);
     }
diff --git a/core/java/android/os/BatteryProperty.aidl b/core/java/android/os/BatteryProperty.aidl
new file mode 100644
index 0000000..b3f2ec3f
--- /dev/null
+++ b/core/java/android/os/BatteryProperty.aidl
@@ -0,0 +1,19 @@
+/*
+** Copyright 2013, 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 android.os;
+
+parcelable BatteryProperty;
diff --git a/core/java/android/os/BatteryProperty.java b/core/java/android/os/BatteryProperty.java
new file mode 100644
index 0000000..ec73952
--- /dev/null
+++ b/core/java/android/os/BatteryProperty.java
@@ -0,0 +1,116 @@
+/* Copyright 2013, 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 android.os;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Battery properties that may be queried using
+ * {@link BatteryManager#getProperty
+ * BatteryManager.getProperty()}
+ */
+public class BatteryProperty implements Parcelable {
+    /*
+     * Battery property identifiers.  These must match the values in
+     * frameworks/native/include/batteryservice/BatteryService.h
+     */
+    /** Battery capacity in microampere-hours, as an integer. */
+    public static final int CHARGE_COUNTER = 1;
+
+    /**
+     * Instantaneous battery current in microamperes, as an integer.  Positive
+     * values indicate net current entering the battery from a charge source,
+     * negative values indicate net current discharging from the battery.
+     */
+    public static final int CURRENT_NOW = 2;
+
+    /**
+     * Average battery current in microamperes, as an integer.  Positive
+     * values indicate net current entering the battery from a charge source,
+     * negative values indicate net current discharging from the battery.
+     * The time period over which the average is computed may depend on the
+     * fuel gauge hardware and its configuration.
+     */
+    public static final int CURRENT_AVERAGE = 3;
+
+    /**
+     * Remaining battery capacity as an integer percentage of total capacity
+     * (with no fractional part).
+     */
+    public static final int CAPACITY = 4;
+
+    private int mValueInt;
+
+    /**
+     * @hide
+     */
+    public BatteryProperty(int value) {
+        mValueInt = value;
+    }
+
+    /**
+     * @hide
+     */
+    public BatteryProperty() {
+        mValueInt = Integer.MIN_VALUE;
+    }
+
+    /**
+     * Return the value of a property of integer type previously queried
+     * via {@link BatteryManager#getProperty
+     * BatteryManager.getProperty()}.  If the platform does
+     * not provide the property queried, this value will be
+     * Integer.MIN_VALUE.
+     *
+     * @return The queried property value, or Integer.MIN_VALUE if not supported.
+     */
+    public int getInt() {
+        return mValueInt;
+    }
+
+    /*
+     * Parcel read/write code must be kept in sync with
+     * frameworks/native/services/batteryservice/BatteryProperty.cpp
+     */
+
+    private BatteryProperty(Parcel p) {
+        readFromParcel(p);
+    }
+
+    public void readFromParcel(Parcel p) {
+        mValueInt = p.readInt();
+    }
+
+    public void writeToParcel(Parcel p, int flags) {
+        p.writeInt(mValueInt);
+    }
+
+    public static final Parcelable.Creator<BatteryProperty> CREATOR
+        = new Parcelable.Creator<BatteryProperty>() {
+        public BatteryProperty createFromParcel(Parcel p) {
+            return new BatteryProperty(p);
+        }
+
+        public BatteryProperty[] newArray(int size) {
+            return new BatteryProperty[size];
+        }
+    };
+
+    public int describeContents() {
+        return 0;
+    }
+}
diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java
index b1a9ea30..9e9820f 100644
--- a/core/java/android/os/BatteryStats.java
+++ b/core/java/android/os/BatteryStats.java
@@ -24,13 +24,15 @@
 import java.util.List;
 import java.util.Map;
 
+import android.content.Context;
 import android.content.pm.ApplicationInfo;
 import android.telephony.SignalStrength;
-import android.util.Log;
+import android.text.format.DateFormat;
 import android.util.Printer;
-import android.util.Slog;
 import android.util.SparseArray;
 import android.util.TimeUtils;
+import com.android.internal.os.BatterySipper;
+import com.android.internal.os.BatteryStatsHelper;
 
 /**
  * A class providing access to battery usage statistics, including information on
@@ -116,25 +118,20 @@
     public static final int STATS_SINCE_CHARGED = 0;
 
     /**
-     * Include only the last run in the stats.
-     */
-    public static final int STATS_LAST = 1;
-
-    /**
      * Include only the current run in the stats.
      */
-    public static final int STATS_CURRENT = 2;
+    public static final int STATS_CURRENT = 1;
 
     /**
      * Include only the run since the last time the device was unplugged in the stats.
      */
-    public static final int STATS_SINCE_UNPLUGGED = 3;
+    public static final int STATS_SINCE_UNPLUGGED = 2;
 
     // NOTE: Update this list if you add/change any stats above.
     // These characters are supposed to represent "total", "last", "current", 
     // and "unplugged". They were shortened for efficiency sake.
-    private static final String[] STAT_NAMES = { "t", "l", "c", "u" };
-    
+    private static final String[] STAT_NAMES = { "l", "c", "u" };
+
     /**
      * Bump the version on this if the checkin format changes.
      */
@@ -153,6 +150,7 @@
     private static final String FOREGROUND_DATA = "fg";
     private static final String WAKELOCK_DATA = "wl";
     private static final String KERNEL_WAKELOCK_DATA = "kwl";
+    private static final String WAKEUP_REASON_DATA = "wr";
     private static final String NETWORK_DATA = "nt";
     private static final String USER_ACTIVITY_DATA = "ua";
     private static final String BATTERY_DATA = "bt";
@@ -160,6 +158,8 @@
     private static final String BATTERY_LEVEL_DATA = "lv";
     private static final String WIFI_DATA = "wfl";
     private static final String MISC_DATA = "m";
+    private static final String GLOBAL_NETWORK_DATA = "gn";
+    private static final String HISTORY_STRING_POOL = "hsp";
     private static final String HISTORY_DATA = "h";
     private static final String SCREEN_BRIGHTNESS_DATA = "br";
     private static final String SIGNAL_STRENGTH_TIME_DATA = "sgt";
@@ -167,6 +167,14 @@
     private static final String SIGNAL_STRENGTH_COUNT_DATA = "sgc";
     private static final String DATA_CONNECTION_TIME_DATA = "dct";
     private static final String DATA_CONNECTION_COUNT_DATA = "dcc";
+    private static final String WIFI_STATE_TIME_DATA = "wst";
+    private static final String WIFI_STATE_COUNT_DATA = "wsc";
+    private static final String BLUETOOTH_STATE_TIME_DATA = "bst";
+    private static final String BLUETOOTH_STATE_COUNT_DATA = "bsc";
+    private static final String POWER_USE_SUMMARY_DATA = "pws";
+    private static final String POWER_USE_ITEM_DATA = "pwi";
+    private static final String DISCHARGE_STEP_DATA = "dsd";
+    private static final String CHARGE_STEP_DATA = "csd";
 
     private final StringBuilder mFormatBuilder = new StringBuilder(32);
     private final Formatter mFormatter = new Formatter(mFormatBuilder);
@@ -180,7 +188,7 @@
          * Returns the count associated with this Counter for the
          * selected type of statistics.
          *
-         * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT
+         * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT
          */
         public abstract int getCountLocked(int which);
 
@@ -191,6 +199,25 @@
     }
 
     /**
+     * State for keeping track of long counting information.
+     */
+    public static abstract class LongCounter {
+
+        /**
+         * Returns the count associated with this Counter for the
+         * selected type of statistics.
+         *
+         * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT
+         */
+        public abstract long getCountLocked(int which);
+
+        /**
+         * Temporary for debugging.
+         */
+        public abstract void logState(Printer pw, String prefix);
+    }
+
+    /**
      * State for keeping track of timing information.
      */
     public static abstract class Timer {
@@ -199,7 +226,7 @@
          * Returns the count associated with this Timer for the
          * selected type of statistics.
          *
-         * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT
+         * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT
          */
         public abstract int getCountLocked(int which);
 
@@ -207,11 +234,11 @@
          * Returns the total time in microseconds associated with this Timer for the
          * selected type of statistics.
          *
-         * @param batteryRealtime system realtime on  battery in microseconds
-         * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT
+         * @param elapsedRealtimeUs current elapsed realtime of system in microseconds
+         * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT
          * @return a time in microseconds
          */
-        public abstract long getTotalTimeLocked(long batteryRealtime, int which);
+        public abstract long getTotalTimeLocked(long elapsedRealtimeUs, int which);
 
         /**
          * Temporary for debugging.
@@ -269,30 +296,29 @@
          */
         public abstract int getUid();
 
-        public abstract void noteWifiRunningLocked();
-        public abstract void noteWifiStoppedLocked();
-        public abstract void noteFullWifiLockAcquiredLocked();
-        public abstract void noteFullWifiLockReleasedLocked();
-        public abstract void noteWifiScanStartedLocked();
-        public abstract void noteWifiScanStoppedLocked();
-        public abstract void noteWifiBatchedScanStartedLocked(int csph);
-        public abstract void noteWifiBatchedScanStoppedLocked();
-        public abstract void noteWifiMulticastEnabledLocked();
-        public abstract void noteWifiMulticastDisabledLocked();
-        public abstract void noteAudioTurnedOnLocked();
-        public abstract void noteAudioTurnedOffLocked();
-        public abstract void noteVideoTurnedOnLocked();
-        public abstract void noteVideoTurnedOffLocked();
-        public abstract void noteActivityResumedLocked();
-        public abstract void noteActivityPausedLocked();
-        public abstract long getWifiRunningTime(long batteryRealtime, int which);
-        public abstract long getFullWifiLockTime(long batteryRealtime, int which);
-        public abstract long getWifiScanTime(long batteryRealtime, int which);
-        public abstract long getWifiBatchedScanTime(int csphBin, long batteryRealtime, int which);
-        public abstract long getWifiMulticastTime(long batteryRealtime,
-                                                  int which);
-        public abstract long getAudioTurnedOnTime(long batteryRealtime, int which);
-        public abstract long getVideoTurnedOnTime(long batteryRealtime, int which);
+        public abstract void noteWifiRunningLocked(long elapsedRealtime);
+        public abstract void noteWifiStoppedLocked(long elapsedRealtime);
+        public abstract void noteFullWifiLockAcquiredLocked(long elapsedRealtime);
+        public abstract void noteFullWifiLockReleasedLocked(long elapsedRealtime);
+        public abstract void noteWifiScanStartedLocked(long elapsedRealtime);
+        public abstract void noteWifiScanStoppedLocked(long elapsedRealtime);
+        public abstract void noteWifiBatchedScanStartedLocked(int csph, long elapsedRealtime);
+        public abstract void noteWifiBatchedScanStoppedLocked(long elapsedRealtime);
+        public abstract void noteWifiMulticastEnabledLocked(long elapsedRealtime);
+        public abstract void noteWifiMulticastDisabledLocked(long elapsedRealtime);
+        public abstract void noteAudioTurnedOnLocked(long elapsedRealtime);
+        public abstract void noteAudioTurnedOffLocked(long elapsedRealtime);
+        public abstract void noteVideoTurnedOnLocked(long elapsedRealtime);
+        public abstract void noteVideoTurnedOffLocked(long elapsedRealtime);
+        public abstract void noteActivityResumedLocked(long elapsedRealtime);
+        public abstract void noteActivityPausedLocked(long elapsedRealtime);
+        public abstract long getWifiRunningTime(long elapsedRealtimeUs, int which);
+        public abstract long getFullWifiLockTime(long elapsedRealtimeUs, int which);
+        public abstract long getWifiScanTime(long elapsedRealtimeUs, int which);
+        public abstract long getWifiBatchedScanTime(int csphBin, long elapsedRealtimeUs, int which);
+        public abstract long getWifiMulticastTime(long elapsedRealtimeUs, int which);
+        public abstract long getAudioTurnedOnTime(long elapsedRealtimeUs, int which);
+        public abstract long getVideoTurnedOnTime(long elapsedRealtimeUs, int which);
         public abstract Timer getForegroundActivityTimer();
         public abstract Timer getVibratorOnTimer();
 
@@ -314,7 +340,10 @@
         public abstract int getUserActivityCount(int type, int which);
 
         public abstract boolean hasNetworkActivity();
-        public abstract long getNetworkActivityCount(int type, int which);
+        public abstract long getNetworkActivityBytes(int type, int which);
+        public abstract long getNetworkActivityPackets(int type, int which);
+        public abstract long getMobileRadioActiveTime(int which);
+        public abstract int getMobileRadioActiveCount(int which);
 
         public static abstract class Sensor {
             /*
@@ -331,8 +360,9 @@
         }
 
         public class Pid {
-            public long mWakeSum;
-            public long mWakeStart;
+            public int mWakeNesting;
+            public long mWakeSumMs;
+            public long mWakeStartMs;
         }
 
         /**
@@ -350,29 +380,34 @@
             }
 
             /**
+             * Returns true if this process is still active in the battery stats.
+             */
+            public abstract boolean isActive();
+
+            /**
              * Returns the total time (in 1/100 sec) spent executing in user code.
              *
-             * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+             * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
              */
             public abstract long getUserTime(int which);
 
             /**
              * Returns the total time (in 1/100 sec) spent executing in system code.
              *
-             * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+             * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
              */
             public abstract long getSystemTime(int which);
 
             /**
              * Returns the number of times the process has been started.
              *
-             * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+             * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
              */
             public abstract int getStarts(int which);
 
             /**
              * Returns the cpu time spent in microseconds while the process was in the foreground.
-             * @param which one of STATS_TOTAL, STATS_LAST, STATS_CURRENT or STATS_UNPLUGGED
+             * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
              * @return foreground cpu time in microseconds
              */
             public abstract long getForegroundTime(int which);
@@ -381,7 +416,7 @@
              * Returns the approximate cpu time spent in microseconds, at a certain CPU speed.
              * @param speedStep the index of the CPU speed. This is not the actual speed of the
              * CPU.
-             * @param which one of STATS_TOTAL, STATS_LAST, STATS_CURRENT or STATS_UNPLUGGED
+             * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
              * @see BatteryStats#getCpuSpeedSteps()
              */
             public abstract long getTimeAtCpuSpeedStep(int speedStep, int which);
@@ -400,7 +435,7 @@
              * Returns the number of times this package has done something that could wake up the
              * device from sleep.
              *
-             * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+             * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
              */
             public abstract int getWakeups(int which);
 
@@ -418,7 +453,7 @@
                  * Returns the amount of time spent started.
                  *
                  * @param batteryUptime elapsed uptime on battery in microseconds.
-                 * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+                 * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
                  * @return
                  */
                 public abstract long getStartTime(long batteryUptime, int which);
@@ -426,35 +461,90 @@
                 /**
                  * Returns the total number of times startService() has been called.
                  *
-                 * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+                 * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
                  */
                 public abstract int getStarts(int which);
 
                 /**
                  * Returns the total number times the service has been launched.
                  *
-                 * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+                 * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
                  */
                 public abstract int getLaunches(int which);
             }
         }
     }
 
+    public final static class HistoryTag {
+        public String string;
+        public int uid;
+
+        public int poolIdx;
+
+        public void setTo(HistoryTag o) {
+            string = o.string;
+            uid = o.uid;
+            poolIdx = o.poolIdx;
+        }
+
+        public void setTo(String _string, int _uid) {
+            string = _string;
+            uid = _uid;
+            poolIdx = -1;
+        }
+
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeString(string);
+            dest.writeInt(uid);
+        }
+
+        public void readFromParcel(Parcel src) {
+            string = src.readString();
+            uid = src.readInt();
+            poolIdx = -1;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) return true;
+            if (o == null || getClass() != o.getClass()) return false;
+
+            HistoryTag that = (HistoryTag) o;
+
+            if (uid != that.uid) return false;
+            if (!string.equals(that.string)) return false;
+
+            return true;
+        }
+
+        @Override
+        public int hashCode() {
+            int result = string.hashCode();
+            result = 31 * result + uid;
+            return result;
+        }
+    }
+
     public final static class HistoryItem implements Parcelable {
-        static final String TAG = "HistoryItem";
-        static final boolean DEBUG = false;
-        
         public HistoryItem next;
         
         public long time;
-        
-        public static final byte CMD_NULL = 0;
-        public static final byte CMD_UPDATE = 1;
-        public static final byte CMD_START = 2;
-        public static final byte CMD_OVERFLOW = 3;
-        
+
+        public static final byte CMD_UPDATE = 0;        // These can be written as deltas
+        public static final byte CMD_NULL = -1;
+        public static final byte CMD_START = 4;
+        public static final byte CMD_CURRENT_TIME = 5;
+        public static final byte CMD_OVERFLOW = 6;
+
         public byte cmd = CMD_NULL;
         
+        /**
+         * Return whether the command code is a delta data update.
+         */
+        public boolean isDeltaData() {
+            return cmd == CMD_UPDATE;
+        }
+
         public byte batteryLevel;
         public byte batteryStatus;
         public byte batteryHealth;
@@ -464,50 +554,101 @@
         public char batteryVoltage;
         
         // Constants from SCREEN_BRIGHTNESS_*
-        public static final int STATE_BRIGHTNESS_MASK = 0x0000000f;
         public static final int STATE_BRIGHTNESS_SHIFT = 0;
+        public static final int STATE_BRIGHTNESS_MASK = 0x7;
         // Constants from SIGNAL_STRENGTH_*
-        public static final int STATE_SIGNAL_STRENGTH_MASK = 0x000000f0;
-        public static final int STATE_SIGNAL_STRENGTH_SHIFT = 4;
+        public static final int STATE_SIGNAL_STRENGTH_SHIFT = 3;
+        public static final int STATE_SIGNAL_STRENGTH_MASK = 0x7 << STATE_SIGNAL_STRENGTH_SHIFT;
         // Constants from ServiceState.STATE_*
-        public static final int STATE_PHONE_STATE_MASK = 0x00000f00;
-        public static final int STATE_PHONE_STATE_SHIFT = 8;
+        public static final int STATE_PHONE_STATE_SHIFT = 6;
+        public static final int STATE_PHONE_STATE_MASK = 0x7 << STATE_PHONE_STATE_SHIFT;
         // Constants from DATA_CONNECTION_*
-        public static final int STATE_DATA_CONNECTION_MASK = 0x0000f000;
-        public static final int STATE_DATA_CONNECTION_SHIFT = 12;
-        
+        public static final int STATE_DATA_CONNECTION_SHIFT = 9;
+        public static final int STATE_DATA_CONNECTION_MASK = 0x1f << STATE_DATA_CONNECTION_SHIFT;
+
         // These states always appear directly in the first int token
         // of a delta change; they should be ones that change relatively
         // frequently.
+        public static final int STATE_CPU_RUNNING_FLAG = 1<<31;
         public static final int STATE_WAKE_LOCK_FLAG = 1<<30;
-        public static final int STATE_SENSOR_ON_FLAG = 1<<29;
-        public static final int STATE_GPS_ON_FLAG = 1<<28;
-        public static final int STATE_PHONE_SCANNING_FLAG = 1<<27;
-        public static final int STATE_WIFI_RUNNING_FLAG = 1<<26;
-        public static final int STATE_WIFI_FULL_LOCK_FLAG = 1<<25;
-        public static final int STATE_WIFI_SCAN_FLAG = 1<<24;
-        public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<23;
+        public static final int STATE_GPS_ON_FLAG = 1<<29;
+        public static final int STATE_WIFI_FULL_LOCK_FLAG = 1<<28;
+        public static final int STATE_WIFI_SCAN_FLAG = 1<<27;
+        public static final int STATE_WIFI_MULTICAST_ON_FLAG = 1<<26;
+        public static final int STATE_MOBILE_RADIO_ACTIVE_FLAG = 1<<25;
+        public static final int STATE_WIFI_RUNNING_FLAG = 1<<24;
         // These are on the lower bits used for the command; if they change
         // we need to write another int of data.
+        public static final int STATE_SENSOR_ON_FLAG = 1<<23;
         public static final int STATE_AUDIO_ON_FLAG = 1<<22;
-        public static final int STATE_VIDEO_ON_FLAG = 1<<21;
+        public static final int STATE_PHONE_SCANNING_FLAG = 1<<21;
         public static final int STATE_SCREEN_ON_FLAG = 1<<20;
         public static final int STATE_BATTERY_PLUGGED_FLAG = 1<<19;
         public static final int STATE_PHONE_IN_CALL_FLAG = 1<<18;
         public static final int STATE_WIFI_ON_FLAG = 1<<17;
         public static final int STATE_BLUETOOTH_ON_FLAG = 1<<16;
-        
+
         public static final int MOST_INTERESTING_STATES =
             STATE_BATTERY_PLUGGED_FLAG | STATE_SCREEN_ON_FLAG
             | STATE_GPS_ON_FLAG | STATE_PHONE_IN_CALL_FLAG;
 
         public int states;
 
+        public static final int STATE2_VIDEO_ON_FLAG = 1<<0;
+        public int states2;
+
+        // The wake lock that was acquired at this point.
+        public HistoryTag wakelockTag;
+
+        // Kernel wakeup reason at this point.
+        public HistoryTag wakeReasonTag;
+
+        public static final int EVENT_FLAG_START = 0x8000;
+        public static final int EVENT_FLAG_FINISH = 0x4000;
+
+        // No event in this item.
+        public static final int EVENT_NONE = 0x0000;
+        // Event is about a process that is running.
+        public static final int EVENT_PROC = 0x0001;
+        // Event is about an application package that is in the foreground.
+        public static final int EVENT_FOREGROUND = 0x0002;
+        // Event is about an application package that is at the top of the screen.
+        public static final int EVENT_TOP = 0x0003;
+        // Event is about an application package that is at the top of the screen.
+        public static final int EVENT_SYNC = 0x0004;
+        // Number of event types.
+        public static final int EVENT_COUNT = 0x0005;
+
+        public static final int EVENT_PROC_START = EVENT_PROC | EVENT_FLAG_START;
+        public static final int EVENT_PROC_FINISH = EVENT_PROC | EVENT_FLAG_FINISH;
+        public static final int EVENT_FOREGROUND_START = EVENT_FOREGROUND | EVENT_FLAG_START;
+        public static final int EVENT_FOREGROUND_FINISH = EVENT_FOREGROUND | EVENT_FLAG_FINISH;
+        public static final int EVENT_TOP_START = EVENT_TOP | EVENT_FLAG_START;
+        public static final int EVENT_TOP_FINISH = EVENT_TOP | EVENT_FLAG_FINISH;
+        public static final int EVENT_SYNC_START = EVENT_SYNC | EVENT_FLAG_START;
+        public static final int EVENT_SYNC_FINISH = EVENT_SYNC | EVENT_FLAG_FINISH;
+
+        // For CMD_EVENT.
+        public int eventCode;
+        public HistoryTag eventTag;
+
+        // Only set for CMD_CURRENT_TIME.
+        public long currentTime;
+
+        // Meta-data when reading.
+        public int numReadInts;
+
+        // Pre-allocated objects.
+        public final HistoryTag localWakelockTag = new HistoryTag();
+        public final HistoryTag localWakeReasonTag = new HistoryTag();
+        public final HistoryTag localEventTag = new HistoryTag();
+
         public HistoryItem() {
         }
         
         public HistoryItem(long time, Parcel src) {
             this.time = time;
+            numReadInts = 2;
             readFromParcel(src);
         }
         
@@ -521,168 +662,70 @@
                     | ((((int)batteryLevel)<<8)&0xff00)
                     | ((((int)batteryStatus)<<16)&0xf0000)
                     | ((((int)batteryHealth)<<20)&0xf00000)
-                    | ((((int)batteryPlugType)<<24)&0xf000000);
+                    | ((((int)batteryPlugType)<<24)&0xf000000)
+                    | (wakelockTag != null ? 0x10000000 : 0)
+                    | (wakeReasonTag != null ? 0x20000000 : 0)
+                    | (eventCode != EVENT_NONE ? 0x40000000 : 0);
             dest.writeInt(bat);
             bat = (((int)batteryTemperature)&0xffff)
                     | ((((int)batteryVoltage)<<16)&0xffff0000);
             dest.writeInt(bat);
             dest.writeInt(states);
+            dest.writeInt(states2);
+            if (wakelockTag != null) {
+                wakelockTag.writeToParcel(dest, flags);
+            }
+            if (wakeReasonTag != null) {
+                wakeReasonTag.writeToParcel(dest, flags);
+            }
+            if (eventCode != EVENT_NONE) {
+                dest.writeInt(eventCode);
+                eventTag.writeToParcel(dest, flags);
+            }
+            if (cmd == CMD_CURRENT_TIME) {
+                dest.writeLong(currentTime);
+            }
         }
 
-        private void readFromParcel(Parcel src) {
+        public void readFromParcel(Parcel src) {
+            int start = src.dataPosition();
             int bat = src.readInt();
             cmd = (byte)(bat&0xff);
             batteryLevel = (byte)((bat>>8)&0xff);
             batteryStatus = (byte)((bat>>16)&0xf);
             batteryHealth = (byte)((bat>>20)&0xf);
             batteryPlugType = (byte)((bat>>24)&0xf);
-            bat = src.readInt();
-            batteryTemperature = (short)(bat&0xffff);
-            batteryVoltage = (char)((bat>>16)&0xffff);
+            int bat2 = src.readInt();
+            batteryTemperature = (short)(bat2&0xffff);
+            batteryVoltage = (char)((bat2>>16)&0xffff);
             states = src.readInt();
-        }
-
-        // Part of initial delta int that specifies the time delta.
-        static final int DELTA_TIME_MASK = 0x3ffff;
-        static final int DELTA_TIME_ABS = 0x3fffd;    // Following is an entire abs update.
-        static final int DELTA_TIME_INT = 0x3fffe;    // The delta is a following int
-        static final int DELTA_TIME_LONG = 0x3ffff;   // The delta is a following long
-        // Part of initial delta int holding the command code.
-        static final int DELTA_CMD_MASK = 0x3;
-        static final int DELTA_CMD_SHIFT = 18;
-        // Flag in delta int: a new battery level int follows.
-        static final int DELTA_BATTERY_LEVEL_FLAG = 1<<20;
-        // Flag in delta int: a new full state and battery status int follows.
-        static final int DELTA_STATE_FLAG = 1<<21;
-        static final int DELTA_STATE_MASK = 0xffc00000;
-        
-        public void writeDelta(Parcel dest, HistoryItem last) {
-            if (last == null || last.cmd != CMD_UPDATE) {
-                dest.writeInt(DELTA_TIME_ABS);
-                writeToParcel(dest, 0);
-                return;
-            }
-            
-            final long deltaTime = time - last.time;
-            final int lastBatteryLevelInt = last.buildBatteryLevelInt();
-            final int lastStateInt = last.buildStateInt();
-            
-            int deltaTimeToken;
-            if (deltaTime < 0 || deltaTime > Integer.MAX_VALUE) {
-                deltaTimeToken = DELTA_TIME_LONG;
-            } else if (deltaTime >= DELTA_TIME_ABS) {
-                deltaTimeToken = DELTA_TIME_INT;
+            states2 = src.readInt();
+            if ((bat&0x10000000) != 0) {
+                wakelockTag = localWakelockTag;
+                wakelockTag.readFromParcel(src);
             } else {
-                deltaTimeToken = (int)deltaTime;
+                wakelockTag = null;
             }
-            int firstToken = deltaTimeToken
-                    | (cmd<<DELTA_CMD_SHIFT)
-                    | (states&DELTA_STATE_MASK);
-            final int batteryLevelInt = buildBatteryLevelInt();
-            final boolean batteryLevelIntChanged = batteryLevelInt != lastBatteryLevelInt;
-            if (batteryLevelIntChanged) {
-                firstToken |= DELTA_BATTERY_LEVEL_FLAG;
-            }
-            final int stateInt = buildStateInt();
-            final boolean stateIntChanged = stateInt != lastStateInt;
-            if (stateIntChanged) {
-                firstToken |= DELTA_STATE_FLAG;
-            }
-            dest.writeInt(firstToken);
-            if (DEBUG) Slog.i(TAG, "WRITE DELTA: firstToken=0x" + Integer.toHexString(firstToken)
-                    + " deltaTime=" + deltaTime);
-            
-            if (deltaTimeToken >= DELTA_TIME_INT) {
-                if (deltaTimeToken == DELTA_TIME_INT) {
-                    if (DEBUG) Slog.i(TAG, "WRITE DELTA: int deltaTime=" + (int)deltaTime);
-                    dest.writeInt((int)deltaTime);
-                } else {
-                    if (DEBUG) Slog.i(TAG, "WRITE DELTA: long deltaTime=" + deltaTime);
-                    dest.writeLong(deltaTime);
-                }
-            }
-            if (batteryLevelIntChanged) {
-                dest.writeInt(batteryLevelInt);
-                if (DEBUG) Slog.i(TAG, "WRITE DELTA: batteryToken=0x"
-                        + Integer.toHexString(batteryLevelInt)
-                        + " batteryLevel=" + batteryLevel
-                        + " batteryTemp=" + batteryTemperature
-                        + " batteryVolt=" + (int)batteryVoltage);
-            }
-            if (stateIntChanged) {
-                dest.writeInt(stateInt);
-                if (DEBUG) Slog.i(TAG, "WRITE DELTA: stateToken=0x"
-                        + Integer.toHexString(stateInt)
-                        + " batteryStatus=" + batteryStatus
-                        + " batteryHealth=" + batteryHealth
-                        + " batteryPlugType=" + batteryPlugType
-                        + " states=0x" + Integer.toHexString(states));
-            }
-        }
-        
-        private int buildBatteryLevelInt() {
-            return ((((int)batteryLevel)<<25)&0xfe000000)
-                    | ((((int)batteryTemperature)<<14)&0x01ffc000)
-                    | (((int)batteryVoltage)&0x00003fff);
-        }
-        
-        private int buildStateInt() {
-            return ((((int)batteryStatus)<<28)&0xf0000000)
-                    | ((((int)batteryHealth)<<24)&0x0f000000)
-                    | ((((int)batteryPlugType)<<22)&0x00c00000)
-                    | (states&(~DELTA_STATE_MASK));
-        }
-        
-        public void readDelta(Parcel src) {
-            int firstToken = src.readInt();
-            int deltaTimeToken = firstToken&DELTA_TIME_MASK;
-            cmd = (byte)((firstToken>>DELTA_CMD_SHIFT)&DELTA_CMD_MASK);
-            if (DEBUG) Slog.i(TAG, "READ DELTA: firstToken=0x" + Integer.toHexString(firstToken)
-                    + " deltaTimeToken=" + deltaTimeToken);
-            
-            if (deltaTimeToken < DELTA_TIME_ABS) {
-                time += deltaTimeToken;
-            } else if (deltaTimeToken == DELTA_TIME_ABS) {
-                time = src.readLong();
-                readFromParcel(src);
-                return;
-            } else if (deltaTimeToken == DELTA_TIME_INT) {
-                int delta = src.readInt();
-                time += delta;
-                if (DEBUG) Slog.i(TAG, "READ DELTA: time delta=" + delta + " new time=" + time);
+            if ((bat&0x20000000) != 0) {
+                wakeReasonTag = localWakeReasonTag;
+                wakeReasonTag.readFromParcel(src);
             } else {
-                long delta = src.readLong();
-                if (DEBUG) Slog.i(TAG, "READ DELTA: time delta=" + delta + " new time=" + time);
-                time += delta;
+                wakeReasonTag = null;
             }
-            
-            if ((firstToken&DELTA_BATTERY_LEVEL_FLAG) != 0) {
-                int batteryLevelInt = src.readInt();
-                batteryLevel = (byte)((batteryLevelInt>>25)&0x7f);
-                batteryTemperature = (short)((batteryLevelInt<<7)>>21);
-                batteryVoltage = (char)(batteryLevelInt&0x3fff);
-                if (DEBUG) Slog.i(TAG, "READ DELTA: batteryToken=0x"
-                        + Integer.toHexString(batteryLevelInt)
-                        + " batteryLevel=" + batteryLevel
-                        + " batteryTemp=" + batteryTemperature
-                        + " batteryVolt=" + (int)batteryVoltage);
-            }
-            
-            if ((firstToken&DELTA_STATE_FLAG) != 0) {
-                int stateInt = src.readInt();
-                states = (firstToken&DELTA_STATE_MASK) | (stateInt&(~DELTA_STATE_MASK));
-                batteryStatus = (byte)((stateInt>>28)&0xf);
-                batteryHealth = (byte)((stateInt>>24)&0xf);
-                batteryPlugType = (byte)((stateInt>>22)&0x3);
-                if (DEBUG) Slog.i(TAG, "READ DELTA: stateToken=0x"
-                        + Integer.toHexString(stateInt)
-                        + " batteryStatus=" + batteryStatus
-                        + " batteryHealth=" + batteryHealth
-                        + " batteryPlugType=" + batteryPlugType
-                        + " states=0x" + Integer.toHexString(states));
+            if ((bat&0x40000000) != 0) {
+                eventCode = src.readInt();
+                eventTag = localEventTag;
+                eventTag.readFromParcel(src);
             } else {
-                states = (firstToken&DELTA_STATE_MASK) | (states&(~DELTA_STATE_MASK));
+                eventCode = EVENT_NONE;
+                eventTag = null;
             }
+            if (cmd == CMD_CURRENT_TIME) {
+                currentTime = src.readLong();
+            } else {
+                currentTime = 0;
+            }
+            numReadInts += (src.dataPosition()-start)/4;
         }
 
         public void clear() {
@@ -695,23 +738,26 @@
             batteryTemperature = 0;
             batteryVoltage = 0;
             states = 0;
+            states2 = 0;
+            wakelockTag = null;
+            wakeReasonTag = null;
+            eventCode = EVENT_NONE;
+            eventTag = null;
         }
         
         public void setTo(HistoryItem o) {
             time = o.time;
             cmd = o.cmd;
-            batteryLevel = o.batteryLevel;
-            batteryStatus = o.batteryStatus;
-            batteryHealth = o.batteryHealth;
-            batteryPlugType = o.batteryPlugType;
-            batteryTemperature = o.batteryTemperature;
-            batteryVoltage = o.batteryVoltage;
-            states = o.states;
+            setToCommon(o);
         }
 
         public void setTo(long time, byte cmd, HistoryItem o) {
             this.time = time;
             this.cmd = cmd;
+            setToCommon(o);
+        }
+
+        private void setToCommon(HistoryItem o) {
             batteryLevel = o.batteryLevel;
             batteryStatus = o.batteryStatus;
             batteryHealth = o.batteryHealth;
@@ -719,16 +765,70 @@
             batteryTemperature = o.batteryTemperature;
             batteryVoltage = o.batteryVoltage;
             states = o.states;
+            states2 = o.states2;
+            if (o.wakelockTag != null) {
+                wakelockTag = localWakelockTag;
+                wakelockTag.setTo(o.wakelockTag);
+            } else {
+                wakelockTag = null;
+            }
+            if (o.wakeReasonTag != null) {
+                wakeReasonTag = localWakeReasonTag;
+                wakeReasonTag.setTo(o.wakeReasonTag);
+            } else {
+                wakeReasonTag = null;
+            }
+            eventCode = o.eventCode;
+            if (o.eventTag != null) {
+                eventTag = localEventTag;
+                eventTag.setTo(o.eventTag);
+            } else {
+                eventTag = null;
+            }
+            currentTime = o.currentTime;
         }
 
-        public boolean same(HistoryItem o) {
+        public boolean sameNonEvent(HistoryItem o) {
             return batteryLevel == o.batteryLevel
                     && batteryStatus == o.batteryStatus
                     && batteryHealth == o.batteryHealth
                     && batteryPlugType == o.batteryPlugType
                     && batteryTemperature == o.batteryTemperature
                     && batteryVoltage == o.batteryVoltage
-                    && states == o.states;
+                    && states == o.states
+                    && states2 == o.states2
+                    && currentTime == o.currentTime;
+        }
+
+        public boolean same(HistoryItem o) {
+            if (!sameNonEvent(o) || eventCode != o.eventCode) {
+                return false;
+            }
+            if (wakelockTag != o.wakelockTag) {
+                if (wakelockTag == null || o.wakelockTag == null) {
+                    return false;
+                }
+                if (!wakelockTag.equals(o.wakelockTag)) {
+                    return false;
+                }
+            }
+            if (wakeReasonTag != o.wakeReasonTag) {
+                if (wakeReasonTag == null || o.wakeReasonTag == null) {
+                    return false;
+                }
+                if (!wakeReasonTag.equals(o.wakeReasonTag)) {
+                    return false;
+                }
+            }
+            if (eventTag != o.eventTag) {
+                if (eventTag == null || o.eventTag == null) {
+                    return false;
+                }
+                if (!eventTag.equals(o.eventTag)) {
+                    return false;
+                }
+            }
+            return true;
         }
     }
     
@@ -736,25 +836,44 @@
         public final int mask;
         public final int shift;
         public final String name;
+        public final String shortName;
         public final String[] values;
+        public final String[] shortValues;
         
-        public BitDescription(int mask, String name) {
+        public BitDescription(int mask, String name, String shortName) {
             this.mask = mask;
             this.shift = -1;
             this.name = name;
+            this.shortName = shortName;
             this.values = null;
+            this.shortValues = null;
         }
         
-        public BitDescription(int mask, int shift, String name, String[] values) {
+        public BitDescription(int mask, int shift, String name, String shortName,
+                String[] values, String[] shortValues) {
             this.mask = mask;
             this.shift = shift;
             this.name = name;
+            this.shortName = shortName;
             this.values = values;
+            this.shortValues = shortValues;
         }
     }
     
+    public abstract int getHistoryTotalSize();
+
+    public abstract int getHistoryUsedSize();
+
     public abstract boolean startIteratingHistoryLocked();
 
+    public abstract int getHistoryStringPoolSize();
+
+    public abstract int getHistoryStringPoolBytes();
+
+    public abstract String getHistoryTagPoolString(int index);
+
+    public abstract int getHistoryTagPoolUid(int index);
+
     public abstract boolean getNextHistoryLocked(HistoryItem out);
 
     public abstract void finishIteratingHistoryLocked();
@@ -781,8 +900,15 @@
      * 
      * {@hide}
      */
-    public abstract long getScreenOnTime(long batteryRealtime, int which);
+    public abstract long getScreenOnTime(long elapsedRealtimeUs, int which);
     
+    /**
+     * Returns the number of times the screen was turned on.
+     *
+     * {@hide}
+     */
+    public abstract int getScreenOnCount(int which);
+
     public static final int SCREEN_BRIGHTNESS_DARK = 0;
     public static final int SCREEN_BRIGHTNESS_DIM = 1;
     public static final int SCREEN_BRIGHTNESS_MEDIUM = 2;
@@ -793,6 +919,10 @@
         "dark", "dim", "medium", "light", "bright"
     };
     
+    static final String[] SCREEN_BRIGHTNESS_SHORT_NAMES = {
+        "0", "1", "2", "3", "4"
+    };
+
     public static final int NUM_SCREEN_BRIGHTNESS_BINS = 5;
     
     /**
@@ -802,7 +932,7 @@
      * {@hide}
      */
     public abstract long getScreenBrightnessTime(int brightnessBin,
-            long batteryRealtime, int which);
+            long elapsedRealtimeUs, int which);
 
     public abstract int getInputEventCount(int which);
     
@@ -812,16 +942,23 @@
      * 
      * {@hide}
      */
-    public abstract long getPhoneOnTime(long batteryRealtime, int which);
+    public abstract long getPhoneOnTime(long elapsedRealtimeUs, int which);
     
     /**
+     * Returns the number of times a phone call was activated.
+     *
+     * {@hide}
+     */
+    public abstract int getPhoneOnCount(int which);
+
+    /**
      * Returns the time in microseconds that the phone has been running with
      * the given signal strength.
      * 
      * {@hide}
      */
     public abstract long getPhoneSignalStrengthTime(int strengthBin,
-            long batteryRealtime, int which);
+            long elapsedRealtimeUs, int which);
 
     /**
      * Returns the time in microseconds that the phone has been trying to
@@ -830,7 +967,7 @@
      * {@hide}
      */
     public abstract long getPhoneSignalScanningTime(
-            long batteryRealtime, int which);
+            long elapsedRealtimeUs, int which);
 
     /**
      * Returns the number of times the phone has entered the given signal strength.
@@ -839,6 +976,46 @@
      */
     public abstract int getPhoneSignalStrengthCount(int strengthBin, int which);
 
+    /**
+     * Returns the time in microseconds that the mobile network has been active
+     * (in a high power state).
+     *
+     * {@hide}
+     */
+    public abstract long getMobileRadioActiveTime(long elapsedRealtimeUs, int which);
+
+    /**
+     * Returns the number of times that the mobile network has transitioned to the
+     * active state.
+     *
+     * {@hide}
+     */
+    public abstract int getMobileRadioActiveCount(int which);
+
+    /**
+     * Returns the time in microseconds that is the difference between the mobile radio
+     * time we saw based on the elapsed timestamp when going down vs. the given time stamp
+     * from the radio.
+     *
+     * {@hide}
+     */
+    public abstract long getMobileRadioActiveAdjustedTime(int which);
+
+    /**
+     * Returns the time in microseconds that the mobile network has been active
+     * (in a high power state) but not being able to blame on an app.
+     *
+     * {@hide}
+     */
+    public abstract long getMobileRadioActiveUnknownTime(int which);
+
+    /**
+     * Return count of number of times radio was up that could not be blamed on apps.
+     *
+     * {@hide}
+     */
+    public abstract int getMobileRadioActiveUnknownCount(int which);
+
     public static final int DATA_CONNECTION_NONE = 0;
     public static final int DATA_CONNECTION_GPRS = 1;
     public static final int DATA_CONNECTION_EDGE = 2;
@@ -872,7 +1049,7 @@
      * {@hide}
      */
     public abstract long getPhoneDataConnectionTime(int dataType,
-            long batteryRealtime, int which);
+            long elapsedRealtimeUs, int which);
 
     /**
      * Returns the number of times the phone has entered the given data
@@ -881,36 +1058,53 @@
      * {@hide}
      */
     public abstract int getPhoneDataConnectionCount(int dataType, int which);
-    
+
     public static final BitDescription[] HISTORY_STATE_DESCRIPTIONS
             = new BitDescription[] {
-        new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged"),
-        new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen"),
-        new BitDescription(HistoryItem.STATE_GPS_ON_FLAG, "gps"),
-        new BitDescription(HistoryItem.STATE_PHONE_IN_CALL_FLAG, "phone_in_call"),
-        new BitDescription(HistoryItem.STATE_PHONE_SCANNING_FLAG, "phone_scanning"),
-        new BitDescription(HistoryItem.STATE_WIFI_ON_FLAG, "wifi"),
-        new BitDescription(HistoryItem.STATE_WIFI_RUNNING_FLAG, "wifi_running"),
-        new BitDescription(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG, "wifi_full_lock"),
-        new BitDescription(HistoryItem.STATE_WIFI_SCAN_FLAG, "wifi_scan"),
-        new BitDescription(HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG, "wifi_multicast"),
-        new BitDescription(HistoryItem.STATE_BLUETOOTH_ON_FLAG, "bluetooth"),
-        new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio"),
-        new BitDescription(HistoryItem.STATE_VIDEO_ON_FLAG, "video"),
-        new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock"),
-        new BitDescription(HistoryItem.STATE_SENSOR_ON_FLAG, "sensor"),
-        new BitDescription(HistoryItem.STATE_BRIGHTNESS_MASK,
-                HistoryItem.STATE_BRIGHTNESS_SHIFT, "brightness",
-                SCREEN_BRIGHTNESS_NAMES),
-        new BitDescription(HistoryItem.STATE_SIGNAL_STRENGTH_MASK,
-                HistoryItem.STATE_SIGNAL_STRENGTH_SHIFT, "signal_strength",
-                SignalStrength.SIGNAL_STRENGTH_NAMES),
-        new BitDescription(HistoryItem.STATE_PHONE_STATE_MASK,
-                HistoryItem.STATE_PHONE_STATE_SHIFT, "phone_state",
-                new String[] {"in", "out", "emergency", "off"}),
+        new BitDescription(HistoryItem.STATE_CPU_RUNNING_FLAG, "running", "r"),
+        new BitDescription(HistoryItem.STATE_WAKE_LOCK_FLAG, "wake_lock", "w"),
+        new BitDescription(HistoryItem.STATE_SENSOR_ON_FLAG, "sensor", "s"),
+        new BitDescription(HistoryItem.STATE_GPS_ON_FLAG, "gps", "g"),
+        new BitDescription(HistoryItem.STATE_WIFI_FULL_LOCK_FLAG, "wifi_full_lock", "Wl"),
+        new BitDescription(HistoryItem.STATE_WIFI_SCAN_FLAG, "wifi_scan", "Ws"),
+        new BitDescription(HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG, "wifi_multicast", "Wm"),
+        new BitDescription(HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG, "mobile_radio", "Pr"),
+        new BitDescription(HistoryItem.STATE_WIFI_RUNNING_FLAG, "wifi_running", "Wr"),
+        new BitDescription(HistoryItem.STATE_PHONE_SCANNING_FLAG, "phone_scanning", "Psc"),
+        new BitDescription(HistoryItem.STATE_AUDIO_ON_FLAG, "audio", "a"),
+        new BitDescription(HistoryItem.STATE_SCREEN_ON_FLAG, "screen", "S"),
+        new BitDescription(HistoryItem.STATE_BATTERY_PLUGGED_FLAG, "plugged", "BP"),
+        new BitDescription(HistoryItem.STATE_PHONE_IN_CALL_FLAG, "phone_in_call", "Pcl"),
+        new BitDescription(HistoryItem.STATE_WIFI_ON_FLAG, "wifi", "W"),
+        new BitDescription(HistoryItem.STATE_BLUETOOTH_ON_FLAG, "bluetooth", "b"),
         new BitDescription(HistoryItem.STATE_DATA_CONNECTION_MASK,
-                HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn",
-                DATA_CONNECTION_NAMES),
+                HistoryItem.STATE_DATA_CONNECTION_SHIFT, "data_conn", "Pcn",
+                DATA_CONNECTION_NAMES, DATA_CONNECTION_NAMES),
+        new BitDescription(HistoryItem.STATE_PHONE_STATE_MASK,
+                HistoryItem.STATE_PHONE_STATE_SHIFT, "phone_state", "Pst",
+                new String[] {"in", "out", "emergency", "off"},
+                new String[] {"in", "out", "em", "off"}),
+        new BitDescription(HistoryItem.STATE_SIGNAL_STRENGTH_MASK,
+                HistoryItem.STATE_SIGNAL_STRENGTH_SHIFT, "signal_strength", "Pss",
+                SignalStrength.SIGNAL_STRENGTH_NAMES, new String[] {
+                    "0", "1", "2", "3", "4"
+        }),
+        new BitDescription(HistoryItem.STATE_BRIGHTNESS_MASK,
+                HistoryItem.STATE_BRIGHTNESS_SHIFT, "brightness", "Sb",
+                SCREEN_BRIGHTNESS_NAMES, SCREEN_BRIGHTNESS_SHORT_NAMES),
+    };
+
+    public static final BitDescription[] HISTORY_STATE2_DESCRIPTIONS
+            = new BitDescription[] {
+        new BitDescription(HistoryItem.STATE2_VIDEO_ON_FLAG, "video", "v"),
+    };
+
+    public static final String[] HISTORY_EVENT_NAMES = new String[] {
+            "null", "proc", "fg", "top", "sync"
+    };
+
+    public static final String[] HISTORY_EVENT_CHECKIN_NAMES = new String[] {
+            "Enl", "Epr", "Efg", "Etp", "Esy"
     };
 
     /**
@@ -919,7 +1113,7 @@
      * 
      * {@hide}
      */
-    public abstract long getWifiOnTime(long batteryRealtime, int which);
+    public abstract long getWifiOnTime(long elapsedRealtimeUs, int which);
 
     /**
      * Returns the time in microseconds that wifi has been on and the driver has
@@ -927,7 +1121,38 @@
      *
      * {@hide}
      */
-    public abstract long getGlobalWifiRunningTime(long batteryRealtime, int which);
+    public abstract long getGlobalWifiRunningTime(long elapsedRealtimeUs, int which);
+
+    public static final int WIFI_STATE_OFF = 0;
+    public static final int WIFI_STATE_OFF_SCANNING = 1;
+    public static final int WIFI_STATE_ON_NO_NETWORKS = 2;
+    public static final int WIFI_STATE_ON_DISCONNECTED = 3;
+    public static final int WIFI_STATE_ON_CONNECTED_STA = 4;
+    public static final int WIFI_STATE_ON_CONNECTED_P2P = 5;
+    public static final int WIFI_STATE_ON_CONNECTED_STA_P2P = 6;
+    public static final int WIFI_STATE_SOFT_AP = 7;
+
+    static final String[] WIFI_STATE_NAMES = {
+        "off", "scanning", "no_net", "disconn",
+        "sta", "p2p", "sta_p2p", "soft_ap"
+    };
+
+    public static final int NUM_WIFI_STATES = WIFI_STATE_SOFT_AP+1;
+
+    /**
+     * Returns the time in microseconds that WiFi has been running in the given state.
+     *
+     * {@hide}
+     */
+    public abstract long getWifiStateTime(int wifiState,
+            long elapsedRealtimeUs, int which);
+
+    /**
+     * Returns the number of times that WiFi has entered the given state.
+     *
+     * {@hide}
+     */
+    public abstract int getWifiStateCount(int wifiState, int which);
 
     /**
      * Returns the time in microseconds that bluetooth has been on while the device was
@@ -935,16 +1160,51 @@
      * 
      * {@hide}
      */
-    public abstract long getBluetoothOnTime(long batteryRealtime, int which);
+    public abstract long getBluetoothOnTime(long elapsedRealtimeUs, int which);
     
-    public static final int NETWORK_MOBILE_RX_BYTES = 0;
-    public static final int NETWORK_MOBILE_TX_BYTES = 1;
-    public static final int NETWORK_WIFI_RX_BYTES = 2;
-    public static final int NETWORK_WIFI_TX_BYTES = 3;
+    public abstract int getBluetoothPingCount();
 
-    public static final int NUM_NETWORK_ACTIVITY_TYPES = NETWORK_WIFI_TX_BYTES + 1;
+    public static final int BLUETOOTH_STATE_INACTIVE = 0;
+    public static final int BLUETOOTH_STATE_LOW = 1;
+    public static final int BLUETOOTH_STATE_MEDIUM = 2;
+    public static final int BLUETOOTH_STATE_HIGH = 3;
 
-    public abstract long getNetworkActivityCount(int type, int which);
+    static final String[] BLUETOOTH_STATE_NAMES = {
+        "inactive", "low", "med", "high"
+    };
+
+    public static final int NUM_BLUETOOTH_STATES = BLUETOOTH_STATE_HIGH +1;
+
+    /**
+     * Returns the time in microseconds that Bluetooth has been running in the
+     * given active state.
+     *
+     * {@hide}
+     */
+    public abstract long getBluetoothStateTime(int bluetoothState,
+            long elapsedRealtimeUs, int which);
+
+    /**
+     * Returns the number of times that Bluetooth has entered the given active state.
+     *
+     * {@hide}
+     */
+    public abstract int getBluetoothStateCount(int bluetoothState, int which);
+
+    public static final int NETWORK_MOBILE_RX_DATA = 0;
+    public static final int NETWORK_MOBILE_TX_DATA = 1;
+    public static final int NETWORK_WIFI_RX_DATA = 2;
+    public static final int NETWORK_WIFI_TX_DATA = 3;
+
+    public static final int NUM_NETWORK_ACTIVITY_TYPES = NETWORK_WIFI_TX_DATA + 1;
+
+    public abstract long getNetworkActivityBytes(int type, int which);
+    public abstract long getNetworkActivityPackets(int type, int which);
+
+    /**
+     * Return the wall clock time when battery stats data collection started.
+     */
+    public abstract long getStartClockTime();
 
     /**
      * Return whether we are currently running on battery.
@@ -964,19 +1224,6 @@
     public abstract long getBatteryUptime(long curTime);
 
     /**
-     * @deprecated use getRadioDataUptime
-     */
-    public long getRadioDataUptimeMs() {
-        return getRadioDataUptime() / 1000;
-    }
-
-    /**
-     * Returns the time that the radio was on for data transfers.
-     * @return the uptime in microseconds while unplugged
-     */
-    public abstract long getRadioDataUptime();
-
-    /**
      * Returns the current battery realtime in microseconds.
      *
      * @param curTime the amount of elapsed realtime in microseconds.
@@ -1008,6 +1255,11 @@
     public abstract int getHighDischargeAmountSinceCharge();
 
     /**
+     * Retrieve the discharge amount over the selected discharge period <var>which</var>.
+     */
+    public abstract int getDischargeAmount(int which);
+
+    /**
      * Get the amount the battery has discharged while the screen was on,
      * since the last time power was unplugged.
      */
@@ -1035,7 +1287,7 @@
      * Returns the total, last, or current battery uptime in microseconds.
      *
      * @param curTime the elapsed realtime in microseconds.
-     * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+     * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
      */
     public abstract long computeBatteryUptime(long curTime, int which);
 
@@ -1043,31 +1295,95 @@
      * Returns the total, last, or current battery realtime in microseconds.
      *
      * @param curTime the current elapsed realtime in microseconds.
-     * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+     * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
      */
     public abstract long computeBatteryRealtime(long curTime, int which);
 
     /**
+     * Returns the total, last, or current battery screen off uptime in microseconds.
+     *
+     * @param curTime the elapsed realtime in microseconds.
+     * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
+     */
+    public abstract long computeBatteryScreenOffUptime(long curTime, int which);
+
+    /**
+     * Returns the total, last, or current battery screen off realtime in microseconds.
+     *
+     * @param curTime the current elapsed realtime in microseconds.
+     * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
+     */
+    public abstract long computeBatteryScreenOffRealtime(long curTime, int which);
+
+    /**
      * Returns the total, last, or current uptime in microseconds.
      *
      * @param curTime the current elapsed realtime in microseconds.
-     * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+     * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
      */
     public abstract long computeUptime(long curTime, int which);
 
     /**
      * Returns the total, last, or current realtime in microseconds.
-     * *
+     *
      * @param curTime the current elapsed realtime in microseconds.
-     * @param which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+     * @param which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
      */
     public abstract long computeRealtime(long curTime, int which);
-    
+
+    /**
+     * Compute an approximation for how much run time (in microseconds) is remaining on
+     * the battery.  Returns -1 if no time can be computed: either there is not
+     * enough current data to make a decision, or the battery is currently
+     * charging.
+     *
+     * @param curTime The current elepsed realtime in microseconds.
+     */
+    public abstract long computeBatteryTimeRemaining(long curTime);
+
+    /**
+     * Return the historical number of discharge steps we currently have.
+     */
+    public abstract int getNumDischargeStepDurations();
+
+    /**
+     * Return the array of discharge step durations; the number of valid
+     * items in it is returned by {@link #getNumDischargeStepDurations()}.
+     * These values are in milliseconds.
+     */
+    public abstract long[] getDischargeStepDurationsArray();
+
+    /**
+     * Compute an approximation for how much time (in microseconds) remains until the battery
+     * is fully charged.  Returns -1 if no time can be computed: either there is not
+     * enough current data to make a decision, or the battery is currently
+     * discharging.
+     *
+     * @param curTime The current elepsed realtime in microseconds.
+     */
+    public abstract long computeChargeTimeRemaining(long curTime);
+
+    /**
+     * Return the historical number of charge steps we currently have.
+     */
+    public abstract int getNumChargeStepDurations();
+
+    /**
+     * Return the array of charge step durations; the number of valid
+     * items in it is returned by {@link #getNumChargeStepDurations()}.
+     * These values are in milliseconds.
+     */
+    public abstract long[] getChargeStepDurationsArray();
+
+    public abstract Map<String, ? extends LongCounter> getWakeupReasonStats();
+
     public abstract Map<String, ? extends Timer> getKernelWakelockStats();
 
     /** Returns the number of different speeds that the CPU can run at */
     public abstract int getCpuSpeedSteps();
 
+    public abstract void writeToParcelWithoutUids(Parcel out, int flags);
+
     private final static void formatTimeRaw(StringBuilder out, long seconds) {
         long days = seconds / (60 * 60 * 24);
         if (days != 0) {
@@ -1096,23 +1412,30 @@
         }
     }
 
-    private final static void formatTime(StringBuilder sb, long time) {
+    public final static void formatTime(StringBuilder sb, long time) {
         long sec = time / 100;
         formatTimeRaw(sb, sec);
         sb.append((time - (sec * 100)) * 10);
         sb.append("ms ");
     }
 
-    private final static void formatTimeMs(StringBuilder sb, long time) {
+    public final static void formatTimeMs(StringBuilder sb, long time) {
         long sec = time / 1000;
         formatTimeRaw(sb, sec);
         sb.append(time - (sec * 1000));
         sb.append("ms ");
     }
 
-    private final String formatRatioLocked(long num, long den) {
+    public final static void formatTimeMsNoSpace(StringBuilder sb, long time) {
+        long sec = time / 1000;
+        formatTimeRaw(sb, sec);
+        sb.append(time - (sec * 1000));
+        sb.append("ms");
+    }
+
+    public final String formatRatioLocked(long num, long den) {
         if (den == 0L) {
-            return "---%";
+            return "--%";
         }
         float perc = ((float)num) / ((float)den) * 100;
         mFormatBuilder.setLength(0);
@@ -1120,7 +1443,7 @@
         return mFormatBuilder.toString();
     }
 
-    private final String formatBytesLocked(long bytes) {
+    final String formatBytesLocked(long bytes) {
         mFormatBuilder.setLength(0);
         
         if (bytes < BYTES_PER_KB) {
@@ -1137,10 +1460,10 @@
         }
     }
 
-    private static long computeWakeLock(Timer timer, long batteryRealtime, int which) {
+    private static long computeWakeLock(Timer timer, long elapsedRealtimeUs, int which) {
         if (timer != null) {
             // Convert from microseconds to milliseconds with rounding
-            long totalTimeMicros = timer.getTotalTimeLocked(batteryRealtime, which);
+            long totalTimeMicros = timer.getTotalTimeLocked(elapsedRealtimeUs, which);
             long totalTimeMillis = (totalTimeMicros + 500) / 1000;
             return totalTimeMillis;
         }
@@ -1151,17 +1474,17 @@
      *
      * @param sb a StringBuilder object.
      * @param timer a Timer object contining the wakelock times.
-     * @param batteryRealtime the current on-battery time in microseconds.
+     * @param elapsedRealtimeUs the current on-battery time in microseconds.
      * @param name the name of the wakelock.
-     * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+     * @param which which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
      * @param linePrefix a String to be prepended to each line of output.
      * @return the line prefix
      */
     private static final String printWakeLock(StringBuilder sb, Timer timer,
-            long batteryRealtime, String name, int which, String linePrefix) {
+            long elapsedRealtimeUs, String name, int which, String linePrefix) {
         
         if (timer != null) {
-            long totalTimeMillis = computeWakeLock(timer, batteryRealtime, which);
+            long totalTimeMillis = computeWakeLock(timer, elapsedRealtimeUs, which);
             
             int count = timer.getCountLocked(which);
             if (totalTimeMillis != 0) {
@@ -1185,18 +1508,18 @@
      * 
      * @param sb a StringBuilder object.
      * @param timer a Timer object contining the wakelock times.
-     * @param now the current time in microseconds.
+     * @param elapsedRealtimeUs the current time in microseconds.
      * @param name the name of the wakelock.
-     * @param which which one of STATS_TOTAL, STATS_LAST, or STATS_CURRENT.
+     * @param which which one of STATS_SINCE_CHARGED, STATS_SINCE_UNPLUGGED, or STATS_CURRENT.
      * @param linePrefix a String to be prepended to each line of output.
      * @return the line prefix
      */
-    private static final String printWakeLockCheckin(StringBuilder sb, Timer timer, long now,
-            String name, int which, String linePrefix) {
+    private static final String printWakeLockCheckin(StringBuilder sb, Timer timer,
+            long elapsedRealtimeUs, String name, int which, String linePrefix) {
         long totalTimeMicros = 0;
         int count = 0;
         if (timer != null) {
-            totalTimeMicros = timer.getTotalTimeLocked(now, which);
+            totalTimeMicros = timer.getTotalTimeLocked(elapsedRealtimeUs, which);
             count = timer.getCountLocked(which); 
         }
         sb.append(linePrefix);
@@ -1234,20 +1557,22 @@
      * 
      * NOTE: all times are expressed in 'ms'.
      */
-    public final void dumpCheckinLocked(PrintWriter pw, int which, int reqUid) {
+    public final void dumpCheckinLocked(Context context, PrintWriter pw, int which, int reqUid) {
         final long rawUptime = SystemClock.uptimeMillis() * 1000;
         final long rawRealtime = SystemClock.elapsedRealtime() * 1000;
         final long batteryUptime = getBatteryUptime(rawUptime);
-        final long batteryRealtime = getBatteryRealtime(rawRealtime);
         final long whichBatteryUptime = computeBatteryUptime(rawUptime, which);
         final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which);
+        final long whichBatteryScreenOffUptime = computeBatteryScreenOffUptime(rawUptime, which);
+        final long whichBatteryScreenOffRealtime = computeBatteryScreenOffRealtime(rawRealtime,
+                which);
         final long totalRealtime = computeRealtime(rawRealtime, which);
         final long totalUptime = computeUptime(rawUptime, which);
-        final long screenOnTime = getScreenOnTime(batteryRealtime, which);
-        final long phoneOnTime = getPhoneOnTime(batteryRealtime, which);
-        final long wifiOnTime = getWifiOnTime(batteryRealtime, which);
-        final long wifiRunningTime = getGlobalWifiRunningTime(batteryRealtime, which);
-        final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which);
+        final long screenOnTime = getScreenOnTime(rawRealtime, which);
+        final long phoneOnTime = getPhoneOnTime(rawRealtime, which);
+        final long wifiOnTime = getWifiOnTime(rawRealtime, which);
+        final long wifiRunningTime = getGlobalWifiRunningTime(rawRealtime, which);
+        final long bluetoothOnTime = getBluetoothOnTime(rawRealtime, which);
        
         StringBuilder sb = new StringBuilder(128);
         
@@ -1260,22 +1585,16 @@
         dumpLine(pw, 0 /* uid */, category, BATTERY_DATA, 
                 which == STATS_SINCE_CHARGED ? getStartCount() : "N/A",
                 whichBatteryRealtime / 1000, whichBatteryUptime / 1000,
-                totalRealtime / 1000, totalUptime / 1000); 
+                totalRealtime / 1000, totalUptime / 1000,
+                getStartClockTime(),
+                whichBatteryScreenOffRealtime / 1000, whichBatteryScreenOffUptime / 1000);
         
-        // Calculate total network and wakelock times across all uids.
-        long mobileRxTotal = 0;
-        long mobileTxTotal = 0;
-        long wifiRxTotal = 0;
-        long wifiTxTotal = 0;
+        // Calculate wakelock times across all uids.
         long fullWakeLockTimeTotal = 0;
         long partialWakeLockTimeTotal = 0;
         
         for (int iu = 0; iu < NU; iu++) {
             Uid u = uidStats.valueAt(iu);
-            mobileRxTotal += u.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, which);
-            mobileTxTotal += u.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, which);
-            wifiRxTotal += u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, which);
-            wifiTxTotal += u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, which);
 
             Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats();
             if (wakelocks.size() > 0) {
@@ -1285,59 +1604,97 @@
                     
                     Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL);
                     if (fullWakeTimer != null) {
-                        fullWakeLockTimeTotal += fullWakeTimer.getTotalTimeLocked(batteryRealtime, which);
+                        fullWakeLockTimeTotal += fullWakeTimer.getTotalTimeLocked(rawRealtime,
+                                which);
                     }
 
                     Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL);
                     if (partialWakeTimer != null) {
                         partialWakeLockTimeTotal += partialWakeTimer.getTotalTimeLocked(
-                            batteryRealtime, which);
+                            rawRealtime, which);
                     }
                 }
             }
         }
         
+        long mobileRxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which);
+        long mobileTxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which);
+        long wifiRxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which);
+        long wifiTxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which);
+        long mobileRxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which);
+        long mobileTxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which);
+        long wifiRxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which);
+        long wifiTxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which);
+
+        // Dump network stats
+        dumpLine(pw, 0 /* uid */, category, GLOBAL_NETWORK_DATA,
+                mobileRxTotalBytes, mobileTxTotalBytes, wifiRxTotalBytes, wifiTxTotalBytes,
+                mobileRxTotalPackets, mobileTxTotalPackets, wifiRxTotalPackets, wifiTxTotalPackets);
+
         // Dump misc stats
         dumpLine(pw, 0 /* uid */, category, MISC_DATA,
                 screenOnTime / 1000, phoneOnTime / 1000, wifiOnTime / 1000,
                 wifiRunningTime / 1000, bluetoothOnTime / 1000,
-                mobileRxTotal, mobileTxTotal, wifiRxTotal, wifiTxTotal,
+                mobileRxTotalBytes, mobileTxTotalBytes, wifiRxTotalBytes, wifiTxTotalBytes,
                 fullWakeLockTimeTotal, partialWakeLockTimeTotal,
-                getInputEventCount(which));
+                getInputEventCount(which), getMobileRadioActiveTime(rawRealtime, which),
+                getMobileRadioActiveAdjustedTime(which));
         
         // Dump screen brightness stats
         Object[] args = new Object[NUM_SCREEN_BRIGHTNESS_BINS];
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
-            args[i] = getScreenBrightnessTime(i, batteryRealtime, which) / 1000;
+            args[i] = getScreenBrightnessTime(i, rawRealtime, which) / 1000;
         }
         dumpLine(pw, 0 /* uid */, category, SCREEN_BRIGHTNESS_DATA, args);
         
         // Dump signal strength stats
         args = new Object[SignalStrength.NUM_SIGNAL_STRENGTH_BINS];
         for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            args[i] = getPhoneSignalStrengthTime(i, batteryRealtime, which) / 1000;
+            args[i] = getPhoneSignalStrengthTime(i, rawRealtime, which) / 1000;
         }
         dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_TIME_DATA, args);
         dumpLine(pw, 0 /* uid */, category, SIGNAL_SCANNING_TIME_DATA,
-                getPhoneSignalScanningTime(batteryRealtime, which) / 1000);
+                getPhoneSignalScanningTime(rawRealtime, which) / 1000);
         for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
             args[i] = getPhoneSignalStrengthCount(i, which);
         }
         dumpLine(pw, 0 /* uid */, category, SIGNAL_STRENGTH_COUNT_DATA, args);
-        
+
         // Dump network type stats
         args = new Object[NUM_DATA_CONNECTION_TYPES];
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            args[i] = getPhoneDataConnectionTime(i, batteryRealtime, which) / 1000;
+            args[i] = getPhoneDataConnectionTime(i, rawRealtime, which) / 1000;
         }
         dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_TIME_DATA, args);
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
             args[i] = getPhoneDataConnectionCount(i, which);
         }
         dumpLine(pw, 0 /* uid */, category, DATA_CONNECTION_COUNT_DATA, args);
-        
+
+        // Dump wifi state stats
+        args = new Object[NUM_WIFI_STATES];
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            args[i] = getWifiStateTime(i, rawRealtime, which) / 1000;
+        }
+        dumpLine(pw, 0 /* uid */, category, WIFI_STATE_TIME_DATA, args);
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            args[i] = getWifiStateCount(i, which);
+        }
+        dumpLine(pw, 0 /* uid */, category, WIFI_STATE_COUNT_DATA, args);
+
+        // Dump bluetooth state stats
+        args = new Object[NUM_BLUETOOTH_STATES];
+        for (int i=0; i<NUM_BLUETOOTH_STATES; i++) {
+            args[i] = getBluetoothStateTime(i, rawRealtime, which) / 1000;
+        }
+        dumpLine(pw, 0 /* uid */, category, BLUETOOTH_STATE_TIME_DATA, args);
+        for (int i=0; i<NUM_BLUETOOTH_STATES; i++) {
+            args[i] = getBluetoothStateCount(i, which);
+        }
+        dumpLine(pw, 0 /* uid */, category, BLUETOOTH_STATE_COUNT_DATA, args);
+
         if (which == STATS_SINCE_UNPLUGGED) {
-            dumpLine(pw, 0 /* uid */, category, BATTERY_LEVEL_DATA, getDischargeStartLevel(), 
+            dumpLine(pw, 0 /* uid */, category, BATTERY_LEVEL_DATA, getDischargeStartLevel(),
                     getDischargeCurrentLevel());
         }
         
@@ -1353,18 +1710,79 @@
         }
         
         if (reqUid < 0) {
-            Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats();
+            Map<String, ? extends Timer> kernelWakelocks = getKernelWakelockStats();
             if (kernelWakelocks.size() > 0) {
-                for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) {
+                for (Map.Entry<String, ? extends Timer> ent : kernelWakelocks.entrySet()) {
                     sb.setLength(0);
-                    printWakeLockCheckin(sb, ent.getValue(), batteryRealtime, null, which, "");
-    
-                    dumpLine(pw, 0 /* uid */, category, KERNEL_WAKELOCK_DATA, ent.getKey(), 
+                    printWakeLockCheckin(sb, ent.getValue(), rawRealtime, null, which, "");
+                    dumpLine(pw, 0 /* uid */, category, KERNEL_WAKELOCK_DATA, ent.getKey(),
                             sb.toString());
                 }
             }
+            Map<String, ? extends LongCounter> wakeupReasons = getWakeupReasonStats();
+            if (wakeupReasons.size() > 0) {
+                for (Map.Entry<String, ? extends LongCounter> ent : wakeupReasons.entrySet()) {
+                    dumpLine(pw, 0 /* uid */, category, WAKEUP_REASON_DATA,
+                            "\"" + ent.getKey() + "\"", ent.getValue().getCountLocked(which));
+                }
+            }
         }
         
+        BatteryStatsHelper helper = new BatteryStatsHelper(context, false);
+        helper.create(this);
+        helper.refreshStats(which, UserHandle.USER_ALL);
+        List<BatterySipper> sippers = helper.getUsageList();
+        if (sippers != null && sippers.size() > 0) {
+            dumpLine(pw, 0 /* uid */, category, POWER_USE_SUMMARY_DATA,
+                    BatteryStatsHelper.makemAh(helper.getPowerProfile().getBatteryCapacity()),
+                    BatteryStatsHelper.makemAh(helper.getComputedPower()),
+                    BatteryStatsHelper.makemAh(helper.getMinDrainedPower()),
+                    BatteryStatsHelper.makemAh(helper.getMaxDrainedPower()));
+            for (int i=0; i<sippers.size(); i++) {
+                BatterySipper bs = sippers.get(i);
+                int uid = 0;
+                String label;
+                switch (bs.drainType) {
+                    case IDLE:
+                        label="idle";
+                        break;
+                    case CELL:
+                        label="cell";
+                        break;
+                    case PHONE:
+                        label="phone";
+                        break;
+                    case WIFI:
+                        label="wifi";
+                        break;
+                    case BLUETOOTH:
+                        label="blue";
+                        break;
+                    case SCREEN:
+                        label="scrn";
+                        break;
+                    case APP:
+                        uid = bs.uidObj.getUid();
+                        label = "uid";
+                        break;
+                    case USER:
+                        uid = UserHandle.getUid(bs.userId, 0);
+                        label = "user";
+                        break;
+                    case UNACCOUNTED:
+                        label = "unacc";
+                        break;
+                    case OVERCOUNTED:
+                        label = "over";
+                        break;
+                    default:
+                        label = "???";
+                }
+                dumpLine(pw, uid, category, POWER_USE_ITEM_DATA, label,
+                        BatteryStatsHelper.makemAh(bs.value));
+            }
+        }
+
         for (int iu = 0; iu < NU; iu++) {
             final int uid = uidStats.keyAt(iu);
             if (reqUid >= 0 && uid != reqUid) {
@@ -1372,16 +1790,28 @@
             }
             Uid u = uidStats.valueAt(iu);
             // Dump Network stats per uid, if any
-            long mobileRx = u.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, which);
-            long mobileTx = u.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, which);
-            long wifiRx = u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, which);
-            long wifiTx = u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, which);
-            long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which);
-            long wifiScanTime = u.getWifiScanTime(batteryRealtime, which);
-            long uidWifiRunningTime = u.getWifiRunningTime(batteryRealtime, which);
+            long mobileBytesRx = u.getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which);
+            long mobileBytesTx = u.getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which);
+            long wifiBytesRx = u.getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which);
+            long wifiBytesTx = u.getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which);
+            long mobilePacketsRx = u.getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which);
+            long mobilePacketsTx = u.getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which);
+            long mobileActiveTime = u.getMobileRadioActiveTime(which);
+            int mobileActiveCount = u.getMobileRadioActiveCount(which);
+            long wifiPacketsRx = u.getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which);
+            long wifiPacketsTx = u.getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which);
+            long fullWifiLockOnTime = u.getFullWifiLockTime(rawRealtime, which);
+            long wifiScanTime = u.getWifiScanTime(rawRealtime, which);
+            long uidWifiRunningTime = u.getWifiRunningTime(rawRealtime, which);
 
-            if (mobileRx > 0 || mobileTx > 0 || wifiRx > 0 || wifiTx > 0) {
-                dumpLine(pw, uid, category, NETWORK_DATA, mobileRx, mobileTx, wifiRx, wifiTx);
+            if (mobileBytesRx > 0 || mobileBytesTx > 0 || wifiBytesRx > 0 || wifiBytesTx > 0
+                    || mobilePacketsRx > 0 || mobilePacketsTx > 0 || wifiPacketsRx > 0
+                    || wifiPacketsTx > 0 || mobileActiveTime > 0 || mobileActiveCount > 0) {
+                dumpLine(pw, uid, category, NETWORK_DATA, mobileBytesRx, mobileBytesTx,
+                        wifiBytesRx, wifiBytesTx,
+                        mobilePacketsRx, mobilePacketsTx,
+                        wifiPacketsRx, wifiPacketsTx,
+                        mobileActiveTime, mobileActiveCount);
             }
 
             if (fullWifiLockOnTime != 0 || wifiScanTime != 0
@@ -1411,11 +1841,11 @@
                     String linePrefix = "";
                     sb.setLength(0);
                     linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_FULL), 
-                            batteryRealtime, "f", which, linePrefix);
+                            rawRealtime, "f", which, linePrefix);
                     linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), 
-                            batteryRealtime, "p", which, linePrefix);
+                            rawRealtime, "p", which, linePrefix);
                     linePrefix = printWakeLockCheckin(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), 
-                            batteryRealtime, "w", which, linePrefix);
+                            rawRealtime, "w", which, linePrefix);
                     
                     // Only log if we had at lease one wakelock...
                     if (sb.length() > 0) {
@@ -1437,7 +1867,7 @@
                     Timer timer = se.getSensorTime();
                     if (timer != null) {
                         // Convert from microseconds to milliseconds with rounding
-                        long totalTime = (timer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000;
+                        long totalTime = (timer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000;
                         int count = timer.getCountLocked(which);
                         if (totalTime != 0) {
                             dumpLine(pw, uid, category, SENSOR_DATA, sensorNumber, totalTime, count);
@@ -1449,7 +1879,7 @@
             Timer vibTimer = u.getVibratorOnTimer();
             if (vibTimer != null) {
                 // Convert from microseconds to milliseconds with rounding
-                long totalTime = (vibTimer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000;
+                long totalTime = (vibTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000;
                 int count = vibTimer.getCountLocked(which);
                 if (totalTime != 0) {
                     dumpLine(pw, uid, category, VIBRATOR_DATA, totalTime, count);
@@ -1459,7 +1889,7 @@
             Timer fgTimer = u.getForegroundActivityTimer();
             if (fgTimer != null) {
                 // Convert from microseconds to milliseconds with rounding
-                long totalTime = (fgTimer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000;
+                long totalTime = (fgTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000;
                 int count = fgTimer.getCountLocked(which);
                 if (totalTime != 0) {
                     dumpLine(pw, uid, category, FOREGROUND_DATA, totalTime, count);
@@ -1527,18 +1957,27 @@
         }
     }
 
+    private void printmAh(PrintWriter printer, double power) {
+        printer.print(BatteryStatsHelper.makemAh(power));
+    }
+
     @SuppressWarnings("unused")
-    public final void dumpLocked(PrintWriter pw, String prefix, final int which, int reqUid) {
+    public final void dumpLocked(Context context, PrintWriter pw, String prefix, final int which,
+            int reqUid) {
         final long rawUptime = SystemClock.uptimeMillis() * 1000;
         final long rawRealtime = SystemClock.elapsedRealtime() * 1000;
         final long batteryUptime = getBatteryUptime(rawUptime);
-        final long batteryRealtime = getBatteryRealtime(rawRealtime);
 
         final long whichBatteryUptime = computeBatteryUptime(rawUptime, which);
         final long whichBatteryRealtime = computeBatteryRealtime(rawRealtime, which);
         final long totalRealtime = computeRealtime(rawRealtime, which);
         final long totalUptime = computeUptime(rawUptime, which);
-        
+        final long whichBatteryScreenOffUptime = computeBatteryScreenOffUptime(rawUptime, which);
+        final long whichBatteryScreenOffRealtime = computeBatteryScreenOffRealtime(rawRealtime,
+                which);
+        final long batteryTimeRemaining = computeBatteryTimeRemaining(rawRealtime);
+        final long chargeTimeRemaining = computeChargeTimeRemaining(rawRealtime);
+
         StringBuilder sb = new StringBuilder(128);
         
         SparseArray<? extends Uid> uidStats = getUidStats();
@@ -1556,37 +1995,69 @@
         pw.println(sb.toString());
         sb.setLength(0);
         sb.append(prefix);
+                sb.append("  Time on battery screen off: ");
+                formatTimeMs(sb, whichBatteryScreenOffRealtime / 1000); sb.append("(");
+                sb.append(formatRatioLocked(whichBatteryScreenOffRealtime, totalRealtime));
+                sb.append(") realtime, ");
+                formatTimeMs(sb, whichBatteryScreenOffUptime / 1000);
+                sb.append("(");
+                sb.append(formatRatioLocked(whichBatteryScreenOffUptime, totalRealtime));
+                sb.append(") uptime");
+        pw.println(sb.toString());
+        sb.setLength(0);
+        sb.append(prefix);
                 sb.append("  Total run time: ");
                 formatTimeMs(sb, totalRealtime / 1000);
                 sb.append("realtime, ");
                 formatTimeMs(sb, totalUptime / 1000);
-                sb.append("uptime, ");
-        pw.println(sb.toString());
-        
-        final long screenOnTime = getScreenOnTime(batteryRealtime, which);
-        final long phoneOnTime = getPhoneOnTime(batteryRealtime, which);
-        final long wifiRunningTime = getGlobalWifiRunningTime(batteryRealtime, which);
-        final long wifiOnTime = getWifiOnTime(batteryRealtime, which);
-        final long bluetoothOnTime = getBluetoothOnTime(batteryRealtime, which);
+                sb.append("uptime");
+        if (batteryTimeRemaining >= 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("  Battery time remaining: ");
+                    formatTimeMs(sb, batteryTimeRemaining / 1000);
+            pw.println(sb.toString());
+        }
+        if (chargeTimeRemaining >= 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("  Charge time remaining: ");
+                    formatTimeMs(sb, chargeTimeRemaining / 1000);
+            pw.println(sb.toString());
+        }
+        pw.print("  Start clock time: ");
+        pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss", getStartClockTime()).toString());
+
+        final long screenOnTime = getScreenOnTime(rawRealtime, which);
+        final long phoneOnTime = getPhoneOnTime(rawRealtime, which);
+        final long wifiRunningTime = getGlobalWifiRunningTime(rawRealtime, which);
+        final long wifiOnTime = getWifiOnTime(rawRealtime, which);
+        final long bluetoothOnTime = getBluetoothOnTime(rawRealtime, which);
         sb.setLength(0);
         sb.append(prefix);
                 sb.append("  Screen on: "); formatTimeMs(sb, screenOnTime / 1000);
                 sb.append("("); sb.append(formatRatioLocked(screenOnTime, whichBatteryRealtime));
-                sb.append("), Input events: "); sb.append(getInputEventCount(which));
-                sb.append(", Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000);
-                sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime));
-                sb.append(")");
+                sb.append(") "); sb.append(getScreenOnCount(which));
+                sb.append("x, Input events: "); sb.append(getInputEventCount(which));
         pw.println(sb.toString());
+        if (phoneOnTime != 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("  Active phone call: "); formatTimeMs(sb, phoneOnTime / 1000);
+                    sb.append("("); sb.append(formatRatioLocked(phoneOnTime, whichBatteryRealtime));
+                    sb.append(") "); sb.append(getPhoneOnCount(which));
+        }
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Screen brightnesses: ");
+        sb.append("  Screen brightnesses:");
         boolean didOne = false;
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
-            final long time = getScreenBrightnessTime(i, batteryRealtime, which);
+            final long time = getScreenBrightnessTime(i, rawRealtime, which);
             if (time == 0) {
                 continue;
             }
-            if (didOne) sb.append(", ");
+            sb.append("\n    ");
+            sb.append(prefix);
             didOne = true;
             sb.append(SCREEN_BRIGHTNESS_NAMES[i]);
             sb.append(" ");
@@ -1595,70 +2066,17 @@
             sb.append(formatRatioLocked(time, screenOnTime));
             sb.append(")");
         }
-        if (!didOne) sb.append("No activity");
+        if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
         
-        // Calculate total network and wakelock times across all uids.
-        long mobileRxTotal = 0;
-        long mobileTxTotal = 0;
-        long wifiRxTotal = 0;
-        long wifiTxTotal = 0;
+        // Calculate wakelock times across all uids.
         long fullWakeLockTimeTotalMicros = 0;
         long partialWakeLockTimeTotalMicros = 0;
 
-        final Comparator<TimerEntry> timerComparator = new Comparator<TimerEntry>() {
-            @Override
-            public int compare(TimerEntry lhs, TimerEntry rhs) {
-                long lhsTime = lhs.mTime;
-                long rhsTime = rhs.mTime;
-                if (lhsTime < rhsTime) {
-                    return 1;
-                }
-                if (lhsTime > rhsTime) {
-                    return -1;
-                }
-                return 0;
-            }
-        };
-
-        if (reqUid < 0) {
-            Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats();
-            if (kernelWakelocks.size() > 0) {
-                final ArrayList<TimerEntry> timers = new ArrayList<TimerEntry>();
-                for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) {
-                    BatteryStats.Timer timer = ent.getValue();
-                    long totalTimeMillis = computeWakeLock(timer, batteryRealtime, which);
-                    if (totalTimeMillis > 0) {
-                        timers.add(new TimerEntry(ent.getKey(), 0, timer, totalTimeMillis));
-                    }
-                }
-                Collections.sort(timers, timerComparator);
-                for (int i=0; i<timers.size(); i++) {
-                    TimerEntry timer = timers.get(i);
-                    String linePrefix = ": ";
-                    sb.setLength(0);
-                    sb.append(prefix);
-                    sb.append("  Kernel Wake lock ");
-                    sb.append(timer.mName);
-                    linePrefix = printWakeLock(sb, timer.mTimer, batteryRealtime, null,
-                            which, linePrefix);
-                    if (!linePrefix.equals(": ")) {
-                        sb.append(" realtime");
-                        // Only print out wake locks that were held
-                        pw.println(sb.toString());
-                    }
-                }
-            }
-        }
-
         final ArrayList<TimerEntry> timers = new ArrayList<TimerEntry>();
 
         for (int iu = 0; iu < NU; iu++) {
             Uid u = uidStats.valueAt(iu);
-            mobileRxTotal += u.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, which);
-            mobileTxTotal += u.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, which);
-            wifiRxTotal += u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, which);
-            wifiTxTotal += u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, which);
 
             Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats();
             if (wakelocks.size() > 0) {
@@ -1669,13 +2087,13 @@
                     Timer fullWakeTimer = wl.getWakeTime(WAKE_TYPE_FULL);
                     if (fullWakeTimer != null) {
                         fullWakeLockTimeTotalMicros += fullWakeTimer.getTotalTimeLocked(
-                                batteryRealtime, which);
+                                rawRealtime, which);
                     }
 
                     Timer partialWakeTimer = wl.getWakeTime(WAKE_TYPE_PARTIAL);
                     if (partialWakeTimer != null) {
                         long totalTimeMicros = partialWakeTimer.getTotalTimeLocked(
-                                batteryRealtime, which);
+                                rawRealtime, which);
                         if (totalTimeMicros > 0) {
                             if (reqUid < 0) {
                                 // Only show the ordered list of all wake
@@ -1691,30 +2109,47 @@
             }
         }
         
+        long mobileRxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which);
+        long mobileTxTotalBytes = getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which);
+        long wifiRxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which);
+        long wifiTxTotalBytes = getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which);
+        long mobileRxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which);
+        long mobileTxTotalPackets = getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which);
+        long wifiRxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which);
+        long wifiTxTotalPackets = getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which);
+
+        if (fullWakeLockTimeTotalMicros != 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("  Total full wakelock time: "); formatTimeMsNoSpace(sb,
+                            (fullWakeLockTimeTotalMicros + 500) / 1000);
+            pw.println(sb.toString());
+        }
+
+        if (partialWakeLockTimeTotalMicros != 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("  Total partial wakelock time: "); formatTimeMsNoSpace(sb,
+                            (partialWakeLockTimeTotalMicros + 500) / 1000);
+            pw.println(sb.toString());
+        }
+
         pw.print(prefix);
-                pw.print("  Mobile total received: "); pw.print(formatBytesLocked(mobileRxTotal));
-                pw.print(", Total sent: "); pw.println(formatBytesLocked(mobileTxTotal));
-        pw.print(prefix);
-                pw.print("  Wi-Fi total received: "); pw.print(formatBytesLocked(wifiRxTotal));
-                pw.print(", Total sent: "); pw.println(formatBytesLocked(wifiTxTotal));
+                pw.print("  Mobile total received: "); pw.print(formatBytesLocked(mobileRxTotalBytes));
+                pw.print(", sent: "); pw.print(formatBytesLocked(mobileTxTotalBytes));
+                pw.print(" (packets received "); pw.print(mobileRxTotalPackets);
+                pw.print(", sent "); pw.print(mobileTxTotalPackets); pw.println(")");
         sb.setLength(0);
         sb.append(prefix);
-                sb.append("  Total full wakelock time: "); formatTimeMs(sb,
-                        (fullWakeLockTimeTotalMicros + 500) / 1000);
-                sb.append(", Total partial wakelock time: "); formatTimeMs(sb,
-                        (partialWakeLockTimeTotalMicros + 500) / 1000);
-        pw.println(sb.toString());
-        
-        sb.setLength(0);
-        sb.append(prefix);
-        sb.append("  Signal levels: ");
+        sb.append("  Signal levels:");
         didOne = false;
         for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            final long time = getPhoneSignalStrengthTime(i, batteryRealtime, which);
+            final long time = getPhoneSignalStrengthTime(i, rawRealtime, which);
             if (time == 0) {
                 continue;
             }
-            if (didOne) sb.append(", ");
+            sb.append("\n    ");
+            sb.append(prefix);
             didOne = true;
             sb.append(SignalStrength.SIGNAL_STRENGTH_NAMES[i]);
             sb.append(" ");
@@ -1725,25 +2160,26 @@
             sb.append(getPhoneSignalStrengthCount(i, which));
             sb.append("x");
         }
-        if (!didOne) sb.append("No activity");
+        if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
         sb.append("  Signal scanning time: ");
-        formatTimeMs(sb, getPhoneSignalScanningTime(batteryRealtime, which) / 1000);
+        formatTimeMsNoSpace(sb, getPhoneSignalScanningTime(rawRealtime, which) / 1000);
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Radio types: ");
+        sb.append("  Radio types:");
         didOne = false;
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            final long time = getPhoneDataConnectionTime(i, batteryRealtime, which);
+            final long time = getPhoneDataConnectionTime(i, rawRealtime, which);
             if (time == 0) {
                 continue;
             }
-            if (didOne) sb.append(", ");
+            sb.append("\n    ");
+            sb.append(prefix);
             didOne = true;
             sb.append(DATA_CONNECTION_NAMES[i]);
             sb.append(" ");
@@ -1754,28 +2190,112 @@
             sb.append(getPhoneDataConnectionCount(i, which));
             sb.append("x");
         }
-        if (!didOne) sb.append("No activity");
+        if (!didOne) sb.append(" (no activity)");
         pw.println(sb.toString());
 
         sb.setLength(0);
         sb.append(prefix);
-        sb.append("  Radio data uptime when unplugged: ");
-        sb.append(getRadioDataUptime() / 1000);
-        sb.append(" ms");
+        sb.append("  Mobile radio active time: ");
+        final long mobileActiveTime = getMobileRadioActiveTime(rawRealtime, which);
+        formatTimeMs(sb, mobileActiveTime / 1000);
+        sb.append("("); sb.append(formatRatioLocked(mobileActiveTime, whichBatteryRealtime));
+        sb.append(") "); sb.append(getMobileRadioActiveCount(which));
+        sb.append("x");
         pw.println(sb.toString());
 
+        final long mobileActiveUnknownTime = getMobileRadioActiveUnknownTime(which);
+        if (mobileActiveUnknownTime != 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+            sb.append("  Mobile radio active unknown time: ");
+            formatTimeMs(sb, mobileActiveUnknownTime / 1000);
+            sb.append("(");
+            sb.append(formatRatioLocked(mobileActiveUnknownTime, whichBatteryRealtime));
+            sb.append(") "); sb.append(getMobileRadioActiveUnknownCount(which));
+            sb.append("x");
+            pw.println(sb.toString());
+        }
+
+        final long mobileActiveAdjustedTime = getMobileRadioActiveAdjustedTime(which);
+        if (mobileActiveAdjustedTime != 0) {
+            sb.setLength(0);
+            sb.append(prefix);
+            sb.append("  Mobile radio active adjusted time: ");
+            formatTimeMs(sb, mobileActiveAdjustedTime / 1000);
+            sb.append("(");
+            sb.append(formatRatioLocked(mobileActiveAdjustedTime, whichBatteryRealtime));
+            sb.append(")");
+            pw.println(sb.toString());
+        }
+
+        pw.print(prefix);
+                pw.print("  Wi-Fi total received: "); pw.print(formatBytesLocked(wifiRxTotalBytes));
+                pw.print(", sent: "); pw.print(formatBytesLocked(wifiTxTotalBytes));
+                pw.print(" (packets received "); pw.print(wifiRxTotalPackets);
+                pw.print(", sent "); pw.print(wifiTxTotalPackets); pw.println(")");
         sb.setLength(0);
         sb.append(prefix);
                 sb.append("  Wifi on: "); formatTimeMs(sb, wifiOnTime / 1000);
                 sb.append("("); sb.append(formatRatioLocked(wifiOnTime, whichBatteryRealtime));
                 sb.append("), Wifi running: "); formatTimeMs(sb, wifiRunningTime / 1000);
                 sb.append("("); sb.append(formatRatioLocked(wifiRunningTime, whichBatteryRealtime));
-                sb.append("), Bluetooth on: "); formatTimeMs(sb, bluetoothOnTime / 1000);
+                sb.append(")");
+        pw.println(sb.toString());
+
+        sb.setLength(0);
+        sb.append(prefix);
+        sb.append("  Wifi states:");
+        didOne = false;
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            final long time = getWifiStateTime(i, rawRealtime, which);
+            if (time == 0) {
+                continue;
+            }
+            sb.append("\n    ");
+            didOne = true;
+            sb.append(WIFI_STATE_NAMES[i]);
+            sb.append(" ");
+            formatTimeMs(sb, time/1000);
+            sb.append("(");
+            sb.append(formatRatioLocked(time, whichBatteryRealtime));
+            sb.append(") ");
+            sb.append(getPhoneDataConnectionCount(i, which));
+            sb.append("x");
+        }
+        if (!didOne) sb.append(" (no activity)");
+        pw.println(sb.toString());
+
+        sb.setLength(0);
+        sb.append(prefix);
+                sb.append("  Bluetooth on: "); formatTimeMs(sb, bluetoothOnTime / 1000);
                 sb.append("("); sb.append(formatRatioLocked(bluetoothOnTime, whichBatteryRealtime));
                 sb.append(")");
         pw.println(sb.toString());
-        
-        pw.println(" ");
+
+        sb.setLength(0);
+        sb.append(prefix);
+        sb.append("  Bluetooth states:");
+        didOne = false;
+        for (int i=0; i<NUM_BLUETOOTH_STATES; i++) {
+            final long time = getBluetoothStateTime(i, rawRealtime, which);
+            if (time == 0) {
+                continue;
+            }
+            sb.append("\n    ");
+            didOne = true;
+            sb.append(BLUETOOTH_STATE_NAMES[i]);
+            sb.append(" ");
+            formatTimeMs(sb, time/1000);
+            sb.append("(");
+            sb.append(formatRatioLocked(time, whichBatteryRealtime));
+            sb.append(") ");
+            sb.append(getPhoneDataConnectionCount(i, which));
+            sb.append("x");
+        }
+        if (!didOne) sb.append(" (no activity)");
+        pw.println(sb.toString());
+
+        pw.println();
 
         if (which == STATS_SINCE_UNPLUGGED) {
             if (getIsOnBattery()) {
@@ -1809,24 +2329,185 @@
             pw.println();
         }
 
-        if (timers.size() > 0) {
-            Collections.sort(timers, timerComparator);
-            pw.print(prefix); pw.println("  All partial wake locks:");
-            for (int i=0; i<timers.size(); i++) {
-                TimerEntry timer = timers.get(i);
-                sb.setLength(0);
-                sb.append("  Wake lock ");
-                UserHandle.formatUid(sb, timer.mId);
-                sb.append(" ");
-                sb.append(timer.mName);
-                printWakeLock(sb, timer.mTimer, batteryRealtime, null, which, ": ");
-                sb.append(" realtime");
-                pw.println(sb.toString());
+        BatteryStatsHelper helper = new BatteryStatsHelper(context, false);
+        helper.create(this);
+        helper.refreshStats(which, UserHandle.USER_ALL);
+        List<BatterySipper> sippers = helper.getUsageList();
+        if (sippers != null && sippers.size() > 0) {
+            pw.print(prefix); pw.println("  Estimated power use (mAh):");
+            pw.print(prefix); pw.print("    Capacity: ");
+                    printmAh(pw, helper.getPowerProfile().getBatteryCapacity());
+                    pw.print(", Computed drain: "); printmAh(pw, helper.getComputedPower());
+                    pw.print(", Min drain: "); printmAh(pw, helper.getMinDrainedPower());
+                    pw.print(", Max drain: "); printmAh(pw, helper.getMaxDrainedPower());
+                    pw.println();
+            for (int i=0; i<sippers.size(); i++) {
+                BatterySipper bs = sippers.get(i);
+                switch (bs.drainType) {
+                    case IDLE:
+                        pw.print(prefix); pw.print("    Idle: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                    case CELL:
+                        pw.print(prefix); pw.print("    Cell standby: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                    case PHONE:
+                        pw.print(prefix); pw.print("    Phone calls: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                    case WIFI:
+                        pw.print(prefix); pw.print("    Wifi: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                    case BLUETOOTH:
+                        pw.print(prefix); pw.print("    Bluetooth: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                    case SCREEN:
+                        pw.print(prefix); pw.print("    Screen: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                    case APP:
+                        pw.print(prefix); pw.print("    Uid ");
+                        UserHandle.formatUid(pw, bs.uidObj.getUid());
+                        pw.print(": "); printmAh(pw, bs.value); pw.println();
+                        break;
+                    case USER:
+                        pw.print(prefix); pw.print("    User "); pw.print(bs.userId);
+                        pw.print(": "); printmAh(pw, bs.value); pw.println();
+                        break;
+                    case UNACCOUNTED:
+                        pw.print(prefix); pw.print("    Unaccounted: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                    case OVERCOUNTED:
+                        pw.print(prefix); pw.print("    Over-counted: "); printmAh(pw, bs.value);
+                        pw.println();
+                        break;
+                }
             }
-            timers.clear();
             pw.println();
         }
 
+        sippers = helper.getMobilemsppList();
+        if (sippers != null && sippers.size() > 0) {
+            pw.print(prefix); pw.println("  Per-app mobile ms per packet:");
+            long totalTime = 0;
+            for (int i=0; i<sippers.size(); i++) {
+                BatterySipper bs = sippers.get(i);
+                sb.setLength(0);
+                sb.append(prefix); sb.append("    Uid ");
+                UserHandle.formatUid(sb, bs.uidObj.getUid());
+                sb.append(": "); sb.append(BatteryStatsHelper.makemAh(bs.mobilemspp));
+                sb.append(" ("); sb.append(bs.mobileRxPackets+bs.mobileTxPackets);
+                sb.append(" packets over "); formatTimeMsNoSpace(sb, bs.mobileActive);
+                sb.append(") "); sb.append(bs.mobileActiveCount); sb.append("x");
+                pw.println(sb.toString());
+                totalTime += bs.mobileActive;
+            }
+            sb.setLength(0);
+            sb.append(prefix);
+            sb.append("    TOTAL TIME: ");
+            formatTimeMs(sb, totalTime);
+            sb.append("("); sb.append(formatRatioLocked(totalTime, whichBatteryRealtime));
+            sb.append(")");
+            pw.println(sb.toString());
+            pw.println();
+        }
+
+        final Comparator<TimerEntry> timerComparator = new Comparator<TimerEntry>() {
+            @Override
+            public int compare(TimerEntry lhs, TimerEntry rhs) {
+                long lhsTime = lhs.mTime;
+                long rhsTime = rhs.mTime;
+                if (lhsTime < rhsTime) {
+                    return 1;
+                }
+                if (lhsTime > rhsTime) {
+                    return -1;
+                }
+                return 0;
+            }
+        };
+
+        if (reqUid < 0) {
+            Map<String, ? extends BatteryStats.Timer> kernelWakelocks = getKernelWakelockStats();
+            if (kernelWakelocks.size() > 0) {
+                final ArrayList<TimerEntry> ktimers = new ArrayList<TimerEntry>();
+                for (Map.Entry<String, ? extends BatteryStats.Timer> ent : kernelWakelocks.entrySet()) {
+                    BatteryStats.Timer timer = ent.getValue();
+                    long totalTimeMillis = computeWakeLock(timer, rawRealtime, which);
+                    if (totalTimeMillis > 0) {
+                        ktimers.add(new TimerEntry(ent.getKey(), 0, timer, totalTimeMillis));
+                    }
+                }
+                if (ktimers.size() > 0) {
+                    Collections.sort(ktimers, timerComparator);
+                    pw.print(prefix); pw.println("  All kernel wake locks:");
+                    for (int i=0; i<ktimers.size(); i++) {
+                        TimerEntry timer = ktimers.get(i);
+                        String linePrefix = ": ";
+                        sb.setLength(0);
+                        sb.append(prefix);
+                        sb.append("  Kernel Wake lock ");
+                        sb.append(timer.mName);
+                        linePrefix = printWakeLock(sb, timer.mTimer, rawRealtime, null,
+                                which, linePrefix);
+                        if (!linePrefix.equals(": ")) {
+                            sb.append(" realtime");
+                            // Only print out wake locks that were held
+                            pw.println(sb.toString());
+                        }
+                    }
+                    pw.println();
+                }
+            }
+
+            if (timers.size() > 0) {
+                Collections.sort(timers, timerComparator);
+                pw.print(prefix); pw.println("  All partial wake locks:");
+                for (int i=0; i<timers.size(); i++) {
+                    TimerEntry timer = timers.get(i);
+                    sb.setLength(0);
+                    sb.append("  Wake lock ");
+                    UserHandle.formatUid(sb, timer.mId);
+                    sb.append(" ");
+                    sb.append(timer.mName);
+                    printWakeLock(sb, timer.mTimer, rawRealtime, null, which, ": ");
+                    sb.append(" realtime");
+                    pw.println(sb.toString());
+                }
+                timers.clear();
+                pw.println();
+            }
+
+            Map<String, ? extends LongCounter> wakeupReasons = getWakeupReasonStats();
+            if (wakeupReasons.size() > 0) {
+                pw.print(prefix); pw.println("  All wakeup reasons:");
+                final ArrayList<TimerEntry> reasons = new ArrayList<TimerEntry>();
+                for (Map.Entry<String, ? extends LongCounter> ent : wakeupReasons.entrySet()) {
+                    BatteryStats.LongCounter counter = ent.getValue();
+                    reasons.add(new TimerEntry(ent.getKey(), 0, null,
+                            ent.getValue().getCountLocked(which)));
+                }
+                Collections.sort(reasons, timerComparator);
+                for (int i=0; i<reasons.size(); i++) {
+                    TimerEntry timer = reasons.get(i);
+                    String linePrefix = ": ";
+                    sb.setLength(0);
+                    sb.append(prefix);
+                    sb.append("  Wakeup reason ");
+                    sb.append(timer.mName);
+                    sb.append(": ");
+                    formatTimeMs(sb, timer.mTime);
+                    sb.append("realtime");
+                    pw.println(sb.toString());
+                }
+                pw.println();
+            }
+        }
+
         for (int iu=0; iu<NU; iu++) {
             final int uid = uidStats.keyAt(iu);
             if (reqUid >= 0 && uid != reqUid && uid != Process.SYSTEM_UID) {
@@ -1840,24 +2521,70 @@
             UserHandle.formatUid(pw, uid);
             pw.println(":");
             boolean uidActivity = false;
-            
-            long mobileRxBytes = u.getNetworkActivityCount(NETWORK_MOBILE_RX_BYTES, which);
-            long mobileTxBytes = u.getNetworkActivityCount(NETWORK_MOBILE_TX_BYTES, which);
-            long wifiRxBytes = u.getNetworkActivityCount(NETWORK_WIFI_RX_BYTES, which);
-            long wifiTxBytes = u.getNetworkActivityCount(NETWORK_WIFI_TX_BYTES, which);
-            long fullWifiLockOnTime = u.getFullWifiLockTime(batteryRealtime, which);
-            long wifiScanTime = u.getWifiScanTime(batteryRealtime, which);
-            long uidWifiRunningTime = u.getWifiRunningTime(batteryRealtime, which);
 
-            if (mobileRxBytes > 0 || mobileTxBytes > 0) {
+            long mobileRxBytes = u.getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, which);
+            long mobileTxBytes = u.getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, which);
+            long wifiRxBytes = u.getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, which);
+            long wifiTxBytes = u.getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, which);
+            long mobileRxPackets = u.getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, which);
+            long mobileTxPackets = u.getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, which);
+            long uidMobileActiveTime = u.getMobileRadioActiveTime(which);
+            int uidMobileActiveCount = u.getMobileRadioActiveCount(which);
+            long wifiRxPackets = u.getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, which);
+            long wifiTxPackets = u.getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, which);
+            long fullWifiLockOnTime = u.getFullWifiLockTime(rawRealtime, which);
+            long wifiScanTime = u.getWifiScanTime(rawRealtime, which);
+            long uidWifiRunningTime = u.getWifiRunningTime(rawRealtime, which);
+
+            if (mobileRxBytes > 0 || mobileTxBytes > 0
+                    || mobileRxPackets > 0 || mobileTxPackets > 0) {
                 pw.print(prefix); pw.print("    Mobile network: ");
                         pw.print(formatBytesLocked(mobileRxBytes)); pw.print(" received, ");
-                        pw.print(formatBytesLocked(mobileTxBytes)); pw.println(" sent");
+                        pw.print(formatBytesLocked(mobileTxBytes));
+                        pw.print(" sent (packets "); pw.print(mobileRxPackets);
+                        pw.print(" received, "); pw.print(mobileTxPackets); pw.println(" sent)");
             }
-            if (wifiRxBytes > 0 || wifiTxBytes > 0) {
+            if (uidMobileActiveTime > 0 || uidMobileActiveCount > 0) {
+                sb.setLength(0);
+                sb.append(prefix); sb.append("    Mobile radio active: ");
+                formatTimeMs(sb, uidMobileActiveTime / 1000);
+                sb.append("(");
+                sb.append(formatRatioLocked(uidMobileActiveTime, mobileActiveTime));
+                sb.append(") "); sb.append(uidMobileActiveCount); sb.append("x");
+                long packets = mobileRxPackets + mobileTxPackets;
+                if (packets == 0) {
+                    packets = 1;
+                }
+                sb.append(" @ ");
+                sb.append(BatteryStatsHelper.makemAh(uidMobileActiveTime / 1000 / (double)packets));
+                sb.append(" mspp");
+                pw.println(sb.toString());
+            }
+
+            if (wifiRxBytes > 0 || wifiTxBytes > 0 || wifiRxPackets > 0 || wifiTxPackets > 0) {
                 pw.print(prefix); pw.print("    Wi-Fi network: ");
                         pw.print(formatBytesLocked(wifiRxBytes)); pw.print(" received, ");
-                        pw.print(formatBytesLocked(wifiTxBytes)); pw.println(" sent");
+                        pw.print(formatBytesLocked(wifiTxBytes));
+                        pw.print(" sent (packets "); pw.print(wifiRxPackets);
+                        pw.print(" received, "); pw.print(wifiTxPackets); pw.println(" sent)");
+            }
+
+            if (fullWifiLockOnTime != 0 || wifiScanTime != 0
+                    || uidWifiRunningTime != 0) {
+                sb.setLength(0);
+                sb.append(prefix); sb.append("    Wifi Running: ");
+                        formatTimeMs(sb, uidWifiRunningTime / 1000);
+                        sb.append("("); sb.append(formatRatioLocked(uidWifiRunningTime,
+                                whichBatteryRealtime)); sb.append(")\n");
+                sb.append(prefix); sb.append("    Full Wifi Lock: "); 
+                        formatTimeMs(sb, fullWifiLockOnTime / 1000);
+                        sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime,
+                                whichBatteryRealtime)); sb.append(")\n");
+                sb.append(prefix); sb.append("    Wifi Scan: ");
+                        formatTimeMs(sb, wifiScanTime / 1000);
+                        sb.append("("); sb.append(formatRatioLocked(wifiScanTime,
+                                whichBatteryRealtime)); sb.append(")");
+                pw.println(sb.toString());
             }
 
             if (u.hasUserActivity()) {
@@ -1881,24 +2608,6 @@
                     pw.println(sb.toString());
                 }
             }
-            
-            if (fullWifiLockOnTime != 0 || wifiScanTime != 0
-                    || uidWifiRunningTime != 0) {
-                sb.setLength(0);
-                sb.append(prefix); sb.append("    Wifi Running: ");
-                        formatTimeMs(sb, uidWifiRunningTime / 1000);
-                        sb.append("("); sb.append(formatRatioLocked(uidWifiRunningTime,
-                                whichBatteryRealtime)); sb.append(")\n");
-                sb.append(prefix); sb.append("    Full Wifi Lock: "); 
-                        formatTimeMs(sb, fullWifiLockOnTime / 1000);
-                        sb.append("("); sb.append(formatRatioLocked(fullWifiLockOnTime,
-                                whichBatteryRealtime)); sb.append(")\n");
-                sb.append(prefix); sb.append("    Wifi Scan: ");
-                        formatTimeMs(sb, wifiScanTime / 1000);
-                        sb.append("("); sb.append(formatRatioLocked(wifiScanTime,
-                                whichBatteryRealtime)); sb.append(")");
-                pw.println(sb.toString());
-            }
 
             Map<String, ? extends BatteryStats.Uid.Wakelock> wakelocks = u.getWakelockStats();
             if (wakelocks.size() > 0) {
@@ -1912,11 +2621,11 @@
                     sb.append(prefix);
                     sb.append("    Wake lock ");
                     sb.append(ent.getKey());
-                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), batteryRealtime,
+                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_FULL), rawRealtime,
                             "full", which, linePrefix);
-                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), batteryRealtime,
+                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_PARTIAL), rawRealtime,
                             "partial", which, linePrefix);
-                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), batteryRealtime,
+                    linePrefix = printWakeLock(sb, wl.getWakeTime(WAKE_TYPE_WINDOW), rawRealtime,
                             "window", which, linePrefix);
                     if (!linePrefix.equals(": ")) {
                         sb.append(" realtime");
@@ -1926,11 +2635,11 @@
                         count++;
                     }
                     totalFull += computeWakeLock(wl.getWakeTime(WAKE_TYPE_FULL),
-                            batteryRealtime, which);
+                            rawRealtime, which);
                     totalPartial += computeWakeLock(wl.getWakeTime(WAKE_TYPE_PARTIAL),
-                            batteryRealtime, which);
+                            rawRealtime, which);
                     totalWindow += computeWakeLock(wl.getWakeTime(WAKE_TYPE_WINDOW),
-                            batteryRealtime, which);
+                            rawRealtime, which);
                 }
                 if (count > 1) {
                     if (totalFull != 0 || totalPartial != 0 || totalWindow != 0) {
@@ -1986,7 +2695,7 @@
                     if (timer != null) {
                         // Convert from microseconds to milliseconds with rounding
                         long totalTime = (timer.getTotalTimeLocked(
-                                batteryRealtime, which) + 500) / 1000;
+                                rawRealtime, which) + 500) / 1000;
                         int count = timer.getCountLocked(which);
                         //timer.logState();
                         if (totalTime != 0) {
@@ -2010,7 +2719,7 @@
             if (vibTimer != null) {
                 // Convert from microseconds to milliseconds with rounding
                 long totalTime = (vibTimer.getTotalTimeLocked(
-                        batteryRealtime, which) + 500) / 1000;
+                        rawRealtime, which) + 500) / 1000;
                 int count = vibTimer.getCountLocked(which);
                 //timer.logState();
                 if (totalTime != 0) {
@@ -2029,7 +2738,7 @@
             Timer fgTimer = u.getForegroundActivityTimer();
             if (fgTimer != null) {
                 // Convert from microseconds to milliseconds with rounding
-                long totalTime = (fgTimer.getTotalTimeLocked(batteryRealtime, which) + 500) / 1000;
+                long totalTime = (fgTimer.getTotalTimeLocked(rawRealtime, which) + 500) / 1000;
                 int count = fgTimer.getCountLocked(which);
                 if (totalTime != 0) {
                     sb.setLength(0);
@@ -2151,28 +2860,53 @@
         }
     }
 
-    static void printBitDescriptions(PrintWriter pw, int oldval, int newval, BitDescription[] descriptions) {
+    static void printBitDescriptions(PrintWriter pw, int oldval, int newval, HistoryTag wakelockTag,
+            BitDescription[] descriptions, boolean longNames) {
         int diff = oldval ^ newval;
         if (diff == 0) return;
+        boolean didWake = false;
         for (int i=0; i<descriptions.length; i++) {
             BitDescription bd = descriptions[i];
             if ((diff&bd.mask) != 0) {
+                pw.print(longNames ? " " : ",");
                 if (bd.shift < 0) {
-                    pw.print((newval&bd.mask) != 0 ? " +" : " -");
-                    pw.print(bd.name);
+                    pw.print((newval&bd.mask) != 0 ? "+" : "-");
+                    pw.print(longNames ? bd.name : bd.shortName);
+                    if (bd.mask == HistoryItem.STATE_WAKE_LOCK_FLAG && wakelockTag != null) {
+                        didWake = true;
+                        pw.print("=");
+                        if (longNames) {
+                            UserHandle.formatUid(pw, wakelockTag.uid);
+                            pw.print(":\"");
+                            pw.print(wakelockTag.string);
+                            pw.print("\"");
+                        } else {
+                            pw.print(wakelockTag.poolIdx);
+                        }
+                    }
                 } else {
-                    pw.print(" ");
-                    pw.print(bd.name);
+                    pw.print(longNames ? bd.name : bd.shortName);
                     pw.print("=");
                     int val = (newval&bd.mask)>>bd.shift;
                     if (bd.values != null && val >= 0 && val < bd.values.length) {
-                        pw.print(bd.values[val]);
+                        pw.print(longNames? bd.values[val] : bd.shortValues[val]);
                     } else {
                         pw.print(val);
                     }
                 }
             }
         }
+        if (!didWake && wakelockTag != null) {
+            pw.print(longNames ? "wake_lock=" : "w=");
+            if (longNames) {
+                UserHandle.formatUid(pw, wakelockTag.uid);
+                pw.print(":\"");
+                pw.print(wakelockTag.string);
+                pw.print("\"");
+            } else {
+                pw.print(wakelockTag.poolIdx);
+            }
+        }
     }
     
     public void prepareForDumpLocked() {
@@ -2180,51 +2914,95 @@
 
     public static class HistoryPrinter {
         int oldState = 0;
+        int oldState2 = 0;
+        int oldLevel = -1;
         int oldStatus = -1;
         int oldHealth = -1;
         int oldPlug = -1;
         int oldTemp = -1;
         int oldVolt = -1;
+        long lastTime = -1;
+        long firstTime = -1;
 
-        public void printNextItem(PrintWriter pw, HistoryItem rec, long now) {
-            pw.print("  ");
-            TimeUtils.formatDuration(rec.time-now, pw, TimeUtils.HUNDRED_DAY_FIELD_LEN);
-            pw.print(" ");
-            if (rec.cmd == HistoryItem.CMD_START) {
-                pw.println(" START");
-            } else if (rec.cmd == HistoryItem.CMD_OVERFLOW) {
-                pw.println(" *OVERFLOW*");
+        public void printNextItem(PrintWriter pw, HistoryItem rec, long baseTime, boolean checkin,
+                boolean verbose) {
+            if (!checkin) {
+                pw.print("  ");
+                TimeUtils.formatDuration(rec.time - baseTime, pw, TimeUtils.HUNDRED_DAY_FIELD_LEN);
+                pw.print(" (");
+                pw.print(rec.numReadInts);
+                pw.print(") ");
             } else {
-                if (rec.batteryLevel < 10) pw.print("00");
-                else if (rec.batteryLevel < 100) pw.print("0");
-                pw.print(rec.batteryLevel);
-                pw.print(" ");
-                if (rec.states < 0x10) pw.print("0000000");
-                else if (rec.states < 0x100) pw.print("000000");
-                else if (rec.states < 0x1000) pw.print("00000");
-                else if (rec.states < 0x10000) pw.print("0000");
-                else if (rec.states < 0x100000) pw.print("000");
-                else if (rec.states < 0x1000000) pw.print("00");
-                else if (rec.states < 0x10000000) pw.print("0");
-                pw.print(Integer.toHexString(rec.states));
+                if (lastTime < 0) {
+                    pw.print(rec.time - baseTime);
+                } else {
+                    pw.print(rec.time - lastTime);
+                }
+                lastTime = rec.time;
+            }
+            if (rec.cmd == HistoryItem.CMD_START) {
+                if (checkin) {
+                    pw.print(":");
+                }
+                pw.println("START");
+            } else if (rec.cmd == HistoryItem.CMD_CURRENT_TIME) {
+                if (checkin) {
+                    pw.print(":");
+                }
+                pw.print("TIME:");
+                if (checkin) {
+                    pw.println(rec.currentTime);
+                } else {
+                    pw.print(" ");
+                    pw.println(DateFormat.format("yyyy-MM-dd-HH-mm-ss",
+                            rec.currentTime).toString());
+                }
+            } else if (rec.cmd == HistoryItem.CMD_OVERFLOW) {
+                if (checkin) {
+                    pw.print(":");
+                }
+                pw.println("*OVERFLOW*");
+            } else {
+                if (!checkin) {
+                    if (rec.batteryLevel < 10) pw.print("00");
+                    else if (rec.batteryLevel < 100) pw.print("0");
+                    pw.print(rec.batteryLevel);
+                    if (verbose) {
+                        pw.print(" ");
+                        if (rec.states < 0) ;
+                        else if (rec.states < 0x10) pw.print("0000000");
+                        else if (rec.states < 0x100) pw.print("000000");
+                        else if (rec.states < 0x1000) pw.print("00000");
+                        else if (rec.states < 0x10000) pw.print("0000");
+                        else if (rec.states < 0x100000) pw.print("000");
+                        else if (rec.states < 0x1000000) pw.print("00");
+                        else if (rec.states < 0x10000000) pw.print("0");
+                        pw.print(Integer.toHexString(rec.states));
+                    }
+                } else {
+                    if (oldLevel != rec.batteryLevel) {
+                        oldLevel = rec.batteryLevel;
+                        pw.print(",Bl="); pw.print(rec.batteryLevel);
+                    }
+                }
                 if (oldStatus != rec.batteryStatus) {
                     oldStatus = rec.batteryStatus;
-                    pw.print(" status=");
+                    pw.print(checkin ? ",Bs=" : " status=");
                     switch (oldStatus) {
                         case BatteryManager.BATTERY_STATUS_UNKNOWN:
-                            pw.print("unknown");
+                            pw.print(checkin ? "?" : "unknown");
                             break;
                         case BatteryManager.BATTERY_STATUS_CHARGING:
-                            pw.print("charging");
+                            pw.print(checkin ? "c" : "charging");
                             break;
                         case BatteryManager.BATTERY_STATUS_DISCHARGING:
-                            pw.print("discharging");
+                            pw.print(checkin ? "d" : "discharging");
                             break;
                         case BatteryManager.BATTERY_STATUS_NOT_CHARGING:
-                            pw.print("not-charging");
+                            pw.print(checkin ? "n" : "not-charging");
                             break;
                         case BatteryManager.BATTERY_STATUS_FULL:
-                            pw.print("full");
+                            pw.print(checkin ? "f" : "full");
                             break;
                         default:
                             pw.print(oldStatus);
@@ -2233,25 +3011,28 @@
                 }
                 if (oldHealth != rec.batteryHealth) {
                     oldHealth = rec.batteryHealth;
-                    pw.print(" health=");
+                    pw.print(checkin ? ",Bh=" : " health=");
                     switch (oldHealth) {
                         case BatteryManager.BATTERY_HEALTH_UNKNOWN:
-                            pw.print("unknown");
+                            pw.print(checkin ? "?" : "unknown");
                             break;
                         case BatteryManager.BATTERY_HEALTH_GOOD:
-                            pw.print("good");
+                            pw.print(checkin ? "g" : "good");
                             break;
                         case BatteryManager.BATTERY_HEALTH_OVERHEAT:
-                            pw.print("overheat");
+                            pw.print(checkin ? "h" : "overheat");
                             break;
                         case BatteryManager.BATTERY_HEALTH_DEAD:
-                            pw.print("dead");
+                            pw.print(checkin ? "d" : "dead");
                             break;
                         case BatteryManager.BATTERY_HEALTH_OVER_VOLTAGE:
-                            pw.print("over-voltage");
+                            pw.print(checkin ? "v" : "over-voltage");
                             break;
                         case BatteryManager.BATTERY_HEALTH_UNSPECIFIED_FAILURE:
-                            pw.print("failure");
+                            pw.print(checkin ? "f" : "failure");
+                            break;
+                        case BatteryManager.BATTERY_HEALTH_COLD:
+                            pw.print(checkin ? "c" : "cold");
                             break;
                         default:
                             pw.print(oldHealth);
@@ -2260,19 +3041,19 @@
                 }
                 if (oldPlug != rec.batteryPlugType) {
                     oldPlug = rec.batteryPlugType;
-                    pw.print(" plug=");
+                    pw.print(checkin ? ",Bp=" : " plug=");
                     switch (oldPlug) {
                         case 0:
-                            pw.print("none");
+                            pw.print(checkin ? "n" : "none");
                             break;
                         case BatteryManager.BATTERY_PLUGGED_AC:
-                            pw.print("ac");
+                            pw.print(checkin ? "a" : "ac");
                             break;
                         case BatteryManager.BATTERY_PLUGGED_USB:
-                            pw.print("usb");
+                            pw.print(checkin ? "u" : "usb");
                             break;
                         case BatteryManager.BATTERY_PLUGGED_WIRELESS:
-                            pw.print("wireless");
+                            pw.print(checkin ? "w" : "wireless");
                             break;
                         default:
                             pw.print(oldPlug);
@@ -2281,139 +3062,337 @@
                 }
                 if (oldTemp != rec.batteryTemperature) {
                     oldTemp = rec.batteryTemperature;
-                    pw.print(" temp=");
+                    pw.print(checkin ? ",Bt=" : " temp=");
                     pw.print(oldTemp);
                 }
                 if (oldVolt != rec.batteryVoltage) {
                     oldVolt = rec.batteryVoltage;
-                    pw.print(" volt=");
+                    pw.print(checkin ? ",Bv=" : " volt=");
                     pw.print(oldVolt);
                 }
-                printBitDescriptions(pw, oldState, rec.states,
-                        HISTORY_STATE_DESCRIPTIONS);
+                printBitDescriptions(pw, oldState, rec.states, rec.wakelockTag,
+                        HISTORY_STATE_DESCRIPTIONS, !checkin);
+                printBitDescriptions(pw, oldState2, rec.states2, null,
+                        HISTORY_STATE2_DESCRIPTIONS, !checkin);
+                if (rec.wakeReasonTag != null) {
+                    if (checkin) {
+                        pw.print(",Wr=");
+                        pw.print(rec.wakeReasonTag.poolIdx);
+                    } else {
+                        pw.print(" wake_reason=");
+                        pw.print(rec.wakeReasonTag.uid);
+                        pw.print(":\"");
+                        pw.print(rec.wakeReasonTag.string);
+                        pw.print("\"");
+                    }
+                }
+                if (rec.eventCode != HistoryItem.EVENT_NONE) {
+                    pw.print(checkin ? "," : " ");
+                    if ((rec.eventCode&HistoryItem.EVENT_FLAG_START) != 0) {
+                        pw.print("+");
+                    } else if ((rec.eventCode&HistoryItem.EVENT_FLAG_FINISH) != 0) {
+                        pw.print("-");
+                    }
+                    String[] eventNames = checkin ? HISTORY_EVENT_CHECKIN_NAMES
+                            : HISTORY_EVENT_NAMES;
+                    int idx = rec.eventCode & ~(HistoryItem.EVENT_FLAG_START
+                            | HistoryItem.EVENT_FLAG_FINISH);
+                    if (idx >= 0 && idx < eventNames.length) {
+                        pw.print(eventNames[idx]);
+                    } else {
+                        pw.print(checkin ? "Ev" : "event");
+                        pw.print(idx);
+                    }
+                    pw.print("=");
+                    if (checkin) {
+                        pw.print(rec.eventTag.poolIdx);
+                    } else {
+                        UserHandle.formatUid(pw, rec.eventTag.uid);
+                        pw.print(":\"");
+                        pw.print(rec.eventTag.string);
+                        pw.print("\"");
+                    }
+                }
                 pw.println();
-            }
-            oldState = rec.states;
-        }
-
-        public void printNextItemCheckin(PrintWriter pw, HistoryItem rec, long now) {
-            pw.print(rec.time-now);
-            pw.print(",");
-            if (rec.cmd == HistoryItem.CMD_START) {
-                pw.print("start");
-            } else if (rec.cmd == HistoryItem.CMD_OVERFLOW) {
-                pw.print("overflow");
-            } else {
-                pw.print(rec.batteryLevel);
-                pw.print(",");
-                pw.print(rec.states);
-                pw.print(",");
-                pw.print(rec.batteryStatus);
-                pw.print(",");
-                pw.print(rec.batteryHealth);
-                pw.print(",");
-                pw.print(rec.batteryPlugType);
-                pw.print(",");
-                pw.print((int)rec.batteryTemperature);
-                pw.print(",");
-                pw.print((int)rec.batteryVoltage);
+                oldState = rec.states;
             }
         }
     }
 
+    private void printSizeValue(PrintWriter pw, long size) {
+        float result = size;
+        String suffix = "";
+        if (result >= 10*1024) {
+            suffix = "KB";
+            result = result / 1024;
+        }
+        if (result >= 10*1024) {
+            suffix = "MB";
+            result = result / 1024;
+        }
+        if (result >= 10*1024) {
+            suffix = "GB";
+            result = result / 1024;
+        }
+        if (result >= 10*1024) {
+            suffix = "TB";
+            result = result / 1024;
+        }
+        if (result >= 10*1024) {
+            suffix = "PB";
+            result = result / 1024;
+        }
+        pw.print((int)result);
+        pw.print(suffix);
+    }
+
+    private static boolean dumpDurationSteps(PrintWriter pw, String header, long[] steps,
+            int count, boolean checkin) {
+        if (count <= 0) {
+            return false;
+        }
+        if (!checkin) {
+            pw.println(header);
+        }
+        String[] lineArgs = new String[1];
+        for (int i=0; i<count; i++) {
+            if (checkin) {
+                lineArgs[0] = Long.toString(steps[i]);
+                dumpLine(pw, 0 /* uid */, "i" /* category */, header, (Object[])lineArgs);
+            } else {
+                pw.print("  #"); pw.print(i); pw.print(": ");
+                TimeUtils.formatDuration(steps[i], pw);
+                pw.println();
+            }
+        }
+        return true;
+    }
+
+    public static final int DUMP_UNPLUGGED_ONLY = 1<<0;
+    public static final int DUMP_CHARGED_ONLY = 1<<1;
+    public static final int DUMP_HISTORY_ONLY = 1<<2;
+    public static final int DUMP_INCLUDE_HISTORY = 1<<3;
+    public static final int DUMP_VERBOSE = 1<<4;
+
     /**
      * Dumps a human-readable summary of the battery statistics to the given PrintWriter.
      *
      * @param pw a Printer to receive the dump output.
      */
     @SuppressWarnings("unused")
-    public void dumpLocked(PrintWriter pw, boolean isUnpluggedOnly, int reqUid) {
+    public void dumpLocked(Context context, PrintWriter pw, int flags, int reqUid, long histStart) {
         prepareForDumpLocked();
 
-        long now = getHistoryBaseTime() + SystemClock.elapsedRealtime();
+        final boolean filtering =
+                (flags&(DUMP_HISTORY_ONLY|DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) != 0;
 
-        final HistoryItem rec = new HistoryItem();
-        if (startIteratingHistoryLocked()) {
-            pw.println("Battery History:");
-            HistoryPrinter hprinter = new HistoryPrinter();
-            while (getNextHistoryLocked(rec)) {
-                hprinter.printNextItem(pw, rec, now);
-            }
-            finishIteratingHistoryLocked();
-            pw.println("");
-        }
+        if ((flags&DUMP_HISTORY_ONLY) != 0 || !filtering) {
+            long now = getHistoryBaseTime() + SystemClock.elapsedRealtime();
 
-        if (startIteratingOldHistoryLocked()) {
-            pw.println("Old battery History:");
-            HistoryPrinter hprinter = new HistoryPrinter();
-            while (getNextOldHistoryLocked(rec)) {
-                hprinter.printNextItem(pw, rec, now);
-            }
-            finishIteratingOldHistoryLocked();
-            pw.println("");
-        }
-        
-        SparseArray<? extends Uid> uidStats = getUidStats();
-        final int NU = uidStats.size();
-        boolean didPid = false;
-        long nowRealtime = SystemClock.elapsedRealtime();
-        for (int i=0; i<NU; i++) {
-            Uid uid = uidStats.valueAt(i);
-            SparseArray<? extends Uid.Pid> pids = uid.getPidStats();
-            if (pids != null) {
-                for (int j=0; j<pids.size(); j++) {
-                    Uid.Pid pid = pids.valueAt(j);
-                    if (!didPid) {
-                        pw.println("Per-PID Stats:");
-                        didPid = true;
+            final HistoryItem rec = new HistoryItem();
+            final long historyTotalSize = getHistoryTotalSize();
+            final long historyUsedSize = getHistoryUsedSize();
+            if (startIteratingHistoryLocked()) {
+                try {
+                    pw.print("Battery History (");
+                    pw.print((100*historyUsedSize)/historyTotalSize);
+                    pw.print("% used, ");
+                    printSizeValue(pw, historyUsedSize);
+                    pw.print(" used of ");
+                    printSizeValue(pw, historyTotalSize);
+                    pw.print(", ");
+                    pw.print(getHistoryStringPoolSize());
+                    pw.print(" strings using ");
+                    printSizeValue(pw, getHistoryStringPoolBytes());
+                    pw.println("):");
+                    HistoryPrinter hprinter = new HistoryPrinter();
+                    long lastTime = -1;
+                    long baseTime = -1;
+                    boolean printed = false;
+                    while (getNextHistoryLocked(rec)) {
+                        lastTime = rec.time;
+                        if (baseTime < 0) {
+                            baseTime = lastTime;
+                        }
+                        if (rec.time >= histStart) {
+                            if (histStart >= 0 && !printed) {
+                                if (rec.cmd == HistoryItem.CMD_CURRENT_TIME) {
+                                    printed = true;
+                                } else if (rec.currentTime != 0) {
+                                    printed = true;
+                                    byte cmd = rec.cmd;
+                                    rec.cmd = HistoryItem.CMD_CURRENT_TIME;
+                                    hprinter.printNextItem(pw, rec, baseTime, false,
+                                            (flags&DUMP_VERBOSE) != 0);
+                                    rec.cmd = cmd;
+                                }
+                            }
+                            hprinter.printNextItem(pw, rec, baseTime, false,
+                                    (flags&DUMP_VERBOSE) != 0);
+                        }
                     }
-                    long time = pid.mWakeSum + (pid.mWakeStart != 0
-                            ? (nowRealtime - pid.mWakeStart) : 0);
-                    pw.print("  PID "); pw.print(pids.keyAt(j));
-                            pw.print(" wake time: ");
-                            TimeUtils.formatDuration(time, pw);
-                            pw.println("");
+                    if (histStart >= 0) {
+                        pw.print("  NEXT: "); pw.println(lastTime+1);
+                    }
+                    pw.println();
+                } finally {
+                    finishIteratingHistoryLocked();
+                }
+            }
+
+            if (startIteratingOldHistoryLocked()) {
+                try {
+                    pw.println("Old battery History:");
+                    HistoryPrinter hprinter = new HistoryPrinter();
+                    long baseTime = -1;
+                    while (getNextOldHistoryLocked(rec)) {
+                        if (baseTime < 0) {
+                            baseTime = rec.time;
+                        }
+                        hprinter.printNextItem(pw, rec, baseTime, false, (flags&DUMP_VERBOSE) != 0);
+                    }
+                    pw.println();
+                } finally {
+                    finishIteratingOldHistoryLocked();
                 }
             }
         }
-        if (didPid) {
-            pw.println("");
+
+        if (filtering && (flags&(DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) == 0) {
+            return;
         }
 
-        if (!isUnpluggedOnly) {
+        if (!filtering) {
+            SparseArray<? extends Uid> uidStats = getUidStats();
+            final int NU = uidStats.size();
+            boolean didPid = false;
+            long nowRealtime = SystemClock.elapsedRealtime();
+            for (int i=0; i<NU; i++) {
+                Uid uid = uidStats.valueAt(i);
+                SparseArray<? extends Uid.Pid> pids = uid.getPidStats();
+                if (pids != null) {
+                    for (int j=0; j<pids.size(); j++) {
+                        Uid.Pid pid = pids.valueAt(j);
+                        if (!didPid) {
+                            pw.println("Per-PID Stats:");
+                            didPid = true;
+                        }
+                        long time = pid.mWakeSumMs + (pid.mWakeNesting > 0
+                                ? (nowRealtime - pid.mWakeStartMs) : 0);
+                        pw.print("  PID "); pw.print(pids.keyAt(j));
+                                pw.print(" wake time: ");
+                                TimeUtils.formatDuration(time, pw);
+                                pw.println("");
+                    }
+                }
+            }
+            if (didPid) {
+                pw.println();
+            }
+            if (dumpDurationSteps(pw, "Discharge step durations:", getDischargeStepDurationsArray(),
+                    getNumDischargeStepDurations(), false)) {
+                long timeRemaining = computeBatteryTimeRemaining(SystemClock.elapsedRealtime());
+                if (timeRemaining >= 0) {
+                    pw.print("  Estimated discharge time remaining: ");
+                    TimeUtils.formatDuration(timeRemaining / 1000, pw);
+                    pw.println();
+                }
+                pw.println();
+            }
+            if (dumpDurationSteps(pw, "Charge step durations:", getChargeStepDurationsArray(),
+                    getNumChargeStepDurations(), false)) {
+                long timeRemaining = computeChargeTimeRemaining(SystemClock.elapsedRealtime());
+                if (timeRemaining >= 0) {
+                    pw.print("  Estimated charge time remaining: ");
+                    TimeUtils.formatDuration(timeRemaining / 1000, pw);
+                    pw.println();
+                }
+                pw.println();
+            }
+        }
+
+        if (!filtering || (flags&DUMP_CHARGED_ONLY) != 0) {
             pw.println("Statistics since last charge:");
             pw.println("  System starts: " + getStartCount()
                     + ", currently on battery: " + getIsOnBattery());
-            dumpLocked(pw, "", STATS_SINCE_CHARGED, reqUid);
-            pw.println("");
+            dumpLocked(context, pw, "", STATS_SINCE_CHARGED, reqUid);
+            pw.println();
         }
-        pw.println("Statistics since last unplugged:");
-        dumpLocked(pw, "", STATS_SINCE_UNPLUGGED, reqUid);
+        if (!filtering || (flags&DUMP_UNPLUGGED_ONLY) != 0) {
+            pw.println("Statistics since last unplugged:");
+            dumpLocked(context, pw, "", STATS_SINCE_UNPLUGGED, reqUid);
+        }
     }
     
     @SuppressWarnings("unused")
-    public void dumpCheckinLocked(
-            PrintWriter pw, List<ApplicationInfo> apps, boolean isUnpluggedOnly,
-            boolean includeHistory) {
+    public void dumpCheckinLocked(Context context, PrintWriter pw,
+            List<ApplicationInfo> apps, int flags, long histStart) {
         prepareForDumpLocked();
         
         long now = getHistoryBaseTime() + SystemClock.elapsedRealtime();
 
-        if (includeHistory) {
+        final boolean filtering =
+                (flags&(DUMP_HISTORY_ONLY|DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) != 0;
+
+        if ((flags&DUMP_INCLUDE_HISTORY) != 0 || (flags&DUMP_HISTORY_ONLY) != 0) {
             final HistoryItem rec = new HistoryItem();
             if (startIteratingHistoryLocked()) {
-                HistoryPrinter hprinter = new HistoryPrinter();
-                while (getNextHistoryLocked(rec)) {
-                    pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
-                    pw.print(0); pw.print(',');
-                    pw.print(HISTORY_DATA); pw.print(',');
-                    hprinter.printNextItemCheckin(pw, rec, now);
-                    pw.println();
+                try {
+                    for (int i=0; i<getHistoryStringPoolSize(); i++) {
+                        pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
+                        pw.print(HISTORY_STRING_POOL); pw.print(',');
+                        pw.print(i);
+                        pw.print(",");
+                        pw.print(getHistoryTagPoolUid(i));
+                        pw.print(",\"");
+                        String str = getHistoryTagPoolString(i);
+                        str = str.replace("\\", "\\\\");
+                        str = str.replace("\"", "\\\"");
+                        pw.print(str);
+                        pw.print("\"");
+                        pw.println();
+                    }
+                    HistoryPrinter hprinter = new HistoryPrinter();
+                    long lastTime = -1;
+                    long baseTime = -1;
+                    boolean printed = false;
+                    while (getNextHistoryLocked(rec)) {
+                        lastTime = rec.time;
+                        if (baseTime < 0) {
+                            baseTime = lastTime;
+                        }
+                        if (rec.time >= histStart) {
+                            if (histStart >= 0 && !printed) {
+                                if (rec.cmd == HistoryItem.CMD_CURRENT_TIME) {
+                                    printed = true;
+                                } else if (rec.currentTime != 0) {
+                                    printed = true;
+                                    byte cmd = rec.cmd;
+                                    rec.cmd = HistoryItem.CMD_CURRENT_TIME;
+                                    pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
+                                    pw.print(HISTORY_DATA); pw.print(',');
+                                    hprinter.printNextItem(pw, rec, baseTime, true, false);
+                                    rec.cmd = cmd;
+                                }
+                            }
+                            pw.print(BATTERY_STATS_CHECKIN_VERSION); pw.print(',');
+                            pw.print(HISTORY_DATA); pw.print(',');
+                            hprinter.printNextItem(pw, rec, baseTime, true, false);
+                        }
+                    }
+                    if (histStart >= 0) {
+                        pw.print("NEXT: "); pw.println(lastTime+1);
+                    }
+                } finally {
+                    finishIteratingHistoryLocked();
                 }
-                finishIteratingHistoryLocked();
             }
         }
 
+        if (filtering && (flags&(DUMP_UNPLUGGED_ONLY|DUMP_CHARGED_ONLY)) == 0) {
+            return;
+        }
+
         if (apps != null) {
             SparseArray<ArrayList<String>> uids = new SparseArray<ArrayList<String>>();
             for (int i=0; i<apps.size(); i++) {
@@ -2441,12 +3420,17 @@
                 }
             }
         }
-        if (isUnpluggedOnly) {
-            dumpCheckinLocked(pw, STATS_SINCE_UNPLUGGED, -1);
+        if (!filtering) {
+            dumpDurationSteps(pw, DISCHARGE_STEP_DATA, getDischargeStepDurationsArray(),
+                    getNumDischargeStepDurations(), true);
+            dumpDurationSteps(pw, CHARGE_STEP_DATA, getChargeStepDurationsArray(),
+                    getNumChargeStepDurations(), true);
         }
-        else {
-            dumpCheckinLocked(pw, STATS_SINCE_CHARGED, -1);
-            dumpCheckinLocked(pw, STATS_SINCE_UNPLUGGED, -1);
+        if (!filtering || (flags&DUMP_CHARGED_ONLY) != 0) {
+            dumpCheckinLocked(context, pw, STATS_SINCE_CHARGED, -1);
+        }
+        if (!filtering || (flags&DUMP_UNPLUGGED_ONLY) != 0) {
+            dumpCheckinLocked(context, pw, STATS_SINCE_UNPLUGGED, -1);
         }
     }
 }
diff --git a/core/java/android/os/Broadcaster.java b/core/java/android/os/Broadcaster.java
index 96dc61a..70dcdd8 100644
--- a/core/java/android/os/Broadcaster.java
+++ b/core/java/android/os/Broadcaster.java
@@ -171,10 +171,10 @@
     public void broadcast(Message msg)
     {
         synchronized (this) {
-        	if (mReg == null) {
-        		return;
-        	}
-        	
+            if (mReg == null) {
+                return;
+            }
+            
             int senderWhat = msg.what;
             Registration start = mReg;
             Registration r = start;
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index fc4fae2..1ca6b90 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -16,12 +16,17 @@
 
 package android.os;
 
+import android.text.TextUtils;
+import android.util.Slog;
+
 import com.android.internal.telephony.TelephonyProperties;
 
 /**
  * Information about the current build, extracted from system properties.
  */
 public class Build {
+    private static final String TAG = "Build";
+
     /** Value used for when a build property is unknown. */
     public static final String UNKNOWN = "unknown";
 
@@ -144,14 +149,22 @@
          */
         public static final String CODENAME = getString("ro.build.version.codename");
 
+        private static final String[] ALL_CODENAMES
+                = getString("ro.build.version.all_codenames").split(",");
+
         /**
-         * The SDK version to use when accessing resources.
-         * Use the current SDK version code.  If we are a development build,
-         * also allow the previous SDK version + 1.
          * @hide
          */
-        public static final int RESOURCES_SDK_INT = SDK_INT
-                + ("REL".equals(CODENAME) ? 0 : 1);
+        public static final String[] ACTIVE_CODENAMES = "REL".equals(ALL_CODENAMES[0])
+                ? new String[0] : ALL_CODENAMES;
+
+        /**
+         * The SDK version to use when accessing resources.
+         * Use the current SDK version code.  For every active development codename
+         * we are operating under, we bump the assumed resource platform version by 1.
+         * @hide
+         */
+        public static final int RESOURCES_SDK_INT = SDK_INT + ACTIVE_CODENAMES.length;
     }
 
     /**
@@ -505,6 +518,19 @@
          * Android 4.5: KitKat for watches, snacks on the run.
          */
         public static final int KITKAT_WATCH = CUR_DEVELOPMENT; // STOPSHIP: update API level
+
+        /**
+         * L!
+         *
+         * <p>Applications targeting this or a later release will get these
+         * new changes in behavior:</p>
+         * <ul>
+         * <li> {@link android.content.Context#bindService Context.bindService} now
+         * requires an explicit Intent, and will throw an exception if given an implicit
+         * Intent.</li>
+         * </ul>
+         */
+        public static final int L = CUR_DEVELOPMENT;
     }
     
     /** The type of build, like "user" or "eng". */
@@ -514,7 +540,43 @@
     public static final String TAGS = getString("ro.build.tags");
 
     /** A string that uniquely identifies this build.  Do not attempt to parse this value. */
-    public static final String FINGERPRINT = getString("ro.build.fingerprint");
+    public static final String FINGERPRINT = deriveFingerprint();
+
+    /**
+     * Some devices split the fingerprint components between multiple
+     * partitions, so we might derive the fingerprint at runtime.
+     */
+    private static String deriveFingerprint() {
+        String finger = SystemProperties.get("ro.build.fingerprint");
+        if (TextUtils.isEmpty(finger)) {
+            finger = getString("ro.product.brand") + '/' +
+                    getString("ro.product.name") + '/' +
+                    getString("ro.product.device") + ':' +
+                    getString("ro.build.version.release") + '/' +
+                    getString("ro.build.id") + '/' +
+                    getString("ro.build.version.incremental") + ':' +
+                    getString("ro.build.type") + '/' +
+                    getString("ro.build.tags");
+        }
+        return finger;
+    }
+
+    /**
+     * Ensure that raw fingerprint system property is defined. If it was derived
+     * dynamically by {@link #deriveFingerprint()} this is where we push the
+     * derived value into the property service.
+     *
+     * @hide
+     */
+    public static void ensureFingerprintProperty() {
+        if (TextUtils.isEmpty(SystemProperties.get("ro.build.fingerprint"))) {
+            try {
+                SystemProperties.set("ro.build.fingerprint", FINGERPRINT);
+            } catch (IllegalArgumentException e) {
+                Slog.e(TAG, "Failed to set fingerprint property", e);
+            }
+        }
+    }
 
     // The following properties only make sense for internal engineering builds.
     public static final long TIME = getLong("ro.build.date.utc") * 1000;
diff --git a/core/java/android/os/Bundle.java b/core/java/android/os/Bundle.java
index af57507..c85e418 100644
--- a/core/java/android/os/Bundle.java
+++ b/core/java/android/os/Bundle.java
@@ -17,7 +17,6 @@
 package android.os;
 
 import android.util.ArrayMap;
-import android.util.Log;
 import android.util.SparseArray;
 
 import java.io.Serializable;
@@ -29,47 +28,25 @@
  * A mapping from String values to various Parcelable types.
  *
  */
-public final class Bundle implements Parcelable, Cloneable {
-    private static final String TAG = "Bundle";
-    static final boolean DEBUG = false;
+public final class Bundle extends CommonBundle {
     public static final Bundle EMPTY;
-
-    static final int BUNDLE_MAGIC = 0x4C444E42; // 'B' 'N' 'D' 'L'
     static final Parcel EMPTY_PARCEL;
 
     static {
         EMPTY = new Bundle();
         EMPTY.mMap = ArrayMap.EMPTY;
-        EMPTY_PARCEL = Parcel.obtain();
+        EMPTY_PARCEL = CommonBundle.EMPTY_PARCEL;
     }
 
-    // Invariant - exactly one of mMap / mParcelledData will be null
-    // (except inside a call to unparcel)
-
-    /* package */ ArrayMap<String, Object> mMap = null;
-
-    /*
-     * If mParcelledData is non-null, then mMap will be null and the
-     * data are stored as a Parcel containing a Bundle.  When the data
-     * are unparcelled, mParcelledData willbe set to null.
-     */
-    /* package */ Parcel mParcelledData = null;
-
     private boolean mHasFds = false;
     private boolean mFdsKnown = true;
     private boolean mAllowFds = true;
 
     /**
-     * The ClassLoader used when unparcelling data from mParcelledData.
-     */
-    private ClassLoader mClassLoader;
-
-    /**
      * Constructs a new, empty Bundle.
      */
     public Bundle() {
-        mMap = new ArrayMap<String, Object>();
-        mClassLoader = getClass().getClassLoader();
+        super();
     }
 
     /**
@@ -79,11 +56,17 @@
      * @param parcelledData a Parcel containing a Bundle
      */
     Bundle(Parcel parcelledData) {
-        readFromParcel(parcelledData);
+        super(parcelledData);
+
+        mHasFds = mParcelledData.hasFileDescriptors();
+        mFdsKnown = true;
     }
 
     /* package */ Bundle(Parcel parcelledData, int length) {
-        readFromParcelInner(parcelledData, length);
+        super(parcelledData, length);
+
+        mHasFds = mParcelledData.hasFileDescriptors();
+        mFdsKnown = true;
     }
 
     /**
@@ -94,8 +77,7 @@
      * inside of the Bundle.
      */
     public Bundle(ClassLoader loader) {
-        mMap = new ArrayMap<String, Object>();
-        mClassLoader = loader;
+        super(loader);
     }
 
     /**
@@ -105,8 +87,7 @@
      * @param capacity the initial capacity of the Bundle
      */
     public Bundle(int capacity) {
-        mMap = new ArrayMap<String, Object>(capacity);
-        mClassLoader = getClass().getClassLoader();
+        super(capacity);
     }
 
     /**
@@ -116,27 +97,20 @@
      * @param b a Bundle to be copied.
      */
     public Bundle(Bundle b) {
-        if (b.mParcelledData != null) {
-            if (b.mParcelledData == EMPTY_PARCEL) {
-                mParcelledData = EMPTY_PARCEL;
-            } else {
-                mParcelledData = Parcel.obtain();
-                mParcelledData.appendFrom(b.mParcelledData, 0, b.mParcelledData.dataSize());
-                mParcelledData.setDataPosition(0);
-            }
-        } else {
-            mParcelledData = null;
-        }
-
-        if (b.mMap != null) {
-            mMap = new ArrayMap<String, Object>(b.mMap);
-        } else {
-            mMap = null;
-        }
+        super(b);
 
         mHasFds = b.mHasFds;
         mFdsKnown = b.mFdsKnown;
-        mClassLoader = b.mClassLoader;
+    }
+
+    /**
+     * Constructs a Bundle containing a copy of the mappings from the given
+     * PersistableBundle.
+     *
+     * @param b a Bundle to be copied.
+     */
+    public Bundle(PersistableBundle b) {
+        super(b);
     }
 
     /**
@@ -145,37 +119,17 @@
      * @hide
      */
     public static Bundle forPair(String key, String value) {
-        // TODO: optimize this case.
         Bundle b = new Bundle(1);
         b.putString(key, value);
         return b;
     }
 
     /**
-     * TODO: optimize this later (getting just the value part of a Bundle
-     * with a single pair) once Bundle.forPair() above is implemented
-     * with a special single-value Map implementation/serialization.
-     *
-     * Note: value in single-pair Bundle may be null.
-     *
      * @hide
      */
+    @Override
     public String getPairValue() {
-        unparcel();
-        int size = mMap.size();
-        if (size > 1) {
-            Log.w(TAG, "getPairValue() used on Bundle with multiple pairs.");
-        }
-        if (size == 0) {
-            return null;
-        }
-        Object o = mMap.valueAt(0);
-        try {
-            return (String) o;
-        } catch (ClassCastException e) {
-            typeWarning("getPairValue()", o, "String", e);
-            return null;
-        }
+        return super.getPairValue();
     }
 
     /**
@@ -184,15 +138,17 @@
      * @param loader An explicit ClassLoader to use when instantiating objects
      * inside of the Bundle.
      */
+    @Override
     public void setClassLoader(ClassLoader loader) {
-        mClassLoader = loader;
+        super.setClassLoader(loader);
     }
 
     /**
      * Return the ClassLoader currently associated with this Bundle.
      */
+    @Override
     public ClassLoader getClassLoader() {
-        return mClassLoader;
+        return super.getClassLoader();
     }
 
     /** @hide */
@@ -212,52 +168,11 @@
     }
 
     /**
-     * If the underlying data are stored as a Parcel, unparcel them
-     * using the currently assigned class loader.
-     */
-    /* package */ synchronized void unparcel() {
-        if (mParcelledData == null) {
-            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
-                    + ": no parcelled data");
-            return;
-        }
-
-        if (mParcelledData == EMPTY_PARCEL) {
-            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
-                    + ": empty");
-            if (mMap == null) {
-                mMap = new ArrayMap<String, Object>(1);
-            } else {
-                mMap.erase();
-            }
-            mParcelledData = null;
-            return;
-        }
-
-        int N = mParcelledData.readInt();
-        if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
-                + ": reading " + N + " maps");
-        if (N < 0) {
-            return;
-        }
-        if (mMap == null) {
-            mMap = new ArrayMap<String, Object>(N);
-        } else {
-            mMap.erase();
-            mMap.ensureCapacity(N);
-        }
-        mParcelledData.readArrayMapInternal(mMap, N, mClassLoader);
-        mParcelledData.recycle();
-        mParcelledData = null;
-        if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
-                + " final map: " + mMap);
-    }
-
-    /**
      * @hide
      */
+    @Override
     public boolean isParcelled() {
-        return mParcelledData != null;
+        return super.isParcelled();
     }
 
     /**
@@ -265,25 +180,26 @@
      *
      * @return the number of mappings as an int.
      */
+    @Override
     public int size() {
-        unparcel();
-        return mMap.size();
+        return super.size();
     }
 
     /**
      * Returns true if the mapping of this Bundle is empty, false otherwise.
      */
+    @Override
     public boolean isEmpty() {
-        unparcel();
-        return mMap.isEmpty();
+        return super.isEmpty();
     }
 
     /**
      * Removes all elements from the mapping of this Bundle.
      */
+    @Override
     public void clear() {
-        unparcel();
-        mMap.clear();
+        super.clear();
+
         mHasFds = false;
         mFdsKnown = true;
     }
@@ -295,9 +211,9 @@
      * @param key a String key
      * @return true if the key is part of the mapping, false otherwise
      */
+    @Override
     public boolean containsKey(String key) {
-        unparcel();
-        return mMap.containsKey(key);
+        return super.containsKey(key);
     }
 
     /**
@@ -306,9 +222,9 @@
      * @param key a String key
      * @return an Object, or null
      */
+    @Override
     public Object get(String key) {
-        unparcel();
-        return mMap.get(key);
+        return super.get(key);
     }
 
     /**
@@ -316,24 +232,33 @@
      *
      * @param key a String key
      */
+    @Override
     public void remove(String key) {
-        unparcel();
-        mMap.remove(key);
+        super.remove(key);
     }
 
     /**
      * Inserts all mappings from the given Bundle into this Bundle.
      *
-     * @param map a Bundle
+     * @param bundle a Bundle
      */
-    public void putAll(Bundle map) {
+    public void putAll(Bundle bundle) {
         unparcel();
-        map.unparcel();
-        mMap.putAll(map.mMap);
+        bundle.unparcel();
+        mMap.putAll(bundle.mMap);
 
         // fd state is now known if and only if both bundles already knew
-        mHasFds |= map.mHasFds;
-        mFdsKnown = mFdsKnown && map.mFdsKnown;
+        mHasFds |= bundle.mHasFds;
+        mFdsKnown = mFdsKnown && bundle.mFdsKnown;
+    }
+
+    /**
+     * Inserts all mappings from the given PersistableBundle into this Bundle.
+     *
+     * @param bundle a PersistableBundle
+     */
+    public void putAll(PersistableBundle bundle) {
+        super.putAll(bundle);
     }
 
     /**
@@ -341,9 +266,9 @@
      *
      * @return a Set of String keys
      */
+    @Override
     public Set<String> keySet() {
-        unparcel();
-        return mMap.keySet();
+        return super.keySet();
     }
 
     /**
@@ -352,7 +277,7 @@
     public boolean hasFileDescriptors() {
         if (!mFdsKnown) {
             boolean fdFound = false;    // keep going until we find one or run out of data
-            
+
             if (mParcelledData != null) {
                 if (mParcelledData.hasFileDescriptors()) {
                     fdFound = true;
@@ -390,8 +315,7 @@
                         ArrayList array = (ArrayList) obj;
                         // an ArrayList here might contain either Strings or
                         // Parcelables; only look inside for Parcelables
-                        if ((array.size() > 0)
-                                && (array.get(0) instanceof Parcelable)) {
+                        if (!array.isEmpty() && (array.get(0) instanceof Parcelable)) {
                             for (int n = array.size() - 1; n >= 0; n--) {
                                 Parcelable p = (Parcelable) array.get(n);
                                 if (p != null && ((p.describeContents()
@@ -410,7 +334,7 @@
         }
         return mHasFds;
     }
-    
+
     /**
      * Inserts a Boolean value into the mapping of this Bundle, replacing
      * any existing value for the given key.  Either key or value may be null.
@@ -418,9 +342,9 @@
      * @param key a String, or null
      * @param value a Boolean, or null
      */
+    @Override
     public void putBoolean(String key, boolean value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putBoolean(key, value);
     }
 
     /**
@@ -430,9 +354,9 @@
      * @param key a String, or null
      * @param value a byte
      */
+    @Override
     public void putByte(String key, byte value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putByte(key, value);
     }
 
     /**
@@ -442,9 +366,9 @@
      * @param key a String, or null
      * @param value a char, or null
      */
+    @Override
     public void putChar(String key, char value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putChar(key, value);
     }
 
     /**
@@ -454,9 +378,9 @@
      * @param key a String, or null
      * @param value a short
      */
+    @Override
     public void putShort(String key, short value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putShort(key, value);
     }
 
     /**
@@ -466,9 +390,9 @@
      * @param key a String, or null
      * @param value an int, or null
      */
+    @Override
     public void putInt(String key, int value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putInt(key, value);
     }
 
     /**
@@ -478,9 +402,9 @@
      * @param key a String, or null
      * @param value a long
      */
+    @Override
     public void putLong(String key, long value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putLong(key, value);
     }
 
     /**
@@ -490,9 +414,9 @@
      * @param key a String, or null
      * @param value a float
      */
+    @Override
     public void putFloat(String key, float value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putFloat(key, value);
     }
 
     /**
@@ -502,9 +426,9 @@
      * @param key a String, or null
      * @param value a double
      */
+    @Override
     public void putDouble(String key, double value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putDouble(key, value);
     }
 
     /**
@@ -514,9 +438,9 @@
      * @param key a String, or null
      * @param value a String, or null
      */
+    @Override
     public void putString(String key, String value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putString(key, value);
     }
 
     /**
@@ -526,9 +450,9 @@
      * @param key a String, or null
      * @param value a CharSequence, or null
      */
+    @Override
     public void putCharSequence(String key, CharSequence value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putCharSequence(key, value);
     }
 
     /**
@@ -567,7 +491,7 @@
      * @param value an ArrayList of Parcelable objects, or null
      */
     public void putParcelableArrayList(String key,
-        ArrayList<? extends Parcelable> value) {
+            ArrayList<? extends Parcelable> value) {
         unparcel();
         mMap.put(key, value);
         mFdsKnown = false;
@@ -602,9 +526,9 @@
      * @param key a String, or null
      * @param value an ArrayList<Integer> object, or null
      */
+    @Override
     public void putIntegerArrayList(String key, ArrayList<Integer> value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putIntegerArrayList(key, value);
     }
 
     /**
@@ -614,9 +538,9 @@
      * @param key a String, or null
      * @param value an ArrayList<String> object, or null
      */
+    @Override
     public void putStringArrayList(String key, ArrayList<String> value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putStringArrayList(key, value);
     }
 
     /**
@@ -626,9 +550,9 @@
      * @param key a String, or null
      * @param value an ArrayList<CharSequence> object, or null
      */
+    @Override
     public void putCharSequenceArrayList(String key, ArrayList<CharSequence> value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putCharSequenceArrayList(key, value);
     }
 
     /**
@@ -638,9 +562,9 @@
      * @param key a String, or null
      * @param value a Serializable object, or null
      */
+    @Override
     public void putSerializable(String key, Serializable value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putSerializable(key, value);
     }
 
     /**
@@ -650,9 +574,9 @@
      * @param key a String, or null
      * @param value a boolean array object, or null
      */
+    @Override
     public void putBooleanArray(String key, boolean[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putBooleanArray(key, value);
     }
 
     /**
@@ -662,9 +586,9 @@
      * @param key a String, or null
      * @param value a byte array object, or null
      */
+    @Override
     public void putByteArray(String key, byte[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putByteArray(key, value);
     }
 
     /**
@@ -674,9 +598,9 @@
      * @param key a String, or null
      * @param value a short array object, or null
      */
+    @Override
     public void putShortArray(String key, short[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putShortArray(key, value);
     }
 
     /**
@@ -686,9 +610,9 @@
      * @param key a String, or null
      * @param value a char array object, or null
      */
+    @Override
     public void putCharArray(String key, char[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putCharArray(key, value);
     }
 
     /**
@@ -698,9 +622,9 @@
      * @param key a String, or null
      * @param value an int array object, or null
      */
+    @Override
     public void putIntArray(String key, int[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putIntArray(key, value);
     }
 
     /**
@@ -710,9 +634,9 @@
      * @param key a String, or null
      * @param value a long array object, or null
      */
+    @Override
     public void putLongArray(String key, long[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putLongArray(key, value);
     }
 
     /**
@@ -722,9 +646,9 @@
      * @param key a String, or null
      * @param value a float array object, or null
      */
+    @Override
     public void putFloatArray(String key, float[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putFloatArray(key, value);
     }
 
     /**
@@ -734,9 +658,9 @@
      * @param key a String, or null
      * @param value a double array object, or null
      */
+    @Override
     public void putDoubleArray(String key, double[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putDoubleArray(key, value);
     }
 
     /**
@@ -746,9 +670,9 @@
      * @param key a String, or null
      * @param value a String array object, or null
      */
+    @Override
     public void putStringArray(String key, String[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putStringArray(key, value);
     }
 
     /**
@@ -758,9 +682,9 @@
      * @param key a String, or null
      * @param value a CharSequence array object, or null
      */
+    @Override
     public void putCharSequenceArray(String key, CharSequence[] value) {
-        unparcel();
-        mMap.put(key, value);
+        super.putCharSequenceArray(key, value);
     }
 
     /**
@@ -776,6 +700,17 @@
     }
 
     /**
+     * Inserts a PersistableBundle value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a Bundle object, or null
+     */
+    public void putPersistableBundle(String key, PersistableBundle value) {
+        super.putPersistableBundle(key, value);
+    }
+
+    /**
      * Inserts an {@link IBinder} value into the mapping of this Bundle, replacing
      * any existing value for the given key.  Either key or value may be null.
      *
@@ -817,33 +752,9 @@
      * @param key a String
      * @return a boolean value
      */
+    @Override
     public boolean getBoolean(String key) {
-        unparcel();
-        if (DEBUG) Log.d(TAG, "Getting boolean in "
-                + Integer.toHexString(System.identityHashCode(this)));
-        return getBoolean(key, false);
-    }
-
-    // Log a message if the value was non-null but not of the expected type
-    private void typeWarning(String key, Object value, String className,
-        Object defaultValue, ClassCastException e) {
-        StringBuilder sb = new StringBuilder();
-        sb.append("Key ");
-        sb.append(key);
-        sb.append(" expected ");
-        sb.append(className);
-        sb.append(" but value was a ");
-        sb.append(value.getClass().getName());
-        sb.append(".  The default value ");
-        sb.append(defaultValue);
-        sb.append(" was returned.");
-        Log.w(TAG, sb.toString());
-        Log.w(TAG, "Attempt to cast generated internal exception:", e);
-    }
-
-    private void typeWarning(String key, Object value, String className,
-        ClassCastException e) {
-        typeWarning(key, value, className, "<null>", e);
+        return super.getBoolean(key);
     }
 
     /**
@@ -854,18 +765,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return a boolean value
      */
+    @Override
     public boolean getBoolean(String key, boolean defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Boolean) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Boolean", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getBoolean(key, defaultValue);
     }
 
     /**
@@ -875,9 +777,9 @@
      * @param key a String
      * @return a byte value
      */
+    @Override
     public byte getByte(String key) {
-        unparcel();
-        return getByte(key, (byte) 0);
+        return super.getByte(key);
     }
 
     /**
@@ -888,18 +790,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return a byte value
      */
+    @Override
     public Byte getByte(String key, byte defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Byte) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Byte", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getByte(key, defaultValue);
     }
 
     /**
@@ -909,9 +802,9 @@
      * @param key a String
      * @return a char value
      */
+    @Override
     public char getChar(String key) {
-        unparcel();
-        return getChar(key, (char) 0);
+        return super.getChar(key);
     }
 
     /**
@@ -922,18 +815,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return a char value
      */
+    @Override
     public char getChar(String key, char defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Character) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Character", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getChar(key, defaultValue);
     }
 
     /**
@@ -943,9 +827,9 @@
      * @param key a String
      * @return a short value
      */
+    @Override
     public short getShort(String key) {
-        unparcel();
-        return getShort(key, (short) 0);
+        return super.getShort(key);
     }
 
     /**
@@ -956,18 +840,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return a short value
      */
+    @Override
     public short getShort(String key, short defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Short) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Short", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getShort(key, defaultValue);
     }
 
     /**
@@ -977,9 +852,9 @@
      * @param key a String
      * @return an int value
      */
+    @Override
     public int getInt(String key) {
-        unparcel();
-        return getInt(key, 0);
+        return super.getInt(key);
     }
 
     /**
@@ -990,18 +865,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return an int value
      */
+    @Override
     public int getInt(String key, int defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Integer) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Integer", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getInt(key, defaultValue);
     }
 
     /**
@@ -1011,9 +877,9 @@
      * @param key a String
      * @return a long value
      */
+    @Override
     public long getLong(String key) {
-        unparcel();
-        return getLong(key, 0L);
+        return super.getLong(key);
     }
 
     /**
@@ -1024,18 +890,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return a long value
      */
+    @Override
     public long getLong(String key, long defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Long) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Long", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getLong(key, defaultValue);
     }
 
     /**
@@ -1045,9 +902,9 @@
      * @param key a String
      * @return a float value
      */
+    @Override
     public float getFloat(String key) {
-        unparcel();
-        return getFloat(key, 0.0f);
+        return super.getFloat(key);
     }
 
     /**
@@ -1058,18 +915,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return a float value
      */
+    @Override
     public float getFloat(String key, float defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Float) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Float", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getFloat(key, defaultValue);
     }
 
     /**
@@ -1079,9 +927,9 @@
      * @param key a String
      * @return a double value
      */
+    @Override
     public double getDouble(String key) {
-        unparcel();
-        return getDouble(key, 0.0);
+        return super.getDouble(key);
     }
 
     /**
@@ -1092,18 +940,9 @@
      * @param defaultValue Value to return if key does not exist
      * @return a double value
      */
+    @Override
     public double getDouble(String key, double defaultValue) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return defaultValue;
-        }
-        try {
-            return (Double) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Double", defaultValue, e);
-            return defaultValue;
-        }
+        return super.getDouble(key, defaultValue);
     }
 
     /**
@@ -1114,15 +953,9 @@
      * @param key a String, or null
      * @return a String value, or null
      */
+    @Override
     public String getString(String key) {
-        unparcel();
-        final Object o = mMap.get(key);
-        try {
-            return (String) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "String", e);
-            return null;
-        }
+        return super.getString(key);
     }
 
     /**
@@ -1134,9 +967,9 @@
      * @return the String value associated with the given key, or defaultValue
      *     if no valid String object is currently mapped to that key.
      */
+    @Override
     public String getString(String key, String defaultValue) {
-        final String s = getString(key);
-        return (s == null) ? defaultValue : s;
+        return super.getString(key, defaultValue);
     }
 
     /**
@@ -1147,15 +980,9 @@
      * @param key a String, or null
      * @return a CharSequence value, or null
      */
+    @Override
     public CharSequence getCharSequence(String key) {
-        unparcel();
-        final Object o = mMap.get(key);
-        try {
-            return (CharSequence) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "CharSequence", e);
-            return null;
-        }
+        return super.getCharSequence(key);
     }
 
     /**
@@ -1167,9 +994,9 @@
      * @return the CharSequence value associated with the given key, or defaultValue
      *     if no valid CharSequence object is currently mapped to that key.
      */
+    @Override
     public CharSequence getCharSequence(String key, CharSequence defaultValue) {
-        final CharSequence cs = getCharSequence(key);
-        return (cs == null) ? defaultValue : cs;
+        return super.getCharSequence(key, defaultValue);
     }
 
     /**
@@ -1200,6 +1027,18 @@
      * value is explicitly associated with the key.
      *
      * @param key a String, or null
+     * @return a PersistableBundle value, or null
+     */
+    public PersistableBundle getPersistableBundle(String key) {
+        return super.getPersistableBundle(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
      * @return a Parcelable value, or null
      */
     public <T extends Parcelable> T getParcelable(String key) {
@@ -1291,18 +1130,9 @@
      * @param key a String, or null
      * @return a Serializable value, or null
      */
+    @Override
     public Serializable getSerializable(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (Serializable) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "Serializable", e);
-            return null;
-        }
+        return super.getSerializable(key);
     }
 
     /**
@@ -1313,18 +1143,9 @@
      * @param key a String, or null
      * @return an ArrayList<String> value, or null
      */
+    @Override
     public ArrayList<Integer> getIntegerArrayList(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (ArrayList<Integer>) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "ArrayList<Integer>", e);
-            return null;
-        }
+        return super.getIntegerArrayList(key);
     }
 
     /**
@@ -1335,18 +1156,9 @@
      * @param key a String, or null
      * @return an ArrayList<String> value, or null
      */
+    @Override
     public ArrayList<String> getStringArrayList(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (ArrayList<String>) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "ArrayList<String>", e);
-            return null;
-        }
+        return super.getStringArrayList(key);
     }
 
     /**
@@ -1357,18 +1169,9 @@
      * @param key a String, or null
      * @return an ArrayList<CharSequence> value, or null
      */
+    @Override
     public ArrayList<CharSequence> getCharSequenceArrayList(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (ArrayList<CharSequence>) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "ArrayList<CharSequence>", e);
-            return null;
-        }
+        return super.getCharSequenceArrayList(key);
     }
 
     /**
@@ -1379,18 +1182,9 @@
      * @param key a String, or null
      * @return a boolean[] value, or null
      */
+    @Override
     public boolean[] getBooleanArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (boolean[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "byte[]", e);
-            return null;
-        }
+        return super.getBooleanArray(key);
     }
 
     /**
@@ -1401,18 +1195,9 @@
      * @param key a String, or null
      * @return a byte[] value, or null
      */
+    @Override
     public byte[] getByteArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (byte[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "byte[]", e);
-            return null;
-        }
+        return super.getByteArray(key);
     }
 
     /**
@@ -1423,18 +1208,9 @@
      * @param key a String, or null
      * @return a short[] value, or null
      */
+    @Override
     public short[] getShortArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (short[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "short[]", e);
-            return null;
-        }
+        return super.getShortArray(key);
     }
 
     /**
@@ -1445,18 +1221,9 @@
      * @param key a String, or null
      * @return a char[] value, or null
      */
+    @Override
     public char[] getCharArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (char[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "char[]", e);
-            return null;
-        }
+        return super.getCharArray(key);
     }
 
     /**
@@ -1467,18 +1234,9 @@
      * @param key a String, or null
      * @return an int[] value, or null
      */
+    @Override
     public int[] getIntArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (int[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "int[]", e);
-            return null;
-        }
+        return super.getIntArray(key);
     }
 
     /**
@@ -1489,18 +1247,9 @@
      * @param key a String, or null
      * @return a long[] value, or null
      */
+    @Override
     public long[] getLongArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (long[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "long[]", e);
-            return null;
-        }
+        return super.getLongArray(key);
     }
 
     /**
@@ -1511,18 +1260,9 @@
      * @param key a String, or null
      * @return a float[] value, or null
      */
+    @Override
     public float[] getFloatArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (float[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "float[]", e);
-            return null;
-        }
+        return super.getFloatArray(key);
     }
 
     /**
@@ -1533,18 +1273,9 @@
      * @param key a String, or null
      * @return a double[] value, or null
      */
+    @Override
     public double[] getDoubleArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (double[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "double[]", e);
-            return null;
-        }
+        return super.getDoubleArray(key);
     }
 
     /**
@@ -1555,18 +1286,9 @@
      * @param key a String, or null
      * @return a String[] value, or null
      */
+    @Override
     public String[] getStringArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (String[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "String[]", e);
-            return null;
-        }
+        return super.getStringArray(key);
     }
 
     /**
@@ -1577,18 +1299,9 @@
      * @param key a String, or null
      * @return a CharSequence[] value, or null
      */
+    @Override
     public CharSequence[] getCharSequenceArray(String key) {
-        unparcel();
-        Object o = mMap.get(key);
-        if (o == null) {
-            return null;
-        }
-        try {
-            return (CharSequence[]) o;
-        } catch (ClassCastException e) {
-            typeWarning(key, o, "CharSequence[]", e);
-            return null;
-        }
+        return super.getCharSequenceArray(key);
     }
 
     /**
@@ -1641,10 +1354,12 @@
 
     public static final Parcelable.Creator<Bundle> CREATOR =
         new Parcelable.Creator<Bundle>() {
+        @Override
         public Bundle createFromParcel(Parcel in) {
             return in.readBundle();
         }
 
+        @Override
         public Bundle[] newArray(int size) {
             return new Bundle[size];
         }
@@ -1653,6 +1368,7 @@
     /**
      * Report the nature of this Parcelable's contents
      */
+    @Override
     public int describeContents() {
         int mask = 0;
         if (hasFileDescriptors()) {
@@ -1660,44 +1376,17 @@
         }
         return mask;
     }
-    
+
     /**
      * Writes the Bundle contents to a Parcel, typically in order for
      * it to be passed through an IBinder connection.
      * @param parcel The parcel to copy this bundle to.
      */
+    @Override
     public void writeToParcel(Parcel parcel, int flags) {
         final boolean oldAllowFds = parcel.pushAllowFds(mAllowFds);
         try {
-            if (mParcelledData != null) {
-                if (mParcelledData == EMPTY_PARCEL) {
-                    parcel.writeInt(0);
-                } else {
-                    int length = mParcelledData.dataSize();
-                    parcel.writeInt(length);
-                    parcel.writeInt(BUNDLE_MAGIC);
-                    parcel.appendFrom(mParcelledData, 0, length);
-                }
-            } else {
-                // Special case for empty bundles.
-                if (mMap == null || mMap.size() <= 0) {
-                    parcel.writeInt(0);
-                    return;
-                }
-                int lengthPos = parcel.dataPosition();
-                parcel.writeInt(-1); // dummy, will hold length
-                parcel.writeInt(BUNDLE_MAGIC);
-    
-                int startPos = parcel.dataPosition();
-                parcel.writeArrayMapInternal(mMap);
-                int endPos = parcel.dataPosition();
-    
-                // Backpatch length
-                parcel.setDataPosition(lengthPos);
-                int length = endPos - startPos;
-                parcel.writeInt(length);
-                parcel.setDataPosition(endPos);
-            }
+            super.writeToParcelInner(parcel, flags);
         } finally {
             parcel.restoreAllowFds(oldAllowFds);
         }
@@ -1709,41 +1398,8 @@
      * @param parcel The parcel to overwrite this bundle from.
      */
     public void readFromParcel(Parcel parcel) {
-        int length = parcel.readInt();
-        if (length < 0) {
-            throw new RuntimeException("Bad length in parcel: " + length);
-        }
-        readFromParcelInner(parcel, length);
-    }
-
-    void readFromParcelInner(Parcel parcel, int length) {
-        if (length == 0) {
-            // Empty Bundle or end of data.
-            mParcelledData = EMPTY_PARCEL;
-            mHasFds = false;
-            mFdsKnown = true;
-            return;
-        }
-        int magic = parcel.readInt();
-        if (magic != BUNDLE_MAGIC) {
-            //noinspection ThrowableInstanceNeverThrown
-            throw new IllegalStateException("Bad magic number for Bundle: 0x"
-                    + Integer.toHexString(magic));
-        }
-
-        // Advance within this Parcel
-        int offset = parcel.dataPosition();
-        parcel.setDataPosition(offset + length);
-
-        Parcel p = Parcel.obtain();
-        p.setDataPosition(0);
-        p.appendFrom(parcel, offset, length);
-        if (DEBUG) Log.d(TAG, "Retrieving "  + Integer.toHexString(System.identityHashCode(this))
-                + ": " + length + " bundle bytes starting at " + offset);
-        p.setDataPosition(0);
-
-        mParcelledData = p;
-        mHasFds = p.hasFileDescriptors();
+        super.readFromParcelInner(parcel);
+        mHasFds = mParcelledData.hasFileDescriptors();
         mFdsKnown = true;
     }
 
@@ -1759,4 +1415,5 @@
         }
         return "Bundle[" + mMap.toString() + "]";
     }
+
 }
diff --git a/core/java/android/os/CommonBundle.java b/core/java/android/os/CommonBundle.java
new file mode 100644
index 0000000..e11f170
--- /dev/null
+++ b/core/java/android/os/CommonBundle.java
@@ -0,0 +1,1384 @@
+/*
+ * Copyright (C) 2014 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 android.os;
+
+import android.util.ArrayMap;
+import android.util.Log;
+import android.util.SparseArray;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * A mapping from String values to various types.
+ */
+abstract class CommonBundle implements Parcelable, Cloneable {
+    private static final String TAG = "Bundle";
+    static final boolean DEBUG = false;
+
+    static final int BUNDLE_MAGIC = 0x4C444E42; // 'B' 'N' 'D' 'L'
+    static final Parcel EMPTY_PARCEL;
+
+    static {
+        EMPTY_PARCEL = Parcel.obtain();
+    }
+
+    // Invariant - exactly one of mMap / mParcelledData will be null
+    // (except inside a call to unparcel)
+
+    ArrayMap<String, Object> mMap = null;
+
+    /*
+     * If mParcelledData is non-null, then mMap will be null and the
+     * data are stored as a Parcel containing a Bundle.  When the data
+     * are unparcelled, mParcelledData willbe set to null.
+     */
+    Parcel mParcelledData = null;
+
+    /**
+     * The ClassLoader used when unparcelling data from mParcelledData.
+     */
+    private ClassLoader mClassLoader;
+
+    /**
+     * Constructs a new, empty Bundle that uses a specific ClassLoader for
+     * instantiating Parcelable and Serializable objects.
+     *
+     * @param loader An explicit ClassLoader to use when instantiating objects
+     * inside of the Bundle.
+     * @param capacity Initial size of the ArrayMap.
+     */
+    CommonBundle(ClassLoader loader, int capacity) {
+        mMap = capacity > 0 ?
+                new ArrayMap<String, Object>(capacity) : new ArrayMap<String, Object>();
+        mClassLoader = loader == null ? getClass().getClassLoader() : loader;
+    }
+
+    /**
+     * Constructs a new, empty Bundle.
+     */
+    CommonBundle() {
+        this((ClassLoader) null, 0);
+    }
+
+    /**
+     * Constructs a Bundle whose data is stored as a Parcel.  The data
+     * will be unparcelled on first contact, using the assigned ClassLoader.
+     *
+     * @param parcelledData a Parcel containing a Bundle
+     */
+    CommonBundle(Parcel parcelledData) {
+        readFromParcelInner(parcelledData);
+    }
+
+    CommonBundle(Parcel parcelledData, int length) {
+        readFromParcelInner(parcelledData, length);
+    }
+
+    /**
+     * Constructs a new, empty Bundle that uses a specific ClassLoader for
+     * instantiating Parcelable and Serializable objects.
+     *
+     * @param loader An explicit ClassLoader to use when instantiating objects
+     * inside of the Bundle.
+     */
+    CommonBundle(ClassLoader loader) {
+        this(loader, 0);
+    }
+
+    /**
+     * Constructs a new, empty Bundle sized to hold the given number of
+     * elements. The Bundle will grow as needed.
+     *
+     * @param capacity the initial capacity of the Bundle
+     */
+    CommonBundle(int capacity) {
+        this((ClassLoader) null, capacity);
+    }
+
+    /**
+     * Constructs a Bundle containing a copy of the mappings from the given
+     * Bundle.
+     *
+     * @param b a Bundle to be copied.
+     */
+    CommonBundle(CommonBundle b) {
+        if (b.mParcelledData != null) {
+            if (b.mParcelledData == EMPTY_PARCEL) {
+                mParcelledData = EMPTY_PARCEL;
+            } else {
+                mParcelledData = Parcel.obtain();
+                mParcelledData.appendFrom(b.mParcelledData, 0, b.mParcelledData.dataSize());
+                mParcelledData.setDataPosition(0);
+            }
+        } else {
+            mParcelledData = null;
+        }
+
+        if (b.mMap != null) {
+            mMap = new ArrayMap<String, Object>(b.mMap);
+        } else {
+            mMap = null;
+        }
+
+        mClassLoader = b.mClassLoader;
+    }
+
+    /**
+     * TODO: optimize this later (getting just the value part of a Bundle
+     * with a single pair) once Bundle.forPair() above is implemented
+     * with a special single-value Map implementation/serialization.
+     *
+     * Note: value in single-pair Bundle may be null.
+     *
+     * @hide
+     */
+    String getPairValue() {
+        unparcel();
+        int size = mMap.size();
+        if (size > 1) {
+            Log.w(TAG, "getPairValue() used on Bundle with multiple pairs.");
+        }
+        if (size == 0) {
+            return null;
+        }
+        Object o = mMap.valueAt(0);
+        try {
+            return (String) o;
+        } catch (ClassCastException e) {
+            typeWarning("getPairValue()", o, "String", e);
+            return null;
+        }
+    }
+
+    /**
+     * Changes the ClassLoader this Bundle uses when instantiating objects.
+     *
+     * @param loader An explicit ClassLoader to use when instantiating objects
+     * inside of the Bundle.
+     */
+    void setClassLoader(ClassLoader loader) {
+        mClassLoader = loader;
+    }
+
+    /**
+     * Return the ClassLoader currently associated with this Bundle.
+     */
+    ClassLoader getClassLoader() {
+        return mClassLoader;
+    }
+
+    /**
+     * If the underlying data are stored as a Parcel, unparcel them
+     * using the currently assigned class loader.
+     */
+    /* package */ synchronized void unparcel() {
+        if (mParcelledData == null) {
+            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+                    + ": no parcelled data");
+            return;
+        }
+
+        if (mParcelledData == EMPTY_PARCEL) {
+            if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+                    + ": empty");
+            if (mMap == null) {
+                mMap = new ArrayMap<String, Object>(1);
+            } else {
+                mMap.erase();
+            }
+            mParcelledData = null;
+            return;
+        }
+
+        int N = mParcelledData.readInt();
+        if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+                + ": reading " + N + " maps");
+        if (N < 0) {
+            return;
+        }
+        if (mMap == null) {
+            mMap = new ArrayMap<String, Object>(N);
+        } else {
+            mMap.erase();
+            mMap.ensureCapacity(N);
+        }
+        mParcelledData.readArrayMapInternal(mMap, N, mClassLoader);
+        mParcelledData.recycle();
+        mParcelledData = null;
+        if (DEBUG) Log.d(TAG, "unparcel " + Integer.toHexString(System.identityHashCode(this))
+                + " final map: " + mMap);
+    }
+
+    /**
+     * @hide
+     */
+    boolean isParcelled() {
+        return mParcelledData != null;
+    }
+
+    /**
+     * Returns the number of mappings contained in this Bundle.
+     *
+     * @return the number of mappings as an int.
+     */
+    int size() {
+        unparcel();
+        return mMap.size();
+    }
+
+    /**
+     * Returns true if the mapping of this Bundle is empty, false otherwise.
+     */
+    boolean isEmpty() {
+        unparcel();
+        return mMap.isEmpty();
+    }
+
+    /**
+     * Removes all elements from the mapping of this Bundle.
+     */
+    void clear() {
+        unparcel();
+        mMap.clear();
+    }
+
+    /**
+     * Returns true if the given key is contained in the mapping
+     * of this Bundle.
+     *
+     * @param key a String key
+     * @return true if the key is part of the mapping, false otherwise
+     */
+    boolean containsKey(String key) {
+        unparcel();
+        return mMap.containsKey(key);
+    }
+
+    /**
+     * Returns the entry with the given key as an object.
+     *
+     * @param key a String key
+     * @return an Object, or null
+     */
+    Object get(String key) {
+        unparcel();
+        return mMap.get(key);
+    }
+
+    /**
+     * Removes any entry with the given key from the mapping of this Bundle.
+     *
+     * @param key a String key
+     */
+    void remove(String key) {
+        unparcel();
+        mMap.remove(key);
+    }
+
+    /**
+     * Inserts all mappings from the given PersistableBundle into this CommonBundle.
+     *
+     * @param bundle a PersistableBundle
+     */
+    void putAll(PersistableBundle bundle) {
+        unparcel();
+        bundle.unparcel();
+        mMap.putAll(bundle.mMap);
+    }
+
+    /**
+     * Returns a Set containing the Strings used as keys in this Bundle.
+     *
+     * @return a Set of String keys
+     */
+    Set<String> keySet() {
+        unparcel();
+        return mMap.keySet();
+    }
+
+    /**
+     * Inserts a Boolean value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a Boolean, or null
+     */
+    void putBoolean(String key, boolean value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a byte value into the mapping of this Bundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a byte
+     */
+    void putByte(String key, byte value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a char value into the mapping of this Bundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a char, or null
+     */
+    void putChar(String key, char value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a short value into the mapping of this Bundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a short
+     */
+    void putShort(String key, short value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts an int value into the mapping of this Bundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value an int, or null
+     */
+    void putInt(String key, int value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a long value into the mapping of this Bundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a long
+     */
+    void putLong(String key, long value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a float value into the mapping of this Bundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a float
+     */
+    void putFloat(String key, float value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a double value into the mapping of this Bundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a double
+     */
+    void putDouble(String key, double value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a String value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a String, or null
+     */
+    void putString(String key, String value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a CharSequence value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a CharSequence, or null
+     */
+    void putCharSequence(String key, CharSequence value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts an ArrayList<Integer> value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value an ArrayList<Integer> object, or null
+     */
+    void putIntegerArrayList(String key, ArrayList<Integer> value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts an ArrayList<String> value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value an ArrayList<String> object, or null
+     */
+    void putStringArrayList(String key, ArrayList<String> value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts an ArrayList<CharSequence> value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value an ArrayList<CharSequence> object, or null
+     */
+    void putCharSequenceArrayList(String key, ArrayList<CharSequence> value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a Serializable value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a Serializable object, or null
+     */
+    void putSerializable(String key, Serializable value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a boolean array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a boolean array object, or null
+     */
+    void putBooleanArray(String key, boolean[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a byte array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a byte array object, or null
+     */
+    void putByteArray(String key, byte[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a short array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a short array object, or null
+     */
+    void putShortArray(String key, short[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a char array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a char array object, or null
+     */
+    void putCharArray(String key, char[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts an int array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value an int array object, or null
+     */
+    void putIntArray(String key, int[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a long array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a long array object, or null
+     */
+    void putLongArray(String key, long[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a float array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a float array object, or null
+     */
+    void putFloatArray(String key, float[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a double array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a double array object, or null
+     */
+    void putDoubleArray(String key, double[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a String array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a String array object, or null
+     */
+    void putStringArray(String key, String[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a CharSequence array value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a CharSequence array object, or null
+     */
+    void putCharSequenceArray(String key, CharSequence[] value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Inserts a PersistableBundle value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a Bundle object, or null
+     */
+    void putPersistableBundle(String key, PersistableBundle value) {
+        unparcel();
+        mMap.put(key, value);
+    }
+
+    /**
+     * Returns the value associated with the given key, or false if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a boolean value
+     */
+    boolean getBoolean(String key) {
+        unparcel();
+        if (DEBUG) Log.d(TAG, "Getting boolean in "
+                + Integer.toHexString(System.identityHashCode(this)));
+        return getBoolean(key, false);
+    }
+
+    // Log a message if the value was non-null but not of the expected type
+    void typeWarning(String key, Object value, String className,
+            Object defaultValue, ClassCastException e) {
+        StringBuilder sb = new StringBuilder();
+        sb.append("Key ");
+        sb.append(key);
+        sb.append(" expected ");
+        sb.append(className);
+        sb.append(" but value was a ");
+        sb.append(value.getClass().getName());
+        sb.append(".  The default value ");
+        sb.append(defaultValue);
+        sb.append(" was returned.");
+        Log.w(TAG, sb.toString());
+        Log.w(TAG, "Attempt to cast generated internal exception:", e);
+    }
+
+    void typeWarning(String key, Object value, String className,
+            ClassCastException e) {
+        typeWarning(key, value, className, "<null>", e);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a boolean value
+     */
+    boolean getBoolean(String key, boolean defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Boolean) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Boolean", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or (byte) 0 if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a byte value
+     */
+    byte getByte(String key) {
+        unparcel();
+        return getByte(key, (byte) 0);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a byte value
+     */
+    Byte getByte(String key, byte defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Byte) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Byte", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or (char) 0 if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a char value
+     */
+    char getChar(String key) {
+        unparcel();
+        return getChar(key, (char) 0);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a char value
+     */
+    char getChar(String key, char defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Character) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Character", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or (short) 0 if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a short value
+     */
+    short getShort(String key) {
+        unparcel();
+        return getShort(key, (short) 0);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a short value
+     */
+    short getShort(String key, short defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Short) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Short", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0 if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return an int value
+     */
+    int getInt(String key) {
+        unparcel();
+        return getInt(key, 0);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return an int value
+     */
+    int getInt(String key, int defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Integer) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Integer", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0L if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a long value
+     */
+    long getLong(String key) {
+        unparcel();
+        return getLong(key, 0L);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a long value
+     */
+    long getLong(String key, long defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Long) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Long", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0.0f if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a float value
+     */
+    float getFloat(String key) {
+        unparcel();
+        return getFloat(key, 0.0f);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a float value
+     */
+    float getFloat(String key, float defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Float) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Float", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0.0 if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a double value
+     */
+    double getDouble(String key) {
+        unparcel();
+        return getDouble(key, 0.0);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a double value
+     */
+    double getDouble(String key, double defaultValue) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return defaultValue;
+        }
+        try {
+            return (Double) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Double", defaultValue, e);
+            return defaultValue;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a String value, or null
+     */
+    String getString(String key) {
+        unparcel();
+        final Object o = mMap.get(key);
+        try {
+            return (String) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "String", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String, or null
+     * @param defaultValue Value to return if key does not exist
+     * @return the String value associated with the given key, or defaultValue
+     *     if no valid String object is currently mapped to that key.
+     */
+    String getString(String key, String defaultValue) {
+        final String s = getString(key);
+        return (s == null) ? defaultValue : s;
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a CharSequence value, or null
+     */
+    CharSequence getCharSequence(String key) {
+        unparcel();
+        final Object o = mMap.get(key);
+        try {
+            return (CharSequence) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "CharSequence", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String, or null
+     * @param defaultValue Value to return if key does not exist
+     * @return the CharSequence value associated with the given key, or defaultValue
+     *     if no valid CharSequence object is currently mapped to that key.
+     */
+    CharSequence getCharSequence(String key, CharSequence defaultValue) {
+        final CharSequence cs = getCharSequence(key);
+        return (cs == null) ? defaultValue : cs;
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a Bundle value, or null
+     */
+    PersistableBundle getPersistableBundle(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (PersistableBundle) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Bundle", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a Serializable value, or null
+     */
+    Serializable getSerializable(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (Serializable) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "Serializable", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return an ArrayList<String> value, or null
+     */
+    ArrayList<Integer> getIntegerArrayList(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (ArrayList<Integer>) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "ArrayList<Integer>", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return an ArrayList<String> value, or null
+     */
+    ArrayList<String> getStringArrayList(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (ArrayList<String>) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "ArrayList<String>", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return an ArrayList<CharSequence> value, or null
+     */
+    ArrayList<CharSequence> getCharSequenceArrayList(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (ArrayList<CharSequence>) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "ArrayList<CharSequence>", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a boolean[] value, or null
+     */
+    boolean[] getBooleanArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (boolean[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "byte[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a byte[] value, or null
+     */
+    byte[] getByteArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (byte[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "byte[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a short[] value, or null
+     */
+    short[] getShortArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (short[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "short[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a char[] value, or null
+     */
+    char[] getCharArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (char[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "char[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return an int[] value, or null
+     */
+    int[] getIntArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (int[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "int[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a long[] value, or null
+     */
+    long[] getLongArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (long[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "long[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a float[] value, or null
+     */
+    float[] getFloatArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (float[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "float[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a double[] value, or null
+     */
+    double[] getDoubleArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (double[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "double[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a String[] value, or null
+     */
+    String[] getStringArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (String[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "String[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a CharSequence[] value, or null
+     */
+    CharSequence[] getCharSequenceArray(String key) {
+        unparcel();
+        Object o = mMap.get(key);
+        if (o == null) {
+            return null;
+        }
+        try {
+            return (CharSequence[]) o;
+        } catch (ClassCastException e) {
+            typeWarning(key, o, "CharSequence[]", e);
+            return null;
+        }
+    }
+
+    /**
+     * Writes the Bundle contents to a Parcel, typically in order for
+     * it to be passed through an IBinder connection.
+     * @param parcel The parcel to copy this bundle to.
+     */
+    void writeToParcelInner(Parcel parcel, int flags) {
+        if (mParcelledData != null) {
+            if (mParcelledData == EMPTY_PARCEL) {
+                parcel.writeInt(0);
+            } else {
+                int length = mParcelledData.dataSize();
+                parcel.writeInt(length);
+                parcel.writeInt(BUNDLE_MAGIC);
+                parcel.appendFrom(mParcelledData, 0, length);
+            }
+        } else {
+            // Special case for empty bundles.
+            if (mMap == null || mMap.size() <= 0) {
+                parcel.writeInt(0);
+                return;
+            }
+            int lengthPos = parcel.dataPosition();
+            parcel.writeInt(-1); // dummy, will hold length
+            parcel.writeInt(BUNDLE_MAGIC);
+
+            int startPos = parcel.dataPosition();
+            parcel.writeArrayMapInternal(mMap);
+            int endPos = parcel.dataPosition();
+
+            // Backpatch length
+            parcel.setDataPosition(lengthPos);
+            int length = endPos - startPos;
+            parcel.writeInt(length);
+            parcel.setDataPosition(endPos);
+        }
+    }
+
+    /**
+     * Reads the Parcel contents into this Bundle, typically in order for
+     * it to be passed through an IBinder connection.
+     * @param parcel The parcel to overwrite this bundle from.
+     */
+    void readFromParcelInner(Parcel parcel) {
+        int length = parcel.readInt();
+        if (length < 0) {
+            throw new RuntimeException("Bad length in parcel: " + length);
+        }
+        readFromParcelInner(parcel, length);
+    }
+
+    private void readFromParcelInner(Parcel parcel, int length) {
+        if (length == 0) {
+            // Empty Bundle or end of data.
+            mParcelledData = EMPTY_PARCEL;
+            return;
+        }
+        int magic = parcel.readInt();
+        if (magic != BUNDLE_MAGIC) {
+            //noinspection ThrowableInstanceNeverThrown
+            throw new IllegalStateException("Bad magic number for Bundle: 0x"
+                    + Integer.toHexString(magic));
+        }
+
+        // Advance within this Parcel
+        int offset = parcel.dataPosition();
+        parcel.setDataPosition(offset + length);
+
+        Parcel p = Parcel.obtain();
+        p.setDataPosition(0);
+        p.appendFrom(parcel, offset, length);
+        if (DEBUG) Log.d(TAG, "Retrieving "  + Integer.toHexString(System.identityHashCode(this))
+                + ": " + length + " bundle bytes starting at " + offset);
+        p.setDataPosition(0);
+
+        mParcelledData = p;
+    }
+}
diff --git a/core/java/android/os/CommonClock.java b/core/java/android/os/CommonClock.java
index 7f41c5d..f83a90b 100644
--- a/core/java/android/os/CommonClock.java
+++ b/core/java/android/os/CommonClock.java
@@ -15,16 +15,8 @@
  */
 package android.os;
 
-import java.net.InetAddress;
-import java.net.Inet4Address;
-import java.net.Inet6Address;
 import java.net.InetSocketAddress;
 import java.util.NoSuchElementException;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
 import android.os.Binder;
 import android.os.CommonTimeUtils;
 import android.os.IBinder;
diff --git a/core/java/android/os/CommonTimeConfig.java b/core/java/android/os/CommonTimeConfig.java
index 3355ee3..1f9fab5 100644
--- a/core/java/android/os/CommonTimeConfig.java
+++ b/core/java/android/os/CommonTimeConfig.java
@@ -15,7 +15,6 @@
  */
 package android.os;
 
-import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.util.NoSuchElementException;
 
diff --git a/core/java/android/os/Debug.java b/core/java/android/os/Debug.java
index 2de1204..18730b6 100644
--- a/core/java/android/os/Debug.java
+++ b/core/java/android/os/Debug.java
@@ -26,7 +26,6 @@
 import java.io.FileOutputStream;
 import java.io.FileReader;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
 import java.io.Reader;
 import java.lang.reflect.Field;
@@ -41,7 +40,6 @@
 import org.apache.harmony.dalvik.ddmc.DdmServer;
 
 import dalvik.bytecode.OpcodeInfo;
-import dalvik.bytecode.Opcodes;
 import dalvik.system.VMDebug;
 
 
diff --git a/core/java/android/os/DropBoxManager.java b/core/java/android/os/DropBoxManager.java
index e1c1678..27001dc 100644
--- a/core/java/android/os/DropBoxManager.java
+++ b/core/java/android/os/DropBoxManager.java
@@ -16,14 +16,11 @@
 
 package android.os;
 
-import android.util.Log;
-
 import com.android.internal.os.IDropBoxManagerService;
 
 import java.io.ByteArrayInputStream;
 import java.io.Closeable;
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.zip.GZIPInputStream;
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 7bf7367..e98a26b 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -16,14 +16,13 @@
 
 package android.os;
 
+import android.app.admin.DevicePolicyManager;
 import android.content.Context;
 import android.os.storage.IMountService;
-import android.os.storage.StorageManager;
 import android.os.storage.StorageVolume;
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.internal.annotations.GuardedBy;
 import com.google.android.collect.Lists;
 
 import java.io.File;
@@ -70,33 +69,6 @@
     private static UserEnvironment sCurrentUser;
     private static boolean sUserRequired;
 
-    private static final Object sLock = new Object();
-
-    @GuardedBy("sLock")
-    private static volatile StorageVolume sPrimaryVolume;
-
-    private static StorageVolume getPrimaryVolume() {
-        if (SystemProperties.getBoolean("config.disable_storage", false)) {
-            return null;
-        }
-
-        if (sPrimaryVolume == null) {
-            synchronized (sLock) {
-                if (sPrimaryVolume == null) {
-                    try {
-                        IMountService mountService = IMountService.Stub.asInterface(ServiceManager
-                                .getService("mount"));
-                        final StorageVolume[] volumes = mountService.getVolumeList();
-                        sPrimaryVolume = StorageManager.getPrimaryVolume(volumes);
-                    } catch (Exception e) {
-                        Log.e(TAG, "couldn't talk to MountService", e);
-                    }
-                }
-            }
-        }
-        return sPrimaryVolume;
-    }
-
     static {
         initForCurrentUser();
     }
@@ -105,10 +77,6 @@
     public static void initForCurrentUser() {
         final int userId = UserHandle.myUserId();
         sCurrentUser = new UserEnvironment(userId);
-
-        synchronized (sLock) {
-            sPrimaryVolume = null;
-        }
     }
 
     /** {@hide} */
@@ -241,7 +209,8 @@
     }
 
     /**
-     * Gets the Android root directory.
+     * Return root of the "system" partition holding the core Android OS.
+     * Always present and mounted read-only.
      */
     public static File getRootDirectory() {
         return DIR_ANDROID_ROOT;
@@ -626,28 +595,28 @@
      * Unknown storage state, such as when a path isn't backed by known storage
      * media.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_UNKNOWN = "unknown";
 
     /**
      * Storage state if the media is not present.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_REMOVED = "removed";
 
     /**
      * Storage state if the media is present but not mounted.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_UNMOUNTED = "unmounted";
 
     /**
      * Storage state if the media is present and being disk-checked.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_CHECKING = "checking";
 
@@ -655,7 +624,7 @@
      * Storage state if the media is present but is blank or is using an
      * unsupported filesystem.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_NOFS = "nofs";
 
@@ -663,7 +632,7 @@
      * Storage state if the media is present and mounted at its mount point with
      * read/write access.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_MOUNTED = "mounted";
 
@@ -671,7 +640,7 @@
      * Storage state if the media is present and mounted at its mount point with
      * read-only access.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_MOUNTED_READ_ONLY = "mounted_ro";
 
@@ -679,14 +648,14 @@
      * Storage state if the media is present not mounted, and shared via USB
      * mass storage.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_SHARED = "shared";
 
     /**
      * Storage state if the media was removed before it was unmounted.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_BAD_REMOVAL = "bad_removal";
 
@@ -694,7 +663,7 @@
      * Storage state if the media is present but cannot be mounted. Typically
      * this happens if the file system on the media is corrupted.
      *
-     * @see #getStorageState(File)
+     * @see #getExternalStorageState(File)
      */
     public static final String MEDIA_UNMOUNTABLE = "unmountable";
 
@@ -710,7 +679,15 @@
      */
     public static String getExternalStorageState() {
         final File externalDir = sCurrentUser.getExternalDirsForApp()[0];
-        return getStorageState(externalDir);
+        return getExternalStorageState(externalDir);
+    }
+
+    /**
+     * @deprecated use {@link #getExternalStorageState(File)}
+     */
+    @Deprecated
+    public static String getStorageState(File path) {
+        return getExternalStorageState(path);
     }
 
     /**
@@ -723,59 +700,81 @@
      *         {@link #MEDIA_MOUNTED_READ_ONLY}, {@link #MEDIA_SHARED},
      *         {@link #MEDIA_BAD_REMOVAL}, or {@link #MEDIA_UNMOUNTABLE}.
      */
-    public static String getStorageState(File path) {
-        final String rawPath;
-        try {
-            rawPath = path.getCanonicalPath();
-        } catch (IOException e) {
-            Log.w(TAG, "Failed to resolve target path: " + e);
-            return Environment.MEDIA_UNKNOWN;
-        }
-
-        try {
+    public static String getExternalStorageState(File path) {
+        final StorageVolume volume = getStorageVolume(path);
+        if (volume != null) {
             final IMountService mountService = IMountService.Stub.asInterface(
                     ServiceManager.getService("mount"));
-            final StorageVolume[] volumes = mountService.getVolumeList();
-            for (StorageVolume volume : volumes) {
-                if (rawPath.startsWith(volume.getPath())) {
-                    return mountService.getVolumeState(volume.getPath());
-                }
+            try {
+                return mountService.getVolumeState(volume.getPath());
+            } catch (RemoteException e) {
             }
-        } catch (RemoteException e) {
-            Log.w(TAG, "Failed to find external storage state: " + e);
         }
+
         return Environment.MEDIA_UNKNOWN;
     }
 
     /**
      * Returns whether the primary "external" storage device is removable.
-     * If true is returned, this device is for example an SD card that the
-     * user can remove.  If false is returned, the storage is built into
-     * the device and can not be physically removed.
      *
-     * <p>See {@link #getExternalStorageDirectory()} for more information.
+     * @return true if the storage device can be removed (such as an SD card),
+     *         or false if the storage device is built in and cannot be
+     *         physically removed.
      */
     public static boolean isExternalStorageRemovable() {
-        final StorageVolume primary = getPrimaryVolume();
-        return (primary != null && primary.isRemovable());
+        if (isStorageDisabled()) return false;
+        final File externalDir = sCurrentUser.getExternalDirsForApp()[0];
+        return isExternalStorageRemovable(externalDir);
     }
 
     /**
-     * Returns whether the device has an external storage device which is
-     * emulated. If true, the device does not have real external storage, and the directory
-     * returned by {@link #getExternalStorageDirectory()} will be allocated using a portion of
-     * the internal storage system.
+     * Returns whether the storage device that provides the given path is
+     * removable.
      *
-     * <p>Certain system services, such as the package manager, use this
-     * to determine where to install an application.
+     * @return true if the storage device can be removed (such as an SD card),
+     *         or false if the storage device is built in and cannot be
+     *         physically removed.
+     * @throws IllegalArgumentException if the path is not a valid storage
+     *             device.
+     */
+    public static boolean isExternalStorageRemovable(File path) {
+        final StorageVolume volume = getStorageVolume(path);
+        if (volume != null) {
+            return volume.isRemovable();
+        } else {
+            throw new IllegalArgumentException("Failed to find storage device at " + path);
+        }
+    }
+
+    /**
+     * Returns whether the primary "external" storage device is emulated. If
+     * true, data stored on this device will be stored on a portion of the
+     * internal storage system.
      *
-     * <p>Emulated external storage may also be encrypted - see
-     * {@link android.app.admin.DevicePolicyManager#setStorageEncryption(
-     * android.content.ComponentName, boolean)} for additional details.
+     * @see DevicePolicyManager#setStorageEncryption(android.content.ComponentName,
+     *      boolean)
      */
     public static boolean isExternalStorageEmulated() {
-        final StorageVolume primary = getPrimaryVolume();
-        return (primary != null && primary.isEmulated());
+        if (isStorageDisabled()) return false;
+        final File externalDir = sCurrentUser.getExternalDirsForApp()[0];
+        return isExternalStorageEmulated(externalDir);
+    }
+
+    /**
+     * Returns whether the storage device that provides the given path is
+     * emulated. If true, data stored on this device will be stored on a portion
+     * of the internal storage system.
+     *
+     * @throws IllegalArgumentException if the path is not a valid storage
+     *             device.
+     */
+    public static boolean isExternalStorageEmulated(File path) {
+        final StorageVolume volume = getStorageVolume(path);
+        if (volume != null) {
+            return volume.isEmulated();
+        } else {
+            throw new IllegalArgumentException("Failed to find storage device at " + path);
+        }
     }
 
     static File getDirectory(String variableName, String defaultPath) {
@@ -838,6 +837,32 @@
         return cur;
     }
 
+    private static boolean isStorageDisabled() {
+        return SystemProperties.getBoolean("config.disable_storage", false);
+    }
+
+    private static StorageVolume getStorageVolume(File path) {
+        try {
+            path = path.getCanonicalFile();
+        } catch (IOException e) {
+            return null;
+        }
+
+        try {
+            final IMountService mountService = IMountService.Stub.asInterface(
+                    ServiceManager.getService("mount"));
+            final StorageVolume[] volumes = mountService.getVolumeList();
+            for (StorageVolume volume : volumes) {
+                if (FileUtils.contains(volume.getPathFile(), path)) {
+                    return volume;
+                }
+            }
+        } catch (RemoteException e) {
+        }
+
+        return null;
+    }
+
     /**
      * If the given path exists on emulated external storage, return the
      * translated backing path hosted on internal storage. This bypasses any
diff --git a/core/java/android/os/FileObserver.java b/core/java/android/os/FileObserver.java
index d633486..4e705e0 100644
--- a/core/java/android/os/FileObserver.java
+++ b/core/java/android/os/FileObserver.java
@@ -18,10 +18,7 @@
 
 import android.util.Log;
 
-import com.android.internal.os.RuntimeInit;
-
 import java.lang.ref.WeakReference;
-import java.util.ArrayList;
 import java.util.HashMap;
 
 /**
diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java
index 3e0b54a..d71c3e6 100644
--- a/core/java/android/os/FileUtils.java
+++ b/core/java/android/os/FileUtils.java
@@ -22,8 +22,6 @@
 import android.util.Log;
 import android.util.Slog;
 
-import libcore.io.IoUtils;
-
 import java.io.BufferedInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -328,14 +326,15 @@
      *
      * @param minCount Always keep at least this many files.
      * @param minAge Always keep files younger than this age.
+     * @return if any files were deleted.
      */
-    public static void deleteOlderFiles(File dir, int minCount, long minAge) {
+    public static boolean deleteOlderFiles(File dir, int minCount, long minAge) {
         if (minCount < 0 || minAge < 0) {
             throw new IllegalArgumentException("Constraints must be positive or 0");
         }
 
         final File[] files = dir.listFiles();
-        if (files == null) return;
+        if (files == null) return false;
 
         // Sort with newest files first
         Arrays.sort(files, new Comparator<File>() {
@@ -346,16 +345,20 @@
         });
 
         // Keep at least minCount files
+        boolean deleted = false;
         for (int i = minCount; i < files.length; i++) {
             final File file = files[i];
 
             // Keep files newer than minAge
             final long age = System.currentTimeMillis() - file.lastModified();
             if (age > minAge) {
-                Log.d(TAG, "Deleting old file " + file);
-                file.delete();
+                if (file.delete()) {
+                    Log.d(TAG, "Deleted old file " + file);
+                    deleted = true;
+                }
             }
         }
+        return deleted;
     }
 
     /**
diff --git a/core/java/android/os/Handler.java b/core/java/android/os/Handler.java
index e6886c4d..44367f3 100644
--- a/core/java/android/os/Handler.java
+++ b/core/java/android/os/Handler.java
@@ -330,6 +330,7 @@
      * Causes the Runnable r to be added to the message queue, to be run
      * at a specific time given by <var>uptimeMillis</var>.
      * <b>The time-base is {@link android.os.SystemClock#uptimeMillis}.</b>
+     * Time spent in deep sleep will add an additional delay to execution.
      * The runnable will be run on the thread to which this handler is attached.
      *
      * @param r The Runnable that will be executed.
@@ -352,6 +353,7 @@
      * Causes the Runnable r to be added to the message queue, to be run
      * at a specific time given by <var>uptimeMillis</var>.
      * <b>The time-base is {@link android.os.SystemClock#uptimeMillis}.</b>
+     * Time spent in deep sleep will add an additional delay to execution.
      * The runnable will be run on the thread to which this handler is attached.
      *
      * @param r The Runnable that will be executed.
@@ -377,6 +379,8 @@
      * after the specified amount of time elapses.
      * The runnable will be run on the thread to which this handler
      * is attached.
+     * <b>The time-base is {@link android.os.SystemClock#uptimeMillis}.</b>
+     * Time spent in deep sleep will add an additional delay to execution.
      *  
      * @param r The Runnable that will be executed.
      * @param delayMillis The delay (in milliseconds) until the Runnable
@@ -570,6 +574,7 @@
      * Enqueue a message into the message queue after all pending messages
      * before the absolute time (in milliseconds) <var>uptimeMillis</var>.
      * <b>The time-base is {@link android.os.SystemClock#uptimeMillis}.</b>
+     * Time spent in deep sleep will add an additional delay to execution.
      * You will receive it in {@link #handleMessage}, in the thread attached
      * to this handler.
      * 
diff --git a/core/java/android/os/IBatteryPropertiesRegistrar.aidl b/core/java/android/os/IBatteryPropertiesRegistrar.aidl
index 376f6c9..fd01802 100644
--- a/core/java/android/os/IBatteryPropertiesRegistrar.aidl
+++ b/core/java/android/os/IBatteryPropertiesRegistrar.aidl
@@ -17,6 +17,7 @@
 package android.os;
 
 import android.os.IBatteryPropertiesListener;
+import android.os.BatteryProperty;
 
 /**
  * {@hide}
@@ -25,4 +26,5 @@
 interface IBatteryPropertiesRegistrar {
     void registerListener(IBatteryPropertiesListener listener);
     void unregisterListener(IBatteryPropertiesListener listener);
+    int getProperty(in int id, out BatteryProperty prop);
 }
diff --git a/core/java/android/os/IBinder.java b/core/java/android/os/IBinder.java
index a2432d6..73a0f65 100644
--- a/core/java/android/os/IBinder.java
+++ b/core/java/android/os/IBinder.java
@@ -17,7 +17,6 @@
 package android.os;
 
 import java.io.FileDescriptor;
-import java.io.PrintWriter;
 
 /**
  * Base interface for a remotable object, the core part of a lightweight
diff --git a/core/java/android/os/INetworkActivityListener.aidl b/core/java/android/os/INetworkActivityListener.aidl
new file mode 100644
index 0000000..24e6e55
--- /dev/null
+++ b/core/java/android/os/INetworkActivityListener.aidl
@@ -0,0 +1,24 @@
+/* Copyright 2013, 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 android.os;
+
+/**
+ * @hide
+ */
+oneway interface INetworkActivityListener
+{
+    void onNetworkActive();
+}
diff --git a/core/java/android/os/INetworkManagementService.aidl b/core/java/android/os/INetworkManagementService.aidl
index f65b6ba..f5ff185 100644
--- a/core/java/android/os/INetworkManagementService.aidl
+++ b/core/java/android/os/INetworkManagementService.aidl
@@ -23,6 +23,7 @@
 import android.net.NetworkStats;
 import android.net.RouteInfo;
 import android.net.wifi.WifiConfiguration;
+import android.os.INetworkActivityListener;
 
 /**
  * @hide
@@ -306,14 +307,12 @@
      * reference-counting if an idletimer already exists for given
      * {@code iface}.
      *
-     * {@code label} usually represents the network type of {@code iface}.
-     * Caller should ensure that {@code label} for an {@code iface} remains the
-     * same for all calls to addIdleTimer.
+     * {@code type} is the type of the interface, such as TYPE_MOBILE.
      *
      * Every {@code addIdleTimer} should be paired with a
      * {@link removeIdleTimer} to cleanup when the network disconnects.
      */
-    void addIdleTimer(String iface, int timeout, String label);
+    void addIdleTimer(String iface, int timeout, int type);
 
     /**
      * Removes idletimer for an interface.
@@ -441,4 +440,19 @@
      * Determine whether the clatd (464xlat) service has been started
      */
     boolean isClatdStarted();
+
+    /**
+     * Start listening for mobile activity state changes.
+     */
+    void registerNetworkActivityListener(INetworkActivityListener listener);
+
+    /**
+     * Stop listening for mobile activity state changes.
+     */
+    void unregisterNetworkActivityListener(INetworkActivityListener listener);
+
+    /**
+     * Check whether the mobile radio is currently active.
+     */
+    boolean isNetworkActive();
 }
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index 92af1a5..6c7b08d 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -23,14 +23,17 @@
 
 interface IPowerManager
 {
-    // WARNING: The first four methods must remain the first three methods because their
+    // WARNING: The first five methods must remain the first five methods because their
     // transaction numbers must not change unless IPowerManager.cpp is also updated.
-    void acquireWakeLock(IBinder lock, int flags, String tag, String packageName, in WorkSource ws);
-    void acquireWakeLockWithUid(IBinder lock, int flags, String tag, String packageName, int uidtoblame);
+    void acquireWakeLock(IBinder lock, int flags, String tag, String packageName, in WorkSource ws,
+            String historyTag);
+    void acquireWakeLockWithUid(IBinder lock, int flags, String tag, String packageName,
+            int uidtoblame);
     void releaseWakeLock(IBinder lock, int flags);
     void updateWakeLockUids(IBinder lock, in int[] uids);
+    oneway void powerHint(int hintId, int data);
 
-    void updateWakeLockWorkSource(IBinder lock, in WorkSource ws);
+    void updateWakeLockWorkSource(IBinder lock, in WorkSource ws, String historyTag);
     boolean isWakeLockLevelSupported(int level);
 
     void userActivity(long time, int event, int flags);
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index 3c9d0d9..899a958 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -28,11 +28,14 @@
  */
 interface IUserManager {
     UserInfo createUser(in String name, int flags);
+    UserInfo createProfileForUser(in String name, int flags, int userHandle);
+    void setUserEnabled(int userHandle);
     boolean removeUser(int userHandle);
     void setUserName(int userHandle, String name);
     void setUserIcon(int userHandle, in Bitmap icon);
     Bitmap getUserIcon(int userHandle);
     List<UserInfo> getUsers(boolean excludeDying);
+    List<UserInfo> getProfiles(int userHandle, boolean enabledOnly);
     UserInfo getUserInfo(int userHandle);
     boolean isRestricted();
     void setGuestEnabled(boolean enable);
diff --git a/core/java/android/os/IVibratorService.aidl b/core/java/android/os/IVibratorService.aidl
index 456ffb1..4d05e2d 100644
--- a/core/java/android/os/IVibratorService.aidl
+++ b/core/java/android/os/IVibratorService.aidl
@@ -20,8 +20,8 @@
 interface IVibratorService
 {
     boolean hasVibrator();
-    void vibrate(int uid, String packageName, long milliseconds, IBinder token);
-    void vibratePattern(int uid, String packageName, in long[] pattern, int repeat, IBinder token);
+    void vibrate(int uid, String opPkg, long milliseconds, int streamHint, IBinder token);
+    void vibratePattern(int uid, String opPkg, in long[] pattern, int repeat, int streamHint, IBinder token);
     void cancelVibrate(IBinder token);
 }
 
diff --git a/core/java/android/os/Looper.java b/core/java/android/os/Looper.java
index 21e9f6b..6d7c9cf 100644
--- a/core/java/android/os/Looper.java
+++ b/core/java/android/os/Looper.java
@@ -18,7 +18,6 @@
 
 import android.util.Log;
 import android.util.Printer;
-import android.util.PrefixPrinter;
 
 /**
   * Class used to run a message loop for a thread.  Threads by default do
@@ -150,7 +149,7 @@
                         + msg.callback + " what=" + msg.what);
             }
 
-            msg.recycle();
+            msg.recycleUnchecked();
         }
     }
 
diff --git a/core/java/android/os/Message.java b/core/java/android/os/Message.java
index 51203a48..d30bbc1 100644
--- a/core/java/android/os/Message.java
+++ b/core/java/android/os/Message.java
@@ -71,7 +71,14 @@
      */
     public Messenger replyTo;
 
-    /** If set message is in use */
+    /** If set message is in use.
+     * This flag is set when the message is enqueued and remains set while it
+     * is delivered and afterwards when it is recycled.  The flag is only cleared
+     * when a new message is created or obtained since that is the only time that
+     * applications are allowed to modify the contents of the message.
+     *
+     * It is an error to attempt to enqueue or recycle a message that is already in use.
+     */
     /*package*/ static final int FLAG_IN_USE = 1 << 0;
 
     /** If set message is asynchronous */
@@ -86,9 +93,9 @@
     
     /*package*/ Bundle data;
     
-    /*package*/ Handler target;     
+    /*package*/ Handler target;
     
-    /*package*/ Runnable callback;   
+    /*package*/ Runnable callback;
     
     // sometimes we store linked lists of these things
     /*package*/ Message next;
@@ -109,6 +116,7 @@
                 Message m = sPool;
                 sPool = m.next;
                 m.next = null;
+                m.flags = 0; // clear in-use flag
                 sPoolSize--;
                 return m;
             }
@@ -241,12 +249,38 @@
     }
 
     /**
-     * Return a Message instance to the global pool.  You MUST NOT touch
-     * the Message after calling this function -- it has effectively been
-     * freed.
+     * Return a Message instance to the global pool.
+     * <p>
+     * You MUST NOT touch the Message after calling this function because it has
+     * effectively been freed.  It is an error to recycle a message that is currently
+     * enqueued or that is in the process of being delivered to a Handler.
+     * </p>
      */
     public void recycle() {
-        clearForRecycle();
+        if (isInUse()) {
+            throw new IllegalStateException("This message cannot be recycled because it "
+                    + "is still in use.");
+        }
+        recycleUnchecked();
+    }
+
+    /**
+     * Recycles a Message that may be in-use.
+     * Used internally by the MessageQueue and Looper when disposing of queued Messages.
+     */
+    void recycleUnchecked() {
+        // Mark the message as in use while it remains in the recycled object pool.
+        // Clear out all other details.
+        flags = FLAG_IN_USE;
+        what = 0;
+        arg1 = 0;
+        arg2 = 0;
+        obj = null;
+        replyTo = null;
+        when = 0;
+        target = null;
+        callback = null;
+        data = null;
 
         synchronized (sPoolSync) {
             if (sPoolSize < MAX_POOL_SIZE) {
@@ -402,19 +436,6 @@
         }
     }
 
-    /*package*/ void clearForRecycle() {
-        flags = 0;
-        what = 0;
-        arg1 = 0;
-        arg2 = 0;
-        obj = null;
-        replyTo = null;
-        when = 0;
-        target = null;
-        callback = null;
-        data = null;
-    }
-
     /*package*/ boolean isInUse() {
         return ((flags & FLAG_IN_USE) == FLAG_IN_USE);
     }
diff --git a/core/java/android/os/MessageQueue.java b/core/java/android/os/MessageQueue.java
index 75f9813..01a23ce 100644
--- a/core/java/android/os/MessageQueue.java
+++ b/core/java/android/os/MessageQueue.java
@@ -16,7 +16,6 @@
 
 package android.os;
 
-import android.util.AndroidRuntimeException;
 import android.util.Log;
 import android.util.Printer;
 
@@ -126,6 +125,14 @@
     }
 
     Message next() {
+        // Return here if the message loop has already quit and been disposed.
+        // This can happen if the application tries to restart a looper after quit
+        // which is not supported.
+        final long ptr = mPtr;
+        if (ptr == 0) {
+            return null;
+        }
+
         int pendingIdleHandlerCount = -1; // -1 only during first iteration
         int nextPollTimeoutMillis = 0;
         for (;;) {
@@ -133,9 +140,7 @@
                 Binder.flushPendingCommands();
             }
 
-            // We can assume mPtr != 0 because the loop is obviously still running.
-            // The looper will not call this method after the loop quits.
-            nativePollOnce(mPtr, nextPollTimeoutMillis);
+            nativePollOnce(ptr, nextPollTimeoutMillis);
 
             synchronized (this) {
                 // Try to retrieve the next message.  Return if found.
@@ -163,7 +168,6 @@
                         }
                         msg.next = null;
                         if (false) Log.v("MessageQueue", "Returning message: " + msg);
-                        msg.markInUse();
                         return msg;
                     }
                 } else {
@@ -227,7 +231,7 @@
 
     void quit(boolean safe) {
         if (!mQuitAllowed) {
-            throw new RuntimeException("Main thread not allowed to quit.");
+            throw new IllegalStateException("Main thread not allowed to quit.");
         }
 
         synchronized (this) {
@@ -253,6 +257,7 @@
         synchronized (this) {
             final int token = mNextBarrierToken++;
             final Message msg = Message.obtain();
+            msg.markInUse();
             msg.when = when;
             msg.arg1 = token;
 
@@ -297,7 +302,7 @@
                 mMessages = p.next;
                 needWake = mMessages == null || mMessages.target != null;
             }
-            p.recycle();
+            p.recycleUnchecked();
 
             // If the loop is quitting then it is already awake.
             // We can assume mPtr != 0 when mQuitting is false.
@@ -308,21 +313,23 @@
     }
 
     boolean enqueueMessage(Message msg, long when) {
-        if (msg.isInUse()) {
-            throw new AndroidRuntimeException(msg + " This message is already in use.");
-        }
         if (msg.target == null) {
-            throw new AndroidRuntimeException("Message must have a target.");
+            throw new IllegalArgumentException("Message must have a target.");
+        }
+        if (msg.isInUse()) {
+            throw new IllegalStateException(msg + " This message is already in use.");
         }
 
         synchronized (this) {
             if (mQuitting) {
-                RuntimeException e = new RuntimeException(
+                IllegalStateException e = new IllegalStateException(
                         msg.target + " sending message to a Handler on a dead thread");
                 Log.w("MessageQueue", e.getMessage(), e);
+                msg.recycle();
                 return false;
             }
 
+            msg.markInUse();
             msg.when = when;
             Message p = mMessages;
             boolean needWake;
@@ -418,7 +425,7 @@
                    && (object == null || p.obj == object)) {
                 Message n = p.next;
                 mMessages = n;
-                p.recycle();
+                p.recycleUnchecked();
                 p = n;
             }
 
@@ -429,7 +436,7 @@
                     if (n.target == h && n.what == what
                         && (object == null || n.obj == object)) {
                         Message nn = n.next;
-                        n.recycle();
+                        n.recycleUnchecked();
                         p.next = nn;
                         continue;
                     }
@@ -452,7 +459,7 @@
                    && (object == null || p.obj == object)) {
                 Message n = p.next;
                 mMessages = n;
-                p.recycle();
+                p.recycleUnchecked();
                 p = n;
             }
 
@@ -463,7 +470,7 @@
                     if (n.target == h && n.callback == r
                         && (object == null || n.obj == object)) {
                         Message nn = n.next;
-                        n.recycle();
+                        n.recycleUnchecked();
                         p.next = nn;
                         continue;
                     }
@@ -486,7 +493,7 @@
                     && (object == null || p.obj == object)) {
                 Message n = p.next;
                 mMessages = n;
-                p.recycle();
+                p.recycleUnchecked();
                 p = n;
             }
 
@@ -496,7 +503,7 @@
                 if (n != null) {
                     if (n.target == h && (object == null || n.obj == object)) {
                         Message nn = n.next;
-                        n.recycle();
+                        n.recycleUnchecked();
                         p.next = nn;
                         continue;
                     }
@@ -510,7 +517,7 @@
         Message p = mMessages;
         while (p != null) {
             Message n = p.next;
-            p.recycle();
+            p.recycleUnchecked();
             p = n;
         }
         mMessages = null;
@@ -538,7 +545,7 @@
                 do {
                     p = n;
                     n = p.next;
-                    p.recycle();
+                    p.recycleUnchecked();
                 } while (n != null);
             }
         }
diff --git a/core/java/android/os/NullVibrator.java b/core/java/android/os/NullVibrator.java
index ac6027f..7b870ac 100644
--- a/core/java/android/os/NullVibrator.java
+++ b/core/java/android/os/NullVibrator.java
@@ -16,8 +16,6 @@
 
 package android.os;
 
-import android.util.Log;
-
 /**
  * Vibrator implementation that does nothing.
  *
@@ -38,22 +36,11 @@
         return false;
     }
 
-    @Override
-    public void vibrate(long milliseconds) {
-    }
-
-    @Override
-    public void vibrate(long[] pattern, int repeat) {
-        if (repeat >= pattern.length) {
-            throw new ArrayIndexOutOfBoundsException();
-        }
-    }
-
     /**
      * @hide
      */
     @Override
-    public void vibrate(int owningUid, String owningPackage, long milliseconds) {
+    public void vibrate(int uid, String opPkg, long milliseconds, int streamHint) {
         vibrate(milliseconds);
     }
 
@@ -61,8 +48,11 @@
      * @hide
      */
     @Override
-    public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat) {
-        vibrate(pattern, repeat);
+    public void vibrate(int uid, String opPkg, long[] pattern, int repeat,
+            int streamHint) {
+        if (repeat >= pattern.length) {
+            throw new ArrayIndexOutOfBoundsException();
+        }
     }
 
     @Override
diff --git a/core/java/android/os/Parcel.java b/core/java/android/os/Parcel.java
index 7425f67..95cb9f3 100644
--- a/core/java/android/os/Parcel.java
+++ b/core/java/android/os/Parcel.java
@@ -29,6 +29,7 @@
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
 import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -222,6 +223,7 @@
     private static final int VAL_SPARSEBOOLEANARRAY = 22;
     private static final int VAL_BOOLEANARRAY = 23;
     private static final int VAL_CHARSEQUENCEARRAY = 24;
+    private static final int VAL_PERSISTABLEBUNDLE = 25;
 
     // The initial int32 in a Binder call's reply Parcel header:
     private static final int EX_SECURITY = -1;
@@ -637,6 +639,19 @@
     }
 
     /**
+     * Flatten a PersistableBundle into the parcel at the current dataPosition(),
+     * growing dataCapacity() if needed.
+     */
+    public final void writePersistableBundle(PersistableBundle val) {
+        if (val == null) {
+            writeInt(-1);
+            return;
+        }
+
+        val.writeToParcel(this, 0);
+    }
+
+    /**
      * Flatten a List into the parcel at the current dataPosition(), growing
      * dataCapacity() if needed.  The List values are written using
      * {@link #writeValue} and must follow the specification there.
@@ -1255,6 +1270,9 @@
         } else if (v instanceof Byte) {
             writeInt(VAL_BYTE);
             writeInt((Byte) v);
+        } else if (v instanceof PersistableBundle) {
+            writeInt(VAL_PERSISTABLEBUNDLE);
+            writePersistableBundle((PersistableBundle) v);
         } else {
             Class<?> clazz = v.getClass();
             if (clazz.isArray() && clazz.getComponentType() == Object.class) {
@@ -1632,6 +1650,35 @@
     }
 
     /**
+     * Read and return a new Bundle object from the parcel at the current
+     * dataPosition().  Returns null if the previously written Bundle object was
+     * null.
+     */
+    public final PersistableBundle readPersistableBundle() {
+        return readPersistableBundle(null);
+    }
+
+    /**
+     * Read and return a new Bundle object from the parcel at the current
+     * dataPosition(), using the given class loader to initialize the class
+     * loader of the Bundle for later retrieval of Parcelable objects.
+     * Returns null if the previously written Bundle object was null.
+     */
+    public final PersistableBundle readPersistableBundle(ClassLoader loader) {
+        int length = readInt();
+        if (length < 0) {
+            if (Bundle.DEBUG) Log.d(TAG, "null bundle: length=" + length);
+            return null;
+        }
+
+        final PersistableBundle bundle = new PersistableBundle(this, length);
+        if (loader != null) {
+            bundle.setClassLoader(loader);
+        }
+        return bundle;
+    }
+
+    /**
      * Read and return a byte[] object from the parcel.
      */
     public final byte[] createByteArray() {
@@ -2067,7 +2114,7 @@
             return readByte();
 
         case VAL_SERIALIZABLE:
-            return readSerializable();
+            return readSerializable(loader);
 
         case VAL_PARCELABLEARRAY:
             return readParcelableArray(loader);
@@ -2081,6 +2128,9 @@
         case VAL_BUNDLE:
             return readBundle(loader); // loading will be deferred
 
+        case VAL_PERSISTABLEBUNDLE:
+            return readPersistableBundle(loader);
+
         default:
             int off = dataPosition() - 4;
             throw new RuntimeException(
@@ -2204,6 +2254,10 @@
      * wasn't found in the parcel.
      */
     public final Serializable readSerializable() {
+        return readSerializable(null);
+    }
+
+    private final Serializable readSerializable(final ClassLoader loader) {
         String name = readString();
         if (name == null) {
             // For some reason we were unable to read the name of the Serializable (either there
@@ -2215,14 +2269,27 @@
         byte[] serializedData = createByteArray();
         ByteArrayInputStream bais = new ByteArrayInputStream(serializedData);
         try {
-            ObjectInputStream ois = new ObjectInputStream(bais);
+            ObjectInputStream ois = new ObjectInputStream(bais) {
+                @Override
+                protected Class<?> resolveClass(ObjectStreamClass osClass)
+                        throws IOException, ClassNotFoundException {
+                    // try the custom classloader if provided
+                    if (loader != null) {
+                        Class<?> c = Class.forName(osClass.getName(), false, loader);
+                        if (c != null) {
+                            return c;
+                        }
+                    }
+                    return super.resolveClass(osClass);
+                }
+            };
             return (Serializable) ois.readObject();
         } catch (IOException ioe) {
             throw new RuntimeException("Parcelable encountered " +
                 "IOException reading a Serializable object (name = " + name +
                 ")", ioe);
         } catch (ClassNotFoundException cnfe) {
-            throw new RuntimeException("Parcelable encountered" +
+            throw new RuntimeException("Parcelable encountered " +
                 "ClassNotFoundException reading a Serializable object (name = "
                 + name + ")", cnfe);
         }
@@ -2234,6 +2301,7 @@
     private static final HashMap<ClassLoader,HashMap<String,Parcelable.Creator>>
         mCreators = new HashMap<ClassLoader,HashMap<String,Parcelable.Creator>>();
 
+    /** @hide for internal use only. */
     static protected final Parcel obtain(int obj) {
         throw new UnsupportedOperationException();
     }
diff --git a/core/java/android/os/ParcelFileDescriptor.java b/core/java/android/os/ParcelFileDescriptor.java
index 59795da..c6b2151 100644
--- a/core/java/android/os/ParcelFileDescriptor.java
+++ b/core/java/android/os/ParcelFileDescriptor.java
@@ -879,6 +879,8 @@
      */
     @Override
     public void writeToParcel(Parcel out, int flags) {
+        // WARNING: This must stay in sync with Parcel::readParcelFileDescriptor()
+        // in frameworks/native/libs/binder/Parcel.cpp
         if (mWrapped != null) {
             try {
                 mWrapped.writeToParcel(out, flags);
@@ -904,6 +906,8 @@
             = new Parcelable.Creator<ParcelFileDescriptor>() {
         @Override
         public ParcelFileDescriptor createFromParcel(Parcel in) {
+            // WARNING: This must stay in sync with Parcel::writeParcelFileDescriptor()
+            // in frameworks/native/libs/binder/Parcel.cpp
             final FileDescriptor fd = in.readRawFileDescriptor();
             FileDescriptor commChannel = null;
             if (in.readInt() != 0) {
diff --git a/core/java/android/os/PersistableBundle.java b/core/java/android/os/PersistableBundle.java
new file mode 100644
index 0000000..c2cd3be
--- /dev/null
+++ b/core/java/android/os/PersistableBundle.java
@@ -0,0 +1,555 @@
+/*
+ * Copyright (C) 2014 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 android.os;
+
+import android.util.ArrayMap;
+
+import java.util.Set;
+
+/**
+ * A mapping from String values to various types that can be saved to persistent and later
+ * restored.
+ *
+ */
+public final class PersistableBundle extends CommonBundle {
+    public static final PersistableBundle EMPTY;
+    static final Parcel EMPTY_PARCEL;
+
+    static {
+        EMPTY = new PersistableBundle();
+        EMPTY.mMap = ArrayMap.EMPTY;
+        EMPTY_PARCEL = CommonBundle.EMPTY_PARCEL;
+    }
+
+    /**
+     * Constructs a new, empty PersistableBundle.
+     */
+    public PersistableBundle() {
+        super();
+    }
+
+    /**
+     * Constructs a PersistableBundle whose data is stored as a Parcel.  The data
+     * will be unparcelled on first contact, using the assigned ClassLoader.
+     *
+     * @param parcelledData a Parcel containing a PersistableBundle
+     */
+    PersistableBundle(Parcel parcelledData) {
+        super(parcelledData);
+    }
+
+    /* package */ PersistableBundle(Parcel parcelledData, int length) {
+        super(parcelledData, length);
+    }
+
+    /**
+     * Constructs a new, empty PersistableBundle that uses a specific ClassLoader for
+     * instantiating Parcelable and Serializable objects.
+     *
+     * @param loader An explicit ClassLoader to use when instantiating objects
+     * inside of the PersistableBundle.
+     */
+    public PersistableBundle(ClassLoader loader) {
+        super(loader);
+    }
+
+    /**
+     * Constructs a new, empty PersistableBundle sized to hold the given number of
+     * elements. The PersistableBundle will grow as needed.
+     *
+     * @param capacity the initial capacity of the PersistableBundle
+     */
+    public PersistableBundle(int capacity) {
+        super(capacity);
+    }
+
+    /**
+     * Constructs a PersistableBundle containing a copy of the mappings from the given
+     * PersistableBundle.
+     *
+     * @param b a PersistableBundle to be copied.
+     */
+    public PersistableBundle(PersistableBundle b) {
+        super(b);
+    }
+
+    /**
+     * Make a PersistableBundle for a single key/value pair.
+     *
+     * @hide
+     */
+    public static PersistableBundle forPair(String key, String value) {
+        PersistableBundle b = new PersistableBundle(1);
+        b.putString(key, value);
+        return b;
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public String getPairValue() {
+        return super.getPairValue();
+    }
+
+    /**
+     * Changes the ClassLoader this PersistableBundle uses when instantiating objects.
+     *
+     * @param loader An explicit ClassLoader to use when instantiating objects
+     * inside of the PersistableBundle.
+     */
+    @Override
+    public void setClassLoader(ClassLoader loader) {
+        super.setClassLoader(loader);
+    }
+
+    /**
+     * Return the ClassLoader currently associated with this PersistableBundle.
+     */
+    @Override
+    public ClassLoader getClassLoader() {
+        return super.getClassLoader();
+    }
+
+    /**
+     * Clones the current PersistableBundle. The internal map is cloned, but the keys and
+     * values to which it refers are copied by reference.
+     */
+    @Override
+    public Object clone() {
+        return new PersistableBundle(this);
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public boolean isParcelled() {
+        return super.isParcelled();
+    }
+
+    /**
+     * Returns the number of mappings contained in this PersistableBundle.
+     *
+     * @return the number of mappings as an int.
+     */
+    @Override
+    public int size() {
+        return super.size();
+    }
+
+    /**
+     * Returns true if the mapping of this PersistableBundle is empty, false otherwise.
+     */
+    @Override
+    public boolean isEmpty() {
+        return super.isEmpty();
+    }
+
+    /**
+     * Removes all elements from the mapping of this PersistableBundle.
+     */
+    @Override
+    public void clear() {
+        super.clear();
+    }
+
+    /**
+     * Returns true if the given key is contained in the mapping
+     * of this PersistableBundle.
+     *
+     * @param key a String key
+     * @return true if the key is part of the mapping, false otherwise
+     */
+    @Override
+    public boolean containsKey(String key) {
+        return super.containsKey(key);
+    }
+
+    /**
+     * Returns the entry with the given key as an object.
+     *
+     * @param key a String key
+     * @return an Object, or null
+     */
+    @Override
+    public Object get(String key) {
+        return super.get(key);
+    }
+
+    /**
+     * Removes any entry with the given key from the mapping of this PersistableBundle.
+     *
+     * @param key a String key
+     */
+    @Override
+    public void remove(String key) {
+        super.remove(key);
+    }
+
+    /**
+     * Inserts all mappings from the given PersistableBundle into this Bundle.
+     *
+     * @param bundle a PersistableBundle
+     */
+    public void putAll(PersistableBundle bundle) {
+        super.putAll(bundle);
+    }
+
+    /**
+     * Returns a Set containing the Strings used as keys in this PersistableBundle.
+     *
+     * @return a Set of String keys
+     */
+    @Override
+    public Set<String> keySet() {
+        return super.keySet();
+    }
+
+    /**
+     * Inserts an int value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value an int, or null
+     */
+    @Override
+    public void putInt(String key, int value) {
+        super.putInt(key, value);
+    }
+
+    /**
+     * Inserts a long value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a long
+     */
+    @Override
+    public void putLong(String key, long value) {
+        super.putLong(key, value);
+    }
+
+    /**
+     * Inserts a double value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.
+     *
+     * @param key a String, or null
+     * @param value a double
+     */
+    @Override
+    public void putDouble(String key, double value) {
+        super.putDouble(key, value);
+    }
+
+    /**
+     * Inserts a String value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a String, or null
+     */
+    @Override
+    public void putString(String key, String value) {
+        super.putString(key, value);
+    }
+
+    /**
+     * Inserts an int array value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value an int array object, or null
+     */
+    @Override
+    public void putIntArray(String key, int[] value) {
+        super.putIntArray(key, value);
+    }
+
+    /**
+     * Inserts a long array value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a long array object, or null
+     */
+    @Override
+    public void putLongArray(String key, long[] value) {
+        super.putLongArray(key, value);
+    }
+
+    /**
+     * Inserts a double array value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a double array object, or null
+     */
+    @Override
+    public void putDoubleArray(String key, double[] value) {
+        super.putDoubleArray(key, value);
+    }
+
+    /**
+     * Inserts a String array value into the mapping of this PersistableBundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a String array object, or null
+     */
+    @Override
+    public void putStringArray(String key, String[] value) {
+        super.putStringArray(key, value);
+    }
+
+    /**
+     * Inserts a PersistableBundle value into the mapping of this Bundle, replacing
+     * any existing value for the given key.  Either key or value may be null.
+     *
+     * @param key a String, or null
+     * @param value a Bundle object, or null
+     */
+    public void putPersistableBundle(String key, PersistableBundle value) {
+        super.putPersistableBundle(key, value);
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0 if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return an int value
+     */
+    @Override
+    public int getInt(String key) {
+        return super.getInt(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return an int value
+     */
+    @Override
+    public int getInt(String key, int defaultValue) {
+        return super.getInt(key, defaultValue);
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0L if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a long value
+     */
+    @Override
+    public long getLong(String key) {
+        return super.getLong(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a long value
+     */
+    @Override
+    public long getLong(String key, long defaultValue) {
+        return super.getLong(key, defaultValue);
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0.0 if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @return a double value
+     */
+    @Override
+    public double getDouble(String key) {
+        return super.getDouble(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String
+     * @param defaultValue Value to return if key does not exist
+     * @return a double value
+     */
+    @Override
+    public double getDouble(String key, double defaultValue) {
+        return super.getDouble(key, defaultValue);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a String value, or null
+     */
+    @Override
+    public String getString(String key) {
+        return super.getString(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or defaultValue if
+     * no mapping of the desired type exists for the given key.
+     *
+     * @param key a String, or null
+     * @param defaultValue Value to return if key does not exist
+     * @return the String value associated with the given key, or defaultValue
+     *     if no valid String object is currently mapped to that key.
+     */
+    @Override
+    public String getString(String key, String defaultValue) {
+        return super.getString(key, defaultValue);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a Bundle value, or null
+     */
+    @Override
+    public PersistableBundle getPersistableBundle(String key) {
+        return super.getPersistableBundle(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return an int[] value, or null
+     */
+    @Override
+    public int[] getIntArray(String key) {
+        return super.getIntArray(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a long[] value, or null
+     */
+    @Override
+    public long[] getLongArray(String key) {
+        return super.getLongArray(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a double[] value, or null
+     */
+    @Override
+    public double[] getDoubleArray(String key) {
+        return super.getDoubleArray(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if
+     * no mapping of the desired type exists for the given key or a null
+     * value is explicitly associated with the key.
+     *
+     * @param key a String, or null
+     * @return a String[] value, or null
+     */
+    @Override
+    public String[] getStringArray(String key) {
+        return super.getStringArray(key);
+    }
+
+    public static final Parcelable.Creator<PersistableBundle> CREATOR =
+            new Parcelable.Creator<PersistableBundle>() {
+                @Override
+                public PersistableBundle createFromParcel(Parcel in) {
+                    return in.readPersistableBundle();
+                }
+
+                @Override
+                public PersistableBundle[] newArray(int size) {
+                    return new PersistableBundle[size];
+                }
+            };
+
+    /**
+     * Report the nature of this Parcelable's contents
+     */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * Writes the PersistableBundle contents to a Parcel, typically in order for
+     * it to be passed through an IBinder connection.
+     * @param parcel The parcel to copy this bundle to.
+     */
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        final boolean oldAllowFds = parcel.pushAllowFds(false);
+        try {
+            super.writeToParcelInner(parcel, flags);
+        } finally {
+            parcel.restoreAllowFds(oldAllowFds);
+        }
+    }
+
+    /**
+     * Reads the Parcel contents into this PersistableBundle, typically in order for
+     * it to be passed through an IBinder connection.
+     * @param parcel The parcel to overwrite this bundle from.
+     */
+    public void readFromParcel(Parcel parcel) {
+        super.readFromParcelInner(parcel);
+    }
+
+    @Override
+    synchronized public String toString() {
+        if (mParcelledData != null) {
+            if (mParcelledData == EMPTY_PARCEL) {
+                return "PersistableBundle[EMPTY_PARCEL]";
+            } else {
+                return "PersistableBundle[mParcelledData.dataSize=" +
+                        mParcelledData.dataSize() + "]";
+            }
+        }
+        return "PersistableBundle[" + mMap.toString() + "]";
+    }
+
+}
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 646bfef..f8d7c3e 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -235,6 +235,13 @@
     public static final int ON_AFTER_RELEASE = 0x20000000;
 
     /**
+     * Wake lock flag: This wake lock is not important for logging events.  If a later
+     * wake lock is acquired that is important, it will be considered the one to log.
+     * @hide
+     */
+    public static final int UNIMPORTANT_FOR_LOGGING = 0x40000000;
+
+    /**
      * Flag for {@link WakeLock#release release(int)} to defer releasing a
      * {@link #PROXIMITY_SCREEN_OFF_WAKE_LOCK} wake lock until the proximity sensor returns
      * a negative value.
@@ -302,6 +309,18 @@
      */
     public static final int GO_TO_SLEEP_REASON_TIMEOUT = 2;
 
+    /**
+     * The value to pass as the 'reason' argument to reboot() to
+     * reboot into recovery mode (for applying system updates, doing
+     * factory resets, etc.).
+     * <p>
+     * Requires the {@link android.Manifest.permission#RECOVERY}
+     * permission (in addition to
+     * {@link android.Manifest.permission#REBOOT}).
+     * </p>
+     */
+    public static final String REBOOT_RECOVERY = "recovery";
+    
     final Context mContext;
     final IPowerManager mService;
     final Handler mHandler;
@@ -678,14 +697,15 @@
      * </p>
      */
     public final class WakeLock {
-        private final int mFlags;
-        private final String mTag;
+        private int mFlags;
+        private String mTag;
         private final String mPackageName;
         private final IBinder mToken;
         private int mCount;
         private boolean mRefCounted = true;
         private boolean mHeld;
         private WorkSource mWorkSource;
+        private String mHistoryTag;
 
         private final Runnable mReleaser = new Runnable() {
             public void run() {
@@ -772,7 +792,8 @@
                 // been explicitly released by the keyguard.
                 mHandler.removeCallbacks(mReleaser);
                 try {
-                    mService.acquireWakeLock(mToken, mFlags, mTag, mPackageName, mWorkSource);
+                    mService.acquireWakeLock(mToken, mFlags, mTag, mPackageName, mWorkSource,
+                            mHistoryTag);
                 } catch (RemoteException e) {
                 }
                 mHeld = true;
@@ -866,13 +887,29 @@
 
                 if (changed && mHeld) {
                     try {
-                        mService.updateWakeLockWorkSource(mToken, mWorkSource);
+                        mService.updateWakeLockWorkSource(mToken, mWorkSource, mHistoryTag);
                     } catch (RemoteException e) {
                     }
                 }
             }
         }
 
+        /** @hide */
+        public void setTag(String tag) {
+            mTag = tag;
+        }
+
+        /** @hide */
+        public void setHistoryTag(String tag) {
+            mHistoryTag = tag;
+        }
+
+        /** @hide */
+        public void setUnimportantForLogging(boolean state) {
+            if (state) mFlags |= UNIMPORTANT_FOR_LOGGING;
+            else mFlags &= ~UNIMPORTANT_FOR_LOGGING;
+        }
+
         @Override
         public String toString() {
             synchronized (mToken) {
diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java
index f671ed9..cdde4c7 100644
--- a/core/java/android/os/RecoverySystem.java
+++ b/core/java/android/os/RecoverySystem.java
@@ -375,6 +375,7 @@
         final ConditionVariable condition = new ConditionVariable();
 
         Intent intent = new Intent("android.intent.action.MASTER_CLEAR_NOTIFICATION");
+        intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
         context.sendOrderedBroadcastAsUser(intent, UserHandle.OWNER,
                 android.Manifest.permission.MASTER_CLEAR,
                 new BroadcastReceiver() {
diff --git a/core/java/android/os/Registrant.java b/core/java/android/os/Registrant.java
index c1780b9..705cc5d 100644
--- a/core/java/android/os/Registrant.java
+++ b/core/java/android/os/Registrant.java
@@ -20,7 +20,6 @@
 import android.os.Message;
 
 import java.lang.ref.WeakReference;
-import java.util.HashMap;
 
 /** @hide */
 public class Registrant
diff --git a/core/java/android/os/RegistrantList.java b/core/java/android/os/RegistrantList.java
index 56b9e2b..9ab61f5 100644
--- a/core/java/android/os/RegistrantList.java
+++ b/core/java/android/os/RegistrantList.java
@@ -17,10 +17,8 @@
 package android.os;
 
 import android.os.Handler;         
-import android.os.Message;         
 
 import java.util.ArrayList;
-import java.util.HashMap;
 
 /** @hide */
 public class RegistrantList
diff --git a/core/java/android/os/SystemProperties.java b/core/java/android/os/SystemProperties.java
index 156600e..1479035 100644
--- a/core/java/android/os/SystemProperties.java
+++ b/core/java/android/os/SystemProperties.java
@@ -18,8 +18,6 @@
 
 import java.util.ArrayList;
 
-import android.util.Log;
-
 
 /**
  * Gives access to the system properties store.  The system properties
diff --git a/core/java/android/os/SystemService.java b/core/java/android/os/SystemService.java
index f345271..41e7546 100644
--- a/core/java/android/os/SystemService.java
+++ b/core/java/android/os/SystemService.java
@@ -16,8 +16,6 @@
 
 package android.os;
 
-import android.util.Slog;
-
 import com.google.android.collect.Maps;
 
 import java.util.HashMap;
diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java
index 700f80d..8d9cf54 100644
--- a/core/java/android/os/SystemVibrator.java
+++ b/core/java/android/os/SystemVibrator.java
@@ -16,7 +16,6 @@
 
 package android.os;
 
-import android.app.ActivityThread;
 import android.content.Context;
 import android.util.Log;
 
@@ -28,18 +27,16 @@
 public class SystemVibrator extends Vibrator {
     private static final String TAG = "Vibrator";
 
-    private final String mPackageName;
     private final IVibratorService mService;
     private final Binder mToken = new Binder();
 
     public SystemVibrator() {
-        mPackageName = ActivityThread.currentPackageName();
         mService = IVibratorService.Stub.asInterface(
                 ServiceManager.getService("vibrator"));
     }
 
     public SystemVibrator(Context context) {
-        mPackageName = context.getOpPackageName();
+        super(context);
         mService = IVibratorService.Stub.asInterface(
                 ServiceManager.getService("vibrator"));
     }
@@ -57,27 +54,17 @@
         return false;
     }
 
-    @Override
-    public void vibrate(long milliseconds) {
-        vibrate(Process.myUid(), mPackageName, milliseconds);
-    }
-
-    @Override
-    public void vibrate(long[] pattern, int repeat) {
-        vibrate(Process.myUid(), mPackageName, pattern, repeat);
-    }
-
     /**
      * @hide
      */
     @Override
-    public void vibrate(int owningUid, String owningPackage, long milliseconds) {
+    public void vibrate(int uid, String opPkg, long milliseconds, int streamHint) {
         if (mService == null) {
             Log.w(TAG, "Failed to vibrate; no vibrator service.");
             return;
         }
         try {
-            mService.vibrate(owningUid, owningPackage, milliseconds, mToken);
+            mService.vibrate(uid, opPkg, milliseconds, streamHint, mToken);
         } catch (RemoteException e) {
             Log.w(TAG, "Failed to vibrate.", e);
         }
@@ -87,7 +74,8 @@
      * @hide
      */
     @Override
-    public void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat) {
+    public void vibrate(int uid, String opPkg, long[] pattern, int repeat,
+            int streamHint) {
         if (mService == null) {
             Log.w(TAG, "Failed to vibrate; no vibrator service.");
             return;
@@ -97,7 +85,8 @@
         // anyway
         if (repeat < pattern.length) {
             try {
-                mService.vibratePattern(owningUid, owningPackage, pattern, repeat, mToken);
+                mService.vibratePattern(uid, opPkg, pattern, repeat, streamHint,
+                        mToken);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed to vibrate.", e);
             }
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 3249bcb..57ed979 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -16,8 +16,6 @@
 
 package android.os;
 
-import android.util.Log;
-
 /**
  * Writes trace events to the system trace buffer.  These trace events can be
  * collected and visualized using the Systrace tool.
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index a3752a1..1b2b798 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -17,14 +17,19 @@
 
 import android.app.ActivityManagerNative;
 import android.content.Context;
-import android.content.RestrictionEntry;
 import android.content.pm.UserInfo;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Bitmap.Config;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
 import android.util.Log;
 
 import com.android.internal.R;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -165,11 +170,13 @@
 
     /**
      * Returns whether the system supports multiple users.
-     * @return true if multiple users can be created, false if it is a single user device.
+     * @return true if multiple users can be created by user, false if it is a single user device.
      * @hide
      */
     public static boolean supportsMultipleUsers() {
-        return getMaxSupportedUsers() > 1;
+        return getMaxSupportedUsers() > 1
+                && SystemProperties.getBoolean("fw.show_multiuserui",
+                Resources.getSystem().getBoolean(R.bool.config_enableMultiUserUI));
     }
 
     /**
@@ -329,7 +336,7 @@
     /**
      * @hide
      * Sets the value of a specific restriction on a specific user.
-     * Requires the {@link android.Manifest.permission#MANAGE_USERS} permission.
+     * Requires the MANAGE_USERS permission.
      * @param key the key of the restriction
      * @param value the value for the restriction
      * @param userHandle the user whose restriction is to be changed.
@@ -409,6 +416,43 @@
     }
 
     /**
+     * Creates a user with the specified name and options as a profile of another user.
+     * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+     *
+     * @param name the user's name
+     * @param flags flags that identify the type of user and other properties.
+     * @see UserInfo
+     * @param userHandle new user will be a profile of this use.
+     *
+     * @return the UserInfo object for the created user, or null if the user could not be created.
+     * @hide
+     */
+    public UserInfo createProfileForUser(String name, int flags, int userHandle) {
+        try {
+            return mService.createProfileForUser(name, flags, userHandle);
+        } catch (RemoteException re) {
+            Log.w(TAG, "Could not create a user", re);
+            return null;
+        }
+    }
+
+    /**
+     * Sets the user as enabled, if such an user exists.
+     * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+     * Note that the default is true, it's only that managed profiles might not be enabled.
+     *
+     * @param userHandle the id of the profile to enable
+     * @hide
+     */
+    public void setUserEnabled(int userHandle) {
+        try {
+            mService.setUserEnabled(userHandle);
+        } catch (RemoteException e) {
+            Log.w(TAG, "Could not enable the profile", e);
+        }
+    }
+
+    /**
      * Return the number of users currently created on the device.
      */
     public int getUserCount() {
@@ -432,9 +476,105 @@
     }
 
     /**
-     * Returns information for all users on this device.
+     * Returns list of the profiles of userHandle including
+     * userHandle itself.
+     * Note that it this returns both enabled and not enabled profiles. See
+     * {@link #getUserProfiles()} if you need only the enabled ones.
+     *
      * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
-     * @param excludeDying specify if the list should exclude users being removed.
+     * @param userHandle profiles of this user will be returned.
+     * @return the list of profiles.
+     * @hide
+     */
+    public List<UserInfo> getProfiles(int userHandle) {
+        try {
+            return mService.getProfiles(userHandle, false /* enabledOnly */);
+        } catch (RemoteException re) {
+            Log.w(TAG, "Could not get user list", re);
+            return null;
+        }
+    }
+
+    /**
+     * Returns a list of UserHandles for profiles associated with this user, including this user.
+     *
+     * @return A non-empty list of UserHandles associated with the calling user.
+     */
+    public List<UserHandle> getUserProfiles() {
+        ArrayList<UserHandle> profiles = new ArrayList<UserHandle>();
+        List<UserInfo> users = new ArrayList<UserInfo>();
+        try {
+            users = mService.getProfiles(UserHandle.myUserId(), true /* enabledOnly */);
+        } catch (RemoteException re) {
+            Log.w(TAG, "Could not get user list", re);
+            return null;
+        }
+        for (UserInfo info : users) {
+            UserHandle userHandle = new UserHandle(info.id);
+            profiles.add(userHandle);
+        }
+        return profiles;
+    }
+
+    /**
+     * If the target user is a managed profile of the calling user or the caller
+     * is itself a managed profile, then this returns a badged copy of the given
+     * icon to be able to distinguish it from the original icon.
+     * <P>
+     * If the original drawable is not a BitmapDrawable, then the original
+     * drawable is returned.
+     * </P>
+     *
+     * @param icon The icon to badge.
+     * @param user The target user.
+     * @return A drawable that combines the original icon and a badge as
+     *         determined by the system.
+     */
+    public Drawable getBadgedDrawableForUser(Drawable icon, UserHandle user) {
+        int badgeResId = getBadgeResIdForUser(user.getIdentifier());
+        if (badgeResId == 0) {
+            return icon;
+        } else {
+            Drawable badgeIcon = mContext.getPackageManager()
+                    .getDrawable("system", badgeResId, null);
+            return getMergedDrawable(icon, badgeIcon);
+        }
+    }
+
+    private int getBadgeResIdForUser(int userHandle) {
+        // Return the framework-provided badge.
+        List<UserInfo> userProfiles = getProfiles(UserHandle.myUserId());
+        for (UserInfo user : userProfiles) {
+            if (user.id == userHandle
+                    && user.isManagedProfile()) {
+                return com.android.internal.R.drawable.ic_corp_badge;
+            }
+        }
+        return 0;
+    }
+
+    private Drawable getMergedDrawable(Drawable icon, Drawable badge) {
+        final int width = icon.getIntrinsicWidth();
+        final int height = icon.getIntrinsicHeight();
+        Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
+        Canvas canvas = new Canvas(bitmap);
+        icon.setBounds(0, 0, width, height);
+        icon.draw(canvas);
+        badge.setBounds(0, 0, width, height);
+        badge.draw(canvas);
+        BitmapDrawable merged = new BitmapDrawable(bitmap);
+        if (icon instanceof BitmapDrawable) {
+            merged.setTargetDensity(((BitmapDrawable) icon).getBitmap().getDensity());
+        }
+        return merged;
+    }
+
+    /**
+     * Returns information for all users on this device. Requires
+     * {@link android.Manifest.permission#MANAGE_USERS} permission.
+     * 
+     * @param excludeDying specify if the list should exclude users being
+     *            removed.
      * @return the list of users that were created.
      * @hide
      */
@@ -565,6 +705,26 @@
     }
 
     /**
+     * Returns true if the user switcher should be shown, this will be if there
+     * are multiple users that aren't managed profiles.
+     * @hide
+     * @return true if user switcher should be shown.
+     */
+    public boolean isUserSwitcherEnabled() {
+        List<UserInfo> users = getUsers(true);
+        if (users == null) {
+           return false;
+        }
+        int switchableUserCount = 0;
+        for (UserInfo user : users) {
+            if (user.supportsSwitchTo()) {
+                ++switchableUserCount;
+            }
+        }
+        return switchableUserCount > 1;
+    }
+
+    /**
      * Returns a serial number on this device for a given userHandle. User handles can be recycled
      * when deleting and creating users, but serial numbers are not reused until the device is wiped.
      * @param userHandle
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java
index 5d55143..c1d4d4c 100644
--- a/core/java/android/os/Vibrator.java
+++ b/core/java/android/os/Vibrator.java
@@ -16,7 +16,9 @@
 
 package android.os;
 
+import android.app.ActivityThread;
 import android.content.Context;
+import android.media.AudioManager;
 
 /**
  * Class that operates the vibrator on the device.
@@ -28,10 +30,21 @@
  * {@link Context#getSystemService} with {@link Context#VIBRATOR_SERVICE} as the argument.
  */
 public abstract class Vibrator {
+
+    private final String mPackageName;
+
     /**
      * @hide to prevent subclassing from outside of the framework
      */
     public Vibrator() {
+        mPackageName = ActivityThread.currentPackageName();
+    }
+
+    /**
+     * @hide to prevent subclassing from outside of the framework
+     */
+    protected Vibrator(Context context) {
+        mPackageName = context.getOpPackageName();
     }
 
     /**
@@ -40,7 +53,7 @@
      * @return True if the hardware has a vibrator, else false.
      */
     public abstract boolean hasVibrator();
-    
+
     /**
      * Vibrate constantly for the specified period of time.
      * <p>This method requires the caller to hold the permission
@@ -48,7 +61,23 @@
      *
      * @param milliseconds The number of milliseconds to vibrate.
      */
-    public abstract void vibrate(long milliseconds);
+    public void vibrate(long milliseconds) {
+        vibrate(milliseconds, AudioManager.USE_DEFAULT_STREAM_TYPE);
+    }
+
+    /**
+     * Vibrate constantly for the specified period of time.
+     * <p>This method requires the caller to hold the permission
+     * {@link android.Manifest.permission#VIBRATE}.
+     *
+     * @param milliseconds The number of milliseconds to vibrate.
+     * @param streamHint An {@link AudioManager} stream type corresponding to the vibration type.
+     *        For example, specify {@link AudioManager#STREAM_ALARM} for alarm vibrations or
+     *        {@link AudioManager#STREAM_RING} for vibrations associated with incoming calls.
+     */
+    public void vibrate(long milliseconds, int streamHint) {
+        vibrate(Process.myUid(), mPackageName, milliseconds, streamHint);
+    }
 
     /**
      * Vibrate with a given pattern.
@@ -70,21 +99,52 @@
      * @param repeat the index into pattern at which to repeat, or -1 if
      *        you don't want to repeat.
      */
-    public abstract void vibrate(long[] pattern, int repeat);
+    public void vibrate(long[] pattern, int repeat) {
+        vibrate(pattern, repeat, AudioManager.USE_DEFAULT_STREAM_TYPE);
+    }
+
+    /**
+     * Vibrate with a given pattern.
+     *
+     * <p>
+     * Pass in an array of ints that are the durations for which to turn on or off
+     * the vibrator in milliseconds.  The first value indicates the number of milliseconds
+     * to wait before turning the vibrator on.  The next value indicates the number of milliseconds
+     * for which to keep the vibrator on before turning it off.  Subsequent values alternate
+     * between durations in milliseconds to turn the vibrator off or to turn the vibrator on.
+     * </p><p>
+     * To cause the pattern to repeat, pass the index into the pattern array at which
+     * to start the repeat, or -1 to disable repeating.
+     * </p>
+     * <p>This method requires the caller to hold the permission
+     * {@link android.Manifest.permission#VIBRATE}.
+     *
+     * @param pattern an array of longs of times for which to turn the vibrator on or off.
+     * @param repeat the index into pattern at which to repeat, or -1 if
+     *        you don't want to repeat.
+     * @param streamHint An {@link AudioManager} stream type corresponding to the vibration type.
+     *        For example, specify {@link AudioManager#STREAM_ALARM} for alarm vibrations or
+     *        {@link AudioManager#STREAM_RING} for vibrations associated with incoming calls.
+     */
+    public void vibrate(long[] pattern, int repeat, int streamHint) {
+        vibrate(Process.myUid(), mPackageName, pattern, repeat, streamHint);
+    }
 
     /**
      * @hide
-     * Like {@link #vibrate(long)}, but allowing the caller to specify that
+     * Like {@link #vibrate(long, int)}, but allowing the caller to specify that
      * the vibration is owned by someone else.
      */
-    public abstract void vibrate(int owningUid, String owningPackage, long milliseconds);
+    public abstract void vibrate(int uid, String opPkg,
+            long milliseconds, int streamHint);
 
     /**
      * @hide
-     * Like {@link #vibrate(long[], int)}, but allowing the caller to specify that
+     * Like {@link #vibrate(long[], int, int)}, but allowing the caller to specify that
      * the vibration is owned by someone else.
      */
-    public abstract void vibrate(int owningUid, String owningPackage, long[] pattern, int repeat);
+    public abstract void vibrate(int uid, String opPkg,
+            long[] pattern, int repeat, int streamHint);
 
     /**
      * Turn the vibrator off.
diff --git a/core/java/android/os/storage/IMountService.java b/core/java/android/os/storage/IMountService.java
index 51ba2f6..939cda9 100644
--- a/core/java/android/os/storage/IMountService.java
+++ b/core/java/android/os/storage/IMountService.java
@@ -625,12 +625,13 @@
                 return _result;
             }
 
-            public int encryptStorage(String password) throws RemoteException {
+            public int encryptStorage(int type, String password) throws RemoteException {
                 Parcel _data = Parcel.obtain();
                 Parcel _reply = Parcel.obtain();
                 int _result;
                 try {
                     _data.writeInterfaceToken(DESCRIPTOR);
+                    _data.writeInt(type);
                     _data.writeString(password);
                     mRemote.transact(Stub.TRANSACTION_encryptStorage, _data, _reply, 0);
                     _reply.readException();
@@ -642,12 +643,13 @@
                 return _result;
             }
 
-            public int changeEncryptionPassword(String password) throws RemoteException {
+            public int changeEncryptionPassword(int type, String password) throws RemoteException {
                 Parcel _data = Parcel.obtain();
                 Parcel _reply = Parcel.obtain();
                 int _result;
                 try {
                     _data.writeInterfaceToken(DESCRIPTOR);
+                    _data.writeInt(type);
                     _data.writeString(password);
                     mRemote.transact(Stub.TRANSACTION_changeEncryptionPassword, _data, _reply, 0);
                     _reply.readException();
@@ -677,6 +679,83 @@
                 return _result;
             }
 
+            public int getPasswordType() throws RemoteException {
+                Parcel _data = Parcel.obtain();
+                Parcel _reply = Parcel.obtain();
+                int _result;
+                try {
+                    _data.writeInterfaceToken(DESCRIPTOR);
+                    mRemote.transact(Stub.TRANSACTION_getPasswordType, _data, _reply, 0);
+                    _reply.readException();
+                    _result = _reply.readInt();
+                } finally {
+                    _reply.recycle();
+                    _data.recycle();
+                }
+                return _result;
+            }
+
+            public String getPassword() throws RemoteException {
+                Parcel _data = Parcel.obtain();
+                Parcel _reply = Parcel.obtain();
+                String _result;
+                try {
+                    _data.writeInterfaceToken(DESCRIPTOR);
+                    mRemote.transact(Stub.TRANSACTION_getPassword, _data, _reply, 0);
+                    _reply.readException();
+                    _result = _reply.readString();
+                } finally {
+                    _reply.recycle();
+                    _data.recycle();
+                }
+                return _result;
+            }
+
+            public void clearPassword() throws RemoteException {
+                Parcel _data = Parcel.obtain();
+                Parcel _reply = Parcel.obtain();
+                try {
+                    _data.writeInterfaceToken(DESCRIPTOR);
+                    mRemote.transact(Stub.TRANSACTION_clearPassword, _data, _reply, IBinder.FLAG_ONEWAY);
+                    _reply.readException();
+                } finally {
+                    _reply.recycle();
+                    _data.recycle();
+                }
+            }
+
+            public void setField(String field, String data) throws RemoteException {
+                Parcel _data = Parcel.obtain();
+                Parcel _reply = Parcel.obtain();
+                try {
+                    _data.writeInterfaceToken(DESCRIPTOR);
+                    _data.writeString(field);
+                    _data.writeString(data);
+                    mRemote.transact(Stub.TRANSACTION_setField, _data, _reply, IBinder.FLAG_ONEWAY);
+                    _reply.readException();
+                } finally {
+                    _reply.recycle();
+                    _data.recycle();
+                }
+            }
+
+            public String getField(String field) throws RemoteException {
+                Parcel _data = Parcel.obtain();
+                Parcel _reply = Parcel.obtain();
+                String _result;
+                try {
+                    _data.writeInterfaceToken(DESCRIPTOR);
+                    _data.writeString(field);
+                    mRemote.transact(Stub.TRANSACTION_getField, _data, _reply, 0);
+                    _reply.readException();
+                    _result = _reply.readString();
+                } finally {
+                    _reply.recycle();
+                    _data.recycle();
+                }
+                return _result;
+            }
+
             public StorageVolume[] getVolumeList() throws RemoteException {
                 Parcel _data = Parcel.obtain();
                 Parcel _reply = Parcel.obtain();
@@ -829,6 +908,16 @@
 
         static final int TRANSACTION_mkdirs = IBinder.FIRST_CALL_TRANSACTION + 34;
 
+        static final int TRANSACTION_getPasswordType = IBinder.FIRST_CALL_TRANSACTION + 35;
+
+        static final int TRANSACTION_getPassword = IBinder.FIRST_CALL_TRANSACTION + 36;
+
+        static final int TRANSACTION_clearPassword = IBinder.FIRST_CALL_TRANSACTION + 37;
+
+        static final int TRANSACTION_setField = IBinder.FIRST_CALL_TRANSACTION + 38;
+
+        static final int TRANSACTION_getField = IBinder.FIRST_CALL_TRANSACTION + 39;
+
         /**
          * Cast an IBinder object into an IMountService interface, generating a
          * proxy if needed.
@@ -1122,16 +1211,18 @@
                 }
                 case TRANSACTION_encryptStorage: {
                     data.enforceInterface(DESCRIPTOR);
+                    int type = data.readInt();
                     String password = data.readString();
-                    int result = encryptStorage(password);
+                    int result = encryptStorage(type, password);
                     reply.writeNoException();
                     reply.writeInt(result);
                     return true;
                 }
                 case TRANSACTION_changeEncryptionPassword: {
                     data.enforceInterface(DESCRIPTOR);
+                    int type = data.readInt();
                     String password = data.readString();
-                    int result = changeEncryptionPassword(password);
+                    int result = changeEncryptionPassword(type, password);
                     reply.writeNoException();
                     reply.writeInt(result);
                     return true;
@@ -1181,6 +1272,42 @@
                     reply.writeInt(result);
                     return true;
                 }
+                case TRANSACTION_getPasswordType: {
+                    data.enforceInterface(DESCRIPTOR);
+                    int result = getPasswordType();
+                    reply.writeNoException();
+                    reply.writeInt(result);
+                    return true;
+                }
+                case TRANSACTION_getPassword: {
+                    data.enforceInterface(DESCRIPTOR);
+                    String result = getPassword();
+                    reply.writeNoException();
+                    reply.writeString(result);
+                    return true;
+                }
+                case TRANSACTION_clearPassword: {
+                    data.enforceInterface(DESCRIPTOR);
+                    clearPassword();
+                    reply.writeNoException();
+                    return true;
+                }
+                case TRANSACTION_setField: {
+                    data.enforceInterface(DESCRIPTOR);
+                    String field = data.readString();
+                    String contents = data.readString();
+                    setField(field, contents);
+                    reply.writeNoException();
+                    return true;
+                }
+                case TRANSACTION_getField: {
+                    data.enforceInterface(DESCRIPTOR);
+                    String field = data.readString();
+                    String contents = getField(field);
+                    reply.writeNoException();
+                    reply.writeString(contents);
+                    return true;
+                }
             }
             return super.onTransact(code, data, reply, flags);
         }
@@ -1370,12 +1497,13 @@
     /**
      * Encrypts storage.
      */
-    public int encryptStorage(String password) throws RemoteException;
+    public int encryptStorage(int type, String password) throws RemoteException;
 
     /**
      * Changes the encryption password.
      */
-    public int changeEncryptionPassword(String password) throws RemoteException;
+    public int changeEncryptionPassword(int type, String password)
+        throws RemoteException;
 
     /**
      * Verify the encryption password against the stored volume.  This method
@@ -1412,4 +1540,35 @@
      * external storage data or OBB directory belonging to calling app.
      */
     public int mkdirs(String callingPkg, String path) throws RemoteException;
+
+    /**
+     * Determines the type of the encryption password
+     * @return PasswordType
+     */
+    public int getPasswordType() throws RemoteException;
+
+    /**
+     * Get password from vold
+     * @return password or empty string
+     */
+    public String getPassword() throws RemoteException;
+
+    /**
+     * Securely clear password from vold
+     */
+    public void clearPassword() throws RemoteException;
+
+    /**
+     * Set a field in the crypto header.
+     * @param field field to set
+     * @param contents contents to set in field
+     */
+    public void setField(String field, String contents) throws RemoteException;
+
+    /**
+     * Gets a field from the crypto header.
+     * @param field field to get
+     * @return contents of field
+     */
+    public String getField(String field) throws RemoteException;
 }
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index f5e728d..4963991 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -58,6 +58,24 @@
  * argument of {@link android.content.Context#STORAGE_SERVICE}.
  */
 public class StorageManager {
+
+    /// Consts to match the password types in cryptfs.h
+    /** Master key is encrypted with a password.
+     */
+    public static final int CRYPT_TYPE_PASSWORD = 0;
+
+    /** Master key is encrypted with the default password.
+     */
+    public static final int CRYPT_TYPE_DEFAULT = 1;
+
+    /** Master key is encrypted with a pattern.
+     */
+    public static final int CRYPT_TYPE_PATTERN = 2;
+
+    /** Master key is encrypted with a pin.
+     */
+    public static final int CRYPT_TYPE_PIN = 3;
+
     private static final String TAG = "StorageManager";
 
     private final ContentResolver mResolver;
diff --git a/core/java/android/preference/CheckBoxPreference.java b/core/java/android/preference/CheckBoxPreference.java
index 1536760..1ce98b8 100644
--- a/core/java/android/preference/CheckBoxPreference.java
+++ b/core/java/android/preference/CheckBoxPreference.java
@@ -34,11 +34,16 @@
  */
 public class CheckBoxPreference extends TwoStatePreference {
 
-    public CheckBoxPreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.CheckBoxPreference, defStyle, 0);
+    public CheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public CheckBoxPreference(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.CheckBoxPreference, defStyleAttr, defStyleRes);
         setSummaryOn(a.getString(com.android.internal.R.styleable.CheckBoxPreference_summaryOn));
         setSummaryOff(a.getString(com.android.internal.R.styleable.CheckBoxPreference_summaryOff));
         setDisableDependentsState(a.getBoolean(
diff --git a/core/java/android/preference/DialogPreference.java b/core/java/android/preference/DialogPreference.java
index a643c8a..b65eac7 100644
--- a/core/java/android/preference/DialogPreference.java
+++ b/core/java/android/preference/DialogPreference.java
@@ -64,12 +64,13 @@
 
     /** Which button was clicked. */
     private int mWhichButtonClicked;
-    
-    public DialogPreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.DialogPreference, defStyle, 0);
+
+    public DialogPreference(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.DialogPreference, defStyleAttr, defStyleRes);
         mDialogTitle = a.getString(com.android.internal.R.styleable.DialogPreference_dialogTitle);
         if (mDialogTitle == null) {
             // Fallback on the regular title of the preference
@@ -83,13 +84,20 @@
         mDialogLayoutResId = a.getResourceId(com.android.internal.R.styleable.DialogPreference_dialogLayout,
                 mDialogLayoutResId);
         a.recycle();
-        
+    }
+
+    public DialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
     public DialogPreference(Context context, AttributeSet attrs) {
         this(context, attrs, com.android.internal.R.attr.dialogPreferenceStyle);
     }
-    
+
+    public DialogPreference(Context context) {
+        this(context, null);
+    }
+
     /**
      * Sets the title of the dialog. This will be shown on subsequent dialogs.
      * 
@@ -161,7 +169,7 @@
      * @param dialogIconRes The icon, as a resource ID.
      */
     public void setDialogIcon(int dialogIconRes) {
-        mDialogIcon = getContext().getResources().getDrawable(dialogIconRes);
+        mDialogIcon = getContext().getDrawable(dialogIconRes);
     }
     
     /**
diff --git a/core/java/android/preference/EditTextPreference.java b/core/java/android/preference/EditTextPreference.java
index aa27627..ff37042 100644
--- a/core/java/android/preference/EditTextPreference.java
+++ b/core/java/android/preference/EditTextPreference.java
@@ -49,9 +49,9 @@
     private EditText mEditText;
     
     private String mText;
-    
-    public EditTextPreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+
+    public EditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         
         mEditText = new EditText(context, attrs);
         
@@ -67,6 +67,10 @@
         mEditText.setEnabled(true);
     }
 
+    public EditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     public EditTextPreference(Context context, AttributeSet attrs) {
         this(context, attrs, com.android.internal.R.attr.editTextPreferenceStyle);
     }
diff --git a/core/java/android/preference/GenericInflater.java b/core/java/android/preference/GenericInflater.java
index 3003290..7de7d1c 100644
--- a/core/java/android/preference/GenericInflater.java
+++ b/core/java/android/preference/GenericInflater.java
@@ -191,7 +191,7 @@
     public void setFactory(Factory<T> factory) {
         if (mFactorySet) {
             throw new IllegalStateException("" +
-            		"A factory has already been set on this inflater");
+                    "A factory has already been set on this inflater");
         }
         if (factory == null) {
             throw new NullPointerException("Given factory can not be null");
diff --git a/core/java/android/preference/ListPreference.java b/core/java/android/preference/ListPreference.java
index 9edf112..8081a54 100644
--- a/core/java/android/preference/ListPreference.java
+++ b/core/java/android/preference/ListPreference.java
@@ -42,12 +42,12 @@
     private String mSummary;
     private int mClickedDialogEntryIndex;
     private boolean mValueSet;
-    
-    public ListPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.ListPreference, 0, 0);
+
+    public ListPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ListPreference, defStyleAttr, defStyleRes);
         mEntries = a.getTextArray(com.android.internal.R.styleable.ListPreference_entries);
         mEntryValues = a.getTextArray(com.android.internal.R.styleable.ListPreference_entryValues);
         a.recycle();
@@ -56,11 +56,19 @@
          * in the Preference class.
          */
         a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.Preference, 0, 0);
+                com.android.internal.R.styleable.Preference, defStyleAttr, defStyleRes);
         mSummary = a.getString(com.android.internal.R.styleable.Preference_summary);
         a.recycle();
     }
 
+    public ListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ListPreference(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.dialogPreferenceStyle);
+    }
+
     public ListPreference(Context context) {
         this(context, null);
     }
diff --git a/core/java/android/preference/MultiCheckPreference.java b/core/java/android/preference/MultiCheckPreference.java
index 6953075..57c906d 100644
--- a/core/java/android/preference/MultiCheckPreference.java
+++ b/core/java/android/preference/MultiCheckPreference.java
@@ -40,12 +40,13 @@
     private boolean[] mSetValues;
     private boolean[] mOrigValues;
     private String mSummary;
-    
-    public MultiCheckPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.ListPreference, 0, 0);
+
+    public MultiCheckPreference(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ListPreference, defStyleAttr, defStyleRes);
         mEntries = a.getTextArray(com.android.internal.R.styleable.ListPreference_entries);
         if (mEntries != null) {
             setEntries(mEntries);
@@ -63,6 +64,14 @@
         a.recycle();
     }
 
+    public MultiCheckPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public MultiCheckPreference(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.dialogPreferenceStyle);
+    }
+
     public MultiCheckPreference(Context context) {
         this(context, null);
     }
diff --git a/core/java/android/preference/MultiSelectListPreference.java b/core/java/android/preference/MultiSelectListPreference.java
index 553ce80..6c4c20f 100644
--- a/core/java/android/preference/MultiSelectListPreference.java
+++ b/core/java/android/preference/MultiSelectListPreference.java
@@ -44,16 +44,26 @@
     private Set<String> mValues = new HashSet<String>();
     private Set<String> mNewValues = new HashSet<String>();
     private boolean mPreferenceChanged;
-    
-    public MultiSelectListPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.MultiSelectListPreference, 0, 0);
+
+    public MultiSelectListPreference(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.MultiSelectListPreference, defStyleAttr,
+                defStyleRes);
         mEntries = a.getTextArray(com.android.internal.R.styleable.MultiSelectListPreference_entries);
         mEntryValues = a.getTextArray(com.android.internal.R.styleable.MultiSelectListPreference_entryValues);
         a.recycle();
     }
+
+    public MultiSelectListPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public MultiSelectListPreference(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.dialogPreferenceStyle);
+    }
     
     public MultiSelectListPreference(Context context) {
         this(context, null);
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index f7d1eb7..56d5617 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -188,30 +188,33 @@
 
     /**
      * Perform inflation from XML and apply a class-specific base style. This
-     * constructor of Preference allows subclasses to use their own base
-     * style when they are inflating. For example, a {@link CheckBoxPreference}
+     * constructor of Preference allows subclasses to use their own base style
+     * when they are inflating. For example, a {@link CheckBoxPreference}
      * constructor calls this version of the super class constructor and
-     * supplies {@code android.R.attr.checkBoxPreferenceStyle} for <var>defStyle</var>.
-     * This allows the theme's checkbox preference style to modify all of the base
-     * preference attributes as well as the {@link CheckBoxPreference} class's
-     * attributes.
-     * 
+     * supplies {@code android.R.attr.checkBoxPreferenceStyle} for
+     * <var>defStyleAttr</var>. This allows the theme's checkbox preference
+     * style to modify all of the base preference attributes as well as the
+     * {@link CheckBoxPreference} class's attributes.
+     *
      * @param context The Context this is associated with, through which it can
-     *            access the current theme, resources, {@link SharedPreferences},
-     *            etc.
-     * @param attrs The attributes of the XML tag that is inflating the preference.
-     * @param defStyle The default style to apply to this preference. If 0, no style
-     *            will be applied (beyond what is included in the theme). This
-     *            may either be an attribute resource, whose value will be
-     *            retrieved from the current theme, or an explicit style
-     *            resource.
+     *            access the current theme, resources,
+     *            {@link SharedPreferences}, etc.
+     * @param attrs The attributes of the XML tag that is inflating the
+     *            preference.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *            reference to a style resource that supplies default values for
+     *            the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *            supplies default values for the view, used only if
+     *            defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *            to not look for defaults.
      * @see #Preference(Context, AttributeSet)
      */
-    public Preference(Context context, AttributeSet attrs, int defStyle) {
+    public Preference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         mContext = context;
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.Preference, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.Preference, defStyleAttr, defStyleRes);
         for (int i = a.getIndexCount(); i >= 0; i--) {
             int attr = a.getIndex(i); 
             switch (attr) {
@@ -281,6 +284,30 @@
             mCanRecycleLayout = false;
         }
     }
+
+    /**
+     * Perform inflation from XML and apply a class-specific base style. This
+     * constructor of Preference allows subclasses to use their own base style
+     * when they are inflating. For example, a {@link CheckBoxPreference}
+     * constructor calls this version of the super class constructor and
+     * supplies {@code android.R.attr.checkBoxPreferenceStyle} for
+     * <var>defStyleAttr</var>. This allows the theme's checkbox preference
+     * style to modify all of the base preference attributes as well as the
+     * {@link CheckBoxPreference} class's attributes.
+     *
+     * @param context The Context this is associated with, through which it can
+     *            access the current theme, resources,
+     *            {@link SharedPreferences}, etc.
+     * @param attrs The attributes of the XML tag that is inflating the
+     *            preference.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *            reference to a style resource that supplies default values for
+     *            the view. Can be 0 to not look for defaults.
+     * @see #Preference(Context, AttributeSet)
+     */
+    public Preference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
     
     /**
      * Constructor that is called when inflating a Preference from XML. This is
@@ -506,8 +533,7 @@
      * @see #onCreateView(ViewGroup)
      */
     protected void onBindView(View view) {
-        final TextView titleView = (TextView) view.findViewById(
-                com.android.internal.R.id.title);
+        final TextView titleView = (TextView) view.findViewById(com.android.internal.R.id.title);
         if (titleView != null) {
             final CharSequence title = getTitle();
             if (!TextUtils.isEmpty(title)) {
@@ -530,11 +556,11 @@
             }
         }
 
-        ImageView imageView = (ImageView) view.findViewById(com.android.internal.R.id.icon);
+        final ImageView imageView = (ImageView) view.findViewById(com.android.internal.R.id.icon);
         if (imageView != null) {
             if (mIconResId != 0 || mIcon != null) {
                 if (mIcon == null) {
-                    mIcon = getContext().getResources().getDrawable(mIconResId);
+                    mIcon = getContext().getDrawable(mIconResId);
                 }
                 if (mIcon != null) {
                     imageView.setImageDrawable(mIcon);
@@ -543,6 +569,11 @@
             imageView.setVisibility(mIcon != null ? View.VISIBLE : View.GONE);
         }
 
+        final View imageFrame = view.findViewById(com.android.internal.R.id.icon_frame);
+        if (imageFrame != null) {
+            imageFrame.setVisibility(mIcon != null ? View.VISIBLE : View.GONE);
+        }
+
         if (mShouldDisableView) {
             setEnabledStateOnViews(view, isEnabled());
         }
@@ -667,7 +698,7 @@
      */
     public void setIcon(int iconResId) {
         mIconResId = iconResId;
-        setIcon(mContext.getResources().getDrawable(iconResId));
+        setIcon(mContext.getDrawable(iconResId));
     }
 
     /**
diff --git a/core/java/android/preference/PreferenceActivity.java b/core/java/android/preference/PreferenceActivity.java
index 2ab5a91..0418049 100644
--- a/core/java/android/preference/PreferenceActivity.java
+++ b/core/java/android/preference/PreferenceActivity.java
@@ -33,7 +33,6 @@
 import android.os.Parcelable;
 import android.text.TextUtils;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.util.TypedValue;
 import android.util.Xml;
 import android.view.LayoutInflater;
@@ -794,8 +793,8 @@
                 if ("header".equals(nodeName)) {
                     Header header = new Header();
 
-                    TypedArray sa = getResources().obtainAttributes(attrs,
-                            com.android.internal.R.styleable.PreferenceHeader);
+                    TypedArray sa = obtainStyledAttributes(
+                            attrs, com.android.internal.R.styleable.PreferenceHeader);
                     header.id = sa.getResourceId(
                             com.android.internal.R.styleable.PreferenceHeader_id,
                             (int)HEADER_ID_UNDEFINED);
@@ -1173,7 +1172,7 @@
         }
     }
 
-    private void switchToHeaderInner(String fragmentName, Bundle args, int direction) {
+    private void switchToHeaderInner(String fragmentName, Bundle args) {
         getFragmentManager().popBackStack(BACK_STACK_PREFS,
                 FragmentManager.POP_BACK_STACK_INCLUSIVE);
         if (!isValidFragment(fragmentName)) {
@@ -1196,7 +1195,7 @@
      */
     public void switchToHeader(String fragmentName, Bundle args) {
         setSelectedHeader(null);
-        switchToHeaderInner(fragmentName, args, 0);
+        switchToHeaderInner(fragmentName, args);
     }
 
     /**
@@ -1215,8 +1214,7 @@
             if (header.fragment == null) {
                 throw new IllegalStateException("can't switch to header that has no fragment");
             }
-            int direction = mHeaders.indexOf(header) - mHeaders.indexOf(mCurHeader);
-            switchToHeaderInner(header.fragment, header.fragmentArguments, direction);
+            switchToHeaderInner(header.fragment, header.fragmentArguments);
             setSelectedHeader(header);
         }
     }
diff --git a/core/java/android/preference/PreferenceCategory.java b/core/java/android/preference/PreferenceCategory.java
index 229a96a..253481b 100644
--- a/core/java/android/preference/PreferenceCategory.java
+++ b/core/java/android/preference/PreferenceCategory.java
@@ -16,8 +16,6 @@
 
 package android.preference;
 
-import java.util.Map;
-
 import android.content.Context;
 import android.util.AttributeSet;
 
@@ -34,9 +32,14 @@
  */
 public class PreferenceCategory extends PreferenceGroup {
     private static final String TAG = "PreferenceCategory";
-    
-    public PreferenceCategory(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+
+    public PreferenceCategory(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    public PreferenceCategory(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
     public PreferenceCategory(Context context, AttributeSet attrs) {
diff --git a/core/java/android/preference/PreferenceFragment.java b/core/java/android/preference/PreferenceFragment.java
index 11d8878..ff16f6c 100644
--- a/core/java/android/preference/PreferenceFragment.java
+++ b/core/java/android/preference/PreferenceFragment.java
@@ -329,6 +329,11 @@
         if (preferenceScreen != null) {
             preferenceScreen.bind(getListView());
         }
+        onBindPreferences();
+    }
+
+    /** @hide */
+    protected void onBindPreferences() {
     }
 
     /** @hide */
@@ -337,6 +342,26 @@
         return mList;
     }
 
+    /** @hide */
+    public boolean hasListView() {
+        if (mList != null) {
+            return true;
+        }
+        View root = getView();
+        if (root == null) {
+            return false;
+        }
+        View rawListView = root.findViewById(android.R.id.list);
+        if (!(rawListView instanceof ListView)) {
+            return false;
+        }
+        mList = (ListView)rawListView;
+        if (mList == null) {
+            return false;
+        }
+        return true;
+    }
+
     private void ensureList() {
         if (mList != null) {
             return;
diff --git a/core/java/android/preference/PreferenceFrameLayout.java b/core/java/android/preference/PreferenceFrameLayout.java
index 75372aa..886338f 100644
--- a/core/java/android/preference/PreferenceFrameLayout.java
+++ b/core/java/android/preference/PreferenceFrameLayout.java
@@ -16,7 +16,6 @@
 
 package android.preference;
 
-import android.app.FragmentBreadCrumbs;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
@@ -45,10 +44,15 @@
         this(context, attrs, com.android.internal.R.attr.preferenceFrameLayoutStyle);
     }
 
-    public PreferenceFrameLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.PreferenceFrameLayout, defStyle, 0);
+    public PreferenceFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public PreferenceFrameLayout(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.PreferenceFrameLayout, defStyleAttr, defStyleRes);
 
         float density = context.getResources().getDisplayMetrics().density;
         int defaultBorderTop = (int) (density * DEFAULT_BORDER_TOP + 0.5f);
diff --git a/core/java/android/preference/PreferenceGroup.java b/core/java/android/preference/PreferenceGroup.java
index 5f8c78d..2d35b1b 100644
--- a/core/java/android/preference/PreferenceGroup.java
+++ b/core/java/android/preference/PreferenceGroup.java
@@ -55,19 +55,23 @@
     private int mCurrentPreferenceOrder = 0;
 
     private boolean mAttachedToActivity = false;
-    
-    public PreferenceGroup(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+
+    public PreferenceGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         mPreferenceList = new ArrayList<Preference>();
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.PreferenceGroup, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.PreferenceGroup, defStyleAttr, defStyleRes);
         mOrderingAsAdded = a.getBoolean(com.android.internal.R.styleable.PreferenceGroup_orderingFromXml,
                 mOrderingAsAdded);
         a.recycle();
     }
 
+    public PreferenceGroup(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     public PreferenceGroup(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
diff --git a/core/java/android/preference/PreferenceGroupAdapter.java b/core/java/android/preference/PreferenceGroupAdapter.java
index 23d0a19..381a5f0 100644
--- a/core/java/android/preference/PreferenceGroupAdapter.java
+++ b/core/java/android/preference/PreferenceGroupAdapter.java
@@ -20,6 +20,7 @@
 import java.util.Collections;
 import java.util.List;
 
+import android.graphics.drawable.Drawable;
 import android.os.Handler;
 import android.preference.Preference.OnPreferenceChangeInternalListener;
 import android.view.View;
@@ -45,8 +46,11 @@
  * adapter, use {@link PreferenceCategoryAdapter} instead.
  * 
  * @see PreferenceCategoryAdapter
+ *
+ * @hide
  */
-class PreferenceGroupAdapter extends BaseAdapter implements OnPreferenceChangeInternalListener {
+public class PreferenceGroupAdapter extends BaseAdapter
+        implements OnPreferenceChangeInternalListener {
     
     private static final String TAG = "PreferenceGroupAdapter";
 
@@ -88,6 +92,9 @@
         }
     };
 
+    private int mHighlightedPosition = -1;
+    private Drawable mHighlightedDrawable;
+
     private static class PreferenceLayout implements Comparable<PreferenceLayout> {
         private int resId;
         private int widgetResId;
@@ -207,6 +214,20 @@
         return this.getItem(position).getId();
     }
 
+    /**
+     * @hide
+     */
+    public void setHighlighted(int position) {
+        mHighlightedPosition = position;
+    }
+
+    /**
+     * @hide
+     */
+    public void setHighlightedDrawable(Drawable drawable) {
+        mHighlightedDrawable = drawable;
+    }
+
     public View getView(int position, View convertView, ViewGroup parent) {
         final Preference preference = this.getItem(position);
         // Build a PreferenceLayout to compare with known ones that are cacheable.
@@ -217,8 +238,12 @@
         if (Collections.binarySearch(mPreferenceLayouts, mTempPreferenceLayout) < 0) {
             convertView = null;
         }
-
-        return preference.getView(convertView, parent);
+        View result = preference.getView(convertView, parent);
+        if (position == mHighlightedPosition && mHighlightedDrawable != null) {
+            result.setBackgroundDrawable(mHighlightedDrawable);
+        }
+        result.setTag(preference.getKey());
+        return result;
     }
 
     @Override
diff --git a/core/java/android/preference/PreferenceInflater.java b/core/java/android/preference/PreferenceInflater.java
index c21aa18..727fbca 100644
--- a/core/java/android/preference/PreferenceInflater.java
+++ b/core/java/android/preference/PreferenceInflater.java
@@ -19,16 +19,13 @@
 import com.android.internal.util.XmlUtils;
 
 import java.io.IOException;
-import java.util.Map;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
-import android.app.AliasActivity;
 import android.content.Context;
 import android.content.Intent;
 import android.util.AttributeSet;
-import android.util.Log;
 
 /**
  * The {@link PreferenceInflater} is used to inflate preference hierarchies from
diff --git a/core/java/android/preference/PreferenceManager.java b/core/java/android/preference/PreferenceManager.java
index 17f88f1..5c8c8e9 100644
--- a/core/java/android/preference/PreferenceManager.java
+++ b/core/java/android/preference/PreferenceManager.java
@@ -800,8 +800,10 @@
      * Interface definition for a callback to be invoked when a
      * {@link Preference} in the hierarchy rooted at this {@link PreferenceScreen} is
      * clicked.
+     *
+     * @hide
      */
-    interface OnPreferenceTreeClickListener {
+    public interface OnPreferenceTreeClickListener {
         /**
          * Called when a preference in the tree rooted at this
          * {@link PreferenceScreen} has been clicked.
diff --git a/core/java/android/preference/PreferenceScreen.java b/core/java/android/preference/PreferenceScreen.java
index db80676..b1317e6 100644
--- a/core/java/android/preference/PreferenceScreen.java
+++ b/core/java/android/preference/PreferenceScreen.java
@@ -27,7 +27,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.Window;
-import android.widget.AbsListView;
 import android.widget.Adapter;
 import android.widget.AdapterView;
 import android.widget.ListAdapter;
diff --git a/core/java/android/preference/RingtonePreference.java b/core/java/android/preference/RingtonePreference.java
index 2ebf294..488a0c4 100644
--- a/core/java/android/preference/RingtonePreference.java
+++ b/core/java/android/preference/RingtonePreference.java
@@ -50,11 +50,11 @@
     
     private int mRequestCode;
 
-    public RingtonePreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.RingtonePreference, defStyle, 0);
+    public RingtonePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.RingtonePreference, defStyleAttr, defStyleRes);
         mRingtoneType = a.getInt(com.android.internal.R.styleable.RingtonePreference_ringtoneType,
                 RingtoneManager.TYPE_RINGTONE);
         mShowDefault = a.getBoolean(com.android.internal.R.styleable.RingtonePreference_showDefault,
@@ -64,6 +64,10 @@
         a.recycle();
     }
 
+    public RingtonePreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     public RingtonePreference(Context context, AttributeSet attrs) {
         this(context, attrs, com.android.internal.R.attr.ringtonePreferenceStyle);
     }
diff --git a/core/java/android/preference/SeekBarDialogPreference.java b/core/java/android/preference/SeekBarDialogPreference.java
index 0e89b16..9a08827 100644
--- a/core/java/android/preference/SeekBarDialogPreference.java
+++ b/core/java/android/preference/SeekBarDialogPreference.java
@@ -32,8 +32,9 @@
 
     private Drawable mMyIcon;
 
-    public SeekBarDialogPreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
+    public SeekBarDialogPreference(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         setDialogLayoutResource(com.android.internal.R.layout.seekbar_dialog);
         createActionButtons();
@@ -43,6 +44,18 @@
         setDialogIcon(null);
     }
 
+    public SeekBarDialogPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public SeekBarDialogPreference(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.dialogPreferenceStyle);
+    }
+
+    public SeekBarDialogPreference(Context context) {
+        this(context, null);
+    }
+
     // Allow subclasses to override the action buttons
     public void createActionButtons() {
         setPositiveButtonText(android.R.string.ok);
diff --git a/core/java/android/preference/SeekBarPreference.java b/core/java/android/preference/SeekBarPreference.java
index 7133d3a..e32890d 100644
--- a/core/java/android/preference/SeekBarPreference.java
+++ b/core/java/android/preference/SeekBarPreference.java
@@ -37,15 +37,20 @@
     private boolean mTrackingTouch;
 
     public SeekBarPreference(
-            Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.ProgressBar, defStyle, 0);
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ProgressBar, defStyleAttr, defStyleRes);
         setMax(a.getInt(com.android.internal.R.styleable.ProgressBar_max, mMax));
         a.recycle();
         setLayoutResource(com.android.internal.R.layout.preference_widget_seekbar);
     }
 
+    public SeekBarPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     public SeekBarPreference(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
diff --git a/core/java/android/preference/SwitchPreference.java b/core/java/android/preference/SwitchPreference.java
index 8bac6bd..76ef544 100644
--- a/core/java/android/preference/SwitchPreference.java
+++ b/core/java/android/preference/SwitchPreference.java
@@ -60,13 +60,19 @@
      *
      * @param context The Context that will style this preference
      * @param attrs Style attributes that differ from the default
-     * @param defStyle Theme attribute defining the default style options
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
      */
-    public SwitchPreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.SwitchPreference, defStyle, 0);
+                com.android.internal.R.styleable.SwitchPreference, defStyleAttr, defStyleRes);
         setSummaryOn(a.getString(com.android.internal.R.styleable.SwitchPreference_summaryOn));
         setSummaryOff(a.getString(com.android.internal.R.styleable.SwitchPreference_summaryOff));
         setSwitchTextOn(a.getString(
@@ -83,6 +89,19 @@
      *
      * @param context The Context that will style this preference
      * @param attrs Style attributes that differ from the default
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     */
+    public SwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    /**
+     * Construct a new SwitchPreference with the given style options.
+     *
+     * @param context The Context that will style this preference
+     * @param attrs Style attributes that differ from the default
      */
     public SwitchPreference(Context context, AttributeSet attrs) {
         this(context, attrs, com.android.internal.R.attr.switchPreferenceStyle);
diff --git a/core/java/android/preference/TwoStatePreference.java b/core/java/android/preference/TwoStatePreference.java
index af83953..6f8be1f 100644
--- a/core/java/android/preference/TwoStatePreference.java
+++ b/core/java/android/preference/TwoStatePreference.java
@@ -42,9 +42,13 @@
     private boolean mSendClickAccessibilityEvent;
     private boolean mDisableDependentsState;
 
+    public TwoStatePreference(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
 
-    public TwoStatePreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public TwoStatePreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
     public TwoStatePreference(Context context, AttributeSet attrs) {
diff --git a/core/java/android/preference/VolumePreference.java b/core/java/android/preference/VolumePreference.java
index dc683a6..29f2545 100644
--- a/core/java/android/preference/VolumePreference.java
+++ b/core/java/android/preference/VolumePreference.java
@@ -51,15 +51,24 @@
     /** May be null if the dialog isn't visible. */
     private SeekBarVolumizer mSeekBarVolumizer;
 
-    public VolumePreference(Context context, AttributeSet attrs) {
-        super(context, attrs);
+    public VolumePreference(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.VolumePreference, 0, 0);
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.VolumePreference, defStyleAttr, defStyleRes);
         mStreamType = a.getInt(android.R.styleable.VolumePreference_streamType, 0);
         a.recycle();
     }
 
+    public VolumePreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public VolumePreference(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
     public void setStreamType(int streamType) {
         mStreamType = streamType;
     }
diff --git a/core/java/android/print/PrintManager.java b/core/java/android/print/PrintManager.java
index d1bb8fd..e4f73cb 100644
--- a/core/java/android/print/PrintManager.java
+++ b/core/java/android/print/PrintManager.java
@@ -359,6 +359,17 @@
      * selected the hinted options in the print dialog, given the current printer
      * supports them.
      * </p>
+     * <p>
+     * <strong>Note:</strong> Calling this method will bring the print dialog and
+     * the system will connect to the provided {@link PrintDocumentAdapter}. If a
+     * configuration change occurs that you application does not handle, for example
+     * a rotation change, the system will drop the connection to the adapter as the
+     * activity has to be recreated and the old adapter may be invalid in this context,
+     * hence a new adapter instance is required. As a consequence, if your activity
+     * does not handle configuration changes (default behavior), you have to save the
+     * state that you were printing and call this method again when your activity
+     * is recreated.
+     * </p>
      *
      * @param printJobName A name for the new print job which is shown to the user.
      * @param documentAdapter An adapter that emits the document to print.
diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java
index a6f23a8..3b0d7ff 100644
--- a/core/java/android/provider/CallLog.java
+++ b/core/java/android/provider/CallLog.java
@@ -86,10 +86,8 @@
         public static final String ALLOW_VOICEMAILS_PARAM_KEY = "allow_voicemails";
 
         /**
-         * Content uri with {@link #ALLOW_VOICEMAILS_PARAM_KEY} set. This can directly be used to
-         * access call log entries that includes voicemail records.
-         *
-         * @hide
+         * Content uri used to access call log entries, including voicemail records. You must have
+         * the READ_CALL_LOG and WRITE_CALL_LOG permissions to read and write to the call log.
          */
         public static final Uri CONTENT_URI_WITH_VOICEMAIL = CONTENT_URI.buildUpon()
                 .appendQueryParameter(ALLOW_VOICEMAILS_PARAM_KEY, "true")
@@ -124,10 +122,7 @@
         public static final int OUTGOING_TYPE = 2;
         /** Call log type for missed calls. */
         public static final int MISSED_TYPE = 3;
-        /**
-         * Call log type for voicemails.
-         * @hide
-         */
+        /** Call log type for voicemails. */
         public static final int VOICEMAIL_TYPE = 4;
 
         /**
@@ -168,8 +163,6 @@
          * <P>
          * Type: TEXT
          * </P>
-         *
-         * @hide
          */
         public static final String COUNTRY_ISO = "countryiso";
 
@@ -220,7 +213,6 @@
         /**
          * URI of the voicemail entry. Populated only for {@link #VOICEMAIL_TYPE}.
          * <P>Type: TEXT</P>
-         * @hide
          */
         public static final String VOICEMAIL_URI = "voicemail_uri";
 
@@ -238,51 +230,48 @@
          * <p>
          * The string represents a city, state, or country associated with the number.
          * <P>Type: TEXT</P>
-         * @hide
          */
         public static final String GEOCODED_LOCATION = "geocoded_location";
 
         /**
          * The cached URI to look up the contact associated with the phone number, if it exists.
-         * This value is not guaranteed to be current, if the contact information
-         * associated with this number has changed.
+         * This value may not be current if the contact information associated with this number
+         * has changed.
          * <P>Type: TEXT</P>
-         * @hide
          */
         public static final String CACHED_LOOKUP_URI = "lookup_uri";
 
         /**
          * The cached phone number of the contact which matches this entry, if it exists.
-         * This value is not guaranteed to be current, if the contact information
-         * associated with this number has changed.
+         * This value may not be current if the contact information associated with this number
+         * has changed.
          * <P>Type: TEXT</P>
-         * @hide
          */
         public static final String CACHED_MATCHED_NUMBER = "matched_number";
 
         /**
-         * The cached normalized version of the phone number, if it exists.
-         * This value is not guaranteed to be current, if the contact information
-         * associated with this number has changed.
+         * The cached normalized(E164) version of the phone number, if it exists.
+         * This value may not be current if the contact information associated with this number
+         * has changed.
          * <P>Type: TEXT</P>
-         * @hide
          */
         public static final String CACHED_NORMALIZED_NUMBER = "normalized_number";
 
         /**
          * The cached photo id of the picture associated with the phone number, if it exists.
-         * This value is not guaranteed to be current, if the contact information
-         * associated with this number has changed.
+         * This value may not be current if the contact information associated with this number
+         * has changed.
          * <P>Type: INTEGER (long)</P>
-         * @hide
          */
         public static final String CACHED_PHOTO_ID = "photo_id";
 
         /**
-         * The cached formatted phone number.
-         * This value is not guaranteed to be present.
+         * The cached phone number, formatted with formatting rules based on the country the
+         * user was in when the call was made or received.
+         * This value is not guaranteed to be present, and may not be current if the contact
+         * information associated with this number
+         * has changed.
          * <P>Type: TEXT</P>
-         * @hide
          */
         public static final String CACHED_FORMATTED_NUMBER = "formatted_number";
 
diff --git a/core/java/android/provider/Contacts.java b/core/java/android/provider/Contacts.java
index c7e3c08..9e2aacd 100644
--- a/core/java/android/provider/Contacts.java
+++ b/core/java/android/provider/Contacts.java
@@ -26,7 +26,6 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
-import android.os.Build;
 import android.text.TextUtils;
 import android.util.Log;
 import android.widget.ImageView;
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index 0863368..11678a6 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -47,9 +47,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
-import java.util.List;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * <p>
@@ -167,8 +164,6 @@
      * {@link Contacts#CONTENT_STREQUENT_FILTER_URI}, which requires the ContactsProvider to
      * return only phone-related results. For example, frequently contacted person list should
      * include persons contacted via phone (not email, sms, etc.)
-     *
-     * @hide
      */
     public static final String STREQUENT_PHONE_ONLY = "strequent_phone_only";
 
@@ -193,8 +188,6 @@
      * {@link CommonDataKinds.Email#CONTENT_URI}, and
      * {@link CommonDataKinds.StructuredPostal#CONTENT_URI}.
      * This enables a content provider to remove duplicate entries in results.
-     *
-     * @hide
      */
     public static final String REMOVE_DUPLICATE_ENTRIES = "remove_duplicate_entries";
 
@@ -251,30 +244,21 @@
         public static final String KEY_AUTHORIZED_URI = "authorized_uri";
     }
 
-    /**
-     * @hide
-     */
     public static final class Preferences {
 
         /**
          * A key in the {@link android.provider.Settings android.provider.Settings} provider
          * that stores the preferred sorting order for contacts (by given name vs. by family name).
-         *
-         * @hide
          */
         public static final String SORT_ORDER = "android.contacts.SORT_ORDER";
 
         /**
          * The value for the SORT_ORDER key corresponding to sorting by given name first.
-         *
-         * @hide
          */
         public static final int SORT_ORDER_PRIMARY = 1;
 
         /**
          * The value for the SORT_ORDER key corresponding to sorting by family name first.
-         *
-         * @hide
          */
         public static final int SORT_ORDER_ALTERNATIVE = 2;
 
@@ -282,22 +266,16 @@
          * A key in the {@link android.provider.Settings android.provider.Settings} provider
          * that stores the preferred display order for contacts (given name first vs. family
          * name first).
-         *
-         * @hide
          */
         public static final String DISPLAY_ORDER = "android.contacts.DISPLAY_ORDER";
 
         /**
          * The value for the DISPLAY_ORDER key corresponding to showing the given name first.
-         *
-         * @hide
          */
         public static final int DISPLAY_ORDER_PRIMARY = 1;
 
         /**
          * The value for the DISPLAY_ORDER key corresponding to showing the family name first.
-         *
-         * @hide
          */
         public static final int DISPLAY_ORDER_ALTERNATIVE = 2;
     }
@@ -827,10 +805,9 @@
         public static final String STARRED = "starred";
 
         /**
-         * The position at which the contact is pinned. If {@link PinnedPositions.UNPINNED},
+         * The position at which the contact is pinned. If {@link PinnedPositions#UNPINNED},
          * the contact is not pinned. Also see {@link PinnedPositions}.
          * <P>Type: INTEGER </P>
-         * @hide
          */
         public static final String PINNED = "pinned";
 
@@ -924,6 +901,14 @@
         public static final String PHOTO_THUMBNAIL_URI = "photo_thumb_uri";
 
         /**
+         * Flag that reflects whether the contact exists inside the default directory.
+         * Ie, whether the contact is designed to only be visible outside search.
+         *
+         * @hide
+         */
+        public static final String IN_DEFAULT_DIRECTORY = "in_default_directory";
+
+        /**
          * Flag that reflects the {@link Groups#GROUP_VISIBLE} state of any
          * {@link CommonDataKinds.GroupMembership} for this contact.
          */
@@ -1470,17 +1455,43 @@
          * Base {@link Uri} for referencing multiple {@link Contacts} entry,
          * created by appending {@link #LOOKUP_KEY} using
          * {@link Uri#withAppendedPath(Uri, String)}. The lookup keys have to be
-         * encoded and joined with the colon (":") separator. The resulting string
-         * has to be encoded again. Provides
-         * {@link OpenableColumns} columns when queried, or returns the
+         * joined with the colon (":") separator, and the resulting string encoded.
+         *
+         * Provides {@link OpenableColumns} columns when queried, or returns the
          * referenced contact formatted as a vCard when opened through
          * {@link ContentResolver#openAssetFileDescriptor(Uri, String)}.
          *
-         * This is private API because we do not have a well-defined way to
-         * specify several entities yet. The format of this Uri might change in the future
-         * or the Uri might be completely removed.
+         * <p>
+         * Usage example:
+         * <dl>
+         * <dt>The following code snippet creates a multi-vcard URI that references all the
+         * contacts in a user's database.</dt>
+         * <dd>
          *
-         * @hide
+         * <pre>
+         * public Uri getAllContactsVcardUri() {
+         *     Cursor cursor = getActivity().getContentResolver().query(Contacts.CONTENT_URI,
+         *         new String[] {Contacts.LOOKUP_KEY}, null, null, null);
+         *     if (cursor == null) {
+         *         return null;
+         *     }
+         *     try {
+         *         StringBuilder uriListBuilder = new StringBuilder();
+         *         int index = 0;
+         *         while (cursor.moveToNext()) {
+         *             if (index != 0) uriListBuilder.append(':');
+         *             uriListBuilder.append(cursor.getString(0));
+         *             index++;
+         *         }
+         *         return Uri.withAppendedPath(Contacts.CONTENT_MULTI_VCARD_URI,
+         *                 Uri.encode(uriListBuilder.toString()));
+         *     } finally {
+         *         cursor.close();
+         *     }
+         * }
+         * </pre>
+         *
+         * </p>
          */
         public static final Uri CONTENT_MULTI_VCARD_URI = Uri.withAppendedPath(CONTENT_URI,
                 "as_multi_vcard");
@@ -4794,11 +4805,11 @@
          */
         public static final String CONTENT_TYPE = "vnd.android.cursor.dir/phone_lookup";
 
-       /**
-        * Boolean parameter that is used to look up a SIP address.
-        *
-        * @hide
-        */
+        /**
+         * If this boolean parameter is set to true, then the appended query is treated as a
+         * SIP address and the lookup will be performed against SIP addresses in the user's
+         * contacts.
+         */
         public static final String QUERY_PARAMETER_SIP_ADDRESS = "sip";
     }
 
@@ -5307,8 +5318,6 @@
             /**
              * The style used for combining given/middle/family name into a full name.
              * See {@link ContactsContract.FullNameStyle}.
-             *
-             * @hide
              */
             public static final String FULL_NAME_STYLE = DATA10;
 
@@ -6900,8 +6909,6 @@
          * each column. For example the meaning for {@link Phone}'s type is different than
          * {@link SipAddress}'s.
          * </p>
-         *
-         * @hide
          */
         public static final class Callable implements DataColumnsWithJoins, CommonColumns {
             /**
@@ -7759,7 +7766,6 @@
      * {@link PinnedPositions#STAR_WHEN_PINNING} to true to force all pinned and unpinned
      * contacts to be automatically starred and unstarred.
      * </p>
-     * @hide
      */
     public static final class PinnedPositions {
 
diff --git a/core/java/android/provider/DocumentsContract.java b/core/java/android/provider/DocumentsContract.java
index 6519f7e..b907375 100644
--- a/core/java/android/provider/DocumentsContract.java
+++ b/core/java/android/provider/DocumentsContract.java
@@ -57,6 +57,10 @@
  * <p>
  * To create a document provider, extend {@link DocumentsProvider}, which
  * provides a foundational implementation of this contract.
+ * <p>
+ * All client apps must hold a valid URI permission grant to access documents,
+ * typically issued when a user makes a selection through
+ * {@link Intent#ACTION_OPEN_DOCUMENT} or {@link Intent#ACTION_CREATE_DOCUMENT}.
  *
  * @see DocumentsProvider
  */
@@ -69,6 +73,8 @@
     // content://com.example/root/sdcard/search/?query=pony
     // content://com.example/document/12/
     // content://com.example/document/12/children/
+    // content://com.example/via/12/document/24/
+    // content://com.example/via/12/document/24/children/
 
     private DocumentsContract() {
     }
@@ -425,6 +431,14 @@
         public static final int FLAG_SUPPORTS_SEARCH = 1 << 3;
 
         /**
+         * Flag indicating that this root supports directory selection.
+         *
+         * @see #COLUMN_FLAGS
+         * @see DocumentsProvider#isChildDocument(String, String)
+         */
+        public static final int FLAG_SUPPORTS_DIR_SELECTION = 1 << 4;
+
+        /**
          * Flag indicating that this root is currently empty. This may be used
          * to hide the root when opening documents, but the root will still be
          * shown when creating documents and {@link #FLAG_SUPPORTS_CREATE} is
@@ -484,12 +498,15 @@
 
     /** {@hide} */
     public static final String EXTRA_THUMBNAIL_SIZE = "thumbnail_size";
+    /** {@hide} */
+    public static final String EXTRA_URI = "uri";
 
     private static final String PATH_ROOT = "root";
     private static final String PATH_RECENT = "recent";
     private static final String PATH_DOCUMENT = "document";
     private static final String PATH_CHILDREN = "children";
     private static final String PATH_SEARCH = "search";
+    private static final String PATH_VIA = "via";
 
     private static final String PARAM_QUERY = "query";
     private static final String PARAM_MANAGE = "manage";
@@ -532,6 +549,17 @@
     }
 
     /**
+     * Build URI representing access to descendant documents of the given
+     * {@link Document#COLUMN_DOCUMENT_ID}.
+     *
+     * @see #getViaDocumentId(Uri)
+     */
+    public static Uri buildViaUri(String authority, String documentId) {
+        return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(authority)
+                .appendPath(PATH_VIA).appendPath(documentId).build();
+    }
+
+    /**
      * Build URI representing the given {@link Document#COLUMN_DOCUMENT_ID} in a
      * document provider. When queried, a provider will return a single row with
      * columns defined by {@link Document}.
@@ -545,6 +573,41 @@
     }
 
     /**
+     * Build URI representing the given {@link Document#COLUMN_DOCUMENT_ID} in a
+     * document provider. Instead of directly accessing the target document,
+     * gain access via another document. The target document must be a
+     * descendant (child, grandchild, etc) of the via document.
+     * <p>
+     * This is typically used to access documents under a user-selected
+     * directory, since it doesn't require the user to separately confirm each
+     * new document access.
+     *
+     * @param viaUri a related document (directory) that the caller is
+     *            leveraging to gain access to the target document. The target
+     *            document must be a descendant of this directory.
+     * @param documentId the target document, which the caller may not have
+     *            direct access to.
+     * @see Intent#ACTION_PICK_DIRECTORY
+     * @see DocumentsProvider#isChildDocument(String, String)
+     * @see #buildDocumentUri(String, String)
+     */
+    public static Uri buildDocumentViaUri(Uri viaUri, String documentId) {
+        return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(viaUri.getAuthority()).appendPath(PATH_VIA)
+                .appendPath(getViaDocumentId(viaUri)).appendPath(PATH_DOCUMENT)
+                .appendPath(documentId).build();
+    }
+
+    /** {@hide} */
+    public static Uri buildDocumentMaybeViaUri(Uri baseUri, String documentId) {
+        if (isViaUri(baseUri)) {
+            return buildDocumentViaUri(baseUri, documentId);
+        } else {
+            return buildDocumentUri(baseUri.getAuthority(), documentId);
+        }
+    }
+
+    /**
      * Build URI representing the children of the given directory in a document
      * provider. When queried, a provider will return zero or more rows with
      * columns defined by {@link Document}.
@@ -562,6 +625,32 @@
     }
 
     /**
+     * Build URI representing the children of the given directory in a document
+     * provider. Instead of directly accessing the target document, gain access
+     * via another document. The target document must be a descendant (child,
+     * grandchild, etc) of the via document.
+     * <p>
+     * This is typically used to access documents under a user-selected
+     * directory, since it doesn't require the user to separately confirm each
+     * new document access.
+     *
+     * @param viaUri a related document (directory) that the caller is
+     *            leveraging to gain access to the target document. The target
+     *            document must be a descendant of this directory.
+     * @param parentDocumentId the target document, which the caller may not
+     *            have direct access to.
+     * @see Intent#ACTION_PICK_DIRECTORY
+     * @see DocumentsProvider#isChildDocument(String, String)
+     * @see #buildChildDocumentsUri(String, String)
+     */
+    public static Uri buildChildDocumentsViaUri(Uri viaUri, String parentDocumentId) {
+        return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT)
+                .authority(viaUri.getAuthority()).appendPath(PATH_VIA)
+                .appendPath(getViaDocumentId(viaUri)).appendPath(PATH_DOCUMENT)
+                .appendPath(parentDocumentId).appendPath(PATH_CHILDREN).build();
+    }
+
+    /**
      * Build URI representing a search for matching documents under a specific
      * root in a document provider. When queried, a provider will return zero or
      * more rows with columns defined by {@link Document}.
@@ -580,21 +669,31 @@
     /**
      * Test if the given URI represents a {@link Document} backed by a
      * {@link DocumentsProvider}.
+     *
+     * @see #buildDocumentUri(String, String)
+     * @see #buildDocumentViaUri(Uri, String)
      */
     public static boolean isDocumentUri(Context context, Uri uri) {
         final List<String> paths = uri.getPathSegments();
-        if (paths.size() < 2) {
-            return false;
+        if (paths.size() >= 2
+                && (PATH_DOCUMENT.equals(paths.get(0)) || PATH_VIA.equals(paths.get(0)))) {
+            return isDocumentsProvider(context, uri.getAuthority());
         }
-        if (!PATH_DOCUMENT.equals(paths.get(0))) {
-            return false;
-        }
+        return false;
+    }
 
+    /** {@hide} */
+    public static boolean isViaUri(Uri uri) {
+        final List<String> paths = uri.getPathSegments();
+        return (paths.size() >= 2 && PATH_VIA.equals(paths.get(0)));
+    }
+
+    private static boolean isDocumentsProvider(Context context, String authority) {
         final Intent intent = new Intent(PROVIDER_INTERFACE);
         final List<ResolveInfo> infos = context.getPackageManager()
                 .queryIntentContentProviders(intent, 0);
         for (ResolveInfo info : infos) {
-            if (uri.getAuthority().equals(info.providerInfo.authority)) {
+            if (authority.equals(info.providerInfo.authority)) {
                 return true;
             }
         }
@@ -606,27 +705,40 @@
      */
     public static String getRootId(Uri rootUri) {
         final List<String> paths = rootUri.getPathSegments();
-        if (paths.size() < 2) {
-            throw new IllegalArgumentException("Not a root: " + rootUri);
+        if (paths.size() >= 2 && PATH_ROOT.equals(paths.get(0))) {
+            return paths.get(1);
         }
-        if (!PATH_ROOT.equals(paths.get(0))) {
-            throw new IllegalArgumentException("Not a root: " + rootUri);
-        }
-        return paths.get(1);
+        throw new IllegalArgumentException("Invalid URI: " + rootUri);
     }
 
     /**
      * Extract the {@link Document#COLUMN_DOCUMENT_ID} from the given URI.
+     *
+     * @see #isDocumentUri(Context, Uri)
      */
     public static String getDocumentId(Uri documentUri) {
         final List<String> paths = documentUri.getPathSegments();
-        if (paths.size() < 2) {
-            throw new IllegalArgumentException("Not a document: " + documentUri);
+        if (paths.size() >= 2 && PATH_DOCUMENT.equals(paths.get(0))) {
+            return paths.get(1);
         }
-        if (!PATH_DOCUMENT.equals(paths.get(0))) {
-            throw new IllegalArgumentException("Not a document: " + documentUri);
+        if (paths.size() >= 4 && PATH_VIA.equals(paths.get(0))
+                && PATH_DOCUMENT.equals(paths.get(2))) {
+            return paths.get(3);
         }
-        return paths.get(1);
+        throw new IllegalArgumentException("Invalid URI: " + documentUri);
+    }
+
+    /**
+     * Extract the via {@link Document#COLUMN_DOCUMENT_ID} from the given URI.
+     *
+     * @see #isViaUri(Uri)
+     */
+    public static String getViaDocumentId(Uri documentUri) {
+        final List<String> paths = documentUri.getPathSegments();
+        if (paths.size() >= 2 && PATH_VIA.equals(paths.get(0))) {
+            return paths.get(1);
+        }
+        throw new IllegalArgumentException("Invalid URI: " + documentUri);
     }
 
     /**
@@ -758,7 +870,6 @@
      * @param mimeType MIME type of new document
      * @param displayName name of new document
      * @return newly created document, or {@code null} if failed
-     * @hide
      */
     public static Uri createDocument(ContentResolver resolver, Uri parentDocumentUri,
             String mimeType, String displayName) {
@@ -778,13 +889,12 @@
     public static Uri createDocument(ContentProviderClient client, Uri parentDocumentUri,
             String mimeType, String displayName) throws RemoteException {
         final Bundle in = new Bundle();
-        in.putString(Document.COLUMN_DOCUMENT_ID, getDocumentId(parentDocumentUri));
+        in.putParcelable(DocumentsContract.EXTRA_URI, parentDocumentUri);
         in.putString(Document.COLUMN_MIME_TYPE, mimeType);
         in.putString(Document.COLUMN_DISPLAY_NAME, displayName);
 
         final Bundle out = client.call(METHOD_CREATE_DOCUMENT, null, in);
-        return buildDocumentUri(
-                parentDocumentUri.getAuthority(), out.getString(Document.COLUMN_DOCUMENT_ID));
+        return out.getParcelable(DocumentsContract.EXTRA_URI);
     }
 
     /**
@@ -811,7 +921,7 @@
     public static void deleteDocument(ContentProviderClient client, Uri documentUri)
             throws RemoteException {
         final Bundle in = new Bundle();
-        in.putString(Document.COLUMN_DOCUMENT_ID, getDocumentId(documentUri));
+        in.putParcelable(DocumentsContract.EXTRA_URI, documentUri);
 
         client.call(METHOD_DELETE_DOCUMENT, null, in);
     }
diff --git a/core/java/android/provider/DocumentsProvider.java b/core/java/android/provider/DocumentsProvider.java
index 49816f8..1a7a00f2 100644
--- a/core/java/android/provider/DocumentsProvider.java
+++ b/core/java/android/provider/DocumentsProvider.java
@@ -46,6 +46,7 @@
 import libcore.io.IoUtils;
 
 import java.io.FileNotFoundException;
+import java.util.Objects;
 
 /**
  * Base class for a document provider. A document provider offers read and write
@@ -125,6 +126,8 @@
     private static final int MATCH_SEARCH = 4;
     private static final int MATCH_DOCUMENT = 5;
     private static final int MATCH_CHILDREN = 6;
+    private static final int MATCH_DOCUMENT_VIA = 7;
+    private static final int MATCH_CHILDREN_VIA = 8;
 
     private String mAuthority;
 
@@ -144,6 +147,8 @@
         mMatcher.addURI(mAuthority, "root/*/search", MATCH_SEARCH);
         mMatcher.addURI(mAuthority, "document/*", MATCH_DOCUMENT);
         mMatcher.addURI(mAuthority, "document/*/children", MATCH_CHILDREN);
+        mMatcher.addURI(mAuthority, "via/*/document/*", MATCH_DOCUMENT_VIA);
+        mMatcher.addURI(mAuthority, "via/*/document/*/children", MATCH_CHILDREN_VIA);
 
         // Sanity check our setup
         if (!info.exported) {
@@ -161,6 +166,35 @@
     }
 
     /**
+     * Test if a document is descendant (child, grandchild, etc) from the given
+     * parent. Providers must override this to support directory selection. You
+     * should avoid making network requests to keep this request fast.
+     *
+     * @param parentDocumentId parent to verify against.
+     * @param documentId child to verify.
+     * @return if given document is a descendant of the given parent.
+     * @see DocumentsContract.Root#FLAG_SUPPORTS_DIR_SELECTION
+     */
+    public boolean isChildDocument(String parentDocumentId, String documentId) {
+        return false;
+    }
+
+    /** {@hide} */
+    private void enforceVia(Uri documentUri) {
+        if (DocumentsContract.isViaUri(documentUri)) {
+            final String parent = DocumentsContract.getViaDocumentId(documentUri);
+            final String child = DocumentsContract.getDocumentId(documentUri);
+            if (Objects.equals(parent, child)) {
+                return;
+            }
+            if (!isChildDocument(parent, child)) {
+                throw new SecurityException(
+                        "Document " + child + " is not a descendant of " + parent);
+            }
+        }
+    }
+
+    /**
      * Create a new document and return its newly generated
      * {@link Document#COLUMN_DOCUMENT_ID}. You must allocate a new
      * {@link Document#COLUMN_DOCUMENT_ID} to represent the document, which must
@@ -182,9 +216,10 @@
 
     /**
      * Delete the requested document. Upon returning, any URI permission grants
-     * for the requested document will be revoked. If additional documents were
-     * deleted as a side effect of this call, such as documents inside a
-     * directory, the implementor is responsible for revoking those permissions.
+     * for the given document will be revoked. If additional documents were
+     * deleted as a side effect of this call (such as documents inside a
+     * directory) the implementor is responsible for revoking those permissions
+     * using {@link #revokeDocumentPermission(String)}.
      *
      * @param documentId the document to delete.
      */
@@ -420,8 +455,12 @@
                     return querySearchDocuments(
                             getRootId(uri), getSearchDocumentsQuery(uri), projection);
                 case MATCH_DOCUMENT:
+                case MATCH_DOCUMENT_VIA:
+                    enforceVia(uri);
                     return queryDocument(getDocumentId(uri), projection);
                 case MATCH_CHILDREN:
+                case MATCH_CHILDREN_VIA:
+                    enforceVia(uri);
                     if (DocumentsContract.isManageMode(uri)) {
                         return queryChildDocumentsForManage(
                                 getDocumentId(uri), projection, sortOrder);
@@ -449,6 +488,8 @@
                 case MATCH_ROOT:
                     return DocumentsContract.Root.MIME_TYPE_ITEM;
                 case MATCH_DOCUMENT:
+                case MATCH_DOCUMENT_VIA:
+                    enforceVia(uri);
                     return getDocumentType(getDocumentId(uri));
                 default:
                     return null;
@@ -460,6 +501,49 @@
     }
 
     /**
+     * Implementation is provided by the parent class. Can be overridden to
+     * provide additional functionality, but subclasses <em>must</em> always
+     * call the superclass. If the superclass returns {@code null}, the subclass
+     * may implement custom behavior.
+     * <p>
+     * This is typically used to resolve a "via" URI into a concrete document
+     * reference, issuing a narrower single-document URI permission grant along
+     * the way.
+     *
+     * @see DocumentsContract#buildDocumentViaUri(Uri, String)
+     */
+    @Override
+    public Uri canonicalize(Uri uri) {
+        final Context context = getContext();
+        switch (mMatcher.match(uri)) {
+            case MATCH_DOCUMENT_VIA:
+                enforceVia(uri);
+
+                final Uri narrowUri = DocumentsContract.buildDocumentUri(uri.getAuthority(),
+                        DocumentsContract.getDocumentId(uri));
+
+                // Caller may only have prefix grant, so extend them a grant to
+                // the narrow Uri. Caller already holds read grant to get here,
+                // so check for any other modes we should extend.
+                int modeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION;
+                if (context.checkCallingOrSelfUriPermission(uri,
+                        Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
+                        == PackageManager.PERMISSION_GRANTED) {
+                    modeFlags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
+                }
+                if (context.checkCallingOrSelfUriPermission(uri,
+                        Intent.FLAG_GRANT_READ_URI_PERMISSION
+                        | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION)
+                        == PackageManager.PERMISSION_GRANTED) {
+                    modeFlags |= Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION;
+                }
+                context.grantUriPermission(getCallingPackage(), narrowUri, modeFlags);
+                return narrowUri;
+        }
+        return null;
+    }
+
+    /**
      * Implementation is provided by the parent class. Throws by default, and
      * cannot be overriden.
      *
@@ -496,54 +580,47 @@
      * provide additional functionality, but subclasses <em>must</em> always
      * call the superclass. If the superclass returns {@code null}, the subclass
      * may implement custom behavior.
-     *
-     * @see #openDocument(String, String, CancellationSignal)
-     * @see #deleteDocument(String)
      */
     @Override
     public Bundle call(String method, String arg, Bundle extras) {
-        final Context context = getContext();
-
         if (!method.startsWith("android:")) {
-            // Let non-platform methods pass through
+            // Ignore non-platform methods
             return super.call(method, arg, extras);
         }
 
-        final String documentId = extras.getString(Document.COLUMN_DOCUMENT_ID);
-        final Uri documentUri = DocumentsContract.buildDocumentUri(mAuthority, documentId);
+        final Uri documentUri = extras.getParcelable(DocumentsContract.EXTRA_URI);
+        final String authority = documentUri.getAuthority();
+        final String documentId = DocumentsContract.getDocumentId(documentUri);
 
-        // Require that caller can manage requested document
-        final boolean callerHasManage =
-                context.checkCallingOrSelfPermission(android.Manifest.permission.MANAGE_DOCUMENTS)
-                == PackageManager.PERMISSION_GRANTED;
-        enforceWritePermissionInner(documentUri);
+        if (!mAuthority.equals(authority)) {
+            throw new SecurityException(
+                    "Requested authority " + authority + " doesn't match provider " + mAuthority);
+        }
+        enforceVia(documentUri);
 
         final Bundle out = new Bundle();
         try {
             if (METHOD_CREATE_DOCUMENT.equals(method)) {
+                enforceWritePermissionInner(documentUri);
+
                 final String mimeType = extras.getString(Document.COLUMN_MIME_TYPE);
                 final String displayName = extras.getString(Document.COLUMN_DISPLAY_NAME);
 
                 final String newDocumentId = createDocument(documentId, mimeType, displayName);
-                out.putString(Document.COLUMN_DOCUMENT_ID, newDocumentId);
 
-                // Extend permission grant towards caller if needed
-                if (!callerHasManage) {
-                    final Uri newDocumentUri = DocumentsContract.buildDocumentUri(
-                            mAuthority, newDocumentId);
-                    context.grantUriPermission(getCallingPackage(), newDocumentUri,
-                            Intent.FLAG_GRANT_READ_URI_PERMISSION
-                            | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
-                            | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
-                }
+                // No need to issue new grants here, since caller either has
+                // manage permission or a prefix grant. We might generate a
+                // "via" style URI if that's how they called us.
+                final Uri newDocumentUri = DocumentsContract.buildDocumentMaybeViaUri(documentUri,
+                        newDocumentId);
+                out.putParcelable(DocumentsContract.EXTRA_URI, newDocumentUri);
 
             } else if (METHOD_DELETE_DOCUMENT.equals(method)) {
+                enforceWritePermissionInner(documentUri);
                 deleteDocument(documentId);
 
                 // Document no longer exists, clean up any grants
-                context.revokeUriPermission(documentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION
-                        | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
-                        | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
+                revokeDocumentPermission(documentId);
 
             } else {
                 throw new UnsupportedOperationException("Method not supported " + method);
@@ -555,12 +632,25 @@
     }
 
     /**
+     * Revoke any active permission grants for the given
+     * {@link Document#COLUMN_DOCUMENT_ID}, usually called when a document
+     * becomes invalid. Follows the same semantics as
+     * {@link Context#revokeUriPermission(Uri, int)}.
+     */
+    public final void revokeDocumentPermission(String documentId) {
+        final Context context = getContext();
+        context.revokeUriPermission(DocumentsContract.buildDocumentUri(mAuthority, documentId), ~0);
+        context.revokeUriPermission(DocumentsContract.buildViaUri(mAuthority, documentId), ~0);
+    }
+
+    /**
      * Implementation is provided by the parent class. Cannot be overriden.
      *
      * @see #openDocument(String, String, CancellationSignal)
      */
     @Override
     public final ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
+        enforceVia(uri);
         return openDocument(getDocumentId(uri), mode, null);
     }
 
@@ -572,17 +662,47 @@
     @Override
     public final ParcelFileDescriptor openFile(Uri uri, String mode, CancellationSignal signal)
             throws FileNotFoundException {
+        enforceVia(uri);
         return openDocument(getDocumentId(uri), mode, signal);
     }
 
     /**
      * Implementation is provided by the parent class. Cannot be overriden.
      *
+     * @see #openDocument(String, String, CancellationSignal)
+     */
+    @Override
+    @SuppressWarnings("resource")
+    public final AssetFileDescriptor openAssetFile(Uri uri, String mode)
+            throws FileNotFoundException {
+        enforceVia(uri);
+        final ParcelFileDescriptor fd = openDocument(getDocumentId(uri), mode, null);
+        return fd != null ? new AssetFileDescriptor(fd, 0, -1) : null;
+    }
+
+    /**
+     * Implementation is provided by the parent class. Cannot be overriden.
+     *
+     * @see #openDocument(String, String, CancellationSignal)
+     */
+    @Override
+    @SuppressWarnings("resource")
+    public final AssetFileDescriptor openAssetFile(Uri uri, String mode, CancellationSignal signal)
+            throws FileNotFoundException {
+        enforceVia(uri);
+        final ParcelFileDescriptor fd = openDocument(getDocumentId(uri), mode, signal);
+        return fd != null ? new AssetFileDescriptor(fd, 0, -1) : null;
+    }
+
+    /**
+     * Implementation is provided by the parent class. Cannot be overriden.
+     *
      * @see #openDocumentThumbnail(String, Point, CancellationSignal)
      */
     @Override
     public final AssetFileDescriptor openTypedAssetFile(Uri uri, String mimeTypeFilter, Bundle opts)
             throws FileNotFoundException {
+        enforceVia(uri);
         if (opts != null && opts.containsKey(EXTRA_THUMBNAIL_SIZE)) {
             final Point sizeHint = opts.getParcelable(EXTRA_THUMBNAIL_SIZE);
             return openDocumentThumbnail(getDocumentId(uri), sizeHint, null);
@@ -600,6 +720,7 @@
     public final AssetFileDescriptor openTypedAssetFile(
             Uri uri, String mimeTypeFilter, Bundle opts, CancellationSignal signal)
             throws FileNotFoundException {
+        enforceVia(uri);
         if (opts != null && opts.containsKey(EXTRA_THUMBNAIL_SIZE)) {
             final Point sizeHint = opts.getParcelable(EXTRA_THUMBNAIL_SIZE);
             return openDocumentThumbnail(getDocumentId(uri), sizeHint, signal);
diff --git a/core/java/android/provider/MediaStore.java b/core/java/android/provider/MediaStore.java
index 457afcc..cfab1b3 100644
--- a/core/java/android/provider/MediaStore.java
+++ b/core/java/android/provider/MediaStore.java
@@ -173,6 +173,18 @@
      */
     public static final String EXTRA_MEDIA_TITLE = "android.intent.extra.title";
     /**
+     * The name of the Intent-extra used to define the genre.
+     */
+    public static final String EXTRA_MEDIA_GENRE = "android.intent.extra.genre";
+    /**
+     * The name of the Intent-extra used to define the playlist.
+     */
+    public static final String EXTRA_MEDIA_PLAYLIST = "android.intent.extra.playlist";
+    /**
+     * The name of the Intent-extra used to define the radio channel.
+     */
+    public static final String EXTRA_MEDIA_RADIO_CHANNEL = "android.intent.extra.radio_channel";
+    /**
      * The name of the Intent-extra used to define the search focus. The search focus
      * indicates whether the search should be for things related to the artist, album
      * or song that is identified by the other extras.
@@ -1393,6 +1405,11 @@
             public static final String CONTENT_TYPE = "vnd.android.cursor.dir/audio";
 
             /**
+             * The MIME type for an audio track.
+             */
+            public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/audio";
+
+            /**
              * The default sort order for this table
              */
             public static final String DEFAULT_SORT_ORDER = TITLE_KEY;
@@ -1863,6 +1880,13 @@
              */
             public static final String DEFAULT_SORT_ORDER = ALBUM_KEY;
         }
+
+        public static final class Radio {
+            /**
+             * The MIME type for entries in this table.
+             */
+            public static final String ENTRY_CONTENT_TYPE = "vnd.android.cursor.item/radio";
+        }
     }
 
     public static final class Video {
diff --git a/core/java/android/provider/SearchIndexableData.java b/core/java/android/provider/SearchIndexableData.java
new file mode 100644
index 0000000..60bcc40
--- /dev/null
+++ b/core/java/android/provider/SearchIndexableData.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2014 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 android.provider;
+
+import android.content.Context;
+
+import java.util.Locale;
+
+/**
+ * The Indexable data for Search.
+ *
+ * This abstract class defines the common parts for all search indexable data.
+ *
+ * @hide
+ */
+public abstract class SearchIndexableData {
+
+    /**
+     * The context for the data. Will usually allow retrieving some resources.
+     *
+     * @see Context
+     */
+    public Context context;
+
+    /**
+     * The locale for the data
+     */
+    public Locale locale;
+
+    /**
+     * Tells if the data will be included into the search results. This is application specific.
+     */
+    public boolean enabled;
+
+    /**
+     * The rank for the data. This is application specific.
+     */
+    public int rank;
+
+    /**
+     * The key for the data. This is application specific. Should be unique per data as the data
+     * should be able to be retrieved by the key.
+     */
+    public String key;
+
+    /**
+     * The class name associated with the data. Generally this is a Fragment class name for
+     * referring where the data is coming from and for launching the associated Fragment for
+     * displaying the data. This is used only when the data is provided "locally".
+     *
+     * If the data is provided "externally", the relevant information come from the
+     * {@link SearchIndexableData#intentAction} and {@link SearchIndexableData#intentTargetPackage}
+     * and {@link SearchIndexableData#intentTargetClass}.
+     *
+     * @see SearchIndexableData#intentAction
+     * @see SearchIndexableData#intentTargetPackage
+     * @see SearchIndexableData#intentTargetClass
+     */
+    public String className;
+
+    /**
+     * The package name for retrieving the icon associated with the data.
+     *
+     * @see SearchIndexableData#iconResId
+     */
+    public String packageName;
+
+    /**
+     * The icon resource ID associated with the data.
+     *
+     * @see SearchIndexableData#packageName
+     */
+    public int iconResId;
+
+    /**
+     * The Intent action associated with the data. This is used when the
+     * {@link SearchIndexableData#className} is not relevant.
+     *
+     * @see SearchIndexableData#intentTargetPackage
+     * @see SearchIndexableData#intentTargetClass
+     */
+    public String intentAction;
+
+    /**
+     * The Intent target package associated with the data.
+     *
+     * @see SearchIndexableData#intentAction
+     * @see SearchIndexableData#intentTargetClass
+     */
+    public String intentTargetPackage;
+
+    /**
+     * The Intent target class associated with the data.
+     *
+     * @see SearchIndexableData#intentAction
+     * @see SearchIndexableData#intentTargetPackage
+     */
+    public String intentTargetClass;
+
+    /**
+     * Default constructor.
+     */
+    public SearchIndexableData() {
+        locale = Locale.getDefault();
+        enabled = true;
+    }
+
+    /**
+     * Constructor with a {@link Context}.
+     *
+     * @param ctx the Context
+     */
+    public SearchIndexableData(Context ctx) {
+        this();
+        context = ctx;
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("SearchIndexableData[context: ");
+        sb.append(context);
+        sb.append(", ");
+        sb.append("locale: ");
+        sb.append(locale);
+        sb.append(", ");
+        sb.append("enabled: ");
+        sb.append(enabled);
+        sb.append(", ");
+        sb.append("rank: ");
+        sb.append(rank);
+        sb.append(", ");
+        sb.append("key: ");
+        sb.append(key);
+        sb.append(", ");
+        sb.append("className: ");
+        sb.append(className);
+        sb.append(", ");
+        sb.append("packageName: ");
+        sb.append(packageName);
+        sb.append(", ");
+        sb.append("iconResId: ");
+        sb.append(iconResId);
+        sb.append(", ");
+        sb.append("intentAction: ");
+        sb.append(intentAction);
+        sb.append(", ");
+        sb.append("intentTargetPackage: ");
+        sb.append(intentTargetPackage);
+        sb.append(", ");
+        sb.append("intentTargetClass: ");
+        sb.append(intentTargetClass);
+        sb.append("]");
+
+        return sb.toString();
+    }
+}
diff --git a/core/java/android/provider/SearchIndexableResource.java b/core/java/android/provider/SearchIndexableResource.java
new file mode 100644
index 0000000..c807df2
--- /dev/null
+++ b/core/java/android/provider/SearchIndexableResource.java
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2014 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 android.provider;
+
+import android.content.Context;
+
+/**
+ * Search Indexable Resource.
+ *
+ * This class wraps a set of reference information representing data that can be indexed from a
+ * resource which would typically be a {@link android.preference.PreferenceScreen}.
+ *
+ * xmlResId: the resource ID of a {@link android.preference.PreferenceScreen} XML file.
+ *
+ * @see SearchIndexableData
+ * @see android.preference.PreferenceScreen
+ *
+ * @hide
+ */
+public class SearchIndexableResource extends SearchIndexableData {
+
+    /**
+     * Resource ID of the associated {@link android.preference.PreferenceScreen} XML file.
+     */
+    public int xmlResId;
+
+    /**
+     * Constructor.
+     *
+     * @param rank the rank of the data.
+     * @param xmlResId the resource ID of a {@link android.preference.PreferenceScreen} XML file.
+     * @param className the class name associated with the data (generally a
+     *                  {@link android.app.Fragment}).
+     * @param iconResId the resource ID associated with the data.
+     */
+    public SearchIndexableResource(int rank, int xmlResId, String className, int iconResId) {
+        super();
+        this.rank = rank;
+        this.xmlResId = xmlResId;
+        this.className = className;
+        this.iconResId = iconResId;
+    }
+
+    /**
+     * Constructor.
+     *
+     * @param context the Context associated with the data.
+     */
+    public SearchIndexableResource(Context context) {
+        super(context);
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder();
+        sb.append("SearchIndexableResource[");
+        sb.append(super.toString());
+        sb.append(", ");
+        sb.append("xmlResId: ");
+        sb.append(xmlResId);
+        sb.append("]");
+
+        return sb.toString();
+    }
+}
\ No newline at end of file
diff --git a/core/java/android/provider/SearchIndexablesContract.java b/core/java/android/provider/SearchIndexablesContract.java
new file mode 100644
index 0000000..a8b4cfb0
--- /dev/null
+++ b/core/java/android/provider/SearchIndexablesContract.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright (C) 2014 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 android.provider;
+
+import android.content.ContentResolver;
+
+/**
+ * Describe the contract for an Indexable data.
+ *
+ * @hide
+ */
+public class SearchIndexablesContract {
+
+    /**
+     * Intent action used to identify {@link SearchIndexablesProvider}
+     * instances. This is used in the {@code <intent-filter>} of a {@code <provider>}.
+     */
+    public static final String PROVIDER_INTERFACE =
+            "android.content.action.SEARCH_INDEXABLES_PROVIDER";
+
+    private static final String SETTINGS = "settings";
+
+    /**
+     * Indexable reference names.
+     */
+    public static final String INDEXABLES_XML_RES = "indexables_xml_res";
+
+    /**
+     * ContentProvider path for indexable xml resources.
+     */
+    public static final String INDEXABLES_XML_RES_PATH = SETTINGS + "/" + INDEXABLES_XML_RES;
+
+    /**
+     * Indexable raw data names.
+     */
+    public static final String INDEXABLES_RAW = "indexables_raw";
+
+    /**
+     * ContentProvider path for indexable raw data.
+     */
+    public static final String INDEXABLES_RAW_PATH = SETTINGS + "/" + INDEXABLES_RAW;
+
+    /**
+     * Non indexable data keys.
+     */
+    public static final String NON_INDEXABLES_KEYS = "non_indexables_key";
+
+    /**
+     * ContentProvider path for non indexable data keys.
+     */
+    public static final String NON_INDEXABLES_KEYS_PATH = SETTINGS + "/" + NON_INDEXABLES_KEYS;
+
+    /**
+     * Indexable xml resources colums.
+     */
+    public static final String[] INDEXABLES_XML_RES_COLUMNS = new String[] {
+            XmlResource.COLUMN_RANK,                    // 0
+            XmlResource.COLUMN_XML_RESID,               // 1
+            XmlResource.COLUMN_CLASS_NAME,              // 2
+            XmlResource.COLUMN_ICON_RESID,              // 3
+            XmlResource.COLUMN_INTENT_ACTION,           // 4
+            XmlResource.COLUMN_INTENT_TARGET_PACKAGE,   // 5
+            XmlResource.COLUMN_INTENT_TARGET_CLASS      // 6
+    };
+
+    /**
+     * Indexable xml resources colums indices.
+     */
+    public static final int COLUMN_INDEX_XML_RES_RANK = 0;
+    public static final int COLUMN_INDEX_XML_RES_RESID = 1;
+    public static final int COLUMN_INDEX_XML_RES_CLASS_NAME = 2;
+    public static final int COLUMN_INDEX_XML_RES_ICON_RESID = 3;
+    public static final int COLUMN_INDEX_XML_RES_INTENT_ACTION = 4;
+    public static final int COLUMN_INDEX_XML_RES_INTENT_TARGET_PACKAGE = 5;
+    public static final int COLUMN_INDEX_XML_RES_INTENT_TARGET_CLASS = 6;
+
+    /**
+     * Indexable raw data colums.
+     */
+    public static final String[] INDEXABLES_RAW_COLUMNS = new String[] {
+            RawData.COLUMN_RANK,                    // 0
+            RawData.COLUMN_TITLE,                   // 1
+            RawData.COLUMN_SUMMARY_ON,              // 2
+            RawData.COLUMN_SUMMARY_OFF,             // 3
+            RawData.COLUMN_ENTRIES,                 // 4
+            RawData.COLUMN_KEYWORDS,                // 5
+            RawData.COLUMN_SCREEN_TITLE,            // 6
+            RawData.COLUMN_CLASS_NAME,              // 7
+            RawData.COLUMN_ICON_RESID,              // 8
+            RawData.COLUMN_INTENT_ACTION,           // 9
+            RawData.COLUMN_INTENT_TARGET_PACKAGE,   // 10
+            RawData.COLUMN_INTENT_TARGET_CLASS,     // 11
+            RawData.COLUMN_KEY,                     // 12
+    };
+
+    /**
+     * Indexable raw data colums indices.
+     */
+    public static final int COLUMN_INDEX_RAW_RANK = 0;
+    public static final int COLUMN_INDEX_RAW_TITLE = 1;
+    public static final int COLUMN_INDEX_RAW_SUMMARY_ON = 2;
+    public static final int COLUMN_INDEX_RAW_SUMMARY_OFF = 3;
+    public static final int COLUMN_INDEX_RAW_ENTRIES = 4;
+    public static final int COLUMN_INDEX_RAW_KEYWORDS = 5;
+    public static final int COLUMN_INDEX_RAW_SCREEN_TITLE = 6;
+    public static final int COLUMN_INDEX_RAW_CLASS_NAME = 7;
+    public static final int COLUMN_INDEX_RAW_ICON_RESID = 8;
+    public static final int COLUMN_INDEX_RAW_INTENT_ACTION = 9;
+    public static final int COLUMN_INDEX_RAW_INTENT_TARGET_PACKAGE = 10;
+    public static final int COLUMN_INDEX_RAW_INTENT_TARGET_CLASS = 11;
+    public static final int COLUMN_INDEX_RAW_KEY = 12;
+
+    /**
+     * Indexable raw data colums.
+     */
+    public static final String[] NON_INDEXABLES_KEYS_COLUMNS = new String[] {
+            NonIndexableKey.COLUMN_KEY_VALUE      // 0
+    };
+
+    /**
+     * Non indexable data keys colums indices.
+     */
+    public static final int COLUMN_INDEX_NON_INDEXABLE_KEYS_KEY_VALUE = 0;
+
+    /**
+     * Constants related to a {@link SearchIndexableResource}.
+     *
+     * This is a description of
+     */
+    public static final class XmlResource extends BaseColumns {
+        private XmlResource() {
+        }
+
+        public static final String MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE +
+                "/" + INDEXABLES_XML_RES;
+
+        /**
+         * XML resource ID for the {@link android.preference.PreferenceScreen} to load and index.
+         */
+        public static final String COLUMN_XML_RESID = "xmlResId";
+    }
+
+    /**
+     * Constants related to a {@link SearchIndexableData}.
+     *
+     * This is the raw data that is stored into an Index. This is related to
+     * {@link android.preference.Preference} and its attributes like
+     * {@link android.preference.Preference#getTitle()},
+     * {@link android.preference.Preference#getSummary()}, etc.
+     *
+     */
+    public static final class RawData extends BaseColumns {
+        private RawData() {
+        }
+
+        public static final String MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE +
+                "/" + INDEXABLES_RAW;
+
+        /**
+         * Title's raw data.
+         */
+        public static final String COLUMN_TITLE = "title";
+
+        /**
+         * Summary's raw data when the data is "ON".
+         */
+        public static final String COLUMN_SUMMARY_ON = "summaryOn";
+
+        /**
+         * Summary's raw data when the data is "OFF".
+         */
+        public static final String COLUMN_SUMMARY_OFF = "summaryOff";
+
+        /**
+         * Entries associated with the raw data (when the data can have several values).
+         */
+        public static final String COLUMN_ENTRIES = "entries";
+
+        /**
+         * Keywords' raw data.
+         */
+        public static final String COLUMN_KEYWORDS = "keywords";
+
+        /**
+         * Fragment or Activity title associated with the raw data.
+         */
+        public static final String COLUMN_SCREEN_TITLE = "screenTitle";
+
+        /**
+         * Key associated with the raw data. The key needs to be unique.
+         */
+        public static final String COLUMN_KEY = "key";
+    }
+
+    /**
+     * Constants related to a {@link SearchIndexableResource} and {@link SearchIndexableData}.
+     *
+     * This is a description of a data (thru its unique key) that cannot be indexed.
+     */
+    public static final class NonIndexableKey extends BaseColumns {
+        private NonIndexableKey() {
+        }
+
+        public static final String MIME_TYPE = ContentResolver.CURSOR_DIR_BASE_TYPE +
+                "/" + NON_INDEXABLES_KEYS;
+
+        /**
+         * Key for the non indexable data.
+         */
+        public static final String COLUMN_KEY_VALUE = "key";
+    }
+
+    /**
+     * The base columns.
+     */
+    private static class BaseColumns {
+        private BaseColumns() {
+        }
+
+        /**
+         * Rank of the data. This is an integer used for ranking the search results. This is
+         * application specific.
+         */
+        public static final String COLUMN_RANK = "rank";
+
+        /**
+         * Class name associated with the data (usually a Fragment class name).
+         */
+        public static final String COLUMN_CLASS_NAME = "className";
+
+        /**
+         * Icon resource ID for the data.
+         */
+        public static final String COLUMN_ICON_RESID = "iconResId";
+
+        /**
+         * Intent action associated with the data.
+         */
+        public static final String COLUMN_INTENT_ACTION = "intentAction";
+
+        /**
+         * Intent target package associated with the data.
+         */
+        public static final String COLUMN_INTENT_TARGET_PACKAGE = "intentTargetPackage";
+
+        /**
+         * Intent target class associated with the data.
+         */
+        public static final String COLUMN_INTENT_TARGET_CLASS = "intentTargetClass";
+    }
+}
diff --git a/core/java/android/provider/SearchIndexablesProvider.java b/core/java/android/provider/SearchIndexablesProvider.java
new file mode 100644
index 0000000..9c8f6d0
--- /dev/null
+++ b/core/java/android/provider/SearchIndexablesProvider.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2014 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 android.provider;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.UriMatcher;
+import android.content.pm.ProviderInfo;
+import android.database.Cursor;
+import android.net.Uri;
+
+/**
+ * Base class for a search indexable provider. Such provider offers data to be indexed either
+ * as a reference to an XML file (like a {@link android.preference.PreferenceScreen}) or either
+ * as some raw data.
+ *
+ * @see SearchIndexableResource
+ * @see SearchIndexableData
+ * @see SearchIndexablesContract
+ *
+ * To create a search indexables provider, extend this class, then implement the abstract methods,
+ * and add it to your manifest like this:
+ *
+ * <pre class="prettyprint">&lt;manifest&gt;
+ *    ...
+ *    &lt;application&gt;
+ *        ...
+ *        &lt;provider
+ *            android:name="com.example.MyIndexablesProvider"
+ *            android:authorities="com.example.myindexablesprovider"
+ *            android:exported="true"
+ *            android:grantUriPermissions="true"
+ *            android:permission="android.permission.READ_SEARCH_INDEXABLES"
+ *            &lt;intent-filter&gt;
+ *                &lt;action android:name="android.content.action.SEARCH_INDEXABLES_PROVIDER" /&gt;
+ *            &lt;/intent-filter&gt;
+ *        &lt;/provider&gt;
+ *        ...
+ *    &lt;/application&gt;
+ *&lt;/manifest&gt;</pre>
+ * <p>
+ * When defining your provider, you must protect it with
+ * {@link android.Manifest.permission#READ_SEARCH_INDEXABLES}, which is a permission only the system
+ * can obtain.
+ * </p>
+ *
+ * @hide
+ */
+public abstract class SearchIndexablesProvider extends ContentProvider {
+    private static final String TAG = "IndexablesProvider";
+
+    private String mAuthority;
+    private UriMatcher mMatcher;
+
+    private static final int MATCH_RES_CODE = 1;
+    private static final int MATCH_RAW_CODE = 2;
+    private static final int MATCH_NON_INDEXABLE_KEYS_CODE = 3;
+
+    /**
+     * Implementation is provided by the parent class.
+     */
+    @Override
+    public void attachInfo(Context context, ProviderInfo info) {
+        mAuthority = info.authority;
+
+        mMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+        mMatcher.addURI(mAuthority, SearchIndexablesContract.INDEXABLES_XML_RES_PATH,
+                MATCH_RES_CODE);
+        mMatcher.addURI(mAuthority, SearchIndexablesContract.INDEXABLES_RAW_PATH,
+                MATCH_RAW_CODE);
+        mMatcher.addURI(mAuthority, SearchIndexablesContract.NON_INDEXABLES_KEYS_PATH,
+                MATCH_NON_INDEXABLE_KEYS_CODE);
+
+        // Sanity check our setup
+        if (!info.exported) {
+            throw new SecurityException("Provider must be exported");
+        }
+        if (!info.grantUriPermissions) {
+            throw new SecurityException("Provider must grantUriPermissions");
+        }
+        if (!android.Manifest.permission.READ_SEARCH_INDEXABLES.equals(info.readPermission)) {
+            throw new SecurityException("Provider must be protected by READ_SEARCH_INDEXABLES");
+        }
+
+        super.attachInfo(context, info);
+    }
+
+    @Override
+    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                        String sortOrder) {
+        switch (mMatcher.match(uri)) {
+            case MATCH_RES_CODE:
+                return queryXmlResources(null);
+            case MATCH_RAW_CODE:
+                return queryRawData(null);
+            case MATCH_NON_INDEXABLE_KEYS_CODE:
+                return queryNonIndexableKeys(null);
+            default:
+                throw new UnsupportedOperationException("Unknown Uri " + uri);
+        }
+    }
+
+    /**
+     * Returns all {@link android.provider.SearchIndexablesContract.XmlResource}.
+     *
+     * Those are Xml resource IDs to some {@link android.preference.PreferenceScreen}.
+     *
+     * @param projection list of {@link android.provider.SearchIndexablesContract.XmlResource}
+     *                   columns to put into the cursor. If {@code null} all supported columns
+     *                   should be included.
+     */
+    public abstract Cursor queryXmlResources(String[] projection);
+
+    /**
+     * Returns all {@link android.provider.SearchIndexablesContract.RawData}.
+     *
+     * Those are the raw indexable data.
+     *
+     * @param projection list of {@link android.provider.SearchIndexablesContract.RawData} columns
+     *                   to put into the cursor. If {@code null} all supported columns should be
+     *                   included.
+     */
+    public abstract Cursor queryRawData(String[] projection);
+
+    /**
+     * Returns all {@link android.provider.SearchIndexablesContract.NonIndexableKey}.
+     *
+     * Those are the non indexable data keys.
+     *
+     * @param projection list of {@link android.provider.SearchIndexablesContract.NonIndexableKey}
+     *                   columns to put into the cursor. If {@code null} all supported columns
+     *                   should be included.
+     */
+    public abstract Cursor queryNonIndexableKeys(String[] projection);
+
+    @Override
+    public String getType(Uri uri) {
+        switch (mMatcher.match(uri)) {
+            case MATCH_RES_CODE:
+                return SearchIndexablesContract.XmlResource.MIME_TYPE;
+            case MATCH_RAW_CODE:
+                return SearchIndexablesContract.RawData.MIME_TYPE;
+            case MATCH_NON_INDEXABLE_KEYS_CODE:
+                return SearchIndexablesContract.NonIndexableKey.MIME_TYPE;
+            default:
+                throw new IllegalArgumentException("Unknown URI " + uri);
+        }
+    }
+
+    /**
+     * Implementation is provided by the parent class. Throws by default, and cannot be overriden.
+     */
+    @Override
+    public final Uri insert(Uri uri, ContentValues values) {
+        throw new UnsupportedOperationException("Insert not supported");
+    }
+
+    /**
+     * Implementation is provided by the parent class. Throws by default, and cannot be overriden.
+     */
+    @Override
+    public final int delete(Uri uri, String selection, String[] selectionArgs) {
+        throw new UnsupportedOperationException("Delete not supported");
+    }
+
+    /**
+     * Implementation is provided by the parent class. Throws by default, and cannot be overriden.
+     */
+    @Override
+    public final int update(
+            Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+        throw new UnsupportedOperationException("Update not supported");
+    }
+}
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 3810eb3..ab06230 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -723,6 +723,13 @@
             = "android.settings.NOTIFICATION_LISTENER_SETTINGS";
 
     /**
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_CONDITION_PROVIDER_SETTINGS
+            = "android.settings.ACTION_CONDITION_PROVIDER_SETTINGS";
+
+    /**
      * Activity Action: Show settings for video captioning.
      * <p>
      * In some cases, a matching Activity may not exist, so ensure you safeguard
@@ -749,6 +756,19 @@
     public static final String ACTION_PRINT_SETTINGS =
             "android.settings.ACTION_PRINT_SETTINGS";
 
+    /**
+     * Activity Action: Show Zen Mode configuration settings.
+     *
+     * @hide
+     */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
+
+    /** {@hide} */
+    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+    public static final String
+            ACTION_SHOW_REGULATORY_INFO = "android.settings.SHOW_REGULATORY_INFO";
+
     // End of Intent actions for Settings
 
     /**
@@ -3303,6 +3323,12 @@
                 "input_method_selector_visibility";
 
         /**
+         * The currently selected voice interaction service flattened ComponentName.
+         * @hide
+         */
+        public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service";
+
+        /**
          * bluetooth HCI snoop log configuration
          * @hide
          */
@@ -3352,21 +3378,29 @@
         public static final String INSTALL_NON_MARKET_APPS = Global.INSTALL_NON_MARKET_APPS;
 
         /**
-         * Comma-separated list of location providers that activities may access.
+         * Comma-separated list of location providers that activities may access. Do not rely on
+         * this value being present in settings.db or on ContentObserver notifications on the
+         * corresponding Uri.
          *
-         * @deprecated use {@link #LOCATION_MODE}
+         * @deprecated use {@link #LOCATION_MODE} and
+         * {@link LocationManager#MODE_CHANGED_ACTION} (or
+         * {@link LocationManager#PROVIDERS_CHANGED_ACTION})
          */
         @Deprecated
         public static final String LOCATION_PROVIDERS_ALLOWED = "location_providers_allowed";
 
         /**
          * The degree of location access enabled by the user.
-         * <p/>
+         * <p>
          * When used with {@link #putInt(ContentResolver, String, int)}, must be one of {@link
          * #LOCATION_MODE_HIGH_ACCURACY}, {@link #LOCATION_MODE_SENSORS_ONLY}, {@link
          * #LOCATION_MODE_BATTERY_SAVING}, or {@link #LOCATION_MODE_OFF}. When used with {@link
          * #getInt(ContentResolver, String)}, the caller must gracefully handle additional location
          * modes that might be added in the future.
+         * <p>
+         * Note: do not rely on this value being present in settings.db or on ContentObserver
+         * notifications for the corresponding Uri. Use {@link LocationManager#MODE_CHANGED_ACTION}
+         * to receive changes in this value.
          */
         public static final String LOCATION_MODE = "location_mode";
 
@@ -3407,6 +3441,11 @@
         public static final String LOCK_PATTERN_VISIBLE = "lock_pattern_visible_pattern";
 
         /**
+         * Whether the NFC unlock feature is enabled (0 = false, 1 = true)
+         */
+        public static final String NFC_UNLOCK_ENABLED = "nfc_unlock_enabled";
+
+        /**
          * Whether lock pattern will vibrate as user enters (0 = false, 1 =
          * true)
          *
@@ -3463,6 +3502,14 @@
             "lock_screen_owner_info_enabled";
 
         /**
+         * When set by a user, allows notifications to be shown atop a securely locked screen
+         * in their full "private" form (same as when the device is unlocked).
+         * @hide
+         */
+        public static final String LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS =
+                "lock_screen_allow_private_notifications";
+
+        /**
          * The Logging ID (a unique 64-bit value) as a hex string.
          * Used as a pseudonymous identifier for logging.
          * @deprecated This identifier is poorly initialized and has
@@ -3741,6 +3788,16 @@
                 "accessibility_captioning_edge_color";
 
         /**
+         * Integer property that specifes the window color for captions as a
+         * packed 32-bit color.
+         *
+         * @see android.graphics.Color#argb
+         * @hide
+         */
+        public static final String ACCESSIBILITY_CAPTIONING_WINDOW_COLOR =
+                "accessibility_captioning_window_color";
+
+        /**
          * String property that specifies the typeface for captions, one of:
          * <ul>
          * <li>DEFAULT
@@ -3764,6 +3821,97 @@
                 "accessibility_captioning_font_scale";
 
         /**
+         * Setting that specifies whether the quick setting tile for display
+         * color inversion is enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_INVERSION_QUICK_SETTING_ENABLED =
+                "accessibility_display_inversion_quick_setting_enabled";
+
+        /**
+         * Setting that specifies whether display color inversion is enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_INVERSION_ENABLED =
+                "accessibility_display_inversion_enabled";
+
+        /**
+         * Integer property that specifies the type of color inversion to
+         * perform. Valid values are defined in AccessibilityManager.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_INVERSION =
+                "accessibility_display_inversion";
+
+        /**
+         * Setting that specifies whether the quick setting tile for display
+         * color space adjustment is enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_DALTONIZER_QUICK_SETTING_ENABLED =
+                "accessibility_display_daltonizer_quick_setting_enabled";
+
+        /**
+         * Setting that specifies whether display color space adjustment is
+         * enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED =
+                "accessibility_display_daltonizer_enabled";
+
+        /**
+         * Integer property that specifies the type of color space adjustment to
+         * perform. Valid values are defined in AccessibilityManager.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_DALTONIZER =
+                "accessibility_display_daltonizer";
+
+        /**
+         * Setting that specifies whether the quick setting tile for display
+         * contrast enhancement is enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_CONTRAST_QUICK_SETTING_ENABLED =
+                "accessibility_display_contrast_quick_setting_enabled";
+
+        /**
+         * Setting that specifies whether display contrast enhancement is
+         * enabled.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED =
+                "accessibility_display_contrast_enabled";
+
+        /**
+         * Floating point property that specifies display contrast adjustment.
+         * Valid range is [0, ...] where 0 is gray, 1 is normal, and higher
+         * values indicate enhanced contrast.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_CONTRAST =
+                "accessibility_display_contrast";
+
+        /**
+         * Floating point property that specifies display brightness adjustment.
+         * Valid range is [-1, 1] where -1 is black, 0 is default, and 1 is
+         * white.
+         *
+         * @hide
+         */
+        public static final String ACCESSIBILITY_DISPLAY_BRIGHTNESS =
+                "accessibility_display_brightness";
+
+        /**
          * The timout for considering a press to be a long press in milliseconds.
          * @hide
          */
@@ -4380,6 +4528,11 @@
          */
         public static final String ENABLED_NOTIFICATION_LISTENERS = "enabled_notification_listeners";
 
+        /**
+         * @hide
+         */
+        public static final String ENABLED_CONDITION_PROVIDERS = "enabled_condition_providers";
+
         /** @hide */
         public static final String BAR_SERVICE_COMPONENT = "bar_service_component";
 
@@ -4967,6 +5120,13 @@
        public static final String NETWORK_PREFERENCE = "network_preference";
 
        /**
+        * Which package name to use for network scoring. If null, or if the package is not a valid
+        * scorer app, external network scores will neither be requested nor accepted.
+        * @hide
+        */
+       public static final String NETWORK_SCORER_APP = "network_scorer_app";
+
+       /**
         * If the NITZ_UPDATE_DIFF time is exceeded then an automatic adjustment
         * to SystemClock will be allowed even if NITZ_UPDATE_SPACING has not been
         * exceeded.
@@ -5833,6 +5993,12 @@
         public static final String SHOW_PROCESSES = "show_processes";
 
         /**
+         * If 1 low power mode is enabled.
+         * @hide
+         */
+        public static final String LOW_POWER_MODE = "low_power";
+
+         /**
          * If 1, the activity manager will aggressively finish activities and
          * processes as soon as they are no longer needed.  If 0, the normal
          * extended lifetime is used.
@@ -5941,6 +6107,66 @@
         public static final String LOW_BATTERY_SOUND_TIMEOUT = "low_battery_sound_timeout";
 
         /**
+         * Milliseconds to wait before bouncing Wi-Fi after settings is restored. Note that after
+         * the caller is done with this, they should call {@link ContentResolver#delete(Uri)} to
+         * clean up any value that they may have written.
+         *
+         * @hide
+         */
+        public static final String WIFI_BOUNCE_DELAY_OVERRIDE_MS = "wifi_bounce_delay_override_ms";
+
+        /**
+         * Defines global runtime overrides to window policy.
+         *
+         * See {@link com.android.internal.policy.impl.PolicyControl} for value format.
+         *
+         * @hide
+         */
+        public static final String POLICY_CONTROL = "policy_control";
+
+
+        /**
+         * This preference enables notification display even over a securely
+         * locked screen.
+         * @hide
+         */
+        public static final String LOCK_SCREEN_SHOW_NOTIFICATIONS =
+                "lock_screen_show_notifications";
+
+        /**
+         * Defines global zen mode.  ZEN_MODE_OFF or ZEN_MODE_ON.
+         *
+         * @hide
+         */
+        public static final String ZEN_MODE = "zen_mode";
+
+        /** @hide */ public static final int ZEN_MODE_OFF = 0;
+        /** @hide */ public static final int ZEN_MODE_ON = 1;
+
+        /** @hide */ public static String zenModeToString(int mode) {
+            if (mode == ZEN_MODE_OFF) return "ZEN_MODE_OFF";
+            return "ZEN_MODE_ON";
+        }
+
+        /**
+         * Opaque value, changes when persisted zen mode configuration changes.
+         *
+         * @hide
+         */
+        public static final String ZEN_MODE_CONFIG_ETAG = "zen_mode_config_etag";
+
+        /**
+         * Defines global heads up toggle.  One of HEADS_UP_OFF, HEADS_UP_ON.
+         *
+         * @hide
+         */
+        public static final String HEADS_UP_NOTIFICATIONS_ENABLED =
+                "heads_up_notifications_enabled";
+
+        /** @hide */ public static final int HEADS_UP_OFF = 0;
+        /** @hide */ public static final int HEADS_UP_ON = 1;
+
+        /**
          * Settings to backup. This is here so that it's in the same place as the settings
          * keys and easy to update.
          *
diff --git a/core/java/android/provider/TvContract.java b/core/java/android/provider/TvContract.java
new file mode 100644
index 0000000..62252be
--- /dev/null
+++ b/core/java/android/provider/TvContract.java
@@ -0,0 +1,596 @@
+/*
+ * Copyright (C) 2014 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 android.provider;
+
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.net.Uri;
+
+import java.util.List;
+
+/**
+ * <p>
+ * The contract between the TV provider and applications. Contains definitions for the supported
+ * URIs and columns.
+ * </p>
+ * <h3>Overview</h3>
+ * <p>
+ * TvContract defines a basic database of TV content metadata such as channel and program
+ * information. The information is stored in {@link Channels} and {@link Programs} tables.
+ * </p>
+ * <ul>
+ *     <li>A row in the {@link Channels} table represents information about a TV channel. The data
+ *         format can vary greatly from standard to standard or according to service provider, thus
+ *         the columns here are mostly comprised of basic entities that are usually seen to users
+ *         regardless of standard such as channel number and name.</li>
+ *     <li>A row in the {@link Programs} table represents a set of data describing a TV program such
+ *         as program title and start time.</li>
+ * </ul>
+ */
+public final class TvContract {
+    /** The authority for the TV provider. */
+    public static final String AUTHORITY = "com.android.tv";
+
+    private static final String PATH_CHANNEL = "channel";
+    private static final String PATH_PROGRAM = "program";
+    private static final String PATH_INPUT = "input";
+
+    /**
+     * An optional query, update or delete URI parameter that allows the caller to specify start
+     * time (in milliseconds since the epoch) to filter programs.
+     *
+     * @hide
+     */
+    public static final String PARAM_START_TIME = "start_time";
+
+    /**
+     * An optional query, update or delete URI parameter that allows the caller to specify end time
+     * (in milliseconds since the epoch) to filter programs.
+     *
+     * @hide
+     */
+    public static final String PARAM_END_TIME = "end_time";
+
+    /**
+     * A query, update or delete URI parameter that allows the caller to operate on all or
+     * browsable-only channels. If set to "true", the rows that contain non-browsable channels are
+     * not affected.
+     *
+     * @hide
+     */
+    public static final String PARAM_BROWSABLE_ONLY = "browable_only";
+
+    /**
+     * Builds a URI that points to a specific channel.
+     *
+     * @param channelId The ID of the channel to point to.
+     */
+    public static final Uri buildChannelUri(long channelId) {
+        return ContentUris.withAppendedId(Channels.CONTENT_URI, channelId);
+    }
+
+    /**
+     * Builds a URI that points to all browsable channels from a given TV input.
+     *
+     * @param name {@link ComponentName} of the {@link android.tv.TvInputService} that implements
+     *            the given TV input.
+     */
+    public static final Uri buildChannelsUriForInput(ComponentName name) {
+        return buildChannelsUriForInput(name, true);
+    }
+
+    /**
+     * Builds a URI that points to all or browsable-only channels from a given TV input.
+     *
+     * @param name {@link ComponentName} of the {@link android.tv.TvInputService} that implements
+     *            the given TV input.
+     * @param browsableOnly If set to {@code true} the URI points to only browsable channels. If set
+     *            to {@code false} the URI points to all channels regardless of whether they are
+     *            browsable or not.
+     */
+    public static final Uri buildChannelsUriForInput(ComponentName name, boolean browsableOnly) {
+        return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY)
+                .appendPath(PATH_INPUT).appendPath(name.getPackageName())
+                .appendPath(name.getClassName()).appendPath(PATH_CHANNEL)
+                .appendQueryParameter(PARAM_BROWSABLE_ONLY, String.valueOf(browsableOnly)).build();
+    }
+
+    /**
+     * Builds a URI that points to a specific program.
+     *
+     * @param programId The ID of the program to point to.
+     */
+    public static final Uri buildProgramUri(long programId) {
+        return ContentUris.withAppendedId(Programs.CONTENT_URI, programId);
+    }
+
+    /**
+     * Builds a URI that points to all programs on a given channel.
+     *
+     * @param channelUri The URI of the channel to return programs for.
+     */
+    public static final Uri buildProgramsUriForChannel(Uri channelUri) {
+        if (!PATH_CHANNEL.equals(channelUri.getPathSegments().get(0))) {
+            throw new IllegalArgumentException("Not a channel: " + channelUri);
+        }
+        String channelId = String.valueOf(ContentUris.parseId(channelUri));
+        return new Uri.Builder().scheme(ContentResolver.SCHEME_CONTENT).authority(AUTHORITY)
+                .appendPath(PATH_CHANNEL).appendPath(channelId).appendPath(PATH_PROGRAM).build();
+    }
+
+    /**
+     * Builds a URI that points to programs on a specific channel whose schedules overlap with the
+     * given time frame.
+     *
+     * @param channelUri The URI of the channel to return programs for.
+     * @param startTime The start time used to filter programs. The returned programs should have
+     *            {@link Programs#END_TIME_UTC_MILLIS} that is greater than this time.
+     * @param endTime The end time used to filter programs. The returned programs should have
+     *            {@link Programs#START_TIME_UTC_MILLIS} that is less than this time.
+     */
+    public static final Uri buildProgramsUriForChannel(Uri channelUri, long startTime,
+            long endTime) {
+        Uri uri = buildProgramsUriForChannel(channelUri);
+        return uri.buildUpon().appendQueryParameter(PARAM_START_TIME, String.valueOf(startTime))
+                .appendQueryParameter(PARAM_END_TIME, String.valueOf(endTime)).build();
+    }
+
+    /**
+     * Builds a URI that points to a specific program the user watched.
+     *
+     * @param watchedProgramId The ID of the watched program to point to.
+     * @hide
+     */
+    public static final Uri buildWatchedProgramUri(long watchedProgramId) {
+        return ContentUris.withAppendedId(WatchedPrograms.CONTENT_URI, watchedProgramId);
+    }
+
+    /**
+     * Extracts the {@link Channels#PACKAGE_NAME} from a given URI.
+     *
+     * @param channelsUri A URI constructed by {@link #buildChannelsUriForInput(ComponentName)} or
+     *            {@link #buildChannelsUriForInput(ComponentName, boolean)}.
+     * @hide
+     */
+    public static final String getPackageName(Uri channelsUri) {
+        final List<String> paths = channelsUri.getPathSegments();
+        if (paths.size() < 4) {
+            throw new IllegalArgumentException("Not channels: " + channelsUri);
+        }
+        if (!PATH_INPUT.equals(paths.get(0)) || !PATH_CHANNEL.equals(paths.get(3))) {
+            throw new IllegalArgumentException("Not channels: " + channelsUri);
+        }
+        return paths.get(1);
+    }
+
+    /**
+     * Extracts the {@link Channels#SERVICE_NAME} from a given URI.
+     *
+     * @param channelsUri A URI constructed by {@link #buildChannelsUriForInput(ComponentName)} or
+     *            {@link #buildChannelsUriForInput(ComponentName, boolean)}.
+     * @hide
+     */
+    public static final String getServiceName(Uri channelsUri) {
+        final List<String> paths = channelsUri.getPathSegments();
+        if (paths.size() < 4) {
+            throw new IllegalArgumentException("Not channels: " + channelsUri);
+        }
+        if (!PATH_INPUT.equals(paths.get(0)) || !PATH_CHANNEL.equals(paths.get(3))) {
+            throw new IllegalArgumentException("Not channels: " + channelsUri);
+        }
+        return paths.get(2);
+    }
+
+    /**
+     * Extracts the {@link Channels#_ID} from a given URI.
+     *
+     * @param programsUri A URI constructed by {@link #buildProgramsUriForChannel(Uri)} or
+     *            {@link #buildProgramsUriForChannel(Uri, long, long)}.
+     * @hide
+     */
+    public static final String getChannelId(Uri programsUri) {
+        final List<String> paths = programsUri.getPathSegments();
+        if (paths.size() < 3) {
+            throw new IllegalArgumentException("Not programs: " + programsUri);
+        }
+        if (!PATH_CHANNEL.equals(paths.get(0)) || !PATH_PROGRAM.equals(paths.get(2))) {
+            throw new IllegalArgumentException("Not programs: " + programsUri);
+        }
+        return paths.get(1);
+    }
+
+
+    private TvContract() {}
+
+    /**
+     * Common base for the tables of TV channels/programs.
+     */
+    public interface BaseTvColumns extends BaseColumns {
+        /**
+         * The name of the package that owns a row in each table.
+         * <p>
+         * The TV provider fills it in with the name of the package that provides the initial data
+         * of that row. If the package is later uninstalled, the rows it owns are automatically
+         * removed from the tables.
+         * </p><p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String PACKAGE_NAME = "package_name";
+    }
+
+    /** Column definitions for the TV channels table. */
+    public static final class Channels implements BaseTvColumns {
+
+        /** The content:// style URI for this table. */
+        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
+                + PATH_CHANNEL);
+
+        /** The MIME type of a directory of TV channels. */
+        public static final String CONTENT_TYPE =
+                "vnd.android.cursor.dir/vnd.com.android.tv.channels";
+
+        /** The MIME type of a single TV channel. */
+        public static final String CONTENT_ITEM_TYPE =
+                "vnd.android.cursor.item/vnd.com.android.tv.channels";
+
+        /** A generic channel type. */
+        public static final int TYPE_OTHER = 0x0;
+
+        /** The special channel type used for pass-through inputs such as HDMI. */
+        public static final int TYPE_PASSTHROUGH = 0x00010000;
+
+        /** The channel type for DVB-T (terrestrial). */
+        public static final int TYPE_DVB_T = 0x00020000;
+
+        /** The channel type for DVB-T2 (terrestrial). */
+        public static final int TYPE_DVB_T2 = 0x00020001;
+
+        /** The channel type for DVB-S (satellite). */
+        public static final int TYPE_DVB_S = 0x00020100;
+
+        /** The channel type for DVB-S2 (satellite). */
+        public static final int TYPE_DVB_S2 = 0x00020101;
+
+        /** The channel type for DVB-C (cable). */
+        public static final int TYPE_DVB_C = 0x00020200;
+
+        /** The channel type for DVB-C2 (cable). */
+        public static final int TYPE_DVB_C2 = 0x00020201;
+
+        /** The channel type for DVB-H (handheld). */
+        public static final int TYPE_DVB_H = 0x00020300;
+
+        /** The channel type for DVB-SH (satellite). */
+        public static final int TYPE_DVB_SH = 0x00020400;
+
+        /** The channel type for ATSC (terrestrial/cable). */
+        public static final int TYPE_ATSC = 0x00030000;
+
+        /** The channel type for ATSC 2.0. */
+        public static final int TYPE_ATSC_2_0 = 0x00030001;
+
+        /** The channel type for ATSC-M/H (mobile/handheld). */
+        public static final int TYPE_ATSC_M_H = 0x00030100;
+
+        /** The channel type for ISDB-T (terrestrial). */
+        public static final int TYPE_ISDB_T = 0x00040000;
+
+        /** The channel type for ISDB-Tb (Brazil). */
+        public static final int TYPE_ISDB_TB = 0x00040100;
+
+        /** The channel type for ISDB-S (satellite). */
+        public static final int TYPE_ISDB_S = 0x00040200;
+
+        /** The channel type for ISDB-C (cable). */
+        public static final int TYPE_ISDB_C = 0x00040300;
+
+        /** The channel type for 1seg (handheld). */
+        public static final int TYPE_1SEG = 0x00040400;
+
+        /** The channel type for DTMB (terrestrial). */
+        public static final int TYPE_DTMB = 0x00050000;
+
+        /** The channel type for CMMB (handheld). */
+        public static final int TYPE_CMMB = 0x00050100;
+
+        /** The channel type for T-DMB (terrestrial). */
+        public static final int TYPE_T_DMB = 0x00060000;
+
+        /** The channel type for S-DMB (satellite). */
+        public static final int TYPE_S_DMB = 0x00060100;
+
+        /**
+         * The name of the TV input service that provides this TV channel.
+         * <p>
+         * This is a required field.
+         * </p><p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String SERVICE_NAME = "service_name";
+
+        /**
+         * The predefined type of this TV channel.
+         * <p>
+         * This is used to indicate which broadcast standard (e.g. ATSC, DVB or ISDB) the current
+         * channel conforms to.
+         * </p><p>
+         * This is a required field.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String TYPE = "type";
+
+        /**
+         * The transport stream ID as appeared in various broadcast standards.
+         * <p>
+         * This is not a required field but if provided, can significantly increase the accuracy of
+         * channel identification.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String TRANSPORT_STREAM_ID = "transport_stream_id";
+
+        /**
+         * The channel number that is displayed to the user.
+         * <p>
+         * The format can vary depending on broadcast standard and product specification.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String DISPLAY_NUMBER = "display_number";
+
+        /**
+         * The channel name that is displayed to the user.
+         * <p>
+         * A call sign is a good candidate to use for this purpose but any name that helps the user
+         * recognize the current channel will be enough. Can also be empty depending on broadcast
+         * standard.
+         * </p><p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String DISPLAY_NAME = "display_name";
+
+        /**
+         * The description of this TV channel.
+         * <p>
+         * Can be empty initially.
+         * </p><p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String DESCRIPTION = "description";
+
+        /**
+         * The flag indicating whether this TV channel is browsable or not.
+         * <p>
+         * A value of 1 indicates the channel is included in the channel list that applications use
+         * to browse channels, a value of 0 indicates the channel is not included in the list. If
+         * not specified, this value is set to 1 by default.
+         * </p><p>
+         * Type: INTEGER (boolean)
+         * </p>
+         */
+        public static final String BROWSABLE = "browsable";
+
+        /**
+         * Generic data used by individual TV input services.
+         * <p>
+         * Type: BLOB
+         * </p>
+         */
+        public static final String DATA = "data";
+
+
+        /**
+         * The version number of this row entry used by TV input services.
+         * <p>
+         * This is best used by sync adapters to identify the rows to update. The number can be
+         * defined by individual TV input services. One may assign the same value as
+         * {@code version_number} that appears in ETSI EN 300 468 or ATSC A/65, if the data are
+         * coming from a TV broadcast.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String VERSION_NUMBER = "version_number";
+
+        private Channels() {}
+    }
+
+    /** Column definitions for the TV programs table. */
+    public static final class Programs implements BaseTvColumns {
+
+        /** The content:// style URI for this table. */
+        public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/"
+                + PATH_PROGRAM);
+
+        /** The MIME type of a directory of TV programs. */
+        public static final String CONTENT_TYPE =
+                "vnd.android.cursor.dir/vnd.com.android.tv.programs";
+
+        /** The MIME type of a single TV program. */
+        public static final String CONTENT_ITEM_TYPE =
+                "vnd.android.cursor.item/vnd.com.android.tv.programs";
+
+        /**
+         * The ID of the TV channel that contains this TV program.
+         * <p>
+         * This is a part of the channel URI and matches to {@link BaseColumns#_ID}.
+         * </p><p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String CHANNEL_ID = "channel_id";
+
+        /**
+         * The title of this TV program.
+         * <p>
+         * Type: TEXT
+         * </p>
+         **/
+        public static final String TITLE = "title";
+
+        /**
+         * The start time of this TV program, in milliseconds since the epoch.
+         * <p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String START_TIME_UTC_MILLIS = "start_time_utc_millis";
+
+        /**
+         * The end time of this TV program, in milliseconds since the epoch.
+         * <p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String END_TIME_UTC_MILLIS = "end_time_utc_millis";
+
+        /**
+         * The description of this TV program that is displayed to the user by default.
+         * <p>
+         * The maximum length of this field is 256 characters.
+         * </p><p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String DESCRIPTION = "description";
+
+        /**
+         * The detailed, lengthy description of this TV program that is displayed only when the user
+         * wants to see more information.
+         * <p>
+         * TV input services should leave this field empty if they have no additional
+         * details beyond {@link #DESCRIPTION}.
+         * </p><p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String LONG_DESCRIPTION = "long_description";
+
+        /**
+         * Generic data used by TV input services.
+         * <p>
+         * Type: BLOB
+         * </p>
+         */
+        public static final String DATA = "data";
+
+        /**
+         * The version number of this row entry used by TV input services.
+         * <p>
+         * This is best used by sync adapters to identify the rows to update. The number can be
+         * defined by individual TV input services. One may assign the same value as
+         * {@code version_number} in ETSI EN 300 468 or ATSC A/65, if the data are coming from a TV
+         * broadcast.
+         * </p><p>
+         * Type: INTEGER
+         * </p>
+         */
+        public static final String VERSION_NUMBER = "version_number";
+
+        private Programs() {}
+    }
+
+    /**
+     * Column definitions for the TV programs that the user watched. Applications do not have access
+     * to this table.
+     *
+     * @hide
+     */
+    public static final class WatchedPrograms implements BaseColumns {
+
+        /** The content:// style URI for this table. */
+        public static final Uri CONTENT_URI =
+                Uri.parse("content://" + AUTHORITY + "/watched_program");
+
+        /** The MIME type of a directory of watched programs. */
+        public static final String CONTENT_TYPE =
+                "vnd.android.cursor.dir/vnd.com.android.tv.watched_programs";
+
+        /** The MIME type of a single item in this table. */
+        public static final String CONTENT_ITEM_TYPE =
+                "vnd.android.cursor.item/vnd.com.android.tv.watched_programs";
+
+        /**
+         * The UTC time that the user started watching this TV program, in milliseconds since the
+         * epoch.
+         * <p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String WATCH_START_TIME_UTC_MILLIS = "watch_start_time_utc_millis";
+
+        /**
+         * The UTC time that the user stopped watching this TV program, in milliseconds since the
+         * epoch.
+         * <p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String WATCH_END_TIME_UTC_MILLIS = "watch_end_time_utc_millis";
+
+        /**
+         * The channel ID that contains this TV program.
+         * <p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String CHANNEL_ID = "channel_id";
+
+        /**
+         * The title of this TV program.
+         * <p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String TITLE = "title";
+
+        /**
+         * The start time of this TV program, in milliseconds since the epoch.
+         * <p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String START_TIME_UTC_MILLIS = "start_time_utc_millis";
+
+        /**
+         * The end time of this TV program, in milliseconds since the epoch.
+         * <p>
+         * Type: INTEGER (long)
+         * </p>
+         */
+        public static final String END_TIME_UTC_MILLIS = "end_time_utc_millis";
+
+        /**
+         * The description of this TV program.
+         * <p>
+         * Type: TEXT
+         * </p>
+         */
+        public static final String DESCRIPTION = "description";
+
+        private WatchedPrograms() {}
+    }
+}
diff --git a/core/java/android/service/notification/Condition.aidl b/core/java/android/service/notification/Condition.aidl
new file mode 100644
index 0000000..432852c
--- /dev/null
+++ b/core/java/android/service/notification/Condition.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2014, 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 android.service.notification;
+
+parcelable Condition;
+
diff --git a/core/java/android/service/notification/Condition.java b/core/java/android/service/notification/Condition.java
new file mode 100644
index 0000000..aa724f0
--- /dev/null
+++ b/core/java/android/service/notification/Condition.java
@@ -0,0 +1,176 @@
+/**
+ * Copyright (c) 2014, 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 android.service.notification;
+
+import android.content.Context;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Objects;
+
+/**
+ * Condition information from condition providers.
+ *
+ * @hide
+ */
+public class Condition implements Parcelable {
+
+    public static final String SCHEME = "condition";
+
+    public static final int STATE_FALSE = 0;
+    public static final int STATE_TRUE = 1;
+    public static final int STATE_UNKNOWN = 2;
+    public static final int STATE_ERROR = 3;
+
+    public static final int FLAG_RELEVANT_NOW = 1 << 0;
+    public static final int FLAG_RELEVANT_ALWAYS = 1 << 1;
+
+    public final Uri id;
+    public final String summary;
+    public final String line1;
+    public final String line2;
+    public final int icon;
+    public final int state;
+    public final int flags;
+
+    public Condition(Uri id, String summary, String line1, String line2, int icon,
+            int state, int flags) {
+        if (id == null) throw new IllegalArgumentException("id is required");
+        if (summary == null) throw new IllegalArgumentException("summary is required");
+        if (line1 == null) throw new IllegalArgumentException("line1 is required");
+        if (line2 == null) throw new IllegalArgumentException("line2 is required");
+        if (!isValidState(state)) throw new IllegalArgumentException("state is invalid: " + state);
+        this.id = id;
+        this.summary = summary;
+        this.line1 = line1;
+        this.line2 = line2;
+        this.icon = icon;
+        this.state = state;
+        this.flags = flags;
+    }
+
+    private Condition(Parcel source) {
+        this((Uri)source.readParcelable(Condition.class.getClassLoader()),
+                source.readString(),
+                source.readString(),
+                source.readString(),
+                source.readInt(),
+                source.readInt(),
+                source.readInt());
+    }
+
+    private static boolean isValidState(int state) {
+        return state >= STATE_FALSE && state <= STATE_ERROR;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(id, 0);
+        dest.writeString(summary);
+        dest.writeString(line1);
+        dest.writeString(line2);
+        dest.writeInt(icon);
+        dest.writeInt(state);
+        dest.writeInt(this.flags);
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuilder(Condition.class.getSimpleName()).append('[')
+            .append("id=").append(id)
+            .append(",summary=").append(summary)
+            .append(",line1=").append(line1)
+            .append(",line2=").append(line2)
+            .append(",icon=").append(icon)
+            .append(",state=").append(stateToString(state))
+            .append(",flags=").append(flags)
+            .append(']').toString();
+    }
+
+    public static String stateToString(int state) {
+        if (state == STATE_FALSE) return "STATE_FALSE";
+        if (state == STATE_TRUE) return "STATE_TRUE";
+        if (state == STATE_UNKNOWN) return "STATE_UNKNOWN";
+        if (state == STATE_ERROR) return "STATE_ERROR";
+        throw new IllegalArgumentException("state is invalid: " + state);
+    }
+
+    public static String relevanceToString(int flags) {
+        final boolean now = (flags & FLAG_RELEVANT_NOW) != 0;
+        final boolean always = (flags & FLAG_RELEVANT_ALWAYS) != 0;
+        if (!now && !always) return "NONE";
+        if (now && always) return "NOW, ALWAYS";
+        return now ? "NOW" : "ALWAYS";
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (!(o instanceof Condition)) return false;
+        if (o == this) return true;
+        final Condition other = (Condition) o;
+        return Objects.equals(other.id, id)
+                && Objects.equals(other.summary, summary)
+                && Objects.equals(other.line1, line1)
+                && Objects.equals(other.line2, line2)
+                && other.icon == icon
+                && other.state == state
+                && other.flags == flags;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(id, summary, line1, line2, icon, state, flags);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public Condition copy() {
+        final Parcel parcel = Parcel.obtain();
+        try {
+            writeToParcel(parcel, 0);
+            parcel.setDataPosition(0);
+            return new Condition(parcel);
+        } finally {
+            parcel.recycle();
+        }
+    }
+
+    public static Uri.Builder newId(Context context) {
+        return new Uri.Builder().scheme(SCHEME).authority(context.getPackageName());
+    }
+
+    public static boolean isValidId(Uri id, String pkg) {
+        return id != null && id.getScheme().equals(SCHEME) && id.getAuthority().equals(pkg);
+    }
+
+    public static final Parcelable.Creator<Condition> CREATOR
+            = new Parcelable.Creator<Condition>() {
+        @Override
+        public Condition createFromParcel(Parcel source) {
+            return new Condition(source);
+        }
+
+        @Override
+        public Condition[] newArray(int size) {
+            return new Condition[size];
+        }
+    };
+}
diff --git a/core/java/android/service/notification/ConditionProviderService.java b/core/java/android/service/notification/ConditionProviderService.java
new file mode 100644
index 0000000..326412f
--- /dev/null
+++ b/core/java/android/service/notification/ConditionProviderService.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2014 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 android.service.notification;
+
+import android.annotation.SdkConstant;
+import android.app.INotificationManager;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.ServiceManager;
+import android.util.Log;
+
+/**
+ * A service that provides conditions about boolean state.
+ * <p>To extend this class, you must declare the service in your manifest file with
+ * the {@link android.Manifest.permission#BIND_CONDITION_PROVIDER_SERVICE} permission
+ * and include an intent filter with the {@link #SERVICE_INTERFACE} action. For example:</p>
+ * <pre>
+ * &lt;service android:name=".MyConditionProvider"
+ *          android:label="&#64;string/service_name"
+ *          android:permission="android.permission.BIND_CONDITION_PROVIDER_SERVICE">
+ *     &lt;intent-filter>
+ *         &lt;action android:name="android.service.notification.ConditionProviderService" />
+ *     &lt;/intent-filter>
+ * &lt;/service></pre>
+ *
+ * @hide
+ */
+public abstract class ConditionProviderService extends Service {
+    private final String TAG = ConditionProviderService.class.getSimpleName()
+            + "[" + getClass().getSimpleName() + "]";
+
+    private final H mHandler = new H();
+
+    private Provider mProvider;
+    private INotificationManager mNoMan;
+
+    /**
+     * The {@link Intent} that must be declared as handled by the service.
+     */
+    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
+    public static final String SERVICE_INTERFACE
+            = "android.service.notification.ConditionProviderService";
+
+    abstract public void onConnected();
+    abstract public void onRequestConditions(int relevance);
+    abstract public void onSubscribe(Uri conditionId);
+    abstract public void onUnsubscribe(Uri conditionId);
+
+    private final INotificationManager getNotificationInterface() {
+        if (mNoMan == null) {
+            mNoMan = INotificationManager.Stub.asInterface(
+                    ServiceManager.getService(Context.NOTIFICATION_SERVICE));
+        }
+        return mNoMan;
+    }
+
+    public final void notifyCondition(Condition condition) {
+        if (condition == null) return;
+        notifyConditions(new Condition[]{ condition });
+    }
+
+    public final void notifyConditions(Condition... conditions) {
+        if (!isBound() || conditions == null) return;
+        try {
+            getNotificationInterface().notifyConditions(getPackageName(), mProvider, conditions);
+        } catch (android.os.RemoteException ex) {
+            Log.v(TAG, "Unable to contact notification manager", ex);
+        }
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (mProvider == null) {
+            mProvider = new Provider();
+        }
+        return mProvider;
+    }
+
+    private boolean isBound() {
+        if (mProvider == null) {
+            Log.w(TAG, "Condition provider service not yet bound.");
+            return false;
+        }
+        return true;
+    }
+
+    private final class Provider extends IConditionProvider.Stub {
+        @Override
+        public void onConnected() {
+            mHandler.obtainMessage(H.ON_CONNECTED).sendToTarget();
+        }
+
+        @Override
+        public void onRequestConditions(int relevance) {
+            mHandler.obtainMessage(H.ON_REQUEST_CONDITIONS, relevance, 0).sendToTarget();
+        }
+
+        @Override
+        public void onSubscribe(Uri conditionId) {
+            mHandler.obtainMessage(H.ON_SUBSCRIBE, conditionId).sendToTarget();
+        }
+
+        @Override
+        public void onUnsubscribe(Uri conditionId) {
+            mHandler.obtainMessage(H.ON_UNSUBSCRIBE, conditionId).sendToTarget();
+        }
+    }
+
+    private final class H extends Handler {
+        private static final int ON_CONNECTED = 1;
+        private static final int ON_REQUEST_CONDITIONS = 2;
+        private static final int ON_SUBSCRIBE = 3;
+        private static final int ON_UNSUBSCRIBE = 4;
+
+        @Override
+        public void handleMessage(Message msg) {
+            String name = null;
+            try {
+                switch(msg.what) {
+                    case ON_CONNECTED:
+                        name = "onConnected";
+                        onConnected();
+                        break;
+                    case ON_REQUEST_CONDITIONS:
+                        name = "onRequestConditions";
+                        onRequestConditions(msg.arg1);
+                        break;
+                    case ON_SUBSCRIBE:
+                        name = "onSubscribe";
+                        onSubscribe((Uri)msg.obj);
+                        break;
+                    case ON_UNSUBSCRIBE:
+                        name = "onUnsubscribe";
+                        onUnsubscribe((Uri)msg.obj);
+                        break;
+                }
+            } catch (Throwable t) {
+                Log.w(TAG, "Error running " + name, t);
+            }
+        }
+    }
+}
diff --git a/core/java/android/service/notification/IConditionListener.aidl b/core/java/android/service/notification/IConditionListener.aidl
new file mode 100644
index 0000000..01f874f
--- /dev/null
+++ b/core/java/android/service/notification/IConditionListener.aidl
@@ -0,0 +1,25 @@
+/**
+ * Copyright (c) 2014, 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 android.service.notification;
+
+import android.net.Uri;
+import android.service.notification.Condition;
+
+/** @hide */
+oneway interface IConditionListener {
+    void onConditionsReceived(in Condition[] conditions);
+}
\ No newline at end of file
diff --git a/core/java/android/service/notification/IConditionProvider.aidl b/core/java/android/service/notification/IConditionProvider.aidl
new file mode 100644
index 0000000..ada8939
--- /dev/null
+++ b/core/java/android/service/notification/IConditionProvider.aidl
@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 2014, 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 android.service.notification;
+
+import android.net.Uri;
+import android.service.notification.Condition;
+
+/** @hide */
+oneway interface IConditionProvider {
+    void onConnected();
+    void onRequestConditions(int relevance);
+    void onSubscribe(in Uri conditionId);
+    void onUnsubscribe(in Uri conditionId);
+}
\ No newline at end of file
diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java
index 8eaee29..3673f03 100644
--- a/core/java/android/service/notification/NotificationListenerService.java
+++ b/core/java/android/service/notification/NotificationListenerService.java
@@ -23,6 +23,7 @@
 import android.content.Intent;
 import android.os.IBinder;
 import android.os.ServiceManager;
+import android.os.UserHandle;
 import android.util.Log;
 
 /**
@@ -121,11 +122,43 @@
      *     {@link android.app.NotificationManager#notify(String, int, android.app.Notification)}.
      * @param id  ID of the notification as specified by the notifying app in
      *     {@link android.app.NotificationManager#notify(String, int, android.app.Notification)}.
+     * <p>
+     * @deprecated Use {@link #cancelNotification(String key)}
+     * instead. Beginning with {@link android.os.Build.VERSION_CODES#L} this method will no longer
+     * cancel the notification. It will continue to cancel the notification for applications
+     * whose {@code targetSdkVersion} is earlier than {@link android.os.Build.VERSION_CODES#L}.
      */
     public final void cancelNotification(String pkg, String tag, int id) {
         if (!isBound()) return;
         try {
-            getNotificationInterface().cancelNotificationFromListener(mWrapper, pkg, tag, id);
+            getNotificationInterface().cancelNotificationFromListener(
+                    mWrapper, pkg, tag, id);
+        } catch (android.os.RemoteException ex) {
+            Log.v(TAG, "Unable to contact notification manager", ex);
+        }
+    }
+
+    /**
+     * Inform the notification manager about dismissal of a single notification.
+     * <p>
+     * Use this if your listener has a user interface that allows the user to dismiss individual
+     * notifications, similar to the behavior of Android's status bar and notification panel.
+     * It should be called after the user dismisses a single notification using your UI;
+     * upon being informed, the notification manager will actually remove the notification
+     * and you will get an {@link #onNotificationRemoved(StatusBarNotification)} callback.
+     * <P>
+     * <b>Note:</b> If your listener allows the user to fire a notification's
+     * {@link android.app.Notification#contentIntent} by tapping/clicking/etc., you should call
+     * this method at that time <i>if</i> the Notification in question has the
+     * {@link android.app.Notification#FLAG_AUTO_CANCEL} flag set.
+     * <p>
+     * @param key Notification to dismiss from {@link StatusBarNotification#getKey()}.
+     */
+    public final void cancelNotification(String key) {
+        if (!isBound()) return;
+        try {
+            getNotificationInterface().cancelNotificationsFromListener(mWrapper,
+                    new String[] {key});
         } catch (android.os.RemoteException ex) {
             Log.v(TAG, "Unable to contact notification manager", ex);
         }
@@ -192,6 +225,24 @@
         return null;
     }
 
+    /**
+     * Request the list of outstanding notification keys(that is, those that are visible to the
+     * current user).  You can use the notification keys for subsequent retrieval via
+     * {@link #getActiveNotifications(String[]) or dismissal via
+     * {@link #cancelNotifications(String[]).
+     *
+     * @return An array of active notification keys.
+     */
+    public String[] getActiveNotificationKeys() {
+        if (!isBound()) return null;
+        try {
+            return getNotificationInterface().getActiveNotificationKeysFromListener(mWrapper);
+        } catch (android.os.RemoteException ex) {
+            Log.v(TAG, "Unable to contact notification manager", ex);
+        }
+        return null;
+    }
+
     @Override
     public IBinder onBind(Intent intent) {
         if (mWrapper == null) {
diff --git a/core/java/android/service/notification/StatusBarNotification.java b/core/java/android/service/notification/StatusBarNotification.java
index 96dd143d..72720d1 100644
--- a/core/java/android/service/notification/StatusBarNotification.java
+++ b/core/java/android/service/notification/StatusBarNotification.java
@@ -32,7 +32,7 @@
     private final String key;
 
     private final int uid;
-    private final String basePkg;
+    private final String opPkg;
     private final int initialPid;
     private final Notification notification;
     private final UserHandle user;
@@ -41,26 +41,20 @@
     private final int score;
 
     /** @hide */
-    public StatusBarNotification(String pkg, int id, String tag, int uid, int initialPid, int score,
-            Notification notification, UserHandle user) {
-        this(pkg, null, id, tag, uid, initialPid, score, notification, user);
-    }
-
-    /** @hide */
-    public StatusBarNotification(String pkg, String basePkg, int id, String tag, int uid,
+    public StatusBarNotification(String pkg, String opPkg, int id, String tag, int uid,
             int initialPid, int score, Notification notification, UserHandle user) {
-        this(pkg, basePkg, id, tag, uid, initialPid, score, notification, user,
+        this(pkg, opPkg, id, tag, uid, initialPid, score, notification, user,
                 System.currentTimeMillis());
     }
 
-    public StatusBarNotification(String pkg, String basePkg, int id, String tag, int uid,
+    public StatusBarNotification(String pkg, String opPkg, int id, String tag, int uid,
             int initialPid, int score, Notification notification, UserHandle user,
             long postTime) {
         if (pkg == null) throw new NullPointerException();
         if (notification == null) throw new NullPointerException();
 
         this.pkg = pkg;
-        this.basePkg = pkg;
+        this.opPkg = opPkg;
         this.id = id;
         this.tag = tag;
         this.uid = uid;
@@ -69,14 +63,13 @@
         this.notification = notification;
         this.user = user;
         this.notification.setUser(user);
-
         this.postTime = postTime;
         this.key = key();
     }
 
     public StatusBarNotification(Parcel in) {
         this.pkg = in.readString();
-        this.basePkg = in.readString();
+        this.opPkg = in.readString();
         this.id = in.readInt();
         if (in.readInt() != 0) {
             this.tag = in.readString();
@@ -94,12 +87,12 @@
     }
 
     private String key() {
-        return pkg + '|' + basePkg + '|' + id + '|' + tag + '|' + uid;
+        return pkg + '|' + id + '|' + tag + '|' + uid;
     }
 
     public void writeToParcel(Parcel out, int flags) {
         out.writeString(this.pkg);
-        out.writeString(this.basePkg);
+        out.writeString(this.opPkg);
         out.writeInt(this.id);
         if (this.tag != null) {
             out.writeInt(1);
@@ -140,14 +133,14 @@
     public StatusBarNotification cloneLight() {
         final Notification no = new Notification();
         this.notification.cloneInto(no, false); // light copy
-        return new StatusBarNotification(this.pkg, this.basePkg,
+        return new StatusBarNotification(this.pkg, this.opPkg,
                 this.id, this.tag, this.uid, this.initialPid,
                 this.score, no, this.user, this.postTime);
     }
 
     @Override
     public StatusBarNotification clone() {
-        return new StatusBarNotification(this.pkg, this.basePkg,
+        return new StatusBarNotification(this.pkg, this.opPkg,
                 this.id, this.tag, this.uid, this.initialPid,
                 this.score, this.notification.clone(), this.user, this.postTime);
     }
@@ -176,7 +169,11 @@
                 && ((notification.flags & Notification.FLAG_NO_CLEAR) == 0);
     }
 
-    /** Returns a userHandle for the instance of the app that posted this notification. */
+    /**
+     * Returns a userHandle for the instance of the app that posted this notification.
+     *
+     * @deprecated Use {@link #getUser()} instead.
+     */
     public int getUserId() {
         return this.user.getIdentifier();
     }
@@ -202,9 +199,9 @@
         return uid;
     }
 
-    /** The notifying app's base package. @hide */
-    public String getBasePkg() {
-        return basePkg;
+    /** The package used for AppOps tracking. @hide */
+    public String getOpPkg() {
+        return opPkg;
     }
 
     /** @hide */
@@ -220,7 +217,6 @@
 
     /**
      * The {@link android.os.UserHandle} for whom this notification is intended.
-     * @hide
      */
     public UserHandle getUser() {
         return user;
diff --git a/core/java/android/service/notification/ZenModeConfig.aidl b/core/java/android/service/notification/ZenModeConfig.aidl
new file mode 100644
index 0000000..c73b75e
--- /dev/null
+++ b/core/java/android/service/notification/ZenModeConfig.aidl
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2014, 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 android.service.notification;
+
+parcelable ZenModeConfig;
+
diff --git a/core/java/android/service/notification/ZenModeConfig.java b/core/java/android/service/notification/ZenModeConfig.java
new file mode 100644
index 0000000..846e292
--- /dev/null
+++ b/core/java/android/service/notification/ZenModeConfig.java
@@ -0,0 +1,312 @@
+/**
+ * Copyright (c) 2014, 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 android.service.notification;
+
+import android.content.ComponentName;
+import android.net.Uri;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Objects;
+
+/**
+ * Persisted configuration for zen mode.
+ *
+ * @hide
+ */
+public class ZenModeConfig implements Parcelable {
+
+    public static final String SLEEP_MODE_NIGHTS = "nights";
+    public static final String SLEEP_MODE_WEEKNIGHTS = "weeknights";
+
+    private static final int XML_VERSION = 1;
+    private static final String ZEN_TAG = "zen";
+    private static final String ZEN_ATT_VERSION = "version";
+    private static final String ALLOW_TAG = "allow";
+    private static final String ALLOW_ATT_CALLS = "calls";
+    private static final String ALLOW_ATT_MESSAGES = "messages";
+    private static final String SLEEP_TAG = "sleep";
+    private static final String SLEEP_ATT_MODE = "mode";
+
+    private static final String SLEEP_ATT_START_HR = "startHour";
+    private static final String SLEEP_ATT_START_MIN = "startMin";
+    private static final String SLEEP_ATT_END_HR = "endHour";
+    private static final String SLEEP_ATT_END_MIN = "endMin";
+
+    private static final String CONDITION_TAG = "condition";
+    private static final String CONDITION_ATT_COMPONENT = "component";
+    private static final String CONDITION_ATT_ID = "id";
+
+    public boolean allowCalls;
+    public boolean allowMessages;
+
+    public String sleepMode;
+    public int sleepStartHour;
+    public int sleepStartMinute;
+    public int sleepEndHour;
+    public int sleepEndMinute;
+    public ComponentName[] conditionComponents;
+    public Uri[] conditionIds;
+
+    public ZenModeConfig() { }
+
+    public ZenModeConfig(Parcel source) {
+        allowCalls = source.readInt() == 1;
+        allowMessages = source.readInt() == 1;
+        if (source.readInt() == 1) {
+            sleepMode = source.readString();
+        }
+        sleepStartHour = source.readInt();
+        sleepStartMinute = source.readInt();
+        sleepEndHour = source.readInt();
+        sleepEndMinute = source.readInt();
+        int len = source.readInt();
+        if (len > 0) {
+            conditionComponents = new ComponentName[len];
+            source.readTypedArray(conditionComponents, ComponentName.CREATOR);
+        }
+        len = source.readInt();
+        if (len > 0) {
+            conditionIds = new Uri[len];
+            source.readTypedArray(conditionIds, Uri.CREATOR);
+        }
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(allowCalls ? 1 : 0);
+        dest.writeInt(allowMessages ? 1 : 0);
+        if (sleepMode != null) {
+            dest.writeInt(1);
+            dest.writeString(sleepMode);
+        } else {
+            dest.writeInt(0);
+        }
+        dest.writeInt(sleepStartHour);
+        dest.writeInt(sleepStartMinute);
+        dest.writeInt(sleepEndHour);
+        dest.writeInt(sleepEndMinute);
+        if (conditionComponents != null && conditionComponents.length > 0) {
+            dest.writeInt(conditionComponents.length);
+            dest.writeTypedArray(conditionComponents, 0);
+        } else {
+            dest.writeInt(0);
+        }
+        if (conditionIds != null && conditionIds.length > 0) {
+            dest.writeInt(conditionIds.length);
+            dest.writeTypedArray(conditionIds, 0);
+        } else {
+            dest.writeInt(0);
+        }
+    }
+
+    @Override
+    public String toString() {
+        return new StringBuilder(ZenModeConfig.class.getSimpleName()).append('[')
+            .append("allowCalls=").append(allowCalls)
+            .append(",allowMessages=").append(allowMessages)
+            .append(",sleepMode=").append(sleepMode)
+            .append(",sleepStart=").append(sleepStartHour).append('.').append(sleepStartMinute)
+            .append(",sleepEnd=").append(sleepEndHour).append('.').append(sleepEndMinute)
+            .append(",conditionComponents=")
+            .append(conditionComponents == null ? null : TextUtils.join(",", conditionComponents))
+            .append(",conditionIds=")
+            .append(conditionIds == null ? null : TextUtils.join(",", conditionIds))
+            .append(']').toString();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (!(o instanceof ZenModeConfig)) return false;
+        if (o == this) return true;
+        final ZenModeConfig other = (ZenModeConfig) o;
+        return other.allowCalls == allowCalls
+                && other.allowMessages == allowMessages
+                && Objects.equals(other.sleepMode, sleepMode)
+                && other.sleepStartHour == sleepStartHour
+                && other.sleepStartMinute == sleepStartMinute
+                && other.sleepEndHour == sleepEndHour
+                && other.sleepEndMinute == sleepEndMinute
+                && Objects.deepEquals(other.conditionComponents, conditionComponents)
+                && Objects.deepEquals(other.conditionIds, conditionIds);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(allowCalls, allowMessages, sleepMode, sleepStartHour,
+                sleepStartMinute, sleepEndHour, sleepEndMinute,
+                Arrays.hashCode(conditionComponents), Arrays.hashCode(conditionIds));
+    }
+
+    public boolean isValid() {
+        return isValidHour(sleepStartHour) && isValidMinute(sleepStartMinute)
+                && isValidHour(sleepEndHour) && isValidMinute(sleepEndMinute)
+                && (sleepMode == null || sleepMode.equals(SLEEP_MODE_NIGHTS)
+                    || sleepMode.equals(SLEEP_MODE_WEEKNIGHTS));
+    }
+
+    public static ZenModeConfig readXml(XmlPullParser parser)
+            throws XmlPullParserException, IOException {
+        int type = parser.getEventType();
+        if (type != XmlPullParser.START_TAG) return null;
+        String tag = parser.getName();
+        if (!ZEN_TAG.equals(tag)) return null;
+        final ZenModeConfig rt = new ZenModeConfig();
+        final int version = Integer.parseInt(parser.getAttributeValue(null, ZEN_ATT_VERSION));
+        final ArrayList<ComponentName> conditionComponents = new ArrayList<ComponentName>();
+        final ArrayList<Uri> conditionIds = new ArrayList<Uri>();
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {
+            tag = parser.getName();
+            if (type == XmlPullParser.END_TAG && ZEN_TAG.equals(tag)) {
+                if (!conditionComponents.isEmpty()) {
+                    rt.conditionComponents = conditionComponents
+                            .toArray(new ComponentName[conditionComponents.size()]);
+                    rt.conditionIds = conditionIds.toArray(new Uri[conditionIds.size()]);
+                }
+                return rt;
+            }
+            if (type == XmlPullParser.START_TAG) {
+                if (ALLOW_TAG.equals(tag)) {
+                    rt.allowCalls = safeBoolean(parser, ALLOW_ATT_CALLS, false);
+                    rt.allowMessages = safeBoolean(parser, ALLOW_ATT_MESSAGES, false);
+                } else if (SLEEP_TAG.equals(tag)) {
+                    final String mode = parser.getAttributeValue(null, SLEEP_ATT_MODE);
+                    rt.sleepMode = (SLEEP_MODE_NIGHTS.equals(mode)
+                            || SLEEP_MODE_WEEKNIGHTS.equals(mode)) ? mode : null;
+                    final int startHour = safeInt(parser, SLEEP_ATT_START_HR, 0);
+                    final int startMinute = safeInt(parser, SLEEP_ATT_START_MIN, 0);
+                    final int endHour = safeInt(parser, SLEEP_ATT_END_HR, 0);
+                    final int endMinute = safeInt(parser, SLEEP_ATT_END_MIN, 0);
+                    rt.sleepStartHour = isValidHour(startHour) ? startHour : 0;
+                    rt.sleepStartMinute = isValidMinute(startMinute) ? startMinute : 0;
+                    rt.sleepEndHour = isValidHour(endHour) ? endHour : 0;
+                    rt.sleepEndMinute = isValidMinute(endMinute) ? endMinute : 0;
+                } else if (CONDITION_TAG.equals(tag)) {
+                    final ComponentName component =
+                            safeComponentName(parser, CONDITION_ATT_COMPONENT);
+                    final Uri conditionId = safeUri(parser, CONDITION_ATT_ID);
+                    if (component != null && conditionId != null) {
+                        conditionComponents.add(component);
+                        conditionIds.add(conditionId);
+                    }
+                }
+            }
+        }
+        throw new IllegalStateException("Failed to reach END_DOCUMENT");
+    }
+
+    public void writeXml(XmlSerializer out) throws IOException {
+        out.startTag(null, ZEN_TAG);
+        out.attribute(null, ZEN_ATT_VERSION, Integer.toString(XML_VERSION));
+
+        out.startTag(null, ALLOW_TAG);
+        out.attribute(null, ALLOW_ATT_CALLS, Boolean.toString(allowCalls));
+        out.attribute(null, ALLOW_ATT_MESSAGES, Boolean.toString(allowMessages));
+        out.endTag(null, ALLOW_TAG);
+
+        out.startTag(null, SLEEP_TAG);
+        if (sleepMode != null) {
+            out.attribute(null, SLEEP_ATT_MODE, sleepMode);
+        }
+        out.attribute(null, SLEEP_ATT_START_HR, Integer.toString(sleepStartHour));
+        out.attribute(null, SLEEP_ATT_START_MIN, Integer.toString(sleepStartMinute));
+        out.attribute(null, SLEEP_ATT_END_HR, Integer.toString(sleepEndHour));
+        out.attribute(null, SLEEP_ATT_END_MIN, Integer.toString(sleepEndMinute));
+        out.endTag(null, SLEEP_TAG);
+
+        if (conditionComponents != null && conditionIds != null
+                && conditionComponents.length == conditionIds.length) {
+            for (int i = 0; i < conditionComponents.length; i++) {
+                out.startTag(null, CONDITION_TAG);
+                out.attribute(null, CONDITION_ATT_COMPONENT,
+                        conditionComponents[i].flattenToString());
+                out.attribute(null, CONDITION_ATT_ID, conditionIds[i].toString());
+                out.endTag(null, CONDITION_TAG);
+            }
+        }
+        out.endTag(null, ZEN_TAG);
+    }
+
+    public static boolean isValidHour(int val) {
+        return val >= 0 && val < 24;
+    }
+
+    public static boolean isValidMinute(int val) {
+        return val >= 0 && val < 60;
+    }
+
+    private static boolean safeBoolean(XmlPullParser parser, String att, boolean defValue) {
+        final String val = parser.getAttributeValue(null, att);
+        if (TextUtils.isEmpty(val)) return defValue;
+        return Boolean.valueOf(val);
+    }
+
+    private static int safeInt(XmlPullParser parser, String att, int defValue) {
+        final String val = parser.getAttributeValue(null, att);
+        if (TextUtils.isEmpty(val)) return defValue;
+        return Integer.valueOf(val);
+    }
+
+    private static ComponentName safeComponentName(XmlPullParser parser, String att) {
+        final String val = parser.getAttributeValue(null, att);
+        if (TextUtils.isEmpty(val)) return null;
+        return ComponentName.unflattenFromString(val);
+    }
+
+    private static Uri safeUri(XmlPullParser parser, String att) {
+        final String val = parser.getAttributeValue(null, att);
+        if (TextUtils.isEmpty(val)) return null;
+        return Uri.parse(val);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    public ZenModeConfig copy() {
+        final Parcel parcel = Parcel.obtain();
+        try {
+            writeToParcel(parcel, 0);
+            parcel.setDataPosition(0);
+            return new ZenModeConfig(parcel);
+        } finally {
+            parcel.recycle();
+        }
+    }
+
+    public static final Parcelable.Creator<ZenModeConfig> CREATOR
+            = new Parcelable.Creator<ZenModeConfig>() {
+        @Override
+        public ZenModeConfig createFromParcel(Parcel source) {
+            return new ZenModeConfig(source);
+        }
+
+        @Override
+        public ZenModeConfig[] newArray(int size) {
+            return new ZenModeConfig[size];
+        }
+    };
+}
diff --git a/core/java/android/service/textservice/SpellCheckerService.java b/core/java/android/service/textservice/SpellCheckerService.java
index 77b22ed..acfef82 100644
--- a/core/java/android/service/textservice/SpellCheckerService.java
+++ b/core/java/android/service/textservice/SpellCheckerService.java
@@ -32,7 +32,6 @@
 import android.view.textservice.SentenceSuggestionsInfo;
 import android.view.textservice.SuggestionsInfo;
 import android.view.textservice.TextInfo;
-import android.widget.SpellChecker;
 
 import java.lang.ref.WeakReference;
 import java.text.BreakIterator;
diff --git a/core/java/android/service/trust/ITrustAgentService.aidl b/core/java/android/service/trust/ITrustAgentService.aidl
new file mode 100644
index 0000000..863a249
--- /dev/null
+++ b/core/java/android/service/trust/ITrustAgentService.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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 android.service.trust;
+
+import android.os.Bundle;
+import android.service.trust.ITrustAgentServiceCallback;
+
+/**
+ * Communication channel from TrustManagerService to the TrustAgent.
+ * @hide
+ */
+oneway interface ITrustAgentService {
+    void onUnlockAttempt(boolean successful);
+    void setCallback(ITrustAgentServiceCallback callback);
+}
diff --git a/core/java/android/service/trust/ITrustAgentServiceCallback.aidl b/core/java/android/service/trust/ITrustAgentServiceCallback.aidl
new file mode 100644
index 0000000..c346771
--- /dev/null
+++ b/core/java/android/service/trust/ITrustAgentServiceCallback.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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 android.service.trust;
+
+import android.os.Bundle;
+import android.os.UserHandle;
+
+/**
+ * Communication channel from the TrustAgentService back to TrustManagerService.
+ * @hide
+ */
+oneway interface ITrustAgentServiceCallback {
+    void enableTrust(String message, long durationMs, boolean initiatedByUser);
+    void revokeTrust();
+}
diff --git a/core/java/android/service/trust/TrustAgentService.java b/core/java/android/service/trust/TrustAgentService.java
new file mode 100644
index 0000000..d5ce429
--- /dev/null
+++ b/core/java/android/service/trust/TrustAgentService.java
@@ -0,0 +1,148 @@
+/**
+ * Copyright (C) 2014 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 android.service.trust;
+
+import android.annotation.SdkConstant;
+import android.app.Service;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Slog;
+
+/**
+ * A service that notifies the system about whether it believes the environment of the device
+ * to be trusted.
+ *
+ * <p>To extend this class, you must declare the service in your manifest file with
+ * the {@link android.Manifest.permission#BIND_TRUST_AGENT_SERVICE} permission
+ * and include an intent filter with the {@link #SERVICE_INTERFACE} action. For example:</p>
+ * <pre>
+ * &lt;service android:name=".TrustAgent"
+ *          android:label="&#64;string/service_name"
+ *          android:permission="android.permission.BIND_TRUST_AGENT_SERVICE">
+ *     &lt;intent-filter>
+ *         &lt;action android:name="android.service.trust.TrustAgentService" />
+ *     &lt;/intent-filter>
+ *     &lt;meta-data android:name="android.service.trust.trustagent"
+ *          android:value="&#64;xml/trust_agent" />
+ * &lt;/service></pre>
+ *
+ * <p>The associated meta-data file can specify an activity that is accessible through Settings
+ * and should allow configuring the trust agent, as defined in
+ * {@link android.R.styleable#TrustAgent}. For example:</p>
+ *
+ * <pre>
+ * &lt;trust_agent xmlns:android="http://schemas.android.com/apk/res/android"
+ *          android:settingsActivity=".TrustAgentSettings" /></pre>
+ */
+public class TrustAgentService extends Service {
+    private final String TAG = TrustAgentService.class.getSimpleName() +
+            "[" + getClass().getSimpleName() + "]";
+
+    /**
+     * The {@link Intent} that must be declared as handled by the service.
+     */
+    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
+    public static final String SERVICE_INTERFACE
+            = "android.service.trust.TrustAgentService";
+
+    /**
+     * The name of the {@code meta-data} tag pointing to additional configuration of the trust
+     * agent.
+     */
+    public static final String TRUST_AGENT_META_DATA = "android.service.trust.trustagent";
+
+    private static final int MSG_UNLOCK_ATTEMPT = 1;
+
+    private static final boolean DEBUG = false;
+
+    private ITrustAgentServiceCallback mCallback;
+
+    private Handler mHandler = new Handler() {
+        public void handleMessage(android.os.Message msg) {
+            switch (msg.what) {
+                case MSG_UNLOCK_ATTEMPT:
+                    onUnlockAttempt(msg.arg1 != 0);
+                    break;
+            }
+        };
+    };
+
+    /**
+     * Called when the user attempted to authenticate on the device.
+     *
+     * @param successful true if the attempt succeeded
+     */
+    protected void onUnlockAttempt(boolean successful) {
+    }
+
+    private void onError(String msg) {
+        Slog.v(TAG, "Remote exception while " + msg);
+    }
+
+    /**
+     * Call to enable trust on the device.
+     *
+     * @param message describes why the device is trusted, e.g. "Trusted by location".
+     * @param durationMs amount of time in milliseconds to keep the device in a trusted state. Trust
+     *                   for this agent will automatically be revoked when the timeout expires.
+     * @param initiatedByUser indicates that the user has explicitly initiated an action that proves
+     *                        the user is about to use the device.
+     */
+    protected final void enableTrust(String message, long durationMs, boolean initiatedByUser) {
+        if (mCallback != null) {
+            try {
+                mCallback.enableTrust(message, durationMs, initiatedByUser);
+            } catch (RemoteException e) {
+                onError("calling enableTrust()");
+            }
+        }
+    }
+
+    /**
+     * Call to revoke trust on the device.
+     */
+    protected final void revokeTrust() {
+        if (mCallback != null) {
+            try {
+                mCallback.revokeTrust();
+            } catch (RemoteException e) {
+                onError("calling revokeTrust()");
+            }
+        }
+    }
+
+    @Override
+    public final IBinder onBind(Intent intent) {
+        if (DEBUG) Slog.v(TAG, "onBind() intent = " + intent);
+        return new TrustAgentServiceWrapper();
+    }
+
+    private final class TrustAgentServiceWrapper extends ITrustAgentService.Stub {
+        @Override
+        public void onUnlockAttempt(boolean successful) {
+            mHandler.obtainMessage(MSG_UNLOCK_ATTEMPT, successful ? 1 : 0, 0)
+                    .sendToTarget();
+        }
+
+        public void setCallback(ITrustAgentServiceCallback callback) {
+            mCallback = callback;
+        }
+    }
+
+}
diff --git a/core/java/android/service/voice/IVoiceInteractionService.aidl b/core/java/android/service/voice/IVoiceInteractionService.aidl
new file mode 100644
index 0000000..e9e2f4c
--- /dev/null
+++ b/core/java/android/service/voice/IVoiceInteractionService.aidl
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2014 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 android.service.voice;
+
+/**
+ * @hide
+ */
+oneway interface IVoiceInteractionService {
+}
diff --git a/core/java/android/service/voice/IVoiceInteractionSession.aidl b/core/java/android/service/voice/IVoiceInteractionSession.aidl
new file mode 100644
index 0000000..7dbf66b
--- /dev/null
+++ b/core/java/android/service/voice/IVoiceInteractionSession.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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 android.service.voice;
+
+import android.os.Bundle;
+
+import com.android.internal.app.IVoiceInteractorCallback;
+import com.android.internal.app.IVoiceInteractorRequest;
+
+/**
+ * @hide
+ */
+interface IVoiceInteractionSession {
+}
diff --git a/core/java/android/service/voice/IVoiceInteractionSessionService.aidl b/core/java/android/service/voice/IVoiceInteractionSessionService.aidl
new file mode 100644
index 0000000..2519442
--- /dev/null
+++ b/core/java/android/service/voice/IVoiceInteractionSessionService.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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 android.service.voice;
+
+import android.os.Bundle;
+
+import android.service.voice.IVoiceInteractionSession;
+
+/**
+ * @hide
+ */
+oneway interface IVoiceInteractionSessionService {
+    void newSession(IBinder token, in Bundle args);
+}
diff --git a/core/java/android/service/voice/VoiceInteractionService.java b/core/java/android/service/voice/VoiceInteractionService.java
new file mode 100644
index 0000000..d005890
--- /dev/null
+++ b/core/java/android/service/voice/VoiceInteractionService.java
@@ -0,0 +1,77 @@
+/**
+ * Copyright (C) 2014 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 android.service.voice;
+
+import android.annotation.SdkConstant;
+import android.app.Instrumentation;
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import com.android.internal.app.IVoiceInteractionManagerService;
+
+public class VoiceInteractionService extends Service {
+    /**
+     * The {@link Intent} that must be declared as handled by the service.
+     * To be supported, the service must also require the
+     * {@link android.Manifest.permission#BIND_VOICE_INTERACTION} permission so
+     * that other applications can not abuse it.
+     */
+    @SdkConstant(SdkConstant.SdkConstantType.SERVICE_ACTION)
+    public static final String SERVICE_INTERFACE =
+            "android.service.voice.VoiceInteractionService";
+
+    /**
+     * Name under which a VoiceInteractionService component publishes information about itself.
+     * This meta-data should reference an XML resource containing a
+     * <code>&lt;{@link
+     * android.R.styleable#VoiceInteractionService voice-interaction-service}&gt;</code> tag.
+     */
+    public static final String SERVICE_META_DATA = "android.voice_interaction";
+
+    IVoiceInteractionService mInterface = new IVoiceInteractionService.Stub() {
+    };
+
+    IVoiceInteractionManagerService mSystemService;
+
+    public void startVoiceActivity(Intent intent, Bundle sessionArgs) {
+        try {
+            mSystemService.startVoiceActivity(intent,
+                    intent.resolveType(getContentResolver()),
+                    mInterface, sessionArgs);
+        } catch (RemoteException e) {
+        }
+    }
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        mSystemService = IVoiceInteractionManagerService.Stub.asInterface(
+                ServiceManager.getService(Context.VOICE_INTERACTION_MANAGER_SERVICE));
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (SERVICE_INTERFACE.equals(intent.getAction())) {
+            return mInterface.asBinder();
+        }
+        return null;
+    }
+}
diff --git a/core/java/android/service/voice/VoiceInteractionServiceInfo.java b/core/java/android/service/voice/VoiceInteractionServiceInfo.java
new file mode 100644
index 0000000..a909ead
--- /dev/null
+++ b/core/java/android/service/voice/VoiceInteractionServiceInfo.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright (C) 2014 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 android.service.voice;
+
+import android.Manifest;
+import android.content.ComponentName;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.speech.RecognitionService;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/** @hide */
+public class VoiceInteractionServiceInfo {
+    static final String TAG = "VoiceInteractionServiceInfo";
+
+    private String mParseError;
+
+    private ServiceInfo mServiceInfo;
+    private String mSessionService;
+    private String mSettingsActivity;
+
+    public VoiceInteractionServiceInfo(PackageManager pm, ComponentName comp)
+            throws PackageManager.NameNotFoundException {
+        this(pm, pm.getServiceInfo(comp, PackageManager.GET_META_DATA));
+    }
+
+    public VoiceInteractionServiceInfo(PackageManager pm, ServiceInfo si) {
+        if (!Manifest.permission.BIND_VOICE_INTERACTION.equals(si.permission)) {
+            mParseError = "Service does not require permission "
+                    + Manifest.permission.BIND_VOICE_INTERACTION;
+            return;
+        }
+
+        XmlResourceParser parser = null;
+        try {
+            parser = si.loadXmlMetaData(pm, VoiceInteractionService.SERVICE_META_DATA);
+            if (parser == null) {
+                mParseError = "No " + VoiceInteractionService.SERVICE_META_DATA
+                        + " meta-data for " + si.packageName;
+                return;
+            }
+
+            Resources res = pm.getResourcesForApplication(si.applicationInfo);
+
+            AttributeSet attrs = Xml.asAttributeSet(parser);
+
+            int type;
+            while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
+                    && type != XmlPullParser.START_TAG) {
+            }
+
+            String nodeName = parser.getName();
+            if (!"voice-interaction-service".equals(nodeName)) {
+                mParseError = "Meta-data does not start with voice-interaction-service tag";
+                return;
+            }
+
+            TypedArray array = res.obtainAttributes(attrs,
+                    com.android.internal.R.styleable.VoiceInteractionService);
+            mSessionService = array.getString(
+                    com.android.internal.R.styleable.VoiceInteractionService_sessionService);
+            mSettingsActivity = array.getString(
+                    com.android.internal.R.styleable.VoiceInteractionService_settingsActivity);
+            array.recycle();
+            if (mSessionService == null) {
+                mParseError = "No sessionService specified";
+                return;
+            }
+        } catch (XmlPullParserException e) {
+            mParseError = "Error parsing voice interation service meta-data: " + e;
+            Log.w(TAG, "error parsing voice interaction service meta-data", e);
+            return;
+        } catch (IOException e) {
+            mParseError = "Error parsing voice interation service meta-data: " + e;
+            Log.w(TAG, "error parsing voice interaction service meta-data", e);
+            return;
+        } catch (PackageManager.NameNotFoundException e) {
+            mParseError = "Error parsing voice interation service meta-data: " + e;
+            Log.w(TAG, "error parsing voice interaction service meta-data", e);
+            return;
+        } finally {
+            if (parser != null) parser.close();
+        }
+        mServiceInfo = si;
+    }
+
+    public String getParseError() {
+        return mParseError;
+    }
+
+    public ServiceInfo getServiceInfo() {
+        return mServiceInfo;
+    }
+
+    public String getSessionService() {
+        return mSessionService;
+    }
+
+    public String getSettingsActivity() {
+        return mSettingsActivity;
+    }
+}
diff --git a/core/java/android/service/voice/VoiceInteractionSession.java b/core/java/android/service/voice/VoiceInteractionSession.java
new file mode 100644
index 0000000..963b6b4
--- /dev/null
+++ b/core/java/android/service/voice/VoiceInteractionSession.java
@@ -0,0 +1,195 @@
+/**
+ * Copyright (C) 2014 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 android.service.voice;
+
+import android.content.Context;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.ArrayMap;
+import android.util.Log;
+import com.android.internal.app.IVoiceInteractor;
+import com.android.internal.app.IVoiceInteractorCallback;
+import com.android.internal.app.IVoiceInteractorRequest;
+import com.android.internal.os.HandlerCaller;
+import com.android.internal.os.SomeArgs;
+
+public abstract class VoiceInteractionSession {
+    static final String TAG = "VoiceInteractionSession";
+    static final boolean DEBUG = true;
+
+    final IVoiceInteractor mInteractor = new IVoiceInteractor.Stub() {
+        @Override
+        public IVoiceInteractorRequest startConfirmation(String callingPackage,
+                IVoiceInteractorCallback callback, String prompt, Bundle extras) {
+            Request request = findRequest(callback, true);
+            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageOOOO(MSG_START_CONFIRMATION,
+                    new Caller(callingPackage, Binder.getCallingUid()), request,
+                    prompt, extras));
+            return request.mInterface;
+        }
+
+        @Override
+        public IVoiceInteractorRequest startCommand(String callingPackage,
+                IVoiceInteractorCallback callback, String command, Bundle extras) {
+            Request request = findRequest(callback, true);
+            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageOOOO(MSG_START_COMMAND,
+                    new Caller(callingPackage, Binder.getCallingUid()), request,
+                    command, extras));
+            return request.mInterface;
+        }
+
+        @Override
+        public boolean[] supportsCommands(String callingPackage, String[] commands) {
+            Message msg = mHandlerCaller.obtainMessageIOO(MSG_SUPPORTS_COMMANDS,
+                    0, new Caller(callingPackage, Binder.getCallingUid()), commands);
+            SomeArgs args = mHandlerCaller.sendMessageAndWait(msg);
+            if (args != null) {
+                boolean[] res = (boolean[])args.arg1;
+                args.recycle();
+                return res;
+            }
+            return new boolean[commands.length];
+        }
+    };
+
+    final IVoiceInteractionSession mSession = new IVoiceInteractionSession.Stub() {
+    };
+
+    public static class Request {
+        final IVoiceInteractorRequest mInterface = new IVoiceInteractorRequest.Stub() {
+            @Override
+            public void cancel() throws RemoteException {
+                mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageO(MSG_CANCEL, Request.this));
+            }
+        };
+        final IVoiceInteractorCallback mCallback;
+        final HandlerCaller mHandlerCaller;
+        Request(IVoiceInteractorCallback callback, HandlerCaller handlerCaller) {
+            mCallback = callback;
+            mHandlerCaller = handlerCaller;
+        }
+
+        public void sendConfirmResult(boolean confirmed, Bundle result) {
+            try {
+                if (DEBUG) Log.d(TAG, "sendConfirmResult: req=" + mInterface
+                        + " confirmed=" + confirmed + " result=" + result);
+                mCallback.deliverConfirmationResult(mInterface, confirmed, result);
+            } catch (RemoteException e) {
+            }
+        }
+
+        public void sendCommandResult(boolean complete, Bundle result) {
+            try {
+                if (DEBUG) Log.d(TAG, "sendCommandResult: req=" + mInterface
+                        + " result=" + result);
+                mCallback.deliverCommandResult(mInterface, complete, result);
+            } catch (RemoteException e) {
+            }
+        }
+
+        public void sendCancelResult() {
+            try {
+                if (DEBUG) Log.d(TAG, "sendCancelResult: req=" + mInterface);
+                mCallback.deliverCancel(mInterface);
+            } catch (RemoteException e) {
+            }
+        }
+    }
+
+    public static class Caller {
+        final String packageName;
+        final int uid;
+
+        Caller(String _packageName, int _uid) {
+            packageName = _packageName;
+            uid = _uid;
+        }
+    }
+
+    static final int MSG_START_CONFIRMATION = 1;
+    static final int MSG_START_COMMAND = 2;
+    static final int MSG_SUPPORTS_COMMANDS = 3;
+    static final int MSG_CANCEL = 4;
+
+    final Context mContext;
+    final HandlerCaller mHandlerCaller;
+    final HandlerCaller.Callback mHandlerCallerCallback = new HandlerCaller.Callback() {
+        @Override
+        public void executeMessage(Message msg) {
+            SomeArgs args = (SomeArgs)msg.obj;
+            switch (msg.what) {
+                case MSG_START_CONFIRMATION:
+                    if (DEBUG) Log.d(TAG, "onConfirm: req=" + ((Request) args.arg2).mInterface
+                            + " prompt=" + args.arg3 + " extras=" + args.arg4);
+                    onConfirm((Caller)args.arg1, (Request)args.arg2, (String)args.arg3,
+                            (Bundle)args.arg4);
+                    break;
+                case MSG_START_COMMAND:
+                    if (DEBUG) Log.d(TAG, "onCommand: req=" + ((Request) args.arg2).mInterface
+                            + " command=" + args.arg3 + " extras=" + args.arg4);
+                    onCommand((Caller) args.arg1, (Request) args.arg2, (String) args.arg3,
+                            (Bundle) args.arg4);
+                    break;
+                case MSG_SUPPORTS_COMMANDS:
+                    if (DEBUG) Log.d(TAG, "onGetSupportedCommands: cmds=" + args.arg2);
+                    args.arg1 = onGetSupportedCommands((Caller) args.arg1, (String[]) args.arg2);
+                    break;
+                case MSG_CANCEL:
+                    if (DEBUG) Log.d(TAG, "onCancel: req=" + ((Request) args.arg1).mInterface);
+                    onCancel((Request)args.arg1);
+                    break;
+            }
+        }
+    };
+
+    final ArrayMap<IBinder, Request> mActiveRequests = new ArrayMap<IBinder, Request>();
+
+    public VoiceInteractionSession(Context context) {
+        this(context, new Handler());
+    }
+
+    public VoiceInteractionSession(Context context, Handler handler) {
+        mContext = context;
+        mHandlerCaller = new HandlerCaller(context, handler.getLooper(),
+                mHandlerCallerCallback, true);
+    }
+
+    Request findRequest(IVoiceInteractorCallback callback, boolean newRequest) {
+        synchronized (this) {
+            Request req = mActiveRequests.get(callback.asBinder());
+            if (req != null) {
+                if (newRequest) {
+                    throw new IllegalArgumentException("Given request callback " + callback
+                            + " is already active");
+                }
+                return req;
+            }
+            req = new Request(callback, mHandlerCaller);
+            mActiveRequests.put(callback.asBinder(), req);
+            return req;
+        }
+    }
+
+    public abstract boolean[] onGetSupportedCommands(Caller caller, String[] commands);
+    public abstract void onConfirm(Caller caller, Request request, String prompt, Bundle extras);
+    public abstract void onCommand(Caller caller, Request request, String command, Bundle extras);
+    public abstract void onCancel(Request request);
+}
diff --git a/core/java/android/service/voice/VoiceInteractionSessionService.java b/core/java/android/service/voice/VoiceInteractionSessionService.java
new file mode 100644
index 0000000..40e5bba
--- /dev/null
+++ b/core/java/android/service/voice/VoiceInteractionSessionService.java
@@ -0,0 +1,82 @@
+/**
+ * Copyright (C) 2014 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 android.service.voice;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import com.android.internal.app.IVoiceInteractionManagerService;
+import com.android.internal.os.HandlerCaller;
+import com.android.internal.os.SomeArgs;
+
+public abstract class VoiceInteractionSessionService extends Service {
+
+    static final int MSG_NEW_SESSION = 1;
+
+    IVoiceInteractionManagerService mSystemService;
+
+    IVoiceInteractionSessionService mInterface = new IVoiceInteractionSessionService.Stub() {
+        public void newSession(IBinder token, Bundle args) {
+            mHandlerCaller.sendMessage(mHandlerCaller.obtainMessageOO(MSG_NEW_SESSION,
+                    token, args));
+
+        }
+    };
+
+    HandlerCaller mHandlerCaller;
+    final HandlerCaller.Callback mHandlerCallerCallback = new HandlerCaller.Callback() {
+        @Override
+        public void executeMessage(Message msg) {
+            SomeArgs args = (SomeArgs)msg.obj;
+            switch (msg.what) {
+                case MSG_NEW_SESSION:
+                    doNewSession((IBinder)args.arg1, (Bundle)args.arg2);
+                    break;
+            }
+        }
+    };
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        mSystemService = IVoiceInteractionManagerService.Stub.asInterface(
+                ServiceManager.getService(Context.VOICE_INTERACTION_MANAGER_SERVICE));
+        mHandlerCaller = new HandlerCaller(this, Looper.myLooper(),
+                mHandlerCallerCallback, true);
+    }
+
+    public abstract VoiceInteractionSession onNewSession(Bundle args);
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return mInterface.asBinder();
+    }
+
+    void doNewSession(IBinder token, Bundle args) {
+        VoiceInteractionSession session = onNewSession(args);
+        try {
+            mSystemService.deliverNewSession(token, session.mSession, session.mInteractor);
+        } catch (RemoteException e) {
+        }
+    }
+}
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 5db8168..03ce4e0 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -38,7 +38,6 @@
 import android.os.PowerManager;
 import android.os.RemoteException;
 import android.util.Log;
-import android.util.LogPrinter;
 import android.view.Display;
 import android.view.Gravity;
 import android.view.IWindowSession;
diff --git a/core/java/android/speech/srec/Recognizer.java b/core/java/android/speech/srec/Recognizer.java
index 1396204..6c491a0 100644
--- a/core/java/android/speech/srec/Recognizer.java
+++ b/core/java/android/speech/srec/Recognizer.java
@@ -22,8 +22,6 @@
 
 package android.speech.srec;
 
-import android.util.Log;
-
 import java.io.File;
 import java.io.InputStream;
 import java.io.IOException;
diff --git a/core/java/android/speech/tts/AbstractEventLogger.java b/core/java/android/speech/tts/AbstractEventLogger.java
new file mode 100644
index 0000000..37f8656
--- /dev/null
+++ b/core/java/android/speech/tts/AbstractEventLogger.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2013 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 android.speech.tts;
+
+import android.os.SystemClock;
+
+/**
+ * Base class for storing data about a given speech synthesis request to the
+ * event logs. The data that is logged depends on actual implementation. Note
+ * that {@link AbstractEventLogger#onAudioDataWritten()} and
+ * {@link AbstractEventLogger#onEngineComplete()} must be called from a single
+ * thread (usually the audio playback thread}.
+ */
+abstract class AbstractEventLogger {
+    protected final String mServiceApp;
+    protected final int mCallerUid;
+    protected final int mCallerPid;
+    protected final long mReceivedTime;
+    protected long mPlaybackStartTime = -1;
+
+    private volatile long mRequestProcessingStartTime = -1;
+    private volatile long mEngineStartTime = -1;
+    private volatile long mEngineCompleteTime = -1;
+
+    private boolean mLogWritten = false;
+
+    AbstractEventLogger(int callerUid, int callerPid, String serviceApp) {
+        mCallerUid = callerUid;
+        mCallerPid = callerPid;
+        mServiceApp = serviceApp;
+        mReceivedTime = SystemClock.elapsedRealtime();
+    }
+
+    /**
+     * Notifies the logger that this request has been selected from
+     * the processing queue for processing. Engine latency / total time
+     * is measured from this baseline.
+     */
+    public void onRequestProcessingStart() {
+        mRequestProcessingStartTime = SystemClock.elapsedRealtime();
+    }
+
+    /**
+     * Notifies the logger that a chunk of data has been received from
+     * the engine. Might be called multiple times.
+     */
+    public void onEngineDataReceived() {
+        if (mEngineStartTime == -1) {
+            mEngineStartTime = SystemClock.elapsedRealtime();
+        }
+    }
+
+    /**
+     * Notifies the logger that the engine has finished processing data.
+     * Will be called exactly once.
+     */
+    public void onEngineComplete() {
+        mEngineCompleteTime = SystemClock.elapsedRealtime();
+    }
+
+    /**
+     * Notifies the logger that audio playback has started for some section
+     * of the synthesis. This is normally some amount of time after the engine
+     * has synthesized data and varies depending on utterances and
+     * other audio currently in the queue.
+     */
+    public void onAudioDataWritten() {
+        // For now, keep track of only the first chunk of audio
+        // that was played.
+        if (mPlaybackStartTime == -1) {
+            mPlaybackStartTime = SystemClock.elapsedRealtime();
+        }
+    }
+
+    /**
+     * Notifies the logger that the current synthesis has completed.
+     * All available data is not logged.
+     */
+    public void onCompleted(int statusCode) {
+        if (mLogWritten) {
+            return;
+        } else {
+            mLogWritten = true;
+        }
+
+        long completionTime = SystemClock.elapsedRealtime();
+
+        // We don't report latency for stopped syntheses because their overall
+        // total time spent will be inaccurate (will not correlate with
+        // the length of the utterance).
+
+        // onAudioDataWritten() should normally always be called, and hence mPlaybackStartTime
+        // should be set, if an error does not occur.
+        if (statusCode != TextToSpeechClient.Status.SUCCESS
+                || mPlaybackStartTime == -1 || mEngineCompleteTime == -1) {
+            logFailure(statusCode);
+            return;
+        }
+
+        final long audioLatency = mPlaybackStartTime - mReceivedTime;
+        final long engineLatency = mEngineStartTime - mRequestProcessingStartTime;
+        final long engineTotal = mEngineCompleteTime - mRequestProcessingStartTime;
+        logSuccess(audioLatency, engineLatency, engineTotal);
+    }
+
+    protected abstract void logFailure(int statusCode);
+    protected abstract void logSuccess(long audioLatency, long engineLatency,
+            long engineTotal);
+
+
+}
diff --git a/core/java/android/speech/tts/AbstractSynthesisCallback.java b/core/java/android/speech/tts/AbstractSynthesisCallback.java
index c7a4af0..91e119b 100644
--- a/core/java/android/speech/tts/AbstractSynthesisCallback.java
+++ b/core/java/android/speech/tts/AbstractSynthesisCallback.java
@@ -15,15 +15,28 @@
  */
 package android.speech.tts;
 
+
 /**
  * Defines additional methods the synthesis callback must implement that
  * are private to the TTS service implementation.
+ *
+ * All of these class methods (with the exception of {@link #stop()}) can be only called on the
+ * synthesis thread, while inside
+ * {@link TextToSpeechService#onSynthesizeText} or {@link TextToSpeechService#onSynthesizeTextV2}.
+ * {@link #stop()} is the exception, it may be called from multiple threads.
  */
 abstract class AbstractSynthesisCallback implements SynthesisCallback {
+    /** If true, request comes from V2 TTS interface */
+    protected final boolean mClientIsUsingV2;
+
     /**
-     * Checks whether the synthesis request completed successfully.
+     * Constructor.
+     * @param clientIsUsingV2 If true, this callback will be used inside
+     *         {@link TextToSpeechService#onSynthesizeTextV2} method.
      */
-    abstract boolean isDone();
+    AbstractSynthesisCallback(boolean clientIsUsingV2) {
+        mClientIsUsingV2 = clientIsUsingV2;
+    }
 
     /**
      * Aborts the speech request.
@@ -31,4 +44,16 @@
      * Can be called from multiple threads.
      */
     abstract void stop();
+
+    /**
+     * Get status code for a "stop".
+     *
+     * V2 Clients will receive special status, V1 clients will receive standard error.
+     *
+     * This method should only be called on the synthesis thread,
+     * while in {@link TextToSpeechService#onSynthesizeText}.
+     */
+    int errorCodeOnStop() {
+        return mClientIsUsingV2 ? TextToSpeechClient.Status.STOPPED : TextToSpeech.ERROR;
+    }
 }
diff --git a/core/java/android/speech/tts/AudioPlaybackHandler.java b/core/java/android/speech/tts/AudioPlaybackHandler.java
index d63f605..dcf49b0 100644
--- a/core/java/android/speech/tts/AudioPlaybackHandler.java
+++ b/core/java/android/speech/tts/AudioPlaybackHandler.java
@@ -43,7 +43,7 @@
             return;
         }
 
-        item.stop(false);
+        item.stop(TextToSpeechClient.Status.STOPPED);
     }
 
     public void enqueue(PlaybackQueueItem item) {
diff --git a/core/java/android/speech/tts/AudioPlaybackQueueItem.java b/core/java/android/speech/tts/AudioPlaybackQueueItem.java
index 1a1fda81..c514639 100644
--- a/core/java/android/speech/tts/AudioPlaybackQueueItem.java
+++ b/core/java/android/speech/tts/AudioPlaybackQueueItem.java
@@ -53,7 +53,7 @@
         dispatcher.dispatchOnStart();
         mPlayer = MediaPlayer.create(mContext, mUri);
         if (mPlayer == null) {
-            dispatcher.dispatchOnError();
+            dispatcher.dispatchOnError(TextToSpeechClient.Status.ERROR_OUTPUT);
             return;
         }
 
@@ -83,9 +83,9 @@
         }
 
         if (mFinished) {
-            dispatcher.dispatchOnDone();
+            dispatcher.dispatchOnSuccess();
         } else {
-            dispatcher.dispatchOnError();
+            dispatcher.dispatchOnStop();
         }
     }
 
@@ -99,7 +99,7 @@
     }
 
     @Override
-    void stop(boolean isError) {
+    void stop(int errorCode) {
         mDone.open();
     }
 }
diff --git a/core/java/android/speech/tts/EventLogTags.logtags b/core/java/android/speech/tts/EventLogTags.logtags
index f8654ad..e209a28 100644
--- a/core/java/android/speech/tts/EventLogTags.logtags
+++ b/core/java/android/speech/tts/EventLogTags.logtags
@@ -4,3 +4,6 @@
 
 76001 tts_speak_success (engine|3),(caller_uid|1),(caller_pid|1),(length|1),(locale|3),(rate|1),(pitch|1),(engine_latency|2|3),(engine_total|2|3),(audio_latency|2|3)
 76002 tts_speak_failure (engine|3),(caller_uid|1),(caller_pid|1),(length|1),(locale|3),(rate|1),(pitch|1)
+
+76003 tts_v2_speak_success (engine|3),(caller_uid|1),(caller_pid|1),(length|1),(request_config|3),(engine_latency|2|3),(engine_total|2|3),(audio_latency|2|3)
+76004 tts_v2_speak_failure (engine|3),(caller_uid|1),(caller_pid|1),(length|1),(request_config|3), (statusCode|1)
diff --git a/core/java/android/speech/tts/EventLogger.java b/core/java/android/speech/tts/EventLogger.java
deleted file mode 100644
index 82ed4dd..0000000
--- a/core/java/android/speech/tts/EventLogger.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.speech.tts;
-
-import android.os.SystemClock;
-import android.text.TextUtils;
-import android.util.Log;
-
-/**
- * Writes data about a given speech synthesis request to the event logs.
- * The data that is logged includes the calling app, length of the utterance,
- * speech rate / pitch and the latency and overall time taken.
- *
- * Note that {@link EventLogger#onStopped()} and {@link EventLogger#onError()}
- * might be called from any thread, but on {@link EventLogger#onAudioDataWritten()} and
- * {@link EventLogger#onComplete()} must be called from a single thread
- * (usually the audio playback thread}
- */
-class EventLogger {
-    private final SynthesisRequest mRequest;
-    private final String mServiceApp;
-    private final int mCallerUid;
-    private final int mCallerPid;
-    private final long mReceivedTime;
-    private long mPlaybackStartTime = -1;
-    private volatile long mRequestProcessingStartTime = -1;
-    private volatile long mEngineStartTime = -1;
-    private volatile long mEngineCompleteTime = -1;
-
-    private volatile boolean mError = false;
-    private volatile boolean mStopped = false;
-    private boolean mLogWritten = false;
-
-    EventLogger(SynthesisRequest request, int callerUid, int callerPid, String serviceApp) {
-        mRequest = request;
-        mCallerUid = callerUid;
-        mCallerPid = callerPid;
-        mServiceApp = serviceApp;
-        mReceivedTime = SystemClock.elapsedRealtime();
-    }
-
-    /**
-     * Notifies the logger that this request has been selected from
-     * the processing queue for processing. Engine latency / total time
-     * is measured from this baseline.
-     */
-    public void onRequestProcessingStart() {
-        mRequestProcessingStartTime = SystemClock.elapsedRealtime();
-    }
-
-    /**
-     * Notifies the logger that a chunk of data has been received from
-     * the engine. Might be called multiple times.
-     */
-    public void onEngineDataReceived() {
-        if (mEngineStartTime == -1) {
-            mEngineStartTime = SystemClock.elapsedRealtime();
-        }
-    }
-
-    /**
-     * Notifies the logger that the engine has finished processing data.
-     * Will be called exactly once.
-     */
-    public void onEngineComplete() {
-        mEngineCompleteTime = SystemClock.elapsedRealtime();
-    }
-
-    /**
-     * Notifies the logger that audio playback has started for some section
-     * of the synthesis. This is normally some amount of time after the engine
-     * has synthesized data and varies depending on utterances and
-     * other audio currently in the queue.
-     */
-    public void onAudioDataWritten() {
-        // For now, keep track of only the first chunk of audio
-        // that was played.
-        if (mPlaybackStartTime == -1) {
-            mPlaybackStartTime = SystemClock.elapsedRealtime();
-        }
-    }
-
-    /**
-     * Notifies the logger that the current synthesis was stopped.
-     * Latency numbers are not reported for stopped syntheses.
-     */
-    public void onStopped() {
-        mStopped = false;
-    }
-
-    /**
-     * Notifies the logger that the current synthesis resulted in
-     * an error. This is logged using {@link EventLogTags#writeTtsSpeakFailure}.
-     */
-    public void onError() {
-        mError = true;
-    }
-
-    /**
-     * Notifies the logger that the current synthesis has completed.
-     * All available data is not logged.
-     */
-    public void onWriteData() {
-        if (mLogWritten) {
-            return;
-        } else {
-            mLogWritten = true;
-        }
-
-        long completionTime = SystemClock.elapsedRealtime();
-        // onAudioDataWritten() should normally always be called if an
-        // error does not occur.
-        if (mError || mPlaybackStartTime == -1 || mEngineCompleteTime == -1) {
-            EventLogTags.writeTtsSpeakFailure(mServiceApp, mCallerUid, mCallerPid,
-                    getUtteranceLength(), getLocaleString(),
-                    mRequest.getSpeechRate(), mRequest.getPitch());
-            return;
-        }
-
-        // We don't report stopped syntheses because their overall
-        // total time spent will be innacurate (will not correlate with
-        // the length of the utterance).
-        if (mStopped) {
-            return;
-        }
-
-        final long audioLatency = mPlaybackStartTime - mReceivedTime;
-        final long engineLatency = mEngineStartTime - mRequestProcessingStartTime;
-        final long engineTotal = mEngineCompleteTime - mRequestProcessingStartTime;
-
-        EventLogTags.writeTtsSpeakSuccess(mServiceApp, mCallerUid, mCallerPid,
-                getUtteranceLength(), getLocaleString(),
-                mRequest.getSpeechRate(), mRequest.getPitch(),
-                engineLatency, engineTotal, audioLatency);
-    }
-
-    /**
-     * @return the length of the utterance for the given synthesis, 0
-     *          if the utterance was {@code null}.
-     */
-    private int getUtteranceLength() {
-        final String utterance = mRequest.getText();
-        return utterance == null ? 0 : utterance.length();
-    }
-
-    /**
-     * Returns a formatted locale string from the synthesis params of the
-     * form lang-country-variant.
-     */
-    private String getLocaleString() {
-        StringBuilder sb = new StringBuilder(mRequest.getLanguage());
-        if (!TextUtils.isEmpty(mRequest.getCountry())) {
-            sb.append('-');
-            sb.append(mRequest.getCountry());
-
-            if (!TextUtils.isEmpty(mRequest.getVariant())) {
-                sb.append('-');
-                sb.append(mRequest.getVariant());
-            }
-        }
-
-        return sb.toString();
-    }
-
-}
diff --git a/core/java/android/speech/tts/EventLoggerV1.java b/core/java/android/speech/tts/EventLoggerV1.java
new file mode 100644
index 0000000..f484347
--- /dev/null
+++ b/core/java/android/speech/tts/EventLoggerV1.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013 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 android.speech.tts;
+
+import android.text.TextUtils;
+
+/**
+ * Writes data about a given speech synthesis request for V1 API to the event
+ * logs. The data that is logged includes the calling app, length of the
+ * utterance, speech rate / pitch, the latency, and overall time taken.
+ */
+class EventLoggerV1 extends AbstractEventLogger {
+    private final SynthesisRequest mRequest;
+
+    EventLoggerV1(SynthesisRequest request, int callerUid, int callerPid, String serviceApp) {
+        super(callerUid, callerPid, serviceApp);
+        mRequest = request;
+    }
+
+    @Override
+    protected void logFailure(int statusCode) {
+        // We don't report stopped syntheses because their overall
+        // total time spent will be inaccurate (will not correlate with
+        // the length of the utterance).
+        if (statusCode != TextToSpeechClient.Status.STOPPED) {
+            EventLogTags.writeTtsSpeakFailure(mServiceApp, mCallerUid, mCallerPid,
+                    getUtteranceLength(), getLocaleString(),
+                    mRequest.getSpeechRate(), mRequest.getPitch());
+        }
+    }
+
+    @Override
+    protected void logSuccess(long audioLatency, long engineLatency, long engineTotal) {
+        EventLogTags.writeTtsSpeakSuccess(mServiceApp, mCallerUid, mCallerPid,
+                getUtteranceLength(), getLocaleString(),
+                mRequest.getSpeechRate(), mRequest.getPitch(),
+                engineLatency, engineTotal, audioLatency);
+    }
+
+    /**
+     * @return the length of the utterance for the given synthesis, 0
+     *          if the utterance was {@code null}.
+     */
+    private int getUtteranceLength() {
+        final String utterance = mRequest.getText();
+        return utterance == null ? 0 : utterance.length();
+    }
+
+    /**
+     * Returns a formatted locale string from the synthesis params of the
+     * form lang-country-variant.
+     */
+    private String getLocaleString() {
+        StringBuilder sb = new StringBuilder(mRequest.getLanguage());
+        if (!TextUtils.isEmpty(mRequest.getCountry())) {
+            sb.append('-');
+            sb.append(mRequest.getCountry());
+
+            if (!TextUtils.isEmpty(mRequest.getVariant())) {
+                sb.append('-');
+                sb.append(mRequest.getVariant());
+            }
+        }
+
+        return sb.toString();
+    }
+}
diff --git a/core/java/android/speech/tts/EventLoggerV2.java b/core/java/android/speech/tts/EventLoggerV2.java
new file mode 100644
index 0000000..b8e4dae
--- /dev/null
+++ b/core/java/android/speech/tts/EventLoggerV2.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2013 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 android.speech.tts;
+
+
+
+/**
+ * Writes data about a given speech synthesis request for V2 API to the event logs.
+ * The data that is logged includes the calling app, length of the utterance,
+ * synthesis request configuration and the latency and overall time taken.
+ */
+class EventLoggerV2 extends AbstractEventLogger {
+    private final SynthesisRequestV2 mRequest;
+
+    EventLoggerV2(SynthesisRequestV2 request, int callerUid, int callerPid, String serviceApp) {
+        super(callerUid, callerPid, serviceApp);
+        mRequest = request;
+    }
+
+    @Override
+    protected void logFailure(int statusCode) {
+        // We don't report stopped syntheses because their overall
+        // total time spent will be inaccurate (will not correlate with
+        // the length of the utterance).
+        if (statusCode != TextToSpeechClient.Status.STOPPED) {
+            EventLogTags.writeTtsV2SpeakFailure(mServiceApp,
+                    mCallerUid, mCallerPid, getUtteranceLength(), getRequestConfigString(), statusCode);
+        }
+    }
+
+    @Override
+    protected void logSuccess(long audioLatency, long engineLatency, long engineTotal) {
+        EventLogTags.writeTtsV2SpeakSuccess(mServiceApp,
+                mCallerUid, mCallerPid, getUtteranceLength(), getRequestConfigString(),
+                engineLatency, engineTotal, audioLatency);
+    }
+
+    /**
+     * @return the length of the utterance for the given synthesis, 0
+     *          if the utterance was {@code null}.
+     */
+    private int getUtteranceLength() {
+        final String utterance = mRequest.getText();
+        return utterance == null ? 0 : utterance.length();
+    }
+
+    /**
+     * Returns a string representation of the synthesis request configuration.
+     */
+    private String getRequestConfigString() {
+        // Ensure the bundles are unparceled.
+        mRequest.getVoiceParams().size();
+        mRequest.getAudioParams().size();
+
+        return new StringBuilder(64).append("VoiceName: ").append(mRequest.getVoiceName())
+            .append(" ,VoiceParams: ").append(mRequest.getVoiceParams())
+            .append(" ,SystemParams: ").append(mRequest.getAudioParams())
+            .append("]").toString();
+    }
+}
diff --git a/core/java/android/speech/tts/FileSynthesisCallback.java b/core/java/android/speech/tts/FileSynthesisCallback.java
index ab8f82f..717aeb6 100644
--- a/core/java/android/speech/tts/FileSynthesisCallback.java
+++ b/core/java/android/speech/tts/FileSynthesisCallback.java
@@ -16,13 +16,10 @@
 package android.speech.tts;
 
 import android.media.AudioFormat;
-import android.os.FileUtils;
+import android.speech.tts.TextToSpeechService.UtteranceProgressDispatcher;
 import android.util.Log;
 
-import java.io.File;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
 import java.nio.channels.FileChannel;
@@ -48,19 +45,39 @@
 
     private FileChannel mFileChannel;
 
+    private final UtteranceProgressDispatcher mDispatcher;
+    private final Object mCallerIdentity;
+
     private boolean mStarted = false;
-    private boolean mStopped = false;
     private boolean mDone = false;
 
-    FileSynthesisCallback(FileChannel fileChannel) {
+    /** Status code of synthesis */
+    protected int mStatusCode;
+
+    FileSynthesisCallback(FileChannel fileChannel, UtteranceProgressDispatcher dispatcher,
+            Object callerIdentity, boolean clientIsUsingV2) {
+        super(clientIsUsingV2);
         mFileChannel = fileChannel;
+        mDispatcher = dispatcher;
+        mCallerIdentity = callerIdentity;
+        mStatusCode = TextToSpeechClient.Status.SUCCESS;
     }
 
     @Override
     void stop() {
         synchronized (mStateLock) {
-            mStopped = true;
+            if (mDone) {
+                return;
+            }
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
+                return;
+            }
+
+            mStatusCode = TextToSpeechClient.Status.STOPPED;
             cleanUp();
+            if (mDispatcher != null) {
+                mDispatcher.dispatchOnStop();
+            }
         }
     }
 
@@ -75,14 +92,8 @@
      * Must be called while holding the monitor on {@link #mStateLock}.
      */
     private void closeFile() {
-        try {
-            if (mFileChannel != null) {
-                mFileChannel.close();
-                mFileChannel = null;
-            }
-        } catch (IOException ex) {
-            Log.e(TAG, "Failed to close output file descriptor", ex);
-        }
+        // File will be closed by the SpeechItem in the speech service.
+        mFileChannel = null;
     }
 
     @Override
@@ -91,38 +102,46 @@
     }
 
     @Override
-    boolean isDone() {
-        return mDone;
-    }
-
-    @Override
     public int start(int sampleRateInHz, int audioFormat, int channelCount) {
         if (DBG) {
             Log.d(TAG, "FileSynthesisRequest.start(" + sampleRateInHz + "," + audioFormat
                     + "," + channelCount + ")");
         }
+        FileChannel fileChannel = null;
         synchronized (mStateLock) {
-            if (mStopped) {
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
                 if (DBG) Log.d(TAG, "Request has been aborted.");
+                return errorCodeOnStop();
+            }
+            if (mStatusCode != TextToSpeechClient.Status.SUCCESS) {
+                if (DBG) Log.d(TAG, "Error was raised");
                 return TextToSpeech.ERROR;
             }
             if (mStarted) {
-                cleanUp();
-                throw new IllegalArgumentException("FileSynthesisRequest.start() called twice");
+                Log.e(TAG, "Start called twice");
+                return TextToSpeech.ERROR;
             }
             mStarted = true;
             mSampleRateInHz = sampleRateInHz;
             mAudioFormat = audioFormat;
             mChannelCount = channelCount;
 
-            try {
-                mFileChannel.write(ByteBuffer.allocate(WAV_HEADER_LENGTH));
-                return TextToSpeech.SUCCESS;
-            } catch (IOException ex) {
-                Log.e(TAG, "Failed to write wav header to output file descriptor" + ex);
-                cleanUp();
-                return TextToSpeech.ERROR;
+            if (mDispatcher != null) {
+                mDispatcher.dispatchOnStart();
             }
+            fileChannel = mFileChannel;
+        }
+
+        try {
+            fileChannel.write(ByteBuffer.allocate(WAV_HEADER_LENGTH));
+                return TextToSpeech.SUCCESS;
+        } catch (IOException ex) {
+            Log.e(TAG, "Failed to write wav header to output file descriptor", ex);
+            synchronized (mStateLock) {
+                cleanUp();
+                mStatusCode = TextToSpeechClient.Status.ERROR_OUTPUT;
+            }
+            return TextToSpeech.ERROR;
         }
     }
 
@@ -132,66 +151,128 @@
             Log.d(TAG, "FileSynthesisRequest.audioAvailable(" + buffer + "," + offset
                     + "," + length + ")");
         }
+        FileChannel fileChannel = null;
         synchronized (mStateLock) {
-            if (mStopped) {
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
                 if (DBG) Log.d(TAG, "Request has been aborted.");
+                return errorCodeOnStop();
+            }
+            if (mStatusCode != TextToSpeechClient.Status.SUCCESS) {
+                if (DBG) Log.d(TAG, "Error was raised");
                 return TextToSpeech.ERROR;
             }
             if (mFileChannel == null) {
                 Log.e(TAG, "File not open");
+                mStatusCode = TextToSpeechClient.Status.ERROR_OUTPUT;
                 return TextToSpeech.ERROR;
             }
-            try {
-                mFileChannel.write(ByteBuffer.wrap(buffer,  offset,  length));
-                return TextToSpeech.SUCCESS;
-            } catch (IOException ex) {
-                Log.e(TAG, "Failed to write to output file descriptor", ex);
+            if (!mStarted) {
+                Log.e(TAG, "Start method was not called");
+                return TextToSpeech.ERROR;
+            }
+            fileChannel = mFileChannel;
+        }
+
+        try {
+            fileChannel.write(ByteBuffer.wrap(buffer,  offset,  length));
+            return TextToSpeech.SUCCESS;
+        } catch (IOException ex) {
+            Log.e(TAG, "Failed to write to output file descriptor", ex);
+            synchronized (mStateLock) {
                 cleanUp();
-                return TextToSpeech.ERROR;
+                mStatusCode = TextToSpeechClient.Status.ERROR_OUTPUT;
             }
+            return TextToSpeech.ERROR;
         }
     }
 
     @Override
     public int done() {
         if (DBG) Log.d(TAG, "FileSynthesisRequest.done()");
+        FileChannel fileChannel = null;
+
+        int sampleRateInHz = 0;
+        int audioFormat = 0;
+        int channelCount = 0;
+
         synchronized (mStateLock) {
             if (mDone) {
-                if (DBG) Log.d(TAG, "Duplicate call to done()");
-                // This preserves existing behaviour. Earlier, if done was called twice
-                // we'd return ERROR because mFile == null and we'd add to logspam.
+                Log.w(TAG, "Duplicate call to done()");
+                // This is not an error that would prevent synthesis. Hence no
+                // setStatusCode is set.
                 return TextToSpeech.ERROR;
             }
-            if (mStopped) {
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
                 if (DBG) Log.d(TAG, "Request has been aborted.");
+                return errorCodeOnStop();
+            }
+            if (mDispatcher != null && mStatusCode != TextToSpeechClient.Status.SUCCESS &&
+                    mStatusCode != TextToSpeechClient.Status.STOPPED) {
+                mDispatcher.dispatchOnError(mStatusCode);
                 return TextToSpeech.ERROR;
             }
             if (mFileChannel == null) {
                 Log.e(TAG, "File not open");
                 return TextToSpeech.ERROR;
             }
-            try {
-                // Write WAV header at start of file
-                mFileChannel.position(0);
-                int dataLength = (int) (mFileChannel.size() - WAV_HEADER_LENGTH);
-                mFileChannel.write(
-                        makeWavHeader(mSampleRateInHz, mAudioFormat, mChannelCount, dataLength));
+            mDone = true;
+            fileChannel = mFileChannel;
+            sampleRateInHz = mSampleRateInHz;
+            audioFormat = mAudioFormat;
+            channelCount = mChannelCount;
+        }
+
+        try {
+            // Write WAV header at start of file
+            fileChannel.position(0);
+            int dataLength = (int) (fileChannel.size() - WAV_HEADER_LENGTH);
+            fileChannel.write(
+                    makeWavHeader(sampleRateInHz, audioFormat, channelCount, dataLength));
+
+            synchronized (mStateLock) {
                 closeFile();
-                mDone = true;
+                if (mDispatcher != null) {
+                    mDispatcher.dispatchOnSuccess();
+                }
                 return TextToSpeech.SUCCESS;
-            } catch (IOException ex) {
-                Log.e(TAG, "Failed to write to output file descriptor", ex);
-                cleanUp();
-                return TextToSpeech.ERROR;
             }
+        } catch (IOException ex) {
+            Log.e(TAG, "Failed to write to output file descriptor", ex);
+            synchronized (mStateLock) {
+                cleanUp();
+            }
+            return TextToSpeech.ERROR;
         }
     }
 
     @Override
     public void error() {
+        error(TextToSpeechClient.Status.ERROR_SYNTHESIS);
+    }
+
+    @Override
+    public void error(int errorCode) {
         if (DBG) Log.d(TAG, "FileSynthesisRequest.error()");
         synchronized (mStateLock) {
+            if (mDone) {
+                return;
+            }
             cleanUp();
+            mStatusCode = errorCode;
+        }
+    }
+
+    @Override
+    public boolean hasStarted() {
+        synchronized (mStateLock) {
+            return mStarted;
+        }
+    }
+
+    @Override
+    public boolean hasFinished() {
+        synchronized (mStateLock) {
+            return mDone;
         }
     }
 
@@ -225,4 +306,16 @@
         return header;
     }
 
+    @Override
+    public int fallback() {
+        synchronized (mStateLock) {
+            if (hasStarted() || hasFinished()) {
+                return TextToSpeech.ERROR;
+            }
+
+            mDispatcher.dispatchOnFallback();
+            mStatusCode = TextToSpeechClient.Status.SUCCESS;
+            return TextToSpeechClient.Status.SUCCESS;
+        }
+    }
 }
diff --git a/core/java/android/speech/tts/ITextToSpeechCallback.aidl b/core/java/android/speech/tts/ITextToSpeechCallback.aidl
index f0287d4..3c808ff 100644
--- a/core/java/android/speech/tts/ITextToSpeechCallback.aidl
+++ b/core/java/android/speech/tts/ITextToSpeechCallback.aidl
@@ -15,13 +15,53 @@
  */
 package android.speech.tts;
 
+import android.speech.tts.VoiceInfo;
+
 /**
  * Interface for callbacks from TextToSpeechService
  *
  * {@hide}
  */
 oneway interface ITextToSpeechCallback {
+    /**
+     * Tells the client that the synthesis has started.
+     *
+     * @param utteranceId Unique id identifying synthesis request.
+     */
     void onStart(String utteranceId);
-    void onDone(String utteranceId);
-    void onError(String utteranceId);
+
+    /**
+     * Tells the client that the synthesis has finished.
+     *
+     * @param utteranceId Unique id identifying synthesis request.
+     */
+    void onSuccess(String utteranceId);
+
+    /**
+     * Tells the client that the synthesis was stopped.
+     *
+     * @param utteranceId Unique id identifying synthesis request.
+     */
+    void onStop(String utteranceId);
+
+    /**
+     * Tells the client that the synthesis failed, and fallback synthesis will be attempted.
+     *
+     * @param utteranceId Unique id identifying synthesis request.
+     */
+    void onFallback(String utteranceId);
+
+    /**
+     * Tells the client that the synthesis has failed.
+     *
+     * @param utteranceId Unique id identifying synthesis request.
+     * @param errorCode One of the values from
+     *        {@link android.speech.tts.v2.TextToSpeechClient.Status}.
+     */
+    void onError(String utteranceId, int errorCode);
+
+    /**
+     * Inform the client that set of available voices changed.
+     */
+    void onVoicesInfoChange(in List<VoiceInfo> voices);
 }
diff --git a/core/java/android/speech/tts/ITextToSpeechService.aidl b/core/java/android/speech/tts/ITextToSpeechService.aidl
index b7bc70c..9cf49ff 100644
--- a/core/java/android/speech/tts/ITextToSpeechService.aidl
+++ b/core/java/android/speech/tts/ITextToSpeechService.aidl
@@ -20,6 +20,8 @@
 import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.speech.tts.ITextToSpeechCallback;
+import android.speech.tts.VoiceInfo;
+import android.speech.tts.SynthesisRequestV2;
 
 /**
  * Interface for TextToSpeech to talk to TextToSpeechService.
@@ -70,9 +72,10 @@
      *        TextToSpeech object.
      * @param duration Number of milliseconds of silence to play.
      * @param queueMode Determines what to do to requests already in the queue.
-     * @param param Request parameters.
+     * @param utteranceId Unique id used to identify this request in callbacks.
      */
-    int playSilence(in IBinder callingInstance, in long duration, in int queueMode, in Bundle params);
+    int playSilence(in IBinder callingInstance, in long duration, in int queueMode,
+        in String utteranceId);
 
     /**
      * Checks whether the service is currently playing some audio.
@@ -90,7 +93,6 @@
 
     /**
      * Returns the language, country and variant currently being used by the TTS engine.
-     *
      * Can be called from multiple threads.
      *
      * @return A 3-element array, containing language (ISO 3-letter code),
@@ -99,7 +101,7 @@
      *         be empty too.
      */
     String[] getLanguage();
-    
+
     /**
      * Returns a default TTS language, country and variant as set by the user.
      *
@@ -111,7 +113,7 @@
      *         be empty too.
      */
     String[] getClientDefaultLanguage();
-    
+
     /**
      * Checks whether the engine supports a given language.
      *
@@ -137,7 +139,7 @@
      * @param country ISO-3 country code. May be empty or null.
      * @param variant Language variant. May be empty or null.
      * @return An array of strings containing the set of features supported for
-     *         the supplied locale. The array of strings must not contain 
+     *         the supplied locale. The array of strings must not contain
      *         duplicates.
      */
     String[] getFeaturesForLanguage(in String lang, in String country, in String variant);
@@ -169,4 +171,44 @@
      */
     void setCallback(in IBinder caller, ITextToSpeechCallback cb);
 
+    /**
+     * Tells the engine to synthesize some speech and play it back.
+     *
+     * @param callingInstance a binder representing the identity of the calling
+     *        TextToSpeech object.
+     * @param text The text to synthesize.
+     * @param queueMode Determines what to do to requests already in the queue.
+     * @param request Request parameters.
+     */
+    int speakV2(in IBinder callingInstance, in SynthesisRequestV2 request);
+
+    /**
+     * Tells the engine to synthesize some speech and write it to a file.
+     *
+     * @param callingInstance a binder representing the identity of the calling
+     *        TextToSpeech object.
+     * @param text The text to synthesize.
+     * @param fileDescriptor The file descriptor to write the synthesized audio to. Has to be
+              writable.
+     * @param request Request parameters.
+     */
+    int synthesizeToFileDescriptorV2(in IBinder callingInstance,
+        in ParcelFileDescriptor fileDescriptor, in SynthesisRequestV2 request);
+
+    /**
+     * Plays an existing audio resource. V2 version
+     *
+     * @param callingInstance a binder representing the identity of the calling
+     *        TextToSpeech object.
+     * @param audioUri URI for the audio resource (a file or android.resource URI)
+     * @param utteranceId Unique identifier.
+     * @param audioParameters Parameters for audio playback (from {@link SynthesisRequestV2}).
+     */
+    int playAudioV2(in IBinder callingInstance, in Uri audioUri, in String utteranceId,
+        in Bundle audioParameters);
+
+    /**
+     * Request the list of available voices from the service.
+     */
+    List<VoiceInfo> getVoicesInfo();
 }
diff --git a/core/java/android/speech/tts/PlaybackQueueItem.java b/core/java/android/speech/tts/PlaybackQueueItem.java
index d0957ff..b2e323e 100644
--- a/core/java/android/speech/tts/PlaybackQueueItem.java
+++ b/core/java/android/speech/tts/PlaybackQueueItem.java
@@ -22,6 +22,16 @@
         return mDispatcher;
     }
 
+    @Override
     public abstract void run();
-    abstract void stop(boolean isError);
+
+    /**
+     * Stop the playback.
+     *
+     * @param errorCode Cause of the stop. Can be either one of the error codes from
+     *         {@link android.speech.tts.TextToSpeechClient.Status} or
+     *         {@link android.speech.tts.TextToSpeechClient.Status#STOPPED}
+     *         if stopped on a client request.
+     */
+    abstract void stop(int errorCode);
 }
diff --git a/core/java/android/speech/tts/PlaybackSynthesisCallback.java b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
index c99f201..e345e89 100644
--- a/core/java/android/speech/tts/PlaybackSynthesisCallback.java
+++ b/core/java/android/speech/tts/PlaybackSynthesisCallback.java
@@ -55,20 +55,20 @@
     private final AudioPlaybackHandler mAudioTrackHandler;
     // A request "token", which will be non null after start() has been called.
     private SynthesisPlaybackQueueItem mItem = null;
-    // Whether this request has been stopped. This is useful for keeping
-    // track whether stop() has been called before start(). In all other cases,
-    // a non-null value of mItem will provide the same information.
-    private boolean mStopped = false;
 
     private volatile boolean mDone = false;
 
+    /** Status code of synthesis */
+    protected int mStatusCode;
+
     private final UtteranceProgressDispatcher mDispatcher;
     private final Object mCallerIdentity;
-    private final EventLogger mLogger;
+    private final AbstractEventLogger mLogger;
 
     PlaybackSynthesisCallback(int streamType, float volume, float pan,
             AudioPlaybackHandler audioTrackHandler, UtteranceProgressDispatcher dispatcher,
-            Object callerIdentity, EventLogger logger) {
+            Object callerIdentity, AbstractEventLogger logger, boolean clientIsUsingV2) {
+        super(clientIsUsingV2);
         mStreamType = streamType;
         mVolume = volume;
         mPan = pan;
@@ -76,28 +76,25 @@
         mDispatcher = dispatcher;
         mCallerIdentity = callerIdentity;
         mLogger = logger;
+        mStatusCode = TextToSpeechClient.Status.SUCCESS;
     }
 
     @Override
     void stop() {
-        stopImpl(false);
-    }
-
-    void stopImpl(boolean wasError) {
         if (DBG) Log.d(TAG, "stop()");
 
-        // Note that mLogger.mError might be true too at this point.
-        mLogger.onStopped();
-
         SynthesisPlaybackQueueItem item;
         synchronized (mStateLock) {
-            if (mStopped) {
+            if (mDone) {
+                return;
+            }
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
                 Log.w(TAG, "stop() called twice");
                 return;
             }
 
             item = mItem;
-            mStopped = true;
+            mStatusCode = TextToSpeechClient.Status.STOPPED;
         }
 
         if (item != null) {
@@ -105,19 +102,15 @@
             // point it will write an additional buffer to the item - but we
             // won't worry about that because the audio playback queue will be cleared
             // soon after (see SynthHandler#stop(String).
-            item.stop(wasError);
+            item.stop(TextToSpeechClient.Status.STOPPED);
         } else {
             // This happens when stop() or error() were called before start() was.
 
             // In all other cases, mAudioTrackHandler.stop() will
             // result in onSynthesisDone being called, and we will
             // write data there.
-            mLogger.onWriteData();
-
-            if (wasError) {
-                // We have to dispatch the error ourselves.
-                mDispatcher.dispatchOnError();
-            }
+            mLogger.onCompleted(TextToSpeechClient.Status.STOPPED);
+            mDispatcher.dispatchOnStop();
         }
     }
 
@@ -129,26 +122,42 @@
     }
 
     @Override
-    boolean isDone() {
-        return mDone;
+    public boolean hasStarted() {
+        synchronized (mStateLock) {
+            return mItem != null;
+        }
+    }
+
+    @Override
+    public boolean hasFinished() {
+        synchronized (mStateLock) {
+            return mDone;
+        }
     }
 
     @Override
     public int start(int sampleRateInHz, int audioFormat, int channelCount) {
-        if (DBG) {
-            Log.d(TAG, "start(" + sampleRateInHz + "," + audioFormat
-                    + "," + channelCount + ")");
-        }
+        if (DBG) Log.d(TAG, "start(" + sampleRateInHz + "," + audioFormat + "," + channelCount
+                + ")");
 
         int channelConfig = BlockingAudioTrack.getChannelConfig(channelCount);
-        if (channelConfig == 0) {
-            Log.e(TAG, "Unsupported number of channels :" + channelCount);
-            return TextToSpeech.ERROR;
-        }
 
         synchronized (mStateLock) {
-            if (mStopped) {
+            if (channelConfig == 0) {
+                Log.e(TAG, "Unsupported number of channels :" + channelCount);
+                mStatusCode = TextToSpeechClient.Status.ERROR_OUTPUT;
+                return TextToSpeech.ERROR;
+            }
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
                 if (DBG) Log.d(TAG, "stop() called before start(), returning.");
+                return errorCodeOnStop();
+            }
+            if (mStatusCode != TextToSpeechClient.Status.SUCCESS) {
+                if (DBG) Log.d(TAG, "Error was raised");
+                return TextToSpeech.ERROR;
+            }
+            if (mItem != null) {
+                Log.e(TAG, "Start called twice");
                 return TextToSpeech.ERROR;
             }
             SynthesisPlaybackQueueItem item = new SynthesisPlaybackQueueItem(
@@ -161,13 +170,11 @@
         return TextToSpeech.SUCCESS;
     }
 
-
     @Override
     public int audioAvailable(byte[] buffer, int offset, int length) {
-        if (DBG) {
-            Log.d(TAG, "audioAvailable(byte[" + buffer.length + "],"
-                    + offset + "," + length + ")");
-        }
+        if (DBG) Log.d(TAG, "audioAvailable(byte[" + buffer.length + "]," + offset + "," + length
+                + ")");
+
         if (length > getMaxBufferSize() || length <= 0) {
             throw new IllegalArgumentException("buffer is too large or of zero length (" +
                     + length + " bytes)");
@@ -175,9 +182,17 @@
 
         SynthesisPlaybackQueueItem item = null;
         synchronized (mStateLock) {
-            if (mItem == null || mStopped) {
+            if (mItem == null) {
+                mStatusCode = TextToSpeechClient.Status.ERROR_OUTPUT;
                 return TextToSpeech.ERROR;
             }
+            if (mStatusCode != TextToSpeechClient.Status.SUCCESS) {
+                if (DBG) Log.d(TAG, "Error was raised");
+                return TextToSpeech.ERROR;
+            }
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
+                return errorCodeOnStop();
+            }
             item = mItem;
         }
 
@@ -190,11 +205,13 @@
         try {
             item.put(bufferCopy);
         } catch (InterruptedException ie) {
-            return TextToSpeech.ERROR;
+            synchronized (mStateLock) {
+                mStatusCode = TextToSpeechClient.Status.ERROR_OUTPUT;
+                return TextToSpeech.ERROR;
+            }
         }
 
         mLogger.onEngineDataReceived();
-
         return TextToSpeech.SUCCESS;
     }
 
@@ -202,35 +219,74 @@
     public int done() {
         if (DBG) Log.d(TAG, "done()");
 
+        int statusCode = 0;
         SynthesisPlaybackQueueItem item = null;
         synchronized (mStateLock) {
             if (mDone) {
                 Log.w(TAG, "Duplicate call to done()");
+                // Not an error that would prevent synthesis. Hence no
+                // setStatusCode
                 return TextToSpeech.ERROR;
             }
-
+            if (mStatusCode == TextToSpeechClient.Status.STOPPED) {
+                if (DBG) Log.d(TAG, "Request has been aborted.");
+                return errorCodeOnStop();
+            }
             mDone = true;
 
             if (mItem == null) {
+                // .done() was called before .start. Treat it as successful synthesis
+                // for a client, despite service bad implementation.
+                Log.w(TAG, "done() was called before start() call");
+                if (mStatusCode == TextToSpeechClient.Status.SUCCESS) {
+                    mDispatcher.dispatchOnSuccess();
+                } else {
+                    mDispatcher.dispatchOnError(mStatusCode);
+                }
+                mLogger.onEngineComplete();
                 return TextToSpeech.ERROR;
             }
 
             item = mItem;
+            statusCode = mStatusCode;
         }
 
-        item.done();
+        // Signal done or error to item
+        if (statusCode == TextToSpeechClient.Status.SUCCESS) {
+            item.done();
+        } else {
+            item.stop(statusCode);
+        }
         mLogger.onEngineComplete();
-
         return TextToSpeech.SUCCESS;
     }
 
     @Override
     public void error() {
-        if (DBG) Log.d(TAG, "error() [will call stop]");
-        // Currently, this call will not be logged if error( ) is called
-        // before start.
-        mLogger.onError();
-        stopImpl(true);
+        error(TextToSpeechClient.Status.ERROR_SYNTHESIS);
     }
 
+    @Override
+    public void error(int errorCode) {
+        if (DBG) Log.d(TAG, "error() [will call stop]");
+        synchronized (mStateLock) {
+            if (mDone) {
+                return;
+            }
+            mStatusCode = errorCode;
+        }
+    }
+
+    @Override
+    public int fallback() {
+        synchronized (mStateLock) {
+            if (hasStarted() || hasFinished()) {
+                return TextToSpeech.ERROR;
+            }
+
+            mDispatcher.dispatchOnFallback();
+            mStatusCode = TextToSpeechClient.Status.SUCCESS;
+            return TextToSpeechClient.Status.SUCCESS;
+        }
+    }
 }
diff --git a/core/java/android/speech/tts/RequestConfig.java b/core/java/android/speech/tts/RequestConfig.java
new file mode 100644
index 0000000..4b5385f
--- /dev/null
+++ b/core/java/android/speech/tts/RequestConfig.java
@@ -0,0 +1,213 @@
+package android.speech.tts;
+
+import android.media.AudioManager;
+import android.os.Bundle;
+
+/**
+ * Synthesis request configuration.
+ *
+ * This class is immutable, and can only be constructed using
+ * {@link RequestConfig.Builder}.
+ */
+public final class RequestConfig {
+
+    /** Builder for constructing RequestConfig objects. */
+    public static final class Builder {
+        private VoiceInfo mCurrentVoiceInfo;
+        private Bundle mVoiceParams;
+        private Bundle mAudioParams;
+
+        Builder(VoiceInfo currentVoiceInfo, Bundle voiceParams, Bundle audioParams) {
+            mCurrentVoiceInfo = currentVoiceInfo;
+            mVoiceParams = voiceParams;
+            mAudioParams = audioParams;
+        }
+
+        /**
+         * Create new RequestConfig builder.
+         */
+        public static Builder newBuilder() {
+            return new Builder(null, new Bundle(), new Bundle());
+        }
+
+        /**
+         * Create new RequestConfig builder.
+         * @param prototype
+         *            Prototype of new RequestConfig. Copies all fields of the
+         *            prototype to the constructed object.
+         */
+        public static Builder newBuilder(RequestConfig prototype) {
+            return new Builder(prototype.mCurrentVoiceInfo,
+                    (Bundle)prototype.mVoiceParams.clone(),
+                    (Bundle)prototype.mAudioParams.clone());
+        }
+
+        /** Set voice for request. Will reset voice parameters to the defaults. */
+        public Builder setVoice(VoiceInfo voice) {
+            mCurrentVoiceInfo = voice;
+            mVoiceParams = (Bundle)voice.getParamsWithDefaults().clone();
+            return this;
+        }
+
+        /**
+         * Set request voice parameter.
+         *
+         * @param paramName
+         *            The name of the parameter. It has to be one of the keys
+         *            from {@link VoiceInfo#getParamsWithDefaults()}
+         * @param value
+         *            Value of the parameter. Its type can be one of: Integer, Float,
+         *            Boolean, String, VoiceInfo (will be set as a String, result of a call to
+         *            the {@link VoiceInfo#getName()}) or byte[]. It has to be of the same type
+         *            as the default value from {@link VoiceInfo#getParamsWithDefaults()}
+         *            for that parameter.
+         * @throws IllegalArgumentException
+         *            If paramName is not a valid parameter name or its value is of a wrong
+         *            type.
+         * @throws IllegalStateException
+         *            If no voice is set.
+         */
+        public Builder setVoiceParam(String paramName, Object value){
+            if (mCurrentVoiceInfo == null) {
+                throw new IllegalStateException(
+                        "Couldn't set voice parameter, no voice is set");
+            }
+            Object defaultValue = mCurrentVoiceInfo.getParamsWithDefaults().get(paramName);
+            if (defaultValue == null) {
+                throw new IllegalArgumentException(
+                        "Parameter \"" + paramName + "\" is not available in set voice with " +
+                                "name: " + mCurrentVoiceInfo.getName());
+            }
+
+            // If it's VoiceInfo, get its name
+            if (value instanceof VoiceInfo) {
+                value = ((VoiceInfo)value).getName();
+            }
+
+            // Check type information
+            if (!defaultValue.getClass().equals(value.getClass())) {
+                throw new IllegalArgumentException(
+                        "Parameter \"" + paramName +"\" is of different type. Value passed has " +
+                                "type " + value.getClass().getSimpleName() + " but should have " +
+                                "type " + defaultValue.getClass().getSimpleName());
+            }
+
+            setParam(mVoiceParams, paramName, value);
+            return this;
+        }
+
+        /**
+         * Set request audio parameter.
+         *
+         * Doesn't requires a set voice.
+         *
+         * @param paramName
+         *            Name of parameter.
+         * @param value
+         *            Value of parameter. Its type can be one of: Integer, Float, Boolean, String
+         *            or byte[].
+         */
+        public Builder setAudioParam(String paramName, Object value) {
+            setParam(mAudioParams, paramName, value);
+            return this;
+        }
+
+        /**
+         * Set the {@link TextToSpeechClient.Params#AUDIO_PARAM_STREAM} audio parameter.
+         *
+         * @param streamId One of the STREAM_ constants defined in {@link AudioManager}.
+         */
+        public void setAudioParamStream(int streamId) {
+            setAudioParam(TextToSpeechClient.Params.AUDIO_PARAM_STREAM, streamId);
+        }
+
+        /**
+         * Set the {@link TextToSpeechClient.Params#AUDIO_PARAM_VOLUME} audio parameter.
+         *
+         * @param volume Float in range of 0.0 to 1.0.
+         */
+        public void setAudioParamVolume(float volume) {
+            setAudioParam(TextToSpeechClient.Params.AUDIO_PARAM_VOLUME, volume);
+        }
+
+        /**
+         * Set the {@link TextToSpeechClient.Params#AUDIO_PARAM_PAN} audio parameter.
+         *
+         * @param pan Float in range of -1.0 to +1.0.
+         */
+        public void setAudioParamPan(float pan) {
+            setAudioParam(TextToSpeechClient.Params.AUDIO_PARAM_PAN, pan);
+        }
+
+        private void setParam(Bundle bundle, String featureName, Object value) {
+            if (value instanceof String) {
+                bundle.putString(featureName, (String)value);
+            } else if(value instanceof byte[]) {
+                bundle.putByteArray(featureName, (byte[])value);
+            } else if(value instanceof Integer) {
+                bundle.putInt(featureName, (Integer)value);
+            } else if(value instanceof Float) {
+                bundle.putFloat(featureName, (Float)value);
+            } else if(value instanceof Double) {
+                bundle.putFloat(featureName, (Float)value);
+            } else if(value instanceof Boolean) {
+                bundle.putBoolean(featureName, (Boolean)value);
+            } else {
+                throw new IllegalArgumentException("Illegal type of object");
+            }
+            return;
+        }
+
+        /**
+         * Build new RequestConfig instance.
+         */
+        public RequestConfig build() {
+            RequestConfig config =
+                    new RequestConfig(mCurrentVoiceInfo, mVoiceParams, mAudioParams);
+            return config;
+        }
+    }
+
+    private RequestConfig(VoiceInfo voiceInfo, Bundle voiceParams, Bundle audioParams) {
+        mCurrentVoiceInfo = voiceInfo;
+        mVoiceParams = voiceParams;
+        mAudioParams = audioParams;
+    }
+
+    /**
+     * Currently set voice.
+     */
+    private final VoiceInfo mCurrentVoiceInfo;
+
+    /**
+     * Voice parameters bundle.
+     */
+    private final Bundle mVoiceParams;
+
+    /**
+     * Audio parameters bundle.
+     */
+    private final Bundle mAudioParams;
+
+    /**
+     * @return Currently set request voice.
+     */
+    public VoiceInfo getVoice() {
+        return mCurrentVoiceInfo;
+    }
+
+    /**
+     * @return Request audio parameters.
+     */
+    public Bundle getAudioParams() {
+        return mAudioParams;
+    }
+
+    /**
+     * @return Request voice parameters.
+     */
+    public Bundle getVoiceParams() {
+        return mVoiceParams;
+    }
+
+}
diff --git a/core/java/android/speech/tts/RequestConfigHelper.java b/core/java/android/speech/tts/RequestConfigHelper.java
new file mode 100644
index 0000000..b25c985
--- /dev/null
+++ b/core/java/android/speech/tts/RequestConfigHelper.java
@@ -0,0 +1,170 @@
+package android.speech.tts;
+
+import android.speech.tts.TextToSpeechClient.EngineStatus;
+
+import java.util.Locale;
+
+/**
+ * Set of common heuristics for selecting {@link VoiceInfo} from
+ * {@link TextToSpeechClient#getEngineStatus()} output.
+ */
+public final class RequestConfigHelper {
+    private RequestConfigHelper() {}
+
+    /**
+     * Interface for scoring VoiceInfo object.
+     */
+    public static interface VoiceScorer {
+        /**
+         * Score VoiceInfo. If the score is less than or equal to zero, that voice is discarded.
+         * If two voices have same desired primary characteristics (highest quality, lowest
+         * latency or others), the one with the higher score is selected.
+         */
+        public int scoreVoice(VoiceInfo voiceInfo);
+    }
+
+    /**
+     * Score positively voices that exactly match the locale supplied to the constructor.
+     */
+    public static final class ExactLocaleMatcher implements VoiceScorer {
+        private final Locale mLocale;
+
+        /**
+         * Score positively voices that exactly match the given locale
+         * @param locale Reference locale. If null, the default locale will be used.
+         */
+        public ExactLocaleMatcher(Locale locale) {
+            if (locale == null) {
+                mLocale = Locale.getDefault();
+            } else {
+                mLocale = locale;
+            }
+        }
+        @Override
+        public int scoreVoice(VoiceInfo voiceInfo) {
+            return mLocale.equals(voiceInfo.getLocale()) ? 1 : 0;
+        }
+    }
+
+    /**
+     * Score positively voices that match exactly the given locale (score 3)
+     * or that share same language and country (score 2), or that share just a language (score 1).
+     */
+    public static final class LanguageMatcher implements VoiceScorer {
+        private final Locale mLocale;
+
+        /**
+         * Score positively voices with similar locale.
+         * @param locale Reference locale. If null, default will be used.
+         */
+        public LanguageMatcher(Locale locale) {
+            if (locale == null) {
+                mLocale = Locale.getDefault();
+            } else {
+                mLocale = locale;
+            }
+        }
+
+        @Override
+        public int scoreVoice(VoiceInfo voiceInfo) {
+            final Locale voiceLocale = voiceInfo.getLocale();
+            if (mLocale.equals(voiceLocale)) {
+                return 3;
+            } else {
+                if (mLocale.getLanguage().equals(voiceLocale.getLanguage())) {
+                    if (mLocale.getCountry().equals(voiceLocale.getCountry())) {
+                        return 2;
+                    }
+                    return 1;
+                }
+                return 0;
+            }
+        }
+    }
+
+    /**
+     * Get the highest quality voice from voices that score more than zero from the passed scorer.
+     * If there is more than one voice with the same highest quality, then this method returns one
+     * with the highest score. If they share same score as well, one with the lower index in the
+     * voices list is returned.
+     *
+     * @param engineStatus
+     *            Voices status received from a {@link TextToSpeechClient#getEngineStatus()} call.
+     * @param voiceScorer
+     *            Used to discard unsuitable voices and help settle cases where more than
+     *            one voice has the desired characteristic.
+     * @param hasToBeEmbedded
+     *            If true, require the voice to be an embedded voice (no network
+     *            access will be required for synthesis).
+     */
+    private static VoiceInfo getHighestQualityVoice(EngineStatus engineStatus,
+            VoiceScorer voiceScorer, boolean hasToBeEmbedded) {
+        VoiceInfo bestVoice = null;
+        int bestScoreMatch = 1;
+        int bestVoiceQuality = 0;
+
+        for (VoiceInfo voice : engineStatus.getVoices()) {
+            int score = voiceScorer.scoreVoice(voice);
+            if (score <= 0 || hasToBeEmbedded && voice.getRequiresNetworkConnection()
+                    || voice.getQuality() < bestVoiceQuality) {
+                continue;
+            }
+
+            if (bestVoice == null ||
+                    voice.getQuality() > bestVoiceQuality ||
+                    score > bestScoreMatch) {
+                bestVoice = voice;
+                bestScoreMatch = score;
+                bestVoiceQuality = voice.getQuality();
+            }
+        }
+        return bestVoice;
+    }
+
+    /**
+     * Get highest quality voice.
+     *
+     * Highest quality voice is selected from voices that score more than zero from the passed
+     * scorer. If there is more than one voice with the same highest quality, then this method
+     * will return one with the highest score. If they share same score as well, one with the lower
+     * index in the voices list is returned.
+
+     * @param engineStatus
+     *            Voices status received from a {@link TextToSpeechClient#getEngineStatus()} call.
+     * @param hasToBeEmbedded
+     *            If true, require the voice to be an embedded voice (no network
+     *            access will be required for synthesis).
+     * @param voiceScorer
+     *            Scorer is used to discard unsuitable voices and help settle cases where more than
+     *            one voice has highest quality.
+     * @return RequestConfig with selected voice or null if suitable voice was not found.
+     */
+    public static RequestConfig highestQuality(EngineStatus engineStatus,
+            boolean hasToBeEmbedded, VoiceScorer voiceScorer) {
+        VoiceInfo voice = getHighestQualityVoice(engineStatus, voiceScorer, hasToBeEmbedded);
+        if (voice == null) {
+            return null;
+        }
+        return RequestConfig.Builder.newBuilder().setVoice(voice).build();
+    }
+
+    /**
+     * Get highest quality voice for the default locale.
+     *
+     * Call {@link #highestQuality(EngineStatus, boolean, VoiceScorer)} with
+     * {@link LanguageMatcher} set to device default locale.
+     *
+     * @param engineStatus
+     *            Voices status received from a {@link TextToSpeechClient#getEngineStatus()} call.
+     * @param hasToBeEmbedded
+     *            If true, require the voice to be an embedded voice (no network
+     *            access will be required for synthesis).
+     * @return RequestConfig with selected voice or null if suitable voice was not found.
+     */
+    public static RequestConfig highestQuality(EngineStatus engineStatus,
+            boolean hasToBeEmbedded) {
+        return highestQuality(engineStatus, hasToBeEmbedded,
+                new LanguageMatcher(Locale.getDefault()));
+    }
+
+}
diff --git a/core/java/android/speech/tts/SilencePlaybackQueueItem.java b/core/java/android/speech/tts/SilencePlaybackQueueItem.java
index a5e47ae..88b7c70 100644
--- a/core/java/android/speech/tts/SilencePlaybackQueueItem.java
+++ b/core/java/android/speech/tts/SilencePlaybackQueueItem.java
@@ -17,7 +17,6 @@
 
 import android.os.ConditionVariable;
 import android.speech.tts.TextToSpeechService.UtteranceProgressDispatcher;
-import android.util.Log;
 
 class SilencePlaybackQueueItem extends PlaybackQueueItem {
     private final ConditionVariable mCondVar = new ConditionVariable();
@@ -32,14 +31,20 @@
     @Override
     public void run() {
         getDispatcher().dispatchOnStart();
+        boolean wasStopped = false;
         if (mSilenceDurationMs > 0) {
-            mCondVar.block(mSilenceDurationMs);
+          wasStopped = mCondVar.block(mSilenceDurationMs);
         }
-        getDispatcher().dispatchOnDone();
+        if (wasStopped) {
+            getDispatcher().dispatchOnStop();
+        } else {
+            getDispatcher().dispatchOnSuccess();
+        }
+
     }
 
     @Override
-    void stop(boolean isError) {
+    void stop(int errorCode) {
         mCondVar.open();
     }
 }
diff --git a/core/java/android/speech/tts/SynthesisCallback.java b/core/java/android/speech/tts/SynthesisCallback.java
index f98bb09..bc2f239 100644
--- a/core/java/android/speech/tts/SynthesisCallback.java
+++ b/core/java/android/speech/tts/SynthesisCallback.java
@@ -26,7 +26,9 @@
  * indicate that an error has occurred, but if the call is made after a call
  * to {@link #done}, it might be discarded.
  *
- * After {@link #start} been called, {@link #done} must be called regardless of errors.
+ * {@link #done} must be called at the end of synthesis, regardless of errors.
+ *
+ * All methods can be only called on the synthesis thread.
  */
 public interface SynthesisCallback {
     /**
@@ -41,13 +43,16 @@
      * request.
      *
      * This method should only be called on the synthesis thread,
-     * while in {@link TextToSpeechService#onSynthesizeText}.
+     * while in {@link TextToSpeechService#onSynthesizeText} or
+     * {@link TextToSpeechService#onSynthesizeTextV2}.
      *
      * @param sampleRateInHz Sample rate in HZ of the generated audio.
      * @param audioFormat Audio format of the generated audio. Must be one of
      *         the ENCODING_ constants defined in {@link android.media.AudioFormat}.
      * @param channelCount The number of channels. Must be {@code 1} or {@code 2}.
-     * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}.
+     * @return {@link TextToSpeech#SUCCESS}, {@link TextToSpeech#ERROR}.
+     *          {@link TextToSpeechClient.Status#STOPPED} is also possible if called in context of
+     *          {@link TextToSpeechService#onSynthesizeTextV2}.
      */
     public int start(int sampleRateInHz, int audioFormat, int channelCount);
 
@@ -55,7 +60,8 @@
      * The service should call this method when synthesized audio is ready for consumption.
      *
      * This method should only be called on the synthesis thread,
-     * while in {@link TextToSpeechService#onSynthesizeText}.
+     * while in {@link TextToSpeechService#onSynthesizeText} or
+     * {@link TextToSpeechService#onSynthesizeTextV2}.
      *
      * @param buffer The generated audio data. This method will not hold on to {@code buffer},
      *         so the caller is free to modify it after this method returns.
@@ -63,6 +69,8 @@
      * @param length The number of bytes of audio data in {@code buffer}. This must be
      *         less than or equal to the return value of {@link #getMaxBufferSize}.
      * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}.
+     *          {@link TextToSpeechClient.Status#STOPPED} is also possible if called in context of
+     *          {@link TextToSpeechService#onSynthesizeTextV2}.
      */
     public int audioAvailable(byte[] buffer, int offset, int length);
 
@@ -71,11 +79,14 @@
      * been passed to {@link #audioAvailable}.
      *
      * This method should only be called on the synthesis thread,
-     * while in {@link TextToSpeechService#onSynthesizeText}.
+     * while in {@link TextToSpeechService#onSynthesizeText} or
+     * {@link TextToSpeechService#onSynthesizeTextV2}.
      *
-     * This method has to be called if {@link #start} was called.
+     * This method has to be called if {@link #start} and/or {@link #error} was called.
      *
      * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}.
+     *          {@link TextToSpeechClient.Status#STOPPED} is also possible if called in context of
+     *          {@link TextToSpeechService#onSynthesizeTextV2}.
      */
     public int done();
 
@@ -87,4 +98,58 @@
      */
     public void error();
 
-}
\ No newline at end of file
+
+    /**
+     * The service should call this method if the speech synthesis fails.
+     *
+     * This method should only be called on the synthesis thread,
+     * while in {@link TextToSpeechService#onSynthesizeText} or
+     * {@link TextToSpeechService#onSynthesizeTextV2}.
+     *
+     * @param errorCode Error code to pass to the client. One of the ERROR_ values from
+     *      {@link TextToSpeechClient.Status}
+     */
+    public void error(int errorCode);
+
+    /**
+     * Communicate to client that the original request can't be done and client-requested
+     * fallback is happening.
+     *
+     * Fallback can be requested by the client by setting
+     * {@link TextToSpeechClient.Params#FALLBACK_VOICE_NAME} voice parameter with a id of
+     * the voice that is expected to be used for the fallback.
+     *
+     * This method will fail if user called {@link #start(int, int, int)} and/or
+     * {@link #done()}.
+     *
+     * This method should only be called on the synthesis thread,
+     * while in {@link TextToSpeechService#onSynthesizeTextV2}.
+     *
+     * @return {@link TextToSpeech#SUCCESS}, {@link TextToSpeech#ERROR} if client already
+     *          called {@link #start(int, int, int)}, {@link TextToSpeechClient.Status#STOPPED}
+     *          if stop was requested.
+     */
+    public int fallback();
+
+    /**
+     * Check if {@link #start} was called or not.
+     *
+     * This method should only be called on the synthesis thread,
+     * while in {@link TextToSpeechService#onSynthesizeText} or
+     * {@link TextToSpeechService#onSynthesizeTextV2}.
+     *
+     * Useful for checking if a fallback from network request is possible.
+     */
+    public boolean hasStarted();
+
+    /**
+     * Check if {@link #done} was called or not.
+     *
+     * This method should only be called on the synthesis thread,
+     * while in {@link TextToSpeechService#onSynthesizeText} or
+     * {@link TextToSpeechService#onSynthesizeTextV2}.
+     *
+     * Useful for checking if a fallback from network request is possible.
+     */
+    public boolean hasFinished();
+}
diff --git a/core/java/android/speech/tts/SynthesisPlaybackQueueItem.java b/core/java/android/speech/tts/SynthesisPlaybackQueueItem.java
index e853c9e..b424356 100644
--- a/core/java/android/speech/tts/SynthesisPlaybackQueueItem.java
+++ b/core/java/android/speech/tts/SynthesisPlaybackQueueItem.java
@@ -57,23 +57,22 @@
      */
     private volatile boolean mStopped;
     private volatile boolean mDone;
-    private volatile boolean mIsError;
+    private volatile int mStatusCode;
 
     private final BlockingAudioTrack mAudioTrack;
-    private final EventLogger mLogger;
-
+    private final AbstractEventLogger mLogger;
 
     SynthesisPlaybackQueueItem(int streamType, int sampleRate,
             int audioFormat, int channelCount,
             float volume, float pan, UtteranceProgressDispatcher dispatcher,
-            Object callerIdentity, EventLogger logger) {
+            Object callerIdentity, AbstractEventLogger logger) {
         super(dispatcher, callerIdentity);
 
         mUnconsumedBytes = 0;
 
         mStopped = false;
         mDone = false;
-        mIsError = false;
+        mStatusCode = TextToSpeechClient.Status.SUCCESS;
 
         mAudioTrack = new BlockingAudioTrack(streamType, sampleRate, audioFormat,
                 channelCount, volume, pan);
@@ -86,9 +85,8 @@
         final UtteranceProgressDispatcher dispatcher = getDispatcher();
         dispatcher.dispatchOnStart();
 
-
         if (!mAudioTrack.init()) {
-            dispatcher.dispatchOnError();
+            dispatcher.dispatchOnError(TextToSpeechClient.Status.ERROR_OUTPUT);
             return;
         }
 
@@ -112,23 +110,25 @@
 
         mAudioTrack.waitAndRelease();
 
-        if (mIsError) {
-            dispatcher.dispatchOnError();
+        if (mStatusCode == TextToSpeechClient.Status.SUCCESS) {
+            dispatcher.dispatchOnSuccess();
+        } else if(mStatusCode == TextToSpeechClient.Status.STOPPED) {
+            dispatcher.dispatchOnStop();
         } else {
-            dispatcher.dispatchOnDone();
+            dispatcher.dispatchOnError(mStatusCode);
         }
 
-        mLogger.onWriteData();
+        mLogger.onCompleted(mStatusCode);
     }
 
     @Override
-    void stop(boolean isError) {
+    void stop(int statusCode) {
         try {
             mListLock.lock();
 
             // Update our internal state.
             mStopped = true;
-            mIsError = isError;
+            mStatusCode = statusCode;
 
             // Wake up the audio playback thread if it was waiting on take().
             // take() will return null since mStopped was true, and will then
diff --git a/core/java/android/speech/tts/SynthesisRequestV2.aidl b/core/java/android/speech/tts/SynthesisRequestV2.aidl
new file mode 100644
index 0000000..2ac7da6
--- /dev/null
+++ b/core/java/android/speech/tts/SynthesisRequestV2.aidl
@@ -0,0 +1,20 @@
+/*
+**
+** Copyright 2013, 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 android.speech.tts;
+
+parcelable SynthesisRequestV2;
\ No newline at end of file
diff --git a/core/java/android/speech/tts/SynthesisRequestV2.java b/core/java/android/speech/tts/SynthesisRequestV2.java
new file mode 100644
index 0000000..a1da49c
--- /dev/null
+++ b/core/java/android/speech/tts/SynthesisRequestV2.java
@@ -0,0 +1,144 @@
+package android.speech.tts;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.speech.tts.TextToSpeechClient.UtteranceId;
+
+/**
+ * Service-side representation of a synthesis request from a V2 API client. Contains:
+ * <ul>
+ *   <li>The utterance to synthesize</li>
+ *   <li>The id of the utterance (String, result of {@link UtteranceId#toUniqueString()}</li>
+ *   <li>The synthesis voice name (String, result of {@link VoiceInfo#getName()})</li>
+ *   <li>Voice parameters (Bundle of parameters)</li>
+ *   <li>Audio parameters (Bundle of parameters)</li>
+ * </ul>
+ */
+public final class SynthesisRequestV2 implements Parcelable {
+    /** Synthesis utterance. */
+    private final String mText;
+
+    /** Synthesis id. */
+    private final String mUtteranceId;
+
+    /** Voice ID. */
+    private final String mVoiceName;
+
+    /** Voice Parameters. */
+    private final Bundle mVoiceParams;
+
+    /** Audio Parameters. */
+    private final Bundle mAudioParams;
+
+    /**
+     * Constructor for test purposes.
+     */
+    public SynthesisRequestV2(String text, String utteranceId, String voiceName,
+            Bundle voiceParams, Bundle audioParams) {
+        this.mText = text;
+        this.mUtteranceId = utteranceId;
+        this.mVoiceName = voiceName;
+        this.mVoiceParams = voiceParams;
+        this.mAudioParams = audioParams;
+    }
+
+    /**
+     * Parcel based constructor.
+     *
+     * @hide
+     */
+    public SynthesisRequestV2(Parcel in) {
+        this.mText = in.readString();
+        this.mUtteranceId = in.readString();
+        this.mVoiceName = in.readString();
+        this.mVoiceParams = in.readBundle();
+        this.mAudioParams = in.readBundle();
+    }
+
+    SynthesisRequestV2(String text, String utteranceId, RequestConfig rconfig) {
+        this.mText = text;
+        this.mUtteranceId = utteranceId;
+        this.mVoiceName = rconfig.getVoice().getName();
+        this.mVoiceParams = rconfig.getVoiceParams();
+        this.mAudioParams = rconfig.getAudioParams();
+    }
+
+    /**
+     * Write to parcel.
+     *
+     * @hide
+     */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mText);
+        dest.writeString(mUtteranceId);
+        dest.writeString(mVoiceName);
+        dest.writeBundle(mVoiceParams);
+        dest.writeBundle(mAudioParams);
+    }
+
+    /**
+     * @return the text which should be synthesized.
+     */
+    public String getText() {
+        return mText;
+    }
+
+    /**
+     * @return the id of the synthesis request. It's an output of a call to the
+     * {@link UtteranceId#toUniqueString()} method of the {@link UtteranceId} associated with
+     * this request.
+     */
+    public String getUtteranceId() {
+        return mUtteranceId;
+    }
+
+    /**
+     * @return the name of the voice to use for this synthesis request. Result of a call to
+     * the {@link VoiceInfo#getName()} method.
+     */
+    public String getVoiceName() {
+        return mVoiceName;
+    }
+
+    /**
+     * @return bundle of voice parameters.
+     */
+    public Bundle getVoiceParams() {
+        return mVoiceParams;
+    }
+
+    /**
+     * @return bundle of audio parameters.
+     */
+    public Bundle getAudioParams() {
+        return mAudioParams;
+    }
+
+    /**
+     * Parcel creators.
+     *
+     * @hide
+     */
+    public static final Parcelable.Creator<SynthesisRequestV2> CREATOR =
+            new Parcelable.Creator<SynthesisRequestV2>() {
+        @Override
+        public SynthesisRequestV2 createFromParcel(Parcel source) {
+            return new SynthesisRequestV2(source);
+        }
+
+        @Override
+        public SynthesisRequestV2[] newArray(int size) {
+            return new SynthesisRequestV2[size];
+        }
+    };
+
+    /**
+     * @hide
+     */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+}
diff --git a/core/java/android/speech/tts/TextToSpeech.java b/core/java/android/speech/tts/TextToSpeech.java
index 2752085..c527acf 100644
--- a/core/java/android/speech/tts/TextToSpeech.java
+++ b/core/java/android/speech/tts/TextToSpeech.java
@@ -54,7 +54,9 @@
  * When you are done using the TextToSpeech instance, call the {@link #shutdown()} method
  * to release the native resources used by the TextToSpeech engine.
  *
+ * @deprecated Use {@link TextToSpeechClient} instead
  */
+@Deprecated
 public class TextToSpeech {
 
     private static final String TAG = "TextToSpeech";
@@ -970,7 +972,7 @@
             @Override
             public Integer run(ITextToSpeechService service) throws RemoteException {
                 return service.playSilence(getCallerIdentity(), durationInMs, queueMode,
-                        getParams(params));
+                        params == null ? null : params.get(Engine.KEY_PARAM_UTTERANCE_ID));
             }
         }, ERROR, "playSilence");
     }
@@ -988,6 +990,7 @@
      * must be behave as per {@link Boolean#parseBoolean(String)}.
      *
      * @param locale The locale to query features for.
+     * @return Set instance. May return {@code null} on error.
      */
     public Set<String> getFeatures(final Locale locale) {
         return runAction(new Action<Set<String>>() {
@@ -1443,8 +1446,17 @@
         private boolean mEstablished;
 
         private final ITextToSpeechCallback.Stub mCallback = new ITextToSpeechCallback.Stub() {
+            public void onStop(String utteranceId) throws RemoteException {
+                // do nothing
+            };
+
             @Override
-            public void onDone(String utteranceId) {
+            public void onFallback(String utteranceId) throws RemoteException {
+                // do nothing
+            }
+
+            @Override
+            public void onSuccess(String utteranceId) {
                 UtteranceProgressListener listener = mUtteranceProgressListener;
                 if (listener != null) {
                     listener.onDone(utteranceId);
@@ -1452,7 +1464,7 @@
             }
 
             @Override
-            public void onError(String utteranceId) {
+            public void onError(String utteranceId, int errorCode) {
                 UtteranceProgressListener listener = mUtteranceProgressListener;
                 if (listener != null) {
                     listener.onError(utteranceId);
@@ -1466,6 +1478,11 @@
                     listener.onStart(utteranceId);
                 }
             }
+
+            @Override
+            public void onVoicesInfoChange(List<VoiceInfo> voicesInfo) throws RemoteException {
+                // Ignore it
+            }
         };
 
         private class SetupConnectionAsyncTask extends AsyncTask<Void, Void, Integer> {
@@ -1484,11 +1501,13 @@
 
                     try {
                         mService.setCallback(getCallerIdentity(), mCallback);
-                        String[] defaultLanguage = mService.getClientDefaultLanguage();
 
-                        mParams.putString(Engine.KEY_PARAM_LANGUAGE, defaultLanguage[0]);
-                        mParams.putString(Engine.KEY_PARAM_COUNTRY, defaultLanguage[1]);
-                        mParams.putString(Engine.KEY_PARAM_VARIANT, defaultLanguage[2]);
+                        if (mParams.getString(Engine.KEY_PARAM_LANGUAGE) == null) {
+                            String[] defaultLanguage = mService.getClientDefaultLanguage();
+                            mParams.putString(Engine.KEY_PARAM_LANGUAGE, defaultLanguage[0]);
+                            mParams.putString(Engine.KEY_PARAM_COUNTRY, defaultLanguage[1]);
+                            mParams.putString(Engine.KEY_PARAM_VARIANT, defaultLanguage[2]);
+                        }
 
                         Log.i(TAG, "Set up connection to " + mName);
                         return SUCCESS;
diff --git a/core/java/android/speech/tts/TextToSpeechClient.java b/core/java/android/speech/tts/TextToSpeechClient.java
new file mode 100644
index 0000000..10e2073
--- /dev/null
+++ b/core/java/android/speech/tts/TextToSpeechClient.java
@@ -0,0 +1,1047 @@
+/*
+ * Copyright (C) 2013 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 android.speech.tts;
+
+import android.app.Activity;
+import android.app.Application;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.media.AudioManager;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.IBinder;
+import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
+import android.speech.tts.ITextToSpeechCallback;
+import android.speech.tts.ITextToSpeechService;
+import android.util.Log;
+import android.util.Pair;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Synthesizes speech from text for immediate playback or to create a sound
+ * file.
+ * <p>
+ * This is an updated version of the speech synthesis client that supersedes
+ * {@link android.speech.tts.TextToSpeech}.
+ * <p>
+ * A TextToSpeechClient instance can only be used to synthesize text once it has
+ * connected to the service. The TextToSpeechClient instance will start establishing
+ * the connection after a call to the {@link #connect()} method. This is usually done in
+ * {@link Application#onCreate()} or {@link Activity#onCreate}. When the connection
+ * is established, the instance will call back using the
+ * {@link TextToSpeechClient.ConnectionCallbacks} interface. Only after a
+ * successful callback is the client usable.
+ * <p>
+ * After successful connection, the list of all available voices can be obtained
+ * by calling the {@link TextToSpeechClient#getEngineStatus()} method. The client can
+ * choose a voice using some custom heuristic and build a {@link RequestConfig} object
+ * using {@link RequestConfig.Builder}, or can use one of the common heuristics found
+ * in ({@link RequestConfigHelper}.
+ * <p>
+ * When you are done using the TextToSpeechClient instance, call the
+ * {@link #disconnect()} method to release the connection.
+ * <p>
+ * In the rare case of a change to the set of available voices, the service will call to the
+ * {@link ConnectionCallbacks#onEngineStatusChange} with new set of available voices as argument.
+ * In response, the client HAVE to recreate all {@link RequestConfig} instances in use.
+ */
+public class TextToSpeechClient {
+    private static final String TAG = TextToSpeechClient.class.getSimpleName();
+
+    private final Object mLock = new Object();
+    private final TtsEngines mEnginesHelper;
+    private final Context mContext;
+
+    // Guarded by mLock
+    private Connection mServiceConnection;
+    private final RequestCallbacks mDefaultRequestCallbacks;
+    private final ConnectionCallbacks mConnectionCallbacks;
+    private EngineStatus mEngineStatus;
+    private String mRequestedEngine;
+    private boolean mFallbackToDefault;
+    private HashMap<String, Pair<UtteranceId, RequestCallbacks>> mCallbacks;
+    // Guarded by mLock
+
+    /** Common voices parameters */
+    public static final class Params {
+        private Params() {}
+
+        /**
+         * Maximum allowed time for a single request attempt, in milliseconds, before synthesis
+         * fails (or fallback request starts, if requested using
+         * {@link #FALLBACK_VOICE_NAME}).
+         */
+        public static final String NETWORK_TIMEOUT_MS = "networkTimeoutMs";
+
+        /**
+         * Number of network request retries that are attempted in case of failure
+         */
+        public static final String NETWORK_RETRIES_COUNT = "networkRetriesCount";
+
+        /**
+         * Should synthesizer report sub-utterance progress on synthesis. Only applicable
+         * for the {@link TextToSpeechClient#queueSpeak} method.
+         */
+        public static final String TRACK_SUBUTTERANCE_PROGRESS = "trackSubutteranceProgress";
+
+        /**
+         * If a voice exposes this parameter then it supports the fallback request feature.
+         *
+         * If it is set to a valid name of some other voice ({@link VoiceInfo#getName()}) then
+         * in case of request failure (due to network problems or missing data), fallback request
+         * will be attempted. Request will be done using the voice referenced by this parameter.
+         * If it is the case, the client will be informed by a callback to the {@link
+         * RequestCallbacks#onSynthesisFallback(UtteranceId)}.
+         */
+        public static final String FALLBACK_VOICE_NAME = "fallbackVoiceName";
+
+        /**
+         * Audio parameter for specifying a linear multiplier to the speaking speed of the voice.
+         * The value is a float. Values below zero decrease speed of the synthesized speech
+         * values above one increase it. If the value of this parameter is equal to zero,
+         * then it will be replaced by a settings-configurable default before it reaches
+         * TTS service.
+         */
+        public static final String SPEECH_SPEED = "speechSpeed";
+
+        /**
+         * Audio parameter for controlling the pitch of the output. The Value is a positive float,
+         * with default of {@code 1.0}. The value is used to scale the primary frequency linearly.
+         * Lower values lower the tone of the synthesized voice, greater values increase it.
+         */
+        public static final String SPEECH_PITCH = "speechPitch";
+
+        /**
+         * Audio parameter for controlling output volume. Value is a float with scale of 0 to 1
+         */
+        public static final String AUDIO_PARAM_VOLUME = TextToSpeech.Engine.KEY_PARAM_VOLUME;
+
+        /**
+         * Audio parameter for controlling output pan.
+         * Value is a float ranging from -1 to +1 where -1 maps to a hard-left pan,
+         * 0 to center (the default behavior), and +1 to hard-right.
+         */
+        public static final String AUDIO_PARAM_PAN = TextToSpeech.Engine.KEY_PARAM_PAN;
+
+        /**
+         * Audio parameter for specifying the audio stream type to be used when speaking text
+         * or playing back a file. The value should be one of the STREAM_ constants
+         * defined in {@link AudioManager}.
+         */
+        public static final String AUDIO_PARAM_STREAM = TextToSpeech.Engine.KEY_PARAM_STREAM;
+    }
+
+    /**
+     * Result codes for TTS operations.
+     */
+    public static final class Status {
+        private Status() {}
+
+        /**
+         * Denotes a successful operation.
+         */
+        public static final int SUCCESS = 0;
+
+        /**
+         * Denotes a stop requested by a client. It's used only on the service side of the API,
+         * client should never expect to see this result code.
+         */
+        public static final int STOPPED = 100;
+
+        /**
+         * Denotes a generic failure.
+         */
+        public static final int ERROR_UNKNOWN = -1;
+
+        /**
+         * Denotes a failure of a TTS engine to synthesize the given input.
+         */
+        public static final int ERROR_SYNTHESIS = 10;
+
+        /**
+         * Denotes a failure of a TTS service.
+         */
+        public static final int ERROR_SERVICE = 11;
+
+        /**
+         * Denotes a failure related to the output (audio device or a file).
+         */
+        public static final int ERROR_OUTPUT = 12;
+
+        /**
+         * Denotes a failure caused by a network connectivity problems.
+         */
+        public static final int ERROR_NETWORK = 13;
+
+        /**
+         * Denotes a failure caused by network timeout.
+         */
+        public static final int ERROR_NETWORK_TIMEOUT = 14;
+
+        /**
+         * Denotes a failure caused by an invalid request.
+         */
+        public static final int ERROR_INVALID_REQUEST = 15;
+
+        /**
+         * Denotes a failure related to passing a non-unique utterance id.
+         */
+        public static final int ERROR_NON_UNIQUE_UTTERANCE_ID = 16;
+
+        /**
+         * Denotes a failure related to missing data. The TTS implementation may download
+         * the missing data, and if so, request will succeed in future. This error can only happen
+         * for voices with {@link VoiceInfo#FEATURE_MAY_AUTOINSTALL} feature.
+         * Note: the recommended way to avoid this error is to create a request with the fallback
+         * voice.
+         */
+        public static final int ERROR_DOWNLOADING_ADDITIONAL_DATA = 17;
+    }
+
+    /**
+     * Set of callbacks for the events related to the progress of a synthesis request
+     * through the synthesis queue. Each synthesis request is associated with a call to
+     * {@link #queueSpeak} or {@link #queueSynthesizeToFile}.
+     *
+     * The callbacks specified in this method will NOT be called on UI thread.
+     */
+    public static abstract class RequestCallbacks  {
+        /**
+         * Called after synthesis of utterance successfully starts.
+         */
+        public void onSynthesisStart(UtteranceId utteranceId) {}
+
+        /**
+         * Called after synthesis successfully finishes.
+         * @param utteranceId
+         *            Unique identifier of synthesized utterance.
+         */
+        public void onSynthesisSuccess(UtteranceId utteranceId) {}
+
+        /**
+         * Called after synthesis was stopped in middle of synthesis process.
+         * @param utteranceId
+         *            Unique identifier of synthesized utterance.
+         */
+        public void onSynthesisStop(UtteranceId utteranceId) {}
+
+        /**
+         * Called when requested synthesis failed and fallback synthesis is about to be attempted.
+         *
+         * Requires voice with available {@link TextToSpeechClient.Params#FALLBACK_VOICE_NAME}
+         * parameter, and request with this parameter enabled.
+         *
+         * This callback will be followed by callback to the {@link #onSynthesisStart},
+         * {@link #onSynthesisFailure} or {@link #onSynthesisSuccess} that depends on the
+         * fallback outcome.
+         *
+         * For more fallback feature reference, look at the
+         * {@link TextToSpeechClient.Params#FALLBACK_VOICE_NAME}.
+         *
+         * @param utteranceId
+         *            Unique identifier of synthesized utterance.
+         */
+        public void onSynthesisFallback(UtteranceId utteranceId) {}
+
+        /**
+         * Called after synthesis of utterance fails.
+         *
+         * It may be called instead or after a {@link #onSynthesisStart} callback.
+         *
+         * @param utteranceId
+         *            Unique identifier of synthesized utterance.
+         * @param errorCode
+         *            One of the values from {@link Status}.
+         */
+        public void onSynthesisFailure(UtteranceId utteranceId, int errorCode) {}
+
+        /**
+         * Called during synthesis to mark synthesis progress.
+         *
+         * Requires voice with available
+         * {@link TextToSpeechClient.Params#TRACK_SUBUTTERANCE_PROGRESS} parameter, and
+         * request with this parameter enabled.
+         *
+         * @param utteranceId
+         *            Unique identifier of synthesized utterance.
+         * @param charIndex
+         *            String index (java char offset) of recently synthesized character.
+         * @param msFromStart
+         *            Miliseconds from the start of the synthesis.
+         */
+        public void onSynthesisProgress(UtteranceId utteranceId, int charIndex,
+                int msFromStart) {}
+    }
+
+    /**
+     * Interface definition of callbacks that are called when the client is
+     * connected or disconnected from the TTS service.
+     */
+    public static interface ConnectionCallbacks {
+        /**
+         * After calling {@link TextToSpeechClient#connect()}, this method will be invoked
+         * asynchronously when the connect request has successfully completed.
+         *
+         * Clients are strongly encouraged to call {@link TextToSpeechClient#getEngineStatus()}
+         * and create {@link RequestConfig} objects used in subsequent synthesis requests.
+         */
+        public void onConnectionSuccess();
+
+        /**
+         * After calling {@link TextToSpeechClient#connect()}, this method may be invoked
+         * asynchronously when the connect request has failed to complete.
+         *
+         * It may be also invoked synchronously, from the body of
+         * {@link TextToSpeechClient#connect()} method.
+         */
+        public void onConnectionFailure();
+
+        /**
+         * Called when the connection to the service is lost. This can happen if there is a problem
+         * with the speech service (e.g. a crash or resource problem causes it to be killed by the
+         * system). When called, all requests have been canceled and no outstanding listeners will
+         * be executed. Applications should disable UI components that require the service.
+         */
+        public void onServiceDisconnected();
+
+        /**
+         * After receiving {@link #onConnectionSuccess()} callback, this method may be invoked
+         * if engine status obtained from {@link TextToSpeechClient#getEngineStatus()}) changes.
+         * It usually means that some voices were removed, changed or added.
+         *
+         * Clients are required to recreate {@link RequestConfig} objects used in subsequent
+         * synthesis requests.
+         */
+        public void onEngineStatusChange(EngineStatus newEngineStatus);
+    }
+
+    /** State of voices as provided by engine and user. */
+    public static final class EngineStatus {
+        /** All available voices. */
+        private final List<VoiceInfo> mVoices;
+
+        /** Name of the TTS engine package */
+        private final String mPackageName;
+
+        private EngineStatus(String packageName, List<VoiceInfo> voices) {
+            this.mVoices =  Collections.unmodifiableList(voices);
+            this.mPackageName = packageName;
+        }
+
+        /**
+         * Get an immutable list of all Voices exposed by the TTS engine.
+         */
+        public List<VoiceInfo> getVoices() {
+            return mVoices;
+        }
+
+        /**
+         * Get name of the TTS engine package currently in use.
+         */
+        public String getEnginePackage() {
+            return mPackageName;
+        }
+    }
+
+    /** Unique synthesis request identifier. */
+    public static class UtteranceId {
+        /** Unique identifier */
+        private final int id;
+
+        /** Unique identifier generator */
+        private static final AtomicInteger ID_GENERATOR = new AtomicInteger();
+
+        /**
+         * Create new, unique UtteranceId instance.
+         */
+        public UtteranceId() {
+            id = ID_GENERATOR.getAndIncrement();
+        }
+
+        /**
+         * Returns a unique string associated with an instance of this object.
+         *
+         * This string will be used to identify the synthesis request/utterance inside the
+         * TTS service.
+         */
+        public final String toUniqueString() {
+            return "UID" + id;
+        }
+    }
+
+    /**
+     * Create TextToSpeech service client.
+     *
+     * Will connect to the default TTS service. In order to be usable, {@link #connect()} need
+     * to be called first and successful connection callback need to be received.
+     *
+     * @param context
+     *            The context this instance is running in.
+     * @param engine
+     *            Package name of requested TTS engine. If it's null, then default engine will
+     *            be selected regardless of {@code fallbackToDefaultEngine} parameter value.
+     * @param fallbackToDefaultEngine
+     *            If requested engine is not available, should we fallback to the default engine?
+     * @param defaultRequestCallbacks
+     *            Default request callbacks, it will be used for all synthesis requests without
+     *            supplied RequestCallbacks instance. Can't be null.
+     * @param connectionCallbacks
+     *            Callbacks for connecting and disconnecting from the service. Can't be null.
+     */
+    public TextToSpeechClient(Context context,
+            String engine, boolean fallbackToDefaultEngine,
+            RequestCallbacks defaultRequestCallbacks,
+            ConnectionCallbacks connectionCallbacks) {
+        if (context == null)
+            throw new IllegalArgumentException("context can't be null");
+        if (defaultRequestCallbacks == null)
+            throw new IllegalArgumentException("defaultRequestCallbacks can't be null");
+        if (connectionCallbacks == null)
+            throw new IllegalArgumentException("connectionCallbacks can't be null");
+        mContext = context;
+        mEnginesHelper = new TtsEngines(mContext);
+        mCallbacks = new HashMap<String, Pair<UtteranceId, RequestCallbacks>>();
+        mDefaultRequestCallbacks = defaultRequestCallbacks;
+        mConnectionCallbacks = connectionCallbacks;
+
+        mRequestedEngine = engine;
+        mFallbackToDefault = fallbackToDefaultEngine;
+    }
+
+    /**
+     * Create TextToSpeech service client. Will connect to the default TTS
+     * service. In order to be usable, {@link #connect()} need to be called
+     * first and successful connection callback need to be received.
+     *
+     * @param context Context this instance is running in.
+     * @param defaultRequestCallbacks Default request callbacks, it
+     *            will be used for all synthesis requests without supplied
+     *            RequestCallbacks instance. Can't be null.
+     * @param connectionCallbacks Callbacks for connecting and disconnecting
+     *            from the service. Can't be null.
+     */
+    public TextToSpeechClient(Context context, RequestCallbacks defaultRequestCallbacks,
+            ConnectionCallbacks connectionCallbacks) {
+        this(context, null, true, defaultRequestCallbacks, connectionCallbacks);
+    }
+
+
+    private boolean initTts(String requestedEngine, boolean fallbackToDefaultEngine) {
+        // Step 1: Try connecting to the engine that was requested.
+        if (requestedEngine != null) {
+            if (mEnginesHelper.isEngineInstalled(requestedEngine)) {
+                if ((mServiceConnection = connectToEngine(requestedEngine)) != null) {
+                    return true;
+                } else if (!fallbackToDefaultEngine) {
+                    Log.w(TAG, "Couldn't connect to requested engine: " + requestedEngine);
+                    return false;
+                }
+            } else if (!fallbackToDefaultEngine) {
+                Log.w(TAG, "Requested engine not installed: " + requestedEngine);
+                return false;
+            }
+        }
+
+        // Step 2: Try connecting to the user's default engine.
+        final String defaultEngine = mEnginesHelper.getDefaultEngine();
+        if (defaultEngine != null && !defaultEngine.equals(requestedEngine)) {
+            if ((mServiceConnection = connectToEngine(defaultEngine)) != null) {
+                return true;
+            }
+        }
+
+        // Step 3: Try connecting to the highest ranked engine in the
+        // system.
+        final String highestRanked = mEnginesHelper.getHighestRankedEngineName();
+        if (highestRanked != null && !highestRanked.equals(requestedEngine) &&
+                !highestRanked.equals(defaultEngine)) {
+            if ((mServiceConnection = connectToEngine(highestRanked)) != null) {
+                return true;
+            }
+        }
+
+        Log.w(TAG, "Couldn't find working TTS engine");
+        return false;
+    }
+
+    private Connection connectToEngine(String engine) {
+        Connection connection = new Connection(engine);
+        Intent intent = new Intent(TextToSpeech.Engine.INTENT_ACTION_TTS_SERVICE);
+        intent.setPackage(engine);
+        boolean bound = mContext.bindService(intent, connection, Context.BIND_AUTO_CREATE);
+        if (!bound) {
+            Log.e(TAG, "Failed to bind to " + engine);
+            return null;
+        } else {
+            Log.i(TAG, "Successfully bound to " + engine);
+            return connection;
+        }
+    }
+
+
+    /**
+     * Connects the client to TTS service. This method returns immediately, and connects to the
+     * service in the background.
+     *
+     * After connection initializes successfully, {@link ConnectionCallbacks#onConnectionSuccess()}
+     * is called. On a failure {@link ConnectionCallbacks#onConnectionFailure} is called.
+     *
+     * Both of those callback may be called asynchronously on the main thread,
+     * {@link ConnectionCallbacks#onConnectionFailure} may be called synchronously, before
+     * this method returns.
+     */
+    public void connect() {
+        synchronized (mLock) {
+            if (mServiceConnection != null) {
+                return;
+            }
+            if(!initTts(mRequestedEngine, mFallbackToDefault)) {
+                mConnectionCallbacks.onConnectionFailure();
+            }
+        }
+    }
+
+    /**
+     * Checks if the client is currently connected to the service, so that
+     * requests to other methods will succeed.
+     */
+    public boolean isConnected() {
+        synchronized (mLock) {
+            return mServiceConnection != null && mServiceConnection.isEstablished();
+        }
+    }
+
+    /**
+     * Closes the connection to TextToSpeech service. No calls can be made on this object after
+     * calling this method.
+     * It is good practice to call this method in the onDestroy() method of an Activity
+     * so the TextToSpeech engine can be cleanly stopped.
+     */
+    public void disconnect() {
+        synchronized (mLock) {
+            if (mServiceConnection != null) {
+                mServiceConnection.disconnect();
+                mServiceConnection = null;
+                mCallbacks.clear();
+            }
+        }
+    }
+
+    /**
+     * Register callback.
+     *
+     * @param utteranceId Non-null UtteranceId instance.
+     * @param callback Non-null callbacks for the request
+     * @return Status.SUCCESS or error code in case of invalid arguments.
+     */
+    private int addCallback(UtteranceId utteranceId, RequestCallbacks callback) {
+        synchronized (mLock) {
+            if (utteranceId == null || callback == null) {
+                return Status.ERROR_INVALID_REQUEST;
+            }
+            if (mCallbacks.put(utteranceId.toUniqueString(),
+                    new Pair<UtteranceId, RequestCallbacks>(utteranceId, callback)) != null) {
+                return Status.ERROR_NON_UNIQUE_UTTERANCE_ID;
+            }
+            return Status.SUCCESS;
+        }
+    }
+
+    /**
+     * Remove and return callback.
+     *
+     * @param utteranceIdStr Unique string obtained from {@link UtteranceId#toUniqueString}.
+     */
+    private Pair<UtteranceId, RequestCallbacks> removeCallback(String utteranceIdStr) {
+        synchronized (mLock) {
+            return mCallbacks.remove(utteranceIdStr);
+        }
+    }
+
+    /**
+     * Get callback and utterance id.
+     *
+     * @param utteranceIdStr Unique string obtained from {@link UtteranceId#toUniqueString}.
+     */
+    private Pair<UtteranceId, RequestCallbacks> getCallback(String utteranceIdStr) {
+        synchronized (mLock) {
+            return mCallbacks.get(utteranceIdStr);
+        }
+    }
+
+    /**
+     * Remove callback and call {@link RequestCallbacks#onSynthesisFailure} with passed
+     * error code.
+     *
+     * @param utteranceIdStr Unique string obtained from {@link UtteranceId#toUniqueString}.
+     * @param errorCode argument to {@link RequestCallbacks#onSynthesisFailure} call.
+     */
+    private void removeCallbackAndErr(String utteranceIdStr, int errorCode) {
+        synchronized (mLock) {
+            Pair<UtteranceId, RequestCallbacks> c = mCallbacks.remove(utteranceIdStr);
+            c.second.onSynthesisFailure(c.first, errorCode);
+        }
+    }
+
+    /**
+     * Retrieve TTS engine status {@link EngineStatus}. Requires connected client.
+     */
+    public EngineStatus getEngineStatus() {
+        synchronized (mLock) {
+            return mEngineStatus;
+        }
+    }
+
+    /**
+     * Query TTS engine about available voices and defaults.
+     *
+     * @return EngineStatus is connected or null if client is disconnected.
+     */
+    private EngineStatus requestEngineStatus(ITextToSpeechService service)
+            throws RemoteException {
+        List<VoiceInfo> voices = service.getVoicesInfo();
+        if (voices == null) {
+            Log.e(TAG, "Requested engine doesn't support TTS V2 API");
+            return null;
+        }
+
+        return new EngineStatus(mServiceConnection.getEngineName(), voices);
+    }
+
+    private class Connection implements ServiceConnection {
+        private final String mEngineName;
+
+        private ITextToSpeechService mService;
+
+        private boolean mEstablished;
+
+        private PrepareConnectionAsyncTask mSetupConnectionAsyncTask;
+
+        public Connection(String engineName) {
+            this.mEngineName = engineName;
+        }
+
+        private final ITextToSpeechCallback.Stub mCallback = new ITextToSpeechCallback.Stub() {
+
+            @Override
+            public void onStart(String utteranceIdStr) {
+                synchronized (mLock) {
+                    Pair<UtteranceId, RequestCallbacks> callbacks = getCallback(utteranceIdStr);
+                    callbacks.second.onSynthesisStart(callbacks.first);
+                }
+            }
+
+            public void onStop(String utteranceIdStr) {
+                synchronized (mLock) {
+                    Pair<UtteranceId, RequestCallbacks> callbacks = removeCallback(utteranceIdStr);
+                    callbacks.second.onSynthesisStop(callbacks.first);
+                }
+            }
+
+            @Override
+            public void onSuccess(String utteranceIdStr) {
+                synchronized (mLock) {
+                    Pair<UtteranceId, RequestCallbacks> callbacks = removeCallback(utteranceIdStr);
+                    callbacks.second.onSynthesisSuccess(callbacks.first);
+                }
+            }
+
+            public void onFallback(String utteranceIdStr) {
+                synchronized (mLock) {
+                    Pair<UtteranceId, RequestCallbacks> callbacks = getCallback(
+                            utteranceIdStr);
+                    callbacks.second.onSynthesisFallback(callbacks.first);
+                }
+            };
+
+            @Override
+            public void onError(String utteranceIdStr, int errorCode) {
+                removeCallbackAndErr(utteranceIdStr, errorCode);
+            }
+
+            @Override
+            public void onVoicesInfoChange(List<VoiceInfo> voicesInfo) {
+                synchronized (mLock) {
+                    mEngineStatus = new EngineStatus(mServiceConnection.getEngineName(),
+                            voicesInfo);
+                    mConnectionCallbacks.onEngineStatusChange(mEngineStatus);
+                }
+            }
+        };
+
+        private class PrepareConnectionAsyncTask extends AsyncTask<Void, Void, EngineStatus> {
+
+            private final ComponentName mName;
+
+            public PrepareConnectionAsyncTask(ComponentName name) {
+                mName = name;
+            }
+
+            @Override
+            protected EngineStatus doInBackground(Void... params) {
+                synchronized(mLock) {
+                    if (isCancelled()) {
+                        return null;
+                    }
+                    try {
+                        mService.setCallback(getCallerIdentity(), mCallback);
+                        return requestEngineStatus(mService);
+                    } catch (RemoteException re) {
+                        Log.e(TAG, "Error setting up the TTS service");
+                        return null;
+                    }
+                }
+            }
+
+            @Override
+            protected void onPostExecute(EngineStatus result) {
+                synchronized(mLock) {
+                    if (mSetupConnectionAsyncTask == this) {
+                        mSetupConnectionAsyncTask = null;
+                    }
+                    if (result == null) {
+                        Log.e(TAG, "Setup task failed");
+                        disconnect();
+                        mConnectionCallbacks.onConnectionFailure();
+                        return;
+                    }
+
+                    mEngineStatus = result;
+                    mEstablished = true;
+                }
+                mConnectionCallbacks.onConnectionSuccess();
+            }
+        }
+
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            Log.i(TAG, "Connected to " + name);
+
+            synchronized(mLock) {
+                mEstablished = false;
+                mService = ITextToSpeechService.Stub.asInterface(service);
+                startSetupConnectionTask(name);
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.i(TAG, "Asked to disconnect from " + name);
+
+            synchronized(mLock) {
+                stopSetupConnectionTask();
+            }
+            mConnectionCallbacks.onServiceDisconnected();
+        }
+
+        private void startSetupConnectionTask(ComponentName name) {
+            stopSetupConnectionTask();
+            mSetupConnectionAsyncTask = new PrepareConnectionAsyncTask(name);
+            mSetupConnectionAsyncTask.execute();
+        }
+
+        private boolean stopSetupConnectionTask() {
+            boolean result = false;
+            if (mSetupConnectionAsyncTask != null) {
+                result = mSetupConnectionAsyncTask.cancel(false);
+                mSetupConnectionAsyncTask = null;
+            }
+            return result;
+        }
+
+        IBinder getCallerIdentity() {
+            return mCallback;
+        }
+
+        boolean isEstablished() {
+            return mService != null && mEstablished;
+        }
+
+        boolean runAction(Action action) {
+            synchronized (mLock) {
+                try {
+                    action.run(mService);
+                    return true;
+                } catch (Exception ex) {
+                    Log.e(TAG, action.getName() + " failed", ex);
+                    disconnect();
+                    return false;
+                }
+            }
+        }
+
+        void disconnect() {
+            mContext.unbindService(this);
+            stopSetupConnectionTask();
+            mService = null;
+            mEstablished = false;
+            if (mServiceConnection == this) {
+                mServiceConnection = null;
+            }
+        }
+
+        String getEngineName() {
+            return mEngineName;
+        }
+    }
+
+    private abstract class Action {
+        private final String mName;
+
+        public Action(String name) {
+            mName = name;
+        }
+
+        public String getName() {return mName;}
+        abstract void run(ITextToSpeechService service) throws RemoteException;
+    }
+
+    private IBinder getCallerIdentity() {
+        if (mServiceConnection != null) {
+            return mServiceConnection.getCallerIdentity();
+        }
+        return null;
+    }
+
+    private boolean runAction(Action action) {
+        synchronized (mLock) {
+            if (mServiceConnection == null) {
+                return false;
+            }
+            if (!mServiceConnection.isEstablished()) {
+                return false;
+            }
+            mServiceConnection.runAction(action);
+            return true;
+        }
+    }
+
+    private static final String ACTION_STOP_NAME = "stop";
+
+    /**
+     * Interrupts the current utterance spoken (whether played or rendered to file) and discards
+     * other utterances in the queue.
+     */
+    public void stop() {
+        runAction(new Action(ACTION_STOP_NAME) {
+            @Override
+            public void run(ITextToSpeechService service) throws RemoteException {
+               if (service.stop(getCallerIdentity()) != Status.SUCCESS) {
+                   Log.e(TAG, "Stop failed");
+               }
+               mCallbacks.clear();
+            }
+        });
+    }
+
+    private static final String ACTION_QUEUE_SPEAK_NAME = "queueSpeak";
+
+    /**
+     * Speaks the string using the specified queuing strategy using current
+     * voice. This method is asynchronous, i.e. the method just adds the request
+     * to the queue of TTS requests and then returns. The synthesis might not
+     * have finished (or even started!) at the time when this method returns.
+     *
+     * @param utterance The string of text to be spoken. No longer than
+     *            1000 characters.
+     * @param utteranceId Unique identificator used to track the synthesis progress
+     *            in {@link RequestCallbacks}.
+     * @param config Synthesis request configuration. Can't be null. Has to contain a
+     *            voice.
+     * @param callbacks Synthesis request callbacks. If null, default request
+     *            callbacks object will be used.
+     */
+    public void queueSpeak(final String utterance, final UtteranceId utteranceId,
+            final RequestConfig config,
+            final RequestCallbacks callbacks) {
+        runAction(new Action(ACTION_QUEUE_SPEAK_NAME) {
+            @Override
+            public void run(ITextToSpeechService service) throws RemoteException {
+                RequestCallbacks c = mDefaultRequestCallbacks;
+                if (callbacks != null) {
+                    c = callbacks;
+                }
+                int addCallbackStatus = addCallback(utteranceId, c);
+                if (addCallbackStatus != Status.SUCCESS) {
+                    c.onSynthesisFailure(utteranceId, Status.ERROR_INVALID_REQUEST);
+                    return;
+                }
+
+                int queueResult = service.speakV2(
+                        getCallerIdentity(),
+                        new SynthesisRequestV2(utterance, utteranceId.toUniqueString(), config));
+                if (queueResult != Status.SUCCESS) {
+                    removeCallbackAndErr(utteranceId.toUniqueString(), queueResult);
+                }
+            }
+        });
+    }
+
+    private static final String ACTION_QUEUE_SYNTHESIZE_TO_FILE = "queueSynthesizeToFile";
+
+    /**
+     * Synthesizes the given text to a file using the specified parameters. This
+     * method is asynchronous, i.e. the method just adds the request to the
+     * queue of TTS requests and then returns. The synthesis might not have
+     * finished (or even started!) at the time when this method returns.
+     *
+     * @param utterance The text that should be synthesized. No longer than
+     *            1000 characters.
+     * @param utteranceId Unique identificator used to track the synthesis progress
+     *            in {@link RequestCallbacks}.
+     * @param outputFile File to write the generated audio data to.
+     * @param config Synthesis request configuration. Can't be null. Have to contain a
+     *            voice.
+     * @param callbacks Synthesis request callbacks. If null, default request
+     *            callbacks object will be used.
+     */
+    public void queueSynthesizeToFile(final String utterance, final UtteranceId utteranceId,
+            final File outputFile, final RequestConfig config,
+            final RequestCallbacks callbacks) {
+        runAction(new Action(ACTION_QUEUE_SYNTHESIZE_TO_FILE) {
+            @Override
+            public void run(ITextToSpeechService service) throws RemoteException {
+                RequestCallbacks c = mDefaultRequestCallbacks;
+                if (callbacks != null) {
+                    c = callbacks;
+                }
+                int addCallbackStatus = addCallback(utteranceId, c);
+                if (addCallbackStatus != Status.SUCCESS) {
+                    c.onSynthesisFailure(utteranceId, Status.ERROR_INVALID_REQUEST);
+                    return;
+                }
+
+                ParcelFileDescriptor fileDescriptor = null;
+                try {
+                    if (outputFile.exists() && !outputFile.canWrite()) {
+                        Log.e(TAG, "No permissions to write to " + outputFile);
+                        removeCallbackAndErr(utteranceId.toUniqueString(), Status.ERROR_OUTPUT);
+                        return;
+                    }
+                    fileDescriptor = ParcelFileDescriptor.open(outputFile,
+                            ParcelFileDescriptor.MODE_WRITE_ONLY |
+                            ParcelFileDescriptor.MODE_CREATE |
+                            ParcelFileDescriptor.MODE_TRUNCATE);
+
+                    int queueResult = service.synthesizeToFileDescriptorV2(getCallerIdentity(),
+                            fileDescriptor,
+                            new SynthesisRequestV2(utterance, utteranceId.toUniqueString(),
+                                    config));
+                    fileDescriptor.close();
+                    if (queueResult != Status.SUCCESS) {
+                        removeCallbackAndErr(utteranceId.toUniqueString(), queueResult);
+                    }
+                } catch (FileNotFoundException e) {
+                    Log.e(TAG, "Opening file " + outputFile + " failed", e);
+                    removeCallbackAndErr(utteranceId.toUniqueString(), Status.ERROR_OUTPUT);
+                } catch (IOException e) {
+                    Log.e(TAG, "Closing file " + outputFile + " failed", e);
+                    removeCallbackAndErr(utteranceId.toUniqueString(), Status.ERROR_OUTPUT);
+                }
+            }
+        });
+    }
+
+    private static final String ACTION_QUEUE_SILENCE_NAME = "queueSilence";
+
+    /**
+     * Plays silence for the specified amount of time. This method is asynchronous,
+     * i.e. the method just adds the request to the queue of TTS requests and then
+     * returns. The synthesis might not have finished (or even started!) at the time
+     * when this method returns.
+     *
+     * @param durationInMs The duration of the silence in milliseconds.
+     * @param utteranceId Unique identificator used to track the synthesis progress
+     *            in {@link RequestCallbacks}.
+     * @param callbacks Synthesis request callbacks. If null, default request
+     *            callbacks object will be used.
+     */
+    public void queueSilence(final long durationInMs, final UtteranceId utteranceId,
+            final RequestCallbacks callbacks) {
+        runAction(new Action(ACTION_QUEUE_SILENCE_NAME) {
+            @Override
+            public void run(ITextToSpeechService service) throws RemoteException {
+                RequestCallbacks c = mDefaultRequestCallbacks;
+                if (callbacks != null) {
+                    c = callbacks;
+                }
+                int addCallbackStatus = addCallback(utteranceId, c);
+                if (addCallbackStatus != Status.SUCCESS) {
+                    c.onSynthesisFailure(utteranceId, Status.ERROR_INVALID_REQUEST);
+                }
+
+                int queueResult = service.playSilence(getCallerIdentity(), durationInMs,
+                        TextToSpeech.QUEUE_ADD, utteranceId.toUniqueString());
+
+                if (queueResult != Status.SUCCESS) {
+                    removeCallbackAndErr(utteranceId.toUniqueString(), queueResult);
+                }
+            }
+        });
+    }
+
+
+    private static final String ACTION_QUEUE_AUDIO_NAME = "queueAudio";
+
+    /**
+     * Plays the audio resource using the specified parameters.
+     * This method is asynchronous, i.e. the method just adds the request to the queue of TTS
+     * requests and then returns. The synthesis might not have finished (or even started!) at the
+     * time when this method returns.
+     *
+     * @param audioUrl The audio resource that should be played
+     * @param utteranceId Unique identificator used to track synthesis progress
+     *            in {@link RequestCallbacks}.
+     * @param config Synthesis request configuration. Can't be null. Doesn't have to contain a
+     *            voice (only system parameters are used).
+     * @param callbacks Synthesis request callbacks. If null, default request
+     *            callbacks object will be used.
+     */
+    public void queueAudio(final Uri audioUrl, final UtteranceId utteranceId,
+            final RequestConfig config, final RequestCallbacks callbacks) {
+        runAction(new Action(ACTION_QUEUE_AUDIO_NAME) {
+            @Override
+            public void run(ITextToSpeechService service) throws RemoteException {
+                RequestCallbacks c = mDefaultRequestCallbacks;
+                if (callbacks != null) {
+                    c = callbacks;
+                }
+                int addCallbackStatus = addCallback(utteranceId, c);
+                if (addCallbackStatus != Status.SUCCESS) {
+                    c.onSynthesisFailure(utteranceId, Status.ERROR_INVALID_REQUEST);
+                }
+
+                int queueResult = service.playAudioV2(getCallerIdentity(), audioUrl,
+                        utteranceId.toUniqueString(), config.getVoiceParams());
+
+                if (queueResult != Status.SUCCESS) {
+                    removeCallbackAndErr(utteranceId.toUniqueString(), queueResult);
+                }
+            }
+        });
+    }
+}
diff --git a/core/java/android/speech/tts/TextToSpeechService.java b/core/java/android/speech/tts/TextToSpeechService.java
index 575855c..d7c51fc 100644
--- a/core/java/android/speech/tts/TextToSpeechService.java
+++ b/core/java/android/speech/tts/TextToSpeechService.java
@@ -34,26 +34,27 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import java.io.FileDescriptor;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.MissingResourceException;
 import java.util.Set;
 
 
 /**
  * Abstract base class for TTS engine implementations. The following methods
- * need to be implemented.
- *
+ * need to be implemented for V1 API ({@link TextToSpeech}) implementation.
  * <ul>
- *   <li>{@link #onIsLanguageAvailable}</li>
- *   <li>{@link #onLoadLanguage}</li>
- *   <li>{@link #onGetLanguage}</li>
- *   <li>{@link #onSynthesizeText}</li>
- *   <li>{@link #onStop}</li>
+ * <li>{@link #onIsLanguageAvailable}</li>
+ * <li>{@link #onLoadLanguage}</li>
+ * <li>{@link #onGetLanguage}</li>
+ * <li>{@link #onSynthesizeText}</li>
+ * <li>{@link #onStop}</li>
  * </ul>
- *
  * The first three deal primarily with language management, and are used to
  * query the engine for it's support for a given language and indicate to it
  * that requests in a given language are imminent.
@@ -61,22 +62,44 @@
  * {@link #onSynthesizeText} is central to the engine implementation. The
  * implementation should synthesize text as per the request parameters and
  * return synthesized data via the supplied callback. This class and its helpers
- * will then consume that data, which might mean queueing it for playback or writing
- * it to a file or similar. All calls to this method will be on a single
- * thread, which will be different from the main thread of the service. Synthesis
- * must be synchronous which means the engine must NOT hold on the callback or call
- * any methods on it after the method returns
+ * will then consume that data, which might mean queuing it for playback or writing
+ * it to a file or similar. All calls to this method will be on a single thread,
+ * which will be different from the main thread of the service. Synthesis must be
+ * synchronous which means the engine must NOT hold on to the callback or call any
+ * methods on it after the method returns.
  *
- * {@link #onStop} tells the engine that it should stop all ongoing synthesis, if
- * any. Any pending data from the current synthesis will be discarded.
+ * {@link #onStop} tells the engine that it should stop
+ * all ongoing synthesis, if any. Any pending data from the current synthesis
+ * will be discarded.
  *
+ * {@link #onGetLanguage} is not required as of JELLYBEAN_MR2 (API 18) and later, it is only
+ * called on earlier versions of Android.
+ * <p>
+ * In order to fully support the V2 API ({@link TextToSpeechClient}),
+ * these methods must be implemented:
+ * <ul>
+ * <li>{@link #onSynthesizeTextV2}</li>
+ * <li>{@link #checkVoicesInfo}</li>
+ * <li>{@link #onVoicesInfoChange}</li>
+ * <li>{@link #implementsV2API}</li>
+ * </ul>
+ * In addition {@link #implementsV2API} has to return true.
+ * <p>
+ * If the service does not implement these methods and {@link #implementsV2API} returns false,
+ * then the V2 API will be provided by converting V2 requests ({@link #onSynthesizeTextV2})
+ * to V1 requests ({@link #onSynthesizeText}). On service setup, all of the available device
+ * locales will be fed to {@link #onIsLanguageAvailable} to check if they are supported.
+ * If they are, embedded and/or network voices will be created depending on the result of
+ * {@link #onGetFeaturesForLanguage}.
+ * <p>
+ * Note that a V2 service will still receive requests from V1 clients and has to implement all
+ * of the V1 API methods.
  */
 public abstract class TextToSpeechService extends Service {
 
     private static final boolean DBG = false;
     private static final String TAG = "TextToSpeechService";
 
-
     private static final String SYNTH_THREAD_NAME = "SynthThread";
 
     private SynthHandler mSynthHandler;
@@ -89,6 +112,11 @@
     private CallbackMap mCallbacks;
     private String mPackageName;
 
+    private final Object mVoicesInfoLock = new Object();
+
+    private List<VoiceInfo> mVoicesInfoList;
+    private Map<String, VoiceInfo> mVoicesInfoLookup;
+
     @Override
     public void onCreate() {
         if (DBG) Log.d(TAG, "onCreate()");
@@ -108,6 +136,7 @@
         mPackageName = getApplicationInfo().packageName;
 
         String[] defaultLocale = getSettingsLocale();
+
         // Load default language
         onLoadLanguage(defaultLocale[0], defaultLocale[1], defaultLocale[2]);
     }
@@ -148,6 +177,9 @@
     /**
      * Returns the language, country and variant currently being used by the TTS engine.
      *
+     * This method will be called only on Android 4.2 and before (API <= 17). In later versions
+     * this method is not called by the Android TTS framework.
+     *
      * Can be called on multiple threads.
      *
      * @return A 3-element array, containing language (ISO 3-letter code),
@@ -191,21 +223,159 @@
     protected abstract void onStop();
 
     /**
-     * Tells the service to synthesize speech from the given text. This method should
-     * block until the synthesis is finished.
-     *
-     * Called on the synthesis thread.
+     * Tells the service to synthesize speech from the given text. This method
+     * should block until the synthesis is finished. Used for requests from V1
+     * clients ({@link android.speech.tts.TextToSpeech}). Called on the synthesis
+     * thread.
      *
      * @param request The synthesis request.
-     * @param callback The callback the the engine must use to make data available for
-     *         playback or for writing to a file.
+     * @param callback The callback that the engine must use to make data
+     *            available for playback or for writing to a file.
      */
     protected abstract void onSynthesizeText(SynthesisRequest request,
             SynthesisCallback callback);
 
     /**
+     * Check the available voices data and return an immutable list of the available voices.
+     * The output of this method will be passed to clients to allow them to configure synthesis
+     * requests.
+     *
+     * Can be called on multiple threads.
+     *
+     * The result of this method will be saved and served to all TTS clients. If a TTS service wants
+     * to update the set of available voices, it should call the {@link #forceVoicesInfoCheck()}
+     * method.
+     */
+    protected List<VoiceInfo> checkVoicesInfo() {
+        if (implementsV2API()) {
+            throw new IllegalStateException("For proper V2 API implementation this method has to" +
+                    "  be implemented");
+        }
+
+        // V2 to V1 interface adapter. This allows using V2 client interface on V1-only services.
+        Bundle defaultParams = new Bundle();
+        defaultParams.putFloat(TextToSpeechClient.Params.SPEECH_PITCH, 1.0f);
+        defaultParams.putFloat(TextToSpeechClient.Params.SPEECH_SPEED, -1.0f);
+
+        // Enumerate all locales and check if they are available
+        ArrayList<VoiceInfo> voicesInfo = new ArrayList<VoiceInfo>();
+        int id = 0;
+        for (Locale locale : Locale.getAvailableLocales()) {
+            int expectedStatus = TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE;
+            if (locale.getVariant().isEmpty()) {
+                if (locale.getCountry().isEmpty()) {
+                    expectedStatus = TextToSpeech.LANG_AVAILABLE;
+                } else {
+                    expectedStatus = TextToSpeech.LANG_COUNTRY_AVAILABLE;
+                }
+            }
+            try {
+                int localeStatus = onIsLanguageAvailable(locale.getISO3Language(),
+                        locale.getISO3Country(), locale.getVariant());
+                if (localeStatus != expectedStatus) {
+                    continue;
+                }
+            } catch (MissingResourceException e) {
+                // Ignore locale without iso 3 codes
+                continue;
+            }
+
+            Set<String> features = onGetFeaturesForLanguage(locale.getISO3Language(),
+                        locale.getISO3Country(), locale.getVariant());
+
+            VoiceInfo.Builder builder = new VoiceInfo.Builder();
+            builder.setLatency(VoiceInfo.LATENCY_NORMAL);
+            builder.setQuality(VoiceInfo.QUALITY_NORMAL);
+            builder.setLocale(locale);
+            builder.setParamsWithDefaults(defaultParams);
+
+            if (features == null || features.contains(
+                    TextToSpeech.Engine.KEY_FEATURE_EMBEDDED_SYNTHESIS)) {
+                builder.setName(locale.toString() + "-embedded");
+                builder.setRequiresNetworkConnection(false);
+                voicesInfo.add(builder.build());
+            }
+
+            if (features != null && features.contains(
+                    TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS)) {
+                builder.setName(locale.toString() + "-network");
+                builder.setRequiresNetworkConnection(true);
+                voicesInfo.add(builder.build());
+            }
+        }
+
+        return voicesInfo;
+    }
+
+    /**
+     * Tells the synthesis thread that it should reload voice data.
+     * There's a high probability that the underlying set of available voice data has changed.
+     * Called only on the synthesis thread.
+     */
+    protected void onVoicesInfoChange() {
+
+    }
+
+    /**
+     * Tells the service to synthesize speech from the given text. This method
+     * should block until the synthesis is finished. Used for requests from V2
+     * client {@link android.speech.tts.TextToSpeechClient}. Called on the
+     * synthesis thread.
+     *
+     * @param request The synthesis request.
+     * @param callback The callback the the engine must use to make data
+     *            available for playback or for writing to a file.
+     */
+    protected void onSynthesizeTextV2(SynthesisRequestV2 request,
+            VoiceInfo selectedVoice,
+            SynthesisCallback callback) {
+        if (implementsV2API()) {
+            throw new IllegalStateException("For proper V2 API implementation this method has to" +
+                    "  be implemented");
+        }
+
+        // Convert to V1 params
+        int speechRate = (int) (request.getVoiceParams().getFloat(
+                TextToSpeechClient.Params.SPEECH_SPEED, 1.0f) * 100);
+        int speechPitch = (int) (request.getVoiceParams().getFloat(
+                TextToSpeechClient.Params.SPEECH_PITCH, 1.0f) * 100);
+
+        // Provide adapter to V1 API
+        Bundle params = new Bundle();
+        params.putString(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, request.getUtteranceId());
+        params.putInt(TextToSpeech.Engine.KEY_PARAM_PITCH, speechPitch);
+        params.putInt(TextToSpeech.Engine.KEY_PARAM_RATE, speechRate);
+        if (selectedVoice.getRequiresNetworkConnection()) {
+            params.putString(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS, "true");
+        } else {
+            params.putString(TextToSpeech.Engine.KEY_FEATURE_EMBEDDED_SYNTHESIS, "true");
+        }
+
+        // Build V1 request
+        SynthesisRequest requestV1 = new SynthesisRequest(request.getText(), params);
+        Locale locale = selectedVoice.getLocale();
+        requestV1.setLanguage(locale.getISO3Language(), locale.getISO3Country(),
+                locale.getVariant());
+        requestV1.setSpeechRate(speechRate);
+        requestV1.setPitch(speechPitch);
+
+        // Synthesize using V1 interface
+        onSynthesizeText(requestV1, callback);
+    }
+
+    /**
+     * If true, this service implements proper V2 TTS API service. If it's false,
+     * V2 API will be provided through adapter.
+     */
+    protected boolean implementsV2API() {
+        return false;
+    }
+
+    /**
      * Queries the service for a set of features supported for a given language.
      *
+     * Can be called on multiple threads.
+     *
      * @param lang ISO-3 language code.
      * @param country ISO-3 country code. May be empty or null.
      * @param variant Language variant. May be empty or null.
@@ -215,6 +385,69 @@
         return null;
     }
 
+    private List<VoiceInfo> getVoicesInfo() {
+        synchronized (mVoicesInfoLock) {
+            if (mVoicesInfoList == null) {
+                // Get voices. Defensive copy to make sure TTS engine won't alter the list.
+                mVoicesInfoList = new ArrayList<VoiceInfo>(checkVoicesInfo());
+                // Build lookup map
+                mVoicesInfoLookup = new HashMap<String, VoiceInfo>((int) (
+                        mVoicesInfoList.size()*1.5f));
+                for (VoiceInfo voiceInfo : mVoicesInfoList) {
+                    VoiceInfo prev = mVoicesInfoLookup.put(voiceInfo.getName(), voiceInfo);
+                    if (prev != null) {
+                        Log.e(TAG, "Duplicate name (" + voiceInfo.getName() + ") of the voice ");
+                    }
+                }
+            }
+            return mVoicesInfoList;
+        }
+    }
+
+    public VoiceInfo getVoicesInfoWithName(String name) {
+        synchronized (mVoicesInfoLock) {
+            if (mVoicesInfoLookup != null) {
+                return mVoicesInfoLookup.get(name);
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Force TTS service to reevaluate the set of available languages. Will result in
+     * a call to {@link #checkVoicesInfo()} on the same thread, {@link #onVoicesInfoChange}
+     * on the synthesizer thread and callback to
+     * {@link TextToSpeechClient.ConnectionCallbacks#onEngineStatusChange} of all connected
+     * TTS clients.
+     *
+     * Use this method only if you know that set of available languages changed.
+     *
+     * Can be called on multiple threads.
+     */
+    public void forceVoicesInfoCheck() {
+        synchronized (mVoicesInfoLock) {
+            List<VoiceInfo> old = mVoicesInfoList;
+
+            mVoicesInfoList = null; // Force recreation of voices info list
+            getVoicesInfo();
+
+            if (mVoicesInfoList == null) {
+                throw new IllegalStateException("This method applies only to services " +
+                        "supporting V2 TTS API. This services doesn't support V2 TTS API.");
+            }
+
+            if (old != null) {
+                // Flush all existing items, and inform synthesis thread about the change.
+                mSynthHandler.enqueueSpeechItem(TextToSpeech.QUEUE_FLUSH,
+                        new VoicesInfoChangeItem());
+                // TODO: Handle items that may be added to queue after SynthesizerRestartItem
+                // but before client reconnection
+                // Disconnect all of them
+                mCallbacks.dispatchVoicesInfoChange(mVoicesInfoList);
+            }
+        }
+    }
+
     private int getDefaultSpeechRate() {
         return getSecureSettingInt(Settings.Secure.TTS_DEFAULT_RATE, Engine.DEFAULT_RATE);
     }
@@ -317,7 +550,8 @@
 
             if (!speechItem.isValid()) {
                 if (utterenceProgress != null) {
-                    utterenceProgress.dispatchOnError();
+                    utterenceProgress.dispatchOnError(
+                            TextToSpeechClient.Status.ERROR_INVALID_REQUEST);
                 }
                 return TextToSpeech.ERROR;
             }
@@ -342,12 +576,13 @@
             //
             // Note that this string is interned, so the == comparison works.
             msg.obj = speechItem.getCallerIdentity();
+
             if (sendMessage(msg)) {
                 return TextToSpeech.SUCCESS;
             } else {
                 Log.w(TAG, "SynthThread has quit");
                 if (utterenceProgress != null) {
-                    utterenceProgress.dispatchOnError();
+                    utterenceProgress.dispatchOnError(TextToSpeechClient.Status.ERROR_SERVICE);
                 }
                 return TextToSpeech.ERROR;
             }
@@ -399,9 +634,11 @@
     }
 
     interface UtteranceProgressDispatcher {
-        public void dispatchOnDone();
+        public void dispatchOnFallback();
+        public void dispatchOnStop();
+        public void dispatchOnSuccess();
         public void dispatchOnStart();
-        public void dispatchOnError();
+        public void dispatchOnError(int errorCode);
     }
 
     /**
@@ -409,15 +646,13 @@
      */
     private abstract class SpeechItem {
         private final Object mCallerIdentity;
-        protected final Bundle mParams;
         private final int mCallerUid;
         private final int mCallerPid;
         private boolean mStarted = false;
         private boolean mStopped = false;
 
-        public SpeechItem(Object caller, int callerUid, int callerPid, Bundle params) {
+        public SpeechItem(Object caller, int callerUid, int callerPid) {
             mCallerIdentity = caller;
-            mParams = params;
             mCallerUid = callerUid;
             mCallerPid = callerPid;
         }
@@ -446,20 +681,18 @@
          * Must not be called more than once.
          *
          * Only called on the synthesis thread.
-         *
-         * @return {@link TextToSpeech#SUCCESS} or {@link TextToSpeech#ERROR}.
          */
-        public int play() {
+        public void play() {
             synchronized (this) {
                 if (mStarted) {
                     throw new IllegalStateException("play() called twice");
                 }
                 mStarted = true;
             }
-            return playImpl();
+            playImpl();
         }
 
-        protected abstract int playImpl();
+        protected abstract void playImpl();
 
         /**
          * Stops the speech item.
@@ -485,20 +718,37 @@
     }
 
     /**
-     * An item in the synth thread queue that process utterance.
+     * An item in the synth thread queue that process utterance (and call back to client about
+     * progress).
      */
     private abstract class UtteranceSpeechItem extends SpeechItem
         implements UtteranceProgressDispatcher  {
 
-        public UtteranceSpeechItem(Object caller, int callerUid, int callerPid, Bundle params) {
-            super(caller, callerUid, callerPid, params);
+        public UtteranceSpeechItem(Object caller, int callerUid, int callerPid) {
+            super(caller, callerUid, callerPid);
         }
 
         @Override
-        public void dispatchOnDone() {
+        public void dispatchOnSuccess() {
             final String utteranceId = getUtteranceId();
             if (utteranceId != null) {
-                mCallbacks.dispatchOnDone(getCallerIdentity(), utteranceId);
+                mCallbacks.dispatchOnSuccess(getCallerIdentity(), utteranceId);
+            }
+        }
+
+        @Override
+        public void dispatchOnStop() {
+            final String utteranceId = getUtteranceId();
+            if (utteranceId != null) {
+                mCallbacks.dispatchOnStop(getCallerIdentity(), utteranceId);
+            }
+        }
+
+        @Override
+        public void dispatchOnFallback() {
+            final String utteranceId = getUtteranceId();
+            if (utteranceId != null) {
+                mCallbacks.dispatchOnFallback(getCallerIdentity(), utteranceId);
             }
         }
 
@@ -511,44 +761,260 @@
         }
 
         @Override
-        public void dispatchOnError() {
+        public void dispatchOnError(int errorCode) {
             final String utteranceId = getUtteranceId();
             if (utteranceId != null) {
-                mCallbacks.dispatchOnError(getCallerIdentity(), utteranceId);
+                mCallbacks.dispatchOnError(getCallerIdentity(), utteranceId, errorCode);
             }
         }
 
-        public int getStreamType() {
-            return getIntParam(Engine.KEY_PARAM_STREAM, Engine.DEFAULT_STREAM);
+        abstract public String getUtteranceId();
+
+        String getStringParam(Bundle params, String key, String defaultValue) {
+            return params == null ? defaultValue : params.getString(key, defaultValue);
         }
 
-        public float getVolume() {
-            return getFloatParam(Engine.KEY_PARAM_VOLUME, Engine.DEFAULT_VOLUME);
+        int getIntParam(Bundle params, String key, int defaultValue) {
+            return params == null ? defaultValue : params.getInt(key, defaultValue);
         }
 
-        public float getPan() {
-            return getFloatParam(Engine.KEY_PARAM_PAN, Engine.DEFAULT_PAN);
+        float getFloatParam(Bundle params, String key, float defaultValue) {
+            return params == null ? defaultValue : params.getFloat(key, defaultValue);
+        }
+    }
+
+    /**
+     * UtteranceSpeechItem for V1 API speech items. V1 API speech items keep
+     * synthesis parameters in a single Bundle passed as parameter. This class
+     * allow subclasses to access them conveniently.
+     */
+    private abstract class SpeechItemV1 extends UtteranceSpeechItem {
+        protected final Bundle mParams;
+
+        SpeechItemV1(Object callerIdentity, int callerUid, int callerPid,
+                Bundle params) {
+            super(callerIdentity, callerUid, callerPid);
+            mParams = params;
+        }
+
+        boolean hasLanguage() {
+            return !TextUtils.isEmpty(getStringParam(mParams, Engine.KEY_PARAM_LANGUAGE, null));
+        }
+
+        int getSpeechRate() {
+            return getIntParam(mParams, Engine.KEY_PARAM_RATE, getDefaultSpeechRate());
+        }
+
+        int getPitch() {
+            return getIntParam(mParams, Engine.KEY_PARAM_PITCH, Engine.DEFAULT_PITCH);
+        }
+
+        @Override
+        public String getUtteranceId() {
+            return getStringParam(mParams, Engine.KEY_PARAM_UTTERANCE_ID, null);
+        }
+
+        int getStreamType() {
+            return getIntParam(mParams, Engine.KEY_PARAM_STREAM, Engine.DEFAULT_STREAM);
+        }
+
+        float getVolume() {
+            return getFloatParam(mParams, Engine.KEY_PARAM_VOLUME, Engine.DEFAULT_VOLUME);
+        }
+
+        float getPan() {
+            return getFloatParam(mParams, Engine.KEY_PARAM_PAN, Engine.DEFAULT_PAN);
+        }
+    }
+
+    class SynthesisSpeechItemV2 extends UtteranceSpeechItem {
+        private final SynthesisRequestV2 mSynthesisRequest;
+        private AbstractSynthesisCallback mSynthesisCallback;
+        private final EventLoggerV2 mEventLogger;
+
+        public SynthesisSpeechItemV2(Object callerIdentity, int callerUid, int callerPid,
+                SynthesisRequestV2 synthesisRequest) {
+            super(callerIdentity, callerUid, callerPid);
+
+            mSynthesisRequest = synthesisRequest;
+            mEventLogger = new EventLoggerV2(synthesisRequest, callerUid, callerPid,
+                    mPackageName);
+
+            updateSpeechSpeedParam(synthesisRequest);
+        }
+
+        private void updateSpeechSpeedParam(SynthesisRequestV2 synthesisRequest) {
+            Bundle voiceParams = mSynthesisRequest.getVoiceParams();
+
+            // Inject default speech speed if needed
+            if (voiceParams.containsKey(TextToSpeechClient.Params.SPEECH_SPEED)) {
+                if (voiceParams.getFloat(TextToSpeechClient.Params.SPEECH_SPEED) <= 0) {
+                    voiceParams.putFloat(TextToSpeechClient.Params.SPEECH_SPEED,
+                            getDefaultSpeechRate() / 100.0f);
+                }
+            }
+        }
+
+        @Override
+        public boolean isValid() {
+            if (mSynthesisRequest.getText() == null) {
+                Log.e(TAG, "null synthesis text");
+                return false;
+            }
+            if (mSynthesisRequest.getText().length() >= TextToSpeech.getMaxSpeechInputLength()) {
+                Log.w(TAG, "Text too long: " + mSynthesisRequest.getText().length() + " chars");
+                return false;
+            }
+
+            return true;
+        }
+
+        @Override
+        protected void playImpl() {
+            AbstractSynthesisCallback synthesisCallback;
+            if (mEventLogger != null) {
+                mEventLogger.onRequestProcessingStart();
+            }
+            synchronized (this) {
+                // stop() might have been called before we enter this
+                // synchronized block.
+                if (isStopped()) {
+                    return;
+                }
+                mSynthesisCallback = createSynthesisCallback();
+                synthesisCallback = mSynthesisCallback;
+            }
+
+            // Get voice info
+            VoiceInfo voiceInfo = getVoicesInfoWithName(mSynthesisRequest.getVoiceName());
+            if (voiceInfo != null) {
+                // Primary voice
+                TextToSpeechService.this.onSynthesizeTextV2(mSynthesisRequest, voiceInfo,
+                        synthesisCallback);
+            } else {
+                Log.e(TAG, "Unknown voice name:" + mSynthesisRequest.getVoiceName());
+                synthesisCallback.error(TextToSpeechClient.Status.ERROR_INVALID_REQUEST);
+            }
+
+            // Fix for case where client called .start() & .error(), but did not called .done()
+            if (!synthesisCallback.hasFinished()) {
+                synthesisCallback.done();
+            }
+        }
+
+        @Override
+        protected void stopImpl() {
+            AbstractSynthesisCallback synthesisCallback;
+            synchronized (this) {
+                synthesisCallback = mSynthesisCallback;
+            }
+            if (synthesisCallback != null) {
+                // If the synthesis callback is null, it implies that we haven't
+                // entered the synchronized(this) block in playImpl which in
+                // turn implies that synthesis would not have started.
+                synthesisCallback.stop();
+                TextToSpeechService.this.onStop();
+            }
+        }
+
+        protected AbstractSynthesisCallback createSynthesisCallback() {
+            return new PlaybackSynthesisCallback(getStreamType(), getVolume(), getPan(),
+                    mAudioPlaybackHandler, this, getCallerIdentity(), mEventLogger,
+                    implementsV2API());
+        }
+
+        private int getStreamType() {
+            return getIntParam(mSynthesisRequest.getAudioParams(),
+                    TextToSpeechClient.Params.AUDIO_PARAM_STREAM,
+                    Engine.DEFAULT_STREAM);
+        }
+
+        private float getVolume() {
+            return getFloatParam(mSynthesisRequest.getAudioParams(),
+                    TextToSpeechClient.Params.AUDIO_PARAM_VOLUME,
+                    Engine.DEFAULT_VOLUME);
+        }
+
+        private float getPan() {
+            return getFloatParam(mSynthesisRequest.getAudioParams(),
+                    TextToSpeechClient.Params.AUDIO_PARAM_PAN,
+                    Engine.DEFAULT_PAN);
+        }
+
+        @Override
+        public String getUtteranceId() {
+            return mSynthesisRequest.getUtteranceId();
+        }
+    }
+
+    private class SynthesisToFileOutputStreamSpeechItemV2 extends SynthesisSpeechItemV2 {
+        private final FileOutputStream mFileOutputStream;
+
+        public SynthesisToFileOutputStreamSpeechItemV2(Object callerIdentity, int callerUid,
+                int callerPid,
+                SynthesisRequestV2 synthesisRequest,
+                FileOutputStream fileOutputStream) {
+            super(callerIdentity, callerUid, callerPid, synthesisRequest);
+            mFileOutputStream = fileOutputStream;
+        }
+
+        @Override
+        protected AbstractSynthesisCallback createSynthesisCallback() {
+            return new FileSynthesisCallback(mFileOutputStream.getChannel(),
+                    this, getCallerIdentity(), implementsV2API());
+        }
+
+        @Override
+        protected void playImpl() {
+            super.playImpl();
+            try {
+              mFileOutputStream.close();
+            } catch(IOException e) {
+              Log.w(TAG, "Failed to close output file", e);
+            }
+        }
+    }
+
+    private class AudioSpeechItemV2 extends UtteranceSpeechItem {
+        private final AudioPlaybackQueueItem mItem;
+        private final Bundle mAudioParams;
+        private final String mUtteranceId;
+
+        public AudioSpeechItemV2(Object callerIdentity, int callerUid, int callerPid,
+                String utteranceId, Bundle audioParams, Uri uri) {
+            super(callerIdentity, callerUid, callerPid);
+            mUtteranceId = utteranceId;
+            mAudioParams = audioParams;
+            mItem = new AudioPlaybackQueueItem(this, getCallerIdentity(),
+                    TextToSpeechService.this, uri, getStreamType());
+        }
+
+        @Override
+        public boolean isValid() {
+            return true;
+        }
+
+        @Override
+        protected void playImpl() {
+            mAudioPlaybackHandler.enqueue(mItem);
+        }
+
+        @Override
+        protected void stopImpl() {
+            // Do nothing.
+        }
+
+        protected int getStreamType() {
+            return mAudioParams.getInt(TextToSpeechClient.Params.AUDIO_PARAM_STREAM);
         }
 
         public String getUtteranceId() {
-            return getStringParam(Engine.KEY_PARAM_UTTERANCE_ID, null);
+            return mUtteranceId;
         }
-
-        protected String getStringParam(String key, String defaultValue) {
-            return mParams == null ? defaultValue : mParams.getString(key, defaultValue);
-        }
-
-        protected int getIntParam(String key, int defaultValue) {
-            return mParams == null ? defaultValue : mParams.getInt(key, defaultValue);
-        }
-
-        protected float getFloatParam(String key, float defaultValue) {
-            return mParams == null ? defaultValue : mParams.getFloat(key, defaultValue);
-        }
-
     }
 
-    class SynthesisSpeechItem extends UtteranceSpeechItem {
+
+    class SynthesisSpeechItemV1 extends SpeechItemV1 {
         // Never null.
         private final String mText;
         private final SynthesisRequest mSynthesisRequest;
@@ -556,10 +1022,10 @@
         // Non null after synthesis has started, and all accesses
         // guarded by 'this'.
         private AbstractSynthesisCallback mSynthesisCallback;
-        private final EventLogger mEventLogger;
+        private final EventLoggerV1 mEventLogger;
         private final int mCallerUid;
 
-        public SynthesisSpeechItem(Object callerIdentity, int callerUid, int callerPid,
+        public SynthesisSpeechItemV1(Object callerIdentity, int callerUid, int callerPid,
                 Bundle params, String text) {
             super(callerIdentity, callerUid, callerPid, params);
             mText = text;
@@ -567,7 +1033,7 @@
             mSynthesisRequest = new SynthesisRequest(mText, mParams);
             mDefaultLocale = getSettingsLocale();
             setRequestParams(mSynthesisRequest);
-            mEventLogger = new EventLogger(mSynthesisRequest, callerUid, callerPid,
+            mEventLogger = new EventLoggerV1(mSynthesisRequest, callerUid, callerPid,
                     mPackageName);
         }
 
@@ -589,25 +1055,30 @@
         }
 
         @Override
-        protected int playImpl() {
+        protected void playImpl() {
             AbstractSynthesisCallback synthesisCallback;
             mEventLogger.onRequestProcessingStart();
             synchronized (this) {
                 // stop() might have been called before we enter this
                 // synchronized block.
                 if (isStopped()) {
-                    return TextToSpeech.ERROR;
+                    return;
                 }
                 mSynthesisCallback = createSynthesisCallback();
                 synthesisCallback = mSynthesisCallback;
             }
+
             TextToSpeechService.this.onSynthesizeText(mSynthesisRequest, synthesisCallback);
-            return synthesisCallback.isDone() ? TextToSpeech.SUCCESS : TextToSpeech.ERROR;
+
+            // Fix for case where client called .start() & .error(), but did not called .done()
+            if (synthesisCallback.hasStarted() && !synthesisCallback.hasFinished()) {
+                synthesisCallback.done();
+            }
         }
 
         protected AbstractSynthesisCallback createSynthesisCallback() {
             return new PlaybackSynthesisCallback(getStreamType(), getVolume(), getPan(),
-                    mAudioPlaybackHandler, this, getCallerIdentity(), mEventLogger);
+                    mAudioPlaybackHandler, this, getCallerIdentity(), mEventLogger, false);
         }
 
         private void setRequestParams(SynthesisRequest request) {
@@ -632,37 +1103,25 @@
             }
         }
 
-        public String getLanguage() {
-            return getStringParam(Engine.KEY_PARAM_LANGUAGE, mDefaultLocale[0]);
-        }
-
-        private boolean hasLanguage() {
-            return !TextUtils.isEmpty(getStringParam(Engine.KEY_PARAM_LANGUAGE, null));
-        }
-
         private String getCountry() {
             if (!hasLanguage()) return mDefaultLocale[1];
-            return getStringParam(Engine.KEY_PARAM_COUNTRY, "");
+            return getStringParam(mParams, Engine.KEY_PARAM_COUNTRY, "");
         }
 
         private String getVariant() {
             if (!hasLanguage()) return mDefaultLocale[2];
-            return getStringParam(Engine.KEY_PARAM_VARIANT, "");
+            return getStringParam(mParams, Engine.KEY_PARAM_VARIANT, "");
         }
 
-        private int getSpeechRate() {
-            return getIntParam(Engine.KEY_PARAM_RATE, getDefaultSpeechRate());
-        }
-
-        private int getPitch() {
-            return getIntParam(Engine.KEY_PARAM_PITCH, Engine.DEFAULT_PITCH);
+        public String getLanguage() {
+            return getStringParam(mParams, Engine.KEY_PARAM_LANGUAGE, mDefaultLocale[0]);
         }
     }
 
-    private class SynthesisToFileOutputStreamSpeechItem extends SynthesisSpeechItem {
+    private class SynthesisToFileOutputStreamSpeechItemV1 extends SynthesisSpeechItemV1 {
         private final FileOutputStream mFileOutputStream;
 
-        public SynthesisToFileOutputStreamSpeechItem(Object callerIdentity, int callerUid,
+        public SynthesisToFileOutputStreamSpeechItemV1(Object callerIdentity, int callerUid,
                 int callerPid, Bundle params, String text, FileOutputStream fileOutputStream) {
             super(callerIdentity, callerUid, callerPid, params, text);
             mFileOutputStream = fileOutputStream;
@@ -670,30 +1129,26 @@
 
         @Override
         protected AbstractSynthesisCallback createSynthesisCallback() {
-            return new FileSynthesisCallback(mFileOutputStream.getChannel());
+            return new FileSynthesisCallback(mFileOutputStream.getChannel(),
+                    this, getCallerIdentity(), false);
         }
 
         @Override
-        protected int playImpl() {
+        protected void playImpl() {
             dispatchOnStart();
-            int status = super.playImpl();
-            if (status == TextToSpeech.SUCCESS) {
-                dispatchOnDone();
-            } else {
-                dispatchOnError();
-            }
+            super.playImpl();
             try {
               mFileOutputStream.close();
             } catch(IOException e) {
               Log.w(TAG, "Failed to close output file", e);
             }
-            return status;
         }
     }
 
-    private class AudioSpeechItem extends UtteranceSpeechItem {
+    private class AudioSpeechItemV1 extends SpeechItemV1 {
         private final AudioPlaybackQueueItem mItem;
-        public AudioSpeechItem(Object callerIdentity, int callerUid, int callerPid,
+
+        public AudioSpeechItemV1(Object callerIdentity, int callerUid, int callerPid,
                 Bundle params, Uri uri) {
             super(callerIdentity, callerUid, callerPid, params);
             mItem = new AudioPlaybackQueueItem(this, getCallerIdentity(),
@@ -706,23 +1161,29 @@
         }
 
         @Override
-        protected int playImpl() {
+        protected void playImpl() {
             mAudioPlaybackHandler.enqueue(mItem);
-            return TextToSpeech.SUCCESS;
         }
 
         @Override
         protected void stopImpl() {
             // Do nothing.
         }
+
+        @Override
+        public String getUtteranceId() {
+            return getStringParam(mParams, Engine.KEY_PARAM_UTTERANCE_ID, null);
+        }
     }
 
     private class SilenceSpeechItem extends UtteranceSpeechItem {
         private final long mDuration;
+        private final String mUtteranceId;
 
         public SilenceSpeechItem(Object callerIdentity, int callerUid, int callerPid,
-                Bundle params, long duration) {
-            super(callerIdentity, callerUid, callerPid, params);
+                String utteranceId, long duration) {
+            super(callerIdentity, callerUid, callerPid);
+            mUtteranceId = utteranceId;
             mDuration = duration;
         }
 
@@ -732,26 +1193,57 @@
         }
 
         @Override
-        protected int playImpl() {
+        protected void playImpl() {
             mAudioPlaybackHandler.enqueue(new SilencePlaybackQueueItem(
                     this, getCallerIdentity(), mDuration));
-            return TextToSpeech.SUCCESS;
         }
 
         @Override
         protected void stopImpl() {
-            // Do nothing, handled by AudioPlaybackHandler#stopForApp
+
+        }
+
+        @Override
+        public String getUtteranceId() {
+            return mUtteranceId;
         }
     }
 
+    /**
+     * Call {@link TextToSpeechService#onVoicesInfoChange} on synthesis thread.
+     */
+    private class VoicesInfoChangeItem extends SpeechItem {
+        public VoicesInfoChangeItem() {
+            super(null, 0, 0); // It's never initiated by an user
+        }
+
+        @Override
+        public boolean isValid() {
+            return true;
+        }
+
+        @Override
+        protected void playImpl() {
+            TextToSpeechService.this.onVoicesInfoChange();
+        }
+
+        @Override
+        protected void stopImpl() {
+            // No-op
+        }
+    }
+
+    /**
+     * Call {@link TextToSpeechService#onLoadLanguage} on synth thread.
+     */
     private class LoadLanguageItem extends SpeechItem {
         private final String mLanguage;
         private final String mCountry;
         private final String mVariant;
 
         public LoadLanguageItem(Object callerIdentity, int callerUid, int callerPid,
-                Bundle params, String language, String country, String variant) {
-            super(callerIdentity, callerUid, callerPid, params);
+                String language, String country, String variant) {
+            super(callerIdentity, callerUid, callerPid);
             mLanguage = language;
             mCountry = country;
             mVariant = variant;
@@ -763,14 +1255,8 @@
         }
 
         @Override
-        protected int playImpl() {
-            int result = TextToSpeechService.this.onLoadLanguage(mLanguage, mCountry, mVariant);
-            if (result == TextToSpeech.LANG_AVAILABLE ||
-                    result == TextToSpeech.LANG_COUNTRY_AVAILABLE ||
-                    result == TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE) {
-                return TextToSpeech.SUCCESS;
-            }
-            return TextToSpeech.ERROR;
+        protected void playImpl() {
+            TextToSpeechService.this.onLoadLanguage(mLanguage, mCountry, mVariant);
         }
 
         @Override
@@ -800,7 +1286,7 @@
                 return TextToSpeech.ERROR;
             }
 
-            SpeechItem item = new SynthesisSpeechItem(caller,
+            SpeechItem item = new SynthesisSpeechItemV1(caller,
                     Binder.getCallingUid(), Binder.getCallingPid(), params, text);
             return mSynthHandler.enqueueSpeechItem(queueMode, item);
         }
@@ -818,7 +1304,7 @@
             final ParcelFileDescriptor sameFileDescriptor = ParcelFileDescriptor.adoptFd(
                     fileDescriptor.detachFd());
 
-            SpeechItem item = new SynthesisToFileOutputStreamSpeechItem(caller,
+            SpeechItem item = new SynthesisToFileOutputStreamSpeechItemV1(caller,
                     Binder.getCallingUid(), Binder.getCallingPid(), params, text,
                     new ParcelFileDescriptor.AutoCloseOutputStream(sameFileDescriptor));
             return mSynthHandler.enqueueSpeechItem(TextToSpeech.QUEUE_ADD, item);
@@ -830,19 +1316,19 @@
                 return TextToSpeech.ERROR;
             }
 
-            SpeechItem item = new AudioSpeechItem(caller,
+            SpeechItem item = new AudioSpeechItemV1(caller,
                     Binder.getCallingUid(), Binder.getCallingPid(), params, audioUri);
             return mSynthHandler.enqueueSpeechItem(queueMode, item);
         }
 
         @Override
-        public int playSilence(IBinder caller, long duration, int queueMode, Bundle params) {
-            if (!checkNonNull(caller, params)) {
+        public int playSilence(IBinder caller, long duration, int queueMode, String utteranceId) {
+            if (!checkNonNull(caller)) {
                 return TextToSpeech.ERROR;
             }
 
             SpeechItem item = new SilenceSpeechItem(caller,
-                    Binder.getCallingUid(), Binder.getCallingPid(), params, duration);
+                    Binder.getCallingUid(), Binder.getCallingPid(), utteranceId, duration);
             return mSynthHandler.enqueueSpeechItem(queueMode, item);
         }
 
@@ -912,7 +1398,7 @@
                     retVal == TextToSpeech.LANG_COUNTRY_VAR_AVAILABLE) {
 
                 SpeechItem item = new LoadLanguageItem(caller, Binder.getCallingUid(),
-                    Binder.getCallingPid(), null, lang, country, variant);
+                        Binder.getCallingPid(), lang, country, variant);
 
                 if (mSynthHandler.enqueueSpeechItem(TextToSpeech.QUEUE_ADD, item) !=
                         TextToSpeech.SUCCESS) {
@@ -943,6 +1429,58 @@
             }
             return true;
         }
+
+        @Override
+        public List<VoiceInfo> getVoicesInfo() {
+            return TextToSpeechService.this.getVoicesInfo();
+        }
+
+        @Override
+        public int speakV2(IBinder callingInstance,
+                SynthesisRequestV2 request) {
+            if (!checkNonNull(callingInstance, request)) {
+                return TextToSpeech.ERROR;
+            }
+
+            SpeechItem item = new SynthesisSpeechItemV2(callingInstance,
+                    Binder.getCallingUid(), Binder.getCallingPid(), request);
+            return mSynthHandler.enqueueSpeechItem(TextToSpeech.QUEUE_ADD, item);
+        }
+
+        @Override
+        public int synthesizeToFileDescriptorV2(IBinder callingInstance,
+                ParcelFileDescriptor fileDescriptor,
+                SynthesisRequestV2 request) {
+            if (!checkNonNull(callingInstance, request, fileDescriptor)) {
+                return TextToSpeech.ERROR;
+            }
+
+            // In test env, ParcelFileDescriptor instance may be EXACTLY the same
+            // one that is used by client. And it will be closed by a client, thus
+            // preventing us from writing anything to it.
+            final ParcelFileDescriptor sameFileDescriptor = ParcelFileDescriptor.adoptFd(
+                    fileDescriptor.detachFd());
+
+            SpeechItem item = new SynthesisToFileOutputStreamSpeechItemV2(callingInstance,
+                    Binder.getCallingUid(), Binder.getCallingPid(), request,
+                    new ParcelFileDescriptor.AutoCloseOutputStream(sameFileDescriptor));
+            return mSynthHandler.enqueueSpeechItem(TextToSpeech.QUEUE_ADD, item);
+
+        }
+
+        @Override
+        public int playAudioV2(
+                IBinder callingInstance, Uri audioUri, String utteranceId,
+                Bundle systemParameters) {
+            if (!checkNonNull(callingInstance, audioUri, systemParameters)) {
+                return TextToSpeech.ERROR;
+            }
+
+            SpeechItem item = new AudioSpeechItemV2(callingInstance,
+                    Binder.getCallingUid(), Binder.getCallingPid(), utteranceId, systemParameters,
+                    audioUri);
+            return mSynthHandler.enqueueSpeechItem(TextToSpeech.QUEUE_ADD, item);
+        }
     };
 
     private class CallbackMap extends RemoteCallbackList<ITextToSpeechCallback> {
@@ -964,11 +1502,31 @@
             }
         }
 
-        public void dispatchOnDone(Object callerIdentity, String utteranceId) {
+        public void dispatchOnFallback(Object callerIdentity, String utteranceId) {
             ITextToSpeechCallback cb = getCallbackFor(callerIdentity);
             if (cb == null) return;
             try {
-                cb.onDone(utteranceId);
+                cb.onFallback(utteranceId);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Callback onFallback failed: " + e);
+            }
+        }
+
+        public void dispatchOnStop(Object callerIdentity, String utteranceId) {
+            ITextToSpeechCallback cb = getCallbackFor(callerIdentity);
+            if (cb == null) return;
+            try {
+                cb.onStop(utteranceId);
+            } catch (RemoteException e) {
+                Log.e(TAG, "Callback onStop failed: " + e);
+            }
+        }
+
+        public void dispatchOnSuccess(Object callerIdentity, String utteranceId) {
+            ITextToSpeechCallback cb = getCallbackFor(callerIdentity);
+            if (cb == null) return;
+            try {
+                cb.onSuccess(utteranceId);
             } catch (RemoteException e) {
                 Log.e(TAG, "Callback onDone failed: " + e);
             }
@@ -985,11 +1543,12 @@
 
         }
 
-        public void dispatchOnError(Object callerIdentity, String utteranceId) {
+        public void dispatchOnError(Object callerIdentity, String utteranceId,
+                int errorCode) {
             ITextToSpeechCallback cb = getCallbackFor(callerIdentity);
             if (cb == null) return;
             try {
-                cb.onError(utteranceId);
+                cb.onError(utteranceId, errorCode);
             } catch (RemoteException e) {
                 Log.e(TAG, "Callback onError failed: " + e);
             }
@@ -1001,7 +1560,7 @@
             synchronized (mCallerToCallback) {
                 mCallerToCallback.remove(caller);
             }
-            mSynthHandler.stopForApp(caller);
+            //mSynthHandler.stopForApp(caller);
         }
 
         @Override
@@ -1012,6 +1571,18 @@
             }
         }
 
+        public void dispatchVoicesInfoChange(List<VoiceInfo> voicesInfo) {
+            synchronized (mCallerToCallback) {
+                for (ITextToSpeechCallback callback : mCallerToCallback.values()) {
+                    try {
+                        callback.onVoicesInfoChange(voicesInfo);
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "Failed to request reconnect", e);
+                    }
+                }
+            }
+        }
+
         private ITextToSpeechCallback getCallbackFor(Object caller) {
             ITextToSpeechCallback cb;
             IBinder asBinder = (IBinder) caller;
@@ -1021,7 +1592,5 @@
 
             return cb;
         }
-
     }
-
 }
diff --git a/core/java/android/speech/tts/VoiceInfo.aidl b/core/java/android/speech/tts/VoiceInfo.aidl
new file mode 100644
index 0000000..4005f8b
--- /dev/null
+++ b/core/java/android/speech/tts/VoiceInfo.aidl
@@ -0,0 +1,20 @@
+/*
+**
+** Copyright 2013, 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 android.speech.tts;
+
+parcelable VoiceInfo;
\ No newline at end of file
diff --git a/core/java/android/speech/tts/VoiceInfo.java b/core/java/android/speech/tts/VoiceInfo.java
new file mode 100644
index 0000000..16b9a97
--- /dev/null
+++ b/core/java/android/speech/tts/VoiceInfo.java
@@ -0,0 +1,325 @@
+package android.speech.tts;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.Locale;
+
+/**
+ * Characteristics and features of a Text-To-Speech Voice. Each TTS Engine can expose
+ * multiple voices for multiple locales, with different set of features.
+ *
+ * Each VoiceInfo has an unique name. This name can be obtained using the {@link #getName()} method
+ * and will persist until the client is asked to re-evaluate the list of available voices in the
+ * {@link TextToSpeechClient.ConnectionCallbacks#onEngineStatusChange(android.speech.tts.TextToSpeechClient.EngineStatus)}
+ * callback. The name can be used to reference a VoiceInfo in an instance of {@link RequestConfig};
+ * the {@link TextToSpeechClient.Params#FALLBACK_VOICE_NAME} voice parameter is an example of this.
+ * It is recommended that the voice name never change during the TTS service lifetime.
+ */
+public final class VoiceInfo implements Parcelable {
+    /** Very low, but still intelligible quality of speech synthesis */
+    public static final int QUALITY_VERY_LOW = 100;
+
+    /** Low, not human-like quality of speech synthesis */
+    public static final int QUALITY_LOW = 200;
+
+    /** Normal quality of speech synthesis */
+    public static final int QUALITY_NORMAL = 300;
+
+    /** High, human-like quality of speech synthesis */
+    public static final int QUALITY_HIGH = 400;
+
+    /** Very high, almost human-indistinguishable quality of speech synthesis */
+    public static final int QUALITY_VERY_HIGH = 500;
+
+    /** Very low expected synthesizer latency (< 20ms) */
+    public static final int LATENCY_VERY_LOW = 100;
+
+    /** Low expected synthesizer latency (~20ms) */
+    public static final int LATENCY_LOW = 200;
+
+    /** Normal expected synthesizer latency (~50ms) */
+    public static final int LATENCY_NORMAL = 300;
+
+    /** Network based expected synthesizer latency (~200ms) */
+    public static final int LATENCY_HIGH = 400;
+
+    /** Very slow network based expected synthesizer latency (> 200ms) */
+    public static final int LATENCY_VERY_HIGH = 500;
+
+    /** Additional feature key, with string value, gender of the speaker */
+    public static final String FEATURE_SPEAKER_GENDER = "speakerGender";
+
+    /** Additional feature key, with integer value, speaking speed in words per minute
+     * when {@link TextToSpeechClient.Params#SPEECH_SPEED} parameter is set to {@code 1.0} */
+    public static final String FEATURE_WORDS_PER_MINUTE = "wordsPerMinute";
+
+    /**
+     * Additional feature key, with boolean value, that indicates that voice may need to
+     * download additional data if used for synthesis.
+     *
+     * Making a request with a voice that has this feature may result in a
+     * {@link TextToSpeechClient.Status#ERROR_DOWNLOADING_ADDITIONAL_DATA} error. It's recommended
+     * to set the {@link TextToSpeechClient.Params#FALLBACK_VOICE_NAME} voice parameter to reference
+     * a fully installed voice (or network voice) that can serve as replacement.
+     *
+     * Note: It's a good practice for a TTS engine to provide a sensible fallback voice as the
+     * default value for {@link TextToSpeechClient.Params#FALLBACK_VOICE_NAME} parameter if this
+     * feature is present.
+     */
+    public static final String FEATURE_MAY_AUTOINSTALL = "mayAutoInstall";
+
+    private final String mName;
+    private final Locale mLocale;
+    private final int mQuality;
+    private final int mLatency;
+    private final boolean mRequiresNetworkConnection;
+    private final Bundle mParams;
+    private final Bundle mAdditionalFeatures;
+
+    private VoiceInfo(Parcel in) {
+        this.mName = in.readString();
+        String[] localesData = new String[3];
+        in.readStringArray(localesData);
+        this.mLocale = new Locale(localesData[0], localesData[1], localesData[2]);
+
+        this.mQuality = in.readInt();
+        this.mLatency = in.readInt();
+        this.mRequiresNetworkConnection = (in.readByte() == 1);
+
+        this.mParams = in.readBundle();
+        this.mAdditionalFeatures = in.readBundle();
+    }
+
+    private VoiceInfo(String name,
+            Locale locale,
+            int quality,
+            int latency,
+            boolean requiresNetworkConnection,
+            Bundle params,
+            Bundle additionalFeatures) {
+        this.mName = name;
+        this.mLocale = locale;
+        this.mQuality = quality;
+        this.mLatency = latency;
+        this.mRequiresNetworkConnection = requiresNetworkConnection;
+        this.mParams = params;
+        this.mAdditionalFeatures = additionalFeatures;
+    }
+
+    /** Builder, allows TTS engines to create VoiceInfo instances. */
+    public static final class Builder {
+        private String name;
+        private Locale locale;
+        private int quality = VoiceInfo.QUALITY_NORMAL;
+        private int latency = VoiceInfo.LATENCY_NORMAL;
+        private boolean requiresNetworkConnection;
+        private Bundle params;
+        private Bundle additionalFeatures;
+
+        public Builder() {
+
+        }
+
+        /**
+         * Copy fields from given VoiceInfo instance.
+         */
+        public Builder(VoiceInfo voiceInfo) {
+            this.name = voiceInfo.mName;
+            this.locale = voiceInfo.mLocale;
+            this.quality = voiceInfo.mQuality;
+            this.latency = voiceInfo.mLatency;
+            this.requiresNetworkConnection = voiceInfo.mRequiresNetworkConnection;
+            this.params = (Bundle)voiceInfo.mParams.clone();
+            this.additionalFeatures = (Bundle) voiceInfo.mAdditionalFeatures.clone();
+        }
+
+        /**
+         * Sets the voice's unique name. It will be used by clients to reference the voice used by a
+         * request.
+         *
+         * It's recommended that each voice use the same consistent name during the TTS service
+         * lifetime.
+         */
+        public Builder setName(String name) {
+            this.name = name;
+            return this;
+        }
+
+        /**
+         * Sets voice locale. This has to be a valid locale, built from ISO 639-1 and ISO 3166-1
+         * two letter codes.
+         */
+        public Builder setLocale(Locale locale) {
+            this.locale = locale;
+            return this;
+        }
+
+        /**
+         * Sets map of all available request parameters with their default values.
+         * Some common parameter names can be found in {@link TextToSpeechClient.Params} static
+         * members.
+         */
+        public Builder setParamsWithDefaults(Bundle params) {
+            this.params = params;
+            return this;
+        }
+
+        /**
+         * Sets map of additional voice features. Some common feature names can be found in
+         * {@link VoiceInfo} static members.
+         */
+        public Builder setAdditionalFeatures(Bundle additionalFeatures) {
+            this.additionalFeatures = additionalFeatures;
+            return this;
+        }
+
+        /**
+         * Sets the voice quality (higher is better).
+         */
+        public Builder setQuality(int quality) {
+            this.quality = quality;
+            return this;
+        }
+
+        /**
+         * Sets the voice latency (lower is better).
+         */
+        public Builder setLatency(int latency) {
+            this.latency = latency;
+            return this;
+        }
+
+        /**
+         * Sets whether the voice requires network connection to work properly.
+         */
+        public Builder setRequiresNetworkConnection(boolean requiresNetworkConnection) {
+            this.requiresNetworkConnection = requiresNetworkConnection;
+            return this;
+        }
+
+        /**
+         * @return The built VoiceInfo instance.
+         */
+        public VoiceInfo build() {
+            if (name == null || name.isEmpty()) {
+                throw new IllegalStateException("Name can't be null or empty");
+            }
+            if (locale == null) {
+                throw new IllegalStateException("Locale can't be null");
+            }
+
+            return new VoiceInfo(name, locale, quality, latency,
+                        requiresNetworkConnection,
+                        ((params == null) ? new Bundle() :
+                            (Bundle)params.clone()),
+                        ((additionalFeatures == null) ? new Bundle() :
+                            (Bundle)additionalFeatures.clone()));
+        }
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mName);
+        String[] localesData = new String[]{mLocale.getLanguage(), mLocale.getCountry(), mLocale.getVariant()};
+        dest.writeStringArray(localesData);
+        dest.writeInt(mQuality);
+        dest.writeInt(mLatency);
+        dest.writeByte((byte) (mRequiresNetworkConnection ? 1 : 0));
+        dest.writeBundle(mParams);
+        dest.writeBundle(mAdditionalFeatures);
+    }
+
+    /**
+     * @hide
+     */
+    public static final Parcelable.Creator<VoiceInfo> CREATOR = new Parcelable.Creator<VoiceInfo>() {
+        @Override
+        public VoiceInfo createFromParcel(Parcel in) {
+            return new VoiceInfo(in);
+        }
+
+        @Override
+        public VoiceInfo[] newArray(int size) {
+            return new VoiceInfo[size];
+        }
+    };
+
+    /**
+     * @return The voice's locale
+     */
+    public Locale getLocale() {
+        return mLocale;
+    }
+
+    /**
+     * @return The voice's quality (higher is better)
+     */
+    public int getQuality() {
+        return mQuality;
+    }
+
+    /**
+     * @return The voice's latency (lower is better)
+     */
+    public int getLatency() {
+        return mLatency;
+    }
+
+    /**
+     * @return Does the Voice require a network connection to work.
+     */
+    public boolean getRequiresNetworkConnection() {
+        return mRequiresNetworkConnection;
+    }
+
+    /**
+     * @return Bundle of all available parameters with their default values.
+     */
+    public Bundle getParamsWithDefaults() {
+        return mParams;
+    }
+
+    /**
+     * @return Unique voice name.
+     *
+     * Each VoiceInfo has an unique name, that persists until client is asked to re-evaluate the
+     * set of the available languages in the {@link TextToSpeechClient.ConnectionCallbacks#onEngineStatusChange(android.speech.tts.TextToSpeechClient.EngineStatus)}
+     * callback (Voice may disappear from the set if voice was removed by the user).
+     */
+    public String getName() {
+        return mName;
+    }
+
+    /**
+     * @return Additional features of the voice.
+     */
+    public Bundle getAdditionalFeatures() {
+        return mAdditionalFeatures;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder(64);
+        return builder.append("VoiceInfo[Name: ").append(mName)
+                .append(" ,locale: ").append(mLocale)
+                .append(" ,quality: ").append(mQuality)
+                .append(" ,latency: ").append(mLatency)
+                .append(" ,requiresNetwork: ").append(mRequiresNetworkConnection)
+                .append(" ,paramsWithDefaults: ").append(mParams.toString())
+                .append(" ,additionalFeatures: ").append(mAdditionalFeatures.toString())
+                .append("]").toString();
+    }
+}
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index 06935ae..77ef1da 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -21,6 +21,7 @@
 import android.text.style.WrapTogetherSpan;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
 import java.lang.ref.WeakReference;
 
@@ -401,7 +402,7 @@
 
         if (mBlockEndLines == null) {
             // Initial creation of the array, no test on previous block ending line
-            mBlockEndLines = new int[ArrayUtils.idealIntArraySize(1)];
+            mBlockEndLines = ArrayUtils.newUnpaddedIntArray(1);
             mBlockEndLines[mNumberOfBlocks] = line;
             mNumberOfBlocks++;
             return;
@@ -409,13 +410,7 @@
 
         final int previousBlockEndLine = mBlockEndLines[mNumberOfBlocks - 1];
         if (line > previousBlockEndLine) {
-            if (mNumberOfBlocks == mBlockEndLines.length) {
-                // Grow the array if needed
-                int[] blockEndLines = new int[ArrayUtils.idealIntArraySize(mNumberOfBlocks + 1)];
-                System.arraycopy(mBlockEndLines, 0, blockEndLines, 0, mNumberOfBlocks);
-                mBlockEndLines = blockEndLines;
-            }
-            mBlockEndLines[mNumberOfBlocks] = line;
+            mBlockEndLines = GrowingArrayUtils.append(mBlockEndLines, mNumberOfBlocks, line);
             mNumberOfBlocks++;
         }
     }
@@ -483,9 +478,9 @@
         }
 
         if (newNumberOfBlocks > mBlockEndLines.length) {
-            final int newSize = ArrayUtils.idealIntArraySize(newNumberOfBlocks);
-            int[] blockEndLines = new int[newSize];
-            int[] blockIndices = new int[newSize];
+            int[] blockEndLines = ArrayUtils.newUnpaddedIntArray(
+                    Math.max(mBlockEndLines.length * 2, newNumberOfBlocks));
+            int[] blockIndices = new int[blockEndLines.length];
             System.arraycopy(mBlockEndLines, 0, blockEndLines, 0, firstBlock);
             System.arraycopy(mBlockIndices, 0, blockIndices, 0, firstBlock);
             System.arraycopy(mBlockEndLines, lastBlock + 1,
diff --git a/core/java/android/text/Html.java b/core/java/android/text/Html.java
index f839d52..2fcc597 100644
--- a/core/java/android/text/Html.java
+++ b/core/java/android/text/Html.java
@@ -48,11 +48,8 @@
 import android.text.style.URLSpan;
 import android.text.style.UnderlineSpan;
 
-import com.android.internal.util.XmlUtils;
-
 import java.io.IOException;
 import java.io.StringReader;
-import java.util.HashMap;
 
 /**
  * This class processes HTML strings into displayable styled text.
@@ -214,7 +211,7 @@
 
     private static String getOpenParaTagWithDirection(Spanned text, int start, int end) {
         final int len = end - start;
-        final byte[] levels = new byte[ArrayUtils.idealByteArraySize(len)];
+        final byte[] levels = ArrayUtils.newUnpaddedByteArray(len);
         final char[] buffer = TextUtils.obtain(len);
         TextUtils.getChars(text, start, end, buffer, 0);
 
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index 9dfd383..4bfcaff 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -31,6 +31,7 @@
 import android.text.style.TabStopSpan;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
 import java.util.Arrays;
 
@@ -403,14 +404,9 @@
                                 // construction
                                 if (mLineBackgroundSpans.spanStarts[j] >= end ||
                                         mLineBackgroundSpans.spanEnds[j] <= start) continue;
-                                if (spansLength == spans.length) {
-                                    // The spans array needs to be expanded
-                                    int newSize = ArrayUtils.idealObjectArraySize(2 * spansLength);
-                                    ParagraphStyle[] newSpans = new ParagraphStyle[newSize];
-                                    System.arraycopy(spans, 0, newSpans, 0, spansLength);
-                                    spans = newSpans;
-                                }
-                                spans[spansLength++] = mLineBackgroundSpans.spans[j];
+                                spans = GrowingArrayUtils.append(
+                                        spans, spansLength, mLineBackgroundSpans.spans[j]);
+                                spansLength++;
                             }
                         }
                     }
diff --git a/core/java/android/text/MeasuredText.java b/core/java/android/text/MeasuredText.java
index 101d6a2..f8e3c83 100644
--- a/core/java/android/text/MeasuredText.java
+++ b/core/java/android/text/MeasuredText.java
@@ -98,10 +98,10 @@
         mPos = 0;
 
         if (mWidths == null || mWidths.length < len) {
-            mWidths = new float[ArrayUtils.idealFloatArraySize(len)];
+            mWidths = ArrayUtils.newUnpaddedFloatArray(len);
         }
         if (mChars == null || mChars.length < len) {
-            mChars = new char[ArrayUtils.idealCharArraySize(len)];
+            mChars = ArrayUtils.newUnpaddedCharArray(len);
         }
         TextUtils.getChars(text, start, end, mChars, 0);
 
@@ -130,7 +130,7 @@
             mEasy = true;
         } else {
             if (mLevels == null || mLevels.length < len) {
-                mLevels = new byte[ArrayUtils.idealByteArraySize(len)];
+                mLevels = ArrayUtils.newUnpaddedByteArray(len);
             }
             int bidiRequest;
             if (textDir == TextDirectionHeuristics.LTR) {
diff --git a/core/java/android/text/PackedIntVector.java b/core/java/android/text/PackedIntVector.java
index d87f600..546ab44 100644
--- a/core/java/android/text/PackedIntVector.java
+++ b/core/java/android/text/PackedIntVector.java
@@ -17,6 +17,7 @@
 package android.text;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
 
 /**
@@ -252,9 +253,9 @@
      */
     private final void growBuffer() {
         final int columns = mColumns;
-        int newsize = size() + 1;
-        newsize = ArrayUtils.idealIntArraySize(newsize * columns) / columns;
-        int[] newvalues = new int[newsize * columns];
+        int[] newvalues = ArrayUtils.newUnpaddedIntArray(
+                GrowingArrayUtils.growSize(size()) * columns);
+        int newsize = newvalues.length / columns;
 
         final int[] valuegap = mValueGap;
         final int rowgapstart = mRowGapStart;
diff --git a/core/java/android/text/PackedObjectVector.java b/core/java/android/text/PackedObjectVector.java
index a29df09..b777e16 100644
--- a/core/java/android/text/PackedObjectVector.java
+++ b/core/java/android/text/PackedObjectVector.java
@@ -17,6 +17,9 @@
 package android.text;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 class PackedObjectVector<E>
 {
@@ -32,12 +35,11 @@
     PackedObjectVector(int columns)
     {
         mColumns = columns;
-        mRows = ArrayUtils.idealIntArraySize(0) / mColumns;
+        mValues = EmptyArray.OBJECT;
+        mRows = 0;
 
         mRowGapStart = 0;
         mRowGapLength = mRows;
-
-        mValues = new Object[mRows * mColumns];
     }
 
     public E
@@ -109,10 +111,9 @@
     private void
     growBuffer()
     {
-        int newsize = size() + 1;
-        newsize = ArrayUtils.idealIntArraySize(newsize * mColumns) / mColumns;
-        Object[] newvalues = new Object[newsize * mColumns];
-
+        Object[] newvalues = ArrayUtils.newUnpaddedObjectArray(
+                GrowingArrayUtils.growSize(size()) * mColumns);
+        int newsize = newvalues.length / mColumns;
         int after = mRows - (mRowGapStart + mRowGapLength);
 
         System.arraycopy(mValues, 0, newvalues, 0, mColumns * mRowGapStart);
diff --git a/core/java/android/text/SpannableStringBuilder.java b/core/java/android/text/SpannableStringBuilder.java
index 34274a6..f440853 100644
--- a/core/java/android/text/SpannableStringBuilder.java
+++ b/core/java/android/text/SpannableStringBuilder.java
@@ -21,6 +21,9 @@
 import android.util.Log;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 import java.lang.reflect.Array;
 
@@ -29,6 +32,7 @@
  */
 public class SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable,
         Appendable, GraphicsOperations {
+    private final static String TAG = "SpannableStringBuilder";
     /**
      * Create a new SpannableStringBuilder with empty contents
      */
@@ -53,19 +57,17 @@
 
         if (srclen < 0) throw new StringIndexOutOfBoundsException();
 
-        int len = ArrayUtils.idealCharArraySize(srclen + 1);
-        mText = new char[len];
+        mText = ArrayUtils.newUnpaddedCharArray(GrowingArrayUtils.growSize(srclen));
         mGapStart = srclen;
-        mGapLength = len - srclen;
+        mGapLength = mText.length - srclen;
 
         TextUtils.getChars(text, start, end, mText, 0);
 
         mSpanCount = 0;
-        int alloc = ArrayUtils.idealIntArraySize(0);
-        mSpans = new Object[alloc];
-        mSpanStarts = new int[alloc];
-        mSpanEnds = new int[alloc];
-        mSpanFlags = new int[alloc];
+        mSpans = EmptyArray.OBJECT;
+        mSpanStarts = EmptyArray.INT;
+        mSpanEnds = EmptyArray.INT;
+        mSpanFlags = EmptyArray.INT;
 
         if (text instanceof Spanned) {
             Spanned sp = (Spanned) text;
@@ -129,12 +131,14 @@
 
     private void resizeFor(int size) {
         final int oldLength = mText.length;
-        final int newLength = ArrayUtils.idealCharArraySize(size + 1);
-        final int delta = newLength - oldLength;
-        if (delta == 0) return;
+        if (size + 1 <= oldLength) {
+            return;
+        }
 
-        char[] newText = new char[newLength];
+        char[] newText = ArrayUtils.newUnpaddedCharArray(GrowingArrayUtils.growSize(size));
         System.arraycopy(mText, 0, newText, 0, mGapStart);
+        final int newLength = newText.length;
+        final int delta = newLength - oldLength;
         final int after = oldLength - (mGapStart + mGapLength);
         System.arraycopy(mText, oldLength - after, newText, newLength - after, after);
         mText = newText;
@@ -436,10 +440,26 @@
     }
 
     // Documentation from interface
-    public SpannableStringBuilder replace(final int start, final int end,
+    public SpannableStringBuilder replace(int start, int end,
             CharSequence tb, int tbstart, int tbend) {
         checkRange("replace", start, end);
 
+        // Sanity check
+        if (start > end) {
+            Log.w(TAG, "Bad arguments to #replace : "
+                    + "start = " + start + ", end = " + end);
+            final int tmp = start;
+            start = end;
+            end = tmp;
+        }
+        if (tbstart > tbend) {
+            Log.w(TAG, "Bad arguments to #replace : "
+                    + "tbstart = " + tbstart + ", tbend = " + tbend);
+            final int tmp = tbstart;
+            tbstart = tbend;
+            tbend = tmp;
+        }
+
         int filtercount = mFilters.length;
         for (int i = 0; i < filtercount; i++) {
             CharSequence repl = mFilters[i].filter(tb, tbstart, tbend, this, start, end);
@@ -613,8 +633,9 @@
 
         // 0-length Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
         if (flagsStart == POINT && flagsEnd == MARK && start == end) {
-            if (send) Log.e("SpannableStringBuilder",
-                    "SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length");
+            if (send) {
+                Log.e(TAG, "SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length");
+            }
             // Silently ignore invalid spans when they are created from this class.
             // This avoids the duplication of the above test code before all the
             // calls to setSpan that are done in this class
@@ -661,28 +682,10 @@
             }
         }
 
-        if (mSpanCount + 1 >= mSpans.length) {
-            int newsize = ArrayUtils.idealIntArraySize(mSpanCount + 1);
-            Object[] newspans = new Object[newsize];
-            int[] newspanstarts = new int[newsize];
-            int[] newspanends = new int[newsize];
-            int[] newspanflags = new int[newsize];
-
-            System.arraycopy(mSpans, 0, newspans, 0, mSpanCount);
-            System.arraycopy(mSpanStarts, 0, newspanstarts, 0, mSpanCount);
-            System.arraycopy(mSpanEnds, 0, newspanends, 0, mSpanCount);
-            System.arraycopy(mSpanFlags, 0, newspanflags, 0, mSpanCount);
-
-            mSpans = newspans;
-            mSpanStarts = newspanstarts;
-            mSpanEnds = newspanends;
-            mSpanFlags = newspanflags;
-        }
-
-        mSpans[mSpanCount] = what;
-        mSpanStarts[mSpanCount] = start;
-        mSpanEnds[mSpanCount] = end;
-        mSpanFlags[mSpanCount] = flags;
+        mSpans = GrowingArrayUtils.append(mSpans, mSpanCount, what);
+        mSpanStarts = GrowingArrayUtils.append(mSpanStarts, mSpanCount, start);
+        mSpanEnds = GrowingArrayUtils.append(mSpanEnds, mSpanCount, end);
+        mSpanFlags = GrowingArrayUtils.append(mSpanFlags, mSpanCount, flags);
         mSpanCount++;
 
         if (send) sendSpanAdded(what, nstart, nend);
diff --git a/core/java/android/text/SpannableStringInternal.java b/core/java/android/text/SpannableStringInternal.java
index 456a3e5..d114d32 100644
--- a/core/java/android/text/SpannableStringInternal.java
+++ b/core/java/android/text/SpannableStringInternal.java
@@ -17,6 +17,9 @@
 package android.text;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 import java.lang.reflect.Array;
 
@@ -29,9 +32,8 @@
         else
             mText = source.toString().substring(start, end);
 
-        int initial = ArrayUtils.idealIntArraySize(0);
-        mSpans = new Object[initial];
-        mSpanData = new int[initial * 3];
+        mSpans = EmptyArray.OBJECT;
+        mSpanData = EmptyArray.INT;
 
         if (source instanceof Spanned) {
             Spanned sp = (Spanned) source;
@@ -115,9 +117,9 @@
         }
 
         if (mSpanCount + 1 >= mSpans.length) {
-            int newsize = ArrayUtils.idealIntArraySize(mSpanCount + 1);
-            Object[] newtags = new Object[newsize];
-            int[] newdata = new int[newsize * 3];
+            Object[] newtags = ArrayUtils.newUnpaddedObjectArray(
+                    GrowingArrayUtils.growSize(mSpanCount));
+            int[] newdata = new int[newtags.length * 3];
 
             System.arraycopy(mSpans, 0, newtags, 0, mSpanCount);
             System.arraycopy(mSpanData, 0, newdata, 0, mSpanCount * 3);
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 814326c..0db00f0 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -26,6 +26,7 @@
 import android.util.Log;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
 /**
  * StaticLayout is a Layout for text that will not be edited after it
@@ -130,9 +131,8 @@
             mEllipsizedWidth = outerwidth;
         }
 
-        mLines = new int[ArrayUtils.idealIntArraySize(2 * mColumns)];
-        mLineDirections = new Directions[
-                             ArrayUtils.idealIntArraySize(2 * mColumns)];
+        mLineDirections = ArrayUtils.newUnpaddedArray(Directions.class, 2 * mColumns);
+        mLines = new int[mLineDirections.length];
         mMaximumVisibleLineCount = maxLines;
 
         mMeasured = MeasuredText.obtain();
@@ -149,8 +149,8 @@
         super(text, null, 0, null, 0, 0);
 
         mColumns = COLUMNS_ELLIPSIZE;
-        mLines = new int[ArrayUtils.idealIntArraySize(2 * mColumns)];
-        mLineDirections = new Directions[ArrayUtils.idealIntArraySize(2 * mColumns)];
+        mLineDirections = ArrayUtils.newUnpaddedArray(Directions.class, 2 * mColumns);
+        mLines = new int[mLineDirections.length];
         // FIXME This is never recycled
         mMeasured = MeasuredText.obtain();
     }
@@ -215,8 +215,7 @@
                 if (chooseHt.length != 0) {
                     if (chooseHtv == null ||
                         chooseHtv.length < chooseHt.length) {
-                        chooseHtv = new int[ArrayUtils.idealIntArraySize(
-                                            chooseHt.length)];
+                        chooseHtv = ArrayUtils.newUnpaddedIntArray(chooseHt.length);
                     }
 
                     for (int i = 0; i < chooseHt.length; i++) {
@@ -434,7 +433,7 @@
                         }
 
                         if (mLineCount >= mMaximumVisibleLineCount) {
-                            break;
+                            return;
                         }
                     }
                 }
@@ -599,16 +598,16 @@
         int[] lines = mLines;
 
         if (want >= lines.length) {
-            int nlen = ArrayUtils.idealIntArraySize(want + 1);
-            int[] grow = new int[nlen];
-            System.arraycopy(lines, 0, grow, 0, lines.length);
-            mLines = grow;
-            lines = grow;
-
-            Directions[] grow2 = new Directions[nlen];
+            Directions[] grow2 = ArrayUtils.newUnpaddedArray(
+                    Directions.class, GrowingArrayUtils.growSize(want));
             System.arraycopy(mLineDirections, 0, grow2, 0,
                              mLineDirections.length);
             mLineDirections = grow2;
+
+            int[] grow = new int[grow2.length];
+            System.arraycopy(lines, 0, grow, 0, lines.length);
+            mLines = grow;
+            lines = grow;
         }
 
         if (chooseHt != null) {
diff --git a/core/java/android/text/TextLine.java b/core/java/android/text/TextLine.java
index 1fecf81..d892f19 100644
--- a/core/java/android/text/TextLine.java
+++ b/core/java/android/text/TextLine.java
@@ -153,7 +153,7 @@
 
         if (mCharsValid) {
             if (mChars == null || mChars.length < mLen) {
-                mChars = new char[ArrayUtils.idealCharArraySize(mLen)];
+                mChars = ArrayUtils.newUnpaddedCharArray(mLen);
             }
             TextUtils.getChars(text, start, limit, mChars, 0);
             if (hasReplacement) {
diff --git a/core/java/android/text/TextUtils.java b/core/java/android/text/TextUtils.java
index 596ca8c..f06ae71 100644
--- a/core/java/android/text/TextUtils.java
+++ b/core/java/android/text/TextUtils.java
@@ -1321,7 +1321,7 @@
         }
 
         if (buf == null || buf.length < len)
-            buf = new char[ArrayUtils.idealCharArraySize(len)];
+            buf = ArrayUtils.newUnpaddedCharArray(len);
 
         return buf;
     }
diff --git a/core/java/android/text/format/DateUtils.java b/core/java/android/text/format/DateUtils.java
index 22675b4..d0ed871 100644
--- a/core/java/android/text/format/DateUtils.java
+++ b/core/java/android/text/format/DateUtils.java
@@ -28,7 +28,6 @@
 import java.util.Formatter;
 import java.util.GregorianCalendar;
 import java.util.Locale;
-import java.util.TimeZone;
 
 import libcore.icu.DateIntervalFormat;
 import libcore.icu.LocaleData;
diff --git a/core/java/android/text/format/Formatter.java b/core/java/android/text/format/Formatter.java
index 9c98b98..b0cbcd2 100644
--- a/core/java/android/text/format/Formatter.java
+++ b/core/java/android/text/format/Formatter.java
@@ -106,4 +106,69 @@
     public static String formatIpAddress(int ipv4Address) {
         return NetworkUtils.intToInetAddress(ipv4Address).getHostAddress();
     }
+
+    private static final int SECONDS_PER_MINUTE = 60;
+    private static final int SECONDS_PER_HOUR = 60 * 60;
+    private static final int SECONDS_PER_DAY = 24 * 60 * 60;
+
+    /**
+     * Returns elapsed time for the given millis, in the following format:
+     * 1 day 5 hrs; will include at most two units, can go down to seconds precision.
+     * @param context the application context
+     * @param millis the elapsed time in milli seconds
+     * @return the formatted elapsed time
+     * @hide
+     */
+    public static String formatShortElapsedTime(Context context, long millis) {
+        long secondsLong = millis / 1000;
+
+        int days = 0, hours = 0, minutes = 0;
+        if (secondsLong >= SECONDS_PER_DAY) {
+            days = (int)(secondsLong / SECONDS_PER_DAY);
+            secondsLong -= days * SECONDS_PER_DAY;
+        }
+        if (secondsLong >= SECONDS_PER_HOUR) {
+            hours = (int)(secondsLong / SECONDS_PER_HOUR);
+            secondsLong -= hours * SECONDS_PER_HOUR;
+        }
+        if (secondsLong >= SECONDS_PER_MINUTE) {
+            minutes = (int)(secondsLong / SECONDS_PER_MINUTE);
+            secondsLong -= minutes * SECONDS_PER_MINUTE;
+        }
+        int seconds = (int)secondsLong;
+
+        if (days >= 2) {
+            days += (hours+12)/24;
+            return context.getString(com.android.internal.R.string.durationDays, days);
+        } else if (days > 0) {
+            if (hours == 1) {
+                return context.getString(com.android.internal.R.string.durationDayHour, days, hours);
+            }
+            return context.getString(com.android.internal.R.string.durationDayHours, days, hours);
+        } else if (hours >= 2) {
+            hours += (minutes+30)/60;
+            return context.getString(com.android.internal.R.string.durationHours, hours);
+        } else if (hours > 0) {
+            if (minutes == 1) {
+                return context.getString(com.android.internal.R.string.durationHourMinute, hours,
+                        minutes);
+            }
+            return context.getString(com.android.internal.R.string.durationHourMinutes, hours,
+                    minutes);
+        } else if (minutes >= 2) {
+            minutes += (seconds+30)/60;
+            return context.getString(com.android.internal.R.string.durationMinutes, minutes);
+        } else if (minutes > 0) {
+            if (seconds == 1) {
+                return context.getString(com.android.internal.R.string.durationMinuteSecond, minutes,
+                        seconds);
+            }
+            return context.getString(com.android.internal.R.string.durationMinuteSeconds, minutes,
+                    seconds);
+        } else if (seconds == 1) {
+            return context.getString(com.android.internal.R.string.durationSecond, seconds);
+        } else {
+            return context.getString(com.android.internal.R.string.durationSeconds, seconds);
+        }
+    }
 }
diff --git a/core/java/android/text/method/HideReturnsTransformationMethod.java b/core/java/android/text/method/HideReturnsTransformationMethod.java
index ce18692..c6a90ca 100644
--- a/core/java/android/text/method/HideReturnsTransformationMethod.java
+++ b/core/java/android/text/method/HideReturnsTransformationMethod.java
@@ -16,13 +16,6 @@
 
 package android.text.method;
 
-import android.graphics.Rect;
-import android.text.GetChars;
-import android.text.Spanned;
-import android.text.SpannedString;
-import android.text.TextUtils;
-import android.view.View; 
-
 /**
  * This transformation method causes any carriage return characters (\r)
  * to be hidden by displaying them as zero-width non-breaking space
diff --git a/core/java/android/text/method/PasswordTransformationMethod.java b/core/java/android/text/method/PasswordTransformationMethod.java
index b769b76..88a69b9 100644
--- a/core/java/android/text/method/PasswordTransformationMethod.java
+++ b/core/java/android/text/method/PasswordTransformationMethod.java
@@ -25,7 +25,6 @@
 import android.text.NoCopySpan;
 import android.text.TextUtils;
 import android.text.TextWatcher;
-import android.text.Selection;
 import android.text.Spanned;
 import android.text.Spannable;
 import android.text.style.UpdateLayout;
diff --git a/core/java/android/text/method/SingleLineTransformationMethod.java b/core/java/android/text/method/SingleLineTransformationMethod.java
index 6a05fe4..818526a 100644
--- a/core/java/android/text/method/SingleLineTransformationMethod.java
+++ b/core/java/android/text/method/SingleLineTransformationMethod.java
@@ -16,15 +16,6 @@
 
 package android.text.method;
 
-import android.graphics.Rect;
-import android.text.Editable;
-import android.text.GetChars;
-import android.text.Spannable;
-import android.text.Spanned;
-import android.text.SpannedString;
-import android.text.TextUtils;
-import android.view.View;
-
 /**
  * This transformation method causes any newline characters (\n) to be
  * displayed as spaces instead of causing line breaks, and causes
diff --git a/core/java/android/text/style/BackgroundColorSpan.java b/core/java/android/text/style/BackgroundColorSpan.java
index 580a369..cda8015 100644
--- a/core/java/android/text/style/BackgroundColorSpan.java
+++ b/core/java/android/text/style/BackgroundColorSpan.java
@@ -26,9 +26,9 @@
 
     private final int mColor;
 
-	public BackgroundColorSpan(int color) {
-		mColor = color;
-	}
+    public BackgroundColorSpan(int color) {
+        mColor = color;
+    }
 
     public BackgroundColorSpan(Parcel src) {
         mColor = src.readInt();
@@ -46,12 +46,12 @@
         dest.writeInt(mColor);
     }
 
-	public int getBackgroundColor() {
-		return mColor;
-	}
+    public int getBackgroundColor() {
+        return mColor;
+    }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.bgColor = mColor;
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.bgColor = mColor;
+    }
 }
diff --git a/core/java/android/text/style/CharacterStyle.java b/core/java/android/text/style/CharacterStyle.java
index 14dfddd..5b95f1a 100644
--- a/core/java/android/text/style/CharacterStyle.java
+++ b/core/java/android/text/style/CharacterStyle.java
@@ -24,7 +24,7 @@
  * ones may just implement {@link UpdateAppearance}.
  */
 public abstract class CharacterStyle {
-	public abstract void updateDrawState(TextPaint tp);
+    public abstract void updateDrawState(TextPaint tp);
 
     /**
      * A given CharacterStyle can only applied to a single region of a given
diff --git a/core/java/android/text/style/DrawableMarginSpan.java b/core/java/android/text/style/DrawableMarginSpan.java
index c2564d5..20b6886 100644
--- a/core/java/android/text/style/DrawableMarginSpan.java
+++ b/core/java/android/text/style/DrawableMarginSpan.java
@@ -19,7 +19,6 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.Paint;
 import android.graphics.Canvas;
-import android.graphics.RectF;
 import android.text.Spanned;
 import android.text.Layout;
 
diff --git a/core/java/android/text/style/DynamicDrawableSpan.java b/core/java/android/text/style/DynamicDrawableSpan.java
index 89dc45b..5b8a6dd 100644
--- a/core/java/android/text/style/DynamicDrawableSpan.java
+++ b/core/java/android/text/style/DynamicDrawableSpan.java
@@ -17,12 +17,9 @@
 package android.text.style;
 
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Rect;
-import android.graphics.Paint.Style;
 import android.graphics.drawable.Drawable;
-import android.util.Log;
 
 import java.lang.ref.WeakReference;
 
diff --git a/core/java/android/text/style/ForegroundColorSpan.java b/core/java/android/text/style/ForegroundColorSpan.java
index 476124d..c9e09bd 100644
--- a/core/java/android/text/style/ForegroundColorSpan.java
+++ b/core/java/android/text/style/ForegroundColorSpan.java
@@ -26,9 +26,9 @@
 
     private final int mColor;
 
-	public ForegroundColorSpan(int color) {
-		mColor = color;
-	}
+    public ForegroundColorSpan(int color) {
+        mColor = color;
+    }
 
     public ForegroundColorSpan(Parcel src) {
         mColor = src.readInt();
@@ -46,12 +46,12 @@
         dest.writeInt(mColor);
     }
 
-	public int getForegroundColor() {
-		return mColor;
-	}
+    public int getForegroundColor() {
+        return mColor;
+    }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.setColor(mColor);
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.setColor(mColor);
+    }
 }
diff --git a/core/java/android/text/style/IconMarginSpan.java b/core/java/android/text/style/IconMarginSpan.java
index c786a17..cf9a705 100644
--- a/core/java/android/text/style/IconMarginSpan.java
+++ b/core/java/android/text/style/IconMarginSpan.java
@@ -19,7 +19,6 @@
 import android.graphics.Paint;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.graphics.RectF;
 import android.text.Spanned;
 import android.text.Layout;
 
diff --git a/core/java/android/text/style/ImageSpan.java b/core/java/android/text/style/ImageSpan.java
index 74b9463..3d6f8e6 100644
--- a/core/java/android/text/style/ImageSpan.java
+++ b/core/java/android/text/style/ImageSpan.java
@@ -145,7 +145,7 @@
             }
         } else {
             try {
-                drawable = mContext.getResources().getDrawable(mResourceId);
+                drawable = mContext.getDrawable(mResourceId);
                 drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
                         drawable.getIntrinsicHeight());
             } catch (Exception e) {
diff --git a/core/java/android/text/style/LineHeightSpan.java b/core/java/android/text/style/LineHeightSpan.java
index 44a1706..1ebee82 100644
--- a/core/java/android/text/style/LineHeightSpan.java
+++ b/core/java/android/text/style/LineHeightSpan.java
@@ -17,8 +17,6 @@
 package android.text.style;
 
 import android.graphics.Paint;
-import android.graphics.Canvas;
-import android.text.Layout;
 import android.text.TextPaint;
 
 public interface LineHeightSpan
diff --git a/core/java/android/text/style/MaskFilterSpan.java b/core/java/android/text/style/MaskFilterSpan.java
index 64ab0d8..2ff52a8f 100644
--- a/core/java/android/text/style/MaskFilterSpan.java
+++ b/core/java/android/text/style/MaskFilterSpan.java
@@ -21,18 +21,18 @@
 
 public class MaskFilterSpan extends CharacterStyle implements UpdateAppearance {
 
-	private MaskFilter mFilter;
+    private MaskFilter mFilter;
 
-	public MaskFilterSpan(MaskFilter filter) {
-		mFilter = filter;
-	}
+    public MaskFilterSpan(MaskFilter filter) {
+        mFilter = filter;
+    }
 
-	public MaskFilter getMaskFilter() {
-		return mFilter;
-	}
+    public MaskFilter getMaskFilter() {
+        return mFilter;
+    }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.setMaskFilter(mFilter);
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.setMaskFilter(mFilter);
+    }
 }
diff --git a/core/java/android/text/style/MetricAffectingSpan.java b/core/java/android/text/style/MetricAffectingSpan.java
index 92558eb..853ecc6 100644
--- a/core/java/android/text/style/MetricAffectingSpan.java
+++ b/core/java/android/text/style/MetricAffectingSpan.java
@@ -16,7 +16,6 @@
 
 package android.text.style;
 
-import android.graphics.Paint;
 import android.text.TextPaint;
 
 /**
@@ -27,7 +26,7 @@
 extends CharacterStyle
 implements UpdateLayout {
 
-	public abstract void updateMeasureState(TextPaint p);
+    public abstract void updateMeasureState(TextPaint p);
 
     /**
      * Returns "this" for most MetricAffectingSpans, but for 
diff --git a/core/java/android/text/style/RasterizerSpan.java b/core/java/android/text/style/RasterizerSpan.java
index 75b5bcc..cae9640 100644
--- a/core/java/android/text/style/RasterizerSpan.java
+++ b/core/java/android/text/style/RasterizerSpan.java
@@ -21,18 +21,18 @@
 
 public class RasterizerSpan extends CharacterStyle implements UpdateAppearance {
 
-	private Rasterizer mRasterizer;
+    private Rasterizer mRasterizer;
 
-	public RasterizerSpan(Rasterizer r) {
-		mRasterizer = r;
-	}
+    public RasterizerSpan(Rasterizer r) {
+        mRasterizer = r;
+    }
 
-	public Rasterizer getRasterizer() {
-		return mRasterizer;
-	}
+    public Rasterizer getRasterizer() {
+        return mRasterizer;
+    }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.setRasterizer(mRasterizer);
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.setRasterizer(mRasterizer);
+    }
 }
diff --git a/core/java/android/text/style/RelativeSizeSpan.java b/core/java/android/text/style/RelativeSizeSpan.java
index 9717362..632dbd4 100644
--- a/core/java/android/text/style/RelativeSizeSpan.java
+++ b/core/java/android/text/style/RelativeSizeSpan.java
@@ -23,11 +23,11 @@
 
 public class RelativeSizeSpan extends MetricAffectingSpan implements ParcelableSpan {
 
-	private final float mProportion;
+    private final float mProportion;
 
-	public RelativeSizeSpan(float proportion) {
-		mProportion = proportion;
-	}
+    public RelativeSizeSpan(float proportion) {
+        mProportion = proportion;
+    }
 
     public RelativeSizeSpan(Parcel src) {
         mProportion = src.readFloat();
@@ -45,17 +45,17 @@
         dest.writeFloat(mProportion);
     }
 
-	public float getSizeChange() {
-		return mProportion;
-	}
+    public float getSizeChange() {
+        return mProportion;
+    }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.setTextSize(ds.getTextSize() * mProportion);
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.setTextSize(ds.getTextSize() * mProportion);
+    }
 
-	@Override
-	public void updateMeasureState(TextPaint ds) {
-		ds.setTextSize(ds.getTextSize() * mProportion);
-	}
+    @Override
+    public void updateMeasureState(TextPaint ds) {
+        ds.setTextSize(ds.getTextSize() * mProportion);
+    }
 }
diff --git a/core/java/android/text/style/ScaleXSpan.java b/core/java/android/text/style/ScaleXSpan.java
index 655064b..a22a5a1 100644
--- a/core/java/android/text/style/ScaleXSpan.java
+++ b/core/java/android/text/style/ScaleXSpan.java
@@ -23,11 +23,11 @@
 
 public class ScaleXSpan extends MetricAffectingSpan implements ParcelableSpan {
 
-	private final float mProportion;
+    private final float mProportion;
 
-	public ScaleXSpan(float proportion) {
-		mProportion = proportion;
-	}
+    public ScaleXSpan(float proportion) {
+        mProportion = proportion;
+    }
 
     public ScaleXSpan(Parcel src) {
         mProportion = src.readFloat();
@@ -45,17 +45,17 @@
         dest.writeFloat(mProportion);
     }
 
-	public float getScaleX() {
-		return mProportion;
-	}
+    public float getScaleX() {
+        return mProportion;
+    }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.setTextScaleX(ds.getTextScaleX() * mProportion);
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.setTextScaleX(ds.getTextScaleX() * mProportion);
+    }
 
-	@Override
-	public void updateMeasureState(TextPaint ds) {
-		ds.setTextScaleX(ds.getTextScaleX() * mProportion);
-	}
+    @Override
+    public void updateMeasureState(TextPaint ds) {
+        ds.setTextScaleX(ds.getTextScaleX() * mProportion);
+    }
 }
diff --git a/core/java/android/text/style/StrikethroughSpan.java b/core/java/android/text/style/StrikethroughSpan.java
index b51363a..303e41574 100644
--- a/core/java/android/text/style/StrikethroughSpan.java
+++ b/core/java/android/text/style/StrikethroughSpan.java
@@ -40,8 +40,8 @@
     public void writeToParcel(Parcel dest, int flags) {
     }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.setStrikeThruText(true);
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.setStrikeThruText(true);
+    }
 }
diff --git a/core/java/android/text/style/StyleSpan.java b/core/java/android/text/style/StyleSpan.java
index 8e6147c..b08f70e 100644
--- a/core/java/android/text/style/StyleSpan.java
+++ b/core/java/android/text/style/StyleSpan.java
@@ -33,17 +33,17 @@
  */
 public class StyleSpan extends MetricAffectingSpan implements ParcelableSpan {
 
-	private final int mStyle;
+    private final int mStyle;
 
-	/**
-	 * 
-	 * @param style An integer constant describing the style for this span. Examples
-	 * include bold, italic, and normal. Values are constants defined 
-	 * in {@link android.graphics.Typeface}.
-	 */
-	public StyleSpan(int style) {
-		mStyle = style;
-	}
+    /**
+     * 
+     * @param style An integer constant describing the style for this span. Examples
+     * include bold, italic, and normal. Values are constants defined 
+     * in {@link android.graphics.Typeface}.
+     */
+    public StyleSpan(int style) {
+        mStyle = style;
+    }
 
     public StyleSpan(Parcel src) {
         mStyle = src.readInt();
@@ -61,19 +61,19 @@
         dest.writeInt(mStyle);
     }
 
-	/**
-	 * Returns the style constant defined in {@link android.graphics.Typeface}. 
-	 */
-	public int getStyle() {
-		return mStyle;
-	}
+    /**
+     * Returns the style constant defined in {@link android.graphics.Typeface}. 
+     */
+    public int getStyle() {
+        return mStyle;
+    }
 
-	@Override
+    @Override
     public void updateDrawState(TextPaint ds) {
         apply(ds, mStyle);
     }
 
-	@Override
+    @Override
     public void updateMeasureState(TextPaint paint) {
         apply(paint, mStyle);
     }
diff --git a/core/java/android/text/style/SuggestionSpan.java b/core/java/android/text/style/SuggestionSpan.java
index 0ec7e84..8b40953 100644
--- a/core/java/android/text/style/SuggestionSpan.java
+++ b/core/java/android/text/style/SuggestionSpan.java
@@ -166,25 +166,25 @@
             return;
         }
 
-        int defStyle = com.android.internal.R.attr.textAppearanceMisspelledSuggestion;
+        int defStyleAttr = com.android.internal.R.attr.textAppearanceMisspelledSuggestion;
         TypedArray typedArray = context.obtainStyledAttributes(
-                null, com.android.internal.R.styleable.SuggestionSpan, defStyle, 0);
+                null, com.android.internal.R.styleable.SuggestionSpan, defStyleAttr, 0);
         mMisspelledUnderlineThickness = typedArray.getDimension(
                 com.android.internal.R.styleable.SuggestionSpan_textUnderlineThickness, 0);
         mMisspelledUnderlineColor = typedArray.getColor(
                 com.android.internal.R.styleable.SuggestionSpan_textUnderlineColor, Color.BLACK);
 
-        defStyle = com.android.internal.R.attr.textAppearanceEasyCorrectSuggestion;
+        defStyleAttr = com.android.internal.R.attr.textAppearanceEasyCorrectSuggestion;
         typedArray = context.obtainStyledAttributes(
-                null, com.android.internal.R.styleable.SuggestionSpan, defStyle, 0);
+                null, com.android.internal.R.styleable.SuggestionSpan, defStyleAttr, 0);
         mEasyCorrectUnderlineThickness = typedArray.getDimension(
                 com.android.internal.R.styleable.SuggestionSpan_textUnderlineThickness, 0);
         mEasyCorrectUnderlineColor = typedArray.getColor(
                 com.android.internal.R.styleable.SuggestionSpan_textUnderlineColor, Color.BLACK);
 
-        defStyle = com.android.internal.R.attr.textAppearanceAutoCorrectionSuggestion;
+        defStyleAttr = com.android.internal.R.attr.textAppearanceAutoCorrectionSuggestion;
         typedArray = context.obtainStyledAttributes(
-                null, com.android.internal.R.styleable.SuggestionSpan, defStyle, 0);
+                null, com.android.internal.R.styleable.SuggestionSpan, defStyleAttr, 0);
         mAutoCorrectionUnderlineThickness = typedArray.getDimension(
                 com.android.internal.R.styleable.SuggestionSpan_textUnderlineThickness, 0);
         mAutoCorrectionUnderlineColor = typedArray.getColor(
diff --git a/core/java/android/text/style/UnderlineSpan.java b/core/java/android/text/style/UnderlineSpan.java
index b0cb0e8..80b2427 100644
--- a/core/java/android/text/style/UnderlineSpan.java
+++ b/core/java/android/text/style/UnderlineSpan.java
@@ -40,8 +40,8 @@
     public void writeToParcel(Parcel dest, int flags) {
     }
 
-	@Override
-	public void updateDrawState(TextPaint ds) {
-		ds.setUnderlineText(true);
-	}
+    @Override
+    public void updateDrawState(TextPaint ds) {
+        ds.setUnderlineText(true);
+    }
 }
diff --git a/core/java/android/transition/ChangeClipBounds.java b/core/java/android/transition/ChangeClipBounds.java
new file mode 100644
index 0000000..a61b29d
--- /dev/null
+++ b/core/java/android/transition/ChangeClipBounds.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.animation.Animator;
+import android.animation.ObjectAnimator;
+import android.animation.RectEvaluator;
+import android.graphics.Rect;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * ChangeClipBounds captures the {@link android.view.View#getClipBounds()} before and after the
+ * scene change and animates those changes during the transition.
+ */
+public class ChangeClipBounds extends Transition {
+
+    private static final String TAG = "ChangeTransform";
+
+    private static final String PROPNAME_CLIP = "android:clipBounds:clip";
+    private static final String PROPNAME_BOUNDS = "android:clipBounds:bounds";
+
+    private static final String[] sTransitionProperties = {
+            PROPNAME_CLIP,
+    };
+
+    @Override
+    public String[] getTransitionProperties() {
+        return sTransitionProperties;
+    }
+
+    private void captureValues(TransitionValues values) {
+        View view = values.view;
+        if (view.getVisibility() == View.GONE) {
+            return;
+        }
+
+        Rect clip = view.getClipBounds();
+        values.values.put(PROPNAME_CLIP, clip);
+        if (clip == null) {
+            Rect bounds = new Rect(0, 0, view.getWidth(), view.getHeight());
+            values.values.put(PROPNAME_BOUNDS, bounds);
+        }
+    }
+
+    @Override
+    public void captureStartValues(TransitionValues transitionValues) {
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public void captureEndValues(TransitionValues transitionValues) {
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public Animator createAnimator(final ViewGroup sceneRoot, TransitionValues startValues,
+            TransitionValues endValues) {
+        if (startValues == null || endValues == null
+                || !startValues.values.containsKey(PROPNAME_CLIP)
+                || !endValues.values.containsKey(PROPNAME_CLIP)) {
+            return null;
+        }
+        Rect start = (Rect) startValues.values.get(PROPNAME_CLIP);
+        Rect end = (Rect) endValues.values.get(PROPNAME_CLIP);
+        if (start == null && end == null) {
+            return null; // No animation required since there is no clip.
+        }
+
+        if (start == null) {
+            start = (Rect) startValues.values.get(PROPNAME_BOUNDS);
+        } else if (end == null) {
+            end = (Rect) endValues.values.get(PROPNAME_BOUNDS);
+        }
+        if (start.equals(end)) {
+            return null;
+        }
+
+        endValues.view.setClipBounds(start);
+        RectEvaluator evaluator = new RectEvaluator(new Rect());
+        return ObjectAnimator.ofObject(endValues.view, "clipBounds", evaluator, start, end);
+    }
+}
diff --git a/core/java/android/transition/ChangeTransform.java b/core/java/android/transition/ChangeTransform.java
new file mode 100644
index 0000000..85cb2c7
--- /dev/null
+++ b/core/java/android/transition/ChangeTransform.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.animation.Animator;
+import android.animation.FloatArrayEvaluator;
+import android.animation.ObjectAnimator;
+import android.util.FloatProperty;
+import android.util.Property;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * This Transition captures scale and rotation for Views before and after the
+ * scene change and animates those changes during the transition.
+ *
+ * <p>ChangeTransform does not work when the pivot changes between scenes, so either the
+ * pivot must be set to prevent automatic pivot adjustment or the View's size must be unchanged.</p>
+ */
+public class ChangeTransform extends Transition {
+
+    private static final String TAG = "ChangeTransform";
+
+    private static final String PROPNAME_SCALE_X = "android:changeTransform:scaleX";
+    private static final String PROPNAME_SCALE_Y = "android:changeTransform:scaleY";
+    private static final String PROPNAME_ROTATION_X = "android:changeTransform:rotationX";
+    private static final String PROPNAME_ROTATION_Y = "android:changeTransform:rotationY";
+    private static final String PROPNAME_ROTATION_Z = "android:changeTransform:rotationZ";
+    private static final String PROPNAME_PIVOT_X = "android:changeTransform:pivotX";
+    private static final String PROPNAME_PIVOT_Y = "android:changeTransform:pivotY";
+
+    private static final String[] sTransitionProperties = {
+            PROPNAME_SCALE_X,
+            PROPNAME_SCALE_Y,
+            PROPNAME_ROTATION_X,
+            PROPNAME_ROTATION_Y,
+            PROPNAME_ROTATION_Z,
+    };
+
+    private static final FloatProperty<View>[] sChangedProperties = new FloatProperty[] {
+            (FloatProperty) View.SCALE_X,
+            (FloatProperty) View.SCALE_Y,
+            (FloatProperty) View.ROTATION_X,
+            (FloatProperty) View.ROTATION_Y,
+            (FloatProperty) View.ROTATION,
+    };
+
+    private static Property<View, float[]> TRANSFORMS = new Property<View, float[]>(float[].class,
+            "transforms") {
+        @Override
+        public float[] get(View object) {
+            return null;
+        }
+
+        @Override
+        public void set(View view, float[] values) {
+            for (int i = 0; i < values.length; i++) {
+                float value = values[i];
+                if (value != Float.NaN) {
+                    sChangedProperties[i].setValue(view, value);
+                }
+            }
+        }
+    };
+
+    @Override
+    public String[] getTransitionProperties() {
+        return sTransitionProperties;
+    }
+
+    private void captureValues(TransitionValues values) {
+        View view = values.view;
+        if (view.getVisibility() == View.GONE) {
+            return;
+        }
+
+        values.values.put(PROPNAME_SCALE_X, view.getScaleX());
+        values.values.put(PROPNAME_SCALE_Y, view.getScaleY());
+        values.values.put(PROPNAME_PIVOT_X, view.getPivotX());
+        values.values.put(PROPNAME_PIVOT_Y, view.getPivotY());
+        values.values.put(PROPNAME_ROTATION_X, view.getRotationX());
+        values.values.put(PROPNAME_ROTATION_Y, view.getRotationY());
+        values.values.put(PROPNAME_ROTATION_Z, view.getRotation());
+    }
+
+    @Override
+    public void captureStartValues(TransitionValues transitionValues) {
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public void captureEndValues(TransitionValues transitionValues) {
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public Animator createAnimator(final ViewGroup sceneRoot, TransitionValues startValues,
+            TransitionValues endValues) {
+        if (startValues == null || endValues == null
+                || !startValues.values.containsKey(PROPNAME_SCALE_X)
+                || !endValues.values.containsKey(PROPNAME_SCALE_X)
+                || !isPivotSame(startValues, endValues)
+                || !isChanged(startValues, endValues)) {
+            return null;
+        }
+
+        float[] start = createValues(startValues);
+        float[] end = createValues(endValues);
+        for (int i = 0; i < start.length; i++) {
+            if (start[i] == end[i]) {
+                start[i] = Float.NaN;
+                end[i] = Float.NaN;
+            } else {
+                sChangedProperties[i].setValue(endValues.view, start[i]);
+            }
+        }
+        FloatArrayEvaluator evaluator = new FloatArrayEvaluator(new float[start.length]);
+        return ObjectAnimator.ofObject(endValues.view, TRANSFORMS, evaluator, start, end);
+    }
+
+    private static float[] createValues(TransitionValues transitionValues) {
+        float[] values = new float[sChangedProperties.length];
+        for (int i = 0; i < values.length; i++) {
+            values[i] = (Float) transitionValues.values.get(sTransitionProperties[i]);
+        }
+        return values;
+    }
+
+    private static boolean isPivotSame(TransitionValues startValues, TransitionValues endValues) {
+        float startPivotX = (Float) startValues.values.get(PROPNAME_PIVOT_X);
+        float startPivotY = (Float) startValues.values.get(PROPNAME_PIVOT_Y);
+        float endPivotX = (Float) endValues.values.get(PROPNAME_PIVOT_X);
+        float endPivotY = (Float) endValues.values.get(PROPNAME_PIVOT_Y);
+
+        // We don't support pivot changes, because they could be automatically set
+        // and we can't end the state in an automatic state.
+        return startPivotX == endPivotX && startPivotY == endPivotY;
+    }
+
+    private static boolean isChanged(TransitionValues startValues, TransitionValues endValues) {
+        for (int i = 0; i < sChangedProperties.length; i++) {
+            Object start = startValues.values.get(sTransitionProperties[i]);
+            Object end = endValues.values.get(sTransitionProperties[i]);
+            if (!start.equals(end)) {
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/core/java/android/transition/CircularPropagation.java b/core/java/android/transition/CircularPropagation.java
new file mode 100644
index 0000000..51beb51
--- /dev/null
+++ b/core/java/android/transition/CircularPropagation.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.graphics.Rect;
+import android.util.FloatMath;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * A propagation that varies with the distance to the epicenter of the Transition
+ * or center of the scene if no epicenter exists. When a View is visible in the
+ * start of the transition, Views farther from the epicenter will transition
+ * sooner than Views closer to the epicenter. When a View is not in the start
+ * of the transition or is not visible at the start of the transition, it will
+ * transition sooner when closer to the epicenter and later when farther from
+ * the epicenter. This is the default TransitionPropagation used with
+ * {@link android.transition.Explode}.
+ */
+public class CircularPropagation extends VisibilityPropagation {
+    private static final String TAG = "CircularPropagation";
+
+    private float mPropagationSpeed = 3.0f;
+
+    /**
+     * Sets the speed at which transition propagation happens, relative to the duration of the
+     * Transition. A <code>propagationSpeed</code> of 1 means that a View centered farthest from
+     * the epicenter and View centered at the epicenter will have a difference
+     * in start delay of approximately the duration of the Transition. A speed of 2 means the
+     * start delay difference will be approximately half of the duration of the transition. A
+     * value of 0 is illegal, but negative values will invert the propagation.
+     *
+     * @param propagationSpeed The speed at which propagation occurs, relative to the duration
+     *                         of the transition. A speed of 4 means it works 4 times as fast
+     *                         as the duration of the transition. May not be 0.
+     */
+    public void setPropagationSpeed(float propagationSpeed) {
+        if (propagationSpeed == 0) {
+            throw new IllegalArgumentException("propagationSpeed may not be 0");
+        }
+        mPropagationSpeed = propagationSpeed;
+    }
+
+    @Override
+    public long getStartDelay(ViewGroup sceneRoot, Transition transition,
+            TransitionValues startValues, TransitionValues endValues) {
+        if (startValues == null && endValues == null) {
+            return 0;
+        }
+        int directionMultiplier = 1;
+        TransitionValues positionValues;
+        if (endValues == null || getViewVisibility(startValues) == View.VISIBLE) {
+            positionValues = startValues;
+            directionMultiplier = -1;
+        } else {
+            positionValues = endValues;
+        }
+
+        int viewCenterX = getViewX(positionValues);
+        int viewCenterY = getViewY(positionValues);
+
+        Rect epicenter = transition.getEpicenter();
+        int epicenterX;
+        int epicenterY;
+        if (epicenter != null) {
+            epicenterX = epicenter.centerX();
+            epicenterY = epicenter.centerY();
+        } else {
+            int[] loc = new int[2];
+            sceneRoot.getLocationOnScreen(loc);
+            epicenterX = Math.round(loc[0] + (sceneRoot.getWidth() / 2)
+                    + sceneRoot.getTranslationX());
+            epicenterY = Math.round(loc[1] + (sceneRoot.getHeight() / 2)
+                    + sceneRoot.getTranslationY());
+        }
+        float distance = distance(viewCenterX, viewCenterY, epicenterX, epicenterY);
+        float maxDistance = distance(0, 0, sceneRoot.getWidth(), sceneRoot.getHeight());
+        float distanceFraction = distance/maxDistance;
+
+        long duration = transition.getDuration();
+        if (duration < 0) {
+            duration = 300;
+        }
+
+        return Math.round(duration * directionMultiplier / mPropagationSpeed * distanceFraction);
+    }
+
+    private static float distance(float x1, float y1, float x2, float y2) {
+        float x = x2 - x1;
+        float y = y2 - y1;
+        return FloatMath.sqrt((x * x) + (y * y));
+    }
+}
diff --git a/core/java/android/transition/Explode.java b/core/java/android/transition/Explode.java
new file mode 100644
index 0000000..fae527c
--- /dev/null
+++ b/core/java/android/transition/Explode.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.TimeInterpolator;
+import android.graphics.Path;
+import android.graphics.Rect;
+import android.util.FloatMath;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+
+/**
+ * This transition tracks changes to the visibility of target views in the
+ * start and end scenes and moves views in or out from the edges of the
+ * scene. Visibility is determined by both the
+ * {@link View#setVisibility(int)} state of the view as well as whether it
+ * is parented in the current view hierarchy. Disappearing Views are
+ * limited as described in {@link Visibility#onDisappear(android.view.ViewGroup,
+ * TransitionValues, int, TransitionValues, int)}.
+ * <p>Views move away from the focal View or the center of the Scene if
+ * no epicenter was provided.</p>
+ */
+public class Explode extends Visibility {
+    private static final TimeInterpolator sDecelerate = new DecelerateInterpolator();
+    private static final TimeInterpolator sAccelerate = new AccelerateInterpolator();
+    private static final String TAG = "Explode";
+
+    private static final String PROPNAME_SCREEN_BOUNDS = "android:out:screenBounds";
+
+    private int[] mTempLoc = new int[2];
+
+    public Explode() {
+        setPropagation(new CircularPropagation());
+    }
+
+    private void captureValues(TransitionValues transitionValues) {
+        View view = transitionValues.view;
+        view.getLocationOnScreen(mTempLoc);
+        int left = mTempLoc[0] + Math.round(view.getTranslationX());
+        int top = mTempLoc[1] + Math.round(view.getTranslationY());
+        int right = left + view.getWidth();
+        int bottom = top + view.getHeight();
+        transitionValues.values.put(PROPNAME_SCREEN_BOUNDS, new Rect(left, top, right, bottom));
+    }
+
+    @Override
+    public void captureStartValues(TransitionValues transitionValues) {
+        super.captureStartValues(transitionValues);
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public void captureEndValues(TransitionValues transitionValues) {
+        super.captureEndValues(transitionValues);
+        captureValues(transitionValues);
+    }
+
+    private Animator createAnimation(final View view, float startX, float startY, float endX,
+            float endY, float terminalX, float terminalY, TimeInterpolator interpolator) {
+        view.setTranslationX(startX);
+        view.setTranslationY(startY);
+        if (startY == endY && startX == endX) {
+            return null;
+        }
+        Path path = new Path();
+        path.moveTo(startX, startY);
+        path.lineTo(endX, endY);
+        ObjectAnimator pathAnimator = ObjectAnimator.ofFloat(view, View.TRANSLATION_X,
+                View.TRANSLATION_Y, path);
+        pathAnimator.setInterpolator(interpolator);
+        OutAnimatorListener listener = new OutAnimatorListener(view, terminalX, terminalY,
+                endX, endY);
+        pathAnimator.addListener(listener);
+        pathAnimator.addPauseListener(listener);
+
+        return pathAnimator;
+    }
+
+    @Override
+    public Animator onAppear(ViewGroup sceneRoot, View view,
+            TransitionValues startValues, TransitionValues endValues) {
+        if (endValues == null) {
+            return null;
+        }
+        Rect bounds = (Rect) endValues.values.get(PROPNAME_SCREEN_BOUNDS);
+        calculateOut(sceneRoot, bounds, mTempLoc);
+
+        final float endX = view.getTranslationX();
+        final float startX = endX + mTempLoc[0];
+        final float endY = view.getTranslationY();
+        final float startY = endY + mTempLoc[1];
+
+        return createAnimation(view, startX, startY, endX, endY, endX, endY, sDecelerate);
+    }
+
+    @Override
+    public Animator onDisappear(ViewGroup sceneRoot, View view,
+            TransitionValues startValues, TransitionValues endValues) {
+        Rect bounds = (Rect) startValues.values.get(PROPNAME_SCREEN_BOUNDS);
+        calculateOut(sceneRoot, bounds, mTempLoc);
+
+        final float startX = view.getTranslationX();
+        final float endX = startX + mTempLoc[0];
+        final float startY = view.getTranslationY();
+        final float endY = startY + mTempLoc[1];
+
+        return createAnimation(view, startX, startY, endX, endY, startX, startY,
+                sAccelerate);
+    }
+
+    private void calculateOut(View sceneRoot, Rect bounds, int[] outVector) {
+        sceneRoot.getLocationOnScreen(mTempLoc);
+        int sceneRootX = mTempLoc[0];
+        int sceneRootY = mTempLoc[1];
+        int focalX;
+        int focalY;
+
+        Rect epicenter = getEpicenter();
+        if (epicenter == null) {
+            focalX = sceneRootX + (sceneRoot.getWidth() / 2)
+                    + Math.round(sceneRoot.getTranslationX());
+            focalY = sceneRootY + (sceneRoot.getHeight() / 2)
+                    + Math.round(sceneRoot.getTranslationY());
+        } else {
+            focalX = epicenter.centerX();
+            focalY = epicenter.centerY();
+        }
+
+        int centerX = bounds.centerX();
+        int centerY = bounds.centerY();
+        float xVector = centerX - focalX;
+        float yVector = centerY - focalY;
+
+        if (xVector == 0 && yVector == 0) {
+            // Random direction when View is centered on focal View.
+            xVector = (float)(Math.random() * 2) - 1;
+            yVector = (float)(Math.random() * 2) - 1;
+        }
+        float vectorSize = calculateDistance(xVector, yVector);
+        xVector /= vectorSize;
+        yVector /= vectorSize;
+
+        float maxDistance =
+                calculateMaxDistance(sceneRoot, focalX - sceneRootX, focalY - sceneRootY);
+
+        outVector[0] = Math.round(maxDistance * xVector);
+        outVector[1] = Math.round(maxDistance * yVector);
+    }
+
+    private static float calculateMaxDistance(View sceneRoot, int focalX, int focalY) {
+        int maxX = Math.max(focalX, sceneRoot.getWidth() - focalX);
+        int maxY = Math.max(focalY, sceneRoot.getHeight() - focalY);
+        return calculateDistance(maxX, maxY);
+    }
+
+    private static float calculateDistance(float x, float y) {
+        return FloatMath.sqrt((x * x) + (y * y));
+    }
+
+    private static class OutAnimatorListener extends AnimatorListenerAdapter {
+        private final View mView;
+        private boolean mCanceled = false;
+        private float mPausedX;
+        private float mPausedY;
+        private final float mTerminalX;
+        private final float mTerminalY;
+        private final float mEndX;
+        private final float mEndY;
+
+        public OutAnimatorListener(View view, float terminalX, float terminalY,
+                float endX, float endY) {
+            mView = view;
+            mTerminalX = terminalX;
+            mTerminalY = terminalY;
+            mEndX = endX;
+            mEndY = endY;
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animator) {
+            mView.setTranslationX(mTerminalX);
+            mView.setTranslationY(mTerminalY);
+            mCanceled = true;
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animator) {
+            if (!mCanceled) {
+                mView.setTranslationX(mTerminalX);
+                mView.setTranslationY(mTerminalY);
+            }
+        }
+
+        @Override
+        public void onAnimationPause(Animator animator) {
+            mPausedX = mView.getTranslationX();
+            mPausedY = mView.getTranslationY();
+            mView.setTranslationY(mEndX);
+            mView.setTranslationY(mEndY);
+        }
+
+        @Override
+        public void onAnimationResume(Animator animator) {
+            mView.setTranslationX(mPausedX);
+            mView.setTranslationY(mPausedY);
+        }
+    }
+}
diff --git a/core/java/android/transition/Fade.java b/core/java/android/transition/Fade.java
index 8edb1ff..e70dc0c 100644
--- a/core/java/android/transition/Fade.java
+++ b/core/java/android/transition/Fade.java
@@ -59,8 +59,6 @@
     private static boolean DBG = Transition.DBG && false;
 
     private static final String LOG_TAG = "Fade";
-    private static final String PROPNAME_SCREEN_X = "android:fade:screenX";
-    private static final String PROPNAME_SCREEN_Y = "android:fade:screenY";
 
     /**
      * Fading mode used in {@link #Fade(int)} to make the transition
@@ -98,245 +96,79 @@
     /**
      * Utility method to handle creating and running the Animator.
      */
-    private Animator createAnimation(View view, float startAlpha, float endAlpha,
-            AnimatorListenerAdapter listener) {
+    private Animator createAnimation(View view, float startAlpha, float endAlpha) {
         if (startAlpha == endAlpha) {
-            // run listener if we're noop'ing the animation, to get the end-state results now
-            if (listener != null) {
-                listener.onAnimationEnd(null);
-            }
             return null;
         }
-        final ObjectAnimator anim = ObjectAnimator.ofFloat(view, "transitionAlpha", startAlpha,
-                endAlpha);
+        view.setTransitionAlpha(startAlpha);
+        final ObjectAnimator anim = ObjectAnimator.ofFloat(view, "transitionAlpha", endAlpha);
         if (DBG) {
             Log.d(LOG_TAG, "Created animator " + anim);
         }
-        if (listener != null) {
-            anim.addListener(listener);
-            anim.addPauseListener(listener);
-        }
+        FadeAnimatorListener listener = new FadeAnimatorListener(view);
+        anim.addListener(listener);
+        anim.addPauseListener(listener);
         return anim;
     }
 
-    private void captureValues(TransitionValues transitionValues) {
-        int[] loc = new int[2];
-        transitionValues.view.getLocationOnScreen(loc);
-        transitionValues.values.put(PROPNAME_SCREEN_X, loc[0]);
-        transitionValues.values.put(PROPNAME_SCREEN_Y, loc[1]);
-    }
-
     @Override
-    public void captureStartValues(TransitionValues transitionValues) {
-        super.captureStartValues(transitionValues);
-        captureValues(transitionValues);
-    }
-
-    @Override
-    public Animator onAppear(ViewGroup sceneRoot,
-            TransitionValues startValues, int startVisibility,
-            TransitionValues endValues, int endVisibility) {
+    public Animator onAppear(ViewGroup sceneRoot, View view,
+            TransitionValues startValues,
+            TransitionValues endValues) {
         if ((mFadingMode & IN) != IN || endValues == null) {
             return null;
         }
-        final View endView = endValues.view;
         if (DBG) {
             View startView = (startValues != null) ? startValues.view : null;
             Log.d(LOG_TAG, "Fade.onAppear: startView, startVis, endView, endVis = " +
-                    startView + ", " + startVisibility + ", " + endView + ", " + endVisibility);
+                    startView + ", " + view);
         }
-        endView.setTransitionAlpha(0);
-        TransitionListener transitionListener = new TransitionListenerAdapter() {
-            boolean mCanceled = false;
-            float mPausedAlpha;
-
-            @Override
-            public void onTransitionCancel(Transition transition) {
-                endView.setTransitionAlpha(1);
-                mCanceled = true;
-            }
-
-            @Override
-            public void onTransitionEnd(Transition transition) {
-                if (!mCanceled) {
-                    endView.setTransitionAlpha(1);
-                }
-            }
-
-            @Override
-            public void onTransitionPause(Transition transition) {
-                mPausedAlpha = endView.getTransitionAlpha();
-                endView.setTransitionAlpha(1);
-            }
-
-            @Override
-            public void onTransitionResume(Transition transition) {
-                endView.setTransitionAlpha(mPausedAlpha);
-            }
-        };
-        addListener(transitionListener);
-        return createAnimation(endView, 0, 1, null);
+        return createAnimation(view, 0, 1);
     }
 
     @Override
-    public Animator onDisappear(ViewGroup sceneRoot,
-            TransitionValues startValues, int startVisibility,
-            TransitionValues endValues, int endVisibility) {
+    public Animator onDisappear(ViewGroup sceneRoot, final View view, TransitionValues startValues,
+            TransitionValues endValues) {
         if ((mFadingMode & OUT) != OUT) {
             return null;
         }
-        View view = null;
-        View startView = (startValues != null) ? startValues.view : null;
-        View endView = (endValues != null) ? endValues.view : null;
-        if (DBG) {
-            Log.d(LOG_TAG, "Fade.onDisappear: startView, startVis, endView, endVis = " +
-                        startView + ", " + startVisibility + ", " + endView + ", " + endVisibility);
-        }
-        View overlayView = null;
-        View viewToKeep = null;
-        if (endView == null || endView.getParent() == null) {
-            if (endView != null) {
-                // endView was removed from its parent - add it to the overlay
-                view = overlayView = endView;
-            } else if (startView != null) {
-                // endView does not exist. Use startView only under certain
-                // conditions, because placing a view in an overlay necessitates
-                // it being removed from its current parent
-                if (startView.getParent() == null) {
-                    // no parent - safe to use
-                    view = overlayView = startView;
-                } else if (startView.getParent() instanceof View &&
-                        startView.getParent().getParent() == null) {
-                    View startParent = (View) startView.getParent();
-                    int id = startParent.getId();
-                    if (id != View.NO_ID && sceneRoot.findViewById(id) != null && mCanRemoveViews) {
-                        // no parent, but its parent is unparented  but the parent
-                        // hierarchy has been replaced by a new hierarchy with the same id
-                        // and it is safe to un-parent startView
-                        view = overlayView = startView;
-                    }
-                }
-            }
-        } else {
-            // visibility change
-            if (endVisibility == View.INVISIBLE) {
-                view = endView;
-                viewToKeep = view;
-            } else {
-                // Becoming GONE
-                if (startView == endView) {
-                    view = endView;
-                    viewToKeep = view;
-                } else {
-                    view = startView;
-                    overlayView = view;
-                }
-            }
-        }
-        final int finalVisibility = endVisibility;
-        // TODO: add automatic facility to Visibility superclass for keeping views around
-        if (overlayView != null) {
-            // TODO: Need to do this for general case of adding to overlay
-            int screenX = (Integer) startValues.values.get(PROPNAME_SCREEN_X);
-            int screenY = (Integer) startValues.values.get(PROPNAME_SCREEN_Y);
-            int[] loc = new int[2];
-            sceneRoot.getLocationOnScreen(loc);
-            overlayView.offsetLeftAndRight((screenX - loc[0]) - overlayView.getLeft());
-            overlayView.offsetTopAndBottom((screenY - loc[1]) - overlayView.getTop());
-            sceneRoot.getOverlay().add(overlayView);
-            // TODO: add automatic facility to Visibility superclass for keeping views around
-            final float startAlpha = 1;
-            float endAlpha = 0;
-            final View finalView = view;
-            final View finalOverlayView = overlayView;
-            final View finalViewToKeep = viewToKeep;
-            final ViewGroup finalSceneRoot = sceneRoot;
-            final AnimatorListenerAdapter endListener = new AnimatorListenerAdapter() {
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    finalView.setTransitionAlpha(startAlpha);
-                    // TODO: restore view offset from overlay repositioning
-                    if (finalViewToKeep != null) {
-                        finalViewToKeep.setVisibility(finalVisibility);
-                    }
-                    if (finalOverlayView != null) {
-                        finalSceneRoot.getOverlay().remove(finalOverlayView);
-                    }
-                }
 
-                @Override
-                public void onAnimationPause(Animator animation) {
-                    if (finalOverlayView != null) {
-                        finalSceneRoot.getOverlay().remove(finalOverlayView);
-                    }
-                }
-
-                @Override
-                public void onAnimationResume(Animator animation) {
-                    if (finalOverlayView != null) {
-                        finalSceneRoot.getOverlay().add(finalOverlayView);
-                    }
-                }
-            };
-            return createAnimation(view, startAlpha, endAlpha, endListener);
-        }
-        if (viewToKeep != null) {
-            // TODO: find a different way to do this, like just changing the view to be
-            // VISIBLE for the duration of the transition
-            viewToKeep.setVisibility((View.VISIBLE));
-            // TODO: add automatic facility to Visibility superclass for keeping views around
-            final float startAlpha = 1;
-            float endAlpha = 0;
-            final View finalView = view;
-            final View finalOverlayView = overlayView;
-            final View finalViewToKeep = viewToKeep;
-            final ViewGroup finalSceneRoot = sceneRoot;
-            final AnimatorListenerAdapter endListener = new AnimatorListenerAdapter() {
-                boolean mCanceled = false;
-                float mPausedAlpha = -1;
-
-                @Override
-                public void onAnimationPause(Animator animation) {
-                    if (finalViewToKeep != null && !mCanceled) {
-                        finalViewToKeep.setVisibility(finalVisibility);
-                    }
-                    mPausedAlpha = finalView.getTransitionAlpha();
-                    finalView.setTransitionAlpha(startAlpha);
-                }
-
-                @Override
-                public void onAnimationResume(Animator animation) {
-                    if (finalViewToKeep != null && !mCanceled) {
-                        finalViewToKeep.setVisibility(View.VISIBLE);
-                    }
-                    finalView.setTransitionAlpha(mPausedAlpha);
-                }
-
-                @Override
-                public void onAnimationCancel(Animator animation) {
-                    mCanceled = true;
-                    if (mPausedAlpha >= 0) {
-                        finalView.setTransitionAlpha(mPausedAlpha);
-                    }
-                }
-
-                @Override
-                public void onAnimationEnd(Animator animation) {
-                    if (!mCanceled) {
-                        finalView.setTransitionAlpha(startAlpha);
-                    }
-                    // TODO: restore view offset from overlay repositioning
-                    if (finalViewToKeep != null && !mCanceled) {
-                        finalViewToKeep.setVisibility(finalVisibility);
-                    }
-                    if (finalOverlayView != null) {
-                        finalSceneRoot.getOverlay().remove(finalOverlayView);
-                    }
-                }
-            };
-            return createAnimation(view, startAlpha, endAlpha, endListener);
-        }
-        return null;
+        return createAnimation(view, 1, 0);
     }
 
-}
\ No newline at end of file
+    private static class FadeAnimatorListener extends AnimatorListenerAdapter {
+        private final View mView;
+        private boolean mCanceled = false;
+        private float mPausedAlpha = -1;
+
+        public FadeAnimatorListener(View view) {
+            mView = view;
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animator) {
+            mCanceled = true;
+            if (mPausedAlpha >= 0) {
+                mView.setTransitionAlpha(mPausedAlpha);
+            }
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animator) {
+            if (!mCanceled) {
+                mView.setTransitionAlpha(1);
+            }
+        }
+
+        @Override
+        public void onAnimationPause(Animator animator) {
+            mPausedAlpha = mView.getTransitionAlpha();
+            mView.setTransitionAlpha(1);
+        }
+
+        @Override
+        public void onAnimationResume(Animator animator) {
+            mView.setTransitionAlpha(mPausedAlpha);
+        }
+    }
+}
diff --git a/core/java/android/transition/MatrixClippedDrawable.java b/core/java/android/transition/MatrixClippedDrawable.java
new file mode 100644
index 0000000..ebaad59
--- /dev/null
+++ b/core/java/android/transition/MatrixClippedDrawable.java
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.util.Property;
+
+/**
+ * Used in MoveImage to mock an ImageView as a Drawable to be scaled in the scene root Overlay.
+ * @hide
+ */
+class MatrixClippedDrawable extends Drawable implements Drawable.Callback {
+    private static final String TAG = "MatrixClippedDrawable";
+
+    private ClippedMatrixState mClippedMatrixState;
+
+    public static final Property<MatrixClippedDrawable, Rect> CLIP_PROPERTY
+            = new Property<MatrixClippedDrawable, Rect>(Rect.class, "clipRect") {
+
+        @Override
+        public Rect get(MatrixClippedDrawable object) {
+            return object.getClipRect();
+        }
+
+        @Override
+        public void set(MatrixClippedDrawable object, Rect value) {
+            object.setClipRect(value);
+        }
+    };
+
+    public static final Property<MatrixClippedDrawable, Matrix> MATRIX_PROPERTY
+            = new Property<MatrixClippedDrawable, Matrix>(Matrix.class, "matrix") {
+        @Override
+        public void set(MatrixClippedDrawable object, Matrix value) {
+            object.setMatrix(value);
+        }
+
+        @Override
+        public Matrix get(MatrixClippedDrawable object) {
+            return object.getMatrix();
+        }
+    };
+
+    public MatrixClippedDrawable(Drawable drawable) {
+        this(null, null);
+
+        mClippedMatrixState.mDrawable = drawable;
+
+        if (drawable != null) {
+            drawable.setCallback(this);
+        }
+    }
+
+    public void setMatrix(Matrix matrix) {
+        if (matrix == null) {
+            mClippedMatrixState.mMatrix = null;
+        } else {
+            if (mClippedMatrixState.mMatrix == null) {
+                mClippedMatrixState.mMatrix = new Matrix();
+            }
+            mClippedMatrixState.mMatrix.set(matrix);
+        }
+        invalidateSelf();
+    }
+
+    public Matrix getMatrix() {
+        return mClippedMatrixState.mMatrix;
+    }
+
+    public Rect getClipRect() {
+        return mClippedMatrixState.mClipRect;
+    }
+
+    public void setClipRect(Rect clipRect) {
+        if (clipRect == null) {
+            if (mClippedMatrixState.mClipRect != null) {
+                mClippedMatrixState.mClipRect = null;
+                invalidateSelf();
+            }
+        } else {
+            if (mClippedMatrixState.mClipRect == null) {
+                mClippedMatrixState.mClipRect = new Rect(clipRect);
+            } else {
+                mClippedMatrixState.mClipRect.set(clipRect);
+            }
+            invalidateSelf();
+        }
+    }
+
+    // overrides from Drawable.Callback
+
+    public void invalidateDrawable(Drawable who) {
+        final Drawable.Callback callback = getCallback();
+        if (callback != null) {
+            callback.invalidateDrawable(this);
+        }
+    }
+
+    public void scheduleDrawable(Drawable who, Runnable what, long when) {
+        final Drawable.Callback callback = getCallback();
+        if (callback != null) {
+            callback.scheduleDrawable(this, what, when);
+        }
+    }
+
+    public void unscheduleDrawable(Drawable who, Runnable what) {
+        final Drawable.Callback callback = getCallback();
+        if (callback != null) {
+            callback.unscheduleDrawable(this, what);
+        }
+    }
+
+    // overrides from Drawable
+
+    @Override
+    public int getChangingConfigurations() {
+        return super.getChangingConfigurations()
+                | mClippedMatrixState.mChangingConfigurations
+                | mClippedMatrixState.mDrawable.getChangingConfigurations();
+    }
+
+    @Override
+    public boolean getPadding(Rect padding) {
+        // XXX need to adjust padding!
+        return mClippedMatrixState.mDrawable.getPadding(padding);
+    }
+
+    @Override
+    public boolean setVisible(boolean visible, boolean restart) {
+        mClippedMatrixState.mDrawable.setVisible(visible, restart);
+        return super.setVisible(visible, restart);
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+        mClippedMatrixState.mDrawable.setAlpha(alpha);
+    }
+
+    @Override
+    public int getAlpha() {
+        return mClippedMatrixState.mDrawable.getAlpha();
+    }
+
+    @Override
+    public void setColorFilter(ColorFilter cf) {
+        mClippedMatrixState.mDrawable.setColorFilter(cf);
+    }
+
+    @Override
+    public int getOpacity() {
+        return mClippedMatrixState.mDrawable.getOpacity();
+    }
+
+    @Override
+    public boolean isStateful() {
+        return mClippedMatrixState.mDrawable.isStateful();
+    }
+
+    @Override
+    protected boolean onStateChange(int[] state) {
+        return mClippedMatrixState.mDrawable.setState(state);
+    }
+
+    @Override
+    protected boolean onLevelChange(int level) {
+        mClippedMatrixState.mDrawable.setLevel(level);
+        invalidateSelf();
+        return true;
+    }
+
+    @Override
+    protected void onBoundsChange(Rect bounds) {
+        super.setBounds(bounds);
+        if (mClippedMatrixState.mMatrix == null) {
+            mClippedMatrixState.mDrawable.setBounds(bounds);
+        } else {
+            int drawableWidth = mClippedMatrixState.mDrawable.getIntrinsicWidth();
+            int drawableHeight = mClippedMatrixState.mDrawable.getIntrinsicHeight();
+            mClippedMatrixState.mDrawable.setBounds(bounds.left, bounds.top,
+                    drawableWidth + bounds.left, drawableHeight + bounds.top);
+        }
+        invalidateSelf();
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        Rect bounds = getBounds();
+        int left = bounds.left;
+        int top = bounds.top;
+        int saveCount = canvas.getSaveCount();
+        canvas.save();
+        if (mClippedMatrixState.mClipRect != null) {
+            canvas.clipRect(mClippedMatrixState.mClipRect);
+        } else {
+            canvas.clipRect(bounds);
+        }
+
+        if (mClippedMatrixState != null && !mClippedMatrixState.mMatrix.isIdentity()) {
+            canvas.translate(left, top);
+            canvas.concat(mClippedMatrixState.mMatrix);
+            canvas.translate(-left, -top);
+        }
+        mClippedMatrixState.mDrawable.draw(canvas);
+        canvas.restoreToCount(saveCount);
+    }
+
+    @Override
+    public int getIntrinsicWidth() {
+        return mClippedMatrixState.mDrawable.getIntrinsicWidth();
+    }
+
+    @Override
+    public int getIntrinsicHeight() {
+        return mClippedMatrixState.mDrawable.getIntrinsicHeight();
+    }
+
+    @Override
+    public Drawable.ConstantState getConstantState() {
+        if (mClippedMatrixState.canConstantState()) {
+            mClippedMatrixState.mChangingConfigurations = getChangingConfigurations();
+            return mClippedMatrixState;
+        }
+        return null;
+    }
+
+    final static class ClippedMatrixState extends Drawable.ConstantState {
+        Drawable mDrawable;
+        Matrix mMatrix;
+        Rect mClipRect;
+
+        private boolean mCheckedConstantState;
+        private boolean mCanConstantState;
+        int mChangingConfigurations;
+
+        ClippedMatrixState(ClippedMatrixState orig, MatrixClippedDrawable owner, Resources res) {
+            if (orig != null) {
+                if (res != null) {
+                    mDrawable = orig.mDrawable.getConstantState().newDrawable(res);
+                } else {
+                    mDrawable = orig.mDrawable.getConstantState().newDrawable();
+                }
+                mDrawable.setCallback(owner);
+                mCheckedConstantState = mCanConstantState = true;
+                if (orig.mMatrix != null) {
+                    mMatrix = new Matrix(orig.mMatrix);
+                }
+                if (orig.mClipRect != null) {
+                    mClipRect = new Rect(orig.mClipRect);
+                }
+            }
+        }
+
+        @Override
+        public Drawable newDrawable() {
+            return new MatrixClippedDrawable(this, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res) {
+            return new MatrixClippedDrawable(this, res);
+        }
+
+        @Override
+        public int getChangingConfigurations() {
+            return mChangingConfigurations;
+        }
+
+        boolean canConstantState() {
+            if (!mCheckedConstantState) {
+                mCanConstantState = mDrawable.getConstantState() != null;
+                mCheckedConstantState = true;
+            }
+
+            return mCanConstantState;
+        }
+    }
+
+    private MatrixClippedDrawable(ClippedMatrixState state, Resources res) {
+        mClippedMatrixState = new ClippedMatrixState(state, this, res);
+    }
+
+}
diff --git a/core/java/android/transition/MoveImage.java b/core/java/android/transition/MoveImage.java
new file mode 100644
index 0000000..e4c3939
--- /dev/null
+++ b/core/java/android/transition/MoveImage.java
@@ -0,0 +1,338 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.animation.RectEvaluator;
+import android.animation.TypeEvaluator;
+import android.animation.ValueAnimator;
+import android.graphics.Matrix;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.drawable.Drawable;
+import android.util.FloatMath;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewGroupOverlay;
+import android.view.ViewParent;
+import android.widget.ImageView;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * Transitions ImageViews, including size, scaleType, and matrix. The ImageView drawable
+ * must remain the same between both start and end states, but the
+ * {@link ImageView#setScaleType(android.widget.ImageView.ScaleType)} may
+ * differ.
+ */
+public class MoveImage extends Transition {
+    private static final String TAG = "MoveImage";
+    private static final String PROPNAME_MATRIX = "android:moveImage:matrix";
+    private static final String PROPNAME_BOUNDS = "android:moveImage:bounds";
+    private static final String PROPNAME_CLIP = "android:moveImage:clip";
+    private static final String PROPNAME_DRAWABLE = "android:moveImage:drawable";
+
+    private int[] mTempLoc = new int[2];
+
+    private static final String[] sTransitionProperties = {
+            PROPNAME_MATRIX,
+            PROPNAME_BOUNDS,
+            PROPNAME_CLIP,
+            PROPNAME_DRAWABLE,
+    };
+
+    private void captureValues(TransitionValues transitionValues) {
+        View view = transitionValues.view;
+        if (!(view instanceof ImageView) || view.getVisibility() != View.VISIBLE) {
+            return;
+        }
+        Map<String, Object> values = transitionValues.values;
+
+        ViewGroup parent = (ViewGroup) view.getParent();
+        parent.getLocationInWindow(mTempLoc);
+        int paddingLeft = view.getPaddingLeft();
+        int paddingTop = view.getPaddingTop();
+        int paddingRight = view.getPaddingRight();
+        int paddingBottom = view.getPaddingBottom();
+        int left = mTempLoc[0] + paddingLeft + view.getLeft() + Math.round(view.getTranslationX());
+        int top = mTempLoc[1] + paddingTop + view.getTop() + Math.round(view.getTranslationY());
+        int right = left + view.getWidth() - paddingRight - paddingLeft;
+        int bottom = top + view.getHeight() - paddingTop - paddingBottom;
+
+        Rect bounds = new Rect(left, top, right, bottom);
+        values.put(PROPNAME_BOUNDS, bounds);
+        ImageView imageView = (ImageView) view;
+        Matrix matrix = getMatrix(imageView);
+        values.put(PROPNAME_MATRIX, matrix);
+        values.put(PROPNAME_CLIP, findClip(imageView));
+        values.put(PROPNAME_DRAWABLE, imageView.getDrawable());
+    }
+
+    @Override
+    public void captureStartValues(TransitionValues transitionValues) {
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public void captureEndValues(TransitionValues transitionValues) {
+        captureValues(transitionValues);
+    }
+
+    @Override
+    public String[] getTransitionProperties() {
+        return sTransitionProperties;
+    }
+
+    /**
+     * Creates an Animator for ImageViews moving, changing dimensions, and/or changing
+     * {@link android.widget.ImageView.ScaleType}.
+     * @param sceneRoot The root of the transition hierarchy.
+     * @param startValues The values for a specific target in the start scene.
+     * @param endValues The values for the target in the end scene.
+     * @return An Animator to move an ImageView or null if the View is not an ImageView,
+     * the Drawable changed, the View is not VISIBLE, or there was no change.
+     */
+    @Override
+    public Animator createAnimator(ViewGroup sceneRoot, TransitionValues startValues,
+            TransitionValues endValues) {
+        if (startValues == null || endValues == null
+                || startValues.values.get(PROPNAME_BOUNDS) == null
+                || endValues.values.get(PROPNAME_BOUNDS) == null
+                || startValues.values.get(PROPNAME_DRAWABLE)
+                        != endValues.values.get(PROPNAME_DRAWABLE)) {
+            return null;
+        }
+        ArrayList<PropertyValuesHolder> changes = new ArrayList<PropertyValuesHolder>();
+
+        Matrix startMatrix = (Matrix) startValues.values.get(PROPNAME_MATRIX);
+        Matrix endMatrix = (Matrix) endValues.values.get(PROPNAME_MATRIX);
+
+        if (!startMatrix.equals(endMatrix)) {
+            changes.add(PropertyValuesHolder.ofObject(MatrixClippedDrawable.MATRIX_PROPERTY,
+                    new MatrixEvaluator(), startMatrix, endMatrix));
+        }
+
+        sceneRoot.getLocationInWindow(mTempLoc);
+        int rootX = mTempLoc[0];
+        int rootY = mTempLoc[1];
+        final ImageView imageView = (ImageView) endValues.view;
+
+        Drawable drawable = imageView.getDrawable();
+
+        Rect startBounds = new Rect((Rect) startValues.values.get(PROPNAME_BOUNDS));
+        Rect endBounds = new Rect((Rect) endValues.values.get(PROPNAME_BOUNDS));
+        startBounds.offset(-rootX, -rootY);
+        endBounds.offset(-rootX, -rootY);
+
+        if (!startBounds.equals(endBounds)) {
+            changes.add(PropertyValuesHolder.ofObject("bounds", new RectEvaluator(new Rect()),
+                    startBounds, endBounds));
+        }
+
+        Rect startClip = (Rect) startValues.values.get(PROPNAME_CLIP);
+        Rect endClip = (Rect) endValues.values.get(PROPNAME_CLIP);
+        if (startClip != null || endClip != null) {
+            startClip = nonNullClip(startClip, sceneRoot, rootX, rootY);
+            endClip = nonNullClip(endClip, sceneRoot, rootX, rootY);
+
+            expandClip(startBounds, startMatrix, startClip, endClip);
+            expandClip(endBounds, endMatrix, endClip, startClip);
+            boolean clipped = !startClip.contains(startBounds) || !endClip.contains(endBounds);
+            if (!clipped) {
+                startClip = null;
+            } else if (!startClip.equals(endClip)) {
+                changes.add(PropertyValuesHolder.ofObject(MatrixClippedDrawable.CLIP_PROPERTY,
+                        new RectEvaluator(), startClip, endClip));
+            }
+        }
+
+        if (changes.isEmpty()) {
+            return null;
+        }
+
+        drawable = drawable.getConstantState().newDrawable();
+        final MatrixClippedDrawable matrixClippedDrawable = new MatrixClippedDrawable(drawable);
+        final ImageView overlayImage = new ImageView(imageView.getContext());
+        final ViewGroupOverlay overlay = sceneRoot.getOverlay();
+        overlay.add(overlayImage);
+        overlayImage.setLeft(0);
+        overlayImage.setTop(0);
+        overlayImage.setRight(sceneRoot.getWidth());
+        overlayImage.setBottom(sceneRoot.getBottom());
+        overlayImage.setScaleType(ImageView.ScaleType.MATRIX);
+        overlayImage.setImageDrawable(matrixClippedDrawable);
+        matrixClippedDrawable.setMatrix(startMatrix);
+        matrixClippedDrawable.setBounds(startBounds);
+        matrixClippedDrawable.setClipRect(startClip);
+
+        imageView.setVisibility(View.INVISIBLE);
+        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(matrixClippedDrawable,
+                changes.toArray(new PropertyValuesHolder[changes.size()]));
+
+        AnimatorListenerAdapter listener = new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                imageView.setVisibility(View.VISIBLE);
+                overlay.remove(overlayImage);
+            }
+
+            @Override
+            public void onAnimationPause(Animator animation) {
+                imageView.setVisibility(View.VISIBLE);
+                overlayImage.setVisibility(View.INVISIBLE);
+            }
+
+            @Override
+            public void onAnimationResume(Animator animation) {
+                imageView.setVisibility(View.INVISIBLE);
+                overlayImage.setVisibility(View.VISIBLE);
+            }
+
+            @Override
+            public void onAnimationCancel(Animator animation) {
+                onAnimationEnd(animation);
+            }
+        };
+
+        animator.addListener(listener);
+        animator.addPauseListener(listener);
+
+        return animator;
+    }
+
+    private static Rect nonNullClip(Rect clip, ViewGroup sceneRoot, int rootX, int rootY) {
+        if (clip != null) {
+            clip = new Rect(clip);
+            clip.offset(-rootX, -rootY);
+        } else {
+            clip = new Rect(0, 0, sceneRoot.getWidth(), sceneRoot.getHeight());
+        }
+        return clip;
+    }
+
+    private static void expandClip(Rect bounds, Matrix matrix, Rect clip, Rect otherClip) {
+        RectF boundsF = new RectF(bounds);
+        matrix.mapRect(boundsF);
+        clip.left = expandMinDimension(boundsF.left, clip.left, otherClip.left);
+        clip.top = expandMinDimension(boundsF.top, clip.top, otherClip.top);
+        clip.right = expandMaxDimension(boundsF.right, clip.right, otherClip.right);
+        clip.bottom = expandMaxDimension(boundsF.bottom, clip.bottom, otherClip.bottom);
+    }
+
+    private static int expandMinDimension(float boundsDimension, int clipDimension,
+            int otherClipDimension) {
+        if (clipDimension > boundsDimension) {
+            // Already clipped in that dimension, return the clipped value
+            return clipDimension;
+        }
+        return Math.min(clipDimension, otherClipDimension);
+    }
+
+    private static int expandMaxDimension(float boundsDimension, int clipDimension,
+            int otherClipDimension) {
+        return -expandMinDimension(-boundsDimension, -clipDimension, -otherClipDimension);
+    }
+
+    private static Matrix getMatrix(ImageView imageView) {
+        Drawable drawable = imageView.getDrawable();
+        int drawableWidth = drawable.getIntrinsicWidth();
+        int drawableHeight = drawable.getIntrinsicHeight();
+        ImageView.ScaleType scaleType = imageView.getScaleType();
+        if (drawableWidth <= 0 || drawableHeight <= 0 || scaleType == ImageView.ScaleType.FIT_XY) {
+            return null;
+        }
+        return new Matrix(imageView.getImageMatrix());
+    }
+
+    private Rect findClip(ImageView imageView) {
+        if (imageView.getCropToPadding()) {
+            Rect clip = getClip(imageView);
+            clip.left += imageView.getPaddingLeft();
+            clip.right -= imageView.getPaddingRight();
+            clip.top += imageView.getPaddingTop();
+            clip.bottom -= imageView.getPaddingBottom();
+            return clip;
+        } else {
+            View view = imageView;
+            ViewParent viewParent;
+            while ((viewParent = view.getParent()) instanceof ViewGroup) {
+                ViewGroup viewGroup = (ViewGroup) viewParent;
+                if (viewGroup.getClipChildren()) {
+                    Rect clip = getClip(view);
+                    return clip;
+                }
+                view = viewGroup;
+            }
+        }
+        return null;
+    }
+
+    private Rect getClip(View clipView) {
+        Rect clipBounds = clipView.getClipBounds();
+        if (clipBounds == null) {
+            clipBounds = new Rect(clipView.getLeft(), clipView.getTop(),
+                    clipView.getRight(), clipView.getBottom());
+        }
+
+        ViewParent parent = clipView.getParent();
+        if (parent instanceof ViewGroup) {
+            ViewGroup parentViewGroup = (ViewGroup) parent;
+            parentViewGroup.getLocationInWindow(mTempLoc);
+            clipBounds.offset(mTempLoc[0], mTempLoc[1]);
+        }
+
+        return clipBounds;
+    }
+
+    @Override
+    public Transition clone() {
+        MoveImage clone = (MoveImage) super.clone();
+        clone.mTempLoc = new int[2];
+        return clone;
+    }
+
+    private static class MatrixEvaluator implements TypeEvaluator<Matrix> {
+        static final Matrix sIdentity = new Matrix();
+        float[] mTempStartValues = new float[9];
+        float[] mTempEndValues = new float[9];
+        Matrix mTempMatrix = new Matrix();
+
+        @Override
+        public Matrix evaluate(float fraction, Matrix startValue, Matrix endValue) {
+            if (startValue == null && endValue == null) {
+                return null;
+            }
+            if (startValue == null) {
+                startValue = sIdentity;
+            } else if (endValue == null) {
+                endValue = sIdentity;
+            }
+            startValue.getValues(mTempStartValues);
+            endValue.getValues(mTempEndValues);
+            for (int i = 0; i < 9; i++) {
+                float diff = mTempEndValues[i] - mTempStartValues[i];
+                mTempEndValues[i] = mTempStartValues[i] + (fraction * diff);
+            }
+            mTempMatrix.setValues(mTempEndValues);
+            return mTempMatrix;
+        }
+    }
+}
diff --git a/core/java/android/transition/Recolor.java b/core/java/android/transition/Recolor.java
index 70111d1..1638f67 100644
--- a/core/java/android/transition/Recolor.java
+++ b/core/java/android/transition/Recolor.java
@@ -17,7 +17,6 @@
 package android.transition;
 
 import android.animation.Animator;
-import android.animation.ArgbEvaluator;
 import android.animation.ObjectAnimator;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -75,8 +74,8 @@
             if (startColor.getColor() != endColor.getColor()) {
                 endColor.setColor(startColor.getColor());
                 changed = true;
-                return ObjectAnimator.ofObject(endBackground, "color",
-                        new ArgbEvaluator(), startColor.getColor(), endColor.getColor());
+                return ObjectAnimator.ofArgb(endBackground, "color", startColor.getColor(),
+                        endColor.getColor());
             }
         }
         if (view instanceof TextView) {
@@ -86,8 +85,7 @@
             if (start != end) {
                 textView.setTextColor(end);
                 changed = true;
-                return ObjectAnimator.ofObject(textView, "textColor",
-                        new ArgbEvaluator(), start, end);
+                return ObjectAnimator.ofArgb(textView, "textColor", start, end);
             }
         }
         return null;
diff --git a/core/java/android/transition/Scene.java b/core/java/android/transition/Scene.java
index e1f1896..4267a65 100644
--- a/core/java/android/transition/Scene.java
+++ b/core/java/android/transition/Scene.java
@@ -34,7 +34,7 @@
     private Context mContext;
     private int mLayoutId = -1;
     private ViewGroup mSceneRoot;
-    private ViewGroup mLayout; // alternative to layoutId
+    private View mLayout; // alternative to layoutId
     Runnable mEnterAction, mExitAction;
 
     /**
@@ -114,6 +114,15 @@
      * @param layout The view hierarchy of this scene, added as a child
      * of sceneRoot when this scene is entered.
      */
+    public Scene(ViewGroup sceneRoot, View layout) {
+        mSceneRoot = sceneRoot;
+        mLayout = layout;
+    }
+
+    /**
+     * @deprecated use {@link #Scene(ViewGroup, View)}.
+     */
+    @Deprecated
     public Scene(ViewGroup sceneRoot, ViewGroup layout) {
         mSceneRoot = sceneRoot;
         mLayout = layout;
diff --git a/core/java/android/transition/SidePropagation.java b/core/java/android/transition/SidePropagation.java
new file mode 100644
index 0000000..5d38ac8
--- /dev/null
+++ b/core/java/android/transition/SidePropagation.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.graphics.Rect;
+import android.util.FloatMath;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+/**
+ * A <code>TransitionPropagation</code> that propagates based on the distance to the side
+ * and, orthogonally, the distance to epicenter. If the transitioning View is visible in
+ * the start of the transition, then it will transition sooner when closer to the side and
+ * later when farther. If the view is not visible in the start of the transition, then
+ * it will transition later when closer to the side and sooner when farther from the edge.
+ * This is the default TransitionPropagation used with {@link android.transition.Slide}.
+ */
+public class SidePropagation extends VisibilityPropagation {
+    private static final String TAG = "SlidePropagation";
+
+    /**
+     * Transition propagates relative to the distance of the left side of the scene.
+     */
+    public static final int LEFT = Slide.LEFT;
+
+    /**
+     * Transition propagates relative to the distance of the top of the scene.
+     */
+    public static final int TOP = Slide.TOP;
+
+    /**
+     * Transition propagates relative to the distance of the right side of the scene.
+     */
+    public static final int RIGHT = Slide.RIGHT;
+
+    /**
+     * Transition propagates relative to the distance of the bottom of the scene.
+     */
+    public static final int BOTTOM = Slide.BOTTOM;
+
+    private float mPropagationSpeed = 3.0f;
+    private int mSide = BOTTOM;
+
+    /**
+     * Sets the side that is used to calculate the transition propagation. If the transitioning
+     * View is visible in the start of the transition, then it will transition sooner when
+     * closer to the side and later when farther. If the view is not visible in the start of
+     * the transition, then it will transition later when closer to the side and sooner when
+     * farther from the edge. The default is {@link #BOTTOM}.
+     *
+     * @param side The side that is used to calculate the transition propagation. Must be one of
+     *             {@link #LEFT}, {@link #TOP}, {@link #RIGHT}, or {@link #BOTTOM}.
+     */
+    public void setSide(int side) {
+        mSide = side;
+    }
+
+    /**
+     * Sets the speed at which transition propagation happens, relative to the duration of the
+     * Transition. A <code>propagationSpeed</code> of 1 means that a View centered at the side
+     * set in {@link #setSide(int)} and View centered at the opposite edge will have a difference
+     * in start delay of approximately the duration of the Transition. A speed of 2 means the
+     * start delay difference will be approximately half of the duration of the transition. A
+     * value of 0 is illegal, but negative values will invert the propagation.
+     *
+     * @param propagationSpeed The speed at which propagation occurs, relative to the duration
+     *                         of the transition. A speed of 4 means it works 4 times as fast
+     *                         as the duration of the transition. May not be 0.
+     */
+    public void setPropagationSpeed(float propagationSpeed) {
+        if (propagationSpeed == 0) {
+            throw new IllegalArgumentException("propagationSpeed may not be 0");
+        }
+        mPropagationSpeed = propagationSpeed;
+    }
+
+    @Override
+    public long getStartDelay(ViewGroup sceneRoot, Transition transition,
+            TransitionValues startValues, TransitionValues endValues) {
+        if (startValues == null && endValues == null) {
+            return 0;
+        }
+        int directionMultiplier = 1;
+        Rect epicenter = transition.getEpicenter();
+        TransitionValues positionValues;
+        if (endValues == null || getViewVisibility(startValues) == View.VISIBLE) {
+            positionValues = startValues;
+            directionMultiplier = -1;
+        } else {
+            positionValues = endValues;
+        }
+
+        int viewCenterX = getViewX(positionValues);
+        int viewCenterY = getViewY(positionValues);
+
+        int[] loc = new int[2];
+        sceneRoot.getLocationOnScreen(loc);
+        int left = loc[0] + Math.round(sceneRoot.getTranslationX());
+        int top = loc[1] + Math.round(sceneRoot.getTranslationY());
+        int right = left + sceneRoot.getWidth();
+        int bottom = top + sceneRoot.getHeight();
+
+        int epicenterX;
+        int epicenterY;
+        if (epicenter != null) {
+            epicenterX = epicenter.centerX();
+            epicenterY = epicenter.centerY();
+        } else {
+            epicenterX = (left + right) / 2;
+            epicenterY = (top + bottom) / 2;
+        }
+
+        float distance = distance(viewCenterX, viewCenterY, epicenterX, epicenterY,
+                left, top, right, bottom);
+        float maxDistance = getMaxDistance(sceneRoot);
+        float distanceFraction = distance/maxDistance;
+
+        long duration = transition.getDuration();
+        if (duration < 0) {
+            duration = 300;
+        }
+
+        return Math.round(duration * directionMultiplier / mPropagationSpeed * distanceFraction);
+    }
+
+    private int distance(int viewX, int viewY, int epicenterX, int epicenterY,
+            int left, int top, int right, int bottom) {
+        int distance = 0;
+        switch (mSide) {
+            case LEFT:
+                distance = right - viewX + Math.abs(epicenterY - viewY);
+                break;
+            case TOP:
+                distance = bottom - viewY + Math.abs(epicenterX - viewX);
+                break;
+            case RIGHT:
+                distance = viewX - left + Math.abs(epicenterY - viewY);
+                break;
+            case BOTTOM:
+                distance = viewY - top + Math.abs(epicenterX - viewX);
+                break;
+        }
+        return distance;
+    }
+
+    private int getMaxDistance(ViewGroup sceneRoot) {
+        switch (mSide) {
+            case LEFT:
+            case RIGHT:
+                return sceneRoot.getWidth();
+            default:
+                return sceneRoot.getHeight();
+        }
+    }
+}
diff --git a/core/java/android/transition/Slide.java b/core/java/android/transition/Slide.java
index b38973c..0ff8ddd 100644
--- a/core/java/android/transition/Slide.java
+++ b/core/java/android/transition/Slide.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2013 The Android Open Source Project
+ * Copyright (C) 2014 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.
@@ -13,53 +13,240 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package android.transition;
 
 import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.animation.TimeInterpolator;
+import android.animation.ValueAnimator;
+import android.graphics.Rect;
+import android.util.Log;
+import android.util.Property;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.DecelerateInterpolator;
 
 /**
- * This transition captures the visibility of target objects before and
- * after a scene change and animates any changes by sliding the target
- * objects into or out of place.
- *
- * @hide
+ * This transition tracks changes to the visibility of target views in the
+ * start and end scenes and moves views in or out from one of the edges of the
+ * scene. Visibility is determined by both the
+ * {@link View#setVisibility(int)} state of the view as well as whether it
+ * is parented in the current view hierarchy. Disappearing Views are
+ * limited as described in {@link Visibility#onDisappear(android.view.ViewGroup,
+ * TransitionValues, int, TransitionValues, int)}.
  */
 public class Slide extends Visibility {
+    private static final String TAG = "Slide";
 
-    // TODO: Add parameter for sliding factor - it's hard-coded below
+    /**
+     * Move Views in or out of the left edge of the scene.
+     * @see #setSlideEdge(int)
+     */
+    public static final int LEFT = 0;
 
-    private static final TimeInterpolator sAccelerator = new AccelerateInterpolator();
-    private static final TimeInterpolator sDecelerator = new DecelerateInterpolator();
+    /**
+     * Move Views in or out of the top edge of the scene.
+     * @see #setSlideEdge(int)
+     */
+    public static final int TOP = 1;
 
-    @Override
-    public Animator onAppear(ViewGroup sceneRoot,
-            TransitionValues startValues, int startVisibility,
-            TransitionValues endValues, int endVisibility) {
-        View endView = (endValues != null) ? endValues.view : null;
-        endView.setTranslationY(-2 * endView.getHeight());
-        ObjectAnimator anim = ObjectAnimator.ofFloat(endView, View.TRANSLATION_Y,
-                -2 * endView.getHeight(), 0);
-        anim.setInterpolator(sDecelerator);
+    /**
+     * Move Views in or out of the right edge of the scene.
+     * @see #setSlideEdge(int)
+     */
+    public static final int RIGHT = 2;
+
+    /**
+     * Move Views in or out of the bottom edge of the scene. This is the
+     * default slide direction.
+     * @see #setSlideEdge(int)
+     */
+    public static final int BOTTOM = 3;
+
+    private static final TimeInterpolator sDecelerate = new DecelerateInterpolator();
+    private static final TimeInterpolator sAccelerate = new AccelerateInterpolator();
+
+    private int[] mTempLoc = new int[2];
+    private CalculateSlide mSlideCalculator = sCalculateBottom;
+
+    private interface CalculateSlide {
+        /** Returns the translation value for view when it out of the scene */
+        float getGone(ViewGroup sceneRoot, View view);
+
+        /** Returns the translation value for view when it is in the scene */
+        float getHere(View view);
+
+        /** Returns the property to animate translation */
+        Property<View, Float> getProperty();
+    }
+
+    private static abstract class CalculateSlideHorizontal implements CalculateSlide {
+        @Override
+        public float getHere(View view) {
+            return view.getTranslationX();
+        }
+
+        @Override
+        public Property<View, Float> getProperty() {
+            return View.TRANSLATION_X;
+        }
+    }
+
+    private static abstract class CalculateSlideVertical implements CalculateSlide {
+        @Override
+        public float getHere(View view) {
+            return view.getTranslationY();
+        }
+
+        @Override
+        public Property<View, Float> getProperty() {
+            return View.TRANSLATION_Y;
+        }
+    }
+
+    private static final CalculateSlide sCalculateLeft = new CalculateSlideHorizontal() {
+        @Override
+        public float getGone(ViewGroup sceneRoot, View view) {
+            return view.getTranslationX() - sceneRoot.getWidth();
+        }
+    };
+
+    private static final CalculateSlide sCalculateTop = new CalculateSlideVertical() {
+        @Override
+        public float getGone(ViewGroup sceneRoot, View view) {
+            return view.getTranslationY() - sceneRoot.getHeight();
+        }
+    };
+
+    private static final CalculateSlide sCalculateRight = new CalculateSlideHorizontal() {
+        @Override
+        public float getGone(ViewGroup sceneRoot, View view) {
+            return view.getTranslationX() + sceneRoot.getWidth();
+        }
+    };
+
+    private static final CalculateSlide sCalculateBottom = new CalculateSlideVertical() {
+        @Override
+        public float getGone(ViewGroup sceneRoot, View view) {
+            return view.getTranslationY() + sceneRoot.getHeight();
+        }
+    };
+
+    /**
+     * Constructor using the default {@link android.transition.Slide#BOTTOM}
+     * slide edge direction.
+     */
+    public Slide() {
+        setSlideEdge(BOTTOM);
+    }
+
+    /**
+     * Constructor using the provided slide edge direction.
+     */
+    public Slide(int slideEdge) {
+        setSlideEdge(slideEdge);
+    }
+
+    /**
+     * Change the edge that Views appear and disappear from.
+     * @param slideEdge The edge of the scene to use for Views appearing and disappearing.
+     */
+    public void setSlideEdge(int slideEdge) {
+        switch (slideEdge) {
+            case LEFT:
+                mSlideCalculator = sCalculateLeft;
+                break;
+            case TOP:
+                mSlideCalculator = sCalculateTop;
+                break;
+            case RIGHT:
+                mSlideCalculator = sCalculateRight;
+                break;
+            case BOTTOM:
+                mSlideCalculator = sCalculateBottom;
+                break;
+            default:
+                throw new IllegalArgumentException("Invalid slide direction");
+        }
+        SidePropagation propagation = new SidePropagation();
+        propagation.setSide(slideEdge);
+        setPropagation(propagation);
+    }
+
+    private Animator createAnimation(final View view, Property<View, Float> property,
+            float start, float end, float terminalValue, TimeInterpolator interpolator) {
+        view.setTranslationY(start);
+        if (start == end) {
+            return null;
+        }
+        final ObjectAnimator anim = ObjectAnimator.ofFloat(view, property, start, end);
+
+        SlideAnimatorListener listener = new SlideAnimatorListener(view, terminalValue, end);
+        anim.addListener(listener);
+        anim.addPauseListener(listener);
+        anim.setInterpolator(interpolator);
         return anim;
     }
 
     @Override
-    public Animator onDisappear(ViewGroup sceneRoot,
-            TransitionValues startValues, int startVisibility,
-            TransitionValues endValues, int endVisibility) {
-        View startView = (startValues != null) ? startValues.view : null;
-        startView.setTranslationY(0);
-        ObjectAnimator anim = ObjectAnimator.ofFloat(startView, View.TRANSLATION_Y, 0,
-                -2 * startView.getHeight());
-        anim.setInterpolator(sAccelerator);
-        return anim;
+    public Animator onAppear(ViewGroup sceneRoot, View view,
+            TransitionValues startValues, TransitionValues endValues) {
+        if (endValues == null) {
+            return null;
+        }
+        float end = mSlideCalculator.getHere(view);
+        float start = mSlideCalculator.getGone(sceneRoot, view);
+        return createAnimation(view, mSlideCalculator.getProperty(), start, end, end, sDecelerate);
     }
 
+    @Override
+    public Animator onDisappear(ViewGroup sceneRoot, View view,
+            TransitionValues startValues, TransitionValues endValues) {
+        float start = mSlideCalculator.getHere(view);
+        float end = mSlideCalculator.getGone(sceneRoot, view);
+
+        return createAnimation(view, mSlideCalculator.getProperty(), start, end, start,
+                sAccelerate);
+    }
+
+    private static class SlideAnimatorListener extends AnimatorListenerAdapter {
+        private boolean mCanceled = false;
+        private float mPausedY;
+        private final View mView;
+        private final float mEndY;
+        private final float mTerminalY;
+
+        public SlideAnimatorListener(View view, float terminalY, float endY) {
+            mView = view;
+            mTerminalY = terminalY;
+            mEndY = endY;
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animator) {
+            mView.setTranslationY(mTerminalY);
+            mCanceled = true;
+        }
+
+        @Override
+        public void onAnimationEnd(Animator animator) {
+            if (!mCanceled) {
+                mView.setTranslationY(mTerminalY);
+            }
+        }
+
+        @Override
+        public void onAnimationPause(Animator animator) {
+            mPausedY = mView.getTranslationY();
+            mView.setTranslationY(mEndY);
+        }
+
+        @Override
+        public void onAnimationResume(Animator animator) {
+            mView.setTranslationY(mPausedY);
+        }
+    }
 }
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java
index da9ba5a..2549fde 100644
--- a/core/java/android/transition/Transition.java
+++ b/core/java/android/transition/Transition.java
@@ -19,15 +19,18 @@
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
 import android.animation.TimeInterpolator;
+import android.graphics.Rect;
 import android.util.ArrayMap;
 import android.util.Log;
 import android.util.LongSparseArray;
 import android.util.SparseArray;
+import android.util.SparseLongArray;
 import android.view.SurfaceView;
 import android.view.TextureView;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewOverlay;
+import android.view.WindowId;
 import android.widget.ListView;
 import android.widget.Spinner;
 
@@ -59,10 +62,17 @@
  * <p>Transitions can be declared in XML resource files inside the <code>res/transition</code>
  * directory. Transition resources consist of a tag name for one of the Transition
  * subclasses along with attributes to define some of the attributes of that transition.
- * For example, here is a minimal resource file that declares a {@link ChangeBounds} transition:</p>
+ * For example, here is a minimal resource file that declares a {@link ChangeBounds} transition:
  *
  * {@sample development/samples/ApiDemos/res/transition/changebounds.xml ChangeBounds}
  *
+ * <p>This TransitionSet contains {@link android.transition.Explode} for visibility,
+ * {@link android.transition.ChangeBounds}, {@link android.transition.ChangeTransform},
+ * and {@link android.transition.ChangeClipBounds} for non-<code>ImageView</code>s and
+ * {@link android.transition.MoveImage} for <code>ImageView</code>s:</p>
+ *
+ * {@sample development/samples/ApiDemos/res/transition/explode_move_together.xml MultipleTransform}
+ *
  * <p>Note that attributes for the transition are not required, just as they are
  * optional when declared in code; Transitions created from XML resources will use
  * the same defaults as their code-created equivalents. Here is a slightly more
@@ -78,7 +88,8 @@
  * transition uses a fadingMode of {@link Fade#OUT} instead of the default
  * out-in behavior. Finally, note the use of the <code>targets</code> sub-tag, which
  * takes a set of {@link android.R.styleable#TransitionTarget target} tags, each
- * of which lists a specific <code>targetId</code> which this transition acts upon.
+ * of which lists a specific <code>targetId</code>, <code>targetClass</code>,
+ * <code>excludeId</code>, or <code>excludeClass</code>, which this transition acts upon.
  * Use of targets is optional, but can be used to either limit the time spent checking
  * attributes on unchanging views, or limiting the types of animations run on specific views.
  * In this case, we know that only the <code>grayscaleContainer</code> will be
@@ -86,7 +97,8 @@
  *
  * Further information on XML resource descriptions for transitions can be found for
  * {@link android.R.styleable#Transition}, {@link android.R.styleable#TransitionSet},
- * {@link android.R.styleable#TransitionTarget}, and {@link android.R.styleable#Fade}.
+ * {@link android.R.styleable#TransitionTarget}, {@link android.R.styleable#Fade}, and
+ * {@link android.R.styleable#Slide}.
  *
  */
 public abstract class Transition implements Cloneable {
@@ -104,6 +116,7 @@
     ArrayList<Integer> mTargetIdExcludes = null;
     ArrayList<View> mTargetExcludes = null;
     ArrayList<Class> mTargetTypeExcludes = null;
+    ArrayList<Class> mTargetTypes = null;
     ArrayList<Integer> mTargetIdChildExcludes = null;
     ArrayList<View> mTargetChildExcludes = null;
     ArrayList<Class> mTargetTypeChildExcludes = null;
@@ -148,6 +161,13 @@
     // to be run in runAnimators()
     ArrayList<Animator> mAnimators = new ArrayList<Animator>();
 
+    // The function for calculating the Animation start delay.
+    TransitionPropagation mPropagation;
+
+    // The rectangular region for Transitions like Explode and TransitionPropagations
+    // like CircularPropagation
+    EpicenterCallback mEpicenterCallback;
+
     /**
      * Constructs a Transition object with no target objects. A transition with
      * no targets defaults to running on all target objects in the scene hierarchy
@@ -434,6 +454,9 @@
             endValuesList.add(end);
         }
         ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators();
+        long minStartDelay = Long.MAX_VALUE;
+        int minAnimator = mAnimators.size();
+        SparseLongArray startDelays = new SparseLongArray();
         for (int i = 0; i < startValuesList.size(); ++i) {
             TransitionValues start = startValuesList.get(i);
             TransitionValues end = endValuesList.get(i);
@@ -496,7 +519,14 @@
                             view = (start != null) ? start.view : null;
                         }
                         if (animator != null) {
-                            AnimationInfo info = new AnimationInfo(view, getName(), infoValues);
+                            if (mPropagation != null) {
+                                long delay = mPropagation
+                                        .getStartDelay(sceneRoot, this, start, end);
+                                startDelays.put(mAnimators.size(), delay);
+                                minStartDelay = Math.min(delay, minStartDelay);
+                            }
+                            AnimationInfo info = new AnimationInfo(view, getName(),
+                                    sceneRoot.getWindowId(), infoValues);
                             runningAnimators.put(animator, info);
                             mAnimators.add(animator);
                         }
@@ -504,6 +534,14 @@
                 }
             }
         }
+        if (minStartDelay != 0) {
+            for (int i = 0; i < startDelays.size(); i++) {
+                int index = startDelays.keyAt(i);
+                Animator animator = mAnimators.get(index);
+                long delay = startDelays.valueAt(i) - minStartDelay + animator.getStartDelay();
+                animator.setStartDelay(delay);
+            }
+        }
     }
 
     /**
@@ -532,19 +570,15 @@
                 }
             }
         }
-        if (mTargetIds.size() == 0 && mTargets.size() == 0) {
+        if (mTargetIds.size() == 0 && mTargets.size() == 0 && mTargetTypes == null) {
             return true;
         }
-        if (mTargetIds.size() > 0) {
-            for (int i = 0; i < mTargetIds.size(); ++i) {
-                if (mTargetIds.get(i) == targetId) {
-                    return true;
-                }
-            }
+        if (mTargetIds.contains((int) targetId) || mTargets.contains(target)) {
+            return true;
         }
-        if (target != null && mTargets.size() > 0) {
-            for (int i = 0; i < mTargets.size(); ++i) {
-                if (mTargets.get(i) == target) {
+        if (mTargetTypes != null) {
+            for (int i = 0; i < mTargetTypes.size(); ++i) {
+                if (mTargetTypes.get(i).isInstance(target)) {
                     return true;
                 }
             }
@@ -563,7 +597,7 @@
 
     /**
      * This is called internally once all animations have been set up by the
-     * transition hierarchy. \
+     * transition hierarchy.
      *
      * @hide
      */
@@ -690,6 +724,36 @@
     }
 
     /**
+     * Adds the Class of a target view that this Transition is interested in
+     * animating. By default, there are no targetTypes, and a Transition will
+     * listen for changes on every view in the hierarchy below the sceneRoot
+     * of the Scene being transitioned into. Setting targetTypes constrains
+     * the Transition to only listen for, and act on, views with these classes.
+     * Views with different classes will be ignored.
+     *
+     * <p>Note that any View that can be cast to targetType will be included, so
+     * if targetType is <code>View.class</code>, all Views will be included.</p>
+     *
+     * @see #addTarget(int)
+     * @see #addTarget(android.view.View)
+     * @see #excludeTarget(Class, boolean)
+     * @see #excludeChildren(Class, boolean)
+     *
+     * @param targetType The type to include when running this transition.
+     * @return The Transition to which the target class was added.
+     * Returning the same object makes it easier to chain calls during
+     * construction, such as
+     * <code>transitionSet.addTransitions(new Fade()).addTarget(ImageView.class);</code>
+     */
+    public Transition addTarget(Class targetType) {
+        if (mTargetTypes == null) {
+            mTargetTypes = new ArrayList<Class>();
+        }
+        mTargetTypes.add(targetType);
+        return this;
+    }
+
+    /**
      * Removes the given targetId from the list of ids that this Transition
      * is interested in animating.
      *
@@ -1008,6 +1072,7 @@
                         } else {
                             captureEndValues(values);
                         }
+                        capturePropagationValues(values);
                         if (start) {
                             mStartValues.viewValues.put(view, values);
                             if (id >= 0) {
@@ -1033,6 +1098,7 @@
                         } else {
                             captureEndValues(values);
                         }
+                        capturePropagationValues(values);
                         if (start) {
                             mStartValues.viewValues.put(view, values);
                         } else {
@@ -1109,30 +1175,33 @@
                 }
             }
         }
-        TransitionValues values = new TransitionValues();
-        values.view = view;
-        if (start) {
-            captureStartValues(values);
-        } else {
-            captureEndValues(values);
-        }
-        if (start) {
-            if (!isListViewItem) {
-                mStartValues.viewValues.put(view, values);
-                if (id >= 0) {
-                    mStartValues.idValues.put((int) id, values);
-                }
+        if (view.getParent() instanceof ViewGroup) {
+            TransitionValues values = new TransitionValues();
+            values.view = view;
+            if (start) {
+                captureStartValues(values);
             } else {
-                mStartValues.itemIdValues.put(itemId, values);
+                captureEndValues(values);
             }
-        } else {
-            if (!isListViewItem) {
-                mEndValues.viewValues.put(view, values);
-                if (id >= 0) {
-                    mEndValues.idValues.put((int) id, values);
+            capturePropagationValues(values);
+            if (start) {
+                if (!isListViewItem) {
+                    mStartValues.viewValues.put(view, values);
+                    if (id >= 0) {
+                        mStartValues.idValues.put((int) id, values);
+                    }
+                } else {
+                    mStartValues.itemIdValues.put(itemId, values);
                 }
             } else {
-                mEndValues.itemIdValues.put(itemId, values);
+                if (!isListViewItem) {
+                    mEndValues.viewValues.put(view, values);
+                    if (id >= 0) {
+                        mEndValues.idValues.put((int) id, values);
+                    }
+                } else {
+                    mEndValues.itemIdValues.put(itemId, values);
+                }
             }
         }
         if (view instanceof ViewGroup) {
@@ -1194,13 +1263,17 @@
      *
      * @hide
      */
-    public void pause() {
+    public void pause(View sceneRoot) {
         if (!mEnded) {
             ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators();
             int numOldAnims = runningAnimators.size();
+            WindowId windowId = sceneRoot.getWindowId();
             for (int i = numOldAnims - 1; i >= 0; i--) {
-                Animator anim = runningAnimators.keyAt(i);
-                anim.pause();
+                AnimationInfo info = runningAnimators.valueAt(i);
+                if (info.view != null && windowId.equals(info.windowId)) {
+                    Animator anim = runningAnimators.keyAt(i);
+                    anim.pause();
+                }
             }
             if (mListeners != null && mListeners.size() > 0) {
                 ArrayList<TransitionListener> tmpListeners =
@@ -1221,14 +1294,18 @@
      *
      * @hide
      */
-    public void resume() {
+    public void resume(View sceneRoot) {
         if (mPaused) {
             if (!mEnded) {
                 ArrayMap<Animator, AnimationInfo> runningAnimators = getRunningAnimators();
                 int numOldAnims = runningAnimators.size();
+                WindowId windowId = sceneRoot.getWindowId();
                 for (int i = numOldAnims - 1; i >= 0; i--) {
-                    Animator anim = runningAnimators.keyAt(i);
-                    anim.resume();
+                    AnimationInfo info = runningAnimators.valueAt(i);
+                    if (info.view != null && windowId.equals(info.windowId)) {
+                        Animator anim = runningAnimators.keyAt(i);
+                        anim.resume();
+                    }
                 }
                 if (mListeners != null && mListeners.size() > 0) {
                     ArrayList<TransitionListener> tmpListeners =
@@ -1325,7 +1402,7 @@
                 animator.setDuration(getDuration());
             }
             if (getStartDelay() >= 0) {
-                animator.setStartDelay(getStartDelay());
+                animator.setStartDelay(getStartDelay() + animator.getStartDelay());
             }
             if (getInterpolator() != null) {
                 animator.setInterpolator(getInterpolator());
@@ -1458,6 +1535,98 @@
         return this;
     }
 
+    /**
+     * Sets the callback to use to find the epicenter of a Transition. A null value indicates
+     * that there is no epicenter in the Transition and getEpicenter() will return null.
+     * Transitions like {@link android.transition.Explode} use a point or Rect to orient
+     * the direction of travel. This is called the epicenter of the Transition and is
+     * typically centered on a touched View. The
+     * {@link android.transition.Transition.EpicenterCallback} allows a Transition to
+     * dynamically retrieve the epicenter during a Transition.
+     * @param epicenterCallback The callback to use to find the epicenter of the Transition.
+     */
+    public void setEpicenterCallback(EpicenterCallback epicenterCallback) {
+        mEpicenterCallback = epicenterCallback;
+    }
+
+    /**
+     * Returns the callback used to find the epicenter of the Transition.
+     * Transitions like {@link android.transition.Explode} use a point or Rect to orient
+     * the direction of travel. This is called the epicenter of the Transition and is
+     * typically centered on a touched View. The
+     * {@link android.transition.Transition.EpicenterCallback} allows a Transition to
+     * dynamically retrieve the epicenter during a Transition.
+     * @return the callback used to find the epicenter of the Transition.
+     */
+    public EpicenterCallback getEpicenterCallback() {
+        return mEpicenterCallback;
+    }
+
+    /**
+     * Returns the epicenter as specified by the
+     * {@link android.transition.Transition.EpicenterCallback} or null if no callback exists.
+     * @return the epicenter as specified by the
+     * {@link android.transition.Transition.EpicenterCallback} or null if no callback exists.
+     * @see #setEpicenterCallback(android.transition.Transition.EpicenterCallback)
+     */
+    public Rect getEpicenter() {
+        if (mEpicenterCallback == null) {
+            return null;
+        }
+        return mEpicenterCallback.getEpicenter(this);
+    }
+
+    /**
+     * Sets the method for determining Animator start delays.
+     * When a Transition affects several Views like {@link android.transition.Explode} or
+     * {@link android.transition.Slide}, there may be a desire to have a "wave-front" effect
+     * such that the Animator start delay depends on position of the View. The
+     * TransitionPropagation specifies how the start delays are calculated.
+     * @param transitionPropagation The class used to determine the start delay of
+     *                              Animators created by this Transition. A null value
+     *                              indicates that no delay should be used.
+     */
+    public void setPropagation(TransitionPropagation transitionPropagation) {
+        mPropagation = transitionPropagation;
+    }
+
+    /**
+     * Returns the {@link android.transition.TransitionPropagation} used to calculate Animator start
+     * delays.
+     * When a Transition affects several Views like {@link android.transition.Explode} or
+     * {@link android.transition.Slide}, there may be a desire to have a "wave-front" effect
+     * such that the Animator start delay depends on position of the View. The
+     * TransitionPropagation specifies how the start delays are calculated.
+     * @return the {@link android.transition.TransitionPropagation} used to calculate Animator start
+     * delays. This is null by default.
+     */
+    public TransitionPropagation getPropagation() {
+        return mPropagation;
+    }
+
+    /**
+     * Captures TransitionPropagation values for the given view and the
+     * hierarchy underneath it.
+     */
+    void capturePropagationValues(TransitionValues transitionValues) {
+        if (mPropagation != null && !transitionValues.values.isEmpty()) {
+            String[] propertyNames = mPropagation.getPropagationProperties();
+            if (propertyNames == null) {
+                return;
+            }
+            boolean containsAll = true;
+            for (int i = 0; i < propertyNames.length; i++) {
+                if (!transitionValues.values.containsKey(propertyNames[i])) {
+                    containsAll = false;
+                    break;
+                }
+            }
+            if (!containsAll) {
+                mPropagation.captureValues(transitionValues);
+            }
+        }
+    }
+
     Transition setSceneRoot(ViewGroup sceneRoot) {
         mSceneRoot = sceneRoot;
         return this;
@@ -1467,6 +1636,10 @@
         mCanRemoveViews = canRemoveViews;
     }
 
+    public boolean canRemoveViews() {
+        return mCanRemoveViews;
+    }
+
     @Override
     public String toString() {
         return toString("");
@@ -1629,16 +1802,19 @@
      * animation should be canceled or a new animation noop'd. The structure holds
      * information about the state that an animation is going to, to be compared to
      * end state of a new animation.
+     * @hide
      */
-    private static class AnimationInfo {
-        View view;
+    public static class AnimationInfo {
+        public View view;
         String name;
         TransitionValues values;
+        WindowId windowId;
 
-        AnimationInfo(View view, String name, TransitionValues values) {
+        AnimationInfo(View view, String name, WindowId windowId, TransitionValues values) {
             this.view = view;
             this.name = name;
             this.values = values;
+            this.windowId = windowId;
         }
     }
 
@@ -1688,4 +1864,28 @@
         }
     }
 
+    /**
+     * Class to get the epicenter of Transition. Use
+     * {@link #setEpicenterCallback(android.transition.Transition.EpicenterCallback)} to
+     * set the callback used to calculate the epicenter of the Transition. Override
+     * {@link #getEpicenter()} to return the rectangular region in screen coordinates of
+     * the epicenter of the transition.
+     * @see #setEpicenterCallback(android.transition.Transition.EpicenterCallback)
+     */
+    public static abstract class EpicenterCallback {
+
+        /**
+         * Implementers must override to return the epicenter of the Transition in screen
+         * coordinates. Transitions like {@link android.transition.Explode} depend upon
+         * an epicenter for the Transition. In Explode, Views move toward or away from the
+         * center of the epicenter Rect along the vector between the epicenter and the center
+         * of the View appearing and disappearing. Some Transitions, such as
+         * {@link android.transition.Fade} pay no attention to the epicenter.
+         *
+         * @param transition The transition for which the epicenter applies.
+         * @return The Rect region of the epicenter of <code>transition</code> or null if
+         * there is no epicenter.
+         */
+        public abstract Rect getEpicenter(Transition transition);
+    }
 }
diff --git a/core/java/android/transition/TransitionInflater.java b/core/java/android/transition/TransitionInflater.java
index 9f77d5e..a5e960a 100644
--- a/core/java/android/transition/TransitionInflater.java
+++ b/core/java/android/transition/TransitionInflater.java
@@ -145,7 +145,19 @@
                 transition = new ChangeBounds();
                 newTransition = true;
             } else if ("slide".equals(name)) {
-                transition = new Slide();
+                transition = createSlideTransition(attrs);
+                newTransition = true;
+            } else if ("explode".equals(name)) {
+                transition = new Explode();
+                newTransition = true;
+            } else if ("moveImage".equals(name)) {
+                transition = new MoveImage();
+                newTransition = true;
+            } else if ("changeTransform".equals(name)) {
+                transition = new ChangeTransform();
+                newTransition = true;
+            } else if ("changeClipBounds".equals(name)) {
+                transition = new ChangeClipBounds();
                 newTransition = true;
             } else if ("autoTransition".equals(name)) {
                 transition = new AutoTransition();
@@ -188,6 +200,15 @@
         return transition;
     }
 
+    private Slide createSlideTransition(AttributeSet attrs) {
+        TypedArray a = mContext.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.Slide);
+        int edge = a.getInt(com.android.internal.R.styleable.Slide_slideEdge, Slide.BOTTOM);
+        Slide slide = new Slide(edge);
+        a.recycle();
+        return slide;
+    }
+
     private void getTargetIds(XmlPullParser parser,
             AttributeSet attrs, Transition transition) throws XmlPullParserException, IOException {
 
@@ -195,7 +216,6 @@
         int type;
         int depth = parser.getDepth();
 
-        ArrayList<Integer> targetIds = new ArrayList<Integer>();
         while (((type=parser.next()) != XmlPullParser.END_TAG || parser.getDepth() > depth)
                 && type != XmlPullParser.END_DOCUMENT) {
 
@@ -210,18 +230,31 @@
                 int id = a.getResourceId(
                         com.android.internal.R.styleable.TransitionTarget_targetId, -1);
                 if (id >= 0) {
-                    targetIds.add(id);
+                    transition.addTarget(id);
+                } else if ((id = a.getResourceId(
+                        com.android.internal.R.styleable.TransitionTarget_excludeId, -1)) >= 0) {
+                    transition.excludeTarget(id, true);
+                } else {
+                    String className = a.getString(
+                            com.android.internal.R.styleable.TransitionTarget_excludeClass);
+                    try {
+                        if (className != null) {
+                            Class clazz = Class.forName(className);
+                            transition.excludeTarget(clazz, true);
+                        } else if ((className = a.getString(
+                                com.android.internal.R.styleable.TransitionTarget_targetClass))
+                                != null) {
+                            Class clazz = Class.forName(className);
+                            transition.addTarget(clazz);
+                        }
+                    } catch (ClassNotFoundException e) {
+                        throw new RuntimeException("Could not create " + className, e);
+                    }
                 }
             } else {
                 throw new RuntimeException("Unknown scene name: " + parser.getName());
             }
         }
-        int numTargets = targetIds.size();
-        if (numTargets > 0) {
-            for (int i = 0; i < numTargets; ++i) {
-                transition.addTarget(targetIds.get(i));
-            }
-        }
     }
 
     private Transition loadTransition(Transition transition, AttributeSet attrs)
@@ -284,25 +317,23 @@
                 com.android.internal.R.styleable.TransitionManager);
         int transitionId = a.getResourceId(
                 com.android.internal.R.styleable.TransitionManager_transition, -1);
-        Scene fromScene = null, toScene = null;
         int fromId = a.getResourceId(
                 com.android.internal.R.styleable.TransitionManager_fromScene, -1);
-        if (fromId >= 0) fromScene = Scene.getSceneForLayout(sceneRoot, fromId, mContext);
+        Scene fromScene = (fromId < 0) ? null: Scene.getSceneForLayout(sceneRoot, fromId, mContext);
         int toId = a.getResourceId(
                 com.android.internal.R.styleable.TransitionManager_toScene, -1);
-        if (toId >= 0) toScene = Scene.getSceneForLayout(sceneRoot, toId, mContext);
+        Scene toScene = (toId < 0) ? null : Scene.getSceneForLayout(sceneRoot, toId, mContext);
+
         if (transitionId >= 0) {
             Transition transition = inflateTransition(transitionId);
             if (transition != null) {
-                if (fromScene != null) {
-                    if (toScene == null){
-                        throw new RuntimeException("No matching toScene for given fromScene " +
-                                "for transition ID " + transitionId);
-                    } else {
-                        transitionManager.setTransition(fromScene, toScene, transition);
-                    }
-                } else if (toId >= 0) {
+                if (toScene == null) {
+                    throw new RuntimeException("No toScene for transition ID " + transitionId);
+                }
+                if (fromScene == null) {
                     transitionManager.setTransition(toScene, transition);
+                } else {
+                    transitionManager.setTransition(fromScene, toScene, transition);
                 }
             }
         }
diff --git a/core/java/android/transition/TransitionManager.java b/core/java/android/transition/TransitionManager.java
index 3bf6790..ce3cc2f 100644
--- a/core/java/android/transition/TransitionManager.java
+++ b/core/java/android/transition/TransitionManager.java
@@ -67,6 +67,8 @@
 
     private static Transition sDefaultTransition = new AutoTransition();
 
+    private static final String[] EMPTY_STRINGS = new String[0];
+
     ArrayMap<Scene, Transition> mSceneTransitions = new ArrayMap<Scene, Transition>();
     ArrayMap<Scene, ArrayMap<Scene, Transition>> mScenePairTransitions =
             new ArrayMap<Scene, ArrayMap<Scene, Transition>>();
@@ -253,7 +255,7 @@
             ArrayList<Transition> runningTransitions = getRunningTransitions().get(mSceneRoot);
             if (runningTransitions != null && runningTransitions.size() > 0) {
                 for (Transition runningTransition : runningTransitions) {
-                    runningTransition.resume();
+                    runningTransition.resume(mSceneRoot);
                 }
             }
             mTransition.clearValues(true);
@@ -286,7 +288,7 @@
             mTransition.captureValues(mSceneRoot, false);
             if (previousRunningTransitions != null) {
                 for (Transition runningTransition : previousRunningTransitions) {
-                    runningTransition.resume();
+                    runningTransition.resume(mSceneRoot);
                 }
             }
             mTransition.playTransition(mSceneRoot);
@@ -302,7 +304,7 @@
 
         if (runningTransitions != null && runningTransitions.size() > 0) {
             for (Transition runningTransition : runningTransitions) {
-                runningTransition.pause();
+                runningTransition.pause(sceneRoot);
             }
         }
 
@@ -329,7 +331,6 @@
         // Auto transition if there is no transition declared for the Scene, but there is
         // a root or parent view
         changeScene(scene, getTransition(scene));
-
     }
 
     /**
diff --git a/core/java/android/transition/TransitionPropagation.java b/core/java/android/transition/TransitionPropagation.java
new file mode 100644
index 0000000..9a481c2
--- /dev/null
+++ b/core/java/android/transition/TransitionPropagation.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.graphics.Rect;
+import android.view.ViewGroup;
+
+/**
+ * Extend <code>TransitionPropagation</code> to customize start delays for Animators created
+ * in {@link android.transition.Transition#createAnimator(ViewGroup,
+ * TransitionValues, TransitionValues)}. A Transition such as {@link android.transition.Explode}
+ * defaults to using {@link android.transition.CircularPropagation} and Views closer to the
+ * epicenter will move out of the scene later and into the scene sooner than Views farther
+ * from the epicenter, giving the appearance of inertia. With no TransitionPropagation, all
+ * Views will react simultaneously to the start of the transition.
+ *
+ * @see Transition#setPropagation(TransitionPropagation)
+ * @see Transition#getEpicenter()
+ */
+public abstract class TransitionPropagation {
+    /**
+     * Called by Transition to alter the Animator start delay. All start delays will be adjusted
+     * such that the minimum becomes zero.
+     * @param sceneRoot The root of the View hierarchy running the transition.
+     * @param transition The transition that created the Animator
+     * @param startValues The values for a specific target in the start scene.
+     * @param endValues The values for the target in the end scene.
+     * @return A start delay to use with the Animator created by <code>transition</code>. The
+     * delay will be offset by the minimum delay of all <code>TransitionPropagation</code>s
+     * used in the Transition so that the smallest delay will be 0. Returned values may be
+     * negative.
+     */
+    public abstract long getStartDelay(ViewGroup sceneRoot, Transition transition,
+            TransitionValues startValues, TransitionValues endValues);
+
+    /**
+     * Captures the values in the start or end scene for the properties that this
+     * transition propagation monitors. These values are then passed as the startValues
+     * or endValues structure in a later call to
+     * {@link #getStartDelay(ViewGroup, Transition, TransitionValues, TransitionValues)}.
+     * The main concern for an implementation is what the
+     * properties are that the transition cares about and what the values are
+     * for all of those properties. The start and end values will be compared
+     * later during the
+     * {@link #getStartDelay(ViewGroup, Transition, TransitionValues, TransitionValues)}.
+     * method to determine the start delay.
+     *
+     * <p>Subclasses must implement this method. The method should only be called by the
+     * transition system; it is not intended to be called from external classes.</p>
+     *
+     * @param transitionValues The holder for any values that the Transition
+     * wishes to store. Values are stored in the <code>values</code> field
+     * of this TransitionValues object and are keyed from
+     * a String value. For example, to store a view's rotation value,
+     * a transition might call
+     * <code>transitionValues.values.put("appname:transitionname:rotation",
+     * view.getRotation())</code>. The target view will already be stored in
+     * the transitionValues structure when this method is called.
+     */
+    public abstract void captureValues(TransitionValues transitionValues);
+
+    /**
+     * Returns the set of property names stored in the {@link TransitionValues}
+     * object passed into {@link #captureValues(TransitionValues)} that
+     * this transition propagation cares about for the purposes of preventing
+     * duplicate capturing of property values.
+
+     * <p>A <code>TransitionPropagation</code> must override this method to prevent
+     * duplicate capturing of values and must contain at least one </p>
+     *
+     * @return An array of property names as described in the class documentation for
+     * {@link TransitionValues}.
+     */
+    public abstract String[] getPropagationProperties() ;
+}
diff --git a/core/java/android/transition/TransitionSet.java b/core/java/android/transition/TransitionSet.java
index 4545e3b..9081234 100644
--- a/core/java/android/transition/TransitionSet.java
+++ b/core/java/android/transition/TransitionSet.java
@@ -17,6 +17,7 @@
 package android.transition;
 
 import android.animation.TimeInterpolator;
+import android.graphics.Rect;
 import android.util.AndroidRuntimeException;
 import android.view.View;
 import android.view.ViewGroup;
@@ -255,11 +256,45 @@
     @Override
     protected void createAnimators(ViewGroup sceneRoot, TransitionValuesMaps startValues,
             TransitionValuesMaps endValues) {
+        startValues = removeExcludes(startValues);
+        endValues = removeExcludes(endValues);
         for (Transition childTransition : mTransitions) {
             childTransition.createAnimators(sceneRoot, startValues, endValues);
         }
     }
 
+    private TransitionValuesMaps removeExcludes(TransitionValuesMaps values) {
+        if (mTargetIds.isEmpty() && mTargetIdExcludes == null && mTargetTypeExcludes == null
+                && mTargets.isEmpty()) {
+            return values;
+        }
+        TransitionValuesMaps included = new TransitionValuesMaps();
+        int numValues = values.viewValues.size();
+        for (int i = 0; i < numValues; i++) {
+            View view = values.viewValues.keyAt(i);
+            if (isValidTarget(view, view.getId())) {
+                included.viewValues.put(view, values.viewValues.valueAt(i));
+            }
+        }
+        numValues = values.idValues.size();
+        for (int i = 0; i < numValues; i++) {
+            int id = values.idValues.keyAt(i);
+            TransitionValues transitionValues = values.idValues.valueAt(i);
+            if (isValidTarget(transitionValues.view, id)) {
+                included.idValues.put(id, transitionValues);
+            }
+        }
+        numValues = values.itemIdValues.size();
+        for (int i = 0; i < numValues; i++) {
+            long id = values.itemIdValues.keyAt(i);
+            TransitionValues transitionValues = values.itemIdValues.valueAt(i);
+            if (isValidTarget(transitionValues.view, id)) {
+                included.itemIdValues.put(id, transitionValues);
+            }
+        }
+        return included;
+    }
+
     /**
      * @hide
      */
@@ -315,23 +350,32 @@
         }
     }
 
-    /** @hide */
     @Override
-    public void pause() {
-        super.pause();
+    void capturePropagationValues(TransitionValues transitionValues) {
+        super.capturePropagationValues(transitionValues);
         int numTransitions = mTransitions.size();
         for (int i = 0; i < numTransitions; ++i) {
-            mTransitions.get(i).pause();
+            mTransitions.get(i).capturePropagationValues(transitionValues);
         }
     }
 
     /** @hide */
     @Override
-    public void resume() {
-        super.resume();
+    public void pause(View sceneRoot) {
+        super.pause(sceneRoot);
         int numTransitions = mTransitions.size();
         for (int i = 0; i < numTransitions; ++i) {
-            mTransitions.get(i).resume();
+            mTransitions.get(i).pause(sceneRoot);
+        }
+    }
+
+    /** @hide */
+    @Override
+    public void resume(View sceneRoot) {
+        super.resume(sceneRoot);
+        int numTransitions = mTransitions.size();
+        for (int i = 0; i < numTransitions; ++i) {
+            mTransitions.get(i).resume(sceneRoot);
         }
     }
 
@@ -365,6 +409,24 @@
     }
 
     @Override
+    public void setPropagation(TransitionPropagation propagation) {
+        super.setPropagation(propagation);
+        int numTransitions = mTransitions.size();
+        for (int i = 0; i < numTransitions; ++i) {
+            mTransitions.get(i).setPropagation(propagation);
+        }
+    }
+
+    @Override
+    public void setEpicenterCallback(EpicenterCallback epicenterCallback) {
+        super.setEpicenterCallback(epicenterCallback);
+        int numTransitions = mTransitions.size();
+        for (int i = 0; i < numTransitions; ++i) {
+            mTransitions.get(i).setEpicenterCallback(epicenterCallback);
+        }
+    }
+
+    @Override
     String toString(String indent) {
         String result = super.toString(indent);
         for (int i = 0; i < mTransitions.size(); ++i) {
@@ -383,5 +445,4 @@
         }
         return clone;
     }
-
 }
diff --git a/core/java/android/transition/Visibility.java b/core/java/android/transition/Visibility.java
index 44f92cd..6e6496c 100644
--- a/core/java/android/transition/Visibility.java
+++ b/core/java/android/transition/Visibility.java
@@ -17,6 +17,7 @@
 package android.transition;
 
 import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.view.View;
 import android.view.ViewGroup;
 
@@ -29,15 +30,20 @@
  * information to determine the specific animations to run when visibility
  * changes occur. Subclasses should implement one or both of the methods
  * {@link #onAppear(ViewGroup, TransitionValues, int, TransitionValues, int)},
- * {@link #onDisappear(ViewGroup, TransitionValues, int, TransitionValues, int)},
+ * {@link #onDisappear(ViewGroup, TransitionValues, int, TransitionValues, int)} or
+ * {@link #onAppear(ViewGroup, View, TransitionValues, TransitionValues)},
+ * {@link #onDisappear(ViewGroup, View, TransitionValues, TransitionValues)}.
  */
 public abstract class Visibility extends Transition {
 
     private static final String PROPNAME_VISIBILITY = "android:visibility:visibility";
     private static final String PROPNAME_PARENT = "android:visibility:parent";
+    private static final String PROPNAME_SCREEN_LOCATION = "android:visibility:screenLocation";
+
     private static final String[] sTransitionProperties = {
             PROPNAME_VISIBILITY,
             PROPNAME_PARENT,
+            PROPNAME_SCREEN_LOCATION,
     };
 
     private static class VisibilityInfo {
@@ -58,6 +64,9 @@
         int visibility = transitionValues.view.getVisibility();
         transitionValues.values.put(PROPNAME_VISIBILITY, visibility);
         transitionValues.values.put(PROPNAME_PARENT, transitionValues.view.getParent());
+        int[] loc = new int[2];
+        transitionValues.view.getLocationOnScreen(loc);
+        transitionValues.values.put(PROPNAME_SCREEN_LOCATION, loc);
     }
 
     @Override
@@ -100,14 +109,14 @@
         final VisibilityInfo visInfo = new VisibilityInfo();
         visInfo.visibilityChange = false;
         visInfo.fadeIn = false;
-        if (startValues != null) {
+        if (startValues != null && startValues.values.containsKey(PROPNAME_VISIBILITY)) {
             visInfo.startVisibility = (Integer) startValues.values.get(PROPNAME_VISIBILITY);
             visInfo.startParent = (ViewGroup) startValues.values.get(PROPNAME_PARENT);
         } else {
             visInfo.startVisibility = -1;
             visInfo.startParent = null;
         }
-        if (endValues != null) {
+        if (endValues != null && endValues.values.containsKey(PROPNAME_VISIBILITY)) {
             visInfo.endVisibility = (Integer) endValues.values.get(PROPNAME_VISIBILITY);
             visInfo.endParent = (ViewGroup) endValues.values.get(PROPNAME_PARENT);
         } else {
@@ -179,8 +188,11 @@
     }
 
     /**
-     * The default implementation of this method does nothing. Subclasses
-     * should override if they need to create an Animator when targets appear.
+     * The default implementation of this method calls
+     * {@link #onAppear(ViewGroup, View, TransitionValues, TransitionValues)}.
+     * Subclasses should override this method or
+     * {@link #onAppear(ViewGroup, View, TransitionValues, TransitionValues)}.
+     * if they need to create an Animator when targets appear.
      * The method should only be called by the Visibility class; it is
      * not intended to be called from external classes.
      *
@@ -196,15 +208,53 @@
     public Animator onAppear(ViewGroup sceneRoot,
             TransitionValues startValues, int startVisibility,
             TransitionValues endValues, int endVisibility) {
+        return onAppear(sceneRoot, endValues.view, startValues, endValues);
+    }
+
+    /**
+     * The default implementation of this method returns a null Animator. Subclasses should
+     * override this method to make targets appear with the desired transition. The
+     * method should only be called from
+     * {@link #onAppear(ViewGroup, TransitionValues, int, TransitionValues, int)}.
+     *
+     * @param sceneRoot The root of the transition hierarchy
+     * @param view The View to make appear. This will be in the target scene's View hierarchy and
+     *             will be VISIBLE.
+     * @param startValues The target values in the start scene
+     * @param endValues The target values in the end scene
+     * @return An Animator to be started at the appropriate time in the
+     * overall transition for this scene change. A null value means no animation
+     * should be run.
+     */
+    public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,
+            TransitionValues endValues) {
         return null;
     }
 
     /**
-     * The default implementation of this method does nothing. Subclasses
-     * should override if they need to create an Animator when targets disappear.
+     * Subclasses should override this method or
+     * {@link #onDisappear(ViewGroup, View, TransitionValues, TransitionValues)}
+     * if they need to create an Animator when targets disappear.
      * The method should only be called by the Visibility class; it is
      * not intended to be called from external classes.
-     *
+     * <p>
+     * The default implementation of this method attempts to find a View to use to call
+     * {@link #onDisappear(ViewGroup, View, TransitionValues, TransitionValues)},
+     * based on the situation of the View in the View hierarchy. For example,
+     * if a View was simply removed from its parent, then the View will be added
+     * into a {@link android.view.ViewGroupOverlay} and passed as the <code>view</code>
+     * parameter in {@link #onDisappear(ViewGroup, View, TransitionValues, TransitionValues)}.
+     * If a visible View is changed to be {@link View#GONE} or {@link View#INVISIBLE},
+     * then it can be used as the <code>view</code> and the visibility will be changed
+     * to {@link View#VISIBLE} for the duration of the animation. However, if a View
+     * is in a hierarchy which is also altering its visibility, the situation can be
+     * more complicated. In general, if a view that is no longer in the hierarchy in
+     * the end scene still has a parent (so its parent hierarchy was removed, but it
+     * was not removed from its parent), then it will be left alone to avoid side-effects from
+     * improperly removing it from its parent. The only exception to this is if
+     * the previous {@link Scene} was {@link Scene#getSceneForLayout(ViewGroup, int,
+     * android.content.Context) created from a layout resource file}, then it is considered
+     * safe to un-parent the starting scene view in order to make it disappear.</p>
      *
      * @param sceneRoot The root of the transition hierarchy
      * @param startValues The target values in the start scene
@@ -218,6 +268,145 @@
     public Animator onDisappear(ViewGroup sceneRoot,
             TransitionValues startValues, int startVisibility,
             TransitionValues endValues, int endVisibility) {
+        View startView = (startValues != null) ? startValues.view : null;
+        View endView = (endValues != null) ? endValues.view : null;
+        View overlayView = null;
+        View viewToKeep = null;
+        if (endView == null || endView.getParent() == null) {
+            if (endView != null) {
+                // endView was removed from its parent - add it to the overlay
+                overlayView = endView;
+            } else if (startView != null) {
+                // endView does not exist. Use startView only under certain
+                // conditions, because placing a view in an overlay necessitates
+                // it being removed from its current parent
+                if (startView.getParent() == null) {
+                    // no parent - safe to use
+                    overlayView = startView;
+                } else if (startView.getParent() instanceof View &&
+                        startView.getParent().getParent() == null) {
+                    View startParent = (View) startView.getParent();
+                    int id = startParent.getId();
+                    if (id != View.NO_ID && sceneRoot.findViewById(id) != null && mCanRemoveViews) {
+                        // no parent, but its parent is unparented  but the parent
+                        // hierarchy has been replaced by a new hierarchy with the same id
+                        // and it is safe to un-parent startView
+                        overlayView = startView;
+                    }
+                }
+            }
+        } else {
+            // visibility change
+            if (endVisibility == View.INVISIBLE) {
+                viewToKeep = endView;
+            } else {
+                // Becoming GONE
+                if (startView == endView) {
+                    viewToKeep = endView;
+                } else {
+                    overlayView = startView;
+                }
+            }
+        }
+        final int finalVisibility = endVisibility;
+        final ViewGroup finalSceneRoot = sceneRoot;
+
+        if (overlayView != null) {
+            // TODO: Need to do this for general case of adding to overlay
+            int[] screenLoc = (int[]) startValues.values.get(PROPNAME_SCREEN_LOCATION);
+            int screenX = screenLoc[0];
+            int screenY = screenLoc[1];
+            int[] loc = new int[2];
+            sceneRoot.getLocationOnScreen(loc);
+            overlayView.offsetLeftAndRight((screenX - loc[0]) - overlayView.getLeft());
+            overlayView.offsetTopAndBottom((screenY - loc[1]) - overlayView.getTop());
+            sceneRoot.getOverlay().add(overlayView);
+            Animator animator = onDisappear(sceneRoot, overlayView, startValues, endValues);
+            if (animator == null) {
+                sceneRoot.getOverlay().remove(overlayView);
+            } else {
+                final View finalOverlayView = overlayView;
+                animator.addListener(new AnimatorListenerAdapter() {
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        finalSceneRoot.getOverlay().remove(finalOverlayView);
+                    }
+
+                    @Override
+                    public void onAnimationPause(Animator animation) {
+                        finalSceneRoot.getOverlay().remove(finalOverlayView);
+                    }
+
+                    @Override
+                    public void onAnimationResume(Animator animation) {
+                        finalSceneRoot.getOverlay().add(finalOverlayView);
+                    }
+                });
+            }
+            return animator;
+        }
+
+        if (viewToKeep != null) {
+            int originalVisibility = viewToKeep.getVisibility();
+            viewToKeep.setVisibility(View.VISIBLE);
+            Animator animator = onDisappear(sceneRoot, viewToKeep, startValues, endValues);
+            if (animator == null) {
+                viewToKeep.setVisibility(originalVisibility);
+            } else {
+                final View finalViewToKeep = viewToKeep;
+                animator.addListener(new AnimatorListenerAdapter() {
+                    boolean mCanceled = false;
+
+                    @Override
+                    public void onAnimationPause(Animator animation) {
+                        if (!mCanceled) {
+                            finalViewToKeep.setVisibility(finalVisibility);
+                        }
+                    }
+
+                    @Override
+                    public void onAnimationResume(Animator animation) {
+                        if (!mCanceled) {
+                            finalViewToKeep.setVisibility(View.VISIBLE);
+                        }
+                    }
+
+                    @Override
+                    public void onAnimationCancel(Animator animation) {
+                        mCanceled = true;
+                    }
+
+                    @Override
+                    public void onAnimationEnd(Animator animation) {
+                        if (!mCanceled) {
+                            finalViewToKeep.setVisibility(finalVisibility);
+                        }
+                    }
+                });
+            }
+            return animator;
+        }
+        return null;
+    }
+
+    /**
+     * The default implementation of this method returns a null Animator. Subclasses should
+     * override this method to make targets disappear with the desired transition. The
+     * method should only be called from
+     * {@link #onDisappear(ViewGroup, TransitionValues, int, TransitionValues, int)}.
+     *
+     * @param sceneRoot The root of the transition hierarchy
+     * @param view The View to make disappear. This will be in the target scene's View
+     *             hierarchy or in an {@link android.view.ViewGroupOverlay} and will be
+     *             VISIBLE.
+     * @param startValues The target values in the start scene
+     * @param endValues The target values in the end scene
+     * @return An Animator to be started at the appropriate time in the
+     * overall transition for this scene change. A null value means no animation
+     * should be run.
+     */
+    public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,
+            TransitionValues endValues) {
         return null;
     }
 }
diff --git a/core/java/android/transition/VisibilityPropagation.java b/core/java/android/transition/VisibilityPropagation.java
new file mode 100644
index 0000000..0326d47
--- /dev/null
+++ b/core/java/android/transition/VisibilityPropagation.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2014 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 android.transition;
+
+import android.view.View;
+
+/**
+ * Base class for <code>TransitionPropagation</code>s that care about
+ * View Visibility and the center position of the View.
+ */
+public abstract class VisibilityPropagation extends TransitionPropagation {
+
+    /**
+     * The property key used for {@link android.view.View#getVisibility()}.
+     */
+    private static final String PROPNAME_VISIBILITY = "android:visibilityPropagation:visibility";
+
+    /**
+     * The property key used for the center of the View in screen coordinates. This is an
+     * int[2] with the index 0 taking the x coordinate and index 1 taking the y coordinate.
+     */
+    private static final String PROPNAME_VIEW_CENTER = "android:visibilityPropagation:center";
+
+    private static final String[] VISIBILITY_PROPAGATION_VALUES = {
+            PROPNAME_VISIBILITY,
+            PROPNAME_VIEW_CENTER,
+    };
+
+    @Override
+    public void captureValues(TransitionValues values) {
+        View view = values.view;
+        values.values.put(PROPNAME_VISIBILITY, view.getVisibility());
+        int[] loc = new int[2];
+        view.getLocationOnScreen(loc);
+        loc[0] += Math.round(view.getTranslationX());
+        loc[0] += view.getWidth() / 2;
+        loc[1] += Math.round(view.getTranslationY());
+        loc[1] += view.getHeight() / 2;
+        values.values.put(PROPNAME_VIEW_CENTER, loc);
+    }
+
+    @Override
+    public String[] getPropagationProperties() {
+        return VISIBILITY_PROPAGATION_VALUES;
+    }
+
+    /**
+     * Returns {@link android.view.View#getVisibility()} for the View at the time the values
+     * were captured.
+     * @param values The TransitionValues captured at the start or end of the Transition.
+     * @return {@link android.view.View#getVisibility()} for the View at the time the values
+     * were captured.
+     */
+    public int getViewVisibility(TransitionValues values) {
+        if (values == null) {
+            return View.GONE;
+        }
+        Integer visibility = (Integer) values.values.get(PROPNAME_VISIBILITY);
+        if (visibility == null) {
+            return View.GONE;
+        }
+        return visibility;
+    }
+
+    /**
+     * Returns the View's center x coordinate, relative to the screen, at the time the values
+     * were captured.
+     * @param values The TransitionValues captured at the start or end of the Transition.
+     * @return the View's center x coordinate, relative to the screen, at the time the values
+     * were captured.
+     */
+    public int getViewX(TransitionValues values) {
+        return getViewCoordinate(values, 0);
+    }
+
+    /**
+     * Returns the View's center y coordinate, relative to the screen, at the time the values
+     * were captured.
+     * @param values The TransitionValues captured at the start or end of the Transition.
+     * @return the View's center y coordinate, relative to the screen, at the time the values
+     * were captured.
+     */
+    public int getViewY(TransitionValues values) {
+        return getViewCoordinate(values, 1);
+    }
+
+    private static int getViewCoordinate(TransitionValues values, int coordinateIndex) {
+        if (values == null) {
+            return -1;
+        }
+
+        int[] coordinates = (int[]) values.values.get(PROPNAME_VIEW_CENTER);
+        if (coordinates == null) {
+            return -1;
+        }
+
+        return coordinates[coordinateIndex];
+    }
+}
diff --git a/core/java/android/tv/ITvInputClient.aidl b/core/java/android/tv/ITvInputClient.aidl
new file mode 100644
index 0000000..538f8a1
--- /dev/null
+++ b/core/java/android/tv/ITvInputClient.aidl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.content.ComponentName;
+import android.tv.ITvInputSession;
+import android.view.InputChannel;
+
+/**
+ * Interface a client of the ITvInputManager implements, to identify itself and receive information
+ * about changes to the state of each TV input service.
+ * @hide
+ */
+oneway interface ITvInputClient {
+    void onSessionCreated(in ComponentName name, IBinder token, in InputChannel channel, int seq);
+    void onAvailabilityChanged(in ComponentName name, boolean isAvailable);
+}
diff --git a/core/java/android/tv/ITvInputManager.aidl b/core/java/android/tv/ITvInputManager.aidl
new file mode 100644
index 0000000..a4c99e4
--- /dev/null
+++ b/core/java/android/tv/ITvInputManager.aidl
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.content.ComponentName;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.tv.ITvInputClient;
+import android.tv.TvInputInfo;
+import android.view.Surface;
+
+/**
+ * Interface to the TV input manager service.
+ * @hide
+ */
+interface ITvInputManager {
+    List<TvInputInfo> getTvInputList(int userId);
+
+    boolean getAvailability(in ITvInputClient client, in ComponentName name, int userId);
+
+    void registerCallback(in ITvInputClient client, in ComponentName name, int userId);
+    void unregisterCallback(in ITvInputClient client, in ComponentName name, int userId);
+
+    void createSession(in ITvInputClient client, in ComponentName name, int seq, int userId);
+    void releaseSession(in IBinder sessionToken, int userId);
+
+    void setSurface(in IBinder sessionToken, in Surface surface, int userId);
+    void setVolume(in IBinder sessionToken, float volume, int userId);
+    void tune(in IBinder sessionToken, in Uri channelUri, int userId);
+
+    void createOverlayView(in IBinder sessionToken, in IBinder windowToken, in Rect frame,
+            int userId);
+    void relayoutOverlayView(in IBinder sessionToken, in Rect frame, int userId);
+    void removeOverlayView(in IBinder sessionToken, int userId);
+}
diff --git a/core/java/android/tv/ITvInputService.aidl b/core/java/android/tv/ITvInputService.aidl
new file mode 100644
index 0000000..4f1bc2b
--- /dev/null
+++ b/core/java/android/tv/ITvInputService.aidl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.tv.ITvInputServiceCallback;
+import android.tv.ITvInputSessionCallback;
+import android.view.InputChannel;
+
+/**
+ * Top-level interface to a TV input component (implemented in a Service).
+ * @hide
+ */
+oneway interface ITvInputService {
+    void registerCallback(ITvInputServiceCallback callback);
+    void unregisterCallback(in ITvInputServiceCallback callback);
+    void createSession(in InputChannel channel, ITvInputSessionCallback callback);
+}
diff --git a/core/java/android/tv/ITvInputServiceCallback.aidl b/core/java/android/tv/ITvInputServiceCallback.aidl
new file mode 100644
index 0000000..e535c81
--- /dev/null
+++ b/core/java/android/tv/ITvInputServiceCallback.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.content.ComponentName;
+
+/**
+ * Helper interface for ITvInputService to allow the TV input to notify the client when its status
+ * has been changed.
+ * @hide
+ */
+oneway interface ITvInputServiceCallback {
+    void onAvailabilityChanged(in ComponentName name, boolean isAvailable);
+}
diff --git a/core/java/android/tv/ITvInputSession.aidl b/core/java/android/tv/ITvInputSession.aidl
new file mode 100644
index 0000000..32fee4b
--- /dev/null
+++ b/core/java/android/tv/ITvInputSession.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.graphics.Rect;
+import android.net.Uri;
+import android.view.Surface;
+
+/**
+ * Sub-interface of ITvInputService which is created per session and has its own context.
+ * @hide
+ */
+oneway interface ITvInputSession {
+    void release();
+
+    void setSurface(in Surface surface);
+    // TODO: Remove this once it becomes irrelevant for applications to handle audio focus. The plan
+    // is to introduce some new concepts that will solve a number of problems in audio policy today.
+    void setVolume(float volume);
+    void tune(in Uri channelUri);
+
+    void createOverlayView(in IBinder windowToken, in Rect frame);
+    void relayoutOverlayView(in Rect frame);
+    void removeOverlayView();
+}
diff --git a/core/java/android/tv/ITvInputSessionCallback.aidl b/core/java/android/tv/ITvInputSessionCallback.aidl
new file mode 100644
index 0000000..a2bd0d7
--- /dev/null
+++ b/core/java/android/tv/ITvInputSessionCallback.aidl
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.tv.ITvInputSession;
+
+/**
+ * Helper interface for ITvInputSession to allow the TV input to notify the system service when a
+ * new session has been created.
+ * @hide
+ */
+oneway interface ITvInputSessionCallback {
+    void onSessionCreated(ITvInputSession session);
+}
diff --git a/core/java/android/tv/ITvInputSessionWrapper.java b/core/java/android/tv/ITvInputSessionWrapper.java
new file mode 100644
index 0000000..3ccccf3
--- /dev/null
+++ b/core/java/android/tv/ITvInputSessionWrapper.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.tv.TvInputManager.Session;
+import android.tv.TvInputService.TvInputSessionImpl;
+import android.util.Log;
+import android.view.InputChannel;
+import android.view.InputEvent;
+import android.view.InputEventReceiver;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.Surface;
+
+import com.android.internal.os.HandlerCaller;
+import com.android.internal.os.SomeArgs;
+
+/**
+ * Implements the internal ITvInputSession interface to convert incoming calls on to it back to
+ * calls on the public TvInputSession interface, scheduling them on the main thread of the process.
+ *
+ * @hide
+ */
+public class ITvInputSessionWrapper extends ITvInputSession.Stub implements HandlerCaller.Callback {
+    private static final String TAG = "TvInputSessionWrapper";
+
+    private static final int DO_RELEASE = 1;
+    private static final int DO_SET_SURFACE = 2;
+    private static final int DO_SET_VOLUME = 3;
+    private static final int DO_TUNE = 4;
+    private static final int DO_CREATE_OVERLAY_VIEW = 5;
+    private static final int DO_RELAYOUT_OVERLAY_VIEW = 6;
+    private static final int DO_REMOVE_OVERLAY_VIEW = 7;
+
+    private final HandlerCaller mCaller;
+
+    private TvInputSessionImpl mTvInputSessionImpl;
+    private InputChannel mChannel;
+    private TvInputEventReceiver mReceiver;
+
+    public ITvInputSessionWrapper(Context context, TvInputSessionImpl sessionImpl,
+            InputChannel channel) {
+        mCaller = new HandlerCaller(context, null, this, true /* asyncHandler */);
+        mTvInputSessionImpl = sessionImpl;
+        mChannel = channel;
+        if (channel != null) {
+            mReceiver = new TvInputEventReceiver(channel, context.getMainLooper());
+        }
+    }
+
+    @Override
+    public void executeMessage(Message msg) {
+        if (mTvInputSessionImpl == null) {
+            return;
+        }
+
+        switch (msg.what) {
+            case DO_RELEASE: {
+                mTvInputSessionImpl.release();
+                mTvInputSessionImpl = null;
+                if (mReceiver != null) {
+                    mReceiver.dispose();
+                    mReceiver = null;
+                }
+                if (mChannel != null) {
+                    mChannel.dispose();
+                    mChannel = null;
+                }
+                return;
+            }
+            case DO_SET_SURFACE: {
+                mTvInputSessionImpl.setSurface((Surface) msg.obj);
+                return;
+            }
+            case DO_SET_VOLUME: {
+                mTvInputSessionImpl.setVolume((Float) msg.obj);
+                return;
+            }
+            case DO_TUNE: {
+                mTvInputSessionImpl.tune((Uri) msg.obj);
+                return;
+            }
+            case DO_CREATE_OVERLAY_VIEW: {
+                SomeArgs args = (SomeArgs) msg.obj;
+                mTvInputSessionImpl.createOverlayView((IBinder) args.arg1, (Rect) args.arg2);
+                args.recycle();
+                return;
+            }
+            case DO_RELAYOUT_OVERLAY_VIEW: {
+                mTvInputSessionImpl.relayoutOverlayView((Rect) msg.obj);
+                return;
+            }
+            case DO_REMOVE_OVERLAY_VIEW: {
+                mTvInputSessionImpl.removeOverlayView(true);
+                return;
+            }
+            default: {
+                Log.w(TAG, "Unhandled message code: " + msg.what);
+                return;
+            }
+        }
+    }
+
+    @Override
+    public void release() {
+        mCaller.executeOrSendMessage(mCaller.obtainMessage(DO_RELEASE));
+    }
+
+    @Override
+    public void setSurface(Surface surface) {
+        mCaller.executeOrSendMessage(mCaller.obtainMessageO(DO_SET_SURFACE, surface));
+    }
+
+    @Override
+    public final void setVolume(float volume) {
+        mCaller.executeOrSendMessage(mCaller.obtainMessageO(DO_SET_VOLUME, volume));
+    }
+
+    @Override
+    public void tune(Uri channelUri) {
+        mCaller.executeOrSendMessage(mCaller.obtainMessageO(DO_TUNE, channelUri));
+    }
+
+    @Override
+    public void createOverlayView(IBinder windowToken, Rect frame) {
+        mCaller.executeOrSendMessage(mCaller.obtainMessageOO(DO_CREATE_OVERLAY_VIEW, windowToken,
+                frame));
+    }
+
+    @Override
+    public void relayoutOverlayView(Rect frame) {
+        mCaller.executeOrSendMessage(mCaller.obtainMessageO(DO_RELAYOUT_OVERLAY_VIEW, frame));
+    }
+
+    @Override
+    public void removeOverlayView() {
+        mCaller.executeOrSendMessage(mCaller.obtainMessage(DO_REMOVE_OVERLAY_VIEW));
+    }
+
+    private final class TvInputEventReceiver extends InputEventReceiver {
+        public TvInputEventReceiver(InputChannel inputChannel, Looper looper) {
+            super(inputChannel, looper);
+        }
+
+        @Override
+        public void onInputEvent(InputEvent event) {
+            if (mTvInputSessionImpl == null) {
+                // The session has been finished.
+                finishInputEvent(event, false);
+                return;
+            }
+
+            int handled = mTvInputSessionImpl.dispatchInputEvent(event, this);
+            if (handled != Session.DISPATCH_IN_PROGRESS) {
+                finishInputEvent(event, handled == Session.DISPATCH_HANDLED);
+            }
+        }
+    }
+}
diff --git a/core/java/android/tv/TvInputInfo.aidl b/core/java/android/tv/TvInputInfo.aidl
new file mode 100644
index 0000000..abc4b47
--- /dev/null
+++ b/core/java/android/tv/TvInputInfo.aidl
@@ -0,0 +1,19 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+parcelable TvInputInfo;
diff --git a/core/java/android/tv/TvInputInfo.java b/core/java/android/tv/TvInputInfo.java
new file mode 100644
index 0000000..90e4177
--- /dev/null
+++ b/core/java/android/tv/TvInputInfo.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.content.ComponentName;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * This class is used to specify meta information of a TV input.
+ */
+public final class TvInputInfo implements Parcelable {
+    private final ResolveInfo mService;
+    private final String mId;
+
+    /**
+     * Constructor.
+     *
+     * @param service The ResolveInfo returned from the package manager about this TV input service.
+     * @hide
+     */
+    public TvInputInfo(ResolveInfo service) {
+        mService = service;
+        ServiceInfo si = service.serviceInfo;
+        mId = new ComponentName(si.packageName, si.name).flattenToShortString();
+    }
+
+    /**
+     * Returns a unique ID for this TV input. The ID is generated from the package and class name
+     * implementing the TV input service.
+     */
+    public String getId() {
+        return mId;
+    }
+
+    /**
+     * Returns the .apk package that implements this TV input service.
+     */
+    public String getPackageName() {
+        return mService.serviceInfo.packageName;
+    }
+
+    /**
+     * Returns the class name of the service component that implements this TV input service.
+     */
+    public String getServiceName() {
+        return mService.serviceInfo.name;
+    }
+
+    /**
+     * Returns the component of the service that implements this TV input.
+     */
+    public ComponentName getComponent() {
+        return new ComponentName(mService.serviceInfo.packageName, mService.serviceInfo.name);
+    }
+
+    /**
+     * Loads the user-displayed label for this TV input service.
+     *
+     * @param pm Supplies a PackageManager used to load the TV input's resources.
+     * @return Returns a CharSequence containing the TV input's label. If the TV input does not have
+     *         a label, its name is returned.
+     */
+    public CharSequence loadLabel(PackageManager pm) {
+        return mService.loadLabel(pm);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public int hashCode() {
+        return mId.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == this) {
+            return true;
+        }
+
+        if (!(o instanceof TvInputInfo)) {
+            return false;
+        }
+
+        TvInputInfo obj = (TvInputInfo) o;
+        return mId.equals(obj.mId)
+                && mService.serviceInfo.packageName.equals(obj.mService.serviceInfo.packageName)
+                && mService.serviceInfo.name.equals(obj.mService.serviceInfo.name);
+    }
+
+    @Override
+    public String toString() {
+        return "TvInputInfo{id=" + mId
+                + ", pkg=" + mService.serviceInfo.packageName
+                + ", service=" + mService.serviceInfo.name + "}";
+    }
+
+    /**
+     * Used to package this object into a {@link Parcel}.
+     *
+     * @param dest The {@link Parcel} to be written.
+     * @param flags The flags used for parceling.
+     */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mId);
+        mService.writeToParcel(dest, flags);
+    }
+
+    /**
+     * Used to make this class parcelable.
+     *
+     * @hide
+     */
+    public static final Parcelable.Creator<TvInputInfo> CREATOR =
+            new Parcelable.Creator<TvInputInfo>() {
+        @Override
+        public TvInputInfo createFromParcel(Parcel in) {
+            return new TvInputInfo(in);
+        }
+
+        @Override
+        public TvInputInfo[] newArray(int size) {
+            return new TvInputInfo[size];
+        }
+    };
+
+    private TvInputInfo(Parcel in) {
+        mId = in.readString();
+        mService = ResolveInfo.CREATOR.createFromParcel(in);
+    }
+}
diff --git a/core/java/android/tv/TvInputManager.java b/core/java/android/tv/TvInputManager.java
new file mode 100644
index 0000000..7b9b1fb
--- /dev/null
+++ b/core/java/android/tv/TvInputManager.java
@@ -0,0 +1,742 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.content.ComponentName;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Log;
+import android.util.Pools.Pool;
+import android.util.Pools.SimplePool;
+import android.util.SparseArray;
+import android.view.InputChannel;
+import android.view.InputEvent;
+import android.view.InputEventSender;
+import android.view.Surface;
+import android.view.View;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Central system API to the overall TV input framework (TIF) architecture, which arbitrates
+ * interaction between applications and the selected TV inputs.
+ */
+public final class TvInputManager {
+    private static final String TAG = "TvInputManager";
+
+    private final ITvInputManager mService;
+
+    // A mapping from an input to the list of its TvInputListenerRecords.
+    private final Map<ComponentName, List<TvInputListenerRecord>> mTvInputListenerRecordsMap =
+            new HashMap<ComponentName, List<TvInputListenerRecord>>();
+
+    // A mapping from the sequence number of a session to its SessionCreateCallbackRecord.
+    private final SparseArray<SessionCreateCallbackRecord> mSessionCreateCallbackRecordMap =
+            new SparseArray<SessionCreateCallbackRecord>();
+
+    // A sequence number for the next session to be created. Should be protected by a lock
+    // {@code mSessionCreateCallbackRecordMap}.
+    private int mNextSeq;
+
+    private final ITvInputClient mClient;
+
+    private final int mUserId;
+
+    /**
+     * Interface used to receive the created session.
+     */
+    public interface SessionCreateCallback {
+        /**
+         * This is called after {@link TvInputManager#createSession} has been processed.
+         *
+         * @param session A {@link TvInputManager.Session} instance created. This can be
+         *            {@code null} if the creation request failed.
+         */
+        void onSessionCreated(Session session);
+    }
+
+    private static final class SessionCreateCallbackRecord {
+        private final SessionCreateCallback mSessionCreateCallback;
+        private final Handler mHandler;
+
+        public SessionCreateCallbackRecord(SessionCreateCallback sessionCreateCallback,
+                Handler handler) {
+            mSessionCreateCallback = sessionCreateCallback;
+            mHandler = handler;
+        }
+
+        public void postSessionCreated(final Session session) {
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    mSessionCreateCallback.onSessionCreated(session);
+                }
+            });
+        }
+    }
+
+    /**
+     * Interface used to monitor status of the TV input.
+     */
+    public abstract static class TvInputListener {
+        /**
+         * This is called when the availability status of a given TV input is changed.
+         *
+         * @param name {@link ComponentName} of {@link android.app.Service} that implements the
+         *            given TV input.
+         * @param isAvailable {@code true} if the given TV input is available to show TV programs.
+         *            {@code false} otherwise.
+         */
+        public void onAvailabilityChanged(ComponentName name, boolean isAvailable) {
+        }
+    }
+
+    private static final class TvInputListenerRecord {
+        private final TvInputListener mListener;
+        private final Handler mHandler;
+
+        public TvInputListenerRecord(TvInputListener listener, Handler handler) {
+            mListener = listener;
+            mHandler = handler;
+        }
+
+        public TvInputListener getListener() {
+            return mListener;
+        }
+
+        public void postAvailabilityChanged(final ComponentName name, final boolean isAvailable) {
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    mListener.onAvailabilityChanged(name, isAvailable);
+                }
+            });
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public TvInputManager(ITvInputManager service, int userId) {
+        mService = service;
+        mUserId = userId;
+        mClient = new ITvInputClient.Stub() {
+            @Override
+            public void onSessionCreated(ComponentName name, IBinder token, InputChannel channel,
+                    int seq) {
+                synchronized (mSessionCreateCallbackRecordMap) {
+                    SessionCreateCallbackRecord record = mSessionCreateCallbackRecordMap.get(seq);
+                    mSessionCreateCallbackRecordMap.delete(seq);
+                    if (record == null) {
+                        Log.e(TAG, "Callback not found for " + token);
+                        return;
+                    }
+                    Session session = null;
+                    if (token != null) {
+                        session = new Session(token, channel, mService, mUserId);
+                    }
+                    record.postSessionCreated(session);
+                }
+            }
+
+            @Override
+            public void onAvailabilityChanged(ComponentName name, boolean isAvailable) {
+                synchronized (mTvInputListenerRecordsMap) {
+                    List<TvInputListenerRecord> records = mTvInputListenerRecordsMap.get(name);
+                    if (records == null) {
+                        // Silently ignore - no listener is registered yet.
+                        return;
+                    }
+                    int recordsCount = records.size();
+                    for (int i = 0; i < recordsCount; i++) {
+                        records.get(i).postAvailabilityChanged(name, isAvailable);
+                    }
+                }
+            }
+        };
+    }
+
+    /**
+     * Returns the complete list of TV inputs on the system.
+     *
+     * @return List of {@link TvInputInfo} for each TV input that describes its meta information.
+     */
+    public List<TvInputInfo> getTvInputList() {
+        try {
+            return mService.getTvInputList(mUserId);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Returns the availability of a given TV input.
+     *
+     * @param name {@link ComponentName} of {@link android.app.Service} that implements the given TV
+     *            input.
+     * @throws IllegalArgumentException if the argument is {@code null}.
+     * @throws IllegalStateException If there is no {@link TvInputListener} registered on the given
+     *             TV input.
+     */
+    public boolean getAvailability(ComponentName name) {
+        if (name == null) {
+            throw new IllegalArgumentException("name cannot be null");
+        }
+        synchronized (mTvInputListenerRecordsMap) {
+            List<TvInputListenerRecord> records = mTvInputListenerRecordsMap.get(name);
+            if (records == null || records.size() == 0) {
+                throw new IllegalStateException("At least one listener should be registered.");
+            }
+        }
+        try {
+            return mService.getAvailability(mClient, name, mUserId);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    /**
+     * Registers a {@link TvInputListener} for a given TV input.
+     *
+     * @param name {@link ComponentName} of {@link android.app.Service} that implements the given TV
+     *            input.
+     * @param listener a listener used to monitor status of the given TV input.
+     * @param handler a {@link Handler} that the status change will be delivered to.
+     * @throws IllegalArgumentException if any of the arguments is {@code null}.
+     */
+    public void registerListener(ComponentName name, TvInputListener listener, Handler handler) {
+        if (name == null) {
+            throw new IllegalArgumentException("name cannot be null");
+        }
+        if (listener == null) {
+            throw new IllegalArgumentException("listener cannot be null");
+        }
+        if (handler == null) {
+            throw new IllegalArgumentException("handler cannot be null");
+        }
+        synchronized (mTvInputListenerRecordsMap) {
+            List<TvInputListenerRecord> records = mTvInputListenerRecordsMap.get(name);
+            if (records == null) {
+                records = new ArrayList<TvInputListenerRecord>();
+                mTvInputListenerRecordsMap.put(name, records);
+                try {
+                    mService.registerCallback(mClient, name, mUserId);
+                } catch (RemoteException e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            records.add(new TvInputListenerRecord(listener, handler));
+        }
+    }
+
+    /**
+     * Unregisters the existing {@link TvInputListener} for a given TV input.
+     *
+     * @param name {@link ComponentName} of {@link android.app.Service} that implements the given TV
+     *            input.
+     * @param listener the existing listener to remove for the given TV input.
+     * @throws IllegalArgumentException if any of the arguments is {@code null}.
+     */
+    public void unregisterListener(ComponentName name, final TvInputListener listener) {
+        if (name == null) {
+            throw new IllegalArgumentException("name cannot be null");
+        }
+        if (listener == null) {
+            throw new IllegalArgumentException("listener cannot be null");
+        }
+        synchronized (mTvInputListenerRecordsMap) {
+            List<TvInputListenerRecord> records = mTvInputListenerRecordsMap.get(name);
+            if (records == null) {
+                Log.e(TAG, "No listener found for " + name.getClassName());
+                return;
+            }
+            for (Iterator<TvInputListenerRecord> it = records.iterator(); it.hasNext();) {
+                TvInputListenerRecord record = it.next();
+                if (record.getListener() == listener) {
+                    it.remove();
+                }
+            }
+            if (records.isEmpty()) {
+                try {
+                    mService.unregisterCallback(mClient, name, mUserId);
+                } catch (RemoteException e) {
+                    throw new RuntimeException(e);
+                } finally {
+                    mTvInputListenerRecordsMap.remove(name);
+                }
+            }
+        }
+    }
+
+    /**
+     * Creates a {@link Session} for a given TV input.
+     * <p>
+     * The number of sessions that can be created at the same time is limited by the capability of
+     * the given TV input.
+     * </p>
+     *
+     * @param name {@link ComponentName} of {@link android.app.Service} that implements the given TV
+     *            input.
+     * @param callback a callback used to receive the created session.
+     * @param handler a {@link Handler} that the session creation will be delivered to.
+     * @throws IllegalArgumentException if any of the arguments is {@code null}.
+     */
+    public void createSession(ComponentName name, final SessionCreateCallback callback,
+            Handler handler) {
+        if (name == null) {
+            throw new IllegalArgumentException("name cannot be null");
+        }
+        if (callback == null) {
+            throw new IllegalArgumentException("callback cannot be null");
+        }
+        if (handler == null) {
+            throw new IllegalArgumentException("handler cannot be null");
+        }
+        SessionCreateCallbackRecord record = new SessionCreateCallbackRecord(callback, handler);
+        synchronized (mSessionCreateCallbackRecordMap) {
+            int seq = mNextSeq++;
+            mSessionCreateCallbackRecordMap.put(seq, record);
+            try {
+                mService.createSession(mClient, name, seq, mUserId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    /** The Session provides the per-session functionality of TV inputs. */
+    public static final class Session {
+        static final int DISPATCH_IN_PROGRESS = -1;
+        static final int DISPATCH_NOT_HANDLED = 0;
+        static final int DISPATCH_HANDLED = 1;
+
+        private static final long INPUT_SESSION_NOT_RESPONDING_TIMEOUT = 2500;
+
+        private final ITvInputManager mService;
+        private final int mUserId;
+
+        // For scheduling input event handling on the main thread. This also serves as a lock to
+        // protect pending input events and the input channel.
+        private final InputEventHandler mHandler = new InputEventHandler(Looper.getMainLooper());
+
+        private final Pool<PendingEvent> mPendingEventPool = new SimplePool<PendingEvent>(20);
+        private final SparseArray<PendingEvent> mPendingEvents = new SparseArray<PendingEvent>(20);
+
+        private IBinder mToken;
+        private TvInputEventSender mSender;
+        private InputChannel mChannel;
+
+        /** @hide */
+        private Session(IBinder token, InputChannel channel, ITvInputManager service, int userId) {
+            mToken = token;
+            mChannel = channel;
+            mService = service;
+            mUserId = userId;
+        }
+
+        /**
+         * Releases this session.
+         *
+         * @throws IllegalStateException if the session has been already released.
+         */
+        public void release() {
+            if (mToken == null) {
+                throw new IllegalStateException("the session has been already released");
+            }
+            try {
+                mService.releaseSession(mToken, mUserId);
+                mToken = null;
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+
+            synchronized (mHandler) {
+                if (mChannel != null) {
+                    if (mSender != null) {
+                        flushPendingEventsLocked();
+                        mSender.dispose();
+                        mSender = null;
+                    }
+                    mChannel.dispose();
+                    mChannel = null;
+                }
+            }
+        }
+
+        /**
+         * Sets the {@link android.view.Surface} for this session.
+         *
+         * @param surface A {@link android.view.Surface} used to render video.
+         * @throws IllegalStateException if the session has been already released.
+         */
+        void setSurface(Surface surface) {
+            if (mToken == null) {
+                throw new IllegalStateException("the session has been already released");
+            }
+            // surface can be null.
+            try {
+                mService.setSurface(mToken, surface, mUserId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        /**
+         * Sets the relative volume of this session to handle a change of audio focus.
+         *
+         * @param volume A volume value between 0.0f to 1.0f.
+         * @throws IllegalArgumentException if the volume value is out of range.
+         * @throws IllegalStateException if the session has been already released.
+         */
+        public void setVolume(float volume) {
+            if (mToken == null) {
+                throw new IllegalStateException("the session has been already released");
+            }
+            try {
+                if (volume < 0.0f || volume > 1.0f) {
+                    throw new IllegalArgumentException("volume should be between 0.0f and 1.0f");
+                }
+                mService.setVolume(mToken, volume, mUserId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        /**
+         * Tunes to a given channel.
+         *
+         * @param channelUri The URI of a channel.
+         * @throws IllegalArgumentException if the argument is {@code null}.
+         * @throws IllegalStateException if the session has been already released.
+         */
+        public void tune(Uri channelUri) {
+            if (channelUri == null) {
+                throw new IllegalArgumentException("channelUri cannot be null");
+            }
+            if (mToken == null) {
+                throw new IllegalStateException("the session has been already released");
+            }
+            try {
+                mService.tune(mToken, channelUri, mUserId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        /**
+         * Creates an overlay view. Once the overlay view is created, {@link #relayoutOverlayView}
+         * should be called whenever the layout of its containing view is changed.
+         * {@link #removeOverlayView()} should be called to remove the overlay view.
+         * Since a session can have only one overlay view, this method should be called only once
+         * or it can be called again after calling {@link #removeOverlayView()}.
+         *
+         * @param view A view playing TV.
+         * @param frame A position of the overlay view.
+         * @throws IllegalArgumentException if any of the arguments is {@code null}.
+         * @throws IllegalStateException if {@code view} is not attached to a window or
+         *         if the session has been already released.
+         */
+        void createOverlayView(View view, Rect frame) {
+            if (view == null) {
+                throw new IllegalArgumentException("view cannot be null");
+            }
+            if (frame == null) {
+                throw new IllegalArgumentException("frame cannot be null");
+            }
+            if (view.getWindowToken() == null) {
+                throw new IllegalStateException("view must be attached to a window");
+            }
+            if (mToken == null) {
+                throw new IllegalStateException("the session has been already released");
+            }
+            try {
+                mService.createOverlayView(mToken, view.getWindowToken(), frame, mUserId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        /**
+         * Relayouts the current overlay view.
+         *
+         * @param frame A new position of the overlay view.
+         * @throws IllegalArgumentException if the arguments is {@code null}.
+         * @throws IllegalStateException if the session has been already released.
+         */
+        void relayoutOverlayView(Rect frame) {
+            if (frame == null) {
+                throw new IllegalArgumentException("frame cannot be null");
+            }
+            if (mToken == null) {
+                throw new IllegalStateException("the session has been already released");
+            }
+            try {
+                mService.relayoutOverlayView(mToken, frame, mUserId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        /**
+         * Removes the current overlay view.
+         *
+         * @throws IllegalStateException if the session has been already released.
+         */
+        void removeOverlayView() {
+            if (mToken == null) {
+                throw new IllegalStateException("the session has been already released");
+            }
+            try {
+                mService.removeOverlayView(mToken, mUserId);
+            } catch (RemoteException e) {
+                throw new RuntimeException(e);
+            }
+        }
+
+        /**
+         * Dispatches an input event to this session.
+         *
+         * @param event {@link InputEvent} to dispatch.
+         * @param token A token used to identify the input event later in the callback.
+         * @param callback A callback used to receive the dispatch result.
+         * @param handler {@link Handler} that the dispatch result will be delivered to.
+         * @return Returns {@link #DISPATCH_HANDLED} if the event was handled. Returns
+         *         {@link #DISPATCH_NOT_HANDLED} if the event was not handled. Returns
+         *         {@link #DISPATCH_IN_PROGRESS} if the event is in progress and the callback will
+         *         be invoked later.
+         * @throws IllegalArgumentException if any of the necessary arguments is {@code null}.
+         * @hide
+         */
+        public int dispatchInputEvent(InputEvent event, Object token,
+                FinishedInputEventCallback callback, Handler handler) {
+            if (event == null) {
+                throw new IllegalArgumentException("event cannot be null");
+            }
+            if (callback != null && handler == null) {
+                throw new IllegalArgumentException("handler cannot be null");
+            }
+            synchronized (mHandler) {
+                if (mChannel == null) {
+                    return DISPATCH_NOT_HANDLED;
+                }
+                PendingEvent p = obtainPendingEventLocked(event, token, callback, handler);
+                if (Looper.myLooper() == Looper.getMainLooper()) {
+                    // Already running on the main thread so we can send the event immediately.
+                    return sendInputEventOnMainLooperLocked(p);
+                }
+
+                // Post the event to the main thread.
+                Message msg = mHandler.obtainMessage(InputEventHandler.MSG_SEND_INPUT_EVENT, p);
+                msg.setAsynchronous(true);
+                mHandler.sendMessage(msg);
+                return DISPATCH_IN_PROGRESS;
+            }
+        }
+
+        /**
+         * Callback that is invoked when an input event that was dispatched to this session has been
+         * finished.
+         *
+         * @hide
+         */
+        public interface FinishedInputEventCallback {
+            /**
+             * Called when the dispatched input event is finished.
+             *
+             * @param token a token passed to {@link #dispatchInputEvent}.
+             * @param handled {@code true} if the dispatched input event was handled properly.
+             *            {@code false} otherwise.
+             */
+            public void onFinishedInputEvent(Object token, boolean handled);
+        }
+
+        // Must be called on the main looper
+        private void sendInputEventAndReportResultOnMainLooper(PendingEvent p) {
+            synchronized (mHandler) {
+                int result = sendInputEventOnMainLooperLocked(p);
+                if (result == DISPATCH_IN_PROGRESS) {
+                    return;
+                }
+            }
+
+            invokeFinishedInputEventCallback(p, false);
+        }
+
+        private int sendInputEventOnMainLooperLocked(PendingEvent p) {
+            if (mChannel != null) {
+                if (mSender == null) {
+                    mSender = new TvInputEventSender(mChannel, mHandler.getLooper());
+                }
+
+                final InputEvent event = p.mEvent;
+                final int seq = event.getSequenceNumber();
+                if (mSender.sendInputEvent(seq, event)) {
+                    mPendingEvents.put(seq, p);
+                    Message msg = mHandler.obtainMessage(InputEventHandler.MSG_TIMEOUT_INPUT_EVENT, p);
+                    msg.setAsynchronous(true);
+                    mHandler.sendMessageDelayed(msg, INPUT_SESSION_NOT_RESPONDING_TIMEOUT);
+                    return DISPATCH_IN_PROGRESS;
+                }
+
+                Log.w(TAG, "Unable to send input event to session: " + mToken + " dropping:"
+                        + event);
+            }
+            return DISPATCH_NOT_HANDLED;
+        }
+
+        void finishedInputEvent(int seq, boolean handled, boolean timeout) {
+            final PendingEvent p;
+            synchronized (mHandler) {
+                int index = mPendingEvents.indexOfKey(seq);
+                if (index < 0) {
+                    return; // spurious, event already finished or timed out
+                }
+
+                p = mPendingEvents.valueAt(index);
+                mPendingEvents.removeAt(index);
+
+                if (timeout) {
+                    Log.w(TAG, "Timeout waiting for seesion to handle input event after "
+                            + INPUT_SESSION_NOT_RESPONDING_TIMEOUT + " ms: " + mToken);
+                } else {
+                    mHandler.removeMessages(InputEventHandler.MSG_TIMEOUT_INPUT_EVENT, p);
+                }
+            }
+
+            invokeFinishedInputEventCallback(p, handled);
+        }
+
+        // Assumes the event has already been removed from the queue.
+        void invokeFinishedInputEventCallback(PendingEvent p, boolean handled) {
+            p.mHandled = handled;
+            if (p.mHandler.getLooper().isCurrentThread()) {
+                // Already running on the callback handler thread so we can send the callback
+                // immediately.
+                p.run();
+            } else {
+                // Post the event to the callback handler thread.
+                // In this case, the callback will be responsible for recycling the event.
+                Message msg = Message.obtain(p.mHandler, p);
+                msg.setAsynchronous(true);
+                msg.sendToTarget();
+            }
+        }
+
+        private void flushPendingEventsLocked() {
+            mHandler.removeMessages(InputEventHandler.MSG_FLUSH_INPUT_EVENT);
+
+            final int count = mPendingEvents.size();
+            for (int i = 0; i < count; i++) {
+                int seq = mPendingEvents.keyAt(i);
+                Message msg = mHandler.obtainMessage(InputEventHandler.MSG_FLUSH_INPUT_EVENT, seq, 0);
+                msg.setAsynchronous(true);
+                msg.sendToTarget();
+            }
+        }
+
+        private PendingEvent obtainPendingEventLocked(InputEvent event, Object token,
+                FinishedInputEventCallback callback, Handler handler) {
+            PendingEvent p = mPendingEventPool.acquire();
+            if (p == null) {
+                p = new PendingEvent();
+            }
+            p.mEvent = event;
+            p.mToken = token;
+            p.mCallback = callback;
+            p.mHandler = handler;
+            return p;
+        }
+
+        private void recyclePendingEventLocked(PendingEvent p) {
+            p.recycle();
+            mPendingEventPool.release(p);
+        }
+
+        private final class InputEventHandler extends Handler {
+            public static final int MSG_SEND_INPUT_EVENT = 1;
+            public static final int MSG_TIMEOUT_INPUT_EVENT = 2;
+            public static final int MSG_FLUSH_INPUT_EVENT = 3;
+
+            InputEventHandler(Looper looper) {
+                super(looper, null, true);
+            }
+
+            @Override
+            public void handleMessage(Message msg) {
+                switch (msg.what) {
+                    case MSG_SEND_INPUT_EVENT: {
+                        sendInputEventAndReportResultOnMainLooper((PendingEvent) msg.obj);
+                        return;
+                    }
+                    case MSG_TIMEOUT_INPUT_EVENT: {
+                        finishedInputEvent(msg.arg1, false, true);
+                        return;
+                    }
+                    case MSG_FLUSH_INPUT_EVENT: {
+                        finishedInputEvent(msg.arg1, false, false);
+                        return;
+                    }
+                }
+            }
+        }
+
+        private final class TvInputEventSender extends InputEventSender {
+            public TvInputEventSender(InputChannel inputChannel, Looper looper) {
+                super(inputChannel, looper);
+            }
+
+            @Override
+            public void onInputEventFinished(int seq, boolean handled) {
+                finishedInputEvent(seq, handled, false);
+            }
+        }
+
+        private final class PendingEvent implements Runnable {
+            public InputEvent mEvent;
+            public Object mToken;
+            public FinishedInputEventCallback mCallback;
+            public Handler mHandler;
+            public boolean mHandled;
+
+            public void recycle() {
+                mEvent = null;
+                mToken = null;
+                mCallback = null;
+                mHandler = null;
+                mHandled = false;
+            }
+
+            @Override
+            public void run() {
+                mCallback.onFinishedInputEvent(mToken, mHandled);
+
+                synchronized (mHandler) {
+                    recyclePendingEventLocked(this);
+                }
+            }
+        }
+    }
+}
diff --git a/core/java/android/tv/TvInputService.java b/core/java/android/tv/TvInputService.java
new file mode 100644
index 0000000..70e7f95
--- /dev/null
+++ b/core/java/android/tv/TvInputService.java
@@ -0,0 +1,551 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.app.Service;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.tv.TvInputManager.Session;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.InputChannel;
+import android.view.InputDevice;
+import android.view.InputEvent;
+import android.view.InputEventReceiver;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.Surface;
+import android.view.View;
+import android.view.WindowManager;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.os.SomeArgs;
+
+/**
+ * A base class for implementing television input service.
+ */
+public abstract class TvInputService extends Service {
+    // STOPSHIP: Turn debugging off.
+    private static final boolean DEBUG = true;
+    private static final String TAG = "TvInputService";
+
+    /**
+     * This is the interface name that a service implementing a TV input should say that it support
+     * -- that is, this is the action it uses for its intent filter. To be supported, the service
+     * must also require the {@link android.Manifest.permission#BIND_TV_INPUT} permission so that
+     * other applications cannot abuse it.
+     */
+    public static final String SERVICE_INTERFACE = "android.tv.TvInputService";
+
+    private ComponentName mComponentName;
+    private final Handler mHandler = new ServiceHandler();
+    private final RemoteCallbackList<ITvInputServiceCallback> mCallbacks =
+            new RemoteCallbackList<ITvInputServiceCallback>();
+    private boolean mAvailable;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        mComponentName = new ComponentName(getPackageName(), getClass().getName());
+    }
+
+    @Override
+    public final IBinder onBind(Intent intent) {
+        return new ITvInputService.Stub() {
+            @Override
+            public void registerCallback(ITvInputServiceCallback cb) {
+                if (cb != null) {
+                    mCallbacks.register(cb);
+                    // The first time a callback is registered, the service needs to report its
+                    // availability status so that the system can know its initial value.
+                    try {
+                        cb.onAvailabilityChanged(mComponentName, mAvailable);
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "error in onAvailabilityChanged", e);
+                    }
+                }
+            }
+
+            @Override
+            public void unregisterCallback(ITvInputServiceCallback cb) {
+                if (cb != null) {
+                    mCallbacks.unregister(cb);
+                }
+            }
+
+            @Override
+            public void createSession(InputChannel channel, ITvInputSessionCallback cb) {
+                if (channel == null) {
+                    Log.w(TAG, "Creating session without input channel");
+                }
+                if (cb == null) {
+                    return;
+                }
+                SomeArgs args = SomeArgs.obtain();
+                args.arg1 = channel;
+                args.arg2 = cb;
+                mHandler.obtainMessage(ServiceHandler.DO_CREATE_SESSION, args).sendToTarget();
+            }
+        };
+    }
+
+    /**
+     * Convenience method to notify an availability change of this TV input service.
+     *
+     * @param available {@code true} if the input service is available to show TV programs.
+     */
+    public final void setAvailable(boolean available) {
+        if (available != mAvailable) {
+            mAvailable = available;
+            mHandler.obtainMessage(ServiceHandler.DO_BROADCAST_AVAILABILITY_CHANGE, available)
+                    .sendToTarget();
+        }
+    }
+
+    /**
+     * Get the number of callbacks that are registered.
+     *
+     * @hide
+     */
+    @VisibleForTesting
+    public final int getRegisteredCallbackCount() {
+        return mCallbacks.getRegisteredCallbackCount();
+    }
+
+    /**
+     * Returns a concrete implementation of {@link TvInputSessionImpl}.
+     * <p>
+     * May return {@code null} if this TV input service fails to create a session for some reason.
+     * </p>
+     */
+    public abstract TvInputSessionImpl onCreateSession();
+
+    /**
+     * Base class for derived classes to implement to provide {@link TvInputManager.Session}.
+     */
+    public abstract class TvInputSessionImpl implements KeyEvent.Callback {
+        private final KeyEvent.DispatcherState mDispatcherState = new KeyEvent.DispatcherState();
+        private final WindowManager mWindowManager;
+        private WindowManager.LayoutParams mWindowParams;
+        private Surface mSurface;
+        private View mOverlayView;
+        private boolean mOverlayViewEnabled;
+        private IBinder mWindowToken;
+        private Rect mOverlayFrame;
+
+        public TvInputSessionImpl() {
+            mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
+        }
+
+        /**
+         * Enables or disables the overlay view. By default, the overlay view is disabled. Must be
+         * called explicitly after the session is created to enable the overlay view.
+         *
+         * @param enable {@code true} if you want to enable the overlay view. {@code false}
+         *            otherwise.
+         */
+        public void setOverlayViewEnabled(final boolean enable) {
+            mHandler.post(new Runnable() {
+                @Override
+                public void run() {
+                    if (enable == mOverlayViewEnabled) {
+                        return;
+                    }
+                    mOverlayViewEnabled = enable;
+                    if (enable) {
+                        if (mWindowToken != null) {
+                            createOverlayView(mWindowToken, mOverlayFrame);
+                        }
+                    } else {
+                        removeOverlayView(false);
+                    }
+                }
+            });
+        }
+
+        /**
+         * Called when the session is released.
+         */
+        public abstract void onRelease();
+
+        /**
+         * Sets the {@link Surface} for the current input session on which the TV input renders
+         * video.
+         *
+         * @param surface {@link Surface} an application passes to this TV input session.
+         * @return {@code true} if the surface was set, {@code false} otherwise.
+         */
+        public abstract boolean onSetSurface(Surface surface);
+
+        /**
+         * Sets the relative volume of the current TV input session to handle the change of audio
+         * focus by setting.
+         *
+         * @param volume Volume scale from 0.0 to 1.0.
+         */
+        public abstract void onSetVolume(float volume);
+
+        /**
+         * Tunes to a given channel.
+         *
+         * @param channelUri The URI of the channel.
+         * @return {@code true} the tuning was successful, {@code false} otherwise.
+         */
+        public abstract boolean onTune(Uri channelUri);
+
+        /**
+         * Called when an application requests to create an overlay view. Each session
+         * implementation can override this method and return its own view.
+         *
+         * @return a view attached to the overlay window
+         */
+        public View onCreateOverlayView() {
+            return null;
+        }
+
+        /**
+         * Default implementation of {@link android.view.KeyEvent.Callback#onKeyDown(int, KeyEvent)
+         * KeyEvent.Callback.onKeyDown()}: always returns false (doesn't handle the event).
+         * <p>
+         * Override this to intercept key down events before they are processed by the application.
+         * If you return true, the application will not process the event itself. If you return
+         * false, the normal application processing will occur as if the TV input had not seen the
+         * event at all.
+         *
+         * @param keyCode The value in event.getKeyCode().
+         * @param event Description of the key event.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         */
+        @Override
+        public boolean onKeyDown(int keyCode, KeyEvent event) {
+            return false;
+        }
+
+        /**
+         * Default implementation of
+         * {@link android.view.KeyEvent.Callback#onKeyLongPress(int, KeyEvent)
+         * KeyEvent.Callback.onKeyLongPress()}: always returns false (doesn't handle the event).
+         * <p>
+         * Override this to intercept key long press events before they are processed by the
+         * application. If you return true, the application will not process the event itself. If
+         * you return false, the normal application processing will occur as if the TV input had not
+         * seen the event at all.
+         *
+         * @param keyCode The value in event.getKeyCode().
+         * @param event Description of the key event.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         */
+        @Override
+        public boolean onKeyLongPress(int keyCode, KeyEvent event) {
+            return false;
+        }
+
+        /**
+         * Default implementation of
+         * {@link android.view.KeyEvent.Callback#onKeyMultiple(int, int, KeyEvent)
+         * KeyEvent.Callback.onKeyMultiple()}: always returns false (doesn't handle the event).
+         * <p>
+         * Override this to intercept special key multiple events before they are processed by the
+         * application. If you return true, the application will not itself process the event. If
+         * you return false, the normal application processing will occur as if the TV input had not
+         * seen the event at all.
+         *
+         * @param keyCode The value in event.getKeyCode().
+         * @param count The number of times the action was made.
+         * @param event Description of the key event.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         */
+        @Override
+        public boolean onKeyMultiple(int keyCode, int count, KeyEvent event) {
+            return false;
+        }
+
+        /**
+         * Default implementation of {@link android.view.KeyEvent.Callback#onKeyUp(int, KeyEvent)
+         * KeyEvent.Callback.onKeyUp()}: always returns false (doesn't handle the event).
+         * <p>
+         * Override this to intercept key up events before they are processed by the application. If
+         * you return true, the application will not itself process the event. If you return false,
+         * the normal application processing will occur as if the TV input had not seen the event at
+         * all.
+         *
+         * @param keyCode The value in event.getKeyCode().
+         * @param event Description of the key event.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         */
+        @Override
+        public boolean onKeyUp(int keyCode, KeyEvent event) {
+            return false;
+        }
+
+        /**
+         * Implement this method to handle touch screen motion events on the current input session.
+         *
+         * @param event The motion event being received.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         * @see View#onTouchEvent
+         */
+        public boolean onTouchEvent(MotionEvent event) {
+            return false;
+        }
+
+        /**
+         * Implement this method to handle trackball events on the current input session.
+         *
+         * @param event The motion event being received.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         * @see View#onTrackballEvent
+         */
+        public boolean onTrackballEvent(MotionEvent event) {
+            return false;
+        }
+
+        /**
+         * Implement this method to handle generic motion events on the current input session.
+         *
+         * @param event The motion event being received.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         * @see View#onGenericMotionEvent
+         */
+        public boolean onGenericMotionEvent(MotionEvent event) {
+            return false;
+        }
+
+        /**
+         * This method is called when the application would like to stop using the current input
+         * session.
+         */
+        void release() {
+            onRelease();
+            if (mSurface != null) {
+                mSurface.release();
+                mSurface = null;
+            }
+            removeOverlayView(true);
+        }
+
+        /**
+         * Calls {@link #onSetSurface}.
+         */
+        void setSurface(Surface surface) {
+            onSetSurface(surface);
+            if (mSurface != null) {
+                mSurface.release();
+            }
+            mSurface = surface;
+            // TODO: Handle failure.
+        }
+
+        /**
+         * Calls {@link #onSetVolume}.
+         */
+        void setVolume(float volume) {
+            onSetVolume(volume);
+        }
+
+        /**
+         * Calls {@link #onTune}.
+         */
+        void tune(Uri channelUri) {
+            onTune(channelUri);
+            // TODO: Handle failure.
+        }
+
+        /**
+         * Creates an overlay view. This calls {@link #onCreateOverlayView} to get a view to attach
+         * to the overlay window.
+         *
+         * @param windowToken A window token of an application.
+         * @param frame A position of the overlay view.
+         */
+        void createOverlayView(IBinder windowToken, Rect frame) {
+            if (mOverlayView != null) {
+                mWindowManager.removeView(mOverlayView);
+                mOverlayView = null;
+            }
+            if (DEBUG) {
+                Log.d(TAG, "create overlay view(" + frame + ")");
+            }
+            mWindowToken = windowToken;
+            mOverlayFrame = frame;
+            if (!mOverlayViewEnabled) {
+                return;
+            }
+            mOverlayView = onCreateOverlayView();
+            if (mOverlayView == null) {
+                return;
+            }
+            // TvView's window type is TYPE_APPLICATION_MEDIA and we want to create
+            // an overlay window above the media window but below the application window.
+            int type = WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY;
+            // We make the overlay view non-focusable and non-touchable so that
+            // the application that owns the window token can decide whether to consume or
+            // dispatch the input events.
+            int flag = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                    | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+                    | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
+            mWindowParams = new WindowManager.LayoutParams(
+                    frame.right - frame.left, frame.bottom - frame.top,
+                    frame.left, frame.top, type, flag, PixelFormat.TRANSPARENT);
+            mWindowParams.privateFlags |=
+                    WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
+            mWindowParams.gravity = Gravity.START | Gravity.TOP;
+            mWindowParams.token = windowToken;
+            mWindowManager.addView(mOverlayView, mWindowParams);
+        }
+
+        /**
+         * Relayouts the current overlay view.
+         *
+         * @param frame A new position of the overlay view.
+         */
+        void relayoutOverlayView(Rect frame) {
+            if (DEBUG) {
+                Log.d(TAG, "relayout overlay view(" + frame + ")");
+            }
+            mOverlayFrame = frame;
+            if (!mOverlayViewEnabled || mOverlayView == null) {
+                return;
+            }
+            mWindowParams.x = frame.left;
+            mWindowParams.y = frame.top;
+            mWindowParams.width = frame.right - frame.left;
+            mWindowParams.height = frame.bottom - frame.top;
+            mWindowManager.updateViewLayout(mOverlayView, mWindowParams);
+        }
+
+        /**
+         * Removes the current overlay view.
+         */
+        void removeOverlayView(boolean clearWindowToken) {
+            if (DEBUG) {
+                Log.d(TAG, "remove overlay view(" + mOverlayView + ")");
+            }
+            if (clearWindowToken) {
+                mWindowToken = null;
+                mOverlayFrame = null;
+            }
+            if (mOverlayView != null) {
+                mWindowManager.removeView(mOverlayView);
+                mOverlayView = null;
+                mWindowParams = null;
+            }
+        }
+
+        /**
+         * Takes care of dispatching incoming input events and tells whether the event was handled.
+         */
+        int dispatchInputEvent(InputEvent event, InputEventReceiver receiver) {
+            if (DEBUG) Log.d(TAG, "dispatchInputEvent(" + event + ")");
+            if (event instanceof KeyEvent) {
+                if (((KeyEvent) event).dispatch(this, mDispatcherState, this)) {
+                    return Session.DISPATCH_HANDLED;
+                }
+            } else if (event instanceof MotionEvent) {
+                MotionEvent motionEvent = (MotionEvent) event;
+                final int source = motionEvent.getSource();
+                if (motionEvent.isTouchEvent()) {
+                    if (onTouchEvent(motionEvent)) {
+                        return Session.DISPATCH_HANDLED;
+                    }
+                } else if ((source & InputDevice.SOURCE_CLASS_TRACKBALL) != 0) {
+                    if (onTrackballEvent(motionEvent)) {
+                        return Session.DISPATCH_HANDLED;
+                    }
+                } else {
+                    if (onGenericMotionEvent(motionEvent)) {
+                        return Session.DISPATCH_HANDLED;
+                    }
+                }
+            }
+            if (mOverlayView == null) {
+                return Session.DISPATCH_NOT_HANDLED;
+            }
+            if (!mOverlayView.hasWindowFocus()) {
+                mOverlayView.getViewRootImpl().windowFocusChanged(true, true);
+            }
+            mOverlayView.getViewRootImpl().dispatchInputEvent(event, receiver);
+            return Session.DISPATCH_IN_PROGRESS;
+        }
+    }
+
+    private final class ServiceHandler extends Handler {
+        private static final int DO_CREATE_SESSION = 1;
+        private static final int DO_BROADCAST_AVAILABILITY_CHANGE = 2;
+
+        @Override
+        public final void handleMessage(Message msg) {
+            switch (msg.what) {
+                case DO_CREATE_SESSION: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    InputChannel channel = (InputChannel) args.arg1;
+                    ITvInputSessionCallback cb = (ITvInputSessionCallback) args.arg2;
+                    try {
+                        TvInputSessionImpl sessionImpl = onCreateSession();
+                        if (sessionImpl == null) {
+                            // Failed to create a session.
+                            cb.onSessionCreated(null);
+                        } else {
+                            ITvInputSession stub = new ITvInputSessionWrapper(TvInputService.this,
+                                    sessionImpl, channel);
+                            cb.onSessionCreated(stub);
+                        }
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "error in onSessionCreated");
+                    }
+                    args.recycle();
+                    return;
+                }
+                case DO_BROADCAST_AVAILABILITY_CHANGE: {
+                    boolean isAvailable = (Boolean) msg.obj;
+                    int n = mCallbacks.beginBroadcast();
+                    try {
+                        for (int i = 0; i < n; i++) {
+                            mCallbacks.getBroadcastItem(i).onAvailabilityChanged(mComponentName,
+                                    isAvailable);
+                        }
+                    } catch (RemoteException e) {
+                        Log.e(TAG, "Unexpected exception", e);
+                    } finally {
+                        mCallbacks.finishBroadcast();
+                    }
+                    return;
+                }
+                default: {
+                    Log.w(TAG, "Unhandled message code: " + msg.what);
+                    return;
+                }
+            }
+        }
+    }
+}
diff --git a/core/java/android/tv/TvView.java b/core/java/android/tv/TvView.java
new file mode 100644
index 0000000..289823b
--- /dev/null
+++ b/core/java/android/tv/TvView.java
@@ -0,0 +1,360 @@
+/*
+ * Copyright (C) 2014 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 android.tv;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.graphics.Rect;
+import android.os.Handler;
+import android.tv.TvInputManager.Session;
+import android.tv.TvInputManager.Session.FinishedInputEventCallback;
+import android.tv.TvInputManager.SessionCreateCallback;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.InputEvent;
+import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.Surface;
+import android.view.SurfaceHolder;
+import android.view.SurfaceView;
+
+/**
+ * View playing TV
+ */
+public class TvView extends SurfaceView {
+    // STOPSHIP: Turn debugging off.
+    private static final boolean DEBUG = true;
+    private static final String TAG = "TvView";
+
+    private final Handler mHandler = new Handler();
+    private TvInputManager.Session mSession;
+    private Surface mSurface;
+    private boolean mOverlayViewCreated;
+    private Rect mOverlayViewFrame;
+    private final TvInputManager mTvInputManager;
+    private SessionCreateCallback mSessionCreateCallback;
+    private OnUnhandledInputEventListener mOnUnhandledInputEventListener;
+
+    private final SurfaceHolder.Callback mSurfaceHolderCallback = new SurfaceHolder.Callback() {
+        @Override
+        public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
+            Log.d(TAG, "surfaceChanged(holder=" + holder + ", format=" + format + ", width=" + width
+                    + ", height=" + height + ")");
+            if (holder.getSurface() == mSurface) {
+                return;
+            }
+            mSurface = holder.getSurface();
+            setSessionSurface(mSurface);
+        }
+
+        @Override
+        public void surfaceCreated(SurfaceHolder holder) {
+            mSurface = holder.getSurface();
+            setSessionSurface(mSurface);
+        }
+
+        @Override
+        public void surfaceDestroyed(SurfaceHolder holder) {
+            mSurface = null;
+            setSessionSurface(null);
+        }
+    };
+
+    private final FinishedInputEventCallback mFinishedInputEventCallback =
+            new FinishedInputEventCallback() {
+        @Override
+        public void onFinishedInputEvent(Object token, boolean handled) {
+            if (DEBUG) {
+                Log.d(TAG, "onFinishedInputEvent(token=" + token + ", handled=" + handled + ")");
+            }
+            if (handled) {
+                return;
+            }
+            // TODO: Re-order unhandled events.
+            InputEvent event = (InputEvent) token;
+            if (dispatchUnhandledInputEvent(event)) {
+                return;
+            }
+            getViewRootImpl().dispatchUnhandledInputEvent(event);
+        }
+    };
+
+    public TvView(Context context) {
+        this(context, null, 0);
+    }
+
+    public TvView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public TvView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        getHolder().addCallback(mSurfaceHolderCallback);
+        mTvInputManager = (TvInputManager) getContext().getSystemService(Context.TV_INPUT_SERVICE);
+    }
+
+    /**
+     * Binds a TV input to this view. {@link SessionCreateCallback#onSessionCreated} will be
+     * called to send the result of this binding with {@link TvInputManager.Session}.
+     * If a TV input is already bound, the input will be unbound from this view and its session
+     * will be released.
+     *
+     * @param name TV input name will be bound to this view.
+     * @param callback called when TV input is bound. The callback sends
+     *        {@link TvInputManager.Session}
+     * @throws IllegalArgumentException if any of the arguments is {@code null}.
+     */
+    public void bindTvInput(ComponentName name, SessionCreateCallback callback) {
+        if (name == null) {
+            throw new IllegalArgumentException("name cannot be null");
+        }
+        if (callback == null) {
+            throw new IllegalArgumentException("callback cannot be null");
+        }
+        if (mSession != null) {
+            release();
+        }
+        // When bindTvInput is called multiple times before the callback is called,
+        // only the callback of the last bindTvInput call will be actually called back.
+        // The previous callbacks will be ignored. For the logic, mSessionCreateCallback
+        // is newly assigned for every bindTvInput call and compared with
+        // MySessionCreateCallback.this.
+        mSessionCreateCallback = new MySessionCreateCallback(callback);
+        mTvInputManager.createSession(name, mSessionCreateCallback, mHandler);
+    }
+
+    /**
+     * Unbinds a TV input currently bound. Its corresponding {@link TvInputManager.Session}
+     * is released.
+     */
+    public void unbindTvInput() {
+        if (mSession != null) {
+            release();
+        }
+    }
+
+    /**
+     * Dispatches an unhandled input event to the next receiver.
+     * <p>
+     * Except system keys, TvView always consumes input events in the normal flow. This is called
+     * asynchronously from where the event is dispatched. It gives the host application a chance to
+     * dispatch the unhandled input events.
+     *
+     * @param event The input event.
+     * @return {@code true} if the event was handled by the view, {@code false} otherwise.
+     */
+    public boolean dispatchUnhandledInputEvent(InputEvent event) {
+        if (mOnUnhandledInputEventListener != null) {
+            if (mOnUnhandledInputEventListener.onUnhandledInputEvent(event)) {
+                return true;
+            }
+        }
+        return onUnhandledInputEvent(event);
+    }
+
+    /**
+     * Called when an unhandled input event was also not handled by the user provided callback. This
+     * is the last chance to handle the unhandled input event in the TvView.
+     *
+     * @param event The input event.
+     * @return If you handled the event, return {@code true}. If you want to allow the event to be
+     *         handled by the next receiver, return {@code false}.
+     */
+    public boolean onUnhandledInputEvent(InputEvent event) {
+        return false;
+    }
+
+    /**
+     * Registers a callback to be invoked when an input event was not handled by the bound TV input.
+     *
+     * @param listener The callback to invoke when the unhandled input event was received.
+     */
+    public void setOnUnhandledInputEventListener(OnUnhandledInputEventListener listener) {
+        mOnUnhandledInputEventListener = listener;
+    }
+
+    @Override
+    public boolean dispatchKeyEvent(KeyEvent event) {
+        if (super.dispatchKeyEvent(event)) {
+            return true;
+        }
+        if (DEBUG) Log.d(TAG, "dispatchKeyEvent(" + event + ")");
+        if (mSession == null) {
+            return false;
+        }
+        int ret = mSession.dispatchInputEvent(event, event, mFinishedInputEventCallback, mHandler);
+        return ret != Session.DISPATCH_NOT_HANDLED;
+    }
+
+    @Override
+    public boolean dispatchTouchEvent(MotionEvent event) {
+        if (super.dispatchTouchEvent(event)) {
+            return true;
+        }
+        if (DEBUG) Log.d(TAG, "dispatchTouchEvent(" + event + ")");
+        if (mSession == null) {
+            return false;
+        }
+        int ret = mSession.dispatchInputEvent(event, event, mFinishedInputEventCallback, mHandler);
+        return ret != Session.DISPATCH_NOT_HANDLED;
+    }
+
+    @Override
+    public boolean dispatchTrackballEvent(MotionEvent event) {
+        if (super.dispatchTrackballEvent(event)) {
+            return true;
+        }
+        if (DEBUG) Log.d(TAG, "dispatchTrackballEvent(" + event + ")");
+        if (mSession == null) {
+            return false;
+        }
+        int ret = mSession.dispatchInputEvent(event, event, mFinishedInputEventCallback, mHandler);
+        return ret != Session.DISPATCH_NOT_HANDLED;
+    }
+
+    @Override
+    public boolean dispatchGenericMotionEvent(MotionEvent event) {
+        if (super.dispatchGenericMotionEvent(event)) {
+            return true;
+        }
+        if (DEBUG) Log.d(TAG, "dispatchGenericMotionEvent(" + event + ")");
+        if (mSession == null) {
+            return false;
+        }
+        int ret = mSession.dispatchInputEvent(event, event, mFinishedInputEventCallback, mHandler);
+        return ret != Session.DISPATCH_NOT_HANDLED;
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        createSessionOverlayView();
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        removeSessionOverlayView();
+        super.onDetachedFromWindow();
+    }
+
+    /** @hide */
+    @Override
+    protected void updateWindow(boolean force, boolean redrawNeeded) {
+        super.updateWindow(force, redrawNeeded);
+        relayoutSessionOverlayView();
+    }
+
+    private void release() {
+        setSessionSurface(null);
+        removeSessionOverlayView();
+        mSession.release();
+        mSession = null;
+    }
+
+    private void setSessionSurface(Surface surface) {
+        if (mSession == null) {
+            return;
+        }
+        mSession.setSurface(surface);
+    }
+
+    private void createSessionOverlayView() {
+        if (mSession == null || !isAttachedToWindow()
+                || mOverlayViewCreated) {
+            return;
+        }
+        mOverlayViewFrame = getViewFrameOnScreen();
+        mSession.createOverlayView(this, mOverlayViewFrame);
+        mOverlayViewCreated = true;
+    }
+
+    private void removeSessionOverlayView() {
+        if (mSession == null || !mOverlayViewCreated) {
+            return;
+        }
+        mSession.removeOverlayView();
+        mOverlayViewCreated = false;
+        mOverlayViewFrame = null;
+    }
+
+    private void relayoutSessionOverlayView() {
+        if (mSession == null || !isAttachedToWindow()
+                || !mOverlayViewCreated) {
+            return;
+        }
+        Rect viewFrame = getViewFrameOnScreen();
+        if (viewFrame.equals(mOverlayViewFrame)) {
+            return;
+        }
+        mSession.relayoutOverlayView(viewFrame);
+        mOverlayViewFrame = viewFrame;
+    }
+
+    private Rect getViewFrameOnScreen() {
+        int[] location = new int[2];
+        getLocationOnScreen(location);
+        return new Rect(location[0], location[1],
+                location[0] + getWidth(), location[1] + getHeight());
+    }
+
+    /**
+     * Interface definition for a callback to be invoked when the unhandled input event is received.
+     */
+    public interface OnUnhandledInputEventListener {
+        /**
+         * Called when an input event was not handled by the bound TV input.
+         * <p>
+         * This is called asynchronously from where the event is dispatched. It gives the host
+         * application a chance to handle the unhandled input events.
+         *
+         * @param event The input event.
+         * @return If you handled the event, return {@code true}. If you want to allow the event to
+         *         be handled by the next receiver, return {@code false}.
+         */
+        boolean onUnhandledInputEvent(InputEvent event);
+    }
+
+    private class MySessionCreateCallback implements SessionCreateCallback {
+        final SessionCreateCallback mExternalCallback;
+
+        MySessionCreateCallback(SessionCreateCallback externalCallback) {
+            mExternalCallback = externalCallback;
+        }
+
+        @Override
+        public void onSessionCreated(Session session) {
+            if (this != mSessionCreateCallback) {
+                // This callback is obsolete.
+                session.release();
+                return;
+            }
+            mSession = session;
+            if (session != null) {
+                // mSurface may not be ready yet as soon as starting an application.
+                // In the case, we don't send Session.setSurface(null) unnecessarily.
+                // setSessionSurface will be called in surfaceCreated.
+                if (mSurface != null) {
+                    setSessionSurface(mSurface);
+                }
+                createSessionOverlayView();
+            }
+            if (mExternalCallback != null) {
+                mExternalCallback.onSessionCreated(session);
+            }
+        }
+    }
+}
diff --git a/core/java/android/util/ArrayMap.java b/core/java/android/util/ArrayMap.java
index df1d4cd..9a0b7fc 100644
--- a/core/java/android/util/ArrayMap.java
+++ b/core/java/android/util/ArrayMap.java
@@ -16,6 +16,8 @@
 
 package android.util;
 
+import libcore.util.EmptyArray;
+
 import java.util.Collection;
 import java.util.Map;
 import java.util.Set;
@@ -234,8 +236,8 @@
      * will grow once items are added to it.
      */
     public ArrayMap() {
-        mHashes = ContainerHelpers.EMPTY_INTS;
-        mArray = ContainerHelpers.EMPTY_OBJECTS;
+        mHashes = EmptyArray.INT;
+        mArray = EmptyArray.OBJECT;
         mSize = 0;
     }
 
@@ -244,8 +246,8 @@
      */
     public ArrayMap(int capacity) {
         if (capacity == 0) {
-            mHashes = ContainerHelpers.EMPTY_INTS;
-            mArray = ContainerHelpers.EMPTY_OBJECTS;
+            mHashes = EmptyArray.INT;
+            mArray = EmptyArray.OBJECT;
         } else {
             allocArrays(capacity);
         }
@@ -253,8 +255,8 @@
     }
 
     private ArrayMap(boolean immutable) {
-        mHashes = EMPTY_IMMUTABLE_INTS;
-        mArray = ContainerHelpers.EMPTY_OBJECTS;
+        mHashes = EmptyArray.INT;
+        mArray = EmptyArray.OBJECT;
         mSize = 0;
     }
 
@@ -275,8 +277,8 @@
     public void clear() {
         if (mSize > 0) {
             freeArrays(mHashes, mArray, mSize);
-            mHashes = ContainerHelpers.EMPTY_INTS;
-            mArray = ContainerHelpers.EMPTY_OBJECTS;
+            mHashes = EmptyArray.INT;
+            mArray = EmptyArray.OBJECT;
             mSize = 0;
         }
     }
@@ -540,8 +542,8 @@
             // Now empty.
             if (DEBUG) Log.d(TAG, "remove: shrink from " + mHashes.length + " to 0");
             freeArrays(mHashes, mArray, mSize);
-            mHashes = ContainerHelpers.EMPTY_INTS;
-            mArray = ContainerHelpers.EMPTY_OBJECTS;
+            mHashes = EmptyArray.INT;
+            mArray = EmptyArray.OBJECT;
             mSize = 0;
         } else {
             if (mHashes.length > (BASE_SIZE*2) && mSize < mHashes.length/3) {
diff --git a/core/java/android/util/ArraySet.java b/core/java/android/util/ArraySet.java
index 3c695e9..9d4b720 100644
--- a/core/java/android/util/ArraySet.java
+++ b/core/java/android/util/ArraySet.java
@@ -16,6 +16,8 @@
 
 package android.util;
 
+import libcore.util.EmptyArray;
+
 import java.lang.reflect.Array;
 import java.util.Collection;
 import java.util.Iterator;
@@ -222,8 +224,8 @@
      * will grow once items are added to it.
      */
     public ArraySet() {
-        mHashes = ContainerHelpers.EMPTY_INTS;
-        mArray = ContainerHelpers.EMPTY_OBJECTS;
+        mHashes = EmptyArray.INT;
+        mArray = EmptyArray.OBJECT;
         mSize = 0;
     }
 
@@ -232,8 +234,8 @@
      */
     public ArraySet(int capacity) {
         if (capacity == 0) {
-            mHashes = ContainerHelpers.EMPTY_INTS;
-            mArray = ContainerHelpers.EMPTY_OBJECTS;
+            mHashes = EmptyArray.INT;
+            mArray = EmptyArray.OBJECT;
         } else {
             allocArrays(capacity);
         }
@@ -258,8 +260,8 @@
     public void clear() {
         if (mSize != 0) {
             freeArrays(mHashes, mArray, mSize);
-            mHashes = ContainerHelpers.EMPTY_INTS;
-            mArray = ContainerHelpers.EMPTY_OBJECTS;
+            mHashes = EmptyArray.INT;
+            mArray = EmptyArray.OBJECT;
             mSize = 0;
         }
     }
@@ -413,8 +415,8 @@
             // Now empty.
             if (DEBUG) Log.d(TAG, "remove: shrink from " + mHashes.length + " to 0");
             freeArrays(mHashes, mArray, mSize);
-            mHashes = ContainerHelpers.EMPTY_INTS;
-            mArray = ContainerHelpers.EMPTY_OBJECTS;
+            mHashes = EmptyArray.INT;
+            mArray = EmptyArray.OBJECT;
             mSize = 0;
         } else {
             if (mHashes.length > (BASE_SIZE*2) && mSize < mHashes.length/3) {
diff --git a/core/java/android/util/ContainerHelpers.java b/core/java/android/util/ContainerHelpers.java
index 624c4bd..4e5fefb 100644
--- a/core/java/android/util/ContainerHelpers.java
+++ b/core/java/android/util/ContainerHelpers.java
@@ -17,10 +17,6 @@
 package android.util;
 
 class ContainerHelpers {
-    static final boolean[] EMPTY_BOOLEANS = new boolean[0];
-    static final int[] EMPTY_INTS = new int[0];
-    static final long[] EMPTY_LONGS = new long[0];
-    static final Object[] EMPTY_OBJECTS = new Object[0];
 
     // This is Arrays.binarySearch(), but doesn't do any argument validation.
     static int binarySearch(int[] array, int size, int value) {
diff --git a/core/java/android/util/EventLogTags.java b/core/java/android/util/EventLogTags.java
index 8c18417..f4ce4fd 100644
--- a/core/java/android/util/EventLogTags.java
+++ b/core/java/android/util/EventLogTags.java
@@ -16,14 +16,8 @@
 
 package android.util;
 
-import android.util.Log;
-
 import java.io.BufferedReader;
-import java.io.FileReader;
 import java.io.IOException;
-import java.util.HashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 /**
  * @deprecated This class is no longer functional.
diff --git a/core/java/android/util/LocalLog.java b/core/java/android/util/LocalLog.java
index 641d1b4..eeb6d58 100644
--- a/core/java/android/util/LocalLog.java
+++ b/core/java/android/util/LocalLog.java
@@ -20,7 +20,6 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.io.StringWriter;
 import java.util.Iterator;
 import java.util.LinkedList;
 
diff --git a/core/java/android/util/LongArray.java b/core/java/android/util/LongArray.java
new file mode 100644
index 0000000..54a6882
--- /dev/null
+++ b/core/java/android/util/LongArray.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2013 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 android.util;
+
+import com.android.internal.util.ArrayUtils;
+import libcore.util.EmptyArray;
+
+/**
+ * Implements a growing array of long primitives.
+ *
+ * @hide
+ */
+public class LongArray implements Cloneable {
+    private static final int MIN_CAPACITY_INCREMENT = 12;
+
+    private long[] mValues;
+    private int mSize;
+
+    /**
+     * Creates an empty LongArray with the default initial capacity.
+     */
+    public LongArray() {
+        this(10);
+    }
+
+    /**
+     * Creates an empty LongArray with the specified initial capacity.
+     */
+    public LongArray(int initialCapacity) {
+        if (initialCapacity == 0) {
+            mValues = EmptyArray.LONG;
+        } else {
+            mValues = ArrayUtils.newUnpaddedLongArray(initialCapacity);
+        }
+        mSize = 0;
+    }
+
+    /**
+     * Appends the specified value to the end of this array.
+     */
+    public void add(long value) {
+        add(mSize, value);
+    }
+
+    /**
+     * Inserts a value at the specified position in this array.
+     *
+     * @throws IndexOutOfBoundsException when index &lt; 0 || index &gt; size()
+     */
+    public void add(int index, long value) {
+        if (index < 0 || index > mSize) {
+            throw new IndexOutOfBoundsException();
+        }
+
+        ensureCapacity(1);
+
+        if (mSize - index != 0) {
+            System.arraycopy(mValues, index, mValues, index + 1, mSize - index);
+        }
+
+        mValues[index] = value;
+        mSize++;
+    }
+
+    /**
+     * Adds the values in the specified array to this array.
+     */
+    public void addAll(LongArray values) {
+        final int count = values.mSize;
+        ensureCapacity(count);
+
+        System.arraycopy(values.mValues, 0, mValues, mSize, count);
+        mSize += count;
+    }
+
+    /**
+     * Ensures capacity to append at least <code>count</code> values.
+     */
+    private void ensureCapacity(int count) {
+        final int currentSize = mSize;
+        final int minCapacity = currentSize + count;
+        if (minCapacity >= mValues.length) {
+            final int targetCap = currentSize + (currentSize < (MIN_CAPACITY_INCREMENT / 2) ?
+                    MIN_CAPACITY_INCREMENT : currentSize >> 1);
+            final int newCapacity = targetCap > minCapacity ? targetCap : minCapacity;
+            final long[] newValues = ArrayUtils.newUnpaddedLongArray(newCapacity);
+            System.arraycopy(mValues, 0, newValues, 0, currentSize);
+            mValues = newValues;
+        }
+    }
+
+    /**
+     * Removes all values from this array.
+     */
+    public void clear() {
+        mSize = 0;
+    }
+
+    @Override
+    public LongArray clone() {
+        LongArray clone = null;
+        try {
+            clone = (LongArray) super.clone();
+            clone.mValues = mValues.clone();
+        } catch (CloneNotSupportedException cnse) {
+            /* ignore */
+        }
+        return clone;
+    }
+
+    /**
+     * Returns the value at the specified position in this array.
+     */
+    public long get(int index) {
+        if (index >= mSize) {
+            throw new ArrayIndexOutOfBoundsException(mSize, index);
+        }
+        return mValues[index];
+    }
+
+    /**
+     * Returns the index of the first occurrence of the specified value in this
+     * array, or -1 if this array does not contain the value.
+     */
+    public int indexOf(long value) {
+        final int n = mSize;
+        for (int i = 0; i < n; i++) {
+            if (mValues[i] == value) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Removes the value at the specified index from this array.
+     */
+    public void remove(int index) {
+        if (index >= mSize) {
+            throw new ArrayIndexOutOfBoundsException(mSize, index);
+        }
+        System.arraycopy(mValues, index + 1, mValues, index, mSize - index - 1);
+        mSize--;
+    }
+
+    /**
+     * Returns the number of values in this array.
+     */
+    public int size() {
+        return mSize;
+    }
+}
diff --git a/core/java/android/util/LongSparseArray.java b/core/java/android/util/LongSparseArray.java
index dab853a..6b45ff4 100644
--- a/core/java/android/util/LongSparseArray.java
+++ b/core/java/android/util/LongSparseArray.java
@@ -17,6 +17,9 @@
 package android.util;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 /**
  * SparseArray mapping longs to Objects.  Unlike a normal array of Objects,
@@ -70,12 +73,11 @@
      */
     public LongSparseArray(int initialCapacity) {
         if (initialCapacity == 0) {
-            mKeys = ContainerHelpers.EMPTY_LONGS;
-            mValues = ContainerHelpers.EMPTY_OBJECTS;
+            mKeys = EmptyArray.LONG;
+            mValues = EmptyArray.OBJECT;
         } else {
-            initialCapacity = ArrayUtils.idealLongArraySize(initialCapacity);
-            mKeys = new long[initialCapacity];
-            mValues = new Object[initialCapacity];
+            mKeys = ArrayUtils.newUnpaddedLongArray(initialCapacity);
+            mValues = ArrayUtils.newUnpaddedObjectArray(initialCapacity);
         }
         mSize = 0;
     }
@@ -202,28 +204,8 @@
                 i = ~ContainerHelpers.binarySearch(mKeys, mSize, key);
             }
 
-            if (mSize >= mKeys.length) {
-                int n = ArrayUtils.idealLongArraySize(mSize + 1);
-
-                long[] nkeys = new long[n];
-                Object[] nvalues = new Object[n];
-
-                // Log.e("SparseArray", "grow " + mKeys.length + " to " + n);
-                System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-                System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-                mKeys = nkeys;
-                mValues = nvalues;
-            }
-
-            if (mSize - i != 0) {
-                // Log.e("SparseArray", "move " + (mSize - i));
-                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
-                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
-            }
-
-            mKeys[i] = key;
-            mValues[i] = value;
+            mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
+            mValues = GrowingArrayUtils.insert(mValues, mSize, i, value);
             mSize++;
         }
     }
@@ -353,24 +335,9 @@
             gc();
         }
 
-        int pos = mSize;
-        if (pos >= mKeys.length) {
-            int n = ArrayUtils.idealLongArraySize(pos + 1);
-
-            long[] nkeys = new long[n];
-            Object[] nvalues = new Object[n];
-
-            // Log.e("SparseArray", "grow " + mKeys.length + " to " + n);
-            System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-            System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-            mKeys = nkeys;
-            mValues = nvalues;
-        }
-
-        mKeys[pos] = key;
-        mValues[pos] = value;
-        mSize = pos + 1;
+        mKeys = GrowingArrayUtils.append(mKeys, mSize, key);
+        mValues = GrowingArrayUtils.append(mValues, mSize, value);
+        mSize++;
     }
 
     /**
diff --git a/core/java/android/util/LongSparseLongArray.java b/core/java/android/util/LongSparseLongArray.java
index 6654899..a361457 100644
--- a/core/java/android/util/LongSparseLongArray.java
+++ b/core/java/android/util/LongSparseLongArray.java
@@ -17,8 +17,9 @@
 package android.util;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
-import java.util.Arrays;
+import libcore.util.EmptyArray;
 
 /**
  * Map of {@code long} to {@code long}. Unlike a normal array of longs, there
@@ -64,12 +65,11 @@
      */
     public LongSparseLongArray(int initialCapacity) {
         if (initialCapacity == 0) {
-            mKeys = ContainerHelpers.EMPTY_LONGS;
-            mValues = ContainerHelpers.EMPTY_LONGS;
+            mKeys = EmptyArray.LONG;
+            mValues = EmptyArray.LONG;
         } else {
-            initialCapacity = ArrayUtils.idealLongArraySize(initialCapacity);
-            mKeys = new long[initialCapacity];
-            mValues = new long[initialCapacity];
+            mKeys = ArrayUtils.newUnpaddedLongArray(initialCapacity);
+            mValues = new long[mKeys.length];
         }
         mSize = 0;
     }
@@ -142,17 +142,8 @@
         } else {
             i = ~i;
 
-            if (mSize >= mKeys.length) {
-                growKeyAndValueArrays(mSize + 1);
-            }
-
-            if (mSize - i != 0) {
-                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
-                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
-            }
-
-            mKeys[i] = key;
-            mValues[i] = value;
+            mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
+            mValues = GrowingArrayUtils.insert(mValues, mSize, i, value);
             mSize++;
         }
     }
@@ -236,27 +227,9 @@
             return;
         }
 
-        int pos = mSize;
-        if (pos >= mKeys.length) {
-            growKeyAndValueArrays(pos + 1);
-        }
-
-        mKeys[pos] = key;
-        mValues[pos] = value;
-        mSize = pos + 1;
-    }
-
-    private void growKeyAndValueArrays(int minNeededSize) {
-        int n = ArrayUtils.idealLongArraySize(minNeededSize);
-
-        long[] nkeys = new long[n];
-        long[] nvalues = new long[n];
-
-        System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-        System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-        mKeys = nkeys;
-        mValues = nvalues;
+        mKeys = GrowingArrayUtils.append(mKeys, mSize, key);
+        mValues = GrowingArrayUtils.append(mValues, mSize, value);
+        mSize++;
     }
 
     /**
diff --git a/core/java/android/util/LruCache.java b/core/java/android/util/LruCache.java
index dd504c1..4015488 100644
--- a/core/java/android/util/LruCache.java
+++ b/core/java/android/util/LruCache.java
@@ -87,9 +87,8 @@
 
     /**
      * Sets the size of the cache.
-     * @param maxSize The new maximum size.
      *
-     * @hide
+     * @param maxSize The new maximum size.
      */
     public void resize(int maxSize) {
         if (maxSize <= 0) {
diff --git a/core/java/android/util/Patterns.java b/core/java/android/util/Patterns.java
index 0f8da44..2cc91b9 100644
--- a/core/java/android/util/Patterns.java
+++ b/core/java/android/util/Patterns.java
@@ -28,7 +28,12 @@
      *  List accurate as of 2011/07/18.  List taken from:
      *  http://data.iana.org/TLD/tlds-alpha-by-domain.txt
      *  This pattern is auto-generated by frameworks/ex/common/tools/make-iana-tld-pattern.py
+     *
+     *  @deprecated Due to the recent profileration of gTLDs, this API is
+     *  expected to become out-of-date very quickly. Therefore it is now
+     *  deprecated.
      */
+    @Deprecated
     public static final String TOP_LEVEL_DOMAIN_STR =
         "((aero|arpa|asia|a[cdefgilmnoqrstuwxz])"
         + "|(biz|b[abdefghijmnorstvwyz])"
@@ -59,7 +64,9 @@
 
     /**
      *  Regular expression pattern to match all IANA top-level domains.
+     *  @deprecated This API is deprecated. See {@link #TOP_LEVEL_DOMAIN_STR}.
      */
+    @Deprecated
     public static final Pattern TOP_LEVEL_DOMAIN =
         Pattern.compile(TOP_LEVEL_DOMAIN_STR);
 
@@ -68,7 +75,10 @@
      *  List accurate as of 2011/07/18.  List taken from:
      *  http://data.iana.org/TLD/tlds-alpha-by-domain.txt
      *  This pattern is auto-generated by frameworks/ex/common/tools/make-iana-tld-pattern.py
+     *
+     *  @deprecated This API is deprecated. See {@link #TOP_LEVEL_DOMAIN_STR}.
      */
+    @Deprecated
     public static final String TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL =
         "(?:"
         + "(?:aero|arpa|asia|a[cdefgilmnoqrstuwxz])"
@@ -107,6 +117,27 @@
     public static final String GOOD_IRI_CHAR =
         "a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF";
 
+    public static final Pattern IP_ADDRESS
+        = Pattern.compile(
+            "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
+            + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
+            + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
+            + "|[1-9][0-9]|[0-9]))");
+
+    /**
+     * RFC 1035 Section 2.3.4 limits the labels to a maximum 63 octets.
+     */
+    private static final String IRI
+        = "[" + GOOD_IRI_CHAR + "]([" + GOOD_IRI_CHAR + "\\-]{0,61}[" + GOOD_IRI_CHAR + "]){0,1}";
+
+    private static final String GOOD_GTLD_CHAR =
+        "a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF";
+    private static final String GTLD = "[" + GOOD_GTLD_CHAR + "]{2,63}";
+    private static final String HOST_NAME = "(" + IRI + "\\.)+" + GTLD;
+
+    public static final Pattern DOMAIN_NAME
+        = Pattern.compile("(" + HOST_NAME + "|" + IP_ADDRESS + ")");
+
     /**
      *  Regular expression pattern to match most part of RFC 3987
      *  Internationalized URLs, aka IRIs.  Commonly used Unicode characters are
@@ -116,13 +147,7 @@
         "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)"
         + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_"
         + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?"
-        + "((?:(?:[" + GOOD_IRI_CHAR + "][" + GOOD_IRI_CHAR + "\\-]{0,64}\\.)+"   // named host
-        + TOP_LEVEL_DOMAIN_STR_FOR_WEB_URL
-        + "|(?:(?:25[0-5]|2[0-4]" // or ip address
-        + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(?:25[0-5]|2[0-4][0-9]"
-        + "|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1]"
-        + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
-        + "|[1-9][0-9]|[0-9])))"
+        + "(?:" + DOMAIN_NAME + ")"
         + "(?:\\:\\d{1,5})?)" // plus option port number
         + "(\\/(?:(?:[" + GOOD_IRI_CHAR + "\\;\\/\\?\\:\\@\\&\\=\\#\\~"  // plus option query params
         + "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?"
@@ -130,19 +155,6 @@
                         // input.  This is to stop foo.sure from
                         // matching as foo.su
 
-    public static final Pattern IP_ADDRESS
-        = Pattern.compile(
-            "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]"
-            + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]"
-            + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}"
-            + "|[1-9][0-9]|[0-9]))");
-
-    public static final Pattern DOMAIN_NAME
-        = Pattern.compile(
-            "(((([" + GOOD_IRI_CHAR + "][" + GOOD_IRI_CHAR + "\\-]*)*[" + GOOD_IRI_CHAR + "]\\.)+"
-            + TOP_LEVEL_DOMAIN + ")|"
-            + IP_ADDRESS + ")");
-
     public static final Pattern EMAIL_ADDRESS
         = Pattern.compile(
             "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" +
@@ -159,7 +171,7 @@
      * might be phone numbers in arbitrary text, not for validating whether
      * something is in fact a phone number.  It will miss many things that
      * are legitimate phone numbers.
-     * 
+     *
      * <p> The pattern matches the following:
      * <ul>
      * <li>Optionally, a + sign followed immediately by one or more digits. Spaces, dots, or dashes
diff --git a/core/java/android/util/Slog.java b/core/java/android/util/Slog.java
index 70795bb..b25d80f 100644
--- a/core/java/android/util/Slog.java
+++ b/core/java/android/util/Slog.java
@@ -16,11 +16,6 @@
 
 package android.util;
 
-import com.android.internal.os.RuntimeInit;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
 /**
  * @hide
  */
diff --git a/core/java/android/util/SparseArray.java b/core/java/android/util/SparseArray.java
index 46d9d45..92e874f 100644
--- a/core/java/android/util/SparseArray.java
+++ b/core/java/android/util/SparseArray.java
@@ -17,6 +17,9 @@
 package android.util;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 /**
  * SparseArrays map integers to Objects.  Unlike a normal array of Objects,
@@ -70,12 +73,11 @@
      */
     public SparseArray(int initialCapacity) {
         if (initialCapacity == 0) {
-            mKeys = ContainerHelpers.EMPTY_INTS;
-            mValues = ContainerHelpers.EMPTY_OBJECTS;
+            mKeys = EmptyArray.INT;
+            mValues = EmptyArray.OBJECT;
         } else {
-            initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity);
-            mKeys = new int[initialCapacity];
-            mValues = new Object[initialCapacity];
+            mValues = ArrayUtils.newUnpaddedObjectArray(initialCapacity);
+            mKeys = new int[mValues.length];
         }
         mSize = 0;
     }
@@ -215,28 +217,8 @@
                 i = ~ContainerHelpers.binarySearch(mKeys, mSize, key);
             }
 
-            if (mSize >= mKeys.length) {
-                int n = ArrayUtils.idealIntArraySize(mSize + 1);
-
-                int[] nkeys = new int[n];
-                Object[] nvalues = new Object[n];
-
-                // Log.e("SparseArray", "grow " + mKeys.length + " to " + n);
-                System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-                System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-                mKeys = nkeys;
-                mValues = nvalues;
-            }
-
-            if (mSize - i != 0) {
-                // Log.e("SparseArray", "move " + (mSize - i));
-                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
-                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
-            }
-
-            mKeys[i] = key;
-            mValues[i] = value;
+            mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
+            mValues = GrowingArrayUtils.insert(mValues, mSize, i, value);
             mSize++;
         }
     }
@@ -368,24 +350,9 @@
             gc();
         }
 
-        int pos = mSize;
-        if (pos >= mKeys.length) {
-            int n = ArrayUtils.idealIntArraySize(pos + 1);
-
-            int[] nkeys = new int[n];
-            Object[] nvalues = new Object[n];
-
-            // Log.e("SparseArray", "grow " + mKeys.length + " to " + n);
-            System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-            System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-            mKeys = nkeys;
-            mValues = nvalues;
-        }
-
-        mKeys[pos] = key;
-        mValues[pos] = value;
-        mSize = pos + 1;
+        mKeys = GrowingArrayUtils.append(mKeys, mSize, key);
+        mValues = GrowingArrayUtils.append(mValues, mSize, value);
+        mSize++;
     }
 
     /**
diff --git a/core/java/android/util/SparseBooleanArray.java b/core/java/android/util/SparseBooleanArray.java
index 905dcb0..e293b1f 100644
--- a/core/java/android/util/SparseBooleanArray.java
+++ b/core/java/android/util/SparseBooleanArray.java
@@ -17,6 +17,9 @@
 package android.util;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 /**
  * SparseBooleanArrays map integers to booleans.
@@ -57,12 +60,11 @@
      */
     public SparseBooleanArray(int initialCapacity) {
         if (initialCapacity == 0) {
-            mKeys = ContainerHelpers.EMPTY_INTS;
-            mValues = ContainerHelpers.EMPTY_BOOLEANS;
+            mKeys = EmptyArray.INT;
+            mValues = EmptyArray.BOOLEAN;
         } else {
-            initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity);
-            mKeys = new int[initialCapacity];
-            mValues = new boolean[initialCapacity];
+            mKeys = ArrayUtils.newUnpaddedIntArray(initialCapacity);
+            mValues = new boolean[mKeys.length];
         }
         mSize = 0;
     }
@@ -115,6 +117,13 @@
         }
     }
 
+    /** @hide */
+    public void removeAt(int index) {
+        System.arraycopy(mKeys, index + 1, mKeys, index, mSize - (index + 1));
+        System.arraycopy(mValues, index + 1, mValues, index, mSize - (index + 1));
+        mSize--;
+    }
+
     /**
      * Adds a mapping from the specified key to the specified value,
      * replacing the previous mapping from the specified key if there
@@ -128,28 +137,8 @@
         } else {
             i = ~i;
 
-            if (mSize >= mKeys.length) {
-                int n = ArrayUtils.idealIntArraySize(mSize + 1);
-
-                int[] nkeys = new int[n];
-                boolean[] nvalues = new boolean[n];
-
-                // Log.e("SparseBooleanArray", "grow " + mKeys.length + " to " + n);
-                System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-                System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-                mKeys = nkeys;
-                mValues = nvalues;
-            }
-
-            if (mSize - i != 0) {
-                // Log.e("SparseBooleanArray", "move " + (mSize - i));
-                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
-                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
-            }
-
-            mKeys[i] = key;
-            mValues[i] = value;
+            mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
+            mValues = GrowingArrayUtils.insert(mValues, mSize, i, value);
             mSize++;
         }
     }
@@ -191,6 +180,11 @@
         return mValues[index];
     }
 
+    /** @hide */
+    public void setValueAt(int index, boolean value) {
+        mValues[index] = value;
+    }
+
     /**
      * Returns the index for which {@link #keyAt} would return the
      * specified key, or a negative number if the specified
@@ -233,24 +227,9 @@
             return;
         }
 
-        int pos = mSize;
-        if (pos >= mKeys.length) {
-            int n = ArrayUtils.idealIntArraySize(pos + 1);
-
-            int[] nkeys = new int[n];
-            boolean[] nvalues = new boolean[n];
-
-            // Log.e("SparseBooleanArray", "grow " + mKeys.length + " to " + n);
-            System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-            System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-            mKeys = nkeys;
-            mValues = nvalues;
-        }
-
-        mKeys[pos] = key;
-        mValues[pos] = value;
-        mSize = pos + 1;
+        mKeys = GrowingArrayUtils.append(mKeys, mSize, key);
+        mValues = GrowingArrayUtils.append(mValues, mSize, value);
+        mSize++;
     }
 
     /**
diff --git a/core/java/android/util/SparseIntArray.java b/core/java/android/util/SparseIntArray.java
index 4f5ca07..2b85a21 100644
--- a/core/java/android/util/SparseIntArray.java
+++ b/core/java/android/util/SparseIntArray.java
@@ -17,6 +17,9 @@
 package android.util;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 /**
  * SparseIntArrays map integers to integers.  Unlike a normal array of integers,
@@ -60,12 +63,11 @@
      */
     public SparseIntArray(int initialCapacity) {
         if (initialCapacity == 0) {
-            mKeys = ContainerHelpers.EMPTY_INTS;
-            mValues = ContainerHelpers.EMPTY_INTS;
+            mKeys = EmptyArray.INT;
+            mValues = EmptyArray.INT;
         } else {
-            initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity);
-            mKeys = new int[initialCapacity];
-            mValues = new int[initialCapacity];
+            mKeys = ArrayUtils.newUnpaddedIntArray(initialCapacity);
+            mValues = new int[mKeys.length];
         }
         mSize = 0;
     }
@@ -138,28 +140,8 @@
         } else {
             i = ~i;
 
-            if (mSize >= mKeys.length) {
-                int n = ArrayUtils.idealIntArraySize(mSize + 1);
-
-                int[] nkeys = new int[n];
-                int[] nvalues = new int[n];
-
-                // Log.e("SparseIntArray", "grow " + mKeys.length + " to " + n);
-                System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-                System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-                mKeys = nkeys;
-                mValues = nvalues;
-            }
-
-            if (mSize - i != 0) {
-                // Log.e("SparseIntArray", "move " + (mSize - i));
-                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
-                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
-            }
-
-            mKeys[i] = key;
-            mValues[i] = value;
+            mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
+            mValues = GrowingArrayUtils.insert(mValues, mSize, i, value);
             mSize++;
         }
     }
@@ -243,24 +225,9 @@
             return;
         }
 
-        int pos = mSize;
-        if (pos >= mKeys.length) {
-            int n = ArrayUtils.idealIntArraySize(pos + 1);
-
-            int[] nkeys = new int[n];
-            int[] nvalues = new int[n];
-
-            // Log.e("SparseIntArray", "grow " + mKeys.length + " to " + n);
-            System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-            System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-            mKeys = nkeys;
-            mValues = nvalues;
-        }
-
-        mKeys[pos] = key;
-        mValues[pos] = value;
-        mSize = pos + 1;
+        mKeys = GrowingArrayUtils.append(mKeys, mSize, key);
+        mValues = GrowingArrayUtils.append(mValues, mSize, value);
+        mSize++;
     }
 
     /**
diff --git a/core/java/android/util/SparseLongArray.java b/core/java/android/util/SparseLongArray.java
index 39fc8a3..0166c4a 100644
--- a/core/java/android/util/SparseLongArray.java
+++ b/core/java/android/util/SparseLongArray.java
@@ -17,6 +17,9 @@
 package android.util;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
+
+import libcore.util.EmptyArray;
 
 /**
  * SparseLongArrays map integers to longs.  Unlike a normal array of longs,
@@ -60,12 +63,11 @@
      */
     public SparseLongArray(int initialCapacity) {
         if (initialCapacity == 0) {
-            mKeys = ContainerHelpers.EMPTY_INTS;
-            mValues = ContainerHelpers.EMPTY_LONGS;
+            mKeys = EmptyArray.INT;
+            mValues = EmptyArray.LONG;
         } else {
-            initialCapacity = ArrayUtils.idealLongArraySize(initialCapacity);
-            mKeys = new int[initialCapacity];
-            mValues = new long[initialCapacity];
+            mValues = ArrayUtils.newUnpaddedLongArray(initialCapacity);
+            mKeys = new int[mValues.length];
         }
         mSize = 0;
     }
@@ -138,17 +140,8 @@
         } else {
             i = ~i;
 
-            if (mSize >= mKeys.length) {
-                growKeyAndValueArrays(mSize + 1);
-            }
-
-            if (mSize - i != 0) {
-                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
-                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
-            }
-
-            mKeys[i] = key;
-            mValues[i] = value;
+            mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
+            mValues = GrowingArrayUtils.insert(mValues, mSize, i, value);
             mSize++;
         }
     }
@@ -232,27 +225,9 @@
             return;
         }
 
-        int pos = mSize;
-        if (pos >= mKeys.length) {
-            growKeyAndValueArrays(pos + 1);
-        }
-
-        mKeys[pos] = key;
-        mValues[pos] = value;
-        mSize = pos + 1;
-    }
-
-    private void growKeyAndValueArrays(int minNeededSize) {
-        int n = ArrayUtils.idealLongArraySize(minNeededSize);
-
-        int[] nkeys = new int[n];
-        long[] nvalues = new long[n];
-
-        System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-        System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-        mKeys = nkeys;
-        mValues = nvalues;
+        mKeys = GrowingArrayUtils.append(mKeys, mSize, key);
+        mValues = GrowingArrayUtils.append(mValues, mSize, value);
+        mSize++;
     }
 
     /**
diff --git a/core/java/android/view/AccessibilityInteractionController.java b/core/java/android/view/AccessibilityInteractionController.java
index 41d3700..477c994 100644
--- a/core/java/android/view/AccessibilityInteractionController.java
+++ b/core/java/android/view/AccessibilityInteractionController.java
@@ -18,13 +18,14 @@
 
 import android.graphics.Point;
 import android.graphics.Rect;
+import android.os.Build;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
 import android.os.Process;
 import android.os.RemoteException;
-import android.util.SparseLongArray;
+import android.util.LongSparseArray;
 import android.view.View.AttachInfo;
 import android.view.accessibility.AccessibilityInteractionClient;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -36,8 +37,11 @@
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Queue;
 
 /**
  * Class for managing accessibility interactions initiated from the system
@@ -48,6 +52,8 @@
  */
 final class AccessibilityInteractionController {
 
+    private static final boolean ENFORCE_NODE_TREE_CONSISTENT = false;
+
     private final ArrayList<AccessibilityNodeInfo> mTempAccessibilityNodeInfoList =
         new ArrayList<AccessibilityNodeInfo>();
 
@@ -138,7 +144,7 @@
             }
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
-            if (accessibilityViewId == AccessibilityNodeInfo.UNDEFINED) {
+            if (accessibilityViewId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                 root = mViewRootImpl.mView;
             } else {
                 root = findViewByAccessibilityId(accessibilityViewId);
@@ -210,7 +216,7 @@
             }
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
-            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
+            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                 root = findViewByAccessibilityId(accessibilityViewId);
             } else {
                 root = mViewRootImpl.mView;
@@ -290,7 +296,7 @@
             }
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
-            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
+            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                 root = findViewByAccessibilityId(accessibilityViewId);
             } else {
                 root = mViewRootImpl.mView;
@@ -298,9 +304,14 @@
             if (root != null && isShown(root)) {
                 AccessibilityNodeProvider provider = root.getAccessibilityNodeProvider();
                 if (provider != null) {
-                    infos = provider.findAccessibilityNodeInfosByText(text,
-                            virtualDescendantId);
-                } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED) {
+                    if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+                        infos = provider.findAccessibilityNodeInfosByText(text,
+                                virtualDescendantId);
+                    } else {
+                        infos = provider.findAccessibilityNodeInfosByText(text,
+                                AccessibilityNodeProvider.HOST_VIEW_ID);
+                    }
+                } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                     ArrayList<View> foundViews = mTempArrayList;
                     foundViews.clear();
                     root.findViewsWithText(foundViews, text, View.FIND_VIEWS_WITH_TEXT
@@ -317,7 +328,7 @@
                                 if (provider != null) {
                                     List<AccessibilityNodeInfo> infosFromProvider =
                                         provider.findAccessibilityNodeInfosByText(text,
-                                                AccessibilityNodeInfo.UNDEFINED);
+                                                AccessibilityNodeProvider.HOST_VIEW_ID);
                                     if (infosFromProvider != null) {
                                         infos.addAll(infosFromProvider);
                                     }
@@ -392,7 +403,7 @@
             }
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
-            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
+            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                 root = findViewByAccessibilityId(accessibilityViewId);
             } else {
                 root = mViewRootImpl.mView;
@@ -418,7 +429,7 @@
                                 focused = AccessibilityNodeInfo.obtain(
                                         mViewRootImpl.mAccessibilityFocusedVirtualView);
                             }
-                        } else if (virtualDescendantId == View.NO_ID) {
+                        } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                             focused = host.createAccessibilityNodeInfo();
                         }
                     } break;
@@ -501,7 +512,7 @@
             }
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View root = null;
-            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
+            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                 root = findViewByAccessibilityId(accessibilityViewId);
             } else {
                 root = mViewRootImpl.mView;
@@ -577,7 +588,7 @@
             }
             mViewRootImpl.mAttachInfo.mAccessibilityFetchFlags = flags;
             View target = null;
-            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
+            if (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                 target = findViewByAccessibilityId(accessibilityViewId);
             } else {
                 target = mViewRootImpl.mView;
@@ -585,9 +596,14 @@
             if (target != null && isShown(target)) {
                 AccessibilityNodeProvider provider = target.getAccessibilityNodeProvider();
                 if (provider != null) {
-                    succeeded = provider.performAction(virtualDescendantId, action,
-                            arguments);
-                } else if (virtualDescendantId == View.NO_ID) {
+                    if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+                        succeeded = provider.performAction(virtualDescendantId, action,
+                                arguments);
+                    } else {
+                        succeeded = provider.performAction(AccessibilityNodeProvider.HOST_VIEW_ID,
+                                action, arguments);
+                    }
+                } else if (virtualDescendantId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                     succeeded = target.performAccessibilityAction(action, arguments);
                 }
             }
@@ -735,6 +751,85 @@
                     }
                 }
             }
+            if (ENFORCE_NODE_TREE_CONSISTENT) {
+                enforceNodeTreeConsistent(outInfos);
+            }
+        }
+
+        private void enforceNodeTreeConsistent(List<AccessibilityNodeInfo> nodes) {
+            LongSparseArray<AccessibilityNodeInfo> nodeMap =
+                    new LongSparseArray<AccessibilityNodeInfo>();
+            final int nodeCount = nodes.size();
+            for (int i = 0; i < nodeCount; i++) {
+                AccessibilityNodeInfo node = nodes.get(i);
+                nodeMap.put(node.getSourceNodeId(), node);
+            }
+
+            // If the nodes are a tree it does not matter from
+            // which node we start to search for the root.
+            AccessibilityNodeInfo root = nodeMap.valueAt(0);
+            AccessibilityNodeInfo parent = root;
+            while (parent != null) {
+                root = parent;
+                parent = nodeMap.get(parent.getParentNodeId());
+            }
+
+            // Traverse the tree and do some checks.
+            AccessibilityNodeInfo accessFocus = null;
+            AccessibilityNodeInfo inputFocus = null;
+            HashSet<AccessibilityNodeInfo> seen = new HashSet<AccessibilityNodeInfo>();
+            Queue<AccessibilityNodeInfo> fringe = new LinkedList<AccessibilityNodeInfo>();
+            fringe.add(root);
+
+            while (!fringe.isEmpty()) {
+                AccessibilityNodeInfo current = fringe.poll();
+
+                // Check for duplicates
+                if (!seen.add(current)) {
+                    throw new IllegalStateException("Duplicate node: "
+                            + current + " in window:"
+                            + mViewRootImpl.mAttachInfo.mAccessibilityWindowId);
+                }
+
+                // Check for one accessibility focus.
+                if (current.isAccessibilityFocused()) {
+                    if (accessFocus != null) {
+                        throw new IllegalStateException("Duplicate accessibility focus:"
+                                + current
+                                + " in window:" + mViewRootImpl.mAttachInfo.mAccessibilityWindowId);
+                    } else {
+                        accessFocus = current;
+                    }
+                }
+
+                // Check for one input focus.
+                if (current.isFocused()) {
+                    if (inputFocus != null) {
+                        throw new IllegalStateException("Duplicate input focus: "
+                            + current + " in window:"
+                            + mViewRootImpl.mAttachInfo.mAccessibilityWindowId);
+                    } else {
+                        inputFocus = current;
+                    }
+                }
+
+                final int childCount = current.getChildCount();
+                for (int j = 0; j < childCount; j++) {
+                    final long childId = current.getChildId(j);
+                    final AccessibilityNodeInfo child = nodeMap.get(childId);
+                    if (child != null) {
+                        fringe.add(child);
+                    }
+                }
+            }
+
+            // Check for disconnected nodes.
+            for (int j = nodeMap.size() - 1; j >= 0; j--) {
+                AccessibilityNodeInfo info = nodeMap.valueAt(j);
+                if (!seen.contains(info)) {
+                    throw new IllegalStateException("Disconnected node: " + info);
+                }
+            }
         }
 
         private void prefetchPredecessorsOfRealNode(View view,
@@ -775,7 +870,7 @@
                                 info = child.createAccessibilityNodeInfo();
                             } else {
                                 info = provider.createAccessibilityNodeInfo(
-                                        AccessibilityNodeInfo.UNDEFINED);
+                                        AccessibilityNodeProvider.HOST_VIEW_ID);
                             }
                             if (info != null) {
                                 outInfos.add(info);
@@ -815,7 +910,7 @@
                             }
                         } else {
                             AccessibilityNodeInfo info = provider.createAccessibilityNodeInfo(
-                                   AccessibilityNodeInfo.UNDEFINED);
+                                   AccessibilityNodeProvider.HOST_VIEW_ID);
                             if (info != null) {
                                 outInfos.add(info);
                                 addedChildren.put(child, info);
@@ -846,16 +941,22 @@
                 List<AccessibilityNodeInfo> outInfos) {
             long parentNodeId = root.getParentNodeId();
             int accessibilityViewId = AccessibilityNodeInfo.getAccessibilityViewId(parentNodeId);
-            while (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED) {
+            while (accessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
                 if (outInfos.size() >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE) {
                     return;
                 }
                 final int virtualDescendantId =
                     AccessibilityNodeInfo.getVirtualDescendantId(parentNodeId);
-                if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED
+                if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID
                         || accessibilityViewId == providerHost.getAccessibilityViewId()) {
-                    AccessibilityNodeInfo parent = provider.createAccessibilityNodeInfo(
-                            virtualDescendantId);
+                    final AccessibilityNodeInfo parent;
+                    if (virtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+                        parent = provider.createAccessibilityNodeInfo(
+                                virtualDescendantId);
+                    } else {
+                        parent= provider.createAccessibilityNodeInfo(
+                                AccessibilityNodeProvider.HOST_VIEW_ID);
+                    }
                     if (parent != null) {
                         outInfos.add(parent);
                     }
@@ -876,18 +977,22 @@
                 AccessibilityNodeInfo.getAccessibilityViewId(parentNodeId);
             final int parentVirtualDescendantId =
                 AccessibilityNodeInfo.getVirtualDescendantId(parentNodeId);
-            if (parentVirtualDescendantId != AccessibilityNodeInfo.UNDEFINED
+            if (parentVirtualDescendantId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID
                     || parentAccessibilityViewId == providerHost.getAccessibilityViewId()) {
-                AccessibilityNodeInfo parent =
-                    provider.createAccessibilityNodeInfo(parentVirtualDescendantId);
+                final AccessibilityNodeInfo parent;
+                if (parentAccessibilityViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
+                    parent = provider.createAccessibilityNodeInfo(parentVirtualDescendantId);
+                } else {
+                    parent = provider.createAccessibilityNodeInfo(
+                            AccessibilityNodeProvider.HOST_VIEW_ID);
+                }
                 if (parent != null) {
-                    SparseLongArray childNodeIds = parent.getChildNodeIds();
-                    final int childCount = childNodeIds.size();
+                    final int childCount = parent.getChildCount();
                     for (int i = 0; i < childCount; i++) {
                         if (outInfos.size() >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE) {
                             return;
                         }
-                        final long childNodeId = childNodeIds.get(i);
+                        final long childNodeId = parent.getChildId(i);
                         if (childNodeId != current.getSourceNodeId()) {
                             final int childVirtualDescendantId =
                                 AccessibilityNodeInfo.getVirtualDescendantId(childNodeId);
@@ -906,14 +1011,13 @@
 
         private void prefetchDescendantsOfVirtualNode(AccessibilityNodeInfo root,
                 AccessibilityNodeProvider provider, List<AccessibilityNodeInfo> outInfos) {
-            SparseLongArray childNodeIds = root.getChildNodeIds();
             final int initialOutInfosSize = outInfos.size();
-            final int childCount = childNodeIds.size();
+            final int childCount = root.getChildCount();
             for (int i = 0; i < childCount; i++) {
                 if (outInfos.size() >= MAX_ACCESSIBILITY_NODE_INFO_BATCH_SIZE) {
                     return;
                 }
-                final long childNodeId = childNodeIds.get(i);
+                final long childNodeId = root.getChildId(i);
                 AccessibilityNodeInfo child = provider.createAccessibilityNodeInfo(
                         AccessibilityNodeInfo.getVirtualDescendantId(childNodeId));
                 if (child != null) {
diff --git a/core/java/android/view/AccessibilityIterators.java b/core/java/android/view/AccessibilityIterators.java
index 17ce4f6..e59937d 100644
--- a/core/java/android/view/AccessibilityIterators.java
+++ b/core/java/android/view/AccessibilityIterators.java
@@ -17,8 +17,6 @@
 package android.view;
 
 import android.content.ComponentCallbacks;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
 import android.content.res.Configuration;
 
 import java.text.BreakIterator;
diff --git a/core/java/android/view/AnimationRenderStats.aidl b/core/java/android/view/AnimationRenderStats.aidl
new file mode 100644
index 0000000..4599708
--- /dev/null
+++ b/core/java/android/view/AnimationRenderStats.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.view;
+
+parcelable AnimationRenderStats;
diff --git a/core/java/android/view/ContextThemeWrapper.java b/core/java/android/view/ContextThemeWrapper.java
index 6c733f9..ba1c4b6 100644
--- a/core/java/android/view/ContextThemeWrapper.java
+++ b/core/java/android/view/ContextThemeWrapper.java
@@ -20,14 +20,12 @@
 import android.content.ContextWrapper;
 import android.content.res.Configuration;
 import android.content.res.Resources;
-import android.os.Build;
 
 /**
  * A ContextWrapper that allows you to modify the theme from what is in the 
  * wrapped context. 
  */
 public class ContextThemeWrapper extends ContextWrapper {
-    private Context mBase;
     private int mThemeResource;
     private Resources.Theme mTheme;
     private LayoutInflater mInflater;
@@ -40,13 +38,11 @@
     
     public ContextThemeWrapper(Context base, int themeres) {
         super(base);
-        mBase = base;
         mThemeResource = themeres;
     }
 
     @Override protected void attachBaseContext(Context newBase) {
         super.attachBaseContext(newBase);
-        mBase = newBase;
     }
 
     /**
@@ -100,7 +96,7 @@
             return mTheme;
         }
 
-        mThemeResource = Resources.selectDefaultTheme(mThemeResource,
+        mThemeResource = getResources().selectDefaultTheme(mThemeResource,
                 getApplicationInfo().targetSdkVersion);
         initializeTheme();
 
@@ -110,11 +106,11 @@
     @Override public Object getSystemService(String name) {
         if (LAYOUT_INFLATER_SERVICE.equals(name)) {
             if (mInflater == null) {
-                mInflater = LayoutInflater.from(mBase).cloneInContext(this);
+                mInflater = LayoutInflater.from(getBaseContext()).cloneInContext(this);
             }
             return mInflater;
         }
-        return mBase.getSystemService(name);
+        return getBaseContext().getSystemService(name);
     }
     
     /**
@@ -136,7 +132,7 @@
         final boolean first = mTheme == null;
         if (first) {
             mTheme = getResources().newTheme();
-            Resources.Theme theme = mBase.getTheme();
+            Resources.Theme theme = getBaseContext().getTheme();
             if (theme != null) {
                 mTheme.setTo(theme);
             }
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index c4494f4..d7a913d 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -558,6 +558,7 @@
      * 90 degrees clockwise and thus the returned value here will be
      * {@link Surface#ROTATION_90 Surface.ROTATION_90}.
      */
+    @Surface.Rotation
     public int getRotation() {
         synchronized (this) {
             updateDisplayInfoLocked();
@@ -570,6 +571,7 @@
      * @return orientation of this display.
      */
     @Deprecated
+    @Surface.Rotation
     public int getOrientation() {
         return getRotation();
     }
diff --git a/core/java/android/view/DisplayInfo.java b/core/java/android/view/DisplayInfo.java
index 5f840d3..b0fe0fa 100644
--- a/core/java/android/view/DisplayInfo.java
+++ b/core/java/android/view/DisplayInfo.java
@@ -20,7 +20,6 @@
 import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.Process;
 import android.util.DisplayMetrics;
 
 import libcore.util.Objects;
@@ -144,6 +143,7 @@
      * more than one physical display.
      * </p>
      */
+    @Surface.Rotation
     public int rotation;
 
     /**
diff --git a/core/java/android/view/DisplayList.java b/core/java/android/view/DisplayList.java
deleted file mode 100644
index 43fd628..0000000
--- a/core/java/android/view/DisplayList.java
+++ /dev/null
@@ -1,686 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.view;
-
-import android.graphics.Matrix;
-
-/**
- * <p>A display list records a series of graphics related operations and can replay
- * them later. Display lists are usually built by recording operations on a
- * {@link HardwareCanvas}. Replaying the operations from a display list avoids
- * executing application code on every frame, and is thus much more efficient.</p>
- *
- * <p>Display lists are used internally for all views by default, and are not
- * typically used directly. One reason to consider using a display is a custom
- * {@link View} implementation that needs to issue a large number of drawing commands.
- * When the view invalidates, all the drawing commands must be reissued, even if
- * large portions of the drawing command stream stay the same frame to frame, which
- * can become a performance bottleneck. To solve this issue, a custom View might split
- * its content into several display lists. A display list is updated only when its
- * content, and only its content, needs to be updated.</p>
- *
- * <p>A text editor might for instance store each paragraph into its own display list.
- * Thus when the user inserts or removes characters, only the display list of the
- * affected paragraph needs to be recorded again.</p>
- *
- * <h3>Hardware acceleration</h3>
- * <p>Display lists can only be replayed using a {@link HardwareCanvas}. They are not
- * supported in software. Always make sure that the {@link android.graphics.Canvas}
- * you are using to render a display list is hardware accelerated using
- * {@link android.graphics.Canvas#isHardwareAccelerated()}.</p>
- *
- * <h3>Creating a display list</h3>
- * <pre class="prettyprint">
- *     HardwareRenderer renderer = myView.getHardwareRenderer();
- *     if (renderer != null) {
- *         DisplayList displayList = renderer.createDisplayList();
- *         HardwareCanvas canvas = displayList.start(width, height);
- *         try {
- *             // Draw onto the canvas
- *             // For instance: canvas.drawBitmap(...);
- *         } finally {
- *             displayList.end();
- *         }
- *     }
- * </pre>
- *
- * <h3>Rendering a display list on a View</h3>
- * <pre class="prettyprint">
- *     protected void onDraw(Canvas canvas) {
- *         if (canvas.isHardwareAccelerated()) {
- *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
- *             hardwareCanvas.drawDisplayList(mDisplayList);
- *         }
- *     }
- * </pre>
- *
- * <h3>Releasing resources</h3>
- * <p>This step is not mandatory but recommended if you want to release resources
- * held by a display list as soon as possible.</p>
- * <pre class="prettyprint">
- *     // Mark this display list invalid, it cannot be used for drawing anymore,
- *     // and release resources held by this display list
- *     displayList.clear();
- * </pre>
- *
- * <h3>Properties</h3>
- * <p>In addition, a display list offers several properties, such as
- * {@link #setScaleX(float)} or {@link #setLeft(int)}, that can be used to affect all
- * the drawing commands recorded within. For instance, these properties can be used
- * to move around a large number of images without re-issuing all the individual
- * <code>drawBitmap()</code> calls.</p>
- *
- * <pre class="prettyprint">
- *     private void createDisplayList() {
- *         HardwareRenderer renderer = getHardwareRenderer();
- *         if (renderer != null) {
- *             mDisplayList = renderer.createDisplayList();
- *             HardwareCanvas canvas = mDisplayList.start(width, height);
- *             try {
- *                 for (Bitmap b : mBitmaps) {
- *                     canvas.drawBitmap(b, 0.0f, 0.0f, null);
- *                     canvas.translate(0.0f, b.getHeight());
- *                 }
- *             } finally {
- *                 displayList.end();
- *             }
- *         }
- *     }
- *
- *     protected void onDraw(Canvas canvas) {
- *         if (canvas.isHardwareAccelerated()) {
- *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
- *             hardwareCanvas.drawDisplayList(mDisplayList);
- *         }
- *     }
- *
- *     private void moveContentBy(int x) {
- *          // This will move all the bitmaps recorded inside the display list
- *          // by x pixels to the right and redraw this view. All the commands
- *          // recorded in createDisplayList() won't be re-issued, only onDraw()
- *          // will be invoked and will execute very quickly
- *          mDisplayList.offsetLeftAndRight(x);
- *          invalidate();
- *     }
- * </pre>
- *
- * <h3>Threading</h3>
- * <p>Display lists must be created on and manipulated from the UI thread only.</p>
- *
- * @hide
- */
-public abstract class DisplayList {
-    private boolean mDirty;
-
-    /**
-     * Flag used when calling
-     * {@link HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)} 
-     * When this flag is set, draw operations lying outside of the bounds of the
-     * display list will be culled early. It is recommeneded to always set this
-     * flag.
-     *
-     * @hide
-     */
-    public static final int FLAG_CLIP_CHILDREN = 0x1;
-
-    // NOTE: The STATUS_* values *must* match the enum in DrawGlInfo.h
-
-    /**
-     * Indicates that the display list is done drawing.
-     * 
-     * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)
-     *
-     * @hide
-     */
-    public static final int STATUS_DONE = 0x0;
-
-    /**
-     * Indicates that the display list needs another drawing pass.
-     * 
-     * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)
-     *
-     * @hide
-     */
-    public static final int STATUS_DRAW = 0x1;
-
-    /**
-     * Indicates that the display list needs to re-execute its GL functors.
-     * 
-     * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int) 
-     * @see HardwareCanvas#callDrawGLFunction(int)
-     *
-     * @hide
-     */
-    public static final int STATUS_INVOKE = 0x2;
-
-    /**
-     * Indicates that the display list performed GL drawing operations.
-     *
-     * @see HardwareCanvas#drawDisplayList(DisplayList, android.graphics.Rect, int)
-     *
-     * @hide
-     */
-    public static final int STATUS_DREW = 0x4;
-
-    /**
-     * Starts recording the display list. All operations performed on the
-     * returned canvas are recorded and stored in this display list.
-     *
-     * Calling this method will mark the display list invalid until
-     * {@link #end()} is called. Only valid display lists can be replayed.
-     *
-     * @param width The width of the display list's viewport
-     * @param height The height of the display list's viewport
-     *
-     * @return A canvas to record drawing operations.
-     *
-     * @see #end()
-     * @see #isValid()
-     */
-    public abstract HardwareCanvas start(int width, int height);
-
-    /**
-     * Ends the recording for this display list. A display list cannot be
-     * replayed if recording is not finished. Calling this method marks
-     * the display list valid and {@link #isValid()} will return true.
-     *
-     * @see #start(int, int)
-     * @see #isValid()
-     */
-    public abstract void end();
-
-    /**
-     * Clears resources held onto by this display list. After calling this method
-     * {@link #isValid()} will return false.
-     *
-     * @see #isValid()
-     * @see #reset()
-     */
-    public abstract void clear();
-
-
-    /**
-     * Reset native resources. This is called when cleaning up the state of display lists
-     * during destruction of hardware resources, to ensure that we do not hold onto
-     * obsolete resources after related resources are gone.
-     *
-     * @see #clear()
-     *
-     * @hide
-     */
-    public abstract void reset();
-
-    /**
-     * Sets the dirty flag. When a display list is dirty, {@link #clear()} should
-     * be invoked whenever possible.
-     *
-     * @see #isDirty()
-     * @see #clear()
-     *
-     * @hide
-     */
-    public void markDirty() {
-        mDirty = true;
-    }
-
-    /**
-     * Removes the dirty flag. This method can be used to cancel a cleanup
-     * previously scheduled by setting the dirty flag.
-     *
-     * @see #isDirty()
-     * @see #clear()
-     *
-     * @hide
-     */
-    protected void clearDirty() {
-        mDirty = false;
-    }
-
-    /**
-     * Indicates whether the display list is dirty.
-     *
-     * @see #markDirty()
-     * @see #clear()
-     *
-     * @hide
-     */
-    public boolean isDirty() {
-        return mDirty;
-    }
-
-    /**
-     * Returns whether the display list is currently usable. If this returns false,
-     * the display list should be re-recorded prior to replaying it.
-     *
-     * @return boolean true if the display list is able to be replayed, false otherwise.
-     */
-    public abstract boolean isValid();
-
-    /**
-     * Return the amount of memory used by this display list.
-     * 
-     * @return The size of this display list in bytes
-     *
-     * @hide
-     */
-    public abstract int getSize();
-
-    ///////////////////////////////////////////////////////////////////////////
-    // DisplayList Property Setters
-    ///////////////////////////////////////////////////////////////////////////
-
-    /**
-     * Set the caching property on the display list, which indicates whether the display list
-     * holds a layer. Layer display lists should avoid creating an alpha layer, since alpha is
-     * handled in the drawLayer operation directly (and more efficiently).
-     *
-     * @param caching true if the display list represents a hardware layer, false otherwise.
-     *
-     * @hide
-     */
-    public abstract void setCaching(boolean caching);
-
-    /**
-     * Set whether the display list should clip itself to its bounds. This property is controlled by
-     * the view's parent.
-     *
-     * @param clipToBounds true if the display list should clip to its bounds
-     */
-    public abstract void setClipToBounds(boolean clipToBounds);
-
-    /**
-     * Set the static matrix on the display list. The specified matrix is combined with other
-     * transforms (such as {@link #setScaleX(float)}, {@link #setRotation(float)}, etc.)
-     *
-     * @param matrix A transform matrix to apply to this display list
-     *
-     * @see #getMatrix(android.graphics.Matrix)
-     * @see #getMatrix()
-     */
-    public abstract void setMatrix(Matrix matrix);
-
-    /**
-     * Returns the static matrix set on this display list.
-     *
-     * @return A new {@link Matrix} instance populated with this display list's static
-     *         matrix
-     *
-     * @see #getMatrix(android.graphics.Matrix)
-     * @see #setMatrix(android.graphics.Matrix)
-     */
-    public Matrix getMatrix() {
-        return getMatrix(new Matrix());
-    }
-
-    /**
-     * Copies this display list's static matrix into the specified matrix.
-     *
-     * @param matrix The {@link Matrix} instance in which to copy this display
-     *               list's static matrix. Cannot be null
-     *
-     * @return The <code>matrix</code> parameter, for convenience
-     *
-     * @see #getMatrix()
-     * @see #setMatrix(android.graphics.Matrix)
-     */
-    public abstract Matrix getMatrix(Matrix matrix);
-
-    /**
-     * Set the Animation matrix on the display list. This matrix exists if an Animation is
-     * currently playing on a View, and is set on the display list during at draw() time. When
-     * the Animation finishes, the matrix should be cleared by sending <code>null</code>
-     * for the matrix parameter.
-     *
-     * @param matrix The matrix, null indicates that the matrix should be cleared.
-     *
-     * @hide
-     */
-    public abstract void setAnimationMatrix(Matrix matrix);
-
-    /**
-     * Sets the translucency level for the display list.
-     *
-     * @param alpha The translucency of the display list, must be a value between 0.0f and 1.0f
-     *
-     * @see View#setAlpha(float)
-     * @see #getAlpha()
-     */
-    public abstract void setAlpha(float alpha);
-
-    /**
-     * Returns the translucency level of this display list.
-     *
-     * @return A value between 0.0f and 1.0f
-     *
-     * @see #setAlpha(float)
-     */
-    public abstract float getAlpha();
-
-    /**
-     * Sets whether the display list renders content which overlaps. Non-overlapping rendering
-     * can use a fast path for alpha that avoids rendering to an offscreen buffer. By default
-     * display lists consider they do not have overlapping content.
-     *
-     * @param hasOverlappingRendering False if the content is guaranteed to be non-overlapping,
-     *                                true otherwise.
-     *
-     * @see android.view.View#hasOverlappingRendering()
-     * @see #hasOverlappingRendering()
-     */
-    public abstract void setHasOverlappingRendering(boolean hasOverlappingRendering);
-
-    /**
-     * Indicates whether the content of this display list overlaps.
-     *
-     * @return True if this display list renders content which overlaps, false otherwise.
-     *
-     * @see #setHasOverlappingRendering(boolean)
-     */
-    public abstract boolean hasOverlappingRendering();
-
-    /**
-     * Sets the translation value for the display list on the X axis
-     *
-     * @param translationX The X axis translation value of the display list, in pixels
-     *
-     * @see View#setTranslationX(float)
-     * @see #getTranslationX()
-     */
-    public abstract void setTranslationX(float translationX);
-
-    /**
-     * Returns the translation value for this display list on the X axis, in pixels.
-     *
-     * @see #setTranslationX(float)
-     */
-    public abstract float getTranslationX();
-
-    /**
-     * Sets the translation value for the display list on the Y axis
-     *
-     * @param translationY The Y axis translation value of the display list, in pixels
-     *
-     * @see View#setTranslationY(float)
-     * @see #getTranslationY()
-     */
-    public abstract void setTranslationY(float translationY);
-
-    /**
-     * Returns the translation value for this display list on the Y axis, in pixels.
-     *
-     * @see #setTranslationY(float)
-     */
-    public abstract float getTranslationY();
-
-    /**
-     * Sets the rotation value for the display list around the Z axis
-     *
-     * @param rotation The rotation value of the display list, in degrees
-     *
-     * @see View#setRotation(float)
-     * @see #getRotation()
-     */
-    public abstract void setRotation(float rotation);
-
-    /**
-     * Returns the rotation value for this display list around the Z axis, in degrees.
-     *
-     * @see #setRotation(float)
-     */
-    public abstract float getRotation();
-
-    /**
-     * Sets the rotation value for the display list around the X axis
-     *
-     * @param rotationX The rotation value of the display list, in degrees
-     *
-     * @see View#setRotationX(float)
-     * @see #getRotationX()
-     */
-    public abstract void setRotationX(float rotationX);
-
-    /**
-     * Returns the rotation value for this display list around the X axis, in degrees.
-     *
-     * @see #setRotationX(float)
-     */
-    public abstract float getRotationX();
-
-    /**
-     * Sets the rotation value for the display list around the Y axis
-     *
-     * @param rotationY The rotation value of the display list, in degrees
-     *
-     * @see View#setRotationY(float)
-     * @see #getRotationY()
-     */
-    public abstract void setRotationY(float rotationY);
-
-    /**
-     * Returns the rotation value for this display list around the Y axis, in degrees.
-     *
-     * @see #setRotationY(float)
-     */
-    public abstract float getRotationY();
-
-    /**
-     * Sets the scale value for the display list on the X axis
-     *
-     * @param scaleX The scale value of the display list
-     *
-     * @see View#setScaleX(float)
-     * @see #getScaleX()
-     */
-    public abstract void setScaleX(float scaleX);
-
-    /**
-     * Returns the scale value for this display list on the X axis.
-     *
-     * @see #setScaleX(float)
-     */
-    public abstract float getScaleX();
-
-    /**
-     * Sets the scale value for the display list on the Y axis
-     *
-     * @param scaleY The scale value of the display list
-     *
-     * @see View#setScaleY(float)
-     * @see #getScaleY()
-     */
-    public abstract void setScaleY(float scaleY);
-
-    /**
-     * Returns the scale value for this display list on the Y axis.
-     *
-     * @see #setScaleY(float)
-     */
-    public abstract float getScaleY();
-
-    /**
-     * Sets all of the transform-related values of the display list
-     *
-     * @param alpha The alpha value of the display list
-     * @param translationX The translationX value of the display list
-     * @param translationY The translationY value of the display list
-     * @param rotation The rotation value of the display list
-     * @param rotationX The rotationX value of the display list
-     * @param rotationY The rotationY value of the display list
-     * @param scaleX The scaleX value of the display list
-     * @param scaleY The scaleY value of the display list
-     *
-     * @hide
-     */
-    public abstract void setTransformationInfo(float alpha, float translationX, float translationY,
-            float rotation, float rotationX, float rotationY, float scaleX, float scaleY);
-
-    /**
-     * Sets the pivot value for the display list on the X axis
-     *
-     * @param pivotX The pivot value of the display list on the X axis, in pixels
-     *
-     * @see View#setPivotX(float)
-     * @see #getPivotX()
-     */
-    public abstract void setPivotX(float pivotX);
-
-    /**
-     * Returns the pivot value for this display list on the X axis, in pixels.
-     *
-     * @see #setPivotX(float)
-     */
-    public abstract float getPivotX();
-
-    /**
-     * Sets the pivot value for the display list on the Y axis
-     *
-     * @param pivotY The pivot value of the display list on the Y axis, in pixels
-     *
-     * @see View#setPivotY(float)
-     * @see #getPivotY()
-     */
-    public abstract void setPivotY(float pivotY);
-
-    /**
-     * Returns the pivot value for this display list on the Y axis, in pixels.
-     *
-     * @see #setPivotY(float)
-     */
-    public abstract float getPivotY();
-
-    /**
-     * Sets the camera distance for the display list. Refer to
-     * {@link View#setCameraDistance(float)} for more information on how to
-     * use this property.
-     *
-     * @param distance The distance in Z of the camera of the display list
-     *
-     * @see View#setCameraDistance(float)
-     * @see #getCameraDistance()
-     */
-    public abstract void setCameraDistance(float distance);
-
-    /**
-     * Returns the distance in Z of the camera of the display list.
-     *
-     * @see #setCameraDistance(float)
-     */
-    public abstract float getCameraDistance();
-
-    /**
-     * Sets the left position for the display list.
-     *
-     * @param left The left position, in pixels, of the display list
-     *
-     * @see View#setLeft(int)
-     * @see #getLeft()
-     */
-    public abstract void setLeft(int left);
-
-    /**
-     * Returns the left position for the display list in pixels.
-     *
-     * @see #setLeft(int)
-     */
-    public abstract float getLeft();
-
-    /**
-     * Sets the top position for the display list.
-     *
-     * @param top The top position, in pixels, of the display list
-     *
-     * @see View#setTop(int)
-     * @see #getTop()
-     */
-    public abstract void setTop(int top);
-
-    /**
-     * Returns the top position for the display list in pixels.
-     *
-     * @see #setTop(int)
-     */
-    public abstract float getTop();
-
-    /**
-     * Sets the right position for the display list.
-     *
-     * @param right The right position, in pixels, of the display list
-     *
-     * @see View#setRight(int)
-     * @see #getRight()
-     */
-    public abstract void setRight(int right);
-
-    /**
-     * Returns the right position for the display list in pixels.
-     *
-     * @see #setRight(int)
-     */
-    public abstract float getRight();
-
-    /**
-     * Sets the bottom position for the display list.
-     *
-     * @param bottom The bottom position, in pixels, of the display list
-     *
-     * @see View#setBottom(int)
-     * @see #getBottom()
-     */
-    public abstract void setBottom(int bottom);
-
-    /**
-     * Returns the bottom position for the display list in pixels.
-     *
-     * @see #setBottom(int)
-     */
-    public abstract float getBottom();
-
-    /**
-     * Sets the left and top positions for the display list
-     *
-     * @param left The left position of the display list, in pixels
-     * @param top The top position of the display list, in pixels
-     * @param right The right position of the display list, in pixels
-     * @param bottom The bottom position of the display list, in pixels
-     *
-     * @see View#setLeft(int)
-     * @see View#setTop(int)
-     * @see View#setRight(int)
-     * @see View#setBottom(int)
-     */
-    public abstract void setLeftTopRightBottom(int left, int top, int right, int bottom);
-
-    /**
-     * Offsets the left and right positions for the display list
-     *
-     * @param offset The amount that the left and right positions of the display
-     *               list are offset, in pixels
-     *
-     * @see View#offsetLeftAndRight(int)
-     */
-    public abstract void offsetLeftAndRight(float offset);
-
-    /**
-     * Offsets the top and bottom values for the display list
-     *
-     * @param offset The amount that the top and bottom positions of the display
-     *               list are offset, in pixels
-     *
-     * @see View#offsetTopAndBottom(int)
-     */
-    public abstract void offsetTopAndBottom(float offset);
-}
diff --git a/core/java/android/view/FrameStats.java b/core/java/android/view/FrameStats.java
new file mode 100644
index 0000000..541b336
--- /dev/null
+++ b/core/java/android/view/FrameStats.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2014 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 android.view;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * This is the base class for frame statistics.
+ */
+public abstract class FrameStats {
+    /**
+     * Undefined time.
+     */
+    public static final long UNDEFINED_TIME_NANO = -1;
+
+    protected long mRefreshPeriodNano;
+    protected long[] mFramesPresentedTimeNano;
+
+    /**
+     * Gets the refresh period of the display hosting the window(s) for
+     * which these statistics apply.
+     *
+     * @return The refresh period in nanoseconds.
+     */
+    public final long getRefreshPeriodNano() {
+        return mRefreshPeriodNano;
+    }
+
+    /**
+     * Gets the number of frames for which there is data.
+     *
+     * @return The number of frames.
+     */
+    public final int getFrameCount() {
+        return mFramesPresentedTimeNano != null
+                ? mFramesPresentedTimeNano.length : 0;
+    }
+
+    /**
+     * Gets the start time of the interval for which these statistics
+     * apply. The start interval is the time when the first frame was
+     * presented.
+     *
+     * @return The start time in nanoseconds or {@link #UNDEFINED_TIME_NANO}
+     *         if there is no frame data.
+     */
+    public final long getStartTimeNano() {
+        if (getFrameCount() <= 0) {
+            return UNDEFINED_TIME_NANO;
+        }
+        return mFramesPresentedTimeNano[0];
+    }
+
+    /**
+     * Gets the end time of the interval for which these statistics
+     * apply. The end interval is the time when the last frame was
+     * presented.
+     *
+     * @return The end time in nanoseconds or {@link #UNDEFINED_TIME_NANO}
+     *         if there is no frame data.
+     */
+    public final long getEndTimeNano() {
+        if (getFrameCount() <= 0) {
+            return UNDEFINED_TIME_NANO;
+        }
+        return mFramesPresentedTimeNano[mFramesPresentedTimeNano.length - 1];
+    }
+
+    /**
+     * Get the time a frame at a given index was presented.
+     *
+     * @param index The frame index.
+     * @return The presented time in nanoseconds or {@link #UNDEFINED_TIME_NANO}
+     *         if the frame is not presented yet.
+     */
+    public final long getFramePresentedTimeNano(int index) {
+        if (mFramesPresentedTimeNano == null) {
+            throw new IndexOutOfBoundsException();
+        }
+        return mFramesPresentedTimeNano[index];
+    }
+}
diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index d533060..34b85d9 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -18,7 +18,6 @@
 
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
-import android.graphics.ColorFilter;
 import android.graphics.DrawFilter;
 import android.graphics.Matrix;
 import android.graphics.NinePatch;
@@ -31,7 +30,6 @@
 import android.graphics.RectF;
 import android.graphics.Region;
 import android.graphics.Shader;
-import android.graphics.SurfaceTexture;
 import android.graphics.TemporaryBuffer;
 import android.text.GraphicsOperations;
 import android.text.SpannableString;
@@ -46,10 +44,9 @@
     private static final int MODIFIER_NONE = 0;
     private static final int MODIFIER_SHADOW = 1;
     private static final int MODIFIER_SHADER = 2;
-    private static final int MODIFIER_COLOR_FILTER = 4;
 
     private final boolean mOpaque;
-    private long mRenderer;
+    protected long mRenderer;
 
     // The native renderer will be destroyed when this object dies.
     // DO NOT overwrite this reference once it is set.
@@ -88,15 +85,6 @@
     GLES20Canvas(boolean translucent) {
         this(false, translucent);
     }
-
-    /**
-     * Creates a canvas to render into an FBO.
-     */
-    GLES20Canvas(long layer, boolean translucent) {
-        mOpaque = !translucent;
-        mRenderer = nCreateLayerRenderer(layer);
-        setupFinalizer();
-    }
     
     protected GLES20Canvas(boolean record, boolean translucent) {
         mOpaque = !translucent;
@@ -118,12 +106,7 @@
         }
     }
 
-    protected void resetDisplayListRenderer() {
-        nResetDisplayListRenderer(mRenderer);
-    }
-
     private static native long nCreateRenderer();
-    private static native long nCreateLayerRenderer(long layer);
     private static native long nCreateDisplayListRenderer();
     private static native void nResetDisplayListRenderer(long renderer);
     private static native void nDestroyRenderer(long renderer);
@@ -145,13 +128,11 @@
         }
     }
 
-    @Override
-    public void setName(String name) {
-        super.setName(name);
-        nSetName(mRenderer, name);
+    public static void setProperty(String name, String value) {
+        nSetProperty(name, value);
     }
 
-    private static native void nSetName(long renderer, String name);
+    private static native void nSetProperty(String name, String value);
 
     ///////////////////////////////////////////////////////////////////////////
     // Hardware layers
@@ -159,12 +140,12 @@
 
     @Override
     void pushLayerUpdate(HardwareLayer layer) {
-        nPushLayerUpdate(mRenderer, ((GLES20RenderLayer) layer).mLayer);
+        nPushLayerUpdate(mRenderer, layer.getLayer());
     }
 
     @Override
     void cancelLayerUpdate(HardwareLayer layer) {
-        nCancelLayerUpdate(mRenderer, ((GLES20RenderLayer) layer).mLayer);
+        nCancelLayerUpdate(mRenderer, layer.getLayer());
     }
 
     @Override
@@ -177,22 +158,7 @@
         nClearLayerUpdates(mRenderer);
     }
 
-    static native long nCreateTextureLayer(boolean opaque, int[] layerInfo);
-    static native long nCreateLayer(int width, int height, boolean isOpaque, int[] layerInfo);
-    static native boolean nResizeLayer(long layerId, int width, int height, int[] layerInfo);
-    static native void nSetOpaqueLayer(long layerId, boolean isOpaque);
-    static native void nSetLayerPaint(long layerId, long nativePaint);
-    static native void nSetLayerColorFilter(long layerId, long nativeColorFilter);
-    static native void nUpdateTextureLayer(long layerId, int width, int height, boolean opaque,
-            SurfaceTexture surface);
-    static native void nClearLayerTexture(long layerId);
-    static native void nSetTextureLayerTransform(long layerId, long matrix);
-    static native void nDestroyLayer(long layerId);
-    static native void nDestroyLayerDeferred(long layerId);
-    static native void nUpdateRenderLayer(long layerId, long renderer, long displayList,
-            int left, int top, int right, int bottom);
     static native boolean nCopyLayer(long layerId, long bitmap);
-
     private static native void nClearLayerUpdates(long renderer);
     private static native void nFlushLayerUpdates(long renderer);
     private static native void nPushLayerUpdate(long renderer, long layer);
@@ -286,18 +252,6 @@
 
     private static native int nGetStencilSize();
 
-    void setCountOverdrawEnabled(boolean enabled) {
-        nSetCountOverdrawEnabled(mRenderer, enabled);
-    }
-
-    static native void nSetCountOverdrawEnabled(long renderer, boolean enabled);
-
-    float getOverdraw() {
-        return nGetOverdraw(mRenderer);
-    }
-
-    static native float nGetOverdraw(long renderer);
-
     ///////////////////////////////////////////////////////////////////////////
     // Functor
     ///////////////////////////////////////////////////////////////////////////
@@ -402,22 +356,11 @@
     // Display list
     ///////////////////////////////////////////////////////////////////////////
 
-    long getDisplayList(long displayList) {
-        return nGetDisplayList(mRenderer, displayList);
-    }
-
-    private static native long nGetDisplayList(long renderer, long displayList);
+    protected static native long nFinishRecording(long renderer);
 
     @Override
-    void outputDisplayList(DisplayList displayList) {
-        nOutputDisplayList(mRenderer, ((GLES20DisplayList) displayList).getNativeDisplayList());
-    }
-
-    private static native void nOutputDisplayList(long renderer, long displayList);
-
-    @Override
-    public int drawDisplayList(DisplayList displayList, Rect dirty, int flags) {
-        return nDrawDisplayList(mRenderer, ((GLES20DisplayList) displayList).getNativeDisplayList(),
+    public int drawDisplayList(RenderNode displayList, Rect dirty, int flags) {
+        return nDrawDisplayList(mRenderer, displayList.getNativeDisplayList(),
                 dirty, flags);
     }
 
@@ -430,24 +373,11 @@
     
     void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
         layer.setLayerPaint(paint);
-
-        final GLES20Layer glLayer = (GLES20Layer) layer;
-        nDrawLayer(mRenderer, glLayer.getLayer(), x, y);
+        nDrawLayer(mRenderer, layer.getLayer(), x, y);
     }
 
     private static native void nDrawLayer(long renderer, long layer, float x, float y);
 
-    void interrupt() {
-        nInterrupt(mRenderer);
-    }
-    
-    void resume() {
-        nResume(mRenderer);
-    }
-
-    private static native void nInterrupt(long renderer);
-    private static native void nResume(long renderer);
-
     ///////////////////////////////////////////////////////////////////////////
     // Support
     ///////////////////////////////////////////////////////////////////////////
@@ -648,15 +578,8 @@
             return saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom, paint, saveFlags);
         }
 
-        int count;
-        int modifier = paint != null ? setupColorFilter(paint) : MODIFIER_NONE;
-        try {
-            final long nativePaint = paint == null ? 0 : paint.mNativePaint;
-            count = nSaveLayer(mRenderer, nativePaint, saveFlags);
-        } finally {
-            if (modifier != MODIFIER_NONE) nResetModifiers(mRenderer, modifier);
-        }
-        return count;
+        final long nativePaint = paint == null ? 0 : paint.mNativePaint;
+        return nSaveLayer(mRenderer, nativePaint, saveFlags);
     }
 
     private static native int nSaveLayer(long renderer, long paint, int saveFlags);
@@ -665,15 +588,8 @@
     public int saveLayer(float left, float top, float right, float bottom, Paint paint,
             int saveFlags) {
         if (left < right && top < bottom) {
-            int count;
-            int modifier = paint != null ? setupColorFilter(paint) : MODIFIER_NONE;
-            try {
-                final long nativePaint = paint == null ? 0 : paint.mNativePaint;
-                count = nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags);
-            } finally {
-                if (modifier != MODIFIER_NONE) nResetModifiers(mRenderer, modifier);
-            }
-            return count;
+            final long nativePaint = paint == null ? 0 : paint.mNativePaint;
+            return nSaveLayer(mRenderer, left, top, right, bottom, nativePaint, saveFlags);
         }
         return save(saveFlags);
     }
@@ -755,7 +671,7 @@
     @Override
     public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,
             Paint paint) {
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             nDrawArc(mRenderer, oval.left, oval.top, oval.right, oval.bottom,
                     startAngle, sweepAngle, useCenter, paint.mNativePaint);
@@ -778,14 +694,9 @@
         Bitmap bitmap = patch.getBitmap();
         throwIfCannotDraw(bitmap);
         // Shaders are ignored when drawing patches
-        int modifier = paint != null ? setupColorFilter(paint) : MODIFIER_NONE;
-        try {
-            final long nativePaint = paint == null ? 0 : paint.mNativePaint;
-            nDrawPatch(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, patch.mNativeChunk,
-                    dst.left, dst.top, dst.right, dst.bottom, nativePaint);
-        } finally {
-            if (modifier != MODIFIER_NONE) nResetModifiers(mRenderer, modifier);
-        }
+        final long nativePaint = paint == null ? 0 : paint.mNativePaint;
+        nDrawPatch(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, patch.mNativeChunk,
+                dst.left, dst.top, dst.right, dst.bottom, nativePaint);
     }
 
     @Override
@@ -793,14 +704,9 @@
         Bitmap bitmap = patch.getBitmap();
         throwIfCannotDraw(bitmap);
         // Shaders are ignored when drawing patches
-        int modifier = paint != null ? setupColorFilter(paint) : MODIFIER_NONE;
-        try {
-            final long nativePaint = paint == null ? 0 : paint.mNativePaint;
-            nDrawPatch(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, patch.mNativeChunk,
-                    dst.left, dst.top, dst.right, dst.bottom, nativePaint);
-        } finally {
-            if (modifier != MODIFIER_NONE) nResetModifiers(mRenderer, modifier);
-        }
+        final long nativePaint = paint == null ? 0 : paint.mNativePaint;
+        nDrawPatch(mRenderer, bitmap.mNativeBitmap, bitmap.mBuffer, patch.mNativeChunk,
+                dst.left, dst.top, dst.right, dst.bottom, nativePaint);
     }
 
     private static native void nDrawPatch(long renderer, long bitmap, byte[] buffer, long chunk,
@@ -921,14 +827,9 @@
         }
 
         // Shaders are ignored when drawing bitmaps
-        int modifier = paint != null ? setupColorFilter(paint) : MODIFIER_NONE;
-        try {
-            final long nativePaint = paint == null ? 0 : paint.mNativePaint;
-            nDrawBitmap(mRenderer, colors, offset, stride, x, y,
-                    width, height, hasAlpha, nativePaint);
-        } finally {
-            if (modifier != MODIFIER_NONE) nResetModifiers(mRenderer, modifier);
-        }
+        final long nativePaint = paint == null ? 0 : paint.mNativePaint;
+        nDrawBitmap(mRenderer, colors, offset, stride, x, y,
+                width, height, hasAlpha, nativePaint);
     }
 
     private static native void nDrawBitmap(long renderer, int[] colors, int offset, int stride,
@@ -976,7 +877,7 @@
 
     @Override
     public void drawCircle(float cx, float cy, float radius, Paint paint) {
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             nDrawCircle(mRenderer, cx, cy, radius, paint.mNativePaint);
         } finally {
@@ -1016,7 +917,7 @@
         if ((offset | count) < 0 || offset + count > pts.length) {
             throw new IllegalArgumentException("The lines array must contain 4 elements per line.");
         }
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             nDrawLines(mRenderer, pts, offset, count, paint.mNativePaint);
         } finally {
@@ -1034,7 +935,7 @@
 
     @Override
     public void drawOval(RectF oval, Paint paint) {
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             nDrawOval(mRenderer, oval.left, oval.top, oval.right, oval.bottom, paint.mNativePaint);
         } finally {
@@ -1054,7 +955,7 @@
 
     @Override
     public void drawPath(Path path, Paint paint) {
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             if (path.isSimplePath) {
                 if (path.rects != null) {
@@ -1072,7 +973,7 @@
     private static native void nDrawRects(long renderer, long region, long paint);
 
     void drawRects(float[] rects, int count, Paint paint) {
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             nDrawRects(mRenderer, rects, count, paint.mNativePaint);
         } finally {
@@ -1139,7 +1040,7 @@
     public void drawPoints(float[] pts, int offset, int count, Paint paint) {
         if (count < 2) return;
 
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             nDrawPoints(mRenderer, pts, offset, count, paint.mNativePaint);
         } finally {
@@ -1189,7 +1090,7 @@
     @Override
     public void drawRect(float left, float top, float right, float bottom, Paint paint) {
         if (left == right || top == bottom) return;
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
             nDrawRect(mRenderer, left, top, right, bottom, paint.mNativePaint);
         } finally {
@@ -1216,11 +1117,11 @@
     }
 
     @Override
-    public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) {
-        int modifiers = setupModifiers(paint, MODIFIER_COLOR_FILTER | MODIFIER_SHADER);
+    public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry,
+            Paint paint) {
+        int modifiers = setupModifiers(paint, MODIFIER_SHADER);
         try {
-            nDrawRoundRect(mRenderer, rect.left, rect.top, rect.right, rect.bottom,
-                    rx, ry, paint.mNativePaint);
+            nDrawRoundRect(mRenderer, left, top, right, bottom, rx, ry, paint.mNativePaint);
         } finally {
             if (modifiers != MODIFIER_NONE) nResetModifiers(mRenderer, modifiers);
         }
@@ -1397,12 +1298,6 @@
 
     private int setupModifiers(Bitmap b, Paint paint) {
         if (b.getConfig() != Bitmap.Config.ALPHA_8) {
-            final ColorFilter filter = paint.getColorFilter();
-            if (filter != null) {
-                nSetupColorFilter(mRenderer, filter.nativeColorFilter);
-                return MODIFIER_COLOR_FILTER;
-            }
-
             return MODIFIER_NONE;
         } else {
             return setupModifiers(paint);
@@ -1424,12 +1319,6 @@
             modifiers |= MODIFIER_SHADER;
         }
 
-        final ColorFilter filter = paint.getColorFilter();
-        if (filter != null) {
-            nSetupColorFilter(mRenderer, filter.nativeColorFilter);
-            modifiers |= MODIFIER_COLOR_FILTER;
-        }
-
         return modifiers;
     }
 
@@ -1448,26 +1337,10 @@
             modifiers |= MODIFIER_SHADER;
         }
 
-        final ColorFilter filter = paint.getColorFilter();
-        if (filter != null && (flags & MODIFIER_COLOR_FILTER) != 0) {
-            nSetupColorFilter(mRenderer, filter.nativeColorFilter);
-            modifiers |= MODIFIER_COLOR_FILTER;
-        }
-
         return modifiers;
     }
 
-    private int setupColorFilter(Paint paint) {
-        final ColorFilter filter = paint.getColorFilter();
-        if (filter != null) {
-            nSetupColorFilter(mRenderer, filter.nativeColorFilter);
-            return MODIFIER_COLOR_FILTER;
-        }
-        return MODIFIER_NONE;
-    }
-
     private static native void nSetupShader(long renderer, long shader);
-    private static native void nSetupColorFilter(long renderer, long colorFilter);
     private static native void nSetupShadow(long renderer, float radius,
             float dx, float dy, int color);
 
diff --git a/core/java/android/view/GLES20DisplayList.java b/core/java/android/view/GLES20DisplayList.java
deleted file mode 100644
index 7f8b3bd..0000000
--- a/core/java/android/view/GLES20DisplayList.java
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.view;
-
-import android.graphics.Matrix;
-
-import java.util.ArrayList;
-
-/**
- * An implementation of display list for OpenGL ES 2.0.
- */
-class GLES20DisplayList extends DisplayList {
-    private ArrayList<DisplayList> mChildDisplayLists;
-
-    private GLES20RecordingCanvas mCanvas;
-    private boolean mValid;
-
-    // Used for debugging
-    private final String mName;
-
-    // The native display list will be destroyed when this object dies.
-    // DO NOT overwrite this reference once it is set.
-    private DisplayListFinalizer mFinalizer;
-
-    GLES20DisplayList(String name) {
-        mName = name;
-    }
-
-    boolean hasNativeDisplayList() {
-        return mValid && mFinalizer != null;
-    }
-
-    long getNativeDisplayList() {
-        if (!mValid || mFinalizer == null) {
-            throw new IllegalStateException("The display list is not valid.");
-        }
-        return mFinalizer.mNativeDisplayList;
-    }
-
-    @Override
-    public HardwareCanvas start(int width, int height) {
-        if (mCanvas != null) {
-            throw new IllegalStateException("Recording has already started");
-        }
-
-        mValid = false;
-        mCanvas = GLES20RecordingCanvas.obtain(this);
-        mCanvas.start();
-
-        mCanvas.setViewport(width, height);
-        // The dirty rect should always be null for a display list
-        mCanvas.onPreDraw(null);
-
-        return mCanvas;
-    }
-    @Override
-    public void clear() {
-        clearDirty();
-
-        if (mCanvas != null) {
-            mCanvas.recycle();
-            mCanvas = null;
-        }
-        mValid = false;
-
-        clearReferences();
-    }
-
-    void clearReferences() {
-        if (mChildDisplayLists != null) mChildDisplayLists.clear();
-    }
-
-    ArrayList<DisplayList> getChildDisplayLists() {
-        if (mChildDisplayLists == null) mChildDisplayLists = new ArrayList<DisplayList>();
-        return mChildDisplayLists;
-    }
-
-    @Override
-    public void reset() {
-        if (hasNativeDisplayList()) {
-            nReset(mFinalizer.mNativeDisplayList);
-        }
-        clear();
-    }
-
-    @Override
-    public boolean isValid() {
-        return mValid;
-    }
-
-    @Override
-    public void end() {
-        if (mCanvas != null) {
-            mCanvas.onPostDraw();
-            if (mFinalizer != null) {
-                mCanvas.end(mFinalizer.mNativeDisplayList);
-            } else {
-                mFinalizer = new DisplayListFinalizer(mCanvas.end(0));
-                nSetDisplayListName(mFinalizer.mNativeDisplayList, mName);
-            }
-            mCanvas.recycle();
-            mCanvas = null;
-            mValid = true;
-        }
-    }
-
-    @Override
-    public int getSize() {
-        if (mFinalizer == null) return 0;
-        return nGetDisplayListSize(mFinalizer.mNativeDisplayList);
-    }
-
-    private static native void nDestroyDisplayList(long displayList);
-    private static native int nGetDisplayListSize(long displayList);
-    private static native void nSetDisplayListName(long displayList, String name);
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Native View Properties
-    ///////////////////////////////////////////////////////////////////////////
-
-    @Override
-    public void setCaching(boolean caching) {
-        if (hasNativeDisplayList()) {
-            nSetCaching(mFinalizer.mNativeDisplayList, caching);
-        }
-    }
-
-    @Override
-    public void setClipToBounds(boolean clipToBounds) {
-        if (hasNativeDisplayList()) {
-            nSetClipToBounds(mFinalizer.mNativeDisplayList, clipToBounds);
-        }
-    }
-
-    @Override
-    public void setMatrix(Matrix matrix) {
-        if (hasNativeDisplayList()) {
-            nSetStaticMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
-        }
-    }
-
-    @Override
-    public Matrix getMatrix(Matrix matrix) {
-        if (hasNativeDisplayList()) {
-            nGetMatrix(mFinalizer.mNativeDisplayList, matrix.native_instance);
-        }
-        return matrix;
-    }
-
-    @Override
-    public void setAnimationMatrix(Matrix matrix) {
-        if (hasNativeDisplayList()) {
-            nSetAnimationMatrix(mFinalizer.mNativeDisplayList,
-                    (matrix != null) ? matrix.native_instance : 0);
-        }
-    }
-
-    @Override
-    public void setAlpha(float alpha) {
-        if (hasNativeDisplayList()) {
-            nSetAlpha(mFinalizer.mNativeDisplayList, alpha);
-        }
-    }
-
-    @Override
-    public float getAlpha() {
-        if (hasNativeDisplayList()) {
-            return nGetAlpha(mFinalizer.mNativeDisplayList);
-        }
-        return 1.0f;
-    }
-
-    @Override
-    public void setHasOverlappingRendering(boolean hasOverlappingRendering) {
-        if (hasNativeDisplayList()) {
-            nSetHasOverlappingRendering(mFinalizer.mNativeDisplayList, hasOverlappingRendering);
-        }
-    }
-
-    @Override
-    public boolean hasOverlappingRendering() {
-        //noinspection SimplifiableIfStatement
-        if (hasNativeDisplayList()) {
-            return nHasOverlappingRendering(mFinalizer.mNativeDisplayList);
-        }
-        return true;
-    }
-
-    @Override
-    public void setTranslationX(float translationX) {
-        if (hasNativeDisplayList()) {
-            nSetTranslationX(mFinalizer.mNativeDisplayList, translationX);
-        }
-    }
-
-    @Override
-    public float getTranslationX() {
-        if (hasNativeDisplayList()) {
-            return nGetTranslationX(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setTranslationY(float translationY) {
-        if (hasNativeDisplayList()) {
-            nSetTranslationY(mFinalizer.mNativeDisplayList, translationY);
-        }
-    }
-
-    @Override
-    public float getTranslationY() {
-        if (hasNativeDisplayList()) {
-            return nGetTranslationY(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setRotation(float rotation) {
-        if (hasNativeDisplayList()) {
-            nSetRotation(mFinalizer.mNativeDisplayList, rotation);
-        }
-    }
-
-    @Override
-    public float getRotation() {
-        if (hasNativeDisplayList()) {
-            return nGetRotation(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setRotationX(float rotationX) {
-        if (hasNativeDisplayList()) {
-            nSetRotationX(mFinalizer.mNativeDisplayList, rotationX);
-        }
-    }
-
-    @Override
-    public float getRotationX() {
-        if (hasNativeDisplayList()) {
-            return nGetRotationX(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setRotationY(float rotationY) {
-        if (hasNativeDisplayList()) {
-            nSetRotationY(mFinalizer.mNativeDisplayList, rotationY);
-        }
-    }
-
-    @Override
-    public float getRotationY() {
-        if (hasNativeDisplayList()) {
-            return nGetRotationY(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setScaleX(float scaleX) {
-        if (hasNativeDisplayList()) {
-            nSetScaleX(mFinalizer.mNativeDisplayList, scaleX);
-        }
-    }
-
-    @Override
-    public float getScaleX() {
-        if (hasNativeDisplayList()) {
-            return nGetScaleX(mFinalizer.mNativeDisplayList);
-        }
-        return 1.0f;
-    }
-
-    @Override
-    public void setScaleY(float scaleY) {
-        if (hasNativeDisplayList()) {
-            nSetScaleY(mFinalizer.mNativeDisplayList, scaleY);
-        }
-    }
-
-    @Override
-    public float getScaleY() {
-        if (hasNativeDisplayList()) {
-            return nGetScaleY(mFinalizer.mNativeDisplayList);
-        }
-        return 1.0f;
-    }
-
-    @Override
-    public void setTransformationInfo(float alpha, float translationX, float translationY,
-            float rotation, float rotationX, float rotationY, float scaleX, float scaleY) {
-        if (hasNativeDisplayList()) {
-            nSetTransformationInfo(mFinalizer.mNativeDisplayList, alpha, translationX, translationY,
-                    rotation, rotationX, rotationY, scaleX, scaleY);
-        }
-    }
-
-    @Override
-    public void setPivotX(float pivotX) {
-        if (hasNativeDisplayList()) {
-            nSetPivotX(mFinalizer.mNativeDisplayList, pivotX);
-        }
-    }
-
-    @Override
-    public float getPivotX() {
-        if (hasNativeDisplayList()) {
-            return nGetPivotX(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setPivotY(float pivotY) {
-        if (hasNativeDisplayList()) {
-            nSetPivotY(mFinalizer.mNativeDisplayList, pivotY);
-        }
-    }
-
-    @Override
-    public float getPivotY() {
-        if (hasNativeDisplayList()) {
-            return nGetPivotY(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setCameraDistance(float distance) {
-        if (hasNativeDisplayList()) {
-            nSetCameraDistance(mFinalizer.mNativeDisplayList, distance);
-        }
-    }
-
-    @Override
-    public float getCameraDistance() {
-        if (hasNativeDisplayList()) {
-            return nGetCameraDistance(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setLeft(int left) {
-        if (hasNativeDisplayList()) {
-            nSetLeft(mFinalizer.mNativeDisplayList, left);
-        }
-    }
-
-    @Override
-    public float getLeft() {
-        if (hasNativeDisplayList()) {
-            return nGetLeft(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setTop(int top) {
-        if (hasNativeDisplayList()) {
-            nSetTop(mFinalizer.mNativeDisplayList, top);
-        }
-    }
-
-    @Override
-    public float getTop() {
-        if (hasNativeDisplayList()) {
-            return nGetTop(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setRight(int right) {
-        if (hasNativeDisplayList()) {
-            nSetRight(mFinalizer.mNativeDisplayList, right);
-        }
-    }
-
-    @Override
-    public float getRight() {
-        if (hasNativeDisplayList()) {
-            return nGetRight(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setBottom(int bottom) {
-        if (hasNativeDisplayList()) {
-            nSetBottom(mFinalizer.mNativeDisplayList, bottom);
-        }
-    }
-
-    @Override
-    public float getBottom() {
-        if (hasNativeDisplayList()) {
-            return nGetBottom(mFinalizer.mNativeDisplayList);
-        }
-        return 0.0f;
-    }
-
-    @Override
-    public void setLeftTopRightBottom(int left, int top, int right, int bottom) {
-        if (hasNativeDisplayList()) {
-            nSetLeftTopRightBottom(mFinalizer.mNativeDisplayList, left, top, right, bottom);
-        }
-    }
-
-    @Override
-    public void offsetLeftAndRight(float offset) {
-        if (hasNativeDisplayList()) {
-            nOffsetLeftAndRight(mFinalizer.mNativeDisplayList, offset);
-        }
-    }
-
-    @Override
-    public void offsetTopAndBottom(float offset) {
-        if (hasNativeDisplayList()) {
-            nOffsetTopAndBottom(mFinalizer.mNativeDisplayList, offset);
-        }
-    }
-
-    private static native void nReset(long displayList);
-    private static native void nOffsetTopAndBottom(long displayList, float offset);
-    private static native void nOffsetLeftAndRight(long displayList, float offset);
-    private static native void nSetLeftTopRightBottom(long displayList, int left, int top,
-            int right, int bottom);
-    private static native void nSetBottom(long displayList, int bottom);
-    private static native void nSetRight(long displayList, int right);
-    private static native void nSetTop(long displayList, int top);
-    private static native void nSetLeft(long displayList, int left);
-    private static native void nSetCameraDistance(long displayList, float distance);
-    private static native void nSetPivotY(long displayList, float pivotY);
-    private static native void nSetPivotX(long displayList, float pivotX);
-    private static native void nSetCaching(long displayList, boolean caching);
-    private static native void nSetClipToBounds(long displayList, boolean clipToBounds);
-    private static native void nSetAlpha(long displayList, float alpha);
-    private static native void nSetHasOverlappingRendering(long displayList,
-            boolean hasOverlappingRendering);
-    private static native void nSetTranslationX(long displayList, float translationX);
-    private static native void nSetTranslationY(long displayList, float translationY);
-    private static native void nSetRotation(long displayList, float rotation);
-    private static native void nSetRotationX(long displayList, float rotationX);
-    private static native void nSetRotationY(long displayList, float rotationY);
-    private static native void nSetScaleX(long displayList, float scaleX);
-    private static native void nSetScaleY(long displayList, float scaleY);
-    private static native void nSetTransformationInfo(long displayList, float alpha,
-            float translationX, float translationY, float rotation, float rotationX,
-            float rotationY, float scaleX, float scaleY);
-    private static native void nSetStaticMatrix(long displayList, long nativeMatrix);
-    private static native void nSetAnimationMatrix(long displayList, long animationMatrix);
-
-    private static native boolean nHasOverlappingRendering(long displayList);
-    private static native void nGetMatrix(long displayList, long matrix);
-    private static native float nGetAlpha(long displayList);
-    private static native float nGetLeft(long displayList);
-    private static native float nGetTop(long displayList);
-    private static native float nGetRight(long displayList);
-    private static native float nGetBottom(long displayList);
-    private static native float nGetCameraDistance(long displayList);
-    private static native float nGetScaleX(long displayList);
-    private static native float nGetScaleY(long displayList);
-    private static native float nGetTranslationX(long displayList);
-    private static native float nGetTranslationY(long displayList);
-    private static native float nGetRotation(long displayList);
-    private static native float nGetRotationX(long displayList);
-    private static native float nGetRotationY(long displayList);
-    private static native float nGetPivotX(long displayList);
-    private static native float nGetPivotY(long displayList);
-
-    ///////////////////////////////////////////////////////////////////////////
-    // Finalization
-    ///////////////////////////////////////////////////////////////////////////
-
-    private static class DisplayListFinalizer {
-        final long mNativeDisplayList;
-
-        public DisplayListFinalizer(long nativeDisplayList) {
-            mNativeDisplayList = nativeDisplayList;
-        }
-
-        @Override
-        protected void finalize() throws Throwable {
-            try {
-                nDestroyDisplayList(mNativeDisplayList);
-            } finally {
-                super.finalize();
-            }
-        }
-    }
-}
diff --git a/core/java/android/view/GLES20Layer.java b/core/java/android/view/GLES20Layer.java
deleted file mode 100644
index 37154eb..0000000
--- a/core/java/android/view/GLES20Layer.java
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.view;
-
-import android.graphics.Bitmap;
-import android.graphics.Paint;
-
-/**
- * An OpenGL ES 2.0 implementation of {@link HardwareLayer}.
- */
-abstract class GLES20Layer extends HardwareLayer {
-    long mLayer;
-    Finalizer mFinalizer;
-
-    GLES20Layer() {
-    }
-
-    GLES20Layer(int width, int height, boolean opaque) {
-        super(width, height, opaque);
-    }
-
-    /**
-     * Returns the native layer object used to render this layer.
-     * 
-     * @return A pointer to the native layer object, or 0 if the object is NULL
-     */
-    public long getLayer() {
-        return mLayer;
-    }
-
-    @Override
-    void setLayerPaint(Paint paint) {
-        if (paint != null) {
-            GLES20Canvas.nSetLayerPaint(mLayer, paint.mNativePaint);
-            GLES20Canvas.nSetLayerColorFilter(mLayer, paint.getColorFilter() != null ?
-                    paint.getColorFilter().nativeColorFilter : 0);
-        }
-    }
-
-    @Override
-    public boolean copyInto(Bitmap bitmap) {
-        return GLES20Canvas.nCopyLayer(mLayer, bitmap.mNativeBitmap);
-    }
-
-    @Override
-    public void destroy() {
-        if (mDisplayList != null) {
-            mDisplayList.reset();
-        }
-        if (mFinalizer != null) {
-            mFinalizer.destroy();
-            mFinalizer = null;
-        }
-        mLayer = 0;
-    }
-
-    @Override
-    void clearStorage() {
-        if (mLayer != 0) GLES20Canvas.nClearLayerTexture(mLayer);
-    }
-
-    static class Finalizer {
-        private long mLayerId;
-
-        public Finalizer(long layerId) {
-            mLayerId = layerId;
-        }
-
-        @Override
-        protected void finalize() throws Throwable {
-            try {
-                if (mLayerId != 0) {
-                    GLES20Canvas.nDestroyLayerDeferred(mLayerId);
-                }
-            } finally {
-                super.finalize();
-            }
-        }
-
-        void destroy() {
-            GLES20Canvas.nDestroyLayer(mLayerId);
-            mLayerId = 0;
-        }
-    }
-}
diff --git a/core/java/android/view/GLES20RecordingCanvas.java b/core/java/android/view/GLES20RecordingCanvas.java
index e3e1c76..2b29e5c 100644
--- a/core/java/android/view/GLES20RecordingCanvas.java
+++ b/core/java/android/view/GLES20RecordingCanvas.java
@@ -16,7 +16,6 @@
 
 package android.view;
 
-import android.graphics.Rect;
 import android.util.Pools.SynchronizedPool;
 
 /**
@@ -33,39 +32,23 @@
     private static final SynchronizedPool<GLES20RecordingCanvas> sPool =
             new SynchronizedPool<GLES20RecordingCanvas>(POOL_LIMIT);
 
-    private GLES20DisplayList mDisplayList;
-
     private GLES20RecordingCanvas() {
         super(true, true);
     }
 
-    static GLES20RecordingCanvas obtain(GLES20DisplayList displayList) {
+    static GLES20RecordingCanvas obtain() {
         GLES20RecordingCanvas canvas = sPool.acquire();
         if (canvas == null) {
             canvas = new GLES20RecordingCanvas();
         }
-        canvas.mDisplayList = displayList;
         return canvas;
     }
 
     void recycle() {
-        mDisplayList = null;
-        resetDisplayListRenderer();
         sPool.release(this);
     }
 
-    void start() {
-        mDisplayList.clearReferences();
-    }
-
-    long end(long nativeDisplayList) {
-        return getDisplayList(nativeDisplayList);
-    }
-
-    @Override
-    public int drawDisplayList(DisplayList displayList, Rect dirty, int flags) {
-        int status = super.drawDisplayList(displayList, dirty, flags);
-        mDisplayList.getChildDisplayLists().add(displayList);
-        return status;
+    long finishRecording() {
+        return nFinishRecording(mRenderer);
     }
 }
diff --git a/core/java/android/view/GLES20RenderLayer.java b/core/java/android/view/GLES20RenderLayer.java
deleted file mode 100644
index 68ba77c..0000000
--- a/core/java/android/view/GLES20RenderLayer.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.view;
-
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Rect;
-
-/**
- * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. This
- * implementation can be used a rendering target. It generates a
- * {@link Canvas} that can be used to render into an FBO using OpenGL.
- */
-class GLES20RenderLayer extends GLES20Layer {
-    private int mLayerWidth;
-    private int mLayerHeight;
-
-    private final GLES20Canvas mCanvas;
-
-    GLES20RenderLayer(int width, int height, boolean isOpaque) {
-        super(width, height, isOpaque);
-
-        int[] layerInfo = new int[2];
-        mLayer = GLES20Canvas.nCreateLayer(width, height, isOpaque, layerInfo);
-        if (mLayer != 0) {
-            mLayerWidth = layerInfo[0];
-            mLayerHeight = layerInfo[1];
-
-            mCanvas = new GLES20Canvas(mLayer, !isOpaque);
-            mFinalizer = new Finalizer(mLayer);
-        } else {
-            mCanvas = null;
-            mFinalizer = null;
-        }
-    }
-
-    @Override
-    boolean isValid() {
-        return mLayer != 0 && mLayerWidth > 0 && mLayerHeight > 0;
-    }
-
-    @Override
-    boolean resize(int width, int height) {
-        if (!isValid() || width <= 0 || height <= 0) return false;
-
-        mWidth = width;
-        mHeight = height;
-        
-        if (width != mLayerWidth || height != mLayerHeight) {
-            int[] layerInfo = new int[2];
-
-            if (GLES20Canvas.nResizeLayer(mLayer, width, height, layerInfo)) {
-                mLayerWidth = layerInfo[0];
-                mLayerHeight = layerInfo[1];
-            } else {
-                // Failure: not enough GPU resources for requested size
-                mLayer = 0;
-                mLayerWidth = 0;
-                mLayerHeight = 0;
-            }
-        }
-        return isValid();
-    }
-
-    @Override
-    void setOpaque(boolean isOpaque) {
-        mOpaque = isOpaque;
-        GLES20Canvas.nSetOpaqueLayer(mLayer, isOpaque);
-    }
-
-    @Override
-    HardwareCanvas getCanvas() {
-        return mCanvas;
-    }
-
-    @Override
-    void end(Canvas currentCanvas) {
-        HardwareCanvas canvas = getCanvas();
-        if (canvas != null) {
-            canvas.onPostDraw();
-        }
-        if (currentCanvas instanceof GLES20Canvas) {
-            ((GLES20Canvas) currentCanvas).resume();
-        }
-    }
-
-    @Override
-    HardwareCanvas start(Canvas currentCanvas) {
-        return start(currentCanvas, null);
-    }
-
-    @Override
-    HardwareCanvas start(Canvas currentCanvas, Rect dirty) {
-        if (currentCanvas instanceof GLES20Canvas) {
-            ((GLES20Canvas) currentCanvas).interrupt();
-        }
-        HardwareCanvas canvas = getCanvas();
-        canvas.setViewport(mWidth, mHeight);
-        canvas.onPreDraw(dirty);
-        return canvas;
-    }
-
-    /**
-     * Ignored
-     */
-    @Override
-    void setTransform(Matrix matrix) {
-    }
-
-    @Override
-    void redrawLater(DisplayList displayList, Rect dirtyRect) {
-        GLES20Canvas.nUpdateRenderLayer(mLayer, mCanvas.getRenderer(),
-                ((GLES20DisplayList) displayList).getNativeDisplayList(),
-                dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
-    }
-}
diff --git a/core/java/android/view/GLES20TextureLayer.java b/core/java/android/view/GLES20TextureLayer.java
deleted file mode 100644
index bb5a6eb..0000000
--- a/core/java/android/view/GLES20TextureLayer.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.view;
-
-import android.graphics.Canvas;
-import android.graphics.Matrix;
-import android.graphics.Rect;
-import android.graphics.SurfaceTexture;
-
-/**
- * An OpenGL ES 2.0 implementation of {@link HardwareLayer}. This
- * implementation can be used as a texture. Rendering into this
- * layer is not controlled by a {@link HardwareCanvas}.
- */
-class GLES20TextureLayer extends GLES20Layer {
-    private int mTexture;
-    private SurfaceTexture mSurface;
-
-    GLES20TextureLayer(boolean isOpaque) {
-        int[] layerInfo = new int[2];
-        mLayer = GLES20Canvas.nCreateTextureLayer(isOpaque, layerInfo);
-
-        if (mLayer != 0) {
-            mTexture = layerInfo[0];
-            mFinalizer = new Finalizer(mLayer);
-        } else {
-            mFinalizer = null;
-        }
-    }
-
-    @Override
-    boolean isValid() {
-        return mLayer != 0 && mTexture != 0;
-    }
-
-    @Override
-    boolean resize(int width, int height) {
-        return isValid();
-    }
-
-    @Override
-    HardwareCanvas getCanvas() {
-        return null;
-    }
-
-    @Override
-    HardwareCanvas start(Canvas currentCanvas) {
-        return null;
-    }
-
-    @Override
-    HardwareCanvas start(Canvas currentCanvas, Rect dirty) {
-        return null;
-    }
-
-    @Override
-    void end(Canvas currentCanvas) {
-    }
-
-    SurfaceTexture getSurfaceTexture() {
-        if (mSurface == null) {
-            mSurface = new SurfaceTexture(mTexture);
-        }
-        return mSurface;
-    }
-
-    void setSurfaceTexture(SurfaceTexture surfaceTexture) {
-        if (mSurface != null) {
-            mSurface.release();
-        }
-        mSurface = surfaceTexture;
-        mSurface.attachToGLContext(mTexture);
-    }
-
-    @Override
-    void update(int width, int height, boolean isOpaque) {
-        super.update(width, height, isOpaque);
-        GLES20Canvas.nUpdateTextureLayer(mLayer, width, height, isOpaque, mSurface);
-    }
-
-    @Override
-    void setOpaque(boolean isOpaque) {
-        throw new UnsupportedOperationException("Use update(int, int, boolean) instead");
-    }
-
-    @Override
-    void setTransform(Matrix matrix) {
-        GLES20Canvas.nSetTextureLayerTransform(mLayer, matrix.native_instance);
-    }
-
-    @Override
-    void redrawLater(DisplayList displayList, Rect dirtyRect) {
-    }
-}
diff --git a/core/java/android/view/GLRenderer.java b/core/java/android/view/GLRenderer.java
new file mode 100644
index 0000000..97339cc
--- /dev/null
+++ b/core/java/android/view/GLRenderer.java
@@ -0,0 +1,1566 @@
+/*
+ * Copyright (C) 2013 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 android.view;
+
+import static javax.microedition.khronos.egl.EGL10.EGL_ALPHA_SIZE;
+import static javax.microedition.khronos.egl.EGL10.EGL_BAD_NATIVE_WINDOW;
+import static javax.microedition.khronos.egl.EGL10.EGL_BLUE_SIZE;
+import static javax.microedition.khronos.egl.EGL10.EGL_CONFIG_CAVEAT;
+import static javax.microedition.khronos.egl.EGL10.EGL_DEFAULT_DISPLAY;
+import static javax.microedition.khronos.egl.EGL10.EGL_DEPTH_SIZE;
+import static javax.microedition.khronos.egl.EGL10.EGL_DRAW;
+import static javax.microedition.khronos.egl.EGL10.EGL_GREEN_SIZE;
+import static javax.microedition.khronos.egl.EGL10.EGL_HEIGHT;
+import static javax.microedition.khronos.egl.EGL10.EGL_NONE;
+import static javax.microedition.khronos.egl.EGL10.EGL_NO_CONTEXT;
+import static javax.microedition.khronos.egl.EGL10.EGL_NO_DISPLAY;
+import static javax.microedition.khronos.egl.EGL10.EGL_NO_SURFACE;
+import static javax.microedition.khronos.egl.EGL10.EGL_RED_SIZE;
+import static javax.microedition.khronos.egl.EGL10.EGL_RENDERABLE_TYPE;
+import static javax.microedition.khronos.egl.EGL10.EGL_SAMPLES;
+import static javax.microedition.khronos.egl.EGL10.EGL_SAMPLE_BUFFERS;
+import static javax.microedition.khronos.egl.EGL10.EGL_STENCIL_SIZE;
+import static javax.microedition.khronos.egl.EGL10.EGL_SUCCESS;
+import static javax.microedition.khronos.egl.EGL10.EGL_SURFACE_TYPE;
+import static javax.microedition.khronos.egl.EGL10.EGL_WIDTH;
+import static javax.microedition.khronos.egl.EGL10.EGL_WINDOW_BIT;
+
+import android.content.ComponentCallbacks2;
+import android.graphics.Bitmap;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.SurfaceTexture;
+import android.opengl.EGL14;
+import android.opengl.GLUtils;
+import android.opengl.ManagedEGLContext;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.os.SystemProperties;
+import android.os.Trace;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.Surface.OutOfResourcesException;
+
+import com.google.android.gles_jni.EGLImpl;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.locks.ReentrantLock;
+
+import javax.microedition.khronos.egl.EGL10;
+import javax.microedition.khronos.egl.EGL11;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.egl.EGLContext;
+import javax.microedition.khronos.egl.EGLDisplay;
+import javax.microedition.khronos.egl.EGLSurface;
+import javax.microedition.khronos.opengles.GL;
+
+/**
+ * Hardware renderer using OpenGL
+ *
+ * @hide
+ */
+public class GLRenderer extends HardwareRenderer {
+    static final int SURFACE_STATE_ERROR = 0;
+    static final int SURFACE_STATE_SUCCESS = 1;
+    static final int SURFACE_STATE_UPDATED = 2;
+
+    static final int FUNCTOR_PROCESS_DELAY = 4;
+
+    /**
+     * Number of frames to profile.
+     */
+    private static final int PROFILE_MAX_FRAMES = 128;
+
+    /**
+     * Number of floats per profiled frame.
+     */
+    private static final int PROFILE_FRAME_DATA_COUNT = 3;
+
+    private static final int PROFILE_DRAW_MARGIN = 0;
+    private static final int PROFILE_DRAW_WIDTH = 3;
+    private static final int[] PROFILE_DRAW_COLORS = { 0xcf3e66cc, 0xcfdc3912, 0xcfe69800 };
+    private static final int PROFILE_DRAW_CURRENT_FRAME_COLOR = 0xcf5faa4d;
+    private static final int PROFILE_DRAW_THRESHOLD_COLOR = 0xff5faa4d;
+    private static final int PROFILE_DRAW_THRESHOLD_STROKE_WIDTH = 2;
+    private static final int PROFILE_DRAW_DP_PER_MS = 7;
+
+    private static final String[] VISUALIZERS = {
+            PROFILE_PROPERTY_VISUALIZE_BARS,
+            PROFILE_PROPERTY_VISUALIZE_LINES
+    };
+
+    private static final String[] OVERDRAW = {
+            OVERDRAW_PROPERTY_SHOW,
+    };
+    private static final int GL_VERSION = 2;
+
+    static EGL10 sEgl;
+    static EGLDisplay sEglDisplay;
+    static EGLConfig sEglConfig;
+    static final Object[] sEglLock = new Object[0];
+    int mWidth = -1, mHeight = -1;
+
+    static final ThreadLocal<ManagedEGLContext> sEglContextStorage
+            = new ThreadLocal<ManagedEGLContext>();
+
+    EGLContext mEglContext;
+    Thread mEglThread;
+
+    EGLSurface mEglSurface;
+
+    GL mGl;
+    HardwareCanvas mCanvas;
+
+    String mName;
+
+    long mFrameCount;
+    Paint mDebugPaint;
+
+    static boolean sDirtyRegions;
+    static final boolean sDirtyRegionsRequested;
+    static {
+        String dirtyProperty = SystemProperties.get(RENDER_DIRTY_REGIONS_PROPERTY, "true");
+        //noinspection PointlessBooleanExpression,ConstantConditions
+        sDirtyRegions = "true".equalsIgnoreCase(dirtyProperty);
+        sDirtyRegionsRequested = sDirtyRegions;
+    }
+
+    boolean mDirtyRegionsEnabled;
+    boolean mUpdateDirtyRegions;
+
+    boolean mProfileEnabled;
+    int mProfileVisualizerType = -1;
+    float[] mProfileData;
+    ReentrantLock mProfileLock;
+    int mProfileCurrentFrame = -PROFILE_FRAME_DATA_COUNT;
+
+    GraphDataProvider mDebugDataProvider;
+    float[][] mProfileShapes;
+    Paint mProfilePaint;
+
+    boolean mDebugDirtyRegions;
+    int mDebugOverdraw = -1;
+
+    final boolean mTranslucent;
+
+    private boolean mDestroyed;
+
+    private final Rect mRedrawClip = new Rect();
+
+    private final int[] mSurfaceSize = new int[2];
+    private final FunctorsRunnable mFunctorsRunnable = new FunctorsRunnable();
+
+    private long mDrawDelta = Long.MAX_VALUE;
+
+    private GLES20Canvas mGlCanvas;
+
+    private DisplayMetrics mDisplayMetrics;
+
+    private static EGLSurface sPbuffer;
+    private static final Object[] sPbufferLock = new Object[0];
+
+    private List<HardwareLayer> mAttachedLayers = new ArrayList<HardwareLayer>();
+
+    private static class GLRendererEglContext extends ManagedEGLContext {
+        final Handler mHandler = new Handler();
+
+        public GLRendererEglContext(EGLContext context) {
+            super(context);
+        }
+
+        @Override
+        public void onTerminate(final EGLContext eglContext) {
+            // Make sure we do this on the correct thread.
+            if (mHandler.getLooper() != Looper.myLooper()) {
+                mHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        onTerminate(eglContext);
+                    }
+                });
+                return;
+            }
+
+            synchronized (sEglLock) {
+                if (sEgl == null) return;
+
+                if (EGLImpl.getInitCount(sEglDisplay) == 1) {
+                    usePbufferSurface(eglContext);
+                    GLES20Canvas.terminateCaches();
+
+                    sEgl.eglDestroyContext(sEglDisplay, eglContext);
+                    sEglContextStorage.set(null);
+                    sEglContextStorage.remove();
+
+                    sEgl.eglDestroySurface(sEglDisplay, sPbuffer);
+                    sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE,
+                            EGL_NO_SURFACE, EGL_NO_CONTEXT);
+
+                    sEgl.eglReleaseThread();
+                    sEgl.eglTerminate(sEglDisplay);
+
+                    sEgl = null;
+                    sEglDisplay = null;
+                    sEglConfig = null;
+                    sPbuffer = null;
+                }
+            }
+        }
+    }
+
+    HardwareCanvas createCanvas() {
+        return mGlCanvas = new GLES20Canvas(mTranslucent);
+    }
+
+    ManagedEGLContext createManagedContext(EGLContext eglContext) {
+        return new GLRendererEglContext(mEglContext);
+    }
+
+    int[] getConfig(boolean dirtyRegions) {
+        //noinspection PointlessBooleanExpression,ConstantConditions
+        final int stencilSize = GLES20Canvas.getStencilSize();
+        final int swapBehavior = dirtyRegions ? EGL14.EGL_SWAP_BEHAVIOR_PRESERVED_BIT : 0;
+
+        return new int[] {
+                EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT,
+                EGL_RED_SIZE, 8,
+                EGL_GREEN_SIZE, 8,
+                EGL_BLUE_SIZE, 8,
+                EGL_ALPHA_SIZE, 8,
+                EGL_DEPTH_SIZE, 0,
+                EGL_CONFIG_CAVEAT, EGL_NONE,
+                EGL_STENCIL_SIZE, stencilSize,
+                EGL_SURFACE_TYPE, EGL_WINDOW_BIT | swapBehavior,
+                EGL_NONE
+        };
+    }
+
+    void initCaches() {
+        if (GLES20Canvas.initCaches()) {
+            // Caches were (re)initialized, rebind atlas
+            initAtlas();
+        }
+    }
+
+    void initAtlas() {
+        IBinder binder = ServiceManager.getService("assetatlas");
+        if (binder == null) return;
+
+        IAssetAtlas atlas = IAssetAtlas.Stub.asInterface(binder);
+        try {
+            if (atlas.isCompatible(android.os.Process.myPpid())) {
+                GraphicBuffer buffer = atlas.getBuffer();
+                if (buffer != null) {
+                    long[] map = atlas.getMap();
+                    if (map != null) {
+                        GLES20Canvas.initAtlas(buffer, map);
+                    }
+                    // If IAssetAtlas is not the same class as the IBinder
+                    // we are using a remote service and we can safely
+                    // destroy the graphic buffer
+                    if (atlas.getClass() != binder.getClass()) {
+                        buffer.destroy();
+                    }
+                }
+            }
+        } catch (RemoteException e) {
+            Log.w(LOG_TAG, "Could not acquire atlas", e);
+        }
+    }
+
+    boolean canDraw() {
+        return mGl != null && mCanvas != null && mGlCanvas != null;
+    }
+
+    int onPreDraw(Rect dirty) {
+        return mGlCanvas.onPreDraw(dirty);
+    }
+
+    void onPostDraw() {
+        mGlCanvas.onPostDraw();
+    }
+
+    void drawProfileData(View.AttachInfo attachInfo) {
+        if (mDebugDataProvider != null) {
+            final GraphDataProvider provider = mDebugDataProvider;
+            initProfileDrawData(attachInfo, provider);
+
+            final int height = provider.getVerticalUnitSize();
+            final int margin = provider.getHorizontaUnitMargin();
+            final int width = provider.getHorizontalUnitSize();
+
+            int x = 0;
+            int count = 0;
+            int current = 0;
+
+            final float[] data = provider.getData();
+            final int elementCount = provider.getElementCount();
+            final int graphType = provider.getGraphType();
+
+            int totalCount = provider.getFrameCount() * elementCount;
+            if (graphType == GraphDataProvider.GRAPH_TYPE_LINES) {
+                totalCount -= elementCount;
+            }
+
+            for (int i = 0; i < totalCount; i += elementCount) {
+                if (data[i] < 0.0f) break;
+
+                int index = count * 4;
+                if (i == provider.getCurrentFrame() * elementCount) current = index;
+
+                x += margin;
+                int x2 = x + width;
+
+                int y2 = mHeight;
+                int y1 = (int) (y2 - data[i] * height);
+
+                switch (graphType) {
+                    case GraphDataProvider.GRAPH_TYPE_BARS: {
+                        for (int j = 0; j < elementCount; j++) {
+                            //noinspection MismatchedReadAndWriteOfArray
+                            final float[] r = mProfileShapes[j];
+                            r[index] = x;
+                            r[index + 1] = y1;
+                            r[index + 2] = x2;
+                            r[index + 3] = y2;
+
+                            y2 = y1;
+                            if (j < elementCount - 1) {
+                                y1 = (int) (y2 - data[i + j + 1] * height);
+                            }
+                        }
+                    } break;
+                    case GraphDataProvider.GRAPH_TYPE_LINES: {
+                        for (int j = 0; j < elementCount; j++) {
+                            //noinspection MismatchedReadAndWriteOfArray
+                            final float[] r = mProfileShapes[j];
+                            r[index] = (x + x2) * 0.5f;
+                            r[index + 1] = index == 0 ? y1 : r[index - 1];
+                            r[index + 2] = r[index] + width;
+                            r[index + 3] = y1;
+
+                            y2 = y1;
+                            if (j < elementCount - 1) {
+                                y1 = (int) (y2 - data[i + j + 1] * height);
+                            }
+                        }
+                    } break;
+                }
+
+
+                x += width;
+                count++;
+            }
+
+            x += margin;
+
+            drawGraph(graphType, count);
+            drawCurrentFrame(graphType, current);
+            drawThreshold(x, height);
+        }
+    }
+
+    private void drawGraph(int graphType, int count) {
+        for (int i = 0; i < mProfileShapes.length; i++) {
+            mDebugDataProvider.setupGraphPaint(mProfilePaint, i);
+            switch (graphType) {
+                case GraphDataProvider.GRAPH_TYPE_BARS:
+                    mGlCanvas.drawRects(mProfileShapes[i], count * 4, mProfilePaint);
+                    break;
+                case GraphDataProvider.GRAPH_TYPE_LINES:
+                    mGlCanvas.drawLines(mProfileShapes[i], 0, count * 4, mProfilePaint);
+                    break;
+            }
+        }
+    }
+
+    private void drawCurrentFrame(int graphType, int index) {
+        if (index >= 0) {
+            mDebugDataProvider.setupCurrentFramePaint(mProfilePaint);
+            switch (graphType) {
+                case GraphDataProvider.GRAPH_TYPE_BARS:
+                    mGlCanvas.drawRect(mProfileShapes[2][index], mProfileShapes[2][index + 1],
+                            mProfileShapes[2][index + 2], mProfileShapes[0][index + 3],
+                            mProfilePaint);
+                    break;
+                case GraphDataProvider.GRAPH_TYPE_LINES:
+                    mGlCanvas.drawLine(mProfileShapes[2][index], mProfileShapes[2][index + 1],
+                            mProfileShapes[2][index], mHeight, mProfilePaint);
+                    break;
+            }
+        }
+    }
+
+    private void drawThreshold(int x, int height) {
+        float threshold = mDebugDataProvider.getThreshold();
+        if (threshold > 0.0f) {
+            mDebugDataProvider.setupThresholdPaint(mProfilePaint);
+            int y = (int) (mHeight - threshold * height);
+            mGlCanvas.drawLine(0.0f, y, x, y, mProfilePaint);
+        }
+    }
+
+    private void initProfileDrawData(View.AttachInfo attachInfo, GraphDataProvider provider) {
+        if (mProfileShapes == null) {
+            final int elementCount = provider.getElementCount();
+            final int frameCount = provider.getFrameCount();
+
+            mProfileShapes = new float[elementCount][];
+            for (int i = 0; i < elementCount; i++) {
+                mProfileShapes[i] = new float[frameCount * 4];
+            }
+
+            mProfilePaint = new Paint();
+        }
+
+        mProfilePaint.reset();
+        if (provider.getGraphType() == GraphDataProvider.GRAPH_TYPE_LINES) {
+            mProfilePaint.setAntiAlias(true);
+        }
+
+        if (mDisplayMetrics == null) {
+            mDisplayMetrics = new DisplayMetrics();
+        }
+
+        attachInfo.mDisplay.getMetrics(mDisplayMetrics);
+        provider.prepare(mDisplayMetrics);
+    }
+
+    @Override
+    void destroy(boolean full) {
+        try {
+            if (full && mCanvas != null) {
+                mCanvas = null;
+            }
+
+            if (!isEnabled() || mDestroyed) {
+                setEnabled(false);
+                return;
+            }
+
+            destroySurface();
+            setEnabled(false);
+
+            mDestroyed = true;
+            mGl = null;
+        } finally {
+            if (full && mGlCanvas != null) {
+                mGlCanvas = null;
+            }
+        }
+    }
+
+    @Override
+    void pushLayerUpdate(HardwareLayer layer) {
+        mGlCanvas.pushLayerUpdate(layer);
+    }
+
+    @Override
+    void flushLayerUpdates() {
+        if (validate()) {
+            flushLayerChanges();
+            mGlCanvas.flushLayerUpdates();
+        }
+    }
+
+    @Override
+    HardwareLayer createTextureLayer() {
+        validate();
+        return HardwareLayer.createTextureLayer(this);
+    }
+
+    @Override
+    public HardwareLayer createDisplayListLayer(int width, int height) {
+        validate();
+        return HardwareLayer.createDisplayListLayer(this, width, height);
+    }
+
+    @Override
+    void onLayerCreated(HardwareLayer hardwareLayer) {
+        mAttachedLayers.add(hardwareLayer);
+    }
+
+    boolean hasContext() {
+        return sEgl != null && mEglContext != null
+                && mEglContext.equals(sEgl.eglGetCurrentContext());
+    }
+
+    @Override
+    void onLayerDestroyed(HardwareLayer layer) {
+        if (mGlCanvas != null) {
+            mGlCanvas.cancelLayerUpdate(layer);
+        }
+        if (hasContext()) {
+            long backingLayer = layer.detachBackingLayer();
+            nDestroyLayer(backingLayer);
+        }
+        mAttachedLayers.remove(layer);
+    }
+
+    @Override
+    public SurfaceTexture createSurfaceTexture(HardwareLayer layer) {
+        return layer.createSurfaceTexture();
+    }
+
+    @Override
+    boolean copyLayerInto(HardwareLayer layer, Bitmap bitmap) {
+        if (!validate()) {
+            throw new IllegalStateException("Could not acquire hardware rendering context");
+        }
+        layer.flushChanges();
+        return GLES20Canvas.nCopyLayer(layer.getLayer(), bitmap.mNativeBitmap);
+    }
+
+    @Override
+    boolean safelyRun(Runnable action) {
+        boolean needsContext = !isEnabled() || checkRenderContext() == SURFACE_STATE_ERROR;
+
+        if (needsContext) {
+            GLRendererEglContext managedContext =
+                    (GLRendererEglContext) sEglContextStorage.get();
+            if (managedContext == null) return false;
+            usePbufferSurface(managedContext.getContext());
+        }
+
+        try {
+            action.run();
+        } finally {
+            if (needsContext) {
+                sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE,
+                        EGL_NO_SURFACE, EGL_NO_CONTEXT);
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    void invokeFunctor(long functor, boolean waitForCompletion) {
+        boolean needsContext = !isEnabled() || checkRenderContext() == SURFACE_STATE_ERROR;
+        boolean hasContext = !needsContext;
+
+        if (needsContext) {
+            GLRendererEglContext managedContext =
+                    (GLRendererEglContext) sEglContextStorage.get();
+            if (managedContext != null) {
+                usePbufferSurface(managedContext.getContext());
+                hasContext = true;
+            }
+        }
+
+        try {
+            nInvokeFunctor(functor, hasContext);
+        } finally {
+            if (needsContext) {
+                sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE,
+                        EGL_NO_SURFACE, EGL_NO_CONTEXT);
+            }
+        }
+    }
+
+    private static native void nInvokeFunctor(long functor, boolean hasContext);
+
+    @Override
+    void destroyHardwareResources(final View view) {
+        if (view != null) {
+            safelyRun(new Runnable() {
+                @Override
+                public void run() {
+                    if (mCanvas != null) {
+                        mCanvas.clearLayerUpdates();
+                    }
+                    destroyResources(view);
+                    GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS);
+                }
+            });
+        }
+    }
+
+    private static void destroyResources(View view) {
+        view.destroyHardwareResources();
+
+        if (view instanceof ViewGroup) {
+            ViewGroup group = (ViewGroup) view;
+
+            int count = group.getChildCount();
+            for (int i = 0; i < count; i++) {
+                destroyResources(group.getChildAt(i));
+            }
+        }
+    }
+
+    static void startTrimMemory(int level) {
+        if (sEgl == null || sEglConfig == null) return;
+
+        GLRendererEglContext managedContext =
+                (GLRendererEglContext) sEglContextStorage.get();
+        // We do not have OpenGL objects
+        if (managedContext == null) {
+            return;
+        } else {
+            usePbufferSurface(managedContext.getContext());
+        }
+
+        if (level >= ComponentCallbacks2.TRIM_MEMORY_COMPLETE) {
+            GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_FULL);
+        } else if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
+            GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_MODERATE);
+        }
+    }
+
+    static void endTrimMemory() {
+        if (sEgl != null && sEglDisplay != null) {
+            sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+        }
+    }
+
+    private static void usePbufferSurface(EGLContext eglContext) {
+        synchronized (sPbufferLock) {
+            // Create a temporary 1x1 pbuffer so we have a context
+            // to clear our OpenGL objects
+            if (sPbuffer == null) {
+                sPbuffer = sEgl.eglCreatePbufferSurface(sEglDisplay, sEglConfig, new int[] {
+                        EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE
+                });
+            }
+        }
+        sEgl.eglMakeCurrent(sEglDisplay, sPbuffer, sPbuffer, eglContext);
+    }
+
+    GLRenderer(boolean translucent) {
+        mTranslucent = translucent;
+
+        loadSystemProperties();
+    }
+
+    @Override
+    boolean loadSystemProperties() {
+        boolean value;
+        boolean changed = false;
+
+        String profiling = SystemProperties.get(PROFILE_PROPERTY);
+        int graphType = search(VISUALIZERS, profiling);
+        value = graphType >= 0;
+
+        if (graphType != mProfileVisualizerType) {
+            changed = true;
+            mProfileVisualizerType = graphType;
+
+            mProfileShapes = null;
+            mProfilePaint = null;
+
+            if (value) {
+                mDebugDataProvider = new DrawPerformanceDataProvider(graphType);
+            } else {
+                mDebugDataProvider = null;
+            }
+        }
+
+        // If on-screen profiling is not enabled, we need to check whether
+        // console profiling only is enabled
+        if (!value) {
+            value = Boolean.parseBoolean(profiling);
+        }
+
+        if (value != mProfileEnabled) {
+            changed = true;
+            mProfileEnabled = value;
+
+            if (mProfileEnabled) {
+                Log.d(LOG_TAG, "Profiling hardware renderer");
+
+                int maxProfileFrames = SystemProperties.getInt(PROFILE_MAXFRAMES_PROPERTY,
+                        PROFILE_MAX_FRAMES);
+                mProfileData = new float[maxProfileFrames * PROFILE_FRAME_DATA_COUNT];
+                for (int i = 0; i < mProfileData.length; i += PROFILE_FRAME_DATA_COUNT) {
+                    mProfileData[i] = mProfileData[i + 1] = mProfileData[i + 2] = -1;
+                }
+
+                mProfileLock = new ReentrantLock();
+            } else {
+                mProfileData = null;
+                mProfileLock = null;
+                mProfileVisualizerType = -1;
+            }
+
+            mProfileCurrentFrame = -PROFILE_FRAME_DATA_COUNT;
+        }
+
+        value = SystemProperties.getBoolean(DEBUG_DIRTY_REGIONS_PROPERTY, false);
+        if (value != mDebugDirtyRegions) {
+            changed = true;
+            mDebugDirtyRegions = value;
+
+            if (mDebugDirtyRegions) {
+                Log.d(LOG_TAG, "Debugging dirty regions");
+            }
+        }
+
+        String overdraw = SystemProperties.get(HardwareRenderer.DEBUG_OVERDRAW_PROPERTY);
+        int debugOverdraw = search(OVERDRAW, overdraw);
+        if (debugOverdraw != mDebugOverdraw) {
+            changed = true;
+            mDebugOverdraw = debugOverdraw;
+        }
+
+        if (loadProperties()) {
+            changed = true;
+        }
+
+        return changed;
+    }
+
+    private static int search(String[] values, String value) {
+        for (int i = 0; i < values.length; i++) {
+            if (values[i].equals(value)) return i;
+        }
+        return -1;
+    }
+
+    @Override
+    void dumpGfxInfo(PrintWriter pw) {
+        if (mProfileEnabled) {
+            pw.printf("\n\tDraw\tProcess\tExecute\n");
+
+            mProfileLock.lock();
+            try {
+                for (int i = 0; i < mProfileData.length; i += PROFILE_FRAME_DATA_COUNT) {
+                    if (mProfileData[i] < 0) {
+                        break;
+                    }
+                    pw.printf("\t%3.2f\t%3.2f\t%3.2f\n", mProfileData[i], mProfileData[i + 1],
+                            mProfileData[i + 2]);
+                    mProfileData[i] = mProfileData[i + 1] = mProfileData[i + 2] = -1;
+                }
+                mProfileCurrentFrame = mProfileData.length;
+            } finally {
+                mProfileLock.unlock();
+            }
+        }
+    }
+
+    @Override
+    long getFrameCount() {
+        return mFrameCount;
+    }
+
+    /**
+     * Indicates whether this renderer instance can track and update dirty regions.
+     */
+    boolean hasDirtyRegions() {
+        return mDirtyRegionsEnabled;
+    }
+
+    /**
+     * Checks for OpenGL errors. If an error has occured, {@link #destroy(boolean)}
+     * is invoked and the requested flag is turned off. The error code is
+     * also logged as a warning.
+     */
+    void checkEglErrors() {
+        if (isEnabled()) {
+            checkEglErrorsForced();
+        }
+    }
+
+    private void checkEglErrorsForced() {
+        int error = sEgl.eglGetError();
+        if (error != EGL_SUCCESS) {
+            // something bad has happened revert to
+            // normal rendering.
+            Log.w(LOG_TAG, "EGL error: " + GLUtils.getEGLErrorString(error));
+            fallback(error != EGL11.EGL_CONTEXT_LOST);
+        }
+    }
+
+    private void fallback(boolean fallback) {
+        destroy(true);
+        if (fallback) {
+            // we'll try again if it was context lost
+            setRequested(false);
+            Log.w(LOG_TAG, "Mountain View, we've had a problem here. "
+                    + "Switching back to software rendering.");
+        }
+    }
+
+    @Override
+    boolean initialize(Surface surface) throws OutOfResourcesException {
+        if (isRequested() && !isEnabled()) {
+            boolean contextCreated = initializeEgl();
+            mGl = createEglSurface(surface);
+            mDestroyed = false;
+
+            if (mGl != null) {
+                int err = sEgl.eglGetError();
+                if (err != EGL_SUCCESS) {
+                    destroy(true);
+                    setRequested(false);
+                } else {
+                    if (mCanvas == null) {
+                        mCanvas = createCanvas();
+                    }
+                    setEnabled(true);
+
+                    if (contextCreated) {
+                        initAtlas();
+                    }
+                }
+
+                return mCanvas != null;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    void updateSurface(Surface surface) throws OutOfResourcesException {
+        if (isRequested() && isEnabled()) {
+            createEglSurface(surface);
+        }
+    }
+
+    @Override
+    void pauseSurface(Surface surface) {
+        // No-op
+    }
+
+    boolean initializeEgl() {
+        synchronized (sEglLock) {
+            if (sEgl == null && sEglConfig == null) {
+                sEgl = (EGL10) EGLContext.getEGL();
+
+                // Get to the default display.
+                sEglDisplay = sEgl.eglGetDisplay(EGL_DEFAULT_DISPLAY);
+
+                if (sEglDisplay == EGL_NO_DISPLAY) {
+                    throw new RuntimeException("eglGetDisplay failed "
+                            + GLUtils.getEGLErrorString(sEgl.eglGetError()));
+                }
+
+                // We can now initialize EGL for that display
+                int[] version = new int[2];
+                if (!sEgl.eglInitialize(sEglDisplay, version)) {
+                    throw new RuntimeException("eglInitialize failed " +
+                            GLUtils.getEGLErrorString(sEgl.eglGetError()));
+                }
+
+                checkEglErrorsForced();
+
+                sEglConfig = loadEglConfig();
+            }
+        }
+
+        ManagedEGLContext managedContext = sEglContextStorage.get();
+        mEglContext = managedContext != null ? managedContext.getContext() : null;
+        mEglThread = Thread.currentThread();
+
+        if (mEglContext == null) {
+            mEglContext = createContext(sEgl, sEglDisplay, sEglConfig);
+            sEglContextStorage.set(createManagedContext(mEglContext));
+            return true;
+        }
+
+        return false;
+    }
+
+    private EGLConfig loadEglConfig() {
+        EGLConfig eglConfig = chooseEglConfig();
+        if (eglConfig == null) {
+            // We tried to use EGL_SWAP_BEHAVIOR_PRESERVED_BIT, try again without
+            if (sDirtyRegions) {
+                sDirtyRegions = false;
+                eglConfig = chooseEglConfig();
+                if (eglConfig == null) {
+                    throw new RuntimeException("eglConfig not initialized");
+                }
+            } else {
+                throw new RuntimeException("eglConfig not initialized");
+            }
+        }
+        return eglConfig;
+    }
+
+    private EGLConfig chooseEglConfig() {
+        EGLConfig[] configs = new EGLConfig[1];
+        int[] configsCount = new int[1];
+        int[] configSpec = getConfig(sDirtyRegions);
+
+        // Debug
+        final String debug = SystemProperties.get(PRINT_CONFIG_PROPERTY, "");
+        if ("all".equalsIgnoreCase(debug)) {
+            sEgl.eglChooseConfig(sEglDisplay, configSpec, null, 0, configsCount);
+
+            EGLConfig[] debugConfigs = new EGLConfig[configsCount[0]];
+            sEgl.eglChooseConfig(sEglDisplay, configSpec, debugConfigs,
+                    configsCount[0], configsCount);
+
+            for (EGLConfig config : debugConfigs) {
+                printConfig(config);
+            }
+        }
+
+        if (!sEgl.eglChooseConfig(sEglDisplay, configSpec, configs, 1, configsCount)) {
+            throw new IllegalArgumentException("eglChooseConfig failed " +
+                    GLUtils.getEGLErrorString(sEgl.eglGetError()));
+        } else if (configsCount[0] > 0) {
+            if ("choice".equalsIgnoreCase(debug)) {
+                printConfig(configs[0]);
+            }
+            return configs[0];
+        }
+
+        return null;
+    }
+
+    private static void printConfig(EGLConfig config) {
+        int[] value = new int[1];
+
+        Log.d(LOG_TAG, "EGL configuration " + config + ":");
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_RED_SIZE, value);
+        Log.d(LOG_TAG, "  RED_SIZE = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_GREEN_SIZE, value);
+        Log.d(LOG_TAG, "  GREEN_SIZE = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_BLUE_SIZE, value);
+        Log.d(LOG_TAG, "  BLUE_SIZE = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_ALPHA_SIZE, value);
+        Log.d(LOG_TAG, "  ALPHA_SIZE = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_DEPTH_SIZE, value);
+        Log.d(LOG_TAG, "  DEPTH_SIZE = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_STENCIL_SIZE, value);
+        Log.d(LOG_TAG, "  STENCIL_SIZE = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_SAMPLE_BUFFERS, value);
+        Log.d(LOG_TAG, "  SAMPLE_BUFFERS = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_SAMPLES, value);
+        Log.d(LOG_TAG, "  SAMPLES = " + value[0]);
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_SURFACE_TYPE, value);
+        Log.d(LOG_TAG, "  SURFACE_TYPE = 0x" + Integer.toHexString(value[0]));
+
+        sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_CONFIG_CAVEAT, value);
+        Log.d(LOG_TAG, "  CONFIG_CAVEAT = 0x" + Integer.toHexString(value[0]));
+    }
+
+    GL createEglSurface(Surface surface) throws OutOfResourcesException {
+        // Check preconditions.
+        if (sEgl == null) {
+            throw new RuntimeException("egl not initialized");
+        }
+        if (sEglDisplay == null) {
+            throw new RuntimeException("eglDisplay not initialized");
+        }
+        if (sEglConfig == null) {
+            throw new RuntimeException("eglConfig not initialized");
+        }
+        if (Thread.currentThread() != mEglThread) {
+            throw new IllegalStateException("HardwareRenderer cannot be used "
+                    + "from multiple threads");
+        }
+
+        // In case we need to destroy an existing surface
+        destroySurface();
+
+        // Create an EGL surface we can render into.
+        if (!createSurface(surface)) {
+            return null;
+        }
+
+        initCaches();
+
+        return mEglContext.getGL();
+    }
+
+    private void enableDirtyRegions() {
+        // If mDirtyRegions is set, this means we have an EGL configuration
+        // with EGL_SWAP_BEHAVIOR_PRESERVED_BIT set
+        if (sDirtyRegions) {
+            if (!(mDirtyRegionsEnabled = preserveBackBuffer())) {
+                Log.w(LOG_TAG, "Backbuffer cannot be preserved");
+            }
+        } else if (sDirtyRegionsRequested) {
+            // If mDirtyRegions is not set, our EGL configuration does not
+            // have EGL_SWAP_BEHAVIOR_PRESERVED_BIT; however, the default
+            // swap behavior might be EGL_BUFFER_PRESERVED, which means we
+            // want to set mDirtyRegions. We try to do this only if dirty
+            // regions were initially requested as part of the device
+            // configuration (see RENDER_DIRTY_REGIONS)
+            mDirtyRegionsEnabled = isBackBufferPreserved();
+        }
+    }
+
+    EGLContext createContext(EGL10 egl, EGLDisplay eglDisplay, EGLConfig eglConfig) {
+        final int[] attribs = { EGL14.EGL_CONTEXT_CLIENT_VERSION, GL_VERSION, EGL_NONE };
+
+        EGLContext context = egl.eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT,
+                attribs);
+        if (context == null || context == EGL_NO_CONTEXT) {
+            //noinspection ConstantConditions
+            throw new IllegalStateException(
+                    "Could not create an EGL context. eglCreateContext failed with error: " +
+                    GLUtils.getEGLErrorString(sEgl.eglGetError()));
+        }
+
+        return context;
+    }
+
+    void destroySurface() {
+        if (mEglSurface != null && mEglSurface != EGL_NO_SURFACE) {
+            if (mEglSurface.equals(sEgl.eglGetCurrentSurface(EGL_DRAW))) {
+                sEgl.eglMakeCurrent(sEglDisplay,
+                        EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+            }
+            sEgl.eglDestroySurface(sEglDisplay, mEglSurface);
+            mEglSurface = null;
+        }
+    }
+
+    @Override
+    void invalidate(Surface surface) {
+        // Cancels any existing buffer to ensure we'll get a buffer
+        // of the right size before we call eglSwapBuffers
+        sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+
+        if (mEglSurface != null && mEglSurface != EGL_NO_SURFACE) {
+            sEgl.eglDestroySurface(sEglDisplay, mEglSurface);
+            mEglSurface = null;
+            setEnabled(false);
+        }
+
+        if (surface.isValid()) {
+            if (!createSurface(surface)) {
+                return;
+            }
+
+            mUpdateDirtyRegions = true;
+
+            if (mCanvas != null) {
+                setEnabled(true);
+            }
+        }
+    }
+
+    private boolean createSurface(Surface surface) {
+        mEglSurface = sEgl.eglCreateWindowSurface(sEglDisplay, sEglConfig, surface, null);
+
+        if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) {
+            int error = sEgl.eglGetError();
+            if (error == EGL_BAD_NATIVE_WINDOW) {
+                Log.e(LOG_TAG, "createWindowSurface returned EGL_BAD_NATIVE_WINDOW.");
+                return false;
+            }
+            throw new RuntimeException("createWindowSurface failed "
+                    + GLUtils.getEGLErrorString(error));
+        }
+
+        if (!sEgl.eglMakeCurrent(sEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
+            throw new IllegalStateException("eglMakeCurrent failed " +
+                    GLUtils.getEGLErrorString(sEgl.eglGetError()));
+        }
+
+        enableDirtyRegions();
+
+        return true;
+    }
+
+    boolean validate() {
+        return checkRenderContext() != SURFACE_STATE_ERROR;
+    }
+
+    @Override
+    void setup(int width, int height) {
+        if (validate()) {
+            mCanvas.setViewport(width, height);
+            mWidth = width;
+            mHeight = height;
+        }
+    }
+
+    @Override
+    int getWidth() {
+        return mWidth;
+    }
+
+    @Override
+    int getHeight() {
+        return mHeight;
+    }
+
+    @Override
+    void setName(String name) {
+        mName = name;
+    }
+
+    class FunctorsRunnable implements Runnable {
+        View.AttachInfo attachInfo;
+
+        @Override
+        public void run() {
+            final HardwareRenderer renderer = attachInfo.mHardwareRenderer;
+            if (renderer == null || !renderer.isEnabled() || renderer != GLRenderer.this) {
+                return;
+            }
+
+            if (checkRenderContext() != SURFACE_STATE_ERROR) {
+                mCanvas.invokeFunctors(mRedrawClip);
+            }
+        }
+    }
+
+    @Override
+    void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks,
+            Rect dirty) {
+        if (canDraw()) {
+            if (!hasDirtyRegions()) {
+                dirty = null;
+            }
+            attachInfo.mIgnoreDirtyState = true;
+            attachInfo.mDrawingTime = SystemClock.uptimeMillis();
+
+            view.mPrivateFlags |= View.PFLAG_DRAWN;
+
+            // We are already on the correct thread
+            final int surfaceState = checkRenderContextUnsafe();
+            if (surfaceState != SURFACE_STATE_ERROR) {
+                HardwareCanvas canvas = mCanvas;
+
+                if (mProfileEnabled) {
+                    mProfileLock.lock();
+                }
+
+                dirty = beginFrame(canvas, dirty, surfaceState);
+
+                RenderNode displayList = buildDisplayList(view, canvas);
+
+                flushLayerChanges();
+
+                // buildDisplayList() calls into user code which can cause
+                // an eglMakeCurrent to happen with a different surface/context.
+                // We must therefore check again here.
+                if (checkRenderContextUnsafe() == SURFACE_STATE_ERROR) {
+                    return;
+                }
+
+                int saveCount = 0;
+                int status = RenderNode.STATUS_DONE;
+
+                long start = getSystemTime();
+                try {
+                    status = prepareFrame(dirty);
+
+                    saveCount = canvas.save();
+                    callbacks.onHardwarePreDraw(canvas);
+
+                    if (displayList != null) {
+                        status |= drawDisplayList(canvas, displayList, status);
+                    } else {
+                        // Shouldn't reach here
+                        view.draw(canvas);
+                    }
+                } catch (Exception e) {
+                    Log.e(LOG_TAG, "An error has occurred while drawing:", e);
+                } finally {
+                    callbacks.onHardwarePostDraw(canvas);
+                    canvas.restoreToCount(saveCount);
+                    view.mRecreateDisplayList = false;
+
+                    mDrawDelta = getSystemTime() - start;
+
+                    if (mDrawDelta > 0) {
+                        mFrameCount++;
+
+                        debugDirtyRegions(dirty, canvas);
+                        drawProfileData(attachInfo);
+                    }
+                }
+
+                onPostDraw();
+
+                swapBuffers(status);
+
+                if (mProfileEnabled) {
+                    mProfileLock.unlock();
+                }
+
+                attachInfo.mIgnoreDirtyState = false;
+            }
+        }
+    }
+
+    private void flushLayerChanges() {
+        // Loop through and apply any pending layer changes
+        for (int i = 0; i < mAttachedLayers.size(); i++) {
+            HardwareLayer layer = mAttachedLayers.get(i);
+            layer.flushChanges();
+            if (!layer.isValid()) {
+                // The layer was removed from mAttachedLayers, rewind i by 1
+                // Note that this shouldn't actually happen as View.getHardwareLayer()
+                // is already flushing for error checking reasons
+                i--;
+            }
+        }
+    }
+
+    @Override
+    void fence() {
+        // Everything is immediate, so this is a no-op
+    }
+
+    private RenderNode buildDisplayList(View view, HardwareCanvas canvas) {
+        if (mDrawDelta <= 0) {
+            return view.mRenderNode;
+        }
+
+        view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED)
+                == View.PFLAG_INVALIDATED;
+        view.mPrivateFlags &= ~View.PFLAG_INVALIDATED;
+
+        long buildDisplayListStartTime = startBuildDisplayListProfiling();
+        canvas.clearLayerUpdates();
+
+        Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList");
+        RenderNode renderNode = view.getDisplayList();
+        Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+
+        endBuildDisplayListProfiling(buildDisplayListStartTime);
+
+        return renderNode;
+    }
+
+    private Rect beginFrame(HardwareCanvas canvas, Rect dirty, int surfaceState) {
+        // We had to change the current surface and/or context, redraw everything
+        if (surfaceState == SURFACE_STATE_UPDATED) {
+            dirty = null;
+            beginFrame(null);
+        } else {
+            int[] size = mSurfaceSize;
+            beginFrame(size);
+
+            if (size[1] != mHeight || size[0] != mWidth) {
+                mWidth = size[0];
+                mHeight = size[1];
+
+                canvas.setViewport(mWidth, mHeight);
+
+                dirty = null;
+            }
+        }
+
+        if (mDebugDataProvider != null) dirty = null;
+
+        return dirty;
+    }
+
+    private long startBuildDisplayListProfiling() {
+        if (mProfileEnabled) {
+            mProfileCurrentFrame += PROFILE_FRAME_DATA_COUNT;
+            if (mProfileCurrentFrame >= mProfileData.length) {
+                mProfileCurrentFrame = 0;
+            }
+
+            return System.nanoTime();
+        }
+        return 0;
+    }
+
+    private void endBuildDisplayListProfiling(long getDisplayListStartTime) {
+        if (mProfileEnabled) {
+            long now = System.nanoTime();
+            float total = (now - getDisplayListStartTime) * 0.000001f;
+            //noinspection PointlessArithmeticExpression
+            mProfileData[mProfileCurrentFrame] = total;
+        }
+    }
+
+    private int prepareFrame(Rect dirty) {
+        int status;
+        Trace.traceBegin(Trace.TRACE_TAG_VIEW, "prepareFrame");
+        try {
+            status = onPreDraw(dirty);
+        } finally {
+            Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+        }
+        return status;
+    }
+
+    private int drawDisplayList(HardwareCanvas canvas, RenderNode displayList,
+            int status) {
+
+        long drawDisplayListStartTime = 0;
+        if (mProfileEnabled) {
+            drawDisplayListStartTime = System.nanoTime();
+        }
+
+        Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawDisplayList");
+        nPrepareTree(displayList.getNativeDisplayList());
+        try {
+            status |= canvas.drawDisplayList(displayList, mRedrawClip,
+                    RenderNode.FLAG_CLIP_CHILDREN);
+        } finally {
+            Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+        }
+
+        if (mProfileEnabled) {
+            long now = System.nanoTime();
+            float total = (now - drawDisplayListStartTime) * 0.000001f;
+            mProfileData[mProfileCurrentFrame + 1] = total;
+        }
+
+        return status;
+    }
+
+    private void swapBuffers(int status) {
+        if ((status & RenderNode.STATUS_DREW) == RenderNode.STATUS_DREW) {
+            long eglSwapBuffersStartTime = 0;
+            if (mProfileEnabled) {
+                eglSwapBuffersStartTime = System.nanoTime();
+            }
+
+            sEgl.eglSwapBuffers(sEglDisplay, mEglSurface);
+
+            if (mProfileEnabled) {
+                long now = System.nanoTime();
+                float total = (now - eglSwapBuffersStartTime) * 0.000001f;
+                mProfileData[mProfileCurrentFrame + 2] = total;
+            }
+
+            checkEglErrors();
+        }
+    }
+
+    private void debugDirtyRegions(Rect dirty, HardwareCanvas canvas) {
+        if (mDebugDirtyRegions) {
+            if (mDebugPaint == null) {
+                mDebugPaint = new Paint();
+                mDebugPaint.setColor(0x7fff0000);
+            }
+
+            if (dirty != null && (mFrameCount & 1) == 0) {
+                canvas.drawRect(dirty, mDebugPaint);
+            }
+        }
+    }
+
+    @Override
+    void detachFunctor(long functor) {
+        if (mCanvas != null) {
+            mCanvas.detachFunctor(functor);
+        }
+    }
+
+    @Override
+    void attachFunctor(View.AttachInfo attachInfo, long functor) {
+        if (mCanvas != null) {
+            mCanvas.attachFunctor(functor);
+            mFunctorsRunnable.attachInfo = attachInfo;
+            attachInfo.mHandler.removeCallbacks(mFunctorsRunnable);
+            attachInfo.mHandler.postDelayed(mFunctorsRunnable,  0);
+        }
+    }
+
+    /**
+     * Ensures the current EGL context and surface are the ones we expect.
+     * This method throws an IllegalStateException if invoked from a thread
+     * that did not initialize EGL.
+     *
+     * @return {@link #SURFACE_STATE_ERROR} if the correct EGL context cannot be made current,
+     *         {@link #SURFACE_STATE_UPDATED} if the EGL context was changed or
+     *         {@link #SURFACE_STATE_SUCCESS} if the EGL context was the correct one
+     *
+     * @see #checkRenderContextUnsafe()
+     */
+    int checkRenderContext() {
+        if (mEglThread != Thread.currentThread()) {
+            throw new IllegalStateException("Hardware acceleration can only be used with a " +
+                    "single UI thread.\nOriginal thread: " + mEglThread + "\n" +
+                    "Current thread: " + Thread.currentThread());
+        }
+
+        return checkRenderContextUnsafe();
+    }
+
+    /**
+     * Ensures the current EGL context and surface are the ones we expect.
+     * This method does not check the current thread.
+     *
+     * @return {@link #SURFACE_STATE_ERROR} if the correct EGL context cannot be made current,
+     *         {@link #SURFACE_STATE_UPDATED} if the EGL context was changed or
+     *         {@link #SURFACE_STATE_SUCCESS} if the EGL context was the correct one
+     *
+     * @see #checkRenderContext()
+     */
+    private int checkRenderContextUnsafe() {
+        if (!mEglSurface.equals(sEgl.eglGetCurrentSurface(EGL_DRAW)) ||
+                !mEglContext.equals(sEgl.eglGetCurrentContext())) {
+            if (!sEgl.eglMakeCurrent(sEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
+                Log.e(LOG_TAG, "eglMakeCurrent failed " +
+                        GLUtils.getEGLErrorString(sEgl.eglGetError()));
+                fallback(true);
+                return SURFACE_STATE_ERROR;
+            } else {
+                if (mUpdateDirtyRegions) {
+                    enableDirtyRegions();
+                    mUpdateDirtyRegions = false;
+                }
+                return SURFACE_STATE_UPDATED;
+            }
+        }
+        return SURFACE_STATE_SUCCESS;
+    }
+
+    private static int dpToPx(int dp, float density) {
+        return (int) (dp * density + 0.5f);
+    }
+
+    static native boolean loadProperties();
+
+    static native void setupShadersDiskCache(String cacheFile);
+
+    /**
+     * Notifies EGL that the frame is about to be rendered.
+     * @param size
+     */
+    static native void beginFrame(int[] size);
+
+    /**
+     * Returns the current system time according to the renderer.
+     * This method is used for debugging only and should not be used
+     * as a clock.
+     */
+    static native long getSystemTime();
+
+    /**
+     * Preserves the back buffer of the current surface after a buffer swap.
+     * Calling this method sets the EGL_SWAP_BEHAVIOR attribute of the current
+     * surface to EGL_BUFFER_PRESERVED. Calling this method requires an EGL
+     * config that supports EGL_SWAP_BEHAVIOR_PRESERVED_BIT.
+     *
+     * @return True if the swap behavior was successfully changed,
+     *         false otherwise.
+     */
+    static native boolean preserveBackBuffer();
+
+    /**
+     * Indicates whether the current surface preserves its back buffer
+     * after a buffer swap.
+     *
+     * @return True, if the surface's EGL_SWAP_BEHAVIOR is EGL_BUFFER_PRESERVED,
+     *         false otherwise
+     */
+    static native boolean isBackBufferPreserved();
+
+    static native void nDestroyLayer(long layerPtr);
+
+    private static native void nPrepareTree(long displayListPtr);
+
+    class DrawPerformanceDataProvider extends GraphDataProvider {
+        private final int mGraphType;
+
+        private int mVerticalUnit;
+        private int mHorizontalUnit;
+        private int mHorizontalMargin;
+        private int mThresholdStroke;
+
+        DrawPerformanceDataProvider(int graphType) {
+            mGraphType = graphType;
+        }
+
+        @Override
+        void prepare(DisplayMetrics metrics) {
+            final float density = metrics.density;
+
+            mVerticalUnit = dpToPx(PROFILE_DRAW_DP_PER_MS, density);
+            mHorizontalUnit = dpToPx(PROFILE_DRAW_WIDTH, density);
+            mHorizontalMargin = dpToPx(PROFILE_DRAW_MARGIN, density);
+            mThresholdStroke = dpToPx(PROFILE_DRAW_THRESHOLD_STROKE_WIDTH, density);
+        }
+
+        @Override
+        int getGraphType() {
+            return mGraphType;
+        }
+
+        @Override
+        int getVerticalUnitSize() {
+            return mVerticalUnit;
+        }
+
+        @Override
+        int getHorizontalUnitSize() {
+            return mHorizontalUnit;
+        }
+
+        @Override
+        int getHorizontaUnitMargin() {
+            return mHorizontalMargin;
+        }
+
+        @Override
+        float[] getData() {
+            return mProfileData;
+        }
+
+        @Override
+        float getThreshold() {
+            return 16;
+        }
+
+        @Override
+        int getFrameCount() {
+            return mProfileData.length / PROFILE_FRAME_DATA_COUNT;
+        }
+
+        @Override
+        int getElementCount() {
+            return PROFILE_FRAME_DATA_COUNT;
+        }
+
+        @Override
+        int getCurrentFrame() {
+            return mProfileCurrentFrame / PROFILE_FRAME_DATA_COUNT;
+        }
+
+        @Override
+        void setupGraphPaint(Paint paint, int elementIndex) {
+            paint.setColor(PROFILE_DRAW_COLORS[elementIndex]);
+            if (mGraphType == GRAPH_TYPE_LINES) paint.setStrokeWidth(mThresholdStroke);
+        }
+
+        @Override
+        void setupThresholdPaint(Paint paint) {
+            paint.setColor(PROFILE_DRAW_THRESHOLD_COLOR);
+            paint.setStrokeWidth(mThresholdStroke);
+        }
+
+        @Override
+        void setupCurrentFramePaint(Paint paint) {
+            paint.setColor(PROFILE_DRAW_CURRENT_FRAME_COLOR);
+            if (mGraphType == GRAPH_TYPE_LINES) paint.setStrokeWidth(mThresholdStroke);
+        }
+    }
+}
diff --git a/core/java/android/view/HapticFeedbackConstants.java b/core/java/android/view/HapticFeedbackConstants.java
index 8f40260..26f47f9 100644
--- a/core/java/android/view/HapticFeedbackConstants.java
+++ b/core/java/android/view/HapticFeedbackConstants.java
@@ -41,6 +41,11 @@
     public static final int KEYBOARD_TAP = 3;
 
     /**
+     * The user has pressed either an hour or minute tick of a Clock.
+     */
+    public static final int CLOCK_TICK = 4;
+
+    /**
      * This is a private constant.  Feel free to renumber as desired.
      * @hide
      */
diff --git a/core/java/android/view/HardwareCanvas.java b/core/java/android/view/HardwareCanvas.java
index 10f700c..233f846 100644
--- a/core/java/android/view/HardwareCanvas.java
+++ b/core/java/android/view/HardwareCanvas.java
@@ -23,11 +23,10 @@
 
 /**
  * Hardware accelerated canvas.
- * 
+ *
  * @hide
  */
 public abstract class HardwareCanvas extends Canvas {
-    private String mName;
 
     @Override
     public boolean isHardwareAccelerated() {
@@ -40,37 +39,10 @@
     }
 
     /**
-     * Specifies the name of this canvas. Naming the canvas is entirely
-     * optional but can be useful for debugging purposes.
-     *
-     * @param name The name of the canvas, can be null
-     *
-     * @see #getName()
-     *
-     * @hide
-     */
-    public void setName(String name) {
-        mName = name;
-    }
-
-    /**
-     * Returns the name of this canvas.
-     *
-     * @return The name of the canvas or null
-     *
-     * @see #setName(String)
-     *
-     * @hide
-     */
-    public String getName() {
-        return mName;
-    }
-
-    /**
      * Invoked before any drawing operation is performed in this canvas.
-     * 
+     *
      * @param dirty The dirty rectangle to update, can be null.
-     * @return {@link DisplayList#STATUS_DREW} if anything was drawn (such as a call to clear
+     * @return {@link RenderNode#STATUS_DREW} if anything was drawn (such as a call to clear
      *         the canvas).
      *
      * @hide
@@ -86,40 +58,28 @@
 
     /**
      * Draws the specified display list onto this canvas. The display list can only
-     * be drawn if {@link android.view.DisplayList#isValid()} returns true.
+     * be drawn if {@link android.view.RenderNode#isValid()} returns true.
      *
      * @param displayList The display list to replay.
      */
-    public void drawDisplayList(DisplayList displayList) {
-        drawDisplayList(displayList, null, DisplayList.FLAG_CLIP_CHILDREN);
+    public void drawDisplayList(RenderNode displayList) {
+        drawDisplayList(displayList, null, RenderNode.FLAG_CLIP_CHILDREN);
     }
 
     /**
      * Draws the specified display list onto this canvas.
      *
      * @param displayList The display list to replay.
-     * @param dirty The dirty region to redraw in the next pass, matters only
-     *        if this method returns {@link DisplayList#STATUS_DRAW}, can be null.
-     * @param flags Optional flags about drawing, see {@link DisplayList} for
+     * @param dirty Ignored, can be null.
+     * @param flags Optional flags about drawing, see {@link RenderNode} for
      *              the possible flags.
      *
-     * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW}, or
-     *         {@link DisplayList#STATUS_INVOKE}, or'd with {@link DisplayList#STATUS_DREW}
+     * @return One of {@link RenderNode#STATUS_DONE} or {@link RenderNode#STATUS_DREW}
      *         if anything was drawn.
      *
      * @hide
      */
-    public abstract int drawDisplayList(DisplayList displayList, Rect dirty, int flags);
-
-    /**
-     * Outputs the specified display list to the log. This method exists for use by
-     * tools to output display lists for selected nodes to the log.
-     *
-     * @param displayList The display list to be logged.
-     *
-     * @hide
-     */
-    abstract void outputDisplayList(DisplayList displayList);
+    public abstract int drawDisplayList(RenderNode displayList, Rect dirty, int flags);
 
     /**
      * Draws the specified layer onto this canvas.
@@ -139,29 +99,27 @@
      * This function may return true if an invalidation is needed after the call.
      *
      * @param drawGLFunction A native function pointer
-     *                       
-     * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or
-     *         {@link DisplayList#STATUS_INVOKE}
+     *
+     * @return {@link RenderNode#STATUS_DONE}
      *
      * @hide
      */
     public int callDrawGLFunction(long drawGLFunction) {
         // Noop - this is done in the display list recorder subclass
-        return DisplayList.STATUS_DONE;
+        return RenderNode.STATUS_DONE;
     }
 
     /**
      * Invoke all the functors who requested to be invoked during the previous frame.
-     * 
-     * @param dirty The region to redraw when the functors return {@link DisplayList#STATUS_DRAW}
-     *              
-     * @return One of {@link DisplayList#STATUS_DONE}, {@link DisplayList#STATUS_DRAW} or
-     *         {@link DisplayList#STATUS_INVOKE}
+     *
+     * @param dirty Ignored
+     *
+     * @return Ignored
      *
      * @hide
      */
     public int invokeFunctors(Rect dirty) {
-        return DisplayList.STATUS_DONE;
+        return RenderNode.STATUS_DONE;
     }
 
     /**
@@ -192,7 +150,7 @@
 
     /**
      * Indicates that the specified layer must be updated as soon as possible.
-     * 
+     *
      * @param layer The layer to update
      *
      * @see #clearLayerUpdates()
@@ -225,7 +183,7 @@
 
     /**
      * Removes all enqueued layer updates.
-     * 
+     *
      * @see #pushLayerUpdate(HardwareLayer)
      *
      * @hide
diff --git a/core/java/android/view/HardwareLayer.java b/core/java/android/view/HardwareLayer.java
index 23383d9..4d78733 100644
--- a/core/java/android/view/HardwareLayer.java
+++ b/core/java/android/view/HardwareLayer.java
@@ -17,10 +17,10 @@
 package android.view;
 
 import android.graphics.Bitmap;
-import android.graphics.Canvas;
 import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.Rect;
+import android.graphics.SurfaceTexture;
 
 /**
  * A hardware layer can be used to render graphics operations into a hardware
@@ -28,38 +28,35 @@
  * would use a Frame Buffer Object (FBO.) The hardware layer can be used as
  * a drawing cache when a complex set of graphics operations needs to be
  * drawn several times.
+ *
+ * @hide
  */
-abstract class HardwareLayer {
-    /**
-     * Indicates an unknown dimension (width or height.)
-     */
-    static final int DIMENSION_UNDEFINED = -1;
-    
-    int mWidth;
-    int mHeight;
-    DisplayList mDisplayList;
+final class HardwareLayer {
+    private static final int LAYER_TYPE_TEXTURE = 1;
+    private static final int LAYER_TYPE_DISPLAY_LIST = 2;
 
-    boolean mOpaque;
+    private HardwareRenderer mRenderer;
+    private Finalizer mFinalizer;
+    private RenderNode mDisplayList;
+    private final int mLayerType;
 
-    /**
-     * Creates a new hardware layer with undefined dimensions.
-     */
-    HardwareLayer() {
-        this(DIMENSION_UNDEFINED, DIMENSION_UNDEFINED, false);
+    private HardwareLayer(HardwareRenderer renderer, long deferredUpdater, int type) {
+        if (renderer == null || deferredUpdater == 0) {
+            throw new IllegalArgumentException("Either hardware renderer: " + renderer
+                    + " or deferredUpdater: " + deferredUpdater + " is invalid");
+        }
+        mRenderer = renderer;
+        mLayerType = type;
+        mFinalizer = new Finalizer(deferredUpdater);
+
+        // Layer is considered initialized at this point, notify the HardwareRenderer
+        mRenderer.onLayerCreated(this);
     }
 
-    /**
-     * Creates a new hardware layer at least as large as the supplied
-     * dimensions.
-     * 
-     * @param width The minimum width of the layer
-     * @param height The minimum height of the layer
-     * @param isOpaque Whether the layer should be opaque or not
-     */
-    HardwareLayer(int width, int height, boolean isOpaque) {
-        mWidth = width;
-        mHeight = height;
-        mOpaque = isOpaque;
+    private void assertType(int type) {
+        if (mLayerType != type) {
+            throw new IllegalAccessError("Method not appropriate for this layer type! " + mLayerType);
+        }
     }
 
     /**
@@ -68,158 +65,244 @@
      * @param paint The paint used when the layer is drawn into the destination canvas.
      * @see View#setLayerPaint(android.graphics.Paint)
      */
-    void setLayerPaint(Paint paint) { }
-
-    /**
-     * Returns the minimum width of the layer.
-     * 
-     * @return The minimum desired width of the hardware layer 
-     */
-    int getWidth() {
-        return mWidth;
+    public void setLayerPaint(Paint paint) {
+        nSetLayerPaint(mFinalizer.mDeferredUpdater, paint.mNativePaint);
     }
 
     /**
-     * Returns the minimum height of the layer.
-     * 
-     * @return The minimum desired height of the hardware layer 
-     */
-    int getHeight() {
-        return mHeight;
-    }
-
-    /**
-     * Returns the DisplayList for the layer.
-     *
-     * @return The DisplayList of the hardware layer
-     */
-    DisplayList getDisplayList() {
-        return mDisplayList;
-    }
-
-    /**
-     * Sets the DisplayList for the layer.
-     *
-     * @param displayList The new DisplayList for this layer
-     */
-    void setDisplayList(DisplayList displayList) {
-        mDisplayList = displayList;
-    }
-
-    /**
-     * Returns whether or not this layer is opaque.
-     * 
-     * @return True if the layer is opaque, false otherwise
-     */
-    boolean isOpaque() {
-        return mOpaque;
-    }
-
-    /**
-     * Sets whether or not this layer should be considered opaque.
-     * 
-     * @param isOpaque True if the layer is opaque, false otherwise
-     */
-    abstract void setOpaque(boolean isOpaque);
-
-    /**
      * Indicates whether this layer can be rendered.
-     * 
+     *
      * @return True if the layer can be rendered into, false otherwise
      */
-    abstract boolean isValid();
+    public boolean isValid() {
+        return mFinalizer != null && mFinalizer.mDeferredUpdater != 0;
+    }
 
     /**
-     * Resize the layer, if necessary, to be at least as large
-     * as the supplied dimensions.
-     * 
-     * @param width The new desired minimum width for this layer
-     * @param height The new desired minimum height for this layer
-     * @return True if the resulting layer is valid, false otherwise
+     * Destroys resources without waiting for a GC.
      */
-    abstract boolean resize(int width, int height);
+    public void destroy() {
+        if (!isValid()) {
+            // Already destroyed
+            return;
+        }
+
+        if (mDisplayList != null) {
+            mDisplayList.destroyDisplayListData();
+            mDisplayList = null;
+        }
+        if (mRenderer != null) {
+            mRenderer.onLayerDestroyed(this);
+            mRenderer = null;
+        }
+        doDestroyLayerUpdater();
+    }
+
+    public long getDeferredLayerUpdater() {
+        return mFinalizer.mDeferredUpdater;
+    }
 
     /**
-     * Returns a hardware canvas that can be used to render onto
-     * this layer.
-     * 
-     * @return A hardware canvas, or null if a canvas cannot be created
+     * Destroys the deferred layer updater but not the backing layer. The
+     * backing layer is instead returned and is the caller's responsibility
+     * to destroy/recycle as appropriate.
      *
-     * @see #start(android.graphics.Canvas)
-     * @see #end(android.graphics.Canvas)
+     * It is safe to call this in onLayerDestroyed only
      */
-    abstract HardwareCanvas getCanvas();
+    public long detachBackingLayer() {
+        long backingLayer = nDetachBackingLayer(mFinalizer.mDeferredUpdater);
+        doDestroyLayerUpdater();
+        return backingLayer;
+    }
 
-    /**
-     * Destroys resources without waiting for a GC. 
-     */
-    abstract void destroy();
+    private void doDestroyLayerUpdater() {
+        if (mFinalizer != null) {
+            mFinalizer.destroy();
+            mFinalizer = null;
+        }
+    }
 
-    /**
-     * This must be invoked before drawing onto this layer.
-     *
-     * @param currentCanvas The canvas whose rendering needs to be interrupted
-     */
-    abstract HardwareCanvas start(Canvas currentCanvas);
+    public RenderNode startRecording() {
+        assertType(LAYER_TYPE_DISPLAY_LIST);
 
-    /**
-     * This must be invoked before drawing onto this layer.
-     *
-     * @param dirty The dirty area to repaint
-     * @param currentCanvas The canvas whose rendering needs to be interrupted
-     */
-    abstract HardwareCanvas start(Canvas currentCanvas, Rect dirty);
+        if (mDisplayList == null) {
+            mDisplayList = RenderNode.create("HardwareLayer");
+        }
+        return mDisplayList;
+    }
 
-    /**
-     * This must be invoked after drawing onto this layer.
-     *
-     * @param currentCanvas The canvas whose rendering needs to be resumed
-     */
-    abstract void end(Canvas currentCanvas);
+    public void endRecording(Rect dirtyRect) {
+        nUpdateRenderLayer(mFinalizer.mDeferredUpdater, mDisplayList.getNativeDisplayList(),
+                dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom);
+        mRenderer.pushLayerUpdate(this);
+    }
 
     /**
      * Copies this layer into the specified bitmap.
-     * 
+     *
      * @param bitmap The bitmap to copy they layer into
-     * 
+     *
      * @return True if the copy was successful, false otherwise
      */
-    abstract boolean copyInto(Bitmap bitmap);
+    public boolean copyInto(Bitmap bitmap) {
+        return mRenderer.copyLayerInto(this, bitmap);
+    }
 
     /**
-     * Update the layer's properties. This method should be used
-     * when the underlying storage is modified by an external entity.
-     * To change the underlying storage, use the {@link #resize(int, int)}
-     * method instead.
-     * 
+     * Update the layer's properties. Note that after calling this isValid() may
+     * return false if the requested width/height cannot be satisfied
+     *
      * @param width The new width of this layer
      * @param height The new height of this layer
      * @param isOpaque Whether this layer is opaque
+     *
+     * @return true if the layer's properties will change, false if they already
+     *         match the desired values.
      */
-    void update(int width, int height, boolean isOpaque) {
-        mWidth = width;
-        mHeight = height;
-        mOpaque = isOpaque;
+    public boolean prepare(int width, int height, boolean isOpaque) {
+        return nPrepare(mFinalizer.mDeferredUpdater, width, height, isOpaque);
     }
 
     /**
      * Sets an optional transform on this layer.
-     * 
+     *
      * @param matrix The transform to apply to the layer.
      */
-    abstract void setTransform(Matrix matrix);
+    public void setTransform(Matrix matrix) {
+        nSetTransform(mFinalizer.mDeferredUpdater, matrix.native_instance);
+    }
 
     /**
-     * Specifies the display list to use to refresh the layer.
-     *
-     * @param displayList The display list containing the drawing commands to
-     *                    execute in this layer
-     * @param dirtyRect The dirty region of the layer that needs to be redrawn
+     * Indicates that this layer has lost its texture.
      */
-    abstract void redrawLater(DisplayList displayList, Rect dirtyRect);
+    public void detachSurfaceTexture(final SurfaceTexture surface) {
+        assertType(LAYER_TYPE_TEXTURE);
+        mRenderer.safelyRun(new Runnable() {
+            @Override
+            public void run() {
+                surface.detachFromGLContext();
+                // SurfaceTexture owns the texture name and detachFromGLContext
+                // should have deleted it
+                nOnTextureDestroyed(mFinalizer.mDeferredUpdater);
+            }
+        });
+    }
 
     /**
-     * Indicates that this layer has lost its underlying storage.
+     * This exists to minimize impact into the current HardwareLayer paths as
+     * some of the specifics of how to handle error cases in the fully
+     * deferred model will work
      */
-    abstract void clearStorage();
+    @Deprecated
+    public void flushChanges() {
+        if (HardwareRenderer.sUseRenderThread) {
+            // Not supported, don't try.
+            return;
+        }
+
+        boolean success = nFlushChanges(mFinalizer.mDeferredUpdater);
+        if (!success) {
+            destroy();
+        }
+    }
+
+    public long getLayer() {
+        return nGetLayer(mFinalizer.mDeferredUpdater);
+    }
+
+    public void setSurfaceTexture(SurfaceTexture surface) {
+        assertType(LAYER_TYPE_TEXTURE);
+        nSetSurfaceTexture(mFinalizer.mDeferredUpdater, surface, false);
+    }
+
+    public void updateSurfaceTexture() {
+        assertType(LAYER_TYPE_TEXTURE);
+        nUpdateSurfaceTexture(mFinalizer.mDeferredUpdater);
+    }
+
+    /**
+     * This should only be used by HardwareRenderer! Do not call directly
+     */
+    SurfaceTexture createSurfaceTexture() {
+        assertType(LAYER_TYPE_TEXTURE);
+        SurfaceTexture st = new SurfaceTexture(nGetTexName(mFinalizer.mDeferredUpdater));
+        nSetSurfaceTexture(mFinalizer.mDeferredUpdater, st, true);
+        return st;
+    }
+
+    /**
+     * This should only be used by HardwareRenderer! Do not call directly
+     */
+    static HardwareLayer createTextureLayer(HardwareRenderer renderer) {
+        return new HardwareLayer(renderer, nCreateTextureLayer(), LAYER_TYPE_TEXTURE);
+    }
+
+    static HardwareLayer adoptTextureLayer(HardwareRenderer renderer, long layer) {
+        return new HardwareLayer(renderer, layer, LAYER_TYPE_TEXTURE);
+    }
+
+    /**
+     * This should only be used by HardwareRenderer! Do not call directly
+     */
+    static HardwareLayer createDisplayListLayer(HardwareRenderer renderer,
+            int width, int height) {
+        return new HardwareLayer(renderer, nCreateRenderLayer(width, height), LAYER_TYPE_DISPLAY_LIST);
+    }
+
+    static HardwareLayer adoptDisplayListLayer(HardwareRenderer renderer, long layer) {
+        return new HardwareLayer(renderer, layer, LAYER_TYPE_DISPLAY_LIST);
+    }
+
+    /** This also creates the underlying layer */
+    private static native long nCreateTextureLayer();
+    private static native long nCreateRenderLayer(int width, int height);
+
+    private static native void nOnTextureDestroyed(long layerUpdater);
+    private static native long nDetachBackingLayer(long layerUpdater);
+
+    /** This also destroys the underlying layer if it is still attached.
+     *  Note it does not recycle the underlying layer, but instead queues it
+     *  for deferred deletion.
+     *  The HardwareRenderer should use detachBackingLayer() in the
+     *  onLayerDestroyed() callback to do recycling if desired.
+     */
+    private static native void nDestroyLayerUpdater(long layerUpdater);
+
+    private static native boolean nPrepare(long layerUpdater, int width, int height, boolean isOpaque);
+    private static native void nSetLayerPaint(long layerUpdater, long paint);
+    private static native void nSetTransform(long layerUpdater, long matrix);
+    private static native void nSetSurfaceTexture(long layerUpdater,
+            SurfaceTexture surface, boolean isAlreadyAttached);
+    private static native void nUpdateSurfaceTexture(long layerUpdater);
+    private static native void nUpdateRenderLayer(long layerUpdater, long displayList,
+            int left, int top, int right, int bottom);
+
+    private static native boolean nFlushChanges(long layerUpdater);
+
+    private static native long nGetLayer(long layerUpdater);
+    private static native int nGetTexName(long layerUpdater);
+
+    private static class Finalizer {
+        private long mDeferredUpdater;
+
+        public Finalizer(long deferredUpdater) {
+            mDeferredUpdater = deferredUpdater;
+        }
+
+        @Override
+        protected void finalize() throws Throwable {
+            try {
+                destroy();
+            } finally {
+                super.finalize();
+            }
+        }
+
+        void destroy() {
+            if (mDeferredUpdater != 0) {
+                nDestroyLayerUpdater(mDeferredUpdater);
+                mDeferredUpdater = 0;
+            }
+        }
+    }
 }
diff --git a/core/java/android/view/HardwareRenderer.java b/core/java/android/view/HardwareRenderer.java
index f09a111..d31c79d 100644
--- a/core/java/android/view/HardwareRenderer.java
+++ b/core/java/android/view/HardwareRenderer.java
@@ -16,41 +16,15 @@
 
 package android.view;
 
-import android.content.ComponentCallbacks2;
-import android.graphics.Color;
+import android.graphics.Bitmap;
 import android.graphics.Paint;
 import android.graphics.Rect;
 import android.graphics.SurfaceTexture;
-import android.opengl.EGL14;
-import android.opengl.GLUtils;
-import android.opengl.ManagedEGLContext;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.os.Trace;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.view.Surface.OutOfResourcesException;
 
-import com.google.android.gles_jni.EGLImpl;
-
-import javax.microedition.khronos.egl.EGL10;
-import javax.microedition.khronos.egl.EGL11;
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.egl.EGLContext;
-import javax.microedition.khronos.egl.EGLDisplay;
-import javax.microedition.khronos.egl.EGLSurface;
-import javax.microedition.khronos.opengles.GL;
-
 import java.io.File;
 import java.io.PrintWriter;
-import java.util.concurrent.locks.ReentrantLock;
-
-import static javax.microedition.khronos.egl.EGL10.*;
 
 /**
  * Interface for rendering a view hierarchy using hardware acceleration.
@@ -66,13 +40,6 @@
     private static final String CACHE_PATH_SHADERS = "com.android.opengl.shaders_cache";
 
     /**
-     * Turn on to only refresh the parts of the screen that need updating.
-     * When turned on the property defined by {@link #RENDER_DIRTY_REGIONS_PROPERTY}
-     * must also have the value "true".
-     */
-    static final boolean RENDER_DIRTY_REGIONS = true;
-
-    /**
      * System property used to enable or disable dirty regions invalidation.
      * This property is only queried if {@link #RENDER_DIRTY_REGIONS} is true.
      * The default value of this property is assumed to be true.
@@ -187,14 +154,6 @@
     public static final String OVERDRAW_PROPERTY_SHOW = "show";
 
     /**
-     * Value for {@link #DEBUG_OVERDRAW_PROPERTY}. When the property is set to this
-     * value, an overdraw counter will be shown on screen.
-     *
-     * @hide
-     */
-    public static final String OVERDRAW_PROPERTY_COUNT = "count";
-
-    /**
      * Turn on to debug non-rectangular clip operations.
      *
      * Possible values:
@@ -222,15 +181,8 @@
      */
     public static boolean sSystemRendererDisabled = false;
 
-    /**
-     * Number of frames to profile.
-     */
-    private static final int PROFILE_MAX_FRAMES = 128;
-
-    /**
-     * Number of floats per profiled frame.
-     */
-    private static final int PROFILE_FRAME_DATA_COUNT = 3;
+    /** @hide */
+    public static boolean sUseRenderThread = true;
 
     private boolean mEnabled;
     private boolean mRequested = true;
@@ -282,11 +234,11 @@
     abstract void updateSurface(Surface surface) throws OutOfResourcesException;
 
     /**
-     * Destroys the layers used by the specified view hierarchy.
-     *
-     * @param view The root of the view hierarchy
+     * Stops any rendering into the surface. Use this if it is unclear whether
+     * or not the surface used by the HardwareRenderer will be changing. It
+     * Suspends any rendering into the surface, but will not do any destruction
      */
-    abstract void destroyLayers(View view);
+    abstract void pauseSurface(Surface surface);
 
     /**
      * Destroys all hardware rendering resources associated with the specified
@@ -305,15 +257,6 @@
     abstract void invalidate(Surface surface);
 
     /**
-     * This method should be invoked to ensure the hardware renderer is in
-     * valid state (for instance, to ensure the correct EGL context is bound
-     * to the current thread.)
-     *
-     * @return true if the renderer is now valid, false otherwise
-     */
-    abstract boolean validate();
-
-    /**
      * This method ensures the hardware renderer is in a valid state
      * before executing the specified action.
      *
@@ -350,13 +293,6 @@
     abstract int getHeight();
 
     /**
-     * Gets the current canvas associated with this HardwareRenderer.
-     *
-     * @return the current HardwareCanvas
-     */
-    abstract HardwareCanvas getCanvas();
-
-    /**
      * Outputs extra debugging information in the specified file descriptor.
      * @param pw
      */
@@ -379,9 +315,7 @@
      *
      * @return True if a property has changed.
      */
-    abstract boolean loadSystemProperties(Surface surface);
-
-    private static native boolean nLoadProperties();
+    abstract boolean loadSystemProperties();
 
     /**
      * Sets the directory to use as a persistent storage for hardware rendering
@@ -392,60 +326,9 @@
      * @hide
      */
     public static void setupDiskCache(File cacheDir) {
-        nSetupShadersDiskCache(new File(cacheDir, CACHE_PATH_SHADERS).getAbsolutePath());
+        GLRenderer.setupShadersDiskCache(new File(cacheDir, CACHE_PATH_SHADERS).getAbsolutePath());
     }
 
-    private static native void nSetupShadersDiskCache(String cacheFile);
-
-    /**
-     * Notifies EGL that the frame is about to be rendered.
-     * @param size
-     */
-    static void beginFrame(int[] size) {
-        nBeginFrame(size);
-    }
-
-    private static native void nBeginFrame(int[] size);
-
-    /**
-     * Returns the current system time according to the renderer.
-     * This method is used for debugging only and should not be used
-     * as a clock.
-     */
-    static long getSystemTime() {
-        return nGetSystemTime();
-    }
-
-    private static native long nGetSystemTime();
-
-    /**
-     * Preserves the back buffer of the current surface after a buffer swap.
-     * Calling this method sets the EGL_SWAP_BEHAVIOR attribute of the current
-     * surface to EGL_BUFFER_PRESERVED. Calling this method requires an EGL
-     * config that supports EGL_SWAP_BEHAVIOR_PRESERVED_BIT.
-     *
-     * @return True if the swap behavior was successfully changed,
-     *         false otherwise.
-     */
-    static boolean preserveBackBuffer() {
-        return nPreserveBackBuffer();
-    }
-
-    private static native boolean nPreserveBackBuffer();
-
-    /**
-     * Indicates whether the current surface preserves its back buffer
-     * after a buffer swap.
-     *
-     * @return True, if the surface's EGL_SWAP_BEHAVIOR is EGL_BUFFER_PRESERVED,
-     *         false otherwise
-     */
-    static boolean isBackBufferPreserved() {
-        return nIsBackBufferPreserved();
-    }
-
-    private static native boolean nIsBackBufferPreserved();
-
     /**
      * Indicates that the specified hardware layer needs to be updated
      * as soon as possible.
@@ -453,19 +336,20 @@
      * @param layer The hardware layer that needs an update
      *
      * @see #flushLayerUpdates()
-     * @see #cancelLayerUpdate(HardwareLayer)
      */
     abstract void pushLayerUpdate(HardwareLayer layer);
 
     /**
-     * Cancels a queued layer update. If the specified layer was not
-     * queued for update, this method has no effect.
-     *
-     * @param layer The layer whose update to cancel
-     *
-     * @see #pushLayerUpdate(HardwareLayer)
+     * Tells the HardwareRenderer that a layer was created. The renderer should
+     * make sure to apply any pending layer changes at the start of a new frame
      */
-    abstract void cancelLayerUpdate(HardwareLayer layer);
+    abstract void onLayerCreated(HardwareLayer hardwareLayer);
+
+    /**
+     * Tells the HardwareRenderer that the layer is destroyed. The renderer
+     * should remove the layer from any update queues.
+     */
+    abstract void onLayerDestroyed(HardwareLayer layer);
 
     /**
      * Forces all enqueued layer updates to be executed immediately.
@@ -509,37 +393,22 @@
             Rect dirty);
 
     /**
-     * Creates a new display list that can be used to record batches of
-     * drawing operations.
-     *
-     * @param name The name of the display list, used for debugging purpose. May be null.
-     *
-     * @return A new display list.
-     *
-     * @hide
-     */
-    public abstract DisplayList createDisplayList(String name);
-
-    /**
      * Creates a new hardware layer. A hardware layer built by calling this
      * method will be treated as a texture layer, instead of as a render target.
      *
-     * @param isOpaque Whether the layer should be opaque or not
-     *
      * @return A hardware layer
      */
-    abstract HardwareLayer createHardwareLayer(boolean isOpaque);
+    abstract HardwareLayer createTextureLayer();
 
     /**
      * Creates a new hardware layer.
      *
      * @param width The minimum width of the layer
      * @param height The minimum height of the layer
-     * @param isOpaque Whether the layer should be opaque or not
      *
      * @return A hardware layer
      */
-    abstract HardwareLayer createHardwareLayer(int width, int height, boolean isOpaque);
+    abstract HardwareLayer createDisplayListLayer(int width, int height);
 
     /**
      * Creates a new {@link SurfaceTexture} that can be used to render into the
@@ -551,14 +420,7 @@
      */
     abstract SurfaceTexture createSurfaceTexture(HardwareLayer layer);
 
-    /**
-     * Sets the {@link android.graphics.SurfaceTexture} that will be used to
-     * render into the specified hardware layer.
-     *
-     * @param layer The layer to render into using a {@link android.graphics.SurfaceTexture}
-     * @param surfaceTexture The {@link android.graphics.SurfaceTexture} to use for the layer
-     */
-    abstract void setSurfaceTexture(HardwareLayer layer, SurfaceTexture surfaceTexture);
+    abstract boolean copyLayerInto(HardwareLayer layer, Bitmap bitmap);
 
     /**
      * Detaches the specified functor from the current functor execution queue.
@@ -566,7 +428,7 @@
      * @param functor The native functor to remove from the execution queue.
      *
      * @see HardwareCanvas#callDrawGLFunction(int)
-     * @see #attachFunctor(android.view.View.AttachInfo, int)
+     * @see #attachFunctor(android.view.View.AttachInfo, long)
      */
     abstract void detachFunctor(long functor);
 
@@ -577,11 +439,21 @@
      * @param functor The native functor to insert in the execution queue.
      *
      * @see HardwareCanvas#callDrawGLFunction(int)
-     * @see #detachFunctor(int)
+     * @see #detachFunctor(long)
      *
-     * @return true if the functor was attached successfully
      */
-    abstract boolean attachFunctor(View.AttachInfo attachInfo, long functor);
+    abstract void attachFunctor(View.AttachInfo attachInfo, long functor);
+
+    /**
+     * Schedules the functor for execution in either kModeProcess or
+     * kModeProcessNoContext, depending on whether or not there is an EGLContext.
+     *
+     * @param functor The native functor to invoke
+     * @param waitForCompletion If true, this will not return until the functor
+     *                          has invoked. If false, the functor may be invoked
+     *                          asynchronously.
+     */
+    abstract void invokeFunctor(long functor, boolean waitForCompletion);
 
     /**
      * Initializes the hardware renderer for the specified surface and setup the
@@ -621,17 +493,20 @@
     /**
      * Creates a hardware renderer using OpenGL.
      *
-     * @param glVersion The version of OpenGL to use (1 for OpenGL 1, 11 for OpenGL 1.1, etc.)
      * @param translucent True if the surface is translucent, false otherwise
      *
      * @return A hardware renderer backed by OpenGL.
      */
-    static HardwareRenderer createGlRenderer(int glVersion, boolean translucent) {
-        switch (glVersion) {
-            case 2:
-                return Gl20Renderer.create(translucent);
+    static HardwareRenderer create(boolean translucent) {
+        HardwareRenderer renderer = null;
+        if (GLES20Canvas.isAvailable()) {
+            if (sUseRenderThread) {
+                renderer = new ThreadedRenderer(translucent);
+            } else {
+                renderer = new GLRenderer(translucent);
+            }
         }
-        throw new IllegalArgumentException("Unknown GL version: " + glVersion);
+        return renderer;
     }
 
     /**
@@ -656,7 +531,7 @@
      *              see {@link android.content.ComponentCallbacks}
      */
     static void startTrimMemory(int level) {
-        Gl20Renderer.startTrimMemory(level);
+        GLRenderer.startTrimMemory(level);
     }
 
     /**
@@ -664,7 +539,7 @@
      * cleanup special resources used by the memory trimming process.
      */
     static void endTrimMemory() {
-        Gl20Renderer.endTrimMemory();
+        GLRenderer.endTrimMemory();
     }
 
     /**
@@ -706,6 +581,11 @@
     }
 
     /**
+     * Blocks until all previously queued work has completed.
+     */
+    abstract void fence();
+
+    /**
      * Describes a series of frames that should be drawn on screen as a graph.
      * Each frame is composed of 1 or more elements.
      */
@@ -798,1553 +678,4 @@
          */
         abstract void setupCurrentFramePaint(Paint paint);
     }
-
-    @SuppressWarnings({"deprecation"})
-    static abstract class GlRenderer extends HardwareRenderer {
-        static final int SURFACE_STATE_ERROR = 0;
-        static final int SURFACE_STATE_SUCCESS = 1;
-        static final int SURFACE_STATE_UPDATED = 2;
-
-        static final int FUNCTOR_PROCESS_DELAY = 4;
-
-        private static final int PROFILE_DRAW_MARGIN = 0;
-        private static final int PROFILE_DRAW_WIDTH = 3;
-        private static final int[] PROFILE_DRAW_COLORS = { 0xcf3e66cc, 0xcfdc3912, 0xcfe69800 };
-        private static final int PROFILE_DRAW_CURRENT_FRAME_COLOR = 0xcf5faa4d;
-        private static final int PROFILE_DRAW_THRESHOLD_COLOR = 0xff5faa4d;
-        private static final int PROFILE_DRAW_THRESHOLD_STROKE_WIDTH = 2;
-        private static final int PROFILE_DRAW_DP_PER_MS = 7;
-
-        private static final String[] VISUALIZERS = {
-                PROFILE_PROPERTY_VISUALIZE_BARS,
-                PROFILE_PROPERTY_VISUALIZE_LINES
-        };
-
-        private static final String[] OVERDRAW = {
-                OVERDRAW_PROPERTY_SHOW,
-                OVERDRAW_PROPERTY_COUNT
-        };
-        private static final int OVERDRAW_TYPE_COUNT = 1;
-
-        static EGL10 sEgl;
-        static EGLDisplay sEglDisplay;
-        static EGLConfig sEglConfig;
-        static final Object[] sEglLock = new Object[0];
-        int mWidth = -1, mHeight = -1;
-
-        static final ThreadLocal<ManagedEGLContext> sEglContextStorage
-                = new ThreadLocal<ManagedEGLContext>();
-
-        EGLContext mEglContext;
-        Thread mEglThread;
-
-        EGLSurface mEglSurface;
-
-        GL mGl;
-        HardwareCanvas mCanvas;
-
-        String mName;
-
-        long mFrameCount;
-        Paint mDebugPaint;
-
-        static boolean sDirtyRegions;
-        static final boolean sDirtyRegionsRequested;
-        static {
-            String dirtyProperty = SystemProperties.get(RENDER_DIRTY_REGIONS_PROPERTY, "true");
-            //noinspection PointlessBooleanExpression,ConstantConditions
-            sDirtyRegions = RENDER_DIRTY_REGIONS && "true".equalsIgnoreCase(dirtyProperty);
-            sDirtyRegionsRequested = sDirtyRegions;
-        }
-
-        boolean mDirtyRegionsEnabled;
-        boolean mUpdateDirtyRegions;
-
-        boolean mProfileEnabled;
-        int mProfileVisualizerType = -1;
-        float[] mProfileData;
-        ReentrantLock mProfileLock;
-        int mProfileCurrentFrame = -PROFILE_FRAME_DATA_COUNT;
-
-        GraphDataProvider mDebugDataProvider;
-        float[][] mProfileShapes;
-        Paint mProfilePaint;
-
-        boolean mDebugDirtyRegions;
-        int mDebugOverdraw = -1;
-        HardwareLayer mDebugOverdrawLayer;
-        Paint mDebugOverdrawPaint;
-
-        final int mGlVersion;
-        final boolean mTranslucent;
-
-        private boolean mDestroyed;
-
-        private final Rect mRedrawClip = new Rect();
-
-        private final int[] mSurfaceSize = new int[2];
-        private final FunctorsRunnable mFunctorsRunnable = new FunctorsRunnable();
-
-        private long mDrawDelta = Long.MAX_VALUE;
-
-        GlRenderer(int glVersion, boolean translucent) {
-            mGlVersion = glVersion;
-            mTranslucent = translucent;
-
-            loadSystemProperties(null);
-        }
-
-        @Override
-        boolean loadSystemProperties(Surface surface) {
-            boolean value;
-            boolean changed = false;
-
-            String profiling = SystemProperties.get(PROFILE_PROPERTY);
-            int graphType = search(VISUALIZERS, profiling);
-            value = graphType >= 0;
-
-            if (graphType != mProfileVisualizerType) {
-                changed = true;
-                mProfileVisualizerType = graphType;
-
-                mProfileShapes = null;
-                mProfilePaint = null;
-
-                if (value) {
-                    mDebugDataProvider = new DrawPerformanceDataProvider(graphType);
-                } else {
-                    mDebugDataProvider = null;
-                }
-            }
-
-            // If on-screen profiling is not enabled, we need to check whether
-            // console profiling only is enabled
-            if (!value) {
-                value = Boolean.parseBoolean(profiling);
-            }
-
-            if (value != mProfileEnabled) {
-                changed = true;
-                mProfileEnabled = value;
-
-                if (mProfileEnabled) {
-                    Log.d(LOG_TAG, "Profiling hardware renderer");
-
-                    int maxProfileFrames = SystemProperties.getInt(PROFILE_MAXFRAMES_PROPERTY,
-                            PROFILE_MAX_FRAMES);
-                    mProfileData = new float[maxProfileFrames * PROFILE_FRAME_DATA_COUNT];
-                    for (int i = 0; i < mProfileData.length; i += PROFILE_FRAME_DATA_COUNT) {
-                        mProfileData[i] = mProfileData[i + 1] = mProfileData[i + 2] = -1;
-                    }
-
-                    mProfileLock = new ReentrantLock();
-                } else {
-                    mProfileData = null;
-                    mProfileLock = null;
-                    mProfileVisualizerType = -1;
-                }
-
-                mProfileCurrentFrame = -PROFILE_FRAME_DATA_COUNT;
-            }
-
-            value = SystemProperties.getBoolean(DEBUG_DIRTY_REGIONS_PROPERTY, false);
-            if (value != mDebugDirtyRegions) {
-                changed = true;
-                mDebugDirtyRegions = value;
-
-                if (mDebugDirtyRegions) {
-                    Log.d(LOG_TAG, "Debugging dirty regions");
-                }
-            }
-
-            String overdraw = SystemProperties.get(HardwareRenderer.DEBUG_OVERDRAW_PROPERTY);
-            int debugOverdraw = search(OVERDRAW, overdraw);
-            if (debugOverdraw != mDebugOverdraw) {
-                changed = true;
-                mDebugOverdraw = debugOverdraw;
-
-                if (mDebugOverdraw != OVERDRAW_TYPE_COUNT) {
-                    if (mDebugOverdrawLayer != null) {
-                        mDebugOverdrawLayer.destroy();
-                        mDebugOverdrawLayer = null;
-                        mDebugOverdrawPaint = null;
-                    }
-                }
-            }
-
-            if (nLoadProperties()) {
-                changed = true;
-            }
-
-            return changed;
-        }
-
-        private static int search(String[] values, String value) {
-            for (int i = 0; i < values.length; i++) {
-                if (values[i].equals(value)) return i;
-            }
-            return -1;
-        }
-
-        @Override
-        void dumpGfxInfo(PrintWriter pw) {
-            if (mProfileEnabled) {
-                pw.printf("\n\tDraw\tProcess\tExecute\n");
-
-                mProfileLock.lock();
-                try {
-                    for (int i = 0; i < mProfileData.length; i += PROFILE_FRAME_DATA_COUNT) {
-                        if (mProfileData[i] < 0) {
-                            break;
-                        }
-                        pw.printf("\t%3.2f\t%3.2f\t%3.2f\n", mProfileData[i], mProfileData[i + 1],
-                                mProfileData[i + 2]);
-                        mProfileData[i] = mProfileData[i + 1] = mProfileData[i + 2] = -1;
-                    }
-                    mProfileCurrentFrame = mProfileData.length;
-                } finally {
-                    mProfileLock.unlock();
-                }
-            }
-        }
-
-        @Override
-        long getFrameCount() {
-            return mFrameCount;
-        }
-
-        /**
-         * Indicates whether this renderer instance can track and update dirty regions.
-         */
-        boolean hasDirtyRegions() {
-            return mDirtyRegionsEnabled;
-        }
-
-        /**
-         * Checks for OpenGL errors. If an error has occured, {@link #destroy(boolean)}
-         * is invoked and the requested flag is turned off. The error code is
-         * also logged as a warning.
-         */
-        void checkEglErrors() {
-            if (isEnabled()) {
-                checkEglErrorsForced();
-            }
-        }
-
-        private void checkEglErrorsForced() {
-            int error = sEgl.eglGetError();
-            if (error != EGL_SUCCESS) {
-                // something bad has happened revert to
-                // normal rendering.
-                Log.w(LOG_TAG, "EGL error: " + GLUtils.getEGLErrorString(error));
-                fallback(error != EGL11.EGL_CONTEXT_LOST);
-            }
-        }
-
-        private void fallback(boolean fallback) {
-            destroy(true);
-            if (fallback) {
-                // we'll try again if it was context lost
-                setRequested(false);
-                Log.w(LOG_TAG, "Mountain View, we've had a problem here. "
-                        + "Switching back to software rendering.");
-            }
-        }
-
-        @Override
-        boolean initialize(Surface surface) throws OutOfResourcesException {
-            if (isRequested() && !isEnabled()) {
-                boolean contextCreated = initializeEgl();
-                mGl = createEglSurface(surface);
-                mDestroyed = false;
-
-                if (mGl != null) {
-                    int err = sEgl.eglGetError();
-                    if (err != EGL_SUCCESS) {
-                        destroy(true);
-                        setRequested(false);
-                    } else {
-                        if (mCanvas == null) {
-                            mCanvas = createCanvas();
-                            mCanvas.setName(mName);
-                        }
-                        setEnabled(true);
-
-                        if (contextCreated) {
-                            initAtlas();
-                        }
-                    }
-
-                    return mCanvas != null;
-                }
-            }
-            return false;
-        }
-
-        @Override
-        void updateSurface(Surface surface) throws OutOfResourcesException {
-            if (isRequested() && isEnabled()) {
-                createEglSurface(surface);
-            }
-        }
-
-        abstract HardwareCanvas createCanvas();
-
-        abstract int[] getConfig(boolean dirtyRegions);
-
-        boolean initializeEgl() {
-            synchronized (sEglLock) {
-                if (sEgl == null && sEglConfig == null) {
-                    sEgl = (EGL10) EGLContext.getEGL();
-
-                    // Get to the default display.
-                    sEglDisplay = sEgl.eglGetDisplay(EGL_DEFAULT_DISPLAY);
-
-                    if (sEglDisplay == EGL_NO_DISPLAY) {
-                        throw new RuntimeException("eglGetDisplay failed "
-                                + GLUtils.getEGLErrorString(sEgl.eglGetError()));
-                    }
-
-                    // We can now initialize EGL for that display
-                    int[] version = new int[2];
-                    if (!sEgl.eglInitialize(sEglDisplay, version)) {
-                        throw new RuntimeException("eglInitialize failed " +
-                                GLUtils.getEGLErrorString(sEgl.eglGetError()));
-                    }
-
-                    checkEglErrorsForced();
-
-                    sEglConfig = loadEglConfig();
-                }
-            }
-
-            ManagedEGLContext managedContext = sEglContextStorage.get();
-            mEglContext = managedContext != null ? managedContext.getContext() : null;
-            mEglThread = Thread.currentThread();
-
-            if (mEglContext == null) {
-                mEglContext = createContext(sEgl, sEglDisplay, sEglConfig);
-                sEglContextStorage.set(createManagedContext(mEglContext));
-                return true;
-            }
-
-            return false;
-        }
-
-        private EGLConfig loadEglConfig() {
-            EGLConfig eglConfig = chooseEglConfig();
-            if (eglConfig == null) {
-                // We tried to use EGL_SWAP_BEHAVIOR_PRESERVED_BIT, try again without
-                if (sDirtyRegions) {
-                    sDirtyRegions = false;
-                    eglConfig = chooseEglConfig();
-                    if (eglConfig == null) {
-                        throw new RuntimeException("eglConfig not initialized");
-                    }
-                } else {
-                    throw new RuntimeException("eglConfig not initialized");
-                }
-            }
-            return eglConfig;
-        }
-
-        abstract ManagedEGLContext createManagedContext(EGLContext eglContext);
-
-        private EGLConfig chooseEglConfig() {
-            EGLConfig[] configs = new EGLConfig[1];
-            int[] configsCount = new int[1];
-            int[] configSpec = getConfig(sDirtyRegions);
-
-            // Debug
-            final String debug = SystemProperties.get(PRINT_CONFIG_PROPERTY, "");
-            if ("all".equalsIgnoreCase(debug)) {
-                sEgl.eglChooseConfig(sEglDisplay, configSpec, null, 0, configsCount);
-
-                EGLConfig[] debugConfigs = new EGLConfig[configsCount[0]];
-                sEgl.eglChooseConfig(sEglDisplay, configSpec, debugConfigs,
-                        configsCount[0], configsCount);
-
-                for (EGLConfig config : debugConfigs) {
-                    printConfig(config);
-                }
-            }
-
-            if (!sEgl.eglChooseConfig(sEglDisplay, configSpec, configs, 1, configsCount)) {
-                throw new IllegalArgumentException("eglChooseConfig failed " +
-                        GLUtils.getEGLErrorString(sEgl.eglGetError()));
-            } else if (configsCount[0] > 0) {
-                if ("choice".equalsIgnoreCase(debug)) {
-                    printConfig(configs[0]);
-                }
-                return configs[0];
-            }
-
-            return null;
-        }
-
-        private static void printConfig(EGLConfig config) {
-            int[] value = new int[1];
-
-            Log.d(LOG_TAG, "EGL configuration " + config + ":");
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_RED_SIZE, value);
-            Log.d(LOG_TAG, "  RED_SIZE = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_GREEN_SIZE, value);
-            Log.d(LOG_TAG, "  GREEN_SIZE = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_BLUE_SIZE, value);
-            Log.d(LOG_TAG, "  BLUE_SIZE = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_ALPHA_SIZE, value);
-            Log.d(LOG_TAG, "  ALPHA_SIZE = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_DEPTH_SIZE, value);
-            Log.d(LOG_TAG, "  DEPTH_SIZE = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_STENCIL_SIZE, value);
-            Log.d(LOG_TAG, "  STENCIL_SIZE = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_SAMPLE_BUFFERS, value);
-            Log.d(LOG_TAG, "  SAMPLE_BUFFERS = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_SAMPLES, value);
-            Log.d(LOG_TAG, "  SAMPLES = " + value[0]);
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_SURFACE_TYPE, value);
-            Log.d(LOG_TAG, "  SURFACE_TYPE = 0x" + Integer.toHexString(value[0]));
-
-            sEgl.eglGetConfigAttrib(sEglDisplay, config, EGL_CONFIG_CAVEAT, value);
-            Log.d(LOG_TAG, "  CONFIG_CAVEAT = 0x" + Integer.toHexString(value[0]));
-        }
-
-        GL createEglSurface(Surface surface) throws OutOfResourcesException {
-            // Check preconditions.
-            if (sEgl == null) {
-                throw new RuntimeException("egl not initialized");
-            }
-            if (sEglDisplay == null) {
-                throw new RuntimeException("eglDisplay not initialized");
-            }
-            if (sEglConfig == null) {
-                throw new RuntimeException("eglConfig not initialized");
-            }
-            if (Thread.currentThread() != mEglThread) {
-                throw new IllegalStateException("HardwareRenderer cannot be used "
-                        + "from multiple threads");
-            }
-
-            // In case we need to destroy an existing surface
-            destroySurface();
-
-            // Create an EGL surface we can render into.
-            if (!createSurface(surface)) {
-                return null;
-            }
-
-            initCaches();
-
-            return mEglContext.getGL();
-        }
-
-        private void enableDirtyRegions() {
-            // If mDirtyRegions is set, this means we have an EGL configuration
-            // with EGL_SWAP_BEHAVIOR_PRESERVED_BIT set
-            if (sDirtyRegions) {
-                if (!(mDirtyRegionsEnabled = preserveBackBuffer())) {
-                    Log.w(LOG_TAG, "Backbuffer cannot be preserved");
-                }
-            } else if (sDirtyRegionsRequested) {
-                // If mDirtyRegions is not set, our EGL configuration does not
-                // have EGL_SWAP_BEHAVIOR_PRESERVED_BIT; however, the default
-                // swap behavior might be EGL_BUFFER_PRESERVED, which means we
-                // want to set mDirtyRegions. We try to do this only if dirty
-                // regions were initially requested as part of the device
-                // configuration (see RENDER_DIRTY_REGIONS)
-                mDirtyRegionsEnabled = isBackBufferPreserved();
-            }
-        }
-
-        abstract void initCaches();
-        abstract void initAtlas();
-
-        EGLContext createContext(EGL10 egl, EGLDisplay eglDisplay, EGLConfig eglConfig) {
-            int[] attribs = { EGL14.EGL_CONTEXT_CLIENT_VERSION, mGlVersion, EGL_NONE };
-
-            EGLContext context = egl.eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT,
-                    mGlVersion != 0 ? attribs : null);
-            if (context == null || context == EGL_NO_CONTEXT) {
-                //noinspection ConstantConditions
-                throw new IllegalStateException(
-                        "Could not create an EGL context. eglCreateContext failed with error: " +
-                        GLUtils.getEGLErrorString(sEgl.eglGetError()));
-            }
-
-            return context;
-        }
-
-        @Override
-        void destroy(boolean full) {
-            if (full && mCanvas != null) {
-                mCanvas = null;
-            }
-
-            if (!isEnabled() || mDestroyed) {
-                setEnabled(false);
-                return;
-            }
-
-            destroySurface();
-            setEnabled(false);
-
-            mDestroyed = true;
-            mGl = null;
-        }
-
-        void destroySurface() {
-            if (mEglSurface != null && mEglSurface != EGL_NO_SURFACE) {
-                if (mEglSurface.equals(sEgl.eglGetCurrentSurface(EGL_DRAW))) {
-                    sEgl.eglMakeCurrent(sEglDisplay,
-                            EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-                }
-                sEgl.eglDestroySurface(sEglDisplay, mEglSurface);
-                mEglSurface = null;
-            }
-        }
-
-        @Override
-        void invalidate(Surface surface) {
-            // Cancels any existing buffer to ensure we'll get a buffer
-            // of the right size before we call eglSwapBuffers
-            sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-
-            if (mEglSurface != null && mEglSurface != EGL_NO_SURFACE) {
-                sEgl.eglDestroySurface(sEglDisplay, mEglSurface);
-                mEglSurface = null;
-                setEnabled(false);
-            }
-
-            if (surface.isValid()) {
-                if (!createSurface(surface)) {
-                    return;
-                }
-
-                mUpdateDirtyRegions = true;
-
-                if (mCanvas != null) {
-                    setEnabled(true);
-                }
-            }
-        }
-
-        private boolean createSurface(Surface surface) {
-            mEglSurface = sEgl.eglCreateWindowSurface(sEglDisplay, sEglConfig, surface, null);
-
-            if (mEglSurface == null || mEglSurface == EGL_NO_SURFACE) {
-                int error = sEgl.eglGetError();
-                if (error == EGL_BAD_NATIVE_WINDOW) {
-                    Log.e(LOG_TAG, "createWindowSurface returned EGL_BAD_NATIVE_WINDOW.");
-                    return false;
-                }
-                throw new RuntimeException("createWindowSurface failed "
-                        + GLUtils.getEGLErrorString(error));
-            }
-
-            if (!sEgl.eglMakeCurrent(sEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
-                throw new IllegalStateException("eglMakeCurrent failed " +
-                        GLUtils.getEGLErrorString(sEgl.eglGetError()));
-            }
-
-            enableDirtyRegions();
-
-            return true;
-        }
-
-        @Override
-        boolean validate() {
-            return checkRenderContext() != SURFACE_STATE_ERROR;
-        }
-
-        @Override
-        void setup(int width, int height) {
-            if (validate()) {
-                mCanvas.setViewport(width, height);
-                mWidth = width;
-                mHeight = height;
-            }
-        }
-
-        @Override
-        int getWidth() {
-            return mWidth;
-        }
-
-        @Override
-        int getHeight() {
-            return mHeight;
-        }
-
-        @Override
-        HardwareCanvas getCanvas() {
-            return mCanvas;
-        }
-
-        @Override
-        void setName(String name) {
-            mName = name;
-        }
-
-        boolean canDraw() {
-            return mGl != null && mCanvas != null;
-        }
-
-        int onPreDraw(Rect dirty) {
-            return DisplayList.STATUS_DONE;
-        }
-
-        void onPostDraw() {
-        }
-
-        class FunctorsRunnable implements Runnable {
-            View.AttachInfo attachInfo;
-
-            @Override
-            public void run() {
-                final HardwareRenderer renderer = attachInfo.mHardwareRenderer;
-                if (renderer == null || !renderer.isEnabled() || renderer != GlRenderer.this) {
-                    return;
-                }
-
-                if (checkRenderContext() != SURFACE_STATE_ERROR) {
-                    int status = mCanvas.invokeFunctors(mRedrawClip);
-                    handleFunctorStatus(attachInfo, status);
-                }
-            }
-        }
-
-        @Override
-        void draw(View view, View.AttachInfo attachInfo, HardwareDrawCallbacks callbacks,
-                Rect dirty) {
-            if (canDraw()) {
-                if (!hasDirtyRegions()) {
-                    dirty = null;
-                }
-                attachInfo.mIgnoreDirtyState = true;
-                attachInfo.mDrawingTime = SystemClock.uptimeMillis();
-
-                view.mPrivateFlags |= View.PFLAG_DRAWN;
-
-                // We are already on the correct thread
-                final int surfaceState = checkRenderContextUnsafe();
-                if (surfaceState != SURFACE_STATE_ERROR) {
-                    HardwareCanvas canvas = mCanvas;
-                    attachInfo.mHardwareCanvas = canvas;
-
-                    if (mProfileEnabled) {
-                        mProfileLock.lock();
-                    }
-
-                    dirty = beginFrame(canvas, dirty, surfaceState);
-
-                    DisplayList displayList = buildDisplayList(view, canvas);
-
-                    // buildDisplayList() calls into user code which can cause
-                    // an eglMakeCurrent to happen with a different surface/context.
-                    // We must therefore check again here.
-                    if (checkRenderContextUnsafe() == SURFACE_STATE_ERROR) {
-                        return;
-                    }
-
-                    int saveCount = 0;
-                    int status = DisplayList.STATUS_DONE;
-
-                    long start = getSystemTime();
-                    try {
-                        status = prepareFrame(dirty);
-
-                        saveCount = canvas.save();
-                        callbacks.onHardwarePreDraw(canvas);
-
-                        if (displayList != null) {
-                            status |= drawDisplayList(attachInfo, canvas, displayList, status);
-                        } else {
-                            // Shouldn't reach here
-                            view.draw(canvas);
-                        }
-                    } catch (Exception e) {
-                        Log.e(LOG_TAG, "An error has occurred while drawing:", e);
-                    } finally {
-                        callbacks.onHardwarePostDraw(canvas);
-                        canvas.restoreToCount(saveCount);
-                        view.mRecreateDisplayList = false;
-
-                        mDrawDelta = getSystemTime() - start;
-
-                        if (mDrawDelta > 0) {
-                            mFrameCount++;
-
-                            debugOverdraw(attachInfo, dirty, canvas, displayList);
-                            debugDirtyRegions(dirty, canvas);
-                            drawProfileData(attachInfo);
-                        }
-                    }
-
-                    onPostDraw();
-
-                    swapBuffers(status);
-
-                    if (mProfileEnabled) {
-                        mProfileLock.unlock();
-                    }
-
-                    attachInfo.mIgnoreDirtyState = false;
-                }
-            }
-        }
-
-        abstract void countOverdraw(HardwareCanvas canvas);
-        abstract float getOverdraw(HardwareCanvas canvas);
-
-        private void debugOverdraw(View.AttachInfo attachInfo, Rect dirty,
-                HardwareCanvas canvas, DisplayList displayList) {
-
-            if (mDebugOverdraw == OVERDRAW_TYPE_COUNT) {
-                if (mDebugOverdrawLayer == null) {
-                    mDebugOverdrawLayer = createHardwareLayer(mWidth, mHeight, true);
-                } else if (mDebugOverdrawLayer.getWidth() != mWidth ||
-                        mDebugOverdrawLayer.getHeight() != mHeight) {
-                    mDebugOverdrawLayer.resize(mWidth, mHeight);
-                }
-
-                if (!mDebugOverdrawLayer.isValid()) {
-                    mDebugOverdraw = -1;
-                    return;
-                }
-
-                HardwareCanvas layerCanvas = mDebugOverdrawLayer.start(canvas, dirty);
-                countOverdraw(layerCanvas);
-                final int restoreCount = layerCanvas.save();
-                layerCanvas.drawDisplayList(displayList, null, DisplayList.FLAG_CLIP_CHILDREN);
-                layerCanvas.restoreToCount(restoreCount);
-                mDebugOverdrawLayer.end(canvas);
-
-                float overdraw = getOverdraw(layerCanvas);
-                DisplayMetrics metrics = attachInfo.mRootView.getResources().getDisplayMetrics();
-
-                drawOverdrawCounter(canvas, overdraw, metrics.density);
-            }
-        }
-
-        private void drawOverdrawCounter(HardwareCanvas canvas, float overdraw, float density) {
-            final String text = String.format("%.2fx", overdraw);
-            final Paint paint = setupPaint(density);
-            // HSBtoColor will clamp the values in the 0..1 range
-            paint.setColor(Color.HSBtoColor(0.28f - 0.28f * overdraw / 3.5f, 0.8f, 1.0f));
-
-            canvas.drawText(text, density * 4.0f, mHeight - paint.getFontMetrics().bottom, paint);
-        }
-
-        private Paint setupPaint(float density) {
-            if (mDebugOverdrawPaint == null) {
-                mDebugOverdrawPaint = new Paint();
-                mDebugOverdrawPaint.setAntiAlias(true);
-                mDebugOverdrawPaint.setShadowLayer(density * 3.0f, 0.0f, 0.0f, 0xff000000);
-                mDebugOverdrawPaint.setTextSize(density * 20.0f);
-            }
-            return mDebugOverdrawPaint;
-        }
-
-        private DisplayList buildDisplayList(View view, HardwareCanvas canvas) {
-            if (mDrawDelta <= 0) {
-                return view.mDisplayList;
-            }
-
-            view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED)
-                    == View.PFLAG_INVALIDATED;
-            view.mPrivateFlags &= ~View.PFLAG_INVALIDATED;
-
-            long buildDisplayListStartTime = startBuildDisplayListProfiling();
-            canvas.clearLayerUpdates();
-
-            Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList");
-            DisplayList displayList = view.getDisplayList();
-            Trace.traceEnd(Trace.TRACE_TAG_VIEW);
-
-            endBuildDisplayListProfiling(buildDisplayListStartTime);
-
-            return displayList;
-        }
-
-        abstract void drawProfileData(View.AttachInfo attachInfo);
-
-        private Rect beginFrame(HardwareCanvas canvas, Rect dirty, int surfaceState) {
-            // We had to change the current surface and/or context, redraw everything
-            if (surfaceState == SURFACE_STATE_UPDATED) {
-                dirty = null;
-                beginFrame(null);
-            } else {
-                int[] size = mSurfaceSize;
-                beginFrame(size);
-
-                if (size[1] != mHeight || size[0] != mWidth) {
-                    mWidth = size[0];
-                    mHeight = size[1];
-
-                    canvas.setViewport(mWidth, mHeight);
-
-                    dirty = null;
-                }
-            }
-
-            if (mDebugDataProvider != null) dirty = null;
-
-            return dirty;
-        }
-
-        private long startBuildDisplayListProfiling() {
-            if (mProfileEnabled) {
-                mProfileCurrentFrame += PROFILE_FRAME_DATA_COUNT;
-                if (mProfileCurrentFrame >= mProfileData.length) {
-                    mProfileCurrentFrame = 0;
-                }
-
-                return System.nanoTime();
-            }
-            return 0;
-        }
-
-        private void endBuildDisplayListProfiling(long getDisplayListStartTime) {
-            if (mProfileEnabled) {
-                long now = System.nanoTime();
-                float total = (now - getDisplayListStartTime) * 0.000001f;
-                //noinspection PointlessArithmeticExpression
-                mProfileData[mProfileCurrentFrame] = total;
-            }
-        }
-
-        private int prepareFrame(Rect dirty) {
-            int status;
-            Trace.traceBegin(Trace.TRACE_TAG_VIEW, "prepareFrame");
-            try {
-                status = onPreDraw(dirty);
-            } finally {
-                Trace.traceEnd(Trace.TRACE_TAG_VIEW);
-            }
-            return status;
-        }
-
-        private int drawDisplayList(View.AttachInfo attachInfo, HardwareCanvas canvas,
-                DisplayList displayList, int status) {
-
-            long drawDisplayListStartTime = 0;
-            if (mProfileEnabled) {
-                drawDisplayListStartTime = System.nanoTime();
-            }
-
-            Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawDisplayList");
-            try {
-                status |= canvas.drawDisplayList(displayList, mRedrawClip,
-                        DisplayList.FLAG_CLIP_CHILDREN);
-            } finally {
-                Trace.traceEnd(Trace.TRACE_TAG_VIEW);
-            }
-
-            if (mProfileEnabled) {
-                long now = System.nanoTime();
-                float total = (now - drawDisplayListStartTime) * 0.000001f;
-                mProfileData[mProfileCurrentFrame + 1] = total;
-            }
-
-            handleFunctorStatus(attachInfo, status);
-            return status;
-        }
-
-        private void swapBuffers(int status) {
-            if ((status & DisplayList.STATUS_DREW) == DisplayList.STATUS_DREW) {
-                long eglSwapBuffersStartTime = 0;
-                if (mProfileEnabled) {
-                    eglSwapBuffersStartTime = System.nanoTime();
-                }
-
-                sEgl.eglSwapBuffers(sEglDisplay, mEglSurface);
-
-                if (mProfileEnabled) {
-                    long now = System.nanoTime();
-                    float total = (now - eglSwapBuffersStartTime) * 0.000001f;
-                    mProfileData[mProfileCurrentFrame + 2] = total;
-                }
-
-                checkEglErrors();
-            }
-        }
-
-        private void debugDirtyRegions(Rect dirty, HardwareCanvas canvas) {
-            if (mDebugDirtyRegions) {
-                if (mDebugPaint == null) {
-                    mDebugPaint = new Paint();
-                    mDebugPaint.setColor(0x7fff0000);
-                }
-
-                if (dirty != null && (mFrameCount & 1) == 0) {
-                    canvas.drawRect(dirty, mDebugPaint);
-                }
-            }
-        }
-
-        private void handleFunctorStatus(View.AttachInfo attachInfo, int status) {
-            // If the draw flag is set, functors will be invoked while executing
-            // the tree of display lists
-            if ((status & DisplayList.STATUS_DRAW) != 0) {
-                if (mRedrawClip.isEmpty()) {
-                    attachInfo.mViewRootImpl.invalidate();
-                } else {
-                    attachInfo.mViewRootImpl.invalidateChildInParent(null, mRedrawClip);
-                    mRedrawClip.setEmpty();
-                }
-            }
-
-            if ((status & DisplayList.STATUS_INVOKE) != 0 ||
-                    attachInfo.mHandler.hasCallbacks(mFunctorsRunnable)) {
-                attachInfo.mHandler.removeCallbacks(mFunctorsRunnable);
-                mFunctorsRunnable.attachInfo = attachInfo;
-                attachInfo.mHandler.postDelayed(mFunctorsRunnable, FUNCTOR_PROCESS_DELAY);
-            }
-        }
-
-        @Override
-        void detachFunctor(long functor) {
-            if (mCanvas != null) {
-                mCanvas.detachFunctor(functor);
-            }
-        }
-
-        @Override
-        boolean attachFunctor(View.AttachInfo attachInfo, long functor) {
-            if (mCanvas != null) {
-                mCanvas.attachFunctor(functor);
-                mFunctorsRunnable.attachInfo = attachInfo;
-                attachInfo.mHandler.removeCallbacks(mFunctorsRunnable);
-                attachInfo.mHandler.postDelayed(mFunctorsRunnable,  0);
-                return true;
-            }
-            return false;
-        }
-
-        /**
-         * Ensures the current EGL context and surface are the ones we expect.
-         * This method throws an IllegalStateException if invoked from a thread
-         * that did not initialize EGL.
-         *
-         * @return {@link #SURFACE_STATE_ERROR} if the correct EGL context cannot be made current,
-         *         {@link #SURFACE_STATE_UPDATED} if the EGL context was changed or
-         *         {@link #SURFACE_STATE_SUCCESS} if the EGL context was the correct one
-         *
-         * @see #checkRenderContextUnsafe()
-         */
-        int checkRenderContext() {
-            if (mEglThread != Thread.currentThread()) {
-                throw new IllegalStateException("Hardware acceleration can only be used with a " +
-                        "single UI thread.\nOriginal thread: " + mEglThread + "\n" +
-                        "Current thread: " + Thread.currentThread());
-            }
-
-            return checkRenderContextUnsafe();
-        }
-
-        /**
-         * Ensures the current EGL context and surface are the ones we expect.
-         * This method does not check the current thread.
-         *
-         * @return {@link #SURFACE_STATE_ERROR} if the correct EGL context cannot be made current,
-         *         {@link #SURFACE_STATE_UPDATED} if the EGL context was changed or
-         *         {@link #SURFACE_STATE_SUCCESS} if the EGL context was the correct one
-         *
-         * @see #checkRenderContext()
-         */
-        private int checkRenderContextUnsafe() {
-            if (!mEglSurface.equals(sEgl.eglGetCurrentSurface(EGL_DRAW)) ||
-                    !mEglContext.equals(sEgl.eglGetCurrentContext())) {
-                if (!sEgl.eglMakeCurrent(sEglDisplay, mEglSurface, mEglSurface, mEglContext)) {
-                    Log.e(LOG_TAG, "eglMakeCurrent failed " +
-                            GLUtils.getEGLErrorString(sEgl.eglGetError()));
-                    fallback(true);
-                    return SURFACE_STATE_ERROR;
-                } else {
-                    if (mUpdateDirtyRegions) {
-                        enableDirtyRegions();
-                        mUpdateDirtyRegions = false;
-                    }
-                    return SURFACE_STATE_UPDATED;
-                }
-            }
-            return SURFACE_STATE_SUCCESS;
-        }
-
-        private static int dpToPx(int dp, float density) {
-            return (int) (dp * density + 0.5f);
-        }
-
-        class DrawPerformanceDataProvider extends GraphDataProvider {
-            private final int mGraphType;
-
-            private int mVerticalUnit;
-            private int mHorizontalUnit;
-            private int mHorizontalMargin;
-            private int mThresholdStroke;
-
-            DrawPerformanceDataProvider(int graphType) {
-                mGraphType = graphType;
-            }
-
-            @Override
-            void prepare(DisplayMetrics metrics) {
-                final float density = metrics.density;
-
-                mVerticalUnit = dpToPx(PROFILE_DRAW_DP_PER_MS, density);
-                mHorizontalUnit = dpToPx(PROFILE_DRAW_WIDTH, density);
-                mHorizontalMargin = dpToPx(PROFILE_DRAW_MARGIN, density);
-                mThresholdStroke = dpToPx(PROFILE_DRAW_THRESHOLD_STROKE_WIDTH, density);
-            }
-
-            @Override
-            int getGraphType() {
-                return mGraphType;
-            }
-
-            @Override
-            int getVerticalUnitSize() {
-                return mVerticalUnit;
-            }
-
-            @Override
-            int getHorizontalUnitSize() {
-                return mHorizontalUnit;
-            }
-
-            @Override
-            int getHorizontaUnitMargin() {
-                return mHorizontalMargin;
-            }
-
-            @Override
-            float[] getData() {
-                return mProfileData;
-            }
-
-            @Override
-            float getThreshold() {
-                return 16;
-            }
-
-            @Override
-            int getFrameCount() {
-                return mProfileData.length / PROFILE_FRAME_DATA_COUNT;
-            }
-
-            @Override
-            int getElementCount() {
-                return PROFILE_FRAME_DATA_COUNT;
-            }
-
-            @Override
-            int getCurrentFrame() {
-                return mProfileCurrentFrame / PROFILE_FRAME_DATA_COUNT;
-            }
-
-            @Override
-            void setupGraphPaint(Paint paint, int elementIndex) {
-                paint.setColor(PROFILE_DRAW_COLORS[elementIndex]);
-                if (mGraphType == GRAPH_TYPE_LINES) paint.setStrokeWidth(mThresholdStroke);
-            }
-
-            @Override
-            void setupThresholdPaint(Paint paint) {
-                paint.setColor(PROFILE_DRAW_THRESHOLD_COLOR);
-                paint.setStrokeWidth(mThresholdStroke);
-            }
-
-            @Override
-            void setupCurrentFramePaint(Paint paint) {
-                paint.setColor(PROFILE_DRAW_CURRENT_FRAME_COLOR);
-                if (mGraphType == GRAPH_TYPE_LINES) paint.setStrokeWidth(mThresholdStroke);
-            }
-        }
-    }
-
-    /**
-     * Hardware renderer using OpenGL ES 2.0.
-     */
-    static class Gl20Renderer extends GlRenderer {
-        private GLES20Canvas mGlCanvas;
-
-        private DisplayMetrics mDisplayMetrics;
-
-        private static EGLSurface sPbuffer;
-        private static final Object[] sPbufferLock = new Object[0];
-
-        static class Gl20RendererEglContext extends ManagedEGLContext {
-            final Handler mHandler = new Handler();
-
-            public Gl20RendererEglContext(EGLContext context) {
-                super(context);
-            }
-
-            @Override
-            public void onTerminate(final EGLContext eglContext) {
-                // Make sure we do this on the correct thread.
-                if (mHandler.getLooper() != Looper.myLooper()) {
-                    mHandler.post(new Runnable() {
-                        @Override
-                        public void run() {
-                            onTerminate(eglContext);
-                        }
-                    });
-                    return;
-                }
-
-                synchronized (sEglLock) {
-                    if (sEgl == null) return;
-
-                    if (EGLImpl.getInitCount(sEglDisplay) == 1) {
-                        usePbufferSurface(eglContext);
-                        GLES20Canvas.terminateCaches();
-
-                        sEgl.eglDestroyContext(sEglDisplay, eglContext);
-                        sEglContextStorage.set(null);
-                        sEglContextStorage.remove();
-
-                        sEgl.eglDestroySurface(sEglDisplay, sPbuffer);
-                        sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE,
-                                EGL_NO_SURFACE, EGL_NO_CONTEXT);
-
-                        sEgl.eglReleaseThread();
-                        sEgl.eglTerminate(sEglDisplay);
-
-                        sEgl = null;
-                        sEglDisplay = null;
-                        sEglConfig = null;
-                        sPbuffer = null;
-                    }
-                }
-            }
-        }
-
-        Gl20Renderer(boolean translucent) {
-            super(2, translucent);
-        }
-
-        @Override
-        HardwareCanvas createCanvas() {
-            return mGlCanvas = new GLES20Canvas(mTranslucent);
-        }
-
-        @Override
-        ManagedEGLContext createManagedContext(EGLContext eglContext) {
-            return new Gl20Renderer.Gl20RendererEglContext(mEglContext);
-        }
-
-        @Override
-        int[] getConfig(boolean dirtyRegions) {
-            //noinspection PointlessBooleanExpression,ConstantConditions
-            final int stencilSize = GLES20Canvas.getStencilSize();
-            final int swapBehavior = dirtyRegions ? EGL14.EGL_SWAP_BEHAVIOR_PRESERVED_BIT : 0;
-
-            return new int[] {
-                    EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT,
-                    EGL_RED_SIZE, 8,
-                    EGL_GREEN_SIZE, 8,
-                    EGL_BLUE_SIZE, 8,
-                    EGL_ALPHA_SIZE, 8,
-                    EGL_DEPTH_SIZE, 0,
-                    EGL_CONFIG_CAVEAT, EGL_NONE,
-                    EGL_STENCIL_SIZE, stencilSize,
-                    EGL_SURFACE_TYPE, EGL_WINDOW_BIT | swapBehavior,
-                    EGL_NONE
-            };
-        }
-
-        @Override
-        void initCaches() {
-            if (GLES20Canvas.initCaches()) {
-                // Caches were (re)initialized, rebind atlas
-                initAtlas();
-            }
-        }
-
-        @Override
-        void initAtlas() {
-            IBinder binder = ServiceManager.getService("assetatlas");
-            if (binder == null) return;
-
-            IAssetAtlas atlas = IAssetAtlas.Stub.asInterface(binder);
-            try {
-                if (atlas.isCompatible(android.os.Process.myPpid())) {
-                    GraphicBuffer buffer = atlas.getBuffer();
-                    if (buffer != null) {
-                        long[] map = atlas.getMap();
-                        if (map != null) {
-                            GLES20Canvas.initAtlas(buffer, map);
-                        }
-                        // If IAssetAtlas is not the same class as the IBinder
-                        // we are using a remote service and we can safely
-                        // destroy the graphic buffer
-                        if (atlas.getClass() != binder.getClass()) {
-                            buffer.destroy();
-                        }
-                    }
-                }
-            } catch (RemoteException e) {
-                Log.w(LOG_TAG, "Could not acquire atlas", e);
-            }
-        }
-
-        @Override
-        boolean canDraw() {
-            return super.canDraw() && mGlCanvas != null;
-        }
-
-        @Override
-        int onPreDraw(Rect dirty) {
-            return mGlCanvas.onPreDraw(dirty);
-        }
-
-        @Override
-        void onPostDraw() {
-            mGlCanvas.onPostDraw();
-        }
-
-        @Override
-        void drawProfileData(View.AttachInfo attachInfo) {
-            if (mDebugDataProvider != null) {
-                final GraphDataProvider provider = mDebugDataProvider;
-                initProfileDrawData(attachInfo, provider);
-
-                final int height = provider.getVerticalUnitSize();
-                final int margin = provider.getHorizontaUnitMargin();
-                final int width = provider.getHorizontalUnitSize();
-
-                int x = 0;
-                int count = 0;
-                int current = 0;
-
-                final float[] data = provider.getData();
-                final int elementCount = provider.getElementCount();
-                final int graphType = provider.getGraphType();
-
-                int totalCount = provider.getFrameCount() * elementCount;
-                if (graphType == GraphDataProvider.GRAPH_TYPE_LINES) {
-                    totalCount -= elementCount;
-                }
-
-                for (int i = 0; i < totalCount; i += elementCount) {
-                    if (data[i] < 0.0f) break;
-
-                    int index = count * 4;
-                    if (i == provider.getCurrentFrame() * elementCount) current = index;
-
-                    x += margin;
-                    int x2 = x + width;
-
-                    int y2 = mHeight;
-                    int y1 = (int) (y2 - data[i] * height);
-
-                    switch (graphType) {
-                        case GraphDataProvider.GRAPH_TYPE_BARS: {
-                            for (int j = 0; j < elementCount; j++) {
-                                //noinspection MismatchedReadAndWriteOfArray
-                                final float[] r = mProfileShapes[j];
-                                r[index] = x;
-                                r[index + 1] = y1;
-                                r[index + 2] = x2;
-                                r[index + 3] = y2;
-
-                                y2 = y1;
-                                if (j < elementCount - 1) {
-                                    y1 = (int) (y2 - data[i + j + 1] * height);
-                                }
-                            }
-                        } break;
-                        case GraphDataProvider.GRAPH_TYPE_LINES: {
-                            for (int j = 0; j < elementCount; j++) {
-                                //noinspection MismatchedReadAndWriteOfArray
-                                final float[] r = mProfileShapes[j];
-                                r[index] = (x + x2) * 0.5f;
-                                r[index + 1] = index == 0 ? y1 : r[index - 1];
-                                r[index + 2] = r[index] + width;
-                                r[index + 3] = y1;
-
-                                y2 = y1;
-                                if (j < elementCount - 1) {
-                                    y1 = (int) (y2 - data[i + j + 1] * height);
-                                }
-                            }
-                        } break;
-                    }
-
-
-                    x += width;
-                    count++;
-                }
-
-                x += margin;
-
-                drawGraph(graphType, count);
-                drawCurrentFrame(graphType, current);
-                drawThreshold(x, height);
-            }
-        }
-
-        private void drawGraph(int graphType, int count) {
-            for (int i = 0; i < mProfileShapes.length; i++) {
-                mDebugDataProvider.setupGraphPaint(mProfilePaint, i);
-                switch (graphType) {
-                    case GraphDataProvider.GRAPH_TYPE_BARS:
-                        mGlCanvas.drawRects(mProfileShapes[i], count * 4, mProfilePaint);
-                        break;
-                    case GraphDataProvider.GRAPH_TYPE_LINES:
-                        mGlCanvas.drawLines(mProfileShapes[i], 0, count * 4, mProfilePaint);
-                        break;
-                }
-            }
-        }
-
-        private void drawCurrentFrame(int graphType, int index) {
-            if (index >= 0) {
-                mDebugDataProvider.setupCurrentFramePaint(mProfilePaint);
-                switch (graphType) {
-                    case GraphDataProvider.GRAPH_TYPE_BARS:
-                        mGlCanvas.drawRect(mProfileShapes[2][index], mProfileShapes[2][index + 1],
-                                mProfileShapes[2][index + 2], mProfileShapes[0][index + 3],
-                                mProfilePaint);
-                        break;
-                    case GraphDataProvider.GRAPH_TYPE_LINES:
-                        mGlCanvas.drawLine(mProfileShapes[2][index], mProfileShapes[2][index + 1],
-                                mProfileShapes[2][index], mHeight, mProfilePaint);
-                        break;
-                }
-            }
-        }
-
-        private void drawThreshold(int x, int height) {
-            float threshold = mDebugDataProvider.getThreshold();
-            if (threshold > 0.0f) {
-                mDebugDataProvider.setupThresholdPaint(mProfilePaint);
-                int y = (int) (mHeight - threshold * height);
-                mGlCanvas.drawLine(0.0f, y, x, y, mProfilePaint);
-            }
-        }
-
-        private void initProfileDrawData(View.AttachInfo attachInfo, GraphDataProvider provider) {
-            if (mProfileShapes == null) {
-                final int elementCount = provider.getElementCount();
-                final int frameCount = provider.getFrameCount();
-
-                mProfileShapes = new float[elementCount][];
-                for (int i = 0; i < elementCount; i++) {
-                    mProfileShapes[i] = new float[frameCount * 4];
-                }
-
-                mProfilePaint = new Paint();
-            }
-
-            mProfilePaint.reset();
-            if (provider.getGraphType() == GraphDataProvider.GRAPH_TYPE_LINES) {
-                mProfilePaint.setAntiAlias(true);
-            }
-
-            if (mDisplayMetrics == null) {
-                mDisplayMetrics = new DisplayMetrics();
-            }
-
-            attachInfo.mDisplay.getMetrics(mDisplayMetrics);
-            provider.prepare(mDisplayMetrics);
-        }
-
-        @Override
-        void destroy(boolean full) {
-            try {
-                super.destroy(full);
-            } finally {
-                if (full && mGlCanvas != null) {
-                    mGlCanvas = null;
-                }
-            }
-        }
-
-        @Override
-        void pushLayerUpdate(HardwareLayer layer) {
-            mGlCanvas.pushLayerUpdate(layer);
-        }
-
-        @Override
-        void cancelLayerUpdate(HardwareLayer layer) {
-            mGlCanvas.cancelLayerUpdate(layer);
-        }
-
-        @Override
-        void flushLayerUpdates() {
-            mGlCanvas.flushLayerUpdates();
-        }
-
-        @Override
-        public DisplayList createDisplayList(String name) {
-            return new GLES20DisplayList(name);
-        }
-
-        @Override
-        HardwareLayer createHardwareLayer(boolean isOpaque) {
-            return new GLES20TextureLayer(isOpaque);
-        }
-
-        @Override
-        public HardwareLayer createHardwareLayer(int width, int height, boolean isOpaque) {
-            return new GLES20RenderLayer(width, height, isOpaque);
-        }
-
-        @Override
-        void countOverdraw(HardwareCanvas canvas) {
-            ((GLES20Canvas) canvas).setCountOverdrawEnabled(true);
-        }
-
-        @Override
-        float getOverdraw(HardwareCanvas canvas) {
-            return ((GLES20Canvas) canvas).getOverdraw();
-        }
-
-        @Override
-        public SurfaceTexture createSurfaceTexture(HardwareLayer layer) {
-            return ((GLES20TextureLayer) layer).getSurfaceTexture();
-        }
-
-        @Override
-        void setSurfaceTexture(HardwareLayer layer, SurfaceTexture surfaceTexture) {
-            ((GLES20TextureLayer) layer).setSurfaceTexture(surfaceTexture);
-        }
-
-        @Override
-        boolean safelyRun(Runnable action) {
-            boolean needsContext = !isEnabled() || checkRenderContext() == SURFACE_STATE_ERROR;
-
-            if (needsContext) {
-                Gl20RendererEglContext managedContext =
-                        (Gl20RendererEglContext) sEglContextStorage.get();
-                if (managedContext == null) return false;
-                usePbufferSurface(managedContext.getContext());
-            }
-
-            try {
-                action.run();
-            } finally {
-                if (needsContext) {
-                    sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE,
-                            EGL_NO_SURFACE, EGL_NO_CONTEXT);
-                }
-            }
-
-            return true;
-        }
-
-        @Override
-        void destroyLayers(final View view) {
-            if (view != null) {
-                safelyRun(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (mCanvas != null) {
-                            mCanvas.clearLayerUpdates();
-                        }
-                        destroyHardwareLayer(view);
-                        GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS);
-                    }
-                });
-            }
-        }
-
-        private static void destroyHardwareLayer(View view) {
-            view.destroyLayer(true);
-
-            if (view instanceof ViewGroup) {
-                ViewGroup group = (ViewGroup) view;
-
-                int count = group.getChildCount();
-                for (int i = 0; i < count; i++) {
-                    destroyHardwareLayer(group.getChildAt(i));
-                }
-            }
-        }
-
-        @Override
-        void destroyHardwareResources(final View view) {
-            if (view != null) {
-                safelyRun(new Runnable() {
-                    @Override
-                    public void run() {
-                        if (mCanvas != null) {
-                            mCanvas.clearLayerUpdates();
-                        }
-                        destroyResources(view);
-                        GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS);
-                    }
-                });
-            }
-        }
-
-        private static void destroyResources(View view) {
-            view.destroyHardwareResources();
-
-            if (view instanceof ViewGroup) {
-                ViewGroup group = (ViewGroup) view;
-
-                int count = group.getChildCount();
-                for (int i = 0; i < count; i++) {
-                    destroyResources(group.getChildAt(i));
-                }
-            }
-        }
-
-        static HardwareRenderer create(boolean translucent) {
-            if (GLES20Canvas.isAvailable()) {
-                return new Gl20Renderer(translucent);
-            }
-            return null;
-        }
-
-        static void startTrimMemory(int level) {
-            if (sEgl == null || sEglConfig == null) return;
-
-            Gl20RendererEglContext managedContext =
-                    (Gl20RendererEglContext) sEglContextStorage.get();
-            // We do not have OpenGL objects
-            if (managedContext == null) {
-                return;
-            } else {
-                usePbufferSurface(managedContext.getContext());
-            }
-
-            if (level >= ComponentCallbacks2.TRIM_MEMORY_COMPLETE) {
-                GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_FULL);
-            } else if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
-                GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_MODERATE);
-            }
-        }
-
-        static void endTrimMemory() {
-            if (sEgl != null && sEglDisplay != null) {
-                sEgl.eglMakeCurrent(sEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
-            }
-        }
-
-        private static void usePbufferSurface(EGLContext eglContext) {
-            synchronized (sPbufferLock) {
-                // Create a temporary 1x1 pbuffer so we have a context
-                // to clear our OpenGL objects
-                if (sPbuffer == null) {
-                    sPbuffer = sEgl.eglCreatePbufferSurface(sEglDisplay, sEglConfig, new int[] {
-                            EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE
-                    });
-                }
-            }
-            sEgl.eglMakeCurrent(sEglDisplay, sPbuffer, sPbuffer, eglContext);
-        }
-    }
 }
diff --git a/core/java/android/view/IMagnificationCallbacks.aidl b/core/java/android/view/IMagnificationCallbacks.aidl
deleted file mode 100644
index 032d073..0000000
--- a/core/java/android/view/IMagnificationCallbacks.aidl
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-** Copyright 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 android.view;
-
-import android.graphics.Region;
-
-/**
- * {@hide}
- */
-oneway interface IMagnificationCallbacks {
-    void onMagnifedBoundsChanged(in Region bounds);
-    void onRectangleOnScreenRequested(int left, int top, int right, int bottom);
-    void onRotationChanged(int rotation);
-    void onUserContextChanged();
-}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index c92a104..7d13399 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -27,7 +27,6 @@
 import android.os.Bundle;
 import android.os.IRemoteCallback;
 import android.view.IApplicationToken;
-import android.view.IMagnificationCallbacks;
 import android.view.IOnKeyguardExitResult;
 import android.view.IRotationWatcher;
 import android.view.IWindowSession;
@@ -38,6 +37,7 @@
 import android.view.InputChannel;
 import android.view.InputDevice;
 import android.view.IInputFilter;
+import android.view.WindowContentFrameStats;
 
 /**
  * System private interface to the window manager.
@@ -197,7 +197,7 @@
     void thawRotation();
 
     /**
-     * Gets whether the rotation is frozen. 
+     * Gets whether the rotation is frozen.
      *
      * @return Whether the rotation is frozen.
      */
@@ -231,55 +231,28 @@
     void lockNow(in Bundle options);
 
     /**
-     * Gets the token for the focused window.
-     */
-    IBinder getFocusedWindowToken();
-
-    /**
-     * Sets an input filter for manipulating the input event stream.
-     */
-    void setInputFilter(in IInputFilter filter);
-
-    /**
-     * Gets the frame of a window given its token.
-     */
-    void getWindowFrame(IBinder token, out Rect outFrame);
-
-    /**
      * Device is in safe mode.
      */
     boolean isSafeModeEnabled();
 
     /**
-     * Sets the display magnification callbacks. These callbacks notify
-     * the client for contextual changes related to display magnification.
-     *
-     * @param callbacks The magnification callbacks.
+     * Enables the screen if all conditions are met.
      */
-    void setMagnificationCallbacks(IMagnificationCallbacks callbacks);
+    void enableScreenIfNeeded();
 
     /**
-     * Sets the magnification spec to be applied to all windows that can be
-     * magnified.
+     * Clears the frame statistics for a given window.
      *
-     * @param spec The current magnification spec.
+     * @param token The window token.
+     * @return Whether the frame statistics were cleared.
      */
-    void setMagnificationSpec(in MagnificationSpec spec);
+    boolean clearWindowContentFrameStats(IBinder token);
 
     /**
-     * Gets the magnification spec for a window given its token. If the
-     * window has a compatibility scale it is also folded in the returned
-     * magnification spec.
+     * Gets the content frame statistics for a given window.
      *
-     * @param windowToken The unique window token.
-     * @return The magnification spec if such or null.
+     * @param token The window token.
+     * @return The frame statistics or null if the window does not exist.
      */
-    MagnificationSpec getCompatibleMagnificationSpecForWindow(in IBinder windowToken);
-
-    /**
-     * Sets the current touch exploration state.
-     *
-     * @param enabled Whether touch exploration is enabled.
-     */
-    void setTouchExplorationEnabled(boolean enabled);
+    WindowContentFrameStats getWindowContentFrameStats(IBinder token);
 }
diff --git a/core/java/android/view/InputQueue.java b/core/java/android/view/InputQueue.java
index d5cec49..aebc601 100644
--- a/core/java/android/view/InputQueue.java
+++ b/core/java/android/view/InputQueue.java
@@ -18,7 +18,6 @@
 
 import dalvik.system.CloseGuard;
 
-import android.os.Handler;
 import android.os.Looper;
 import android.os.MessageQueue;
 import android.util.Pools.Pool;
diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java
index 7b389c0..05e202b 100644
--- a/core/java/android/view/KeyEvent.java
+++ b/core/java/android/view/KeyEvent.java
@@ -20,7 +20,6 @@
 import android.os.Parcelable;
 import android.text.method.MetaKeyKeyListener;
 import android.util.Log;
-import android.util.Slog;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 import android.view.KeyCharacterMap;
@@ -646,12 +645,11 @@
     // NOTE: If you add a new keycode here you must also add it to:
     //  isSystem()
     //  frameworks/native/include/android/keycodes.h
-    //  frameworks/base/include/androidfw/KeycodeLabels.h
+    //  frameworks/base/include/androidfw/InputEventAttributes.h
     //  external/webkit/WebKit/android/plugins/ANPKeyCodes.h
     //  frameworks/base/core/res/res/values/attrs.xml
     //  emulator?
     //  LAST_KEYCODE
-    //  KEYCODE_SYMBOLIC_NAMES
     //
     //  Also Android currently does not reserve code ranges for vendor-
     //  specific key codes.  If you have new key codes to have, you
@@ -659,237 +657,6 @@
     //  those new codes.  This is intended to maintain a consistent
     //  set of key code definitions across all Android devices.
 
-    // Symbolic names of all key codes.
-    private static final SparseArray<String> KEYCODE_SYMBOLIC_NAMES = new SparseArray<String>();
-    private static void populateKeycodeSymbolicNames() {
-        SparseArray<String> names = KEYCODE_SYMBOLIC_NAMES;
-        names.append(KEYCODE_UNKNOWN, "KEYCODE_UNKNOWN");
-        names.append(KEYCODE_SOFT_LEFT, "KEYCODE_SOFT_LEFT");
-        names.append(KEYCODE_SOFT_RIGHT, "KEYCODE_SOFT_RIGHT");
-        names.append(KEYCODE_HOME, "KEYCODE_HOME");
-        names.append(KEYCODE_BACK, "KEYCODE_BACK");
-        names.append(KEYCODE_CALL, "KEYCODE_CALL");
-        names.append(KEYCODE_ENDCALL, "KEYCODE_ENDCALL");
-        names.append(KEYCODE_0, "KEYCODE_0");
-        names.append(KEYCODE_1, "KEYCODE_1");
-        names.append(KEYCODE_2, "KEYCODE_2");
-        names.append(KEYCODE_3, "KEYCODE_3");
-        names.append(KEYCODE_4, "KEYCODE_4");
-        names.append(KEYCODE_5, "KEYCODE_5");
-        names.append(KEYCODE_6, "KEYCODE_6");
-        names.append(KEYCODE_7, "KEYCODE_7");
-        names.append(KEYCODE_8, "KEYCODE_8");
-        names.append(KEYCODE_9, "KEYCODE_9");
-        names.append(KEYCODE_STAR, "KEYCODE_STAR");
-        names.append(KEYCODE_POUND, "KEYCODE_POUND");
-        names.append(KEYCODE_DPAD_UP, "KEYCODE_DPAD_UP");
-        names.append(KEYCODE_DPAD_DOWN, "KEYCODE_DPAD_DOWN");
-        names.append(KEYCODE_DPAD_LEFT, "KEYCODE_DPAD_LEFT");
-        names.append(KEYCODE_DPAD_RIGHT, "KEYCODE_DPAD_RIGHT");
-        names.append(KEYCODE_DPAD_CENTER, "KEYCODE_DPAD_CENTER");
-        names.append(KEYCODE_VOLUME_UP, "KEYCODE_VOLUME_UP");
-        names.append(KEYCODE_VOLUME_DOWN, "KEYCODE_VOLUME_DOWN");
-        names.append(KEYCODE_POWER, "KEYCODE_POWER");
-        names.append(KEYCODE_CAMERA, "KEYCODE_CAMERA");
-        names.append(KEYCODE_CLEAR, "KEYCODE_CLEAR");
-        names.append(KEYCODE_A, "KEYCODE_A");
-        names.append(KEYCODE_B, "KEYCODE_B");
-        names.append(KEYCODE_C, "KEYCODE_C");
-        names.append(KEYCODE_D, "KEYCODE_D");
-        names.append(KEYCODE_E, "KEYCODE_E");
-        names.append(KEYCODE_F, "KEYCODE_F");
-        names.append(KEYCODE_G, "KEYCODE_G");
-        names.append(KEYCODE_H, "KEYCODE_H");
-        names.append(KEYCODE_I, "KEYCODE_I");
-        names.append(KEYCODE_J, "KEYCODE_J");
-        names.append(KEYCODE_K, "KEYCODE_K");
-        names.append(KEYCODE_L, "KEYCODE_L");
-        names.append(KEYCODE_M, "KEYCODE_M");
-        names.append(KEYCODE_N, "KEYCODE_N");
-        names.append(KEYCODE_O, "KEYCODE_O");
-        names.append(KEYCODE_P, "KEYCODE_P");
-        names.append(KEYCODE_Q, "KEYCODE_Q");
-        names.append(KEYCODE_R, "KEYCODE_R");
-        names.append(KEYCODE_S, "KEYCODE_S");
-        names.append(KEYCODE_T, "KEYCODE_T");
-        names.append(KEYCODE_U, "KEYCODE_U");
-        names.append(KEYCODE_V, "KEYCODE_V");
-        names.append(KEYCODE_W, "KEYCODE_W");
-        names.append(KEYCODE_X, "KEYCODE_X");
-        names.append(KEYCODE_Y, "KEYCODE_Y");
-        names.append(KEYCODE_Z, "KEYCODE_Z");
-        names.append(KEYCODE_COMMA, "KEYCODE_COMMA");
-        names.append(KEYCODE_PERIOD, "KEYCODE_PERIOD");
-        names.append(KEYCODE_ALT_LEFT, "KEYCODE_ALT_LEFT");
-        names.append(KEYCODE_ALT_RIGHT, "KEYCODE_ALT_RIGHT");
-        names.append(KEYCODE_SHIFT_LEFT, "KEYCODE_SHIFT_LEFT");
-        names.append(KEYCODE_SHIFT_RIGHT, "KEYCODE_SHIFT_RIGHT");
-        names.append(KEYCODE_TAB, "KEYCODE_TAB");
-        names.append(KEYCODE_SPACE, "KEYCODE_SPACE");
-        names.append(KEYCODE_SYM, "KEYCODE_SYM");
-        names.append(KEYCODE_EXPLORER, "KEYCODE_EXPLORER");
-        names.append(KEYCODE_ENVELOPE, "KEYCODE_ENVELOPE");
-        names.append(KEYCODE_ENTER, "KEYCODE_ENTER");
-        names.append(KEYCODE_DEL, "KEYCODE_DEL");
-        names.append(KEYCODE_GRAVE, "KEYCODE_GRAVE");
-        names.append(KEYCODE_MINUS, "KEYCODE_MINUS");
-        names.append(KEYCODE_EQUALS, "KEYCODE_EQUALS");
-        names.append(KEYCODE_LEFT_BRACKET, "KEYCODE_LEFT_BRACKET");
-        names.append(KEYCODE_RIGHT_BRACKET, "KEYCODE_RIGHT_BRACKET");
-        names.append(KEYCODE_BACKSLASH, "KEYCODE_BACKSLASH");
-        names.append(KEYCODE_SEMICOLON, "KEYCODE_SEMICOLON");
-        names.append(KEYCODE_APOSTROPHE, "KEYCODE_APOSTROPHE");
-        names.append(KEYCODE_SLASH, "KEYCODE_SLASH");
-        names.append(KEYCODE_AT, "KEYCODE_AT");
-        names.append(KEYCODE_NUM, "KEYCODE_NUM");
-        names.append(KEYCODE_HEADSETHOOK, "KEYCODE_HEADSETHOOK");
-        names.append(KEYCODE_FOCUS, "KEYCODE_FOCUS");
-        names.append(KEYCODE_PLUS, "KEYCODE_PLUS");
-        names.append(KEYCODE_MENU, "KEYCODE_MENU");
-        names.append(KEYCODE_NOTIFICATION, "KEYCODE_NOTIFICATION");
-        names.append(KEYCODE_SEARCH, "KEYCODE_SEARCH");
-        names.append(KEYCODE_MEDIA_PLAY_PAUSE, "KEYCODE_MEDIA_PLAY_PAUSE");
-        names.append(KEYCODE_MEDIA_STOP, "KEYCODE_MEDIA_STOP");
-        names.append(KEYCODE_MEDIA_NEXT, "KEYCODE_MEDIA_NEXT");
-        names.append(KEYCODE_MEDIA_PREVIOUS, "KEYCODE_MEDIA_PREVIOUS");
-        names.append(KEYCODE_MEDIA_REWIND, "KEYCODE_MEDIA_REWIND");
-        names.append(KEYCODE_MEDIA_FAST_FORWARD, "KEYCODE_MEDIA_FAST_FORWARD");
-        names.append(KEYCODE_MUTE, "KEYCODE_MUTE");
-        names.append(KEYCODE_PAGE_UP, "KEYCODE_PAGE_UP");
-        names.append(KEYCODE_PAGE_DOWN, "KEYCODE_PAGE_DOWN");
-        names.append(KEYCODE_PICTSYMBOLS, "KEYCODE_PICTSYMBOLS");
-        names.append(KEYCODE_SWITCH_CHARSET, "KEYCODE_SWITCH_CHARSET");
-        names.append(KEYCODE_BUTTON_A, "KEYCODE_BUTTON_A");
-        names.append(KEYCODE_BUTTON_B, "KEYCODE_BUTTON_B");
-        names.append(KEYCODE_BUTTON_C, "KEYCODE_BUTTON_C");
-        names.append(KEYCODE_BUTTON_X, "KEYCODE_BUTTON_X");
-        names.append(KEYCODE_BUTTON_Y, "KEYCODE_BUTTON_Y");
-        names.append(KEYCODE_BUTTON_Z, "KEYCODE_BUTTON_Z");
-        names.append(KEYCODE_BUTTON_L1, "KEYCODE_BUTTON_L1");
-        names.append(KEYCODE_BUTTON_R1, "KEYCODE_BUTTON_R1");
-        names.append(KEYCODE_BUTTON_L2, "KEYCODE_BUTTON_L2");
-        names.append(KEYCODE_BUTTON_R2, "KEYCODE_BUTTON_R2");
-        names.append(KEYCODE_BUTTON_THUMBL, "KEYCODE_BUTTON_THUMBL");
-        names.append(KEYCODE_BUTTON_THUMBR, "KEYCODE_BUTTON_THUMBR");
-        names.append(KEYCODE_BUTTON_START, "KEYCODE_BUTTON_START");
-        names.append(KEYCODE_BUTTON_SELECT, "KEYCODE_BUTTON_SELECT");
-        names.append(KEYCODE_BUTTON_MODE, "KEYCODE_BUTTON_MODE");
-        names.append(KEYCODE_ESCAPE, "KEYCODE_ESCAPE");
-        names.append(KEYCODE_FORWARD_DEL, "KEYCODE_FORWARD_DEL");
-        names.append(KEYCODE_CTRL_LEFT, "KEYCODE_CTRL_LEFT");
-        names.append(KEYCODE_CTRL_RIGHT, "KEYCODE_CTRL_RIGHT");
-        names.append(KEYCODE_CAPS_LOCK, "KEYCODE_CAPS_LOCK");
-        names.append(KEYCODE_SCROLL_LOCK, "KEYCODE_SCROLL_LOCK");
-        names.append(KEYCODE_META_LEFT, "KEYCODE_META_LEFT");
-        names.append(KEYCODE_META_RIGHT, "KEYCODE_META_RIGHT");
-        names.append(KEYCODE_FUNCTION, "KEYCODE_FUNCTION");
-        names.append(KEYCODE_SYSRQ, "KEYCODE_SYSRQ");
-        names.append(KEYCODE_BREAK, "KEYCODE_BREAK");
-        names.append(KEYCODE_MOVE_HOME, "KEYCODE_MOVE_HOME");
-        names.append(KEYCODE_MOVE_END, "KEYCODE_MOVE_END");
-        names.append(KEYCODE_INSERT, "KEYCODE_INSERT");
-        names.append(KEYCODE_FORWARD, "KEYCODE_FORWARD");
-        names.append(KEYCODE_MEDIA_PLAY, "KEYCODE_MEDIA_PLAY");
-        names.append(KEYCODE_MEDIA_PAUSE, "KEYCODE_MEDIA_PAUSE");
-        names.append(KEYCODE_MEDIA_CLOSE, "KEYCODE_MEDIA_CLOSE");
-        names.append(KEYCODE_MEDIA_EJECT, "KEYCODE_MEDIA_EJECT");
-        names.append(KEYCODE_MEDIA_RECORD, "KEYCODE_MEDIA_RECORD");
-        names.append(KEYCODE_F1, "KEYCODE_F1");
-        names.append(KEYCODE_F2, "KEYCODE_F2");
-        names.append(KEYCODE_F3, "KEYCODE_F3");
-        names.append(KEYCODE_F4, "KEYCODE_F4");
-        names.append(KEYCODE_F5, "KEYCODE_F5");
-        names.append(KEYCODE_F6, "KEYCODE_F6");
-        names.append(KEYCODE_F7, "KEYCODE_F7");
-        names.append(KEYCODE_F8, "KEYCODE_F8");
-        names.append(KEYCODE_F9, "KEYCODE_F9");
-        names.append(KEYCODE_F10, "KEYCODE_F10");
-        names.append(KEYCODE_F11, "KEYCODE_F11");
-        names.append(KEYCODE_F12, "KEYCODE_F12");
-        names.append(KEYCODE_NUM_LOCK, "KEYCODE_NUM_LOCK");
-        names.append(KEYCODE_NUMPAD_0, "KEYCODE_NUMPAD_0");
-        names.append(KEYCODE_NUMPAD_1, "KEYCODE_NUMPAD_1");
-        names.append(KEYCODE_NUMPAD_2, "KEYCODE_NUMPAD_2");
-        names.append(KEYCODE_NUMPAD_3, "KEYCODE_NUMPAD_3");
-        names.append(KEYCODE_NUMPAD_4, "KEYCODE_NUMPAD_4");
-        names.append(KEYCODE_NUMPAD_5, "KEYCODE_NUMPAD_5");
-        names.append(KEYCODE_NUMPAD_6, "KEYCODE_NUMPAD_6");
-        names.append(KEYCODE_NUMPAD_7, "KEYCODE_NUMPAD_7");
-        names.append(KEYCODE_NUMPAD_8, "KEYCODE_NUMPAD_8");
-        names.append(KEYCODE_NUMPAD_9, "KEYCODE_NUMPAD_9");
-        names.append(KEYCODE_NUMPAD_DIVIDE, "KEYCODE_NUMPAD_DIVIDE");
-        names.append(KEYCODE_NUMPAD_MULTIPLY, "KEYCODE_NUMPAD_MULTIPLY");
-        names.append(KEYCODE_NUMPAD_SUBTRACT, "KEYCODE_NUMPAD_SUBTRACT");
-        names.append(KEYCODE_NUMPAD_ADD, "KEYCODE_NUMPAD_ADD");
-        names.append(KEYCODE_NUMPAD_DOT, "KEYCODE_NUMPAD_DOT");
-        names.append(KEYCODE_NUMPAD_COMMA, "KEYCODE_NUMPAD_COMMA");
-        names.append(KEYCODE_NUMPAD_ENTER, "KEYCODE_NUMPAD_ENTER");
-        names.append(KEYCODE_NUMPAD_EQUALS, "KEYCODE_NUMPAD_EQUALS");
-        names.append(KEYCODE_NUMPAD_LEFT_PAREN, "KEYCODE_NUMPAD_LEFT_PAREN");
-        names.append(KEYCODE_NUMPAD_RIGHT_PAREN, "KEYCODE_NUMPAD_RIGHT_PAREN");
-        names.append(KEYCODE_VOLUME_MUTE, "KEYCODE_VOLUME_MUTE");
-        names.append(KEYCODE_INFO, "KEYCODE_INFO");
-        names.append(KEYCODE_CHANNEL_UP, "KEYCODE_CHANNEL_UP");
-        names.append(KEYCODE_CHANNEL_DOWN, "KEYCODE_CHANNEL_DOWN");
-        names.append(KEYCODE_ZOOM_IN, "KEYCODE_ZOOM_IN");
-        names.append(KEYCODE_ZOOM_OUT, "KEYCODE_ZOOM_OUT");
-        names.append(KEYCODE_TV, "KEYCODE_TV");
-        names.append(KEYCODE_WINDOW, "KEYCODE_WINDOW");
-        names.append(KEYCODE_GUIDE, "KEYCODE_GUIDE");
-        names.append(KEYCODE_DVR, "KEYCODE_DVR");
-        names.append(KEYCODE_BOOKMARK, "KEYCODE_BOOKMARK");
-        names.append(KEYCODE_CAPTIONS, "KEYCODE_CAPTIONS");
-        names.append(KEYCODE_SETTINGS, "KEYCODE_SETTINGS");
-        names.append(KEYCODE_TV_POWER, "KEYCODE_TV_POWER");
-        names.append(KEYCODE_TV_INPUT, "KEYCODE_TV_INPUT");
-        names.append(KEYCODE_STB_INPUT, "KEYCODE_STB_INPUT");
-        names.append(KEYCODE_STB_POWER, "KEYCODE_STB_POWER");
-        names.append(KEYCODE_AVR_POWER, "KEYCODE_AVR_POWER");
-        names.append(KEYCODE_AVR_INPUT, "KEYCODE_AVR_INPUT");
-        names.append(KEYCODE_PROG_RED, "KEYCODE_PROG_RED");
-        names.append(KEYCODE_PROG_GREEN, "KEYCODE_PROG_GREEN");
-        names.append(KEYCODE_PROG_YELLOW, "KEYCODE_PROG_YELLOW");
-        names.append(KEYCODE_PROG_BLUE, "KEYCODE_PROG_BLUE");
-        names.append(KEYCODE_APP_SWITCH, "KEYCODE_APP_SWITCH");
-        names.append(KEYCODE_BUTTON_1, "KEYCODE_BUTTON_1");
-        names.append(KEYCODE_BUTTON_2, "KEYCODE_BUTTON_2");
-        names.append(KEYCODE_BUTTON_3, "KEYCODE_BUTTON_3");
-        names.append(KEYCODE_BUTTON_4, "KEYCODE_BUTTON_4");
-        names.append(KEYCODE_BUTTON_5, "KEYCODE_BUTTON_5");
-        names.append(KEYCODE_BUTTON_6, "KEYCODE_BUTTON_6");
-        names.append(KEYCODE_BUTTON_7, "KEYCODE_BUTTON_7");
-        names.append(KEYCODE_BUTTON_8, "KEYCODE_BUTTON_8");
-        names.append(KEYCODE_BUTTON_9, "KEYCODE_BUTTON_9");
-        names.append(KEYCODE_BUTTON_10, "KEYCODE_BUTTON_10");
-        names.append(KEYCODE_BUTTON_11, "KEYCODE_BUTTON_11");
-        names.append(KEYCODE_BUTTON_12, "KEYCODE_BUTTON_12");
-        names.append(KEYCODE_BUTTON_13, "KEYCODE_BUTTON_13");
-        names.append(KEYCODE_BUTTON_14, "KEYCODE_BUTTON_14");
-        names.append(KEYCODE_BUTTON_15, "KEYCODE_BUTTON_15");
-        names.append(KEYCODE_BUTTON_16, "KEYCODE_BUTTON_16");
-        names.append(KEYCODE_LANGUAGE_SWITCH, "KEYCODE_LANGUAGE_SWITCH");
-        names.append(KEYCODE_MANNER_MODE, "KEYCODE_MANNER_MODE");
-        names.append(KEYCODE_3D_MODE, "KEYCODE_3D_MODE");
-        names.append(KEYCODE_CONTACTS, "KEYCODE_CONTACTS");
-        names.append(KEYCODE_CALENDAR, "KEYCODE_CALENDAR");
-        names.append(KEYCODE_MUSIC, "KEYCODE_MUSIC");
-        names.append(KEYCODE_CALCULATOR, "KEYCODE_CALCULATOR");
-        names.append(KEYCODE_ZENKAKU_HANKAKU, "KEYCODE_ZENKAKU_HANKAKU");
-        names.append(KEYCODE_EISU, "KEYCODE_EISU");
-        names.append(KEYCODE_MUHENKAN, "KEYCODE_MUHENKAN");
-        names.append(KEYCODE_HENKAN, "KEYCODE_HENKAN");
-        names.append(KEYCODE_KATAKANA_HIRAGANA, "KEYCODE_KATAKANA_HIRAGANA");
-        names.append(KEYCODE_YEN, "KEYCODE_YEN");
-        names.append(KEYCODE_RO, "KEYCODE_RO");
-        names.append(KEYCODE_KANA, "KEYCODE_KANA");
-        names.append(KEYCODE_ASSIST, "KEYCODE_ASSIST");
-        names.append(KEYCODE_BRIGHTNESS_DOWN, "KEYCODE_BRIGHTNESS_DOWN");
-        names.append(KEYCODE_BRIGHTNESS_UP, "KEYCODE_BRIGHTNESS_UP");
-        names.append(KEYCODE_MEDIA_AUDIO_TRACK, "KEYCODE_MEDIA_AUDIO_TRACK");
-        names.append(KEYCODE_SLEEP, "KEYCODE_SLEEP");
-        names.append(KEYCODE_WAKEUP, "KEYCODE_WAKEUP");
-    };
-
     // Symbolic names of all metakeys in bit order from least significant to most significant.
     // Accordingly there are exactly 32 values in this table.
     private static final String[] META_SYMBOLIC_NAMES = new String[] {
@@ -927,6 +694,8 @@
         "0x80000000",
     };
 
+    private static final String LABEL_PREFIX = "KEYCODE_";
+
     /**
      * @deprecated There are now more than MAX_KEYCODE keycodes.
      * Use {@link #getMaxKeyCode()} instead.
@@ -1178,20 +947,20 @@
      * This mask is set if the key event was generated by a software keyboard.
      */
     public static final int FLAG_SOFT_KEYBOARD = 0x2;
-    
+
     /**
      * This mask is set if we don't want the key event to cause us to leave
      * touch mode.
      */
     public static final int FLAG_KEEP_TOUCH_MODE = 0x4;
-    
+
     /**
      * This mask is set if an event was known to come from a trusted part
      * of the system.  That is, the event is known to come from the user,
      * and could not have been spoofed by a third party component.
      */
     public static final int FLAG_FROM_SYSTEM = 0x8;
-    
+
     /**
      * This mask is used for compatibility, to identify enter keys that are
      * coming from an IME whose enter key has been auto-labelled "next" or
@@ -1200,7 +969,7 @@
      * receiving them.
      */
     public static final int FLAG_EDITOR_ACTION = 0x10;
-    
+
     /**
      * When associated with up key events, this indicates that the key press
      * has been canceled.  Typically this is used with virtual touch screen
@@ -1209,29 +978,29 @@
      * event and should not perform the action normally associated with the
      * key.  Note that for this to work, the application can not perform an
      * action for a key until it receives an up or the long press timeout has
-     * expired. 
+     * expired.
      */
     public static final int FLAG_CANCELED = 0x20;
-    
+
     /**
      * This key event was generated by a virtual (on-screen) hard key area.
      * Typically this is an area of the touchscreen, outside of the regular
      * display, dedicated to "hardware" buttons.
      */
     public static final int FLAG_VIRTUAL_HARD_KEY = 0x40;
-    
+
     /**
      * This flag is set for the first key repeat that occurs after the
      * long press timeout.
      */
     public static final int FLAG_LONG_PRESS = 0x80;
-    
+
     /**
      * Set when a key event has {@link #FLAG_CANCELED} set because a long
-     * press action was executed while it was down. 
+     * press action was executed while it was down.
      */
     public static final int FLAG_CANCELED_LONG_PRESS = 0x100;
-    
+
     /**
      * Set for {@link #ACTION_UP} when this event's key code is still being
      * tracked from its initial down.  That is, somebody requested that tracking
@@ -1288,7 +1057,7 @@
     public static int getDeadChar(int accent, int c) {
         return KeyCharacterMap.getDeadChar(accent, c);
     }
-    
+
     static final boolean DEBUG = false;
     static final String TAG = "KeyEvent";
 
@@ -1318,10 +1087,10 @@
          * KeyEvent.startTracking()} to have the framework track the event
          * through its {@link #onKeyUp(int, KeyEvent)} and also call your
          * {@link #onKeyLongPress(int, KeyEvent)} if it occurs.
-         * 
+         *
          * @param keyCode The value in event.getKeyCode().
          * @param event Description of the key event.
-         * 
+         *
          * @return If you handled the event, return true.  If you want to allow
          *         the event to be handled by the next receiver, return false.
          */
@@ -1334,10 +1103,10 @@
          * order to receive this callback, someone in the event change
          * <em>must</em> return true from {@link #onKeyDown} <em>and</em>
          * call {@link KeyEvent#startTracking()} on the event.
-         * 
+         *
          * @param keyCode The value in event.getKeyCode().
          * @param event Description of the key event.
-         * 
+         *
          * @return If you handled the event, return true.  If you want to allow
          *         the event to be handled by the next receiver, return false.
          */
@@ -1345,10 +1114,10 @@
 
         /**
          * Called when a key up event has occurred.
-         * 
+         *
          * @param keyCode The value in event.getKeyCode().
          * @param event Description of the key event.
-         * 
+         *
          * @return If you handled the event, return true.  If you want to allow
          *         the event to be handled by the next receiver, return false.
          */
@@ -1357,27 +1126,26 @@
         /**
          * Called when multiple down/up pairs of the same key have occurred
          * in a row.
-         * 
+         *
          * @param keyCode The value in event.getKeyCode().
          * @param count Number of pairs as returned by event.getRepeatCount().
          * @param event Description of the key event.
-         * 
+         *
          * @return If you handled the event, return true.  If you want to allow
          *         the event to be handled by the next receiver, return false.
          */
         boolean onKeyMultiple(int keyCode, int count, KeyEvent event);
     }
 
-    static {
-        populateKeycodeSymbolicNames();
-    }
+    private static native String nativeKeyCodeToString(int keyCode);
+    private static native int nativeKeyCodeFromString(String keyCode);
 
     private KeyEvent() {
     }
 
     /**
      * Create a new key event.
-     * 
+     *
      * @param action Action code: either {@link #ACTION_DOWN},
      * {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}.
      * @param code The key code.
@@ -1391,7 +1159,7 @@
 
     /**
      * Create a new key event.
-     * 
+     *
      * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis})
      * at which this key code originally went down.
      * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis})
@@ -1414,7 +1182,7 @@
 
     /**
      * Create a new key event.
-     * 
+     *
      * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis})
      * at which this key code originally went down.
      * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis})
@@ -1439,7 +1207,7 @@
 
     /**
      * Create a new key event.
-     * 
+     *
      * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis})
      * at which this key code originally went down.
      * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis})
@@ -1468,7 +1236,7 @@
 
     /**
      * Create a new key event.
-     * 
+     *
      * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis})
      * at which this key code originally went down.
      * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis})
@@ -1499,7 +1267,7 @@
 
     /**
      * Create a new key event.
-     * 
+     *
      * @param downTime The time (in {@link android.os.SystemClock#uptimeMillis})
      * at which this key code originally went down.
      * @param eventTime The time (in {@link android.os.SystemClock#uptimeMillis})
@@ -1535,7 +1303,7 @@
      * action, repeat count and source will automatically be set to
      * {@link #KEYCODE_UNKNOWN}, {@link #ACTION_MULTIPLE}, 0, and
      * {@link InputDevice#SOURCE_KEYBOARD} for you.
-     * 
+     *
      * @param time The time (in {@link android.os.SystemClock#uptimeMillis})
      * at which this event occured.
      * @param characters The string of characters.
@@ -1573,10 +1341,10 @@
 
     /**
      * Copy an existing key event, modifying its time and repeat count.
-     * 
+     *
      * @deprecated Use {@link #changeTimeRepeat(KeyEvent, long, int)}
      * instead.
-     * 
+     *
      * @param origEvent The existing event to be copied.
      * @param eventTime The new event time
      * (in {@link android.os.SystemClock#uptimeMillis}) of the event.
@@ -1692,7 +1460,7 @@
     /**
      * Create a new key event that is the same as the given one, but whose
      * event time and repeat count are replaced with the given value.
-     * 
+     *
      * @param event The existing event to be copied.  This is not modified.
      * @param eventTime The new event time
      * (in {@link android.os.SystemClock#uptimeMillis}) of the event.
@@ -1702,11 +1470,11 @@
             int newRepeat) {
         return new KeyEvent(event, eventTime, newRepeat);
     }
-    
+
     /**
      * Create a new key event that is the same as the given one, but whose
      * event time and repeat count are replaced with the given value.
-     * 
+     *
      * @param event The existing event to be copied.  This is not modified.
      * @param eventTime The new event time
      * (in {@link android.os.SystemClock#uptimeMillis}) of the event.
@@ -1722,10 +1490,10 @@
         ret.mFlags = newFlags;
         return ret;
     }
-    
+
     /**
      * Copy an existing key event, modifying its action.
-     * 
+     *
      * @param origEvent The existing event to be copied.
      * @param action The new action code of the event.
      */
@@ -1747,18 +1515,18 @@
     /**
      * Create a new key event that is the same as the given one, but whose
      * action is replaced with the given value.
-     * 
+     *
      * @param event The existing event to be copied.  This is not modified.
      * @param action The new action code of the event.
      */
     public static KeyEvent changeAction(KeyEvent event, int action) {
         return new KeyEvent(event, action);
     }
-    
+
     /**
      * Create a new key event that is the same as the given one, but whose
      * flags are replaced with the given value.
-     * 
+     *
      * @param event The existing event to be copied.  This is not modified.
      * @param flags The new flags constant.
      */
@@ -1783,7 +1551,7 @@
     /**
      * Don't use in new code, instead explicitly check
      * {@link #getAction()}.
-     * 
+     *
      * @return If the action is ACTION_DOWN, returns true; else false.
      *
      * @deprecated
@@ -1793,19 +1561,15 @@
         return mAction == ACTION_DOWN;
     }
 
-    /**
-     * Is this a system key?  System keys can not be used for menu shortcuts.
-     * 
-     * TODO: this information should come from a table somewhere.
-     * TODO: should the dpad keys be here?  arguably, because they also shouldn't be menu shortcuts
+    /** Is this a system key?  System keys can not be used for menu shortcuts.
      */
     public final boolean isSystem() {
-        return native_isSystemKey(mKeyCode);
+        return isSystemKey(mKeyCode);
     }
 
     /** @hide */
-    public final boolean hasDefaultAction() {
-        return native_hasDefaultAction(mKeyCode);
+    public final boolean isWakeKey() {
+        return isWakeKey(mKeyCode);
     }
 
     /**
@@ -1851,16 +1615,13 @@
         }
     }
 
-    /**
-     * Returns true if the key event should be treated as a confirming action.
-     * @return True for a confirmation key, such as {@link #KEYCODE_DPAD_CENTER},
-     * {@link #KEYCODE_ENTER}, or {@link #KEYCODE_BUTTON_A}.
+    /** Whether key will, by default, trigger a click on the focused view.
+     * @hide
      */
-    public final boolean isConfirmKey() {
-        switch (mKeyCode) {
+    public static final boolean isConfirmKey(int keyCode) {
+        switch (keyCode) {
             case KeyEvent.KEYCODE_DPAD_CENTER:
             case KeyEvent.KEYCODE_ENTER:
-            case KeyEvent.KEYCODE_BUTTON_A:
                 return true;
             default:
                 return false;
@@ -1868,19 +1629,83 @@
     }
 
     /**
-     * Returns true if the key event should be treated as a cancelling action.
-     * @return True for a cancellation key, such as {@link #KEYCODE_ESCAPE},
-     * {@link #KEYCODE_BACK}, or {@link #KEYCODE_BUTTON_B}.
+     * Whether this key is a media key, which can be send to apps that are
+     * interested in media key events.
+     *
+     * @hide
      */
-    public final boolean isCancelKey() {
-        switch (mKeyCode) {
-            case KeyEvent.KEYCODE_BUTTON_B:
-            case KeyEvent.KEYCODE_ESCAPE:
-            case KeyEvent.KEYCODE_BACK:
+    public static final boolean isMediaKey(int keyCode) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_MEDIA_PLAY:
+            case KeyEvent.KEYCODE_MEDIA_PAUSE:
+            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+            case KeyEvent.KEYCODE_MUTE:
+            case KeyEvent.KEYCODE_HEADSETHOOK:
+            case KeyEvent.KEYCODE_MEDIA_STOP:
+            case KeyEvent.KEYCODE_MEDIA_NEXT:
+            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
+            case KeyEvent.KEYCODE_MEDIA_REWIND:
+            case KeyEvent.KEYCODE_MEDIA_RECORD:
+            case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
                 return true;
-            default:
-                return false;
         }
+        return false;
+    }
+
+
+    /** Is this a system key? System keys can not be used for menu shortcuts.
+     * @hide
+     */
+    public static final boolean isSystemKey(int keyCode) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_MENU:
+            case KeyEvent.KEYCODE_SOFT_RIGHT:
+            case KeyEvent.KEYCODE_HOME:
+            case KeyEvent.KEYCODE_BACK:
+            case KeyEvent.KEYCODE_CALL:
+            case KeyEvent.KEYCODE_ENDCALL:
+            case KeyEvent.KEYCODE_VOLUME_UP:
+            case KeyEvent.KEYCODE_VOLUME_DOWN:
+            case KeyEvent.KEYCODE_VOLUME_MUTE:
+            case KeyEvent.KEYCODE_MUTE:
+            case KeyEvent.KEYCODE_POWER:
+            case KeyEvent.KEYCODE_HEADSETHOOK:
+            case KeyEvent.KEYCODE_MEDIA_PLAY:
+            case KeyEvent.KEYCODE_MEDIA_PAUSE:
+            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
+            case KeyEvent.KEYCODE_MEDIA_STOP:
+            case KeyEvent.KEYCODE_MEDIA_NEXT:
+            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
+            case KeyEvent.KEYCODE_MEDIA_REWIND:
+            case KeyEvent.KEYCODE_MEDIA_RECORD:
+            case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
+            case KeyEvent.KEYCODE_CAMERA:
+            case KeyEvent.KEYCODE_FOCUS:
+            case KeyEvent.KEYCODE_SEARCH:
+            case KeyEvent.KEYCODE_BRIGHTNESS_DOWN:
+            case KeyEvent.KEYCODE_BRIGHTNESS_UP:
+            case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK:
+            case KeyEvent.KEYCODE_DPAD_UP:
+            case KeyEvent.KEYCODE_DPAD_RIGHT:
+            case KeyEvent.KEYCODE_DPAD_DOWN:
+            case KeyEvent.KEYCODE_DPAD_LEFT:
+                return true;
+        }
+
+        return false;
+    }
+
+    /** @hide */
+    public static final boolean isWakeKey(int keyCode) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_BACK:
+            case KeyEvent.KEYCODE_POWER:
+            case KeyEvent.KEYCODE_MENU:
+            case KeyEvent.KEYCODE_SLEEP:
+            case KeyEvent.KEYCODE_WAKEUP:
+                return true;
+        }
+        return false;
     }
 
     /** {@inheritDoc} */
@@ -2352,7 +2177,7 @@
     /**
      * Retrieve the action of this key event.  May be either
      * {@link #ACTION_DOWN}, {@link #ACTION_UP}, or {@link #ACTION_MULTIPLE}.
-     * 
+     *
      * @return The event action: ACTION_DOWN, ACTION_UP, or ACTION_MULTIPLE.
      */
     public final int getAction() {
@@ -2366,7 +2191,7 @@
     public final boolean isCanceled() {
         return (mFlags&FLAG_CANCELED) != 0;
     }
-    
+
     /**
      * Call this during {@link Callback#onKeyDown} to have the system track
      * the key through its final up (possibly including a long press).  Note
@@ -2377,7 +2202,7 @@
     public final void startTracking() {
         mFlags |= FLAG_START_TRACKING;
     }
-    
+
     /**
      * For {@link #ACTION_UP} events, indicates that the event is still being
      * tracked from its initial down event as per
@@ -2386,7 +2211,7 @@
     public final boolean isTracking() {
         return (mFlags&FLAG_TRACKING) != 0;
     }
-    
+
     /**
      * For {@link #ACTION_DOWN} events, indicates that the event has been
      * canceled as per {@link #FLAG_LONG_PRESS}.
@@ -2394,11 +2219,11 @@
     public final boolean isLongPress() {
         return (mFlags&FLAG_LONG_PRESS) != 0;
     }
-    
+
     /**
      * Retrieve the key code of the key event.  This is the physical key that
      * was pressed, <em>not</em> the Unicode character.
-     * 
+     *
      * @return The key code of the event.
      */
     public final int getKeyCode() {
@@ -2409,14 +2234,14 @@
      * For the special case of a {@link #ACTION_MULTIPLE} event with key
      * code of {@link #KEYCODE_UNKNOWN}, this is a raw string of characters
      * associated with the event.  In all other cases it is null.
-     * 
+     *
      * @return Returns a String of 1 or more characters associated with
      * the event.
      */
     public final String getCharacters() {
         return mCharacters;
     }
-    
+
     /**
      * Retrieve the hardware key id of this key event.  These values are not
      * reliable and vary from device to device.
@@ -2433,7 +2258,7 @@
      * events, this is the number of times the key has repeated with the first
      * down starting at 0 and counting up from there.  For multiple key
      * events, this is the number of down/up pairs that have occurred.
-     * 
+     *
      * @return The number of times the key has repeated.
      */
     public final int getRepeatCount() {
@@ -2447,7 +2272,7 @@
      * Note that when chording keys, this value is the down time of the
      * most recently pressed key, which may <em>not</em> be the same physical
      * key of this event.
-     * 
+     *
      * @return Returns the most recent key down time, in the
      * {@link android.os.SystemClock#uptimeMillis} time base
      */
@@ -2459,7 +2284,7 @@
      * Retrieve the time this event occurred,
      * in the {@link android.os.SystemClock#uptimeMillis} time base.
      *
-     * @return Returns the time this event occurred, 
+     * @return Returns the time this event occurred,
      * in the {@link android.os.SystemClock#uptimeMillis} time base.
      */
     @Override
@@ -2488,7 +2313,7 @@
 
     /**
      * Renamed to {@link #getDeviceId}.
-     * 
+     *
      * @hide
      * @deprecated use {@link #getDeviceId()} instead.
      */
@@ -2520,7 +2345,7 @@
     public char getDisplayLabel() {
         return getKeyCharacterMap().getDisplayLabel(mKeyCode);
     }
-    
+
     /**
      * Gets the Unicode character generated by the specified key and meta
      * key state combination.
@@ -2543,7 +2368,7 @@
     public int getUnicodeChar() {
         return getUnicodeChar(mMetaState);
     }
-    
+
     /**
      * Gets the Unicode character generated by the specified key and meta
      * key state combination.
@@ -2567,7 +2392,7 @@
     public int getUnicodeChar(int metaState) {
         return getKeyCharacterMap().get(mKeyCode, metaState);
     }
-    
+
     /**
      * Get the character conversion data for a given key code.
      *
@@ -2582,7 +2407,7 @@
     public boolean getKeyData(KeyData results) {
         return getKeyCharacterMap().getKeyData(mKeyCode, results);
     }
-    
+
     /**
      * Gets the first character in the character array that can be generated
      * by the specified key code.
@@ -2597,7 +2422,7 @@
     public char getMatch(char[] chars) {
         return getMatch(chars, 0);
     }
-    
+
     /**
      * Gets the first character in the character array that can be generated
      * by the specified key code.  If there are multiple choices, prefers
@@ -2610,7 +2435,7 @@
     public char getMatch(char[] chars, int metaState) {
         return getKeyCharacterMap().getMatch(mKeyCode, chars, metaState);
     }
-    
+
     /**
      * Gets the number or symbol associated with the key.
      * <p>
@@ -2634,7 +2459,7 @@
     public char getNumber() {
         return getKeyCharacterMap().getNumber(mKeyCode);
     }
-    
+
     /**
      * Returns true if this key produces a glyph.
      *
@@ -2643,7 +2468,7 @@
     public boolean isPrintingKey() {
         return getKeyCharacterMap().isPrintingKey(mKeyCode);
     }
-    
+
     /**
      * @deprecated Use {@link #dispatch(Callback, DispatcherState, Object)} instead.
      */
@@ -2651,16 +2476,16 @@
     public final boolean dispatch(Callback receiver) {
         return dispatch(receiver, null, null);
     }
-    
+
     /**
      * Deliver this key event to a {@link Callback} interface.  If this is
      * an ACTION_MULTIPLE event and it is not handled, then an attempt will
      * be made to deliver a single normal event.
-     * 
+     *
      * @param receiver The Callback that will be given the event.
      * @param state State information retained across events.
      * @param target The target of the dispatch, for use in tracking.
-     * 
+     *
      * @return The return value from the Callback method that was called.
      */
     public final boolean dispatch(Callback receiver, DispatcherState state,
@@ -2726,7 +2551,7 @@
         int mDownKeyCode;
         Object mDownTarget;
         SparseIntArray mActiveLongPresses = new SparseIntArray();
-        
+
         /**
          * Reset back to initial state.
          */
@@ -2736,7 +2561,7 @@
             mDownTarget = null;
             mActiveLongPresses.clear();
         }
-        
+
         /**
          * Stop any tracking associated with this target.
          */
@@ -2747,14 +2572,14 @@
                 mDownTarget = null;
             }
         }
-        
+
         /**
          * Start tracking the key code associated with the given event.  This
          * can only be called on a key down.  It will allow you to see any
          * long press associated with the key, and will result in
          * {@link KeyEvent#isTracking} return true on the long press and up
          * events.
-         * 
+         *
          * <p>This is only needed if you are directly dispatching events, rather
          * than handling them in {@link Callback#onKeyDown}.
          */
@@ -2767,7 +2592,7 @@
             mDownKeyCode = event.getKeyCode();
             mDownTarget = target;
         }
-        
+
         /**
          * Return true if the key event is for a key code that is currently
          * being tracked by the dispatcher.
@@ -2775,7 +2600,7 @@
         public boolean isTracking(KeyEvent event) {
             return mDownKeyCode == event.getKeyCode();
         }
-        
+
         /**
          * Keep track of the given event's key code as having performed an
          * action with a long press, so no action should occur on the up.
@@ -2785,7 +2610,7 @@
         public void performedLongPress(KeyEvent event) {
             mActiveLongPresses.put(event.getKeyCode(), 1);
         }
-        
+
         /**
          * Handle key up event to stop tracking.  This resets the dispatcher state,
          * and updates the key event state based on it.
@@ -2862,8 +2687,8 @@
      * @see KeyCharacterMap#getDisplayLabel
      */
     public static String keyCodeToString(int keyCode) {
-        String symbolicName = KEYCODE_SYMBOLIC_NAMES.get(keyCode);
-        return symbolicName != null ? symbolicName : Integer.toString(keyCode);
+        String symbolicName = nativeKeyCodeToString(keyCode);
+        return symbolicName != null ? LABEL_PREFIX + symbolicName : Integer.toString(keyCode);
     }
 
     /**
@@ -2875,17 +2700,13 @@
      * @see #keycodeToString(int)
      */
     public static int keyCodeFromString(String symbolicName) {
-        if (symbolicName == null) {
-            throw new IllegalArgumentException("symbolicName must not be null");
+        if (symbolicName.startsWith(LABEL_PREFIX)) {
+            symbolicName = symbolicName.substring(LABEL_PREFIX.length());
         }
-
-        final int count = KEYCODE_SYMBOLIC_NAMES.size();
-        for (int i = 0; i < count; i++) {
-            if (symbolicName.equals(KEYCODE_SYMBOLIC_NAMES.valueAt(i))) {
-                return i;
-            }
+        int keyCode = nativeKeyCodeFromString(symbolicName);
+        if (keyCode > 0) {
+            return keyCode;
         }
-
         try {
             return Integer.parseInt(symbolicName, 10);
         } catch (NumberFormatException ex) {
@@ -2940,12 +2761,12 @@
             return new KeyEvent[size];
         }
     };
-    
+
     /** @hide */
     public static KeyEvent createFromParcelBody(Parcel in) {
         return new KeyEvent(in);
     }
-    
+
     private KeyEvent(Parcel in) {
         mDeviceId = in.readInt();
         mSource = in.readInt();
@@ -2973,7 +2794,4 @@
         out.writeLong(mDownTime);
         out.writeLong(mEventTime);
     }
-
-    private native boolean native_isSystemKey(int keyCode);
-    private native boolean native_hasDefaultAction(int keyCode);
 }
diff --git a/core/java/android/view/LayoutInflater.java b/core/java/android/view/LayoutInflater.java
index cd905fa..b9ed801 100644
--- a/core/java/android/view/LayoutInflater.java
+++ b/core/java/android/view/LayoutInflater.java
@@ -21,13 +21,16 @@
 import android.os.Message;
 import android.os.Trace;
 import android.widget.FrameLayout;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.content.res.XmlResourceParser;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.util.Xml;
 
 import java.io.IOException;
@@ -61,7 +64,8 @@
  * @see Context#getSystemService
  */
 public abstract class LayoutInflater {
-    private final boolean DEBUG = false;
+    private static final String TAG = LayoutInflater.class.getSimpleName();
+    private static final boolean DEBUG = false;
 
     /**
      * This field should be made private, so it is hidden from the SDK.
@@ -90,6 +94,10 @@
     private static final String TAG_INCLUDE = "include";
     private static final String TAG_1995 = "blink";
     private static final String TAG_REQUEST_FOCUS = "requestFocus";
+    private static final String TAG_TAG = "tag";
+
+    private static final int[] ATTRS_THEME = new int[] {
+            com.android.internal.R.attr.theme };
 
     /**
      * Hook to allow clients of the LayoutInflater to restrict the set of Views that are allowed
@@ -391,8 +399,13 @@
      *         the inflated XML file.
      */
     public View inflate(int resource, ViewGroup root, boolean attachToRoot) {
-        if (DEBUG) System.out.println("INFLATING from resource: " + resource);
-        XmlResourceParser parser = getContext().getResources().getLayout(resource);
+        final Resources res = getContext().getResources();
+        if (DEBUG) {
+            Log.d(TAG, "INFLATING from resource: \"" + res.getResourceName(resource) + "\" ("
+                    + Integer.toHexString(resource) + ")");
+        }
+
+        final XmlResourceParser parser = res.getLayout(resource);
         try {
             return inflate(parser, root, attachToRoot);
         } finally {
@@ -459,15 +472,10 @@
                                 + "ViewGroup root and attachToRoot=true");
                     }
 
-                    rInflate(parser, root, attrs, false);
+                    rInflate(parser, root, attrs, false, false);
                 } else {
                     // Temp is the root view that was found in the xml
-                    View temp;
-                    if (TAG_1995.equals(name)) {
-                        temp = new BlinkLayout(mContext, attrs);
-                    } else {
-                        temp = createViewFromTag(root, name, attrs);
-                    }
+                    final View temp = createViewFromTag(root, name, attrs, false);
 
                     ViewGroup.LayoutParams params = null;
 
@@ -489,7 +497,7 @@
                         System.out.println("-----> start inflating children");
                     }
                     // Inflate all children under temp
-                    rInflate(parser, temp, attrs, true);
+                    rInflate(parser, temp, attrs, true, true);
                     if (DEBUG) {
                         System.out.println("-----> done inflating children");
                     }
@@ -670,31 +678,68 @@
         return onCreateView(name, attrs);
     }
 
-    /*
-     * default visibility so the BridgeInflater can override it.
+    /**
+     * Creates a view from a tag name using the supplied attribute set.
+     * <p>
+     * If {@code inheritContext} is true and the parent is non-null, the view
+     * will be inflated in parent view's context. If the view specifies a
+     * &lt;theme&gt; attribute, the inflation context will be wrapped with the
+     * specified theme.
+     * <p>
+     * Note: Default visibility so the BridgeInflater can override it.
      */
-    View createViewFromTag(View parent, String name, AttributeSet attrs) {
+    View createViewFromTag(View parent, String name, AttributeSet attrs, boolean inheritContext) {
         if (name.equals("view")) {
             name = attrs.getAttributeValue(null, "class");
         }
 
+        Context viewContext;
+        if (parent != null && inheritContext) {
+            viewContext = parent.getContext();
+        } else {
+            viewContext = mContext;
+        }
+
+        // Apply a theme wrapper, if requested.
+        final TypedArray ta = viewContext.obtainStyledAttributes(attrs, ATTRS_THEME);
+        final int themeResId = ta.getResourceId(0, 0);
+        if (themeResId != 0) {
+            viewContext = new ContextThemeWrapper(viewContext, themeResId);
+        }
+        ta.recycle();
+
+        if (name.equals(TAG_1995)) {
+            // Let's party like it's 1995!
+            return new BlinkLayout(viewContext, attrs);
+        }
+
         if (DEBUG) System.out.println("******** Creating view: " + name);
 
         try {
             View view;
-            if (mFactory2 != null) view = mFactory2.onCreateView(parent, name, mContext, attrs);
-            else if (mFactory != null) view = mFactory.onCreateView(name, mContext, attrs);
-            else view = null;
+            if (mFactory2 != null) {
+                view = mFactory2.onCreateView(parent, name, viewContext, attrs);
+            } else if (mFactory != null) {
+                view = mFactory.onCreateView(name, viewContext, attrs);
+            } else {
+                view = null;
+            }
 
             if (view == null && mPrivateFactory != null) {
-                view = mPrivateFactory.onCreateView(parent, name, mContext, attrs);
+                view = mPrivateFactory.onCreateView(parent, name, viewContext, attrs);
             }
-            
+
             if (view == null) {
-                if (-1 == name.indexOf('.')) {
-                    view = onCreateView(parent, name, attrs);
-                } else {
-                    view = createView(name, null, attrs);
+                final Object lastContext = mConstructorArgs[0];
+                mConstructorArgs[0] = viewContext;
+                try {
+                    if (-1 == name.indexOf('.')) {
+                        view = onCreateView(parent, name, attrs);
+                    } else {
+                        view = createView(name, null, attrs);
+                    }
+                } finally {
+                    mConstructorArgs[0] = lastContext;
                 }
             }
 
@@ -721,9 +766,14 @@
     /**
      * Recursive method used to descend down the xml hierarchy and instantiate
      * views, instantiate their children, and then call onFinishInflate().
+     *
+     * @param inheritContext Whether the root view should be inflated in its
+     *            parent's context. This should be true when called inflating
+     *            child views recursively, or false otherwise.
      */
     void rInflate(XmlPullParser parser, View parent, final AttributeSet attrs,
-            boolean finishInflate) throws XmlPullParserException, IOException {
+            boolean finishInflate, boolean inheritContext) throws XmlPullParserException,
+            IOException {
 
         final int depth = parser.getDepth();
         int type;
@@ -739,24 +789,20 @@
             
             if (TAG_REQUEST_FOCUS.equals(name)) {
                 parseRequestFocus(parser, parent);
+            } else if (TAG_TAG.equals(name)) {
+                parseViewTag(parser, parent, attrs);
             } else if (TAG_INCLUDE.equals(name)) {
                 if (parser.getDepth() == 0) {
                     throw new InflateException("<include /> cannot be the root element");
                 }
-                parseInclude(parser, parent, attrs);
+                parseInclude(parser, parent, attrs, inheritContext);
             } else if (TAG_MERGE.equals(name)) {
                 throw new InflateException("<merge /> must be the root element");
-            } else if (TAG_1995.equals(name)) {
-                final View view = new BlinkLayout(mContext, attrs);
-                final ViewGroup viewGroup = (ViewGroup) parent;
-                final ViewGroup.LayoutParams params = viewGroup.generateLayoutParams(attrs);
-                rInflate(parser, view, attrs, true);
-                viewGroup.addView(view, params);                
             } else {
-                final View view = createViewFromTag(parent, name, attrs);
+                final View view = createViewFromTag(parent, name, attrs, inheritContext);
                 final ViewGroup viewGroup = (ViewGroup) parent;
                 final ViewGroup.LayoutParams params = viewGroup.generateLayoutParams(attrs);
-                rInflate(parser, view, attrs, true);
+                rInflate(parser, view, attrs, true, true);
                 viewGroup.addView(view, params);
             }
         }
@@ -764,10 +810,14 @@
         if (finishInflate) parent.onFinishInflate();
     }
 
-    private void parseRequestFocus(XmlPullParser parser, View parent)
+    /**
+     * Parses a <code>&lt;request-focus&gt;</code> element and requests focus on
+     * the containing View.
+     */
+    private void parseRequestFocus(XmlPullParser parser, View view)
             throws XmlPullParserException, IOException {
         int type;
-        parent.requestFocus();
+        view.requestFocus();
         final int currentDepth = parser.getDepth();
         while (((type = parser.next()) != XmlPullParser.END_TAG ||
                 parser.getDepth() > currentDepth) && type != XmlPullParser.END_DOCUMENT) {
@@ -775,9 +825,30 @@
         }
     }
 
-    private void parseInclude(XmlPullParser parser, View parent, AttributeSet attrs)
+    /**
+     * Parses a <code>&lt;tag&gt;</code> element and sets a keyed tag on the
+     * containing View.
+     */
+    private void parseViewTag(XmlPullParser parser, View view, AttributeSet attrs)
             throws XmlPullParserException, IOException {
+        int type;
 
+        final TypedArray ta = mContext.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ViewTag);
+        final int key = ta.getResourceId(com.android.internal.R.styleable.ViewTag_id, 0);
+        final CharSequence value = ta.getText(com.android.internal.R.styleable.ViewTag_value);
+        view.setTag(key, value);
+        ta.recycle();
+
+        final int currentDepth = parser.getDepth();
+        while (((type = parser.next()) != XmlPullParser.END_TAG ||
+                parser.getDepth() > currentDepth) && type != XmlPullParser.END_DOCUMENT) {
+            // Empty
+        }
+    }
+
+    private void parseInclude(XmlPullParser parser, View parent, AttributeSet attrs,
+            boolean inheritContext) throws XmlPullParserException, IOException {
         int type;
 
         if (parent instanceof ViewGroup) {
@@ -812,9 +883,10 @@
 
                     if (TAG_MERGE.equals(childName)) {
                         // Inflate all children.
-                        rInflate(childParser, parent, childAttrs, false);
+                        rInflate(childParser, parent, childAttrs, false, inheritContext);
                     } else {
-                        final View view = createViewFromTag(parent, childName, childAttrs);
+                        final View view = createViewFromTag(parent, childName, childAttrs,
+                                inheritContext);
                         final ViewGroup group = (ViewGroup) parent;
 
                         // We try to load the layout params set in the <include /> tag. If
@@ -837,7 +909,7 @@
                         }
 
                         // Inflate all children.
-                        rInflate(childParser, view, childAttrs, true);
+                        rInflate(childParser, view, childAttrs, true, true);
 
                         // Attempt to override the included layout's android:id with the
                         // one set on the <include /> tag itself.
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index 6378ffd..0626ab96 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -167,6 +167,7 @@
  */
 public final class MotionEvent extends InputEvent implements Parcelable {
     private static final long NS_PER_MS = 1000000;
+    private static final String LABEL_PREFIX = "AXIS_";
 
     /**
      * An invalid pointer id.
@@ -1369,6 +1370,9 @@
     private static native long nativeReadFromParcel(long nativePtr, Parcel parcel);
     private static native void nativeWriteToParcel(long nativePtr, Parcel parcel);
 
+    private static native String nativeAxisToString(int axis);
+    private static native int nativeAxisFromString(String label);
+
     private MotionEvent() {
     }
 
@@ -3051,8 +3055,8 @@
      * @return The symbolic name of the specified axis.
      */
     public static String axisToString(int axis) {
-        String symbolicName = AXIS_SYMBOLIC_NAMES.get(axis);
-        return symbolicName != null ? symbolicName : Integer.toString(axis);
+        String symbolicName = nativeAxisToString(axis);
+        return symbolicName != null ? LABEL_PREFIX + symbolicName : Integer.toString(axis);
     }
 
     /**
@@ -3064,17 +3068,13 @@
      * @see KeyEvent#keyCodeToString(int)
      */
     public static int axisFromString(String symbolicName) {
-        if (symbolicName == null) {
-            throw new IllegalArgumentException("symbolicName must not be null");
+        if (symbolicName.startsWith(LABEL_PREFIX)) {
+            symbolicName = symbolicName.substring(LABEL_PREFIX.length());
         }
-
-        final int count = AXIS_SYMBOLIC_NAMES.size();
-        for (int i = 0; i < count; i++) {
-            if (symbolicName.equals(AXIS_SYMBOLIC_NAMES.valueAt(i))) {
-                return i;
-            }
+        int axis = nativeAxisFromString(symbolicName);
+        if (axis >= 0) {
+            return axis;
         }
-
         try {
             return Integer.parseInt(symbolicName, 10);
         } catch (NumberFormatException ex) {
diff --git a/core/java/android/view/PointerIcon.java b/core/java/android/view/PointerIcon.java
index bb7ed41..063a08d 100644
--- a/core/java/android/view/PointerIcon.java
+++ b/core/java/android/view/PointerIcon.java
@@ -140,7 +140,7 @@
         if ((resourceId & 0xff000000) == 0x01000000) {
             icon.mSystemIconResourceId = resourceId;
         } else {
-            icon.loadResource(context.getResources(), resourceId);
+            icon.loadResource(context, context.getResources(), resourceId);
         }
         return icon;
     }
@@ -198,7 +198,7 @@
         }
 
         PointerIcon icon = new PointerIcon(STYLE_CUSTOM);
-        icon.loadResource(resources, resourceId);
+        icon.loadResource(null, resources, resourceId);
         return icon;
     }
 
@@ -224,7 +224,7 @@
 
         PointerIcon result = new PointerIcon(mStyle);
         result.mSystemIconResourceId = mSystemIconResourceId;
-        result.loadResource(context.getResources(), mSystemIconResourceId);
+        result.loadResource(context, context.getResources(), mSystemIconResourceId);
         return result;
     }
 
@@ -373,7 +373,7 @@
         return true;
     }
 
-    private void loadResource(Resources resources, int resourceId) {
+    private void loadResource(Context context, Resources resources, int resourceId) {
         XmlResourceParser parser = resources.getXml(resourceId);
         final int bitmapRes;
         final float hotSpotX;
@@ -397,7 +397,12 @@
             throw new IllegalArgumentException("<pointer-icon> is missing bitmap attribute.");
         }
 
-        Drawable drawable = resources.getDrawable(bitmapRes);
+        Drawable drawable;
+        if (context == null) {
+            drawable = resources.getDrawable(bitmapRes);
+        } else {
+            drawable = context.getDrawable(bitmapRes);
+        }
         if (!(drawable instanceof BitmapDrawable)) {
             throw new IllegalArgumentException("<pointer-icon> bitmap attribute must "
                     + "refer to a bitmap drawable.");
diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java
new file mode 100644
index 0000000..8b80c3e0
--- /dev/null
+++ b/core/java/android/view/RenderNode.java
@@ -0,0 +1,961 @@
+/*
+ * Copyright (C) 2010 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 android.view;
+
+import android.annotation.NonNull;
+import android.graphics.Matrix;
+import android.graphics.Outline;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * <p>A display list records a series of graphics related operations and can replay
+ * them later. Display lists are usually built by recording operations on a
+ * {@link HardwareCanvas}. Replaying the operations from a display list avoids
+ * executing application code on every frame, and is thus much more efficient.</p>
+ *
+ * <p>Display lists are used internally for all views by default, and are not
+ * typically used directly. One reason to consider using a display is a custom
+ * {@link View} implementation that needs to issue a large number of drawing commands.
+ * When the view invalidates, all the drawing commands must be reissued, even if
+ * large portions of the drawing command stream stay the same frame to frame, which
+ * can become a performance bottleneck. To solve this issue, a custom View might split
+ * its content into several display lists. A display list is updated only when its
+ * content, and only its content, needs to be updated.</p>
+ *
+ * <p>A text editor might for instance store each paragraph into its own display list.
+ * Thus when the user inserts or removes characters, only the display list of the
+ * affected paragraph needs to be recorded again.</p>
+ *
+ * <h3>Hardware acceleration</h3>
+ * <p>Display lists can only be replayed using a {@link HardwareCanvas}. They are not
+ * supported in software. Always make sure that the {@link android.graphics.Canvas}
+ * you are using to render a display list is hardware accelerated using
+ * {@link android.graphics.Canvas#isHardwareAccelerated()}.</p>
+ *
+ * <h3>Creating a display list</h3>
+ * <pre class="prettyprint">
+ *     HardwareRenderer renderer = myView.getHardwareRenderer();
+ *     if (renderer != null) {
+ *         DisplayList displayList = renderer.createDisplayList();
+ *         HardwareCanvas canvas = displayList.start(width, height);
+ *         try {
+ *             // Draw onto the canvas
+ *             // For instance: canvas.drawBitmap(...);
+ *         } finally {
+ *             displayList.end();
+ *         }
+ *     }
+ * </pre>
+ *
+ * <h3>Rendering a display list on a View</h3>
+ * <pre class="prettyprint">
+ *     protected void onDraw(Canvas canvas) {
+ *         if (canvas.isHardwareAccelerated()) {
+ *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
+ *             hardwareCanvas.drawDisplayList(mDisplayList);
+ *         }
+ *     }
+ * </pre>
+ *
+ * <h3>Releasing resources</h3>
+ * <p>This step is not mandatory but recommended if you want to release resources
+ * held by a display list as soon as possible.</p>
+ * <pre class="prettyprint">
+ *     // Mark this display list invalid, it cannot be used for drawing anymore,
+ *     // and release resources held by this display list
+ *     displayList.clear();
+ * </pre>
+ *
+ * <h3>Properties</h3>
+ * <p>In addition, a display list offers several properties, such as
+ * {@link #setScaleX(float)} or {@link #setLeft(int)}, that can be used to affect all
+ * the drawing commands recorded within. For instance, these properties can be used
+ * to move around a large number of images without re-issuing all the individual
+ * <code>drawBitmap()</code> calls.</p>
+ *
+ * <pre class="prettyprint">
+ *     private void createDisplayList() {
+ *         mDisplayList = DisplayList.create("MyDisplayList");
+ *         HardwareCanvas canvas = mDisplayList.start(width, height);
+ *         try {
+ *             for (Bitmap b : mBitmaps) {
+ *                 canvas.drawBitmap(b, 0.0f, 0.0f, null);
+ *                 canvas.translate(0.0f, b.getHeight());
+ *             }
+ *         } finally {
+ *             displayList.end();
+ *         }
+ *     }
+ *
+ *     protected void onDraw(Canvas canvas) {
+ *         if (canvas.isHardwareAccelerated()) {
+ *             HardwareCanvas hardwareCanvas = (HardwareCanvas) canvas;
+ *             hardwareCanvas.drawDisplayList(mDisplayList);
+ *         }
+ *     }
+ *
+ *     private void moveContentBy(int x) {
+ *          // This will move all the bitmaps recorded inside the display list
+ *          // by x pixels to the right and redraw this view. All the commands
+ *          // recorded in createDisplayList() won't be re-issued, only onDraw()
+ *          // will be invoked and will execute very quickly
+ *          mDisplayList.offsetLeftAndRight(x);
+ *          invalidate();
+ *     }
+ * </pre>
+ *
+ * <h3>Threading</h3>
+ * <p>Display lists must be created on and manipulated from the UI thread only.</p>
+ *
+ * @hide
+ */
+public class RenderNode {
+    /**
+     * Flag used when calling
+     * {@link HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)}
+     * When this flag is set, draw operations lying outside of the bounds of the
+     * display list will be culled early. It is recommeneded to always set this
+     * flag.
+     *
+     * @hide
+     */
+    public static final int FLAG_CLIP_CHILDREN = 0x1;
+
+    // NOTE: The STATUS_* values *must* match the enum in DrawGlInfo.h
+
+    /**
+     * Indicates that the display list is done drawing.
+     *
+     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
+     *
+     * @hide
+     */
+    public static final int STATUS_DONE = 0x0;
+
+    /**
+     * Indicates that the display list needs another drawing pass.
+     *
+     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
+     *
+     * @hide
+     */
+    public static final int STATUS_DRAW = 0x1;
+
+    /**
+     * Indicates that the display list needs to re-execute its GL functors.
+     *
+     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
+     * @see HardwareCanvas#callDrawGLFunction(long)
+     *
+     * @hide
+     */
+    public static final int STATUS_INVOKE = 0x2;
+
+    /**
+     * Indicates that the display list performed GL drawing operations.
+     *
+     * @see HardwareCanvas#drawDisplayList(RenderNode, android.graphics.Rect, int)
+     *
+     * @hide
+     */
+    public static final int STATUS_DREW = 0x4;
+
+    private boolean mValid;
+    private final long mNativeRenderNode;
+
+    // We need to keep a strong reference to all running animators to ensure that
+    // they can call removeAnimator when they have finished, as the native-side
+    // object can only hold a WeakReference<> to avoid leaking memory due to
+    // cyclic references.
+    private List<RenderNodeAnimator> mActiveAnimators;
+
+    private RenderNode(String name) {
+        mNativeRenderNode = nCreate(name);
+    }
+
+    /**
+     * @see RenderNode#adopt(long)
+     */
+    private RenderNode(long nativePtr) {
+        mNativeRenderNode = nativePtr;
+    }
+
+    /**
+     * Creates a new display list that can be used to record batches of
+     * drawing operations.
+     *
+     * @param name The name of the display list, used for debugging purpose. May be null.
+     *
+     * @return A new display list.
+     *
+     * @hide
+     */
+    public static RenderNode create(String name) {
+        return new RenderNode(name);
+    }
+
+    /**
+     * Adopts an existing native render node.
+     *
+     * Note: This will *NOT* incRef() on the native object, however it will
+     * decRef() when it is destroyed. The caller should have already incRef'd it
+     */
+    public static RenderNode adopt(long nativePtr) {
+        return new RenderNode(nativePtr);
+    }
+
+
+    /**
+     * Starts recording a display list for the render node. All
+     * operations performed on the returned canvas are recorded and
+     * stored in this display list.
+     *
+     * Calling this method will mark the render node invalid until
+     * {@link #end(HardwareCanvas)} is called.
+     * Only valid render nodes can be replayed.
+     *
+     * @param width The width of the recording viewport
+     * @param height The height of the recording viewport
+     *
+     * @return A canvas to record drawing operations.
+     *
+     * @see #end(HardwareCanvas)
+     * @see #isValid()
+     */
+    public HardwareCanvas start(int width, int height) {
+        HardwareCanvas canvas = GLES20RecordingCanvas.obtain();
+        canvas.setViewport(width, height);
+        // The dirty rect should always be null for a display list
+        canvas.onPreDraw(null);
+        return canvas;
+    }
+
+    /**
+     * Ends the recording for this display list. A display list cannot be
+     * replayed if recording is not finished. Calling this method marks
+     * the display list valid and {@link #isValid()} will return true.
+     *
+     * @see #start(int, int)
+     * @see #isValid()
+     */
+    public void end(HardwareCanvas endCanvas) {
+        if (!(endCanvas instanceof GLES20RecordingCanvas)) {
+            throw new IllegalArgumentException("Passed an invalid canvas to end!");
+        }
+
+        GLES20RecordingCanvas canvas = (GLES20RecordingCanvas) endCanvas;
+        canvas.onPostDraw();
+        long renderNodeData = canvas.finishRecording();
+        nSetDisplayListData(mNativeRenderNode, renderNodeData);
+        canvas.recycle();
+        mValid = true;
+    }
+
+    /**
+     * Reset native resources. This is called when cleaning up the state of display lists
+     * during destruction of hardware resources, to ensure that we do not hold onto
+     * obsolete resources after related resources are gone.
+     *
+     * @hide
+     */
+    public void destroyDisplayListData() {
+        if (!mValid) return;
+
+        nSetDisplayListData(mNativeRenderNode, 0);
+        mValid = false;
+    }
+
+    /**
+     * Returns whether the RenderNode's display list content is currently usable.
+     * If this returns false, the display list should be re-recorded prior to replaying it.
+     *
+     * @return boolean true if the display list is able to be replayed, false otherwise.
+     */
+    public boolean isValid() { return mValid; }
+
+    long getNativeDisplayList() {
+        if (!mValid) {
+            throw new IllegalStateException("The display list is not valid.");
+        }
+        return mNativeRenderNode;
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Matrix manipulation
+    ///////////////////////////////////////////////////////////////////////////
+
+    public boolean hasIdentityMatrix() {
+        return nHasIdentityMatrix(mNativeRenderNode);
+    }
+
+    public void getMatrix(@NonNull Matrix outMatrix) {
+        nGetTransformMatrix(mNativeRenderNode, outMatrix.native_instance);
+    }
+
+    public void getInverseMatrix(@NonNull Matrix outMatrix) {
+        nGetInverseTransformMatrix(mNativeRenderNode, outMatrix.native_instance);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // RenderProperty Setters
+    ///////////////////////////////////////////////////////////////////////////
+
+    /**
+     * Set the caching property on the display list, which indicates whether the display list
+     * holds a layer. Layer display lists should avoid creating an alpha layer, since alpha is
+     * handled in the drawLayer operation directly (and more efficiently).
+     *
+     * @param caching true if the display list represents a hardware layer, false otherwise.
+     *
+     * @hide
+     */
+    public void setCaching(boolean caching) {
+        nSetCaching(mNativeRenderNode, caching);
+    }
+
+    /**
+     * Set whether the Render node should clip itself to its bounds. This property is controlled by
+     * the view's parent.
+     *
+     * @param clipToBounds true if the display list should clip to its bounds
+     */
+    public void setClipToBounds(boolean clipToBounds) {
+        nSetClipToBounds(mNativeRenderNode, clipToBounds);
+    }
+
+    /**
+     * Sets whether the display list should be drawn immediately after the
+     * closest ancestor display list containing a projection receiver.
+     *
+     * @param shouldProject true if the display list should be projected onto a
+     *            containing volume.
+     */
+    public void setProjectBackwards(boolean shouldProject) {
+        nSetProjectBackwards(mNativeRenderNode, shouldProject);
+    }
+
+    /**
+     * Sets whether the display list is a projection receiver - that its parent
+     * DisplayList should draw any descendent DisplayLists with
+     * ProjectBackwards=true directly on top of it. Default value is false.
+     */
+    public void setProjectionReceiver(boolean shouldRecieve) {
+        nSetProjectionReceiver(mNativeRenderNode, shouldRecieve);
+    }
+
+    /**
+     * Sets the outline, defining the shape that casts a shadow, and the path to
+     * be clipped if setClipToOutline is set.
+     *
+     * Deep copies the data into native to simplify reference ownership.
+     */
+    public void setOutline(Outline outline) {
+        if (outline == null) {
+            nSetOutlineEmpty(mNativeRenderNode);
+        } else if (!outline.isValid()) {
+            throw new IllegalArgumentException("Outline must be valid");
+        } else if (outline.mRect != null) {
+            nSetOutlineRoundRect(mNativeRenderNode, outline.mRect.left, outline.mRect.top,
+                    outline.mRect.right, outline.mRect.bottom, outline.mRadius);
+        } else if (outline.mPath != null) {
+            nSetOutlineConvexPath(mNativeRenderNode, outline.mPath.mNativePath);
+        }
+    }
+
+    /**
+     * Enables or disables clipping to the outline.
+     *
+     * @param clipToOutline true if clipping to the outline.
+     */
+    public void setClipToOutline(boolean clipToOutline) {
+        nSetClipToOutline(mNativeRenderNode, clipToOutline);
+    }
+
+    /**
+     * Controls the RenderNode's circular reveal clip.
+     */
+    public void setRevealClip(boolean shouldClip, boolean inverseClip,
+            float x, float y, float radius) {
+        nSetRevealClip(mNativeRenderNode, shouldClip, inverseClip, x, y, radius);
+    }
+
+    /**
+     * Set the static matrix on the display list. The specified matrix is combined with other
+     * transforms (such as {@link #setScaleX(float)}, {@link #setRotation(float)}, etc.)
+     *
+     * @param matrix A transform matrix to apply to this display list
+     */
+    public void setStaticMatrix(Matrix matrix) {
+        nSetStaticMatrix(mNativeRenderNode, matrix.native_instance);
+    }
+
+    /**
+     * Set the Animation matrix on the display list. This matrix exists if an Animation is
+     * currently playing on a View, and is set on the display list during at draw() time. When
+     * the Animation finishes, the matrix should be cleared by sending <code>null</code>
+     * for the matrix parameter.
+     *
+     * @param matrix The matrix, null indicates that the matrix should be cleared.
+     *
+     * @hide
+     */
+    public void setAnimationMatrix(Matrix matrix) {
+        nSetAnimationMatrix(mNativeRenderNode,
+                (matrix != null) ? matrix.native_instance : 0);
+    }
+
+    /**
+     * Sets the translucency level for the display list.
+     *
+     * @param alpha The translucency of the display list, must be a value between 0.0f and 1.0f
+     *
+     * @see View#setAlpha(float)
+     * @see #getAlpha()
+     */
+    public void setAlpha(float alpha) {
+        nSetAlpha(mNativeRenderNode, alpha);
+    }
+
+    /**
+     * Returns the translucency level of this display list.
+     *
+     * @return A value between 0.0f and 1.0f
+     *
+     * @see #setAlpha(float)
+     */
+    public float getAlpha() {
+        return nGetAlpha(mNativeRenderNode);
+    }
+
+    /**
+     * Sets whether the display list renders content which overlaps. Non-overlapping rendering
+     * can use a fast path for alpha that avoids rendering to an offscreen buffer. By default
+     * display lists consider they do not have overlapping content.
+     *
+     * @param hasOverlappingRendering False if the content is guaranteed to be non-overlapping,
+     *                                true otherwise.
+     *
+     * @see android.view.View#hasOverlappingRendering()
+     * @see #hasOverlappingRendering()
+     */
+    public void setHasOverlappingRendering(boolean hasOverlappingRendering) {
+        nSetHasOverlappingRendering(mNativeRenderNode, hasOverlappingRendering);
+    }
+
+    /**
+     * Indicates whether the content of this display list overlaps.
+     *
+     * @return True if this display list renders content which overlaps, false otherwise.
+     *
+     * @see #setHasOverlappingRendering(boolean)
+     */
+    public boolean hasOverlappingRendering() {
+        //noinspection SimplifiableIfStatement
+        return nHasOverlappingRendering(mNativeRenderNode);
+    }
+
+    public void setElevation(float lift) {
+        nSetElevation(mNativeRenderNode, lift);
+    }
+
+    public float getElevation() {
+        return nGetElevation(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the translation value for the display list on the X axis.
+     *
+     * @param translationX The X axis translation value of the display list, in pixels
+     *
+     * @see View#setTranslationX(float)
+     * @see #getTranslationX()
+     */
+    public void setTranslationX(float translationX) {
+        nSetTranslationX(mNativeRenderNode, translationX);
+    }
+
+    /**
+     * Returns the translation value for this display list on the X axis, in pixels.
+     *
+     * @see #setTranslationX(float)
+     */
+    public float getTranslationX() {
+        return nGetTranslationX(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the translation value for the display list on the Y axis.
+     *
+     * @param translationY The Y axis translation value of the display list, in pixels
+     *
+     * @see View#setTranslationY(float)
+     * @see #getTranslationY()
+     */
+    public void setTranslationY(float translationY) {
+        nSetTranslationY(mNativeRenderNode, translationY);
+    }
+
+    /**
+     * Returns the translation value for this display list on the Y axis, in pixels.
+     *
+     * @see #setTranslationY(float)
+     */
+    public float getTranslationY() {
+        return nGetTranslationY(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the translation value for the display list on the Z axis.
+     *
+     * @see View#setTranslationZ(float)
+     * @see #getTranslationZ()
+     */
+    public void setTranslationZ(float translationZ) {
+        nSetTranslationZ(mNativeRenderNode, translationZ);
+    }
+
+    /**
+     * Returns the translation value for this display list on the Z axis.
+     *
+     * @see #setTranslationZ(float)
+     */
+    public float getTranslationZ() {
+        return nGetTranslationZ(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the rotation value for the display list around the Z axis.
+     *
+     * @param rotation The rotation value of the display list, in degrees
+     *
+     * @see View#setRotation(float)
+     * @see #getRotation()
+     */
+    public void setRotation(float rotation) {
+        nSetRotation(mNativeRenderNode, rotation);
+    }
+
+    /**
+     * Returns the rotation value for this display list around the Z axis, in degrees.
+     *
+     * @see #setRotation(float)
+     */
+    public float getRotation() {
+        return nGetRotation(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the rotation value for the display list around the X axis.
+     *
+     * @param rotationX The rotation value of the display list, in degrees
+     *
+     * @see View#setRotationX(float)
+     * @see #getRotationX()
+     */
+    public void setRotationX(float rotationX) {
+        nSetRotationX(mNativeRenderNode, rotationX);
+    }
+
+    /**
+     * Returns the rotation value for this display list around the X axis, in degrees.
+     *
+     * @see #setRotationX(float)
+     */
+    public float getRotationX() {
+        return nGetRotationX(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the rotation value for the display list around the Y axis.
+     *
+     * @param rotationY The rotation value of the display list, in degrees
+     *
+     * @see View#setRotationY(float)
+     * @see #getRotationY()
+     */
+    public void setRotationY(float rotationY) {
+        nSetRotationY(mNativeRenderNode, rotationY);
+    }
+
+    /**
+     * Returns the rotation value for this display list around the Y axis, in degrees.
+     *
+     * @see #setRotationY(float)
+     */
+    public float getRotationY() {
+        return nGetRotationY(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the scale value for the display list on the X axis.
+     *
+     * @param scaleX The scale value of the display list
+     *
+     * @see View#setScaleX(float)
+     * @see #getScaleX()
+     */
+    public void setScaleX(float scaleX) {
+        nSetScaleX(mNativeRenderNode, scaleX);
+    }
+
+    /**
+     * Returns the scale value for this display list on the X axis.
+     *
+     * @see #setScaleX(float)
+     */
+    public float getScaleX() {
+        return nGetScaleX(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the scale value for the display list on the Y axis.
+     *
+     * @param scaleY The scale value of the display list
+     *
+     * @see View#setScaleY(float)
+     * @see #getScaleY()
+     */
+    public void setScaleY(float scaleY) {
+        nSetScaleY(mNativeRenderNode, scaleY);
+    }
+
+    /**
+     * Returns the scale value for this display list on the Y axis.
+     *
+     * @see #setScaleY(float)
+     */
+    public float getScaleY() {
+        return nGetScaleY(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the pivot value for the display list on the X axis
+     *
+     * @param pivotX The pivot value of the display list on the X axis, in pixels
+     *
+     * @see View#setPivotX(float)
+     * @see #getPivotX()
+     */
+    public void setPivotX(float pivotX) {
+        nSetPivotX(mNativeRenderNode, pivotX);
+    }
+
+    /**
+     * Returns the pivot value for this display list on the X axis, in pixels.
+     *
+     * @see #setPivotX(float)
+     */
+    public float getPivotX() {
+        return nGetPivotX(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the pivot value for the display list on the Y axis
+     *
+     * @param pivotY The pivot value of the display list on the Y axis, in pixels
+     *
+     * @see View#setPivotY(float)
+     * @see #getPivotY()
+     */
+    public void setPivotY(float pivotY) {
+        nSetPivotY(mNativeRenderNode, pivotY);
+    }
+
+    /**
+     * Returns the pivot value for this display list on the Y axis, in pixels.
+     *
+     * @see #setPivotY(float)
+     */
+    public float getPivotY() {
+        return nGetPivotY(mNativeRenderNode);
+    }
+
+    public boolean isPivotExplicitlySet() {
+        return nIsPivotExplicitlySet(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the camera distance for the display list. Refer to
+     * {@link View#setCameraDistance(float)} for more information on how to
+     * use this property.
+     *
+     * @param distance The distance in Z of the camera of the display list
+     *
+     * @see View#setCameraDistance(float)
+     * @see #getCameraDistance()
+     */
+    public void setCameraDistance(float distance) {
+        nSetCameraDistance(mNativeRenderNode, distance);
+    }
+
+    /**
+     * Returns the distance in Z of the camera of the display list.
+     *
+     * @see #setCameraDistance(float)
+     */
+    public float getCameraDistance() {
+        return nGetCameraDistance(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the left position for the display list.
+     *
+     * @param left The left position, in pixels, of the display list
+     *
+     * @see View#setLeft(int)
+     * @see #getLeft()
+     */
+    public void setLeft(int left) {
+        nSetLeft(mNativeRenderNode, left);
+    }
+
+    /**
+     * Returns the left position for the display list in pixels.
+     *
+     * @see #setLeft(int)
+     */
+    public float getLeft() {
+        return nGetLeft(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the top position for the display list.
+     *
+     * @param top The top position, in pixels, of the display list
+     *
+     * @see View#setTop(int)
+     * @see #getTop()
+     */
+    public void setTop(int top) {
+        nSetTop(mNativeRenderNode, top);
+    }
+
+    /**
+     * Returns the top position for the display list in pixels.
+     *
+     * @see #setTop(int)
+     */
+    public float getTop() {
+        return nGetTop(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the right position for the display list.
+     *
+     * @param right The right position, in pixels, of the display list
+     *
+     * @see View#setRight(int)
+     * @see #getRight()
+     */
+    public void setRight(int right) {
+        nSetRight(mNativeRenderNode, right);
+    }
+
+    /**
+     * Returns the right position for the display list in pixels.
+     *
+     * @see #setRight(int)
+     */
+    public float getRight() {
+        return nGetRight(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the bottom position for the display list.
+     *
+     * @param bottom The bottom position, in pixels, of the display list
+     *
+     * @see View#setBottom(int)
+     * @see #getBottom()
+     */
+    public void setBottom(int bottom) {
+        nSetBottom(mNativeRenderNode, bottom);
+    }
+
+    /**
+     * Returns the bottom position for the display list in pixels.
+     *
+     * @see #setBottom(int)
+     */
+    public float getBottom() {
+        return nGetBottom(mNativeRenderNode);
+    }
+
+    /**
+     * Sets the left and top positions for the display list
+     *
+     * @param left The left position of the display list, in pixels
+     * @param top The top position of the display list, in pixels
+     * @param right The right position of the display list, in pixels
+     * @param bottom The bottom position of the display list, in pixels
+     *
+     * @see View#setLeft(int)
+     * @see View#setTop(int)
+     * @see View#setRight(int)
+     * @see View#setBottom(int)
+     */
+    public void setLeftTopRightBottom(int left, int top, int right, int bottom) {
+        nSetLeftTopRightBottom(mNativeRenderNode, left, top, right, bottom);
+    }
+
+    /**
+     * Offsets the left and right positions for the display list
+     *
+     * @param offset The amount that the left and right positions of the display
+     *               list are offset, in pixels
+     *
+     * @see View#offsetLeftAndRight(int)
+     */
+    public void offsetLeftAndRight(float offset) {
+        nOffsetLeftAndRight(mNativeRenderNode, offset);
+    }
+
+    /**
+     * Offsets the top and bottom values for the display list
+     *
+     * @param offset The amount that the top and bottom positions of the display
+     *               list are offset, in pixels
+     *
+     * @see View#offsetTopAndBottom(int)
+     */
+    public void offsetTopAndBottom(float offset) {
+        nOffsetTopAndBottom(mNativeRenderNode, offset);
+    }
+
+    /**
+     * Outputs the display list to the log. This method exists for use by
+     * tools to output display lists for selected nodes to the log.
+     *
+     * @hide
+     */
+    public void output() {
+        nOutput(mNativeRenderNode);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Animations
+    ///////////////////////////////////////////////////////////////////////////
+
+    public void addAnimator(RenderNodeAnimator animator) {
+        if (mActiveAnimators == null) {
+            mActiveAnimators = new ArrayList<RenderNodeAnimator>();
+        }
+        mActiveAnimators.add(animator);
+        nAddAnimator(mNativeRenderNode, animator.getNativeAnimator());
+    }
+
+    public void removeAnimator(RenderNodeAnimator animator) {
+        nRemoveAnimator(mNativeRenderNode, animator.getNativeAnimator());
+        mActiveAnimators.remove(animator);
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Native methods
+    ///////////////////////////////////////////////////////////////////////////
+
+    private static native long nCreate(String name);
+    private static native void nDestroyRenderNode(long renderNode);
+    private static native void nSetDisplayListData(long renderNode, long newData);
+
+    // Matrix
+
+    private static native void nGetTransformMatrix(long renderNode, long nativeMatrix);
+    private static native void nGetInverseTransformMatrix(long renderNode, long nativeMatrix);
+    private static native boolean nHasIdentityMatrix(long renderNode);
+
+    // Properties
+
+    private static native void nOffsetTopAndBottom(long renderNode, float offset);
+    private static native void nOffsetLeftAndRight(long renderNode, float offset);
+    private static native void nSetLeftTopRightBottom(long renderNode, int left, int top,
+            int right, int bottom);
+    private static native void nSetBottom(long renderNode, int bottom);
+    private static native void nSetRight(long renderNode, int right);
+    private static native void nSetTop(long renderNode, int top);
+    private static native void nSetLeft(long renderNode, int left);
+    private static native void nSetCameraDistance(long renderNode, float distance);
+    private static native void nSetPivotY(long renderNode, float pivotY);
+    private static native void nSetPivotX(long renderNode, float pivotX);
+    private static native void nSetCaching(long renderNode, boolean caching);
+    private static native void nSetClipToBounds(long renderNode, boolean clipToBounds);
+    private static native void nSetProjectBackwards(long renderNode, boolean shouldProject);
+    private static native void nSetProjectionReceiver(long renderNode, boolean shouldRecieve);
+    private static native void nSetOutlineRoundRect(long renderNode, int left, int top,
+            int right, int bottom, float radius);
+    private static native void nSetOutlineConvexPath(long renderNode, long nativePath);
+    private static native void nSetOutlineEmpty(long renderNode);
+    private static native void nSetClipToOutline(long renderNode, boolean clipToOutline);
+    private static native void nSetRevealClip(long renderNode,
+            boolean shouldClip, boolean inverseClip, float x, float y, float radius);
+    private static native void nSetAlpha(long renderNode, float alpha);
+    private static native void nSetHasOverlappingRendering(long renderNode,
+            boolean hasOverlappingRendering);
+    private static native void nSetElevation(long renderNode, float lift);
+    private static native void nSetTranslationX(long renderNode, float translationX);
+    private static native void nSetTranslationY(long renderNode, float translationY);
+    private static native void nSetTranslationZ(long renderNode, float translationZ);
+    private static native void nSetRotation(long renderNode, float rotation);
+    private static native void nSetRotationX(long renderNode, float rotationX);
+    private static native void nSetRotationY(long renderNode, float rotationY);
+    private static native void nSetScaleX(long renderNode, float scaleX);
+    private static native void nSetScaleY(long renderNode, float scaleY);
+    private static native void nSetStaticMatrix(long renderNode, long nativeMatrix);
+    private static native void nSetAnimationMatrix(long renderNode, long animationMatrix);
+
+    private static native boolean nHasOverlappingRendering(long renderNode);
+    private static native float nGetAlpha(long renderNode);
+    private static native float nGetLeft(long renderNode);
+    private static native float nGetTop(long renderNode);
+    private static native float nGetRight(long renderNode);
+    private static native float nGetBottom(long renderNode);
+    private static native float nGetCameraDistance(long renderNode);
+    private static native float nGetScaleX(long renderNode);
+    private static native float nGetScaleY(long renderNode);
+    private static native float nGetElevation(long renderNode);
+    private static native float nGetTranslationX(long renderNode);
+    private static native float nGetTranslationY(long renderNode);
+    private static native float nGetTranslationZ(long renderNode);
+    private static native float nGetRotation(long renderNode);
+    private static native float nGetRotationX(long renderNode);
+    private static native float nGetRotationY(long renderNode);
+    private static native boolean nIsPivotExplicitlySet(long renderNode);
+    private static native float nGetPivotX(long renderNode);
+    private static native float nGetPivotY(long renderNode);
+    private static native void nOutput(long renderNode);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Animations
+    ///////////////////////////////////////////////////////////////////////////
+
+    private static native void nAddAnimator(long renderNode, long animatorPtr);
+    private static native void nRemoveAnimator(long renderNode, long animatorPtr);
+
+    ///////////////////////////////////////////////////////////////////////////
+    // Finalization
+    ///////////////////////////////////////////////////////////////////////////
+
+    @Override
+    protected void finalize() throws Throwable {
+        try {
+            nDestroyRenderNode(mNativeRenderNode);
+        } finally {
+            super.finalize();
+        }
+    }
+}
diff --git a/core/java/android/view/RenderNodeAnimator.java b/core/java/android/view/RenderNodeAnimator.java
new file mode 100644
index 0000000..b70ae3d
--- /dev/null
+++ b/core/java/android/view/RenderNodeAnimator.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2014 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 android.view;
+
+import android.util.SparseIntArray;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * @hide
+ */
+public final class RenderNodeAnimator {
+
+    // Keep in sync with enum RenderProperty in Animator.h
+    private static final int TRANSLATION_X = 0;
+    private static final int TRANSLATION_Y = 1;
+    private static final int TRANSLATION_Z = 2;
+    private static final int SCALE_X = 3;
+    private static final int SCALE_Y = 4;
+    private static final int ROTATION = 5;
+    private static final int ROTATION_X = 6;
+    private static final int ROTATION_Y = 7;
+    private static final int X = 8;
+    private static final int Y = 9;
+    private static final int Z = 10;
+    private static final int ALPHA = 11;
+
+    // ViewPropertyAnimator uses a mask for its values, we need to remap them
+    // to the enum values here. RenderPropertyAnimator can't use the mask values
+    // directly as internally it uses a lookup table so it needs the values to
+    // be sequential starting from 0
+    private static final SparseIntArray sViewPropertyAnimatorMap = new SparseIntArray(15) {{
+        put(ViewPropertyAnimator.TRANSLATION_X, TRANSLATION_X);
+        put(ViewPropertyAnimator.TRANSLATION_Y, TRANSLATION_Y);
+        put(ViewPropertyAnimator.TRANSLATION_Z, TRANSLATION_Z);
+        put(ViewPropertyAnimator.SCALE_X, SCALE_X);
+        put(ViewPropertyAnimator.SCALE_Y, SCALE_Y);
+        put(ViewPropertyAnimator.ROTATION, ROTATION);
+        put(ViewPropertyAnimator.ROTATION_X, ROTATION_X);
+        put(ViewPropertyAnimator.ROTATION_Y, ROTATION_Y);
+        put(ViewPropertyAnimator.X, X);
+        put(ViewPropertyAnimator.Y, Y);
+        put(ViewPropertyAnimator.Z, Z);
+        put(ViewPropertyAnimator.ALPHA, ALPHA);
+    }};
+
+    // Keep in sync DeltaValueType in Animator.h
+    private static final int DELTA_TYPE_ABSOLUTE = 0;
+    private static final int DELTA_TYPE_DELTA = 1;
+
+    private RenderNode mTarget;
+    private long mNativePtr;
+
+    public int mapViewPropertyToRenderProperty(int viewProperty) {
+        return sViewPropertyAnimatorMap.get(viewProperty);
+    }
+
+    public RenderNodeAnimator(int property, int deltaType, float deltaValue) {
+        mNativePtr = nCreateAnimator(new WeakReference<RenderNodeAnimator>(this),
+                property, deltaType, deltaValue);
+    }
+
+    public void start(View target) {
+        mTarget = target.mRenderNode;
+        mTarget.addAnimator(this);
+        // Kick off a frame to start the process
+        target.invalidateViewProperty(true, false);
+    }
+
+    public void cancel() {
+        mTarget.removeAnimator(this);
+    }
+
+    public void setDuration(int duration) {
+        nSetDuration(mNativePtr, duration);
+    }
+
+    long getNativeAnimator() {
+        return mNativePtr;
+    }
+
+    private void onFinished() {
+        mTarget.removeAnimator(this);
+    }
+
+    // Called by native
+    private static void callOnFinished(WeakReference<RenderNodeAnimator> weakThis) {
+        RenderNodeAnimator animator = weakThis.get();
+        if (animator != null) {
+            animator.onFinished();
+        }
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        try {
+            nUnref(mNativePtr);
+            mNativePtr = 0;
+        } finally {
+            super.finalize();
+        }
+    }
+
+    private static native long nCreateAnimator(WeakReference<RenderNodeAnimator> weakThis,
+            int property, int deltaValueType, float deltaValue);
+    private static native void nSetDuration(long nativePtr, int duration);
+    private static native void nUnref(long nativePtr);
+}
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 91645e7..fdaae01 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -16,6 +16,7 @@
 
 package android.view;
 
+import android.annotation.IntDef;
 import android.content.res.CompatibilityInfo.Translator;
 import android.graphics.Canvas;
 import android.graphics.Matrix;
@@ -24,6 +25,10 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Log;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 import dalvik.system.CloseGuard;
 
 /**
@@ -80,6 +85,11 @@
     // non compatibility mode.
     private Matrix mCompatibleMatrix;
 
+    /** @hide */
+    @IntDef({ROTATION_0, ROTATION_90, ROTATION_180, ROTATION_270})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Rotation {}
+
     /**
      * Rotation constant: 0 degree rotation (natural orientation)
      */
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index eea5884..2d55a01 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -20,9 +20,7 @@
 import android.graphics.Bitmap;
 import android.graphics.Rect;
 import android.graphics.Region;
-import android.view.Surface;
 import android.os.IBinder;
-import android.os.SystemProperties;
 import android.util.Log;
 import android.view.Surface.OutOfResourcesException;
 
@@ -40,9 +38,11 @@
     private static native void nativeDestroy(long nativeObject);
 
     private static native Bitmap nativeScreenshot(IBinder displayToken,
-            int width, int height, int minLayer, int maxLayer, boolean allLayers);
+            int width, int height, int minLayer, int maxLayer, boolean allLayers,
+            boolean useIdentityTransform);
     private static native void nativeScreenshot(IBinder displayToken, Surface consumer,
-            int width, int height, int minLayer, int maxLayer, boolean allLayers);
+            int width, int height, int minLayer, int maxLayer, boolean allLayers,
+            boolean useIdentityTransform);
 
     private static native void nativeOpenTransaction();
     private static native void nativeCloseTransaction();
@@ -58,6 +58,11 @@
     private static native void nativeSetWindowCrop(long nativeObject, int l, int t, int r, int b);
     private static native void nativeSetLayerStack(long nativeObject, int layerStack);
 
+    private static native boolean nativeClearContentFrameStats(long nativeObject);
+    private static native boolean nativeGetContentFrameStats(long nativeObject, WindowContentFrameStats outStats);
+    private static native boolean nativeClearAnimationFrameStats();
+    private static native boolean nativeGetAnimationFrameStats(WindowAnimationFrameStats outStats);
+
     private static native IBinder nativeGetBuiltInDisplay(int physicalDisplayId);
     private static native IBinder nativeCreateDisplay(String name, boolean secure);
     private static native void nativeDestroyDisplay(IBinder displayToken);
@@ -178,13 +183,13 @@
      * Equivalent to calling hide().
      * Updates the value set during Surface creation (see {@link #HIDDEN}).
      */
-    public static final int SURFACE_HIDDEN = 0x01;
+    private static final int SURFACE_HIDDEN = 0x01;
 
     /**
      * Surface flag: composite without blending when possible.
      * Updates the value set during Surface creation (see {@link #OPAQUE}).
      */
-    public static final int SURFACE_OPAQUE = 0x02;
+    private static final int SURFACE_OPAQUE = 0x02;
 
 
     /* built-in physical display ids (keep in sync with ISurfaceComposer.h)
@@ -192,13 +197,13 @@
 
     /**
      * Built-in physical display id: Main display.
-     * Use only with {@link SurfaceControl#getBuiltInDisplay()}.
+     * Use only with {@link SurfaceControl#getBuiltInDisplay(int)}.
      */
     public static final int BUILT_IN_DISPLAY_ID_MAIN = 0;
 
     /**
      * Built-in physical display id: Attached HDMI display.
-     * Use only with {@link SurfaceControl#getBuiltInDisplay()}.
+     * Use only with {@link SurfaceControl#getBuiltInDisplay(int)}.
      */
     public static final int BUILT_IN_DISPLAY_ID_HDMI = 1;
 
@@ -356,6 +361,24 @@
         nativeSetTransparentRegionHint(mNativeObject, region);
     }
 
+    public boolean clearContentFrameStats() {
+        checkNotReleased();
+        return nativeClearContentFrameStats(mNativeObject);
+    }
+
+    public boolean getContentFrameStats(WindowContentFrameStats outStats) {
+        checkNotReleased();
+        return nativeGetContentFrameStats(mNativeObject, outStats);
+    }
+
+    public static boolean clearAnimationFrameStats() {
+        return nativeClearAnimationFrameStats();
+    }
+
+    public static boolean getAnimationFrameStats(WindowAnimationFrameStats outStats) {
+        return nativeGetAnimationFrameStats(outStats);
+    }
+
     /**
      * Sets an alpha value for the entire Surface.  This value is combined with the
      * per-pixel alpha.  It may be used with opaque Surfaces.
@@ -370,18 +393,6 @@
         nativeSetMatrix(mNativeObject, dsdx, dtdx, dsdy, dtdy);
     }
 
-    /**
-     * Sets and clears flags, such as {@link #SURFACE_HIDDEN}.  The new value will be:
-     * <p>
-     *   <code>newFlags = (oldFlags & ~mask) | (flags & mask)</code>
-     * <p>
-     * Note this does not take the same set of flags as the constructor.
-     */
-    public void setFlags(int flags, int mask) {
-        checkNotReleased();
-        nativeSetFlags(mNativeObject, flags, mask);
-    }
-
     public void setWindowCrop(Rect crop) {
         checkNotReleased();
         if (crop != null) {
@@ -553,7 +564,6 @@
         return nativeGetBuiltInDisplay(builtInDisplayId);
     }
 
-
     /**
      * Copy the current screen contents into the provided {@link Surface}
      *
@@ -567,10 +577,15 @@
      * include in the screenshot.
      * @param maxLayer The highest (top-most Z order) surface layer to
      * include in the screenshot.
+     * @param useIdentityTransform Replace whatever transformation (rotation,
+     * scaling, translation) the surface layers are currently using with the
+     * identity transformation while taking the screenshot.
      */
     public static void screenshot(IBinder display, Surface consumer,
-            int width, int height, int minLayer, int maxLayer) {
-        screenshot(display, consumer, width, height, minLayer, maxLayer, false);
+            int width, int height, int minLayer, int maxLayer,
+            boolean useIdentityTransform) {
+        screenshot(display, consumer, width, height, minLayer, maxLayer, false,
+                useIdentityTransform);
     }
 
     /**
@@ -585,7 +600,7 @@
      */
     public static void screenshot(IBinder display, Surface consumer,
             int width, int height) {
-        screenshot(display, consumer, width, height, 0, 0, true);
+        screenshot(display, consumer, width, height, 0, 0, true, false);
     }
 
     /**
@@ -595,10 +610,9 @@
      * @param consumer The {@link Surface} to take the screenshot into.
      */
     public static void screenshot(IBinder display, Surface consumer) {
-        screenshot(display, consumer, 0, 0, 0, 0, true);
+        screenshot(display, consumer, 0, 0, 0, 0, true, false);
     }
 
-
     /**
      * Copy the current screen contents into a bitmap and return it.
      *
@@ -615,20 +629,25 @@
      * include in the screenshot.
      * @param maxLayer The highest (top-most Z order) surface layer to
      * include in the screenshot.
+     * @param useIdentityTransform Replace whatever transformation (rotation,
+     * scaling, translation) the surface layers are currently using with the
+     * identity transformation while taking the screenshot.
      * @return Returns a Bitmap containing the screen contents, or null
      * if an error occurs. Make sure to call Bitmap.recycle() as soon as
      * possible, once its content is not needed anymore.
      */
-    public static Bitmap screenshot(int width, int height, int minLayer, int maxLayer) {
+    public static Bitmap screenshot(int width, int height, int minLayer, int maxLayer,
+            boolean useIdentityTransform) {
         // TODO: should take the display as a parameter
         IBinder displayToken = SurfaceControl.getBuiltInDisplay(
                 SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN);
-        return nativeScreenshot(displayToken, width, height, minLayer, maxLayer, false);
+        return nativeScreenshot(displayToken, width, height, minLayer, maxLayer, false,
+                useIdentityTransform);
     }
 
     /**
-     * Like {@link SurfaceControl#screenshot(int, int, int, int)} but includes all
-     * Surfaces in the screenshot.
+     * Like {@link SurfaceControl#screenshot(int, int, int, int, boolean)} but
+     * includes all Surfaces in the screenshot.
      *
      * @param width The desired width of the returned bitmap; the raw
      * screen will be scaled down to this size.
@@ -642,17 +661,19 @@
         // TODO: should take the display as a parameter
         IBinder displayToken = SurfaceControl.getBuiltInDisplay(
                 SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN);
-        return nativeScreenshot(displayToken, width, height, 0, 0, true);
+        return nativeScreenshot(displayToken, width, height, 0, 0, true, false);
     }
 
     private static void screenshot(IBinder display, Surface consumer,
-            int width, int height, int minLayer, int maxLayer, boolean allLayers) {
+            int width, int height, int minLayer, int maxLayer, boolean allLayers,
+            boolean useIdentityTransform) {
         if (display == null) {
             throw new IllegalArgumentException("displayToken must not be null");
         }
         if (consumer == null) {
             throw new IllegalArgumentException("consumer must not be null");
         }
-        nativeScreenshot(display, consumer, width, height, minLayer, maxLayer, allLayers);
+        nativeScreenshot(display, consumer, width, height, minLayer, maxLayer, allLayers,
+                useIdentityTransform);
     }
 }
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 22d4c9b..4a2cc1a 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -188,8 +188,13 @@
         init();
     }
 
-    public SurfaceView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public SurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    public SurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         init();
     }
 
@@ -250,8 +255,9 @@
         updateWindow(false, false);
     }
 
+    /** @hide */
     @Override
-    protected void onDetachedFromWindow() {
+    protected void onDetachedFromWindowInternal() {
         if (mGlobalListenersAdded) {
             ViewTreeObserver observer = getViewTreeObserver();
             observer.removeOnScrollChangedListener(mScrollChangedListener);
@@ -273,7 +279,7 @@
         mSession = null;
         mLayout.token = null;
 
-        super.onDetachedFromWindow();
+        super.onDetachedFromWindowInternal();
     }
 
     @Override
@@ -416,7 +422,8 @@
         mWindowType = type;
     }
 
-    private void updateWindow(boolean force, boolean redrawNeeded) {
+    /** @hide */
+    protected void updateWindow(boolean force, boolean redrawNeeded) {
         if (!mHaveFrame) {
             return;
         }
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index b78af2e..3cfe5e9 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -156,14 +156,32 @@
      * 
      * @param context The context to associate this view with.
      * @param attrs The attributes of the XML tag that is inflating the view.
-     * @param defStyle The default style to apply to this view. If 0, no style
-     *        will be applied (beyond what is included in the theme). This may
-     *        either be an attribute resource, whose value will be retrieved
-     *        from the current theme, or an explicit style resource.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
     @SuppressWarnings({"UnusedDeclaration"})
-    public TextureView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public TextureView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+        init();
+    }
+
+    /**
+     * Creates a new TextureView.
+     *
+     * @param context The context to associate this view with.
+     * @param attrs The attributes of the XML tag that is inflating the view.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     */
+    @SuppressWarnings({"UnusedDeclaration"})
+    public TextureView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         init();
     }
 
@@ -210,29 +228,16 @@
         }
     }
 
+    /** @hide */
     @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        if (mLayer != null) {
-            boolean success = executeHardwareAction(new Runnable() {
-                @Override
-                public void run() {
-                    destroySurface();
-                }
-            });
-
-            if (!success) {
-                Log.w(LOG_TAG, "TextureView was not able to destroy its surface: " + this);
-            }
-        }
+    protected void onDetachedFromWindowInternal() {
+        destroySurface();
+        super.onDetachedFromWindowInternal();
     }
 
     private void destroySurface() {
         if (mLayer != null) {
-            mSurface.detachFromGLContext();
-            // SurfaceTexture owns the texture name and detachFromGLContext
-            // should have deleted it
-            mLayer.clearStorage();
+            mLayer.detachSurfaceTexture(mSurface);
 
             boolean shouldRelease = true;
             if (mListener != null) {
@@ -357,7 +362,7 @@
                 return null;
             }
 
-            mLayer = mAttachInfo.mHardwareRenderer.createHardwareLayer(mOpaque);
+            mLayer = mAttachInfo.mHardwareRenderer.createTextureLayer();
             if (!mUpdateSurface) {
                 // Create a new SurfaceTexture for the layer.
                 mSurface = mAttachInfo.mHardwareRenderer.createSurfaceTexture(mLayer);
@@ -398,7 +403,7 @@
             updateLayer();
             mMatrixChanged = true;
 
-            mAttachInfo.mHardwareRenderer.setSurfaceTexture(mLayer, mSurface);
+            mLayer.setSurfaceTexture(mSurface);
             mSurface.setDefaultBufferSize(getWidth(), getHeight());
         }
 
@@ -451,7 +456,8 @@
             }
         }
         
-        mLayer.update(getWidth(), getHeight(), mOpaque);
+        mLayer.prepare(getWidth(), getHeight(), mOpaque);
+        mLayer.updateSurfaceTexture();
 
         if (mListener != null) {
             mListener.onSurfaceTextureUpdated(mSurface);
@@ -589,14 +595,6 @@
      */
     public Bitmap getBitmap(Bitmap bitmap) {
         if (bitmap != null && isAvailable()) {
-            AttachInfo info = mAttachInfo;
-            if (info != null && info.mHardwareRenderer != null &&
-                    info.mHardwareRenderer.isEnabled()) {
-                if (!info.mHardwareRenderer.validate()) {
-                    throw new IllegalStateException("Could not acquire hardware rendering context");
-                }
-            }
-
             applyUpdate();
             applyTransformMatrix();
 
diff --git a/core/java/android/view/ThreadedRenderer.java b/core/java/android/view/ThreadedRenderer.java
new file mode 100644
index 0000000..eaec8ab
--- /dev/null
+++ b/core/java/android/view/ThreadedRenderer.java
@@ -0,0 +1,319 @@
+/*
+ * Copyright (C) 2013 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 android.view;
+
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.graphics.SurfaceTexture;
+import android.os.SystemClock;
+import android.os.Trace;
+import android.view.Surface.OutOfResourcesException;
+import android.view.View.AttachInfo;
+
+import java.io.PrintWriter;
+
+/**
+ * Hardware renderer that proxies the rendering to a render thread. Most calls
+ * are currently synchronous.
+ * TODO: Make draw() async.
+ * TODO: Figure out how to share the DisplayList between two threads (global lock?)
+ *
+ * The UI thread can block on the RenderThread, but RenderThread must never
+ * block on the UI thread.
+ *
+ * ThreadedRenderer creates an instance of RenderProxy. RenderProxy in turn creates
+ * and manages a CanvasContext on the RenderThread. The CanvasContext is fully managed
+ * by the lifecycle of the RenderProxy.
+ *
+ * Note that although currently the EGL context & surfaces are created & managed
+ * by the render thread, the goal is to move that into a shared structure that can
+ * be managed by both threads. EGLSurface creation & deletion should ideally be
+ * done on the UI thread and not the RenderThread to avoid stalling the
+ * RenderThread with surface buffer allocation.
+ *
+ * @hide
+ */
+public class ThreadedRenderer extends HardwareRenderer {
+    private static final String LOGTAG = "ThreadedRenderer";
+
+    private static final Rect NULL_RECT = new Rect();
+
+    private int mWidth, mHeight;
+    private long mNativeProxy;
+    private boolean mInitialized = false;
+    private RenderNode mRootNode;
+
+    ThreadedRenderer(boolean translucent) {
+        long rootNodePtr = nCreateRootRenderNode();
+        mRootNode = RenderNode.adopt(rootNodePtr);
+        mRootNode.setClipToBounds(false);
+        mNativeProxy = nCreateProxy(translucent, rootNodePtr);
+    }
+
+    @Override
+    void destroy(boolean full) {
+        mInitialized = false;
+        updateEnabledState(null);
+        nDestroyCanvasAndSurface(mNativeProxy);
+    }
+
+    private void updateEnabledState(Surface surface) {
+        if (surface == null || !surface.isValid()) {
+            setEnabled(false);
+        } else {
+            setEnabled(mInitialized);
+        }
+    }
+
+    @Override
+    boolean initialize(Surface surface) throws OutOfResourcesException {
+        mInitialized = true;
+        updateEnabledState(surface);
+        return nInitialize(mNativeProxy, surface);
+    }
+
+    @Override
+    void updateSurface(Surface surface) throws OutOfResourcesException {
+        updateEnabledState(surface);
+        nUpdateSurface(mNativeProxy, surface);
+    }
+
+    @Override
+    void pauseSurface(Surface surface) {
+        nPauseSurface(mNativeProxy, surface);
+    }
+
+    @Override
+    void destroyHardwareResources(View view) {
+        destroyResources(view);
+        // TODO: GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS);
+    }
+
+    private static void destroyResources(View view) {
+        view.destroyHardwareResources();
+
+        if (view instanceof ViewGroup) {
+            ViewGroup group = (ViewGroup) view;
+
+            int count = group.getChildCount();
+            for (int i = 0; i < count; i++) {
+                destroyResources(group.getChildAt(i));
+            }
+        }
+    }
+
+    @Override
+    void invalidate(Surface surface) {
+        updateSurface(surface);
+    }
+
+    @Override
+    boolean safelyRun(Runnable action) {
+        nRunWithGlContext(mNativeProxy, action);
+        return true;
+    }
+
+    @Override
+    void setup(int width, int height) {
+        mWidth = width;
+        mHeight = height;
+        mRootNode.setLeftTopRightBottom(0, 0, mWidth, mHeight);
+        nSetup(mNativeProxy, width, height);
+    }
+
+    @Override
+    int getWidth() {
+        return mWidth;
+    }
+
+    @Override
+    int getHeight() {
+        return mHeight;
+    }
+
+    @Override
+    void dumpGfxInfo(PrintWriter pw) {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    long getFrameCount() {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+    boolean loadSystemProperties() {
+        return false;
+    }
+
+    /**
+     * TODO: Remove
+     * Temporary hack to allow RenderThreadTest prototype app to trigger
+     * replaying a DisplayList after modifying the displaylist properties
+     *
+     *  @hide */
+    public void repeatLastDraw() {
+    }
+
+    private void updateRootDisplayList(View view, HardwareDrawCallbacks callbacks) {
+        view.mPrivateFlags |= View.PFLAG_DRAWN;
+
+        view.mRecreateDisplayList = (view.mPrivateFlags & View.PFLAG_INVALIDATED)
+                == View.PFLAG_INVALIDATED;
+        view.mPrivateFlags &= ~View.PFLAG_INVALIDATED;
+
+        Trace.traceBegin(Trace.TRACE_TAG_VIEW, "getDisplayList");
+        HardwareCanvas canvas = mRootNode.start(mWidth, mHeight);
+        try {
+            callbacks.onHardwarePostDraw(canvas);
+            canvas.drawDisplayList(view.getDisplayList());
+            callbacks.onHardwarePostDraw(canvas);
+        } finally {
+            mRootNode.end(canvas);
+            Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+        }
+
+        view.mRecreateDisplayList = false;
+    }
+
+    @Override
+    void draw(View view, AttachInfo attachInfo, HardwareDrawCallbacks callbacks, Rect dirty) {
+        attachInfo.mIgnoreDirtyState = true;
+        attachInfo.mDrawingTime = SystemClock.uptimeMillis();
+
+        updateRootDisplayList(view, callbacks);
+
+        attachInfo.mIgnoreDirtyState = false;
+
+        if (dirty == null) {
+            dirty = NULL_RECT;
+        }
+        nSyncAndDrawFrame(mNativeProxy, dirty.left, dirty.top, dirty.right, dirty.bottom);
+    }
+
+    @Override
+    void detachFunctor(long functor) {
+        // no-op, we never attach functors to need to detach them
+    }
+
+    @Override
+    void attachFunctor(AttachInfo attachInfo, long functor) {
+        invokeFunctor(functor, true);
+    }
+
+    @Override
+    void invokeFunctor(long functor, boolean waitForCompletion) {
+        nInvokeFunctor(mNativeProxy, functor, waitForCompletion);
+    }
+
+    @Override
+    HardwareLayer createDisplayListLayer(int width, int height) {
+        long layer = nCreateDisplayListLayer(mNativeProxy, width, height);
+        return HardwareLayer.adoptDisplayListLayer(this, layer);
+    }
+
+    @Override
+    HardwareLayer createTextureLayer() {
+        long layer = nCreateTextureLayer(mNativeProxy);
+        return HardwareLayer.adoptTextureLayer(this, layer);
+    }
+
+    @Override
+    SurfaceTexture createSurfaceTexture(final HardwareLayer layer) {
+        final SurfaceTexture[] ret = new SurfaceTexture[1];
+        nRunWithGlContext(mNativeProxy, new Runnable() {
+            @Override
+            public void run() {
+                ret[0] = layer.createSurfaceTexture();
+            }
+        });
+        return ret[0];
+    }
+
+    @Override
+    boolean copyLayerInto(final HardwareLayer layer, final Bitmap bitmap) {
+        return nCopyLayerInto(mNativeProxy,
+                layer.getDeferredLayerUpdater(), bitmap.mNativeBitmap);
+    }
+
+    @Override
+    void pushLayerUpdate(HardwareLayer layer) {
+        // TODO: Remove this, it's not needed outside of GLRenderer
+    }
+
+    @Override
+    void onLayerCreated(HardwareLayer layer) {
+        // TODO: Is this actually useful?
+    }
+
+    @Override
+    void flushLayerUpdates() {
+        // TODO: Figure out what this should do or remove it
+    }
+
+    @Override
+    void onLayerDestroyed(HardwareLayer layer) {
+        nDestroyLayer(mNativeProxy, layer.getDeferredLayerUpdater());
+    }
+
+    @Override
+    void setName(String name) {
+    }
+
+    @Override
+    void fence() {
+        nFence(mNativeProxy);
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        try {
+            nDeleteProxy(mNativeProxy);
+            mNativeProxy = 0;
+        } finally {
+            super.finalize();
+        }
+    }
+
+    /** @hide */
+    public static native void postToRenderThread(Runnable runnable);
+
+    private static native long nCreateRootRenderNode();
+    private static native long nCreateProxy(boolean translucent, long rootRenderNode);
+    private static native void nDeleteProxy(long nativeProxy);
+
+    private static native boolean nInitialize(long nativeProxy, Surface window);
+    private static native void nUpdateSurface(long nativeProxy, Surface window);
+    private static native void nPauseSurface(long nativeProxy, Surface window);
+    private static native void nSetup(long nativeProxy, int width, int height);
+    private static native void nSetDisplayListData(long nativeProxy, long displayList,
+            long newData);
+    private static native void nSyncAndDrawFrame(long nativeProxy,
+            int dirtyLeft, int dirtyTop, int dirtyRight, int dirtyBottom);
+    private static native void nRunWithGlContext(long nativeProxy, Runnable runnable);
+    private static native void nDestroyCanvasAndSurface(long nativeProxy);
+
+    private static native void nInvokeFunctor(long nativeProxy, long functor, boolean waitForCompletion);
+
+    private static native long nCreateDisplayListLayer(long nativeProxy, int width, int height);
+    private static native long nCreateTextureLayer(long nativeProxy);
+    private static native boolean nCopyLayerInto(long nativeProxy, long layer, long bitmap);
+    private static native void nDestroyLayer(long nativeProxy, long layer);
+
+    private static native void nFence(long nativeProxy);
+}
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index eb7f45e46..6afff4d 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -16,18 +16,23 @@
 
 package android.view;
 
+import android.animation.RevealAnimator;
+import android.animation.ValueAnimator;
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.ClipData;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
-import android.graphics.Camera;
 import android.graphics.Canvas;
 import android.graphics.Insets;
 import android.graphics.Interpolator;
 import android.graphics.LinearGradient;
 import android.graphics.Matrix;
+import android.graphics.Outline;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
 import android.graphics.Point;
@@ -86,6 +91,8 @@
 import com.google.android.collect.Lists;
 import com.google.android.collect.Maps;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
@@ -95,7 +102,9 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -658,6 +667,7 @@
  * @attr ref android.R.styleable#View_scrollbarTrackVertical
  * @attr ref android.R.styleable#View_scrollbarAlwaysDrawHorizontalTrack
  * @attr ref android.R.styleable#View_scrollbarAlwaysDrawVerticalTrack
+ * @attr ref android.R.styleable#View_sharedElementName
  * @attr ref android.R.styleable#View_soundEffectsEnabled
  * @attr ref android.R.styleable#View_tag
  * @attr ref android.R.styleable#View_textAlignment
@@ -666,6 +676,7 @@
  * @attr ref android.R.styleable#View_transformPivotY
  * @attr ref android.R.styleable#View_translationX
  * @attr ref android.R.styleable#View_translationY
+ * @attr ref android.R.styleable#View_translationZ
  * @attr ref android.R.styleable#View_visibility
  *
  * @see android.view.ViewGroup
@@ -708,6 +719,11 @@
     private static boolean sIgnoreMeasureCache = false;
 
     /**
+     * Ignore the clipBounds of this view for the children.
+     */
+    static boolean sIgnoreClipBoundsForChildren = false;
+
+    /**
      * This view does not want keystrokes. Use with TAKES_FOCUS_MASK when
      * calling setFlags.
      */
@@ -729,6 +745,11 @@
      */
     private static final int FITS_SYSTEM_WINDOWS = 0x00000002;
 
+    /** @hide */
+    @IntDef({VISIBLE, INVISIBLE, GONE})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Visibility {}
+
     /**
      * This view is visible.
      * Use with {@link #setVisibility} and <a href="#attr_android:visibility">{@code
@@ -896,6 +917,11 @@
      */
     static final int FOCUSABLE_IN_TOUCH_MODE = 0x00040000;
 
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef({DRAWING_CACHE_QUALITY_LOW, DRAWING_CACHE_QUALITY_HIGH, DRAWING_CACHE_QUALITY_AUTO})
+    public @interface DrawingCacheQuality {}
+
     /**
      * <p>Enables low quality mode for the drawing cache.</p>
      */
@@ -940,6 +966,16 @@
      */
     static final int DUPLICATE_PARENT_STATE = 0x00400000;
 
+    /** @hide */
+    @IntDef({
+        SCROLLBARS_INSIDE_OVERLAY,
+        SCROLLBARS_INSIDE_INSET,
+        SCROLLBARS_OUTSIDE_OVERLAY,
+        SCROLLBARS_OUTSIDE_INSET
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ScrollBarStyle {}
+
     /**
      * The scrollbar style to display the scrollbars inside the content area,
      * without increasing the padding. The scrollbars will be overlaid with
@@ -1020,6 +1056,15 @@
      */
     static final int PARENT_SAVE_DISABLED_MASK = 0x20000000;
 
+    /** @hide */
+    @IntDef(flag = true,
+            value = {
+                FOCUSABLES_ALL,
+                FOCUSABLES_TOUCH_MODE
+            })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FocusableMode {}
+
     /**
      * View flag indicating whether {@link #addFocusables(ArrayList, int, int)}
      * should add all focusable Views regardless if they are focusable in touch mode.
@@ -1032,6 +1077,28 @@
      */
     public static final int FOCUSABLES_TOUCH_MODE = 0x00000001;
 
+    /** @hide */
+    @IntDef({
+            FOCUS_BACKWARD,
+            FOCUS_FORWARD,
+            FOCUS_LEFT,
+            FOCUS_UP,
+            FOCUS_RIGHT,
+            FOCUS_DOWN
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FocusDirection {}
+
+    /** @hide */
+    @IntDef({
+            FOCUS_LEFT,
+            FOCUS_UP,
+            FOCUS_RIGHT,
+            FOCUS_DOWN
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FocusRealDirection {} // Like @FocusDirection, but without forward/backward
+
     /**
      * Use with {@link #focusSearch(int)}. Move focus to the previous selectable
      * item.
@@ -1587,7 +1654,7 @@
      * @see #setTag(Object)
      * @see #getTag()
      */
-    protected Object mTag;
+    protected Object mTag = null;
 
     // for mPrivateFlags:
     /** {@hide} */
@@ -1729,12 +1796,9 @@
     private static final int PFLAG_HOVERED             = 0x10000000;
 
     /**
-     * Indicates that pivotX or pivotY were explicitly set and we should not assume the center
-     * for transform operations
-     *
-     * @hide
+     * no longer needed, should be reused
      */
-    private static final int PFLAG_PIVOT_EXPLICITLY_SET = 0x20000000;
+    private static final int PFLAG_DOES_NOTHING_REUSE_PLEASE = 0x20000000;
 
     /** {@hide} */
     static final int PFLAG_ACTIVATED                   = 0x40000000;
@@ -1804,6 +1868,25 @@
      */
     static final int PFLAG2_DRAG_HOVERED               = 0x00000002;
 
+    /** @hide */
+    @IntDef({
+        LAYOUT_DIRECTION_LTR,
+        LAYOUT_DIRECTION_RTL,
+        LAYOUT_DIRECTION_INHERIT,
+        LAYOUT_DIRECTION_LOCALE
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    // Not called LayoutDirection to avoid conflict with android.util.LayoutDirection
+    public @interface LayoutDir {}
+
+    /** @hide */
+    @IntDef({
+        LAYOUT_DIRECTION_LTR,
+        LAYOUT_DIRECTION_RTL
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface ResolvedLayoutDir {}
+
     /**
      * Horizontal layout direction of this view is from Left to Right.
      * Use with {@link #setLayoutDirection}.
@@ -1982,7 +2065,20 @@
     static final int PFLAG2_TEXT_DIRECTION_RESOLVED_DEFAULT =
             TEXT_DIRECTION_RESOLVED_DEFAULT << PFLAG2_TEXT_DIRECTION_RESOLVED_MASK_SHIFT;
 
-    /*
+    /** @hide */
+    @IntDef({
+        TEXT_ALIGNMENT_INHERIT,
+        TEXT_ALIGNMENT_GRAVITY,
+        TEXT_ALIGNMENT_CENTER,
+        TEXT_ALIGNMENT_TEXT_START,
+        TEXT_ALIGNMENT_TEXT_END,
+        TEXT_ALIGNMENT_VIEW_START,
+        TEXT_ALIGNMENT_VIEW_END
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface TextAlignment {}
+
+    /**
      * Default text alignment. The text alignment of this View is inherited from its parent.
      * Use with {@link #setTextAlignment(int)}
      */
@@ -2234,7 +2330,17 @@
 
     /* End of masks for mPrivateFlags2 */
 
-    /* Masks for mPrivateFlags3 */
+    /**
+     * Masks for mPrivateFlags3, as generated by dumpFlags():
+     *
+     * |-------|-------|-------|-------|
+     *                                 1 PFLAG3_VIEW_IS_ANIMATING_TRANSFORM
+     *                                1  PFLAG3_VIEW_IS_ANIMATING_ALPHA
+     *                               1   PFLAG3_IS_LAID_OUT
+     *                              1    PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT
+     *                             1     PFLAG3_CALLED_SUPER
+     * |-------|-------|-------|-------|
+     */
 
     /**
      * Flag indicating that view has a transform animation set on it. This is used to track whether
@@ -2268,6 +2374,10 @@
      */
     static final int PFLAG3_CALLED_SUPER = 0x10;
 
+    /**
+     * Flag indicating that a view's outline has been specifically defined.
+     */
+    static final int PFLAG3_OUTLINE_DEFINED = 0x20;
 
     /**
      * Flag indicating that we're in the process of applying window insets.
@@ -2279,6 +2389,13 @@
      */
     static final int PFLAG3_FITTING_SYSTEM_WINDOWS = 0x80;
 
+    /**
+     * Flag indicating that nested scrolling is enabled for this view.
+     * The view will optionally cooperate with views up its parent chain to allow for
+     * integrated nested scrolling along the same axis.
+     */
+    static final int PFLAG3_NESTED_SCROLLING_ENABLED = 0x200;
+
     /* End of masks for mPrivateFlags3 */
 
     static final int DRAG_MASK = PFLAG2_DRAG_CAN_ACCEPT | PFLAG2_DRAG_HOVERED;
@@ -2674,6 +2791,12 @@
             SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
             | SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
 
+    /** @hide */
+    @IntDef(flag = true,
+            value = { FIND_VIEWS_WITH_TEXT, FIND_VIEWS_WITH_CONTENT_DESCRIPTION })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface FindViewFlags {}
+
     /**
      * Find views that render the specified text.
      *
@@ -2695,7 +2818,7 @@
      * added and it is a responsibility of the client to call the APIs of
      * the provider to determine whether the virtual tree rooted at this View
      * contains the text, i.e. getting the list of {@link AccessibilityNodeInfo}s
-     * represeting the virtual views with this text.
+     * representing the virtual views with this text.
      *
      * @see #findViewsWithText(ArrayList, CharSequence, int)
      *
@@ -2725,6 +2848,21 @@
     public static final int SCREEN_STATE_ON = 0x1;
 
     /**
+     * Indicates no axis of view scrolling.
+     */
+    public static final int SCROLL_AXIS_NONE = 0;
+
+    /**
+     * Indicates scrolling along the horizontal axis.
+     */
+    public static final int SCROLL_AXIS_HORIZONTAL = 1 << 0;
+
+    /**
+     * Indicates scrolling along the vertical axis.
+     */
+    public static final int SCROLL_AXIS_VERTICAL = 1 << 1;
+
+    /**
      * Controls the over-scroll mode for this view.
      * See {@link #overScrollBy(int, int, int, int, int, int, int, int, boolean)},
      * {@link #OVER_SCROLL_ALWAYS}, {@link #OVER_SCROLL_IF_CONTENT_SCROLLS},
@@ -2810,120 +2948,23 @@
     static class TransformationInfo {
         /**
          * The transform matrix for the View. This transform is calculated internally
-         * based on the rotation, scaleX, and scaleY properties. The identity matrix
-         * is used by default. Do *not* use this variable directly; instead call
-         * getMatrix(), which will automatically recalculate the matrix if necessary
-         * to get the correct matrix based on the latest rotation and scale properties.
+         * based on the translation, rotation, and scale properties.
+         *
+         * Do *not* use this variable directly; instead call getMatrix(), which will
+         * load the value from the View's RenderNode.
          */
         private final Matrix mMatrix = new Matrix();
 
         /**
-         * The transform matrix for the View. This transform is calculated internally
-         * based on the rotation, scaleX, and scaleY properties. The identity matrix
-         * is used by default. Do *not* use this variable directly; instead call
-         * getInverseMatrix(), which will automatically recalculate the matrix if necessary
-         * to get the correct matrix based on the latest rotation and scale properties.
+         * The inverse transform matrix for the View. This transform is calculated
+         * internally based on the translation, rotation, and scale properties.
+         *
+         * Do *not* use this variable directly; instead call getInverseMatrix(),
+         * which will load the value from the View's RenderNode.
          */
         private Matrix mInverseMatrix;
 
         /**
-         * An internal variable that tracks whether we need to recalculate the
-         * transform matrix, based on whether the rotation or scaleX/Y properties
-         * have changed since the matrix was last calculated.
-         */
-        boolean mMatrixDirty = false;
-
-        /**
-         * An internal variable that tracks whether we need to recalculate the
-         * transform matrix, based on whether the rotation or scaleX/Y properties
-         * have changed since the matrix was last calculated.
-         */
-        private boolean mInverseMatrixDirty = true;
-
-        /**
-         * A variable that tracks whether we need to recalculate the
-         * transform matrix, based on whether the rotation or scaleX/Y properties
-         * have changed since the matrix was last calculated. This variable
-         * is only valid after a call to updateMatrix() or to a function that
-         * calls it such as getMatrix(), hasIdentityMatrix() and getInverseMatrix().
-         */
-        private boolean mMatrixIsIdentity = true;
-
-        /**
-         * The Camera object is used to compute a 3D matrix when rotationX or rotationY are set.
-         */
-        private Camera mCamera = null;
-
-        /**
-         * This matrix is used when computing the matrix for 3D rotations.
-         */
-        private Matrix matrix3D = null;
-
-        /**
-         * These prev values are used to recalculate a centered pivot point when necessary. The
-         * pivot point is only used in matrix operations (when rotation, scale, or translation are
-         * set), so thes values are only used then as well.
-         */
-        private int mPrevWidth = -1;
-        private int mPrevHeight = -1;
-
-        /**
-         * The degrees rotation around the vertical axis through the pivot point.
-         */
-        @ViewDebug.ExportedProperty
-        float mRotationY = 0f;
-
-        /**
-         * The degrees rotation around the horizontal axis through the pivot point.
-         */
-        @ViewDebug.ExportedProperty
-        float mRotationX = 0f;
-
-        /**
-         * The degrees rotation around the pivot point.
-         */
-        @ViewDebug.ExportedProperty
-        float mRotation = 0f;
-
-        /**
-         * The amount of translation of the object away from its left property (post-layout).
-         */
-        @ViewDebug.ExportedProperty
-        float mTranslationX = 0f;
-
-        /**
-         * The amount of translation of the object away from its top property (post-layout).
-         */
-        @ViewDebug.ExportedProperty
-        float mTranslationY = 0f;
-
-        /**
-         * The amount of scale in the x direction around the pivot point. A
-         * value of 1 means no scaling is applied.
-         */
-        @ViewDebug.ExportedProperty
-        float mScaleX = 1f;
-
-        /**
-         * The amount of scale in the y direction around the pivot point. A
-         * value of 1 means no scaling is applied.
-         */
-        @ViewDebug.ExportedProperty
-        float mScaleY = 1f;
-
-        /**
-         * The x location of the point around which the view is rotated and scaled.
-         */
-        @ViewDebug.ExportedProperty
-        float mPivotX = 0f;
-
-        /**
-         * The y location of the point around which the view is rotated and scaled.
-         */
-        @ViewDebug.ExportedProperty
-        float mPivotY = 0f;
-
-        /**
          * The opacity of the View. This is a value from 0 to 1, where 0 means
          * completely transparent and 1 means completely opaque.
          */
@@ -2943,17 +2984,11 @@
     /**
      * Current clip bounds. to which all drawing of this view are constrained.
      */
-    private Rect mClipBounds = null;
+    Rect mClipBounds = null;
 
     private boolean mLastIsOpaque;
 
     /**
-     * Convenience value to check for float values that are close enough to zero to be considered
-     * zero.
-     */
-    private static final float NONZERO_EPSILON = .001f;
-
-    /**
      * The distance in pixels from the left edge of this view's parent
      * to the left edge of this view.
      * {@hide}
@@ -3135,6 +3170,15 @@
     @ViewDebug.ExportedProperty(deepExport = true, prefix = "bg_")
     private Drawable mBackground;
 
+    /**
+     * Display list used for backgrounds.
+     * <p>
+     * When non-null and valid, this is expected to contain an up-to-date copy
+     * of the background drawable. It is cleared on temporary detach and reset
+     * on cleanup.
+     */
+    private RenderNode mBackgroundDisplayList;
+
     private int mBackgroundResource;
     private boolean mBackgroundSizeChanged;
 
@@ -3208,6 +3252,12 @@
     private int[] mDrawableState = null;
 
     /**
+     * Stores the outline of the view, passed down to the DisplayList level for
+     * defining shadow shape.
+     */
+    private Outline mOutline;
+
+    /**
      * When this view has focus and the next focus is {@link #FOCUS_LEFT},
      * the user may specify which view to go to next.
      */
@@ -3410,7 +3460,14 @@
     private Bitmap mDrawingCache;
     private Bitmap mUnscaledDrawingCache;
 
-    DisplayList mDisplayList;
+    /**
+     * RenderNode holding View properties, potentially holding a DisplayList of View content.
+     * <p>
+     * When non-null and valid, this is expected to contain an up-to-date copy
+     * of the View content. Its DisplayList content is cleared on temporary detach and reset on
+     * cleanup.
+     */
+    final RenderNode mRenderNode;
 
     /**
      * Set to true when the view is sending hover accessibility events because it
@@ -3430,6 +3487,14 @@
     ViewOverlay mOverlay;
 
     /**
+     * The currently active parent view for receiving delegated nested scrolling events.
+     * This is set by {@link #startNestedScroll(int)} during a touch interaction and cleared
+     * by {@link #stopNestedScroll()} at the same point where we clear
+     * requestDisallowInterceptTouchEvent.
+     */
+    private ViewParent mNestedScrollingParent;
+
+    /**
      * Consistency verifier for debugging purposes.
      * @hide
      */
@@ -3439,6 +3504,8 @@
 
     private static final AtomicInteger sNextGeneratedId = new AtomicInteger(1);
 
+    private int[] mTempNestedScrollConsumed;
+
     /**
      * Simple constructor to use when creating a view from code.
      *
@@ -3461,6 +3528,7 @@
         setOverScrollMode(OVER_SCROLL_IF_CONTENT_SCROLLS);
         mUserPaddingStart = UNDEFINED_PADDING;
         mUserPaddingEnd = UNDEFINED_PADDING;
+        mRenderNode = RenderNode.create(getClass().getName());
 
         if (!sCompatibilityDone && context != null) {
             final int targetSdkVersion = context.getApplicationInfo().targetSdkVersion;
@@ -3472,6 +3540,9 @@
             // of whether a layout was requested on that View.
             sIgnoreMeasureCache = targetSdkVersion < KITKAT;
 
+            // Older apps may need this to ignore the clip bounds
+            sIgnoreClipBoundsForChildren = targetSdkVersion < L;
+
             sCompatibilityDone = true;
         }
     }
@@ -3497,27 +3568,64 @@
     }
 
     /**
-     * Perform inflation from XML and apply a class-specific base style. This
-     * constructor of View allows subclasses to use their own base style when
-     * they are inflating. For example, a Button class's constructor would call
-     * this version of the super class constructor and supply
-     * <code>R.attr.buttonStyle</code> for <var>defStyle</var>; this allows
-     * the theme's button style to modify all of the base view attributes (in
-     * particular its background) as well as the Button class's attributes.
+     * Perform inflation from XML and apply a class-specific base style from a
+     * theme attribute. This constructor of View allows subclasses to use their
+     * own base style when they are inflating. For example, a Button class's
+     * constructor would call this version of the super class constructor and
+     * supply <code>R.attr.buttonStyle</code> for <var>defStyleAttr</var>; this
+     * allows the theme's button style to modify all of the base view attributes
+     * (in particular its background) as well as the Button class's attributes.
      *
      * @param context The Context the view is running in, through which it can
      *        access the current theme, resources, etc.
      * @param attrs The attributes of the XML tag that is inflating the view.
      * @param defStyleAttr An attribute in the current theme that contains a
-     *        reference to a style resource to apply to this view. If 0, no
-     *        default style will be applied.
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      * @see #View(Context, AttributeSet)
      */
     public View(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    /**
+     * Perform inflation from XML and apply a class-specific base style from a
+     * theme attribute or style resource. This constructor of View allows
+     * subclasses to use their own base style when they are inflating.
+     * <p>
+     * When determining the final value of a particular attribute, there are
+     * four inputs that come into play:
+     * <ol>
+     * <li>Any attribute values in the given AttributeSet.
+     * <li>The style resource specified in the AttributeSet (named "style").
+     * <li>The default style specified by <var>defStyleAttr</var>.
+     * <li>The default style specified by <var>defStyleRes</var>.
+     * <li>The base values in this theme.
+     * </ol>
+     * <p>
+     * Each of these inputs is considered in-order, with the first listed taking
+     * precedence over the following ones. In other words, if in the
+     * AttributeSet you have supplied <code>&lt;Button * textColor="#ff000000"&gt;</code>
+     * , then the button's text will <em>always</em> be black, regardless of
+     * what is specified in any of the styles.
+     *
+     * @param context The Context the view is running in, through which it can
+     *        access the current theme, resources, etc.
+     * @param attrs The attributes of the XML tag that is inflating the view.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     * @see #View(Context, AttributeSet, int)
+     */
+    public View(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         this(context);
 
-        TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.View,
-                defStyleAttr, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.View, defStyleAttr, defStyleRes);
 
         Drawable background = null;
 
@@ -3540,6 +3648,8 @@
 
         float tx = 0;
         float ty = 0;
+        float tz = 0;
+        float elevation = 0;
         float rotation = 0;
         float rotationX = 0;
         float rotationY = 0;
@@ -3619,6 +3729,14 @@
                     ty = a.getDimensionPixelOffset(attr, 0);
                     transformSet = true;
                     break;
+                case com.android.internal.R.styleable.View_translationZ:
+                    tz = a.getDimensionPixelOffset(attr, 0);
+                    transformSet = true;
+                    break;
+                case com.android.internal.R.styleable.View_elevation:
+                    elevation = a.getDimensionPixelOffset(attr, 0);
+                    transformSet = true;
+                    break;
                 case com.android.internal.R.styleable.View_rotation:
                     rotation = a.getFloat(attr, 0);
                     transformSet = true;
@@ -3871,6 +3989,12 @@
                 case R.styleable.View_accessibilityLiveRegion:
                     setAccessibilityLiveRegion(a.getInt(attr, ACCESSIBILITY_LIVE_REGION_DEFAULT));
                     break;
+                case R.styleable.View_sharedElementName:
+                    setSharedElementName(a.getString(attr));
+                    break;
+                case R.styleable.View_nestedScrollingEnabled:
+                    setNestedScrollingEnabled(a.getBoolean(attr, false));
+                    break;
             }
         }
 
@@ -3960,6 +4084,8 @@
         if (transformSet) {
             setTranslationX(tx);
             setTranslationY(ty);
+            setTranslationZ(tz);
+            setElevation(elevation);
             setRotation(rotation);
             setRotationX(rotationX);
             setRotationY(rotationY);
@@ -3979,6 +4105,7 @@
      */
     View() {
         mResources = null;
+        mRenderNode = RenderNode.create(getClass().getName());
     }
 
     public String toString() {
@@ -4026,7 +4153,7 @@
             out.append(" #");
             out.append(Integer.toHexString(id));
             final Resources r = mResources;
-            if (id != 0 && r != null) {
+            if (Resources.resourceHasPackage(id) && r != null) {
                 try {
                     String pkgname;
                     switch (id&0xff000000) {
@@ -4608,7 +4735,7 @@
      * @param previouslyFocusedRect The rectangle of the view that had focus
      *        prior in this View's coordinate system.
      */
-    void handleFocusGainInternal(int direction, Rect previouslyFocusedRect) {
+    void handleFocusGainInternal(@FocusRealDirection int direction, Rect previouslyFocusedRect) {
         if (DBG) {
             System.out.println(this + " requestFocus()");
         }
@@ -4626,12 +4753,43 @@
                 mAttachInfo.mTreeObserver.dispatchOnGlobalFocusChange(oldFocus, this);
             }
 
+            manageFocusHotspot(true, oldFocus);
             onFocusChanged(true, direction, previouslyFocusedRect);
             refreshDrawableState();
         }
     }
 
     /**
+     * Forwards focus information to the background drawable, if necessary. When
+     * the view is gaining focus, <code>v</code> is the previous focus holder.
+     * When the view is losing focus, <code>v</code> is the next focus holder.
+     *
+     * @param focused whether this view is focused
+     * @param v previous or the next focus holder, or null if none
+     */
+    private void manageFocusHotspot(boolean focused, View v) {
+        if (mBackground != null && mBackground.supportsHotspots()) {
+            final Rect r = new Rect();
+            if (!focused && v != null) {
+                v.getBoundsOnScreen(r);
+                final int[] location = new int[2];
+                getLocationOnScreen(location);
+                r.offset(-location[0], -location[1]);
+            } else {
+                r.set(0, 0, mRight - mLeft, mBottom - mTop);
+            }
+
+            final float x = r.exactCenterX();
+            final float y = r.exactCenterY();
+            mBackground.setHotspot(R.attr.state_focused, x, y);
+
+            if (!focused) {
+                mBackground.removeHotspot(R.attr.state_focused);
+            }
+        }
+    }
+
+    /**
      * Request that a rectangle of this view be visible on the screen,
      * scrolling if necessary just enough.
      *
@@ -4717,7 +4875,7 @@
             System.out.println(this + " clearFocus()");
         }
 
-        clearFocusInternal(true, true);
+        clearFocusInternal(null, true, true);
     }
 
     /**
@@ -4729,7 +4887,7 @@
      * @param refocus when propagate is true, specifies whether to request the
      *            root view place new focus
      */
-    void clearFocusInternal(boolean propagate, boolean refocus) {
+    void clearFocusInternal(View focused, boolean propagate, boolean refocus) {
         if ((mPrivateFlags & PFLAG_FOCUSED) != 0) {
             mPrivateFlags &= ~PFLAG_FOCUSED;
 
@@ -4739,6 +4897,7 @@
 
             onFocusChanged(false, 0, null);
 
+            manageFocusHotspot(false, focused);
             refreshDrawableState();
 
             if (propagate && (!refocus || !rootViewRequestFocus())) {
@@ -4766,12 +4925,12 @@
      * after calling this method. Otherwise, the view hierarchy may be left in
      * an inconstent state.
      */
-    void unFocus() {
+    void unFocus(View focused) {
         if (DBG) {
             System.out.println(this + " unFocus()");
         }
 
-        clearFocusInternal(false, false);
+        clearFocusInternal(focused, false, false);
     }
 
     /**
@@ -4819,7 +4978,8 @@
      *        passed in as finer grained information about where the focus is coming
      *        from (in addition to direction).  Will be <code>null</code> otherwise.
      */
-    protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
+    protected void onFocusChanged(boolean gainFocus, @FocusDirection int direction,
+            @Nullable Rect previouslyFocusedRect) {
         if (gainFocus) {
             sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
         } else {
@@ -4881,10 +5041,6 @@
      * @see AccessibilityDelegate
      */
     public void sendAccessibilityEvent(int eventType) {
-        // Excluded views do not send accessibility events.
-        if (!includeForAccessibility()) {
-            return;
-        }
         if (mAccessibilityDelegate != null) {
             mAccessibilityDelegate.sendAccessibilityEvent(this, eventType);
         } else {
@@ -5502,7 +5658,8 @@
      * @hide
      */
     public int getAccessibilityWindowId() {
-        return mAttachInfo != null ? mAttachInfo.mAccessibilityWindowId : NO_ID;
+        return mAttachInfo != null ? mAttachInfo.mAccessibilityWindowId
+                : AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
     }
 
     /**
@@ -5679,6 +5836,7 @@
      *
      * @attr ref android.R.styleable#View_drawingCacheQuality
      */
+    @DrawingCacheQuality
     public int getDrawingCacheQuality() {
         return mViewFlags & DRAWING_CACHE_QUALITY_MASK;
     }
@@ -5696,7 +5854,7 @@
      *
      * @attr ref android.R.styleable#View_drawingCacheQuality
      */
-    public void setDrawingCacheQuality(int quality) {
+    public void setDrawingCacheQuality(@DrawingCacheQuality int quality) {
         setFlags(quality, DRAWING_CACHE_QUALITY_MASK);
     }
 
@@ -5913,7 +6071,7 @@
      * @return {@code true} if this view applied the insets and it should not
      * continue propagating further down the hierarchy, {@code false} otherwise.
      * @see #getFitsSystemWindows()
-     * @see #setFitsSystemWindows(boolean) 
+     * @see #setFitsSystemWindows(boolean)
      * @see #setSystemUiVisibility(int)
      *
      * @deprecated As of API XX use {@link #dispatchApplyWindowInsets(WindowInsets)} to apply
@@ -5930,7 +6088,7 @@
                 mPrivateFlags3 |= PFLAG3_FITTING_SYSTEM_WINDOWS;
                 return !dispatchApplyWindowInsets(new WindowInsets(insets)).hasInsets();
             } finally {
-                mPrivateFlags3 &= PFLAG3_FITTING_SYSTEM_WINDOWS;
+                mPrivateFlags3 &= ~PFLAG3_FITTING_SYSTEM_WINDOWS;
             }
         } else {
             // We're being called from the newer apply insets path.
@@ -6155,6 +6313,7 @@
         @ViewDebug.IntToString(from = INVISIBLE, to = "INVISIBLE"),
         @ViewDebug.IntToString(from = GONE,      to = "GONE")
     })
+    @Visibility
     public int getVisibility() {
         return mViewFlags & VISIBILITY_MASK;
     }
@@ -6166,7 +6325,7 @@
      * @attr ref android.R.styleable#View_visibility
      */
     @RemotableViewMethod
-    public void setVisibility(int visibility) {
+    public void setVisibility(@Visibility int visibility) {
         setFlags(visibility, VISIBILITY_MASK);
         if (mBackground != null) mBackground.setVisible(visibility == VISIBLE, false);
     }
@@ -6325,6 +6484,7 @@
         @ViewDebug.IntToString(from = LAYOUT_DIRECTION_INHERIT, to = "INHERIT"),
         @ViewDebug.IntToString(from = LAYOUT_DIRECTION_LOCALE,  to = "LOCALE")
     })
+    @LayoutDir
     public int getRawLayoutDirection() {
         return (mPrivateFlags2 & PFLAG2_LAYOUT_DIRECTION_MASK) >> PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT;
     }
@@ -6347,7 +6507,7 @@
      * @attr ref android.R.styleable#View_layoutDirection
      */
     @RemotableViewMethod
-    public void setLayoutDirection(int layoutDirection) {
+    public void setLayoutDirection(@LayoutDir int layoutDirection) {
         if (getRawLayoutDirection() != layoutDirection) {
             // Reset the current layout direction and the resolved one
             mPrivateFlags2 &= ~PFLAG2_LAYOUT_DIRECTION_MASK;
@@ -6377,6 +6537,7 @@
         @ViewDebug.IntToString(from = LAYOUT_DIRECTION_LTR, to = "RESOLVED_DIRECTION_LTR"),
         @ViewDebug.IntToString(from = LAYOUT_DIRECTION_RTL, to = "RESOLVED_DIRECTION_RTL")
     })
+    @ResolvedLayoutDir
     public int getLayoutDirection() {
         final int targetSdkVersion = getContext().getApplicationInfo().targetSdkVersion;
         if (targetSdkVersion < JELLY_BEAN_MR1) {
@@ -6746,7 +6907,7 @@
      * @return The nearest focusable in the specified direction, or null if none
      *         can be found.
      */
-    public View focusSearch(int direction) {
+    public View focusSearch(@FocusRealDirection int direction) {
         if (mParent != null) {
             return mParent.focusSearch(this, direction);
         } else {
@@ -6765,7 +6926,7 @@
      *        FOCUS_DOWN, FOCUS_LEFT, and FOCUS_RIGHT.
      * @return True if the this view consumed this unhandled move.
      */
-    public boolean dispatchUnhandledMove(View focused, int direction) {
+    public boolean dispatchUnhandledMove(View focused, @FocusRealDirection int direction) {
         return false;
     }
 
@@ -6777,7 +6938,7 @@
      * or FOCUS_BACKWARD.
      * @return The user specified next view, or null if there is none.
      */
-    View findUserSetNextFocus(View root, int direction) {
+    View findUserSetNextFocus(View root, @FocusDirection int direction) {
         switch (direction) {
             case FOCUS_LEFT:
                 if (mNextFocusLeftId == View.NO_ID) return null;
@@ -6827,7 +6988,7 @@
      * @param direction The direction of the focus
      * @return A list of focusable views
      */
-    public ArrayList<View> getFocusables(int direction) {
+    public ArrayList<View> getFocusables(@FocusDirection int direction) {
         ArrayList<View> result = new ArrayList<View>(24);
         addFocusables(result, direction);
         return result;
@@ -6841,7 +7002,7 @@
      * @param views Focusable views found so far
      * @param direction The direction of the focus
      */
-    public void addFocusables(ArrayList<View> views, int direction) {
+    public void addFocusables(ArrayList<View> views, @FocusDirection int direction) {
         addFocusables(views, direction, FOCUSABLES_TOUCH_MODE);
     }
 
@@ -6861,7 +7022,8 @@
      * @see #FOCUSABLES_ALL
      * @see #FOCUSABLES_TOUCH_MODE
      */
-    public void addFocusables(ArrayList<View> views, int direction, int focusableMode) {
+    public void addFocusables(ArrayList<View> views, @FocusDirection int direction,
+            @FocusableMode int focusableMode) {
         if (views == null) {
             return;
         }
@@ -6890,7 +7052,8 @@
      * @see #FIND_VIEWS_WITH_CONTENT_DESCRIPTION
      * @see #setContentDescription(CharSequence)
      */
-    public void findViewsWithText(ArrayList<View> outViews, CharSequence searched, int flags) {
+    public void findViewsWithText(ArrayList<View> outViews, CharSequence searched,
+            @FindViewFlags int flags) {
         if (getAccessibilityNodeProvider() != null) {
             if ((flags & FIND_VIEWS_WITH_ACCESSIBILITY_NODE_PROVIDERS) != 0) {
                 outViews.add(this);
@@ -6937,7 +7100,6 @@
      * Returns whether this View is accessibility focused.
      *
      * @return True if this View is accessibility focused.
-     * @hide
      */
     public boolean isAccessibilityFocused() {
         return (mPrivateFlags2 & PFLAG2_ACCESSIBILITY_FOCUSED) != 0;
@@ -7285,11 +7447,38 @@
     }
 
     /**
-     * Gets whether this view should be exposed for accessibility.
+     * Computes whether this view should be exposed for accessibility. In
+     * general, views that are interactive or provide information are exposed
+     * while views that serve only as containers are hidden.
+     * <p>
+     * If an ancestor of this view has importance
+     * {@link #IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS}, this method
+     * returns <code>false</code>.
+     * <p>
+     * Otherwise, the value is computed according to the view's
+     * {@link #getImportantForAccessibility()} value:
+     * <ol>
+     * <li>{@link #IMPORTANT_FOR_ACCESSIBILITY_NO} or
+     * {@link #IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS}, return <code>false
+     * </code>
+     * <li>{@link #IMPORTANT_FOR_ACCESSIBILITY_YES}, return <code>true</code>
+     * <li>{@link #IMPORTANT_FOR_ACCESSIBILITY_AUTO}, return <code>true</code> if
+     * view satisfies any of the following:
+     * <ul>
+     * <li>Is actionable, e.g. {@link #isClickable()},
+     * {@link #isLongClickable()}, or {@link #isFocusable()}
+     * <li>Has an {@link AccessibilityDelegate}
+     * <li>Has an interaction listener, e.g. {@link OnTouchListener},
+     * {@link OnKeyListener}, etc.
+     * <li>Is an accessibility live region, e.g.
+     * {@link #getAccessibilityLiveRegion()} is not
+     * {@link #ACCESSIBILITY_LIVE_REGION_NONE}.
+     * </ul>
+     * </ol>
      *
      * @return Whether the view is exposed for accessibility.
-     *
-     * @hide
+     * @see #setImportantForAccessibility(int)
+     * @see #getImportantForAccessibility()
      */
     public boolean isImportantForAccessibility() {
         final int mode = (mPrivateFlags2 & PFLAG2_IMPORTANT_FOR_ACCESSIBILITY_MASK)
@@ -7342,9 +7531,7 @@
      * @param children The list of children for accessibility.
      */
     public void addChildrenForAccessibility(ArrayList<View> children) {
-        if (includeForAccessibility()) {
-            children.add(this);
-        }
+
     }
 
     /**
@@ -7358,7 +7545,6 @@
      * @hide
      */
     public boolean includeForAccessibility() {
-        //noinspection SimplifiableIfStatement
         if (mAttachInfo != null) {
             return (mAttachInfo.mAccessibilityFetchFlags
                     & AccessibilityNodeInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS) != 0
@@ -7381,7 +7567,7 @@
     }
 
     /**
-     * Returns whether the View has registered callbacks wich makes it
+     * Returns whether the View has registered callbacks which makes it
      * important for accessibility.
      *
      * @return True if the view is actionable for accessibility.
@@ -7400,7 +7586,7 @@
      * notification is at at most once every
      * {@link ViewConfiguration#getSendRecurringAccessibilityEventsInterval()}
      * to avoid unnecessary load to the system. Also once a view has a pending
-     * notifucation this method is a NOP until the notification has been sent.
+     * notification this method is a NOP until the notification has been sent.
      *
      * @hide
      */
@@ -7718,8 +7904,6 @@
      * @hide
      */
     public void dispatchStartTemporaryDetach() {
-        clearDisplayList();
-
         onStartTemporaryDetach();
     }
 
@@ -7825,27 +8009,46 @@
      * @return True if the event was handled by the view, false otherwise.
      */
     public boolean dispatchTouchEvent(MotionEvent event) {
+        boolean result = false;
+
         if (mInputEventConsistencyVerifier != null) {
             mInputEventConsistencyVerifier.onTouchEvent(event, 0);
         }
 
+        final int actionMasked = event.getActionMasked();
+        if (actionMasked == MotionEvent.ACTION_DOWN) {
+            // Defensive cleanup for new gesture
+            stopNestedScroll();
+        }
+
         if (onFilterTouchEventForSecurity(event)) {
             //noinspection SimplifiableIfStatement
             ListenerInfo li = mListenerInfo;
-            if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED
+            if (li != null && li.mOnTouchListener != null
+                    && (mViewFlags & ENABLED_MASK) == ENABLED
                     && li.mOnTouchListener.onTouch(this, event)) {
-                return true;
+                result = true;
             }
 
-            if (onTouchEvent(event)) {
-                return true;
+            if (!result && onTouchEvent(event)) {
+                result = true;
             }
         }
 
-        if (mInputEventConsistencyVerifier != null) {
+        if (!result && mInputEventConsistencyVerifier != null) {
             mInputEventConsistencyVerifier.onUnhandledEvent(event, 0);
         }
-        return false;
+
+        // Clean up after nested scrolls if this is the end of a gesture;
+        // also cancel it if we tried an ACTION_DOWN but we didn't want the rest
+        // of the gesture.
+        if (actionMasked == MotionEvent.ACTION_UP ||
+                actionMasked == MotionEvent.ACTION_CANCEL ||
+                (actionMasked == MotionEvent.ACTION_DOWN && !result)) {
+            stopNestedScroll();
+        }
+
+        return result;
     }
 
     /**
@@ -8080,7 +8283,8 @@
      * @param visibility The new visibility of changedView: {@link #VISIBLE},
      * {@link #INVISIBLE} or {@link #GONE}.
      */
-    protected void dispatchVisibilityChanged(View changedView, int visibility) {
+    protected void dispatchVisibilityChanged(@NonNull View changedView,
+            @Visibility int visibility) {
         onVisibilityChanged(changedView, visibility);
     }
 
@@ -8091,7 +8295,7 @@
      * @param visibility The new visibility of changedView: {@link #VISIBLE},
      * {@link #INVISIBLE} or {@link #GONE}.
      */
-    protected void onVisibilityChanged(View changedView, int visibility) {
+    protected void onVisibilityChanged(@NonNull View changedView, @Visibility int visibility) {
         if (visibility == VISIBLE) {
             if (mAttachInfo != null) {
                 initialAwakenScrollBars();
@@ -8110,7 +8314,7 @@
      * @param hint A hint about whether or not this view is displayed:
      * {@link #VISIBLE} or {@link #INVISIBLE}.
      */
-    public void dispatchDisplayHint(int hint) {
+    public void dispatchDisplayHint(@Visibility int hint) {
         onDisplayHint(hint);
     }
 
@@ -8123,7 +8327,7 @@
      * @param hint A hint about whether or not this view is displayed:
      * {@link #VISIBLE} or {@link #INVISIBLE}.
      */
-    protected void onDisplayHint(int hint) {
+    protected void onDisplayHint(@Visibility int hint) {
     }
 
     /**
@@ -8134,7 +8338,7 @@
      *
      * @see #onWindowVisibilityChanged(int)
      */
-    public void dispatchWindowVisibilityChanged(int visibility) {
+    public void dispatchWindowVisibilityChanged(@Visibility int visibility) {
         onWindowVisibilityChanged(visibility);
     }
 
@@ -8148,7 +8352,7 @@
      *
      * @param visibility The new visibility of the window.
      */
-    protected void onWindowVisibilityChanged(int visibility) {
+    protected void onWindowVisibilityChanged(@Visibility int visibility) {
         if (visibility == VISIBLE) {
             initialAwakenScrollBars();
         }
@@ -8160,6 +8364,7 @@
      *
      * @return Returns the current visibility of the view's window.
      */
+    @Visibility
     public int getWindowVisibility() {
         return mAttachInfo != null ? mAttachInfo.mWindowVisibility : GONE;
     }
@@ -8320,7 +8525,7 @@
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         boolean result = false;
 
-        if (event.isConfirmKey()) {
+        if (KeyEvent.isConfirmKey(keyCode)) {
             if ((mViewFlags & ENABLED_MASK) == DISABLED) {
                 return true;
             }
@@ -8362,7 +8567,7 @@
      * @param event   The KeyEvent object that defines the button action.
      */
     public boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (event.isConfirmKey()) {
+        if (KeyEvent.isConfirmKey(keyCode)) {
             if ((mViewFlags & ENABLED_MASK) == DISABLED) {
                 return true;
             }
@@ -8440,7 +8645,14 @@
      *
      * <p>When implementing this, you probably also want to implement
      * {@link #onCheckIsTextEditor()} to indicate you will return a
-     * non-null InputConnection.
+     * non-null InputConnection.</p>
+     *
+     * <p>Also, take good care to fill in the {@link android.view.inputmethod.EditorInfo}
+     * object correctly and in its entirety, so that the connected IME can rely
+     * on its values. For example, {@link android.view.inputmethod.EditorInfo#initialSelStart}
+     * and  {@link android.view.inputmethod.EditorInfo#initialSelEnd} members
+     * must be filled in with the correct cursor position for IMEs to work correctly
+     * with your application.</p>
      *
      * @param outAttrs Fill in with attribute information about the connection.
      */
@@ -8629,11 +8841,6 @@
                             && !pointInView(event.getX(), event.getY()))) {
                 mSendingHoverAccessibilityEvents = false;
                 sendAccessibilityHoverEvent(AccessibilityEvent.TYPE_VIEW_HOVER_EXIT);
-                // If the window does not have input focus we take away accessibility
-                // focus as soon as the user stop hovering over the view.
-                if (mAttachInfo != null && !mAttachInfo.mHasWindowFocus) {
-                    getViewRootImpl().setAccessibilityFocus(null, null);
-                }
             }
         }
 
@@ -8756,10 +8963,13 @@
      * @return True if the event was handled, false otherwise.
      */
     public boolean onTouchEvent(MotionEvent event) {
+        final float x = event.getX();
+        final float y = event.getY();
         final int viewFlags = mViewFlags;
 
         if ((viewFlags & ENABLED_MASK) == DISABLED) {
             if (event.getAction() == MotionEvent.ACTION_UP && (mPrivateFlags & PFLAG_PRESSED) != 0) {
+                clearHotspot(R.attr.state_pressed);
                 setPressed(false);
             }
             // A disabled view that is clickable still consumes the touch
@@ -8792,6 +9002,7 @@
                             // showed it as pressed.  Make it show the pressed
                             // state now (before scheduling the click) to ensure
                             // the user sees it.
+                            setHotspot(R.attr.state_pressed, x, y);
                             setPressed(true);
                        }
 
@@ -8824,7 +9035,10 @@
                             // If the post failed, unpress right now
                             mUnsetPressedState.run();
                         }
+
                         removeTapCallback();
+                    } else {
+                        clearHotspot(R.attr.state_pressed);
                     }
                     break;
 
@@ -8845,23 +9059,26 @@
                         if (mPendingCheckForTap == null) {
                             mPendingCheckForTap = new CheckForTap();
                         }
+                        mPendingCheckForTap.x = event.getX();
+                        mPendingCheckForTap.y = event.getY();
                         postDelayed(mPendingCheckForTap, ViewConfiguration.getTapTimeout());
                     } else {
                         // Not inside a scrolling container, so show the feedback right away
+                        setHotspot(R.attr.state_pressed, x, y);
                         setPressed(true);
                         checkForLongClick(0);
                     }
                     break;
 
                 case MotionEvent.ACTION_CANCEL:
+                    clearHotspot(R.attr.state_pressed);
                     setPressed(false);
                     removeTapCallback();
                     removeLongPressCallback();
                     break;
 
                 case MotionEvent.ACTION_MOVE:
-                    final int x = (int) event.getX();
-                    final int y = (int) event.getY();
+                    setHotspot(R.attr.state_pressed, x, y);
 
                     // Be lenient about moving outside of buttons
                     if (!pointInView(x, y, mTouchSlop)) {
@@ -8876,12 +9093,27 @@
                     }
                     break;
             }
+
             return true;
         }
 
         return false;
     }
 
+    private void setHotspot(int id, float x, float y) {
+        final Drawable bg = mBackground;
+        if (bg != null && bg.supportsHotspots()) {
+            bg.setHotspot(id, x, y);
+        }
+    }
+
+    private void clearHotspot(int id) {
+        final Drawable bg = mBackground;
+        if (bg != null && bg.supportsHotspots()) {
+            bg.removeHotspot(id);
+        }
+    }
+
     /**
      * @hide
      */
@@ -8919,6 +9151,7 @@
      */
     private void removeUnsetPressCallback() {
         if ((mPrivateFlags & PFLAG_PRESSED) != 0 && mUnsetPressedState != null) {
+            clearHotspot(R.attr.state_pressed);
             setPressed(false);
             removeCallbacks(mUnsetPressedState);
         }
@@ -9081,7 +9314,7 @@
 
         if ((changed & VISIBILITY_MASK) != 0) {
             // If the view is invisible, cleanup its display list to free up resources
-            if (newVisibility != VISIBLE) {
+            if (newVisibility != VISIBLE && mAttachInfo != null) {
                 cleanupDraw();
             }
 
@@ -9093,6 +9326,8 @@
                 mParent.invalidateChild(this, null);
             }
             dispatchVisibilityChanged(this, newVisibility);
+
+            notifySubtreeAccessibilityStateChangedIfNeeded();
         }
 
         if ((changed & WILL_NOT_CACHE_DRAWING) != 0) {
@@ -9395,21 +9630,10 @@
      * @return The current transform matrix for the view
      */
     public Matrix getMatrix() {
-        if (mTransformationInfo != null) {
-            updateMatrix();
-            return mTransformationInfo.mMatrix;
-        }
-        return Matrix.IDENTITY_MATRIX;
-    }
-
-    /**
-     * Utility function to determine if the value is far enough away from zero to be
-     * considered non-zero.
-     * @param value A floating point value to check for zero-ness
-     * @return whether the passed-in value is far enough away from zero to be considered non-zero
-     */
-    private static boolean nonzero(float value) {
-        return (value < -NONZERO_EPSILON || value > NONZERO_EPSILON);
+        ensureTransformationInfo();
+        final Matrix matrix = mTransformationInfo.mMatrix;
+        mRenderNode.getMatrix(matrix);
+        return matrix;
     }
 
     /**
@@ -9419,11 +9643,7 @@
      * @return True if the transform matrix is the identity matrix, false otherwise.
      */
     final boolean hasIdentityMatrix() {
-        if (mTransformationInfo != null) {
-            updateMatrix();
-            return mTransformationInfo.mMatrixIsIdentity;
-        }
-        return true;
+        return mRenderNode.hasIdentityMatrix();
     }
 
     void ensureTransformationInfo() {
@@ -9432,53 +9652,6 @@
         }
     }
 
-    /**
-     * Recomputes the transform matrix if necessary.
-     */
-    private void updateMatrix() {
-        final TransformationInfo info = mTransformationInfo;
-        if (info == null) {
-            return;
-        }
-        if (info.mMatrixDirty) {
-            // transform-related properties have changed since the last time someone
-            // asked for the matrix; recalculate it with the current values
-
-            // Figure out if we need to update the pivot point
-            if ((mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == 0) {
-                if ((mRight - mLeft) != info.mPrevWidth || (mBottom - mTop) != info.mPrevHeight) {
-                    info.mPrevWidth = mRight - mLeft;
-                    info.mPrevHeight = mBottom - mTop;
-                    info.mPivotX = info.mPrevWidth / 2f;
-                    info.mPivotY = info.mPrevHeight / 2f;
-                }
-            }
-            info.mMatrix.reset();
-            if (!nonzero(info.mRotationX) && !nonzero(info.mRotationY)) {
-                info.mMatrix.setTranslate(info.mTranslationX, info.mTranslationY);
-                info.mMatrix.preRotate(info.mRotation, info.mPivotX, info.mPivotY);
-                info.mMatrix.preScale(info.mScaleX, info.mScaleY, info.mPivotX, info.mPivotY);
-            } else {
-                if (info.mCamera == null) {
-                    info.mCamera = new Camera();
-                    info.matrix3D = new Matrix();
-                }
-                info.mCamera.save();
-                info.mMatrix.preScale(info.mScaleX, info.mScaleY, info.mPivotX, info.mPivotY);
-                info.mCamera.rotate(info.mRotationX, info.mRotationY, -info.mRotation);
-                info.mCamera.getMatrix(info.matrix3D);
-                info.matrix3D.preTranslate(-info.mPivotX, -info.mPivotY);
-                info.matrix3D.postTranslate(info.mPivotX + info.mTranslationX,
-                        info.mPivotY + info.mTranslationY);
-                info.mMatrix.postConcat(info.matrix3D);
-                info.mCamera.restore();
-            }
-            info.mMatrixDirty = false;
-            info.mMatrixIsIdentity = info.mMatrix.isIdentity();
-            info.mInverseMatrixDirty = true;
-        }
-    }
-
    /**
      * Utility method to retrieve the inverse of the current mMatrix property.
      * We cache the matrix to avoid recalculating it when transform properties
@@ -9487,19 +9660,13 @@
      * @return The inverse of the current matrix of this view.
      */
     final Matrix getInverseMatrix() {
-        final TransformationInfo info = mTransformationInfo;
-        if (info != null) {
-            updateMatrix();
-            if (info.mInverseMatrixDirty) {
-                if (info.mInverseMatrix == null) {
-                    info.mInverseMatrix = new Matrix();
-                }
-                info.mMatrix.invert(info.mInverseMatrix);
-                info.mInverseMatrixDirty = false;
-            }
-            return info.mInverseMatrix;
+        ensureTransformationInfo();
+        if (mTransformationInfo.mInverseMatrix == null) {
+            mTransformationInfo.mInverseMatrix = new Matrix();
         }
-        return Matrix.IDENTITY_MATRIX;
+        final Matrix matrix = mTransformationInfo.mInverseMatrix;
+        mRenderNode.getInverseMatrix(matrix);
+        return matrix;
     }
 
     /**
@@ -9510,14 +9677,8 @@
      * @return The distance along the Z axis.
      */
     public float getCameraDistance() {
-        ensureTransformationInfo();
         final float dpi = mResources.getDisplayMetrics().densityDpi;
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mCamera == null) {
-            info.mCamera = new Camera();
-            info.matrix3D = new Matrix();
-        }
-        return -(info.mCamera.getLocationZ() * dpi);
+        return -(mRenderNode.getCameraDistance() * dpi);
     }
 
     /**
@@ -9560,27 +9721,13 @@
      * @see #setRotationY(float)
      */
     public void setCameraDistance(float distance) {
-        invalidateViewProperty(true, false);
-
-        ensureTransformationInfo();
         final float dpi = mResources.getDisplayMetrics().densityDpi;
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mCamera == null) {
-            info.mCamera = new Camera();
-            info.matrix3D = new Matrix();
-        }
 
-        info.mCamera.setLocation(0.0f, 0.0f, -Math.abs(distance) / dpi);
-        info.mMatrixDirty = true;
-
+        invalidateViewProperty(true, false);
+        mRenderNode.setCameraDistance(-Math.abs(distance) / dpi);
         invalidateViewProperty(false, false);
-        if (mDisplayList != null) {
-            mDisplayList.setCameraDistance(-Math.abs(distance) / dpi);
-        }
-        if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-            // View was rejected last time it was drawn by its parent; this may have changed
-            invalidateParentIfNeeded();
-        }
+
+        invalidateParentIfNeededAndWasQuickRejected();
     }
 
     /**
@@ -9594,7 +9741,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getRotation() {
-        return mTransformationInfo != null ? mTransformationInfo.mRotation : 0;
+        return mRenderNode.getRotation();
     }
 
     /**
@@ -9612,21 +9759,13 @@
      * @attr ref android.R.styleable#View_rotation
      */
     public void setRotation(float rotation) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mRotation != rotation) {
+        if (rotation != getRotation()) {
             // Double-invalidation is necessary to capture view's old and new areas
             invalidateViewProperty(true, false);
-            info.mRotation = rotation;
-            info.mMatrixDirty = true;
+            mRenderNode.setRotation(rotation);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setRotation(rotation);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -9641,7 +9780,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getRotationY() {
-        return mTransformationInfo != null ? mTransformationInfo.mRotationY : 0;
+        return mRenderNode.getRotationY();
     }
 
     /**
@@ -9664,20 +9803,12 @@
      * @attr ref android.R.styleable#View_rotationY
      */
     public void setRotationY(float rotationY) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mRotationY != rotationY) {
+        if (rotationY != getRotationY()) {
             invalidateViewProperty(true, false);
-            info.mRotationY = rotationY;
-            info.mMatrixDirty = true;
+            mRenderNode.setRotationY(rotationY);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setRotationY(rotationY);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -9692,7 +9823,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getRotationX() {
-        return mTransformationInfo != null ? mTransformationInfo.mRotationX : 0;
+        return mRenderNode.getRotationX();
     }
 
     /**
@@ -9715,20 +9846,12 @@
      * @attr ref android.R.styleable#View_rotationX
      */
     public void setRotationX(float rotationX) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mRotationX != rotationX) {
+        if (rotationX != getRotationX()) {
             invalidateViewProperty(true, false);
-            info.mRotationX = rotationX;
-            info.mMatrixDirty = true;
+            mRenderNode.setRotationX(rotationX);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setRotationX(rotationX);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -9744,7 +9867,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getScaleX() {
-        return mTransformationInfo != null ? mTransformationInfo.mScaleX : 1;
+        return mRenderNode.getScaleX();
     }
 
     /**
@@ -9758,20 +9881,12 @@
      * @attr ref android.R.styleable#View_scaleX
      */
     public void setScaleX(float scaleX) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mScaleX != scaleX) {
+        if (scaleX != getScaleX()) {
             invalidateViewProperty(true, false);
-            info.mScaleX = scaleX;
-            info.mMatrixDirty = true;
+            mRenderNode.setScaleX(scaleX);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setScaleX(scaleX);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -9787,7 +9902,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getScaleY() {
-        return mTransformationInfo != null ? mTransformationInfo.mScaleY : 1;
+        return mRenderNode.getScaleY();
     }
 
     /**
@@ -9801,20 +9916,12 @@
      * @attr ref android.R.styleable#View_scaleY
      */
     public void setScaleY(float scaleY) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mScaleY != scaleY) {
+        if (scaleY != getScaleY()) {
             invalidateViewProperty(true, false);
-            info.mScaleY = scaleY;
-            info.mMatrixDirty = true;
+            mRenderNode.setScaleY(scaleY);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setScaleY(scaleY);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -9832,7 +9939,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getPivotX() {
-        return mTransformationInfo != null ? mTransformationInfo.mPivotX : 0;
+        return mRenderNode.getPivotX();
     }
 
     /**
@@ -9851,23 +9958,12 @@
      * @attr ref android.R.styleable#View_transformPivotX
      */
     public void setPivotX(float pivotX) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        boolean pivotSet = (mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) ==
-                PFLAG_PIVOT_EXPLICITLY_SET;
-        if (info.mPivotX != pivotX || !pivotSet) {
-            mPrivateFlags |= PFLAG_PIVOT_EXPLICITLY_SET;
+        if (mRenderNode.isPivotExplicitlySet() || pivotX != getPivotX()) {
             invalidateViewProperty(true, false);
-            info.mPivotX = pivotX;
-            info.mMatrixDirty = true;
+            mRenderNode.setPivotX(pivotX);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setPivotX(pivotX);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -9885,7 +9981,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getPivotY() {
-        return mTransformationInfo != null ? mTransformationInfo.mPivotY : 0;
+        return mRenderNode.getPivotY();
     }
 
     /**
@@ -9903,23 +9999,12 @@
      * @attr ref android.R.styleable#View_transformPivotY
      */
     public void setPivotY(float pivotY) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        boolean pivotSet = (mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) ==
-                PFLAG_PIVOT_EXPLICITLY_SET;
-        if (info.mPivotY != pivotY || !pivotSet) {
-            mPrivateFlags |= PFLAG_PIVOT_EXPLICITLY_SET;
+        if (mRenderNode.isPivotExplicitlySet() || pivotY != getPivotY()) {
             invalidateViewProperty(true, false);
-            info.mPivotY = pivotY;
-            info.mMatrixDirty = true;
+            mRenderNode.setPivotY(pivotY);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setPivotY(pivotY);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -9997,9 +10082,7 @@
             } else {
                 mPrivateFlags &= ~PFLAG_ALPHA_SET;
                 invalidateViewProperty(true, false);
-                if (mDisplayList != null) {
-                    mDisplayList.setAlpha(getFinalAlpha());
-                }
+                mRenderNode.setAlpha(getFinalAlpha());
             }
         }
     }
@@ -10024,9 +10107,7 @@
                 return true;
             } else {
                 mPrivateFlags &= ~PFLAG_ALPHA_SET;
-                if (mDisplayList != null) {
-                    mDisplayList.setAlpha(getFinalAlpha());
-                }
+                mRenderNode.setAlpha(getFinalAlpha());
             }
         }
         return false;
@@ -10047,9 +10128,7 @@
             mTransformationInfo.mTransitionAlpha = alpha;
             mPrivateFlags &= ~PFLAG_ALPHA_SET;
             invalidateViewProperty(true, false);
-            if (mDisplayList != null) {
-                mDisplayList.setAlpha(getFinalAlpha());
-            }
+            mRenderNode.setAlpha(getFinalAlpha());
         }
     }
 
@@ -10096,9 +10175,7 @@
      */
     public final void setTop(int top) {
         if (top != mTop) {
-            updateMatrix();
-            final boolean matrixIsIdentity = mTransformationInfo == null
-                    || mTransformationInfo.mMatrixIsIdentity;
+            final boolean matrixIsIdentity = hasIdentityMatrix();
             if (matrixIsIdentity) {
                 if (mAttachInfo != null) {
                     int minTop;
@@ -10121,17 +10198,11 @@
             int oldHeight = mBottom - mTop;
 
             mTop = top;
-            if (mDisplayList != null) {
-                mDisplayList.setTop(mTop);
-            }
+            mRenderNode.setTop(mTop);
 
             sizeChange(width, mBottom - mTop, width, oldHeight);
 
             if (!matrixIsIdentity) {
-                if ((mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == 0) {
-                    // A change in dimension means an auto-centered pivot point changes, too
-                    mTransformationInfo.mMatrixDirty = true;
-                }
                 mPrivateFlags |= PFLAG_DRAWN; // force another invalidation with the new orientation
                 invalidate(true);
             }
@@ -10172,9 +10243,7 @@
      */
     public final void setBottom(int bottom) {
         if (bottom != mBottom) {
-            updateMatrix();
-            final boolean matrixIsIdentity = mTransformationInfo == null
-                    || mTransformationInfo.mMatrixIsIdentity;
+            final boolean matrixIsIdentity = hasIdentityMatrix();
             if (matrixIsIdentity) {
                 if (mAttachInfo != null) {
                     int maxBottom;
@@ -10194,17 +10263,11 @@
             int oldHeight = mBottom - mTop;
 
             mBottom = bottom;
-            if (mDisplayList != null) {
-                mDisplayList.setBottom(mBottom);
-            }
+            mRenderNode.setBottom(mBottom);
 
             sizeChange(width, mBottom - mTop, width, oldHeight);
 
             if (!matrixIsIdentity) {
-                if ((mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == 0) {
-                    // A change in dimension means an auto-centered pivot point changes, too
-                    mTransformationInfo.mMatrixDirty = true;
-                }
                 mPrivateFlags |= PFLAG_DRAWN; // force another invalidation with the new orientation
                 invalidate(true);
             }
@@ -10236,9 +10299,7 @@
      */
     public final void setLeft(int left) {
         if (left != mLeft) {
-            updateMatrix();
-            final boolean matrixIsIdentity = mTransformationInfo == null
-                    || mTransformationInfo.mMatrixIsIdentity;
+            final boolean matrixIsIdentity = hasIdentityMatrix();
             if (matrixIsIdentity) {
                 if (mAttachInfo != null) {
                     int minLeft;
@@ -10261,17 +10322,11 @@
             int height = mBottom - mTop;
 
             mLeft = left;
-            if (mDisplayList != null) {
-                mDisplayList.setLeft(left);
-            }
+            mRenderNode.setLeft(left);
 
             sizeChange(mRight - mLeft, height, oldWidth, height);
 
             if (!matrixIsIdentity) {
-                if ((mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == 0) {
-                    // A change in dimension means an auto-centered pivot point changes, too
-                    mTransformationInfo.mMatrixDirty = true;
-                }
                 mPrivateFlags |= PFLAG_DRAWN; // force another invalidation with the new orientation
                 invalidate(true);
             }
@@ -10303,9 +10358,7 @@
      */
     public final void setRight(int right) {
         if (right != mRight) {
-            updateMatrix();
-            final boolean matrixIsIdentity = mTransformationInfo == null
-                    || mTransformationInfo.mMatrixIsIdentity;
+            final boolean matrixIsIdentity = hasIdentityMatrix();
             if (matrixIsIdentity) {
                 if (mAttachInfo != null) {
                     int maxRight;
@@ -10325,17 +10378,11 @@
             int height = mBottom - mTop;
 
             mRight = right;
-            if (mDisplayList != null) {
-                mDisplayList.setRight(mRight);
-            }
+            mRenderNode.setRight(mRight);
 
             sizeChange(mRight - mLeft, height, oldWidth, height);
 
             if (!matrixIsIdentity) {
-                if ((mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == 0) {
-                    // A change in dimension means an auto-centered pivot point changes, too
-                    mTransformationInfo.mMatrixDirty = true;
-                }
                 mPrivateFlags |= PFLAG_DRAWN; // force another invalidation with the new orientation
                 invalidate(true);
             }
@@ -10357,7 +10404,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getX() {
-        return mLeft + (mTransformationInfo != null ? mTransformationInfo.mTranslationX : 0);
+        return mLeft + getTranslationX();
     }
 
     /**
@@ -10380,7 +10427,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getY() {
-        return mTop + (mTransformationInfo != null ? mTransformationInfo.mTranslationY : 0);
+        return mTop + getTranslationY();
     }
 
     /**
@@ -10394,6 +10441,48 @@
         setTranslationY(y - mTop);
     }
 
+    /**
+     * The visual z position of this view, in pixels. This is equivalent to the
+     * {@link #setTranslationZ(float) translationZ} property plus the current
+     * {@link #getElevation() elevation} property.
+     *
+     * @return The visual z position of this view, in pixels.
+     */
+    @ViewDebug.ExportedProperty(category = "drawing")
+    public float getZ() {
+        return getElevation() + getTranslationZ();
+    }
+
+    /**
+     * Sets the visual z position of this view, in pixels. This is equivalent to setting the
+     * {@link #setTranslationZ(float) translationZ} property to be the difference between
+     * the x value passed in and the current {@link #getElevation() elevation} property.
+     *
+     * @param z The visual z position of this view, in pixels.
+     */
+    public void setZ(float z) {
+        setTranslationZ(z - getElevation());
+    }
+
+    @ViewDebug.ExportedProperty(category = "drawing")
+    public float getElevation() {
+        return mRenderNode.getElevation();
+    }
+
+    /**
+     * Sets the base depth location of this view.
+     *
+     * @attr ref android.R.styleable#View_elevation
+     */
+    public void setElevation(float elevation) {
+        if (elevation != getElevation()) {
+            invalidateViewProperty(true, false);
+            mRenderNode.setElevation(elevation);
+            invalidateViewProperty(false, true);
+
+            invalidateParentIfNeededAndWasQuickRejected();
+        }
+    }
 
     /**
      * The horizontal location of this view relative to its {@link #getLeft() left} position.
@@ -10404,7 +10493,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getTranslationX() {
-        return mTransformationInfo != null ? mTransformationInfo.mTranslationX : 0;
+        return mRenderNode.getTranslationX();
     }
 
     /**
@@ -10418,21 +10507,12 @@
      * @attr ref android.R.styleable#View_translationX
      */
     public void setTranslationX(float translationX) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mTranslationX != translationX) {
-            // Double-invalidation is necessary to capture view's old and new areas
+        if (translationX != getTranslationX()) {
             invalidateViewProperty(true, false);
-            info.mTranslationX = translationX;
-            info.mMatrixDirty = true;
+            mRenderNode.setTranslationX(translationX);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setTranslationX(translationX);
-            }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
-            }
+
+            invalidateParentIfNeededAndWasQuickRejected();
         }
     }
 
@@ -10446,7 +10526,7 @@
      */
     @ViewDebug.ExportedProperty(category = "drawing")
     public float getTranslationY() {
-        return mTransformationInfo != null ? mTransformationInfo.mTranslationY : 0;
+        return mRenderNode.getTranslationY();
     }
 
     /**
@@ -10460,37 +10540,154 @@
      * @attr ref android.R.styleable#View_translationY
      */
     public void setTranslationY(float translationY) {
-        ensureTransformationInfo();
-        final TransformationInfo info = mTransformationInfo;
-        if (info.mTranslationY != translationY) {
+        if (translationY != getTranslationY()) {
             invalidateViewProperty(true, false);
-            info.mTranslationY = translationY;
-            info.mMatrixDirty = true;
+            mRenderNode.setTranslationY(translationY);
             invalidateViewProperty(false, true);
-            if (mDisplayList != null) {
-                mDisplayList.setTranslationY(translationY);
+
+            invalidateParentIfNeededAndWasQuickRejected();
+        }
+    }
+
+    /**
+     * The depth location of this view relative to its {@link #getElevation() elevation}.
+     *
+     * @return The depth of this view relative to its elevation.
+     */
+    @ViewDebug.ExportedProperty(category = "drawing")
+    public float getTranslationZ() {
+        return mRenderNode.getTranslationZ();
+    }
+
+    /**
+     * Sets the depth location of this view relative to its {@link #getElevation() elevation}.
+     *
+     * @attr ref android.R.styleable#View_translationZ
+     */
+    public void setTranslationZ(float translationZ) {
+        if (translationZ != getTranslationZ()) {
+            invalidateViewProperty(true, false);
+            mRenderNode.setTranslationZ(translationZ);
+            invalidateViewProperty(false, true);
+
+            invalidateParentIfNeededAndWasQuickRejected();
+        }
+    }
+
+    /**
+     * Returns a ValueAnimator which can animate a clipping circle.
+     * <p>
+     * The View will be clipped to the animating circle.
+     * <p>
+     * Any shadow cast by the View will respect the circular clip from this animator.
+     *
+     * @param centerX The x coordinate of the center of the animating circle.
+     * @param centerY The y coordinate of the center of the animating circle.
+     * @param startRadius The starting radius of the animating circle.
+     * @param endRadius The ending radius of the animating circle.
+     */
+    public final ValueAnimator createRevealAnimator(int centerX,  int centerY,
+            float startRadius, float endRadius) {
+        return RevealAnimator.ofRevealCircle(this, centerX, centerY,
+                startRadius, endRadius, false);
+    }
+
+    /**
+     * Returns a ValueAnimator which can animate a clearing circle.
+     * <p>
+     * The View is prevented from drawing within the circle, so the content
+     * behind the View shows through.
+     *
+     * @param centerX The x coordinate of the center of the animating circle.
+     * @param centerY The y coordinate of the center of the animating circle.
+     * @param startRadius The starting radius of the animating circle.
+     * @param endRadius The ending radius of the animating circle.
+     *
+     * @hide
+     */
+    public final ValueAnimator createClearCircleAnimator(int centerX,  int centerY,
+            float startRadius, float endRadius) {
+        return RevealAnimator.ofRevealCircle(this, centerX, centerY,
+                startRadius, endRadius, true);
+    }
+
+    /**
+     * Sets the outline of the view, which defines the shape of the shadow it
+     * casts.
+     * <p>
+     * If the outline is not set or is null, shadows will be cast from the
+     * bounds of the View.
+     *
+     * @param outline The new outline of the view.
+     *         Must be {@link android.graphics.Outline#isValid() valid.}
+     */
+    public void setOutline(@Nullable Outline outline) {
+        if (outline != null && !outline.isValid()) {
+            throw new IllegalArgumentException("Outline must not be invalid");
+        }
+
+        mPrivateFlags3 |= PFLAG3_OUTLINE_DEFINED;
+
+        if (outline == null) {
+            mOutline = null;
+        } else {
+            // always copy the path since caller may reuse
+            if (mOutline == null) {
+                mOutline = new Outline();
             }
-            if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) == PFLAG2_VIEW_QUICK_REJECTED) {
-                // View was rejected last time it was drawn by its parent; this may have changed
-                invalidateParentIfNeeded();
+            mOutline.set(outline);
+        }
+        mRenderNode.setOutline(mOutline);
+    }
+
+    // TODO: remove
+    public final boolean getClipToOutline() { return false; }
+    public void setClipToOutline(boolean clipToOutline) {}
+
+    private void queryOutlineFromBackgroundIfUndefined() {
+        if ((mPrivateFlags3 & PFLAG3_OUTLINE_DEFINED) == 0) {
+            // Outline not currently defined, query from background
+            if (mOutline == null) {
+                mOutline = new Outline();
+            } else {
+                //invalidate outline, to ensure background calculates it
+                mOutline.set(null);
+            }
+            if (mBackground.getOutline(mOutline)) {
+                if (!mOutline.isValid()) {
+                    throw new IllegalStateException("Background drawable failed to build outline");
+                }
+                mRenderNode.setOutline(mOutline);
+            } else {
+                mRenderNode.setOutline(null);
             }
         }
     }
 
     /**
+     * Private API to be used for reveal animation
+     *
+     * @hide
+     */
+    public void setRevealClip(boolean shouldClip, boolean inverseClip,
+            float x, float y, float radius) {
+        mRenderNode.setRevealClip(shouldClip, inverseClip, x, y, radius);
+        // TODO: Handle this invalidate in a better way, or purely in native.
+        invalidate();
+    }
+
+    /**
      * Hit rectangle in parent's coordinates
      *
      * @param outRect The hit rectangle of the view.
      */
     public void getHitRect(Rect outRect) {
-        updateMatrix();
-        final TransformationInfo info = mTransformationInfo;
-        if (info == null || info.mMatrixIsIdentity || mAttachInfo == null) {
+        if (hasIdentityMatrix() || mAttachInfo == null) {
             outRect.set(mLeft, mTop, mRight, mBottom);
         } else {
             final RectF tmpRect = mAttachInfo.mTmpTransformRect;
             tmpRect.set(0, 0, getWidth(), getHeight());
-            info.mMatrix.mapRect(tmpRect);
+            getMatrix().mapRect(tmpRect); // TODO: mRenderNode.mapRect(tmpRect)
             outRect.set((int) tmpRect.left + mLeft, (int) tmpRect.top + mTop,
                     (int) tmpRect.right + mLeft, (int) tmpRect.bottom + mTop);
         }
@@ -10579,11 +10776,9 @@
      */
     public void offsetTopAndBottom(int offset) {
         if (offset != 0) {
-            updateMatrix();
-            final boolean matrixIsIdentity = mTransformationInfo == null
-                    || mTransformationInfo.mMatrixIsIdentity;
+            final boolean matrixIsIdentity = hasIdentityMatrix();
             if (matrixIsIdentity) {
-                if (mDisplayList != null) {
+                if (isHardwareAccelerated()) {
                     invalidateViewProperty(false, false);
                 } else {
                     final ViewParent p = mParent;
@@ -10611,8 +10806,8 @@
 
             mTop += offset;
             mBottom += offset;
-            if (mDisplayList != null) {
-                mDisplayList.offsetTopAndBottom(offset);
+            mRenderNode.offsetTopAndBottom(offset);
+            if (isHardwareAccelerated()) {
                 invalidateViewProperty(false, false);
             } else {
                 if (!matrixIsIdentity) {
@@ -10630,11 +10825,9 @@
      */
     public void offsetLeftAndRight(int offset) {
         if (offset != 0) {
-            updateMatrix();
-            final boolean matrixIsIdentity = mTransformationInfo == null
-                    || mTransformationInfo.mMatrixIsIdentity;
+            final boolean matrixIsIdentity = hasIdentityMatrix();
             if (matrixIsIdentity) {
-                if (mDisplayList != null) {
+                if (isHardwareAccelerated()) {
                     invalidateViewProperty(false, false);
                 } else {
                     final ViewParent p = mParent;
@@ -10659,8 +10852,8 @@
 
             mLeft += offset;
             mRight += offset;
-            if (mDisplayList != null) {
-                mDisplayList.offsetLeftAndRight(offset);
+            mRenderNode.offsetLeftAndRight(offset);
+            if (isHardwareAccelerated()) {
                 invalidateViewProperty(false, false);
             } else {
                 if (!matrixIsIdentity) {
@@ -10931,94 +11124,54 @@
                 (!(mParent instanceof ViewGroup) ||
                         !((ViewGroup) mParent).isViewTransitioning(this));
     }
+
     /**
      * Mark the area defined by dirty as needing to be drawn. If the view is
-     * visible, {@link #onDraw(android.graphics.Canvas)} will be called at some point
-     * in the future. This must be called from a UI thread. To call from a non-UI
-     * thread, call {@link #postInvalidate()}.
+     * visible, {@link #onDraw(android.graphics.Canvas)} will be called at some
+     * point in the future.
+     * <p>
+     * This must be called from a UI thread. To call from a non-UI thread, call
+     * {@link #postInvalidate()}.
+     * <p>
+     * <b>WARNING:</b> In API 19 and below, this method may be destructive to
+     * {@code dirty}.
      *
-     * WARNING: This method is destructive to dirty.
      * @param dirty the rectangle representing the bounds of the dirty region
      */
     public void invalidate(Rect dirty) {
-        if (skipInvalidate()) {
-            return;
-        }
-        if ((mPrivateFlags & (PFLAG_DRAWN | PFLAG_HAS_BOUNDS)) == (PFLAG_DRAWN | PFLAG_HAS_BOUNDS) ||
-                (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == PFLAG_DRAWING_CACHE_VALID ||
-                (mPrivateFlags & PFLAG_INVALIDATED) != PFLAG_INVALIDATED) {
-            mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID;
-            mPrivateFlags |= PFLAG_INVALIDATED;
-            mPrivateFlags |= PFLAG_DIRTY;
-            final ViewParent p = mParent;
-            final AttachInfo ai = mAttachInfo;
-            //noinspection PointlessBooleanExpression,ConstantConditions
-            if (!HardwareRenderer.RENDER_DIRTY_REGIONS) {
-                if (p != null && ai != null && ai.mHardwareAccelerated) {
-                    // fast-track for GL-enabled applications; just invalidate the whole hierarchy
-                    // with a null dirty rect, which tells the ViewAncestor to redraw everything
-                    p.invalidateChild(this, null);
-                    return;
-                }
-            }
-            if (p != null && ai != null) {
-                final int scrollX = mScrollX;
-                final int scrollY = mScrollY;
-                final Rect r = ai.mTmpInvalRect;
-                r.set(dirty.left - scrollX, dirty.top - scrollY,
-                        dirty.right - scrollX, dirty.bottom - scrollY);
-                mParent.invalidateChild(this, r);
-            }
-        }
+        final int scrollX = mScrollX;
+        final int scrollY = mScrollY;
+        invalidateInternal(dirty.left - scrollX, dirty.top - scrollY,
+                dirty.right - scrollX, dirty.bottom - scrollY, true, false);
     }
 
     /**
-     * Mark the area defined by the rect (l,t,r,b) as needing to be drawn.
-     * The coordinates of the dirty rect are relative to the view.
-     * If the view is visible, {@link #onDraw(android.graphics.Canvas)}
-     * will be called at some point in the future. This must be called from
-     * a UI thread. To call from a non-UI thread, call {@link #postInvalidate()}.
+     * Mark the area defined by the rect (l,t,r,b) as needing to be drawn. The
+     * coordinates of the dirty rect are relative to the view. If the view is
+     * visible, {@link #onDraw(android.graphics.Canvas)} will be called at some
+     * point in the future.
+     * <p>
+     * This must be called from a UI thread. To call from a non-UI thread, call
+     * {@link #postInvalidate()}.
+     *
      * @param l the left position of the dirty region
      * @param t the top position of the dirty region
      * @param r the right position of the dirty region
      * @param b the bottom position of the dirty region
      */
     public void invalidate(int l, int t, int r, int b) {
-        if (skipInvalidate()) {
-            return;
-        }
-        if ((mPrivateFlags & (PFLAG_DRAWN | PFLAG_HAS_BOUNDS)) == (PFLAG_DRAWN | PFLAG_HAS_BOUNDS) ||
-                (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == PFLAG_DRAWING_CACHE_VALID ||
-                (mPrivateFlags & PFLAG_INVALIDATED) != PFLAG_INVALIDATED) {
-            mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID;
-            mPrivateFlags |= PFLAG_INVALIDATED;
-            mPrivateFlags |= PFLAG_DIRTY;
-            final ViewParent p = mParent;
-            final AttachInfo ai = mAttachInfo;
-            //noinspection PointlessBooleanExpression,ConstantConditions
-            if (!HardwareRenderer.RENDER_DIRTY_REGIONS) {
-                if (p != null && ai != null && ai.mHardwareAccelerated) {
-                    // fast-track for GL-enabled applications; just invalidate the whole hierarchy
-                    // with a null dirty rect, which tells the ViewAncestor to redraw everything
-                    p.invalidateChild(this, null);
-                    return;
-                }
-            }
-            if (p != null && ai != null && l < r && t < b) {
-                final int scrollX = mScrollX;
-                final int scrollY = mScrollY;
-                final Rect tmpr = ai.mTmpInvalRect;
-                tmpr.set(l - scrollX, t - scrollY, r - scrollX, b - scrollY);
-                p.invalidateChild(this, tmpr);
-            }
-        }
+        final int scrollX = mScrollX;
+        final int scrollY = mScrollY;
+        invalidateInternal(l - scrollX, t - scrollY, r - scrollX, b - scrollY, true, false);
     }
 
     /**
      * Invalidate the whole view. If the view is visible,
      * {@link #onDraw(android.graphics.Canvas)} will be called at some point in
-     * the future. This must be called from a UI thread. To call from a non-UI thread,
-     * call {@link #postInvalidate()}.
+     * the future.
+     * <p>
+     * This must be called from a UI thread. To call from a non-UI thread, call
+     * {@link #postInvalidate()}.
      */
     public void invalidate() {
         invalidate(true);
@@ -11026,47 +11179,102 @@
 
     /**
      * This is where the invalidate() work actually happens. A full invalidate()
-     * causes the drawing cache to be invalidated, but this function can be called with
-     * invalidateCache set to false to skip that invalidation step for cases that do not
-     * need it (for example, a component that remains at the same dimensions with the same
-     * content).
+     * causes the drawing cache to be invalidated, but this function can be
+     * called with invalidateCache set to false to skip that invalidation step
+     * for cases that do not need it (for example, a component that remains at
+     * the same dimensions with the same content).
      *
-     * @param invalidateCache Whether the drawing cache for this view should be invalidated as
-     * well. This is usually true for a full invalidate, but may be set to false if the
-     * View's contents or dimensions have not changed.
+     * @param invalidateCache Whether the drawing cache for this view should be
+     *            invalidated as well. This is usually true for a full
+     *            invalidate, but may be set to false if the View's contents or
+     *            dimensions have not changed.
      */
     void invalidate(boolean invalidateCache) {
+        invalidateInternal(0, 0, mRight - mLeft, mBottom - mTop, invalidateCache, true);
+    }
+
+    void invalidateInternal(int l, int t, int r, int b, boolean invalidateCache,
+            boolean fullInvalidate) {
         if (skipInvalidate()) {
             return;
         }
-        if ((mPrivateFlags & (PFLAG_DRAWN | PFLAG_HAS_BOUNDS)) == (PFLAG_DRAWN | PFLAG_HAS_BOUNDS) ||
-                (invalidateCache && (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == PFLAG_DRAWING_CACHE_VALID) ||
-                (mPrivateFlags & PFLAG_INVALIDATED) != PFLAG_INVALIDATED || isOpaque() != mLastIsOpaque) {
-            mLastIsOpaque = isOpaque();
-            mPrivateFlags &= ~PFLAG_DRAWN;
+
+        if ((mPrivateFlags & (PFLAG_DRAWN | PFLAG_HAS_BOUNDS)) == (PFLAG_DRAWN | PFLAG_HAS_BOUNDS)
+                || (invalidateCache && (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == PFLAG_DRAWING_CACHE_VALID)
+                || (mPrivateFlags & PFLAG_INVALIDATED) != PFLAG_INVALIDATED
+                || (fullInvalidate && isOpaque() != mLastIsOpaque)) {
+            if (fullInvalidate) {
+                mLastIsOpaque = isOpaque();
+                mPrivateFlags &= ~PFLAG_DRAWN;
+            }
+
             mPrivateFlags |= PFLAG_DIRTY;
+
             if (invalidateCache) {
                 mPrivateFlags |= PFLAG_INVALIDATED;
                 mPrivateFlags &= ~PFLAG_DRAWING_CACHE_VALID;
             }
+
+            // Propagate the damage rectangle to the parent view.
             final AttachInfo ai = mAttachInfo;
             final ViewParent p = mParent;
-            //noinspection PointlessBooleanExpression,ConstantConditions
-            if (!HardwareRenderer.RENDER_DIRTY_REGIONS) {
-                if (p != null && ai != null && ai.mHardwareAccelerated) {
-                    // fast-track for GL-enabled applications; just invalidate the whole hierarchy
-                    // with a null dirty rect, which tells the ViewAncestor to redraw everything
-                    p.invalidateChild(this, null);
-                    return;
+            if (p != null && ai != null && l < r && t < b) {
+                final Rect damage = ai.mTmpInvalRect;
+                damage.set(l, t, r, b);
+                p.invalidateChild(this, damage);
+            }
+
+            // Damage the entire projection receiver, if necessary.
+            if (mBackground != null && mBackground.isProjected()) {
+                final View receiver = getProjectionReceiver();
+                if (receiver != null) {
+                    receiver.damageInParent();
                 }
             }
 
-            if (p != null && ai != null) {
-                final Rect r = ai.mTmpInvalRect;
-                r.set(0, 0, mRight - mLeft, mBottom - mTop);
-                // Don't call invalidate -- we don't want to internally scroll
-                // our own bounds
-                p.invalidateChild(this, r);
+            // Damage the entire IsolatedZVolume recieving this view's shadow.
+            if (isHardwareAccelerated() && getZ() != 0) {
+                damageShadowReceiver();
+            }
+        }
+    }
+
+    /**
+     * @return this view's projection receiver, or {@code null} if none exists
+     */
+    private View getProjectionReceiver() {
+        ViewParent p = getParent();
+        while (p != null && p instanceof View) {
+            final View v = (View) p;
+            if (v.isProjectionReceiver()) {
+                return v;
+            }
+            p = p.getParent();
+        }
+
+        return null;
+    }
+
+    /**
+     * @return whether the view is a projection receiver
+     */
+    private boolean isProjectionReceiver() {
+        return mBackground != null;
+    }
+
+    /**
+     * Damage area of the screen that can be covered by this View's shadow.
+     *
+     * This method will guarantee that any changes to shadows cast by a View
+     * are damaged on the screen for future redraw.
+     */
+    private void damageShadowReceiver() {
+        final AttachInfo ai = mAttachInfo;
+        if (ai != null) {
+            ViewParent p = getParent();
+            if (p != null && p instanceof ViewGroup) {
+                final ViewGroup vg = (ViewGroup) p;
+                vg.damageInParent();
             }
         }
     }
@@ -11088,7 +11296,9 @@
      * list properties are not being used in this view
      */
     void invalidateViewProperty(boolean invalidateParent, boolean forceRedraw) {
-        if (mDisplayList == null || (mPrivateFlags & PFLAG_DRAW_ANIMATION) == PFLAG_DRAW_ANIMATION) {
+        if (!isHardwareAccelerated()
+                || !mRenderNode.isValid()
+                || (mPrivateFlags & PFLAG_DRAW_ANIMATION) != 0) {
             if (invalidateParent) {
                 invalidateParentCaches();
             }
@@ -11097,16 +11307,28 @@
             }
             invalidate(false);
         } else {
-            final AttachInfo ai = mAttachInfo;
-            final ViewParent p = mParent;
-            if (p != null && ai != null) {
-                final Rect r = ai.mTmpInvalRect;
-                r.set(0, 0, mRight - mLeft, mBottom - mTop);
-                if (mParent instanceof ViewGroup) {
-                    ((ViewGroup) mParent).invalidateChildFast(this, r);
-                } else {
-                    mParent.invalidateChild(this, r);
-                }
+            damageInParent();
+        }
+        if (isHardwareAccelerated() && invalidateParent && getZ() != 0) {
+            damageShadowReceiver();
+        }
+    }
+
+    /**
+     * Tells the parent view to damage this view's bounds.
+     *
+     * @hide
+     */
+    protected void damageInParent() {
+        final AttachInfo ai = mAttachInfo;
+        final ViewParent p = mParent;
+        if (p != null && ai != null) {
+            final Rect r = ai.mTmpInvalRect;
+            r.set(0, 0, mRight - mLeft, mBottom - mTop);
+            if (mParent instanceof ViewGroup) {
+                ((ViewGroup) mParent).damageChild(this, r);
+            } else {
+                mParent.invalidateChild(this, r);
             }
         }
     }
@@ -11157,6 +11379,16 @@
     }
 
     /**
+     * @hide
+     */
+    protected void invalidateParentIfNeededAndWasQuickRejected() {
+        if ((mPrivateFlags2 & PFLAG2_VIEW_QUICK_REJECTED) != 0) {
+            // View was rejected last time it was drawn by its parent; this may have changed
+            invalidateParentIfNeeded();
+        }
+    }
+
+    /**
      * Indicates whether this View is opaque. An opaque View guarantees that it will
      * draw all the pixels overlapping its bounds using a fully opaque color.
      *
@@ -11230,6 +11462,13 @@
     }
 
     /**
+     * @hide
+     */
+    public HardwareRenderer getHardwareRenderer() {
+        return mAttachInfo != null ? mAttachInfo.mHardwareRenderer : null;
+    }
+
+    /**
      * <p>Causes the Runnable to be added to the message queue.
      * The runnable will be run on the user interface thread.</p>
      *
@@ -11346,10 +11585,9 @@
                 attachInfo.mHandler.removeCallbacks(action);
                 attachInfo.mViewRootImpl.mChoreographer.removeCallbacks(
                         Choreographer.CALLBACK_ANIMATION, action, null);
-            } else {
-                // Assume that post will succeed later
-                ViewRootImpl.getRunQueue().removeCallbacks(action);
             }
+            // Assume that post will succeed later
+            ViewRootImpl.getRunQueue().removeCallbacks(action);
         }
         return true;
     }
@@ -11840,7 +12078,7 @@
      *
      * @attr ref android.R.styleable#View_scrollbarStyle
      */
-    public void setScrollBarStyle(int style) {
+    public void setScrollBarStyle(@ScrollBarStyle int style) {
         if (style != (mViewFlags & SCROLLBARS_STYLE_MASK)) {
             mViewFlags = (mViewFlags & ~SCROLLBARS_STYLE_MASK) | (style & SCROLLBARS_STYLE_MASK);
             computeOpaqueFlags();
@@ -11864,6 +12102,7 @@
             @ViewDebug.IntToString(from = SCROLLBARS_OUTSIDE_OVERLAY, to = "OUTSIDE_OVERLAY"),
             @ViewDebug.IntToString(from = SCROLLBARS_OUTSIDE_INSET, to = "OUTSIDE_INSET")
     })
+    @ScrollBarStyle
     public int getScrollBarStyle() {
         return mViewFlags & SCROLLBARS_STYLE_MASK;
     }
@@ -12255,10 +12494,6 @@
             InputMethodManager imm = InputMethodManager.peekInstance();
             imm.focusIn(this);
         }
-
-        if (mDisplayList != null) {
-            mDisplayList.clearDirty();
-        }
     }
 
     /**
@@ -12365,7 +12600,7 @@
      * @see #LAYOUT_DIRECTION_LTR
      * @see #LAYOUT_DIRECTION_RTL
      */
-    public void onRtlPropertiesChanged(int layoutDirection) {
+    public void onRtlPropertiesChanged(@ResolvedLayoutDir int layoutDirection) {
     }
 
     /**
@@ -12559,13 +12794,31 @@
      * @see #onAttachedToWindow()
      */
     protected void onDetachedFromWindow() {
+    }
+
+    /**
+     * This is a framework-internal mirror of onDetachedFromWindow() that's called
+     * after onDetachedFromWindow().
+     *
+     * If you override this you *MUST* call super.onDetachedFromWindowInternal()!
+     * The super method should be called at the end of the overriden method to ensure
+     * subclasses are destroyed first
+     *
+     * @hide
+     */
+    protected void onDetachedFromWindowInternal() {
         mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
         mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
 
+        if (mBackground != null) {
+            mBackground.clearHotspots();
+        }
+
         removeUnsetPressCallback();
         removeLongPressCallback();
         removePerformClickCallback();
         removeSendViewScrolledAccessibilityEventCallback();
+        stopNestedScroll();
 
         destroyDrawingCache();
         destroyLayer(false);
@@ -12576,15 +12829,9 @@
     }
 
     private void cleanupDraw() {
+        resetDisplayList();
         if (mAttachInfo != null) {
-            if (mDisplayList != null) {
-                mDisplayList.markDirty();
-                mAttachInfo.mViewRootImpl.enqueueDisplayList(mDisplayList);
-            }
             mAttachInfo.mViewRootImpl.cancelInvalidate(this);
-        } else {
-            // Should never happen
-            resetDisplayList();
         }
     }
 
@@ -12752,6 +12999,7 @@
         }
 
         onDetachedFromWindow();
+        onDetachedFromWindowInternal();
 
         ListenerInfo li = mListenerInfo;
         final CopyOnWriteArrayList<OnAttachStateChangeListener> listeners =
@@ -13053,11 +13301,7 @@
         }
 
         if (layerType == mLayerType) {
-            if (layerType != LAYER_TYPE_NONE && paint != mLayerPaint) {
-                mLayerPaint = paint == null ? new Paint() : paint;
-                invalidateParentCaches();
-                invalidate(true);
-            }
+            setLayerPaint(paint);
             return;
         }
 
@@ -13114,7 +13358,7 @@
             if (layerType == LAYER_TYPE_HARDWARE) {
                 HardwareLayer layer = getHardwareLayer();
                 if (layer != null) {
-                    layer.setLayerPaint(paint);
+                    layer.setLayerPaint(mLayerPaint);
                 }
                 invalidateViewProperty(false, false);
             } else {
@@ -13174,19 +13418,15 @@
 
         switch (mLayerType) {
             case LAYER_TYPE_HARDWARE:
-                if (attachInfo.mHardwareRenderer != null &&
-                        attachInfo.mHardwareRenderer.isEnabled() &&
-                        attachInfo.mHardwareRenderer.validate()) {
-                    getHardwareLayer();
-                    // TODO: We need a better way to handle this case
-                    // If views have registered pre-draw listeners they need
-                    // to be notified before we build the layer. Those listeners
-                    // may however rely on other events to happen first so we
-                    // cannot just invoke them here until they don't cancel the
-                    // current frame
-                    if (!attachInfo.mTreeObserver.hasOnPreDrawListeners()) {
-                        attachInfo.mViewRootImpl.dispatchFlushHardwareLayerUpdates();
-                    }
+                getHardwareLayer();
+                // TODO: We need a better way to handle this case
+                // If views have registered pre-draw listeners they need
+                // to be notified before we build the layer. Those listeners
+                // may however rely on other events to happen first so we
+                // cannot just invoke them here until they don't cancel the
+                // current frame
+                if (!attachInfo.mTreeObserver.hasOnPreDrawListeners()) {
+                    attachInfo.mViewRootImpl.dispatchFlushHardwareLayerUpdates();
                 }
                 break;
             case LAYER_TYPE_SOFTWARE:
@@ -13207,8 +13447,6 @@
             return null;
         }
 
-        if (!mAttachInfo.mHardwareRenderer.validate()) return null;
-
         final int width = mRight - mLeft;
         final int height = mBottom - mTop;
 
@@ -13218,16 +13456,10 @@
 
         if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0 || mHardwareLayer == null) {
             if (mHardwareLayer == null) {
-                mHardwareLayer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
-                        width, height, isOpaque());
+                mHardwareLayer = mAttachInfo.mHardwareRenderer.createDisplayListLayer(
+                        width, height);
                 mLocalDirtyRect.set(0, 0, width, height);
-            } else {
-                if (mHardwareLayer.getWidth() != width || mHardwareLayer.getHeight() != height) {
-                    if (mHardwareLayer.resize(width, height)) {
-                        mLocalDirtyRect.set(0, 0, width, height);
-                    }
-                }
-
+            } else if (mHardwareLayer.isValid()) {
                 // This should not be necessary but applications that change
                 // the parameters of their background drawable without calling
                 // this.setBackground(Drawable) can leave the view in a bad state
@@ -13235,23 +13467,21 @@
                 // not opaque.)
                 computeOpaqueFlags();
 
-                final boolean opaque = isOpaque();
-                if (mHardwareLayer.isValid() && mHardwareLayer.isOpaque() != opaque) {
-                    mHardwareLayer.setOpaque(opaque);
+                if (mHardwareLayer.prepare(width, height, isOpaque())) {
                     mLocalDirtyRect.set(0, 0, width, height);
                 }
             }
 
             // The layer is not valid if the underlying GPU resources cannot be allocated
+            mHardwareLayer.flushChanges();
             if (!mHardwareLayer.isValid()) {
                 return null;
             }
 
             mHardwareLayer.setLayerPaint(mLayerPaint);
-            mHardwareLayer.redrawLater(getHardwareLayerDisplayList(mHardwareLayer), mLocalDirtyRect);
-            ViewRootImpl viewRoot = getViewRootImpl();
-            if (viewRoot != null) viewRoot.pushHardwareLayerUpdate(mHardwareLayer);
-
+            RenderNode displayList = mHardwareLayer.startRecording();
+            updateDisplayListIfDirty(displayList, true);
+            mHardwareLayer.endRecording(mLocalDirtyRect);
             mLocalDirtyRect.setEmpty();
         }
 
@@ -13268,18 +13498,11 @@
      */
     boolean destroyLayer(boolean valid) {
         if (mHardwareLayer != null) {
-            AttachInfo info = mAttachInfo;
-            if (info != null && info.mHardwareRenderer != null &&
-                    info.mHardwareRenderer.isEnabled() &&
-                    (valid || info.mHardwareRenderer.validate())) {
+            mHardwareLayer.destroy();
+            mHardwareLayer = null;
 
-                info.mHardwareRenderer.cancelLayerUpdate(mHardwareLayer);
-                mHardwareLayer.destroy();
-                mHardwareLayer = null;
-
-                invalidate(true);
-                invalidateParentCaches();
-            }
+            invalidate(true);
+            invalidateParentCaches();
             return true;
         }
         return false;
@@ -13394,46 +13617,37 @@
     }
 
     /**
-     * @return The {@link HardwareRenderer} associated with that view or null if
-     *         hardware rendering is not supported or this view is not attached
-     *         to a window.
-     *
-     * @hide
-     */
-    public HardwareRenderer getHardwareRenderer() {
-        if (mAttachInfo != null) {
-            return mAttachInfo.mHardwareRenderer;
-        }
-        return null;
-    }
-
-    /**
      * Returns a DisplayList. If the incoming displayList is null, one will be created.
      * Otherwise, the same display list will be returned (after having been rendered into
      * along the way, depending on the invalidation state of the view).
      *
-     * @param displayList The previous version of this displayList, could be null.
+     * @param renderNode The previous version of this displayList, could be null.
      * @param isLayer Whether the requester of the display list is a layer. If so,
      * the view will avoid creating a layer inside the resulting display list.
      * @return A new or reused DisplayList object.
      */
-    private DisplayList getDisplayList(DisplayList displayList, boolean isLayer) {
+    private void updateDisplayListIfDirty(@NonNull RenderNode renderNode, boolean isLayer) {
+        if (renderNode == null) {
+            throw new IllegalArgumentException("RenderNode must not be null");
+        }
         if (!canHaveDisplayList()) {
-            return null;
+            // can't populate RenderNode, don't try
+            return;
         }
 
-        if (((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0 ||
-                displayList == null || !displayList.isValid() ||
-                (!isLayer && mRecreateDisplayList))) {
+        if ((mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == 0
+                || !renderNode.isValid()
+                || (!isLayer && mRecreateDisplayList)) {
             // Don't need to recreate the display list, just need to tell our
             // children to restore/recreate theirs
-            if (displayList != null && displayList.isValid() &&
-                    !isLayer && !mRecreateDisplayList) {
+            if (renderNode.isValid()
+                    && !isLayer
+                    && !mRecreateDisplayList) {
                 mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID;
                 mPrivateFlags &= ~PFLAG_DIRTY_MASK;
                 dispatchGetDisplayList();
 
-                return displayList;
+                return; // no work needed
             }
 
             if (!isLayer) {
@@ -13441,20 +13655,13 @@
                 // we copy in child display lists into ours in drawChild()
                 mRecreateDisplayList = true;
             }
-            if (displayList == null) {
-                displayList = mAttachInfo.mHardwareRenderer.createDisplayList(getClass().getName());
-                // If we're creating a new display list, make sure our parent gets invalidated
-                // since they will need to recreate their display list to account for this
-                // new child display list.
-                invalidateParentCaches();
-            }
 
             boolean caching = false;
             int width = mRight - mLeft;
             int height = mBottom - mTop;
             int layerType = getLayerType();
 
-            final HardwareCanvas canvas = displayList.start(width, height);
+            final HardwareCanvas canvas = renderNode.start(width, height);
 
             try {
                 if (!isLayer && layerType != LAYER_TYPE_NONE) {
@@ -13497,57 +13704,40 @@
                     }
                 }
             } finally {
-                displayList.end();
-                displayList.setCaching(caching);
+                renderNode.end(canvas);
+                renderNode.setCaching(caching);
                 if (isLayer) {
-                    displayList.setLeftTopRightBottom(0, 0, width, height);
+                    renderNode.setLeftTopRightBottom(0, 0, width, height);
                 } else {
-                    setDisplayListProperties(displayList);
+                    setDisplayListProperties(renderNode);
                 }
             }
         } else if (!isLayer) {
             mPrivateFlags |= PFLAG_DRAWN | PFLAG_DRAWING_CACHE_VALID;
             mPrivateFlags &= ~PFLAG_DIRTY_MASK;
         }
-
-        return displayList;
     }
 
     /**
-     * Get the DisplayList for the HardwareLayer
+     * Returns a RenderNode with View draw content recorded, which can be
+     * used to draw this view again without executing its draw method.
      *
-     * @param layer The HardwareLayer whose DisplayList we want
-     * @return A DisplayList fopr the specified HardwareLayer
-     */
-    private DisplayList getHardwareLayerDisplayList(HardwareLayer layer) {
-        DisplayList displayList = getDisplayList(layer.getDisplayList(), true);
-        layer.setDisplayList(displayList);
-        return displayList;
-    }
-
-
-    /**
-     * <p>Returns a display list that can be used to draw this view again
-     * without executing its draw method.</p>
-     *
-     * @return A DisplayList ready to replay, or null if caching is not enabled.
+     * @return A RenderNode ready to replay, or null if caching is not enabled.
      *
      * @hide
      */
-    public DisplayList getDisplayList() {
-        mDisplayList = getDisplayList(mDisplayList, false);
-        return mDisplayList;
-    }
-
-    private void clearDisplayList() {
-        if (mDisplayList != null) {
-            mDisplayList.clear();
-        }
+    public RenderNode getDisplayList() {
+        updateDisplayListIfDirty(mRenderNode, false);
+        return mRenderNode;
     }
 
     private void resetDisplayList() {
-        if (mDisplayList != null) {
-            mDisplayList.reset();
+        if (mRenderNode.isValid()) {
+            mRenderNode.destroyDisplayListData();
+        }
+
+        if (mBackgroundDisplayList != null && mBackgroundDisplayList.isValid()) {
+            mBackgroundDisplayList.destroyDisplayListData();
         }
     }
 
@@ -14137,17 +14327,14 @@
     }
 
     /**
-     * This method is called by getDisplayList() when a display list is created or re-rendered.
-     * It sets or resets the current value of all properties on that display list (resetting is
-     * necessary when a display list is being re-created, because we need to make sure that
-     * previously-set transform values
+     * This method is called by getDisplayList() when a display list is recorded for a View.
+     * It pushes any properties to the RenderNode that aren't managed by the RenderNode.
      */
-    void setDisplayListProperties(DisplayList displayList) {
-        if (displayList != null) {
-            displayList.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom);
-            displayList.setHasOverlappingRendering(hasOverlappingRendering());
+    void setDisplayListProperties(RenderNode renderNode) {
+        if (renderNode != null) {
+            renderNode.setHasOverlappingRendering(hasOverlappingRendering());
             if (mParent instanceof ViewGroup) {
-                displayList.setClipToBounds(
+                renderNode.setClipToBounds(
                         (((ViewGroup) mParent).mGroupFlags & ViewGroup.FLAG_CLIP_CHILDREN) != 0);
             }
             float alpha = 1;
@@ -14162,7 +14349,7 @@
                             alpha = t.getAlpha();
                         }
                         if ((transformType & Transformation.TYPE_MATRIX) != 0) {
-                            displayList.setMatrix(t.getMatrix());
+                            renderNode.setStaticMatrix(t.getMatrix());
                         }
                     }
                 }
@@ -14175,22 +14362,9 @@
                         alpha = 1;
                     }
                 }
-                displayList.setTransformationInfo(alpha,
-                        mTransformationInfo.mTranslationX, mTransformationInfo.mTranslationY,
-                        mTransformationInfo.mRotation, mTransformationInfo.mRotationX,
-                        mTransformationInfo.mRotationY, mTransformationInfo.mScaleX,
-                        mTransformationInfo.mScaleY);
-                if (mTransformationInfo.mCamera == null) {
-                    mTransformationInfo.mCamera = new Camera();
-                    mTransformationInfo.matrix3D = new Matrix();
-                }
-                displayList.setCameraDistance(mTransformationInfo.mCamera.getLocationZ());
-                if ((mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == PFLAG_PIVOT_EXPLICITLY_SET) {
-                    displayList.setPivotX(getPivotX());
-                    displayList.setPivotY(getPivotY());
-                }
+                renderNode.setAlpha(alpha);
             } else if (alpha < 1) {
-                displayList.setAlpha(alpha);
+                renderNode.setAlpha(alpha);
             }
         }
     }
@@ -14237,10 +14411,9 @@
             }
             transformToApply = parent.getChildTransformation();
         } else {
-            if ((mPrivateFlags3 & PFLAG3_VIEW_IS_ANIMATING_TRANSFORM) ==
-                    PFLAG3_VIEW_IS_ANIMATING_TRANSFORM && mDisplayList != null) {
+            if ((mPrivateFlags3 & PFLAG3_VIEW_IS_ANIMATING_TRANSFORM) != 0) {
                 // No longer animating: clear out old animation matrix
-                mDisplayList.setAnimationMatrix(null);
+                mRenderNode.setAnimationMatrix(null);
                 mPrivateFlags3 &= ~PFLAG3_VIEW_IS_ANIMATING_TRANSFORM;
             }
             if (!useDisplayListProperties &&
@@ -14278,7 +14451,7 @@
             mPrivateFlags &= ~PFLAG_INVALIDATED;
         }
 
-        DisplayList displayList = null;
+        RenderNode displayList = null;
         Bitmap cache = null;
         boolean hasDisplayList = false;
         if (caching) {
@@ -14570,24 +14743,7 @@
         int saveCount;
 
         if (!dirtyOpaque) {
-            final Drawable background = mBackground;
-            if (background != null) {
-                final int scrollX = mScrollX;
-                final int scrollY = mScrollY;
-
-                if (mBackgroundSizeChanged) {
-                    background.setBounds(0, 0,  mRight - mLeft, mBottom - mTop);
-                    mBackgroundSizeChanged = false;
-                }
-
-                if ((scrollX | scrollY) == 0) {
-                    background.draw(canvas);
-                } else {
-                    canvas.translate(scrollX, scrollY);
-                    background.draw(canvas);
-                    canvas.translate(-scrollX, -scrollY);
-                }
-            }
+            drawBackground(canvas);
         }
 
         // skip step 2 & 5 if possible (common case)
@@ -14754,6 +14910,88 @@
     }
 
     /**
+     * Draws the background onto the specified canvas.
+     *
+     * @param canvas Canvas on which to draw the background
+     */
+    private void drawBackground(Canvas canvas) {
+        final Drawable background = mBackground;
+        if (background == null) {
+            return;
+        }
+
+        if (mBackgroundSizeChanged) {
+            background.setBounds(0, 0,  mRight - mLeft, mBottom - mTop);
+            mBackgroundSizeChanged = false;
+            queryOutlineFromBackgroundIfUndefined();
+        }
+
+        // Attempt to use a display list if requested.
+        if (canvas.isHardwareAccelerated() && mAttachInfo != null
+                && mAttachInfo.mHardwareRenderer != null) {
+            mBackgroundDisplayList = getDrawableDisplayList(background, mBackgroundDisplayList);
+
+            final RenderNode displayList = mBackgroundDisplayList;
+            if (displayList != null && displayList.isValid()) {
+                setBackgroundDisplayListProperties(displayList);
+                ((HardwareCanvas) canvas).drawDisplayList(displayList);
+                return;
+            }
+        }
+
+        final int scrollX = mScrollX;
+        final int scrollY = mScrollY;
+        if ((scrollX | scrollY) == 0) {
+            background.draw(canvas);
+        } else {
+            canvas.translate(scrollX, scrollY);
+            background.draw(canvas);
+            canvas.translate(-scrollX, -scrollY);
+        }
+    }
+
+    /**
+     * Set up background drawable display list properties.
+     *
+     * @param displayList Valid display list for the background drawable
+     */
+    private void setBackgroundDisplayListProperties(RenderNode displayList) {
+        displayList.setTranslationX(mScrollX);
+        displayList.setTranslationY(mScrollY);
+    }
+
+    /**
+     * Creates a new display list or updates the existing display list for the
+     * specified Drawable.
+     *
+     * @param drawable Drawable for which to create a display list
+     * @param displayList Existing display list, or {@code null}
+     * @return A valid display list for the specified drawable
+     */
+    private RenderNode getDrawableDisplayList(Drawable drawable, RenderNode displayList) {
+        if (displayList == null) {
+            displayList = RenderNode.create(drawable.getClass().getName());
+        }
+
+        final Rect bounds = drawable.getBounds();
+        final int width = bounds.width();
+        final int height = bounds.height();
+        final HardwareCanvas canvas = displayList.start(width, height);
+        try {
+            drawable.draw(canvas);
+        } finally {
+            displayList.end(canvas);
+        }
+
+        // Set up drawable properties that are view-independent.
+        displayList.setLeftTopRightBottom(bounds.left, bounds.top, bounds.right, bounds.bottom);
+        displayList.setProjectBackwards(drawable.isProjected());
+        displayList.setProjectionReceiver(true);
+        displayList.setClipToBounds(false);
+        return displayList;
+    }
+
+    /**
      * Returns the overlay for this view, creating it if it does not yet exist.
      * Adding drawables to the overlay will cause them to be displayed whenever
      * the view itself is redrawn. Objects in the overlay should be actively
@@ -15022,20 +15260,12 @@
             mTop = top;
             mRight = right;
             mBottom = bottom;
-            if (mDisplayList != null) {
-                mDisplayList.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom);
-            }
+            mRenderNode.setLeftTopRightBottom(mLeft, mTop, mRight, mBottom);
 
             mPrivateFlags |= PFLAG_HAS_BOUNDS;
 
 
             if (sizeChanged) {
-                if ((mPrivateFlags & PFLAG_PIVOT_EXPLICITLY_SET) == 0) {
-                    // A change in dimension means an auto-centered pivot point changes, too
-                    if (mTransformationInfo != null) {
-                        mTransformationInfo.mMatrixDirty = true;
-                    }
-                }
                 sizeChange(newWidth, newHeight, oldWidth, oldHeight);
             }
 
@@ -15094,14 +15324,19 @@
      *
      * @param drawable the drawable to invalidate
      */
-    public void invalidateDrawable(Drawable drawable) {
+    @Override
+    public void invalidateDrawable(@NonNull Drawable drawable) {
         if (verifyDrawable(drawable)) {
-            final Rect dirty = drawable.getBounds();
+            final Rect dirty = drawable.getDirtyBounds();
             final int scrollX = mScrollX;
             final int scrollY = mScrollY;
 
             invalidate(dirty.left + scrollX, dirty.top + scrollY,
                     dirty.right + scrollX, dirty.bottom + scrollY);
+
+            if (drawable == mBackground) {
+                queryOutlineFromBackgroundIfUndefined();
+            }
         }
     }
 
@@ -15113,6 +15348,7 @@
      * @param when the time at which the action must occur. Uses the
      *        {@link SystemClock#uptimeMillis} timebase.
      */
+    @Override
     public void scheduleDrawable(Drawable who, Runnable what, long when) {
         if (verifyDrawable(who) && what != null) {
             final long delay = when - SystemClock.uptimeMillis();
@@ -15132,14 +15368,14 @@
      * @param who the recipient of the action
      * @param what the action to cancel
      */
+    @Override
     public void unscheduleDrawable(Drawable who, Runnable what) {
         if (verifyDrawable(who) && what != null) {
             if (mAttachInfo != null) {
                 mAttachInfo.mViewRootImpl.mChoreographer.removeCallbacks(
                         Choreographer.CALLBACK_ANIMATION, what, who);
-            } else {
-                ViewRootImpl.getRunQueue().removeCallbacks(what);
             }
+            ViewRootImpl.getRunQueue().removeCallbacks(what);
         }
     }
 
@@ -15202,7 +15438,7 @@
      *
      * @hide
      */
-    public void onResolveDrawables(int layoutDirection) {
+    public void onResolveDrawables(@ResolvedLayoutDir int layoutDirection) {
     }
 
     /**
@@ -15249,7 +15485,7 @@
      * @see Drawable#setState(int[])
      */
     protected void drawableStateChanged() {
-        Drawable d = mBackground;
+        final Drawable d = mBackground;
         if (d != null && d.isStateful()) {
             d.setState(getDrawableState());
         }
@@ -15434,7 +15670,7 @@
 
         Drawable d= null;
         if (resid != 0) {
-            d = mResources.getDrawable(resid);
+            d = mContext.getDrawable(resid);
         }
         setBackground(d);
 
@@ -15969,8 +16205,10 @@
             return false;
         }
 
-        transformMotionEventToGlobal(ev);
-        ev.offsetLocation(info.mWindowLeft, info.mWindowTop);
+        final Matrix m = info.mTmpMatrix;
+        m.set(Matrix.IDENTITY_MATRIX);
+        transformMatrixToGlobal(m);
+        ev.transform(m);
         return true;
     }
 
@@ -15988,54 +16226,60 @@
             return false;
         }
 
-        ev.offsetLocation(-info.mWindowLeft, -info.mWindowTop);
-        transformMotionEventToLocal(ev);
+        final Matrix m = info.mTmpMatrix;
+        m.set(Matrix.IDENTITY_MATRIX);
+        transformMatrixToLocal(m);
+        ev.transform(m);
         return true;
     }
 
     /**
-     * Recursive helper method that applies transformations in post-order.
+     * Modifies the input matrix such that it maps view-local coordinates to
+     * on-screen coordinates.
      *
-     * @param ev the on-screen motion event
+     * @param m input matrix to modify
      */
-    private void transformMotionEventToLocal(MotionEvent ev) {
+    void transformMatrixToGlobal(Matrix m) {
         final ViewParent parent = mParent;
         if (parent instanceof View) {
             final View vp = (View) parent;
-            vp.transformMotionEventToLocal(ev);
-            ev.offsetLocation(vp.mScrollX, vp.mScrollY);
+            vp.transformMatrixToGlobal(m);
+            m.postTranslate(-vp.mScrollX, -vp.mScrollY);
         } else if (parent instanceof ViewRootImpl) {
             final ViewRootImpl vr = (ViewRootImpl) parent;
-            ev.offsetLocation(0, vr.mCurScrollY);
+            vr.transformMatrixToGlobal(m);
+            m.postTranslate(0, -vr.mCurScrollY);
         }
 
-        ev.offsetLocation(-mLeft, -mTop);
+        m.postTranslate(mLeft, mTop);
 
         if (!hasIdentityMatrix()) {
-            ev.transform(getInverseMatrix());
+            m.postConcat(getMatrix());
         }
     }
 
     /**
-     * Recursive helper method that applies transformations in pre-order.
+     * Modifies the input matrix such that it maps on-screen coordinates to
+     * view-local coordinates.
      *
-     * @param ev the on-screen motion event
+     * @param m input matrix to modify
      */
-    private void transformMotionEventToGlobal(MotionEvent ev) {
-        if (!hasIdentityMatrix()) {
-            ev.transform(getMatrix());
-        }
-
-        ev.offsetLocation(mLeft, mTop);
-
+    void transformMatrixToLocal(Matrix m) {
         final ViewParent parent = mParent;
         if (parent instanceof View) {
             final View vp = (View) parent;
-            ev.offsetLocation(-vp.mScrollX, -vp.mScrollY);
-            vp.transformMotionEventToGlobal(ev);
+            vp.transformMatrixToLocal(m);
+            m.preTranslate(vp.mScrollX, vp.mScrollY);
         } else if (parent instanceof ViewRootImpl) {
             final ViewRootImpl vr = (ViewRootImpl) parent;
-            ev.offsetLocation(0, -vr.mCurScrollY);
+            vr.transformMatrixToLocal(m);
+            m.preTranslate(0, vr.mCurScrollY);
+        }
+
+        m.preTranslate(-mLeft, -mTop);
+
+        if (!hasIdentityMatrix()) {
+            m.preConcat(getInverseMatrix());
         }
     }
 
@@ -16318,7 +16562,8 @@
     /**
      * Returns this view's tag.
      *
-     * @return the Object stored in this view as a tag
+     * @return the Object stored in this view as a tag, or {@code null} if not
+     *         set
      *
      * @see #setTag(Object)
      * @see #getTag(int)
@@ -16348,7 +16593,8 @@
      *
      * @param key The key identifying the tag
      *
-     * @return the Object stored in this view as a tag
+     * @return the Object stored in this view as a tag, or {@code null} if not
+     *         set
      *
      * @see #setTag(int, Object)
      * @see #getTag()
@@ -17739,6 +17985,269 @@
     }
 
     /**
+     * Enable or disable nested scrolling for this view.
+     *
+     * <p>If this property is set to true the view will be permitted to initiate nested
+     * scrolling operations with a compatible parent view in the current hierarchy. If this
+     * view does not implement nested scrolling this will have no effect. Disabling nested scrolling
+     * while a nested scroll is in progress has the effect of {@link #stopNestedScroll() stopping}
+     * the nested scroll.</p>
+     *
+     * @param enabled true to enable nested scrolling, false to disable
+     *
+     * @see #isNestedScrollingEnabled()
+     */
+    public void setNestedScrollingEnabled(boolean enabled) {
+        if (enabled) {
+            mPrivateFlags3 |= PFLAG3_NESTED_SCROLLING_ENABLED;
+        } else {
+            stopNestedScroll();
+            mPrivateFlags3 &= ~PFLAG3_NESTED_SCROLLING_ENABLED;
+        }
+    }
+
+    /**
+     * Returns true if nested scrolling is enabled for this view.
+     *
+     * <p>If nested scrolling is enabled and this View class implementation supports it,
+     * this view will act as a nested scrolling child view when applicable, forwarding data
+     * about the scroll operation in progress to a compatible and cooperating nested scrolling
+     * parent.</p>
+     *
+     * @return true if nested scrolling is enabled
+     *
+     * @see #setNestedScrollingEnabled(boolean)
+     */
+    public boolean isNestedScrollingEnabled() {
+        return (mPrivateFlags3 & PFLAG3_NESTED_SCROLLING_ENABLED) ==
+                PFLAG3_NESTED_SCROLLING_ENABLED;
+    }
+
+    /**
+     * Begin a nestable scroll operation along the given axes.
+     *
+     * <p>A view starting a nested scroll promises to abide by the following contract:</p>
+     *
+     * <p>The view will call startNestedScroll upon initiating a scroll operation. In the case
+     * of a touch scroll this corresponds to the initial {@link MotionEvent#ACTION_DOWN}.
+     * In the case of touch scrolling the nested scroll will be terminated automatically in
+     * the same manner as {@link ViewParent#requestDisallowInterceptTouchEvent(boolean)}.
+     * In the event of programmatic scrolling the caller must explicitly call
+     * {@link #stopNestedScroll()} to indicate the end of the nested scroll.</p>
+     *
+     * <p>If <code>startNestedScroll</code> returns true, a cooperative parent was found.
+     * If it returns false the caller may ignore the rest of this contract until the next scroll.
+     * Calling startNestedScroll while a nested scroll is already in progress will return true.</p>
+     *
+     * <p>At each incremental step of the scroll the caller should invoke
+     * {@link #dispatchNestedPreScroll(int, int, int[], int[]) dispatchNestedPreScroll}
+     * once it has calculated the requested scrolling delta. If it returns true the nested scrolling
+     * parent at least partially consumed the scroll and the caller should adjust the amount it
+     * scrolls by.</p>
+     *
+     * <p>After applying the remainder of the scroll delta the caller should invoke
+     * {@link #dispatchNestedScroll(int, int, int, int, int[]) dispatchNestedScroll}, passing
+     * both the delta consumed and the delta unconsumed. A nested scrolling parent may treat
+     * these values differently. See {@link ViewParent#onNestedScroll(View, int, int, int, int)}.
+     * </p>
+     *
+     * @param axes Flags consisting of a combination of {@link #SCROLL_AXIS_HORIZONTAL} and/or
+     *             {@link #SCROLL_AXIS_VERTICAL}.
+     * @return true if a cooperative parent was found and nested scrolling has been enabled for
+     *         the current gesture.
+     *
+     * @see #stopNestedScroll()
+     * @see #dispatchNestedPreScroll(int, int, int[], int[])
+     * @see #dispatchNestedScroll(int, int, int, int, int[])
+     */
+    public boolean startNestedScroll(int axes) {
+        if (hasNestedScrollingParent()) {
+            // Already in progress
+            return true;
+        }
+        if (isNestedScrollingEnabled()) {
+            ViewParent p = getParent();
+            View child = this;
+            while (p != null) {
+                try {
+                    if (p.onStartNestedScroll(child, this, axes)) {
+                        mNestedScrollingParent = p;
+                        p.onNestedScrollAccepted(child, this, axes);
+                        return true;
+                    }
+                } catch (AbstractMethodError e) {
+                    Log.e(VIEW_LOG_TAG, "ViewParent " + p + " does not implement interface " +
+                            "method onStartNestedScroll", e);
+                    // Allow the search upward to continue
+                }
+                if (p instanceof View) {
+                    child = (View) p;
+                }
+                p = p.getParent();
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Stop a nested scroll in progress.
+     *
+     * <p>Calling this method when a nested scroll is not currently in progress is harmless.</p>
+     *
+     * @see #startNestedScroll(int)
+     */
+    public void stopNestedScroll() {
+        if (mNestedScrollingParent != null) {
+            mNestedScrollingParent.onStopNestedScroll(this);
+            mNestedScrollingParent = null;
+        }
+    }
+
+    /**
+     * Returns true if this view has a nested scrolling parent.
+     *
+     * <p>The presence of a nested scrolling parent indicates that this view has initiated
+     * a nested scroll and it was accepted by an ancestor view further up the view hierarchy.</p>
+     *
+     * @return whether this view has a nested scrolling parent
+     */
+    public boolean hasNestedScrollingParent() {
+        return mNestedScrollingParent != null;
+    }
+
+    /**
+     * Dispatch one step of a nested scroll in progress.
+     *
+     * <p>Implementations of views that support nested scrolling should call this to report
+     * info about a scroll in progress to the current nested scrolling parent. If a nested scroll
+     * is not currently in progress or nested scrolling is not
+     * {@link #isNestedScrollingEnabled() enabled} for this view this method does nothing.</p>
+     *
+     * <p>Compatible View implementations should also call
+     * {@link #dispatchNestedPreScroll(int, int, int[], int[]) dispatchNestedPreScroll} before
+     * consuming a component of the scroll event themselves.</p>
+     *
+     * @param dxConsumed Horizontal distance in pixels consumed by this view during this scroll step
+     * @param dyConsumed Vertical distance in pixels consumed by this view during this scroll step
+     * @param dxUnconsumed Horizontal scroll distance in pixels not consumed by this view
+     * @param dyUnconsumed Horizontal scroll distance in pixels not consumed by this view
+     * @param offsetInWindow Optional. If not null, on return this will contain the offset
+     *                       in local view coordinates of this view from before this operation
+     *                       to after it completes. View implementations may use this to adjust
+     *                       expected input coordinate tracking.
+     * @return true if the event was dispatched, false if it could not be dispatched.
+     * @see #dispatchNestedPreScroll(int, int, int[], int[])
+     */
+    public boolean dispatchNestedScroll(int dxConsumed, int dyConsumed,
+            int dxUnconsumed, int dyUnconsumed, int[] offsetInWindow) {
+        if (isNestedScrollingEnabled() && mNestedScrollingParent != null) {
+            if (dxConsumed != 0 || dyConsumed != 0 || dxUnconsumed != 0 || dyUnconsumed != 0) {
+                int startX = 0;
+                int startY = 0;
+                if (offsetInWindow != null) {
+                    getLocationInWindow(offsetInWindow);
+                    startX = offsetInWindow[0];
+                    startY = offsetInWindow[1];
+                }
+
+                mNestedScrollingParent.onNestedScroll(this, dxConsumed, dyConsumed,
+                        dxUnconsumed, dyUnconsumed);
+
+                if (offsetInWindow != null) {
+                    getLocationInWindow(offsetInWindow);
+                    offsetInWindow[0] -= startX;
+                    offsetInWindow[1] -= startY;
+                }
+                return true;
+            } else if (offsetInWindow != null) {
+                // No motion, no dispatch. Keep offsetInWindow up to date.
+                offsetInWindow[0] = 0;
+                offsetInWindow[1] = 0;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Dispatch one step of a nested scroll in progress before this view consumes any portion of it.
+     *
+     * <p>Nested pre-scroll events are to nested scroll events what touch intercept is to touch.
+     * <code>dispatchNestedPreScroll</code> offers an opportunity for the parent view in a nested
+     * scrolling operation to consume some or all of the scroll operation before the child view
+     * consumes it.</p>
+     *
+     * @param dx Horizontal scroll distance in pixels
+     * @param dy Vertical scroll distance in pixels
+     * @param consumed Output. If not null, consumed[0] will contain the consumed component of dx
+     *                 and consumed[1] the consumed dy.
+     * @param offsetInWindow Optional. If not null, on return this will contain the offset
+     *                       in local view coordinates of this view from before this operation
+     *                       to after it completes. View implementations may use this to adjust
+     *                       expected input coordinate tracking.
+     * @return true if the parent consumed some or all of the scroll delta
+     * @see #dispatchNestedScroll(int, int, int, int, int[])
+     */
+    public boolean dispatchNestedPreScroll(int dx, int dy, int[] consumed, int[] offsetInWindow) {
+        if (isNestedScrollingEnabled() && mNestedScrollingParent != null) {
+            if (dx != 0 || dy != 0) {
+                int startX = 0;
+                int startY = 0;
+                if (offsetInWindow != null) {
+                    getLocationInWindow(offsetInWindow);
+                    startX = offsetInWindow[0];
+                    startY = offsetInWindow[1];
+                }
+
+                if (consumed == null) {
+                    if (mTempNestedScrollConsumed == null) {
+                        mTempNestedScrollConsumed = new int[2];
+                    }
+                    consumed = mTempNestedScrollConsumed;
+                }
+                consumed[0] = 0;
+                consumed[1] = 0;
+                mNestedScrollingParent.onNestedPreScroll(this, dx, dy, consumed);
+
+                if (offsetInWindow != null) {
+                    getLocationInWindow(offsetInWindow);
+                    offsetInWindow[0] -= startX;
+                    offsetInWindow[1] -= startY;
+                }
+                return consumed[0] != 0 || consumed[1] != 0;
+            } else if (offsetInWindow != null) {
+                offsetInWindow[0] = 0;
+                offsetInWindow[1] = 0;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Dispatch a fling to a nested scrolling parent.
+     *
+     * <p>This method should be used to indicate that a nested scrolling child has detected
+     * suitable conditions for a fling. Generally this means that a touch scroll has ended with a
+     * {@link VelocityTracker velocity} in the direction of scrolling that meets or exceeds
+     * the {@link ViewConfiguration#getScaledMinimumFlingVelocity() minimum fling velocity}
+     * along a scrollable axis.</p>
+     *
+     * <p>If a nested scrolling child view would normally fling but it is at the edge of
+     * its own content, it can use this method to delegate the fling to its nested scrolling
+     * parent instead. The parent may optionally consume the fling or observe a child fling.</p>
+     *
+     * @param velocityX Horizontal fling velocity in pixels per second
+     * @param velocityY Vertical fling velocity in pixels per second
+     * @param consumed true if the child consumed the fling, false otherwise
+     * @return true if the nested scrolling parent consumed or otherwise reacted to the fling
+     */
+    public boolean dispatchNestedFling(float velocityX, float velocityY, boolean consumed) {
+        if (isNestedScrollingEnabled() && mNestedScrollingParent != null) {
+            return mNestedScrollingParent.onNestedFling(this, velocityX, velocityY, consumed);
+        }
+        return false;
+    }
+
+    /**
      * Gets a scale factor that determines the distance the view should scroll
      * vertically in response to {@link MotionEvent#ACTION_SCROLL}.
      * @return The vertical scroll scale factor.
@@ -18020,6 +18529,7 @@
             @ViewDebug.IntToString(from = TEXT_ALIGNMENT_VIEW_START, to = "VIEW_START"),
             @ViewDebug.IntToString(from = TEXT_ALIGNMENT_VIEW_END, to = "VIEW_END")
     })
+    @TextAlignment
     public int getRawTextAlignment() {
         return (mPrivateFlags2 & PFLAG2_TEXT_ALIGNMENT_MASK) >> PFLAG2_TEXT_ALIGNMENT_MASK_SHIFT;
     }
@@ -18043,7 +18553,7 @@
      *
      * @attr ref android.R.styleable#View_textAlignment
      */
-    public void setTextAlignment(int textAlignment) {
+    public void setTextAlignment(@TextAlignment int textAlignment) {
         if (textAlignment != getRawTextAlignment()) {
             // Reset the current and resolved text alignment
             mPrivateFlags2 &= ~PFLAG2_TEXT_ALIGNMENT_MASK;
@@ -18084,6 +18594,7 @@
             @ViewDebug.IntToString(from = TEXT_ALIGNMENT_VIEW_START, to = "VIEW_START"),
             @ViewDebug.IntToString(from = TEXT_ALIGNMENT_VIEW_END, to = "VIEW_END")
     })
+    @TextAlignment
     public int getTextAlignment() {
         return (mPrivateFlags2 & PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK) >>
                 PFLAG2_TEXT_ALIGNMENT_RESOLVED_MASK_SHIFT;
@@ -18246,6 +18757,33 @@
         }
     }
 
+    /**
+     * Gets the Views in the hierarchy affected by entering and exiting Activity Scene transitions.
+     * @param transitioningViews This View will be added to transitioningViews if it is VISIBLE and
+     *                           a normal View or a ViewGroup with
+     *                           {@link android.view.ViewGroup#isTransitionGroup()} true.
+     * @hide
+     */
+    public void captureTransitioningViews(List<View> transitioningViews) {
+        if (getVisibility() == View.VISIBLE) {
+            transitioningViews.add(this);
+        }
+    }
+
+    /**
+     * Adds all Views that have {@link #getSharedElementName()} non-null to sharedElements.
+     * @param sharedElements Will contain all Views in the hierarchy having a shared element name.
+     * @hide
+     */
+    public void findSharedElements(Map<String, View> sharedElements) {
+        if (getVisibility() == VISIBLE) {
+            String sharedElementName = getSharedElementName();
+            if (sharedElementName != null) {
+                sharedElements.put(sharedElementName, this);
+            }
+        }
+    }
+
     //
     // Properties
     //
@@ -18298,6 +18836,22 @@
     };
 
     /**
+     * A Property wrapper around the <code>translationZ</code> functionality handled by the
+     * {@link View#setTranslationZ(float)} and {@link View#getTranslationZ()} methods.
+     */
+    public static final Property<View, Float> TRANSLATION_Z = new FloatProperty<View>("translationZ") {
+        @Override
+        public void setValue(View object, float value) {
+            object.setTranslationZ(value);
+        }
+
+        @Override
+        public Float get(View object) {
+            return object.getTranslationZ();
+        }
+    };
+
+    /**
      * A Property wrapper around the <code>x</code> functionality handled by the
      * {@link View#setX(float)} and {@link View#getX()} methods.
      */
@@ -18330,6 +18884,22 @@
     };
 
     /**
+     * A Property wrapper around the <code>z</code> functionality handled by the
+     * {@link View#setZ(float)} and {@link View#getZ()} methods.
+     */
+    public static final Property<View, Float> Z = new FloatProperty<View>("z") {
+        @Override
+        public void setValue(View object, float value) {
+            object.setZ(value);
+        }
+
+        @Override
+        public Float get(View object) {
+            return object.getZ();
+        }
+    };
+
+    /**
      * A Property wrapper around the <code>rotation</code> functionality handled by the
      * {@link View#setRotation(float)} and {@link View#getRotation()} methods.
      */
@@ -18552,10 +19122,10 @@
         }
     }
 
-    class CheckForLongPress implements Runnable {
-
+    private final class CheckForLongPress implements Runnable {
         private int mOriginalWindowAttachCount;
 
+        @Override
         public void run() {
             if (isPressed() && (mParent != null)
                     && mOriginalWindowAttachCount == mWindowAttachCount) {
@@ -18571,14 +19141,20 @@
     }
 
     private final class CheckForTap implements Runnable {
+        public float x;
+        public float y;
+
+        @Override
         public void run() {
             mPrivateFlags &= ~PFLAG_PREPRESSED;
+            setHotspot(R.attr.state_pressed, x, y);
             setPressed(true);
             checkForLongClick(ViewConfiguration.getTapTimeout());
         }
     }
 
     private final class PerformClick implements Runnable {
+        @Override
         public void run() {
             performClick();
         }
@@ -18603,6 +19179,35 @@
     }
 
     /**
+     * Specifies that the shared name of the View to be shared with another Activity.
+     * When transitioning between Activities, the name links a UI element in the starting
+     * Activity to UI element in the called Activity. Names should be unique in the
+     * View hierarchy.
+     *
+     * @param sharedElementName The cross-Activity View identifier. The called Activity will use
+     *                 the name to match the location with a View in its layout.
+     * @see android.app.ActivityOptions#makeSceneTransitionAnimation(android.os.Bundle)
+     */
+    public void setSharedElementName(String sharedElementName) {
+        setTagInternal(com.android.internal.R.id.shared_element_name, sharedElementName);
+    }
+
+    /**
+     * Returns the shared name of the View to be shared with another Activity.
+     * When transitioning between Activities, the name links a UI element in the starting
+     * Activity to UI element in the called Activity. Names should be unique in the
+     * View hierarchy.
+     *
+     * <p>This returns null if the View is not a shared element or the name if it is.</p>
+     *
+     * @return The name used for this View for cross-Activity transitions or null if
+     * this View has not been identified as shared.
+     */
+    public String getSharedElementName() {
+        return (String) getTag(com.android.internal.R.id.shared_element_name);
+    }
+
+    /**
      * Interface definition for a callback to be invoked when a hardware key event is
      * dispatched to this view. The callback will be invoked before the key event is
      * given to the view. This is only useful for hardware keyboards; a software input
@@ -18828,7 +19433,9 @@
     }
 
     private final class UnsetPressedState implements Runnable {
+        @Override
         public void run() {
+            clearHotspot(R.attr.state_pressed);
             setPressed(false);
         }
     }
@@ -18921,8 +19528,6 @@
 
         final Callbacks mRootCallbacks;
 
-        HardwareCanvas mHardwareCanvas;
-
         IWindowId mIWindowId;
         WindowId mWindowId;
 
@@ -18932,7 +19537,6 @@
         View mRootView;
 
         IBinder mPanelParentWindowToken;
-        Surface mSurface;
 
         boolean mHardwareAccelerated;
         boolean mHardwareAccelerationRequested;
@@ -19177,7 +19781,7 @@
         /**
          * The id of the window for accessibility purposes.
          */
-        int mAccessibilityWindowId = View.NO_ID;
+        int mAccessibilityWindowId = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
 
         /**
          * Flags related to accessibility processing.
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 4b8541e..20ef429 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -80,7 +80,7 @@
      * is a tap or a scroll. If the user does not move within this interval, it is
      * considered to be a tap.
      */
-    private static final int TAP_TIMEOUT = 180;
+    private static final int TAP_TIMEOUT = 100;
 
     /**
      * Defines the duration in milliseconds we will wait to see if a touch event
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index f346ee8..43bc0b6 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -38,7 +38,6 @@
 import android.util.Pools.SynchronizedPool;
 import android.util.SparseArray;
 import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
@@ -51,6 +50,8 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
 
 import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
 
@@ -355,6 +356,10 @@
      */
     private static final int FLAG_LAYOUT_MODE_WAS_EXPLICITLY_SET = 0x800000;
 
+    static final int FLAG_IS_TRANSITION_GROUP = 0x1000000;
+
+    static final int FLAG_IS_TRANSITION_GROUP_SET = 0x2000000;
+
     /**
      * Indicates which types of drawing caches are to be kept in memory.
      * This field should be made private, so it is hidden from the SDK.
@@ -455,21 +460,29 @@
     @ViewDebug.ExportedProperty(category = "layout")
     private int mChildCountWithTransientState = 0;
 
+    /**
+     * Currently registered axes for nested scrolling. Flag set consisting of
+     * {@link #SCROLL_AXIS_HORIZONTAL} {@link #SCROLL_AXIS_VERTICAL} or {@link #SCROLL_AXIS_NONE}
+     * for null.
+     */
+    private int mNestedScrollAxes;
+
     public ViewGroup(Context context) {
-        super(context);
-        initViewGroup();
+        this(context, null);
     }
 
     public ViewGroup(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        initViewGroup();
-        initFromAttributes(context, attrs, 0);
+        this(context, attrs, 0);
     }
 
-    public ViewGroup(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ViewGroup(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ViewGroup(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         initViewGroup();
-        initFromAttributes(context, attrs, defStyle);
+        initFromAttributes(context, attrs, defStyleAttr, defStyleRes);
     }
 
     private boolean debugDraw() {
@@ -499,8 +512,10 @@
         mPersistentDrawingCache = PERSISTENT_SCROLLING_CACHE;
     }
 
-    private void initFromAttributes(Context context, AttributeSet attrs, int defStyle) {
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ViewGroup, defStyle, 0);
+    private void initFromAttributes(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ViewGroup, defStyleAttr,
+                defStyleRes);
 
         final int N = a.getIndexCount();
         for (int i = 0; i < N; i++) {
@@ -545,6 +560,9 @@
                 case R.styleable.ViewGroup_layoutMode:
                     setLayoutMode(a.getInt(attr, LAYOUT_MODE_UNDEFINED));
                     break;
+                case R.styleable.ViewGroup_transitionGroup:
+                    setTransitionGroup(a.getBoolean(attr, false));
+                    break;
             }
         }
 
@@ -597,7 +615,7 @@
     @Override
     void handleFocusGainInternal(int direction, Rect previouslyFocusedRect) {
         if (mFocused != null) {
-            mFocused.unFocus();
+            mFocused.unFocus(this);
             mFocused = null;
         }
         super.handleFocusGainInternal(direction, previouslyFocusedRect);
@@ -615,12 +633,12 @@
         }
 
         // Unfocus us, if necessary
-        super.unFocus();
+        super.unFocus(focused);
 
         // We had a previous notion of who had focus. Clear it.
         if (mFocused != child) {
             if (mFocused != null) {
-                mFocused.unFocus();
+                mFocused.unFocus(focused);
             }
 
             mFocused = child;
@@ -811,14 +829,14 @@
      * {@inheritDoc}
      */
     @Override
-    void unFocus() {
+    void unFocus(View focused) {
         if (DBG) {
             System.out.println(this + " unFocus()");
         }
         if (mFocused == null) {
-            super.unFocus();
+            super.unFocus(focused);
         } else {
-            mFocused.unFocus();
+            mFocused.unFocus(focused);
             mFocused = null;
         }
     }
@@ -2000,6 +2018,7 @@
         clearTouchTargets();
         resetCancelNextUpFlag(this);
         mGroupFlags &= ~FLAG_DISALLOW_INTERCEPT;
+        mNestedScrollAxes = SCROLL_AXIS_NONE;
     }
 
     /**
@@ -2277,6 +2296,41 @@
     }
 
     /**
+     * Returns true if this ViewGroup should be considered as a single entity for removal
+     * when executing an Activity transition. If this is false, child elements will move
+     * individually during the transition.
+     * @return True if the ViewGroup should be acted on together during an Activity transition.
+     * The default value is false when the background is null and true when the background
+     * is not null or if {@link #getSharedElementName()} is not null.
+     */
+    public boolean isTransitionGroup() {
+        if ((mGroupFlags & FLAG_IS_TRANSITION_GROUP_SET) != 0) {
+            return ((mGroupFlags & FLAG_IS_TRANSITION_GROUP) != 0);
+        } else {
+            return getBackground() != null || getSharedElementName() != null;
+        }
+    }
+
+    /**
+     * Changes whether or not this ViewGroup should be treated as a single entity during
+     * Activity Transitions.
+     * @param isTransitionGroup Whether or not the ViewGroup should be treated as a unit
+     *                          in Activity transitions. If false, the ViewGroup won't transition,
+     *                          only its children. If true, the entire ViewGroup will transition
+     *                          together.
+     * @see android.app.ActivityOptions#makeSceneTransitionAnimation(android.view.Window,
+     * android.app.ActivityOptions.ActivityTransitionListener)
+     */
+    public void setTransitionGroup(boolean isTransitionGroup) {
+        mGroupFlags |= FLAG_IS_TRANSITION_GROUP_SET;
+        if (isTransitionGroup) {
+            mGroupFlags |= FLAG_IS_TRANSITION_GROUP;
+        } else {
+            mGroupFlags &= ~FLAG_IS_TRANSITION_GROUP;
+        }
+    }
+
+    /**
      * {@inheritDoc}
      */
     public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) {
@@ -2509,13 +2563,13 @@
     void onInitializeAccessibilityNodeInfoInternal(AccessibilityNodeInfo info) {
         super.onInitializeAccessibilityNodeInfoInternal(info);
         if (mAttachInfo != null) {
-            ArrayList<View> childrenForAccessibility = mAttachInfo.mTempArrayList;
+            final ArrayList<View> childrenForAccessibility = mAttachInfo.mTempArrayList;
             childrenForAccessibility.clear();
             addChildrenForAccessibility(childrenForAccessibility);
             final int childrenForAccessibilityCount = childrenForAccessibility.size();
             for (int i = 0; i < childrenForAccessibilityCount; i++) {
-                View child = childrenForAccessibility.get(i);
-                info.addChild(child);
+                final View child = childrenForAccessibility.get(i);
+                info.addChildUnchecked(child);
             }
             childrenForAccessibility.clear();
         }
@@ -2583,6 +2637,7 @@
         for (int i = 0; i < count; i++) {
             children[i].dispatchDetachedFromWindow();
         }
+        clearDisappearingChildren();
         super.dispatchDetachedFromWindow();
     }
 
@@ -2915,14 +2970,24 @@
             }
         }
 
-        int saveCount = 0;
+        int clipSaveCount = 0;
         final boolean clipToPadding = (flags & CLIP_TO_PADDING_MASK) == CLIP_TO_PADDING_MASK;
+        boolean hasClipBounds = mClipBounds != null && !sIgnoreClipBoundsForChildren;
+        boolean clippingNeeded = clipToPadding || hasClipBounds;
+
+        if (clippingNeeded) {
+            clipSaveCount = canvas.save();
+        }
+
         if (clipToPadding) {
-            saveCount = canvas.save();
             canvas.clipRect(mScrollX + mPaddingLeft, mScrollY + mPaddingTop,
                     mScrollX + mRight - mLeft - mPaddingRight,
                     mScrollY + mBottom - mTop - mPaddingBottom);
+        }
 
+        if (hasClipBounds) {
+            canvas.clipRect(mClipBounds.left, mClipBounds.top, mClipBounds.right,
+                    mClipBounds.bottom);
         }
 
         // We will draw our child's animation, let's reset the flag
@@ -2963,8 +3028,8 @@
             onDebugDraw(canvas);
         }
 
-        if (clipToPadding) {
-            canvas.restoreToCount(saveCount);
+        if (clippingNeeded) {
+            canvas.restoreToCount(clipSaveCount);
         }
 
         // mGroupFlags might have been updated by drawChild()
@@ -3103,7 +3168,7 @@
     }
 
     /**
-     * Returns whether ths group's children are clipped to their bounds before drawing.
+     * Returns whether this group's children are clipped to their bounds before drawing.
      * The default value is true.
      * @see #setClipChildren(boolean)
      *
@@ -3128,8 +3193,8 @@
             setBooleanFlag(FLAG_CLIP_CHILDREN, clipChildren);
             for (int i = 0; i < mChildrenCount; ++i) {
                 View child = getChildAt(i);
-                if (child.mDisplayList != null) {
-                    child.mDisplayList.setClipToBounds(clipChildren);
+                if (child.mRenderNode != null) {
+                    child.mRenderNode.setClipToBounds(clipChildren);
                 }
             }
         }
@@ -3618,7 +3683,7 @@
             childHasTransientStateChanged(child, true);
         }
 
-        if (child.isImportantForAccessibility() && child.getVisibility() != View.GONE) {
+        if (child.getVisibility() != View.GONE) {
             notifySubtreeAccessibilityStateChangedIfNeeded();
         }
     }
@@ -3826,7 +3891,7 @@
 
         boolean clearChildFocus = false;
         if (view == mFocused) {
-            view.unFocus();
+            view.unFocus(null);
             clearChildFocus = true;
         }
 
@@ -3861,7 +3926,7 @@
 
         onViewRemoved(view);
 
-        if (view.isImportantForAccessibility() && view.getVisibility() != View.GONE) {
+        if (view.getVisibility() != View.GONE) {
             notifySubtreeAccessibilityStateChangedIfNeeded();
         }
     }
@@ -3921,7 +3986,7 @@
             }
 
             if (view == focused) {
-                view.unFocus();
+                view.unFocus(null);
                 clearChildFocus = true;
             }
 
@@ -4008,7 +4073,7 @@
             }
 
             if (view == focused) {
-                view.unFocus();
+                view.unFocus(null);
                 clearChildFocus = true;
             }
 
@@ -4404,7 +4469,7 @@
      *
      * @hide
      */
-    public void invalidateChildFast(View child, final Rect dirty) {
+    public void damageChild(View child, final Rect dirty) {
         ViewParent parent = this;
 
         final AttachInfo attachInfo = mAttachInfo;
@@ -4427,7 +4492,7 @@
                         parentVG.invalidate();
                         parent = null;
                     } else {
-                        parent = parentVG.invalidateChildInParentFast(left, top, dirty);
+                        parent = parentVG.damageChildInParent(left, top, dirty);
                         left = parentVG.mLeft;
                         top = parentVG.mTop;
                     }
@@ -4449,9 +4514,9 @@
      *
      * @hide
      */
-    protected ViewParent invalidateChildInParentFast(int left, int top, final Rect dirty) {
-        if ((mPrivateFlags & PFLAG_DRAWN) == PFLAG_DRAWN ||
-                (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) == PFLAG_DRAWING_CACHE_VALID) {
+    protected ViewParent damageChildInParent(int left, int top, final Rect dirty) {
+        if ((mPrivateFlags & PFLAG_DRAWN) != 0
+                || (mPrivateFlags & PFLAG_DRAWING_CACHE_VALID) != 0) {
             dirty.offset(left - mScrollX, top - mScrollY);
             if ((mGroupFlags & FLAG_CLIP_CHILDREN) == 0) {
                 dirty.union(0, 0, mRight - mLeft, mBottom - mTop);
@@ -4564,9 +4629,9 @@
             final View v = children[i];
             v.mTop += offset;
             v.mBottom += offset;
-            if (v.mDisplayList != null) {
+            if (v.mRenderNode != null) {
                 invalidate = true;
-                v.mDisplayList.offsetTopAndBottom(offset);
+                v.mRenderNode.offsetTopAndBottom(offset);
             }
         }
 
@@ -5217,8 +5282,17 @@
      * this if you don't want animations for exiting views to stack up.
      */
     public void clearDisappearingChildren() {
-        if (mDisappearingChildren != null) {
-            mDisappearingChildren.clear();
+        final ArrayList<View> disappearingChildren = mDisappearingChildren;
+        if (disappearingChildren != null) {
+            final int count = disappearingChildren.size();
+            for (int i = 0; i < count; i++) {
+                final View view = disappearingChildren.get(i);
+                if (view.mAttachInfo != null) {
+                    view.dispatchDetachedFromWindow();
+                }
+                view.clearAnimation();
+            }
+            disappearingChildren.clear();
             invalidate();
         }
     }
@@ -5790,10 +5864,109 @@
         return true;
     }
 
+    /**
+     * @inheritDoc
+     */
+    @Override
+    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
+        return false;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    @Override
+    public void onNestedScrollAccepted(View child, View target, int axes) {
+        mNestedScrollAxes = axes;
+    }
+
+    /**
+     * @inheritDoc
+     *
+     * <p>The default implementation of onStopNestedScroll calls
+     * {@link #stopNestedScroll()} to halt any recursive nested scrolling in progress.</p>
+     */
+    @Override
+    public void onStopNestedScroll(View child) {
+        // Stop any recursive nested scrolling.
+        stopNestedScroll();
+    }
+
+    /**
+     * @inheritDoc
+     */
+    @Override
+    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,
+            int dxUnconsumed, int dyUnconsumed) {
+        // Do nothing
+    }
+
+    /**
+     * @inheritDoc
+     */
+    @Override
+    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {
+        // Do nothing
+    }
+
+    /**
+     * @inheritDoc
+     */
+    @Override
+    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) {
+        return false;
+    }
+
+    /**
+     * Return the current axes of nested scrolling for this ViewGroup.
+     *
+     * <p>A ViewGroup returning something other than {@link #SCROLL_AXIS_NONE} is currently
+     * acting as a nested scrolling parent for one or more descendant views in the hierarchy.</p>
+     *
+     * @return Flags indicating the current axes of nested scrolling
+     * @see #SCROLL_AXIS_HORIZONTAL
+     * @see #SCROLL_AXIS_VERTICAL
+     * @see #SCROLL_AXIS_NONE
+     */
+    public int getNestedScrollAxes() {
+        return mNestedScrollAxes;
+    }
+
     /** @hide */
     protected void onSetLayoutParams(View child, LayoutParams layoutParams) {
     }
 
+    /** @hide */
+    @Override
+    public void captureTransitioningViews(List<View> transitioningViews) {
+        if (getVisibility() != View.VISIBLE) {
+            return;
+        }
+        if (isTransitionGroup()) {
+            transitioningViews.add(this);
+        } else {
+            int count = getChildCount();
+            for (int i = 0; i < count; i++) {
+                View child = getChildAt(i);
+                child.captureTransitioningViews(transitioningViews);
+            }
+        }
+    }
+
+    /** @hide */
+    @Override
+    public void findSharedElements(Map<String, View> sharedElements) {
+        if (getVisibility() != VISIBLE) {
+            return;
+        }
+        super.findSharedElements(sharedElements);
+        int count = getChildCount();
+        for (int i = 0; i < count; i++) {
+            View child = getChildAt(i);
+            child.findSharedElements(sharedElements);
+        }
+    }
+
     /**
      * LayoutParams are used by views to tell their parents how they want to be
      * laid out. See
diff --git a/core/java/android/view/ViewOverlay.java b/core/java/android/view/ViewOverlay.java
index 975931a..0cf9ddd 100644
--- a/core/java/android/view/ViewOverlay.java
+++ b/core/java/android/view/ViewOverlay.java
@@ -155,6 +155,11 @@
             }
         }
 
+        @Override
+        protected boolean verifyDrawable(Drawable who) {
+            return super.verifyDrawable(who) || (mDrawables != null && mDrawables.contains(who));
+        }
+
         public void add(View child) {
             if (child.getParent() instanceof ViewGroup) {
                 ViewGroup parent = (ViewGroup) child.getParent();
@@ -285,7 +290,11 @@
             }
         }
 
-        public void invalidateChildFast(View child, final Rect dirty) {
+        /**
+         * @hide
+         */
+        @Override
+        public void damageChild(View child, final Rect dirty) {
             if (mHostView != null) {
                 // Note: This is not a "fast" invalidation. Would be nice to instead invalidate
                 // using DisplayList properties and a dirty rect instead of causing a real
@@ -304,9 +313,9 @@
          * @hide
          */
         @Override
-        protected ViewParent invalidateChildInParentFast(int left, int top, Rect dirty) {
+        protected ViewParent damageChildInParent(int left, int top, Rect dirty) {
             if (mHostView instanceof ViewGroup) {
-                return ((ViewGroup) mHostView).invalidateChildInParentFast(left, top, dirty);
+                return ((ViewGroup) mHostView).damageChildInParent(left, top, dirty);
             }
             return null;
         }
diff --git a/core/java/android/view/ViewParent.java b/core/java/android/view/ViewParent.java
index 01376934..588b9cd 100644
--- a/core/java/android/view/ViewParent.java
+++ b/core/java/android/view/ViewParent.java
@@ -407,4 +407,126 @@
      * {@link View#TEXT_ALIGNMENT_VIEW_END}
      */
     public int getTextAlignment();
+
+    /**
+     * React to a descendant view initiating a nestable scroll operation, claiming the
+     * nested scroll operation if appropriate.
+     *
+     * <p>This method will be called in response to a descendant view invoking
+     * {@link View#startNestedScroll(int)}. Each parent up the view hierarchy will be
+     * given an opportunity to respond and claim the nested scrolling operation by returning
+     * <code>true</code>.</p>
+     *
+     * <p>This method may be overridden by ViewParent implementations to indicate when the view
+     * is willing to support a nested scrolling operation that is about to begin. If it returns
+     * true, this ViewParent will become the target view's nested scrolling parent for the duration
+     * of the scroll operation in progress. When the nested scroll is finished this ViewParent
+     * will receive a call to {@link #onStopNestedScroll(View)}.
+     * </p>
+     *
+     * @param child Direct child of this ViewParent containing target
+     * @param target View that initiated the nested scroll
+     * @param nestedScrollAxes Flags consisting of {@link View#SCROLL_AXIS_HORIZONTAL},
+     *                         {@link View#SCROLL_AXIS_VERTICAL} or both
+     * @return true if this ViewParent accepts the nested scroll operation
+     */
+    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes);
+
+    /**
+     * React to the successful claiming of a nested scroll operation.
+     *
+     * <p>This method will be called after
+     * {@link #onStartNestedScroll(View, View, int) onStartNestedScroll} returns true. It offers
+     * an opportunity for the view and its superclasses to perform initial configuration
+     * for the nested scroll. Implementations of this method should always call their superclass's
+     * implementation of this method if one is present.</p>
+     *
+     * @param child Direct child of this ViewParent containing target
+     * @param target View that initiated the nested scroll
+     * @param nestedScrollAxes Flags consisting of {@link View#SCROLL_AXIS_HORIZONTAL},
+     *                         {@link View#SCROLL_AXIS_VERTICAL} or both
+     * @see #onStartNestedScroll(View, View, int)
+     * @see #onStopNestedScroll(View)
+     */
+    public void onNestedScrollAccepted(View child, View target, int nestedScrollAxes);
+
+    /**
+     * React to a nested scroll operation ending.
+     *
+     * <p>Perform cleanup after a nested scrolling operation.
+     * This method will be called when a nested scroll stops, for example when a nested touch
+     * scroll ends with a {@link MotionEvent#ACTION_UP} or {@link MotionEvent#ACTION_CANCEL} event.
+     * Implementations of this method should always call their superclass's implementation of this
+     * method if one is present.</p>
+     *
+     * @param target View that initiated the nested scroll
+     */
+    public void onStopNestedScroll(View target);
+
+    /**
+     * React to a nested scroll in progress.
+     *
+     * <p>This method will be called when the ViewParent's current nested scrolling child view
+     * dispatches a nested scroll event. To receive calls to this method the ViewParent must have
+     * previously returned <code>true</code> for a call to
+     * {@link #onStartNestedScroll(View, View, int)}.</p>
+     *
+     * <p>Both the consumed and unconsumed portions of the scroll distance are reported to the
+     * ViewParent. An implementation may choose to use the consumed portion to match or chase scroll
+     * position of multiple child elements, for example. The unconsumed portion may be used to
+     * allow continuous dragging of multiple scrolling or draggable elements, such as scrolling
+     * a list within a vertical drawer where the drawer begins dragging once the edge of inner
+     * scrolling content is reached.</p>
+     *
+     * @param target The descendent view controlling the nested scroll
+     * @param dxConsumed Horizontal scroll distance in pixels already consumed by target
+     * @param dyConsumed Vertical scroll distance in pixels already consumed by target
+     * @param dxUnconsumed Horizontal scroll distance in pixels not consumed by target
+     * @param dyUnconsumed Vertical scroll distance in pixels not consumed by target
+     */
+    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,
+            int dxUnconsumed, int dyUnconsumed);
+
+    /**
+     * React to a nested scroll in progress before the target view consumes a portion of the scroll.
+     *
+     * <p>When working with nested scrolling often the parent view may want an opportunity
+     * to consume the scroll before the nested scrolling child does. An example of this is a
+     * drawer that contains a scrollable list. The user will want to be able to scroll the list
+     * fully into view before the list itself begins scrolling.</p>
+     *
+     * <p><code>onNestedPreScroll</code> is called when a nested scrolling child invokes
+     * {@link View#dispatchNestedPreScroll(int, int, int[], int[])}. The implementation should
+     * report how any pixels of the scroll reported by dx, dy were consumed in the
+     * <code>consumed</code> array. Index 0 corresponds to dx and index 1 corresponds to dy.
+     * This parameter will never be null. Initial values for consumed[0] and consumed[1]
+     * will always be 0.</p>
+     *
+     * @param target View that initiated the nested scroll
+     * @param dx Horizontal scroll distance in pixels
+     * @param dy Vertical scroll distance in pixels
+     * @param consumed Output. The horizontal and vertical scroll distance consumed by this parent
+     */
+    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed);
+
+    /**
+     * Request a fling from a nested scroll.
+     *
+     * <p>This method signifies that a nested scrolling child has detected suitable conditions
+     * for a fling. Generally this means that a touch scroll has ended with a
+     * {@link VelocityTracker velocity} in the direction of scrolling that meets or exceeds
+     * the {@link ViewConfiguration#getScaledMinimumFlingVelocity() minimum fling velocity}
+     * along a scrollable axis.</p>
+     *
+     * <p>If a nested scrolling child view would normally fling but it is at the edge of
+     * its own content, it can use this method to delegate the fling to its nested scrolling
+     * parent instead. The parent may optionally consume the fling or observe a child fling.</p>
+     *
+     * @param target View that initiated the nested scroll
+     * @param velocityX Horizontal velocity in pixels per second.
+     * @param velocityY Vertical velocity in pixels per second
+     * @param consumed true if the child consumed the fling, false otherwise
+     * @return true if this parent consumed or otherwise reacted to the fling
+     */
+    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed);
 }
diff --git a/core/java/android/view/ViewPropertyAnimator.java b/core/java/android/view/ViewPropertyAnimator.java
index 67a94be..11d2622 100644
--- a/core/java/android/view/ViewPropertyAnimator.java
+++ b/core/java/android/view/ViewPropertyAnimator.java
@@ -133,20 +133,22 @@
      * Constants used to associate a property being requested and the mechanism used to set
      * the property (this class calls directly into View to set the properties in question).
      */
-    private static final int NONE           = 0x0000;
-    private static final int TRANSLATION_X  = 0x0001;
-    private static final int TRANSLATION_Y  = 0x0002;
-    private static final int SCALE_X        = 0x0004;
-    private static final int SCALE_Y        = 0x0008;
-    private static final int ROTATION       = 0x0010;
-    private static final int ROTATION_X     = 0x0020;
-    private static final int ROTATION_Y     = 0x0040;
-    private static final int X              = 0x0080;
-    private static final int Y              = 0x0100;
-    private static final int ALPHA          = 0x0200;
+    static final int NONE           = 0x0000;
+    static final int TRANSLATION_X  = 0x0001;
+    static final int TRANSLATION_Y  = 0x0002;
+    static final int TRANSLATION_Z  = 0x0004;
+    static final int SCALE_X        = 0x0008;
+    static final int SCALE_Y        = 0x0010;
+    static final int ROTATION       = 0x0020;
+    static final int ROTATION_X     = 0x0040;
+    static final int ROTATION_Y     = 0x0080;
+    static final int X              = 0x0100;
+    static final int Y              = 0x0200;
+    static final int Z              = 0x0400;
+    static final int ALPHA          = 0x0800;
 
-    private static final int TRANSFORM_MASK = TRANSLATION_X | TRANSLATION_Y | SCALE_X | SCALE_Y |
-            ROTATION | ROTATION_X | ROTATION_Y | X | Y;
+    private static final int TRANSFORM_MASK = TRANSLATION_X | TRANSLATION_Y | TRANSLATION_Z |
+            SCALE_X | SCALE_Y | ROTATION | ROTATION_X | ROTATION_Y | X | Y | Z;
 
     /**
      * The mechanism by which the user can request several properties that are then animated
@@ -469,6 +471,32 @@
     }
 
     /**
+     * This method will cause the View's <code>z</code> property to be animated to the
+     * specified value. Animations already running on the property will be canceled.
+     *
+     * @param value The value to be animated to.
+     * @see View#setZ(float)
+     * @return This object, allowing calls to methods in this class to be chained.
+     */
+    public ViewPropertyAnimator z(float value) {
+        animateProperty(Z, value);
+        return this;
+    }
+
+    /**
+     * This method will cause the View's <code>z</code> property to be animated by the
+     * specified value. Animations already running on the property will be canceled.
+     *
+     * @param value The amount to be animated by, as an offset from the current value.
+     * @see View#setZ(float)
+     * @return This object, allowing calls to methods in this class to be chained.
+     */
+    public ViewPropertyAnimator zBy(float value) {
+        animatePropertyBy(Z, value);
+        return this;
+    }
+
+    /**
      * This method will cause the View's <code>rotation</code> property to be animated to the
      * specified value. Animations already running on the property will be canceled.
      *
@@ -599,6 +627,31 @@
     }
 
     /**
+     * This method will cause the View's <code>translationZ</code> property to be animated to the
+     * specified value. Animations already running on the property will be canceled.
+     *
+     * @param value The value to be animated to.
+     * @see View#setTranslationZ(float)
+     * @return This object, allowing calls to methods in this class to be chained.
+     */
+    public ViewPropertyAnimator translationZ(float value) {
+        animateProperty(TRANSLATION_Z, value);
+        return this;
+    }
+
+    /**
+     * This method will cause the View's <code>translationZ</code> property to be animated by the
+     * specified value. Animations already running on the property will be canceled.
+     *
+     * @param value The amount to be animated by, as an offset from the current value.
+     * @see View#setTranslationZ(float)
+     * @return This object, allowing calls to methods in this class to be chained.
+     */
+    public ViewPropertyAnimator translationZBy(float value) {
+        animatePropertyBy(TRANSLATION_Z, value);
+        return this;
+    }
+    /**
      * This method will cause the View's <code>scaleX</code> property to be animated to the
      * specified value. Animations already running on the property will be canceled.
      *
@@ -899,47 +952,44 @@
      */
     private void setValue(int propertyConstant, float value) {
         final View.TransformationInfo info = mView.mTransformationInfo;
-        final DisplayList displayList = mView.mDisplayList;
+        final RenderNode renderNode = mView.mRenderNode;
         switch (propertyConstant) {
             case TRANSLATION_X:
-                info.mTranslationX = value;
-                if (displayList != null) displayList.setTranslationX(value);
+                renderNode.setTranslationX(value);
                 break;
             case TRANSLATION_Y:
-                info.mTranslationY = value;
-                if (displayList != null) displayList.setTranslationY(value);
+                renderNode.setTranslationY(value);
+                break;
+            case TRANSLATION_Z:
+                renderNode.setTranslationZ(value);
                 break;
             case ROTATION:
-                info.mRotation = value;
-                if (displayList != null) displayList.setRotation(value);
+                renderNode.setRotation(value);
                 break;
             case ROTATION_X:
-                info.mRotationX = value;
-                if (displayList != null) displayList.setRotationX(value);
+                renderNode.setRotationX(value);
                 break;
             case ROTATION_Y:
-                info.mRotationY = value;
-                if (displayList != null) displayList.setRotationY(value);
+                renderNode.setRotationY(value);
                 break;
             case SCALE_X:
-                info.mScaleX = value;
-                if (displayList != null) displayList.setScaleX(value);
+                renderNode.setScaleX(value);
                 break;
             case SCALE_Y:
-                info.mScaleY = value;
-                if (displayList != null) displayList.setScaleY(value);
+                renderNode.setScaleY(value);
                 break;
             case X:
-                info.mTranslationX = value - mView.mLeft;
-                if (displayList != null) displayList.setTranslationX(value - mView.mLeft);
+                renderNode.setTranslationX(value - mView.mLeft);
                 break;
             case Y:
-                info.mTranslationY = value - mView.mTop;
-                if (displayList != null) displayList.setTranslationY(value - mView.mTop);
+                renderNode.setTranslationY(value - mView.mTop);
+                break;
+            case Z:
+                renderNode.setTranslationZ(value - renderNode.getElevation());
                 break;
             case ALPHA:
                 info.mAlpha = value;
-                if (displayList != null) displayList.setAlpha(value);
+                renderNode.setAlpha(value);
                 break;
         }
     }
@@ -951,28 +1001,32 @@
      * @return float The value of the named property
      */
     private float getValue(int propertyConstant) {
-        final View.TransformationInfo info = mView.mTransformationInfo;
+        final RenderNode node = mView.mRenderNode;
         switch (propertyConstant) {
             case TRANSLATION_X:
-                return info.mTranslationX;
+                return node.getTranslationX();
             case TRANSLATION_Y:
-                return info.mTranslationY;
+                return node.getTranslationY();
+            case TRANSLATION_Z:
+                return node.getTranslationZ();
             case ROTATION:
-                return info.mRotation;
+                return node.getRotation();
             case ROTATION_X:
-                return info.mRotationX;
+                return node.getRotationX();
             case ROTATION_Y:
-                return info.mRotationY;
+                return node.getRotationY();
             case SCALE_X:
-                return info.mScaleX;
+                return node.getScaleX();
             case SCALE_Y:
-                return info.mScaleY;
+                return node.getScaleY();
             case X:
-                return mView.mLeft + info.mTranslationX;
+                return mView.mLeft + node.getTranslationX();
             case Y:
-                return mView.mTop + info.mTranslationY;
+                return mView.mTop + node.getTranslationY();
+            case Z:
+                return node.getElevation() + node.getTranslationZ();
             case ALPHA:
-                return info.mAlpha;
+                return mView.mTransformationInfo.mAlpha;
         }
         return 0;
     }
@@ -1061,7 +1115,7 @@
                 // Shouldn't happen, but just to play it safe
                 return;
             }
-            boolean useDisplayListProperties = mView.mDisplayList != null;
+            boolean useRenderNodeProperties = mView.mRenderNode != null;
 
             // alpha requires slightly different treatment than the other (transform) properties.
             // The logic in setAlpha() is not simply setting mAlpha, plus the invalidation
@@ -1069,7 +1123,7 @@
             // We track what kinds of properties are set, and how alpha is handled when it is
             // set, and perform the invalidation steps appropriately.
             boolean alphaHandled = false;
-            if (!useDisplayListProperties) {
+            if (!useRenderNodeProperties) {
                 mView.invalidateParentCaches();
             }
             float fraction = animation.getAnimatedFraction();
@@ -1091,8 +1145,7 @@
                 }
             }
             if ((propertyMask & TRANSFORM_MASK) != 0) {
-                mView.mTransformationInfo.mMatrixDirty = true;
-                if (!useDisplayListProperties) {
+                if (!useRenderNodeProperties) {
                     mView.mPrivateFlags |= View.PFLAG_DRAWN; // force another invalidation
                 }
             }
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 1cb0473..db87394 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -28,6 +28,7 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Canvas;
+import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
 import android.graphics.Point;
@@ -57,6 +58,7 @@
 import android.util.Log;
 import android.util.Slog;
 import android.util.TypedValue;
+import android.view.Surface.OutOfResourcesException;
 import android.view.View.AttachInfo;
 import android.view.View.MeasureSpec;
 import android.view.accessibility.AccessibilityEvent;
@@ -70,7 +72,6 @@
 import android.view.animation.Interpolator;
 import android.view.inputmethod.InputConnection;
 import android.view.inputmethod.InputMethodManager;
-import android.view.Surface.OutOfResourcesException;
 import android.widget.Scroller;
 
 import com.android.internal.R;
@@ -110,7 +111,6 @@
     private static final boolean DEBUG_IMF = false || LOCAL_LOGV;
     private static final boolean DEBUG_CONFIGURATION = false || LOCAL_LOGV;
     private static final boolean DEBUG_FPS = false;
-    private static final boolean DEBUG_INPUT_PROCESSING = false || LOCAL_LOGV;
 
     /**
      * Set this system property to true to force the view hierarchy to render
@@ -234,6 +234,7 @@
 
     InputStage mFirstInputStage;
     InputStage mFirstPostImeInputStage;
+    InputStage mSyntheticInputStage;
 
     boolean mWindowAttributesChanged = false;
     int mWindowAttributesChangesFlag = 0;
@@ -270,6 +271,10 @@
     HardwareLayer mResizeBuffer;
     long mResizeBufferStartTime;
     int mResizeBufferDuration;
+    // Used to block the creation of the ResizeBuffer due to invalidations in
+    // the previous DisplayList tree that must prevent re-execution.
+    // Currently this means a functor was detached.
+    boolean mBlockResizeBuffer;
     static final Interpolator mResizeInterpolator = new AccelerateDecelerateInterpolator();
     private ArrayList<LayoutTransition> mPendingTransitions;
 
@@ -293,8 +298,6 @@
     private long mFpsPrevTime = -1;
     private int mFpsNumFrames;
 
-    private final ArrayList<DisplayList> mDisplayLists = new ArrayList<DisplayList>();
-
     /**
      * see {@link #playSoundEffect(int)}
      */
@@ -597,8 +600,8 @@
 
                 // Set up the input pipeline.
                 CharSequence counterSuffix = attrs.getTitle();
-                InputStage syntheticInputStage = new SyntheticInputStage();
-                InputStage viewPostImeStage = new ViewPostImeInputStage(syntheticInputStage);
+                mSyntheticInputStage = new SyntheticInputStage();
+                InputStage viewPostImeStage = new ViewPostImeInputStage(mSyntheticInputStage);
                 InputStage nativePostImeStage = new NativePostImeInputStage(viewPostImeStage,
                         "aq:native-post-ime:" + counterSuffix);
                 InputStage earlyPostImeStage = new EarlyPostImeInputStage(nativePostImeStage);
@@ -621,7 +624,6 @@
     }
 
     void destroyHardwareResources() {
-        invalidateDisplayLists();
         if (mAttachInfo.mHardwareRenderer != null) {
             mAttachInfo.mHardwareRenderer.destroyHardwareResources(mView);
             mAttachInfo.mHardwareRenderer.destroy(false);
@@ -635,23 +637,25 @@
                 HardwareRenderer.trimMemory(ComponentCallbacks2.TRIM_MEMORY_MODERATE);
             }
         } else {
-            invalidateDisplayLists();
-            if (mAttachInfo.mHardwareRenderer != null &&
-                    mAttachInfo.mHardwareRenderer.isEnabled()) {
-                mAttachInfo.mHardwareRenderer.destroyLayers(mView);
+            destroyHardwareLayer(mView);
+        }
+    }
+
+    private static void destroyHardwareLayer(View view) {
+        view.destroyLayer(true);
+
+        if (view instanceof ViewGroup) {
+            ViewGroup group = (ViewGroup) view;
+
+            int count = group.getChildCount();
+            for (int i = 0; i < count; i++) {
+                destroyHardwareLayer(group.getChildAt(i));
             }
         }
     }
 
-    void pushHardwareLayerUpdate(HardwareLayer layer) {
-        if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) {
-            mAttachInfo.mHardwareRenderer.pushLayerUpdate(layer);
-        }
-    }
-
     void flushHardwareLayerUpdates() {
-        if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled() &&
-                mAttachInfo.mHardwareRenderer.validate()) {
+        if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) {
             mAttachInfo.mHardwareRenderer.flushLayerUpdates();
         }
     }
@@ -661,20 +665,28 @@
         mHandler.sendMessageAtFrontOfQueue(mHandler.obtainMessage(MSG_FLUSH_LAYER_UPDATES));
     }
 
-    public boolean attachFunctor(long functor) {
+    public void attachFunctor(long functor) {
         //noinspection SimplifiableIfStatement
         if (mAttachInfo.mHardwareRenderer != null && mAttachInfo.mHardwareRenderer.isEnabled()) {
-            return mAttachInfo.mHardwareRenderer.attachFunctor(mAttachInfo, functor);
+            mAttachInfo.mHardwareRenderer.attachFunctor(mAttachInfo, functor);
         }
-        return false;
     }
 
     public void detachFunctor(long functor) {
+        mBlockResizeBuffer = true;
         if (mAttachInfo.mHardwareRenderer != null) {
             mAttachInfo.mHardwareRenderer.detachFunctor(functor);
         }
     }
 
+    public boolean invokeFunctor(long functor, boolean waitForCompletion) {
+        if (mAttachInfo.mHardwareRenderer == null || !mAttachInfo.mHardwareRenderer.isEnabled()) {
+            return false;
+        }
+        mAttachInfo.mHardwareRenderer.invokeFunctor(functor, waitForCompletion);
+        return true;
+    }
+
     private void enableHardwareAcceleration(WindowManager.LayoutParams attrs) {
         mAttachInfo.mHardwareAccelerated = false;
         mAttachInfo.mHardwareAccelerationRequested = false;
@@ -720,7 +732,7 @@
                 }
 
                 final boolean translucent = attrs.format != PixelFormat.OPAQUE;
-                mAttachInfo.mHardwareRenderer = HardwareRenderer.createGlRenderer(2, translucent);
+                mAttachInfo.mHardwareRenderer = HardwareRenderer.create(translucent);
                 if (mAttachInfo.mHardwareRenderer != null) {
                     mAttachInfo.mHardwareRenderer.setName(attrs.getTitle().toString());
                     mAttachInfo.mHardwareAccelerated =
@@ -960,14 +972,9 @@
     }
 
     void disposeResizeBuffer() {
-        if (mResizeBuffer != null && mAttachInfo.mHardwareRenderer != null) {
-            mAttachInfo.mHardwareRenderer.safelyRun(new Runnable() {
-                @Override
-                public void run() {
-                    mResizeBuffer.destroy();
-                    mResizeBuffer = null;
-                }
-            });
+        if (mResizeBuffer != null) {
+            mResizeBuffer.destroy();
+            mResizeBuffer = null;
         }
     }
 
@@ -1151,6 +1158,28 @@
         return windowSizeMayChange;
     }
 
+    /**
+     * Modifies the input matrix such that it maps view-local coordinates to
+     * on-screen coordinates.
+     *
+     * @param m input matrix to modify
+     */
+    void transformMatrixToGlobal(Matrix m) {
+        final View.AttachInfo attachInfo = mAttachInfo;
+        m.postTranslate(attachInfo.mWindowLeft, attachInfo.mWindowTop);
+    }
+
+    /**
+     * Modifies the input matrix such that it maps on-screen coordinates to
+     * view-local coordinates.
+     *
+     * @param m input matrix to modify
+     */
+    void transformMatrixToLocal(Matrix m) {
+        final View.AttachInfo attachInfo = mAttachInfo;
+        m.preTranslate(-attachInfo.mWindowLeft, -attachInfo.mWindowTop);
+    }
+
     void dispatchApplyInsets(View host) {
         mFitSystemWindowsInsets.set(mAttachInfo.mContentInsets);
         boolean isRound = false;
@@ -1234,11 +1263,6 @@
                 desiredWindowHeight = packageMetrics.heightPixels;
             }
 
-            // For the very first time, tell the view hierarchy that it
-            // is attached to the window.  Note that at this point the surface
-            // object is not initialized to its backing store, but soon it
-            // will be (assuming the window is visible).
-            attachInfo.mSurface = mSurface;
             // We used to use the following condition to choose 32 bits drawing caches:
             // PixelFormat.hasAlpha(lp.format) || lp.format == PixelFormat.RGBX_8888
             // However, windows are now always 32 bits by default, so choose 32 bits
@@ -1447,6 +1471,12 @@
                             host.getMeasuredHeight() + ", params=" + params);
                 }
 
+                if (mAttachInfo.mHardwareRenderer != null) {
+                    // relayoutWindow may decide to destroy mSurface. As that decision
+                    // happens in WindowManager service, we need to be defensive here
+                    // and stop using the surface in case it gets destroyed.
+                    mAttachInfo.mHardwareRenderer.pauseSurface(mSurface);
+                }
                 final int surfaceGenerationId = mSurface.getGenerationId();
                 relayoutResult = relayoutWindow(params, viewVisibility, insetsPending);
                 if (!mDrawDuringWindowsAnimating &&
@@ -1481,24 +1511,19 @@
                             !mAttachInfo.mTurnOffWindowResizeAnim &&
                             mAttachInfo.mHardwareRenderer != null &&
                             mAttachInfo.mHardwareRenderer.isEnabled() &&
-                            mAttachInfo.mHardwareRenderer.validate() &&
-                            lp != null && !PixelFormat.formatHasAlpha(lp.format)) {
+                            lp != null && !PixelFormat.formatHasAlpha(lp.format)
+                            && !mBlockResizeBuffer) {
 
                         disposeResizeBuffer();
 
-                        boolean completed = false;
-                        HardwareCanvas hwRendererCanvas = mAttachInfo.mHardwareRenderer.getCanvas();
-                        HardwareCanvas layerCanvas = null;
+                        if (mResizeBuffer == null) {
+                            mResizeBuffer = mAttachInfo.mHardwareRenderer.createDisplayListLayer(
+                                    mWidth, mHeight);
+                        }
+                        mResizeBuffer.prepare(mWidth, mHeight, false);
+                        RenderNode layerRenderNode = mResizeBuffer.startRecording();
+                        HardwareCanvas layerCanvas = layerRenderNode.start(mWidth, mHeight);
                         try {
-                            if (mResizeBuffer == null) {
-                                mResizeBuffer = mAttachInfo.mHardwareRenderer.createHardwareLayer(
-                                        mWidth, mHeight, false);
-                            } else if (mResizeBuffer.getWidth() != mWidth ||
-                                    mResizeBuffer.getHeight() != mHeight) {
-                                mResizeBuffer.resize(mWidth, mHeight);
-                            }
-                            // TODO: should handle create/resize failure
-                            layerCanvas = mResizeBuffer.start(hwRendererCanvas);
                             final int restoreCount = layerCanvas.save();
 
                             int yoff;
@@ -1516,10 +1541,10 @@
                                 mTranslator.translateCanvas(layerCanvas);
                             }
 
-                            DisplayList displayList = mView.mDisplayList;
-                            if (displayList != null && displayList.isValid()) {
-                                layerCanvas.drawDisplayList(displayList, null,
-                                        DisplayList.FLAG_CLIP_CHILDREN);
+                            RenderNode renderNode = mView.mRenderNode;
+                            if (renderNode != null && renderNode.isValid()) {
+                                layerCanvas.drawDisplayList(renderNode, null,
+                                        RenderNode.FLAG_CLIP_CHILDREN);
                             } else {
                                 mView.draw(layerCanvas);
                             }
@@ -1529,19 +1554,16 @@
                             mResizeBufferStartTime = SystemClock.uptimeMillis();
                             mResizeBufferDuration = mView.getResources().getInteger(
                                     com.android.internal.R.integer.config_mediumAnimTime);
-                            completed = true;
 
                             layerCanvas.restoreToCount(restoreCount);
-                        } catch (OutOfMemoryError e) {
-                            Log.w(TAG, "Not enough memory for content change anim buffer", e);
+                            layerRenderNode.end(layerCanvas);
+                            layerRenderNode.setCaching(true);
+                            layerRenderNode.setLeftTopRightBottom(0, 0, mWidth, mHeight);
+                            mTempRect.set(0, 0, mWidth, mHeight);
                         } finally {
-                            if (mResizeBuffer != null) {
-                                mResizeBuffer.end(hwRendererCanvas);
-                                if (!completed) {
-                                    disposeResizeBuffer();
-                                }
-                            }
+                            mResizeBuffer.endRecording(mTempRect);
                         }
+                        mAttachInfo.mHardwareRenderer.flushLayerUpdates();
                     }
                     mAttachInfo.mContentInsets.set(mPendingContentInsets);
                     if (DEBUG_LAYOUT) Log.v(TAG, "Content insets changing to: "
@@ -1584,7 +1606,7 @@
                         if (mAttachInfo.mHardwareRenderer != null) {
                             try {
                                 hwInitialized = mAttachInfo.mHardwareRenderer.initialize(
-                                        mHolder.getSurface());
+                                        mSurface);
                             } catch (OutOfResourcesException e) {
                                 handleOutOfResourcesException(e);
                                 return;
@@ -1611,7 +1633,7 @@
                         mSurfaceHolder == null && mAttachInfo.mHardwareRenderer != null) {
                     mFullRedrawNeeded = true;
                     try {
-                        mAttachInfo.mHardwareRenderer.updateSurface(mHolder.getSurface());
+                        mAttachInfo.mHardwareRenderer.updateSurface(mSurface);
                     } catch (OutOfResourcesException e) {
                         handleOutOfResourcesException(e);
                         return;
@@ -1694,7 +1716,7 @@
                         mHeight != mAttachInfo.mHardwareRenderer.getHeight()) {
                     mAttachInfo.mHardwareRenderer.setup(mWidth, mHeight);
                     if (!hwInitialized) {
-                        mAttachInfo.mHardwareRenderer.invalidate(mHolder.getSurface());
+                        mAttachInfo.mHardwareRenderer.invalidate(mSurface);
                         mFullRedrawNeeded = true;
                     }
                 }
@@ -2211,11 +2233,9 @@
      * @hide
      */
     void outputDisplayList(View view) {
-        if (mAttachInfo != null && mAttachInfo.mHardwareCanvas != null) {
-            DisplayList displayList = view.getDisplayList();
-            if (displayList != null) {
-                mAttachInfo.mHardwareCanvas.outputDisplayList(displayList);
-            }
+        RenderNode renderNode = view.getDisplayList();
+        if (renderNode != null) {
+            renderNode.output();
         }
     }
 
@@ -2294,6 +2314,9 @@
 
         if (mReportNextDraw) {
             mReportNextDraw = false;
+            if (mAttachInfo.mHardwareRenderer != null) {
+                mAttachInfo.mHardwareRenderer.fence();
+            }
 
             if (LOCAL_LOGV) {
                 Log.v(TAG, "FINISHED DRAWING: " + mWindowAttributes.getTitle());
@@ -2400,8 +2423,6 @@
                     appScale + ", width=" + mWidth + ", height=" + mHeight);
         }
 
-        invalidateDisplayLists();
-
         attachInfo.mTreeObserver.dispatchOnDraw();
 
         if (!dirty.isEmpty() || mIsAnimating) {
@@ -2414,6 +2435,7 @@
                 mCurrentDirty.set(dirty);
                 dirty.setEmpty();
 
+                mBlockResizeBuffer = false;
                 attachInfo.mHardwareRenderer.draw(mView, attachInfo, this,
                         animating ? null : mCurrentDirty);
             } else {
@@ -2431,7 +2453,7 @@
 
                     try {
                         attachInfo.mHardwareRenderer.initializeIfNeeded(mWidth, mHeight,
-                                mHolder.getSurface());
+                                mSurface);
                     } catch (OutOfResourcesException e) {
                         handleOutOfResourcesException(e);
                         return;
@@ -2566,28 +2588,31 @@
      * @param canvas The canvas on which to draw.
      */
     private void drawAccessibilityFocusedDrawableIfNeeded(Canvas canvas) {
-        AccessibilityManager manager = AccessibilityManager.getInstance(mView.mContext);
+        final AccessibilityManager manager = AccessibilityManager.getInstance(mView.mContext);
         if (!manager.isEnabled() || !manager.isTouchExplorationEnabled()) {
             return;
         }
-        if (mAccessibilityFocusedHost == null || mAccessibilityFocusedHost.mAttachInfo == null) {
+
+        final View host = mAccessibilityFocusedHost;
+        if (host == null || host.mAttachInfo == null) {
             return;
         }
-        Drawable drawable = getAccessibilityFocusedDrawable();
+
+        final Drawable drawable = getAccessibilityFocusedDrawable();
         if (drawable == null) {
             return;
         }
-        AccessibilityNodeProvider provider =
-            mAccessibilityFocusedHost.getAccessibilityNodeProvider();
-        Rect bounds = mView.mAttachInfo.mTmpInvalRect;
+
+        final AccessibilityNodeProvider provider = host.getAccessibilityNodeProvider();
+        final Rect bounds = mView.mAttachInfo.mTmpInvalRect;
         if (provider == null) {
-            mAccessibilityFocusedHost.getBoundsOnScreen(bounds);
-        } else {
-            if (mAccessibilityFocusedVirtualView == null) {
-                return;
-            }
+            host.getBoundsOnScreen(bounds);
+        } else if (mAccessibilityFocusedVirtualView != null) {
             mAccessibilityFocusedVirtualView.getBoundsInScreen(bounds);
+        } else {
+            return;
         }
+
         bounds.offset(-mAttachInfo.mWindowLeft, -mAttachInfo.mWindowTop);
         bounds.intersect(0, 0, mAttachInfo.mViewRootImpl.mWidth, mAttachInfo.mViewRootImpl.mHeight);
         drawable.setBounds(bounds);
@@ -2603,7 +2628,7 @@
                         R.attr.accessibilityFocusedDrawable, value, true);
                 if (resolved) {
                     mAttachInfo.mAccessibilityFocusDrawable =
-                        mView.mContext.getResources().getDrawable(value.resourceId);
+                        mView.mContext.getDrawable(value.resourceId);
                 }
             }
             return mAttachInfo.mAccessibilityFocusDrawable;
@@ -2611,20 +2636,6 @@
         return null;
     }
 
-    void invalidateDisplayLists() {
-        final ArrayList<DisplayList> displayLists = mDisplayLists;
-        final int count = displayLists.size();
-
-        for (int i = 0; i < count; i++) {
-            final DisplayList displayList = displayLists.get(i);
-            if (displayList.isDirty()) {
-                displayList.reset();
-            }
-        }
-
-        displayLists.clear();
-    }
-
     /**
      * @hide
      */
@@ -2866,10 +2877,6 @@
 
     void dispatchDetachedFromWindow() {
         if (mView != null && mView.mAttachInfo != null) {
-            if (mAttachInfo.mHardwareRenderer != null &&
-                    mAttachInfo.mHardwareRenderer.isEnabled()) {
-                mAttachInfo.mHardwareRenderer.validate();
-            }
             mAttachInfo.mTreeObserver.dispatchOnWindowAttachedChange(false);
             mView.dispatchDetachedFromWindow();
         }
@@ -2886,7 +2893,6 @@
         mView.assignParent(null);
         mView = null;
         mAttachInfo.mRootView = null;
-        mAttachInfo.mSurface = null;
 
         mSurface.release();
 
@@ -2951,7 +2957,7 @@
             }
         }
     }
-    
+
     /**
      * Return true if child is an ancestor of parent, (or equal to the parent).
      */
@@ -2998,6 +3004,7 @@
     private final static int MSG_INVALIDATE_WORLD = 23;
     private final static int MSG_WINDOW_MOVED = 24;
     private final static int MSG_FLUSH_LAYER_UPDATES = 25;
+    private final static int MSG_SYNTHESIZE_INPUT_EVENT = 26;
 
     final class ViewRootHandler extends Handler {
         @Override
@@ -3047,6 +3054,8 @@
                     return "MSG_WINDOW_MOVED";
                 case MSG_FLUSH_LAYER_UPDATES:
                     return "MSG_FLUSH_LAYER_UPDATES";
+                case MSG_SYNTHESIZE_INPUT_EVENT:
+                    return "MSG_SYNTHESIZE_INPUT_EVENT";
             }
             return super.getMessageName(message);
         }
@@ -3142,7 +3151,7 @@
                             mFullRedrawNeeded = true;
                             try {
                                 mAttachInfo.mHardwareRenderer.initializeIfNeeded(
-                                        mWidth, mHeight, mHolder.getSurface());
+                                        mWidth, mHeight, mSurface);
                             } catch (OutOfResourcesException e) {
                                 Log.e(TAG, "OutOfResourcesException locking surface", e);
                                 try {
@@ -3191,8 +3200,6 @@
                         mHasHadWindowFocus = true;
                     }
 
-                    setAccessibilityFocus(null, null);
-
                     if (mView != null && mAccessibilityManager.isEnabled()) {
                         if (hasWindowFocus) {
                             mView.sendAccessibilityEvent(
@@ -3205,8 +3212,15 @@
                 doDie();
                 break;
             case MSG_DISPATCH_INPUT_EVENT: {
+                SomeArgs args = (SomeArgs)msg.obj;
+                InputEvent event = (InputEvent)args.arg1;
+                InputEventReceiver receiver = (InputEventReceiver)args.arg2;
+                enqueueInputEvent(event, receiver, 0, true);
+                args.recycle();
+            } break;
+            case MSG_SYNTHESIZE_INPUT_EVENT: {
                 InputEvent event = (InputEvent)msg.obj;
-                enqueueInputEvent(event, null, 0, true);
+                enqueueInputEvent(event, null, QueuedInputEvent.FLAG_UNHANDLED, true);
             } break;
             case MSG_DISPATCH_KEY_FROM_IME: {
                 if (LOCAL_LOGV) Log.v(
@@ -3217,7 +3231,8 @@
                     // The IME is trying to say this event is from the
                     // system!  Bad bad bad!
                     //noinspection UnusedAssignment
-                    event = KeyEvent.changeFlags(event, event.getFlags() & ~KeyEvent.FLAG_FROM_SYSTEM);
+                    event = KeyEvent.changeFlags(event, event.getFlags() &
+                            ~KeyEvent.FLAG_FROM_SYSTEM);
                 }
                 enqueueInputEvent(event, null, QueuedInputEvent.FLAG_DELIVER_POST_IME, true);
             } break;
@@ -3335,7 +3350,7 @@
                 } else {
                     // There's nothing to focus. Clear and propagate through the
                     // hierarchy, but don't attempt to place new focus.
-                    focused.clearFocusInternal(true, false);
+                    focused.clearFocusInternal(null, true, false);
                     return true;
                 }
             }
@@ -4013,6 +4028,7 @@
         private final SyntheticJoystickHandler mJoystick = new SyntheticJoystickHandler();
         private final SyntheticTouchNavigationHandler mTouchNavigation =
                 new SyntheticTouchNavigationHandler();
+        private final SyntheticKeyboardHandler mKeyboard = new SyntheticKeyboardHandler();
 
         public SyntheticInputStage() {
             super(null);
@@ -4035,7 +4051,11 @@
                     mTouchNavigation.process(event);
                     return FINISH_HANDLED;
                 }
+            } else if ((q.mFlags & QueuedInputEvent.FLAG_UNHANDLED) != 0) {
+                mKeyboard.process((KeyEvent)q.mEvent);
+                return FINISH_HANDLED;
             }
+
             return FORWARD;
         }
 
@@ -4540,8 +4560,7 @@
         // The active pointer id, or -1 if none.
         private int mActivePointerId = -1;
 
-        // Time and location where tracking started.
-        private long mStartTime;
+        // Location where tracking started.
         private float mStartX;
         private float mStartY;
 
@@ -4569,9 +4588,6 @@
         private boolean mFlinging;
         private float mFlingVelocity;
 
-        // The last time a confirm key was pressed on the touch nav device
-        private long mLastConfirmKeyTime = Long.MAX_VALUE;
-
         public SyntheticTouchNavigationHandler() {
             super(true);
         }
@@ -4638,7 +4654,6 @@
                     mActivePointerId = event.getPointerId(0);
                     mVelocityTracker = VelocityTracker.obtain();
                     mVelocityTracker.addMovement(event);
-                    mStartTime = time;
                     mStartX = event.getX();
                     mStartY = event.getY();
                     mLastX = mStartX;
@@ -4877,6 +4892,33 @@
         };
     }
 
+    final class SyntheticKeyboardHandler {
+        public void process(KeyEvent event) {
+            if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) != 0) {
+                return;
+            }
+
+            final KeyCharacterMap kcm = event.getKeyCharacterMap();
+            final int keyCode = event.getKeyCode();
+            final int metaState = event.getMetaState();
+
+            // Check for fallback actions specified by the key character map.
+            KeyCharacterMap.FallbackAction fallbackAction =
+                    kcm.getFallbackAction(keyCode, metaState);
+            if (fallbackAction != null) {
+                final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
+                KeyEvent fallbackEvent = KeyEvent.obtain(
+                        event.getDownTime(), event.getEventTime(),
+                        event.getAction(), fallbackAction.keyCode,
+                        event.getRepeatCount(), fallbackAction.metaState,
+                        event.getDeviceId(), event.getScanCode(),
+                        flags, event.getSource(), null);
+                fallbackAction.recycle();
+                enqueueInputEvent(fallbackEvent);
+            }
+        }
+    }
+
     /**
      * Returns true if the key is used for keyboard navigation.
      * @param keyEvent The key event.
@@ -5268,10 +5310,10 @@
     }
 
     private static void getGfxInfo(View view, int[] info) {
-        DisplayList displayList = view.mDisplayList;
+        RenderNode renderNode = view.mRenderNode;
         info[0]++;
-        if (displayList != null) {
-            info[1] += displayList.getSize();
+        if (renderNode != null) {
+            info[1] += 0; /* TODO: Memory used by RenderNodes (properties + DisplayLists) */
         }
 
         if (view instanceof ViewGroup) {
@@ -5319,7 +5361,6 @@
             }
 
             if (mAdded && !mFirst) {
-                invalidateDisplayLists();
                 destroyHardwareRenderer();
 
                 if (mView != null) {
@@ -5365,7 +5406,7 @@
 
                 // Hardware rendering
                 if (mAttachInfo.mHardwareRenderer != null) {
-                    if (mAttachInfo.mHardwareRenderer.loadSystemProperties(mHolder.getSurface())) {
+                    if (mAttachInfo.mHardwareRenderer.loadSystemProperties()) {
                         invalidate();
                     }
                 }
@@ -5457,6 +5498,7 @@
         public static final int FLAG_FINISHED = 1 << 2;
         public static final int FLAG_FINISHED_HANDLED = 1 << 3;
         public static final int FLAG_RESYNTHESIZED = 1 << 4;
+        public static final int FLAG_UNHANDLED = 1 << 5;
 
         public QueuedInputEvent mNext;
 
@@ -5471,6 +5513,14 @@
             return mEvent instanceof MotionEvent
                     && mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER);
         }
+
+        public boolean shouldSendToSynthesizer() {
+            if ((mFlags & FLAG_UNHANDLED) != 0) {
+                return true;
+            }
+
+            return false;
+        }
     }
 
     private QueuedInputEvent obtainQueuedInputEvent(InputEvent event,
@@ -5568,24 +5618,29 @@
     }
 
     private void deliverInputEvent(QueuedInputEvent q) {
-        Trace.traceBegin(Trace.TRACE_TAG_VIEW, "deliverInputEvent");
-        try {
-            if (mInputEventConsistencyVerifier != null) {
-                mInputEventConsistencyVerifier.onInputEvent(q.mEvent, 0);
-            }
+        Trace.asyncTraceBegin(Trace.TRACE_TAG_VIEW, "deliverInputEvent",
+                q.mEvent.getSequenceNumber());
+        if (mInputEventConsistencyVerifier != null) {
+            mInputEventConsistencyVerifier.onInputEvent(q.mEvent, 0);
+        }
 
-            InputStage stage = q.shouldSkipIme() ? mFirstPostImeInputStage : mFirstInputStage;
-            if (stage != null) {
-                stage.deliver(q);
-            } else {
-                finishInputEvent(q);
-            }
-        } finally {
-            Trace.traceEnd(Trace.TRACE_TAG_VIEW);
+        InputStage stage;
+        if (q.shouldSendToSynthesizer()) {
+            stage = mSyntheticInputStage;
+        } else {
+            stage = q.shouldSkipIme() ? mFirstPostImeInputStage : mFirstInputStage;
+        }
+
+        if (stage != null) {
+            stage.deliver(q);
+        } else {
+            finishInputEvent(q);
         }
     }
 
     private void finishInputEvent(QueuedInputEvent q) {
+        Trace.asyncTraceEnd(Trace.TRACE_TAG_VIEW, "deliverInputEvent",
+                q.mEvent.getSequenceNumber());
         if (q.mReceiver != null) {
             boolean handled = (q.mFlags & QueuedInputEvent.FLAG_FINISHED_HANDLED) != 0;
             q.mReceiver.finishInputEvent(q.mEvent, handled);
@@ -5786,10 +5841,6 @@
         mInvalidateOnAnimationRunnable.addViewRect(info);
     }
 
-    public void enqueueDisplayList(DisplayList displayList) {
-        mDisplayLists.add(displayList);
-    }
-
     public void cancelInvalidate(View view) {
         mHandler.removeMessages(MSG_INVALIDATE, view);
         // fixme: might leak the AttachInfo.InvalidateInfo objects instead of returning
@@ -5799,7 +5850,20 @@
     }
 
     public void dispatchInputEvent(InputEvent event) {
-        Message msg = mHandler.obtainMessage(MSG_DISPATCH_INPUT_EVENT, event);
+        dispatchInputEvent(event, null);
+    }
+
+    public void dispatchInputEvent(InputEvent event, InputEventReceiver receiver) {
+        SomeArgs args = SomeArgs.obtain();
+        args.arg1 = event;
+        args.arg2 = receiver;
+        Message msg = mHandler.obtainMessage(MSG_DISPATCH_INPUT_EVENT, args);
+        msg.setAsynchronous(true);
+        mHandler.sendMessage(msg);
+    }
+
+    public void synthesizeInputEvent(InputEvent event) {
+        Message msg = mHandler.obtainMessage(MSG_SYNTHESIZE_INPUT_EVENT, event);
         msg.setAsynchronous(true);
         mHandler.sendMessage(msg);
     }
@@ -5810,28 +5874,17 @@
         mHandler.sendMessage(msg);
     }
 
-    public void dispatchUnhandledKey(KeyEvent event) {
-        if ((event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
-            final KeyCharacterMap kcm = event.getKeyCharacterMap();
-            final int keyCode = event.getKeyCode();
-            final int metaState = event.getMetaState();
-
-            // Check for fallback actions specified by the key character map.
-            KeyCharacterMap.FallbackAction fallbackAction =
-                    kcm.getFallbackAction(keyCode, metaState);
-            if (fallbackAction != null) {
-                final int flags = event.getFlags() | KeyEvent.FLAG_FALLBACK;
-                KeyEvent fallbackEvent = KeyEvent.obtain(
-                        event.getDownTime(), event.getEventTime(),
-                        event.getAction(), fallbackAction.keyCode,
-                        event.getRepeatCount(), fallbackAction.metaState,
-                        event.getDeviceId(), event.getScanCode(),
-                        flags, event.getSource(), null);
-                fallbackAction.recycle();
-
-                dispatchInputEvent(fallbackEvent);
-            }
+    /**
+     * Reinject unhandled {@link InputEvent}s in order to synthesize fallbacks events.
+     *
+     * Note that it is the responsibility of the caller of this API to recycle the InputEvent it
+     * passes in.
+     */
+    public void dispatchUnhandledInputEvent(InputEvent event) {
+        if (event instanceof MotionEvent) {
+            event = MotionEvent.obtain((MotionEvent) event);
         }
+        synthesizeInputEvent(event);
     }
 
     public void dispatchAppVisibility(boolean visible) {
@@ -6093,6 +6146,33 @@
         // Do nothing.
     }
 
+    @Override
+    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
+        return false;
+    }
+
+    @Override
+    public void onStopNestedScroll(View target) {
+    }
+
+    @Override
+    public void onNestedScrollAccepted(View child, View target, int nestedScrollAxes) {
+    }
+
+    @Override
+    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,
+            int dxUnconsumed, int dyUnconsumed) {
+    }
+
+    @Override
+    public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {
+    }
+
+    @Override
+    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) {
+        return false;
+    }
+
     void changeCanvasOpacity(boolean opaque) {
         // TODO(romainguy): recreate Canvas (software or hardware) to reflect the opacity change.
         Log.d(TAG, "changeCanvasOpacity: opaque=" + opaque);
@@ -6298,68 +6378,6 @@
         }
     }
 
-    private final SurfaceHolder mHolder = new SurfaceHolder() {
-        // we only need a SurfaceHolder for opengl. it would be nice
-        // to implement everything else though, especially the callback
-        // support (opengl doesn't make use of it right now, but eventually
-        // will).
-        @Override
-        public Surface getSurface() {
-            return mSurface;
-        }
-
-        @Override
-        public boolean isCreating() {
-            return false;
-        }
-
-        @Override
-        public void addCallback(Callback callback) {
-        }
-
-        @Override
-        public void removeCallback(Callback callback) {
-        }
-
-        @Override
-        public void setFixedSize(int width, int height) {
-        }
-
-        @Override
-        public void setSizeFromLayout() {
-        }
-
-        @Override
-        public void setFormat(int format) {
-        }
-
-        @Override
-        public void setType(int type) {
-        }
-
-        @Override
-        public void setKeepScreenOn(boolean screenOn) {
-        }
-
-        @Override
-        public Canvas lockCanvas() {
-            return null;
-        }
-
-        @Override
-        public Canvas lockCanvas(Rect dirty) {
-            return null;
-        }
-
-        @Override
-        public void unlockCanvasAndPost(Canvas canvas) {
-        }
-        @Override
-        public Rect getSurfaceFrame() {
-            return null;
-        }
-    };
-
     static RunQueue getRunQueue() {
         RunQueue rq = sRunQueues.get();
         if (rq != null) {
@@ -6469,7 +6487,7 @@
         public void ensureConnection() {
             if (mAttachInfo != null) {
                 final boolean registered =
-                    mAttachInfo.mAccessibilityWindowId != AccessibilityNodeInfo.UNDEFINED;
+                    mAttachInfo.mAccessibilityWindowId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
                 if (!registered) {
                     mAttachInfo.mAccessibilityWindowId =
                         mAccessibilityManager.addAccessibilityInteractionConnection(mWindow,
@@ -6480,9 +6498,9 @@
 
         public void ensureNoConnection() {
             final boolean registered =
-                mAttachInfo.mAccessibilityWindowId != AccessibilityNodeInfo.UNDEFINED;
+                mAttachInfo.mAccessibilityWindowId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
             if (registered) {
-                mAttachInfo.mAccessibilityWindowId = AccessibilityNodeInfo.UNDEFINED;
+                mAttachInfo.mAccessibilityWindowId = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
                 mAccessibilityManager.removeAccessibilityInteractionConnection(mWindow);
             }
         }
diff --git a/core/java/android/view/ViewStub.java b/core/java/android/view/ViewStub.java
index a5dc3ae..d68a860 100644
--- a/core/java/android/view/ViewStub.java
+++ b/core/java/android/view/ViewStub.java
@@ -97,16 +97,21 @@
     }
 
     @SuppressWarnings({"UnusedDeclaration"})
-    public ViewStub(Context context, AttributeSet attrs, int defStyle) {
-        TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.ViewStub,
-                defStyle, 0);
+    public ViewStub(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ViewStub(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ViewStub, defStyleAttr, defStyleRes);
 
         mInflatedId = a.getResourceId(R.styleable.ViewStub_inflatedId, NO_ID);
         mLayoutResource = a.getResourceId(R.styleable.ViewStub_layout, 0);
 
         a.recycle();
 
-        a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.View, defStyle, 0);
+        a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.View, defStyleAttr, defStyleRes);
         mID = a.getResourceId(R.styleable.View_id, NO_ID);
         a.recycle();
 
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index 52f9c0b..4730e59 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -56,10 +56,8 @@
  *
  * @hide
  */
-public class VolumePanel extends Handler implements OnSeekBarChangeListener, View.OnClickListener,
-        VolumeController
-{
-    private static final String TAG = "VolumePanel";
+public class VolumePanel extends Handler implements VolumeController {
+    private static final String TAG = VolumePanel.class.getSimpleName();
     private static boolean LOGD = false;
 
     /**
@@ -187,7 +185,7 @@
             this.iconMuteRes = iconMuteRes;
             this.show = show;
         }
-    };
+    }
 
     // List of stream types and their order
     private static final StreamResources[] STREAMS = {
@@ -238,6 +236,7 @@
             cleanUp();
         }
 
+        @Override
         public void onDismiss(DialogInterface unused) {
             mContext.unregisterReceiver(this);
             cleanUp();
@@ -253,14 +252,14 @@
     }
 
 
-    public VolumePanel(final Context context, AudioService volumeService) {
+    public VolumePanel(Context context, AudioService volumeService) {
         mContext = context;
         mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
         mAudioService = volumeService;
 
         // For now, only show master volume if master volume is supported
-        boolean useMasterVolume = context.getResources().getBoolean(
-                com.android.internal.R.bool.config_useMasterVolume);
+        final Resources res = context.getResources();
+        final boolean useMasterVolume = res.getBoolean(R.bool.config_useMasterVolume);
         if (useMasterVolume) {
             for (int i = 0; i < STREAMS.length; i++) {
                 StreamResources streamRes = STREAMS[i];
@@ -268,21 +267,8 @@
             }
         }
 
-        LayoutInflater inflater = (LayoutInflater) context
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        View view = mView = inflater.inflate(R.layout.volume_adjust, null);
-        mView.setOnTouchListener(new View.OnTouchListener() {
-            public boolean onTouch(View v, MotionEvent event) {
-                resetTimeout();
-                return false;
-            }
-        });
-        mPanel = (ViewGroup) mView.findViewById(R.id.visible_panel);
-        mSliderGroup = (ViewGroup) mView.findViewById(R.id.slider_group);
-        mMoreButton = (ImageView) mView.findViewById(R.id.expand_button);
-        mDivider = (ImageView) mView.findViewById(R.id.expand_button_divider);
-
-        mDialog = new Dialog(context, R.style.Theme_Panel_Volume) {
+        mDialog = new Dialog(context) {
+            @Override
             public boolean onTouchEvent(MotionEvent event) {
                 if (isShowing() && event.getAction() == MotionEvent.ACTION_OUTSIDE &&
                         sConfirmSafeVolumeDialog == null) {
@@ -292,47 +278,65 @@
                 return false;
             }
         };
-        mDialog.setTitle("Volume control"); // No need to localize
-        mDialog.setContentView(mView);
+
+        // Change some window properties
+        final Window window = mDialog.getWindow();
+        final LayoutParams lp = window.getAttributes();
+        lp.token = null;
+        // Offset from the top
+        lp.y = res.getDimensionPixelOffset(R.dimen.volume_panel_top);
+        lp.type = LayoutParams.TYPE_VOLUME_OVERLAY;
+        lp.windowAnimations = R.style.Animation_VolumePanel;
+        window.setAttributes(lp);
+        window.setGravity(Gravity.TOP);
+        window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+        window.requestFeature(Window.FEATURE_NO_TITLE);
+        window.addFlags(LayoutParams.FLAG_NOT_FOCUSABLE
+                | LayoutParams.FLAG_NOT_TOUCH_MODAL
+                | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
+
+        mDialog.setCanceledOnTouchOutside(true);
+        mDialog.setContentView(R.layout.volume_adjust);
         mDialog.setOnDismissListener(new OnDismissListener() {
+            @Override
             public void onDismiss(DialogInterface dialog) {
                 mActiveStreamType = -1;
                 mAudioManager.forceVolumeControlStream(mActiveStreamType);
             }
         });
-        // Change some window properties
-        Window window = mDialog.getWindow();
-        window.setGravity(Gravity.TOP);
-        LayoutParams lp = window.getAttributes();
-        lp.token = null;
-        // Offset from the top
-        lp.y = mContext.getResources().getDimensionPixelOffset(
-                com.android.internal.R.dimen.volume_panel_top);
-        lp.type = LayoutParams.TYPE_VOLUME_OVERLAY;
-        lp.width = LayoutParams.WRAP_CONTENT;
-        lp.height = LayoutParams.WRAP_CONTENT;
-        window.setAttributes(lp);
-        window.addFlags(LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCH_MODAL
-                | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
+
+        mDialog.create();
+
+        mView = window.findViewById(R.id.content);
+        mView.setOnTouchListener(new View.OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                resetTimeout();
+                return false;
+            }
+        });
+
+        mPanel = (ViewGroup) mView.findViewById(R.id.visible_panel);
+        mSliderGroup = (ViewGroup) mView.findViewById(R.id.slider_group);
+        mMoreButton = mView.findViewById(R.id.expand_button);
+        mDivider = mView.findViewById(R.id.expand_button_divider);
 
         mToneGenerators = new ToneGenerator[AudioSystem.getNumStreamTypes()];
-        mVibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
-
+        mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
         mVoiceCapable = context.getResources().getBoolean(R.bool.config_voice_capable);
+
+        // If we don't want to show multiple volumes, hide the settings button
+        // and divider.
         mShowCombinedVolumes = !mVoiceCapable && !useMasterVolume;
-        // If we don't want to show multiple volumes, hide the settings button and divider
         if (!mShowCombinedVolumes) {
             mMoreButton.setVisibility(View.GONE);
             mDivider.setVisibility(View.GONE);
         } else {
-            mMoreButton.setOnClickListener(this);
+            mMoreButton.setOnClickListener(mClickListener);
         }
 
-        boolean masterVolumeOnly = context.getResources().getBoolean(
-                com.android.internal.R.bool.config_useMasterVolume);
-        boolean masterVolumeKeySounds = mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_useVolumeKeySounds);
-
+        final boolean masterVolumeOnly = res.getBoolean(R.bool.config_useMasterVolume);
+        final boolean masterVolumeKeySounds = res.getBoolean(R.bool.config_useVolumeKeySounds);
         mPlayMasterStreamTones = masterVolumeOnly && masterVolumeKeySounds;
 
         listenToRingerMode();
@@ -347,7 +351,7 @@
         final IntentFilter filter = new IntentFilter();
         filter.addAction(AudioManager.RINGER_MODE_CHANGED_ACTION);
         mContext.registerReceiver(new BroadcastReceiver() {
-
+            @Override
             public void onReceive(Context context, Intent intent) {
                 final String action = intent.getAction();
 
@@ -400,17 +404,21 @@
     }
 
     private void createSliders() {
-        LayoutInflater inflater = (LayoutInflater) mContext
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+        final Resources res = mContext.getResources();
+        final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
+                Context.LAYOUT_INFLATER_SERVICE);
+
         mStreamControls = new HashMap<Integer, StreamControl>(STREAMS.length);
-        Resources res = mContext.getResources();
+
         for (int i = 0; i < STREAMS.length; i++) {
             StreamResources streamRes = STREAMS[i];
-            int streamType = streamRes.streamType;
+
+            final int streamType = streamRes.streamType;
             if (mVoiceCapable && streamRes == StreamResources.NotificationStream) {
                 streamRes = StreamResources.RingerStream;
             }
-            StreamControl sc = new StreamControl();
+
+            final StreamControl sc = new StreamControl();
             sc.streamType = streamType;
             sc.group = (ViewGroup) inflater.inflate(R.layout.volume_adjust_item, null);
             sc.group.setTag(sc);
@@ -421,10 +429,10 @@
             sc.iconMuteRes = streamRes.iconMuteRes;
             sc.icon.setImageResource(sc.iconRes);
             sc.seekbarView = (SeekBar) sc.group.findViewById(R.id.seekbar);
-            int plusOne = (streamType == AudioSystem.STREAM_BLUETOOTH_SCO ||
+            final int plusOne = (streamType == AudioSystem.STREAM_BLUETOOTH_SCO ||
                     streamType == AudioSystem.STREAM_VOICE_CALL) ? 1 : 0;
             sc.seekbarView.setMax(getStreamMaxVolume(streamType) + plusOne);
-            sc.seekbarView.setOnSeekBarChangeListener(this);
+            sc.seekbarView.setOnSeekBarChangeListener(mSeekListener);
             sc.seekbarView.setTag(sc);
             mStreamControls.put(streamType, sc);
         }
@@ -433,7 +441,7 @@
     private void reorderSliders(int activeStreamType) {
         mSliderGroup.removeAllViews();
 
-        StreamControl active = mStreamControls.get(activeStreamType);
+        final StreamControl active = mStreamControls.get(activeStreamType);
         if (active == null) {
             Log.e("VolumePanel", "Missing stream type! - " + activeStreamType);
             mActiveStreamType = -1;
@@ -486,10 +494,6 @@
         }
     }
 
-    private boolean isExpanded() {
-        return mMoreButton.getVisibility() != View.VISIBLE;
-    }
-
     private void expand() {
         final int count = mSliderGroup.getChildCount();
         for (int i = 0; i < count; i++) {
@@ -527,6 +531,7 @@
         obtainMessage(MSG_VOLUME_CHANGED, streamType, flags).sendToTarget();
     }
 
+    @Override
     public void postRemoteVolumeChanged(int streamType, int flags) {
         if (hasMessages(MSG_REMOTE_VOLUME_CHANGED)) return;
         synchronized (this) {
@@ -538,6 +543,7 @@
         obtainMessage(MSG_REMOTE_VOLUME_CHANGED, streamType, flags).sendToTarget();
     }
 
+    @Override
     public void postRemoteSliderVisibility(boolean visible) {
         obtainMessage(MSG_SLIDER_VISIBILITY_CHANGED,
                 AudioService.STREAM_REMOTE_MUSIC, visible ? 1 : 0).sendToTarget();
@@ -554,6 +560,7 @@
      * as a request to update the volume), the application will likely set a new volume. If the UI
      * is still up, we need to refresh the display to show this new value.
      */
+    @Override
     public void postHasNewRemotePlaybackInfo() {
         if (hasMessages(MSG_REMOTE_VOLUME_UPDATE_IF_SHOWN)) return;
         // don't create or prevent resources to be freed, if they disappear, this update came too
@@ -733,7 +740,7 @@
             int stream = (streamType == AudioService.STREAM_REMOTE_MUSIC) ? -1 : streamType;
             // when the stream is for remote playback, use -1 to reset the stream type evaluation
             mAudioManager.forceVolumeControlStream(stream);
-            mDialog.setContentView(mView);
+
             // Showing dialog - use collapsed state
             if (mShowCombinedVolumes) {
                 collapse();
@@ -787,7 +794,7 @@
             return;
         }
 
-        mVibrator.vibrate(VIBRATE_DURATION);
+        mVibrator.vibrate(VIBRATE_DURATION, AudioManager.STREAM_SYSTEM);
     }
 
     protected void onRemoteVolumeChanged(int streamType, int flags) {
@@ -865,6 +872,7 @@
                         .setMessage(com.android.internal.R.string.safe_media_volume_warning)
                         .setPositiveButton(com.android.internal.R.string.yes,
                                             new DialogInterface.OnClickListener() {
+                            @Override
                             public void onClick(DialogInterface dialog, int which) {
                                 mAudioService.disableSafeMediaVolume();
                             }
@@ -1021,39 +1029,48 @@
         sendMessage(obtainMessage(MSG_TIMEOUT));
     }
 
-    public void onProgressChanged(SeekBar seekBar, int progress,
-            boolean fromUser) {
-        final Object tag = seekBar.getTag();
-        if (fromUser && tag instanceof StreamControl) {
-            StreamControl sc = (StreamControl) tag;
-            if (getStreamVolume(sc.streamType) != progress) {
-                setStreamVolume(sc.streamType, progress, 0);
+    private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
+        @Override
+        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+            final Object tag = seekBar.getTag();
+            if (fromUser && tag instanceof StreamControl) {
+                StreamControl sc = (StreamControl) tag;
+                if (getStreamVolume(sc.streamType) != progress) {
+                    setStreamVolume(sc.streamType, progress, 0);
+                }
+            }
+            resetTimeout();
+        }
+
+        @Override
+        public void onStartTrackingTouch(SeekBar seekBar) {
+        }
+
+        @Override
+        public void onStopTrackingTouch(SeekBar seekBar) {
+            final Object tag = seekBar.getTag();
+            if (tag instanceof StreamControl) {
+                StreamControl sc = (StreamControl) tag;
+                // Because remote volume updates are asynchronous, AudioService
+                // might have received a new remote volume value since the
+                // finger adjusted the slider. So when the progress of the
+                // slider isn't being tracked anymore, adjust the slider to the
+                // last "published" remote volume value, so the UI reflects the
+                // actual volume.
+                if (sc.streamType == AudioService.STREAM_REMOTE_MUSIC) {
+                    seekBar.setProgress(getStreamVolume(AudioService.STREAM_REMOTE_MUSIC));
+                }
             }
         }
-        resetTimeout();
-    }
+    };
 
-    public void onStartTrackingTouch(SeekBar seekBar) {
-    }
-
-    public void onStopTrackingTouch(SeekBar seekBar) {
-        final Object tag = seekBar.getTag();
-        if (tag instanceof StreamControl) {
-            StreamControl sc = (StreamControl) tag;
-            // because remote volume updates are asynchronous, AudioService might have received
-            // a new remote volume value since the finger adjusted the slider. So when the
-            // progress of the slider isn't being tracked anymore, adjust the slider to the last
-            // "published" remote volume value, so the UI reflects the actual volume.
-            if (sc.streamType == AudioService.STREAM_REMOTE_MUSIC) {
-                seekBar.setProgress(getStreamVolume(AudioService.STREAM_REMOTE_MUSIC));
+    private final View.OnClickListener mClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            if (v == mMoreButton) {
+                expand();
             }
+            resetTimeout();
         }
-    }
-
-    public void onClick(View v) {
-        if (v == mMoreButton) {
-            expand();
-        }
-        resetTimeout();
-    }
+    };
 }
diff --git a/core/java/android/view/Window.java b/core/java/android/view/Window.java
index c450f3c..9c44bd1 100644
--- a/core/java/android/view/Window.java
+++ b/core/java/android/view/Window.java
@@ -16,6 +16,8 @@
 
 package android.view;
 
+import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
@@ -25,6 +27,9 @@
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.SystemProperties;
+import android.transition.Scene;
+import android.transition.Transition;
+import android.transition.TransitionManager;
 import android.view.accessibility.AccessibilityEvent;
 
 /**
@@ -89,17 +94,25 @@
      * If overlay is enabled, the action mode UI will be allowed to cover existing window content.
      */
     public static final int FEATURE_ACTION_MODE_OVERLAY = 10;
-
     /**
      * Flag for requesting a decoration-free window that is dismissed by swiping from the left.
      */
     public static final int FEATURE_SWIPE_TO_DISMISS = 11;
+    /**
+     * Flag for requesting that window content changes should be represented
+     * with scenes and transitions.
+     *
+     * TODO Add docs
+     *
+     * @see #setContentView
+     */
+    public static final int FEATURE_CONTENT_TRANSITIONS = 12;
 
     /**
      * Max value used as a feature ID
      * @hide
      */
-    public static final int FEATURE_MAX = FEATURE_SWIPE_TO_DISMISS;
+    public static final int FEATURE_MAX = FEATURE_CONTENT_TRANSITIONS;
 
     /** Flag for setting the progress bar's visibility to VISIBLE */
     public static final int PROGRESS_VISIBILITY_ON = -1;
@@ -245,6 +258,7 @@
          *
          * @see #onPreparePanel
          */
+        @Nullable
         public View onCreatePanelView(int featureId);
 
         /**
@@ -373,6 +387,7 @@
          * @param callback Callback to control the lifecycle of this action mode
          * @return The ActionMode that was started, or null if the system should present it
          */
+        @Nullable
         public ActionMode onWindowStartingActionMode(ActionMode.Callback callback);
 
         /**
@@ -980,6 +995,7 @@
      *
      * @return View The current View with focus or null.
      */
+    @Nullable
     public abstract View getCurrentFocus();
 
     /**
@@ -988,10 +1004,12 @@
      *
      * @return LayoutInflater The shared LayoutInflater.
      */
+    @NonNull
     public abstract LayoutInflater getLayoutInflater();
 
     public abstract void setTitle(CharSequence title);
 
+    @Deprecated
     public abstract void setTitleColor(int textColor);
 
     public abstract void openPanel(int featureId, KeyEvent event);
@@ -1032,7 +1050,7 @@
      */
     public void setBackgroundDrawableResource(int resid)
     {
-        setBackgroundDrawable(mContext.getResources().getDrawable(resid));
+        setBackgroundDrawable(mContext.getDrawable(resid));
     }
 
     /**
@@ -1328,4 +1346,169 @@
      * @param event A key or touch event to inject to this window.
      */
     public void injectInputEvent(InputEvent event) { }
+
+    /**
+     * Retrieve the {@link TransitionManager} responsible for  for default transitions
+     * in this window. Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * <p>This method will return non-null after content has been initialized (e.g. by using
+     * {@link #setContentView}) if {@link #FEATURE_CONTENT_TRANSITIONS} has been granted.</p>
+     *
+     * @return This window's content TransitionManager or null if none is set.
+     */
+    public TransitionManager getTransitionManager() {
+        return null;
+    }
+
+    /**
+     * Set the {@link TransitionManager} to use for default transitions in this window.
+     * Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * @param tm The TransitionManager to use for scene changes.
+     */
+    public void setTransitionManager(TransitionManager tm) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * Retrieve the {@link Scene} representing this window's current content.
+     * Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * <p>This method will return null if the current content is not represented by a Scene.</p>
+     *
+     * @return Current Scene being shown or null
+     */
+    public Scene getContentScene() {
+        return null;
+    }
+
+    /**
+     * Sets the Transition that will be used to move Views into the initial scene. The entering
+     * Views will be those that are regular Views or ViewGroups that have
+     * {@link ViewGroup#isTransitionGroup} return true. Typical Transitions will extend
+     * {@link android.transition.Visibility} as entering is governed by changing visibility from
+     * {@link View#INVISIBLE} to {@link View#VISIBLE}. If <code>transition</code> is null,
+     * entering Views will remain unaffected.
+     * @param transition The Transition to use to move Views into the initial Scene.
+     */
+    public void setEnterTransition(Transition transition) {}
+
+    /**
+     * Sets the Transition that will be used to move Views out of the scene when starting a
+     * new Activity. The exiting Views will be those that are regular Views or ViewGroups that
+     * have {@link ViewGroup#isTransitionGroup} return true. Typical Transitions will extend
+     * {@link android.transition.Visibility} as exiting is governed by changing visibility
+     * from {@link View#VISIBLE} to {@link View#INVISIBLE}. If transition is null, the views will
+     * remain unaffected. Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     * @param transition The Transition to use to move Views out of the scene when calling a
+     *                   new Activity.
+     */
+    public void setExitTransition(Transition transition) {}
+
+    /**
+     * Returns the transition used to move Views into the initial scene. The entering
+     * Views will be those that are regular Views or ViewGroups that have
+     * {@link ViewGroup#isTransitionGroup} return true. Typical Transitions will extend
+     * {@link android.transition.Visibility} as entering is governed by changing visibility from
+     * {@link View#INVISIBLE} to {@link View#VISIBLE}. If <code>transition</code> is null,
+     * entering Views will remain unaffected.  Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * @return the Transition to use to move Views into the initial Scene.
+     */
+    public Transition getEnterTransition() { return null; }
+
+    /**
+     * Returns the Transition that will be used to move Views out of the scene when starting a
+     * new Activity. The exiting Views will be those that are regular Views or ViewGroups that
+     * have {@link ViewGroup#isTransitionGroup} return true. Typical Transitions will extend
+     * {@link android.transition.Visibility} as exiting is governed by changing visibility
+     * from {@link View#VISIBLE} to {@link View#INVISIBLE}. If transition is null, the views will
+     * remain unaffected. Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     * @return the Transition to use to move Views out of the scene when calling a
+     * new Activity.
+     */
+    public Transition getExitTransition() { return null; }
+
+    /**
+     * Sets the Transition that will be used for shared elements transferred into the content
+     * Scene. Typical Transitions will affect size and location, such as
+     * {@link android.transition.MoveImage} and {@link android.transition.ChangeBounds}. A null
+     * value will cause transferred shared elements to blink to the final position.
+     * Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     * @param transition The Transition to use for shared elements transferred into the content
+     *                   Scene.
+     */
+    public void setSharedElementEnterTransition(Transition transition) {}
+
+    /**
+     * Returns the Transition that will be used for shared elements transferred into the content
+     * Scene. Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     * @return Transition to use for sharend elements transferred into the content Scene.
+     */
+    public Transition getSharedElementEnterTransition() { return null; }
+
+    /**
+     * Sets the Transition that will be used for shared elements after starting a new Activity
+     * before the shared elements are transferred to the called Activity. If the shared elements
+     * must animate during the exit transition, this Transition should be used. Upon completion,
+     * the shared elements may be transferred to the started Activity.
+     * Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     * @param transition The Transition to use for shared elements in the launching Window
+     *                   prior to transferring to the launched Activity's Window.
+     */
+    public void setSharedElementExitTransition(Transition transition) {}
+
+    /**
+     * Returns the Transition to use for shared elements in the launching Window prior
+     * to transferring to the launched Activity's Window.
+     * Requires {@link #FEATURE_CONTENT_TRANSITIONS}.
+     *
+     * @return the Transition to use for shared elements in the launching Window prior
+     * to transferring to the launched Activity's Window.
+     */
+    public Transition getSharedElementExitTransition() { return null; }
+
+    /**
+     * Controls how the transition set in
+     * {@link #setEnterTransition(android.transition.Transition)} overlaps with the exit
+     * transition of the calling Activity. When true, the transition will start as soon as possible.
+     * When false, the transition will wait until the remote exiting transition completes before
+     * starting.
+     * @param allow true to start the enter transition when possible or false to
+     *              wait until the exiting transition completes.
+     */
+    public void setAllowEnterTransitionOverlap(boolean allow) {}
+
+    /**
+     * Returns how the transition set in
+     * {@link #setEnterTransition(android.transition.Transition)} overlaps with the exit
+     * transition of the calling Activity. When true, the transition will start as soon as possible.
+     * When false, the transition will wait until the remote exiting transition completes before
+     * starting.
+     * @return true when the enter transition should start as soon as possible or false to
+     * when it should wait until the exiting transition completes.
+     */
+    public boolean getAllowEnterTransitionOverlap() { return true; }
+
+    /**
+     * Controls how the transition set in
+     * {@link #setExitTransition(android.transition.Transition)} overlaps with the exit
+     * transition of the called Activity when reentering after if finishes. When true,
+     * the transition will start as soon as possible. When false, the transition will wait
+     * until the called Activity's exiting transition completes before starting.
+     * @param allow true to start the transition when possible or false to wait until the
+     *              called Activity's exiting transition completes.
+     */
+    public void setAllowExitTransitionOverlap(boolean allow) {}
+
+    /**
+     * Returns how the transition set in
+     * {@link #setExitTransition(android.transition.Transition)} overlaps with the exit
+     * transition of the called Activity when reentering after if finishes. When true,
+     * the transition will start as soon as possible. When false, the transition will wait
+     * until the called Activity's exiting transition completes before starting.
+     * @return true when the transition should start when possible or false when it should wait
+     * until the called Activity's exiting transition completes.
+     */
+    public boolean getAllowExitTransitionOverlap() { return true; }
 }
diff --git a/core/java/android/view/WindowAnimationFrameStats.aidl b/core/java/android/view/WindowAnimationFrameStats.aidl
new file mode 100644
index 0000000..77f544b
--- /dev/null
+++ b/core/java/android/view/WindowAnimationFrameStats.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.view;
+
+parcelable WindowAnimationFrameStats;
diff --git a/core/java/android/view/WindowAnimationFrameStats.java b/core/java/android/view/WindowAnimationFrameStats.java
new file mode 100644
index 0000000..c60b96c
--- /dev/null
+++ b/core/java/android/view/WindowAnimationFrameStats.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2014 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 android.view;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * This class contains window animation frame statistics. For example, a window
+ * animation is usually performed when the application is transitioning from one
+ * activity to another. The frame statistics are a snapshot for the time interval
+ * from {@link #getStartTimeNano()} to {@link #getEndTimeNano()}.
+ * <p>
+ * The key idea is that in order to provide a smooth user experience the system should
+ * run window animations at a specific time interval obtained by calling {@link
+ * #getRefreshPeriodNano()}. If the system does not render a frame every refresh
+ * period the user will see irregular window transitions. The time when the frame was
+ * actually presented on the display by calling {@link #getFramePresentedTimeNano(int)}.
+ */
+public final class WindowAnimationFrameStats extends FrameStats implements Parcelable {
+    /**
+     * @hide
+     */
+    public WindowAnimationFrameStats() {
+        /* do nothing */
+    }
+
+    /**
+     * Initializes this isntance.
+     *
+     * @param refreshPeriodNano The display refresh period.
+     * @param framesPresentedTimeNano The presented frame times.
+     *
+     * @hide
+     */
+    public void init(long refreshPeriodNano, long[] framesPresentedTimeNano) {
+        mRefreshPeriodNano = refreshPeriodNano;
+        mFramesPresentedTimeNano = framesPresentedTimeNano;
+    }
+
+    private WindowAnimationFrameStats(Parcel parcel) {
+        mRefreshPeriodNano = parcel.readLong();
+        mFramesPresentedTimeNano = parcel.createLongArray();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeLong(mRefreshPeriodNano);
+        parcel.writeLongArray(mFramesPresentedTimeNano);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("WindowAnimationFrameStats[");
+        builder.append("frameCount:" + getFrameCount());
+        builder.append(", fromTimeNano:" + getStartTimeNano());
+        builder.append(", toTimeNano:" + getEndTimeNano());
+        builder.append(']');
+        return builder.toString();
+    }
+
+    public static final Creator<WindowAnimationFrameStats> CREATOR =
+            new Creator<WindowAnimationFrameStats>() {
+                @Override
+                public WindowAnimationFrameStats createFromParcel(Parcel parcel) {
+                    return new WindowAnimationFrameStats(parcel);
+                }
+
+                @Override
+                public WindowAnimationFrameStats[] newArray(int size) {
+                    return new WindowAnimationFrameStats[size];
+                }
+            };
+}
diff --git a/core/java/android/view/WindowContentFrameStats.aidl b/core/java/android/view/WindowContentFrameStats.aidl
new file mode 100644
index 0000000..aa9c2d6
--- /dev/null
+++ b/core/java/android/view/WindowContentFrameStats.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.view;
+
+parcelable WindowContentFrameStats;
diff --git a/core/java/android/view/WindowContentFrameStats.java b/core/java/android/view/WindowContentFrameStats.java
new file mode 100644
index 0000000..c6da2fb
--- /dev/null
+++ b/core/java/android/view/WindowContentFrameStats.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2014 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 android.view;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * This class contains window content frame statistics. For example, a window content
+ * is rendred in frames when a view is scrolled. The frame statistics are a snapshot
+ * for the time interval from {@link #getStartTimeNano()} to {@link #getEndTimeNano()}.
+ * <p>
+ * The key idea is that in order to provide a smooth user experience an application
+ * has to draw a frame at a specific time interval obtained by calling {@link
+ * #getRefreshPeriodNano()}. If the application does not render a frame every refresh
+ * period the user will see irregular UI transitions.
+ * </p>
+ * <p>
+ * An application posts a frame for presentation by synchronously rendering its contents
+ * in a buffer which is then posted or posting a buffer to which the application is
+ * asychronously rendering the content via GL. After the frame is posted and rendered
+ * (potentially asynchronosly) it is presented to the user. The time a frame was posted
+ * can be obtained via {@link #getFramePostedTimeNano(int)}, the time a frame content
+ * was rendered and ready for dsiplay (GL case) via {@link #getFrameReadyTimeNano(int)},
+ * and the time a frame was presented on the screen via {@link #getFramePresentedTimeNano(int)}.
+ * </p>
+ */
+public final class WindowContentFrameStats extends FrameStats implements Parcelable {
+    private long[] mFramesPostedTimeNano;
+    private long[] mFramesReadyTimeNano;
+
+    /**
+     * @hide
+     */
+    public WindowContentFrameStats() {
+        /* do nothing */
+    }
+
+    /**
+     * Initializes this isntance.
+     *
+     * @param refreshPeriodNano The display refresh period.
+     * @param framesPostedTimeNano The times in milliseconds for when the frame contents were posted.
+     * @param framesPresentedTimeNano The times in milliseconds for when the frame contents were presented.
+     * @param framesReadyTimeNano The times in milliseconds for when the frame contents were ready to be presented.
+     *
+     * @hide
+     */
+    public void init(long refreshPeriodNano, long[] framesPostedTimeNano,
+            long[] framesPresentedTimeNano, long[] framesReadyTimeNano) {
+        mRefreshPeriodNano = refreshPeriodNano;
+        mFramesPostedTimeNano = framesPostedTimeNano;
+        mFramesPresentedTimeNano = framesPresentedTimeNano;
+        mFramesReadyTimeNano = framesReadyTimeNano;
+    }
+
+    private WindowContentFrameStats(Parcel parcel) {
+        mRefreshPeriodNano = parcel.readLong();
+        mFramesPostedTimeNano = parcel.createLongArray();
+        mFramesPresentedTimeNano = parcel.createLongArray();
+        mFramesReadyTimeNano = parcel.createLongArray();
+    }
+
+    /**
+     * Get the time a frame at a given index was posted by the producer (e.g. the application).
+     * It is either explicitly set or defaulted to the time when the render buffer was posted.
+     * <p>
+     * <strong>Note:</strong> A frame can be posted and still it contents being rendered
+     * asynchronously in GL. To get the time the frame content was completely rendered and
+     * ready to display call {@link #getFrameReadyTimeNano(int)}.
+     * </p>
+     *
+     * @param index The frame index.
+     * @return The posted time in nanoseconds.
+     */
+    public long getFramePostedTimeNano(int index) {
+        if (mFramesPostedTimeNano == null) {
+            throw new IndexOutOfBoundsException();
+        }
+        return mFramesPostedTimeNano[index];
+    }
+
+    /**
+     * Get the time a frame at a given index was ready for presentation.
+     * <p>
+     * <strong>Note:</strong> A frame can be posted and still it contents being rendered
+     * asynchronously in GL. In such a case this is the time when the frame contents were
+     * completely rendered.
+     * </p>
+     *
+     * @param index The frame index.
+     * @return The ready time in nanoseconds or {@link #UNDEFINED_TIME_NANO}
+     *         if the frame is not ready yet.
+     */
+    public long getFrameReadyTimeNano(int index) {
+        if (mFramesReadyTimeNano == null) {
+            throw new IndexOutOfBoundsException();
+        }
+        return mFramesReadyTimeNano[index];
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeLong(mRefreshPeriodNano);
+        parcel.writeLongArray(mFramesPostedTimeNano);
+        parcel.writeLongArray(mFramesPresentedTimeNano);
+        parcel.writeLongArray(mFramesReadyTimeNano);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("WindowContentFrameStats[");
+        builder.append("frameCount:" + getFrameCount());
+        builder.append(", fromTimeNano:" + getStartTimeNano());
+        builder.append(", toTimeNano:" + getEndTimeNano());
+        builder.append(']');
+        return builder.toString();
+    }
+
+    public static final Parcelable.Creator<WindowContentFrameStats> CREATOR =
+            new Creator<WindowContentFrameStats>() {
+                @Override
+                public WindowContentFrameStats createFromParcel(Parcel parcel) {
+                    return new WindowContentFrameStats(parcel);
+                }
+
+                @Override
+                public WindowContentFrameStats[] newArray(int size) {
+                    return new WindowContentFrameStats[size];
+                }
+            };
+}
diff --git a/core/java/android/view/WindowInfo.aidl b/core/java/android/view/WindowInfo.aidl
new file mode 100644
index 0000000..75b8fd2
--- /dev/null
+++ b/core/java/android/view/WindowInfo.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.view;
+
+parcelable WindowInfo;
diff --git a/core/java/android/view/WindowInfo.java b/core/java/android/view/WindowInfo.java
new file mode 100644
index 0000000..7f89044
--- /dev/null
+++ b/core/java/android/view/WindowInfo.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2014 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 android.view;
+
+import android.graphics.Rect;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Pools;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * This class represents information about a window from the
+ * window manager to another part of the system.
+ *
+ * @hide
+ */
+public class WindowInfo implements Parcelable {
+    private static final int MAX_POOL_SIZE = 10;
+
+    private static final Pools.SynchronizedPool<WindowInfo> sPool =
+            new Pools.SynchronizedPool<WindowInfo>(MAX_POOL_SIZE);
+
+    public int type;
+    public int layer;
+    public IBinder token;
+    public IBinder parentToken;
+    public boolean focused;
+    public final Rect boundsInScreen = new Rect();
+    public List<IBinder> childTokens;
+
+    private WindowInfo() {
+        /* do nothing - hide constructor */
+    }
+
+    public static WindowInfo obtain() {
+        WindowInfo window = sPool.acquire();
+        if (window == null) {
+            window = new WindowInfo();
+        }
+        return window;
+    }
+
+    public static WindowInfo obtain(WindowInfo other) {
+        WindowInfo window = obtain();
+        window.type = other.type;
+        window.layer = other.layer;
+        window.token = other.token;
+        window.parentToken = other.parentToken;
+        window.focused = other.focused;
+        window.boundsInScreen.set(other.boundsInScreen);
+
+        if (other.childTokens != null && !other.childTokens.isEmpty()) {
+            if (window.childTokens == null) {
+                window.childTokens = new ArrayList<IBinder>(other.childTokens);
+            } else {
+                window.childTokens.addAll(other.childTokens);
+            }
+        }
+
+        return window;
+    }
+
+    public void recycle() {
+        clear();
+        sPool.release(this);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeInt(type);
+        parcel.writeInt(layer);
+        parcel.writeStrongBinder(token);
+        parcel.writeStrongBinder(parentToken);
+        parcel.writeInt(focused ? 1 : 0);
+        boundsInScreen.writeToParcel(parcel, flags);
+
+        if (childTokens != null && !childTokens.isEmpty()) {
+            parcel.writeInt(1);
+            parcel.writeBinderList(childTokens);
+        } else {
+            parcel.writeInt(0);
+        }
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("WindowInfo[");
+        builder.append("type=").append(type);
+        builder.append(", layer=").append(layer);
+        builder.append(", token=").append(token);
+        builder.append(", parent=").append(parentToken);
+        builder.append(", focused=").append(focused);
+        builder.append(", children=").append(childTokens);
+        builder.append(']');
+        return builder.toString();
+    }
+
+    private void initFromParcel(Parcel parcel) {
+        type = parcel.readInt();
+        layer = parcel.readInt();
+        token = parcel.readStrongBinder();
+        parentToken = parcel.readStrongBinder();
+        focused = (parcel.readInt() == 1);
+        boundsInScreen.readFromParcel(parcel);
+
+        final boolean hasChildren = (parcel.readInt() == 1);
+        if (hasChildren) {
+            if (childTokens == null) {
+                childTokens = new ArrayList<IBinder>();
+            }
+            parcel.readBinderList(childTokens);
+        }
+    }
+
+    private void clear() {
+        type = 0;
+        layer = 0;
+        token = null;
+        parentToken = null;
+        focused = false;
+        boundsInScreen.setEmpty();
+        if (childTokens != null) {
+            childTokens.clear();
+        }
+    }
+
+    public static final Parcelable.Creator<WindowInfo> CREATOR =
+            new Creator<WindowInfo>() {
+        @Override
+        public WindowInfo createFromParcel(Parcel parcel) {
+            WindowInfo window = obtain();
+            window.initFromParcel(parcel);
+            return window;
+        }
+
+        @Override
+        public WindowInfo[] newArray(int size) {
+            return new WindowInfo[size];
+        }
+    };
+}
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index d5a7d33..032a82f 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -49,7 +49,7 @@
 public interface WindowManager extends ViewManager {
     /**
      * Exception that is thrown when trying to add view whose
-     * {@link WindowManager.LayoutParams} {@link WindowManager.LayoutParams#token}
+     * {@link LayoutParams} {@link LayoutParams#token}
      * is invalid.
      */
     public static class BadTokenException extends RuntimeException {
@@ -173,7 +173,6 @@
          * @see #TYPE_SEARCH_BAR
          * @see #TYPE_PHONE
          * @see #TYPE_SYSTEM_ALERT
-         * @see #TYPE_KEYGUARD
          * @see #TYPE_TOAST
          * @see #TYPE_SYSTEM_OVERLAY
          * @see #TYPE_PRIORITY_PHONE
@@ -197,7 +196,6 @@
             @ViewDebug.IntToString(from = TYPE_SEARCH_BAR, to = "TYPE_SEARCH_BAR"),
             @ViewDebug.IntToString(from = TYPE_PHONE, to = "TYPE_PHONE"),
             @ViewDebug.IntToString(from = TYPE_SYSTEM_ALERT, to = "TYPE_SYSTEM_ALERT"),
-            @ViewDebug.IntToString(from = TYPE_KEYGUARD, to = "TYPE_KEYGUARD"),
             @ViewDebug.IntToString(from = TYPE_TOAST, to = "TYPE_TOAST"),
             @ViewDebug.IntToString(from = TYPE_SYSTEM_OVERLAY, to = "TYPE_SYSTEM_OVERLAY"),
             @ViewDebug.IntToString(from = TYPE_PRIORITY_PHONE, to = "TYPE_PRIORITY_PHONE"),
@@ -341,13 +339,13 @@
          * In multiuser systems shows only on the owning user's window.
          */
         public static final int TYPE_SYSTEM_ALERT       = FIRST_SYSTEM_WINDOW+3;
-        
+
         /**
          * Window type: keyguard window.
          * In multiuser systems shows on all users' windows.
          */
         public static final int TYPE_KEYGUARD           = FIRST_SYSTEM_WINDOW+4;
-        
+
         /**
          * Window type: transient notifications.
          * In multiuser systems shows only on the owning user's window.
@@ -916,7 +914,6 @@
          */
         public static final int FLAG_NEEDS_MENU_KEY = 0x40000000;
 
-
         /**
          * Various behavioral options/flags.  Default is none.
          * 
@@ -1090,6 +1087,14 @@
         public static final int PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR = 0x00000200;
 
         /**
+         * Flag whether the current window is a keyguard window, meaning that it will hide all other
+         * windows behind it except for windows with flag {@link #FLAG_SHOW_WHEN_LOCKED} set.
+         * Further, this can only be set by {@link LayoutParams#TYPE_STATUS_BAR}.
+         * {@hide}
+         */
+        public static final int PRIVATE_FLAG_KEYGUARD = 0x00000400;
+
+        /**
          * Control flags that are private to the platform.
          * @hide
          */
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java
index a1bd4bd..14dc356 100644
--- a/core/java/android/view/WindowManagerInternal.java
+++ b/core/java/android/view/WindowManagerInternal.java
@@ -16,7 +16,12 @@
 
 package android.view;
 
+import android.graphics.Rect;
+import android.graphics.Region;
 import android.hardware.display.DisplayManagerInternal;
+import android.os.IBinder;
+
+import java.util.List;
 
 /**
  * Window manager local system service interface.
@@ -24,10 +29,136 @@
  * @hide Only for use within the system server.
  */
 public abstract class WindowManagerInternal {
+
+    /**
+     * Interface to receive a callback when the windows reported for
+     * accessibility changed.
+     */
+    public interface WindowsForAccessibilityCallback {
+
+        /**
+         * Called when the windows for accessibility changed.
+         *
+         * @param windows The windows for accessibility.
+         */
+        public void onWindowsForAccessibilityChanged(List<WindowInfo> windows);
+    }
+
+    /**
+     * Callbacks for contextual changes that affect the screen magnification
+     * feature.
+     */
+    public interface MagnificationCallbacks {
+
+        /**
+         * Called when the bounds of the screen content that is magnified changed.
+         * Note that not the entire screen is magnified.
+         *
+         * @param bounds The bounds.
+         */
+        public void onMagnifedBoundsChanged(Region bounds);
+
+        /**
+         * Called when an application requests a rectangle on the screen to allow
+         * the client to apply the appropriate pan and scale.
+         *
+         * @param left The rectangle left.
+         * @param top The rectangle top.
+         * @param right The rectangle right.
+         * @param bottom The rectangle bottom.
+         */
+        public void onRectangleOnScreenRequested(int left, int top, int right, int bottom);
+
+        /**
+         * Notifies that the rotation changed.
+         *
+         * @param rotation The current rotation.
+         */
+        public void onRotationChanged(int rotation);
+
+        /**
+         * Notifies that the context of the user changed. For example, an application
+         * was started.
+         */
+        public void onUserContextChanged();
+    }
+
     /**
      * Request that the window manager call
      * {@link DisplayManagerInternal#performTraversalInTransactionFromWindowManager}
      * within a surface transaction at a later time.
      */
     public abstract void requestTraversalFromDisplayManager();
-}
\ No newline at end of file
+
+    /**
+     * Set by the accessibility layer to observe changes in the magnified region,
+     * rotation, and other window transformations related to display magnification
+     * as the window manager is responsible for doing the actual magnification
+     * and has access to the raw window data while the accessibility layer serves
+     * as a controller.
+     *
+     * @param callbacks The callbacks to invoke.
+     */
+    public abstract void setMagnificationCallbacks(MagnificationCallbacks callbacks);
+
+    /**
+     * Set by the accessibility layer to specify the magnification and panning to
+     * be applied to all windows that should be magnified.
+     *
+     * @param callbacks The callbacks to invoke.
+     *
+     * @see #setMagnificationCallbacks(MagnificationCallbacks)
+     */
+    public abstract void setMagnificationSpec(MagnificationSpec spec);
+
+    /**
+     * Gets the magnification and translation applied to a window given its token.
+     * Not all windows are magnified and the window manager policy determines which
+     * windows are magnified. The returned result also takes into account the compat
+     * scale if necessary.
+     *
+     * @param windowToken The window's token.
+     *
+     * @return The magnification spec for the window.
+     *
+     * @see #setMagnificationCallbacks(MagnificationCallbacks)
+     */
+    public abstract MagnificationSpec getCompatibleMagnificationSpecForWindow(
+            IBinder windowToken);
+
+    /**
+     * Sets a callback for observing which windows are touchable for the purposes
+     * of accessibility.
+     *
+     * @param callback The callback.
+     */
+    public abstract void setWindowsForAccessibilityCallback(
+            WindowsForAccessibilityCallback callback);
+
+    /**
+     * Sets a filter for manipulating the input event stream.
+     *
+     * @param filter The filter implementation.
+     */
+    public abstract void setInputFilter(IInputFilter filter);
+
+    /**
+     * Gets the token of the window that has input focus.
+     *
+     * @return The token.
+     */
+    public abstract IBinder getFocusedWindowToken();
+
+    /**
+     * @return Whether the keyguard is engaged.
+     */
+    public abstract boolean isKeyguardLocked();
+
+    /**
+     * Gets the frame of a window given its token.
+     *
+     * @param token The token.
+     * @param outBounds The frame to populate.
+     */
+    public abstract void getWindowFrame(IBinder token, Rect outBounds);
+}
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index ae7cd26..4fde1e4 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -16,7 +16,9 @@
 
 package android.view;
 
+import android.annotation.IntDef;
 import android.content.Context;
+import android.content.pm.ActivityInfo;
 import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
 import android.graphics.Rect;
@@ -27,6 +29,8 @@
 import android.view.animation.Animation;
 
 import java.io.PrintWriter;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 
 /**
  * This interface supplies all UI-specific behavior of the window manager.  An
@@ -72,14 +76,7 @@
 public interface WindowManagerPolicy {
     // Policy flags.  These flags are also defined in frameworks/base/include/ui/Input.h.
     public final static int FLAG_WAKE = 0x00000001;
-    public final static int FLAG_WAKE_DROPPED = 0x00000002;
-    public final static int FLAG_SHIFT = 0x00000004;
-    public final static int FLAG_CAPS_LOCK = 0x00000008;
-    public final static int FLAG_ALT = 0x00000010;
-    public final static int FLAG_ALT_GR = 0x00000020;
-    public final static int FLAG_MENU = 0x00000040;
-    public final static int FLAG_LAUNCHER = 0x00000080;
-    public final static int FLAG_VIRTUAL = 0x00000100;
+    public final static int FLAG_VIRTUAL = 0x00000002;
 
     public final static int FLAG_INJECTED = 0x01000000;
     public final static int FLAG_TRUSTED = 0x02000000;
@@ -447,6 +444,11 @@
     /** Screen turned off because of timeout */
     public final int OFF_BECAUSE_OF_TIMEOUT = 3;
 
+    /** @hide */
+    @IntDef({USER_ROTATION_FREE, USER_ROTATION_LOCKED})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface UserRotationMode {}
+
     /** When not otherwise specified by the activity's screenOrientation, rotation should be
      * determined by the system (that is, using sensors). */
     public final int USER_ROTATION_FREE = 0;
@@ -994,6 +996,14 @@
     public void dismissKeyguardLw();
 
     /**
+     * Ask the policy whether the Keyguard has drawn. If the Keyguard is disabled, this method
+     * returns true as soon as we know that Keyguard is disabled.
+     *
+     * @return true if the keyguard has drawn.
+     */
+    public boolean isKeyguardDrawnLw();
+
+    /**
      * Given an orientation constant, returns the appropriate surface rotation,
      * taking into account sensors, docking mode, rotation lock, and other factors.
      *
@@ -1002,7 +1012,8 @@
      * @param lastRotation The most recently used rotation.
      * @return The surface rotation to use.
      */
-    public int rotationForOrientationLw(int orientation, int lastRotation);
+    public int rotationForOrientationLw(@ActivityInfo.ScreenOrientation int orientation,
+            int lastRotation);
 
     /**
      * Given an orientation constant and a rotation, returns true if the rotation
@@ -1017,7 +1028,8 @@
      * @param rotation The rotation to check.
      * @return True if the rotation is compatible with the requested orientation.
      */
-    public boolean rotationHasCompatibleMetricsLw(int orientation, int rotation);
+    public boolean rotationHasCompatibleMetricsLw(@ActivityInfo.ScreenOrientation int orientation,
+            int rotation);
 
     /**
      * Called by the window manager when the rotation changes.
@@ -1066,7 +1078,7 @@
      */
     public void enableScreenAfterBoot();
     
-    public void setCurrentOrientationLw(int newOrientation);
+    public void setCurrentOrientationLw(@ActivityInfo.ScreenOrientation int newOrientation);
     
     /**
      * Call from application to perform haptic feedback on its window.
@@ -1093,6 +1105,7 @@
      * @see WindowManagerPolicy#USER_ROTATION_LOCKED
      * @see WindowManagerPolicy#USER_ROTATION_FREE 
      */
+    @UserRotationMode
     public int getUserRotationMode();
 
     /**
@@ -1103,12 +1116,12 @@
      * @param rotation One of {@link Surface#ROTATION_0}, {@link Surface#ROTATION_90},
      *                 {@link Surface#ROTATION_180}, {@link Surface#ROTATION_270}.
      */
-    public void setUserRotationMode(int mode, int rotation);
+    public void setUserRotationMode(@UserRotationMode int mode, @Surface.Rotation int rotation);
 
     /**
      * Called when a new system UI visibility is being reported, allowing
      * the policy to adjust what is actually reported.
-     * @param visibility The raw visiblity reported by the status bar.
+     * @param visibility The raw visibility reported by the status bar.
      * @return The new desired visibility.
      */
     public int adjustSystemUiVisibilityLw(int visibility);
@@ -1131,6 +1144,11 @@
     public void setLastInputMethodWindowLw(WindowState ime, WindowState target);
 
     /**
+     * @return The current height of the input method window.
+     */
+    public int getInputMethodWindowVisibleHeightLw();
+
+    /**
      * Called when the current user changes. Guaranteed to be called before the broadcast
      * of the new user id is made to all listeners.
      *
@@ -1166,11 +1184,4 @@
      * @return True if the window is a top level one.
      */
     public boolean isTopLevelWindow(int windowType);
-
-    /**
-     * Sets the current touch exploration state.
-     *
-     * @param enabled Whether touch exploration is enabled.
-     */
-    public void setTouchExplorationEnabled(boolean enabled);
 }
diff --git a/core/java/android/view/accessibility/AccessibilityCache.java b/core/java/android/view/accessibility/AccessibilityCache.java
new file mode 100644
index 0000000..77d48e2
--- /dev/null
+++ b/core/java/android/view/accessibility/AccessibilityCache.java
@@ -0,0 +1,467 @@
+/*
+ * 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 android.view.accessibility;
+
+import android.os.Build;
+import android.util.ArraySet;
+import android.util.Log;
+import android.util.LongArray;
+import android.util.LongSparseArray;
+import android.util.SparseArray;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Cache for AccessibilityWindowInfos and AccessibilityNodeInfos.
+ * It is updated when windows change or nodes change.
+ */
+final class AccessibilityCache {
+
+    private static final String LOG_TAG = "AccessibilityCache";
+
+    private static final boolean DEBUG = false;
+
+    private static final boolean CHECK_INTEGRITY = Build.IS_DEBUGGABLE;
+
+    private final Object mLock = new Object();
+
+    private final LongArray mTempLongArray = new LongArray();
+
+    private final SparseArray<AccessibilityWindowInfo> mWindowCache =
+            new SparseArray<AccessibilityWindowInfo>();
+
+    private final SparseArray<LongSparseArray<AccessibilityNodeInfo>> mNodeCache =
+            new SparseArray<LongSparseArray<AccessibilityNodeInfo>>();
+
+    private final SparseArray<AccessibilityWindowInfo> mTempWindowArray =
+            new SparseArray<AccessibilityWindowInfo>();
+
+    public void addWindow(AccessibilityWindowInfo window) {
+        synchronized (mLock) {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Caching window: " + window.getId());
+            }
+            mWindowCache.put(window.getId(), window);
+        }
+    }
+
+    public void removeWindows(int[] windowIds) {
+        synchronized (mLock) {
+            final int windowCount = windowIds.length;
+            for (int i = 0; i < windowCount; i++) {
+                final int windowId = windowIds[i];
+                AccessibilityWindowInfo window = mWindowCache.get(windowId);
+                if (window != null) {
+                    if (DEBUG) {
+                        Log.i(LOG_TAG, "Removing window: " + windowId);
+                    }
+                    window.recycle();
+                    mWindowCache.remove(windowId);
+                }
+                clearNodesForWindowLocked(windowIds[i]);
+            }
+        }
+    }
+
+    /**
+     * Notifies the cache that the something in the UI changed. As a result
+     * the cache will either refresh some nodes or evict some nodes.
+     *
+     * @param event An event.
+     */
+    public void onAccessibilityEvent(AccessibilityEvent event) {
+        synchronized (mLock) {
+            final int eventType = event.getEventType();
+            switch (eventType) {
+                case AccessibilityEvent.TYPE_VIEW_FOCUSED:
+                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED:
+                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED:
+                case AccessibilityEvent.TYPE_VIEW_SELECTED:
+                case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
+                case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED: {
+                    refreshCachedNodeLocked(event.getWindowId(), event.getSourceNodeId());
+                } break;
+
+                case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: {
+                    synchronized (mLock) {
+                        final int windowId = event.getWindowId();
+                        final long sourceId = event.getSourceNodeId();
+                        if ((event.getContentChangeTypes()
+                                & AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE) != 0) {
+                            clearSubTreeLocked(windowId, sourceId);
+                        } else {
+                            refreshCachedNodeLocked(windowId, sourceId);
+                        }
+                    }
+                } break;
+
+                case AccessibilityEvent.TYPE_VIEW_SCROLLED: {
+                    clearSubTreeLocked(event.getWindowId(), event.getSourceNodeId());
+                } break;
+            }
+        }
+
+        if (CHECK_INTEGRITY) {
+            checkIntegrity();
+        }
+    }
+
+    private void refreshCachedNodeLocked(int windowId, long sourceId) {
+        if (DEBUG) {
+            Log.i(LOG_TAG, "Refreshing cached node.");
+        }
+
+        LongSparseArray<AccessibilityNodeInfo> nodes = mNodeCache.get(windowId);
+        if (nodes == null) {
+            return;
+        }
+        AccessibilityNodeInfo cachedInfo = nodes.get(sourceId);
+        // If the source is not in the cache - nothing to do.
+        if (cachedInfo == null) {
+            return;
+        }
+        // The node changed so we will just refresh it right now.
+        if (cachedInfo.refresh(true)) {
+            return;
+        }
+        // Weird, we could not refresh. Just evict the entire sub-tree.
+        clearSubTreeLocked(windowId, sourceId);
+    }
+
+    /**
+     * Gets a cached {@link AccessibilityNodeInfo} given the id of the hosting
+     * window and the accessibility id of the node.
+     *
+     * @param windowId The id of the window hosting the node.
+     * @param accessibilityNodeId The info accessibility node id.
+     * @return The cached {@link AccessibilityNodeInfo} or null if such not found.
+     */
+    public AccessibilityNodeInfo getNode(int windowId, long accessibilityNodeId) {
+        synchronized(mLock) {
+            LongSparseArray<AccessibilityNodeInfo> nodes = mNodeCache.get(windowId);
+            if (nodes == null) {
+                return null;
+            }
+            AccessibilityNodeInfo info = nodes.get(accessibilityNodeId);
+            if (info != null) {
+                // Return a copy since the client calls to AccessibilityNodeInfo#recycle()
+                // will wipe the data of the cached info.
+                info = AccessibilityNodeInfo.obtain(info);
+            }
+            if (DEBUG) {
+                Log.i(LOG_TAG, "get(" + accessibilityNodeId + ") = " + info);
+            }
+            return info;
+        }
+    }
+
+    public List<AccessibilityWindowInfo> getWindows() {
+        synchronized (mLock) {
+            final int windowCount = mWindowCache.size();
+            if (windowCount > 0) {
+                // Careful to return the windows in a decreasing layer order.
+                SparseArray<AccessibilityWindowInfo> sortedWindows = mTempWindowArray;
+                sortedWindows.clear();
+
+                for (int i = 0; i < windowCount; i++) {
+                    AccessibilityWindowInfo window = mWindowCache.valueAt(i);
+                    sortedWindows.put(window.getLayer(), window);
+                }
+
+                List<AccessibilityWindowInfo> windows = new ArrayList<AccessibilityWindowInfo>();
+                for (int i = windowCount - 1; i >= 0; i--) {
+                    AccessibilityWindowInfo window = sortedWindows.valueAt(i);
+                    windows.add(AccessibilityWindowInfo.obtain(window));
+                }
+
+                sortedWindows.clear();
+
+                return windows;
+            }
+            return null;
+        }
+    }
+
+    public AccessibilityWindowInfo getWindow(int windowId) {
+        synchronized (mLock) {
+            AccessibilityWindowInfo window = mWindowCache.get(windowId);
+            if (window != null) {
+               return AccessibilityWindowInfo.obtain(window);
+            }
+            return null;
+        }
+    }
+
+    /**
+     * Caches an {@link AccessibilityNodeInfo}.
+     *
+     * @param info The node to cache.
+     */
+    public void add(AccessibilityNodeInfo info) {
+        synchronized(mLock) {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "add(" + info + ")");
+            }
+
+            final int windowId = info.getWindowId();
+            LongSparseArray<AccessibilityNodeInfo> nodes = mNodeCache.get(windowId);
+            if (nodes == null) {
+                nodes = new LongSparseArray<AccessibilityNodeInfo>();
+                mNodeCache.put(windowId, nodes);
+            }
+
+            final long sourceId = info.getSourceNodeId();
+            AccessibilityNodeInfo oldInfo = nodes.get(sourceId);
+            if (oldInfo != null) {
+                // If the added node is in the cache we have to be careful if
+                // the new one represents a source state where some of the
+                // children have been removed to remove the descendants that
+                // are no longer present.
+                final LongArray newChildrenIds = info.getChildNodeIds();
+                if (newChildrenIds != null) {
+                    // Cache the new ids as we will do some lookups.
+                    LongArray newChildNodeIds = mTempLongArray;
+                    final int newChildCount = newChildNodeIds.size();
+                    for (int i = 0; i < newChildCount; i++) {
+                        newChildNodeIds.add(newChildrenIds.get(i));
+                    }
+
+                    final int oldChildCount = oldInfo.getChildCount();
+                    for (int i = 0; i < oldChildCount; i++) {
+                        final long oldChildId = oldInfo.getChildId(i);
+                        if (newChildNodeIds.indexOf(oldChildId) < 0) {
+                            clearSubTreeLocked(windowId, oldChildId);
+                        }
+                    }
+
+                    newChildNodeIds.clear();
+                }
+
+                // Also be careful if the parent has changed since the new
+                // parent may be a predecessor of the old parent which will
+                // add cyclse to the cache.
+                final long oldParentId = oldInfo.getParentNodeId();
+                if (info.getParentNodeId() != oldParentId) {
+                    clearSubTreeLocked(windowId, oldParentId);
+                }
+           }
+
+            // Cache a copy since the client calls to AccessibilityNodeInfo#recycle()
+            // will wipe the data of the cached info.
+            AccessibilityNodeInfo clone = AccessibilityNodeInfo.obtain(info);
+            nodes.put(sourceId, clone);
+        }
+    }
+
+    /**
+     * Clears the cache.
+     */
+    public void clear() {
+        synchronized(mLock) {
+            if (DEBUG) {
+                Log.i(LOG_TAG, "clear()");
+            }
+            final int windowCount = mWindowCache.size();
+            for (int i = windowCount - 1; i >= 0; i--) {
+                AccessibilityWindowInfo window = mWindowCache.valueAt(i);
+                window.recycle();
+                mWindowCache.removeAt(i);
+            }
+            final int nodesForWindowCount = mNodeCache.size();
+            for (int i = 0; i < nodesForWindowCount; i++) {
+                final int windowId = mNodeCache.keyAt(i);
+                clearNodesForWindowLocked(windowId);
+            }
+        }
+    }
+
+    private void clearNodesForWindowLocked(int windowId) {
+        if (DEBUG) {
+            Log.i(LOG_TAG, "clearWindowLocked(" + windowId + ")");
+        }
+        LongSparseArray<AccessibilityNodeInfo> nodes = mNodeCache.get(windowId);
+        if (nodes == null) {
+            return;
+        }
+        // Recycle the nodes before clearing the cache.
+        final int nodeCount = nodes.size();
+        for (int i = nodeCount - 1; i >= 0; i--) {
+            AccessibilityNodeInfo info = nodes.valueAt(i);
+            nodes.removeAt(i);
+            info.recycle();
+        }
+        mNodeCache.remove(windowId);
+    }
+
+    /**
+     * Clears a subtree rooted at the node with the given id that is
+     * hosted in a given window.
+     *
+     * @param windowId The id of the hosting window.
+     * @param rootNodeId The root id.
+     */
+    private void clearSubTreeLocked(int windowId, long rootNodeId) {
+        if (DEBUG) {
+            Log.i(LOG_TAG, "Clearing cached subtree.");
+        }
+        LongSparseArray<AccessibilityNodeInfo> nodes = mNodeCache.get(windowId);
+        if (nodes != null) {
+            clearSubTreeRecursiveLocked(nodes, rootNodeId);
+        }
+    }
+
+    /**
+     * Clears a subtree given a pointer to the root id and the nodes
+     * in the hosting window.
+     *
+     * @param nodes The nodes in the hosting window.
+     * @param rootNodeId The id of the root to evict.
+     */
+    private void clearSubTreeRecursiveLocked(LongSparseArray<AccessibilityNodeInfo> nodes,
+            long rootNodeId) {
+        AccessibilityNodeInfo current = nodes.get(rootNodeId);
+        if (current == null) {
+            return;
+        }
+        nodes.remove(rootNodeId);
+        final int childCount = current.getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            final long childNodeId = current.getChildId(i);
+            clearSubTreeRecursiveLocked(nodes, childNodeId);
+        }
+    }
+
+    /**
+     * Check the integrity of the cache which is nodes from different windows
+     * are not mixed, there is a single active window, there is a single focused
+     * window, for every window there are no duplicates nodes, all nodes for a
+     * window are connected, for every window there is a single input focused
+     * node, and for every window there is a single accessibility focused node.
+     */
+    public void checkIntegrity() {
+        synchronized (mLock) {
+            // Get the root.
+            if (mWindowCache.size() <= 0 && mNodeCache.size() == 0) {
+                return;
+            }
+
+            AccessibilityWindowInfo focusedWindow = null;
+            AccessibilityWindowInfo activeWindow = null;
+
+            final int windowCount = mWindowCache.size();
+            for (int i = 0; i < windowCount; i++) {
+                AccessibilityWindowInfo window = mWindowCache.valueAt(i);
+
+                // Check for one active window.
+                if (window.isActive()) {
+                    if (activeWindow != null) {
+                        Log.e(LOG_TAG, "Duplicate active window:" + window);
+                    } else {
+                        activeWindow = window;
+                    }
+                }
+
+                // Check for one focused window.
+                if (window.isFocused()) {
+                    if (focusedWindow != null) {
+                        Log.e(LOG_TAG, "Duplicate focused window:" + window);
+                    } else {
+                        focusedWindow = window;
+                    }
+                }
+            }
+
+            // Traverse the tree and do some checks.
+            AccessibilityNodeInfo accessFocus = null;
+            AccessibilityNodeInfo inputFocus = null;
+
+            final int nodesForWindowCount = mNodeCache.size();
+            for (int i = 0; i < nodesForWindowCount; i++) {
+                LongSparseArray<AccessibilityNodeInfo> nodes = mNodeCache.valueAt(i);
+                if (nodes.size() <= 0) {
+                    continue;
+                }
+
+                ArraySet<AccessibilityNodeInfo> seen = new ArraySet<AccessibilityNodeInfo>();
+                final int windowId = mNodeCache.keyAt(i);
+
+                final int nodeCount = nodes.size();
+                for (int j = 0; j < nodeCount; j++) {
+                    AccessibilityNodeInfo node = nodes.valueAt(j);
+
+                    // Check for duplicates
+                    if (!seen.add(node)) {
+                        Log.e(LOG_TAG, "Duplicate node: " + node
+                                + " in window:" + windowId);
+                    }
+
+                    // Check for one accessibility focus.
+                    if (node.isAccessibilityFocused()) {
+                        if (accessFocus != null) {
+                            Log.e(LOG_TAG, "Duplicate accessibility focus:" + node
+                                    + " in window:" + windowId);
+                        } else {
+                            accessFocus = node;
+                        }
+                    }
+
+                    // Check for one input focus.
+                    if (node.isFocused()) {
+                        if (inputFocus != null) {
+                            Log.e(LOG_TAG, "Duplicate input focus: " + node
+                                    + " in window:" + windowId);
+                        } else {
+                            inputFocus = node;
+                        }
+                    }
+
+                    // The node should be a child of its parent if we have the parent.
+                    AccessibilityNodeInfo nodeParent = nodes.get(node.getParentNodeId());
+                    if (nodeParent != null) {
+                        boolean childOfItsParent = false;
+                        final int childCount = nodeParent.getChildCount();
+                        for (int k = 0; k < childCount; k++) {
+                            AccessibilityNodeInfo child = nodes.get(nodeParent.getChildId(k));
+                            if (child == node) {
+                                childOfItsParent = true;
+                                break;
+                            }
+                        }
+                        if (!childOfItsParent) {
+                            Log.e(LOG_TAG, "Invalid parent-child ralation between parent: "
+                                    + nodeParent + " and child: " + node);
+                        }
+                    }
+
+                    // The node should be the parent of its child if we have the child.
+                    final int childCount = node.getChildCount();
+                    for (int k = 0; k < childCount; k++) {
+                        AccessibilityNodeInfo child = nodes.get(node.getChildId(k));
+                        if (child != null) {
+                            AccessibilityNodeInfo parent = nodes.get(child.getParentNodeId());
+                            if (parent != node) {
+                                Log.e(LOG_TAG, "Invalid child-parent ralation between child: "
+                                        + node + " and parent: " + nodeParent);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/core/java/android/view/accessibility/AccessibilityEvent.java b/core/java/android/view/accessibility/AccessibilityEvent.java
index f635eee..417e22c 100644
--- a/core/java/android/view/accessibility/AccessibilityEvent.java
+++ b/core/java/android/view/accessibility/AccessibilityEvent.java
@@ -343,6 +343,23 @@
  * view.</br>
  * </p>
  * <p>
+ * <b>Windows changed</b> - represents the event of changes in the windows shown on
+ * the screen such as a window appeared, a window disappeared, a window size changed,
+ * a window layer changed, etc.</br>
+ * <em>Type:</em> {@link #TYPE_WINDOWS_CHANGED}</br>
+ * <em>Properties:</em></br>
+ * <ul>
+ *   <li>{@link #getEventType()} - The type of the event.</li>
+ *   <li>{@link #getEventTime()} - The event time.</li>
+ * </ul>
+ * <em>Note:</em> You can retrieve the {@link AccessibilityWindowInfo} for the window
+ * source of the event via {@link AccessibilityEvent#getSource()} to get the source
+ * node on which then call {@link AccessibilityNodeInfo#getWindow()
+ * AccessibilityNodeInfo.getWindow()} to get the window. Also all windows on the screen can
+ * be retrieved by a call to {@link android.accessibilityservice.AccessibilityService#getWindows()
+ * android.accessibilityservice.AccessibilityService.getWindows()}.
+ * </p>
+ * <p>
  * <b>NOTIFICATION TYPES</b></br>
  * </p>
  * <p>
@@ -662,6 +679,11 @@
     public static final int TYPE_TOUCH_INTERACTION_END = 0x00200000;
 
     /**
+     * Represents the event change in the windows shown on the screen.
+     */
+    public static final int TYPE_WINDOWS_CHANGED = 0x00400000;
+
+    /**
      * Change type for {@link #TYPE_WINDOW_CONTENT_CHANGED} event:
      * The type of change is not defined.
      */
@@ -708,6 +730,7 @@
      * @see #TYPE_GESTURE_DETECTION_END
      * @see #TYPE_TOUCH_INTERACTION_START
      * @see #TYPE_TOUCH_INTERACTION_END
+     * @see #TYPE_WINDOWS_CHANGED
      */
     public static final int TYPES_ALL_MASK = 0xFFFFFFFF;
 
@@ -722,7 +745,7 @@
     int mAction;
     int mContentChangeTypes;
 
-    private final ArrayList<AccessibilityRecord> mRecords = new ArrayList<AccessibilityRecord>();
+    private ArrayList<AccessibilityRecord> mRecords;
 
     /*
      * Hide constructor from clients.
@@ -755,11 +778,13 @@
     @Override
     public void setSealed(boolean sealed) {
         super.setSealed(sealed);
-        List<AccessibilityRecord> records = mRecords;
-        final int recordCount = records.size();
-        for (int i = 0; i < recordCount; i++) {
-            AccessibilityRecord record = records.get(i);
-            record.setSealed(sealed);
+        final List<AccessibilityRecord> records = mRecords;
+        if (records != null) {
+            final int recordCount = records.size();
+            for (int i = 0; i < recordCount; i++) {
+                AccessibilityRecord record = records.get(i);
+                record.setSealed(sealed);
+            }
         }
     }
 
@@ -769,7 +794,7 @@
      * @return The number of records.
      */
     public int getRecordCount() {
-        return mRecords.size();
+        return mRecords == null ? 0 : mRecords.size();
     }
 
     /**
@@ -781,6 +806,9 @@
      */
     public void appendRecord(AccessibilityRecord record) {
         enforceNotSealed();
+        if (mRecords == null) {
+            mRecords = new ArrayList<AccessibilityRecord>();
+        }
         mRecords.add(record);
     }
 
@@ -791,6 +819,9 @@
      * @return The record at the specified index.
      */
     public AccessibilityRecord getRecord(int index) {
+        if (mRecords == null) {
+            throw new IndexOutOfBoundsException("Invalid index " + index + ", size is 0");
+        }
         return mRecords.get(index);
     }
 
@@ -964,11 +995,14 @@
         AccessibilityEvent eventClone = AccessibilityEvent.obtain();
         eventClone.init(event);
 
-        final int recordCount = event.mRecords.size();
-        for (int i = 0; i < recordCount; i++) {
-            AccessibilityRecord record = event.mRecords.get(i);
-            AccessibilityRecord recordClone = AccessibilityRecord.obtain(record);
-            eventClone.mRecords.add(recordClone);
+        if (event.mRecords != null) {
+            final int recordCount = event.mRecords.size();
+            eventClone.mRecords = new ArrayList<AccessibilityRecord>(recordCount);
+            for (int i = 0; i < recordCount; i++) {
+                final AccessibilityRecord record = event.mRecords.get(i);
+                final AccessibilityRecord recordClone = AccessibilityRecord.obtain(record);
+                eventClone.mRecords.add(recordClone);
+            }
         }
 
         return eventClone;
@@ -1013,9 +1047,11 @@
         mContentChangeTypes = 0;
         mPackageName = null;
         mEventTime = 0;
-        while (!mRecords.isEmpty()) {
-            AccessibilityRecord record = mRecords.remove(0);
-            record.recycle();
+        if (mRecords != null) {
+            while (!mRecords.isEmpty()) {
+                AccessibilityRecord record = mRecords.remove(0);
+                record.recycle();
+            }
         }
     }
 
@@ -1037,11 +1073,14 @@
 
         // Read the records.
         final int recordCount = parcel.readInt();
-        for (int i = 0; i < recordCount; i++) {
-            AccessibilityRecord record = AccessibilityRecord.obtain();
-            readAccessibilityRecordFromParcel(record, parcel);
-            record.mConnectionId = mConnectionId;
-            mRecords.add(record);
+        if (recordCount > 0) {
+            mRecords = new ArrayList<AccessibilityRecord>(recordCount);
+            for (int i = 0; i < recordCount; i++) {
+                AccessibilityRecord record = AccessibilityRecord.obtain();
+                readAccessibilityRecordFromParcel(record, parcel);
+                record.mConnectionId = mConnectionId;
+                mRecords.add(record);
+            }
         }
     }
 
@@ -1147,8 +1186,8 @@
             builder.append("; ContentChangeTypes: ").append(mContentChangeTypes);
             builder.append("; sourceWindowId: ").append(mSourceWindowId);
             builder.append("; mSourceNodeId: ").append(mSourceNodeId);
-            for (int i = 0; i < mRecords.size(); i++) {
-                AccessibilityRecord record = mRecords.get(i);
+            for (int i = 0; i < getRecordCount(); i++) {
+                final AccessibilityRecord record = getRecord(i);
                 builder.append("  Record ");
                 builder.append(i);
                 builder.append(":");
@@ -1350,6 +1389,13 @@
                     builder.append("TYPE_TOUCH_INTERACTION_END");
                     eventTypeCount++;
                 } break;
+                case TYPE_WINDOWS_CHANGED: {
+                    if (eventTypeCount > 0) {
+                        builder.append(", ");
+                    }
+                    builder.append("TYPE_WINDOWS_CHANGED");
+                    eventTypeCount++;
+                } break;
             }
         }
         if (eventTypeCount > 1) {
diff --git a/core/java/android/view/accessibility/AccessibilityInteractionClient.java b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
index 139df3e..5b9372d 100644
--- a/core/java/android/view/accessibility/AccessibilityInteractionClient.java
+++ b/core/java/android/view/accessibility/AccessibilityInteractionClient.java
@@ -27,7 +27,6 @@
 import android.util.Log;
 import android.util.LongSparseArray;
 import android.util.SparseArray;
-import android.util.SparseLongArray;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -101,14 +100,11 @@
 
     private Message mSameThreadMessage;
 
-    // The connection cache is shared between all interrogating threads.
     private static final SparseArray<IAccessibilityServiceConnection> sConnectionCache =
         new SparseArray<IAccessibilityServiceConnection>();
 
-    // The connection cache is shared between all interrogating threads since
-    // at any given time there is only one window allowing querying.
-    private static final AccessibilityNodeInfoCache sAccessibilityNodeInfoCache =
-        new AccessibilityNodeInfoCache();
+    private static final AccessibilityCache sAccessibilityCache =
+        new AccessibilityCache();
 
     /**
      * @return The client for the current thread.
@@ -167,6 +163,99 @@
     }
 
     /**
+     * Gets the root {@link AccessibilityNodeInfo} in a given window.
+     *
+     * @param connectionId The id of a connection for interacting with the system.
+     * @param windowId The window id.
+     * @return The root {@link AccessibilityNodeInfo} if found, null otherwise.
+     */
+    public AccessibilityNodeInfo getRootInWindow(int connectionId, int windowId) {
+        return findAccessibilityNodeInfoByAccessibilityId(connectionId, windowId,
+                AccessibilityNodeInfo.ROOT_NODE_ID, false,
+                AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS);
+    }
+
+    /**
+     * Gets the info for a window.
+     *
+     * @param connectionId The id of a connection for interacting with the system.
+     * @param accessibilityWindowId A unique window id. Use
+     *     {@link android.view.accessibility.AccessibilityNodeInfo#ACTIVE_WINDOW_ID}
+     *     to query the currently active window.
+     * @return The {@link AccessibilityWindowInfo}.
+     */
+    public AccessibilityWindowInfo getWindow(int connectionId, int accessibilityWindowId) {
+        try {
+            IAccessibilityServiceConnection connection = getConnection(connectionId);
+            if (connection != null) {
+                AccessibilityWindowInfo window = sAccessibilityCache.getWindow(
+                        accessibilityWindowId);
+                if (window != null) {
+                    if (DEBUG) {
+                        Log.i(LOG_TAG, "Window cache hit");
+                    }
+                    return window;
+                }
+                if (DEBUG) {
+                    Log.i(LOG_TAG, "Window cache miss");
+                }
+                window = connection.getWindow(accessibilityWindowId);
+                if (window != null) {
+                    sAccessibilityCache.addWindow(window);
+                    return window;
+                }
+            } else {
+                if (DEBUG) {
+                    Log.w(LOG_TAG, "No connection for connection id: " + connectionId);
+                }
+            }
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error while calling remote getWindow", re);
+        }
+        return null;
+    }
+
+    /**
+     * Gets the info for all windows.
+     *
+     * @param connectionId The id of a connection for interacting with the system.
+     * @return The {@link AccessibilityWindowInfo} list.
+     */
+    public List<AccessibilityWindowInfo> getWindows(int connectionId) {
+        try {
+            IAccessibilityServiceConnection connection = getConnection(connectionId);
+            if (connection != null) {
+                List<AccessibilityWindowInfo> windows = sAccessibilityCache.getWindows();
+                if (windows != null) {
+                    if (DEBUG) {
+                        Log.i(LOG_TAG, "Window cache hit");
+                    }
+                    return windows;
+                }
+                if (DEBUG) {
+                    Log.i(LOG_TAG, "Window cache miss");
+                }
+                windows = connection.getWindows();
+                if (windows != null) {
+                    final int windowCount = windows.size();
+                    for (int i = 0; i < windowCount; i++) {
+                        AccessibilityWindowInfo window = windows.get(i);
+                        sAccessibilityCache.addWindow(window);
+                    }
+                    return windows;
+                }
+            } else {
+                if (DEBUG) {
+                    Log.w(LOG_TAG, "No connection for connection id: " + connectionId);
+                }
+            }
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "Error while calling remote getWindows", re);
+        }
+        return Collections.emptyList();
+    }
+
+    /**
      * Finds an {@link AccessibilityNodeInfo} by accessibility id.
      *
      * @param connectionId The id of a connection for interacting with the system.
@@ -184,15 +273,26 @@
     public AccessibilityNodeInfo findAccessibilityNodeInfoByAccessibilityId(int connectionId,
             int accessibilityWindowId, long accessibilityNodeId, boolean bypassCache,
             int prefetchFlags) {
+        if ((prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_SIBLINGS) != 0
+                && (prefetchFlags & AccessibilityNodeInfo.FLAG_PREFETCH_PREDECESSORS) == 0) {
+            throw new IllegalArgumentException("FLAG_PREFETCH_SIBLINGS"
+                + " requires FLAG_PREFETCH_PREDECESSORS");
+        }
         try {
             IAccessibilityServiceConnection connection = getConnection(connectionId);
             if (connection != null) {
                 if (!bypassCache) {
-                    AccessibilityNodeInfo cachedInfo = sAccessibilityNodeInfoCache.get(
-                            accessibilityNodeId);
+                    AccessibilityNodeInfo cachedInfo = sAccessibilityCache.getNode(
+                            accessibilityWindowId, accessibilityNodeId);
                     if (cachedInfo != null) {
+                        if (DEBUG) {
+                            Log.i(LOG_TAG, "Node cache hit");
+                        }
                         return cachedInfo;
                     }
+                    if (DEBUG) {
+                        Log.i(LOG_TAG, "Node cache miss");
+                    }
                 }
                 final int interactionId = mInteractionIdCounter.getAndIncrement();
                 final boolean success = connection.findAccessibilityNodeInfoByAccessibilityId(
@@ -213,10 +313,8 @@
                 }
             }
         } catch (RemoteException re) {
-            if (DEBUG) {
-                Log.w(LOG_TAG, "Error while calling remote"
-                        + " findAccessibilityNodeInfoByAccessibilityId", re);
-            }
+            Log.e(LOG_TAG, "Error while calling remote"
+                    + " findAccessibilityNodeInfoByAccessibilityId", re);
         }
         return null;
     }
@@ -260,10 +358,8 @@
                 }
             }
         } catch (RemoteException re) {
-            if (DEBUG) {
-                Log.w(LOG_TAG, "Error while calling remote"
-                        + " findAccessibilityNodeInfoByViewIdInActiveWindow", re);
-            }
+            Log.w(LOG_TAG, "Error while calling remote"
+                    + " findAccessibilityNodeInfoByViewIdInActiveWindow", re);
         }
         return Collections.emptyList();
     }
@@ -308,10 +404,8 @@
                 }
             }
         } catch (RemoteException re) {
-            if (DEBUG) {
-                Log.w(LOG_TAG, "Error while calling remote"
-                        + " findAccessibilityNodeInfosByViewText", re);
-            }
+            Log.w(LOG_TAG, "Error while calling remote"
+                    + " findAccessibilityNodeInfosByViewText", re);
         }
         return Collections.emptyList();
     }
@@ -353,9 +447,7 @@
                 }
             }
         } catch (RemoteException re) {
-            if (DEBUG) {
-                Log.w(LOG_TAG, "Error while calling remote findFocus", re);
-            }
+            Log.w(LOG_TAG, "Error while calling remote findFocus", re);
         }
         return null;
     }
@@ -397,9 +489,7 @@
                 }
             }
         } catch (RemoteException re) {
-            if (DEBUG) {
-                Log.w(LOG_TAG, "Error while calling remote accessibilityFocusSearch", re);
-            }
+            Log.w(LOG_TAG, "Error while calling remote accessibilityFocusSearch", re);
         }
         return null;
     }
@@ -437,19 +527,21 @@
                 }
             }
         } catch (RemoteException re) {
-            if (DEBUG) {
-                Log.w(LOG_TAG, "Error while calling remote performAccessibilityAction", re);
-            }
+            Log.w(LOG_TAG, "Error while calling remote performAccessibilityAction", re);
         }
         return false;
     }
 
     public void clearCache() {
-        sAccessibilityNodeInfoCache.clear();
+        sAccessibilityCache.clear();
     }
 
     public void onAccessibilityEvent(AccessibilityEvent event) {
-        sAccessibilityNodeInfoCache.onAccessibilityEvent(event);
+        sAccessibilityCache.onAccessibilityEvent(event);
+    }
+
+    public void removeWindows(int[] windowIds) {
+        sAccessibilityCache.removeWindows(windowIds);
     }
 
     /**
@@ -614,7 +706,7 @@
         if (info != null) {
             info.setConnectionId(connectionId);
             info.setSealed(true);
-            sAccessibilityNodeInfoCache.add(info);
+            sAccessibilityCache.add(info);
         }
     }
 
@@ -718,10 +810,9 @@
                 Log.e(LOG_TAG, "Duplicate node.");
                 return;
             }
-            SparseLongArray childIds = current.getChildNodeIds();
-            final int childCount = childIds.size();
+            final int childCount = current.getChildCount();
             for (int i = 0; i < childCount; i++) {
-                final long childId = childIds.valueAt(i);
+                final long childId = current.getChildId(i);
                 for (int j = 0; j < infoCount; j++) {
                     AccessibilityNodeInfo child = infos.get(j);
                     if (child.getSourceNodeId() == childId) {
diff --git a/core/java/android/view/accessibility/AccessibilityManager.java b/core/java/android/view/accessibility/AccessibilityManager.java
index 879e58f..cbc38c6 100644
--- a/core/java/android/view/accessibility/AccessibilityManager.java
+++ b/core/java/android/view/accessibility/AccessibilityManager.java
@@ -75,13 +75,49 @@
     /** @hide */
     public static final int STATE_FLAG_TOUCH_EXPLORATION_ENABLED = 0x00000002;
 
+    /** @hide */
+    public static final int INVERSION_DISABLED = -1;
+
+    /** @hide */
+    public static final int INVERSION_STANDARD = 0;
+
+    /** @hide */
+    public static final int INVERSION_HUE_ONLY = 1;
+
+    /** @hide */
+    public static final int INVERSION_VALUE_ONLY = 2;
+
+    /** @hide */
+    public static final int DALTONIZER_DISABLED = -1;
+
+    /** @hide */
+    public static final int DALTONIZER_SIMULATE_MONOCHROMACY = 0;
+
+    /** @hide */
+    public static final int DALTONIZER_SIMULATE_PROTANOMALY = 1;
+
+    /** @hide */
+    public static final int DALTONIZER_SIMULATE_DEUTERANOMALY = 2;
+
+    /** @hide */
+    public static final int DALTONIZER_SIMULATE_TRITANOMALY = 3;
+
+    /** @hide */
+    public static final int DALTONIZER_CORRECT_PROTANOMALY = 11;
+
+    /** @hide */
+    public static final int DALTONIZER_CORRECT_DEUTERANOMALY = 12;
+
+    /** @hide */
+    public static final int DALTONIZER_CORRECT_TRITANOMALY = 13;
+
     static final Object sInstanceSync = new Object();
 
     private static AccessibilityManager sInstance;
 
-    private static final int DO_SET_STATE = 10;
+    private final Object mLock = new Object();
 
-    final IAccessibilityManager mService;
+    private IAccessibilityManager mService;
 
     final int mUserId;
 
@@ -130,29 +166,14 @@
         public void onTouchExplorationStateChanged(boolean enabled);
     }
 
-    final IAccessibilityManagerClient.Stub mClient = new IAccessibilityManagerClient.Stub() {
+    private final IAccessibilityManagerClient.Stub mClient =
+            new IAccessibilityManagerClient.Stub() {
         public void setState(int state) {
-            mHandler.obtainMessage(DO_SET_STATE, state, 0).sendToTarget();
-        }
-    };
-
-    class MyHandler extends Handler {
-
-        MyHandler(Looper mainLooper) {
-            super(mainLooper);
-        }
-
-        @Override
-        public void handleMessage(Message message) {
-            switch (message.what) {
-                case DO_SET_STATE :
-                    setState(message.arg1);
-                    return;
-                default :
-                    Log.w(LOG_TAG, "Unknown message type: " + message.what);
+            synchronized (mLock) {
+                setStateLocked(state);
             }
         }
-    }
+    };
 
     /**
      * Get an AccessibilityManager instance (create one if necessary).
@@ -198,17 +219,16 @@
         mHandler = new MyHandler(context.getMainLooper());
         mService = service;
         mUserId = userId;
-        if (mService == null) {
-            mIsEnabled = false;
+        synchronized (mLock) {
+            tryConnectToServiceLocked();
         }
-        try {
-            if (mService != null) {
-                final int stateFlags = mService.addClient(mClient, userId);
-                setState(stateFlags);
-            }
-        } catch (RemoteException re) {
-            Log.e(LOG_TAG, "AccessibilityManagerService is dead", re);
-        }
+    }
+
+    /**
+     * @hide
+     */
+    public IAccessibilityManagerClient getClient() {
+        return mClient;
     }
 
     /**
@@ -217,7 +237,11 @@
      * @return True if accessibility is enabled, false otherwise.
      */
     public boolean isEnabled() {
-        synchronized (mHandler) {
+        synchronized (mLock) {
+            IAccessibilityManager service = getServiceLocked();
+            if (service == null) {
+                return false;
+            }
             return mIsEnabled;
         }
     }
@@ -228,24 +252,16 @@
      * @return True if touch exploration is enabled, false otherwise.
      */
     public boolean isTouchExplorationEnabled() {
-        synchronized (mHandler) {
+        synchronized (mLock) {
+            IAccessibilityManager service = getServiceLocked();
+            if (service == null) {
+                return false;
+            }
             return mIsTouchExplorationEnabled;
         }
     }
 
     /**
-     * Returns the client interface this instance registers in
-     * the centralized accessibility manager service.
-     *
-     * @return The client.
-     *
-     * @hide
-     */
-    public IAccessibilityManagerClient getClient() {
-       return (IAccessibilityManagerClient) mClient.asBinder();
-    }
-
-    /**
      * Sends an {@link AccessibilityEvent}.
      *
      * @param event The event to send.
@@ -259,8 +275,17 @@
      * their descendants.
      */
     public void sendAccessibilityEvent(AccessibilityEvent event) {
-        if (!mIsEnabled) {
-            throw new IllegalStateException("Accessibility off. Did you forget to check that?");
+        final IAccessibilityManager service;
+        final int userId;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return;
+            }
+            if (!mIsEnabled) {
+                throw new IllegalStateException("Accessibility off. Did you forget to check that?");
+            }
+            userId = mUserId;
         }
         boolean doRecycle = false;
         try {
@@ -269,7 +294,7 @@
             // client using it is called through Binder from another process. Example: MMS
             // app adds a SMS notification and the NotificationManagerService calls this method
             long identityToken = Binder.clearCallingIdentity();
-            doRecycle = mService.sendAccessibilityEvent(event, mUserId);
+            doRecycle = service.sendAccessibilityEvent(event, userId);
             Binder.restoreCallingIdentity(identityToken);
             if (DEBUG) {
                 Log.i(LOG_TAG, event + " sent");
@@ -287,11 +312,20 @@
      * Requests feedback interruption from all accessibility services.
      */
     public void interrupt() {
-        if (!mIsEnabled) {
-            throw new IllegalStateException("Accessibility off. Did you forget to check that?");
+        final IAccessibilityManager service;
+        final int userId;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return;
+            }
+            if (!mIsEnabled) {
+                throw new IllegalStateException("Accessibility off. Did you forget to check that?");
+            }
+            userId = mUserId;
         }
         try {
-            mService.interrupt(mUserId);
+            service.interrupt(userId);
             if (DEBUG) {
                 Log.i(LOG_TAG, "Requested interrupt from all services");
             }
@@ -325,18 +359,30 @@
      * @return An unmodifiable list with {@link AccessibilityServiceInfo}s.
      */
     public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList() {
+        final IAccessibilityManager service;
+        final int userId;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return Collections.emptyList();
+            }
+            userId = mUserId;
+        }
+
         List<AccessibilityServiceInfo> services = null;
         try {
-            if (mService != null) {
-                services = mService.getInstalledAccessibilityServiceList(mUserId);
-                if (DEBUG) {
-                    Log.i(LOG_TAG, "Installed AccessibilityServices " + services);
-                }
+            services = service.getInstalledAccessibilityServiceList(userId);
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Installed AccessibilityServices " + services);
             }
         } catch (RemoteException re) {
             Log.e(LOG_TAG, "Error while obtaining the installed AccessibilityServices. ", re);
         }
-        return services != null ? Collections.unmodifiableList(services) : Collections.EMPTY_LIST;
+        if (services != null) {
+            return Collections.unmodifiableList(services);
+        } else {
+            return Collections.emptyList();
+        }
     }
 
     /**
@@ -354,18 +400,30 @@
      */
     public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(
             int feedbackTypeFlags) {
+        final IAccessibilityManager service;
+        final int userId;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return Collections.emptyList();
+            }
+            userId = mUserId;
+        }
+
         List<AccessibilityServiceInfo> services = null;
         try {
-            if (mService != null) {
-                services = mService.getEnabledAccessibilityServiceList(feedbackTypeFlags, mUserId);
-                if (DEBUG) {
-                    Log.i(LOG_TAG, "Installed AccessibilityServices " + services);
-                }
+            services = service.getEnabledAccessibilityServiceList(feedbackTypeFlags, userId);
+            if (DEBUG) {
+                Log.i(LOG_TAG, "Installed AccessibilityServices " + services);
             }
         } catch (RemoteException re) {
             Log.e(LOG_TAG, "Error while obtaining the installed AccessibilityServices. ", re);
         }
-        return services != null ? Collections.unmodifiableList(services) : Collections.EMPTY_LIST;
+        if (services != null) {
+            return Collections.unmodifiableList(services);
+        } else {
+            return Collections.emptyList();
+        }
     }
 
     /**
@@ -377,6 +435,7 @@
      */
     public boolean addAccessibilityStateChangeListener(
             AccessibilityStateChangeListener listener) {
+        // Final CopyOnArrayList - no lock needed.
         return mAccessibilityStateChangeListeners.add(listener);
     }
 
@@ -388,6 +447,7 @@
      */
     public boolean removeAccessibilityStateChangeListener(
             AccessibilityStateChangeListener listener) {
+        // Final CopyOnArrayList - no lock needed.
         return mAccessibilityStateChangeListeners.remove(listener);
     }
 
@@ -400,6 +460,7 @@
      */
     public boolean addTouchExplorationStateChangeListener(
             TouchExplorationStateChangeListener listener) {
+        // Final CopyOnArrayList - no lock needed.
         return mTouchExplorationStateChangeListeners.add(listener);
     }
 
@@ -411,6 +472,7 @@
      */
     public boolean removeTouchExplorationStateChangeListener(
             TouchExplorationStateChangeListener listener) {
+        // Final CopyOnArrayList - no lock needed.
         return mTouchExplorationStateChangeListeners.remove(listener);
     }
 
@@ -419,50 +481,24 @@
      *
      * @param stateFlags The state flags.
      */
-    private void setState(int stateFlags) {
+    private void setStateLocked(int stateFlags) {
         final boolean enabled = (stateFlags & STATE_FLAG_ACCESSIBILITY_ENABLED) != 0;
         final boolean touchExplorationEnabled =
                 (stateFlags & STATE_FLAG_TOUCH_EXPLORATION_ENABLED) != 0;
-        synchronized (mHandler) {
-            final boolean wasEnabled = mIsEnabled;
-            final boolean wasTouchExplorationEnabled = mIsTouchExplorationEnabled;
 
-            // Ensure listeners get current state from isZzzEnabled() calls.
-            mIsEnabled = enabled;
-            mIsTouchExplorationEnabled = touchExplorationEnabled;
+        final boolean wasEnabled = mIsEnabled;
+        final boolean wasTouchExplorationEnabled = mIsTouchExplorationEnabled;
 
-            if (wasEnabled != enabled) {
-                notifyAccessibilityStateChangedLh();
-            }
+        // Ensure listeners get current state from isZzzEnabled() calls.
+        mIsEnabled = enabled;
+        mIsTouchExplorationEnabled = touchExplorationEnabled;
 
-            if (wasTouchExplorationEnabled != touchExplorationEnabled) {
-                notifyTouchExplorationStateChangedLh();
-            }
+        if (wasEnabled != enabled) {
+            mHandler.sendEmptyMessage(MyHandler.MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED);
         }
-    }
 
-    /**
-     * Notifies the registered {@link AccessibilityStateChangeListener}s.
-     * <p>
-     * The caller must be locked on {@link #mHandler}.
-     */
-    private void notifyAccessibilityStateChangedLh() {
-        final int listenerCount = mAccessibilityStateChangeListeners.size();
-        for (int i = 0; i < listenerCount; i++) {
-            mAccessibilityStateChangeListeners.get(i).onAccessibilityStateChanged(mIsEnabled);
-        }
-    }
-
-    /**
-     * Notifies the registered {@link TouchExplorationStateChangeListener}s.
-     * <p>
-     * The caller must be locked on {@link #mHandler}.
-     */
-    private void notifyTouchExplorationStateChangedLh() {
-        final int listenerCount = mTouchExplorationStateChangeListeners.size();
-        for (int i = 0; i < listenerCount; i++) {
-            mTouchExplorationStateChangeListeners.get(i)
-                    .onTouchExplorationStateChanged(mIsTouchExplorationEnabled);
+        if (wasTouchExplorationEnabled != touchExplorationEnabled) {
+            mHandler.sendEmptyMessage(MyHandler.MSG_NOTIFY_EXPLORATION_STATE_CHANGED);
         }
     }
 
@@ -475,11 +511,17 @@
      */
     public int addAccessibilityInteractionConnection(IWindow windowToken,
             IAccessibilityInteractionConnection connection) {
-        if (mService == null) {
-            return View.NO_ID;
+        final IAccessibilityManager service;
+        final int userId;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return View.NO_ID;
+            }
+            userId = mUserId;
         }
         try {
-            return mService.addAccessibilityInteractionConnection(windowToken, connection, mUserId);
+            return service.addAccessibilityInteractionConnection(windowToken, connection, userId);
         } catch (RemoteException re) {
             Log.e(LOG_TAG, "Error while adding an accessibility interaction connection. ", re);
         }
@@ -493,12 +535,90 @@
      * @hide
      */
     public void removeAccessibilityInteractionConnection(IWindow windowToken) {
-        try {
-            if (mService != null) {
-                mService.removeAccessibilityInteractionConnection(windowToken);
+        final IAccessibilityManager service;
+        synchronized (mLock) {
+            service = getServiceLocked();
+            if (service == null) {
+                return;
             }
+        }
+        try {
+            service.removeAccessibilityInteractionConnection(windowToken);
         } catch (RemoteException re) {
             Log.e(LOG_TAG, "Error while removing an accessibility interaction connection. ", re);
         }
     }
+
+    private  IAccessibilityManager getServiceLocked() {
+        if (mService == null) {
+            tryConnectToServiceLocked();
+        }
+        return mService;
+    }
+
+    private void tryConnectToServiceLocked() {
+        IBinder iBinder = ServiceManager.getService(Context.ACCESSIBILITY_SERVICE);
+        if (iBinder == null) {
+            return;
+        }
+        IAccessibilityManager service = IAccessibilityManager.Stub.asInterface(iBinder);
+        try {
+            final int stateFlags = service.addClient(mClient, mUserId);
+            setStateLocked(stateFlags);
+            mService = service;
+        } catch (RemoteException re) {
+            Log.e(LOG_TAG, "AccessibilityManagerService is dead", re);
+        }
+    }
+
+    /**
+     * Notifies the registered {@link AccessibilityStateChangeListener}s.
+     */
+    private void handleNotifyAccessibilityStateChanged() {
+        final boolean isEnabled;
+        synchronized (mLock) {
+            isEnabled = mIsEnabled;
+        }
+        final int listenerCount = mAccessibilityStateChangeListeners.size();
+        for (int i = 0; i < listenerCount; i++) {
+            mAccessibilityStateChangeListeners.get(i).onAccessibilityStateChanged(isEnabled);
+        }
+    }
+
+    /**
+     * Notifies the registered {@link TouchExplorationStateChangeListener}s.
+     */
+    private void handleNotifyTouchExplorationStateChanged() {
+        final boolean isTouchExplorationEnabled;
+        synchronized (mLock) {
+            isTouchExplorationEnabled = mIsTouchExplorationEnabled;
+        }
+        final int listenerCount = mTouchExplorationStateChangeListeners.size();
+        for (int i = 0; i < listenerCount; i++) {
+            mTouchExplorationStateChangeListeners.get(i)
+                    .onTouchExplorationStateChanged(isTouchExplorationEnabled);
+        }
+    }
+
+    private final class MyHandler extends Handler {
+        public static final int MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED = 1;
+        public static final int MSG_NOTIFY_EXPLORATION_STATE_CHANGED = 2;
+
+        public MyHandler(Looper looper) {
+            super(looper, null, false);
+        }
+
+        @Override
+        public void handleMessage(Message message) {
+            switch (message.what) {
+                case MSG_NOTIFY_ACCESSIBILITY_STATE_CHANGED: {
+                    handleNotifyAccessibilityStateChanged();
+                } break;
+
+                case MSG_NOTIFY_EXPLORATION_STATE_CHANGED: {
+                    handleNotifyTouchExplorationStateChanged();
+                }
+            }
+        }
+    }
 }
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 4f53c1e..9d10930 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -22,8 +22,8 @@
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.text.InputType;
+import android.util.LongArray;
 import android.util.Pools.SynchronizedPool;
-import android.util.SparseLongArray;
 import android.view.View;
 
 import java.util.Collections;
@@ -62,13 +62,22 @@
     private static final boolean DEBUG = false;
 
     /** @hide */
-    public static final int UNDEFINED = -1;
+    public static final int UNDEFINED_CONNECTION_ID = -1;
 
     /** @hide */
-    public static final long ROOT_NODE_ID = makeNodeId(UNDEFINED, UNDEFINED);
+    public static final int UNDEFINED_SELECTION_INDEX = -1;
 
     /** @hide */
-    public static final int ACTIVE_WINDOW_ID = UNDEFINED;
+    public static final int UNDEFINED_ITEM_ID = Integer.MAX_VALUE;
+
+    /** @hide */
+    public static final long ROOT_NODE_ID = makeNodeId(UNDEFINED_ITEM_ID, UNDEFINED_ITEM_ID);
+
+    /** @hide */
+    public static final int ACTIVE_WINDOW_ID = UNDEFINED_ITEM_ID;
+
+    /** @hide */
+    public static final int ANY_WINDOW_ID = -2;
 
     /** @hide */
     public static final int FLAG_PREFETCH_PREDECESSORS = 0x00000001;
@@ -282,6 +291,22 @@
      */
     public static final int ACTION_DISMISS = 0x00100000;
 
+    /**
+     * Action that sets the text of the node. Performing the action without argument, using <code>
+     * null</code> or empty {@link CharSequence} will clear the text. This action will also put the
+     * cursor at the end of text.
+     * <p>
+     * <strong>Arguments:</strong> {@link #ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE}<br>
+     * <strong>Example:</strong>
+     * <code><pre><p>
+     *   Bundle arguments = new Bundle();
+     *   arguments.putCharSequence(AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE,
+     *       "android");
+     *   info.performAction(AccessibilityNodeInfo.ACTION_SET_TEXT, arguments);
+     * </code></pre></p>
+     */
+    public static final int ACTION_SET_TEXT = 0x00200000;
+
     // Action arguments
 
     /**
@@ -351,6 +376,18 @@
     public static final String ACTION_ARGUMENT_SELECTION_END_INT =
             "ACTION_ARGUMENT_SELECTION_END_INT";
 
+    /**
+     * Argument for specifying the text content to set
+     * <p>
+     * <strong>Type:</strong> CharSequence<br>
+     * <strong>Actions:</strong> {@link #ACTION_SET_TEXT}
+     * </p>
+     *
+     * @see #ACTION_SET_TEXT
+     */
+    public static final String ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE =
+            "ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE";
+
     // Focus types
 
     /**
@@ -476,6 +513,13 @@
      * @hide
      */
     public static long makeNodeId(int accessibilityViewId, int virtualDescendantId) {
+        // We changed the value for undefined node to positive due to wrong
+        // global id composition (two 32-bin ints into one 64-bit long) but
+        // the value used for the host node provider view has id -1 so we
+        // remap it here.
+        if (virtualDescendantId == AccessibilityNodeProvider.HOST_VIEW_ID) {
+            virtualDescendantId = UNDEFINED_ITEM_ID;
+        }
         return (((long) virtualDescendantId) << VIRTUAL_DESCENDANT_ID_SHIFT) | accessibilityViewId;
     }
 
@@ -487,7 +531,7 @@
     private boolean mSealed;
 
     // Data.
-    private int mWindowId = UNDEFINED;
+    private int mWindowId = UNDEFINED_ITEM_ID;
     private long mSourceNodeId = ROOT_NODE_ID;
     private long mParentNodeId = ROOT_NODE_ID;
     private long mLabelForId = ROOT_NODE_ID;
@@ -503,19 +547,19 @@
     private CharSequence mContentDescription;
     private String mViewIdResourceName;
 
-    private final SparseLongArray mChildNodeIds = new SparseLongArray();
+    private LongArray mChildNodeIds;
     private int mActions;
 
     private int mMovementGranularities;
 
-    private int mTextSelectionStart = UNDEFINED;
-    private int mTextSelectionEnd = UNDEFINED;
+    private int mTextSelectionStart = UNDEFINED_SELECTION_INDEX;
+    private int mTextSelectionEnd = UNDEFINED_SELECTION_INDEX;
     private int mInputType = InputType.TYPE_NULL;
     private int mLiveRegion = View.ACCESSIBILITY_LIVE_REGION_NONE;
 
     private Bundle mExtras;
 
-    private int mConnectionId = UNDEFINED;
+    private int mConnectionId = UNDEFINED_CONNECTION_ID;
 
     private RangeInfo mRangeInfo;
     private CollectionInfo mCollectionInfo;
@@ -539,7 +583,7 @@
      * @param source The info source.
      */
     public void setSource(View source) {
-        setSource(source, UNDEFINED);
+        setSource(source, UNDEFINED_ITEM_ID);
     }
 
     /**
@@ -563,9 +607,9 @@
      */
     public void setSource(View root, int virtualDescendantId) {
         enforceNotSealed();
-        mWindowId = (root != null) ? root.getAccessibilityWindowId() : UNDEFINED;
+        mWindowId = (root != null) ? root.getAccessibilityWindowId() : UNDEFINED_ITEM_ID;
         final int rootAccessibilityViewId =
-            (root != null) ? root.getAccessibilityViewId() : UNDEFINED;
+            (root != null) ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID;
         mSourceNodeId = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
     }
 
@@ -666,21 +710,35 @@
     }
 
     /**
-     * @return The ids of the children.
+     * Returns the array containing the IDs of this node's children.
      *
      * @hide
      */
-    public SparseLongArray getChildNodeIds() {
+    public LongArray getChildNodeIds() {
         return mChildNodeIds;
     }
 
     /**
+     * Returns the id of the child at the specified index.
+     *
+     * @throws IndexOutOfBoundsException when index &lt; 0 || index &gt;=
+     *             getChildCount()
+     * @hide
+     */
+    public long getChildId(int index) {
+        if (mChildNodeIds == null) {
+            throw new IndexOutOfBoundsException();
+        }
+        return mChildNodeIds.get(index);
+    }
+
+    /**
      * Gets the number of children.
      *
      * @return The child count.
      */
     public int getChildCount() {
-        return mChildNodeIds.size();
+        return mChildNodeIds == null ? 0 : mChildNodeIds.size();
     }
 
     /**
@@ -699,6 +757,9 @@
      */
     public AccessibilityNodeInfo getChild(int index) {
         enforceSealed();
+        if (mChildNodeIds == null) {
+            return null;
+        }
         if (!canPerformRequestOverConnection(mSourceNodeId)) {
             return null;
         }
@@ -721,7 +782,35 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void addChild(View child) {
-        addChild(child, UNDEFINED);
+        addChildInternal(child, UNDEFINED_ITEM_ID, true);
+    }
+
+    /**
+     * Unchecked version of {@link #addChild(View)} that does not verify
+     * uniqueness. For framework use only.
+     *
+     * @hide
+     */
+    public void addChildUnchecked(View child) {
+        addChildInternal(child, UNDEFINED_ITEM_ID, false);
+    }
+
+    /**
+     * Removes a child. If the child was not previously added to the node,
+     * calling this method has no effect.
+     * <p>
+     * <strong>Note:</strong> Cannot be called from an
+     * {@link android.accessibilityservice.AccessibilityService}.
+     * This class is made immutable before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param child The child.
+     * @return true if the child was present
+     *
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    public boolean removeChild(View child) {
+        return removeChild(child, UNDEFINED_ITEM_ID);
     }
 
     /**
@@ -739,12 +828,49 @@
      * @param virtualDescendantId The id of the virtual child.
      */
     public void addChild(View root, int virtualDescendantId) {
+        addChildInternal(root, virtualDescendantId, true);
+    }
+
+    private void addChildInternal(View root, int virtualDescendantId, boolean checked) {
         enforceNotSealed();
-        final int index = mChildNodeIds.size();
+        if (mChildNodeIds == null) {
+            mChildNodeIds = new LongArray();
+        }
         final int rootAccessibilityViewId =
-            (root != null) ? root.getAccessibilityViewId() : UNDEFINED;
+            (root != null) ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID;
         final long childNodeId = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
-        mChildNodeIds.put(index, childNodeId);
+        // If we're checking uniqueness and the ID already exists, abort.
+        if (checked && mChildNodeIds.indexOf(childNodeId) >= 0) {
+            return;
+        }
+        mChildNodeIds.add(childNodeId);
+    }
+
+    /**
+     * Removes a virtual child which is a descendant of the given
+     * <code>root</code>. If the child was not previously added to the node,
+     * calling this method has no effect.
+     *
+     * @param root The root of the virtual subtree.
+     * @param virtualDescendantId The id of the virtual child.
+     * @return true if the child was present
+     * @see #addChild(View, int)
+     */
+    public boolean removeChild(View root, int virtualDescendantId) {
+        enforceNotSealed();
+        final LongArray childIds = mChildNodeIds;
+        if (childIds == null) {
+            return false;
+        }
+        final int rootAccessibilityViewId =
+                (root != null) ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID;
+        final long childNodeId = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
+        final int index = childIds.indexOf(childNodeId);
+        if (index < 0) {
+            return false;
+        }
+        childIds.remove(index);
+        return true;
     }
 
     /**
@@ -789,6 +915,24 @@
     }
 
     /**
+     * Removes an action that can be performed on the node. If the action was
+     * not already added to the node, calling this method has no effect.
+     * <p>
+     *   <strong>Note:</strong> Cannot be called from an
+     *   {@link android.accessibilityservice.AccessibilityService}.
+     *   This class is made immutable before being delivered to an AccessibilityService.
+     * </p>
+     *
+     * @param action The action.
+     *
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    public void removeAction(int action) {
+        enforceNotSealed();
+        mActions &= ~action;
+    }
+
+    /**
      * Sets the movement granularities for traversing the text of this node.
      * <p>
      *   <strong>Note:</strong> Cannot be called from an
@@ -915,6 +1059,22 @@
     }
 
     /**
+     * Gets the window to which this node belongs.
+     *
+     * @return The window.
+     *
+     * @see android.accessibilityservice.AccessibilityService#getWindows()
+     */
+    public AccessibilityWindowInfo getWindow() {
+        enforceSealed();
+        if (!canPerformRequestOverConnection(mSourceNodeId)) {
+            return null;
+        }
+        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+        return client.getWindow(mConnectionId, mWindowId);
+    }
+
+    /**
      * Gets the parent.
      * <p>
      *   <strong>Note:</strong> It is a client responsibility to recycle the
@@ -931,7 +1091,8 @@
         }
         AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
         return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
-                mWindowId, mParentNodeId, false, FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
+                mWindowId, mParentNodeId, false, FLAG_PREFETCH_PREDECESSORS
+                        | FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
     }
 
     /**
@@ -956,7 +1117,7 @@
      * @throws IllegalStateException If called from an AccessibilityService.
      */
     public void setParent(View parent) {
-        setParent(parent, UNDEFINED);
+        setParent(parent, UNDEFINED_ITEM_ID);
     }
 
     /**
@@ -981,7 +1142,7 @@
     public void setParent(View root, int virtualDescendantId) {
         enforceNotSealed();
         final int rootAccessibilityViewId =
-            (root != null) ? root.getAccessibilityViewId() : UNDEFINED;
+            (root != null) ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID;
         mParentNodeId = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
     }
 
@@ -1408,8 +1569,6 @@
      *   {@link android.accessibilityservice.AccessibilityService}.
      *   This class is made immutable before being delivered to an AccessibilityService.
      * </p>
-     *
-     * @return collectionItem True if the node is an item.
      */
     public void setCollectionItemInfo(CollectionItemInfo collectionItemInfo) {
         enforceNotSealed();
@@ -1685,7 +1844,7 @@
      * @param labeled The view for which this info serves as a label.
      */
     public void setLabelFor(View labeled) {
-        setLabelFor(labeled, UNDEFINED);
+        setLabelFor(labeled, UNDEFINED_ITEM_ID);
     }
 
     /**
@@ -1710,7 +1869,7 @@
     public void setLabelFor(View root, int virtualDescendantId) {
         enforceNotSealed();
         final int rootAccessibilityViewId = (root != null)
-                ? root.getAccessibilityViewId() : UNDEFINED;
+                ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID;
         mLabelForId = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
     }
 
@@ -1732,7 +1891,8 @@
         }
         AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
         return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
-                mWindowId, mLabelForId, false, FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
+                mWindowId, mLabelForId, false, FLAG_PREFETCH_PREDECESSORS
+                        | FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
     }
 
     /**
@@ -1742,7 +1902,7 @@
      * @param label The view that labels this node's source.
      */
     public void setLabeledBy(View label) {
-        setLabeledBy(label, UNDEFINED);
+        setLabeledBy(label, UNDEFINED_ITEM_ID);
     }
 
     /**
@@ -1767,7 +1927,7 @@
     public void setLabeledBy(View root, int virtualDescendantId) {
         enforceNotSealed();
         final int rootAccessibilityViewId = (root != null)
-                ? root.getAccessibilityViewId() : UNDEFINED;
+                ? root.getAccessibilityViewId() : UNDEFINED_ITEM_ID;
         mLabeledById = makeNodeId(rootAccessibilityViewId, virtualDescendantId);
     }
 
@@ -1789,7 +1949,8 @@
         }
         AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
         return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
-                mWindowId, mLabeledById, false, FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
+                mWindowId, mLabeledById, false, FLAG_PREFETCH_PREDECESSORS
+                        | FLAG_PREFETCH_DESCENDANTS | FLAG_PREFETCH_SIBLINGS);
     }
 
     /**
@@ -1951,6 +2112,7 @@
     /**
      * {@inheritDoc}
      */
+    @Override
     public int describeContents() {
         return 0;
     }
@@ -2114,6 +2276,7 @@
      *      is recycled. You must not touch the object after calling this function.
      * </p>
      */
+    @Override
     public void writeToParcel(Parcel parcel, int flags) {
         parcel.writeInt(isSealed() ? 1 : 0);
         parcel.writeLong(mSourceNodeId);
@@ -2123,11 +2286,15 @@
         parcel.writeLong(mLabeledById);
         parcel.writeInt(mConnectionId);
 
-        SparseLongArray childIds = mChildNodeIds;
-        final int childIdsSize = childIds.size();
-        parcel.writeInt(childIdsSize);
-        for (int i = 0; i < childIdsSize; i++) {
-            parcel.writeLong(childIds.valueAt(i));
+        final LongArray childIds = mChildNodeIds;
+        if (childIds == null) {
+            parcel.writeInt(0);
+        } else {
+            final int childIdsSize = childIds.size();
+            parcel.writeInt(childIdsSize);
+            for (int i = 0; i < childIdsSize; i++) {
+                parcel.writeLong(childIds.get(i));
+            }
         }
 
         parcel.writeInt(mBoundsInParent.top);
@@ -2179,6 +2346,7 @@
             parcel.writeInt(mCollectionInfo.getRowCount());
             parcel.writeInt(mCollectionInfo.getColumnCount());
             parcel.writeInt(mCollectionInfo.isHierarchical() ? 1 : 0);
+            parcel.writeInt(mCollectionInfo.getSelectionMode());
         } else {
             parcel.writeInt(0);
         }
@@ -2190,6 +2358,7 @@
             parcel.writeInt(mCollectionItemInfo.getRowIndex());
             parcel.writeInt(mCollectionItemInfo.getRowSpan());
             parcel.writeInt(mCollectionItemInfo.isHeading() ? 1 : 0);
+            parcel.writeInt(mCollectionItemInfo.isSelected() ? 1 : 0);
         } else {
             parcel.writeInt(0);
         }
@@ -2222,10 +2391,17 @@
         mActions= other.mActions;
         mBooleanProperties = other.mBooleanProperties;
         mMovementGranularities = other.mMovementGranularities;
-        final int otherChildIdCount = other.mChildNodeIds.size();
-        for (int i = 0; i < otherChildIdCount; i++) {
-            mChildNodeIds.put(i, other.mChildNodeIds.valueAt(i));
+
+        final LongArray otherChildNodeIds = other.mChildNodeIds;
+        if (otherChildNodeIds != null && otherChildNodeIds.size() > 0) {
+            if (mChildNodeIds == null) {
+                mChildNodeIds = otherChildNodeIds.clone();
+            } else {
+                mChildNodeIds.clear();
+                mChildNodeIds.addAll(otherChildNodeIds);
+            }
         }
+
         mTextSelectionStart = other.mTextSelectionStart;
         mTextSelectionEnd = other.mTextSelectionEnd;
         mInputType = other.mInputType;
@@ -2255,11 +2431,15 @@
         mLabeledById = parcel.readLong();
         mConnectionId = parcel.readInt();
 
-        SparseLongArray childIds = mChildNodeIds;
         final int childrenSize = parcel.readInt();
-        for (int i = 0; i < childrenSize; i++) {
-            final long childId = parcel.readLong();
-            childIds.put(i, childId);
+        if (childrenSize <= 0) {
+            mChildNodeIds = null;
+        } else {
+            mChildNodeIds = new LongArray(childrenSize);
+            for (int i = 0; i < childrenSize; i++) {
+                final long childId = parcel.readLong();
+                mChildNodeIds.add(childId);
+            }
         }
 
         mBoundsInParent.top = parcel.readInt();
@@ -2306,7 +2486,8 @@
             mCollectionInfo = CollectionInfo.obtain(
                     parcel.readInt(),
                     parcel.readInt(),
-                    parcel.readInt() == 1);
+                    parcel.readInt() == 1,
+                    parcel.readInt());
         }
 
         if (parcel.readInt() == 1) {
@@ -2315,6 +2496,7 @@
                     parcel.readInt(),
                     parcel.readInt(),
                     parcel.readInt(),
+                    parcel.readInt() == 1,
                     parcel.readInt() == 1);
         }
     }
@@ -2328,10 +2510,12 @@
         mParentNodeId = ROOT_NODE_ID;
         mLabelForId = ROOT_NODE_ID;
         mLabeledById = ROOT_NODE_ID;
-        mWindowId = UNDEFINED;
-        mConnectionId = UNDEFINED;
+        mWindowId = UNDEFINED_ITEM_ID;
+        mConnectionId = UNDEFINED_CONNECTION_ID;
         mMovementGranularities = 0;
-        mChildNodeIds.clear();
+        if (mChildNodeIds != null) {
+            mChildNodeIds.clear();
+        }
         mBoundsInParent.set(0, 0, 0, 0);
         mBoundsInScreen.set(0, 0, 0, 0);
         mBooleanProperties = 0;
@@ -2341,8 +2525,8 @@
         mContentDescription = null;
         mViewIdResourceName = null;
         mActions = 0;
-        mTextSelectionStart = UNDEFINED;
-        mTextSelectionEnd = UNDEFINED;
+        mTextSelectionStart = UNDEFINED_SELECTION_INDEX;
+        mTextSelectionEnd = UNDEFINED_SELECTION_INDEX;
         mInputType = InputType.TYPE_NULL;
         mLiveRegion = View.ACCESSIBILITY_LIVE_REGION_NONE;
         if (mExtras != null) {
@@ -2435,9 +2619,9 @@
     }
 
     private boolean canPerformRequestOverConnection(long accessibilityNodeId) {
-        return (mWindowId != UNDEFINED
-                && getAccessibilityViewId(accessibilityNodeId) != UNDEFINED
-                && mConnectionId != UNDEFINED);
+        return (mWindowId != UNDEFINED_ITEM_ID
+                && getAccessibilityViewId(accessibilityNodeId) != UNDEFINED_ITEM_ID
+                && mConnectionId != UNDEFINED_CONNECTION_ID);
     }
 
     @Override
@@ -2477,6 +2661,7 @@
         builder.append(super.toString());
 
         if (DEBUG) {
+            builder.append("; sourceNodeId: " + mSourceNodeId);
             builder.append("; accessibilityViewId: " + getAccessibilityViewId(mSourceNodeId));
             builder.append("; virtualDescendantId: " + getVirtualDescendantId(mSourceNodeId));
             builder.append("; mParentNodeId: " + mParentNodeId);
@@ -2493,12 +2678,14 @@
             }
             builder.append("]");
 
-            SparseLongArray childIds = mChildNodeIds;
             builder.append("; childAccessibilityIds: [");
-            for (int i = 0, count = childIds.size(); i < count; i++) {
-                builder.append(childIds.valueAt(i));
-                if (i < count - 1) {
-                    builder.append(", ");
+            final LongArray childIds = mChildNodeIds;
+            if (childIds != null) {
+                for (int i = 0, count = childIds.size(); i < count; i++) {
+                    builder.append(childIds.get(i));
+                    if (i < count - 1) {
+                        builder.append(", ");
+                    }
                 }
             }
             builder.append("]");
@@ -2668,6 +2855,15 @@
      * </p>
      */
     public static final class CollectionInfo {
+        /** Selection mode where items are not selectable. */
+        public static final int SELECTION_MODE_NONE = 0;
+
+        /** Selection mode where a single item may be selected. */
+        public static final int SELECTION_MODE_SINGLE = 1;
+
+        /** Selection mode where multiple items may be selected. */
+        public static final int SELECTION_MODE_MULTIPLE = 2;
+
         private static final int MAX_POOL_SIZE = 20;
 
         private static final SynchronizedPool<CollectionInfo> sPool =
@@ -2676,17 +2872,17 @@
         private int mRowCount;
         private int mColumnCount;
         private boolean mHierarchical;
+        private int mSelectionMode;
 
         /**
          * Obtains a pooled instance that is a clone of another one.
          *
          * @param other The instance to clone.
-         *
          * @hide
          */
         public static CollectionInfo obtain(CollectionInfo other) {
-            return CollectionInfo.obtain(other.mRowCount, other.mColumnCount,
-                    other.mHierarchical);
+            return CollectionInfo.obtain(other.mRowCount, other.mColumnCount, other.mHierarchical,
+                    other.mSelectionMode);
         }
 
         /**
@@ -2698,9 +2894,34 @@
          */
         public static CollectionInfo obtain(int rowCount, int columnCount,
                 boolean hierarchical) {
-            CollectionInfo info = sPool.acquire();
-            return (info != null) ? info : new CollectionInfo(rowCount,
-                    columnCount, hierarchical);
+            return obtain(rowCount, columnCount, hierarchical, SELECTION_MODE_NONE);
+        }
+
+        /**
+         * Obtains a pooled instance.
+         *
+         * @param rowCount The number of rows.
+         * @param columnCount The number of columns.
+         * @param hierarchical Whether the collection is hierarchical.
+         * @param selectionMode The collection's selection mode, one of:
+         *            <ul>
+         *            <li>{@link #SELECTION_MODE_NONE}
+         *            <li>{@link #SELECTION_MODE_SINGLE}
+         *            <li>{@link #SELECTION_MODE_MULTIPLE}
+         *            </ul>
+         */
+        public static CollectionInfo obtain(int rowCount, int columnCount,
+                boolean hierarchical, int selectionMode) {
+           final CollectionInfo info = sPool.acquire();
+            if (info == null) {
+                return new CollectionInfo(rowCount, columnCount, hierarchical, selectionMode);
+            }
+
+            info.mRowCount = rowCount;
+            info.mColumnCount = columnCount;
+            info.mHierarchical = hierarchical;
+            info.mSelectionMode = selectionMode;
+            return info;
         }
 
         /**
@@ -2709,12 +2930,14 @@
          * @param rowCount The number of rows.
          * @param columnCount The number of columns.
          * @param hierarchical Whether the collection is hierarchical.
+         * @param selectionMode The collection's selection mode.
          */
-        private CollectionInfo(int rowCount, int columnCount,
-                boolean hierarchical) {
+        private CollectionInfo(int rowCount, int columnCount, boolean hierarchical,
+                int selectionMode) {
             mRowCount = rowCount;
             mColumnCount = columnCount;
             mHierarchical = hierarchical;
+            mSelectionMode = selectionMode;
         }
 
         /**
@@ -2745,6 +2968,20 @@
         }
 
         /**
+         * Gets the collection's selection mode.
+         *
+         * @return The collection's selection mode, one of:
+         *         <ul>
+         *         <li>{@link #SELECTION_MODE_NONE}
+         *         <li>{@link #SELECTION_MODE_SINGLE}
+         *         <li>{@link #SELECTION_MODE_MULTIPLE}
+         *         </ul>
+         */
+        public int getSelectionMode() {
+            return mSelectionMode;
+        }
+
+        /**
          * Recycles this instance.
          */
         void recycle() {
@@ -2756,6 +2993,7 @@
             mRowCount = 0;
             mColumnCount = 0;
             mHierarchical = false;
+            mSelectionMode = SELECTION_MODE_NONE;
         }
     }
 
@@ -2781,12 +3019,11 @@
          * Obtains a pooled instance that is a clone of another one.
          *
          * @param other The instance to clone.
-         *
          * @hide
          */
         public static CollectionItemInfo obtain(CollectionItemInfo other) {
-            return CollectionItemInfo.obtain(other.mRowIndex, other.mRowSpan,
-                    other.mColumnIndex, other.mColumnSpan, other.mHeading);
+            return CollectionItemInfo.obtain(other.mRowIndex, other.mRowSpan, other.mColumnIndex,
+                    other.mColumnSpan, other.mHeading, other.mSelected);
         }
 
         /**
@@ -2800,9 +3037,34 @@
          */
         public static CollectionItemInfo obtain(int rowIndex, int rowSpan,
                 int columnIndex, int columnSpan, boolean heading) {
-            CollectionItemInfo info = sPool.acquire();
-            return (info != null) ? info : new CollectionItemInfo(rowIndex,
-                    rowSpan, columnIndex, columnSpan, heading);
+            return obtain(rowIndex, rowSpan, columnIndex, columnSpan, heading, false);
+        }
+
+        /**
+         * Obtains a pooled instance.
+         *
+         * @param rowIndex The row index at which the item is located.
+         * @param rowSpan The number of rows the item spans.
+         * @param columnIndex The column index at which the item is located.
+         * @param columnSpan The number of columns the item spans.
+         * @param heading Whether the item is a heading.
+         * @param selected Whether the item is selected.
+         */
+        public static CollectionItemInfo obtain(int rowIndex, int rowSpan,
+                int columnIndex, int columnSpan, boolean heading, boolean selected) {
+            final CollectionItemInfo info = sPool.acquire();
+            if (info == null) {
+                return new CollectionItemInfo(
+                        rowIndex, rowSpan, columnIndex, columnSpan, heading, selected);
+            }
+
+            info.mRowIndex = rowIndex;
+            info.mRowSpan = rowSpan;
+            info.mColumnIndex = columnIndex;
+            info.mColumnSpan = columnSpan;
+            info.mHeading = heading;
+            info.mSelected = selected;
+            return info;
         }
 
         private boolean mHeading;
@@ -2810,6 +3072,7 @@
         private int mRowIndex;
         private int mColumnSpan;
         private int mRowSpan;
+        private boolean mSelected;
 
         /**
          * Creates a new instance.
@@ -2820,13 +3083,14 @@
          * @param columnSpan The number of columns the item spans.
          * @param heading Whether the item is a heading.
          */
-        private CollectionItemInfo(int rowIndex, int rowSpan,
-                int columnIndex, int columnSpan, boolean heading) {
+        private CollectionItemInfo(int rowIndex, int rowSpan, int columnIndex, int columnSpan,
+                boolean heading, boolean selected) {
             mRowIndex = rowIndex;
             mRowSpan = rowSpan;
             mColumnIndex = columnIndex;
             mColumnSpan = columnSpan;
             mHeading = heading;
+            mSelected = selected;
         }
 
         /**
@@ -2876,6 +3140,15 @@
         }
 
         /**
+         * Gets if the collection item is selected.
+         *
+         * @return If the item is selected.
+         */
+        public boolean isSelected() {
+            return mSelected;
+        }
+
+        /**
          * Recycles this instance.
          */
         void recycle() {
@@ -2889,20 +3162,23 @@
             mRowIndex = 0;
             mRowSpan = 0;
             mHeading = false;
+            mSelected = false;
         }
     }
 
     /**
-     * @see Parcelable.Creator
+     * @see android.os.Parcelable.Creator
      */
     public static final Parcelable.Creator<AccessibilityNodeInfo> CREATOR =
             new Parcelable.Creator<AccessibilityNodeInfo>() {
+        @Override
         public AccessibilityNodeInfo createFromParcel(Parcel parcel) {
             AccessibilityNodeInfo info = AccessibilityNodeInfo.obtain();
             info.initFromParcel(parcel);
             return info;
         }
 
+        @Override
         public AccessibilityNodeInfo[] newArray(int size) {
             return new AccessibilityNodeInfo[size];
         }
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java b/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
deleted file mode 100644
index a9473a8..0000000
--- a/core/java/android/view/accessibility/AccessibilityNodeInfoCache.java
+++ /dev/null
@@ -1,329 +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 android.view.accessibility;
-
-import android.os.Build;
-import android.util.Log;
-import android.util.LongSparseArray;
-import android.util.SparseLongArray;
-
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Queue;
-
-/**
- * Simple cache for AccessibilityNodeInfos. The cache is mapping an
- * accessibility id to an info. The cache allows storing of
- * <code>null</code> values. It also tracks accessibility events
- * and invalidates accordingly.
- *
- * @hide
- */
-public class AccessibilityNodeInfoCache {
-
-    private static final String LOG_TAG = AccessibilityNodeInfoCache.class.getSimpleName();
-
-    private static final boolean ENABLED = true;
-
-    private static final boolean DEBUG = false;
-
-    private static final boolean CHECK_INTEGRITY_IF_DEBUGGABLE_BUILD = true;
-
-    private final Object mLock = new Object();
-
-    private final LongSparseArray<AccessibilityNodeInfo> mCacheImpl;
-
-    private int mWindowId;
-
-    public AccessibilityNodeInfoCache() {
-        if (ENABLED) {
-            mCacheImpl = new LongSparseArray<AccessibilityNodeInfo>();
-        } else {
-            mCacheImpl = null;
-        }
-    }
-
-    /**
-     * The cache keeps track of {@link AccessibilityEvent}s and invalidates
-     * cached nodes as appropriate.
-     *
-     * @param event An event.
-     */
-    public void onAccessibilityEvent(AccessibilityEvent event) {
-        if (ENABLED) {
-            final int eventType = event.getEventType();
-            switch (eventType) {
-                case AccessibilityEvent.TYPE_TOUCH_EXPLORATION_GESTURE_END:
-                case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
-                case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER:
-                case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT: {
-                    // If the active window changes, clear the cache.
-                    final int windowId = event.getWindowId();
-                    if (mWindowId != windowId) {
-                        mWindowId = windowId;
-                        clear();
-                    }
-                } break;
-                case AccessibilityEvent.TYPE_VIEW_FOCUSED:
-                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED:
-                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED:
-                case AccessibilityEvent.TYPE_VIEW_SELECTED:
-                case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
-                case AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED: {
-                    refreshCachedNode(event.getSourceNodeId());
-                } break;
-                case AccessibilityEvent.TYPE_VIEW_SCROLLED: {
-                    synchronized (mLock) {
-                        clearSubTreeLocked(event.getSourceNodeId());
-                    }
-                } break;
-                case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED: {
-                    synchronized (mLock) {
-                        final long sourceId = event.getSourceNodeId();
-                        if ((event.getContentChangeTypes()
-                                & AccessibilityEvent.CONTENT_CHANGE_TYPE_SUBTREE) != 0) {
-                            clearSubTreeLocked(sourceId);
-                        } else {
-                            refreshCachedNode(sourceId);
-                        }
-                    }
-                } break;
-            }
-            if (CHECK_INTEGRITY_IF_DEBUGGABLE_BUILD && Build.IS_DEBUGGABLE) {
-                checkIntegrity();
-            }
-        }
-    }
-
-    private void refreshCachedNode(long sourceId) {
-        if (DEBUG) {
-            Log.i(LOG_TAG, "Refreshing cached node.");
-        }
-        synchronized (mLock) {
-            AccessibilityNodeInfo cachedInfo = mCacheImpl.get(sourceId);
-            // If the source is not in the cache - nothing to do.
-            if (cachedInfo == null) {
-                return;
-            }
-            // The node changed so we will just refresh it right now.
-            if (cachedInfo.refresh(true)) {
-                return;
-            }
-            // Weird, we could not refresh. Just evict the entire sub-tree.
-            clearSubTreeLocked(sourceId);
-        }
-    }
-
-    /**
-     * Gets a cached {@link AccessibilityNodeInfo} given its accessibility node id.
-     *
-     * @param accessibilityNodeId The info accessibility node id.
-     * @return The cached {@link AccessibilityNodeInfo} or null if such not found.
-     */
-    public AccessibilityNodeInfo get(long accessibilityNodeId) {
-        if (ENABLED) {
-            synchronized(mLock) {
-                AccessibilityNodeInfo info = mCacheImpl.get(accessibilityNodeId);
-                if (info != null) {
-                    // Return a copy since the client calls to AccessibilityNodeInfo#recycle()
-                    // will wipe the data of the cached info.
-                    info = AccessibilityNodeInfo.obtain(info);
-                }
-                if (DEBUG) {
-                    Log.i(LOG_TAG, "get(" + accessibilityNodeId + ") = " + info);
-                }
-                return info;
-            }
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Caches an {@link AccessibilityNodeInfo} given its accessibility node id.
-     *
-     * @param info The {@link AccessibilityNodeInfo} to cache.
-     */
-    public void add(AccessibilityNodeInfo info) {
-        if (ENABLED) {
-            synchronized(mLock) {
-                if (DEBUG) {
-                    Log.i(LOG_TAG, "add(" + info + ")");
-                }
-
-                final long sourceId = info.getSourceNodeId();
-                AccessibilityNodeInfo oldInfo = mCacheImpl.get(sourceId);
-                if (oldInfo != null) {
-                    // If the added node is in the cache we have to be careful if
-                    // the new one represents a source state where some of the
-                    // children have been removed to avoid having disconnected
-                    // subtrees in the cache.
-                    SparseLongArray oldChildrenIds = oldInfo.getChildNodeIds();
-                    SparseLongArray newChildrenIds = info.getChildNodeIds();
-                    final int oldChildCount = oldChildrenIds.size();
-                    for (int i = 0; i < oldChildCount; i++) {
-                        final long oldChildId = oldChildrenIds.valueAt(i);
-                        if (newChildrenIds.indexOfValue(oldChildId) < 0) {
-                            clearSubTreeLocked(oldChildId);
-                        }
-                    }
-
-                    // Also be careful if the parent has changed since the new
-                    // parent may be a predecessor of the old parent which will
-                    // make the cached tree cyclic.
-                    final long oldParentId = oldInfo.getParentNodeId();
-                    if (info.getParentNodeId() != oldParentId) {
-                        clearSubTreeLocked(oldParentId);
-                    }
-                }
-
-                // Cache a copy since the client calls to AccessibilityNodeInfo#recycle()
-                // will wipe the data of the cached info.
-                AccessibilityNodeInfo clone = AccessibilityNodeInfo.obtain(info);
-                mCacheImpl.put(sourceId, clone);
-            }
-        }
-    }
-
-    /**
-     * Clears the cache.
-     */
-    public void clear() {
-        if (ENABLED) {
-            synchronized(mLock) {
-                if (DEBUG) {
-                    Log.i(LOG_TAG, "clear()");
-                }
-                // Recycle the nodes before clearing the cache.
-                final int nodeCount = mCacheImpl.size();
-                for (int i = 0; i < nodeCount; i++) {
-                    AccessibilityNodeInfo info = mCacheImpl.valueAt(i);
-                    info.recycle();
-                }
-                mCacheImpl.clear();
-            }
-        }
-    }
-
-    /**
-     * Clears a subtree rooted at the node with the given id.
-     *
-     * @param rootNodeId The root id.
-     */
-    private void clearSubTreeLocked(long rootNodeId) {
-        if (DEBUG) {
-            Log.i(LOG_TAG, "Clearing cached subtree.");
-        }
-        clearSubTreeRecursiveLocked(rootNodeId);
-    }
-
-    private void clearSubTreeRecursiveLocked(long rootNodeId) {
-        AccessibilityNodeInfo current = mCacheImpl.get(rootNodeId);
-        if (current == null) {
-            return;
-        }
-        mCacheImpl.remove(rootNodeId);
-        SparseLongArray childNodeIds = current.getChildNodeIds();
-        final int childCount = childNodeIds.size();
-        for (int i = 0; i < childCount; i++) {
-            final long childNodeId = childNodeIds.valueAt(i);
-            clearSubTreeRecursiveLocked(childNodeId);
-        }
-    }
-
-    /**
-     * Check the integrity of the cache which is it does not have nodes
-     * from more than one window, there are no duplicates, all nodes are
-     * connected, there is a single input focused node, and there is a
-     * single accessibility focused node.
-     */
-    private void checkIntegrity() {
-        synchronized (mLock) {
-            // Get the root.
-            if (mCacheImpl.size() <= 0) {
-                return;
-            }
-
-            // If the cache is a tree it does not matter from
-            // which node we start to search for the root.
-            AccessibilityNodeInfo root = mCacheImpl.valueAt(0);
-            AccessibilityNodeInfo parent = root;
-            while (parent != null) {
-                root = parent;
-                parent = mCacheImpl.get(parent.getParentNodeId());
-            }
-
-            // Traverse the tree and do some checks.
-            final int windowId = root.getWindowId();
-            AccessibilityNodeInfo accessFocus = null;
-            AccessibilityNodeInfo inputFocus = null;
-            HashSet<AccessibilityNodeInfo> seen = new HashSet<AccessibilityNodeInfo>();
-            Queue<AccessibilityNodeInfo> fringe = new LinkedList<AccessibilityNodeInfo>();
-            fringe.add(root);
-
-            while (!fringe.isEmpty()) {
-                AccessibilityNodeInfo current = fringe.poll();
-                // Check for duplicates
-                if (!seen.add(current)) {
-                    Log.e(LOG_TAG, "Duplicate node: " + current);
-                    return;
-                }
-
-                // Check for one accessibility focus.
-                if (current.isAccessibilityFocused()) {
-                    if (accessFocus != null) {
-                        Log.e(LOG_TAG, "Duplicate accessibility focus:" + current);
-                    } else {
-                        accessFocus = current;
-                    }
-                }
-
-                // Check for one input focus.
-                if (current.isFocused()) {
-                    if (inputFocus != null) {
-                        Log.e(LOG_TAG, "Duplicate input focus: " + current);
-                    } else {
-                        inputFocus = current;
-                    }
-                }
-
-                SparseLongArray childIds = current.getChildNodeIds();
-                final int childCount = childIds.size();
-                for (int i = 0; i < childCount; i++) {
-                    final long childId = childIds.valueAt(i);
-                    AccessibilityNodeInfo child = mCacheImpl.get(childId);
-                    if (child != null) {
-                        fringe.add(child);
-                    }
-                }
-            }
-
-            // Check for disconnected nodes or ones from another window.
-            for (int i = 0; i < mCacheImpl.size(); i++) {
-                AccessibilityNodeInfo info = mCacheImpl.valueAt(i);
-                if (!seen.contains(info)) {
-                    if (info.getWindowId() == windowId) {
-                        Log.e(LOG_TAG, "Disconneced node: " + info);
-                    } else {
-                        Log.e(LOG_TAG, "Node from: " + info.getWindowId() + " not from:"
-                                + windowId + " " + info);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/core/java/android/view/accessibility/AccessibilityNodeProvider.java b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
index 718c32f..abcbb70 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeProvider.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeProvider.java
@@ -70,9 +70,14 @@
 public abstract class AccessibilityNodeProvider {
 
     /**
+     * The virtual id for the hosting View.
+     */
+    public static final int HOST_VIEW_ID = -1;
+
+    /**
      * Returns an {@link AccessibilityNodeInfo} representing a virtual view,
      * i.e. a descendant of the host View, with the given <code>virtualViewId</code>
-     * or the host View itself if <code>virtualViewId</code> equals to {@link View#NO_ID}.
+     * or the host View itself if <code>virtualViewId</code> equals to {@link #HOST_VIEW_ID}.
      * <p>
      * A virtual descendant is an imaginary View that is reported as a part of the view
      * hierarchy for accessibility purposes. This enables custom views that draw complex
@@ -99,7 +104,7 @@
     /**
      * Performs an accessibility action on a virtual view, i.e. a descendant of the
      * host View, with the given <code>virtualViewId</code> or the host View itself
-     * if <code>virtualViewId</code> equals to {@link View#NO_ID}.
+     * if <code>virtualViewId</code> equals to {@link #HOST_VIEW_ID}.
      *
      * @param virtualViewId A client defined virtual view id.
      * @param action The action to perform.
@@ -117,8 +122,8 @@
     /**
      * Finds {@link AccessibilityNodeInfo}s by text. The match is case insensitive
      * containment. The search is relative to the virtual view, i.e. a descendant of the
-     * host View, with the given <code>virtualViewId</code> or the host View itself 
-     * <code>virtualViewId</code> equals to {@link View#NO_ID}.
+     * host View, with the given <code>virtualViewId</code> or the host View itself
+     * <code>virtualViewId</code> equals to {@link #HOST_VIEW_ID}.
      *
      * @param virtualViewId A client defined virtual view id which defined
      *     the root of the tree in which to perform the search.
diff --git a/core/java/android/view/accessibility/AccessibilityRecord.aidl b/core/java/android/view/accessibility/AccessibilityRecord.aidl
new file mode 100644
index 0000000..d542af0
--- /dev/null
+++ b/core/java/android/view/accessibility/AccessibilityRecord.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.view.accessibility;
+
+parcelable AccessibilityRecord;
diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java
index 3fcd218..cc6a71d 100644
--- a/core/java/android/view/accessibility/AccessibilityRecord.java
+++ b/core/java/android/view/accessibility/AccessibilityRecord.java
@@ -78,7 +78,7 @@
     private boolean mIsInPool;
 
     boolean mSealed;
-    int mBooleanProperties = PROPERTY_IMPORTANT_FOR_ACCESSIBILITY;
+    int mBooleanProperties = 0;
     int mCurrentItemIndex = UNDEFINED;
     int mItemCount = UNDEFINED;
     int mFromIndex = UNDEFINED;
@@ -791,7 +791,7 @@
      */
     void clear() {
         mSealed = false;
-        mBooleanProperties = PROPERTY_IMPORTANT_FOR_ACCESSIBILITY;
+        mBooleanProperties = 0;
         mCurrentItemIndex = UNDEFINED;
         mItemCount = UNDEFINED;
         mFromIndex = UNDEFINED;
diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.aidl b/core/java/android/view/accessibility/AccessibilityWindowInfo.aidl
new file mode 100644
index 0000000..fdb25fb
--- /dev/null
+++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.view.accessibility;
+
+parcelable AccessibilityWindowInfo;
diff --git a/core/java/android/view/accessibility/AccessibilityWindowInfo.java b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
new file mode 100644
index 0000000..80b5c50
--- /dev/null
+++ b/core/java/android/view/accessibility/AccessibilityWindowInfo.java
@@ -0,0 +1,574 @@
+/*
+ * Copyright (C) 2014 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 android.view.accessibility;
+
+import android.graphics.Rect;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.LongArray;
+import android.util.Pools.SynchronizedPool;
+
+/**
+ * This class represents a state snapshot of a window for accessibility
+ * purposes. The screen content contains one or more windows where some
+ * windows can be descendants of other windows, which is the windows are
+ * hierarchically ordered. Note that there is no root window. Hence, the
+ * screen content can be seen as a collection of window trees.
+ */
+public final class AccessibilityWindowInfo implements Parcelable {
+
+    private static final boolean DEBUG = false;
+
+    /**
+     * Window type: This is an application window. Such a window shows UI for
+     * interacting with an application.
+     */
+    public static final int TYPE_APPLICATION = 1;
+
+    /**
+     * Window type: This is an input method window. Such a window shows UI for
+     * inputting text such as keyboard, suggestions, etc.
+     */
+    public static final int TYPE_INPUT_METHOD = 2;
+
+    /**
+     * Window type: This is an system window. Such a window shows UI for
+     * interacting with the system.
+     */
+    public static final int TYPE_SYSTEM = 3;
+
+    private static final int UNDEFINED = -1;
+
+    private static final int BOOLEAN_PROPERTY_ACTIVE = 1 << 0;
+    private static final int BOOLEAN_PROPERTY_FOCUSED = 1 << 1;
+
+    // Housekeeping.
+    private static final int MAX_POOL_SIZE = 10;
+    private static final SynchronizedPool<AccessibilityWindowInfo> sPool =
+            new SynchronizedPool<AccessibilityWindowInfo>(MAX_POOL_SIZE);
+
+    // Data.
+    private int mType = UNDEFINED;
+    private int mLayer = UNDEFINED;
+    private int mBooleanProperties;
+    private int mId = UNDEFINED;
+    private int mParentId = UNDEFINED;
+    private final Rect mBoundsInScreen = new Rect();
+    private LongArray mChildIds;
+
+    private int mConnectionId = UNDEFINED;
+
+    private AccessibilityWindowInfo() {
+        /* do nothing - hide constructor */
+    }
+
+    /**
+     * Gets the type of the window.
+     *
+     * @return The type.
+     *
+     * @see #TYPE_APPLICATION
+     * @see #TYPE_INPUT_METHOD
+     * @see #TYPE_SYSTEM
+     */
+    public int getType() {
+        return mType;
+    }
+
+    /**
+     * Sets the type of the window.
+     *
+     * @param The type
+     *
+     * @hide
+     */
+    public void setType(int type) {
+        mType = type;
+    }
+
+    /**
+     * Gets the layer which determines the Z-order of the window. Windows
+     * with greater layer appear on top of windows with lesser layer.
+     *
+     * @return The window layer.
+     */
+    public int getLayer() {
+        return mLayer;
+    }
+
+    /**
+     * Sets the layer which determines the Z-order of the window. Windows
+     * with greater layer appear on top of windows with lesser layer.
+     *
+     * @param The window layer.
+     *
+     * @hide
+     */
+    public void setLayer(int layer) {
+        mLayer = layer;
+    }
+
+    /**
+     * Gets the root node in the window's hierarchy.
+     *
+     * @return The root node.
+     */
+    public AccessibilityNodeInfo getRoot() {
+        if (mConnectionId == UNDEFINED) {
+            return null;
+        }
+        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+        return client.findAccessibilityNodeInfoByAccessibilityId(mConnectionId,
+                mId, AccessibilityNodeInfo.ROOT_NODE_ID,
+                true, AccessibilityNodeInfo.FLAG_PREFETCH_DESCENDANTS);
+    }
+
+    /**
+     * Gets the parent window if such.
+     *
+     * @return The parent window.
+     */
+    public AccessibilityWindowInfo getParent() {
+        if (mConnectionId == UNDEFINED || mParentId == UNDEFINED) {
+            return null;
+        }
+        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+        return client.getWindow(mConnectionId, mParentId);
+    }
+
+    /**
+     * Sets the parent window id.
+     *
+     * @param parentId The parent id.
+     *
+     * @hide
+     */
+    public void setParentId(int parentId) {
+        mParentId = parentId;
+    }
+
+    /**
+     * Gets the unique window id.
+     *
+     * @return windowId The window id.
+     */
+    public int getId() {
+        return mId;
+    }
+
+    /**
+     * Sets the unique window id.
+     *
+     * @param windowId The window id.
+     *
+     * @hide
+     */
+    public void setId(int id) {
+        mId = id;
+    }
+
+    /**
+     * Sets the unique id of the IAccessibilityServiceConnection over which
+     * this instance can send requests to the system.
+     *
+     * @param connectionId The connection id.
+     *
+     * @hide
+     */
+    public void setConnectionId(int connectionId) {
+        mConnectionId = connectionId;
+    }
+
+    /**
+     * Gets the bounds of this window in the screen.
+     *
+     * @param outBounds The out window bounds.
+     */
+    public void getBoundsInScreen(Rect outBounds) {
+        outBounds.set(mBoundsInScreen);
+    }
+
+    /**
+     * Sets the bounds of this window in the screen.
+     *
+     * @param bounds The out window bounds.
+     *
+     * @hide
+     */
+    public void setBoundsInScreen(Rect bounds) {
+        mBoundsInScreen.set(bounds);
+    }
+
+    /**
+     * Gets if this window is active. An active window is the one
+     * the user is currently touching or the window has input focus
+     * and the user is not touching any window.
+     *
+     * @return Whether this is the active window.
+     */
+    public boolean isActive() {
+        return getBooleanProperty(BOOLEAN_PROPERTY_ACTIVE);
+    }
+
+    /**
+     * Sets if this window is active, which is this is the window
+     * the user is currently touching or the window has input focus
+     * and the user is not touching any window.
+     *
+     * @param Whether this is the active window.
+     *
+     * @hide
+     */
+    public void setActive(boolean active) {
+        setBooleanProperty(BOOLEAN_PROPERTY_ACTIVE, active);
+    }
+
+    /**
+     * Gets if this window has input focus.
+     *
+     * @return Whether has input focus.
+     */
+    public boolean isFocused() {
+        return getBooleanProperty(BOOLEAN_PROPERTY_FOCUSED);
+    }
+
+    /**
+     * Sets if this window has input focus.
+     *
+     * @param Whether has input focus.
+     *
+     * @hide
+     */
+    public void setFocused(boolean focused) {
+        setBooleanProperty(BOOLEAN_PROPERTY_FOCUSED, focused);
+    }
+
+    /**
+     * Gets the number of child windows.
+     *
+     * @return The child count.
+     */
+    public int getChildCount() {
+        return (mChildIds != null) ? mChildIds.size() : 0;
+    }
+
+    /**
+     * Gets the child window at a given index.
+     *
+     * @param index The index.
+     * @return The child.
+     */
+    public AccessibilityWindowInfo getChild(int index) {
+        if (mChildIds == null) {
+            throw new IndexOutOfBoundsException();
+        }
+        if (mConnectionId == UNDEFINED) {
+            return null;
+        }
+        final int childId = (int) mChildIds.get(index);
+        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
+        return client.getWindow(mConnectionId, childId);
+    }
+
+    /**
+     * Adds a child window.
+     *
+     * @param childId The child window id.
+     *
+     * @hide
+     */
+    public void addChild(int childId) {
+        if (mChildIds == null) {
+            mChildIds = new LongArray();
+        }
+        mChildIds.add(childId);
+    }
+
+    /**
+     * Returns a cached instance if such is available or a new one is
+     * created.
+     *
+     * @return An instance.
+     */
+    public static AccessibilityWindowInfo obtain() {
+        AccessibilityWindowInfo info = sPool.acquire();
+        if (info == null) {
+            info = new AccessibilityWindowInfo();
+        }
+        return info;
+    }
+
+    /**
+     * Returns a cached instance if such is available or a new one is
+     * created. The returned instance is initialized from the given
+     * <code>info</code>.
+     *
+     * @param info The other info.
+     * @return An instance.
+     */
+    public static AccessibilityWindowInfo obtain(AccessibilityWindowInfo info) {
+        AccessibilityWindowInfo infoClone = obtain();
+
+        infoClone.mType = info.mType;
+        infoClone.mLayer = info.mLayer;
+        infoClone.mBooleanProperties = info.mBooleanProperties;
+        infoClone.mId = info.mId;
+        infoClone.mParentId = info.mParentId;
+        infoClone.mBoundsInScreen.set(info.mBoundsInScreen);
+
+        if (info.mChildIds != null && info.mChildIds.size() > 0) {
+            if (infoClone.mChildIds == null) {
+                infoClone.mChildIds = info.mChildIds.clone();
+            } else {
+                infoClone.mChildIds.addAll(info.mChildIds);
+            }
+        }
+
+        infoClone.mConnectionId = info.mConnectionId;
+
+        return infoClone;
+    }
+
+    /**
+     * Return an instance back to be reused.
+     * <p>
+     * <strong>Note:</strong> You must not touch the object after calling this function.
+     * </p>
+     *
+     * @throws IllegalStateException If the info is already recycled.
+     */
+    public void recycle() {
+        clear();
+        sPool.release(this);
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int flags) {
+        parcel.writeInt(mType);
+        parcel.writeInt(mLayer);
+        parcel.writeInt(mBooleanProperties);
+        parcel.writeInt(mId);
+        parcel.writeInt(mParentId);
+        mBoundsInScreen.writeToParcel(parcel, flags);
+
+        final LongArray childIds = mChildIds;
+        if (childIds == null) {
+            parcel.writeInt(0);
+        } else {
+            final int childCount = childIds.size();
+            parcel.writeInt(childCount);
+            for (int i = 0; i < childCount; i++) {
+                parcel.writeInt((int) childIds.get(i));
+            }
+        }
+
+        parcel.writeInt(mConnectionId);
+    }
+
+    private void initFromParcel(Parcel parcel) {
+        mType = parcel.readInt();
+        mLayer = parcel.readInt();
+        mBooleanProperties = parcel.readInt();
+        mId = parcel.readInt();
+        mParentId = parcel.readInt();
+        mBoundsInScreen.readFromParcel(parcel);
+
+        final int childCount = parcel.readInt();
+        if (childCount > 0) {
+            if (mChildIds == null) {
+                mChildIds = new LongArray(childCount);
+            }
+            for (int i = 0; i < childCount; i++) {
+                final int childId = parcel.readInt();
+                mChildIds.add(childId);
+            }
+        }
+
+        mConnectionId = parcel.readInt();
+    }
+
+    @Override
+    public int hashCode() {
+        return mId;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        AccessibilityWindowInfo other = (AccessibilityWindowInfo) obj;
+        return (mId == other.mId);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("AccessibilityWindowInfo[");
+        builder.append("id=").append(mId);
+        builder.append(", type=").append(typeToString(mType));
+        builder.append(", layer=").append(mLayer);
+        builder.append(", bounds=").append(mBoundsInScreen);
+        builder.append(", focused=").append(isFocused());
+        builder.append(", active=").append(isActive());
+        if (DEBUG) {
+            builder.append(", parent=").append(mParentId);
+            builder.append(", children=[");
+            if (mChildIds != null) {
+                final int childCount = mChildIds.size();
+                for (int i = 0; i < childCount; i++) {
+                    builder.append(mChildIds.get(i));
+                    if (i < childCount - 1) {
+                        builder.append(',');
+                    }
+                }
+            } else {
+                builder.append("null");
+            }
+            builder.append(']');
+        } else {
+            builder.append(", hasParent=").append(mParentId != UNDEFINED);
+            builder.append(", hasChildren=").append(mChildIds != null
+                    && mChildIds.size() > 0);
+        }
+        builder.append(']');
+        return builder.toString();
+    }
+
+    /**
+     * Clears the internal state.
+     */
+    private void clear() {
+        mType = UNDEFINED;
+        mLayer = UNDEFINED;
+        mBooleanProperties = 0;
+        mId = UNDEFINED;
+        mParentId = UNDEFINED;
+        mBoundsInScreen.setEmpty();
+        if (mChildIds != null) {
+            mChildIds.clear();
+        }
+        mConnectionId = UNDEFINED;
+    }
+
+    /**
+     * Gets the value of a boolean property.
+     *
+     * @param property The property.
+     * @return The value.
+     */
+    private boolean getBooleanProperty(int property) {
+        return (mBooleanProperties & property) != 0;
+    }
+
+    /**
+     * Sets a boolean property.
+     *
+     * @param property The property.
+     * @param value The value.
+     *
+     * @throws IllegalStateException If called from an AccessibilityService.
+     */
+    private void setBooleanProperty(int property, boolean value) {
+        if (value) {
+            mBooleanProperties |= property;
+        } else {
+            mBooleanProperties &= ~property;
+        }
+    }
+
+    private static String typeToString(int type) {
+        switch (type) {
+            case TYPE_APPLICATION: {
+                return "TYPE_APPLICATION";
+            }
+            case TYPE_INPUT_METHOD: {
+                return "TYPE_INPUT_METHOD";
+            }
+            case TYPE_SYSTEM: {
+                return "TYPE_SYSTEM";
+            }
+            default:
+                return "<UNKNOWN>";
+        }
+    }
+
+    /**
+     * Checks whether this window changed. The argument should be
+     * another state of the same window, which is have the same id
+     * and type as they never change.
+     *
+     * @param other The new state.
+     * @return Whether something changed.
+     *
+     * @hide
+     */
+    public boolean changed(AccessibilityWindowInfo other) {
+        if (other.mId != mId) {
+            throw new IllegalArgumentException("Not same window.");
+        }
+        if (other.mType != mType) {
+            throw new IllegalArgumentException("Not same type.");
+        }
+        if (!mBoundsInScreen.equals(mBoundsInScreen)) {
+            return true;
+        }
+        if (mLayer != other.mLayer) {
+            return true;
+        }
+        if (mBooleanProperties != other.mBooleanProperties) {
+            return true;
+        }
+        if (mParentId != other.mParentId) {
+            return true;
+        }
+        if (mChildIds == null) {
+            if (other.mChildIds != null) {
+                return true;
+            }
+        } else if (!mChildIds.equals(other.mChildIds)) {
+            return true;
+        }
+        return false;
+    }
+
+    public static final Parcelable.Creator<AccessibilityWindowInfo> CREATOR =
+            new Creator<AccessibilityWindowInfo>() {
+        @Override
+        public AccessibilityWindowInfo createFromParcel(Parcel parcel) {
+            AccessibilityWindowInfo info = obtain();
+            info.initFromParcel(parcel);
+            return info;
+        }
+
+        @Override
+        public AccessibilityWindowInfo[] newArray(int size) {
+            return new AccessibilityWindowInfo[size];
+        }
+    };
+}
diff --git a/core/java/android/view/accessibility/CaptioningManager.java b/core/java/android/view/accessibility/CaptioningManager.java
index 557239f..a0134d6 100644
--- a/core/java/android/view/accessibility/CaptioningManager.java
+++ b/core/java/android/view/accessibility/CaptioningManager.java
@@ -250,6 +250,9 @@
      * background colors, edge properties, and typeface.
      */
     public static final class CaptionStyle {
+        /** Packed value for a color of 'none' and a cached opacity of 100%. */
+        private static final int COLOR_NONE_OPAQUE = 0x000000FF;
+
         private static final CaptionStyle WHITE_ON_BLACK;
         private static final CaptionStyle BLACK_ON_WHITE;
         private static final CaptionStyle YELLOW_ON_BLACK;
@@ -271,6 +274,12 @@
         /** Edge type value specifying drop-shadowed character edges. */
         public static final int EDGE_TYPE_DROP_SHADOW = 2;
 
+        /** Edge type value specifying raised bevel character edges. */
+        public static final int EDGE_TYPE_RAISED = 3;
+
+        /** Edge type value specifying depressed bevel character edges. */
+        public static final int EDGE_TYPE_DEPRESSED = 4;
+
         /** The preferred foreground color for video captions. */
         public final int foregroundColor;
 
@@ -283,6 +292,8 @@
          * <li>{@link #EDGE_TYPE_NONE}
          * <li>{@link #EDGE_TYPE_OUTLINE}
          * <li>{@link #EDGE_TYPE_DROP_SHADOW}
+         * <li>{@link #EDGE_TYPE_RAISED}
+         * <li>{@link #EDGE_TYPE_DEPRESSED}
          * </ul>
          */
         public final int edgeType;
@@ -293,6 +304,9 @@
          */
         public final int edgeColor;
 
+        /** The preferred window color for video captions. */
+        public final int windowColor;
+
         /**
          * @hide
          */
@@ -301,11 +315,12 @@
         private Typeface mParsedTypeface;
 
         private CaptionStyle(int foregroundColor, int backgroundColor, int edgeType, int edgeColor,
-                String rawTypeface) {
+                int windowColor, String rawTypeface) {
             this.foregroundColor = foregroundColor;
             this.backgroundColor = backgroundColor;
             this.edgeType = edgeType;
             this.edgeColor = edgeColor;
+            this.windowColor = windowColor;
 
             mRawTypeface = rawTypeface;
         }
@@ -334,25 +349,27 @@
                     cr, Secure.ACCESSIBILITY_CAPTIONING_EDGE_TYPE, defStyle.edgeType);
             final int edgeColor = Secure.getInt(
                     cr, Secure.ACCESSIBILITY_CAPTIONING_EDGE_COLOR, defStyle.edgeColor);
+            final int windowColor = Secure.getInt(
+                    cr, Secure.ACCESSIBILITY_CAPTIONING_WINDOW_COLOR, defStyle.windowColor);
 
             String rawTypeface = Secure.getString(cr, Secure.ACCESSIBILITY_CAPTIONING_TYPEFACE);
             if (rawTypeface == null) {
                 rawTypeface = defStyle.mRawTypeface;
             }
 
-            return new CaptionStyle(
-                    foregroundColor, backgroundColor, edgeType, edgeColor, rawTypeface);
+            return new CaptionStyle(foregroundColor, backgroundColor, edgeType, edgeColor,
+                    windowColor, rawTypeface);
         }
 
         static {
-            WHITE_ON_BLACK = new CaptionStyle(
-                    Color.WHITE, Color.BLACK, EDGE_TYPE_NONE, Color.BLACK, null);
-            BLACK_ON_WHITE = new CaptionStyle(
-                    Color.BLACK, Color.WHITE, EDGE_TYPE_NONE, Color.BLACK, null);
-            YELLOW_ON_BLACK = new CaptionStyle(
-                    Color.YELLOW, Color.BLACK, EDGE_TYPE_NONE, Color.BLACK, null);
-            YELLOW_ON_BLUE = new CaptionStyle(
-                    Color.YELLOW, Color.BLUE, EDGE_TYPE_NONE, Color.BLACK, null);
+            WHITE_ON_BLACK = new CaptionStyle(Color.WHITE, Color.BLACK, EDGE_TYPE_NONE,
+                    Color.BLACK, COLOR_NONE_OPAQUE, null);
+            BLACK_ON_WHITE = new CaptionStyle(Color.BLACK, Color.WHITE, EDGE_TYPE_NONE,
+                    Color.BLACK, COLOR_NONE_OPAQUE, null);
+            YELLOW_ON_BLACK = new CaptionStyle(Color.YELLOW, Color.BLACK, EDGE_TYPE_NONE,
+                    Color.BLACK, COLOR_NONE_OPAQUE, null);
+            YELLOW_ON_BLUE = new CaptionStyle(Color.YELLOW, Color.BLUE, EDGE_TYPE_NONE,
+                    Color.BLACK, COLOR_NONE_OPAQUE, null);
 
             PRESETS = new CaptionStyle[] {
                     WHITE_ON_BLACK, BLACK_ON_WHITE, YELLOW_ON_BLACK, YELLOW_ON_BLUE
diff --git a/core/java/android/view/accessibility/IAccessibilityManager.aidl b/core/java/android/view/accessibility/IAccessibilityManager.aidl
index fe3e5c6..b6570cc 100644
--- a/core/java/android/view/accessibility/IAccessibilityManager.aidl
+++ b/core/java/android/view/accessibility/IAccessibilityManager.aidl
@@ -57,4 +57,6 @@
 
     void temporaryEnableAccessibilityStateUntilKeyguardRemoved(in ComponentName service,
             boolean touchExplorationEnabled);
+
+    IBinder getWindowToken(int windowId);
 }
diff --git a/core/java/android/view/animation/AnimationUtils.java b/core/java/android/view/animation/AnimationUtils.java
index 38043b2..1d1fa1e 100644
--- a/core/java/android/view/animation/AnimationUtils.java
+++ b/core/java/android/view/animation/AnimationUtils.java
@@ -324,6 +324,8 @@
                 interpolator = new AnticipateOvershootInterpolator(c, attrs);
             } else if (name.equals("bounceInterpolator")) {
                 interpolator = new BounceInterpolator(c, attrs);
+            } else if (name.equals("pathInterpolator")) {
+                interpolator = new PathInterpolator(c, attrs);
             } else {
                 throw new RuntimeException("Unknown interpolator name: " + parser.getName());
             }
diff --git a/core/java/android/view/animation/BounceInterpolator.java b/core/java/android/view/animation/BounceInterpolator.java
index f79e730..ecf99a7 100644
--- a/core/java/android/view/animation/BounceInterpolator.java
+++ b/core/java/android/view/animation/BounceInterpolator.java
@@ -17,7 +17,6 @@
 package android.view.animation;
 
 import android.content.Context;
-import android.content.res.TypedArray;
 import android.util.AttributeSet;
 
 /**
diff --git a/core/java/android/view/animation/ClipRectAnimation.java b/core/java/android/view/animation/ClipRectAnimation.java
new file mode 100644
index 0000000..2361501
--- /dev/null
+++ b/core/java/android/view/animation/ClipRectAnimation.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2014 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 android.view.animation;
+
+import android.graphics.Rect;
+
+/**
+ * An animation that controls the clip of an object. See the
+ * {@link android.view.animation full package} description for details and
+ * sample code.
+ *
+ * @hide
+ */
+public class ClipRectAnimation extends Animation {
+    private Rect mFromRect = new Rect();
+    private Rect mToRect = new Rect();
+
+    /**
+     * Constructor to use when building a ClipRectAnimation from code
+     *
+     * @param fromClip the clip rect to animate from
+     * @param toClip the clip rect to animate to
+     */
+    public ClipRectAnimation(Rect fromClip, Rect toClip) {
+        if (fromClip == null || toClip == null) {
+            throw new RuntimeException("Expected non-null animation clip rects");
+        }
+        mFromRect.set(fromClip);
+        mToRect.set(toClip);
+    }
+
+    @Override
+    protected void applyTransformation(float it, Transformation tr) {
+        int l = mFromRect.left + (int) ((mToRect.left - mFromRect.left) * it);
+        int t = mFromRect.top + (int) ((mToRect.top - mFromRect.top) * it);
+        int r = mFromRect.right + (int) ((mToRect.right - mFromRect.right) * it);
+        int b = mFromRect.bottom + (int) ((mToRect.bottom - mFromRect.bottom) * it);
+        tr.setClipRect(l, t, r, b);
+    }
+
+    @Override
+    public boolean willChangeTransformationMatrix() {
+        return false;
+    }
+}
diff --git a/core/java/android/view/animation/PathInterpolator.java b/core/java/android/view/animation/PathInterpolator.java
new file mode 100644
index 0000000..a369509
--- /dev/null
+++ b/core/java/android/view/animation/PathInterpolator.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2013 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 android.view.animation;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Path;
+import android.util.AttributeSet;
+import android.view.InflateException;
+
+/**
+ * An interpolator that can traverse a Path that extends from <code>Point</code>
+ * <code>(0, 0)</code> to <code>(1, 1)</code>. The x coordinate along the <code>Path</code>
+ * is the input value and the output is the y coordinate of the line at that point.
+ * This means that the Path must conform to a function <code>y = f(x)</code>.
+ *
+ * <p>The <code>Path</code> must not have gaps in the x direction and must not
+ * loop back on itself such that there can be two points sharing the same x coordinate.
+ * It is alright to have a disjoint line in the vertical direction:</p>
+ * <p><blockquote><pre>
+ *     Path path = new Path();
+ *     path.lineTo(0.25f, 0.25f);
+ *     path.moveTo(0.25f, 0.5f);
+ *     path.lineTo(1f, 1f);
+ * </pre></blockquote></p>
+ */
+public class PathInterpolator implements Interpolator {
+
+    // This governs how accurate the approximation of the Path is.
+    private static final float PRECISION = 0.002f;
+
+    private float[] mX; // x coordinates in the line
+
+    private float[] mY; // y coordinates in the line
+
+    /**
+     * Create an interpolator for an arbitrary <code>Path</code>. The <code>Path</code>
+     * must begin at <code>(0, 0)</code> and end at <code>(1, 1)</code>.
+     *
+     * @param path The <code>Path</code> to use to make the line representing the interpolator.
+     */
+    public PathInterpolator(Path path) {
+        initPath(path);
+    }
+
+    /**
+     * Create an interpolator for a quadratic Bezier curve. The end points
+     * <code>(0, 0)</code> and <code>(1, 1)</code> are assumed.
+     *
+     * @param controlX The x coordinate of the quadratic Bezier control point.
+     * @param controlY The y coordinate of the quadratic Bezier control point.
+     */
+    public PathInterpolator(float controlX, float controlY) {
+        initQuad(controlX, controlY);
+    }
+
+    /**
+     * Create an interpolator for a cubic Bezier curve.  The end points
+     * <code>(0, 0)</code> and <code>(1, 1)</code> are assumed.
+     *
+     * @param controlX1 The x coordinate of the first control point of the cubic Bezier.
+     * @param controlY1 The y coordinate of the first control point of the cubic Bezier.
+     * @param controlX2 The x coordinate of the second control point of the cubic Bezier.
+     * @param controlY2 The y coordinate of the second control point of the cubic Bezier.
+     */
+    public PathInterpolator(float controlX1, float controlY1, float controlX2, float controlY2) {
+        initCubic(controlX1, controlY1, controlX2, controlY2);
+    }
+
+    public PathInterpolator(Context context, AttributeSet attrs) {
+        TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.PathInterpolator);
+        if (!a.hasValue(com.android.internal.R.styleable.PathInterpolator_controlX1)) {
+            throw new InflateException("pathInterpolator requires the controlX1 attribute");
+        } else if (!a.hasValue(com.android.internal.R.styleable.PathInterpolator_controlY1)) {
+            throw new InflateException("pathInterpolator requires the controlY1 attribute");
+        }
+        float x1 = a.getFloat(com.android.internal.R.styleable.PathInterpolator_controlX1, 0);
+        float y1 = a.getFloat(com.android.internal.R.styleable.PathInterpolator_controlY1, 0);
+
+        boolean hasX2 = a.hasValue(com.android.internal.R.styleable.PathInterpolator_controlX2);
+        boolean hasY2 = a.hasValue(com.android.internal.R.styleable.PathInterpolator_controlY2);
+
+        if (hasX2 != hasY2) {
+            throw new InflateException(
+                    "pathInterpolator requires both controlX2 and controlY2 for cubic Beziers.");
+        }
+
+        if (!hasX2) {
+            initQuad(x1, y1);
+        } else {
+            float x2 = a.getFloat(com.android.internal.R.styleable.PathInterpolator_controlX2, 0);
+            float y2 = a.getFloat(com.android.internal.R.styleable.PathInterpolator_controlY2, 0);
+            initCubic(x1, y1, x2, y2);
+        }
+
+        a.recycle();
+    }
+
+    private void initQuad(float controlX, float controlY) {
+        Path path = new Path();
+        path.moveTo(0, 0);
+        path.quadTo(controlX, controlY, 1f, 1f);
+        initPath(path);
+    }
+
+    private void initCubic(float x1, float y1, float x2, float y2) {
+        Path path = new Path();
+        path.moveTo(0, 0);
+        path.cubicTo(x1, y1, x2, y2, 1f, 1f);
+        initPath(path);
+    }
+
+    private void initPath(Path path) {
+        float[] pointComponents = path.approximate(PRECISION);
+
+        int numPoints = pointComponents.length / 3;
+        if (pointComponents[1] != 0 || pointComponents[2] != 0
+                || pointComponents[pointComponents.length - 2] != 1
+                || pointComponents[pointComponents.length - 1] != 1) {
+            throw new IllegalArgumentException("The Path must start at (0,0) and end at (1,1)");
+        }
+
+        mX = new float[numPoints];
+        mY = new float[numPoints];
+        float prevX = 0;
+        float prevFraction = 0;
+        int componentIndex = 0;
+        for (int i = 0; i < numPoints; i++) {
+            float fraction = pointComponents[componentIndex++];
+            float x = pointComponents[componentIndex++];
+            float y = pointComponents[componentIndex++];
+            if (fraction == prevFraction && x != prevX) {
+                throw new IllegalArgumentException(
+                        "The Path cannot have discontinuity in the X axis.");
+            }
+            if (x < prevX) {
+                throw new IllegalArgumentException("The Path cannot loop back on itself.");
+            }
+            mX[i] = x;
+            mY[i] = y;
+            prevX = x;
+            prevFraction = fraction;
+        }
+    }
+
+    /**
+     * Using the line in the Path in this interpolator that can be described as
+     * <code>y = f(x)</code>, finds the y coordinate of the line given <code>t</code>
+     * as the x coordinate. Values less than 0 will always return 0 and values greater
+     * than 1 will always return 1.
+     *
+     * @param t Treated as the x coordinate along the line.
+     * @return The y coordinate of the Path along the line where x = <code>t</code>.
+     * @see Interpolator#getInterpolation(float)
+     */
+    @Override
+    public float getInterpolation(float t) {
+        if (t <= 0) {
+            return 0;
+        } else if (t >= 1) {
+            return 1;
+        }
+        // Do a binary search for the correct x to interpolate between.
+        int startIndex = 0;
+        int endIndex = mX.length - 1;
+
+        while (endIndex - startIndex > 1) {
+            int midIndex = (startIndex + endIndex) / 2;
+            if (t < mX[midIndex]) {
+                endIndex = midIndex;
+            } else {
+                startIndex = midIndex;
+            }
+        }
+
+        float xRange = mX[endIndex] - mX[startIndex];
+        if (xRange == 0) {
+            return mY[startIndex];
+        }
+
+        float tInRange = t - mX[startIndex];
+        float fraction = tInRange / xRange;
+
+        float startY = mY[startIndex];
+        float endY = mY[endIndex];
+        return startY + (fraction * (endY - startY));
+    }
+
+}
diff --git a/core/java/android/view/animation/Transformation.java b/core/java/android/view/animation/Transformation.java
index 890909b..2f4fe73 100644
--- a/core/java/android/view/animation/Transformation.java
+++ b/core/java/android/view/animation/Transformation.java
@@ -17,6 +17,7 @@
 package android.view.animation;
 
 import android.graphics.Matrix;
+import android.graphics.Rect;
 
 import java.io.PrintWriter;
 
@@ -47,6 +48,9 @@
     protected float mAlpha;
     protected int mTransformationType;
 
+    private boolean mHasClipRect;
+    private Rect mClipRect = new Rect();
+
     /**
      * Creates a new transformation with alpha = 1 and the identity matrix.
      */
@@ -65,6 +69,8 @@
         } else {
             mMatrix.reset();
         }
+        mClipRect.setEmpty();
+        mHasClipRect = false;
         mAlpha = 1.0f;
         mTransformationType = TYPE_BOTH;
     }
@@ -98,9 +104,15 @@
     public void set(Transformation t) {
         mAlpha = t.getAlpha();
         mMatrix.set(t.getMatrix());
+        if (t.mHasClipRect) {
+            setClipRect(t.getClipRect());
+        } else {
+            mHasClipRect = false;
+            mClipRect.setEmpty();
+        }
         mTransformationType = t.getTransformationType();
     }
-    
+
     /**
      * Apply this Transformation to an existing Transformation, e.g. apply
      * a scale effect to something that has already been rotated.
@@ -109,6 +121,9 @@
     public void compose(Transformation t) {
         mAlpha *= t.getAlpha();
         mMatrix.preConcat(t.getMatrix());
+        if (t.mHasClipRect) {
+            setClipRect(t.getClipRect());
+        }
     }
     
     /**
@@ -119,6 +134,9 @@
     public void postCompose(Transformation t) {
         mAlpha *= t.getAlpha();
         mMatrix.postConcat(t.getMatrix());
+        if (t.mHasClipRect) {
+            setClipRect(t.getClipRect());
+        }
     }
 
     /**
@@ -138,6 +156,39 @@
     }
 
     /**
+     * Sets the current Transform's clip rect
+     * @hide
+     */
+    public void setClipRect(Rect r) {
+        setClipRect(r.left, r.top, r.right, r.bottom);
+    }
+
+    /**
+     * Sets the current Transform's clip rect
+     * @hide
+     */
+    public void setClipRect(int l, int t, int r, int b) {
+        mClipRect.set(l, t, r, b);
+        mHasClipRect = true;
+    }
+
+    /**
+     * Returns the current Transform's clip rect
+     * @hide
+     */
+    public Rect getClipRect() {
+        return mClipRect;
+    }
+
+    /**
+     * Returns whether the current Transform's clip rect is set
+     * @hide
+     */
+    public boolean hasClipRect() {
+        return mHasClipRect;
+    }
+
+    /**
      * @return The degree of transparency
      */
     public float getAlpha() {
diff --git a/core/java/android/view/inputmethod/BaseInputConnection.java b/core/java/android/view/inputmethod/BaseInputConnection.java
index f730cf7..cccfa78 100644
--- a/core/java/android/view/inputmethod/BaseInputConnection.java
+++ b/core/java/android/view/inputmethod/BaseInputConnection.java
@@ -484,10 +484,10 @@
         final Editable content = getEditable();
         if (content == null) return false;
         int len = content.length();
-        if (start > len || end > len) {
+        if (start > len || end > len || start < 0 || end < 0) {
             // If the given selection is out of bounds, just ignore it.
             // Most likely the text was changed out from under the IME,
-            // the the IME is going to have to update all of its state
+            // and the IME is going to have to update all of its state
             // anyway.
             return true;
         }
@@ -601,7 +601,11 @@
         }
         
         beginBatchEdit();
-        
+        if (!composing && !TextUtils.isEmpty(text)) {
+            // Notify the text is committed by the user to InputMethodManagerService
+            mIMM.notifyTextCommitted();
+        }
+
         // delete composing text set previously.
         int a = getComposingSpanStart(content);
         int b = getComposingSpanEnd(content);
diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java
index d4e005b..c0395cf 100644
--- a/core/java/android/view/inputmethod/EditorInfo.java
+++ b/core/java/android/view/inputmethod/EditorInfo.java
@@ -26,13 +26,13 @@
 /**
  * An EditorInfo describes several attributes of a text editing object
  * that an input method is communicating with (typically an EditText), most
- * importantly the type of text content it contains.
+ * importantly the type of text content it contains and the current cursor position.
  */
 public class EditorInfo implements InputType, Parcelable {
     /**
      * The content type of the text box, whose bits are defined by
      * {@link InputType}.
-     * 
+     *
      * @see InputType
      * @see #TYPE_MASK_CLASS
      * @see #TYPE_MASK_VARIATION
@@ -47,55 +47,55 @@
      * to provide alternative mechanisms for providing that command.
      */
     public static final int IME_MASK_ACTION = 0x000000ff;
-    
+
     /**
      * Bits of {@link #IME_MASK_ACTION}: no specific action has been
      * associated with this editor, let the editor come up with its own if
      * it can.
      */
     public static final int IME_ACTION_UNSPECIFIED = 0x00000000;
-    
+
     /**
      * Bits of {@link #IME_MASK_ACTION}: there is no available action.
      */
     public static final int IME_ACTION_NONE = 0x00000001;
-    
+
     /**
      * Bits of {@link #IME_MASK_ACTION}: the action key performs a "go"
      * operation to take the user to the target of the text they typed.
      * Typically used, for example, when entering a URL.
      */
     public static final int IME_ACTION_GO = 0x00000002;
-    
+
     /**
      * Bits of {@link #IME_MASK_ACTION}: the action key performs a "search"
      * operation, taking the user to the results of searching for the text
      * they have typed (in whatever context is appropriate).
      */
     public static final int IME_ACTION_SEARCH = 0x00000003;
-    
+
     /**
      * Bits of {@link #IME_MASK_ACTION}: the action key performs a "send"
      * operation, delivering the text to its target.  This is typically used
      * when composing a message in IM or SMS where sending is immediate.
      */
     public static final int IME_ACTION_SEND = 0x00000004;
-    
+
     /**
      * Bits of {@link #IME_MASK_ACTION}: the action key performs a "next"
      * operation, taking the user to the next field that will accept text.
      */
     public static final int IME_ACTION_NEXT = 0x00000005;
-    
+
     /**
      * Bits of {@link #IME_MASK_ACTION}: the action key performs a "done"
      * operation, typically meaning there is nothing more to input and the
      * IME will be closed.
      */
     public static final int IME_ACTION_DONE = 0x00000006;
-    
+
     /**
-     * Bits of {@link #IME_MASK_ACTION}: Like {@link #IME_ACTION_NEXT}, but
+     * Bits of {@link #IME_MASK_ACTION}: like {@link #IME_ACTION_NEXT}, but
      * for moving to the previous field.  This will normally not be used to
      * specify an action (since it precludes {@link #IME_ACTION_NEXT}), but
      * can be returned to the app if it sets {@link #IME_FLAG_NAVIGATE_PREVIOUS}.
@@ -154,7 +154,7 @@
      * on older versions of the platform.
      */
     public static final int IME_FLAG_NO_EXTRACT_UI = 0x10000000;
-    
+
     /**
      * Flag of {@link #imeOptions}: used in conjunction with one of the actions
      * masked by {@link #IME_MASK_ACTION}, this indicates that the action
@@ -167,7 +167,7 @@
      * to show more text.
      */
     public static final int IME_FLAG_NO_ACCESSORY_ACTION = 0x20000000;
-    
+
     /**
      * Flag of {@link #imeOptions}: used in conjunction with one of the actions
      * masked by {@link #IME_MASK_ACTION}. If this flag is not set, IMEs will
@@ -202,13 +202,13 @@
      * Generic unspecified type for {@link #imeOptions}.
      */
     public static final int IME_NULL = 0x00000000;
-    
+
     /**
      * Extended type information for the editor, to help the IME better
      * integrate with it.
      */
     public int imeOptions = IME_NULL;
-    
+
     /**
      * A string supplying additional information options that are
      * private to a particular IME implementation.  The string must be
@@ -221,7 +221,7 @@
      * attribute of a TextView.
      */
     public String privateImeOptions = null;
-    
+
     /**
      * In some cases an IME may be able to display an arbitrary label for
      * a command the user can perform, which you can specify here. This is
@@ -233,7 +233,7 @@
      * ignore this.
      */
     public CharSequence actionLabel = null;
-    
+
     /**
      * If {@link #actionLabel} has been given, this is the id for that command
      * when the user presses its button that is delivered back with
@@ -241,50 +241,66 @@
      * InputConnection.performEditorAction()}.
      */
     public int actionId = 0;
-    
+
     /**
      * The text offset of the start of the selection at the time editing
-     * began; -1 if not known. Keep in mind some IMEs may not be able
-     * to give their full feature set without knowing the cursor position;
-     * avoid passing -1 here if you can.
+     * begins; -1 if not known. Keep in mind that, without knowing the cursor
+     * position, many IMEs will not be able to offer their full feature set and
+     * may even behave in unpredictable ways: pass the actual cursor position
+     * here if possible at all.
+     *
+     * <p>Also, this needs to be the cursor position <strong>right now</strong>,
+     * not at some point in the past, even if input is starting in the same text field
+     * as before. When the app is filling this object, input is about to start by
+     * definition, and this value will override any value the app may have passed to
+     * {@link InputMethodManager#updateSelection(android.view.View, int, int, int, int)}
+     * before.</p>
      */
     public int initialSelStart = -1;
-    
+
     /**
-     * The text offset of the end of the selection at the time editing
-     * began; -1 if not known. Keep in mind some IMEs may not be able
-     * to give their full feature set without knowing the cursor position;
-     * avoid passing -1 here if you can.
+     * <p>The text offset of the end of the selection at the time editing
+     * begins; -1 if not known. Keep in mind that, without knowing the cursor
+     * position, many IMEs will not be able to offer their full feature set and
+     * may behave in unpredictable ways: pass the actual cursor position
+     * here if possible at all.</p>
+     *
+     * <p>Also, this needs to be the cursor position <strong>right now</strong>,
+     * not at some point in the past, even if input is starting in the same text field
+     * as before. When the app is filling this object, input is about to start by
+     * definition, and this value will override any value the app may have passed to
+     * {@link InputMethodManager#updateSelection(android.view.View, int, int, int, int)}
+     * before.</p>
      */
     public int initialSelEnd = -1;
-    
+
     /**
      * The capitalization mode of the first character being edited in the
      * text.  Values may be any combination of
      * {@link TextUtils#CAP_MODE_CHARACTERS TextUtils.CAP_MODE_CHARACTERS},
      * {@link TextUtils#CAP_MODE_WORDS TextUtils.CAP_MODE_WORDS}, and
      * {@link TextUtils#CAP_MODE_SENTENCES TextUtils.CAP_MODE_SENTENCES}, though
-     * you should generally just take a non-zero value to mean start out in
-     * caps mode.
+     * you should generally just take a non-zero value to mean "start out in
+     * caps mode".
      */
     public int initialCapsMode = 0;
-    
+
     /**
      * The "hint" text of the text view, typically shown in-line when the
      * text is empty to tell the user what to enter.
      */
     public CharSequence hintText;
-    
+
     /**
      * A label to show to the user describing the text they are writing.
      */
     public CharSequence label;
-    
+
     /**
      * Name of the package that owns this editor.
      */
     public String packageName;
-    
+
     /**
      * Identifier for the editor's field.  This is optional, and may be
      * 0.  By default it is filled in with the result of
@@ -292,14 +308,14 @@
      * is being edited.
      */
     public int fieldId;
-    
+
     /**
      * Additional name for the editor's field.  This can supply additional
      * name information for the field.  By default it is null.  The actual
      * contents have no meaning.
      */
     public String fieldName;
-    
+
     /**
      * Any extra data to supply to the input method.  This is for extended
      * communication with specific input methods; the name fields in the
@@ -309,7 +325,7 @@
      * attribute of a TextView.
      */
     public Bundle extras;
-    
+
     /**
      * Ensure that the data in this EditorInfo is compatible with an application
      * that was developed against the given target API version.  This can
@@ -365,10 +381,10 @@
                 + " fieldName=" + fieldName);
         pw.println(prefix + "extras=" + extras);
     }
-    
+
     /**
      * Used to package this object into a {@link Parcel}.
-     * 
+     *
      * @param dest The {@link Parcel} to be written.
      * @param flags The flags used for parceling.
      */
@@ -392,30 +408,31 @@
     /**
      * Used to make this class parcelable.
      */
-    public static final Parcelable.Creator<EditorInfo> CREATOR = new Parcelable.Creator<EditorInfo>() {
-        public EditorInfo createFromParcel(Parcel source) {
-            EditorInfo res = new EditorInfo();
-            res.inputType = source.readInt();
-            res.imeOptions = source.readInt();
-            res.privateImeOptions = source.readString();
-            res.actionLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
-            res.actionId = source.readInt();
-            res.initialSelStart = source.readInt();
-            res.initialSelEnd = source.readInt();
-            res.initialCapsMode = source.readInt();
-            res.hintText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
-            res.label = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
-            res.packageName = source.readString();
-            res.fieldId = source.readInt();
-            res.fieldName = source.readString();
-            res.extras = source.readBundle();
-            return res;
-        }
+    public static final Parcelable.Creator<EditorInfo> CREATOR =
+            new Parcelable.Creator<EditorInfo>() {
+                public EditorInfo createFromParcel(Parcel source) {
+                    EditorInfo res = new EditorInfo();
+                    res.inputType = source.readInt();
+                    res.imeOptions = source.readInt();
+                    res.privateImeOptions = source.readString();
+                    res.actionLabel = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+                    res.actionId = source.readInt();
+                    res.initialSelStart = source.readInt();
+                    res.initialSelEnd = source.readInt();
+                    res.initialCapsMode = source.readInt();
+                    res.hintText = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+                    res.label = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(source);
+                    res.packageName = source.readString();
+                    res.fieldId = source.readInt();
+                    res.fieldName = source.readString();
+                    res.extras = source.readBundle();
+                    return res;
+                }
 
-        public EditorInfo[] newArray(int size) {
-            return new EditorInfo[size];
-        }
-    };
+                public EditorInfo[] newArray(int size) {
+                    return new EditorInfo[size];
+                }
+            };
 
     public int describeContents() {
         return 0;
diff --git a/core/java/android/view/inputmethod/ExtractedTextRequest.java b/core/java/android/view/inputmethod/ExtractedTextRequest.java
index f658b87..bf0bef3 100644
--- a/core/java/android/view/inputmethod/ExtractedTextRequest.java
+++ b/core/java/android/view/inputmethod/ExtractedTextRequest.java
@@ -18,7 +18,6 @@
 
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.text.TextUtils;
 
 /**
  * Description of what an input method would like from an application when
diff --git a/core/java/android/view/inputmethod/InputBinding.java b/core/java/android/view/inputmethod/InputBinding.java
index f4209ef..bcd459e 100644
--- a/core/java/android/view/inputmethod/InputBinding.java
+++ b/core/java/android/view/inputmethod/InputBinding.java
@@ -19,7 +19,6 @@
 import android.os.IBinder;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.text.TextUtils;
 
 /**
  * Information given to an {@link InputMethod} about a client connecting
diff --git a/core/java/android/view/inputmethod/InputMethodInfo.java b/core/java/android/view/inputmethod/InputMethodInfo.java
index 5df5811..bc2d7ec 100644
--- a/core/java/android/view/inputmethod/InputMethodInfo.java
+++ b/core/java/android/view/inputmethod/InputMethodInfo.java
@@ -1,12 +1,12 @@
 /*
  * Copyright (C) 2007-2008 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
@@ -37,6 +37,7 @@
 import android.util.Slog;
 import android.util.Xml;
 import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
+import android.view.inputmethod.InputMethodSubtypeArray;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -64,7 +65,7 @@
      * The Service that implements this input method component.
      */
     final ResolveInfo mService;
-    
+
     /**
      * The unique string Id to identify the input method.  This is generated
      * from the input method component.
@@ -86,9 +87,9 @@
     final int mIsDefaultResId;
 
     /**
-     * The array of the subtypes.
+     * An array-like container of the subtypes.
      */
-    private final ArrayList<InputMethodSubtype> mSubtypes = new ArrayList<InputMethodSubtype>();
+    private final InputMethodSubtypeArray mSubtypes;
 
     private final boolean mIsAuxIme;
 
@@ -138,28 +139,29 @@
         int isDefaultResId = 0;
 
         XmlResourceParser parser = null;
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
         try {
             parser = si.loadXmlMetaData(pm, InputMethod.SERVICE_META_DATA);
             if (parser == null) {
                 throw new XmlPullParserException("No "
                         + InputMethod.SERVICE_META_DATA + " meta-data");
             }
-        
+
             Resources res = pm.getResourcesForApplication(si.applicationInfo);
-            
+
             AttributeSet attrs = Xml.asAttributeSet(parser);
-            
+
             int type;
             while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
                     && type != XmlPullParser.START_TAG) {
             }
-            
+
             String nodeName = parser.getName();
             if (!"input-method".equals(nodeName)) {
                 throw new XmlPullParserException(
                         "Meta-data does not start with input-method tag");
             }
-            
+
             TypedArray sa = res.obtainAttributes(attrs,
                     com.android.internal.R.styleable.InputMethod);
             settingsActivityComponent = sa.getString(
@@ -206,7 +208,7 @@
                     if (!subtype.isAuxiliary()) {
                         isAuxIme = false;
                     }
-                    mSubtypes.add(subtype);
+                    subtypes.add(subtype);
                 }
             }
         } catch (NameNotFoundException e) {
@@ -216,7 +218,7 @@
             if (parser != null) parser.close();
         }
 
-        if (mSubtypes.size() == 0) {
+        if (subtypes.size() == 0) {
             isAuxIme = false;
         }
 
@@ -225,14 +227,15 @@
             final int N = additionalSubtypes.size();
             for (int i = 0; i < N; ++i) {
                 final InputMethodSubtype subtype = additionalSubtypes.get(i);
-                if (!mSubtypes.contains(subtype)) {
-                    mSubtypes.add(subtype);
+                if (!subtypes.contains(subtype)) {
+                    subtypes.add(subtype);
                 } else {
                     Slog.w(TAG, "Duplicated subtype definition found: "
                             + subtype.getLocale() + ", " + subtype.getMode());
                 }
             }
         }
+        mSubtypes = new InputMethodSubtypeArray(subtypes);
         mSettingsActivityName = settingsActivityComponent;
         mIsDefaultResId = isDefaultResId;
         mIsAuxIme = isAuxIme;
@@ -246,7 +249,7 @@
         mIsAuxIme = source.readInt() == 1;
         mSupportsSwitchingToNextInputMethod = source.readInt() == 1;
         mService = ResolveInfo.CREATOR.createFromParcel(source);
-        source.readTypedList(mSubtypes, InputMethodSubtype.CREATOR);
+        mSubtypes = new InputMethodSubtypeArray(source);
         mForceDefault = false;
     }
 
@@ -256,7 +259,7 @@
     public InputMethodInfo(String packageName, String className,
             CharSequence label, String settingsActivity) {
         this(buildDummyResolveInfo(packageName, className, label), false, settingsActivity, null,
-                0, false);
+                0, false /* forceDefault */, true /* supportsSwitchingToNextInputMethod */);
     }
 
     /**
@@ -266,17 +269,26 @@
     public InputMethodInfo(ResolveInfo ri, boolean isAuxIme,
             String settingsActivity, List<InputMethodSubtype> subtypes, int isDefaultResId,
             boolean forceDefault) {
+        this(ri, isAuxIme, settingsActivity, subtypes, isDefaultResId,
+                forceDefault, true /* supportsSwitchingToNextInputMethod */);
+    }
+
+    /**
+     * Temporary API for creating a built-in input method for test.
+     * @hide
+     */
+    public InputMethodInfo(ResolveInfo ri, boolean isAuxIme,
+            String settingsActivity, List<InputMethodSubtype> subtypes, int isDefaultResId,
+            boolean forceDefault, boolean supportsSwitchingToNextInputMethod) {
         final ServiceInfo si = ri.serviceInfo;
         mService = ri;
         mId = new ComponentName(si.packageName, si.name).flattenToShortString();
         mSettingsActivityName = settingsActivity;
         mIsDefaultResId = isDefaultResId;
         mIsAuxIme = isAuxIme;
-        if (subtypes != null) {
-            mSubtypes.addAll(subtypes);
-        }
+        mSubtypes = new InputMethodSubtypeArray(subtypes);
         mForceDefault = forceDefault;
-        mSupportsSwitchingToNextInputMethod = true;
+        mSupportsSwitchingToNextInputMethod = supportsSwitchingToNextInputMethod;
     }
 
     private static ResolveInfo buildDummyResolveInfo(String packageName, String className,
@@ -338,7 +350,7 @@
 
     /**
      * Load the user-displayed label for this input method.
-     * 
+     *
      * @param pm Supply a PackageManager used to load the input method's
      * resources.
      */
@@ -348,7 +360,7 @@
 
     /**
      * Load the user-displayed icon for this input method.
-     * 
+     *
      * @param pm Supply a PackageManager used to load the input method's
      * resources.
      */
@@ -362,9 +374,9 @@
      * an {@link android.content.Intent} whose action is MAIN and with an
      * explicit {@link android.content.ComponentName}
      * composed of {@link #getPackageName} and the class name returned here.
-     * 
+     *
      * <p>A null will be returned if there is no settings activity associated
-     * with the input method.
+     * with the input method.</p>
      */
     public String getSettingsActivity() {
         return mSettingsActivityName;
@@ -374,7 +386,7 @@
      * Return the count of the subtypes of Input Method.
      */
     public int getSubtypeCount() {
-        return mSubtypes.size();
+        return mSubtypes.getCount();
     }
 
     /**
@@ -419,7 +431,7 @@
         pw.println(prefix + "Service:");
         mService.dump(pw, prefix + "  ");
     }
-    
+
     @Override
     public String toString() {
         return "InputMethodInfo{" + mId
@@ -430,7 +442,7 @@
     /**
      * Used to test whether the given parameter object is an
      * {@link InputMethodInfo} and its Id is the same to this one.
-     * 
+     *
      * @return true if the given parameter object is an
      *         {@link InputMethodInfo} and its Id is the same to this one.
      */
@@ -467,7 +479,7 @@
 
     /**
      * Used to package this object into a {@link Parcel}.
-     * 
+     *
      * @param dest The {@link Parcel} to be written.
      * @param flags The flags used for parceling.
      */
@@ -479,7 +491,7 @@
         dest.writeInt(mIsAuxIme ? 1 : 0);
         dest.writeInt(mSupportsSwitchingToNextInputMethod ? 1 : 0);
         mService.writeToParcel(dest, flags);
-        dest.writeTypedList(mSubtypes);
+        mSubtypes.writeToParcel(dest);
     }
 
     /**
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 53f7c79..0227873 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -26,6 +26,7 @@
 
 import android.content.Context;
 import android.graphics.Rect;
+import android.inputmethodservice.InputMethodService;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -41,13 +42,13 @@
 import android.util.Pools.SimplePool;
 import android.util.PrintWriterPrinter;
 import android.util.Printer;
+import android.util.SparseArray;
 import android.view.InputChannel;
 import android.view.InputEvent;
 import android.view.InputEventSender;
 import android.view.KeyEvent;
 import android.view.View;
 import android.view.ViewRootImpl;
-import android.util.SparseArray;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -316,6 +317,10 @@
     int mCursorSelEnd;
     int mCursorCandStart;
     int mCursorCandEnd;
+    /**
+     * The buffer to retrieve the view location in screen coordinates in {@link #updateCursor}.
+     */
+    private final int[] mViewTopLeft = new int[2];
 
     // -----------------------------------------------------------
     
@@ -334,6 +339,11 @@
     InputChannel mCurChannel;
     ImeInputEventSender mCurSender;
 
+    /**
+     * The current cursor/anchor monitor mode.
+     */
+    int mCursorAnchorMonitorMode = InputMethodService.CURSOR_ANCHOR_MONITOR_MODE_NONE;
+
     final Pool<PendingEvent> mPendingEventPool = new SimplePool<PendingEvent>(20);
     final SparseArray<PendingEvent> mPendingEvents = new SparseArray<PendingEvent>(20);
 
@@ -346,6 +356,7 @@
     static final int MSG_SEND_INPUT_EVENT = 5;
     static final int MSG_TIMEOUT_INPUT_EVENT = 6;
     static final int MSG_FLUSH_INPUT_EVENT = 7;
+    static final int SET_CURSOR_ANCHOR_MONITOR_MODE = 8;
 
     class H extends Handler {
         H(Looper looper) {
@@ -476,6 +487,12 @@
                     finishedInputEvent(msg.arg1, false, false);
                     return;
                 }
+                case SET_CURSOR_ANCHOR_MONITOR_MODE: {
+                    synchronized (mH) {
+                        mCursorAnchorMonitorMode = msg.arg1;
+                    }
+                    return;
+                }
             }
         }
     }
@@ -540,6 +557,11 @@
         public void setActive(boolean active) {
             mH.sendMessage(mH.obtainMessage(MSG_SET_ACTIVE, active ? 1 : 0, 0));
         }
+
+        @Override
+        public void setCursorAnchorMonitorMode(int monitorMode) {
+            mH.sendMessage(mH.obtainMessage(SET_CURSOR_ANCHOR_MONITOR_MODE, monitorMode, 0));
+        }
     };
 
     final InputConnection mDummyInputConnection = new BaseInputConnection(this, false);
@@ -714,6 +736,7 @@
      * Reset all of the state associated with being bound to an input method.
      */
     void clearBindingLocked() {
+        if (DEBUG) Log.v(TAG, "Clearing binding!");
         clearConnectionLocked();
         setInputChannelLocked(null);
         mBindSequence = -1;
@@ -1394,6 +1417,14 @@
     
     /**
      * Report the current selection range.
+     *
+     * <p><strong>Editor authors</strong>, you need to call this method whenever
+     * the cursor moves in your editor. Remember that in addition to doing this, your
+     * editor needs to always supply current cursor values in
+     * {@link EditorInfo#initialSelStart} and {@link EditorInfo#initialSelEnd} every
+     * time {@link android.view.View#onCreateInputConnection(EditorInfo)} is
+     * called, which happens whenever the keyboard shows up or the focus changes
+     * to a text field, among other cases.</p>
      */
     public void updateSelection(View view, int selStart, int selEnd,
             int candidatesStart, int candidatesEnd) {
@@ -1456,9 +1487,44 @@
      * of the input editor's cursor in its window.
      */
     public boolean isWatchingCursor(View view) {
-        return false;
+        if (!isActive(view)) {
+            return false;
+        }
+        synchronized (mH) {
+            return (mCursorAnchorMonitorMode &
+                    InputMethodService.CURSOR_ANCHOR_MONITOR_MODE_CURSOR_RECT) != 0;
+        }
     }
-    
+
+    /**
+     * Returns true if the current input method wants to receive the cursor rectangle in
+     * screen coordinates rather than local coordinates in the attached view.
+     *
+     * @hide
+     */
+    public boolean usesScreenCoordinatesForCursorLocked() {
+        // {@link InputMethodService#CURSOR_ANCHOR_MONITOR_MODE_CURSOR_RECT} also means
+        // that {@link InputMethodService#onUpdateCursor} should provide the cursor rectangle
+        // in screen coordinates rather than local coordinates.
+        return (mCursorAnchorMonitorMode &
+                InputMethodService.CURSOR_ANCHOR_MONITOR_MODE_CURSOR_RECT) != 0;
+    }
+
+    /**
+     * Set cursor/anchor monitor mode via {@link com.android.server.InputMethodManagerService}.
+     * This is an internal method for {@link android.inputmethodservice.InputMethodService} and
+     * should never be used from IMEs and applications.
+     *
+     * @hide
+     */
+    public void setCursorAnchorMonitorMode(IBinder imeToken, int monitorMode) {
+        try {
+            mService.setCursorAnchorMonitorMode(imeToken, monitorMode);
+        } catch (RemoteException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * Report the current cursor location in its window.
      */
@@ -1470,15 +1536,18 @@
                     || mCurrentTextBoxAttribute == null || mCurMethod == null) {
                 return;
             }
-            
             mTmpCursorRect.set(left, top, right, bottom);
             if (!mCursorRect.equals(mTmpCursorRect)) {
                 if (DEBUG) Log.d(TAG, "updateCursor");
 
                 try {
                     if (DEBUG) Log.v(TAG, "CURSOR CHANGE: " + mCurMethod);
-                    mCurMethod.updateCursor(mTmpCursorRect);
                     mCursorRect.set(mTmpCursorRect);
+                    if (usesScreenCoordinatesForCursorLocked()) {
+                        view.getLocationOnScreen(mViewTopLeft);
+                        mTmpCursorRect.offset(mViewTopLeft[0], mViewTopLeft[1]);
+                    }
+                    mCurMethod.updateCursor(mTmpCursorRect);
                 } catch (RemoteException e) {
                     Log.w(TAG, "IME died: " + mCurId, e);
                 }
@@ -1805,6 +1874,20 @@
     }
 
     /**
+     * Notify the current IME commits text
+     * @hide
+     */
+    public void notifyTextCommitted() {
+        synchronized (mH) {
+            try {
+                mService.notifyTextCommitted();
+            } catch (RemoteException e) {
+                Log.w(TAG, "IME died: " + mCurId, e);
+            }
+        }
+    }
+
+    /**
      * Returns a map of all shortcut input method info and their subtypes.
      */
     public Map<InputMethodInfo, List<InputMethodSubtype>> getShortcutInputMethodsAndSubtypes() {
@@ -1840,6 +1923,21 @@
     }
 
     /**
+     * @return The current height of the input method window.
+     * @hide
+     */
+    public int getInputMethodWindowVisibleHeight() {
+        synchronized (mH) {
+            try {
+                return mService.getInputMethodWindowVisibleHeight();
+            } catch (RemoteException e) {
+                Log.w(TAG, "IME died: " + mCurId, e);
+                return 0;
+            }
+        }
+    }
+
+    /**
      * Force switch to the last used input method and subtype. If the last input method didn't have
      * any subtypes, the framework will simply switch to the last input method with no subtype
      * specified.
diff --git a/core/java/android/view/inputmethod/InputMethodSubtype.java b/core/java/android/view/inputmethod/InputMethodSubtype.java
index 2ab3024..e7ada27 100644
--- a/core/java/android/view/inputmethod/InputMethodSubtype.java
+++ b/core/java/android/view/inputmethod/InputMethodSubtype.java
@@ -472,12 +472,12 @@
                 return (subtype.hashCode() == hashCode());
             }
             return (subtype.hashCode() == hashCode())
-                && (subtype.getNameResId() == getNameResId())
-                && (subtype.getMode().equals(getMode()))
-                && (subtype.getIconResId() == getIconResId())
                 && (subtype.getLocale().equals(getLocale()))
+                && (subtype.getMode().equals(getMode()))
                 && (subtype.getExtraValue().equals(getExtraValue()))
                 && (subtype.isAuxiliary() == isAuxiliary())
+                && (subtype.overridesImplicitlyEnabledSubtype()
+                        == overridesImplicitlyEnabledSubtype())
                 && (subtype.isAsciiCapable() == isAsciiCapable());
         }
         return false;
diff --git a/core/java/android/view/inputmethod/InputMethodSubtypeArray.java b/core/java/android/view/inputmethod/InputMethodSubtypeArray.java
new file mode 100644
index 0000000..5bef71f
--- /dev/null
+++ b/core/java/android/view/inputmethod/InputMethodSubtypeArray.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2007-2014 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 android.view.inputmethod;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.AndroidRuntimeException;
+import android.util.Slog;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+
+/**
+ * An array-like container that stores multiple instances of {@link InputMethodSubtype}.
+ *
+ * <p>This container is designed to reduce the risk of {@link TransactionTooLargeException}
+ * when one or more instancess of {@link InputMethodInfo} are transferred through IPC.
+ * Basically this class does following three tasks.</p>
+ * <ul>
+ * <li>Applying compression for the marshalled data</li>
+ * <li>Lazily unmarshalling objects</li>
+ * <li>Caching the marshalled data when appropriate</li>
+ * </ul>
+ *
+ * @hide
+ */
+public class InputMethodSubtypeArray {
+    private final static String TAG = "InputMethodSubtypeArray";
+
+    /**
+     * Create a new instance of {@link InputMethodSubtypeArray} from an existing list of
+     * {@link InputMethodSubtype}.
+     *
+     * @param subtypes A list of {@link InputMethodSubtype} from which
+     * {@link InputMethodSubtypeArray} will be created.
+     */
+    public InputMethodSubtypeArray(final List<InputMethodSubtype> subtypes) {
+        if (subtypes == null) {
+            mCount = 0;
+            return;
+        }
+        mCount = subtypes.size();
+        mInstance = subtypes.toArray(new InputMethodSubtype[mCount]);
+    }
+
+    /**
+     * Unmarshall an instance of {@link InputMethodSubtypeArray} from a given {@link Parcel}
+     * object.
+     *
+     * @param source A {@link Parcel} object from which {@link InputMethodSubtypeArray} will be
+     * unmarshalled.
+     */
+    public InputMethodSubtypeArray(final Parcel source) {
+        mCount = source.readInt();
+        if (mCount > 0) {
+            mDecompressedSize = source.readInt();
+            mCompressedData = source.createByteArray();
+        }
+    }
+
+    /**
+     * Marshall the instance into a given {@link Parcel} object.
+     *
+     * <p>This methods may take a bit additional time to compress data lazily when called
+     * first time.</p>
+     *
+     * @param source A {@link Parcel} object to which {@link InputMethodSubtypeArray} will be
+     * marshalled.
+     */
+    public void writeToParcel(final Parcel dest) {
+        if (mCount == 0) {
+            dest.writeInt(mCount);
+            return;
+        }
+
+        byte[] compressedData = mCompressedData;
+        int decompressedSize = mDecompressedSize;
+        if (compressedData == null && decompressedSize == 0) {
+            synchronized (mLockObject) {
+                compressedData = mCompressedData;
+                decompressedSize = mDecompressedSize;
+                if (compressedData == null && decompressedSize == 0) {
+                    final byte[] decompressedData = marshall(mInstance);
+                    compressedData = compress(decompressedData);
+                    if (compressedData == null) {
+                        decompressedSize = -1;
+                        Slog.i(TAG, "Failed to compress data.");
+                    } else {
+                        decompressedSize = decompressedData.length;
+                    }
+                    mDecompressedSize = decompressedSize;
+                    mCompressedData = compressedData;
+                }
+            }
+        }
+
+        if (compressedData != null && decompressedSize > 0) {
+            dest.writeInt(mCount);
+            dest.writeInt(decompressedSize);
+            dest.writeByteArray(compressedData);
+        } else {
+            Slog.i(TAG, "Unexpected state. Behaving as an empty array.");
+            dest.writeInt(0);
+        }
+    }
+
+    /**
+     * Return {@link InputMethodSubtype} specified with the given index.
+     *
+     * <p>This methods may take a bit additional time to decompress data lazily when called
+     * first time.</p>
+     *
+     * @param index The index of {@link InputMethodSubtype}.
+     */
+    public InputMethodSubtype get(final int index) {
+        if (index < 0 || mCount <= index) {
+            throw new ArrayIndexOutOfBoundsException();
+        }
+        InputMethodSubtype[] instance = mInstance;
+        if (instance == null) {
+            synchronized (mLockObject) {
+                instance = mInstance;
+                if (instance == null) {
+                    final byte[] decompressedData =
+                          decompress(mCompressedData, mDecompressedSize);
+                    // Clear the compressed data until {@link #getMarshalled()} is called.
+                    mCompressedData = null;
+                    mDecompressedSize = 0;
+                    if (decompressedData != null) {
+                        instance = unmarshall(decompressedData);
+                    } else {
+                        Slog.e(TAG, "Failed to decompress data. Returns null as fallback.");
+                        instance = new InputMethodSubtype[mCount];
+                    }
+                    mInstance = instance;
+                }
+            }
+        }
+        return instance[index];
+    }
+
+    /**
+     * Return the number of {@link InputMethodSubtype} objects.
+     */
+    public int getCount() {
+        return mCount;
+    }
+
+    private final Object mLockObject = new Object();
+    private final int mCount;
+
+    private volatile InputMethodSubtype[] mInstance;
+    private volatile byte[] mCompressedData;
+    private volatile int mDecompressedSize;
+
+    private static byte[] marshall(final InputMethodSubtype[] array) {
+        Parcel parcel = null;
+        try {
+            parcel = Parcel.obtain();
+            parcel.writeTypedArray(array, 0);
+            return parcel.marshall();
+        } finally {
+            if (parcel != null) {
+                parcel.recycle();
+                parcel = null;
+            }
+        }
+    }
+
+    private static InputMethodSubtype[] unmarshall(final byte[] data) {
+        Parcel parcel = null;
+        try {
+            parcel = Parcel.obtain();
+            parcel.unmarshall(data, 0, data.length);
+            parcel.setDataPosition(0);
+            return parcel.createTypedArray(InputMethodSubtype.CREATOR);
+        } finally {
+            if (parcel != null) {
+                parcel.recycle();
+                parcel = null;
+            }
+        }
+    }
+
+    private static byte[] compress(final byte[] data) {
+        ByteArrayOutputStream resultStream = null;
+        GZIPOutputStream zipper = null;
+        try {
+            resultStream = new ByteArrayOutputStream();
+            zipper = new GZIPOutputStream(resultStream);
+            zipper.write(data);
+        } catch(IOException e) {
+            return null;
+        } finally {
+            try {
+                if (zipper != null) {
+                    zipper.close();
+                }
+            } catch (IOException e) {
+                zipper = null;
+                Slog.e(TAG, "Failed to close the stream.", e);
+                // swallowed, not propagated back to the caller
+            }
+            try {
+                if (resultStream != null) {
+                    resultStream.close();
+                }
+            } catch (IOException e) {
+                resultStream = null;
+                Slog.e(TAG, "Failed to close the stream.", e);
+                // swallowed, not propagated back to the caller
+            }
+        }
+        return resultStream != null ? resultStream.toByteArray() : null;
+    }
+
+    private static byte[] decompress(final byte[] data, final int expectedSize) {
+        ByteArrayInputStream inputStream = null;
+        GZIPInputStream unzipper = null;
+        try {
+            inputStream = new ByteArrayInputStream(data);
+            unzipper = new GZIPInputStream(inputStream);
+            final byte [] result = new byte[expectedSize];
+            int totalReadBytes = 0;
+            while (totalReadBytes < result.length) {
+                final int restBytes = result.length - totalReadBytes;
+                final int readBytes = unzipper.read(result, totalReadBytes, restBytes);
+                if (readBytes < 0) {
+                    break;
+                }
+                totalReadBytes += readBytes;
+            }
+            if (expectedSize != totalReadBytes) {
+                return null;
+            }
+            return result;
+        } catch(IOException e) {
+            return null;
+        } finally {
+            try {
+                if (unzipper != null) {
+                    unzipper.close();
+                }
+            } catch (IOException e) {
+                Slog.e(TAG, "Failed to close the stream.", e);
+                // swallowed, not propagated back to the caller
+            }
+            try {
+                if (inputStream != null) {
+                  inputStream.close();
+                }
+            } catch (IOException e) {
+                Slog.e(TAG, "Failed to close the stream.", e);
+                // swallowed, not propagated back to the caller
+            }
+        }
+    }
+}
diff --git a/core/java/android/webkit/CacheManager.java b/core/java/android/webkit/CacheManager.java
index bbd3f2b..45e6eb3 100644
--- a/core/java/android/webkit/CacheManager.java
+++ b/core/java/android/webkit/CacheManager.java
@@ -16,13 +16,7 @@
 
 package android.webkit;
 
-import android.content.Context;
-import android.net.http.Headers;
-import android.util.Log;
-
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/core/java/android/webkit/DateSorter.java b/core/java/android/webkit/DateSorter.java
index 82c13ae..fede244 100644
--- a/core/java/android/webkit/DateSorter.java
+++ b/core/java/android/webkit/DateSorter.java
@@ -20,7 +20,6 @@
 import android.content.res.Resources;
 
 import java.util.Calendar;
-import java.util.Date;
 import java.util.Locale;
 
 import libcore.icu.LocaleData;
diff --git a/core/java/android/webkit/DebugFlags.java b/core/java/android/webkit/DebugFlags.java
index b5ca8c1..7b3cb1b 100644
--- a/core/java/android/webkit/DebugFlags.java
+++ b/core/java/android/webkit/DebugFlags.java
@@ -31,7 +31,6 @@
     public static final boolean COOKIE_SYNC_MANAGER = false;
     public static final boolean TRACE_API = false;
     public static final boolean TRACE_CALLBACK = false;
-    public static final boolean TRACE_JAVASCRIPT_BRIDGE = false;
     public static final boolean URL_UTIL = false;
     public static final boolean WEB_SYNC_MANAGER = false;
 
diff --git a/core/java/android/webkit/PermissionRequest.java b/core/java/android/webkit/PermissionRequest.java
new file mode 100644
index 0000000..2f8850b
--- /dev/null
+++ b/core/java/android/webkit/PermissionRequest.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2014 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 android.webkit;
+
+import android.net.Uri;
+
+/**
+ * This class wraps a permission request, and is used to request permission for
+ * the web content to access the resources.
+ *
+ * Either {@link #grant(long) grant()} or {@link #deny()} must be called to response the
+ * request, otherwise, {@link WebChromeClient#onPermissionRequest(PermissionRequest)} will
+ * not be invoked again if there is other permission request in this WebView.
+ *
+ * @hide
+ */
+public interface PermissionRequest {
+    /**
+     * Resource belongs to geolocation service.
+     */
+    public final static long RESOURCE_GEOLOCATION = 1 << 0;
+    /**
+     * Resource belongs to video capture device, like camera.
+     */
+    public final static long RESOURCE_VIDEO_CAPTURE = 1 << 1;
+    /**
+     * Resource belongs to audio capture device, like microphone.
+     */
+    public final static long RESOURCE_AUDIO_CAPTURE = 1 << 2;
+
+    /**
+     * @return the origin of web content which attempt to access the restricted
+     *         resources.
+     */
+    public Uri getOrigin();
+
+    /**
+     * @return a bit mask of resources the web content wants to access.
+     */
+    public long getResources();
+
+    /**
+     * Call this method to grant origin the permission to access the given resources.
+     * The granted permission is only valid for this WebView.
+     *
+     * @param resources the resources granted to be accessed by origin, to grant
+     *        request, the requested resources returned by {@link #getResources()}
+     *        must be equals or a subset of granted resources.
+     *        This parameter is designed to avoid granting permission by accident
+     *        especially when new resources are requested by web content.
+     *        Calling grant(getResources()) has security issue, the new permission
+     *        will be granted without being noticed.
+     */
+    public void grant(long resources);
+
+    /**
+     * Call this method to deny the request.
+     */
+    public void deny();
+}
diff --git a/core/java/android/webkit/Plugin.java b/core/java/android/webkit/Plugin.java
index 529820b..072e02a 100644
--- a/core/java/android/webkit/Plugin.java
+++ b/core/java/android/webkit/Plugin.java
@@ -21,7 +21,6 @@
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.webkit.WebView;
 
 /**
  * Represents a plugin (Java equivalent of the PluginPackageAndroid
diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java
index aa57423..60cba86 100644
--- a/core/java/android/webkit/WebChromeClient.java
+++ b/core/java/android/webkit/WebChromeClient.java
@@ -296,6 +296,30 @@
     public void onGeolocationPermissionsHidePrompt() {}
 
     /**
+     * Notify the host application that web content is requesting permission to
+     * access the specified resources and the permission currently isn't granted
+     * or denied. The host application must invoke {@link PermissionRequest#grant(long)}
+     * or {@link PermissionRequest#deny()}.
+     *
+     * If this method isn't overridden, the permission is denied.
+     *
+     * @param request the PermissionRequest from current web content.
+     * @hide
+     */
+    public void onPermissionRequest(PermissionRequest request) {
+        request.deny();
+    }
+
+    /**
+     * Notify the host application that the given permission request
+     * has been canceled. Any related UI should therefore be hidden.
+     *
+     * @param request the PermissionRequest need be canceled.
+     * @hide
+     */
+    public void onPermissionRequestCanceled(PermissionRequest request) {}
+
+    /**
      * Tell the client that a JavaScript execution timeout has occured. And the
      * client may decide whether or not to interrupt the execution. If the
      * client returns true, the JavaScript will be interrupted. If the client
diff --git a/core/java/android/webkit/WebResourceResponse.java b/core/java/android/webkit/WebResourceResponse.java
index b7171ee..f21e2b4 100644
--- a/core/java/android/webkit/WebResourceResponse.java
+++ b/core/java/android/webkit/WebResourceResponse.java
@@ -16,8 +16,6 @@
 
 package android.webkit;
 
-import android.net.http.Headers;
-
 import java.io.InputStream;
 
 /**
diff --git a/core/java/android/webkit/WebSettings.java b/core/java/android/webkit/WebSettings.java
index 98ef66e..7c32c5b 100644
--- a/core/java/android/webkit/WebSettings.java
+++ b/core/java/android/webkit/WebSettings.java
@@ -171,6 +171,38 @@
     }
 
     /**
+     * Used with {@link #setMixedContentMode}
+     *
+     * In this mode, the WebView will allow a secure origin to load content from any other origin,
+     * even if that origin is insecure. This is the least secure mode of operation for the WebView,
+     * and where possible apps should not set this mode.
+     */
+    public static final int MIXED_CONTENT_ALWAYS_ALLOW = 0;
+
+    /**
+     * Used with {@link #setMixedContentMode}
+     *
+     * In this mode, the WebView will not allow a secure origin to load content from an insecure
+     * origin. This is the preferred and most secure mode of operation for the WebView and apps are
+     * strongly advised to use this mode.
+     */
+    public static final int MIXED_CONTENT_NEVER_ALLOW = 1;
+
+    /**
+     * Used with {@link #setMixedContentMode}
+     *
+     * In this mode, the WebView will attempt to be compatible with the approach of a modern web
+     * browser with regard to mixed content. Some insecure content may be allowed to be loaded by
+     * a secure origin and other types of content will be blocked. The types of content are allowed
+     * or blocked may change release to release and are not explicitly defined.
+     *
+     * This mode is intended to be used by apps that are not in control of the content that they
+     * render but desire to operate in a reasonably secure environment. For highest security, apps
+     * are recommended to use {@link #MIXED_CONTENT_NEVER_ALLOW}.
+     */
+    public static final int MIXED_CONTENT_COMPATIBILITY_MODE = 2;
+
+    /**
      * Hidden constructor to prevent clients from creating a new settings
      * instance or deriving the class.
      *
@@ -1403,4 +1435,29 @@
     public int getCacheMode() {
         throw new MustOverrideException();
     }
+
+    /**
+     * Configures the WebView's behavior when a secure origin attempts to load a resource from an
+     * insecure origin.
+     *
+     * By default, apps that target {@link android.os.Build.VERSION_CODES#KITKAT} or below default
+     * to {@link #MIXED_CONTENT_ALWAYS_ALLOW}. Apps targeting
+     * {@link android.os.Build.VERSION_CODES#L} default to {@link #MIXED_CONTENT_NEVER_ALLOW}.
+     *
+     * The preferred and most secure mode of operation for the WebView is
+     * {@link #MIXED_CONTENT_NEVER_ALLOW} and use of {@link #MIXED_CONTENT_ALWAYS_ALLOW} is
+     * strongly discouraged.
+     *
+     * @param mode The mixed content mode to use. One of {@link #MIXED_CONTENT_NEVER_ALLOW},
+     *     {@link #MIXED_CONTENT_NEVER_ALLOW} or {@link #MIXED_CONTENT_COMPATIBILITY_MODE}.
+     */
+    public abstract void setMixedContentMode(int mode);
+
+    /**
+     * Gets the current behavior of the WebView with regard to loading insecure content from a
+     * secure origin.
+     * @return The current setting, one of {@link #MIXED_CONTENT_NEVER_ALLOW},
+     *     {@link #MIXED_CONTENT_NEVER_ALLOW} or {@link #MIXED_CONTENT_COMPATIBILITY_MODE}.
+     */
+    public abstract int getMixedContentMode();
 }
diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java
index d53bb74..efb246a 100644
--- a/core/java/android/webkit/WebView.java
+++ b/core/java/android/webkit/WebView.java
@@ -25,10 +25,10 @@
 import android.graphics.Picture;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.net.Uri;
 import android.net.http.SslCertificate;
 import android.os.Build;
 import android.os.Bundle;
-import android.os.CancellationSignal;
 import android.os.Looper;
 import android.os.Message;
 import android.os.StrictMode;
@@ -255,7 +255,7 @@
     // Throwing an exception for incorrect thread usage if the
     // build target is JB MR2 or newer. Defaults to false, and is
     // set in the WebView constructor.
-    private static Boolean sEnforceThreadChecking = false;
+    private static volatile boolean sEnforceThreadChecking = false;
 
     /**
      *  Transportation object for returning WebView across thread boundaries.
@@ -449,10 +449,12 @@
      *
      * @param context a Context object used to access application assets
      * @param attrs an AttributeSet passed to our parent
-     * @param defStyle the default style resource ID
+     * @param defStyleAttr an attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
-    public WebView(Context context, AttributeSet attrs, int defStyle) {
-        this(context, attrs, defStyle, false);
+    public WebView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
     /**
@@ -460,19 +462,38 @@
      *
      * @param context a Context object used to access application assets
      * @param attrs an AttributeSet passed to our parent
-     * @param defStyle the default style resource ID
+     * @param defStyleAttr an attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes a resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     */
+    public WebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        this(context, attrs, defStyleAttr, defStyleRes, null, false);
+    }
+
+    /**
+     * Constructs a new WebView with layout parameters and a default style.
+     *
+     * @param context a Context object used to access application assets
+     * @param attrs an AttributeSet passed to our parent
+     * @param defStyleAttr an attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      * @param privateBrowsing whether this WebView will be initialized in
      *                        private mode
      *
-     * @deprecated Private browsing is no longer supported directly via 
+     * @deprecated Private browsing is no longer supported directly via
      * WebView and will be removed in a future release. Prefer using
      * {@link WebSettings}, {@link WebViewDatabase}, {@link CookieManager}
      * and {@link WebStorage} for fine-grained control of privacy data.
      */
     @Deprecated
-    public WebView(Context context, AttributeSet attrs, int defStyle,
+    public WebView(Context context, AttributeSet attrs, int defStyleAttr,
             boolean privateBrowsing) {
-        this(context, attrs, defStyle, null, privateBrowsing);
+        this(context, attrs, defStyleAttr, 0, null, privateBrowsing);
     }
 
     /**
@@ -483,7 +504,9 @@
      *
      * @param context a Context object used to access application assets
      * @param attrs an AttributeSet passed to our parent
-     * @param defStyle the default style resource ID
+     * @param defStyleAttr an attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      * @param javaScriptInterfaces a Map of interface names, as keys, and
      *                             object implementing those interfaces, as
      *                             values
@@ -492,10 +515,18 @@
      * @hide This is used internally by dumprendertree, as it requires the javaScript interfaces to
      *       be added synchronously, before a subsequent loadUrl call takes effect.
      */
-    @SuppressWarnings("deprecation")  // for super() call into deprecated base class constructor.
-    protected WebView(Context context, AttributeSet attrs, int defStyle,
+    protected WebView(Context context, AttributeSet attrs, int defStyleAttr,
             Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
-        super(context, attrs, defStyle);
+        this(context, attrs, defStyleAttr, 0, javaScriptInterfaces, privateBrowsing);
+    }
+
+    /**
+     * @hide
+     */
+    @SuppressWarnings("deprecation")  // for super() call into deprecated base class constructor.
+    protected WebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes,
+            Map<String, Object> javaScriptInterfaces, boolean privateBrowsing) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         if (context == null) {
             throw new IllegalArgumentException("Invalid context argument");
         }
@@ -670,7 +701,7 @@
      */
     @Deprecated
     public static void enablePlatformNotifications() {
-        getFactory().getStatics().setPlatformNotificationsEnabled(true);
+        // noop
     }
 
     /**
@@ -682,7 +713,7 @@
      */
     @Deprecated
     public static void disablePlatformNotifications() {
-        getFactory().getStatics().setPlatformNotificationsEnabled(false);
+        // noop
     }
 
     /**
@@ -790,7 +821,15 @@
      */
     public void loadUrl(String url, Map<String, String> additionalHttpHeaders) {
         checkThread();
-        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "loadUrl(extra headers)=" + url);
+        if (DebugFlags.TRACE_API) {
+            StringBuilder headers = new StringBuilder();
+            if (additionalHttpHeaders != null) {
+                for (Map.Entry<String, String> entry : additionalHttpHeaders.entrySet()) {
+                    headers.append(entry.getKey() + ":" + entry.getValue() + "\n");
+                }
+            }
+            Log.d(LOGTAG, "loadUrl(extra headers)=" + url + "\n" + headers);
+        }
         mProvider.loadUrl(url, additionalHttpHeaders);
     }
 
@@ -807,8 +846,8 @@
 
     /**
      * Loads the URL with postData using "POST" method into this WebView. If url
-     * is not a network URL, it will be loaded with {link
-     * {@link #loadUrl(String)} instead.
+     * is not a network URL, it will be loaded with {@link #loadUrl(String)}
+     * instead, ignoring the postData param.
      *
      * @param url the URL of the resource to load
      * @param postData the data will be passed to "POST" request, which must be
@@ -817,7 +856,11 @@
     public void postUrl(String url, byte[] postData) {
         checkThread();
         if (DebugFlags.TRACE_API) Log.d(LOGTAG, "postUrl=" + url);
-        mProvider.postUrl(url, postData);
+        if (URLUtil.isNetworkUrl(url)) {
+            mProvider.postUrl(url, postData);
+        } else {
+            mProvider.loadUrl(url);
+        }
     }
 
     /**
@@ -1093,9 +1136,18 @@
     }
 
     /**
+     * @deprecated Use {@link #createPrintDocumentAdapter(String)} which requires user
+     *             to provide a print document name.
+     */
+    @Deprecated
+    public PrintDocumentAdapter createPrintDocumentAdapter() {
+        checkThread();
+        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "createPrintDocumentAdapter");
+        return mProvider.createPrintDocumentAdapter("default");
+    }
+
+    /**
      * Creates a PrintDocumentAdapter that provides the content of this Webview for printing.
-     * Only supported for API levels
-     * {@link android.os.Build.VERSION_CODES#KITKAT} and above.
      *
      * The adapter works by converting the Webview contents to a PDF stream. The Webview cannot
      * be drawn during the conversion process - any such draws are undefined. It is recommended
@@ -1103,11 +1155,14 @@
      * temporarily hide a visible WebView by using a custom PrintDocumentAdapter instance
      * wrapped around the object returned and observing the onStart and onFinish methods. See
      * {@link android.print.PrintDocumentAdapter} for more information.
+     *
+     * @param documentName  The user-facing name of the printed document. See
+     *                      {@link android.print.PrintDocumentInfo}
      */
-    public PrintDocumentAdapter createPrintDocumentAdapter() {
+    public PrintDocumentAdapter createPrintDocumentAdapter(String documentName) {
         checkThread();
         if (DebugFlags.TRACE_API) Log.d(LOGTAG, "createPrintDocumentAdapter");
-        return mProvider.createPrintDocumentAdapter();
+        return mProvider.createPrintDocumentAdapter(documentName);
     }
 
     /**
@@ -1421,6 +1476,24 @@
     }
 
     /**
+     * Clears the client certificate preferences table stored in response
+     * to proceeding/cancelling client cert requests. Note that webview
+     * automatically clears these preferences when it receives a
+     * {@link KeyChain.ACTION_STORAGE_CHANGED}
+     *
+     * @param resultCallback A callback to be invoked when client certs are cleared.
+     *                       The embedder can pass null if not interested in the callback.
+     *
+     * TODO(sgurun) unhide
+     * @hide
+     */
+    public void clearClientCertPreferences(ValueCallback<Void> resultCallback) {
+        checkThread();
+        if (DebugFlags.TRACE_API) Log.d(LOGTAG, "clearClientCertPreferences");
+        mProvider.clearClientCertPreferences(resultCallback);
+    }
+
+    /**
      * Gets the WebBackForwardList for this WebView. This contains the
      * back/forward list for use in querying each item in the history stack.
      * This is a copy of the private WebBackForwardList so it contains only a
@@ -1537,6 +1610,8 @@
      * @return the address, or if no address is found, null
      */
     public static String findAddress(String addr) {
+        // TODO: Rewrite this in Java so it is not needed to start up chromium
+        // Could also be deprecated
         return getFactory().getStatics().findAddress(addr);
     }
 
@@ -1598,6 +1673,21 @@
     }
 
     /**
+     * Preauthorize the given origin to access resources.
+     * This authorization only valid for this WebView instance life cycle and
+     * will not retained.
+     *
+     * @param origin the origin authorized to access resources
+     * @param resources the resource authorized to be accessed by origin.
+     *
+     * @hide
+     */
+    public void preauthorizePermission(Uri origin, long resources) {
+        checkThread();
+        mProvider.preauthorizePermission(origin, resources);
+    }
+
+    /**
      * Sets the Picture listener. This is an interface used to receive
      * notifications of a new Picture.
      *
@@ -1649,6 +1739,9 @@
      * thread of this WebView. Care is therefore required to maintain thread
      * safety.</li>
      * <li> The Java object's fields are not accessible.</li>
+     * <li> For applications targeted to API level {@link android.os.Build.VERSION_CODES#L}
+     * and above, methods of injected Java objects are enumerable from
+     * JavaScript.</li>
      * </ul>
      *
      * @param object the Java object to inject into this WebView's JavaScript
@@ -2097,10 +2190,11 @@
         mProvider.getViewDelegate().onAttachedToWindow();
     }
 
+    /** @hide */
     @Override
-    protected void onDetachedFromWindow() {
+    protected void onDetachedFromWindowInternal() {
         mProvider.getViewDelegate().onDetachedFromWindow();
-        super.onDetachedFromWindow();
+        super.onDetachedFromWindowInternal();
     }
 
     @Override
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index fb842ff..107ae4f 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -19,9 +19,12 @@
 import android.graphics.Bitmap;
 import android.net.http.SslError;
 import android.os.Message;
+import android.view.InputEvent;
 import android.view.KeyEvent;
 import android.view.ViewRootImpl;
 
+import java.security.Principal;
+
 public class WebViewClient {
 
     /**
@@ -204,7 +207,7 @@
         handler.cancel();
     }
 
-   /**
+    /**
      * Notify the host application to handle a SSL client certificate
      * request. The host application is responsible for showing the UI
      * if desired and providing the keys. There are three ways to
@@ -270,11 +273,43 @@
      *
      * @param view The WebView that is initiating the callback.
      * @param event The key event.
+     * @deprecated This method is subsumed by the more generic onUnhandledInputEvent.
      */
+    @Deprecated
     public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
+        onUnhandledInputEventInternal(view, event);
+    }
+
+    /**
+     * Notify the host application that a input event was not handled by the WebView.
+     * Except system keys, WebView always consumes input events in the normal flow
+     * or if shouldOverrideKeyEvent returns true. This is called asynchronously
+     * from where the event is dispatched. It gives the host application a chance
+     * to handle the unhandled input events.
+     *
+     * Note that if the event is a {@link android.view.MotionEvent}, then it's lifetime is only
+     * that of the function call. If the WebViewClient wishes to use the event beyond that, then it
+     * <i>must</i> create a copy of the event.
+     *
+     * It is the responsibility of overriders of this method to call
+     * {@link #onUnhandledKeyEvent(WebView, KeyEvent)}
+     * when appropriate if they wish to continue receiving events through it.
+     *
+     * @param view The WebView that is initiating the callback.
+     * @param event The input event.
+     */
+    public void onUnhandledInputEvent(WebView view, InputEvent event) {
+        if (event instanceof KeyEvent) {
+            onUnhandledKeyEvent(view, (KeyEvent) event);
+            return;
+        }
+        onUnhandledInputEventInternal(view, event);
+    }
+
+    private void onUnhandledInputEventInternal(WebView view, InputEvent event) {
         ViewRootImpl root = view.getViewRootImpl();
         if (root != null) {
-            root.dispatchUnhandledKey(event);
+            root.dispatchUnhandledInputEvent(event);
         }
     }
 
diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java
index b9131bf..25bcd44 100644
--- a/core/java/android/webkit/WebViewFactory.java
+++ b/core/java/android/webkit/WebViewFactory.java
@@ -16,9 +16,7 @@
 
 package android.webkit;
 
-import android.os.Build;
 import android.os.StrictMode;
-import android.os.SystemProperties;
 import android.util.AndroidRuntimeException;
 import android.util.Log;
 
diff --git a/core/java/android/webkit/WebViewProvider.java b/core/java/android/webkit/WebViewProvider.java
index 696aad4..efa5497 100644
--- a/core/java/android/webkit/WebViewProvider.java
+++ b/core/java/android/webkit/WebViewProvider.java
@@ -23,6 +23,7 @@
 import android.graphics.Picture;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.net.Uri;
 import android.net.http.SslCertificate;
 import android.os.Bundle;
 import android.os.Message;
@@ -147,7 +148,7 @@
 
     public Picture capturePicture();
 
-    public PrintDocumentAdapter createPrintDocumentAdapter();
+    public PrintDocumentAdapter createPrintDocumentAdapter(String documentName);
 
     public float getScale();
 
@@ -197,6 +198,8 @@
 
     public void clearSslPreferences();
 
+    public void clearClientCertPreferences(ValueCallback<Void> resultCallback);
+
     public WebBackForwardList copyBackForwardList();
 
     public void setFindListener(WebView.FindListener listener);
@@ -245,6 +248,8 @@
 
     public View findHierarchyView(String className, int hashCode);
 
+    public void preauthorizePermission(Uri origin, long resources);
+
     //-------------------------------------------------------------------------
     // Provider internal methods
     //-------------------------------------------------------------------------
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index bbaa33d..0966be3 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -36,6 +36,7 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.LongSparseArray;
+import android.util.MathUtils;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.StateSet;
@@ -59,6 +60,9 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeInfo.CollectionInfo;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.AnimationUtils;
 import android.view.animation.Interpolator;
 import android.view.animation.LinearInterpolator;
 import android.view.inputmethod.BaseInputConnection;
@@ -106,6 +110,7 @@
      * @see #setTranscriptMode(int)
      */
     public static final int TRANSCRIPT_MODE_DISABLED = 0;
+
     /**
      * The list will automatically scroll to the bottom when a data set change
      * notification is received and only if the last item is already visible
@@ -114,6 +119,7 @@
      * @see #setTranscriptMode(int)
      */
     public static final int TRANSCRIPT_MODE_NORMAL = 1;
+
     /**
      * The list will automatically scroll to the bottom, no matter what items
      * are currently visible.
@@ -417,7 +423,7 @@
     /**
      * Handles scrolling between positions within the list.
      */
-    PositionScroller mPositionScroller;
+    AbsPositionScroller mPositionScroller;
 
     /**
      * The offset in pixels form the top of the AdapterView to the top
@@ -539,7 +545,7 @@
     /**
      * The last CheckForTap runnable we posted, if any
      */
-    private Runnable mPendingCheckForTap;
+    private CheckForTap mPendingCheckForTap;
 
     /**
      * The last CheckForKeyLongPress runnable we posted, if any
@@ -581,7 +587,13 @@
     /**
      * Helper object that renders and controls the fast scroll thumb.
      */
-    private FastScroller mFastScroller;
+    private FastScroller mFastScroll;
+
+    /**
+     * Temporary holder for fast scroller style until a FastScroller object
+     * is created.
+     */
+    private int mFastScrollStyle;
 
     private boolean mGlobalLayoutListenerAddedFilter;
 
@@ -693,6 +705,11 @@
     private SavedState mPendingSync;
 
     /**
+     * Whether the view is in the process of detaching from its window.
+     */
+    private boolean mIsDetaching;
+
+    /**
      * Interface definition for a callback to be invoked when the list or grid
      * has been scrolled.
      */
@@ -773,14 +790,18 @@
         this(context, attrs, com.android.internal.R.attr.absListViewStyle);
     }
 
-    public AbsListView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public AbsListView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AbsListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         initAbsListView();
 
         mOwnerThread = Thread.currentThread();
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.AbsListView, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.AbsListView, defStyleAttr, defStyleRes);
 
         Drawable d = a.getDrawable(com.android.internal.R.styleable.AbsListView_listSelector);
         if (d != null) {
@@ -809,6 +830,9 @@
         boolean enableFastScroll = a.getBoolean(R.styleable.AbsListView_fastScrollEnabled, false);
         setFastScrollEnabled(enableFastScroll);
 
+        int fastScrollStyle = a.getResourceId(R.styleable.AbsListView_fastScrollStyle, 0);
+        setFastScrollStyle(fastScrollStyle);
+
         boolean smoothScrollbar = a.getBoolean(R.styleable.AbsListView_smoothScrollbar, true);
         setSmoothScrollbarEnabled(smoothScrollbar);
 
@@ -1238,17 +1262,31 @@
     }
 
     private void setFastScrollerEnabledUiThread(boolean enabled) {
-        if (mFastScroller != null) {
-            mFastScroller.setEnabled(enabled);
+        if (mFastScroll != null) {
+            mFastScroll.setEnabled(enabled);
         } else if (enabled) {
-            mFastScroller = new FastScroller(this);
-            mFastScroller.setEnabled(true);
+            mFastScroll = new FastScroller(this, mFastScrollStyle);
+            mFastScroll.setEnabled(true);
         }
 
         resolvePadding();
 
-        if (mFastScroller != null) {
-            mFastScroller.updateLayout();
+        if (mFastScroll != null) {
+            mFastScroll.updateLayout();
+        }
+    }
+
+    /**
+     * Specifies the style of the fast scroller decorations.
+     *
+     * @param styleResId style resource containing fast scroller properties
+     * @see android.R.styleable#FastScroll
+     */
+    public void setFastScrollStyle(int styleResId) {
+        if (mFastScroll == null) {
+            mFastScrollStyle = styleResId;
+        } else {
+            mFastScroll.setStyle(styleResId);
         }
     }
 
@@ -1288,8 +1326,8 @@
     }
 
     private void setFastScrollerAlwaysVisibleUiThread(boolean alwaysShow) {
-        if (mFastScroller != null) {
-            mFastScroller.setAlwaysShow(alwaysShow);
+        if (mFastScroll != null) {
+            mFastScroll.setAlwaysShow(alwaysShow);
         }
     }
 
@@ -1307,17 +1345,17 @@
      * @see #setFastScrollAlwaysVisible(boolean)
      */
     public boolean isFastScrollAlwaysVisible() {
-        if (mFastScroller == null) {
+        if (mFastScroll == null) {
             return mFastScrollEnabled && mFastScrollAlwaysVisible;
         } else {
-            return mFastScroller.isEnabled() && mFastScroller.isAlwaysShowEnabled();
+            return mFastScroll.isEnabled() && mFastScroll.isAlwaysShowEnabled();
         }
     }
 
     @Override
     public int getVerticalScrollbarWidth() {
-        if (mFastScroller != null && mFastScroller.isEnabled()) {
-            return Math.max(super.getVerticalScrollbarWidth(), mFastScroller.getWidth());
+        if (mFastScroll != null && mFastScroll.isEnabled()) {
+            return Math.max(super.getVerticalScrollbarWidth(), mFastScroll.getWidth());
         }
         return super.getVerticalScrollbarWidth();
     }
@@ -1330,26 +1368,26 @@
      */
     @ViewDebug.ExportedProperty
     public boolean isFastScrollEnabled() {
-        if (mFastScroller == null) {
+        if (mFastScroll == null) {
             return mFastScrollEnabled;
         } else {
-            return mFastScroller.isEnabled();
+            return mFastScroll.isEnabled();
         }
     }
 
     @Override
     public void setVerticalScrollbarPosition(int position) {
         super.setVerticalScrollbarPosition(position);
-        if (mFastScroller != null) {
-            mFastScroller.setScrollbarPosition(position);
+        if (mFastScroll != null) {
+            mFastScroll.setScrollbarPosition(position);
         }
     }
 
     @Override
     public void setScrollBarStyle(int style) {
         super.setScrollBarStyle(style);
-        if (mFastScroller != null) {
-            mFastScroller.setScrollBarStyle(style);
+        if (mFastScroll != null) {
+            mFastScroll.setScrollBarStyle(style);
         }
     }
 
@@ -1410,8 +1448,8 @@
      * Notify our scroll listener (if there is one) of a change in scroll state
      */
     void invokeOnItemScrollListener() {
-        if (mFastScroller != null) {
-            mFastScroller.onScroll(mFirstPosition, getChildCount(), mItemCount);
+        if (mFastScroll != null) {
+            mFastScroll.onScroll(mFirstPosition, getChildCount(), mItemCount);
         }
         if (mOnScrollListener != null) {
             mOnScrollListener.onScroll(this, mFirstPosition, getChildCount(), mItemCount);
@@ -1460,6 +1498,21 @@
         }
     }
 
+    int getSelectionModeForAccessibility() {
+        final int choiceMode = getChoiceMode();
+        switch (choiceMode) {
+            case CHOICE_MODE_NONE:
+                return CollectionInfo.SELECTION_MODE_NONE;
+            case CHOICE_MODE_SINGLE:
+                return CollectionInfo.SELECTION_MODE_SINGLE;
+            case CHOICE_MODE_MULTIPLE:
+            case CHOICE_MODE_MULTIPLE_MODAL:
+                return CollectionInfo.SELECTION_MODE_MULTIPLE;
+            default:
+                return CollectionInfo.SELECTION_MODE_NONE;
+        }
+    }
+
     @Override
     public boolean performAccessibilityAction(int action, Bundle arguments) {
         if (super.performAccessibilityAction(action, arguments)) {
@@ -1576,7 +1629,7 @@
     }
 
     private void useDefaultSelector() {
-        setSelector(getResources().getDrawable(
+        setSelector(getContext().getDrawable(
                 com.android.internal.R.drawable.list_selector_background));
     }
 
@@ -2075,7 +2128,9 @@
     @Override
     protected void onLayout(boolean changed, int l, int t, int r, int b) {
         super.onLayout(changed, l, t, r, b);
+
         mInLayout = true;
+
         final int childCount = getChildCount();
         if (changed) {
             for (int i = 0; i < childCount; i++) {
@@ -2090,8 +2145,8 @@
         mOverscrollMax = (b - t) / OVERSCROLL_LIMIT_DIVISOR;
 
         // TODO: Move somewhere sane. This doesn't belong in onLayout().
-        if (mFastScroller != null) {
-            mFastScroller.onItemCountChanged(getChildCount(), mItemCount);
+        if (mFastScroll != null) {
+            mFastScroll.onItemCountChanged(getChildCount(), mItemCount);
         }
     }
 
@@ -2121,6 +2176,25 @@
     protected void layoutChildren() {
     }
 
+    /**
+     * @param focusedView view that holds accessibility focus
+     * @return direct child that contains accessibility focus, or null if no
+     *         child contains accessibility focus
+     */
+    View getAccessibilityFocusedChild(View focusedView) {
+        ViewParent viewParent = focusedView.getParent();
+        while ((viewParent instanceof View) && (viewParent != this)) {
+            focusedView = (View) viewParent;
+            viewParent = viewParent.getParent();
+        }
+
+        if (!(viewParent instanceof View)) {
+            return null;
+        }
+
+        return focusedView;
+    }
+
     void updateScrollIndicators() {
         if (mScrollUp != null) {
             boolean canScrollUp;
@@ -2242,6 +2316,7 @@
 
                 // If we failed to re-bind the data, scrap the obtained view.
                 if (updatedView != transientView) {
+                    setItemViewLayoutParams(updatedView, position);
                     mRecycler.addScrapView(updatedView, position);
                 }
             }
@@ -2260,12 +2335,6 @@
             } else {
                 isScrap[0] = true;
 
-                // Clear any system-managed transient state so that we can
-                // recycle this view and bind it to different data.
-                if (child.isAccessibilityFocused()) {
-                    child.clearAccessibilityFocus();
-                }
-
                 child.dispatchFinishTemporaryDetach();
             }
         }
@@ -2278,19 +2347,7 @@
             child.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
         }
 
-        if (mAdapterHasStableIds) {
-            final ViewGroup.LayoutParams vlp = child.getLayoutParams();
-            LayoutParams lp;
-            if (vlp == null) {
-                lp = (LayoutParams) generateDefaultLayoutParams();
-            } else if (!checkLayoutParams(vlp)) {
-                lp = (LayoutParams) generateLayoutParams(vlp);
-            } else {
-                lp = (LayoutParams) vlp;
-            }
-            lp.itemId = mAdapter.getItemId(position);
-            child.setLayoutParams(lp);
-        }
+        setItemViewLayoutParams(child, position);
 
         if (AccessibilityManager.getInstance(mContext).isEnabled()) {
             if (mAccessibilityDelegate == null) {
@@ -2306,6 +2363,24 @@
         return child;
     }
 
+    private void setItemViewLayoutParams(View child, int position) {
+        final ViewGroup.LayoutParams vlp = child.getLayoutParams();
+        LayoutParams lp;
+        if (vlp == null) {
+            lp = (LayoutParams) generateDefaultLayoutParams();
+        } else if (!checkLayoutParams(vlp)) {
+            lp = (LayoutParams) generateLayoutParams(vlp);
+        } else {
+            lp = (LayoutParams) vlp;
+        }
+
+        if (mAdapterHasStableIds) {
+            lp.itemId = mAdapter.getItemId(position);
+        }
+        lp.viewType = mAdapter.getItemViewType(position);
+        child.setLayoutParams(lp);
+    }
+
     class ListItemAccessibilityDelegate extends AccessibilityDelegate {
         @Override
         public AccessibilityNodeInfo createAccessibilityNodeInfo(View host) {
@@ -2416,8 +2491,30 @@
         }
     }
 
+    /**
+     * Positions the selector in a way that mimics keyboard focus. If the
+     * selector drawable supports hotspots, this manages the focus hotspot.
+     */
+    void positionSelectorLikeFocus(int position, View sel) {
+        positionSelector(position, sel);
+
+        final Drawable selector = mSelector;
+        if (selector != null && selector.supportsHotspots() && position != INVALID_POSITION) {
+            final Rect bounds = mSelectorRect;
+            final float x = bounds.exactCenterX();
+            final float y = bounds.exactCenterY();
+            selector.setHotspot(R.attr.state_focused, x, y);
+        }
+    }
+
     void positionSelector(int position, View sel) {
         if (position != INVALID_POSITION) {
+            if (mSelectorPosition != position) {
+                final Drawable selector = mSelector;
+                if (selector != null && selector.supportsHotspots()) {
+                    selector.clearHotspots();
+                }
+            }
             mSelectorPosition = position;
         }
 
@@ -2506,8 +2603,8 @@
             rememberSyncState();
         }
 
-        if (mFastScroller != null) {
-            mFastScroller.onSizeChanged(w, h, oldw, oldh);
+        if (mFastScroll != null) {
+            mFastScroll.onSizeChanged(w, h, oldw, oldh);
         }
     }
 
@@ -2566,7 +2663,7 @@
      * @attr ref android.R.styleable#AbsListView_listSelector
      */
     public void setSelector(int resID) {
-        setSelector(getResources().getDrawable(resID));
+        setSelector(getContext().getDrawable(resID));
     }
 
     public void setSelector(Drawable sel) {
@@ -2728,6 +2825,8 @@
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
 
+        mIsDetaching = true;
+
         // Dismiss the popup in case onSaveInstanceState() was not invoked
         dismissPopup();
 
@@ -2776,6 +2875,8 @@
             removeCallbacks(mTouchModeReset);
             mTouchModeReset.run();
         }
+
+        mIsDetaching = false;
     }
 
     @Override
@@ -2836,8 +2937,8 @@
     @Override
     public void onRtlPropertiesChanged(int layoutDirection) {
         super.onRtlPropertiesChanged(layoutDirection);
-        if (mFastScroller != null) {
-           mFastScroller.setScrollbarPosition(getVerticalScrollbarPosition());
+        if (mFastScroll != null) {
+           mFastScroll.setScrollbarPosition(getVerticalScrollbarPosition());
         }
     }
 
@@ -3039,7 +3140,7 @@
 
     @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (event.isConfirmKey()) {
+        if (KeyEvent.isConfirmKey(keyCode)) {
             if (!isEnabled()) {
                 return true;
             }
@@ -3110,7 +3211,10 @@
         return INVALID_ROW_ID;
     }
 
-    final class CheckForTap implements Runnable {
+    private final class CheckForTap implements Runnable {
+        float x;
+        float y;
+
         @Override
         public void run() {
             if (mTouchMode == TOUCH_MODE_DOWN) {
@@ -3130,7 +3234,7 @@
                         final boolean longClickable = isLongClickable();
 
                         if (mSelector != null) {
-                            Drawable d = mSelector.getCurrent();
+                            final Drawable d = mSelector.getCurrent();
                             if (d != null && d instanceof TransitionDrawable) {
                                 if (longClickable) {
                                     ((TransitionDrawable) d).startTransition(longPressTimeout);
@@ -3138,6 +3242,9 @@
                                     ((TransitionDrawable) d).resetTransition();
                                 }
                             }
+                            if (d.supportsHotspots()) {
+                                d.setHotspot(R.attr.state_pressed, x, y);
+                            }
                         }
 
                         if (longClickable) {
@@ -3402,7 +3509,7 @@
             mPositionScroller.stop();
         }
 
-        if (!isAttachedToWindow()) {
+        if (mIsDetaching || !isAttachedToWindow()) {
             // Something isn't right.
             // Since we rely on being attached to get data set change notifications,
             // don't risk doing anything where we might try to resync and find things
@@ -3410,8 +3517,8 @@
             return false;
         }
 
-        if (mFastScroller != null) {
-            boolean intercepted = mFastScroller.onTouchEvent(ev);
+        if (mFastScroll != null) {
+            boolean intercepted = mFastScroll.onTouchEvent(ev);
             if (intercepted) {
                 return true;
             }
@@ -3521,6 +3628,8 @@
                         mPendingCheckForTap = new CheckForTap();
                     }
 
+                    mPendingCheckForTap.x = ev.getX();
+                    mPendingCheckForTap.y = ev.getY();
                     postDelayed(mPendingCheckForTap, ViewConfiguration.getTapTimeout());
                 }
             }
@@ -3630,6 +3739,9 @@
                                 if (d != null && d instanceof TransitionDrawable) {
                                     ((TransitionDrawable) d).resetTransition();
                                 }
+                                if (mSelector.supportsHotspots()) {
+                                    mSelector.setHotspot(R.attr.state_pressed, x, ev.getY());
+                                }
                             }
                             if (mTouchModeReset != null) {
                                 removeCallbacks(mTouchModeReset);
@@ -3641,7 +3753,10 @@
                                     mTouchMode = TOUCH_MODE_REST;
                                     child.setPressed(false);
                                     setPressed(false);
-                                    if (!mDataChanged && isAttachedToWindow()) {
+                                    if (mSelector != null && mSelector.supportsHotspots()) {
+                                        mSelector.removeHotspot(R.attr.state_pressed);
+                                    }
+                                    if (!mDataChanged && !mIsDetaching && isAttachedToWindow()) {
                                         performClick.run();
                                     }
                                 }
@@ -3900,7 +4015,7 @@
 
     @Override
     public boolean onInterceptHoverEvent(MotionEvent event) {
-        if (mFastScroller != null && mFastScroller.onInterceptHoverEvent(event)) {
+        if (mFastScroll != null && mFastScroll.onInterceptHoverEvent(event)) {
             return true;
         }
 
@@ -3916,7 +4031,7 @@
             mPositionScroller.stop();
         }
 
-        if (!isAttachedToWindow()) {
+        if (mIsDetaching || !isAttachedToWindow()) {
             // Something isn't right.
             // Since we rely on being attached to get data set change notifications,
             // don't risk doing anything where we might try to resync and find things
@@ -3924,7 +4039,7 @@
             return false;
         }
 
-        if (mFastScroller != null && mFastScroller.onInterceptTouchEvent(ev)) {
+        if (mFastScroll != null && mFastScroll.onInterceptTouchEvent(ev)) {
             return true;
         }
 
@@ -4321,447 +4436,6 @@
         }
     }
 
-    class PositionScroller implements Runnable {
-        private static final int SCROLL_DURATION = 200;
-
-        private static final int MOVE_DOWN_POS = 1;
-        private static final int MOVE_UP_POS = 2;
-        private static final int MOVE_DOWN_BOUND = 3;
-        private static final int MOVE_UP_BOUND = 4;
-        private static final int MOVE_OFFSET = 5;
-
-        private int mMode;
-        private int mTargetPos;
-        private int mBoundPos;
-        private int mLastSeenPos;
-        private int mScrollDuration;
-        private final int mExtraScroll;
-
-        private int mOffsetFromTop;
-
-        PositionScroller() {
-            mExtraScroll = ViewConfiguration.get(mContext).getScaledFadingEdgeLength();
-        }
-
-        void start(final int position) {
-            stop();
-
-            if (mDataChanged) {
-                // Wait until we're back in a stable state to try this.
-                mPositionScrollAfterLayout = new Runnable() {
-                    @Override public void run() {
-                        start(position);
-                    }
-                };
-                return;
-            }
-
-            final int childCount = getChildCount();
-            if (childCount == 0) {
-                // Can't scroll without children.
-                return;
-            }
-
-            final int firstPos = mFirstPosition;
-            final int lastPos = firstPos + childCount - 1;
-
-            int viewTravelCount;
-            int clampedPosition = Math.max(0, Math.min(getCount() - 1, position));
-            if (clampedPosition < firstPos) {
-                viewTravelCount = firstPos - clampedPosition + 1;
-                mMode = MOVE_UP_POS;
-            } else if (clampedPosition > lastPos) {
-                viewTravelCount = clampedPosition - lastPos + 1;
-                mMode = MOVE_DOWN_POS;
-            } else {
-                scrollToVisible(clampedPosition, INVALID_POSITION, SCROLL_DURATION);
-                return;
-            }
-
-            if (viewTravelCount > 0) {
-                mScrollDuration = SCROLL_DURATION / viewTravelCount;
-            } else {
-                mScrollDuration = SCROLL_DURATION;
-            }
-            mTargetPos = clampedPosition;
-            mBoundPos = INVALID_POSITION;
-            mLastSeenPos = INVALID_POSITION;
-
-            postOnAnimation(this);
-        }
-
-        void start(final int position, final int boundPosition) {
-            stop();
-
-            if (boundPosition == INVALID_POSITION) {
-                start(position);
-                return;
-            }
-
-            if (mDataChanged) {
-                // Wait until we're back in a stable state to try this.
-                mPositionScrollAfterLayout = new Runnable() {
-                    @Override public void run() {
-                        start(position, boundPosition);
-                    }
-                };
-                return;
-            }
-
-            final int childCount = getChildCount();
-            if (childCount == 0) {
-                // Can't scroll without children.
-                return;
-            }
-
-            final int firstPos = mFirstPosition;
-            final int lastPos = firstPos + childCount - 1;
-
-            int viewTravelCount;
-            int clampedPosition = Math.max(0, Math.min(getCount() - 1, position));
-            if (clampedPosition < firstPos) {
-                final int boundPosFromLast = lastPos - boundPosition;
-                if (boundPosFromLast < 1) {
-                    // Moving would shift our bound position off the screen. Abort.
-                    return;
-                }
-
-                final int posTravel = firstPos - clampedPosition + 1;
-                final int boundTravel = boundPosFromLast - 1;
-                if (boundTravel < posTravel) {
-                    viewTravelCount = boundTravel;
-                    mMode = MOVE_UP_BOUND;
-                } else {
-                    viewTravelCount = posTravel;
-                    mMode = MOVE_UP_POS;
-                }
-            } else if (clampedPosition > lastPos) {
-                final int boundPosFromFirst = boundPosition - firstPos;
-                if (boundPosFromFirst < 1) {
-                    // Moving would shift our bound position off the screen. Abort.
-                    return;
-                }
-
-                final int posTravel = clampedPosition - lastPos + 1;
-                final int boundTravel = boundPosFromFirst - 1;
-                if (boundTravel < posTravel) {
-                    viewTravelCount = boundTravel;
-                    mMode = MOVE_DOWN_BOUND;
-                } else {
-                    viewTravelCount = posTravel;
-                    mMode = MOVE_DOWN_POS;
-                }
-            } else {
-                scrollToVisible(clampedPosition, boundPosition, SCROLL_DURATION);
-                return;
-            }
-
-            if (viewTravelCount > 0) {
-                mScrollDuration = SCROLL_DURATION / viewTravelCount;
-            } else {
-                mScrollDuration = SCROLL_DURATION;
-            }
-            mTargetPos = clampedPosition;
-            mBoundPos = boundPosition;
-            mLastSeenPos = INVALID_POSITION;
-
-            postOnAnimation(this);
-        }
-
-        void startWithOffset(int position, int offset) {
-            startWithOffset(position, offset, SCROLL_DURATION);
-        }
-
-        void startWithOffset(final int position, int offset, final int duration) {
-            stop();
-
-            if (mDataChanged) {
-                // Wait until we're back in a stable state to try this.
-                final int postOffset = offset;
-                mPositionScrollAfterLayout = new Runnable() {
-                    @Override public void run() {
-                        startWithOffset(position, postOffset, duration);
-                    }
-                };
-                return;
-            }
-
-            final int childCount = getChildCount();
-            if (childCount == 0) {
-                // Can't scroll without children.
-                return;
-            }
-
-            offset += getPaddingTop();
-
-            mTargetPos = Math.max(0, Math.min(getCount() - 1, position));
-            mOffsetFromTop = offset;
-            mBoundPos = INVALID_POSITION;
-            mLastSeenPos = INVALID_POSITION;
-            mMode = MOVE_OFFSET;
-
-            final int firstPos = mFirstPosition;
-            final int lastPos = firstPos + childCount - 1;
-
-            int viewTravelCount;
-            if (mTargetPos < firstPos) {
-                viewTravelCount = firstPos - mTargetPos;
-            } else if (mTargetPos > lastPos) {
-                viewTravelCount = mTargetPos - lastPos;
-            } else {
-                // On-screen, just scroll.
-                final int targetTop = getChildAt(mTargetPos - firstPos).getTop();
-                smoothScrollBy(targetTop - offset, duration, true);
-                return;
-            }
-
-            // Estimate how many screens we should travel
-            final float screenTravelCount = (float) viewTravelCount / childCount;
-            mScrollDuration = screenTravelCount < 1 ?
-                    duration : (int) (duration / screenTravelCount);
-            mLastSeenPos = INVALID_POSITION;
-
-            postOnAnimation(this);
-        }
-
-        /**
-         * Scroll such that targetPos is in the visible padded region without scrolling
-         * boundPos out of view. Assumes targetPos is onscreen.
-         */
-        void scrollToVisible(int targetPos, int boundPos, int duration) {
-            final int firstPos = mFirstPosition;
-            final int childCount = getChildCount();
-            final int lastPos = firstPos + childCount - 1;
-            final int paddedTop = mListPadding.top;
-            final int paddedBottom = getHeight() - mListPadding.bottom;
-
-            if (targetPos < firstPos || targetPos > lastPos) {
-                Log.w(TAG, "scrollToVisible called with targetPos " + targetPos +
-                        " not visible [" + firstPos + ", " + lastPos + "]");
-            }
-            if (boundPos < firstPos || boundPos > lastPos) {
-                // boundPos doesn't matter, it's already offscreen.
-                boundPos = INVALID_POSITION;
-            }
-
-            final View targetChild = getChildAt(targetPos - firstPos);
-            final int targetTop = targetChild.getTop();
-            final int targetBottom = targetChild.getBottom();
-            int scrollBy = 0;
-
-            if (targetBottom > paddedBottom) {
-                scrollBy = targetBottom - paddedBottom;
-            }
-            if (targetTop < paddedTop) {
-                scrollBy = targetTop - paddedTop;
-            }
-
-            if (scrollBy == 0) {
-                return;
-            }
-
-            if (boundPos >= 0) {
-                final View boundChild = getChildAt(boundPos - firstPos);
-                final int boundTop = boundChild.getTop();
-                final int boundBottom = boundChild.getBottom();
-                final int absScroll = Math.abs(scrollBy);
-
-                if (scrollBy < 0 && boundBottom + absScroll > paddedBottom) {
-                    // Don't scroll the bound view off the bottom of the screen.
-                    scrollBy = Math.max(0, boundBottom - paddedBottom);
-                } else if (scrollBy > 0 && boundTop - absScroll < paddedTop) {
-                    // Don't scroll the bound view off the top of the screen.
-                    scrollBy = Math.min(0, boundTop - paddedTop);
-                }
-            }
-
-            smoothScrollBy(scrollBy, duration);
-        }
-
-        void stop() {
-            removeCallbacks(this);
-        }
-
-        @Override
-        public void run() {
-            final int listHeight = getHeight();
-            final int firstPos = mFirstPosition;
-
-            switch (mMode) {
-            case MOVE_DOWN_POS: {
-                final int lastViewIndex = getChildCount() - 1;
-                final int lastPos = firstPos + lastViewIndex;
-
-                if (lastViewIndex < 0) {
-                    return;
-                }
-
-                if (lastPos == mLastSeenPos) {
-                    // No new views, let things keep going.
-                    postOnAnimation(this);
-                    return;
-                }
-
-                final View lastView = getChildAt(lastViewIndex);
-                final int lastViewHeight = lastView.getHeight();
-                final int lastViewTop = lastView.getTop();
-                final int lastViewPixelsShowing = listHeight - lastViewTop;
-                final int extraScroll = lastPos < mItemCount - 1 ?
-                        Math.max(mListPadding.bottom, mExtraScroll) : mListPadding.bottom;
-
-                final int scrollBy = lastViewHeight - lastViewPixelsShowing + extraScroll;
-                smoothScrollBy(scrollBy, mScrollDuration, true);
-
-                mLastSeenPos = lastPos;
-                if (lastPos < mTargetPos) {
-                    postOnAnimation(this);
-                }
-                break;
-            }
-
-            case MOVE_DOWN_BOUND: {
-                final int nextViewIndex = 1;
-                final int childCount = getChildCount();
-
-                if (firstPos == mBoundPos || childCount <= nextViewIndex
-                        || firstPos + childCount >= mItemCount) {
-                    return;
-                }
-                final int nextPos = firstPos + nextViewIndex;
-
-                if (nextPos == mLastSeenPos) {
-                    // No new views, let things keep going.
-                    postOnAnimation(this);
-                    return;
-                }
-
-                final View nextView = getChildAt(nextViewIndex);
-                final int nextViewHeight = nextView.getHeight();
-                final int nextViewTop = nextView.getTop();
-                final int extraScroll = Math.max(mListPadding.bottom, mExtraScroll);
-                if (nextPos < mBoundPos) {
-                    smoothScrollBy(Math.max(0, nextViewHeight + nextViewTop - extraScroll),
-                            mScrollDuration, true);
-
-                    mLastSeenPos = nextPos;
-
-                    postOnAnimation(this);
-                } else  {
-                    if (nextViewTop > extraScroll) {
-                        smoothScrollBy(nextViewTop - extraScroll, mScrollDuration, true);
-                    }
-                }
-                break;
-            }
-
-            case MOVE_UP_POS: {
-                if (firstPos == mLastSeenPos) {
-                    // No new views, let things keep going.
-                    postOnAnimation(this);
-                    return;
-                }
-
-                final View firstView = getChildAt(0);
-                if (firstView == null) {
-                    return;
-                }
-                final int firstViewTop = firstView.getTop();
-                final int extraScroll = firstPos > 0 ?
-                        Math.max(mExtraScroll, mListPadding.top) : mListPadding.top;
-
-                smoothScrollBy(firstViewTop - extraScroll, mScrollDuration, true);
-
-                mLastSeenPos = firstPos;
-
-                if (firstPos > mTargetPos) {
-                    postOnAnimation(this);
-                }
-                break;
-            }
-
-            case MOVE_UP_BOUND: {
-                final int lastViewIndex = getChildCount() - 2;
-                if (lastViewIndex < 0) {
-                    return;
-                }
-                final int lastPos = firstPos + lastViewIndex;
-
-                if (lastPos == mLastSeenPos) {
-                    // No new views, let things keep going.
-                    postOnAnimation(this);
-                    return;
-                }
-
-                final View lastView = getChildAt(lastViewIndex);
-                final int lastViewHeight = lastView.getHeight();
-                final int lastViewTop = lastView.getTop();
-                final int lastViewPixelsShowing = listHeight - lastViewTop;
-                final int extraScroll = Math.max(mListPadding.top, mExtraScroll);
-                mLastSeenPos = lastPos;
-                if (lastPos > mBoundPos) {
-                    smoothScrollBy(-(lastViewPixelsShowing - extraScroll), mScrollDuration, true);
-                    postOnAnimation(this);
-                } else {
-                    final int bottom = listHeight - extraScroll;
-                    final int lastViewBottom = lastViewTop + lastViewHeight;
-                    if (bottom > lastViewBottom) {
-                        smoothScrollBy(-(bottom - lastViewBottom), mScrollDuration, true);
-                    }
-                }
-                break;
-            }
-
-            case MOVE_OFFSET: {
-                if (mLastSeenPos == firstPos) {
-                    // No new views, let things keep going.
-                    postOnAnimation(this);
-                    return;
-                }
-
-                mLastSeenPos = firstPos;
-
-                final int childCount = getChildCount();
-                final int position = mTargetPos;
-                final int lastPos = firstPos + childCount - 1;
-
-                int viewTravelCount = 0;
-                if (position < firstPos) {
-                    viewTravelCount = firstPos - position + 1;
-                } else if (position > lastPos) {
-                    viewTravelCount = position - lastPos;
-                }
-
-                // Estimate how many screens we should travel
-                final float screenTravelCount = (float) viewTravelCount / childCount;
-
-                final float modifier = Math.min(Math.abs(screenTravelCount), 1.f);
-                if (position < firstPos) {
-                    final int distance = (int) (-getHeight() * modifier);
-                    final int duration = (int) (mScrollDuration * modifier);
-                    smoothScrollBy(distance, duration, true);
-                    postOnAnimation(this);
-                } else if (position > lastPos) {
-                    final int distance = (int) (getHeight() * modifier);
-                    final int duration = (int) (mScrollDuration * modifier);
-                    smoothScrollBy(distance, duration, true);
-                    postOnAnimation(this);
-                } else {
-                    // On-screen, just scroll.
-                    final int targetTop = getChildAt(position - firstPos).getTop();
-                    final int distance = targetTop - mOffsetFromTop;
-                    final int duration = (int) (mScrollDuration *
-                            ((float) Math.abs(distance) / getHeight()));
-                    smoothScrollBy(distance, duration, true);
-                }
-                break;
-            }
-
-            default:
-                break;
-            }
-        }
-    }
-
     /**
      * The amount of friction applied to flings. The default value
      * is {@link ViewConfiguration#getScrollFriction}.
@@ -4784,20 +4458,27 @@
     }
 
     /**
+     * Override this for better control over position scrolling.
+     */
+    AbsPositionScroller createPositionScroller() {
+        return new PositionScroller();
+    }
+
+    /**
      * Smoothly scroll to the specified adapter position. The view will
      * scroll such that the indicated position is displayed.
      * @param position Scroll to this adapter position.
      */
     public void smoothScrollToPosition(int position) {
         if (mPositionScroller == null) {
-            mPositionScroller = new PositionScroller();
+            mPositionScroller = createPositionScroller();
         }
         mPositionScroller.start(position);
     }
 
     /**
      * Smoothly scroll to the specified adapter position. The view will scroll
-     * such that the indicated position is displayed <code>offset</code> pixels from
+     * such that the indicated position is displayed <code>offset</code> pixels below
      * the top edge of the view. If this is impossible, (e.g. the offset would scroll
      * the first or last item beyond the boundaries of the list) it will get as close
      * as possible. The scroll will take <code>duration</code> milliseconds to complete.
@@ -4809,14 +4490,14 @@
      */
     public void smoothScrollToPositionFromTop(int position, int offset, int duration) {
         if (mPositionScroller == null) {
-            mPositionScroller = new PositionScroller();
+            mPositionScroller = createPositionScroller();
         }
         mPositionScroller.startWithOffset(position, offset, duration);
     }
 
     /**
      * Smoothly scroll to the specified adapter position. The view will scroll
-     * such that the indicated position is displayed <code>offset</code> pixels from
+     * such that the indicated position is displayed <code>offset</code> pixels below
      * the top edge of the view. If this is impossible, (e.g. the offset would scroll
      * the first or last item beyond the boundaries of the list) it will get as close
      * as possible.
@@ -4827,9 +4508,9 @@
      */
     public void smoothScrollToPositionFromTop(int position, int offset) {
         if (mPositionScroller == null) {
-            mPositionScroller = new PositionScroller();
+            mPositionScroller = createPositionScroller();
         }
-        mPositionScroller.startWithOffset(position, offset);
+        mPositionScroller.startWithOffset(position, offset, offset);
     }
 
     /**
@@ -4837,13 +4518,14 @@
      * scroll such that the indicated position is displayed, but it will
      * stop early if scrolling further would scroll boundPosition out of
      * view.
+     *
      * @param position Scroll to this adapter position.
      * @param boundPosition Do not scroll if it would move this adapter
      *          position out of view.
      */
     public void smoothScrollToPosition(int position, int boundPosition) {
         if (mPositionScroller == null) {
-            mPositionScroller = new PositionScroller();
+            mPositionScroller = createPositionScroller();
         }
         mPositionScroller.start(position, boundPosition);
     }
@@ -6285,16 +5967,16 @@
         @Override
         public void onChanged() {
             super.onChanged();
-            if (mFastScroller != null) {
-                mFastScroller.onSectionsChanged();
+            if (mFastScroll != null) {
+                mFastScroll.onSectionsChanged();
             }
         }
 
         @Override
         public void onInvalidated() {
             super.onInvalidated();
-            if (mFastScroller != null) {
-                mFastScroller.onSectionsChanged();
+            if (mFastScroll != null) {
+                mFastScroll.onSectionsChanged();
             }
         }
     }
@@ -6555,18 +6237,12 @@
         void clear() {
             if (mViewTypeCount == 1) {
                 final ArrayList<View> scrap = mCurrentScrap;
-                final int scrapCount = scrap.size();
-                for (int i = 0; i < scrapCount; i++) {
-                    removeDetachedView(scrap.remove(scrapCount - 1 - i), false);
-                }
+                clearScrap(scrap);
             } else {
                 final int typeCount = mViewTypeCount;
                 for (int i = 0; i < typeCount; i++) {
                     final ArrayList<View> scrap = mScrapViews[i];
-                    final int scrapCount = scrap.size();
-                    for (int j = 0; j < scrapCount; j++) {
-                        removeDetachedView(scrap.remove(scrapCount - 1 - j), false);
-                    }
+                    clearScrap(scrap);
                 }
             }
 
@@ -6667,7 +6343,7 @@
             if (mViewTypeCount == 1) {
                 return retrieveFromScrap(mCurrentScrap, position);
             } else {
-                int whichScrap = mAdapter.getItemViewType(position);
+                final int whichScrap = mAdapter.getItemViewType(position);
                 if (whichScrap >= 0 && whichScrap < mScrapViews.length) {
                     return retrieveFromScrap(mScrapViews[whichScrap], position);
                 }
@@ -6739,13 +6415,6 @@
                     mScrapViews[viewType].add(scrap);
                 }
 
-                // Clear any system-managed transient state.
-                if (scrap.isAccessibilityFocused()) {
-                    scrap.clearAccessibilityFocus();
-                }
-
-                scrap.setAccessibilityDelegate(null);
-
                 if (mRecyclerListener != null) {
                     mRecyclerListener.onMovedToScrapHeap(scrap);
                 }
@@ -6819,7 +6488,6 @@
                         lp.scrappedFromPosition = mFirstActivePosition + i;
                         scrapViews.add(victim);
 
-                        victim.setAccessibilityDelegate(null);
                         if (hasListener) {
                             mRecyclerListener.onMovedToScrapHeap(victim);
                         }
@@ -6923,23 +6591,861 @@
                 }
             }
         }
+
+        private View retrieveFromScrap(ArrayList<View> scrapViews, int position) {
+            final int size = scrapViews.size();
+            if (size > 0) {
+                // See if we still have a view for this position or ID.
+                for (int i = 0; i < size; i++) {
+                    final View view = scrapViews.get(i);
+                    final AbsListView.LayoutParams params =
+                            (AbsListView.LayoutParams) view.getLayoutParams();
+
+                    if (mAdapterHasStableIds) {
+                        final long id = mAdapter.getItemId(position);
+                        if (id == params.itemId) {
+                            return scrapViews.remove(i);
+                        }
+                    } else if (params.scrappedFromPosition == position) {
+                        final View scrap = scrapViews.remove(i);
+                        clearAccessibilityFromScrap(scrap);
+                        return scrap;
+                    }
+                }
+                final View scrap = scrapViews.remove(size - 1);
+                clearAccessibilityFromScrap(scrap);
+                return scrap;
+            } else {
+                return null;
+            }
+        }
+
+        private void clearScrap(final ArrayList<View> scrap) {
+            final int scrapCount = scrap.size();
+            for (int j = 0; j < scrapCount; j++) {
+                removeDetachedView(scrap.remove(scrapCount - 1 - j), false);
+            }
+        }
+
+        private void clearAccessibilityFromScrap(View view) {
+            if (view.isAccessibilityFocused()) {
+                view.clearAccessibilityFocus();
+            }
+            view.setAccessibilityDelegate(null);
+        }
+
+        private void removeDetachedView(View child, boolean animate) {
+            child.setAccessibilityDelegate(null);
+            AbsListView.this.removeDetachedView(child, animate);
+        }
     }
 
-    static View retrieveFromScrap(ArrayList<View> scrapViews, int position) {
-        int size = scrapViews.size();
-        if (size > 0) {
-            // See if we still have a view for this position.
-            for (int i=0; i<size; i++) {
-                View view = scrapViews.get(i);
-                if (((AbsListView.LayoutParams)view.getLayoutParams())
-                        .scrappedFromPosition == position) {
-                    scrapViews.remove(i);
-                    return view;
+    /**
+     * Returns the height of the view for the specified position.
+     *
+     * @param position the item position
+     * @return view height in pixels
+     */
+    int getHeightForPosition(int position) {
+        final int firstVisiblePosition = getFirstVisiblePosition();
+        final int childCount = getChildCount();
+        final int index = position - firstVisiblePosition;
+        if (index >= 0 && index < childCount) {
+            // Position is on-screen, use existing view.
+            final View view = getChildAt(index);
+            return view.getHeight();
+        } else {
+            // Position is off-screen, obtain & recycle view.
+            final View view = obtainView(position, mIsScrap);
+            view.measure(mWidthMeasureSpec, MeasureSpec.UNSPECIFIED);
+            final int height = view.getMeasuredHeight();
+            mRecycler.addScrapView(view, position);
+            return height;
+        }
+    }
+
+    /**
+     * Sets the selected item and positions the selection y pixels from the top edge
+     * of the ListView. (If in touch mode, the item will not be selected but it will
+     * still be positioned appropriately.)
+     *
+     * @param position Index (starting at 0) of the data item to be selected.
+     * @param y The distance from the top edge of the ListView (plus padding) that the
+     *        item will be positioned.
+     */
+    public void setSelectionFromTop(int position, int y) {
+        if (mAdapter == null) {
+            return;
+        }
+
+        if (!isInTouchMode()) {
+            position = lookForSelectablePosition(position, true);
+            if (position >= 0) {
+                setNextSelectedPositionInt(position);
+            }
+        } else {
+            mResurrectToPosition = position;
+        }
+
+        if (position >= 0) {
+            mLayoutMode = LAYOUT_SPECIFIC;
+            mSpecificTop = mListPadding.top + y;
+
+            if (mNeedSync) {
+                mSyncPosition = position;
+                mSyncRowId = mAdapter.getItemId(position);
+            }
+
+            if (mPositionScroller != null) {
+                mPositionScroller.stop();
+            }
+            requestLayout();
+        }
+    }
+
+    /**
+     * Abstract positon scroller used to handle smooth scrolling.
+     */
+    static abstract class AbsPositionScroller {
+        public abstract void start(int position);
+        public abstract void start(int position, int boundPosition);
+        public abstract void startWithOffset(int position, int offset);
+        public abstract void startWithOffset(int position, int offset, int duration);
+        public abstract void stop();
+    }
+
+    /**
+     * Default position scroller that simulates a fling.
+     */
+    class PositionScroller extends AbsPositionScroller implements Runnable {
+        private static final int SCROLL_DURATION = 200;
+
+        private static final int MOVE_DOWN_POS = 1;
+        private static final int MOVE_UP_POS = 2;
+        private static final int MOVE_DOWN_BOUND = 3;
+        private static final int MOVE_UP_BOUND = 4;
+        private static final int MOVE_OFFSET = 5;
+
+        private int mMode;
+        private int mTargetPos;
+        private int mBoundPos;
+        private int mLastSeenPos;
+        private int mScrollDuration;
+        private final int mExtraScroll;
+
+        private int mOffsetFromTop;
+
+        PositionScroller() {
+            mExtraScroll = ViewConfiguration.get(mContext).getScaledFadingEdgeLength();
+        }
+
+        @Override
+        public void start(final int position) {
+            stop();
+
+            if (mDataChanged) {
+                // Wait until we're back in a stable state to try this.
+                mPositionScrollAfterLayout = new Runnable() {
+                    @Override public void run() {
+                        start(position);
+                    }
+                };
+                return;
+            }
+
+            final int childCount = getChildCount();
+            if (childCount == 0) {
+                // Can't scroll without children.
+                return;
+            }
+
+            final int firstPos = mFirstPosition;
+            final int lastPos = firstPos + childCount - 1;
+
+            int viewTravelCount;
+            int clampedPosition = Math.max(0, Math.min(getCount() - 1, position));
+            if (clampedPosition < firstPos) {
+                viewTravelCount = firstPos - clampedPosition + 1;
+                mMode = MOVE_UP_POS;
+            } else if (clampedPosition > lastPos) {
+                viewTravelCount = clampedPosition - lastPos + 1;
+                mMode = MOVE_DOWN_POS;
+            } else {
+                scrollToVisible(clampedPosition, INVALID_POSITION, SCROLL_DURATION);
+                return;
+            }
+
+            if (viewTravelCount > 0) {
+                mScrollDuration = SCROLL_DURATION / viewTravelCount;
+            } else {
+                mScrollDuration = SCROLL_DURATION;
+            }
+            mTargetPos = clampedPosition;
+            mBoundPos = INVALID_POSITION;
+            mLastSeenPos = INVALID_POSITION;
+
+            postOnAnimation(this);
+        }
+
+        @Override
+        public void start(final int position, final int boundPosition) {
+            stop();
+
+            if (boundPosition == INVALID_POSITION) {
+                start(position);
+                return;
+            }
+
+            if (mDataChanged) {
+                // Wait until we're back in a stable state to try this.
+                mPositionScrollAfterLayout = new Runnable() {
+                    @Override public void run() {
+                        start(position, boundPosition);
+                    }
+                };
+                return;
+            }
+
+            final int childCount = getChildCount();
+            if (childCount == 0) {
+                // Can't scroll without children.
+                return;
+            }
+
+            final int firstPos = mFirstPosition;
+            final int lastPos = firstPos + childCount - 1;
+
+            int viewTravelCount;
+            int clampedPosition = Math.max(0, Math.min(getCount() - 1, position));
+            if (clampedPosition < firstPos) {
+                final int boundPosFromLast = lastPos - boundPosition;
+                if (boundPosFromLast < 1) {
+                    // Moving would shift our bound position off the screen. Abort.
+                    return;
+                }
+
+                final int posTravel = firstPos - clampedPosition + 1;
+                final int boundTravel = boundPosFromLast - 1;
+                if (boundTravel < posTravel) {
+                    viewTravelCount = boundTravel;
+                    mMode = MOVE_UP_BOUND;
+                } else {
+                    viewTravelCount = posTravel;
+                    mMode = MOVE_UP_POS;
+                }
+            } else if (clampedPosition > lastPos) {
+                final int boundPosFromFirst = boundPosition - firstPos;
+                if (boundPosFromFirst < 1) {
+                    // Moving would shift our bound position off the screen. Abort.
+                    return;
+                }
+
+                final int posTravel = clampedPosition - lastPos + 1;
+                final int boundTravel = boundPosFromFirst - 1;
+                if (boundTravel < posTravel) {
+                    viewTravelCount = boundTravel;
+                    mMode = MOVE_DOWN_BOUND;
+                } else {
+                    viewTravelCount = posTravel;
+                    mMode = MOVE_DOWN_POS;
+                }
+            } else {
+                scrollToVisible(clampedPosition, boundPosition, SCROLL_DURATION);
+                return;
+            }
+
+            if (viewTravelCount > 0) {
+                mScrollDuration = SCROLL_DURATION / viewTravelCount;
+            } else {
+                mScrollDuration = SCROLL_DURATION;
+            }
+            mTargetPos = clampedPosition;
+            mBoundPos = boundPosition;
+            mLastSeenPos = INVALID_POSITION;
+
+            postOnAnimation(this);
+        }
+
+        @Override
+        public void startWithOffset(int position, int offset) {
+            startWithOffset(position, offset, SCROLL_DURATION);
+        }
+
+        @Override
+        public void startWithOffset(final int position, int offset, final int duration) {
+            stop();
+
+            if (mDataChanged) {
+                // Wait until we're back in a stable state to try this.
+                final int postOffset = offset;
+                mPositionScrollAfterLayout = new Runnable() {
+                    @Override public void run() {
+                        startWithOffset(position, postOffset, duration);
+                    }
+                };
+                return;
+            }
+
+            final int childCount = getChildCount();
+            if (childCount == 0) {
+                // Can't scroll without children.
+                return;
+            }
+
+            offset += getPaddingTop();
+
+            mTargetPos = Math.max(0, Math.min(getCount() - 1, position));
+            mOffsetFromTop = offset;
+            mBoundPos = INVALID_POSITION;
+            mLastSeenPos = INVALID_POSITION;
+            mMode = MOVE_OFFSET;
+
+            final int firstPos = mFirstPosition;
+            final int lastPos = firstPos + childCount - 1;
+
+            int viewTravelCount;
+            if (mTargetPos < firstPos) {
+                viewTravelCount = firstPos - mTargetPos;
+            } else if (mTargetPos > lastPos) {
+                viewTravelCount = mTargetPos - lastPos;
+            } else {
+                // On-screen, just scroll.
+                final int targetTop = getChildAt(mTargetPos - firstPos).getTop();
+                smoothScrollBy(targetTop - offset, duration, true);
+                return;
+            }
+
+            // Estimate how many screens we should travel
+            final float screenTravelCount = (float) viewTravelCount / childCount;
+            mScrollDuration = screenTravelCount < 1 ?
+                    duration : (int) (duration / screenTravelCount);
+            mLastSeenPos = INVALID_POSITION;
+
+            postOnAnimation(this);
+        }
+
+        /**
+         * Scroll such that targetPos is in the visible padded region without scrolling
+         * boundPos out of view. Assumes targetPos is onscreen.
+         */
+        private void scrollToVisible(int targetPos, int boundPos, int duration) {
+            final int firstPos = mFirstPosition;
+            final int childCount = getChildCount();
+            final int lastPos = firstPos + childCount - 1;
+            final int paddedTop = mListPadding.top;
+            final int paddedBottom = getHeight() - mListPadding.bottom;
+
+            if (targetPos < firstPos || targetPos > lastPos) {
+                Log.w(TAG, "scrollToVisible called with targetPos " + targetPos +
+                        " not visible [" + firstPos + ", " + lastPos + "]");
+            }
+            if (boundPos < firstPos || boundPos > lastPos) {
+                // boundPos doesn't matter, it's already offscreen.
+                boundPos = INVALID_POSITION;
+            }
+
+            final View targetChild = getChildAt(targetPos - firstPos);
+            final int targetTop = targetChild.getTop();
+            final int targetBottom = targetChild.getBottom();
+            int scrollBy = 0;
+
+            if (targetBottom > paddedBottom) {
+                scrollBy = targetBottom - paddedBottom;
+            }
+            if (targetTop < paddedTop) {
+                scrollBy = targetTop - paddedTop;
+            }
+
+            if (scrollBy == 0) {
+                return;
+            }
+
+            if (boundPos >= 0) {
+                final View boundChild = getChildAt(boundPos - firstPos);
+                final int boundTop = boundChild.getTop();
+                final int boundBottom = boundChild.getBottom();
+                final int absScroll = Math.abs(scrollBy);
+
+                if (scrollBy < 0 && boundBottom + absScroll > paddedBottom) {
+                    // Don't scroll the bound view off the bottom of the screen.
+                    scrollBy = Math.max(0, boundBottom - paddedBottom);
+                } else if (scrollBy > 0 && boundTop - absScroll < paddedTop) {
+                    // Don't scroll the bound view off the top of the screen.
+                    scrollBy = Math.min(0, boundTop - paddedTop);
                 }
             }
-            return scrapViews.remove(size - 1);
-        } else {
-            return null;
+
+            smoothScrollBy(scrollBy, duration);
+        }
+
+        @Override
+        public void stop() {
+            removeCallbacks(this);
+        }
+
+        @Override
+        public void run() {
+            final int listHeight = getHeight();
+            final int firstPos = mFirstPosition;
+
+            switch (mMode) {
+            case MOVE_DOWN_POS: {
+                final int lastViewIndex = getChildCount() - 1;
+                final int lastPos = firstPos + lastViewIndex;
+
+                if (lastViewIndex < 0) {
+                    return;
+                }
+
+                if (lastPos == mLastSeenPos) {
+                    // No new views, let things keep going.
+                    postOnAnimation(this);
+                    return;
+                }
+
+                final View lastView = getChildAt(lastViewIndex);
+                final int lastViewHeight = lastView.getHeight();
+                final int lastViewTop = lastView.getTop();
+                final int lastViewPixelsShowing = listHeight - lastViewTop;
+                final int extraScroll = lastPos < mItemCount - 1 ?
+                        Math.max(mListPadding.bottom, mExtraScroll) : mListPadding.bottom;
+
+                final int scrollBy = lastViewHeight - lastViewPixelsShowing + extraScroll;
+                smoothScrollBy(scrollBy, mScrollDuration, true);
+
+                mLastSeenPos = lastPos;
+                if (lastPos < mTargetPos) {
+                    postOnAnimation(this);
+                }
+                break;
+            }
+
+            case MOVE_DOWN_BOUND: {
+                final int nextViewIndex = 1;
+                final int childCount = getChildCount();
+
+                if (firstPos == mBoundPos || childCount <= nextViewIndex
+                        || firstPos + childCount >= mItemCount) {
+                    return;
+                }
+                final int nextPos = firstPos + nextViewIndex;
+
+                if (nextPos == mLastSeenPos) {
+                    // No new views, let things keep going.
+                    postOnAnimation(this);
+                    return;
+                }
+
+                final View nextView = getChildAt(nextViewIndex);
+                final int nextViewHeight = nextView.getHeight();
+                final int nextViewTop = nextView.getTop();
+                final int extraScroll = Math.max(mListPadding.bottom, mExtraScroll);
+                if (nextPos < mBoundPos) {
+                    smoothScrollBy(Math.max(0, nextViewHeight + nextViewTop - extraScroll),
+                            mScrollDuration, true);
+
+                    mLastSeenPos = nextPos;
+
+                    postOnAnimation(this);
+                } else  {
+                    if (nextViewTop > extraScroll) {
+                        smoothScrollBy(nextViewTop - extraScroll, mScrollDuration, true);
+                    }
+                }
+                break;
+            }
+
+            case MOVE_UP_POS: {
+                if (firstPos == mLastSeenPos) {
+                    // No new views, let things keep going.
+                    postOnAnimation(this);
+                    return;
+                }
+
+                final View firstView = getChildAt(0);
+                if (firstView == null) {
+                    return;
+                }
+                final int firstViewTop = firstView.getTop();
+                final int extraScroll = firstPos > 0 ?
+                        Math.max(mExtraScroll, mListPadding.top) : mListPadding.top;
+
+                smoothScrollBy(firstViewTop - extraScroll, mScrollDuration, true);
+
+                mLastSeenPos = firstPos;
+
+                if (firstPos > mTargetPos) {
+                    postOnAnimation(this);
+                }
+                break;
+            }
+
+            case MOVE_UP_BOUND: {
+                final int lastViewIndex = getChildCount() - 2;
+                if (lastViewIndex < 0) {
+                    return;
+                }
+                final int lastPos = firstPos + lastViewIndex;
+
+                if (lastPos == mLastSeenPos) {
+                    // No new views, let things keep going.
+                    postOnAnimation(this);
+                    return;
+                }
+
+                final View lastView = getChildAt(lastViewIndex);
+                final int lastViewHeight = lastView.getHeight();
+                final int lastViewTop = lastView.getTop();
+                final int lastViewPixelsShowing = listHeight - lastViewTop;
+                final int extraScroll = Math.max(mListPadding.top, mExtraScroll);
+                mLastSeenPos = lastPos;
+                if (lastPos > mBoundPos) {
+                    smoothScrollBy(-(lastViewPixelsShowing - extraScroll), mScrollDuration, true);
+                    postOnAnimation(this);
+                } else {
+                    final int bottom = listHeight - extraScroll;
+                    final int lastViewBottom = lastViewTop + lastViewHeight;
+                    if (bottom > lastViewBottom) {
+                        smoothScrollBy(-(bottom - lastViewBottom), mScrollDuration, true);
+                    }
+                }
+                break;
+            }
+
+            case MOVE_OFFSET: {
+                if (mLastSeenPos == firstPos) {
+                    // No new views, let things keep going.
+                    postOnAnimation(this);
+                    return;
+                }
+
+                mLastSeenPos = firstPos;
+
+                final int childCount = getChildCount();
+                final int position = mTargetPos;
+                final int lastPos = firstPos + childCount - 1;
+
+                int viewTravelCount = 0;
+                if (position < firstPos) {
+                    viewTravelCount = firstPos - position + 1;
+                } else if (position > lastPos) {
+                    viewTravelCount = position - lastPos;
+                }
+
+                // Estimate how many screens we should travel
+                final float screenTravelCount = (float) viewTravelCount / childCount;
+
+                final float modifier = Math.min(Math.abs(screenTravelCount), 1.f);
+                if (position < firstPos) {
+                    final int distance = (int) (-getHeight() * modifier);
+                    final int duration = (int) (mScrollDuration * modifier);
+                    smoothScrollBy(distance, duration, true);
+                    postOnAnimation(this);
+                } else if (position > lastPos) {
+                    final int distance = (int) (getHeight() * modifier);
+                    final int duration = (int) (mScrollDuration * modifier);
+                    smoothScrollBy(distance, duration, true);
+                    postOnAnimation(this);
+                } else {
+                    // On-screen, just scroll.
+                    final int targetTop = getChildAt(position - firstPos).getTop();
+                    final int distance = targetTop - mOffsetFromTop;
+                    final int duration = (int) (mScrollDuration *
+                            ((float) Math.abs(distance) / getHeight()));
+                    smoothScrollBy(distance, duration, true);
+                }
+                break;
+            }
+
+            default:
+                break;
+            }
+        }
+    }
+
+    /**
+     * Abstract position scroller that handles sub-position scrolling but has no
+     * understanding of layout.
+     */
+    abstract class AbsSubPositionScroller extends AbsPositionScroller {
+        private static final int DURATION_AUTO = -1;
+
+        private static final int DURATION_AUTO_MIN = 100;
+        private static final int DURATION_AUTO_MAX = 500;
+
+        private final SubScroller mSubScroller = new SubScroller();
+
+        /**
+         * The target offset in pixels between the top of the list and the top
+         * of the target position.
+         */
+        private int mOffset;
+
+        /**
+         * Scroll the minimum amount to get the target view entirely on-screen.
+         */
+        private void scrollToPosition(final int targetPosition, final boolean useOffset,
+                final int offset, final int boundPosition, final int duration) {
+            stop();
+
+            if (mDataChanged) {
+                // Wait until we're back in a stable state to try this.
+                mPositionScrollAfterLayout = new Runnable() {
+                    @Override
+                    public void run() {
+                        scrollToPosition(
+                                targetPosition, useOffset, offset, boundPosition, duration);
+                    }
+                };
+                return;
+            }
+
+            if (mAdapter == null) {
+                // Can't scroll anywhere without an adapter.
+                return;
+            }
+
+            final int itemCount = getCount();
+            final int clampedPosition = MathUtils.constrain(targetPosition, 0, itemCount - 1);
+            final int clampedBoundPosition = MathUtils.constrain(boundPosition, -1, itemCount - 1);
+            final int firstPosition = getFirstVisiblePosition();
+            final int lastPosition = firstPosition + getChildCount();
+            final int targetRow = getRowForPosition(clampedPosition);
+            final int firstRow = getRowForPosition(firstPosition);
+            final int lastRow = getRowForPosition(lastPosition);
+            if (useOffset || targetRow <= firstRow) {
+                // Offset so the target row is top-aligned.
+                mOffset = offset;
+            } else if (targetRow >= lastRow - 1) {
+                // Offset so the target row is bottom-aligned.
+                final int listHeight = getHeight() - getPaddingTop() - getPaddingBottom();
+                mOffset = getHeightForPosition(clampedPosition) - listHeight;
+            } else {
+                // Don't scroll, target is entirely on-screen.
+                return;
+            }
+
+            float endSubRow = targetRow;
+            if (clampedBoundPosition != INVALID_POSITION) {
+                final int boundRow = getRowForPosition(clampedBoundPosition);
+                if (boundRow >= firstRow && boundRow < lastRow && boundRow != targetRow) {
+                    endSubRow = computeBoundSubRow(targetRow, boundRow);
+                }
+            }
+
+            final View firstChild = getChildAt(0);
+            if (firstChild == null) {
+                return;
+            }
+
+            final int firstChildHeight = firstChild.getHeight();
+            final float startOffsetRatio;
+            if (firstChildHeight == 0) {
+                startOffsetRatio = 0;
+            } else {
+                startOffsetRatio = -firstChild.getTop() / (float) firstChildHeight;
+            }
+
+            final float startSubRow = MathUtils.constrain(
+                    firstRow + startOffsetRatio, 0, getCount());
+            if (startSubRow == endSubRow && mOffset == 0) {
+                // Don't scroll, target is already in position.
+                return;
+            }
+
+            final int durationMillis;
+            if (duration == DURATION_AUTO) {
+                final float subRowDelta = Math.abs(startSubRow - endSubRow);
+                durationMillis = (int) MathUtils.lerp(
+                        DURATION_AUTO_MIN, DURATION_AUTO_MAX, subRowDelta / getCount());
+            } else {
+                durationMillis = duration;
+            }
+
+            mSubScroller.startScroll(startSubRow, endSubRow, durationMillis);
+
+            postOnAnimation(mAnimationFrame);
+        }
+
+        /**
+         * Given a target row and offset, computes the sub-row position that
+         * aligns with the top of the list. If the offset is negative, the
+         * resulting sub-row will be smaller than the target row.
+         */
+        private float resolveOffset(int targetRow, int offset) {
+            // Compute the target sub-row position by finding the actual row
+            // indicated by the target and offset.
+            int remainingOffset = offset;
+            int targetHeight = getHeightForRow(targetRow);
+            if (offset < 0) {
+                // Subtract row heights until we find the right row.
+                while (targetRow > 0 && remainingOffset < 0) {
+                    remainingOffset += targetHeight;
+                    targetRow--;
+                    targetHeight = getHeightForRow(targetRow);
+                }
+            } else if (offset > 0) {
+                // Add row heights until we find the right row.
+                while (targetRow < getCount() - 1 && remainingOffset > targetHeight) {
+                    remainingOffset -= targetHeight;
+                    targetRow++;
+                    targetHeight = getHeightForRow(targetRow);
+                }
+            }
+
+            final float targetOffsetRatio;
+            if (remainingOffset < 0 || targetHeight == 0) {
+                targetOffsetRatio = 0;
+            } else {
+                targetOffsetRatio = remainingOffset / (float) targetHeight;
+            }
+
+            return targetRow + targetOffsetRatio;
+        }
+
+        private float computeBoundSubRow(int targetRow, int boundRow) {
+            final float targetSubRow = resolveOffset(targetRow, mOffset);
+            mOffset = 0;
+
+            // The target row is below the bound row, so the end position would
+            // push the bound position above the list. Abort!
+            if (targetSubRow >= boundRow) {
+                return boundRow;
+            }
+
+            // Compute the closest possible sub-position that wouldn't push the
+            // bound position's view further below the list.
+            final int listHeight = getHeight() - getPaddingTop() - getPaddingBottom();
+            final int boundHeight = getHeightForRow(boundRow);
+            final float boundSubRow = resolveOffset(boundRow, -listHeight + boundHeight);
+
+            return Math.max(boundSubRow, targetSubRow);
+        }
+
+        @Override
+        public void start(int position) {
+            scrollToPosition(position, false, 0, INVALID_POSITION, DURATION_AUTO);
+        }
+
+        @Override
+        public void start(int position, int boundPosition) {
+            scrollToPosition(position, false, 0, boundPosition, DURATION_AUTO);
+        }
+
+        @Override
+        public void startWithOffset(int position, int offset) {
+            scrollToPosition(position, true, offset, INVALID_POSITION, DURATION_AUTO);
+        }
+
+        @Override
+        public void startWithOffset(int position, int offset, int duration) {
+            scrollToPosition(position, true, offset, INVALID_POSITION, duration);
+        }
+
+        @Override
+        public void stop() {
+            removeCallbacks(mAnimationFrame);
+        }
+
+        /**
+         * Returns the height of a row, which is computed as the maximum height of
+         * the items in the row.
+         *
+         * @param row the row index
+         * @return row height in pixels
+         */
+        public abstract int getHeightForRow(int row);
+
+        /**
+         * Returns the row for the specified item position.
+         *
+         * @param position the item position
+         * @return the row index
+         */
+        public abstract int getRowForPosition(int position);
+
+        /**
+         * Returns the first item position within the specified row.
+         *
+         * @param row the row
+         * @return the position of the first item in the row
+         */
+        public abstract int getFirstPositionForRow(int row);
+
+        private void onAnimationFrame() {
+            final boolean shouldPost = mSubScroller.computePosition();
+            final float subRow = mSubScroller.getPosition();
+
+            final int row = (int) subRow;
+            final int position = getFirstPositionForRow(row);
+            if (position >= getCount()) {
+                // Invalid position, abort scrolling.
+                return;
+            }
+
+            final int rowHeight = getHeightForRow(row);
+            final int offset = (int) (rowHeight * (subRow - row));
+            final int addOffset = (int) (mOffset * mSubScroller.getInterpolatedValue());
+            setSelectionFromTop(position, -offset - addOffset);
+
+            if (shouldPost) {
+                postOnAnimation(mAnimationFrame);
+            }
+        }
+
+        private Runnable mAnimationFrame = new Runnable() {
+            @Override
+            public void run() {
+                onAnimationFrame();
+            }
+        };
+    }
+
+    /**
+     * Scroller capable of returning floating point positions.
+     */
+    static class SubScroller {
+        private static final Interpolator INTERPOLATOR = new AccelerateDecelerateInterpolator();
+
+        private float mStartPosition;
+        private float mEndPosition;
+        private long mStartTime;
+        private long mDuration;
+
+        private float mPosition;
+        private float mInterpolatedValue;
+
+        public void startScroll(float startPosition, float endPosition, int duration) {
+            mStartPosition = startPosition;
+            mEndPosition = endPosition;
+            mDuration = duration;
+
+            mStartTime = AnimationUtils.currentAnimationTimeMillis();
+            mPosition = startPosition;
+            mInterpolatedValue = 0;
+        }
+
+        public boolean computePosition() {
+            final long elapsed = AnimationUtils.currentAnimationTimeMillis() - mStartTime;
+            final float value;
+            if (mDuration <= 0) {
+                value = 1;
+            } else {
+                value = MathUtils.constrain(elapsed / (float) mDuration, 0, 1);
+            }
+
+            mInterpolatedValue = INTERPOLATOR.getInterpolation(value);
+            mPosition = (mEndPosition - mStartPosition) * mInterpolatedValue + mStartPosition;
+
+            return elapsed < mDuration;
+        }
+
+        public float getPosition() {
+            return mPosition;
+        }
+
+        public float getInterpolatedValue() {
+            return mInterpolatedValue;
         }
     }
 }
diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java
index fe2fc96..225cd6d 100644
--- a/core/java/android/widget/AbsSeekBar.java
+++ b/core/java/android/widget/AbsSeekBar.java
@@ -29,6 +29,8 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 
+import com.android.internal.R;
+
 public abstract class AbsSeekBar extends ProgressBar {
     private Drawable mThumb;
     private int mThumbOffset;
@@ -65,11 +67,15 @@
         super(context, attrs);
     }
 
-    public AbsSeekBar(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public AbsSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.SeekBar, defStyle, 0);
+    public AbsSeekBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.SeekBar, defStyleAttr, defStyleRes);
         Drawable thumb = a.getDrawable(com.android.internal.R.styleable.SeekBar_thumb);
         setThumb(thumb); // will guess mThumbOffset if thumb != null...
         // ...but allow layout to override this
@@ -285,28 +291,39 @@
      */
     private void setThumbPos(int w, Drawable thumb, float scale, int gap) {
         int available = w - mPaddingLeft - mPaddingRight;
-        int thumbWidth = thumb.getIntrinsicWidth();
-        int thumbHeight = thumb.getIntrinsicHeight();
+        final int thumbWidth = thumb.getIntrinsicWidth();
+        final int thumbHeight = thumb.getIntrinsicHeight();
         available -= thumbWidth;
 
         // The extra space for the thumb to move on the track
         available += mThumbOffset * 2;
 
-        int thumbPos = (int) (scale * available + 0.5f);
+        final int thumbPos = (int) (scale * available + 0.5f);
 
-        int topBound, bottomBound;
+        final int top, bottom;
         if (gap == Integer.MIN_VALUE) {
-            Rect oldBounds = thumb.getBounds();
-            topBound = oldBounds.top;
-            bottomBound = oldBounds.bottom;
+            final Rect oldBounds = thumb.getBounds();
+            top = oldBounds.top;
+            bottom = oldBounds.bottom;
         } else {
-            topBound = gap;
-            bottomBound = gap + thumbHeight;
+            top = gap;
+            bottom = gap + thumbHeight;
         }
-        
-        // Canvas will be translated, so 0,0 is where we start drawing
+
         final int left = (isLayoutRtl() && mMirrorForRtl) ? available - thumbPos : thumbPos;
-        thumb.setBounds(left, topBound, left + thumbWidth, bottomBound);
+        final int right = left + thumbWidth;
+
+        final Drawable background = getBackground();
+        if (background != null && background.supportsHotspots()) {
+            final Rect bounds = mThumb.getBounds();
+            final int offsetX = mPaddingLeft - mThumbOffset;
+            final int offsetY = mPaddingTop;
+            background.setHotspotBounds(left + offsetX, bounds.top + offsetY,
+                    right + offsetX, bounds.bottom + offsetY);
+        }
+
+        // Canvas will be translated, so 0,0 is where we start drawing
+        thumb.setBounds(left, top, right, bottom);
     }
 
     /**
@@ -324,6 +341,7 @@
     @Override
     protected synchronized void onDraw(Canvas canvas) {
         super.onDraw(canvas);
+
         if (mThumb != null) {
             canvas.save();
             // Translate the padding. For the x, we need to allow the thumb to
@@ -420,10 +438,24 @@
         return true;
     }
 
+    private void setHotspot(int id, float x, float y) {
+        final Drawable bg = getBackground();
+        if (bg != null && bg.supportsHotspots()) {
+            bg.setHotspot(id, x, y);
+        }
+    }
+
+    private void clearHotspot(int id) {
+        final Drawable bg = getBackground();
+        if (bg != null && bg.supportsHotspots()) {
+            bg.removeHotspot(id);
+        }
+    }
+
     private void trackTouchEvent(MotionEvent event) {
         final int width = getWidth();
         final int available = width - mPaddingLeft - mPaddingRight;
-        int x = (int)event.getX();
+        final int x = (int) event.getX();
         float scale;
         float progress = 0;
         if (isLayoutRtl() && mMirrorForRtl) {
@@ -447,7 +479,8 @@
         }
         final int max = getMax();
         progress += scale * max;
-        
+
+        setHotspot(R.attr.state_pressed, x, (int) event.getY());
         setProgress((int) progress, true);
     }
 
@@ -473,6 +506,7 @@
      * canceled.
      */
     void onStopTrackingTouch() {
+        clearHotspot(R.attr.state_pressed);
         mIsDragging = false;
     }
 
diff --git a/core/java/android/widget/AbsSpinner.java b/core/java/android/widget/AbsSpinner.java
index f26527f..6a4ad75 100644
--- a/core/java/android/widget/AbsSpinner.java
+++ b/core/java/android/widget/AbsSpinner.java
@@ -64,12 +64,16 @@
         this(context, attrs, 0);
     }
 
-    public AbsSpinner(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public AbsSpinner(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AbsSpinner(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         initAbsSpinner();
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.AbsSpinner, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.AbsSpinner, defStyleAttr, defStyleRes);
 
         CharSequence[] entries = a.getTextArray(R.styleable.AbsSpinner_entries);
         if (entries != null) {
diff --git a/core/java/android/widget/AbsoluteLayout.java b/core/java/android/widget/AbsoluteLayout.java
index 7df6aab..4ce0d5d 100644
--- a/core/java/android/widget/AbsoluteLayout.java
+++ b/core/java/android/widget/AbsoluteLayout.java
@@ -40,16 +40,19 @@
 @RemoteView
 public class AbsoluteLayout extends ViewGroup {
     public AbsoluteLayout(Context context) {
-        super(context);
+        this(context, null);
     }
 
     public AbsoluteLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
+        this(context, attrs, 0);
     }
 
-    public AbsoluteLayout(Context context, AttributeSet attrs,
-            int defStyle) {
-        super(context, attrs, defStyle);
+    public AbsoluteLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AbsoluteLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     @Override
diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java
new file mode 100644
index 0000000..e4575e5
--- /dev/null
+++ b/core/java/android/widget/ActionMenuPresenter.java
@@ -0,0 +1,746 @@
+/*
+ * Copyright (C) 2011 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 android.widget;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.SparseBooleanArray;
+import android.view.ActionProvider;
+import android.view.Gravity;
+import android.view.MenuItem;
+import android.view.SoundEffectConstants;
+import android.view.View;
+import android.view.View.MeasureSpec;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.ListPopupWindow.ForwardingListener;
+import com.android.internal.transition.ActionBarTransition;
+import com.android.internal.view.ActionBarPolicy;
+import com.android.internal.view.menu.ActionMenuItemView;
+import com.android.internal.view.menu.BaseMenuPresenter;
+import com.android.internal.view.menu.MenuBuilder;
+import com.android.internal.view.menu.MenuItemImpl;
+import com.android.internal.view.menu.MenuPopupHelper;
+import com.android.internal.view.menu.MenuView;
+import com.android.internal.view.menu.SubMenuBuilder;
+
+import java.util.ArrayList;
+
+/**
+ * MenuPresenter for building action menus as seen in the action bar and action modes.
+ *
+ * @hide
+ */
+public class ActionMenuPresenter extends BaseMenuPresenter
+        implements ActionProvider.SubUiVisibilityListener {
+    private static final String TAG = "ActionMenuPresenter";
+
+    private View mOverflowButton;
+    private boolean mReserveOverflow;
+    private boolean mReserveOverflowSet;
+    private int mWidthLimit;
+    private int mActionItemWidthLimit;
+    private int mMaxItems;
+    private boolean mMaxItemsSet;
+    private boolean mStrictWidthLimit;
+    private boolean mWidthLimitSet;
+    private boolean mExpandedActionViewsExclusive;
+
+    private int mMinCellSize;
+
+    // Group IDs that have been added as actions - used temporarily, allocated here for reuse.
+    private final SparseBooleanArray mActionButtonGroups = new SparseBooleanArray();
+
+    private View mScrapActionButtonView;
+
+    private OverflowPopup mOverflowPopup;
+    private ActionButtonSubmenu mActionButtonPopup;
+
+    private OpenOverflowRunnable mPostedOpenRunnable;
+    private ActionMenuPopupCallback mPopupCallback;
+
+    final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
+    int mOpenSubMenuId;
+
+    public ActionMenuPresenter(Context context) {
+        super(context, com.android.internal.R.layout.action_menu_layout,
+                com.android.internal.R.layout.action_menu_item_layout);
+    }
+
+    @Override
+    public void initForMenu(Context context, MenuBuilder menu) {
+        super.initForMenu(context, menu);
+
+        final Resources res = context.getResources();
+
+        final ActionBarPolicy abp = ActionBarPolicy.get(context);
+        if (!mReserveOverflowSet) {
+            mReserveOverflow = abp.showsOverflowMenuButton();
+        }
+
+        if (!mWidthLimitSet) {
+            mWidthLimit = abp.getEmbeddedMenuWidthLimit();
+        }
+
+        // Measure for initial configuration
+        if (!mMaxItemsSet) {
+            mMaxItems = abp.getMaxActionButtons();
+        }
+
+        int width = mWidthLimit;
+        if (mReserveOverflow) {
+            if (mOverflowButton == null) {
+                mOverflowButton = new OverflowMenuButton(mSystemContext);
+                final int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+                mOverflowButton.measure(spec, spec);
+            }
+            width -= mOverflowButton.getMeasuredWidth();
+        } else {
+            mOverflowButton = null;
+        }
+
+        mActionItemWidthLimit = width;
+
+        mMinCellSize = (int) (ActionMenuView.MIN_CELL_SIZE * res.getDisplayMetrics().density);
+
+        // Drop a scrap view as it may no longer reflect the proper context/config.
+        mScrapActionButtonView = null;
+    }
+
+    public void onConfigurationChanged(Configuration newConfig) {
+        if (!mMaxItemsSet) {
+            mMaxItems = mContext.getResources().getInteger(
+                    com.android.internal.R.integer.max_action_buttons);
+        }
+        if (mMenu != null) {
+            mMenu.onItemsChanged(true);
+        }
+    }
+
+    public void setWidthLimit(int width, boolean strict) {
+        mWidthLimit = width;
+        mStrictWidthLimit = strict;
+        mWidthLimitSet = true;
+    }
+
+    public void setReserveOverflow(boolean reserveOverflow) {
+        mReserveOverflow = reserveOverflow;
+        mReserveOverflowSet = true;
+    }
+
+    public void setItemLimit(int itemCount) {
+        mMaxItems = itemCount;
+        mMaxItemsSet = true;
+    }
+
+    public void setExpandedActionViewsExclusive(boolean isExclusive) {
+        mExpandedActionViewsExclusive = isExclusive;
+    }
+
+    @Override
+    public MenuView getMenuView(ViewGroup root) {
+        MenuView result = super.getMenuView(root);
+        ((ActionMenuView) result).setPresenter(this);
+        return result;
+    }
+
+    @Override
+    public View getItemView(final MenuItemImpl item, View convertView, ViewGroup parent) {
+        View actionView = item.getActionView();
+        if (actionView == null || item.hasCollapsibleActionView()) {
+            actionView = super.getItemView(item, convertView, parent);
+        }
+        actionView.setVisibility(item.isActionViewExpanded() ? View.GONE : View.VISIBLE);
+
+        final ActionMenuView menuParent = (ActionMenuView) parent;
+        final ViewGroup.LayoutParams lp = actionView.getLayoutParams();
+        if (!menuParent.checkLayoutParams(lp)) {
+            actionView.setLayoutParams(menuParent.generateLayoutParams(lp));
+        }
+        return actionView;
+    }
+
+    @Override
+    public void bindItemView(MenuItemImpl item, MenuView.ItemView itemView) {
+        itemView.initialize(item, 0);
+
+        final ActionMenuView menuView = (ActionMenuView) mMenuView;
+        final ActionMenuItemView actionItemView = (ActionMenuItemView) itemView;
+        actionItemView.setItemInvoker(menuView);
+
+        if (mPopupCallback == null) {
+            mPopupCallback = new ActionMenuPopupCallback();
+        }
+        actionItemView.setPopupCallback(mPopupCallback);
+    }
+
+    @Override
+    public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) {
+        return item.isActionButton();
+    }
+
+    @Override
+    public void updateMenuView(boolean cleared) {
+        final ViewGroup menuViewParent = (ViewGroup) ((View) mMenuView).getParent();
+        if (menuViewParent != null) {
+            ActionBarTransition.beginDelayedTransition(menuViewParent);
+        }
+        super.updateMenuView(cleared);
+
+        ((View) mMenuView).requestLayout();
+
+        if (mMenu != null) {
+            final ArrayList<MenuItemImpl> actionItems = mMenu.getActionItems();
+            final int count = actionItems.size();
+            for (int i = 0; i < count; i++) {
+                final ActionProvider provider = actionItems.get(i).getActionProvider();
+                if (provider != null) {
+                    provider.setSubUiVisibilityListener(this);
+                }
+            }
+        }
+
+        final ArrayList<MenuItemImpl> nonActionItems = mMenu != null ?
+                mMenu.getNonActionItems() : null;
+
+        boolean hasOverflow = false;
+        if (mReserveOverflow && nonActionItems != null) {
+            final int count = nonActionItems.size();
+            if (count == 1) {
+                hasOverflow = !nonActionItems.get(0).isActionViewExpanded();
+            } else {
+                hasOverflow = count > 0;
+            }
+        }
+
+        if (hasOverflow) {
+            if (mOverflowButton == null) {
+                mOverflowButton = new OverflowMenuButton(mSystemContext);
+            }
+            ViewGroup parent = (ViewGroup) mOverflowButton.getParent();
+            if (parent != mMenuView) {
+                if (parent != null) {
+                    parent.removeView(mOverflowButton);
+                }
+                ActionMenuView menuView = (ActionMenuView) mMenuView;
+                menuView.addView(mOverflowButton, menuView.generateOverflowButtonLayoutParams());
+            }
+        } else if (mOverflowButton != null && mOverflowButton.getParent() == mMenuView) {
+            ((ViewGroup) mMenuView).removeView(mOverflowButton);
+        }
+
+        ((ActionMenuView) mMenuView).setOverflowReserved(mReserveOverflow);
+    }
+
+    @Override
+    public boolean filterLeftoverView(ViewGroup parent, int childIndex) {
+        if (parent.getChildAt(childIndex) == mOverflowButton) return false;
+        return super.filterLeftoverView(parent, childIndex);
+    }
+
+    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
+        if (!subMenu.hasVisibleItems()) return false;
+
+        SubMenuBuilder topSubMenu = subMenu;
+        while (topSubMenu.getParentMenu() != mMenu) {
+            topSubMenu = (SubMenuBuilder) topSubMenu.getParentMenu();
+        }
+        View anchor = findViewForItem(topSubMenu.getItem());
+        if (anchor == null) {
+            if (mOverflowButton == null) return false;
+            anchor = mOverflowButton;
+        }
+
+        mOpenSubMenuId = subMenu.getItem().getItemId();
+        mActionButtonPopup = new ActionButtonSubmenu(mContext, subMenu);
+        mActionButtonPopup.setAnchorView(anchor);
+        mActionButtonPopup.show();
+        super.onSubMenuSelected(subMenu);
+        return true;
+    }
+
+    private View findViewForItem(MenuItem item) {
+        final ViewGroup parent = (ViewGroup) mMenuView;
+        if (parent == null) return null;
+
+        final int count = parent.getChildCount();
+        for (int i = 0; i < count; i++) {
+            final View child = parent.getChildAt(i);
+            if (child instanceof MenuView.ItemView &&
+                    ((MenuView.ItemView) child).getItemData() == item) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Display the overflow menu if one is present.
+     * @return true if the overflow menu was shown, false otherwise.
+     */
+    public boolean showOverflowMenu() {
+        if (mReserveOverflow && !isOverflowMenuShowing() && mMenu != null && mMenuView != null &&
+                mPostedOpenRunnable == null && !mMenu.getNonActionItems().isEmpty()) {
+            OverflowPopup popup = new OverflowPopup(mContext, mMenu, mOverflowButton, true);
+            mPostedOpenRunnable = new OpenOverflowRunnable(popup);
+            // Post this for later; we might still need a layout for the anchor to be right.
+            ((View) mMenuView).post(mPostedOpenRunnable);
+
+            // ActionMenuPresenter uses null as a callback argument here
+            // to indicate overflow is opening.
+            super.onSubMenuSelected(null);
+
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Hide the overflow menu if it is currently showing.
+     *
+     * @return true if the overflow menu was hidden, false otherwise.
+     */
+    public boolean hideOverflowMenu() {
+        if (mPostedOpenRunnable != null && mMenuView != null) {
+            ((View) mMenuView).removeCallbacks(mPostedOpenRunnable);
+            mPostedOpenRunnable = null;
+            return true;
+        }
+
+        MenuPopupHelper popup = mOverflowPopup;
+        if (popup != null) {
+            popup.dismiss();
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Dismiss all popup menus - overflow and submenus.
+     * @return true if popups were dismissed, false otherwise. (This can be because none were open.)
+     */
+    public boolean dismissPopupMenus() {
+        boolean result = hideOverflowMenu();
+        result |= hideSubMenus();
+        return result;
+    }
+
+    /**
+     * Dismiss all submenu popups.
+     *
+     * @return true if popups were dismissed, false otherwise. (This can be because none were open.)
+     */
+    public boolean hideSubMenus() {
+        if (mActionButtonPopup != null) {
+            mActionButtonPopup.dismiss();
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @return true if the overflow menu is currently showing
+     */
+    public boolean isOverflowMenuShowing() {
+        return mOverflowPopup != null && mOverflowPopup.isShowing();
+    }
+
+    public boolean isOverflowMenuShowPending() {
+        return mPostedOpenRunnable != null || isOverflowMenuShowing();
+    }
+
+    /**
+     * @return true if space has been reserved in the action menu for an overflow item.
+     */
+    public boolean isOverflowReserved() {
+        return mReserveOverflow;
+    }
+
+    public boolean flagActionItems() {
+        final ArrayList<MenuItemImpl> visibleItems = mMenu.getVisibleItems();
+        final int itemsSize = visibleItems.size();
+        int maxActions = mMaxItems;
+        int widthLimit = mActionItemWidthLimit;
+        final int querySpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
+        final ViewGroup parent = (ViewGroup) mMenuView;
+
+        int requiredItems = 0;
+        int requestedItems = 0;
+        int firstActionWidth = 0;
+        boolean hasOverflow = false;
+        for (int i = 0; i < itemsSize; i++) {
+            MenuItemImpl item = visibleItems.get(i);
+            if (item.requiresActionButton()) {
+                requiredItems++;
+            } else if (item.requestsActionButton()) {
+                requestedItems++;
+            } else {
+                hasOverflow = true;
+            }
+            if (mExpandedActionViewsExclusive && item.isActionViewExpanded()) {
+                // Overflow everything if we have an expanded action view and we're
+                // space constrained.
+                maxActions = 0;
+            }
+        }
+
+        // Reserve a spot for the overflow item if needed.
+        if (mReserveOverflow &&
+                (hasOverflow || requiredItems + requestedItems > maxActions)) {
+            maxActions--;
+        }
+        maxActions -= requiredItems;
+
+        final SparseBooleanArray seenGroups = mActionButtonGroups;
+        seenGroups.clear();
+
+        int cellSize = 0;
+        int cellsRemaining = 0;
+        if (mStrictWidthLimit) {
+            cellsRemaining = widthLimit / mMinCellSize;
+            final int cellSizeRemaining = widthLimit % mMinCellSize;
+            cellSize = mMinCellSize + cellSizeRemaining / cellsRemaining;
+        }
+
+        // Flag as many more requested items as will fit.
+        for (int i = 0; i < itemsSize; i++) {
+            MenuItemImpl item = visibleItems.get(i);
+
+            if (item.requiresActionButton()) {
+                View v = getItemView(item, mScrapActionButtonView, parent);
+                if (mScrapActionButtonView == null) {
+                    mScrapActionButtonView = v;
+                }
+                if (mStrictWidthLimit) {
+                    cellsRemaining -= ActionMenuView.measureChildForCells(v,
+                            cellSize, cellsRemaining, querySpec, 0);
+                } else {
+                    v.measure(querySpec, querySpec);
+                }
+                final int measuredWidth = v.getMeasuredWidth();
+                widthLimit -= measuredWidth;
+                if (firstActionWidth == 0) {
+                    firstActionWidth = measuredWidth;
+                }
+                final int groupId = item.getGroupId();
+                if (groupId != 0) {
+                    seenGroups.put(groupId, true);
+                }
+                item.setIsActionButton(true);
+            } else if (item.requestsActionButton()) {
+                // Items in a group with other items that already have an action slot
+                // can break the max actions rule, but not the width limit.
+                final int groupId = item.getGroupId();
+                final boolean inGroup = seenGroups.get(groupId);
+                boolean isAction = (maxActions > 0 || inGroup) && widthLimit > 0 &&
+                        (!mStrictWidthLimit || cellsRemaining > 0);
+
+                if (isAction) {
+                    View v = getItemView(item, mScrapActionButtonView, parent);
+                    if (mScrapActionButtonView == null) {
+                        mScrapActionButtonView = v;
+                    }
+                    if (mStrictWidthLimit) {
+                        final int cells = ActionMenuView.measureChildForCells(v,
+                                cellSize, cellsRemaining, querySpec, 0);
+                        cellsRemaining -= cells;
+                        if (cells == 0) {
+                            isAction = false;
+                        }
+                    } else {
+                        v.measure(querySpec, querySpec);
+                    }
+                    final int measuredWidth = v.getMeasuredWidth();
+                    widthLimit -= measuredWidth;
+                    if (firstActionWidth == 0) {
+                        firstActionWidth = measuredWidth;
+                    }
+
+                    if (mStrictWidthLimit) {
+                        isAction &= widthLimit >= 0;
+                    } else {
+                        // Did this push the entire first item past the limit?
+                        isAction &= widthLimit + firstActionWidth > 0;
+                    }
+                }
+
+                if (isAction && groupId != 0) {
+                    seenGroups.put(groupId, true);
+                } else if (inGroup) {
+                    // We broke the width limit. Demote the whole group, they all overflow now.
+                    seenGroups.put(groupId, false);
+                    for (int j = 0; j < i; j++) {
+                        MenuItemImpl areYouMyGroupie = visibleItems.get(j);
+                        if (areYouMyGroupie.getGroupId() == groupId) {
+                            // Give back the action slot
+                            if (areYouMyGroupie.isActionButton()) maxActions++;
+                            areYouMyGroupie.setIsActionButton(false);
+                        }
+                    }
+                }
+
+                if (isAction) maxActions--;
+
+                item.setIsActionButton(isAction);
+            } else {
+                // Neither requires nor requests an action button.
+                item.setIsActionButton(false);
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
+        dismissPopupMenus();
+        super.onCloseMenu(menu, allMenusAreClosing);
+    }
+
+    @Override
+    public Parcelable onSaveInstanceState() {
+        SavedState state = new SavedState();
+        state.openSubMenuId = mOpenSubMenuId;
+        return state;
+    }
+
+    @Override
+    public void onRestoreInstanceState(Parcelable state) {
+        SavedState saved = (SavedState) state;
+        if (saved.openSubMenuId > 0) {
+            MenuItem item = mMenu.findItem(saved.openSubMenuId);
+            if (item != null) {
+                SubMenuBuilder subMenu = (SubMenuBuilder) item.getSubMenu();
+                onSubMenuSelected(subMenu);
+            }
+        }
+    }
+
+    @Override
+    public void onSubUiVisibilityChanged(boolean isVisible) {
+        if (isVisible) {
+            // Not a submenu, but treat it like one.
+            super.onSubMenuSelected(null);
+        } else {
+            mMenu.close(false);
+        }
+    }
+
+    public void setMenuView(ActionMenuView menuView) {
+        mMenuView = menuView;
+    }
+
+    private static class SavedState implements Parcelable {
+        public int openSubMenuId;
+
+        SavedState() {
+        }
+
+        SavedState(Parcel in) {
+            openSubMenuId = in.readInt();
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(openSubMenuId);
+        }
+
+        public static final Parcelable.Creator<SavedState> CREATOR
+                = new Parcelable.Creator<SavedState>() {
+            public SavedState createFromParcel(Parcel in) {
+                return new SavedState(in);
+            }
+
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+    }
+
+    private class OverflowMenuButton extends ImageButton implements ActionMenuView.ActionMenuChildView {
+        public OverflowMenuButton(Context context) {
+            super(context, null, com.android.internal.R.attr.actionOverflowButtonStyle);
+
+            setClickable(true);
+            setFocusable(true);
+            setVisibility(VISIBLE);
+            setEnabled(true);
+
+            setOnTouchListener(new ForwardingListener(this) {
+                @Override
+                public ListPopupWindow getPopup() {
+                    if (mOverflowPopup == null) {
+                        return null;
+                    }
+
+                    return mOverflowPopup.getPopup();
+                }
+
+                @Override
+                public boolean onForwardingStarted() {
+                    showOverflowMenu();
+                    return true;
+                }
+
+                @Override
+                public boolean onForwardingStopped() {
+                    // Displaying the popup occurs asynchronously, so wait for
+                    // the runnable to finish before deciding whether to stop
+                    // forwarding.
+                    if (mPostedOpenRunnable != null) {
+                        return false;
+                    }
+
+                    hideOverflowMenu();
+                    return true;
+                }
+            });
+        }
+
+        @Override
+        public boolean performClick() {
+            if (super.performClick()) {
+                return true;
+            }
+
+            playSoundEffect(SoundEffectConstants.CLICK);
+            showOverflowMenu();
+            return true;
+        }
+
+        @Override
+        public boolean needsDividerBefore() {
+            return false;
+        }
+
+        @Override
+        public boolean needsDividerAfter() {
+            return false;
+        }
+
+        @Override
+        public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+            super.onInitializeAccessibilityNodeInfo(info);
+            info.setCanOpenPopup(true);
+        }
+    }
+
+    private class OverflowPopup extends MenuPopupHelper {
+        public OverflowPopup(Context context, MenuBuilder menu, View anchorView,
+                boolean overflowOnly) {
+            super(context, menu, anchorView, overflowOnly);
+            setGravity(Gravity.END);
+            setCallback(mPopupPresenterCallback);
+        }
+
+        @Override
+        public void onDismiss() {
+            super.onDismiss();
+            mMenu.close();
+            mOverflowPopup = null;
+        }
+    }
+
+    private class ActionButtonSubmenu extends MenuPopupHelper {
+        private SubMenuBuilder mSubMenu;
+
+        public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) {
+            super(context, subMenu);
+            mSubMenu = subMenu;
+
+            MenuItemImpl item = (MenuItemImpl) subMenu.getItem();
+            if (!item.isActionButton()) {
+                // Give a reasonable anchor to nested submenus.
+                setAnchorView(mOverflowButton == null ? (View) mMenuView : mOverflowButton);
+            }
+
+            setCallback(mPopupPresenterCallback);
+
+            boolean preserveIconSpacing = false;
+            final int count = subMenu.size();
+            for (int i = 0; i < count; i++) {
+                MenuItem childItem = subMenu.getItem(i);
+                if (childItem.isVisible() && childItem.getIcon() != null) {
+                    preserveIconSpacing = true;
+                    break;
+                }
+            }
+            setForceShowIcon(preserveIconSpacing);
+        }
+
+        @Override
+        public void onDismiss() {
+            super.onDismiss();
+            mActionButtonPopup = null;
+            mOpenSubMenuId = 0;
+        }
+    }
+
+    private class PopupPresenterCallback implements Callback {
+
+        @Override
+        public boolean onOpenSubMenu(MenuBuilder subMenu) {
+            if (subMenu == null) return false;
+
+            mOpenSubMenuId = ((SubMenuBuilder) subMenu).getItem().getItemId();
+            final Callback cb = getCallback();
+            return cb != null ? cb.onOpenSubMenu(subMenu) : false;
+        }
+
+        @Override
+        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
+            if (menu instanceof SubMenuBuilder) {
+                ((SubMenuBuilder) menu).getRootMenu().close(false);
+            }
+            final Callback cb = getCallback();
+            if (cb != null) {
+                cb.onCloseMenu(menu, allMenusAreClosing);
+            }
+        }
+    }
+
+    private class OpenOverflowRunnable implements Runnable {
+        private OverflowPopup mPopup;
+
+        public OpenOverflowRunnable(OverflowPopup popup) {
+            mPopup = popup;
+        }
+
+        public void run() {
+            mMenu.changeMenuMode();
+            final View menuView = (View) mMenuView;
+            if (menuView != null && menuView.getWindowToken() != null && mPopup.tryShow()) {
+                mOverflowPopup = mPopup;
+            }
+            mPostedOpenRunnable = null;
+        }
+    }
+
+    private class ActionMenuPopupCallback extends ActionMenuItemView.PopupCallback {
+        @Override
+        public ListPopupWindow getPopup() {
+            return mActionButtonPopup != null ? mActionButtonPopup.getPopup() : null;
+        }
+    }
+}
diff --git a/core/java/android/widget/ActionMenuView.java b/core/java/android/widget/ActionMenuView.java
new file mode 100644
index 0000000..3975edf
--- /dev/null
+++ b/core/java/android/widget/ActionMenuView.java
@@ -0,0 +1,696 @@
+/*
+ * Copyright (C) 2010 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 android.widget;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewDebug;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import com.android.internal.view.menu.ActionMenuItemView;
+import com.android.internal.view.menu.MenuBuilder;
+import com.android.internal.view.menu.MenuItemImpl;
+import com.android.internal.view.menu.MenuPresenter;
+import com.android.internal.view.menu.MenuView;
+
+/**
+ * ActionMenuView is a presentation of a series of menu options as a View. It provides
+ * several top level options as action buttons while spilling remaining options over as
+ * items in an overflow menu. This allows applications to present packs of actions inline with
+ * specific or repeating content.
+ */
+public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvoker, MenuView {
+    private static final String TAG = "ActionMenuView";
+    
+    static final int MIN_CELL_SIZE = 56; // dips
+    static final int GENERATED_ITEM_PADDING = 4; // dips
+
+    private MenuBuilder mMenu;
+
+    private boolean mReserveOverflow;
+    private ActionMenuPresenter mPresenter;
+    private boolean mFormatItems;
+    private int mFormatItemsWidth;
+    private int mMinCellSize;
+    private int mGeneratedItemPadding;
+
+    private OnMenuItemClickListener mOnMenuItemClickListener;
+
+    public ActionMenuView(Context context) {
+        this(context, null);
+    }
+    
+    public ActionMenuView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setBaselineAligned(false);
+        final float density = context.getResources().getDisplayMetrics().density;
+        mMinCellSize = (int) (MIN_CELL_SIZE * density);
+        mGeneratedItemPadding = (int) (GENERATED_ITEM_PADDING * density);
+    }
+
+    /** @hide */
+    public void setPresenter(ActionMenuPresenter presenter) {
+        mPresenter = presenter;
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mPresenter.updateMenuView(false);
+
+        if (mPresenter != null && mPresenter.isOverflowMenuShowing()) {
+            mPresenter.hideOverflowMenu();
+            mPresenter.showOverflowMenu();
+        }
+    }
+
+    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
+        mOnMenuItemClickListener = listener;
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        // If we've been given an exact size to match, apply special formatting during layout.
+        final boolean wasFormatted = mFormatItems;
+        mFormatItems = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY;
+
+        if (wasFormatted != mFormatItems) {
+            mFormatItemsWidth = 0; // Reset this when switching modes
+        }
+
+        // Special formatting can change whether items can fit as action buttons.
+        // Kick the menu and update presenters when this changes.
+        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+        if (mFormatItems && mMenu != null && widthSize != mFormatItemsWidth) {
+            mFormatItemsWidth = widthSize;
+            mMenu.onItemsChanged(true);
+        }
+
+        final int childCount = getChildCount();
+        if (mFormatItems && childCount > 0) {
+            onMeasureExactFormat(widthMeasureSpec, heightMeasureSpec);
+        } else {
+            // Previous measurement at exact format may have set margins - reset them.
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                lp.leftMargin = lp.rightMargin = 0;
+            }
+            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        }
+    }
+
+    private void onMeasureExactFormat(int widthMeasureSpec, int heightMeasureSpec) {
+        // We already know the width mode is EXACTLY if we're here.
+        final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+
+        final int widthPadding = getPaddingLeft() + getPaddingRight();
+        final int heightPadding = getPaddingTop() + getPaddingBottom();
+
+        final int itemHeightSpec = getChildMeasureSpec(heightMeasureSpec, heightPadding,
+                ViewGroup.LayoutParams.WRAP_CONTENT);
+
+        widthSize -= widthPadding;
+
+        // Divide the view into cells.
+        final int cellCount = widthSize / mMinCellSize;
+        final int cellSizeRemaining = widthSize % mMinCellSize;
+
+        if (cellCount == 0) {
+            // Give up, nothing fits.
+            setMeasuredDimension(widthSize, 0);
+            return;
+        }
+
+        final int cellSize = mMinCellSize + cellSizeRemaining / cellCount;
+
+        int cellsRemaining = cellCount;
+        int maxChildHeight = 0;
+        int maxCellsUsed = 0;
+        int expandableItemCount = 0;
+        int visibleItemCount = 0;
+        boolean hasOverflow = false;
+
+        // This is used as a bitfield to locate the smallest items present. Assumes childCount < 64.
+        long smallestItemsAt = 0;
+
+        final int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            final View child = getChildAt(i);
+            if (child.getVisibility() == GONE) continue;
+
+            final boolean isGeneratedItem = child instanceof ActionMenuItemView;
+            visibleItemCount++;
+
+            if (isGeneratedItem) {
+                // Reset padding for generated menu item views; it may change below
+                // and views are recycled.
+                child.setPadding(mGeneratedItemPadding, 0, mGeneratedItemPadding, 0);
+            }
+
+            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+            lp.expanded = false;
+            lp.extraPixels = 0;
+            lp.cellsUsed = 0;
+            lp.expandable = false;
+            lp.leftMargin = 0;
+            lp.rightMargin = 0;
+            lp.preventEdgeOffset = isGeneratedItem && ((ActionMenuItemView) child).hasText();
+
+            // Overflow always gets 1 cell. No more, no less.
+            final int cellsAvailable = lp.isOverflowButton ? 1 : cellsRemaining;
+
+            final int cellsUsed = measureChildForCells(child, cellSize, cellsAvailable,
+                    itemHeightSpec, heightPadding);
+
+            maxCellsUsed = Math.max(maxCellsUsed, cellsUsed);
+            if (lp.expandable) expandableItemCount++;
+            if (lp.isOverflowButton) hasOverflow = true;
+
+            cellsRemaining -= cellsUsed;
+            maxChildHeight = Math.max(maxChildHeight, child.getMeasuredHeight());
+            if (cellsUsed == 1) smallestItemsAt |= (1 << i);
+        }
+
+        // When we have overflow and a single expanded (text) item, we want to try centering it
+        // visually in the available space even though overflow consumes some of it.
+        final boolean centerSingleExpandedItem = hasOverflow && visibleItemCount == 2;
+
+        // Divide space for remaining cells if we have items that can expand.
+        // Try distributing whole leftover cells to smaller items first.
+
+        boolean needsExpansion = false;
+        while (expandableItemCount > 0 && cellsRemaining > 0) {
+            int minCells = Integer.MAX_VALUE;
+            long minCellsAt = 0; // Bit locations are indices of relevant child views
+            int minCellsItemCount = 0;
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+                // Don't try to expand items that shouldn't.
+                if (!lp.expandable) continue;
+
+                // Mark indices of children that can receive an extra cell.
+                if (lp.cellsUsed < minCells) {
+                    minCells = lp.cellsUsed;
+                    minCellsAt = 1 << i;
+                    minCellsItemCount = 1;
+                } else if (lp.cellsUsed == minCells) {
+                    minCellsAt |= 1 << i;
+                    minCellsItemCount++;
+                }
+            }
+
+            // Items that get expanded will always be in the set of smallest items when we're done.
+            smallestItemsAt |= minCellsAt;
+
+            if (minCellsItemCount > cellsRemaining) break; // Couldn't expand anything evenly. Stop.
+
+            // We have enough cells, all minimum size items will be incremented.
+            minCells++;
+
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                if ((minCellsAt & (1 << i)) == 0) {
+                    // If this item is already at our small item count, mark it for later.
+                    if (lp.cellsUsed == minCells) smallestItemsAt |= 1 << i;
+                    continue;
+                }
+
+                if (centerSingleExpandedItem && lp.preventEdgeOffset && cellsRemaining == 1) {
+                    // Add padding to this item such that it centers.
+                    child.setPadding(mGeneratedItemPadding + cellSize, 0, mGeneratedItemPadding, 0);
+                }
+                lp.cellsUsed++;
+                lp.expanded = true;
+                cellsRemaining--;
+            }
+
+            needsExpansion = true;
+        }
+
+        // Divide any space left that wouldn't divide along cell boundaries
+        // evenly among the smallest items
+
+        final boolean singleItem = !hasOverflow && visibleItemCount == 1;
+        if (cellsRemaining > 0 && smallestItemsAt != 0 &&
+                (cellsRemaining < visibleItemCount - 1 || singleItem || maxCellsUsed > 1)) {
+            float expandCount = Long.bitCount(smallestItemsAt);
+
+            if (!singleItem) {
+                // The items at the far edges may only expand by half in order to pin to either side.
+                if ((smallestItemsAt & 1) != 0) {
+                    LayoutParams lp = (LayoutParams) getChildAt(0).getLayoutParams();
+                    if (!lp.preventEdgeOffset) expandCount -= 0.5f;
+                }
+                if ((smallestItemsAt & (1 << (childCount - 1))) != 0) {
+                    LayoutParams lp = ((LayoutParams) getChildAt(childCount - 1).getLayoutParams());
+                    if (!lp.preventEdgeOffset) expandCount -= 0.5f;
+                }
+            }
+
+            final int extraPixels = expandCount > 0 ?
+                    (int) (cellsRemaining * cellSize / expandCount) : 0;
+
+            for (int i = 0; i < childCount; i++) {
+                if ((smallestItemsAt & (1 << i)) == 0) continue;
+
+                final View child = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                if (child instanceof ActionMenuItemView) {
+                    // If this is one of our views, expand and measure at the larger size.
+                    lp.extraPixels = extraPixels;
+                    lp.expanded = true;
+                    if (i == 0 && !lp.preventEdgeOffset) {
+                        // First item gets part of its new padding pushed out of sight.
+                        // The last item will get this implicitly from layout.
+                        lp.leftMargin = -extraPixels / 2;
+                    }
+                    needsExpansion = true;
+                } else if (lp.isOverflowButton) {
+                    lp.extraPixels = extraPixels;
+                    lp.expanded = true;
+                    lp.rightMargin = -extraPixels / 2;
+                    needsExpansion = true;
+                } else {
+                    // If we don't know what it is, give it some margins instead
+                    // and let it center within its space. We still want to pin
+                    // against the edges.
+                    if (i != 0) {
+                        lp.leftMargin = extraPixels / 2;
+                    }
+                    if (i != childCount - 1) {
+                        lp.rightMargin = extraPixels / 2;
+                    }
+                }
+            }
+
+            cellsRemaining = 0;
+        }
+
+        // Remeasure any items that have had extra space allocated to them.
+        if (needsExpansion) {
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+                if (!lp.expanded) continue;
+
+                final int width = lp.cellsUsed * cellSize + lp.extraPixels;
+                child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+                        itemHeightSpec);
+            }
+        }
+
+        if (heightMode != MeasureSpec.EXACTLY) {
+            heightSize = maxChildHeight;
+        }
+
+        setMeasuredDimension(widthSize, heightSize);
+    }
+
+    /**
+     * Measure a child view to fit within cell-based formatting. The child's width
+     * will be measured to a whole multiple of cellSize.
+     *
+     * <p>Sets the expandable and cellsUsed fields of LayoutParams.
+     *
+     * @param child Child to measure
+     * @param cellSize Size of one cell
+     * @param cellsRemaining Number of cells remaining that this view can expand to fill
+     * @param parentHeightMeasureSpec MeasureSpec used by the parent view
+     * @param parentHeightPadding Padding present in the parent view
+     * @return Number of cells this child was measured to occupy
+     */
+    static int measureChildForCells(View child, int cellSize, int cellsRemaining,
+            int parentHeightMeasureSpec, int parentHeightPadding) {
+        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+        final int childHeightSize = MeasureSpec.getSize(parentHeightMeasureSpec) -
+                parentHeightPadding;
+        final int childHeightMode = MeasureSpec.getMode(parentHeightMeasureSpec);
+        final int childHeightSpec = MeasureSpec.makeMeasureSpec(childHeightSize, childHeightMode);
+
+        final ActionMenuItemView itemView = child instanceof ActionMenuItemView ?
+                (ActionMenuItemView) child : null;
+        final boolean hasText = itemView != null && itemView.hasText();
+
+        int cellsUsed = 0;
+        if (cellsRemaining > 0 && (!hasText || cellsRemaining >= 2)) {
+            final int childWidthSpec = MeasureSpec.makeMeasureSpec(
+                    cellSize * cellsRemaining, MeasureSpec.AT_MOST);
+            child.measure(childWidthSpec, childHeightSpec);
+
+            final int measuredWidth = child.getMeasuredWidth();
+            cellsUsed = measuredWidth / cellSize;
+            if (measuredWidth % cellSize != 0) cellsUsed++;
+            if (hasText && cellsUsed < 2) cellsUsed = 2;
+        }
+
+        final boolean expandable = !lp.isOverflowButton && hasText;
+        lp.expandable = expandable;
+
+        lp.cellsUsed = cellsUsed;
+        final int targetWidth = cellsUsed * cellSize;
+        child.measure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY),
+                childHeightSpec);
+        return cellsUsed;
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        if (!mFormatItems) {
+            super.onLayout(changed, left, top, right, bottom);
+            return;
+        }
+
+        final int childCount = getChildCount();
+        final int midVertical = (top + bottom) / 2;
+        final int dividerWidth = getDividerWidth();
+        int overflowWidth = 0;
+        int nonOverflowWidth = 0;
+        int nonOverflowCount = 0;
+        int widthRemaining = right - left - getPaddingRight() - getPaddingLeft();
+        boolean hasOverflow = false;
+        final boolean isLayoutRtl = isLayoutRtl();
+        for (int i = 0; i < childCount; i++) {
+            final View v = getChildAt(i);
+            if (v.getVisibility() == GONE) {
+                continue;
+            }
+
+            LayoutParams p = (LayoutParams) v.getLayoutParams();
+            if (p.isOverflowButton) {
+                overflowWidth = v.getMeasuredWidth();
+                if (hasDividerBeforeChildAt(i)) {
+                    overflowWidth += dividerWidth;
+                }
+
+                int height = v.getMeasuredHeight();
+                int r;
+                int l;
+                if (isLayoutRtl) {
+                    l = getPaddingLeft() + p.leftMargin;
+                    r = l + overflowWidth;
+                } else {
+                    r = getWidth() - getPaddingRight() - p.rightMargin;
+                    l = r - overflowWidth;
+                }
+                int t = midVertical - (height / 2);
+                int b = t + height;
+                v.layout(l, t, r, b);
+
+                widthRemaining -= overflowWidth;
+                hasOverflow = true;
+            } else {
+                final int size = v.getMeasuredWidth() + p.leftMargin + p.rightMargin;
+                nonOverflowWidth += size;
+                widthRemaining -= size;
+                if (hasDividerBeforeChildAt(i)) {
+                    nonOverflowWidth += dividerWidth;
+                }
+                nonOverflowCount++;
+            }
+        }
+
+        if (childCount == 1 && !hasOverflow) {
+            // Center a single child
+            final View v = getChildAt(0);
+            final int width = v.getMeasuredWidth();
+            final int height = v.getMeasuredHeight();
+            final int midHorizontal = (right - left) / 2;
+            final int l = midHorizontal - width / 2;
+            final int t = midVertical - height / 2;
+            v.layout(l, t, l + width, t + height);
+            return;
+        }
+
+        final int spacerCount = nonOverflowCount - (hasOverflow ? 0 : 1);
+        final int spacerSize = Math.max(0, spacerCount > 0 ? widthRemaining / spacerCount : 0);
+
+        if (isLayoutRtl) {
+            int startRight = getWidth() - getPaddingRight();
+            for (int i = 0; i < childCount; i++) {
+                final View v = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) v.getLayoutParams();
+                if (v.getVisibility() == GONE || lp.isOverflowButton) {
+                    continue;
+                }
+
+                startRight -= lp.rightMargin;
+                int width = v.getMeasuredWidth();
+                int height = v.getMeasuredHeight();
+                int t = midVertical - height / 2;
+                v.layout(startRight - width, t, startRight, t + height);
+                startRight -= width + lp.leftMargin + spacerSize;
+            }
+        } else {
+            int startLeft = getPaddingLeft();
+            for (int i = 0; i < childCount; i++) {
+                final View v = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) v.getLayoutParams();
+                if (v.getVisibility() == GONE || lp.isOverflowButton) {
+                    continue;
+                }
+
+                startLeft += lp.leftMargin;
+                int width = v.getMeasuredWidth();
+                int height = v.getMeasuredHeight();
+                int t = midVertical - height / 2;
+                v.layout(startLeft, t, startLeft + width, t + height);
+                startLeft += width + lp.rightMargin + spacerSize;
+            }
+        }
+    }
+
+    @Override
+    public void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        mPresenter.dismissPopupMenus();
+    }
+
+    /** @hide */
+    public boolean isOverflowReserved() {
+        return mReserveOverflow;
+    }
+
+    /** @hide */
+    public void setOverflowReserved(boolean reserveOverflow) {
+        mReserveOverflow = reserveOverflow;
+    }
+
+    @Override
+    protected LayoutParams generateDefaultLayoutParams() {
+        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT);
+        params.gravity = Gravity.CENTER_VERTICAL;
+        return params;
+    }
+    
+    @Override
+    public LayoutParams generateLayoutParams(AttributeSet attrs) {
+        return new LayoutParams(getContext(), attrs);
+    }
+
+    @Override
+    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
+        if (p != null) {
+            final LayoutParams result = p instanceof LayoutParams
+                    ? new LayoutParams((LayoutParams) p)
+                    : new LayoutParams(p);
+            if (result.gravity <= Gravity.NO_GRAVITY) {
+                result.gravity = Gravity.CENTER_VERTICAL;
+            }
+            return result;
+        }
+        return generateDefaultLayoutParams();
+    }
+
+    @Override
+    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+        return p != null && p instanceof LayoutParams;
+    }
+
+    /** @hide */
+    public LayoutParams generateOverflowButtonLayoutParams() {
+        LayoutParams result = generateDefaultLayoutParams();
+        result.isOverflowButton = true;
+        return result;
+    }
+
+    /** @hide */
+    public boolean invokeItem(MenuItemImpl item) {
+        return mMenu.performItemAction(item, 0);
+    }
+
+    /** @hide */
+    public int getWindowAnimations() {
+        return 0;
+    }
+
+    /** @hide */
+    public void initialize(MenuBuilder menu) {
+        mMenu = menu;
+    }
+
+    /**
+     * Returns the Menu object that this ActionMenuView is currently presenting.
+     *
+     * <p>Applications should use this method to obtain the ActionMenuView's Menu object
+     * and inflate or add content to it as necessary.</p>
+     *
+     * @return the Menu presented by this view
+     */
+    public Menu getMenu() {
+        if (mMenu == null) {
+            final Context context = getContext();
+            mMenu = new MenuBuilder(context);
+            mMenu.setCallback(new MenuBuilderCallback());
+            mPresenter = new ActionMenuPresenter(context);
+            mPresenter.setMenuView(this);
+            mPresenter.setCallback(new ActionMenuPresenterCallback());
+            mMenu.addMenuPresenter(mPresenter);
+        }
+
+        return mMenu;
+    }
+
+    /**
+     * @hide Private LinearLayout (superclass) API. Un-hide if LinearLayout API is made public.
+     */
+    @Override
+    protected boolean hasDividerBeforeChildAt(int childIndex) {
+        if (childIndex == 0) {
+            return false;
+        }
+        final View childBefore = getChildAt(childIndex - 1);
+        final View child = getChildAt(childIndex);
+        boolean result = false;
+        if (childIndex < getChildCount() && childBefore instanceof ActionMenuChildView) {
+            result |= ((ActionMenuChildView) childBefore).needsDividerAfter();
+        }
+        if (childIndex > 0 && child instanceof ActionMenuChildView) {
+            result |= ((ActionMenuChildView) child).needsDividerBefore();
+        }
+        return result;
+    }
+
+    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+        return false;
+    }
+
+    /**
+     * Interface responsible for receiving menu item click events if the items themselves
+     * do not have individual item click listeners.
+     */
+    public interface OnMenuItemClickListener {
+        /**
+         * This method will be invoked when a menu item is clicked if the item itself did
+         * not already handle the event.
+         *
+         * @param item {@link MenuItem} that was clicked
+         * @return <code>true</code> if the event was handled, <code>false</code> otherwise.
+         */
+        public boolean onMenuItemClick(MenuItem item);
+    }
+
+    private class MenuBuilderCallback implements MenuBuilder.Callback {
+        @Override
+        public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
+            return mOnMenuItemClickListener != null &&
+                    mOnMenuItemClickListener.onMenuItemClick(item);
+        }
+
+        @Override
+        public void onMenuModeChange(MenuBuilder menu) {
+        }
+    }
+
+    private class ActionMenuPresenterCallback implements ActionMenuPresenter.Callback {
+        @Override
+        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
+        }
+
+        @Override
+        public boolean onOpenSubMenu(MenuBuilder subMenu) {
+            return false;
+        }
+    }
+
+    /** @hide */
+    public interface ActionMenuChildView {
+        public boolean needsDividerBefore();
+        public boolean needsDividerAfter();
+    }
+
+    public static class LayoutParams extends LinearLayout.LayoutParams {
+        /** @hide */
+        @ViewDebug.ExportedProperty(category = "layout")
+        public boolean isOverflowButton;
+
+        /** @hide */
+        @ViewDebug.ExportedProperty(category = "layout")
+        public int cellsUsed;
+
+        /** @hide */
+        @ViewDebug.ExportedProperty(category = "layout")
+        public int extraPixels;
+
+        /** @hide */
+        @ViewDebug.ExportedProperty(category = "layout")
+        public boolean expandable;
+
+        /** @hide */
+        @ViewDebug.ExportedProperty(category = "layout")
+        public boolean preventEdgeOffset;
+
+        /** @hide */
+        public boolean expanded;
+
+        public LayoutParams(Context c, AttributeSet attrs) {
+            super(c, attrs);
+        }
+
+        public LayoutParams(ViewGroup.LayoutParams other) {
+            super(other);
+        }
+
+        public LayoutParams(LayoutParams other) {
+            super((LinearLayout.LayoutParams) other);
+            isOverflowButton = other.isOverflowButton;
+        }
+
+        public LayoutParams(int width, int height) {
+            super(width, height);
+            isOverflowButton = false;
+        }
+
+        /** @hide */
+        public LayoutParams(int width, int height, boolean isOverflowButton) {
+            super(width, height);
+            this.isOverflowButton = isOverflowButton;
+        }
+    }
+}
diff --git a/core/java/android/widget/ActivityChooserView.java b/core/java/android/widget/ActivityChooserView.java
index 8612964..f9af2f9 100644
--- a/core/java/android/widget/ActivityChooserView.java
+++ b/core/java/android/widget/ActivityChooserView.java
@@ -18,7 +18,6 @@
 
 import com.android.internal.R;
 
-import android.content.ActivityNotFoundException;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
@@ -31,7 +30,6 @@
 import android.util.Log;
 import android.view.ActionProvider;
 import android.view.LayoutInflater;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
@@ -204,13 +202,32 @@
      *
      * @param context The application environment.
      * @param attrs A collection of attributes.
-     * @param defStyle The default style to apply to this view.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
-    public ActivityChooserView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ActivityChooserView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    /**
+     * Create a new instance.
+     *
+     * @param context The application environment.
+     * @param attrs A collection of attributes.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     */
+    public ActivityChooserView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         TypedArray attributesArray = context.obtainStyledAttributes(attrs,
-                R.styleable.ActivityChooserView, defStyle, 0);
+                R.styleable.ActivityChooserView, defStyleAttr, defStyleRes);
 
         mInitialActivityCount = attributesArray.getInt(
                 R.styleable.ActivityChooserView_initialActivityCount,
diff --git a/core/java/android/widget/AdapterView.java b/core/java/android/widget/AdapterView.java
index a06344f..1da22ca 100644
--- a/core/java/android/widget/AdapterView.java
+++ b/core/java/android/widget/AdapterView.java
@@ -223,15 +223,19 @@
     boolean mBlockLayoutRequests = false;
 
     public AdapterView(Context context) {
-        super(context);
+        this(context, null);
     }
 
     public AdapterView(Context context, AttributeSet attrs) {
-        super(context, attrs);
+        this(context, attrs, 0);
     }
 
-    public AdapterView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public AdapterView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AdapterView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         // If not explicitly specified this view is important for accessibility.
         if (getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
diff --git a/core/java/android/widget/AdapterViewAnimator.java b/core/java/android/widget/AdapterViewAnimator.java
index 90e949a..1bc2f4b 100644
--- a/core/java/android/widget/AdapterViewAnimator.java
+++ b/core/java/android/widget/AdapterViewAnimator.java
@@ -173,10 +173,15 @@
     }
 
     public AdapterViewAnimator(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.AdapterViewAnimator, defStyleAttr, 0);
+    public AdapterViewAnimator(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.AdapterViewAnimator, defStyleAttr, defStyleRes);
         int resource = a.getResourceId(
                 com.android.internal.R.styleable.AdapterViewAnimator_inAnimation, 0);
         if (resource > 0) {
diff --git a/core/java/android/widget/AdapterViewFlipper.java b/core/java/android/widget/AdapterViewFlipper.java
index aea029b..3b026bd 100644
--- a/core/java/android/widget/AdapterViewFlipper.java
+++ b/core/java/android/widget/AdapterViewFlipper.java
@@ -59,10 +59,19 @@
     }
 
     public AdapterViewFlipper(Context context, AttributeSet attrs) {
-        super(context, attrs);
+        this(context, attrs, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.AdapterViewFlipper);
+    public AdapterViewFlipper(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AdapterViewFlipper(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.AdapterViewFlipper, defStyleAttr, defStyleRes);
         mFlipInterval = a.getInt(
                 com.android.internal.R.styleable.AdapterViewFlipper_flipInterval, DEFAULT_INTERVAL);
         mAutoStart = a.getBoolean(
diff --git a/core/java/android/widget/AnalogClock.java b/core/java/android/widget/AnalogClock.java
index c7da818..5b80648 100644
--- a/core/java/android/widget/AnalogClock.java
+++ b/core/java/android/widget/AnalogClock.java
@@ -67,27 +67,30 @@
         this(context, attrs, 0);
     }
 
-    public AnalogClock(Context context, AttributeSet attrs,
-                       int defStyle) {
-        super(context, attrs, defStyle);
-        Resources r = mContext.getResources();
-        TypedArray a =
-                context.obtainStyledAttributes(
-                        attrs, com.android.internal.R.styleable.AnalogClock, defStyle, 0);
+    public AnalogClock(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AnalogClock(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final Resources r = context.getResources();
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.AnalogClock, defStyleAttr, defStyleRes);
 
         mDial = a.getDrawable(com.android.internal.R.styleable.AnalogClock_dial);
         if (mDial == null) {
-            mDial = r.getDrawable(com.android.internal.R.drawable.clock_dial);
+            mDial = context.getDrawable(com.android.internal.R.drawable.clock_dial);
         }
 
         mHourHand = a.getDrawable(com.android.internal.R.styleable.AnalogClock_hand_hour);
         if (mHourHand == null) {
-            mHourHand = r.getDrawable(com.android.internal.R.drawable.clock_hand_hour);
+            mHourHand = context.getDrawable(com.android.internal.R.drawable.clock_hand_hour);
         }
 
         mMinuteHand = a.getDrawable(com.android.internal.R.styleable.AnalogClock_hand_minute);
         if (mMinuteHand == null) {
-            mMinuteHand = r.getDrawable(com.android.internal.R.drawable.clock_hand_minute);
+            mMinuteHand = context.getDrawable(com.android.internal.R.drawable.clock_hand_minute);
         }
 
         mCalendar = new Time();
diff --git a/core/java/android/widget/AppSecurityPermissions.java b/core/java/android/widget/AppSecurityPermissions.java
index 34cfea5..10e56c7 100644
--- a/core/java/android/widget/AppSecurityPermissions.java
+++ b/core/java/android/widget/AppSecurityPermissions.java
@@ -322,7 +322,7 @@
             CharSequence grpName, CharSequence description, boolean dangerous) {
         LayoutInflater inflater = (LayoutInflater)context.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
-        Drawable icon = context.getResources().getDrawable(dangerous
+        Drawable icon = context.getDrawable(dangerous
                 ? R.drawable.ic_bullet_key_permission : R.drawable.ic_text_dot);
         return getPermissionItemViewOld(context, inflater, grpName,
                 description, dangerous, icon);
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index f0eb94f..eb232fd 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -133,17 +133,21 @@
         this(context, attrs, com.android.internal.R.attr.autoCompleteTextViewStyle);
     }
 
-    public AutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public AutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AutoCompleteTextView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         mPopup = new ListPopupWindow(context, attrs,
                 com.android.internal.R.attr.autoCompleteTextViewStyle);
         mPopup.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
         mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW);
 
-        TypedArray a =
-            context.obtainStyledAttributes(
-                attrs, com.android.internal.R.styleable.AutoCompleteTextView, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.AutoCompleteTextView, defStyleAttr, defStyleRes);
 
         mThreshold = a.getInt(
                 R.styleable.AutoCompleteTextView_completionThreshold, 2);
@@ -362,7 +366,7 @@
      * @attr ref android.R.styleable#PopupWindow_popupBackground
      */
     public void setDropDownBackgroundResource(int id) {
-        mPopup.setBackgroundDrawable(getResources().getDrawable(id));
+        mPopup.setBackgroundDrawable(getContext().getDrawable(id));
     }
     
     /**
diff --git a/core/java/android/widget/Button.java b/core/java/android/widget/Button.java
index 2ac56ac..1663620 100644
--- a/core/java/android/widget/Button.java
+++ b/core/java/android/widget/Button.java
@@ -103,8 +103,12 @@
         this(context, attrs, com.android.internal.R.attr.buttonStyle);
     }
 
-    public Button(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public Button(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public Button(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     @Override
diff --git a/core/java/android/widget/CalendarView.java b/core/java/android/widget/CalendarView.java
index e90b460..ea60abb 100644
--- a/core/java/android/widget/CalendarView.java
+++ b/core/java/android/widget/CalendarView.java
@@ -80,234 +80,7 @@
      */
     private static final String LOG_TAG = CalendarView.class.getSimpleName();
 
-    /**
-     * Default value whether to show week number.
-     */
-    private static final boolean DEFAULT_SHOW_WEEK_NUMBER = true;
-
-    /**
-     * The number of milliseconds in a day.e
-     */
-    private static final long MILLIS_IN_DAY = 86400000L;
-
-    /**
-     * The number of day in a week.
-     */
-    private static final int DAYS_PER_WEEK = 7;
-
-    /**
-     * The number of milliseconds in a week.
-     */
-    private static final long MILLIS_IN_WEEK = DAYS_PER_WEEK * MILLIS_IN_DAY;
-
-    /**
-     * Affects when the month selection will change while scrolling upe
-     */
-    private static final int SCROLL_HYST_WEEKS = 2;
-
-    /**
-     * How long the GoTo fling animation should last.
-     */
-    private static final int GOTO_SCROLL_DURATION = 1000;
-
-    /**
-     * The duration of the adjustment upon a user scroll in milliseconds.
-     */
-    private static final int ADJUSTMENT_SCROLL_DURATION = 500;
-
-    /**
-     * How long to wait after receiving an onScrollStateChanged notification
-     * before acting on it.
-     */
-    private static final int SCROLL_CHANGE_DELAY = 40;
-
-    /**
-     * String for parsing dates.
-     */
-    private static final String DATE_FORMAT = "MM/dd/yyyy";
-
-    /**
-     * The default minimal date.
-     */
-    private static final String DEFAULT_MIN_DATE = "01/01/1900";
-
-    /**
-     * The default maximal date.
-     */
-    private static final String DEFAULT_MAX_DATE = "01/01/2100";
-
-    private static final int DEFAULT_SHOWN_WEEK_COUNT = 6;
-
-    private static final int DEFAULT_DATE_TEXT_SIZE = 14;
-
-    private static final int UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH = 6;
-
-    private static final int UNSCALED_WEEK_MIN_VISIBLE_HEIGHT = 12;
-
-    private static final int UNSCALED_LIST_SCROLL_TOP_OFFSET = 2;
-
-    private static final int UNSCALED_BOTTOM_BUFFER = 20;
-
-    private static final int UNSCALED_WEEK_SEPARATOR_LINE_WIDTH = 1;
-
-    private static final int DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID = -1;
-
-    private final int mWeekSeperatorLineWidth;
-
-    private int mDateTextSize;
-
-    private Drawable mSelectedDateVerticalBar;
-
-    private final int mSelectedDateVerticalBarWidth;
-
-    private int mSelectedWeekBackgroundColor;
-
-    private int mFocusedMonthDateColor;
-
-    private int mUnfocusedMonthDateColor;
-
-    private int mWeekSeparatorLineColor;
-
-    private int mWeekNumberColor;
-
-    private int mWeekDayTextAppearanceResId;
-
-    private int mDateTextAppearanceResId;
-
-    /**
-     * The top offset of the weeks list.
-     */
-    private int mListScrollTopOffset = 2;
-
-    /**
-     * The visible height of a week view.
-     */
-    private int mWeekMinVisibleHeight = 12;
-
-    /**
-     * The visible height of a week view.
-     */
-    private int mBottomBuffer = 20;
-
-    /**
-     * The number of shown weeks.
-     */
-    private int mShownWeekCount;
-
-    /**
-     * Flag whether to show the week number.
-     */
-    private boolean mShowWeekNumber;
-
-    /**
-     * The number of day per week to be shown.
-     */
-    private int mDaysPerWeek = 7;
-
-    /**
-     * The friction of the week list while flinging.
-     */
-    private float mFriction = .05f;
-
-    /**
-     * Scale for adjusting velocity of the week list while flinging.
-     */
-    private float mVelocityScale = 0.333f;
-
-    /**
-     * The adapter for the weeks list.
-     */
-    private WeeksAdapter mAdapter;
-
-    /**
-     * The weeks list.
-     */
-    private ListView mListView;
-
-    /**
-     * The name of the month to display.
-     */
-    private TextView mMonthName;
-
-    /**
-     * The header with week day names.
-     */
-    private ViewGroup mDayNamesHeader;
-
-    /**
-     * Cached labels for the week names header.
-     */
-    private String[] mDayLabels;
-
-    /**
-     * The first day of the week.
-     */
-    private int mFirstDayOfWeek;
-
-    /**
-     * Which month should be displayed/highlighted [0-11].
-     */
-    private int mCurrentMonthDisplayed = -1;
-
-    /**
-     * Used for tracking during a scroll.
-     */
-    private long mPreviousScrollPosition;
-
-    /**
-     * Used for tracking which direction the view is scrolling.
-     */
-    private boolean mIsScrollingUp = false;
-
-    /**
-     * The previous scroll state of the weeks ListView.
-     */
-    private int mPreviousScrollState = OnScrollListener.SCROLL_STATE_IDLE;
-
-    /**
-     * The current scroll state of the weeks ListView.
-     */
-    private int mCurrentScrollState = OnScrollListener.SCROLL_STATE_IDLE;
-
-    /**
-     * Listener for changes in the selected day.
-     */
-    private OnDateChangeListener mOnDateChangeListener;
-
-    /**
-     * Command for adjusting the position after a scroll/fling.
-     */
-    private ScrollStateRunnable mScrollStateChangedRunnable = new ScrollStateRunnable();
-
-    /**
-     * Temporary instance to avoid multiple instantiations.
-     */
-    private Calendar mTempDate;
-
-    /**
-     * The first day of the focused month.
-     */
-    private Calendar mFirstDayOfMonth;
-
-    /**
-     * The start date of the range supported by this picker.
-     */
-    private Calendar mMinDate;
-
-    /**
-     * The end date of the range supported by this picker.
-     */
-    private Calendar mMaxDate;
-
-    /**
-     * Date format for parsing dates.
-     */
-    private final java.text.DateFormat mDateFormat = new SimpleDateFormat(DATE_FORMAT);
-
-    /**
-     * The current locale.
-     */
-    private Locale mCurrentLocale;
+    private CalendarViewDelegate mDelegate;
 
     /**
      * The callback used to indicate the user changes the date.
@@ -330,91 +103,17 @@
     }
 
     public CalendarView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
+        this(context, attrs, R.attr.calendarViewStyle);
     }
 
-    public CalendarView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, 0);
+    public CalendarView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        // initialization based on locale
-        setCurrentLocale(Locale.getDefault());
+    public CalendarView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
-        TypedArray attributesArray = context.obtainStyledAttributes(attrs, R.styleable.CalendarView,
-                R.attr.calendarViewStyle, 0);
-        mShowWeekNumber = attributesArray.getBoolean(R.styleable.CalendarView_showWeekNumber,
-                DEFAULT_SHOW_WEEK_NUMBER);
-        mFirstDayOfWeek = attributesArray.getInt(R.styleable.CalendarView_firstDayOfWeek,
-                LocaleData.get(Locale.getDefault()).firstDayOfWeek);
-        String minDate = attributesArray.getString(R.styleable.CalendarView_minDate);
-        if (TextUtils.isEmpty(minDate) || !parseDate(minDate, mMinDate)) {
-            parseDate(DEFAULT_MIN_DATE, mMinDate);
-        }
-        String maxDate = attributesArray.getString(R.styleable.CalendarView_maxDate);
-        if (TextUtils.isEmpty(maxDate) || !parseDate(maxDate, mMaxDate)) {
-            parseDate(DEFAULT_MAX_DATE, mMaxDate);
-        }
-        if (mMaxDate.before(mMinDate)) {
-            throw new IllegalArgumentException("Max date cannot be before min date.");
-        }
-        mShownWeekCount = attributesArray.getInt(R.styleable.CalendarView_shownWeekCount,
-                DEFAULT_SHOWN_WEEK_COUNT);
-        mSelectedWeekBackgroundColor = attributesArray.getColor(
-                R.styleable.CalendarView_selectedWeekBackgroundColor, 0);
-        mFocusedMonthDateColor = attributesArray.getColor(
-                R.styleable.CalendarView_focusedMonthDateColor, 0);
-        mUnfocusedMonthDateColor = attributesArray.getColor(
-                R.styleable.CalendarView_unfocusedMonthDateColor, 0);
-        mWeekSeparatorLineColor = attributesArray.getColor(
-                R.styleable.CalendarView_weekSeparatorLineColor, 0);
-        mWeekNumberColor = attributesArray.getColor(R.styleable.CalendarView_weekNumberColor, 0);
-        mSelectedDateVerticalBar = attributesArray.getDrawable(
-                R.styleable.CalendarView_selectedDateVerticalBar);
-
-        mDateTextAppearanceResId = attributesArray.getResourceId(
-                R.styleable.CalendarView_dateTextAppearance, R.style.TextAppearance_Small);
-        updateDateTextSize();
-
-        mWeekDayTextAppearanceResId = attributesArray.getResourceId(
-                R.styleable.CalendarView_weekDayTextAppearance,
-                DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID);
-        attributesArray.recycle();
-
-        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
-        mWeekMinVisibleHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
-                UNSCALED_WEEK_MIN_VISIBLE_HEIGHT, displayMetrics);
-        mListScrollTopOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
-                UNSCALED_LIST_SCROLL_TOP_OFFSET, displayMetrics);
-        mBottomBuffer = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
-                UNSCALED_BOTTOM_BUFFER, displayMetrics);
-        mSelectedDateVerticalBarWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
-                UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH, displayMetrics);
-        mWeekSeperatorLineWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
-                UNSCALED_WEEK_SEPARATOR_LINE_WIDTH, displayMetrics);
-
-        LayoutInflater layoutInflater = (LayoutInflater) context
-                .getSystemService(Service.LAYOUT_INFLATER_SERVICE);
-        View content = layoutInflater.inflate(R.layout.calendar_view, null, false);
-        addView(content);
-
-        mListView = (ListView) findViewById(R.id.list);
-        mDayNamesHeader = (ViewGroup) content.findViewById(com.android.internal.R.id.day_names);
-        mMonthName = (TextView) content.findViewById(com.android.internal.R.id.month_name);
-
-        setUpHeader();
-        setUpListView();
-        setUpAdapter();
-
-        // go to today or whichever is close to today min or max date
-        mTempDate.setTimeInMillis(System.currentTimeMillis());
-        if (mTempDate.before(mMinDate)) {
-            goTo(mMinDate, false, true, true);
-        } else if (mMaxDate.before(mTempDate)) {
-            goTo(mMaxDate, false, true, true);
-        } else {
-            goTo(mTempDate, false, true, true);
-        }
-
-        invalidate();
+        mDelegate = new LegacyCalendarViewDelegate(this, context, attrs, defStyleAttr, defStyleRes);
     }
 
     /**
@@ -425,10 +124,7 @@
      * @attr ref android.R.styleable#CalendarView_shownWeekCount
      */
     public void setShownWeekCount(int count) {
-        if (mShownWeekCount != count) {
-            mShownWeekCount = count;
-            invalidate();
-        }
+        mDelegate.setShownWeekCount(count);
     }
 
     /**
@@ -439,7 +135,7 @@
      * @attr ref android.R.styleable#CalendarView_shownWeekCount
      */
     public int getShownWeekCount() {
-        return mShownWeekCount;
+        return mDelegate.getShownWeekCount();
     }
 
     /**
@@ -450,16 +146,7 @@
      * @attr ref android.R.styleable#CalendarView_selectedWeekBackgroundColor
      */
     public void setSelectedWeekBackgroundColor(int color) {
-        if (mSelectedWeekBackgroundColor != color) {
-            mSelectedWeekBackgroundColor = color;
-            final int childCount = mListView.getChildCount();
-            for (int i = 0; i < childCount; i++) {
-                WeekView weekView = (WeekView) mListView.getChildAt(i);
-                if (weekView.mHasSelectedDay) {
-                    weekView.invalidate();
-                }
-            }
-        }
+        mDelegate.setSelectedWeekBackgroundColor(color);
     }
 
     /**
@@ -470,7 +157,7 @@
      * @attr ref android.R.styleable#CalendarView_selectedWeekBackgroundColor
      */
     public int getSelectedWeekBackgroundColor() {
-        return mSelectedWeekBackgroundColor;
+        return mDelegate.getSelectedWeekBackgroundColor();
     }
 
     /**
@@ -481,16 +168,7 @@
      * @attr ref android.R.styleable#CalendarView_focusedMonthDateColor
      */
     public void setFocusedMonthDateColor(int color) {
-        if (mFocusedMonthDateColor != color) {
-            mFocusedMonthDateColor = color;
-            final int childCount = mListView.getChildCount();
-            for (int i = 0; i < childCount; i++) {
-                WeekView weekView = (WeekView) mListView.getChildAt(i);
-                if (weekView.mHasFocusedDay) {
-                    weekView.invalidate();
-                }
-            }
-        }
+        mDelegate.setFocusedMonthDateColor(color);
     }
 
     /**
@@ -501,7 +179,7 @@
      * @attr ref android.R.styleable#CalendarView_focusedMonthDateColor
      */
     public int getFocusedMonthDateColor() {
-        return mFocusedMonthDateColor;
+        return mDelegate.getFocusedMonthDateColor();
     }
 
     /**
@@ -512,16 +190,7 @@
      * @attr ref android.R.styleable#CalendarView_unfocusedMonthDateColor
      */
     public void setUnfocusedMonthDateColor(int color) {
-        if (mUnfocusedMonthDateColor != color) {
-            mUnfocusedMonthDateColor = color;
-            final int childCount = mListView.getChildCount();
-            for (int i = 0; i < childCount; i++) {
-                WeekView weekView = (WeekView) mListView.getChildAt(i);
-                if (weekView.mHasUnfocusedDay) {
-                    weekView.invalidate();
-                }
-            }
-        }
+        mDelegate.setUnfocusedMonthDateColor(color);
     }
 
     /**
@@ -532,7 +201,7 @@
      * @attr ref android.R.styleable#CalendarView_unfocusedMonthDateColor
      */
     public int getUnfocusedMonthDateColor() {
-        return mFocusedMonthDateColor;
+        return mDelegate.getUnfocusedMonthDateColor();
     }
 
     /**
@@ -543,12 +212,7 @@
      * @attr ref android.R.styleable#CalendarView_weekNumberColor
      */
     public void setWeekNumberColor(int color) {
-        if (mWeekNumberColor != color) {
-            mWeekNumberColor = color;
-            if (mShowWeekNumber) {
-                invalidateAllWeekViews();
-            }
-        }
+        mDelegate.setWeekNumberColor(color);
     }
 
     /**
@@ -559,7 +223,7 @@
      * @attr ref android.R.styleable#CalendarView_weekNumberColor
      */
     public int getWeekNumberColor() {
-        return mWeekNumberColor;
+        return mDelegate.getWeekNumberColor();
     }
 
     /**
@@ -570,10 +234,7 @@
      * @attr ref android.R.styleable#CalendarView_weekSeparatorLineColor
      */
     public void setWeekSeparatorLineColor(int color) {
-        if (mWeekSeparatorLineColor != color) {
-            mWeekSeparatorLineColor = color;
-            invalidateAllWeekViews();
-        }
+        mDelegate.setWeekSeparatorLineColor(color);
     }
 
     /**
@@ -584,7 +245,7 @@
      * @attr ref android.R.styleable#CalendarView_weekSeparatorLineColor
      */
     public int getWeekSeparatorLineColor() {
-        return mWeekSeparatorLineColor;
+        return mDelegate.getWeekSeparatorLineColor();
     }
 
     /**
@@ -596,8 +257,7 @@
      * @attr ref android.R.styleable#CalendarView_selectedDateVerticalBar
      */
     public void setSelectedDateVerticalBar(int resourceId) {
-        Drawable drawable = getResources().getDrawable(resourceId);
-        setSelectedDateVerticalBar(drawable);
+        mDelegate.setSelectedDateVerticalBar(resourceId);
     }
 
     /**
@@ -609,16 +269,7 @@
      * @attr ref android.R.styleable#CalendarView_selectedDateVerticalBar
      */
     public void setSelectedDateVerticalBar(Drawable drawable) {
-        if (mSelectedDateVerticalBar != drawable) {
-            mSelectedDateVerticalBar = drawable;
-            final int childCount = mListView.getChildCount();
-            for (int i = 0; i < childCount; i++) {
-                WeekView weekView = (WeekView) mListView.getChildAt(i);
-                if (weekView.mHasSelectedDay) {
-                    weekView.invalidate();
-                }
-            }
-        }
+        mDelegate.setSelectedDateVerticalBar(drawable);
     }
 
     /**
@@ -628,7 +279,7 @@
      * @return The vertical bar drawable.
      */
     public Drawable getSelectedDateVerticalBar() {
-        return mSelectedDateVerticalBar;
+        return mDelegate.getSelectedDateVerticalBar();
     }
 
     /**
@@ -639,10 +290,7 @@
      * @attr ref android.R.styleable#CalendarView_weekDayTextAppearance
      */
     public void setWeekDayTextAppearance(int resourceId) {
-        if (mWeekDayTextAppearanceResId != resourceId) {
-            mWeekDayTextAppearanceResId = resourceId;
-            setUpHeader();
-        }
+        mDelegate.setWeekDayTextAppearance(resourceId);
     }
 
     /**
@@ -653,7 +301,7 @@
      * @attr ref android.R.styleable#CalendarView_weekDayTextAppearance
      */
     public int getWeekDayTextAppearance() {
-        return mWeekDayTextAppearanceResId;
+        return mDelegate.getWeekDayTextAppearance();
     }
 
     /**
@@ -664,11 +312,7 @@
      * @attr ref android.R.styleable#CalendarView_dateTextAppearance
      */
     public void setDateTextAppearance(int resourceId) {
-        if (mDateTextAppearanceResId != resourceId) {
-            mDateTextAppearanceResId = resourceId;
-            updateDateTextSize();
-            invalidateAllWeekViews();
-        }
+        mDelegate.setDateTextAppearance(resourceId);
     }
 
     /**
@@ -679,35 +323,17 @@
      * @attr ref android.R.styleable#CalendarView_dateTextAppearance
      */
     public int getDateTextAppearance() {
-        return mDateTextAppearanceResId;
+        return mDelegate.getDateTextAppearance();
     }
 
     @Override
     public void setEnabled(boolean enabled) {
-        mListView.setEnabled(enabled);
+        mDelegate.setEnabled(enabled);
     }
 
     @Override
     public boolean isEnabled() {
-        return mListView.isEnabled();
-    }
-
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        setCurrentLocale(newConfig.locale);
-    }
-
-    @Override
-    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
-        super.onInitializeAccessibilityEvent(event);
-        event.setClassName(CalendarView.class.getName());
-    }
-
-    @Override
-    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
-        super.onInitializeAccessibilityNodeInfo(info);
-        info.setClassName(CalendarView.class.getName());
+        return mDelegate.isEnabled();
     }
 
     /**
@@ -723,7 +349,7 @@
      * @attr ref android.R.styleable#CalendarView_minDate
      */
     public long getMinDate() {
-        return mMinDate.getTimeInMillis();
+        return mDelegate.getMinDate();
     }
 
     /**
@@ -736,30 +362,7 @@
      * @attr ref android.R.styleable#CalendarView_minDate
      */
     public void setMinDate(long minDate) {
-        mTempDate.setTimeInMillis(minDate);
-        if (isSameDate(mTempDate, mMinDate)) {
-            return;
-        }
-        mMinDate.setTimeInMillis(minDate);
-        // make sure the current date is not earlier than
-        // the new min date since the latter is used for
-        // calculating the indices in the adapter thus
-        // avoiding out of bounds error
-        Calendar date = mAdapter.mSelectedDate;
-        if (date.before(mMinDate)) {
-            mAdapter.setSelectedDay(mMinDate);
-        }
-        // reinitialize the adapter since its range depends on min date
-        mAdapter.init();
-        if (date.before(mMinDate)) {
-            setDate(mTempDate.getTimeInMillis());
-        } else {
-            // we go to the current date to force the ListView to query its
-            // adapter for the shown views since we have changed the adapter
-            // range and the base from which the later calculates item indices
-            // note that calling setDate will not work since the date is the same
-            goTo(date, false, true, false);
-        }
+        mDelegate.setMinDate(minDate);
     }
 
     /**
@@ -775,7 +378,7 @@
      * @attr ref android.R.styleable#CalendarView_maxDate
      */
     public long getMaxDate() {
-        return mMaxDate.getTimeInMillis();
+        return mDelegate.getMaxDate();
     }
 
     /**
@@ -788,23 +391,7 @@
      * @attr ref android.R.styleable#CalendarView_maxDate
      */
     public void setMaxDate(long maxDate) {
-        mTempDate.setTimeInMillis(maxDate);
-        if (isSameDate(mTempDate, mMaxDate)) {
-            return;
-        }
-        mMaxDate.setTimeInMillis(maxDate);
-        // reinitialize the adapter since its range depends on max date
-        mAdapter.init();
-        Calendar date = mAdapter.mSelectedDate;
-        if (date.after(mMaxDate)) {
-            setDate(mMaxDate.getTimeInMillis());
-        } else {
-            // we go to the current date to force the ListView to query its
-            // adapter for the shown views since we have changed the adapter
-            // range and the base from which the later calculates item indices
-            // note that calling setDate will not work since the date is the same
-            goTo(date, false, true, false);
-        }
+        mDelegate.setMaxDate(maxDate);
     }
 
     /**
@@ -815,12 +402,7 @@
      * @attr ref android.R.styleable#CalendarView_showWeekNumber
      */
     public void setShowWeekNumber(boolean showWeekNumber) {
-        if (mShowWeekNumber == showWeekNumber) {
-            return;
-        }
-        mShowWeekNumber = showWeekNumber;
-        mAdapter.notifyDataSetChanged();
-        setUpHeader();
+        mDelegate.setShowWeekNumber(showWeekNumber);
     }
 
     /**
@@ -831,7 +413,7 @@
      * @attr ref android.R.styleable#CalendarView_showWeekNumber
      */
     public boolean getShowWeekNumber() {
-        return mShowWeekNumber;
+        return mDelegate.getShowWeekNumber();
     }
 
     /**
@@ -850,7 +432,7 @@
      * @attr ref android.R.styleable#CalendarView_firstDayOfWeek
      */
     public int getFirstDayOfWeek() {
-        return mFirstDayOfWeek;
+        return mDelegate.getFirstDayOfWeek();
     }
 
     /**
@@ -869,12 +451,7 @@
      * @attr ref android.R.styleable#CalendarView_firstDayOfWeek
      */
     public void setFirstDayOfWeek(int firstDayOfWeek) {
-        if (mFirstDayOfWeek == firstDayOfWeek) {
-            return;
-        }
-        mFirstDayOfWeek = firstDayOfWeek;
-        mAdapter.init();
-        setUpHeader();
+        mDelegate.setFirstDayOfWeek(firstDayOfWeek);
     }
 
     /**
@@ -883,7 +460,7 @@
      * @param listener The listener to be notified.
      */
     public void setOnDateChangeListener(OnDateChangeListener listener) {
-        mOnDateChangeListener = listener;
+        mDelegate.setOnDateChangeListener(listener);
     }
 
     /**
@@ -893,7 +470,7 @@
      * @return The selected date.
      */
     public long getDate() {
-        return mAdapter.mSelectedDate.getTimeInMillis();
+        return mDelegate.getDate();
     }
 
     /**
@@ -910,7 +487,7 @@
      * @see #setMaxDate(long)
      */
     public void setDate(long date) {
-        setDate(date, false, false);
+        mDelegate.setDate(date);
     }
 
     /**
@@ -928,937 +505,1648 @@
      * @see #setMaxDate(long)
      */
     public void setDate(long date, boolean animate, boolean center) {
-        mTempDate.setTimeInMillis(date);
-        if (isSameDate(mTempDate, mAdapter.mSelectedDate)) {
-            return;
-        }
-        goTo(mTempDate, animate, true, center);
+        mDelegate.setDate(date, animate, center);
     }
 
-    private void updateDateTextSize() {
-        TypedArray dateTextAppearance = mContext.obtainStyledAttributes(
-                mDateTextAppearanceResId, R.styleable.TextAppearance);
-        mDateTextSize = dateTextAppearance.getDimensionPixelSize(
-                R.styleable.TextAppearance_textSize, DEFAULT_DATE_TEXT_SIZE);
-        dateTextAppearance.recycle();
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mDelegate.onConfigurationChanged(newConfig);
+    }
+
+    @Override
+    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+        super.onInitializeAccessibilityEvent(event);
+        mDelegate.onInitializeAccessibilityEvent(event);
+    }
+
+    @Override
+    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+        super.onInitializeAccessibilityNodeInfo(info);
+        mDelegate.onInitializeAccessibilityNodeInfo(info);
     }
 
     /**
-     * Invalidates all week views.
+     * A delegate interface that defined the public API of the CalendarView. Allows different
+     * CalendarView implementations. This would need to be implemented by the CalendarView delegates
+     * for the real behavior.
      */
-    private void invalidateAllWeekViews() {
-        final int childCount = mListView.getChildCount();
-        for (int i = 0; i < childCount; i++) {
-            View view = mListView.getChildAt(i);
-            view.invalidate();
+    private interface CalendarViewDelegate {
+        void setShownWeekCount(int count);
+        int getShownWeekCount();
+
+        void setSelectedWeekBackgroundColor(int color);
+        int getSelectedWeekBackgroundColor();
+
+        void setFocusedMonthDateColor(int color);
+        int getFocusedMonthDateColor();
+
+        void setUnfocusedMonthDateColor(int color);
+        int getUnfocusedMonthDateColor();
+
+        void setWeekNumberColor(int color);
+        int getWeekNumberColor();
+
+        void setWeekSeparatorLineColor(int color);
+        int getWeekSeparatorLineColor();
+
+        void setSelectedDateVerticalBar(int resourceId);
+        void setSelectedDateVerticalBar(Drawable drawable);
+        Drawable getSelectedDateVerticalBar();
+
+        void setWeekDayTextAppearance(int resourceId);
+        int getWeekDayTextAppearance();
+
+        void setDateTextAppearance(int resourceId);
+        int getDateTextAppearance();
+
+        void setEnabled(boolean enabled);
+        boolean isEnabled();
+
+        void setMinDate(long minDate);
+        long getMinDate();
+
+        void setMaxDate(long maxDate);
+        long getMaxDate();
+
+        void setShowWeekNumber(boolean showWeekNumber);
+        boolean getShowWeekNumber();
+
+        void setFirstDayOfWeek(int firstDayOfWeek);
+        int getFirstDayOfWeek();
+
+        void setDate(long date);
+        void setDate(long date, boolean animate, boolean center);
+        long getDate();
+
+        void setOnDateChangeListener(OnDateChangeListener listener);
+
+        void onConfigurationChanged(Configuration newConfig);
+        void onInitializeAccessibilityEvent(AccessibilityEvent event);
+        void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info);
+    }
+
+    /**
+     * An abstract class which can be used as a start for CalendarView implementations
+     */
+    abstract static class AbstractCalendarViewDelegate implements CalendarViewDelegate {
+        // The delegator
+        protected CalendarView mDelegator;
+
+        // The context
+        protected Context mContext;
+
+        // The current locale
+        protected Locale mCurrentLocale;
+
+        AbstractCalendarViewDelegate(CalendarView delegator, Context context) {
+            mDelegator = delegator;
+            mContext = context;
+
+            // Initialization based on locale
+            setCurrentLocale(Locale.getDefault());
+        }
+
+        protected void setCurrentLocale(Locale locale) {
+            if (locale.equals(mCurrentLocale)) {
+                return;
+            }
+            mCurrentLocale = locale;
         }
     }
 
     /**
-     * Sets the current locale.
-     *
-     * @param locale The current locale.
+     * A delegate implementing the legacy CalendarView
      */
-    private void setCurrentLocale(Locale locale) {
-        if (locale.equals(mCurrentLocale)) {
-            return;
+    private static class LegacyCalendarViewDelegate extends AbstractCalendarViewDelegate {
+
+        /**
+         * Default value whether to show week number.
+         */
+        private static final boolean DEFAULT_SHOW_WEEK_NUMBER = true;
+
+        /**
+         * The number of milliseconds in a day.e
+         */
+        private static final long MILLIS_IN_DAY = 86400000L;
+
+        /**
+         * The number of day in a week.
+         */
+        private static final int DAYS_PER_WEEK = 7;
+
+        /**
+         * The number of milliseconds in a week.
+         */
+        private static final long MILLIS_IN_WEEK = DAYS_PER_WEEK * MILLIS_IN_DAY;
+
+        /**
+         * Affects when the month selection will change while scrolling upe
+         */
+        private static final int SCROLL_HYST_WEEKS = 2;
+
+        /**
+         * How long the GoTo fling animation should last.
+         */
+        private static final int GOTO_SCROLL_DURATION = 1000;
+
+        /**
+         * The duration of the adjustment upon a user scroll in milliseconds.
+         */
+        private static final int ADJUSTMENT_SCROLL_DURATION = 500;
+
+        /**
+         * How long to wait after receiving an onScrollStateChanged notification
+         * before acting on it.
+         */
+        private static final int SCROLL_CHANGE_DELAY = 40;
+
+        /**
+         * String for parsing dates.
+         */
+        private static final String DATE_FORMAT = "MM/dd/yyyy";
+
+        /**
+         * The default minimal date.
+         */
+        private static final String DEFAULT_MIN_DATE = "01/01/1900";
+
+        /**
+         * The default maximal date.
+         */
+        private static final String DEFAULT_MAX_DATE = "01/01/2100";
+
+        private static final int DEFAULT_SHOWN_WEEK_COUNT = 6;
+
+        private static final int DEFAULT_DATE_TEXT_SIZE = 14;
+
+        private static final int UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH = 6;
+
+        private static final int UNSCALED_WEEK_MIN_VISIBLE_HEIGHT = 12;
+
+        private static final int UNSCALED_LIST_SCROLL_TOP_OFFSET = 2;
+
+        private static final int UNSCALED_BOTTOM_BUFFER = 20;
+
+        private static final int UNSCALED_WEEK_SEPARATOR_LINE_WIDTH = 1;
+
+        private static final int DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID = -1;
+
+        private final int mWeekSeperatorLineWidth;
+
+        private int mDateTextSize;
+
+        private Drawable mSelectedDateVerticalBar;
+
+        private final int mSelectedDateVerticalBarWidth;
+
+        private int mSelectedWeekBackgroundColor;
+
+        private int mFocusedMonthDateColor;
+
+        private int mUnfocusedMonthDateColor;
+
+        private int mWeekSeparatorLineColor;
+
+        private int mWeekNumberColor;
+
+        private int mWeekDayTextAppearanceResId;
+
+        private int mDateTextAppearanceResId;
+
+        /**
+         * The top offset of the weeks list.
+         */
+        private int mListScrollTopOffset = 2;
+
+        /**
+         * The visible height of a week view.
+         */
+        private int mWeekMinVisibleHeight = 12;
+
+        /**
+         * The visible height of a week view.
+         */
+        private int mBottomBuffer = 20;
+
+        /**
+         * The number of shown weeks.
+         */
+        private int mShownWeekCount;
+
+        /**
+         * Flag whether to show the week number.
+         */
+        private boolean mShowWeekNumber;
+
+        /**
+         * The number of day per week to be shown.
+         */
+        private int mDaysPerWeek = 7;
+
+        /**
+         * The friction of the week list while flinging.
+         */
+        private float mFriction = .05f;
+
+        /**
+         * Scale for adjusting velocity of the week list while flinging.
+         */
+        private float mVelocityScale = 0.333f;
+
+        /**
+         * The adapter for the weeks list.
+         */
+        private WeeksAdapter mAdapter;
+
+        /**
+         * The weeks list.
+         */
+        private ListView mListView;
+
+        /**
+         * The name of the month to display.
+         */
+        private TextView mMonthName;
+
+        /**
+         * The header with week day names.
+         */
+        private ViewGroup mDayNamesHeader;
+
+        /**
+         * Cached labels for the week names header.
+         */
+        private String[] mDayLabels;
+
+        /**
+         * The first day of the week.
+         */
+        private int mFirstDayOfWeek;
+
+        /**
+         * Which month should be displayed/highlighted [0-11].
+         */
+        private int mCurrentMonthDisplayed = -1;
+
+        /**
+         * Used for tracking during a scroll.
+         */
+        private long mPreviousScrollPosition;
+
+        /**
+         * Used for tracking which direction the view is scrolling.
+         */
+        private boolean mIsScrollingUp = false;
+
+        /**
+         * The previous scroll state of the weeks ListView.
+         */
+        private int mPreviousScrollState = OnScrollListener.SCROLL_STATE_IDLE;
+
+        /**
+         * The current scroll state of the weeks ListView.
+         */
+        private int mCurrentScrollState = OnScrollListener.SCROLL_STATE_IDLE;
+
+        /**
+         * Listener for changes in the selected day.
+         */
+        private OnDateChangeListener mOnDateChangeListener;
+
+        /**
+         * Command for adjusting the position after a scroll/fling.
+         */
+        private ScrollStateRunnable mScrollStateChangedRunnable = new ScrollStateRunnable();
+
+        /**
+         * Temporary instance to avoid multiple instantiations.
+         */
+        private Calendar mTempDate;
+
+        /**
+         * The first day of the focused month.
+         */
+        private Calendar mFirstDayOfMonth;
+
+        /**
+         * The start date of the range supported by this picker.
+         */
+        private Calendar mMinDate;
+
+        /**
+         * The end date of the range supported by this picker.
+         */
+        private Calendar mMaxDate;
+
+        /**
+         * Date format for parsing dates.
+         */
+        private final java.text.DateFormat mDateFormat = new SimpleDateFormat(DATE_FORMAT);
+
+        LegacyCalendarViewDelegate(CalendarView delegator, Context context, AttributeSet attrs,
+                                   int defStyleAttr, int defStyleRes) {
+            super(delegator, context);
+
+            // initialization based on locale
+            setCurrentLocale(Locale.getDefault());
+
+            TypedArray attributesArray = context.obtainStyledAttributes(attrs,
+                    R.styleable.CalendarView, defStyleAttr, defStyleRes);
+            mShowWeekNumber = attributesArray.getBoolean(R.styleable.CalendarView_showWeekNumber,
+                    DEFAULT_SHOW_WEEK_NUMBER);
+            mFirstDayOfWeek = attributesArray.getInt(R.styleable.CalendarView_firstDayOfWeek,
+                    LocaleData.get(Locale.getDefault()).firstDayOfWeek);
+            String minDate = attributesArray.getString(R.styleable.CalendarView_minDate);
+            if (TextUtils.isEmpty(minDate) || !parseDate(minDate, mMinDate)) {
+                parseDate(DEFAULT_MIN_DATE, mMinDate);
+            }
+            String maxDate = attributesArray.getString(R.styleable.CalendarView_maxDate);
+            if (TextUtils.isEmpty(maxDate) || !parseDate(maxDate, mMaxDate)) {
+                parseDate(DEFAULT_MAX_DATE, mMaxDate);
+            }
+            if (mMaxDate.before(mMinDate)) {
+                throw new IllegalArgumentException("Max date cannot be before min date.");
+            }
+            mShownWeekCount = attributesArray.getInt(R.styleable.CalendarView_shownWeekCount,
+                    DEFAULT_SHOWN_WEEK_COUNT);
+            mSelectedWeekBackgroundColor = attributesArray.getColor(
+                    R.styleable.CalendarView_selectedWeekBackgroundColor, 0);
+            mFocusedMonthDateColor = attributesArray.getColor(
+                    R.styleable.CalendarView_focusedMonthDateColor, 0);
+            mUnfocusedMonthDateColor = attributesArray.getColor(
+                    R.styleable.CalendarView_unfocusedMonthDateColor, 0);
+            mWeekSeparatorLineColor = attributesArray.getColor(
+                    R.styleable.CalendarView_weekSeparatorLineColor, 0);
+            mWeekNumberColor = attributesArray.getColor(R.styleable.CalendarView_weekNumberColor, 0);
+            mSelectedDateVerticalBar = attributesArray.getDrawable(
+                    R.styleable.CalendarView_selectedDateVerticalBar);
+
+            mDateTextAppearanceResId = attributesArray.getResourceId(
+                    R.styleable.CalendarView_dateTextAppearance, R.style.TextAppearance_Small);
+            updateDateTextSize();
+
+            mWeekDayTextAppearanceResId = attributesArray.getResourceId(
+                    R.styleable.CalendarView_weekDayTextAppearance,
+                    DEFAULT_WEEK_DAY_TEXT_APPEARANCE_RES_ID);
+            attributesArray.recycle();
+
+            DisplayMetrics displayMetrics = mDelegator.getResources().getDisplayMetrics();
+            mWeekMinVisibleHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                    UNSCALED_WEEK_MIN_VISIBLE_HEIGHT, displayMetrics);
+            mListScrollTopOffset = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                    UNSCALED_LIST_SCROLL_TOP_OFFSET, displayMetrics);
+            mBottomBuffer = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                    UNSCALED_BOTTOM_BUFFER, displayMetrics);
+            mSelectedDateVerticalBarWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                    UNSCALED_SELECTED_DATE_VERTICAL_BAR_WIDTH, displayMetrics);
+            mWeekSeperatorLineWidth = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                    UNSCALED_WEEK_SEPARATOR_LINE_WIDTH, displayMetrics);
+
+            LayoutInflater layoutInflater = (LayoutInflater) mContext
+                    .getSystemService(Service.LAYOUT_INFLATER_SERVICE);
+            View content = layoutInflater.inflate(R.layout.calendar_view, null, false);
+            mDelegator.addView(content);
+
+            mListView = (ListView) mDelegator.findViewById(R.id.list);
+            mDayNamesHeader = (ViewGroup) content.findViewById(com.android.internal.R.id.day_names);
+            mMonthName = (TextView) content.findViewById(com.android.internal.R.id.month_name);
+
+            setUpHeader();
+            setUpListView();
+            setUpAdapter();
+
+            // go to today or whichever is close to today min or max date
+            mTempDate.setTimeInMillis(System.currentTimeMillis());
+            if (mTempDate.before(mMinDate)) {
+                goTo(mMinDate, false, true, true);
+            } else if (mMaxDate.before(mTempDate)) {
+                goTo(mMaxDate, false, true, true);
+            } else {
+                goTo(mTempDate, false, true, true);
+            }
+
+            mDelegator.invalidate();
         }
 
-        mCurrentLocale = locale;
-
-        mTempDate = getCalendarForLocale(mTempDate, locale);
-        mFirstDayOfMonth = getCalendarForLocale(mFirstDayOfMonth, locale);
-        mMinDate = getCalendarForLocale(mMinDate, locale);
-        mMaxDate = getCalendarForLocale(mMaxDate, locale);
-    }
-
-    /**
-     * Gets a calendar for locale bootstrapped with the value of a given calendar.
-     *
-     * @param oldCalendar The old calendar.
-     * @param locale The locale.
-     */
-    private Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
-        if (oldCalendar == null) {
-            return Calendar.getInstance(locale);
-        } else {
-            final long currentTimeMillis = oldCalendar.getTimeInMillis();
-            Calendar newCalendar = Calendar.getInstance(locale);
-            newCalendar.setTimeInMillis(currentTimeMillis);
-            return newCalendar;
+        @Override
+        public void setShownWeekCount(int count) {
+            if (mShownWeekCount != count) {
+                mShownWeekCount = count;
+                mDelegator.invalidate();
+            }
         }
-    }
 
-    /**
-     * @return True if the <code>firstDate</code> is the same as the <code>
-     * secondDate</code>.
-     */
-    private boolean isSameDate(Calendar firstDate, Calendar secondDate) {
-        return (firstDate.get(Calendar.DAY_OF_YEAR) == secondDate.get(Calendar.DAY_OF_YEAR)
-                && firstDate.get(Calendar.YEAR) == secondDate.get(Calendar.YEAR));
-    }
+        @Override
+        public int getShownWeekCount() {
+            return mShownWeekCount;
+        }
 
-    /**
-     * Creates a new adapter if necessary and sets up its parameters.
-     */
-    private void setUpAdapter() {
-        if (mAdapter == null) {
-            mAdapter = new WeeksAdapter();
-            mAdapter.registerDataSetObserver(new DataSetObserver() {
-                @Override
-                public void onChanged() {
-                    if (mOnDateChangeListener != null) {
-                        Calendar selectedDay = mAdapter.getSelectedDay();
-                        mOnDateChangeListener.onSelectedDayChange(CalendarView.this,
-                                selectedDay.get(Calendar.YEAR),
-                                selectedDay.get(Calendar.MONTH),
-                                selectedDay.get(Calendar.DAY_OF_MONTH));
+        @Override
+        public void setSelectedWeekBackgroundColor(int color) {
+            if (mSelectedWeekBackgroundColor != color) {
+                mSelectedWeekBackgroundColor = color;
+                final int childCount = mListView.getChildCount();
+                for (int i = 0; i < childCount; i++) {
+                    WeekView weekView = (WeekView) mListView.getChildAt(i);
+                    if (weekView.mHasSelectedDay) {
+                        weekView.invalidate();
                     }
                 }
-            });
-            mListView.setAdapter(mAdapter);
-        }
-
-        // refresh the view with the new parameters
-        mAdapter.notifyDataSetChanged();
-    }
-
-    /**
-     * Sets up the strings to be used by the header.
-     */
-    private void setUpHeader() {
-        final String[] tinyWeekdayNames = LocaleData.get(Locale.getDefault()).tinyWeekdayNames;
-        mDayLabels = new String[mDaysPerWeek];
-        for (int i = 0; i < mDaysPerWeek; i++) {
-            final int j = i + mFirstDayOfWeek;
-            final int calendarDay = (j > Calendar.SATURDAY) ? j - Calendar.SATURDAY : j;
-            mDayLabels[i] = tinyWeekdayNames[calendarDay];
-        }
-        // Deal with week number
-        TextView label = (TextView) mDayNamesHeader.getChildAt(0);
-        if (mShowWeekNumber) {
-            label.setVisibility(View.VISIBLE);
-        } else {
-            label.setVisibility(View.GONE);
-        }
-        // Deal with day labels
-        final int count = mDayNamesHeader.getChildCount();
-        for (int i = 0; i < count - 1; i++) {
-            label = (TextView) mDayNamesHeader.getChildAt(i + 1);
-            if (mWeekDayTextAppearanceResId > -1) {
-                label.setTextAppearance(mContext, mWeekDayTextAppearanceResId);
             }
-            if (i < mDaysPerWeek) {
-                label.setText(mDayLabels[i]);
+        }
+
+        @Override
+        public int getSelectedWeekBackgroundColor() {
+            return mSelectedWeekBackgroundColor;
+        }
+
+        @Override
+        public void setFocusedMonthDateColor(int color) {
+            if (mFocusedMonthDateColor != color) {
+                mFocusedMonthDateColor = color;
+                final int childCount = mListView.getChildCount();
+                for (int i = 0; i < childCount; i++) {
+                    WeekView weekView = (WeekView) mListView.getChildAt(i);
+                    if (weekView.mHasFocusedDay) {
+                        weekView.invalidate();
+                    }
+                }
+            }
+        }
+
+        @Override
+        public int getFocusedMonthDateColor() {
+            return mFocusedMonthDateColor;
+        }
+
+        @Override
+        public void setUnfocusedMonthDateColor(int color) {
+            if (mUnfocusedMonthDateColor != color) {
+                mUnfocusedMonthDateColor = color;
+                final int childCount = mListView.getChildCount();
+                for (int i = 0; i < childCount; i++) {
+                    WeekView weekView = (WeekView) mListView.getChildAt(i);
+                    if (weekView.mHasUnfocusedDay) {
+                        weekView.invalidate();
+                    }
+                }
+            }
+        }
+
+        @Override
+        public int getUnfocusedMonthDateColor() {
+            return mFocusedMonthDateColor;
+        }
+
+        @Override
+        public void setWeekNumberColor(int color) {
+            if (mWeekNumberColor != color) {
+                mWeekNumberColor = color;
+                if (mShowWeekNumber) {
+                    invalidateAllWeekViews();
+                }
+            }
+        }
+
+        @Override
+        public int getWeekNumberColor() {
+            return mWeekNumberColor;
+        }
+
+        @Override
+        public void setWeekSeparatorLineColor(int color) {
+            if (mWeekSeparatorLineColor != color) {
+                mWeekSeparatorLineColor = color;
+                invalidateAllWeekViews();
+            }
+        }
+
+        @Override
+        public int getWeekSeparatorLineColor() {
+            return mWeekSeparatorLineColor;
+        }
+
+        @Override
+        public void setSelectedDateVerticalBar(int resourceId) {
+            Drawable drawable = mDelegator.getContext().getDrawable(resourceId);
+            setSelectedDateVerticalBar(drawable);
+        }
+
+        @Override
+        public void setSelectedDateVerticalBar(Drawable drawable) {
+            if (mSelectedDateVerticalBar != drawable) {
+                mSelectedDateVerticalBar = drawable;
+                final int childCount = mListView.getChildCount();
+                for (int i = 0; i < childCount; i++) {
+                    WeekView weekView = (WeekView) mListView.getChildAt(i);
+                    if (weekView.mHasSelectedDay) {
+                        weekView.invalidate();
+                    }
+                }
+            }
+        }
+
+        @Override
+        public Drawable getSelectedDateVerticalBar() {
+            return mSelectedDateVerticalBar;
+        }
+
+        @Override
+        public void setWeekDayTextAppearance(int resourceId) {
+            if (mWeekDayTextAppearanceResId != resourceId) {
+                mWeekDayTextAppearanceResId = resourceId;
+                setUpHeader();
+            }
+        }
+
+        @Override
+        public int getWeekDayTextAppearance() {
+            return mWeekDayTextAppearanceResId;
+        }
+
+        @Override
+        public void setDateTextAppearance(int resourceId) {
+            if (mDateTextAppearanceResId != resourceId) {
+                mDateTextAppearanceResId = resourceId;
+                updateDateTextSize();
+                invalidateAllWeekViews();
+            }
+        }
+
+        @Override
+        public int getDateTextAppearance() {
+            return mDateTextAppearanceResId;
+        }
+
+        @Override
+        public void setEnabled(boolean enabled) {
+            mListView.setEnabled(enabled);
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return mListView.isEnabled();
+        }
+
+        @Override
+        public void setMinDate(long minDate) {
+            mTempDate.setTimeInMillis(minDate);
+            if (isSameDate(mTempDate, mMinDate)) {
+                return;
+            }
+            mMinDate.setTimeInMillis(minDate);
+            // make sure the current date is not earlier than
+            // the new min date since the latter is used for
+            // calculating the indices in the adapter thus
+            // avoiding out of bounds error
+            Calendar date = mAdapter.mSelectedDate;
+            if (date.before(mMinDate)) {
+                mAdapter.setSelectedDay(mMinDate);
+            }
+            // reinitialize the adapter since its range depends on min date
+            mAdapter.init();
+            if (date.before(mMinDate)) {
+                setDate(mTempDate.getTimeInMillis());
+            } else {
+                // we go to the current date to force the ListView to query its
+                // adapter for the shown views since we have changed the adapter
+                // range and the base from which the later calculates item indices
+                // note that calling setDate will not work since the date is the same
+                goTo(date, false, true, false);
+            }
+        }
+
+        @Override
+        public long getMinDate() {
+            return mMinDate.getTimeInMillis();
+        }
+
+        @Override
+        public void setMaxDate(long maxDate) {
+            mTempDate.setTimeInMillis(maxDate);
+            if (isSameDate(mTempDate, mMaxDate)) {
+                return;
+            }
+            mMaxDate.setTimeInMillis(maxDate);
+            // reinitialize the adapter since its range depends on max date
+            mAdapter.init();
+            Calendar date = mAdapter.mSelectedDate;
+            if (date.after(mMaxDate)) {
+                setDate(mMaxDate.getTimeInMillis());
+            } else {
+                // we go to the current date to force the ListView to query its
+                // adapter for the shown views since we have changed the adapter
+                // range and the base from which the later calculates item indices
+                // note that calling setDate will not work since the date is the same
+                goTo(date, false, true, false);
+            }
+        }
+
+        @Override
+        public long getMaxDate() {
+            return mMaxDate.getTimeInMillis();
+        }
+
+        @Override
+        public void setShowWeekNumber(boolean showWeekNumber) {
+            if (mShowWeekNumber == showWeekNumber) {
+                return;
+            }
+            mShowWeekNumber = showWeekNumber;
+            mAdapter.notifyDataSetChanged();
+            setUpHeader();
+        }
+
+        @Override
+        public boolean getShowWeekNumber() {
+            return mShowWeekNumber;
+        }
+
+        @Override
+        public void setFirstDayOfWeek(int firstDayOfWeek) {
+            if (mFirstDayOfWeek == firstDayOfWeek) {
+                return;
+            }
+            mFirstDayOfWeek = firstDayOfWeek;
+            mAdapter.init();
+            mAdapter.notifyDataSetChanged();
+            setUpHeader();
+        }
+
+        @Override
+        public int getFirstDayOfWeek() {
+            return mFirstDayOfWeek;
+        }
+
+        @Override
+        public void setDate(long date) {
+            setDate(date, false, false);
+        }
+
+        @Override
+        public void setDate(long date, boolean animate, boolean center) {
+            mTempDate.setTimeInMillis(date);
+            if (isSameDate(mTempDate, mAdapter.mSelectedDate)) {
+                return;
+            }
+            goTo(mTempDate, animate, true, center);
+        }
+
+        @Override
+        public long getDate() {
+            return mAdapter.mSelectedDate.getTimeInMillis();
+        }
+
+        @Override
+        public void setOnDateChangeListener(OnDateChangeListener listener) {
+            mOnDateChangeListener = listener;
+        }
+
+        @Override
+        public void onConfigurationChanged(Configuration newConfig) {
+            setCurrentLocale(newConfig.locale);
+        }
+
+        @Override
+        public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+            event.setClassName(CalendarView.class.getName());
+        }
+
+        @Override
+        public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+            info.setClassName(CalendarView.class.getName());
+        }
+
+        /**
+         * Sets the current locale.
+         *
+         * @param locale The current locale.
+         */
+        @Override
+        protected void setCurrentLocale(Locale locale) {
+            super.setCurrentLocale(locale);
+
+            mTempDate = getCalendarForLocale(mTempDate, locale);
+            mFirstDayOfMonth = getCalendarForLocale(mFirstDayOfMonth, locale);
+            mMinDate = getCalendarForLocale(mMinDate, locale);
+            mMaxDate = getCalendarForLocale(mMaxDate, locale);
+        }
+        private void updateDateTextSize() {
+            TypedArray dateTextAppearance = mDelegator.getContext().obtainStyledAttributes(
+                    mDateTextAppearanceResId, R.styleable.TextAppearance);
+            mDateTextSize = dateTextAppearance.getDimensionPixelSize(
+                    R.styleable.TextAppearance_textSize, DEFAULT_DATE_TEXT_SIZE);
+            dateTextAppearance.recycle();
+        }
+
+        /**
+         * Invalidates all week views.
+         */
+        private void invalidateAllWeekViews() {
+            final int childCount = mListView.getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                View view = mListView.getChildAt(i);
+                view.invalidate();
+            }
+        }
+
+        /**
+         * Gets a calendar for locale bootstrapped with the value of a given calendar.
+         *
+         * @param oldCalendar The old calendar.
+         * @param locale The locale.
+         */
+        private static Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
+            if (oldCalendar == null) {
+                return Calendar.getInstance(locale);
+            } else {
+                final long currentTimeMillis = oldCalendar.getTimeInMillis();
+                Calendar newCalendar = Calendar.getInstance(locale);
+                newCalendar.setTimeInMillis(currentTimeMillis);
+                return newCalendar;
+            }
+        }
+
+        /**
+         * @return True if the <code>firstDate</code> is the same as the <code>
+         * secondDate</code>.
+         */
+        private static boolean isSameDate(Calendar firstDate, Calendar secondDate) {
+            return (firstDate.get(Calendar.DAY_OF_YEAR) == secondDate.get(Calendar.DAY_OF_YEAR)
+                    && firstDate.get(Calendar.YEAR) == secondDate.get(Calendar.YEAR));
+        }
+
+        /**
+         * Creates a new adapter if necessary and sets up its parameters.
+         */
+        private void setUpAdapter() {
+            if (mAdapter == null) {
+                mAdapter = new WeeksAdapter(mContext);
+                mAdapter.registerDataSetObserver(new DataSetObserver() {
+                    @Override
+                    public void onChanged() {
+                        if (mOnDateChangeListener != null) {
+                            Calendar selectedDay = mAdapter.getSelectedDay();
+                            mOnDateChangeListener.onSelectedDayChange(mDelegator,
+                                    selectedDay.get(Calendar.YEAR),
+                                    selectedDay.get(Calendar.MONTH),
+                                    selectedDay.get(Calendar.DAY_OF_MONTH));
+                        }
+                    }
+                });
+                mListView.setAdapter(mAdapter);
+            }
+
+            // refresh the view with the new parameters
+            mAdapter.notifyDataSetChanged();
+        }
+
+        /**
+         * Sets up the strings to be used by the header.
+         */
+        private void setUpHeader() {
+            mDayLabels = new String[mDaysPerWeek];
+            for (int i = mFirstDayOfWeek, count = mFirstDayOfWeek + mDaysPerWeek; i < count; i++) {
+                int calendarDay = (i > Calendar.SATURDAY) ? i - Calendar.SATURDAY : i;
+                mDayLabels[i - mFirstDayOfWeek] = DateUtils.getDayOfWeekString(calendarDay,
+                        DateUtils.LENGTH_SHORTEST);
+            }
+
+            TextView label = (TextView) mDayNamesHeader.getChildAt(0);
+            if (mShowWeekNumber) {
                 label.setVisibility(View.VISIBLE);
             } else {
                 label.setVisibility(View.GONE);
             }
-        }
-        mDayNamesHeader.invalidate();
-    }
-
-    /**
-     * Sets all the required fields for the list view.
-     */
-    private void setUpListView() {
-        // Configure the listview
-        mListView.setDivider(null);
-        mListView.setItemsCanFocus(true);
-        mListView.setVerticalScrollBarEnabled(false);
-        mListView.setOnScrollListener(new OnScrollListener() {
-            public void onScrollStateChanged(AbsListView view, int scrollState) {
-                CalendarView.this.onScrollStateChanged(view, scrollState);
-            }
-
-            public void onScroll(
-                    AbsListView view, int firstVisibleItem, int visibleItemCount,
-                    int totalItemCount) {
-                CalendarView.this.onScroll(view, firstVisibleItem, visibleItemCount,
-                        totalItemCount);
-            }
-        });
-        // Make the scrolling behavior nicer
-        mListView.setFriction(mFriction);
-        mListView.setVelocityScale(mVelocityScale);
-    }
-
-    /**
-     * This moves to the specified time in the view. If the time is not already
-     * in range it will move the list so that the first of the month containing
-     * the time is at the top of the view. If the new time is already in view
-     * the list will not be scrolled unless forceScroll is true. This time may
-     * optionally be highlighted as selected as well.
-     *
-     * @param date The time to move to.
-     * @param animate Whether to scroll to the given time or just redraw at the
-     *            new location.
-     * @param setSelected Whether to set the given time as selected.
-     * @param forceScroll Whether to recenter even if the time is already
-     *            visible.
-     *
-     * @throws IllegalArgumentException of the provided date is before the
-     *        range start of after the range end.
-     */
-    private void goTo(Calendar date, boolean animate, boolean setSelected, boolean forceScroll) {
-        if (date.before(mMinDate) || date.after(mMaxDate)) {
-            throw new IllegalArgumentException("Time not between " + mMinDate.getTime()
-                    + " and " + mMaxDate.getTime());
-        }
-        // Find the first and last entirely visible weeks
-        int firstFullyVisiblePosition = mListView.getFirstVisiblePosition();
-        View firstChild = mListView.getChildAt(0);
-        if (firstChild != null && firstChild.getTop() < 0) {
-            firstFullyVisiblePosition++;
-        }
-        int lastFullyVisiblePosition = firstFullyVisiblePosition + mShownWeekCount - 1;
-        if (firstChild != null && firstChild.getTop() > mBottomBuffer) {
-            lastFullyVisiblePosition--;
-        }
-        if (setSelected) {
-            mAdapter.setSelectedDay(date);
-        }
-        // Get the week we're going to
-        int position = getWeeksSinceMinDate(date);
-
-        // Check if the selected day is now outside of our visible range
-        // and if so scroll to the month that contains it
-        if (position < firstFullyVisiblePosition || position > lastFullyVisiblePosition
-                || forceScroll) {
-            mFirstDayOfMonth.setTimeInMillis(date.getTimeInMillis());
-            mFirstDayOfMonth.set(Calendar.DAY_OF_MONTH, 1);
-
-            setMonthDisplayed(mFirstDayOfMonth);
-
-            // the earliest time we can scroll to is the min date
-            if (mFirstDayOfMonth.before(mMinDate)) {
-                position = 0;
-            } else {
-                position = getWeeksSinceMinDate(mFirstDayOfMonth);
-            }
-
-            mPreviousScrollState = OnScrollListener.SCROLL_STATE_FLING;
-            if (animate) {
-                mListView.smoothScrollToPositionFromTop(position, mListScrollTopOffset,
-                        GOTO_SCROLL_DURATION);
-            } else {
-                mListView.setSelectionFromTop(position, mListScrollTopOffset);
-                // Perform any after scroll operations that are needed
-                onScrollStateChanged(mListView, OnScrollListener.SCROLL_STATE_IDLE);
-            }
-        } else if (setSelected) {
-            // Otherwise just set the selection
-            setMonthDisplayed(date);
-        }
-    }
-
-    /**
-     * Parses the given <code>date</code> and in case of success sets
-     * the result to the <code>outDate</code>.
-     *
-     * @return True if the date was parsed.
-     */
-    private boolean parseDate(String date, Calendar outDate) {
-        try {
-            outDate.setTime(mDateFormat.parse(date));
-            return true;
-        } catch (ParseException e) {
-            Log.w(LOG_TAG, "Date: " + date + " not in format: " + DATE_FORMAT);
-            return false;
-        }
-    }
-
-    /**
-     * Called when a <code>view</code> transitions to a new <code>scrollState
-     * </code>.
-     */
-    private void onScrollStateChanged(AbsListView view, int scrollState) {
-        mScrollStateChangedRunnable.doScrollStateChange(view, scrollState);
-    }
-
-    /**
-     * Updates the title and selected month if the <code>view</code> has moved to a new
-     * month.
-     */
-    private void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
-            int totalItemCount) {
-        WeekView child = (WeekView) view.getChildAt(0);
-        if (child == null) {
-            return;
-        }
-
-        // Figure out where we are
-        long currScroll = view.getFirstVisiblePosition() * child.getHeight() - child.getBottom();
-
-        // If we have moved since our last call update the direction
-        if (currScroll < mPreviousScrollPosition) {
-            mIsScrollingUp = true;
-        } else if (currScroll > mPreviousScrollPosition) {
-            mIsScrollingUp = false;
-        } else {
-            return;
-        }
-
-        // Use some hysteresis for checking which month to highlight. This
-        // causes the month to transition when two full weeks of a month are
-        // visible when scrolling up, and when the first day in a month reaches
-        // the top of the screen when scrolling down.
-        int offset = child.getBottom() < mWeekMinVisibleHeight ? 1 : 0;
-        if (mIsScrollingUp) {
-            child = (WeekView) view.getChildAt(SCROLL_HYST_WEEKS + offset);
-        } else if (offset != 0) {
-            child = (WeekView) view.getChildAt(offset);
-        }
-
-        if (child != null) {
-            // Find out which month we're moving into
-            int month;
-            if (mIsScrollingUp) {
-                month = child.getMonthOfFirstWeekDay();
-            } else {
-                month = child.getMonthOfLastWeekDay();
-            }
-
-            // And how it relates to our current highlighted month
-            int monthDiff;
-            if (mCurrentMonthDisplayed == 11 && month == 0) {
-                monthDiff = 1;
-            } else if (mCurrentMonthDisplayed == 0 && month == 11) {
-                monthDiff = -1;
-            } else {
-                monthDiff = month - mCurrentMonthDisplayed;
-            }
-
-            // Only switch months if we're scrolling away from the currently
-            // selected month
-            if ((!mIsScrollingUp && monthDiff > 0) || (mIsScrollingUp && monthDiff < 0)) {
-                Calendar firstDay = child.getFirstDay();
-                if (mIsScrollingUp) {
-                    firstDay.add(Calendar.DAY_OF_MONTH, -DAYS_PER_WEEK);
-                } else {
-                    firstDay.add(Calendar.DAY_OF_MONTH, DAYS_PER_WEEK);
+            for (int i = 1, count = mDayNamesHeader.getChildCount(); i < count; i++) {
+                label = (TextView) mDayNamesHeader.getChildAt(i);
+                if (mWeekDayTextAppearanceResId > -1) {
+                    label.setTextAppearance(mContext, mWeekDayTextAppearanceResId);
                 }
-                setMonthDisplayed(firstDay);
+                if (i < mDaysPerWeek + 1) {
+                    label.setText(mDayLabels[i - 1]);
+                    label.setVisibility(View.VISIBLE);
+                } else {
+                    label.setVisibility(View.GONE);
+                }
             }
+            mDayNamesHeader.invalidate();
         }
 
-        mPreviousScrollPosition = currScroll;
-        mPreviousScrollState = mCurrentScrollState;
-    }
-
-    /**
-     * Sets the month displayed at the top of this view based on time. Override
-     * to add custom events when the title is changed.
-     *
-     * @param calendar A day in the new focus month.
-     */
-    private void setMonthDisplayed(Calendar calendar) {
-        mCurrentMonthDisplayed = calendar.get(Calendar.MONTH);
-        mAdapter.setFocusMonth(mCurrentMonthDisplayed);
-        final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY
-                | DateUtils.FORMAT_SHOW_YEAR;
-        final long millis = calendar.getTimeInMillis();
-        String newMonthName = DateUtils.formatDateRange(mContext, millis, millis, flags);
-        mMonthName.setText(newMonthName);
-        mMonthName.invalidate();
-    }
-
-    /**
-     * @return Returns the number of weeks between the current <code>date</code>
-     *         and the <code>mMinDate</code>.
-     */
-    private int getWeeksSinceMinDate(Calendar date) {
-        if (date.before(mMinDate)) {
-            throw new IllegalArgumentException("fromDate: " + mMinDate.getTime()
-                    + " does not precede toDate: " + date.getTime());
-        }
-        long endTimeMillis = date.getTimeInMillis()
-                + date.getTimeZone().getOffset(date.getTimeInMillis());
-        long startTimeMillis = mMinDate.getTimeInMillis()
-                + mMinDate.getTimeZone().getOffset(mMinDate.getTimeInMillis());
-        long dayOffsetMillis = (mMinDate.get(Calendar.DAY_OF_WEEK) - mFirstDayOfWeek)
-                * MILLIS_IN_DAY;
-        return (int) ((endTimeMillis - startTimeMillis + dayOffsetMillis) / MILLIS_IN_WEEK);
-    }
-
-    /**
-     * Command responsible for acting upon scroll state changes.
-     */
-    private class ScrollStateRunnable implements Runnable {
-        private AbsListView mView;
-
-        private int mNewState;
-
         /**
-         * Sets up the runnable with a short delay in case the scroll state
-         * immediately changes again.
-         *
-         * @param view The list view that changed state
-         * @param scrollState The new state it changed to
+         * Sets all the required fields for the list view.
          */
-        public void doScrollStateChange(AbsListView view, int scrollState) {
-            mView = view;
-            mNewState = scrollState;
-            removeCallbacks(this);
-            postDelayed(this, SCROLL_CHANGE_DELAY);
+        private void setUpListView() {
+            // Configure the listview
+            mListView.setDivider(null);
+            mListView.setItemsCanFocus(true);
+            mListView.setVerticalScrollBarEnabled(false);
+            mListView.setOnScrollListener(new OnScrollListener() {
+                public void onScrollStateChanged(AbsListView view, int scrollState) {
+                    LegacyCalendarViewDelegate.this.onScrollStateChanged(view, scrollState);
+                }
+
+                public void onScroll(
+                        AbsListView view, int firstVisibleItem, int visibleItemCount,
+                        int totalItemCount) {
+                    LegacyCalendarViewDelegate.this.onScroll(view, firstVisibleItem,
+                            visibleItemCount, totalItemCount);
+                }
+            });
+            // Make the scrolling behavior nicer
+            mListView.setFriction(mFriction);
+            mListView.setVelocityScale(mVelocityScale);
         }
 
-        public void run() {
-            mCurrentScrollState = mNewState;
-            // Fix the position after a scroll or a fling ends
-            if (mNewState == OnScrollListener.SCROLL_STATE_IDLE
-                    && mPreviousScrollState != OnScrollListener.SCROLL_STATE_IDLE) {
-                View child = mView.getChildAt(0);
-                if (child == null) {
-                    // The view is no longer visible, just return
-                    return;
+        /**
+         * This moves to the specified time in the view. If the time is not already
+         * in range it will move the list so that the first of the month containing
+         * the time is at the top of the view. If the new time is already in view
+         * the list will not be scrolled unless forceScroll is true. This time may
+         * optionally be highlighted as selected as well.
+         *
+         * @param date The time to move to.
+         * @param animate Whether to scroll to the given time or just redraw at the
+         *            new location.
+         * @param setSelected Whether to set the given time as selected.
+         * @param forceScroll Whether to recenter even if the time is already
+         *            visible.
+         *
+         * @throws IllegalArgumentException of the provided date is before the
+         *        range start of after the range end.
+         */
+        private void goTo(Calendar date, boolean animate, boolean setSelected,
+                boolean forceScroll) {
+            if (date.before(mMinDate) || date.after(mMaxDate)) {
+                throw new IllegalArgumentException("Time not between " + mMinDate.getTime()
+                        + " and " + mMaxDate.getTime());
+            }
+            // Find the first and last entirely visible weeks
+            int firstFullyVisiblePosition = mListView.getFirstVisiblePosition();
+            View firstChild = mListView.getChildAt(0);
+            if (firstChild != null && firstChild.getTop() < 0) {
+                firstFullyVisiblePosition++;
+            }
+            int lastFullyVisiblePosition = firstFullyVisiblePosition + mShownWeekCount - 1;
+            if (firstChild != null && firstChild.getTop() > mBottomBuffer) {
+                lastFullyVisiblePosition--;
+            }
+            if (setSelected) {
+                mAdapter.setSelectedDay(date);
+            }
+            // Get the week we're going to
+            int position = getWeeksSinceMinDate(date);
+
+            // Check if the selected day is now outside of our visible range
+            // and if so scroll to the month that contains it
+            if (position < firstFullyVisiblePosition || position > lastFullyVisiblePosition
+                    || forceScroll) {
+                mFirstDayOfMonth.setTimeInMillis(date.getTimeInMillis());
+                mFirstDayOfMonth.set(Calendar.DAY_OF_MONTH, 1);
+
+                setMonthDisplayed(mFirstDayOfMonth);
+
+                // the earliest time we can scroll to is the min date
+                if (mFirstDayOfMonth.before(mMinDate)) {
+                    position = 0;
+                } else {
+                    position = getWeeksSinceMinDate(mFirstDayOfMonth);
                 }
-                int dist = child.getBottom() - mListScrollTopOffset;
-                if (dist > mListScrollTopOffset) {
+
+                mPreviousScrollState = OnScrollListener.SCROLL_STATE_FLING;
+                if (animate) {
+                    mListView.smoothScrollToPositionFromTop(position, mListScrollTopOffset,
+                            GOTO_SCROLL_DURATION);
+                } else {
+                    mListView.setSelectionFromTop(position, mListScrollTopOffset);
+                    // Perform any after scroll operations that are needed
+                    onScrollStateChanged(mListView, OnScrollListener.SCROLL_STATE_IDLE);
+                }
+            } else if (setSelected) {
+                // Otherwise just set the selection
+                setMonthDisplayed(date);
+            }
+        }
+
+        /**
+         * Parses the given <code>date</code> and in case of success sets
+         * the result to the <code>outDate</code>.
+         *
+         * @return True if the date was parsed.
+         */
+        private boolean parseDate(String date, Calendar outDate) {
+            try {
+                outDate.setTime(mDateFormat.parse(date));
+                return true;
+            } catch (ParseException e) {
+                Log.w(LOG_TAG, "Date: " + date + " not in format: " + DATE_FORMAT);
+                return false;
+            }
+        }
+
+        /**
+         * Called when a <code>view</code> transitions to a new <code>scrollState
+         * </code>.
+         */
+        private void onScrollStateChanged(AbsListView view, int scrollState) {
+            mScrollStateChangedRunnable.doScrollStateChange(view, scrollState);
+        }
+
+        /**
+         * Updates the title and selected month if the <code>view</code> has moved to a new
+         * month.
+         */
+        private void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
+                              int totalItemCount) {
+            WeekView child = (WeekView) view.getChildAt(0);
+            if (child == null) {
+                return;
+            }
+
+            // Figure out where we are
+            long currScroll =
+                    view.getFirstVisiblePosition() * child.getHeight() - child.getBottom();
+
+            // If we have moved since our last call update the direction
+            if (currScroll < mPreviousScrollPosition) {
+                mIsScrollingUp = true;
+            } else if (currScroll > mPreviousScrollPosition) {
+                mIsScrollingUp = false;
+            } else {
+                return;
+            }
+
+            // Use some hysteresis for checking which month to highlight. This
+            // causes the month to transition when two full weeks of a month are
+            // visible when scrolling up, and when the first day in a month reaches
+            // the top of the screen when scrolling down.
+            int offset = child.getBottom() < mWeekMinVisibleHeight ? 1 : 0;
+            if (mIsScrollingUp) {
+                child = (WeekView) view.getChildAt(SCROLL_HYST_WEEKS + offset);
+            } else if (offset != 0) {
+                child = (WeekView) view.getChildAt(offset);
+            }
+
+            if (child != null) {
+                // Find out which month we're moving into
+                int month;
+                if (mIsScrollingUp) {
+                    month = child.getMonthOfFirstWeekDay();
+                } else {
+                    month = child.getMonthOfLastWeekDay();
+                }
+
+                // And how it relates to our current highlighted month
+                int monthDiff;
+                if (mCurrentMonthDisplayed == 11 && month == 0) {
+                    monthDiff = 1;
+                } else if (mCurrentMonthDisplayed == 0 && month == 11) {
+                    monthDiff = -1;
+                } else {
+                    monthDiff = month - mCurrentMonthDisplayed;
+                }
+
+                // Only switch months if we're scrolling away from the currently
+                // selected month
+                if ((!mIsScrollingUp && monthDiff > 0) || (mIsScrollingUp && monthDiff < 0)) {
+                    Calendar firstDay = child.getFirstDay();
                     if (mIsScrollingUp) {
-                        mView.smoothScrollBy(dist - child.getHeight(), ADJUSTMENT_SCROLL_DURATION);
+                        firstDay.add(Calendar.DAY_OF_MONTH, -DAYS_PER_WEEK);
                     } else {
-                        mView.smoothScrollBy(dist, ADJUSTMENT_SCROLL_DURATION);
+                        firstDay.add(Calendar.DAY_OF_MONTH, DAYS_PER_WEEK);
+                    }
+                    setMonthDisplayed(firstDay);
+                }
+            }
+            mPreviousScrollPosition = currScroll;
+            mPreviousScrollState = mCurrentScrollState;
+        }
+
+        /**
+         * Sets the month displayed at the top of this view based on time. Override
+         * to add custom events when the title is changed.
+         *
+         * @param calendar A day in the new focus month.
+         */
+        private void setMonthDisplayed(Calendar calendar) {
+            mCurrentMonthDisplayed = calendar.get(Calendar.MONTH);
+            mAdapter.setFocusMonth(mCurrentMonthDisplayed);
+            final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY
+                    | DateUtils.FORMAT_SHOW_YEAR;
+            final long millis = calendar.getTimeInMillis();
+            String newMonthName = DateUtils.formatDateRange(mContext, millis, millis, flags);
+            mMonthName.setText(newMonthName);
+            mMonthName.invalidate();
+        }
+
+        /**
+         * @return Returns the number of weeks between the current <code>date</code>
+         *         and the <code>mMinDate</code>.
+         */
+        private int getWeeksSinceMinDate(Calendar date) {
+            if (date.before(mMinDate)) {
+                throw new IllegalArgumentException("fromDate: " + mMinDate.getTime()
+                        + " does not precede toDate: " + date.getTime());
+            }
+            long endTimeMillis = date.getTimeInMillis()
+                    + date.getTimeZone().getOffset(date.getTimeInMillis());
+            long startTimeMillis = mMinDate.getTimeInMillis()
+                    + mMinDate.getTimeZone().getOffset(mMinDate.getTimeInMillis());
+            long dayOffsetMillis = (mMinDate.get(Calendar.DAY_OF_WEEK) - mFirstDayOfWeek)
+                    * MILLIS_IN_DAY;
+            return (int) ((endTimeMillis - startTimeMillis + dayOffsetMillis) / MILLIS_IN_WEEK);
+        }
+
+        /**
+         * Command responsible for acting upon scroll state changes.
+         */
+        private class ScrollStateRunnable implements Runnable {
+            private AbsListView mView;
+
+            private int mNewState;
+
+            /**
+             * Sets up the runnable with a short delay in case the scroll state
+             * immediately changes again.
+             *
+             * @param view The list view that changed state
+             * @param scrollState The new state it changed to
+             */
+            public void doScrollStateChange(AbsListView view, int scrollState) {
+                mView = view;
+                mNewState = scrollState;
+                mDelegator.removeCallbacks(this);
+                mDelegator.postDelayed(this, SCROLL_CHANGE_DELAY);
+            }
+
+            public void run() {
+                mCurrentScrollState = mNewState;
+                // Fix the position after a scroll or a fling ends
+                if (mNewState == OnScrollListener.SCROLL_STATE_IDLE
+                        && mPreviousScrollState != OnScrollListener.SCROLL_STATE_IDLE) {
+                    View child = mView.getChildAt(0);
+                    if (child == null) {
+                        // The view is no longer visible, just return
+                        return;
+                    }
+                    int dist = child.getBottom() - mListScrollTopOffset;
+                    if (dist > mListScrollTopOffset) {
+                        if (mIsScrollingUp) {
+                            mView.smoothScrollBy(dist - child.getHeight(),
+                                    ADJUSTMENT_SCROLL_DURATION);
+                        } else {
+                            mView.smoothScrollBy(dist, ADJUSTMENT_SCROLL_DURATION);
+                        }
                     }
                 }
+                mPreviousScrollState = mNewState;
             }
-            mPreviousScrollState = mNewState;
-        }
-    }
-
-    /**
-     * <p>
-     * This is a specialized adapter for creating a list of weeks with
-     * selectable days. It can be configured to display the week number, start
-     * the week on a given day, show a reduced number of days, or display an
-     * arbitrary number of weeks at a time.
-     * </p>
-     */
-    private class WeeksAdapter extends BaseAdapter implements OnTouchListener {
-        private final Calendar mSelectedDate = Calendar.getInstance();
-        private final GestureDetector mGestureDetector;
-
-        private int mSelectedWeek;
-
-        private int mFocusedMonth;
-
-        private int mTotalWeekCount;
-
-        public WeeksAdapter() {
-            mGestureDetector = new GestureDetector(mContext, new CalendarGestureListener());
-            init();
         }
 
         /**
-         * Set up the gesture detector and selected time
+         * <p>
+         * This is a specialized adapter for creating a list of weeks with
+         * selectable days. It can be configured to display the week number, start
+         * the week on a given day, show a reduced number of days, or display an
+         * arbitrary number of weeks at a time.
+         * </p>
          */
-        private void init() {
-            mSelectedWeek = getWeeksSinceMinDate(mSelectedDate);
-            mTotalWeekCount = getWeeksSinceMinDate(mMaxDate);
-            if (mMinDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek
-                || mMaxDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek) {
-                mTotalWeekCount++;
-            }
-            notifyDataSetChanged();
-        }
+        private class WeeksAdapter extends BaseAdapter implements OnTouchListener {
 
-        /**
-         * Updates the selected day and related parameters.
-         *
-         * @param selectedDay The time to highlight
-         */
-        public void setSelectedDay(Calendar selectedDay) {
-            if (selectedDay.get(Calendar.DAY_OF_YEAR) == mSelectedDate.get(Calendar.DAY_OF_YEAR)
-                    && selectedDay.get(Calendar.YEAR) == mSelectedDate.get(Calendar.YEAR)) {
-                return;
-            }
-            mSelectedDate.setTimeInMillis(selectedDay.getTimeInMillis());
-            mSelectedWeek = getWeeksSinceMinDate(mSelectedDate);
-            mFocusedMonth = mSelectedDate.get(Calendar.MONTH);
-            notifyDataSetChanged();
-        }
+            private int mSelectedWeek;
 
-        /**
-         * @return The selected day of month.
-         */
-        public Calendar getSelectedDay() {
-            return mSelectedDate;
-        }
+            private GestureDetector mGestureDetector;
 
-        @Override
-        public int getCount() {
-            return mTotalWeekCount;
-        }
+            private int mFocusedMonth;
 
-        @Override
-        public Object getItem(int position) {
-            return null;
-        }
+            private final Calendar mSelectedDate = Calendar.getInstance();
 
-        @Override
-        public long getItemId(int position) {
-            return position;
-        }
+            private int mTotalWeekCount;
 
-        @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            WeekView weekView = null;
-            if (convertView != null) {
-                weekView = (WeekView) convertView;
-            } else {
-                weekView = new WeekView(mContext);
-                android.widget.AbsListView.LayoutParams params =
-                    new android.widget.AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT,
-                            LayoutParams.WRAP_CONTENT);
-                weekView.setLayoutParams(params);
-                weekView.setClickable(true);
-                weekView.setOnTouchListener(this);
+            public WeeksAdapter(Context context) {
+                mContext = context;
+                mGestureDetector = new GestureDetector(mContext, new CalendarGestureListener());
+                init();
             }
 
-            int selectedWeekDay = (mSelectedWeek == position) ? mSelectedDate.get(
-                    Calendar.DAY_OF_WEEK) : -1;
-            weekView.init(position, selectedWeekDay, mFocusedMonth);
-
-            return weekView;
-        }
-
-        /**
-         * Changes which month is in focus and updates the view.
-         *
-         * @param month The month to show as in focus [0-11]
-         */
-        public void setFocusMonth(int month) {
-            if (mFocusedMonth == month) {
-                return;
-            }
-            mFocusedMonth = month;
-            notifyDataSetChanged();
-        }
-
-        @Override
-        public boolean onTouch(View v, MotionEvent event) {
-            if (mListView.isEnabled() && mGestureDetector.onTouchEvent(event)) {
-                WeekView weekView = (WeekView) v;
-                // if we cannot find a day for the given location we are done
-                if (!weekView.getDayFromLocation(event.getX(), mTempDate)) {
-                    return true;
+            /**
+             * Set up the gesture detector and selected time
+             */
+            private void init() {
+                mSelectedWeek = getWeeksSinceMinDate(mSelectedDate);
+                mTotalWeekCount = getWeeksSinceMinDate(mMaxDate);
+                if (mMinDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek
+                        || mMaxDate.get(Calendar.DAY_OF_WEEK) != mFirstDayOfWeek) {
+                    mTotalWeekCount++;
                 }
-                // it is possible that the touched day is outside the valid range
-                // we draw whole weeks but range end can fall not on the week end
-                if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) {
-                    return true;
-                }
-                onDateTapped(mTempDate);
-                return true;
+                notifyDataSetChanged();
             }
-            return false;
-        }
 
-        /**
-         * Maintains the same hour/min/sec but moves the day to the tapped day.
-         *
-         * @param day The day that was tapped
-         */
-        private void onDateTapped(Calendar day) {
-            setSelectedDay(day);
-            setMonthDisplayed(day);
-        }
+            /**
+             * Updates the selected day and related parameters.
+             *
+             * @param selectedDay The time to highlight
+             */
+            public void setSelectedDay(Calendar selectedDay) {
+                if (selectedDay.get(Calendar.DAY_OF_YEAR) == mSelectedDate.get(Calendar.DAY_OF_YEAR)
+                        && selectedDay.get(Calendar.YEAR) == mSelectedDate.get(Calendar.YEAR)) {
+                    return;
+                }
+                mSelectedDate.setTimeInMillis(selectedDay.getTimeInMillis());
+                mSelectedWeek = getWeeksSinceMinDate(mSelectedDate);
+                mFocusedMonth = mSelectedDate.get(Calendar.MONTH);
+                notifyDataSetChanged();
+            }
 
-        /**
-         * This is here so we can identify single tap events and set the
-         * selected day correctly
-         */
-        class CalendarGestureListener extends GestureDetector.SimpleOnGestureListener {
+            /**
+             * @return The selected day of month.
+             */
+            public Calendar getSelectedDay() {
+                return mSelectedDate;
+            }
+
             @Override
-            public boolean onSingleTapUp(MotionEvent e) {
-                return true;
-            }
-        }
-    }
-
-    /**
-     * <p>
-     * This is a dynamic view for drawing a single week. It can be configured to
-     * display the week number, start the week on a given day, or show a reduced
-     * number of days. It is intended for use as a single view within a
-     * ListView. See {@link WeeksAdapter} for usage.
-     * </p>
-     */
-    private class WeekView extends View {
-
-        private final Rect mTempRect = new Rect();
-
-        private final Paint mDrawPaint = new Paint();
-
-        private final Paint mMonthNumDrawPaint = new Paint();
-
-        // Cache the number strings so we don't have to recompute them each time
-        private String[] mDayNumbers;
-
-        // Quick lookup for checking which days are in the focus month
-        private boolean[] mFocusDay;
-
-        // Whether this view has a focused day.
-        private boolean mHasFocusedDay;
-
-        // Whether this view has only focused days.
-        private boolean mHasUnfocusedDay;
-
-        // The first day displayed by this item
-        private Calendar mFirstDay;
-
-        // The month of the first day in this week
-        private int mMonthOfFirstWeekDay = -1;
-
-        // The month of the last day in this week
-        private int mLastWeekDayMonth = -1;
-
-        // The position of this week, equivalent to weeks since the week of Jan
-        // 1st, 1900
-        private int mWeek = -1;
-
-        // Quick reference to the width of this view, matches parent
-        private int mWidth;
-
-        // The height this view should draw at in pixels, set by height param
-        private int mHeight;
-
-        // If this view contains the selected day
-        private boolean mHasSelectedDay = false;
-
-        // Which day is selected [0-6] or -1 if no day is selected
-        private int mSelectedDay = -1;
-
-        // The number of days + a spot for week number if it is displayed
-        private int mNumCells;
-
-        // The left edge of the selected day
-        private int mSelectedLeft = -1;
-
-        // The right edge of the selected day
-        private int mSelectedRight = -1;
-
-        public WeekView(Context context) {
-            super(context);
-
-            // Sets up any standard paints that will be used
-            initilaizePaints();
-        }
-
-        /**
-         * Initializes this week view.
-         *
-         * @param weekNumber The number of the week this view represents. The
-         *            week number is a zero based index of the weeks since
-         *            {@link CalendarView#getMinDate()}.
-         * @param selectedWeekDay The selected day of the week from 0 to 6, -1 if no
-         *            selected day.
-         * @param focusedMonth The month that is currently in focus i.e.
-         *            highlighted.
-         */
-        public void init(int weekNumber, int selectedWeekDay, int focusedMonth) {
-            mSelectedDay = selectedWeekDay;
-            mHasSelectedDay = mSelectedDay != -1;
-            mNumCells = mShowWeekNumber ? mDaysPerWeek + 1 : mDaysPerWeek;
-            mWeek = weekNumber;
-            mTempDate.setTimeInMillis(mMinDate.getTimeInMillis());
-
-            mTempDate.add(Calendar.WEEK_OF_YEAR, mWeek);
-            mTempDate.setFirstDayOfWeek(mFirstDayOfWeek);
-
-            // Allocate space for caching the day numbers and focus values
-            mDayNumbers = new String[mNumCells];
-            mFocusDay = new boolean[mNumCells];
-
-            // If we're showing the week number calculate it based on Monday
-            int i = 0;
-            if (mShowWeekNumber) {
-                mDayNumbers[0] = String.format(Locale.getDefault(), "%d",
-                        mTempDate.get(Calendar.WEEK_OF_YEAR));
-                i++;
+            public int getCount() {
+                return mTotalWeekCount;
             }
 
-            // Now adjust our starting day based on the start day of the week
-            int diff = mFirstDayOfWeek - mTempDate.get(Calendar.DAY_OF_WEEK);
-            mTempDate.add(Calendar.DAY_OF_MONTH, diff);
+            @Override
+            public Object getItem(int position) {
+                return null;
+            }
 
-            mFirstDay = (Calendar) mTempDate.clone();
-            mMonthOfFirstWeekDay = mTempDate.get(Calendar.MONTH);
+            @Override
+            public long getItemId(int position) {
+                return position;
+            }
 
-            mHasUnfocusedDay = true;
-            for (; i < mNumCells; i++) {
-                final boolean isFocusedDay = (mTempDate.get(Calendar.MONTH) == focusedMonth);
-                mFocusDay[i] = isFocusedDay;
-                mHasFocusedDay |= isFocusedDay;
-                mHasUnfocusedDay &= !isFocusedDay;
-                // do not draw dates outside the valid range to avoid user confusion
-                if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) {
-                    mDayNumbers[i] = "";
+            @Override
+            public View getView(int position, View convertView, ViewGroup parent) {
+                WeekView weekView = null;
+                if (convertView != null) {
+                    weekView = (WeekView) convertView;
                 } else {
-                    mDayNumbers[i] = String.format(Locale.getDefault(), "%d",
-                            mTempDate.get(Calendar.DAY_OF_MONTH));
+                    weekView = new WeekView(mContext);
+                    android.widget.AbsListView.LayoutParams params =
+                            new android.widget.AbsListView.LayoutParams(LayoutParams.WRAP_CONTENT,
+                                    LayoutParams.WRAP_CONTENT);
+                    weekView.setLayoutParams(params);
+                    weekView.setClickable(true);
+                    weekView.setOnTouchListener(this);
                 }
-                mTempDate.add(Calendar.DAY_OF_MONTH, 1);
-            }
-            // We do one extra add at the end of the loop, if that pushed us to
-            // new month undo it
-            if (mTempDate.get(Calendar.DAY_OF_MONTH) == 1) {
-                mTempDate.add(Calendar.DAY_OF_MONTH, -1);
-            }
-            mLastWeekDayMonth = mTempDate.get(Calendar.MONTH);
 
-            updateSelectionPositions();
-        }
+                int selectedWeekDay = (mSelectedWeek == position) ? mSelectedDate.get(
+                        Calendar.DAY_OF_WEEK) : -1;
+                weekView.init(position, selectedWeekDay, mFocusedMonth);
 
-        /**
-         * Initialize the paint instances.
-         */
-        private void initilaizePaints() {
-            mDrawPaint.setFakeBoldText(false);
-            mDrawPaint.setAntiAlias(true);
-            mDrawPaint.setStyle(Style.FILL);
-
-            mMonthNumDrawPaint.setFakeBoldText(true);
-            mMonthNumDrawPaint.setAntiAlias(true);
-            mMonthNumDrawPaint.setStyle(Style.FILL);
-            mMonthNumDrawPaint.setTextAlign(Align.CENTER);
-            mMonthNumDrawPaint.setTextSize(mDateTextSize);
-        }
-
-        /**
-         * Returns the month of the first day in this week.
-         *
-         * @return The month the first day of this view is in.
-         */
-        public int getMonthOfFirstWeekDay() {
-            return mMonthOfFirstWeekDay;
-        }
-
-        /**
-         * Returns the month of the last day in this week
-         *
-         * @return The month the last day of this view is in
-         */
-        public int getMonthOfLastWeekDay() {
-            return mLastWeekDayMonth;
-        }
-
-        /**
-         * Returns the first day in this view.
-         *
-         * @return The first day in the view.
-         */
-        public Calendar getFirstDay() {
-            return mFirstDay;
-        }
-
-        /**
-         * Calculates the day that the given x position is in, accounting for
-         * week number.
-         *
-         * @param x The x position of the touch event.
-         * @return True if a day was found for the given location.
-         */
-        public boolean getDayFromLocation(float x, Calendar outCalendar) {
-            final boolean isLayoutRtl = isLayoutRtl();
-
-            int start;
-            int end;
-
-            if (isLayoutRtl) {
-                start = 0;
-                end = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth;
-            } else {
-                start = mShowWeekNumber ? mWidth / mNumCells : 0;
-                end = mWidth;
+                return weekView;
             }
 
-            if (x < start || x > end) {
-                outCalendar.clear();
+            /**
+             * Changes which month is in focus and updates the view.
+             *
+             * @param month The month to show as in focus [0-11]
+             */
+            public void setFocusMonth(int month) {
+                if (mFocusedMonth == month) {
+                    return;
+                }
+                mFocusedMonth = month;
+                notifyDataSetChanged();
+            }
+
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                if (mListView.isEnabled() && mGestureDetector.onTouchEvent(event)) {
+                    WeekView weekView = (WeekView) v;
+                    // if we cannot find a day for the given location we are done
+                    if (!weekView.getDayFromLocation(event.getX(), mTempDate)) {
+                        return true;
+                    }
+                    // it is possible that the touched day is outside the valid range
+                    // we draw whole weeks but range end can fall not on the week end
+                    if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) {
+                        return true;
+                    }
+                    onDateTapped(mTempDate);
+                    return true;
+                }
                 return false;
             }
 
-            // Selection is (x - start) / (pixels/day) which is (x - start) * day / pixels
-            int dayPosition = (int) ((x - start) * mDaysPerWeek / (end - start));
-
-            if (isLayoutRtl) {
-                dayPosition = mDaysPerWeek - 1 - dayPosition;
+            /**
+             * Maintains the same hour/min/sec but moves the day to the tapped day.
+             *
+             * @param day The day that was tapped
+             */
+            private void onDateTapped(Calendar day) {
+                setSelectedDay(day);
+                setMonthDisplayed(day);
             }
 
-            outCalendar.setTimeInMillis(mFirstDay.getTimeInMillis());
-            outCalendar.add(Calendar.DAY_OF_MONTH, dayPosition);
-
-            return true;
-        }
-
-        @Override
-        protected void onDraw(Canvas canvas) {
-            drawBackground(canvas);
-            drawWeekNumbersAndDates(canvas);
-            drawWeekSeparators(canvas);
-            drawSelectedDateVerticalBars(canvas);
+            /**
+             * This is here so we can identify single tap events and set the
+             * selected day correctly
+             */
+            class CalendarGestureListener extends GestureDetector.SimpleOnGestureListener {
+                @Override
+                public boolean onSingleTapUp(MotionEvent e) {
+                    return true;
+                }
+            }
         }
 
         /**
-         * This draws the selection highlight if a day is selected in this week.
-         *
-         * @param canvas The canvas to draw on
+         * <p>
+         * This is a dynamic view for drawing a single week. It can be configured to
+         * display the week number, start the week on a given day, or show a reduced
+         * number of days. It is intended for use as a single view within a
+         * ListView. See {@link WeeksAdapter} for usage.
+         * </p>
          */
-        private void drawBackground(Canvas canvas) {
-            if (!mHasSelectedDay) {
-                return;
+        private class WeekView extends View {
+
+            private final Rect mTempRect = new Rect();
+
+            private final Paint mDrawPaint = new Paint();
+
+            private final Paint mMonthNumDrawPaint = new Paint();
+
+            // Cache the number strings so we don't have to recompute them each time
+            private String[] mDayNumbers;
+
+            // Quick lookup for checking which days are in the focus month
+            private boolean[] mFocusDay;
+
+            // Whether this view has a focused day.
+            private boolean mHasFocusedDay;
+
+            // Whether this view has only focused days.
+            private boolean mHasUnfocusedDay;
+
+            // The first day displayed by this item
+            private Calendar mFirstDay;
+
+            // The month of the first day in this week
+            private int mMonthOfFirstWeekDay = -1;
+
+            // The month of the last day in this week
+            private int mLastWeekDayMonth = -1;
+
+            // The position of this week, equivalent to weeks since the week of Jan
+            // 1st, 1900
+            private int mWeek = -1;
+
+            // Quick reference to the width of this view, matches parent
+            private int mWidth;
+
+            // The height this view should draw at in pixels, set by height param
+            private int mHeight;
+
+            // If this view contains the selected day
+            private boolean mHasSelectedDay = false;
+
+            // Which day is selected [0-6] or -1 if no day is selected
+            private int mSelectedDay = -1;
+
+            // The number of days + a spot for week number if it is displayed
+            private int mNumCells;
+
+            // The left edge of the selected day
+            private int mSelectedLeft = -1;
+
+            // The right edge of the selected day
+            private int mSelectedRight = -1;
+
+            public WeekView(Context context) {
+                super(context);
+
+                // Sets up any standard paints that will be used
+                initilaizePaints();
             }
-            mDrawPaint.setColor(mSelectedWeekBackgroundColor);
 
-            mTempRect.top = mWeekSeperatorLineWidth;
-            mTempRect.bottom = mHeight;
+            /**
+             * Initializes this week view.
+             *
+             * @param weekNumber The number of the week this view represents. The
+             *            week number is a zero based index of the weeks since
+             *            {@link CalendarView#getMinDate()}.
+             * @param selectedWeekDay The selected day of the week from 0 to 6, -1 if no
+             *            selected day.
+             * @param focusedMonth The month that is currently in focus i.e.
+             *            highlighted.
+             */
+            public void init(int weekNumber, int selectedWeekDay, int focusedMonth) {
+                mSelectedDay = selectedWeekDay;
+                mHasSelectedDay = mSelectedDay != -1;
+                mNumCells = mShowWeekNumber ? mDaysPerWeek + 1 : mDaysPerWeek;
+                mWeek = weekNumber;
+                mTempDate.setTimeInMillis(mMinDate.getTimeInMillis());
 
-            final boolean isLayoutRtl = isLayoutRtl();
+                mTempDate.add(Calendar.WEEK_OF_YEAR, mWeek);
+                mTempDate.setFirstDayOfWeek(mFirstDayOfWeek);
 
-            if (isLayoutRtl) {
-                mTempRect.left = 0;
-                mTempRect.right = mSelectedLeft - 2;
-            } else {
-                mTempRect.left = mShowWeekNumber ? mWidth / mNumCells : 0;
-                mTempRect.right = mSelectedLeft - 2;
-            }
-            canvas.drawRect(mTempRect, mDrawPaint);
+                // Allocate space for caching the day numbers and focus values
+                mDayNumbers = new String[mNumCells];
+                mFocusDay = new boolean[mNumCells];
 
-            if (isLayoutRtl) {
-                mTempRect.left = mSelectedRight + 3;
-                mTempRect.right = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth;
-            } else {
-                mTempRect.left = mSelectedRight + 3;
-                mTempRect.right = mWidth;
-            }
-            canvas.drawRect(mTempRect, mDrawPaint);
-        }
-
-        /**
-         * Draws the week and month day numbers for this week.
-         *
-         * @param canvas The canvas to draw on
-         */
-        private void drawWeekNumbersAndDates(Canvas canvas) {
-            final float textHeight = mDrawPaint.getTextSize();
-            final int y = (int) ((mHeight + textHeight) / 2) - mWeekSeperatorLineWidth;
-            final int nDays = mNumCells;
-            final int divisor = 2 * nDays;
-
-            mDrawPaint.setTextAlign(Align.CENTER);
-            mDrawPaint.setTextSize(mDateTextSize);
-
-            int i = 0;
-
-            if (isLayoutRtl()) {
-                for (; i < nDays - 1; i++) {
-                    mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor
-                            : mUnfocusedMonthDateColor);
-                    int x = (2 * i + 1) * mWidth / divisor;
-                    canvas.drawText(mDayNumbers[nDays - 1 - i], x, y, mMonthNumDrawPaint);
-                }
+                // If we're showing the week number calculate it based on Monday
+                int i = 0;
                 if (mShowWeekNumber) {
-                    mDrawPaint.setColor(mWeekNumberColor);
-                    int x = mWidth - mWidth / divisor;
-                    canvas.drawText(mDayNumbers[0], x, y, mDrawPaint);
-                }
-            } else {
-                if (mShowWeekNumber) {
-                    mDrawPaint.setColor(mWeekNumberColor);
-                    int x = mWidth / divisor;
-                    canvas.drawText(mDayNumbers[0], x, y, mDrawPaint);
+                    mDayNumbers[0] = String.format(Locale.getDefault(), "%d",
+                            mTempDate.get(Calendar.WEEK_OF_YEAR));
                     i++;
                 }
-                for (; i < nDays; i++) {
-                    mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor
-                            : mUnfocusedMonthDateColor);
-                    int x = (2 * i + 1) * mWidth / divisor;
-                    canvas.drawText(mDayNumbers[i], x, y, mMonthNumDrawPaint);
+
+                // Now adjust our starting day based on the start day of the week
+                int diff = mFirstDayOfWeek - mTempDate.get(Calendar.DAY_OF_WEEK);
+                mTempDate.add(Calendar.DAY_OF_MONTH, diff);
+
+                mFirstDay = (Calendar) mTempDate.clone();
+                mMonthOfFirstWeekDay = mTempDate.get(Calendar.MONTH);
+
+                mHasUnfocusedDay = true;
+                for (; i < mNumCells; i++) {
+                    final boolean isFocusedDay = (mTempDate.get(Calendar.MONTH) == focusedMonth);
+                    mFocusDay[i] = isFocusedDay;
+                    mHasFocusedDay |= isFocusedDay;
+                    mHasUnfocusedDay &= !isFocusedDay;
+                    // do not draw dates outside the valid range to avoid user confusion
+                    if (mTempDate.before(mMinDate) || mTempDate.after(mMaxDate)) {
+                        mDayNumbers[i] = "";
+                    } else {
+                        mDayNumbers[i] = String.format(Locale.getDefault(), "%d",
+                                mTempDate.get(Calendar.DAY_OF_MONTH));
+                    }
+                    mTempDate.add(Calendar.DAY_OF_MONTH, 1);
                 }
-            }
-        }
+                // We do one extra add at the end of the loop, if that pushed us to
+                // new month undo it
+                if (mTempDate.get(Calendar.DAY_OF_MONTH) == 1) {
+                    mTempDate.add(Calendar.DAY_OF_MONTH, -1);
+                }
+                mLastWeekDayMonth = mTempDate.get(Calendar.MONTH);
 
-        /**
-         * Draws a horizontal line for separating the weeks.
-         *
-         * @param canvas The canvas to draw on.
-         */
-        private void drawWeekSeparators(Canvas canvas) {
-            // If it is the topmost fully visible child do not draw separator line
-            int firstFullyVisiblePosition = mListView.getFirstVisiblePosition();
-            if (mListView.getChildAt(0).getTop() < 0) {
-                firstFullyVisiblePosition++;
+                updateSelectionPositions();
             }
-            if (firstFullyVisiblePosition == mWeek) {
-                return;
-            }
-            mDrawPaint.setColor(mWeekSeparatorLineColor);
-            mDrawPaint.setStrokeWidth(mWeekSeperatorLineWidth);
-            float startX;
-            float stopX;
-            if (isLayoutRtl()) {
-                startX = 0;
-                stopX = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth;
-            } else {
-                startX = mShowWeekNumber ? mWidth / mNumCells : 0;
-                stopX = mWidth;
-            }
-            canvas.drawLine(startX, 0, stopX, 0, mDrawPaint);
-        }
 
-        /**
-         * Draws the selected date bars if this week has a selected day.
-         *
-         * @param canvas The canvas to draw on
-         */
-        private void drawSelectedDateVerticalBars(Canvas canvas) {
-            if (!mHasSelectedDay) {
-                return;
+            /**
+             * Initialize the paint instances.
+             */
+            private void initilaizePaints() {
+                mDrawPaint.setFakeBoldText(false);
+                mDrawPaint.setAntiAlias(true);
+                mDrawPaint.setStyle(Style.FILL);
+
+                mMonthNumDrawPaint.setFakeBoldText(true);
+                mMonthNumDrawPaint.setAntiAlias(true);
+                mMonthNumDrawPaint.setStyle(Style.FILL);
+                mMonthNumDrawPaint.setTextAlign(Align.CENTER);
+                mMonthNumDrawPaint.setTextSize(mDateTextSize);
             }
-            mSelectedDateVerticalBar.setBounds(mSelectedLeft - mSelectedDateVerticalBarWidth / 2,
-                    mWeekSeperatorLineWidth,
-                    mSelectedLeft + mSelectedDateVerticalBarWidth / 2, mHeight);
-            mSelectedDateVerticalBar.draw(canvas);
-            mSelectedDateVerticalBar.setBounds(mSelectedRight - mSelectedDateVerticalBarWidth / 2,
-                    mWeekSeperatorLineWidth,
-                    mSelectedRight + mSelectedDateVerticalBarWidth / 2, mHeight);
-            mSelectedDateVerticalBar.draw(canvas);
-        }
 
-        @Override
-        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-            mWidth = w;
-            updateSelectionPositions();
-        }
+            /**
+             * Returns the month of the first day in this week.
+             *
+             * @return The month the first day of this view is in.
+             */
+            public int getMonthOfFirstWeekDay() {
+                return mMonthOfFirstWeekDay;
+            }
 
-        /**
-         * This calculates the positions for the selected day lines.
-         */
-        private void updateSelectionPositions() {
-            if (mHasSelectedDay) {
+            /**
+             * Returns the month of the last day in this week
+             *
+             * @return The month the last day of this view is in
+             */
+            public int getMonthOfLastWeekDay() {
+                return mLastWeekDayMonth;
+            }
+
+            /**
+             * Returns the first day in this view.
+             *
+             * @return The first day in the view.
+             */
+            public Calendar getFirstDay() {
+                return mFirstDay;
+            }
+
+            /**
+             * Calculates the day that the given x position is in, accounting for
+             * week number.
+             *
+             * @param x The x position of the touch event.
+             * @return True if a day was found for the given location.
+             */
+            public boolean getDayFromLocation(float x, Calendar outCalendar) {
                 final boolean isLayoutRtl = isLayoutRtl();
-                int selectedPosition = mSelectedDay - mFirstDayOfWeek;
-                if (selectedPosition < 0) {
-                    selectedPosition += 7;
-                }
-                if (mShowWeekNumber && !isLayoutRtl) {
-                    selectedPosition++;
-                }
-                if (isLayoutRtl) {
-                    mSelectedLeft = (mDaysPerWeek - 1 - selectedPosition) * mWidth / mNumCells;
 
+                int start;
+                int end;
+
+                if (isLayoutRtl) {
+                    start = 0;
+                    end = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth;
                 } else {
-                    mSelectedLeft = selectedPosition * mWidth / mNumCells;
+                    start = mShowWeekNumber ? mWidth / mNumCells : 0;
+                    end = mWidth;
                 }
-                mSelectedRight = mSelectedLeft + mWidth / mNumCells;
+
+                if (x < start || x > end) {
+                    outCalendar.clear();
+                    return false;
+                }
+
+                // Selection is (x - start) / (pixels/day) which is (x - start) * day / pixels
+                int dayPosition = (int) ((x - start) * mDaysPerWeek / (end - start));
+
+                if (isLayoutRtl) {
+                    dayPosition = mDaysPerWeek - 1 - dayPosition;
+                }
+
+                outCalendar.setTimeInMillis(mFirstDay.getTimeInMillis());
+                outCalendar.add(Calendar.DAY_OF_MONTH, dayPosition);
+
+                return true;
+            }
+
+            @Override
+            protected void onDraw(Canvas canvas) {
+                drawBackground(canvas);
+                drawWeekNumbersAndDates(canvas);
+                drawWeekSeparators(canvas);
+                drawSelectedDateVerticalBars(canvas);
+            }
+
+            /**
+             * This draws the selection highlight if a day is selected in this week.
+             *
+             * @param canvas The canvas to draw on
+             */
+            private void drawBackground(Canvas canvas) {
+                if (!mHasSelectedDay) {
+                    return;
+                }
+                mDrawPaint.setColor(mSelectedWeekBackgroundColor);
+
+                mTempRect.top = mWeekSeperatorLineWidth;
+                mTempRect.bottom = mHeight;
+
+                final boolean isLayoutRtl = isLayoutRtl();
+
+                if (isLayoutRtl) {
+                    mTempRect.left = 0;
+                    mTempRect.right = mSelectedLeft - 2;
+                } else {
+                    mTempRect.left = mShowWeekNumber ? mWidth / mNumCells : 0;
+                    mTempRect.right = mSelectedLeft - 2;
+                }
+                canvas.drawRect(mTempRect, mDrawPaint);
+
+                if (isLayoutRtl) {
+                    mTempRect.left = mSelectedRight + 3;
+                    mTempRect.right = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth;
+                } else {
+                    mTempRect.left = mSelectedRight + 3;
+                    mTempRect.right = mWidth;
+                }
+                canvas.drawRect(mTempRect, mDrawPaint);
+            }
+
+            /**
+             * Draws the week and month day numbers for this week.
+             *
+             * @param canvas The canvas to draw on
+             */
+            private void drawWeekNumbersAndDates(Canvas canvas) {
+                final float textHeight = mDrawPaint.getTextSize();
+                final int y = (int) ((mHeight + textHeight) / 2) - mWeekSeperatorLineWidth;
+                final int nDays = mNumCells;
+                final int divisor = 2 * nDays;
+
+                mDrawPaint.setTextAlign(Align.CENTER);
+                mDrawPaint.setTextSize(mDateTextSize);
+
+                int i = 0;
+
+                if (isLayoutRtl()) {
+                    for (; i < nDays - 1; i++) {
+                        mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor
+                                : mUnfocusedMonthDateColor);
+                        int x = (2 * i + 1) * mWidth / divisor;
+                        canvas.drawText(mDayNumbers[nDays - 1 - i], x, y, mMonthNumDrawPaint);
+                    }
+                    if (mShowWeekNumber) {
+                        mDrawPaint.setColor(mWeekNumberColor);
+                        int x = mWidth - mWidth / divisor;
+                        canvas.drawText(mDayNumbers[0], x, y, mDrawPaint);
+                    }
+                } else {
+                    if (mShowWeekNumber) {
+                        mDrawPaint.setColor(mWeekNumberColor);
+                        int x = mWidth / divisor;
+                        canvas.drawText(mDayNumbers[0], x, y, mDrawPaint);
+                        i++;
+                    }
+                    for (; i < nDays; i++) {
+                        mMonthNumDrawPaint.setColor(mFocusDay[i] ? mFocusedMonthDateColor
+                                : mUnfocusedMonthDateColor);
+                        int x = (2 * i + 1) * mWidth / divisor;
+                        canvas.drawText(mDayNumbers[i], x, y, mMonthNumDrawPaint);
+                    }
+                }
+            }
+
+            /**
+             * Draws a horizontal line for separating the weeks.
+             *
+             * @param canvas The canvas to draw on.
+             */
+            private void drawWeekSeparators(Canvas canvas) {
+                // If it is the topmost fully visible child do not draw separator line
+                int firstFullyVisiblePosition = mListView.getFirstVisiblePosition();
+                if (mListView.getChildAt(0).getTop() < 0) {
+                    firstFullyVisiblePosition++;
+                }
+                if (firstFullyVisiblePosition == mWeek) {
+                    return;
+                }
+                mDrawPaint.setColor(mWeekSeparatorLineColor);
+                mDrawPaint.setStrokeWidth(mWeekSeperatorLineWidth);
+                float startX;
+                float stopX;
+                if (isLayoutRtl()) {
+                    startX = 0;
+                    stopX = mShowWeekNumber ? mWidth - mWidth / mNumCells : mWidth;
+                } else {
+                    startX = mShowWeekNumber ? mWidth / mNumCells : 0;
+                    stopX = mWidth;
+                }
+                canvas.drawLine(startX, 0, stopX, 0, mDrawPaint);
+            }
+
+            /**
+             * Draws the selected date bars if this week has a selected day.
+             *
+             * @param canvas The canvas to draw on
+             */
+            private void drawSelectedDateVerticalBars(Canvas canvas) {
+                if (!mHasSelectedDay) {
+                    return;
+                }
+                mSelectedDateVerticalBar.setBounds(
+                        mSelectedLeft - mSelectedDateVerticalBarWidth / 2,
+                        mWeekSeperatorLineWidth,
+                        mSelectedLeft + mSelectedDateVerticalBarWidth / 2,
+                        mHeight);
+                mSelectedDateVerticalBar.draw(canvas);
+                mSelectedDateVerticalBar.setBounds(
+                        mSelectedRight - mSelectedDateVerticalBarWidth / 2,
+                        mWeekSeperatorLineWidth,
+                        mSelectedRight + mSelectedDateVerticalBarWidth / 2,
+                        mHeight);
+                mSelectedDateVerticalBar.draw(canvas);
+            }
+
+            @Override
+            protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+                mWidth = w;
+                updateSelectionPositions();
+            }
+
+            /**
+             * This calculates the positions for the selected day lines.
+             */
+            private void updateSelectionPositions() {
+                if (mHasSelectedDay) {
+                    final boolean isLayoutRtl = isLayoutRtl();
+                    int selectedPosition = mSelectedDay - mFirstDayOfWeek;
+                    if (selectedPosition < 0) {
+                        selectedPosition += 7;
+                    }
+                    if (mShowWeekNumber && !isLayoutRtl) {
+                        selectedPosition++;
+                    }
+                    if (isLayoutRtl) {
+                        mSelectedLeft = (mDaysPerWeek - 1 - selectedPosition) * mWidth / mNumCells;
+
+                    } else {
+                        mSelectedLeft = selectedPosition * mWidth / mNumCells;
+                    }
+                    mSelectedRight = mSelectedLeft + mWidth / mNumCells;
+                }
+            }
+
+            @Override
+            protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+                mHeight = (mListView.getHeight() - mListView.getPaddingTop() - mListView
+                        .getPaddingBottom()) / mShownWeekCount;
+                setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mHeight);
             }
         }
 
-        @Override
-        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-            mHeight = (mListView.getHeight() - mListView.getPaddingTop() - mListView
-                    .getPaddingBottom()) / mShownWeekCount;
-            setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mHeight);
-        }
     }
+
 }
diff --git a/core/java/android/widget/CheckBox.java b/core/java/android/widget/CheckBox.java
index f1804f8..71438c9 100644
--- a/core/java/android/widget/CheckBox.java
+++ b/core/java/android/widget/CheckBox.java
@@ -64,8 +64,12 @@
         this(context, attrs, com.android.internal.R.attr.checkboxStyle);
     }
 
-    public CheckBox(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public CheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public CheckBox(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     @Override
diff --git a/core/java/android/widget/CheckedTextView.java b/core/java/android/widget/CheckedTextView.java
index 5c10a77..1533510 100644
--- a/core/java/android/widget/CheckedTextView.java
+++ b/core/java/android/widget/CheckedTextView.java
@@ -58,11 +58,15 @@
         this(context, attrs, R.attr.checkedTextViewStyle);
     }
 
-    public CheckedTextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public CheckedTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                R.styleable.CheckedTextView, defStyle, 0);
+    public CheckedTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.CheckedTextView, defStyleAttr, defStyleRes);
 
         Drawable d = a.getDrawable(R.styleable.CheckedTextView_checkMark);
         if (d != null) {
@@ -119,7 +123,7 @@
 
         Drawable d = null;
         if (mCheckMarkResource != 0) {
-            d = getResources().getDrawable(mCheckMarkResource);
+            d = getContext().getDrawable(mCheckMarkResource);
         }
         setCheckMarkDrawable(d);
     }
diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java
index b7a126e..f94789d0 100644
--- a/core/java/android/widget/Chronometer.java
+++ b/core/java/android/widget/Chronometer.java
@@ -18,14 +18,12 @@
 
 import android.content.Context;
 import android.content.res.TypedArray;
-import android.graphics.Canvas;
 import android.os.Handler;
 import android.os.Message;
 import android.os.SystemClock;
 import android.text.format.DateUtils;
 import android.util.AttributeSet;
 import android.util.Log;
-import android.util.Slog;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.RemoteViews.RemoteView;
@@ -96,12 +94,15 @@
      * Initialize with standard view layout information and style.
      * Sets the base to the current time.
      */
-    public Chronometer(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public Chronometer(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(
-                attrs,
-                com.android.internal.R.styleable.Chronometer, defStyle, 0);
+    public Chronometer(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.Chronometer, defStyleAttr, defStyleRes);
         setFormat(a.getString(com.android.internal.R.styleable.Chronometer_format));
         a.recycle();
 
diff --git a/core/java/android/widget/CompoundButton.java b/core/java/android/widget/CompoundButton.java
index abddc90..9e17cca 100644
--- a/core/java/android/widget/CompoundButton.java
+++ b/core/java/android/widget/CompoundButton.java
@@ -64,12 +64,15 @@
         this(context, attrs, 0);
     }
 
-    public CompoundButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public CompoundButton(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a =
-                context.obtainStyledAttributes(
-                        attrs, com.android.internal.R.styleable.CompoundButton, defStyle, 0);
+    public CompoundButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.CompoundButton, defStyleAttr, defStyleRes);
 
         Drawable d = a.getDrawable(com.android.internal.R.styleable.CompoundButton_button);
         if (d != null) {
@@ -183,7 +186,7 @@
 
         Drawable d = null;
         if (mButtonResource != 0) {
-            d = getResources().getDrawable(mButtonResource);
+            d = getContext().getDrawable(mButtonResource);
         }
         setButtonDrawable(d);
     }
@@ -258,15 +261,13 @@
 
     @Override
     protected void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
-
         final Drawable buttonDrawable = mButtonDrawable;
         if (buttonDrawable != null) {
             final int verticalGravity = getGravity() & Gravity.VERTICAL_GRAVITY_MASK;
             final int drawableHeight = buttonDrawable.getIntrinsicHeight();
             final int drawableWidth = buttonDrawable.getIntrinsicWidth();
 
-            int top = 0;
+            final int top;
             switch (verticalGravity) {
                 case Gravity.BOTTOM:
                     top = getHeight() - drawableHeight;
@@ -274,12 +275,24 @@
                 case Gravity.CENTER_VERTICAL:
                     top = (getHeight() - drawableHeight) / 2;
                     break;
+                default:
+                    top = 0;
             }
-            int bottom = top + drawableHeight;
-            int left = isLayoutRtl() ? getWidth() - drawableWidth : 0;
-            int right = isLayoutRtl() ? getWidth() : drawableWidth;
+            final int bottom = top + drawableHeight;
+            final int left = isLayoutRtl() ? getWidth() - drawableWidth : 0;
+            final int right = isLayoutRtl() ? getWidth() : drawableWidth;
 
             buttonDrawable.setBounds(left, top, right, bottom);
+
+            final Drawable background = getBackground();
+            if (background != null && background.supportsHotspots()) {
+                background.setHotspotBounds(left, top, right, bottom);
+            }
+        }
+
+        super.onDraw(canvas);
+
+        if (buttonDrawable != null) {
             buttonDrawable.draw(canvas);
         }
     }
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index d03161e..265dbcd 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -24,7 +24,6 @@
 import android.os.Parcelable;
 import android.text.TextUtils;
 import android.text.InputType;
-import android.text.format.DateFormat;
 import android.text.format.DateUtils;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -76,53 +75,7 @@
 
     private static final String LOG_TAG = DatePicker.class.getSimpleName();
 
-    private static final String DATE_FORMAT = "MM/dd/yyyy";
-
-    private static final int DEFAULT_START_YEAR = 1900;
-
-    private static final int DEFAULT_END_YEAR = 2100;
-
-    private static final boolean DEFAULT_CALENDAR_VIEW_SHOWN = true;
-
-    private static final boolean DEFAULT_SPINNERS_SHOWN = true;
-
-    private static final boolean DEFAULT_ENABLED_STATE = true;
-
-    private final LinearLayout mSpinners;
-
-    private final NumberPicker mDaySpinner;
-
-    private final NumberPicker mMonthSpinner;
-
-    private final NumberPicker mYearSpinner;
-
-    private final EditText mDaySpinnerInput;
-
-    private final EditText mMonthSpinnerInput;
-
-    private final EditText mYearSpinnerInput;
-
-    private final CalendarView mCalendarView;
-
-    private Locale mCurrentLocale;
-
-    private OnDateChangedListener mOnDateChangedListener;
-
-    private String[] mShortMonths;
-
-    private final java.text.DateFormat mDateFormat = new SimpleDateFormat(DATE_FORMAT);
-
-    private int mNumberOfMonths;
-
-    private Calendar mTempDate;
-
-    private Calendar mMinDate;
-
-    private Calendar mMaxDate;
-
-    private Calendar mCurrentDate;
-
-    private boolean mIsEnabled = DEFAULT_ENABLED_STATE;
+    private DatePickerDelegate mDelegate;
 
     /**
      * The callback used to indicate the user changes\d the date.
@@ -149,443 +102,14 @@
         this(context, attrs, R.attr.datePickerStyle);
     }
 
-    public DatePicker(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        // initialization based on locale
-        setCurrentLocale(Locale.getDefault());
-
-        TypedArray attributesArray = context.obtainStyledAttributes(attrs, R.styleable.DatePicker,
-                defStyle, 0);
-        boolean spinnersShown = attributesArray.getBoolean(R.styleable.DatePicker_spinnersShown,
-                DEFAULT_SPINNERS_SHOWN);
-        boolean calendarViewShown = attributesArray.getBoolean(
-                R.styleable.DatePicker_calendarViewShown, DEFAULT_CALENDAR_VIEW_SHOWN);
-        int startYear = attributesArray.getInt(R.styleable.DatePicker_startYear,
-                DEFAULT_START_YEAR);
-        int endYear = attributesArray.getInt(R.styleable.DatePicker_endYear, DEFAULT_END_YEAR);
-        String minDate = attributesArray.getString(R.styleable.DatePicker_minDate);
-        String maxDate = attributesArray.getString(R.styleable.DatePicker_maxDate);
-        int layoutResourceId = attributesArray.getResourceId(R.styleable.DatePicker_internalLayout,
-                R.layout.date_picker);
-        attributesArray.recycle();
-
-        LayoutInflater inflater = (LayoutInflater) context
-                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        inflater.inflate(layoutResourceId, this, true);
-
-        OnValueChangeListener onChangeListener = new OnValueChangeListener() {
-            public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
-                updateInputState();
-                mTempDate.setTimeInMillis(mCurrentDate.getTimeInMillis());
-                // take care of wrapping of days and months to update greater fields
-                if (picker == mDaySpinner) {
-                    int maxDayOfMonth = mTempDate.getActualMaximum(Calendar.DAY_OF_MONTH);
-                    if (oldVal == maxDayOfMonth && newVal == 1) {
-                        mTempDate.add(Calendar.DAY_OF_MONTH, 1);
-                    } else if (oldVal == 1 && newVal == maxDayOfMonth) {
-                        mTempDate.add(Calendar.DAY_OF_MONTH, -1);
-                    } else {
-                        mTempDate.add(Calendar.DAY_OF_MONTH, newVal - oldVal);
-                    }
-                } else if (picker == mMonthSpinner) {
-                    if (oldVal == 11 && newVal == 0) {
-                        mTempDate.add(Calendar.MONTH, 1);
-                    } else if (oldVal == 0 && newVal == 11) {
-                        mTempDate.add(Calendar.MONTH, -1);
-                    } else {
-                        mTempDate.add(Calendar.MONTH, newVal - oldVal);
-                    }
-                } else if (picker == mYearSpinner) {
-                    mTempDate.set(Calendar.YEAR, newVal);
-                } else {
-                    throw new IllegalArgumentException();
-                }
-                // now set the date to the adjusted one
-                setDate(mTempDate.get(Calendar.YEAR), mTempDate.get(Calendar.MONTH),
-                        mTempDate.get(Calendar.DAY_OF_MONTH));
-                updateSpinners();
-                updateCalendarView();
-                notifyDateChanged();
-            }
-        };
-
-        mSpinners = (LinearLayout) findViewById(R.id.pickers);
-
-        // calendar view day-picker
-        mCalendarView = (CalendarView) findViewById(R.id.calendar_view);
-        mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
-            public void onSelectedDayChange(CalendarView view, int year, int month, int monthDay) {
-                setDate(year, month, monthDay);
-                updateSpinners();
-                notifyDateChanged();
-            }
-        });
-
-        // day
-        mDaySpinner = (NumberPicker) findViewById(R.id.day);
-        mDaySpinner.setFormatter(NumberPicker.getTwoDigitFormatter());
-        mDaySpinner.setOnLongPressUpdateInterval(100);
-        mDaySpinner.setOnValueChangedListener(onChangeListener);
-        mDaySpinnerInput = (EditText) mDaySpinner.findViewById(R.id.numberpicker_input);
-
-        // month
-        mMonthSpinner = (NumberPicker) findViewById(R.id.month);
-        mMonthSpinner.setMinValue(0);
-        mMonthSpinner.setMaxValue(mNumberOfMonths - 1);
-        mMonthSpinner.setDisplayedValues(mShortMonths);
-        mMonthSpinner.setOnLongPressUpdateInterval(200);
-        mMonthSpinner.setOnValueChangedListener(onChangeListener);
-        mMonthSpinnerInput = (EditText) mMonthSpinner.findViewById(R.id.numberpicker_input);
-
-        // year
-        mYearSpinner = (NumberPicker) findViewById(R.id.year);
-        mYearSpinner.setOnLongPressUpdateInterval(100);
-        mYearSpinner.setOnValueChangedListener(onChangeListener);
-        mYearSpinnerInput = (EditText) mYearSpinner.findViewById(R.id.numberpicker_input);
-
-        // show only what the user required but make sure we
-        // show something and the spinners have higher priority
-        if (!spinnersShown && !calendarViewShown) {
-            setSpinnersShown(true);
-        } else {
-            setSpinnersShown(spinnersShown);
-            setCalendarViewShown(calendarViewShown);
-        }
-
-        // set the min date giving priority of the minDate over startYear
-        mTempDate.clear();
-        if (!TextUtils.isEmpty(minDate)) {
-            if (!parseDate(minDate, mTempDate)) {
-                mTempDate.set(startYear, 0, 1);
-            }
-        } else {
-            mTempDate.set(startYear, 0, 1);
-        }
-        setMinDate(mTempDate.getTimeInMillis());
-
-        // set the max date giving priority of the maxDate over endYear
-        mTempDate.clear();
-        if (!TextUtils.isEmpty(maxDate)) {
-            if (!parseDate(maxDate, mTempDate)) {
-                mTempDate.set(endYear, 11, 31);
-            }
-        } else {
-            mTempDate.set(endYear, 11, 31);
-        }
-        setMaxDate(mTempDate.getTimeInMillis());
-
-        // initialize to current date
-        mCurrentDate.setTimeInMillis(System.currentTimeMillis());
-        init(mCurrentDate.get(Calendar.YEAR), mCurrentDate.get(Calendar.MONTH), mCurrentDate
-                .get(Calendar.DAY_OF_MONTH), null);
-
-        // re-order the number spinners to match the current date format
-        reorderSpinners();
-
-        // accessibility
-        setContentDescriptions();
-
-        // If not explicitly specified this view is important for accessibility.
-        if (getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-            setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-        }
+    public DatePicker(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
-    /**
-     * Gets the minimal date supported by this {@link DatePicker} in
-     * milliseconds since January 1, 1970 00:00:00 in
-     * {@link TimeZone#getDefault()} time zone.
-     * <p>
-     * Note: The default minimal date is 01/01/1900.
-     * <p>
-     *
-     * @return The minimal supported date.
-     */
-    public long getMinDate() {
-        return mCalendarView.getMinDate();
-    }
+    public DatePicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
-    /**
-     * Sets the minimal date supported by this {@link NumberPicker} in
-     * milliseconds since January 1, 1970 00:00:00 in
-     * {@link TimeZone#getDefault()} time zone.
-     *
-     * @param minDate The minimal supported date.
-     */
-    public void setMinDate(long minDate) {
-        mTempDate.setTimeInMillis(minDate);
-        if (mTempDate.get(Calendar.YEAR) == mMinDate.get(Calendar.YEAR)
-                && mTempDate.get(Calendar.DAY_OF_YEAR) != mMinDate.get(Calendar.DAY_OF_YEAR)) {
-            return;
-        }
-        mMinDate.setTimeInMillis(minDate);
-        mCalendarView.setMinDate(minDate);
-        if (mCurrentDate.before(mMinDate)) {
-            mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis());
-            updateCalendarView();
-        }
-        updateSpinners();
-    }
-
-    /**
-     * Gets the maximal date supported by this {@link DatePicker} in
-     * milliseconds since January 1, 1970 00:00:00 in
-     * {@link TimeZone#getDefault()} time zone.
-     * <p>
-     * Note: The default maximal date is 12/31/2100.
-     * <p>
-     *
-     * @return The maximal supported date.
-     */
-    public long getMaxDate() {
-        return mCalendarView.getMaxDate();
-    }
-
-    /**
-     * Sets the maximal date supported by this {@link DatePicker} in
-     * milliseconds since January 1, 1970 00:00:00 in
-     * {@link TimeZone#getDefault()} time zone.
-     *
-     * @param maxDate The maximal supported date.
-     */
-    public void setMaxDate(long maxDate) {
-        mTempDate.setTimeInMillis(maxDate);
-        if (mTempDate.get(Calendar.YEAR) == mMaxDate.get(Calendar.YEAR)
-                && mTempDate.get(Calendar.DAY_OF_YEAR) != mMaxDate.get(Calendar.DAY_OF_YEAR)) {
-            return;
-        }
-        mMaxDate.setTimeInMillis(maxDate);
-        mCalendarView.setMaxDate(maxDate);
-        if (mCurrentDate.after(mMaxDate)) {
-            mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis());
-            updateCalendarView();
-        }
-        updateSpinners();
-    }
-
-    @Override
-    public void setEnabled(boolean enabled) {
-        if (mIsEnabled == enabled) {
-            return;
-        }
-        super.setEnabled(enabled);
-        mDaySpinner.setEnabled(enabled);
-        mMonthSpinner.setEnabled(enabled);
-        mYearSpinner.setEnabled(enabled);
-        mCalendarView.setEnabled(enabled);
-        mIsEnabled = enabled;
-    }
-
-    @Override
-    public boolean isEnabled() {
-        return mIsEnabled;
-    }
-
-    @Override
-    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
-        onPopulateAccessibilityEvent(event);
-        return true;
-    }
-
-    @Override
-    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
-        super.onPopulateAccessibilityEvent(event);
-
-        final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR;
-        String selectedDateUtterance = DateUtils.formatDateTime(mContext,
-                mCurrentDate.getTimeInMillis(), flags);
-        event.getText().add(selectedDateUtterance);
-    }
-
-    @Override
-    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
-        super.onInitializeAccessibilityEvent(event);
-        event.setClassName(DatePicker.class.getName());
-    }
-
-    @Override
-    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
-        super.onInitializeAccessibilityNodeInfo(info);
-        info.setClassName(DatePicker.class.getName());
-    }
-
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        setCurrentLocale(newConfig.locale);
-    }
-
-    /**
-     * Gets whether the {@link CalendarView} is shown.
-     *
-     * @return True if the calendar view is shown.
-     * @see #getCalendarView()
-     */
-    public boolean getCalendarViewShown() {
-        return (mCalendarView.getVisibility() == View.VISIBLE);
-    }
-
-    /**
-     * Gets the {@link CalendarView}.
-     *
-     * @return The calendar view.
-     * @see #getCalendarViewShown()
-     */
-    public CalendarView getCalendarView () {
-        return mCalendarView;
-    }
-
-    /**
-     * Sets whether the {@link CalendarView} is shown.
-     *
-     * @param shown True if the calendar view is to be shown.
-     */
-    public void setCalendarViewShown(boolean shown) {
-        mCalendarView.setVisibility(shown ? VISIBLE : GONE);
-    }
-
-    /**
-     * Gets whether the spinners are shown.
-     *
-     * @return True if the spinners are shown.
-     */
-    public boolean getSpinnersShown() {
-        return mSpinners.isShown();
-    }
-
-    /**
-     * Sets whether the spinners are shown.
-     *
-     * @param shown True if the spinners are to be shown.
-     */
-    public void setSpinnersShown(boolean shown) {
-        mSpinners.setVisibility(shown ? VISIBLE : GONE);
-    }
-
-    /**
-     * Sets the current locale.
-     *
-     * @param locale The current locale.
-     */
-    private void setCurrentLocale(Locale locale) {
-        if (locale.equals(mCurrentLocale)) {
-            return;
-        }
-
-        mCurrentLocale = locale;
-
-        mTempDate = getCalendarForLocale(mTempDate, locale);
-        mMinDate = getCalendarForLocale(mMinDate, locale);
-        mMaxDate = getCalendarForLocale(mMaxDate, locale);
-        mCurrentDate = getCalendarForLocale(mCurrentDate, locale);
-
-        mNumberOfMonths = mTempDate.getActualMaximum(Calendar.MONTH) + 1;
-        mShortMonths = new DateFormatSymbols().getShortMonths();
-
-        if (usingNumericMonths()) {
-            // We're in a locale where a date should either be all-numeric, or all-text.
-            // All-text would require custom NumberPicker formatters for day and year.
-            mShortMonths = new String[mNumberOfMonths];
-            for (int i = 0; i < mNumberOfMonths; ++i) {
-                mShortMonths[i] = String.format("%d", i + 1);
-            }
-        }
-    }
-
-    /**
-     * Tests whether the current locale is one where there are no real month names,
-     * such as Chinese, Japanese, or Korean locales.
-     */
-    private boolean usingNumericMonths() {
-        return Character.isDigit(mShortMonths[Calendar.JANUARY].charAt(0));
-    }
-
-    /**
-     * Gets a calendar for locale bootstrapped with the value of a given calendar.
-     *
-     * @param oldCalendar The old calendar.
-     * @param locale The locale.
-     */
-    private Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
-        if (oldCalendar == null) {
-            return Calendar.getInstance(locale);
-        } else {
-            final long currentTimeMillis = oldCalendar.getTimeInMillis();
-            Calendar newCalendar = Calendar.getInstance(locale);
-            newCalendar.setTimeInMillis(currentTimeMillis);
-            return newCalendar;
-        }
-    }
-
-    /**
-     * Reorders the spinners according to the date format that is
-     * explicitly set by the user and if no such is set fall back
-     * to the current locale's default format.
-     */
-    private void reorderSpinners() {
-        mSpinners.removeAllViews();
-        // We use numeric spinners for year and day, but textual months. Ask icu4c what
-        // order the user's locale uses for that combination. http://b/7207103.
-        String pattern = ICU.getBestDateTimePattern("yyyyMMMdd", Locale.getDefault().toString());
-        char[] order = ICU.getDateFormatOrder(pattern);
-        final int spinnerCount = order.length;
-        for (int i = 0; i < spinnerCount; i++) {
-            switch (order[i]) {
-                case 'd':
-                    mSpinners.addView(mDaySpinner);
-                    setImeOptions(mDaySpinner, spinnerCount, i);
-                    break;
-                case 'M':
-                    mSpinners.addView(mMonthSpinner);
-                    setImeOptions(mMonthSpinner, spinnerCount, i);
-                    break;
-                case 'y':
-                    mSpinners.addView(mYearSpinner);
-                    setImeOptions(mYearSpinner, spinnerCount, i);
-                    break;
-                default:
-                    throw new IllegalArgumentException(Arrays.toString(order));
-            }
-        }
-    }
-
-    /**
-     * Updates the current date.
-     *
-     * @param year The year.
-     * @param month The month which is <strong>starting from zero</strong>.
-     * @param dayOfMonth The day of the month.
-     */
-    public void updateDate(int year, int month, int dayOfMonth) {
-        if (!isNewDate(year, month, dayOfMonth)) {
-            return;
-        }
-        setDate(year, month, dayOfMonth);
-        updateSpinners();
-        updateCalendarView();
-        notifyDateChanged();
-    }
-
-    // Override so we are in complete control of save / restore for this widget.
-    @Override
-    protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
-        dispatchThawSelfOnly(container);
-    }
-
-    @Override
-    protected Parcelable onSaveInstanceState() {
-        Parcelable superState = super.onSaveInstanceState();
-        return new SavedState(superState, getYear(), getMonth(), getDayOfMonth());
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Parcelable state) {
-        SavedState ss = (SavedState) state;
-        super.onRestoreInstanceState(ss.getSuperState());
-        setDate(ss.mYear, ss.mMonth, ss.mDay);
-        updateSpinners();
-        updateCalendarView();
+        mDelegate = new LegacyDatePickerDelegate(this, context, attrs, defStyleAttr, defStyleRes);
     }
 
     /**
@@ -599,191 +123,881 @@
      *            user, can be null.
      */
     public void init(int year, int monthOfYear, int dayOfMonth,
-            OnDateChangedListener onDateChangedListener) {
-        setDate(year, monthOfYear, dayOfMonth);
-        updateSpinners();
-        updateCalendarView();
-        mOnDateChangedListener = onDateChangedListener;
+                     OnDateChangedListener onDateChangedListener) {
+        mDelegate.init(year, monthOfYear, dayOfMonth, onDateChangedListener);
     }
 
     /**
-     * Parses the given <code>date</code> and in case of success sets the result
-     * to the <code>outDate</code>.
+     * Updates the current date.
      *
-     * @return True if the date was parsed.
+     * @param year The year.
+     * @param month The month which is <strong>starting from zero</strong>.
+     * @param dayOfMonth The day of the month.
      */
-    private boolean parseDate(String date, Calendar outDate) {
-        try {
-            outDate.setTime(mDateFormat.parse(date));
-            return true;
-        } catch (ParseException e) {
-            Log.w(LOG_TAG, "Date: " + date + " not in format: " + DATE_FORMAT);
-            return false;
-        }
-    }
-
-    private boolean isNewDate(int year, int month, int dayOfMonth) {
-        return (mCurrentDate.get(Calendar.YEAR) != year
-                || mCurrentDate.get(Calendar.MONTH) != dayOfMonth
-                || mCurrentDate.get(Calendar.DAY_OF_MONTH) != month);
-    }
-
-    private void setDate(int year, int month, int dayOfMonth) {
-        mCurrentDate.set(year, month, dayOfMonth);
-        if (mCurrentDate.before(mMinDate)) {
-            mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis());
-        } else if (mCurrentDate.after(mMaxDate)) {
-            mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis());
-        }
-    }
-
-    private void updateSpinners() {
-        // set the spinner ranges respecting the min and max dates
-        if (mCurrentDate.equals(mMinDate)) {
-            mDaySpinner.setMinValue(mCurrentDate.get(Calendar.DAY_OF_MONTH));
-            mDaySpinner.setMaxValue(mCurrentDate.getActualMaximum(Calendar.DAY_OF_MONTH));
-            mDaySpinner.setWrapSelectorWheel(false);
-            mMonthSpinner.setDisplayedValues(null);
-            mMonthSpinner.setMinValue(mCurrentDate.get(Calendar.MONTH));
-            mMonthSpinner.setMaxValue(mCurrentDate.getActualMaximum(Calendar.MONTH));
-            mMonthSpinner.setWrapSelectorWheel(false);
-        } else if (mCurrentDate.equals(mMaxDate)) {
-            mDaySpinner.setMinValue(mCurrentDate.getActualMinimum(Calendar.DAY_OF_MONTH));
-            mDaySpinner.setMaxValue(mCurrentDate.get(Calendar.DAY_OF_MONTH));
-            mDaySpinner.setWrapSelectorWheel(false);
-            mMonthSpinner.setDisplayedValues(null);
-            mMonthSpinner.setMinValue(mCurrentDate.getActualMinimum(Calendar.MONTH));
-            mMonthSpinner.setMaxValue(mCurrentDate.get(Calendar.MONTH));
-            mMonthSpinner.setWrapSelectorWheel(false);
-        } else {
-            mDaySpinner.setMinValue(1);
-            mDaySpinner.setMaxValue(mCurrentDate.getActualMaximum(Calendar.DAY_OF_MONTH));
-            mDaySpinner.setWrapSelectorWheel(true);
-            mMonthSpinner.setDisplayedValues(null);
-            mMonthSpinner.setMinValue(0);
-            mMonthSpinner.setMaxValue(11);
-            mMonthSpinner.setWrapSelectorWheel(true);
-        }
-
-        // make sure the month names are a zero based array
-        // with the months in the month spinner
-        String[] displayedValues = Arrays.copyOfRange(mShortMonths,
-                mMonthSpinner.getMinValue(), mMonthSpinner.getMaxValue() + 1);
-        mMonthSpinner.setDisplayedValues(displayedValues);
-
-        // year spinner range does not change based on the current date
-        mYearSpinner.setMinValue(mMinDate.get(Calendar.YEAR));
-        mYearSpinner.setMaxValue(mMaxDate.get(Calendar.YEAR));
-        mYearSpinner.setWrapSelectorWheel(false);
-
-        // set the spinner values
-        mYearSpinner.setValue(mCurrentDate.get(Calendar.YEAR));
-        mMonthSpinner.setValue(mCurrentDate.get(Calendar.MONTH));
-        mDaySpinner.setValue(mCurrentDate.get(Calendar.DAY_OF_MONTH));
-
-        if (usingNumericMonths()) {
-            mMonthSpinnerInput.setRawInputType(InputType.TYPE_CLASS_NUMBER);
-        }
-    }
-
-    /**
-     * Updates the calendar view with the current date.
-     */
-    private void updateCalendarView() {
-         mCalendarView.setDate(mCurrentDate.getTimeInMillis(), false, false);
+    public void updateDate(int year, int month, int dayOfMonth) {
+        mDelegate.updateDate(year, month, dayOfMonth);
     }
 
     /**
      * @return The selected year.
      */
     public int getYear() {
-        return mCurrentDate.get(Calendar.YEAR);
+        return mDelegate.getYear();
     }
 
     /**
      * @return The selected month.
      */
     public int getMonth() {
-        return mCurrentDate.get(Calendar.MONTH);
+        return mDelegate.getMonth();
     }
 
     /**
      * @return The selected day of month.
      */
     public int getDayOfMonth() {
-        return mCurrentDate.get(Calendar.DAY_OF_MONTH);
+        return mDelegate.getDayOfMonth();
     }
 
     /**
-     * Notifies the listener, if such, for a change in the selected date.
-     */
-    private void notifyDateChanged() {
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
-        if (mOnDateChangedListener != null) {
-            mOnDateChangedListener.onDateChanged(this, getYear(), getMonth(), getDayOfMonth());
-        }
-    }
-
-    /**
-     * Sets the IME options for a spinner based on its ordering.
+     * Gets the minimal date supported by this {@link DatePicker} in
+     * milliseconds since January 1, 1970 00:00:00 in
+     * {@link TimeZone#getDefault()} time zone.
+     * <p>
+     * Note: The default minimal date is 01/01/1900.
+     * <p>
      *
-     * @param spinner The spinner.
-     * @param spinnerCount The total spinner count.
-     * @param spinnerIndex The index of the given spinner.
+     * @return The minimal supported date.
      */
-    private void setImeOptions(NumberPicker spinner, int spinnerCount, int spinnerIndex) {
-        final int imeOptions;
-        if (spinnerIndex < spinnerCount - 1) {
-            imeOptions = EditorInfo.IME_ACTION_NEXT;
-        } else {
-            imeOptions = EditorInfo.IME_ACTION_DONE;
+    public long getMinDate() {
+        return mDelegate.getMinDate();
+    }
+
+    /**
+     * Sets the minimal date supported by this {@link NumberPicker} in
+     * milliseconds since January 1, 1970 00:00:00 in
+     * {@link TimeZone#getDefault()} time zone.
+     *
+     * @param minDate The minimal supported date.
+     */
+    public void setMinDate(long minDate) {
+        mDelegate.setMinDate(minDate);
+    }
+
+    /**
+     * Gets the maximal date supported by this {@link DatePicker} in
+     * milliseconds since January 1, 1970 00:00:00 in
+     * {@link TimeZone#getDefault()} time zone.
+     * <p>
+     * Note: The default maximal date is 12/31/2100.
+     * <p>
+     *
+     * @return The maximal supported date.
+     */
+    public long getMaxDate() {
+        return mDelegate.getMaxDate();
+    }
+
+    /**
+     * Sets the maximal date supported by this {@link DatePicker} in
+     * milliseconds since January 1, 1970 00:00:00 in
+     * {@link TimeZone#getDefault()} time zone.
+     *
+     * @param maxDate The maximal supported date.
+     */
+    public void setMaxDate(long maxDate) {
+        mDelegate.setMaxDate(maxDate);
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        if (mDelegate.isEnabled() == enabled) {
+            return;
         }
-        TextView input = (TextView) spinner.findViewById(R.id.numberpicker_input);
-        input.setImeOptions(imeOptions);
+        super.setEnabled(enabled);
+        mDelegate.setEnabled(enabled);
     }
 
-    private void setContentDescriptions() {
-        // Day
-        trySetContentDescription(mDaySpinner, R.id.increment,
-                R.string.date_picker_increment_day_button);
-        trySetContentDescription(mDaySpinner, R.id.decrement,
-                R.string.date_picker_decrement_day_button);
-        // Month
-        trySetContentDescription(mMonthSpinner, R.id.increment,
-                R.string.date_picker_increment_month_button);
-        trySetContentDescription(mMonthSpinner, R.id.decrement,
-                R.string.date_picker_decrement_month_button);
-        // Year
-        trySetContentDescription(mYearSpinner, R.id.increment,
-                R.string.date_picker_increment_year_button);
-        trySetContentDescription(mYearSpinner, R.id.decrement,
-                R.string.date_picker_decrement_year_button);
+    @Override
+    public boolean isEnabled() {
+        return mDelegate.isEnabled();
     }
 
-    private void trySetContentDescription(View root, int viewId, int contDescResId) {
-        View target = root.findViewById(viewId);
-        if (target != null) {
-            target.setContentDescription(mContext.getString(contDescResId));
+    @Override
+    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+        return mDelegate.dispatchPopulateAccessibilityEvent(event);
+    }
+
+    @Override
+    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+        super.onPopulateAccessibilityEvent(event);
+        mDelegate.onPopulateAccessibilityEvent(event);
+    }
+
+    @Override
+    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+        super.onInitializeAccessibilityEvent(event);
+        mDelegate.onInitializeAccessibilityEvent(event);
+    }
+
+    @Override
+    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+        super.onInitializeAccessibilityNodeInfo(info);
+        mDelegate.onInitializeAccessibilityNodeInfo(info);
+    }
+
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mDelegate.onConfigurationChanged(newConfig);
+    }
+
+    /**
+     * Gets whether the {@link CalendarView} is shown.
+     *
+     * @return True if the calendar view is shown.
+     * @see #getCalendarView()
+     */
+    public boolean getCalendarViewShown() {
+        return mDelegate.getCalendarViewShown();
+    }
+
+    /**
+     * Gets the {@link CalendarView}.
+     *
+     * @return The calendar view.
+     * @see #getCalendarViewShown()
+     */
+    public CalendarView getCalendarView () {
+        return mDelegate.getCalendarView();
+    }
+
+    /**
+     * Sets whether the {@link CalendarView} is shown.
+     *
+     * @param shown True if the calendar view is to be shown.
+     */
+    public void setCalendarViewShown(boolean shown) {
+        mDelegate.setCalendarViewShown(shown);
+    }
+
+    /**
+     * Gets whether the spinners are shown.
+     *
+     * @return True if the spinners are shown.
+     */
+    public boolean getSpinnersShown() {
+        return mDelegate.getSpinnersShown();
+    }
+
+    /**
+     * Sets whether the spinners are shown.
+     *
+     * @param shown True if the spinners are to be shown.
+     */
+    public void setSpinnersShown(boolean shown) {
+        mDelegate.setSpinnersShown(shown);
+    }
+
+    // Override so we are in complete control of save / restore for this widget.
+    @Override
+    protected void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
+        mDelegate.dispatchRestoreInstanceState(container);
+    }
+
+    @Override
+    protected Parcelable onSaveInstanceState() {
+        Parcelable superState = super.onSaveInstanceState();
+        return mDelegate.onSaveInstanceState(superState);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        SavedState ss = (SavedState) state;
+        super.onRestoreInstanceState(ss.getSuperState());
+        mDelegate.onRestoreInstanceState(ss);
+    }
+
+    /**
+     * A delegate interface that defined the public API of the DatePicker. Allows different
+     * DatePicker implementations. This would need to be implemented by the DatePicker delegates
+     * for the real behavior.
+     */
+    interface DatePickerDelegate {
+        void init(int year, int monthOfYear, int dayOfMonth,
+                  OnDateChangedListener onDateChangedListener);
+
+        void updateDate(int year, int month, int dayOfMonth);
+
+        int getYear();
+        int getMonth();
+        int getDayOfMonth();
+
+        void setMinDate(long minDate);
+        long getMinDate();
+
+        void setMaxDate(long maxDate);
+        long getMaxDate();
+
+        void setEnabled(boolean enabled);
+        boolean isEnabled();
+
+        CalendarView getCalendarView ();
+
+        void setCalendarViewShown(boolean shown);
+        boolean getCalendarViewShown();
+
+        void setSpinnersShown(boolean shown);
+        boolean getSpinnersShown();
+
+        void onConfigurationChanged(Configuration newConfig);
+
+        void dispatchRestoreInstanceState(SparseArray<Parcelable> container);
+        Parcelable onSaveInstanceState(Parcelable superState);
+        void onRestoreInstanceState(Parcelable state);
+
+        boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event);
+        void onPopulateAccessibilityEvent(AccessibilityEvent event);
+        void onInitializeAccessibilityEvent(AccessibilityEvent event);
+        void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info);
+    }
+
+    /**
+     * An abstract class which can be used as a start for DatePicker implementations
+     */
+    abstract static class AbstractTimePickerDelegate implements DatePickerDelegate {
+        // The delegator
+        protected DatePicker mDelegator;
+
+        // The context
+        protected Context mContext;
+
+        // The current locale
+        protected Locale mCurrentLocale;
+
+        // Callbacks
+        protected  OnDateChangedListener mOnDateChangedListener;
+
+        public AbstractTimePickerDelegate(DatePicker delegator, Context context) {
+            mDelegator = delegator;
+            mContext = context;
+
+            // initialization based on locale
+            setCurrentLocale(Locale.getDefault());
+        }
+
+        protected void setCurrentLocale(Locale locale) {
+            if (locale.equals(mCurrentLocale)) {
+                return;
+            }
+            mCurrentLocale = locale;
         }
     }
 
-    private void updateInputState() {
-        // Make sure that if the user changes the value and the IME is active
-        // for one of the inputs if this widget, the IME is closed. If the user
-        // changed the value via the IME and there is a next input the IME will
-        // be shown, otherwise the user chose another means of changing the
-        // value and having the IME up makes no sense.
-        InputMethodManager inputMethodManager = InputMethodManager.peekInstance();
-        if (inputMethodManager != null) {
-            if (inputMethodManager.isActive(mYearSpinnerInput)) {
-                mYearSpinnerInput.clearFocus();
-                inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
-            } else if (inputMethodManager.isActive(mMonthSpinnerInput)) {
-                mMonthSpinnerInput.clearFocus();
-                inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
-            } else if (inputMethodManager.isActive(mDaySpinnerInput)) {
-                mDaySpinnerInput.clearFocus();
-                inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
+    /**
+     * A delegate implementing the basic DatePicker
+     */
+    private static class LegacyDatePickerDelegate extends AbstractTimePickerDelegate {
+
+        private static final String DATE_FORMAT = "MM/dd/yyyy";
+
+        private static final int DEFAULT_START_YEAR = 1900;
+
+        private static final int DEFAULT_END_YEAR = 2100;
+
+        private static final boolean DEFAULT_CALENDAR_VIEW_SHOWN = true;
+
+        private static final boolean DEFAULT_SPINNERS_SHOWN = true;
+
+        private static final boolean DEFAULT_ENABLED_STATE = true;
+
+        private final LinearLayout mSpinners;
+
+        private final NumberPicker mDaySpinner;
+
+        private final NumberPicker mMonthSpinner;
+
+        private final NumberPicker mYearSpinner;
+
+        private final EditText mDaySpinnerInput;
+
+        private final EditText mMonthSpinnerInput;
+
+        private final EditText mYearSpinnerInput;
+
+        private final CalendarView mCalendarView;
+
+        private String[] mShortMonths;
+
+        private final java.text.DateFormat mDateFormat = new SimpleDateFormat(DATE_FORMAT);
+
+        private int mNumberOfMonths;
+
+        private Calendar mTempDate;
+
+        private Calendar mMinDate;
+
+        private Calendar mMaxDate;
+
+        private Calendar mCurrentDate;
+
+        private boolean mIsEnabled = DEFAULT_ENABLED_STATE;
+
+        LegacyDatePickerDelegate(DatePicker delegator, Context context, AttributeSet attrs,
+                int defStyleAttr, int defStyleRes) {
+            super(delegator, context);
+
+            mDelegator = delegator;
+            mContext = context;
+
+            // initialization based on locale
+            setCurrentLocale(Locale.getDefault());
+
+            final TypedArray attributesArray = context.obtainStyledAttributes(attrs,
+                    R.styleable.DatePicker, defStyleAttr, defStyleRes);
+            boolean spinnersShown = attributesArray.getBoolean(R.styleable.DatePicker_spinnersShown,
+                    DEFAULT_SPINNERS_SHOWN);
+            boolean calendarViewShown = attributesArray.getBoolean(
+                    R.styleable.DatePicker_calendarViewShown, DEFAULT_CALENDAR_VIEW_SHOWN);
+            int startYear = attributesArray.getInt(R.styleable.DatePicker_startYear,
+                    DEFAULT_START_YEAR);
+            int endYear = attributesArray.getInt(R.styleable.DatePicker_endYear, DEFAULT_END_YEAR);
+            String minDate = attributesArray.getString(R.styleable.DatePicker_minDate);
+            String maxDate = attributesArray.getString(R.styleable.DatePicker_maxDate);
+            int layoutResourceId = attributesArray.getResourceId(
+                    R.styleable.DatePicker_internalLayout, R.layout.date_picker);
+            attributesArray.recycle();
+
+            LayoutInflater inflater = (LayoutInflater) context
+                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+            inflater.inflate(layoutResourceId, mDelegator, true);
+
+            OnValueChangeListener onChangeListener = new OnValueChangeListener() {
+                public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
+                    updateInputState();
+                    mTempDate.setTimeInMillis(mCurrentDate.getTimeInMillis());
+                    // take care of wrapping of days and months to update greater fields
+                    if (picker == mDaySpinner) {
+                        int maxDayOfMonth = mTempDate.getActualMaximum(Calendar.DAY_OF_MONTH);
+                        if (oldVal == maxDayOfMonth && newVal == 1) {
+                            mTempDate.add(Calendar.DAY_OF_MONTH, 1);
+                        } else if (oldVal == 1 && newVal == maxDayOfMonth) {
+                            mTempDate.add(Calendar.DAY_OF_MONTH, -1);
+                        } else {
+                            mTempDate.add(Calendar.DAY_OF_MONTH, newVal - oldVal);
+                        }
+                    } else if (picker == mMonthSpinner) {
+                        if (oldVal == 11 && newVal == 0) {
+                            mTempDate.add(Calendar.MONTH, 1);
+                        } else if (oldVal == 0 && newVal == 11) {
+                            mTempDate.add(Calendar.MONTH, -1);
+                        } else {
+                            mTempDate.add(Calendar.MONTH, newVal - oldVal);
+                        }
+                    } else if (picker == mYearSpinner) {
+                        mTempDate.set(Calendar.YEAR, newVal);
+                    } else {
+                        throw new IllegalArgumentException();
+                    }
+                    // now set the date to the adjusted one
+                    setDate(mTempDate.get(Calendar.YEAR), mTempDate.get(Calendar.MONTH),
+                            mTempDate.get(Calendar.DAY_OF_MONTH));
+                    updateSpinners();
+                    updateCalendarView();
+                    notifyDateChanged();
+                }
+            };
+
+            mSpinners = (LinearLayout) mDelegator.findViewById(R.id.pickers);
+
+            // calendar view day-picker
+            mCalendarView = (CalendarView) mDelegator.findViewById(R.id.calendar_view);
+            mCalendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
+                public void onSelectedDayChange(CalendarView view, int year, int month, int monthDay) {
+                    setDate(year, month, monthDay);
+                    updateSpinners();
+                    notifyDateChanged();
+                }
+            });
+
+            // day
+            mDaySpinner = (NumberPicker) mDelegator.findViewById(R.id.day);
+            mDaySpinner.setFormatter(NumberPicker.getTwoDigitFormatter());
+            mDaySpinner.setOnLongPressUpdateInterval(100);
+            mDaySpinner.setOnValueChangedListener(onChangeListener);
+            mDaySpinnerInput = (EditText) mDaySpinner.findViewById(R.id.numberpicker_input);
+
+            // month
+            mMonthSpinner = (NumberPicker) mDelegator.findViewById(R.id.month);
+            mMonthSpinner.setMinValue(0);
+            mMonthSpinner.setMaxValue(mNumberOfMonths - 1);
+            mMonthSpinner.setDisplayedValues(mShortMonths);
+            mMonthSpinner.setOnLongPressUpdateInterval(200);
+            mMonthSpinner.setOnValueChangedListener(onChangeListener);
+            mMonthSpinnerInput = (EditText) mMonthSpinner.findViewById(R.id.numberpicker_input);
+
+            // year
+            mYearSpinner = (NumberPicker) mDelegator.findViewById(R.id.year);
+            mYearSpinner.setOnLongPressUpdateInterval(100);
+            mYearSpinner.setOnValueChangedListener(onChangeListener);
+            mYearSpinnerInput = (EditText) mYearSpinner.findViewById(R.id.numberpicker_input);
+
+            // show only what the user required but make sure we
+            // show something and the spinners have higher priority
+            if (!spinnersShown && !calendarViewShown) {
+                setSpinnersShown(true);
+            } else {
+                setSpinnersShown(spinnersShown);
+                setCalendarViewShown(calendarViewShown);
+            }
+
+            // set the min date giving priority of the minDate over startYear
+            mTempDate.clear();
+            if (!TextUtils.isEmpty(minDate)) {
+                if (!parseDate(minDate, mTempDate)) {
+                    mTempDate.set(startYear, 0, 1);
+                }
+            } else {
+                mTempDate.set(startYear, 0, 1);
+            }
+            setMinDate(mTempDate.getTimeInMillis());
+
+            // set the max date giving priority of the maxDate over endYear
+            mTempDate.clear();
+            if (!TextUtils.isEmpty(maxDate)) {
+                if (!parseDate(maxDate, mTempDate)) {
+                    mTempDate.set(endYear, 11, 31);
+                }
+            } else {
+                mTempDate.set(endYear, 11, 31);
+            }
+            setMaxDate(mTempDate.getTimeInMillis());
+
+            // initialize to current date
+            mCurrentDate.setTimeInMillis(System.currentTimeMillis());
+            init(mCurrentDate.get(Calendar.YEAR), mCurrentDate.get(Calendar.MONTH), mCurrentDate
+                    .get(Calendar.DAY_OF_MONTH), null);
+
+            // re-order the number spinners to match the current date format
+            reorderSpinners();
+
+            // accessibility
+            setContentDescriptions();
+
+            // If not explicitly specified this view is important for accessibility.
+            if (mDelegator.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+                mDelegator.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
+            }
+        }
+
+        @Override
+        public void init(int year, int monthOfYear, int dayOfMonth,
+                         OnDateChangedListener onDateChangedListener) {
+            setDate(year, monthOfYear, dayOfMonth);
+            updateSpinners();
+            updateCalendarView();
+            mOnDateChangedListener = onDateChangedListener;
+        }
+
+        @Override
+        public void updateDate(int year, int month, int dayOfMonth) {
+            if (!isNewDate(year, month, dayOfMonth)) {
+                return;
+            }
+            setDate(year, month, dayOfMonth);
+            updateSpinners();
+            updateCalendarView();
+            notifyDateChanged();
+        }
+
+        @Override
+        public int getYear() {
+            return mCurrentDate.get(Calendar.YEAR);
+        }
+
+        @Override
+        public int getMonth() {
+            return mCurrentDate.get(Calendar.MONTH);
+        }
+
+        @Override
+        public int getDayOfMonth() {
+            return mCurrentDate.get(Calendar.DAY_OF_MONTH);
+        }
+
+        @Override
+        public void setMinDate(long minDate) {
+            mTempDate.setTimeInMillis(minDate);
+            if (mTempDate.get(Calendar.YEAR) == mMinDate.get(Calendar.YEAR)
+                    && mTempDate.get(Calendar.DAY_OF_YEAR) != mMinDate.get(Calendar.DAY_OF_YEAR)) {
+                return;
+            }
+            mMinDate.setTimeInMillis(minDate);
+            mCalendarView.setMinDate(minDate);
+            if (mCurrentDate.before(mMinDate)) {
+                mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis());
+                updateCalendarView();
+            }
+            updateSpinners();
+        }
+
+        @Override
+        public long getMinDate() {
+            return mCalendarView.getMinDate();
+        }
+
+        @Override
+        public void setMaxDate(long maxDate) {
+            mTempDate.setTimeInMillis(maxDate);
+            if (mTempDate.get(Calendar.YEAR) == mMaxDate.get(Calendar.YEAR)
+                    && mTempDate.get(Calendar.DAY_OF_YEAR) != mMaxDate.get(Calendar.DAY_OF_YEAR)) {
+                return;
+            }
+            mMaxDate.setTimeInMillis(maxDate);
+            mCalendarView.setMaxDate(maxDate);
+            if (mCurrentDate.after(mMaxDate)) {
+                mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis());
+                updateCalendarView();
+            }
+            updateSpinners();
+        }
+
+        @Override
+        public long getMaxDate() {
+            return mCalendarView.getMaxDate();
+        }
+
+        @Override
+        public void setEnabled(boolean enabled) {
+            mDaySpinner.setEnabled(enabled);
+            mMonthSpinner.setEnabled(enabled);
+            mYearSpinner.setEnabled(enabled);
+            mCalendarView.setEnabled(enabled);
+            mIsEnabled = enabled;
+        }
+
+        @Override
+        public boolean isEnabled() {
+            return mIsEnabled;
+        }
+
+        @Override
+        public CalendarView getCalendarView() {
+            return mCalendarView;
+        }
+
+        @Override
+        public void setCalendarViewShown(boolean shown) {
+            mCalendarView.setVisibility(shown ? VISIBLE : GONE);
+        }
+
+        @Override
+        public boolean getCalendarViewShown() {
+            return (mCalendarView.getVisibility() == View.VISIBLE);
+        }
+
+        @Override
+        public void setSpinnersShown(boolean shown) {
+            mSpinners.setVisibility(shown ? VISIBLE : GONE);
+        }
+
+        @Override
+        public boolean getSpinnersShown() {
+            return mSpinners.isShown();
+        }
+
+        @Override
+        public void onConfigurationChanged(Configuration newConfig) {
+            setCurrentLocale(newConfig.locale);
+        }
+
+        @Override
+        public void dispatchRestoreInstanceState(SparseArray<Parcelable> container) {
+            mDelegator.dispatchThawSelfOnly(container);
+        }
+
+        @Override
+        public Parcelable onSaveInstanceState(Parcelable superState) {
+            return new SavedState(superState, getYear(), getMonth(), getDayOfMonth());
+        }
+
+        @Override
+        public void onRestoreInstanceState(Parcelable state) {
+            SavedState ss = (SavedState) state;
+            setDate(ss.mYear, ss.mMonth, ss.mDay);
+            updateSpinners();
+            updateCalendarView();
+        }
+
+        @Override
+        public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+            onPopulateAccessibilityEvent(event);
+            return true;
+        }
+
+        @Override
+        public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+            final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR;
+            String selectedDateUtterance = DateUtils.formatDateTime(mContext,
+                    mCurrentDate.getTimeInMillis(), flags);
+            event.getText().add(selectedDateUtterance);
+        }
+
+        @Override
+        public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+            event.setClassName(DatePicker.class.getName());
+        }
+
+        @Override
+        public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+            info.setClassName(DatePicker.class.getName());
+        }
+
+        /**
+         * Sets the current locale.
+         *
+         * @param locale The current locale.
+         */
+        @Override
+        protected void setCurrentLocale(Locale locale) {
+            super.setCurrentLocale(locale);
+
+            mTempDate = getCalendarForLocale(mTempDate, locale);
+            mMinDate = getCalendarForLocale(mMinDate, locale);
+            mMaxDate = getCalendarForLocale(mMaxDate, locale);
+            mCurrentDate = getCalendarForLocale(mCurrentDate, locale);
+
+            mNumberOfMonths = mTempDate.getActualMaximum(Calendar.MONTH) + 1;
+            mShortMonths = new DateFormatSymbols().getShortMonths();
+
+            if (usingNumericMonths()) {
+                // We're in a locale where a date should either be all-numeric, or all-text.
+                // All-text would require custom NumberPicker formatters for day and year.
+                mShortMonths = new String[mNumberOfMonths];
+                for (int i = 0; i < mNumberOfMonths; ++i) {
+                    mShortMonths[i] = String.format("%d", i + 1);
+                }
+            }
+        }
+
+        /**
+         * Tests whether the current locale is one where there are no real month names,
+         * such as Chinese, Japanese, or Korean locales.
+         */
+        private boolean usingNumericMonths() {
+            return Character.isDigit(mShortMonths[Calendar.JANUARY].charAt(0));
+        }
+
+        /**
+         * Gets a calendar for locale bootstrapped with the value of a given calendar.
+         *
+         * @param oldCalendar The old calendar.
+         * @param locale The locale.
+         */
+        private Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
+            if (oldCalendar == null) {
+                return Calendar.getInstance(locale);
+            } else {
+                final long currentTimeMillis = oldCalendar.getTimeInMillis();
+                Calendar newCalendar = Calendar.getInstance(locale);
+                newCalendar.setTimeInMillis(currentTimeMillis);
+                return newCalendar;
+            }
+        }
+
+        /**
+         * Reorders the spinners according to the date format that is
+         * explicitly set by the user and if no such is set fall back
+         * to the current locale's default format.
+         */
+        private void reorderSpinners() {
+            mSpinners.removeAllViews();
+            // We use numeric spinners for year and day, but textual months. Ask icu4c what
+            // order the user's locale uses for that combination. http://b/7207103.
+            String pattern = ICU.getBestDateTimePattern("yyyyMMMdd",
+                    Locale.getDefault().toString());
+            char[] order = ICU.getDateFormatOrder(pattern);
+            final int spinnerCount = order.length;
+            for (int i = 0; i < spinnerCount; i++) {
+                switch (order[i]) {
+                    case 'd':
+                        mSpinners.addView(mDaySpinner);
+                        setImeOptions(mDaySpinner, spinnerCount, i);
+                        break;
+                    case 'M':
+                        mSpinners.addView(mMonthSpinner);
+                        setImeOptions(mMonthSpinner, spinnerCount, i);
+                        break;
+                    case 'y':
+                        mSpinners.addView(mYearSpinner);
+                        setImeOptions(mYearSpinner, spinnerCount, i);
+                        break;
+                    default:
+                        throw new IllegalArgumentException(Arrays.toString(order));
+                }
+            }
+        }
+
+        /**
+         * Parses the given <code>date</code> and in case of success sets the result
+         * to the <code>outDate</code>.
+         *
+         * @return True if the date was parsed.
+         */
+        private boolean parseDate(String date, Calendar outDate) {
+            try {
+                outDate.setTime(mDateFormat.parse(date));
+                return true;
+            } catch (ParseException e) {
+                Log.w(LOG_TAG, "Date: " + date + " not in format: " + DATE_FORMAT);
+                return false;
+            }
+        }
+
+        private boolean isNewDate(int year, int month, int dayOfMonth) {
+            return (mCurrentDate.get(Calendar.YEAR) != year
+                    || mCurrentDate.get(Calendar.MONTH) != dayOfMonth
+                    || mCurrentDate.get(Calendar.DAY_OF_MONTH) != month);
+        }
+
+        private void setDate(int year, int month, int dayOfMonth) {
+            mCurrentDate.set(year, month, dayOfMonth);
+            if (mCurrentDate.before(mMinDate)) {
+                mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis());
+            } else if (mCurrentDate.after(mMaxDate)) {
+                mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis());
+            }
+        }
+
+        private void updateSpinners() {
+            // set the spinner ranges respecting the min and max dates
+            if (mCurrentDate.equals(mMinDate)) {
+                mDaySpinner.setMinValue(mCurrentDate.get(Calendar.DAY_OF_MONTH));
+                mDaySpinner.setMaxValue(mCurrentDate.getActualMaximum(Calendar.DAY_OF_MONTH));
+                mDaySpinner.setWrapSelectorWheel(false);
+                mMonthSpinner.setDisplayedValues(null);
+                mMonthSpinner.setMinValue(mCurrentDate.get(Calendar.MONTH));
+                mMonthSpinner.setMaxValue(mCurrentDate.getActualMaximum(Calendar.MONTH));
+                mMonthSpinner.setWrapSelectorWheel(false);
+            } else if (mCurrentDate.equals(mMaxDate)) {
+                mDaySpinner.setMinValue(mCurrentDate.getActualMinimum(Calendar.DAY_OF_MONTH));
+                mDaySpinner.setMaxValue(mCurrentDate.get(Calendar.DAY_OF_MONTH));
+                mDaySpinner.setWrapSelectorWheel(false);
+                mMonthSpinner.setDisplayedValues(null);
+                mMonthSpinner.setMinValue(mCurrentDate.getActualMinimum(Calendar.MONTH));
+                mMonthSpinner.setMaxValue(mCurrentDate.get(Calendar.MONTH));
+                mMonthSpinner.setWrapSelectorWheel(false);
+            } else {
+                mDaySpinner.setMinValue(1);
+                mDaySpinner.setMaxValue(mCurrentDate.getActualMaximum(Calendar.DAY_OF_MONTH));
+                mDaySpinner.setWrapSelectorWheel(true);
+                mMonthSpinner.setDisplayedValues(null);
+                mMonthSpinner.setMinValue(0);
+                mMonthSpinner.setMaxValue(11);
+                mMonthSpinner.setWrapSelectorWheel(true);
+            }
+
+            // make sure the month names are a zero based array
+            // with the months in the month spinner
+            String[] displayedValues = Arrays.copyOfRange(mShortMonths,
+                    mMonthSpinner.getMinValue(), mMonthSpinner.getMaxValue() + 1);
+            mMonthSpinner.setDisplayedValues(displayedValues);
+
+            // year spinner range does not change based on the current date
+            mYearSpinner.setMinValue(mMinDate.get(Calendar.YEAR));
+            mYearSpinner.setMaxValue(mMaxDate.get(Calendar.YEAR));
+            mYearSpinner.setWrapSelectorWheel(false);
+
+            // set the spinner values
+            mYearSpinner.setValue(mCurrentDate.get(Calendar.YEAR));
+            mMonthSpinner.setValue(mCurrentDate.get(Calendar.MONTH));
+            mDaySpinner.setValue(mCurrentDate.get(Calendar.DAY_OF_MONTH));
+
+            if (usingNumericMonths()) {
+                mMonthSpinnerInput.setRawInputType(InputType.TYPE_CLASS_NUMBER);
+            }
+        }
+
+        /**
+         * Updates the calendar view with the current date.
+         */
+        private void updateCalendarView() {
+            mCalendarView.setDate(mCurrentDate.getTimeInMillis(), false, false);
+        }
+
+
+        /**
+         * Notifies the listener, if such, for a change in the selected date.
+         */
+        private void notifyDateChanged() {
+            mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+            if (mOnDateChangedListener != null) {
+                mOnDateChangedListener.onDateChanged(mDelegator, getYear(), getMonth(),
+                        getDayOfMonth());
+            }
+        }
+
+        /**
+         * Sets the IME options for a spinner based on its ordering.
+         *
+         * @param spinner The spinner.
+         * @param spinnerCount The total spinner count.
+         * @param spinnerIndex The index of the given spinner.
+         */
+        private void setImeOptions(NumberPicker spinner, int spinnerCount, int spinnerIndex) {
+            final int imeOptions;
+            if (spinnerIndex < spinnerCount - 1) {
+                imeOptions = EditorInfo.IME_ACTION_NEXT;
+            } else {
+                imeOptions = EditorInfo.IME_ACTION_DONE;
+            }
+            TextView input = (TextView) spinner.findViewById(R.id.numberpicker_input);
+            input.setImeOptions(imeOptions);
+        }
+
+        private void setContentDescriptions() {
+            // Day
+            trySetContentDescription(mDaySpinner, R.id.increment,
+                    R.string.date_picker_increment_day_button);
+            trySetContentDescription(mDaySpinner, R.id.decrement,
+                    R.string.date_picker_decrement_day_button);
+            // Month
+            trySetContentDescription(mMonthSpinner, R.id.increment,
+                    R.string.date_picker_increment_month_button);
+            trySetContentDescription(mMonthSpinner, R.id.decrement,
+                    R.string.date_picker_decrement_month_button);
+            // Year
+            trySetContentDescription(mYearSpinner, R.id.increment,
+                    R.string.date_picker_increment_year_button);
+            trySetContentDescription(mYearSpinner, R.id.decrement,
+                    R.string.date_picker_decrement_year_button);
+        }
+
+        private void trySetContentDescription(View root, int viewId, int contDescResId) {
+            View target = root.findViewById(viewId);
+            if (target != null) {
+                target.setContentDescription(mContext.getString(contDescResId));
+            }
+        }
+
+        private void updateInputState() {
+            // Make sure that if the user changes the value and the IME is active
+            // for one of the inputs if this widget, the IME is closed. If the user
+            // changed the value via the IME and there is a next input the IME will
+            // be shown, otherwise the user chose another means of changing the
+            // value and having the IME up makes no sense.
+            InputMethodManager inputMethodManager = InputMethodManager.peekInstance();
+            if (inputMethodManager != null) {
+                if (inputMethodManager.isActive(mYearSpinnerInput)) {
+                    mYearSpinnerInput.clearFocus();
+                    inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0);
+                } else if (inputMethodManager.isActive(mMonthSpinnerInput)) {
+                    mMonthSpinnerInput.clearFocus();
+                    inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0);
+                } else if (inputMethodManager.isActive(mDaySpinnerInput)) {
+                    mDaySpinnerInput.clearFocus();
+                    inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0);
+                }
             }
         }
     }
diff --git a/core/java/android/widget/DateTimeView.java b/core/java/android/widget/DateTimeView.java
index af6bbcb..45d1403 100644
--- a/core/java/android/widget/DateTimeView.java
+++ b/core/java/android/widget/DateTimeView.java
@@ -27,12 +27,9 @@
 import android.util.AttributeSet;
 import android.util.Log;
 import android.provider.Settings;
-import android.provider.Settings.SettingNotFoundException;
 import android.widget.TextView;
 import android.widget.RemoteViews.RemoteView;
 
-import com.android.internal.R;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
diff --git a/core/java/android/widget/DialerFilter.java b/core/java/android/widget/DialerFilter.java
index 20bc114..78786e1 100644
--- a/core/java/android/widget/DialerFilter.java
+++ b/core/java/android/widget/DialerFilter.java
@@ -28,8 +28,6 @@
 import android.text.method.KeyListener;
 import android.text.method.TextKeyListener;
 import android.util.AttributeSet;
-import android.util.Log;
-import android.view.KeyCharacterMap;
 import android.view.View;
 import android.graphics.Rect;
 
diff --git a/core/java/android/widget/EdgeEffect.java b/core/java/android/widget/EdgeEffect.java
index 30752e0..fa37443 100644
--- a/core/java/android/widget/EdgeEffect.java
+++ b/core/java/android/widget/EdgeEffect.java
@@ -136,8 +136,8 @@
      */
     public EdgeEffect(Context context) {
         final Resources res = context.getResources();
-        mEdge = res.getDrawable(R.drawable.overscroll_edge);
-        mGlow = res.getDrawable(R.drawable.overscroll_glow);
+        mEdge = context.getDrawable(R.drawable.overscroll_edge);
+        mGlow = context.getDrawable(R.drawable.overscroll_glow);
 
         mEdgeHeight = mEdge.getIntrinsicHeight();
         mGlowHeight = mGlow.getIntrinsicHeight();
diff --git a/core/java/android/widget/EditText.java b/core/java/android/widget/EditText.java
index 57e51c2..a8ff562 100644
--- a/core/java/android/widget/EditText.java
+++ b/core/java/android/widget/EditText.java
@@ -17,6 +17,7 @@
 package android.widget;
 
 import android.content.Context;
+import android.os.Bundle;
 import android.text.Editable;
 import android.text.Selection;
 import android.text.Spannable;
@@ -56,8 +57,12 @@
         this(context, attrs, com.android.internal.R.attr.editTextStyle);
     }
 
-    public EditText(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public EditText(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public EditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     @Override
@@ -128,4 +133,22 @@
         super.onInitializeAccessibilityNodeInfo(info);
         info.setClassName(EditText.class.getName());
     }
+
+    @Override
+    public boolean performAccessibilityAction(int action, Bundle arguments) {
+        switch (action) {
+            case AccessibilityNodeInfo.ACTION_SET_TEXT: {
+                CharSequence text = (arguments != null) ? arguments.getCharSequence(
+                        AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE) : null;
+                setText(text);
+                if (text != null && text.length() > 0) {
+                    setSelection(text.length());
+                }
+                return true;
+            }
+            default: {
+                return super.performAccessibilityAction(action, arguments);
+            }
+        }
+    }
 }
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 748af7b..b0a4e24 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -23,7 +23,9 @@
 import android.os.Parcelable;
 import android.text.InputFilter;
 import android.text.SpannableString;
+
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 import com.android.internal.widget.EditableInputConnection;
 
 import android.R;
@@ -45,8 +47,6 @@
 import android.inputmethodservice.ExtractEditText;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.Message;
-import android.os.Messenger;
 import android.os.SystemClock;
 import android.provider.Settings;
 import android.text.DynamicLayout;
@@ -75,10 +75,11 @@
 import android.util.Log;
 import android.view.ActionMode;
 import android.view.ActionMode.Callback;
-import android.view.DisplayList;
+import android.view.RenderNode;
 import android.view.DragEvent;
 import android.view.Gravity;
 import android.view.HardwareCanvas;
+import android.view.HardwareRenderer;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -137,7 +138,16 @@
     InputContentType mInputContentType;
     InputMethodState mInputMethodState;
 
-    DisplayList[] mTextDisplayLists;
+    private static class TextDisplayList {
+        RenderNode displayList;
+        boolean isDirty;
+        public TextDisplayList(String name) {
+            isDirty = true;
+            displayList = RenderNode.create(name);
+        }
+        boolean needsRecord() { return isDirty || !displayList.isValid(); }
+    }
+    TextDisplayList[] mTextDisplayLists;
 
     boolean mFrozenWithFocus;
     boolean mSelectionMoved;
@@ -262,7 +272,7 @@
             mTextView.removeCallbacks(mShowSuggestionRunnable);
         }
 
-        invalidateTextDisplayList();
+        destroyDisplayListsData();
 
         if (mSpellChecker != null) {
             mSpellChecker.closeSession();
@@ -277,6 +287,18 @@
         mTemporaryDetach = false;
     }
 
+    private void destroyDisplayListsData() {
+        if (mTextDisplayLists != null) {
+            for (int i = 0; i < mTextDisplayLists.length; i++) {
+                RenderNode displayList = mTextDisplayLists[i] != null
+                        ? mTextDisplayLists[i].displayList : null;
+                if (displayList != null && displayList.isValid()) {
+                    displayList.destroyDisplayListData();
+                }
+            }
+        }
+    }
+
     private void showError() {
         if (mTextView.getWindowToken() == null) {
             mShowErrorAfterAttach = true;
@@ -1319,7 +1341,7 @@
 
         if (layout instanceof DynamicLayout) {
             if (mTextDisplayLists == null) {
-                mTextDisplayLists = new DisplayList[ArrayUtils.idealObjectArraySize(0)];
+                mTextDisplayLists = ArrayUtils.emptyArray(TextDisplayList.class);
             }
 
             DynamicLayout dynamicLayout = (DynamicLayout) layout;
@@ -1343,15 +1365,13 @@
                     searchStartIndex = blockIndex + 1;
                 }
 
-                DisplayList blockDisplayList = mTextDisplayLists[blockIndex];
-                if (blockDisplayList == null) {
-                    blockDisplayList = mTextDisplayLists[blockIndex] =
-                            mTextView.getHardwareRenderer().createDisplayList("Text " + blockIndex);
-                } else {
-                    if (blockIsInvalid) blockDisplayList.clear();
+                if (mTextDisplayLists[blockIndex] == null) {
+                    mTextDisplayLists[blockIndex] =
+                            new TextDisplayList("Text " + blockIndex);
                 }
 
-                final boolean blockDisplayListIsInvalid = !blockDisplayList.isValid();
+                final boolean blockDisplayListIsInvalid = mTextDisplayLists[blockIndex].needsRecord();
+                RenderNode blockDisplayList = mTextDisplayLists[blockIndex].displayList;
                 if (i >= indexFirstChangedBlock || blockDisplayListIsInvalid) {
                     final int blockBeginLine = endOfPreviousBlock + 1;
                     final int top = layout.getLineTop(blockBeginLine);
@@ -1381,7 +1401,7 @@
                             // No need to untranslate, previous context is popped after
                             // drawDisplayList
                         } finally {
-                            blockDisplayList.end();
+                            blockDisplayList.end(hardwareCanvas);
                             // Same as drawDisplayList below, handled by our TextView's parent
                             blockDisplayList.setClipToBounds(false);
                         }
@@ -1421,10 +1441,7 @@
         }
 
         // No available index found, the pool has to grow
-        int newSize = ArrayUtils.idealIntArraySize(length + 1);
-        DisplayList[] displayLists = new DisplayList[newSize];
-        System.arraycopy(mTextDisplayLists, 0, displayLists, 0, length);
-        mTextDisplayLists = displayLists;
+        mTextDisplayLists = GrowingArrayUtils.append(mTextDisplayLists, length, null);
         return length;
     }
 
@@ -1461,7 +1478,7 @@
             while (i < numberOfBlocks) {
                 final int blockIndex = blockIndices[i];
                 if (blockIndex != DynamicLayout.INVALID_BLOCK_INDEX) {
-                    mTextDisplayLists[blockIndex].clear();
+                    mTextDisplayLists[blockIndex].isDirty = true;
                 }
                 if (blockEndLines[i] >= lastLine) break;
                 i++;
@@ -1472,7 +1489,7 @@
     void invalidateTextDisplayList() {
         if (mTextDisplayLists != null) {
             for (int i = 0; i < mTextDisplayLists.length; i++) {
-                if (mTextDisplayLists[i] != null) mTextDisplayLists[i].clear();
+                if (mTextDisplayLists[i] != null) mTextDisplayLists[i].isDirty = true;
             }
         }
     }
@@ -1681,7 +1698,7 @@
 
     private void updateCursorPosition(int cursorIndex, int top, int bottom, float horizontal) {
         if (mCursorDrawable[cursorIndex] == null)
-            mCursorDrawable[cursorIndex] = mTextView.getResources().getDrawable(
+            mCursorDrawable[cursorIndex] = mTextView.getContext().getDrawable(
                     mTextView.mCursorDrawableRes);
 
         if (mTempRect == null) mTempRect = new Rect();
@@ -2321,8 +2338,8 @@
         private final HashMap<SuggestionSpan, Integer> mSpansLengths;
 
         private class CustomPopupWindow extends PopupWindow {
-            public CustomPopupWindow(Context context, int defStyle) {
-                super(context, null, defStyle);
+            public CustomPopupWindow(Context context, int defStyleAttr) {
+                super(context, null, defStyleAttr);
             }
 
             @Override
@@ -2971,7 +2988,7 @@
                 positionY += mContentView.getMeasuredHeight();
 
                 // Assumes insertion and selection handles share the same height
-                final Drawable handle = mTextView.getResources().getDrawable(
+                final Drawable handle = mTextView.getContext().getDrawable(
                         mTextView.mTextSelectHandleRes);
                 positionY += handle.getIntrinsicHeight();
             }
@@ -3548,7 +3565,7 @@
 
         private InsertionHandleView getHandle() {
             if (mSelectHandleCenter == null) {
-                mSelectHandleCenter = mTextView.getResources().getDrawable(
+                mSelectHandleCenter = mTextView.getContext().getDrawable(
                         mTextView.mTextSelectHandleRes);
             }
             if (mHandle == null) {
@@ -3594,11 +3611,11 @@
 
         private void initDrawables() {
             if (mSelectHandleLeft == null) {
-                mSelectHandleLeft = mTextView.getContext().getResources().getDrawable(
+                mSelectHandleLeft = mTextView.getContext().getDrawable(
                         mTextView.mTextSelectHandleLeftRes);
             }
             if (mSelectHandleRight == null) {
-                mSelectHandleRight = mTextView.getContext().getResources().getDrawable(
+                mSelectHandleRight = mTextView.getContext().getDrawable(
                         mTextView.mTextSelectHandleRightRes);
             }
         }
diff --git a/core/java/android/widget/ExpandableListView.java b/core/java/android/widget/ExpandableListView.java
index 7b81aa8..70089e0 100644
--- a/core/java/android/widget/ExpandableListView.java
+++ b/core/java/android/widget/ExpandableListView.java
@@ -227,12 +227,16 @@
         this(context, attrs, com.android.internal.R.attr.expandableListViewStyle);
     }
 
-    public ExpandableListView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ExpandableListView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a =
-            context.obtainStyledAttributes(attrs,
-                    com.android.internal.R.styleable.ExpandableListView, defStyle, 0);
+    public ExpandableListView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.ExpandableListView, defStyleAttr, defStyleRes);
 
         mGroupIndicator = a.getDrawable(
                 com.android.internal.R.styleable.ExpandableListView_groupIndicator);
diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java
index 4379bf6..c0961fd 100644
--- a/core/java/android/widget/FastScroller.java
+++ b/core/java/android/widget/FastScroller.java
@@ -24,11 +24,11 @@
 import android.animation.PropertyValuesHolder;
 import android.content.Context;
 import android.content.res.ColorStateList;
-import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.os.Build;
+import android.os.SystemClock;
 import android.text.TextUtils;
 import android.text.TextUtils.TruncateAt;
 import android.util.IntProperty;
@@ -43,7 +43,7 @@
 import android.view.ViewGroup.LayoutParams;
 import android.view.ViewGroupOverlay;
 import android.widget.AbsListView.OnScrollListener;
-import com.android.internal.R;
+import android.widget.ImageView.ScaleType;
 
 /**
  * Helper class for AbsListView to draw and control the Fast Scroll thumb
@@ -76,24 +76,6 @@
     /** Scroll thumb and preview being dragged by user. */
     private static final int STATE_DRAGGING = 2;
 
-    /** Styleable attributes. */
-    private static final int[] ATTRS = new int[] {
-        android.R.attr.fastScrollTextColor,
-        android.R.attr.fastScrollThumbDrawable,
-        android.R.attr.fastScrollTrackDrawable,
-        android.R.attr.fastScrollPreviewBackgroundLeft,
-        android.R.attr.fastScrollPreviewBackgroundRight,
-        android.R.attr.fastScrollOverlayPosition
-    };
-
-    // Styleable attribute indices.
-    private static final int TEXT_COLOR = 0;
-    private static final int THUMB_DRAWABLE = 1;
-    private static final int TRACK_DRAWABLE = 2;
-    private static final int PREVIEW_BACKGROUND_LEFT = 3;
-    private static final int PREVIEW_BACKGROUND_RIGHT = 4;
-    private static final int OVERLAY_POSITION = 5;
-
     // Positions for preview image and text.
     private static final int OVERLAY_FLOATING = 0;
     private static final int OVERLAY_AT_THUMB = 1;
@@ -115,7 +97,7 @@
     private final TextView mSecondaryText;
     private final ImageView mThumbImage;
     private final ImageView mTrackImage;
-    private final ImageView mPreviewImage;
+    private final View mPreviewImage;
 
     /**
      * Preview image resource IDs for left- and right-aligned layouts. See
@@ -127,13 +109,25 @@
      * Padding in pixels around the preview text. Applied as layout margins to
      * the preview text and padding to the preview image.
      */
-    private final int mPreviewPadding;
+    private int mPreviewPadding;
 
-    /** Whether there is a track image to display. */
-    private final boolean mHasTrackImage;
+    private int mPreviewMinWidth;
+    private int mPreviewMinHeight;
+    private int mThumbMinWidth;
+    private int mThumbMinHeight;
+
+    /** Theme-specified text size. Used only if text appearance is not set. */
+    private float mTextSize;
+
+    /** Theme-specified text color. Used only if text appearance is not set. */
+    private ColorStateList mTextColor;
+
+    private Drawable mThumbDrawable;
+    private Drawable mTrackDrawable;
+    private int mTextAppearance;
 
     /** Total width of decorations. */
-    private final int mWidth;
+    private int mWidth;
 
     /** Set containing decoration transition animations. */
     private AnimatorSet mDecorAnimation;
@@ -180,7 +174,7 @@
     /** Whether the preview image is visible. */
     private boolean mShowingPreview;
 
-    private BaseAdapter mListAdapter;
+    private Adapter mListAdapter;
     private SectionIndexer mSectionIndexer;
 
     /** Whether decorations should be laid out from right to left. */
@@ -208,22 +202,9 @@
     private boolean mMatchDragPosition;
 
     private float mInitialTouchY;
-    private boolean mHasPendingDrag;
+    private long mPendingDrag = -1;
     private int mScaledTouchSlop;
 
-    private final Runnable mDeferStartDrag = new Runnable() {
-        @Override
-        public void run() {
-            if (mList.isAttachedToWindow()) {
-                beginDrag();
-
-                final float pos = getPosFromMotionEvent(mInitialTouchY);
-                scrollTo(pos);
-            }
-
-            mHasPendingDrag = false;
-        }
-    };
     private int mOldItemCount;
     private int mOldChildCount;
 
@@ -247,92 +228,145 @@
         }
     };
 
-    public FastScroller(AbsListView listView) {
+    public FastScroller(AbsListView listView, int styleResId) {
         mList = listView;
-        mOverlay = listView.getOverlay();
         mOldItemCount = listView.getCount();
         mOldChildCount = listView.getChildCount();
 
         final Context context = listView.getContext();
         mScaledTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+        mScrollBarStyle = listView.getScrollBarStyle();
 
-        final Resources res = context.getResources();
-        final TypedArray ta = context.getTheme().obtainStyledAttributes(ATTRS);
+        mScrollCompleted = true;
+        mState = STATE_VISIBLE;
+        mMatchDragPosition =
+                context.getApplicationInfo().targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB;
 
-        final ImageView trackImage = new ImageView(context);
-        mTrackImage = trackImage;
+        mTrackImage = new ImageView(context);
+        mTrackImage.setScaleType(ScaleType.FIT_XY);
+        mThumbImage = new ImageView(context);
+        mThumbImage.setScaleType(ScaleType.FIT_XY);
+        mPreviewImage = new View(context);
+        mPreviewImage.setAlpha(0f);
 
+        mPrimaryText = createPreviewTextView(context);
+        mSecondaryText = createPreviewTextView(context);
+
+        setStyle(styleResId);
+
+        final ViewGroupOverlay overlay = listView.getOverlay();
+        mOverlay = overlay;
+        overlay.add(mTrackImage);
+        overlay.add(mThumbImage);
+        overlay.add(mPreviewImage);
+        overlay.add(mPrimaryText);
+        overlay.add(mSecondaryText);
+
+        getSectionsFromIndexer();
         updateLongList(mOldChildCount, mOldItemCount);
+        setScrollbarPosition(listView.getVerticalScrollbarPosition());
+        postAutoHide();
+    }
+
+    private void updateAppearance() {
+        final Context context = mList.getContext();
         int width = 0;
 
         // Add track to overlay if it has an image.
-        final Drawable trackDrawable = ta.getDrawable(TRACK_DRAWABLE);
-        if (trackDrawable != null) {
-            mHasTrackImage = true;
-            trackImage.setBackground(trackDrawable);
-            mOverlay.add(trackImage);
-            width = Math.max(width, trackDrawable.getIntrinsicWidth());
-        } else {
-            mHasTrackImage = false;
+        mTrackImage.setImageDrawable(mTrackDrawable);
+        if (mTrackDrawable != null) {
+            width = Math.max(width, mTrackDrawable.getIntrinsicWidth());
         }
 
-        final ImageView thumbImage = new ImageView(context);
-        mThumbImage = thumbImage;
-
         // Add thumb to overlay if it has an image.
-        final Drawable thumbDrawable = ta.getDrawable(THUMB_DRAWABLE);
-        if (thumbDrawable != null) {
-            thumbImage.setImageDrawable(thumbDrawable);
-            mOverlay.add(thumbImage);
-            width = Math.max(width, thumbDrawable.getIntrinsicWidth());
+        mThumbImage.setImageDrawable(mThumbDrawable);
+        mThumbImage.setMinimumWidth(mThumbMinWidth);
+        mThumbImage.setMinimumHeight(mThumbMinHeight);
+        if (mThumbDrawable != null) {
+            width = Math.max(width, mThumbDrawable.getIntrinsicWidth());
         }
 
-        // If necessary, apply minimum thumb width and height.
-        if (thumbDrawable.getIntrinsicWidth() <= 0 || thumbDrawable.getIntrinsicHeight() <= 0) {
-            final int minWidth = res.getDimensionPixelSize(R.dimen.fastscroll_thumb_width);
-            thumbImage.setMinimumWidth(minWidth);
-            thumbImage.setMinimumHeight(
-                    res.getDimensionPixelSize(R.dimen.fastscroll_thumb_height));
-            width = Math.max(width, minWidth);
+        // Account for minimum thumb width.
+        mWidth = Math.max(width, mThumbMinWidth);
+
+        mPreviewImage.setMinimumWidth(mPreviewMinWidth);
+        mPreviewImage.setMinimumHeight(mPreviewMinHeight);
+
+        if (mTextAppearance != 0) {
+            mPrimaryText.setTextAppearance(context, mTextAppearance);
+            mSecondaryText.setTextAppearance(context, mTextAppearance);
         }
 
-        mWidth = width;
+        if (mTextColor != null) {
+            mPrimaryText.setTextColor(mTextColor);
+            mSecondaryText.setTextColor(mTextColor);
+        }
 
-        final int previewSize = res.getDimensionPixelSize(R.dimen.fastscroll_overlay_size);
-        mPreviewImage = new ImageView(context);
-        mPreviewImage.setMinimumWidth(previewSize);
-        mPreviewImage.setMinimumHeight(previewSize);
-        mPreviewImage.setAlpha(0f);
-        mOverlay.add(mPreviewImage);
+        if (mTextSize > 0) {
+            mPrimaryText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
+            mSecondaryText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
+        }
 
-        mPreviewPadding = res.getDimensionPixelSize(R.dimen.fastscroll_overlay_padding);
-
-        final int textMinSize = Math.max(0, previewSize - mPreviewPadding);
-        mPrimaryText = createPreviewTextView(context, ta);
+        final int textMinSize = Math.max(0, mPreviewMinHeight);
         mPrimaryText.setMinimumWidth(textMinSize);
         mPrimaryText.setMinimumHeight(textMinSize);
-        mOverlay.add(mPrimaryText);
-        mSecondaryText = createPreviewTextView(context, ta);
         mSecondaryText.setMinimumWidth(textMinSize);
         mSecondaryText.setMinimumHeight(textMinSize);
-        mOverlay.add(mSecondaryText);
 
-        mPreviewResId[PREVIEW_LEFT] = ta.getResourceId(PREVIEW_BACKGROUND_LEFT, 0);
-        mPreviewResId[PREVIEW_RIGHT] = ta.getResourceId(PREVIEW_BACKGROUND_RIGHT, 0);
-        mOverlayPosition = ta.getInt(OVERLAY_POSITION, OVERLAY_FLOATING);
-        ta.recycle();
-
-        mScrollBarStyle = listView.getScrollBarStyle();
-        mScrollCompleted = true;
-        mState = STATE_VISIBLE;
-        mMatchDragPosition = context.getApplicationInfo().targetSdkVersion
-                >= Build.VERSION_CODES.HONEYCOMB;
-
-        getSectionsFromIndexer();
         refreshDrawablePressedState();
-        updateLongList(listView.getChildCount(), listView.getCount());
-        setScrollbarPosition(mList.getVerticalScrollbarPosition());
-        postAutoHide();
+    }
+
+    public void setStyle(int resId) {
+        final Context context = mList.getContext();
+        final TypedArray ta = context.obtainStyledAttributes(null,
+                com.android.internal.R.styleable.FastScroll, android.R.attr.fastScrollStyle, resId);
+        final int N = ta.getIndexCount();
+        for (int i = 0; i < N; i++) {
+            final int index = ta.getIndex(i);
+            switch (index) {
+                case com.android.internal.R.styleable.FastScroll_position:
+                    mOverlayPosition = ta.getInt(index, OVERLAY_FLOATING);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_backgroundLeft:
+                    mPreviewResId[PREVIEW_LEFT] = ta.getResourceId(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_backgroundRight:
+                    mPreviewResId[PREVIEW_RIGHT] = ta.getResourceId(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_thumbDrawable:
+                    mThumbDrawable = ta.getDrawable(index);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_trackDrawable:
+                    mTrackDrawable = ta.getDrawable(index);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_textAppearance:
+                    mTextAppearance = ta.getResourceId(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_textColor:
+                    mTextColor = ta.getColorStateList(index);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_textSize:
+                    mTextSize = ta.getDimensionPixelSize(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_minWidth:
+                    mPreviewMinWidth = ta.getDimensionPixelSize(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_minHeight:
+                    mPreviewMinHeight = ta.getDimensionPixelSize(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_thumbMinWidth:
+                    mThumbMinWidth = ta.getDimensionPixelSize(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_thumbMinHeight:
+                    mThumbMinHeight = ta.getDimensionPixelSize(index, 0);
+                    break;
+                case com.android.internal.R.styleable.FastScroll_padding:
+                    mPreviewPadding = ta.getDimensionPixelSize(index, 0);
+                    break;
+            }
+        }
+
+        updateAppearance();
     }
 
     /**
@@ -353,7 +387,7 @@
         if (mEnabled != enabled) {
             mEnabled = enabled;
 
-            onStateDependencyChanged();
+            onStateDependencyChanged(true);
         }
     }
 
@@ -371,7 +405,7 @@
         if (mAlwaysShow != alwaysShow) {
             mAlwaysShow = alwaysShow;
 
-            onStateDependencyChanged();
+            onStateDependencyChanged(false);
         }
     }
 
@@ -385,13 +419,18 @@
 
     /**
      * Called when one of the variables affecting enabled state changes.
+     *
+     * @param peekIfEnabled whether the thumb should peek, if enabled
      */
-    private void onStateDependencyChanged() {
+    private void onStateDependencyChanged(boolean peekIfEnabled) {
         if (isEnabled()) {
             if (isAlwaysShowEnabled()) {
                 setState(STATE_VISIBLE);
             } else if (mState == STATE_VISIBLE) {
                 postAutoHide();
+            } else if (peekIfEnabled) {
+                setState(STATE_VISIBLE);
+                postAutoHide();
             }
         } else {
             stop();
@@ -470,24 +509,18 @@
         if (mLongList != longList) {
             mLongList = longList;
 
-            onStateDependencyChanged();
+            onStateDependencyChanged(false);
         }
     }
 
     /**
      * Creates a view into which preview text can be placed.
      */
-    private TextView createPreviewTextView(Context context, TypedArray ta) {
+    private TextView createPreviewTextView(Context context) {
         final LayoutParams params = new LayoutParams(
                 LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
-        final Resources res = context.getResources();
-        final int minSize = res.getDimensionPixelSize(R.dimen.fastscroll_overlay_size);
-        final ColorStateList textColor = ta.getColorStateList(TEXT_COLOR);
-        final float textSize = res.getDimensionPixelSize(R.dimen.fastscroll_overlay_text_size);
         final TextView textView = new TextView(context);
         textView.setLayoutParams(params);
-        textView.setTextColor(textColor);
-        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
         textView.setSingleLine(true);
         textView.setEllipsize(TruncateAt.MIDDLE);
         textView.setGravity(Gravity.CENTER);
@@ -611,7 +644,7 @@
         view.measure(widthMeasureSpec, heightMeasureSpec);
 
         // Align to the left or right.
-        final int width = view.getMeasuredWidth();
+        final int width = Math.min(adjMaxWidth, view.getMeasuredWidth());
         final int left;
         final int right;
         if (mLayoutFromRight) {
@@ -872,15 +905,15 @@
                     .getAdapter();
             if (expAdapter instanceof SectionIndexer) {
                 mSectionIndexer = (SectionIndexer) expAdapter;
-                mListAdapter = (BaseAdapter) adapter;
+                mListAdapter = adapter;
                 mSections = mSectionIndexer.getSections();
             }
         } else if (adapter instanceof SectionIndexer) {
-            mListAdapter = (BaseAdapter) adapter;
+            mListAdapter = adapter;
             mSectionIndexer = (SectionIndexer) adapter;
             mSections = mSectionIndexer.getSections();
         } else {
-            mListAdapter = (BaseAdapter) adapter;
+            mListAdapter = adapter;
             mSections = null;
         }
     }
@@ -1028,7 +1061,7 @@
         }
 
         final Rect bounds = mTempBounds;
-        final ImageView preview = mPreviewImage;
+        final View preview = mPreviewImage;
         final TextView showing;
         final TextView target;
         if (mShowingPrimary) {
@@ -1054,10 +1087,10 @@
         hideShowing.addListener(mSwitchPrimaryListener);
 
         // Apply preview image padding and animate bounds, if necessary.
-        bounds.left -= mPreviewImage.getPaddingLeft();
-        bounds.top -= mPreviewImage.getPaddingTop();
-        bounds.right += mPreviewImage.getPaddingRight();
-        bounds.bottom += mPreviewImage.getPaddingBottom();
+        bounds.left -= preview.getPaddingLeft();
+        bounds.top -= preview.getPaddingTop();
+        bounds.right += preview.getPaddingRight();
+        bounds.bottom += preview.getPaddingBottom();
         final Animator resizePreview = animateBounds(preview, bounds);
         resizePreview.setDuration(DURATION_RESIZE);
 
@@ -1105,8 +1138,8 @@
         final int top = container.top;
         final int bottom = container.bottom;
 
-        final ImageView trackImage = mTrackImage;
-        final ImageView thumbImage = mThumbImage;
+        final View trackImage = mTrackImage;
+        final View thumbImage = mThumbImage;
         final float min = trackImage.getTop();
         final float max = trackImage.getBottom();
         final float offset = min;
@@ -1117,7 +1150,7 @@
         final float previewPos = mOverlayPosition == OVERLAY_AT_THUMB ? thumbMiddle : 0;
 
         // Center the preview on the thumb, constrained to the list bounds.
-        final ImageView previewImage = mPreviewImage;
+        final View previewImage = mPreviewImage;
         final float previewHalfHeight = previewImage.getHeight() / 2f;
         final float minP = top + previewHalfHeight;
         final float maxP = bottom - previewHalfHeight;
@@ -1130,11 +1163,7 @@
     }
 
     private float getPosFromMotionEvent(float y) {
-        final Rect container = mContainerRect;
-        final int top = container.top;
-        final int bottom = container.bottom;
-
-        final ImageView trackImage = mTrackImage;
+        final View trackImage = mTrackImage;
         final float min = trackImage.getTop();
         final float max = trackImage.getBottom();
         final float offset = min;
@@ -1235,8 +1264,7 @@
      * @see #startPendingDrag()
      */
     private void cancelPendingDrag() {
-        mList.removeCallbacks(mDeferStartDrag);
-        mHasPendingDrag = false;
+        mPendingDrag = -1;
     }
 
     /**
@@ -1244,11 +1272,12 @@
      * scrolling, rather than tapping.
      */
     private void startPendingDrag() {
-        mHasPendingDrag = true;
-        mList.postDelayed(mDeferStartDrag, TAP_TIMEOUT);
+        mPendingDrag = SystemClock.uptimeMillis() + TAP_TIMEOUT;
     }
 
     private void beginDrag() {
+        mPendingDrag = -1;
+
         setState(STATE_DRAGGING);
 
         if (mListAdapter == null && mList != null) {
@@ -1288,6 +1317,13 @@
             case MotionEvent.ACTION_MOVE:
                 if (!isPointInside(ev.getX(), ev.getY())) {
                     cancelPendingDrag();
+                } else if (mPendingDrag >= 0 && mPendingDrag <= SystemClock.uptimeMillis()) {
+                    beginDrag();
+
+                    final float pos = getPosFromMotionEvent(mInitialTouchY);
+                    scrollTo(pos);
+
+                    return onTouchEvent(ev);
                 }
                 break;
             case MotionEvent.ACTION_UP:
@@ -1322,7 +1358,7 @@
 
         switch (me.getActionMasked()) {
             case MotionEvent.ACTION_UP: {
-                if (mHasPendingDrag) {
+                if (mPendingDrag >= 0) {
                     // Allow a tap to scroll.
                     beginDrag();
 
@@ -1330,7 +1366,6 @@
                     setThumbPos(pos);
                     scrollTo(pos);
 
-                    cancelPendingDrag();
                     // Will hit the STATE_DRAGGING check below
                 }
 
@@ -1351,20 +1386,9 @@
             } break;
 
             case MotionEvent.ACTION_MOVE: {
-                if (mHasPendingDrag && Math.abs(me.getY() - mInitialTouchY) > mScaledTouchSlop) {
-                    setState(STATE_DRAGGING);
+                if (mPendingDrag >= 0 && Math.abs(me.getY() - mInitialTouchY) > mScaledTouchSlop) {
+                    beginDrag();
 
-                    if (mListAdapter == null && mList != null) {
-                        getSectionsFromIndexer();
-                    }
-
-                    if (mList != null) {
-                        mList.requestDisallowInterceptTouchEvent(true);
-                        mList.reportScrollStateChange(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL);
-                    }
-
-                    cancelFling();
-                    cancelPendingDrag();
                     // Will hit the STATE_DRAGGING check below
                 }
 
@@ -1401,7 +1425,7 @@
      * @return Whether the coordinate is inside the scroller's activation area.
      */
     private boolean isPointInside(float x, float y) {
-        return isPointInsideX(x) && (mHasTrackImage || isPointInsideY(y));
+        return isPointInsideX(x) && (mTrackDrawable != null || isPointInsideY(y));
     }
 
     private boolean isPointInsideX(float x) {
diff --git a/core/java/android/widget/FrameLayout.java b/core/java/android/widget/FrameLayout.java
index d9d4ad7..b029328 100644
--- a/core/java/android/widget/FrameLayout.java
+++ b/core/java/android/widget/FrameLayout.java
@@ -97,11 +97,15 @@
         this(context, attrs, 0);
     }
 
-    public FrameLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public FrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.FrameLayout,
-                    defStyle, 0);
+    public FrameLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.FrameLayout, defStyleAttr, defStyleRes);
 
         mForegroundGravity = a.getInt(
                 com.android.internal.R.styleable.FrameLayout_foregroundGravity, mForegroundGravity);
diff --git a/core/java/android/widget/Gallery.java b/core/java/android/widget/Gallery.java
index 6dd93a7..f7c839f 100644
--- a/core/java/android/widget/Gallery.java
+++ b/core/java/android/widget/Gallery.java
@@ -196,14 +196,18 @@
         this(context, attrs, R.attr.galleryStyle);
     }
 
-    public Gallery(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public Gallery(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public Gallery(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         
         mGestureDetector = new GestureDetector(context, this);
         mGestureDetector.setIsLongpressEnabled(true);
-        
-        TypedArray a = context.obtainStyledAttributes(
-                attrs, com.android.internal.R.styleable.Gallery, defStyle, 0);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.Gallery, defStyleAttr, defStyleRes);
 
         int index = a.getInt(com.android.internal.R.styleable.Gallery_gravity, -1);
         if (index >= 0) {
@@ -1228,7 +1232,7 @@
 
     @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (event.isConfirmKey()) {
+        if (KeyEvent.isConfirmKey(keyCode)) {
             if (mReceivedInvokeKeyDown) {
                 if (mItemCount > 0) {
                     dispatchPress(mSelectedChild);
diff --git a/core/java/android/widget/GridLayout.java b/core/java/android/widget/GridLayout.java
index 54cc3f4..8511601 100644
--- a/core/java/android/widget/GridLayout.java
+++ b/core/java/android/widget/GridLayout.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.IntDef;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
@@ -35,6 +36,8 @@
 import android.widget.RemoteViews.RemoteView;
 import com.android.internal.R;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -165,6 +168,11 @@
 
     // Public constants
 
+    /** @hide */
+    @IntDef({HORIZONTAL, VERTICAL})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Orientation {}
+
     /**
      * The horizontal orientation.
      */
@@ -186,6 +194,11 @@
      */
     public static final int UNDEFINED = Integer.MIN_VALUE;
 
+    /** @hide */
+    @IntDef({ALIGN_BOUNDS, ALIGN_MARGINS})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface AlignmentMode {}
+
     /**
      * This constant is an {@link #setAlignmentMode(int) alignmentMode}.
      * When the {@code alignmentMode} is set to {@link #ALIGN_BOUNDS}, alignment
@@ -262,13 +275,23 @@
 
     // Constructors
 
-    /**
-     * {@inheritDoc}
-     */
-    public GridLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public GridLayout(Context context) {
+        this(context, null);
+    }
+
+    public GridLayout(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public GridLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public GridLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         mDefaultGap = context.getResources().getDimensionPixelOffset(R.dimen.default_gap);
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.GridLayout);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.GridLayout, defStyleAttr, defStyleRes);
         try {
             setRowCount(a.getInt(ROW_COUNT, DEFAULT_COUNT));
             setColumnCount(a.getInt(COLUMN_COUNT, DEFAULT_COUNT));
@@ -282,21 +305,6 @@
         }
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    public GridLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public GridLayout(Context context) {
-        //noinspection NullableProblems
-        this(context, null);
-    }
-
     // Implementation
 
     /**
@@ -308,6 +316,7 @@
      *
      * @attr ref android.R.styleable#GridLayout_orientation
      */
+    @Orientation
     public int getOrientation() {
         return mOrientation;
     }
@@ -348,7 +357,7 @@
      *
      * @attr ref android.R.styleable#GridLayout_orientation
      */
-    public void setOrientation(int orientation) {
+    public void setOrientation(@Orientation int orientation) {
         if (this.mOrientation != orientation) {
             this.mOrientation = orientation;
             invalidateStructure();
@@ -479,6 +488,7 @@
      *
      * @attr ref android.R.styleable#GridLayout_alignmentMode
      */
+    @AlignmentMode
     public int getAlignmentMode() {
         return mAlignmentMode;
     }
@@ -498,7 +508,7 @@
      *
      * @attr ref android.R.styleable#GridLayout_alignmentMode
      */
-    public void setAlignmentMode(int alignmentMode) {
+    public void setAlignmentMode(@AlignmentMode int alignmentMode) {
         this.mAlignmentMode = alignmentMode;
         requestLayout();
     }
diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java
index 15daf83..04b18c1 100644
--- a/core/java/android/widget/GridView.java
+++ b/core/java/android/widget/GridView.java
@@ -16,26 +16,32 @@
 
 package android.widget;
 
+import android.annotation.IntDef;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.TypedArray;
 import android.graphics.Rect;
 import android.os.Trace;
 import android.util.AttributeSet;
+import android.util.MathUtils;
 import android.view.Gravity;
 import android.view.KeyEvent;
 import android.view.SoundEffectConstants;
 import android.view.View;
 import android.view.ViewDebug;
 import android.view.ViewGroup;
+import android.view.ViewRootImpl;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityNodeProvider;
 import android.view.accessibility.AccessibilityNodeInfo.CollectionInfo;
 import android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo;
 import android.view.animation.GridLayoutAnimationController;
-import android.widget.AbsListView.LayoutParams;
 import android.widget.RemoteViews.RemoteView;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 
 /**
  * A view that shows items in two-dimensional scrolling grid. The items in the
@@ -53,6 +59,11 @@
  */
 @RemoteView
 public class GridView extends AbsListView {
+    /** @hide */
+    @IntDef({NO_STRETCH, STRETCH_SPACING, STRETCH_COLUMN_WIDTH, STRETCH_SPACING_UNIFORM})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface StretchMode {}
+
     /**
      * Disables stretching.
      * 
@@ -110,11 +121,15 @@
         this(context, attrs, com.android.internal.R.attr.gridViewStyle);
     }
 
-    public GridView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public GridView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.GridView, defStyle, 0);
+    public GridView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.GridView, defStyleAttr, defStyleRes);
 
         int hSpacing = a.getDimensionPixelOffset(
                 com.android.internal.R.styleable.GridView_horizontalSpacing, 0);
@@ -1014,6 +1029,11 @@
     }
 
     @Override
+    AbsPositionScroller createPositionScroller() {
+        return new GridViewPositionScroller();
+    }
+
+    @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
         // Sets up mListPadding
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -1202,6 +1222,34 @@
 
             setSelectedPositionInt(mNextSelectedPosition);
 
+            AccessibilityNodeInfo accessibilityFocusLayoutRestoreNode = null;
+            View accessibilityFocusLayoutRestoreView = null;
+            int accessibilityFocusPosition = INVALID_POSITION;
+
+            // Remember which child, if any, had accessibility focus. This must
+            // occur before recycling any views, since that will clear
+            // accessibility focus.
+            final ViewRootImpl viewRootImpl = getViewRootImpl();
+            if (viewRootImpl != null) {
+                final View focusHost = viewRootImpl.getAccessibilityFocusedHost();
+                if (focusHost != null) {
+                    final View focusChild = getAccessibilityFocusedChild(focusHost);
+                    if (focusChild != null) {
+                        if (!dataChanged || focusChild.hasTransientState()
+                                || mAdapterHasStableIds) {
+                            // The views won't be changing, so try to maintain
+                            // focus on the current host and virtual view.
+                            accessibilityFocusLayoutRestoreView = focusHost;
+                            accessibilityFocusLayoutRestoreNode = viewRootImpl
+                                    .getAccessibilityFocusedVirtualView();
+                        }
+
+                        // Try to maintain focus at the same position.
+                        accessibilityFocusPosition = getPositionForView(focusChild);
+                    }
+                }
+            }
+
             // Pull all children into the RecycleBin.
             // These views will be reused if possible
             final int firstPosition = mFirstPosition;
@@ -1216,7 +1264,6 @@
             }
 
             // Clear out old views
-            //removeAllViewsInLayout();
             detachAllViewsFromParent();
             recycleBin.removeSkippedScrap();
 
@@ -1287,6 +1334,35 @@
                 mSelectorRect.setEmpty();
             }
 
+            // Attempt to restore accessibility focus, if necessary.
+            if (viewRootImpl != null) {
+                final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
+                if (newAccessibilityFocusedView == null) {
+                    if (accessibilityFocusLayoutRestoreView != null
+                            && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
+                        final AccessibilityNodeProvider provider =
+                                accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
+                        if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
+                            final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
+                                    accessibilityFocusLayoutRestoreNode.getSourceNodeId());
+                            provider.performAction(virtualViewId,
+                                    AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
+                        } else {
+                            accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
+                        }
+                    } else if (accessibilityFocusPosition != INVALID_POSITION) {
+                        // Bound the position within the visible children.
+                        final int position = MathUtils.constrain(
+                                accessibilityFocusPosition - mFirstPosition, 0,
+                                getChildCount() - 1);
+                        final View restoreView = getChildAt(position);
+                        if (restoreView != null) {
+                            restoreView.requestAccessibilityFocus();
+                        }
+                    }
+                }
+            }
+
             mLayoutMode = LAYOUT_NORMAL;
             mDataChanged = false;
             if (mPositionScrollAfterLayout != null) {
@@ -2056,13 +2132,14 @@
      *
      * @attr ref android.R.styleable#GridView_stretchMode
      */
-    public void setStretchMode(int stretchMode) {
+    public void setStretchMode(@StretchMode int stretchMode) {
         if (stretchMode != mStretchMode) {
             mStretchMode = stretchMode;
             requestLayoutIfNecessary();
         }
     }
 
+    @StretchMode
     public int getStretchMode() {
         return mStretchMode;
     }
@@ -2265,7 +2342,9 @@
 
         final int columnsCount = getNumColumns();
         final int rowsCount = getCount() / columnsCount;
-        final CollectionInfo collectionInfo = CollectionInfo.obtain(columnsCount, rowsCount, false);
+        final int selectionMode = getSelectionModeForAccessibility();
+        final CollectionInfo collectionInfo = CollectionInfo.obtain(
+                columnsCount, rowsCount, false, selectionMode);
         info.setCollectionInfo(collectionInfo);
     }
 
@@ -2292,7 +2371,38 @@
 
         final LayoutParams lp = (LayoutParams) view.getLayoutParams();
         final boolean isHeading = lp != null && lp.viewType != ITEM_VIEW_TYPE_HEADER_OR_FOOTER;
-        final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(column, 1, row, 1, isHeading);
+        final boolean isSelected = isItemChecked(position);
+        final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(
+                column, 1, row, 1, isHeading, isSelected);
         info.setCollectionItemInfo(itemInfo);
     }
+
+    /**
+     * Sub-position scroller that understands the layout of a GridView.
+     */
+    class GridViewPositionScroller extends AbsSubPositionScroller {
+        @Override
+        public int getRowForPosition(int position) {
+            return position / mNumColumns;
+        }
+
+        @Override
+        public int getFirstPositionForRow(int row) {
+            return row * mNumColumns;
+        }
+
+        @Override
+        public int getHeightForRow(int row) {
+            final int firstRowPosition = row * mNumColumns;
+            final int lastRowPosition = Math.min(getCount(), firstRowPosition + mNumColumns);
+            int maxHeight = 0;
+            for (int i = firstRowPosition; i < lastRowPosition; i++) {
+                final int height = getHeightForPosition(i);
+                if (height > maxHeight) {
+                    maxHeight = height;
+                }
+            }
+            return maxHeight;
+        }
+    }
 }
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index dab0962..25d4f42 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -146,12 +146,17 @@
         this(context, attrs, com.android.internal.R.attr.horizontalScrollViewStyle);
     }
 
-    public HorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public HorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public HorizontalScrollView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         initScrollView();
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                android.R.styleable.HorizontalScrollView, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, android.R.styleable.HorizontalScrollView, defStyleAttr, defStyleRes);
 
         setFillViewport(a.getBoolean(android.R.styleable.HorizontalScrollView_fillViewport, false));
 
diff --git a/core/java/android/widget/ImageButton.java b/core/java/android/widget/ImageButton.java
index 379354ca..3a20628 100644
--- a/core/java/android/widget/ImageButton.java
+++ b/core/java/android/widget/ImageButton.java
@@ -17,16 +17,11 @@
 package android.widget;
 
 import android.content.Context;
-import android.os.Handler;
-import android.os.Message;
 import android.util.AttributeSet;
-import android.view.MotionEvent;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.RemoteViews.RemoteView;
 
-import java.util.Map;
-
 /**
  * <p>
  * Displays a button with an image (instead of text) that can be pressed 
@@ -83,8 +78,12 @@
         this(context, attrs, com.android.internal.R.attr.imageButtonStyle);
     }
 
-    public ImageButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ImageButton(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ImageButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         setFocusable(true);
     }
 
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index f05179b..eedacb5 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -24,8 +24,10 @@
 import android.graphics.Canvas;
 import android.graphics.ColorFilter;
 import android.graphics.Matrix;
+import android.graphics.PixelFormat;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
+import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Xfermode;
 import android.graphics.drawable.BitmapDrawable;
@@ -119,12 +121,17 @@
         this(context, attrs, 0);
     }
 
-    public ImageView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ImageView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
         initImageView();
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.ImageView, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ImageView, defStyleAttr, defStyleRes);
 
         Drawable d = a.getDrawable(com.android.internal.R.styleable.ImageView_src);
         if (d != null) {
@@ -357,13 +364,13 @@
     @android.view.RemotableViewMethod
     public void setImageResource(int resId) {
         if (mUri != null || mResource != resId) {
+            final int oldWidth = mDrawableWidth;
+            final int oldHeight = mDrawableHeight;
+
             updateDrawable(null);
             mResource = resId;
             mUri = null;
 
-            final int oldWidth = mDrawableWidth;
-            final int oldHeight = mDrawableHeight;
-
             resolveUri();
 
             if (oldWidth != mDrawableWidth || oldHeight != mDrawableHeight) {
@@ -635,7 +642,7 @@
 
         if (mResource != 0) {
             try {
-                d = rsrc.getDrawable(mResource);
+                d = mContext.getDrawable(mResource);
             } catch (Exception e) {
                 Log.w("ImageView", "Unable to find resource: " + mResource, e);
                 // Don't try again.
@@ -648,7 +655,7 @@
                     // Load drawable through Resources, to get the source density information
                     ContentResolver.OpenResourceIdResult r =
                             mContext.getContentResolver().getResourceId(mUri);
-                    d = r.r.getDrawable(r.id);
+                    d = r.r.getDrawable(r.id, mContext.getTheme());
                 } catch (Exception e) {
                     Log.w("ImageView", "Unable to open content: " + mUri, e);
                 }
@@ -657,7 +664,7 @@
                 InputStream stream = null;
                 try {
                     stream = mContext.getContentResolver().openInputStream(mUri);
-                    d = Drawable.createFromStream(stream, null);
+                    d = Drawable.createFromStreamThemed(stream, null, mContext.getTheme());
                 } catch (Exception e) {
                     Log.w("ImageView", "Unable to open content: " + mUri, e);
                 } finally {
@@ -1220,6 +1227,37 @@
         }
     }
 
+    @Override
+    public boolean isOpaque() {
+        return super.isOpaque() || mDrawable != null && mXfermode == null
+                && mDrawable.getOpacity() == PixelFormat.OPAQUE
+                && mAlpha * mViewAlphaScale >> 8 == 255
+                && isFilledByImage();
+    }
+
+    private boolean isFilledByImage() {
+        if (mDrawable == null) {
+            return false;
+        }
+
+        final Rect bounds = mDrawable.getBounds();
+        final Matrix matrix = mDrawMatrix;
+        if (matrix == null) {
+            return bounds.left <= 0 && bounds.top <= 0 && bounds.right >= getWidth()
+                    && bounds.bottom >= getHeight();
+        } else if (matrix.rectStaysRect()) {
+            final RectF boundsSrc = mTempSrc;
+            final RectF boundsDst = mTempDst;
+            boundsSrc.set(bounds);
+            matrix.mapRect(boundsDst, boundsSrc);
+            return boundsDst.left <= 0 && boundsDst.top <= 0 && boundsDst.right >= getWidth()
+                    && boundsDst.bottom >= getHeight();
+        } else {
+            // If the matrix doesn't map to a rectangle, assume the worst.
+            return false;
+        }
+    }
+
     @RemotableViewMethod
     @Override
     public void setVisibility(int visibility) {
diff --git a/core/java/android/widget/LegacyTimePickerDelegate.java b/core/java/android/widget/LegacyTimePickerDelegate.java
new file mode 100644
index 0000000..1634d5f
--- /dev/null
+++ b/core/java/android/widget/LegacyTimePickerDelegate.java
@@ -0,0 +1,638 @@
+/*
+ * Copyright (C) 2013 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 android.widget;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.TypedArray;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.format.DateFormat;
+import android.text.format.DateUtils;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodManager;
+import com.android.internal.R;
+
+import java.text.DateFormatSymbols;
+import java.util.Calendar;
+import java.util.Locale;
+
+import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_AUTO;
+import static android.view.View.IMPORTANT_FOR_ACCESSIBILITY_YES;
+
+/**
+ * A delegate implementing the basic TimePicker
+ */
+class LegacyTimePickerDelegate extends TimePicker.AbstractTimePickerDelegate {
+
+    private static final boolean DEFAULT_ENABLED_STATE = true;
+
+    private static final int HOURS_IN_HALF_DAY = 12;
+
+    // state
+    private boolean mIs24HourView;
+
+    private boolean mIsAm;
+
+    // ui components
+    private final NumberPicker mHourSpinner;
+
+    private final NumberPicker mMinuteSpinner;
+
+    private final NumberPicker mAmPmSpinner;
+
+    private final EditText mHourSpinnerInput;
+
+    private final EditText mMinuteSpinnerInput;
+
+    private final EditText mAmPmSpinnerInput;
+
+    private final TextView mDivider;
+
+    // Note that the legacy implementation of the TimePicker is
+    // using a button for toggling between AM/PM while the new
+    // version uses a NumberPicker spinner. Therefore the code
+    // accommodates these two cases to be backwards compatible.
+    private final Button mAmPmButton;
+
+    private final String[] mAmPmStrings;
+
+    private boolean mIsEnabled = DEFAULT_ENABLED_STATE;
+
+    private Calendar mTempCalendar;
+
+    private boolean mHourWithTwoDigit;
+    private char mHourFormat;
+
+    /**
+     * A no-op callback used in the constructor to avoid null checks later in
+     * the code.
+     */
+    private static final TimePicker.OnTimeChangedListener NO_OP_CHANGE_LISTENER =
+            new TimePicker.OnTimeChangedListener() {
+                public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
+                }
+            };
+
+    public LegacyTimePickerDelegate(TimePicker delegator, Context context, AttributeSet attrs,
+                                    int defStyleAttr, int defStyleRes) {
+        super(delegator, context);
+
+        // process style attributes
+        final TypedArray attributesArray = mContext.obtainStyledAttributes(
+                attrs, R.styleable.TimePicker, defStyleAttr, defStyleRes);
+        final int layoutResourceId = attributesArray.getResourceId(
+                R.styleable.TimePicker_legacyLayout, R.layout.time_picker_legacy);
+        attributesArray.recycle();
+
+        final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
+                Context.LAYOUT_INFLATER_SERVICE);
+        inflater.inflate(layoutResourceId, mDelegator, true);
+
+        // hour
+        mHourSpinner = (NumberPicker) delegator.findViewById(R.id.hour);
+        mHourSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
+            public void onValueChange(NumberPicker spinner, int oldVal, int newVal) {
+                updateInputState();
+                if (!is24HourView()) {
+                    if ((oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) ||
+                            (oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1)) {
+                        mIsAm = !mIsAm;
+                        updateAmPmControl();
+                    }
+                }
+                onTimeChanged();
+            }
+        });
+        mHourSpinnerInput = (EditText) mHourSpinner.findViewById(R.id.numberpicker_input);
+        mHourSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
+
+        // divider (only for the new widget style)
+        mDivider = (TextView) mDelegator.findViewById(R.id.divider);
+        if (mDivider != null) {
+            setDividerText();
+        }
+
+        // minute
+        mMinuteSpinner = (NumberPicker) mDelegator.findViewById(R.id.minute);
+        mMinuteSpinner.setMinValue(0);
+        mMinuteSpinner.setMaxValue(59);
+        mMinuteSpinner.setOnLongPressUpdateInterval(100);
+        mMinuteSpinner.setFormatter(NumberPicker.getTwoDigitFormatter());
+        mMinuteSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
+            public void onValueChange(NumberPicker spinner, int oldVal, int newVal) {
+                updateInputState();
+                int minValue = mMinuteSpinner.getMinValue();
+                int maxValue = mMinuteSpinner.getMaxValue();
+                if (oldVal == maxValue && newVal == minValue) {
+                    int newHour = mHourSpinner.getValue() + 1;
+                    if (!is24HourView() && newHour == HOURS_IN_HALF_DAY) {
+                        mIsAm = !mIsAm;
+                        updateAmPmControl();
+                    }
+                    mHourSpinner.setValue(newHour);
+                } else if (oldVal == minValue && newVal == maxValue) {
+                    int newHour = mHourSpinner.getValue() - 1;
+                    if (!is24HourView() && newHour == HOURS_IN_HALF_DAY - 1) {
+                        mIsAm = !mIsAm;
+                        updateAmPmControl();
+                    }
+                    mHourSpinner.setValue(newHour);
+                }
+                onTimeChanged();
+            }
+        });
+        mMinuteSpinnerInput = (EditText) mMinuteSpinner.findViewById(R.id.numberpicker_input);
+        mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
+
+            /* Get the localized am/pm strings and use them in the spinner */
+        mAmPmStrings = new DateFormatSymbols().getAmPmStrings();
+
+        // am/pm
+        View amPmView = mDelegator.findViewById(R.id.amPm);
+        if (amPmView instanceof Button) {
+            mAmPmSpinner = null;
+            mAmPmSpinnerInput = null;
+            mAmPmButton = (Button) amPmView;
+            mAmPmButton.setOnClickListener(new View.OnClickListener() {
+                public void onClick(View button) {
+                    button.requestFocus();
+                    mIsAm = !mIsAm;
+                    updateAmPmControl();
+                    onTimeChanged();
+                }
+            });
+        } else {
+            mAmPmButton = null;
+            mAmPmSpinner = (NumberPicker) amPmView;
+            mAmPmSpinner.setMinValue(0);
+            mAmPmSpinner.setMaxValue(1);
+            mAmPmSpinner.setDisplayedValues(mAmPmStrings);
+            mAmPmSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
+                public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
+                    updateInputState();
+                    picker.requestFocus();
+                    mIsAm = !mIsAm;
+                    updateAmPmControl();
+                    onTimeChanged();
+                }
+            });
+            mAmPmSpinnerInput = (EditText) mAmPmSpinner.findViewById(R.id.numberpicker_input);
+            mAmPmSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE);
+        }
+
+        if (isAmPmAtStart()) {
+            // Move the am/pm view to the beginning
+            ViewGroup amPmParent = (ViewGroup) delegator.findViewById(R.id.timePickerLayout);
+            amPmParent.removeView(amPmView);
+            amPmParent.addView(amPmView, 0);
+            // Swap layout margins if needed. They may be not symmetrical (Old Standard Theme
+            // for example and not for Holo Theme)
+            ViewGroup.MarginLayoutParams lp =
+                    (ViewGroup.MarginLayoutParams) amPmView.getLayoutParams();
+            final int startMargin = lp.getMarginStart();
+            final int endMargin = lp.getMarginEnd();
+            if (startMargin != endMargin) {
+                lp.setMarginStart(endMargin);
+                lp.setMarginEnd(startMargin);
+            }
+        }
+
+        getHourFormatData();
+
+        // update controls to initial state
+        updateHourControl();
+        updateMinuteControl();
+        updateAmPmControl();
+
+        setOnTimeChangedListener(NO_OP_CHANGE_LISTENER);
+
+        // set to current time
+        setCurrentHour(mTempCalendar.get(Calendar.HOUR_OF_DAY));
+        setCurrentMinute(mTempCalendar.get(Calendar.MINUTE));
+
+        if (!isEnabled()) {
+            setEnabled(false);
+        }
+
+        // set the content descriptions
+        setContentDescriptions();
+
+        // If not explicitly specified this view is important for accessibility.
+        if (mDelegator.getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
+            mDelegator.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
+        }
+    }
+
+    private void getHourFormatData() {
+        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale,
+                (mIs24HourView) ? "Hm" : "hm");
+        final int lengthPattern = bestDateTimePattern.length();
+        mHourWithTwoDigit = false;
+        char hourFormat = '\0';
+        // Check if the returned pattern is single or double 'H', 'h', 'K', 'k'. We also save
+        // the hour format that we found.
+        for (int i = 0; i < lengthPattern; i++) {
+            final char c = bestDateTimePattern.charAt(i);
+            if (c == 'H' || c == 'h' || c == 'K' || c == 'k') {
+                mHourFormat = c;
+                if (i + 1 < lengthPattern && c == bestDateTimePattern.charAt(i + 1)) {
+                    mHourWithTwoDigit = true;
+                }
+                break;
+            }
+        }
+    }
+
+    private boolean isAmPmAtStart() {
+        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale,
+                "hm" /* skeleton */);
+
+        return bestDateTimePattern.startsWith("a");
+    }
+
+    /**
+     * The time separator is defined in the Unicode CLDR and cannot be supposed to be ":".
+     *
+     * See http://unicode.org/cldr/trac/browser/trunk/common/main
+     *
+     * We pass the correct "skeleton" depending on 12 or 24 hours view and then extract the
+     * separator as the character which is just after the hour marker in the returned pattern.
+     */
+    private void setDividerText() {
+        final String skeleton = (mIs24HourView) ? "Hm" : "hm";
+        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale,
+                skeleton);
+        final String separatorText;
+        int hourIndex = bestDateTimePattern.lastIndexOf('H');
+        if (hourIndex == -1) {
+            hourIndex = bestDateTimePattern.lastIndexOf('h');
+        }
+        if (hourIndex == -1) {
+            // Default case
+            separatorText = ":";
+        } else {
+            int minuteIndex = bestDateTimePattern.indexOf('m', hourIndex + 1);
+            if  (minuteIndex == -1) {
+                separatorText = Character.toString(bestDateTimePattern.charAt(hourIndex + 1));
+            } else {
+                separatorText = bestDateTimePattern.substring(hourIndex + 1, minuteIndex);
+            }
+        }
+        mDivider.setText(separatorText);
+    }
+
+    @Override
+    public void setCurrentHour(Integer currentHour) {
+        setCurrentHour(currentHour, true);
+    }
+
+    private void setCurrentHour(Integer currentHour, boolean notifyTimeChanged) {
+        // why was Integer used in the first place?
+        if (currentHour == null || currentHour == getCurrentHour()) {
+            return;
+        }
+        if (!is24HourView()) {
+            // convert [0,23] ordinal to wall clock display
+            if (currentHour >= HOURS_IN_HALF_DAY) {
+                mIsAm = false;
+                if (currentHour > HOURS_IN_HALF_DAY) {
+                    currentHour = currentHour - HOURS_IN_HALF_DAY;
+                }
+            } else {
+                mIsAm = true;
+                if (currentHour == 0) {
+                    currentHour = HOURS_IN_HALF_DAY;
+                }
+            }
+            updateAmPmControl();
+        }
+        mHourSpinner.setValue(currentHour);
+        if (notifyTimeChanged) {
+            onTimeChanged();
+        }
+    }
+
+    @Override
+    public Integer getCurrentHour() {
+        int currentHour = mHourSpinner.getValue();
+        if (is24HourView()) {
+            return currentHour;
+        } else if (mIsAm) {
+            return currentHour % HOURS_IN_HALF_DAY;
+        } else {
+            return (currentHour % HOURS_IN_HALF_DAY) + HOURS_IN_HALF_DAY;
+        }
+    }
+
+    @Override
+    public void setCurrentMinute(Integer currentMinute) {
+        if (currentMinute == getCurrentMinute()) {
+            return;
+        }
+        mMinuteSpinner.setValue(currentMinute);
+        onTimeChanged();
+    }
+
+    @Override
+    public Integer getCurrentMinute() {
+        return mMinuteSpinner.getValue();
+    }
+
+    @Override
+    public void setIs24HourView(Boolean is24HourView) {
+        if (mIs24HourView == is24HourView) {
+            return;
+        }
+        // cache the current hour since spinner range changes and BEFORE changing mIs24HourView!!
+        int currentHour = getCurrentHour();
+        // Order is important here.
+        mIs24HourView = is24HourView;
+        getHourFormatData();
+        updateHourControl();
+        // set value after spinner range is updated
+        setCurrentHour(currentHour, false);
+        updateMinuteControl();
+        updateAmPmControl();
+    }
+
+    @Override
+    public boolean is24HourView() {
+        return mIs24HourView;
+    }
+
+    @Override
+    public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener) {
+        mOnTimeChangedListener = onTimeChangedListener;
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        mMinuteSpinner.setEnabled(enabled);
+        if (mDivider != null) {
+            mDivider.setEnabled(enabled);
+        }
+        mHourSpinner.setEnabled(enabled);
+        if (mAmPmSpinner != null) {
+            mAmPmSpinner.setEnabled(enabled);
+        } else {
+            mAmPmButton.setEnabled(enabled);
+        }
+        mIsEnabled = enabled;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return mIsEnabled;
+    }
+
+    @Override
+    public void setShowDoneButton(boolean showDoneButton) {
+        // Nothing to do
+    }
+
+    @Override
+    public void setDismissCallback(TimePicker.TimePickerDismissCallback callback) {
+        // Nothing to do
+    }
+
+    @Override
+    public int getBaseline() {
+        return mHourSpinner.getBaseline();
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        setCurrentLocale(newConfig.locale);
+    }
+
+    @Override
+    public Parcelable onSaveInstanceState(Parcelable superState) {
+        return new SavedState(superState, getCurrentHour(), getCurrentMinute());
+    }
+
+    @Override
+    public void onRestoreInstanceState(Parcelable state) {
+        SavedState ss = (SavedState) state;
+        setCurrentHour(ss.getHour());
+        setCurrentMinute(ss.getMinute());
+    }
+
+    @Override
+    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+        onPopulateAccessibilityEvent(event);
+        return true;
+    }
+
+    @Override
+    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+        int flags = DateUtils.FORMAT_SHOW_TIME;
+        if (mIs24HourView) {
+            flags |= DateUtils.FORMAT_24HOUR;
+        } else {
+            flags |= DateUtils.FORMAT_12HOUR;
+        }
+        mTempCalendar.set(Calendar.HOUR_OF_DAY, getCurrentHour());
+        mTempCalendar.set(Calendar.MINUTE, getCurrentMinute());
+        String selectedDateUtterance = DateUtils.formatDateTime(mContext,
+                mTempCalendar.getTimeInMillis(), flags);
+        event.getText().add(selectedDateUtterance);
+    }
+
+    @Override
+    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+        event.setClassName(TimePicker.class.getName());
+    }
+
+    @Override
+    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+        info.setClassName(TimePicker.class.getName());
+    }
+
+    private void updateInputState() {
+        // Make sure that if the user changes the value and the IME is active
+        // for one of the inputs if this widget, the IME is closed. If the user
+        // changed the value via the IME and there is a next input the IME will
+        // be shown, otherwise the user chose another means of changing the
+        // value and having the IME up makes no sense.
+        InputMethodManager inputMethodManager = InputMethodManager.peekInstance();
+        if (inputMethodManager != null) {
+            if (inputMethodManager.isActive(mHourSpinnerInput)) {
+                mHourSpinnerInput.clearFocus();
+                inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0);
+            } else if (inputMethodManager.isActive(mMinuteSpinnerInput)) {
+                mMinuteSpinnerInput.clearFocus();
+                inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0);
+            } else if (inputMethodManager.isActive(mAmPmSpinnerInput)) {
+                mAmPmSpinnerInput.clearFocus();
+                inputMethodManager.hideSoftInputFromWindow(mDelegator.getWindowToken(), 0);
+            }
+        }
+    }
+
+    private void updateAmPmControl() {
+        if (is24HourView()) {
+            if (mAmPmSpinner != null) {
+                mAmPmSpinner.setVisibility(View.GONE);
+            } else {
+                mAmPmButton.setVisibility(View.GONE);
+            }
+        } else {
+            int index = mIsAm ? Calendar.AM : Calendar.PM;
+            if (mAmPmSpinner != null) {
+                mAmPmSpinner.setValue(index);
+                mAmPmSpinner.setVisibility(View.VISIBLE);
+            } else {
+                mAmPmButton.setText(mAmPmStrings[index]);
+                mAmPmButton.setVisibility(View.VISIBLE);
+            }
+        }
+        mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+    }
+
+    /**
+     * Sets the current locale.
+     *
+     * @param locale The current locale.
+     */
+    @Override
+    public void setCurrentLocale(Locale locale) {
+        super.setCurrentLocale(locale);
+        mTempCalendar = Calendar.getInstance(locale);
+    }
+
+    private void onTimeChanged() {
+        mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+        if (mOnTimeChangedListener != null) {
+            mOnTimeChangedListener.onTimeChanged(mDelegator, getCurrentHour(),
+                    getCurrentMinute());
+        }
+    }
+
+    private void updateHourControl() {
+        if (is24HourView()) {
+            // 'k' means 1-24 hour
+            if (mHourFormat == 'k') {
+                mHourSpinner.setMinValue(1);
+                mHourSpinner.setMaxValue(24);
+            } else {
+                mHourSpinner.setMinValue(0);
+                mHourSpinner.setMaxValue(23);
+            }
+        } else {
+            // 'K' means 0-11 hour
+            if (mHourFormat == 'K') {
+                mHourSpinner.setMinValue(0);
+                mHourSpinner.setMaxValue(11);
+            } else {
+                mHourSpinner.setMinValue(1);
+                mHourSpinner.setMaxValue(12);
+            }
+        }
+        mHourSpinner.setFormatter(mHourWithTwoDigit ? NumberPicker.getTwoDigitFormatter() : null);
+    }
+
+    private void updateMinuteControl() {
+        if (is24HourView()) {
+            mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE);
+        } else {
+            mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
+        }
+    }
+
+    private void setContentDescriptions() {
+        // Minute
+        trySetContentDescription(mMinuteSpinner, R.id.increment,
+                R.string.time_picker_increment_minute_button);
+        trySetContentDescription(mMinuteSpinner, R.id.decrement,
+                R.string.time_picker_decrement_minute_button);
+        // Hour
+        trySetContentDescription(mHourSpinner, R.id.increment,
+                R.string.time_picker_increment_hour_button);
+        trySetContentDescription(mHourSpinner, R.id.decrement,
+                R.string.time_picker_decrement_hour_button);
+        // AM/PM
+        if (mAmPmSpinner != null) {
+            trySetContentDescription(mAmPmSpinner, R.id.increment,
+                    R.string.time_picker_increment_set_pm_button);
+            trySetContentDescription(mAmPmSpinner, R.id.decrement,
+                    R.string.time_picker_decrement_set_am_button);
+        }
+    }
+
+    private void trySetContentDescription(View root, int viewId, int contDescResId) {
+        View target = root.findViewById(viewId);
+        if (target != null) {
+            target.setContentDescription(mContext.getString(contDescResId));
+        }
+    }
+
+    /**
+     * Used to save / restore state of time picker
+     */
+    private static class SavedState extends View.BaseSavedState {
+
+        private final int mHour;
+
+        private final int mMinute;
+
+        private SavedState(Parcelable superState, int hour, int minute) {
+            super(superState);
+            mHour = hour;
+            mMinute = minute;
+        }
+
+        private SavedState(Parcel in) {
+            super(in);
+            mHour = in.readInt();
+            mMinute = in.readInt();
+        }
+
+        public int getHour() {
+            return mHour;
+        }
+
+        public int getMinute() {
+            return mMinute;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            super.writeToParcel(dest, flags);
+            dest.writeInt(mHour);
+            dest.writeInt(mMinute);
+        }
+
+        @SuppressWarnings({"unused", "hiding"})
+        public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() {
+            public SavedState createFromParcel(Parcel in) {
+                return new SavedState(in);
+            }
+
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+    }
+}
+
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index ad60a95..82e624d 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -18,6 +18,7 @@
 
 import com.android.internal.R;
 
+import android.annotation.IntDef;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
@@ -31,6 +32,9 @@
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.widget.RemoteViews.RemoteView;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 
 /**
  * A Layout that arranges its children in a single column or a single row. The direction of 
@@ -57,9 +61,25 @@
  */
 @RemoteView
 public class LinearLayout extends ViewGroup {
+    /** @hide */
+    @IntDef({HORIZONTAL, VERTICAL})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface OrientationMode {}
+
     public static final int HORIZONTAL = 0;
     public static final int VERTICAL = 1;
 
+    /** @hide */
+    @IntDef(flag = true,
+            value = {
+                SHOW_DIVIDER_NONE,
+                SHOW_DIVIDER_BEGINNING,
+                SHOW_DIVIDER_MIDDLE,
+                SHOW_DIVIDER_END
+            })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface DividerMode {}
+
     /**
      * Don't show any dividers.
      */
@@ -165,18 +185,22 @@
     private int mDividerPadding;
 
     public LinearLayout(Context context) {
-        super(context);
+        this(context, null);
     }
 
     public LinearLayout(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
     
-    public LinearLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public LinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.LinearLayout, defStyle, 0);
+    public LinearLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.LinearLayout, defStyleAttr, defStyleRes);
 
         int index = a.getInt(com.android.internal.R.styleable.LinearLayout_orientation, -1);
         if (index >= 0) {
@@ -214,7 +238,7 @@
      *                     {@link #SHOW_DIVIDER_MIDDLE}, or {@link #SHOW_DIVIDER_END},
      *                     or {@link #SHOW_DIVIDER_NONE} to show no dividers.
      */
-    public void setShowDividers(int showDividers) {
+    public void setShowDividers(@DividerMode int showDividers) {
         if (showDividers != mShowDividers) {
             requestLayout();
         }
@@ -230,6 +254,7 @@
      * @return A flag set indicating how dividers should be shown around items.
      * @see #setShowDividers(int)
      */
+    @DividerMode
     public int getShowDividers() {
         return mShowDividers;
     }
@@ -642,6 +667,7 @@
         final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
 
         boolean matchWidth = false;
+        boolean skippedMeasure = false;
 
         final int baselineChildIndex = mBaselineAlignedChildIndex;        
         final boolean useLargestChild = mUseLargestChild;
@@ -676,6 +702,7 @@
                 // there is any leftover space.
                 final int totalLength = mTotalLength;
                 mTotalLength = Math.max(totalLength, totalLength + lp.topMargin + lp.bottomMargin);
+                skippedMeasure = true;
             } else {
                 int oldHeight = Integer.MIN_VALUE;
 
@@ -802,9 +829,10 @@
         heightSize = heightSizeAndState & MEASURED_SIZE_MASK;
         
         // Either expand children with weight to take up available space or
-        // shrink them if they extend beyond our current bounds
+        // shrink them if they extend beyond our current bounds. If we skipped
+        // measurement on any children, we need to measure them now.
         int delta = heightSize - mTotalLength;
-        if (delta != 0 && totalWeight > 0.0f) {
+        if (skippedMeasure || delta != 0 && totalWeight > 0.0f) {
             float weightSum = mWeightSum > 0.0f ? mWeightSum : totalWeight;
 
             mTotalLength = 0;
@@ -970,6 +998,7 @@
         final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
 
         boolean matchHeight = false;
+        boolean skippedMeasure = false;
 
         if (mMaxAscent == null || mMaxDescent == null) {
             mMaxAscent = new int[VERTICAL_GRAVITY_COUNT];
@@ -1032,6 +1061,8 @@
                 if (baselineAligned) {
                     final int freeSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
                     child.measure(freeSpec, freeSpec);
+                } else {
+                    skippedMeasure = true;
                 }
             } else {
                 int oldWidth = Integer.MIN_VALUE;
@@ -1180,9 +1211,10 @@
         widthSize = widthSizeAndState & MEASURED_SIZE_MASK;
         
         // Either expand children with weight to take up available space or
-        // shrink them if they extend beyond our current bounds
+        // shrink them if they extend beyond our current bounds. If we skipped
+        // measurement on any children, we need to measure them now.
         int delta = widthSize - mTotalLength;
-        if (delta != 0 && totalWeight > 0.0f) {
+        if (skippedMeasure || delta != 0 && totalWeight > 0.0f) {
             float weightSum = mWeightSum > 0.0f ? mWeightSum : totalWeight;
 
             maxAscent[0] = maxAscent[1] = maxAscent[2] = maxAscent[3] = -1;
@@ -1673,12 +1705,12 @@
     
     /**
      * Should the layout be a column or a row.
-     * @param orientation Pass HORIZONTAL or VERTICAL. Default
-     * value is HORIZONTAL.
+     * @param orientation Pass {@link #HORIZONTAL} or {@link #VERTICAL}. Default
+     * value is {@link #HORIZONTAL}.
      * 
      * @attr ref android.R.styleable#LinearLayout_orientation
      */
-    public void setOrientation(int orientation) {
+    public void setOrientation(@OrientationMode int orientation) {
         if (mOrientation != orientation) {
             mOrientation = orientation;
             requestLayout();
@@ -1690,6 +1722,7 @@
      * 
      * @return either {@link #HORIZONTAL} or {@link #VERTICAL}
      */
+    @OrientationMode
     public int getOrientation() {
         return mOrientation;
     }
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java
index 13f3eb6..10ec105 100644
--- a/core/java/android/widget/ListPopupWindow.java
+++ b/core/java/android/widget/ListPopupWindow.java
@@ -24,6 +24,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
+import android.os.SystemClock;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.IntProperty;
@@ -33,7 +34,6 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.MeasureSpec;
-import android.view.View.OnAttachStateChangeListener;
 import android.view.View.OnTouchListener;
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
@@ -843,7 +843,7 @@
             // to select one of its items
             if (keyCode != KeyEvent.KEYCODE_SPACE
                     && (mDropDownList.getSelectedItemPosition() >= 0
-                            || !event.isConfirmKey())) {
+                            || !KeyEvent.isConfirmKey(keyCode))) {
                 int curIndex = mDropDownList.getSelectedItemPosition();
                 boolean consumed;
 
@@ -931,7 +931,7 @@
     public boolean onKeyUp(int keyCode, KeyEvent event) {
         if (isShowing() && mDropDownList.getSelectedItemPosition() >= 0) {
             boolean consumed = mDropDownList.onKeyUp(keyCode, event);
-            if (consumed && event.isConfirmKey()) {
+            if (consumed && KeyEvent.isConfirmKey(keyCode)) {
                 // if the list accepts the key events and the key event was a click, the text view
                 // gets the selected item from the drop down as its content
                 dismiss();
@@ -1226,6 +1226,15 @@
                 forwarding = onTouchForwarded(event) || !onForwardingStopped();
             } else {
                 forwarding = onTouchObserved(event) && onForwardingStarted();
+
+                if (forwarding) {
+                    // Make sure we cancel any ongoing source event stream.
+                    final long now = SystemClock.uptimeMillis();
+                    final MotionEvent e = MotionEvent.obtain(now, now, MotionEvent.ACTION_CANCEL,
+                            0.0f, 0.0f, 0);
+                    mSrc.onTouchEvent(e);
+                    e.recycle();
+                }
             }
 
             mForwarding = forwarding;
@@ -1556,7 +1565,7 @@
 
             // Ensure that keyboard focus starts from the last touched position.
             setSelectedPositionInt(position);
-            positionSelector(position, child);
+            positionSelectorLikeFocus(position, child);
 
             // Refresh the drawable state to reflect the new pressed state,
             // which will also update the selector state.
diff --git a/core/java/android/widget/ListView.java b/core/java/android/widget/ListView.java
index 78237c3..eeb8015 100644
--- a/core/java/android/widget/ListView.java
+++ b/core/java/android/widget/ListView.java
@@ -44,6 +44,7 @@
 import android.view.accessibility.AccessibilityNodeInfo;
 import android.view.accessibility.AccessibilityNodeInfo.CollectionInfo;
 import android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo;
+import android.view.accessibility.AccessibilityNodeProvider;
 import android.widget.RemoteViews.RemoteView;
 
 import java.util.ArrayList;
@@ -142,11 +143,15 @@
         this(context, attrs, com.android.internal.R.attr.listViewStyle);
     }
 
-    public ListView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ListView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.ListView, defStyle, 0);
+    public ListView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ListView, defStyleAttr, defStyleRes);
 
         CharSequence[] entries = a.getTextArray(
                 com.android.internal.R.styleable.ListView_entries);
@@ -263,6 +268,7 @@
         info.data = data;
         info.isSelectable = isSelectable;
         mHeaderViewInfos.add(info);
+        mAreAllItemsSelectable &= isSelectable;
 
         // Wrap the adapter if it wasn't already wrapped.
         if (mAdapter != null) {
@@ -356,6 +362,7 @@
         info.data = data;
         info.isSelectable = isSelectable;
         mFooterViewInfos.add(info);
+        mAreAllItemsSelectable &= isSelectable;
 
         // Wrap the adapter if it wasn't already wrapped.
         if (mAdapter != null) {
@@ -1562,22 +1569,58 @@
 
             setSelectedPositionInt(mNextSelectedPosition);
 
-            // Remember which child, if any, had accessibility focus.
-            final int accessibilityFocusPosition;
-            final View accessFocusedChild = getAccessibilityFocusedChild();
-            if (accessFocusedChild != null) {
-                accessibilityFocusPosition = getPositionForView(accessFocusedChild);
-                accessFocusedChild.setHasTransientState(true);
-            } else {
-                accessibilityFocusPosition = INVALID_POSITION;
+            AccessibilityNodeInfo accessibilityFocusLayoutRestoreNode = null;
+            View accessibilityFocusLayoutRestoreView = null;
+            int accessibilityFocusPosition = INVALID_POSITION;
+
+            // Remember which child, if any, had accessibility focus. This must
+            // occur before recycling any views, since that will clear
+            // accessibility focus.
+            final ViewRootImpl viewRootImpl = getViewRootImpl();
+            if (viewRootImpl != null) {
+                final View focusHost = viewRootImpl.getAccessibilityFocusedHost();
+                if (focusHost != null) {
+                    final View focusChild = getAccessibilityFocusedChild(focusHost);
+                    if (focusChild != null) {
+                        if (!dataChanged || isDirectChildHeaderOrFooter(focusChild)
+                                || focusChild.hasTransientState() || mAdapterHasStableIds) {
+                            // The views won't be changing, so try to maintain
+                            // focus on the current host and virtual view.
+                            accessibilityFocusLayoutRestoreView = focusHost;
+                            accessibilityFocusLayoutRestoreNode = viewRootImpl
+                                    .getAccessibilityFocusedVirtualView();
+                        }
+
+                        // If all else fails, maintain focus at the same
+                        // position.
+                        accessibilityFocusPosition = getPositionForView(focusChild);
+                    }
+                }
             }
 
-            // Ensure the child containing focus, if any, has transient state.
-            // If the list data hasn't changed, or if the adapter has stable
-            // IDs, this will maintain focus.
+            View focusLayoutRestoreDirectChild = null;
+            View focusLayoutRestoreView = null;
+
+            // Take focus back to us temporarily to avoid the eventual call to
+            // clear focus when removing the focused child below from messing
+            // things up when ViewAncestor assigns focus back to someone else.
             final View focusedChild = getFocusedChild();
             if (focusedChild != null) {
-                focusedChild.setHasTransientState(true);
+                // TODO: in some cases focusedChild.getParent() == null
+
+                // We can remember the focused view to restore after re-layout
+                // if the data hasn't changed, or if the focused position is a
+                // header or footer.
+                if (!dataChanged || isDirectChildHeaderOrFooter(focusedChild)) {
+                    focusLayoutRestoreDirectChild = focusedChild;
+                    // Remember the specific view that had focus.
+                    focusLayoutRestoreView = findFocus();
+                    if (focusLayoutRestoreView != null) {
+                        // Tell it we are going to mess with it.
+                        focusLayoutRestoreView.onStartTemporaryDetach();
+                    }
+                }
+                requestFocus();
             }
 
             // Pull all children into the RecycleBin.
@@ -1651,20 +1694,24 @@
             recycleBin.scrapActiveViews();
 
             if (sel != null) {
-                final boolean shouldPlaceFocus = mItemsCanFocus && hasFocus();
-                final boolean maintainedFocus = focusedChild != null && focusedChild.hasFocus();
-                if (shouldPlaceFocus && !maintainedFocus && !sel.hasFocus()) {
-                    if (sel.requestFocus()) {
-                        // Successfully placed focus, clear selection.
-                        sel.setSelected(false);
-                        mSelectorRect.setEmpty();
-                    } else {
-                        // Failed to place focus, clear current (invalid) focus.
+                // The current selected item should get focus if items are
+                // focusable.
+                if (mItemsCanFocus && hasFocus() && !sel.hasFocus()) {
+                    final boolean focusWasTaken = (sel == focusLayoutRestoreDirectChild &&
+                            focusLayoutRestoreView != null &&
+                            focusLayoutRestoreView.requestFocus()) || sel.requestFocus();
+                    if (!focusWasTaken) {
+                        // Selected item didn't take focus, but we still want to
+                        // make sure something else outside of the selected view
+                        // has focus.
                         final View focused = getFocusedChild();
                         if (focused != null) {
                             focused.clearFocus();
                         }
                         positionSelector(INVALID_POSITION, sel);
+                    } else {
+                        sel.setSelected(false);
+                        mSelectorRect.setEmpty();
                     }
                 } else {
                     positionSelector(INVALID_POSITION, sel);
@@ -1682,27 +1729,48 @@
                     mSelectedTop = 0;
                     mSelectorRect.setEmpty();
                 }
+
+                // Even if there is not selected position, we may need to
+                // restore focus (i.e. something focusable in touch mode).
+                if (hasFocus() && focusLayoutRestoreView != null) {
+                    focusLayoutRestoreView.requestFocus();
+                }
             }
 
-            if (accessFocusedChild != null) {
-                accessFocusedChild.setHasTransientState(false);
-
-                // If we failed to maintain accessibility focus on the previous
-                // view, attempt to restore it to the previous position.
-                if (!accessFocusedChild.isAccessibilityFocused()
-                    && accessibilityFocusPosition != INVALID_POSITION) {
-                    // Bound the position within the visible children.
-                    final int position = MathUtils.constrain(
-                            accessibilityFocusPosition - mFirstPosition, 0, getChildCount() - 1);
-                    final View restoreView = getChildAt(position);
-                    if (restoreView != null) {
-                        restoreView.requestAccessibilityFocus();
+            // Attempt to restore accessibility focus, if necessary.
+            if (viewRootImpl != null) {
+                final View newAccessibilityFocusedView = viewRootImpl.getAccessibilityFocusedHost();
+                if (newAccessibilityFocusedView == null) {
+                    if (accessibilityFocusLayoutRestoreView != null
+                            && accessibilityFocusLayoutRestoreView.isAttachedToWindow()) {
+                        final AccessibilityNodeProvider provider =
+                                accessibilityFocusLayoutRestoreView.getAccessibilityNodeProvider();
+                        if (accessibilityFocusLayoutRestoreNode != null && provider != null) {
+                            final int virtualViewId = AccessibilityNodeInfo.getVirtualDescendantId(
+                                    accessibilityFocusLayoutRestoreNode.getSourceNodeId());
+                            provider.performAction(virtualViewId,
+                                    AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
+                        } else {
+                            accessibilityFocusLayoutRestoreView.requestAccessibilityFocus();
+                        }
+                    } else if (accessibilityFocusPosition != INVALID_POSITION) {
+                        // Bound the position within the visible children.
+                        final int position = MathUtils.constrain(
+                                accessibilityFocusPosition - mFirstPosition, 0,
+                                getChildCount() - 1);
+                        final View restoreView = getChildAt(position);
+                        if (restoreView != null) {
+                            restoreView.requestAccessibilityFocus();
+                        }
                     }
                 }
             }
 
-            if (focusedChild != null) {
-                focusedChild.setHasTransientState(false);
+            // Tell focus view we are done mucking with it, if it is still in
+            // our view hierarchy.
+            if (focusLayoutRestoreView != null
+                    && focusLayoutRestoreView.getWindowToken() != null) {
+                focusLayoutRestoreView.onFinishTemporaryDetach();
             }
             
             mLayoutMode = LAYOUT_NORMAL;
@@ -1729,31 +1797,27 @@
     }
 
     /**
-     * @return the direct child that contains accessibility focus, or null if no
-     *         child contains accessibility focus
+     * @param child a direct child of this list.
+     * @return Whether child is a header or footer view.
      */
-    private View getAccessibilityFocusedChild() {
-        final ViewRootImpl viewRootImpl = getViewRootImpl();
-        if (viewRootImpl == null) {
-            return null;
+    private boolean isDirectChildHeaderOrFooter(View child) {
+        final ArrayList<FixedViewInfo> headers = mHeaderViewInfos;
+        final int numHeaders = headers.size();
+        for (int i = 0; i < numHeaders; i++) {
+            if (child == headers.get(i).view) {
+                return true;
+            }
         }
 
-        View focusedView = viewRootImpl.getAccessibilityFocusedHost();
-        if (focusedView == null) {
-            return null;
+        final ArrayList<FixedViewInfo> footers = mFooterViewInfos;
+        final int numFooters = footers.size();
+        for (int i = 0; i < numFooters; i++) {
+            if (child == footers.get(i).view) {
+                return true;
+            }
         }
 
-        ViewParent viewParent = focusedView.getParent();
-        while ((viewParent instanceof View) && (viewParent != this)) {
-            focusedView = (View) viewParent;
-            viewParent = viewParent.getParent();
-        }
-
-        if (!(viewParent instanceof View)) {
-            return null;
-        }
-
-        return focusedView;
+        return false;
     }
 
     /**
@@ -1915,45 +1979,6 @@
     }
 
     /**
-     * Sets the selected item and positions the selection y pixels from the top edge
-     * of the ListView. (If in touch mode, the item will not be selected but it will
-     * still be positioned appropriately.)
-     *
-     * @param position Index (starting at 0) of the data item to be selected.
-     * @param y The distance from the top edge of the ListView (plus padding) that the
-     *        item will be positioned.
-     */
-    public void setSelectionFromTop(int position, int y) {
-        if (mAdapter == null) {
-            return;
-        }
-
-        if (!isInTouchMode()) {
-            position = lookForSelectablePosition(position, true);
-            if (position >= 0) {
-                setNextSelectedPositionInt(position);
-            }
-        } else {
-            mResurrectToPosition = position;
-        }
-
-        if (position >= 0) {
-            mLayoutMode = LAYOUT_SPECIFIC;
-            mSpecificTop = mListPadding.top + y;
-
-            if (mNeedSync) {
-                mSyncPosition = position;
-                mSyncRowId = mAdapter.getItemId(position);
-            }
-
-            if (mPositionScroller != null) {
-                mPositionScroller.stop();
-            }
-            requestLayout();
-        }
-    }
-
-    /**
      * Makes the item at the supplied position selected.
      * 
      * @param position the position of the item to select
@@ -2539,7 +2564,7 @@
 
         if (needToRedraw) {
             if (selectedView != null) {
-                positionSelector(selectedPos, selectedView);
+                positionSelectorLikeFocus(selectedPos, selectedView);
                 mSelectedTop = selectedView.getTop();
             }
             if (!awakenScrollBars()) {
@@ -3266,14 +3291,13 @@
                         if (drawDividers && (bottom < listBottom)
                                 && !(drawOverscrollFooter && isLastItem)) {
                             final int nextIndex = (itemIndex + 1);
-                            // Draw dividers between enabled items, headers and/or
-                            // footers when enabled, and the end of the list.
-                            if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex)
-                                    || (headerDividers && isHeader)
-                                    || (footerDividers && isFooter)) && (isLastItem
-                                    || adapter.isEnabled(nextIndex)
-                                    || (headerDividers && (nextIndex < headerCount))
-                                    || (footerDividers && (nextIndex >= footerLimit))))) {
+                            // Draw dividers between enabled items, headers
+                            // and/or footers when enabled and requested, and
+                            // after the last enabled item.
+                            if (adapter.isEnabled(itemIndex) && (headerDividers || !isHeader
+                                    && (nextIndex >= headerCount)) && (isLastItem
+                                    || adapter.isEnabled(nextIndex) && (footerDividers || !isFooter
+                                            && (nextIndex < footerLimit)))) {
                                 bounds.top = bottom;
                                 bounds.bottom = bottom + dividerHeight;
                                 drawDivider(canvas, bounds, i);
@@ -3315,14 +3339,13 @@
                         if (drawDividers && (top > effectivePaddingTop)) {
                             final boolean isFirstItem = (i == start);
                             final int previousIndex = (itemIndex - 1);
-                            // Draw dividers between enabled items, headers and/or
-                            // footers when enabled, and the end of the list.
-                            if (areAllItemsSelectable || ((adapter.isEnabled(itemIndex)
-                                    || (headerDividers && isHeader)
-                                    || (footerDividers && isFooter)) && (isFirstItem
-                                    || adapter.isEnabled(previousIndex)
-                                    || (headerDividers && (previousIndex < headerCount))
-                                    || (footerDividers && (previousIndex >= footerLimit))))) {
+                            // Draw dividers between enabled items, headers
+                            // and/or footers when enabled and requested, and
+                            // before the first enabled item.
+                            if (adapter.isEnabled(itemIndex) && (headerDividers || !isHeader
+                                    && (previousIndex >= headerCount)) && (isFirstItem ||
+                                    adapter.isEnabled(previousIndex) && (footerDividers || !isFooter
+                                            && (previousIndex < footerLimit)))) {
                                 bounds.top = top - dividerHeight;
                                 bounds.bottom = top;
                                 // Give the method the child ABOVE the divider,
@@ -3771,6 +3794,79 @@
     }
 
     @Override
+    int getHeightForPosition(int position) {
+        final int height = super.getHeightForPosition(position);
+        if (shouldAdjustHeightForDivider(position)) {
+            return height + mDividerHeight;
+        }
+        return height;
+    }
+
+    private boolean shouldAdjustHeightForDivider(int itemIndex) {
+        final int dividerHeight = mDividerHeight;
+        final Drawable overscrollHeader = mOverScrollHeader;
+        final Drawable overscrollFooter = mOverScrollFooter;
+        final boolean drawOverscrollHeader = overscrollHeader != null;
+        final boolean drawOverscrollFooter = overscrollFooter != null;
+        final boolean drawDividers = dividerHeight > 0 && mDivider != null;
+
+        if (drawDividers) {
+            final boolean fillForMissingDividers = isOpaque() && !super.isOpaque();
+            final int itemCount = mItemCount;
+            final int headerCount = mHeaderViewInfos.size();
+            final int footerLimit = (itemCount - mFooterViewInfos.size());
+            final boolean isHeader = (itemIndex < headerCount);
+            final boolean isFooter = (itemIndex >= footerLimit);
+            final boolean headerDividers = mHeaderDividersEnabled;
+            final boolean footerDividers = mFooterDividersEnabled;
+            if ((headerDividers || !isHeader) && (footerDividers || !isFooter)) {
+                final ListAdapter adapter = mAdapter;
+                if (!mStackFromBottom) {
+                    final boolean isLastItem = (itemIndex == (itemCount - 1));
+                    if (!drawOverscrollFooter || !isLastItem) {
+                        final int nextIndex = itemIndex + 1;
+                        // Draw dividers between enabled items, headers
+                        // and/or footers when enabled and requested, and
+                        // after the last enabled item.
+                        if (adapter.isEnabled(itemIndex) && (headerDividers || !isHeader
+                                && (nextIndex >= headerCount)) && (isLastItem
+                                || adapter.isEnabled(nextIndex) && (footerDividers || !isFooter
+                                                && (nextIndex < footerLimit)))) {
+                            return true;
+                        } else if (fillForMissingDividers) {
+                            return true;
+                        }
+                    }
+                } else {
+                    final int start = drawOverscrollHeader ? 1 : 0;
+                    final boolean isFirstItem = (itemIndex == start);
+                    if (!isFirstItem) {
+                        final int previousIndex = (itemIndex - 1);
+                        // Draw dividers between enabled items, headers
+                        // and/or footers when enabled and requested, and
+                        // before the first enabled item.
+                        if (adapter.isEnabled(itemIndex) && (headerDividers || !isHeader
+                                && (previousIndex >= headerCount)) && (isFirstItem ||
+                                adapter.isEnabled(previousIndex) && (footerDividers || !isFooter
+                                        && (previousIndex < footerLimit)))) {
+                            return true;
+                        } else if (fillForMissingDividers) {
+                            return true;
+                        }
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    AbsPositionScroller createPositionScroller() {
+        return new ListViewPositionScroller();
+    }
+
+    @Override
     public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
         super.onInitializeAccessibilityEvent(event);
         event.setClassName(ListView.class.getName());
@@ -3782,7 +3878,8 @@
         info.setClassName(ListView.class.getName());
 
         final int count = getCount();
-        final CollectionInfo collectionInfo = CollectionInfo.obtain(1, count, false);
+        final int selectionMode = getSelectionModeForAccessibility();
+        final CollectionInfo collectionInfo = CollectionInfo.obtain(1, count, false, selectionMode);
         info.setCollectionInfo(collectionInfo);
     }
 
@@ -3793,7 +3890,29 @@
 
         final LayoutParams lp = (LayoutParams) view.getLayoutParams();
         final boolean isHeading = lp != null && lp.viewType != ITEM_VIEW_TYPE_HEADER_OR_FOOTER;
-        final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(0, 1, position, 1, isHeading);
+        final boolean isSelected = isItemChecked(position);
+        final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(
+                0, 1, position, 1, isHeading, isSelected);
         info.setCollectionItemInfo(itemInfo);
     }
+
+    /**
+     * Sub-position scroller that understands the layout of a ListView.
+     */
+    class ListViewPositionScroller extends AbsSubPositionScroller {
+        @Override
+        public int getRowForPosition(int position) {
+            return position;
+        }
+
+        @Override
+        public int getFirstPositionForRow(int row) {
+            return row;
+        }
+
+        @Override
+        public int getHeightForRow(int row) {
+            return getHeightForPosition(row);
+        }
+    }
 }
diff --git a/core/java/android/widget/MediaController.java b/core/java/android/widget/MediaController.java
index 9c61fd6..546cc5f 100644
--- a/core/java/android/widget/MediaController.java
+++ b/core/java/android/widget/MediaController.java
@@ -442,7 +442,19 @@
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
-        show(sDefaultTimeout);
+        switch (event.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+                show(0); // show until hide is called
+                break;
+            case MotionEvent.ACTION_UP:
+                show(sDefaultTimeout); // start timeout
+                break;
+            case MotionEvent.ACTION_CANCEL:
+                hide();
+                break;
+            default:
+                break;
+        }
         return true;
     }
 
diff --git a/core/java/android/widget/MultiAutoCompleteTextView.java b/core/java/android/widget/MultiAutoCompleteTextView.java
index 0b30c84..cbd01b0 100644
--- a/core/java/android/widget/MultiAutoCompleteTextView.java
+++ b/core/java/android/widget/MultiAutoCompleteTextView.java
@@ -67,8 +67,13 @@
         this(context, attrs, com.android.internal.R.attr.autoCompleteTextViewStyle);
     }
 
-    public MultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public MultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public MultiAutoCompleteTextView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     /* package */ void finishInit() { }
diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java
index 2c44703..d6fa05a 100644
--- a/core/java/android/widget/NumberPicker.java
+++ b/core/java/android/widget/NumberPicker.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.IntDef;
 import android.annotation.Widget;
 import android.content.Context;
 import android.content.res.ColorStateList;
@@ -53,6 +54,8 @@
 import com.android.internal.R;
 import libcore.icu.LocaleData;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
@@ -493,6 +496,10 @@
      * Interface to listen for the picker scroll state.
      */
     public interface OnScrollListener {
+        /** @hide */
+        @IntDef({SCROLL_STATE_IDLE, SCROLL_STATE_TOUCH_SCROLL, SCROLL_STATE_FLING})
+        @Retention(RetentionPolicy.SOURCE)
+        public @interface ScrollState {}
 
         /**
          * The view is not scrolling.
@@ -518,7 +525,7 @@
          *            {@link #SCROLL_STATE_TOUCH_SCROLL} or
          *            {@link #SCROLL_STATE_IDLE}.
          */
-        public void onScrollStateChange(NumberPicker view, int scrollState);
+        public void onScrollStateChange(NumberPicker view, @ScrollState int scrollState);
     }
 
     /**
@@ -559,14 +566,33 @@
      *
      * @param context the application environment.
      * @param attrs a collection of attributes.
-     * @param defStyle The default style to apply to this view.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
-    public NumberPicker(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public NumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    /**
+     * Create a new number picker
+     *
+     * @param context the application environment.
+     * @param attrs a collection of attributes.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     */
+    public NumberPicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         // process style attributes
-        TypedArray attributesArray = context.obtainStyledAttributes(
-                attrs, R.styleable.NumberPicker, defStyle, 0);
+        final TypedArray attributesArray = context.obtainStyledAttributes(
+                attrs, R.styleable.NumberPicker, defStyleAttr, defStyleRes);
         final int layoutResId = attributesArray.getResourceId(
                 R.styleable.NumberPicker_internalLayout, DEFAULT_LAYOUT_RESOURCE_ID);
 
diff --git a/core/java/android/widget/OverScroller.java b/core/java/android/widget/OverScroller.java
index f218199..7b3dd31 100644
--- a/core/java/android/widget/OverScroller.java
+++ b/core/java/android/widget/OverScroller.java
@@ -70,7 +70,11 @@
      * @hide
      */
     public OverScroller(Context context, Interpolator interpolator, boolean flywheel) {
-        mInterpolator = interpolator;
+        if (interpolator == null) {
+            mInterpolator = new Scroller.ViscousFluidInterpolator();
+        } else {
+            mInterpolator = interpolator;
+        }
         mFlywheel = flywheel;
         mScrollerX = new SplineOverScroller(context);
         mScrollerY = new SplineOverScroller(context);
@@ -112,7 +116,11 @@
     }
 
     void setInterpolator(Interpolator interpolator) {
-        mInterpolator = interpolator;
+        if (interpolator == null) {
+            mInterpolator = new Scroller.ViscousFluidInterpolator();
+        } else {
+            mInterpolator = interpolator;
+        }
     }
 
     /**
@@ -302,14 +310,7 @@
 
                 final int duration = mScrollerX.mDuration;
                 if (elapsedTime < duration) {
-                    float q = (float) (elapsedTime) / duration;
-
-                    if (mInterpolator == null) {
-                        q = Scroller.viscousFluid(q);
-                    } else {
-                        q = mInterpolator.getInterpolation(q);
-                    }
-
+                    final float q = mInterpolator.getInterpolation(elapsedTime / (float) duration);
                     mScrollerX.updateScroll(q);
                     mScrollerY.updateScroll(q);
                 } else {
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index be20d2d..6e71a5c 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -170,8 +170,8 @@
      *
      * <p>The popup does provide a background.</p>
      */
-    public PopupWindow(Context context, AttributeSet attrs, int defStyle) {
-        this(context, attrs, defStyle, 0);
+    public PopupWindow(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
     
     /**
@@ -183,8 +183,7 @@
         mContext = context;
         mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
 
-        TypedArray a =
-            context.obtainStyledAttributes(
+        final TypedArray a = context.obtainStyledAttributes(
                 attrs, com.android.internal.R.styleable.PopupWindow, defStyleAttr, defStyleRes);
 
         mBackground = a.getDrawable(R.styleable.PopupWindow_popupBackground);
diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java
index 6a369a6..f7e81b8 100644
--- a/core/java/android/widget/ProgressBar.java
+++ b/core/java/android/widget/ProgressBar.java
@@ -242,29 +242,26 @@
         this(context, attrs, com.android.internal.R.attr.progressBarStyle);
     }
 
-    public ProgressBar(Context context, AttributeSet attrs, int defStyle) {
-        this(context, attrs, defStyle, 0);
+    public ProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
-    /**
-     * @hide
-     */
-    public ProgressBar(Context context, AttributeSet attrs, int defStyle, int styleRes) {
-        super(context, attrs, defStyle);
+    public ProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
         mUiThreadId = Thread.currentThread().getId();
         initProgressBar();
 
-        TypedArray a =
-            context.obtainStyledAttributes(attrs, R.styleable.ProgressBar, defStyle, styleRes);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.ProgressBar, defStyleAttr, defStyleRes);
         
         mNoInvalidate = true;
         
         Drawable drawable = a.getDrawable(R.styleable.ProgressBar_progressDrawable);
         if (drawable != null) {
-            drawable = tileify(drawable, false);
             // Calling this method can set mMaxHeight, make sure the corresponding
             // XML attribute for mMaxHeight is read after calling this method
-            setProgressDrawable(drawable);
+            setProgressDrawableTiled(drawable);
         }
 
 
@@ -293,8 +290,7 @@
 
         drawable = a.getDrawable(R.styleable.ProgressBar_indeterminateDrawable);
         if (drawable != null) {
-            drawable = tileifyIndeterminate(drawable);
-            setIndeterminateDrawable(drawable);
+            setIndeterminateDrawableTiled(drawable);
         }
 
         mOnlyIndeterminate = a.getBoolean(
@@ -350,19 +346,24 @@
             return out;
             
         } else if (drawable instanceof BitmapDrawable) {
-            final Bitmap tileBitmap = ((BitmapDrawable) drawable).getBitmap();
+            final BitmapDrawable bitmap = (BitmapDrawable) drawable;
+            final Bitmap tileBitmap = bitmap.getBitmap();
             if (mSampleTile == null) {
                 mSampleTile = tileBitmap;
             }
-            
-            final ShapeDrawable shapeDrawable = new ShapeDrawable(getDrawableShape());
 
+            final ShapeDrawable shapeDrawable = new ShapeDrawable(getDrawableShape());
             final BitmapShader bitmapShader = new BitmapShader(tileBitmap,
                     Shader.TileMode.REPEAT, Shader.TileMode.CLAMP);
             shapeDrawable.getPaint().setShader(bitmapShader);
 
-            return (clip) ? new ClipDrawable(shapeDrawable, Gravity.LEFT,
-                    ClipDrawable.HORIZONTAL) : shapeDrawable;
+            // Ensure the color filter and tint are propagated.
+            shapeDrawable.setTint(bitmap.getTint());
+            shapeDrawable.setTintMode(bitmap.getTintMode());
+            shapeDrawable.setColorFilter(bitmap.getColorFilter());
+
+            return clip ? new ClipDrawable(
+                    shapeDrawable, Gravity.LEFT, ClipDrawable.HORIZONTAL) : shapeDrawable;
         }
         
         return drawable;
@@ -472,11 +473,9 @@
     }
 
     /**
-     * <p>Define the drawable used to draw the progress bar in
-     * indeterminate mode.</p>
+     * Define the drawable used to draw the progress bar in indeterminate mode.
      *
      * @param d the new drawable
-     *
      * @see #getIndeterminateDrawable()
      * @see #setIndeterminate(boolean)
      */
@@ -493,6 +492,25 @@
             postInvalidate();
         }
     }
+
+    /**
+     * Define the tileable drawable used to draw the progress bar in
+     * indeterminate mode.
+     * <p>
+     * If the drawable is a BitmapDrawable or contains BitmapDrawables, a
+     * tiled copy will be generated for display as a progress bar.
+     *
+     * @param d the new drawable
+     * @see #getIndeterminateDrawable()
+     * @see #setIndeterminate(boolean)
+     */
+    public void setIndeterminateDrawableTiled(Drawable d) {
+        if (d != null) {
+            d = tileifyIndeterminate(d);
+        }
+
+        setIndeterminateDrawable(d);
+    }
     
     /**
      * <p>Get the drawable used to draw the progress bar in
@@ -508,11 +526,9 @@
     }
 
     /**
-     * <p>Define the drawable used to draw the progress bar in
-     * progress mode.</p>
+     * Define the drawable used to draw the progress bar in progress mode.
      *
      * @param d the new drawable
-     *
      * @see #getProgressDrawable()
      * @see #setIndeterminate(boolean)
      */
@@ -551,6 +567,25 @@
             doRefreshProgress(R.id.secondaryProgress, mSecondaryProgress, false, false);
         }
     }
+
+    /**
+     * Define the tileable drawable used to draw the progress bar in
+     * progress mode.
+     * <p>
+     * If the drawable is a BitmapDrawable or contains BitmapDrawables, a
+     * tiled copy will be generated for display as a progress bar.
+     *
+     * @param d the new drawable
+     * @see #getProgressDrawable()
+     * @see #setIndeterminate(boolean)
+     */
+    public void setProgressDrawableTiled(Drawable d) {
+        if (d != null) {
+            d = tileify(d, false);
+        }
+
+        setProgressDrawable(d);
+    }
     
     /**
      * @return The drawable currently used to draw the progress bar
diff --git a/core/java/android/widget/QuickContactBadge.java b/core/java/android/widget/QuickContactBadge.java
index fd2f754..0c31496 100644
--- a/core/java/android/widget/QuickContactBadge.java
+++ b/core/java/android/widget/QuickContactBadge.java
@@ -84,8 +84,13 @@
         this(context, attrs, 0);
     }
 
-    public QuickContactBadge(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public QuickContactBadge(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public QuickContactBadge(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         TypedArray styledAttributes = mContext.obtainStyledAttributes(R.styleable.Theme);
         mOverlay = styledAttributes.getDrawable(
@@ -150,7 +155,7 @@
      */
     public void setImageToDefault() {
         if (mDefaultAvatar == null) {
-            mDefaultAvatar = getResources().getDrawable(R.drawable.ic_contact_picture);
+            mDefaultAvatar = mContext.getDrawable(R.drawable.ic_contact_picture);
         }
         setImageDrawable(mDefaultAvatar);
     }
@@ -251,6 +256,16 @@
         }
     }
 
+    /**
+     * Assigns the drawable that is to be drawn on top of the assigned contact photo.
+     *
+     * @param overlay Drawable to be drawn over the assigned contact photo. Must have a non-zero
+     *         instrinsic width and height.
+     */
+    public void setOverlay(Drawable overlay) {
+        mOverlay = overlay;
+    }
+
     private void onContactUriChanged() {
         setEnabled(isAssigned());
     }
diff --git a/core/java/android/widget/RadialTimePickerView.java b/core/java/android/widget/RadialTimePickerView.java
new file mode 100644
index 0000000..1c9ab61
--- /dev/null
+++ b/core/java/android/widget/RadialTimePickerView.java
@@ -0,0 +1,1396 @@
+/*
+ * Copyright (C) 2013 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 android.widget;
+
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+import android.animation.Keyframe;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.animation.ValueAnimator;
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Typeface;
+import android.graphics.RectF;
+import android.os.Bundle;
+import android.text.format.DateUtils;
+import android.text.format.Time;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.HapticFeedbackConstants;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+import com.android.internal.R;
+
+import java.text.DateFormatSymbols;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Locale;
+
+/**
+ * View to show a clock circle picker (with one or two picking circles)
+ *
+ * @hide
+ */
+public class RadialTimePickerView extends View implements View.OnTouchListener {
+    private static final String TAG = "ClockView";
+
+    private static final boolean DEBUG = false;
+
+    private static final int DEBUG_COLOR = 0x20FF0000;
+    private static final int DEBUG_TEXT_COLOR = 0x60FF0000;
+    private static final int DEBUG_STROKE_WIDTH = 2;
+
+    private static final int HOURS = 0;
+    private static final int MINUTES = 1;
+    private static final int HOURS_INNER = 2;
+    private static final int AMPM = 3;
+
+    private static final int SELECTOR_CIRCLE = 0;
+    private static final int SELECTOR_DOT = 1;
+    private static final int SELECTOR_LINE = 2;
+
+    private static final int AM = 0;
+    private static final int PM = 1;
+
+    // Opaque alpha level
+    private static final int ALPHA_OPAQUE = 255;
+
+    // Transparent alpha level
+    private static final int ALPHA_TRANSPARENT = 0;
+
+    // Alpha level of color for selector.
+    private static final int ALPHA_SELECTOR = 51;
+
+    // Alpha level of color for selected circle.
+    private static final int ALPHA_AMPM_SELECTED = ALPHA_SELECTOR;
+
+    // Alpha level of color for pressed circle.
+    private static final int ALPHA_AMPM_PRESSED = 175;
+
+    private static final float COSINE_30_DEGREES = ((float) Math.sqrt(3)) * 0.5f;
+    private static final float SINE_30_DEGREES = 0.5f;
+
+    private static final int DEGREES_FOR_ONE_HOUR = 30;
+    private static final int DEGREES_FOR_ONE_MINUTE = 6;
+
+    private static final int[] HOURS_NUMBERS = {12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
+    private static final int[] HOURS_NUMBERS_24 = {0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
+    private static final int[] MINUTES_NUMBERS = {0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
+
+    private static final int CENTER_RADIUS = 2;
+
+    private static int[] sSnapPrefer30sMap = new int[361];
+
+    private final String[] mHours12Texts = new String[12];
+    private final String[] mOuterHours24Texts = new String[12];
+    private final String[] mInnerHours24Texts = new String[12];
+    private final String[] mMinutesTexts = new String[12];
+
+    private final String[] mAmPmText = new String[2];
+
+    private final Paint[] mPaint = new Paint[2];
+    private final Paint mPaintCenter = new Paint();
+    private final Paint[][] mPaintSelector = new Paint[2][3];
+    private final Paint mPaintAmPmText = new Paint();
+    private final Paint[] mPaintAmPmCircle = new Paint[2];
+
+    private final Paint mPaintBackground = new Paint();
+    private final Paint mPaintDisabled = new Paint();
+    private final Paint mPaintDebug = new Paint();
+
+    private Typeface mTypeface;
+
+    private boolean mIs24HourMode;
+    private boolean mShowHours;
+    private boolean mIsOnInnerCircle;
+
+    private int mXCenter;
+    private int mYCenter;
+
+    private float[] mCircleRadius = new float[3];
+
+    private int mMinHypotenuseForInnerNumber;
+    private int mMaxHypotenuseForOuterNumber;
+    private int mHalfwayHypotenusePoint;
+
+    private float[] mTextSize = new float[2];
+    private float mInnerTextSize;
+
+    private float[][] mTextGridHeights = new float[2][7];
+    private float[][] mTextGridWidths = new float[2][7];
+
+    private float[] mInnerTextGridHeights = new float[7];
+    private float[] mInnerTextGridWidths = new float[7];
+
+    private String[] mOuterTextHours;
+    private String[] mInnerTextHours;
+    private String[] mOuterTextMinutes;
+
+    private float[] mCircleRadiusMultiplier = new float[2];
+    private float[] mNumbersRadiusMultiplier = new float[3];
+
+    private float[] mTextSizeMultiplier = new float[3];
+
+    private float[] mAnimationRadiusMultiplier = new float[3];
+
+    private float mTransitionMidRadiusMultiplier;
+    private float mTransitionEndRadiusMultiplier;
+
+    private AnimatorSet mTransition;
+    private InvalidateUpdateListener mInvalidateUpdateListener = new InvalidateUpdateListener();
+
+    private int[] mLineLength = new int[3];
+    private int[] mSelectionRadius = new int[3];
+    private float mSelectionRadiusMultiplier;
+    private int[] mSelectionDegrees = new int[3];
+
+    private int mAmPmCircleRadius;
+    private float mAmPmYCenter;
+
+    private float mAmPmCircleRadiusMultiplier;
+    private int mAmPmTextColor;
+
+    private float mLeftIndicatorXCenter;
+    private float mRightIndicatorXCenter;
+
+    private int mAmPmUnselectedColor;
+    private int mAmPmSelectedColor;
+
+    private int mAmOrPm;
+    private int mAmOrPmPressed;
+
+    private RectF mRectF = new RectF();
+    private boolean mInputEnabled = true;
+    private OnValueSelectedListener mListener;
+
+    private final ArrayList<Animator> mHoursToMinutesAnims = new ArrayList<Animator>();
+    private final ArrayList<Animator> mMinuteToHoursAnims = new ArrayList<Animator>();
+
+    public interface OnValueSelectedListener {
+        void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance);
+    }
+
+    static {
+        // Prepare mapping to snap touchable degrees to selectable degrees.
+        preparePrefer30sMap();
+    }
+
+    /**
+     * Split up the 360 degrees of the circle among the 60 selectable values. Assigns a larger
+     * selectable area to each of the 12 visible values, such that the ratio of space apportioned
+     * to a visible value : space apportioned to a non-visible value will be 14 : 4.
+     * E.g. the output of 30 degrees should have a higher range of input associated with it than
+     * the output of 24 degrees, because 30 degrees corresponds to a visible number on the clock
+     * circle (5 on the minutes, 1 or 13 on the hours).
+     */
+    private static void preparePrefer30sMap() {
+        // We'll split up the visible output and the non-visible output such that each visible
+        // output will correspond to a range of 14 associated input degrees, and each non-visible
+        // output will correspond to a range of 4 associate input degrees, so visible numbers
+        // are more than 3 times easier to get than non-visible numbers:
+        // {354-359,0-7}:0, {8-11}:6, {12-15}:12, {16-19}:18, {20-23}:24, {24-37}:30, etc.
+        //
+        // If an output of 30 degrees should correspond to a range of 14 associated degrees, then
+        // we'll need any input between 24 - 37 to snap to 30. Working out from there, 20-23 should
+        // snap to 24, while 38-41 should snap to 36. This is somewhat counter-intuitive, that you
+        // can be touching 36 degrees but have the selection snapped to 30 degrees; however, this
+        // inconsistency isn't noticeable at such fine-grained degrees, and it affords us the
+        // ability to aggressively prefer the visible values by a factor of more than 3:1, which
+        // greatly contributes to the selectability of these values.
+
+        // The first output is 0, and each following output will increment by 6 {0, 6, 12, ...}.
+        int snappedOutputDegrees = 0;
+        // Count of how many inputs we've designated to the specified output.
+        int count = 1;
+        // How many input we expect for a specified output. This will be 14 for output divisible
+        // by 30, and 4 for the remaining output. We'll special case the outputs of 0 and 360, so
+        // the caller can decide which they need.
+        int expectedCount = 8;
+        // Iterate through the input.
+        for (int degrees = 0; degrees < 361; degrees++) {
+            // Save the input-output mapping.
+            sSnapPrefer30sMap[degrees] = snappedOutputDegrees;
+            // If this is the last input for the specified output, calculate the next output and
+            // the next expected count.
+            if (count == expectedCount) {
+                snappedOutputDegrees += 6;
+                if (snappedOutputDegrees == 360) {
+                    expectedCount = 7;
+                } else if (snappedOutputDegrees % 30 == 0) {
+                    expectedCount = 14;
+                } else {
+                    expectedCount = 4;
+                }
+                count = 1;
+            } else {
+                count++;
+            }
+        }
+    }
+
+    /**
+     * Returns mapping of any input degrees (0 to 360) to one of 60 selectable output degrees,
+     * where the degrees corresponding to visible numbers (i.e. those divisible by 30) will be
+     * weighted heavier than the degrees corresponding to non-visible numbers.
+     * See {@link #preparePrefer30sMap()} documentation for the rationale and generation of the
+     * mapping.
+     */
+    private static int snapPrefer30s(int degrees) {
+        if (sSnapPrefer30sMap == null) {
+            return -1;
+        }
+        return sSnapPrefer30sMap[degrees];
+    }
+
+    /**
+     * Returns mapping of any input degrees (0 to 360) to one of 12 visible output degrees (all
+     * multiples of 30), where the input will be "snapped" to the closest visible degrees.
+     * @param degrees The input degrees
+     * @param forceHigherOrLower The output may be forced to either the higher or lower step, or may
+     * be allowed to snap to whichever is closer. Use 1 to force strictly higher, -1 to force
+     * strictly lower, and 0 to snap to the closer one.
+     * @return output degrees, will be a multiple of 30
+     */
+    private static int snapOnly30s(int degrees, int forceHigherOrLower) {
+        final int stepSize = DEGREES_FOR_ONE_HOUR;
+        int floor = (degrees / stepSize) * stepSize;
+        final int ceiling = floor + stepSize;
+        if (forceHigherOrLower == 1) {
+            degrees = ceiling;
+        } else if (forceHigherOrLower == -1) {
+            if (degrees == floor) {
+                floor -= stepSize;
+            }
+            degrees = floor;
+        } else {
+            if ((degrees - floor) < (ceiling - degrees)) {
+                degrees = floor;
+            } else {
+                degrees = ceiling;
+            }
+        }
+        return degrees;
+    }
+
+    public RadialTimePickerView(Context context, AttributeSet attrs)  {
+        this(context, attrs, R.attr.timePickerStyle);
+    }
+
+    public RadialTimePickerView(Context context, AttributeSet attrs, int defStyle)  {
+        super(context, attrs);
+
+        // process style attributes
+        final TypedArray a = mContext.obtainStyledAttributes(attrs, R.styleable.TimePicker,
+                defStyle, 0);
+
+        final Resources res = getResources();
+
+        mAmPmUnselectedColor = a.getColor(R.styleable.TimePicker_amPmUnselectedBackgroundColor,
+                res.getColor(
+                        R.color.timepicker_default_ampm_unselected_background_color_holo_light));
+
+        mAmPmSelectedColor = a.getColor(R.styleable.TimePicker_amPmSelectedBackgroundColor,
+                res.getColor(R.color.timepicker_default_ampm_selected_background_color_holo_light));
+
+        mAmPmTextColor = a.getColor(R.styleable.TimePicker_amPmTextColor,
+                res.getColor(R.color.timepicker_default_text_color_holo_light));
+
+        final int numbersTextColor = a.getColor(R.styleable.TimePicker_numbersTextColor,
+                res.getColor(R.color.timepicker_default_text_color_holo_light));
+
+        mTypeface = Typeface.create("sans-serif", Typeface.NORMAL);
+
+        mPaint[HOURS] = new Paint();
+        mPaint[HOURS].setColor(numbersTextColor);
+        mPaint[HOURS].setAntiAlias(true);
+        mPaint[HOURS].setTextAlign(Paint.Align.CENTER);
+
+        mPaint[MINUTES] = new Paint();
+        mPaint[MINUTES].setColor(numbersTextColor);
+        mPaint[MINUTES].setAntiAlias(true);
+        mPaint[MINUTES].setTextAlign(Paint.Align.CENTER);
+
+        mPaintCenter.setColor(numbersTextColor);
+        mPaintCenter.setAntiAlias(true);
+        mPaintCenter.setTextAlign(Paint.Align.CENTER);
+
+        mPaintSelector[HOURS][SELECTOR_CIRCLE] = new Paint();
+        mPaintSelector[HOURS][SELECTOR_CIRCLE].setColor(
+                a.getColor(R.styleable.TimePicker_numbersSelectorColor, R.color.holo_blue_light));
+        mPaintSelector[HOURS][SELECTOR_CIRCLE].setAntiAlias(true);
+
+        mPaintSelector[HOURS][SELECTOR_DOT] = new Paint();
+        mPaintSelector[HOURS][SELECTOR_DOT].setColor(
+                a.getColor(R.styleable.TimePicker_numbersSelectorColor, R.color.holo_blue_light));
+        mPaintSelector[HOURS][SELECTOR_DOT].setAntiAlias(true);
+
+        mPaintSelector[HOURS][SELECTOR_LINE] = new Paint();
+        mPaintSelector[HOURS][SELECTOR_LINE].setColor(
+                a.getColor(R.styleable.TimePicker_numbersSelectorColor, R.color.holo_blue_light));
+        mPaintSelector[HOURS][SELECTOR_LINE].setAntiAlias(true);
+        mPaintSelector[HOURS][SELECTOR_LINE].setStrokeWidth(2);
+
+        mPaintSelector[MINUTES][SELECTOR_CIRCLE] = new Paint();
+        mPaintSelector[MINUTES][SELECTOR_CIRCLE].setColor(
+                a.getColor(R.styleable.TimePicker_numbersSelectorColor, R.color.holo_blue_light));
+        mPaintSelector[MINUTES][SELECTOR_CIRCLE].setAntiAlias(true);
+
+        mPaintSelector[MINUTES][SELECTOR_DOT] = new Paint();
+        mPaintSelector[MINUTES][SELECTOR_DOT].setColor(
+                a.getColor(R.styleable.TimePicker_numbersSelectorColor, R.color.holo_blue_light));
+        mPaintSelector[MINUTES][SELECTOR_DOT].setAntiAlias(true);
+
+        mPaintSelector[MINUTES][SELECTOR_LINE] = new Paint();
+        mPaintSelector[MINUTES][SELECTOR_LINE].setColor(
+                a.getColor(R.styleable.TimePicker_numbersSelectorColor, R.color.holo_blue_light));
+        mPaintSelector[MINUTES][SELECTOR_LINE].setAntiAlias(true);
+        mPaintSelector[MINUTES][SELECTOR_LINE].setStrokeWidth(2);
+
+        mPaintAmPmText.setColor(mAmPmTextColor);
+        mPaintAmPmText.setTypeface(mTypeface);
+        mPaintAmPmText.setAntiAlias(true);
+        mPaintAmPmText.setTextAlign(Paint.Align.CENTER);
+
+        mPaintAmPmCircle[AM] = new Paint();
+        mPaintAmPmCircle[AM].setAntiAlias(true);
+        mPaintAmPmCircle[PM] = new Paint();
+        mPaintAmPmCircle[PM].setAntiAlias(true);
+
+        mPaintBackground.setColor(
+                a.getColor(R.styleable.TimePicker_numbersBackgroundColor, Color.WHITE));
+        mPaintBackground.setAntiAlias(true);
+
+        final int disabledColor = a.getColor(R.styleable.TimePicker_disabledColor,
+                res.getColor(R.color.timepicker_default_disabled_color_holo_light));
+        mPaintDisabled.setColor(disabledColor);
+        mPaintDisabled.setAntiAlias(true);
+
+        if (DEBUG) {
+            mPaintDebug.setColor(DEBUG_COLOR);
+            mPaintDebug.setAntiAlias(true);
+            mPaintDebug.setStrokeWidth(DEBUG_STROKE_WIDTH);
+            mPaintDebug.setStyle(Paint.Style.STROKE);
+            mPaintDebug.setTextAlign(Paint.Align.CENTER);
+        }
+
+        mShowHours = true;
+        mIs24HourMode = false;
+        mAmOrPm = AM;
+        mAmOrPmPressed = -1;
+
+        initHoursAndMinutesText();
+        initData();
+
+        mTransitionMidRadiusMultiplier =  Float.parseFloat(
+                res.getString(R.string.timepicker_transition_mid_radius_multiplier));
+        mTransitionEndRadiusMultiplier = Float.parseFloat(
+                res.getString(R.string.timepicker_transition_end_radius_multiplier));
+
+        mTextGridHeights[HOURS] = new float[7];
+        mTextGridHeights[MINUTES] = new float[7];
+
+        mSelectionRadiusMultiplier = Float.parseFloat(
+                res.getString(R.string.timepicker_selection_radius_multiplier));
+
+        setOnTouchListener(this);
+
+        // Initial values
+        final Calendar calendar = Calendar.getInstance(Locale.getDefault());
+        final int currentHour = calendar.get(Calendar.HOUR_OF_DAY);
+        final int currentMinute = calendar.get(Calendar.MINUTE);
+
+        setCurrentHour(currentHour);
+        setCurrentMinute(currentMinute);
+
+        setHapticFeedbackEnabled(true);
+    }
+
+    /**
+     * Measure the view to end up as a square, based on the minimum of the height and width.
+     */
+    @Override
+    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int measuredWidth = MeasureSpec.getSize(widthMeasureSpec);
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        int measuredHeight = MeasureSpec.getSize(heightMeasureSpec);
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+        int minDimension = Math.min(measuredWidth, measuredHeight);
+
+        super.onMeasure(MeasureSpec.makeMeasureSpec(minDimension, widthMode),
+                MeasureSpec.makeMeasureSpec(minDimension, heightMode));
+    }
+
+    public void initialize(int hour, int minute, boolean is24HourMode) {
+        mIs24HourMode = is24HourMode;
+        setCurrentHour(hour);
+        setCurrentMinute(minute);
+    }
+
+    public void setCurrentItemShowing(int item, boolean animate) {
+        switch (item){
+            case HOURS:
+                showHours(animate);
+                break;
+            case MINUTES:
+                showMinutes(animate);
+                break;
+            default:
+                Log.e(TAG, "ClockView does not support showing item " + item);
+        }
+    }
+
+    public int getCurrentItemShowing() {
+        return mShowHours ? HOURS : MINUTES;
+    }
+
+    public void setOnValueSelectedListener(OnValueSelectedListener listener) {
+        mListener = listener;
+    }
+
+    public void setCurrentHour(int hour) {
+        final int degrees = (hour % 12) * DEGREES_FOR_ONE_HOUR;
+        mSelectionDegrees[HOURS] = degrees;
+        mSelectionDegrees[HOURS_INNER] = degrees;
+        mAmOrPm = ((hour % 24) < 12) ? AM : PM;
+        if (mIs24HourMode) {
+            mIsOnInnerCircle = (mAmOrPm == AM);
+        } else {
+            mIsOnInnerCircle = false;
+        }
+        initData();
+        updateLayoutData();
+        invalidate();
+    }
+
+    // Return hours in 0-23 range
+    public int getCurrentHour() {
+        int hours =
+                mSelectionDegrees[mIsOnInnerCircle ? HOURS_INNER : HOURS] / DEGREES_FOR_ONE_HOUR;
+        if (mIs24HourMode) {
+            if (mIsOnInnerCircle) {
+                hours = hours % 12;
+            } else {
+                if (hours != 0) {
+                    hours += 12;
+                }
+            }
+        } else {
+            hours = hours % 12;
+            if (hours == 0) {
+                if (mAmOrPm == PM) {
+                    hours = 12;
+                }
+            } else {
+                if (mAmOrPm == PM) {
+                    hours += 12;
+                }
+            }
+        }
+        return hours;
+    }
+
+    public void setCurrentMinute(int minute) {
+        mSelectionDegrees[MINUTES] = (minute % 60) * DEGREES_FOR_ONE_MINUTE;
+        invalidate();
+    }
+
+    // Returns minutes in 0-59 range
+    public int getCurrentMinute() {
+        return (mSelectionDegrees[MINUTES] / DEGREES_FOR_ONE_MINUTE);
+    }
+
+    public void setAmOrPm(int val) {
+        mAmOrPm = (val % 2);
+        invalidate();
+    }
+
+    public int getAmOrPm() {
+        return mAmOrPm;
+    }
+
+    public void swapAmPm() {
+        mAmOrPm = (mAmOrPm == AM) ? PM : AM;
+        invalidate();
+    }
+
+    public void showHours(boolean animate) {
+        if (mShowHours) return;
+        mShowHours = true;
+        if (animate) {
+            startMinutesToHoursAnimation();
+        }
+        initData();
+        updateLayoutData();
+        invalidate();
+    }
+
+    public void showMinutes(boolean animate) {
+        if (!mShowHours) return;
+        mShowHours = false;
+        if (animate) {
+            startHoursToMinutesAnimation();
+        }
+        initData();
+        updateLayoutData();
+        invalidate();
+    }
+
+    private void initHoursAndMinutesText() {
+        // Initialize the hours and minutes numbers.
+        for (int i = 0; i < 12; i++) {
+            mHours12Texts[i] = String.format("%d", HOURS_NUMBERS[i]);
+            mOuterHours24Texts[i] = String.format("%02d", HOURS_NUMBERS_24[i]);
+            mInnerHours24Texts[i] = String.format("%d", HOURS_NUMBERS[i]);
+            mMinutesTexts[i] = String.format("%02d", MINUTES_NUMBERS[i]);
+        }
+
+        String[] amPmTexts = new DateFormatSymbols().getAmPmStrings();
+        mAmPmText[AM] = amPmTexts[0];
+        mAmPmText[PM] = amPmTexts[1];
+    }
+
+    private void initData() {
+        if (mIs24HourMode) {
+            mOuterTextHours = mOuterHours24Texts;
+            mInnerTextHours = mInnerHours24Texts;
+        } else {
+            mOuterTextHours = mHours12Texts;
+            mInnerTextHours = null;
+        }
+
+        mOuterTextMinutes = mMinutesTexts;
+
+        final Resources res = getResources();
+
+        if (mShowHours) {
+            if (mIs24HourMode) {
+                mCircleRadiusMultiplier[HOURS] = Float.parseFloat(
+                        res.getString(R.string.timepicker_circle_radius_multiplier_24HourMode));
+                mNumbersRadiusMultiplier[HOURS] = Float.parseFloat(
+                        res.getString(R.string.timepicker_numbers_radius_multiplier_outer));
+                mTextSizeMultiplier[HOURS] = Float.parseFloat(
+                        res.getString(R.string.timepicker_text_size_multiplier_outer));
+
+                mNumbersRadiusMultiplier[HOURS_INNER] = Float.parseFloat(
+                        res.getString(R.string.timepicker_numbers_radius_multiplier_inner));
+                mTextSizeMultiplier[HOURS_INNER] = Float.parseFloat(
+                        res.getString(R.string.timepicker_text_size_multiplier_inner));
+            } else {
+                mCircleRadiusMultiplier[HOURS] = Float.parseFloat(
+                        res.getString(R.string.timepicker_circle_radius_multiplier));
+                mNumbersRadiusMultiplier[HOURS] = Float.parseFloat(
+                        res.getString(R.string.timepicker_numbers_radius_multiplier_normal));
+                mTextSizeMultiplier[HOURS] = Float.parseFloat(
+                        res.getString(R.string.timepicker_text_size_multiplier_normal));
+            }
+        } else {
+            mCircleRadiusMultiplier[MINUTES] = Float.parseFloat(
+                    res.getString(R.string.timepicker_circle_radius_multiplier));
+            mNumbersRadiusMultiplier[MINUTES] = Float.parseFloat(
+                    res.getString(R.string.timepicker_numbers_radius_multiplier_normal));
+            mTextSizeMultiplier[MINUTES] = Float.parseFloat(
+                    res.getString(R.string.timepicker_text_size_multiplier_normal));
+        }
+
+        mAnimationRadiusMultiplier[HOURS] = 1;
+        mAnimationRadiusMultiplier[HOURS_INNER] = 1;
+        mAnimationRadiusMultiplier[MINUTES] = 1;
+
+        mAmPmCircleRadiusMultiplier = Float.parseFloat(
+                res.getString(R.string.timepicker_ampm_circle_radius_multiplier));
+
+        mPaint[HOURS].setAlpha(mShowHours ? ALPHA_OPAQUE : ALPHA_TRANSPARENT);
+        mPaint[MINUTES].setAlpha(mShowHours ? ALPHA_TRANSPARENT : ALPHA_OPAQUE);
+
+        mPaintSelector[HOURS][SELECTOR_CIRCLE].setAlpha(
+                mShowHours ?ALPHA_SELECTOR : ALPHA_TRANSPARENT);
+        mPaintSelector[HOURS][SELECTOR_DOT].setAlpha(
+                mShowHours ? ALPHA_OPAQUE : ALPHA_TRANSPARENT);
+        mPaintSelector[HOURS][SELECTOR_LINE].setAlpha(
+                mShowHours ? ALPHA_SELECTOR : ALPHA_TRANSPARENT);
+
+        mPaintSelector[MINUTES][SELECTOR_CIRCLE].setAlpha(
+                mShowHours ? ALPHA_TRANSPARENT : ALPHA_SELECTOR);
+        mPaintSelector[MINUTES][SELECTOR_DOT].setAlpha(
+                mShowHours ? ALPHA_TRANSPARENT : ALPHA_OPAQUE);
+        mPaintSelector[MINUTES][SELECTOR_LINE].setAlpha(
+                mShowHours ? ALPHA_TRANSPARENT : ALPHA_SELECTOR);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        updateLayoutData();
+    }
+
+    private void updateLayoutData() {
+        mXCenter = getWidth() / 2;
+        mYCenter = getHeight() / 2;
+
+        final int min = Math.min(mXCenter, mYCenter);
+
+        mCircleRadius[HOURS] = min * mCircleRadiusMultiplier[HOURS];
+        mCircleRadius[HOURS_INNER] = min * mCircleRadiusMultiplier[HOURS];
+        mCircleRadius[MINUTES] = min * mCircleRadiusMultiplier[MINUTES];
+
+        if (!mIs24HourMode) {
+            // We'll need to draw the AM/PM circles, so the main circle will need to have
+            // a slightly higher center. To keep the entire view centered vertically, we'll
+            // have to push it up by half the radius of the AM/PM circles.
+            int amPmCircleRadius = (int) (mCircleRadius[HOURS] * mAmPmCircleRadiusMultiplier);
+            mYCenter -= amPmCircleRadius / 2;
+        }
+
+        mMinHypotenuseForInnerNumber = (int) (mCircleRadius[HOURS]
+                * mNumbersRadiusMultiplier[HOURS_INNER]) - mSelectionRadius[HOURS];
+        mMaxHypotenuseForOuterNumber = (int) (mCircleRadius[HOURS]
+                * mNumbersRadiusMultiplier[HOURS]) + mSelectionRadius[HOURS];
+        mHalfwayHypotenusePoint = (int) (mCircleRadius[HOURS]
+                * ((mNumbersRadiusMultiplier[HOURS] + mNumbersRadiusMultiplier[HOURS_INNER]) / 2));
+
+        mTextSize[HOURS] = mCircleRadius[HOURS] * mTextSizeMultiplier[HOURS];
+        mTextSize[MINUTES] = mCircleRadius[MINUTES] * mTextSizeMultiplier[MINUTES];
+
+        if (mIs24HourMode) {
+            mInnerTextSize = mCircleRadius[HOURS] * mTextSizeMultiplier[HOURS_INNER];
+        }
+
+        calculateGridSizesHours();
+        calculateGridSizesMinutes();
+
+        mSelectionRadius[HOURS] = (int) (mCircleRadius[HOURS] * mSelectionRadiusMultiplier);
+        mSelectionRadius[HOURS_INNER] = mSelectionRadius[HOURS];
+        mSelectionRadius[MINUTES] = (int) (mCircleRadius[MINUTES] * mSelectionRadiusMultiplier);
+
+        mAmPmCircleRadius = (int) (mCircleRadius[HOURS] * mAmPmCircleRadiusMultiplier);
+        mPaintAmPmText.setTextSize(mAmPmCircleRadius * 3 / 4);
+
+        // Line up the vertical center of the AM/PM circles with the bottom of the main circle.
+        mAmPmYCenter = mYCenter + mCircleRadius[HOURS];
+
+        // Line up the horizontal edges of the AM/PM circles with the horizontal edges
+        // of the main circle
+        mLeftIndicatorXCenter = mXCenter - mCircleRadius[HOURS] + mAmPmCircleRadius;
+        mRightIndicatorXCenter = mXCenter + mCircleRadius[HOURS] - mAmPmCircleRadius;
+    }
+
+    @Override
+    public void onDraw(Canvas canvas) {
+        canvas.save();
+
+        calculateGridSizesHours();
+        calculateGridSizesMinutes();
+
+        drawCircleBackground(canvas);
+
+        drawTextElements(canvas, mTextSize[HOURS], mTypeface, mOuterTextHours,
+                mTextGridWidths[HOURS], mTextGridHeights[HOURS], mPaint[HOURS]);
+
+        if (mIs24HourMode && mInnerTextHours != null) {
+            drawTextElements(canvas, mInnerTextSize, mTypeface, mInnerTextHours,
+                    mInnerTextGridWidths, mInnerTextGridHeights, mPaint[HOURS]);
+        }
+
+        drawTextElements(canvas, mTextSize[MINUTES], mTypeface, mOuterTextMinutes,
+                mTextGridWidths[MINUTES], mTextGridHeights[MINUTES], mPaint[MINUTES]);
+
+        drawCenter(canvas);
+        drawSelector(canvas);
+        if (!mIs24HourMode) {
+            drawAmPm(canvas);
+        }
+
+        if(!mInputEnabled) {
+            // Draw outer view rectangle
+            mRectF.set(0, 0, getWidth(), getHeight());
+            canvas.drawRect(mRectF, mPaintDisabled);
+        }
+
+        if (DEBUG) {
+            drawDebug(canvas);
+        }
+
+        canvas.restore();
+    }
+
+    private void drawCircleBackground(Canvas canvas) {
+        canvas.drawCircle(mXCenter, mYCenter, mCircleRadius[HOURS], mPaintBackground);
+    }
+
+    private void drawCenter(Canvas canvas) {
+        canvas.drawCircle(mXCenter, mYCenter, CENTER_RADIUS, mPaintCenter);
+    }
+
+    private void drawSelector(Canvas canvas) {
+        drawSelector(canvas, mIsOnInnerCircle ? HOURS_INNER : HOURS);
+        drawSelector(canvas, MINUTES);
+    }
+
+    private void drawAmPm(Canvas canvas) {
+        final boolean isLayoutRtl = isLayoutRtl();
+
+        int amColor = mAmPmUnselectedColor;
+        int amAlpha = ALPHA_OPAQUE;
+        int pmColor = mAmPmUnselectedColor;
+        int pmAlpha = ALPHA_OPAQUE;
+        if (mAmOrPm == AM) {
+            amColor = mAmPmSelectedColor;
+            amAlpha = ALPHA_AMPM_SELECTED;
+        } else if (mAmOrPm == PM) {
+            pmColor = mAmPmSelectedColor;
+            pmAlpha = ALPHA_AMPM_SELECTED;
+        }
+        if (mAmOrPmPressed == AM) {
+            amColor = mAmPmSelectedColor;
+            amAlpha = ALPHA_AMPM_PRESSED;
+        } else if (mAmOrPmPressed == PM) {
+            pmColor = mAmPmSelectedColor;
+            pmAlpha = ALPHA_AMPM_PRESSED;
+        }
+
+        // Draw the two circles
+        mPaintAmPmCircle[AM].setColor(amColor);
+        mPaintAmPmCircle[AM].setAlpha(amAlpha);
+        canvas.drawCircle(isLayoutRtl ? mRightIndicatorXCenter : mLeftIndicatorXCenter,
+                mAmPmYCenter, mAmPmCircleRadius, mPaintAmPmCircle[AM]);
+
+        mPaintAmPmCircle[PM].setColor(pmColor);
+        mPaintAmPmCircle[PM].setAlpha(pmAlpha);
+        canvas.drawCircle(isLayoutRtl ? mLeftIndicatorXCenter : mRightIndicatorXCenter,
+                mAmPmYCenter, mAmPmCircleRadius, mPaintAmPmCircle[PM]);
+
+        // Draw the AM/PM texts on top
+        mPaintAmPmText.setColor(mAmPmTextColor);
+        float textYCenter = mAmPmYCenter -
+                (int) (mPaintAmPmText.descent() + mPaintAmPmText.ascent()) / 2;
+
+        canvas.drawText(isLayoutRtl ? mAmPmText[PM] : mAmPmText[AM], mLeftIndicatorXCenter,
+                textYCenter, mPaintAmPmText);
+        canvas.drawText(isLayoutRtl ? mAmPmText[AM] : mAmPmText[PM], mRightIndicatorXCenter,
+                textYCenter, mPaintAmPmText);
+    }
+
+    private void drawSelector(Canvas canvas, int index) {
+        // Calculate the current radius at which to place the selection circle.
+        mLineLength[index] = (int) (mCircleRadius[index]
+                * mNumbersRadiusMultiplier[index] * mAnimationRadiusMultiplier[index]);
+
+        double selectionRadians = Math.toRadians(mSelectionDegrees[index]);
+
+        int pointX = mXCenter + (int) (mLineLength[index] * Math.sin(selectionRadians));
+        int pointY = mYCenter - (int) (mLineLength[index] * Math.cos(selectionRadians));
+
+        // Draw the selection circle
+        canvas.drawCircle(pointX, pointY, mSelectionRadius[index],
+                mPaintSelector[index % 2][SELECTOR_CIRCLE]);
+
+        // Draw the dot if needed
+        if (mSelectionDegrees[index] % 30 != 0) {
+            // We're not on a direct tick
+            canvas.drawCircle(pointX, pointY, (mSelectionRadius[index] * 2 / 7),
+                    mPaintSelector[index % 2][SELECTOR_DOT]);
+        } else {
+            // We're not drawing the dot, so shorten the line to only go as far as the edge of the
+            // selection circle
+            int lineLength = mLineLength[index] - mSelectionRadius[index];
+            pointX = mXCenter + (int) (lineLength * Math.sin(selectionRadians));
+            pointY = mYCenter - (int) (lineLength * Math.cos(selectionRadians));
+        }
+
+        // Draw the line
+        canvas.drawLine(mXCenter, mYCenter, pointX, pointY,
+                mPaintSelector[index % 2][SELECTOR_LINE]);
+    }
+
+    private void drawDebug(Canvas canvas) {
+        // Draw outer numbers circle
+        final float outerRadius = mCircleRadius[HOURS] * mNumbersRadiusMultiplier[HOURS];
+        canvas.drawCircle(mXCenter, mYCenter, outerRadius, mPaintDebug);
+
+        // Draw inner numbers circle
+        final float innerRadius = mCircleRadius[HOURS] * mNumbersRadiusMultiplier[HOURS_INNER];
+        canvas.drawCircle(mXCenter, mYCenter, innerRadius, mPaintDebug);
+
+        // Draw outer background circle
+        canvas.drawCircle(mXCenter, mYCenter, mCircleRadius[HOURS], mPaintDebug);
+
+        // Draw outer rectangle for circles
+        float left = mXCenter - outerRadius;
+        float top = mYCenter - outerRadius;
+        float right = mXCenter + outerRadius;
+        float bottom = mYCenter + outerRadius;
+        mRectF = new RectF(left, top, right, bottom);
+        canvas.drawRect(mRectF, mPaintDebug);
+
+        // Draw outer rectangle for background
+        left = mXCenter - mCircleRadius[HOURS];
+        top = mYCenter - mCircleRadius[HOURS];
+        right = mXCenter + mCircleRadius[HOURS];
+        bottom = mYCenter + mCircleRadius[HOURS];
+        mRectF.set(left, top, right, bottom);
+        canvas.drawRect(mRectF, mPaintDebug);
+
+        // Draw outer view rectangle
+        mRectF.set(0, 0, getWidth(), getHeight());
+        canvas.drawRect(mRectF, mPaintDebug);
+
+        // Draw selected time
+        final String selected = String.format("%02d:%02d", getCurrentHour(), getCurrentMinute());
+
+        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT);
+        TextView tv = new TextView(getContext());
+        tv.setLayoutParams(lp);
+        tv.setText(selected);
+        tv.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
+        Paint paint = tv.getPaint();
+        paint.setColor(DEBUG_TEXT_COLOR);
+
+        final int width = tv.getMeasuredWidth();
+
+        float height = paint.descent() - paint.ascent();
+        float x = mXCenter - width / 2;
+        float y = mYCenter + 1.5f * height;
+
+        canvas.drawText(selected.toString(), x, y, paint);
+    }
+
+    private void calculateGridSizesHours() {
+        // Calculate the text positions
+        float numbersRadius = mCircleRadius[HOURS]
+                * mNumbersRadiusMultiplier[HOURS] * mAnimationRadiusMultiplier[HOURS];
+
+        // Calculate the positions for the 12 numbers in the main circle.
+        calculateGridSizes(mPaint[HOURS], numbersRadius, mXCenter, mYCenter,
+                mTextSize[HOURS], mTextGridHeights[HOURS], mTextGridWidths[HOURS]);
+
+        // If we have an inner circle, calculate those positions too.
+        if (mIs24HourMode) {
+            float innerNumbersRadius = mCircleRadius[HOURS_INNER]
+                    * mNumbersRadiusMultiplier[HOURS_INNER]
+                    * mAnimationRadiusMultiplier[HOURS_INNER];
+
+            calculateGridSizes(mPaint[HOURS], innerNumbersRadius, mXCenter, mYCenter,
+                    mInnerTextSize, mInnerTextGridHeights, mInnerTextGridWidths);
+        }
+    }
+
+    private void calculateGridSizesMinutes() {
+        // Calculate the text positions
+        float numbersRadius = mCircleRadius[MINUTES]
+                * mNumbersRadiusMultiplier[MINUTES] * mAnimationRadiusMultiplier[MINUTES];
+
+        // Calculate the positions for the 12 numbers in the main circle.
+        calculateGridSizes(mPaint[MINUTES], numbersRadius, mXCenter, mYCenter,
+                mTextSize[MINUTES], mTextGridHeights[MINUTES], mTextGridWidths[MINUTES]);
+    }
+
+
+    /**
+     * Using the trigonometric Unit Circle, calculate the positions that the text will need to be
+     * drawn at based on the specified circle radius. Place the values in the textGridHeights and
+     * textGridWidths parameters.
+     */
+    private static void calculateGridSizes(Paint paint, float numbersRadius, float xCenter,
+            float yCenter, float textSize, float[] textGridHeights, float[] textGridWidths) {
+        /*
+         * The numbers need to be drawn in a 7x7 grid, representing the points on the Unit Circle.
+         */
+        final float offset1 = numbersRadius;
+        // cos(30) = a / r => r * cos(30)
+        final float offset2 = numbersRadius * COSINE_30_DEGREES;
+        // sin(30) = o / r => r * sin(30)
+        final float offset3 = numbersRadius * SINE_30_DEGREES;
+
+        paint.setTextSize(textSize);
+        // We'll need yTextBase to be slightly lower to account for the text's baseline.
+        yCenter -= (paint.descent() + paint.ascent()) / 2;
+
+        textGridHeights[0] = yCenter - offset1;
+        textGridWidths[0] = xCenter - offset1;
+        textGridHeights[1] = yCenter - offset2;
+        textGridWidths[1] = xCenter - offset2;
+        textGridHeights[2] = yCenter - offset3;
+        textGridWidths[2] = xCenter - offset3;
+        textGridHeights[3] = yCenter;
+        textGridWidths[3] = xCenter;
+        textGridHeights[4] = yCenter + offset3;
+        textGridWidths[4] = xCenter + offset3;
+        textGridHeights[5] = yCenter + offset2;
+        textGridWidths[5] = xCenter + offset2;
+        textGridHeights[6] = yCenter + offset1;
+        textGridWidths[6] = xCenter + offset1;
+    }
+
+    /**
+     * Draw the 12 text values at the positions specified by the textGrid parameters.
+     */
+    private void drawTextElements(Canvas canvas, float textSize, Typeface typeface, String[] texts,
+            float[] textGridWidths, float[] textGridHeights, Paint paint) {
+        paint.setTextSize(textSize);
+        paint.setTypeface(typeface);
+        canvas.drawText(texts[0], textGridWidths[3], textGridHeights[0], paint);
+        canvas.drawText(texts[1], textGridWidths[4], textGridHeights[1], paint);
+        canvas.drawText(texts[2], textGridWidths[5], textGridHeights[2], paint);
+        canvas.drawText(texts[3], textGridWidths[6], textGridHeights[3], paint);
+        canvas.drawText(texts[4], textGridWidths[5], textGridHeights[4], paint);
+        canvas.drawText(texts[5], textGridWidths[4], textGridHeights[5], paint);
+        canvas.drawText(texts[6], textGridWidths[3], textGridHeights[6], paint);
+        canvas.drawText(texts[7], textGridWidths[2], textGridHeights[5], paint);
+        canvas.drawText(texts[8], textGridWidths[1], textGridHeights[4], paint);
+        canvas.drawText(texts[9], textGridWidths[0], textGridHeights[3], paint);
+        canvas.drawText(texts[10], textGridWidths[1], textGridHeights[2], paint);
+        canvas.drawText(texts[11], textGridWidths[2], textGridHeights[1], paint);
+    }
+
+    // Used for animating the hours by changing their radius
+    private void setAnimationRadiusMultiplierHours(float animationRadiusMultiplier) {
+        mAnimationRadiusMultiplier[HOURS] = animationRadiusMultiplier;
+        mAnimationRadiusMultiplier[HOURS_INNER] = animationRadiusMultiplier;
+    }
+
+    // Used for animating the minutes by changing their radius
+    private void setAnimationRadiusMultiplierMinutes(float animationRadiusMultiplier) {
+        mAnimationRadiusMultiplier[MINUTES] = animationRadiusMultiplier;
+    }
+
+    private static ObjectAnimator getRadiusDisappearAnimator(Object target,
+            String radiusPropertyName, InvalidateUpdateListener updateListener,
+            float midRadiusMultiplier, float endRadiusMultiplier) {
+        Keyframe kf0, kf1, kf2;
+        float midwayPoint = 0.2f;
+        int duration = 500;
+
+        kf0 = Keyframe.ofFloat(0f, 1);
+        kf1 = Keyframe.ofFloat(midwayPoint, midRadiusMultiplier);
+        kf2 = Keyframe.ofFloat(1f, endRadiusMultiplier);
+        PropertyValuesHolder radiusDisappear = PropertyValuesHolder.ofKeyframe(
+                radiusPropertyName, kf0, kf1, kf2);
+
+        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(
+                target, radiusDisappear).setDuration(duration);
+        animator.addUpdateListener(updateListener);
+        return animator;
+    }
+
+    private static ObjectAnimator getRadiusReappearAnimator(Object target,
+            String radiusPropertyName, InvalidateUpdateListener updateListener,
+            float midRadiusMultiplier, float endRadiusMultiplier) {
+        Keyframe kf0, kf1, kf2, kf3;
+        float midwayPoint = 0.2f;
+        int duration = 500;
+
+        // Set up animator for reappearing.
+        float delayMultiplier = 0.25f;
+        float transitionDurationMultiplier = 1f;
+        float totalDurationMultiplier = transitionDurationMultiplier + delayMultiplier;
+        int totalDuration = (int) (duration * totalDurationMultiplier);
+        float delayPoint = (delayMultiplier * duration) / totalDuration;
+        midwayPoint = 1 - (midwayPoint * (1 - delayPoint));
+
+        kf0 = Keyframe.ofFloat(0f, endRadiusMultiplier);
+        kf1 = Keyframe.ofFloat(delayPoint, endRadiusMultiplier);
+        kf2 = Keyframe.ofFloat(midwayPoint, midRadiusMultiplier);
+        kf3 = Keyframe.ofFloat(1f, 1);
+        PropertyValuesHolder radiusReappear = PropertyValuesHolder.ofKeyframe(
+                radiusPropertyName, kf0, kf1, kf2, kf3);
+
+        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(
+                target, radiusReappear).setDuration(totalDuration);
+        animator.addUpdateListener(updateListener);
+        return animator;
+    }
+
+    private static ObjectAnimator getFadeOutAnimator(Object target, int startAlpha, int endAlpha,
+                InvalidateUpdateListener updateListener) {
+        int duration = 500;
+        ObjectAnimator animator = ObjectAnimator.ofInt(target, "alpha", startAlpha, endAlpha);
+        animator.setDuration(duration);
+        animator.addUpdateListener(updateListener);
+
+        return animator;
+    }
+
+    private static ObjectAnimator getFadeInAnimator(Object target, int startAlpha, int endAlpha,
+                InvalidateUpdateListener updateListener) {
+        Keyframe kf0, kf1, kf2;
+        int duration = 500;
+
+        // Set up animator for reappearing.
+        float delayMultiplier = 0.25f;
+        float transitionDurationMultiplier = 1f;
+        float totalDurationMultiplier = transitionDurationMultiplier + delayMultiplier;
+        int totalDuration = (int) (duration * totalDurationMultiplier);
+        float delayPoint = (delayMultiplier * duration) / totalDuration;
+
+        kf0 = Keyframe.ofInt(0f, startAlpha);
+        kf1 = Keyframe.ofInt(delayPoint, startAlpha);
+        kf2 = Keyframe.ofInt(1f, endAlpha);
+        PropertyValuesHolder fadeIn = PropertyValuesHolder.ofKeyframe("alpha", kf0, kf1, kf2);
+
+        ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(
+                target, fadeIn).setDuration(totalDuration);
+        animator.addUpdateListener(updateListener);
+        return animator;
+    }
+
+    private class InvalidateUpdateListener implements ValueAnimator.AnimatorUpdateListener {
+        @Override
+        public void onAnimationUpdate(ValueAnimator animation) {
+            RadialTimePickerView.this.invalidate();
+        }
+    }
+
+    private void startHoursToMinutesAnimation() {
+        if (mHoursToMinutesAnims.size() == 0) {
+            mHoursToMinutesAnims.add(getRadiusDisappearAnimator(this,
+                    "animationRadiusMultiplierHours", mInvalidateUpdateListener,
+                    mTransitionMidRadiusMultiplier, mTransitionEndRadiusMultiplier));
+            mHoursToMinutesAnims.add(getFadeOutAnimator(mPaint[HOURS],
+                    ALPHA_OPAQUE, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+            mHoursToMinutesAnims.add(getFadeOutAnimator(mPaintSelector[HOURS][SELECTOR_CIRCLE],
+                    ALPHA_SELECTOR, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+            mHoursToMinutesAnims.add(getFadeOutAnimator(mPaintSelector[HOURS][SELECTOR_DOT],
+                    ALPHA_OPAQUE, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+            mHoursToMinutesAnims.add(getFadeOutAnimator(mPaintSelector[HOURS][SELECTOR_LINE],
+                    ALPHA_SELECTOR, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+
+            mHoursToMinutesAnims.add(getRadiusReappearAnimator(this,
+                    "animationRadiusMultiplierMinutes", mInvalidateUpdateListener,
+                    mTransitionMidRadiusMultiplier, mTransitionEndRadiusMultiplier));
+            mHoursToMinutesAnims.add(getFadeInAnimator(mPaint[MINUTES],
+                    ALPHA_TRANSPARENT, ALPHA_OPAQUE, mInvalidateUpdateListener));
+            mHoursToMinutesAnims.add(getFadeInAnimator(mPaintSelector[MINUTES][SELECTOR_CIRCLE],
+                    ALPHA_TRANSPARENT, ALPHA_SELECTOR, mInvalidateUpdateListener));
+            mHoursToMinutesAnims.add(getFadeInAnimator(mPaintSelector[MINUTES][SELECTOR_DOT],
+                    ALPHA_TRANSPARENT, ALPHA_OPAQUE, mInvalidateUpdateListener));
+            mHoursToMinutesAnims.add(getFadeInAnimator(mPaintSelector[MINUTES][SELECTOR_LINE],
+                    ALPHA_TRANSPARENT, ALPHA_SELECTOR, mInvalidateUpdateListener));
+        }
+
+        if (mTransition != null && mTransition.isRunning()) {
+            mTransition.end();
+        }
+        mTransition = new AnimatorSet();
+        mTransition.playTogether(mHoursToMinutesAnims);
+        mTransition.start();
+    }
+
+    private void startMinutesToHoursAnimation() {
+        if (mMinuteToHoursAnims.size() == 0) {
+            mMinuteToHoursAnims.add(getRadiusDisappearAnimator(this,
+                    "animationRadiusMultiplierMinutes", mInvalidateUpdateListener,
+                    mTransitionMidRadiusMultiplier, mTransitionEndRadiusMultiplier));
+            mMinuteToHoursAnims.add(getFadeOutAnimator(mPaint[MINUTES],
+                    ALPHA_OPAQUE, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+            mMinuteToHoursAnims.add(getFadeOutAnimator(mPaintSelector[MINUTES][SELECTOR_CIRCLE],
+                    ALPHA_SELECTOR, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+            mMinuteToHoursAnims.add(getFadeOutAnimator(mPaintSelector[MINUTES][SELECTOR_DOT],
+                    ALPHA_OPAQUE, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+            mMinuteToHoursAnims.add(getFadeOutAnimator(mPaintSelector[MINUTES][SELECTOR_LINE],
+                    ALPHA_SELECTOR, ALPHA_TRANSPARENT, mInvalidateUpdateListener));
+
+            mMinuteToHoursAnims.add(getRadiusReappearAnimator(this,
+                    "animationRadiusMultiplierHours", mInvalidateUpdateListener,
+                    mTransitionMidRadiusMultiplier, mTransitionEndRadiusMultiplier));
+            mMinuteToHoursAnims.add(getFadeInAnimator(mPaint[HOURS],
+                    ALPHA_TRANSPARENT, ALPHA_OPAQUE, mInvalidateUpdateListener));
+            mMinuteToHoursAnims.add(getFadeInAnimator(mPaintSelector[HOURS][SELECTOR_CIRCLE],
+                    ALPHA_TRANSPARENT, ALPHA_SELECTOR, mInvalidateUpdateListener));
+            mMinuteToHoursAnims.add(getFadeInAnimator(mPaintSelector[HOURS][SELECTOR_DOT],
+                    ALPHA_TRANSPARENT, ALPHA_OPAQUE, mInvalidateUpdateListener));
+            mMinuteToHoursAnims.add(getFadeInAnimator(mPaintSelector[HOURS][SELECTOR_LINE],
+                    ALPHA_TRANSPARENT, ALPHA_SELECTOR, mInvalidateUpdateListener));
+        }
+
+        if (mTransition != null && mTransition.isRunning()) {
+            mTransition.end();
+        }
+        mTransition = new AnimatorSet();
+        mTransition.playTogether(mMinuteToHoursAnims);
+        mTransition.start();
+    }
+
+    private int getDegreesFromXY(float x, float y) {
+        final double hypotenuse = Math.sqrt(
+                (y - mYCenter) * (y - mYCenter) + (x - mXCenter) * (x - mXCenter));
+
+        // Basic check if we're outside the range of the disk
+        if (hypotenuse > mCircleRadius[HOURS]) {
+            return -1;
+        }
+        // Check
+        if (mIs24HourMode && mShowHours) {
+            if (hypotenuse >= mMinHypotenuseForInnerNumber
+                    && hypotenuse <= mHalfwayHypotenusePoint) {
+                mIsOnInnerCircle = true;
+            } else if (hypotenuse <= mMaxHypotenuseForOuterNumber
+                    && hypotenuse >= mHalfwayHypotenusePoint) {
+                mIsOnInnerCircle = false;
+            } else {
+                return -1;
+            }
+        } else {
+            final int index =  (mShowHours) ? HOURS : MINUTES;
+            final float length = (mCircleRadius[index] * mNumbersRadiusMultiplier[index]);
+            final int distanceToNumber = (int) Math.abs(hypotenuse - length);
+            final int maxAllowedDistance =
+                    (int) (mCircleRadius[index] * (1 - mNumbersRadiusMultiplier[index]));
+            if (distanceToNumber > maxAllowedDistance) {
+                return -1;
+            }
+        }
+
+        final float opposite = Math.abs(y - mYCenter);
+        double degrees = Math.toDegrees(Math.asin(opposite / hypotenuse));
+
+        // Now we have to translate to the correct quadrant.
+        boolean rightSide = (x > mXCenter);
+        boolean topSide = (y < mYCenter);
+        if (rightSide && topSide) {
+            degrees = 90 - degrees;
+        } else if (rightSide && !topSide) {
+            degrees = 90 + degrees;
+        } else if (!rightSide && !topSide) {
+            degrees = 270 - degrees;
+        } else if (!rightSide && topSide) {
+            degrees = 270 + degrees;
+        }
+        return (int) degrees;
+    }
+
+    private int getIsTouchingAmOrPm(float x, float y) {
+        final boolean isLayoutRtl = isLayoutRtl();
+        int squaredYDistance = (int) ((y - mAmPmYCenter) * (y - mAmPmYCenter));
+
+        int distanceToAmCenter = (int) Math.sqrt(
+                (x - mLeftIndicatorXCenter) * (x - mLeftIndicatorXCenter) + squaredYDistance);
+        if (distanceToAmCenter <= mAmPmCircleRadius) {
+            return (isLayoutRtl ? PM : AM);
+        }
+
+        int distanceToPmCenter = (int) Math.sqrt(
+                (x - mRightIndicatorXCenter) * (x - mRightIndicatorXCenter) + squaredYDistance);
+        if (distanceToPmCenter <= mAmPmCircleRadius) {
+            return (isLayoutRtl ? AM : PM);
+        }
+
+        // Neither was close enough.
+        return -1;
+    }
+
+    @Override
+    public boolean onTouch(View v, MotionEvent event) {
+        if(!mInputEnabled) {
+            return true;
+        }
+
+        final float eventX = event.getX();
+        final float eventY = event.getY();
+
+        int degrees;
+        int snapDegrees;
+        boolean result = false;
+
+        switch(event.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+            case MotionEvent.ACTION_MOVE:
+                mAmOrPmPressed = getIsTouchingAmOrPm(eventX, eventY);
+                if (mAmOrPmPressed != -1) {
+                    result = true;
+                } else {
+                    degrees = getDegreesFromXY(eventX, eventY);
+                    if (degrees != -1) {
+                        snapDegrees = (mShowHours ?
+                                snapOnly30s(degrees, 0) : snapPrefer30s(degrees)) % 360;
+                        if (mShowHours) {
+                            mSelectionDegrees[HOURS] = snapDegrees;
+                            mSelectionDegrees[HOURS_INNER] = snapDegrees;
+                        } else {
+                            mSelectionDegrees[MINUTES] = snapDegrees;
+                        }
+                        performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK);
+                        if (mListener != null) {
+                            if (mShowHours) {
+                                mListener.onValueSelected(HOURS, getCurrentHour(), false);
+                            } else  {
+                                mListener.onValueSelected(MINUTES, getCurrentMinute(), false);
+                            }
+                        }
+                        result = true;
+                    }
+                }
+                invalidate();
+                return result;
+
+            case MotionEvent.ACTION_UP:
+                mAmOrPmPressed = getIsTouchingAmOrPm(eventX, eventY);
+                if (mAmOrPmPressed != -1) {
+                    if (mAmOrPm != mAmOrPmPressed) {
+                        swapAmPm();
+                    }
+                    mAmOrPmPressed = -1;
+                    if (mListener != null) {
+                        mListener.onValueSelected(AMPM, getCurrentHour(), true);
+                    }
+                    result = true;
+                } else {
+                    degrees = getDegreesFromXY(eventX, eventY);
+                    if (degrees != -1) {
+                        snapDegrees = (mShowHours ?
+                                snapOnly30s(degrees, 0) : snapPrefer30s(degrees)) % 360;
+                        if (mShowHours) {
+                            mSelectionDegrees[HOURS] = snapDegrees;
+                            mSelectionDegrees[HOURS_INNER] = snapDegrees;
+                        } else {
+                            mSelectionDegrees[MINUTES] = snapDegrees;
+                        }
+                        if (mListener != null) {
+                            if (mShowHours) {
+                                mListener.onValueSelected(HOURS, getCurrentHour(), true);
+                            } else  {
+                                mListener.onValueSelected(MINUTES, getCurrentMinute(), true);
+                            }
+                        }
+                        result = true;
+                    }
+                }
+                if (result) {
+                    invalidate();
+                }
+                return result;
+
+            default:
+                break;
+        }
+        return false;
+    }
+
+    /**
+     * Necessary for accessibility, to ensure we support "scrolling" forward and backward
+     * in the circle.
+     */
+    @Override
+    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+        super.onInitializeAccessibilityNodeInfo(info);
+        info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_FORWARD);
+        info.addAction(AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD);
+    }
+
+    /**
+     * Announce the currently-selected time when launched.
+     */
+    @Override
+    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
+            // Clear the event's current text so that only the current time will be spoken.
+            event.getText().clear();
+            Time time = new Time();
+            time.hour = getCurrentHour();
+            time.minute = getCurrentMinute();
+            long millis = time.normalize(true);
+            int flags = DateUtils.FORMAT_SHOW_TIME;
+            if (mIs24HourMode) {
+                flags |= DateUtils.FORMAT_24HOUR;
+            }
+            String timeString = DateUtils.formatDateTime(getContext(), millis, flags);
+            event.getText().add(timeString);
+            return true;
+        }
+        return super.dispatchPopulateAccessibilityEvent(event);
+    }
+
+    /**
+     * When scroll forward/backward events are received, jump the time to the higher/lower
+     * discrete, visible value on the circle.
+     */
+    @SuppressLint("NewApi")
+    @Override
+    public boolean performAccessibilityAction(int action, Bundle arguments) {
+        if (super.performAccessibilityAction(action, arguments)) {
+            return true;
+        }
+
+        int changeMultiplier = 0;
+        if (action == AccessibilityNodeInfo.ACTION_SCROLL_FORWARD) {
+            changeMultiplier = 1;
+        } else if (action == AccessibilityNodeInfo.ACTION_SCROLL_BACKWARD) {
+            changeMultiplier = -1;
+        }
+        if (changeMultiplier != 0) {
+            int value = 0;
+            int stepSize = 0;
+            if (mShowHours) {
+                stepSize = DEGREES_FOR_ONE_HOUR;
+                value = getCurrentHour() % 12;
+            } else {
+                stepSize = DEGREES_FOR_ONE_MINUTE;
+                value = getCurrentMinute();
+            }
+
+            int degrees = value * stepSize;
+            degrees = snapOnly30s(degrees, changeMultiplier);
+            value = degrees / stepSize;
+            int maxValue = 0;
+            int minValue = 0;
+            if (mShowHours) {
+                if (mIs24HourMode) {
+                    maxValue = 23;
+                } else {
+                    maxValue = 12;
+                    minValue = 1;
+                }
+            } else {
+                maxValue = 55;
+            }
+            if (value > maxValue) {
+                // If we scrolled forward past the highest number, wrap around to the lowest.
+                value = minValue;
+            } else if (value < minValue) {
+                // If we scrolled backward past the lowest number, wrap around to the highest.
+                value = maxValue;
+            }
+            if (mShowHours) {
+                setCurrentHour(value);
+                if (mListener != null) {
+                    mListener.onValueSelected(HOURS, value, false);
+                }
+            } else {
+                setCurrentMinute(value);
+                if (mListener != null) {
+                    mListener.onValueSelected(MINUTES, value, false);
+                }
+            }
+            return true;
+        }
+
+        return false;
+    }
+
+    public void setInputEnabled(boolean inputEnabled) {
+        mInputEnabled = inputEnabled;
+        invalidate();
+    }
+}
diff --git a/core/java/android/widget/RadioButton.java b/core/java/android/widget/RadioButton.java
index a0fef7d..afc4830 100644
--- a/core/java/android/widget/RadioButton.java
+++ b/core/java/android/widget/RadioButton.java
@@ -21,8 +21,6 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 
-import com.android.internal.R;
-
 
 /**
  * <p>
@@ -59,8 +57,12 @@
         this(context, attrs, com.android.internal.R.attr.radioButtonStyle);
     }
 
-    public RadioButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public RadioButton(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public RadioButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     /**
diff --git a/core/java/android/widget/RatingBar.java b/core/java/android/widget/RatingBar.java
index 4d3c56c..82b490e 100644
--- a/core/java/android/widget/RatingBar.java
+++ b/core/java/android/widget/RatingBar.java
@@ -82,11 +82,15 @@
     
     private OnRatingBarChangeListener mOnRatingBarChangeListener;
     
-    public RatingBar(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RatingBar,
-                defStyle, 0);
+    public RatingBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public RatingBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.RatingBar, defStyleAttr, defStyleRes);
         final int numStars = a.getInt(R.styleable.RatingBar_numStars, mNumStars);
         setIsIndicator(a.getBoolean(R.styleable.RatingBar_isIndicator, !mIsUserSeekable));
         final float rating = a.getFloat(R.styleable.RatingBar_rating, -1);
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index e03e83d..90e80d3 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -228,24 +228,27 @@
     private static final int DEFAULT_WIDTH = 0x00010000;
 
     public RelativeLayout(Context context) {
-        super(context);
-        queryCompatibilityModes(context);
+        this(context, null);
     }
 
     public RelativeLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        initFromAttributes(context, attrs);
+        this(context, attrs, 0);
+    }
+
+    public RelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public RelativeLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        initFromAttributes(context, attrs, defStyleAttr, defStyleRes);
         queryCompatibilityModes(context);
     }
 
-    public RelativeLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        initFromAttributes(context, attrs);
-        queryCompatibilityModes(context);
-    }
-
-    private void initFromAttributes(Context context, AttributeSet attrs) {
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RelativeLayout);
+    private void initFromAttributes(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.RelativeLayout, defStyleAttr, defStyleRes);
         mIgnoreGravity = a.getResourceId(R.styleable.RelativeLayout_ignoreGravity, View.NO_ID);
         mGravity = a.getInt(R.styleable.RelativeLayout_gravity, mGravity);
         a.recycle();
@@ -738,19 +741,30 @@
     private int getChildMeasureSpec(int childStart, int childEnd,
             int childSize, int startMargin, int endMargin, int startPadding,
             int endPadding, int mySize) {
-        if (mySize < 0 && !mAllowBrokenMeasureSpecs) {
-            if (childSize >= 0) {
-                return MeasureSpec.makeMeasureSpec(childSize, MeasureSpec.EXACTLY);
-            }
-            // Negative values in a mySize/myWidth/myWidth value in RelativeLayout measurement
-            // is code for, "we got an unspecified mode in the RelativeLayout's measurespec."
-            // Carry it forward.
-            return MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-        }
-
         int childSpecMode = 0;
         int childSpecSize = 0;
 
+        // Negative values in a mySize/myWidth/myWidth value in RelativeLayout
+        // measurement is code for, "we got an unspecified mode in the
+        // RelativeLayout's measure spec."
+        if (mySize < 0 && !mAllowBrokenMeasureSpecs) {
+            if (childStart >= 0 && childEnd >= 0) {
+                // Constraints fixed both edges, so child has an exact size.
+                childSpecSize = Math.max(0, childEnd - childStart);
+                childSpecMode = MeasureSpec.EXACTLY;
+            } else if (childSize >= 0) {
+                // The child specified an exact size.
+                childSpecSize = childSize;
+                childSpecMode = MeasureSpec.EXACTLY;
+            } else {
+                // Allow the child to be whatever size it wants.
+                childSpecSize = 0;
+                childSpecMode = MeasureSpec.UNSPECIFIED;
+            }
+
+            return MeasureSpec.makeMeasureSpec(childSpecSize, childSpecMode);
+        }
+
         // Figure out start and end bounds.
         int tempStart = childStart;
         int tempEnd = childEnd;
diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java
index 0d3df51..f7d20b53 100644
--- a/core/java/android/widget/RemoteViews.java
+++ b/core/java/android/widget/RemoteViews.java
@@ -1516,6 +1516,75 @@
     }
 
     /**
+     * Helper action to set a color filter on a compound drawable on a TextView. Supports relative
+     * (s/t/e/b) or cardinal (l/t/r/b) arrangement.
+     */
+    private class TextViewDrawableColorFilterAction extends Action {
+        public TextViewDrawableColorFilterAction(int viewId, boolean isRelative, int index,
+                int color, PorterDuff.Mode mode) {
+            this.viewId = viewId;
+            this.isRelative = isRelative;
+            this.index = index;
+            this.color = color;
+            this.mode = mode;
+        }
+
+        public TextViewDrawableColorFilterAction(Parcel parcel) {
+            viewId = parcel.readInt();
+            isRelative = (parcel.readInt() != 0);
+            index = parcel.readInt();
+            color = parcel.readInt();
+            mode = readPorterDuffMode(parcel);
+        }
+
+        private PorterDuff.Mode readPorterDuffMode(Parcel parcel) {
+            int mode = parcel.readInt();
+            if (mode >= 0 && mode < PorterDuff.Mode.values().length) {
+                return PorterDuff.Mode.values()[mode];
+            } else {
+                return PorterDuff.Mode.CLEAR;
+            }
+        }
+
+        public void writeToParcel(Parcel dest, int flags) {
+            dest.writeInt(TAG);
+            dest.writeInt(viewId);
+            dest.writeInt(isRelative ? 1 : 0);
+            dest.writeInt(index);
+            dest.writeInt(color);
+            dest.writeInt(mode.ordinal());
+        }
+
+        @Override
+        public void apply(View root, ViewGroup rootParent, OnClickHandler handler) {
+            final TextView target = (TextView) root.findViewById(viewId);
+            if (target == null) return;
+            Drawable[] drawables = isRelative
+                    ? target.getCompoundDrawablesRelative()
+                    : target.getCompoundDrawables();
+            if (index < 0 || index >= 4) {
+                throw new IllegalStateException("index must be in range [0, 3].");
+            }
+            Drawable d = drawables[index];
+            if (d != null) {
+                d.mutate();
+                d.setColorFilter(color, mode);
+            }
+        }
+
+        public String getActionName() {
+            return "TextViewDrawableColorFilterAction";
+        }
+
+        final boolean isRelative;
+        final int index;
+        final int color;
+        final PorterDuff.Mode mode;
+
+        public final static int TAG = 17;
+    }
+
+    /**
      * Simple class used to keep track of memory usage in a RemoteViews.
      *
      */
@@ -1686,6 +1755,9 @@
                     case SetRemoteViewsAdapterList.TAG:
                         mActions.add(new SetRemoteViewsAdapterList(parcel));
                         break;
+                    case TextViewDrawableColorFilterAction.TAG:
+                        mActions.add(new TextViewDrawableColorFilterAction(parcel));
+                        break;
                     default:
                         throw new ActionException("Tag " + tag + " not found");
                     }
@@ -1921,6 +1993,28 @@
     }
 
     /**
+     * Equivalent to applying a color filter on one of the drawables in
+     * {@link android.widget.TextView#getCompoundDrawablesRelative()}.
+     *
+     * @param viewId The id of the view whose text should change.
+     * @param index  The index of the drawable in the array of
+     *               {@link android.widget.TextView#getCompoundDrawablesRelative()} to set the color
+     *               filter on. Must be in [0, 3].
+     * @param color  The color of the color filter. See
+     *               {@link Drawable#setColorFilter(int, android.graphics.PorterDuff.Mode)}.
+     * @param mode   The mode of the color filter. See
+     *               {@link Drawable#setColorFilter(int, android.graphics.PorterDuff.Mode)}.
+     * @hide
+     */
+    public void setTextViewCompoundDrawablesRelativeColorFilter(int viewId,
+            int index, int color, PorterDuff.Mode mode) {
+        if (index < 0 || index >= 4) {
+            throw new IllegalArgumentException("index must be in range [0, 3].");
+        }
+        addAction(new TextViewDrawableColorFilterAction(viewId, true, index, color, mode));
+    }
+
+    /**
      * Equivalent to calling ImageView.setImageResource
      *
      * @param viewId The id of the view whose drawable should change
diff --git a/core/java/android/widget/RemoteViewsAdapter.java b/core/java/android/widget/RemoteViewsAdapter.java
index 3ff0cee..bbe6f9e 100644
--- a/core/java/android/widget/RemoteViewsAdapter.java
+++ b/core/java/android/widget/RemoteViewsAdapter.java
@@ -32,7 +32,6 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.Process;
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.util.Log;
@@ -45,7 +44,6 @@
 
 import com.android.internal.widget.IRemoteViewsAdapterConnection;
 import com.android.internal.widget.IRemoteViewsFactory;
-import com.android.internal.widget.LockPatternUtils;
 
 /**
  * An adapter to a RemoteViewsService which fetches and caches RemoteViews
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 6680393..3e46f68 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -138,6 +138,12 @@
     private int mActivePointerId = INVALID_POINTER;
 
     /**
+     * Used during scrolling to retrieve the new offset within the window.
+     */
+    private final int[] mScrollOffset = new int[2];
+    private final int[] mScrollConsumed = new int[2];
+
+    /**
      * The StrictMode "critical time span" objects to catch animation
      * stutters.  Non-null when a time-sensitive animation is
      * in-flight.  Must call finish() on them when done animating.
@@ -162,12 +168,16 @@
         this(context, attrs, com.android.internal.R.attr.scrollViewStyle);
     }
 
-    public ScrollView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         initScrollView();
 
-        TypedArray a =
-            context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.ScrollView, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ScrollView, defStyleAttr, defStyleRes);
 
         setFillViewport(a.getBoolean(R.styleable.ScrollView_fillViewport, false));
 
@@ -501,7 +511,7 @@
 
                 final int y = (int) ev.getY(pointerIndex);
                 final int yDiff = Math.abs(y - mLastMotionY);
-                if (yDiff > mTouchSlop) {
+                if (yDiff > mTouchSlop && (getNestedScrollAxes() & SCROLL_AXIS_VERTICAL) == 0) {
                     mIsBeingDragged = true;
                     mLastMotionY = y;
                     initVelocityTrackerIfNotExists();
@@ -543,6 +553,7 @@
                 if (mIsBeingDragged && mScrollStrictSpan == null) {
                     mScrollStrictSpan = StrictMode.enterCriticalSpan("ScrollView-scroll");
                 }
+                startNestedScroll(SCROLL_AXIS_VERTICAL);
                 break;
             }
 
@@ -555,6 +566,7 @@
                 if (mScroller.springBack(mScrollX, mScrollY, 0, 0, 0, getScrollRange())) {
                     postInvalidateOnAnimation();
                 }
+                stopNestedScroll();
                 break;
             case MotionEvent.ACTION_POINTER_UP:
                 onSecondaryPointerUp(ev);
@@ -602,6 +614,7 @@
                 // Remember where the motion event started
                 mLastMotionY = (int) ev.getY();
                 mActivePointerId = ev.getPointerId(0);
+                startNestedScroll(SCROLL_AXIS_VERTICAL);
                 break;
             }
             case MotionEvent.ACTION_MOVE:
@@ -613,6 +626,9 @@
 
                 final int y = (int) ev.getY(activePointerIndex);
                 int deltaY = mLastMotionY - y;
+                if (dispatchNestedPreScroll(0, deltaY, mScrollConsumed, mScrollOffset)) {
+                    deltaY -= mScrollConsumed[1] + mScrollOffset[1];
+                }
                 if (!mIsBeingDragged && Math.abs(deltaY) > mTouchSlop) {
                     final ViewParent parent = getParent();
                     if (parent != null) {
@@ -629,22 +645,25 @@
                     // Scroll to follow the motion event
                     mLastMotionY = y;
 
-                    final int oldX = mScrollX;
                     final int oldY = mScrollY;
                     final int range = getScrollRange();
                     final int overscrollMode = getOverScrollMode();
-                    final boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
+                    boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
                             (overscrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);
 
                     // Calling overScrollBy will call onOverScrolled, which
                     // calls onScrollChanged if applicable.
-                    if (overScrollBy(0, deltaY, 0, mScrollY,
-                            0, range, 0, mOverscrollDistance, true)) {
+                    if (overScrollBy(0, deltaY, 0, mScrollY, 0, range, 0, mOverscrollDistance, true)
+                            && !hasNestedScrollingParent()) {
                         // Break our velocity if we hit a scroll barrier.
                         mVelocityTracker.clear();
                     }
 
-                    if (canOverscroll) {
+                    final int scrolledDeltaY = mScrollY - oldY;
+                    final int unconsumedY = deltaY - scrolledDeltaY;
+                    if (dispatchNestedScroll(0, scrolledDeltaY, 0, unconsumedY, mScrollOffset)) {
+                        mLastMotionY -= mScrollOffset[1];
+                    } else if (canOverscroll) {
                         final int pulledToY = oldY + deltaY;
                         if (pulledToY < 0) {
                             mEdgeGlowTop.onPull((float) deltaY / getHeight());
@@ -670,15 +689,11 @@
                     velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
                     int initialVelocity = (int) velocityTracker.getYVelocity(mActivePointerId);
 
-                    if (getChildCount() > 0) {
-                        if ((Math.abs(initialVelocity) > mMinimumVelocity)) {
-                            fling(-initialVelocity);
-                        } else {
-                            if (mScroller.springBack(mScrollX, mScrollY, 0, 0, 0,
-                                    getScrollRange())) {
-                                postInvalidateOnAnimation();
-                            }
-                        }
+                    if ((Math.abs(initialVelocity) > mMinimumVelocity)) {
+                        flingWithNestedDispatch(-initialVelocity);
+                    } else if (mScroller.springBack(mScrollX, mScrollY, 0, 0, 0,
+                            getScrollRange())) {
+                        postInvalidateOnAnimation();
                     }
 
                     mActivePointerId = INVALID_POINTER;
@@ -1549,6 +1564,15 @@
         }
     }
 
+    private void flingWithNestedDispatch(int velocityY) {
+        final boolean canFling = (mScrollY > 0 || velocityY > 0) &&
+                (mScrollY < getScrollRange() || velocityY < 0);
+        dispatchNestedFling(0, velocityY, canFling);
+        if (canFling) {
+            fling(velocityY);
+        }
+    }
+
     private void endDrag() {
         mIsBeingDragged = false;
 
@@ -1599,6 +1623,47 @@
     }
 
     @Override
+    public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
+        return (nestedScrollAxes & SCROLL_AXIS_VERTICAL) != 0;
+    }
+
+    @Override
+    public void onNestedScrollAccepted(View child, View target, int axes) {
+        super.onNestedScrollAccepted(child, target, axes);
+        startNestedScroll(SCROLL_AXIS_VERTICAL);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    @Override
+    public void onStopNestedScroll(View target) {
+        super.onStopNestedScroll(target);
+    }
+
+    @Override
+    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,
+            int dxUnconsumed, int dyUnconsumed) {
+        final int oldScrollY = mScrollY;
+        scrollBy(0, dyUnconsumed);
+        final int myConsumed = mScrollY - oldScrollY;
+        final int myUnconsumed = dyUnconsumed - myConsumed;
+        dispatchNestedScroll(0, myConsumed, 0, myUnconsumed, null);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    @Override
+    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) {
+        if (!consumed) {
+            flingWithNestedDispatch((int) velocityY);
+            return true;
+        }
+        return false;
+    }
+
+    @Override
     public void draw(Canvas canvas) {
         super.draw(canvas);
         if (mEdgeGlowTop != null) {
diff --git a/core/java/android/widget/Scroller.java b/core/java/android/widget/Scroller.java
index 3bfd39d..1a0ce9c 100644
--- a/core/java/android/widget/Scroller.java
+++ b/core/java/android/widget/Scroller.java
@@ -61,6 +61,8 @@
  * }</pre>
  */
 public class Scroller  {
+    private final Interpolator mInterpolator;
+
     private int mMode;
 
     private int mStartX;
@@ -81,7 +83,6 @@
     private float mDeltaX;
     private float mDeltaY;
     private boolean mFinished;
-    private Interpolator mInterpolator;
     private boolean mFlywheel;
 
     private float mVelocity;
@@ -142,18 +143,8 @@
             SPLINE_TIME[i] = coef * ((1.0f - y) * P1 + y * P2) + y * y * y;
         }
         SPLINE_POSITION[NB_SAMPLES] = SPLINE_TIME[NB_SAMPLES] = 1.0f;
-
-        // This controls the viscous fluid effect (how much of it)
-        sViscousFluidScale = 8.0f;
-        // must be set to 1.0 (used in viscousFluid())
-        sViscousFluidNormalize = 1.0f;
-        sViscousFluidNormalize = 1.0f / viscousFluid(1.0f);
-
     }
 
-    private static float sViscousFluidScale;
-    private static float sViscousFluidNormalize;
-
     /**
      * Create a Scroller with the default duration and interpolator.
      */
@@ -178,7 +169,11 @@
      */
     public Scroller(Context context, Interpolator interpolator, boolean flywheel) {
         mFinished = true;
-        mInterpolator = interpolator;
+        if (interpolator == null) {
+            mInterpolator = new ViscousFluidInterpolator();
+        } else {
+            mInterpolator = interpolator;
+        }
         mPpi = context.getResources().getDisplayMetrics().density * 160.0f;
         mDeceleration = computeDeceleration(ViewConfiguration.getScrollFriction());
         mFlywheel = flywheel;
@@ -312,13 +307,7 @@
         if (timePassed < mDuration) {
             switch (mMode) {
             case SCROLL_MODE:
-                float x = timePassed * mDurationReciprocal;
-    
-                if (mInterpolator == null)
-                    x = viscousFluid(x); 
-                else
-                    x = mInterpolator.getInterpolation(x);
-    
+                final float x = mInterpolator.getInterpolation(timePassed * mDurationReciprocal);
                 mCurrX = mStartX + Math.round(x * mDeltaX);
                 mCurrY = mStartY + Math.round(x * mDeltaY);
                 break;
@@ -499,20 +488,6 @@
         return mFlingFriction * mPhysicalCoeff * Math.exp(DECELERATION_RATE / decelMinusOne * l);
     }
 
-    static float viscousFluid(float x)
-    {
-        x *= sViscousFluidScale;
-        if (x < 1.0f) {
-            x -= (1.0f - (float)Math.exp(-x));
-        } else {
-            float start = 0.36787944117f;   // 1/e == exp(-1)
-            x = 1.0f - (float)Math.exp(1.0f - x);
-            x = start + x * (1.0f - start);
-        }
-        x *= sViscousFluidNormalize;
-        return x;
-    }
-    
     /**
      * Stops the animation. Contrary to {@link #forceFinished(boolean)},
      * aborting the animating cause the scroller to move to the final x and y
@@ -583,4 +558,41 @@
         return !mFinished && Math.signum(xvel) == Math.signum(mFinalX - mStartX) &&
                 Math.signum(yvel) == Math.signum(mFinalY - mStartY);
     }
+
+    static class ViscousFluidInterpolator implements Interpolator {
+        /** Controls the viscous fluid effect (how much of it). */
+        private static final float VISCOUS_FLUID_SCALE = 8.0f;
+
+        private static final float VISCOUS_FLUID_NORMALIZE;
+        private static final float VISCOUS_FLUID_OFFSET;
+
+        static {
+
+            // must be set to 1.0 (used in viscousFluid())
+            VISCOUS_FLUID_NORMALIZE = 1.0f / viscousFluid(1.0f);
+            // account for very small floating-point error
+            VISCOUS_FLUID_OFFSET = 1.0f - VISCOUS_FLUID_NORMALIZE * viscousFluid(1.0f);
+        }
+
+        private static float viscousFluid(float x) {
+            x *= VISCOUS_FLUID_SCALE;
+            if (x < 1.0f) {
+                x -= (1.0f - (float)Math.exp(-x));
+            } else {
+                float start = 0.36787944117f;   // 1/e == exp(-1)
+                x = 1.0f - (float)Math.exp(1.0f - x);
+                x = start + x * (1.0f - start);
+            }
+            return x;
+        }
+
+        @Override
+        public float getInterpolation(float input) {
+            final float interpolated = VISCOUS_FLUID_NORMALIZE * viscousFluid(input);
+            if (input > 0) {
+                return input + VISCOUS_FLUID_OFFSET;
+            }
+            return input;
+        }
+    }
 }
diff --git a/core/java/android/widget/SearchView.java b/core/java/android/widget/SearchView.java
index 0281602..d8a6867 100644
--- a/core/java/android/widget/SearchView.java
+++ b/core/java/android/widget/SearchView.java
@@ -242,7 +242,15 @@
     }
 
     public SearchView(Context context, AttributeSet attrs) {
-        super(context, attrs);
+        this(context, attrs, 0);
+    }
+
+    public SearchView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public SearchView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         LayoutInflater inflater = (LayoutInflater) context
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
@@ -281,7 +289,8 @@
             }
         });
 
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SearchView, 0, 0);
+        TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.SearchView, defStyleAttr, defStyleRes);
         setIconifiedByDefault(a.getBoolean(R.styleable.SearchView_iconifiedByDefault, true));
         int maxWidth = a.getDimensionPixelSize(R.styleable.SearchView_maxWidth, -1);
         if (maxWidth != -1) {
@@ -304,7 +313,7 @@
 
         boolean focusable = true;
 
-        a = context.obtainStyledAttributes(attrs, R.styleable.View, 0, 0);
+        a = context.obtainStyledAttributes(attrs, R.styleable.View, defStyleAttr, defStyleRes);
         focusable = a.getBoolean(R.styleable.View_focusable, focusable);
         a.recycle();
         setFocusable(focusable);
@@ -1050,7 +1059,7 @@
 
         SpannableStringBuilder ssb = new SpannableStringBuilder("   "); // for the icon
         ssb.append(hintText);
-        Drawable searchIcon = getContext().getResources().getDrawable(getSearchIconId());
+        Drawable searchIcon = getContext().getDrawable(getSearchIconId());
         int textSize = (int) (mQueryTextView.getTextSize() * 1.25);
         searchIcon.setBounds(0, 0, textSize, textSize);
         ssb.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
@@ -1162,8 +1171,8 @@
                     || !mOnQueryChangeListener.onQueryTextSubmit(query.toString())) {
                 if (mSearchable != null) {
                     launchQuerySearch(KeyEvent.KEYCODE_UNKNOWN, null, query.toString());
-                    setImeVisibility(false);
                 }
+                setImeVisibility(false);
                 dismissSuggestions();
             }
         }
@@ -1661,8 +1670,14 @@
             mThreshold = getThreshold();
         }
 
-        public SearchAutoComplete(Context context, AttributeSet attrs, int defStyle) {
-            super(context, attrs, defStyle);
+        public SearchAutoComplete(Context context, AttributeSet attrs, int defStyleAttrs) {
+            super(context, attrs, defStyleAttrs);
+            mThreshold = getThreshold();
+        }
+
+        public SearchAutoComplete(
+                Context context, AttributeSet attrs, int defStyleAttrs, int defStyleRes) {
+            super(context, attrs, defStyleAttrs, defStyleRes);
             mThreshold = getThreshold();
         }
 
diff --git a/core/java/android/widget/SeekBar.java b/core/java/android/widget/SeekBar.java
index 2737f94..dc7c04c 100644
--- a/core/java/android/widget/SeekBar.java
+++ b/core/java/android/widget/SeekBar.java
@@ -79,8 +79,12 @@
         this(context, attrs, com.android.internal.R.attr.seekBarStyle);
     }
 
-    public SeekBar(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public SeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public SeekBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     @Override
diff --git a/core/java/android/widget/ShareActionProvider.java b/core/java/android/widget/ShareActionProvider.java
index fd6ca4c..cde8080 100644
--- a/core/java/android/widget/ShareActionProvider.java
+++ b/core/java/android/widget/ShareActionProvider.java
@@ -170,7 +170,7 @@
         // Lookup and set the expand action icon.
         TypedValue outTypedValue = new TypedValue();
         mContext.getTheme().resolveAttribute(R.attr.actionModeShareDrawable, outTypedValue, true);
-        Drawable drawable = mContext.getResources().getDrawable(outTypedValue.resourceId);
+        Drawable drawable = mContext.getDrawable(outTypedValue.resourceId);
         activityChooserView.setExpandActivityOverflowButtonDrawable(drawable);
         activityChooserView.setProvider(this);
 
diff --git a/core/java/android/widget/SlidingDrawer.java b/core/java/android/widget/SlidingDrawer.java
index 517246b..ec06c02 100644
--- a/core/java/android/widget/SlidingDrawer.java
+++ b/core/java/android/widget/SlidingDrawer.java
@@ -192,11 +192,32 @@
      *
      * @param context The application's environment.
      * @param attrs The attributes defined in XML.
-     * @param defStyle The style to apply to this widget.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
-    public SlidingDrawer(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SlidingDrawer, defStyle, 0);
+    public SlidingDrawer(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    /**
+     * Creates a new SlidingDrawer from a specified set of attributes defined in XML.
+     *
+     * @param context The application's environment.
+     * @param attrs The attributes defined in XML.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     */
+    public SlidingDrawer(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.SlidingDrawer, defStyleAttr, defStyleRes);
 
         int orientation = a.getInt(R.styleable.SlidingDrawer_orientation, ORIENTATION_VERTICAL);
         mVertical = orientation == ORIENTATION_VERTICAL;
diff --git a/core/java/android/widget/Space.java b/core/java/android/widget/Space.java
index bb53a77..c4eaeb7 100644
--- a/core/java/android/widget/Space.java
+++ b/core/java/android/widget/Space.java
@@ -20,7 +20,6 @@
 import android.graphics.Canvas;
 import android.util.AttributeSet;
 import android.view.View;
-import android.view.ViewGroup;
 
 /**
  * Space is a lightweight View subclass that may be used to create gaps between components
@@ -30,8 +29,8 @@
     /**
      * {@inheritDoc}
      */
-    public Space(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public Space(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         if (getVisibility() == VISIBLE) {
             setVisibility(INVISIBLE);
         }
@@ -40,6 +39,13 @@
     /**
      * {@inheritDoc}
      */
+    public Space(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
     public Space(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
index b204dfd..595f023 100644
--- a/core/java/android/widget/SpellChecker.java
+++ b/core/java/android/widget/SpellChecker.java
@@ -35,6 +35,7 @@
 import android.view.textservice.TextServicesManager;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
 import java.text.BreakIterator;
 import java.util.Locale;
@@ -105,9 +106,9 @@
         mTextView = textView;
 
         // Arbitrary: these arrays will automatically double their sizes on demand
-        final int size = ArrayUtils.idealObjectArraySize(1);
-        mIds = new int[size];
-        mSpellCheckSpans = new SpellCheckSpan[size];
+        final int size = 1;
+        mIds = ArrayUtils.newUnpaddedIntArray(size);
+        mSpellCheckSpans = new SpellCheckSpan[mIds.length];
 
         setLocale(mTextView.getSpellCheckerLocale());
 
@@ -184,17 +185,9 @@
             if (mIds[i] < 0) return i;
         }
 
-        if (mLength == mSpellCheckSpans.length) {
-            final int newSize = mLength * 2;
-            int[] newIds = new int[newSize];
-            SpellCheckSpan[] newSpellCheckSpans = new SpellCheckSpan[newSize];
-            System.arraycopy(mIds, 0, newIds, 0, mLength);
-            System.arraycopy(mSpellCheckSpans, 0, newSpellCheckSpans, 0, mLength);
-            mIds = newIds;
-            mSpellCheckSpans = newSpellCheckSpans;
-        }
-
-        mSpellCheckSpans[mLength] = new SpellCheckSpan();
+        mIds = GrowingArrayUtils.append(mIds, mLength, 0);
+        mSpellCheckSpans = GrowingArrayUtils.append(
+                mSpellCheckSpans, mLength, new SpellCheckSpan());
         mLength++;
         return mLength - 1;
     }
@@ -731,10 +724,14 @@
                 }
             }
 
-            if (scheduleOtherSpellCheck) {
+            if (scheduleOtherSpellCheck && wordStart <= end) {
                 // Update range span: start new spell check from last wordStart
                 setRangeSpan(editable, wordStart, end);
             } else {
+                if (DBG && scheduleOtherSpellCheck) {
+                    Log.w(TAG, "Trying to schedule spellcheck for invalid region, from "
+                            + wordStart + " to " + end);
+                }
                 removeRangeSpan(editable);
             }
 
diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java
index 5cbabef..9601d4a 100644
--- a/core/java/android/widget/Spinner.java
+++ b/core/java/android/widget/Spinner.java
@@ -130,18 +130,17 @@
 
     /**
      * Construct a new spinner with the given context's theme, the supplied attribute set,
-     * and default style.
+     * and default style attribute.
      *
      * @param context The Context the view is running in, through which it can
      *        access the current theme, resources, etc.
      * @param attrs The attributes of the XML tag that is inflating the view.
-     * @param defStyle The default style to apply to this view. If 0, no style
-     *        will be applied (beyond what is included in the theme). This may
-     *        either be an attribute resource, whose value will be retrieved
-     *        from the current theme, or an explicit style resource.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
-    public Spinner(Context context, AttributeSet attrs, int defStyle) {
-        this(context, attrs, defStyle, MODE_THEME);
+    public Spinner(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0, MODE_THEME);
     }
 
     /**
@@ -152,20 +151,44 @@
      * @param context The Context the view is running in, through which it can
      *        access the current theme, resources, etc.
      * @param attrs The attributes of the XML tag that is inflating the view.
-     * @param defStyle The default style to apply to this view. If 0, no style
-     *        will be applied (beyond what is included in the theme). This may
-     *        either be an attribute resource, whose value will be retrieved
-     *        from the current theme, or an explicit style resource.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      * @param mode Constant describing how the user will select choices from the spinner.
-     * 
+     *
      * @see #MODE_DIALOG
      * @see #MODE_DROPDOWN
      */
-    public Spinner(Context context, AttributeSet attrs, int defStyle, int mode) {
-        super(context, attrs, defStyle);
+    public Spinner(Context context, AttributeSet attrs, int defStyleAttr, int mode) {
+        this(context, attrs, defStyleAttr, 0, mode);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.Spinner, defStyle, 0);
+    /**
+     * Construct a new spinner with the given context's theme, the supplied attribute set,
+     * and default style. <code>mode</code> may be one of {@link #MODE_DIALOG} or
+     * {@link #MODE_DROPDOWN} and determines how the user will select choices from the spinner.
+     *
+     * @param context The Context the view is running in, through which it can
+     *        access the current theme, resources, etc.
+     * @param attrs The attributes of the XML tag that is inflating the view.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     * @param mode Constant describing how the user will select choices from the spinner.
+     *
+     * @see #MODE_DIALOG
+     * @see #MODE_DROPDOWN
+     */
+    public Spinner(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes, int mode) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.Spinner, defStyleAttr, defStyleRes);
 
         if (mode == MODE_THEME) {
             mode = a.getInt(com.android.internal.R.styleable.Spinner_spinnerMode, MODE_DIALOG);
@@ -178,7 +201,7 @@
         }
 
         case MODE_DROPDOWN: {
-            final DropdownPopup popup = new DropdownPopup(context, attrs, defStyle);
+            final DropdownPopup popup = new DropdownPopup(context, attrs, defStyleAttr, defStyleRes);
 
             mDropDownWidth = a.getLayoutDimension(
                     com.android.internal.R.styleable.Spinner_dropDownWidth,
@@ -258,7 +281,7 @@
      * @attr ref android.R.styleable#Spinner_popupBackground
      */
     public void setPopupBackgroundResource(int resId) {
-        setPopupBackgroundDrawable(getContext().getResources().getDrawable(resId));
+        setPopupBackgroundDrawable(getContext().getDrawable(resId));
     }
 
     /**
@@ -1033,8 +1056,9 @@
         private CharSequence mHintText;
         private ListAdapter mAdapter;
 
-        public DropdownPopup(Context context, AttributeSet attrs, int defStyleRes) {
-            super(context, attrs, 0, defStyleRes);
+        public DropdownPopup(
+                Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+            super(context, attrs, defStyleAttr, defStyleRes);
 
             setAnchorView(Spinner.this);
             setModal(true);
diff --git a/core/java/android/widget/StackView.java b/core/java/android/widget/StackView.java
index 6853660..d2e718c 100644
--- a/core/java/android/widget/StackView.java
+++ b/core/java/android/widget/StackView.java
@@ -168,9 +168,16 @@
      * {@inheritDoc}
      */
     public StackView(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.StackView, defStyleAttr, 0);
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public StackView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.StackView, defStyleAttr, defStyleRes);
 
         mResOutColor = a.getColor(
                 com.android.internal.R.styleable.StackView_resOutColor, 0);
diff --git a/core/java/android/widget/SuggestionsAdapter.java b/core/java/android/widget/SuggestionsAdapter.java
index c44d431..02033012 100644
--- a/core/java/android/widget/SuggestionsAdapter.java
+++ b/core/java/android/widget/SuggestionsAdapter.java
@@ -529,7 +529,7 @@
                 return drawable;
             }
             // Not cached, find it by resource ID
-            drawable = mProviderContext.getResources().getDrawable(resourceId);
+            drawable = mProviderContext.getDrawable(resourceId);
             // Stick it in the cache, using the URI as key
             storeInIconCache(drawableUri, drawable);
             return drawable;
@@ -563,7 +563,7 @@
                 OpenResourceIdResult r =
                     mProviderContext.getContentResolver().getResourceId(uri);
                 try {
-                    return r.r.getDrawable(r.id);
+                    return r.r.getDrawable(r.id, mContext.getTheme());
                 } catch (Resources.NotFoundException ex) {
                     throw new FileNotFoundException("Resource does not exist: " + uri);
                 }
@@ -574,7 +574,7 @@
                     throw new FileNotFoundException("Failed to open " + uri);
                 }
                 try {
-                    return Drawable.createFromStream(stream, null);
+                    return Drawable.createFromStreamThemed(stream, null, mContext.getTheme());
                 } finally {
                     try {
                         stream.close();
diff --git a/core/java/android/widget/Switch.java b/core/java/android/widget/Switch.java
index e754c17..08af4de 100644
--- a/core/java/android/widget/Switch.java
+++ b/core/java/android/widget/Switch.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.animation.ObjectAnimator;
 import android.content.Context;
 import android.content.res.ColorStateList;
 import android.content.res.Resources;
@@ -32,6 +33,8 @@
 import android.text.method.AllCapsTransformationMethod;
 import android.text.method.TransformationMethod2;
 import android.util.AttributeSet;
+import android.util.FloatProperty;
+import android.util.MathUtils;
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
@@ -66,6 +69,8 @@
  * @attr ref android.R.styleable#Switch_track
  */
 public class Switch extends CompoundButton {
+    private static final int THUMB_ANIMATION_DURATION = 250;
+
     private static final int TOUCH_MODE_IDLE = 0;
     private static final int TOUCH_MODE_DOWN = 1;
     private static final int TOUCH_MODE_DRAGGING = 2;
@@ -105,6 +110,7 @@
     private Layout mOnLayout;
     private Layout mOffLayout;
     private TransformationMethod2 mSwitchTransformationMethod;
+    private ObjectAnimator mPositionAnimator;
 
     @SuppressWarnings("hiding")
     private final Rect mTempRect = new Rect();
@@ -139,19 +145,41 @@
      *
      * @param context The Context that will determine this widget's theming.
      * @param attrs Specification of attributes that should deviate from the default styling.
-     * @param defStyle An attribute ID within the active theme containing a reference to the
-     *                 default style for this widget. e.g. android.R.attr.switchStyle.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
-    public Switch(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public Switch(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+
+    /**
+     * Construct a new Switch with a default style determined by the given theme
+     * attribute or style resource, overriding specific style attributes as
+     * requested.
+     *
+     * @param context The Context that will determine this widget's theming.
+     * @param attrs Specification of attributes that should deviate from the
+     *        default styling.
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
+     * @param defStyleRes A resource identifier of a style resource that
+     *        supplies default values for the view, used only if
+     *        defStyleAttr is 0 or can not be found in the theme. Can be 0
+     *        to not look for defaults.
+     */
+    public Switch(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
         Resources res = getResources();
         mTextPaint.density = res.getDisplayMetrics().density;
         mTextPaint.setCompatibilityScaling(res.getCompatibilityInfo().applicationScale);
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.Switch, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.Switch, defStyleAttr, defStyleRes);
 
         mThumbDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_thumb);
         mTrackDrawable = a.getDrawable(com.android.internal.R.styleable.Switch_track);
@@ -389,7 +417,7 @@
      * @attr ref android.R.styleable#Switch_track
      */
     public void setTrackResource(int resId) {
-        setTrackDrawable(getContext().getResources().getDrawable(resId));
+        setTrackDrawable(getContext().getDrawable(resId));
     }
 
     /**
@@ -425,7 +453,7 @@
      * @attr ref android.R.styleable#Switch_thumb
      */
     public void setThumbResource(int resId) {
-        setThumbDrawable(getContext().getResources().getDrawable(resId));
+        setThumbDrawable(getContext().getDrawable(resId));
     }
 
     /**
@@ -483,15 +511,18 @@
         if (mOnLayout == null) {
             mOnLayout = makeLayout(mTextOn);
         }
+
         if (mOffLayout == null) {
             mOffLayout = makeLayout(mTextOff);
         }
 
         mTrackDrawable.getPadding(mTempRect);
+
         final int maxTextWidth = Math.max(mOnLayout.getWidth(), mOffLayout.getWidth());
         final int switchWidth = Math.max(mSwitchMinWidth,
                 maxTextWidth * 2 + mThumbTextPadding * 4 + mTempRect.left + mTempRect.right);
-        final int switchHeight = mTrackDrawable.getIntrinsicHeight();
+        final int switchHeight = Math.max(mTrackDrawable.getIntrinsicHeight(),
+                mThumbDrawable.getIntrinsicHeight());
 
         mThumbWidth = maxTextWidth + mThumbTextPadding * 2;
 
@@ -528,9 +559,12 @@
      * @return true if (x, y) is within the target area of the switch thumb
      */
     private boolean hitThumb(float x, float y) {
+        // Relies on mTempRect, MUST be called first!
+        final int thumbOffset = getThumbOffset();
+
         mThumbDrawable.getPadding(mTempRect);
         final int thumbTop = mSwitchTop - mTouchSlop;
-        final int thumbLeft = mSwitchLeft + (int) (mThumbPosition + 0.5f) - mTouchSlop;
+        final int thumbLeft = mSwitchLeft + thumbOffset - mTouchSlop;
         final int thumbRight = thumbLeft + mThumbWidth +
                 mTempRect.left + mTempRect.right + mTouchSlop;
         final int thumbBottom = mSwitchBottom + mTouchSlop;
@@ -575,13 +609,23 @@
 
                     case TOUCH_MODE_DRAGGING: {
                         final float x = ev.getX();
-                        final float dx = x - mTouchX;
-                        float newPos = Math.max(0,
-                                Math.min(mThumbPosition + dx, getThumbScrollRange()));
+                        final int thumbScrollRange = getThumbScrollRange();
+                        final float thumbScrollOffset = x - mTouchX;
+                        float dPos;
+                        if (thumbScrollRange != 0) {
+                            dPos = thumbScrollOffset / thumbScrollRange;
+                        } else {
+                            // If the thumb scroll range is empty, just use the
+                            // movement direction to snap on or off.
+                            dPos = thumbScrollOffset > 0 ? 1 : -1;
+                        }
+                        if (isLayoutRtl()) {
+                            dPos = -dPos;
+                        }
+                        final float newPos = MathUtils.constrain(mThumbPosition + dPos, 0, 1);
                         if (newPos != mThumbPosition) {
-                            mThumbPosition = newPos;
                             mTouchX = x;
-                            invalidate();
+                            setThumbPosition(newPos);
                         }
                         return true;
                     }
@@ -618,62 +662,77 @@
      */
     private void stopDrag(MotionEvent ev) {
         mTouchMode = TOUCH_MODE_IDLE;
-        // Up and not canceled, also checks the switch has not been disabled during the drag
-        boolean commitChange = ev.getAction() == MotionEvent.ACTION_UP && isEnabled();
 
-        cancelSuperTouch(ev);
-
+        // Commit the change if the event is up and not canceled and the switch
+        // has not been disabled during the drag.
+        final boolean commitChange = ev.getAction() == MotionEvent.ACTION_UP && isEnabled();
+        final boolean newState;
         if (commitChange) {
-            boolean newState;
             mVelocityTracker.computeCurrentVelocity(1000);
-            float xvel = mVelocityTracker.getXVelocity();
+            final float xvel = mVelocityTracker.getXVelocity();
             if (Math.abs(xvel) > mMinFlingVelocity) {
                 newState = isLayoutRtl() ? (xvel < 0) : (xvel > 0);
             } else {
                 newState = getTargetCheckedState();
             }
-            animateThumbToCheckedState(newState);
         } else {
-            animateThumbToCheckedState(isChecked());
+            newState = isChecked();
         }
+
+        setChecked(newState);
+        cancelSuperTouch(ev);
     }
 
     private void animateThumbToCheckedState(boolean newCheckedState) {
-        // TODO animate!
-        //float targetPos = newCheckedState ? 0 : getThumbScrollRange();
-        //mThumbPosition = targetPos;
-        setChecked(newCheckedState);
+        final float targetPosition = newCheckedState ? 1 : 0;
+        mPositionAnimator = ObjectAnimator.ofFloat(this, THUMB_POS, targetPosition);
+        mPositionAnimator.setDuration(THUMB_ANIMATION_DURATION);
+        mPositionAnimator.setAutoCancel(true);
+        mPositionAnimator.start();
+    }
+
+    private void cancelPositionAnimator() {
+        if (mPositionAnimator != null) {
+            mPositionAnimator.cancel();
+        }
     }
 
     private boolean getTargetCheckedState() {
-        if (isLayoutRtl()) {
-            return mThumbPosition <= getThumbScrollRange() / 2;
-        } else {
-            return mThumbPosition >= getThumbScrollRange() / 2;
-        }
+        return mThumbPosition > 0.5f;
     }
 
-    private void setThumbPosition(boolean checked) {
-        if (isLayoutRtl()) {
-            mThumbPosition = checked ? 0 : getThumbScrollRange();
-        } else {
-            mThumbPosition = checked ? getThumbScrollRange() : 0;
-        }
+    /**
+     * Sets the thumb position as a decimal value between 0 (off) and 1 (on).
+     *
+     * @param position new position between [0,1]
+     */
+    private void setThumbPosition(float position) {
+        mThumbPosition = position;
+        invalidate();
+    }
+
+    @Override
+    public void toggle() {
+        setChecked(!isChecked());
     }
 
     @Override
     public void setChecked(boolean checked) {
         super.setChecked(checked);
-        setThumbPosition(isChecked());
-        invalidate();
+
+        if (isAttachedToWindow() && isLaidOut()) {
+            animateThumbToCheckedState(checked);
+        } else {
+            // Immediately move the thumb to the new position.
+            cancelPositionAnimator();
+            setThumbPosition(checked ? 1 : 0);
+        }
     }
 
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
         super.onLayout(changed, left, top, right, bottom);
 
-        setThumbPosition(isChecked());
-
         int switchRight;
         int switchLeft;
 
@@ -714,49 +773,59 @@
 
     @Override
     protected void onDraw(Canvas canvas) {
-        super.onDraw(canvas);
+        final Rect tempRect = mTempRect;
+        final Drawable trackDrawable = mTrackDrawable;
+        final Drawable thumbDrawable = mThumbDrawable;
 
         // Draw the switch
-        int switchLeft = mSwitchLeft;
-        int switchTop = mSwitchTop;
-        int switchRight = mSwitchRight;
-        int switchBottom = mSwitchBottom;
+        final int switchLeft = mSwitchLeft;
+        final int switchTop = mSwitchTop;
+        final int switchRight = mSwitchRight;
+        final int switchBottom = mSwitchBottom;
+        trackDrawable.setBounds(switchLeft, switchTop, switchRight, switchBottom);
+        trackDrawable.getPadding(tempRect);
 
-        mTrackDrawable.setBounds(switchLeft, switchTop, switchRight, switchBottom);
-        mTrackDrawable.draw(canvas);
+        final int switchInnerLeft = switchLeft + tempRect.left;
+        final int switchInnerTop = switchTop + tempRect.top;
+        final int switchInnerRight = switchRight - tempRect.right;
+        final int switchInnerBottom = switchBottom - tempRect.bottom;
 
-        canvas.save();
+        // Relies on mTempRect, MUST be called first!
+        final int thumbPos = getThumbOffset();
 
-        mTrackDrawable.getPadding(mTempRect);
-        int switchInnerLeft = switchLeft + mTempRect.left;
-        int switchInnerTop = switchTop + mTempRect.top;
-        int switchInnerRight = switchRight - mTempRect.right;
-        int switchInnerBottom = switchBottom - mTempRect.bottom;
-        canvas.clipRect(switchInnerLeft, switchTop, switchInnerRight, switchBottom);
+        thumbDrawable.getPadding(tempRect);
+        int thumbLeft = switchInnerLeft - tempRect.left + thumbPos;
+        int thumbRight = switchInnerLeft + thumbPos + mThumbWidth + tempRect.right;
+        thumbDrawable.setBounds(thumbLeft, switchTop, thumbRight, switchBottom);
 
-        mThumbDrawable.getPadding(mTempRect);
-        final int thumbPos = (int) (mThumbPosition + 0.5f);
-        int thumbLeft = switchInnerLeft - mTempRect.left + thumbPos;
-        int thumbRight = switchInnerLeft + thumbPos + mThumbWidth + mTempRect.right;
-
-        mThumbDrawable.setBounds(thumbLeft, switchTop, thumbRight, switchBottom);
-        mThumbDrawable.draw(canvas);
-
-        // mTextColors should not be null, but just in case
-        if (mTextColors != null) {
-            mTextPaint.setColor(mTextColors.getColorForState(getDrawableState(),
-                    mTextColors.getDefaultColor()));
+        final Drawable background = getBackground();
+        if (background != null && background.supportsHotspots()) {
+            background.setHotspotBounds(thumbLeft, switchTop, thumbRight, switchBottom);
         }
-        mTextPaint.drawableState = getDrawableState();
 
-        Layout switchText = getTargetCheckedState() ? mOnLayout : mOffLayout;
+        super.onDraw(canvas);
+
+        trackDrawable.draw(canvas);
+
+        final int saveCount = canvas.save();
+        canvas.clipRect(switchInnerLeft, switchTop, switchInnerRight, switchBottom);
+        thumbDrawable.draw(canvas);
+
+        final int drawableState[] = getDrawableState();
+        if (mTextColors != null) {
+            mTextPaint.setColor(mTextColors.getColorForState(drawableState, 0));
+        }
+        mTextPaint.drawableState = drawableState;
+
+        final Layout switchText = getTargetCheckedState() ? mOnLayout : mOffLayout;
         if (switchText != null) {
-            canvas.translate((thumbLeft + thumbRight) / 2 - switchText.getWidth() / 2,
-                    (switchInnerTop + switchInnerBottom) / 2 - switchText.getHeight() / 2);
+            final int left = (thumbLeft + thumbRight) / 2 - switchText.getWidth() / 2;
+            final int top = (switchInnerTop + switchInnerBottom) / 2 - switchText.getHeight() / 2;
+            canvas.translate(left, top);
             switchText.draw(canvas);
         }
 
-        canvas.restore();
+        canvas.restoreToCount(saveCount);
     }
 
     @Override
@@ -783,6 +852,22 @@
         return padding;
     }
 
+    /**
+     * Translates thumb position to offset according to current RTL setting and
+     * thumb scroll range.
+     *
+     * @return thumb offset
+     */
+    private int getThumbOffset() {
+        final float thumbPosition;
+        if (isLayoutRtl()) {
+            thumbPosition = 1 - mThumbPosition;
+        } else {
+            thumbPosition = mThumbPosition;
+        }
+        return (int) (thumbPosition * getThumbScrollRange() + 0.5f);
+    }
+
     private int getThumbScrollRange() {
         if (mTrackDrawable == null) {
             return 0;
@@ -848,4 +933,16 @@
             }
         }
     }
+
+    private static final FloatProperty<Switch> THUMB_POS = new FloatProperty<Switch>("thumbPos") {
+        @Override
+        public Float get(Switch object) {
+            return object.mThumbPosition;
+        }
+
+        @Override
+        public void setValue(Switch object, float value) {
+            object.setThumbPosition(value);
+        }
+    };
 }
diff --git a/core/java/android/widget/TabHost.java b/core/java/android/widget/TabHost.java
index 238dc55..89df51a 100644
--- a/core/java/android/widget/TabHost.java
+++ b/core/java/android/widget/TabHost.java
@@ -77,11 +77,18 @@
     }
 
     public TabHost(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.tabWidgetStyle);
+    }
+
+    public TabHost(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public TabHost(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         super(context, attrs);
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.TabWidget,
-                com.android.internal.R.attr.tabWidgetStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.TabWidget, defStyleAttr, defStyleRes);
 
         mTabLayoutId = a.getResourceId(R.styleable.TabWidget_tabLayout, 0);
         a.recycle();
diff --git a/core/java/android/widget/TabWidget.java b/core/java/android/widget/TabWidget.java
index 6bced1c..47a5449 100644
--- a/core/java/android/widget/TabWidget.java
+++ b/core/java/android/widget/TabWidget.java
@@ -74,11 +74,15 @@
         this(context, attrs, com.android.internal.R.attr.tabWidgetStyle);
     }
 
-    public TabWidget(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public TabWidget(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public TabWidget(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         final TypedArray a = context.obtainStyledAttributes(
-                attrs, com.android.internal.R.styleable.TabWidget, defStyle, 0);
+                attrs, com.android.internal.R.styleable.TabWidget, defStyleAttr, defStyleRes);
 
         setStripEnabled(a.getBoolean(R.styleable.TabWidget_tabStripEnabled, true));
         setLeftStripDrawable(a.getDrawable(R.styleable.TabWidget_tabStripLeft));
@@ -116,28 +120,27 @@
         setChildrenDrawingOrderEnabled(true);
 
         final Context context = mContext;
-        final Resources resources = context.getResources();
 
         // Tests the target Sdk version, as set in the Manifest. Could not be set using styles.xml
         // in a values-v? directory which targets the current platform Sdk version instead.
         if (context.getApplicationInfo().targetSdkVersion <= Build.VERSION_CODES.DONUT) {
             // Donut apps get old color scheme
             if (mLeftStrip == null) {
-                mLeftStrip = resources.getDrawable(
+                mLeftStrip = context.getDrawable(
                         com.android.internal.R.drawable.tab_bottom_left_v4);
             }
             if (mRightStrip == null) {
-                mRightStrip = resources.getDrawable(
+                mRightStrip = context.getDrawable(
                         com.android.internal.R.drawable.tab_bottom_right_v4);
             }
         } else {
             // Use modern color scheme for Eclair and beyond
             if (mLeftStrip == null) {
-                mLeftStrip = resources.getDrawable(
+                mLeftStrip = context.getDrawable(
                         com.android.internal.R.drawable.tab_bottom_left);
             }
             if (mRightStrip == null) {
-                mRightStrip = resources.getDrawable(
+                mRightStrip = context.getDrawable(
                         com.android.internal.R.drawable.tab_bottom_right);
             }
         }
@@ -242,7 +245,7 @@
      * divider.
      */
     public void setDividerDrawable(int resId) {
-        setDividerDrawable(getResources().getDrawable(resId));
+        setDividerDrawable(mContext.getDrawable(resId));
     }
     
     /**
@@ -263,7 +266,7 @@
      * left strip drawable
      */
     public void setLeftStripDrawable(int resId) {
-        setLeftStripDrawable(getResources().getDrawable(resId));
+        setLeftStripDrawable(mContext.getDrawable(resId));
     }
 
     /**
@@ -284,7 +287,7 @@
      * right strip drawable
      */
     public void setRightStripDrawable(int resId) {
-        setRightStripDrawable(getResources().getDrawable(resId));
+        setRightStripDrawable(mContext.getDrawable(resId));
     }
 
     /**
diff --git a/core/java/android/widget/TextClock.java b/core/java/android/widget/TextClock.java
index b3b95d9..4c5c71d 100644
--- a/core/java/android/widget/TextClock.java
+++ b/core/java/android/widget/TextClock.java
@@ -198,15 +198,19 @@
      * @param context The Context the view is running in, through which it can
      *        access the current theme, resources, etc.
      * @param attrs The attributes of the XML tag that is inflating the view
-     * @param defStyle The default style to apply to this view. If 0, no style
-     *        will be applied (beyond what is included in the theme). This may
-     *        either be an attribute resource, whose value will be retrieved
-     *        from the current theme, or an explicit style resource
+     * @param defStyleAttr An attribute in the current theme that contains a
+     *        reference to a style resource that supplies default values for
+     *        the view. Can be 0 to not look for defaults.
      */
-    public TextClock(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public TextClock(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TextClock, defStyle, 0);
+    public TextClock(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.TextClock, defStyleAttr, defStyleRes);
         try {
             mFormat12 = a.getText(R.styleable.TextClock_format12Hour);
             mFormat24 = a.getText(R.styleable.TextClock_format24Hour);
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 8460375..b91111d 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -136,7 +136,6 @@
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.Locale;
-import java.util.concurrent.locks.ReentrantLock;
 
 import static android.os.Build.VERSION_CODES.JELLY_BEAN_MR1;
 
@@ -618,9 +617,14 @@
         this(context, attrs, com.android.internal.R.attr.textViewStyle);
     }
 
+    public TextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     @SuppressWarnings("deprecation")
-    public TextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public TextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
         mText = "";
 
         final Resources res = getResources();
@@ -648,6 +652,7 @@
         boolean allCaps = false;
         int shadowcolor = 0;
         float dx = 0, dy = 0, r = 0;
+        boolean elegant = false;
 
         final Resources.Theme theme = context.getTheme();
 
@@ -657,8 +662,8 @@
          * to be able to parse the appearance first and then let specific tags
          * for this View override it.
          */
-        TypedArray a = theme.obtainStyledAttributes(
-                    attrs, com.android.internal.R.styleable.TextViewAppearance, defStyle, 0);
+        TypedArray a = theme.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.TextViewAppearance, defStyleAttr, defStyleRes);
         TypedArray appearance = null;
         int ap = a.getResourceId(
                 com.android.internal.R.styleable.TextViewAppearance_textAppearance, -1);
@@ -724,6 +729,10 @@
                 case com.android.internal.R.styleable.TextAppearance_shadowRadius:
                     r = appearance.getFloat(attr, 0);
                     break;
+
+                case com.android.internal.R.styleable.TextAppearance_elegantTextHeight:
+                    elegant = appearance.getBoolean(attr, false);
+                    break;
                 }
             }
 
@@ -751,7 +760,7 @@
         int inputType = EditorInfo.TYPE_NULL;
 
         a = theme.obtainStyledAttributes(
-                    attrs, com.android.internal.R.styleable.TextView, defStyle, 0);
+                    attrs, com.android.internal.R.styleable.TextView, defStyleAttr, defStyleRes);
 
         int n = a.getIndexCount();
         for (int i = 0; i < n; i++) {
@@ -1061,6 +1070,10 @@
             case com.android.internal.R.styleable.TextView_textAllCaps:
                 allCaps = a.getBoolean(attr, false);
                 break;
+
+            case com.android.internal.R.styleable.TextView_elegantTextHeight:
+                elegant = a.getBoolean(attr, false);
+                break;
             }
         }
         a.recycle();
@@ -1241,6 +1254,7 @@
             setHighlightColor(textColorHighlight);
         }
         setRawTextSize(textSize);
+        setElegantTextHeight(elegant);
 
         if (allCaps) {
             setTransformationMethod(new AllCapsTransformationMethod(getContext()));
@@ -1275,9 +1289,8 @@
          * However, TextViews that have input or movement methods *are*
          * focusable by default.
          */
-        a = context.obtainStyledAttributes(attrs,
-                                           com.android.internal.R.styleable.View,
-                                           defStyle, 0);
+        a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.View, defStyleAttr, defStyleRes);
 
         boolean focusable = mMovement != null || getKeyListener() != null;
         boolean clickable = focusable;
@@ -2070,11 +2083,11 @@
      */
     @android.view.RemotableViewMethod
     public void setCompoundDrawablesWithIntrinsicBounds(int left, int top, int right, int bottom) {
-        final Resources resources = getContext().getResources();
-        setCompoundDrawablesWithIntrinsicBounds(left != 0 ? resources.getDrawable(left) : null,
-                top != 0 ? resources.getDrawable(top) : null,
-                right != 0 ? resources.getDrawable(right) : null,
-                bottom != 0 ? resources.getDrawable(bottom) : null);
+        final Context context = getContext();
+        setCompoundDrawablesWithIntrinsicBounds(left != 0 ? context.getDrawable(left) : null,
+                top != 0 ? context.getDrawable(top) : null,
+                right != 0 ? context.getDrawable(right) : null,
+                bottom != 0 ? context.getDrawable(bottom) : null);
     }
 
     /**
@@ -2244,12 +2257,12 @@
     @android.view.RemotableViewMethod
     public void setCompoundDrawablesRelativeWithIntrinsicBounds(int start, int top, int end,
             int bottom) {
-        final Resources resources = getContext().getResources();
+        final Context context = getContext();
         setCompoundDrawablesRelativeWithIntrinsicBounds(
-                start != 0 ? resources.getDrawable(start) : null,
-                top != 0 ? resources.getDrawable(top) : null,
-                end != 0 ? resources.getDrawable(end) : null,
-                bottom != 0 ? resources.getDrawable(bottom) : null);
+                start != 0 ? context.getDrawable(start) : null,
+                top != 0 ? context.getDrawable(top) : null,
+                end != 0 ? context.getDrawable(end) : null,
+                bottom != 0 ? context.getDrawable(bottom) : null);
     }
 
     /**
@@ -2465,6 +2478,11 @@
             setTransformationMethod(new AllCapsTransformationMethod(getContext()));
         }
 
+        if (appearance.hasValue(com.android.internal.R.styleable.TextAppearance_elegantTextHeight)) {
+            setElegantTextHeight(appearance.getBoolean(
+                com.android.internal.R.styleable.TextAppearance_elegantTextHeight, false));
+        }
+
         appearance.recycle();
     }
 
@@ -2612,6 +2630,17 @@
     }
 
     /**
+     * Set the TextView's elegant height metrics flag. This setting selects font
+     * variants that have not been compacted to fit Latin-based vertical
+     * metrics, and also increases top and bottom bounds to provide more space.
+     *
+     * @param elegant set the paint's elegant metrics flag.
+     */
+    public void setElegantTextHeight(boolean elegant) {
+        mTextPaint.setElegantTextHeight(elegant);
+    }
+
+    /**
      * Sets the text color for all the states (normal, selected,
      * focused) to be this color.
      *
@@ -4382,8 +4411,8 @@
         if (error == null) {
             setError(null, null);
         } else {
-            Drawable dr = getContext().getResources().
-                getDrawable(com.android.internal.R.drawable.indicator_input_error);
+            Drawable dr = getContext().getDrawable(
+                    com.android.internal.R.drawable.indicator_input_error);
 
             dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight());
             setError(error, dr);
@@ -4726,10 +4755,9 @@
         if (mEditor != null) mEditor.onAttachedToWindow();
     }
 
+    /** @hide */
     @Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-
+    protected void onDetachedFromWindowInternal() {
         if (mPreDrawRegistered) {
             getViewTreeObserver().removeOnPreDrawListener(this);
             mPreDrawRegistered = false;
@@ -4738,6 +4766,8 @@
         resetResolvedDrawables();
 
         if (mEditor != null) mEditor.onDetachedFromWindow();
+
+        super.onDetachedFromWindowInternal();
     }
 
     @Override
@@ -4811,6 +4841,8 @@
 
     @Override
     public void invalidateDrawable(Drawable drawable) {
+        boolean handled = false;
+
         if (verifyDrawable(drawable)) {
             final Rect dirty = drawable.getBounds();
             int scrollX = mScrollX;
@@ -4828,6 +4860,7 @@
 
                     scrollX += mPaddingLeft;
                     scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightLeft) / 2;
+                    handled = true;
                 } else if (drawable == drawables.mDrawableRight) {
                     final int compoundPaddingTop = getCompoundPaddingTop();
                     final int compoundPaddingBottom = getCompoundPaddingBottom();
@@ -4835,6 +4868,7 @@
 
                     scrollX += (mRight - mLeft - mPaddingRight - drawables.mDrawableSizeRight);
                     scrollY += compoundPaddingTop + (vspace - drawables.mDrawableHeightRight) / 2;
+                    handled = true;
                 } else if (drawable == drawables.mDrawableTop) {
                     final int compoundPaddingLeft = getCompoundPaddingLeft();
                     final int compoundPaddingRight = getCompoundPaddingRight();
@@ -4842,6 +4876,7 @@
 
                     scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthTop) / 2;
                     scrollY += mPaddingTop;
+                    handled = true;
                 } else if (drawable == drawables.mDrawableBottom) {
                     final int compoundPaddingLeft = getCompoundPaddingLeft();
                     final int compoundPaddingRight = getCompoundPaddingRight();
@@ -4849,11 +4884,18 @@
 
                     scrollX += compoundPaddingLeft + (hspace - drawables.mDrawableWidthBottom) / 2;
                     scrollY += (mBottom - mTop - mPaddingBottom - drawables.mDrawableSizeBottom);
+                    handled = true;
                 }
             }
 
-            invalidate(dirty.left + scrollX, dirty.top + scrollY,
-                    dirty.right + scrollX, dirty.bottom + scrollY);
+            if (handled) {
+                invalidate(dirty.left + scrollX, dirty.top + scrollY,
+                        dirty.right + scrollX, dirty.bottom + scrollY);
+            }
+        }
+
+        if (!handled) {
+            super.invalidateDrawable(drawable);
         }
     }
 
@@ -5794,6 +5836,7 @@
                 int end = text.partialEndOffset;
                 if (end > N) end = N;
                 removeParcelableSpans(content, start, end);
+                // If start > end, content.replace will swap them before using them.
                 content.replace(start, end, text.text);
             }
         }
@@ -8478,7 +8521,7 @@
             return false;
         }
 
-        if (mText.length() > 0 && hasSelection()) {
+        if (mText.length() > 0 && hasSelection() && mEditor != null) {
             return true;
         }
 
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index c26cb24..8e4ba0d 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -20,26 +20,17 @@
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.TypedArray;
-import android.os.Parcel;
 import android.os.Parcelable;
-import android.text.format.DateFormat;
-import android.text.format.DateUtils;
 import android.util.AttributeSet;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.NumberPicker.OnValueChangeListener;
 
 import com.android.internal.R;
 
-import java.text.DateFormatSymbols;
-import java.util.Calendar;
 import java.util.Locale;
 
+import static android.os.Build.VERSION_CODES.KITKAT;
+
 /**
  * A view for selecting the time of day, in either 24 hour or AM/PM mode. The
  * hour, each minute digit, and AM/PM (if applicable) can be conrolled by
@@ -57,58 +48,12 @@
 @Widget
 public class TimePicker extends FrameLayout {
 
-    private static final boolean DEFAULT_ENABLED_STATE = true;
+    private TimePickerDelegate mDelegate;
 
-    private static final int HOURS_IN_HALF_DAY = 12;
-
-    /**
-     * A no-op callback used in the constructor to avoid null checks later in
-     * the code.
-     */
-    private static final OnTimeChangedListener NO_OP_CHANGE_LISTENER = new OnTimeChangedListener() {
-        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
-        }
-    };
-
-    // state
-    private boolean mIs24HourView;
-
-    private boolean mIsAm;
-
-    // ui components
-    private final NumberPicker mHourSpinner;
-
-    private final NumberPicker mMinuteSpinner;
-
-    private final NumberPicker mAmPmSpinner;
-
-    private final EditText mHourSpinnerInput;
-
-    private final EditText mMinuteSpinnerInput;
-
-    private final EditText mAmPmSpinnerInput;
-
-    private final TextView mDivider;
-
-    // Note that the legacy implementation of the TimePicker is
-    // using a button for toggling between AM/PM while the new
-    // version uses a NumberPicker spinner. Therefore the code
-    // accommodates these two cases to be backwards compatible.
-    private final Button mAmPmButton;
-
-    private final String[] mAmPmStrings;
-
-    private boolean mIsEnabled = DEFAULT_ENABLED_STATE;
-
-    // callbacks
-    private OnTimeChangedListener mOnTimeChangedListener;
-
-    private Calendar mTempCalendar;
-
-    private Locale mCurrentLocale;
-
-    private boolean mHourWithTwoDigit;
-    private char mHourFormat;
+    private AttributeSet mAttrs;
+    private int mDefStyleAttr;
+    private int mDefStyleRes;
+    private Context mContext;
 
     /**
      * The callback interface used to indicate the time has been adjusted.
@@ -131,345 +76,79 @@
         this(context, attrs, R.attr.timePickerStyle);
     }
 
-    public TimePicker(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        // initialization based on locale
-        setCurrentLocale(Locale.getDefault());
-
-        // process style attributes
-        TypedArray attributesArray = context.obtainStyledAttributes(
-                attrs, R.styleable.TimePicker, defStyle, 0);
-        int layoutResourceId = attributesArray.getResourceId(
-                R.styleable.TimePicker_internalLayout, R.layout.time_picker);
-        attributesArray.recycle();
-
-        LayoutInflater inflater = (LayoutInflater) context.getSystemService(
-                Context.LAYOUT_INFLATER_SERVICE);
-        inflater.inflate(layoutResourceId, this, true);
-
-        // hour
-        mHourSpinner = (NumberPicker) findViewById(R.id.hour);
-        mHourSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
-            public void onValueChange(NumberPicker spinner, int oldVal, int newVal) {
-                updateInputState();
-                if (!is24HourView()) {
-                    if ((oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY)
-                            || (oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1)) {
-                        mIsAm = !mIsAm;
-                        updateAmPmControl();
-                    }
-                }
-                onTimeChanged();
-            }
-        });
-        mHourSpinnerInput = (EditText) mHourSpinner.findViewById(R.id.numberpicker_input);
-        mHourSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
-
-        // divider (only for the new widget style)
-        mDivider = (TextView) findViewById(R.id.divider);
-        if (mDivider != null) {
-            setDividerText();
-        }
-
-        // minute
-        mMinuteSpinner = (NumberPicker) findViewById(R.id.minute);
-        mMinuteSpinner.setMinValue(0);
-        mMinuteSpinner.setMaxValue(59);
-        mMinuteSpinner.setOnLongPressUpdateInterval(100);
-        mMinuteSpinner.setFormatter(NumberPicker.getTwoDigitFormatter());
-        mMinuteSpinner.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
-            public void onValueChange(NumberPicker spinner, int oldVal, int newVal) {
-                updateInputState();
-                int minValue = mMinuteSpinner.getMinValue();
-                int maxValue = mMinuteSpinner.getMaxValue();
-                if (oldVal == maxValue && newVal == minValue) {
-                    int newHour = mHourSpinner.getValue() + 1;
-                    if (!is24HourView() && newHour == HOURS_IN_HALF_DAY) {
-                        mIsAm = !mIsAm;
-                        updateAmPmControl();
-                    }
-                    mHourSpinner.setValue(newHour);
-                } else if (oldVal == minValue && newVal == maxValue) {
-                    int newHour = mHourSpinner.getValue() - 1;
-                    if (!is24HourView() && newHour == HOURS_IN_HALF_DAY - 1) {
-                        mIsAm = !mIsAm;
-                        updateAmPmControl();
-                    }
-                    mHourSpinner.setValue(newHour);
-                }
-                onTimeChanged();
-            }
-        });
-        mMinuteSpinnerInput = (EditText) mMinuteSpinner.findViewById(R.id.numberpicker_input);
-        mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
-
-        /* Get the localized am/pm strings and use them in the spinner */
-        mAmPmStrings = new DateFormatSymbols().getAmPmStrings();
-
-        // am/pm
-        View amPmView = findViewById(R.id.amPm);
-        if (amPmView instanceof Button) {
-            mAmPmSpinner = null;
-            mAmPmSpinnerInput = null;
-            mAmPmButton = (Button) amPmView;
-            mAmPmButton.setOnClickListener(new OnClickListener() {
-                public void onClick(View button) {
-                    button.requestFocus();
-                    mIsAm = !mIsAm;
-                    updateAmPmControl();
-                    onTimeChanged();
-                }
-            });
-        } else {
-            mAmPmButton = null;
-            mAmPmSpinner = (NumberPicker) amPmView;
-            mAmPmSpinner.setMinValue(0);
-            mAmPmSpinner.setMaxValue(1);
-            mAmPmSpinner.setDisplayedValues(mAmPmStrings);
-            mAmPmSpinner.setOnValueChangedListener(new OnValueChangeListener() {
-                public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
-                    updateInputState();
-                    picker.requestFocus();
-                    mIsAm = !mIsAm;
-                    updateAmPmControl();
-                    onTimeChanged();
-                }
-            });
-            mAmPmSpinnerInput = (EditText) mAmPmSpinner.findViewById(R.id.numberpicker_input);
-            mAmPmSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE);
-        }
-
-        if (isAmPmAtStart()) {
-            // Move the am/pm view to the beginning
-            ViewGroup amPmParent = (ViewGroup) findViewById(R.id.timePickerLayout);
-            amPmParent.removeView(amPmView);
-            amPmParent.addView(amPmView, 0);
-            // Swap layout margins if needed. They may be not symmetrical (Old Standard Theme for
-            // example and not for Holo Theme)
-            ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) amPmView.getLayoutParams();
-            final int startMargin = lp.getMarginStart();
-            final int endMargin = lp.getMarginEnd();
-            if (startMargin != endMargin) {
-                lp.setMarginStart(endMargin);
-                lp.setMarginEnd(startMargin);
-            }
-        }
-
-        getHourFormatData();
-
-        // update controls to initial state
-        updateHourControl();
-        updateMinuteControl();
-        updateAmPmControl();
-
-        setOnTimeChangedListener(NO_OP_CHANGE_LISTENER);
-
-        // set to current time
-        setCurrentHour(mTempCalendar.get(Calendar.HOUR_OF_DAY));
-        setCurrentMinute(mTempCalendar.get(Calendar.MINUTE));
-
-        if (!isEnabled()) {
-            setEnabled(false);
-        }
-
-        // set the content descriptions
-        setContentDescriptions();
-
-        // If not explicitly specified this view is important for accessibility.
-        if (getImportantForAccessibility() == IMPORTANT_FOR_ACCESSIBILITY_AUTO) {
-            setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
-        }
+    public TimePicker(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
-    private void getHourFormatData() {
-        final Locale defaultLocale = Locale.getDefault();
-        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(defaultLocale,
-                (mIs24HourView) ? "Hm" : "hm");
-        final int lengthPattern = bestDateTimePattern.length();
-        mHourWithTwoDigit = false;
-        char hourFormat = '\0';
-        // Check if the returned pattern is single or double 'H', 'h', 'K', 'k'. We also save
-        // the hour format that we found.
-        for (int i = 0; i < lengthPattern; i++) {
-            final char c = bestDateTimePattern.charAt(i);
-            if (c == 'H' || c == 'h' || c == 'K' || c == 'k') {
-                mHourFormat = c;
-                if (i + 1 < lengthPattern && c == bestDateTimePattern.charAt(i + 1)) {
-                    mHourWithTwoDigit = true;
-                }
-                break;
-            }
-        }
+    public TimePicker(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        mContext = context;
+        mAttrs = attrs;
+        mDefStyleAttr = defStyleAttr;
+        mDefStyleRes = defStyleRes;
+
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TimePicker,
+                mDefStyleAttr, mDefStyleRes);
+
+        // Create the correct UI delegate. Default is the legacy one.
+        final boolean isLegacyMode = shouldForceLegacyMode() ?
+                true : a.getBoolean(R.styleable.TimePicker_legacyMode, true);
+        setLegacyMode(isLegacyMode);
     }
 
-    private boolean isAmPmAtStart() {
-        final Locale defaultLocale = Locale.getDefault();
-        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(defaultLocale,
-                "hm" /* skeleton */);
-
-        return bestDateTimePattern.startsWith("a");
+    private boolean shouldForceLegacyMode() {
+        final int targetSdkVersion = getContext().getApplicationInfo().targetSdkVersion;
+        return targetSdkVersion < KITKAT;
     }
 
-    @Override
-    public void setEnabled(boolean enabled) {
-        if (mIsEnabled == enabled) {
-            return;
-        }
-        super.setEnabled(enabled);
-        mMinuteSpinner.setEnabled(enabled);
-        if (mDivider != null) {
-            mDivider.setEnabled(enabled);
-        }
-        mHourSpinner.setEnabled(enabled);
-        if (mAmPmSpinner != null) {
-            mAmPmSpinner.setEnabled(enabled);
-        } else {
-            mAmPmButton.setEnabled(enabled);
-        }
-        mIsEnabled = enabled;
+    private TimePickerDelegate createLegacyUIDelegate(Context context, AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        return new LegacyTimePickerDelegate(this, context, attrs, defStyleAttr, defStyleRes);
     }
 
-    @Override
-    public boolean isEnabled() {
-        return mIsEnabled;
-    }
-
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        setCurrentLocale(newConfig.locale);
+    private TimePickerDelegate createNewUIDelegate(Context context, AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        return new android.widget.TimePickerDelegate(this, context, attrs, defStyleAttr,
+                defStyleRes);
     }
 
     /**
-     * Sets the current locale.
-     *
-     * @param locale The current locale.
+     * @hide
      */
-    private void setCurrentLocale(Locale locale) {
-        if (locale.equals(mCurrentLocale)) {
-            return;
-        }
-        mCurrentLocale = locale;
-        mTempCalendar = Calendar.getInstance(locale);
-    }
-
-    /**
-     * Used to save / restore state of time picker
-     */
-    private static class SavedState extends BaseSavedState {
-
-        private final int mHour;
-
-        private final int mMinute;
-
-        private SavedState(Parcelable superState, int hour, int minute) {
-            super(superState);
-            mHour = hour;
-            mMinute = minute;
-        }
-
-        private SavedState(Parcel in) {
-            super(in);
-            mHour = in.readInt();
-            mMinute = in.readInt();
-        }
-
-        public int getHour() {
-            return mHour;
-        }
-
-        public int getMinute() {
-            return mMinute;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            super.writeToParcel(dest, flags);
-            dest.writeInt(mHour);
-            dest.writeInt(mMinute);
-        }
-
-        @SuppressWarnings({"unused", "hiding"})
-        public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() {
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in);
-            }
-
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-
-    @Override
-    protected Parcelable onSaveInstanceState() {
-        Parcelable superState = super.onSaveInstanceState();
-        return new SavedState(superState, getCurrentHour(), getCurrentMinute());
-    }
-
-    @Override
-    protected void onRestoreInstanceState(Parcelable state) {
-        SavedState ss = (SavedState) state;
-        super.onRestoreInstanceState(ss.getSuperState());
-        setCurrentHour(ss.getHour());
-        setCurrentMinute(ss.getMinute());
-    }
-
-    /**
-     * Set the callback that indicates the time has been adjusted by the user.
-     *
-     * @param onTimeChangedListener the callback, should not be null.
-     */
-    public void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener) {
-        mOnTimeChangedListener = onTimeChangedListener;
-    }
-
-    /**
-     * @return The current hour in the range (0-23).
-     */
-    public Integer getCurrentHour() {
-        int currentHour = mHourSpinner.getValue();
-        if (is24HourView()) {
-            return currentHour;
-        } else if (mIsAm) {
-            return currentHour % HOURS_IN_HALF_DAY;
-        } else {
-            return (currentHour % HOURS_IN_HALF_DAY) + HOURS_IN_HALF_DAY;
-        }
+    public void setLegacyMode(boolean isLegacyMode) {
+        removeAllViewsInLayout();
+        mDelegate = isLegacyMode ?
+                createLegacyUIDelegate(mContext, mAttrs, mDefStyleAttr, mDefStyleRes) :
+                createNewUIDelegate(mContext, mAttrs, mDefStyleAttr, mDefStyleRes);
     }
 
     /**
      * Set the current hour.
      */
     public void setCurrentHour(Integer currentHour) {
-        setCurrentHour(currentHour, true);
+        mDelegate.setCurrentHour(currentHour);
     }
 
-    private void setCurrentHour(Integer currentHour, boolean notifyTimeChanged) {
-        // why was Integer used in the first place?
-        if (currentHour == null || currentHour == getCurrentHour()) {
-            return;
-        }
-        if (!is24HourView()) {
-            // convert [0,23] ordinal to wall clock display
-            if (currentHour >= HOURS_IN_HALF_DAY) {
-                mIsAm = false;
-                if (currentHour > HOURS_IN_HALF_DAY) {
-                    currentHour = currentHour - HOURS_IN_HALF_DAY;
-                }
-            } else {
-                mIsAm = true;
-                if (currentHour == 0) {
-                    currentHour = HOURS_IN_HALF_DAY;
-                }
-            }
-            updateAmPmControl();
-        }
-        mHourSpinner.setValue(currentHour);
-        if (notifyTimeChanged) {
-            onTimeChanged();
-        }
+    /**
+     * @return The current hour in the range (0-23).
+     */
+    public Integer getCurrentHour() {
+        return mDelegate.getCurrentHour();
+    }
+
+    /**
+     * Set the current minute (0-59).
+     */
+    public void setCurrentMinute(Integer currentMinute) {
+        mDelegate.setCurrentMinute(currentMinute);
+    }
+
+    /**
+     * @return The current minute.
+     */
+    public Integer getCurrentMinute() {
+        return mDelegate.getCurrentMinute();
     }
 
     /**
@@ -478,223 +157,174 @@
      * @param is24HourView True = 24 hour mode. False = AM/PM.
      */
     public void setIs24HourView(Boolean is24HourView) {
-        if (mIs24HourView == is24HourView) {
-            return;
-        }
-        // cache the current hour since spinner range changes and BEFORE changing mIs24HourView!!
-        int currentHour = getCurrentHour();
-        // Order is important here.
-        mIs24HourView = is24HourView;
-        getHourFormatData();
-        updateHourControl();
-        // set value after spinner range is updated - be aware that because mIs24HourView has
-        // changed then getCurrentHour() is not equal to the currentHour we cached before so
-        // explicitly ask for *not* propagating any onTimeChanged()
-        setCurrentHour(currentHour, false /* no onTimeChanged() */);
-        updateMinuteControl();
-        updateAmPmControl();
+        mDelegate.setIs24HourView(is24HourView);
     }
 
     /**
      * @return true if this is in 24 hour view else false.
      */
     public boolean is24HourView() {
-        return mIs24HourView;
+        return mDelegate.is24HourView();
     }
 
     /**
-     * @return The current minute.
+     * Set the callback that indicates the time has been adjusted by the user.
+     *
+     * @param onTimeChangedListener the callback, should not be null.
      */
-    public Integer getCurrentMinute() {
-        return mMinuteSpinner.getValue();
+    public void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener) {
+        mDelegate.setOnTimeChangedListener(onTimeChangedListener);
     }
 
-    /**
-     * Set the current minute (0-59).
-     */
-    public void setCurrentMinute(Integer currentMinute) {
-        if (currentMinute == getCurrentMinute()) {
+    @Override
+    public void setEnabled(boolean enabled) {
+        if (mDelegate.isEnabled() == enabled) {
             return;
         }
-        mMinuteSpinner.setValue(currentMinute);
-        onTimeChanged();
+        super.setEnabled(enabled);
+        mDelegate.setEnabled(enabled);
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return mDelegate.isEnabled();
     }
 
     /**
-     * The time separator is defined in the Unicode CLDR and cannot be supposed to be ":".
-     *
-     * See http://unicode.org/cldr/trac/browser/trunk/common/main
-     *
-     * We pass the correct "skeleton" depending on 12 or 24 hours view and then extract the
-     * separator as the character which is just after the hour marker in the returned pattern.
+     * @hide
      */
-    private void setDividerText() {
-        final Locale defaultLocale = Locale.getDefault();
-        final String skeleton = (mIs24HourView) ? "Hm" : "hm";
-        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(defaultLocale,
-                skeleton);
-        final String separatorText;
-        int hourIndex = bestDateTimePattern.lastIndexOf('H');
-        if (hourIndex == -1) {
-            hourIndex = bestDateTimePattern.lastIndexOf('h');
-        }
-        if (hourIndex == -1) {
-            // Default case
-            separatorText = ":";
-        } else {
-            int minuteIndex = bestDateTimePattern.indexOf('m', hourIndex + 1);
-            if  (minuteIndex == -1) {
-                separatorText = Character.toString(bestDateTimePattern.charAt(hourIndex + 1));
-            } else {
-                separatorText = bestDateTimePattern.substring(hourIndex + 1, minuteIndex);
-            }
-        }
-        mDivider.setText(separatorText);
+    public void setShowDoneButton(boolean showDoneButton) {
+        mDelegate.setShowDoneButton(showDoneButton);
+    }
+
+    /**
+     * @hide
+     */
+    public void setDismissCallback(TimePickerDismissCallback callback) {
+        mDelegate.setDismissCallback(callback);
     }
 
     @Override
     public int getBaseline() {
-        return mHourSpinner.getBaseline();
+        return mDelegate.getBaseline();
+    }
+
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        mDelegate.onConfigurationChanged(newConfig);
+    }
+
+    @Override
+    protected Parcelable onSaveInstanceState() {
+        Parcelable superState = super.onSaveInstanceState();
+        return mDelegate.onSaveInstanceState(superState);
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        BaseSavedState ss = (BaseSavedState) state;
+        super.onRestoreInstanceState(ss.getSuperState());
+        mDelegate.onRestoreInstanceState(ss);
     }
 
     @Override
     public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
-        onPopulateAccessibilityEvent(event);
-        return true;
+        return mDelegate.dispatchPopulateAccessibilityEvent(event);
     }
 
     @Override
     public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
         super.onPopulateAccessibilityEvent(event);
-
-        int flags = DateUtils.FORMAT_SHOW_TIME;
-        if (mIs24HourView) {
-            flags |= DateUtils.FORMAT_24HOUR;
-        } else {
-            flags |= DateUtils.FORMAT_12HOUR;
-        }
-        mTempCalendar.set(Calendar.HOUR_OF_DAY, getCurrentHour());
-        mTempCalendar.set(Calendar.MINUTE, getCurrentMinute());
-        String selectedDateUtterance = DateUtils.formatDateTime(mContext,
-                mTempCalendar.getTimeInMillis(), flags);
-        event.getText().add(selectedDateUtterance);
+        mDelegate.onPopulateAccessibilityEvent(event);
     }
 
     @Override
     public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
         super.onInitializeAccessibilityEvent(event);
-        event.setClassName(TimePicker.class.getName());
+        mDelegate.onInitializeAccessibilityEvent(event);
     }
 
     @Override
     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
         super.onInitializeAccessibilityNodeInfo(info);
-        info.setClassName(TimePicker.class.getName());
+        mDelegate.onInitializeAccessibilityNodeInfo(info);
     }
 
-    private void updateHourControl() {
-        if (is24HourView()) {
-            // 'k' means 1-24 hour
-            if (mHourFormat == 'k') {
-                mHourSpinner.setMinValue(1);
-                mHourSpinner.setMaxValue(24);
-            } else {
-                mHourSpinner.setMinValue(0);
-                mHourSpinner.setMaxValue(23);
+    /**
+     * A delegate interface that defined the public API of the TimePicker. Allows different
+     * TimePicker implementations. This would need to be implemented by the TimePicker delegates
+     * for the real behavior.
+     */
+    interface TimePickerDelegate {
+        void setCurrentHour(Integer currentHour);
+        Integer getCurrentHour();
+
+        void setCurrentMinute(Integer currentMinute);
+        Integer getCurrentMinute();
+
+        void setIs24HourView(Boolean is24HourView);
+        boolean is24HourView();
+
+        void setOnTimeChangedListener(OnTimeChangedListener onTimeChangedListener);
+
+        void setEnabled(boolean enabled);
+        boolean isEnabled();
+
+        void setShowDoneButton(boolean showDoneButton);
+        void setDismissCallback(TimePickerDismissCallback callback);
+
+        int getBaseline();
+
+        void onConfigurationChanged(Configuration newConfig);
+
+        Parcelable onSaveInstanceState(Parcelable superState);
+        void onRestoreInstanceState(Parcelable state);
+
+        boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event);
+        void onPopulateAccessibilityEvent(AccessibilityEvent event);
+        void onInitializeAccessibilityEvent(AccessibilityEvent event);
+        void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info);
+    }
+
+    /**
+     * A callback interface for dismissing the TimePicker when included into a Dialog
+     *
+     * @hide
+     */
+    public static interface TimePickerDismissCallback {
+        void dismiss(TimePicker view, boolean isCancel, int hourOfDay, int minute);
+    }
+
+    /**
+     * An abstract class which can be used as a start for TimePicker implementations
+     */
+    abstract static class AbstractTimePickerDelegate implements TimePickerDelegate {
+        // The delegator
+        protected TimePicker mDelegator;
+
+        // The context
+        protected Context mContext;
+
+        // The current locale
+        protected Locale mCurrentLocale;
+
+        // Callbacks
+        protected  OnTimeChangedListener mOnTimeChangedListener;
+
+        public AbstractTimePickerDelegate(TimePicker delegator, Context context) {
+            mDelegator = delegator;
+            mContext = context;
+
+            // initialization based on locale
+            setCurrentLocale(Locale.getDefault());
+        }
+
+        public void setCurrentLocale(Locale locale) {
+            if (locale.equals(mCurrentLocale)) {
+                return;
             }
-        } else {
-            // 'K' means 0-11 hour
-            if (mHourFormat == 'K') {
-                mHourSpinner.setMinValue(0);
-                mHourSpinner.setMaxValue(11);
-            } else {
-                mHourSpinner.setMinValue(1);
-                mHourSpinner.setMaxValue(12);
-            }
-        }
-        mHourSpinner.setFormatter(mHourWithTwoDigit ? NumberPicker.getTwoDigitFormatter() : null);
-    }
-
-    private void updateMinuteControl() {
-        if (is24HourView()) {
-            mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_DONE);
-        } else {
-            mMinuteSpinnerInput.setImeOptions(EditorInfo.IME_ACTION_NEXT);
-        }
-    }
-
-    private void updateAmPmControl() {
-        if (is24HourView()) {
-            if (mAmPmSpinner != null) {
-                mAmPmSpinner.setVisibility(View.GONE);
-            } else {
-                mAmPmButton.setVisibility(View.GONE);
-            }
-        } else {
-            int index = mIsAm ? Calendar.AM : Calendar.PM;
-            if (mAmPmSpinner != null) {
-                mAmPmSpinner.setValue(index);
-                mAmPmSpinner.setVisibility(View.VISIBLE);
-            } else {
-                mAmPmButton.setText(mAmPmStrings[index]);
-                mAmPmButton.setVisibility(View.VISIBLE);
-            }
-        }
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
-    }
-
-    private void onTimeChanged() {
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
-        if (mOnTimeChangedListener != null) {
-            mOnTimeChangedListener.onTimeChanged(this, getCurrentHour(), getCurrentMinute());
-        }
-    }
-
-    private void setContentDescriptions() {
-        // Minute
-        trySetContentDescription(mMinuteSpinner, R.id.increment,
-                R.string.time_picker_increment_minute_button);
-        trySetContentDescription(mMinuteSpinner, R.id.decrement,
-                R.string.time_picker_decrement_minute_button);
-        // Hour
-        trySetContentDescription(mHourSpinner, R.id.increment,
-                R.string.time_picker_increment_hour_button);
-        trySetContentDescription(mHourSpinner, R.id.decrement,
-                R.string.time_picker_decrement_hour_button);
-        // AM/PM
-        if (mAmPmSpinner != null) {
-            trySetContentDescription(mAmPmSpinner, R.id.increment,
-                    R.string.time_picker_increment_set_pm_button);
-            trySetContentDescription(mAmPmSpinner, R.id.decrement,
-                    R.string.time_picker_decrement_set_am_button);
-        }
-    }
-
-    private void trySetContentDescription(View root, int viewId, int contDescResId) {
-        View target = root.findViewById(viewId);
-        if (target != null) {
-            target.setContentDescription(mContext.getString(contDescResId));
-        }
-    }
-
-    private void updateInputState() {
-        // Make sure that if the user changes the value and the IME is active
-        // for one of the inputs if this widget, the IME is closed. If the user
-        // changed the value via the IME and there is a next input the IME will
-        // be shown, otherwise the user chose another means of changing the
-        // value and having the IME up makes no sense.
-        InputMethodManager inputMethodManager = InputMethodManager.peekInstance();
-        if (inputMethodManager != null) {
-            if (inputMethodManager.isActive(mHourSpinnerInput)) {
-                mHourSpinnerInput.clearFocus();
-                inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
-            } else if (inputMethodManager.isActive(mMinuteSpinnerInput)) {
-                mMinuteSpinnerInput.clearFocus();
-                inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
-            } else if (inputMethodManager.isActive(mAmPmSpinnerInput)) {
-                mAmPmSpinnerInput.clearFocus();
-                inputMethodManager.hideSoftInputFromWindow(getWindowToken(), 0);
-            }
+            mCurrentLocale = locale;
         }
     }
 }
diff --git a/core/java/android/widget/TimePickerDelegate.java b/core/java/android/widget/TimePickerDelegate.java
new file mode 100644
index 0000000..79256e5
--- /dev/null
+++ b/core/java/android/widget/TimePickerDelegate.java
@@ -0,0 +1,1401 @@
+/*
+ * Copyright (C) 2013 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 android.widget;
+
+import android.animation.Keyframe;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.text.format.DateFormat;
+import android.text.format.DateUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.HapticFeedbackConstants;
+import android.view.KeyCharacterMap;
+import android.view.KeyEvent;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+
+import com.android.internal.R;
+
+import java.text.DateFormatSymbols;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Locale;
+
+/**
+ * A view for selecting the time of day, in either 24 hour or AM/PM mode.
+ */
+class TimePickerDelegate extends TimePicker.AbstractTimePickerDelegate implements
+        RadialTimePickerView.OnValueSelectedListener {
+
+    private static final String TAG = "TimePickerDelegate";
+
+    // Index used by RadialPickerLayout
+    private static final int HOUR_INDEX = 0;
+    private static final int MINUTE_INDEX = 1;
+
+    // NOT a real index for the purpose of what's showing.
+    private static final int AMPM_INDEX = 2;
+
+    // Also NOT a real index, just used for keyboard mode.
+    private static final int ENABLE_PICKER_INDEX = 3;
+
+    private static final int AM = 0;
+    private static final int PM = 1;
+
+    private static final boolean DEFAULT_ENABLED_STATE = true;
+    private boolean mIsEnabled = DEFAULT_ENABLED_STATE;
+
+    private static final int HOURS_IN_HALF_DAY = 12;
+
+    // Delay in ms before starting the pulse animation
+    private static final int PULSE_ANIMATOR_DELAY = 300;
+
+    // Duration in ms of the pulse animation
+    private static final int PULSE_ANIMATOR_DURATION = 544;
+
+    private static int[] TEXT_APPEARANCE_TIME_LABEL_ATTR =
+            new int[] { R.attr.timePickerHeaderTimeLabelTextAppearance };
+
+    private final View mMainView;
+    private TextView mHourView;
+    private TextView mMinuteView;
+    private TextView mAmPmTextView;
+    private RadialTimePickerView mRadialTimePickerView;
+    private TextView mSeparatorView;
+
+    private ViewGroup mLayoutButtons;
+
+    private int mHeaderSelectedColor;
+    private int mHeaderUnSelectedColor;
+    private String mAmText;
+    private String mPmText;
+
+    private boolean mAllowAutoAdvance;
+    private int mInitialHourOfDay;
+    private int mInitialMinute;
+    private boolean mIs24HourView;
+
+    // For hardware IME input.
+    private char mPlaceholderText;
+    private String mDoublePlaceholderText;
+    private String mDeletedKeyFormat;
+    private boolean mInKbMode;
+    private ArrayList<Integer> mTypedTimes = new ArrayList<Integer>();
+    private Node mLegalTimesTree;
+    private int mAmKeyCode;
+    private int mPmKeyCode;
+
+    // For showing the done button when in a Dialog
+    private Button mDoneButton;
+    private boolean mShowDoneButton;
+    private TimePicker.TimePickerDismissCallback mDismissCallback;
+
+    // Accessibility strings.
+    private String mHourPickerDescription;
+    private String mSelectHours;
+    private String mMinutePickerDescription;
+    private String mSelectMinutes;
+
+    private Calendar mTempCalendar;
+
+    public TimePickerDelegate(TimePicker delegator, Context context, AttributeSet attrs,
+                              int defStyleAttr, int defStyleRes) {
+        super(delegator, context);
+
+        // process style attributes
+        final TypedArray a = mContext.obtainStyledAttributes(attrs,
+                R.styleable.TimePicker, defStyleAttr, defStyleRes);
+
+        final Resources res = mContext.getResources();
+
+        mHourPickerDescription = res.getString(R.string.hour_picker_description);
+        mSelectHours = res.getString(R.string.select_hours);
+        mMinutePickerDescription = res.getString(R.string.minute_picker_description);
+        mSelectMinutes = res.getString(R.string.select_minutes);
+
+        mHeaderSelectedColor = a.getColor(R.styleable.TimePicker_headerSelectedTextColor,
+                android.R.color.holo_blue_light);
+
+        mHeaderUnSelectedColor = getUnselectedColor(
+                R.color.timepicker_default_text_color_holo_light);
+        if (mHeaderUnSelectedColor == -1) {
+            mHeaderUnSelectedColor = a.getColor(R.styleable.TimePicker_headerUnselectedTextColor,
+                    R.color.timepicker_default_text_color_holo_light);
+        }
+
+        final int headerBackgroundColor = a.getColor(
+                R.styleable.TimePicker_headerBackgroundColor, 0);
+
+        final int layoutResourceId = a.getResourceId(
+                R.styleable.TimePicker_internalLayout, R.layout.time_picker_holo);
+
+        a.recycle();
+
+        final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
+                Context.LAYOUT_INFLATER_SERVICE);
+
+        mMainView = inflater.inflate(layoutResourceId, null);
+        mDelegator.addView(mMainView);
+
+        if (headerBackgroundColor != 0) {
+            RelativeLayout header = (RelativeLayout) mMainView.findViewById(R.id.time_header);
+            header.setBackgroundColor(headerBackgroundColor);
+        }
+
+        mHourView = (TextView) mMainView.findViewById(R.id.hours);
+        mMinuteView = (TextView) mMainView.findViewById(R.id.minutes);
+        mAmPmTextView = (TextView) mMainView.findViewById(R.id.ampm_label);
+        mSeparatorView = (TextView) mMainView.findViewById(R.id.separator);
+        mRadialTimePickerView = (RadialTimePickerView) mMainView.findViewById(R.id.radial_picker);
+
+        mLayoutButtons = (ViewGroup) mMainView.findViewById(R.id.layout_buttons);
+        mDoneButton = (Button) mMainView.findViewById(R.id.done_button);
+
+        String[] amPmTexts = new DateFormatSymbols().getAmPmStrings();
+        mAmText = amPmTexts[0];
+        mPmText = amPmTexts[1];
+
+        setupListeners();
+
+        mAllowAutoAdvance = true;
+
+        // Set up for keyboard mode.
+        mDoublePlaceholderText = res.getString(R.string.time_placeholder);
+        mDeletedKeyFormat = res.getString(R.string.deleted_key);
+        mPlaceholderText = mDoublePlaceholderText.charAt(0);
+        mAmKeyCode = mPmKeyCode = -1;
+        generateLegalTimesTree();
+
+        // Initialize with current time
+        final Calendar calendar = Calendar.getInstance(mCurrentLocale);
+        final int currentHour = calendar.get(Calendar.HOUR_OF_DAY);
+        final int currentMinute = calendar.get(Calendar.MINUTE);
+        initialize(currentHour, currentMinute, false /* 12h */, HOUR_INDEX, false);
+    }
+
+    private int getUnselectedColor(int defColor) {
+        int result = -1;
+        final Resources.Theme theme = mContext.getTheme();
+        final TypedValue outValue = new TypedValue();
+        theme.resolveAttribute(R.attr.timePickerHeaderTimeLabelTextAppearance, outValue, true);
+        final int appearanceResId = outValue.resourceId;
+        TypedArray appearance = null;
+        if (appearanceResId != -1) {
+            appearance = theme.obtainStyledAttributes(appearanceResId,
+                    com.android.internal.R.styleable.TextAppearance);
+        }
+        if (appearance != null) {
+            result = appearance.getColor(
+                    com.android.internal.R.styleable.TextAppearance_textColor, defColor);
+            appearance.recycle();
+        }
+        return result;
+    }
+
+    private void initialize(int hourOfDay, int minute, boolean is24HourView, int index,
+                            boolean showDoneButton) {
+        mInitialHourOfDay = hourOfDay;
+        mInitialMinute = minute;
+        mIs24HourView = is24HourView;
+        mInKbMode = false;
+        mShowDoneButton = showDoneButton;
+        updateUI(index);
+    }
+
+    private void setupListeners() {
+        KeyboardListener keyboardListener = new KeyboardListener();
+        mDelegator.setOnKeyListener(keyboardListener);
+
+        mHourView.setOnKeyListener(keyboardListener);
+        mMinuteView.setOnKeyListener(keyboardListener);
+        mAmPmTextView.setOnKeyListener(keyboardListener);
+        mRadialTimePickerView.setOnValueSelectedListener(this);
+        mRadialTimePickerView.setOnKeyListener(keyboardListener);
+
+        mHourView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                setCurrentItemShowing(HOUR_INDEX, true, false, true);
+                tryVibrate();
+            }
+        });
+        mMinuteView.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                setCurrentItemShowing(MINUTE_INDEX, true, false, true);
+                tryVibrate();
+            }
+        });
+        mDoneButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                if (mInKbMode && isTypedTimeFullyLegal()) {
+                    finishKbMode(false);
+                } else {
+                    tryVibrate();
+                }
+                if (mDismissCallback != null) {
+                    mDismissCallback.dismiss(mDelegator, false, getCurrentHour(),
+                            getCurrentMinute());
+                }
+            }
+        });
+        mDoneButton.setOnKeyListener(keyboardListener);
+    }
+
+    private void updateUI(int index) {
+        // Update RadialPicker values
+        updateRadialPicker(index);
+        // Enable or disable the AM/PM view.
+        updateHeaderAmPm();
+        // Show or hide Done button
+        updateDoneButton();
+        // Update Hour and Minutes
+        updateHeaderHour(mInitialHourOfDay, true);
+        // Update time separator
+        updateHeaderSeparator();
+        // Update Minutes
+        updateHeaderMinute(mInitialMinute);
+        // Invalidate everything
+        mDelegator.invalidate();
+    }
+
+    private void updateRadialPicker(int index) {
+        mRadialTimePickerView.initialize(mInitialHourOfDay, mInitialMinute, mIs24HourView);
+        setCurrentItemShowing(index, false, true, true);
+    }
+
+    private int computeMaxWidthOfNumbers(int max) {
+        TextView tempView = new TextView(mContext);
+        TypedArray a = mContext.obtainStyledAttributes(TEXT_APPEARANCE_TIME_LABEL_ATTR);
+        final int textAppearanceResId = a.getResourceId(0, 0);
+        tempView.setTextAppearance(mContext, (textAppearanceResId != 0) ?
+                textAppearanceResId : R.style.TextAppearance_Holo_TimePicker_TimeLabel);
+        a.recycle();
+        ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
+                ViewGroup.LayoutParams.WRAP_CONTENT);
+        tempView.setLayoutParams(lp);
+        int maxWidth = 0;
+        for (int minutes = 0; minutes < max; minutes++) {
+            final String text = String.format("%02d", minutes);
+            tempView.setText(text);
+            tempView.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
+            maxWidth = Math.max(maxWidth, tempView.getMeasuredWidth());
+        }
+        return maxWidth;
+    }
+
+    private void updateHeaderAmPm() {
+        if (mIs24HourView) {
+            mAmPmTextView.setVisibility(View.GONE);
+        } else {
+            mAmPmTextView.setVisibility(View.VISIBLE);
+            final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale,
+                    "hm");
+
+            boolean amPmOnLeft = bestDateTimePattern.startsWith("a");
+            if (TextUtils.getLayoutDirectionFromLocale(mCurrentLocale) ==
+                    View.LAYOUT_DIRECTION_RTL) {
+                amPmOnLeft = !amPmOnLeft;
+            }
+
+            RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
+                    mAmPmTextView.getLayoutParams();
+
+            if (amPmOnLeft) {
+                layoutParams.rightMargin = computeMaxWidthOfNumbers(12 /* for hours */);
+                layoutParams.removeRule(RelativeLayout.RIGHT_OF);
+                layoutParams.addRule(RelativeLayout.LEFT_OF, R.id.separator);
+            } else {
+                layoutParams.leftMargin = computeMaxWidthOfNumbers(60 /* for minutes */);
+                layoutParams.removeRule(RelativeLayout.LEFT_OF);
+                layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.separator);
+            }
+
+            updateAmPmDisplay(mInitialHourOfDay < 12 ? AM : PM);
+            mAmPmTextView.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    tryVibrate();
+                    int amOrPm = mRadialTimePickerView.getAmOrPm();
+                    if (amOrPm == AM) {
+                        amOrPm = PM;
+                    } else if (amOrPm == PM){
+                        amOrPm = AM;
+                    }
+                    updateAmPmDisplay(amOrPm);
+                    mRadialTimePickerView.setAmOrPm(amOrPm);
+                }
+            });
+        }
+    }
+
+    private void updateDoneButton() {
+        mLayoutButtons.setVisibility(mShowDoneButton ? View.VISIBLE : View.GONE);
+    }
+
+    /**
+     * Set the current hour.
+     */
+    @Override
+    public void setCurrentHour(Integer currentHour) {
+        if (mInitialHourOfDay == currentHour) {
+            return;
+        }
+        mInitialHourOfDay = currentHour;
+        updateHeaderHour(currentHour, true /* accessibility announce */);
+        updateHeaderAmPm();
+        mRadialTimePickerView.setCurrentHour(currentHour);
+        mRadialTimePickerView.setAmOrPm(mInitialHourOfDay < 12 ? AM : PM);
+        mDelegator.invalidate();
+        onTimeChanged();
+    }
+
+    /**
+     * @return The current hour in the range (0-23).
+     */
+    @Override
+    public Integer getCurrentHour() {
+        int currentHour = mRadialTimePickerView.getCurrentHour();
+        if (mIs24HourView) {
+            return currentHour;
+        } else {
+            switch(mRadialTimePickerView.getAmOrPm()) {
+                case PM:
+                    return (currentHour % HOURS_IN_HALF_DAY) + HOURS_IN_HALF_DAY;
+                case AM:
+                default:
+                    return currentHour % HOURS_IN_HALF_DAY;
+            }
+        }
+    }
+
+    /**
+     * Set the current minute (0-59).
+     */
+    @Override
+    public void setCurrentMinute(Integer currentMinute) {
+        if (mInitialMinute == currentMinute) {
+            return;
+        }
+        mInitialMinute = currentMinute;
+        updateHeaderMinute(currentMinute);
+        mRadialTimePickerView.setCurrentMinute(currentMinute);
+        mDelegator.invalidate();
+        onTimeChanged();
+    }
+
+    /**
+     * @return The current minute.
+     */
+    @Override
+    public Integer getCurrentMinute() {
+        return mRadialTimePickerView.getCurrentMinute();
+    }
+
+    /**
+     * Set whether in 24 hour or AM/PM mode.
+     *
+     * @param is24HourView True = 24 hour mode. False = AM/PM.
+     */
+    @Override
+    public void setIs24HourView(Boolean is24HourView) {
+        if (is24HourView == mIs24HourView) {
+            return;
+        }
+        mIs24HourView = is24HourView;
+        generateLegalTimesTree();
+        int hour = mRadialTimePickerView.getCurrentHour();
+        mInitialHourOfDay = hour;
+        updateHeaderHour(hour, false /* no accessibility announce */);
+        updateHeaderAmPm();
+        updateRadialPicker(mRadialTimePickerView.getCurrentItemShowing());
+        mDelegator.invalidate();
+    }
+
+    /**
+     * @return true if this is in 24 hour view else false.
+     */
+    @Override
+    public boolean is24HourView() {
+        return mIs24HourView;
+    }
+
+    @Override
+    public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener callback) {
+        mOnTimeChangedListener = callback;
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        mHourView.setEnabled(enabled);
+        mMinuteView.setEnabled(enabled);
+        mAmPmTextView.setEnabled(enabled);
+        mRadialTimePickerView.setEnabled(enabled);
+        mIsEnabled = enabled;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return mIsEnabled;
+    }
+
+    @Override
+    public void setShowDoneButton(boolean showDoneButton) {
+        mShowDoneButton = showDoneButton;
+        updateDoneButton();
+    }
+
+    @Override
+    public void setDismissCallback(TimePicker.TimePickerDismissCallback callback) {
+        mDismissCallback = callback;
+    }
+
+    @Override
+    public int getBaseline() {
+        // does not support baseline alignment
+        return -1;
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        updateUI(mRadialTimePickerView.getCurrentItemShowing());
+    }
+
+    @Override
+    public Parcelable onSaveInstanceState(Parcelable superState) {
+        return new SavedState(superState, getCurrentHour(), getCurrentMinute(),
+                is24HourView(), inKbMode(), getTypedTimes(), getCurrentItemShowing(),
+                isShowDoneButton());
+    }
+
+    @Override
+    public void onRestoreInstanceState(Parcelable state) {
+        SavedState ss = (SavedState) state;
+        setInKbMode(ss.inKbMode());
+        setTypedTimes(ss.getTypesTimes());
+        initialize(ss.getHour(), ss.getMinute(), ss.is24HourMode(), ss.getCurrentItemShowing(),
+                ss.isShowDoneButton());
+        mRadialTimePickerView.invalidate();
+        if (mInKbMode) {
+            tryStartingKbMode(-1);
+            mHourView.invalidate();
+        }
+    }
+
+    @Override
+    public void setCurrentLocale(Locale locale) {
+        super.setCurrentLocale(locale);
+        mTempCalendar = Calendar.getInstance(locale);
+    }
+
+    @Override
+    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
+        onPopulateAccessibilityEvent(event);
+        return true;
+    }
+
+    @Override
+    public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
+        int flags = DateUtils.FORMAT_SHOW_TIME;
+        if (mIs24HourView) {
+            flags |= DateUtils.FORMAT_24HOUR;
+        } else {
+            flags |= DateUtils.FORMAT_12HOUR;
+        }
+        mTempCalendar.set(Calendar.HOUR_OF_DAY, getCurrentHour());
+        mTempCalendar.set(Calendar.MINUTE, getCurrentMinute());
+        String selectedDate = DateUtils.formatDateTime(mContext,
+                mTempCalendar.getTimeInMillis(), flags);
+        event.getText().add(selectedDate);
+    }
+
+    @Override
+    public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
+        event.setClassName(TimePicker.class.getName());
+    }
+
+    @Override
+    public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
+        info.setClassName(TimePicker.class.getName());
+    }
+
+    /**
+     * Set whether in keyboard mode or not.
+     *
+     * @param inKbMode True means in keyboard mode.
+     */
+    private void setInKbMode(boolean inKbMode) {
+        mInKbMode = inKbMode;
+    }
+
+    /**
+     * @return true if in keyboard mode
+     */
+    private boolean inKbMode() {
+        return mInKbMode;
+    }
+
+    private void setTypedTimes(ArrayList<Integer> typeTimes) {
+        mTypedTimes = typeTimes;
+    }
+
+    /**
+     * @return an array of typed times
+     */
+    private ArrayList<Integer> getTypedTimes() {
+        return mTypedTimes;
+    }
+
+    /**
+     * @return the index of the current item showing
+     */
+    private int getCurrentItemShowing() {
+        return mRadialTimePickerView.getCurrentItemShowing();
+    }
+
+    private boolean isShowDoneButton() {
+        return mShowDoneButton;
+    }
+
+    /**
+     * Propagate the time change
+     */
+    private void onTimeChanged() {
+        mDelegator.sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
+        if (mOnTimeChangedListener != null) {
+            mOnTimeChangedListener.onTimeChanged(mDelegator,
+                    getCurrentHour(), getCurrentMinute());
+        }
+    }
+
+    /**
+     * Used to save / restore state of time picker
+     */
+    private static class SavedState extends View.BaseSavedState {
+
+        private final int mHour;
+        private final int mMinute;
+        private final boolean mIs24HourMode;
+        private final boolean mInKbMode;
+        private final ArrayList<Integer> mTypedTimes;
+        private final int mCurrentItemShowing;
+        private final boolean mShowDoneButton;
+
+        private SavedState(Parcelable superState, int hour, int minute, boolean is24HourMode,
+                           boolean isKbMode, ArrayList<Integer> typedTimes,
+                           int currentItemShowing, boolean showDoneButton) {
+            super(superState);
+            mHour = hour;
+            mMinute = minute;
+            mIs24HourMode = is24HourMode;
+            mInKbMode = isKbMode;
+            mTypedTimes = typedTimes;
+            mCurrentItemShowing = currentItemShowing;
+            mShowDoneButton = showDoneButton;
+        }
+
+        private SavedState(Parcel in) {
+            super(in);
+            mHour = in.readInt();
+            mMinute = in.readInt();
+            mIs24HourMode = (in.readInt() == 1);
+            mInKbMode = (in.readInt() == 1);
+            mTypedTimes = in.readArrayList(getClass().getClassLoader());
+            mCurrentItemShowing = in.readInt();
+            mShowDoneButton = (in.readInt() == 1);
+        }
+
+        public int getHour() {
+            return mHour;
+        }
+
+        public int getMinute() {
+            return mMinute;
+        }
+
+        public boolean is24HourMode() {
+            return mIs24HourMode;
+        }
+
+        public boolean inKbMode() {
+            return mInKbMode;
+        }
+
+        public ArrayList<Integer> getTypesTimes() {
+            return mTypedTimes;
+        }
+
+        public int getCurrentItemShowing() {
+            return mCurrentItemShowing;
+        }
+
+        public boolean isShowDoneButton() {
+            return mShowDoneButton;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            super.writeToParcel(dest, flags);
+            dest.writeInt(mHour);
+            dest.writeInt(mMinute);
+            dest.writeInt(mIs24HourMode ? 1 : 0);
+            dest.writeInt(mInKbMode ? 1 : 0);
+            dest.writeList(mTypedTimes);
+            dest.writeInt(mCurrentItemShowing);
+            dest.writeInt(mShowDoneButton ? 1 : 0);
+        }
+
+        @SuppressWarnings({"unused", "hiding"})
+        public static final Parcelable.Creator<SavedState> CREATOR = new Creator<SavedState>() {
+            public SavedState createFromParcel(Parcel in) {
+                return new SavedState(in);
+            }
+
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+    }
+
+    private void tryVibrate() {
+        mDelegator.performHapticFeedback(HapticFeedbackConstants.CLOCK_TICK);
+    }
+
+    private void updateAmPmDisplay(int amOrPm) {
+        if (amOrPm == AM) {
+            mAmPmTextView.setText(mAmText);
+            mRadialTimePickerView.announceForAccessibility(mAmText);
+        } else if (amOrPm == PM){
+            mAmPmTextView.setText(mPmText);
+            mRadialTimePickerView.announceForAccessibility(mPmText);
+        } else {
+            mAmPmTextView.setText(mDoublePlaceholderText);
+        }
+    }
+
+    /**
+     * Called by the picker for updating the header display.
+     */
+    @Override
+    public void onValueSelected(int pickerIndex, int newValue, boolean autoAdvance) {
+        if (pickerIndex == HOUR_INDEX) {
+            updateHeaderHour(newValue, false);
+            String announcement = String.format("%d", newValue);
+            if (mAllowAutoAdvance && autoAdvance) {
+                setCurrentItemShowing(MINUTE_INDEX, true, true, false);
+                announcement += ". " + mSelectMinutes;
+            } else {
+                mRadialTimePickerView.setContentDescription(
+                        mHourPickerDescription + ": " + newValue);
+            }
+
+            mRadialTimePickerView.announceForAccessibility(announcement);
+        } else if (pickerIndex == MINUTE_INDEX){
+            updateHeaderMinute(newValue);
+            mRadialTimePickerView.setContentDescription(mMinutePickerDescription + ": " + newValue);
+        } else if (pickerIndex == AMPM_INDEX) {
+            updateAmPmDisplay(newValue);
+        } else if (pickerIndex == ENABLE_PICKER_INDEX) {
+            if (!isTypedTimeFullyLegal()) {
+                mTypedTimes.clear();
+            }
+            finishKbMode(true);
+        }
+    }
+
+    private void updateHeaderHour(int value, boolean announce) {
+        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale,
+                (mIs24HourView) ? "Hm" : "hm");
+        final int lengthPattern = bestDateTimePattern.length();
+        boolean hourWithTwoDigit = false;
+        char hourFormat = '\0';
+        // Check if the returned pattern is single or double 'H', 'h', 'K', 'k'. We also save
+        // the hour format that we found.
+        for (int i = 0; i < lengthPattern; i++) {
+            final char c = bestDateTimePattern.charAt(i);
+            if (c == 'H' || c == 'h' || c == 'K' || c == 'k') {
+                hourFormat = c;
+                if (i + 1 < lengthPattern && c == bestDateTimePattern.charAt(i + 1)) {
+                    hourWithTwoDigit = true;
+                }
+                break;
+            }
+        }
+        final String format;
+        if (hourWithTwoDigit) {
+            format = "%02d";
+        } else {
+            format = "%d";
+        }
+        if (mIs24HourView) {
+            // 'k' means 1-24 hour
+            if (hourFormat == 'k' && value == 0) {
+                value = 24;
+            }
+        } else {
+            // 'K' means 0-11 hour
+            value = modulo12(value, hourFormat == 'K');
+        }
+        CharSequence text = String.format(format, value);
+        mHourView.setText(text);
+        if (announce) {
+            mRadialTimePickerView.announceForAccessibility(text);
+        }
+    }
+
+    private static int modulo12(int n, boolean startWithZero) {
+        int value = n % 12;
+        if (value == 0 && !startWithZero) {
+            value = 12;
+        }
+        return value;
+    }
+
+    /**
+     * The time separator is defined in the Unicode CLDR and cannot be supposed to be ":".
+     *
+     * See http://unicode.org/cldr/trac/browser/trunk/common/main
+     *
+     * We pass the correct "skeleton" depending on 12 or 24 hours view and then extract the
+     * separator as the character which is just after the hour marker in the returned pattern.
+     */
+    private void updateHeaderSeparator() {
+        final String bestDateTimePattern = DateFormat.getBestDateTimePattern(mCurrentLocale,
+                (mIs24HourView) ? "Hm" : "hm");
+        final String separatorText;
+        // See http://www.unicode.org/reports/tr35/tr35-dates.html for hour formats
+        final char[] hourFormats = {'H', 'h', 'K', 'k'};
+        int hIndex = lastIndexOfAny(bestDateTimePattern, hourFormats);
+        if (hIndex == -1) {
+            // Default case
+            separatorText = ":";
+        } else {
+            separatorText = Character.toString(bestDateTimePattern.charAt(hIndex + 1));
+        }
+        mSeparatorView.setText(separatorText);
+    }
+
+    static private int lastIndexOfAny(String str, char[] any) {
+        final int lengthAny = any.length;
+        if (lengthAny > 0) {
+            for (int i = str.length() - 1; i >= 0; i--) {
+                char c = str.charAt(i);
+                for (int j = 0; j < lengthAny; j++) {
+                    if (c == any[j]) {
+                        return i;
+                    }
+                }
+            }
+        }
+        return -1;
+    }
+
+    private void updateHeaderMinute(int value) {
+        if (value == 60) {
+            value = 0;
+        }
+        CharSequence text = String.format(mCurrentLocale, "%02d", value);
+        mRadialTimePickerView.announceForAccessibility(text);
+        mMinuteView.setText(text);
+    }
+
+    /**
+     * Show either Hours or Minutes.
+     */
+    private void setCurrentItemShowing(int index, boolean animateCircle, boolean delayLabelAnimate,
+                                       boolean announce) {
+        mRadialTimePickerView.setCurrentItemShowing(index, animateCircle);
+
+        TextView labelToAnimate;
+        if (index == HOUR_INDEX) {
+            int hours = mRadialTimePickerView.getCurrentHour();
+            if (!mIs24HourView) {
+                hours = hours % 12;
+            }
+            mRadialTimePickerView.setContentDescription(mHourPickerDescription + ": " + hours);
+            if (announce) {
+                mRadialTimePickerView.announceForAccessibility(mSelectHours);
+            }
+            labelToAnimate = mHourView;
+        } else {
+            int minutes = mRadialTimePickerView.getCurrentMinute();
+            mRadialTimePickerView.setContentDescription(mMinutePickerDescription + ": " + minutes);
+            if (announce) {
+                mRadialTimePickerView.announceForAccessibility(mSelectMinutes);
+            }
+            labelToAnimate = mMinuteView;
+        }
+
+        int hourColor = (index == HOUR_INDEX) ? mHeaderSelectedColor : mHeaderUnSelectedColor;
+        int minuteColor = (index == MINUTE_INDEX) ? mHeaderSelectedColor : mHeaderUnSelectedColor;
+        mHourView.setTextColor(hourColor);
+        mMinuteView.setTextColor(minuteColor);
+
+        ObjectAnimator pulseAnimator = getPulseAnimator(labelToAnimate, 0.85f, 1.1f);
+        if (delayLabelAnimate) {
+            pulseAnimator.setStartDelay(PULSE_ANIMATOR_DELAY);
+        }
+        pulseAnimator.start();
+    }
+
+    /**
+     * For keyboard mode, processes key events.
+     *
+     * @param keyCode the pressed key.
+     *
+     * @return true if the key was successfully processed, false otherwise.
+     */
+    private boolean processKeyUp(int keyCode) {
+        if (keyCode == KeyEvent.KEYCODE_ESCAPE || keyCode == KeyEvent.KEYCODE_BACK) {
+            if (mDismissCallback != null) {
+                mDismissCallback.dismiss(mDelegator, true, getCurrentHour(), getCurrentMinute());
+            }
+            return true;
+        } else if (keyCode == KeyEvent.KEYCODE_TAB) {
+            if(mInKbMode) {
+                if (isTypedTimeFullyLegal()) {
+                    finishKbMode(true);
+                }
+                return true;
+            }
+        } else if (keyCode == KeyEvent.KEYCODE_ENTER) {
+            if (mInKbMode) {
+                if (!isTypedTimeFullyLegal()) {
+                    return true;
+                }
+                finishKbMode(false);
+            }
+            if (mOnTimeChangedListener != null) {
+                mOnTimeChangedListener.onTimeChanged(mDelegator,
+                        mRadialTimePickerView.getCurrentHour(),
+                        mRadialTimePickerView.getCurrentMinute());
+            }
+            if (mDismissCallback != null) {
+                mDismissCallback.dismiss(mDelegator, false, getCurrentHour(), getCurrentMinute());
+            }
+            return true;
+        } else if (keyCode == KeyEvent.KEYCODE_DEL) {
+            if (mInKbMode) {
+                if (!mTypedTimes.isEmpty()) {
+                    int deleted = deleteLastTypedKey();
+                    String deletedKeyStr;
+                    if (deleted == getAmOrPmKeyCode(AM)) {
+                        deletedKeyStr = mAmText;
+                    } else if (deleted == getAmOrPmKeyCode(PM)) {
+                        deletedKeyStr = mPmText;
+                    } else {
+                        deletedKeyStr = String.format("%d", getValFromKeyCode(deleted));
+                    }
+                    mRadialTimePickerView.announceForAccessibility(
+                            String.format(mDeletedKeyFormat, deletedKeyStr));
+                    updateDisplay(true);
+                }
+            }
+        } else if (keyCode == KeyEvent.KEYCODE_0 || keyCode == KeyEvent.KEYCODE_1
+                || keyCode == KeyEvent.KEYCODE_2 || keyCode == KeyEvent.KEYCODE_3
+                || keyCode == KeyEvent.KEYCODE_4 || keyCode == KeyEvent.KEYCODE_5
+                || keyCode == KeyEvent.KEYCODE_6 || keyCode == KeyEvent.KEYCODE_7
+                || keyCode == KeyEvent.KEYCODE_8 || keyCode == KeyEvent.KEYCODE_9
+                || (!mIs24HourView &&
+                (keyCode == getAmOrPmKeyCode(AM) || keyCode == getAmOrPmKeyCode(PM)))) {
+            if (!mInKbMode) {
+                if (mRadialTimePickerView == null) {
+                    // Something's wrong, because time picker should definitely not be null.
+                    Log.e(TAG, "Unable to initiate keyboard mode, TimePicker was null.");
+                    return true;
+                }
+                mTypedTimes.clear();
+                tryStartingKbMode(keyCode);
+                return true;
+            }
+            // We're already in keyboard mode.
+            if (addKeyIfLegal(keyCode)) {
+                updateDisplay(false);
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Try to start keyboard mode with the specified key.
+     *
+     * @param keyCode The key to use as the first press. Keyboard mode will not be started if the
+     * key is not legal to start with. Or, pass in -1 to get into keyboard mode without a starting
+     * key.
+     */
+    private void tryStartingKbMode(int keyCode) {
+        if (keyCode == -1 || addKeyIfLegal(keyCode)) {
+            mInKbMode = true;
+            mDoneButton.setEnabled(false);
+            updateDisplay(false);
+            mRadialTimePickerView.setInputEnabled(false);
+        }
+    }
+
+    private boolean addKeyIfLegal(int keyCode) {
+        // If we're in 24hour mode, we'll need to check if the input is full. If in AM/PM mode,
+        // we'll need to see if AM/PM have been typed.
+        if ((mIs24HourView && mTypedTimes.size() == 4) ||
+                (!mIs24HourView && isTypedTimeFullyLegal())) {
+            return false;
+        }
+
+        mTypedTimes.add(keyCode);
+        if (!isTypedTimeLegalSoFar()) {
+            deleteLastTypedKey();
+            return false;
+        }
+
+        int val = getValFromKeyCode(keyCode);
+        mRadialTimePickerView.announceForAccessibility(String.format("%d", val));
+        // Automatically fill in 0's if AM or PM was legally entered.
+        if (isTypedTimeFullyLegal()) {
+            if (!mIs24HourView && mTypedTimes.size() <= 3) {
+                mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0);
+                mTypedTimes.add(mTypedTimes.size() - 1, KeyEvent.KEYCODE_0);
+            }
+            mDoneButton.setEnabled(true);
+        }
+
+        return true;
+    }
+
+    /**
+     * Traverse the tree to see if the keys that have been typed so far are legal as is,
+     * or may become legal as more keys are typed (excluding backspace).
+     */
+    private boolean isTypedTimeLegalSoFar() {
+        Node node = mLegalTimesTree;
+        for (int keyCode : mTypedTimes) {
+            node = node.canReach(keyCode);
+            if (node == null) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Check if the time that has been typed so far is completely legal, as is.
+     */
+    private boolean isTypedTimeFullyLegal() {
+        if (mIs24HourView) {
+            // For 24-hour mode, the time is legal if the hours and minutes are each legal. Note:
+            // getEnteredTime() will ONLY call isTypedTimeFullyLegal() when NOT in 24hour mode.
+            int[] values = getEnteredTime(null);
+            return (values[0] >= 0 && values[1] >= 0 && values[1] < 60);
+        } else {
+            // For AM/PM mode, the time is legal if it contains an AM or PM, as those can only be
+            // legally added at specific times based on the tree's algorithm.
+            return (mTypedTimes.contains(getAmOrPmKeyCode(AM)) ||
+                    mTypedTimes.contains(getAmOrPmKeyCode(PM)));
+        }
+    }
+
+    private int deleteLastTypedKey() {
+        int deleted = mTypedTimes.remove(mTypedTimes.size() - 1);
+        if (!isTypedTimeFullyLegal()) {
+            mDoneButton.setEnabled(false);
+        }
+        return deleted;
+    }
+
+    /**
+     * Get out of keyboard mode. If there is nothing in typedTimes, revert to TimePicker's time.
+     * @param updateDisplays If true, update the displays with the relevant time.
+     */
+    private void finishKbMode(boolean updateDisplays) {
+        mInKbMode = false;
+        if (!mTypedTimes.isEmpty()) {
+            int values[] = getEnteredTime(null);
+            mRadialTimePickerView.setCurrentHour(values[0]);
+            mRadialTimePickerView.setCurrentMinute(values[1]);
+            if (!mIs24HourView) {
+                mRadialTimePickerView.setAmOrPm(values[2]);
+            }
+            mTypedTimes.clear();
+        }
+        if (updateDisplays) {
+            updateDisplay(false);
+            mRadialTimePickerView.setInputEnabled(true);
+        }
+    }
+
+    /**
+     * Update the hours, minutes, and AM/PM displays with the typed times. If the typedTimes is
+     * empty, either show an empty display (filled with the placeholder text), or update from the
+     * timepicker's values.
+     *
+     * @param allowEmptyDisplay if true, then if the typedTimes is empty, use the placeholder text.
+     * Otherwise, revert to the timepicker's values.
+     */
+    private void updateDisplay(boolean allowEmptyDisplay) {
+        if (!allowEmptyDisplay && mTypedTimes.isEmpty()) {
+            int hour = mRadialTimePickerView.getCurrentHour();
+            int minute = mRadialTimePickerView.getCurrentMinute();
+            updateHeaderHour(hour, true);
+            updateHeaderMinute(minute);
+            if (!mIs24HourView) {
+                updateAmPmDisplay(hour < 12 ? AM : PM);
+            }
+            setCurrentItemShowing(mRadialTimePickerView.getCurrentItemShowing(), true, true, true);
+            mDoneButton.setEnabled(true);
+        } else {
+            boolean[] enteredZeros = {false, false};
+            int[] values = getEnteredTime(enteredZeros);
+            String hourFormat = enteredZeros[0] ? "%02d" : "%2d";
+            String minuteFormat = (enteredZeros[1]) ? "%02d" : "%2d";
+            String hourStr = (values[0] == -1) ? mDoublePlaceholderText :
+                    String.format(hourFormat, values[0]).replace(' ', mPlaceholderText);
+            String minuteStr = (values[1] == -1) ? mDoublePlaceholderText :
+                    String.format(minuteFormat, values[1]).replace(' ', mPlaceholderText);
+            mHourView.setText(hourStr);
+            mHourView.setTextColor(mHeaderUnSelectedColor);
+            mMinuteView.setText(minuteStr);
+            mMinuteView.setTextColor(mHeaderUnSelectedColor);
+            if (!mIs24HourView) {
+                updateAmPmDisplay(values[2]);
+            }
+        }
+    }
+
+    private int getValFromKeyCode(int keyCode) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_0:
+                return 0;
+            case KeyEvent.KEYCODE_1:
+                return 1;
+            case KeyEvent.KEYCODE_2:
+                return 2;
+            case KeyEvent.KEYCODE_3:
+                return 3;
+            case KeyEvent.KEYCODE_4:
+                return 4;
+            case KeyEvent.KEYCODE_5:
+                return 5;
+            case KeyEvent.KEYCODE_6:
+                return 6;
+            case KeyEvent.KEYCODE_7:
+                return 7;
+            case KeyEvent.KEYCODE_8:
+                return 8;
+            case KeyEvent.KEYCODE_9:
+                return 9;
+            default:
+                return -1;
+        }
+    }
+
+    /**
+     * Get the currently-entered time, as integer values of the hours and minutes typed.
+     *
+     * @param enteredZeros A size-2 boolean array, which the caller should initialize, and which
+     * may then be used for the caller to know whether zeros had been explicitly entered as either
+     * hours of minutes. This is helpful for deciding whether to show the dashes, or actual 0's.
+     *
+     * @return A size-3 int array. The first value will be the hours, the second value will be the
+     * minutes, and the third will be either AM or PM.
+     */
+    private int[] getEnteredTime(boolean[] enteredZeros) {
+        int amOrPm = -1;
+        int startIndex = 1;
+        if (!mIs24HourView && isTypedTimeFullyLegal()) {
+            int keyCode = mTypedTimes.get(mTypedTimes.size() - 1);
+            if (keyCode == getAmOrPmKeyCode(AM)) {
+                amOrPm = AM;
+            } else if (keyCode == getAmOrPmKeyCode(PM)){
+                amOrPm = PM;
+            }
+            startIndex = 2;
+        }
+        int minute = -1;
+        int hour = -1;
+        for (int i = startIndex; i <= mTypedTimes.size(); i++) {
+            int val = getValFromKeyCode(mTypedTimes.get(mTypedTimes.size() - i));
+            if (i == startIndex) {
+                minute = val;
+            } else if (i == startIndex+1) {
+                minute += 10 * val;
+                if (enteredZeros != null && val == 0) {
+                    enteredZeros[1] = true;
+                }
+            } else if (i == startIndex+2) {
+                hour = val;
+            } else if (i == startIndex+3) {
+                hour += 10 * val;
+                if (enteredZeros != null && val == 0) {
+                    enteredZeros[0] = true;
+                }
+            }
+        }
+
+        int[] ret = {hour, minute, amOrPm};
+        return ret;
+    }
+
+    /**
+     * Get the keycode value for AM and PM in the current language.
+     */
+    private int getAmOrPmKeyCode(int amOrPm) {
+        // Cache the codes.
+        if (mAmKeyCode == -1 || mPmKeyCode == -1) {
+            // Find the first character in the AM/PM text that is unique.
+            KeyCharacterMap kcm = KeyCharacterMap.load(KeyCharacterMap.VIRTUAL_KEYBOARD);
+            char amChar;
+            char pmChar;
+            for (int i = 0; i < Math.max(mAmText.length(), mPmText.length()); i++) {
+                amChar = mAmText.toLowerCase(mCurrentLocale).charAt(i);
+                pmChar = mPmText.toLowerCase(mCurrentLocale).charAt(i);
+                if (amChar != pmChar) {
+                    KeyEvent[] events = kcm.getEvents(new char[]{amChar, pmChar});
+                    // There should be 4 events: a down and up for both AM and PM.
+                    if (events != null && events.length == 4) {
+                        mAmKeyCode = events[0].getKeyCode();
+                        mPmKeyCode = events[2].getKeyCode();
+                    } else {
+                        Log.e(TAG, "Unable to find keycodes for AM and PM.");
+                    }
+                    break;
+                }
+            }
+        }
+        if (amOrPm == AM) {
+            return mAmKeyCode;
+        } else if (amOrPm == PM) {
+            return mPmKeyCode;
+        }
+
+        return -1;
+    }
+
+    /**
+     * Create a tree for deciding what keys can legally be typed.
+     */
+    private void generateLegalTimesTree() {
+        // Create a quick cache of numbers to their keycodes.
+        final int k0 = KeyEvent.KEYCODE_0;
+        final int k1 = KeyEvent.KEYCODE_1;
+        final int k2 = KeyEvent.KEYCODE_2;
+        final int k3 = KeyEvent.KEYCODE_3;
+        final int k4 = KeyEvent.KEYCODE_4;
+        final int k5 = KeyEvent.KEYCODE_5;
+        final int k6 = KeyEvent.KEYCODE_6;
+        final int k7 = KeyEvent.KEYCODE_7;
+        final int k8 = KeyEvent.KEYCODE_8;
+        final int k9 = KeyEvent.KEYCODE_9;
+
+        // The root of the tree doesn't contain any numbers.
+        mLegalTimesTree = new Node();
+        if (mIs24HourView) {
+            // We'll be re-using these nodes, so we'll save them.
+            Node minuteFirstDigit = new Node(k0, k1, k2, k3, k4, k5);
+            Node minuteSecondDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9);
+            // The first digit must be followed by the second digit.
+            minuteFirstDigit.addChild(minuteSecondDigit);
+
+            // The first digit may be 0-1.
+            Node firstDigit = new Node(k0, k1);
+            mLegalTimesTree.addChild(firstDigit);
+
+            // When the first digit is 0-1, the second digit may be 0-5.
+            Node secondDigit = new Node(k0, k1, k2, k3, k4, k5);
+            firstDigit.addChild(secondDigit);
+            // We may now be followed by the first minute digit. E.g. 00:09, 15:58.
+            secondDigit.addChild(minuteFirstDigit);
+
+            // When the first digit is 0-1, and the second digit is 0-5, the third digit may be 6-9.
+            Node thirdDigit = new Node(k6, k7, k8, k9);
+            // The time must now be finished. E.g. 0:55, 1:08.
+            secondDigit.addChild(thirdDigit);
+
+            // When the first digit is 0-1, the second digit may be 6-9.
+            secondDigit = new Node(k6, k7, k8, k9);
+            firstDigit.addChild(secondDigit);
+            // We must now be followed by the first minute digit. E.g. 06:50, 18:20.
+            secondDigit.addChild(minuteFirstDigit);
+
+            // The first digit may be 2.
+            firstDigit = new Node(k2);
+            mLegalTimesTree.addChild(firstDigit);
+
+            // When the first digit is 2, the second digit may be 0-3.
+            secondDigit = new Node(k0, k1, k2, k3);
+            firstDigit.addChild(secondDigit);
+            // We must now be followed by the first minute digit. E.g. 20:50, 23:09.
+            secondDigit.addChild(minuteFirstDigit);
+
+            // When the first digit is 2, the second digit may be 4-5.
+            secondDigit = new Node(k4, k5);
+            firstDigit.addChild(secondDigit);
+            // We must now be followd by the last minute digit. E.g. 2:40, 2:53.
+            secondDigit.addChild(minuteSecondDigit);
+
+            // The first digit may be 3-9.
+            firstDigit = new Node(k3, k4, k5, k6, k7, k8, k9);
+            mLegalTimesTree.addChild(firstDigit);
+            // We must now be followed by the first minute digit. E.g. 3:57, 8:12.
+            firstDigit.addChild(minuteFirstDigit);
+        } else {
+            // We'll need to use the AM/PM node a lot.
+            // Set up AM and PM to respond to "a" and "p".
+            Node ampm = new Node(getAmOrPmKeyCode(AM), getAmOrPmKeyCode(PM));
+
+            // The first hour digit may be 1.
+            Node firstDigit = new Node(k1);
+            mLegalTimesTree.addChild(firstDigit);
+            // We'll allow quick input of on-the-hour times. E.g. 1pm.
+            firstDigit.addChild(ampm);
+
+            // When the first digit is 1, the second digit may be 0-2.
+            Node secondDigit = new Node(k0, k1, k2);
+            firstDigit.addChild(secondDigit);
+            // Also for quick input of on-the-hour times. E.g. 10pm, 12am.
+            secondDigit.addChild(ampm);
+
+            // When the first digit is 1, and the second digit is 0-2, the third digit may be 0-5.
+            Node thirdDigit = new Node(k0, k1, k2, k3, k4, k5);
+            secondDigit.addChild(thirdDigit);
+            // The time may be finished now. E.g. 1:02pm, 1:25am.
+            thirdDigit.addChild(ampm);
+
+            // When the first digit is 1, the second digit is 0-2, and the third digit is 0-5,
+            // the fourth digit may be 0-9.
+            Node fourthDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9);
+            thirdDigit.addChild(fourthDigit);
+            // The time must be finished now. E.g. 10:49am, 12:40pm.
+            fourthDigit.addChild(ampm);
+
+            // When the first digit is 1, and the second digit is 0-2, the third digit may be 6-9.
+            thirdDigit = new Node(k6, k7, k8, k9);
+            secondDigit.addChild(thirdDigit);
+            // The time must be finished now. E.g. 1:08am, 1:26pm.
+            thirdDigit.addChild(ampm);
+
+            // When the first digit is 1, the second digit may be 3-5.
+            secondDigit = new Node(k3, k4, k5);
+            firstDigit.addChild(secondDigit);
+
+            // When the first digit is 1, and the second digit is 3-5, the third digit may be 0-9.
+            thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9);
+            secondDigit.addChild(thirdDigit);
+            // The time must be finished now. E.g. 1:39am, 1:50pm.
+            thirdDigit.addChild(ampm);
+
+            // The hour digit may be 2-9.
+            firstDigit = new Node(k2, k3, k4, k5, k6, k7, k8, k9);
+            mLegalTimesTree.addChild(firstDigit);
+            // We'll allow quick input of on-the-hour-times. E.g. 2am, 5pm.
+            firstDigit.addChild(ampm);
+
+            // When the first digit is 2-9, the second digit may be 0-5.
+            secondDigit = new Node(k0, k1, k2, k3, k4, k5);
+            firstDigit.addChild(secondDigit);
+
+            // When the first digit is 2-9, and the second digit is 0-5, the third digit may be 0-9.
+            thirdDigit = new Node(k0, k1, k2, k3, k4, k5, k6, k7, k8, k9);
+            secondDigit.addChild(thirdDigit);
+            // The time must be finished now. E.g. 2:57am, 9:30pm.
+            thirdDigit.addChild(ampm);
+        }
+    }
+
+    /**
+     * Simple node class to be used for traversal to check for legal times.
+     * mLegalKeys represents the keys that can be typed to get to the node.
+     * mChildren are the children that can be reached from this node.
+     */
+    private class Node {
+        private int[] mLegalKeys;
+        private ArrayList<Node> mChildren;
+
+        public Node(int... legalKeys) {
+            mLegalKeys = legalKeys;
+            mChildren = new ArrayList<Node>();
+        }
+
+        public void addChild(Node child) {
+            mChildren.add(child);
+        }
+
+        public boolean containsKey(int key) {
+            for (int i = 0; i < mLegalKeys.length; i++) {
+                if (mLegalKeys[i] == key) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public Node canReach(int key) {
+            if (mChildren == null) {
+                return null;
+            }
+            for (Node child : mChildren) {
+                if (child.containsKey(key)) {
+                    return child;
+                }
+            }
+            return null;
+        }
+    }
+
+    private class KeyboardListener implements View.OnKeyListener {
+        @Override
+        public boolean onKey(View v, int keyCode, KeyEvent event) {
+            if (event.getAction() == KeyEvent.ACTION_UP) {
+                return processKeyUp(keyCode);
+            }
+            return false;
+        }
+    }
+
+    /**
+     * Render an animator to pulsate a view in place.
+     *
+     * @param labelToAnimate the view to pulsate.
+     * @return The animator object. Use .start() to begin.
+     */
+    private static ObjectAnimator getPulseAnimator(View labelToAnimate, float decreaseRatio,
+            float increaseRatio) {
+        final Keyframe k0 = Keyframe.ofFloat(0f, 1f);
+        final Keyframe k1 = Keyframe.ofFloat(0.275f, decreaseRatio);
+        final Keyframe k2 = Keyframe.ofFloat(0.69f, increaseRatio);
+        final Keyframe k3 = Keyframe.ofFloat(1f, 1f);
+
+        PropertyValuesHolder scaleX = PropertyValuesHolder.ofKeyframe("scaleX", k0, k1, k2, k3);
+        PropertyValuesHolder scaleY = PropertyValuesHolder.ofKeyframe("scaleY", k0, k1, k2, k3);
+        ObjectAnimator pulseAnimator =
+                ObjectAnimator.ofPropertyValuesHolder(labelToAnimate, scaleX, scaleY);
+        pulseAnimator.setDuration(PULSE_ANIMATOR_DURATION);
+
+        return pulseAnimator;
+    }
+}
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index e38dfa7..bf5e49b9 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -16,6 +16,7 @@
 
 package android.widget;
 
+import android.annotation.IntDef;
 import android.app.INotificationManager;
 import android.app.ITransientNotification;
 import android.content.Context;
@@ -29,11 +30,13 @@
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
 /**
  * A toast is a view containing a quick little message for the user.  The toast class
  * helps you create and show those.
@@ -61,6 +64,11 @@
     static final String TAG = "Toast";
     static final boolean localLOGV = false;
 
+    /** @hide */
+    @IntDef({LENGTH_SHORT, LENGTH_LONG})
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface Duration {}
+
     /**
      * Show the view or text notification for a short period of time.  This time
      * could be user-definable.  This is the default.
@@ -152,7 +160,7 @@
      * @see #LENGTH_SHORT
      * @see #LENGTH_LONG
      */
-    public void setDuration(int duration) {
+    public void setDuration(@Duration int duration) {
         mDuration = duration;
     }
 
@@ -160,6 +168,7 @@
      * Return the duration.
      * @see #setDuration
      */
+    @Duration
     public int getDuration() {
         return mDuration;
     }
@@ -237,7 +246,7 @@
      *                 {@link #LENGTH_LONG}
      *
      */
-    public static Toast makeText(Context context, CharSequence text, int duration) {
+    public static Toast makeText(Context context, CharSequence text, @Duration int duration) {
         Toast result = new Toast(context);
 
         LayoutInflater inflate = (LayoutInflater)
@@ -263,7 +272,7 @@
      *
      * @throws Resources.NotFoundException if the resource can't be found.
      */
-    public static Toast makeText(Context context, int resId, int duration)
+    public static Toast makeText(Context context, int resId, @Duration int duration)
                                 throws Resources.NotFoundException {
         return makeText(context, context.getResources().getText(resId), duration);
     }
diff --git a/core/java/android/widget/ToggleButton.java b/core/java/android/widget/ToggleButton.java
index cedc777..28519d1 100644
--- a/core/java/android/widget/ToggleButton.java
+++ b/core/java/android/widget/ToggleButton.java
@@ -16,7 +16,6 @@
 
 package android.widget;
 
-
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
@@ -25,8 +24,6 @@
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityNodeInfo;
 
-import com.android.internal.R;
-
 /**
  * Displays checked/unchecked states as a button
  * with a "light" indicator and by default accompanied with the text "ON" or "OFF".
@@ -46,13 +43,12 @@
 
     private static final int NO_ALPHA = 0xFF;
     private float mDisabledAlpha;
-    
-    public ToggleButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        
-        TypedArray a =
-            context.obtainStyledAttributes(
-                    attrs, com.android.internal.R.styleable.ToggleButton, defStyle, 0);
+
+    public ToggleButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.ToggleButton, defStyleAttr, defStyleRes);
         mTextOn = a.getText(com.android.internal.R.styleable.ToggleButton_textOn);
         mTextOff = a.getText(com.android.internal.R.styleable.ToggleButton_textOff);
         mDisabledAlpha = a.getFloat(com.android.internal.R.styleable.ToggleButton_disabledAlpha, 0.5f);
@@ -60,6 +56,10 @@
         a.recycle();
     }
 
+    public ToggleButton(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     public ToggleButton(Context context, AttributeSet attrs) {
         this(context, attrs, com.android.internal.R.attr.buttonStyleToggle);
     }
diff --git a/core/java/android/widget/Toolbar.java b/core/java/android/widget/Toolbar.java
new file mode 100644
index 0000000..075feba
--- /dev/null
+++ b/core/java/android/widget/Toolbar.java
@@ -0,0 +1,1048 @@
+/*
+ * Copyright (C) 2014 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 android.widget;
+
+import android.annotation.NonNull;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewDebug;
+import android.view.ViewGroup;
+import com.android.internal.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A standard toolbar for use within application content.
+ *
+ * <p>A Toolbar is a generalization of {@link android.app.ActionBar action bars} for use
+ * within application layouts. While an action bar is traditionally part of an
+ * {@link android.app.Activity Activity's} opaque window decor controlled by the framework,
+ * a Toolbar may be placed at any arbitrary level of nesting within a view hierarchy.
+ * An application may choose to designate a Toolbar as the action bar for an Activity
+ * using the {@link android.app.Activity#setActionBar(Toolbar) setActionBar()} method.</p>
+ *
+ * <p>Toolbar supports a more focused feature set than ActionBar. From start to end, a toolbar
+ * may contain a combination of the following optional elements:
+ *
+ * <ul>
+ *     <li><em>A navigation button.</em> This may be an Up arrow, navigation menu toggle, close,
+ *     collapse, done or another glyph of the app's choosing. This button should always be used
+ *     to access other navigational destinations within the container of the Toolbar and
+ *     its signified content or otherwise leave the current context signified by the Toolbar.</li>
+ *     <li><em>A branded logo image.</em> This may extend to the height of the bar and can be
+ *     arbitrarily wide.</li>
+ *     <li><em>A title and subtitle.</em> The title should be a signpost for the Toolbar's current
+ *     position in the navigation hierarchy and the content contained there. The subtitle,
+ *     if present should indicate any extended information about the current content.
+ *     If an app uses a logo image it should strongly consider omitting a title and subtitle.</li>
+ *     <li><em>One or more custom views.</em> The application may add arbitrary child views
+ *     to the Toolbar. They will appear at this position within the layout. If a child view's
+ *     {@link LayoutParams} indicates a {@link Gravity} value of
+ *     {@link Gravity#CENTER_HORIZONTAL CENTER_HORIZONTAL} the view will attempt to center
+ *     within the available space remaining in the Toolbar after all other elements have been
+ *     measured.</li>
+ *     <li><em>An {@link ActionMenuView action menu}.</em> The menu of actions will pin to the
+ *     end of the Toolbar offering a few
+ *     <a href="http://developer.android.com/design/patterns/actionbar.html#ActionButtons">
+ *         frequent, important or typical</a> actions along with an optional overflow menu for
+ *         additional actions.</li>
+ * </ul>
+ * </p>
+ *
+ * <p>In modern Android UIs developers should lean more on a visually distinct color scheme for
+ * toolbars than on their application icon. The use of application icon plus title as a standard
+ * layout is discouraged on API 21 devices and newer.</p>
+ */
+public class Toolbar extends ViewGroup {
+    private ActionMenuView mMenuView;
+    private TextView mTitleTextView;
+    private TextView mSubtitleTextView;
+    private ImageButton mNavButtonView;
+    private ImageView mLogoView;
+
+    private int mTitleTextAppearance;
+    private int mSubtitleTextAppearance;
+    private int mTitleMarginStart;
+    private int mTitleMarginEnd;
+    private int mTitleMarginTop;
+    private int mTitleMarginBottom;
+
+    private int mGravity = Gravity.START | Gravity.CENTER_VERTICAL;
+
+    private CharSequence mTitleText;
+    private CharSequence mSubtitleText;
+
+    // Clear me after use.
+    private final ArrayList<View> mTempViews = new ArrayList<View>();
+
+    private OnMenuItemClickListener mOnMenuItemClickListener;
+
+    private final ActionMenuView.OnMenuItemClickListener mMenuViewItemClickListener =
+            new ActionMenuView.OnMenuItemClickListener() {
+                @Override
+                public boolean onMenuItemClick(MenuItem item) {
+                    if (mOnMenuItemClickListener != null) {
+                        return mOnMenuItemClickListener.onMenuItemClick(item);
+                    }
+                    return false;
+                }
+            };
+
+    public Toolbar(Context context) {
+        this(context, null);
+    }
+
+    public Toolbar(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.toolbarStyle);
+    }
+
+    public Toolbar(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public Toolbar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.Toolbar,
+                defStyleAttr, defStyleRes);
+
+        mTitleTextAppearance = a.getResourceId(R.styleable.Toolbar_titleTextAppearance, 0);
+        mSubtitleTextAppearance = a.getResourceId(R.styleable.Toolbar_subtitleTextAppearance, 0);
+        mGravity = a.getInteger(R.styleable.Toolbar_gravity, mGravity);
+        mTitleMarginStart = mTitleMarginEnd = Math.max(0, a.getDimensionPixelOffset(
+                R.styleable.Toolbar_titleMargins, -1));
+
+        final int marginStart = a.getDimensionPixelOffset(R.styleable.Toolbar_titleMarginStart, -1);
+        if (marginStart >= 0) {
+            mTitleMarginStart = marginStart;
+        }
+
+        final int marginEnd = a.getDimensionPixelOffset(R.styleable.Toolbar_titleMarginEnd, -1);
+        if (marginEnd >= 0) {
+            mTitleMarginEnd = marginEnd;
+        }
+
+        final int marginTop = a.getDimensionPixelOffset(R.styleable.Toolbar_titleMarginTop, -1);
+        if (marginTop >= 0) {
+            mTitleMarginTop = marginTop;
+        }
+
+        final int marginBottom = a.getDimensionPixelOffset(R.styleable.Toolbar_titleMarginBottom,
+                -1);
+        if (marginBottom >= 0) {
+            mTitleMarginBottom = marginBottom;
+        }
+
+        final CharSequence title = a.getText(R.styleable.Toolbar_title);
+        if (!TextUtils.isEmpty(title)) {
+            setTitle(title);
+        }
+
+        final CharSequence subtitle = a.getText(R.styleable.Toolbar_subtitle);
+        if (!TextUtils.isEmpty(subtitle)) {
+            setSubtitle(title);
+        }
+        a.recycle();
+    }
+
+    /**
+     * Set a logo drawable from a resource id.
+     *
+     * <p>This drawable should generally take the place of title text. The logo cannot be
+     * clicked. Apps using a logo should also supply a description using
+     * {@link #setLogoDescription(int)}.</p>
+     *
+     * @param resId ID of a drawable resource
+     */
+    public void setLogo(int resId) {
+        setLogo(getContext().getDrawable(resId));
+    }
+
+    /**
+     * Set a logo drawable.
+     *
+     * <p>This drawable should generally take the place of title text. The logo cannot be
+     * clicked. Apps using a logo should also supply a description using
+     * {@link #setLogoDescription(int)}.</p>
+     *
+     * @param drawable Drawable to use as a logo
+     */
+    public void setLogo(Drawable drawable) {
+        if (drawable != null) {
+            if (mLogoView == null) {
+                mLogoView = new ImageView(getContext());
+            }
+            if (mLogoView.getParent() == null) {
+                addSystemView(mLogoView);
+            }
+        } else if (mLogoView != null && mLogoView.getParent() != null) {
+            removeView(mLogoView);
+        }
+        if (mLogoView != null) {
+            mLogoView.setImageDrawable(drawable);
+        }
+    }
+
+    /**
+     * Return the current logo drawable.
+     *
+     * @return The current logo drawable
+     * @see #setLogo(int)
+     * @see #setLogo(android.graphics.drawable.Drawable)
+     */
+    public Drawable getLogo() {
+        return mLogoView != null ? mLogoView.getDrawable() : null;
+    }
+
+    /**
+     * Set a description of the toolbar's logo.
+     *
+     * <p>This description will be used for accessibility or other similar descriptions
+     * of the UI.</p>
+     *
+     * @param resId String resource id
+     */
+    public void setLogoDescription(int resId) {
+        setLogoDescription(getContext().getText(resId));
+    }
+
+    /**
+     * Set a description of the toolbar's logo.
+     *
+     * <p>This description will be used for accessibility or other similar descriptions
+     * of the UI.</p>
+     *
+     * @param description Description to set
+     */
+    public void setLogoDescription(CharSequence description) {
+        if (!TextUtils.isEmpty(description) && mLogoView == null) {
+            mLogoView = new ImageView(getContext());
+        }
+        if (mLogoView != null) {
+            mLogoView.setContentDescription(description);
+        }
+    }
+
+    /**
+     * Return the description of the toolbar's logo.
+     *
+     * @return A description of the logo
+     */
+    public CharSequence getLogoDescription() {
+        return mLogoView != null ? mLogoView.getContentDescription() : null;
+    }
+
+    /**
+     * Return the current title displayed in the toolbar.
+     *
+     * @return The current title
+     */
+    public CharSequence getTitle() {
+        return mTitleText;
+    }
+
+    /**
+     * Set the title of this toolbar.
+     *
+     * <p>A title should be used as the anchor for a section of content. It should
+     * describe or name the content being viewed.</p>
+     *
+     * @param resId Resource ID of a string to set as the title
+     */
+    public void setTitle(int resId) {
+        setTitle(getContext().getText(resId));
+    }
+
+    /**
+     * Set the title of this toolbar.
+     *
+     * <p>A title should be used as the anchor for a section of content. It should
+     * describe or name the content being viewed.</p>
+     *
+     * @param title Title to set
+     */
+    public void setTitle(CharSequence title) {
+        if (!TextUtils.isEmpty(title)) {
+            if (mTitleTextView == null) {
+                final Context context = getContext();
+                mTitleTextView = new TextView(context);
+                mTitleTextView.setTextAppearance(context, mTitleTextAppearance);
+            }
+            if (mTitleTextView.getParent() == null) {
+                addSystemView(mTitleTextView);
+            }
+        } else if (mTitleTextView != null && mTitleTextView.getParent() != null) {
+            removeView(mTitleTextView);
+        }
+        if (mTitleTextView != null) {
+            mTitleTextView.setText(title);
+        }
+        mTitleText = title;
+    }
+
+    /**
+     * Return the subtitle of this toolbar.
+     *
+     * @return The current subtitle
+     */
+    public CharSequence getSubtitle() {
+        return mSubtitleText;
+    }
+
+    /**
+     * Set the subtitle of this toolbar.
+     *
+     * <p>Subtitles should express extended information about the current content.</p>
+     *
+     * @param resId String resource ID
+     */
+    public void setSubtitle(int resId) {
+        setSubtitle(getContext().getText(resId));
+    }
+
+    /**
+     * Set the subtitle of this toolbar.
+     *
+     * <p>Subtitles should express extended information about the current content.</p>
+     *
+     * @param subtitle Subtitle to set
+     */
+    public void setSubtitle(CharSequence subtitle) {
+        if (!TextUtils.isEmpty(subtitle)) {
+            if (mSubtitleTextView == null) {
+                final Context context = getContext();
+                mSubtitleTextView = new TextView(context);
+                mSubtitleTextView.setTextAppearance(context, mSubtitleTextAppearance);
+            }
+            if (mSubtitleTextView.getParent() == null) {
+                addSystemView(mSubtitleTextView);
+            }
+        } else if (mSubtitleTextView != null && mSubtitleTextView.getParent() != null) {
+            removeView(mSubtitleTextView);
+        }
+        if (mSubtitleTextView != null) {
+            mSubtitleTextView.setText(subtitle);
+        }
+        mSubtitleText = subtitle;
+    }
+
+    /**
+     * Set the icon to use for the toolbar's navigation button.
+     *
+     * <p>The navigation button appears at the start of the toolbar if present. Setting an icon
+     * will make the navigation button visible.</p>
+     *
+     * <p>If you use a navigation icon you should also set a description for its action using
+     * {@link #setNavigationDescription(int)}. This is used for accessibility and tooltips.</p>
+     *
+     * @param resId Resource ID of a drawable to set
+     */
+    public void setNavigationIcon(int resId) {
+        setNavigationIcon(getContext().getDrawable(resId));
+    }
+
+    /**
+     * Set the icon to use for the toolbar's navigation button.
+     *
+     * <p>The navigation button appears at the start of the toolbar if present. Setting an icon
+     * will make the navigation button visible.</p>
+     *
+     * <p>If you use a navigation icon you should also set a description for its action using
+     * {@link #setNavigationDescription(int)}. This is used for accessibility and tooltips.</p>
+     *
+     * @param icon Drawable to set
+     */
+    public void setNavigationIcon(Drawable icon) {
+        if (icon != null) {
+            ensureNavButtonView();
+            if (mNavButtonView.getParent() == null) {
+                addSystemView(mNavButtonView);
+            }
+        } else if (mNavButtonView != null && mNavButtonView.getParent() != null) {
+            removeView(mNavButtonView);
+        }
+        if (mNavButtonView != null) {
+            mNavButtonView.setImageDrawable(icon);
+        }
+    }
+
+    /**
+     * Return the current drawable used as the navigation icon.
+     *
+     * @return The navigation icon drawable
+     */
+    public Drawable getNavigationIcon() {
+        return mNavButtonView != null ? mNavButtonView.getDrawable() : null;
+    }
+
+    /**
+     * Set a description for the navigation button.
+     *
+     * <p>This description string is used for accessibility, tooltips and other facilities
+     * to improve discoverability.</p>
+     *
+     * @param resId Resource ID of a string to set
+     */
+    public void setNavigationDescription(int resId) {
+        setNavigationDescription(getContext().getText(resId));
+    }
+
+    /**
+     * Set a description for the navigation button.
+     *
+     * <p>This description string is used for accessibility, tooltips and other facilities
+     * to improve discoverability.</p>
+     *
+     * @param description String to set as the description
+     */
+    public void setNavigationDescription(CharSequence description) {
+        if (!TextUtils.isEmpty(description)) {
+            ensureNavButtonView();
+        }
+        if (mNavButtonView != null) {
+            mNavButtonView.setContentDescription(description);
+        }
+    }
+
+    /**
+     * Set a listener to respond to navigation events.
+     *
+     * <p>This listener will be called whenever the user clicks the navigation button
+     * at the start of the toolbar. An icon must be set for the navigation button to appear.</p>
+     *
+     * @param listener Listener to set
+     * @see #setNavigationIcon(android.graphics.drawable.Drawable)
+     */
+    public void setNavigationOnClickListener(OnClickListener listener) {
+        ensureNavButtonView();
+        mNavButtonView.setOnClickListener(listener);
+    }
+
+    /**
+     * Return the Menu shown in the toolbar.
+     *
+     * <p>Applications that wish to populate the toolbar's menu can do so from here. To use
+     * an XML menu resource, use {@link #inflateMenu(int)}.</p>
+     *
+     * @return The toolbar's Menu
+     */
+    public Menu getMenu() {
+        if (mMenuView == null) {
+            mMenuView = new ActionMenuView(getContext());
+            mMenuView.setOnMenuItemClickListener(mMenuViewItemClickListener);
+            addSystemView(mMenuView);
+        }
+        return mMenuView.getMenu();
+    }
+
+    private MenuInflater getMenuInflater() {
+        return new MenuInflater(getContext());
+    }
+
+    /**
+     * Inflate a menu resource into this toolbar.
+     *
+     * <p>Inflate an XML menu resource into this toolbar. Existing items in the menu will not
+     * be modified or removed.</p>
+     *
+     * @param resId ID of a menu resource to inflate
+     */
+    public void inflateMenu(int resId) {
+        getMenuInflater().inflate(resId, getMenu());
+    }
+
+    /**
+     * Set a listener to respond to menu item click events.
+     *
+     * <p>This listener will be invoked whenever a user selects a menu item from
+     * the action buttons presented at the end of the toolbar or the associated overflow.</p>
+     *
+     * @param listener Listener to set
+     */
+    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
+        mOnMenuItemClickListener = listener;
+    }
+
+    private void ensureNavButtonView() {
+        if (mNavButtonView == null) {
+            mNavButtonView = new ImageButton(getContext(), null, R.attr.borderlessButtonStyle);
+        }
+    }
+
+    private void addSystemView(View v) {
+        final LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT);
+        lp.mViewType = LayoutParams.SYSTEM;
+        addView(v, lp);
+    }
+
+    @Override
+    protected Parcelable onSaveInstanceState() {
+        SavedState state = new SavedState(super.onSaveInstanceState());
+        return state;
+    }
+
+    @Override
+    protected void onRestoreInstanceState(Parcelable state) {
+        final SavedState ss = (SavedState) state;
+        super.onRestoreInstanceState(ss.getSuperState());
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = 0;
+        int height = 0;
+        int childState = 0;
+
+        // System views measure first.
+
+        if (shouldLayout(mNavButtonView)) {
+            measureChildWithMargins(mNavButtonView, widthMeasureSpec, width, heightMeasureSpec, 0);
+            width += mNavButtonView.getMeasuredWidth() + getHorizontalMargins(mNavButtonView);
+            height = Math.max(height, mNavButtonView.getMeasuredHeight() +
+                    getVerticalMargins(mNavButtonView));
+            childState = combineMeasuredStates(childState, mNavButtonView.getMeasuredState());
+        }
+
+        if (shouldLayout(mMenuView)) {
+            measureChildWithMargins(mMenuView, widthMeasureSpec, width, heightMeasureSpec, 0);
+            width += mMenuView.getMeasuredWidth() + getHorizontalMargins(mMenuView);
+            height = Math.max(height, mMenuView.getMeasuredHeight() +
+                    getVerticalMargins(mMenuView));
+            childState = combineMeasuredStates(childState, mMenuView.getMeasuredState());
+        }
+
+        if (shouldLayout(mLogoView)) {
+            measureChildWithMargins(mLogoView, widthMeasureSpec, width, heightMeasureSpec, 0);
+            width += mLogoView.getMeasuredWidth() + getHorizontalMargins(mLogoView);
+            height = Math.max(height, mLogoView.getMeasuredHeight() +
+                    getVerticalMargins(mLogoView));
+            childState = combineMeasuredStates(childState, mLogoView.getMeasuredState());
+        }
+
+        int titleWidth = 0;
+        int titleHeight = 0;
+        final int titleVertMargins = mTitleMarginTop + mTitleMarginBottom;
+        final int titleHorizMargins = mTitleMarginStart + mTitleMarginEnd;
+        if (shouldLayout(mTitleTextView)) {
+            measureChildWithMargins(mTitleTextView, widthMeasureSpec, width + titleHorizMargins,
+                    heightMeasureSpec, titleVertMargins);
+            titleWidth = mTitleTextView.getMeasuredWidth() + getHorizontalMargins(mTitleTextView);
+            titleHeight = mTitleTextView.getMeasuredHeight() + getVerticalMargins(mTitleTextView);
+            childState = combineMeasuredStates(childState, mTitleTextView.getMeasuredState());
+        }
+        if (shouldLayout(mSubtitleTextView)) {
+            measureChildWithMargins(mSubtitleTextView, widthMeasureSpec, width + titleHorizMargins,
+                    heightMeasureSpec, titleHeight + titleVertMargins);
+            titleWidth = Math.max(titleWidth, mSubtitleTextView.getMeasuredWidth() +
+                    getHorizontalMargins(mSubtitleTextView));
+            titleHeight += mSubtitleTextView.getMeasuredHeight() +
+                    getVerticalMargins(mSubtitleTextView);
+            childState = combineMeasuredStates(childState, mSubtitleTextView.getMeasuredState());
+        }
+
+        width += titleWidth;
+        height = Math.max(height, titleHeight);
+
+        final int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            final View child = getChildAt(i);
+            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+            if (lp.mViewType == LayoutParams.SYSTEM || !shouldLayout(child)) {
+                // We already got all system views above. Skip them and GONE views.
+                continue;
+            }
+
+            measureChildWithMargins(child, widthMeasureSpec, width, heightMeasureSpec, 0);
+            width += child.getMeasuredWidth() + getHorizontalMargins(child);
+            height = Math.max(height, child.getMeasuredHeight() + getVerticalMargins(child));
+            childState = combineMeasuredStates(childState, child.getMeasuredState());
+        }
+
+        // Measurement already took padding into account for available space for the children,
+        // add it in for the final size.
+        width += getPaddingLeft() + getPaddingRight();
+        height += getPaddingTop() + getPaddingBottom();
+
+        final int measuredWidth = resolveSizeAndState(
+                Math.max(width, getSuggestedMinimumWidth()),
+                widthMeasureSpec, childState & MEASURED_STATE_MASK);
+        final int measuredHeight = resolveSizeAndState(
+                Math.max(height, getSuggestedMinimumHeight()),
+                heightMeasureSpec, childState << MEASURED_HEIGHT_STATE_SHIFT);
+        setMeasuredDimension(measuredWidth, measuredHeight);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+        final boolean isRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
+        final int width = getWidth();
+        final int height = getHeight();
+        final int paddingLeft = getPaddingLeft();
+        final int paddingRight = getPaddingRight();
+        final int paddingTop = getPaddingTop();
+        final int paddingBottom = getPaddingBottom();
+        int left = paddingLeft;
+        int right = width - paddingRight;
+
+        if (shouldLayout(mNavButtonView)) {
+            if (isRtl) {
+                right = layoutChildRight(mNavButtonView, right);
+            } else {
+                left = layoutChildLeft(mNavButtonView, left);
+            }
+        }
+
+        if (shouldLayout(mMenuView)) {
+            if (isRtl) {
+                left = layoutChildLeft(mMenuView, left);
+            } else {
+                right = layoutChildRight(mMenuView, right);
+            }
+        }
+
+        if (shouldLayout(mLogoView)) {
+            if (isRtl) {
+                right = layoutChildRight(mLogoView, right);
+            } else {
+                left = layoutChildLeft(mLogoView, left);
+            }
+        }
+
+        final boolean layoutTitle = shouldLayout(mTitleTextView);
+        final boolean layoutSubtitle = shouldLayout(mSubtitleTextView);
+        int titleHeight = 0;
+        if (layoutTitle) {
+            final LayoutParams lp = (LayoutParams) mTitleTextView.getLayoutParams();
+            titleHeight += lp.topMargin + mTitleTextView.getMeasuredHeight() + lp.bottomMargin;
+        }
+        if (layoutSubtitle) {
+            final LayoutParams lp = (LayoutParams) mSubtitleTextView.getLayoutParams();
+            titleHeight += lp.bottomMargin + mTitleTextView.getMeasuredHeight() + lp.bottomMargin;
+        }
+
+        if (layoutTitle || layoutSubtitle) {
+            int titleTop;
+            switch (mGravity & Gravity.VERTICAL_GRAVITY_MASK) {
+                case Gravity.TOP:
+                    titleTop = getPaddingTop();
+                    break;
+                default:
+                case Gravity.CENTER_VERTICAL:
+                    final View child = layoutTitle ? mTitleTextView : mSubtitleTextView;
+                    final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                    final int space = height - paddingTop - paddingBottom;
+                    int spaceAbove = (space - titleHeight) / 2;
+                    if (spaceAbove < lp.topMargin + mTitleMarginTop) {
+                        spaceAbove = lp.topMargin + mTitleMarginTop;
+                    } else {
+                        final int spaceBelow = height - paddingBottom - titleHeight -
+                                spaceAbove - paddingTop;
+                        if (spaceBelow < lp.bottomMargin + mTitleMarginBottom) {
+                            spaceAbove = Math.max(0, spaceAbove -
+                                    (lp.bottomMargin + mTitleMarginBottom - spaceBelow));
+                        }
+                    }
+                    titleTop = paddingTop + spaceAbove;
+                    break;
+                case Gravity.BOTTOM:
+                    titleTop = height - paddingBottom - titleHeight;
+                    break;
+            }
+            if (isRtl) {
+                int titleRight = right;
+                int subtitleRight = right;
+                titleTop += mTitleMarginTop;
+                if (layoutTitle) {
+                    final LayoutParams lp = (LayoutParams) mTitleTextView.getLayoutParams();
+                    titleRight -= lp.rightMargin + mTitleMarginStart;
+                    titleTop += lp.topMargin;
+                    final int titleLeft = titleRight - mTitleTextView.getMeasuredWidth();
+                    final int titleBottom = titleTop + mTitleTextView.getMeasuredHeight();
+                    mTitleTextView.layout(titleLeft, titleTop, titleRight, titleBottom);
+                    titleRight = titleLeft - lp.leftMargin - mTitleMarginEnd;
+                    titleTop = titleBottom + lp.bottomMargin;
+                }
+                if (layoutSubtitle) {
+                    final LayoutParams lp = (LayoutParams) mSubtitleTextView.getLayoutParams();
+                    subtitleRight -= lp.rightMargin + mTitleMarginStart;
+                    titleTop += lp.topMargin;
+                    final int subtitleLeft = subtitleRight - mSubtitleTextView.getMeasuredWidth();
+                    final int subtitleBottom = titleTop + mSubtitleTextView.getMeasuredHeight();
+                    mSubtitleTextView.layout(subtitleLeft, titleTop, subtitleRight, subtitleBottom);
+                    subtitleRight = subtitleRight - lp.leftMargin - mTitleMarginEnd;
+                    titleTop = subtitleBottom + lp.bottomMargin;
+                }
+                right = Math.max(titleRight, subtitleRight);
+            } else {
+                int titleLeft = left;
+                int subtitleLeft = left;
+                titleTop += mTitleMarginTop;
+                if (layoutTitle) {
+                    final LayoutParams lp = (LayoutParams) mTitleTextView.getLayoutParams();
+                    titleLeft += lp.leftMargin + mTitleMarginStart;
+                    titleTop += lp.topMargin;
+                    final int titleRight = titleLeft + mTitleTextView.getMeasuredWidth();
+                    final int titleBottom = titleTop + mTitleTextView.getMeasuredHeight();
+                    mTitleTextView.layout(titleLeft, titleTop, titleRight, titleBottom);
+                    titleLeft = titleRight + lp.rightMargin + mTitleMarginEnd;
+                    titleTop = titleBottom + lp.bottomMargin;
+                }
+                if (layoutSubtitle) {
+                    final LayoutParams lp = (LayoutParams) mSubtitleTextView.getLayoutParams();
+                    subtitleLeft += lp.leftMargin + mTitleMarginStart;
+                    titleTop += lp.topMargin;
+                    final int subtitleRight = subtitleLeft + mSubtitleTextView.getMeasuredWidth();
+                    final int subtitleBottom = titleTop + mSubtitleTextView.getMeasuredHeight();
+                    mSubtitleTextView.layout(subtitleLeft, titleTop, subtitleRight, subtitleBottom);
+                    subtitleLeft = subtitleRight + lp.rightMargin + mTitleMarginEnd;
+                    titleTop = subtitleBottom + lp.bottomMargin;
+                }
+                left = Math.max(titleLeft, subtitleLeft);
+            }
+        }
+
+        // Get all remaining children sorted for layout. This is all prepared
+        // such that absolute layout direction can be used below.
+
+        addCustomViewsWithGravity(mTempViews, Gravity.LEFT);
+        final int leftViewsCount = mTempViews.size();
+        for (int i = 0; i < leftViewsCount; i++) {
+            left = layoutChildLeft(getChildAt(i), left);
+        }
+
+        addCustomViewsWithGravity(mTempViews, Gravity.RIGHT);
+        final int rightViewsCount = mTempViews.size();
+        for (int i = 0; i < rightViewsCount; i++) {
+            right = layoutChildRight(getChildAt(i), right);
+        }
+
+        // Centered views try to center with respect to the whole bar, but views pinned
+        // to the left or right can push the mass of centered views to one side or the other.
+        addCustomViewsWithGravity(mTempViews, Gravity.CENTER);
+        final int centerViewsWidth = getViewListMeasuredWidth(mTempViews);
+        final int parentCenter = paddingLeft + (width - paddingLeft - paddingRight) / 2;
+        final int halfCenterViewsWidth = centerViewsWidth / 2;
+        int centerLeft = parentCenter - halfCenterViewsWidth;
+        final int centerRight = centerLeft + centerViewsWidth;
+        if (centerLeft < left) {
+            centerLeft = left;
+        } else if (centerRight > right) {
+            centerLeft -= centerRight - right;
+        }
+
+        final int centerViewsCount = mTempViews.size();
+        for (int i = 0; i < centerViewsCount; i++) {
+            centerLeft = layoutChildLeft(getChildAt(i), centerLeft);
+        }
+        mTempViews.clear();
+    }
+
+    private int getViewListMeasuredWidth(List<View> views) {
+        int width = 0;
+        final int count = views.size();
+        for (int i = 0; i < count; i++) {
+            final View v = views.get(i);
+            final LayoutParams lp = (LayoutParams) v.getLayoutParams();
+            width += lp.leftMargin + v.getMeasuredWidth() + lp.rightMargin;
+        }
+        return width;
+    }
+
+    private int layoutChildLeft(View child, int left) {
+        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+        left += lp.leftMargin;
+        int top = getChildTop(child);
+        child.layout(left, top, left + child.getMeasuredWidth(), top + child.getMeasuredHeight());
+        left += lp.rightMargin;
+        return left;
+    }
+
+    private int layoutChildRight(View child, int right) {
+        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+        right -= lp.rightMargin;
+        int top = getChildTop(child);
+        child.layout(right - child.getMeasuredWidth(), top, right, top + child.getMeasuredHeight());
+        right -= lp.leftMargin;
+        return right;
+    }
+
+    private int getChildTop(View child) {
+        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+        switch (getChildVerticalGravity(lp.gravity)) {
+            case Gravity.TOP:
+                return getPaddingTop();
+
+            case Gravity.BOTTOM:
+                return getPaddingBottom() - child.getMeasuredHeight() - lp.bottomMargin;
+
+            default:
+            case Gravity.CENTER_VERTICAL:
+                final int paddingTop = getPaddingTop();
+                final int paddingBottom = getPaddingBottom();
+                final int height = getHeight();
+                final int childHeight = child.getMeasuredHeight();
+                final int space = height - paddingTop - paddingBottom;
+                int spaceAbove = (space - childHeight) / 2;
+                if (spaceAbove < lp.topMargin) {
+                    spaceAbove = lp.topMargin;
+                } else {
+                    final int spaceBelow = height - paddingBottom - childHeight -
+                            spaceAbove - paddingTop;
+                    if (spaceBelow < lp.bottomMargin) {
+                        spaceAbove = Math.max(0, spaceAbove - (lp.bottomMargin - spaceBelow));
+                    }
+                }
+                return paddingTop + spaceAbove;
+        }
+    }
+
+    private int getChildVerticalGravity(int gravity) {
+        final int vgrav = gravity & Gravity.VERTICAL_GRAVITY_MASK;
+        switch (vgrav) {
+            case Gravity.TOP:
+            case Gravity.BOTTOM:
+            case Gravity.CENTER_VERTICAL:
+                return vgrav;
+            default:
+                return mGravity & Gravity.VERTICAL_GRAVITY_MASK;
+        }
+    }
+
+    /**
+     * Prepare a list of non-SYSTEM child views. If the layout direction is RTL
+     * this will be in reverse child order.
+     *
+     * @param views List to populate. It will be cleared before use.
+     * @param gravity Horizontal gravity to match against
+     */
+    private void addCustomViewsWithGravity(List<View> views, int gravity) {
+        final boolean isRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
+        final int childCount = getChildCount();
+        final int absGrav = Gravity.getAbsoluteGravity(gravity, getLayoutDirection());
+
+        views.clear();
+
+        if (isRtl) {
+            for (int i = childCount - 1; i >= 0; i--) {
+                final View child = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                if (lp.mViewType != LayoutParams.SYSTEM && shouldLayout(child) &&
+                        getChildHorizontalGravity(lp.gravity) == absGrav) {
+                    views.add(child);
+                }
+
+            }
+        } else {
+            for (int i = 0; i < childCount; i++) {
+                final View child = getChildAt(i);
+                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+                if (lp.mViewType != LayoutParams.SYSTEM && shouldLayout(child) &&
+                        getChildHorizontalGravity(lp.gravity) == absGrav) {
+                    views.add(child);
+                }
+            }
+        }
+    }
+
+    private int getChildHorizontalGravity(int gravity) {
+        final int ld = getLayoutDirection();
+        final int absGrav = Gravity.getAbsoluteGravity(gravity, ld);
+        final int hGrav = absGrav & Gravity.HORIZONTAL_GRAVITY_MASK;
+        switch (hGrav) {
+            case Gravity.LEFT:
+            case Gravity.RIGHT:
+            case Gravity.CENTER_HORIZONTAL:
+                return hGrav;
+            default:
+                return ld == LAYOUT_DIRECTION_RTL ? Gravity.RIGHT : Gravity.LEFT;
+        }
+    }
+
+    private boolean shouldLayout(View view) {
+        return view != null && view.getParent() == this && view.getVisibility() != GONE;
+    }
+
+    private int getHorizontalMargins(View v) {
+        final MarginLayoutParams mlp = (MarginLayoutParams) v.getLayoutParams();
+        return mlp.getMarginStart() + mlp.getMarginEnd();
+    }
+
+    private int getVerticalMargins(View v) {
+        final MarginLayoutParams mlp = (MarginLayoutParams) v.getLayoutParams();
+        return mlp.topMargin + mlp.bottomMargin;
+    }
+
+    @Override
+    public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
+        return super.generateLayoutParams(attrs);
+    }
+
+    @Override
+    protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
+        if (p instanceof LayoutParams) {
+            return new LayoutParams((LayoutParams) p);
+        } else if (p instanceof MarginLayoutParams) {
+            return new LayoutParams((MarginLayoutParams) p);
+        } else {
+            return new LayoutParams(p);
+        }
+    }
+
+    @Override
+    protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
+        return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+    }
+
+    @Override
+    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+        return super.checkLayoutParams(p) && p instanceof LayoutParams;
+    }
+
+    private static boolean isCustomView(View child) {
+        return ((LayoutParams) child.getLayoutParams()).mViewType == LayoutParams.CUSTOM;
+    }
+
+    /**
+     * Interface responsible for receiving menu item click events if the items themselves
+     * do not have individual item click listeners.
+     */
+    public interface OnMenuItemClickListener {
+        /**
+         * This method will be invoked when a menu item is clicked if the item itself did
+         * not already handle the event.
+         *
+         * @param item {@link MenuItem} that was clicked
+         * @return <code>true</code> if the event was handled, <code>false</code> otherwise.
+         */
+        public boolean onMenuItemClick(MenuItem item);
+    }
+
+    /**
+     * Layout information for child views of Toolbars.
+     *
+     * @attr ref android.R.styleable#Toolbar_LayoutParams_layout_gravity
+     */
+    public static class LayoutParams extends MarginLayoutParams {
+        /**
+         * Gravity for the view associated with these LayoutParams.
+         *
+         * @see android.view.Gravity
+         */
+        @ViewDebug.ExportedProperty(category = "layout", mapping = {
+                @ViewDebug.IntToString(from =  -1,                       to = "NONE"),
+                @ViewDebug.IntToString(from = Gravity.NO_GRAVITY,        to = "NONE"),
+                @ViewDebug.IntToString(from = Gravity.TOP,               to = "TOP"),
+                @ViewDebug.IntToString(from = Gravity.BOTTOM,            to = "BOTTOM"),
+                @ViewDebug.IntToString(from = Gravity.LEFT,              to = "LEFT"),
+                @ViewDebug.IntToString(from = Gravity.RIGHT,             to = "RIGHT"),
+                @ViewDebug.IntToString(from = Gravity.START,             to = "START"),
+                @ViewDebug.IntToString(from = Gravity.END,               to = "END"),
+                @ViewDebug.IntToString(from = Gravity.CENTER_VERTICAL,   to = "CENTER_VERTICAL"),
+                @ViewDebug.IntToString(from = Gravity.FILL_VERTICAL,     to = "FILL_VERTICAL"),
+                @ViewDebug.IntToString(from = Gravity.CENTER_HORIZONTAL, to = "CENTER_HORIZONTAL"),
+                @ViewDebug.IntToString(from = Gravity.FILL_HORIZONTAL,   to = "FILL_HORIZONTAL"),
+                @ViewDebug.IntToString(from = Gravity.CENTER,            to = "CENTER"),
+                @ViewDebug.IntToString(from = Gravity.FILL,              to = "FILL")
+        })
+        public int gravity = Gravity.NO_GRAVITY;
+
+        static final int CUSTOM = 0;
+        static final int SYSTEM = 1;
+
+        int mViewType = CUSTOM;
+
+        public LayoutParams(@NonNull Context c, AttributeSet attrs) {
+            super(c, attrs);
+
+            TypedArray a = c.obtainStyledAttributes(attrs,
+                    com.android.internal.R.styleable.Toolbar_LayoutParams);
+            gravity = a.getInt(
+                    com.android.internal.R.styleable.Toolbar_LayoutParams_layout_gravity,
+                    Gravity.NO_GRAVITY);
+            a.recycle();
+        }
+
+        public LayoutParams(int width, int height) {
+            super(width, height);
+            this.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
+        }
+
+        public LayoutParams(int width, int height, int gravity) {
+            super(width, height);
+            this.gravity = gravity;
+        }
+
+        public LayoutParams(int gravity) {
+            this(WRAP_CONTENT, MATCH_PARENT, gravity);
+        }
+
+        public LayoutParams(LayoutParams source) {
+            super(source);
+
+            this.gravity = source.gravity;
+        }
+
+        public LayoutParams(MarginLayoutParams source) {
+            super(source);
+        }
+
+        public LayoutParams(ViewGroup.LayoutParams source) {
+            super(source);
+        }
+    }
+
+    static class SavedState extends BaseSavedState {
+        public SavedState(Parcel source) {
+            super(source);
+        }
+
+        public SavedState(Parcelable superState) {
+            super(superState);
+        }
+
+        @Override
+        public void writeToParcel(Parcel out, int flags) {
+            super.writeToParcel(out, flags);
+        }
+
+        public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
+
+            @Override
+            public SavedState createFromParcel(Parcel source) {
+                return new SavedState(source);
+            }
+
+            @Override
+            public SavedState[] newArray(int size) {
+                return new SavedState[size];
+            }
+        };
+    }
+}
diff --git a/core/java/android/widget/TwoLineListItem.java b/core/java/android/widget/TwoLineListItem.java
index f7e5266..5606c60 100644
--- a/core/java/android/widget/TwoLineListItem.java
+++ b/core/java/android/widget/TwoLineListItem.java
@@ -56,11 +56,15 @@
         this(context, attrs, 0); 
     }
 
-    public TwoLineListItem(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public TwoLineListItem(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
 
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.TwoLineListItem, defStyle, 0);
+    public TwoLineListItem(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.TwoLineListItem, defStyleAttr, defStyleRes);
 
         a.recycle();
     }
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index d57b739..f23c64f 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -19,7 +19,6 @@
 import android.app.AlertDialog;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.content.res.Resources;
 import android.graphics.Canvas;
 import android.media.AudioManager;
@@ -127,8 +126,12 @@
         initVideoView();
     }
 
-    public VideoView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public VideoView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public VideoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         initVideoView();
     }
 
@@ -297,11 +300,8 @@
             // not ready for playback just yet, will try again later
             return;
         }
-        // Tell the music playback service to pause
-        // TODO: these constants need to be published somewhere in the framework.
-        Intent i = new Intent("com.android.music.musicservicecommand");
-        i.putExtra("command", "pause");
-        mContext.sendBroadcast(i);
+        AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+        am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
 
         // we shouldn't clear the target state, because somebody might have
         // called start() previously
diff --git a/core/java/android/widget/ZoomButton.java b/core/java/android/widget/ZoomButton.java
index af17c94..715e868 100644
--- a/core/java/android/widget/ZoomButton.java
+++ b/core/java/android/widget/ZoomButton.java
@@ -49,8 +49,12 @@
         this(context, attrs, 0);
     }
     
-    public ZoomButton(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ZoomButton(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ZoomButton(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         mHandler = new Handler();
         setOnLongClickListener(this);
     }
diff --git a/core/java/android/widget/ZoomButtonsController.java b/core/java/android/widget/ZoomButtonsController.java
index 50c803b..f7e9648 100644
--- a/core/java/android/widget/ZoomButtonsController.java
+++ b/core/java/android/widget/ZoomButtonsController.java
@@ -32,7 +32,6 @@
 import android.view.View;
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
-import android.view.ViewParent;
 import android.view.ViewRootImpl;
 import android.view.WindowManager;
 import android.view.View.OnClickListener;
diff --git a/core/java/com/android/internal/app/ActionBarImpl.java b/core/java/com/android/internal/app/ActionBarImpl.java
deleted file mode 100644
index ad45894..0000000
--- a/core/java/com/android/internal/app/ActionBarImpl.java
+++ /dev/null
@@ -1,1252 +0,0 @@
-/*
- * Copyright (C) 2010 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.android.internal.app;
-
-import android.animation.ValueAnimator;
-import android.view.ViewParent;
-import com.android.internal.view.ActionBarPolicy;
-import com.android.internal.view.menu.MenuBuilder;
-import com.android.internal.view.menu.MenuPopupHelper;
-import com.android.internal.view.menu.SubMenuBuilder;
-import com.android.internal.widget.ActionBarContainer;
-import com.android.internal.widget.ActionBarContextView;
-import com.android.internal.widget.ActionBarOverlayLayout;
-import com.android.internal.widget.ActionBarView;
-import com.android.internal.widget.ScrollingTabContainerView;
-
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.app.ActionBar;
-import android.app.Activity;
-import android.app.Dialog;
-import android.app.FragmentTransaction;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.os.Handler;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.ActionMode;
-import android.view.ContextThemeWrapper;
-import android.view.LayoutInflater;
-import android.view.Menu;
-import android.view.MenuInflater;
-import android.view.MenuItem;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.Window;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.animation.AnimationUtils;
-import android.widget.SpinnerAdapter;
-
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-
-/**
- * ActionBarImpl is the ActionBar implementation used
- * by devices of all screen sizes. If it detects a compatible decor,
- * it will split contextual modes across both the ActionBarView at
- * the top of the screen and a horizontal LinearLayout at the bottom
- * which is normally hidden.
- */
-public class ActionBarImpl extends ActionBar {
-    private static final String TAG = "ActionBarImpl";
-
-    private Context mContext;
-    private Context mThemedContext;
-    private Activity mActivity;
-    private Dialog mDialog;
-
-    private ActionBarOverlayLayout mOverlayLayout;
-    private ActionBarContainer mContainerView;
-    private ActionBarView mActionView;
-    private ActionBarContextView mContextView;
-    private ActionBarContainer mSplitView;
-    private View mContentView;
-    private ScrollingTabContainerView mTabScrollView;
-
-    private ArrayList<TabImpl> mTabs = new ArrayList<TabImpl>();
-
-    private TabImpl mSelectedTab;
-    private int mSavedTabPosition = INVALID_POSITION;
-    
-    private boolean mDisplayHomeAsUpSet;
-
-    ActionModeImpl mActionMode;
-    ActionMode mDeferredDestroyActionMode;
-    ActionMode.Callback mDeferredModeDestroyCallback;
-    
-    private boolean mLastMenuVisibility;
-    private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners =
-            new ArrayList<OnMenuVisibilityListener>();
-
-    private static final int CONTEXT_DISPLAY_NORMAL = 0;
-    private static final int CONTEXT_DISPLAY_SPLIT = 1;
-    
-    private static final int INVALID_POSITION = -1;
-
-    private int mContextDisplayMode;
-    private boolean mHasEmbeddedTabs;
-
-    final Handler mHandler = new Handler();
-    Runnable mTabSelector;
-
-    private int mCurWindowVisibility = View.VISIBLE;
-
-    private boolean mContentAnimations = true;
-    private boolean mHiddenByApp;
-    private boolean mHiddenBySystem;
-    private boolean mShowingForMode;
-
-    private boolean mNowShowing = true;
-
-    private Animator mCurrentShowAnim;
-    private boolean mShowHideAnimationEnabled;
-
-    final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            if (mContentAnimations && mContentView != null) {
-                mContentView.setTranslationY(0);
-                mContainerView.setTranslationY(0);
-            }
-            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
-                mSplitView.setVisibility(View.GONE);
-            }
-            mContainerView.setVisibility(View.GONE);
-            mContainerView.setTransitioning(false);
-            mCurrentShowAnim = null;
-            completeDeferredDestroyActionMode();
-            if (mOverlayLayout != null) {
-                mOverlayLayout.requestFitSystemWindows();
-            }
-        }
-    };
-
-    final AnimatorListener mShowListener = new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationEnd(Animator animation) {
-            mCurrentShowAnim = null;
-            mContainerView.requestLayout();
-        }
-    };
-
-    final ValueAnimator.AnimatorUpdateListener mUpdateListener =
-            new ValueAnimator.AnimatorUpdateListener() {
-        @Override
-        public void onAnimationUpdate(ValueAnimator animation) {
-            final ViewParent parent = mContainerView.getParent();
-            ((View) parent).invalidate();
-        }
-    };
-
-    public ActionBarImpl(Activity activity) {
-        mActivity = activity;
-        Window window = activity.getWindow();
-        View decor = window.getDecorView();
-        boolean overlayMode = mActivity.getWindow().hasFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
-        init(decor);
-        if (!overlayMode) {
-            mContentView = decor.findViewById(android.R.id.content);
-        }
-    }
-
-    public ActionBarImpl(Dialog dialog) {
-        mDialog = dialog;
-        init(dialog.getWindow().getDecorView());
-    }
-
-    /**
-     * Only for edit mode.
-     * @hide
-     */
-    public ActionBarImpl(View layout) {
-        assert layout.isInEditMode();
-        init(layout);
-    }
-
-    private void init(View decor) {
-        mContext = decor.getContext();
-        mOverlayLayout = (ActionBarOverlayLayout) decor.findViewById(
-                com.android.internal.R.id.action_bar_overlay_layout);
-        if (mOverlayLayout != null) {
-            mOverlayLayout.setActionBar(this);
-        }
-        mActionView = (ActionBarView) decor.findViewById(com.android.internal.R.id.action_bar);
-        mContextView = (ActionBarContextView) decor.findViewById(
-                com.android.internal.R.id.action_context_bar);
-        mContainerView = (ActionBarContainer) decor.findViewById(
-                com.android.internal.R.id.action_bar_container);
-        mSplitView = (ActionBarContainer) decor.findViewById(
-                com.android.internal.R.id.split_action_bar);
-
-        if (mActionView == null || mContextView == null || mContainerView == null) {
-            throw new IllegalStateException(getClass().getSimpleName() + " can only be used " +
-                    "with a compatible window decor layout");
-        }
-
-        mActionView.setContextView(mContextView);
-        mContextDisplayMode = mActionView.isSplitActionBar() ?
-                CONTEXT_DISPLAY_SPLIT : CONTEXT_DISPLAY_NORMAL;
-
-        // This was initially read from the action bar style
-        final int current = mActionView.getDisplayOptions();
-        final boolean homeAsUp = (current & DISPLAY_HOME_AS_UP) != 0;
-        if (homeAsUp) {
-            mDisplayHomeAsUpSet = true;
-        }
-
-        ActionBarPolicy abp = ActionBarPolicy.get(mContext);
-        setHomeButtonEnabled(abp.enableHomeButtonByDefault() || homeAsUp);
-        setHasEmbeddedTabs(abp.hasEmbeddedTabs());
-    }
-
-    public void onConfigurationChanged(Configuration newConfig) {
-        setHasEmbeddedTabs(ActionBarPolicy.get(mContext).hasEmbeddedTabs());
-    }
-
-    private void setHasEmbeddedTabs(boolean hasEmbeddedTabs) {
-        mHasEmbeddedTabs = hasEmbeddedTabs;
-        // Switch tab layout configuration if needed
-        if (!mHasEmbeddedTabs) {
-            mActionView.setEmbeddedTabView(null);
-            mContainerView.setTabContainer(mTabScrollView);
-        } else {
-            mContainerView.setTabContainer(null);
-            mActionView.setEmbeddedTabView(mTabScrollView);
-        }
-        final boolean isInTabMode = getNavigationMode() == NAVIGATION_MODE_TABS;
-        if (mTabScrollView != null) {
-            if (isInTabMode) {
-                mTabScrollView.setVisibility(View.VISIBLE);
-                if (mOverlayLayout != null) {
-                    mOverlayLayout.requestFitSystemWindows();
-                }
-            } else {
-                mTabScrollView.setVisibility(View.GONE);
-            }
-        }
-        mActionView.setCollapsable(!mHasEmbeddedTabs && isInTabMode);
-    }
-
-    public boolean hasNonEmbeddedTabs() {
-        return !mHasEmbeddedTabs && getNavigationMode() == NAVIGATION_MODE_TABS;
-    }
-
-    private void ensureTabsExist() {
-        if (mTabScrollView != null) {
-            return;
-        }
-
-        ScrollingTabContainerView tabScroller = new ScrollingTabContainerView(mContext);
-
-        if (mHasEmbeddedTabs) {
-            tabScroller.setVisibility(View.VISIBLE);
-            mActionView.setEmbeddedTabView(tabScroller);
-        } else {
-            if (getNavigationMode() == NAVIGATION_MODE_TABS) {
-                tabScroller.setVisibility(View.VISIBLE);
-                if (mOverlayLayout != null) {
-                    mOverlayLayout.requestFitSystemWindows();
-                }
-            } else {
-                tabScroller.setVisibility(View.GONE);
-            }
-            mContainerView.setTabContainer(tabScroller);
-        }
-        mTabScrollView = tabScroller;
-    }
-
-    void completeDeferredDestroyActionMode() {
-        if (mDeferredModeDestroyCallback != null) {
-            mDeferredModeDestroyCallback.onDestroyActionMode(mDeferredDestroyActionMode);
-            mDeferredDestroyActionMode = null;
-            mDeferredModeDestroyCallback = null;
-        }
-    }
-
-    public void setWindowVisibility(int visibility) {
-        mCurWindowVisibility = visibility;
-    }
-
-    /**
-     * Enables or disables animation between show/hide states.
-     * If animation is disabled using this method, animations in progress
-     * will be finished.
-     *
-     * @param enabled true to animate, false to not animate.
-     */
-    public void setShowHideAnimationEnabled(boolean enabled) {
-        mShowHideAnimationEnabled = enabled;
-        if (!enabled && mCurrentShowAnim != null) {
-            mCurrentShowAnim.end();
-        }
-    }
-
-    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
-        mMenuVisibilityListeners.add(listener);
-    }
-
-    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
-        mMenuVisibilityListeners.remove(listener);
-    }
-
-    public void dispatchMenuVisibilityChanged(boolean isVisible) {
-        if (isVisible == mLastMenuVisibility) {
-            return;
-        }
-        mLastMenuVisibility = isVisible;
-
-        final int count = mMenuVisibilityListeners.size();
-        for (int i = 0; i < count; i++) {
-            mMenuVisibilityListeners.get(i).onMenuVisibilityChanged(isVisible);
-        }
-    }
-
-    @Override
-    public void setCustomView(int resId) {
-        setCustomView(LayoutInflater.from(getThemedContext()).inflate(resId, mActionView, false));
-    }
-
-    @Override
-    public void setDisplayUseLogoEnabled(boolean useLogo) {
-        setDisplayOptions(useLogo ? DISPLAY_USE_LOGO : 0, DISPLAY_USE_LOGO);
-    }
-
-    @Override
-    public void setDisplayShowHomeEnabled(boolean showHome) {
-        setDisplayOptions(showHome ? DISPLAY_SHOW_HOME : 0, DISPLAY_SHOW_HOME);
-    }
-
-    @Override
-    public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
-        setDisplayOptions(showHomeAsUp ? DISPLAY_HOME_AS_UP : 0, DISPLAY_HOME_AS_UP);
-    }
-
-    @Override
-    public void setDisplayShowTitleEnabled(boolean showTitle) {
-        setDisplayOptions(showTitle ? DISPLAY_SHOW_TITLE : 0, DISPLAY_SHOW_TITLE);
-    }
-
-    @Override
-    public void setDisplayShowCustomEnabled(boolean showCustom) {
-        setDisplayOptions(showCustom ? DISPLAY_SHOW_CUSTOM : 0, DISPLAY_SHOW_CUSTOM);
-    }
-
-    @Override
-    public void setHomeButtonEnabled(boolean enable) {
-        mActionView.setHomeButtonEnabled(enable);
-    }
-
-    @Override
-    public void setTitle(int resId) {
-        setTitle(mContext.getString(resId));
-    }
-
-    @Override
-    public void setSubtitle(int resId) {
-        setSubtitle(mContext.getString(resId));
-    }
-
-    public void setSelectedNavigationItem(int position) {
-        switch (mActionView.getNavigationMode()) {
-        case NAVIGATION_MODE_TABS:
-            selectTab(mTabs.get(position));
-            break;
-        case NAVIGATION_MODE_LIST:
-            mActionView.setDropdownSelectedPosition(position);
-            break;
-        default:
-            throw new IllegalStateException(
-                    "setSelectedNavigationIndex not valid for current navigation mode");
-        }
-    }
-
-    public void removeAllTabs() {
-        cleanupTabs();
-    }
-
-    private void cleanupTabs() {
-        if (mSelectedTab != null) {
-            selectTab(null);
-        }
-        mTabs.clear();
-        if (mTabScrollView != null) {
-            mTabScrollView.removeAllTabs();
-        }
-        mSavedTabPosition = INVALID_POSITION;
-    }
-
-    public void setTitle(CharSequence title) {
-        mActionView.setTitle(title);
-    }
-
-    public void setSubtitle(CharSequence subtitle) {
-        mActionView.setSubtitle(subtitle);
-    }
-
-    public void setDisplayOptions(int options) {
-        if ((options & DISPLAY_HOME_AS_UP) != 0) {
-            mDisplayHomeAsUpSet = true;
-        }
-        mActionView.setDisplayOptions(options);
-    }
-
-    public void setDisplayOptions(int options, int mask) {
-        final int current = mActionView.getDisplayOptions(); 
-        if ((mask & DISPLAY_HOME_AS_UP) != 0) {
-            mDisplayHomeAsUpSet = true;
-        }
-        mActionView.setDisplayOptions((options & mask) | (current & ~mask));
-    }
-
-    public void setBackgroundDrawable(Drawable d) {
-        mContainerView.setPrimaryBackground(d);
-    }
-
-    public void setStackedBackgroundDrawable(Drawable d) {
-        mContainerView.setStackedBackground(d);
-    }
-
-    public void setSplitBackgroundDrawable(Drawable d) {
-        if (mSplitView != null) {
-            mSplitView.setSplitBackground(d);
-        }
-    }
-
-    public View getCustomView() {
-        return mActionView.getCustomNavigationView();
-    }
-
-    public CharSequence getTitle() {
-        return mActionView.getTitle();
-    }
-
-    public CharSequence getSubtitle() {
-        return mActionView.getSubtitle();
-    }
-
-    public int getNavigationMode() {
-        return mActionView.getNavigationMode();
-    }
-
-    public int getDisplayOptions() {
-        return mActionView.getDisplayOptions();
-    }
-
-    public ActionMode startActionMode(ActionMode.Callback callback) {
-        if (mActionMode != null) {
-            mActionMode.finish();
-        }
-
-        mContextView.killMode();
-        ActionModeImpl mode = new ActionModeImpl(callback);
-        if (mode.dispatchOnCreate()) {
-            mode.invalidate();
-            mContextView.initForMode(mode);
-            animateToMode(true);
-            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
-                // TODO animate this
-                if (mSplitView.getVisibility() != View.VISIBLE) {
-                    mSplitView.setVisibility(View.VISIBLE);
-                    if (mOverlayLayout != null) {
-                        mOverlayLayout.requestFitSystemWindows();
-                    }
-                }
-            }
-            mContextView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
-            mActionMode = mode;
-            return mode;
-        }
-        return null;
-    }
-
-    private void configureTab(Tab tab, int position) {
-        final TabImpl tabi = (TabImpl) tab;
-        final ActionBar.TabListener callback = tabi.getCallback();
-
-        if (callback == null) {
-            throw new IllegalStateException("Action Bar Tab must have a Callback");
-        }
-
-        tabi.setPosition(position);
-        mTabs.add(position, tabi);
-
-        final int count = mTabs.size();
-        for (int i = position + 1; i < count; i++) {
-            mTabs.get(i).setPosition(i);
-        }
-    }
-
-    @Override
-    public void addTab(Tab tab) {
-        addTab(tab, mTabs.isEmpty());
-    }
-
-    @Override
-    public void addTab(Tab tab, int position) {
-        addTab(tab, position, mTabs.isEmpty());
-    }
-
-    @Override
-    public void addTab(Tab tab, boolean setSelected) {
-        ensureTabsExist();
-        mTabScrollView.addTab(tab, setSelected);
-        configureTab(tab, mTabs.size());
-        if (setSelected) {
-            selectTab(tab);
-        }
-    }
-
-    @Override
-    public void addTab(Tab tab, int position, boolean setSelected) {
-        ensureTabsExist();
-        mTabScrollView.addTab(tab, position, setSelected);
-        configureTab(tab, position);
-        if (setSelected) {
-            selectTab(tab);
-        }
-    }
-
-    @Override
-    public Tab newTab() {
-        return new TabImpl();
-    }
-
-    @Override
-    public void removeTab(Tab tab) {
-        removeTabAt(tab.getPosition());
-    }
-
-    @Override
-    public void removeTabAt(int position) {
-        if (mTabScrollView == null) {
-            // No tabs around to remove
-            return;
-        }
-
-        int selectedTabPosition = mSelectedTab != null
-                ? mSelectedTab.getPosition() : mSavedTabPosition;
-        mTabScrollView.removeTabAt(position);
-        TabImpl removedTab = mTabs.remove(position);
-        if (removedTab != null) {
-            removedTab.setPosition(-1);
-        }
-
-        final int newTabCount = mTabs.size();
-        for (int i = position; i < newTabCount; i++) {
-            mTabs.get(i).setPosition(i);
-        }
-
-        if (selectedTabPosition == position) {
-            selectTab(mTabs.isEmpty() ? null : mTabs.get(Math.max(0, position - 1)));
-        }
-    }
-
-    @Override
-    public void selectTab(Tab tab) {
-        if (getNavigationMode() != NAVIGATION_MODE_TABS) {
-            mSavedTabPosition = tab != null ? tab.getPosition() : INVALID_POSITION;
-            return;
-        }
-
-        final FragmentTransaction trans = mActionView.isInEditMode() ? null :
-                mActivity.getFragmentManager().beginTransaction().disallowAddToBackStack();
-
-        if (mSelectedTab == tab) {
-            if (mSelectedTab != null) {
-                mSelectedTab.getCallback().onTabReselected(mSelectedTab, trans);
-                mTabScrollView.animateToTab(tab.getPosition());
-            }
-        } else {
-            mTabScrollView.setTabSelected(tab != null ? tab.getPosition() : Tab.INVALID_POSITION);
-            if (mSelectedTab != null) {
-                mSelectedTab.getCallback().onTabUnselected(mSelectedTab, trans);
-            }
-            mSelectedTab = (TabImpl) tab;
-            if (mSelectedTab != null) {
-                mSelectedTab.getCallback().onTabSelected(mSelectedTab, trans);
-            }
-        }
-
-        if (trans != null && !trans.isEmpty()) {
-            trans.commit();
-        }
-    }
-
-    @Override
-    public Tab getSelectedTab() {
-        return mSelectedTab;
-    }
-
-    @Override
-    public int getHeight() {
-        return mContainerView.getHeight();
-    }
-
-    public void enableContentAnimations(boolean enabled) {
-        mContentAnimations = enabled;
-    }
-
-    @Override
-    public void show() {
-        if (mHiddenByApp) {
-            mHiddenByApp = false;
-            updateVisibility(false);
-        }
-    }
-
-    private void showForActionMode() {
-        if (!mShowingForMode) {
-            mShowingForMode = true;
-            if (mOverlayLayout != null) {
-                mOverlayLayout.setShowingForActionMode(true);
-            }
-            updateVisibility(false);
-        }
-    }
-
-    public void showForSystem() {
-        if (mHiddenBySystem) {
-            mHiddenBySystem = false;
-            updateVisibility(true);
-        }
-    }
-
-    @Override
-    public void hide() {
-        if (!mHiddenByApp) {
-            mHiddenByApp = true;
-            updateVisibility(false);
-        }
-    }
-
-    private void hideForActionMode() {
-        if (mShowingForMode) {
-            mShowingForMode = false;
-            if (mOverlayLayout != null) {
-                mOverlayLayout.setShowingForActionMode(false);
-            }
-            updateVisibility(false);
-        }
-    }
-
-    public void hideForSystem() {
-        if (!mHiddenBySystem) {
-            mHiddenBySystem = true;
-            updateVisibility(true);
-        }
-    }
-
-    private static boolean checkShowingFlags(boolean hiddenByApp, boolean hiddenBySystem,
-            boolean showingForMode) {
-        if (showingForMode) {
-            return true;
-        } else if (hiddenByApp || hiddenBySystem) {
-            return false;
-        } else {
-            return true;
-        }
-    }
-
-    private void updateVisibility(boolean fromSystem) {
-        // Based on the current state, should we be hidden or shown?
-        final boolean shown = checkShowingFlags(mHiddenByApp, mHiddenBySystem,
-                mShowingForMode);
-
-        if (shown) {
-            if (!mNowShowing) {
-                mNowShowing = true;
-                doShow(fromSystem);
-            }
-        } else {
-            if (mNowShowing) {
-                mNowShowing = false;
-                doHide(fromSystem);
-            }
-        }
-    }
-
-    public void doShow(boolean fromSystem) {
-        if (mCurrentShowAnim != null) {
-            mCurrentShowAnim.end();
-        }
-        mContainerView.setVisibility(View.VISIBLE);
-
-        if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
-                || fromSystem)) {
-            mContainerView.setTranslationY(0); // because we're about to ask its window loc
-            float startingY = -mContainerView.getHeight();
-            if (fromSystem) {
-                int topLeft[] = {0, 0};
-                mContainerView.getLocationInWindow(topLeft);
-                startingY -= topLeft[1];
-            }
-            mContainerView.setTranslationY(startingY);
-            AnimatorSet anim = new AnimatorSet();
-            ObjectAnimator a = ObjectAnimator.ofFloat(mContainerView, View.TRANSLATION_Y, 0);
-            a.addUpdateListener(mUpdateListener);
-            AnimatorSet.Builder b = anim.play(a);
-            if (mContentAnimations && mContentView != null) {
-                b.with(ObjectAnimator.ofFloat(mContentView, View.TRANSLATION_Y,
-                        startingY, 0));
-            }
-            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
-                mSplitView.setTranslationY(mSplitView.getHeight());
-                mSplitView.setVisibility(View.VISIBLE);
-                b.with(ObjectAnimator.ofFloat(mSplitView, View.TRANSLATION_Y, 0));
-            }
-            anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
-                    com.android.internal.R.interpolator.decelerate_cubic));
-            anim.setDuration(250);
-            // If this is being shown from the system, add a small delay.
-            // This is because we will also be animating in the status bar,
-            // and these two elements can't be done in lock-step.  So we give
-            // a little time for the status bar to start its animation before
-            // the action bar animates.  (This corresponds to the corresponding
-            // case when hiding, where the status bar has a small delay before
-            // starting.)
-            anim.addListener(mShowListener);
-            mCurrentShowAnim = anim;
-            anim.start();
-        } else {
-            mContainerView.setAlpha(1);
-            mContainerView.setTranslationY(0);
-            if (mContentAnimations && mContentView != null) {
-                mContentView.setTranslationY(0);
-            }
-            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
-                mSplitView.setAlpha(1);
-                mSplitView.setTranslationY(0);
-                mSplitView.setVisibility(View.VISIBLE);
-            }
-            mShowListener.onAnimationEnd(null);
-        }
-        if (mOverlayLayout != null) {
-            mOverlayLayout.requestFitSystemWindows();
-        }
-    }
-
-    public void doHide(boolean fromSystem) {
-        if (mCurrentShowAnim != null) {
-            mCurrentShowAnim.end();
-        }
-
-        if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
-                || fromSystem)) {
-            mContainerView.setAlpha(1);
-            mContainerView.setTransitioning(true);
-            AnimatorSet anim = new AnimatorSet();
-            float endingY = -mContainerView.getHeight();
-            if (fromSystem) {
-                int topLeft[] = {0, 0};
-                mContainerView.getLocationInWindow(topLeft);
-                endingY -= topLeft[1];
-            }
-            ObjectAnimator a = ObjectAnimator.ofFloat(mContainerView, View.TRANSLATION_Y, endingY);
-            a.addUpdateListener(mUpdateListener);
-            AnimatorSet.Builder b = anim.play(a);
-            if (mContentAnimations && mContentView != null) {
-                b.with(ObjectAnimator.ofFloat(mContentView, View.TRANSLATION_Y,
-                        0, endingY));
-            }
-            if (mSplitView != null && mSplitView.getVisibility() == View.VISIBLE) {
-                mSplitView.setAlpha(1);
-                b.with(ObjectAnimator.ofFloat(mSplitView, View.TRANSLATION_Y,
-                        mSplitView.getHeight()));
-            }
-            anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
-                    com.android.internal.R.interpolator.accelerate_cubic));
-            anim.setDuration(250);
-            anim.addListener(mHideListener);
-            mCurrentShowAnim = anim;
-            anim.start();
-        } else {
-            mHideListener.onAnimationEnd(null);
-        }
-    }
-
-    public boolean isShowing() {
-        return mNowShowing;
-    }
-
-    public boolean isSystemShowing() {
-        return !mHiddenBySystem;
-    }
-
-    void animateToMode(boolean toActionMode) {
-        if (toActionMode) {
-            showForActionMode();
-        } else {
-            hideForActionMode();
-        }
-
-        mActionView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE);
-        mContextView.animateToVisibility(toActionMode ? View.VISIBLE : View.GONE);
-        if (mTabScrollView != null && !mActionView.hasEmbeddedTabs() && mActionView.isCollapsed()) {
-            mTabScrollView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE);
-        }
-    }
-
-    public Context getThemedContext() {
-        if (mThemedContext == null) {
-            TypedValue outValue = new TypedValue();
-            Resources.Theme currentTheme = mContext.getTheme();
-            currentTheme.resolveAttribute(com.android.internal.R.attr.actionBarWidgetTheme,
-                    outValue, true);
-            final int targetThemeRes = outValue.resourceId;
-            
-            if (targetThemeRes != 0 && mContext.getThemeResId() != targetThemeRes) {
-                mThemedContext = new ContextThemeWrapper(mContext, targetThemeRes);
-            } else {
-                mThemedContext = mContext;
-            }
-        }
-        return mThemedContext;
-    }
-    
-    @Override
-    public boolean isTitleTruncated() {
-        return mActionView != null && mActionView.isTitleTruncated();
-    }
-
-    @Override
-    public void setHomeAsUpIndicator(Drawable indicator) {
-        mActionView.setHomeAsUpIndicator(indicator);
-    }
-
-    @Override
-    public void setHomeAsUpIndicator(int resId) {
-        mActionView.setHomeAsUpIndicator(resId);
-    }
-
-    @Override
-    public void setHomeActionContentDescription(CharSequence description) {
-        mActionView.setHomeActionContentDescription(description);
-    }
-
-    @Override
-    public void setHomeActionContentDescription(int resId) {
-        mActionView.setHomeActionContentDescription(resId);
-    }
-
-    /**
-     * @hide 
-     */
-    public class ActionModeImpl extends ActionMode implements MenuBuilder.Callback {
-        private ActionMode.Callback mCallback;
-        private MenuBuilder mMenu;
-        private WeakReference<View> mCustomView;
-        
-        public ActionModeImpl(ActionMode.Callback callback) {
-            mCallback = callback;
-            mMenu = new MenuBuilder(getThemedContext())
-                    .setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-            mMenu.setCallback(this);
-        }
-
-        @Override
-        public MenuInflater getMenuInflater() {
-            return new MenuInflater(getThemedContext());
-        }
-
-        @Override
-        public Menu getMenu() {
-            return mMenu;
-        }
-
-        @Override
-        public void finish() {
-            if (mActionMode != this) {
-                // Not the active action mode - no-op
-                return;
-            }
-
-            // If this change in state is going to cause the action bar
-            // to be hidden, defer the onDestroy callback until the animation
-            // is finished and associated relayout is about to happen. This lets
-            // apps better anticipate visibility and layout behavior.
-            if (!checkShowingFlags(mHiddenByApp, mHiddenBySystem, false)) {
-                // With the current state but the action bar hidden, our
-                // overall showing state is going to be false.
-                mDeferredDestroyActionMode = this;
-                mDeferredModeDestroyCallback = mCallback;
-            } else {
-                mCallback.onDestroyActionMode(this);
-            }
-            mCallback = null;
-            animateToMode(false);
-
-            // Clear out the context mode views after the animation finishes
-            mContextView.closeMode();
-            mActionView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
-
-            mActionMode = null;
-        }
-
-        @Override
-        public void invalidate() {
-            mMenu.stopDispatchingItemsChanged();
-            try {
-                mCallback.onPrepareActionMode(this, mMenu);
-            } finally {
-                mMenu.startDispatchingItemsChanged();
-            }
-        }
-
-        public boolean dispatchOnCreate() {
-            mMenu.stopDispatchingItemsChanged();
-            try {
-                return mCallback.onCreateActionMode(this, mMenu);
-            } finally {
-                mMenu.startDispatchingItemsChanged();
-            }
-        }
-
-        @Override
-        public void setCustomView(View view) {
-            mContextView.setCustomView(view);
-            mCustomView = new WeakReference<View>(view);
-        }
-
-        @Override
-        public void setSubtitle(CharSequence subtitle) {
-            mContextView.setSubtitle(subtitle);
-        }
-
-        @Override
-        public void setTitle(CharSequence title) {
-            mContextView.setTitle(title);
-        }
-
-        @Override
-        public void setTitle(int resId) {
-            setTitle(mContext.getResources().getString(resId));
-        }
-
-        @Override
-        public void setSubtitle(int resId) {
-            setSubtitle(mContext.getResources().getString(resId));
-        }
-
-        @Override
-        public CharSequence getTitle() {
-            return mContextView.getTitle();
-        }
-
-        @Override
-        public CharSequence getSubtitle() {
-            return mContextView.getSubtitle();
-        }
-        
-        @Override
-        public void setTitleOptionalHint(boolean titleOptional) {
-            super.setTitleOptionalHint(titleOptional);
-            mContextView.setTitleOptional(titleOptional);
-        }
-
-        @Override
-        public boolean isTitleOptional() {
-            return mContextView.isTitleOptional();
-        }
-
-        @Override
-        public View getCustomView() {
-            return mCustomView != null ? mCustomView.get() : null;
-        }
-
-        public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
-            if (mCallback != null) {
-                return mCallback.onActionItemClicked(this, item);
-            } else {
-                return false;
-            }
-        }
-
-        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
-        }
-
-        public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
-            if (mCallback == null) {
-                return false;
-            }
-
-            if (!subMenu.hasVisibleItems()) {
-                return true;
-            }
-
-            new MenuPopupHelper(getThemedContext(), subMenu).show();
-            return true;
-        }
-
-        public void onCloseSubMenu(SubMenuBuilder menu) {
-        }
-
-        public void onMenuModeChange(MenuBuilder menu) {
-            if (mCallback == null) {
-                return;
-            }
-            invalidate();
-            mContextView.showOverflowMenu();
-        }
-    }
-
-    /**
-     * @hide
-     */
-    public class TabImpl extends ActionBar.Tab {
-        private ActionBar.TabListener mCallback;
-        private Object mTag;
-        private Drawable mIcon;
-        private CharSequence mText;
-        private CharSequence mContentDesc;
-        private int mPosition = -1;
-        private View mCustomView;
-
-        @Override
-        public Object getTag() {
-            return mTag;
-        }
-
-        @Override
-        public Tab setTag(Object tag) {
-            mTag = tag;
-            return this;
-        }
-
-        public ActionBar.TabListener getCallback() {
-            return mCallback;
-        }
-
-        @Override
-        public Tab setTabListener(ActionBar.TabListener callback) {
-            mCallback = callback;
-            return this;
-        }
-
-        @Override
-        public View getCustomView() {
-            return mCustomView;
-        }
-
-        @Override
-        public Tab setCustomView(View view) {
-            mCustomView = view;
-            if (mPosition >= 0) {
-                mTabScrollView.updateTab(mPosition);
-            }
-            return this;
-        }
-
-        @Override
-        public Tab setCustomView(int layoutResId) {
-            return setCustomView(LayoutInflater.from(getThemedContext())
-                    .inflate(layoutResId, null));
-        }
-
-        @Override
-        public Drawable getIcon() {
-            return mIcon;
-        }
-
-        @Override
-        public int getPosition() {
-            return mPosition;
-        }
-
-        public void setPosition(int position) {
-            mPosition = position;
-        }
-
-        @Override
-        public CharSequence getText() {
-            return mText;
-        }
-
-        @Override
-        public Tab setIcon(Drawable icon) {
-            mIcon = icon;
-            if (mPosition >= 0) {
-                mTabScrollView.updateTab(mPosition);
-            }
-            return this;
-        }
-
-        @Override
-        public Tab setIcon(int resId) {
-            return setIcon(mContext.getResources().getDrawable(resId));
-        }
-
-        @Override
-        public Tab setText(CharSequence text) {
-            mText = text;
-            if (mPosition >= 0) {
-                mTabScrollView.updateTab(mPosition);
-            }
-            return this;
-        }
-
-        @Override
-        public Tab setText(int resId) {
-            return setText(mContext.getResources().getText(resId));
-        }
-
-        @Override
-        public void select() {
-            selectTab(this);
-        }
-
-        @Override
-        public Tab setContentDescription(int resId) {
-            return setContentDescription(mContext.getResources().getText(resId));
-        }
-
-        @Override
-        public Tab setContentDescription(CharSequence contentDesc) {
-            mContentDesc = contentDesc;
-            if (mPosition >= 0) {
-                mTabScrollView.updateTab(mPosition);
-            }
-            return this;
-        }
-
-        @Override
-        public CharSequence getContentDescription() {
-            return mContentDesc;
-        }
-    }
-
-    @Override
-    public void setCustomView(View view) {
-        mActionView.setCustomNavigationView(view);
-    }
-
-    @Override
-    public void setCustomView(View view, LayoutParams layoutParams) {
-        view.setLayoutParams(layoutParams);
-        mActionView.setCustomNavigationView(view);
-    }
-
-    @Override
-    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
-        mActionView.setDropdownAdapter(adapter);
-        mActionView.setCallback(callback);
-    }
-
-    @Override
-    public int getSelectedNavigationIndex() {
-        switch (mActionView.getNavigationMode()) {
-            case NAVIGATION_MODE_TABS:
-                return mSelectedTab != null ? mSelectedTab.getPosition() : -1;
-            case NAVIGATION_MODE_LIST:
-                return mActionView.getDropdownSelectedPosition();
-            default:
-                return -1;
-        }
-    }
-
-    @Override
-    public int getNavigationItemCount() {
-        switch (mActionView.getNavigationMode()) {
-            case NAVIGATION_MODE_TABS:
-                return mTabs.size();
-            case NAVIGATION_MODE_LIST:
-                SpinnerAdapter adapter = mActionView.getDropdownAdapter();
-                return adapter != null ? adapter.getCount() : 0;
-            default:
-                return 0;
-        }
-    }
-
-    @Override
-    public int getTabCount() {
-        return mTabs.size();
-    }
-
-    @Override
-    public void setNavigationMode(int mode) {
-        final int oldMode = mActionView.getNavigationMode();
-        switch (oldMode) {
-            case NAVIGATION_MODE_TABS:
-                mSavedTabPosition = getSelectedNavigationIndex();
-                selectTab(null);
-                mTabScrollView.setVisibility(View.GONE);
-                break;
-        }
-        if (oldMode != mode && !mHasEmbeddedTabs) {
-            if (mOverlayLayout != null) {
-                mOverlayLayout.requestFitSystemWindows();
-            }
-        }
-        mActionView.setNavigationMode(mode);
-        switch (mode) {
-            case NAVIGATION_MODE_TABS:
-                ensureTabsExist();
-                mTabScrollView.setVisibility(View.VISIBLE);
-                if (mSavedTabPosition != INVALID_POSITION) {
-                    setSelectedNavigationItem(mSavedTabPosition);
-                    mSavedTabPosition = INVALID_POSITION;
-                }
-                break;
-        }
-        mActionView.setCollapsable(mode == NAVIGATION_MODE_TABS && !mHasEmbeddedTabs);
-    }
-
-    @Override
-    public Tab getTabAt(int index) {
-        return mTabs.get(index);
-    }
-
-
-    @Override
-    public void setIcon(int resId) {
-        mActionView.setIcon(resId);
-    }
-
-    @Override
-    public void setIcon(Drawable icon) {
-        mActionView.setIcon(icon);
-    }
-
-    public boolean hasIcon() {
-        return mActionView.hasIcon();
-    }
-
-    @Override
-    public void setLogo(int resId) {
-        mActionView.setLogo(resId);
-    }
-
-    @Override
-    public void setLogo(Drawable logo) {
-        mActionView.setLogo(logo);
-    }
-
-    public boolean hasLogo() {
-        return mActionView.hasLogo();
-    }
-
-    public void setDefaultDisplayHomeAsUpEnabled(boolean enable) {
-        if (!mDisplayHomeAsUpSet) {
-            setDisplayHomeAsUpEnabled(enable);
-        }
-    }
-}
diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java
index fe532b0..4726da7 100644
--- a/core/java/com/android/internal/app/AlertController.java
+++ b/core/java/com/android/internal/app/AlertController.java
@@ -70,6 +70,8 @@
     
     private View mView;
 
+    private int mViewLayoutResId;
+
     private int mViewSpacingLeft;
     
     private int mViewSpacingTop;
@@ -100,7 +102,7 @@
 
     private ScrollView mScrollView;
     
-    private int mIconId = -1;
+    private int mIconId = 0;
     
     private Drawable mIcon;
     
@@ -126,16 +128,20 @@
 
     private Handler mHandler;
 
-    View.OnClickListener mButtonHandler = new View.OnClickListener() {
+    private final View.OnClickListener mButtonHandler = new View.OnClickListener() {
+        @Override
         public void onClick(View v) {
-            Message m = null;
+            final Message m;
             if (v == mButtonPositive && mButtonPositiveMessage != null) {
                 m = Message.obtain(mButtonPositiveMessage);
             } else if (v == mButtonNegative && mButtonNegativeMessage != null) {
                 m = Message.obtain(mButtonNegativeMessage);
             } else if (v == mButtonNeutral && mButtonNeutralMessage != null) {
                 m = Message.obtain(mButtonNeutralMessage);
+            } else {
+                m = null;
             }
+
             if (m != null) {
                 m.sendToTarget();
             }
@@ -232,11 +238,6 @@
     public void installContent() {
         /* We use a custom title so never request a window title */
         mWindow.requestFeature(Window.FEATURE_NO_TITLE);
-        
-        if (mView == null || !canTextInput(mView)) {
-            mWindow.setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
-                    WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
-        }
         mWindow.setContentView(mAlertDialogLayout);
         setupView();
     }
@@ -263,10 +264,20 @@
     }
 
     /**
+     * Set the view resource to display in the dialog.
+     */
+    public void setView(int layoutResId) {
+        mView = null;
+        mViewLayoutResId = layoutResId;
+        mViewSpacingSpecified = false;
+    }
+
+    /**
      * Set the view to display in the dialog.
      */
     public void setView(View view) {
         mView = view;
+        mViewLayoutResId = 0;
         mViewSpacingSpecified = false;
     }
     
@@ -276,6 +287,7 @@
     public void setView(View view, int viewSpacingLeft, int viewSpacingTop, int viewSpacingRight,
             int viewSpacingBottom) {
         mView = view;
+        mViewLayoutResId = 0;
         mViewSpacingSpecified = true;
         mViewSpacingLeft = viewSpacingLeft;
         mViewSpacingTop = viewSpacingTop;
@@ -325,25 +337,39 @@
     }
 
     /**
-     * Set resId to 0 if you don't want an icon.
-     * @param resId the resourceId of the drawable to use as the icon or 0
-     * if you don't want an icon.
+     * Specifies the icon to display next to the alert title.
+     *
+     * @param resId the resource identifier of the drawable to use as the icon,
+     *            or 0 for no icon
      */
     public void setIcon(int resId) {
+        mIcon = null;
         mIconId = resId;
+
         if (mIconView != null) {
-            if (resId > 0) {
+            if (resId != 0) {
                 mIconView.setImageResource(mIconId);
-            } else if (resId == 0) {
+            } else {
                 mIconView.setVisibility(View.GONE);
             }
         }
     }
-    
+
+    /**
+     * Specifies the icon to display next to the alert title.
+     *
+     * @param icon the drawable to use as the icon or null for no icon
+     */
     public void setIcon(Drawable icon) {
         mIcon = icon;
-        if ((mIconView != null) && (mIcon != null)) {
-            mIconView.setImageDrawable(icon);
+        mIconId = 0;
+
+        if (mIconView != null) {
+            if (icon != null) {
+                mIconView.setImageDrawable(icon);
+            } else {
+                mIconView.setVisibility(View.GONE);
+            }
         }
     }
 
@@ -406,28 +432,44 @@
             mWindow.setCloseOnTouchOutsideIfNotSet(true);
         }
 
-        FrameLayout customPanel = null;
+        final FrameLayout customPanel = (FrameLayout) mWindow.findViewById(R.id.customPanel);
+        final View customView;
         if (mView != null) {
-            customPanel = (FrameLayout) mWindow.findViewById(R.id.customPanel);
-            FrameLayout custom = (FrameLayout) mWindow.findViewById(R.id.custom);
-            custom.addView(mView, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+            customView = mView;
+        } else if (mViewLayoutResId != 0) {
+            final LayoutInflater inflater = LayoutInflater.from(mContext);
+            customView = inflater.inflate(mViewLayoutResId, customPanel, false);
+        } else {
+            customView = null;
+        }
+
+        final boolean hasCustomView = customView != null;
+        if (!hasCustomView || !canTextInput(customView)) {
+            mWindow.setFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM,
+                    WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
+        }
+
+        if (hasCustomView) {
+            final FrameLayout custom = (FrameLayout) mWindow.findViewById(R.id.custom);
+            custom.addView(customView, new LayoutParams(MATCH_PARENT, MATCH_PARENT));
+
             if (mViewSpacingSpecified) {
-                custom.setPadding(mViewSpacingLeft, mViewSpacingTop, mViewSpacingRight,
-                        mViewSpacingBottom);
+                custom.setPadding(
+                        mViewSpacingLeft, mViewSpacingTop, mViewSpacingRight, mViewSpacingBottom);
             }
+
             if (mListView != null) {
                 ((LinearLayout.LayoutParams) customPanel.getLayoutParams()).weight = 0;
             }
         } else {
-            mWindow.findViewById(R.id.customPanel).setVisibility(View.GONE);
+            customPanel.setVisibility(View.GONE);
         }
-        
-        /* Only display the divider if we have a title and a 
-         * custom view or a message.
-         */
+
+        // Only display the divider if we have a title and a custom view or a
+        // message.
         if (hasTitle) {
-            View divider = null;
-            if (mMessage != null || mView != null || mListView != null) {
+            final View divider;
+            if (mMessage != null || customView != null || mListView != null) {
                 divider = mWindow.findViewById(R.id.titleDivider);
             } else {
                 divider = mWindow.findViewById(R.id.titleDividerTop);
@@ -437,8 +479,9 @@
                 divider.setVisibility(View.VISIBLE);
             }
         }
-        
-        setBackground(topPanel, contentPanel, customPanel, hasButtons, a, hasTitle, buttonPanel);
+
+        setBackground(a, topPanel, contentPanel, customPanel, buttonPanel, hasTitle, hasCustomView,
+                hasButtons);
         a.recycle();
     }
 
@@ -456,28 +499,24 @@
             View titleTemplate = mWindow.findViewById(R.id.title_template);
             titleTemplate.setVisibility(View.GONE);
         } else {
-            final boolean hasTextTitle = !TextUtils.isEmpty(mTitle);
-            
             mIconView = (ImageView) mWindow.findViewById(R.id.icon);
-            if (hasTextTitle) {
-                /* Display the title if a title is supplied, else hide it */
-                mTitleView = (TextView) mWindow.findViewById(R.id.alertTitle);
 
+            final boolean hasTextTitle = !TextUtils.isEmpty(mTitle);
+            if (hasTextTitle) {
+                // Display the title if a title is supplied, else hide it.
+                mTitleView = (TextView) mWindow.findViewById(R.id.alertTitle);
                 mTitleView.setText(mTitle);
-                
-                /* Do this last so that if the user has supplied any
-                 * icons we use them instead of the default ones. If the
-                 * user has specified 0 then make it disappear.
-                 */
-                if (mIconId > 0) {
+
+                // Do this last so that if the user has supplied any icons we
+                // use them instead of the default ones. If the user has
+                // specified 0 then make it disappear.
+                if (mIconId != 0) {
                     mIconView.setImageResource(mIconId);
                 } else if (mIcon != null) {
                     mIconView.setImageDrawable(mIcon);
-                } else if (mIconId == 0) {
-                    
-                    /* Apply the padding from the icon to ensure the
-                     * title is aligned correctly.
-                     */
+                } else {
+                    // Apply the padding from the icon to ensure the title is
+                    // aligned correctly.
                     mTitleView.setPadding(mIconView.getPaddingLeft(),
                             mIconView.getPaddingTop(),
                             mIconView.getPaddingRight(),
@@ -485,9 +524,8 @@
                     mIconView.setVisibility(View.GONE);
                 }
             } else {
-                
                 // Hide the title template
-                View titleTemplate = mWindow.findViewById(R.id.title_template);
+                final View titleTemplate = mWindow.findViewById(R.id.title_template);
                 titleTemplate.setVisibility(View.GONE);
                 mIconView.setVisibility(View.GONE);
                 topPanel.setVisibility(View.GONE);
@@ -596,76 +634,64 @@
         }
     }
 
-    private void setBackground(LinearLayout topPanel, LinearLayout contentPanel,
-            View customPanel, boolean hasButtons, TypedArray a, boolean hasTitle, 
-            View buttonPanel) {
-        
-        /* Get all the different background required */
-        int fullDark = a.getResourceId(
-                R.styleable.AlertDialog_fullDark, R.drawable.popup_full_dark);
-        int topDark = a.getResourceId(
-                R.styleable.AlertDialog_topDark, R.drawable.popup_top_dark);
-        int centerDark = a.getResourceId(
-                R.styleable.AlertDialog_centerDark, R.drawable.popup_center_dark);
-        int bottomDark = a.getResourceId(
-                R.styleable.AlertDialog_bottomDark, R.drawable.popup_bottom_dark);
-        int fullBright = a.getResourceId(
-                R.styleable.AlertDialog_fullBright, R.drawable.popup_full_bright);
-        int topBright = a.getResourceId(
+    private void setBackground(TypedArray a, View topPanel, View contentPanel, View customPanel,
+            View buttonPanel, boolean hasTitle, boolean hasCustomView, boolean hasButtons) {
+        final int topBright = a.getResourceId(
                 R.styleable.AlertDialog_topBright, R.drawable.popup_top_bright);
-        int centerBright = a.getResourceId(
+        final int topDark = a.getResourceId(
+                R.styleable.AlertDialog_topDark, R.drawable.popup_top_dark);
+        final int centerBright = a.getResourceId(
                 R.styleable.AlertDialog_centerBright, R.drawable.popup_center_bright);
-        int bottomBright = a.getResourceId(
-                R.styleable.AlertDialog_bottomBright, R.drawable.popup_bottom_bright);
-        int bottomMedium = a.getResourceId(
-                R.styleable.AlertDialog_bottomMedium, R.drawable.popup_bottom_medium);
-        
-        /*
-         * We now set the background of all of the sections of the alert.
+        final int centerDark = a.getResourceId(
+                R.styleable.AlertDialog_centerDark, R.drawable.popup_center_dark);
+
+        /* We now set the background of all of the sections of the alert.
          * First collect together each section that is being displayed along
          * with whether it is on a light or dark background, then run through
          * them setting their backgrounds.  This is complicated because we need
          * to correctly use the full, top, middle, and bottom graphics depending
          * on how many views they are and where they appear.
          */
-        
-        View[] views = new View[4];
-        boolean[] light = new boolean[4];
+
+        final View[] views = new View[4];
+        final boolean[] light = new boolean[4];
         View lastView = null;
         boolean lastLight = false;
-        
+
         int pos = 0;
         if (hasTitle) {
             views[pos] = topPanel;
             light[pos] = false;
             pos++;
         }
-        
+
         /* The contentPanel displays either a custom text message or
          * a ListView. If it's text we should use the dark background
          * for ListView we should use the light background. If neither
          * are there the contentPanel will be hidden so set it as null.
          */
-        views[pos] = (contentPanel.getVisibility() == View.GONE) 
-                ? null : contentPanel;
+        views[pos] = contentPanel.getVisibility() == View.GONE ? null : contentPanel;
         light[pos] = mListView != null;
         pos++;
-        if (customPanel != null) {
+
+        if (hasCustomView) {
             views[pos] = customPanel;
             light[pos] = mForceInverseBackground;
             pos++;
         }
+
         if (hasButtons) {
             views[pos] = buttonPanel;
             light[pos] = true;
         }
-        
+
         boolean setView = false;
-        for (pos=0; pos<views.length; pos++) {
-            View v = views[pos];
+        for (pos = 0; pos < views.length; pos++) {
+            final View v = views[pos];
             if (v == null) {
                 continue;
             }
+
             if (lastView != null) {
                 if (!setView) {
                     lastView.setBackgroundResource(lastLight ? topBright : topDark);
@@ -674,23 +700,34 @@
                 }
                 setView = true;
             }
+
             lastView = v;
             lastLight = light[pos];
         }
-        
+
         if (lastView != null) {
             if (setView) {
-                
-                /* ListViews will use the Bright background but buttons use
-                 * the Medium background.
-                 */ 
+                final int bottomBright = a.getResourceId(
+                        R.styleable.AlertDialog_bottomBright, R.drawable.popup_bottom_bright);
+                final int bottomMedium = a.getResourceId(
+                        R.styleable.AlertDialog_bottomMedium, R.drawable.popup_bottom_medium);
+                final int bottomDark = a.getResourceId(
+                        R.styleable.AlertDialog_bottomDark, R.drawable.popup_bottom_dark);
+
+                // ListViews will use the Bright background, but buttons use the
+                // Medium background.
                 lastView.setBackgroundResource(
                         lastLight ? (hasButtons ? bottomMedium : bottomBright) : bottomDark);
             } else {
+                final int fullBright = a.getResourceId(
+                        R.styleable.AlertDialog_fullBright, R.drawable.popup_full_bright);
+                final int fullDark = a.getResourceId(
+                        R.styleable.AlertDialog_fullDark, R.drawable.popup_full_dark);
+
                 lastView.setBackgroundResource(lastLight ? fullBright : fullDark);
             }
         }
-        
+
         /* TODO: uncomment section below. The logic for this should be if 
          * it's a Contextual menu being displayed AND only a Cancel button 
          * is shown then do this.
@@ -715,12 +752,14 @@
             mListView.addFooterView(buttonPanel);
             */
 //        }
-        
-        if ((mListView != null) && (mAdapter != null)) {
-            mListView.setAdapter(mAdapter);
-            if (mCheckedItem > -1) {
-                mListView.setItemChecked(mCheckedItem, true);
-                mListView.setSelection(mCheckedItem);
+
+        final ListView listView = mListView;
+        if (listView != null && mAdapter != null) {
+            listView.setAdapter(mAdapter);
+            final int checkedItem = mCheckedItem;
+            if (checkedItem > -1) {
+                listView.setItemChecked(checkedItem, true);
+                listView.setSelection(checkedItem);
             }
         }
     }
@@ -736,8 +775,13 @@
             super(context, attrs);
         }
 
-        public RecycleListView(Context context, AttributeSet attrs, int defStyle) {
-            super(context, attrs, defStyle);
+        public RecycleListView(Context context, AttributeSet attrs, int defStyleAttr) {
+            super(context, attrs, defStyleAttr);
+        }
+
+        public RecycleListView(
+                Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+            super(context, attrs, defStyleAttr, defStyleRes);
         }
 
         @Override
@@ -769,6 +813,7 @@
         public CharSequence[] mItems;
         public ListAdapter mAdapter;
         public DialogInterface.OnClickListener mOnClickListener;
+        public int mViewLayoutResId;
         public View mView;
         public int mViewSpacingLeft;
         public int mViewSpacingTop;
@@ -854,8 +899,10 @@
                 } else {
                     dialog.setView(mView);
                 }
+            } else if (mViewLayoutResId != 0) {
+                dialog.setView(mViewLayoutResId);
             }
-            
+
             /*
             dialog.setCancelable(mCancelable);
             dialog.setOnCancelListener(mOnCancelListener);
@@ -937,7 +984,8 @@
             
             if (mOnClickListener != null) {
                 listView.setOnItemClickListener(new OnItemClickListener() {
-                    public void onItemClick(AdapterView parent, View v, int position, long id) {
+                    @Override
+                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                         mOnClickListener.onClick(dialog.mDialogInterface, position);
                         if (!mIsSingleChoice) {
                             dialog.mDialogInterface.dismiss();
@@ -946,7 +994,8 @@
                 });
             } else if (mOnCheckboxClickListener != null) {
                 listView.setOnItemClickListener(new OnItemClickListener() {
-                    public void onItemClick(AdapterView parent, View v, int position, long id) {
+                    @Override
+                    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                         if (mCheckedItems != null) {
                             mCheckedItems[position] = listView.isItemChecked(position);
                         }
diff --git a/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java b/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java
index 3d46cdd..83ad9dc 100644
--- a/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java
+++ b/core/java/com/android/internal/app/HeavyWeightSwitcherActivity.java
@@ -32,7 +32,6 @@
 import android.view.View;
 import android.view.Window;
 import android.view.View.OnClickListener;
-import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.TextView;
 
diff --git a/core/java/com/android/internal/app/IAppOpsService.aidl b/core/java/com/android/internal/app/IAppOpsService.aidl
index 16c41f3..cd75010 100644
--- a/core/java/com/android/internal/app/IAppOpsService.aidl
+++ b/core/java/com/android/internal/app/IAppOpsService.aidl
@@ -36,4 +36,6 @@
     List<AppOpsManager.PackageOps> getOpsForPackage(int uid, String packageName, in int[] ops);
     void setMode(int code, int uid, String packageName, int mode);
     void resetAllModes();
+    int checkAudioOperation(int code, int stream, int uid, String packageName);
+    void setAudioRestriction(int code, int stream, int uid, int mode, in String[] exceptionPackages);
 }
diff --git a/core/java/com/android/internal/app/IBatteryStats.aidl b/core/java/com/android/internal/app/IBatteryStats.aidl
index 43c4b49..1bb577b 100644
--- a/core/java/com/android/internal/app/IBatteryStats.aidl
+++ b/core/java/com/android/internal/app/IBatteryStats.aidl
@@ -19,22 +19,40 @@
 import com.android.internal.os.BatteryStatsImpl;
 
 import android.os.WorkSource;
+import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.SignalStrength;
 
 interface IBatteryStats {
-    byte[] getStatistics();
-    void noteStartWakelock(int uid, int pid, String name, int type);
-    void noteStopWakelock(int uid, int pid, String name, int type);
-    
-    /* DO NOT CHANGE the position of noteStartSensor without updating
-       SensorService.cpp */
+    // These first methods are also called by native code, so must
+    // be kept in sync with frameworks/native/include/binder/IBatteryStats.h
     void noteStartSensor(int uid, int sensor);
-
-    /* DO NOT CHANGE the position of noteStopSensor without updating
-       SensorService.cpp */
     void noteStopSensor(int uid, int sensor);
 
-    void noteStartWakelockFromSource(in WorkSource ws, int pid, String name, int type);
+    // Remaining methods are only used in Java.
+    byte[] getStatistics();
+
+    // Return the computed amount of time remaining on battery, in milliseconds.
+    // Returns -1 if nothing could be computed.
+    long computeBatteryTimeRemaining();
+
+    // Return the computed amount of time remaining to fully charge, in milliseconds.
+    // Returns -1 if nothing could be computed.
+    long computeChargeTimeRemaining();
+
+    void addIsolatedUid(int isolatedUid, int appUid);
+    void removeIsolatedUid(int isolatedUid, int appUid);
+
+    void noteEvent(int code, String name, int uid);
+
+    void noteStartWakelock(int uid, int pid, String name, String historyName,
+            int type, boolean unimportantForLogging);
+    void noteStopWakelock(int uid, int pid, String name, int type);
+
+    void noteStartWakelockFromSource(in WorkSource ws, int pid, String name, String historyName,
+            int type, boolean unimportantForLogging);
+    void noteChangeWakelockFromSource(in WorkSource ws, int pid, String name, int type,
+            in WorkSource newWs, int newPid, String newName,
+            String newHistoryName, int newType, boolean newUnimportantForLogging);
     void noteStopWakelockFromSource(in WorkSource ws, int pid, String name, int type);
 
     void noteVibratorOn(int uid, long durationMillis);
@@ -46,6 +64,7 @@
     void noteScreenOff();
     void noteInputEvent();
     void noteUserActivity(int uid, int event);
+    void noteMobileRadioPowerState(int powerState, long timestampNs);
     void notePhoneOn();
     void notePhoneOff();
     void notePhoneSignalStrength(in SignalStrength signalStrength);
@@ -56,8 +75,10 @@
     void noteWifiRunning(in WorkSource ws);
     void noteWifiRunningChanged(in WorkSource oldWs, in WorkSource newWs);
     void noteWifiStopped(in WorkSource ws);
+    void noteWifiState(int wifiState, String accessPoint);
     void noteBluetoothOn();
     void noteBluetoothOff();
+    void noteBluetoothState(int bluetoothState);
     void noteFullWifiLockAcquired(int uid);
     void noteFullWifiLockReleased(int uid);
     void noteWifiScanStarted(int uid);
diff --git a/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
new file mode 100644
index 0000000..3219ddd
--- /dev/null
+++ b/core/java/com/android/internal/app/IVoiceInteractionManagerService.aidl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2014 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.android.internal.app;
+
+import android.content.Intent;
+import android.os.Bundle;
+
+import com.android.internal.app.IVoiceInteractor;
+import android.service.voice.IVoiceInteractionService;
+import android.service.voice.IVoiceInteractionSession;
+
+interface IVoiceInteractionManagerService {
+    void startVoiceActivity(in Intent intent, String resolvedType, IVoiceInteractionService service,
+            in Bundle sessionArgs);
+    int deliverNewSession(IBinder token, IVoiceInteractionSession session,
+            IVoiceInteractor interactor);
+}
diff --git a/core/java/com/android/internal/app/IVoiceInteractor.aidl b/core/java/com/android/internal/app/IVoiceInteractor.aidl
new file mode 100644
index 0000000..737906a
--- /dev/null
+++ b/core/java/com/android/internal/app/IVoiceInteractor.aidl
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2014 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.android.internal.app;
+
+import android.os.Bundle;
+
+import com.android.internal.app.IVoiceInteractorCallback;
+import com.android.internal.app.IVoiceInteractorRequest;
+
+/**
+ * IPC interface for an application to perform calls through a VoiceInteractor.
+ */
+interface IVoiceInteractor {
+    IVoiceInteractorRequest startConfirmation(String callingPackage,
+            IVoiceInteractorCallback callback, String prompt, in Bundle extras);
+    IVoiceInteractorRequest startCommand(String callingPackage,
+            IVoiceInteractorCallback callback, String command, in Bundle extras);
+    boolean[] supportsCommands(String callingPackage, in String[] commands);
+}
diff --git a/core/java/com/android/internal/app/IVoiceInteractorCallback.aidl b/core/java/com/android/internal/app/IVoiceInteractorCallback.aidl
new file mode 100644
index 0000000..c6f93e1
--- /dev/null
+++ b/core/java/com/android/internal/app/IVoiceInteractorCallback.aidl
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2014 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.android.internal.app;
+
+import android.os.Bundle;
+
+import com.android.internal.app.IVoiceInteractorRequest;
+
+/**
+ * IPC interface for an application to receive callbacks from the voice system.
+ */
+oneway interface IVoiceInteractorCallback {
+    void deliverConfirmationResult(IVoiceInteractorRequest request, boolean confirmed,
+            in Bundle result);
+    void deliverCommandResult(IVoiceInteractorRequest request, boolean complete, in Bundle result);
+    void deliverCancel(IVoiceInteractorRequest request);
+}
diff --git a/core/java/com/android/internal/app/IVoiceInteractorRequest.aidl b/core/java/com/android/internal/app/IVoiceInteractorRequest.aidl
new file mode 100644
index 0000000..ce2902d
--- /dev/null
+++ b/core/java/com/android/internal/app/IVoiceInteractorRequest.aidl
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.internal.app;
+
+/**
+ * IPC interface identifying a request from an application calling through an IVoiceInteractor.
+ */
+interface IVoiceInteractorRequest {
+    void cancel();
+}
diff --git a/core/java/com/android/internal/app/IntentForwarderActivity.java b/core/java/com/android/internal/app/IntentForwarderActivity.java
new file mode 100644
index 0000000..2f74372
--- /dev/null
+++ b/core/java/com/android/internal/app/IntentForwarderActivity.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2014 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.android.internal.app;
+
+import android.app.Activity;
+import android.app.AppGlobals;
+import android.os.Bundle;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.IPackageManager;
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.app.ActivityManagerNative;
+import android.os.RemoteException;
+import android.util.Slog;
+import java.util.List;
+import java.util.Set;
+
+
+
+
+/*
+ * This is used in conjunction with DevicePolicyManager.setForwardingIntents to enable intents to be
+ * passed in and out of a managed profile.
+ */
+
+public class IntentForwarderActivity extends Activity  {
+
+    public static String TAG = "IntentForwarderActivity";
+
+    public static String FORWARD_INTENT_TO_USER_OWNER
+            = "com.android.internal.app.ForwardIntentToUserOwner";
+
+    public static String FORWARD_INTENT_TO_MANAGED_PROFILE
+            = "com.android.internal.app.ForwardIntentToManagedProfile";
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Intent intentReceived = getIntent();
+
+        String className = intentReceived.getComponent().getClassName();
+        final UserHandle userDest;
+
+        if (className.equals(FORWARD_INTENT_TO_USER_OWNER)) {
+            userDest = UserHandle.OWNER;
+        } else if (className.equals(FORWARD_INTENT_TO_MANAGED_PROFILE)) {
+            userDest = getManagedProfile();
+        } else {
+            Slog.wtf(TAG, IntentForwarderActivity.class.getName() + " cannot be called directly");
+            userDest = null;
+        }
+        if (userDest == null) { // This covers the case where there is no managed profile.
+            finish();
+            return;
+        }
+        Intent newIntent = new Intent(intentReceived);
+        newIntent.setComponent(null);
+        newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT
+                |Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP);
+        int callingUserId = getUserId();
+        IPackageManager ipm = AppGlobals.getPackageManager();
+        String resolvedType = newIntent.resolveTypeIfNeeded(getContentResolver());
+        boolean canForward = false;
+        try {
+            canForward = ipm.canForwardTo(newIntent, resolvedType, callingUserId,
+                    userDest.getIdentifier());
+        } catch (RemoteException e) {
+            Slog.e(TAG, "PackageManagerService is dead?");
+        }
+        if (canForward) {
+            startActivityAsUser(newIntent, userDest);
+        } else {
+            Slog.wtf(TAG, "the intent: " + newIntent + "cannot be forwarded from user "
+                    + callingUserId + " to user " + userDest.getIdentifier());
+        }
+        finish();
+    }
+
+    /**
+     * Returns the managed profile for this device or null if there is no managed
+     * profile.
+     *
+     * TODO: Remove the assumption that there is only one managed profile
+     * on the device.
+     */
+    private UserHandle getManagedProfile() {
+        UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
+        List<UserInfo> relatedUsers = userManager.getProfiles(UserHandle.USER_OWNER);
+        for (UserInfo userInfo : relatedUsers) {
+            if (userInfo.isManagedProfile()) return new UserHandle(userInfo.id);
+        }
+        Slog.wtf(TAG, FORWARD_INTENT_TO_MANAGED_PROFILE
+                + " has been called, but there is no managed profile");
+        return null;
+    }
+}
diff --git a/core/java/com/android/internal/app/LocalePicker.java b/core/java/com/android/internal/app/LocalePicker.java
index 043964f..ec2d654 100644
--- a/core/java/com/android/internal/app/LocalePicker.java
+++ b/core/java/com/android/internal/app/LocalePicker.java
@@ -117,7 +117,7 @@
         /** - TODO: Enable when zz_ZY Pseudolocale is complete
          *  if (!localeList.contains("zz_ZY")) {
          *      localeList.add("zz_ZY");
-         *	}
+         *  }
          */
         }
         String[] locales = new String[localeList.size()];
diff --git a/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java b/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java
index ae362af..237feed 100644
--- a/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java
+++ b/core/java/com/android/internal/app/MediaRouteChooserDialogFragment.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.view.View;
-import android.view.View.OnClickListener;
 
 /**
  * Media route chooser dialog fragment.
diff --git a/core/java/com/android/internal/app/MediaRouteControllerDialog.java b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
index 8fc99c7..b0e0373 100644
--- a/core/java/com/android/internal/app/MediaRouteControllerDialog.java
+++ b/core/java/com/android/internal/app/MediaRouteControllerDialog.java
@@ -256,13 +256,13 @@
     private Drawable getIconDrawable() {
         if (mRoute.isConnecting()) {
             if (mMediaRouteConnectingDrawable == null) {
-                mMediaRouteConnectingDrawable = getContext().getResources().getDrawable(
+                mMediaRouteConnectingDrawable = getContext().getDrawable(
                         R.drawable.ic_media_route_connecting_holo_dark);
             }
             return mMediaRouteConnectingDrawable;
         } else {
             if (mMediaRouteOnDrawable == null) {
-                mMediaRouteOnDrawable = getContext().getResources().getDrawable(
+                mMediaRouteOnDrawable = getContext().getDrawable(
                         R.drawable.ic_media_route_on_holo_dark);
             }
             return mMediaRouteOnDrawable;
diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java
index 40a705c..8cdaf91 100644
--- a/core/java/com/android/internal/app/PlatLogoActivity.java
+++ b/core/java/com/android/internal/app/PlatLogoActivity.java
@@ -18,7 +18,6 @@
 
 import android.app.Activity;
 import android.content.ActivityNotFoundException;
-import android.content.Context;
 import android.content.Intent;
 import android.graphics.Typeface;
 import android.provider.Settings;
@@ -26,19 +25,15 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.text.method.AllCapsTransformationMethod;
-import android.text.method.TransformationMethod;
 import android.util.DisplayMetrics;
 import android.view.Gravity;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.AnticipateOvershootInterpolator;
 import android.view.animation.DecelerateInterpolator;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
-import android.widget.LinearLayout;
 import android.widget.TextView;
-import android.widget.Toast;
 
 public class PlatLogoActivity extends Activity {
     FrameLayout mContent;
diff --git a/core/java/com/android/internal/app/ProcessStats.java b/core/java/com/android/internal/app/ProcessStats.java
index a87992a..882bec9 100644
--- a/core/java/com/android/internal/app/ProcessStats.java
+++ b/core/java/com/android/internal/app/ProcessStats.java
@@ -29,8 +29,11 @@
 import android.util.SparseArray;
 import android.util.TimeUtils;
 import android.webkit.WebViewFactory;
-import com.android.internal.util.ArrayUtils;
+
+import com.android.internal.util.GrowingArrayUtils;
+
 import dalvik.system.VMRuntime;
+import libcore.util.EmptyArray;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -171,7 +174,7 @@
     static final String CSV_SEP = "\t";
 
     // Current version of the parcel format.
-    private static final int PARCEL_VERSION = 13;
+    private static final int PARCEL_VERSION = 14;
     // In-memory Parcel magic number, used to detect attempts to unmarshall bad data
     private static final int MAGIC = 0x50535453;
 
@@ -189,7 +192,8 @@
     public String mTimePeriodStartClockStr;
     public int mFlags;
 
-    public final ProcessMap<PackageState> mPackages = new ProcessMap<PackageState>();
+    public final ProcessMap<SparseArray<PackageState>> mPackages
+            = new ProcessMap<SparseArray<PackageState>>();
     public final ProcessMap<ProcessState> mProcesses = new ProcessMap<ProcessState>();
 
     public final long[] mMemFactorDurations = new long[ADJ_COUNT];
@@ -227,40 +231,45 @@
     }
 
     public void add(ProcessStats other) {
-        ArrayMap<String, SparseArray<PackageState>> pkgMap = other.mPackages.getMap();
+        ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = other.mPackages.getMap();
         for (int ip=0; ip<pkgMap.size(); ip++) {
-            String pkgName = pkgMap.keyAt(ip);
-            SparseArray<PackageState> uids = pkgMap.valueAt(ip);
+            final String pkgName = pkgMap.keyAt(ip);
+            final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
             for (int iu=0; iu<uids.size(); iu++) {
-                int uid = uids.keyAt(iu);
-                PackageState otherState = uids.valueAt(iu);
-                final int NPROCS = otherState.mProcesses.size();
-                final int NSRVS = otherState.mServices.size();
-                for (int iproc=0; iproc<NPROCS; iproc++) {
-                    ProcessState otherProc = otherState.mProcesses.valueAt(iproc);
-                    if (otherProc.mCommonProcess != otherProc) {
-                        if (DEBUG) Slog.d(TAG, "Adding pkg " + pkgName + " uid " + uid
-                                + " proc " + otherProc.mName);
-                        ProcessState thisProc = getProcessStateLocked(pkgName, uid,
-                                otherProc.mName);
-                        if (thisProc.mCommonProcess == thisProc) {
-                            if (DEBUG) Slog.d(TAG, "Existing process is single-package, splitting");
-                            thisProc.mMultiPackage = true;
-                            long now = SystemClock.uptimeMillis();
-                            final PackageState pkgState = getPackageStateLocked(pkgName, uid);
-                            thisProc = thisProc.clone(thisProc.mPackage, now);
-                            pkgState.mProcesses.put(thisProc.mName, thisProc);
+                final int uid = uids.keyAt(iu);
+                final SparseArray<PackageState> versions = uids.valueAt(iu);
+                for (int iv=0; iv<versions.size(); iv++) {
+                    final int vers = versions.keyAt(iv);
+                    final PackageState otherState = versions.valueAt(iv);
+                    final int NPROCS = otherState.mProcesses.size();
+                    final int NSRVS = otherState.mServices.size();
+                    for (int iproc=0; iproc<NPROCS; iproc++) {
+                        ProcessState otherProc = otherState.mProcesses.valueAt(iproc);
+                        if (otherProc.mCommonProcess != otherProc) {
+                            if (DEBUG) Slog.d(TAG, "Adding pkg " + pkgName + " uid " + uid
+                                    + " vers " + vers + " proc " + otherProc.mName);
+                            ProcessState thisProc = getProcessStateLocked(pkgName, uid, vers,
+                                    otherProc.mName);
+                            if (thisProc.mCommonProcess == thisProc) {
+                                if (DEBUG) Slog.d(TAG, "Existing process is single-package, splitting");
+                                thisProc.mMultiPackage = true;
+                                long now = SystemClock.uptimeMillis();
+                                final PackageState pkgState = getPackageStateLocked(pkgName, uid,
+                                        vers);
+                                thisProc = thisProc.clone(thisProc.mPackage, now);
+                                pkgState.mProcesses.put(thisProc.mName, thisProc);
+                            }
+                            thisProc.add(otherProc);
                         }
-                        thisProc.add(otherProc);
                     }
-                }
-                for (int isvc=0; isvc<NSRVS; isvc++) {
-                    ServiceState otherSvc = otherState.mServices.valueAt(isvc);
-                    if (DEBUG) Slog.d(TAG, "Adding pkg " + pkgName + " uid " + uid
-                            + " service " + otherSvc.mName);
-                    ServiceState thisSvc = getServiceStateLocked(pkgName, uid,
-                            otherSvc.mProcessName, otherSvc.mName);
-                    thisSvc.add(otherSvc);
+                    for (int isvc=0; isvc<NSRVS; isvc++) {
+                        ServiceState otherSvc = otherState.mServices.valueAt(isvc);
+                        if (DEBUG) Slog.d(TAG, "Adding pkg " + pkgName + " uid " + uid
+                                + " service " + otherSvc.mName);
+                        ServiceState thisSvc = getServiceStateLocked(pkgName, uid, vers,
+                                otherSvc.mProcessName, otherSvc.mName);
+                        thisSvc.add(otherSvc);
+                    }
                 }
             }
         }
@@ -275,9 +284,11 @@
                 if (DEBUG) Slog.d(TAG, "Adding uid " + uid + " proc " + otherProc.mName);
                 if (thisProc == null) {
                     if (DEBUG) Slog.d(TAG, "Creating new process!");
-                    thisProc = new ProcessState(this, otherProc.mPackage, uid, otherProc.mName);
+                    thisProc = new ProcessState(this, otherProc.mPackage, uid, otherProc.mVersion,
+                            otherProc.mName);
                     mProcesses.put(otherProc.mName, uid, thisProc);
-                    PackageState thisState = getPackageStateLocked(otherProc.mPackage, uid);
+                    PackageState thisState = getPackageStateLocked(otherProc.mPackage, uid,
+                            otherProc.mVersion);
                     if (!thisState.mProcesses.containsKey(otherProc.mName)) {
                         thisState.mProcesses.put(otherProc.mName, thisProc);
                     }
@@ -440,7 +451,7 @@
     }
 
     static void dumpServiceTimeCheckin(PrintWriter pw, String label, String packageName,
-            int uid, String serviceName, ServiceState svc, int serviceType, int opCount,
+            int uid, int vers, String serviceName, ServiceState svc, int serviceType, int opCount,
             int curState, long curStartTime, long now) {
         if (opCount <= 0) {
             return;
@@ -451,6 +462,8 @@
         pw.print(",");
         pw.print(uid);
         pw.print(",");
+        pw.print(vers);
+        pw.print(",");
         pw.print(serviceName);
         pw.print(",");
         pw.print(opCount);
@@ -775,7 +788,7 @@
 
     static void dumpProcessSummaryLocked(PrintWriter pw, String prefix,
             ArrayList<ProcessState> procs, int[] screenStates, int[] memStates, int[] procStates,
-            long now, long totalTime) {
+            boolean inclUidVers, long now, long totalTime) {
         for (int i=procs.size()-1; i>=0; i--) {
             ProcessState proc = procs.get(i);
             pw.print(prefix);
@@ -783,6 +796,8 @@
             pw.print(proc.mName);
             pw.print(" / ");
             UserHandle.formatUid(pw, proc.mUid);
+            pw.print(" / v");
+            pw.print(proc.mVersion);
             pw.println(":");
             dumpProcessSummaryDetails(pw, proc, prefix, "         TOTAL: ", screenStates, memStates,
                     procStates, now, totalTime, true);
@@ -869,6 +884,8 @@
         pw.print("process");
         pw.print(CSV_SEP);
         pw.print("uid");
+        pw.print(CSV_SEP);
+        pw.print("vers");
         dumpStateHeadersCsv(pw, CSV_SEP, sepScreenStates ? screenStates : null,
                 sepMemStates ? memStates : null,
                 sepProcStates ? procStates : null);
@@ -878,6 +895,8 @@
             pw.print(proc.mName);
             pw.print(CSV_SEP);
             UserHandle.formatUid(pw, proc.mUid);
+            pw.print(CSV_SEP);
+            pw.print(proc.mVersion);
             dumpProcessStateCsv(pw, proc, sepScreenStates, screenStates,
                     sepMemStates, memStates, sepProcStates, procStates, now);
             pw.println();
@@ -979,46 +998,50 @@
     public void resetSafely() {
         if (DEBUG) Slog.d(TAG, "Safely resetting state of " + mTimePeriodStartClockStr);
         resetCommon();
-        long now = SystemClock.uptimeMillis();
-        ArrayMap<String, SparseArray<ProcessState>> procMap = mProcesses.getMap();
+
+        // First initialize use count of all common processes.
+        final long now = SystemClock.uptimeMillis();
+        final ArrayMap<String, SparseArray<ProcessState>> procMap = mProcesses.getMap();
         for (int ip=procMap.size()-1; ip>=0; ip--) {
-            SparseArray<ProcessState> uids = procMap.valueAt(ip);
+            final SparseArray<ProcessState> uids = procMap.valueAt(ip);
             for (int iu=uids.size()-1; iu>=0; iu--) {
-                ProcessState ps = uids.valueAt(iu);
-                if (ps.isInUse()) {
-                    uids.valueAt(iu).resetSafely(now);
-                } else {
-                    uids.valueAt(iu).makeDead();
-                    uids.removeAt(iu);
-                }
-            }
-            if (uids.size() <= 0) {
-                procMap.removeAt(ip);
-            }
+                uids.valueAt(iu).mTmpNumInUse = 0;
+           }
         }
-        ArrayMap<String, SparseArray<PackageState>> pkgMap = mPackages.getMap();
+
+        // Next reset or prune all per-package processes, and for the ones that are reset
+        // track this back to the common processes.
+        final ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = mPackages.getMap();
         for (int ip=pkgMap.size()-1; ip>=0; ip--) {
-            SparseArray<PackageState> uids = pkgMap.valueAt(ip);
+            final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
             for (int iu=uids.size()-1; iu>=0; iu--) {
-                PackageState pkgState = uids.valueAt(iu);
-                for (int iproc=pkgState.mProcesses.size()-1; iproc>=0; iproc--) {
-                    ProcessState ps = pkgState.mProcesses.valueAt(iproc);
-                    if (ps.isInUse() || ps.mCommonProcess.isInUse()) {
-                        pkgState.mProcesses.valueAt(iproc).resetSafely(now);
-                    } else {
-                        pkgState.mProcesses.valueAt(iproc).makeDead();
-                        pkgState.mProcesses.removeAt(iproc);
+                final SparseArray<PackageState> vpkgs = uids.valueAt(iu);
+                for (int iv=vpkgs.size()-1; iv>=0; iv--) {
+                    final PackageState pkgState = vpkgs.valueAt(iv);
+                    for (int iproc=pkgState.mProcesses.size()-1; iproc>=0; iproc--) {
+                        final ProcessState ps = pkgState.mProcesses.valueAt(iproc);
+                        if (ps.isInUse()) {
+                            ps.resetSafely(now);
+                            ps.mCommonProcess.mTmpNumInUse++;
+                            ps.mCommonProcess.mTmpFoundSubProc = ps;
+                        } else {
+                            pkgState.mProcesses.valueAt(iproc).makeDead();
+                            pkgState.mProcesses.removeAt(iproc);
+                        }
+                    }
+                    for (int isvc=pkgState.mServices.size()-1; isvc>=0; isvc--) {
+                        final ServiceState ss = pkgState.mServices.valueAt(isvc);
+                        if (ss.isInUse()) {
+                            ss.resetSafely(now);
+                        } else {
+                            pkgState.mServices.removeAt(isvc);
+                        }
+                    }
+                    if (pkgState.mProcesses.size() <= 0 && pkgState.mServices.size() <= 0) {
+                        vpkgs.removeAt(iv);
                     }
                 }
-                for (int isvc=pkgState.mServices.size()-1; isvc>=0; isvc--) {
-                    ServiceState ss = pkgState.mServices.valueAt(isvc);
-                    if (ss.isInUse()) {
-                        pkgState.mServices.valueAt(isvc).resetSafely(now);
-                    } else {
-                        pkgState.mServices.removeAt(isvc);
-                    }
-                }
-                if (pkgState.mProcesses.size() <= 0 && pkgState.mServices.size() <= 0) {
+                if (vpkgs.size() <= 0) {
                     uids.removeAt(iu);
                 }
             }
@@ -1026,6 +1049,37 @@
                 pkgMap.removeAt(ip);
             }
         }
+
+        // Finally prune out any common processes that are no longer in use.
+        for (int ip=procMap.size()-1; ip>=0; ip--) {
+            final SparseArray<ProcessState> uids = procMap.valueAt(ip);
+            for (int iu=uids.size()-1; iu>=0; iu--) {
+                ProcessState ps = uids.valueAt(iu);
+                if (ps.isInUse() || ps.mTmpNumInUse > 0) {
+                    // If this is a process for multiple packages, we could at this point
+                    // be back down to one package.  In that case, we want to revert back
+                    // to a single shared ProcessState.  We can do this by converting the
+                    // current package-specific ProcessState up to the shared ProcessState,
+                    // throwing away the current one we have here (because nobody else is
+                    // using it).
+                    if (!ps.mActive && ps.mMultiPackage && ps.mTmpNumInUse == 1) {
+                        // Here we go...
+                        ps = ps.mTmpFoundSubProc;
+                        ps.mCommonProcess = ps;
+                        uids.setValueAt(iu, ps);
+                    } else {
+                        ps.resetSafely(now);
+                    }
+                } else {
+                    ps.makeDead();
+                    uids.removeAt(iu);
+                }
+            }
+            if (uids.size() <= 0) {
+                procMap.removeAt(ip);
+            }
+        }
+
         mStartTime = now;
         if (DEBUG) Slog.d(TAG, "State reset; now " + mTimePeriodStartClockStr);
     }
@@ -1193,23 +1247,27 @@
                 uids.valueAt(iu).commitStateTime(now);
             }
         }
-        ArrayMap<String, SparseArray<PackageState>> pkgMap = mPackages.getMap();
+        final ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = mPackages.getMap();
         final int NPKG = pkgMap.size();
         for (int ip=0; ip<NPKG; ip++) {
-            SparseArray<PackageState> uids = pkgMap.valueAt(ip);
+            final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
             final int NUID = uids.size();
             for (int iu=0; iu<NUID; iu++) {
-                PackageState pkgState = uids.valueAt(iu);
-                final int NPROCS = pkgState.mProcesses.size();
-                for (int iproc=0; iproc<NPROCS; iproc++) {
-                    ProcessState proc = pkgState.mProcesses.valueAt(iproc);
-                    if (proc.mCommonProcess != proc) {
-                        proc.commitStateTime(now);
+                final SparseArray<PackageState> vpkgs = uids.valueAt(iu);
+                final int NVERS = vpkgs.size();
+                for (int iv=0; iv<NVERS; iv++) {
+                    PackageState pkgState = vpkgs.valueAt(iv);
+                    final int NPROCS = pkgState.mProcesses.size();
+                    for (int iproc=0; iproc<NPROCS; iproc++) {
+                        ProcessState proc = pkgState.mProcesses.valueAt(iproc);
+                        if (proc.mCommonProcess != proc) {
+                            proc.commitStateTime(now);
+                        }
                     }
-                }
-                final int NSRVS = pkgState.mServices.size();
-                for (int isvc=0; isvc<NSRVS; isvc++) {
-                    pkgState.mServices.valueAt(isvc).commitStateTime(now);
+                    final int NSRVS = pkgState.mServices.size();
+                    for (int isvc=0; isvc<NSRVS; isvc++) {
+                        pkgState.mServices.valueAt(isvc).commitStateTime(now);
+                    }
                 }
             }
         }
@@ -1239,46 +1297,53 @@
         out.writeInt(NPROC);
         for (int ip=0; ip<NPROC; ip++) {
             writeCommonString(out, procMap.keyAt(ip));
-            SparseArray<ProcessState> uids = procMap.valueAt(ip);
+            final SparseArray<ProcessState> uids = procMap.valueAt(ip);
             final int NUID = uids.size();
             out.writeInt(NUID);
             for (int iu=0; iu<NUID; iu++) {
                 out.writeInt(uids.keyAt(iu));
-                ProcessState proc = uids.valueAt(iu);
+                final ProcessState proc = uids.valueAt(iu);
                 writeCommonString(out, proc.mPackage);
+                out.writeInt(proc.mVersion);
                 proc.writeToParcel(out, now);
             }
         }
         out.writeInt(NPKG);
         for (int ip=0; ip<NPKG; ip++) {
             writeCommonString(out, pkgMap.keyAt(ip));
-            SparseArray<PackageState> uids = pkgMap.valueAt(ip);
+            final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
             final int NUID = uids.size();
             out.writeInt(NUID);
             for (int iu=0; iu<NUID; iu++) {
                 out.writeInt(uids.keyAt(iu));
-                PackageState pkgState = uids.valueAt(iu);
-                final int NPROCS = pkgState.mProcesses.size();
-                out.writeInt(NPROCS);
-                for (int iproc=0; iproc<NPROCS; iproc++) {
-                    writeCommonString(out, pkgState.mProcesses.keyAt(iproc));
-                    ProcessState proc = pkgState.mProcesses.valueAt(iproc);
-                    if (proc.mCommonProcess == proc) {
-                        // This is the same as the common process we wrote above.
-                        out.writeInt(0);
-                    } else {
-                        // There is separate data for this package's process.
-                        out.writeInt(1);
-                        proc.writeToParcel(out, now);
+                final SparseArray<PackageState> vpkgs = uids.valueAt(iu);
+                final int NVERS = vpkgs.size();
+                out.writeInt(NVERS);
+                for (int iv=0; iv<NVERS; iv++) {
+                    out.writeInt(vpkgs.keyAt(iv));
+                    final PackageState pkgState = vpkgs.valueAt(iv);
+                    final int NPROCS = pkgState.mProcesses.size();
+                    out.writeInt(NPROCS);
+                    for (int iproc=0; iproc<NPROCS; iproc++) {
+                        writeCommonString(out, pkgState.mProcesses.keyAt(iproc));
+                        final ProcessState proc = pkgState.mProcesses.valueAt(iproc);
+                        if (proc.mCommonProcess == proc) {
+                            // This is the same as the common process we wrote above.
+                            out.writeInt(0);
+                        } else {
+                            // There is separate data for this package's process.
+                            out.writeInt(1);
+                            proc.writeToParcel(out, now);
+                        }
                     }
-                }
-                final int NSRVS = pkgState.mServices.size();
-                out.writeInt(NSRVS);
-                for (int isvc=0; isvc<NSRVS; isvc++) {
-                    out.writeString(pkgState.mServices.keyAt(isvc));
-                    ServiceState svc = pkgState.mServices.valueAt(isvc);
-                    writeCommonString(out, svc.mProcessName);
-                    svc.writeToParcel(out, now);
+                    final int NSRVS = pkgState.mServices.size();
+                    out.writeInt(NSRVS);
+                    for (int isvc=0; isvc<NSRVS; isvc++) {
+                        out.writeString(pkgState.mServices.keyAt(isvc));
+                        final ServiceState svc = pkgState.mServices.valueAt(isvc);
+                        writeCommonString(out, svc.mProcessName);
+                        svc.writeToParcel(out, now);
+                    }
                 }
             }
         }
@@ -1396,7 +1461,7 @@
         }
         while (NPROC > 0) {
             NPROC--;
-            String procName = readCommonString(in, version);
+            final String procName = readCommonString(in, version);
             if (procName == null) {
                 mReadError = "bad process name";
                 return;
@@ -1408,23 +1473,24 @@
             }
             while (NUID > 0) {
                 NUID--;
-                int uid = in.readInt();
+                final int uid = in.readInt();
                 if (uid < 0) {
                     mReadError = "bad uid: " + uid;
                     return;
                 }
-                String pkgName = readCommonString(in, version);
+                final String pkgName = readCommonString(in, version);
                 if (pkgName == null) {
                     mReadError = "bad process package name";
                     return;
                 }
+                final int vers = in.readInt();
                 ProcessState proc = hadData ? mProcesses.get(procName, uid) : null;
                 if (proc != null) {
                     if (!proc.readFromParcel(in, false)) {
                         return;
                     }
                 } else {
-                    proc = new ProcessState(this, pkgName, uid, procName);
+                    proc = new ProcessState(this, pkgName, uid, vers, procName);
                     if (!proc.readFromParcel(in, true)) {
                         return;
                     }
@@ -1444,7 +1510,7 @@
         }
         while (NPKG > 0) {
             NPKG--;
-            String pkgName = readCommonString(in, version);
+            final String pkgName = readCommonString(in, version);
             if (pkgName == null) {
                 mReadError = "bad package name";
                 return;
@@ -1456,83 +1522,98 @@
             }
             while (NUID > 0) {
                 NUID--;
-                int uid = in.readInt();
+                final int uid = in.readInt();
                 if (uid < 0) {
                     mReadError = "bad uid: " + uid;
                     return;
                 }
-                PackageState pkgState = new PackageState(pkgName, uid);
-                mPackages.put(pkgName, uid, pkgState);
-                int NPROCS = in.readInt();
-                if (NPROCS < 0) {
-                    mReadError = "bad package process count: " + NPROCS;
+                int NVERS = in.readInt();
+                if (NVERS < 0) {
+                    mReadError = "bad versions count: " + NVERS;
                     return;
                 }
-                while (NPROCS > 0) {
-                    NPROCS--;
-                    String procName = readCommonString(in, version);
-                    if (procName == null) {
-                        mReadError = "bad package process name";
+                while (NVERS > 0) {
+                    NVERS--;
+                    final int vers = in.readInt();
+                    PackageState pkgState = new PackageState(pkgName, uid);
+                    SparseArray<PackageState> vpkg = mPackages.get(pkgName, uid);
+                    if (vpkg == null) {
+                        vpkg = new SparseArray<PackageState>();
+                        mPackages.put(pkgName, uid, vpkg);
+                    }
+                    vpkg.put(vers, pkgState);
+                    int NPROCS = in.readInt();
+                    if (NPROCS < 0) {
+                        mReadError = "bad package process count: " + NPROCS;
                         return;
                     }
-                    int hasProc = in.readInt();
-                    if (DEBUG_PARCEL) Slog.d(TAG, "Reading package " + pkgName + " " + uid
-                            + " process " + procName + " hasProc=" + hasProc);
-                    ProcessState commonProc = mProcesses.get(procName, uid);
-                    if (DEBUG_PARCEL) Slog.d(TAG, "Got common proc " + procName + " " + uid
-                            + ": " + commonProc);
-                    if (commonProc == null) {
-                        mReadError = "no common proc: " + procName;
-                        return;
-                    }
-                    if (hasProc != 0) {
-                        // The process for this package is unique to the package; we
-                        // need to load it.  We don't need to do anything about it if
-                        // it is not unique because if someone later looks for it
-                        // they will find and use it from the global procs.
-                        ProcessState proc = hadData ? pkgState.mProcesses.get(procName) : null;
-                        if (proc != null) {
-                            if (!proc.readFromParcel(in, false)) {
-                                return;
-                            }
-                        } else {
-                            proc = new ProcessState(commonProc, pkgName, uid, procName, 0);
-                            if (!proc.readFromParcel(in, true)) {
-                                return;
-                            }
+                    while (NPROCS > 0) {
+                        NPROCS--;
+                        String procName = readCommonString(in, version);
+                        if (procName == null) {
+                            mReadError = "bad package process name";
+                            return;
                         }
-                        if (DEBUG_PARCEL) Slog.d(TAG, "Adding package " + pkgName + " process: "
-                                + procName + " " + uid + " " + proc);
-                        pkgState.mProcesses.put(procName, proc);
-                    } else {
-                        if (DEBUG_PARCEL) Slog.d(TAG, "Adding package " + pkgName + " process: "
-                                + procName + " " + uid + " " + commonProc);
-                        pkgState.mProcesses.put(procName, commonProc);
+                        int hasProc = in.readInt();
+                        if (DEBUG_PARCEL) Slog.d(TAG, "Reading package " + pkgName + " " + uid
+                                + " process " + procName + " hasProc=" + hasProc);
+                        ProcessState commonProc = mProcesses.get(procName, uid);
+                        if (DEBUG_PARCEL) Slog.d(TAG, "Got common proc " + procName + " " + uid
+                                + ": " + commonProc);
+                        if (commonProc == null) {
+                            mReadError = "no common proc: " + procName;
+                            return;
+                        }
+                        if (hasProc != 0) {
+                            // The process for this package is unique to the package; we
+                            // need to load it.  We don't need to do anything about it if
+                            // it is not unique because if someone later looks for it
+                            // they will find and use it from the global procs.
+                            ProcessState proc = hadData ? pkgState.mProcesses.get(procName) : null;
+                            if (proc != null) {
+                                if (!proc.readFromParcel(in, false)) {
+                                    return;
+                                }
+                            } else {
+                                proc = new ProcessState(commonProc, pkgName, uid, vers, procName,
+                                        0);
+                                if (!proc.readFromParcel(in, true)) {
+                                    return;
+                                }
+                            }
+                            if (DEBUG_PARCEL) Slog.d(TAG, "Adding package " + pkgName + " process: "
+                                    + procName + " " + uid + " " + proc);
+                            pkgState.mProcesses.put(procName, proc);
+                        } else {
+                            if (DEBUG_PARCEL) Slog.d(TAG, "Adding package " + pkgName + " process: "
+                                    + procName + " " + uid + " " + commonProc);
+                            pkgState.mProcesses.put(procName, commonProc);
+                        }
                     }
-                }
-                int NSRVS = in.readInt();
-                if (NSRVS < 0) {
-                    mReadError = "bad package service count: " + NSRVS;
-                    return;
-                }
-                while (NSRVS > 0) {
-                    NSRVS--;
-                    String serviceName = in.readString();
-                    if (serviceName == null) {
-                        mReadError = "bad package service name";
+                    int NSRVS = in.readInt();
+                    if (NSRVS < 0) {
+                        mReadError = "bad package service count: " + NSRVS;
                         return;
                     }
-                    String processName = version > 9 ? readCommonString(in, version) : null;
-                    ServiceState serv = hadData ? pkgState.mServices.get(serviceName) : null;
-                    if (serv == null) {
-                        serv = new ServiceState(this, pkgName, serviceName, processName, null);
+                    while (NSRVS > 0) {
+                        NSRVS--;
+                        String serviceName = in.readString();
+                        if (serviceName == null) {
+                            mReadError = "bad package service name";
+                            return;
+                        }
+                        String processName = version > 9 ? readCommonString(in, version) : null;
+                        ServiceState serv = hadData ? pkgState.mServices.get(serviceName) : null;
+                        if (serv == null) {
+                            serv = new ServiceState(this, pkgName, serviceName, processName, null);
+                        }
+                        if (!serv.readFromParcel(in)) {
+                            return;
+                        }
+                        if (DEBUG_PARCEL) Slog.d(TAG, "Adding package " + pkgName + " service: "
+                                + serviceName + " " + uid + " " + serv);
+                        pkgState.mServices.put(serviceName, serv);
                     }
-                    if (!serv.readFromParcel(in)) {
-                        return;
-                    }
-                    if (DEBUG_PARCEL) Slog.d(TAG, "Adding package " + pkgName + " service: "
-                            + serviceName + " " + uid + " " + serv);
-                    pkgState.mServices.put(serviceName, serv);
                 }
             }
         }
@@ -1543,21 +1624,10 @@
     }
 
     int addLongData(int index, int type, int num) {
-        int tableLen = mAddLongTable != null ? mAddLongTable.length : 0;
-        if (mAddLongTableSize >= tableLen) {
-            int newSize = ArrayUtils.idealIntArraySize(tableLen + 1);
-            int[] newTable = new int[newSize];
-            if (tableLen > 0) {
-                System.arraycopy(mAddLongTable, 0, newTable, 0, tableLen);
-            }
-            mAddLongTable = newTable;
-        }
-        if (mAddLongTableSize > 0 && mAddLongTableSize - index != 0) {
-            System.arraycopy(mAddLongTable, index, mAddLongTable, index + 1,
-                    mAddLongTableSize - index);
-        }
         int off = allocLongData(num);
-        mAddLongTable[index] = type | off;
+        mAddLongTable = GrowingArrayUtils.insert(
+                mAddLongTable != null ? mAddLongTable : EmptyArray.INT,
+                mAddLongTableSize, index, type | off);
         mAddLongTableSize++;
         return off;
     }
@@ -1627,30 +1697,36 @@
         return ~lo;  // value not present
     }
 
-    public PackageState getPackageStateLocked(String packageName, int uid) {
-        PackageState as = mPackages.get(packageName, uid);
+    public PackageState getPackageStateLocked(String packageName, int uid, int vers) {
+        SparseArray<PackageState> vpkg = mPackages.get(packageName, uid);
+        if (vpkg == null) {
+            vpkg = new SparseArray<PackageState>();
+            mPackages.put(packageName, uid, vpkg);
+        }
+        PackageState as = vpkg.get(vers);
         if (as != null) {
             return as;
         }
         as = new PackageState(packageName, uid);
-        mPackages.put(packageName, uid, as);
+        vpkg.put(vers, as);
         return as;
     }
 
-    public ProcessState getProcessStateLocked(String packageName, int uid, String processName) {
-        final PackageState pkgState = getPackageStateLocked(packageName, uid);
+    public ProcessState getProcessStateLocked(String packageName, int uid, int vers,
+            String processName) {
+        final PackageState pkgState = getPackageStateLocked(packageName, uid, vers);
         ProcessState ps = pkgState.mProcesses.get(processName);
         if (ps != null) {
             return ps;
         }
         ProcessState commonProc = mProcesses.get(processName, uid);
         if (commonProc == null) {
-            commonProc = new ProcessState(this, packageName, uid, processName);
+            commonProc = new ProcessState(this, packageName, uid, vers, processName);
             mProcesses.put(processName, uid, commonProc);
             if (DEBUG) Slog.d(TAG, "GETPROC created new common " + commonProc);
         }
         if (!commonProc.mMultiPackage) {
-            if (packageName.equals(commonProc.mPackage)) {
+            if (packageName.equals(commonProc.mPackage) && vers == commonProc.mVersion) {
                 // This common process is not in use by multiple packages, and
                 // is for the calling package, so we can just use it directly.
                 ps = commonProc;
@@ -1668,7 +1744,8 @@
                 long now = SystemClock.uptimeMillis();
                 // First let's make a copy of the current process state and put
                 // that under the now unique state for its original package name.
-                final PackageState commonPkgState = getPackageStateLocked(commonProc.mPackage, uid);
+                final PackageState commonPkgState = getPackageStateLocked(commonProc.mPackage,
+                        uid, commonProc.mVersion);
                 if (commonPkgState != null) {
                     ProcessState cloned = commonProc.clone(commonProc.mPackage, now);
                     if (DEBUG) Slog.d(TAG, "GETPROC setting clone to pkg " + commonProc.mPackage
@@ -1691,13 +1768,13 @@
                             + "/" + uid + " for proc " + commonProc.mName);
                 }
                 // And now make a fresh new process state for the new package name.
-                ps = new ProcessState(commonProc, packageName, uid, processName, now);
+                ps = new ProcessState(commonProc, packageName, uid, vers, processName, now);
                 if (DEBUG) Slog.d(TAG, "GETPROC created new pkg " + ps);
             }
         } else {
             // The common process is for multiple packages, we need to create a
             // separate object for the per-package data.
-            ps = new ProcessState(commonProc, packageName, uid, processName,
+            ps = new ProcessState(commonProc, packageName, uid, vers, processName,
                     SystemClock.uptimeMillis());
             if (DEBUG) Slog.d(TAG, "GETPROC created new pkg " + ps);
         }
@@ -1706,16 +1783,16 @@
         return ps;
     }
 
-    public ProcessStats.ServiceState getServiceStateLocked(String packageName, int uid,
+    public ProcessStats.ServiceState getServiceStateLocked(String packageName, int uid, int vers,
             String processName, String className) {
-        final ProcessStats.PackageState as = getPackageStateLocked(packageName, uid);
+        final ProcessStats.PackageState as = getPackageStateLocked(packageName, uid, vers);
         ProcessStats.ServiceState ss = as.mServices.get(className);
         if (ss != null) {
             if (DEBUG) Slog.d(TAG, "GETSVC: returning existing " + ss);
             return ss;
         }
         final ProcessStats.ProcessState ps = processName != null
-                ? getProcessStateLocked(packageName, uid, processName) : null;
+                ? getProcessStateLocked(packageName, uid, vers, processName) : null;
         ss = new ProcessStats.ServiceState(this, packageName, className, processName, ps);
         as.mServices.put(className, ss);
         if (DEBUG) Slog.d(TAG, "GETSVC: creating " + ss + " in " + ps);
@@ -1756,119 +1833,124 @@
             boolean dumpAll, boolean activeOnly) {
         long totalTime = dumpSingleTime(null, null, mMemFactorDurations, mMemFactor,
                 mStartTime, now);
-        ArrayMap<String, SparseArray<PackageState>> pkgMap = mPackages.getMap();
+        ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = mPackages.getMap();
         boolean printedHeader = false;
         boolean sepNeeded = false;
         for (int ip=0; ip<pkgMap.size(); ip++) {
             final String pkgName = pkgMap.keyAt(ip);
-            final SparseArray<PackageState> uids = pkgMap.valueAt(ip);
+            final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
             for (int iu=0; iu<uids.size(); iu++) {
                 final int uid = uids.keyAt(iu);
-                final PackageState pkgState = uids.valueAt(iu);
-                final int NPROCS = pkgState.mProcesses.size();
-                final int NSRVS = pkgState.mServices.size();
-                final boolean pkgMatch = reqPackage == null || reqPackage.equals(pkgName);
-                if (!pkgMatch) {
-                    boolean procMatch = false;
-                    for (int iproc=0; iproc<NPROCS; iproc++) {
-                        ProcessState proc = pkgState.mProcesses.valueAt(iproc);
-                        if (reqPackage.equals(proc.mName)) {
-                            procMatch = true;
-                            break;
+                final SparseArray<PackageState> vpkgs = uids.valueAt(iu);
+                for (int iv=0; iv<vpkgs.size(); iv++) {
+                    final int vers = vpkgs.keyAt(iv);
+                    final PackageState pkgState = vpkgs.valueAt(iv);
+                    final int NPROCS = pkgState.mProcesses.size();
+                    final int NSRVS = pkgState.mServices.size();
+                    final boolean pkgMatch = reqPackage == null || reqPackage.equals(pkgName);
+                    if (!pkgMatch) {
+                        boolean procMatch = false;
+                        for (int iproc=0; iproc<NPROCS; iproc++) {
+                            ProcessState proc = pkgState.mProcesses.valueAt(iproc);
+                            if (reqPackage.equals(proc.mName)) {
+                                procMatch = true;
+                                break;
+                            }
                         }
-                    }
-                    if (!procMatch) {
-                        continue;
-                    }
-                }
-                if (NPROCS > 0 || NSRVS > 0) {
-                    if (!printedHeader) {
-                        pw.println("Per-Package Stats:");
-                        printedHeader = true;
-                        sepNeeded = true;
-                    }
-                    pw.print("  * "); pw.print(pkgName); pw.print(" / ");
-                            UserHandle.formatUid(pw, uid); pw.println(":");
-                }
-                if (!dumpSummary || dumpAll) {
-                    for (int iproc=0; iproc<NPROCS; iproc++) {
-                        ProcessState proc = pkgState.mProcesses.valueAt(iproc);
-                        if (!pkgMatch && !reqPackage.equals(proc.mName)) {
+                        if (!procMatch) {
                             continue;
                         }
-                        if (activeOnly && !proc.isInUse()) {
-                            pw.print("      (Not active: ");
-                                    pw.print(pkgState.mProcesses.keyAt(iproc)); pw.println(")");
-                            continue;
-                        }
-                        pw.print("      Process ");
-                        pw.print(pkgState.mProcesses.keyAt(iproc));
-                        if (proc.mCommonProcess.mMultiPackage) {
-                            pw.print(" (multi, ");
-                        } else {
-                            pw.print(" (unique, ");
-                        }
-                        pw.print(proc.mDurationsTableSize);
-                        pw.print(" entries)");
-                        pw.println(":");
-                        dumpProcessState(pw, "        ", proc, ALL_SCREEN_ADJ, ALL_MEM_ADJ,
-                                ALL_PROC_STATES, now);
-                        dumpProcessPss(pw, "        ", proc, ALL_SCREEN_ADJ, ALL_MEM_ADJ,
-                                ALL_PROC_STATES);
-                        dumpProcessInternalLocked(pw, "        ", proc, dumpAll);
                     }
-                } else {
-                    ArrayList<ProcessState> procs = new ArrayList<ProcessState>();
-                    for (int iproc=0; iproc<NPROCS; iproc++) {
-                        ProcessState proc = pkgState.mProcesses.valueAt(iproc);
-                        if (!pkgMatch && !reqPackage.equals(proc.mName)) {
-                            continue;
+                    if (NPROCS > 0 || NSRVS > 0) {
+                        if (!printedHeader) {
+                            pw.println("Per-Package Stats:");
+                            printedHeader = true;
+                            sepNeeded = true;
                         }
-                        if (activeOnly && !proc.isInUse()) {
-                            continue;
+                        pw.print("  * "); pw.print(pkgName); pw.print(" / ");
+                                UserHandle.formatUid(pw, uid); pw.print(" / v");
+                                pw.print(vers); pw.println(":");
+                    }
+                    if (!dumpSummary || dumpAll) {
+                        for (int iproc=0; iproc<NPROCS; iproc++) {
+                            ProcessState proc = pkgState.mProcesses.valueAt(iproc);
+                            if (!pkgMatch && !reqPackage.equals(proc.mName)) {
+                                continue;
+                            }
+                            if (activeOnly && !proc.isInUse()) {
+                                pw.print("      (Not active: ");
+                                        pw.print(pkgState.mProcesses.keyAt(iproc)); pw.println(")");
+                                continue;
+                            }
+                            pw.print("      Process ");
+                            pw.print(pkgState.mProcesses.keyAt(iproc));
+                            if (proc.mCommonProcess.mMultiPackage) {
+                                pw.print(" (multi, ");
+                            } else {
+                                pw.print(" (unique, ");
+                            }
+                            pw.print(proc.mDurationsTableSize);
+                            pw.print(" entries)");
+                            pw.println(":");
+                            dumpProcessState(pw, "        ", proc, ALL_SCREEN_ADJ, ALL_MEM_ADJ,
+                                    ALL_PROC_STATES, now);
+                            dumpProcessPss(pw, "        ", proc, ALL_SCREEN_ADJ, ALL_MEM_ADJ,
+                                    ALL_PROC_STATES);
+                            dumpProcessInternalLocked(pw, "        ", proc, dumpAll);
                         }
-                        procs.add(proc);
-                    }
-                    dumpProcessSummaryLocked(pw, "      ", procs, ALL_SCREEN_ADJ, ALL_MEM_ADJ,
-                            NON_CACHED_PROC_STATES, now, totalTime);
-                }
-                for (int isvc=0; isvc<NSRVS; isvc++) {
-                    ServiceState svc = pkgState.mServices.valueAt(isvc);
-                    if (!pkgMatch && !reqPackage.equals(svc.mProcessName)) {
-                        continue;
-                    }
-                    if (activeOnly && !svc.isInUse()) {
-                        pw.print("      (Not active: ");
-                                pw.print(pkgState.mServices.keyAt(isvc)); pw.println(")");
-                        continue;
-                    }
-                    if (dumpAll) {
-                        pw.print("      Service ");
                     } else {
-                        pw.print("      * ");
-                    }
-                    pw.print(pkgState.mServices.keyAt(isvc));
-                    pw.println(":");
-                    pw.print("        Process: "); pw.println(svc.mProcessName);
-                    dumpServiceStats(pw, "        ", "          ", "    ", "Running", svc,
-                            svc.mRunCount, ServiceState.SERVICE_RUN, svc.mRunState,
-                            svc.mRunStartTime, now, totalTime, !dumpSummary || dumpAll);
-                    dumpServiceStats(pw, "        ", "          ", "    ", "Started", svc,
-                            svc.mStartedCount, ServiceState.SERVICE_STARTED, svc.mStartedState,
-                            svc.mStartedStartTime, now, totalTime, !dumpSummary || dumpAll);
-                    dumpServiceStats(pw, "        ", "          ", "      ", "Bound", svc,
-                            svc.mBoundCount, ServiceState.SERVICE_BOUND, svc.mBoundState,
-                            svc.mBoundStartTime, now, totalTime, !dumpSummary || dumpAll);
-                    dumpServiceStats(pw, "        ", "          ", "  ", "Executing", svc,
-                            svc.mExecCount, ServiceState.SERVICE_EXEC, svc.mExecState,
-                            svc.mExecStartTime, now, totalTime, !dumpSummary || dumpAll);
-                    if (dumpAll) {
-                        if (svc.mOwner != null) {
-                            pw.print("        mOwner="); pw.println(svc.mOwner);
+                        ArrayList<ProcessState> procs = new ArrayList<ProcessState>();
+                        for (int iproc=0; iproc<NPROCS; iproc++) {
+                            ProcessState proc = pkgState.mProcesses.valueAt(iproc);
+                            if (!pkgMatch && !reqPackage.equals(proc.mName)) {
+                                continue;
+                            }
+                            if (activeOnly && !proc.isInUse()) {
+                                continue;
+                            }
+                            procs.add(proc);
                         }
-                        if (svc.mStarted || svc.mRestarting) {
-                            pw.print("        mStarted="); pw.print(svc.mStarted);
-                            pw.print(" mRestarting="); pw.println(svc.mRestarting);
+                        dumpProcessSummaryLocked(pw, "      ", procs, ALL_SCREEN_ADJ, ALL_MEM_ADJ,
+                                NON_CACHED_PROC_STATES, false, now, totalTime);
+                    }
+                    for (int isvc=0; isvc<NSRVS; isvc++) {
+                        ServiceState svc = pkgState.mServices.valueAt(isvc);
+                        if (!pkgMatch && !reqPackage.equals(svc.mProcessName)) {
+                            continue;
+                        }
+                        if (activeOnly && !svc.isInUse()) {
+                            pw.print("      (Not active: ");
+                                    pw.print(pkgState.mServices.keyAt(isvc)); pw.println(")");
+                            continue;
+                        }
+                        if (dumpAll) {
+                            pw.print("      Service ");
+                        } else {
+                            pw.print("      * ");
+                        }
+                        pw.print(pkgState.mServices.keyAt(isvc));
+                        pw.println(":");
+                        pw.print("        Process: "); pw.println(svc.mProcessName);
+                        dumpServiceStats(pw, "        ", "          ", "    ", "Running", svc,
+                                svc.mRunCount, ServiceState.SERVICE_RUN, svc.mRunState,
+                                svc.mRunStartTime, now, totalTime, !dumpSummary || dumpAll);
+                        dumpServiceStats(pw, "        ", "          ", "    ", "Started", svc,
+                                svc.mStartedCount, ServiceState.SERVICE_STARTED, svc.mStartedState,
+                                svc.mStartedStartTime, now, totalTime, !dumpSummary || dumpAll);
+                        dumpServiceStats(pw, "        ", "          ", "      ", "Bound", svc,
+                                svc.mBoundCount, ServiceState.SERVICE_BOUND, svc.mBoundState,
+                                svc.mBoundStartTime, now, totalTime, !dumpSummary || dumpAll);
+                        dumpServiceStats(pw, "        ", "          ", "  ", "Executing", svc,
+                                svc.mExecCount, ServiceState.SERVICE_EXEC, svc.mExecState,
+                                svc.mExecStartTime, now, totalTime, !dumpSummary || dumpAll);
+                        if (dumpAll) {
+                            if (svc.mOwner != null) {
+                                pw.print("        mOwner="); pw.println(svc.mOwner);
+                            }
+                            if (svc.mStarted || svc.mRestarting) {
+                                pw.print("        mStarted="); pw.print(svc.mStarted);
+                                pw.print(" mRestarting="); pw.println(svc.mRestarting);
+                            }
                         }
                     }
                 }
@@ -2059,7 +2141,7 @@
                 pw.println(header);
             }
             dumpProcessSummaryLocked(pw, prefix, procs, screenStates, memStates,
-                    sortProcStates, now, totalTime);
+                    sortProcStates, true, now, totalTime);
         }
     }
 
@@ -2067,23 +2149,27 @@
             int[] procStates, int sortProcStates[], long now, String reqPackage,
             boolean activeOnly) {
         final ArraySet<ProcessState> foundProcs = new ArraySet<ProcessState>();
-        final ArrayMap<String, SparseArray<PackageState>> pkgMap = mPackages.getMap();
+        final ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = mPackages.getMap();
         for (int ip=0; ip<pkgMap.size(); ip++) {
             final String pkgName = pkgMap.keyAt(ip);
-            final SparseArray<PackageState> procs = pkgMap.valueAt(ip);
+            final SparseArray<SparseArray<PackageState>> procs = pkgMap.valueAt(ip);
             for (int iu=0; iu<procs.size(); iu++) {
-                final PackageState state = procs.valueAt(iu);
-                final int NPROCS = state.mProcesses.size();
-                final boolean pkgMatch = reqPackage == null || reqPackage.equals(pkgName);
-                for (int iproc=0; iproc<NPROCS; iproc++) {
-                    final ProcessState proc = state.mProcesses.valueAt(iproc);
-                    if (!pkgMatch && !reqPackage.equals(proc.mName)) {
-                        continue;
+                final SparseArray<PackageState> vpkgs = procs.valueAt(iu);
+                final int NVERS = vpkgs.size();
+                for (int iv=0; iv<NVERS; iv++) {
+                    final PackageState state = vpkgs.valueAt(iv);
+                    final int NPROCS = state.mProcesses.size();
+                    final boolean pkgMatch = reqPackage == null || reqPackage.equals(pkgName);
+                    for (int iproc=0; iproc<NPROCS; iproc++) {
+                        final ProcessState proc = state.mProcesses.valueAt(iproc);
+                        if (!pkgMatch && !reqPackage.equals(proc.mName)) {
+                            continue;
+                        }
+                        if (activeOnly && !proc.isInUse()) {
+                            continue;
+                        }
+                        foundProcs.add(proc.mCommonProcess);
                     }
-                    if (activeOnly && !proc.isInUse()) {
-                        continue;
-                    }
-                    foundProcs.add(proc.mCommonProcess);
                 }
             }
         }
@@ -2128,8 +2214,8 @@
 
     public void dumpCheckinLocked(PrintWriter pw, String reqPackage) {
         final long now = SystemClock.uptimeMillis();
-        ArrayMap<String, SparseArray<PackageState>> pkgMap = mPackages.getMap();
-        pw.println("vers,3");
+        final ArrayMap<String, SparseArray<SparseArray<PackageState>>> pkgMap = mPackages.getMap();
+        pw.println("vers,4");
         pw.print("period,"); pw.print(mTimePeriodStartClockStr);
         pw.print(","); pw.print(mTimePeriodStartRealtime); pw.print(",");
         pw.print(mRunning ? SystemClock.elapsedRealtime() : mTimePeriodEndRealtime);
@@ -2152,75 +2238,85 @@
         pw.println();
         pw.print("config,"); pw.print(mRuntime); pw.print(','); pw.println(mWebView);
         for (int ip=0; ip<pkgMap.size(); ip++) {
-            String pkgName = pkgMap.keyAt(ip);
+            final String pkgName = pkgMap.keyAt(ip);
             if (reqPackage != null && !reqPackage.equals(pkgName)) {
                 continue;
             }
-            SparseArray<PackageState> uids = pkgMap.valueAt(ip);
+            final SparseArray<SparseArray<PackageState>> uids = pkgMap.valueAt(ip);
             for (int iu=0; iu<uids.size(); iu++) {
-                int uid = uids.keyAt(iu);
-                PackageState pkgState = uids.valueAt(iu);
-                final int NPROCS = pkgState.mProcesses.size();
-                final int NSRVS = pkgState.mServices.size();
-                for (int iproc=0; iproc<NPROCS; iproc++) {
-                    ProcessState proc = pkgState.mProcesses.valueAt(iproc);
-                    pw.print("pkgproc,");
-                    pw.print(pkgName);
-                    pw.print(",");
-                    pw.print(uid);
-                    pw.print(",");
-                    pw.print(collapseString(pkgName, pkgState.mProcesses.keyAt(iproc)));
-                    dumpAllProcessStateCheckin(pw, proc, now);
-                    pw.println();
-                    if (proc.mPssTableSize > 0) {
-                        pw.print("pkgpss,");
+                final int uid = uids.keyAt(iu);
+                final SparseArray<PackageState> vpkgs = uids.valueAt(iu);
+                for (int iv=0; iv<vpkgs.size(); iv++) {
+                    final int vers = vpkgs.keyAt(iv);
+                    final PackageState pkgState = vpkgs.valueAt(iv);
+                    final int NPROCS = pkgState.mProcesses.size();
+                    final int NSRVS = pkgState.mServices.size();
+                    for (int iproc=0; iproc<NPROCS; iproc++) {
+                        ProcessState proc = pkgState.mProcesses.valueAt(iproc);
+                        pw.print("pkgproc,");
                         pw.print(pkgName);
                         pw.print(",");
                         pw.print(uid);
                         pw.print(",");
-                        pw.print(collapseString(pkgName, pkgState.mProcesses.keyAt(iproc)));
-                        dumpAllProcessPssCheckin(pw, proc);
-                        pw.println();
-                    }
-                    if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0
-                            || proc.mNumCachedKill > 0) {
-                        pw.print("pkgkills,");
-                        pw.print(pkgName);
-                        pw.print(",");
-                        pw.print(uid);
+                        pw.print(vers);
                         pw.print(",");
                         pw.print(collapseString(pkgName, pkgState.mProcesses.keyAt(iproc)));
-                        pw.print(",");
-                        pw.print(proc.mNumExcessiveWake);
-                        pw.print(",");
-                        pw.print(proc.mNumExcessiveCpu);
-                        pw.print(",");
-                        pw.print(proc.mNumCachedKill);
-                        pw.print(",");
-                        pw.print(proc.mMinCachedKillPss);
-                        pw.print(":");
-                        pw.print(proc.mAvgCachedKillPss);
-                        pw.print(":");
-                        pw.print(proc.mMaxCachedKillPss);
+                        dumpAllProcessStateCheckin(pw, proc, now);
                         pw.println();
+                        if (proc.mPssTableSize > 0) {
+                            pw.print("pkgpss,");
+                            pw.print(pkgName);
+                            pw.print(",");
+                            pw.print(uid);
+                            pw.print(",");
+                            pw.print(vers);
+                            pw.print(",");
+                            pw.print(collapseString(pkgName, pkgState.mProcesses.keyAt(iproc)));
+                            dumpAllProcessPssCheckin(pw, proc);
+                            pw.println();
+                        }
+                        if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0
+                                || proc.mNumCachedKill > 0) {
+                            pw.print("pkgkills,");
+                            pw.print(pkgName);
+                            pw.print(",");
+                            pw.print(uid);
+                            pw.print(",");
+                            pw.print(vers);
+                            pw.print(",");
+                            pw.print(collapseString(pkgName, pkgState.mProcesses.keyAt(iproc)));
+                            pw.print(",");
+                            pw.print(proc.mNumExcessiveWake);
+                            pw.print(",");
+                            pw.print(proc.mNumExcessiveCpu);
+                            pw.print(",");
+                            pw.print(proc.mNumCachedKill);
+                            pw.print(",");
+                            pw.print(proc.mMinCachedKillPss);
+                            pw.print(":");
+                            pw.print(proc.mAvgCachedKillPss);
+                            pw.print(":");
+                            pw.print(proc.mMaxCachedKillPss);
+                            pw.println();
+                        }
                     }
-                }
-                for (int isvc=0; isvc<NSRVS; isvc++) {
-                    String serviceName = collapseString(pkgName,
-                            pkgState.mServices.keyAt(isvc));
-                    ServiceState svc = pkgState.mServices.valueAt(isvc);
-                    dumpServiceTimeCheckin(pw, "pkgsvc-run", pkgName, uid, serviceName,
-                            svc, ServiceState.SERVICE_RUN, svc.mRunCount,
-                            svc.mRunState, svc.mRunStartTime, now);
-                    dumpServiceTimeCheckin(pw, "pkgsvc-start", pkgName, uid, serviceName,
-                            svc, ServiceState.SERVICE_STARTED, svc.mStartedCount,
-                            svc.mStartedState, svc.mStartedStartTime, now);
-                    dumpServiceTimeCheckin(pw, "pkgsvc-bound", pkgName, uid, serviceName,
-                            svc, ServiceState.SERVICE_BOUND, svc.mBoundCount,
-                            svc.mBoundState, svc.mBoundStartTime, now);
-                    dumpServiceTimeCheckin(pw, "pkgsvc-exec", pkgName, uid, serviceName,
-                            svc, ServiceState.SERVICE_EXEC, svc.mExecCount,
-                            svc.mExecState, svc.mExecStartTime, now);
+                    for (int isvc=0; isvc<NSRVS; isvc++) {
+                        String serviceName = collapseString(pkgName,
+                                pkgState.mServices.keyAt(isvc));
+                        ServiceState svc = pkgState.mServices.valueAt(isvc);
+                        dumpServiceTimeCheckin(pw, "pkgsvc-run", pkgName, uid, vers, serviceName,
+                                svc, ServiceState.SERVICE_RUN, svc.mRunCount,
+                                svc.mRunState, svc.mRunStartTime, now);
+                        dumpServiceTimeCheckin(pw, "pkgsvc-start", pkgName, uid, vers, serviceName,
+                                svc, ServiceState.SERVICE_STARTED, svc.mStartedCount,
+                                svc.mStartedState, svc.mStartedStartTime, now);
+                        dumpServiceTimeCheckin(pw, "pkgsvc-bound", pkgName, uid, vers, serviceName,
+                                svc, ServiceState.SERVICE_BOUND, svc.mBoundCount,
+                                svc.mBoundState, svc.mBoundStartTime, now);
+                        dumpServiceTimeCheckin(pw, "pkgsvc-exec", pkgName, uid, vers, serviceName,
+                                svc, ServiceState.SERVICE_EXEC, svc.mExecCount,
+                                svc.mExecState, svc.mExecStartTime, now);
+                    }
                 }
             }
         }
@@ -2364,9 +2460,10 @@
     }
 
     public static final class ProcessState extends DurationsTable {
-        public final ProcessState mCommonProcess;
+        public ProcessState mCommonProcess;
         public final String mPackage;
         public final int mUid;
+        public final int mVersion;
 
         //final long[] mDurations = new long[STATE_COUNT*ADJ_COUNT];
         int mCurState = STATE_NOTHING;
@@ -2393,16 +2490,19 @@
         boolean mDead;
 
         public long mTmpTotalTime;
+        int mTmpNumInUse;
+        ProcessState mTmpFoundSubProc;
 
         /**
          * Create a new top-level process state, for the initial case where there is only
          * a single package running in a process.  The initial state is not running.
          */
-        public ProcessState(ProcessStats processStats, String pkg, int uid, String name) {
+        public ProcessState(ProcessStats processStats, String pkg, int uid, int vers, String name) {
             super(processStats, name);
             mCommonProcess = this;
             mPackage = pkg;
             mUid = uid;
+            mVersion = vers;
         }
 
         /**
@@ -2410,18 +2510,19 @@
          * state.  The current running state of the top-level process is also copied,
          * marked as started running at 'now'.
          */
-        public ProcessState(ProcessState commonProcess, String pkg, int uid, String name,
+        public ProcessState(ProcessState commonProcess, String pkg, int uid, int vers, String name,
                 long now) {
             super(commonProcess.mStats, name);
             mCommonProcess = commonProcess;
             mPackage = pkg;
             mUid = uid;
+            mVersion = vers;
             mCurState = commonProcess.mCurState;
             mStartTime = now;
         }
 
         ProcessState clone(String pkg, long now) {
-            ProcessState pnew = new ProcessState(this, pkg, mUid, mName, now);
+            ProcessState pnew = new ProcessState(this, pkg, mUid, mVersion, mName, now);
             copyDurationsTo(pnew);
             if (mPssTable != null) {
                 mStats.mAddLongTable = new int[mPssTable.length];
@@ -2811,9 +2912,20 @@
                 // The array map is still pointing to a common process state
                 // that is now shared across packages.  Update it to point to
                 // the new per-package state.
-                ProcessState proc = mStats.mPackages.get(pkgName, mUid).mProcesses.get(mName);
+                SparseArray<PackageState> vpkg = mStats.mPackages.get(pkgName, mUid);
+                if (vpkg == null) {
+                    throw new IllegalStateException("Didn't find package " + pkgName
+                            + " / " + mUid);
+                }
+                PackageState pkg = vpkg.get(mVersion);
+                if (pkg == null) {
+                    throw new IllegalStateException("Didn't find package " + pkgName
+                            + " / " + mUid + " vers " + mVersion);
+                }
+                ProcessState proc = pkg.mProcesses.get(mName);
                 if (proc == null) {
-                    throw new IllegalStateException("Didn't create per-package process");
+                    throw new IllegalStateException("Didn't create per-package process "
+                            + mName + " in pkg " + pkgName + " / " + mUid + " vers " + mVersion);
                 }
                 return proc;
             }
@@ -2829,18 +2941,26 @@
                 // are losing whatever data we had in the old process state.
                 Log.wtf(TAG, "Pulling dead proc: name=" + mName + " pkg=" + mPackage
                         + " uid=" + mUid + " common.name=" + mCommonProcess.mName);
-                proc = mStats.getProcessStateLocked(proc.mPackage, proc.mUid, proc.mName);
+                proc = mStats.getProcessStateLocked(proc.mPackage, proc.mUid, proc.mVersion,
+                        proc.mName);
             }
             if (proc.mMultiPackage) {
                 // The array map is still pointing to a common process state
                 // that is now shared across packages.  Update it to point to
                 // the new per-package state.
-                PackageState pkg = mStats.mPackages.get(pkgList.keyAt(index), proc.mUid);
-                if (pkg == null) {
+                SparseArray<PackageState> vpkg = mStats.mPackages.get(pkgList.keyAt(index),
+                        proc.mUid);
+                if (vpkg == null) {
                     throw new IllegalStateException("No existing package "
                             + pkgList.keyAt(index) + "/" + proc.mUid
                             + " for multi-proc " + proc.mName);
                 }
+                PackageState pkg = vpkg.get(proc.mVersion);
+                if (pkg == null) {
+                    throw new IllegalStateException("No existing package "
+                            + pkgList.keyAt(index) + "/" + proc.mUid
+                            + " for multi-proc " + proc.mName + " version " + proc.mVersion);
+                }
                 proc = pkg.mProcesses.get(proc.mName);
                 if (proc == null) {
                     throw new IllegalStateException("Didn't create per-package process "
@@ -3014,7 +3134,7 @@
         }
 
         public boolean isInUse() {
-            return mOwner != null;
+            return mOwner != null || mRestarting;
         }
 
         void add(ServiceState other) {
diff --git a/core/java/com/android/internal/app/ToolbarActionBar.java b/core/java/com/android/internal/app/ToolbarActionBar.java
new file mode 100644
index 0000000..afb6f7c
--- /dev/null
+++ b/core/java/com/android/internal/app/ToolbarActionBar.java
@@ -0,0 +1,447 @@
+/*
+ * Copyright (C) 2014 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.android.internal.app;
+
+import android.annotation.Nullable;
+import android.app.ActionBar;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.graphics.drawable.Drawable;
+import android.view.ActionMode;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.SpinnerAdapter;
+import android.widget.Toolbar;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+public class ToolbarActionBar extends ActionBar {
+    private Toolbar mToolbar;
+    private View mCustomView;
+
+    private int mDisplayOptions;
+
+    private int mNavResId;
+    private int mIconResId;
+    private int mLogoResId;
+    private Drawable mNavDrawable;
+    private Drawable mIconDrawable;
+    private Drawable mLogoDrawable;
+    private int mTitleResId;
+    private int mSubtitleResId;
+    private CharSequence mTitle;
+    private CharSequence mSubtitle;
+
+    private boolean mLastMenuVisibility;
+    private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners =
+            new ArrayList<OnMenuVisibilityListener>();
+
+    public ToolbarActionBar(Toolbar toolbar) {
+        mToolbar = toolbar;
+    }
+
+    @Override
+    public void setCustomView(View view) {
+        setCustomView(view, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+    }
+
+    @Override
+    public void setCustomView(View view, LayoutParams layoutParams) {
+        if (mCustomView != null) {
+            mToolbar.removeView(mCustomView);
+        }
+        mCustomView = view;
+        if (view != null) {
+            mToolbar.addView(view, generateLayoutParams(layoutParams));
+        }
+    }
+
+    private Toolbar.LayoutParams generateLayoutParams(LayoutParams lp) {
+        final Toolbar.LayoutParams result = new Toolbar.LayoutParams(lp);
+        result.gravity = lp.gravity;
+        return result;
+    }
+
+    @Override
+    public void setCustomView(int resId) {
+        final LayoutInflater inflater = LayoutInflater.from(mToolbar.getContext());
+        setCustomView(inflater.inflate(resId, mToolbar, false));
+    }
+
+    @Override
+    public void setIcon(int resId) {
+        mIconResId = resId;
+        mIconDrawable = null;
+        updateToolbarLogo();
+    }
+
+    @Override
+    public void setIcon(Drawable icon) {
+        mIconResId = 0;
+        mIconDrawable = icon;
+        updateToolbarLogo();
+    }
+
+    @Override
+    public void setLogo(int resId) {
+        mLogoResId = resId;
+        mLogoDrawable = null;
+        updateToolbarLogo();
+    }
+
+    @Override
+    public void setLogo(Drawable logo) {
+        mLogoResId = 0;
+        mLogoDrawable = logo;
+        updateToolbarLogo();
+    }
+
+    private void updateToolbarLogo() {
+        Drawable drawable = null;
+        if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_HOME) != 0) {
+            final int resId;
+            if ((mDisplayOptions & ActionBar.DISPLAY_USE_LOGO) != 0) {
+                resId = mLogoResId;
+                drawable = mLogoDrawable;
+            } else {
+                resId = mIconResId;
+                drawable = mIconDrawable;
+            }
+            if (resId != 0) {
+                drawable = mToolbar.getContext().getDrawable(resId);
+            }
+        }
+        mToolbar.setLogo(drawable);
+    }
+
+    @Override
+    public void setStackedBackgroundDrawable(Drawable d) {
+        // This space for rent (do nothing)
+    }
+
+    @Override
+    public void setSplitBackgroundDrawable(Drawable d) {
+        // This space for rent (do nothing)
+    }
+
+    @Override
+    public void setHomeButtonEnabled(boolean enabled) {
+        // If the nav button on a Toolbar is present, it's enabled. No-op.
+    }
+
+    @Override
+    public Context getThemedContext() {
+        return mToolbar.getContext();
+    }
+
+    @Override
+    public boolean isTitleTruncated() {
+        return super.isTitleTruncated();
+    }
+
+    @Override
+    public void setHomeAsUpIndicator(Drawable indicator) {
+        mToolbar.setNavigationIcon(indicator);
+    }
+
+    @Override
+    public void setHomeAsUpIndicator(int resId) {
+        mToolbar.setNavigationIcon(resId);
+    }
+
+    @Override
+    public void setHomeActionContentDescription(CharSequence description) {
+        mToolbar.setNavigationDescription(description);
+    }
+
+    @Override
+    public void setDefaultDisplayHomeAsUpEnabled(boolean enabled) {
+        // Do nothing
+    }
+
+    @Override
+    public void setHomeActionContentDescription(int resId) {
+        mToolbar.setNavigationDescription(resId);
+    }
+
+    @Override
+    public void setShowHideAnimationEnabled(boolean enabled) {
+        // This space for rent; no-op.
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration config) {
+        super.onConfigurationChanged(config);
+    }
+
+    @Override
+    public ActionMode startActionMode(ActionMode.Callback callback) {
+        return mToolbar.startActionMode(callback);
+    }
+
+    @Override
+    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void setSelectedNavigationItem(int position) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public int getSelectedNavigationIndex() {
+        return -1;
+    }
+
+    @Override
+    public int getNavigationItemCount() {
+        return 0;
+    }
+
+    @Override
+    public void setTitle(CharSequence title) {
+        mTitle = title;
+        mTitleResId = 0;
+        updateToolbarTitle();
+    }
+
+    @Override
+    public void setTitle(int resId) {
+        mTitleResId = resId;
+        mTitle = null;
+        updateToolbarTitle();
+    }
+
+    @Override
+    public void setSubtitle(CharSequence subtitle) {
+        mSubtitle = subtitle;
+        mSubtitleResId = 0;
+        updateToolbarTitle();
+    }
+
+    @Override
+    public void setSubtitle(int resId) {
+        mSubtitleResId = resId;
+        mSubtitle = null;
+        updateToolbarTitle();
+    }
+
+    private void updateToolbarTitle() {
+        final Context context = mToolbar.getContext();
+        CharSequence title = null;
+        CharSequence subtitle = null;
+        if ((mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0) {
+            title = mTitleResId != 0 ? context.getText(mTitleResId) : mTitle;
+            subtitle = mSubtitleResId != 0 ? context.getText(mSubtitleResId) : mSubtitle;
+        }
+        mToolbar.setTitle(title);
+        mToolbar.setSubtitle(subtitle);
+    }
+
+    @Override
+    public void setDisplayOptions(@DisplayOptions int options) {
+        setDisplayOptions(options, 0xffffffff);
+    }
+
+    @Override
+    public void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask) {
+        final int oldOptions = mDisplayOptions;
+        mDisplayOptions = (options & mask) | (mDisplayOptions & ~mask);
+        final int optionsChanged = oldOptions ^ mDisplayOptions;
+    }
+
+    @Override
+    public void setDisplayUseLogoEnabled(boolean useLogo) {
+        setDisplayOptions(useLogo ? DISPLAY_USE_LOGO : 0, DISPLAY_USE_LOGO);
+    }
+
+    @Override
+    public void setDisplayShowHomeEnabled(boolean showHome) {
+        setDisplayOptions(showHome ? DISPLAY_SHOW_HOME : 0, DISPLAY_SHOW_HOME);
+    }
+
+    @Override
+    public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
+        setDisplayOptions(showHomeAsUp ? DISPLAY_HOME_AS_UP : 0, DISPLAY_HOME_AS_UP);
+    }
+
+    @Override
+    public void setDisplayShowTitleEnabled(boolean showTitle) {
+        setDisplayOptions(showTitle ? DISPLAY_SHOW_TITLE : 0, DISPLAY_SHOW_TITLE);
+    }
+
+    @Override
+    public void setDisplayShowCustomEnabled(boolean showCustom) {
+        setDisplayOptions(showCustom ? DISPLAY_SHOW_CUSTOM : 0, DISPLAY_SHOW_CUSTOM);
+    }
+
+    @Override
+    public void setBackgroundDrawable(@Nullable Drawable d) {
+        mToolbar.setBackground(d);
+    }
+
+    @Override
+    public View getCustomView() {
+        return mCustomView;
+    }
+
+    @Override
+    public CharSequence getTitle() {
+        return mToolbar.getTitle();
+    }
+
+    @Override
+    public CharSequence getSubtitle() {
+        return mToolbar.getSubtitle();
+    }
+
+    @Override
+    public int getNavigationMode() {
+        return NAVIGATION_MODE_STANDARD;
+    }
+
+    @Override
+    public void setNavigationMode(@NavigationMode int mode) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public int getDisplayOptions() {
+        return mDisplayOptions;
+    }
+
+    @Override
+    public Tab newTab() {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void addTab(Tab tab) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void addTab(Tab tab, boolean setSelected) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void addTab(Tab tab, int position) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void addTab(Tab tab, int position, boolean setSelected) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void removeTab(Tab tab) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void removeTabAt(int position) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void removeAllTabs() {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public void selectTab(Tab tab) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public Tab getSelectedTab() {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public Tab getTabAt(int index) {
+        throw new UnsupportedOperationException(
+                "Navigation modes are not supported in toolbar action bars");
+    }
+
+    @Override
+    public int getTabCount() {
+        return 0;
+    }
+
+    @Override
+    public int getHeight() {
+        return mToolbar.getHeight();
+    }
+
+    @Override
+    public void show() {
+        // TODO: Consider a better transition for this.
+        // Right now use no automatic transition so that the app can supply one if desired.
+        mToolbar.setVisibility(View.VISIBLE);
+    }
+
+    @Override
+    public void hide() {
+        // TODO: Consider a better transition for this.
+        // Right now use no automatic transition so that the app can supply one if desired.
+        mToolbar.setVisibility(View.GONE);
+    }
+
+    @Override
+    public boolean isShowing() {
+        return mToolbar.getVisibility() == View.VISIBLE;
+    }
+
+    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
+        mMenuVisibilityListeners.add(listener);
+    }
+
+    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
+        mMenuVisibilityListeners.remove(listener);
+    }
+
+    public void dispatchMenuVisibilityChanged(boolean isVisible) {
+        if (isVisible == mLastMenuVisibility) {
+            return;
+        }
+        mLastMenuVisibility = isVisible;
+
+        final int count = mMenuVisibilityListeners.size();
+        for (int i = 0; i < count; i++) {
+            mMenuVisibilityListeners.get(i).onMenuVisibilityChanged(isVisible);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/app/WindowDecorActionBar.java b/core/java/com/android/internal/app/WindowDecorActionBar.java
new file mode 100644
index 0000000..66548f0
--- /dev/null
+++ b/core/java/com/android/internal/app/WindowDecorActionBar.java
@@ -0,0 +1,1295 @@
+/*
+ * Copyright (C) 2010 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.android.internal.app;
+
+import android.animation.ValueAnimator;
+import android.content.res.TypedArray;
+import android.view.ViewParent;
+import com.android.internal.R;
+import com.android.internal.view.ActionBarPolicy;
+import com.android.internal.view.menu.MenuBuilder;
+import com.android.internal.view.menu.MenuPopupHelper;
+import com.android.internal.view.menu.SubMenuBuilder;
+import com.android.internal.widget.ActionBarContainer;
+import com.android.internal.widget.ActionBarContextView;
+import com.android.internal.widget.ActionBarOverlayLayout;
+import com.android.internal.widget.ActionBarView;
+import com.android.internal.widget.ScrollingTabContainerView;
+
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.Dialog;
+import android.app.FragmentTransaction;
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.util.TypedValue;
+import android.view.ActionMode;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.Window;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.animation.AnimationUtils;
+import android.widget.SpinnerAdapter;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+
+/**
+ * WindowDecorActionBar is the ActionBar implementation used
+ * by devices of all screen sizes as part of the window decor layout.
+ * If it detects a compatible decor, it will split contextual modes
+ * across both the ActionBarView at the top of the screen and
+ * a horizontal LinearLayout at the bottom which is normally hidden.
+ */
+public class WindowDecorActionBar extends ActionBar implements
+        ActionBarOverlayLayout.ActionBarVisibilityCallback {
+    private static final String TAG = "WindowDecorActionBar";
+
+    private Context mContext;
+    private Context mThemedContext;
+    private Activity mActivity;
+    private Dialog mDialog;
+
+    private ActionBarOverlayLayout mOverlayLayout;
+    private ActionBarContainer mContainerView;
+    private ActionBarView mActionView;
+    private ActionBarContextView mContextView;
+    private ActionBarContainer mSplitView;
+    private View mContentView;
+    private ScrollingTabContainerView mTabScrollView;
+
+    private ArrayList<TabImpl> mTabs = new ArrayList<TabImpl>();
+
+    private TabImpl mSelectedTab;
+    private int mSavedTabPosition = INVALID_POSITION;
+    
+    private boolean mDisplayHomeAsUpSet;
+
+    ActionModeImpl mActionMode;
+    ActionMode mDeferredDestroyActionMode;
+    ActionMode.Callback mDeferredModeDestroyCallback;
+    
+    private boolean mLastMenuVisibility;
+    private ArrayList<OnMenuVisibilityListener> mMenuVisibilityListeners =
+            new ArrayList<OnMenuVisibilityListener>();
+
+    private static final int CONTEXT_DISPLAY_NORMAL = 0;
+    private static final int CONTEXT_DISPLAY_SPLIT = 1;
+    
+    private static final int INVALID_POSITION = -1;
+
+    private int mContextDisplayMode;
+    private boolean mHasEmbeddedTabs;
+
+    private int mCurWindowVisibility = View.VISIBLE;
+
+    private boolean mContentAnimations = true;
+    private boolean mHiddenByApp;
+    private boolean mHiddenBySystem;
+    private boolean mShowingForMode;
+
+    private boolean mNowShowing = true;
+
+    private Animator mCurrentShowAnim;
+    private boolean mShowHideAnimationEnabled;
+    boolean mHideOnContentScroll;
+
+    final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            if (mContentAnimations && mContentView != null) {
+                mContentView.setTranslationY(0);
+                mContainerView.setTranslationY(0);
+            }
+            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
+                mSplitView.setVisibility(View.GONE);
+            }
+            mContainerView.setVisibility(View.GONE);
+            mContainerView.setTransitioning(false);
+            mCurrentShowAnim = null;
+            completeDeferredDestroyActionMode();
+            if (mOverlayLayout != null) {
+                mOverlayLayout.requestApplyInsets();
+            }
+        }
+    };
+
+    final AnimatorListener mShowListener = new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            mCurrentShowAnim = null;
+            mContainerView.requestLayout();
+        }
+    };
+
+    final ValueAnimator.AnimatorUpdateListener mUpdateListener =
+            new ValueAnimator.AnimatorUpdateListener() {
+        @Override
+        public void onAnimationUpdate(ValueAnimator animation) {
+            final ViewParent parent = mContainerView.getParent();
+            ((View) parent).invalidate();
+        }
+    };
+
+    public WindowDecorActionBar(Activity activity) {
+        mActivity = activity;
+        Window window = activity.getWindow();
+        View decor = window.getDecorView();
+        boolean overlayMode = mActivity.getWindow().hasFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
+        init(decor);
+        if (!overlayMode) {
+            mContentView = decor.findViewById(android.R.id.content);
+        }
+    }
+
+    public WindowDecorActionBar(Dialog dialog) {
+        mDialog = dialog;
+        init(dialog.getWindow().getDecorView());
+    }
+
+    /**
+     * Only for edit mode.
+     * @hide
+     */
+    public WindowDecorActionBar(View layout) {
+        assert layout.isInEditMode();
+        init(layout);
+    }
+
+    private void init(View decor) {
+        mOverlayLayout = (ActionBarOverlayLayout) decor.findViewById(
+                com.android.internal.R.id.action_bar_overlay_layout);
+        if (mOverlayLayout != null) {
+            mOverlayLayout.setActionBarVisibilityCallback(this);
+        }
+        mActionView = (ActionBarView) decor.findViewById(com.android.internal.R.id.action_bar);
+        mContextView = (ActionBarContextView) decor.findViewById(
+                com.android.internal.R.id.action_context_bar);
+        mContainerView = (ActionBarContainer) decor.findViewById(
+                com.android.internal.R.id.action_bar_container);
+        mSplitView = (ActionBarContainer) decor.findViewById(
+                com.android.internal.R.id.split_action_bar);
+
+        if (mActionView == null || mContextView == null || mContainerView == null) {
+            throw new IllegalStateException(getClass().getSimpleName() + " can only be used " +
+                    "with a compatible window decor layout");
+        }
+
+        mContext = mActionView.getContext();
+        mActionView.setContextView(mContextView);
+        mContextDisplayMode = mActionView.isSplitActionBar() ?
+                CONTEXT_DISPLAY_SPLIT : CONTEXT_DISPLAY_NORMAL;
+
+        // This was initially read from the action bar style
+        final int current = mActionView.getDisplayOptions();
+        final boolean homeAsUp = (current & DISPLAY_HOME_AS_UP) != 0;
+        if (homeAsUp) {
+            mDisplayHomeAsUpSet = true;
+        }
+
+        ActionBarPolicy abp = ActionBarPolicy.get(mContext);
+        setHomeButtonEnabled(abp.enableHomeButtonByDefault() || homeAsUp);
+        setHasEmbeddedTabs(abp.hasEmbeddedTabs());
+
+        final TypedArray a = mContext.obtainStyledAttributes(null,
+                com.android.internal.R.styleable.ActionBar,
+                com.android.internal.R.attr.actionBarStyle, 0);
+        if (a.getBoolean(R.styleable.ActionBar_hideOnContentScroll, false)) {
+            setHideOnContentScrollEnabled(true);
+        }
+        a.recycle();
+    }
+
+    public void onConfigurationChanged(Configuration newConfig) {
+        setHasEmbeddedTabs(ActionBarPolicy.get(mContext).hasEmbeddedTabs());
+    }
+
+    private void setHasEmbeddedTabs(boolean hasEmbeddedTabs) {
+        mHasEmbeddedTabs = hasEmbeddedTabs;
+        // Switch tab layout configuration if needed
+        if (!mHasEmbeddedTabs) {
+            mActionView.setEmbeddedTabView(null);
+            mContainerView.setTabContainer(mTabScrollView);
+        } else {
+            mContainerView.setTabContainer(null);
+            mActionView.setEmbeddedTabView(mTabScrollView);
+        }
+        final boolean isInTabMode = getNavigationMode() == NAVIGATION_MODE_TABS;
+        if (mTabScrollView != null) {
+            if (isInTabMode) {
+                mTabScrollView.setVisibility(View.VISIBLE);
+                if (mOverlayLayout != null) {
+                    mOverlayLayout.requestApplyInsets();
+                }
+            } else {
+                mTabScrollView.setVisibility(View.GONE);
+            }
+        }
+        mActionView.setCollapsable(!mHasEmbeddedTabs && isInTabMode);
+        mOverlayLayout.setHasNonEmbeddedTabs(!mHasEmbeddedTabs && isInTabMode);
+    }
+
+    private void ensureTabsExist() {
+        if (mTabScrollView != null) {
+            return;
+        }
+
+        ScrollingTabContainerView tabScroller = new ScrollingTabContainerView(mContext);
+
+        if (mHasEmbeddedTabs) {
+            tabScroller.setVisibility(View.VISIBLE);
+            mActionView.setEmbeddedTabView(tabScroller);
+        } else {
+            if (getNavigationMode() == NAVIGATION_MODE_TABS) {
+                tabScroller.setVisibility(View.VISIBLE);
+                if (mOverlayLayout != null) {
+                    mOverlayLayout.requestFitSystemWindows();
+                }
+            } else {
+                tabScroller.setVisibility(View.GONE);
+            }
+            mContainerView.setTabContainer(tabScroller);
+        }
+        mTabScrollView = tabScroller;
+    }
+
+    void completeDeferredDestroyActionMode() {
+        if (mDeferredModeDestroyCallback != null) {
+            mDeferredModeDestroyCallback.onDestroyActionMode(mDeferredDestroyActionMode);
+            mDeferredDestroyActionMode = null;
+            mDeferredModeDestroyCallback = null;
+        }
+    }
+
+    public void onWindowVisibilityChanged(int visibility) {
+        mCurWindowVisibility = visibility;
+    }
+
+    /**
+     * Enables or disables animation between show/hide states.
+     * If animation is disabled using this method, animations in progress
+     * will be finished.
+     *
+     * @param enabled true to animate, false to not animate.
+     */
+    public void setShowHideAnimationEnabled(boolean enabled) {
+        mShowHideAnimationEnabled = enabled;
+        if (!enabled && mCurrentShowAnim != null) {
+            mCurrentShowAnim.end();
+        }
+    }
+
+    public void addOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
+        mMenuVisibilityListeners.add(listener);
+    }
+
+    public void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener) {
+        mMenuVisibilityListeners.remove(listener);
+    }
+
+    public void dispatchMenuVisibilityChanged(boolean isVisible) {
+        if (isVisible == mLastMenuVisibility) {
+            return;
+        }
+        mLastMenuVisibility = isVisible;
+
+        final int count = mMenuVisibilityListeners.size();
+        for (int i = 0; i < count; i++) {
+            mMenuVisibilityListeners.get(i).onMenuVisibilityChanged(isVisible);
+        }
+    }
+
+    @Override
+    public void setCustomView(int resId) {
+        setCustomView(LayoutInflater.from(getThemedContext()).inflate(resId, mActionView, false));
+    }
+
+    @Override
+    public void setDisplayUseLogoEnabled(boolean useLogo) {
+        setDisplayOptions(useLogo ? DISPLAY_USE_LOGO : 0, DISPLAY_USE_LOGO);
+    }
+
+    @Override
+    public void setDisplayShowHomeEnabled(boolean showHome) {
+        setDisplayOptions(showHome ? DISPLAY_SHOW_HOME : 0, DISPLAY_SHOW_HOME);
+    }
+
+    @Override
+    public void setDisplayHomeAsUpEnabled(boolean showHomeAsUp) {
+        setDisplayOptions(showHomeAsUp ? DISPLAY_HOME_AS_UP : 0, DISPLAY_HOME_AS_UP);
+    }
+
+    @Override
+    public void setDisplayShowTitleEnabled(boolean showTitle) {
+        setDisplayOptions(showTitle ? DISPLAY_SHOW_TITLE : 0, DISPLAY_SHOW_TITLE);
+    }
+
+    @Override
+    public void setDisplayShowCustomEnabled(boolean showCustom) {
+        setDisplayOptions(showCustom ? DISPLAY_SHOW_CUSTOM : 0, DISPLAY_SHOW_CUSTOM);
+    }
+
+    @Override
+    public void setHomeButtonEnabled(boolean enable) {
+        mActionView.setHomeButtonEnabled(enable);
+    }
+
+    @Override
+    public void setTitle(int resId) {
+        setTitle(mContext.getString(resId));
+    }
+
+    @Override
+    public void setSubtitle(int resId) {
+        setSubtitle(mContext.getString(resId));
+    }
+
+    public void setSelectedNavigationItem(int position) {
+        switch (mActionView.getNavigationMode()) {
+        case NAVIGATION_MODE_TABS:
+            selectTab(mTabs.get(position));
+            break;
+        case NAVIGATION_MODE_LIST:
+            mActionView.setDropdownSelectedPosition(position);
+            break;
+        default:
+            throw new IllegalStateException(
+                    "setSelectedNavigationIndex not valid for current navigation mode");
+        }
+    }
+
+    public void removeAllTabs() {
+        cleanupTabs();
+    }
+
+    private void cleanupTabs() {
+        if (mSelectedTab != null) {
+            selectTab(null);
+        }
+        mTabs.clear();
+        if (mTabScrollView != null) {
+            mTabScrollView.removeAllTabs();
+        }
+        mSavedTabPosition = INVALID_POSITION;
+    }
+
+    public void setTitle(CharSequence title) {
+        mActionView.setTitle(title);
+    }
+
+    public void setSubtitle(CharSequence subtitle) {
+        mActionView.setSubtitle(subtitle);
+    }
+
+    public void setDisplayOptions(int options) {
+        if ((options & DISPLAY_HOME_AS_UP) != 0) {
+            mDisplayHomeAsUpSet = true;
+        }
+        mActionView.setDisplayOptions(options);
+    }
+
+    public void setDisplayOptions(int options, int mask) {
+        final int current = mActionView.getDisplayOptions(); 
+        if ((mask & DISPLAY_HOME_AS_UP) != 0) {
+            mDisplayHomeAsUpSet = true;
+        }
+        mActionView.setDisplayOptions((options & mask) | (current & ~mask));
+    }
+
+    public void setBackgroundDrawable(Drawable d) {
+        mContainerView.setPrimaryBackground(d);
+    }
+
+    public void setStackedBackgroundDrawable(Drawable d) {
+        mContainerView.setStackedBackground(d);
+    }
+
+    public void setSplitBackgroundDrawable(Drawable d) {
+        if (mSplitView != null) {
+            mSplitView.setSplitBackground(d);
+        }
+    }
+
+    public View getCustomView() {
+        return mActionView.getCustomNavigationView();
+    }
+
+    public CharSequence getTitle() {
+        return mActionView.getTitle();
+    }
+
+    public CharSequence getSubtitle() {
+        return mActionView.getSubtitle();
+    }
+
+    public int getNavigationMode() {
+        return mActionView.getNavigationMode();
+    }
+
+    public int getDisplayOptions() {
+        return mActionView.getDisplayOptions();
+    }
+
+    public ActionMode startActionMode(ActionMode.Callback callback) {
+        if (mActionMode != null) {
+            mActionMode.finish();
+        }
+
+        mOverlayLayout.setHideOnContentScrollEnabled(false);
+        mContextView.killMode();
+        ActionModeImpl mode = new ActionModeImpl(callback);
+        if (mode.dispatchOnCreate()) {
+            mode.invalidate();
+            mContextView.initForMode(mode);
+            animateToMode(true);
+            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
+                // TODO animate this
+                if (mSplitView.getVisibility() != View.VISIBLE) {
+                    mSplitView.setVisibility(View.VISIBLE);
+                    if (mOverlayLayout != null) {
+                        mOverlayLayout.requestApplyInsets();
+                    }
+                }
+            }
+            mContextView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+            mActionMode = mode;
+            return mode;
+        }
+        return null;
+    }
+
+    private void configureTab(Tab tab, int position) {
+        final TabImpl tabi = (TabImpl) tab;
+        final ActionBar.TabListener callback = tabi.getCallback();
+
+        if (callback == null) {
+            throw new IllegalStateException("Action Bar Tab must have a Callback");
+        }
+
+        tabi.setPosition(position);
+        mTabs.add(position, tabi);
+
+        final int count = mTabs.size();
+        for (int i = position + 1; i < count; i++) {
+            mTabs.get(i).setPosition(i);
+        }
+    }
+
+    @Override
+    public void addTab(Tab tab) {
+        addTab(tab, mTabs.isEmpty());
+    }
+
+    @Override
+    public void addTab(Tab tab, int position) {
+        addTab(tab, position, mTabs.isEmpty());
+    }
+
+    @Override
+    public void addTab(Tab tab, boolean setSelected) {
+        ensureTabsExist();
+        mTabScrollView.addTab(tab, setSelected);
+        configureTab(tab, mTabs.size());
+        if (setSelected) {
+            selectTab(tab);
+        }
+    }
+
+    @Override
+    public void addTab(Tab tab, int position, boolean setSelected) {
+        ensureTabsExist();
+        mTabScrollView.addTab(tab, position, setSelected);
+        configureTab(tab, position);
+        if (setSelected) {
+            selectTab(tab);
+        }
+    }
+
+    @Override
+    public Tab newTab() {
+        return new TabImpl();
+    }
+
+    @Override
+    public void removeTab(Tab tab) {
+        removeTabAt(tab.getPosition());
+    }
+
+    @Override
+    public void removeTabAt(int position) {
+        if (mTabScrollView == null) {
+            // No tabs around to remove
+            return;
+        }
+
+        int selectedTabPosition = mSelectedTab != null
+                ? mSelectedTab.getPosition() : mSavedTabPosition;
+        mTabScrollView.removeTabAt(position);
+        TabImpl removedTab = mTabs.remove(position);
+        if (removedTab != null) {
+            removedTab.setPosition(-1);
+        }
+
+        final int newTabCount = mTabs.size();
+        for (int i = position; i < newTabCount; i++) {
+            mTabs.get(i).setPosition(i);
+        }
+
+        if (selectedTabPosition == position) {
+            selectTab(mTabs.isEmpty() ? null : mTabs.get(Math.max(0, position - 1)));
+        }
+    }
+
+    @Override
+    public void selectTab(Tab tab) {
+        if (getNavigationMode() != NAVIGATION_MODE_TABS) {
+            mSavedTabPosition = tab != null ? tab.getPosition() : INVALID_POSITION;
+            return;
+        }
+
+        final FragmentTransaction trans = mActionView.isInEditMode() ? null :
+                mActivity.getFragmentManager().beginTransaction().disallowAddToBackStack();
+
+        if (mSelectedTab == tab) {
+            if (mSelectedTab != null) {
+                mSelectedTab.getCallback().onTabReselected(mSelectedTab, trans);
+                mTabScrollView.animateToTab(tab.getPosition());
+            }
+        } else {
+            mTabScrollView.setTabSelected(tab != null ? tab.getPosition() : Tab.INVALID_POSITION);
+            if (mSelectedTab != null) {
+                mSelectedTab.getCallback().onTabUnselected(mSelectedTab, trans);
+            }
+            mSelectedTab = (TabImpl) tab;
+            if (mSelectedTab != null) {
+                mSelectedTab.getCallback().onTabSelected(mSelectedTab, trans);
+            }
+        }
+
+        if (trans != null && !trans.isEmpty()) {
+            trans.commit();
+        }
+    }
+
+    @Override
+    public Tab getSelectedTab() {
+        return mSelectedTab;
+    }
+
+    @Override
+    public int getHeight() {
+        return mContainerView.getHeight();
+    }
+
+    public void enableContentAnimations(boolean enabled) {
+        mContentAnimations = enabled;
+    }
+
+    @Override
+    public void show() {
+        if (mHiddenByApp) {
+            mHiddenByApp = false;
+            updateVisibility(false);
+        }
+    }
+
+    private void showForActionMode() {
+        if (!mShowingForMode) {
+            mShowingForMode = true;
+            if (mOverlayLayout != null) {
+                mOverlayLayout.setShowingForActionMode(true);
+            }
+            updateVisibility(false);
+        }
+    }
+
+    public void showForSystem() {
+        if (mHiddenBySystem) {
+            mHiddenBySystem = false;
+            updateVisibility(true);
+        }
+    }
+
+    @Override
+    public void hide() {
+        if (!mHiddenByApp) {
+            mHiddenByApp = true;
+            updateVisibility(false);
+        }
+    }
+
+    private void hideForActionMode() {
+        if (mShowingForMode) {
+            mShowingForMode = false;
+            if (mOverlayLayout != null) {
+                mOverlayLayout.setShowingForActionMode(false);
+            }
+            updateVisibility(false);
+        }
+    }
+
+    public void hideForSystem() {
+        if (!mHiddenBySystem) {
+            mHiddenBySystem = true;
+            updateVisibility(true);
+        }
+    }
+
+    @Override
+    public void setHideOnContentScrollEnabled(boolean hideOnContentScroll) {
+        if (hideOnContentScroll && !mOverlayLayout.isInOverlayMode()) {
+            throw new IllegalStateException("Action bar must be in overlay mode " +
+                    "(Window.FEATURE_OVERLAY_ACTION_BAR) to enable hide on content scroll");
+        }
+        mHideOnContentScroll = hideOnContentScroll;
+        mOverlayLayout.setHideOnContentScrollEnabled(hideOnContentScroll);
+    }
+
+    @Override
+    public boolean isHideOnContentScrollEnabled() {
+        return mOverlayLayout.isHideOnContentScrollEnabled();
+    }
+
+    @Override
+    public int getHideOffset() {
+        return mOverlayLayout.getActionBarHideOffset();
+    }
+
+    @Override
+    public void setHideOffset(int offset) {
+        if (offset != 0 && !mOverlayLayout.isInOverlayMode()) {
+            throw new IllegalStateException("Action bar must be in overlay mode " +
+                    "(Window.FEATURE_OVERLAY_ACTION_BAR) to set a non-zero hide offset");
+        }
+        mOverlayLayout.setActionBarHideOffset(offset);
+    }
+
+    private static boolean checkShowingFlags(boolean hiddenByApp, boolean hiddenBySystem,
+            boolean showingForMode) {
+        if (showingForMode) {
+            return true;
+        } else if (hiddenByApp || hiddenBySystem) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    private void updateVisibility(boolean fromSystem) {
+        // Based on the current state, should we be hidden or shown?
+        final boolean shown = checkShowingFlags(mHiddenByApp, mHiddenBySystem,
+                mShowingForMode);
+
+        if (shown) {
+            if (!mNowShowing) {
+                mNowShowing = true;
+                doShow(fromSystem);
+            }
+        } else {
+            if (mNowShowing) {
+                mNowShowing = false;
+                doHide(fromSystem);
+            }
+        }
+    }
+
+    public void doShow(boolean fromSystem) {
+        if (mCurrentShowAnim != null) {
+            mCurrentShowAnim.end();
+        }
+        mContainerView.setVisibility(View.VISIBLE);
+
+        if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
+                || fromSystem)) {
+            mContainerView.setTranslationY(0); // because we're about to ask its window loc
+            float startingY = -mContainerView.getHeight();
+            if (fromSystem) {
+                int topLeft[] = {0, 0};
+                mContainerView.getLocationInWindow(topLeft);
+                startingY -= topLeft[1];
+            }
+            mContainerView.setTranslationY(startingY);
+            AnimatorSet anim = new AnimatorSet();
+            ObjectAnimator a = ObjectAnimator.ofFloat(mContainerView, View.TRANSLATION_Y, 0);
+            a.addUpdateListener(mUpdateListener);
+            AnimatorSet.Builder b = anim.play(a);
+            if (mContentAnimations && mContentView != null) {
+                b.with(ObjectAnimator.ofFloat(mContentView, View.TRANSLATION_Y,
+                        startingY, 0));
+            }
+            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
+                mSplitView.setTranslationY(mSplitView.getHeight());
+                mSplitView.setVisibility(View.VISIBLE);
+                b.with(ObjectAnimator.ofFloat(mSplitView, View.TRANSLATION_Y, 0));
+            }
+            anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
+                    com.android.internal.R.interpolator.decelerate_cubic));
+            anim.setDuration(250);
+            // If this is being shown from the system, add a small delay.
+            // This is because we will also be animating in the status bar,
+            // and these two elements can't be done in lock-step.  So we give
+            // a little time for the status bar to start its animation before
+            // the action bar animates.  (This corresponds to the corresponding
+            // case when hiding, where the status bar has a small delay before
+            // starting.)
+            anim.addListener(mShowListener);
+            mCurrentShowAnim = anim;
+            anim.start();
+        } else {
+            mContainerView.setAlpha(1);
+            mContainerView.setTranslationY(0);
+            if (mContentAnimations && mContentView != null) {
+                mContentView.setTranslationY(0);
+            }
+            if (mSplitView != null && mContextDisplayMode == CONTEXT_DISPLAY_SPLIT) {
+                mSplitView.setAlpha(1);
+                mSplitView.setTranslationY(0);
+                mSplitView.setVisibility(View.VISIBLE);
+            }
+            mShowListener.onAnimationEnd(null);
+        }
+        if (mOverlayLayout != null) {
+            mOverlayLayout.requestApplyInsets();
+        }
+    }
+
+    public void doHide(boolean fromSystem) {
+        if (mCurrentShowAnim != null) {
+            mCurrentShowAnim.end();
+        }
+
+        if (mCurWindowVisibility == View.VISIBLE && (mShowHideAnimationEnabled
+                || fromSystem)) {
+            mContainerView.setAlpha(1);
+            mContainerView.setTransitioning(true);
+            AnimatorSet anim = new AnimatorSet();
+            float endingY = -mContainerView.getHeight();
+            if (fromSystem) {
+                int topLeft[] = {0, 0};
+                mContainerView.getLocationInWindow(topLeft);
+                endingY -= topLeft[1];
+            }
+            ObjectAnimator a = ObjectAnimator.ofFloat(mContainerView, View.TRANSLATION_Y, endingY);
+            a.addUpdateListener(mUpdateListener);
+            AnimatorSet.Builder b = anim.play(a);
+            if (mContentAnimations && mContentView != null) {
+                b.with(ObjectAnimator.ofFloat(mContentView, View.TRANSLATION_Y,
+                        0, endingY));
+            }
+            if (mSplitView != null && mSplitView.getVisibility() == View.VISIBLE) {
+                mSplitView.setAlpha(1);
+                b.with(ObjectAnimator.ofFloat(mSplitView, View.TRANSLATION_Y,
+                        mSplitView.getHeight()));
+            }
+            anim.setInterpolator(AnimationUtils.loadInterpolator(mContext,
+                    com.android.internal.R.interpolator.accelerate_cubic));
+            anim.setDuration(250);
+            anim.addListener(mHideListener);
+            mCurrentShowAnim = anim;
+            anim.start();
+        } else {
+            mHideListener.onAnimationEnd(null);
+        }
+    }
+
+    public boolean isShowing() {
+        return mNowShowing && getHideOffset() < getHeight();
+    }
+
+    void animateToMode(boolean toActionMode) {
+        if (toActionMode) {
+            showForActionMode();
+        } else {
+            hideForActionMode();
+        }
+
+        mActionView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE);
+        mContextView.animateToVisibility(toActionMode ? View.VISIBLE : View.GONE);
+        if (mTabScrollView != null && !mActionView.hasEmbeddedTabs() && mActionView.isCollapsed()) {
+            mTabScrollView.animateToVisibility(toActionMode ? View.GONE : View.VISIBLE);
+        }
+    }
+
+    public Context getThemedContext() {
+        if (mThemedContext == null) {
+            TypedValue outValue = new TypedValue();
+            Resources.Theme currentTheme = mContext.getTheme();
+            currentTheme.resolveAttribute(com.android.internal.R.attr.actionBarWidgetTheme,
+                    outValue, true);
+            final int targetThemeRes = outValue.resourceId;
+            
+            if (targetThemeRes != 0 && mContext.getThemeResId() != targetThemeRes) {
+                mThemedContext = new ContextThemeWrapper(mContext, targetThemeRes);
+            } else {
+                mThemedContext = mContext;
+            }
+        }
+        return mThemedContext;
+    }
+    
+    @Override
+    public boolean isTitleTruncated() {
+        return mActionView != null && mActionView.isTitleTruncated();
+    }
+
+    @Override
+    public void setHomeAsUpIndicator(Drawable indicator) {
+        mActionView.setHomeAsUpIndicator(indicator);
+    }
+
+    @Override
+    public void setHomeAsUpIndicator(int resId) {
+        mActionView.setHomeAsUpIndicator(resId);
+    }
+
+    @Override
+    public void setHomeActionContentDescription(CharSequence description) {
+        mActionView.setHomeActionContentDescription(description);
+    }
+
+    @Override
+    public void setHomeActionContentDescription(int resId) {
+        mActionView.setHomeActionContentDescription(resId);
+    }
+
+    @Override
+    public void onContentScrollStarted() {
+        if (mCurrentShowAnim != null) {
+            mCurrentShowAnim.cancel();
+            mCurrentShowAnim = null;
+        }
+    }
+
+    @Override
+    public void onContentScrollStopped() {
+    }
+
+    /**
+     * @hide 
+     */
+    public class ActionModeImpl extends ActionMode implements MenuBuilder.Callback {
+        private ActionMode.Callback mCallback;
+        private MenuBuilder mMenu;
+        private WeakReference<View> mCustomView;
+        
+        public ActionModeImpl(ActionMode.Callback callback) {
+            mCallback = callback;
+            mMenu = new MenuBuilder(getThemedContext())
+                    .setDefaultShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
+            mMenu.setCallback(this);
+        }
+
+        @Override
+        public MenuInflater getMenuInflater() {
+            return new MenuInflater(getThemedContext());
+        }
+
+        @Override
+        public Menu getMenu() {
+            return mMenu;
+        }
+
+        @Override
+        public void finish() {
+            if (mActionMode != this) {
+                // Not the active action mode - no-op
+                return;
+            }
+
+            // If this change in state is going to cause the action bar
+            // to be hidden, defer the onDestroy callback until the animation
+            // is finished and associated relayout is about to happen. This lets
+            // apps better anticipate visibility and layout behavior.
+            if (!checkShowingFlags(mHiddenByApp, mHiddenBySystem, false)) {
+                // With the current state but the action bar hidden, our
+                // overall showing state is going to be false.
+                mDeferredDestroyActionMode = this;
+                mDeferredModeDestroyCallback = mCallback;
+            } else {
+                mCallback.onDestroyActionMode(this);
+            }
+            mCallback = null;
+            animateToMode(false);
+
+            // Clear out the context mode views after the animation finishes
+            mContextView.closeMode();
+            mActionView.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+            mOverlayLayout.setHideOnContentScrollEnabled(mHideOnContentScroll);
+
+            mActionMode = null;
+        }
+
+        @Override
+        public void invalidate() {
+            mMenu.stopDispatchingItemsChanged();
+            try {
+                mCallback.onPrepareActionMode(this, mMenu);
+            } finally {
+                mMenu.startDispatchingItemsChanged();
+            }
+        }
+
+        public boolean dispatchOnCreate() {
+            mMenu.stopDispatchingItemsChanged();
+            try {
+                return mCallback.onCreateActionMode(this, mMenu);
+            } finally {
+                mMenu.startDispatchingItemsChanged();
+            }
+        }
+
+        @Override
+        public void setCustomView(View view) {
+            mContextView.setCustomView(view);
+            mCustomView = new WeakReference<View>(view);
+        }
+
+        @Override
+        public void setSubtitle(CharSequence subtitle) {
+            mContextView.setSubtitle(subtitle);
+        }
+
+        @Override
+        public void setTitle(CharSequence title) {
+            mContextView.setTitle(title);
+        }
+
+        @Override
+        public void setTitle(int resId) {
+            setTitle(mContext.getResources().getString(resId));
+        }
+
+        @Override
+        public void setSubtitle(int resId) {
+            setSubtitle(mContext.getResources().getString(resId));
+        }
+
+        @Override
+        public CharSequence getTitle() {
+            return mContextView.getTitle();
+        }
+
+        @Override
+        public CharSequence getSubtitle() {
+            return mContextView.getSubtitle();
+        }
+        
+        @Override
+        public void setTitleOptionalHint(boolean titleOptional) {
+            super.setTitleOptionalHint(titleOptional);
+            mContextView.setTitleOptional(titleOptional);
+        }
+
+        @Override
+        public boolean isTitleOptional() {
+            return mContextView.isTitleOptional();
+        }
+
+        @Override
+        public View getCustomView() {
+            return mCustomView != null ? mCustomView.get() : null;
+        }
+
+        public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
+            if (mCallback != null) {
+                return mCallback.onActionItemClicked(this, item);
+            } else {
+                return false;
+            }
+        }
+
+        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
+        }
+
+        public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
+            if (mCallback == null) {
+                return false;
+            }
+
+            if (!subMenu.hasVisibleItems()) {
+                return true;
+            }
+
+            new MenuPopupHelper(getThemedContext(), subMenu).show();
+            return true;
+        }
+
+        public void onCloseSubMenu(SubMenuBuilder menu) {
+        }
+
+        public void onMenuModeChange(MenuBuilder menu) {
+            if (mCallback == null) {
+                return;
+            }
+            invalidate();
+            mContextView.showOverflowMenu();
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public class TabImpl extends ActionBar.Tab {
+        private ActionBar.TabListener mCallback;
+        private Object mTag;
+        private Drawable mIcon;
+        private CharSequence mText;
+        private CharSequence mContentDesc;
+        private int mPosition = -1;
+        private View mCustomView;
+
+        @Override
+        public Object getTag() {
+            return mTag;
+        }
+
+        @Override
+        public Tab setTag(Object tag) {
+            mTag = tag;
+            return this;
+        }
+
+        public ActionBar.TabListener getCallback() {
+            return mCallback;
+        }
+
+        @Override
+        public Tab setTabListener(ActionBar.TabListener callback) {
+            mCallback = callback;
+            return this;
+        }
+
+        @Override
+        public View getCustomView() {
+            return mCustomView;
+        }
+
+        @Override
+        public Tab setCustomView(View view) {
+            mCustomView = view;
+            if (mPosition >= 0) {
+                mTabScrollView.updateTab(mPosition);
+            }
+            return this;
+        }
+
+        @Override
+        public Tab setCustomView(int layoutResId) {
+            return setCustomView(LayoutInflater.from(getThemedContext())
+                    .inflate(layoutResId, null));
+        }
+
+        @Override
+        public Drawable getIcon() {
+            return mIcon;
+        }
+
+        @Override
+        public int getPosition() {
+            return mPosition;
+        }
+
+        public void setPosition(int position) {
+            mPosition = position;
+        }
+
+        @Override
+        public CharSequence getText() {
+            return mText;
+        }
+
+        @Override
+        public Tab setIcon(Drawable icon) {
+            mIcon = icon;
+            if (mPosition >= 0) {
+                mTabScrollView.updateTab(mPosition);
+            }
+            return this;
+        }
+
+        @Override
+        public Tab setIcon(int resId) {
+            return setIcon(mContext.getDrawable(resId));
+        }
+
+        @Override
+        public Tab setText(CharSequence text) {
+            mText = text;
+            if (mPosition >= 0) {
+                mTabScrollView.updateTab(mPosition);
+            }
+            return this;
+        }
+
+        @Override
+        public Tab setText(int resId) {
+            return setText(mContext.getResources().getText(resId));
+        }
+
+        @Override
+        public void select() {
+            selectTab(this);
+        }
+
+        @Override
+        public Tab setContentDescription(int resId) {
+            return setContentDescription(mContext.getResources().getText(resId));
+        }
+
+        @Override
+        public Tab setContentDescription(CharSequence contentDesc) {
+            mContentDesc = contentDesc;
+            if (mPosition >= 0) {
+                mTabScrollView.updateTab(mPosition);
+            }
+            return this;
+        }
+
+        @Override
+        public CharSequence getContentDescription() {
+            return mContentDesc;
+        }
+    }
+
+    @Override
+    public void setCustomView(View view) {
+        mActionView.setCustomNavigationView(view);
+    }
+
+    @Override
+    public void setCustomView(View view, LayoutParams layoutParams) {
+        view.setLayoutParams(layoutParams);
+        mActionView.setCustomNavigationView(view);
+    }
+
+    @Override
+    public void setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback) {
+        mActionView.setDropdownAdapter(adapter);
+        mActionView.setCallback(callback);
+    }
+
+    @Override
+    public int getSelectedNavigationIndex() {
+        switch (mActionView.getNavigationMode()) {
+            case NAVIGATION_MODE_TABS:
+                return mSelectedTab != null ? mSelectedTab.getPosition() : -1;
+            case NAVIGATION_MODE_LIST:
+                return mActionView.getDropdownSelectedPosition();
+            default:
+                return -1;
+        }
+    }
+
+    @Override
+    public int getNavigationItemCount() {
+        switch (mActionView.getNavigationMode()) {
+            case NAVIGATION_MODE_TABS:
+                return mTabs.size();
+            case NAVIGATION_MODE_LIST:
+                SpinnerAdapter adapter = mActionView.getDropdownAdapter();
+                return adapter != null ? adapter.getCount() : 0;
+            default:
+                return 0;
+        }
+    }
+
+    @Override
+    public int getTabCount() {
+        return mTabs.size();
+    }
+
+    @Override
+    public void setNavigationMode(int mode) {
+        final int oldMode = mActionView.getNavigationMode();
+        switch (oldMode) {
+            case NAVIGATION_MODE_TABS:
+                mSavedTabPosition = getSelectedNavigationIndex();
+                selectTab(null);
+                mTabScrollView.setVisibility(View.GONE);
+                break;
+        }
+        if (oldMode != mode && !mHasEmbeddedTabs) {
+            if (mOverlayLayout != null) {
+                mOverlayLayout.requestFitSystemWindows();
+            }
+        }
+        mActionView.setNavigationMode(mode);
+        switch (mode) {
+            case NAVIGATION_MODE_TABS:
+                ensureTabsExist();
+                mTabScrollView.setVisibility(View.VISIBLE);
+                if (mSavedTabPosition != INVALID_POSITION) {
+                    setSelectedNavigationItem(mSavedTabPosition);
+                    mSavedTabPosition = INVALID_POSITION;
+                }
+                break;
+        }
+        mActionView.setCollapsable(mode == NAVIGATION_MODE_TABS && !mHasEmbeddedTabs);
+        mOverlayLayout.setHasNonEmbeddedTabs(mode == NAVIGATION_MODE_TABS && !mHasEmbeddedTabs);
+    }
+
+    @Override
+    public Tab getTabAt(int index) {
+        return mTabs.get(index);
+    }
+
+
+    @Override
+    public void setIcon(int resId) {
+        mActionView.setIcon(resId);
+    }
+
+    @Override
+    public void setIcon(Drawable icon) {
+        mActionView.setIcon(icon);
+    }
+
+    public boolean hasIcon() {
+        return mActionView.hasIcon();
+    }
+
+    @Override
+    public void setLogo(int resId) {
+        mActionView.setLogo(resId);
+    }
+
+    @Override
+    public void setLogo(Drawable logo) {
+        mActionView.setLogo(logo);
+    }
+
+    public boolean hasLogo() {
+        return mActionView.hasLogo();
+    }
+
+    public void setDefaultDisplayHomeAsUpEnabled(boolean enable) {
+        if (!mDisplayHomeAsUpSet) {
+            setDisplayHomeAsUpEnabled(enable);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
index 7ddd5d2..5214dd9 100644
--- a/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
+++ b/core/java/com/android/internal/appwidget/IAppWidgetService.aidl
@@ -59,6 +59,5 @@
     void bindRemoteViewsService(int appWidgetId, in Intent intent, in IBinder connection, int userId);
     void unbindRemoteViewsService(int appWidgetId, in Intent intent, int userId);
     int[] getAppWidgetIds(in ComponentName provider, int userId);
-
 }
 
diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index 494bc78..446ef55 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -23,22 +23,24 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
-import android.os.RemoteException;
 import android.os.SELinux;
+import android.system.ErrnoException;
+import android.system.Os;
+import android.system.StructStat;
 import android.util.Log;
 
 import com.android.org.bouncycastle.util.encoders.Base64;
 
 import java.io.File;
-import java.io.FileFilter;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Collections;
+
+import static android.system.OsConstants.*;
 
 /**
  * Backup transport for stashing stuff into a known location on disk, and
@@ -55,20 +57,24 @@
     private static final String TRANSPORT_DESTINATION_STRING
             = "Backing up to debug-only private cache";
 
-    // The single hardcoded restore set always has the same (nonzero!) token
-    private static final long RESTORE_TOKEN = 1;
+    // The currently-active restore set always has the same (nonzero!) token
+    private static final long CURRENT_SET_TOKEN = 1;
 
     private Context mContext;
     private File mDataDir = new File(Environment.getDownloadCacheDirectory(), "backup");
+    private File mCurrentSetDir = new File(mDataDir, Long.toString(CURRENT_SET_TOKEN));
+
     private PackageInfo[] mRestorePackages = null;
     private int mRestorePackage = -1;  // Index into mRestorePackages
+    private File mRestoreDataDir;
+    private long mRestoreToken;
 
 
     public LocalTransport(Context context) {
         mContext = context;
-        mDataDir.mkdirs();
-        if (!SELinux.restorecon(mDataDir)) {
-            Log.e(TAG, "SELinux restorecon failed for " + mDataDir);
+        mCurrentSetDir.mkdirs();
+        if (!SELinux.restorecon(mCurrentSetDir)) {
+            Log.e(TAG, "SELinux restorecon failed for " + mCurrentSetDir);
         }
     }
 
@@ -96,14 +102,23 @@
 
     public int initializeDevice() {
         if (DEBUG) Log.v(TAG, "wiping all data");
-        deleteContents(mDataDir);
+        deleteContents(mCurrentSetDir);
         return BackupConstants.TRANSPORT_OK;
     }
 
     public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) {
-        if (DEBUG) Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName);
+        if (DEBUG) {
+            try {
+            StructStat ss = Os.fstat(data.getFileDescriptor());
+            Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName
+                    + " size=" + ss.st_size);
+            } catch (ErrnoException e) {
+                Log.w(TAG, "Unable to stat input file in performBackup() on "
+                        + packageInfo.packageName);
+            }
+        }
 
-        File packageDir = new File(mDataDir, packageInfo.packageName);
+        File packageDir = new File(mCurrentSetDir, packageInfo.packageName);
         packageDir.mkdirs();
 
         // Each 'record' in the restore set is kept in its own file, named by
@@ -135,7 +150,16 @@
                         buf = new byte[bufSize];
                     }
                     changeSet.readEntityData(buf, 0, dataSize);
-                    if (DEBUG) Log.v(TAG, "  data size " + dataSize);
+                    if (DEBUG) {
+                        try {
+                            long cur = Os.lseek(data.getFileDescriptor(), 0, SEEK_CUR);
+                            Log.v(TAG, "  read entity data; new pos=" + cur);
+                        }
+                        catch (ErrnoException e) {
+                            Log.w(TAG, "Unable to stat input file in performBackup() on "
+                                    + packageInfo.packageName);
+                        }
+                    }
 
                     try {
                         entity.write(buf, 0, dataSize);
@@ -175,7 +199,7 @@
     public int clearBackupData(PackageInfo packageInfo) {
         if (DEBUG) Log.v(TAG, "clearBackupData() pkg=" + packageInfo.packageName);
 
-        File packageDir = new File(mDataDir, packageInfo.packageName);
+        File packageDir = new File(mCurrentSetDir, packageInfo.packageName);
         final File[] fileset = packageDir.listFiles();
         if (fileset != null) {
             for (File f : fileset) {
@@ -192,22 +216,38 @@
     }
 
     // Restore handling
+    static final long[] POSSIBLE_SETS = { 2, 3, 4, 5, 6, 7, 8, 9 }; 
     public RestoreSet[] getAvailableRestoreSets() throws android.os.RemoteException {
-        // one hardcoded restore set
-        RestoreSet set = new RestoreSet("Local disk image", "flash", RESTORE_TOKEN);
-        RestoreSet[] array = { set };
-        return array;
+        long[] existing = new long[POSSIBLE_SETS.length + 1];
+        int num = 0;
+
+        // see which possible non-current sets exist, then put the current set at the end
+        for (long token : POSSIBLE_SETS) {
+            if ((new File(mDataDir, Long.toString(token))).exists()) {
+                existing[num++] = token;
+            }
+        }
+        // and always the currently-active set last
+        existing[num++] = CURRENT_SET_TOKEN;
+
+        RestoreSet[] available = new RestoreSet[num];
+        for (int i = 0; i < available.length; i++) {
+            available[i] = new RestoreSet("Local disk image", "flash", existing[i]);
+        }
+        return available;
     }
 
     public long getCurrentRestoreSet() {
-        // The hardcoded restore set always has the same token
-        return RESTORE_TOKEN;
+        // The current restore set always has the same token
+        return CURRENT_SET_TOKEN;
     }
 
     public int startRestore(long token, PackageInfo[] packages) {
         if (DEBUG) Log.v(TAG, "start restore " + token);
         mRestorePackages = packages;
         mRestorePackage = -1;
+        mRestoreToken = token;
+        mRestoreDataDir = new File(mDataDir, Long.toString(token));
         return BackupConstants.TRANSPORT_OK;
     }
 
@@ -215,7 +255,9 @@
         if (mRestorePackages == null) throw new IllegalStateException("startRestore not called");
         while (++mRestorePackage < mRestorePackages.length) {
             String name = mRestorePackages[mRestorePackage].packageName;
-            if (new File(mDataDir, name).isDirectory()) {
+            // skip packages where we have a data dir but no actual contents
+            String[] contents = (new File(mRestoreDataDir, name)).list();
+            if (contents != null && contents.length > 0) {
                 if (DEBUG) Log.v(TAG, "  nextRestorePackage() = " + name);
                 return name;
             }
@@ -228,29 +270,32 @@
     public int getRestoreData(ParcelFileDescriptor outFd) {
         if (mRestorePackages == null) throw new IllegalStateException("startRestore not called");
         if (mRestorePackage < 0) throw new IllegalStateException("nextRestorePackage not called");
-        File packageDir = new File(mDataDir, mRestorePackages[mRestorePackage].packageName);
+        File packageDir = new File(mRestoreDataDir, mRestorePackages[mRestorePackage].packageName);
 
         // The restore set is the concatenation of the individual record blobs,
-        // each of which is a file in the package's directory
-        File[] blobs = packageDir.listFiles();
+        // each of which is a file in the package's directory.  We return the
+        // data in lexical order sorted by key, so that apps which use synthetic
+        // keys like BLOB_1, BLOB_2, etc will see the date in the most obvious
+        // order.
+        ArrayList<DecodedFilename> blobs = contentsByKey(packageDir);
         if (blobs == null) {  // nextRestorePackage() ensures the dir exists, so this is an error
-            Log.e(TAG, "Error listing directory: " + packageDir);
+            Log.e(TAG, "No keys for package: " + packageDir);
             return BackupConstants.TRANSPORT_ERROR;
         }
 
         // We expect at least some data if the directory exists in the first place
-        if (DEBUG) Log.v(TAG, "  getRestoreData() found " + blobs.length + " key files");
+        if (DEBUG) Log.v(TAG, "  getRestoreData() found " + blobs.size() + " key files");
         BackupDataOutput out = new BackupDataOutput(outFd.getFileDescriptor());
         try {
-            for (File f : blobs) {
+            for (DecodedFilename keyEntry : blobs) {
+                File f = keyEntry.file;
                 FileInputStream in = new FileInputStream(f);
                 try {
                     int size = (int) f.length();
                     byte[] buf = new byte[size];
                     in.read(buf);
-                    String key = new String(Base64.decode(f.getName()));
-                    if (DEBUG) Log.v(TAG, "    ... key=" + key + " size=" + size);
-                    out.writeEntityHeader(key, size);
+                    if (DEBUG) Log.v(TAG, "    ... key=" + keyEntry.key + " size=" + size);
+                    out.writeEntityHeader(keyEntry.key, size);
                     out.writeEntityData(buf, size);
                 } finally {
                     in.close();
@@ -263,6 +308,39 @@
         }
     }
 
+    static class DecodedFilename implements Comparable<DecodedFilename> {
+        public File file;
+        public String key;
+
+        public DecodedFilename(File f) {
+            file = f;
+            key = new String(Base64.decode(f.getName()));
+        }
+
+        @Override
+        public int compareTo(DecodedFilename other) {
+            // sorts into ascending lexical order by decoded key
+            return key.compareTo(other.key);
+        }
+    }
+
+    // Return a list of the files in the given directory, sorted lexically by
+    // the Base64-decoded file name, not by the on-disk filename
+    private ArrayList<DecodedFilename> contentsByKey(File dir) {
+        File[] allFiles = dir.listFiles();
+        if (allFiles == null || allFiles.length == 0) {
+            return null;
+        }
+
+        // Decode the filenames into keys then sort lexically by key
+        ArrayList<DecodedFilename> contents = new ArrayList<DecodedFilename>();
+        for (File f : allFiles) {
+            contents.add(new DecodedFilename(f));
+        }
+        Collections.sort(contents);
+        return contents;
+    }
+
     public void finishRestore() {
         if (DEBUG) Log.v(TAG, "finishRestore()");
     }
diff --git a/core/java/com/android/internal/content/PackageMonitor.java b/core/java/com/android/internal/content/PackageMonitor.java
index 942995b..9df8ad5 100644
--- a/core/java/com/android/internal/content/PackageMonitor.java
+++ b/core/java/com/android/internal/content/PackageMonitor.java
@@ -22,7 +22,6 @@
 import android.content.IntentFilter;
 import android.net.Uri;
 import android.os.Handler;
-import android.os.HandlerThread;
 import android.os.Looper;
 import android.os.UserHandle;
 import com.android.internal.os.BackgroundThread;
@@ -243,7 +242,11 @@
     public boolean anyPackagesDisappearing() {
         return mDisappearingPackages != null;
     }
-    
+
+    public boolean isReplacing() {
+        return mChangeType == PACKAGE_UPDATING;
+    }
+
     public boolean isPackageModified(String packageName) {
         if (mModifiedPackages != null) {
             for (int i=mModifiedPackages.length-1; i>=0; i--) {
diff --git a/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java b/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java
new file mode 100644
index 0000000..cba09d1
--- /dev/null
+++ b/core/java/com/android/internal/inputmethod/InputMethodSubtypeSwitchingController.java
@@ -0,0 +1,300 @@
+/*
+ * Copyright (C) 2013 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.android.internal.inputmethod;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings;
+
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.text.TextUtils;
+import android.util.Slog;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodSubtype;
+
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.TreeMap;
+
+/**
+ * InputMethodSubtypeSwitchingController controls the switching behavior of the subtypes.
+ */
+public class InputMethodSubtypeSwitchingController {
+    private static final String TAG = InputMethodSubtypeSwitchingController.class.getSimpleName();
+    private static final boolean DEBUG = false;
+    // TODO: Turn on this flag and add CTS when the platform starts expecting that all IMEs return
+    // true for supportsSwitchingToNextInputMethod().
+    private static final boolean REQUIRE_SWITCHING_SUPPORT = false;
+    private static final int MAX_HISTORY_SIZE = 4;
+    private static final int NOT_A_SUBTYPE_ID = InputMethodUtils.NOT_A_SUBTYPE_ID;
+
+    private static class SubtypeParams {
+        public final InputMethodInfo mImi;
+        public final InputMethodSubtype mSubtype;
+        public final long mTime;
+
+        public SubtypeParams(InputMethodInfo imi, InputMethodSubtype subtype) {
+            mImi = imi;
+            mSubtype = subtype;
+            mTime = System.currentTimeMillis();
+        }
+    }
+
+    public static class ImeSubtypeListItem implements Comparable<ImeSubtypeListItem> {
+        public final CharSequence mImeName;
+        public final CharSequence mSubtypeName;
+        public final InputMethodInfo mImi;
+        public final int mSubtypeId;
+        private final boolean mIsSystemLocale;
+        private final boolean mIsSystemLanguage;
+
+        public ImeSubtypeListItem(CharSequence imeName, CharSequence subtypeName,
+                InputMethodInfo imi, int subtypeId, String subtypeLocale, String systemLocale) {
+            mImeName = imeName;
+            mSubtypeName = subtypeName;
+            mImi = imi;
+            mSubtypeId = subtypeId;
+            if (TextUtils.isEmpty(subtypeLocale)) {
+                mIsSystemLocale = false;
+                mIsSystemLanguage = false;
+            } else {
+                mIsSystemLocale = subtypeLocale.equals(systemLocale);
+                mIsSystemLanguage = mIsSystemLocale
+                        || subtypeLocale.startsWith(systemLocale.substring(0, 2));
+            }
+        }
+
+        @Override
+        public int compareTo(ImeSubtypeListItem other) {
+            if (TextUtils.isEmpty(mImeName)) {
+                return 1;
+            }
+            if (TextUtils.isEmpty(other.mImeName)) {
+                return -1;
+            }
+            if (!TextUtils.equals(mImeName, other.mImeName)) {
+                return mImeName.toString().compareTo(other.mImeName.toString());
+            }
+            if (TextUtils.equals(mSubtypeName, other.mSubtypeName)) {
+                return 0;
+            }
+            if (mIsSystemLocale) {
+                return -1;
+            }
+            if (other.mIsSystemLocale) {
+                return 1;
+            }
+            if (mIsSystemLanguage) {
+                return -1;
+            }
+            if (other.mIsSystemLanguage) {
+                return 1;
+            }
+            if (TextUtils.isEmpty(mSubtypeName)) {
+                return 1;
+            }
+            if (TextUtils.isEmpty(other.mSubtypeName)) {
+                return -1;
+            }
+            return mSubtypeName.toString().compareTo(other.mSubtypeName.toString());
+        }
+    }
+
+    private static class InputMethodAndSubtypeList {
+        private final Context mContext;
+        // Used to load label
+        private final PackageManager mPm;
+        private final String mSystemLocaleStr;
+        private final InputMethodSettings mSettings;
+
+        public InputMethodAndSubtypeList(Context context, InputMethodSettings settings) {
+            mContext = context;
+            mSettings = settings;
+            mPm = context.getPackageManager();
+            final Locale locale = context.getResources().getConfiguration().locale;
+            mSystemLocaleStr = locale != null ? locale.toString() : "";
+        }
+
+        private final TreeMap<InputMethodInfo, List<InputMethodSubtype>> mSortedImmis =
+                new TreeMap<InputMethodInfo, List<InputMethodSubtype>>(
+                        new Comparator<InputMethodInfo>() {
+                            @Override
+                            public int compare(InputMethodInfo imi1, InputMethodInfo imi2) {
+                                if (imi2 == null)
+                                    return 0;
+                                if (imi1 == null)
+                                    return 1;
+                                if (mPm == null) {
+                                    return imi1.getId().compareTo(imi2.getId());
+                                }
+                                CharSequence imiId1 = imi1.loadLabel(mPm) + "/" + imi1.getId();
+                                CharSequence imiId2 = imi2.loadLabel(mPm) + "/" + imi2.getId();
+                                return imiId1.toString().compareTo(imiId2.toString());
+                            }
+                        });
+
+        public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList() {
+            return getSortedInputMethodAndSubtypeList(true, false, false);
+        }
+
+        public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList(
+                boolean showSubtypes, boolean inputShown, boolean isScreenLocked) {
+            final ArrayList<ImeSubtypeListItem> imList =
+                    new ArrayList<ImeSubtypeListItem>();
+            final HashMap<InputMethodInfo, List<InputMethodSubtype>> immis =
+                    mSettings.getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked(
+                            mContext);
+            if (immis == null || immis.size() == 0) {
+                return Collections.emptyList();
+            }
+            mSortedImmis.clear();
+            mSortedImmis.putAll(immis);
+            for (InputMethodInfo imi : mSortedImmis.keySet()) {
+                if (imi == null) {
+                    continue;
+                }
+                List<InputMethodSubtype> explicitlyOrImplicitlyEnabledSubtypeList = immis.get(imi);
+                HashSet<String> enabledSubtypeSet = new HashSet<String>();
+                for (InputMethodSubtype subtype : explicitlyOrImplicitlyEnabledSubtypeList) {
+                    enabledSubtypeSet.add(String.valueOf(subtype.hashCode()));
+                }
+                final CharSequence imeLabel = imi.loadLabel(mPm);
+                if (showSubtypes && enabledSubtypeSet.size() > 0) {
+                    final int subtypeCount = imi.getSubtypeCount();
+                    if (DEBUG) {
+                        Slog.v(TAG, "Add subtypes: " + subtypeCount + ", " + imi.getId());
+                    }
+                    for (int j = 0; j < subtypeCount; ++j) {
+                        final InputMethodSubtype subtype = imi.getSubtypeAt(j);
+                        final String subtypeHashCode = String.valueOf(subtype.hashCode());
+                        // We show all enabled IMEs and subtypes when an IME is shown.
+                        if (enabledSubtypeSet.contains(subtypeHashCode)
+                                && ((inputShown && !isScreenLocked) || !subtype.isAuxiliary())) {
+                            final CharSequence subtypeLabel =
+                                    subtype.overridesImplicitlyEnabledSubtype() ? null : subtype
+                                            .getDisplayName(mContext, imi.getPackageName(),
+                                                    imi.getServiceInfo().applicationInfo);
+                            imList.add(new ImeSubtypeListItem(imeLabel,
+                                    subtypeLabel, imi, j, subtype.getLocale(), mSystemLocaleStr));
+
+                            // Removing this subtype from enabledSubtypeSet because we no
+                            // longer need to add an entry of this subtype to imList to avoid
+                            // duplicated entries.
+                            enabledSubtypeSet.remove(subtypeHashCode);
+                        }
+                    }
+                } else {
+                    imList.add(new ImeSubtypeListItem(imeLabel, null, imi, NOT_A_SUBTYPE_ID, null,
+                            mSystemLocaleStr));
+                }
+            }
+            Collections.sort(imList);
+            return imList;
+        }
+    }
+
+    private final ArrayDeque<SubtypeParams> mTypedSubtypeHistory = new ArrayDeque<SubtypeParams>();
+    private final Object mLock = new Object();
+    private final InputMethodSettings mSettings;
+    private InputMethodAndSubtypeList mSubtypeList;
+
+    @VisibleForTesting
+    public static ImeSubtypeListItem getNextInputMethodImpl(List<ImeSubtypeListItem> imList,
+            boolean onlyCurrentIme, InputMethodInfo imi, InputMethodSubtype subtype) {
+        if (imi == null) {
+            return null;
+        }
+        if (imList.size() <= 1) {
+            return null;
+        }
+        final int N = imList.size();
+        final int currentSubtypeId =
+                subtype != null ? InputMethodUtils.getSubtypeIdFromHashCode(imi,
+                        subtype.hashCode()) : NOT_A_SUBTYPE_ID;
+        for (int i = 0; i < N; ++i) {
+            final ImeSubtypeListItem isli = imList.get(i);
+            if (isli.mImi.equals(imi) && isli.mSubtypeId == currentSubtypeId) {
+                if (!onlyCurrentIme) {
+                    return imList.get((i + 1) % N);
+                }
+                for (int j = 0; j < N - 1; ++j) {
+                    final ImeSubtypeListItem candidate = imList.get((i + j + 1) % N);
+                    if (candidate.mImi.equals(imi)) {
+                        return candidate;
+                    }
+                }
+                return null;
+            }
+        }
+        return null;
+    }
+
+    public InputMethodSubtypeSwitchingController(InputMethodSettings settings) {
+        mSettings = settings;
+    }
+
+    // TODO: write unit tests for this method and the logic that determines the next subtype
+    public void onCommitText(InputMethodInfo imi, InputMethodSubtype subtype) {
+        synchronized (mTypedSubtypeHistory) {
+            if (subtype == null) {
+                Slog.w(TAG, "Invalid InputMethodSubtype: " + imi.getId() + ", " + subtype);
+                return;
+            }
+            if (DEBUG) {
+                Slog.d(TAG, "onCommitText: " + imi.getId() + ", " + subtype);
+            }
+            if (REQUIRE_SWITCHING_SUPPORT) {
+                if (!imi.supportsSwitchingToNextInputMethod()) {
+                    Slog.w(TAG, imi.getId() + " doesn't support switching to next input method.");
+                    return;
+                }
+            }
+            if (mTypedSubtypeHistory.size() >= MAX_HISTORY_SIZE) {
+                mTypedSubtypeHistory.poll();
+            }
+            mTypedSubtypeHistory.addFirst(new SubtypeParams(imi, subtype));
+        }
+    }
+
+    public void resetCircularListLocked(Context context) {
+        synchronized(mLock) {
+            mSubtypeList = new InputMethodAndSubtypeList(context, mSettings);
+        }
+    }
+
+    public ImeSubtypeListItem getNextInputMethod(
+            boolean onlyCurrentIme, InputMethodInfo imi, InputMethodSubtype subtype) {
+        synchronized(mLock) {
+            return getNextInputMethodImpl(mSubtypeList.getSortedInputMethodAndSubtypeList(),
+                    onlyCurrentIme, imi, subtype);
+        }
+    }
+
+    public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList(boolean showSubtypes,
+            boolean inputShown, boolean isScreenLocked) {
+        synchronized(mLock) {
+            return mSubtypeList.getSortedInputMethodAndSubtypeList(
+                    showSubtypes, inputShown, isScreenLocked);
+        }
+    }
+}
diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
index 63d018f..ac3274d 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
@@ -504,6 +504,7 @@
 
         private String mEnabledInputMethodsStrCache;
         private int mCurrentUserId;
+        private int[] mCurrentProfileIds = new int[0];
 
         private static void buildEnabledInputMethodsSettingString(
                 StringBuilder builder, Pair<String, ArrayList<String>> pair) {
@@ -536,6 +537,22 @@
             mCurrentUserId = userId;
         }
 
+        public void setCurrentProfileIds(int[] currentProfileIds) {
+            synchronized (this) {
+                mCurrentProfileIds = currentProfileIds;
+            }
+        }
+
+        public boolean isCurrentProfile(int userId) {
+            synchronized (this) {
+                if (userId == mCurrentUserId) return true;
+                for (int i = 0; i < mCurrentProfileIds.length; i++) {
+                    if (userId == mCurrentProfileIds[i]) return true;
+                }
+                return false;
+            }
+        }
+
         public List<InputMethodInfo> getEnabledInputMethodListLocked() {
             return createEnabledInputMethodListLocked(
                     getEnabledInputMethodsAndSubtypeListLocked());
@@ -959,5 +976,16 @@
                 addSubtypeToHistory(curMethodId, subtypeId);
             }
         }
+
+        public HashMap<InputMethodInfo, List<InputMethodSubtype>>
+                getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked(Context context) {
+            HashMap<InputMethodInfo, List<InputMethodSubtype>> enabledInputMethodAndSubtypes =
+                    new HashMap<InputMethodInfo, List<InputMethodSubtype>>();
+            for (InputMethodInfo imi: getEnabledInputMethodListLocked()) {
+                enabledInputMethodAndSubtypes.put(
+                        imi, getEnabledInputMethodSubtypeListLocked(context, imi, true));
+            }
+            return enabledInputMethodAndSubtypes;
+        }
     }
 }
diff --git a/core/java/com/android/internal/net/NetworkStatsFactory.java b/core/java/com/android/internal/net/NetworkStatsFactory.java
index 8282d23..e2a2b1e 100644
--- a/core/java/com/android/internal/net/NetworkStatsFactory.java
+++ b/core/java/com/android/internal/net/NetworkStatsFactory.java
@@ -17,6 +17,7 @@
 package com.android.internal.net;
 
 import static android.net.NetworkStats.SET_ALL;
+import static android.net.NetworkStats.TAG_ALL;
 import static android.net.NetworkStats.TAG_NONE;
 import static android.net.NetworkStats.UID_ALL;
 import static com.android.server.NetworkManagementSocketTagger.kernelToTag;
@@ -26,6 +27,7 @@
 import android.os.SystemClock;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.ProcFileReader;
 
 import java.io.File;
@@ -165,22 +167,32 @@
     }
 
     public NetworkStats readNetworkStatsDetail() throws IOException {
-        return readNetworkStatsDetail(UID_ALL);
+        return readNetworkStatsDetail(UID_ALL, null, TAG_ALL, null);
     }
 
-    public NetworkStats readNetworkStatsDetail(int limitUid) throws IOException {
+    public NetworkStats readNetworkStatsDetail(int limitUid, String[] limitIfaces, int limitTag,
+            NetworkStats lastStats)
+            throws IOException {
         if (USE_NATIVE_PARSING) {
-            final NetworkStats stats = new NetworkStats(SystemClock.elapsedRealtime(), 0);
-            if (nativeReadNetworkStatsDetail(stats, mStatsXtUid.getAbsolutePath(), limitUid) != 0) {
+            final NetworkStats stats;
+            if (lastStats != null) {
+                stats = lastStats;
+                stats.setElapsedRealtime(SystemClock.elapsedRealtime());
+            } else {
+                stats = new NetworkStats(SystemClock.elapsedRealtime(), -1);
+            }
+            if (nativeReadNetworkStatsDetail(stats, mStatsXtUid.getAbsolutePath(), limitUid,
+                    limitIfaces, limitTag) != 0) {
                 throw new IOException("Failed to parse network stats");
             }
             if (SANITY_CHECK_NATIVE) {
-                final NetworkStats javaStats = javaReadNetworkStatsDetail(mStatsXtUid, limitUid);
+                final NetworkStats javaStats = javaReadNetworkStatsDetail(mStatsXtUid, limitUid,
+                        limitIfaces, limitTag);
                 assertEquals(javaStats, stats);
             }
             return stats;
         } else {
-            return javaReadNetworkStatsDetail(mStatsXtUid, limitUid);
+            return javaReadNetworkStatsDetail(mStatsXtUid, limitUid, limitIfaces, limitTag);
         }
     }
 
@@ -189,7 +201,8 @@
      * expected to monotonically increase since device boot.
      */
     @VisibleForTesting
-    public static NetworkStats javaReadNetworkStatsDetail(File detailPath, int limitUid)
+    public static NetworkStats javaReadNetworkStatsDetail(File detailPath, int limitUid,
+            String[] limitIfaces, int limitTag)
             throws IOException {
         final StrictMode.ThreadPolicy savedPolicy = StrictMode.allowThreadDiskReads();
 
@@ -222,7 +235,9 @@
                 entry.txBytes = reader.nextLong();
                 entry.txPackets = reader.nextLong();
 
-                if (limitUid == UID_ALL || limitUid == entry.uid) {
+                if ((limitIfaces == null || ArrayUtils.contains(limitIfaces, entry.iface))
+                        && (limitUid == UID_ALL || limitUid == entry.uid)
+                        && (limitTag == TAG_ALL || limitTag == entry.tag)) {
                     stats.addValues(entry);
                 }
 
@@ -264,5 +279,5 @@
      */
     @VisibleForTesting
     public static native int nativeReadNetworkStatsDetail(
-            NetworkStats stats, String path, int limitUid);
+            NetworkStats stats, String path, int limitUid, String[] limitIfaces, int limitTag);
 }
diff --git a/core/java/com/android/internal/net/VpnConfig.java b/core/java/com/android/internal/net/VpnConfig.java
index 98599d0..0d00f41 100644
--- a/core/java/com/android/internal/net/VpnConfig.java
+++ b/core/java/com/android/internal/net/VpnConfig.java
@@ -25,8 +25,6 @@
 import android.net.RouteInfo;
 import android.net.LinkAddress;
 
-import com.android.internal.util.Preconditions;
-
 import java.net.InetAddress;
 import java.util.List;
 import java.util.ArrayList;
diff --git a/core/java/com/android/internal/notification/PeopleNotificationScorer.java b/core/java/com/android/internal/notification/PeopleNotificationScorer.java
new file mode 100644
index 0000000..efb5f63
--- /dev/null
+++ b/core/java/com/android/internal/notification/PeopleNotificationScorer.java
@@ -0,0 +1,227 @@
+/*
+* Copyright (C) 2014 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.android.internal.notification;
+
+import android.app.Notification;
+import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.Contacts;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.LruCache;
+import android.util.Slog;
+
+/**
+ * This {@link NotificationScorer} attempts to validate people references.
+ * Also elevates the priority of real people.
+ */
+public class PeopleNotificationScorer implements NotificationScorer {
+    private static final String TAG = "PeopleNotificationScorer";
+    private static final boolean DBG = false;
+
+    private static final boolean ENABLE_PEOPLE_SCORER = true;
+    private static final String SETTING_ENABLE_PEOPLE_SCORER = "people_scorer_enabled";
+    private static final String[] LOOKUP_PROJECTION = { Contacts._ID };
+    private static final int MAX_PEOPLE = 10;
+    private static final int PEOPLE_CACHE_SIZE = 200;
+    // see NotificationManagerService
+    private static final int NOTIFICATION_PRIORITY_MULTIPLIER = 10;
+
+    protected boolean mEnabled;
+    private Context mContext;
+
+    // maps raw person handle to resolved person object
+    private LruCache<String, LookupResult> mPeopleCache;
+
+    private float findMaxContactScore(Bundle extras) {
+        if (extras == null) {
+            return 0f;
+        }
+
+        final String[] people = extras.getStringArray(Notification.EXTRA_PEOPLE);
+        if (people == null || people.length == 0) {
+            return 0f;
+        }
+
+        float rank = 0f;
+        for (int personIdx = 0; personIdx < people.length && personIdx < MAX_PEOPLE; personIdx++) {
+            final String handle = people[personIdx];
+            if (TextUtils.isEmpty(handle)) continue;
+
+            LookupResult lookupResult = mPeopleCache.get(handle);
+            if (lookupResult == null || lookupResult.isExpired()) {
+                final Uri uri = Uri.parse(handle);
+                if ("tel".equals(uri.getScheme())) {
+                    if (DBG) Slog.w(TAG, "checking telephone URI: " + handle);
+                    lookupResult = lookupPhoneContact(handle, uri.getSchemeSpecificPart());
+                } else if (handle.startsWith(Contacts.CONTENT_LOOKUP_URI.toString())) {
+                    if (DBG) Slog.w(TAG, "checking lookup URI: " + handle);
+                    lookupResult = resolveContactsUri(handle, uri);
+                } else {
+                    if (DBG) Slog.w(TAG, "unsupported URI " + handle);
+                }
+            } else {
+                if (DBG) Slog.w(TAG, "using cached lookupResult: " + lookupResult.mId);
+            }
+            if (lookupResult != null) {
+                rank = Math.max(rank, lookupResult.getRank());
+            }
+        }
+        return rank;
+    }
+
+    private LookupResult lookupPhoneContact(final String handle, final String number) {
+        LookupResult lookupResult = null;
+        Cursor c = null;
+        try {
+            Uri numberUri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI,
+                    Uri.encode(number));
+            c = mContext.getContentResolver().query(numberUri, LOOKUP_PROJECTION, null, null, null);
+            if (c != null && c.getCount() > 0) {
+                c.moveToFirst();
+                final int idIdx = c.getColumnIndex(Contacts._ID);
+                final int id = c.getInt(idIdx);
+                if (DBG) Slog.w(TAG, "is valid: " + id);
+                lookupResult = new LookupResult(id);
+            }
+        } catch(Throwable t) {
+            Slog.w(TAG, "Problem getting content resolver or performing contacts query.", t);
+        } finally {
+            if (c != null) {
+                c.close();
+            }
+        }
+        if (lookupResult == null) {
+            lookupResult = new LookupResult(LookupResult.INVALID_ID);
+        }
+        mPeopleCache.put(handle, lookupResult);
+        return lookupResult;
+    }
+
+    private LookupResult resolveContactsUri(String handle, final Uri personUri) {
+        LookupResult lookupResult = null;
+        Cursor c = null;
+        try {
+            c = mContext.getContentResolver().query(personUri, LOOKUP_PROJECTION, null, null, null);
+            if (c != null && c.getCount() > 0) {
+                c.moveToFirst();
+                final int idIdx = c.getColumnIndex(Contacts._ID);
+                final int id = c.getInt(idIdx);
+                if (DBG) Slog.w(TAG, "is valid: " + id);
+                lookupResult = new LookupResult(id);
+            }
+        } catch(Throwable t) {
+            Slog.w(TAG, "Problem getting content resolver or performing contacts query.", t);
+        } finally {
+            if (c != null) {
+                c.close();
+            }
+        }
+        if (lookupResult == null) {
+            lookupResult = new LookupResult(LookupResult.INVALID_ID);
+        }
+        mPeopleCache.put(handle, lookupResult);
+        return lookupResult;
+    }
+
+    private final static int clamp(int x, int low, int high) {
+        return (x < low) ? low : ((x > high) ? high : x);
+    }
+
+    // TODO: rework this function before shipping
+    private static int priorityBumpMap(int incomingScore) {
+        //assumption is that scale runs from [-2*pm, 2*pm]
+        int pm = NOTIFICATION_PRIORITY_MULTIPLIER;
+        int theScore = incomingScore;
+        // enforce input in range
+        theScore = clamp(theScore, -2 * pm, 2 * pm);
+        if (theScore != incomingScore) return incomingScore;
+        // map -20 -> -20 and -10 -> 5 (when pm = 10)
+        if (theScore <= -pm) {
+            theScore += 1.5 * (theScore + 2 * pm);
+        } else {
+            // map 0 -> 10, 10 -> 15, 20 -> 20;
+            theScore += 0.5 * (2 * pm - theScore);
+        }
+        if (DBG) Slog.v(TAG, "priorityBumpMap: score before: " + incomingScore
+                + ", score after " + theScore + ".");
+        return theScore;
+    }
+
+    @Override
+    public void initialize(Context context) {
+        if (DBG) Slog.v(TAG, "Initializing  " + getClass().getSimpleName() + ".");
+        mContext = context;
+        mPeopleCache = new LruCache<String, LookupResult>(PEOPLE_CACHE_SIZE);
+        mEnabled = ENABLE_PEOPLE_SCORER && 1 == Settings.Global.getInt(
+                mContext.getContentResolver(), SETTING_ENABLE_PEOPLE_SCORER, 0);
+    }
+
+    @Override
+    public int getScore(Notification notification, int score) {
+        if (notification == null || !mEnabled) {
+            if (DBG) Slog.w(TAG, "empty notification? scorer disabled?");
+            return score;
+        }
+        float contactScore = findMaxContactScore(notification.extras);
+        if (contactScore > 0f) {
+            if (DBG) Slog.v(TAG, "Notification references a real contact. Promoted!");
+            score = priorityBumpMap(score);
+        } else {
+            if (DBG) Slog.v(TAG, "Notification lacks any valid contact reference. Not promoted!");
+        }
+        return score;
+    }
+
+    private static class LookupResult {
+        private static final long CONTACT_REFRESH_MILLIS = 60 * 60 * 1000;  // 1hr
+        public static final int INVALID_ID = -1;
+
+        private final long mExpireMillis;
+        private int mId;
+
+        public LookupResult(int id) {
+            mId = id;
+            mExpireMillis = System.currentTimeMillis() + CONTACT_REFRESH_MILLIS;
+        }
+
+        public boolean isExpired() {
+            return mExpireMillis < System.currentTimeMillis();
+        }
+
+        public boolean isInvalid() {
+            return mId == INVALID_ID || isExpired();
+        }
+
+        public float getRank() {
+            if (isInvalid()) {
+                return 0f;
+            } else {
+                return 1f;  // TODO: finer grained score
+            }
+        }
+
+        public LookupResult setId(int id) {
+            mId = id;
+            return this;
+        }
+    }
+}
+
diff --git a/core/java/com/android/internal/os/BatterySipper.java b/core/java/com/android/internal/os/BatterySipper.java
new file mode 100644
index 0000000..6ca24d7
--- /dev/null
+++ b/core/java/com/android/internal/os/BatterySipper.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2009 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.android.internal.os;
+
+import android.os.BatteryStats.Uid;
+
+/**
+ * Contains power usage of an application, system service, or hardware type.
+ */
+public class BatterySipper implements Comparable<BatterySipper> {
+    public int userId;
+    public Uid uidObj;
+    public double value;
+    public double[] values;
+    public DrainType drainType;
+    public long usageTime;
+    public long cpuTime;
+    public long gpsTime;
+    public long wifiRunningTime;
+    public long cpuFgTime;
+    public long wakeLockTime;
+    public long mobileRxPackets;
+    public long mobileTxPackets;
+    public long mobileActive;
+    public int mobileActiveCount;
+    public double mobilemspp;         // milliseconds per packet
+    public long wifiRxPackets;
+    public long wifiTxPackets;
+    public long mobileRxBytes;
+    public long mobileTxBytes;
+    public long wifiRxBytes;
+    public long wifiTxBytes;
+    public double percent;
+    public double noCoveragePercent;
+    public String[] mPackages;
+    public String packageWithHighestDrain;
+
+    public enum DrainType {
+        IDLE,
+        CELL,
+        PHONE,
+        WIFI,
+        BLUETOOTH,
+        SCREEN,
+        APP,
+        USER,
+        UNACCOUNTED,
+        OVERCOUNTED
+    }
+
+    public BatterySipper(DrainType drainType, Uid uid, double[] values) {
+        this.values = values;
+        if (values != null) value = values[0];
+        this.drainType = drainType;
+        uidObj = uid;
+    }
+
+    public double[] getValues() {
+        return values;
+    }
+
+    public void computeMobilemspp() {
+        long packets = mobileRxPackets+mobileTxPackets;
+        mobilemspp = packets > 0 ? (mobileActive / (double)packets) : 0;
+    }
+
+    @Override
+    public int compareTo(BatterySipper other) {
+        // Return the flipped value because we want the items in descending order
+        return Double.compare(other.value, value);
+    }
+
+    /**
+     * Gets a list of packages associated with the current user
+     */
+    public String[] getPackages() {
+        return mPackages;
+    }
+
+    public int getUid() {
+        // Bail out if the current sipper is not an App sipper.
+        if (uidObj == null) {
+            return 0;
+        }
+        return uidObj.getUid();
+    }
+}
diff --git a/core/java/com/android/internal/os/BatteryStatsHelper.java b/core/java/com/android/internal/os/BatteryStatsHelper.java
new file mode 100644
index 0000000..7ff949e
--- /dev/null
+++ b/core/java/com/android/internal/os/BatteryStatsHelper.java
@@ -0,0 +1,838 @@
+/*
+ * Copyright (C) 2009 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.android.internal.os;
+
+import static android.os.BatteryStats.NETWORK_MOBILE_RX_DATA;
+import static android.os.BatteryStats.NETWORK_MOBILE_TX_DATA;
+import static android.os.BatteryStats.NETWORK_WIFI_RX_DATA;
+import static android.os.BatteryStats.NETWORK_WIFI_TX_DATA;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.hardware.Sensor;
+import android.hardware.SensorManager;
+import android.net.ConnectivityManager;
+import android.os.BatteryStats;
+import android.os.BatteryStats.Uid;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.telephony.SignalStrength;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.internal.app.IBatteryStats;
+import com.android.internal.os.BatterySipper.DrainType;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A helper class for retrieving the power usage information for all applications and services.
+ *
+ * The caller must initialize this class as soon as activity object is ready to use (for example, in
+ * onAttach() for Fragment), call create() in onCreate() and call destroy() in onDestroy().
+ */
+public class BatteryStatsHelper {
+
+    private static final boolean DEBUG = false;
+
+    private static final String TAG = BatteryStatsHelper.class.getSimpleName();
+
+    private static BatteryStats sStatsXfer;
+    private static Intent sBatteryBroadcastXfer;
+
+    final private Context mContext;
+    final private boolean mCollectBatteryBroadcast;
+
+    private IBatteryStats mBatteryInfo;
+    private BatteryStats mStats;
+    private Intent mBatteryBroadcast;
+    private PowerProfile mPowerProfile;
+
+    private final List<BatterySipper> mUsageList = new ArrayList<BatterySipper>();
+    private final List<BatterySipper> mWifiSippers = new ArrayList<BatterySipper>();
+    private final List<BatterySipper> mBluetoothSippers = new ArrayList<BatterySipper>();
+    private final SparseArray<List<BatterySipper>> mUserSippers
+            = new SparseArray<List<BatterySipper>>();
+    private final SparseArray<Double> mUserPower = new SparseArray<Double>();
+
+    private final List<BatterySipper> mMobilemsppList = new ArrayList<BatterySipper>();
+
+    private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
+    private int mAsUser = 0;
+
+    long mRawRealtime;
+    long mRawUptime;
+    long mBatteryRealtime;
+    long mBatteryUptime;
+    long mTypeBatteryRealtime;
+    long mTypeBatteryUptime;
+    long mBatteryTimeRemaining;
+    long mChargeTimeRemaining;
+
+    private long mStatsPeriod = 0;
+    private double mMaxPower = 1;
+    private double mComputedPower;
+    private double mTotalPower;
+    private double mWifiPower;
+    private double mBluetoothPower;
+    private double mMinDrainedPower;
+    private double mMaxDrainedPower;
+
+    // How much the apps together have kept the mobile radio active.
+    private long mAppMobileActive;
+
+    // How much the apps together have left WIFI running.
+    private long mAppWifiRunning;
+
+    public BatteryStatsHelper(Context context) {
+        this(context, true);
+    }
+
+    public BatteryStatsHelper(Context context, boolean collectBatteryBroadcast) {
+        mContext = context;
+        mCollectBatteryBroadcast = collectBatteryBroadcast;
+    }
+
+    /** Clears the current stats and forces recreating for future use. */
+    public void clearStats() {
+        mStats = null;
+    }
+
+    public BatteryStats getStats() {
+        if (mStats == null) {
+            load();
+        }
+        return mStats;
+    }
+
+    public Intent getBatteryBroadcast() {
+        if (mBatteryBroadcast == null && mCollectBatteryBroadcast) {
+            load();
+        }
+        return mBatteryBroadcast;
+    }
+
+    public PowerProfile getPowerProfile() {
+        return mPowerProfile;
+    }
+
+    public void create(BatteryStats stats) {
+        mPowerProfile = new PowerProfile(mContext);
+        mStats = stats;
+    }
+
+    public void create(Bundle icicle) {
+        if (icicle != null) {
+            mStats = sStatsXfer;
+            mBatteryBroadcast = sBatteryBroadcastXfer;
+        }
+        mBatteryInfo = IBatteryStats.Stub.asInterface(
+                ServiceManager.getService(BatteryStats.SERVICE_NAME));
+        mPowerProfile = new PowerProfile(mContext);
+    }
+
+    public void storeState() {
+        sStatsXfer = mStats;
+        sBatteryBroadcastXfer = mBatteryBroadcast;
+    }
+
+    public static String makemAh(double power) {
+        if (power < .00001) return String.format("%.8f", power);
+        else if (power < .0001) return String.format("%.7f", power);
+        else if (power < .001) return String.format("%.6f", power);
+        else if (power < .01) return String.format("%.5f", power);
+        else if (power < .1) return String.format("%.4f", power);
+        else if (power < 1) return String.format("%.3f", power);
+        else if (power < 10) return String.format("%.2f", power);
+        else if (power < 100) return String.format("%.1f", power);
+        else return String.format("%.0f", power);
+    }
+
+    /**
+     * Refreshes the power usage list.
+     */
+    public void refreshStats(int statsType, int asUser) {
+        refreshStats(statsType, asUser, SystemClock.elapsedRealtime() * 1000,
+                SystemClock.uptimeMillis() * 1000);
+    }
+
+    public void refreshStats(int statsType, int asUser, long rawRealtimeUs, long rawUptimeUs) {
+        // Initialize mStats if necessary.
+        getStats();
+
+        mMaxPower = 0;
+        mComputedPower = 0;
+        mTotalPower = 0;
+        mWifiPower = 0;
+        mBluetoothPower = 0;
+        mAppMobileActive = 0;
+        mAppWifiRunning = 0;
+
+        mUsageList.clear();
+        mWifiSippers.clear();
+        mBluetoothSippers.clear();
+        mUserSippers.clear();
+        mUserPower.clear();
+        mMobilemsppList.clear();
+
+        if (mStats == null) {
+            return;
+        }
+
+        mStatsType = statsType;
+        mAsUser = asUser;
+        mRawUptime = rawUptimeUs;
+        mRawRealtime = rawRealtimeUs;
+        mBatteryUptime = mStats.getBatteryUptime(rawUptimeUs);
+        mBatteryRealtime = mStats.getBatteryRealtime(rawRealtimeUs);
+        mTypeBatteryUptime = mStats.computeBatteryUptime(rawUptimeUs, mStatsType);
+        mTypeBatteryRealtime = mStats.computeBatteryRealtime(rawRealtimeUs, mStatsType);
+        mBatteryTimeRemaining = mStats.computeBatteryTimeRemaining(rawRealtimeUs);
+        mChargeTimeRemaining = mStats.computeChargeTimeRemaining(rawRealtimeUs);
+
+        if (DEBUG) {
+            Log.d(TAG, "Raw time: realtime=" + (rawRealtimeUs/1000) + " uptime="
+                    + (rawUptimeUs/1000));
+            Log.d(TAG, "Battery time: realtime=" + (mBatteryRealtime/1000) + " uptime="
+                    + (mBatteryUptime/1000));
+            Log.d(TAG, "Battery type time: realtime=" + (mTypeBatteryRealtime/1000) + " uptime="
+                    + (mTypeBatteryUptime/1000));
+        }
+        mMinDrainedPower = (mStats.getLowDischargeAmountSinceCharge()
+                * mPowerProfile.getBatteryCapacity()) / 100;
+        mMaxDrainedPower = (mStats.getHighDischargeAmountSinceCharge()
+                * mPowerProfile.getBatteryCapacity()) / 100;
+
+        processAppUsage();
+
+        // Before aggregating apps in to users, collect all apps to sort by their ms per packet.
+        for (int i=0; i<mUsageList.size(); i++) {
+            BatterySipper bs = mUsageList.get(i);
+            bs.computeMobilemspp();
+            if (bs.mobilemspp != 0) {
+                mMobilemsppList.add(bs);
+            }
+        }
+        for (int i=0; i<mUserSippers.size(); i++) {
+            List<BatterySipper> user = mUserSippers.valueAt(i);
+            for (int j=0; j<user.size(); j++) {
+                BatterySipper bs = user.get(j);
+                bs.computeMobilemspp();
+                if (bs.mobilemspp != 0) {
+                    mMobilemsppList.add(bs);
+                }
+            }
+        }
+        Collections.sort(mMobilemsppList, new Comparator<BatterySipper>() {
+            @Override
+            public int compare(BatterySipper lhs, BatterySipper rhs) {
+                if (lhs.mobilemspp < rhs.mobilemspp) {
+                    return 1;
+                } else if (lhs.mobilemspp > rhs.mobilemspp) {
+                    return -1;
+                }
+                return 0;
+            }
+        });
+
+        processMiscUsage();
+
+        if (DEBUG) {
+            Log.d(TAG, "Accuracy: total computed=" + makemAh(mComputedPower) + ", min discharge="
+                    + makemAh(mMinDrainedPower) + ", max discharge=" + makemAh(mMaxDrainedPower));
+        }
+        mTotalPower = mComputedPower;
+        if (mStats.getLowDischargeAmountSinceCharge() > 1) {
+            if (mMinDrainedPower > mComputedPower) {
+                double amount = mMinDrainedPower - mComputedPower;
+                mTotalPower = mMinDrainedPower;
+                addEntryNoTotal(BatterySipper.DrainType.UNACCOUNTED, 0, amount);
+            } else if (mMaxDrainedPower < mComputedPower) {
+                double amount = mComputedPower - mMaxDrainedPower;
+                addEntryNoTotal(BatterySipper.DrainType.OVERCOUNTED, 0, amount);
+            }
+        }
+
+        Collections.sort(mUsageList);
+    }
+
+    private void processAppUsage() {
+        SensorManager sensorManager = (SensorManager) mContext.getSystemService(
+                Context.SENSOR_SERVICE);
+        final int which = mStatsType;
+        final int speedSteps = mPowerProfile.getNumSpeedSteps();
+        final double[] powerCpuNormal = new double[speedSteps];
+        final long[] cpuSpeedStepTimes = new long[speedSteps];
+        for (int p = 0; p < speedSteps; p++) {
+            powerCpuNormal[p] = mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_ACTIVE, p);
+        }
+        final double mobilePowerPerPacket = getMobilePowerPerPacket();
+        final double mobilePowerPerMs = getMobilePowerPerMs();
+        final double wifiPowerPerPacket = getWifiPowerPerPacket();
+        long appWakelockTimeUs = 0;
+        BatterySipper osApp = null;
+        mStatsPeriod = mTypeBatteryRealtime;
+        SparseArray<? extends Uid> uidStats = mStats.getUidStats();
+        final int NU = uidStats.size();
+        for (int iu = 0; iu < NU; iu++) {
+            Uid u = uidStats.valueAt(iu);
+            double p; // in mAs
+            double power = 0; // in mAs
+            double highestDrain = 0;
+            String packageWithHighestDrain = null;
+            Map<String, ? extends BatteryStats.Uid.Proc> processStats = u.getProcessStats();
+            long cpuTime = 0;
+            long cpuFgTime = 0;
+            long wakelockTime = 0;
+            long gpsTime = 0;
+            if (processStats.size() > 0) {
+                // Process CPU time
+                for (Map.Entry<String, ? extends BatteryStats.Uid.Proc> ent
+                        : processStats.entrySet()) {
+                    Uid.Proc ps = ent.getValue();
+                    final long userTime = ps.getUserTime(which);
+                    final long systemTime = ps.getSystemTime(which);
+                    final long foregroundTime = ps.getForegroundTime(which);
+                    cpuFgTime += foregroundTime * 10; // convert to millis
+                    final long tmpCpuTime = (userTime + systemTime) * 10; // convert to millis
+                    int totalTimeAtSpeeds = 0;
+                    // Get the total first
+                    for (int step = 0; step < speedSteps; step++) {
+                        cpuSpeedStepTimes[step] = ps.getTimeAtCpuSpeedStep(step, which);
+                        totalTimeAtSpeeds += cpuSpeedStepTimes[step];
+                    }
+                    if (totalTimeAtSpeeds == 0) totalTimeAtSpeeds = 1;
+                    // Then compute the ratio of time spent at each speed
+                    double processPower = 0;
+                    for (int step = 0; step < speedSteps; step++) {
+                        double ratio = (double) cpuSpeedStepTimes[step] / totalTimeAtSpeeds;
+                        if (DEBUG && ratio != 0) Log.d(TAG, "UID " + u.getUid() + ": CPU step #"
+                                + step + " ratio=" + makemAh(ratio) + " power="
+                                + makemAh(ratio*tmpCpuTime*powerCpuNormal[step] / (60*60*1000)));
+                        processPower += ratio * tmpCpuTime * powerCpuNormal[step];
+                    }
+                    cpuTime += tmpCpuTime;
+                    if (DEBUG && processPower != 0) {
+                        Log.d(TAG, String.format("process %s, cpu power=%s",
+                                ent.getKey(), makemAh(processPower / (60*60*1000))));
+                    }
+                    power += processPower;
+                    if (packageWithHighestDrain == null
+                            || packageWithHighestDrain.startsWith("*")) {
+                        highestDrain = processPower;
+                        packageWithHighestDrain = ent.getKey();
+                    } else if (highestDrain < processPower
+                            && !ent.getKey().startsWith("*")) {
+                        highestDrain = processPower;
+                        packageWithHighestDrain = ent.getKey();
+                    }
+                }
+            }
+            if (cpuFgTime > cpuTime) {
+                if (DEBUG && cpuFgTime > cpuTime + 10000) {
+                    Log.d(TAG, "WARNING! Cputime is more than 10 seconds behind Foreground time");
+                }
+                cpuTime = cpuFgTime; // Statistics may not have been gathered yet.
+            }
+            power /= (60*60*1000);
+
+            // Process wake lock usage
+            Map<String, ? extends BatteryStats.Uid.Wakelock> wakelockStats = u.getWakelockStats();
+            for (Map.Entry<String, ? extends BatteryStats.Uid.Wakelock> wakelockEntry
+                    : wakelockStats.entrySet()) {
+                Uid.Wakelock wakelock = wakelockEntry.getValue();
+                // Only care about partial wake locks since full wake locks
+                // are canceled when the user turns the screen off.
+                BatteryStats.Timer timer = wakelock.getWakeTime(BatteryStats.WAKE_TYPE_PARTIAL);
+                if (timer != null) {
+                    wakelockTime += timer.getTotalTimeLocked(mRawRealtime, which);
+                }
+            }
+            appWakelockTimeUs += wakelockTime;
+            wakelockTime /= 1000; // convert to millis
+
+            // Add cost of holding a wake lock
+            p = (wakelockTime
+                    * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE)) / (60*60*1000);
+            if (DEBUG && p != 0) Log.d(TAG, "UID " + u.getUid() + ": wake "
+                    + wakelockTime + " power=" + makemAh(p));
+            power += p;
+
+            // Add cost of mobile traffic
+            final long mobileRx = u.getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, mStatsType);
+            final long mobileTx = u.getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, mStatsType);
+            final long mobileRxB = u.getNetworkActivityBytes(NETWORK_MOBILE_RX_DATA, mStatsType);
+            final long mobileTxB = u.getNetworkActivityBytes(NETWORK_MOBILE_TX_DATA, mStatsType);
+            final long mobileActive = u.getMobileRadioActiveTime(mStatsType);
+            if (mobileActive > 0) {
+                // We are tracking when the radio is up, so can use the active time to
+                // determine power use.
+                mAppMobileActive += mobileActive;
+                p = (mobilePowerPerMs * mobileActive) / 1000;
+            } else {
+                // We are not tracking when the radio is up, so must approximate power use
+                // based on the number of packets.
+                p = (mobileRx + mobileTx) * mobilePowerPerPacket;
+            }
+            if (DEBUG && p != 0) Log.d(TAG, "UID " + u.getUid() + ": mobile packets "
+                    + (mobileRx+mobileTx) + " active time " + mobileActive
+                    + " power=" + makemAh(p));
+            power += p;
+
+            // Add cost of wifi traffic
+            final long wifiRx = u.getNetworkActivityPackets(NETWORK_WIFI_RX_DATA, mStatsType);
+            final long wifiTx = u.getNetworkActivityPackets(NETWORK_WIFI_TX_DATA, mStatsType);
+            final long wifiRxB = u.getNetworkActivityBytes(NETWORK_WIFI_RX_DATA, mStatsType);
+            final long wifiTxB = u.getNetworkActivityBytes(NETWORK_WIFI_TX_DATA, mStatsType);
+            p = (wifiRx + wifiTx) * wifiPowerPerPacket;
+            if (DEBUG && p != 0) Log.d(TAG, "UID " + u.getUid() + ": wifi packets "
+                    + (mobileRx+mobileTx) + " power=" + makemAh(p));
+            power += p;
+
+            // Add cost of keeping WIFI running.
+            long wifiRunningTimeMs = u.getWifiRunningTime(mRawRealtime, which) / 1000;
+            mAppWifiRunning += wifiRunningTimeMs;
+            p = (wifiRunningTimeMs
+                    * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ON)) / (60*60*1000);
+            if (DEBUG && p != 0) Log.d(TAG, "UID " + u.getUid() + ": wifi running "
+                    + wifiRunningTimeMs + " power=" + makemAh(p));
+            power += p;
+
+            // Add cost of WIFI scans
+            long wifiScanTimeMs = u.getWifiScanTime(mRawRealtime, which) / 1000;
+            p = (wifiScanTimeMs
+                    * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_SCAN)) / (60*60*1000);
+            if (DEBUG) Log.d(TAG, "UID " + u.getUid() + ": wifi scan " + wifiScanTimeMs
+                    + " power=" + makemAh(p));
+            power += p;
+            for (int bin = 0; bin < BatteryStats.Uid.NUM_WIFI_BATCHED_SCAN_BINS; bin++) {
+                long batchScanTimeMs = u.getWifiBatchedScanTime(bin, mRawRealtime, which) / 1000;
+                p = ((batchScanTimeMs
+                        * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_BATCHED_SCAN, bin))
+                    ) / (60*60*1000);
+                if (DEBUG && p != 0) Log.d(TAG, "UID " + u.getUid() + ": wifi batched scan # " + bin
+                        + " time=" + batchScanTimeMs + " power=" + makemAh(p));
+                power += p;
+            }
+
+            // Process Sensor usage
+            Map<Integer, ? extends BatteryStats.Uid.Sensor> sensorStats = u.getSensorStats();
+            for (Map.Entry<Integer, ? extends BatteryStats.Uid.Sensor> sensorEntry
+                    : sensorStats.entrySet()) {
+                Uid.Sensor sensor = sensorEntry.getValue();
+                int sensorHandle = sensor.getHandle();
+                BatteryStats.Timer timer = sensor.getSensorTime();
+                long sensorTime = timer.getTotalTimeLocked(mRawRealtime, which) / 1000;
+                double multiplier = 0;
+                switch (sensorHandle) {
+                    case Uid.Sensor.GPS:
+                        multiplier = mPowerProfile.getAveragePower(PowerProfile.POWER_GPS_ON);
+                        gpsTime = sensorTime;
+                        break;
+                    default:
+                        List<Sensor> sensorList = sensorManager.getSensorList(
+                                android.hardware.Sensor.TYPE_ALL);
+                        for (android.hardware.Sensor s : sensorList) {
+                            if (s.getHandle() == sensorHandle) {
+                                multiplier = s.getPower();
+                                break;
+                            }
+                        }
+                }
+                p = (multiplier * sensorTime) / (60*60*1000);
+                if (DEBUG && p != 0) Log.d(TAG, "UID " + u.getUid() + ": sensor #" + sensorHandle
+                        + " time=" + sensorTime + " power=" + makemAh(p));
+                power += p;
+            }
+
+            if (DEBUG && power != 0) Log.d(TAG, String.format("UID %d: total power=%s",
+                    u.getUid(), makemAh(power)));
+
+            // Add the app to the list if it is consuming power
+            final int userId = UserHandle.getUserId(u.getUid());
+            if (power != 0 || u.getUid() == 0) {
+                BatterySipper app = new BatterySipper(BatterySipper.DrainType.APP, u,
+                        new double[] {power});
+                app.cpuTime = cpuTime;
+                app.gpsTime = gpsTime;
+                app.wifiRunningTime = wifiRunningTimeMs;
+                app.cpuFgTime = cpuFgTime;
+                app.wakeLockTime = wakelockTime;
+                app.mobileRxPackets = mobileRx;
+                app.mobileTxPackets = mobileTx;
+                app.mobileActive = mobileActive / 1000;
+                app.mobileActiveCount = u.getMobileRadioActiveCount(mStatsType);
+                app.wifiRxPackets = wifiRx;
+                app.wifiTxPackets = wifiTx;
+                app.mobileRxBytes = mobileRxB;
+                app.mobileTxBytes = mobileTxB;
+                app.wifiRxBytes = wifiRxB;
+                app.wifiTxBytes = wifiTxB;
+                app.packageWithHighestDrain = packageWithHighestDrain;
+                if (u.getUid() == Process.WIFI_UID) {
+                    mWifiSippers.add(app);
+                    mWifiPower += power;
+                } else if (u.getUid() == Process.BLUETOOTH_UID) {
+                    mBluetoothSippers.add(app);
+                    mBluetoothPower += power;
+                } else if (mAsUser != UserHandle.USER_ALL && userId != mAsUser
+                        && UserHandle.getAppId(u.getUid()) >= Process.FIRST_APPLICATION_UID) {
+                    List<BatterySipper> list = mUserSippers.get(userId);
+                    if (list == null) {
+                        list = new ArrayList<BatterySipper>();
+                        mUserSippers.put(userId, list);
+                    }
+                    list.add(app);
+                    if (power != 0) {
+                        Double userPower = mUserPower.get(userId);
+                        if (userPower == null) {
+                            userPower = power;
+                        } else {
+                            userPower += power;
+                        }
+                        mUserPower.put(userId, userPower);
+                    }
+                } else {
+                    mUsageList.add(app);
+                    if (power > mMaxPower) mMaxPower = power;
+                    mComputedPower += power;
+                }
+                if (u.getUid() == 0) {
+                    osApp = app;
+                }
+            }
+        }
+
+        // The device has probably been awake for longer than the screen on
+        // time and application wake lock time would account for.  Assign
+        // this remainder to the OS, if possible.
+        if (osApp != null) {
+            long wakeTimeMillis = mBatteryUptime / 1000;
+            wakeTimeMillis -= (appWakelockTimeUs / 1000)
+                    + (mStats.getScreenOnTime(mRawRealtime, which) / 1000);
+            if (wakeTimeMillis > 0) {
+                double power = (wakeTimeMillis
+                        * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_AWAKE))
+                        /  (60*60*1000);
+                if (DEBUG) Log.d(TAG, "OS wakeLockTime " + wakeTimeMillis + " power "
+                        + makemAh(power));
+                osApp.wakeLockTime += wakeTimeMillis;
+                osApp.value += power;
+                osApp.values[0] += power;
+                if (osApp.value > mMaxPower) mMaxPower = osApp.value;
+                mComputedPower += power;
+            }
+        }
+    }
+
+    private void addPhoneUsage() {
+        long phoneOnTimeMs = mStats.getPhoneOnTime(mRawRealtime, mStatsType) / 1000;
+        double phoneOnPower = mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE)
+                * phoneOnTimeMs / (60*60*1000);
+        if (phoneOnPower != 0) {
+            BatterySipper bs = addEntry(BatterySipper.DrainType.PHONE, phoneOnTimeMs, phoneOnPower);
+        }
+    }
+
+    private void addScreenUsage() {
+        double power = 0;
+        long screenOnTimeMs = mStats.getScreenOnTime(mRawRealtime, mStatsType) / 1000;
+        power += screenOnTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_SCREEN_ON);
+        final double screenFullPower =
+                mPowerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL);
+        for (int i = 0; i < BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS; i++) {
+            double screenBinPower = screenFullPower * (i + 0.5f)
+                    / BatteryStats.NUM_SCREEN_BRIGHTNESS_BINS;
+            long brightnessTime = mStats.getScreenBrightnessTime(i, mRawRealtime, mStatsType)
+                    / 1000;
+            double p = screenBinPower*brightnessTime;
+            if (DEBUG && p != 0) {
+                Log.d(TAG, "Screen bin #" + i + ": time=" + brightnessTime
+                        + " power=" + makemAh(p / (60 * 60 * 1000)));
+            }
+            power += p;
+        }
+        power /= (60*60*1000); // To hours
+        if (power != 0) {
+            addEntry(BatterySipper.DrainType.SCREEN, screenOnTimeMs, power);
+        }
+    }
+
+    private void addRadioUsage() {
+        double power = 0;
+        final int BINS = SignalStrength.NUM_SIGNAL_STRENGTH_BINS;
+        long signalTimeMs = 0;
+        long noCoverageTimeMs = 0;
+        for (int i = 0; i < BINS; i++) {
+            long strengthTimeMs = mStats.getPhoneSignalStrengthTime(i, mRawRealtime, mStatsType)
+                    / 1000;
+            double p = (strengthTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ON, i))
+                        / (60*60*1000);
+            if (DEBUG && p != 0) {
+                Log.d(TAG, "Cell strength #" + i + ": time=" + strengthTimeMs + " power="
+                        + makemAh(p));
+            }
+            power += p;
+            signalTimeMs += strengthTimeMs;
+            if (i == 0) {
+                noCoverageTimeMs = strengthTimeMs;
+            }
+        }
+        long scanningTimeMs = mStats.getPhoneSignalScanningTime(mRawRealtime, mStatsType)
+                / 1000;
+        double p = (scanningTimeMs * mPowerProfile.getAveragePower(
+                        PowerProfile.POWER_RADIO_SCANNING))
+                        / (60*60*1000);
+        if (DEBUG && p != 0) {
+            Log.d(TAG, "Cell radio scanning: time=" + scanningTimeMs + " power=" + makemAh(p));
+        }
+        power += p;
+        long radioActiveTimeUs = mStats.getMobileRadioActiveTime(mRawRealtime, mStatsType);
+        long remainingActiveTime = (radioActiveTimeUs - mAppMobileActive) / 1000;
+        if (remainingActiveTime > 0) {
+            power += getMobilePowerPerMs() * remainingActiveTime;
+        }
+        if (power != 0) {
+            BatterySipper bs =
+                    addEntry(BatterySipper.DrainType.CELL, signalTimeMs, power);
+            if (signalTimeMs != 0) {
+                bs.noCoveragePercent = noCoverageTimeMs * 100.0 / signalTimeMs;
+            }
+            bs.mobileActive = remainingActiveTime;
+            bs.mobileActiveCount = mStats.getMobileRadioActiveUnknownCount(mStatsType);
+        }
+    }
+
+    private void aggregateSippers(BatterySipper bs, List<BatterySipper> from, String tag) {
+        for (int i=0; i<from.size(); i++) {
+            BatterySipper wbs = from.get(i);
+            if (DEBUG) Log.d(TAG, tag + " adding sipper " + wbs + ": cpu=" + wbs.cpuTime);
+            bs.cpuTime += wbs.cpuTime;
+            bs.gpsTime += wbs.gpsTime;
+            bs.wifiRunningTime += wbs.wifiRunningTime;
+            bs.cpuFgTime += wbs.cpuFgTime;
+            bs.wakeLockTime += wbs.wakeLockTime;
+            bs.mobileRxPackets += wbs.mobileRxPackets;
+            bs.mobileTxPackets += wbs.mobileTxPackets;
+            bs.mobileActive += wbs.mobileActive;
+            bs.mobileActiveCount += wbs.mobileActiveCount;
+            bs.wifiRxPackets += wbs.wifiRxPackets;
+            bs.wifiTxPackets += wbs.wifiTxPackets;
+            bs.mobileRxBytes += wbs.mobileRxBytes;
+            bs.mobileTxBytes += wbs.mobileTxBytes;
+            bs.wifiRxBytes += wbs.wifiRxBytes;
+            bs.wifiTxBytes += wbs.wifiTxBytes;
+        }
+        bs.computeMobilemspp();
+    }
+
+    private void addWiFiUsage() {
+        long onTimeMs = mStats.getWifiOnTime(mRawRealtime, mStatsType) / 1000;
+        long runningTimeMs = mStats.getGlobalWifiRunningTime(mRawRealtime, mStatsType) / 1000;
+        if (DEBUG) Log.d(TAG, "WIFI runningTime=" + runningTimeMs
+                + " app runningTime=" + mAppWifiRunning);
+        runningTimeMs -= mAppWifiRunning;
+        if (runningTimeMs < 0) runningTimeMs = 0;
+        double wifiPower = (onTimeMs * 0 /* TODO */
+                    * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ON)
+                + runningTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ON))
+                / (60*60*1000);
+        if (DEBUG && wifiPower != 0) {
+            Log.d(TAG, "Wifi: time=" + runningTimeMs + " power=" + makemAh(wifiPower));
+        }
+        if ((wifiPower+mWifiPower) != 0) {
+            BatterySipper bs = addEntry(BatterySipper.DrainType.WIFI, runningTimeMs,
+                    wifiPower + mWifiPower);
+            aggregateSippers(bs, mWifiSippers, "WIFI");
+        }
+    }
+
+    private void addIdleUsage() {
+        long idleTimeMs = (mTypeBatteryRealtime
+                - mStats.getScreenOnTime(mRawRealtime, mStatsType)) / 1000;
+        double idlePower = (idleTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_CPU_IDLE))
+                / (60*60*1000);
+        if (DEBUG && idlePower != 0) {
+            Log.d(TAG, "Idle: time=" + idleTimeMs + " power=" + makemAh(idlePower));
+        }
+        if (idlePower != 0) {
+            addEntry(BatterySipper.DrainType.IDLE, idleTimeMs, idlePower);
+        }
+    }
+
+    private void addBluetoothUsage() {
+        long btOnTimeMs = mStats.getBluetoothOnTime(mRawRealtime, mStatsType) / 1000;
+        double btPower = btOnTimeMs * mPowerProfile.getAveragePower(PowerProfile.POWER_BLUETOOTH_ON)
+                / (60*60*1000);
+        if (DEBUG && btPower != 0) {
+            Log.d(TAG, "Bluetooth: time=" + btOnTimeMs + " power=" + makemAh(btPower));
+        }
+        int btPingCount = mStats.getBluetoothPingCount();
+        double pingPower = (btPingCount
+                * mPowerProfile.getAveragePower(PowerProfile.POWER_BLUETOOTH_AT_CMD))
+                / (60*60*1000);
+        if (DEBUG && pingPower != 0) {
+            Log.d(TAG, "Bluetooth ping: count=" + btPingCount + " power=" + makemAh(pingPower));
+        }
+        btPower += pingPower;
+        if ((btPower+mBluetoothPower) != 0) {
+            BatterySipper bs = addEntry(BatterySipper.DrainType.BLUETOOTH, btOnTimeMs,
+                    btPower + mBluetoothPower);
+            aggregateSippers(bs, mBluetoothSippers, "Bluetooth");
+        }
+    }
+
+    private void addUserUsage() {
+        for (int i=0; i<mUserSippers.size(); i++) {
+            final int userId = mUserSippers.keyAt(i);
+            final List<BatterySipper> sippers = mUserSippers.valueAt(i);
+            Double userPower = mUserPower.get(userId);
+            double power = (userPower != null) ? userPower : 0.0;
+            BatterySipper bs = addEntry(BatterySipper.DrainType.USER, 0, power);
+            bs.userId = userId;
+            aggregateSippers(bs, sippers, "User");
+        }
+    }
+
+    /**
+     * Return estimated power (in mAs) of sending or receiving a packet with the mobile radio.
+     */
+    private double getMobilePowerPerPacket() {
+        final long MOBILE_BPS = 200000; // TODO: Extract average bit rates from system
+        final double MOBILE_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE)
+                / 3600;
+
+        final long mobileRx = mStats.getNetworkActivityPackets(NETWORK_MOBILE_RX_DATA, mStatsType);
+        final long mobileTx = mStats.getNetworkActivityPackets(NETWORK_MOBILE_TX_DATA, mStatsType);
+        final long mobileData = mobileRx + mobileTx;
+
+        final long radioDataUptimeMs
+                = mStats.getMobileRadioActiveTime(mRawRealtime, mStatsType) / 1000;
+        final double mobilePps = (mobileData != 0 && radioDataUptimeMs != 0)
+                ? (mobileData / (double)radioDataUptimeMs)
+                : (((double)MOBILE_BPS) / 8 / 2048);
+
+        return (MOBILE_POWER / mobilePps) / (60*60);
+    }
+
+    /**
+     * Return estimated power (in mAs) of keeping the radio up
+     */
+    private double getMobilePowerPerMs() {
+        return mPowerProfile.getAveragePower(PowerProfile.POWER_RADIO_ACTIVE) / (60*60*1000);
+    }
+
+    /**
+     * Return estimated power (in mAs) of sending a byte with the Wi-Fi radio.
+     */
+    private double getWifiPowerPerPacket() {
+        final long WIFI_BPS = 1000000; // TODO: Extract average bit rates from system
+        final double WIFI_POWER = mPowerProfile.getAveragePower(PowerProfile.POWER_WIFI_ACTIVE)
+                / 3600;
+        return (WIFI_POWER / (((double)WIFI_BPS) / 8 / 2048)) / (60*60);
+    }
+
+    private void processMiscUsage() {
+        addUserUsage();
+        addPhoneUsage();
+        addScreenUsage();
+        addWiFiUsage();
+        addBluetoothUsage();
+        addIdleUsage(); // Not including cellular idle power
+        // Don't compute radio usage if it's a wifi-only device
+        ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(
+                Context.CONNECTIVITY_SERVICE);
+        if (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE)) {
+            addRadioUsage();
+        }
+    }
+
+    private BatterySipper addEntry(DrainType drainType, long time, double power) {
+        mComputedPower += power;
+        return addEntryNoTotal(drainType, time, power);
+    }
+
+    private BatterySipper addEntryNoTotal(DrainType drainType, long time, double power) {
+        if (power > mMaxPower) mMaxPower = power;
+        BatterySipper bs = new BatterySipper(drainType, null, new double[] {power});
+        bs.usageTime = time;
+        mUsageList.add(bs);
+        return bs;
+    }
+
+    public List<BatterySipper> getUsageList() {
+        return mUsageList;
+    }
+
+    public List<BatterySipper> getMobilemsppList() {
+        return mMobilemsppList;
+    }
+
+    public long getStatsPeriod() { return mStatsPeriod; }
+
+    public int getStatsType() { return mStatsType; };
+
+    public double getMaxPower() { return mMaxPower; }
+
+    public double getTotalPower() { return mTotalPower; }
+
+    public double getComputedPower() { return mComputedPower; }
+
+    public double getMinDrainedPower() {
+        return mMinDrainedPower;
+    }
+
+    public double getMaxDrainedPower() {
+        return mMaxDrainedPower;
+    }
+
+    public long getBatteryTimeRemaining() { return mBatteryTimeRemaining; }
+
+    public long getChargeTimeRemaining() { return mChargeTimeRemaining; }
+
+    private void load() {
+        if (mBatteryInfo == null) {
+            return;
+        }
+        try {
+            byte[] data = mBatteryInfo.getStatistics();
+            Parcel parcel = Parcel.obtain();
+            parcel.unmarshall(data, 0, data.length);
+            parcel.setDataPosition(0);
+            BatteryStatsImpl stats = com.android.internal.os.BatteryStatsImpl.CREATOR
+                    .createFromParcel(parcel);
+            stats.distributeWorkLocked(BatteryStats.STATS_SINCE_CHARGED);
+            mStats = stats;
+        } catch (RemoteException e) {
+            Log.e(TAG, "RemoteException:", e);
+        }
+        if (mCollectBatteryBroadcast) {
+            mBatteryBroadcast = mContext.registerReceiver(null,
+                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+        }
+    }
+}
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 8728610..f63fa8a 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -16,12 +16,15 @@
 
 package com.android.internal.os;
 
+import static android.net.NetworkStats.UID_ALL;
 import static com.android.server.NetworkManagementSocketTagger.PROP_QTAGUID_ENABLED;
 
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothHeadset;
+import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.NetworkStats;
+import android.os.BadParcelableException;
 import android.os.BatteryManager;
 import android.os.BatteryStats;
 import android.os.FileUtils;
@@ -35,6 +38,7 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.WorkSource;
+import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.TelephonyManager;
@@ -44,24 +48,23 @@
 import android.util.Printer;
 import android.util.Slog;
 import android.util.SparseArray;
+import android.util.SparseBooleanArray;
+import android.util.SparseIntArray;
 import android.util.TimeUtils;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.net.NetworkStatsFactory;
+import com.android.internal.util.ArrayUtils;
 import com.android.internal.util.FastPrintWriter;
 import com.android.internal.util.JournaledFile;
-import com.google.android.collect.Sets;
 
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
-import java.io.FileReader;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -85,7 +88,7 @@
     private static final int MAGIC = 0xBA757475; // 'BATSTATS'
 
     // Current on-disk Parcel version
-    private static final int VERSION = 67 + (USE_OLD_HISTORY ? 1000 : 0);
+    private static final int VERSION = 104 + (USE_OLD_HISTORY ? 1000 : 0);
 
     // Maximum number of items we will record in the history.
     private static final int MAX_HISTORY_ITEMS = 2000;
@@ -141,6 +144,11 @@
     private BatteryCallback mCallback;
 
     /**
+     * Mapping isolated uids to the actual owning app uid.
+     */
+    final SparseIntArray mIsolatedUids = new SparseIntArray();
+
+    /**
      * The statistics we have collected organized by uids.
      */
     final SparseArray<BatteryStatsImpl.Uid> mUidStats =
@@ -167,13 +175,24 @@
 
     // These are the objects that will want to do something when the device
     // is unplugged from power.
-    final ArrayList<Unpluggable> mUnpluggables = new ArrayList<Unpluggable>();
+    final TimeBase mOnBatteryTimeBase = new TimeBase();
+
+    // These are the objects that will want to do something when the device
+    // is unplugged from power *and* the screen is off.
+    final TimeBase mOnBatteryScreenOffTimeBase = new TimeBase();
+
+    // Set to true when we want to distribute CPU across wakelocks for the next
+    // CPU update, even if we aren't currently running wake locks.
+    boolean mDistributeWakelockCpu;
 
     boolean mShuttingDown;
 
+    HashMap<String, SparseBooleanArray>[] mActiveEvents
+            = (HashMap<String, SparseBooleanArray>[]) new HashMap[HistoryItem.EVENT_COUNT];
+
     long mHistoryBaseTime;
     boolean mHaveBatteryLevel = false;
-    boolean mRecordingHistory = true;
+    boolean mRecordingHistory = false;
     int mNumHistoryItems;
 
     static final int MAX_HISTORY_BUFFER = 128*1024; // 128KB
@@ -182,9 +201,18 @@
     final HistoryItem mHistoryLastWritten = new HistoryItem();
     final HistoryItem mHistoryLastLastWritten = new HistoryItem();
     final HistoryItem mHistoryReadTmp = new HistoryItem();
+    final HistoryItem mHistoryAddTmp = new HistoryItem();
+    final HashMap<HistoryTag, Integer> mHistoryTagPool = new HashMap<HistoryTag, Integer>();
+    String[] mReadHistoryStrings;
+    int[] mReadHistoryUids;
+    int mReadHistoryChars;
+    int mNextHistoryTagIdx = 0;
+    int mNumHistoryTagChars = 0;
     int mHistoryBufferLastPos = -1;
     boolean mHistoryOverflow = false;
-    long mLastHistoryTime = 0;
+    long mLastHistoryElapsedRealtime = 0;
+    long mTrackRunningHistoryElapsedRealtime = 0;
+    long mTrackRunningHistoryUptime = 0;
 
     final HistoryItem mHistoryCur = new HistoryItem();
 
@@ -199,17 +227,15 @@
 
     int mStartCount;
 
-    long mBatteryUptime;
-    long mBatteryLastUptime;
-    long mBatteryRealtime;
-    long mBatteryLastRealtime;
+    long mStartClockTime;
 
     long mUptime;
     long mUptimeStart;
-    long mLastUptime;
     long mRealtime;
     long mRealtimeStart;
-    long mLastRealtime;
+
+    int mWakeLockNesting;
+    boolean mWakeLockImportant;
 
     boolean mScreenOn;
     StopwatchTimer mScreenOnTimer;
@@ -239,19 +265,33 @@
     final StopwatchTimer[] mPhoneDataConnectionsTimer =
             new StopwatchTimer[NUM_DATA_CONNECTION_TYPES];
 
-    final LongSamplingCounter[] mNetworkActivityCounters =
+    final LongSamplingCounter[] mNetworkByteActivityCounters =
+            new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
+    final LongSamplingCounter[] mNetworkPacketActivityCounters =
             new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
 
     boolean mWifiOn;
     StopwatchTimer mWifiOnTimer;
-    int mWifiOnUid = -1;
 
     boolean mGlobalWifiRunning;
     StopwatchTimer mGlobalWifiRunningTimer;
 
+    int mWifiState = -1;
+    final StopwatchTimer[] mWifiStateTimer = new StopwatchTimer[NUM_WIFI_STATES];
+
     boolean mBluetoothOn;
     StopwatchTimer mBluetoothOnTimer;
 
+    int mBluetoothState = -1;
+    final StopwatchTimer[] mBluetoothStateTimer = new StopwatchTimer[NUM_BLUETOOTH_STATES];
+
+    int mMobileRadioPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
+    StopwatchTimer mMobileRadioActiveTimer;
+    StopwatchTimer mMobileRadioActivePerAppTimer;
+    LongSamplingCounter mMobileRadioActiveAdjustedTime;
+    LongSamplingCounter mMobileRadioActiveUnknownTime;
+    LongSamplingCounter mMobileRadioActiveUnknownCount;
+
     /** Bluetooth headset object */
     BluetoothHeadset mBtHeadset;
 
@@ -261,20 +301,15 @@
      */
     boolean mOnBattery;
     boolean mOnBatteryInternal;
-    long mTrackBatteryPastUptime;
-    long mTrackBatteryUptimeStart;
-    long mTrackBatteryPastRealtime;
-    long mTrackBatteryRealtimeStart;
-
-    long mUnpluggedBatteryUptime;
-    long mUnpluggedBatteryRealtime;
 
     /*
      * These keep track of battery levels (1-100) at the last plug event and the last unplug event.
      */
     int mDischargeStartLevel;
     int mDischargeUnplugLevel;
+    int mDischargePlugLevel;
     int mDischargeCurrentLevel;
+    int mCurrentBatteryLevel;
     int mLowDischargeAmountSinceCharge;
     int mHighDischargeAmountSinceCharge;
     int mDischargeScreenOnUnplugLevel;
@@ -284,10 +319,19 @@
     int mDischargeAmountScreenOff;
     int mDischargeAmountScreenOffSinceCharge;
 
-    long mLastWriteTime = 0; // Milliseconds
+    static final int MAX_LEVEL_STEPS = 100;
 
-    private long mRadioDataUptime;
-    private long mRadioDataStart;
+    int mLastDischargeStepLevel;
+    long mLastDischargeStepTime;
+    int mNumDischargeStepDurations;
+    final long[] mDischargeStepDurations = new long[MAX_LEVEL_STEPS];
+
+    int mLastChargeStepLevel;
+    long mLastChargeStepTime;
+    int mNumChargeStepDurations;
+    final long[] mChargeStepDurations = new long[MAX_LEVEL_STEPS];
+
+    long mLastWriteTime = 0; // Milliseconds
 
     private int mBluetoothPingCount;
     private int mBluetoothPingStart = -1;
@@ -302,12 +346,21 @@
     private final HashMap<String, SamplingTimer> mKernelWakelockStats =
             new HashMap<String, SamplingTimer>();
 
-    public Map<String, ? extends SamplingTimer> getKernelWakelockStats() {
+    public Map<String, ? extends Timer> getKernelWakelockStats() {
         return mKernelWakelockStats;
     }
 
     private static int sKernelWakelockUpdateVersion = 0;
 
+    String mLastWakeupReason = null;
+    long mLastWakeupUptimeMs = 0;
+    private final HashMap<String, LongSamplingCounter> mWakeupReasonStats =
+            new HashMap<String, LongSamplingCounter>();
+
+    public Map<String, ? extends LongCounter> getWakeupReasonStats() {
+        return mWakeupReasonStats;
+    }
+
     private static final int[] PROC_WAKELOCKS_FORMAT = new int[] {
         Process.PROC_TAB_TERM|Process.PROC_OUT_STRING|                // 0: name
                               Process.PROC_QUOTES,
@@ -340,15 +393,18 @@
     private final Map<String, KernelWakelockStats> mProcWakelockFileStats =
             new HashMap<String, KernelWakelockStats>();
 
-    private HashMap<String, Integer> mUidCache = new HashMap<String, Integer>();
-
     private final NetworkStatsFactory mNetworkStatsFactory = new NetworkStatsFactory();
-    private NetworkStats mLastSnapshot;
+    private NetworkStats mCurMobileSnapshot = new NetworkStats(SystemClock.elapsedRealtime(), 50);
+    private NetworkStats mLastMobileSnapshot = new NetworkStats(SystemClock.elapsedRealtime(), 50);
+    private NetworkStats mCurWifiSnapshot = new NetworkStats(SystemClock.elapsedRealtime(), 50);
+    private NetworkStats mLastWifiSnapshot = new NetworkStats(SystemClock.elapsedRealtime(), 50);
+    private NetworkStats mTmpNetworkStats;
+    private final NetworkStats.Entry mTmpNetworkStatsEntry = new NetworkStats.Entry();
 
     @GuardedBy("this")
-    private HashSet<String> mMobileIfaces = Sets.newHashSet();
+    private String[] mMobileIfaces = new String[0];
     @GuardedBy("this")
-    private HashSet<String> mWifiIfaces = Sets.newHashSet();
+    private String[] mWifiIfaces = new String[0];
 
     // For debugging
     public BatteryStatsImpl() {
@@ -356,35 +412,228 @@
         mHandler = null;
     }
 
-    public static interface Unpluggable {
-        void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime);
-        void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime);
+    public static interface TimeBaseObs {
+        void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime);
+        void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime);
+    }
+
+    static class TimeBase {
+        private final ArrayList<TimeBaseObs> mObservers = new ArrayList<TimeBaseObs>();
+
+        private long mUptime;
+        private long mRealtime;
+
+        private boolean mRunning;
+
+        private long mPastUptime;
+        private long mUptimeStart;
+        private long mPastRealtime;
+        private long mRealtimeStart;
+        private long mUnpluggedUptime;
+        private long mUnpluggedRealtime;
+
+        public void dump(PrintWriter pw, String prefix) {
+            StringBuilder sb = new StringBuilder(128);
+            pw.print(prefix); pw.print("mRunning="); pw.println(mRunning);
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("mUptime=");
+                    formatTimeMs(sb, mUptime / 1000);
+            pw.println(sb.toString());
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("mRealtime=");
+                    formatTimeMs(sb, mRealtime / 1000);
+            pw.println(sb.toString());
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("mPastUptime=");
+                    formatTimeMs(sb, mPastUptime / 1000); sb.append("mUptimeStart=");
+                    formatTimeMs(sb, mUptimeStart / 1000);
+                    sb.append("mUnpluggedUptime="); formatTimeMs(sb, mUnpluggedUptime / 1000);
+            pw.println(sb.toString());
+            sb.setLength(0);
+            sb.append(prefix);
+                    sb.append("mPastRealtime=");
+                    formatTimeMs(sb, mPastRealtime / 1000); sb.append("mRealtimeStart=");
+                    formatTimeMs(sb, mRealtimeStart / 1000);
+                    sb.append("mUnpluggedRealtime="); formatTimeMs(sb, mUnpluggedRealtime / 1000);
+            pw.println(sb.toString());
+        }
+
+        public void add(TimeBaseObs observer) {
+            mObservers.add(observer);
+        }
+
+        public void remove(TimeBaseObs observer) {
+            if (!mObservers.remove(observer)) {
+                Slog.wtf(TAG, "Removed unknown observer: " + observer);
+            }
+        }
+
+        public void init(long uptime, long realtime) {
+            mRealtime = 0;
+            mUptime = 0;
+            mPastUptime = 0;
+            mPastRealtime = 0;
+            mUptimeStart = uptime;
+            mRealtimeStart = realtime;
+            mUnpluggedUptime = getUptime(mUptimeStart);
+            mUnpluggedRealtime = getRealtime(mRealtimeStart);
+        }
+
+        public void reset(long uptime, long realtime) {
+            if (!mRunning) {
+                mPastUptime = 0;
+                mPastRealtime = 0;
+            } else {
+                mUptimeStart = uptime;
+                mRealtimeStart = realtime;
+                mUnpluggedUptime = getUptime(uptime);
+                mUnpluggedRealtime = getRealtime(realtime);
+            }
+        }
+
+        public long computeUptime(long curTime, int which) {
+            switch (which) {
+                case STATS_SINCE_CHARGED:
+                    return mUptime + getUptime(curTime);
+                case STATS_CURRENT:
+                    return getUptime(curTime);
+                case STATS_SINCE_UNPLUGGED:
+                    return getUptime(curTime) - mUnpluggedUptime;
+            }
+            return 0;
+        }
+
+        public long computeRealtime(long curTime, int which) {
+            switch (which) {
+                case STATS_SINCE_CHARGED:
+                    return mRealtime + getRealtime(curTime);
+                case STATS_CURRENT:
+                    return getRealtime(curTime);
+                case STATS_SINCE_UNPLUGGED:
+                    return getRealtime(curTime) - mUnpluggedRealtime;
+            }
+            return 0;
+        }
+
+        public long getUptime(long curTime) {
+            long time = mPastUptime;
+            if (mRunning) {
+                time += curTime - mUptimeStart;
+            }
+            return time;
+        }
+
+        public long getRealtime(long curTime) {
+            long time = mPastRealtime;
+            if (mRunning) {
+                time += curTime - mRealtimeStart;
+            }
+            return time;
+        }
+
+        public long getUptimeStart() {
+            return mUptimeStart;
+        }
+
+        public long getRealtimeStart() {
+            return mRealtimeStart;
+        }
+
+        public boolean isRunning() {
+            return mRunning;
+        }
+
+        public boolean setRunning(boolean running, long uptime, long realtime) {
+            if (mRunning != running) {
+                mRunning = running;
+                if (running) {
+                    mUptimeStart = uptime;
+                    mRealtimeStart = realtime;
+                    long batteryUptime = mUnpluggedUptime = getUptime(uptime);
+                    long batteryRealtime = mUnpluggedRealtime = getRealtime(realtime);
+
+                    for (int i = mObservers.size() - 1; i >= 0; i--) {
+                        mObservers.get(i).onTimeStarted(realtime, batteryUptime, batteryRealtime);
+                    }
+                } else {
+                    mPastUptime += uptime - mUptimeStart;
+                    mPastRealtime += realtime - mRealtimeStart;
+
+                    long batteryUptime = getUptime(uptime);
+                    long batteryRealtime = getRealtime(realtime);
+
+                    for (int i = mObservers.size() - 1; i >= 0; i--) {
+                        mObservers.get(i).onTimeStopped(realtime, batteryUptime, batteryRealtime);
+                    }
+                }
+                return true;
+            }
+            return false;
+        }
+
+        public void readSummaryFromParcel(Parcel in) {
+            mUptime = in.readLong();
+            mRealtime = in.readLong();
+        }
+
+        public void writeSummaryToParcel(Parcel out, long uptime, long realtime) {
+            out.writeLong(computeUptime(uptime, STATS_SINCE_CHARGED));
+            out.writeLong(computeRealtime(realtime, STATS_SINCE_CHARGED));
+        }
+
+        public void readFromParcel(Parcel in) {
+            mRunning = false;
+            mUptime = in.readLong();
+            mPastUptime = in.readLong();
+            mUptimeStart = in.readLong();
+            mRealtime = in.readLong();
+            mPastRealtime = in.readLong();
+            mRealtimeStart = in.readLong();
+            mUnpluggedUptime = in.readLong();
+            mUnpluggedRealtime = in.readLong();
+        }
+
+        public void writeToParcel(Parcel out, long uptime, long realtime) {
+            final long runningUptime = getUptime(uptime);
+            final long runningRealtime = getRealtime(realtime);
+            out.writeLong(mUptime);
+            out.writeLong(runningUptime);
+            out.writeLong(mUptimeStart);
+            out.writeLong(mRealtime);
+            out.writeLong(runningRealtime);
+            out.writeLong(mRealtimeStart);
+            out.writeLong(mUnpluggedUptime);
+            out.writeLong(mUnpluggedRealtime);
+        }
     }
 
     /**
      * State for keeping track of counting information.
      */
-    public static class Counter extends BatteryStats.Counter implements Unpluggable {
+    public static class Counter extends BatteryStats.Counter implements TimeBaseObs {
         final AtomicInteger mCount = new AtomicInteger();
-        final ArrayList<Unpluggable> mUnpluggables;
+        final TimeBase mTimeBase;
         int mLoadedCount;
         int mLastCount;
         int mUnpluggedCount;
         int mPluggedCount;
 
-        Counter(ArrayList<Unpluggable> unpluggables, Parcel in) {
-            mUnpluggables = unpluggables;
+        Counter(TimeBase timeBase, Parcel in) {
+            mTimeBase = timeBase;
             mPluggedCount = in.readInt();
             mCount.set(mPluggedCount);
             mLoadedCount = in.readInt();
             mLastCount = 0;
             mUnpluggedCount = in.readInt();
-            unpluggables.add(this);
+            timeBase.add(this);
         }
 
-        Counter(ArrayList<Unpluggable> unpluggables) {
-            mUnpluggables = unpluggables;
-            unpluggables.add(this);
+        Counter(TimeBase timeBase) {
+            mTimeBase = timeBase;
+            timeBase.add(this);
         }
 
         public void writeToParcel(Parcel out) {
@@ -393,12 +642,12 @@
             out.writeInt(mUnpluggedCount);
         }
 
-        public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) {
             mUnpluggedCount = mPluggedCount;
             mCount.set(mPluggedCount);
         }
 
-        public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
             mPluggedCount = mCount.get();
         }
 
@@ -420,16 +669,11 @@
 
         @Override
         public int getCountLocked(int which) {
-            int val;
-            if (which == STATS_LAST) {
-                val = mLastCount;
-            } else {
-                val = mCount.get();
-                if (which == STATS_SINCE_UNPLUGGED) {
-                    val -= mUnpluggedCount;
-                } else if (which != STATS_SINCE_CHARGED) {
-                    val -= mLoadedCount;
-                }
+            int val = mCount.get();
+            if (which == STATS_SINCE_UNPLUGGED) {
+                val -= mUnpluggedCount;
+            } else if (which != STATS_SINCE_CHARGED) {
+                val -= mLoadedCount;
             }
 
             return val;
@@ -458,7 +702,7 @@
         }
 
         void detach() {
-            mUnpluggables.remove(this);
+            mTimeBase.remove(this);
         }
 
         void writeSummaryFromParcelLocked(Parcel out) {
@@ -475,12 +719,12 @@
     }
 
     public static class SamplingCounter extends Counter {
-        SamplingCounter(ArrayList<Unpluggable> unpluggables, Parcel in) {
-            super(unpluggables, in);
+        SamplingCounter(TimeBase timeBase, Parcel in) {
+            super(timeBase, in);
         }
 
-        SamplingCounter(ArrayList<Unpluggable> unpluggables) {
-            super(unpluggables);
+        SamplingCounter(TimeBase timeBase) {
+            super(timeBase);
         }
 
         public void addCountAtomic(long count) {
@@ -488,27 +732,27 @@
         }
     }
 
-    public static class LongSamplingCounter implements Unpluggable {
-        final ArrayList<Unpluggable> mUnpluggables;
+    public static class LongSamplingCounter extends LongCounter implements TimeBaseObs {
+        final TimeBase mTimeBase;
         long mCount;
         long mLoadedCount;
         long mLastCount;
         long mUnpluggedCount;
         long mPluggedCount;
 
-        LongSamplingCounter(ArrayList<Unpluggable> unpluggables, Parcel in) {
-            mUnpluggables = unpluggables;
+        LongSamplingCounter(TimeBase timeBase, Parcel in) {
+            mTimeBase = timeBase;
             mPluggedCount = in.readLong();
             mCount = mPluggedCount;
             mLoadedCount = in.readLong();
             mLastCount = 0;
             mUnpluggedCount = in.readLong();
-            unpluggables.add(this);
+            timeBase.add(this);
         }
 
-        LongSamplingCounter(ArrayList<Unpluggable> unpluggables) {
-            mUnpluggables = unpluggables;
-            unpluggables.add(this);
+        LongSamplingCounter(TimeBase timeBase) {
+            mTimeBase = timeBase;
+            timeBase.add(this);
         }
 
         public void writeToParcel(Parcel out) {
@@ -518,32 +762,35 @@
         }
 
         @Override
-        public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) {
             mUnpluggedCount = mPluggedCount;
             mCount = mPluggedCount;
         }
 
         @Override
-        public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
             mPluggedCount = mCount;
         }
 
         public long getCountLocked(int which) {
-            long val;
-            if (which == STATS_LAST) {
-                val = mLastCount;
-            } else {
-                val = mCount;
-                if (which == STATS_SINCE_UNPLUGGED) {
-                    val -= mUnpluggedCount;
-                } else if (which != STATS_SINCE_CHARGED) {
-                    val -= mLoadedCount;
-                }
+            long val = mCount;
+            if (which == STATS_SINCE_UNPLUGGED) {
+                val -= mUnpluggedCount;
+            } else if (which != STATS_SINCE_CHARGED) {
+                val -= mLoadedCount;
             }
 
             return val;
         }
 
+        @Override
+        public void logState(Printer pw, String prefix) {
+            pw.println(prefix + "mCount=" + mCount
+                    + " mLoadedCount=" + mLoadedCount + " mLastCount=" + mLastCount
+                    + " mUnpluggedCount=" + mUnpluggedCount
+                    + " mPluggedCount=" + mPluggedCount);
+        }
+
         void addCountLocked(long count) {
             mCount += count;
         }
@@ -560,7 +807,7 @@
         }
 
         void detach() {
-            mUnpluggables.remove(this);
+            mTimeBase.remove(this);
         }
 
         void writeSummaryFromParcelLocked(Parcel out) {
@@ -578,9 +825,9 @@
     /**
      * State for keeping track of timing information.
      */
-    public static abstract class Timer extends BatteryStats.Timer implements Unpluggable {
+    public static abstract class Timer extends BatteryStats.Timer implements TimeBaseObs {
         final int mType;
-        final ArrayList<Unpluggable> mUnpluggables;
+        final TimeBase mTimeBase;
 
         int mCount;
         int mLoadedCount;
@@ -619,12 +866,12 @@
         /**
          * Constructs from a parcel.
          * @param type
-         * @param unpluggables
+         * @param timeBase
          * @param in
          */
-        Timer(int type, ArrayList<Unpluggable> unpluggables, Parcel in) {
+        Timer(int type, TimeBase timeBase, Parcel in) {
             mType = type;
-            mUnpluggables = unpluggables;
+            mTimeBase = timeBase;
 
             mCount = in.readInt();
             mLoadedCount = in.readInt();
@@ -634,13 +881,13 @@
             mLoadedTime = in.readLong();
             mLastTime = 0;
             mUnpluggedTime = in.readLong();
-            unpluggables.add(this);
+            timeBase.add(this);
         }
 
-        Timer(int type, ArrayList<Unpluggable> unpluggables) {
+        Timer(int type, TimeBase timeBase) {
             mType = type;
-            mUnpluggables = unpluggables;
-            unpluggables.add(this);
+            mTimeBase = timeBase;
+            timeBase.add(this);
         }
 
         protected abstract long computeRunTimeLocked(long curBatteryRealtime);
@@ -651,7 +898,7 @@
          * Clear state of this timer.  Returns true if the timer is inactive
          * so can be completely dropped.
          */
-        boolean reset(BatteryStatsImpl stats, boolean detachIfReset) {
+        boolean reset(boolean detachIfReset) {
             mTotalTime = mLoadedTime = mLastTime = 0;
             mCount = mLoadedCount = mLastCount = 0;
             if (detachIfReset) {
@@ -661,25 +908,25 @@
         }
 
         void detach() {
-            mUnpluggables.remove(this);
+            mTimeBase.remove(this);
         }
 
-        public void writeToParcel(Parcel out, long batteryRealtime) {
+        public void writeToParcel(Parcel out, long elapsedRealtimeUs) {
             out.writeInt(mCount);
             out.writeInt(mLoadedCount);
             out.writeInt(mUnpluggedCount);
-            out.writeLong(computeRunTimeLocked(batteryRealtime));
+            out.writeLong(computeRunTimeLocked(mTimeBase.getRealtime(elapsedRealtimeUs)));
             out.writeLong(mLoadedTime);
             out.writeLong(mUnpluggedTime);
         }
 
-        public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStarted(long elapsedRealtime, long timeBaseUptime, long baseRealtime) {
             if (DEBUG && mType < 0) {
-                Log.v(TAG, "unplug #" + mType + ": realtime=" + batteryRealtime
+                Log.v(TAG, "unplug #" + mType + ": realtime=" + baseRealtime
                         + " old mUnpluggedTime=" + mUnpluggedTime
                         + " old mUnpluggedCount=" + mUnpluggedCount);
             }
-            mUnpluggedTime = computeRunTimeLocked(batteryRealtime);
+            mUnpluggedTime = computeRunTimeLocked(baseRealtime);
             mUnpluggedCount = mCount;
             if (DEBUG && mType < 0) {
                 Log.v(TAG, "unplug #" + mType
@@ -688,12 +935,12 @@
             }
         }
 
-        public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
             if (DEBUG && mType < 0) {
-                Log.v(TAG, "plug #" + mType + ": realtime=" + batteryRealtime
+                Log.v(TAG, "plug #" + mType + ": realtime=" + baseRealtime
                         + " old mTotalTime=" + mTotalTime);
             }
-            mTotalTime = computeRunTimeLocked(batteryRealtime);
+            mTotalTime = computeRunTimeLocked(baseRealtime);
             mCount = computeCurrentCountLocked();
             if (DEBUG && mType < 0) {
                 Log.v(TAG, "plug #" + mType
@@ -707,29 +954,23 @@
          * @param out the Parcel to be written to.
          * @param timer a Timer, or null.
          */
-        public static void writeTimerToParcel(Parcel out, Timer timer,
-                long batteryRealtime) {
+        public static void writeTimerToParcel(Parcel out, Timer timer, long elapsedRealtimeUs) {
             if (timer == null) {
                 out.writeInt(0); // indicates null
                 return;
             }
             out.writeInt(1); // indicates non-null
 
-            timer.writeToParcel(out, batteryRealtime);
+            timer.writeToParcel(out, elapsedRealtimeUs);
         }
 
         @Override
-        public long getTotalTimeLocked(long batteryRealtime, int which) {
-            long val;
-            if (which == STATS_LAST) {
-                val = mLastTime;
-            } else {
-                val = computeRunTimeLocked(batteryRealtime);
-                if (which == STATS_SINCE_UNPLUGGED) {
-                    val -= mUnpluggedTime;
-                } else if (which != STATS_SINCE_CHARGED) {
-                    val -= mLoadedTime;
-                }
+        public long getTotalTimeLocked(long elapsedRealtimeUs, int which) {
+            long val = computeRunTimeLocked(mTimeBase.getRealtime(elapsedRealtimeUs));
+            if (which == STATS_SINCE_UNPLUGGED) {
+                val -= mUnpluggedTime;
+            } else if (which != STATS_SINCE_CHARGED) {
+                val -= mLoadedTime;
             }
 
             return val;
@@ -737,16 +978,11 @@
 
         @Override
         public int getCountLocked(int which) {
-            int val;
-            if (which == STATS_LAST) {
-                val = mLastCount;
-            } else {
-                val = computeCurrentCountLocked();
-                if (which == STATS_SINCE_UNPLUGGED) {
-                    val -= mUnpluggedCount;
-                } else if (which != STATS_SINCE_CHARGED) {
-                    val -= mLoadedCount;
-                }
+            int val = computeCurrentCountLocked();
+            if (which == STATS_SINCE_UNPLUGGED) {
+                val -= mUnpluggedCount;
+            } else if (which != STATS_SINCE_CHARGED) {
+                val -= mLoadedCount;
             }
 
             return val;
@@ -763,16 +999,15 @@
         }
 
 
-        void writeSummaryFromParcelLocked(Parcel out, long batteryRealtime) {
-            long runTime = computeRunTimeLocked(batteryRealtime);
-            // Divide by 1000 for backwards compatibility
-            out.writeLong((runTime + 500) / 1000);
+        void writeSummaryFromParcelLocked(Parcel out, long elapsedRealtimeUs) {
+            long runTime = computeRunTimeLocked(mTimeBase.getRealtime(elapsedRealtimeUs));
+            out.writeLong(runTime);
             out.writeInt(mCount);
         }
 
         void readSummaryFromParcelLocked(Parcel in) {
             // Multiply by 1000 for backwards compatibility
-            mTotalTime = mLoadedTime = in.readLong() * 1000;
+            mTotalTime = mLoadedTime = in.readLong();
             mLastTime = 0;
             mUnpluggedTime = mTotalTime;
             mCount = mLoadedCount = in.readInt();
@@ -809,7 +1044,7 @@
         /**
          * Whether we are currently in a discharge cycle.
          */
-        boolean mInDischarge;
+        boolean mTimeBaseRunning;
 
         /**
          * Whether we are currently recording reported values.
@@ -821,21 +1056,20 @@
          */
         int mUpdateVersion;
 
-        SamplingTimer(ArrayList<Unpluggable> unpluggables, boolean inDischarge, Parcel in) {
-            super(0, unpluggables, in);
+        SamplingTimer(TimeBase timeBase, Parcel in) {
+            super(0, timeBase, in);
             mCurrentReportedCount = in.readInt();
             mUnpluggedReportedCount = in.readInt();
             mCurrentReportedTotalTime = in.readLong();
             mUnpluggedReportedTotalTime = in.readLong();
             mTrackingReportedValues = in.readInt() == 1;
-            mInDischarge = inDischarge;
+            mTimeBaseRunning = timeBase.isRunning();
         }
 
-        SamplingTimer(ArrayList<Unpluggable> unpluggables, boolean inDischarge,
-                boolean trackReportedValues) {
-            super(0, unpluggables);
+        SamplingTimer(TimeBase timeBase, boolean trackReportedValues) {
+            super(0, timeBase);
             mTrackingReportedValues = trackReportedValues;
-            mInDischarge = inDischarge;
+            mTimeBaseRunning = timeBase.isRunning();
         }
 
         public void setStale() {
@@ -853,7 +1087,7 @@
         }
 
         public void updateCurrentReportedCount(int count) {
-            if (mInDischarge && mUnpluggedReportedCount == 0) {
+            if (mTimeBaseRunning && mUnpluggedReportedCount == 0) {
                 // Updating the reported value for the first time.
                 mUnpluggedReportedCount = count;
                 // If we are receiving an update update mTrackingReportedValues;
@@ -863,7 +1097,7 @@
         }
 
         public void updateCurrentReportedTotalTime(long totalTime) {
-            if (mInDischarge && mUnpluggedReportedTotalTime == 0) {
+            if (mTimeBaseRunning && mUnpluggedReportedTotalTime == 0) {
                 // Updating the reported value for the first time.
                 mUnpluggedReportedTotalTime = totalTime;
                 // If we are receiving an update update mTrackingReportedValues;
@@ -872,18 +1106,18 @@
             mCurrentReportedTotalTime = totalTime;
         }
 
-        public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
-            super.unplug(elapsedRealtime, batteryUptime, batteryRealtime);
+        public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) {
+            super.onTimeStarted(elapsedRealtime, baseUptime, baseRealtime);
             if (mTrackingReportedValues) {
                 mUnpluggedReportedTotalTime = mCurrentReportedTotalTime;
                 mUnpluggedReportedCount = mCurrentReportedCount;
             }
-            mInDischarge = true;
+            mTimeBaseRunning = true;
         }
 
-        public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
-            super.plug(elapsedRealtime, batteryUptime, batteryRealtime);
-            mInDischarge = false;
+        public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
+            super.onTimeStopped(elapsedRealtime, baseUptime, baseRealtime);
+            mTimeBaseRunning = false;
         }
 
         public void logState(Printer pw, String prefix) {
@@ -895,17 +1129,17 @@
         }
 
         protected long computeRunTimeLocked(long curBatteryRealtime) {
-            return mTotalTime + (mInDischarge && mTrackingReportedValues
+            return mTotalTime + (mTimeBaseRunning && mTrackingReportedValues
                     ? mCurrentReportedTotalTime - mUnpluggedReportedTotalTime : 0);
         }
 
         protected int computeCurrentCountLocked() {
-            return mCount + (mInDischarge && mTrackingReportedValues
+            return mCount + (mTimeBaseRunning && mTrackingReportedValues
                     ? mCurrentReportedCount - mUnpluggedReportedCount : 0);
         }
 
-        public void writeToParcel(Parcel out, long batteryRealtime) {
-            super.writeToParcel(out, batteryRealtime);
+        public void writeToParcel(Parcel out, long elapsedRealtimeUs) {
+            super.writeToParcel(out, elapsedRealtimeUs);
             out.writeInt(mCurrentReportedCount);
             out.writeInt(mUnpluggedReportedCount);
             out.writeLong(mCurrentReportedTotalTime);
@@ -913,8 +1147,8 @@
             out.writeInt(mTrackingReportedValues ? 1 : 0);
         }
 
-        boolean reset(BatteryStatsImpl stats, boolean detachIfReset) {
-            super.reset(stats, detachIfReset);
+        boolean reset(boolean detachIfReset) {
+            super.reset(detachIfReset);
             setStale();
             return true;
         }
@@ -956,45 +1190,43 @@
          */
         boolean mInDischarge;
 
-        BatchTimer(Uid uid, int type, ArrayList<Unpluggable> unpluggables,
-                boolean inDischarge, Parcel in) {
-            super(type, unpluggables, in);
+        BatchTimer(Uid uid, int type, TimeBase timeBase, Parcel in) {
+            super(type, timeBase, in);
             mUid = uid;
             mLastAddedTime = in.readLong();
             mLastAddedDuration = in.readLong();
-            mInDischarge = inDischarge;
+            mInDischarge = timeBase.isRunning();
         }
 
-        BatchTimer(Uid uid, int type, ArrayList<Unpluggable> unpluggables,
-                boolean inDischarge) {
-            super(type, unpluggables);
+        BatchTimer(Uid uid, int type, TimeBase timeBase) {
+            super(type, timeBase);
             mUid = uid;
-            mInDischarge = inDischarge;
+            mInDischarge = timeBase.isRunning();
         }
 
         @Override
-        public void writeToParcel(Parcel out, long batteryRealtime) {
-            super.writeToParcel(out, batteryRealtime);
+        public void writeToParcel(Parcel out, long elapsedRealtimeUs) {
+            super.writeToParcel(out, elapsedRealtimeUs);
             out.writeLong(mLastAddedTime);
             out.writeLong(mLastAddedDuration);
         }
 
         @Override
-        public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
             recomputeLastDuration(SystemClock.elapsedRealtime() * 1000, false);
             mInDischarge = false;
-            super.plug(elapsedRealtime, batteryUptime, batteryRealtime);
+            super.onTimeStopped(elapsedRealtime, baseUptime, baseRealtime);
         }
 
         @Override
-        public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) {
             recomputeLastDuration(elapsedRealtime, false);
             mInDischarge = true;
             // If we are still within the last added duration, then re-added whatever remains.
             if (mLastAddedTime == elapsedRealtime) {
                 mTotalTime += mLastAddedDuration;
             }
-            super.unplug(elapsedRealtime, batteryUptime, batteryRealtime);
+            super.onTimeStarted(elapsedRealtime, baseUptime, baseRealtime);
         }
 
         @Override
@@ -1060,11 +1292,11 @@
         }
 
         @Override
-        boolean reset(BatteryStatsImpl stats, boolean detachIfReset) {
+        boolean reset(boolean detachIfReset) {
             final long now = SystemClock.elapsedRealtime() * 1000;
             recomputeLastDuration(now, true);
             boolean stillActive = mLastAddedTime == now;
-            super.reset(stats, !stillActive && detachIfReset);
+            super.reset(!stillActive && detachIfReset);
             return !stillActive;
         }
     }
@@ -1100,16 +1332,16 @@
         boolean mInList;
 
         StopwatchTimer(Uid uid, int type, ArrayList<StopwatchTimer> timerPool,
-                ArrayList<Unpluggable> unpluggables, Parcel in) {
-            super(type, unpluggables, in);
+                TimeBase timeBase, Parcel in) {
+            super(type, timeBase, in);
             mUid = uid;
             mTimerPool = timerPool;
             mUpdateTime = in.readLong();
         }
 
         StopwatchTimer(Uid uid, int type, ArrayList<StopwatchTimer> timerPool,
-                ArrayList<Unpluggable> unpluggables) {
-            super(type, unpluggables);
+                TimeBase timeBase) {
+            super(type, timeBase);
             mUid = uid;
             mTimerPool = timerPool;
         }
@@ -1118,18 +1350,18 @@
             mTimeout = timeout;
         }
 
-        public void writeToParcel(Parcel out, long batteryRealtime) {
-            super.writeToParcel(out, batteryRealtime);
+        public void writeToParcel(Parcel out, long elapsedRealtimeUs) {
+            super.writeToParcel(out, elapsedRealtimeUs);
             out.writeLong(mUpdateTime);
         }
 
-        public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+        public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
             if (mNesting > 0) {
                 if (DEBUG && mType < 0) {
                     Log.v(TAG, "old mUpdateTime=" + mUpdateTime);
                 }
-                super.plug(elapsedRealtime, batteryUptime, batteryRealtime);
-                mUpdateTime = batteryRealtime;
+                super.onTimeStopped(elapsedRealtime, baseUptime, baseRealtime);
+                mUpdateTime = baseRealtime;
                 if (DEBUG && mType < 0) {
                     Log.v(TAG, "new mUpdateTime=" + mUpdateTime);
                 }
@@ -1142,14 +1374,14 @@
                     + " mAcquireTime=" + mAcquireTime);
         }
 
-        void startRunningLocked(BatteryStatsImpl stats) {
+        void startRunningLocked(long elapsedRealtimeMs) {
             if (mNesting++ == 0) {
-                mUpdateTime = stats.getBatteryRealtimeLocked(
-                        SystemClock.elapsedRealtime() * 1000);
+                final long batteryRealtime = mTimeBase.getRealtime(elapsedRealtimeMs * 1000);
+                mUpdateTime = batteryRealtime;
                 if (mTimerPool != null) {
                     // Accumulate time to all currently active timers before adding
                     // this new one to the pool.
-                    refreshTimersLocked(stats, mTimerPool);
+                    refreshTimersLocked(batteryRealtime, mTimerPool, null);
                     // Add this timer to the active pool
                     mTimerPool.add(this);
                 }
@@ -1168,21 +1400,39 @@
             return mNesting > 0;
         }
 
-        void stopRunningLocked(BatteryStatsImpl stats) {
+        long checkpointRunningLocked(long elapsedRealtimeMs) {
+            if (mNesting > 0) {
+                // We are running...
+                final long batteryRealtime = mTimeBase.getRealtime(elapsedRealtimeMs * 1000);
+                if (mTimerPool != null) {
+                    return refreshTimersLocked(batteryRealtime, mTimerPool, this);
+                }
+                final long heldTime = batteryRealtime - mUpdateTime;
+                mUpdateTime = batteryRealtime;
+                mTotalTime += heldTime;
+                return heldTime;
+            }
+            return 0;
+        }
+
+        long getLastUpdateTimeMs() {
+            return mUpdateTime;
+        }
+
+        void stopRunningLocked(long elapsedRealtimeMs) {
             // Ignore attempt to stop a timer that isn't running
             if (mNesting == 0) {
                 return;
             }
             if (--mNesting == 0) {
+                final long batteryRealtime = mTimeBase.getRealtime(elapsedRealtimeMs * 1000);
                 if (mTimerPool != null) {
                     // Accumulate time to all active counters, scaled by the total
                     // active in the pool, before taking this one out of the pool.
-                    refreshTimersLocked(stats, mTimerPool);
+                    refreshTimersLocked(batteryRealtime, mTimerPool, null);
                     // Remove this timer from the active pool
                     mTimerPool.remove(this);
                 } else {
-                    final long realtime = SystemClock.elapsedRealtime() * 1000;
-                    final long batteryRealtime = stats.getBatteryRealtimeLocked(realtime);
                     mNesting = 1;
                     mTotalTime = computeRunTimeLocked(batteryRealtime);
                     mNesting = 0;
@@ -1204,19 +1454,23 @@
 
         // Update the total time for all other running Timers with the same type as this Timer
         // due to a change in timer count
-        private static void refreshTimersLocked(final BatteryStatsImpl stats,
-                final ArrayList<StopwatchTimer> pool) {
-            final long realtime = SystemClock.elapsedRealtime() * 1000;
-            final long batteryRealtime = stats.getBatteryRealtimeLocked(realtime);
+        private static long refreshTimersLocked(long batteryRealtime,
+                final ArrayList<StopwatchTimer> pool, StopwatchTimer self) {
+            long selfTime = 0;
             final int N = pool.size();
             for (int i=N-1; i>= 0; i--) {
                 final StopwatchTimer t = pool.get(i);
                 long heldTime = batteryRealtime - t.mUpdateTime;
                 if (heldTime > 0) {
-                    t.mTotalTime += heldTime / N;
+                    final long myTime = heldTime / N;
+                    if (t == self) {
+                        selfTime = myTime;
+                    }
+                    t.mTotalTime += myTime;
                 }
                 t.mUpdateTime = batteryRealtime;
             }
+            return selfTime;
         }
 
         @Override
@@ -1235,12 +1489,11 @@
             return mCount;
         }
 
-        boolean reset(BatteryStatsImpl stats, boolean detachIfReset) {
+        boolean reset(boolean detachIfReset) {
             boolean canDetach = mNesting <= 0;
-            super.reset(stats, canDetach && detachIfReset);
+            super.reset(canDetach && detachIfReset);
             if (mNesting > 0) {
-                mUpdateTime = stats.getBatteryRealtimeLocked(
-                        SystemClock.elapsedRealtime() * 1000);
+                mUpdateTime = mTimeBase.getRealtime(SystemClock.elapsedRealtime() * 1000);
             }
             mAcquireTime = mTotalTime;
             return canDetach;
@@ -1259,6 +1512,19 @@
         }
     }
 
+    /*
+     * Get the wakeup reason counter, and create a new one if one
+     * doesn't already exist.
+     */
+    public LongSamplingCounter getWakeupReasonCounterLocked(String name) {
+        LongSamplingCounter counter = mWakeupReasonStats.get(name);
+        if (counter == null) {
+            counter = new LongSamplingCounter(mOnBatteryScreenOffTimeBase);
+            mWakeupReasonStats.put(name, counter);
+        }
+        return counter;
+    }
+
     private final Map<String, KernelWakelockStats> readKernelWakelockStats() {
 
         FileInputStream is;
@@ -1403,51 +1669,12 @@
     public SamplingTimer getKernelWakelockTimerLocked(String name) {
         SamplingTimer kwlt = mKernelWakelockStats.get(name);
         if (kwlt == null) {
-            kwlt = new SamplingTimer(mUnpluggables, mOnBatteryInternal,
-                    true /* track reported values */);
+            kwlt = new SamplingTimer(mOnBatteryScreenOffTimeBase, true /* track reported values */);
             mKernelWakelockStats.put(name, kwlt);
         }
         return kwlt;
     }
 
-    /**
-     * Radio uptime in microseconds when transferring data. This value is very approximate.
-     * @return
-     */
-    private long getCurrentRadioDataUptime() {
-        try {
-            File awakeTimeFile = new File("/sys/devices/virtual/net/rmnet0/awake_time_ms");
-            if (!awakeTimeFile.exists()) return 0;
-            BufferedReader br = new BufferedReader(new FileReader(awakeTimeFile));
-            String line = br.readLine();
-            br.close();
-            return Long.parseLong(line) * 1000;
-        } catch (NumberFormatException nfe) {
-            // Nothing
-        } catch (IOException ioe) {
-            // Nothing
-        }
-        return 0;
-    }
-
-    /**
-     * @deprecated use getRadioDataUptime
-     */
-    public long getRadioDataUptimeMs() {
-        return getRadioDataUptime() / 1000;
-    }
-
-    /**
-     * Returns the duration that the cell radio was up for data transfers.
-     */
-    public long getRadioDataUptime() {
-        if (mRadioDataStart == -1) {
-            return mRadioDataUptime;
-        } else {
-            return getCurrentRadioDataUptime() - mRadioDataStart;
-        }
-    }
-
     private int getCurrentBluetoothPingCount() {
         if (mBtHeadset != null) {
             List<BluetoothDevice> deviceList = mBtHeadset.getConnectedDevices();
@@ -1474,83 +1701,434 @@
         mBtHeadset = headset;
     }
 
-    int mChangedBufferStates = 0;
+    private int writeHistoryTag(HistoryTag tag) {
+        Integer idxObj = mHistoryTagPool.get(tag);
+        int idx;
+        if (idxObj != null) {
+            idx = idxObj;
+        } else {
+            idx = mNextHistoryTagIdx;
+            HistoryTag key = new HistoryTag();
+            key.setTo(tag);
+            tag.poolIdx = idx;
+            mHistoryTagPool.put(key, idx);
+            mNextHistoryTagIdx++;
+            mNumHistoryTagChars += key.string.length() + 1;
+        }
+        return idx;
+    }
 
-    void addHistoryBufferLocked(long curTime) {
+    private void readHistoryTag(int index, HistoryTag tag) {
+        tag.string = mReadHistoryStrings[index];
+        tag.uid = mReadHistoryUids[index];
+        tag.poolIdx = index;
+    }
+
+    // Part of initial delta int that specifies the time delta.
+    static final int DELTA_TIME_MASK = 0x7ffff;
+    static final int DELTA_TIME_LONG = 0x7ffff;   // The delta is a following long
+    static final int DELTA_TIME_INT = 0x7fffe;    // The delta is a following int
+    static final int DELTA_TIME_ABS = 0x7fffd;    // Following is an entire abs update.
+    // Flag in delta int: a new battery level int follows.
+    static final int DELTA_BATTERY_LEVEL_FLAG   = 0x00080000;
+    // Flag in delta int: a new full state and battery status int follows.
+    static final int DELTA_STATE_FLAG           = 0x00100000;
+    // Flag in delta int: a new full state2 int follows.
+    static final int DELTA_STATE2_FLAG          = 0x00200000;
+    // Flag in delta int: contains a wakelock or wakeReason tag.
+    static final int DELTA_WAKELOCK_FLAG        = 0x00400000;
+    // Flag in delta int: contains an event description.
+    static final int DELTA_EVENT_FLAG           = 0x00800000;
+    // These upper bits are the frequently changing state bits.
+    static final int DELTA_STATE_MASK           = 0xff000000;
+
+    // These are the pieces of battery state that are packed in to the upper bits of
+    // the state int that have been packed in to the first delta int.  They must fit
+    // in DELTA_STATE_MASK.
+    static final int STATE_BATTERY_STATUS_MASK  = 0x00000007;
+    static final int STATE_BATTERY_STATUS_SHIFT = 29;
+    static final int STATE_BATTERY_HEALTH_MASK  = 0x00000007;
+    static final int STATE_BATTERY_HEALTH_SHIFT = 26;
+    static final int STATE_BATTERY_PLUG_MASK    = 0x00000003;
+    static final int STATE_BATTERY_PLUG_SHIFT   = 24;
+
+    public void writeHistoryDelta(Parcel dest, HistoryItem cur, HistoryItem last) {
+        if (last == null || cur.cmd != HistoryItem.CMD_UPDATE) {
+            dest.writeInt(DELTA_TIME_ABS);
+            cur.writeToParcel(dest, 0);
+            return;
+        }
+
+        final long deltaTime = cur.time - last.time;
+        final int lastBatteryLevelInt = buildBatteryLevelInt(last);
+        final int lastStateInt = buildStateInt(last);
+
+        int deltaTimeToken;
+        if (deltaTime < 0 || deltaTime > Integer.MAX_VALUE) {
+            deltaTimeToken = DELTA_TIME_LONG;
+        } else if (deltaTime >= DELTA_TIME_ABS) {
+            deltaTimeToken = DELTA_TIME_INT;
+        } else {
+            deltaTimeToken = (int)deltaTime;
+        }
+        int firstToken = deltaTimeToken | (cur.states&DELTA_STATE_MASK);
+        final int batteryLevelInt = buildBatteryLevelInt(cur);
+        final boolean batteryLevelIntChanged = batteryLevelInt != lastBatteryLevelInt;
+        if (batteryLevelIntChanged) {
+            firstToken |= DELTA_BATTERY_LEVEL_FLAG;
+        }
+        final int stateInt = buildStateInt(cur);
+        final boolean stateIntChanged = stateInt != lastStateInt;
+        if (stateIntChanged) {
+            firstToken |= DELTA_STATE_FLAG;
+        }
+        final boolean state2IntChanged = cur.states2 != last.states2;
+        if (state2IntChanged) {
+            firstToken |= DELTA_STATE2_FLAG;
+        }
+        if (cur.wakelockTag != null || cur.wakeReasonTag != null) {
+            firstToken |= DELTA_WAKELOCK_FLAG;
+        }
+        if (cur.eventCode != HistoryItem.EVENT_NONE) {
+            firstToken |= DELTA_EVENT_FLAG;
+        }
+        dest.writeInt(firstToken);
+        if (DEBUG) Slog.i(TAG, "WRITE DELTA: firstToken=0x" + Integer.toHexString(firstToken)
+                + " deltaTime=" + deltaTime);
+
+        if (deltaTimeToken >= DELTA_TIME_INT) {
+            if (deltaTimeToken == DELTA_TIME_INT) {
+                if (DEBUG) Slog.i(TAG, "WRITE DELTA: int deltaTime=" + (int)deltaTime);
+                dest.writeInt((int)deltaTime);
+            } else {
+                if (DEBUG) Slog.i(TAG, "WRITE DELTA: long deltaTime=" + deltaTime);
+                dest.writeLong(deltaTime);
+            }
+        }
+        if (batteryLevelIntChanged) {
+            dest.writeInt(batteryLevelInt);
+            if (DEBUG) Slog.i(TAG, "WRITE DELTA: batteryToken=0x"
+                    + Integer.toHexString(batteryLevelInt)
+                    + " batteryLevel=" + cur.batteryLevel
+                    + " batteryTemp=" + cur.batteryTemperature
+                    + " batteryVolt=" + (int)cur.batteryVoltage);
+        }
+        if (stateIntChanged) {
+            dest.writeInt(stateInt);
+            if (DEBUG) Slog.i(TAG, "WRITE DELTA: stateToken=0x"
+                    + Integer.toHexString(stateInt)
+                    + " batteryStatus=" + cur.batteryStatus
+                    + " batteryHealth=" + cur.batteryHealth
+                    + " batteryPlugType=" + cur.batteryPlugType
+                    + " states=0x" + Integer.toHexString(cur.states));
+        }
+        if (state2IntChanged) {
+            dest.writeInt(cur.states2);
+            if (DEBUG) Slog.i(TAG, "WRITE DELTA: states2=0x"
+                    + Integer.toHexString(cur.states2));
+        }
+        if (cur.wakelockTag != null || cur.wakeReasonTag != null) {
+            int wakeLockIndex;
+            int wakeReasonIndex;
+            if (cur.wakelockTag != null) {
+                wakeLockIndex = writeHistoryTag(cur.wakelockTag);
+                if (DEBUG) Slog.i(TAG, "WRITE DELTA: wakelockTag=#" + cur.wakelockTag.poolIdx
+                    + " " + cur.wakelockTag.uid + ":" + cur.wakelockTag.string);
+            } else {
+                wakeLockIndex = 0xffff;
+            }
+            if (cur.wakeReasonTag != null) {
+                wakeReasonIndex = writeHistoryTag(cur.wakeReasonTag);
+                if (DEBUG) Slog.i(TAG, "WRITE DELTA: wakeReasonTag=#" + cur.wakeReasonTag.poolIdx
+                    + " " + cur.wakeReasonTag.uid + ":" + cur.wakeReasonTag.string);
+            } else {
+                wakeReasonIndex = 0xffff;
+            }
+            dest.writeInt((wakeReasonIndex<<16) | wakeLockIndex);
+        }
+        if (cur.eventCode != HistoryItem.EVENT_NONE) {
+            int index = writeHistoryTag(cur.eventTag);
+            int codeAndIndex = (cur.eventCode&0xffff) | (index<<16);
+            dest.writeInt(codeAndIndex);
+            if (DEBUG) Slog.i(TAG, "WRITE DELTA: event=" + cur.eventCode + " tag=#"
+                    + cur.eventTag.poolIdx + " " + cur.eventTag.uid + ":"
+                    + cur.eventTag.string);
+        }
+    }
+
+    private int buildBatteryLevelInt(HistoryItem h) {
+        return ((((int)h.batteryLevel)<<25)&0xfe000000)
+                | ((((int)h.batteryTemperature)<<14)&0x01ffc000)
+                | (((int)h.batteryVoltage)&0x00003fff);
+    }
+
+    private int buildStateInt(HistoryItem h) {
+        int plugType = 0;
+        if ((h.batteryPlugType&BatteryManager.BATTERY_PLUGGED_AC) != 0) {
+            plugType = 1;
+        } else if ((h.batteryPlugType&BatteryManager.BATTERY_PLUGGED_USB) != 0) {
+            plugType = 2;
+        } else if ((h.batteryPlugType&BatteryManager.BATTERY_PLUGGED_WIRELESS) != 0) {
+            plugType = 3;
+        }
+        return ((h.batteryStatus&STATE_BATTERY_STATUS_MASK)<<STATE_BATTERY_STATUS_SHIFT)
+                | ((h.batteryHealth&STATE_BATTERY_HEALTH_MASK)<<STATE_BATTERY_HEALTH_SHIFT)
+                | ((plugType&STATE_BATTERY_PLUG_MASK)<<STATE_BATTERY_PLUG_SHIFT)
+                | (h.states&(~DELTA_STATE_MASK));
+    }
+
+    public void readHistoryDelta(Parcel src, HistoryItem cur) {
+        int firstToken = src.readInt();
+        int deltaTimeToken = firstToken&DELTA_TIME_MASK;
+        cur.cmd = HistoryItem.CMD_UPDATE;
+        cur.numReadInts = 1;
+        if (DEBUG) Slog.i(TAG, "READ DELTA: firstToken=0x" + Integer.toHexString(firstToken)
+                + " deltaTimeToken=" + deltaTimeToken);
+
+        if (deltaTimeToken < DELTA_TIME_ABS) {
+            cur.time += deltaTimeToken;
+        } else if (deltaTimeToken == DELTA_TIME_ABS) {
+            cur.time = src.readLong();
+            cur.numReadInts += 2;
+            if (DEBUG) Slog.i(TAG, "READ DELTA: ABS time=" + cur.time);
+            cur.readFromParcel(src);
+            return;
+        } else if (deltaTimeToken == DELTA_TIME_INT) {
+            int delta = src.readInt();
+            cur.time += delta;
+            cur.numReadInts += 1;
+            if (DEBUG) Slog.i(TAG, "READ DELTA: time delta=" + delta + " new time=" + cur.time);
+        } else {
+            long delta = src.readLong();
+            if (DEBUG) Slog.i(TAG, "READ DELTA: time delta=" + delta + " new time=" + cur.time);
+            cur.time += delta;
+            cur.numReadInts += 2;
+        }
+
+        if ((firstToken&DELTA_BATTERY_LEVEL_FLAG) != 0) {
+            int batteryLevelInt = src.readInt();
+            cur.batteryLevel = (byte)((batteryLevelInt>>25)&0x7f);
+            cur.batteryTemperature = (short)((batteryLevelInt<<7)>>21);
+            cur.batteryVoltage = (char)(batteryLevelInt&0x3fff);
+            cur.numReadInts += 1;
+            if (DEBUG) Slog.i(TAG, "READ DELTA: batteryToken=0x"
+                    + Integer.toHexString(batteryLevelInt)
+                    + " batteryLevel=" + cur.batteryLevel
+                    + " batteryTemp=" + cur.batteryTemperature
+                    + " batteryVolt=" + (int)cur.batteryVoltage);
+        }
+
+        if ((firstToken&DELTA_STATE_FLAG) != 0) {
+            int stateInt = src.readInt();
+            cur.states = (firstToken&DELTA_STATE_MASK) | (stateInt&(~DELTA_STATE_MASK));
+            cur.batteryStatus = (byte)((stateInt>>STATE_BATTERY_STATUS_SHIFT)
+                    & STATE_BATTERY_STATUS_MASK);
+            cur.batteryHealth = (byte)((stateInt>>STATE_BATTERY_HEALTH_SHIFT)
+                    & STATE_BATTERY_HEALTH_MASK);
+            cur.batteryPlugType = (byte)((stateInt>>STATE_BATTERY_PLUG_SHIFT)
+                    & STATE_BATTERY_PLUG_MASK);
+            switch (cur.batteryPlugType) {
+                case 1:
+                    cur.batteryPlugType = BatteryManager.BATTERY_PLUGGED_AC;
+                    break;
+                case 2:
+                    cur.batteryPlugType = BatteryManager.BATTERY_PLUGGED_USB;
+                    break;
+                case 3:
+                    cur.batteryPlugType = BatteryManager.BATTERY_PLUGGED_WIRELESS;
+                    break;
+            }
+            cur.numReadInts += 1;
+            if (DEBUG) Slog.i(TAG, "READ DELTA: stateToken=0x"
+                    + Integer.toHexString(stateInt)
+                    + " batteryStatus=" + cur.batteryStatus
+                    + " batteryHealth=" + cur.batteryHealth
+                    + " batteryPlugType=" + cur.batteryPlugType
+                    + " states=0x" + Integer.toHexString(cur.states));
+        } else {
+            cur.states = (firstToken&DELTA_STATE_MASK) | (cur.states&(~DELTA_STATE_MASK));
+        }
+
+        if ((firstToken&DELTA_STATE2_FLAG) != 0) {
+            cur.states2 = src.readInt();
+            if (DEBUG) Slog.i(TAG, "READ DELTA: states2=0x"
+                    + Integer.toHexString(cur.states2));
+        }
+
+        if ((firstToken&DELTA_WAKELOCK_FLAG) != 0) {
+            int indexes = src.readInt();
+            int wakeLockIndex = indexes&0xffff;
+            int wakeReasonIndex = (indexes>>16)&0xffff;
+            if (wakeLockIndex != 0xffff) {
+                cur.wakelockTag = cur.localWakelockTag;
+                readHistoryTag(wakeLockIndex, cur.wakelockTag);
+                if (DEBUG) Slog.i(TAG, "READ DELTA: wakelockTag=#" + cur.wakelockTag.poolIdx
+                    + " " + cur.wakelockTag.uid + ":" + cur.wakelockTag.string);
+            } else {
+                cur.wakelockTag = null;
+            }
+            if (wakeReasonIndex != 0xffff) {
+                cur.wakeReasonTag = cur.localWakeReasonTag;
+                readHistoryTag(wakeReasonIndex, cur.wakeReasonTag);
+                if (DEBUG) Slog.i(TAG, "READ DELTA: wakeReasonTag=#" + cur.wakeReasonTag.poolIdx
+                    + " " + cur.wakeReasonTag.uid + ":" + cur.wakeReasonTag.string);
+            } else {
+                cur.wakeReasonTag = null;
+            }
+            cur.numReadInts += 1;
+        } else {
+            cur.wakelockTag = null;
+            cur.wakeReasonTag = null;
+        }
+
+        if ((firstToken&DELTA_EVENT_FLAG) != 0) {
+            cur.eventTag = cur.localEventTag;
+            final int codeAndIndex = src.readInt();
+            cur.eventCode = (codeAndIndex&0xffff);
+            final int index = ((codeAndIndex>>16)&0xffff);
+            readHistoryTag(index, cur.eventTag);
+            cur.numReadInts += 1;
+            if (DEBUG) Slog.i(TAG, "READ DELTA: event=" + cur.eventCode + " tag=#"
+                    + cur.eventTag.poolIdx + " " + cur.eventTag.uid + ":"
+                    + cur.eventTag.string);
+        } else {
+            cur.eventCode = HistoryItem.EVENT_NONE;
+        }
+    }
+
+    void addHistoryBufferLocked(long elapsedRealtimeMs, long uptimeMs, HistoryItem cur) {
         if (!mHaveBatteryLevel || !mRecordingHistory) {
             return;
         }
 
-        final long timeDiff = (mHistoryBaseTime+curTime) - mHistoryLastWritten.time;
+        final long timeDiff = (mHistoryBaseTime+elapsedRealtimeMs) - mHistoryLastWritten.time;
+        final int diffStates = mHistoryLastWritten.states^cur.states;
+        final int diffStates2 = mHistoryLastWritten.states2^cur.states2;
+        final int lastDiffStates = mHistoryLastWritten.states^mHistoryLastLastWritten.states;
+        final int lastDiffStates2 = mHistoryLastWritten.states2^mHistoryLastLastWritten.states2;
+        if (DEBUG) Slog.i(TAG, "ADD: tdelta=" + timeDiff + " diff="
+                + Integer.toHexString(diffStates) + " lastDiff="
+                + Integer.toHexString(lastDiffStates) + " diff2="
+                + Integer.toHexString(diffStates2) + " lastDiff2="
+                + Integer.toHexString(lastDiffStates2));
         if (mHistoryBufferLastPos >= 0 && mHistoryLastWritten.cmd == HistoryItem.CMD_UPDATE
-                && timeDiff < 2000
-                && ((mHistoryLastWritten.states^mHistoryCur.states)&mChangedBufferStates) == 0) {
-            // If the current is the same as the one before, then we no
-            // longer need the entry.
+                && timeDiff < 1000 && (diffStates&lastDiffStates) == 0
+                && (diffStates2&lastDiffStates2) == 0
+                && (mHistoryLastWritten.wakelockTag == null || cur.wakelockTag == null)
+                && (mHistoryLastWritten.wakeReasonTag == null || cur.wakeReasonTag == null)
+                && (mHistoryLastWritten.eventCode == HistoryItem.EVENT_NONE
+                        || cur.eventCode == HistoryItem.EVENT_NONE)
+                && mHistoryLastWritten.batteryLevel == cur.batteryLevel
+                && mHistoryLastWritten.batteryStatus == cur.batteryStatus
+                && mHistoryLastWritten.batteryHealth == cur.batteryHealth
+                && mHistoryLastWritten.batteryPlugType == cur.batteryPlugType
+                && mHistoryLastWritten.batteryTemperature == cur.batteryTemperature
+                && mHistoryLastWritten.batteryVoltage == cur.batteryVoltage) {
+            // We can merge this new change in with the last one.  Merging is
+            // allowed as long as only the states have changed, and within those states
+            // as long as no bit has changed both between now and the last entry, as
+            // well as the last entry and the one before it (so we capture any toggles).
+            if (DEBUG) Slog.i(TAG, "ADD: rewinding back to " + mHistoryBufferLastPos);
             mHistoryBuffer.setDataSize(mHistoryBufferLastPos);
             mHistoryBuffer.setDataPosition(mHistoryBufferLastPos);
             mHistoryBufferLastPos = -1;
-            if (mHistoryLastLastWritten.cmd == HistoryItem.CMD_UPDATE
-                    && timeDiff < 500 && mHistoryLastLastWritten.same(mHistoryCur)) {
-                // If this results in us returning to the state written
-                // prior to the last one, then we can just delete the last
-                // written one and drop the new one.  Nothing more to do.
-                mHistoryLastWritten.setTo(mHistoryLastLastWritten);
-                mHistoryLastLastWritten.cmd = HistoryItem.CMD_NULL;
-                return;
+            elapsedRealtimeMs = mHistoryLastWritten.time - mHistoryBaseTime;
+            // If the last written history had a wakelock tag, we need to retain it.
+            // Note that the condition above made sure that we aren't in a case where
+            // both it and the current history item have a wakelock tag.
+            if (mHistoryLastWritten.wakelockTag != null) {
+                cur.wakelockTag = cur.localWakelockTag;
+                cur.wakelockTag.setTo(mHistoryLastWritten.wakelockTag);
             }
-            mChangedBufferStates |= mHistoryLastWritten.states^mHistoryCur.states;
-            curTime = mHistoryLastWritten.time - mHistoryBaseTime;
+            // If the last written history had a wake reason tag, we need to retain it.
+            // Note that the condition above made sure that we aren't in a case where
+            // both it and the current history item have a wakelock tag.
+            if (mHistoryLastWritten.wakeReasonTag != null) {
+                cur.wakeReasonTag = cur.localWakeReasonTag;
+                cur.wakeReasonTag.setTo(mHistoryLastWritten.wakeReasonTag);
+            }
+            // If the last written history had an event, we need to retain it.
+            // Note that the condition above made sure that we aren't in a case where
+            // both it and the current history item have an event.
+            if (mHistoryLastWritten.eventCode != HistoryItem.EVENT_NONE) {
+                cur.eventCode = mHistoryLastWritten.eventCode;
+                cur.eventTag = cur.localEventTag;
+                cur.eventTag.setTo(mHistoryLastWritten.eventTag);
+            }
             mHistoryLastWritten.setTo(mHistoryLastLastWritten);
-        } else {
-            mChangedBufferStates = 0;
         }
 
         final int dataSize = mHistoryBuffer.dataSize();
         if (dataSize >= MAX_HISTORY_BUFFER) {
             if (!mHistoryOverflow) {
                 mHistoryOverflow = true;
-                addHistoryBufferLocked(curTime, HistoryItem.CMD_OVERFLOW);
+                addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_UPDATE, cur);
+                addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_OVERFLOW, cur);
+                return;
             }
 
             // Once we've reached the maximum number of items, we only
             // record changes to the battery level and the most interesting states.
             // Once we've reached the maximum maximum number of items, we only
             // record changes to the battery level.
-            if (mHistoryLastWritten.batteryLevel == mHistoryCur.batteryLevel &&
+            if (mHistoryLastWritten.batteryLevel == cur.batteryLevel &&
                     (dataSize >= MAX_MAX_HISTORY_BUFFER
-                            || ((mHistoryLastWritten.states^mHistoryCur.states)
+                            || ((mHistoryLastWritten.states^cur.states)
                                     & HistoryItem.MOST_INTERESTING_STATES) == 0)) {
                 return;
             }
+
+            addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_UPDATE, cur);
+            return;
         }
 
-        addHistoryBufferLocked(curTime, HistoryItem.CMD_UPDATE);
+        addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_UPDATE, cur);
     }
 
-    void addHistoryBufferLocked(long curTime, byte cmd) {
-        int origPos = 0;
+    private void addHistoryBufferLocked(long elapsedRealtimeMs, long uptimeMs, byte cmd,
+            HistoryItem cur) {
         if (mIteratingHistory) {
-            origPos = mHistoryBuffer.dataPosition();
-            mHistoryBuffer.setDataPosition(mHistoryBuffer.dataSize());
+            throw new IllegalStateException("Can't do this while iterating history!");
         }
         mHistoryBufferLastPos = mHistoryBuffer.dataPosition();
         mHistoryLastLastWritten.setTo(mHistoryLastWritten);
-        mHistoryLastWritten.setTo(mHistoryBaseTime + curTime, cmd, mHistoryCur);
-        mHistoryLastWritten.writeDelta(mHistoryBuffer, mHistoryLastLastWritten);
-        mLastHistoryTime = curTime;
+        mHistoryLastWritten.setTo(mHistoryBaseTime + elapsedRealtimeMs, cmd, cur);
+        writeHistoryDelta(mHistoryBuffer, mHistoryLastWritten, mHistoryLastLastWritten);
+        mLastHistoryElapsedRealtime = elapsedRealtimeMs;
+        cur.wakelockTag = null;
+        cur.wakeReasonTag = null;
+        cur.eventCode = HistoryItem.EVENT_NONE;
+        cur.eventTag = null;
         if (DEBUG_HISTORY) Slog.i(TAG, "Writing history buffer: was " + mHistoryBufferLastPos
                 + " now " + mHistoryBuffer.dataPosition()
                 + " size is now " + mHistoryBuffer.dataSize());
-        if (mIteratingHistory) {
-            mHistoryBuffer.setDataPosition(origPos);
-        }
     }
 
     int mChangedStates = 0;
+    int mChangedStates2 = 0;
 
-    void addHistoryRecordLocked(long curTime) {
-        addHistoryBufferLocked(curTime);
+    void addHistoryRecordLocked(long elapsedRealtimeMs, long uptimeMs) {
+        if (mTrackRunningHistoryElapsedRealtime != 0) {
+            final long diffElapsed = elapsedRealtimeMs - mTrackRunningHistoryElapsedRealtime;
+            final long diffUptime = uptimeMs - mTrackRunningHistoryUptime;
+            if (diffUptime < (diffElapsed-20)) {
+                final long wakeElapsedTime = elapsedRealtimeMs - (diffElapsed - diffUptime);
+                mHistoryAddTmp.setTo(mHistoryLastWritten);
+                mHistoryAddTmp.wakelockTag = null;
+                mHistoryAddTmp.wakeReasonTag = null;
+                mHistoryAddTmp.eventCode = HistoryItem.EVENT_NONE;
+                mHistoryAddTmp.states &= ~HistoryItem.STATE_CPU_RUNNING_FLAG;
+                addHistoryRecordInnerLocked(wakeElapsedTime, uptimeMs, mHistoryAddTmp);
+            }
+        }
+        mHistoryCur.states |= HistoryItem.STATE_CPU_RUNNING_FLAG;
+        mTrackRunningHistoryElapsedRealtime = elapsedRealtimeMs;
+        mTrackRunningHistoryUptime = uptimeMs;
+        addHistoryRecordInnerLocked(elapsedRealtimeMs, uptimeMs, mHistoryCur);
+    }
+
+    void addHistoryRecordInnerLocked(long elapsedRealtimeMs, long uptimeMs, HistoryItem cur) {
+        addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, cur);
 
         if (!USE_OLD_HISTORY) {
             return;
@@ -1565,30 +2143,33 @@
         // are now resetting back to their original value, then just collapse
         // into one record.
         if (mHistoryEnd != null && mHistoryEnd.cmd == HistoryItem.CMD_UPDATE
-                && (mHistoryBaseTime+curTime) < (mHistoryEnd.time+2000)
-                && ((mHistoryEnd.states^mHistoryCur.states)&mChangedStates) == 0) {
+                && (mHistoryBaseTime+elapsedRealtimeMs) < (mHistoryEnd.time+1000)
+                && ((mHistoryEnd.states^cur.states)&mChangedStates) == 0
+                && ((mHistoryEnd.states2^cur.states2)&mChangedStates2) == 0) {
             // If the current is the same as the one before, then we no
             // longer need the entry.
             if (mHistoryLastEnd != null && mHistoryLastEnd.cmd == HistoryItem.CMD_UPDATE
-                    && (mHistoryBaseTime+curTime) < (mHistoryEnd.time+500)
-                    && mHistoryLastEnd.same(mHistoryCur)) {
+                    && (mHistoryBaseTime+elapsedRealtimeMs) < (mHistoryEnd.time+500)
+                    && mHistoryLastEnd.sameNonEvent(cur)) {
                 mHistoryLastEnd.next = null;
                 mHistoryEnd.next = mHistoryCache;
                 mHistoryCache = mHistoryEnd;
                 mHistoryEnd = mHistoryLastEnd;
                 mHistoryLastEnd = null;
             } else {
-                mChangedStates |= mHistoryEnd.states^mHistoryCur.states;
-                mHistoryEnd.setTo(mHistoryEnd.time, HistoryItem.CMD_UPDATE, mHistoryCur);
+                mChangedStates |= mHistoryEnd.states^cur.states;
+                mChangedStates2 |= mHistoryEnd.states^cur.states2;
+                mHistoryEnd.setTo(mHistoryEnd.time, HistoryItem.CMD_UPDATE, cur);
             }
             return;
         }
 
         mChangedStates = 0;
+        mChangedStates2 = 0;
 
         if (mNumHistoryItems == MAX_HISTORY_ITEMS
                 || mNumHistoryItems == MAX_MAX_HISTORY_ITEMS) {
-            addHistoryRecordLocked(curTime, HistoryItem.CMD_OVERFLOW);
+            addHistoryRecordLocked(elapsedRealtimeMs, HistoryItem.CMD_OVERFLOW);
         }
 
         if (mNumHistoryItems >= MAX_HISTORY_ITEMS) {
@@ -1597,25 +2178,34 @@
             // Once we've reached the maximum maximum number of items, we only
             // record changes to the battery level.
             if (mHistoryEnd != null && mHistoryEnd.batteryLevel
-                    == mHistoryCur.batteryLevel &&
+                    == cur.batteryLevel &&
                     (mNumHistoryItems >= MAX_MAX_HISTORY_ITEMS
-                            || ((mHistoryEnd.states^mHistoryCur.states)
+                            || ((mHistoryEnd.states^cur.states)
                                     & HistoryItem.MOST_INTERESTING_STATES) == 0)) {
                 return;
             }
         }
 
-        addHistoryRecordLocked(curTime, HistoryItem.CMD_UPDATE);
+        addHistoryRecordLocked(elapsedRealtimeMs, HistoryItem.CMD_UPDATE);
     }
 
-    void addHistoryRecordLocked(long curTime, byte cmd) {
+    void addHistoryEventLocked(long elapsedRealtimeMs, long uptimeMs, int code,
+            String name, int uid) {
+        mHistoryCur.eventCode = code;
+        mHistoryCur.eventTag = mHistoryCur.localEventTag;
+        mHistoryCur.eventTag.string = name;
+        mHistoryCur.eventTag.uid = uid;
+        addHistoryRecordLocked(elapsedRealtimeMs, uptimeMs);
+    }
+
+    void addHistoryRecordLocked(long elapsedRealtimeMs, long uptimeMs, byte cmd, HistoryItem cur) {
         HistoryItem rec = mHistoryCache;
         if (rec != null) {
             mHistoryCache = rec.next;
         } else {
             rec = new HistoryItem();
         }
-        rec.setTo(mHistoryBaseTime + curTime, cmd, mHistoryCur);
+        rec.setTo(mHistoryBaseTime + elapsedRealtimeMs, cmd, cur);
 
         addHistoryRecordLocked(rec);
     }
@@ -1644,114 +2234,252 @@
         }
 
         mHistoryBaseTime = 0;
-        mLastHistoryTime = 0;
+        mLastHistoryElapsedRealtime = 0;
+        mTrackRunningHistoryElapsedRealtime = 0;
+        mTrackRunningHistoryUptime = 0;
 
         mHistoryBuffer.setDataSize(0);
         mHistoryBuffer.setDataPosition(0);
-        mHistoryBuffer.setDataCapacity(MAX_HISTORY_BUFFER/2);
-        mHistoryLastLastWritten.cmd = HistoryItem.CMD_NULL;
-        mHistoryLastWritten.cmd = HistoryItem.CMD_NULL;
+        mHistoryBuffer.setDataCapacity(MAX_HISTORY_BUFFER / 2);
+        mHistoryLastLastWritten.clear();
+        mHistoryLastWritten.clear();
+        mHistoryTagPool.clear();
+        mNextHistoryTagIdx = 0;
+        mNumHistoryTagChars = 0;
         mHistoryBufferLastPos = -1;
         mHistoryOverflow = false;
     }
 
-    public void doUnplugLocked(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
-        for (int i = mUnpluggables.size() - 1; i >= 0; i--) {
-            mUnpluggables.get(i).unplug(elapsedRealtime, batteryUptime, batteryRealtime);
+    public void updateTimeBasesLocked(boolean unplugged, boolean screenOff, long uptime,
+            long realtime) {
+        if (mOnBatteryTimeBase.setRunning(unplugged, uptime, realtime)) {
+            if (unplugged) {
+                // Track bt headset ping count
+                mBluetoothPingStart = getCurrentBluetoothPingCount();
+                mBluetoothPingCount = 0;
+            } else {
+                // Track bt headset ping count
+                mBluetoothPingCount = getBluetoothPingCount();
+                mBluetoothPingStart = -1;
+            }
         }
 
-        // Track radio awake time
-        mRadioDataStart = getCurrentRadioDataUptime();
-        mRadioDataUptime = 0;
-
-        // Track bt headset ping count
-        mBluetoothPingStart = getCurrentBluetoothPingCount();
-        mBluetoothPingCount = 0;
-    }
-
-    public void doPlugLocked(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
-        for (int i = mUnpluggables.size() - 1; i >= 0; i--) {
-            mUnpluggables.get(i).plug(elapsedRealtime, batteryUptime, batteryRealtime);
+        boolean unpluggedScreenOff = unplugged && screenOff;
+        if (unpluggedScreenOff != mOnBatteryScreenOffTimeBase.isRunning()) {
+            updateKernelWakelocksLocked();
+            requestWakelockCpuUpdate();
+            if (!unpluggedScreenOff) {
+                // We are switching to no longer tracking wake locks, but we want
+                // the next CPU update we receive to take them in to account.
+                mDistributeWakelockCpu = true;
+            }
+            mOnBatteryScreenOffTimeBase.setRunning(unpluggedScreenOff, uptime, realtime);
         }
-
-        // Track radio awake time
-        mRadioDataUptime = getRadioDataUptime();
-        mRadioDataStart = -1;
-
-        // Track bt headset ping count
-        mBluetoothPingCount = getBluetoothPingCount();
-        mBluetoothPingStart = -1;
     }
 
-    int mWakeLockNesting;
+    public void addIsolatedUidLocked(int isolatedUid, int appUid) {
+        mIsolatedUids.put(isolatedUid, appUid);
+    }
 
-    public void noteStartWakeLocked(int uid, int pid, String name, int type) {
+    public void removeIsolatedUidLocked(int isolatedUid, int appUid) {
+        int curUid = mIsolatedUids.get(isolatedUid, -1);
+        if (curUid == appUid) {
+            mIsolatedUids.delete(isolatedUid);
+        }
+    }
+
+    public int mapUid(int uid) {
+        int isolated = mIsolatedUids.get(uid, -1);
+        return isolated > 0 ? isolated : uid;
+    }
+
+    public void noteEventLocked(int code, String name, int uid) {
+        uid = mapUid(uid);
+        if ((code&HistoryItem.EVENT_FLAG_START) != 0) {
+            int idx = code&~HistoryItem.EVENT_FLAG_START;
+            HashMap<String, SparseBooleanArray> active = mActiveEvents[idx];
+            if (active == null) {
+                active = new HashMap<String, SparseBooleanArray>();
+                mActiveEvents[idx] = active;
+            }
+            SparseBooleanArray uids = active.get(name);
+            if (uids == null) {
+                uids = new SparseBooleanArray();
+                active.put(name, uids);
+            }
+            if (uids.get(uid)) {
+                // Already set, nothing to do!
+                return;
+            }
+            uids.put(uid, true);
+        } else if ((code&HistoryItem.EVENT_FLAG_FINISH) != 0) {
+            int idx = code&~HistoryItem.EVENT_FLAG_FINISH;
+            HashMap<String, SparseBooleanArray> active = mActiveEvents[idx];
+            if (active == null) {
+                // not currently active, nothing to do.
+                return;
+            }
+            SparseBooleanArray uids = active.get(name);
+            if (uids == null) {
+                // not currently active, nothing to do.
+                return;
+            }
+            idx = uids.indexOfKey(uid);
+            if (idx < 0 || !uids.valueAt(idx)) {
+                // not currently active, nothing to do.
+                return;
+            }
+            uids.removeAt(idx);
+            if (uids.size() <= 0) {
+                active.remove(name);
+            }
+        }
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
+        addHistoryEventLocked(elapsedRealtime, uptime, code, name, uid);
+    }
+
+    private void requestWakelockCpuUpdate() {
+        if (!mHandler.hasMessages(MSG_UPDATE_WAKELOCKS)) {
+            Message m = mHandler.obtainMessage(MSG_UPDATE_WAKELOCKS);
+            mHandler.sendMessageDelayed(m, DELAY_UPDATE_WAKELOCKS);
+        }
+    }
+
+    public void noteStartWakeLocked(int uid, int pid, String name, String historyName, int type,
+            boolean unimportantForLogging, long elapsedRealtime, long uptime) {
+        uid = mapUid(uid);
         if (type == WAKE_TYPE_PARTIAL) {
             // Only care about partial wake locks, since full wake locks
             // will be canceled when the user puts the screen to sleep.
+            aggregateLastWakeupUptimeLocked(uptime);
             if (mWakeLockNesting == 0) {
                 mHistoryCur.states |= HistoryItem.STATE_WAKE_LOCK_FLAG;
                 if (DEBUG_HISTORY) Slog.v(TAG, "Start wake lock to: "
                         + Integer.toHexString(mHistoryCur.states));
-                addHistoryRecordLocked(SystemClock.elapsedRealtime());
+                mHistoryCur.wakelockTag = mHistoryCur.localWakelockTag;
+                mHistoryCur.wakelockTag.string = historyName != null ? historyName : name;
+                mHistoryCur.wakelockTag.uid = uid;
+                mWakeLockImportant = !unimportantForLogging;
+                addHistoryRecordLocked(elapsedRealtime, uptime);
+            } else if (!mWakeLockImportant && !unimportantForLogging) {
+                if (mHistoryLastWritten.wakelockTag != null) {
+                    // We'll try to update the last tag.
+                    mHistoryLastWritten.wakelockTag = null;
+                    mHistoryCur.wakelockTag = mHistoryCur.localWakelockTag;
+                    mHistoryCur.wakelockTag.string = historyName != null ? historyName : name;
+                    mHistoryCur.wakelockTag.uid = uid;
+                    addHistoryRecordLocked(elapsedRealtime, uptime);
+                }
+                mWakeLockImportant = true;
             }
             mWakeLockNesting++;
         }
         if (uid >= 0) {
-            if (!mHandler.hasMessages(MSG_UPDATE_WAKELOCKS)) {
-                Message m = mHandler.obtainMessage(MSG_UPDATE_WAKELOCKS);
-                mHandler.sendMessageDelayed(m, DELAY_UPDATE_WAKELOCKS);
-            }
-            getUidStatsLocked(uid).noteStartWakeLocked(pid, name, type);
+            //if (uid == 0) {
+            //    Slog.wtf(TAG, "Acquiring wake lock from root: " + name);
+            //}
+            requestWakelockCpuUpdate();
+            getUidStatsLocked(uid).noteStartWakeLocked(pid, name, type, elapsedRealtime);
         }
     }
 
-    public void noteStopWakeLocked(int uid, int pid, String name, int type) {
+    public void noteStopWakeLocked(int uid, int pid, String name, int type, long elapsedRealtime,
+            long uptime) {
+        uid = mapUid(uid);
         if (type == WAKE_TYPE_PARTIAL) {
             mWakeLockNesting--;
             if (mWakeLockNesting == 0) {
                 mHistoryCur.states &= ~HistoryItem.STATE_WAKE_LOCK_FLAG;
                 if (DEBUG_HISTORY) Slog.v(TAG, "Stop wake lock to: "
                         + Integer.toHexString(mHistoryCur.states));
-                addHistoryRecordLocked(SystemClock.elapsedRealtime());
+                addHistoryRecordLocked(elapsedRealtime, uptime);
             }
         }
         if (uid >= 0) {
-            if (!mHandler.hasMessages(MSG_UPDATE_WAKELOCKS)) {
-                Message m = mHandler.obtainMessage(MSG_UPDATE_WAKELOCKS);
-                mHandler.sendMessageDelayed(m, DELAY_UPDATE_WAKELOCKS);
-            }
-            getUidStatsLocked(uid).noteStopWakeLocked(pid, name, type);
+            requestWakelockCpuUpdate();
+            getUidStatsLocked(uid).noteStopWakeLocked(pid, name, type, elapsedRealtime);
         }
     }
 
-    public void noteStartWakeFromSourceLocked(WorkSource ws, int pid, String name, int type) {
-        int N = ws.size();
+    public void noteStartWakeFromSourceLocked(WorkSource ws, int pid, String name,
+            String historyName, int type, boolean unimportantForLogging) {
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
+        final int N = ws.size();
         for (int i=0; i<N; i++) {
-            noteStartWakeLocked(ws.get(i), pid, name, type);
+            noteStartWakeLocked(ws.get(i), pid, name, historyName, type, unimportantForLogging,
+                    elapsedRealtime, uptime);
+        }
+    }
+
+    public void noteChangeWakelockFromSourceLocked(WorkSource ws, int pid, String name, int type,
+            WorkSource newWs, int newPid, String newName,
+            String newHistoryName, int newType, boolean newUnimportantForLogging) {
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
+        // For correct semantics, we start the need worksources first, so that we won't
+        // make inappropriate history items as if all wake locks went away and new ones
+        // appeared.  This is okay because tracking of wake locks allows nesting.
+        final int NN = newWs.size();
+        for (int i=0; i<NN; i++) {
+            noteStartWakeLocked(newWs.get(i), newPid, newName, newHistoryName, newType,
+                    newUnimportantForLogging, elapsedRealtime, uptime);
+        }
+        final int NO = ws.size();
+        for (int i=0; i<NO; i++) {
+            noteStopWakeLocked(ws.get(i), pid, name, type, elapsedRealtime, uptime);
         }
     }
 
     public void noteStopWakeFromSourceLocked(WorkSource ws, int pid, String name, int type) {
-        int N = ws.size();
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
+        final int N = ws.size();
         for (int i=0; i<N; i++) {
-            noteStopWakeLocked(ws.get(i), pid, name, type);
+            noteStopWakeLocked(ws.get(i), pid, name, type, elapsedRealtime, uptime);
         }
     }
 
+    void aggregateLastWakeupUptimeLocked(long uptimeMs) {
+        if (mLastWakeupReason != null) {
+            long deltaUptime = uptimeMs - mLastWakeupUptimeMs;
+            LongSamplingCounter timer = getWakeupReasonCounterLocked(mLastWakeupReason);
+            timer.addCountLocked(deltaUptime);
+            mLastWakeupReason = null;
+        }
+    }
+
+    public void noteWakeupReasonLocked(String reason) {
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
+        if (DEBUG_HISTORY) Slog.v(TAG, "Wakeup reason reason \"" + reason +"\": "
+                + Integer.toHexString(mHistoryCur.states));
+        aggregateLastWakeupUptimeLocked(uptime);
+        mHistoryCur.wakeReasonTag = mHistoryCur.localWakeReasonTag;
+        mHistoryCur.wakeReasonTag.string = reason;
+        mHistoryCur.wakeReasonTag.uid = 0;
+        mLastWakeupReason = reason;
+        mLastWakeupUptimeMs = uptime;
+        addHistoryRecordLocked(elapsedRealtime, uptime);
+    }
+
     public int startAddingCpuLocked() {
         mHandler.removeMessages(MSG_UPDATE_WAKELOCKS);
 
-        if (mScreenOn) {
-            return 0;
-        }
-
         final int N = mPartialTimers.size();
         if (N == 0) {
             mLastPartialTimers.clear();
+            mDistributeWakelockCpu = false;
             return 0;
         }
 
+        if (!mOnBatteryScreenOffTimeBase.isRunning() && !mDistributeWakelockCpu) {
+            return 0;
+        }
+
+        mDistributeWakelockCpu = false;
+
         // How many timers should consume CPU?  Only want to include ones
         // that have already been in the list.
         for (int i=0; i<N; i++) {
@@ -1838,6 +2566,7 @@
     }
 
     public void noteProcessDiedLocked(int uid, int pid) {
+        uid = mapUid(uid);
         Uid u = mUidStats.get(uid);
         if (u != null) {
             u.mPids.remove(pid);
@@ -1845,17 +2574,19 @@
     }
 
     public long getProcessWakeTime(int uid, int pid, long realtime) {
+        uid = mapUid(uid);
         Uid u = mUidStats.get(uid);
         if (u != null) {
             Uid.Pid p = u.mPids.get(pid);
             if (p != null) {
-                return p.mWakeSum + (p.mWakeStart != 0 ? (realtime - p.mWakeStart) : 0);
+                return p.mWakeSumMs + (p.mWakeNesting > 0 ? (realtime - p.mWakeStartMs) : 0);
             }
         }
         return 0;
     }
 
     public void reportExcessiveWakeLocked(int uid, String proc, long overTime, long usedTime) {
+        uid = mapUid(uid);
         Uid u = mUidStats.get(uid);
         if (u != null) {
             u.reportExcessiveWakeLocked(proc, overTime, usedTime);
@@ -1863,6 +2594,7 @@
     }
 
     public void reportExcessiveCpuLocked(int uid, String proc, long overTime, long usedTime) {
+        uid = mapUid(uid);
         Uid u = mUidStats.get(uid);
         if (u != null) {
             u.reportExcessiveCpuLocked(proc, overTime, usedTime);
@@ -1872,67 +2604,85 @@
     int mSensorNesting;
 
     public void noteStartSensorLocked(int uid, int sensor) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mSensorNesting == 0) {
             mHistoryCur.states |= HistoryItem.STATE_SENSOR_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Start sensor to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
         mSensorNesting++;
-        getUidStatsLocked(uid).noteStartSensor(sensor);
+        getUidStatsLocked(uid).noteStartSensor(sensor, elapsedRealtime);
     }
 
     public void noteStopSensorLocked(int uid, int sensor) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         mSensorNesting--;
         if (mSensorNesting == 0) {
             mHistoryCur.states &= ~HistoryItem.STATE_SENSOR_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Stop sensor to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
-        getUidStatsLocked(uid).noteStopSensor(sensor);
+        getUidStatsLocked(uid).noteStopSensor(sensor, elapsedRealtime);
     }
 
     int mGpsNesting;
 
     public void noteStartGpsLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mGpsNesting == 0) {
             mHistoryCur.states |= HistoryItem.STATE_GPS_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Start GPS to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
         mGpsNesting++;
-        getUidStatsLocked(uid).noteStartGps();
+        getUidStatsLocked(uid).noteStartGps(elapsedRealtime);
     }
 
     public void noteStopGpsLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         mGpsNesting--;
         if (mGpsNesting == 0) {
             mHistoryCur.states &= ~HistoryItem.STATE_GPS_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Stop GPS to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
-        getUidStatsLocked(uid).noteStopGps();
+        getUidStatsLocked(uid).noteStopGps(elapsedRealtime);
     }
 
     public void noteScreenOnLocked() {
         if (!mScreenOn) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states |= HistoryItem.STATE_SCREEN_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Screen on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mScreenOn = true;
-            mScreenOnTimer.startRunningLocked(this);
+            mScreenOnTimer.startRunningLocked(elapsedRealtime);
             if (mScreenBrightnessBin >= 0) {
-                mScreenBrightnessTimer[mScreenBrightnessBin].startRunningLocked(this);
+                mScreenBrightnessTimer[mScreenBrightnessBin].startRunningLocked(elapsedRealtime);
             }
 
+            updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), false,
+                    SystemClock.uptimeMillis() * 1000, elapsedRealtime * 1000);
+
             // Fake a wake lock, so we consider the device waked as long
             // as the screen is on.
-            noteStartWakeLocked(-1, -1, "dummy", WAKE_TYPE_PARTIAL);
-            
+            noteStartWakeLocked(-1, -1, "screen", null, WAKE_TYPE_PARTIAL, false,
+                    elapsedRealtime, uptime);
+
             // Update discharge amounts.
             if (mOnBatteryInternal) {
                 updateDischargeScreenLevelsLocked(false, true);
@@ -1942,18 +2692,24 @@
 
     public void noteScreenOffLocked() {
         if (mScreenOn) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states &= ~HistoryItem.STATE_SCREEN_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Screen off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mScreenOn = false;
-            mScreenOnTimer.stopRunningLocked(this);
+            mScreenOnTimer.stopRunningLocked(elapsedRealtime);
             if (mScreenBrightnessBin >= 0) {
-                mScreenBrightnessTimer[mScreenBrightnessBin].stopRunningLocked(this);
+                mScreenBrightnessTimer[mScreenBrightnessBin].stopRunningLocked(elapsedRealtime);
             }
 
-            noteStopWakeLocked(-1, -1, "dummy", WAKE_TYPE_PARTIAL);
-            
+            noteStopWakeLocked(-1, -1, "screen", WAKE_TYPE_PARTIAL,
+                    elapsedRealtime, uptime);
+
+            updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), true,
+                    SystemClock.uptimeMillis() * 1000, elapsedRealtime * 1000);
+
             // Update discharge amounts.
             if (mOnBatteryInternal) {
                 updateDischargeScreenLevelsLocked(true, false);
@@ -1967,16 +2723,18 @@
         if (bin < 0) bin = 0;
         else if (bin >= NUM_SCREEN_BRIGHTNESS_BINS) bin = NUM_SCREEN_BRIGHTNESS_BINS-1;
         if (mScreenBrightnessBin != bin) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states = (mHistoryCur.states&~HistoryItem.STATE_BRIGHTNESS_MASK)
                     | (bin << HistoryItem.STATE_BRIGHTNESS_SHIFT);
             if (DEBUG_HISTORY) Slog.v(TAG, "Screen brightness " + bin + " to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             if (mScreenOn) {
                 if (mScreenBrightnessBin >= 0) {
-                    mScreenBrightnessTimer[mScreenBrightnessBin].stopRunningLocked(this);
+                    mScreenBrightnessTimer[mScreenBrightnessBin].stopRunningLocked(elapsedRealtime);
                 }
-                mScreenBrightnessTimer[bin].startRunningLocked(this);
+                mScreenBrightnessTimer[bin].startRunningLocked(elapsedRealtime);
             }
             mScreenBrightnessBin = bin;
         }
@@ -1987,38 +2745,85 @@
     }
 
     public void noteUserActivityLocked(int uid, int event) {
-        getUidStatsLocked(uid).noteUserActivityLocked(event);
+        if (mOnBatteryInternal) {
+            uid = mapUid(uid);
+            getUidStatsLocked(uid).noteUserActivityLocked(event);
+        }
+    }
+
+    public void noteMobileRadioPowerState(int powerState, long timestampNs) {
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
+        if (mMobileRadioPowerState != powerState) {
+            long realElapsedRealtimeMs;
+            final boolean active =
+                    powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_MEDIUM
+                            || powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH;
+            if (active) {
+                realElapsedRealtimeMs = elapsedRealtime;
+                mHistoryCur.states |= HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG;
+            } else {
+                realElapsedRealtimeMs = timestampNs / (1000*1000);
+                long lastUpdateTimeMs = mMobileRadioActiveTimer.getLastUpdateTimeMs();
+                if (realElapsedRealtimeMs < lastUpdateTimeMs) {
+                    Slog.wtf(TAG, "Data connection inactive timestamp " + realElapsedRealtimeMs
+                            + " is before start time " + lastUpdateTimeMs);
+                    realElapsedRealtimeMs = elapsedRealtime;
+                } else if (realElapsedRealtimeMs < elapsedRealtime) {
+                    mMobileRadioActiveAdjustedTime.addCountLocked(elapsedRealtime
+                            - realElapsedRealtimeMs);
+                }
+                mHistoryCur.states &= ~HistoryItem.STATE_MOBILE_RADIO_ACTIVE_FLAG;
+            }
+            if (DEBUG_HISTORY) Slog.v(TAG, "Mobile network active " + active + " to: "
+                    + Integer.toHexString(mHistoryCur.states));
+            addHistoryRecordLocked(elapsedRealtime, uptime);
+            mMobileRadioPowerState = powerState;
+            if (active) {
+                mMobileRadioActiveTimer.startRunningLocked(elapsedRealtime);
+                mMobileRadioActivePerAppTimer.startRunningLocked(elapsedRealtime);
+            } else {
+                mMobileRadioActiveTimer.stopRunningLocked(realElapsedRealtimeMs);
+                updateNetworkActivityLocked(NET_UPDATE_MOBILE, realElapsedRealtimeMs);
+                mMobileRadioActivePerAppTimer.stopRunningLocked(realElapsedRealtimeMs);
+            }
+        }
     }
 
     public void notePhoneOnLocked() {
         if (!mPhoneOn) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states |= HistoryItem.STATE_PHONE_IN_CALL_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Phone on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mPhoneOn = true;
-            mPhoneOnTimer.startRunningLocked(this);
+            mPhoneOnTimer.startRunningLocked(elapsedRealtime);
         }
     }
 
     public void notePhoneOffLocked() {
         if (mPhoneOn) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states &= ~HistoryItem.STATE_PHONE_IN_CALL_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Phone off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mPhoneOn = false;
-            mPhoneOnTimer.stopRunningLocked(this);
+            mPhoneOnTimer.stopRunningLocked(elapsedRealtime);
         }
     }
 
     void stopAllSignalStrengthTimersLocked(int except) {
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
         for (int i = 0; i < SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
             if (i == except) {
                 continue;
             }
             while (mPhoneSignalStrengthsTimer[i].isRunningLocked()) {
-                mPhoneSignalStrengthsTimer[i].stopRunningLocked(this);
+                mPhoneSignalStrengthsTimer[i].stopRunningLocked(elapsedRealtime);
             }
         }
     }
@@ -2036,26 +2841,29 @@
         return state;
     }
 
-    private void updateAllPhoneStateLocked(int state, int simState, int bin) {
+    private void updateAllPhoneStateLocked(int state, int simState, int strengthBin) {
         boolean scanning = false;
         boolean newHistory = false;
 
         mPhoneServiceStateRaw = state;
         mPhoneSimStateRaw = simState;
-        mPhoneSignalStrengthBinRaw = bin;
+        mPhoneSignalStrengthBinRaw = strengthBin;
+
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
 
         if (simState == TelephonyManager.SIM_STATE_ABSENT) {
             // In this case we will always be STATE_OUT_OF_SERVICE, so need
             // to infer that we are scanning from other data.
             if (state == ServiceState.STATE_OUT_OF_SERVICE
-                    && bin > SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
+                    && strengthBin > SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN) {
                 state = ServiceState.STATE_IN_SERVICE;
             }
         }
 
         // If the phone is powered off, stop all timers.
         if (state == ServiceState.STATE_POWER_OFF) {
-            bin = -1;
+            strengthBin = -1;
 
         // If we are in service, make sure the correct signal string timer is running.
         } else if (state == ServiceState.STATE_IN_SERVICE) {
@@ -2065,13 +2873,13 @@
         // bin and have the scanning bit set.
         } else if (state == ServiceState.STATE_OUT_OF_SERVICE) {
             scanning = true;
-            bin = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
+            strengthBin = SignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN;
             if (!mPhoneSignalScanningTimer.isRunningLocked()) {
                 mHistoryCur.states |= HistoryItem.STATE_PHONE_SCANNING_FLAG;
                 newHistory = true;
                 if (DEBUG_HISTORY) Slog.v(TAG, "Phone started scanning to: "
                         + Integer.toHexString(mHistoryCur.states));
-                mPhoneSignalScanningTimer.startRunningLocked(this);
+                mPhoneSignalScanningTimer.startRunningLocked(elapsedRealtime);
             }
         }
 
@@ -2082,7 +2890,7 @@
                 if (DEBUG_HISTORY) Slog.v(TAG, "Phone stopped scanning to: "
                         + Integer.toHexString(mHistoryCur.states));
                 newHistory = true;
-                mPhoneSignalScanningTimer.stopRunningLocked(this);
+                mPhoneSignalScanningTimer.stopRunningLocked(elapsedRealtime);
             }
         }
 
@@ -2095,27 +2903,28 @@
             mPhoneServiceState = state;
         }
 
-        if (mPhoneSignalStrengthBin != bin) {
+        if (mPhoneSignalStrengthBin != strengthBin) {
             if (mPhoneSignalStrengthBin >= 0) {
-                mPhoneSignalStrengthsTimer[mPhoneSignalStrengthBin].stopRunningLocked(this);
+                mPhoneSignalStrengthsTimer[mPhoneSignalStrengthBin].stopRunningLocked(
+                        elapsedRealtime);
             }
-            if (bin >= 0) {
-                if (!mPhoneSignalStrengthsTimer[bin].isRunningLocked()) {
-                    mPhoneSignalStrengthsTimer[bin].startRunningLocked(this);
+            if (strengthBin >= 0) {
+                if (!mPhoneSignalStrengthsTimer[strengthBin].isRunningLocked()) {
+                    mPhoneSignalStrengthsTimer[strengthBin].startRunningLocked(elapsedRealtime);
                 }
                 mHistoryCur.states = (mHistoryCur.states&~HistoryItem.STATE_SIGNAL_STRENGTH_MASK)
-                        | (bin << HistoryItem.STATE_SIGNAL_STRENGTH_SHIFT);
-                if (DEBUG_HISTORY) Slog.v(TAG, "Signal strength " + bin + " to: "
+                        | (strengthBin << HistoryItem.STATE_SIGNAL_STRENGTH_SHIFT);
+                if (DEBUG_HISTORY) Slog.v(TAG, "Signal strength " + strengthBin + " to: "
                         + Integer.toHexString(mHistoryCur.states));
                 newHistory = true;
             } else {
                 stopAllSignalStrengthTimersLocked(-1);
             }
-            mPhoneSignalStrengthBin = bin;
+            mPhoneSignalStrengthBin = strengthBin;
         }
 
         if (newHistory) {
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
     }
 
@@ -2189,120 +2998,142 @@
         }
         if (DEBUG) Log.i(TAG, "Phone Data Connection -> " + dataType + " = " + hasData);
         if (mPhoneDataConnectionType != bin) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states = (mHistoryCur.states&~HistoryItem.STATE_DATA_CONNECTION_MASK)
                     | (bin << HistoryItem.STATE_DATA_CONNECTION_SHIFT);
             if (DEBUG_HISTORY) Slog.v(TAG, "Data connection " + bin + " to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             if (mPhoneDataConnectionType >= 0) {
-                mPhoneDataConnectionsTimer[mPhoneDataConnectionType].stopRunningLocked(this);
+                mPhoneDataConnectionsTimer[mPhoneDataConnectionType].stopRunningLocked(
+                        elapsedRealtime);
             }
             mPhoneDataConnectionType = bin;
-            mPhoneDataConnectionsTimer[bin].startRunningLocked(this);
+            mPhoneDataConnectionsTimer[bin].startRunningLocked(elapsedRealtime);
         }
     }
 
     public void noteWifiOnLocked() {
         if (!mWifiOn) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states |= HistoryItem.STATE_WIFI_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mWifiOn = true;
-            mWifiOnTimer.startRunningLocked(this);
+            mWifiOnTimer.startRunningLocked(elapsedRealtime);
         }
     }
 
     public void noteWifiOffLocked() {
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mWifiOn) {
             mHistoryCur.states &= ~HistoryItem.STATE_WIFI_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mWifiOn = false;
-            mWifiOnTimer.stopRunningLocked(this);
-        }
-        if (mWifiOnUid >= 0) {
-            getUidStatsLocked(mWifiOnUid).noteWifiStoppedLocked();
-            mWifiOnUid = -1;
+            mWifiOnTimer.stopRunningLocked(elapsedRealtime);
         }
     }
 
     public void noteAudioOnLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (!mAudioOn) {
             mHistoryCur.states |= HistoryItem.STATE_AUDIO_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Audio on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mAudioOn = true;
-            mAudioOnTimer.startRunningLocked(this);
+            mAudioOnTimer.startRunningLocked(elapsedRealtime);
         }
-        getUidStatsLocked(uid).noteAudioTurnedOnLocked();
+        getUidStatsLocked(uid).noteAudioTurnedOnLocked(elapsedRealtime);
     }
 
     public void noteAudioOffLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mAudioOn) {
             mHistoryCur.states &= ~HistoryItem.STATE_AUDIO_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Audio off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mAudioOn = false;
-            mAudioOnTimer.stopRunningLocked(this);
+            mAudioOnTimer.stopRunningLocked(elapsedRealtime);
         }
-        getUidStatsLocked(uid).noteAudioTurnedOffLocked();
+        getUidStatsLocked(uid).noteAudioTurnedOffLocked(elapsedRealtime);
     }
 
     public void noteVideoOnLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (!mVideoOn) {
-            mHistoryCur.states |= HistoryItem.STATE_VIDEO_ON_FLAG;
+            mHistoryCur.states2 |= HistoryItem.STATE2_VIDEO_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Video on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mVideoOn = true;
-            mVideoOnTimer.startRunningLocked(this);
+            mVideoOnTimer.startRunningLocked(elapsedRealtime);
         }
-        getUidStatsLocked(uid).noteVideoTurnedOnLocked();
+        getUidStatsLocked(uid).noteVideoTurnedOnLocked(elapsedRealtime);
     }
 
     public void noteVideoOffLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mVideoOn) {
-            mHistoryCur.states &= ~HistoryItem.STATE_VIDEO_ON_FLAG;
+            mHistoryCur.states2 &= ~HistoryItem.STATE2_VIDEO_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Video off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mVideoOn = false;
-            mVideoOnTimer.stopRunningLocked(this);
+            mVideoOnTimer.stopRunningLocked(elapsedRealtime);
         }
-        getUidStatsLocked(uid).noteVideoTurnedOffLocked();
+        getUidStatsLocked(uid).noteVideoTurnedOffLocked(elapsedRealtime);
     }
 
     public void noteActivityResumedLocked(int uid) {
-        getUidStatsLocked(uid).noteActivityResumedLocked();
+        uid = mapUid(uid);
+        getUidStatsLocked(uid).noteActivityResumedLocked(SystemClock.elapsedRealtime());
     }
 
     public void noteActivityPausedLocked(int uid) {
-        getUidStatsLocked(uid).noteActivityPausedLocked();
+        uid = mapUid(uid);
+        getUidStatsLocked(uid).noteActivityPausedLocked(SystemClock.elapsedRealtime());
     }
 
     public void noteVibratorOnLocked(int uid, long durationMillis) {
+        uid = mapUid(uid);
         getUidStatsLocked(uid).noteVibratorOnLocked(durationMillis);
     }
 
     public void noteVibratorOffLocked(int uid) {
+        uid = mapUid(uid);
         getUidStatsLocked(uid).noteVibratorOffLocked();
     }
 
     public void noteWifiRunningLocked(WorkSource ws) {
         if (!mGlobalWifiRunning) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states |= HistoryItem.STATE_WIFI_RUNNING_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI running to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mGlobalWifiRunning = true;
-            mGlobalWifiRunningTimer.startRunningLocked(this);
+            mGlobalWifiRunningTimer.startRunningLocked(elapsedRealtime);
             int N = ws.size();
             for (int i=0; i<N; i++) {
-                getUidStatsLocked(ws.get(i)).noteWifiRunningLocked();
+                int uid = mapUid(ws.get(i));
+                getUidStatsLocked(uid).noteWifiRunningLocked(elapsedRealtime);
             }
         } else {
             Log.w(TAG, "noteWifiRunningLocked -- called while WIFI running");
@@ -2311,13 +3142,16 @@
 
     public void noteWifiRunningChangedLocked(WorkSource oldWs, WorkSource newWs) {
         if (mGlobalWifiRunning) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
             int N = oldWs.size();
             for (int i=0; i<N; i++) {
-                getUidStatsLocked(oldWs.get(i)).noteWifiStoppedLocked();
+                int uid = mapUid(oldWs.get(i));
+                getUidStatsLocked(uid).noteWifiStoppedLocked(elapsedRealtime);
             }
             N = newWs.size();
             for (int i=0; i<N; i++) {
-                getUidStatsLocked(newWs.get(i)).noteWifiRunningLocked();
+                int uid = mapUid(newWs.get(i));
+                getUidStatsLocked(uid).noteWifiRunningLocked(elapsedRealtime);
             }
         } else {
             Log.w(TAG, "noteWifiRunningChangedLocked -- called while WIFI not running");
@@ -2326,121 +3160,174 @@
 
     public void noteWifiStoppedLocked(WorkSource ws) {
         if (mGlobalWifiRunning) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states &= ~HistoryItem.STATE_WIFI_RUNNING_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI stopped to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mGlobalWifiRunning = false;
-            mGlobalWifiRunningTimer.stopRunningLocked(this);
+            mGlobalWifiRunningTimer.stopRunningLocked(elapsedRealtime);
             int N = ws.size();
             for (int i=0; i<N; i++) {
-                getUidStatsLocked(ws.get(i)).noteWifiStoppedLocked();
+                int uid = mapUid(ws.get(i));
+                getUidStatsLocked(uid).noteWifiStoppedLocked(elapsedRealtime);
             }
         } else {
             Log.w(TAG, "noteWifiStoppedLocked -- called while WIFI not running");
         }
     }
 
+    public void noteWifiStateLocked(int wifiState, String accessPoint) {
+        if (DEBUG) Log.i(TAG, "WiFi state -> " + wifiState);
+        if (mWifiState != wifiState) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            if (mWifiState >= 0) {
+                mWifiStateTimer[mWifiState].stopRunningLocked(elapsedRealtime);
+            }
+            mWifiState = wifiState;
+            mWifiStateTimer[wifiState].startRunningLocked(elapsedRealtime);
+        }
+    }
+
     public void noteBluetoothOnLocked() {
         if (!mBluetoothOn) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states |= HistoryItem.STATE_BLUETOOTH_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Bluetooth on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mBluetoothOn = true;
-            mBluetoothOnTimer.startRunningLocked(this);
+            mBluetoothOnTimer.startRunningLocked(elapsedRealtime);
         }
     }
 
     public void noteBluetoothOffLocked() {
         if (mBluetoothOn) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
             mHistoryCur.states &= ~HistoryItem.STATE_BLUETOOTH_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Bluetooth off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
             mBluetoothOn = false;
-            mBluetoothOnTimer.stopRunningLocked(this);
+            mBluetoothOnTimer.stopRunningLocked(elapsedRealtime);
+        }
+    }
+
+    public void noteBluetoothStateLocked(int bluetoothState) {
+        if (DEBUG) Log.i(TAG, "Bluetooth state -> " + bluetoothState);
+        if (mBluetoothState != bluetoothState) {
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            if (mBluetoothState >= 0) {
+                mBluetoothStateTimer[mBluetoothState].stopRunningLocked(elapsedRealtime);
+            }
+            mBluetoothState = bluetoothState;
+            mBluetoothStateTimer[bluetoothState].startRunningLocked(elapsedRealtime);
         }
     }
 
     int mWifiFullLockNesting = 0;
 
     public void noteFullWifiLockAcquiredLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mWifiFullLockNesting == 0) {
             mHistoryCur.states |= HistoryItem.STATE_WIFI_FULL_LOCK_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI full lock on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
         mWifiFullLockNesting++;
-        getUidStatsLocked(uid).noteFullWifiLockAcquiredLocked();
+        getUidStatsLocked(uid).noteFullWifiLockAcquiredLocked(elapsedRealtime);
     }
 
     public void noteFullWifiLockReleasedLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         mWifiFullLockNesting--;
         if (mWifiFullLockNesting == 0) {
             mHistoryCur.states &= ~HistoryItem.STATE_WIFI_FULL_LOCK_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI full lock off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
-        getUidStatsLocked(uid).noteFullWifiLockReleasedLocked();
+        getUidStatsLocked(uid).noteFullWifiLockReleasedLocked(elapsedRealtime);
     }
 
     int mWifiScanNesting = 0;
 
     public void noteWifiScanStartedLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mWifiScanNesting == 0) {
             mHistoryCur.states |= HistoryItem.STATE_WIFI_SCAN_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan started for: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
         mWifiScanNesting++;
-        getUidStatsLocked(uid).noteWifiScanStartedLocked();
+        getUidStatsLocked(uid).noteWifiScanStartedLocked(elapsedRealtime);
     }
 
     public void noteWifiScanStoppedLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         mWifiScanNesting--;
         if (mWifiScanNesting == 0) {
             mHistoryCur.states &= ~HistoryItem.STATE_WIFI_SCAN_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan stopped for: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
-        getUidStatsLocked(uid).noteWifiScanStoppedLocked();
+        getUidStatsLocked(uid).noteWifiScanStoppedLocked(elapsedRealtime);
     }
 
     public void noteWifiBatchedScanStartedLocked(int uid, int csph) {
-        getUidStatsLocked(uid).noteWifiBatchedScanStartedLocked(csph);
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        getUidStatsLocked(uid).noteWifiBatchedScanStartedLocked(csph, elapsedRealtime);
     }
 
     public void noteWifiBatchedScanStoppedLocked(int uid) {
-        getUidStatsLocked(uid).noteWifiBatchedScanStoppedLocked();
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        getUidStatsLocked(uid).noteWifiBatchedScanStoppedLocked(elapsedRealtime);
     }
 
     int mWifiMulticastNesting = 0;
 
     public void noteWifiMulticastEnabledLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         if (mWifiMulticastNesting == 0) {
             mHistoryCur.states |= HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI multicast on to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
         mWifiMulticastNesting++;
-        getUidStatsLocked(uid).noteWifiMulticastEnabledLocked();
+        getUidStatsLocked(uid).noteWifiMulticastEnabledLocked(elapsedRealtime);
     }
 
     public void noteWifiMulticastDisabledLocked(int uid) {
+        uid = mapUid(uid);
+        final long elapsedRealtime = SystemClock.elapsedRealtime();
+        final long uptime = SystemClock.uptimeMillis();
         mWifiMulticastNesting--;
         if (mWifiMulticastNesting == 0) {
             mHistoryCur.states &= ~HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "WIFI multicast off to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(SystemClock.elapsedRealtime());
+            addHistoryRecordLocked(elapsedRealtime, uptime);
         }
-        getUidStatsLocked(uid).noteWifiMulticastDisabledLocked();
+        getUidStatsLocked(uid).noteWifiMulticastDisabledLocked(elapsedRealtime);
     }
 
     public void noteFullWifiLockAcquiredFromSourceLocked(WorkSource ws) {
@@ -2499,16 +3386,45 @@
         }
     }
 
+    private static String[] includeInStringArray(String[] array, String str) {
+        if (ArrayUtils.indexOf(array, str) >= 0) {
+            return array;
+        }
+        String[] newArray = new String[array.length+1];
+        System.arraycopy(array, 0, newArray, 0, array.length);
+        newArray[array.length] = str;
+        return newArray;
+    }
+
+    private static String[] excludeFromStringArray(String[] array, String str) {
+        int index = ArrayUtils.indexOf(array, str);
+        if (index >= 0) {
+            String[] newArray = new String[array.length-1];
+            if (index > 0) {
+                System.arraycopy(array, 0, newArray, 0, index);
+            }
+            if (index < array.length-1) {
+                System.arraycopy(array, index+1, newArray, index, array.length-index-1);
+            }
+            return newArray;
+        }
+        return array;
+    }
+
     public void noteNetworkInterfaceTypeLocked(String iface, int networkType) {
         if (ConnectivityManager.isNetworkTypeMobile(networkType)) {
-            mMobileIfaces.add(iface);
+            mMobileIfaces = includeInStringArray(mMobileIfaces, iface);
+            if (DEBUG) Slog.d(TAG, "Note mobile iface " + iface + ": " + mMobileIfaces);
         } else {
-            mMobileIfaces.remove(iface);
+            mMobileIfaces = excludeFromStringArray(mMobileIfaces, iface);
+            if (DEBUG) Slog.d(TAG, "Note non-mobile iface " + iface + ": " + mMobileIfaces);
         }
         if (ConnectivityManager.isNetworkTypeWifi(networkType)) {
-            mWifiIfaces.add(iface);
+            mWifiIfaces = includeInStringArray(mWifiIfaces, iface);
+            if (DEBUG) Slog.d(TAG, "Note wifi iface " + iface + ": " + mWifiIfaces);
         } else {
-            mWifiIfaces.remove(iface);
+            mWifiIfaces = excludeFromStringArray(mWifiIfaces, iface);
+            if (DEBUG) Slog.d(TAG, "Note non-wifi iface " + iface + ": " + mWifiIfaces);
         }
     }
 
@@ -2516,37 +3432,45 @@
         // During device boot, qtaguid isn't enabled until after the inital
         // loading of battery stats. Now that they're enabled, take our initial
         // snapshot for future delta calculation.
-        updateNetworkActivityLocked();
+        updateNetworkActivityLocked(NET_UPDATE_ALL, SystemClock.elapsedRealtime());
     }
 
-    @Override public long getScreenOnTime(long batteryRealtime, int which) {
-        return mScreenOnTimer.getTotalTimeLocked(batteryRealtime, which);
+    @Override public long getScreenOnTime(long elapsedRealtimeUs, int which) {
+        return mScreenOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
+    }
+
+    @Override public int getScreenOnCount(int which) {
+        return mScreenOnTimer.getCountLocked(which);
     }
 
     @Override public long getScreenBrightnessTime(int brightnessBin,
-            long batteryRealtime, int which) {
+            long elapsedRealtimeUs, int which) {
         return mScreenBrightnessTimer[brightnessBin].getTotalTimeLocked(
-                batteryRealtime, which);
+                elapsedRealtimeUs, which);
     }
 
     @Override public int getInputEventCount(int which) {
         return mInputEventCounter.getCountLocked(which);
     }
 
-    @Override public long getPhoneOnTime(long batteryRealtime, int which) {
-        return mPhoneOnTimer.getTotalTimeLocked(batteryRealtime, which);
+    @Override public long getPhoneOnTime(long elapsedRealtimeUs, int which) {
+        return mPhoneOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
+    }
+
+    @Override public int getPhoneOnCount(int which) {
+        return mPhoneOnTimer.getCountLocked(which);
     }
 
     @Override public long getPhoneSignalStrengthTime(int strengthBin,
-            long batteryRealtime, int which) {
+            long elapsedRealtimeUs, int which) {
         return mPhoneSignalStrengthsTimer[strengthBin].getTotalTimeLocked(
-                batteryRealtime, which);
+                elapsedRealtimeUs, which);
     }
 
     @Override public long getPhoneSignalScanningTime(
-            long batteryRealtime, int which) {
+            long elapsedRealtimeUs, int which) {
         return mPhoneSignalScanningTimer.getTotalTimeLocked(
-                batteryRealtime, which);
+                elapsedRealtimeUs, which);
     }
 
     @Override public int getPhoneSignalStrengthCount(int strengthBin, int which) {
@@ -2554,36 +3478,89 @@
     }
 
     @Override public long getPhoneDataConnectionTime(int dataType,
-            long batteryRealtime, int which) {
+            long elapsedRealtimeUs, int which) {
         return mPhoneDataConnectionsTimer[dataType].getTotalTimeLocked(
-                batteryRealtime, which);
+                elapsedRealtimeUs, which);
     }
 
     @Override public int getPhoneDataConnectionCount(int dataType, int which) {
         return mPhoneDataConnectionsTimer[dataType].getCountLocked(which);
     }
 
-    @Override public long getWifiOnTime(long batteryRealtime, int which) {
-        return mWifiOnTimer.getTotalTimeLocked(batteryRealtime, which);
+    @Override public long getMobileRadioActiveTime(long elapsedRealtimeUs, int which) {
+        return mMobileRadioActiveTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
     }
 
-    @Override public long getGlobalWifiRunningTime(long batteryRealtime, int which) {
-        return mGlobalWifiRunningTimer.getTotalTimeLocked(batteryRealtime, which);
+    @Override public int getMobileRadioActiveCount(int which) {
+        return mMobileRadioActiveTimer.getCountLocked(which);
     }
 
-    @Override public long getBluetoothOnTime(long batteryRealtime, int which) {
-        return mBluetoothOnTimer.getTotalTimeLocked(batteryRealtime, which);
+    @Override public long getMobileRadioActiveAdjustedTime(int which) {
+        return mMobileRadioActiveAdjustedTime.getCountLocked(which);
+    }
+
+    @Override public long getMobileRadioActiveUnknownTime(int which) {
+        return mMobileRadioActiveUnknownTime.getCountLocked(which);
+    }
+
+    @Override public int getMobileRadioActiveUnknownCount(int which) {
+        return (int)mMobileRadioActiveUnknownCount.getCountLocked(which);
+    }
+
+    @Override public long getWifiOnTime(long elapsedRealtimeUs, int which) {
+        return mWifiOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
+    }
+
+    @Override public long getGlobalWifiRunningTime(long elapsedRealtimeUs, int which) {
+        return mGlobalWifiRunningTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
+    }
+
+    @Override public long getWifiStateTime(int wifiState,
+            long elapsedRealtimeUs, int which) {
+        return mWifiStateTimer[wifiState].getTotalTimeLocked(
+                elapsedRealtimeUs, which);
+    }
+
+    @Override public int getWifiStateCount(int wifiState, int which) {
+        return mWifiStateTimer[wifiState].getCountLocked(which);
+    }
+
+    @Override public long getBluetoothOnTime(long elapsedRealtimeUs, int which) {
+        return mBluetoothOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
+    }
+
+    @Override public long getBluetoothStateTime(int bluetoothState,
+            long elapsedRealtimeUs, int which) {
+        return mBluetoothStateTimer[bluetoothState].getTotalTimeLocked(
+                elapsedRealtimeUs, which);
+    }
+
+    @Override public int getBluetoothStateCount(int bluetoothState, int which) {
+        return mBluetoothStateTimer[bluetoothState].getCountLocked(which);
     }
 
     @Override
-    public long getNetworkActivityCount(int type, int which) {
-        if (type >= 0 && type < mNetworkActivityCounters.length) {
-            return mNetworkActivityCounters[type].getCountLocked(which);
+    public long getNetworkActivityBytes(int type, int which) {
+        if (type >= 0 && type < mNetworkByteActivityCounters.length) {
+            return mNetworkByteActivityCounters[type].getCountLocked(which);
         } else {
             return 0;
         }
     }
 
+    @Override
+    public long getNetworkActivityPackets(int type, int which) {
+        if (type >= 0 && type < mNetworkPacketActivityCounters.length) {
+            return mNetworkPacketActivityCounters[type].getCountLocked(which);
+        } else {
+            return 0;
+        }
+    }
+
+    @Override public long getStartClockTime() {
+        return mStartClockTime;
+    }
+
     @Override public boolean getIsOnBattery() {
         return mOnBattery;
     }
@@ -2627,7 +3604,10 @@
 
         Counter[] mUserActivityCounters;
 
-        LongSamplingCounter[] mNetworkActivityCounters;
+        LongSamplingCounter[] mNetworkByteActivityCounters;
+        LongSamplingCounter[] mNetworkPacketActivityCounters;
+        LongSamplingCounter mMobileRadioActiveTime;
+        LongSamplingCounter mMobileRadioActiveCount;
 
         /**
          * The statistics we have collected for this uid's wake locks.
@@ -2657,14 +3637,14 @@
         public Uid(int uid) {
             mUid = uid;
             mWifiRunningTimer = new StopwatchTimer(Uid.this, WIFI_RUNNING,
-                    mWifiRunningTimers, mUnpluggables);
+                    mWifiRunningTimers, mOnBatteryTimeBase);
             mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK,
-                    mFullWifiLockTimers, mUnpluggables);
+                    mFullWifiLockTimers, mOnBatteryTimeBase);
             mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN,
-                    mWifiScanTimers, mUnpluggables);
+                    mWifiScanTimers, mOnBatteryTimeBase);
             mWifiBatchedScanTimer = new StopwatchTimer[NUM_WIFI_BATCHED_SCAN_BINS];
             mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED,
-                    mWifiMulticastTimers, mUnpluggables);
+                    mWifiMulticastTimers, mOnBatteryTimeBase);
         }
 
         @Override
@@ -2693,67 +3673,67 @@
         }
 
         @Override
-        public void noteWifiRunningLocked() {
+        public void noteWifiRunningLocked(long elapsedRealtimeMs) {
             if (!mWifiRunning) {
                 mWifiRunning = true;
                 if (mWifiRunningTimer == null) {
                     mWifiRunningTimer = new StopwatchTimer(Uid.this, WIFI_RUNNING,
-                            mWifiRunningTimers, mUnpluggables);
+                            mWifiRunningTimers, mOnBatteryTimeBase);
                 }
-                mWifiRunningTimer.startRunningLocked(BatteryStatsImpl.this);
+                mWifiRunningTimer.startRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteWifiStoppedLocked() {
+        public void noteWifiStoppedLocked(long elapsedRealtimeMs) {
             if (mWifiRunning) {
                 mWifiRunning = false;
-                mWifiRunningTimer.stopRunningLocked(BatteryStatsImpl.this);
+                mWifiRunningTimer.stopRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteFullWifiLockAcquiredLocked() {
+        public void noteFullWifiLockAcquiredLocked(long elapsedRealtimeMs) {
             if (!mFullWifiLockOut) {
                 mFullWifiLockOut = true;
                 if (mFullWifiLockTimer == null) {
                     mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK,
-                            mFullWifiLockTimers, mUnpluggables);
+                            mFullWifiLockTimers, mOnBatteryTimeBase);
                 }
-                mFullWifiLockTimer.startRunningLocked(BatteryStatsImpl.this);
+                mFullWifiLockTimer.startRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteFullWifiLockReleasedLocked() {
+        public void noteFullWifiLockReleasedLocked(long elapsedRealtimeMs) {
             if (mFullWifiLockOut) {
                 mFullWifiLockOut = false;
-                mFullWifiLockTimer.stopRunningLocked(BatteryStatsImpl.this);
+                mFullWifiLockTimer.stopRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteWifiScanStartedLocked() {
+        public void noteWifiScanStartedLocked(long elapsedRealtimeMs) {
             if (!mWifiScanStarted) {
                 mWifiScanStarted = true;
                 if (mWifiScanTimer == null) {
                     mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN,
-                            mWifiScanTimers, mUnpluggables);
+                            mWifiScanTimers, mOnBatteryTimeBase);
                 }
-                mWifiScanTimer.startRunningLocked(BatteryStatsImpl.this);
+                mWifiScanTimer.startRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteWifiScanStoppedLocked() {
+        public void noteWifiScanStoppedLocked(long elapsedRealtimeMs) {
             if (mWifiScanStarted) {
                 mWifiScanStarted = false;
-                mWifiScanTimer.stopRunningLocked(BatteryStatsImpl.this);
+                mWifiScanTimer.stopRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteWifiBatchedScanStartedLocked(int csph) {
+        public void noteWifiBatchedScanStartedLocked(int csph, long elapsedRealtimeMs) {
             int bin = 0;
             while (csph > 8 && bin < NUM_WIFI_BATCHED_SCAN_BINS) {
                 csph = csph >> 3;
@@ -2764,66 +3744,66 @@
 
             if (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED) {
                 mWifiBatchedScanTimer[mWifiBatchedScanBinStarted].
-                        stopRunningLocked(BatteryStatsImpl.this);
+                        stopRunningLocked(elapsedRealtimeMs);
             }
             mWifiBatchedScanBinStarted = bin;
             if (mWifiBatchedScanTimer[bin] == null) {
                 makeWifiBatchedScanBin(bin, null);
             }
-            mWifiBatchedScanTimer[bin].startRunningLocked(BatteryStatsImpl.this);
+            mWifiBatchedScanTimer[bin].startRunningLocked(elapsedRealtimeMs);
         }
 
         @Override
-        public void noteWifiBatchedScanStoppedLocked() {
+        public void noteWifiBatchedScanStoppedLocked(long elapsedRealtimeMs) {
             if (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED) {
                 mWifiBatchedScanTimer[mWifiBatchedScanBinStarted].
-                        stopRunningLocked(BatteryStatsImpl.this);
+                        stopRunningLocked(elapsedRealtimeMs);
                 mWifiBatchedScanBinStarted = NO_BATCHED_SCAN_STARTED;
             }
         }
 
         @Override
-        public void noteWifiMulticastEnabledLocked() {
+        public void noteWifiMulticastEnabledLocked(long elapsedRealtimeMs) {
             if (!mWifiMulticastEnabled) {
                 mWifiMulticastEnabled = true;
                 if (mWifiMulticastTimer == null) {
                     mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED,
-                            mWifiMulticastTimers, mUnpluggables);
+                            mWifiMulticastTimers, mOnBatteryTimeBase);
                 }
-                mWifiMulticastTimer.startRunningLocked(BatteryStatsImpl.this);
+                mWifiMulticastTimer.startRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteWifiMulticastDisabledLocked() {
+        public void noteWifiMulticastDisabledLocked(long elapsedRealtimeMs) {
             if (mWifiMulticastEnabled) {
                 mWifiMulticastEnabled = false;
-                mWifiMulticastTimer.stopRunningLocked(BatteryStatsImpl.this);
+                mWifiMulticastTimer.stopRunningLocked(elapsedRealtimeMs);
             }
         }
 
         public StopwatchTimer createAudioTurnedOnTimerLocked() {
             if (mAudioTurnedOnTimer == null) {
                 mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON,
-                        null, mUnpluggables);
+                        null, mOnBatteryTimeBase);
             }
             return mAudioTurnedOnTimer;
         }
 
         @Override
-        public void noteAudioTurnedOnLocked() {
+        public void noteAudioTurnedOnLocked(long elapsedRealtimeMs) {
             if (!mAudioTurnedOn) {
                 mAudioTurnedOn = true;
-                createAudioTurnedOnTimerLocked().startRunningLocked(BatteryStatsImpl.this);
+                createAudioTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteAudioTurnedOffLocked() {
+        public void noteAudioTurnedOffLocked(long elapsedRealtimeMs) {
             if (mAudioTurnedOn) {
                 mAudioTurnedOn = false;
                 if (mAudioTurnedOnTimer != null) {
-                    mAudioTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this);
+                    mAudioTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs);
                 }
             }
         }
@@ -2831,25 +3811,25 @@
         public StopwatchTimer createVideoTurnedOnTimerLocked() {
             if (mVideoTurnedOnTimer == null) {
                 mVideoTurnedOnTimer = new StopwatchTimer(Uid.this, VIDEO_TURNED_ON,
-                        null, mUnpluggables);
+                        null, mOnBatteryTimeBase);
             }
             return mVideoTurnedOnTimer;
         }
 
         @Override
-        public void noteVideoTurnedOnLocked() {
+        public void noteVideoTurnedOnLocked(long elapsedRealtimeMs) {
             if (!mVideoTurnedOn) {
                 mVideoTurnedOn = true;
-                createVideoTurnedOnTimerLocked().startRunningLocked(BatteryStatsImpl.this);
+                createVideoTurnedOnTimerLocked().startRunningLocked(elapsedRealtimeMs);
             }
         }
 
         @Override
-        public void noteVideoTurnedOffLocked() {
+        public void noteVideoTurnedOffLocked(long elapsedRealtimeMs) {
             if (mVideoTurnedOn) {
                 mVideoTurnedOn = false;
                 if (mVideoTurnedOnTimer != null) {
-                    mVideoTurnedOnTimer.stopRunningLocked(BatteryStatsImpl.this);
+                    mVideoTurnedOnTimer.stopRunningLocked(elapsedRealtimeMs);
                 }
             }
         }
@@ -2857,28 +3837,27 @@
         public StopwatchTimer createForegroundActivityTimerLocked() {
             if (mForegroundActivityTimer == null) {
                 mForegroundActivityTimer = new StopwatchTimer(
-                        Uid.this, FOREGROUND_ACTIVITY, null, mUnpluggables);
+                        Uid.this, FOREGROUND_ACTIVITY, null, mOnBatteryTimeBase);
             }
             return mForegroundActivityTimer;
         }
 
         @Override
-        public void noteActivityResumedLocked() {
+        public void noteActivityResumedLocked(long elapsedRealtimeMs) {
             // We always start, since we want multiple foreground PIDs to nest
-            createForegroundActivityTimerLocked().startRunningLocked(BatteryStatsImpl.this);
+            createForegroundActivityTimerLocked().startRunningLocked(elapsedRealtimeMs);
         }
 
         @Override
-        public void noteActivityPausedLocked() {
+        public void noteActivityPausedLocked(long elapsedRealtimeMs) {
             if (mForegroundActivityTimer != null) {
-                mForegroundActivityTimer.stopRunningLocked(BatteryStatsImpl.this);
+                mForegroundActivityTimer.stopRunningLocked(elapsedRealtimeMs);
             }
         }
 
         public BatchTimer createVibratorOnTimerLocked() {
             if (mVibratorOnTimer == null) {
-                mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON,
-                        mUnpluggables, BatteryStatsImpl.this.mOnBatteryInternal);
+                mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON, mOnBatteryTimeBase);
             }
             return mVibratorOnTimer;
         }
@@ -2894,61 +3873,60 @@
         }
 
         @Override
-        public long getWifiRunningTime(long batteryRealtime, int which) {
+        public long getWifiRunningTime(long elapsedRealtimeUs, int which) {
             if (mWifiRunningTimer == null) {
                 return 0;
             }
-            return mWifiRunningTimer.getTotalTimeLocked(batteryRealtime, which);
+            return mWifiRunningTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
         }
 
         @Override
-        public long getFullWifiLockTime(long batteryRealtime, int which) {
+        public long getFullWifiLockTime(long elapsedRealtimeUs, int which) {
             if (mFullWifiLockTimer == null) {
                 return 0;
             }
-            return mFullWifiLockTimer.getTotalTimeLocked(batteryRealtime, which);
+            return mFullWifiLockTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
         }
 
         @Override
-        public long getWifiScanTime(long batteryRealtime, int which) {
+        public long getWifiScanTime(long elapsedRealtimeUs, int which) {
             if (mWifiScanTimer == null) {
                 return 0;
             }
-            return mWifiScanTimer.getTotalTimeLocked(batteryRealtime, which);
+            return mWifiScanTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
         }
 
         @Override
-        public long getWifiBatchedScanTime(int csphBin, long batteryRealtime, int which) {
+        public long getWifiBatchedScanTime(int csphBin, long elapsedRealtimeUs, int which) {
             if (csphBin < 0 || csphBin >= NUM_WIFI_BATCHED_SCAN_BINS) return 0;
             if (mWifiBatchedScanTimer[csphBin] == null) {
                 return 0;
             }
-            return mWifiBatchedScanTimer[csphBin].getTotalTimeLocked(batteryRealtime, which);
+            return mWifiBatchedScanTimer[csphBin].getTotalTimeLocked(elapsedRealtimeUs, which);
         }
 
         @Override
-        public long getWifiMulticastTime(long batteryRealtime, int which) {
+        public long getWifiMulticastTime(long elapsedRealtimeUs, int which) {
             if (mWifiMulticastTimer == null) {
                 return 0;
             }
-            return mWifiMulticastTimer.getTotalTimeLocked(batteryRealtime,
-                                                          which);
+            return mWifiMulticastTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
         }
 
         @Override
-        public long getAudioTurnedOnTime(long batteryRealtime, int which) {
+        public long getAudioTurnedOnTime(long elapsedRealtimeUs, int which) {
             if (mAudioTurnedOnTimer == null) {
                 return 0;
             }
-            return mAudioTurnedOnTimer.getTotalTimeLocked(batteryRealtime, which);
+            return mAudioTurnedOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
         }
 
         @Override
-        public long getVideoTurnedOnTime(long batteryRealtime, int which) {
+        public long getVideoTurnedOnTime(long elapsedRealtimeUs, int which) {
             if (mVideoTurnedOnTimer == null) {
                 return 0;
             }
-            return mVideoTurnedOnTimer.getTotalTimeLocked(batteryRealtime, which);
+            return mVideoTurnedOnTimer.getTotalTimeLocked(elapsedRealtimeUs, which);
         }
 
         @Override
@@ -2997,10 +3975,10 @@
             }
             if (in == null) {
                 mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected,
-                        mUnpluggables);
+                        mOnBatteryTimeBase);
             } else {
                 mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected,
-                        mUnpluggables, in);
+                        mOnBatteryTimeBase, in);
             }
         }
 
@@ -3008,44 +3986,79 @@
         void initUserActivityLocked() {
             mUserActivityCounters = new Counter[NUM_USER_ACTIVITY_TYPES];
             for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) {
-                mUserActivityCounters[i] = new Counter(mUnpluggables);
+                mUserActivityCounters[i] = new Counter(mOnBatteryTimeBase);
             }
         }
 
-        void noteNetworkActivityLocked(int type, long delta) {
-            if (mNetworkActivityCounters == null) {
+        void noteNetworkActivityLocked(int type, long deltaBytes, long deltaPackets) {
+            if (mNetworkByteActivityCounters == null) {
                 initNetworkActivityLocked();
             }
             if (type >= 0 && type < NUM_NETWORK_ACTIVITY_TYPES) {
-                mNetworkActivityCounters[type].addCountLocked(delta);
+                mNetworkByteActivityCounters[type].addCountLocked(deltaBytes);
+                mNetworkPacketActivityCounters[type].addCountLocked(deltaPackets);
             } else {
                 Slog.w(TAG, "Unknown network activity type " + type + " was specified.",
                         new Throwable());
             }
         }
 
-        @Override
-        public boolean hasNetworkActivity() {
-            return mNetworkActivityCounters != null;
+        void noteMobileRadioActiveTimeLocked(long batteryUptime) {
+            if (mNetworkByteActivityCounters == null) {
+                initNetworkActivityLocked();
+            }
+            mMobileRadioActiveTime.addCountLocked(batteryUptime);
+            mMobileRadioActiveCount.addCountLocked(1);
         }
 
         @Override
-        public long getNetworkActivityCount(int type, int which) {
-            if (mNetworkActivityCounters != null && type >= 0
-                    && type < mNetworkActivityCounters.length) {
-                return mNetworkActivityCounters[type].getCountLocked(which);
+        public boolean hasNetworkActivity() {
+            return mNetworkByteActivityCounters != null;
+        }
+
+        @Override
+        public long getNetworkActivityBytes(int type, int which) {
+            if (mNetworkByteActivityCounters != null && type >= 0
+                    && type < mNetworkByteActivityCounters.length) {
+                return mNetworkByteActivityCounters[type].getCountLocked(which);
             } else {
                 return 0;
             }
         }
 
-        void initNetworkActivityLocked() {
-            mNetworkActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
-            for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-                mNetworkActivityCounters[i] = new LongSamplingCounter(mUnpluggables);
+        @Override
+        public long getNetworkActivityPackets(int type, int which) {
+            if (mNetworkPacketActivityCounters != null && type >= 0
+                    && type < mNetworkPacketActivityCounters.length) {
+                return mNetworkPacketActivityCounters[type].getCountLocked(which);
+            } else {
+                return 0;
             }
         }
 
+        @Override
+        public long getMobileRadioActiveTime(int which) {
+            return mMobileRadioActiveTime != null
+                    ? mMobileRadioActiveTime.getCountLocked(which) : 0;
+        }
+
+        @Override
+        public int getMobileRadioActiveCount(int which) {
+            return mMobileRadioActiveCount != null
+                    ? (int)mMobileRadioActiveCount.getCountLocked(which) : 0;
+        }
+
+        void initNetworkActivityLocked() {
+            mNetworkByteActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
+            mNetworkPacketActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
+            for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
+                mNetworkByteActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase);
+                mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase);
+            }
+            mMobileRadioActiveTime = new LongSamplingCounter(mOnBatteryTimeBase);
+            mMobileRadioActiveCount = new LongSamplingCounter(mOnBatteryTimeBase);
+        }
+
         /**
          * Clear all stats for this uid.  Returns true if the uid is completely
          * inactive so can be dropped.
@@ -3054,42 +4067,42 @@
             boolean active = false;
 
             if (mWifiRunningTimer != null) {
-                active |= !mWifiRunningTimer.reset(BatteryStatsImpl.this, false);
+                active |= !mWifiRunningTimer.reset(false);
                 active |= mWifiRunning;
             }
             if (mFullWifiLockTimer != null) {
-                active |= !mFullWifiLockTimer.reset(BatteryStatsImpl.this, false);
+                active |= !mFullWifiLockTimer.reset(false);
                 active |= mFullWifiLockOut;
             }
             if (mWifiScanTimer != null) {
-                active |= !mWifiScanTimer.reset(BatteryStatsImpl.this, false);
+                active |= !mWifiScanTimer.reset(false);
                 active |= mWifiScanStarted;
             }
             if (mWifiBatchedScanTimer != null) {
                 for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) {
                     if (mWifiBatchedScanTimer[i] != null) {
-                        active |= !mWifiBatchedScanTimer[i].reset(BatteryStatsImpl.this, false);
+                        active |= !mWifiBatchedScanTimer[i].reset(false);
                     }
                 }
                 active |= (mWifiBatchedScanBinStarted != NO_BATCHED_SCAN_STARTED);
             }
             if (mWifiMulticastTimer != null) {
-                active |= !mWifiMulticastTimer.reset(BatteryStatsImpl.this, false);
+                active |= !mWifiMulticastTimer.reset(false);
                 active |= mWifiMulticastEnabled;
             }
             if (mAudioTurnedOnTimer != null) {
-                active |= !mAudioTurnedOnTimer.reset(BatteryStatsImpl.this, false);
+                active |= !mAudioTurnedOnTimer.reset(false);
                 active |= mAudioTurnedOn;
             }
             if (mVideoTurnedOnTimer != null) {
-                active |= !mVideoTurnedOnTimer.reset(BatteryStatsImpl.this, false);
+                active |= !mVideoTurnedOnTimer.reset(false);
                 active |= mVideoTurnedOn;
             }
             if (mForegroundActivityTimer != null) {
-                active |= !mForegroundActivityTimer.reset(BatteryStatsImpl.this, false);
+                active |= !mForegroundActivityTimer.reset(false);
             }
             if (mVibratorOnTimer != null) {
-                if (mVibratorOnTimer.reset(BatteryStatsImpl.this, false)) {
+                if (mVibratorOnTimer.reset(false)) {
                     mVibratorOnTimer.detach();
                     mVibratorOnTimer = null;
                 } else {
@@ -3103,10 +4116,13 @@
                 }
             }
 
-            if (mNetworkActivityCounters != null) {
+            if (mNetworkByteActivityCounters != null) {
                 for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-                    mNetworkActivityCounters[i].reset(false);
+                    mNetworkByteActivityCounters[i].reset(false);
+                    mNetworkPacketActivityCounters[i].reset(false);
                 }
+                mMobileRadioActiveTime.reset(false);
+                mMobileRadioActiveCount.reset(false);
             }
 
             if (mWakelockStats.size() > 0) {
@@ -3142,10 +4158,12 @@
                 mProcessStats.clear();
             }
             if (mPids.size() > 0) {
-                for (int i=0; !active && i<mPids.size(); i++) {
+                for (int i=mPids.size()-1; i>=0; i--) {
                     Pid pid = mPids.valueAt(i);
-                    if (pid.mWakeStart != 0) {
+                    if (pid.mWakeNesting > 0) {
                         active = true;
+                    } else {
+                        mPids.removeAt(i);
                     }
                 }
             }
@@ -3167,8 +4185,6 @@
                 mPackageStats.clear();
             }
 
-            mPids.clear();
-
             if (!active) {
                 if (mWifiRunningTimer != null) {
                     mWifiRunningTimer.detach();
@@ -3204,29 +4220,31 @@
                         mUserActivityCounters[i].detach();
                     }
                 }
-                if (mNetworkActivityCounters != null) {
+                if (mNetworkByteActivityCounters != null) {
                     for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-                        mNetworkActivityCounters[i].detach();
+                        mNetworkByteActivityCounters[i].detach();
+                        mNetworkPacketActivityCounters[i].detach();
                     }
                 }
+                mPids.clear();
             }
 
             return !active;
         }
 
-        void writeToParcelLocked(Parcel out, long batteryRealtime) {
+        void writeToParcelLocked(Parcel out, long elapsedRealtimeUs) {
             out.writeInt(mWakelockStats.size());
             for (Map.Entry<String, Uid.Wakelock> wakelockEntry : mWakelockStats.entrySet()) {
                 out.writeString(wakelockEntry.getKey());
                 Uid.Wakelock wakelock = wakelockEntry.getValue();
-                wakelock.writeToParcelLocked(out, batteryRealtime);
+                wakelock.writeToParcelLocked(out, elapsedRealtimeUs);
             }
 
             out.writeInt(mSensorStats.size());
             for (Map.Entry<Integer, Uid.Sensor> sensorEntry : mSensorStats.entrySet()) {
                 out.writeInt(sensorEntry.getKey());
                 Uid.Sensor sensor = sensorEntry.getValue();
-                sensor.writeToParcelLocked(out, batteryRealtime);
+                sensor.writeToParcelLocked(out, elapsedRealtimeUs);
             }
 
             out.writeInt(mProcessStats.size());
@@ -3245,57 +4263,57 @@
 
             if (mWifiRunningTimer != null) {
                 out.writeInt(1);
-                mWifiRunningTimer.writeToParcel(out, batteryRealtime);
+                mWifiRunningTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
             if (mFullWifiLockTimer != null) {
                 out.writeInt(1);
-                mFullWifiLockTimer.writeToParcel(out, batteryRealtime);
+                mFullWifiLockTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
             if (mWifiScanTimer != null) {
                 out.writeInt(1);
-                mWifiScanTimer.writeToParcel(out, batteryRealtime);
+                mWifiScanTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
             for (int i = 0; i < NUM_WIFI_BATCHED_SCAN_BINS; i++) {
                 if (mWifiBatchedScanTimer[i] != null) {
                     out.writeInt(1);
-                    mWifiBatchedScanTimer[i].writeToParcel(out, batteryRealtime);
+                    mWifiBatchedScanTimer[i].writeToParcel(out, elapsedRealtimeUs);
                 } else {
                     out.writeInt(0);
                 }
             }
             if (mWifiMulticastTimer != null) {
                 out.writeInt(1);
-                mWifiMulticastTimer.writeToParcel(out, batteryRealtime);
+                mWifiMulticastTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
             if (mAudioTurnedOnTimer != null) {
                 out.writeInt(1);
-                mAudioTurnedOnTimer.writeToParcel(out, batteryRealtime);
+                mAudioTurnedOnTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
             if (mVideoTurnedOnTimer != null) {
                 out.writeInt(1);
-                mVideoTurnedOnTimer.writeToParcel(out, batteryRealtime);
+                mVideoTurnedOnTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
             if (mForegroundActivityTimer != null) {
                 out.writeInt(1);
-                mForegroundActivityTimer.writeToParcel(out, batteryRealtime);
+                mForegroundActivityTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
             if (mVibratorOnTimer != null) {
                 out.writeInt(1);
-                mVibratorOnTimer.writeToParcel(out, batteryRealtime);
+                mVibratorOnTimer.writeToParcel(out, elapsedRealtimeUs);
             } else {
                 out.writeInt(0);
             }
@@ -3307,23 +4325,26 @@
             } else {
                 out.writeInt(0);
             }
-            if (mNetworkActivityCounters != null) {
+            if (mNetworkByteActivityCounters != null) {
                 out.writeInt(1);
                 for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-                    mNetworkActivityCounters[i].writeToParcel(out);
+                    mNetworkByteActivityCounters[i].writeToParcel(out);
+                    mNetworkPacketActivityCounters[i].writeToParcel(out);
                 }
+                mMobileRadioActiveTime.writeToParcel(out);
+                mMobileRadioActiveCount.writeToParcel(out);
             } else {
                 out.writeInt(0);
             }
         }
 
-        void readFromParcelLocked(ArrayList<Unpluggable> unpluggables, Parcel in) {
+        void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, Parcel in) {
             int numWakelocks = in.readInt();
             mWakelockStats.clear();
             for (int j = 0; j < numWakelocks; j++) {
                 String wakelockName = in.readString();
                 Uid.Wakelock wakelock = new Wakelock();
-                wakelock.readFromParcelLocked(unpluggables, in);
+                wakelock.readFromParcelLocked(timeBase, screenOffTimeBase, in);
                 // We will just drop some random set of wakelocks if
                 // the previous run of the system was an older version
                 // that didn't impose a limit.
@@ -3335,7 +4356,7 @@
             for (int k = 0; k < numSensors; k++) {
                 int sensorNumber = in.readInt();
                 Uid.Sensor sensor = new Sensor(sensorNumber);
-                sensor.readFromParcelLocked(mUnpluggables, in);
+                sensor.readFromParcelLocked(mOnBatteryTimeBase, in);
                 mSensorStats.put(sensorNumber, sensor);
             }
 
@@ -3360,21 +4381,21 @@
             mWifiRunning = false;
             if (in.readInt() != 0) {
                 mWifiRunningTimer = new StopwatchTimer(Uid.this, WIFI_RUNNING,
-                        mWifiRunningTimers, mUnpluggables, in);
+                        mWifiRunningTimers, mOnBatteryTimeBase, in);
             } else {
                 mWifiRunningTimer = null;
             }
             mFullWifiLockOut = false;
             if (in.readInt() != 0) {
                 mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK,
-                        mFullWifiLockTimers, mUnpluggables, in);
+                        mFullWifiLockTimers, mOnBatteryTimeBase, in);
             } else {
                 mFullWifiLockTimer = null;
             }
             mWifiScanStarted = false;
             if (in.readInt() != 0) {
                 mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN,
-                        mWifiScanTimers, mUnpluggables, in);
+                        mWifiScanTimers, mOnBatteryTimeBase, in);
             } else {
                 mWifiScanTimer = null;
             }
@@ -3389,51 +4410,58 @@
             mWifiMulticastEnabled = false;
             if (in.readInt() != 0) {
                 mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED,
-                        mWifiMulticastTimers, mUnpluggables, in);
+                        mWifiMulticastTimers, mOnBatteryTimeBase, in);
             } else {
                 mWifiMulticastTimer = null;
             }
             mAudioTurnedOn = false;
             if (in.readInt() != 0) {
                 mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON,
-                        null, mUnpluggables, in);
+                        null, mOnBatteryTimeBase, in);
             } else {
                 mAudioTurnedOnTimer = null;
             }
             mVideoTurnedOn = false;
             if (in.readInt() != 0) {
                 mVideoTurnedOnTimer = new StopwatchTimer(Uid.this, VIDEO_TURNED_ON,
-                        null, mUnpluggables, in);
+                        null, mOnBatteryTimeBase, in);
             } else {
                 mVideoTurnedOnTimer = null;
             }
             if (in.readInt() != 0) {
                 mForegroundActivityTimer = new StopwatchTimer(
-                        Uid.this, FOREGROUND_ACTIVITY, null, mUnpluggables, in);
+                        Uid.this, FOREGROUND_ACTIVITY, null, mOnBatteryTimeBase, in);
             } else {
                 mForegroundActivityTimer = null;
             }
             if (in.readInt() != 0) {
-                mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON,
-                        mUnpluggables, BatteryStatsImpl.this.mOnBatteryInternal, in);
+                mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON, mOnBatteryTimeBase, in);
             } else {
                 mVibratorOnTimer = null;
             }
             if (in.readInt() != 0) {
                 mUserActivityCounters = new Counter[NUM_USER_ACTIVITY_TYPES];
                 for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) {
-                    mUserActivityCounters[i] = new Counter(mUnpluggables, in);
+                    mUserActivityCounters[i] = new Counter(mOnBatteryTimeBase, in);
                 }
             } else {
                 mUserActivityCounters = null;
             }
             if (in.readInt() != 0) {
-                mNetworkActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
+                mNetworkByteActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
+                mNetworkPacketActivityCounters
+                        = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES];
                 for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-                    mNetworkActivityCounters[i] = new LongSamplingCounter(mUnpluggables, in);
+                    mNetworkByteActivityCounters[i]
+                            = new LongSamplingCounter(mOnBatteryTimeBase, in);
+                    mNetworkPacketActivityCounters[i]
+                            = new LongSamplingCounter(mOnBatteryTimeBase, in);
                 }
+                mMobileRadioActiveTime = new LongSamplingCounter(mOnBatteryTimeBase, in);
+                mMobileRadioActiveCount = new LongSamplingCounter(mOnBatteryTimeBase, in);
             } else {
-                mNetworkActivityCounters = null;
+                mNetworkByteActivityCounters = null;
+                mNetworkPacketActivityCounters = null;
             }
         }
 
@@ -3464,24 +4492,24 @@
              * return a new Timer, or null.
              */
             private StopwatchTimer readTimerFromParcel(int type, ArrayList<StopwatchTimer> pool,
-                    ArrayList<Unpluggable> unpluggables, Parcel in) {
+                    TimeBase timeBase, Parcel in) {
                 if (in.readInt() == 0) {
                     return null;
                 }
 
-                return new StopwatchTimer(Uid.this, type, pool, unpluggables, in);
+                return new StopwatchTimer(Uid.this, type, pool, timeBase, in);
             }
 
             boolean reset() {
                 boolean wlactive = false;
                 if (mTimerFull != null) {
-                    wlactive |= !mTimerFull.reset(BatteryStatsImpl.this, false);
+                    wlactive |= !mTimerFull.reset(false);
                 }
                 if (mTimerPartial != null) {
-                    wlactive |= !mTimerPartial.reset(BatteryStatsImpl.this, false);
+                    wlactive |= !mTimerPartial.reset(false);
                 }
                 if (mTimerWindow != null) {
-                    wlactive |= !mTimerWindow.reset(BatteryStatsImpl.this, false);
+                    wlactive |= !mTimerWindow.reset(false);
                 }
                 if (!wlactive) {
                     if (mTimerFull != null) {
@@ -3500,19 +4528,19 @@
                 return !wlactive;
             }
 
-            void readFromParcelLocked(ArrayList<Unpluggable> unpluggables, Parcel in) {
+            void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, Parcel in) {
                 mTimerPartial = readTimerFromParcel(WAKE_TYPE_PARTIAL,
-                        mPartialTimers, unpluggables, in);
+                        mPartialTimers, screenOffTimeBase, in);
                 mTimerFull = readTimerFromParcel(WAKE_TYPE_FULL,
-                        mFullTimers, unpluggables, in);
+                        mFullTimers, timeBase, in);
                 mTimerWindow = readTimerFromParcel(WAKE_TYPE_WINDOW,
-                        mWindowTimers, unpluggables, in);
+                        mWindowTimers, timeBase, in);
             }
 
-            void writeToParcelLocked(Parcel out, long batteryRealtime) {
-                Timer.writeTimerToParcel(out, mTimerPartial, batteryRealtime);
-                Timer.writeTimerToParcel(out, mTimerFull, batteryRealtime);
-                Timer.writeTimerToParcel(out, mTimerWindow, batteryRealtime);
+            void writeToParcelLocked(Parcel out, long elapsedRealtimeUs) {
+                Timer.writeTimerToParcel(out, mTimerPartial, elapsedRealtimeUs);
+                Timer.writeTimerToParcel(out, mTimerFull, elapsedRealtimeUs);
+                Timer.writeTimerToParcel(out, mTimerWindow, elapsedRealtimeUs);
             }
 
             @Override
@@ -3534,8 +4562,7 @@
                 mHandle = handle;
             }
 
-            private StopwatchTimer readTimerFromParcel(ArrayList<Unpluggable> unpluggables,
-                    Parcel in) {
+            private StopwatchTimer readTimerFromParcel(TimeBase timeBase, Parcel in) {
                 if (in.readInt() == 0) {
                     return null;
                 }
@@ -3545,23 +4572,23 @@
                     pool = new ArrayList<StopwatchTimer>();
                     mSensorTimers.put(mHandle, pool);
                 }
-                return new StopwatchTimer(Uid.this, 0, pool, unpluggables, in);
+                return new StopwatchTimer(Uid.this, 0, pool, timeBase, in);
             }
 
             boolean reset() {
-                if (mTimer.reset(BatteryStatsImpl.this, true)) {
+                if (mTimer.reset(true)) {
                     mTimer = null;
                     return true;
                 }
                 return false;
             }
 
-            void readFromParcelLocked(ArrayList<Unpluggable> unpluggables, Parcel in) {
-                mTimer = readTimerFromParcel(unpluggables, in);
+            void readFromParcelLocked(TimeBase timeBase, Parcel in) {
+                mTimer = readTimerFromParcel(timeBase, in);
             }
 
-            void writeToParcelLocked(Parcel out, long batteryRealtime) {
-                Timer.writeTimerToParcel(out, mTimer, batteryRealtime);
+            void writeToParcelLocked(Parcel out, long elapsedRealtimeUs) {
+                Timer.writeTimerToParcel(out, mTimer, elapsedRealtimeUs);
             }
 
             @Override
@@ -3578,7 +4605,12 @@
         /**
          * The statistics associated with a particular process.
          */
-        public final class Proc extends BatteryStats.Uid.Proc implements Unpluggable {
+        public final class Proc extends BatteryStats.Uid.Proc implements TimeBaseObs {
+            /**
+             * Remains true until removed from the stats.
+             */
+            boolean mActive = true;
+
             /**
              * Total time (in 1/100 sec) spent executing in user code.
              */
@@ -3664,26 +4696,27 @@
             ArrayList<ExcessivePower> mExcessivePower;
 
             Proc() {
-                mUnpluggables.add(this);
+                mOnBatteryTimeBase.add(this);
                 mSpeedBins = new SamplingCounter[getCpuSpeedSteps()];
             }
 
-            public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+            public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) {
                 mUnpluggedUserTime = mUserTime;
                 mUnpluggedSystemTime = mSystemTime;
                 mUnpluggedForegroundTime = mForegroundTime;
                 mUnpluggedStarts = mStarts;
             }
 
-            public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+            public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
             }
 
             void detach() {
-                mUnpluggables.remove(this);
+                mActive = false;
+                mOnBatteryTimeBase.remove(this);
                 for (int i = 0; i < mSpeedBins.length; i++) {
                     SamplingCounter c = mSpeedBins[i];
                     if (c != null) {
-                        mUnpluggables.remove(c);
+                        mOnBatteryTimeBase.remove(c);
                         mSpeedBins[i] = null;
                     }
                 }
@@ -3812,7 +4845,7 @@
                 mSpeedBins = new SamplingCounter[bins >= steps ? bins : steps];
                 for (int i = 0; i < bins; i++) {
                     if (in.readInt() != 0) {
-                        mSpeedBins[i] = new SamplingCounter(mUnpluggables, in);
+                        mSpeedBins[i] = new SamplingCounter(mOnBatteryTimeBase, in);
                     }
                 }
 
@@ -3837,65 +4870,50 @@
             }
 
             @Override
+            public boolean isActive() {
+                return mActive;
+            }
+
+            @Override
             public long getUserTime(int which) {
-                long val;
-                if (which == STATS_LAST) {
-                    val = mLastUserTime;
-                } else {
-                    val = mUserTime;
-                    if (which == STATS_CURRENT) {
-                        val -= mLoadedUserTime;
-                    } else if (which == STATS_SINCE_UNPLUGGED) {
-                        val -= mUnpluggedUserTime;
-                    }
+                long val = mUserTime;
+                if (which == STATS_CURRENT) {
+                    val -= mLoadedUserTime;
+                } else if (which == STATS_SINCE_UNPLUGGED) {
+                    val -= mUnpluggedUserTime;
                 }
                 return val;
             }
 
             @Override
             public long getSystemTime(int which) {
-                long val;
-                if (which == STATS_LAST) {
-                    val = mLastSystemTime;
-                } else {
-                    val = mSystemTime;
-                    if (which == STATS_CURRENT) {
-                        val -= mLoadedSystemTime;
-                    } else if (which == STATS_SINCE_UNPLUGGED) {
-                        val -= mUnpluggedSystemTime;
-                    }
+                long val = mSystemTime;
+                if (which == STATS_CURRENT) {
+                    val -= mLoadedSystemTime;
+                } else if (which == STATS_SINCE_UNPLUGGED) {
+                    val -= mUnpluggedSystemTime;
                 }
                 return val;
             }
 
             @Override
             public long getForegroundTime(int which) {
-                long val;
-                if (which == STATS_LAST) {
-                    val = mLastForegroundTime;
-                } else {
-                    val = mForegroundTime;
-                    if (which == STATS_CURRENT) {
-                        val -= mLoadedForegroundTime;
-                    } else if (which == STATS_SINCE_UNPLUGGED) {
-                        val -= mUnpluggedForegroundTime;
-                    }
+                long val = mForegroundTime;
+                if (which == STATS_CURRENT) {
+                    val -= mLoadedForegroundTime;
+                } else if (which == STATS_SINCE_UNPLUGGED) {
+                    val -= mUnpluggedForegroundTime;
                 }
                 return val;
             }
 
             @Override
             public int getStarts(int which) {
-                int val;
-                if (which == STATS_LAST) {
-                    val = mLastStarts;
-                } else {
-                    val = mStarts;
-                    if (which == STATS_CURRENT) {
-                        val -= mLoadedStarts;
-                    } else if (which == STATS_SINCE_UNPLUGGED) {
-                        val -= mUnpluggedStarts;
-                    }
+                int val = mStarts;
+                if (which == STATS_CURRENT) {
+                    val -= mLoadedStarts;
+                } else if (which == STATS_SINCE_UNPLUGGED) {
+                    val -= mUnpluggedStarts;
                 }
                 return val;
             }
@@ -3907,7 +4925,7 @@
                     if (amt != 0) {
                         SamplingCounter c = mSpeedBins[i];
                         if (c == null) {
-                            mSpeedBins[i] = c = new SamplingCounter(mUnpluggables);
+                            mSpeedBins[i] = c = new SamplingCounter(mOnBatteryTimeBase);
                         }
                         c.addCountAtomic(values[i]);
                     }
@@ -3928,7 +4946,7 @@
         /**
          * The statistics associated with a particular package.
          */
-        public final class Pkg extends BatteryStats.Uid.Pkg implements Unpluggable {
+        public final class Pkg extends BatteryStats.Uid.Pkg implements TimeBaseObs {
             /**
              * Number of times this package has done something that could wake up the
              * device from sleep.
@@ -3959,18 +4977,18 @@
             final HashMap<String, Serv> mServiceStats = new HashMap<String, Serv>();
 
             Pkg() {
-                mUnpluggables.add(this);
+                mOnBatteryScreenOffTimeBase.add(this);
             }
 
-            public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+            public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) {
                 mUnpluggedWakeups = mWakeups;
             }
 
-            public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+            public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) {
             }
 
             void detach() {
-                mUnpluggables.remove(this);
+                mOnBatteryScreenOffTimeBase.remove(this);
             }
 
             void readFromParcelLocked(Parcel in) {
@@ -4011,16 +5029,11 @@
 
             @Override
             public int getWakeups(int which) {
-                int val;
-                if (which == STATS_LAST) {
-                    val = mLastWakeups;
-                } else {
-                    val = mWakeups;
-                    if (which == STATS_CURRENT) {
-                        val -= mLoadedWakeups;
-                    } else if (which == STATS_SINCE_UNPLUGGED) {
-                        val -= mUnpluggedWakeups;
-                    }
+                int val = mWakeups;
+                if (which == STATS_CURRENT) {
+                    val -= mLoadedWakeups;
+                } else if (which == STATS_SINCE_UNPLUGGED) {
+                    val -= mUnpluggedWakeups;
                 }
 
                 return val;
@@ -4029,7 +5042,7 @@
             /**
              * The statistics associated with a particular service.
              */
-            public final class Serv extends BatteryStats.Uid.Pkg.Serv implements Unpluggable {
+            public final class Serv extends BatteryStats.Uid.Pkg.Serv implements TimeBaseObs {
                 /**
                  * Total time (ms in battery uptime) the service has been left started.
                  */
@@ -4121,20 +5134,22 @@
                 int mUnpluggedLaunches;
 
                 Serv() {
-                    mUnpluggables.add(this);
+                    mOnBatteryTimeBase.add(this);
                 }
 
-                public void unplug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
-                    mUnpluggedStartTime = getStartTimeToNowLocked(batteryUptime);
+                public void onTimeStarted(long elapsedRealtime, long baseUptime,
+                        long baseRealtime) {
+                    mUnpluggedStartTime = getStartTimeToNowLocked(baseUptime);
                     mUnpluggedStarts = mStarts;
                     mUnpluggedLaunches = mLaunches;
                 }
 
-                public void plug(long elapsedRealtime, long batteryUptime, long batteryRealtime) {
+                public void onTimeStopped(long elapsedRealtime, long baseUptime,
+                        long baseRealtime) {
                 }
 
                 void detach() {
-                    mUnpluggables.remove(this);
+                    mOnBatteryTimeBase.remove(this);
                 }
 
                 void readFromParcelLocked(Parcel in) {
@@ -4230,51 +5245,33 @@
 
                 @Override
                 public int getLaunches(int which) {
-                    int val;
-
-                    if (which == STATS_LAST) {
-                        val = mLastLaunches;
-                    } else {
-                        val = mLaunches;
-                        if (which == STATS_CURRENT) {
-                            val -= mLoadedLaunches;
-                        } else if (which == STATS_SINCE_UNPLUGGED) {
-                            val -= mUnpluggedLaunches;
-                        }
+                    int val = mLaunches;
+                    if (which == STATS_CURRENT) {
+                        val -= mLoadedLaunches;
+                    } else if (which == STATS_SINCE_UNPLUGGED) {
+                        val -= mUnpluggedLaunches;
                     }
-
                     return val;
                 }
 
                 @Override
                 public long getStartTime(long now, int which) {
-                    long val;
-                    if (which == STATS_LAST) {
-                        val = mLastStartTime;
-                    } else {
-                        val = getStartTimeToNowLocked(now);
-                        if (which == STATS_CURRENT) {
-                            val -= mLoadedStartTime;
-                        } else if (which == STATS_SINCE_UNPLUGGED) {
-                            val -= mUnpluggedStartTime;
-                        }
+                    long val = getStartTimeToNowLocked(now);
+                    if (which == STATS_CURRENT) {
+                        val -= mLoadedStartTime;
+                    } else if (which == STATS_SINCE_UNPLUGGED) {
+                        val -= mUnpluggedStartTime;
                     }
-
                     return val;
                 }
 
                 @Override
                 public int getStarts(int which) {
-                    int val;
-                    if (which == STATS_LAST) {
-                        val = mLastStarts;
-                    } else {
-                        val = mStarts;
-                        if (which == STATS_CURRENT) {
-                            val -= mLoadedStarts;
-                        } else if (which == STATS_SINCE_UNPLUGGED) {
-                            val -= mUnpluggedStarts;
-                        }
+                    int val = mStarts;
+                    if (which == STATS_CURRENT) {
+                        val -= mLoadedStarts;
+                    } else if (which == STATS_SINCE_UNPLUGGED) {
+                        val -= mUnpluggedStarts;
                     }
 
                     return val;
@@ -4369,7 +5366,7 @@
                     t = wl.mTimerPartial;
                     if (t == null) {
                         t = new StopwatchTimer(Uid.this, WAKE_TYPE_PARTIAL,
-                                mPartialTimers, mUnpluggables);
+                                mPartialTimers, mOnBatteryScreenOffTimeBase);
                         wl.mTimerPartial = t;
                     }
                     return t;
@@ -4377,7 +5374,7 @@
                     t = wl.mTimerFull;
                     if (t == null) {
                         t = new StopwatchTimer(Uid.this, WAKE_TYPE_FULL,
-                                mFullTimers, mUnpluggables);
+                                mFullTimers, mOnBatteryTimeBase);
                         wl.mTimerFull = t;
                     }
                     return t;
@@ -4385,7 +5382,7 @@
                     t = wl.mTimerWindow;
                     if (t == null) {
                         t = new StopwatchTimer(Uid.this, WAKE_TYPE_WINDOW,
-                                mWindowTimers, mUnpluggables);
+                                mWindowTimers, mOnBatteryTimeBase);
                         wl.mTimerWindow = t;
                     }
                     return t;
@@ -4412,34 +5409,36 @@
                 timers = new ArrayList<StopwatchTimer>();
                 mSensorTimers.put(sensor, timers);
             }
-            t = new StopwatchTimer(Uid.this, BatteryStats.SENSOR, timers, mUnpluggables);
+            t = new StopwatchTimer(Uid.this, BatteryStats.SENSOR, timers, mOnBatteryTimeBase);
             se.mTimer = t;
             return t;
         }
 
-        public void noteStartWakeLocked(int pid, String name, int type) {
+        public void noteStartWakeLocked(int pid, String name, int type, long elapsedRealtimeMs) {
             StopwatchTimer t = getWakeTimerLocked(name, type);
             if (t != null) {
-                t.startRunningLocked(BatteryStatsImpl.this);
+                t.startRunningLocked(elapsedRealtimeMs);
             }
             if (pid >= 0 && type == WAKE_TYPE_PARTIAL) {
                 Pid p = getPidStatsLocked(pid);
-                if (p.mWakeStart == 0) {
-                    p.mWakeStart = SystemClock.elapsedRealtime();
+                if (p.mWakeNesting++ == 0) {
+                    p.mWakeStartMs = elapsedRealtimeMs;
                 }
             }
         }
 
-        public void noteStopWakeLocked(int pid, String name, int type) {
+        public void noteStopWakeLocked(int pid, String name, int type, long elapsedRealtimeMs) {
             StopwatchTimer t = getWakeTimerLocked(name, type);
             if (t != null) {
-                t.stopRunningLocked(BatteryStatsImpl.this);
+                t.stopRunningLocked(elapsedRealtimeMs);
             }
             if (pid >= 0 && type == WAKE_TYPE_PARTIAL) {
                 Pid p = mPids.get(pid);
-                if (p != null && p.mWakeStart != 0) {
-                    p.mWakeSum += SystemClock.elapsedRealtime() - p.mWakeStart;
-                    p.mWakeStart = 0;
+                if (p != null && p.mWakeNesting > 0) {
+                    if (p.mWakeNesting-- == 1) {
+                        p.mWakeSumMs += elapsedRealtimeMs - p.mWakeStartMs;
+                        p.mWakeStartMs = 0;
+                    }
                 }
             }
         }
@@ -4458,32 +5457,32 @@
             }
         }
 
-        public void noteStartSensor(int sensor) {
+        public void noteStartSensor(int sensor, long elapsedRealtimeMs) {
             StopwatchTimer t = getSensorTimerLocked(sensor, true);
             if (t != null) {
-                t.startRunningLocked(BatteryStatsImpl.this);
+                t.startRunningLocked(elapsedRealtimeMs);
             }
         }
 
-        public void noteStopSensor(int sensor) {
+        public void noteStopSensor(int sensor, long elapsedRealtimeMs) {
             // Don't create a timer if one doesn't already exist
             StopwatchTimer t = getSensorTimerLocked(sensor, false);
             if (t != null) {
-                t.stopRunningLocked(BatteryStatsImpl.this);
+                t.stopRunningLocked(elapsedRealtimeMs);
             }
         }
 
-        public void noteStartGps() {
+        public void noteStartGps(long elapsedRealtimeMs) {
             StopwatchTimer t = getSensorTimerLocked(Sensor.GPS, true);
             if (t != null) {
-                t.startRunningLocked(BatteryStatsImpl.this);
+                t.startRunningLocked(elapsedRealtimeMs);
             }
         }
 
-        public void noteStopGps() {
+        public void noteStopGps(long elapsedRealtimeMs) {
             StopwatchTimer t = getSensorTimerLocked(Sensor.GPS, false);
             if (t != null) {
-                t.stopRunningLocked(BatteryStatsImpl.this);
+                t.stopRunningLocked(elapsedRealtimeMs);
             }
         }
 
@@ -4496,38 +5495,50 @@
         mFile = new JournaledFile(new File(filename), new File(filename + ".tmp"));
         mHandler = new MyHandler(handler.getLooper());
         mStartCount++;
-        mScreenOnTimer = new StopwatchTimer(null, -1, null, mUnpluggables);
+        mScreenOnTimer = new StopwatchTimer(null, -1, null, mOnBatteryTimeBase);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
-            mScreenBrightnessTimer[i] = new StopwatchTimer(null, -100-i, null, mUnpluggables);
+            mScreenBrightnessTimer[i] = new StopwatchTimer(null, -100-i, null, mOnBatteryTimeBase);
         }
-        mInputEventCounter = new Counter(mUnpluggables);
-        mPhoneOnTimer = new StopwatchTimer(null, -2, null, mUnpluggables);
+        mInputEventCounter = new Counter(mOnBatteryTimeBase);
+        mPhoneOnTimer = new StopwatchTimer(null, -2, null, mOnBatteryTimeBase);
         for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(null, -200-i, null, mUnpluggables);
+            mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(null, -200-i, null,
+                    mOnBatteryTimeBase);
         }
-        mPhoneSignalScanningTimer = new StopwatchTimer(null, -200+1, null, mUnpluggables);
+        mPhoneSignalScanningTimer = new StopwatchTimer(null, -200+1, null, mOnBatteryTimeBase);
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            mPhoneDataConnectionsTimer[i] = new StopwatchTimer(null, -300-i, null, mUnpluggables);
+            mPhoneDataConnectionsTimer[i] = new StopwatchTimer(null, -300-i, null,
+                    mOnBatteryTimeBase);
         }
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-            mNetworkActivityCounters[i] = new LongSamplingCounter(mUnpluggables);
+            mNetworkByteActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase);
+            mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase);
         }
-        mWifiOnTimer = new StopwatchTimer(null, -3, null, mUnpluggables);
-        mGlobalWifiRunningTimer = new StopwatchTimer(null, -4, null, mUnpluggables);
-        mBluetoothOnTimer = new StopwatchTimer(null, -5, null, mUnpluggables);
-        mAudioOnTimer = new StopwatchTimer(null, -6, null, mUnpluggables);
-        mVideoOnTimer = new StopwatchTimer(null, -7, null, mUnpluggables);
+        mMobileRadioActiveTimer = new StopwatchTimer(null, -400, null, mOnBatteryTimeBase);
+        mMobileRadioActivePerAppTimer = new StopwatchTimer(null, -401, null, mOnBatteryTimeBase);
+        mMobileRadioActiveAdjustedTime = new LongSamplingCounter(mOnBatteryTimeBase);
+        mMobileRadioActiveUnknownTime = new LongSamplingCounter(mOnBatteryTimeBase);
+        mMobileRadioActiveUnknownCount = new LongSamplingCounter(mOnBatteryTimeBase);
+        mWifiOnTimer = new StopwatchTimer(null, -3, null, mOnBatteryTimeBase);
+        mGlobalWifiRunningTimer = new StopwatchTimer(null, -4, null, mOnBatteryTimeBase);
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            mWifiStateTimer[i] = new StopwatchTimer(null, -600-i, null, mOnBatteryTimeBase);
+        }
+        mBluetoothOnTimer = new StopwatchTimer(null, -5, null, mOnBatteryTimeBase);
+        for (int i=0; i< NUM_BLUETOOTH_STATES; i++) {
+            mBluetoothStateTimer[i] = new StopwatchTimer(null, -500-i, null, mOnBatteryTimeBase);
+        }
+        mAudioOnTimer = new StopwatchTimer(null, -6, null, mOnBatteryTimeBase);
+        mVideoOnTimer = new StopwatchTimer(null, -7, null, mOnBatteryTimeBase);
         mOnBattery = mOnBatteryInternal = false;
-        initTimes();
-        mTrackBatteryPastUptime = 0;
-        mTrackBatteryPastRealtime = 0;
-        mUptimeStart = mTrackBatteryUptimeStart = SystemClock.uptimeMillis() * 1000;
-        mRealtimeStart = mTrackBatteryRealtimeStart = SystemClock.elapsedRealtime() * 1000;
-        mUnpluggedBatteryUptime = getBatteryUptimeLocked(mUptimeStart);
-        mUnpluggedBatteryRealtime = getBatteryRealtimeLocked(mRealtimeStart);
+        long uptime = SystemClock.uptimeMillis() * 1000;
+        long realtime = SystemClock.elapsedRealtime() * 1000;
+        initTimes(uptime, realtime);
         mDischargeStartLevel = 0;
         mDischargeUnplugLevel = 0;
+        mDischargePlugLevel = -1;
         mDischargeCurrentLevel = 0;
+        mCurrentBatteryLevel = 0;
         initDischarge();
         clearHistoryLocked();
     }
@@ -4557,18 +5568,21 @@
     public boolean startIteratingOldHistoryLocked() {
         if (DEBUG_HISTORY) Slog.i(TAG, "ITERATING: buff size=" + mHistoryBuffer.dataSize()
                 + " pos=" + mHistoryBuffer.dataPosition());
+        if ((mHistoryIterator = mHistory) == null) {
+            return false;
+        }
         mHistoryBuffer.setDataPosition(0);
         mHistoryReadTmp.clear();
         mReadOverflow = false;
         mIteratingHistory = true;
-        return (mHistoryIterator = mHistory) != null;
+        return true;
     }
 
     @Override
     public boolean getNextOldHistoryLocked(HistoryItem out) {
         boolean end = mHistoryBuffer.dataPosition() >= mHistoryBuffer.dataSize();
         if (!end) {
-            mHistoryReadTmp.readDelta(mHistoryBuffer);
+            readHistoryDelta(mHistoryBuffer, mHistoryReadTmp);
             mReadOverflow |= mHistoryReadTmp.cmd == HistoryItem.CMD_OVERFLOW;
         }
         HistoryItem cur = mHistoryIterator;
@@ -4584,13 +5598,13 @@
             if (end) {
                 Slog.w(TAG, "New history ends before old history!");
             } else if (!out.same(mHistoryReadTmp)) {
-                long now = getHistoryBaseTime() + SystemClock.elapsedRealtime();
                 PrintWriter pw = new FastPrintWriter(new LogWriter(android.util.Log.WARN, TAG));
                 pw.println("Histories differ!");
                 pw.println("Old history:");
-                (new HistoryPrinter()).printNextItem(pw, out, now);
+                (new HistoryPrinter()).printNextItem(pw, out, 0, false, true);
                 pw.println("New history:");
-                (new HistoryPrinter()).printNextItem(pw, mHistoryReadTmp, now);
+                (new HistoryPrinter()).printNextItem(pw, mHistoryReadTmp, 0, false,
+                        true);
                 pw.flush();
             }
         }
@@ -4601,16 +5615,60 @@
     public void finishIteratingOldHistoryLocked() {
         mIteratingHistory = false;
         mHistoryBuffer.setDataPosition(mHistoryBuffer.dataSize());
+        mHistoryIterator = null;
+    }
+
+    public int getHistoryTotalSize() {
+        return MAX_HISTORY_BUFFER;
+    }
+
+    public int getHistoryUsedSize() {
+        return mHistoryBuffer.dataSize();
     }
 
     @Override
     public boolean startIteratingHistoryLocked() {
         if (DEBUG_HISTORY) Slog.i(TAG, "ITERATING: buff size=" + mHistoryBuffer.dataSize()
                 + " pos=" + mHistoryBuffer.dataPosition());
+        if (mHistoryBuffer.dataSize() <= 0) {
+            return false;
+        }
         mHistoryBuffer.setDataPosition(0);
         mReadOverflow = false;
         mIteratingHistory = true;
-        return mHistoryBuffer.dataSize() > 0;
+        mReadHistoryStrings = new String[mHistoryTagPool.size()];
+        mReadHistoryUids = new int[mHistoryTagPool.size()];
+        mReadHistoryChars = 0;
+        for (HashMap.Entry<HistoryTag, Integer> ent : mHistoryTagPool.entrySet()) {
+            final HistoryTag tag = ent.getKey();
+            final int idx = ent.getValue();
+            mReadHistoryStrings[idx] = tag.string;
+            mReadHistoryUids[idx] = tag.uid;
+            mReadHistoryChars += tag.string.length() + 1;
+        }
+        return true;
+    }
+
+    @Override
+    public int getHistoryStringPoolSize() {
+        return mReadHistoryStrings.length;
+    }
+
+    @Override
+    public int getHistoryStringPoolBytes() {
+        // Each entry is a fixed 12 bytes: 4 for index, 4 for uid, 4 for string size
+        // Each string character is 2 bytes.
+        return (mReadHistoryStrings.length * 12) + (mReadHistoryChars * 2);
+    }
+
+    @Override
+    public String getHistoryTagPoolString(int index) {
+        return mReadHistoryStrings[index];
+    }
+
+    @Override
+    public int getHistoryTagPoolUid(int index) {
+        return mReadHistoryUids[index];
     }
 
     @Override
@@ -4624,7 +5682,12 @@
             return false;
         }
 
-        out.readDelta(mHistoryBuffer);
+        final long lastRealtime = out.time;
+        final long lastWalltime = out.currentTime;
+        readHistoryDelta(mHistoryBuffer, out);
+        if (out.cmd != HistoryItem.CMD_CURRENT_TIME && lastWalltime != 0) {
+            out.currentTime = lastWalltime + (out.time - lastRealtime);
+        }
         return true;
     }
 
@@ -4632,6 +5695,7 @@
     public void finishIteratingHistoryLocked() {
         mIteratingHistory = false;
         mHistoryBuffer.setDataPosition(mHistoryBuffer.dataSize());
+        mReadHistoryStrings = null;
     }
 
     @Override
@@ -4652,13 +5716,14 @@
         return mScreenOn;
     }
 
-    void initTimes() {
-        mBatteryRealtime = mTrackBatteryPastUptime = 0;
-        mBatteryUptime = mTrackBatteryPastRealtime = 0;
-        mUptimeStart = mTrackBatteryUptimeStart = SystemClock.uptimeMillis() * 1000;
-        mRealtimeStart = mTrackBatteryRealtimeStart = SystemClock.elapsedRealtime() * 1000;
-        mUnpluggedBatteryUptime = getBatteryUptimeLocked(mUptimeStart);
-        mUnpluggedBatteryRealtime = getBatteryRealtimeLocked(mRealtimeStart);
+    void initTimes(long uptime, long realtime) {
+        mStartClockTime = System.currentTimeMillis();
+        mOnBatteryTimeBase.init(uptime, realtime);
+        mOnBatteryScreenOffTimeBase.init(uptime, realtime);
+        mRealtime = 0;
+        mUptime = 0;
+        mRealtimeStart = realtime;
+        mUptimeStart = uptime;
     }
 
     void initDischarge() {
@@ -4668,32 +5733,75 @@
         mDischargeAmountScreenOnSinceCharge = 0;
         mDischargeAmountScreenOff = 0;
         mDischargeAmountScreenOffSinceCharge = 0;
+        mLastDischargeStepTime = -1;
+        mNumDischargeStepDurations = 0;
+        mLastChargeStepTime = -1;
+        mNumChargeStepDurations = 0;
     }
-    
-    public void resetAllStatsLocked() {
+
+    public void resetAllStatsCmdLocked() {
+        resetAllStatsLocked();
+        final long mSecUptime = SystemClock.uptimeMillis();
+        long uptime = mSecUptime * 1000;
+        long mSecRealtime = SystemClock.elapsedRealtime();
+        long realtime = mSecRealtime * 1000;
+        mDischargeStartLevel = mHistoryCur.batteryLevel;
+        pullPendingStateUpdatesLocked();
+        addHistoryRecordLocked(mSecRealtime, mSecUptime);
+        mDischargeCurrentLevel = mDischargeUnplugLevel = mDischargePlugLevel
+                = mCurrentBatteryLevel = mHistoryCur.batteryLevel;
+        mOnBatteryTimeBase.reset(uptime, realtime);
+        mOnBatteryScreenOffTimeBase.reset(uptime, realtime);
+        if ((mHistoryCur.states&HistoryItem.STATE_BATTERY_PLUGGED_FLAG) == 0) {
+            if (mScreenOn) {
+                mDischargeScreenOnUnplugLevel = mHistoryCur.batteryLevel;
+                mDischargeScreenOffUnplugLevel = 0;
+            } else {
+                mDischargeScreenOnUnplugLevel = 0;
+                mDischargeScreenOffUnplugLevel = mHistoryCur.batteryLevel;
+            }
+            mDischargeAmountScreenOn = 0;
+            mDischargeAmountScreenOff = 0;
+        }
+        initActiveHistoryEventsLocked(mSecRealtime, mSecUptime);
+    }
+
+    private void resetAllStatsLocked() {
         mStartCount = 0;
-        initTimes();
-        mScreenOnTimer.reset(this, false);
+        initTimes(SystemClock.uptimeMillis() * 1000, SystemClock.elapsedRealtime() * 1000);
+        mScreenOnTimer.reset(false);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
-            mScreenBrightnessTimer[i].reset(this, false);
+            mScreenBrightnessTimer[i].reset(false);
         }
         mInputEventCounter.reset(false);
-        mPhoneOnTimer.reset(this, false);
-        mAudioOnTimer.reset(this, false);
-        mVideoOnTimer.reset(this, false);
+        mPhoneOnTimer.reset(false);
+        mAudioOnTimer.reset(false);
+        mVideoOnTimer.reset(false);
         for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            mPhoneSignalStrengthsTimer[i].reset(this, false);
+            mPhoneSignalStrengthsTimer[i].reset(false);
         }
-        mPhoneSignalScanningTimer.reset(this, false);
+        mPhoneSignalScanningTimer.reset(false);
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            mPhoneDataConnectionsTimer[i].reset(this, false);
+            mPhoneDataConnectionsTimer[i].reset(false);
         }
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-            mNetworkActivityCounters[i].reset(false);
+            mNetworkByteActivityCounters[i].reset(false);
+            mNetworkPacketActivityCounters[i].reset(false);
         }
-        mWifiOnTimer.reset(this, false);
-        mGlobalWifiRunningTimer.reset(this, false);
-        mBluetoothOnTimer.reset(this, false);
+        mMobileRadioActiveTimer.reset(false);
+        mMobileRadioActivePerAppTimer.reset(false);
+        mMobileRadioActiveAdjustedTime.reset(false);
+        mMobileRadioActiveUnknownTime.reset(false);
+        mMobileRadioActiveUnknownCount.reset(false);
+        mWifiOnTimer.reset(false);
+        mGlobalWifiRunningTimer.reset(false);
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            mWifiStateTimer[i].reset(false);
+        }
+        mBluetoothOnTimer.reset(false);
+        for (int i=0; i< NUM_BLUETOOTH_STATES; i++) {
+            mBluetoothStateTimer[i].reset(false);
+        }
 
         for (int i=0; i<mUidStats.size(); i++) {
             if (mUidStats.valueAt(i).reset()) {
@@ -4704,16 +5812,41 @@
 
         if (mKernelWakelockStats.size() > 0) {
             for (SamplingTimer timer : mKernelWakelockStats.values()) {
-                mUnpluggables.remove(timer);
+                mOnBatteryScreenOffTimeBase.remove(timer);
             }
             mKernelWakelockStats.clear();
         }
-        
+
+        if (mWakeupReasonStats.size() > 0) {
+            for (LongSamplingCounter timer : mWakeupReasonStats.values()) {
+                mOnBatteryScreenOffTimeBase.remove(timer);
+            }
+            mWakeupReasonStats.clear();
+        }
+
         initDischarge();
 
         clearHistoryLocked();
     }
 
+    private void initActiveHistoryEventsLocked(long elapsedRealtimeMs, long uptimeMs) {
+        for (int i=0; i<HistoryItem.EVENT_COUNT; i++) {
+            HashMap<String, SparseBooleanArray> active = mActiveEvents[i];
+            if (active == null) {
+                continue;
+            }
+            for (HashMap.Entry<String, SparseBooleanArray> ent : active.entrySet()) {
+                SparseBooleanArray uids = ent.getValue();
+                for (int j=0; j<uids.size(); j++) {
+                    if (uids.valueAt(j)) {
+                        addHistoryEventLocked(elapsedRealtimeMs, uptimeMs, i, ent.getKey(),
+                                uids.keyAt(j));
+                    }
+                }
+            }
+        }
+    }
+
     void updateDischargeScreenLevelsLocked(boolean oldScreenOn, boolean newScreenOn) {
         if (oldScreenOn) {
             int diff = mDischargeScreenOnUnplugLevel - mDischargeCurrentLevel;
@@ -4737,45 +5870,51 @@
         }
     }
     
-    void setOnBattery(boolean onBattery, int oldStatus, int level) {
-        synchronized(this) {
-            setOnBatteryLocked(onBattery, oldStatus, level);
+    public void pullPendingStateUpdatesLocked() {
+        updateKernelWakelocksLocked();
+        updateNetworkActivityLocked(NET_UPDATE_ALL, SystemClock.elapsedRealtime());
+        if (mOnBatteryInternal) {
+            updateDischargeScreenLevelsLocked(mScreenOn, mScreenOn);
         }
     }
 
-    void setOnBatteryLocked(boolean onBattery, int oldStatus, int level) {
+    void setOnBatteryLocked(final long mSecRealtime, final long mSecUptime, final boolean onBattery,
+            final int oldStatus, final int level) {
         boolean doWrite = false;
         Message m = mHandler.obtainMessage(MSG_REPORT_POWER_CHANGE);
         m.arg1 = onBattery ? 1 : 0;
         mHandler.sendMessage(m);
         mOnBattery = mOnBatteryInternal = onBattery;
 
-        long uptime = SystemClock.uptimeMillis() * 1000;
-        long mSecRealtime = SystemClock.elapsedRealtime();
-        long realtime = mSecRealtime * 1000;
+        final long uptime = mSecUptime * 1000;
+        final long realtime = mSecRealtime * 1000;
         if (onBattery) {
             // We will reset our status if we are unplugging after the
             // battery was last full, or the level is at 100, or
             // we have gone through a significant charge (from a very low
             // level to a now very high level).
+            boolean reset = false;
             if (oldStatus == BatteryManager.BATTERY_STATUS_FULL
                     || level >= 90
                     || (mDischargeCurrentLevel < 20 && level >= 80)) {
                 doWrite = true;
                 resetAllStatsLocked();
                 mDischargeStartLevel = level;
+                reset = true;
+                mNumDischargeStepDurations = 0;
             }
-            updateKernelWakelocksLocked();
-            updateNetworkActivityLocked();
+            mLastDischargeStepLevel = level;
+            mLastDischargeStepTime = -1;
+            pullPendingStateUpdatesLocked();
             mHistoryCur.batteryLevel = (byte)level;
             mHistoryCur.states &= ~HistoryItem.STATE_BATTERY_PLUGGED_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Battery unplugged to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(mSecRealtime);
-            mTrackBatteryUptimeStart = uptime;
-            mTrackBatteryRealtimeStart = realtime;
-            mUnpluggedBatteryUptime = getBatteryUptimeLocked(uptime);
-            mUnpluggedBatteryRealtime = getBatteryRealtimeLocked(realtime);
+            if (reset) {
+                mRecordingHistory = true;
+                startRecordingHistory(mSecRealtime, mSecUptime, reset);
+            }
+            addHistoryRecordLocked(mSecRealtime, mSecUptime);
             mDischargeCurrentLevel = mDischargeUnplugLevel = level;
             if (mScreenOn) {
                 mDischargeScreenOnUnplugLevel = level;
@@ -4786,24 +5925,24 @@
             }
             mDischargeAmountScreenOn = 0;
             mDischargeAmountScreenOff = 0;
-            doUnplugLocked(realtime, mUnpluggedBatteryUptime, mUnpluggedBatteryRealtime);
+            updateTimeBasesLocked(true, !mScreenOn, uptime, realtime);
         } else {
-            updateKernelWakelocksLocked();
-            updateNetworkActivityLocked();
+            pullPendingStateUpdatesLocked();
             mHistoryCur.batteryLevel = (byte)level;
             mHistoryCur.states |= HistoryItem.STATE_BATTERY_PLUGGED_FLAG;
             if (DEBUG_HISTORY) Slog.v(TAG, "Battery plugged to: "
                     + Integer.toHexString(mHistoryCur.states));
-            addHistoryRecordLocked(mSecRealtime);
-            mTrackBatteryPastUptime += uptime - mTrackBatteryUptimeStart;
-            mTrackBatteryPastRealtime += realtime - mTrackBatteryRealtimeStart;
-            mDischargeCurrentLevel = level;
+            addHistoryRecordLocked(mSecRealtime, mSecUptime);
+            mDischargeCurrentLevel = mDischargePlugLevel = level;
             if (level < mDischargeUnplugLevel) {
                 mLowDischargeAmountSinceCharge += mDischargeUnplugLevel-level-1;
                 mHighDischargeAmountSinceCharge += mDischargeUnplugLevel-level;
             }
             updateDischargeScreenLevelsLocked(mScreenOn, mScreenOn);
-            doPlugLocked(realtime, getBatteryUptimeLocked(uptime), getBatteryRealtimeLocked(realtime));
+            updateTimeBasesLocked(false, !mScreenOn, uptime, realtime);
+            mNumChargeStepDurations = 0;
+            mLastChargeStepLevel = level;
+            mLastChargeStepTime = -1;
         }
         if (doWrite || (mLastWriteTime + (60 * 1000)) < mSecRealtime) {
             if (mFile != null) {
@@ -4812,13 +5951,45 @@
         }
     }
 
+    private void startRecordingHistory(final long elapsedRealtimeMs, final long uptimeMs,
+            boolean reset) {
+        mRecordingHistory = true;
+        mHistoryCur.currentTime = System.currentTimeMillis();
+        addHistoryBufferLocked(elapsedRealtimeMs, uptimeMs, HistoryItem.CMD_CURRENT_TIME,
+                mHistoryCur);
+        mHistoryCur.currentTime = 0;
+        if (reset) {
+            initActiveHistoryEventsLocked(elapsedRealtimeMs, uptimeMs);
+        }
+    }
+
     // This should probably be exposed in the API, though it's not critical
     private static final int BATTERY_PLUGGED_NONE = 0;
 
+    private static int addLevelSteps(long[] steps, int stepCount, long lastStepTime,
+            int numStepLevels, long elapsedRealtime) {
+        if (lastStepTime >= 0 && numStepLevels > 0) {
+            long duration = elapsedRealtime - lastStepTime;
+            for (int i=0; i<numStepLevels; i++) {
+                System.arraycopy(steps, 0, steps, 1, steps.length-1);
+                long thisDuration = duration / (numStepLevels-i);
+                duration -= thisDuration;
+                steps[0] = thisDuration;
+            }
+            stepCount += numStepLevels;
+            if (stepCount > steps.length) {
+                stepCount = steps.length;
+            }
+        }
+        return stepCount;
+    }
+
     public void setBatteryState(int status, int health, int plugType, int level,
             int temp, int volt) {
         synchronized(this) {
-            boolean onBattery = plugType == BATTERY_PLUGGED_NONE;
+            final boolean onBattery = plugType == BATTERY_PLUGGED_NONE;
+            final long uptime = SystemClock.uptimeMillis();
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
             int oldStatus = mHistoryCur.batteryStatus;
             if (!mHaveBatteryLevel) {
                 mHaveBatteryLevel = true;
@@ -4837,7 +6008,19 @@
             }
             if (onBattery) {
                 mDischargeCurrentLevel = level;
-                mRecordingHistory = true;
+                if (!mRecordingHistory) {
+                    mRecordingHistory = true;
+                    startRecordingHistory(elapsedRealtime, uptime, true);
+                }
+            } else if (level < 96) {
+                if (!mRecordingHistory) {
+                    mRecordingHistory = true;
+                    startRecordingHistory(elapsedRealtime, uptime, true);
+                }
+            }
+            mCurrentBatteryLevel = level;
+            if (mDischargePlugLevel < 0) {
+                mDischargePlugLevel = level;
             }
             if (onBattery != mOnBattery) {
                 mHistoryCur.batteryLevel = (byte)level;
@@ -4846,7 +6029,7 @@
                 mHistoryCur.batteryPlugType = (byte)plugType;
                 mHistoryCur.batteryTemperature = (short)temp;
                 mHistoryCur.batteryVoltage = (char)volt;
-                setOnBatteryLocked(onBattery, oldStatus, level);
+                setOnBatteryLocked(elapsedRealtime, uptime, onBattery, oldStatus, level);
             } else {
                 boolean changed = false;
                 if (mHistoryCur.batteryLevel != level) {
@@ -4876,13 +6059,30 @@
                     changed = true;
                 }
                 if (changed) {
-                    addHistoryRecordLocked(SystemClock.elapsedRealtime());
+                    addHistoryRecordLocked(elapsedRealtime, uptime);
+                }
+                if (onBattery) {
+                    if (mLastDischargeStepLevel != level) {
+                        mNumDischargeStepDurations = addLevelSteps(mDischargeStepDurations,
+                                mNumDischargeStepDurations, mLastDischargeStepTime,
+                                mLastDischargeStepLevel - level, elapsedRealtime);
+                        mLastDischargeStepLevel = level;
+                        mLastDischargeStepTime = elapsedRealtime;
+                    }
+                } else {
+                    if (mLastChargeStepLevel != level) {
+                        mNumChargeStepDurations = addLevelSteps(mChargeStepDurations,
+                                mNumChargeStepDurations, mLastChargeStepTime,
+                                level - mLastChargeStepLevel, elapsedRealtime);
+                        mLastChargeStepLevel = level;
+                        mLastChargeStepTime = elapsedRealtime;
+                    }
                 }
             }
             if (!onBattery && status == BatteryManager.BATTERY_STATUS_FULL) {
                 // We don't record history while we are plugged in and fully charged.
                 // The next time we are unplugged, history will be cleared.
-                mRecordingHistory = false;
+                mRecordingHistory = DEBUG;
             }
         }
     }
@@ -4902,8 +6102,8 @@
 
             SamplingTimer kwlt = mKernelWakelockStats.get(name);
             if (kwlt == null) {
-                kwlt = new SamplingTimer(mUnpluggables, mOnBatteryInternal,
-                        true /* track reported values */);
+                kwlt = new SamplingTimer(mOnBatteryScreenOffTimeBase,
+                        true /* track reported val */);
                 mKernelWakelockStats.put(name, kwlt);
             }
             kwlt.updateCurrentReportedCount(kws.mCount);
@@ -4922,48 +6122,124 @@
         }
     }
 
-    private void updateNetworkActivityLocked() {
+    static final int NET_UPDATE_MOBILE = 1<<0;
+    static final int NET_UPDATE_WIFI = 1<<1;
+    static final int NET_UPDATE_ALL = 0xffff;
+
+    private void updateNetworkActivityLocked(int which, long elapsedRealtimeMs) {
         if (!SystemProperties.getBoolean(PROP_QTAGUID_ENABLED, false)) return;
 
-        final NetworkStats snapshot;
-        try {
-            snapshot = mNetworkStatsFactory.readNetworkStatsDetail();
-        } catch (IOException e) {
-            Log.wtf(TAG, "Failed to read network stats", e);
-            return;
+        if ((which&NET_UPDATE_MOBILE) != 0 && mMobileIfaces.length > 0) {
+            final NetworkStats snapshot;
+            final NetworkStats last = mCurMobileSnapshot;
+            try {
+                snapshot = mNetworkStatsFactory.readNetworkStatsDetail(UID_ALL,
+                        mMobileIfaces, NetworkStats.TAG_NONE, mLastMobileSnapshot);
+            } catch (IOException e) {
+                Log.wtf(TAG, "Failed to read mobile network stats", e);
+                return;
+            }
+
+            mCurMobileSnapshot = snapshot;
+            mLastMobileSnapshot = last;
+
+            if (mOnBatteryInternal) {
+                final NetworkStats delta = NetworkStats.subtract(snapshot, last,
+                        null, null, mTmpNetworkStats);
+                mTmpNetworkStats = delta;
+
+                long radioTime = mMobileRadioActivePerAppTimer.checkpointRunningLocked(
+                        elapsedRealtimeMs);
+                long totalPackets = delta.getTotalPackets();
+
+                final int size = delta.size();
+                for (int i = 0; i < size; i++) {
+                    final NetworkStats.Entry entry = delta.getValues(i, mTmpNetworkStatsEntry);
+
+                    if (entry.rxBytes == 0 || entry.txBytes == 0) continue;
+
+                    final Uid u = getUidStatsLocked(mapUid(entry.uid));
+                    u.noteNetworkActivityLocked(NETWORK_MOBILE_RX_DATA, entry.rxBytes,
+                            entry.rxPackets);
+                    u.noteNetworkActivityLocked(NETWORK_MOBILE_TX_DATA, entry.txBytes,
+                            entry.txPackets);
+
+                    if (radioTime > 0) {
+                        // Distribute total radio active time in to this app.
+                        long appPackets = entry.rxPackets + entry.txPackets;
+                        long appRadioTime = (radioTime*appPackets)/totalPackets;
+                        u.noteMobileRadioActiveTimeLocked(appRadioTime);
+                        // Remove this app from the totals, so that we don't lose any time
+                        // due to rounding.
+                        radioTime -= appRadioTime;
+                        totalPackets -= appPackets;
+                    }
+
+                    mNetworkByteActivityCounters[NETWORK_MOBILE_RX_DATA].addCountLocked(
+                            entry.rxBytes);
+                    mNetworkByteActivityCounters[NETWORK_MOBILE_TX_DATA].addCountLocked(
+                            entry.txBytes);
+                    mNetworkPacketActivityCounters[NETWORK_MOBILE_RX_DATA].addCountLocked(
+                            entry.rxPackets);
+                    mNetworkPacketActivityCounters[NETWORK_MOBILE_TX_DATA].addCountLocked(
+                            entry.txPackets);
+                }
+
+                if (radioTime > 0) {
+                    // Whoops, there is some radio time we can't blame on an app!
+                    mMobileRadioActiveUnknownTime.addCountLocked(radioTime);
+                    mMobileRadioActiveUnknownCount.addCountLocked(1);
+                }
+            }
         }
 
-        if (mLastSnapshot == null) {
-            mLastSnapshot = snapshot;
-            return;
-        }
+        if ((which&NET_UPDATE_WIFI) != 0 && mWifiIfaces.length > 0) {
+            final NetworkStats snapshot;
+            final NetworkStats last = mCurWifiSnapshot;
+            try {
+                snapshot = mNetworkStatsFactory.readNetworkStatsDetail(UID_ALL,
+                        mWifiIfaces, NetworkStats.TAG_NONE, mLastWifiSnapshot);
+            } catch (IOException e) {
+                Log.wtf(TAG, "Failed to read wifi network stats", e);
+                return;
+            }
 
-        final NetworkStats delta = snapshot.subtract(mLastSnapshot);
-        mLastSnapshot = snapshot;
+            mCurWifiSnapshot = snapshot;
+            mLastWifiSnapshot = last;
 
-        NetworkStats.Entry entry = null;
-        final int size = delta.size();
-        for (int i = 0; i < size; i++) {
-            entry = delta.getValues(i, entry);
+            if (mOnBatteryInternal) {
+                final NetworkStats delta = NetworkStats.subtract(snapshot, last,
+                        null, null, mTmpNetworkStats);
+                mTmpNetworkStats = delta;
 
-            if (entry.rxBytes == 0 || entry.txBytes == 0) continue;
-            if (entry.tag != NetworkStats.TAG_NONE) continue;
+                final int size = delta.size();
+                for (int i = 0; i < size; i++) {
+                    final NetworkStats.Entry entry = delta.getValues(i, mTmpNetworkStatsEntry);
 
-            final Uid u = getUidStatsLocked(entry.uid);
+                    if (DEBUG) {
+                        final NetworkStats.Entry cur = snapshot.getValues(i, null);
+                        Slog.d(TAG, "Wifi uid " + entry.uid + ": delta rx=" + entry.rxBytes
+                                + " tx=" + entry.txBytes + ", cur rx=" + cur.rxBytes
+                                + " tx=" + cur.txBytes);
+                    }
 
-            if (mMobileIfaces.contains(entry.iface)) {
-                u.noteNetworkActivityLocked(NETWORK_MOBILE_RX_BYTES, entry.rxBytes);
-                u.noteNetworkActivityLocked(NETWORK_MOBILE_TX_BYTES, entry.txBytes);
+                    if (entry.rxBytes == 0 || entry.txBytes == 0) continue;
 
-                mNetworkActivityCounters[NETWORK_MOBILE_RX_BYTES].addCountLocked(entry.rxBytes);
-                mNetworkActivityCounters[NETWORK_MOBILE_TX_BYTES].addCountLocked(entry.txBytes);
+                    final Uid u = getUidStatsLocked(mapUid(entry.uid));
+                    u.noteNetworkActivityLocked(NETWORK_WIFI_RX_DATA, entry.rxBytes,
+                            entry.rxPackets);
+                    u.noteNetworkActivityLocked(NETWORK_WIFI_TX_DATA, entry.txBytes,
+                            entry.txPackets);
 
-            } else if (mWifiIfaces.contains(entry.iface)) {
-                u.noteNetworkActivityLocked(NETWORK_WIFI_RX_BYTES, entry.rxBytes);
-                u.noteNetworkActivityLocked(NETWORK_WIFI_TX_BYTES, entry.txBytes);
-
-                mNetworkActivityCounters[NETWORK_WIFI_RX_BYTES].addCountLocked(entry.rxBytes);
-                mNetworkActivityCounters[NETWORK_WIFI_TX_BYTES].addCountLocked(entry.txBytes);
+                    mNetworkByteActivityCounters[NETWORK_WIFI_RX_DATA].addCountLocked(
+                            entry.rxBytes);
+                    mNetworkByteActivityCounters[NETWORK_WIFI_TX_DATA].addCountLocked(
+                            entry.txBytes);
+                    mNetworkPacketActivityCounters[NETWORK_WIFI_RX_DATA].addCountLocked(
+                            entry.rxPackets);
+                    mNetworkPacketActivityCounters[NETWORK_WIFI_TX_DATA].addCountLocked(
+                            entry.txPackets);
+                }
             }
         }
     }
@@ -4980,9 +6256,8 @@
     public long computeUptime(long curTime, int which) {
         switch (which) {
             case STATS_SINCE_CHARGED: return mUptime + (curTime-mUptimeStart);
-            case STATS_LAST: return mLastUptime;
             case STATS_CURRENT: return (curTime-mUptimeStart);
-            case STATS_SINCE_UNPLUGGED: return (curTime-mTrackBatteryUptimeStart);
+            case STATS_SINCE_UNPLUGGED: return (curTime-mOnBatteryTimeBase.getUptimeStart());
         }
         return 0;
     }
@@ -4991,71 +6266,155 @@
     public long computeRealtime(long curTime, int which) {
         switch (which) {
             case STATS_SINCE_CHARGED: return mRealtime + (curTime-mRealtimeStart);
-            case STATS_LAST: return mLastRealtime;
             case STATS_CURRENT: return (curTime-mRealtimeStart);
-            case STATS_SINCE_UNPLUGGED: return (curTime-mTrackBatteryRealtimeStart);
+            case STATS_SINCE_UNPLUGGED: return (curTime-mOnBatteryTimeBase.getRealtimeStart());
         }
         return 0;
     }
 
     @Override
     public long computeBatteryUptime(long curTime, int which) {
-        switch (which) {
-            case STATS_SINCE_CHARGED:
-                return mBatteryUptime + getBatteryUptime(curTime);
-            case STATS_LAST:
-                return mBatteryLastUptime;
-            case STATS_CURRENT:
-                return getBatteryUptime(curTime);
-            case STATS_SINCE_UNPLUGGED:
-                return getBatteryUptimeLocked(curTime) - mUnpluggedBatteryUptime;
-        }
-        return 0;
+        return mOnBatteryTimeBase.computeUptime(curTime, which);
     }
 
     @Override
     public long computeBatteryRealtime(long curTime, int which) {
-        switch (which) {
-            case STATS_SINCE_CHARGED:
-                return mBatteryRealtime + getBatteryRealtimeLocked(curTime);
-            case STATS_LAST:
-                return mBatteryLastRealtime;
-            case STATS_CURRENT:
-                return getBatteryRealtimeLocked(curTime);
-            case STATS_SINCE_UNPLUGGED:
-                return getBatteryRealtimeLocked(curTime) - mUnpluggedBatteryRealtime;
-        }
-        return 0;
+        return mOnBatteryTimeBase.computeRealtime(curTime, which);
     }
 
-    long getBatteryUptimeLocked(long curTime) {
-        long time = mTrackBatteryPastUptime;
-        if (mOnBatteryInternal) {
-            time += curTime - mTrackBatteryUptimeStart;
+    @Override
+    public long computeBatteryScreenOffUptime(long curTime, int which) {
+        return mOnBatteryScreenOffTimeBase.computeUptime(curTime, which);
+    }
+
+    @Override
+    public long computeBatteryScreenOffRealtime(long curTime, int which) {
+        return mOnBatteryScreenOffTimeBase.computeRealtime(curTime, which);
+    }
+
+    private long computeTimePerLevel(long[] steps, int numSteps) {
+        // For now we'll do a simple average across all steps.
+        if (numSteps <= 0) {
+            return -1;
         }
-        return time;
+        long total = 0;
+        for (int i=0; i<numSteps; i++) {
+            total += steps[i];
+        }
+        return total / numSteps;
+        /*
+        long[] buckets = new long[numSteps];
+        int numBuckets = 0;
+        int numToAverage = 4;
+        int i = 0;
+        while (i < numSteps) {
+            long totalTime = 0;
+            int num = 0;
+            for (int j=0; j<numToAverage && (i+j)<numSteps; j++) {
+                totalTime += steps[i+j];
+                num++;
+            }
+            buckets[numBuckets] = totalTime / num;
+            numBuckets++;
+            numToAverage *= 2;
+            i += num;
+        }
+        if (numBuckets < 1) {
+            return -1;
+        }
+        long averageTime = buckets[numBuckets-1];
+        for (i=numBuckets-2; i>=0; i--) {
+            averageTime = (averageTime + buckets[i]) / 2;
+        }
+        return averageTime;
+        */
+    }
+
+    @Override
+    public long computeBatteryTimeRemaining(long curTime) {
+        if (!mOnBattery) {
+            return -1;
+        }
+        /* Simple implementation just looks at the average discharge per level across the
+           entire sample period.
+        int discharge = (getLowDischargeAmountSinceCharge()+getHighDischargeAmountSinceCharge())/2;
+        if (discharge < 2) {
+            return -1;
+        }
+        long duration = computeBatteryRealtime(curTime, STATS_SINCE_CHARGED);
+        if (duration < 1000*1000) {
+            return -1;
+        }
+        long usPerLevel = duration/discharge;
+        return usPerLevel * mCurrentBatteryLevel;
+        */
+        if (mNumDischargeStepDurations < 1) {
+            return -1;
+        }
+        long msPerLevel = computeTimePerLevel(mDischargeStepDurations, mNumDischargeStepDurations);
+        if (msPerLevel <= 0) {
+            return -1;
+        }
+        return (msPerLevel * mCurrentBatteryLevel) * 1000;
+    }
+
+    public int getNumDischargeStepDurations() {
+        return mNumDischargeStepDurations;
+    }
+
+    public long[] getDischargeStepDurationsArray() {
+        return mDischargeStepDurations;
+    }
+
+    @Override
+    public long computeChargeTimeRemaining(long curTime) {
+        if (mOnBattery) {
+            // Not yet working.
+            return -1;
+        }
+        /* Broken
+        int curLevel = mCurrentBatteryLevel;
+        int plugLevel = mDischargePlugLevel;
+        if (plugLevel < 0 || curLevel < (plugLevel+1)) {
+            return -1;
+        }
+        long duration = computeBatteryRealtime(curTime, STATS_SINCE_UNPLUGGED);
+        if (duration < 1000*1000) {
+            return -1;
+        }
+        long usPerLevel = duration/(curLevel-plugLevel);
+        return usPerLevel * (100-curLevel);
+        */
+        if (mNumChargeStepDurations < 1) {
+            return -1;
+        }
+        long msPerLevel = computeTimePerLevel(mChargeStepDurations, mNumChargeStepDurations);
+        if (msPerLevel <= 0) {
+            return -1;
+        }
+        return (msPerLevel * (100-mCurrentBatteryLevel)) * 1000;
+    }
+
+    public int getNumChargeStepDurations() {
+        return mNumChargeStepDurations;
+    }
+
+    public long[] getChargeStepDurationsArray() {
+        return mChargeStepDurations;
     }
 
     long getBatteryUptimeLocked() {
-        return getBatteryUptime(SystemClock.uptimeMillis() * 1000);
+        return mOnBatteryTimeBase.getUptime(SystemClock.uptimeMillis() * 1000);
     }
 
     @Override
     public long getBatteryUptime(long curTime) {
-        return getBatteryUptimeLocked(curTime);
-    }
-
-    long getBatteryRealtimeLocked(long curTime) {
-        long time = mTrackBatteryPastRealtime;
-        if (mOnBatteryInternal) {
-            time += curTime - mTrackBatteryRealtimeStart;
-        }
-        return time;
+        return mOnBatteryTimeBase.getUptime(curTime);
     }
 
     @Override
     public long getBatteryRealtime(long curTime) {
-        return getBatteryRealtimeLocked(curTime);
+        return mOnBatteryTimeBase.getRealtime(curTime);
     }
 
     @Override
@@ -5101,7 +6460,18 @@
             return val;
         }
     }
-    
+
+    @Override
+    public int getDischargeAmount(int which) {
+        int dischargeAmount = which == STATS_SINCE_CHARGED
+                ? getHighDischargeAmountSinceCharge()
+                : (getDischargeStartLevel() - getDischargeCurrentLevel());
+        if (dischargeAmount < 0) {
+            dischargeAmount = 0;
+        }
+        return dischargeAmount;
+    }
+
     public int getDischargeAmountScreenOn() {
         synchronized(this) {
             int val = mDischargeAmountScreenOn;
@@ -5175,24 +6545,7 @@
      * if needed.
      */
     public Uid.Proc getProcessStatsLocked(int uid, String name) {
-        Uid u = getUidStatsLocked(uid);
-        return u.getProcessStatsLocked(name);
-    }
-
-    /**
-     * Retrieve the statistics object for a particular process, given
-     * the name of the process.
-     * @param name process name
-     * @return the statistics object for the process
-     */
-    public Uid.Proc getProcessStatsLocked(String name, int pid) {
-        int uid;
-        if (mUidCache.containsKey(name)) {
-            uid = mUidCache.get(name);
-        } else {
-            uid = Process.getUidForPid(pid);
-            mUidCache.put(name, uid);
-        }
+        uid = mapUid(uid);
         Uid u = getUidStatsLocked(uid);
         return u.getProcessStatsLocked(name);
     }
@@ -5202,6 +6555,7 @@
      * if needed.
      */
     public Uid.Pkg getPackageStatsLocked(int uid, String pkg) {
+        uid = mapUid(uid);
         Uid u = getUidStatsLocked(uid);
         return u.getPackageStatsLocked(pkg);
     }
@@ -5211,6 +6565,7 @@
      * if needed.
      */
     public Uid.Pkg.Serv getServiceStatsLocked(int uid, String pkg, String name) {
+        uid = mapUid(uid);
         Uid u = getUidStatsLocked(uid);
         return u.getServiceStatsLocked(pkg, name);
     }
@@ -5251,7 +6606,7 @@
                                     time = (time*uidRunningTime)/totalRunningTime;
                                     SamplingCounter uidSc = uidProc.mSpeedBins[sb];
                                     if (uidSc == null) {
-                                        uidSc = new SamplingCounter(mUnpluggables);
+                                        uidSc = new SamplingCounter(mOnBatteryTimeBase);
                                         uidProc.mSpeedBins[sb] = uidSc;
                                     }
                                     uidSc.mCount.addAndGet((int)time);
@@ -5388,15 +6743,20 @@
             stream.close();
 
             readSummaryFromParcel(in);
-        } catch(java.io.IOException e) {
+        } catch(Exception e) {
             Slog.e("BatteryStats", "Error reading battery statistics", e);
         }
 
-        long now = SystemClock.elapsedRealtime();
-        if (USE_OLD_HISTORY) {
-            addHistoryRecordLocked(now, HistoryItem.CMD_START);
+        if (mHistoryBuffer.dataPosition() > 0) {
+            mRecordingHistory = true;
+            final long elapsedRealtime = SystemClock.elapsedRealtime();
+            final long uptime = SystemClock.uptimeMillis();
+            if (USE_OLD_HISTORY) {
+                addHistoryRecordLocked(elapsedRealtime, uptime, HistoryItem.CMD_START, mHistoryCur);
+            }
+            addHistoryBufferLocked(elapsedRealtime, uptime, HistoryItem.CMD_START, mHistoryCur);
+            startRecordingHistory(elapsedRealtime, uptime, false);
         }
-        addHistoryBufferLocked(now, HistoryItem.CMD_START);
     }
 
     public int describeContents() {
@@ -5408,6 +6768,25 @@
 
         mHistoryBuffer.setDataSize(0);
         mHistoryBuffer.setDataPosition(0);
+        mHistoryTagPool.clear();
+        mNextHistoryTagIdx = 0;
+        mNumHistoryTagChars = 0;
+
+        int numTags = in.readInt();
+        for (int i=0; i<numTags; i++) {
+            int idx = in.readInt();
+            String str = in.readString();
+            int uid = in.readInt();
+            HistoryTag tag = new HistoryTag();
+            tag.string = str;
+            tag.uid = uid;
+            tag.poolIdx = idx;
+            mHistoryTagPool.put(tag, idx);
+            if (idx >= mNextHistoryTagIdx) {
+                mNextHistoryTagIdx = idx+1;
+            }
+            mNumHistoryTagChars += tag.string.length() + 1;
+        }
 
         int bufSize = in.readInt();
         int curPos = in.dataPosition();
@@ -5471,11 +6850,18 @@
             StringBuilder sb = new StringBuilder(128);
             sb.append("****************** WRITING mHistoryBaseTime: ");
             TimeUtils.formatDuration(mHistoryBaseTime, sb);
-            sb.append(" mLastHistoryTime: ");
-            TimeUtils.formatDuration(mLastHistoryTime, sb);
+            sb.append(" mLastHistoryElapsedRealtime: ");
+            TimeUtils.formatDuration(mLastHistoryElapsedRealtime, sb);
             Slog.i(TAG, sb.toString());
         }
-        out.writeLong(mHistoryBaseTime + mLastHistoryTime);
+        out.writeLong(mHistoryBaseTime + mLastHistoryElapsedRealtime);
+        out.writeInt(mHistoryTagPool.size());
+        for (HashMap.Entry<HistoryTag, Integer> ent : mHistoryTagPool.entrySet()) {
+            HistoryTag tag = ent.getKey();
+            out.writeInt(ent.getValue());
+            out.writeString(tag.string);
+            out.writeInt(tag.uid);
+        }
         out.writeInt(mHistoryBuffer.dataSize());
         if (DEBUG_HISTORY) Slog.i(TAG, "***************** WRITING HISTORY: "
                 + mHistoryBuffer.dataSize() + " bytes at " + out.dataPosition());
@@ -5509,16 +6895,23 @@
         readHistory(in, true);
 
         mStartCount = in.readInt();
-        mBatteryUptime = in.readLong();
-        mBatteryRealtime = in.readLong();
         mUptime = in.readLong();
         mRealtime = in.readLong();
+        mStartClockTime = in.readLong();
+        mOnBatteryTimeBase.readSummaryFromParcel(in);
+        mOnBatteryScreenOffTimeBase.readSummaryFromParcel(in);
         mDischargeUnplugLevel = in.readInt();
+        mDischargePlugLevel = in.readInt();
         mDischargeCurrentLevel = in.readInt();
+        mCurrentBatteryLevel = in.readInt();
         mLowDischargeAmountSinceCharge = in.readInt();
         mHighDischargeAmountSinceCharge = in.readInt();
         mDischargeAmountScreenOnSinceCharge = in.readInt();
         mDischargeAmountScreenOffSinceCharge = in.readInt();
+        mNumDischargeStepDurations = in.readInt();
+        in.readLongArray(mDischargeStepDurations);
+        mNumChargeStepDurations = in.readInt();
+        in.readLongArray(mChargeStepDurations);
 
         mStartCount++;
 
@@ -5538,14 +6931,27 @@
             mPhoneDataConnectionsTimer[i].readSummaryFromParcelLocked(in);
         }
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-            mNetworkActivityCounters[i].readSummaryFromParcelLocked(in);
+            mNetworkByteActivityCounters[i].readSummaryFromParcelLocked(in);
+            mNetworkPacketActivityCounters[i].readSummaryFromParcelLocked(in);
         }
+        mMobileRadioPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
+        mMobileRadioActiveTimer.readSummaryFromParcelLocked(in);
+        mMobileRadioActivePerAppTimer.readSummaryFromParcelLocked(in);
+        mMobileRadioActiveAdjustedTime.readSummaryFromParcelLocked(in);
+        mMobileRadioActiveUnknownTime.readSummaryFromParcelLocked(in);
+        mMobileRadioActiveUnknownCount.readSummaryFromParcelLocked(in);
         mWifiOn = false;
         mWifiOnTimer.readSummaryFromParcelLocked(in);
         mGlobalWifiRunning = false;
         mGlobalWifiRunningTimer.readSummaryFromParcelLocked(in);
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            mWifiStateTimer[i].readSummaryFromParcelLocked(in);
+        }
         mBluetoothOn = false;
         mBluetoothOnTimer.readSummaryFromParcelLocked(in);
+        for (int i=0; i< NUM_BLUETOOTH_STATES; i++) {
+            mBluetoothStateTimer[i].readSummaryFromParcelLocked(in);
+        }
 
         int NKW = in.readInt();
         if (NKW > 10000) {
@@ -5559,7 +6965,22 @@
             }
         }
 
+        int NWR = in.readInt();
+        if (NWR > 10000) {
+            Slog.w(TAG, "File corrupt: too many wakeup reasons " + NWR);
+            return;
+        }
+        for (int iwr = 0; iwr < NWR; iwr++) {
+            if (in.readInt() != 0) {
+                String reasonName = in.readString();
+                getWakeupReasonCounterLocked(reasonName).readSummaryFromParcelLocked(in);
+            }
+        }
+
         sNumSpeedSteps = in.readInt();
+        if (sNumSpeedSteps < 0 || sNumSpeedSteps > 100) {
+            throw new BadParcelableException("Bad speed steps in data: " + sNumSpeedSteps);
+        }
 
         final int NU = in.readInt();
         if (NU > 10000) {
@@ -5619,12 +7040,15 @@
             }
 
             if (in.readInt() != 0) {
-                if (u.mNetworkActivityCounters == null) {
+                if (u.mNetworkByteActivityCounters == null) {
                     u.initNetworkActivityLocked();
                 }
                 for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-                    u.mNetworkActivityCounters[i].readSummaryFromParcelLocked(in);
+                    u.mNetworkByteActivityCounters[i].readSummaryFromParcelLocked(in);
+                    u.mNetworkPacketActivityCounters[i].readSummaryFromParcelLocked(in);
                 }
+                u.mMobileRadioActiveTime.readSummaryFromParcelLocked(in);
+                u.mMobileRadioActiveCount.readSummaryFromParcelLocked(in);
             }
 
             int NW = in.readInt();
@@ -5678,7 +7102,7 @@
                 p.mSpeedBins = new SamplingCounter[NSB];
                 for (int i=0; i<NSB; i++) {
                     if (in.readInt() != 0) {
-                        p.mSpeedBins[i] = new SamplingCounter(mUnpluggables);
+                        p.mSpeedBins[i] = new SamplingCounter(mOnBatteryTimeBase);
                         p.mSpeedBins[i].readSummaryFromParcelLocked(in);
                     }
                 }
@@ -5719,50 +7143,65 @@
      * @param out the Parcel to be written to.
      */
     public void writeSummaryToParcel(Parcel out) {
-        // Need to update with current kernel wake lock counts.
-        updateKernelWakelocksLocked();
-        updateNetworkActivityLocked();
+        pullPendingStateUpdatesLocked();
 
         final long NOW_SYS = SystemClock.uptimeMillis() * 1000;
         final long NOWREAL_SYS = SystemClock.elapsedRealtime() * 1000;
-        final long NOW = getBatteryUptimeLocked(NOW_SYS);
-        final long NOWREAL = getBatteryRealtimeLocked(NOWREAL_SYS);
 
         out.writeInt(VERSION);
 
         writeHistory(out, true);
 
         out.writeInt(mStartCount);
-        out.writeLong(computeBatteryUptime(NOW_SYS, STATS_SINCE_CHARGED));
-        out.writeLong(computeBatteryRealtime(NOWREAL_SYS, STATS_SINCE_CHARGED));
         out.writeLong(computeUptime(NOW_SYS, STATS_SINCE_CHARGED));
         out.writeLong(computeRealtime(NOWREAL_SYS, STATS_SINCE_CHARGED));
+        out.writeLong(mStartClockTime);
+        mOnBatteryTimeBase.writeSummaryToParcel(out, NOW_SYS, NOWREAL_SYS);
+        mOnBatteryScreenOffTimeBase.writeSummaryToParcel(out, NOW_SYS, NOWREAL_SYS);
         out.writeInt(mDischargeUnplugLevel);
+        out.writeInt(mDischargePlugLevel);
         out.writeInt(mDischargeCurrentLevel);
+        out.writeInt(mCurrentBatteryLevel);
         out.writeInt(getLowDischargeAmountSinceCharge());
         out.writeInt(getHighDischargeAmountSinceCharge());
         out.writeInt(getDischargeAmountScreenOnSinceCharge());
         out.writeInt(getDischargeAmountScreenOffSinceCharge());
-        
-        mScreenOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+        out.writeInt(mNumDischargeStepDurations);
+        out.writeLongArray(mDischargeStepDurations);
+        out.writeInt(mNumChargeStepDurations);
+        out.writeLongArray(mChargeStepDurations);
+
+        mScreenOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
-            mScreenBrightnessTimer[i].writeSummaryFromParcelLocked(out, NOWREAL);
+            mScreenBrightnessTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         }
         mInputEventCounter.writeSummaryFromParcelLocked(out);
-        mPhoneOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+        mPhoneOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            mPhoneSignalStrengthsTimer[i].writeSummaryFromParcelLocked(out, NOWREAL);
+            mPhoneSignalStrengthsTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         }
-        mPhoneSignalScanningTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+        mPhoneSignalScanningTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            mPhoneDataConnectionsTimer[i].writeSummaryFromParcelLocked(out, NOWREAL);
+            mPhoneDataConnectionsTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS);
         }
         for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-            mNetworkActivityCounters[i].writeSummaryFromParcelLocked(out);
+            mNetworkByteActivityCounters[i].writeSummaryFromParcelLocked(out);
+            mNetworkPacketActivityCounters[i].writeSummaryFromParcelLocked(out);
         }
-        mWifiOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
-        mGlobalWifiRunningTimer.writeSummaryFromParcelLocked(out, NOWREAL);
-        mBluetoothOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+        mMobileRadioActiveTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        mMobileRadioActivePerAppTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        mMobileRadioActiveAdjustedTime.writeSummaryFromParcelLocked(out);
+        mMobileRadioActiveUnknownTime.writeSummaryFromParcelLocked(out);
+        mMobileRadioActiveUnknownCount.writeSummaryFromParcelLocked(out);
+        mWifiOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        mGlobalWifiRunningTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            mWifiStateTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        }
+        mBluetoothOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        for (int i=0; i< NUM_BLUETOOTH_STATES; i++) {
+            mBluetoothStateTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+        }
 
         out.writeInt(mKernelWakelockStats.size());
         for (Map.Entry<String, SamplingTimer> ent : mKernelWakelockStats.entrySet()) {
@@ -5770,7 +7209,19 @@
             if (kwlt != null) {
                 out.writeInt(1);
                 out.writeString(ent.getKey());
-                ent.getValue().writeSummaryFromParcelLocked(out, NOWREAL);
+                kwlt.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
+            } else {
+                out.writeInt(0);
+            }
+        }
+
+        out.writeInt(mWakeupReasonStats.size());
+        for (Map.Entry<String, LongSamplingCounter> ent : mWakeupReasonStats.entrySet()) {
+            LongSamplingCounter counter = ent.getValue();
+            if (counter != null) {
+                out.writeInt(1);
+                out.writeString(ent.getKey());
+                counter.writeSummaryFromParcelLocked(out);
             } else {
                 out.writeInt(0);
             }
@@ -5785,57 +7236,57 @@
 
             if (u.mWifiRunningTimer != null) {
                 out.writeInt(1);
-                u.mWifiRunningTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mWifiRunningTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
             if (u.mFullWifiLockTimer != null) {
                 out.writeInt(1);
-                u.mFullWifiLockTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mFullWifiLockTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
             if (u.mWifiScanTimer != null) {
                 out.writeInt(1);
-                u.mWifiScanTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mWifiScanTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
             for (int i = 0; i < Uid.NUM_WIFI_BATCHED_SCAN_BINS; i++) {
                 if (u.mWifiBatchedScanTimer[i] != null) {
                     out.writeInt(1);
-                    u.mWifiBatchedScanTimer[i].writeSummaryFromParcelLocked(out, NOWREAL);
+                    u.mWifiBatchedScanTimer[i].writeSummaryFromParcelLocked(out, NOWREAL_SYS);
                 } else {
                     out.writeInt(0);
                 }
             }
             if (u.mWifiMulticastTimer != null) {
                 out.writeInt(1);
-                u.mWifiMulticastTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mWifiMulticastTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
             if (u.mAudioTurnedOnTimer != null) {
                 out.writeInt(1);
-                u.mAudioTurnedOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mAudioTurnedOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
             if (u.mVideoTurnedOnTimer != null) {
                 out.writeInt(1);
-                u.mVideoTurnedOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mVideoTurnedOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
             if (u.mForegroundActivityTimer != null) {
                 out.writeInt(1);
-                u.mForegroundActivityTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mForegroundActivityTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
             if (u.mVibratorOnTimer != null) {
                 out.writeInt(1);
-                u.mVibratorOnTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                u.mVibratorOnTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
             } else {
                 out.writeInt(0);
             }
@@ -5849,13 +7300,16 @@
                 }
             }
 
-            if (u.mNetworkActivityCounters == null) {
+            if (u.mNetworkByteActivityCounters == null) {
                 out.writeInt(0);
             } else {
                 out.writeInt(1);
                 for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-                    u.mNetworkActivityCounters[i].writeSummaryFromParcelLocked(out);
+                    u.mNetworkByteActivityCounters[i].writeSummaryFromParcelLocked(out);
+                    u.mNetworkPacketActivityCounters[i].writeSummaryFromParcelLocked(out);
                 }
+                u.mMobileRadioActiveTime.writeSummaryFromParcelLocked(out);
+                u.mMobileRadioActiveCount.writeSummaryFromParcelLocked(out);
             }
 
             int NW = u.mWakelockStats.size();
@@ -5867,19 +7321,19 @@
                     Uid.Wakelock wl = ent.getValue();
                     if (wl.mTimerFull != null) {
                         out.writeInt(1);
-                        wl.mTimerFull.writeSummaryFromParcelLocked(out, NOWREAL);
+                        wl.mTimerFull.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
                     } else {
                         out.writeInt(0);
                     }
                     if (wl.mTimerPartial != null) {
                         out.writeInt(1);
-                        wl.mTimerPartial.writeSummaryFromParcelLocked(out, NOWREAL);
+                        wl.mTimerPartial.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
                     } else {
                         out.writeInt(0);
                     }
                     if (wl.mTimerWindow != null) {
                         out.writeInt(1);
-                        wl.mTimerWindow.writeSummaryFromParcelLocked(out, NOWREAL);
+                        wl.mTimerWindow.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
                     } else {
                         out.writeInt(0);
                     }
@@ -5895,7 +7349,7 @@
                     Uid.Sensor se = ent.getValue();
                     if (se.mTimer != null) {
                         out.writeInt(1);
-                        se.mTimer.writeSummaryFromParcelLocked(out, NOWREAL);
+                        se.mTimer.writeSummaryFromParcelLocked(out, NOWREAL_SYS);
                     } else {
                         out.writeInt(0);
                     }
@@ -5942,7 +7396,8 @@
                                 : ps.mServiceStats.entrySet()) {
                             out.writeString(sent.getKey());
                             BatteryStatsImpl.Uid.Pkg.Serv ss = sent.getValue();
-                            long time = ss.getStartTimeToNowLocked(NOW);
+                            long time = ss.getStartTimeToNowLocked(
+                                    mOnBatteryTimeBase.getUptime(NOW_SYS));
                             out.writeLong(time);
                             out.writeInt(ss.mStarts);
                             out.writeInt(ss.mLaunches);
@@ -5966,64 +7421,75 @@
         readHistory(in, false);
 
         mStartCount = in.readInt();
-        mBatteryUptime = in.readLong();
-        mBatteryLastUptime = 0;
-        mBatteryRealtime = in.readLong();
-        mBatteryLastRealtime = 0;
-        mScreenOn = false;
-        mScreenOnTimer = new StopwatchTimer(null, -1, null, mUnpluggables, in);
-        for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
-            mScreenBrightnessTimer[i] = new StopwatchTimer(null, -100-i,
-                    null, mUnpluggables, in);
-        }
-        mInputEventCounter = new Counter(mUnpluggables, in);
-        mPhoneOn = false;
-        mPhoneOnTimer = new StopwatchTimer(null, -2, null, mUnpluggables, in);
-        for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(null, -200-i,
-                    null, mUnpluggables, in);
-        }
-        mPhoneSignalScanningTimer = new StopwatchTimer(null, -200+1, null, mUnpluggables, in);
-        for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            mPhoneDataConnectionsTimer[i] = new StopwatchTimer(null, -300-i,
-                    null, mUnpluggables, in);
-        }
-        for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-            mNetworkActivityCounters[i] = new LongSamplingCounter(mUnpluggables, in);
-        }
-        mWifiOn = false;
-        mWifiOnTimer = new StopwatchTimer(null, -2, null, mUnpluggables, in);
-        mGlobalWifiRunning = false;
-        mGlobalWifiRunningTimer = new StopwatchTimer(null, -2, null, mUnpluggables, in);
-        mBluetoothOn = false;
-        mBluetoothOnTimer = new StopwatchTimer(null, -2, null, mUnpluggables, in);
+        mStartClockTime = in.readLong();
         mUptime = in.readLong();
         mUptimeStart = in.readLong();
-        mLastUptime = 0;
         mRealtime = in.readLong();
         mRealtimeStart = in.readLong();
-        mLastRealtime = 0;
         mOnBattery = in.readInt() != 0;
         mOnBatteryInternal = false; // we are no longer really running.
-        mTrackBatteryPastUptime = in.readLong();
-        mTrackBatteryUptimeStart = in.readLong();
-        mTrackBatteryPastRealtime = in.readLong();
-        mTrackBatteryRealtimeStart = in.readLong();
-        mUnpluggedBatteryUptime = in.readLong();
-        mUnpluggedBatteryRealtime = in.readLong();
+        mOnBatteryTimeBase.readFromParcel(in);
+        mOnBatteryScreenOffTimeBase.readFromParcel(in);
+
+        mScreenOn = false;
+        mScreenOnTimer = new StopwatchTimer(null, -1, null, mOnBatteryTimeBase, in);
+        for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
+            mScreenBrightnessTimer[i] = new StopwatchTimer(null, -100-i, null, mOnBatteryTimeBase,
+                    in);
+        }
+        mInputEventCounter = new Counter(mOnBatteryTimeBase, in);
+        mPhoneOn = false;
+        mPhoneOnTimer = new StopwatchTimer(null, -2, null, mOnBatteryTimeBase, in);
+        for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
+            mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(null, -200-i,
+                    null, mOnBatteryTimeBase, in);
+        }
+        mPhoneSignalScanningTimer = new StopwatchTimer(null, -200+1, null, mOnBatteryTimeBase, in);
+        for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
+            mPhoneDataConnectionsTimer[i] = new StopwatchTimer(null, -300-i,
+                    null, mOnBatteryTimeBase, in);
+        }
+        for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
+            mNetworkByteActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase, in);
+            mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase, in);
+        }
+        mMobileRadioPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
+        mMobileRadioActiveTimer = new StopwatchTimer(null, -400, null, mOnBatteryTimeBase, in);
+        mMobileRadioActivePerAppTimer = new StopwatchTimer(null, -401, null, mOnBatteryTimeBase,
+                in);
+        mMobileRadioActiveAdjustedTime = new LongSamplingCounter(mOnBatteryTimeBase, in);
+        mMobileRadioActiveUnknownTime = new LongSamplingCounter(mOnBatteryTimeBase, in);
+        mMobileRadioActiveUnknownCount = new LongSamplingCounter(mOnBatteryTimeBase, in);
+        mWifiOn = false;
+        mWifiOnTimer = new StopwatchTimer(null, -2, null, mOnBatteryTimeBase, in);
+        mGlobalWifiRunning = false;
+        mGlobalWifiRunningTimer = new StopwatchTimer(null, -2, null, mOnBatteryTimeBase, in);
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            mWifiStateTimer[i] = new StopwatchTimer(null, -600-i,
+                    null, mOnBatteryTimeBase, in);
+        }
+        mBluetoothOn = false;
+        mBluetoothOnTimer = new StopwatchTimer(null, -2, null, mOnBatteryTimeBase, in);
+        for (int i=0; i< NUM_BLUETOOTH_STATES; i++) {
+            mBluetoothStateTimer[i] = new StopwatchTimer(null, -500-i,
+                    null, mOnBatteryTimeBase, in);
+        }
         mDischargeUnplugLevel = in.readInt();
+        mDischargePlugLevel = in.readInt();
         mDischargeCurrentLevel = in.readInt();
+        mCurrentBatteryLevel = in.readInt();
         mLowDischargeAmountSinceCharge = in.readInt();
         mHighDischargeAmountSinceCharge = in.readInt();
         mDischargeAmountScreenOn = in.readInt();
         mDischargeAmountScreenOnSinceCharge = in.readInt();
         mDischargeAmountScreenOff = in.readInt();
         mDischargeAmountScreenOffSinceCharge = in.readInt();
+        mNumDischargeStepDurations = in.readInt();
+        in.readLongArray(mDischargeStepDurations);
+        mNumChargeStepDurations = in.readInt();
+        in.readLongArray(mChargeStepDurations);
         mLastWriteTime = in.readLong();
 
-        mRadioDataUptime = in.readLong();
-        mRadioDataStart = -1;
-
         mBluetoothPingCount = in.readInt();
         mBluetoothPingStart = -1;
 
@@ -6032,12 +7498,22 @@
         for (int ikw = 0; ikw < NKW; ikw++) {
             if (in.readInt() != 0) {
                 String wakelockName = in.readString();
-                in.readInt(); // Extra 0/1 written by Timer.writeTimerToParcel
-                SamplingTimer kwlt = new SamplingTimer(mUnpluggables, mOnBattery, in);
+                SamplingTimer kwlt = new SamplingTimer(mOnBatteryTimeBase, in);
                 mKernelWakelockStats.put(wakelockName, kwlt);
             }
         }
 
+        mWakeupReasonStats.clear();
+        int NWR = in.readInt();
+        for (int iwr = 0; iwr < NWR; iwr++) {
+            if (in.readInt() != 0) {
+                String reasonName = in.readString();
+                LongSamplingCounter counter = new LongSamplingCounter(mOnBatteryScreenOffTimeBase,
+                        in);
+                mWakeupReasonStats.put(reasonName, counter);
+            }
+        }
+
         mPartialTimers.clear();
         mFullTimers.clear();
         mWindowTimers.clear();
@@ -6054,7 +7530,7 @@
         for (int i = 0; i < numUids; i++) {
             int uid = in.readInt();
             Uid u = new Uid(uid);
-            u.readFromParcelLocked(mUnpluggables, in);
+            u.readFromParcelLocked(mOnBatteryTimeBase, mOnBatteryScreenOffTimeBase, in);
             mUidStats.append(uid, u);
         }
     }
@@ -6070,64 +7546,74 @@
     @SuppressWarnings("unused")
     void writeToParcelLocked(Parcel out, boolean inclUids, int flags) {
         // Need to update with current kernel wake lock counts.
-        updateKernelWakelocksLocked();
-        updateNetworkActivityLocked();
+        pullPendingStateUpdatesLocked();
 
         final long uSecUptime = SystemClock.uptimeMillis() * 1000;
         final long uSecRealtime = SystemClock.elapsedRealtime() * 1000;
-        final long batteryUptime = getBatteryUptimeLocked(uSecUptime);
-        final long batteryRealtime = getBatteryRealtimeLocked(uSecRealtime);
+        final long batteryRealtime = mOnBatteryTimeBase.getRealtime(uSecRealtime);
+        final long batteryScreenOffRealtime = mOnBatteryScreenOffTimeBase.getRealtime(uSecRealtime);
 
         out.writeInt(MAGIC);
 
         writeHistory(out, false);
 
         out.writeInt(mStartCount);
-        out.writeLong(mBatteryUptime);
-        out.writeLong(mBatteryRealtime);
-        mScreenOnTimer.writeToParcel(out, batteryRealtime);
-        for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
-            mScreenBrightnessTimer[i].writeToParcel(out, batteryRealtime);
-        }
-        mInputEventCounter.writeToParcel(out);
-        mPhoneOnTimer.writeToParcel(out, batteryRealtime);
-        for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
-            mPhoneSignalStrengthsTimer[i].writeToParcel(out, batteryRealtime);
-        }
-        mPhoneSignalScanningTimer.writeToParcel(out, batteryRealtime);
-        for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
-            mPhoneDataConnectionsTimer[i].writeToParcel(out, batteryRealtime);
-        }
-        for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
-            mNetworkActivityCounters[i].writeToParcel(out);
-        }
-        mWifiOnTimer.writeToParcel(out, batteryRealtime);
-        mGlobalWifiRunningTimer.writeToParcel(out, batteryRealtime);
-        mBluetoothOnTimer.writeToParcel(out, batteryRealtime);
+        out.writeLong(mStartClockTime);
         out.writeLong(mUptime);
         out.writeLong(mUptimeStart);
         out.writeLong(mRealtime);
         out.writeLong(mRealtimeStart);
         out.writeInt(mOnBattery ? 1 : 0);
-        out.writeLong(batteryUptime);
-        out.writeLong(mTrackBatteryUptimeStart);
-        out.writeLong(batteryRealtime);
-        out.writeLong(mTrackBatteryRealtimeStart);
-        out.writeLong(mUnpluggedBatteryUptime);
-        out.writeLong(mUnpluggedBatteryRealtime);
+        mOnBatteryTimeBase.writeToParcel(out, uSecUptime, uSecRealtime);
+        mOnBatteryScreenOffTimeBase.writeToParcel(out, uSecUptime, uSecRealtime);
+
+        mScreenOnTimer.writeToParcel(out, uSecRealtime);
+        for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) {
+            mScreenBrightnessTimer[i].writeToParcel(out, uSecRealtime);
+        }
+        mInputEventCounter.writeToParcel(out);
+        mPhoneOnTimer.writeToParcel(out, uSecRealtime);
+        for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) {
+            mPhoneSignalStrengthsTimer[i].writeToParcel(out, uSecRealtime);
+        }
+        mPhoneSignalScanningTimer.writeToParcel(out, uSecRealtime);
+        for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) {
+            mPhoneDataConnectionsTimer[i].writeToParcel(out, uSecRealtime);
+        }
+        for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) {
+            mNetworkByteActivityCounters[i].writeToParcel(out);
+            mNetworkPacketActivityCounters[i].writeToParcel(out);
+        }
+        mMobileRadioActiveTimer.writeToParcel(out, uSecRealtime);
+        mMobileRadioActivePerAppTimer.writeToParcel(out, uSecRealtime);
+        mMobileRadioActiveAdjustedTime.writeToParcel(out);
+        mMobileRadioActiveUnknownTime.writeToParcel(out);
+        mMobileRadioActiveUnknownCount.writeToParcel(out);
+        mWifiOnTimer.writeToParcel(out, uSecRealtime);
+        mGlobalWifiRunningTimer.writeToParcel(out, uSecRealtime);
+        for (int i=0; i<NUM_WIFI_STATES; i++) {
+            mWifiStateTimer[i].writeToParcel(out, uSecRealtime);
+        }
+        mBluetoothOnTimer.writeToParcel(out, uSecRealtime);
+        for (int i=0; i< NUM_BLUETOOTH_STATES; i++) {
+            mBluetoothStateTimer[i].writeToParcel(out, uSecRealtime);
+        }
         out.writeInt(mDischargeUnplugLevel);
+        out.writeInt(mDischargePlugLevel);
         out.writeInt(mDischargeCurrentLevel);
+        out.writeInt(mCurrentBatteryLevel);
         out.writeInt(mLowDischargeAmountSinceCharge);
         out.writeInt(mHighDischargeAmountSinceCharge);
         out.writeInt(mDischargeAmountScreenOn);
         out.writeInt(mDischargeAmountScreenOnSinceCharge);
         out.writeInt(mDischargeAmountScreenOff);
         out.writeInt(mDischargeAmountScreenOffSinceCharge);
+        out.writeInt(mNumDischargeStepDurations);
+        out.writeLongArray(mDischargeStepDurations);
+        out.writeInt(mNumChargeStepDurations);
+        out.writeLongArray(mChargeStepDurations);
         out.writeLong(mLastWriteTime);
 
-        // Write radio uptime for data
-        out.writeLong(getRadioDataUptime());
-
         out.writeInt(getBluetoothPingCount());
 
         if (inclUids) {
@@ -6137,7 +7623,18 @@
                 if (kwlt != null) {
                     out.writeInt(1);
                     out.writeString(ent.getKey());
-                    Timer.writeTimerToParcel(out, kwlt, batteryRealtime);
+                    kwlt.writeToParcel(out, uSecRealtime);
+                } else {
+                    out.writeInt(0);
+                }
+            }
+            out.writeInt(mWakeupReasonStats.size());
+            for (Map.Entry<String, LongSamplingCounter> ent : mWakeupReasonStats.entrySet()) {
+                LongSamplingCounter counter = ent.getValue();
+                if (counter != null) {
+                    out.writeInt(1);
+                    out.writeString(ent.getKey());
+                    counter.writeToParcel(out);
                 } else {
                     out.writeInt(0);
                 }
@@ -6155,7 +7652,7 @@
                 out.writeInt(mUidStats.keyAt(i));
                 Uid uid = mUidStats.valueAt(i);
 
-                uid.writeToParcelLocked(out, batteryRealtime);
+                uid.writeToParcelLocked(out, uSecRealtime);
             }
         } else {
             out.writeInt(0);
@@ -6175,12 +7672,15 @@
 
     public void prepareForDumpLocked() {
         // Need to retrieve current kernel wake lock stats before printing.
-        updateKernelWakelocksLocked();
-        updateNetworkActivityLocked();
+        pullPendingStateUpdatesLocked();
     }
 
-    public void dumpLocked(PrintWriter pw, boolean isUnpluggedOnly, int reqUid) {
+    public void dumpLocked(Context context, PrintWriter pw, int flags, int reqUid, long histStart) {
         if (DEBUG) {
+            pw.println("mOnBatteryTimeBase:");
+            mOnBatteryTimeBase.dump(pw, "  ");
+            pw.println("mOnBatteryScreenOffTimeBase:");
+            mOnBatteryScreenOffTimeBase.dump(pw, "  ");
             Printer pr = new PrintWriterPrinter(pw);
             pr.println("*** Screen timer:");
             mScreenOnTimer.logState(pr, "  ");
@@ -6202,13 +7702,26 @@
                 pr.println("*** Data connection type #" + i + ":");
                 mPhoneDataConnectionsTimer[i].logState(pr, "  ");
             }
+            pr.println("*** mMobileRadioPowerState=" + mMobileRadioPowerState);
+            pr.println("*** Mobile network active timer:");
+            mMobileRadioActiveTimer.logState(pr, "  ");
+            pr.println("*** Mobile network active adjusted timer:");
+            mMobileRadioActiveAdjustedTime.logState(pr, "  ");
             pr.println("*** Wifi timer:");
             mWifiOnTimer.logState(pr, "  ");
             pr.println("*** WifiRunning timer:");
             mGlobalWifiRunningTimer.logState(pr, "  ");
+            for (int i=0; i<NUM_WIFI_STATES; i++) {
+                pr.println("*** Wifi state #" + i + ":");
+                mWifiStateTimer[i].logState(pr, "  ");
+            }
             pr.println("*** Bluetooth timer:");
             mBluetoothOnTimer.logState(pr, "  ");
+            for (int i=0; i< NUM_BLUETOOTH_STATES; i++) {
+                pr.println("*** Bluetooth active type #" + i + ":");
+                mBluetoothStateTimer[i].logState(pr, "  ");
+            }
         }
-        super.dumpLocked(pw, isUnpluggedOnly, reqUid);
+        super.dumpLocked(context, pw, flags, reqUid, histStart);
     }
 }
diff --git a/core/java/com/android/internal/os/HandlerCaller.java b/core/java/com/android/internal/os/HandlerCaller.java
index d9e3ef6..40834ba 100644
--- a/core/java/com/android/internal/os/HandlerCaller.java
+++ b/core/java/com/android/internal/os/HandlerCaller.java
@@ -85,7 +85,27 @@
     public void sendMessage(Message msg) {
         mH.sendMessage(msg);
     }
-    
+
+    public SomeArgs sendMessageAndWait(Message msg) {
+        if (Looper.myLooper() == mH.getLooper()) {
+            throw new IllegalStateException("Can't wait on same thread as looper");
+        }
+        SomeArgs args = (SomeArgs)msg.obj;
+        args.mWaitState = SomeArgs.WAIT_WAITING;
+        mH.sendMessage(msg);
+        synchronized (args) {
+            while (args.mWaitState == SomeArgs.WAIT_WAITING) {
+                try {
+                    args.wait();
+                } catch (InterruptedException e) {
+                    return null;
+                }
+            }
+        }
+        args.mWaitState = SomeArgs.WAIT_NONE;
+        return args;
+    }
+
     public Message obtainMessage(int what) {
         return mH.obtainMessage(what);
     }
@@ -136,6 +156,14 @@
         return mH.obtainMessage(what, arg1, 0, args);
     }
     
+    public Message obtainMessageIOOO(int what, int arg1, Object arg2, Object arg3, Object arg4) {
+        SomeArgs args = SomeArgs.obtain();
+        args.arg1 = arg2;
+        args.arg2 = arg3;
+        args.arg3 = arg4;
+        return mH.obtainMessage(what, arg1, 0, args);
+    }
+
     public Message obtainMessageOO(int what, Object arg1, Object arg2) {
         SomeArgs args = SomeArgs.obtain();
         args.arg1 = arg1;
@@ -161,6 +189,17 @@
         return mH.obtainMessage(what, 0, 0, args);
     }
     
+    public Message obtainMessageOOOOO(int what, Object arg1, Object arg2,
+            Object arg3, Object arg4, Object arg5) {
+        SomeArgs args = SomeArgs.obtain();
+        args.arg1 = arg1;
+        args.arg2 = arg2;
+        args.arg3 = arg3;
+        args.arg4 = arg4;
+        args.arg5 = arg5;
+        return mH.obtainMessage(what, 0, 0, args);
+    }
+
     public Message obtainMessageIIII(int what, int arg1, int arg2,
             int arg3, int arg4) {
         SomeArgs args = SomeArgs.obtain();
diff --git a/core/java/com/android/internal/os/SomeArgs.java b/core/java/com/android/internal/os/SomeArgs.java
index 6fb72f1..7edf4cc 100644
--- a/core/java/com/android/internal/os/SomeArgs.java
+++ b/core/java/com/android/internal/os/SomeArgs.java
@@ -35,6 +35,11 @@
 
     private boolean mInPool;
 
+    static final int WAIT_NONE = 0;
+    static final int WAIT_WAITING = 1;
+    static final int WAIT_FINISHED = 2;
+    int mWaitState = WAIT_NONE;
+
     public Object arg1;
     public Object arg2;
     public Object arg3;
@@ -70,6 +75,9 @@
         if (mInPool) {
             throw new IllegalStateException("Already recycled.");
         }
+        if (mWaitState != WAIT_NONE) {
+            return;
+        }
         synchronized (sPoolLock) {
             clear();
             if (sPoolSize < MAX_POOL_SIZE) {
diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl
index 63ff5a0..b78c70f 100644
--- a/core/java/com/android/internal/policy/IKeyguardService.aidl
+++ b/core/java/com/android/internal/policy/IKeyguardService.aidl
@@ -25,12 +25,24 @@
 interface IKeyguardService {
     boolean isShowing();
     boolean isSecure();
-    boolean isShowingAndNotHidden();
+    boolean isShowingAndNotOccluded();
     boolean isInputRestricted();
     boolean isDismissable();
     oneway void verifyUnlock(IKeyguardExitCallback callback);
     oneway void keyguardDone(boolean authenticated, boolean wakeup);
-    oneway void setHidden(boolean isHidden);
+
+    /**
+     * Sets the Keyguard as occluded when a window dismisses the Keyguard with flag
+     * FLAG_SHOW_ON_LOCK_SCREEN.
+     *
+     * @param isOccluded Whether the Keyguard is occluded by another window.
+     * @return See IKeyguardServiceConstants.KEYGUARD_SERVICE_SET_OCCLUDED_*. This is needed because
+     *         PhoneWindowManager needs to set these flags immediately and can't wait for the
+     *         Keyguard thread to pick it up. In the hidden case, PhoneWindowManager is solely
+     *         responsible to make sure that the flags are unset.
+     */
+    int setOccluded(boolean isOccluded);
+
     oneway void dismiss();
     oneway void onDreamingStarted();
     oneway void onDreamingStopped();
diff --git a/core/java/com/android/internal/policy/IKeyguardServiceConstants.java b/core/java/com/android/internal/policy/IKeyguardServiceConstants.java
new file mode 100644
index 0000000..b88174a
--- /dev/null
+++ b/core/java/com/android/internal/policy/IKeyguardServiceConstants.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2014 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.android.internal.policy;
+
+/**
+ * @hide
+ */
+public class IKeyguardServiceConstants {
+
+    /**
+     * Constant for {@link com.android.internal.policy.IKeyguardService#setHidden(boolean)}:
+     * Don't change the keyguard window flags.
+     */
+    public static final int KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_NONE = 0;
+
+    /**
+     * Constant for {@link com.android.internal.policy.IKeyguardService#setHidden(boolean)}:
+     * Set the keyguard window flags to FLAG_SHOW_WALLPAPER and PRIVATE_FLAG_KEYGUARD.
+     */
+    public static final int KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_SET_FLAGS = 1;
+
+    /**
+     * Constant for {@link com.android.internal.policy.IKeyguardService#setHidden(boolean)}:
+     * Unset the keyguard window flags to FLAG_SHOW_WALLPAPER and PRIVATE_FLAG_KEYGUARD.
+     */
+    public static final int KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_UNSET_FLAGS = 2;
+}
diff --git a/core/java/com/android/internal/preference/YesNoPreference.java b/core/java/com/android/internal/preference/YesNoPreference.java
index cf68a58..7abf416 100644
--- a/core/java/com/android/internal/preference/YesNoPreference.java
+++ b/core/java/com/android/internal/preference/YesNoPreference.java
@@ -31,15 +31,19 @@
  */
 public class YesNoPreference extends DialogPreference {
     private boolean mWasPositiveResult;
-    
-    public YesNoPreference(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+
+    public YesNoPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    public YesNoPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
     }
 
     public YesNoPreference(Context context, AttributeSet attrs) {
         this(context, attrs, com.android.internal.R.attr.yesNoPreferenceStyle);
     }
-    
+
     public YesNoPreference(Context context) {
         this(context, null);
     }
diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
index 97ea7d8..6428e15 100644
--- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl
+++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl
@@ -41,11 +41,14 @@
             out List<IBinder> notificationKeys, out List<StatusBarNotification> notifications,
             out int[] switches, out List<IBinder> binders);
     void onPanelRevealed();
-    void onNotificationClick(String pkg, String tag, int id);
+    void onPanelHidden();
+    void onNotificationClick(String pkg, String tag, int id, int userId);
     void onNotificationError(String pkg, String tag, int id,
-            int uid, int initialPid, String message);
-    void onClearAllNotifications();
-    void onNotificationClear(String pkg, String tag, int id);
+            int uid, int initialPid, String message, int userId);
+    void onClearAllNotifications(int userId);
+    void onNotificationClear(String pkg, String tag, int id, int userId);
+    void onNotificationVisibilityChanged(
+            in String[] newlyVisibleKeys, in String[] noLongerVisibleKeys);
     void setSystemUiVisibility(int vis, int mask);
     void setHardKeyboardEnabled(boolean enabled);
     void toggleRecentApps();
diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java
index 9137d3c..d177410 100644
--- a/core/java/com/android/internal/util/ArrayUtils.java
+++ b/core/java/com/android/internal/util/ArrayUtils.java
@@ -16,11 +16,10 @@
 
 package com.android.internal.util;
 
-import java.lang.reflect.Array;
+import dalvik.system.VMRuntime;
+import libcore.util.EmptyArray;
 
-// XXX these should be changed to reflect the actual memory allocator we use.
-// it looks like right now objects want to be powers of 2 minus 8
-// and the array size eats another 4 bytes
+import java.lang.reflect.Array;
 
 /**
  * ArrayUtils contains some methods that you can call to find out
@@ -28,46 +27,42 @@
  */
 public class ArrayUtils
 {
-    private static Object[] EMPTY = new Object[0];
     private static final int CACHE_SIZE = 73;
     private static Object[] sCache = new Object[CACHE_SIZE];
 
     private ArrayUtils() { /* cannot be instantiated */ }
 
-    public static int idealByteArraySize(int need) {
-        for (int i = 4; i < 32; i++)
-            if (need <= (1 << i) - 12)
-                return (1 << i) - 12;
-
-        return need;
+    public static byte[] newUnpaddedByteArray(int minLen) {
+        return (byte[])VMRuntime.getRuntime().newUnpaddedArray(byte.class, minLen);
     }
 
-    public static int idealBooleanArraySize(int need) {
-        return idealByteArraySize(need);
+    public static char[] newUnpaddedCharArray(int minLen) {
+        return (char[])VMRuntime.getRuntime().newUnpaddedArray(char.class, minLen);
     }
 
-    public static int idealShortArraySize(int need) {
-        return idealByteArraySize(need * 2) / 2;
+    public static int[] newUnpaddedIntArray(int minLen) {
+        return (int[])VMRuntime.getRuntime().newUnpaddedArray(int.class, minLen);
     }
 
-    public static int idealCharArraySize(int need) {
-        return idealByteArraySize(need * 2) / 2;
+    public static boolean[] newUnpaddedBooleanArray(int minLen) {
+        return (boolean[])VMRuntime.getRuntime().newUnpaddedArray(boolean.class, minLen);
     }
 
-    public static int idealIntArraySize(int need) {
-        return idealByteArraySize(need * 4) / 4;
+    public static long[] newUnpaddedLongArray(int minLen) {
+        return (long[])VMRuntime.getRuntime().newUnpaddedArray(long.class, minLen);
     }
 
-    public static int idealFloatArraySize(int need) {
-        return idealByteArraySize(need * 4) / 4;
+    public static float[] newUnpaddedFloatArray(int minLen) {
+        return (float[])VMRuntime.getRuntime().newUnpaddedArray(float.class, minLen);
     }
 
-    public static int idealObjectArraySize(int need) {
-        return idealByteArraySize(need * 4) / 4;
+    public static Object[] newUnpaddedObjectArray(int minLen) {
+        return (Object[])VMRuntime.getRuntime().newUnpaddedArray(Object.class, minLen);
     }
 
-    public static int idealLongArraySize(int need) {
-        return idealByteArraySize(need * 8) / 8;
+    @SuppressWarnings("unchecked")
+    public static <T> T[] newUnpaddedArray(Class<T> clazz, int minLen) {
+        return (T[])VMRuntime.getRuntime().newUnpaddedArray(clazz, minLen);
     }
 
     /**
@@ -102,9 +97,10 @@
      * it will return the same empty array every time to avoid reallocation,
      * although this is not guaranteed.
      */
+    @SuppressWarnings("unchecked")
     public static <T> T[] emptyArray(Class<T> kind) {
         if (kind == Object.class) {
-            return (T[]) EMPTY;
+            return (T[]) EmptyArray.OBJECT;
         }
 
         int bucket = ((System.identityHashCode(kind) / 8) & 0x7FFFFFFF) % CACHE_SIZE;
diff --git a/core/java/com/android/internal/util/GrowingArrayUtils.java b/core/java/com/android/internal/util/GrowingArrayUtils.java
new file mode 100644
index 0000000..b4d2d730
--- /dev/null
+++ b/core/java/com/android/internal/util/GrowingArrayUtils.java
@@ -0,0 +1,196 @@
+/*
+ * Copyright (C) 2014 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.android.internal.util;
+
+/**
+ * A helper class that aims to provide comparable growth performance to ArrayList, but on primitive
+ * arrays. Common array operations are implemented for efficient use in dynamic containers.
+ *
+ * All methods in this class assume that the length of an array is equivalent to its capacity and
+ * NOT the number of elements in the array. The current size of the array is always passed in as a
+ * parameter.
+ *
+ * @hide
+ */
+public final class GrowingArrayUtils {
+
+    /**
+     * Appends an element to the end of the array, growing the array if there is no more room.
+     * @param array The array to which to append the element. This must NOT be null.
+     * @param currentSize The number of elements in the array. Must be less than or equal to
+     *                    array.length.
+     * @param element The element to append.
+     * @return the array to which the element was appended. This may be different than the given
+     *         array.
+     */
+    public static <T> T[] append(T[] array, int currentSize, T element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 > array.length) {
+            @SuppressWarnings("unchecked")
+            T[] newArray = ArrayUtils.newUnpaddedArray(
+                    (Class<T>) array.getClass().getComponentType(), growSize(currentSize));
+            System.arraycopy(array, 0, newArray, 0, currentSize);
+            array = newArray;
+        }
+        array[currentSize] = element;
+        return array;
+    }
+
+    /**
+     * Primitive int version of {@link #append(Object[], int, Object)}.
+     */
+    public static int[] append(int[] array, int currentSize, int element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 > array.length) {
+            int[] newArray = ArrayUtils.newUnpaddedIntArray(growSize(currentSize));
+            System.arraycopy(array, 0, newArray, 0, currentSize);
+            array = newArray;
+        }
+        array[currentSize] = element;
+        return array;
+    }
+
+    /**
+     * Primitive long version of {@link #append(Object[], int, Object)}.
+     */
+    public static long[] append(long[] array, int currentSize, long element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 > array.length) {
+            long[] newArray = ArrayUtils.newUnpaddedLongArray(growSize(currentSize));
+            System.arraycopy(array, 0, newArray, 0, currentSize);
+            array = newArray;
+        }
+        array[currentSize] = element;
+        return array;
+    }
+
+    /**
+     * Primitive boolean version of {@link #append(Object[], int, Object)}.
+     */
+    public static boolean[] append(boolean[] array, int currentSize, boolean element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 > array.length) {
+            boolean[] newArray = ArrayUtils.newUnpaddedBooleanArray(growSize(currentSize));
+            System.arraycopy(array, 0, newArray, 0, currentSize);
+            array = newArray;
+        }
+        array[currentSize] = element;
+        return array;
+    }
+
+    /**
+     * Inserts an element into the array at the specified index, growing the array if there is no
+     * more room.
+     *
+     * @param array The array to which to append the element. Must NOT be null.
+     * @param currentSize The number of elements in the array. Must be less than or equal to
+     *                    array.length.
+     * @param element The element to insert.
+     * @return the array to which the element was appended. This may be different than the given
+     *         array.
+     */
+    public static <T> T[] insert(T[] array, int currentSize, int index, T element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 <= array.length) {
+            System.arraycopy(array, index, array, index + 1, currentSize - index);
+            array[index] = element;
+            return array;
+        }
+
+        @SuppressWarnings("unchecked")
+        T[] newArray = ArrayUtils.newUnpaddedArray((Class<T>)array.getClass().getComponentType(),
+                growSize(currentSize));
+        System.arraycopy(array, 0, newArray, 0, index);
+        newArray[index] = element;
+        System.arraycopy(array, index, newArray, index + 1, array.length - index);
+        return newArray;
+    }
+
+    /**
+     * Primitive int version of {@link #insert(Object[], int, int, Object)}.
+     */
+    public static int[] insert(int[] array, int currentSize, int index, int element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 <= array.length) {
+            System.arraycopy(array, index, array, index + 1, currentSize - index);
+            array[index] = element;
+            return array;
+        }
+
+        int[] newArray = ArrayUtils.newUnpaddedIntArray(growSize(currentSize));
+        System.arraycopy(array, 0, newArray, 0, index);
+        newArray[index] = element;
+        System.arraycopy(array, index, newArray, index + 1, array.length - index);
+        return newArray;
+    }
+
+    /**
+     * Primitive long version of {@link #insert(Object[], int, int, Object)}.
+     */
+    public static long[] insert(long[] array, int currentSize, int index, long element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 <= array.length) {
+            System.arraycopy(array, index, array, index + 1, currentSize - index);
+            array[index] = element;
+            return array;
+        }
+
+        long[] newArray = ArrayUtils.newUnpaddedLongArray(growSize(currentSize));
+        System.arraycopy(array, 0, newArray, 0, index);
+        newArray[index] = element;
+        System.arraycopy(array, index, newArray, index + 1, array.length - index);
+        return newArray;
+    }
+
+    /**
+     * Primitive boolean version of {@link #insert(Object[], int, int, Object)}.
+     */
+    public static boolean[] insert(boolean[] array, int currentSize, int index, boolean element) {
+        assert currentSize <= array.length;
+
+        if (currentSize + 1 <= array.length) {
+            System.arraycopy(array, index, array, index + 1, currentSize - index);
+            array[index] = element;
+            return array;
+        }
+
+        boolean[] newArray = ArrayUtils.newUnpaddedBooleanArray(growSize(currentSize));
+        System.arraycopy(array, 0, newArray, 0, index);
+        newArray[index] = element;
+        System.arraycopy(array, index, newArray, index + 1, array.length - index);
+        return newArray;
+    }
+
+    /**
+     * Given the current size of an array, returns an ideal size to which the array should grow.
+     * This is typically double the given size, but should not be relied upon to do so in the
+     * future.
+     */
+    public static int growSize(int currentSize) {
+        return currentSize <= 4 ? 8 : currentSize * 2;
+    }
+
+    // Uninstantiable
+    private GrowingArrayUtils() {}
+}
diff --git a/core/java/com/android/internal/util/ImageUtils.java b/core/java/com/android/internal/util/ImageUtils.java
new file mode 100644
index 0000000..a5ce6e0ca
--- /dev/null
+++ b/core/java/com/android/internal/util/ImageUtils.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2014 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.android.internal.util;
+
+import android.graphics.Bitmap;
+
+/**
+ * Utility class for image analysis and processing.
+ *
+ * @hide
+ */
+public class ImageUtils {
+
+    // Amount (max is 255) that two channels can differ before the color is no longer "gray".
+    private static final int TOLERANCE = 20;
+
+    // Alpha amount for which values below are considered transparent.
+    private static final int ALPHA_TOLERANCE = 50;
+
+    private int[] mTempBuffer;
+
+    /**
+     * Checks whether a bitmap is grayscale. Grayscale here means "very close to a perfect
+     * gray".
+     */
+    public boolean isGrayscale(Bitmap bitmap) {
+        final int height = bitmap.getHeight();
+        final int width = bitmap.getWidth();
+        int size = height*width;
+
+        ensureBufferSize(size);
+        bitmap.getPixels(mTempBuffer, 0, width, 0, 0, width, height);
+        for (int i = 0; i < size; i++) {
+            if (!isGrayscale(mTempBuffer[i])) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Makes sure that {@code mTempBuffer} has at least length {@code size}.
+     */
+    private void ensureBufferSize(int size) {
+        if (mTempBuffer == null || mTempBuffer.length < size) {
+            mTempBuffer = new int[size];
+        }
+    }
+
+    /**
+     * Classifies a color as grayscale or not. Grayscale here means "very close to a perfect
+     * gray"; if all three channels are approximately equal, this will return true.
+     *
+     * Note that really transparent colors are always grayscale.
+     */
+    public static boolean isGrayscale(int color) {
+        int alpha = 0xFF & (color >> 24);
+        if (alpha < ALPHA_TOLERANCE) {
+            return true;
+        }
+
+        int r = 0xFF & (color >> 16);
+        int g = 0xFF & (color >> 8);
+        int b = 0xFF & color;
+
+        return Math.abs(r - g) < TOLERANCE
+                && Math.abs(r - b) < TOLERANCE
+                && Math.abs(g - b) < TOLERANCE;
+    }
+}
diff --git a/core/java/com/android/internal/util/LegacyNotificationUtil.java b/core/java/com/android/internal/util/LegacyNotificationUtil.java
new file mode 100644
index 0000000..0394bbc
--- /dev/null
+++ b/core/java/com/android/internal/util/LegacyNotificationUtil.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2014 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.android.internal.util;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Color;
+import android.graphics.drawable.AnimationDrawable;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.style.TextAppearanceSpan;
+import android.util.Log;
+import android.util.Pair;
+
+import java.util.Arrays;
+import java.util.WeakHashMap;
+
+/**
+ * Helper class to process legacy (Holo) notifications to make them look like quantum notifications.
+ *
+ * @hide
+ */
+public class LegacyNotificationUtil {
+
+    private static final String TAG = "LegacyNotificationUtil";
+
+    private static final Object sLock = new Object();
+    private static LegacyNotificationUtil sInstance;
+
+    private final ImageUtils mImageUtils = new ImageUtils();
+    private final WeakHashMap<Bitmap, Pair<Boolean, Integer>> mGrayscaleBitmapCache =
+            new WeakHashMap<Bitmap, Pair<Boolean, Integer>>();
+
+    public static LegacyNotificationUtil getInstance() {
+        synchronized (sLock) {
+            if (sInstance == null) {
+                sInstance = new LegacyNotificationUtil();
+            }
+            return sInstance;
+        }
+    }
+
+    /**
+     * Checks whether a bitmap is grayscale. Grayscale here means "very close to a perfect
+     * gray".
+     *
+     * @param bitmap The bitmap to test.
+     * @return Whether the bitmap is grayscale.
+     */
+    public boolean isGrayscale(Bitmap bitmap) {
+        synchronized (sLock) {
+            Pair<Boolean, Integer> cached = mGrayscaleBitmapCache.get(bitmap);
+            if (cached != null) {
+                if (cached.second == bitmap.getGenerationId()) {
+                    return cached.first;
+                }
+            }
+        }
+        boolean result;
+        int generationId;
+        synchronized (mImageUtils) {
+            result = mImageUtils.isGrayscale(bitmap);
+
+            // generationId and the check whether the Bitmap is grayscale can't be read atomically
+            // here. However, since the thread is in the process of posting the notification, we can
+            // assume that it doesn't modify the bitmap while we are checking the pixels.
+            generationId = bitmap.getGenerationId();
+        }
+        synchronized (sLock) {
+            mGrayscaleBitmapCache.put(bitmap, Pair.create(result, generationId));
+        }
+        return result;
+    }
+
+    /**
+     * Checks whether a drawable is grayscale. Grayscale here means "very close to a perfect
+     * gray".
+     *
+     * @param d The drawable to test.
+     * @return Whether the drawable is grayscale.
+     */
+    public boolean isGrayscale(Drawable d) {
+        if (d == null) {
+            return false;
+        } else if (d instanceof BitmapDrawable) {
+            BitmapDrawable bd = (BitmapDrawable) d;
+            return bd.getBitmap() != null && isGrayscale(bd.getBitmap());
+        } else if (d instanceof AnimationDrawable) {
+            AnimationDrawable ad = (AnimationDrawable) d;
+            int count = ad.getNumberOfFrames();
+            return count > 0 && isGrayscale(ad.getFrame(0));
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Checks whether a drawable with a resoure id is grayscale. Grayscale here means "very close
+     * to a perfect gray".
+     *
+     * @param context The context to load the drawable from.
+     * @return Whether the drawable is grayscale.
+     */
+    public boolean isGrayscale(Context context, int drawableResId) {
+        if (drawableResId != 0) {
+            try {
+                return isGrayscale(context.getDrawable(drawableResId));
+            } catch (Resources.NotFoundException ex) {
+                Log.e(TAG, "Drawable not found: " + drawableResId);
+                return false;
+            }
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Inverts all the grayscale colors set by {@link android.text.style.TextAppearanceSpan}s on
+     * the text.
+     *
+     * @param charSequence The text to process.
+     * @return The color inverted text.
+     */
+    public CharSequence invertCharSequenceColors(CharSequence charSequence) {
+        if (charSequence instanceof Spanned) {
+            Spanned ss = (Spanned) charSequence;
+            Object[] spans = ss.getSpans(0, ss.length(), Object.class);
+            SpannableStringBuilder builder = new SpannableStringBuilder(ss.toString());
+            for (Object span : spans) {
+                Object resultSpan = span;
+                if (span instanceof TextAppearanceSpan) {
+                    resultSpan = processTextAppearanceSpan((TextAppearanceSpan) span);
+                }
+                builder.setSpan(resultSpan, ss.getSpanStart(span), ss.getSpanEnd(span),
+                        ss.getSpanFlags(span));
+            }
+            return builder;
+        }
+        return charSequence;
+    }
+
+    private TextAppearanceSpan processTextAppearanceSpan(TextAppearanceSpan span) {
+        ColorStateList colorStateList = span.getTextColor();
+        if (colorStateList != null) {
+            int[] colors = colorStateList.getColors();
+            boolean changed = false;
+            for (int i = 0; i < colors.length; i++) {
+                if (ImageUtils.isGrayscale(colors[i])) {
+
+                    // Allocate a new array so we don't change the colors in the old color state
+                    // list.
+                    if (!changed) {
+                        colors = Arrays.copyOf(colors, colors.length);
+                    }
+                    colors[i] = processColor(colors[i]);
+                    changed = true;
+                }
+            }
+            if (changed) {
+                return new TextAppearanceSpan(
+                        span.getFamily(), span.getTextStyle(), span.getTextSize(),
+                        new ColorStateList(colorStateList.getStates(), colors),
+                        span.getLinkTextColor());
+            }
+        }
+        return span;
+    }
+
+    private int processColor(int color) {
+        return Color.argb(Color.alpha(color),
+                255 - Color.red(color),
+                255 - Color.green(color),
+                255 - Color.blue(color));
+    }
+}
diff --git a/core/java/com/android/internal/view/ActionBarPolicy.java b/core/java/com/android/internal/view/ActionBarPolicy.java
index 25086c5..bee59dc 100644
--- a/core/java/com/android/internal/view/ActionBarPolicy.java
+++ b/core/java/com/android/internal/view/ActionBarPolicy.java
@@ -19,11 +19,9 @@
 import com.android.internal.R;
 
 import android.content.Context;
-import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.os.Build;
-import android.view.ViewConfiguration;
 
 /**
  * Allows components to query for various configuration policy decisions
diff --git a/core/java/com/android/internal/view/IInputMethodClient.aidl b/core/java/com/android/internal/view/IInputMethodClient.aidl
index ce4312d..9e8d12b 100644
--- a/core/java/com/android/internal/view/IInputMethodClient.aidl
+++ b/core/java/com/android/internal/view/IInputMethodClient.aidl
@@ -27,4 +27,5 @@
     void onBindMethod(in InputBindResult res);
     void onUnbindMethod(int sequence);
     void setActive(boolean active);
+    void setCursorAnchorMonitorMode(int monitorMode);
 }
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index 3724a08..5336174 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -32,7 +32,9 @@
  * this file.
  */
 interface IInputMethodManager {
+    // TODO: Use ParceledListSlice instead
     List<InputMethodInfo> getInputMethodList();
+    // TODO: Use ParceledListSlice instead
     List<InputMethodInfo> getEnabledInputMethodList();
     List<InputMethodSubtype> getEnabledInputMethodSubtypeList(in String imiId,
             boolean allowsImplicitlySelectedSubtypes);
@@ -74,4 +76,7 @@
     boolean shouldOfferSwitchingToNextInputMethod(in IBinder token);
     boolean setInputMethodEnabled(String id, boolean enabled);
     void setAdditionalInputMethodSubtypes(String id, in InputMethodSubtype[] subtypes);
+    int getInputMethodWindowVisibleHeight();
+    oneway void notifyTextCommitted();
+    void setCursorAnchorMonitorMode(in IBinder token, int monitorMode);
 }
diff --git a/core/java/com/android/internal/view/RotationPolicy.java b/core/java/com/android/internal/view/RotationPolicy.java
index 6295314..b479cb1 100644
--- a/core/java/com/android/internal/view/RotationPolicy.java
+++ b/core/java/com/android/internal/view/RotationPolicy.java
@@ -18,7 +18,9 @@
 
 import android.content.Context;
 import android.content.pm.PackageManager;
+import android.content.res.Configuration;
 import android.database.ContentObserver;
+import android.graphics.Point;
 import android.net.Uri;
 import android.os.AsyncTask;
 import android.os.Handler;
@@ -26,15 +28,20 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Log;
+import android.view.Display;
 import android.view.IWindowManager;
 import android.view.Surface;
 import android.view.WindowManagerGlobal;
 
+import com.android.internal.R;
+
 /**
  * Provides helper functions for configuring the display rotation policy.
  */
 public final class RotationPolicy {
     private static final String TAG = "RotationPolicy";
+    private static final int CURRENT_ROTATION = -1;
+    private static final int NATURAL_ROTATION = Surface.ROTATION_0;
 
     private RotationPolicy() {
     }
@@ -57,23 +64,33 @@
     }
 
     /**
-     * Returns true if the device supports the rotation-lock toggle feature
-     * in the system UI or system bar.
+     * Returns the orientation that will be used when locking the orientation from system UI
+     * with {@link #setRotationLock}.
      *
-     * When the rotation-lock toggle is supported, the "auto-rotate screen" option in
-     * Display settings should be hidden, but it should remain available in Accessibility
-     * settings.
+     * If the device only supports locking to its natural orientation, this will be either
+     * Configuration.ORIENTATION_PORTRAIT or Configuration.ORIENTATION_LANDSCAPE,
+     * otherwise Configuration.ORIENTATION_UNDEFINED if any orientation is lockable.
      */
-    public static boolean isRotationLockToggleSupported(Context context) {
-        return isRotationSupported(context)
-                && context.getResources().getConfiguration().smallestScreenWidthDp >= 600;
+    public static int getRotationLockOrientation(Context context) {
+        if (!areAllRotationsAllowed(context)) {
+            final Point size = new Point();
+            final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
+            try {
+                wm.getInitialDisplaySize(Display.DEFAULT_DISPLAY, size);
+                return size.x < size.y ?
+                        Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE;
+            } catch (RemoteException e) {
+                Log.w(TAG, "Unable to get the display size");
+            }
+        }
+        return Configuration.ORIENTATION_UNDEFINED;
     }
 
     /**
-     * Returns true if the rotation-lock toggle should be shown in the UI.
+     * Returns true if the rotation-lock toggle should be shown in system UI.
      */
     public static boolean isRotationLockToggleVisible(Context context) {
-        return isRotationLockToggleSupported(context) &&
+        return isRotationSupported(context) &&
                 Settings.System.getIntForUser(context.getContentResolver(),
                         Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0,
                         UserHandle.USER_CURRENT) == 0;
@@ -88,50 +105,42 @@
     }
 
     /**
-     * Enables or disables rotation lock.
-     *
-     * Should be used by the rotation lock toggle.
+     * Enables or disables rotation lock from the system UI toggle.
      */
     public static void setRotationLock(Context context, final boolean enabled) {
         Settings.System.putIntForUser(context.getContentResolver(),
                 Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, 0,
                 UserHandle.USER_CURRENT);
 
-        AsyncTask.execute(new Runnable() {
-            @Override
-            public void run() {
-                try {
-                    IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
-                    if (enabled) {
-                        wm.freezeRotation(-1);
-                    } else {
-                        wm.thawRotation();
-                    }
-                } catch (RemoteException exc) {
-                    Log.w(TAG, "Unable to save auto-rotate setting");
-                }
-            }
-        });
+        final int rotation = areAllRotationsAllowed(context) ? CURRENT_ROTATION : NATURAL_ROTATION;
+        setRotationLock(enabled, rotation);
     }
 
     /**
-     * Enables or disables rotation lock and adjusts whether the rotation lock toggle
-     * should be hidden for accessibility purposes.
+     * Enables or disables natural rotation lock from Accessibility settings.
      *
-     * Should be used by Display settings and Accessibility settings.
+     * If rotation is locked for accessibility, the system UI toggle is hidden to avoid confusion.
      */
     public static void setRotationLockForAccessibility(Context context, final boolean enabled) {
         Settings.System.putIntForUser(context.getContentResolver(),
                 Settings.System.HIDE_ROTATION_LOCK_TOGGLE_FOR_ACCESSIBILITY, enabled ? 1 : 0,
                         UserHandle.USER_CURRENT);
 
+        setRotationLock(enabled, NATURAL_ROTATION);
+    }
+
+    private static boolean areAllRotationsAllowed(Context context) {
+        return context.getResources().getBoolean(R.bool.config_allowAllRotations);
+    }
+
+    private static void setRotationLock(final boolean enabled, final int rotation) {
         AsyncTask.execute(new Runnable() {
             @Override
             public void run() {
                 try {
                     IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
                     if (enabled) {
-                        wm.freezeRotation(Surface.ROTATION_0);
+                        wm.freezeRotation(rotation);
                     } else {
                         wm.thawRotation();
                     }
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItem.java b/core/java/com/android/internal/view/menu/ActionMenuItem.java
index 7ca6c1b..ed676bb 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItem.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItem.java
@@ -163,7 +163,7 @@
 
     public MenuItem setIcon(int iconRes) {
         mIconResId = iconRes;
-        mIconDrawable = mContext.getResources().getDrawable(iconRes);
+        mIconDrawable = mContext.getDrawable(iconRes);
         return this;
     }
 
diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index 238a9c03..891baea 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -28,8 +28,11 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.accessibility.AccessibilityEvent;
+import android.widget.ActionMenuView;
+import android.widget.ListPopupWindow;
 import android.widget.TextView;
 import android.widget.Toast;
+import android.widget.ListPopupWindow.ForwardingListener;
 
 /**
  * @hide
@@ -43,6 +46,8 @@
     private CharSequence mTitle;
     private Drawable mIcon;
     private MenuBuilder.ItemInvoker mItemInvoker;
+    private ForwardingListener mForwardingListener;
+    private PopupCallback mPopupCallback;
 
     private boolean mAllowTextWithIcon;
     private boolean mExpandedFormat;
@@ -60,13 +65,17 @@
         this(context, attrs, 0);
     }
 
-    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ActionMenuItemView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         final Resources res = context.getResources();
         mAllowTextWithIcon = res.getBoolean(
                 com.android.internal.R.bool.config_allowActionMenuItemTextWithIcon);
-        TypedArray a = context.obtainStyledAttributes(attrs,
-                com.android.internal.R.styleable.ActionMenuItemView, 0, 0);
+        final TypedArray a = context.obtainStyledAttributes(attrs,
+                com.android.internal.R.styleable.ActionMenuItemView, defStyleAttr, defStyleRes);
         mMinWidth = a.getDimensionPixelSize(
                 com.android.internal.R.styleable.ActionMenuItemView_minWidth, 0);
         a.recycle();
@@ -99,6 +108,7 @@
         return mItemData;
     }
 
+    @Override
     public void initialize(MenuItemImpl itemData, int menuType) {
         mItemData = itemData;
 
@@ -108,8 +118,24 @@
 
         setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE);
         setEnabled(itemData.isEnabled());
+
+        if (itemData.hasSubMenu()) {
+            if (mForwardingListener == null) {
+                mForwardingListener = new ActionMenuItemForwardingListener();
+            }
+        }
     }
 
+    @Override
+    public boolean onTouchEvent(MotionEvent e) {
+        if (mItemData.hasSubMenu() && mForwardingListener != null
+                && mForwardingListener.onTouch(this, e)) {
+            return true;
+        }
+        return super.onTouchEvent(e);
+    }
+
+    @Override
     public void onClick(View v) {
         if (mItemInvoker != null) {
             mItemInvoker.invokeItem(mItemData);
@@ -120,6 +146,10 @@
         mItemInvoker = invoker;
     }
 
+    public void setPopupCallback(PopupCallback popupCallback) {
+        mPopupCallback = popupCallback;
+    }
+
     public boolean prefersCondensedTitle() {
         return true;
     }
@@ -252,11 +282,6 @@
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
-            // Fill all available height.
-            heightMeasureSpec = MeasureSpec.makeMeasureSpec(
-                    MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
-        }
         final boolean textVisible = hasText();
         if (textVisible && mSavedPaddingLeft >= 0) {
             super.setPadding(mSavedPaddingLeft, getPaddingTop(),
@@ -285,4 +310,42 @@
             super.setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
         }
     }
+
+    private class ActionMenuItemForwardingListener extends ForwardingListener {
+        public ActionMenuItemForwardingListener() {
+            super(ActionMenuItemView.this);
+        }
+
+        @Override
+        public ListPopupWindow getPopup() {
+            if (mPopupCallback != null) {
+                return mPopupCallback.getPopup();
+            }
+            return null;
+        }
+
+        @Override
+        protected boolean onForwardingStarted() {
+            // Call the invoker, then check if the expected popup is showing.
+            if (mItemInvoker != null && mItemInvoker.invokeItem(mItemData)) {
+                final ListPopupWindow popup = getPopup();
+                return popup != null && popup.isShowing();
+            }
+            return false;
+        }
+
+        @Override
+        protected boolean onForwardingStopped() {
+            final ListPopupWindow popup = getPopup();
+            if (popup != null) {
+                popup.dismiss();
+                return true;
+            }
+            return false;
+        }
+    }
+
+    public static abstract class PopupCallback {
+        public abstract ListPopupWindow getPopup();
+    }
 }
diff --git a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java b/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
deleted file mode 100644
index fe1cf72..0000000
--- a/core/java/com/android/internal/view/menu/ActionMenuPresenter.java
+++ /dev/null
@@ -1,756 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.internal.view.menu;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.transition.Transition;
-import android.transition.TransitionManager;
-import android.util.SparseBooleanArray;
-import android.view.ActionProvider;
-import android.view.Gravity;
-import android.view.MenuItem;
-import android.view.SoundEffectConstants;
-import android.view.View;
-import android.view.View.MeasureSpec;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.widget.ImageButton;
-import android.widget.ListPopupWindow;
-import android.widget.ListPopupWindow.ForwardingListener;
-import com.android.internal.transition.ActionBarTransition;
-import com.android.internal.view.ActionBarPolicy;
-import com.android.internal.view.menu.ActionMenuView.ActionMenuChildView;
-
-import java.util.ArrayList;
-
-/**
- * MenuPresenter for building action menus as seen in the action bar and action modes.
- */
-public class ActionMenuPresenter extends BaseMenuPresenter
-        implements ActionProvider.SubUiVisibilityListener {
-    private static final String TAG = "ActionMenuPresenter";
-
-    private View mOverflowButton;
-    private boolean mReserveOverflow;
-    private boolean mReserveOverflowSet;
-    private int mWidthLimit;
-    private int mActionItemWidthLimit;
-    private int mMaxItems;
-    private boolean mMaxItemsSet;
-    private boolean mStrictWidthLimit;
-    private boolean mWidthLimitSet;
-    private boolean mExpandedActionViewsExclusive;
-
-    private int mMinCellSize;
-
-    // Group IDs that have been added as actions - used temporarily, allocated here for reuse.
-    private final SparseBooleanArray mActionButtonGroups = new SparseBooleanArray();
-
-    private View mScrapActionButtonView;
-
-    private OverflowPopup mOverflowPopup;
-    private ActionButtonSubmenu mActionButtonPopup;
-
-    private OpenOverflowRunnable mPostedOpenRunnable;
-
-    final PopupPresenterCallback mPopupPresenterCallback = new PopupPresenterCallback();
-    int mOpenSubMenuId;
-
-    public ActionMenuPresenter(Context context) {
-        super(context, com.android.internal.R.layout.action_menu_layout,
-                com.android.internal.R.layout.action_menu_item_layout);
-    }
-
-    @Override
-    public void initForMenu(Context context, MenuBuilder menu) {
-        super.initForMenu(context, menu);
-
-        final Resources res = context.getResources();
-
-        final ActionBarPolicy abp = ActionBarPolicy.get(context);
-        if (!mReserveOverflowSet) {
-            mReserveOverflow = abp.showsOverflowMenuButton();
-        }
-
-        if (!mWidthLimitSet) {
-            mWidthLimit = abp.getEmbeddedMenuWidthLimit();
-        }
-
-        // Measure for initial configuration
-        if (!mMaxItemsSet) {
-            mMaxItems = abp.getMaxActionButtons();
-        }
-
-        int width = mWidthLimit;
-        if (mReserveOverflow) {
-            if (mOverflowButton == null) {
-                mOverflowButton = new OverflowMenuButton(mSystemContext);
-                final int spec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-                mOverflowButton.measure(spec, spec);
-            }
-            width -= mOverflowButton.getMeasuredWidth();
-        } else {
-            mOverflowButton = null;
-        }
-
-        mActionItemWidthLimit = width;
-
-        mMinCellSize = (int) (ActionMenuView.MIN_CELL_SIZE * res.getDisplayMetrics().density);
-
-        // Drop a scrap view as it may no longer reflect the proper context/config.
-        mScrapActionButtonView = null;
-    }
-
-    public void onConfigurationChanged(Configuration newConfig) {
-        if (!mMaxItemsSet) {
-            mMaxItems = mContext.getResources().getInteger(
-                    com.android.internal.R.integer.max_action_buttons);
-        }
-        if (mMenu != null) {
-            mMenu.onItemsChanged(true);
-        }
-    }
-
-    public void setWidthLimit(int width, boolean strict) {
-        mWidthLimit = width;
-        mStrictWidthLimit = strict;
-        mWidthLimitSet = true;
-    }
-
-    public void setReserveOverflow(boolean reserveOverflow) {
-        mReserveOverflow = reserveOverflow;
-        mReserveOverflowSet = true;
-    }
-
-    public void setItemLimit(int itemCount) {
-        mMaxItems = itemCount;
-        mMaxItemsSet = true;
-    }
-
-    public void setExpandedActionViewsExclusive(boolean isExclusive) {
-        mExpandedActionViewsExclusive = isExclusive;
-    }
-
-    @Override
-    public MenuView getMenuView(ViewGroup root) {
-        MenuView result = super.getMenuView(root);
-        ((ActionMenuView) result).setPresenter(this);
-        return result;
-    }
-
-    @Override
-    public View getItemView(final MenuItemImpl item, View convertView, ViewGroup parent) {
-        View actionView = item.getActionView();
-        if (actionView == null || item.hasCollapsibleActionView()) {
-            actionView = super.getItemView(item, convertView, parent);
-        }
-        actionView.setVisibility(item.isActionViewExpanded() ? View.GONE : View.VISIBLE);
-
-        final ActionMenuView menuParent = (ActionMenuView) parent;
-        final ViewGroup.LayoutParams lp = actionView.getLayoutParams();
-        if (!menuParent.checkLayoutParams(lp)) {
-            actionView.setLayoutParams(menuParent.generateLayoutParams(lp));
-        }
-        return actionView;
-    }
-
-    @Override
-    public void bindItemView(final MenuItemImpl item, MenuView.ItemView itemView) {
-        itemView.initialize(item, 0);
-
-        final ActionMenuView menuView = (ActionMenuView) mMenuView;
-        final ActionMenuItemView actionItemView = (ActionMenuItemView) itemView;
-        actionItemView.setItemInvoker(menuView);
-
-        if (item.hasSubMenu()) {
-            actionItemView.setOnTouchListener(new ForwardingListener(actionItemView) {
-                @Override
-                public ListPopupWindow getPopup() {
-                    return mActionButtonPopup != null ? mActionButtonPopup.getPopup() : null;
-                }
-
-                @Override
-                protected boolean onForwardingStarted() {
-                    return onSubMenuSelected((SubMenuBuilder) item.getSubMenu());
-                }
-
-                @Override
-                protected boolean onForwardingStopped() {
-                    return dismissPopupMenus();
-                }
-            });
-        } else {
-            actionItemView.setOnTouchListener(null);
-        }
-    }
-
-    @Override
-    public boolean shouldIncludeItem(int childIndex, MenuItemImpl item) {
-        return item.isActionButton();
-    }
-
-    @Override
-    public void updateMenuView(boolean cleared) {
-        final ViewGroup menuViewParent = (ViewGroup) ((View) mMenuView).getParent();
-        if (menuViewParent != null) {
-            ActionBarTransition.beginDelayedTransition(menuViewParent);
-        }
-        super.updateMenuView(cleared);
-
-        ((View) mMenuView).requestLayout();
-
-        if (mMenu != null) {
-            final ArrayList<MenuItemImpl> actionItems = mMenu.getActionItems();
-            final int count = actionItems.size();
-            for (int i = 0; i < count; i++) {
-                final ActionProvider provider = actionItems.get(i).getActionProvider();
-                if (provider != null) {
-                    provider.setSubUiVisibilityListener(this);
-                }
-            }
-        }
-
-        final ArrayList<MenuItemImpl> nonActionItems = mMenu != null ?
-                mMenu.getNonActionItems() : null;
-
-        boolean hasOverflow = false;
-        if (mReserveOverflow && nonActionItems != null) {
-            final int count = nonActionItems.size();
-            if (count == 1) {
-                hasOverflow = !nonActionItems.get(0).isActionViewExpanded();
-            } else {
-                hasOverflow = count > 0;
-            }
-        }
-
-        if (hasOverflow) {
-            if (mOverflowButton == null) {
-                mOverflowButton = new OverflowMenuButton(mSystemContext);
-            }
-            ViewGroup parent = (ViewGroup) mOverflowButton.getParent();
-            if (parent != mMenuView) {
-                if (parent != null) {
-                    parent.removeView(mOverflowButton);
-                }
-                ActionMenuView menuView = (ActionMenuView) mMenuView;
-                menuView.addView(mOverflowButton, menuView.generateOverflowButtonLayoutParams());
-            }
-        } else if (mOverflowButton != null && mOverflowButton.getParent() == mMenuView) {
-            ((ViewGroup) mMenuView).removeView(mOverflowButton);
-        }
-
-        ((ActionMenuView) mMenuView).setOverflowReserved(mReserveOverflow);
-    }
-
-    @Override
-    public boolean filterLeftoverView(ViewGroup parent, int childIndex) {
-        if (parent.getChildAt(childIndex) == mOverflowButton) return false;
-        return super.filterLeftoverView(parent, childIndex);
-    }
-
-    public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
-        if (!subMenu.hasVisibleItems()) return false;
-
-        SubMenuBuilder topSubMenu = subMenu;
-        while (topSubMenu.getParentMenu() != mMenu) {
-            topSubMenu = (SubMenuBuilder) topSubMenu.getParentMenu();
-        }
-        View anchor = findViewForItem(topSubMenu.getItem());
-        if (anchor == null) {
-            if (mOverflowButton == null) return false;
-            anchor = mOverflowButton;
-        }
-
-        mOpenSubMenuId = subMenu.getItem().getItemId();
-        mActionButtonPopup = new ActionButtonSubmenu(mContext, subMenu);
-        mActionButtonPopup.setAnchorView(anchor);
-        mActionButtonPopup.show();
-        super.onSubMenuSelected(subMenu);
-        return true;
-    }
-
-    private View findViewForItem(MenuItem item) {
-        final ViewGroup parent = (ViewGroup) mMenuView;
-        if (parent == null) return null;
-
-        final int count = parent.getChildCount();
-        for (int i = 0; i < count; i++) {
-            final View child = parent.getChildAt(i);
-            if (child instanceof MenuView.ItemView &&
-                    ((MenuView.ItemView) child).getItemData() == item) {
-                return child;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Display the overflow menu if one is present.
-     * @return true if the overflow menu was shown, false otherwise.
-     */
-    public boolean showOverflowMenu() {
-        if (mReserveOverflow && !isOverflowMenuShowing() && mMenu != null && mMenuView != null &&
-                mPostedOpenRunnable == null && !mMenu.getNonActionItems().isEmpty()) {
-            OverflowPopup popup = new OverflowPopup(mContext, mMenu, mOverflowButton, true);
-            mPostedOpenRunnable = new OpenOverflowRunnable(popup);
-            // Post this for later; we might still need a layout for the anchor to be right.
-            ((View) mMenuView).post(mPostedOpenRunnable);
-
-            // ActionMenuPresenter uses null as a callback argument here
-            // to indicate overflow is opening.
-            super.onSubMenuSelected(null);
-
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Hide the overflow menu if it is currently showing.
-     *
-     * @return true if the overflow menu was hidden, false otherwise.
-     */
-    public boolean hideOverflowMenu() {
-        if (mPostedOpenRunnable != null && mMenuView != null) {
-            ((View) mMenuView).removeCallbacks(mPostedOpenRunnable);
-            mPostedOpenRunnable = null;
-            return true;
-        }
-
-        MenuPopupHelper popup = mOverflowPopup;
-        if (popup != null) {
-            popup.dismiss();
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Dismiss all popup menus - overflow and submenus.
-     * @return true if popups were dismissed, false otherwise. (This can be because none were open.)
-     */
-    public boolean dismissPopupMenus() {
-        boolean result = hideOverflowMenu();
-        result |= hideSubMenus();
-        return result;
-    }
-
-    /**
-     * Dismiss all submenu popups.
-     *
-     * @return true if popups were dismissed, false otherwise. (This can be because none were open.)
-     */
-    public boolean hideSubMenus() {
-        if (mActionButtonPopup != null) {
-            mActionButtonPopup.dismiss();
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * @return true if the overflow menu is currently showing
-     */
-    public boolean isOverflowMenuShowing() {
-        return mOverflowPopup != null && mOverflowPopup.isShowing();
-    }
-
-    public boolean isOverflowMenuShowPending() {
-        return mPostedOpenRunnable != null || isOverflowMenuShowing();
-    }
-
-    /**
-     * @return true if space has been reserved in the action menu for an overflow item.
-     */
-    public boolean isOverflowReserved() {
-        return mReserveOverflow;
-    }
-
-    public boolean flagActionItems() {
-        final ArrayList<MenuItemImpl> visibleItems = mMenu.getVisibleItems();
-        final int itemsSize = visibleItems.size();
-        int maxActions = mMaxItems;
-        int widthLimit = mActionItemWidthLimit;
-        final int querySpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
-        final ViewGroup parent = (ViewGroup) mMenuView;
-
-        int requiredItems = 0;
-        int requestedItems = 0;
-        int firstActionWidth = 0;
-        boolean hasOverflow = false;
-        for (int i = 0; i < itemsSize; i++) {
-            MenuItemImpl item = visibleItems.get(i);
-            if (item.requiresActionButton()) {
-                requiredItems++;
-            } else if (item.requestsActionButton()) {
-                requestedItems++;
-            } else {
-                hasOverflow = true;
-            }
-            if (mExpandedActionViewsExclusive && item.isActionViewExpanded()) {
-                // Overflow everything if we have an expanded action view and we're
-                // space constrained.
-                maxActions = 0;
-            }
-        }
-
-        // Reserve a spot for the overflow item if needed.
-        if (mReserveOverflow &&
-                (hasOverflow || requiredItems + requestedItems > maxActions)) {
-            maxActions--;
-        }
-        maxActions -= requiredItems;
-
-        final SparseBooleanArray seenGroups = mActionButtonGroups;
-        seenGroups.clear();
-
-        int cellSize = 0;
-        int cellsRemaining = 0;
-        if (mStrictWidthLimit) {
-            cellsRemaining = widthLimit / mMinCellSize;
-            final int cellSizeRemaining = widthLimit % mMinCellSize;
-            cellSize = mMinCellSize + cellSizeRemaining / cellsRemaining;
-        }
-
-        // Flag as many more requested items as will fit.
-        for (int i = 0; i < itemsSize; i++) {
-            MenuItemImpl item = visibleItems.get(i);
-
-            if (item.requiresActionButton()) {
-                View v = getItemView(item, mScrapActionButtonView, parent);
-                if (mScrapActionButtonView == null) {
-                    mScrapActionButtonView = v;
-                }
-                if (mStrictWidthLimit) {
-                    cellsRemaining -= ActionMenuView.measureChildForCells(v,
-                            cellSize, cellsRemaining, querySpec, 0);
-                } else {
-                    v.measure(querySpec, querySpec);
-                }
-                final int measuredWidth = v.getMeasuredWidth();
-                widthLimit -= measuredWidth;
-                if (firstActionWidth == 0) {
-                    firstActionWidth = measuredWidth;
-                }
-                final int groupId = item.getGroupId();
-                if (groupId != 0) {
-                    seenGroups.put(groupId, true);
-                }
-                item.setIsActionButton(true);
-            } else if (item.requestsActionButton()) {
-                // Items in a group with other items that already have an action slot
-                // can break the max actions rule, but not the width limit.
-                final int groupId = item.getGroupId();
-                final boolean inGroup = seenGroups.get(groupId);
-                boolean isAction = (maxActions > 0 || inGroup) && widthLimit > 0 &&
-                        (!mStrictWidthLimit || cellsRemaining > 0);
-
-                if (isAction) {
-                    View v = getItemView(item, mScrapActionButtonView, parent);
-                    if (mScrapActionButtonView == null) {
-                        mScrapActionButtonView = v;
-                    }
-                    if (mStrictWidthLimit) {
-                        final int cells = ActionMenuView.measureChildForCells(v,
-                                cellSize, cellsRemaining, querySpec, 0);
-                        cellsRemaining -= cells;
-                        if (cells == 0) {
-                            isAction = false;
-                        }
-                    } else {
-                        v.measure(querySpec, querySpec);
-                    }
-                    final int measuredWidth = v.getMeasuredWidth();
-                    widthLimit -= measuredWidth;
-                    if (firstActionWidth == 0) {
-                        firstActionWidth = measuredWidth;
-                    }
-
-                    if (mStrictWidthLimit) {
-                        isAction &= widthLimit >= 0;
-                    } else {
-                        // Did this push the entire first item past the limit?
-                        isAction &= widthLimit + firstActionWidth > 0;
-                    }
-                }
-
-                if (isAction && groupId != 0) {
-                    seenGroups.put(groupId, true);
-                } else if (inGroup) {
-                    // We broke the width limit. Demote the whole group, they all overflow now.
-                    seenGroups.put(groupId, false);
-                    for (int j = 0; j < i; j++) {
-                        MenuItemImpl areYouMyGroupie = visibleItems.get(j);
-                        if (areYouMyGroupie.getGroupId() == groupId) {
-                            // Give back the action slot
-                            if (areYouMyGroupie.isActionButton()) maxActions++;
-                            areYouMyGroupie.setIsActionButton(false);
-                        }
-                    }
-                }
-
-                if (isAction) maxActions--;
-
-                item.setIsActionButton(isAction);
-            } else {
-                // Neither requires nor requests an action button.
-                item.setIsActionButton(false);
-            }
-        }
-        return true;
-    }
-
-    @Override
-    public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
-        dismissPopupMenus();
-        super.onCloseMenu(menu, allMenusAreClosing);
-    }
-
-    @Override
-    public Parcelable onSaveInstanceState() {
-        SavedState state = new SavedState();
-        state.openSubMenuId = mOpenSubMenuId;
-        return state;
-    }
-
-    @Override
-    public void onRestoreInstanceState(Parcelable state) {
-        SavedState saved = (SavedState) state;
-        if (saved.openSubMenuId > 0) {
-            MenuItem item = mMenu.findItem(saved.openSubMenuId);
-            if (item != null) {
-                SubMenuBuilder subMenu = (SubMenuBuilder) item.getSubMenu();
-                onSubMenuSelected(subMenu);
-            }
-        }
-    }
-
-    @Override
-    public void onSubUiVisibilityChanged(boolean isVisible) {
-        if (isVisible) {
-            // Not a submenu, but treat it like one.
-            super.onSubMenuSelected(null);
-        } else {
-            mMenu.close(false);
-        }
-    }
-
-    private static class SavedState implements Parcelable {
-        public int openSubMenuId;
-
-        SavedState() {
-        }
-
-        SavedState(Parcel in) {
-            openSubMenuId = in.readInt();
-        }
-
-        @Override
-        public int describeContents() {
-            return 0;
-        }
-
-        @Override
-        public void writeToParcel(Parcel dest, int flags) {
-            dest.writeInt(openSubMenuId);
-        }
-
-        public static final Parcelable.Creator<SavedState> CREATOR
-                = new Parcelable.Creator<SavedState>() {
-            public SavedState createFromParcel(Parcel in) {
-                return new SavedState(in);
-            }
-
-            public SavedState[] newArray(int size) {
-                return new SavedState[size];
-            }
-        };
-    }
-
-    private class OverflowMenuButton extends ImageButton implements ActionMenuChildView {
-        public OverflowMenuButton(Context context) {
-            super(context, null, com.android.internal.R.attr.actionOverflowButtonStyle);
-
-            setClickable(true);
-            setFocusable(true);
-            setVisibility(VISIBLE);
-            setEnabled(true);
-
-            setOnTouchListener(new ForwardingListener(this) {
-                @Override
-                public ListPopupWindow getPopup() {
-                    if (mOverflowPopup == null) {
-                        return null;
-                    }
-
-                    return mOverflowPopup.getPopup();
-                }
-
-                @Override
-                public boolean onForwardingStarted() {
-                    showOverflowMenu();
-                    return true;
-                }
-
-                @Override
-                public boolean onForwardingStopped() {
-                    // Displaying the popup occurs asynchronously, so wait for
-                    // the runnable to finish before deciding whether to stop
-                    // forwarding.
-                    if (mPostedOpenRunnable != null) {
-                        return false;
-                    }
-
-                    hideOverflowMenu();
-                    return true;
-                }
-            });
-        }
-
-        @Override
-        public boolean performClick() {
-            if (super.performClick()) {
-                return true;
-            }
-
-            playSoundEffect(SoundEffectConstants.CLICK);
-            showOverflowMenu();
-            return true;
-        }
-
-        @Override
-        public boolean needsDividerBefore() {
-            return false;
-        }
-
-        @Override
-        public boolean needsDividerAfter() {
-            return false;
-        }
-
-        @Override
-        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-            if (MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
-                // Fill available height
-                heightMeasureSpec = MeasureSpec.makeMeasureSpec(
-                        MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY);
-            }
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        }
-
-        @Override
-        public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
-            super.onInitializeAccessibilityNodeInfo(info);
-            info.setCanOpenPopup(true);
-        }
-    }
-
-    private class OverflowPopup extends MenuPopupHelper {
-        public OverflowPopup(Context context, MenuBuilder menu, View anchorView,
-                boolean overflowOnly) {
-            super(context, menu, anchorView, overflowOnly);
-            setGravity(Gravity.END);
-            setCallback(mPopupPresenterCallback);
-        }
-
-        @Override
-        public void onDismiss() {
-            super.onDismiss();
-            mMenu.close();
-            mOverflowPopup = null;
-        }
-    }
-
-    private class ActionButtonSubmenu extends MenuPopupHelper {
-        private SubMenuBuilder mSubMenu;
-
-        public ActionButtonSubmenu(Context context, SubMenuBuilder subMenu) {
-            super(context, subMenu);
-            mSubMenu = subMenu;
-
-            MenuItemImpl item = (MenuItemImpl) subMenu.getItem();
-            if (!item.isActionButton()) {
-                // Give a reasonable anchor to nested submenus.
-                setAnchorView(mOverflowButton == null ? (View) mMenuView : mOverflowButton);
-            }
-
-            setCallback(mPopupPresenterCallback);
-
-            boolean preserveIconSpacing = false;
-            final int count = subMenu.size();
-            for (int i = 0; i < count; i++) {
-                MenuItem childItem = subMenu.getItem(i);
-                if (childItem.isVisible() && childItem.getIcon() != null) {
-                    preserveIconSpacing = true;
-                    break;
-                }
-            }
-            setForceShowIcon(preserveIconSpacing);
-        }
-
-        @Override
-        public void onDismiss() {
-            super.onDismiss();
-            mActionButtonPopup = null;
-            mOpenSubMenuId = 0;
-        }
-    }
-
-    private class PopupPresenterCallback implements MenuPresenter.Callback {
-
-        @Override
-        public boolean onOpenSubMenu(MenuBuilder subMenu) {
-            if (subMenu == null) return false;
-
-            mOpenSubMenuId = ((SubMenuBuilder) subMenu).getItem().getItemId();
-            final MenuPresenter.Callback cb = getCallback();
-            return cb != null ? cb.onOpenSubMenu(subMenu) : false;
-        }
-
-        @Override
-        public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
-            if (menu instanceof SubMenuBuilder) {
-                ((SubMenuBuilder) menu).getRootMenu().close(false);
-            }
-            final MenuPresenter.Callback cb = getCallback();
-            if (cb != null) {
-                cb.onCloseMenu(menu, allMenusAreClosing);
-            }
-        }
-    }
-
-    private class OpenOverflowRunnable implements Runnable {
-        private OverflowPopup mPopup;
-
-        public OpenOverflowRunnable(OverflowPopup popup) {
-            mPopup = popup;
-        }
-
-        public void run() {
-            mMenu.changeMenuMode();
-            final View menuView = (View) mMenuView;
-            if (menuView != null && menuView.getWindowToken() != null && mPopup.tryShow()) {
-                mOverflowPopup = mPopup;
-            }
-            mPostedOpenRunnable = null;
-        }
-    }
-}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
deleted file mode 100644
index 16a2031..0000000
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
- * Copyright (C) 2010 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.android.internal.view.menu;
-
-import android.content.Context;
-import android.content.res.Configuration;
-import android.content.res.TypedArray;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewDebug;
-import android.view.ViewGroup;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.LinearLayout;
-import com.android.internal.R;
-
-/**
- * @hide
- */
-public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvoker, MenuView {
-    private static final String TAG = "ActionMenuView";
-    
-    static final int MIN_CELL_SIZE = 56; // dips
-    static final int GENERATED_ITEM_PADDING = 4; // dips
-
-    private MenuBuilder mMenu;
-
-    private boolean mReserveOverflow;
-    private ActionMenuPresenter mPresenter;
-    private boolean mFormatItems;
-    private int mFormatItemsWidth;
-    private int mMinCellSize;
-    private int mGeneratedItemPadding;
-    private int mMeasuredExtraWidth;
-    private int mMaxItemHeight;
-
-    public ActionMenuView(Context context) {
-        this(context, null);
-    }
-    
-    public ActionMenuView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setBaselineAligned(false);
-        final float density = context.getResources().getDisplayMetrics().density;
-        mMinCellSize = (int) (MIN_CELL_SIZE * density);
-        mGeneratedItemPadding = (int) (GENERATED_ITEM_PADDING * density);
-
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActionBar,
-                R.attr.actionBarStyle, 0);
-        mMaxItemHeight = a.getDimensionPixelSize(R.styleable.ActionBar_height, 0);
-        a.recycle();
-    }
-
-    public void setPresenter(ActionMenuPresenter presenter) {
-        mPresenter = presenter;
-    }
-
-    public boolean isExpandedFormat() {
-        return mFormatItems;
-    }
-
-    public void setMaxItemHeight(int maxItemHeight) {
-        mMaxItemHeight = maxItemHeight;
-        requestLayout();
-    }
-
-    @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        mPresenter.updateMenuView(false);
-
-        if (mPresenter != null && mPresenter.isOverflowMenuShowing()) {
-            mPresenter.hideOverflowMenu();
-            mPresenter.showOverflowMenu();
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        // If we've been given an exact size to match, apply special formatting during layout.
-        final boolean wasFormatted = mFormatItems;
-        mFormatItems = MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY;
-
-        if (wasFormatted != mFormatItems) {
-            mFormatItemsWidth = 0; // Reset this when switching modes
-        }
-
-        // Special formatting can change whether items can fit as action buttons.
-        // Kick the menu and update presenters when this changes.
-        final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
-        if (mFormatItems && mMenu != null && widthSize != mFormatItemsWidth) {
-            mFormatItemsWidth = widthSize;
-            mMenu.onItemsChanged(true);
-        }
-
-        if (mFormatItems) {
-            onMeasureExactFormat(widthMeasureSpec, heightMeasureSpec);
-        } else {
-            // Previous measurement at exact format may have set margins - reset them.
-            final int childCount = getChildCount();
-            for (int i = 0; i < childCount; i++) {
-                final View child = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-                lp.leftMargin = lp.rightMargin = 0;
-            }
-            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-        }
-    }
-
-    private void onMeasureExactFormat(int widthMeasureSpec, int heightMeasureSpec) {
-        // We already know the width mode is EXACTLY if we're here.
-        final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
-        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
-        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
-
-        final int widthPadding = getPaddingLeft() + getPaddingRight();
-        final int heightPadding = getPaddingTop() + getPaddingBottom();
-
-        final int itemHeightSpec = heightMode == MeasureSpec.EXACTLY
-                ? MeasureSpec.makeMeasureSpec(heightSize - heightPadding, MeasureSpec.EXACTLY)
-                : MeasureSpec.makeMeasureSpec(
-                    Math.min(mMaxItemHeight, heightSize - heightPadding), MeasureSpec.AT_MOST);
-
-        widthSize -= widthPadding;
-
-        // Divide the view into cells.
-        final int cellCount = widthSize / mMinCellSize;
-        final int cellSizeRemaining = widthSize % mMinCellSize;
-
-        if (cellCount == 0) {
-            // Give up, nothing fits.
-            setMeasuredDimension(widthSize, 0);
-            return;
-        }
-
-        final int cellSize = mMinCellSize + cellSizeRemaining / cellCount;
-
-        int cellsRemaining = cellCount;
-        int maxChildHeight = 0;
-        int maxCellsUsed = 0;
-        int expandableItemCount = 0;
-        int visibleItemCount = 0;
-        boolean hasOverflow = false;
-
-        // This is used as a bitfield to locate the smallest items present. Assumes childCount < 64.
-        long smallestItemsAt = 0;
-
-        final int childCount = getChildCount();
-        for (int i = 0; i < childCount; i++) {
-            final View child = getChildAt(i);
-            if (child.getVisibility() == GONE) continue;
-
-            final boolean isGeneratedItem = child instanceof ActionMenuItemView;
-            visibleItemCount++;
-
-            if (isGeneratedItem) {
-                // Reset padding for generated menu item views; it may change below
-                // and views are recycled.
-                child.setPadding(mGeneratedItemPadding, 0, mGeneratedItemPadding, 0);
-            }
-
-            final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-            lp.expanded = false;
-            lp.extraPixels = 0;
-            lp.cellsUsed = 0;
-            lp.expandable = false;
-            lp.leftMargin = 0;
-            lp.rightMargin = 0;
-            lp.preventEdgeOffset = isGeneratedItem && ((ActionMenuItemView) child).hasText();
-
-            // Overflow always gets 1 cell. No more, no less.
-            final int cellsAvailable = lp.isOverflowButton ? 1 : cellsRemaining;
-
-            final int cellsUsed = measureChildForCells(child, cellSize, cellsAvailable,
-                    itemHeightSpec, heightPadding);
-
-            maxCellsUsed = Math.max(maxCellsUsed, cellsUsed);
-            if (lp.expandable) expandableItemCount++;
-            if (lp.isOverflowButton) hasOverflow = true;
-
-            cellsRemaining -= cellsUsed;
-            maxChildHeight = Math.max(maxChildHeight, child.getMeasuredHeight());
-            if (cellsUsed == 1) smallestItemsAt |= (1 << i);
-        }
-
-        // When we have overflow and a single expanded (text) item, we want to try centering it
-        // visually in the available space even though overflow consumes some of it.
-        final boolean centerSingleExpandedItem = hasOverflow && visibleItemCount == 2;
-
-        // Divide space for remaining cells if we have items that can expand.
-        // Try distributing whole leftover cells to smaller items first.
-
-        boolean needsExpansion = false;
-        while (expandableItemCount > 0 && cellsRemaining > 0) {
-            int minCells = Integer.MAX_VALUE;
-            long minCellsAt = 0; // Bit locations are indices of relevant child views
-            int minCellsItemCount = 0;
-            for (int i = 0; i < childCount; i++) {
-                final View child = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-                // Don't try to expand items that shouldn't.
-                if (!lp.expandable) continue;
-
-                // Mark indices of children that can receive an extra cell.
-                if (lp.cellsUsed < minCells) {
-                    minCells = lp.cellsUsed;
-                    minCellsAt = 1 << i;
-                    minCellsItemCount = 1;
-                } else if (lp.cellsUsed == minCells) {
-                    minCellsAt |= 1 << i;
-                    minCellsItemCount++;
-                }
-            }
-
-            // Items that get expanded will always be in the set of smallest items when we're done.
-            smallestItemsAt |= minCellsAt;
-
-            if (minCellsItemCount > cellsRemaining) break; // Couldn't expand anything evenly. Stop.
-
-            // We have enough cells, all minimum size items will be incremented.
-            minCells++;
-
-            for (int i = 0; i < childCount; i++) {
-                final View child = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-                if ((minCellsAt & (1 << i)) == 0) {
-                    // If this item is already at our small item count, mark it for later.
-                    if (lp.cellsUsed == minCells) smallestItemsAt |= 1 << i;
-                    continue;
-                }
-
-                if (centerSingleExpandedItem && lp.preventEdgeOffset && cellsRemaining == 1) {
-                    // Add padding to this item such that it centers.
-                    child.setPadding(mGeneratedItemPadding + cellSize, 0, mGeneratedItemPadding, 0);
-                }
-                lp.cellsUsed++;
-                lp.expanded = true;
-                cellsRemaining--;
-            }
-
-            needsExpansion = true;
-        }
-
-        // Divide any space left that wouldn't divide along cell boundaries
-        // evenly among the smallest items
-
-        final boolean singleItem = !hasOverflow && visibleItemCount == 1;
-        if (cellsRemaining > 0 && smallestItemsAt != 0 &&
-                (cellsRemaining < visibleItemCount - 1 || singleItem || maxCellsUsed > 1)) {
-            float expandCount = Long.bitCount(smallestItemsAt);
-
-            if (!singleItem) {
-                // The items at the far edges may only expand by half in order to pin to either side.
-                if ((smallestItemsAt & 1) != 0) {
-                    LayoutParams lp = (LayoutParams) getChildAt(0).getLayoutParams();
-                    if (!lp.preventEdgeOffset) expandCount -= 0.5f;
-                }
-                if ((smallestItemsAt & (1 << (childCount - 1))) != 0) {
-                    LayoutParams lp = ((LayoutParams) getChildAt(childCount - 1).getLayoutParams());
-                    if (!lp.preventEdgeOffset) expandCount -= 0.5f;
-                }
-            }
-
-            final int extraPixels = expandCount > 0 ?
-                    (int) (cellsRemaining * cellSize / expandCount) : 0;
-
-            for (int i = 0; i < childCount; i++) {
-                if ((smallestItemsAt & (1 << i)) == 0) continue;
-
-                final View child = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-                if (child instanceof ActionMenuItemView) {
-                    // If this is one of our views, expand and measure at the larger size.
-                    lp.extraPixels = extraPixels;
-                    lp.expanded = true;
-                    if (i == 0 && !lp.preventEdgeOffset) {
-                        // First item gets part of its new padding pushed out of sight.
-                        // The last item will get this implicitly from layout.
-                        lp.leftMargin = -extraPixels / 2;
-                    }
-                    needsExpansion = true;
-                } else if (lp.isOverflowButton) {
-                    lp.extraPixels = extraPixels;
-                    lp.expanded = true;
-                    lp.rightMargin = -extraPixels / 2;
-                    needsExpansion = true;
-                } else {
-                    // If we don't know what it is, give it some margins instead
-                    // and let it center within its space. We still want to pin
-                    // against the edges.
-                    if (i != 0) {
-                        lp.leftMargin = extraPixels / 2;
-                    }
-                    if (i != childCount - 1) {
-                        lp.rightMargin = extraPixels / 2;
-                    }
-                }
-            }
-
-            cellsRemaining = 0;
-        }
-
-        // Remeasure any items that have had extra space allocated to them.
-        if (needsExpansion) {
-            for (int i = 0; i < childCount; i++) {
-                final View child = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-                if (!lp.expanded) continue;
-
-                final int width = lp.cellsUsed * cellSize + lp.extraPixels;
-                child.measure(MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
-                        itemHeightSpec);
-            }
-        }
-
-        if (heightMode != MeasureSpec.EXACTLY) {
-            heightSize = maxChildHeight;
-        }
-
-        setMeasuredDimension(widthSize, heightSize);
-        mMeasuredExtraWidth = cellsRemaining * cellSize;
-    }
-
-    /**
-     * Measure a child view to fit within cell-based formatting. The child's width
-     * will be measured to a whole multiple of cellSize.
-     *
-     * <p>Sets the expandable and cellsUsed fields of LayoutParams.
-     *
-     * @param child Child to measure
-     * @param cellSize Size of one cell
-     * @param cellsRemaining Number of cells remaining that this view can expand to fill
-     * @param parentHeightMeasureSpec MeasureSpec used by the parent view
-     * @param parentHeightPadding Padding present in the parent view
-     * @return Number of cells this child was measured to occupy
-     */
-    static int measureChildForCells(View child, int cellSize, int cellsRemaining,
-            int parentHeightMeasureSpec, int parentHeightPadding) {
-        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
-        final int childHeightSize = MeasureSpec.getSize(parentHeightMeasureSpec) -
-                parentHeightPadding;
-        final int childHeightMode = MeasureSpec.getMode(parentHeightMeasureSpec);
-        final int childHeightSpec = MeasureSpec.makeMeasureSpec(childHeightSize, childHeightMode);
-
-        final ActionMenuItemView itemView = child instanceof ActionMenuItemView ?
-                (ActionMenuItemView) child : null;
-        final boolean hasText = itemView != null && itemView.hasText();
-
-        int cellsUsed = 0;
-        if (cellsRemaining > 0 && (!hasText || cellsRemaining >= 2)) {
-            final int childWidthSpec = MeasureSpec.makeMeasureSpec(
-                    cellSize * cellsRemaining, MeasureSpec.AT_MOST);
-            child.measure(childWidthSpec, childHeightSpec);
-
-            final int measuredWidth = child.getMeasuredWidth();
-            cellsUsed = measuredWidth / cellSize;
-            if (measuredWidth % cellSize != 0) cellsUsed++;
-            if (hasText && cellsUsed < 2) cellsUsed = 2;
-        }
-
-        final boolean expandable = !lp.isOverflowButton && hasText;
-        lp.expandable = expandable;
-
-        lp.cellsUsed = cellsUsed;
-        final int targetWidth = cellsUsed * cellSize;
-        child.measure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY),
-                childHeightSpec);
-        return cellsUsed;
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        if (!mFormatItems) {
-            super.onLayout(changed, left, top, right, bottom);
-            return;
-        }
-
-        final int childCount = getChildCount();
-        final int midVertical = (top + bottom) / 2;
-        final int dividerWidth = getDividerWidth();
-        int overflowWidth = 0;
-        int nonOverflowWidth = 0;
-        int nonOverflowCount = 0;
-        int widthRemaining = right - left - getPaddingRight() - getPaddingLeft();
-        boolean hasOverflow = false;
-        final boolean isLayoutRtl = isLayoutRtl();
-        for (int i = 0; i < childCount; i++) {
-            final View v = getChildAt(i);
-            if (v.getVisibility() == GONE) {
-                continue;
-            }
-
-            LayoutParams p = (LayoutParams) v.getLayoutParams();
-            if (p.isOverflowButton) {
-                overflowWidth = v.getMeasuredWidth();
-                if (hasDividerBeforeChildAt(i)) {
-                    overflowWidth += dividerWidth;
-                }
-
-                int height = v.getMeasuredHeight();
-                int r;
-                int l;
-                if (isLayoutRtl) {
-                    l = getPaddingLeft() + p.leftMargin;
-                    r = l + overflowWidth;
-                } else {
-                    r = getWidth() - getPaddingRight() - p.rightMargin;
-                    l = r - overflowWidth;
-                }
-                int t = midVertical - (height / 2);
-                int b = t + height;
-                v.layout(l, t, r, b);
-
-                widthRemaining -= overflowWidth;
-                hasOverflow = true;
-            } else {
-                final int size = v.getMeasuredWidth() + p.leftMargin + p.rightMargin;
-                nonOverflowWidth += size;
-                widthRemaining -= size;
-                if (hasDividerBeforeChildAt(i)) {
-                    nonOverflowWidth += dividerWidth;
-                }
-                nonOverflowCount++;
-            }
-        }
-
-        if (childCount == 1 && !hasOverflow) {
-            // Center a single child
-            final View v = getChildAt(0);
-            final int width = v.getMeasuredWidth();
-            final int height = v.getMeasuredHeight();
-            final int midHorizontal = (right - left) / 2;
-            final int l = midHorizontal - width / 2;
-            final int t = midVertical - height / 2;
-            v.layout(l, t, l + width, t + height);
-            return;
-        }
-
-        final int spacerCount = nonOverflowCount - (hasOverflow ? 0 : 1);
-        final int spacerSize = Math.max(0, spacerCount > 0 ? widthRemaining / spacerCount : 0);
-
-        if (isLayoutRtl) {
-            int startRight = getWidth() - getPaddingRight();
-            for (int i = 0; i < childCount; i++) {
-                final View v = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) v.getLayoutParams();
-                if (v.getVisibility() == GONE || lp.isOverflowButton) {
-                    continue;
-                }
-
-                startRight -= lp.rightMargin;
-                int width = v.getMeasuredWidth();
-                int height = v.getMeasuredHeight();
-                int t = midVertical - height / 2;
-                v.layout(startRight - width, t, startRight, t + height);
-                startRight -= width + lp.leftMargin + spacerSize;
-            }
-        } else {
-            int startLeft = getPaddingLeft();
-            for (int i = 0; i < childCount; i++) {
-                final View v = getChildAt(i);
-                final LayoutParams lp = (LayoutParams) v.getLayoutParams();
-                if (v.getVisibility() == GONE || lp.isOverflowButton) {
-                    continue;
-                }
-
-                startLeft += lp.leftMargin;
-                int width = v.getMeasuredWidth();
-                int height = v.getMeasuredHeight();
-                int t = midVertical - height / 2;
-                v.layout(startLeft, t, startLeft + width, t + height);
-                startLeft += width + lp.rightMargin + spacerSize;
-            }
-        }
-    }
-
-    @Override
-    public void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        mPresenter.dismissPopupMenus();
-    }
-
-    public boolean isOverflowReserved() {
-        return mReserveOverflow;
-    }
-    
-    public void setOverflowReserved(boolean reserveOverflow) {
-        mReserveOverflow = reserveOverflow;
-    }
-
-    @Override
-    protected LayoutParams generateDefaultLayoutParams() {
-        LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
-                LayoutParams.WRAP_CONTENT);
-        params.gravity = Gravity.CENTER_VERTICAL;
-        return params;
-    }
-    
-    @Override
-    public LayoutParams generateLayoutParams(AttributeSet attrs) {
-        return new LayoutParams(getContext(), attrs);
-    }
-
-    @Override
-    protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
-        if (p != null) {
-            final LayoutParams result = p instanceof LayoutParams
-                    ? new LayoutParams((LayoutParams) p)
-                    : new LayoutParams(p);
-            if (result.gravity <= Gravity.NO_GRAVITY) {
-                result.gravity = Gravity.CENTER_VERTICAL;
-            }
-            return result;
-        }
-        return generateDefaultLayoutParams();
-    }
-
-    @Override
-    protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
-        return p != null && p instanceof LayoutParams;
-    }
-
-    public LayoutParams generateOverflowButtonLayoutParams() {
-        LayoutParams result = generateDefaultLayoutParams();
-        result.isOverflowButton = true;
-        return result;
-    }
-
-    public boolean invokeItem(MenuItemImpl item) {
-        return mMenu.performItemAction(item, 0);
-    }
-
-    public int getWindowAnimations() {
-        return 0;
-    }
-
-    public void initialize(MenuBuilder menu) {
-        mMenu = menu;
-    }
-
-    @Override
-    protected boolean hasDividerBeforeChildAt(int childIndex) {
-        if (childIndex == 0) {
-            return false;
-        }
-        final View childBefore = getChildAt(childIndex - 1);
-        final View child = getChildAt(childIndex);
-        boolean result = false;
-        if (childIndex < getChildCount() && childBefore instanceof ActionMenuChildView) {
-            result |= ((ActionMenuChildView) childBefore).needsDividerAfter();
-        }
-        if (childIndex > 0 && child instanceof ActionMenuChildView) {
-            result |= ((ActionMenuChildView) child).needsDividerBefore();
-        }
-        return result;
-    }
-
-    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
-        return false;
-    }
-
-    public interface ActionMenuChildView {
-        public boolean needsDividerBefore();
-        public boolean needsDividerAfter();
-    }
-
-    public static class LayoutParams extends LinearLayout.LayoutParams {
-        @ViewDebug.ExportedProperty(category = "layout")
-        public boolean isOverflowButton;
-        @ViewDebug.ExportedProperty(category = "layout")
-        public int cellsUsed;
-        @ViewDebug.ExportedProperty(category = "layout")
-        public int extraPixels;
-        @ViewDebug.ExportedProperty(category = "layout")
-        public boolean expandable;
-        @ViewDebug.ExportedProperty(category = "layout")
-        public boolean preventEdgeOffset;
-
-        public boolean expanded;
-
-        public LayoutParams(Context c, AttributeSet attrs) {
-            super(c, attrs);
-        }
-
-        public LayoutParams(ViewGroup.LayoutParams other) {
-            super(other);
-        }
-
-        public LayoutParams(LayoutParams other) {
-            super((LinearLayout.LayoutParams) other);
-            isOverflowButton = other.isOverflowButton;
-        }
-
-        public LayoutParams(int width, int height) {
-            super(width, height);
-            isOverflowButton = false;
-        }
-
-        public LayoutParams(int width, int height, boolean isOverflowButton) {
-            super(width, height);
-            this.isOverflowButton = isOverflowButton;
-        }
-    }
-}
diff --git a/core/java/com/android/internal/view/menu/IconMenuItemView.java b/core/java/com/android/internal/view/menu/IconMenuItemView.java
index 5d0b25f..de5e279 100644
--- a/core/java/com/android/internal/view/menu/IconMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/IconMenuItemView.java
@@ -57,8 +57,8 @@
     
     private static String sPrependShortcutLabel;
 
-    public IconMenuItemView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs);
+    public IconMenuItemView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         if (sPrependShortcutLabel == null) {
             /*
@@ -68,10 +68,9 @@
             sPrependShortcutLabel = getResources().getString(
                     com.android.internal.R.string.prepend_shortcut_label);
         }
-        
-        TypedArray a =
-            context.obtainStyledAttributes(
-                attrs, com.android.internal.R.styleable.MenuView, defStyle, 0);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.MenuView, defStyleAttr, defStyleRes);
 
         mDisabledAlpha = a.getFloat(
                 com.android.internal.R.styleable.MenuView_itemIconDisabledAlpha, 0.8f);
@@ -81,7 +80,11 @@
         
         a.recycle();
     }
-    
+
+    public IconMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     public IconMenuItemView(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
diff --git a/core/java/com/android/internal/view/menu/ListMenuItemView.java b/core/java/com/android/internal/view/menu/ListMenuItemView.java
index a2a4acc..692bdac 100644
--- a/core/java/com/android/internal/view/menu/ListMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ListMenuItemView.java
@@ -55,13 +55,13 @@
 
     private boolean mForceShowIcon;
 
-    public ListMenuItemView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs);
-    
-        TypedArray a =
-            context.obtainStyledAttributes(
-                attrs, com.android.internal.R.styleable.MenuView, defStyle, 0);
-        
+    public ListMenuItemView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, com.android.internal.R.styleable.MenuView, defStyleAttr, defStyleRes);
+
         mBackground = a.getDrawable(com.android.internal.R.styleable.MenuView_itemBackground);
         mTextAppearance = a.getResourceId(com.android.internal.R.styleable.
                                           MenuView_itemTextAppearance, -1);
@@ -72,6 +72,10 @@
         a.recycle();
     }
 
+    public ListMenuItemView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
     public ListMenuItemView(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
diff --git a/core/java/com/android/internal/view/menu/ListMenuPresenter.java b/core/java/com/android/internal/view/menu/ListMenuPresenter.java
index e1bb3621..c476354 100644
--- a/core/java/com/android/internal/view/menu/ListMenuPresenter.java
+++ b/core/java/com/android/internal/view/menu/ListMenuPresenter.java
@@ -17,7 +17,6 @@
 package com.android.internal.view.menu;
 
 import android.content.Context;
-import android.database.DataSetObserver;
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.util.SparseArray;
diff --git a/core/java/com/android/internal/view/menu/MenuBuilder.java b/core/java/com/android/internal/view/menu/MenuBuilder.java
index 5464284..5d7d322 100644
--- a/core/java/com/android/internal/view/menu/MenuBuilder.java
+++ b/core/java/com/android/internal/view/menu/MenuBuilder.java
@@ -926,7 +926,7 @@
      *            sub menu is about to be shown, <var>allMenusAreClosing</var>
      *            is false.
      */
-    final void close(boolean allMenusAreClosing) {
+    public final void close(boolean allMenusAreClosing) {
         if (mIsClosing) return;
 
         mIsClosing = true;
@@ -953,7 +953,7 @@
      *                         false if only item properties changed.
      *                         (Visibility is a structural property since it affects layout.)
      */
-    void onItemsChanged(boolean structureChanged) {
+    public void onItemsChanged(boolean structureChanged) {
         if (!mPreventDispatchingItemsChanged) {
             if (structureChanged) {
                 mIsVisibleItemsStale = true;
@@ -1007,7 +1007,7 @@
         onItemsChanged(true);
     }
     
-    ArrayList<MenuItemImpl> getVisibleItems() {
+    public ArrayList<MenuItemImpl> getVisibleItems() {
         if (!mIsVisibleItemsStale) return mVisibleItems;
         
         // Refresh the visible items
@@ -1092,12 +1092,12 @@
         mIsActionItemsStale = false;
     }
     
-    ArrayList<MenuItemImpl> getActionItems() {
+    public ArrayList<MenuItemImpl> getActionItems() {
         flagActionItems();
         return mActionItems;
     }
     
-    ArrayList<MenuItemImpl> getNonActionItems() {
+    public ArrayList<MenuItemImpl> getNonActionItems() {
         flagActionItems();
         return mNonActionItems;
     }
@@ -1128,7 +1128,7 @@
             }
             
             if (iconRes > 0) {
-                mHeaderIcon = r.getDrawable(iconRes);
+                mHeaderIcon = getContext().getDrawable(iconRes);
             } else if (icon != null) {
                 mHeaderIcon = icon;
             }
diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java
index 4d0a326..61dcaca 100644
--- a/core/java/com/android/internal/view/menu/MenuItemImpl.java
+++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java
@@ -385,7 +385,7 @@
         }
 
         if (mIconResId != NO_ICON) {
-            Drawable icon =  mMenu.getResources().getDrawable(mIconResId);
+            Drawable icon =  mMenu.getContext().getDrawable(mIconResId);
             mIconResId = NO_ICON;
             mIconDrawable = icon;
             return icon;
diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
index 05e9a66..d664058 100644
--- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java
+++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java
@@ -23,7 +23,6 @@
 import android.view.KeyEvent;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
-import android.view.MotionEvent;
 import android.view.View;
 import android.view.View.MeasureSpec;
 import android.view.ViewGroup;
diff --git a/core/java/com/android/internal/widget/AbsActionBarView.java b/core/java/com/android/internal/widget/AbsActionBarView.java
index f3891c7..183478f 100644
--- a/core/java/com/android/internal/widget/AbsActionBarView.java
+++ b/core/java/com/android/internal/widget/AbsActionBarView.java
@@ -16,8 +16,8 @@
 package com.android.internal.widget;
 
 import com.android.internal.R;
-import com.android.internal.view.menu.ActionMenuPresenter;
-import com.android.internal.view.menu.ActionMenuView;
+import android.widget.ActionMenuPresenter;
+import android.widget.ActionMenuView;
 
 import android.animation.Animator;
 import android.animation.AnimatorSet;
@@ -47,15 +47,20 @@
     private static final int FADE_DURATION = 200;
 
     public AbsActionBarView(Context context) {
-        super(context);
+        this(context, null);
     }
 
     public AbsActionBarView(Context context, AttributeSet attrs) {
-        super(context, attrs);
+        this(context, attrs, 0);
     }
 
-    public AbsActionBarView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public AbsActionBarView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public AbsActionBarView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     @Override
@@ -95,9 +100,6 @@
 
     public void setContentHeight(int height) {
         mContentHeight = height;
-        if (mMenuView != null) {
-            mMenuView.setMaxItemHeight(mContentHeight);
-        }
         requestLayout();
     }
 
diff --git a/core/java/com/android/internal/widget/ActionBarContainer.java b/core/java/com/android/internal/widget/ActionBarContainer.java
index 8a49899..ed07514 100644
--- a/core/java/com/android/internal/widget/ActionBarContainer.java
+++ b/core/java/com/android/internal/widget/ActionBarContainer.java
@@ -16,10 +16,10 @@
 
 package com.android.internal.widget;
 
-import android.app.ActionBar;
 import android.content.Context;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
+import android.graphics.ColorFilter;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.ActionMode;
@@ -43,6 +43,7 @@
     private Drawable mSplitBackground;
     private boolean mIsSplit;
     private boolean mIsStacked;
+    private int mHeight;
 
     public ActionBarContainer(Context context) {
         this(context, null);
@@ -51,13 +52,15 @@
     public ActionBarContainer(Context context, AttributeSet attrs) {
         super(context, attrs);
 
-        setBackgroundDrawable(null);
+        // Set a transparent background so that we project appropriately.
+        setBackground(new ActionBarBackgroundDrawable());
 
         TypedArray a = context.obtainStyledAttributes(attrs,
                 com.android.internal.R.styleable.ActionBar);
         mBackground = a.getDrawable(com.android.internal.R.styleable.ActionBar_background);
         mStackedBackground = a.getDrawable(
                 com.android.internal.R.styleable.ActionBar_backgroundStacked);
+        mHeight = a.getDimensionPixelSize(com.android.internal.R.styleable.ActionBar_height, -1);
 
         if (getId() == com.android.internal.R.id.split_action_bar) {
             mIsSplit = true;
@@ -243,24 +246,6 @@
     }
 
     @Override
-    public void onDraw(Canvas canvas) {
-        if (getWidth() == 0 || getHeight() == 0) {
-            return;
-        }
-
-        if (mIsSplit) {
-            if (mSplitBackground != null) mSplitBackground.draw(canvas);
-        } else {
-            if (mBackground != null) {
-                mBackground.draw(canvas);
-            }
-            if (mStackedBackground != null && mIsStacked) {
-                mStackedBackground.draw(canvas);
-            }
-        }
-    }
-
-    @Override
     public ActionMode startActionModeForChild(View child, ActionMode.Callback callback) {
         // No starting an action mode for an action bar child! (Where would it go?)
         return null;
@@ -268,6 +253,11 @@
 
     @Override
     public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        if (mActionBarView == null &&
+                MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST && mHeight >= 0) {
+            heightMeasureSpec = MeasureSpec.makeMeasureSpec(
+                    Math.min(mHeight, MeasureSpec.getSize(heightMeasureSpec)), MeasureSpec.AT_MOST);
+        }
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
 
         if (mActionBarView == null) return;
@@ -291,12 +281,13 @@
     public void onLayout(boolean changed, int l, int t, int r, int b) {
         super.onLayout(changed, l, t, r, b);
 
-        final boolean hasTabs = mTabContainer != null && mTabContainer.getVisibility() != GONE;
+        final View tabContainer = mTabContainer;
+        final boolean hasTabs = tabContainer != null && tabContainer.getVisibility() != GONE;
 
-        if (mTabContainer != null && mTabContainer.getVisibility() != GONE) {
+        if (tabContainer != null && tabContainer.getVisibility() != GONE) {
             final int containerHeight = getMeasuredHeight();
-            final int tabHeight = mTabContainer.getMeasuredHeight();
-            mTabContainer.layout(l, containerHeight - tabHeight, r, containerHeight);
+            final int tabHeight = tabContainer.getMeasuredHeight();
+            tabContainer.layout(l, containerHeight - tabHeight, r, containerHeight);
         }
 
         boolean needsInvalidate = false;
@@ -307,13 +298,15 @@
             }
         } else {
             if (mBackground != null) {
-                mBackground.setBounds(mActionBarView.getLeft(), mActionBarView.getTop(),
-                        mActionBarView.getRight(), mActionBarView.getBottom());
+                final ActionBarView actionBarView = mActionBarView;
+                mBackground.setBounds(actionBarView.getLeft(), actionBarView.getTop(),
+                        actionBarView.getRight(), actionBarView.getBottom());
                 needsInvalidate = true;
             }
-            if ((mIsStacked = hasTabs && mStackedBackground != null)) {
-                mStackedBackground.setBounds(mTabContainer.getLeft(), mTabContainer.getTop(),
-                        mTabContainer.getRight(), mTabContainer.getBottom());
+            mIsStacked = hasTabs;
+            if (hasTabs && mStackedBackground != null) {
+                mStackedBackground.setBounds(tabContainer.getLeft(), tabContainer.getTop(),
+                        tabContainer.getRight(), tabContainer.getBottom());
                 needsInvalidate = true;
             }
         }
@@ -322,4 +315,37 @@
             invalidate();
         }
     }
+
+    /**
+     * Dummy drawable so that we don't break background display lists and
+     * projection surfaces.
+     */
+    private class ActionBarBackgroundDrawable extends Drawable {
+        @Override
+        public void draw(Canvas canvas) {
+            if (mIsSplit) {
+                if (mSplitBackground != null) mSplitBackground.draw(canvas);
+            } else {
+                if (mBackground != null) {
+                    mBackground.draw(canvas);
+                }
+                if (mStackedBackground != null && mIsStacked) {
+                    mStackedBackground.draw(canvas);
+                }
+            }
+        }
+
+        @Override
+        public void setAlpha(int alpha) {
+        }
+
+        @Override
+        public void setColorFilter(ColorFilter cf) {
+        }
+
+        @Override
+        public int getOpacity() {
+            return 0;
+        }
+    }
 }
diff --git a/core/java/com/android/internal/widget/ActionBarContextView.java b/core/java/com/android/internal/widget/ActionBarContextView.java
index 8bc1081..e10070f 100644
--- a/core/java/com/android/internal/widget/ActionBarContextView.java
+++ b/core/java/com/android/internal/widget/ActionBarContextView.java
@@ -16,8 +16,8 @@
 package com.android.internal.widget;
 
 import com.android.internal.R;
-import com.android.internal.view.menu.ActionMenuPresenter;
-import com.android.internal.view.menu.ActionMenuView;
+import android.widget.ActionMenuPresenter;
+import android.widget.ActionMenuView;
 import com.android.internal.view.menu.MenuBuilder;
 
 import android.animation.Animator;
@@ -25,7 +25,6 @@
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.content.Context;
-import android.content.res.Configuration;
 import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
@@ -74,10 +73,16 @@
         this(context, attrs, com.android.internal.R.attr.actionModeStyle);
     }
     
-    public ActionBarContextView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-        
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ActionMode, defStyle, 0);
+    public ActionBarContextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public ActionBarContextView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.ActionMode, defStyleAttr, defStyleRes);
         setBackgroundDrawable(a.getDrawable(
                 com.android.internal.R.styleable.ActionMode_background));
         mTitleStyleRes = a.getResourceId(
diff --git a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
index c957b67..01bee0c 100644
--- a/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
+++ b/core/java/com/android/internal/widget/ActionBarOverlayLayout.java
@@ -16,18 +16,22 @@
 
 package com.android.internal.widget;
 
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.os.Build;
-import android.view.ViewGroup;
-import android.view.WindowInsets;
-import com.android.internal.app.ActionBarImpl;
-
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
 import android.content.Context;
 import android.content.res.TypedArray;
+import android.graphics.Canvas;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
 import android.util.AttributeSet;
+import android.util.IntProperty;
+import android.util.Property;
 import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewPropertyAnimator;
+import android.view.WindowInsets;
+import android.widget.OverScroller;
 
 /**
  * Special layout for the containing of an overlay action bar (and its
@@ -38,7 +42,7 @@
     private static final String TAG = "ActionBarOverlayLayout";
 
     private int mActionBarHeight;
-    private ActionBarImpl mActionBar;
+    //private WindowDecorActionBar mActionBar;
     private int mWindowVisibility = View.VISIBLE;
 
     // The main UI elements that we handle the layout of.
@@ -54,6 +58,10 @@
     private boolean mIgnoreWindowContentOverlay;
 
     private boolean mOverlayMode;
+    private boolean mHasNonEmbeddedTabs;
+    private boolean mHideOnContentScroll;
+    private boolean mAnimatingForFling;
+    private int mHideOnContentScrollReference;
     private int mLastSystemUiVisibility;
     private final Rect mBaseContentInsets = new Rect();
     private final Rect mLastBaseContentInsets = new Rect();
@@ -62,6 +70,84 @@
     private final Rect mInnerInsets = new Rect();
     private final Rect mLastInnerInsets = new Rect();
 
+    private ActionBarVisibilityCallback mActionBarVisibilityCallback;
+
+    private final int ACTION_BAR_ANIMATE_DELAY = 600; // ms
+
+    private OverScroller mFlingEstimator;
+
+    private ViewPropertyAnimator mCurrentActionBarTopAnimator;
+    private ViewPropertyAnimator mCurrentActionBarBottomAnimator;
+
+    private final Animator.AnimatorListener mTopAnimatorListener = new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            mCurrentActionBarTopAnimator = null;
+            mAnimatingForFling = false;
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            mCurrentActionBarTopAnimator = null;
+            mAnimatingForFling = false;
+        }
+    };
+
+    private final Animator.AnimatorListener mBottomAnimatorListener =
+            new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            mCurrentActionBarBottomAnimator = null;
+            mAnimatingForFling = false;
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            mCurrentActionBarBottomAnimator = null;
+            mAnimatingForFling = false;
+        }
+    };
+
+    private final Runnable mRemoveActionBarHideOffset = new Runnable() {
+        public void run() {
+            haltActionBarHideOffsetAnimations();
+            mCurrentActionBarTopAnimator = mActionBarTop.animate().translationY(0)
+                    .setListener(mTopAnimatorListener);
+            if (mActionBarBottom != null && mActionBarBottom.getVisibility() != GONE) {
+                mCurrentActionBarBottomAnimator = mActionBarBottom.animate().translationY(0)
+                        .setListener(mBottomAnimatorListener);
+            }
+        }
+    };
+
+    private final Runnable mAddActionBarHideOffset = new Runnable() {
+        public void run() {
+            haltActionBarHideOffsetAnimations();
+            mCurrentActionBarTopAnimator = mActionBarTop.animate()
+                    .translationY(-mActionBarTop.getHeight())
+                    .setListener(mTopAnimatorListener);
+            if (mActionBarBottom != null && mActionBarBottom.getVisibility() != GONE) {
+                mCurrentActionBarBottomAnimator = mActionBarBottom.animate()
+                        .translationY(mActionBarBottom.getHeight())
+                        .setListener(mBottomAnimatorListener);
+            }
+        }
+    };
+
+    public static final Property<ActionBarOverlayLayout, Integer> ACTION_BAR_HIDE_OFFSET =
+            new IntProperty<ActionBarOverlayLayout>("actionBarHideOffset") {
+
+                @Override
+                public void setValue(ActionBarOverlayLayout object, int value) {
+                    object.setActionBarHideOffset(value);
+                }
+
+                @Override
+                public Integer get(ActionBarOverlayLayout object) {
+                    return object.getActionBarHideOffset();
+                }
+            };
+
     static final int[] ATTRS = new int [] {
             com.android.internal.R.attr.actionBarSize,
             com.android.internal.R.attr.windowContentOverlay
@@ -86,14 +172,22 @@
 
         mIgnoreWindowContentOverlay = context.getApplicationInfo().targetSdkVersion <
                 Build.VERSION_CODES.KITKAT;
+
+        mFlingEstimator = new OverScroller(context);
     }
 
-    public void setActionBar(ActionBarImpl impl) {
-        mActionBar = impl;
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        haltActionBarHideOffsetAnimations();
+    }
+
+    public void setActionBarVisibilityCallback(ActionBarVisibilityCallback cb) {
+        mActionBarVisibilityCallback = cb;
         if (getWindowToken() != null) {
             // This is being initialized after being added to a window;
             // make sure to update all state now.
-            mActionBar.setWindowVisibility(mWindowVisibility);
+            mActionBarVisibilityCallback.onWindowVisibilityChanged(mWindowVisibility);
             if (mLastSystemUiVisibility != 0) {
                 int newVis = mLastSystemUiVisibility;
                 onWindowSystemUiVisibilityChanged(newVis);
@@ -114,6 +208,14 @@
                         Build.VERSION_CODES.KITKAT;
     }
 
+    public boolean isInOverlayMode() {
+        return mOverlayMode;
+    }
+
+    public void setHasNonEmbeddedTabs(boolean hasNonEmbeddedTabs) {
+        mHasNonEmbeddedTabs = hasNonEmbeddedTabs;
+    }
+
     public void setShowingForActionMode(boolean showing) {
         if (showing) {
             // Here's a fun hack: if the status bar is currently being hidden,
@@ -140,19 +242,18 @@
         pullChildren();
         final int diff = mLastSystemUiVisibility ^ visible;
         mLastSystemUiVisibility = visible;
-        final boolean barVisible = (visible&SYSTEM_UI_FLAG_FULLSCREEN) == 0;
-        final boolean wasVisible = mActionBar != null ? mActionBar.isSystemShowing() : true;
-        final boolean stable = (visible&SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0;
-        if (mActionBar != null) {
+        final boolean barVisible = (visible & SYSTEM_UI_FLAG_FULLSCREEN) == 0;
+        final boolean stable = (visible & SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0;
+        if (mActionBarVisibilityCallback != null) {
             // We want the bar to be visible if it is not being hidden,
             // or the app has not turned on a stable UI mode (meaning they
             // are performing explicit layout around the action bar).
-            mActionBar.enableContentAnimations(!stable);
-            if (barVisible || !stable) mActionBar.showForSystem();
-            else mActionBar.hideForSystem();
+            mActionBarVisibilityCallback.enableContentAnimations(!stable);
+            if (barVisible || !stable) mActionBarVisibilityCallback.showForSystem();
+            else mActionBarVisibilityCallback.hideForSystem();
         }
-        if ((diff&SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) {
-            if (mActionBar != null) {
+        if ((diff & SYSTEM_UI_FLAG_LAYOUT_STABLE) != 0) {
+            if (mActionBarVisibilityCallback != null) {
                 requestApplyInsets();
             }
         }
@@ -162,8 +263,8 @@
     protected void onWindowVisibilityChanged(int visibility) {
         super.onWindowVisibilityChanged(visibility);
         mWindowVisibility = visibility;
-        if (mActionBar != null) {
-            mActionBar.setWindowVisibility(visibility);
+        if (mActionBarVisibilityCallback != null) {
+            mActionBarVisibilityCallback.onWindowVisibilityChanged(visibility);
         }
     }
 
@@ -279,14 +380,14 @@
             // This is the standard space needed for the action bar.  For stable measurement,
             // we can't depend on the size currently reported by it -- this must remain constant.
             topInset = mActionBarHeight;
-            if (mActionBar != null && mActionBar.hasNonEmbeddedTabs()) {
-                View tabs = mActionBarTop.getTabContainer();
+            if (mHasNonEmbeddedTabs) {
+                final View tabs = mActionBarTop.getTabContainer();
                 if (tabs != null) {
                     // If tabs are not embedded, increase space on top to account for them.
                     topInset += mActionBarHeight;
                 }
             }
-        } else if (mActionBarTop.getVisibility() == VISIBLE) {
+        } else if (mActionBarTop.getVisibility() != GONE) {
             // This is the space needed on top of the window for all of the action bar
             // and tabs.
             topInset = mActionBarTop.getMeasuredHeight();
@@ -395,16 +496,138 @@
         return false;
     }
 
+    @Override
+    public boolean onStartNestedScroll(View child, View target, int axes) {
+        if ((axes & SCROLL_AXIS_VERTICAL) == 0 || mActionBarTop.getVisibility() != VISIBLE) {
+            return false;
+        }
+        return mHideOnContentScroll;
+    }
+
+    @Override
+    public void onNestedScrollAccepted(View child, View target, int axes) {
+        super.onNestedScrollAccepted(child, target, axes);
+        mHideOnContentScrollReference = getActionBarHideOffset();
+        haltActionBarHideOffsetAnimations();
+        if (mActionBarVisibilityCallback != null) {
+            mActionBarVisibilityCallback.onContentScrollStarted();
+        }
+    }
+
+    @Override
+    public void onNestedScroll(View target, int dxConsumed, int dyConsumed,
+            int dxUnconsumed, int dyUnconsumed) {
+        mHideOnContentScrollReference += dyConsumed;
+        setActionBarHideOffset(mHideOnContentScrollReference);
+    }
+
+    @Override
+    public void onStopNestedScroll(View target) {
+        super.onStopNestedScroll(target);
+        if (mHideOnContentScroll && !mAnimatingForFling) {
+            if (mHideOnContentScrollReference <= mActionBarTop.getHeight()) {
+                postRemoveActionBarHideOffset();
+            } else {
+                postAddActionBarHideOffset();
+            }
+        }
+        if (mActionBarVisibilityCallback != null) {
+            mActionBarVisibilityCallback.onContentScrollStopped();
+        }
+    }
+
+    @Override
+    public boolean onNestedFling(View target, float velocityX, float velocityY, boolean consumed) {
+        if (!mHideOnContentScroll || !consumed) {
+            return false;
+        }
+        if (shouldHideActionBarOnFling(velocityX, velocityY)) {
+            addActionBarHideOffset();
+        } else {
+            removeActionBarHideOffset();
+        }
+        mAnimatingForFling = true;
+        return true;
+    }
+
     void pullChildren() {
         if (mContent == null) {
             mContent = findViewById(com.android.internal.R.id.content);
-            mActionBarTop = (ActionBarContainer)findViewById(
+            mActionBarTop = (ActionBarContainer) findViewById(
                     com.android.internal.R.id.action_bar_container);
             mActionBarView = (ActionBarView) findViewById(com.android.internal.R.id.action_bar);
             mActionBarBottom = findViewById(com.android.internal.R.id.split_action_bar);
         }
     }
 
+    public void setHideOnContentScrollEnabled(boolean hideOnContentScroll) {
+        if (hideOnContentScroll != mHideOnContentScroll) {
+            mHideOnContentScroll = hideOnContentScroll;
+            if (!hideOnContentScroll) {
+                stopNestedScroll();
+                haltActionBarHideOffsetAnimations();
+                setActionBarHideOffset(0);
+            }
+        }
+    }
+
+    public boolean isHideOnContentScrollEnabled() {
+        return mHideOnContentScroll;
+    }
+
+    public int getActionBarHideOffset() {
+        return -((int) mActionBarTop.getTranslationY());
+    }
+
+    public void setActionBarHideOffset(int offset) {
+        haltActionBarHideOffsetAnimations();
+        final int topHeight = mActionBarTop.getHeight();
+        offset = Math.max(0, Math.min(offset, topHeight));
+        mActionBarTop.setTranslationY(-offset);
+        if (mActionBarBottom != null && mActionBarBottom.getVisibility() != GONE) {
+            // Match the hide offset proportionally for a split bar
+            final float fOffset = (float) offset / topHeight;
+            final int bOffset = (int) (mActionBarBottom.getHeight() * fOffset);
+            mActionBarBottom.setTranslationY(bOffset);
+        }
+    }
+
+    private void haltActionBarHideOffsetAnimations() {
+        removeCallbacks(mRemoveActionBarHideOffset);
+        removeCallbacks(mAddActionBarHideOffset);
+        if (mCurrentActionBarTopAnimator != null) {
+            mCurrentActionBarTopAnimator.cancel();
+        }
+        if (mCurrentActionBarBottomAnimator != null) {
+            mCurrentActionBarBottomAnimator.cancel();
+        }
+    }
+
+    private void postRemoveActionBarHideOffset() {
+        haltActionBarHideOffsetAnimations();
+        postDelayed(mRemoveActionBarHideOffset, ACTION_BAR_ANIMATE_DELAY);
+    }
+
+    private void postAddActionBarHideOffset() {
+        haltActionBarHideOffsetAnimations();
+        postDelayed(mAddActionBarHideOffset, ACTION_BAR_ANIMATE_DELAY);
+    }
+
+    private void removeActionBarHideOffset() {
+        haltActionBarHideOffsetAnimations();
+        mRemoveActionBarHideOffset.run();
+    }
+
+    private void addActionBarHideOffset() {
+        haltActionBarHideOffsetAnimations();
+        mAddActionBarHideOffset.run();
+    }
+
+    private boolean shouldHideActionBarOnFling(float velocityX, float velocityY) {
+        mFlingEstimator.fling(0, 0, 0, (int) velocityY, 0, 0, Integer.MIN_VALUE, Integer.MAX_VALUE);
+        final int finalY = mFlingEstimator.getFinalY();
+        return finalY > mActionBarTop.getHeight();
+    }
 
     public static class LayoutParams extends MarginLayoutParams {
         public LayoutParams(Context c, AttributeSet attrs) {
@@ -423,4 +646,13 @@
             super(source);
         }
     }
+
+    public interface ActionBarVisibilityCallback {
+        void onWindowVisibilityChanged(int visibility);
+        void showForSystem();
+        void hideForSystem();
+        void enableContentAnimations(boolean enable);
+        void onContentScrollStarted();
+        void onContentScrollStopped();
+    }
 }
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 786f5cf..60631b9 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -41,6 +41,8 @@
 import android.view.ViewParent;
 import android.view.Window;
 import android.view.accessibility.AccessibilityEvent;
+import android.widget.ActionMenuPresenter;
+import android.widget.ActionMenuView;
 import android.widget.AdapterView;
 import android.widget.FrameLayout;
 import android.widget.ImageView;
@@ -52,8 +54,6 @@
 import com.android.internal.R;
 import com.android.internal.transition.ActionBarTransition;
 import com.android.internal.view.menu.ActionMenuItem;
-import com.android.internal.view.menu.ActionMenuPresenter;
-import com.android.internal.view.menu.ActionMenuView;
 import com.android.internal.view.menu.MenuBuilder;
 import com.android.internal.view.menu.MenuItemImpl;
 import com.android.internal.view.menu.MenuPresenter;
@@ -430,6 +430,7 @@
             mActionMenuPresenter.setItemLimit(Integer.MAX_VALUE);
             // Span the whole width
             layoutParams.width = LayoutParams.MATCH_PARENT;
+            layoutParams.height = LayoutParams.WRAP_CONTENT;
             configPresenters(builder);
             menuView = (ActionMenuView) mActionMenuPresenter.getMenuView(this);
             if (mSplitView != null) {
@@ -696,7 +697,7 @@
     }
 
     public void setIcon(int resId) {
-        setIcon(resId != 0 ? mContext.getResources().getDrawable(resId) : null);
+        setIcon(resId != 0 ? mContext.getDrawable(resId) : null);
     }
 
     public boolean hasIcon() {
@@ -711,7 +712,7 @@
     }
 
     public void setLogo(int resId) {
-        setLogo(resId != 0 ? mContext.getResources().getDrawable(resId) : null);
+        setLogo(resId != 0 ? mContext.getDrawable(resId) : null);
     }
 
     public boolean hasLogo() {
@@ -1416,7 +1417,7 @@
 
         public void setUpIndicator(int resId) {
             mUpIndicatorRes = resId;
-            mUpView.setImageDrawable(resId != 0 ? getResources().getDrawable(resId) : null);
+            mUpView.setImageDrawable(resId != 0 ? getContext().getDrawable(resId) : null);
         }
 
         @Override
diff --git a/core/java/com/android/internal/widget/AutoScrollHelper.java b/core/java/com/android/internal/widget/AutoScrollHelper.java
index 7a294aa..0d468ca 100644
--- a/core/java/com/android/internal/widget/AutoScrollHelper.java
+++ b/core/java/com/android/internal/widget/AutoScrollHelper.java
@@ -892,6 +892,10 @@
         public boolean canTargetScrollVertically(int direction) {
             final AbsListView target = mTarget;
             final int itemCount = target.getCount();
+            if (itemCount == 0) {
+                return false;
+            }
+
             final int childCount = target.getChildCount();
             final int firstPosition = target.getFirstVisiblePosition();
             final int lastPosition = firstPosition + childCount;
diff --git a/core/java/com/android/internal/widget/DialogTitle.java b/core/java/com/android/internal/widget/DialogTitle.java
index b86c438..7ea3d6b 100644
--- a/core/java/com/android/internal/widget/DialogTitle.java
+++ b/core/java/com/android/internal/widget/DialogTitle.java
@@ -28,10 +28,13 @@
  * the text to the available space.
  */
 public class DialogTitle extends TextView {
-    
-    public DialogTitle(Context context, AttributeSet attrs,
-            int defStyle) {
-        super(context, attrs, defStyle);
+
+    public DialogTitle(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    public DialogTitle(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
     }
 
     public DialogTitle(Context context, AttributeSet attrs) {
diff --git a/core/java/com/android/internal/widget/FaceUnlockView.java b/core/java/com/android/internal/widget/FaceUnlockView.java
index e3c1247..121e601 100644
--- a/core/java/com/android/internal/widget/FaceUnlockView.java
+++ b/core/java/com/android/internal/widget/FaceUnlockView.java
@@ -18,8 +18,6 @@
 
 import android.content.Context;
 import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
 import android.widget.RelativeLayout;
 
 public class FaceUnlockView extends RelativeLayout {
diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl
index 91056f1..9501f92 100644
--- a/core/java/com/android/internal/widget/ILockSettings.aidl
+++ b/core/java/com/android/internal/widget/ILockSettings.aidl
@@ -28,6 +28,7 @@
     boolean checkPattern(in String pattern, int userId);
     void setLockPassword(in String password, int userId);
     boolean checkPassword(in String password, int userId);
+    boolean checkVoldPassword(int userId);
     boolean havePattern(int userId);
     boolean havePassword(int userId);
     void removeUser(int userId);
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index 8602260..2882b54 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -19,18 +19,21 @@
 import android.Manifest;
 import android.app.ActivityManagerNative;
 import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
 import android.appwidget.AppWidgetManager;
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageManager;
-import android.os.Binder;
+import android.net.Uri;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.os.storage.IMountService;
+import android.os.storage.StorageManager;
 import android.provider.Settings;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -46,6 +49,8 @@
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 /**
@@ -145,6 +150,8 @@
     private static final String LOCK_SCREEN_OWNER_INFO_ENABLED =
             Settings.Secure.LOCK_SCREEN_OWNER_INFO_ENABLED;
 
+    private static final String ENABLED_TRUST_AGENTS = "lockscreen.enabledtrustagents";
+
     private final Context mContext;
     private final ContentResolver mContentResolver;
     private DevicePolicyManager mDevicePolicyManager;
@@ -167,6 +174,15 @@
         return mDevicePolicyManager;
     }
 
+    private TrustManager getTrustManager() {
+        TrustManager trust = (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
+        if (trust == null) {
+            Log.e(TAG, "Can't get TrustManagerService: is it running?",
+                    new IllegalStateException("Stack trace:"));
+        }
+        return trust;
+    }
+
     /**
      * @param contentResolver Used to look up and save settings.
      */
@@ -242,10 +258,14 @@
      */
     public void reportFailedPasswordAttempt() {
         getDevicePolicyManager().reportFailedPasswordAttempt(getCurrentOrCallingUserId());
+        getTrustManager().reportUnlockAttempt(false /* authenticated */,
+                getCurrentOrCallingUserId());
     }
 
     public void reportSuccessfulPasswordAttempt() {
         getDevicePolicyManager().reportSuccessfulPasswordAttempt(getCurrentOrCallingUserId());
+        getTrustManager().reportUnlockAttempt(true /* authenticated */,
+                getCurrentOrCallingUserId());
     }
 
     public void setCurrentUser(int userId) {
@@ -313,6 +333,20 @@
     }
 
     /**
+     * Check to see if vold already has the password.
+     * Note that this also clears vold's copy of the password.
+     * @return Whether the vold password matches or not.
+     */
+    public boolean checkVoldPassword() {
+        final int userId = getCurrentOrCallingUserId();
+        try {
+            return getLockSettings().checkVoldPassword(userId);
+        } catch (RemoteException re) {
+            return false;
+        }
+    }
+
+    /**
      * Check to see if a password matches any of the passwords stored in the
      * password history.
      *
@@ -496,38 +530,71 @@
      */
     public void saveLockPattern(List<LockPatternView.Cell> pattern, boolean isFallback) {
         try {
-            getLockSettings().setLockPattern(patternToString(pattern), getCurrentOrCallingUserId());
+            int userId = getCurrentOrCallingUserId();
+            getLockSettings().setLockPattern(patternToString(pattern), userId);
             DevicePolicyManager dpm = getDevicePolicyManager();
             if (pattern != null) {
+
+                int userHandle = userId;
+                if (userHandle == UserHandle.USER_OWNER) {
+                    String stringPattern = patternToString(pattern);
+                    updateEncryptionPassword(StorageManager.CRYPT_TYPE_PATTERN, stringPattern);
+                }
+
                 setBoolean(PATTERN_EVER_CHOSEN_KEY, true);
                 if (!isFallback) {
                     deleteGallery();
                     setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
                     dpm.setActivePasswordState(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING,
-                            pattern.size(), 0, 0, 0, 0, 0, 0, getCurrentOrCallingUserId());
+                            pattern.size(), 0, 0, 0, 0, 0, 0, userId);
                 } else {
                     setLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK);
                     setLong(PASSWORD_TYPE_ALTERNATE_KEY,
                             DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
                     finishBiometricWeak();
                     dpm.setActivePasswordState(DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK,
-                            0, 0, 0, 0, 0, 0, 0, getCurrentOrCallingUserId());
+                            0, 0, 0, 0, 0, 0, 0, userId);
                 }
             } else {
                 dpm.setActivePasswordState(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, 0, 0,
-                        0, 0, 0, 0, 0, getCurrentOrCallingUserId());
+                        0, 0, 0, 0, 0, userId);
             }
         } catch (RemoteException re) {
             Log.e(TAG, "Couldn't save lock pattern " + re);
         }
     }
 
+    private void updateCryptoUserInfo() {
+        int userId = getCurrentOrCallingUserId();
+        if (userId != UserHandle.USER_OWNER) {
+            return;
+        }
+
+        final String ownerInfo = isOwnerInfoEnabled() ? getOwnerInfo(userId) : "";
+
+        IBinder service = ServiceManager.getService("mount");
+        if (service == null) {
+            Log.e(TAG, "Could not find the mount service to update the user info");
+            return;
+        }
+
+        IMountService mountService = IMountService.Stub.asInterface(service);
+        try {
+            Log.d(TAG, "Setting owner info");
+            mountService.setField("OwnerInfo", ownerInfo);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error changing user info", e);
+        }
+    }
+
     public void setOwnerInfo(String info, int userId) {
         setString(LOCK_SCREEN_OWNER_INFO, info, userId);
+        updateCryptoUserInfo();
     }
 
     public void setOwnerInfoEnabled(boolean enabled) {
         setBoolean(LOCK_SCREEN_OWNER_INFO_ENABLED, enabled);
+        updateCryptoUserInfo();
     }
 
     public String getOwnerInfo(int userId) {
@@ -566,7 +633,7 @@
     }
 
     /** Update the encryption password if it is enabled **/
-    private void updateEncryptionPassword(String password) {
+    private void updateEncryptionPassword(int type, String password) {
         DevicePolicyManager dpm = getDevicePolicyManager();
         if (dpm.getStorageEncryptionStatus(getCurrentOrCallingUserId())
                 != DevicePolicyManager.ENCRYPTION_STATUS_ACTIVE) {
@@ -581,7 +648,7 @@
 
         IMountService mountService = IMountService.Stub.asInterface(service);
         try {
-            mountService.changeEncryptionPassword(password);
+            mountService.changeEncryptionPassword(type, password);
         } catch (RemoteException e) {
             Log.e(TAG, "Error changing encryption password", e);
         }
@@ -624,12 +691,15 @@
             getLockSettings().setLockPassword(password, userHandle);
             DevicePolicyManager dpm = getDevicePolicyManager();
             if (password != null) {
+                int computedQuality = computePasswordQuality(password);
+
                 if (userHandle == UserHandle.USER_OWNER) {
                     // Update the encryption password.
-                    updateEncryptionPassword(password);
+                    int type = computedQuality == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC
+                        ? StorageManager.CRYPT_TYPE_PIN : StorageManager.CRYPT_TYPE_PASSWORD;
+                    updateEncryptionPassword(type, password);
                 }
 
-                int computedQuality = computePasswordQuality(password);
                 if (!isFallback) {
                     deleteGallery();
                     setLong(PASSWORD_TYPE_KEY, Math.max(quality, computedQuality), userHandle);
@@ -676,8 +746,7 @@
                             0, 0, 0, 0, 0, 0, 0, userHandle);
                 }
                 // Add the password to the password history. We assume all
-                // password
-                // hashes have the same length for simplicity of implementation.
+                // password hashes have the same length for simplicity of implementation.
                 String passwordHistory = getString(PASSWORD_HISTORY_KEY, userHandle);
                 if (passwordHistory == null) {
                     passwordHistory = new String();
@@ -696,6 +765,11 @@
                 }
                 setString(PASSWORD_HISTORY_KEY, passwordHistory, userHandle);
             } else {
+                if (userHandle == UserHandle.USER_OWNER) {
+                    // Update the encryption password.
+                    updateEncryptionPassword(StorageManager.CRYPT_TYPE_DEFAULT, password);
+                }
+
                 dpm.setActivePasswordState(
                         DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, 0, 0, 0, 0, 0, 0, 0,
                         userHandle);
@@ -714,13 +788,13 @@
      */
     public int getKeyguardStoredPasswordQuality() {
         int quality =
-                (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+                (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
         // If the user has chosen to use weak biometric sensor, then return the backup locking
         // method and treat biometric as a special case.
         if (quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK) {
             quality =
                 (int) getLong(PASSWORD_TYPE_ALTERNATE_KEY,
-                        DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+                        DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
         }
         return quality;
     }
@@ -730,7 +804,7 @@
      */
     public boolean usingBiometricWeak() {
         int quality =
-                (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
+                (int) getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
         return quality == DevicePolicyManager.PASSWORD_QUALITY_BIOMETRIC_WEAK;
     }
 
@@ -869,11 +943,12 @@
      */
     public boolean isLockPatternEnabled() {
         final boolean backupEnabled =
-                getLong(PASSWORD_TYPE_ALTERNATE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
-                == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
+                getLong(PASSWORD_TYPE_ALTERNATE_KEY,
+                        DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED)
+                                == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING;
 
         return getBoolean(Settings.Secure.LOCK_PATTERN_ENABLED, false)
-                && (getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_SOMETHING)
+                && (getLong(PASSWORD_TYPE_KEY, DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED)
                         == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING ||
                         (usingBiometricWeak() && backupEnabled));
     }
@@ -1201,7 +1276,7 @@
 
     private void setLong(String secureSettingKey, long value, int userHandle) {
         try {
-            getLockSettings().setLong(secureSettingKey, value, getCurrentOrCallingUserId());
+            getLockSettings().setLong(secureSettingKey, value, userHandle);
         } catch (RemoteException re) {
             // What can we do?
             Log.e(TAG, "Couldn't write long " + secureSettingKey + re);
@@ -1360,4 +1435,38 @@
         setBoolean(LOCKSCREEN_WIDGETS_ENABLED, enabled, userId);
     }
 
+    public void setEnabledTrustAgents(Collection<ComponentName> activeTrustAgents) {
+        setEnabledTrustAgents(activeTrustAgents, getCurrentOrCallingUserId());
+    }
+
+    public List<ComponentName> getEnabledTrustAgents() {
+        return getEnabledTrustAgents(getCurrentOrCallingUserId());
+    }
+
+    public void setEnabledTrustAgents(Collection<ComponentName> activeTrustAgents, int userId) {
+        StringBuilder sb = new StringBuilder();
+        for (ComponentName cn : activeTrustAgents) {
+            if (sb.length() > 0) {
+                sb.append(',');
+            }
+            sb.append(cn.flattenToShortString());
+        }
+        setString(ENABLED_TRUST_AGENTS, sb.toString(), userId);
+        getTrustManager().reportEnabledTrustAgentsChanged(getCurrentOrCallingUserId());
+    }
+
+    public List<ComponentName> getEnabledTrustAgents(int userId) {
+        String serialized = getString(ENABLED_TRUST_AGENTS, userId);
+        if (TextUtils.isEmpty(serialized)) {
+            return null;
+        }
+        String[] split = serialized.split(",");
+        ArrayList<ComponentName> activeTrustAgents = new ArrayList<ComponentName>(split.length);
+        for (String s : split) {
+            if (!TextUtils.isEmpty(s)) {
+                activeTrustAgents.add(ComponentName.unflattenFromString(s));
+            }
+        }
+        return activeTrustAgents;
+    }
 }
diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java
index b066d703..36ed344 100644
--- a/core/java/com/android/internal/widget/LockPatternView.java
+++ b/core/java/com/android/internal/widget/LockPatternView.java
@@ -32,6 +32,7 @@
 import android.os.Parcelable;
 import android.os.SystemClock;
 import android.util.AttributeSet;
+import android.util.TypedValue;
 import android.view.HapticFeedbackConstants;
 import android.view.MotionEvent;
 import android.view.View;
@@ -260,13 +261,23 @@
 
         mPathPaint.setAntiAlias(true);
         mPathPaint.setDither(true);
-        mPathPaint.setColor(Color.WHITE);   // TODO this should be from the style
+
+        int defaultColor = Color.WHITE;
+        TypedValue outValue = new TypedValue();
+        if (context.getTheme().resolveAttribute(android.R.attr.textColorPrimary, outValue, true)) {
+            defaultColor = context.getResources().getColor(outValue.resourceId);
+        }
+
+        final int color = a.getColor(R.styleable.LockPatternView_pathColor, defaultColor);
+        mPathPaint.setColor(color);
+
         mPathPaint.setAlpha(mStrokeAlpha);
         mPathPaint.setStyle(Paint.Style.STROKE);
         mPathPaint.setStrokeJoin(Paint.Join.ROUND);
         mPathPaint.setStrokeCap(Paint.Cap.ROUND);
 
         // lot's of bitmaps!
+        // TODO: those bitmaps are hardcoded to the Holo Theme which should not be the case!
         mBitmapBtnDefault = getBitmapFor(R.drawable.btn_code_lock_default_holo);
         mBitmapBtnTouched = getBitmapFor(R.drawable.btn_code_lock_touched_holo);
         mBitmapCircleDefault = getBitmapFor(R.drawable.indicator_code_lock_point_area_default_holo);
@@ -868,12 +879,10 @@
 
         // TODO: the path should be created and cached every time we hit-detect a cell
         // only the last segment of the path should be computed here
-        // draw the path of the pattern (unless the user is in progress, and
-        // we are in stealth mode)
-        final boolean drawPath = (!mInStealthMode || mPatternDisplayMode == DisplayMode.Wrong);
+        // draw the path of the pattern (unless we are in stealth mode)
+        final boolean drawPath = !mInStealthMode;
 
-        // draw the arrows associated with the path (unless the user is in progress, and
-        // we are in stealth mode)
+        // draw the arrows associated with the path (unless we are in stealth mode)
         boolean oldFlag = (mPaint.getFlags() & Paint.FILTER_BITMAP_FLAG) != 0;
         mPaint.setFilterBitmap(true); // draw with higher quality since we render with transforms
         if (drawPath) {
@@ -974,7 +983,7 @@
         Bitmap outerCircle;
         Bitmap innerCircle;
 
-        if (!partOfPattern || (mInStealthMode && mPatternDisplayMode != DisplayMode.Wrong)) {
+        if (!partOfPattern || mInStealthMode) {
             // unselected circle
             outerCircle = mBitmapCircleDefault;
             innerCircle = mBitmapBtnDefault;
diff --git a/core/java/com/android/internal/widget/PasswordEntryKeyboard.java b/core/java/com/android/internal/widget/PasswordEntryKeyboard.java
index 3c01c69..7483e75 100644
--- a/core/java/com/android/internal/widget/PasswordEntryKeyboard.java
+++ b/core/java/com/android/internal/widget/PasswordEntryKeyboard.java
@@ -16,7 +16,6 @@
 
 package com.android.internal.widget;
 
-import java.util.Locale;
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
@@ -73,8 +72,8 @@
 
     private void init(Context context) {
         final Resources res = context.getResources();
-        mShiftIcon = res.getDrawable(R.drawable.sym_keyboard_shift);
-        mShiftLockIcon = res.getDrawable(R.drawable.sym_keyboard_shift_locked);
+        mShiftIcon = context.getDrawable(R.drawable.sym_keyboard_shift);
+        mShiftLockIcon = context.getDrawable(R.drawable.sym_keyboard_shift_locked);
         sSpacebarVerticalCorrection = res.getDimensionPixelOffset(
                 R.dimen.password_keyboard_spacebar_vertical_correction);
     }
diff --git a/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java b/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java
index a3df291..b2c9dc5 100644
--- a/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java
+++ b/core/java/com/android/internal/widget/PasswordEntryKeyboardHelper.java
@@ -21,9 +21,7 @@
 import android.inputmethodservice.Keyboard;
 import android.inputmethodservice.KeyboardView;
 import android.inputmethodservice.KeyboardView.OnKeyboardActionListener;
-import android.os.Handler;
 import android.os.SystemClock;
-import android.os.Vibrator;
 import android.provider.Settings;
 import android.util.Log;
 import android.view.HapticFeedbackConstants;
diff --git a/core/java/com/android/internal/widget/PasswordEntryKeyboardView.java b/core/java/com/android/internal/widget/PasswordEntryKeyboardView.java
index b37adff..d27346b 100644
--- a/core/java/com/android/internal/widget/PasswordEntryKeyboardView.java
+++ b/core/java/com/android/internal/widget/PasswordEntryKeyboardView.java
@@ -29,11 +29,16 @@
     static final int KEYCODE_NEXT_LANGUAGE = -104;
 
     public PasswordEntryKeyboardView(Context context, AttributeSet attrs) {
-        super(context, attrs);
+        this(context, attrs, 0);
     }
 
-    public PasswordEntryKeyboardView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public PasswordEntryKeyboardView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public PasswordEntryKeyboardView(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
     }
 
     @Override
diff --git a/core/java/com/android/internal/widget/PointerLocationView.java b/core/java/com/android/internal/widget/PointerLocationView.java
index d82831f..e339c44 100644
--- a/core/java/com/android/internal/widget/PointerLocationView.java
+++ b/core/java/com/android/internal/widget/PointerLocationView.java
@@ -31,11 +31,13 @@
 import android.view.VelocityTracker;
 import android.view.View;
 import android.view.ViewConfiguration;
+import android.view.WindowManagerPolicy.PointerEventListener;
 import android.view.MotionEvent.PointerCoords;
 
 import java.util.ArrayList;
 
-public class PointerLocationView extends View implements InputDeviceListener {
+public class PointerLocationView extends View implements InputDeviceListener,
+        PointerEventListener {
     private static final String TAG = "Pointer";
 
     // The system property key used to specify an alternate velocity tracker strategy
@@ -520,7 +522,8 @@
                 .toString());
     }
 
-    public void addPointerEvent(MotionEvent event) {
+    @Override
+    public void onPointerEvent(MotionEvent event) {
         final int action = event.getAction();
         int NP = mPointers.size();
 
@@ -648,7 +651,7 @@
     
     @Override
     public boolean onTouchEvent(MotionEvent event) {
-        addPointerEvent(event);
+        onPointerEvent(event);
 
         if (event.getAction() == MotionEvent.ACTION_DOWN && !isFocused()) {
             requestFocus();
@@ -660,7 +663,7 @@
     public boolean onGenericMotionEvent(MotionEvent event) {
         final int source = event.getSource();
         if ((source & InputDevice.SOURCE_CLASS_POINTER) != 0) {
-            addPointerEvent(event);
+            onPointerEvent(event);
         } else if ((source & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
             logMotionEvent("Joystick", event);
         } else if ((source & InputDevice.SOURCE_CLASS_POSITION) != 0) {
diff --git a/core/java/com/android/internal/widget/RotarySelector.java b/core/java/com/android/internal/widget/RotarySelector.java
index 4e405f4..64ce918 100644
--- a/core/java/com/android/internal/widget/RotarySelector.java
+++ b/core/java/com/android/internal/widget/RotarySelector.java
@@ -24,7 +24,7 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Matrix;
-import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
 import android.os.UserHandle;
 import android.os.Vibrator;
 import android.provider.Settings;
@@ -35,7 +35,9 @@
 import android.view.VelocityTracker;
 import android.view.ViewConfiguration;
 import android.view.animation.DecelerateInterpolator;
+
 import static android.view.animation.AnimationUtils.currentAnimationTimeMillis;
+
 import com.android.internal.R;
 
 
@@ -677,7 +679,7 @@
                 mVibrator = (android.os.Vibrator) getContext()
                         .getSystemService(Context.VIBRATOR_SERVICE);
             }
-            mVibrator.vibrate(duration);
+            mVibrator.vibrate(duration, AudioManager.STREAM_SYSTEM);
         }
     }
 
diff --git a/core/java/com/android/internal/widget/ScrollingTabContainerView.java b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
index fa29e6e1..d6bd1d6f 100644
--- a/core/java/com/android/internal/widget/ScrollingTabContainerView.java
+++ b/core/java/com/android/internal/widget/ScrollingTabContainerView.java
@@ -23,7 +23,6 @@
 import android.app.ActionBar;
 import android.content.Context;
 import android.content.res.Configuration;
-import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.text.TextUtils;
 import android.text.TextUtils.TruncateAt;
diff --git a/core/java/com/android/internal/widget/SizeAdaptiveLayout.java b/core/java/com/android/internal/widget/SizeAdaptiveLayout.java
index ba113a3..5f3c5f9 100644
--- a/core/java/com/android/internal/widget/SizeAdaptiveLayout.java
+++ b/core/java/com/android/internal/widget/SizeAdaptiveLayout.java
@@ -79,17 +79,20 @@
     private int mModestyPanelTop;
 
     public SizeAdaptiveLayout(Context context) {
-        super(context);
-        initialize();
+        this(context, null);
     }
 
     public SizeAdaptiveLayout(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        initialize();
+        this(context, attrs, 0);
     }
 
-    public SizeAdaptiveLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public SizeAdaptiveLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public SizeAdaptiveLayout(
+            Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
         initialize();
     }
 
@@ -104,8 +107,6 @@
         }
         if (background instanceof ColorDrawable) {
             mModestyPanel.setBackgroundDrawable(background);
-        } else {
-            mModestyPanel.setBackgroundColor(Color.BLACK);
         }
         SizeAdaptiveLayout.LayoutParams layout =
                 new SizeAdaptiveLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
@@ -151,6 +152,10 @@
         if (DEBUG) Log.d(TAG, this + " measure spec: " +
                          MeasureSpec.toString(heightMeasureSpec));
         View model = selectActiveChild(heightMeasureSpec);
+        if (model == null) {
+            setMeasuredDimension(0, 0);
+            return;
+        }
         SizeAdaptiveLayout.LayoutParams lp =
           (SizeAdaptiveLayout.LayoutParams) model.getLayoutParams();
         if (DEBUG) Log.d(TAG, "active min: " + lp.minHeight + " max: " + lp.maxHeight);
@@ -239,6 +244,8 @@
         int measureSpec = View.MeasureSpec.makeMeasureSpec(bottom - top,
                                                            View.MeasureSpec.EXACTLY);
         mActiveChild = selectActiveChild(measureSpec);
+        if (mActiveChild == null) return;
+
         mActiveChild.setVisibility(View.VISIBLE);
 
         if (mLastActive != mActiveChild && mLastActive != null) {
diff --git a/core/java/com/android/internal/widget/SlidingTab.java b/core/java/com/android/internal/widget/SlidingTab.java
index aebc4f6..deb0fd7 100644
--- a/core/java/com/android/internal/widget/SlidingTab.java
+++ b/core/java/com/android/internal/widget/SlidingTab.java
@@ -21,6 +21,7 @@
 import android.content.res.TypedArray;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
 import android.os.UserHandle;
 import android.os.Vibrator;
 import android.provider.Settings;
@@ -821,7 +822,7 @@
                 mVibrator = (android.os.Vibrator) getContext()
                         .getSystemService(Context.VIBRATOR_SERVICE);
             }
-            mVibrator.vibrate(duration);
+            mVibrator.vibrate(duration, AudioManager.STREAM_SYSTEM);
         }
     }
 
diff --git a/core/java/com/android/internal/widget/SubtitleView.java b/core/java/com/android/internal/widget/SubtitleView.java
index 071193c..117463a 100644
--- a/core/java/com/android/internal/widget/SubtitleView.java
+++ b/core/java/com/android/internal/widget/SubtitleView.java
@@ -18,7 +18,6 @@
 
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.res.Resources.Theme;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
@@ -33,7 +32,6 @@
 import android.text.TextPaint;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
-import android.util.TypedValue;
 import android.view.View;
 import android.view.accessibility.CaptioningManager.CaptionStyle;
 
@@ -41,6 +39,12 @@
     // Ratio of inner padding to font size.
     private static final float INNER_PADDING_RATIO = 0.125f;
 
+    /** Color used for the shadowed edge of a bevel. */
+    private static final int COLOR_BEVEL_DARK = 0x80000000;
+
+    /** Color used for the illuminated edge of a bevel. */
+    private static final int COLOR_BEVEL_LIGHT = 0x80FFFFFF;
+
     // Styled dimensions.
     private final float mCornerRadius;
     private final float mOutlineWidth;
@@ -79,12 +83,15 @@
         this(context, attrs, 0);
     }
 
-    public SubtitleView(Context context, AttributeSet attrs, int defStyle) {
+    public SubtitleView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public SubtitleView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
         super(context, attrs);
 
-        final Theme theme = context.getTheme();
-        final TypedArray a = theme.obtainStyledAttributes(
-                    attrs, android.R.styleable.TextView, defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                    attrs, android.R.styleable.TextView, defStyleAttr, defStyleRes);
 
         CharSequence text = "";
         int textSize = 15;
@@ -112,7 +119,6 @@
         // Set up density-dependent properties.
         // TODO: Move these to a default style.
         final Resources res = getContext().getResources();
-        final DisplayMetrics m = res.getDisplayMetrics();
         mCornerRadius = res.getDimensionPixelSize(com.android.internal.R.dimen.subtitle_corner_radius);
         mOutlineWidth = res.getDimensionPixelSize(com.android.internal.R.dimen.subtitle_outline_width);
         mShadowRadius = res.getDimensionPixelSize(com.android.internal.R.dimen.subtitle_shadow_radius);
@@ -311,7 +317,8 @@
             }
         }
 
-        if (mEdgeType == CaptionStyle.EDGE_TYPE_OUTLINE) {
+        final int edgeType = mEdgeType;
+        if (edgeType == CaptionStyle.EDGE_TYPE_OUTLINE) {
             textPaint.setStrokeJoin(Join.ROUND);
             textPaint.setStrokeWidth(mOutlineWidth);
             textPaint.setColor(mEdgeColor);
@@ -320,8 +327,24 @@
             for (int i = 0; i < lineCount; i++) {
                 layout.drawText(c, i, i);
             }
-        } else if (mEdgeType == CaptionStyle.EDGE_TYPE_DROP_SHADOW) {
+        } else if (edgeType == CaptionStyle.EDGE_TYPE_DROP_SHADOW) {
             textPaint.setShadowLayer(mShadowRadius, mShadowOffsetX, mShadowOffsetY, mEdgeColor);
+        } else if (edgeType == CaptionStyle.EDGE_TYPE_RAISED
+                || edgeType == CaptionStyle.EDGE_TYPE_DEPRESSED) {
+            final boolean raised = edgeType == CaptionStyle.EDGE_TYPE_RAISED;
+            final int colorUp = raised ? Color.WHITE : mEdgeColor;
+            final int colorDown = raised ? mEdgeColor : Color.WHITE;
+            final float offset = mShadowRadius / 2f;
+
+            textPaint.setColor(mForegroundColor);
+            textPaint.setStyle(Style.FILL);
+            textPaint.setShadowLayer(mShadowRadius, -offset, -offset, colorUp);
+
+            for (int i = 0; i < lineCount; i++) {
+                layout.drawText(c, i, i);
+            }
+
+            textPaint.setShadowLayer(mShadowRadius, offset, offset, colorDown);
         }
 
         textPaint.setColor(mForegroundColor);
diff --git a/core/java/com/android/internal/widget/TextProgressBar.java b/core/java/com/android/internal/widget/TextProgressBar.java
index e898aa4..7ca07d4 100644
--- a/core/java/com/android/internal/widget/TextProgressBar.java
+++ b/core/java/com/android/internal/widget/TextProgressBar.java
@@ -19,7 +19,6 @@
 import android.content.Context;
 import android.os.SystemClock;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
@@ -59,9 +58,13 @@
 
     boolean mChronometerFollow = false;
     int mChronometerGravity = Gravity.NO_GRAVITY;
+
+    public TextProgressBar(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
     
-    public TextProgressBar(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public TextProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
     }
 
     public TextProgressBar(Context context, AttributeSet attrs) {
diff --git a/core/java/com/android/internal/widget/WaveView.java b/core/java/com/android/internal/widget/WaveView.java
index d33d50c..86f14b3 100644
--- a/core/java/com/android/internal/widget/WaveView.java
+++ b/core/java/com/android/internal/widget/WaveView.java
@@ -25,10 +25,10 @@
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.drawable.BitmapDrawable;
+import android.media.AudioManager;
 import android.os.UserHandle;
 import android.os.Vibrator;
 import android.provider.Settings;
-import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.MotionEvent;
@@ -583,7 +583,7 @@
                 mVibrator = (android.os.Vibrator) getContext()
                         .getSystemService(Context.VIBRATOR_SERVICE);
             }
-            mVibrator.vibrate(duration);
+            mVibrator.vibrate(duration, AudioManager.STREAM_SYSTEM);
         }
     }
 
diff --git a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java
index cd1ccd3..772dc5f 100644
--- a/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java
+++ b/core/java/com/android/internal/widget/multiwaveview/GlowPadView.java
@@ -30,6 +30,7 @@
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
+import android.media.AudioManager;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.Vibrator;
@@ -234,7 +235,7 @@
         mMagneticTargets = a.getBoolean(R.styleable.GlowPadView_magneticTargets, mMagneticTargets);
 
         int pointId = getResourceId(a, R.styleable.GlowPadView_pointDrawable);
-        Drawable pointDrawable = pointId != 0 ? res.getDrawable(pointId) : null;
+        Drawable pointDrawable = pointId != 0 ? context.getDrawable(pointId) : null;
         mGlowRadius = a.getDimension(R.styleable.GlowPadView_glowRadius, 0.0f);
 
         TypedValue outValue = new TypedValue();
@@ -564,7 +565,7 @@
                 mContext.getContentResolver(), Settings.System.HAPTIC_FEEDBACK_ENABLED, 1,
                 UserHandle.USER_CURRENT) != 0;
         if (mVibrator != null && hapticEnabled) {
-            mVibrator.vibrate(mVibrationDuration);
+            mVibrator.vibrate(mVibrationDuration, AudioManager.STREAM_SYSTEM);
         }
     }
 
diff --git a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java b/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
deleted file mode 100644
index e22d1e8..0000000
--- a/core/java/com/android/internal/widget/multiwaveview/MultiWaveView.java
+++ /dev/null
@@ -1,1269 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.internal.widget.multiwaveview;
-
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.TimeInterpolator;
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.content.res.TypedArray;
-import android.graphics.Canvas;
-import android.graphics.RectF;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.UserHandle;
-import android.os.Vibrator;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
-import android.view.accessibility.AccessibilityManager;
-
-import com.android.internal.R;
-
-import java.util.ArrayList;
-
-/**
- * A special widget containing a center and outer ring. Moving the center ring to the outer ring
- * causes an event that can be caught by implementing OnTriggerListener.
- */
-public class MultiWaveView extends View {
-    private static final String TAG = "MultiWaveView";
-    private static final boolean DEBUG = false;
-
-    // Wave state machine
-    private static final int STATE_IDLE = 0;
-    private static final int STATE_START = 1;
-    private static final int STATE_FIRST_TOUCH = 2;
-    private static final int STATE_TRACKING = 3;
-    private static final int STATE_SNAP = 4;
-    private static final int STATE_FINISH = 5;
-
-    // Animation properties.
-    private static final float SNAP_MARGIN_DEFAULT = 20.0f; // distance to ring before we snap to it
-
-    public interface OnTriggerListener {
-        int NO_HANDLE = 0;
-        int CENTER_HANDLE = 1;
-        public void onGrabbed(View v, int handle);
-        public void onReleased(View v, int handle);
-        public void onTrigger(View v, int target);
-        public void onGrabbedStateChange(View v, int handle);
-        public void onFinishFinalAnimation();
-    }
-
-    // Tuneable parameters for animation
-    private static final int CHEVRON_INCREMENTAL_DELAY = 160;
-    private static final int CHEVRON_ANIMATION_DURATION = 850;
-    private static final int RETURN_TO_HOME_DELAY = 1200;
-    private static final int RETURN_TO_HOME_DURATION = 200;
-    private static final int HIDE_ANIMATION_DELAY = 200;
-    private static final int HIDE_ANIMATION_DURATION = 200;
-    private static final int SHOW_ANIMATION_DURATION = 200;
-    private static final int SHOW_ANIMATION_DELAY = 50;
-    private static final int INITIAL_SHOW_HANDLE_DURATION = 200;
-
-    private static final float TAP_RADIUS_SCALE_ACCESSIBILITY_ENABLED = 1.3f;
-    private static final float TARGET_SCALE_EXPANDED = 1.0f;
-    private static final float TARGET_SCALE_COLLAPSED = 0.8f;
-    private static final float RING_SCALE_EXPANDED = 1.0f;
-    private static final float RING_SCALE_COLLAPSED = 0.5f;
-
-    private TimeInterpolator mChevronAnimationInterpolator = Ease.Quad.easeOut;
-
-    private ArrayList<TargetDrawable> mTargetDrawables = new ArrayList<TargetDrawable>();
-    private ArrayList<TargetDrawable> mChevronDrawables = new ArrayList<TargetDrawable>();
-    private AnimationBundle mChevronAnimations = new AnimationBundle();
-    private AnimationBundle mTargetAnimations = new AnimationBundle();
-    private AnimationBundle mHandleAnimations = new AnimationBundle();
-    private ArrayList<String> mTargetDescriptions;
-    private ArrayList<String> mDirectionDescriptions;
-    private OnTriggerListener mOnTriggerListener;
-    private TargetDrawable mHandleDrawable;
-    private TargetDrawable mOuterRing;
-    private Vibrator mVibrator;
-
-    private int mFeedbackCount = 3;
-    private int mVibrationDuration = 0;
-    private int mGrabbedState;
-    private int mActiveTarget = -1;
-    private float mTapRadius;
-    private float mWaveCenterX;
-    private float mWaveCenterY;
-    private int mMaxTargetHeight;
-    private int mMaxTargetWidth;
-
-    private float mOuterRadius = 0.0f;
-    private float mSnapMargin = 0.0f;
-    private boolean mDragging;
-    private int mNewTargetResources;
-
-    private class AnimationBundle extends ArrayList<Tweener> {
-        private static final long serialVersionUID = 0xA84D78726F127468L;
-        private boolean mSuspended;
-
-        public void start() {
-            if (mSuspended) return; // ignore attempts to start animations
-            final int count = size();
-            for (int i = 0; i < count; i++) {
-                Tweener anim = get(i);
-                anim.animator.start();
-            }
-        }
-
-        public void cancel() {
-            final int count = size();
-            for (int i = 0; i < count; i++) {
-                Tweener anim = get(i);
-                anim.animator.cancel();
-            }
-            clear();
-        }
-
-        public void stop() {
-            final int count = size();
-            for (int i = 0; i < count; i++) {
-                Tweener anim = get(i);
-                anim.animator.end();
-            }
-            clear();
-        }
-
-        public void setSuspended(boolean suspend) {
-            mSuspended = suspend;
-        }
-    };
-
-    private AnimatorListener mResetListener = new AnimatorListenerAdapter() {
-        public void onAnimationEnd(Animator animator) {
-            switchToState(STATE_IDLE, mWaveCenterX, mWaveCenterY);
-            dispatchOnFinishFinalAnimation();
-        }
-    };
-
-    private AnimatorListener mResetListenerWithPing = new AnimatorListenerAdapter() {
-        public void onAnimationEnd(Animator animator) {
-            ping();
-            switchToState(STATE_IDLE, mWaveCenterX, mWaveCenterY);
-            dispatchOnFinishFinalAnimation();
-        }
-    };
-
-    private AnimatorUpdateListener mUpdateListener = new AnimatorUpdateListener() {
-        public void onAnimationUpdate(ValueAnimator animation) {
-            invalidateGlobalRegion(mHandleDrawable);
-            invalidate();
-        }
-    };
-
-    private boolean mAnimatingTargets;
-    private AnimatorListener mTargetUpdateListener = new AnimatorListenerAdapter() {
-        public void onAnimationEnd(Animator animator) {
-            if (mNewTargetResources != 0) {
-                internalSetTargetResources(mNewTargetResources);
-                mNewTargetResources = 0;
-                hideTargets(false, false);
-            }
-            mAnimatingTargets = false;
-        }
-    };
-    private int mTargetResourceId;
-    private int mTargetDescriptionsResourceId;
-    private int mDirectionDescriptionsResourceId;
-    private boolean mAlwaysTrackFinger;
-    private int mHorizontalInset;
-    private int mVerticalInset;
-    private int mGravity = Gravity.TOP;
-    private boolean mInitialLayout = true;
-    private Tweener mBackgroundAnimator;
-
-    public MultiWaveView(Context context) {
-        this(context, null);
-    }
-
-    public MultiWaveView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        Resources res = context.getResources();
-
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MultiWaveView);
-        mOuterRadius = a.getDimension(R.styleable.MultiWaveView_outerRadius, mOuterRadius);
-        mSnapMargin = a.getDimension(R.styleable.MultiWaveView_snapMargin, mSnapMargin);
-        mVibrationDuration = a.getInt(R.styleable.MultiWaveView_vibrationDuration,
-                mVibrationDuration);
-        mFeedbackCount = a.getInt(R.styleable.MultiWaveView_feedbackCount,
-                mFeedbackCount);
-        mHandleDrawable = new TargetDrawable(res,
-                a.peekValue(R.styleable.MultiWaveView_handleDrawable).resourceId);
-        mTapRadius = mHandleDrawable.getWidth()/2;
-        mOuterRing = new TargetDrawable(res,
-                a.peekValue(R.styleable.MultiWaveView_waveDrawable).resourceId);
-        mAlwaysTrackFinger = a.getBoolean(R.styleable.MultiWaveView_alwaysTrackFinger, false);
-
-        // Read array of chevron drawables
-        TypedValue outValue = new TypedValue();
-        if (a.getValue(R.styleable.MultiWaveView_chevronDrawables, outValue)) {
-            ArrayList<TargetDrawable> chevrons = loadDrawableArray(outValue.resourceId);
-            for (int i = 0; i < chevrons.size(); i++) {
-                final TargetDrawable chevron = chevrons.get(i);
-                for (int k = 0; k < mFeedbackCount; k++) {
-                    mChevronDrawables.add(chevron == null ? null : new TargetDrawable(chevron));
-                }
-            }
-        }
-
-        // Read array of target drawables
-        if (a.getValue(R.styleable.MultiWaveView_targetDrawables, outValue)) {
-            internalSetTargetResources(outValue.resourceId);
-        }
-        if (mTargetDrawables == null || mTargetDrawables.size() == 0) {
-            throw new IllegalStateException("Must specify at least one target drawable");
-        }
-
-        // Read array of target descriptions
-        if (a.getValue(R.styleable.MultiWaveView_targetDescriptions, outValue)) {
-            final int resourceId = outValue.resourceId;
-            if (resourceId == 0) {
-                throw new IllegalStateException("Must specify target descriptions");
-            }
-            setTargetDescriptionsResourceId(resourceId);
-        }
-
-        // Read array of direction descriptions
-        if (a.getValue(R.styleable.MultiWaveView_directionDescriptions, outValue)) {
-            final int resourceId = outValue.resourceId;
-            if (resourceId == 0) {
-                throw new IllegalStateException("Must specify direction descriptions");
-            }
-            setDirectionDescriptionsResourceId(resourceId);
-        }
-
-        a.recycle();
-
-        // Use gravity attribute from LinearLayout
-        a = context.obtainStyledAttributes(attrs, android.R.styleable.LinearLayout);
-        mGravity = a.getInt(android.R.styleable.LinearLayout_gravity, Gravity.TOP);
-        a.recycle();
-
-        setVibrateEnabled(mVibrationDuration > 0);
-        assignDefaultsIfNeeded();
-    }
-
-    private void dump() {
-        Log.v(TAG, "Outer Radius = " + mOuterRadius);
-        Log.v(TAG, "SnapMargin = " + mSnapMargin);
-        Log.v(TAG, "FeedbackCount = " + mFeedbackCount);
-        Log.v(TAG, "VibrationDuration = " + mVibrationDuration);
-        Log.v(TAG, "TapRadius = " + mTapRadius);
-        Log.v(TAG, "WaveCenterX = " + mWaveCenterX);
-        Log.v(TAG, "WaveCenterY = " + mWaveCenterY);
-    }
-
-    public void suspendAnimations() {
-        mChevronAnimations.setSuspended(true);
-        mTargetAnimations.setSuspended(true);
-        mHandleAnimations.setSuspended(true);
-    }
-
-    public void resumeAnimations() {
-        mChevronAnimations.setSuspended(false);
-        mTargetAnimations.setSuspended(false);
-        mHandleAnimations.setSuspended(false);
-        mChevronAnimations.start();
-        mTargetAnimations.start();
-        mHandleAnimations.start();
-    }
-
-    @Override
-    protected int getSuggestedMinimumWidth() {
-        // View should be large enough to contain the background + handle and
-        // target drawable on either edge.
-        return (int) (Math.max(mOuterRing.getWidth(), 2 * mOuterRadius) + mMaxTargetWidth);
-    }
-
-    @Override
-    protected int getSuggestedMinimumHeight() {
-        // View should be large enough to contain the unlock ring + target and
-        // target drawable on either edge
-        return (int) (Math.max(mOuterRing.getHeight(), 2 * mOuterRadius) + mMaxTargetHeight);
-    }
-
-    private int resolveMeasured(int measureSpec, int desired)
-    {
-        int result = 0;
-        int specSize = MeasureSpec.getSize(measureSpec);
-        switch (MeasureSpec.getMode(measureSpec)) {
-            case MeasureSpec.UNSPECIFIED:
-                result = desired;
-                break;
-            case MeasureSpec.AT_MOST:
-                result = Math.min(specSize, desired);
-                break;
-            case MeasureSpec.EXACTLY:
-            default:
-                result = specSize;
-        }
-        return result;
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        final int minimumWidth = getSuggestedMinimumWidth();
-        final int minimumHeight = getSuggestedMinimumHeight();
-        int computedWidth = resolveMeasured(widthMeasureSpec, minimumWidth);
-        int computedHeight = resolveMeasured(heightMeasureSpec, minimumHeight);
-        computeInsets((computedWidth - minimumWidth), (computedHeight - minimumHeight));
-        setMeasuredDimension(computedWidth, computedHeight);
-    }
-
-    private void switchToState(int state, float x, float y) {
-        switch (state) {
-            case STATE_IDLE:
-                deactivateTargets();
-                hideTargets(true, false);
-                startBackgroundAnimation(0, 0.0f);
-                mHandleDrawable.setState(TargetDrawable.STATE_INACTIVE);
-                break;
-
-            case STATE_START:
-                deactivateHandle(0, 0, 1.0f, null);
-                startBackgroundAnimation(0, 0.0f);
-                break;
-
-            case STATE_FIRST_TOUCH:
-                deactivateTargets();
-                showTargets(true);
-                mHandleDrawable.setState(TargetDrawable.STATE_ACTIVE);
-                startBackgroundAnimation(INITIAL_SHOW_HANDLE_DURATION, 1.0f);
-                setGrabbedState(OnTriggerListener.CENTER_HANDLE);
-                if (AccessibilityManager.getInstance(mContext).isEnabled()) {
-                    announceTargets();
-                }
-                break;
-
-            case STATE_TRACKING:
-                break;
-
-            case STATE_SNAP:
-                break;
-
-            case STATE_FINISH:
-                doFinish();
-                break;
-        }
-    }
-
-    private void activateHandle(int duration, int delay, float finalAlpha,
-            AnimatorListener finishListener) {
-        mHandleAnimations.cancel();
-        mHandleAnimations.add(Tweener.to(mHandleDrawable, duration,
-                "ease", Ease.Cubic.easeIn,
-                "delay", delay,
-                "alpha", finalAlpha,
-                "onUpdate", mUpdateListener,
-                "onComplete", finishListener));
-        mHandleAnimations.start();
-    }
-
-    private void deactivateHandle(int duration, int delay, float finalAlpha,
-            AnimatorListener finishListener) {
-        mHandleAnimations.cancel();
-        mHandleAnimations.add(Tweener.to(mHandleDrawable, duration,
-            "ease", Ease.Quart.easeOut,
-            "delay", delay,
-            "alpha", finalAlpha,
-            "x", 0,
-            "y", 0,
-            "onUpdate", mUpdateListener,
-            "onComplete", finishListener));
-        mHandleAnimations.start();
-    }
-
-    /**
-     * Animation used to attract user's attention to the target button.
-     * Assumes mChevronDrawables is an a list with an even number of chevrons filled with
-     * mFeedbackCount items in the order: left, right, top, bottom.
-     */
-    private void startChevronAnimation() {
-        final float chevronStartDistance = mHandleDrawable.getWidth() * 0.8f;
-        final float chevronStopDistance = mOuterRadius * 0.9f / 2.0f;
-        final float startScale = 0.5f;
-        final float endScale = 2.0f;
-        final int directionCount = mFeedbackCount > 0 ? mChevronDrawables.size()/mFeedbackCount : 0;
-
-        mChevronAnimations.stop();
-
-        // Add an animation for all chevron drawables.  There are mFeedbackCount drawables
-        // in each direction and directionCount directions.
-        for (int direction = 0; direction < directionCount; direction++) {
-            double angle = 2.0 * Math.PI * direction / directionCount;
-            final float sx = (float) Math.cos(angle);
-            final float sy = 0.0f - (float) Math.sin(angle);
-            final float[] xrange = new float[]
-                 {sx * chevronStartDistance, sx * chevronStopDistance};
-            final float[] yrange = new float[]
-                 {sy * chevronStartDistance, sy * chevronStopDistance};
-            for (int count = 0; count < mFeedbackCount; count++) {
-                int delay = count * CHEVRON_INCREMENTAL_DELAY;
-                final TargetDrawable icon = mChevronDrawables.get(direction*mFeedbackCount + count);
-                if (icon == null) {
-                    continue;
-                }
-                mChevronAnimations.add(Tweener.to(icon, CHEVRON_ANIMATION_DURATION,
-                        "ease", mChevronAnimationInterpolator,
-                        "delay", delay,
-                        "x", xrange,
-                        "y", yrange,
-                        "alpha", new float[] {1.0f, 0.0f},
-                        "scaleX", new float[] {startScale, endScale},
-                        "scaleY", new float[] {startScale, endScale},
-                        "onUpdate", mUpdateListener));
-            }
-        }
-        mChevronAnimations.start();
-    }
-
-    private void deactivateTargets() {
-        final int count = mTargetDrawables.size();
-        for (int i = 0; i < count; i++) {
-            TargetDrawable target = mTargetDrawables.get(i);
-            target.setState(TargetDrawable.STATE_INACTIVE);
-        }
-        mActiveTarget = -1;
-    }
-
-    void invalidateGlobalRegion(TargetDrawable drawable) {
-        int width = drawable.getWidth();
-        int height = drawable.getHeight();
-        RectF childBounds = new RectF(0, 0, width, height);
-        childBounds.offset(drawable.getX() - width/2, drawable.getY() - height/2);
-        View view = this;
-        while (view.getParent() != null && view.getParent() instanceof View) {
-            view = (View) view.getParent();
-            view.getMatrix().mapRect(childBounds);
-            view.invalidate((int) Math.floor(childBounds.left),
-                    (int) Math.floor(childBounds.top),
-                    (int) Math.ceil(childBounds.right),
-                    (int) Math.ceil(childBounds.bottom));
-        }
-    }
-
-    /**
-     * Dispatches a trigger event to listener. Ignored if a listener is not set.
-     * @param whichTarget the target that was triggered.
-     */
-    private void dispatchTriggerEvent(int whichTarget) {
-        vibrate();
-        if (mOnTriggerListener != null) {
-            mOnTriggerListener.onTrigger(this, whichTarget);
-        }
-    }
-
-    private void dispatchOnFinishFinalAnimation() {
-        if (mOnTriggerListener != null) {
-            mOnTriggerListener.onFinishFinalAnimation();
-        }
-    }
-
-    private void doFinish() {
-        final int activeTarget = mActiveTarget;
-        final boolean targetHit =  activeTarget != -1;
-
-        if (targetHit) {
-            if (DEBUG) Log.v(TAG, "Finish with target hit = " + targetHit);
-
-            highlightSelected(activeTarget);
-
-            // Inform listener of any active targets.  Typically only one will be active.
-            deactivateHandle(RETURN_TO_HOME_DURATION, RETURN_TO_HOME_DELAY, 0.0f, mResetListener);
-            dispatchTriggerEvent(activeTarget);
-            if (!mAlwaysTrackFinger) {
-                // Force ring and targets to finish animation to final expanded state
-                mTargetAnimations.stop();
-            }
-        } else {
-            // Animate handle back to the center based on current state.
-            deactivateHandle(HIDE_ANIMATION_DURATION, HIDE_ANIMATION_DELAY, 1.0f,
-                    mResetListenerWithPing);
-            hideTargets(true, false);
-        }
-
-        setGrabbedState(OnTriggerListener.NO_HANDLE);
-    }
-
-    private void highlightSelected(int activeTarget) {
-        // Highlight the given target and fade others
-        mTargetDrawables.get(activeTarget).setState(TargetDrawable.STATE_ACTIVE);
-        hideUnselected(activeTarget);
-    }
-
-    private void hideUnselected(int active) {
-        for (int i = 0; i < mTargetDrawables.size(); i++) {
-            if (i != active) {
-                mTargetDrawables.get(i).setAlpha(0.0f);
-            }
-        }
-    }
-
-    private void hideTargets(boolean animate, boolean expanded) {
-        mTargetAnimations.cancel();
-        // Note: these animations should complete at the same time so that we can swap out
-        // the target assets asynchronously from the setTargetResources() call.
-        mAnimatingTargets = animate;
-        final int duration = animate ? HIDE_ANIMATION_DURATION : 0;
-        final int delay = animate ? HIDE_ANIMATION_DELAY : 0;
-
-        final float targetScale = expanded ? TARGET_SCALE_EXPANDED : TARGET_SCALE_COLLAPSED;
-        final int length = mTargetDrawables.size();
-        for (int i = 0; i < length; i++) {
-            TargetDrawable target = mTargetDrawables.get(i);
-            target.setState(TargetDrawable.STATE_INACTIVE);
-            mTargetAnimations.add(Tweener.to(target, duration,
-                    "ease", Ease.Cubic.easeOut,
-                    "alpha", 0.0f,
-                    "scaleX", targetScale,
-                    "scaleY", targetScale,
-                    "delay", delay,
-                    "onUpdate", mUpdateListener));
-        }
-
-        final float ringScaleTarget = expanded ? RING_SCALE_EXPANDED : RING_SCALE_COLLAPSED;
-        mTargetAnimations.add(Tweener.to(mOuterRing, duration,
-                "ease", Ease.Cubic.easeOut,
-                "alpha", 0.0f,
-                "scaleX", ringScaleTarget,
-                "scaleY", ringScaleTarget,
-                "delay", delay,
-                "onUpdate", mUpdateListener,
-                "onComplete", mTargetUpdateListener));
-
-        mTargetAnimations.start();
-    }
-
-    private void showTargets(boolean animate) {
-        mTargetAnimations.stop();
-        mAnimatingTargets = animate;
-        final int delay = animate ? SHOW_ANIMATION_DELAY : 0;
-        final int duration = animate ? SHOW_ANIMATION_DURATION : 0;
-        final int length = mTargetDrawables.size();
-        for (int i = 0; i < length; i++) {
-            TargetDrawable target = mTargetDrawables.get(i);
-            target.setState(TargetDrawable.STATE_INACTIVE);
-            mTargetAnimations.add(Tweener.to(target, duration,
-                    "ease", Ease.Cubic.easeOut,
-                    "alpha", 1.0f,
-                    "scaleX", 1.0f,
-                    "scaleY", 1.0f,
-                    "delay", delay,
-                    "onUpdate", mUpdateListener));
-        }
-        mTargetAnimations.add(Tweener.to(mOuterRing, duration,
-                "ease", Ease.Cubic.easeOut,
-                "alpha", 1.0f,
-                "scaleX", 1.0f,
-                "scaleY", 1.0f,
-                "delay", delay,
-                "onUpdate", mUpdateListener,
-                "onComplete", mTargetUpdateListener));
-
-        mTargetAnimations.start();
-    }
-
-    private void vibrate() {
-        final boolean hapticEnabled = Settings.System.getIntForUser(
-                mContext.getContentResolver(), Settings.System.HAPTIC_FEEDBACK_ENABLED, 1,
-                UserHandle.USER_CURRENT) != 0;
-        if (mVibrator != null && hapticEnabled) {
-            mVibrator.vibrate(mVibrationDuration);
-        }
-    }
-
-    private ArrayList<TargetDrawable> loadDrawableArray(int resourceId) {
-        Resources res = getContext().getResources();
-        TypedArray array = res.obtainTypedArray(resourceId);
-        final int count = array.length();
-        ArrayList<TargetDrawable> drawables = new ArrayList<TargetDrawable>(count);
-        for (int i = 0; i < count; i++) {
-            TypedValue value = array.peekValue(i);
-            TargetDrawable target = new TargetDrawable(res, value != null ? value.resourceId : 0);
-            drawables.add(target);
-        }
-        array.recycle();
-        return drawables;
-    }
-
-    private void internalSetTargetResources(int resourceId) {
-        mTargetDrawables = loadDrawableArray(resourceId);
-        mTargetResourceId = resourceId;
-        final int count = mTargetDrawables.size();
-        int maxWidth = mHandleDrawable.getWidth();
-        int maxHeight = mHandleDrawable.getHeight();
-        for (int i = 0; i < count; i++) {
-            TargetDrawable target = mTargetDrawables.get(i);
-            maxWidth = Math.max(maxWidth, target.getWidth());
-            maxHeight = Math.max(maxHeight, target.getHeight());
-        }
-        if (mMaxTargetWidth != maxWidth || mMaxTargetHeight != maxHeight) {
-            mMaxTargetWidth = maxWidth;
-            mMaxTargetHeight = maxHeight;
-            requestLayout(); // required to resize layout and call updateTargetPositions()
-        } else {
-            updateTargetPositions(mWaveCenterX, mWaveCenterY);
-            updateChevronPositions(mWaveCenterX, mWaveCenterY);
-        }
-    }
-
-    /**
-     * Loads an array of drawables from the given resourceId.
-     *
-     * @param resourceId
-     */
-    public void setTargetResources(int resourceId) {
-        if (mAnimatingTargets) {
-            // postpone this change until we return to the initial state
-            mNewTargetResources = resourceId;
-        } else {
-            internalSetTargetResources(resourceId);
-        }
-    }
-
-    public int getTargetResourceId() {
-        return mTargetResourceId;
-    }
-
-    /**
-     * Sets the resource id specifying the target descriptions for accessibility.
-     *
-     * @param resourceId The resource id.
-     */
-    public void setTargetDescriptionsResourceId(int resourceId) {
-        mTargetDescriptionsResourceId = resourceId;
-        if (mTargetDescriptions != null) {
-            mTargetDescriptions.clear();
-        }
-    }
-
-    /**
-     * Gets the resource id specifying the target descriptions for accessibility.
-     *
-     * @return The resource id.
-     */
-    public int getTargetDescriptionsResourceId() {
-        return mTargetDescriptionsResourceId;
-    }
-
-    /**
-     * Sets the resource id specifying the target direction descriptions for accessibility.
-     *
-     * @param resourceId The resource id.
-     */
-    public void setDirectionDescriptionsResourceId(int resourceId) {
-        mDirectionDescriptionsResourceId = resourceId;
-        if (mDirectionDescriptions != null) {
-            mDirectionDescriptions.clear();
-        }
-    }
-
-    /**
-     * Gets the resource id specifying the target direction descriptions.
-     *
-     * @return The resource id.
-     */
-    public int getDirectionDescriptionsResourceId() {
-        return mDirectionDescriptionsResourceId;
-    }
-
-    /**
-     * Enable or disable vibrate on touch.
-     *
-     * @param enabled
-     */
-    public void setVibrateEnabled(boolean enabled) {
-        if (enabled && mVibrator == null) {
-            mVibrator = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE);
-        } else {
-            mVibrator = null;
-        }
-    }
-
-    /**
-     * Starts chevron animation. Example use case: show chevron animation whenever the phone rings
-     * or the user touches the screen.
-     *
-     */
-    public void ping() {
-        startChevronAnimation();
-    }
-
-    /**
-     * Resets the widget to default state and cancels all animation. If animate is 'true', will
-     * animate objects into place. Otherwise, objects will snap back to place.
-     *
-     * @param animate
-     */
-    public void reset(boolean animate) {
-        mChevronAnimations.stop();
-        mHandleAnimations.stop();
-        mTargetAnimations.stop();
-        startBackgroundAnimation(0, 0.0f);
-        hideChevrons();
-        hideTargets(animate, false);
-        deactivateHandle(0, 0, 1.0f, null);
-        Tweener.reset();
-    }
-
-    private void startBackgroundAnimation(int duration, float alpha) {
-        Drawable background = getBackground();
-        if (mAlwaysTrackFinger && background != null) {
-            if (mBackgroundAnimator != null) {
-                mBackgroundAnimator.animator.end();
-            }
-            mBackgroundAnimator = Tweener.to(background, duration,
-                    "ease", Ease.Cubic.easeIn,
-                    "alpha", new int[] {0, (int)(255.0f * alpha)},
-                    "delay", SHOW_ANIMATION_DELAY);
-            mBackgroundAnimator.animator.start();
-        }
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        final int action = event.getAction();
-        boolean handled = false;
-        switch (action) {
-            case MotionEvent.ACTION_DOWN:
-                if (DEBUG) Log.v(TAG, "*** DOWN ***");
-                handleDown(event);
-                handled = true;
-                break;
-
-            case MotionEvent.ACTION_MOVE:
-                if (DEBUG) Log.v(TAG, "*** MOVE ***");
-                handleMove(event);
-                handled = true;
-                break;
-
-            case MotionEvent.ACTION_UP:
-                if (DEBUG) Log.v(TAG, "*** UP ***");
-                handleMove(event);
-                handleUp(event);
-                handled = true;
-                break;
-
-            case MotionEvent.ACTION_CANCEL:
-                if (DEBUG) Log.v(TAG, "*** CANCEL ***");
-                handleMove(event);
-                handleCancel(event);
-                handled = true;
-                break;
-        }
-        invalidate();
-        return handled ? true : super.onTouchEvent(event);
-    }
-
-    private void moveHandleTo(float x, float y, boolean animate) {
-        mHandleDrawable.setX(x);
-        mHandleDrawable.setY(y);
-    }
-
-    private void handleDown(MotionEvent event) {
-        float eventX = event.getX();
-        float eventY = event.getY();
-        switchToState(STATE_START, eventX, eventY);
-        if (!trySwitchToFirstTouchState(eventX, eventY)) {
-            mDragging = false;
-            ping();
-        }
-    }
-
-    private void handleUp(MotionEvent event) {
-        if (DEBUG && mDragging) Log.v(TAG, "** Handle RELEASE");
-        switchToState(STATE_FINISH, event.getX(), event.getY());
-    }
-
-    private void handleCancel(MotionEvent event) {
-        if (DEBUG && mDragging) Log.v(TAG, "** Handle CANCEL");
-
-        // We should drop the active target here but it interferes with
-        // moving off the screen in the direction of the navigation bar. At some point we may
-        // want to revisit how we handle this. For now we'll allow a canceled event to
-        // activate the current target.
-
-        // mActiveTarget = -1; // Drop the active target if canceled.
-
-        switchToState(STATE_FINISH, event.getX(), event.getY());
-    }
-
-    private void handleMove(MotionEvent event) {
-        int activeTarget = -1;
-        final int historySize = event.getHistorySize();
-        ArrayList<TargetDrawable> targets = mTargetDrawables;
-        int ntargets = targets.size();
-        float x = 0.0f;
-        float y = 0.0f;
-        for (int k = 0; k < historySize + 1; k++) {
-            float eventX = k < historySize ? event.getHistoricalX(k) : event.getX();
-            float eventY = k < historySize ? event.getHistoricalY(k) : event.getY();
-            // tx and ty are relative to wave center
-            float tx = eventX - mWaveCenterX;
-            float ty = eventY - mWaveCenterY;
-            float touchRadius = (float) Math.sqrt(dist2(tx, ty));
-            final float scale = touchRadius > mOuterRadius ? mOuterRadius / touchRadius : 1.0f;
-            float limitX = tx * scale;
-            float limitY = ty * scale;
-            double angleRad = Math.atan2(-ty, tx);
-
-            if (!mDragging) {
-                trySwitchToFirstTouchState(eventX, eventY);
-            }
-
-            if (mDragging) {
-                // For multiple targets, snap to the one that matches
-                final float snapRadius = mOuterRadius - mSnapMargin;
-                final float snapDistance2 = snapRadius * snapRadius;
-                // Find first target in range
-                for (int i = 0; i < ntargets; i++) {
-                    TargetDrawable target = targets.get(i);
-
-                    double targetMinRad = (i - 0.5) * 2 * Math.PI / ntargets;
-                    double targetMaxRad = (i + 0.5) * 2 * Math.PI / ntargets;
-                    if (target.isEnabled()) {
-                        boolean angleMatches =
-                            (angleRad > targetMinRad && angleRad <= targetMaxRad) ||
-                            (angleRad + 2 * Math.PI > targetMinRad &&
-                             angleRad + 2 * Math.PI <= targetMaxRad);
-                        if (angleMatches && (dist2(tx, ty) > snapDistance2)) {
-                            activeTarget = i;
-                        }
-                    }
-                }
-            }
-            x = limitX;
-            y = limitY;
-        }
-
-        if (!mDragging) {
-            return;
-        }
-
-        if (activeTarget != -1) {
-            switchToState(STATE_SNAP, x,y);
-            moveHandleTo(x, y, false);
-        } else {
-            switchToState(STATE_TRACKING, x, y);
-            moveHandleTo(x, y, false);
-        }
-
-        // Draw handle outside parent's bounds
-        invalidateGlobalRegion(mHandleDrawable);
-
-        if (mActiveTarget != activeTarget) {
-            // Defocus the old target
-            if (mActiveTarget != -1) {
-                TargetDrawable target = targets.get(mActiveTarget);
-                if (target.hasState(TargetDrawable.STATE_FOCUSED)) {
-                    target.setState(TargetDrawable.STATE_INACTIVE);
-                }
-            }
-            // Focus the new target
-            if (activeTarget != -1) {
-                TargetDrawable target = targets.get(activeTarget);
-                if (target.hasState(TargetDrawable.STATE_FOCUSED)) {
-                    target.setState(TargetDrawable.STATE_FOCUSED);
-                }
-                if (AccessibilityManager.getInstance(mContext).isEnabled()) {
-                    String targetContentDescription = getTargetDescription(activeTarget);
-                    announceText(targetContentDescription);
-                }
-                activateHandle(0, 0, 0.0f, null);
-            } else {
-                activateHandle(0, 0, 1.0f, null);
-            }
-        }
-        mActiveTarget = activeTarget;
-    }
-
-    @Override
-    public boolean onHoverEvent(MotionEvent event) {
-        if (AccessibilityManager.getInstance(mContext).isTouchExplorationEnabled()) {
-            final int action = event.getAction();
-            switch (action) {
-                case MotionEvent.ACTION_HOVER_ENTER:
-                    event.setAction(MotionEvent.ACTION_DOWN);
-                    break;
-                case MotionEvent.ACTION_HOVER_MOVE:
-                    event.setAction(MotionEvent.ACTION_MOVE);
-                    break;
-                case MotionEvent.ACTION_HOVER_EXIT:
-                    event.setAction(MotionEvent.ACTION_UP);
-                    break;
-            }
-            onTouchEvent(event);
-            event.setAction(action);
-        }
-        return super.onHoverEvent(event);
-    }
-
-    /**
-     * Sets the current grabbed state, and dispatches a grabbed state change
-     * event to our listener.
-     */
-    private void setGrabbedState(int newState) {
-        if (newState != mGrabbedState) {
-            if (newState != OnTriggerListener.NO_HANDLE) {
-                vibrate();
-            }
-            mGrabbedState = newState;
-            if (mOnTriggerListener != null) {
-                if (newState == OnTriggerListener.NO_HANDLE) {
-                    mOnTriggerListener.onReleased(this, OnTriggerListener.CENTER_HANDLE);
-                } else {
-                    mOnTriggerListener.onGrabbed(this, OnTriggerListener.CENTER_HANDLE);
-                }
-                mOnTriggerListener.onGrabbedStateChange(this, newState);
-            }
-        }
-    }
-
-    private boolean trySwitchToFirstTouchState(float x, float y) {
-        final float tx = x - mWaveCenterX;
-        final float ty = y - mWaveCenterY;
-        if (mAlwaysTrackFinger || dist2(tx,ty) <= getScaledTapRadiusSquared()) {
-            if (DEBUG) Log.v(TAG, "** Handle HIT");
-            switchToState(STATE_FIRST_TOUCH, x, y);
-            moveHandleTo(tx, ty, false);
-            mDragging = true;
-            return true;
-        }
-        return false;
-    }
-
-    private void assignDefaultsIfNeeded() {
-        if (mOuterRadius == 0.0f) {
-            mOuterRadius = Math.max(mOuterRing.getWidth(), mOuterRing.getHeight())/2.0f;
-        }
-        if (mSnapMargin == 0.0f) {
-            mSnapMargin = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
-                    SNAP_MARGIN_DEFAULT, getContext().getResources().getDisplayMetrics());
-        }
-    }
-
-    private void computeInsets(int dx, int dy) {
-        final int layoutDirection = getLayoutDirection();
-        final int absoluteGravity = Gravity.getAbsoluteGravity(mGravity, layoutDirection);
-
-        switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
-            case Gravity.LEFT:
-                mHorizontalInset = 0;
-                break;
-            case Gravity.RIGHT:
-                mHorizontalInset = dx;
-                break;
-            case Gravity.CENTER_HORIZONTAL:
-            default:
-                mHorizontalInset = dx / 2;
-                break;
-        }
-        switch (absoluteGravity & Gravity.VERTICAL_GRAVITY_MASK) {
-            case Gravity.TOP:
-                mVerticalInset = 0;
-                break;
-            case Gravity.BOTTOM:
-                mVerticalInset = dy;
-                break;
-            case Gravity.CENTER_VERTICAL:
-            default:
-                mVerticalInset = dy / 2;
-                break;
-        }
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        final int width = right - left;
-        final int height = bottom - top;
-
-        // Target placement width/height. This puts the targets on the greater of the ring
-        // width or the specified outer radius.
-        final float placementWidth = Math.max(mOuterRing.getWidth(), 2 * mOuterRadius);
-        final float placementHeight = Math.max(mOuterRing.getHeight(), 2 * mOuterRadius);
-        float newWaveCenterX = mHorizontalInset
-                + Math.max(width, mMaxTargetWidth + placementWidth) / 2;
-        float newWaveCenterY = mVerticalInset
-                + Math.max(height, + mMaxTargetHeight + placementHeight) / 2;
-
-        if (mInitialLayout) {
-            hideChevrons();
-            hideTargets(false, false);
-            moveHandleTo(0, 0, false);
-            mInitialLayout = false;
-        }
-
-        mOuterRing.setPositionX(newWaveCenterX);
-        mOuterRing.setPositionY(newWaveCenterY);
-
-        mHandleDrawable.setPositionX(newWaveCenterX);
-        mHandleDrawable.setPositionY(newWaveCenterY);
-
-        updateTargetPositions(newWaveCenterX, newWaveCenterY);
-        updateChevronPositions(newWaveCenterX, newWaveCenterY);
-
-        mWaveCenterX = newWaveCenterX;
-        mWaveCenterY = newWaveCenterY;
-
-        if (DEBUG) dump();
-    }
-
-    private void updateTargetPositions(float centerX, float centerY) {
-        // Reposition the target drawables if the view changed.
-        ArrayList<TargetDrawable> targets = mTargetDrawables;
-        final int size = targets.size();
-        final float alpha = (float) (-2.0f * Math.PI / size);
-        for (int i = 0; i < size; i++) {
-            final TargetDrawable targetIcon = targets.get(i);
-            final float angle = alpha * i;
-            targetIcon.setPositionX(centerX);
-            targetIcon.setPositionY(centerY);
-            targetIcon.setX(mOuterRadius * (float) Math.cos(angle));
-            targetIcon.setY(mOuterRadius * (float) Math.sin(angle));
-        }
-    }
-
-    private void updateChevronPositions(float centerX, float centerY) {
-        ArrayList<TargetDrawable> chevrons = mChevronDrawables;
-        final int size = chevrons.size();
-        for (int i = 0; i < size; i++) {
-            TargetDrawable target = chevrons.get(i);
-            if (target != null) {
-                target.setPositionX(centerX);
-                target.setPositionY(centerY);
-            }
-        }
-    }
-
-    private void hideChevrons() {
-        ArrayList<TargetDrawable> chevrons = mChevronDrawables;
-        final int size = chevrons.size();
-        for (int i = 0; i < size; i++) {
-            TargetDrawable chevron = chevrons.get(i);
-            if (chevron != null) {
-                chevron.setAlpha(0.0f);
-            }
-        }
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-        mOuterRing.draw(canvas);
-        final int ntargets = mTargetDrawables.size();
-        for (int i = 0; i < ntargets; i++) {
-            TargetDrawable target = mTargetDrawables.get(i);
-            if (target != null) {
-                target.draw(canvas);
-            }
-        }
-        final int nchevrons = mChevronDrawables.size();
-        for (int i = 0; i < nchevrons; i++) {
-            TargetDrawable chevron = mChevronDrawables.get(i);
-            if (chevron != null) {
-                chevron.draw(canvas);
-            }
-        }
-        mHandleDrawable.draw(canvas);
-    }
-
-    public void setOnTriggerListener(OnTriggerListener listener) {
-        mOnTriggerListener = listener;
-    }
-
-    private float square(float d) {
-        return d * d;
-    }
-
-    private float dist2(float dx, float dy) {
-        return dx*dx + dy*dy;
-    }
-
-    private float getScaledTapRadiusSquared() {
-        final float scaledTapRadius;
-        if (AccessibilityManager.getInstance(mContext).isEnabled()) {
-            scaledTapRadius = TAP_RADIUS_SCALE_ACCESSIBILITY_ENABLED * mTapRadius;
-        } else {
-            scaledTapRadius = mTapRadius;
-        }
-        return square(scaledTapRadius);
-    }
-
-    private void announceTargets() {
-        StringBuilder utterance = new StringBuilder();
-        final int targetCount = mTargetDrawables.size();
-        for (int i = 0; i < targetCount; i++) {
-            String targetDescription = getTargetDescription(i);
-            String directionDescription = getDirectionDescription(i);
-            if (!TextUtils.isEmpty(targetDescription)
-                    && !TextUtils.isEmpty(directionDescription)) {
-                String text = String.format(directionDescription, targetDescription);
-                utterance.append(text);
-            }
-            if (utterance.length() > 0) {
-                announceText(utterance.toString());
-            }
-        }
-    }
-
-    private void announceText(String text) {
-        setContentDescription(text);
-        sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED);
-        setContentDescription(null);
-    }
-
-    private String getTargetDescription(int index) {
-        if (mTargetDescriptions == null || mTargetDescriptions.isEmpty()) {
-            mTargetDescriptions = loadDescriptions(mTargetDescriptionsResourceId);
-            if (mTargetDrawables.size() != mTargetDescriptions.size()) {
-                Log.w(TAG, "The number of target drawables must be"
-                        + " euqal to the number of target descriptions.");
-                return null;
-            }
-        }
-        return mTargetDescriptions.get(index);
-    }
-
-    private String getDirectionDescription(int index) {
-        if (mDirectionDescriptions == null || mDirectionDescriptions.isEmpty()) {
-            mDirectionDescriptions = loadDescriptions(mDirectionDescriptionsResourceId);
-            if (mTargetDrawables.size() != mDirectionDescriptions.size()) {
-                Log.w(TAG, "The number of target drawables must be"
-                        + " euqal to the number of direction descriptions.");
-                return null;
-            }
-        }
-        return mDirectionDescriptions.get(index);
-    }
-
-    private ArrayList<String> loadDescriptions(int resourceId) {
-        TypedArray array = getContext().getResources().obtainTypedArray(resourceId);
-        final int count = array.length();
-        ArrayList<String> targetContentDescriptions = new ArrayList<String>(count);
-        for (int i = 0; i < count; i++) {
-            String contentDescription = array.getString(i);
-            targetContentDescriptions.add(contentDescription);
-        }
-        array.recycle();
-        return targetContentDescriptions;
-    }
-
-    public int getResourceIdForTarget(int index) {
-        final TargetDrawable drawable = mTargetDrawables.get(index);
-        return drawable == null ? 0 : drawable.getResourceId();
-    }
-
-    public void setEnableTarget(int resourceId, boolean enabled) {
-        for (int i = 0; i < mTargetDrawables.size(); i++) {
-            final TargetDrawable target = mTargetDrawables.get(i);
-            if (target.getResourceId() == resourceId) {
-                target.setEnabled(enabled);
-                break; // should never be more than one match
-            }
-        }
-    }
-
-    /**
-     * Gets the position of a target in the array that matches the given resource.
-     * @param resourceId
-     * @return the index or -1 if not found
-     */
-    public int getTargetPosition(int resourceId) {
-        for (int i = 0; i < mTargetDrawables.size(); i++) {
-            final TargetDrawable target = mTargetDrawables.get(i);
-            if (target.getResourceId() == resourceId) {
-                return i; // should never be more than one match
-            }
-        }
-        return -1;
-    }
-
-    private boolean replaceTargetDrawables(Resources res, int existingResourceId,
-            int newResourceId) {
-        if (existingResourceId == 0 || newResourceId == 0) {
-            return false;
-        }
-
-        boolean result = false;
-        final ArrayList<TargetDrawable> drawables = mTargetDrawables;
-        final int size = drawables.size();
-        for (int i = 0; i < size; i++) {
-            final TargetDrawable target = drawables.get(i);
-            if (target != null && target.getResourceId() == existingResourceId) {
-                target.setDrawable(res, newResourceId);
-                result = true;
-            }
-        }
-
-        if (result) {
-            requestLayout(); // in case any given drawable's size changes
-        }
-
-        return result;
-    }
-
-    /**
-     * Searches the given package for a resource to use to replace the Drawable on the
-     * target with the given resource id
-     * @param component of the .apk that contains the resource
-     * @param name of the metadata in the .apk
-     * @param existingResId the resource id of the target to search for
-     * @return true if found in the given package and replaced at least one target Drawables
-     */
-    public boolean replaceTargetDrawablesIfPresent(ComponentName component, String name,
-                int existingResId) {
-        if (existingResId == 0) return false;
-
-        try {
-            PackageManager packageManager = mContext.getPackageManager();
-            // Look for the search icon specified in the activity meta-data
-            Bundle metaData = packageManager.getActivityInfo(
-                    component, PackageManager.GET_META_DATA).metaData;
-            if (metaData != null) {
-                int iconResId = metaData.getInt(name);
-                if (iconResId != 0) {
-                    Resources res = packageManager.getResourcesForActivity(component);
-                    return replaceTargetDrawables(res, existingResId, iconResId);
-                }
-            }
-        } catch (NameNotFoundException e) {
-            Log.w(TAG, "Failed to swap drawable; "
-                    + component.flattenToShortString() + " not found", e);
-        } catch (Resources.NotFoundException nfe) {
-            Log.w(TAG, "Failed to swap drawable from "
-                    + component.flattenToShortString(), nfe);
-        }
-        return false;
-    }
-}
diff --git a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java
index 16bec16..5a4c441 100644
--- a/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java
+++ b/core/java/com/android/internal/widget/multiwaveview/TargetDrawable.java
@@ -18,7 +18,6 @@
 
 import android.content.res.Resources;
 import android.graphics.Canvas;
-import android.graphics.ColorFilter;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.StateListDrawable;
 import android.util.Log;
diff --git a/core/java/com/android/server/AppWidgetBackupBridge.java b/core/java/com/android/server/AppWidgetBackupBridge.java
new file mode 100644
index 0000000..2ea2f79
--- /dev/null
+++ b/core/java/com/android/server/AppWidgetBackupBridge.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2014 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.android.server;
+
+import java.util.List;
+
+/**
+ * Runtime bridge between the Backup Manager Service and the App Widget Service,
+ * since those two modules are intentionally decoupled for modularity.
+ *
+ * @hide
+ */
+public class AppWidgetBackupBridge {
+    private static WidgetBackupProvider sAppWidgetService;
+
+    public static void register(WidgetBackupProvider instance) {
+        sAppWidgetService = instance;
+    }
+
+    public static List<String> getWidgetParticipants(int userId) {
+        return (sAppWidgetService != null)
+                ? sAppWidgetService.getWidgetParticipants(userId)
+                : null;
+    }
+
+    public static byte[] getWidgetState(String packageName, int userId) {
+        return (sAppWidgetService != null)
+                ? sAppWidgetService.getWidgetState(packageName, userId)
+                : null;
+    }
+
+    public static void restoreStarting(int userId) {
+        if (sAppWidgetService != null) {
+            sAppWidgetService.restoreStarting(userId);
+        }
+    }
+
+    public static void restoreWidgetState(String packageName, byte[] restoredState, int userId) {
+        if (sAppWidgetService != null) {
+            sAppWidgetService.restoreWidgetState(packageName, restoredState, userId);
+        }
+    }
+
+    public static void restoreFinished(int userId) {
+        if (sAppWidgetService != null) {
+            sAppWidgetService.restoreFinished(userId);
+        }
+    }
+}
diff --git a/core/java/com/android/server/SystemService.java b/core/java/com/android/server/SystemService.java
index e374563..bf36bb1 100644
--- a/core/java/com/android/server/SystemService.java
+++ b/core/java/com/android/server/SystemService.java
@@ -123,6 +123,38 @@
     public void onBootPhase(int phase) {}
 
     /**
+     * Called when a new user is starting, for system services to initialize any per-user
+     * state they maintain for running users.
+     * @param userHandle The identifier of the user.
+     */
+    public void onStartUser(int userHandle) {}
+
+    /**
+     * Called when switching to a different foreground user, for system services that have
+     * special behavior for whichever user is currently in the foreground.  This is called
+     * before any application processes are aware of the new user.
+     * @param userHandle The identifier of the user.
+     */
+    public void onSwitchUser(int userHandle) {}
+
+    /**
+     * Called when an existing user is stopping, for system services to finalize any per-user
+     * state they maintain for running users.  This is called prior to sending the SHUTDOWN
+     * broadcast to the user; it is a good place to stop making use of any resources of that
+     * user (such as binding to a service running in the user).
+     * @param userHandle The identifier of the user.
+     */
+    public void onStopUser(int userHandle) {}
+
+    /**
+     * Called when an existing user is stopping, for system services to finalize any per-user
+     * state they maintain for running users.  This is called after all application process
+     * teardown of the user is complete.
+     * @param userHandle The identifier of the user.
+     */
+    public void onCleanupUser(int userHandle) {}
+
+    /**
      * Publish the service so it is accessible to other services and apps.
      */
     protected final void publishBinderService(String name, IBinder service) {
diff --git a/core/java/com/android/server/SystemServiceManager.java b/core/java/com/android/server/SystemServiceManager.java
index eb8df0e..87a50a99 100644
--- a/core/java/com/android/server/SystemServiceManager.java
+++ b/core/java/com/android/server/SystemServiceManager.java
@@ -131,6 +131,58 @@
         }
     }
 
+    public void startUser(final int userHandle) {
+        final int serviceLen = mServices.size();
+        for (int i = 0; i < serviceLen; i++) {
+            final SystemService service = mServices.get(i);
+            try {
+                service.onStartUser(userHandle);
+            } catch (Exception ex) {
+                Slog.wtf(TAG, "Failure reporting start of user " + userHandle
+                        + " to service " + service.getClass().getName(), ex);
+            }
+        }
+    }
+
+    public void switchUser(final int userHandle) {
+        final int serviceLen = mServices.size();
+        for (int i = 0; i < serviceLen; i++) {
+            final SystemService service = mServices.get(i);
+            try {
+                service.onSwitchUser(userHandle);
+            } catch (Exception ex) {
+                Slog.wtf(TAG, "Failure reporting switch of user " + userHandle
+                        + " to service " + service.getClass().getName(), ex);
+            }
+        }
+    }
+
+    public void stopUser(final int userHandle) {
+        final int serviceLen = mServices.size();
+        for (int i = 0; i < serviceLen; i++) {
+            final SystemService service = mServices.get(i);
+            try {
+                service.onStopUser(userHandle);
+            } catch (Exception ex) {
+                Slog.wtf(TAG, "Failure reporting stop of user " + userHandle
+                        + " to service " + service.getClass().getName(), ex);
+            }
+        }
+    }
+
+    public void cleanupUser(final int userHandle) {
+        final int serviceLen = mServices.size();
+        for (int i = 0; i < serviceLen; i++) {
+            final SystemService service = mServices.get(i);
+            try {
+                service.onCleanupUser(userHandle);
+            } catch (Exception ex) {
+                Slog.wtf(TAG, "Failure reporting cleanup of user " + userHandle
+                        + " to service " + service.getClass().getName(), ex);
+            }
+        }
+    }
+
     /** Sets the safe mode flag for services to query. */
     public void setSafeMode(boolean safeMode) {
         mSafeMode = safeMode;
diff --git a/core/java/com/android/server/WidgetBackupProvider.java b/core/java/com/android/server/WidgetBackupProvider.java
new file mode 100644
index 0000000..a2efbdd
--- /dev/null
+++ b/core/java/com/android/server/WidgetBackupProvider.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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.android.server;
+
+import java.util.List;
+
+/**
+ * Shim to allow core/backup to communicate with the app widget service
+ * about various important events without needing to be able to see the
+ * implementation of the service.
+ *
+ * @hide
+ */
+public interface WidgetBackupProvider {
+    public List<String> getWidgetParticipants(int userId);
+    public byte[] getWidgetState(String packageName, int userId);
+    public void restoreStarting(int userId);
+    public void restoreWidgetState(String packageName, byte[] restoredState, int userId);
+    public void restoreFinished(int userId);
+}
diff --git a/core/java/com/android/server/net/BaseNetworkObserver.java b/core/java/com/android/server/net/BaseNetworkObserver.java
index 5502a17..430dd63 100644
--- a/core/java/com/android/server/net/BaseNetworkObserver.java
+++ b/core/java/com/android/server/net/BaseNetworkObserver.java
@@ -57,7 +57,7 @@
     }
 
     @Override
-    public void interfaceClassDataActivityChanged(String label, boolean active) {
+    public void interfaceClassDataActivityChanged(String label, boolean active, long tsNanos) {
         // default no-op
     }
 
diff --git a/core/jni/Android.mk b/core/jni/Android.mk
index fda4114..ee59c8a 100644
--- a/core/jni/Android.mk
+++ b/core/jni/Android.mk
@@ -53,12 +53,15 @@
 	android_view_InputQueue.cpp \
 	android_view_KeyEvent.cpp \
 	android_view_KeyCharacterMap.cpp \
-	android_view_HardwareRenderer.cpp \
 	android_view_GraphicBuffer.cpp \
-	android_view_GLES20DisplayList.cpp \
+	android_view_GLRenderer.cpp \
 	android_view_GLES20Canvas.cpp \
+	android_view_HardwareLayer.cpp \
+	android_view_ThreadedRenderer.cpp \
 	android_view_MotionEvent.cpp \
 	android_view_PointerIcon.cpp \
+	android_view_RenderNode.cpp \
+	android_view_RenderNodeAnimator.cpp \
 	android_view_VelocityTracker.cpp \
 	android_text_AndroidCharacter.cpp \
 	android_text_AndroidBidi.cpp \
@@ -74,7 +77,6 @@
 	android_net_LocalSocketImpl.cpp \
 	android_net_NetUtils.cpp \
 	android_net_TrafficStats.cpp \
-	android_net_wifi_WifiNative.cpp \
 	android_nio_utils.cpp \
 	android_text_format_Time.cpp \
 	android_util_AssetManager.cpp \
@@ -117,6 +119,7 @@
 	android/graphics/TextLayout.cpp \
 	android/graphics/TextLayoutCache.cpp \
 	android/graphics/Typeface.cpp \
+	android/graphics/TypefaceImpl.cpp \
 	android/graphics/Utils.cpp \
 	android/graphics/Xfermode.cpp \
 	android/graphics/YuvToJpegEncoder.cpp \
@@ -163,9 +166,8 @@
 	$(TOP)/frameworks/av/include \
 	$(TOP)/system/media/camera/include \
 	external/skia/src/core \
-	external/skia/src/pdf \
+	external/skia/src/effects \
 	external/skia/src/images \
-	external/skia/include/utils \
 	external/sqlite/dist \
 	external/sqlite/android \
 	external/expat/lib \
@@ -177,7 +179,8 @@
 	external/harfbuzz_ng/src \
 	external/zlib \
 	frameworks/opt/emoji \
-	libcore/include
+	libcore/include \
+	$(call include-path-for, audio-utils) \
 
 LOCAL_SHARED_LIBRARIES := \
 	libmemtrack \
@@ -192,6 +195,7 @@
 	libui \
 	libgui \
 	libinput \
+	libinputflinger \
 	libcamera_client \
 	libcamera_metadata \
 	libskia \
@@ -212,12 +216,23 @@
 	libjpeg \
 	libusbhost \
 	libharfbuzz_ng \
-	libz
+	libz \
+	libaudioutils \
 
 ifeq ($(USE_OPENGL_RENDERER),true)
 	LOCAL_SHARED_LIBRARIES += libhwui
 endif
 
+ifeq ($(USE_MINIKIN), true)
+	LOCAL_CFLAGS += -DUSE_MINIKIN
+	LOCAL_C_INCLUDES += frameworks/minikin/include \
+		external/freetype/include
+	LOCAL_SRC_FILES += 	android/graphics/MinikinSkia.cpp
+# note: the freetype include is spurious; minikin itself probably
+# shouldn't depend on it
+	LOCAL_SHARED_LIBRARIES += libminikin libstlport
+endif
+
 LOCAL_SHARED_LIBRARIES += \
 	libdl
 # we need to access the private Bionic header
diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp
index 362a54e..f964cd2 100644
--- a/core/jni/AndroidRuntime.cpp
+++ b/core/jni/AndroidRuntime.cpp
@@ -119,10 +119,13 @@
 extern int register_android_graphics_Xfermode(JNIEnv* env);
 extern int register_android_graphics_pdf_PdfDocument(JNIEnv* env);
 extern int register_android_view_DisplayEventReceiver(JNIEnv* env);
+extern int register_android_view_RenderNode(JNIEnv* env);
+extern int register_android_view_RenderNodeAnimator(JNIEnv* env);
 extern int register_android_view_GraphicBuffer(JNIEnv* env);
-extern int register_android_view_GLES20DisplayList(JNIEnv* env);
 extern int register_android_view_GLES20Canvas(JNIEnv* env);
-extern int register_android_view_HardwareRenderer(JNIEnv* env);
+extern int register_android_view_GLRenderer(JNIEnv* env);
+extern int register_android_view_HardwareLayer(JNIEnv* env);
+extern int register_android_view_ThreadedRenderer(JNIEnv* env);
 extern int register_android_view_Surface(JNIEnv* env);
 extern int register_android_view_SurfaceControl(JNIEnv* env);
 extern int register_android_view_SurfaceSession(JNIEnv* env);
@@ -146,7 +149,6 @@
 extern int register_android_net_LocalSocketImpl(JNIEnv* env);
 extern int register_android_net_NetworkUtils(JNIEnv* env);
 extern int register_android_net_TrafficStats(JNIEnv* env);
-extern int register_android_net_wifi_WifiNative(JNIEnv* env);
 extern int register_android_text_AndroidCharacter(JNIEnv *env);
 extern int register_android_text_AndroidBidi(JNIEnv *env);
 extern int register_android_opengl_classes(JNIEnv *env);
@@ -1099,7 +1101,8 @@
     void** args = (void**) malloc(3 * sizeof(void*));   // javaThreadShell must free
     int result;
 
-    assert(threadName != NULL);
+    if (!threadName)
+        threadName = "unnamed thread";
 
     args[0] = (void*) entryFunction;
     args[1] = userData;
@@ -1187,13 +1190,16 @@
     REG_JNI(register_android_os_SystemProperties),
     REG_JNI(register_android_os_Binder),
     REG_JNI(register_android_os_Parcel),
-    REG_JNI(register_android_view_DisplayEventReceiver),
     REG_JNI(register_android_nio_utils),
     REG_JNI(register_android_graphics_Graphics),
+    REG_JNI(register_android_view_DisplayEventReceiver),
+    REG_JNI(register_android_view_RenderNode),
+    REG_JNI(register_android_view_RenderNodeAnimator),
     REG_JNI(register_android_view_GraphicBuffer),
-    REG_JNI(register_android_view_GLES20DisplayList),
     REG_JNI(register_android_view_GLES20Canvas),
-    REG_JNI(register_android_view_HardwareRenderer),
+    REG_JNI(register_android_view_GLRenderer),
+    REG_JNI(register_android_view_HardwareLayer),
+    REG_JNI(register_android_view_ThreadedRenderer),
     REG_JNI(register_android_view_Surface),
     REG_JNI(register_android_view_SurfaceControl),
     REG_JNI(register_android_view_SurfaceSession),
@@ -1251,7 +1257,6 @@
     REG_JNI(register_android_net_LocalSocketImpl),
     REG_JNI(register_android_net_NetworkUtils),
     REG_JNI(register_android_net_TrafficStats),
-    REG_JNI(register_android_net_wifi_WifiNative),
     REG_JNI(register_android_os_MemoryFile),
     REG_JNI(register_com_android_internal_os_ZygoteInit),
     REG_JNI(register_com_android_internal_os_Zygote),
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp
index d97a945..e0fa9ba4 100644
--- a/core/jni/android/graphics/Bitmap.cpp
+++ b/core/jni/android/graphics/Bitmap.cpp
@@ -329,7 +329,7 @@
     SkBitmap            result;
     JavaPixelAllocator  allocator(env);
 
-    if (!src->copyTo(&result, dstConfig, &allocator)) {
+    if (!src->copyTo(&result, SkBitmapConfigToColorType(dstConfig), &allocator)) {
         return NULL;
     }
     return GraphicsJNI::createBitmap(env, new SkBitmap(result), allocator.getStorageObj(),
@@ -627,7 +627,7 @@
     }
 
     return GraphicsJNI::createBitmap(env, dst, allocator.getStorageObj(),
-            GraphicsJNI::kBitmapCreateFlag_Mutable, NULL, NULL);
+            getPremulBitmapCreateFlags(true), NULL, NULL);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/core/jni/android/graphics/BitmapFactory.cpp b/core/jni/android/graphics/BitmapFactory.cpp
index 2b9a5c4..7aa241a 100644
--- a/core/jni/android/graphics/BitmapFactory.cpp
+++ b/core/jni/android/graphics/BitmapFactory.cpp
@@ -7,6 +7,7 @@
 #include "SkImageDecoder.h"
 #include "SkImageRef_ashmem.h"
 #include "SkImageRef_GlobalPool.h"
+#include "SkMath.h"
 #include "SkPixelRef.h"
 #include "SkStream.h"
 #include "SkTemplates.h"
@@ -146,15 +147,15 @@
     return pr;
 }
 
-static SkBitmap::Config configForScaledOutput(SkBitmap::Config config) {
-    switch (config) {
-        case SkBitmap::kNo_Config:
-        case SkBitmap::kIndex8_Config:
-            return SkBitmap::kARGB_8888_Config;
+static SkColorType colorTypeForScaledOutput(SkColorType colorType) {
+    switch (colorType) {
+        case kUnknown_SkColorType:
+        case kIndex_8_SkColorType:
+            return kNative_8888_SkColorType;
         default:
             break;
     }
-    return config;
+    return colorType;
 }
 
 class ScaleCheckingAllocator : public SkBitmap::HeapAllocator {
@@ -165,8 +166,8 @@
 
     virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
         // accounts for scale in final allocation, using eventual size and config
-        const int bytesPerPixel = SkBitmap::ComputeBytesPerPixel(
-                configForScaledOutput(bitmap->config()));
+        const int bytesPerPixel = SkColorTypeBytesPerPixel(
+                colorTypeForScaledOutput(bitmap->colorType()));
         const int requestedSize = bytesPerPixel *
                 int(bitmap->width() * mScale + 0.5f) *
                 int(bitmap->height() * mScale + 0.5f);
@@ -194,21 +195,28 @@
     }
 
     virtual bool allocPixelRef(SkBitmap* bitmap, SkColorTable* ctable) {
-        if (!bitmap->getSize64().is32() || bitmap->getSize() > mSize) {
-            ALOGW("bitmap marked for reuse (%d bytes) can't fit new bitmap (%d bytes)",
-                    mSize, bitmap->getSize());
+        const SkImageInfo& info = bitmap->info();
+        if (info.fColorType == kUnknown_SkColorType) {
+            ALOGW("unable to reuse a bitmap as the target has an unknown bitmap configuration");
             return false;
         }
 
-        SkImageInfo bitmapInfo;
-        if (!bitmap->asImageInfo(&bitmapInfo)) {
-            ALOGW("unable to reuse a bitmap as the target has an unknown bitmap configuration");
+        const int64_t size64 = info.getSafeSize64(bitmap->rowBytes());
+        if (!sk_64_isS32(size64)) {
+            ALOGW("bitmap is too large");
+            return false;
+        }
+
+        const size_t size = sk_64_asS32(size64);
+        if (size > mSize) {
+            ALOGW("bitmap marked for reuse (%d bytes) can't fit new bitmap (%d bytes)",
+                    mSize, size);
             return false;
         }
 
         // Create a new pixelref with the new ctable that wraps the previous pixelref
         SkPixelRef* pr = new AndroidPixelRef(*static_cast<AndroidPixelRef*>(mPixelRef),
-                bitmapInfo, bitmap->rowBytes(), ctable);
+                info, bitmap->rowBytes(), ctable);
 
         bitmap->setPixelRef(pr)->unref();
         // since we're already allocated, we lockPixels right away
@@ -416,12 +424,12 @@
         const float sy = scaledHeight / float(decodingBitmap.height());
 
         // TODO: avoid copying when scaled size equals decodingBitmap size
-        SkBitmap::Config config = configForScaledOutput(decodingBitmap.config());
+        SkColorType colorType = colorTypeForScaledOutput(decodingBitmap.colorType());
         // FIXME: If the alphaType is kUnpremul and the image has alpha, the
         // colors may not be correct, since Skia does not yet support drawing
         // to/from unpremultiplied bitmaps.
-        outputBitmap->setConfig(config, scaledWidth, scaledHeight, 0,
-                                decodingBitmap.alphaType());
+        outputBitmap->setConfig(SkImageInfo::Make(scaledWidth, scaledHeight,
+                colorType, decodingBitmap.alphaType()));
         if (!outputBitmap->allocPixels(outputAllocator, NULL)) {
             return nullObjectReturn("allocation failed for scaled bitmap");
         }
diff --git a/core/jni/android/graphics/BitmapRegionDecoder.cpp b/core/jni/android/graphics/BitmapRegionDecoder.cpp
index 0d67b07..ead2de3 100644
--- a/core/jni/android/graphics/BitmapRegionDecoder.cpp
+++ b/core/jni/android/graphics/BitmapRegionDecoder.cpp
@@ -62,7 +62,7 @@
     bool decodeRegion(SkBitmap* bitmap, const SkIRect& rect,
                       SkBitmap::Config pref, int sampleSize) {
         fDecoder->setSampleSize(sampleSize);
-        return fDecoder->decodeRegion(bitmap, rect, pref);
+        return fDecoder->decodeSubset(bitmap, rect, pref);
     }
 
     SkImageDecoder* getDecoder() const { return fDecoder; }
@@ -107,7 +107,7 @@
         For now we just always copy the array's data if isShareable.
      */
     AutoJavaByteArray ar(env, byteArray);
-    SkStreamRewindable* stream = new SkMemoryStream(ar.ptr() + offset, length, true);
+    SkMemoryStream* stream = new SkMemoryStream(ar.ptr() + offset, length, true);
 
     jobject brd = createBitmapRegionDecoder(env, stream);
     SkSafeUnref(stream); // the decoder now holds a reference
diff --git a/core/jni/android/graphics/Camera.cpp b/core/jni/android/graphics/Camera.cpp
index 54d448e..ef57e3d 100644
--- a/core/jni/android/graphics/Camera.cpp
+++ b/core/jni/android/graphics/Camera.cpp
@@ -32,39 +32,39 @@
                              jfloat dx, jfloat dy, jfloat dz) {
     jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
     Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
-    v->translate(SkFloatToScalar(dx), SkFloatToScalar(dy), SkFloatToScalar(dz));
+    v->translate(dx, dy, dz);
 }
 
 static void Camera_rotateX(JNIEnv* env, jobject obj, jfloat degrees) {
     jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
     Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
-    v->rotateX(SkFloatToScalar(degrees));
+    v->rotateX(degrees);
 }
 
 static void Camera_rotateY(JNIEnv* env, jobject obj, jfloat degrees) {
     jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
     Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
-    v->rotateY(SkFloatToScalar(degrees));
+    v->rotateY(degrees);
 }
 
 static void Camera_rotateZ(JNIEnv* env, jobject obj, jfloat degrees) {
     jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
     Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
-    v->rotateZ(SkFloatToScalar(degrees));
+    v->rotateZ(degrees);
 }
 
 static void Camera_rotate(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) {
     jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
     Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
-    v->rotateX(SkFloatToScalar(x));
-    v->rotateY(SkFloatToScalar(y));
-    v->rotateZ(SkFloatToScalar(z));
+    v->rotateX(x);
+    v->rotateY(y);
+    v->rotateZ(z);
 }
 
 static void Camera_setLocation(JNIEnv* env, jobject obj, jfloat x, jfloat y, jfloat z) {
     jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
     Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
-    v->setCameraLocation(SkFloatToScalar(x), SkFloatToScalar(y), SkFloatToScalar(z));
+    v->setCameraLocation(x, y, z);
 }
 
 static jfloat Camera_getLocationX(JNIEnv* env, jobject obj) {
@@ -103,8 +103,7 @@
                                   jfloat x, jfloat y, jfloat z) {
     jlong viewHandle = env->GetLongField(obj, gNativeInstanceFieldID);
     Sk3DView* v = reinterpret_cast<Sk3DView*>(viewHandle);
-    SkScalar dot = v->dotWithNormal(SkFloatToScalar(x), SkFloatToScalar(y),
-                                    SkFloatToScalar(z));
+    SkScalar dot = v->dotWithNormal(x, y, z);
     return SkScalarToFloat(dot);
 }
 
diff --git a/core/jni/android/graphics/Canvas.cpp b/core/jni/android/graphics/Canvas.cpp
index f6ab39c..2adbf3a 100644
--- a/core/jni/android/graphics/Canvas.cpp
+++ b/core/jni/android/graphics/Canvas.cpp
@@ -27,8 +27,14 @@
 #include "SkShader.h"
 #include "SkTemplates.h"
 
+#ifdef USE_MINIKIN
+#include <minikin/Layout.h>
+#include "MinikinSkia.h"
+#endif
+
 #include "TextLayout.h"
 #include "TextLayoutCache.h"
+#include "TypefaceImpl.h"
 
 #include "unicode/ubidi.h"
 #include "unicode/ushape.h"
@@ -59,6 +65,9 @@
     virtual void clipRect(const SkRect& rect, SkRegion::Op op, bool antialias) {
         m_dstCanvas->clipRect(rect, op, antialias);
     }
+    virtual void clipRRect(const SkRRect& rrect, SkRegion::Op op, bool antialias) {
+        m_dstCanvas->clipRRect(rrect, op, antialias);
+    }
     virtual void clipPath(const SkPath& path, SkRegion::Op op, bool antialias) {
         m_dstCanvas->clipPath(path, op, antialias);
     }
@@ -67,6 +76,12 @@
     SkCanvas* m_dstCanvas;
 };
 
+// Returns true if the SkCanvas's clip is non-empty.
+static jboolean hasNonEmptyClip(const SkCanvas& canvas) {
+    bool emptyClip = canvas.isClipEmpty();
+    return emptyClip ? JNI_FALSE : JNI_TRUE;
+}
+
 class SkCanvasGlue {
 public:
 
@@ -164,8 +179,7 @@
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint  = reinterpret_cast<SkPaint*>(paintHandle);
         SkRect bounds;
-        bounds.set(SkFloatToScalar(l), SkFloatToScalar(t), SkFloatToScalar(r),
-                   SkFloatToScalar(b));
+        bounds.set(l, t, r, b);
         int result = canvas->saveLayer(&bounds, paint,
                                       static_cast<SkCanvas::SaveFlags>(flags));
         return static_cast<jint>(result);
@@ -190,8 +204,7 @@
                                 jint alpha, jint flags) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkRect  bounds;
-        bounds.set(SkFloatToScalar(l), SkFloatToScalar(t), SkFloatToScalar(r),
-                   SkFloatToScalar(b));
+        bounds.set(l, t, r, b);
         int result = canvas->saveLayerAlpha(&bounds, alpha,
                                       static_cast<SkCanvas::SaveFlags>(flags));
         return static_cast<jint>(result);
@@ -225,29 +238,22 @@
 
     static void translate(JNIEnv* env, jobject jcanvas, jfloat dx, jfloat dy) {
         NPE_CHECK_RETURN_VOID(env, jcanvas);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->translate(dx_, dy_);
+        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->translate(dx, dy);
     }
 
     static void scale__FF(JNIEnv* env, jobject jcanvas, jfloat sx, jfloat sy) {
         NPE_CHECK_RETURN_VOID(env, jcanvas);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->scale(sx_, sy_);
+        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->scale(sx, sy);
     }
 
     static void rotate__F(JNIEnv* env, jobject jcanvas, jfloat degrees) {
         NPE_CHECK_RETURN_VOID(env, jcanvas);
-        SkScalar degrees_ = SkFloatToScalar(degrees);
-        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->rotate(degrees_);
+        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->rotate(degrees);
     }
 
     static void skew__FF(JNIEnv* env, jobject jcanvas, jfloat sx, jfloat sy) {
         NPE_CHECK_RETURN_VOID(env, jcanvas);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->skew(sx_, sy_);
+        (void)GraphicsJNI::getNativeCanvas(env, jcanvas)->skew(sx, sy);
     }
 
     static void concat(JNIEnv* env, jobject, jlong canvasHandle,
@@ -272,11 +278,10 @@
                                   jfloat top, jfloat right, jfloat bottom) {
         NPE_CHECK_RETURN_ZERO(env, jcanvas);
         SkRect  r;
-        r.set(SkFloatToScalar(left), SkFloatToScalar(top),
-              SkFloatToScalar(right), SkFloatToScalar(bottom));
+        r.set(left, top, right, bottom);
         SkCanvas* c = GraphicsJNI::getNativeCanvas(env, jcanvas);
-        bool result = c->clipRect(r);
-        return result ? JNI_TRUE : JNI_FALSE;
+        c->clipRect(r);
+        return hasNonEmptyClip(*c);
     }
 
     static jboolean clipRect_IIII(JNIEnv* env, jobject jcanvas, jint left,
@@ -285,8 +290,9 @@
         SkRect  r;
         r.set(SkIntToScalar(left), SkIntToScalar(top),
               SkIntToScalar(right), SkIntToScalar(bottom));
-        bool result = GraphicsJNI::getNativeCanvas(env, jcanvas)->clipRect(r);
-        return result ? JNI_TRUE : JNI_FALSE;
+        SkCanvas* c = GraphicsJNI::getNativeCanvas(env, jcanvas);
+        c->clipRect(r);
+        return hasNonEmptyClip(*c);
     }
 
     static jboolean clipRect_RectF(JNIEnv* env, jobject jcanvas, jobject rectf) {
@@ -294,8 +300,8 @@
         NPE_CHECK_RETURN_ZERO(env, rectf);
         SkCanvas* c = GraphicsJNI::getNativeCanvas(env, jcanvas);
         SkRect tmp;
-        bool result = c->clipRect(*GraphicsJNI::jrectf_to_rect(env, rectf, &tmp));
-        return result ? JNI_TRUE : JNI_FALSE;
+        c->clipRect(*GraphicsJNI::jrectf_to_rect(env, rectf, &tmp));
+        return hasNonEmptyClip(*c);
     }
 
     static jboolean clipRect_Rect(JNIEnv* env, jobject jcanvas, jobject rect) {
@@ -303,8 +309,8 @@
         NPE_CHECK_RETURN_ZERO(env, rect);
         SkCanvas* c = GraphicsJNI::getNativeCanvas(env, jcanvas);
         SkRect tmp;
-        bool result = c->clipRect(*GraphicsJNI::jrect_to_rect(env, rect, &tmp));
-        return result ? JNI_TRUE : JNI_FALSE;
+        c->clipRect(*GraphicsJNI::jrect_to_rect(env, rect, &tmp));
+        return hasNonEmptyClip(*c);
 
     }
 
@@ -313,27 +319,25 @@
                              jint op) {
         SkRect rect;
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
-        rect.set(SkFloatToScalar(left), SkFloatToScalar(top),
-                 SkFloatToScalar(right), SkFloatToScalar(bottom));
-        bool result = canvas->clipRect(rect, static_cast<SkRegion::Op>(op));
-        return result ? JNI_TRUE : JNI_FALSE;
-
+        rect.set(left, top, right, bottom);
+        canvas->clipRect(rect, static_cast<SkRegion::Op>(op));
+        return hasNonEmptyClip(*canvas);
     }
 
     static jboolean clipPath(JNIEnv* env, jobject, jlong canvasHandle,
                              jlong pathHandle, jint op) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
-        bool result = canvas->clipPath(*reinterpret_cast<SkPath*>(pathHandle),
-                                       static_cast<SkRegion::Op>(op));
-        return result ? JNI_TRUE : JNI_FALSE;
+        canvas->clipPath(*reinterpret_cast<SkPath*>(pathHandle),
+                static_cast<SkRegion::Op>(op));
+        return hasNonEmptyClip(*canvas);
     }
 
     static jboolean clipRegion(JNIEnv* env, jobject, jlong canvasHandle,
                                jlong deviceRgnHandle, jint op) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkRegion* deviceRgn = reinterpret_cast<SkRegion*>(deviceRgnHandle);
-        bool result = canvas->clipRegion(*deviceRgn, static_cast<SkRegion::Op>(op));
-        return result ? JNI_TRUE : JNI_FALSE;
+        canvas->clipRegion(*deviceRgn, static_cast<SkRegion::Op>(op));
+        return hasNonEmptyClip(*canvas);
     }
 
     static void setDrawFilter(JNIEnv* env, jobject, jlong canvasHandle,
@@ -347,7 +351,8 @@
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkRect rect_;
         GraphicsJNI::jrectf_to_rect(env, rect, &rect_);
-        return canvas->quickReject(rect_);
+        bool result = canvas->quickReject(rect_);
+        return result ? JNI_TRUE : JNI_FALSE;
     }
 
     static jboolean quickReject__Path(JNIEnv* env, jobject, jlong canvasHandle,
@@ -362,8 +367,7 @@
                                        jfloat bottom) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkRect r;
-        r.set(SkFloatToScalar(left), SkFloatToScalar(top),
-              SkFloatToScalar(right), SkFloatToScalar(bottom));
+        r.set(left, top, right, bottom);
         bool result = canvas->quickReject(r);
         return result ? JNI_TRUE : JNI_FALSE;
     }
@@ -425,7 +429,7 @@
         SkPoint* pts = storage.get();
         const float* src = floats + offset;
         for (int i = 0; i < count; i++) {
-            pts[i].set(SkFloatToScalar(src[0]), SkFloatToScalar(src[1]));
+            pts[i].set(src[0], src[1]);
             src += 2;
         }
         canvas->drawPoints(mode, count, pts, paint);
@@ -450,7 +454,7 @@
         SkCanvas* canvas = GraphicsJNI::getNativeCanvas(env, jcanvas);
         const SkPaint& paint = *GraphicsJNI::getNativePaint(env, jpaint);
 
-        canvas->drawPoint(SkFloatToScalar(x), SkFloatToScalar(y), paint);
+        canvas->drawPoint(x, y, paint);
     }
 
     static void drawLine__FFFFPaint(JNIEnv* env, jobject, jlong canvasHandle,
@@ -458,9 +462,7 @@
                                     jfloat stopY, jlong paintHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-        canvas->drawLine(SkFloatToScalar(startX), SkFloatToScalar(startY),
-                         SkFloatToScalar(stopX), SkFloatToScalar(stopY),
-                         *paint);
+        canvas->drawLine(startX, startY, stopX, stopY, *paint);
     }
 
     static void drawRect__RectFPaint(JNIEnv* env, jobject, jlong canvasHandle,
@@ -477,11 +479,7 @@
                                     jfloat bottom, jlong paintHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-        SkScalar left_ = SkFloatToScalar(left);
-        SkScalar top_ = SkFloatToScalar(top);
-        SkScalar right_ = SkFloatToScalar(right);
-        SkScalar bottom_ = SkFloatToScalar(bottom);
-        canvas->drawRectCoords(left_, top_, right_, bottom_, *paint);
+        canvas->drawRectCoords(left, top, right, bottom, *paint);
     }
 
     static void drawOval(JNIEnv* env, jobject, jlong canvasHandle, jobject joval,
@@ -497,8 +495,7 @@
                            jfloat cy, jfloat radius, jlong paintHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-        canvas->drawCircle(SkFloatToScalar(cx), SkFloatToScalar(cy),
-                           SkFloatToScalar(radius), *paint);
+        canvas->drawCircle(cx, cy, radius, *paint);
     }
 
     static void drawArc(JNIEnv* env, jobject, jlong canvasHandle, jobject joval,
@@ -508,19 +505,16 @@
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
         SkRect oval;
         GraphicsJNI::jrectf_to_rect(env, joval, &oval);
-        canvas->drawArc(oval, SkFloatToScalar(startAngle),
-                        SkFloatToScalar(sweepAngle), useCenter, *paint);
+        canvas->drawArc(oval, startAngle, sweepAngle, useCenter, *paint);
     }
 
     static void drawRoundRect(JNIEnv* env, jobject, jlong canvasHandle,
-                              jobject jrect, jfloat rx, jfloat ry,
-                              jlong paintHandle) {
+            jfloat left, jfloat top, jfloat right, jfloat bottom, jfloat rx, jfloat ry,
+            jlong paintHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-        SkRect rect;
-        GraphicsJNI::jrectf_to_rect(env, jrect, &rect);
-        canvas->drawRoundRect(rect, SkFloatToScalar(rx), SkFloatToScalar(ry),
-                              *paint);
+        SkRect rect = SkRect::MakeLTRB(left, top, right, bottom);
+        canvas->drawRoundRect(rect, rx, ry, *paint);
     }
 
     static void drawPath(JNIEnv* env, jobject, jlong canvasHandle, jlong pathHandle,
@@ -539,8 +533,6 @@
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-        SkScalar left_ = SkFloatToScalar(left);
-        SkScalar top_ = SkFloatToScalar(top);
 
         if (canvasDensity == bitmapDensity || canvasDensity == 0
                 || bitmapDensity == 0) {
@@ -550,14 +542,14 @@
                     filteredPaint = *paint;
                 }
                 filteredPaint.setFilterLevel(SkPaint::kLow_FilterLevel);
-                canvas->drawBitmap(*bitmap, left_, top_, &filteredPaint);
+                canvas->drawBitmap(*bitmap, left, top, &filteredPaint);
             } else {
-                canvas->drawBitmap(*bitmap, left_, top_, paint);
+                canvas->drawBitmap(*bitmap, left, top, paint);
             }
         } else {
             canvas->save();
-            SkScalar scale = SkFloatToScalar(canvasDensity / (float)bitmapDensity);
-            canvas->translate(left_, top_);
+            SkScalar scale = canvasDensity / (float)bitmapDensity;
+            canvas->translate(left, top);
             canvas->scale(scale, scale);
 
             SkPaint filteredPaint;
@@ -639,8 +631,7 @@
             return;
         }
 
-        canvas->drawBitmap(bitmap, SkFloatToScalar(x), SkFloatToScalar(y),
-                           paint);
+        canvas->drawBitmap(bitmap, x, y, paint);
     }
 
     static void drawBitmapMatrix(JNIEnv* env, jobject, jlong canvasHandle,
@@ -674,9 +665,6 @@
             indices [ptCount * sizeof(uint16_t)]
         */
         ssize_t storageSize = ptCount * sizeof(SkPoint); // texs[]
-#ifdef SK_SCALAR_IS_FIXED
-        storageSize += ptCount * sizeof(SkPoint);  // storage for verts
-#endif
         storageSize += indexCount * sizeof(uint16_t);  // indices[]
 
         SkAutoMalloc storage(storageSize);
@@ -687,16 +675,7 @@
         verts = (SkPoint*)(vertA.ptr() + vertIndex);
         indices = (uint16_t*)(texs + ptCount);
 #else
-        verts = texs + ptCount;
-        indices = (uint16_t*)(verts + ptCount);
-        // convert floats to fixed
-        {
-            const float* src = vertA.ptr() + vertIndex;
-            for (int i = 0; i < ptCount; i++) {
-                verts[i].set(SkFloatToFixed(src[0]), SkFloatToFixed(src[1]));
-                src += 2;
-            }
-        }
+        SkASSERT(false);
 #endif
 
         // cons up texture coordinates and indices
@@ -798,25 +777,7 @@
             texs = (SkPoint*)(texA.ptr() + texIndex);
         }
 #else
-        int count = ptCount;    // for verts
-        if (jtexs != NULL) {
-            count += ptCount;   // += for texs
-        }
-        SkAutoMalloc storage(count * sizeof(SkPoint));
-        verts = (SkPoint*)storage.get();
-        const float* src = vertA.ptr() + vertIndex;
-        for (int i = 0; i < ptCount; i++) {
-            verts[i].set(SkFloatToFixed(src[0]), SkFloatToFixed(src[1]));
-            src += 2;
-        }
-        if (jtexs != NULL) {
-            texs = verts + ptCount;
-            src = texA.ptr() + texIndex;
-            for (int i = 0; i < ptCount; i++) {
-                texs[i].set(SkFloatToFixed(src[0]), SkFloatToFixed(src[1]));
-                src += 2;
-            }
-        }
+        SkASSERT(false);
 #endif
 
         const SkColor* colors = NULL;
@@ -833,39 +794,89 @@
     }
 
 
-    static void drawText___CIIFFIPaint(JNIEnv* env, jobject, jlong canvasHandle,
-                                      jcharArray text, jint index, jint count,
-                                      jfloat x, jfloat y, jint flags, jlong paintHandle) {
+    static void drawText___CIIFFIPaintTypeface(JNIEnv* env, jobject, jlong canvasHandle,
+                                               jcharArray text, jint index, jint count,
+                                               jfloat x, jfloat y, jint flags,
+                                               jlong paintHandle, jlong typefaceHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        TypefaceImpl* typeface = reinterpret_cast<TypefaceImpl*>(typefaceHandle);
         jchar* textArray = env->GetCharArrayElements(text, NULL);
-        drawTextWithGlyphs(canvas, textArray + index, 0, count, x, y, flags, paint);
+        drawTextWithGlyphs(canvas, textArray + index, 0, count, x, y, flags, paint, typeface);
         env->ReleaseCharArrayElements(text, textArray, JNI_ABORT);
     }
 
-    static void drawText__StringIIFFIPaint(JNIEnv* env, jobject,
-                                          jlong canvasHandle, jstring text,
-                                          jint start, jint end,
-                                          jfloat x, jfloat y, jint flags, jlong paintHandle) {
+    static void drawText__StringIIFFIPaintTypeface(JNIEnv* env, jobject,
+                                                   jlong canvasHandle, jstring text,
+                                                   jint start, jint end,
+                                                   jfloat x, jfloat y, jint flags,
+                                                   jlong paintHandle, jlong typefaceHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        TypefaceImpl* typeface = reinterpret_cast<TypefaceImpl*>(typefaceHandle);
         const jchar* textArray = env->GetStringChars(text, NULL);
-        drawTextWithGlyphs(canvas, textArray, start, end, x, y, flags, paint);
+        drawTextWithGlyphs(canvas, textArray, start, end, x, y, flags, paint, typeface);
         env->ReleaseStringChars(text, textArray);
     }
 
+#ifdef USE_MINIKIN
+    static void drawGlyphsToSkia(SkCanvas *canvas, SkPaint *paint, Layout *layout, float x, float y) {
+        size_t nGlyphs = layout->nGlyphs();
+        uint16_t *glyphs = new uint16_t[nGlyphs];
+        SkPoint *pos = new SkPoint[nGlyphs];
+        SkTypeface *lastFace = NULL;
+        SkTypeface *skFace = NULL;
+        size_t start = 0;
+
+        paint->setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+        for (size_t i = 0; i < nGlyphs; i++) {
+            MinikinFontSkia *mfs = static_cast<MinikinFontSkia *>(layout->getFont(i));
+            skFace = mfs->GetSkTypeface();
+            glyphs[i] = layout->getGlyphId(i);
+            pos[i].fX = x + layout->getX(i);
+            pos[i].fY = y + layout->getY(i);
+            if (i > 0 && skFace != lastFace) {
+                paint->setTypeface(lastFace);
+                canvas->drawPosText(glyphs + start, (i - start) << 1, pos + start, *paint);
+                start = i;
+            }
+            lastFace = skFace;
+        }
+        if (skFace != NULL) {
+            paint->setTypeface(skFace);
+            canvas->drawPosText(glyphs + start, (nGlyphs - start) << 1, pos + start, *paint);
+        }
+        delete[] glyphs;
+        delete[] pos;
+    }
+#endif
+
     static void drawTextWithGlyphs(SkCanvas* canvas, const jchar* textArray,
             int start, int end,
-            jfloat x, jfloat y, int flags, SkPaint* paint) {
+            jfloat x, jfloat y, int flags, SkPaint* paint, TypefaceImpl* typeface) {
 
         jint count = end - start;
-        drawTextWithGlyphs(canvas, textArray + start, 0, count, count, x, y, flags, paint);
+        drawTextWithGlyphs(canvas, textArray + start, 0, count, count, x, y, flags, paint, typeface);
     }
 
     static void drawTextWithGlyphs(SkCanvas* canvas, const jchar* textArray,
             int start, int count, int contextCount,
-            jfloat x, jfloat y, int flags, SkPaint* paint) {
+            jfloat x, jfloat y, int flags, SkPaint* paint, TypefaceImpl* typeface) {
 
+#ifdef USE_MINIKIN
+        Layout layout;
+        TypefaceImpl* resolvedFace = TypefaceImpl_resolveDefault(typeface);
+        layout.setFontCollection(resolvedFace->fFontCollection);
+        FontStyle style = resolvedFace->fStyle;
+        char css[256];
+        sprintf(css, "font-size: %d; font-weight: %d; font-style: %s",
+            (int)paint->getTextSize(),
+            style.getWeight() * 100,
+            style.getItalic() ? "italic" : "normal");
+        layout.setProperties(css);
+        layout.doLayout(textArray + start, count);
+        drawGlyphsToSkia(canvas, paint, &layout, x, y);
+#else
         sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
                 textArray, start, count, contextCount, flags);
         if (value == NULL) {
@@ -881,6 +892,7 @@
         doDrawGlyphsPos(canvas, value->getGlyphs(), value->getPos(), 0, value->getGlyphsCount(), x, y, flags, paint);
         doDrawTextDecorations(canvas, x, y, value->getTotalAdvance(), paint);
         paint->setTextAlign(align);
+#endif
     }
 
 // Same values used by Skia
@@ -899,22 +911,18 @@
         flags = paint->getFlags();
     }
     if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) {
-        SkScalar left = SkFloatToScalar(x);
-        SkScalar right = SkFloatToScalar(x + length);
+        SkScalar left = x;
+        SkScalar right = x + length;
         float textSize = paint->getTextSize();
         float strokeWidth = fmax(textSize * kStdUnderline_Thickness, 1.0f);
         if (flags & SkPaint::kUnderlineText_Flag) {
-            SkScalar top = SkFloatToScalar(y + textSize * kStdUnderline_Offset
-                    - 0.5f * strokeWidth);
-            SkScalar bottom = SkFloatToScalar(y + textSize * kStdUnderline_Offset
-                    + 0.5f * strokeWidth);
+            SkScalar top = y + textSize * kStdUnderline_Offset - 0.5f * strokeWidth;
+            SkScalar bottom = y + textSize * kStdUnderline_Offset + 0.5f * strokeWidth;
             canvas->drawRectCoords(left, top, right, bottom, *paint);
         }
         if (flags & SkPaint::kStrikeThruText_Flag) {
-            SkScalar top = SkFloatToScalar(y + textSize * kStdStrikeThru_Offset
-                    - 0.5f * strokeWidth);
-            SkScalar bottom = SkFloatToScalar(y + textSize * kStdStrikeThru_Offset
-                    + 0.5f * strokeWidth);
+            SkScalar top = y + textSize * kStdStrikeThru_Offset - 0.5f * strokeWidth;
+            SkScalar bottom = y + textSize * kStdStrikeThru_Offset + 0.5f * strokeWidth;
             canvas->drawRectCoords(left, top, right, bottom, *paint);
         }
     }
@@ -930,38 +938,40 @@
             int index, int count, jfloat x, jfloat y, int flags, SkPaint* paint) {
         SkPoint* posPtr = new SkPoint[count];
         for (int indx = 0; indx < count; indx++) {
-            posPtr[indx].fX = SkFloatToScalar(x + posArray[indx * 2]);
-            posPtr[indx].fY = SkFloatToScalar(y + posArray[indx * 2 + 1]);
+            posPtr[indx].fX = x + posArray[indx * 2];
+            posPtr[indx].fY = y + posArray[indx * 2 + 1];
         }
         canvas->drawPosText(glyphArray, count << 1, posPtr, *paint);
         delete[] posPtr;
     }
 
-    static void drawTextRun___CIIIIFFIPaint(
+    static void drawTextRun___CIIIIFFIPaintTypeface(
         JNIEnv* env, jobject, jlong canvasHandle, jcharArray text, jint index,
         jint count, jint contextIndex, jint contextCount,
-        jfloat x, jfloat y, jint dirFlags, jlong paintHandle) {
+        jfloat x, jfloat y, jint dirFlags, jlong paintHandle, jlong typefaceHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        TypefaceImpl* typeface = reinterpret_cast<TypefaceImpl*>(typefaceHandle);
 
         jchar* chars = env->GetCharArrayElements(text, NULL);
         drawTextWithGlyphs(canvas, chars + contextIndex, index - contextIndex,
-                count, contextCount, x, y, dirFlags, paint);
+                count, contextCount, x, y, dirFlags, paint, typeface);
         env->ReleaseCharArrayElements(text, chars, JNI_ABORT);
     }
 
-    static void drawTextRun__StringIIIIFFIPaint(
+    static void drawTextRun__StringIIIIFFIPaintTypeface(
         JNIEnv* env, jobject obj, jlong canvasHandle, jstring text, jint start,
         jint end, jint contextStart, jint contextEnd,
-        jfloat x, jfloat y, jint dirFlags, jlong paintHandle) {
+        jfloat x, jfloat y, jint dirFlags, jlong paintHandle, jlong typefaceHandle) {
         SkCanvas* canvas = reinterpret_cast<SkCanvas*>(canvasHandle);
         SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        TypefaceImpl* typeface = reinterpret_cast<TypefaceImpl*>(typefaceHandle);
 
         jint count = end - start;
         jint contextCount = contextEnd - contextStart;
         const jchar* chars = env->GetStringChars(text, NULL);
         drawTextWithGlyphs(canvas, chars + contextStart, start - contextStart,
-                count, contextCount, x, y, dirFlags, paint);
+                count, contextCount, x, y, dirFlags, paint, typeface);
         env->ReleaseStringChars(text, chars);
     }
 
@@ -977,8 +987,8 @@
         SkPoint* posPtr = posCount > 0 ? new SkPoint[posCount] : NULL;
         int indx;
         for (indx = 0; indx < posCount; indx++) {
-            posPtr[indx].fX = SkFloatToScalar(posArray[indx << 1]);
-            posPtr[indx].fY = SkFloatToScalar(posArray[(indx << 1) + 1]);
+            posPtr[indx].fX = posArray[indx << 1];
+            posPtr[indx].fY = posArray[(indx << 1) + 1];
         }
 
         SkPaint::TextEncoding encoding = paint->getTextEncoding();
@@ -1008,8 +1018,8 @@
         SkPoint* posPtr = posCount > 0 ? new SkPoint[posCount] : NULL;
 
         for (int indx = 0; indx < posCount; indx++) {
-            posPtr[indx].fX = SkFloatToScalar(posArray[indx << 1]);
-            posPtr[indx].fY = SkFloatToScalar(posArray[(indx << 1) + 1]);
+            posPtr[indx].fX = posArray[indx << 1];
+            posPtr[indx].fY = posArray[(indx << 1) + 1];
         }
 
         SkPaint::TextEncoding encoding = paint->getTextEncoding();
@@ -1165,7 +1175,7 @@
     {"native_drawCircle","(JFFFJ)V", (void*) SkCanvasGlue::drawCircle},
     {"native_drawArc","(JLandroid/graphics/RectF;FFZJ)V",
         (void*) SkCanvasGlue::drawArc},
-    {"native_drawRoundRect","(JLandroid/graphics/RectF;FFJ)V",
+    {"native_drawRoundRect","(JFFFFFFJ)V",
         (void*) SkCanvasGlue::drawRoundRect},
     {"native_drawPath","(JJJ)V", (void*) SkCanvasGlue::drawPath},
     {"native_drawBitmap","(JJFFJIII)V",
@@ -1182,14 +1192,14 @@
         (void*)SkCanvasGlue::drawBitmapMesh},
     {"nativeDrawVertices", "(JII[FI[FI[II[SIIJ)V",
         (void*)SkCanvasGlue::drawVertices},
-    {"native_drawText","(J[CIIFFIJ)V",
-        (void*) SkCanvasGlue::drawText___CIIFFIPaint},
-    {"native_drawText","(JLjava/lang/String;IIFFIJ)V",
-        (void*) SkCanvasGlue::drawText__StringIIFFIPaint},
-    {"native_drawTextRun","(J[CIIIIFFIJ)V",
-        (void*) SkCanvasGlue::drawTextRun___CIIIIFFIPaint},
-    {"native_drawTextRun","(JLjava/lang/String;IIIIFFIJ)V",
-        (void*) SkCanvasGlue::drawTextRun__StringIIIIFFIPaint},
+    {"native_drawText","(J[CIIFFIJJ)V",
+        (void*) SkCanvasGlue::drawText___CIIFFIPaintTypeface},
+    {"native_drawText","(JLjava/lang/String;IIFFIJJ)V",
+        (void*) SkCanvasGlue::drawText__StringIIFFIPaintTypeface},
+    {"native_drawTextRun","(J[CIIIIFFIJJ)V",
+        (void*) SkCanvasGlue::drawTextRun___CIIIIFFIPaintTypeface},
+    {"native_drawTextRun","(JLjava/lang/String;IIIIFFIJJ)V",
+        (void*) SkCanvasGlue::drawTextRun__StringIIIIFFIPaintTypeface},
     {"native_drawPosText","(J[CII[FJ)V",
         (void*) SkCanvasGlue::drawPosText___CII_FPaint},
     {"native_drawPosText","(JLjava/lang/String;[FJ)V",
diff --git a/core/jni/android/graphics/ColorFilter.cpp b/core/jni/android/graphics/ColorFilter.cpp
index f9cefd6..c66c844 100644
--- a/core/jni/android/graphics/ColorFilter.cpp
+++ b/core/jni/android/graphics/ColorFilter.cpp
@@ -23,7 +23,6 @@
 #include "SkColorMatrixFilter.h"
 #include "SkPorterDuff.h"
 
-#include <SkiaColorFilter.h>
 #include <Caches.h>
 
 namespace android {
@@ -32,64 +31,9 @@
 
 class SkColorFilterGlue {
 public:
-    static void finalizer(JNIEnv* env, jobject clazz, jlong objHandle, jlong fHandle) {
-        SkColorFilter* obj = reinterpret_cast<SkColorFilter *>(objHandle);
-        SkiaColorFilter* f = reinterpret_cast<SkiaColorFilter *>(fHandle);
-        SkSafeUnref(obj);
-        // f == NULL when not !USE_OPENGL_RENDERER, so no need to delete outside the ifdef
-#ifdef USE_OPENGL_RENDERER
-        if (android::uirenderer::Caches::hasInstance()) {
-            android::uirenderer::Caches::getInstance().resourceCache.destructor(f);
-        } else {
-            delete f;
-        }
-#endif
-    }
-
-    static jlong glCreatePorterDuffFilter(JNIEnv* env, jobject, jlong skFilterHandle,
-            jint srcColor, jint modeHandle) {
-        SkColorFilter *skFilter = reinterpret_cast<SkColorFilter *>(skFilterHandle);
-        SkPorterDuff::Mode mode = static_cast<SkPorterDuff::Mode>(modeHandle);
-#ifdef USE_OPENGL_RENDERER
-        return reinterpret_cast<jlong>(new SkiaBlendFilter(skFilter, srcColor, SkPorterDuff::ToXfermodeMode(mode)));
-#else
-        return NULL;
-#endif
-    }
-
-    static jlong glCreateLightingFilter(JNIEnv* env, jobject, jlong skFilterHandle,
-            jint mul, jint add) {
-        SkColorFilter *skFilter = reinterpret_cast<SkColorFilter *>(skFilterHandle);
-#ifdef USE_OPENGL_RENDERER
-        return reinterpret_cast<jlong>(new SkiaLightingFilter(skFilter, mul, add));
-#else
-        return NULL;
-#endif
-    }
-
-    static jlong glCreateColorMatrixFilter(JNIEnv* env, jobject, jlong skFilterHandle,
-            jfloatArray jarray) {
-        SkColorFilter *skFilter = reinterpret_cast<SkColorFilter *>(skFilterHandle);
-#ifdef USE_OPENGL_RENDERER
-        AutoJavaFloatArray autoArray(env, jarray, 20);
-        const float* src = autoArray.ptr();
-
-        float* colorMatrix = new float[16];
-        memcpy(colorMatrix, src, 4 * sizeof(float));
-        memcpy(&colorMatrix[4], &src[5], 4 * sizeof(float));
-        memcpy(&colorMatrix[8], &src[10], 4 * sizeof(float));
-        memcpy(&colorMatrix[12], &src[15], 4 * sizeof(float));
-
-        float* colorVector = new float[4];
-        colorVector[0] = src[4];
-        colorVector[1] = src[9];
-        colorVector[2] = src[14];
-        colorVector[3] = src[19];
-
-        return reinterpret_cast<jlong>(new SkiaColorMatrixFilter(skFilter, colorMatrix, colorVector));
-#else
-        return NULL;
-#endif
+    static void finalizer(JNIEnv* env, jobject clazz, jlong skFilterHandle) {
+        SkColorFilter* filter = reinterpret_cast<SkColorFilter *>(skFilterHandle);
+        if (filter) SkSafeUnref(filter);
     }
 
     static jlong CreatePorterDuffFilter(JNIEnv* env, jobject, jint srcColor,
@@ -106,35 +50,28 @@
         AutoJavaFloatArray autoArray(env, jarray, 20);
         const float* src = autoArray.ptr();
 
-#ifdef SK_SCALAR_IS_FIXED
-        SkFixed array[20];
-        for (int i = 0; i < 20; i++) {
-            array[i] = SkFloatToScalar(src[i]);
-        }
-        return reinterpret_cast<jlong>(new SkColorMatrixFilter(array));
+#ifdef SK_SCALAR_IS_FLOAT
+        return reinterpret_cast<jlong>(SkColorMatrixFilter::Create(src));
 #else
-        return reinterpret_cast<jlong>(new SkColorMatrixFilter(src));
+        SkASSERT(false);
 #endif
     }
 };
 
 static JNINativeMethod colorfilter_methods[] = {
-    {"finalizer", "(JJ)V", (void*) SkColorFilterGlue::finalizer}
+    {"destroyFilter", "(J)V", (void*) SkColorFilterGlue::finalizer}
 };
 
 static JNINativeMethod porterduff_methods[] = {
     { "native_CreatePorterDuffFilter", "(II)J", (void*) SkColorFilterGlue::CreatePorterDuffFilter   },
-    { "nCreatePorterDuffFilter",       "(JII)J", (void*) SkColorFilterGlue::glCreatePorterDuffFilter }
 };
 
 static JNINativeMethod lighting_methods[] = {
     { "native_CreateLightingFilter", "(II)J", (void*) SkColorFilterGlue::CreateLightingFilter   },
-    { "nCreateLightingFilter",       "(JII)J", (void*) SkColorFilterGlue::glCreateLightingFilter },
 };
 
 static JNINativeMethod colormatrix_methods[] = {
     { "nativeColorMatrixFilter", "([F)J", (void*) SkColorFilterGlue::CreateColorMatrixFilter   },
-    { "nColorMatrixFilter",      "(J[F)J", (void*) SkColorFilterGlue::glCreateColorMatrixFilter }
 };
 
 #define REG(env, name, array) \
diff --git a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp
index 2cb1015..b64ab0d 100644
--- a/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp
+++ b/core/jni/android/graphics/CreateJavaOutputStreamAdaptor.cpp
@@ -175,10 +175,14 @@
 class SkJavaOutputStream : public SkWStream {
 public:
     SkJavaOutputStream(JNIEnv* env, jobject stream, jbyteArray storage)
-        : fEnv(env), fJavaOutputStream(stream), fJavaByteArray(storage) {
+        : fEnv(env), fJavaOutputStream(stream), fJavaByteArray(storage), fBytesWritten(0) {
         fCapacity = env->GetArrayLength(storage);
     }
 
+    virtual size_t bytesWritten() const {
+        return fBytesWritten;
+    }
+
     virtual bool write(const void* buffer, size_t size) {
         JNIEnv* env = fEnv;
         jbyteArray storage = fJavaByteArray;
@@ -213,6 +217,7 @@
 
             buffer = (void*)((char*)buffer + requested);
             size -= requested;
+            fBytesWritten += requested;
         }
         return true;
     }
@@ -226,6 +231,7 @@
     jobject     fJavaOutputStream;  // the caller owns this object
     jbyteArray  fJavaByteArray;     // the caller owns this object
     jint        fCapacity;
+    size_t      fBytesWritten;
 };
 
 SkWStream* CreateJavaOutputStreamAdaptor(JNIEnv* env, jobject stream,
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index 5d951ca..e4c74b2 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -6,6 +6,7 @@
 
 #include "SkCanvas.h"
 #include "SkDevice.h"
+#include "SkMath.h"
 #include "SkPicture.h"
 #include "SkRegion.h"
 #include <android_runtime/AndroidRuntime.h>
@@ -227,10 +228,10 @@
 {
     SkASSERT(env->IsInstanceOf(obj, gRectF_class));
 
-    r->set(SkFloatToScalar(env->GetFloatField(obj, gRectF_leftFieldID)),
-           SkFloatToScalar(env->GetFloatField(obj, gRectF_topFieldID)),
-           SkFloatToScalar(env->GetFloatField(obj, gRectF_rightFieldID)),
-           SkFloatToScalar(env->GetFloatField(obj, gRectF_bottomFieldID)));
+    r->set(env->GetFloatField(obj, gRectF_leftFieldID),
+           env->GetFloatField(obj, gRectF_topFieldID),
+           env->GetFloatField(obj, gRectF_rightFieldID),
+           env->GetFloatField(obj, gRectF_bottomFieldID));
     return r;
 }
 
@@ -276,8 +277,8 @@
 {
     SkASSERT(env->IsInstanceOf(obj, gPointF_class));
 
-    point->set(SkFloatToScalar(env->GetIntField(obj, gPointF_xFieldID)),
-               SkFloatToScalar(env->GetIntField(obj, gPointF_yFieldID)));
+    point->set(env->GetIntField(obj, gPointF_xFieldID),
+               env->GetIntField(obj, gPointF_yFieldID));
     return point;
 }
 
@@ -461,6 +462,7 @@
 
     // If storageObj is NULL, the memory was NOT allocated on the Java heap
     fOnJavaHeap = (storageObj != NULL);
+
 }
 
 AndroidPixelRef::AndroidPixelRef(AndroidPixelRef& wrappedPixelRef, const SkImageInfo& info,
@@ -563,21 +565,20 @@
 
 jbyteArray GraphicsJNI::allocateJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,
                                              SkColorTable* ctable) {
-    Sk64 size64 = bitmap->getSize64();
-    if (size64.isNeg() || !size64.is32()) {
-        jniThrowException(env, "java/lang/IllegalArgumentException",
-                          "bitmap size exceeds 32bits");
+    const SkImageInfo& info = bitmap->info();
+    if (info.fColorType == kUnknown_SkColorType) {
+        doThrowIAE(env, "unknown bitmap configuration");
         return NULL;
     }
 
-    SkImageInfo bitmapInfo;
-    if (!bitmap->asImageInfo(&bitmapInfo)) {
-        jniThrowException(env, "java/lang/IllegalArgumentException",
-                "unknown bitmap configuration");
+    const int64_t size64 = info.getSafeSize64(bitmap->rowBytes());
+    if (!sk_64_isS32(size64)) {
+        doThrowIAE(env, "bitmap size exceeds 32bits");
         return NULL;
     }
+    const size_t size = sk_64_asS32(size64);
+    SkASSERT(size == info.getSafeSize(bitmap->rowBytes()));
 
-    size_t size = size64.get32();
     jbyteArray arrayObj = (jbyteArray) env->CallObjectMethod(gVMRuntime,
                                                              gVMRuntime_newNonMovableArray,
                                                              gByte_class, size);
@@ -590,7 +591,7 @@
         return NULL;
     }
     SkASSERT(addr);
-    SkPixelRef* pr = new AndroidPixelRef(env, bitmapInfo, (void*) addr,
+    SkPixelRef* pr = new AndroidPixelRef(env, info, (void*) addr,
             bitmap->rowBytes(), arrayObj, ctable);
     bitmap->setPixelRef(pr)->unref();
     // since we're already allocated, we lockPixels right away
diff --git a/core/jni/android/graphics/Interpolator.cpp b/core/jni/android/graphics/Interpolator.cpp
index ca04dfe..455f867 100644
--- a/core/jni/android/graphics/Interpolator.cpp
+++ b/core/jni/android/graphics/Interpolator.cpp
@@ -25,26 +25,15 @@
 static void Interpolator_setKeyFrame(JNIEnv* env, jobject clazz, jlong interpHandle, jint index, jint msec, jfloatArray valueArray, jfloatArray blendArray)
 {
     SkInterpolator* interp = reinterpret_cast<SkInterpolator*>(interpHandle);
-    SkScalar    blendStorage[4];
-    SkScalar*   blend = NULL;
 
-    AutoJavaFloatArray  autoValues(env, valueArray);
-    float* values = autoValues.ptr();
-    int i, n = autoValues.length();
-
-    SkAutoSTMalloc<16, SkScalar>  storage(n);
-    SkScalar*                     scalars = storage.get();
-
-    for (i = 0; i < n; i++)
-        scalars[i] = SkFloatToScalar(values[i]);
-
-    if (blendArray != NULL) {
-        AutoJavaFloatArray autoBlend(env, blendArray, 4);
-        values = autoBlend.ptr();
-        for (i = 0; i < 4; i++)
-            blendStorage[i] = SkFloatToScalar(values[i]);
-        blend = blendStorage;
-    }
+    AutoJavaFloatArray autoValues(env, valueArray);
+    AutoJavaFloatArray autoBlend(env, blendArray, 4);
+#ifdef SK_SCALAR_IS_FLOAT
+    SkScalar* scalars = autoValues.ptr();
+    SkScalar* blend = autoBlend.ptr();
+#else
+    #error Need to convert float array to SkScalar array before calling the following function.
+#endif
 
     interp->setKeyFrame(index, msec, scalars, blend);
 }
@@ -55,7 +44,7 @@
     if (repeatCount > 32000)
         repeatCount = 32000;
 
-    interp->setRepeatCount(SkFloatToScalar(repeatCount));
+    interp->setRepeatCount(repeatCount);
     interp->setMirror(mirror != 0);
 }
 
diff --git a/core/jni/android/graphics/LayerRasterizer.cpp b/core/jni/android/graphics/LayerRasterizer.cpp
index 29e7db1..79dc275 100644
--- a/core/jni/android/graphics/LayerRasterizer.cpp
+++ b/core/jni/android/graphics/LayerRasterizer.cpp
@@ -12,7 +12,7 @@
         const SkPaint* paint = reinterpret_cast<SkPaint *>(paintHandle);
         SkASSERT(layer);
         SkASSERT(paint);
-        layer->addLayer(*paint, SkFloatToScalar(dx), SkFloatToScalar(dy));
+        layer->addLayer(*paint, dx, dy);
     }
 };
 
diff --git a/core/jni/android/graphics/MaskFilter.cpp b/core/jni/android/graphics/MaskFilter.cpp
index f331af7..2113330 100644
--- a/core/jni/android/graphics/MaskFilter.cpp
+++ b/core/jni/android/graphics/MaskFilter.cpp
@@ -1,5 +1,6 @@
 #include "GraphicsJNI.h"
 #include "SkMaskFilter.h"
+#include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
 #include "SkTableMaskFilter.h"
 
@@ -19,8 +20,9 @@
     }
 
     static jlong createBlur(JNIEnv* env, jobject, jfloat radius, jint blurStyle) {
-        SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius),
-                                        (SkBlurMaskFilter::BlurStyle)blurStyle);
+        SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(radius);
+        SkMaskFilter* filter = SkBlurMaskFilter::Create(
+                (SkBlurMaskFilter::BlurStyle)blurStyle, sigma);
         ThrowIAE_IfNull(env, filter);
         return reinterpret_cast<jlong>(filter);
     }
@@ -31,20 +33,19 @@
         AutoJavaFloatArray autoDir(env, dirArray, 3);
         float* values = autoDir.ptr();
         for (int i = 0; i < 3; i++) {
-            direction[i] = SkFloatToScalar(values[i]);
+            direction[i] = values[i];
         }
 
-        SkMaskFilter* filter =  SkBlurMaskFilter::CreateEmboss(direction,
-                                                      SkFloatToScalar(ambient),
-                                                      SkFloatToScalar(specular),
-                                                      SkFloatToScalar(radius));
+        SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(radius);
+        SkMaskFilter* filter =  SkBlurMaskFilter::CreateEmboss(sigma,
+                direction, ambient, specular);
         ThrowIAE_IfNull(env, filter);
         return reinterpret_cast<jlong>(filter);
     }
 
     static jlong createTable(JNIEnv* env, jobject, jbyteArray jtable) {
         AutoJavaByteArray autoTable(env, jtable, 256);
-        SkMaskFilter* filter = new SkTableMaskFilter((const uint8_t*)autoTable.ptr());
+        SkMaskFilter* filter = SkTableMaskFilter::Create((const uint8_t*)autoTable.ptr());
         return reinterpret_cast<jlong>(filter);
     }
 
diff --git a/core/jni/android/graphics/Matrix.cpp b/core/jni/android/graphics/Matrix.cpp
index a667499..23af860 100644
--- a/core/jni/android/graphics/Matrix.cpp
+++ b/core/jni/android/graphics/Matrix.cpp
@@ -65,187 +65,127 @@
     }
      static void setTranslate(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        obj->setTranslate(dx_, dy_);
+        obj->setTranslate(dx, dy);
     }
      static void setScale__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        obj->setScale(sx_, sy_, px_, py_);
+        obj->setScale(sx, sy, px, py);
     }
      static void setScale__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        obj->setScale(sx_, sy_);
+        obj->setScale(sx, sy);
     }
      static void setRotate__FFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar degrees_ = SkFloatToScalar(degrees);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        obj->setRotate(degrees_, px_, py_);
+        obj->setRotate(degrees, px, py);
     }
      static void setRotate__F(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar degrees_ = SkFloatToScalar(degrees);
-        obj->setRotate(degrees_);
+        obj->setRotate(degrees);
     }
      static void setSinCos__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sinValue, jfloat cosValue, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sinValue_ = SkFloatToScalar(sinValue);
-        SkScalar cosValue_ = SkFloatToScalar(cosValue);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        obj->setSinCos(sinValue_, cosValue_, px_, py_);
+        obj->setSinCos(sinValue, cosValue, px, py);
     }
      static void setSinCos__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sinValue, jfloat cosValue) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sinValue_ = SkFloatToScalar(sinValue);
-        SkScalar cosValue_ = SkFloatToScalar(cosValue);
-        obj->setSinCos(sinValue_, cosValue_);
+        obj->setSinCos(sinValue, cosValue);
     }
      static void setSkew__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar kx_ = SkFloatToScalar(kx);
-        SkScalar ky_ = SkFloatToScalar(ky);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        obj->setSkew(kx_, ky_, px_, py_);
+        obj->setSkew(kx, ky, px, py);
     }
      static void setSkew__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar kx_ = SkFloatToScalar(kx);
-        SkScalar ky_ = SkFloatToScalar(ky);
-        obj->setSkew(kx_, ky_);
+        obj->setSkew(kx, ky);
     }
-     static jboolean setConcat(JNIEnv* env, jobject clazz, jlong objHandle, jlong aHandle, jlong bHandle) {
+     static void setConcat(JNIEnv* env, jobject clazz, jlong objHandle, jlong aHandle, jlong bHandle) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
         SkMatrix* a = reinterpret_cast<SkMatrix*>(aHandle);
         SkMatrix* b = reinterpret_cast<SkMatrix*>(bHandle);
-        return obj->setConcat(*a, *b) ? JNI_TRUE : JNI_FALSE;
+        obj->setConcat(*a, *b);
     }
 
-    static jboolean preTranslate(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
+    static void preTranslate(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        return obj->preTranslate(dx_, dy_) ? JNI_TRUE : JNI_FALSE;
+        obj->preTranslate(dx, dy);
     }
 
-    static jboolean preScale__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy, jfloat px, jfloat py) {
+    static void preScale__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        return obj->preScale(sx_, sy_, px_, py_) ? JNI_TRUE : JNI_FALSE;
+        obj->preScale(sx, sy, px, py);
     }
 
-    static jboolean preScale__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy) {
+    static void preScale__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        return obj->preScale(sx_, sy_) ? JNI_TRUE : JNI_FALSE;
+        obj->preScale(sx, sy);
     }
 
-    static jboolean preRotate__FFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees, jfloat px, jfloat py) {
+    static void preRotate__FFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar degrees_ = SkFloatToScalar(degrees);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        return obj->preRotate(degrees_, px_, py_) ? JNI_TRUE : JNI_FALSE;
+        obj->preRotate(degrees, px, py);
     }
 
-    static jboolean preRotate__F(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees) {
+    static void preRotate__F(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar degrees_ = SkFloatToScalar(degrees);
-        return obj->preRotate(degrees_) ? JNI_TRUE : JNI_FALSE;
+        obj->preRotate(degrees);
     }
 
-    static jboolean preSkew__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky, jfloat px, jfloat py) {
+    static void preSkew__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar kx_ = SkFloatToScalar(kx);
-        SkScalar ky_ = SkFloatToScalar(ky);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        return obj->preSkew(kx_, ky_, px_, py_) ? JNI_TRUE : JNI_FALSE;
+        obj->preSkew(kx, ky, px, py);
     }
 
-    static jboolean preSkew__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky) {
+    static void preSkew__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar kx_ = SkFloatToScalar(kx);
-        SkScalar ky_ = SkFloatToScalar(ky);
-        return obj->preSkew(kx_, ky_) ? JNI_TRUE : JNI_FALSE;
+        obj->preSkew(kx, ky);
     }
 
-    static jboolean preConcat(JNIEnv* env, jobject clazz, jlong objHandle, jlong otherHandle) {
+    static void preConcat(JNIEnv* env, jobject clazz, jlong objHandle, jlong otherHandle) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
         SkMatrix* other = reinterpret_cast<SkMatrix*>(otherHandle);
-        return obj->preConcat(*other) ? JNI_TRUE : JNI_FALSE;
+        obj->preConcat(*other);
     }
 
-    static jboolean postTranslate(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
+    static void postTranslate(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        return obj->postTranslate(dx_, dy_) ? JNI_TRUE : JNI_FALSE;
+        obj->postTranslate(dx, dy);
     }
 
-    static jboolean postScale__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy, jfloat px, jfloat py) {
+    static void postScale__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        return obj->postScale(sx_, sy_, px_, py_) ? JNI_TRUE : JNI_FALSE;
+        obj->postScale(sx, sy, px, py);
     }
 
-    static jboolean postScale__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy) {
+    static void postScale__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat sx, jfloat sy) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar sx_ = SkFloatToScalar(sx);
-        SkScalar sy_ = SkFloatToScalar(sy);
-        return obj->postScale(sx_, sy_) ? JNI_TRUE : JNI_FALSE;
+        obj->postScale(sx, sy);
     }
 
-    static jboolean postRotate__FFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees, jfloat px, jfloat py) {
+    static void postRotate__FFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar degrees_ = SkFloatToScalar(degrees);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        return obj->postRotate(degrees_, px_, py_) ? JNI_TRUE : JNI_FALSE;
+        obj->postRotate(degrees, px, py);
     }
 
-    static jboolean postRotate__F(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees) {
+    static void postRotate__F(JNIEnv* env, jobject clazz, jlong objHandle, jfloat degrees) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar degrees_ = SkFloatToScalar(degrees);
-        return obj->postRotate(degrees_) ? JNI_TRUE : JNI_FALSE;
+        obj->postRotate(degrees);
     }
 
-    static jboolean postSkew__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky, jfloat px, jfloat py) {
+    static void postSkew__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat kx, jfloat ky, jfloat px, jfloat py) {
         SkMatrix* obj = reinterpret_cast<SkMatrix*>(objHandle);
-        SkScalar kx_ = SkFloatToScalar(kx);
-        SkScalar ky_ = SkFloatToScalar(ky);
-        SkScalar px_ = SkFloatToScalar(px);
-        SkScalar py_ = SkFloatToScalar(py);
-        return obj->postSkew(kx_, ky_, px_, py_) ? JNI_TRUE : JNI_FALSE;
+        obj->postSkew(kx, ky, px, py);
     }
 
-    static jboolean postSkew__FF(JNIEnv* env, jobject clazz, jlong matrixHandle, jfloat kx, jfloat ky) {
+    static void postSkew__FF(JNIEnv* env, jobject clazz, jlong matrixHandle, jfloat kx, jfloat ky) {
         SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
-        SkScalar kx_ = SkFloatToScalar(kx);
-        SkScalar ky_ = SkFloatToScalar(ky);
-        return matrix->postSkew(kx_, ky_) ? JNI_TRUE : JNI_FALSE;
+        matrix->postSkew(kx, ky);
     }
 
-    static jboolean postConcat(JNIEnv* env, jobject clazz, jlong matrixHandle, jlong otherHandle) {
+    static void postConcat(JNIEnv* env, jobject clazz, jlong matrixHandle, jlong otherHandle) {
         SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
         SkMatrix* other = reinterpret_cast<SkMatrix*>(otherHandle);
-        return matrix->postConcat(*other) ? JNI_TRUE : JNI_FALSE;
+        matrix->postConcat(*other);
     }
 
     static jboolean setRectToRect(JNIEnv* env, jobject clazz, jlong matrixHandle, jobject src, jobject dst, jint stfHandle) {
@@ -272,18 +212,11 @@
         float* dst = autoDst.ptr() + dstIndex;
         bool result;
 
-#ifdef SK_SCALAR_IS_FIXED        
-        SkPoint srcPt[4], dstPt[4];
-        for (int i = 0; i < ptCount; i++) {
-            int x = i << 1;
-            int y = x + 1;
-            srcPt[i].set(SkFloatToScalar(src[x]), SkFloatToScalar(src[y]));
-            dstPt[i].set(SkFloatToScalar(dst[x]), SkFloatToScalar(dst[y]));
-        }
-        result = matrix->setPolyToPoly(srcPt, dstPt, ptCount);
-#else
+#ifdef SK_SCALAR_IS_FLOAT
         result = matrix->setPolyToPoly((const SkPoint*)src, (const SkPoint*)dst,
                                      ptCount);
+#else
+        SkASSERT(false);
 #endif
         return result ? JNI_TRUE : JNI_FALSE;
     }
@@ -304,36 +237,15 @@
         AutoJavaFloatArray autoDst(env, dst, dstIndex + (ptCount << 1), kRW_JNIAccess);
         float* srcArray = autoSrc.ptr() + srcIndex;
         float* dstArray = autoDst.ptr() + dstIndex;
-        
-#ifdef SK_SCALAR_IS_FIXED        
-        // we allocate twice the count, 1 set for src, 1 for dst
-        SkAutoSTMalloc<32, SkPoint> storage(ptCount * 2);
-        SkPoint* pts = storage.get();
-        SkPoint* srcPt = pts;
-        SkPoint* dstPt = pts + ptCount;
-        
-        int i;
-        for (i = 0; i < ptCount; i++) {
-            srcPt[i].set(SkFloatToScalar(srcArray[i << 1]),
-                         SkFloatToScalar(srcArray[(i << 1) + 1]));
-        }
-        
-        if (isPts)
-            matrix->mapPoints(dstPt, srcPt, ptCount);
-        else
-            matrix->mapVectors(dstPt, srcPt, ptCount);
-        
-        for (i = 0; i < ptCount; i++) {
-            dstArray[i << 1]  = SkScalarToFloat(dstPt[i].fX);
-            dstArray[(i << 1) + 1]  = SkScalarToFloat(dstPt[i].fY);
-        }
-#else
+#ifdef SK_SCALAR_IS_FLOAT
         if (isPts)
             matrix->mapPoints((SkPoint*)dstArray, (const SkPoint*)srcArray,
                               ptCount);
         else
             matrix->mapVectors((SkVector*)dstArray, (const SkVector*)srcArray,
                                ptCount);
+#else
+        SkASSERT(false);
 #endif
     }
 
@@ -349,26 +261,19 @@
     static jfloat mapRadius(JNIEnv* env, jobject clazz, jlong matrixHandle, jfloat radius) {
         SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
         float result;
-        result = SkScalarToFloat(matrix->mapRadius(SkFloatToScalar(radius)));
+        result = SkScalarToFloat(matrix->mapRadius(radius));
         return static_cast<jfloat>(result);
     }
-
     static void getValues(JNIEnv* env, jobject clazz, jlong matrixHandle, jfloatArray values) {
         SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
         AutoJavaFloatArray autoValues(env, values, 9, kRW_JNIAccess);
         float* dst = autoValues.ptr();
-
-#ifdef SK_SCALAR_IS_FIXED
-        for (int i = 0; i < 6; i++) {
-            dst[i] = SkFixedToFloat(matrix->get(i));
-        }
-        for (int j = 6; j < 9; j++) {
-            dst[j] = SkFractToFloat(matrix->get(j));
-        }
-#else
+#ifdef SK_SCALAR_IS_FLOAT
         for (int i = 0; i < 9; i++) {
             dst[i] = matrix->get(i);
         }
+#else
+        SkASSERT(false);
 #endif
     }
 
@@ -377,17 +282,12 @@
         AutoJavaFloatArray autoValues(env, values, 9, kRO_JNIAccess);
         const float* src = autoValues.ptr();
 
-#ifdef SK_SCALAR_IS_FIXED
-        for (int i = 0; i < 6; i++) {
-            matrix->set(i, SkFloatToFixed(src[i]));
-        }
-        for (int j = 6; j < 9; j++) {
-            matrix->set(j, SkFloatToFract(src[j]));
-        }
-#else
+#ifdef SK_SCALAR_IS_FLOAT
         for (int i = 0; i < 9; i++) {
             matrix->set(i, src[i]);
         }
+#else
+        SkASSERT(false);
 #endif
     }
 
@@ -414,23 +314,23 @@
     {"native_setSinCos","(JFF)V", (void*) SkMatrixGlue::setSinCos__FF},
     {"native_setSkew","(JFFFF)V", (void*) SkMatrixGlue::setSkew__FFFF},
     {"native_setSkew","(JFF)V", (void*) SkMatrixGlue::setSkew__FF},
-    {"native_setConcat","(JJJ)Z", (void*) SkMatrixGlue::setConcat},
-    {"native_preTranslate","(JFF)Z", (void*) SkMatrixGlue::preTranslate},
-    {"native_preScale","(JFFFF)Z", (void*) SkMatrixGlue::preScale__FFFF},
-    {"native_preScale","(JFF)Z", (void*) SkMatrixGlue::preScale__FF},
-    {"native_preRotate","(JFFF)Z", (void*) SkMatrixGlue::preRotate__FFF},
-    {"native_preRotate","(JF)Z", (void*) SkMatrixGlue::preRotate__F},
-    {"native_preSkew","(JFFFF)Z", (void*) SkMatrixGlue::preSkew__FFFF},
-    {"native_preSkew","(JFF)Z", (void*) SkMatrixGlue::preSkew__FF},
-    {"native_preConcat","(JJ)Z", (void*) SkMatrixGlue::preConcat},
-    {"native_postTranslate","(JFF)Z", (void*) SkMatrixGlue::postTranslate},
-    {"native_postScale","(JFFFF)Z", (void*) SkMatrixGlue::postScale__FFFF},
-    {"native_postScale","(JFF)Z", (void*) SkMatrixGlue::postScale__FF},
-    {"native_postRotate","(JFFF)Z", (void*) SkMatrixGlue::postRotate__FFF},
-    {"native_postRotate","(JF)Z", (void*) SkMatrixGlue::postRotate__F},
-    {"native_postSkew","(JFFFF)Z", (void*) SkMatrixGlue::postSkew__FFFF},
-    {"native_postSkew","(JFF)Z", (void*) SkMatrixGlue::postSkew__FF},
-    {"native_postConcat","(JJ)Z", (void*) SkMatrixGlue::postConcat},
+    {"native_setConcat","(JJJ)V", (void*) SkMatrixGlue::setConcat},
+    {"native_preTranslate","(JFF)V", (void*) SkMatrixGlue::preTranslate},
+    {"native_preScale","(JFFFF)V", (void*) SkMatrixGlue::preScale__FFFF},
+    {"native_preScale","(JFF)V", (void*) SkMatrixGlue::preScale__FF},
+    {"native_preRotate","(JFFF)V", (void*) SkMatrixGlue::preRotate__FFF},
+    {"native_preRotate","(JF)V", (void*) SkMatrixGlue::preRotate__F},
+    {"native_preSkew","(JFFFF)V", (void*) SkMatrixGlue::preSkew__FFFF},
+    {"native_preSkew","(JFF)V", (void*) SkMatrixGlue::preSkew__FF},
+    {"native_preConcat","(JJ)V", (void*) SkMatrixGlue::preConcat},
+    {"native_postTranslate","(JFF)V", (void*) SkMatrixGlue::postTranslate},
+    {"native_postScale","(JFFFF)V", (void*) SkMatrixGlue::postScale__FFFF},
+    {"native_postScale","(JFF)V", (void*) SkMatrixGlue::postScale__FF},
+    {"native_postRotate","(JFFF)V", (void*) SkMatrixGlue::postRotate__FFF},
+    {"native_postRotate","(JF)V", (void*) SkMatrixGlue::postRotate__F},
+    {"native_postSkew","(JFFFF)V", (void*) SkMatrixGlue::postSkew__FFFF},
+    {"native_postSkew","(JFF)V", (void*) SkMatrixGlue::postSkew__FF},
+    {"native_postConcat","(JJ)V", (void*) SkMatrixGlue::postConcat},
     {"native_setRectToRect","(JLandroid/graphics/RectF;Landroid/graphics/RectF;I)Z", (void*) SkMatrixGlue::setRectToRect},
     {"native_setPolyToPoly","(J[FI[FII)Z", (void*) SkMatrixGlue::setPolyToPoly},
     {"native_invert","(JJ)Z", (void*) SkMatrixGlue::invert},
diff --git a/core/jni/android/graphics/MinikinSkia.cpp b/core/jni/android/graphics/MinikinSkia.cpp
new file mode 100644
index 0000000..622c935
--- /dev/null
+++ b/core/jni/android/graphics/MinikinSkia.cpp
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#include <SkTypeface.h>
+#include <SkPaint.h>
+#include <SkFP.h>
+
+#define LOG_TAG "Minikin"
+#include <cutils/log.h>
+
+#include <minikin/MinikinFont.h>
+#include "MinikinSkia.h"
+
+namespace android {
+
+MinikinFontSkia::MinikinFontSkia(SkTypeface *typeface) :
+    mTypeface(typeface) {
+}
+
+MinikinFontSkia::~MinikinFontSkia() {
+    SkSafeUnref(mTypeface);
+}
+
+bool MinikinFontSkia::GetGlyph(uint32_t codepoint, uint32_t *glyph) const {
+    SkPaint paint;
+    paint.setTypeface(mTypeface);
+    paint.setTextEncoding(SkPaint::kUTF32_TextEncoding);
+    uint16_t glyph16;
+    paint.textToGlyphs(&codepoint, sizeof(codepoint), &glyph16);
+    *glyph  = glyph16;
+    return !!glyph;
+}
+
+float MinikinFontSkia::GetHorizontalAdvance(uint32_t glyph_id,
+    const MinikinPaint &paint) const {
+    SkPaint skpaint;
+    skpaint.setTypeface(mTypeface);
+    skpaint.setTextEncoding(SkPaint::kGlyphID_TextEncoding);
+    // TODO: set more paint parameters from Minikin
+    skpaint.setTextSize(paint.size);
+    uint16_t glyph16 = glyph_id;
+    SkScalar skWidth;
+    SkRect skBounds;
+    skpaint.getTextWidths(&glyph16, sizeof(glyph16), &skWidth, &skBounds);
+    // TODO: get bounds information
+    return SkScalarToFP(skWidth);
+}
+
+bool MinikinFontSkia::GetTable(uint32_t tag, uint8_t *buf, size_t *size) {
+    if (buf == NULL) {
+        const size_t tableSize = mTypeface->getTableSize(tag);
+        *size = tableSize;
+        return tableSize != 0;
+    } else {
+        const size_t actualSize = mTypeface->getTableData(tag, 0, *size, buf);
+        *size = actualSize;
+        return actualSize != 0;
+    }
+}
+
+SkTypeface *MinikinFontSkia::GetSkTypeface() {
+    return mTypeface;
+}
+
+int32_t MinikinFontSkia::GetUniqueId() const {
+    return mTypeface->uniqueID();
+}
+
+}
diff --git a/core/jni/android/graphics/MinikinSkia.h b/core/jni/android/graphics/MinikinSkia.h
new file mode 100644
index 0000000..0edb557
--- /dev/null
+++ b/core/jni/android/graphics/MinikinSkia.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+namespace android {
+
+class MinikinFontSkia : public MinikinFont {
+public:
+    explicit MinikinFontSkia(SkTypeface *typeface);
+
+    ~MinikinFontSkia();
+
+    bool GetGlyph(uint32_t codepoint, uint32_t *glyph) const;
+
+    float GetHorizontalAdvance(uint32_t glyph_id,
+        const MinikinPaint &paint) const;
+
+    // If buf is NULL, just update size
+    bool GetTable(uint32_t tag, uint8_t *buf, size_t *size);
+
+    int32_t GetUniqueId() const;
+
+    SkTypeface *GetSkTypeface();
+
+private:
+    SkTypeface *mTypeface;
+
+};
+
+}  // namespace android
\ No newline at end of file
diff --git a/core/jni/android/graphics/Movie.cpp b/core/jni/android/graphics/Movie.cpp
index 461f723..5f9a9b7 100644
--- a/core/jni/android/graphics/Movie.cpp
+++ b/core/jni/android/graphics/Movie.cpp
@@ -74,12 +74,10 @@
 
     SkMovie* m = J2Movie(env, movie);
     SkCanvas* c = GraphicsJNI::getNativeCanvas(env, canvas);
-    SkScalar sx = SkFloatToScalar(fx);
-    SkScalar sy = SkFloatToScalar(fy);
     const SkBitmap& b = m->bitmap();
     const SkPaint* p = jpaint ? GraphicsJNI::getNativePaint(env, jpaint) : NULL;
 
-    c->drawBitmap(b, sx, sy, p);
+    c->drawBitmap(b, fx, fy, p);
 }
 
 static jobject movie_decodeAsset(JNIEnv* env, jobject clazz, jlong native_asset) {
diff --git a/core/jni/android/graphics/NinePatch.cpp b/core/jni/android/graphics/NinePatch.cpp
index 871e24d..855d267 100644
--- a/core/jni/android/graphics/NinePatch.cpp
+++ b/core/jni/android/graphics/NinePatch.cpp
@@ -97,7 +97,7 @@
         } else {
             canvas->save();
 
-            SkScalar scale = SkFloatToScalar(destDensity / (float)srcDensity);
+            SkScalar scale = destDensity / (float)srcDensity;
             canvas->translate(bounds.fLeft, bounds.fTop);
             canvas->scale(scale, scale);
 
diff --git a/core/jni/android/graphics/NinePatchImpl.cpp b/core/jni/android/graphics/NinePatchImpl.cpp
index 86ff13c..1793208 100644
--- a/core/jni/android/graphics/NinePatchImpl.cpp
+++ b/core/jni/android/graphics/NinePatchImpl.cpp
@@ -38,7 +38,7 @@
 #include <utils/Log.h>
 
 static bool getColor(const SkBitmap& bitmap, int x, int y, SkColor* c) {
-    switch (bitmap.getConfig()) {
+    switch (bitmap.config()) {
         case SkBitmap::kARGB_8888_Config:
             *c = SkUnPreMultiply::PMColorToColor(*bitmap.getAddr32(x, y));
             break;
diff --git a/core/jni/android/graphics/Paint.cpp b/core/jni/android/graphics/Paint.cpp
index dc97c22..08a88d1 100644
--- a/core/jni/android/graphics/Paint.cpp
+++ b/core/jni/android/graphics/Paint.cpp
@@ -206,7 +206,7 @@
 
     static void setStrokeWidth(JNIEnv* env, jobject paint, jfloat width) {
         NPE_CHECK_RETURN_VOID(env, paint);
-        GraphicsJNI::getNativePaint(env, paint)->setStrokeWidth(SkFloatToScalar(width));
+        GraphicsJNI::getNativePaint(env, paint)->setStrokeWidth(width);
     }
 
     static jfloat getStrokeMiter(JNIEnv* env, jobject paint) {
@@ -216,7 +216,7 @@
 
     static void setStrokeMiter(JNIEnv* env, jobject paint, jfloat miter) {
         NPE_CHECK_RETURN_VOID(env, paint);
-        GraphicsJNI::getNativePaint(env, paint)->setStrokeMiter(SkFloatToScalar(miter));
+        GraphicsJNI::getNativePaint(env, paint)->setStrokeMiter(miter);
     }
 
     static jint getStrokeCap(JNIEnv* env, jobject clazz, jlong objHandle) {
@@ -279,9 +279,14 @@
     }
 
     static jlong setTypeface(JNIEnv* env, jobject clazz, jlong objHandle, jlong typefaceHandle) {
+#ifndef USE_MINIKIN
         SkPaint* obj = reinterpret_cast<SkPaint*>(objHandle);
         SkTypeface* typeface = reinterpret_cast<SkTypeface*>(typefaceHandle);
         return reinterpret_cast<jlong>(obj->setTypeface(typeface));
+#else
+        // TODO(raph): not yet implemented
+        return NULL;
+#endif
     }
 
     static jlong setRasterizer(JNIEnv* env, jobject clazz, jlong objHandle, jlong rasterizerHandle) {
@@ -352,6 +357,24 @@
         obj->setPaintOptionsAndroid(paintOpts);
     }
 
+    static jboolean isElegantTextHeight(JNIEnv* env, jobject paint) {
+        NPE_CHECK_RETURN_ZERO(env, paint);
+        SkPaint* obj = GraphicsJNI::getNativePaint(env, paint);
+        SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid();
+        return paintOpts.getFontVariant() == SkPaintOptionsAndroid::kElegant_Variant;
+    }
+
+    static void setElegantTextHeight(JNIEnv* env, jobject paint, jboolean aa) {
+        NPE_CHECK_RETURN_VOID(env, paint);
+        SkPaint* obj = GraphicsJNI::getNativePaint(env, paint);
+        SkPaintOptionsAndroid::FontVariant variant =
+            aa ? SkPaintOptionsAndroid::kElegant_Variant :
+            SkPaintOptionsAndroid::kDefault_Variant;
+        SkPaintOptionsAndroid paintOpts = obj->getPaintOptionsAndroid();
+        paintOpts.setFontVariant(variant);
+        obj->setPaintOptionsAndroid(paintOpts);
+    }
+
     static jfloat getTextSize(JNIEnv* env, jobject paint) {
         NPE_CHECK_RETURN_ZERO(env, paint);
         return SkScalarToFloat(GraphicsJNI::getNativePaint(env, paint)->getTextSize());
@@ -359,7 +382,7 @@
 
     static void setTextSize(JNIEnv* env, jobject paint, jfloat textSize) {
         NPE_CHECK_RETURN_VOID(env, paint);
-        GraphicsJNI::getNativePaint(env, paint)->setTextSize(SkFloatToScalar(textSize));
+        GraphicsJNI::getNativePaint(env, paint)->setTextSize(textSize);
     }
 
     static jfloat getTextScaleX(JNIEnv* env, jobject paint) {
@@ -369,7 +392,7 @@
 
     static void setTextScaleX(JNIEnv* env, jobject paint, jfloat scaleX) {
         NPE_CHECK_RETURN_VOID(env, paint);
-        GraphicsJNI::getNativePaint(env, paint)->setTextScaleX(SkFloatToScalar(scaleX));
+        GraphicsJNI::getNativePaint(env, paint)->setTextScaleX(scaleX);
     }
 
     static jfloat getTextSkewX(JNIEnv* env, jobject paint) {
@@ -379,7 +402,7 @@
 
     static void setTextSkewX(JNIEnv* env, jobject paint, jfloat skewX) {
         NPE_CHECK_RETURN_VOID(env, paint);
-        GraphicsJNI::getNativePaint(env, paint)->setTextSkewX(SkFloatToScalar(skewX));
+        GraphicsJNI::getNativePaint(env, paint)->setTextSkewX(skewX);
     }
 
     static jfloat ascent(JNIEnv* env, jobject paint) {
@@ -396,10 +419,30 @@
         return SkScalarToFloat(metrics.fDescent);
     }
 
+    static SkScalar getMetricsInternal(SkPaint *paint, SkPaint::FontMetrics *metrics) {
+        const int kElegantTop = 2500;
+        const int kElegantBottom = -1000;
+        const int kElegantAscent = 1946;
+        const int kElegantDescent = -512;
+        const int kElegantLeading = 0;
+        SkScalar spacing = paint->getFontMetrics(metrics);
+        SkPaintOptionsAndroid paintOpts = paint->getPaintOptionsAndroid();
+        if (paintOpts.getFontVariant() == SkPaintOptionsAndroid::kElegant_Variant) {
+            SkScalar size = paint->getTextSize();
+            metrics->fTop = -size * kElegantTop / 2048;
+            metrics->fBottom = -size * kElegantBottom / 2048;
+            metrics->fAscent = -size * kElegantAscent / 2048;
+            metrics->fDescent = -size * kElegantDescent / 2048;
+            metrics->fLeading = size * kElegantLeading / 2048;
+            spacing = metrics->fDescent - metrics->fAscent + metrics->fLeading;
+        }
+        return spacing;
+    }
+
     static jfloat getFontMetrics(JNIEnv* env, jobject paint, jobject metricsObj) {
         NPE_CHECK_RETURN_ZERO(env, paint);
         SkPaint::FontMetrics metrics;
-        SkScalar             spacing = GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics);
+        SkScalar spacing = getMetricsInternal(GraphicsJNI::getNativePaint(env, paint), &metrics);
 
         if (metricsObj) {
             SkASSERT(env->IsInstanceOf(metricsObj, gFontMetrics_class));
@@ -416,17 +459,17 @@
         NPE_CHECK_RETURN_ZERO(env, paint);
         SkPaint::FontMetrics metrics;
 
-        GraphicsJNI::getNativePaint(env, paint)->getFontMetrics(&metrics);
-        int ascent = SkScalarRound(metrics.fAscent);
-        int descent = SkScalarRound(metrics.fDescent);
-        int leading = SkScalarRound(metrics.fLeading);
+        getMetricsInternal(GraphicsJNI::getNativePaint(env, paint), &metrics);
+        int ascent = SkScalarRoundToInt(metrics.fAscent);
+        int descent = SkScalarRoundToInt(metrics.fDescent);
+        int leading = SkScalarRoundToInt(metrics.fLeading);
 
         if (metricsObj) {
             SkASSERT(env->IsInstanceOf(metricsObj, gFontMetricsInt_class));
-            env->SetIntField(metricsObj, gFontMetricsInt_fieldID.top, SkScalarFloor(metrics.fTop));
+            env->SetIntField(metricsObj, gFontMetricsInt_fieldID.top, SkScalarFloorToInt(metrics.fTop));
             env->SetIntField(metricsObj, gFontMetricsInt_fieldID.ascent, ascent);
             env->SetIntField(metricsObj, gFontMetricsInt_fieldID.descent, descent);
-            env->SetIntField(metricsObj, gFontMetricsInt_fieldID.bottom, SkScalarCeil(metrics.fBottom));
+            env->SetIntField(metricsObj, gFontMetricsInt_fieldID.bottom, SkScalarCeilToInt(metrics.fBottom));
             env->SetIntField(metricsObj, gFontMetricsInt_fieldID.leading, leading);
         }
         return descent - ascent + leading;
@@ -742,10 +785,7 @@
             paint->setLooper(NULL);
         }
         else {
-            paint->setLooper(new SkBlurDrawLooper(SkFloatToScalar(radius),
-                                                  SkFloatToScalar(dx),
-                                                  SkFloatToScalar(dy),
-                                                  (SkColor)color))->unref();
+            paint->setLooper(new SkBlurDrawLooper(radius, dx, dy, (SkColor)color))->unref();
         }
     }
 
@@ -759,7 +799,7 @@
         }
         SkScalar     measured;
         size_t       bytes = paint.breakText(value->getGlyphs(), value->getGlyphsCount() << 1,
-                                   SkFloatToScalar(maxWidth), &measured, tbd);
+                maxWidth, &measured, tbd);
         SkASSERT((bytes & 1) == 0);
 
         if (jmeasured && env->GetArrayLength(jmeasured) > 0) {
@@ -892,6 +932,8 @@
     {"native_getTextAlign","(J)I", (void*) SkPaintGlue::getTextAlign},
     {"native_setTextAlign","(JI)V", (void*) SkPaintGlue::setTextAlign},
     {"native_setTextLocale","(JLjava/lang/String;)V", (void*) SkPaintGlue::setTextLocale},
+    {"isElegantTextHeight","()Z", (void*) SkPaintGlue::isElegantTextHeight},
+    {"setElegantTextHeight","(Z)V", (void*) SkPaintGlue::setElegantTextHeight},
     {"getTextSize","()F", (void*) SkPaintGlue::getTextSize},
     {"setTextSize","(F)V", (void*) SkPaintGlue::setTextSize},
     {"getTextScaleX","()F", (void*) SkPaintGlue::getTextScaleX},
diff --git a/core/jni/android/graphics/Path.cpp b/core/jni/android/graphics/Path.cpp
index 54b6996..420a17f 100644
--- a/core/jni/android/graphics/Path.cpp
+++ b/core/jni/android/graphics/Path.cpp
@@ -25,9 +25,11 @@
 #include <android_runtime/AndroidRuntime.h>
 
 #include "SkPath.h"
-#include "pathops/SkPathOps.h"
+#include "SkPathOps.h"
 
 #include <Caches.h>
+#include <vector>
+#include <map>
 
 namespace android {
 
@@ -70,11 +72,16 @@
         *dst = *src;
     }
 
+    static jboolean isConvex(JNIEnv* env, jobject clazz, jlong objHandle) {
+        SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
+        return obj->isConvex();
+    }
+
     static jint getFillType(JNIEnv* env, jobject clazz, jlong objHandle) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         return obj->getFillType();
     }
- 
+
     static void setFillType(JNIEnv* env, jobject clazz, jlong pathHandle, jint ftHandle) {
         SkPath* path = reinterpret_cast<SkPath*>(pathHandle);
         SkPath::FillType ft = static_cast<SkPath::FillType>(ftHandle);
@@ -86,18 +93,18 @@
         return obj->isEmpty();
     }
  
-    static jboolean isRect(JNIEnv* env, jobject clazz, jlong objHandle, jobject rect) {
-        SkRect rect_;
+    static jboolean isRect(JNIEnv* env, jobject clazz, jlong objHandle, jobject jrect) {
+        SkRect rect;
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        jboolean result = obj->isRect(&rect_);
-        GraphicsJNI::rect_to_jrectf(rect_, env, rect);
+        jboolean result = obj->isRect(&rect);
+        GraphicsJNI::rect_to_jrectf(rect, env, jrect);
         return result;
     }
  
-    static void computeBounds(JNIEnv* env, jobject clazz, jlong objHandle, jobject bounds) {
+    static void computeBounds(JNIEnv* env, jobject clazz, jlong objHandle, jobject jbounds) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        const SkRect& bounds_ = obj->getBounds();
-        GraphicsJNI::rect_to_jrectf(bounds_, env, bounds);
+        const SkRect& bounds = obj->getBounds();
+        GraphicsJNI::rect_to_jrectf(bounds, env, jbounds);
     }
  
     static void incReserve(JNIEnv* env, jobject clazz, jlong objHandle, jint extraPtCount) {
@@ -107,163 +114,112 @@
  
     static void moveTo__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat x, jfloat y) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar x_ = SkFloatToScalar(x);
-        SkScalar y_ = SkFloatToScalar(y);
-        obj->moveTo(x_, y_);
+        obj->moveTo(x, y);
     }
  
     static void rMoveTo(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        obj->rMoveTo(dx_, dy_);
+        obj->rMoveTo(dx, dy);
     }
  
     static void lineTo__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat x, jfloat y) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar x_ = SkFloatToScalar(x);
-        SkScalar y_ = SkFloatToScalar(y);
-        obj->lineTo(x_, y_);
+        obj->lineTo(x, y);
     }
  
     static void rLineTo(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        obj->rLineTo(dx_, dy_);
+        obj->rLineTo(dx, dy);
     }
  
     static void quadTo__FFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat x1, jfloat y1, jfloat x2, jfloat y2) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar x1_ = SkFloatToScalar(x1);
-        SkScalar y1_ = SkFloatToScalar(y1);
-        SkScalar x2_ = SkFloatToScalar(x2);
-        SkScalar y2_ = SkFloatToScalar(y2);
-        obj->quadTo(x1_, y1_, x2_, y2_);
+        obj->quadTo(x1, y1, x2, y2);
     }
  
     static void rQuadTo(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx1, jfloat dy1, jfloat dx2, jfloat dy2) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar dx1_ = SkFloatToScalar(dx1);
-        SkScalar dy1_ = SkFloatToScalar(dy1);
-        SkScalar dx2_ = SkFloatToScalar(dx2);
-        SkScalar dy2_ = SkFloatToScalar(dy2);
-        obj->rQuadTo(dx1_, dy1_, dx2_, dy2_);
+        obj->rQuadTo(dx1, dy1, dx2, dy2);
     }
  
     static void cubicTo__FFFFFF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat x3, jfloat y3) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar x1_ = SkFloatToScalar(x1);
-        SkScalar y1_ = SkFloatToScalar(y1);
-        SkScalar x2_ = SkFloatToScalar(x2);
-        SkScalar y2_ = SkFloatToScalar(y2);
-        SkScalar x3_ = SkFloatToScalar(x3);
-        SkScalar y3_ = SkFloatToScalar(y3);
-        obj->cubicTo(x1_, y1_, x2_, y2_, x3_, y3_);
+        obj->cubicTo(x1, y1, x2, y2, x3, y3);
     }
  
     static void rCubicTo(JNIEnv* env, jobject clazz, jlong objHandle, jfloat x1, jfloat y1, jfloat x2, jfloat y2, jfloat x3, jfloat y3) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar x1_ = SkFloatToScalar(x1);
-        SkScalar y1_ = SkFloatToScalar(y1);
-        SkScalar x2_ = SkFloatToScalar(x2);
-        SkScalar y2_ = SkFloatToScalar(y2);
-        SkScalar x3_ = SkFloatToScalar(x3);
-        SkScalar y3_ = SkFloatToScalar(y3);
-        obj->rCubicTo(x1_, y1_, x2_, y2_, x3_, y3_);
+        obj->rCubicTo(x1, y1, x2, y2, x3, y3);
     }
  
     static void arcTo(JNIEnv* env, jobject clazz, jlong objHandle, jobject oval, jfloat startAngle, jfloat sweepAngle, jboolean forceMoveTo) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkRect oval_;
         GraphicsJNI::jrectf_to_rect(env, oval, &oval_);
-        SkScalar startAngle_ = SkFloatToScalar(startAngle);
-        SkScalar sweepAngle_ = SkFloatToScalar(sweepAngle);
-        obj->arcTo(oval_, startAngle_, sweepAngle_, forceMoveTo);
+        obj->arcTo(oval_, startAngle, sweepAngle, forceMoveTo);
     }
  
     static void close(JNIEnv* env, jobject clazz, jlong objHandle) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         obj->close();
     }
- 
-    static void addRect__RectFI(JNIEnv* env, jobject clazz, jlong objHandle, jobject rect, jint dirHandle) {
-        SkRect rect_;
+
+    static void addRect(JNIEnv* env, jobject clazz, jlong objHandle,
+            jfloat left, jfloat top, jfloat right, jfloat bottom, jint dirHandle) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkPath::Direction dir = static_cast<SkPath::Direction>(dirHandle);
-        GraphicsJNI::jrectf_to_rect(env, rect, &rect_);
-        obj->addRect(rect_, dir);
+        obj->addRect(left, top, right, bottom, dir);
     }
- 
-    static void addRect__FFFFI(JNIEnv* env, jobject clazz, jlong objHandle, jfloat left, jfloat top, jfloat right, jfloat bottom, jint dirHandle) {
+
+    static void addOval(JNIEnv* env, jobject clazz, jlong objHandle,
+            jfloat left, jfloat top, jfloat right, jfloat bottom, jint dirHandle) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkPath::Direction dir = static_cast<SkPath::Direction>(dirHandle);
-        SkScalar left_ = SkFloatToScalar(left);
-        SkScalar top_ = SkFloatToScalar(top);
-        SkScalar right_ = SkFloatToScalar(right);
-        SkScalar bottom_ = SkFloatToScalar(bottom);
-        obj->addRect(left_, top_, right_, bottom_, dir);
+        SkRect oval = SkRect::MakeLTRB(left, top, right, bottom);
+        obj->addOval(oval, dir);
     }
- 
-    static void addOval(JNIEnv* env, jobject clazz, jlong objHandle, jobject oval, jint dirHandle) {
-        SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkPath::Direction dir = static_cast<SkPath::Direction>(dirHandle);
-        SkRect oval_;
-        GraphicsJNI::jrectf_to_rect(env, oval, &oval_);
-        obj->addOval(oval_, dir);
-    }
- 
+
     static void addCircle(JNIEnv* env, jobject clazz, jlong objHandle, jfloat x, jfloat y, jfloat radius, jint dirHandle) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkPath::Direction dir = static_cast<SkPath::Direction>(dirHandle);
-        SkScalar x_ = SkFloatToScalar(x);
-        SkScalar y_ = SkFloatToScalar(y);
-        SkScalar radius_ = SkFloatToScalar(radius);
-        obj->addCircle(x_, y_, radius_, dir);
+        obj->addCircle(x, y, radius, dir);
     }
- 
+
     static void addArc(JNIEnv* env, jobject clazz, jlong objHandle, jobject oval, jfloat startAngle, jfloat sweepAngle) {
         SkRect oval_;
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         GraphicsJNI::jrectf_to_rect(env, oval, &oval_);
-        SkScalar startAngle_ = SkFloatToScalar(startAngle);
-        SkScalar sweepAngle_ = SkFloatToScalar(sweepAngle);
-        obj->addArc(oval_, startAngle_, sweepAngle_);
+        obj->addArc(oval_, startAngle, sweepAngle);
     }
- 
-    static void addRoundRectXY(JNIEnv* env, jobject clazz, jlong objHandle, jobject rect,
+
+    static void addRoundRectXY(JNIEnv* env, jobject clazz, jlong objHandle, jobject jrect,
             jfloat rx, jfloat ry, jint dirHandle) {
-        SkRect rect_;
+        SkRect rect;
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkPath::Direction dir = static_cast<SkPath::Direction>(dirHandle);
-        GraphicsJNI::jrectf_to_rect(env, rect, &rect_);
-        SkScalar rx_ = SkFloatToScalar(rx);
-        SkScalar ry_ = SkFloatToScalar(ry);
-        obj->addRoundRect(rect_, rx_, ry_, dir);
+        GraphicsJNI::jrectf_to_rect(env, jrect, &rect);
+        obj->addRoundRect(rect, rx, ry, dir);
     }
     
-    static void addRoundRect8(JNIEnv* env, jobject, jlong objHandle, jobject rect,
+    static void addRoundRect8(JNIEnv* env, jobject, jlong objHandle, jobject jrect,
             jfloatArray array, jint dirHandle) {
-        SkRect rect_;
+        SkRect rect;
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkPath::Direction dir = static_cast<SkPath::Direction>(dirHandle);
-        GraphicsJNI::jrectf_to_rect(env, rect, &rect_);
+        GraphicsJNI::jrectf_to_rect(env, jrect, &rect);
         AutoJavaFloatArray  afa(env, array, 8);
+#ifdef SK_SCALAR_IS_FLOAT
         const float* src = afa.ptr();
-        SkScalar dst[8];
-        
-        for (int i = 0; i < 8; i++) {
-            dst[i] = SkFloatToScalar(src[i]);
-        }
-        obj->addRoundRect(rect_, dst, dir);
+#else
+        #error Need to convert float array to SkScalar array before calling the following function.
+#endif
+        obj->addRoundRect(rect, src, dir);
     }
     
     static void addPath__PathFF(JNIEnv* env, jobject clazz, jlong objHandle, jlong srcHandle, jfloat dx, jfloat dy) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkPath* src = reinterpret_cast<SkPath*>(srcHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        obj->addPath(*src, dx_, dy_);
+        obj->addPath(*src, dx, dy);
     }
  
     static void addPath__Path(JNIEnv* env, jobject clazz, jlong objHandle, jlong srcHandle) {
@@ -282,23 +238,17 @@
     static void offset__FFPath(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy, jlong dstHandle) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
         SkPath* dst = reinterpret_cast<SkPath*>(dstHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        obj->offset(dx_, dy_, dst);
+        obj->offset(dx, dy, dst);
     }
  
     static void offset__FF(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        obj->offset(dx_, dy_);
+        obj->offset(dx, dy);
     }
 
     static void setLastPoint(JNIEnv* env, jobject clazz, jlong objHandle, jfloat dx, jfloat dy) {
         SkPath* obj = reinterpret_cast<SkPath*>(objHandle);
-        SkScalar dx_ = SkFloatToScalar(dx);
-        SkScalar dy_ = SkFloatToScalar(dy);
-        obj->setLastPt(dx_, dy_);
+        obj->setLastPt(dx, dy);
     }
  
     static void transform__MatrixPath(JNIEnv* env, jobject clazz, jlong objHandle, jlong matrixHandle, jlong dstHandle) {
@@ -321,6 +271,198 @@
         SkPath* r   = reinterpret_cast<SkPath*>(rHandle);
         return Op(*p1, *p2, op, r);
      }
+
+    typedef SkPoint (*bezierCalculation)(float t, const SkPoint* points);
+
+    static void addMove(std::vector<SkPoint>& segmentPoints, std::vector<float>& lengths,
+            const SkPoint& point) {
+        float length = 0;
+        if (!lengths.empty()) {
+            length = lengths.back();
+        }
+        segmentPoints.push_back(point);
+        lengths.push_back(length);
+    }
+
+    static void addLine(std::vector<SkPoint>& segmentPoints, std::vector<float>& lengths,
+            const SkPoint& toPoint) {
+        if (segmentPoints.empty()) {
+            segmentPoints.push_back(SkPoint::Make(0, 0));
+            lengths.push_back(0);
+        } else if (segmentPoints.back() == toPoint) {
+            return; // Empty line
+        }
+        float length = lengths.back() + SkPoint::Distance(segmentPoints.back(), toPoint);
+        segmentPoints.push_back(toPoint);
+        lengths.push_back(length);
+    }
+
+    static float cubicCoordinateCalculation(float t, float p0, float p1, float p2, float p3) {
+        float oneMinusT = 1 - t;
+        float oneMinusTSquared = oneMinusT * oneMinusT;
+        float oneMinusTCubed = oneMinusTSquared * oneMinusT;
+        float tSquared = t * t;
+        float tCubed = tSquared * t;
+        return (oneMinusTCubed * p0) + (3 * oneMinusTSquared * t * p1)
+                + (3 * oneMinusT * tSquared * p2) + (tCubed * p3);
+    }
+
+    static SkPoint cubicBezierCalculation(float t, const SkPoint* points) {
+        float x = cubicCoordinateCalculation(t, points[0].x(), points[1].x(),
+            points[2].x(), points[3].x());
+        float y = cubicCoordinateCalculation(t, points[0].y(), points[1].y(),
+            points[2].y(), points[3].y());
+        return SkPoint::Make(x, y);
+    }
+
+    static float quadraticCoordinateCalculation(float t, float p0, float p1, float p2) {
+        float oneMinusT = 1 - t;
+        return oneMinusT * ((oneMinusT * p0) + (t * p1)) + t * ((oneMinusT * p1) + (t * p2));
+    }
+
+    static SkPoint quadraticBezierCalculation(float t, const SkPoint* points) {
+        float x = quadraticCoordinateCalculation(t, points[0].x(), points[1].x(), points[2].x());
+        float y = quadraticCoordinateCalculation(t, points[0].y(), points[1].y(), points[2].y());
+        return SkPoint::Make(x, y);
+    }
+
+    // Subdivide a section of the Bezier curve, set the mid-point and the mid-t value.
+    // Returns true if further subdivision is necessary as defined by errorSquared.
+    static bool subdividePoints(const SkPoint* points, bezierCalculation bezierFunction,
+            float t0, const SkPoint &p0, float t1, const SkPoint &p1,
+            float& midT, SkPoint &midPoint, float errorSquared) {
+        midT = (t1 + t0) / 2;
+        float midX = (p1.x() + p0.x()) / 2;
+        float midY = (p1.y() + p0.y()) / 2;
+
+        midPoint = (*bezierFunction)(midT, points);
+        float xError = midPoint.x() - midX;
+        float yError = midPoint.y() - midY;
+        float midErrorSquared = (xError * xError) + (yError * yError);
+        return midErrorSquared > errorSquared;
+    }
+
+    // Divides Bezier curves until linear interpolation is very close to accurate, using
+    // errorSquared as a metric. Cubic Bezier curves can have an inflection point that improperly
+    // short-circuit subdivision. If you imagine an S shape, the top and bottom points being the
+    // starting and end points, linear interpolation would mark the center where the curve places
+    // the point. It is clearly not the case that we can linearly interpolate at that point.
+    // doubleCheckDivision forces a second examination between subdivisions to ensure that linear
+    // interpolation works.
+    static void addBezier(const SkPoint* points,
+            bezierCalculation bezierFunction, std::vector<SkPoint>& segmentPoints,
+            std::vector<float>& lengths, float errorSquared, bool doubleCheckDivision) {
+        typedef std::map<float, SkPoint> PointMap;
+        PointMap tToPoint;
+
+        tToPoint[0] = (*bezierFunction)(0, points);
+        tToPoint[1] = (*bezierFunction)(1, points);
+
+        PointMap::iterator iter = tToPoint.begin();
+        PointMap::iterator next = iter;
+        ++next;
+        while (next != tToPoint.end()) {
+            bool needsSubdivision = true;
+            SkPoint midPoint;
+            do {
+                float midT;
+                needsSubdivision = subdividePoints(points, bezierFunction, iter->first,
+                    iter->second, next->first, next->second, midT, midPoint, errorSquared);
+                if (!needsSubdivision && doubleCheckDivision) {
+                    SkPoint quarterPoint;
+                    float quarterT;
+                    needsSubdivision = subdividePoints(points, bezierFunction, iter->first,
+                        iter->second, midT, midPoint, quarterT, quarterPoint, errorSquared);
+                    if (needsSubdivision) {
+                        // Found an inflection point. No need to double-check.
+                        doubleCheckDivision = false;
+                    }
+                }
+                if (needsSubdivision) {
+                    next = tToPoint.insert(iter, PointMap::value_type(midT, midPoint));
+                }
+            } while (needsSubdivision);
+            iter = next;
+            next++;
+        }
+
+        // Now that each division can use linear interpolation with less than the allowed error
+        for (iter = tToPoint.begin(); iter != tToPoint.end(); ++iter) {
+            addLine(segmentPoints, lengths, iter->second);
+        }
+    }
+
+    static void createVerbSegments(SkPath::Verb verb, const SkPoint* points,
+        std::vector<SkPoint>& segmentPoints, std::vector<float>& lengths, float errorSquared) {
+        switch (verb) {
+            case SkPath::kMove_Verb:
+                addMove(segmentPoints, lengths, points[0]);
+                break;
+            case SkPath::kClose_Verb:
+                addLine(segmentPoints, lengths, points[0]);
+                break;
+            case SkPath::kLine_Verb:
+                addLine(segmentPoints, lengths, points[1]);
+                break;
+            case SkPath::kQuad_Verb:
+                addBezier(points, quadraticBezierCalculation, segmentPoints, lengths,
+                    errorSquared, false);
+                break;
+            case SkPath::kCubic_Verb:
+                addBezier(points, cubicBezierCalculation, segmentPoints, lengths,
+                    errorSquared, true);
+                break;
+            default:
+                // Leave element as NULL, Conic sections are not supported.
+                break;
+        }
+    }
+
+    // Returns a float[] with each point along the path represented by 3 floats
+    // * fractional length along the path that the point resides
+    // * x coordinate
+    // * y coordinate
+    // Note that more than one point may have the same length along the path in
+    // the case of a move.
+    // NULL can be returned if the Path is empty.
+    static jfloatArray approximate(JNIEnv* env, jclass, jlong pathHandle, float acceptableError)
+    {
+        SkPath* path = reinterpret_cast<SkPath*>(pathHandle);
+        SkASSERT(path);
+        SkPath::Iter pathIter(*path, false);
+        SkPath::Verb verb;
+        SkPoint points[4];
+        std::vector<SkPoint> segmentPoints;
+        std::vector<float> lengths;
+        float errorSquared = acceptableError * acceptableError;
+
+        while ((verb = pathIter.next(points)) != SkPath::kDone_Verb) {
+            createVerbSegments(verb, points, segmentPoints, lengths, errorSquared);
+        }
+
+        if (segmentPoints.empty()) {
+            return NULL;
+        }
+
+        size_t numPoints = segmentPoints.size();
+        size_t approximationArraySize = numPoints * 3;
+
+        float* approximation = new float[approximationArraySize];
+        float totalLength = lengths.back();
+
+        int approximationIndex = 0;
+        for (size_t i = 0; i < numPoints; i++) {
+            const SkPoint& point = segmentPoints[i];
+            approximation[approximationIndex++] = lengths[i] / totalLength;
+            approximation[approximationIndex++] = point.x();
+            approximation[approximationIndex++] = point.y();
+        }
+
+        jfloatArray result = env->NewFloatArray(approximationArraySize);
+        env->SetFloatArrayRegion(result, 0, approximationArraySize, approximation);
+        delete[] approximation;
+        return result;
+    }
 };
 
 static JNINativeMethod methods[] = {
@@ -330,6 +472,7 @@
     {"native_reset","(J)V", (void*) SkPathGlue::reset},
     {"native_rewind","(J)V", (void*) SkPathGlue::rewind},
     {"native_set","(JJ)V", (void*) SkPathGlue::assign},
+    {"native_isConvex","(J)Z", (void*) SkPathGlue::isConvex},
     {"native_getFillType","(J)I", (void*) SkPathGlue::getFillType},
     {"native_setFillType","(JI)V", (void*) SkPathGlue::setFillType},
     {"native_isEmpty","(J)Z", (void*) SkPathGlue::isEmpty},
@@ -346,9 +489,8 @@
     {"native_rCubicTo","(JFFFFFF)V", (void*) SkPathGlue::rCubicTo},
     {"native_arcTo","(JLandroid/graphics/RectF;FFZ)V", (void*) SkPathGlue::arcTo},
     {"native_close","(J)V", (void*) SkPathGlue::close},
-    {"native_addRect","(JLandroid/graphics/RectF;I)V", (void*) SkPathGlue::addRect__RectFI},
-    {"native_addRect","(JFFFFI)V", (void*) SkPathGlue::addRect__FFFFI},
-    {"native_addOval","(JLandroid/graphics/RectF;I)V", (void*) SkPathGlue::addOval},
+    {"native_addRect","(JFFFFI)V", (void*) SkPathGlue::addRect},
+    {"native_addOval","(JFFFFI)V", (void*) SkPathGlue::addOval},
     {"native_addCircle","(JFFFI)V", (void*) SkPathGlue::addCircle},
     {"native_addArc","(JLandroid/graphics/RectF;FF)V", (void*) SkPathGlue::addArc},
     {"native_addRoundRect","(JLandroid/graphics/RectF;FFI)V", (void*) SkPathGlue::addRoundRectXY},
@@ -361,7 +503,8 @@
     {"native_setLastPoint","(JFF)V", (void*) SkPathGlue::setLastPoint},
     {"native_transform","(JJJ)V", (void*) SkPathGlue::transform__MatrixPath},
     {"native_transform","(JJ)V", (void*) SkPathGlue::transform__Matrix},
-    {"native_op","(JJIJ)Z", (void*) SkPathGlue::op}
+    {"native_op","(JJIJ)Z", (void*) SkPathGlue::op},
+    {"native_approximate", "(JF)[F", (void*) SkPathGlue::approximate},
 };
 
 int register_android_graphics_Path(JNIEnv* env) {
diff --git a/core/jni/android/graphics/PathEffect.cpp b/core/jni/android/graphics/PathEffect.cpp
index 2803758..28d881d 100644
--- a/core/jni/android/graphics/PathEffect.cpp
+++ b/core/jni/android/graphics/PathEffect.cpp
@@ -20,7 +20,7 @@
                                      jlong outerHandle, jlong innerHandle) {
         SkPathEffect* outer = reinterpret_cast<SkPathEffect*>(outerHandle);
         SkPathEffect* inner = reinterpret_cast<SkPathEffect*>(innerHandle);
-        SkPathEffect* effect = new SkComposePathEffect(outer, inner);
+        SkPathEffect* effect = SkComposePathEffect::Create(outer, inner);
         return reinterpret_cast<jlong>(effect);
     }
 
@@ -28,22 +28,20 @@
                                  jlong firstHandle, jlong secondHandle) {
         SkPathEffect* first = reinterpret_cast<SkPathEffect*>(firstHandle);
         SkPathEffect* second = reinterpret_cast<SkPathEffect*>(secondHandle);
-        SkPathEffect* effect = new SkSumPathEffect(first, second);
+        SkPathEffect* effect = SkSumPathEffect::Create(first, second);
         return reinterpret_cast<jlong>(effect);
     }
 
     static jlong Dash_constructor(JNIEnv* env, jobject,
                                       jfloatArray intervalArray, jfloat phase) {
         AutoJavaFloatArray autoInterval(env, intervalArray);
-        int     count = autoInterval.length() & ~1;  // even number
-        float*  values = autoInterval.ptr();
-
-        SkAutoSTMalloc<32, SkScalar>    storage(count);
-        SkScalar*                       intervals = storage.get();
-        for (int i = 0; i < count; i++) {
-            intervals[i] = SkFloatToScalar(values[i]);
-        }
-        SkPathEffect* effect = new SkDashPathEffect(intervals, count, SkFloatToScalar(phase));
+        int         count = autoInterval.length() & ~1;  // even number
+#ifdef SK_SCALAR_IS_FLOAT
+        SkScalar*   intervals = autoInterval.ptr();
+#else
+        #error Need to convert float array to SkScalar array before calling the following function.
+#endif
+        SkPathEffect* effect = SkDashPathEffect::Create(intervals, count, phase);
         return reinterpret_cast<jlong>(effect);
     }
 
@@ -51,20 +49,19 @@
                   jlong shapeHandle, jfloat advance, jfloat phase, jint style) {
         const SkPath* shape = reinterpret_cast<SkPath*>(shapeHandle);
         SkASSERT(shape != NULL);
-        SkPathEffect* effect = new SkPath1DPathEffect(*shape, SkFloatToScalar(advance),
-                     SkFloatToScalar(phase), (SkPath1DPathEffect::Style)style);
+        SkPathEffect* effect = SkPath1DPathEffect::Create(*shape, advance, phase,
+                (SkPath1DPathEffect::Style)style);
         return reinterpret_cast<jlong>(effect);
     }
 
     static jlong Corner_constructor(JNIEnv* env, jobject, jfloat radius){
-        SkPathEffect* effect = new SkCornerPathEffect(SkFloatToScalar(radius));
+        SkPathEffect* effect = SkCornerPathEffect::Create(radius);
         return reinterpret_cast<jlong>(effect);
     }
 
     static jlong Discrete_constructor(JNIEnv* env, jobject,
                                       jfloat length, jfloat deviation) {
-        SkPathEffect* effect = new SkDiscretePathEffect(SkFloatToScalar(length),
-                                        SkFloatToScalar(deviation));
+        SkPathEffect* effect = SkDiscretePathEffect::Create(length, deviation);
         return reinterpret_cast<jlong>(effect);
     }
 
diff --git a/core/jni/android/graphics/PathMeasure.cpp b/core/jni/android/graphics/PathMeasure.cpp
index 8478a02..13f68a9 100644
--- a/core/jni/android/graphics/PathMeasure.cpp
+++ b/core/jni/android/graphics/PathMeasure.cpp
@@ -96,7 +96,7 @@
         SkScalar*   posPtr = pos ? tmpPos : NULL;
         SkScalar*   tanPtr = tan ? tmpTan : NULL;
         
-        if (!pair->fMeasure.getPosTan(SkFloatToScalar(dist), (SkPoint*)posPtr, (SkVector*)tanPtr)) {
+        if (!pair->fMeasure.getPosTan(dist, (SkPoint*)posPtr, (SkVector*)tanPtr)) {
             return JNI_FALSE;
         }
     
@@ -113,7 +113,7 @@
                           jlong matrixHandle, jint flags) {
         PathMeasurePair* pair = reinterpret_cast<PathMeasurePair*>(pairHandle);
         SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
-        bool result = pair->fMeasure.getMatrix(SkFloatToScalar(dist), matrix, (SkPathMeasure::MatrixFlags)flags);
+        bool result = pair->fMeasure.getMatrix(dist, matrix, (SkPathMeasure::MatrixFlags)flags);
         return result ? JNI_TRUE : JNI_FALSE;
     }
 
@@ -121,7 +121,7 @@
                                jfloat stopF, jlong dstHandle, jboolean startWithMoveTo) {
         PathMeasurePair* pair = reinterpret_cast<PathMeasurePair*>(pairHandle);
         SkPath* dst = reinterpret_cast<SkPath*>(dstHandle);
-        bool result = pair->fMeasure.getSegment(SkFloatToScalar(startF), SkFloatToScalar(stopF), dst, startWithMoveTo);
+        bool result = pair->fMeasure.getSegment(startF, stopF, dst, startWithMoveTo);
         return result ? JNI_TRUE : JNI_FALSE;
     }
 
diff --git a/core/jni/android/graphics/Shader.cpp b/core/jni/android/graphics/Shader.cpp
index 3047440..b389d9e 100644
--- a/core/jni/android/graphics/Shader.cpp
+++ b/core/jni/android/graphics/Shader.cpp
@@ -39,12 +39,11 @@
 static jint Color_HSVToColor(JNIEnv* env, jobject, jint alpha, jfloatArray hsvArray)
 {
     AutoJavaFloatArray  autoHSV(env, hsvArray, 3);
-    float*      values = autoHSV.ptr();;
-    SkScalar    hsv[3];
-
-    for (int i = 0; i < 3; i++) {
-        hsv[i] = SkFloatToScalar(values[i]);
-    }
+#ifdef SK_SCALAR_IS_FLOAT
+    SkScalar*   hsv = autoHSV.ptr();
+#else
+    #error Need to convert float array to SkScalar array before calling the following function.
+#endif
 
     return static_cast<jint>(SkHSVToColor(alpha, hsv));
 }
@@ -106,7 +105,7 @@
 #ifdef USE_OPENGL_RENDERER
     SkiaShader* skiaShader = new SkiaBitmapShader(bitmap, shader,
             static_cast<SkShader::TileMode>(tileModeX), static_cast<SkShader::TileMode>(tileModeY),
-            NULL, (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
+            NULL, !shader->isOpaque());
     return reinterpret_cast<jlong>(skiaShader);
 #else
     return NULL;
@@ -120,28 +119,22 @@
                                     jintArray colorArray, jfloatArray posArray, jint tileMode)
 {
     SkPoint pts[2];
-    pts[0].set(SkFloatToScalar(x0), SkFloatToScalar(y0));
-    pts[1].set(SkFloatToScalar(x1), SkFloatToScalar(y1));
+    pts[0].set(x0, y0);
+    pts[1].set(x1, y1);
 
     size_t count = env->GetArrayLength(colorArray);
     const jint* colorValues = env->GetIntArrayElements(colorArray, NULL);
 
-    SkAutoSTMalloc<8, SkScalar> storage(posArray ? count : 0);
-    SkScalar* pos = NULL;
-
-    if (posArray) {
-        AutoJavaFloatArray autoPos(env, posArray, count);
-        const float* posValues = autoPos.ptr();
-        pos = (SkScalar*)storage.get();
-        for (size_t i = 0; i < count; i++) {
-            pos[i] = SkFloatToScalar(posValues[i]);
-        }
-    }
+    AutoJavaFloatArray autoPos(env, posArray, count);
+#ifdef SK_SCALAR_IS_FLOAT
+    SkScalar* pos = autoPos.ptr();
+#else
+    #error Need to convert float array to SkScalar array before calling the following function.
+#endif
 
     SkShader* shader = SkGradientShader::CreateLinear(pts,
-                                reinterpret_cast<const SkColor*>(colorValues),
-                                pos, count,
-                                static_cast<SkShader::TileMode>(tileMode));
+            reinterpret_cast<const SkColor*>(colorValues), pos, count,
+            static_cast<SkShader::TileMode>(tileMode));
 
     env->ReleaseIntArrayElements(colorArray, const_cast<jint*>(colorValues), JNI_ABORT);
     ThrowIAE_IfNull(env, shader);
@@ -212,7 +205,7 @@
 
     SkiaShader* skiaShader = new SkiaLinearGradientShader(storedBounds, storedColors,
             storedPositions, stopCount, shader, static_cast<SkShader::TileMode>(tileMode), NULL,
-            (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
+            !shader->isOpaque());
 
     env->ReleaseIntArrayElements(colorArray, const_cast<jint*>(colorValues), JNI_ABORT);
     return reinterpret_cast<jlong>(skiaShader);
@@ -239,7 +232,7 @@
 
     SkiaShader* skiaShader = new SkiaLinearGradientShader(storedBounds, storedColors,
             storedPositions, 2, shader, static_cast<SkShader::TileMode>(tileMode), NULL,
-            (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
+            !shader->isOpaque());
 
     return reinterpret_cast<jlong>(skiaShader);
 #else
@@ -252,8 +245,8 @@
                                     jint color0, jint color1, jint tileMode)
 {
     SkPoint pts[2];
-    pts[0].set(SkFloatToScalar(x0), SkFloatToScalar(y0));
-    pts[1].set(SkFloatToScalar(x1), SkFloatToScalar(y1));
+    pts[0].set(x0, y0);
+    pts[1].set(x1, y1);
 
     SkColor colors[2];
     colors[0] = color0;
@@ -270,27 +263,21 @@
 static jlong RadialGradient_create1(JNIEnv* env, jobject, jfloat x, jfloat y, jfloat radius,
         jintArray colorArray, jfloatArray posArray, jint tileMode) {
     SkPoint center;
-    center.set(SkFloatToScalar(x), SkFloatToScalar(y));
+    center.set(x, y);
 
     size_t      count = env->GetArrayLength(colorArray);
     const jint* colorValues = env->GetIntArrayElements(colorArray, NULL);
 
-    SkAutoSTMalloc<8, SkScalar> storage(posArray ? count : 0);
-    SkScalar*                   pos = NULL;
+    AutoJavaFloatArray autoPos(env, posArray, count);
+#ifdef SK_SCALAR_IS_FLOAT
+    SkScalar* pos = autoPos.ptr();
+#else
+    #error Need to convert float array to SkScalar array before calling the following function.
+#endif
 
-    if (posArray) {
-        AutoJavaFloatArray autoPos(env, posArray, count);
-        const float* posValues = autoPos.ptr();
-        pos = (SkScalar*)storage.get();
-        for (size_t i = 0; i < count; i++)
-            pos[i] = SkFloatToScalar(posValues[i]);
-    }
-
-    SkShader* shader = SkGradientShader::CreateRadial(center,
-                                SkFloatToScalar(radius),
-                                reinterpret_cast<const SkColor*>(colorValues),
-                                pos, count,
-                                static_cast<SkShader::TileMode>(tileMode));
+    SkShader* shader = SkGradientShader::CreateRadial(center, radius,
+            reinterpret_cast<const SkColor*>(colorValues), pos, count,
+            static_cast<SkShader::TileMode>(tileMode));
     env->ReleaseIntArrayElements(colorArray, const_cast<jint*>(colorValues),
                                  JNI_ABORT);
 
@@ -301,14 +288,14 @@
 static jlong RadialGradient_create2(JNIEnv* env, jobject, jfloat x, jfloat y, jfloat radius,
         jint color0, jint color1, jint tileMode) {
     SkPoint center;
-    center.set(SkFloatToScalar(x), SkFloatToScalar(y));
+    center.set(x, y);
 
     SkColor colors[2];
     colors[0] = color0;
     colors[1] = color1;
 
-    SkShader* s = SkGradientShader::CreateRadial(center, SkFloatToScalar(radius), colors, NULL,
-                                          2, (SkShader::TileMode)tileMode);
+    SkShader* s = SkGradientShader::CreateRadial(center, radius, colors, NULL, 2,
+            (SkShader::TileMode)tileMode);
     ThrowIAE_IfNull(env, s);
     return reinterpret_cast<jlong>(s);
 }
@@ -343,7 +330,7 @@
 
     SkiaShader* skiaShader = new SkiaCircularGradientShader(x, y, radius, storedColors,
             storedPositions, count, shader, (SkShader::TileMode) tileMode, NULL,
-            (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
+            !shader->isOpaque());
 
     env->ReleaseIntArrayElements(colorArray, const_cast<jint*>(colorValues), JNI_ABORT);
     return reinterpret_cast<jlong>(skiaShader);
@@ -366,7 +353,7 @@
 
     SkiaShader* skiaShader = new SkiaCircularGradientShader(x, y, radius, storedColors,
             storedPositions, 2, shader, (SkShader::TileMode) tileMode, NULL,
-            (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
+            !shader->isOpaque());
 
     return reinterpret_cast<jlong>(skiaShader);
 #else
@@ -381,22 +368,15 @@
     size_t      count = env->GetArrayLength(jcolors);
     const jint* colors = env->GetIntArrayElements(jcolors, NULL);
 
-    SkAutoSTMalloc<8, SkScalar> storage(jpositions ? count : 0);
-    SkScalar*                   pos = NULL;
+    AutoJavaFloatArray autoPos(env, jpositions, count);
+#ifdef SK_SCALAR_IS_FLOAT
+    SkScalar* pos = autoPos.ptr();
+#else
+    #error Need to convert float array to SkScalar array before calling the following function.
+#endif
 
-    if (NULL != jpositions) {
-        AutoJavaFloatArray autoPos(env, jpositions, count);
-        const float* posValues = autoPos.ptr();
-        pos = (SkScalar*)storage.get();
-        for (size_t i = 0; i < count; i++) {
-            pos[i] = SkFloatToScalar(posValues[i]);
-        }
-    }
-
-    SkShader* shader = SkGradientShader::CreateSweep(SkFloatToScalar(x),
-                                     SkFloatToScalar(y),
-                                     reinterpret_cast<const SkColor*>(colors),
-                                     pos, count);
+    SkShader* shader = SkGradientShader::CreateSweep(x, y,
+            reinterpret_cast<const SkColor*>(colors), pos, count);
     env->ReleaseIntArrayElements(jcolors, const_cast<jint*>(colors),
                                  JNI_ABORT);
     ThrowIAE_IfNull(env, shader);
@@ -408,8 +388,7 @@
     SkColor colors[2];
     colors[0] = color0;
     colors[1] = color1;
-    SkShader* s = SkGradientShader::CreateSweep(SkFloatToScalar(x), SkFloatToScalar(y),
-                                         colors, NULL, 2);
+    SkShader* s = SkGradientShader::CreateSweep(x, y, colors, NULL, 2);
     ThrowIAE_IfNull(env, s);
     return reinterpret_cast<jlong>(s);
 }
@@ -443,7 +422,7 @@
     }
 
     SkiaShader* skiaShader = new SkiaSweepGradientShader(x, y, storedColors, storedPositions, count,
-            shader, NULL, (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
+            shader, NULL, !shader->isOpaque());
 
     env->ReleaseIntArrayElements(colorArray, const_cast<jint*>(colorValues), JNI_ABORT);
     return reinterpret_cast<jlong>(skiaShader);
@@ -465,7 +444,7 @@
     storedColors[1] = static_cast<uint32_t>(color1);
 
     SkiaShader* skiaShader = new SkiaSweepGradientShader(x, y, storedColors, storedPositions, 2,
-            shader, NULL, (shader->getFlags() & SkShader::kOpaqueAlpha_Flag) == 0);
+            shader, NULL, !shader->isOpaque());
 
     return reinterpret_cast<jlong>(skiaShader);
 #else
@@ -520,7 +499,7 @@
     SkiaShader* shaderB = reinterpret_cast<SkiaShader *>(shaderBHandle);
     SkXfermode* mode = reinterpret_cast<SkXfermode *>(modeHandle);
     SkXfermode::Mode skiaMode;
-    if (!SkXfermode::IsMode(mode, &skiaMode)) {
+    if (!SkXfermode::AsMode(mode, &skiaMode)) {
         // TODO: Support other modes
         skiaMode = SkXfermode::kSrcOver_Mode;
     }
diff --git a/core/jni/android/graphics/SurfaceTexture.cpp b/core/jni/android/graphics/SurfaceTexture.cpp
index 3116955..b78b131 100644
--- a/core/jni/android/graphics/SurfaceTexture.cpp
+++ b/core/jni/android/graphics/SurfaceTexture.cpp
@@ -43,7 +43,7 @@
 
 struct fields_t {
     jfieldID  surfaceTexture;
-    jfieldID  bufferQueue;
+    jfieldID  producer;
     jfieldID  frameAvailableListener;
     jmethodID postEvent;
 };
@@ -65,18 +65,18 @@
     env->SetLongField(thiz, fields.surfaceTexture, (jlong)surfaceTexture.get());
 }
 
-static void SurfaceTexture_setBufferQueue(JNIEnv* env, jobject thiz,
-        const sp<BufferQueue>& bq)
+static void SurfaceTexture_setProducer(JNIEnv* env, jobject thiz,
+        const sp<IGraphicBufferProducer>& producer)
 {
-    BufferQueue* const p =
-        (BufferQueue*)env->GetLongField(thiz, fields.bufferQueue);
-    if (bq.get()) {
-        bq->incStrong((void*)SurfaceTexture_setBufferQueue);
+    IGraphicBufferProducer* const p =
+        (IGraphicBufferProducer*)env->GetLongField(thiz, fields.producer);
+    if (producer.get()) {
+        producer->incStrong((void*)SurfaceTexture_setProducer);
     }
     if (p) {
-        p->decStrong((void*)SurfaceTexture_setBufferQueue);
+        p->decStrong((void*)SurfaceTexture_setProducer);
     }
-    env->SetLongField(thiz, fields.bufferQueue, (jlong)bq.get());
+    env->SetLongField(thiz, fields.producer, (jlong)producer.get());
 }
 
 static void SurfaceTexture_setFrameAvailableListener(JNIEnv* env,
@@ -99,7 +99,7 @@
 }
 
 sp<IGraphicBufferProducer> SurfaceTexture_getProducer(JNIEnv* env, jobject thiz) {
-    return (BufferQueue*)env->GetLongField(thiz, fields.bufferQueue);
+    return (IGraphicBufferProducer*)env->GetLongField(thiz, fields.producer);
 }
 
 sp<ANativeWindow> android_SurfaceTexture_getNativeWindow(JNIEnv* env, jobject thiz) {
@@ -141,7 +141,8 @@
     *needsDetach = false;
     JNIEnv* env = AndroidRuntime::getJNIEnv();
     if (env == NULL) {
-        JavaVMAttachArgs args = {JNI_VERSION_1_4, NULL, NULL};
+        JavaVMAttachArgs args = {
+            JNI_VERSION_1_4, "JNISurfaceTextureContext", NULL };
         JavaVM* vm = AndroidRuntime::getJavaVM();
         int result = vm->AttachCurrentThread(&env, (void*) &args);
         if (result != JNI_OK) {
@@ -194,7 +195,7 @@
 
 
 #define ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID "mSurfaceTexture"
-#define ANDROID_GRAPHICS_BUFFERQUEUE_JNI_ID "mBufferQueue"
+#define ANDROID_GRAPHICS_PRODUCER_JNI_ID "mProducer"
 #define ANDROID_GRAPHICS_FRAMEAVAILABLELISTENER_JNI_ID \
                                          "mFrameAvailableListener"
 
@@ -206,11 +207,11 @@
         ALOGE("can't find android/graphics/SurfaceTexture.%s",
                 ANDROID_GRAPHICS_SURFACETEXTURE_JNI_ID);
     }
-    fields.bufferQueue = env->GetFieldID(clazz,
-            ANDROID_GRAPHICS_BUFFERQUEUE_JNI_ID, "J");
-    if (fields.bufferQueue == NULL) {
+    fields.producer = env->GetFieldID(clazz,
+            ANDROID_GRAPHICS_PRODUCER_JNI_ID, "J");
+    if (fields.producer == NULL) {
         ALOGE("can't find android/graphics/SurfaceTexture.%s",
-                ANDROID_GRAPHICS_BUFFERQUEUE_JNI_ID);
+                ANDROID_GRAPHICS_PRODUCER_JNI_ID);
     }
     fields.frameAvailableListener = env->GetFieldID(clazz,
             ANDROID_GRAPHICS_FRAMEAVAILABLELISTENER_JNI_ID, "J");
@@ -229,21 +230,24 @@
 static void SurfaceTexture_init(JNIEnv* env, jobject thiz,
         jint texName, jboolean singleBufferMode, jobject weakThiz)
 {
-    sp<BufferQueue> bq = new BufferQueue();
+    sp<IGraphicBufferProducer> producer;
+    sp<IGraphicBufferConsumer> consumer;
+    BufferQueue::createBufferQueue(&producer, &consumer);
 
     if (singleBufferMode) {
-        bq->disableAsyncBuffer();
-        bq->setDefaultMaxBufferCount(1);
+        consumer->disableAsyncBuffer();
+        consumer->setDefaultMaxBufferCount(1);
     }
 
-    sp<GLConsumer> surfaceTexture(new GLConsumer(bq, texName, GL_TEXTURE_EXTERNAL_OES, true, true));
+    sp<GLConsumer> surfaceTexture(new GLConsumer(consumer, texName,
+            GL_TEXTURE_EXTERNAL_OES, true, true));
     if (surfaceTexture == 0) {
         jniThrowException(env, OutOfResourcesException,
                 "Unable to create native SurfaceTexture");
         return;
     }
     SurfaceTexture_setSurfaceTexture(env, thiz, surfaceTexture);
-    SurfaceTexture_setBufferQueue(env, thiz, bq);
+    SurfaceTexture_setProducer(env, thiz, producer);
 
     jclass clazz = env->GetObjectClass(thiz);
     if (clazz == NULL) {
@@ -264,7 +268,7 @@
     surfaceTexture->setFrameAvailableListener(0);
     SurfaceTexture_setFrameAvailableListener(env, thiz, 0);
     SurfaceTexture_setSurfaceTexture(env, thiz, 0);
-    SurfaceTexture_setBufferQueue(env, thiz, 0);
+    SurfaceTexture_setProducer(env, thiz, 0);
 }
 
 static void SurfaceTexture_setDefaultBufferSize(
diff --git a/core/jni/android/graphics/TextLayout.cpp b/core/jni/android/graphics/TextLayout.cpp
index 34dc3e8..d0b6f7c 100644
--- a/core/jni/android/graphics/TextLayout.cpp
+++ b/core/jni/android/graphics/TextLayout.cpp
@@ -58,10 +58,8 @@
     if (value == NULL) {
         return ;
     }
-    SkScalar x_ = SkFloatToScalar(x);
-    SkScalar y_ = SkFloatToScalar(y);
     // Beware: this needs Glyph encoding (already done on the Paint constructor)
-    paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x_, y_, path);
+    paint->getTextPath(value->getGlyphs(), value->getGlyphsCount() * 2, x, y, path);
 }
 
 void TextLayout::getTextRunAdvances(SkPaint* paint, const jchar* chars, jint start,
@@ -90,9 +88,6 @@
                                 int bidiFlags, jfloat hOffset, jfloat vOffset,
                                 SkPath* path, SkCanvas* canvas) {
 
-    SkScalar h_ = SkFloatToScalar(hOffset);
-    SkScalar v_ = SkFloatToScalar(vOffset);
-
     sp<TextLayoutValue> value = TextLayoutEngine::getInstance().getValue(paint,
             text, 0, count, count, bidiFlags);
     if (value == NULL) {
@@ -100,7 +95,8 @@
     }
 
     // Beware: this needs Glyph encoding (already done on the Paint constructor)
-    canvas->drawTextOnPathHV(value->getGlyphs(), value->getGlyphsCount() * 2, *path, h_, v_, *paint);
+    canvas->drawTextOnPathHV(value->getGlyphs(), value->getGlyphsCount() * 2, *path,
+            hOffset, vOffset, *paint);
 }
 
 }
diff --git a/core/jni/android/graphics/TextLayoutCache.cpp b/core/jni/android/graphics/TextLayoutCache.cpp
index 5db083a..9279758 100644
--- a/core/jni/android/graphics/TextLayoutCache.cpp
+++ b/core/jni/android/graphics/TextLayoutCache.cpp
@@ -492,7 +492,7 @@
     (((ucs) & 0xfc00) == 0xdc00)
 
 #ifndef HB_SurrogateToUcs4
-#define HB_SurrogateToUcs4_(high, low) \
+#define HB_SurrogateToUcs4(high, low) \
     (((hb_codepoint_t)(high))<<10) + (low) - 0x35fdc00;
 #endif
 
@@ -784,7 +784,7 @@
     if (typeface) {
         currentStyle = typeface->style();
     }
-    typeface = SkCreateTypefaceForScriptNG(script, currentStyle);
+    typeface = SkCreateTypefaceForScript(script, currentStyle);
 #if DEBUG_GLYPHS
     ALOGD("Using Harfbuzz Script %c%c%c%c, Style %d", HB_UNTAG(script), currentStyle);
 #endif
diff --git a/core/jni/android/graphics/Typeface.cpp b/core/jni/android/graphics/Typeface.cpp
index 8164625..a349a7f 100644
--- a/core/jni/android/graphics/Typeface.cpp
+++ b/core/jni/android/graphics/Typeface.cpp
@@ -1,10 +1,26 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
 #include "jni.h"
 #include <android_runtime/AndroidRuntime.h>
 
 #include "GraphicsJNI.h"
 #include "SkStream.h"
 #include "SkTypeface.h"
-#include "Utils.h"
+#include "TypefaceImpl.h"
 #include <android_runtime/android_util_AssetManager.h>
 #include <androidfw/AssetManager.h>
 
@@ -31,57 +47,49 @@
 static jlong Typeface_create(JNIEnv* env, jobject, jstring name,
                              jint styleHandle) {
     SkTypeface::Style style = static_cast<SkTypeface::Style>(styleHandle);
-    SkTypeface* face = NULL;
+    TypefaceImpl* face = NULL;
 
     if (NULL != name) {
         AutoJavaStringToUTF8    str(env, name);
-        face = SkTypeface::CreateFromName(str.c_str(), style);
-        // Try to find the closest matching font, using the standard heuristic
-        if (NULL == face) {
-            face = SkTypeface::CreateFromName(str.c_str(), (SkTypeface::Style)(style ^ SkTypeface::kItalic));
-        }
-        for (int i = 0; NULL == face && i < 4; i++) {
-            face = SkTypeface::CreateFromName(str.c_str(), (SkTypeface::Style)i);
-        }
+        face = TypefaceImpl_createFromName(str.c_str(), style);
     }
 
     // return the default font at the best style if no exact match exists
     if (NULL == face) {
-        face = SkTypeface::CreateFromName(NULL, style);
+        face = TypefaceImpl_createFromName(NULL, style);
     }
     return reinterpret_cast<jlong>(face);
 }
 
 static jlong Typeface_createFromTypeface(JNIEnv* env, jobject, jlong familyHandle, jint style) {
     SkTypeface* family = reinterpret_cast<SkTypeface*>(familyHandle);
-    SkTypeface* face = SkTypeface::CreateFromTypeface(family, (SkTypeface::Style)style);
+    TypefaceImpl* face = TypefaceImpl_createFromTypeface(family, (SkTypeface::Style)style);
     // Try to find the closest matching font, using the standard heuristic
     if (NULL == face) {
-        face = SkTypeface::CreateFromTypeface(family, (SkTypeface::Style)(style ^ SkTypeface::kItalic));
+        face = TypefaceImpl_createFromTypeface(family, (SkTypeface::Style)(style ^ SkTypeface::kItalic));
     }
     for (int i = 0; NULL == face && i < 4; i++) {
-        face = SkTypeface::CreateFromTypeface(family, (SkTypeface::Style)i);
+        face = TypefaceImpl_createFromTypeface(family, (SkTypeface::Style)i);
     }
     if (NULL == face) {
-        face = SkTypeface::CreateFromName(NULL, (SkTypeface::Style)style);
+        face = TypefaceImpl_createFromName(NULL, (SkTypeface::Style)style);
     }
     return reinterpret_cast<jlong>(face);
 }
 
 static void Typeface_unref(JNIEnv* env, jobject obj, jlong faceHandle) {
-    SkTypeface* face = reinterpret_cast<SkTypeface*>(faceHandle);
-    SkSafeUnref(face);
+    TypefaceImpl* face = reinterpret_cast<TypefaceImpl*>(faceHandle);
+    TypefaceImpl_unref(face);
 }
 
 static jint Typeface_getStyle(JNIEnv* env, jobject obj, jlong faceHandle) {
-    SkTypeface* face = reinterpret_cast<SkTypeface*>(faceHandle);
-    return static_cast<jint>(face->style());
+    TypefaceImpl* face = reinterpret_cast<TypefaceImpl*>(faceHandle);
+    return TypefaceImpl_getStyle(face);
 }
 
 static jlong Typeface_createFromAsset(JNIEnv* env, jobject,
                                       jobject jassetMgr,
                                       jstring jpath) {
-
     NPE_CHECK_RETURN_ZERO(env, jassetMgr);
     NPE_CHECK_RETURN_ZERO(env, jpath);
 
@@ -90,29 +98,20 @@
         return NULL;
     }
 
-    AutoJavaStringToUTF8    str(env, jpath);
+    AutoJavaStringToUTF8 str(env, jpath);
     Asset* asset = mgr->open(str.c_str(), Asset::ACCESS_BUFFER);
     if (NULL == asset) {
         return NULL;
     }
 
-    SkStream* stream = new AssetStreamAdaptor(asset,
-                                              AssetStreamAdaptor::kYes_OwnAsset,
-                                              AssetStreamAdaptor::kYes_HasMemoryBase);
-    SkTypeface* face = SkTypeface::CreateFromStream(stream);
-    // SkTypeFace::CreateFromStream calls ref() on the stream, so we
-    // need to unref it here or it won't be freed later on
-    stream->unref();
-
-    return reinterpret_cast<jlong>(face);
+    return reinterpret_cast<jlong>(TypefaceImpl_createFromAsset(asset));
 }
 
 static jlong Typeface_createFromFile(JNIEnv* env, jobject, jstring jpath) {
     NPE_CHECK_RETURN_ZERO(env, jpath);
 
     AutoJavaStringToUTF8 str(env, jpath);
-
-    return reinterpret_cast<jlong>(SkTypeface::CreateFromFile(str.c_str()));
+    return reinterpret_cast<jlong>(TypefaceImpl_createFromFile(str.c_str()));
 }
 
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/core/jni/android/graphics/TypefaceImpl.cpp b/core/jni/android/graphics/TypefaceImpl.cpp
new file mode 100644
index 0000000..f6d3a6e
--- /dev/null
+++ b/core/jni/android/graphics/TypefaceImpl.cpp
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+/**
+ * This is the implementation of the Typeface object. Historically, it has
+ * just been SkTypeface, but we are migrating to Minikin. For the time
+ * being, that choice is hidden under the USE_MINIKIN compile-time flag.
+ */
+
+#include "SkStream.h"
+#include "SkTypeface.h"
+
+#ifdef USE_MINIKIN
+#include <vector>
+#include <minikin/FontCollection.h>
+#include <minikin/FontFamily.h>
+#include <minikin/Layout.h>
+#include "MinikinSkia.h"
+#endif
+
+#include "TypefaceImpl.h"
+#include "Utils.h"
+
+namespace android {
+
+#ifdef USE_MINIKIN
+
+// Any weight greater than or equal to this is considered "bold" for
+// legacy API.
+static const int kBoldThreshold = 6;
+
+static FontStyle styleFromSkiaStyle(SkTypeface::Style skiaStyle) {
+    int weight = (skiaStyle & SkTypeface::kBold) != 0 ? 7 : 4;
+    bool italic = (skiaStyle & SkTypeface::kItalic) != 0;
+    return FontStyle(weight, italic);
+}
+
+TypefaceImpl* gDefaultTypeface;
+pthread_once_t gDefaultTypefaceOnce = PTHREAD_ONCE_INIT;
+
+// TODO: this currently builds a font collection from hardcoded paths.
+// It will get replaced by an implementation that parses the XML files.
+static FontCollection *makeFontCollection() {
+    std::vector<FontFamily *>typefaces;
+    const char *fns[] = {
+        "/system/fonts/Roboto-Regular.ttf",
+        "/system/fonts/Roboto-Italic.ttf",
+        "/system/fonts/Roboto-BoldItalic.ttf",
+        "/system/fonts/Roboto-Light.ttf",
+        "/system/fonts/Roboto-Thin.ttf",
+        "/system/fonts/Roboto-Bold.ttf",
+        "/system/fonts/Roboto-ThinItalic.ttf",
+        "/system/fonts/Roboto-LightItalic.ttf"
+    };
+
+    FontFamily *family = new FontFamily();
+    for (size_t i = 0; i < sizeof(fns)/sizeof(fns[0]); i++) {
+        const char *fn = fns[i];
+        SkTypeface *skFace = SkTypeface::CreateFromFile(fn);
+        MinikinFont *font = new MinikinFontSkia(skFace);
+        family->addFont(font);
+    }
+    typefaces.push_back(family);
+
+    family = new FontFamily();
+    const char *fn = "/system/fonts/NotoSansDevanagari-Regular.ttf";
+    SkTypeface *skFace = SkTypeface::CreateFromFile(fn);
+    MinikinFont *font = new MinikinFontSkia(skFace);
+    family->addFont(font);
+    typefaces.push_back(family);
+
+    return new FontCollection(typefaces);
+}
+
+static void getDefaultTypefaceOnce() {
+    Layout::init();
+    gDefaultTypeface = new TypefaceImpl;
+    gDefaultTypeface->fFontCollection = makeFontCollection();
+    gDefaultTypeface->fStyle = FontStyle();
+}
+
+TypefaceImpl* TypefaceImpl_resolveDefault(TypefaceImpl* src) {
+    if (src == NULL) {
+        pthread_once(&gDefaultTypefaceOnce, getDefaultTypefaceOnce);
+        return gDefaultTypeface;
+    } else {
+        return src;
+    }
+}
+
+TypefaceImpl* TypefaceImpl_createFromTypeface(TypefaceImpl* src, SkTypeface::Style style) {
+    TypefaceImpl* resolvedFace = TypefaceImpl_resolveDefault(src);
+    TypefaceImpl* result = new TypefaceImpl;
+    if (result != 0) {
+        result->fFontCollection = resolvedFace->fFontCollection;
+        result->fStyle = styleFromSkiaStyle(style);
+    }
+    return result;
+}
+
+static TypefaceImpl* createFromSkTypeface(SkTypeface* typeface) {
+    MinikinFont* minikinFont = new MinikinFontSkia(typeface);
+    std::vector<FontFamily *> typefaces;
+    FontFamily* family = new FontFamily();
+    family->addFont(minikinFont);
+    typefaces.push_back(family);
+    TypefaceImpl* result = new TypefaceImpl;
+    result->fFontCollection = new FontCollection(typefaces);
+    result->fStyle = FontStyle();  // TODO: improve
+    return result;
+}
+
+TypefaceImpl* TypefaceImpl_createFromName(const char* name, SkTypeface::Style style) {
+    // TODO: should create a font collection with all styles corresponding to
+    // the name
+    SkTypeface* face = SkTypeface::CreateFromName(name, style);
+    return createFromSkTypeface(face);
+}
+
+TypefaceImpl* TypefaceImpl_createFromFile(const char* filename) {
+    SkTypeface* face = SkTypeface::CreateFromFile(filename);
+    return createFromSkTypeface(face);
+}
+
+TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) {
+    SkStream* stream = new AssetStreamAdaptor(asset,
+                                              AssetStreamAdaptor::kYes_OwnAsset,
+                                              AssetStreamAdaptor::kYes_HasMemoryBase);
+    SkTypeface* face = SkTypeface::CreateFromStream(stream);
+    // SkTypeFace::CreateFromStream calls ref() on the stream, so we
+    // need to unref it here or it won't be freed later on
+    stream->unref();
+    return createFromSkTypeface(face);
+}
+
+void TypefaceImpl_unref(TypefaceImpl* face) {
+    delete face;
+}
+
+int TypefaceImpl_getStyle(TypefaceImpl* face) {
+    FontStyle style = face->fStyle;
+    int result = style.getItalic() ? SkTypeface::kItalic : 0;
+    if (style.getWeight() >= kBoldThreshold) {
+        result |= SkTypeface::kBold;
+    }
+    return result;
+}
+
+#else  // USE_MINIKIN
+
+/* Just use SkTypeface instead. */
+
+typedef SkTypeface TypefaceImpl;
+
+TypefaceImpl* TypefaceImpl_createFromTypeface(TypefaceImpl* src, SkTypeface::Style style) {
+    return SkTypeface::CreateFromTypeface(src, style);
+}
+
+TypefaceImpl* TypefaceImpl_createFromName(const char* name, SkTypeface::Style style) {
+    return SkTypeface::CreateFromName(name, style);
+}
+
+TypefaceImpl* TypefaceImpl_createFromFile(const char* filename) {
+    return SkTypeface::CreateFromFile(filename);
+}
+
+TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset) {
+    SkStream* stream = new AssetStreamAdaptor(asset,
+                                              AssetStreamAdaptor::kYes_OwnAsset,
+                                              AssetStreamAdaptor::kYes_HasMemoryBase);
+    SkTypeface* face = SkTypeface::CreateFromStream(stream);
+    // SkTypeFace::CreateFromStream calls ref() on the stream, so we
+    // need to unref it here or it won't be freed later on
+    stream->unref();
+
+    return face;
+}
+
+void TypefaceImpl_unref(TypefaceImpl* face) {
+    SkSafeUnref(face);
+}
+
+int TypefaceImpl_getStyle(TypefaceImpl* face) {
+    return face->style();
+}
+
+#endif  // USE_MINIKIN
+
+}
diff --git a/core/jni/android/graphics/TypefaceImpl.h b/core/jni/android/graphics/TypefaceImpl.h
new file mode 100644
index 0000000..4c51bec
--- /dev/null
+++ b/core/jni/android/graphics/TypefaceImpl.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+
+#ifndef ANDROID_TYPEFACE_IMPL_H
+#define ANDROID_TYPEFACE_IMPL_H
+
+#include <androidfw/AssetManager.h>
+
+#ifdef USE_MINIKIN
+#include <minikin/FontCollection.h>
+#endif
+
+namespace android {
+
+#ifdef USE_MINIKIN
+struct TypefaceImpl {
+    FontCollection *fFontCollection;
+    FontStyle fStyle;
+};
+
+// Note: it would be cleaner if the following functions were member
+// functions (static or otherwise) of the TypefaceImpl class. However,
+// that can't be easily accommodated in the case where TypefaceImpl
+// is just a pointer to SkTypeface, in the non-USE_MINIKIN case.
+// TODO: when #ifdef USE_MINIKIN is removed, move to member functions.
+
+TypefaceImpl* TypefaceImpl_resolveDefault(TypefaceImpl* src);
+#else
+typedef SkTypeface TypefaceImpl;
+#endif
+
+TypefaceImpl* TypefaceImpl_createFromTypeface(TypefaceImpl* src, SkTypeface::Style style);
+
+TypefaceImpl* TypefaceImpl_createFromName(const char* name, SkTypeface::Style style);
+
+TypefaceImpl* TypefaceImpl_createFromFile(const char* filename);
+
+TypefaceImpl* TypefaceImpl_createFromAsset(Asset* asset);
+
+void TypefaceImpl_unref(TypefaceImpl* face);
+
+int TypefaceImpl_getStyle(TypefaceImpl* face);
+
+}
+
+#endif  // ANDROID_TYPEFACE_IMPL_H
\ No newline at end of file
diff --git a/core/jni/android/graphics/Utils.cpp b/core/jni/android/graphics/Utils.cpp
index eb416cb..a134d4b 100644
--- a/core/jni/android/graphics/Utils.cpp
+++ b/core/jni/android/graphics/Utils.cpp
@@ -52,7 +52,6 @@
 }
 
 SkStreamRewindable* AssetStreamAdaptor::duplicate() const {
-    SkASSERT(false);
     // Cannot create a duplicate, since each AssetStreamAdaptor
     // would be modifying the Asset.
     //return new AssetStreamAdaptor(fAsset);
diff --git a/core/jni/android/graphics/Xfermode.cpp b/core/jni/android/graphics/Xfermode.cpp
index eedceb7..6bf6f8a 100644
--- a/core/jni/android/graphics/Xfermode.cpp
+++ b/core/jni/android/graphics/Xfermode.cpp
@@ -36,12 +36,12 @@
                                 jint tolerance, jint modeHandle)
     {
         SkAvoidXfermode::Mode mode = static_cast<SkAvoidXfermode::Mode>(modeHandle);
-        return reinterpret_cast<jlong>(new SkAvoidXfermode(opColor, tolerance, mode));
+        return reinterpret_cast<jlong>(SkAvoidXfermode::Create(opColor, tolerance, mode));
     }
 
     static jlong pixelxor_create(JNIEnv* env, jobject, jint opColor)
     {
-        return reinterpret_cast<jlong>(new SkPixelXorXfermode(opColor));
+        return reinterpret_cast<jlong>(SkPixelXorXfermode::Create(opColor));
     }
 };
 
diff --git a/core/jni/android/opengl/util.cpp b/core/jni/android/opengl/util.cpp
index a17f328..a91c622 100644
--- a/core/jni/android/opengl/util.cpp
+++ b/core/jni/android/opengl/util.cpp
@@ -27,7 +27,7 @@
 #include <GLES/gl.h>
 #include <ETC1/etc1.h>
 
-#include <core/SkBitmap.h>
+#include <SkBitmap.h>
 
 #include "android_runtime/AndroidRuntime.h"
 
diff --git a/core/jni/android_animation_PropertyValuesHolder.cpp b/core/jni/android_animation_PropertyValuesHolder.cpp
index 1e3ec18..ef1c4ed 100644
--- a/core/jni/android_animation_PropertyValuesHolder.cpp
+++ b/core/jni/android_animation_PropertyValuesHolder.cpp
@@ -47,6 +47,32 @@
     return reinterpret_cast<jlong>(mid);
 }
 
+static jlong getMultiparameterMethod(JNIEnv* env, jclass targetClass, jstring methodName,
+    jint parameterCount, char parameterType)
+{
+    const char *nativeString = env->GetStringUTFChars(methodName, 0);
+    char *signature = new char[parameterCount + 4];
+    signature[0] = '(';
+    memset(&(signature[1]), parameterType, parameterCount);
+    strcpy(&(signature[parameterCount + 1]), ")V");
+    jmethodID mid = env->GetMethodID(targetClass, nativeString, signature);
+    delete[] signature;
+    env->ReleaseStringUTFChars(methodName, nativeString);
+    return reinterpret_cast<jlong>(mid);
+}
+
+static jlong android_animation_PropertyValuesHolder_getMultipleFloatMethod(
+        JNIEnv* env, jclass pvhClass, jclass targetClass, jstring methodName, jint parameterCount)
+{
+    return getMultiparameterMethod(env, targetClass, methodName, parameterCount, 'F');
+}
+
+static jlong android_animation_PropertyValuesHolder_getMultipleIntMethod(
+        JNIEnv* env, jclass pvhClass, jclass targetClass, jstring methodName, jint parameterCount)
+{
+    return getMultiparameterMethod(env, targetClass, methodName, parameterCount, 'I');
+}
+
 static void android_animation_PropertyValuesHolder_callIntMethod(
         JNIEnv* env, jclass pvhObject, jobject target, jlong methodID, jint arg)
 {
@@ -59,15 +85,85 @@
     env->CallVoidMethod(target, reinterpret_cast<jmethodID>(methodID), arg);
 }
 
+static void android_animation_PropertyValuesHolder_callTwoFloatMethod(
+        JNIEnv* env, jclass pvhObject, jobject target, jlong methodID, float arg1, float arg2)
+{
+    env->CallVoidMethod(target, reinterpret_cast<jmethodID>(methodID), arg1, arg2);
+}
+
+static void android_animation_PropertyValuesHolder_callFourFloatMethod(
+        JNIEnv* env, jclass pvhObject, jobject target, jlong methodID, float arg1, float arg2,
+        float arg3, float arg4)
+{
+    env->CallVoidMethod(target, reinterpret_cast<jmethodID>(methodID), arg1, arg2, arg3, arg4);
+}
+
+static void android_animation_PropertyValuesHolder_callMultipleFloatMethod(
+        JNIEnv* env, jclass pvhObject, jobject target, jlong methodID, jfloatArray arg)
+{
+    jsize parameterCount = env->GetArrayLength(arg);
+    jfloat *floatValues = env->GetFloatArrayElements(arg, NULL);
+    jvalue* values = new jvalue[parameterCount];
+    for (int i = 0; i < parameterCount; i++) {
+        values[i].f = floatValues[i];
+    }
+    env->CallVoidMethodA(target, reinterpret_cast<jmethodID>(methodID), values);
+    delete[] values;
+    env->ReleaseFloatArrayElements(arg, floatValues, JNI_ABORT);
+}
+
+static void android_animation_PropertyValuesHolder_callTwoIntMethod(
+        JNIEnv* env, jclass pvhObject, jobject target, jlong methodID, int arg1, int arg2)
+{
+    env->CallVoidMethod(target, reinterpret_cast<jmethodID>(methodID), arg1, arg2);
+}
+
+static void android_animation_PropertyValuesHolder_callFourIntMethod(
+        JNIEnv* env, jclass pvhObject, jobject target, jlong methodID, int arg1, int arg2,
+        int arg3, int arg4)
+{
+    env->CallVoidMethod(target, reinterpret_cast<jmethodID>(methodID), arg1, arg2, arg3, arg4);
+}
+
+static void android_animation_PropertyValuesHolder_callMultipleIntMethod(
+        JNIEnv* env, jclass pvhObject, jobject target, jlong methodID, jintArray arg)
+{
+    jsize parameterCount = env->GetArrayLength(arg);
+    jint *intValues = env->GetIntArrayElements(arg, NULL);
+    jvalue* values = new jvalue[parameterCount];
+    for (int i = 0; i < parameterCount; i++) {
+        values[i].i = intValues[i];
+    }
+    env->CallVoidMethodA(target, reinterpret_cast<jmethodID>(methodID), values);
+    delete[] values;
+    env->ReleaseIntArrayElements(arg, intValues, JNI_ABORT);
+}
+
 static JNINativeMethod gMethods[] = {
     {   "nGetIntMethod", "(Ljava/lang/Class;Ljava/lang/String;)J",
             (void*)android_animation_PropertyValuesHolder_getIntMethod },
     {   "nGetFloatMethod", "(Ljava/lang/Class;Ljava/lang/String;)J",
             (void*)android_animation_PropertyValuesHolder_getFloatMethod },
+    {   "nGetMultipleFloatMethod", "(Ljava/lang/Class;Ljava/lang/String;I)J",
+            (void*)android_animation_PropertyValuesHolder_getMultipleFloatMethod },
+    {   "nGetMultipleIntMethod", "(Ljava/lang/Class;Ljava/lang/String;I)J",
+            (void*)android_animation_PropertyValuesHolder_getMultipleIntMethod },
     {   "nCallIntMethod", "(Ljava/lang/Object;JI)V",
             (void*)android_animation_PropertyValuesHolder_callIntMethod },
     {   "nCallFloatMethod", "(Ljava/lang/Object;JF)V",
-            (void*)android_animation_PropertyValuesHolder_callFloatMethod }
+            (void*)android_animation_PropertyValuesHolder_callFloatMethod },
+    {   "nCallTwoFloatMethod", "(Ljava/lang/Object;JFF)V",
+            (void*)android_animation_PropertyValuesHolder_callTwoFloatMethod },
+    {   "nCallFourFloatMethod", "(Ljava/lang/Object;JFFFF)V",
+            (void*)android_animation_PropertyValuesHolder_callFourFloatMethod },
+    {   "nCallMultipleFloatMethod", "(Ljava/lang/Object;J[F)V",
+            (void*)android_animation_PropertyValuesHolder_callMultipleFloatMethod },
+    {   "nCallTwoIntMethod", "(Ljava/lang/Object;JII)V",
+            (void*)android_animation_PropertyValuesHolder_callTwoIntMethod },
+    {   "nCallFourIntMethod", "(Ljava/lang/Object;JIIII)V",
+            (void*)android_animation_PropertyValuesHolder_callFourIntMethod },
+    {   "nCallMultipleIntMethod", "(Ljava/lang/Object;J[I)V",
+            (void*)android_animation_PropertyValuesHolder_callMultipleIntMethod },
 };
 
 int register_android_animation_PropertyValuesHolder(JNIEnv* env)
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp
index 58b61ba..307293f 100644
--- a/core/jni/android_hardware_Camera.cpp
+++ b/core/jni/android_hardware_Camera.cpp
@@ -230,7 +230,7 @@
         ssize_t offset;
         size_t size;
         sp<IMemoryHeap> heap = dataPtr->getMemory(&offset, &size);
-        ALOGV("copyAndPost: off=%ld, size=%d", offset, size);
+        ALOGV("copyAndPost: off=%zd, size=%zu", offset, size);
         uint8_t *heapBase = (uint8_t*)heap->base();
 
         if (heapBase != NULL) {
diff --git a/core/jni/android_hardware_SensorManager.cpp b/core/jni/android_hardware_SensorManager.cpp
index 7a4728d..fcf8f83e 100644
--- a/core/jni/android_hardware_SensorManager.cpp
+++ b/core/jni/android_hardware_SensorManager.cpp
@@ -160,7 +160,6 @@
         ASensorEvent buffer[16];
         while ((n = q->read(buffer, 16)) > 0) {
             for (int i=0 ; i<n ; i++) {
-
                 if (buffer[i].type == SENSOR_TYPE_STEP_COUNTER) {
                     // step-counter returns a uint64, but the java API only deals with floats
                     float value = float(buffer[i].u64.step_counter);
@@ -183,17 +182,17 @@
                                         buffer[i].vector.status,
                                         buffer[i].timestamp);
                 }
-
                 if (env->ExceptionCheck()) {
+                    mSensorQueue->sendAck(buffer, n);
                     ALOGE("Exception dispatching input event.");
                     return 1;
                 }
             }
+            mSensorQueue->sendAck(buffer, n);
         }
         if (n<0 && n != -EAGAIN) {
             // FIXME: error receiving events, what to do in this case?
         }
-
         return 1;
     }
 };
diff --git a/core/jni/android_hardware_UsbDeviceConnection.cpp b/core/jni/android_hardware_UsbDeviceConnection.cpp
index c10b963f..467a9a1 100644
--- a/core/jni/android_hardware_UsbDeviceConnection.cpp
+++ b/core/jni/android_hardware_UsbDeviceConnection.cpp
@@ -123,20 +123,45 @@
     return (ret == 0) ? JNI_TRUE : JNI_FALSE;
 }
 
-static jint
+static jboolean
 android_hardware_UsbDeviceConnection_release_interface(JNIEnv *env, jobject thiz, jint interfaceID)
 {
     struct usb_device* device = get_device_from_object(env, thiz);
     if (!device) {
         ALOGE("device is closed in native_release_interface");
-        return -1;
+        return JNI_FALSE;
     }
     int ret = usb_device_release_interface(device, interfaceID);
     if (ret == 0) {
         // allow kernel to reconnect its driver
         usb_device_connect_kernel_driver(device, interfaceID, true);
     }
-    return ret;
+    return (ret == 0) ? JNI_TRUE : JNI_FALSE;
+}
+
+static jboolean
+android_hardware_UsbDeviceConnection_set_interface(JNIEnv *env, jobject thiz, jint interfaceID,
+        jint alternateSetting)
+{
+    struct usb_device* device = get_device_from_object(env, thiz);
+    if (!device) {
+        ALOGE("device is closed in native_set_interface");
+        return JNI_FALSE;
+    }
+    int ret = usb_device_set_interface(device, interfaceID, alternateSetting);
+    return (ret == 0) ? JNI_TRUE : JNI_FALSE;
+}
+
+static jboolean
+android_hardware_UsbDeviceConnection_set_configuration(JNIEnv *env, jobject thiz, jint configurationID)
+{
+    struct usb_device* device = get_device_from_object(env, thiz);
+    if (!device) {
+        ALOGE("device is closed in native_set_configuration");
+        return JNI_FALSE;
+    }
+    int ret = usb_device_set_configuration(device, configurationID);
+    return (ret == 0) ? JNI_TRUE : JNI_FALSE;
 }
 
 static jint
@@ -229,6 +254,8 @@
     {"native_get_desc",         "()[B", (void *)android_hardware_UsbDeviceConnection_get_desc},
     {"native_claim_interface",  "(IZ)Z",(void *)android_hardware_UsbDeviceConnection_claim_interface},
     {"native_release_interface","(I)Z", (void *)android_hardware_UsbDeviceConnection_release_interface},
+    {"native_set_interface","(II)Z",    (void *)android_hardware_UsbDeviceConnection_set_interface},
+    {"native_set_configuration","(I)Z", (void *)android_hardware_UsbDeviceConnection_set_configuration},
     {"native_control_request",  "(IIII[BIII)I",
                                         (void *)android_hardware_UsbDeviceConnection_control_request},
     {"native_bulk_request",     "(I[BIII)I",
diff --git a/core/jni/android_hardware_camera2_CameraMetadata.cpp b/core/jni/android_hardware_camera2_CameraMetadata.cpp
index 3c7da1e..957f95c 100644
--- a/core/jni/android_hardware_camera2_CameraMetadata.cpp
+++ b/core/jni/android_hardware_camera2_CameraMetadata.cpp
@@ -19,13 +19,18 @@
 // #define LOG_NNDEBUG 0
 #define LOG_TAG "CameraMetadata-JNI"
 #include <utils/Log.h>
+#include <utils/RefBase.h>
+#include <string.h>
 
 #include "jni.h"
 #include "JNIHelp.h"
 #include "android_os_Parcel.h"
 #include "android_runtime/AndroidRuntime.h"
 
+#include <binder/IServiceManager.h>
 #include <camera/CameraMetadata.h>
+#include <camera/ICameraService.h>
+#include <camera/VendorTagDescriptor.h>
 #include <nativehelper/ScopedUtfChars.h>
 #include <nativehelper/ScopedPrimitiveArray.h>
 
@@ -112,6 +117,7 @@
 static void CameraMetadata_classInit(JNIEnv *env, jobject thiz);
 static jint CameraMetadata_getTagFromKey(JNIEnv *env, jobject thiz, jstring keyName);
 static jint CameraMetadata_getTypeFromTag(JNIEnv *env, jobject thiz, jint tag);
+static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jobject thiz);
 
 // Less safe access to native pointer. Does NOT throw any Java exceptions if NULL.
 static CameraMetadata* CameraMetadata_getPointerNoThrow(JNIEnv *env, jobject thiz) {
@@ -372,6 +378,9 @@
   { "nativeGetTypeFromTag",
     "(I)I",
     (void *)CameraMetadata_getTypeFromTag },
+  { "nativeSetupGlobalVendorTagDescriptor",
+    "()I",
+    (void*)CameraMetadata_setupGlobalVendorTagDescriptor },
 // instance methods
   { "nativeAllocate",
     "()J",
@@ -556,4 +565,34 @@
     return tagType;
 }
 
+static jint CameraMetadata_setupGlobalVendorTagDescriptor(JNIEnv *env, jobject thiz) {
+    const String16 NAME("media.camera");
+    sp<ICameraService> cameraService;
+    status_t err = getService(NAME, /*out*/&cameraService);
+
+    if (err != OK) {
+        ALOGE("%s: Failed to get camera service, received error %s (%d)", __FUNCTION__,
+                strerror(-err), err);
+        return err;
+    }
+
+    sp<VendorTagDescriptor> desc;
+    err = cameraService->getCameraVendorTagDescriptor(/*out*/desc);
+
+    if (err == -EOPNOTSUPP) {
+        ALOGW("%s: Camera HAL too old; does not support vendor tags", __FUNCTION__);
+        VendorTagDescriptor::clearGlobalVendorTagDescriptor();
+
+        return OK;
+    } else if (err != OK) {
+        ALOGE("%s: Failed to setup vendor tag descriptors, received error %s (%d)",
+                __FUNCTION__, strerror(-err), err);
+        return err;
+    }
+
+    err = VendorTagDescriptor::setAsGlobalVendorTagDescriptor(desc);
+
+    return err;
+}
+
 } // extern "C"
diff --git a/core/jni/android_media_AudioFormat.h b/core/jni/android_media_AudioFormat.h
new file mode 100644
index 0000000..f4bab26
--- /dev/null
+++ b/core/jni/android_media_AudioFormat.h
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef ANDROID_MEDIA_AUDIOFORMAT_H
+#define ANDROID_MEDIA_AUDIOFORMAT_H
+
+#include <system/audio.h>
+
+// keep these values in sync with AudioFormat.java
+#define ENCODING_PCM_16BIT 2
+#define ENCODING_PCM_8BIT  3
+
+static inline audio_format_t audioFormatToNative(int audioFormat)
+{
+    switch (audioFormat) {
+    case ENCODING_PCM_16BIT:
+        return AUDIO_FORMAT_PCM_16_BIT;
+    case ENCODING_PCM_8BIT:
+        return AUDIO_FORMAT_PCM_8_BIT;
+    default:
+        return AUDIO_FORMAT_INVALID;
+    }
+}
+
+#endif // ANDROID_MEDIA_AUDIOFORMAT_H
diff --git a/core/jni/android_media_AudioRecord.cpp b/core/jni/android_media_AudioRecord.cpp
index ab70f25..09bdc61 100644
--- a/core/jni/android_media_AudioRecord.cpp
+++ b/core/jni/android_media_AudioRecord.cpp
@@ -26,7 +26,7 @@
 #include <utils/Log.h>
 #include <media/AudioRecord.h>
 
-#include <system/audio.h>
+#include "android_media_AudioFormat.h"
 
 // ----------------------------------------------------------------------------
 
@@ -50,10 +50,6 @@
     Condition   cond;
 };
 
-// keep these values in sync with AudioFormat.java
-#define ENCODING_PCM_16BIT 2
-#define ENCODING_PCM_8BIT  3
-
 static Mutex sLock;
 static SortedVector <audiorecord_callback_cookie *> sAudioRecordCallBackCookies;
 
@@ -82,7 +78,6 @@
     }
 }
 
-
 // ----------------------------------------------------------------------------
 static void recorderCallback(int event, void* user, void *info) {
 
@@ -171,28 +166,26 @@
         ALOGE("Error creating AudioRecord: channel mask %#x is not valid.", channelMask);
         return (jint) AUDIORECORD_ERROR_SETUP_INVALIDCHANNELMASK;
     }
-    uint32_t nbChannels = popcount(channelMask);
+    uint32_t channelCount = popcount(channelMask);
 
     // compare the format against the Java constants
-    if ((audioFormat != ENCODING_PCM_16BIT)
-        && (audioFormat != ENCODING_PCM_8BIT)) {
-        ALOGE("Error creating AudioRecord: unsupported audio format.");
+    audio_format_t format = audioFormatToNative(audioFormat);
+    if (format == AUDIO_FORMAT_INVALID) {
+        ALOGE("Error creating AudioRecord: unsupported audio format %d.", audioFormat);
         return (jint) AUDIORECORD_ERROR_SETUP_INVALIDFORMAT;
     }
 
-    int bytesPerSample = audioFormat == ENCODING_PCM_16BIT ? 2 : 1;
-    audio_format_t format = audioFormat == ENCODING_PCM_16BIT ?
-            AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT;
+    size_t bytesPerSample = audio_bytes_per_sample(format);
 
     if (buffSizeInBytes == 0) {
          ALOGE("Error creating AudioRecord: frameCount is 0.");
         return (jint) AUDIORECORD_ERROR_SETUP_ZEROFRAMECOUNT;
     }
-    int frameSize = nbChannels * bytesPerSample;
+    size_t frameSize = channelCount * bytesPerSample;
     size_t frameCount = buffSizeInBytes / frameSize;
 
     if ((uint32_t(source) >= AUDIO_SOURCE_CNT) && (uint32_t(source) != AUDIO_SOURCE_HOTWORD)) {
-        ALOGE("Error creating AudioRecord: unknown source.");
+        ALOGE("Error creating AudioRecord: unknown source %d.", source);
         return (jint) AUDIORECORD_ERROR_SETUP_INVALIDSOURCE;
     }
 
@@ -227,7 +220,7 @@
     lpCallbackData->audioRecord_ref = env->NewGlobalRef(weak_this);
     lpCallbackData->busy = false;
 
-    lpRecorder->set((audio_source_t) source,
+    const status_t status = lpRecorder->set((audio_source_t) source,
         sampleRateInHertz,
         format,        // word length, PCM
         channelMask,
@@ -238,8 +231,9 @@
         true,          // threadCanCallJava
         sessionId);
 
-    if (lpRecorder->initCheck() != NO_ERROR) {
-        ALOGE("Error creating AudioRecord instance: initialization check failed.");
+    if (status != NO_ERROR) {
+        ALOGE("Error creating AudioRecord instance: initialization check failed with status %d.",
+                status);
         goto native_init_failure;
     }
 
@@ -317,7 +311,7 @@
     if (lpRecorder == NULL) {
         return;
     }
-    ALOGV("About to delete lpRecorder: %" PRIxPTR "\n", lpRecorder.get());
+    ALOGV("About to delete lpRecorder: %p", lpRecorder.get());
     lpRecorder->stop();
 
     audiorecord_callback_cookie *lpCookie = (audiorecord_callback_cookie *)env->GetLongField(
@@ -330,7 +324,7 @@
     // delete the callback information
     if (lpCookie) {
         Mutex::Autolock l(sLock);
-        ALOGV("deleting lpCookie: %" PRIxPTR "\n", lpCookie);
+        ALOGV("deleting lpCookie: %p", lpCookie);
         while (lpCookie->busy) {
             if (lpCookie->cond.waitRelative(sLock,
                                             milliseconds(CALLBACK_COND_WAIT_TIMEOUT_MS)) !=
@@ -399,13 +393,46 @@
                                                         jshortArray javaAudioData,
                                                         jint offsetInShorts, jint sizeInShorts) {
 
-    jint read = android_media_AudioRecord_readInByteArray(env, thiz,
-                                                        (jbyteArray) javaAudioData,
-                                                        offsetInShorts*2, sizeInShorts*2);
-    if (read > 0) {
-        read /= 2;
+    jshort* recordBuff = NULL;
+    // get the audio recorder from which we'll read new audio samples
+    sp<AudioRecord> lpRecorder = getAudioRecord(env, thiz);
+    if (lpRecorder == NULL) {
+        ALOGE("Unable to retrieve AudioRecord object, can't record");
+        return 0;
     }
-    return read;
+
+    if (!javaAudioData) {
+        ALOGE("Invalid Java array to store recorded audio, can't record");
+        return 0;
+    }
+
+    // get the pointer to where we'll record the audio
+    // NOTE: We may use GetPrimitiveArrayCritical() when the JNI implementation changes in such
+    // a way that it becomes much more efficient. When doing so, we will have to prevent the
+    // AudioSystem callback to be called while in critical section (in case of media server
+    // process crash for instance)
+    recordBuff = (jshort *)env->GetShortArrayElements(javaAudioData, NULL);
+
+    if (recordBuff == NULL) {
+        ALOGE("Error retrieving destination for recorded audio data, can't record");
+        return 0;
+    }
+
+    // read the new audio data from the native AudioRecord object
+    const size_t recorderBuffSize = lpRecorder->frameCount()*lpRecorder->frameSize();
+    const size_t sizeInBytes = sizeInShorts * sizeof(short);
+    ssize_t readSize = lpRecorder->read(recordBuff + offsetInShorts * sizeof(short),
+                                        sizeInBytes > recorderBuffSize ?
+                                            recorderBuffSize : sizeInBytes);
+
+    env->ReleaseShortArrayElements(javaAudioData, recordBuff, 0);
+
+    if (readSize < 0) {
+        readSize = AUDIORECORD_ERROR_INVALID_OPERATION;
+    } else {
+        readSize /= sizeof(short);
+    }
+    return (jint) readSize;
 }
 
 // ----------------------------------------------------------------------------
@@ -506,17 +533,17 @@
 // returns 0 if the parameter combination is not supported.
 // return -1 if there was an error querying the buffer size.
 static jint android_media_AudioRecord_get_min_buff_size(JNIEnv *env,  jobject thiz,
-    jint sampleRateInHertz, jint nbChannels, jint audioFormat) {
+    jint sampleRateInHertz, jint channelCount, jint audioFormat) {
 
     ALOGV(">> android_media_AudioRecord_get_min_buff_size(%d, %d, %d)",
-          sampleRateInHertz, nbChannels, audioFormat);
+          sampleRateInHertz, channelCount, audioFormat);
 
     size_t frameCount = 0;
+    audio_format_t format = audioFormatToNative(audioFormat);
     status_t result = AudioRecord::getMinFrameCount(&frameCount,
             sampleRateInHertz,
-            (audioFormat == ENCODING_PCM_16BIT ?
-                AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT),
-            audio_channel_in_mask_from_count(nbChannels));
+            format,
+            audio_channel_in_mask_from_count(channelCount));
 
     if (result == BAD_VALUE) {
         return 0;
@@ -524,7 +551,7 @@
     if (result != NO_ERROR) {
         return -1;
     }
-    return frameCount * nbChannels * (audioFormat == ENCODING_PCM_16BIT ? 2 : 1);
+    return frameCount * channelCount * audio_bytes_per_sample(format);
 }
 
 
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index a19d111..a9a62f8 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -100,7 +100,7 @@
         c_keyValuePairs8 = String8(c_keyValuePairs, env->GetStringLength(keyValuePairs));
         env->ReleaseStringCritical(keyValuePairs, c_keyValuePairs);
     }
-    int status = check_AudioSystem_Command(AudioSystem::setParameters(0, c_keyValuePairs8));
+    int status = check_AudioSystem_Command(AudioSystem::setParameters(c_keyValuePairs8));
     return (jint) status;
 }
 
@@ -113,7 +113,7 @@
         c_keys8 = String8(c_keys, env->GetStringLength(keys));
         env->ReleaseStringCritical(keys, c_keys);
     }
-    return env->NewStringUTF(AudioSystem::getParameters(0, c_keys8).string());
+    return env->NewStringUTF(AudioSystem::getParameters(c_keys8).string());
 }
 
 static void
diff --git a/core/jni/android_media_AudioTrack.cpp b/core/jni/android_media_AudioTrack.cpp
index dc8d9d8..da752752 100644
--- a/core/jni/android_media_AudioTrack.cpp
+++ b/core/jni/android_media_AudioTrack.cpp
@@ -17,18 +17,21 @@
 
 #define LOG_TAG "AudioTrack-JNI"
 
-#include <jni.h>
 #include <JNIHelp.h>
+#include <JniConstants.h>
 #include <android_runtime/AndroidRuntime.h>
 
+#include "ScopedBytes.h"
+
 #include <utils/Log.h>
 #include <media/AudioSystem.h>
 #include <media/AudioTrack.h>
+#include <audio_utils/primitives.h>
 
 #include <binder/MemoryHeapBase.h>
 #include <binder/MemoryBase.h>
 
-#include <system/audio.h>
+#include "android_media_AudioFormat.h"
 
 // ----------------------------------------------------------------------------
 
@@ -55,9 +58,6 @@
 // keep these values in sync with AudioTrack.java
 #define MODE_STATIC 0
 #define MODE_STREAM 1
-// keep these values in sync with AudioFormat.java
-#define ENCODING_PCM_16BIT 2
-#define ENCODING_PCM_8BIT  3
 
 // ----------------------------------------------------------------------------
 class AudioTrackJniStorage {
@@ -195,7 +195,7 @@
 
 // ----------------------------------------------------------------------------
 static jint
-android_media_AudioTrack_native_setup(JNIEnv *env, jobject thiz, jobject weak_this,
+android_media_AudioTrack_setup(JNIEnv *env, jobject thiz, jobject weak_this,
         jint streamType, jint sampleRateInHertz, jint javaChannelMask,
         jint audioFormat, jint buffSizeInBytes, jint memoryMode, jintArray jSession)
 {
@@ -204,25 +204,30 @@
     uint32_t afSampleRate;
     size_t afFrameCount;
 
-    if (AudioSystem::getOutputFrameCount(&afFrameCount, (audio_stream_type_t) streamType) != NO_ERROR) {
-        ALOGE("Error creating AudioTrack: Could not get AudioSystem frame count.");
+    status_t status = AudioSystem::getOutputFrameCount(&afFrameCount,
+            (audio_stream_type_t) streamType);
+    if (status != NO_ERROR) {
+        ALOGE("Error %d creating AudioTrack: Could not get AudioSystem frame count "
+              "for stream type %d.", status, streamType);
         return (jint) AUDIOTRACK_ERROR_SETUP_AUDIOSYSTEM;
     }
-    if (AudioSystem::getOutputSamplingRate(&afSampleRate, (audio_stream_type_t) streamType) != NO_ERROR) {
-        ALOGE("Error creating AudioTrack: Could not get AudioSystem sampling rate.");
+    status = AudioSystem::getOutputSamplingRate(&afSampleRate, (audio_stream_type_t) streamType);
+    if (status != NO_ERROR) {
+        ALOGE("Error %d creating AudioTrack: Could not get AudioSystem sampling rate "
+              "for stream type %d.", status, streamType);
         return (jint) AUDIOTRACK_ERROR_SETUP_AUDIOSYSTEM;
     }
 
     // Java channel masks don't map directly to the native definition, but it's a simple shift
     // to skip the two deprecated channel configurations "default" and "mono".
-    uint32_t nativeChannelMask = ((uint32_t)javaChannelMask) >> 2;
+    audio_channel_mask_t nativeChannelMask = ((uint32_t)javaChannelMask) >> 2;
 
     if (!audio_is_output_channel(nativeChannelMask)) {
         ALOGE("Error creating AudioTrack: invalid channel mask %#x.", javaChannelMask);
         return (jint) AUDIOTRACK_ERROR_SETUP_INVALIDCHANNELMASK;
     }
 
-    int nbChannels = popcount(nativeChannelMask);
+    uint32_t channelCount = popcount(nativeChannelMask);
 
     // check the stream type
     audio_stream_type_t atStreamType;
@@ -238,36 +243,34 @@
         atStreamType = (audio_stream_type_t) streamType;
         break;
     default:
-        ALOGE("Error creating AudioTrack: unknown stream type.");
+        ALOGE("Error creating AudioTrack: unknown stream type %d.", streamType);
         return (jint) AUDIOTRACK_ERROR_SETUP_INVALIDSTREAMTYPE;
     }
 
     // check the format.
     // This function was called from Java, so we compare the format against the Java constants
-    if ((audioFormat != ENCODING_PCM_16BIT) && (audioFormat != ENCODING_PCM_8BIT)) {
-
-        ALOGE("Error creating AudioTrack: unsupported audio format.");
+    audio_format_t format = audioFormatToNative(audioFormat);
+    if (format == AUDIO_FORMAT_INVALID) {
+        ALOGE("Error creating AudioTrack: unsupported audio format %d.", audioFormat);
         return (jint) AUDIOTRACK_ERROR_SETUP_INVALIDFORMAT;
     }
 
     // for the moment 8bitPCM in MODE_STATIC is not supported natively in the AudioTrack C++ class
     // so we declare everything as 16bitPCM, the 8->16bit conversion for MODE_STATIC will be handled
     // in android_media_AudioTrack_native_write_byte()
-    if ((audioFormat == ENCODING_PCM_8BIT)
+    if ((format == AUDIO_FORMAT_PCM_8_BIT)
         && (memoryMode == MODE_STATIC)) {
-        ALOGV("android_media_AudioTrack_native_setup(): requesting MODE_STATIC for 8bit \
+        ALOGV("android_media_AudioTrack_setup(): requesting MODE_STATIC for 8bit \
             buff size of %dbytes, switching to 16bit, buff size of %dbytes",
             buffSizeInBytes, 2*buffSizeInBytes);
-        audioFormat = ENCODING_PCM_16BIT;
+        format = AUDIO_FORMAT_PCM_16_BIT;
         // we will need twice the memory to store the data
         buffSizeInBytes *= 2;
     }
 
     // compute the frame count
-    int bytesPerSample = audioFormat == ENCODING_PCM_16BIT ? 2 : 1;
-    audio_format_t format = audioFormat == ENCODING_PCM_16BIT ?
-            AUDIO_FORMAT_PCM_16_BIT : AUDIO_FORMAT_PCM_8_BIT;
-    int frameCount = buffSizeInBytes / (nbChannels * bytesPerSample);
+    const size_t bytesPerSample = audio_bytes_per_sample(format);
+    size_t frameCount = buffSizeInBytes / (channelCount * bytesPerSample);
 
     jclass clazz = env->GetObjectClass(thiz);
     if (clazz == NULL) {
@@ -305,7 +308,7 @@
     switch (memoryMode) {
     case MODE_STREAM:
 
-        lpTrack->set(
+        status = lpTrack->set(
             atStreamType,// stream type
             sampleRateInHertz,
             format,// word length, PCM
@@ -327,7 +330,7 @@
             goto native_init_failure;
         }
 
-        lpTrack->set(
+        status = lpTrack->set(
             atStreamType,// stream type
             sampleRateInHertz,
             format,// word length, PCM
@@ -346,8 +349,8 @@
         goto native_init_failure;
     }
 
-    if (lpTrack->initCheck() != NO_ERROR) {
-        ALOGE("Error initializing AudioTrack");
+    if (status != NO_ERROR) {
+        ALOGE("Error %d initializing AudioTrack", status);
         goto native_init_failure;
     }
 
@@ -465,7 +468,7 @@
 // ----------------------------------------------------------------------------
 
 #define CALLBACK_COND_WAIT_TIMEOUT_MS 1000
-static void android_media_AudioTrack_native_release(JNIEnv *env,  jobject thiz) {
+static void android_media_AudioTrack_release(JNIEnv *env,  jobject thiz) {
     sp<AudioTrack> lpTrack = setAudioTrack(env, thiz, 0);
     if (lpTrack == NULL) {
         return;
@@ -501,32 +504,44 @@
 
 
 // ----------------------------------------------------------------------------
-static void android_media_AudioTrack_native_finalize(JNIEnv *env,  jobject thiz) {
-    //ALOGV("android_media_AudioTrack_native_finalize jobject: %x\n", (int)thiz);
-    android_media_AudioTrack_native_release(env, thiz);
+static void android_media_AudioTrack_finalize(JNIEnv *env,  jobject thiz) {
+    //ALOGV("android_media_AudioTrack_finalize jobject: %x\n", (int)thiz);
+    android_media_AudioTrack_release(env, thiz);
 }
 
 // ----------------------------------------------------------------------------
-jint writeToTrack(const sp<AudioTrack>& track, jint audioFormat, jbyte* data,
-                  jint offsetInBytes, jint sizeInBytes) {
+jint writeToTrack(const sp<AudioTrack>& track, jint audioFormat, const jbyte* data,
+                  jint offsetInBytes, jint sizeInBytes, bool blocking = true) {
     // give the data to the native AudioTrack object (the data starts at the offset)
     ssize_t written = 0;
     // regular write() or copy the data to the AudioTrack's shared memory?
     if (track->sharedBuffer() == 0) {
-        written = track->write(data + offsetInBytes, sizeInBytes);
+        written = track->write(data + offsetInBytes, sizeInBytes, blocking);
         // for compatibility with earlier behavior of write(), return 0 in this case
         if (written == (ssize_t) WOULD_BLOCK) {
             written = 0;
         }
     } else {
-        if (audioFormat == ENCODING_PCM_16BIT) {
+        const audio_format_t format = audioFormatToNative(audioFormat);
+        switch (format) {
+
+        default:
+            // TODO Currently the only possible values for format are AUDIO_FORMAT_PCM_16_BIT
+            // and AUDIO_FORMAT_PCM_8_BIT, due to the limited set of values for audioFormat.
+            // The next section of the switch will probably work for more formats, but it has only
+            // been tested for AUDIO_FORMAT_PCM_16_BIT, so that's why the "default" case fails.
+            break;
+
+        case AUDIO_FORMAT_PCM_16_BIT: {
             // writing to shared memory, check for capacity
             if ((size_t)sizeInBytes > track->sharedBuffer()->size()) {
                 sizeInBytes = track->sharedBuffer()->size();
             }
             memcpy(track->sharedBuffer()->pointer(), data + offsetInBytes, sizeInBytes);
             written = sizeInBytes;
-        } else if (audioFormat == ENCODING_PCM_8BIT) {
+            } break;
+
+        case AUDIO_FORMAT_PCM_8_BIT: {
             // data contains 8bit data we need to expand to 16bit before copying
             // to the shared memory
             // writing to shared memory, check for capacity,
@@ -536,13 +551,13 @@
             }
             int count = sizeInBytes;
             int16_t *dst = (int16_t *)track->sharedBuffer()->pointer();
-            const int8_t *src = (const int8_t *)(data + offsetInBytes);
-            while (count--) {
-                *dst++ = (int16_t)(*src++^0x80) << 8;
-            }
+            const uint8_t *src = (const uint8_t *)(data + offsetInBytes);
+            memcpy_to_i16_from_u8(dst, src, count);
             // even though we wrote 2*sizeInBytes, we only report sizeInBytes as written to hide
             // the 8bit mixer restriction from the user of this function
             written = sizeInBytes;
+            } break;
+
         }
     }
     return written;
@@ -550,11 +565,12 @@
 }
 
 // ----------------------------------------------------------------------------
-static jint android_media_AudioTrack_native_write_byte(JNIEnv *env,  jobject thiz,
+static jint android_media_AudioTrack_write_byte(JNIEnv *env,  jobject thiz,
                                                   jbyteArray javaAudioData,
                                                   jint offsetInBytes, jint sizeInBytes,
-                                                  jint javaAudioFormat) {
-    //ALOGV("android_media_AudioTrack_native_write_byte(offset=%d, sizeInBytes=%d) called",
+                                                  jint javaAudioFormat,
+                                                  jboolean isWriteBlocking) {
+    //ALOGV("android_media_AudioTrack_write_byte(offset=%d, sizeInBytes=%d) called",
     //    offsetInBytes, sizeInBytes);
     sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
     if (lpTrack == NULL) {
@@ -580,7 +596,8 @@
         return 0;
     }
 
-    jint written = writeToTrack(lpTrack, javaAudioFormat, cAudioData, offsetInBytes, sizeInBytes);
+    jint written = writeToTrack(lpTrack, javaAudioFormat, cAudioData, offsetInBytes, sizeInBytes,
+            isWriteBlocking == JNI_TRUE /* blocking */);
 
     env->ReleaseByteArrayElements(javaAudioData, cAudioData, 0);
 
@@ -591,17 +608,72 @@
 
 
 // ----------------------------------------------------------------------------
-static jint android_media_AudioTrack_native_write_short(JNIEnv *env,  jobject thiz,
+static jint android_media_AudioTrack_write_native_bytes(JNIEnv *env,  jobject thiz,
+        jbyteArray javaBytes, jint byteOffset, jint sizeInBytes,
+        jint javaAudioFormat, jboolean isWriteBlocking) {
+    //ALOGV("android_media_AudioTrack_write_native_bytes(offset=%d, sizeInBytes=%d) called",
+    //    offsetInBytes, sizeInBytes);
+    sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
+    if (lpTrack == NULL) {
+        jniThrowException(env, "java/lang/IllegalStateException",
+                "Unable to retrieve AudioTrack pointer for write()");
+        return 0;
+    }
+
+    ScopedBytesRO bytes(env, javaBytes);
+    if (bytes.get() == NULL) {
+        ALOGE("Error retrieving source of audio data to play, can't play");
+        return AUDIOTRACK_ERROR_BAD_VALUE;
+    }
+
+    jint written = writeToTrack(lpTrack, javaAudioFormat, bytes.get(), byteOffset,
+            sizeInBytes, isWriteBlocking == JNI_TRUE /* blocking */);
+
+    return written;
+}
+
+// ----------------------------------------------------------------------------
+static jint android_media_AudioTrack_write_short(JNIEnv *env,  jobject thiz,
                                                   jshortArray javaAudioData,
                                                   jint offsetInShorts, jint sizeInShorts,
                                                   jint javaAudioFormat) {
-    jint written = android_media_AudioTrack_native_write_byte(env, thiz,
-                                                 (jbyteArray) javaAudioData,
-                                                 offsetInShorts*2, sizeInShorts*2,
-                                                 javaAudioFormat);
-    if (written > 0) {
-        written /= 2;
+
+    //ALOGV("android_media_AudioTrack_write_short(offset=%d, sizeInShorts=%d) called",
+    //    offsetInShorts, sizeInShorts);
+    sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
+    if (lpTrack == NULL) {
+        jniThrowException(env, "java/lang/IllegalStateException",
+            "Unable to retrieve AudioTrack pointer for write()");
+        return 0;
     }
+
+    // get the pointer for the audio data from the java array
+    // NOTE: We may use GetPrimitiveArrayCritical() when the JNI implementation changes in such
+    // a way that it becomes much more efficient. When doing so, we will have to prevent the
+    // AudioSystem callback to be called while in critical section (in case of media server
+    // process crash for instance)
+    jshort* cAudioData = NULL;
+    if (javaAudioData) {
+        cAudioData = (jshort *)env->GetShortArrayElements(javaAudioData, NULL);
+        if (cAudioData == NULL) {
+            ALOGE("Error retrieving source of audio data to play, can't play");
+            return 0; // out of memory or no data to load
+        }
+    } else {
+        ALOGE("NULL java array of audio data to play, can't play");
+        return 0;
+    }
+    jint written = writeToTrack(lpTrack, javaAudioFormat, (jbyte *)cAudioData,
+                                offsetInShorts * sizeof(short), sizeInShorts * sizeof(short),
+            true /*blocking write, legacy behavior*/);
+    env->ReleaseShortArrayElements(javaAudioData, cAudioData, 0);
+
+    if (written > 0) {
+        written /= sizeof(short);
+    }
+    //ALOGV("write wrote %d (tried %d) shorts in the native AudioTrack with offset %d",
+    //     (int)written, (int)(sizeInShorts), (int)offsetInShorts);
+
     return written;
 }
 
@@ -795,7 +867,7 @@
         jint javaStreamType) {
     uint32_t afSamplingRate;
     // convert the stream type from Java to native value
-    // FIXME: code duplication with android_media_AudioTrack_native_setup()
+    // FIXME: code duplication with android_media_AudioTrack_setup()
     audio_stream_type_t nativeStreamType;
     switch (javaStreamType) {
     case AUDIO_STREAM_VOICE_CALL:
@@ -813,9 +885,10 @@
         break;
     }
 
-    if (AudioSystem::getOutputSamplingRate(&afSamplingRate, nativeStreamType) != NO_ERROR) {
-        ALOGE("AudioSystem::getOutputSamplingRate() for stream type %d failed in AudioTrack JNI",
-            nativeStreamType);
+    status_t status = AudioSystem::getOutputSamplingRate(&afSamplingRate, nativeStreamType);
+    if (status != NO_ERROR) {
+        ALOGE("Error %d in AudioSystem::getOutputSamplingRate() for stream type %d "
+              "in AudioTrack JNI", status, nativeStreamType);
         return DEFAULT_OUTPUT_SAMPLE_RATE;
     } else {
         return afSamplingRate;
@@ -827,28 +900,38 @@
 // returns the minimum required size for the successful creation of a streaming AudioTrack
 // returns -1 if there was an error querying the hardware.
 static jint android_media_AudioTrack_get_min_buff_size(JNIEnv *env,  jobject thiz,
-    jint sampleRateInHertz, jint nbChannels, jint audioFormat) {
+    jint sampleRateInHertz, jint channelCount, jint audioFormat) {
 
-    size_t frameCount = 0;
-    if (AudioTrack::getMinFrameCount(&frameCount, AUDIO_STREAM_DEFAULT,
-            sampleRateInHertz) != NO_ERROR) {
+    size_t frameCount;
+    const status_t status = AudioTrack::getMinFrameCount(&frameCount, AUDIO_STREAM_DEFAULT,
+            sampleRateInHertz);
+    if (status != NO_ERROR) {
+        ALOGE("AudioTrack::getMinFrameCount() for sample rate %d failed with status %d",
+                sampleRateInHertz, status);
         return -1;
     }
-    return frameCount * nbChannels * (audioFormat == ENCODING_PCM_16BIT ? 2 : 1);
+    const audio_format_t format = audioFormatToNative(audioFormat);
+    const size_t bytesPerSample = audio_bytes_per_sample(format);
+    return frameCount * channelCount * bytesPerSample;
 }
 
 // ----------------------------------------------------------------------------
-static void
+static jint
 android_media_AudioTrack_setAuxEffectSendLevel(JNIEnv *env, jobject thiz, jfloat level )
 {
     sp<AudioTrack> lpTrack = getAudioTrack(env, thiz);
     if (lpTrack == NULL ) {
         jniThrowException(env, "java/lang/IllegalStateException",
             "Unable to retrieve AudioTrack pointer for setAuxEffectSendLevel()");
-        return;
+        return -1;
     }
 
-    lpTrack->setAuxEffectSendLevel(level);
+    status_t status = lpTrack->setAuxEffectSendLevel(level);
+    if (status != NO_ERROR) {
+        ALOGE("AudioTrack::setAuxEffectSendLevel() for level %g failed with status %d",
+                level, status);
+    }
+    return (jint) status;
 }
 
 // ----------------------------------------------------------------------------
@@ -872,11 +955,14 @@
     {"native_pause",         "()V",      (void *)android_media_AudioTrack_pause},
     {"native_flush",         "()V",      (void *)android_media_AudioTrack_flush},
     {"native_setup",         "(Ljava/lang/Object;IIIIII[I)I",
-                                         (void *)android_media_AudioTrack_native_setup},
-    {"native_finalize",      "()V",      (void *)android_media_AudioTrack_native_finalize},
-    {"native_release",       "()V",      (void *)android_media_AudioTrack_native_release},
-    {"native_write_byte",    "([BIII)I", (void *)android_media_AudioTrack_native_write_byte},
-    {"native_write_short",   "([SIII)I", (void *)android_media_AudioTrack_native_write_short},
+                                         (void *)android_media_AudioTrack_setup},
+    {"native_finalize",      "()V",      (void *)android_media_AudioTrack_finalize},
+    {"native_release",       "()V",      (void *)android_media_AudioTrack_release},
+    {"native_write_byte",    "([BIIIZ)I",(void *)android_media_AudioTrack_write_byte},
+    {"native_write_native_bytes",
+                             "(Ljava/lang/Object;IIIZ)I",
+                                         (void *)android_media_AudioTrack_write_native_bytes},
+    {"native_write_short",   "([SIII)I", (void *)android_media_AudioTrack_write_short},
     {"native_setVolume",     "(FF)V",    (void *)android_media_AudioTrack_set_volume},
     {"native_get_native_frame_count",
                              "()I",      (void *)android_media_AudioTrack_get_native_frame_count},
@@ -901,7 +987,7 @@
     {"native_get_min_buff_size",
                              "(III)I",   (void *)android_media_AudioTrack_get_min_buff_size},
     {"native_setAuxEffectSendLevel",
-                             "(F)V",     (void *)android_media_AudioTrack_setAuxEffectSendLevel},
+                             "(F)I",     (void *)android_media_AudioTrack_setAuxEffectSendLevel},
     {"native_attachAuxEffect",
                              "(I)I",     (void *)android_media_AudioTrack_attachAuxEffect},
 };
diff --git a/core/jni/android_net_wifi_WifiNative.cpp b/core/jni/android_net_wifi_WifiNative.cpp
deleted file mode 100644
index 6e11192..0000000
--- a/core/jni/android_net_wifi_WifiNative.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright 2008, 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.
- */
-
-#define LOG_TAG "wifi"
-
-#include "jni.h"
-#include <ScopedUtfChars.h>
-#include <utils/misc.h>
-#include <android_runtime/AndroidRuntime.h>
-#include <utils/Log.h>
-#include <utils/String16.h>
-
-#include "wifi.h"
-
-#define REPLY_BUF_SIZE 4096 // wpa_supplicant's maximum size.
-#define EVENT_BUF_SIZE 2048
-
-namespace android {
-
-static jint DBG = false;
-
-static bool doCommand(JNIEnv* env, jstring javaCommand,
-                      char* reply, size_t reply_len) {
-    ScopedUtfChars command(env, javaCommand);
-    if (command.c_str() == NULL) {
-        return false; // ScopedUtfChars already threw on error.
-    }
-
-    if (DBG) {
-        ALOGD("doCommand: %s", command.c_str());
-    }
-
-    --reply_len; // Ensure we have room to add NUL termination.
-    if (::wifi_command(command.c_str(), reply, &reply_len) != 0) {
-        return false;
-    }
-
-    // Strip off trailing newline.
-    if (reply_len > 0 && reply[reply_len-1] == '\n') {
-        reply[reply_len-1] = '\0';
-    } else {
-        reply[reply_len] = '\0';
-    }
-    return true;
-}
-
-static jint doIntCommand(JNIEnv* env, jstring javaCommand) {
-    char reply[REPLY_BUF_SIZE];
-    if (!doCommand(env, javaCommand, reply, sizeof(reply))) {
-        return -1;
-    }
-    return static_cast<jint>(atoi(reply));
-}
-
-static jboolean doBooleanCommand(JNIEnv* env, jstring javaCommand) {
-    char reply[REPLY_BUF_SIZE];
-    if (!doCommand(env, javaCommand, reply, sizeof(reply))) {
-        return JNI_FALSE;
-    }
-    return (strcmp(reply, "OK") == 0);
-}
-
-// Send a command to the supplicant, and return the reply as a String.
-static jstring doStringCommand(JNIEnv* env, jstring javaCommand) {
-    char reply[REPLY_BUF_SIZE];
-    if (!doCommand(env, javaCommand, reply, sizeof(reply))) {
-        return NULL;
-    }
-    return env->NewStringUTF(reply);
-}
-
-static jboolean android_net_wifi_isDriverLoaded(JNIEnv* env, jobject)
-{
-    return (::is_wifi_driver_loaded() == 1);
-}
-
-static jboolean android_net_wifi_loadDriver(JNIEnv* env, jobject)
-{
-    return (::wifi_load_driver() == 0);
-}
-
-static jboolean android_net_wifi_unloadDriver(JNIEnv* env, jobject)
-{
-    return (::wifi_unload_driver() == 0);
-}
-
-static jboolean android_net_wifi_startSupplicant(JNIEnv* env, jobject, jboolean p2pSupported)
-{
-    return (::wifi_start_supplicant(p2pSupported) == 0);
-}
-
-static jboolean android_net_wifi_killSupplicant(JNIEnv* env, jobject, jboolean p2pSupported)
-{
-    return (::wifi_stop_supplicant(p2pSupported) == 0);
-}
-
-static jboolean android_net_wifi_connectToSupplicant(JNIEnv* env, jobject)
-{
-    return (::wifi_connect_to_supplicant() == 0);
-}
-
-static void android_net_wifi_closeSupplicantConnection(JNIEnv* env, jobject)
-{
-    ::wifi_close_supplicant_connection();
-}
-
-static jstring android_net_wifi_waitForEvent(JNIEnv* env, jobject)
-{
-    char buf[EVENT_BUF_SIZE];
-    int nread = ::wifi_wait_for_event(buf, sizeof buf);
-    if (nread > 0) {
-        return env->NewStringUTF(buf);
-    } else {
-        return NULL;
-    }
-}
-
-static jboolean android_net_wifi_doBooleanCommand(JNIEnv* env, jobject, jstring javaCommand) {
-    return doBooleanCommand(env, javaCommand);
-}
-
-static jint android_net_wifi_doIntCommand(JNIEnv* env, jobject, jstring javaCommand) {
-    return doIntCommand(env, javaCommand);
-}
-
-static jstring android_net_wifi_doStringCommand(JNIEnv* env, jobject, jstring javaCommand) {
-    return doStringCommand(env,javaCommand);
-}
-
-
-
-// ----------------------------------------------------------------------------
-
-/*
- * JNI registration.
- */
-static JNINativeMethod gWifiMethods[] = {
-    /* name, signature, funcPtr */
-
-    { "loadDriver", "()Z",  (void *)android_net_wifi_loadDriver },
-    { "isDriverLoaded", "()Z",  (void *)android_net_wifi_isDriverLoaded },
-    { "unloadDriver", "()Z",  (void *)android_net_wifi_unloadDriver },
-    { "startSupplicant", "(Z)Z",  (void *)android_net_wifi_startSupplicant },
-    { "killSupplicant", "(Z)Z",  (void *)android_net_wifi_killSupplicant },
-    { "connectToSupplicantNative", "()Z", (void *)android_net_wifi_connectToSupplicant },
-    { "closeSupplicantConnectionNative", "()V",
-            (void *)android_net_wifi_closeSupplicantConnection },
-    { "waitForEventNative", "()Ljava/lang/String;", (void*)android_net_wifi_waitForEvent },
-    { "doBooleanCommandNative", "(Ljava/lang/String;)Z", (void*)android_net_wifi_doBooleanCommand },
-    { "doIntCommandNative", "(Ljava/lang/String;)I", (void*)android_net_wifi_doIntCommand },
-    { "doStringCommandNative", "(Ljava/lang/String;)Ljava/lang/String;",
-            (void*) android_net_wifi_doStringCommand },
-};
-
-int register_android_net_wifi_WifiNative(JNIEnv* env) {
-    return AndroidRuntime::registerNativeMethods(env,
-            "android/net/wifi/WifiNative", gWifiMethods, NELEM(gWifiMethods));
-}
-
-}; // namespace android
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp
index 7162a1c..4147608 100644
--- a/core/jni/android_util_AssetManager.cpp
+++ b/core/jni/android_util_AssetManager.cpp
@@ -73,6 +73,13 @@
     jfieldID mObject;
 } gAssetManagerOffsets;
 
+static struct sparsearray_offsets_t
+{
+    jclass classObject;
+    jmethodID constructor;
+    jmethodID put;
+} gSparseArrayOffsets;
+
 jclass g_stringClass = NULL;
 
 // ----------------------------------------------------------------------------
@@ -905,6 +912,26 @@
     return str;
 }
 
+static jobject android_content_AssetManager_getAssignedPackageIdentifiers(JNIEnv* env, jobject clazz)
+{
+    AssetManager* am = assetManagerForJavaObject(env, clazz);
+    if (am == NULL) {
+        return 0;
+    }
+
+    const ResTable& res = am->getResources();
+
+    jobject sparseArray = env->NewObject(gSparseArrayOffsets.classObject,
+            gSparseArrayOffsets.constructor);
+    const size_t N = res.getBasePackageCount();
+    for (size_t i = 0; i < N; i++) {
+        const String16 name = res.getBasePackageName(i);
+        env->CallVoidMethod(sparseArray, gSparseArrayOffsets.put, (jint) res.getBasePackageId(i),
+                env->NewString(name, name.size()));
+    }
+    return sparseArray;
+}
+
 static jlong android_content_AssetManager_newTheme(JNIEnv* env, jobject clazz)
 {
     AssetManager* am = assetManagerForJavaObject(env, clazz);
@@ -972,6 +999,200 @@
     theme->dumpToLog();
 }
 
+static jboolean android_content_AssetManager_resolveAttrs(JNIEnv* env, jobject clazz,
+                                                          jlong themeToken,
+                                                          jint defStyleAttr,
+                                                          jint defStyleRes,
+                                                          jintArray inValues,
+                                                          jintArray attrs,
+                                                          jintArray outValues,
+                                                          jintArray outIndices)
+{
+    if (themeToken == 0) {
+        jniThrowNullPointerException(env, "theme token");
+        return JNI_FALSE;
+    }
+    if (attrs == NULL) {
+        jniThrowNullPointerException(env, "attrs");
+        return JNI_FALSE;
+    }
+    if (outValues == NULL) {
+        jniThrowNullPointerException(env, "out values");
+        return JNI_FALSE;
+    }
+
+    DEBUG_STYLES(LOGI("APPLY STYLE: theme=0x%x defStyleAttr=0x%x defStyleRes=0x%x",
+        themeToken, defStyleAttr, defStyleRes));
+
+    ResTable::Theme* theme = reinterpret_cast<ResTable::Theme*>(themeToken);
+    const ResTable& res = theme->getResTable();
+    ResTable_config config;
+    Res_value value;
+
+    const jsize NI = env->GetArrayLength(attrs);
+    const jsize NV = env->GetArrayLength(outValues);
+    if (NV < (NI*STYLE_NUM_ENTRIES)) {
+        jniThrowException(env, "java/lang/IndexOutOfBoundsException", "out values too small");
+        return JNI_FALSE;
+    }
+
+    jint* src = (jint*)env->GetPrimitiveArrayCritical(attrs, 0);
+    if (src == NULL) {
+        return JNI_FALSE;
+    }
+
+    jint* srcValues = (jint*)env->GetPrimitiveArrayCritical(inValues, 0);
+    const jsize NSV = srcValues == NULL ? 0 : env->GetArrayLength(inValues);
+
+    jint* baseDest = (jint*)env->GetPrimitiveArrayCritical(outValues, 0);
+    jint* dest = baseDest;
+    if (dest == NULL) {
+        env->ReleasePrimitiveArrayCritical(attrs, src, 0);
+        return JNI_FALSE;
+    }
+
+    jint* indices = NULL;
+    int indicesIdx = 0;
+    if (outIndices != NULL) {
+        if (env->GetArrayLength(outIndices) > NI) {
+            indices = (jint*)env->GetPrimitiveArrayCritical(outIndices, 0);
+        }
+    }
+
+    // Load default style from attribute, if specified...
+    uint32_t defStyleBagTypeSetFlags = 0;
+    if (defStyleAttr != 0) {
+        Res_value value;
+        if (theme->getAttribute(defStyleAttr, &value, &defStyleBagTypeSetFlags) >= 0) {
+            if (value.dataType == Res_value::TYPE_REFERENCE) {
+                defStyleRes = value.data;
+            }
+        }
+    }
+
+    // Now lock down the resource object and start pulling stuff from it.
+    res.lock();
+
+    // Retrieve the default style bag, if requested.
+    const ResTable::bag_entry* defStyleEnt = NULL;
+    uint32_t defStyleTypeSetFlags = 0;
+    ssize_t bagOff = defStyleRes != 0
+            ? res.getBagLocked(defStyleRes, &defStyleEnt, &defStyleTypeSetFlags) : -1;
+    defStyleTypeSetFlags |= defStyleBagTypeSetFlags;
+    const ResTable::bag_entry* endDefStyleEnt = defStyleEnt +
+        (bagOff >= 0 ? bagOff : 0);;
+
+    // Now iterate through all of the attributes that the client has requested,
+    // filling in each with whatever data we can find.
+    ssize_t block = 0;
+    uint32_t typeSetFlags;
+    for (jsize ii=0; ii<NI; ii++) {
+        const uint32_t curIdent = (uint32_t)src[ii];
+
+        DEBUG_STYLES(LOGI("RETRIEVING ATTR 0x%08x...", curIdent));
+
+        // Try to find a value for this attribute...  we prioritize values
+        // coming from, first XML attributes, then XML style, then default
+        // style, and finally the theme.
+        value.dataType = Res_value::TYPE_NULL;
+        value.data = 0;
+        typeSetFlags = 0;
+        config.density = 0;
+
+        // Retrieve the current input value if available.
+        if (NSV > 0 && srcValues[ii] != 0) {
+            block = -1;
+            value.dataType = Res_value::TYPE_ATTRIBUTE;
+            value.data = srcValues[ii];
+            DEBUG_STYLES(LOGI("-> From values: type=0x%x, data=0x%08x",
+                    value.dataType, value.data));
+        }
+
+        // Skip through the default style values until the end or the next possible match.
+        while (defStyleEnt < endDefStyleEnt && curIdent > defStyleEnt->map.name.ident) {
+            defStyleEnt++;
+        }
+        // Retrieve the current default style attribute if it matches, and step to next.
+        if (defStyleEnt < endDefStyleEnt && curIdent == defStyleEnt->map.name.ident) {
+            if (value.dataType == Res_value::TYPE_NULL) {
+                block = defStyleEnt->stringBlock;
+                typeSetFlags = defStyleTypeSetFlags;
+                value = defStyleEnt->map.value;
+                DEBUG_STYLES(LOGI("-> From def style: type=0x%x, data=0x%08x",
+                        value.dataType, value.data));
+            }
+            defStyleEnt++;
+        }
+
+        uint32_t resid = 0;
+        if (value.dataType != Res_value::TYPE_NULL) {
+            // Take care of resolving the found resource to its final value.
+            ssize_t newBlock = theme->resolveAttributeReference(&value, block,
+                    &resid, &typeSetFlags, &config);
+            if (newBlock >= 0) block = newBlock;
+            DEBUG_STYLES(LOGI("-> Resolved attr: type=0x%x, data=0x%08x",
+                    value.dataType, value.data));
+        } else {
+            // If we still don't have a value for this attribute, try to find
+            // it in the theme!
+            ssize_t newBlock = theme->getAttribute(curIdent, &value, &typeSetFlags);
+            if (newBlock >= 0) {
+                DEBUG_STYLES(LOGI("-> From theme: type=0x%x, data=0x%08x",
+                        value.dataType, value.data));
+                newBlock = res.resolveReference(&value, block, &resid,
+                        &typeSetFlags, &config);
+#if THROW_ON_BAD_ID
+                if (newBlock == BAD_INDEX) {
+                    jniThrowException(env, "java/lang/IllegalStateException", "Bad resource!");
+                    return JNI_FALSE;
+                }
+#endif
+                if (newBlock >= 0) block = newBlock;
+                DEBUG_STYLES(LOGI("-> Resolved theme: type=0x%x, data=0x%08x",
+                        value.dataType, value.data));
+            }
+        }
+
+        // Deal with the special @null value -- it turns back to TYPE_NULL.
+        if (value.dataType == Res_value::TYPE_REFERENCE && value.data == 0) {
+            DEBUG_STYLES(LOGI("-> Setting to @null!"));
+            value.dataType = Res_value::TYPE_NULL;
+            block = -1;
+        }
+
+        DEBUG_STYLES(LOGI("Attribute 0x%08x: type=0x%x, data=0x%08x",
+                curIdent, value.dataType, value.data));
+
+        // Write the final value back to Java.
+        dest[STYLE_TYPE] = value.dataType;
+        dest[STYLE_DATA] = value.data;
+        dest[STYLE_ASSET_COOKIE] =
+            block != -1 ? reinterpret_cast<jint>(res.getTableCookie(block)) : (jint)-1;
+        dest[STYLE_RESOURCE_ID] = resid;
+        dest[STYLE_CHANGING_CONFIGURATIONS] = typeSetFlags;
+        dest[STYLE_DENSITY] = config.density;
+
+        if (indices != NULL && value.dataType != Res_value::TYPE_NULL) {
+            indicesIdx++;
+            indices[indicesIdx] = ii;
+        }
+
+        dest += STYLE_NUM_ENTRIES;
+    }
+
+    res.unlock();
+
+    if (indices != NULL) {
+        indices[0] = indicesIdx;
+        env->ReleasePrimitiveArrayCritical(outIndices, indices, 0);
+    }
+    env->ReleasePrimitiveArrayCritical(outValues, baseDest, 0);
+    env->ReleasePrimitiveArrayCritical(inValues, srcValues, 0);
+    env->ReleasePrimitiveArrayCritical(attrs, src, 0);
+
+    return JNI_TRUE;
+}
+
 static jboolean android_content_AssetManager_applyStyle(JNIEnv* env, jobject clazz,
                                                         jlong themeToken,
                                                         jint defStyleAttr,
@@ -1481,16 +1702,19 @@
         return 0;
     }
 
-    Asset* a = cookie
-        ? am->openNonAsset(static_cast<int32_t>(cookie), fileName8.c_str(), Asset::ACCESS_BUFFER)
-        : am->openNonAsset(fileName8.c_str(), Asset::ACCESS_BUFFER);
+    int32_t assetCookie = static_cast<int32_t>(cookie);
+    Asset* a = assetCookie
+        ? am->openNonAsset(assetCookie, fileName8.c_str(), Asset::ACCESS_BUFFER)
+        : am->openNonAsset(fileName8.c_str(), Asset::ACCESS_BUFFER, &assetCookie);
 
     if (a == NULL) {
         jniThrowException(env, "java/io/FileNotFoundException", fileName8.c_str());
         return 0;
     }
 
-    ResXMLTree* block = new ResXMLTree();
+    const DynamicRefTable* dynamicRefTable =
+            am->getResources().getDynamicRefTableForCookie(assetCookie);
+    ResXMLTree* block = new ResXMLTree(dynamicRefTable);
     status_t err = block->setTo(a->getBuffer(true), a->getLength(), true);
     a->close();
     delete a;
@@ -1778,6 +2002,8 @@
         (void*) android_content_AssetManager_getNativeStringBlock },
     { "getCookieName","(I)Ljava/lang/String;",
         (void*) android_content_AssetManager_getCookieName },
+    { "getAssignedPackageIdentifiers","()Landroid/util/SparseArray;",
+        (void*) android_content_AssetManager_getAssignedPackageIdentifiers },
 
     // Themes.
     { "newTheme", "()J",
@@ -1874,6 +2100,16 @@
     g_stringClass = (jclass)env->NewGlobalRef(stringClass);
     LOG_FATAL_IF(g_stringClass == NULL, "Unable to create global reference for class java/lang/String");
 
+    jclass sparseArrayClass = env->FindClass("android/util/SparseArray");
+    LOG_FATAL_IF(sparseArrayClass == NULL, "Unable to find class android/util/SparseArray");
+    gSparseArrayOffsets.classObject = (jclass) env->NewGlobalRef(sparseArrayClass);
+    gSparseArrayOffsets.constructor =
+            env->GetMethodID(gSparseArrayOffsets.classObject, "<init>", "()V");
+    LOG_FATAL_IF(gSparseArrayOffsets.constructor == NULL, "Unable to find SparseArray.<init>()");
+    gSparseArrayOffsets.put =
+            env->GetMethodID(gSparseArrayOffsets.classObject, "put", "(ILjava/lang/Object;)V");
+    LOG_FATAL_IF(gSparseArrayOffsets.put == NULL, "Unable to find SparseArray.put(int, V)");
+
     return AndroidRuntime::registerNativeMethods(env,
             "android/content/res/AssetManager", gAssetManagerMethods, NELEM(gAssetManagerMethods));
 }
diff --git a/core/jni/android_util_XmlBlock.cpp b/core/jni/android_util_XmlBlock.cpp
index 03de5c0a..2cccb83 100644
--- a/core/jni/android_util_XmlBlock.cpp
+++ b/core/jni/android_util_XmlBlock.cpp
@@ -47,10 +47,11 @@
     }
 
     jbyte* b = env->GetByteArrayElements(bArray, NULL);
-    ResXMLTree* osb = new ResXMLTree(b+off, len, true);
+    ResXMLTree* osb = new ResXMLTree();
+    osb->setTo(b+off, len, true);
     env->ReleaseByteArrayElements(bArray, b, 0);
 
-    if (osb == NULL || osb->getError() != NO_ERROR) {
+    if (osb->getError() != NO_ERROR) {
         jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
         return 0;
     }
@@ -113,6 +114,8 @@
                 return 1;
             case ResXMLParser::BAD_DOCUMENT:
                 goto bad;
+            default:
+                break;
         }
     } while (true);
 
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index 591ff77..ef5ebd0 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -42,14 +42,13 @@
 #include <SkTemplates.h>
 #include <SkXfermode.h>
 
-#include <DisplayList.h>
 #include <DisplayListRenderer.h>
 #include <LayerRenderer.h>
 #include <OpenGLRenderer.h>
 #include <SkiaShader.h>
-#include <SkiaColorFilter.h>
 #include <Stencil.h>
 #include <Rect.h>
+#include <RenderNode.h>
 
 #include <TextLayout.h>
 #include <TextLayoutCache.h>
@@ -81,7 +80,6 @@
 
 #define MODIFIER_SHADOW 1
 #define MODIFIER_SHADER 2
-#define MODIFIER_COLOR_FILTER 4
 
 // ----------------------------------------------------------------------------
 
@@ -138,8 +136,8 @@
 }
 
 static void android_view_GLES20Canvas_destroyRenderer(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     RENDERER_LOGD("Destroy OpenGLRenderer");
     delete renderer;
 }
@@ -149,27 +147,27 @@
 // ----------------------------------------------------------------------------
 
 static void android_view_GLES20Canvas_setViewport(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint width, jint height) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jint width, jint height) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->setViewport(width, height);
 }
 
-static jint android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jboolean opaque) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+static int android_view_GLES20Canvas_prepare(JNIEnv* env, jobject clazz,
+        jlong rendererPtr, jboolean opaque) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     return renderer->prepare(opaque);
 }
 
-static jint android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint left, jint top, jint right, jint bottom,
+static int android_view_GLES20Canvas_prepareDirty(JNIEnv* env, jobject clazz,
+        jlong rendererPtr, jint left, jint top, jint right, jint bottom,
         jboolean opaque) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     return renderer->prepareDirty(left, top, right, bottom, opaque);
 }
 
 static void android_view_GLES20Canvas_finish(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->finish();
 }
 
@@ -177,28 +175,22 @@
     return Stencil::getStencilSize();
 }
 
-static void android_view_GLES20Canvas_setName(JNIEnv* env,
-        jobject clazz, jlong rendererHandle, jstring name) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    if (name != NULL) {
-        const char* textArray = env->GetStringUTFChars(name, NULL);
-        renderer->setName(textArray);
-        env->ReleaseStringUTFChars(name, textArray);
-    } else {
-        renderer->setName(NULL);
+static void android_view_GLES20Canvas_setProperty(JNIEnv* env,
+        jobject clazz, jstring name, jstring value) {
+    if (!Caches::hasInstance()) {
+        ALOGW("can't set property, no Caches instance");
+        return;
     }
-}
 
-static void android_view_GLES20Canvas_setCountOverdrawEnabled(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jboolean enabled) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    renderer->setCountOverdrawEnabled(enabled);
-}
+    if (name == NULL || value == NULL) {
+        ALOGW("can't set prop, null passed");
+    }
 
-static jfloat android_view_GLES20Canvas_getOverdraw(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    return renderer->getOverdraw();
+    const char* nameCharArray = env->GetStringUTFChars(name, NULL);
+    const char* valueCharArray = env->GetStringUTFChars(value, NULL);
+    Caches::getInstance().setTempProperty(nameCharArray, valueCharArray);
+    env->ReleaseStringUTFChars(name, nameCharArray);
+    env->ReleaseStringUTFChars(name, valueCharArray);
 }
 
 // ----------------------------------------------------------------------------
@@ -206,9 +198,9 @@
 // ----------------------------------------------------------------------------
 
 static jint android_view_GLES20Canvas_callDrawGLFunction(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong functorHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    Functor* functor = reinterpret_cast<Functor*>(functorHandle);
+        jlong rendererPtr, jlong functorPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    Functor* functor = reinterpret_cast<Functor*>(functorPtr);
     android::uirenderer::Rect dirty;
     return renderer->callDrawGLFunction(functor, dirty);
 }
@@ -221,15 +213,15 @@
 }
 
 static void android_view_GLES20Canvas_attachFunctor(JNIEnv* env,
-        jobject clazz, jlong rendererHandle, jlong functorHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    Functor* functor = reinterpret_cast<Functor*>(functorHandle);
+        jobject clazz, jlong rendererPtr, jlong functorPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    Functor* functor = reinterpret_cast<Functor*>(functorPtr);
     renderer->attachFunctor(functor);
 }
 
 static jint android_view_GLES20Canvas_invokeFunctors(JNIEnv* env,
-        jobject clazz, jlong rendererHandle, jobject dirty) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jobject clazz, jlong rendererPtr, jobject dirty) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     android::uirenderer::Rect bounds;
     status_t status = renderer->invokeFunctors(bounds);
     if (status != DrawGlInfo::kStatusDone && dirty != NULL) {
@@ -255,27 +247,27 @@
 // State
 // ----------------------------------------------------------------------------
 
-static jint android_view_GLES20Canvas_save(JNIEnv* env, jobject clazz, jlong rendererHandle,
+static jint android_view_GLES20Canvas_save(JNIEnv* env, jobject clazz, jlong rendererPtr,
         jint flags) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     return renderer->save(flags);
 }
 
 static jint android_view_GLES20Canvas_getSaveCount(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     return renderer->getSaveCount();
 }
 
 static void android_view_GLES20Canvas_restore(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->restore();
 }
 
 static void android_view_GLES20Canvas_restoreToCount(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint saveCount) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jint saveCount) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->restoreToCount(saveCount);
 }
 
@@ -284,33 +276,33 @@
 // ----------------------------------------------------------------------------
 
 static jint android_view_GLES20Canvas_saveLayer(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom,
-        jlong paintHandle, jint saveFlags) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom,
+        jlong paintPtr, jint saveFlags) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     return renderer->saveLayer(left, top, right, bottom, paint, saveFlags);
 }
 
 static jint android_view_GLES20Canvas_saveLayerClip(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong paintHandle, jint saveFlags) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-    const android::uirenderer::Rect& bounds(renderer->getClipBounds());
+        jlong rendererPtr, jlong paintPtr, jint saveFlags) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+    const android::uirenderer::Rect& bounds(renderer->getLocalClipBounds());
     return renderer->saveLayer(bounds.left, bounds.top, bounds.right, bounds.bottom,
             paint, saveFlags);
 }
 
 static jint android_view_GLES20Canvas_saveLayerAlpha(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom,
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom,
         jint alpha, jint saveFlags) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     return renderer->saveLayerAlpha(left, top, right, bottom, alpha, saveFlags);
 }
 
 static jint android_view_GLES20Canvas_saveLayerAlphaClip(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint alpha, jint saveFlags) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    const android::uirenderer::Rect& bounds(renderer->getClipBounds());
+        jlong rendererPtr, jint alpha, jint saveFlags) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    const android::uirenderer::Rect& bounds(renderer->getLocalClipBounds());
     return renderer->saveLayerAlpha(bounds.left, bounds.top, bounds.right, bounds.bottom,
             alpha, saveFlags);
 }
@@ -320,51 +312,51 @@
 // ----------------------------------------------------------------------------
 
 static jboolean android_view_GLES20Canvas_quickReject(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    bool result = renderer->quickRejectNoScissor(left, top, right, bottom);
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    const bool result = renderer->quickRejectConservative(left, top, right, bottom);
     return result ? JNI_TRUE : JNI_FALSE;
 }
 
 static jboolean android_view_GLES20Canvas_clipRectF(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom,
-        jint opHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkRegion::Op op = static_cast<SkRegion::Op>(opHandle);
-    bool result;
-    result = renderer->clipRect(left, top, right, bottom, op);
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom,
+        jint op) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    const bool result = renderer->clipRect(left, top, right, bottom,
+                                           static_cast<SkRegion::Op>(op));
     return result ? JNI_TRUE : JNI_FALSE;
 }
 
 static jboolean android_view_GLES20Canvas_clipRect(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint left, jint top, jint right, jint bottom,
-        jint opHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkRegion::Op op = static_cast<SkRegion::Op>(opHandle);
-    bool result = renderer->clipRect(float(left), float(top), float(right), float(bottom), op);
+        jlong rendererPtr, jint left, jint top, jint right, jint bottom,
+        jint op) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    const bool result = renderer->clipRect(float(left), float(top), float(right),
+                                           float(bottom),
+                                           static_cast<SkRegion::Op>(op));
     return result ? JNI_TRUE : JNI_FALSE;
 }
 
 static jboolean android_view_GLES20Canvas_clipPath(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong pathHandle, jint opHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPath* path = reinterpret_cast<SkPath*>(pathHandle);
-    SkRegion::Op op = static_cast<SkRegion::Op>(opHandle);
-    return renderer->clipPath(path, op) ? JNI_TRUE : JNI_FALSE;
+        jlong rendererPtr, jlong pathPtr, jint op) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPath* path = reinterpret_cast<SkPath*>(pathPtr);
+    const bool result = renderer->clipPath(path, static_cast<SkRegion::Op>(op));
+    return result ? JNI_TRUE : JNI_FALSE;
 }
 
 static jboolean android_view_GLES20Canvas_clipRegion(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong regionHandle, jint opHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkRegion* region = reinterpret_cast<SkRegion*>(regionHandle);
-    SkRegion::Op op = static_cast<SkRegion::Op>(opHandle);
-    return renderer->clipRegion(region, op) ? JNI_TRUE : JNI_FALSE;
+        jlong rendererPtr, jlong regionPtr, jint op) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkRegion* region = reinterpret_cast<SkRegion*>(regionPtr);
+    const bool result = renderer->clipRegion(region, static_cast<SkRegion::Op>(op));
+    return result ? JNI_TRUE : JNI_FALSE;
 }
 
 static jboolean android_view_GLES20Canvas_getClipBounds(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jobject rect) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    const android::uirenderer::Rect& bounds(renderer->getClipBounds());
+        jlong rendererPtr, jobject rect) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    const android::uirenderer::Rect& bounds(renderer->getLocalClipBounds());
 
     env->CallVoidMethod(rect, gRectClassInfo.set,
             int(bounds.left), int(bounds.top), int(bounds.right), int(bounds.bottom));
@@ -377,47 +369,47 @@
 // ----------------------------------------------------------------------------
 
 static void android_view_GLES20Canvas_translate(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat dx, jfloat dy) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jfloat dx, jfloat dy) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->translate(dx, dy);
 }
 
 static void android_view_GLES20Canvas_rotate(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat degrees) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jfloat degrees) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->rotate(degrees);
 }
 
 static void android_view_GLES20Canvas_scale(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat sx, jfloat sy) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jfloat sx, jfloat sy) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->scale(sx, sy);
 }
 
 static void android_view_GLES20Canvas_skew(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat sx, jfloat sy) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jfloat sx, jfloat sy) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->skew(sx, sy);
 }
 
 static void android_view_GLES20Canvas_setMatrix(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong matrixHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
+        jlong rendererPtr, jlong matrixPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
     renderer->setMatrix(matrix);
 }
 
 static void android_view_GLES20Canvas_getMatrix(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong matrixHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
+        jlong rendererPtr, jlong matrixPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
     renderer->getMatrix(matrix);
 }
 
 static void android_view_GLES20Canvas_concatMatrix(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong matrixHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
+        jlong rendererPtr, jlong matrixPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
     renderer->concatMatrix(matrix);
 }
 
@@ -426,49 +418,47 @@
 // ----------------------------------------------------------------------------
 
 static void android_view_GLES20Canvas_drawBitmap(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong bitmapHandle, jbyteArray buffer,
-        jfloat left, jfloat top, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jlong bitmapPtr, jbyteArray buffer,
+        jfloat left, jfloat top, jlong paintPtr) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
     // This object allows the renderer to allocate a global JNI ref to the buffer object.
     JavaHeapBitmapRef bitmapRef(env, bitmap, buffer);
 
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawBitmap(bitmap, left, top, paint);
 }
 
 static void android_view_GLES20Canvas_drawBitmapRect(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong bitmapHandle, jbyteArray buffer,
-        jfloat srcLeft, jfloat srcTop, jfloat srcRight, jfloat srcBottom,
-        jfloat dstLeft, jfloat dstTop, jfloat dstRight, jfloat dstBottom, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jlong bitmapPtr, jbyteArray buffer,
+        float srcLeft, float srcTop, float srcRight, float srcBottom,
+        float dstLeft, float dstTop, float dstRight, float dstBottom, jlong paintPtr) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
     // This object allows the renderer to allocate a global JNI ref to the buffer object.
     JavaHeapBitmapRef bitmapRef(env, bitmap, buffer);
 
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawBitmap(bitmap, srcLeft, srcTop, srcRight, srcBottom,
             dstLeft, dstTop, dstRight, dstBottom, paint);
 }
 
 static void android_view_GLES20Canvas_drawBitmapMatrix(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong bitmapHandle, jbyteArray buffer,
-        jlong matrixHandle, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jlong bitmapPtr, jbyteArray buffer,
+        jlong matrixPtr, jlong paintPtr) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
     // This object allows the renderer to allocate a global JNI ref to the buffer object.
     JavaHeapBitmapRef bitmapRef(env, bitmap, buffer);
 
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawBitmap(bitmap, matrix, paint);
 }
 
 static void android_view_GLES20Canvas_drawBitmapData(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jintArray colors, jint offset, jint stride,
-        jfloat left, jfloat top, jint width, jint height, jboolean hasAlpha, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jintArray colors, jint offset, jint stride,
+        jfloat left, jfloat top, jint width, jint height, jboolean hasAlpha, jlong paintPtr) {
     SkBitmap* bitmap = new SkBitmap;
     bitmap->setConfig(hasAlpha ? SkBitmap::kARGB_8888_Config : SkBitmap::kRGB_565_Config,
             width, height);
@@ -483,27 +473,29 @@
         return;
     }
 
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawBitmapData(bitmap, left, top, paint);
 
     // If the renderer is a deferred renderer it will own the bitmap
-    if (!renderer->isDeferred()) {
+    if (!renderer->isRecording()) {
         delete bitmap;
     }
 }
 
 static void android_view_GLES20Canvas_drawBitmapMesh(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong bitmapHandle, jbyteArray buffer,
+        jlong rendererPtr, jlong bitmapPtr, jbyteArray buffer,
         jint meshWidth, jint meshHeight, jfloatArray vertices, jint offset, jintArray colors,
-        jint colorOffset, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jint colorOffset, jlong paintPtr) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
     // This object allows the renderer to allocate a global JNI ref to the buffer object.
     JavaHeapBitmapRef bitmapRef(env, bitmap, buffer);
 
     jfloat* verticesArray = vertices ? env->GetFloatArrayElements(vertices, NULL) + offset : NULL;
     jint* colorsArray = colors ? env->GetIntArrayElements(colors, NULL) + colorOffset : NULL;
 
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawBitmapMesh(bitmap, meshWidth, meshHeight, verticesArray, colorsArray, paint);
 
     if (vertices) env->ReleaseFloatArrayElements(vertices, verticesArray, 0);
@@ -511,70 +503,68 @@
 }
 
 static void android_view_GLES20Canvas_drawPatch(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong bitmapHandle, jbyteArray buffer, jlong patchHandle,
-        jfloat left, jfloat top, jfloat right, jfloat bottom, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
-    Res_png_9patch* patch  = reinterpret_cast<Res_png_9patch*>(patchHandle);
-    SkPaint* paint  = reinterpret_cast<SkPaint*>(paintHandle);
-
+        jlong rendererPtr, jlong bitmapPtr, jbyteArray buffer, jlong patchPtr,
+        float left, float top, float right, float bottom, jlong paintPtr) {
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
     // This object allows the renderer to allocate a global JNI ref to the buffer object.
     JavaHeapBitmapRef bitmapRef(env, bitmap, buffer);
 
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    Res_png_9patch* patch = reinterpret_cast<Res_png_9patch*>(patchPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawPatch(bitmap, patch, left, top, right, bottom, paint);
 }
 
 static void android_view_GLES20Canvas_drawColor(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint color, SkXfermode::Mode mode) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    renderer->drawColor(color, mode);
+        jlong rendererPtr, jint color, jint mode) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    renderer->drawColor(color, static_cast<SkXfermode::Mode>(mode));
 }
 
 static void android_view_GLES20Canvas_drawRect(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom,
-        jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom,
+        jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawRect(left, top, right, bottom, paint);
 }
 
 static void android_view_GLES20Canvas_drawRoundRect(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom,
-        jfloat rx, jfloat ry, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom,
+        jfloat rx, jfloat ry, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawRoundRect(left, top, right, bottom, rx, ry, paint);
 }
 
 static void android_view_GLES20Canvas_drawCircle(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat x, jfloat y, jfloat radius, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloat x, jfloat y, jfloat radius, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawCircle(x, y, radius, paint);
 }
 
 static void android_view_GLES20Canvas_drawOval(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom,
-        jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom,
+        jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawOval(left, top, right, bottom, paint);
 }
 
 static void android_view_GLES20Canvas_drawArc(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat left, jfloat top, jfloat right, jfloat bottom,
-        jfloat startAngle, jfloat sweepAngle, jboolean useCenter, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloat left, jfloat top, jfloat right, jfloat bottom,
+        jfloat startAngle, jfloat sweepAngle, jboolean useCenter, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawArc(left, top, right, bottom, startAngle, sweepAngle, useCenter, paint);
 }
 
 static void android_view_GLES20Canvas_drawRegionAsRects(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong regionHandle, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkRegion* region = reinterpret_cast<SkRegion*>(regionHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-
+        jlong rendererPtr, jlong regionPtr, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkRegion* region = reinterpret_cast<SkRegion*>(regionPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     if (paint->getStyle() != SkPaint::kFill_Style ||
             (paint->isAntiAlias() && !renderer->isCurrentTransformSimple())) {
         SkRegion::Iterator it(*region);
@@ -601,36 +591,36 @@
 }
 
 static void android_view_GLES20Canvas_drawRects(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloatArray rects, jint count, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloatArray rects, jint count, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     jfloat* storage = env->GetFloatArrayElements(rects, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawRects(storage, count, paint);
     env->ReleaseFloatArrayElements(rects, storage, 0);
 }
 
 static void android_view_GLES20Canvas_drawPoints(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloatArray points, jint offset, jint count, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloatArray points, jint offset, jint count, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     jfloat* storage = env->GetFloatArrayElements(points, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawPoints(storage + offset, count, paint);
     env->ReleaseFloatArrayElements(points, storage, 0);
 }
 
 static void android_view_GLES20Canvas_drawPath(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong pathHandle, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPath* path = reinterpret_cast<SkPath*>(pathHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jlong pathPtr, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkPath* path = reinterpret_cast<SkPath*>(pathPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawPath(path, paint);
 }
 
 static void android_view_GLES20Canvas_drawLines(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloatArray points, jint offset, jint count, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jfloatArray points, jint offset, jint count, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     jfloat* storage = env->GetFloatArrayElements(points, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
     renderer->drawLines(storage + offset, count, paint);
     env->ReleaseFloatArrayElements(points, storage, 0);
 }
@@ -640,30 +630,23 @@
 // ----------------------------------------------------------------------------
 
 static void android_view_GLES20Canvas_resetModifiers(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint modifiers) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jint modifiers) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     if (modifiers & MODIFIER_SHADOW) renderer->resetShadow();
     if (modifiers & MODIFIER_SHADER) renderer->resetShader();
-    if (modifiers & MODIFIER_COLOR_FILTER) renderer->resetColorFilter();
 }
 
 static void android_view_GLES20Canvas_setupShader(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong shaderHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkiaShader* shader = reinterpret_cast<SkiaShader*>(shaderHandle);
+        jlong rendererPtr, jlong shaderPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    SkiaShader* shader = reinterpret_cast<SkiaShader*>(shaderPtr);
     renderer->setupShader(shader);
 }
 
-static void android_view_GLES20Canvas_setupColorFilter(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong filterHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkiaColorFilter* filter = reinterpret_cast<SkiaColorFilter*>(filterHandle);
-    renderer->setupColorFilter(filter);
-}
 
 static void android_view_GLES20Canvas_setupShadow(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jfloat radius, jfloat dx, jfloat dy, jint color) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jfloat radius, jfloat dx, jfloat dy, jint color) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->setupShadow(radius, dx, dy, color);
 }
 
@@ -672,14 +655,14 @@
 // ----------------------------------------------------------------------------
 
 static void android_view_GLES20Canvas_setupPaintFilter(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jint clearBits, jint setBits) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr, jint clearBits, jint setBits) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->setupPaintFilter(clearBits, setBits);
 }
 
 static void android_view_GLES20Canvas_resetPaintFilter(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->resetPaintFilter();
 }
 
@@ -759,70 +742,76 @@
 }
 
 static void android_view_GLES20Canvas_drawTextArray(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jcharArray text, jint index, jint count,
-        jfloat x, jfloat y, jint flags, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jcharArray text, jint index, jint count,
+        jfloat x, jfloat y, jint flags, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     jchar* textArray = env->GetCharArrayElements(text, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+
     renderText(renderer, textArray + index, count, x, y, flags, paint);
     env->ReleaseCharArrayElements(text, textArray, JNI_ABORT);
 }
 
 static void android_view_GLES20Canvas_drawText(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jstring text, jint start, jint end,
-        jfloat x, jfloat y, jint flags, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jstring text, jint start, jint end,
+        jfloat x, jfloat y, jint flags, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     const jchar* textArray = env->GetStringChars(text, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+
     renderText(renderer, textArray + start, end - start, x, y, flags, paint);
     env->ReleaseStringChars(text, textArray);
 }
 
 static void android_view_GLES20Canvas_drawTextArrayOnPath(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jcharArray text, jint index, jint count,
-        jlong pathHandle, jfloat hOffset, jfloat vOffset, jint flags, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPath* path = reinterpret_cast<SkPath*>(pathHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jcharArray text, jint index, jint count,
+        jlong pathPtr, jfloat hOffset, jfloat vOffset, jint flags, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     jchar* textArray = env->GetCharArrayElements(text, NULL);
+    SkPath* path = reinterpret_cast<SkPath*>(pathPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+
     renderTextOnPath(renderer, textArray + index, count, path,
             hOffset, vOffset, flags, paint);
     env->ReleaseCharArrayElements(text, textArray, JNI_ABORT);
 }
 
 static void android_view_GLES20Canvas_drawTextOnPath(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jstring text, jint start, jint end,
-        jlong pathHandle, jfloat hOffset, jfloat vOffset, jint flags, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPath* path = reinterpret_cast<SkPath*>(pathHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jstring text, jint start, jint end,
+        jlong pathPtr, jfloat hOffset, jfloat vOffset, jint flags, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     const jchar* textArray = env->GetStringChars(text, NULL);
+    SkPath* path = reinterpret_cast<SkPath*>(pathPtr);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+
     renderTextOnPath(renderer, textArray + start, end - start, path,
             hOffset, vOffset, flags, paint);
     env->ReleaseStringChars(text, textArray);
 }
 
 static void android_view_GLES20Canvas_drawTextRunArray(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jcharArray text, jint index, jint count,
+        jlong rendererPtr, jcharArray text, jint index, jint count,
         jint contextIndex, jint contextCount, jfloat x, jfloat y, jint dirFlags,
-        jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     jchar* textArray = env->GetCharArrayElements(text, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+
     renderTextRun(renderer, textArray + contextIndex, index - contextIndex,
             count, contextCount, x, y, dirFlags, paint);
     env->ReleaseCharArrayElements(text, textArray, JNI_ABORT);
  }
 
 static void android_view_GLES20Canvas_drawTextRun(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jstring text, jint start, jint end,
-        jint contextStart, jint contextEnd, jfloat x, jfloat y, jint dirFlags,
-        jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jstring text, jint start, jint end,
+        jint contextStart, int contextEnd, jfloat x, jfloat y, jint dirFlags,
+        jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     const jchar* textArray = env->GetStringChars(text, NULL);
     jint count = end - start;
     jint contextCount = contextEnd - contextStart;
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+
     renderTextRun(renderer, textArray + contextStart, start - contextStart,
             count, contextCount, x, y, dirFlags, paint);
     env->ReleaseStringChars(text, textArray);
@@ -844,12 +833,12 @@
 }
 
 static void android_view_GLES20Canvas_drawPosTextArray(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jcharArray text, jint index, jint count,
-        jfloatArray pos, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jcharArray text, jint index, jint count,
+        jfloatArray pos, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     jchar* textArray = env->GetCharArrayElements(text, NULL);
     jfloat* positions = env->GetFloatArrayElements(pos, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
 
     renderPosText(renderer, textArray + index, count, positions, kBidi_LTR, paint);
 
@@ -858,12 +847,12 @@
 }
 
 static void android_view_GLES20Canvas_drawPosText(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jstring text, jint start, jint end,
-        jfloatArray pos, jlong paintHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
+        jlong rendererPtr, jstring text, jint start, jint end,
+        jfloatArray pos, jlong paintPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     const jchar* textArray = env->GetStringChars(text, NULL);
     jfloat* positions = env->GetFloatArrayElements(pos, NULL);
+    SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
 
     renderPosText(renderer, textArray + start, end - start, positions, kBidi_LTR, paint);
 
@@ -875,31 +864,21 @@
 // Display lists
 // ----------------------------------------------------------------------------
 
-static jlong android_view_GLES20Canvas_getDisplayList(JNIEnv* env,
-        jobject clazz, jlong rendererHandle, jlong displayListHandle) {
-    DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererHandle);
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    DisplayList* list = renderer->getDisplayList(displayList);
-    return reinterpret_cast<jlong>(list);
+static jlong android_view_GLES20Canvas_finishRecording(JNIEnv* env,
+        jobject clazz, jlong rendererPtr) {
+    DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
+    return reinterpret_cast<jlong>(renderer->finishRecording());
 }
 
-static jlong android_view_GLES20Canvas_createDisplayListRenderer(JNIEnv* env,
-        jobject clazz) {
-    OpenGLRenderer* renderer = new DisplayListRenderer;
-    return reinterpret_cast<jlong>(renderer);
-}
-
-static void android_view_GLES20Canvas_resetDisplayListRenderer(JNIEnv* env,
-        jobject clazz, jlong rendererHandle) {
-    DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererHandle);
-    renderer->reset();
+static jlong android_view_GLES20Canvas_createDisplayListRenderer(JNIEnv* env, jobject clazz) {
+    return reinterpret_cast<jlong>(new DisplayListRenderer);
 }
 
 static jint android_view_GLES20Canvas_drawDisplayList(JNIEnv* env,
-        jobject clazz, jlong rendererHandle, jlong displayListHandle,
+        jobject clazz, jlong rendererPtr, jlong displayListPtr,
         jobject dirty, jint flags) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    RenderNode* displayList = reinterpret_cast<RenderNode*>(displayListPtr);
     android::uirenderer::Rect bounds;
     status_t status = renderer->drawDisplayList(displayList, bounds, flags);
     if (status != DrawGlInfo::kStatusDone && dirty != NULL) {
@@ -909,207 +888,47 @@
     return status;
 }
 
-static void android_view_GLES20Canvas_outputDisplayList(JNIEnv* env,
-        jobject clazz, jlong rendererHandle, jlong displayListHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    renderer->outputDisplayList(displayList);
-}
-
 // ----------------------------------------------------------------------------
 // Layers
 // ----------------------------------------------------------------------------
 
-static void android_view_GLES20Canvas_interrupt(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    renderer->interrupt();
-}
-
-static void android_view_GLES20Canvas_resume(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    renderer->resume();
-}
-
-static jlong android_view_GLES20Canvas_createLayerRenderer(JNIEnv* env,
-        jobject clazz, jlong layerHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    if (layer) {
-        OpenGLRenderer* renderer = new LayerRenderer(layer);
-        renderer->initProperties();
-        return reinterpret_cast<jlong>(renderer);
-    }
-    return NULL;
-}
-
-static jlong android_view_GLES20Canvas_createTextureLayer(JNIEnv* env, jobject clazz,
-        jboolean isOpaque, jintArray layerInfo) {
-    Layer* layer = LayerRenderer::createTextureLayer(isOpaque);
-
-    if (layer) {
-        jint* storage = env->GetIntArrayElements(layerInfo, NULL);
-        storage[0] = layer->getTexture();
-        env->ReleaseIntArrayElements(layerInfo, storage, 0);
-    }
-
-    return reinterpret_cast<jlong>(layer);
-}
-
-static jlong android_view_GLES20Canvas_createLayer(JNIEnv* env, jobject clazz,
-        jint width, jint height, jboolean isOpaque, jintArray layerInfo) {
-    Layer* layer = LayerRenderer::createLayer(width, height, isOpaque);
-
-    if (layer) {
-        jint* storage = env->GetIntArrayElements(layerInfo, NULL);
-        storage[0] = layer->getWidth();
-        storage[1] = layer->getHeight();
-        env->ReleaseIntArrayElements(layerInfo, storage, 0);
-    }
-
-    return reinterpret_cast<jlong>(layer);
-}
-
-static jboolean android_view_GLES20Canvas_resizeLayer(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jint width, jint height, jintArray layerInfo) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    if (LayerRenderer::resizeLayer(layer, width, height)) {
-        jint* storage = env->GetIntArrayElements(layerInfo, NULL);
-        storage[0] = layer->getWidth();
-        storage[1] = layer->getHeight();
-        env->ReleaseIntArrayElements(layerInfo, storage, 0);
-        return JNI_TRUE;
-    }
-    return JNI_FALSE;
-}
-
-static void android_view_GLES20Canvas_setLayerPaint(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jlong paintHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    SkPaint* paint = reinterpret_cast<SkPaint*>(paintHandle);
-    if (layer) {
-        layer->setPaint(paint);
-    }
-}
-
-static void android_view_GLES20Canvas_setLayerColorFilter(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jlong colorFilterHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    SkiaColorFilter* colorFilter = reinterpret_cast<SkiaColorFilter*>(colorFilterHandle);
-    if (layer) {
-        layer->setColorFilter(colorFilter);
-    }
-}
-
-static void android_view_GLES20Canvas_setOpaqueLayer(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jboolean isOpaque) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    if (layer) {
-        layer->setBlend(!isOpaque);
-    }
-}
-
-static void android_view_GLES20Canvas_updateTextureLayer(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jint width, jint height, jboolean isOpaque, jobject surface) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    float transform[16];
-    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, surface));
-
-    if (surfaceTexture->updateTexImage() == NO_ERROR) {
-        int64_t frameNumber = surfaceTexture->getFrameNumber();
-        // If the GLConsumer queue is in synchronous mode, need to discard all
-        // but latest frame, using the frame number to tell when we no longer
-        // have newer frames to target. Since we can't tell which mode it is in,
-        // do this unconditionally.
-        int dropCounter = 0;
-        while (surfaceTexture->updateTexImage() == NO_ERROR) {
-            int64_t newFrameNumber = surfaceTexture->getFrameNumber();
-            if (newFrameNumber == frameNumber) break;
-            frameNumber = newFrameNumber;
-            dropCounter++;
-        }
-        #if DEBUG_RENDERER
-        if (dropCounter > 0) {
-            RENDERER_LOGD("Dropped %d frames on texture layer update", dropCounter);
-        }
-        #endif
-        surfaceTexture->getTransformMatrix(transform);
-        GLenum renderTarget = surfaceTexture->getCurrentTextureTarget();
-
-        LayerRenderer::updateTextureLayer(layer, width, height, isOpaque, renderTarget, transform);
-    }
-}
-
-static void android_view_GLES20Canvas_updateRenderLayer(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jlong rendererHandle, jlong displayListHandle,
-        jint left, jint top, jint right, jint bottom) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    layer->updateDeferred(renderer, displayList, left, top, right, bottom);
-}
-
-static void android_view_GLES20Canvas_clearLayerTexture(JNIEnv* env, jobject clazz,
-        jlong layerHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    layer->clearTexture();
-}
-
-static void android_view_GLES20Canvas_setTextureLayerTransform(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jlong matrixHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
-    layer->getTransform().load(*matrix);
-}
-
-static void android_view_GLES20Canvas_destroyLayer(JNIEnv* env, jobject clazz, jlong layerHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    LayerRenderer::destroyLayer(layer);
-}
-
-static void android_view_GLES20Canvas_destroyLayerDeferred(JNIEnv* env,
-        jobject clazz, jlong layerHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    LayerRenderer::destroyLayerDeferred(layer);
-}
-
 static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong layerHandle, jfloat x, jfloat y) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
+        jlong rendererPtr, jlong layerPtr, jfloat x, jfloat y) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    Layer* layer = reinterpret_cast<Layer*>(layerPtr);
     renderer->drawLayer(layer, x, y);
 }
 
 static jboolean android_view_GLES20Canvas_copyLayer(JNIEnv* env, jobject clazz,
-        jlong layerHandle, jlong bitmapHandle) {
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
-    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapHandle);
+        jlong layerPtr, jlong bitmapPtr) {
+    Layer* layer = reinterpret_cast<Layer*>(layerPtr);
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
     return LayerRenderer::copyLayer(layer, bitmap);
 }
 
 static void android_view_GLES20Canvas_pushLayerUpdate(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong layerHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
+        jlong rendererPtr, jlong layerPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    Layer* layer = reinterpret_cast<Layer*>(layerPtr);
     renderer->pushLayerUpdate(layer);
 }
 
 static void android_view_GLES20Canvas_cancelLayerUpdate(JNIEnv* env, jobject clazz,
-        jlong rendererHandle, jlong layerHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
-    Layer* layer = reinterpret_cast<Layer*>(layerHandle);
+        jlong rendererPtr, jlong layerPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
+    Layer* layer = reinterpret_cast<Layer*>(layerPtr);
     renderer->cancelLayerUpdate(layer);
 }
 
 static void android_view_GLES20Canvas_clearLayerUpdates(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->clearLayerUpdates();
 }
 
 static void android_view_GLES20Canvas_flushLayerUpdates(JNIEnv* env, jobject clazz,
-        jlong rendererHandle) {
-    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererHandle);
+        jlong rendererPtr) {
+    OpenGLRenderer* renderer = reinterpret_cast<OpenGLRenderer*>(rendererPtr);
     renderer->flushLayerUpdates();
 }
 
@@ -1143,7 +962,7 @@
 android_app_ActivityThread_dumpGraphics(JNIEnv* env, jobject clazz, jobject javaFileDescriptor) {
 #ifdef USE_OPENGL_RENDERER
     int fd = jniGetFDFromFileDescriptor(env, javaFileDescriptor);
-    android::uirenderer::DisplayList::outputLogBuffer(fd);
+    android::uirenderer::RenderNode::outputLogBuffer(fd);
 #endif // USE_OPENGL_RENDERER
 }
 
@@ -1170,11 +989,9 @@
     { "nPrepare",           "(JZ)I",           (void*) android_view_GLES20Canvas_prepare },
     { "nPrepareDirty",      "(JIIIIZ)I",       (void*) android_view_GLES20Canvas_prepareDirty },
     { "nFinish",            "(J)V",            (void*) android_view_GLES20Canvas_finish },
-    { "nSetName",           "(JLjava/lang/String;)V",
-            (void*) android_view_GLES20Canvas_setName },
+    { "nSetProperty",           "(Ljava/lang/String;Ljava/lang/String;)V",
+            (void*) android_view_GLES20Canvas_setProperty },
 
-    { "nSetCountOverdrawEnabled", "(JZ)V",     (void*) android_view_GLES20Canvas_setCountOverdrawEnabled },
-    { "nGetOverdraw",             "(J)F",      (void*) android_view_GLES20Canvas_getOverdraw },
 
     { "nGetStencilSize",    "()I",             (void*) android_view_GLES20Canvas_getStencilSize },
 
@@ -1233,7 +1050,6 @@
 
     { "nResetModifiers",    "(JI)V",           (void*) android_view_GLES20Canvas_resetModifiers },
     { "nSetupShader",       "(JJ)V",           (void*) android_view_GLES20Canvas_setupShader },
-    { "nSetupColorFilter",  "(JJ)V",           (void*) android_view_GLES20Canvas_setupColorFilter },
     { "nSetupShadow",       "(JFFFI)V",        (void*) android_view_GLES20Canvas_setupShadow },
 
     { "nSetupPaintFilter",  "(JII)V",          (void*) android_view_GLES20Canvas_setupPaintFilter },
@@ -1258,30 +1074,12 @@
     { "nGetClipBounds",     "(JLandroid/graphics/Rect;)Z",
             (void*) android_view_GLES20Canvas_getClipBounds },
 
-    { "nGetDisplayList",         "(JJ)J",      (void*) android_view_GLES20Canvas_getDisplayList },
-    { "nOutputDisplayList",      "(JJ)V",      (void*) android_view_GLES20Canvas_outputDisplayList },
+    { "nFinishRecording",        "(J)J",      (void*) android_view_GLES20Canvas_finishRecording },
     { "nDrawDisplayList",        "(JJLandroid/graphics/Rect;I)I",
             (void*) android_view_GLES20Canvas_drawDisplayList },
 
     { "nCreateDisplayListRenderer", "()J",     (void*) android_view_GLES20Canvas_createDisplayListRenderer },
-    { "nResetDisplayListRenderer",  "(J)V",    (void*) android_view_GLES20Canvas_resetDisplayListRenderer },
 
-    { "nInterrupt",              "(J)V",       (void*) android_view_GLES20Canvas_interrupt },
-    { "nResume",                 "(J)V",       (void*) android_view_GLES20Canvas_resume },
-
-    { "nCreateLayerRenderer",    "(J)J",       (void*) android_view_GLES20Canvas_createLayerRenderer },
-    { "nCreateLayer",            "(IIZ[I)J",   (void*) android_view_GLES20Canvas_createLayer },
-    { "nResizeLayer",            "(JII[I)Z" ,  (void*) android_view_GLES20Canvas_resizeLayer },
-    { "nSetLayerPaint",          "(JJ)V",      (void*) android_view_GLES20Canvas_setLayerPaint },
-    { "nSetLayerColorFilter",    "(JJ)V",      (void*) android_view_GLES20Canvas_setLayerColorFilter },
-    { "nSetOpaqueLayer",         "(JZ)V",      (void*) android_view_GLES20Canvas_setOpaqueLayer },
-    { "nCreateTextureLayer",     "(Z[I)J",     (void*) android_view_GLES20Canvas_createTextureLayer },
-    { "nUpdateTextureLayer",     "(JIIZLandroid/graphics/SurfaceTexture;)V",
-            (void*) android_view_GLES20Canvas_updateTextureLayer },
-    { "nUpdateRenderLayer",      "(JJJIIII)V", (void*) android_view_GLES20Canvas_updateRenderLayer },
-    { "nClearLayerTexture",      "(J)V",       (void*) android_view_GLES20Canvas_clearLayerTexture },
-    { "nDestroyLayer",           "(J)V",       (void*) android_view_GLES20Canvas_destroyLayer },
-    { "nDestroyLayerDeferred",   "(J)V",       (void*) android_view_GLES20Canvas_destroyLayerDeferred },
     { "nDrawLayer",              "(JJFF)V",    (void*) android_view_GLES20Canvas_drawLayer },
     { "nCopyLayer",              "(JJ)Z",      (void*) android_view_GLES20Canvas_copyLayer },
     { "nClearLayerUpdates",      "(J)V",       (void*) android_view_GLES20Canvas_clearLayerUpdates },
@@ -1289,8 +1087,6 @@
     { "nPushLayerUpdate",        "(JJ)V",      (void*) android_view_GLES20Canvas_pushLayerUpdate },
     { "nCancelLayerUpdate",      "(JJ)V",      (void*) android_view_GLES20Canvas_cancelLayerUpdate },
 
-    { "nSetTextureLayerTransform", "(JJ)V",    (void*) android_view_GLES20Canvas_setTextureLayerTransform },
-
     { "nGetMaximumTextureWidth",  "()I",       (void*) android_view_GLES20Canvas_getMaxTextureWidth },
     { "nGetMaximumTextureHeight", "()I",       (void*) android_view_GLES20Canvas_getMaxTextureHeight },
 
diff --git a/core/jni/android_view_GLES20DisplayList.cpp b/core/jni/android_view_GLES20DisplayList.cpp
deleted file mode 100644
index 8e19efd..0000000
--- a/core/jni/android_view_GLES20DisplayList.cpp
+++ /dev/null
@@ -1,424 +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.
- */
-
-#define LOG_TAG "OpenGLRenderer"
-
-#include <EGL/egl.h>
-
-#include "jni.h"
-#include "GraphicsJNI.h"
-#include <nativehelper/JNIHelp.h>
-#include <android_runtime/AndroidRuntime.h>
-
-#include <DisplayList.h>
-#include <DisplayListRenderer.h>
-
-namespace android {
-
-using namespace uirenderer;
-
-/**
- * Note: OpenGLRenderer JNI layer is generated and compiled only on supported
- *       devices. This means all the logic must be compiled only when the
- *       preprocessor variable USE_OPENGL_RENDERER is defined.
- */
-#ifdef USE_OPENGL_RENDERER
-
-// ----------------------------------------------------------------------------
-// DisplayList view properties
-// ----------------------------------------------------------------------------
-
-static void android_view_GLES20DisplayList_reset(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->reset();
-}
-
-static jint android_view_GLES20DisplayList_getDisplayListSize(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getSize();
-}
-
-static void android_view_GLES20DisplayList_setDisplayListName(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jstring name) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    if (name != NULL) {
-        const char* textArray = env->GetStringUTFChars(name, NULL);
-        displayList->setName(textArray);
-        env->ReleaseStringUTFChars(name, textArray);
-    }
-}
-
-static void android_view_GLES20DisplayList_destroyDisplayList(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    DisplayList::destroyDisplayListDeferred(displayList);
-}
-
-// ----------------------------------------------------------------------------
-// DisplayList view properties
-// ----------------------------------------------------------------------------
-
-static void android_view_GLES20DisplayList_setCaching(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jboolean caching) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setCaching(caching);
-}
-
-//serban
-static void android_view_GLES20DisplayList_setStaticMatrix(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jlong matrixHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
-    displayList->setStaticMatrix(matrix);
-}
-
-static void android_view_GLES20DisplayList_setAnimationMatrix(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jlong matrixHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
-    displayList->setAnimationMatrix(matrix);
-}
-
-static void android_view_GLES20DisplayList_setClipToBounds(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jboolean clipToBounds) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setClipToBounds(clipToBounds);
-}
-
-static void android_view_GLES20DisplayList_setAlpha(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat alpha) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setAlpha(alpha);
-}
-
-static void android_view_GLES20DisplayList_setHasOverlappingRendering(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jboolean hasOverlappingRendering) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setHasOverlappingRendering(hasOverlappingRendering);
-}
-
-static void android_view_GLES20DisplayList_setTranslationX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat tx) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setTranslationX(tx);
-}
-
-static void android_view_GLES20DisplayList_setTranslationY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat ty) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setTranslationY(ty);
-}
-
-static void android_view_GLES20DisplayList_setRotation(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat rotation) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setRotation(rotation);
-}
-
-static void android_view_GLES20DisplayList_setRotationX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat rx) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setRotationX(rx);
-}
-
-static void android_view_GLES20DisplayList_setRotationY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat ry) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setRotationY(ry);
-}
-
-static void android_view_GLES20DisplayList_setScaleX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat sx) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setScaleX(sx);
-}
-
-static void android_view_GLES20DisplayList_setScaleY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat sy) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setScaleY(sy);
-}
-
-static void android_view_GLES20DisplayList_setTransformationInfo(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat alpha,
-        jfloat translationX, jfloat translationY, jfloat rotation, jfloat rotationX, jfloat rotationY,
-        jfloat scaleX, jfloat scaleY) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setAlpha(alpha);
-    displayList->setTranslationX(translationX);
-    displayList->setTranslationY(translationY);
-    displayList->setRotation(rotation);
-    displayList->setRotationX(rotationX);
-    displayList->setRotationY(rotationY);
-    displayList->setScaleX(scaleX);
-    displayList->setScaleY(scaleY);
-}
-
-static void android_view_GLES20DisplayList_setPivotX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat px) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setPivotX(px);
-}
-
-static void android_view_GLES20DisplayList_setPivotY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat py) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setPivotY(py);
-}
-
-static void android_view_GLES20DisplayList_setCameraDistance(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat distance) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setCameraDistance(distance);
-}
-
-static void android_view_GLES20DisplayList_setLeft(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jint left) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setLeft(left);
-}
-
-static void android_view_GLES20DisplayList_setTop(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jint top) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setTop(top);
-}
-
-static void android_view_GLES20DisplayList_setRight(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jint right) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setRight(right);
-}
-
-static void android_view_GLES20DisplayList_setBottom(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jint bottom) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setBottom(bottom);
-}
-
-static void android_view_GLES20DisplayList_setLeftTopRightBottom(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jint left, jint top,
-        int right, int bottom) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->setLeftTopRightBottom(left, top, right, bottom);
-}
-
-static void android_view_GLES20DisplayList_offsetLeftAndRight(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat offset) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->offsetLeftRight(offset);
-}
-
-static void android_view_GLES20DisplayList_offsetTopAndBottom(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jfloat offset) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    displayList->offsetTopBottom(offset);
-}
-
-static void android_view_GLES20DisplayList_getMatrix(JNIEnv* env,
-        jobject clazz, jlong displayListHandle, jlong matrixHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
-    SkMatrix* source = displayList->getStaticMatrix();
-    if (source) {
-        matrix->setConcat(SkMatrix::I(), *source);
-    } else {
-        matrix->setIdentity();
-    }
-}
-
-static jboolean android_view_GLES20DisplayList_hasOverlappingRendering(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->hasOverlappingRendering();
-}
-
-static jfloat android_view_GLES20DisplayList_getAlpha(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getAlpha();
-}
-
-static jfloat android_view_GLES20DisplayList_getLeft(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getLeft();
-}
-
-static jfloat android_view_GLES20DisplayList_getTop(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getTop();
-}
-
-static jfloat android_view_GLES20DisplayList_getRight(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getRight();
-}
-
-static jfloat android_view_GLES20DisplayList_getBottom(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getBottom();
-}
-
-static jfloat android_view_GLES20DisplayList_getCameraDistance(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getCameraDistance();
-}
-
-static jfloat android_view_GLES20DisplayList_getScaleX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getScaleX();
-}
-
-static jfloat android_view_GLES20DisplayList_getScaleY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getScaleY();
-}
-
-static jfloat android_view_GLES20DisplayList_getTranslationX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getTranslationX();
-}
-
-static jfloat android_view_GLES20DisplayList_getTranslationY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getTranslationY();
-}
-
-static jfloat android_view_GLES20DisplayList_getRotation(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getRotation();
-}
-
-static jfloat android_view_GLES20DisplayList_getRotationX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getRotationX();
-}
-
-static jfloat android_view_GLES20DisplayList_getRotationY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getRotationY();
-}
-
-static jfloat android_view_GLES20DisplayList_getPivotX(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getPivotX();
-}
-
-static jfloat android_view_GLES20DisplayList_getPivotY(JNIEnv* env,
-        jobject clazz, jlong displayListHandle) {
-    DisplayList* displayList = reinterpret_cast<DisplayList*>(displayListHandle);
-    return displayList->getPivotY();
-}
-
-#endif // USE_OPENGL_RENDERER
-
-// ----------------------------------------------------------------------------
-// JNI Glue
-// ----------------------------------------------------------------------------
-
-const char* const kClassPathName = "android/view/GLES20DisplayList";
-
-static JNINativeMethod gMethods[] = {
-#ifdef USE_OPENGL_RENDERER
-    { "nDestroyDisplayList",   "(J)V",   (void*) android_view_GLES20DisplayList_destroyDisplayList },
-    { "nGetDisplayListSize",   "(J)I",   (void*) android_view_GLES20DisplayList_getDisplayListSize },
-    { "nSetDisplayListName",   "(JLjava/lang/String;)V",
-            (void*) android_view_GLES20DisplayList_setDisplayListName },
-
-    { "nReset",                "(J)V",   (void*) android_view_GLES20DisplayList_reset },
-    { "nSetCaching",           "(JZ)V",  (void*) android_view_GLES20DisplayList_setCaching },
-    { "nSetStaticMatrix",      "(JJ)V",  (void*) android_view_GLES20DisplayList_setStaticMatrix },
-    { "nSetAnimationMatrix",   "(JJ)V",  (void*) android_view_GLES20DisplayList_setAnimationMatrix },
-    { "nSetClipToBounds",      "(JZ)V",  (void*) android_view_GLES20DisplayList_setClipToBounds },
-    { "nSetAlpha",             "(JF)V",  (void*) android_view_GLES20DisplayList_setAlpha },
-    { "nSetHasOverlappingRendering", "(JZ)V",
-            (void*) android_view_GLES20DisplayList_setHasOverlappingRendering },
-    { "nSetTranslationX",      "(JF)V",  (void*) android_view_GLES20DisplayList_setTranslationX },
-    { "nSetTranslationY",      "(JF)V",  (void*) android_view_GLES20DisplayList_setTranslationY },
-    { "nSetRotation",          "(JF)V",  (void*) android_view_GLES20DisplayList_setRotation },
-    { "nSetRotationX",         "(JF)V",  (void*) android_view_GLES20DisplayList_setRotationX },
-    { "nSetRotationY",         "(JF)V",  (void*) android_view_GLES20DisplayList_setRotationY },
-    { "nSetScaleX",            "(JF)V",  (void*) android_view_GLES20DisplayList_setScaleX },
-    { "nSetScaleY",            "(JF)V",  (void*) android_view_GLES20DisplayList_setScaleY },
-    { "nSetTransformationInfo","(JFFFFFFFF)V",
-            (void*) android_view_GLES20DisplayList_setTransformationInfo },
-    { "nSetPivotX",            "(JF)V",  (void*) android_view_GLES20DisplayList_setPivotX },
-    { "nSetPivotY",            "(JF)V",  (void*) android_view_GLES20DisplayList_setPivotY },
-    { "nSetCameraDistance",    "(JF)V",  (void*) android_view_GLES20DisplayList_setCameraDistance },
-    { "nSetLeft",              "(JI)V",  (void*) android_view_GLES20DisplayList_setLeft },
-    { "nSetTop",               "(JI)V",  (void*) android_view_GLES20DisplayList_setTop },
-    { "nSetRight",             "(JI)V",  (void*) android_view_GLES20DisplayList_setRight },
-    { "nSetBottom",            "(JI)V",  (void*) android_view_GLES20DisplayList_setBottom },
-    { "nSetLeftTopRightBottom","(JIIII)V",
-            (void*) android_view_GLES20DisplayList_setLeftTopRightBottom },
-    { "nOffsetLeftAndRight",   "(JF)V",  (void*) android_view_GLES20DisplayList_offsetLeftAndRight },
-    { "nOffsetTopAndBottom",   "(JF)V",  (void*) android_view_GLES20DisplayList_offsetTopAndBottom },
-
-
-    { "nGetMatrix",               "(JJ)V", (void*) android_view_GLES20DisplayList_getMatrix },
-    { "nHasOverlappingRendering", "(J)Z",  (void*) android_view_GLES20DisplayList_hasOverlappingRendering },
-    { "nGetAlpha",                "(J)F",  (void*) android_view_GLES20DisplayList_getAlpha },
-    { "nGetLeft",                 "(J)F",  (void*) android_view_GLES20DisplayList_getLeft },
-    { "nGetTop",                  "(J)F",  (void*) android_view_GLES20DisplayList_getTop },
-    { "nGetRight",                "(J)F",  (void*) android_view_GLES20DisplayList_getRight },
-    { "nGetBottom",               "(J)F",  (void*) android_view_GLES20DisplayList_getBottom },
-    { "nGetCameraDistance",       "(J)F",  (void*) android_view_GLES20DisplayList_getCameraDistance },
-    { "nGetScaleX",               "(J)F",  (void*) android_view_GLES20DisplayList_getScaleX },
-    { "nGetScaleY",               "(J)F",  (void*) android_view_GLES20DisplayList_getScaleY },
-    { "nGetTranslationX",         "(J)F",  (void*) android_view_GLES20DisplayList_getTranslationX },
-    { "nGetTranslationY",         "(J)F",  (void*) android_view_GLES20DisplayList_getTranslationY },
-    { "nGetRotation",             "(J)F",  (void*) android_view_GLES20DisplayList_getRotation },
-    { "nGetRotationX",            "(J)F",  (void*) android_view_GLES20DisplayList_getRotationX },
-    { "nGetRotationY",            "(J)F",  (void*) android_view_GLES20DisplayList_getRotationY },
-    { "nGetPivotX",               "(J)F",  (void*) android_view_GLES20DisplayList_getPivotX },
-    { "nGetPivotY",               "(J)F",  (void*) android_view_GLES20DisplayList_getPivotY },
-#endif
-};
-
-#ifdef USE_OPENGL_RENDERER
-    #define FIND_CLASS(var, className) \
-            var = env->FindClass(className); \
-            LOG_FATAL_IF(! var, "Unable to find class " className);
-
-    #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
-            var = env->GetMethodID(clazz, methodName, methodDescriptor); \
-            LOG_FATAL_IF(! var, "Unable to find method " methodName);
-#else
-    #define FIND_CLASS(var, className)
-    #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor)
-#endif
-
-int register_android_view_GLES20DisplayList(JNIEnv* env) {
-    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
-}
-
-};
-
diff --git a/core/jni/android_view_GLRenderer.cpp b/core/jni/android_view_GLRenderer.cpp
new file mode 100644
index 0000000..d0269a3
--- /dev/null
+++ b/core/jni/android_view_GLRenderer.cpp
@@ -0,0 +1,203 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+#define LOG_TAG "GLRenderer"
+
+#include "jni.h"
+#include <nativehelper/JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
+#include <EGL/egl.h>
+#include <EGL/eglext.h>
+#include <EGL/egl_cache.h>
+
+#include <utils/Timers.h>
+
+#include <private/hwui/DrawGlInfo.h>
+
+#include <Caches.h>
+#include <Extensions.h>
+#include <LayerRenderer.h>
+#include <RenderNode.h>
+
+#ifdef USE_OPENGL_RENDERER
+    EGLAPI void EGLAPIENTRY eglBeginFrame(EGLDisplay dpy, EGLSurface surface);
+#endif
+
+namespace android {
+
+/**
+ * Note: OpenGLRenderer JNI layer is generated and compiled only on supported
+ *       devices. This means all the logic must be compiled only when the
+ *       preprocessor variable USE_OPENGL_RENDERER is defined.
+ */
+#ifdef USE_OPENGL_RENDERER
+
+// ----------------------------------------------------------------------------
+// Defines
+// ----------------------------------------------------------------------------
+
+// Debug
+#define DEBUG_RENDERER 0
+
+// Debug
+#if DEBUG_RENDERER
+    #define RENDERER_LOGD(...) ALOGD(__VA_ARGS__)
+#else
+    #define RENDERER_LOGD(...)
+#endif
+
+// ----------------------------------------------------------------------------
+// Surface and display management
+// ----------------------------------------------------------------------------
+
+static jboolean android_view_GLRenderer_preserveBackBuffer(JNIEnv* env, jobject clazz) {
+    EGLDisplay display = eglGetCurrentDisplay();
+    EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
+
+    eglGetError();
+    eglSurfaceAttrib(display, surface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
+
+    EGLint error = eglGetError();
+    if (error != EGL_SUCCESS) {
+        RENDERER_LOGD("Could not enable buffer preserved swap behavior (%x)", error);
+    }
+
+    return error == EGL_SUCCESS;
+}
+
+static jboolean android_view_GLRenderer_isBackBufferPreserved(JNIEnv* env, jobject clazz) {
+    EGLDisplay display = eglGetCurrentDisplay();
+    EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
+    EGLint value;
+
+    eglGetError();
+    eglQuerySurface(display, surface, EGL_SWAP_BEHAVIOR, &value);
+
+    EGLint error = eglGetError();
+    if (error != EGL_SUCCESS) {
+        RENDERER_LOGD("Could not query buffer preserved swap behavior (%x)", error);
+    }
+
+    return error == EGL_SUCCESS && value == EGL_BUFFER_PRESERVED;
+}
+
+// ----------------------------------------------------------------------------
+// Tracing and debugging
+// ----------------------------------------------------------------------------
+
+static bool android_view_GLRenderer_loadProperties(JNIEnv* env, jobject clazz) {
+    if (uirenderer::Caches::hasInstance()) {
+        return uirenderer::Caches::getInstance().initProperties();
+    }
+    return false;
+}
+
+static void android_view_GLRenderer_beginFrame(JNIEnv* env, jobject clazz,
+        jintArray size) {
+
+    EGLDisplay display = eglGetCurrentDisplay();
+    EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
+
+    if (size) {
+        EGLint value;
+        jint* storage = env->GetIntArrayElements(size, NULL);
+
+        eglQuerySurface(display, surface, EGL_WIDTH, &value);
+        storage[0] = value;
+
+        eglQuerySurface(display, surface, EGL_HEIGHT, &value);
+        storage[1] = value;
+
+        env->ReleaseIntArrayElements(size, storage, 0);
+    }
+
+    eglBeginFrame(display, surface);
+}
+
+static jlong android_view_GLRenderer_getSystemTime(JNIEnv* env, jobject clazz) {
+    if (uirenderer::Extensions::getInstance().hasNvSystemTime()) {
+        return eglGetSystemTimeNV();
+    }
+    return systemTime(SYSTEM_TIME_MONOTONIC);
+}
+
+static void android_view_GLRenderer_destroyLayer(JNIEnv* env, jobject clazz,
+        jlong layerPtr) {
+    using namespace android::uirenderer;
+    Layer* layer = reinterpret_cast<Layer*>(layerPtr);
+    LayerRenderer::destroyLayer(layer);
+}
+
+static void android_view_GLRenderer_prepareTree(JNIEnv* env, jobject clazz,
+        jlong renderNodePtr) {
+    using namespace android::uirenderer;
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    TreeInfo ignoredInfo;
+    renderNode->prepareTree(ignoredInfo);
+}
+
+static void android_view_GLRenderer_invokeFunctor(JNIEnv* env, jobject clazz,
+        jlong functorPtr, jboolean hasContext) {
+    using namespace android::uirenderer;
+    Functor* functor = reinterpret_cast<Functor*>(functorPtr);
+    DrawGlInfo::Mode mode = hasContext ? DrawGlInfo::kModeProcess : DrawGlInfo::kModeProcessNoContext;
+    (*functor)(mode, NULL);
+}
+
+#endif // USE_OPENGL_RENDERER
+
+// ----------------------------------------------------------------------------
+// Shaders
+// ----------------------------------------------------------------------------
+
+static void android_view_GLRenderer_setupShadersDiskCache(JNIEnv* env, jobject clazz,
+        jstring diskCachePath) {
+
+    const char* cacheArray = env->GetStringUTFChars(diskCachePath, NULL);
+    egl_cache_t::get()->setCacheFilename(cacheArray);
+    env->ReleaseStringUTFChars(diskCachePath, cacheArray);
+}
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/view/GLRenderer";
+
+static JNINativeMethod gMethods[] = {
+#ifdef USE_OPENGL_RENDERER
+    { "isBackBufferPreserved", "()Z",   (void*) android_view_GLRenderer_isBackBufferPreserved },
+    { "preserveBackBuffer",    "()Z",   (void*) android_view_GLRenderer_preserveBackBuffer },
+    { "loadProperties",        "()Z",   (void*) android_view_GLRenderer_loadProperties },
+
+    { "beginFrame",            "([I)V", (void*) android_view_GLRenderer_beginFrame },
+
+    { "getSystemTime",         "()J",   (void*) android_view_GLRenderer_getSystemTime },
+    { "nDestroyLayer",         "(J)V",  (void*) android_view_GLRenderer_destroyLayer },
+    { "nPrepareTree", "(J)V", (void*) android_view_GLRenderer_prepareTree },
+    { "nInvokeFunctor",        "(JZ)V", (void*) android_view_GLRenderer_invokeFunctor },
+#endif
+
+    { "setupShadersDiskCache", "(Ljava/lang/String;)V",
+            (void*) android_view_GLRenderer_setupShadersDiskCache },
+};
+
+int register_android_view_GLRenderer(JNIEnv* env) {
+    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+};
diff --git a/core/jni/android_view_HardwareLayer.cpp b/core/jni/android_view_HardwareLayer.cpp
new file mode 100644
index 0000000..b2f17de
--- /dev/null
+++ b/core/jni/android_view_HardwareLayer.cpp
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#include "jni.h"
+#include "GraphicsJNI.h"
+#include <nativehelper/JNIHelp.h>
+
+#include <android_runtime/AndroidRuntime.h>
+#include <android_runtime/android_graphics_SurfaceTexture.h>
+
+#include <gui/GLConsumer.h>
+
+#include <SkBitmap.h>
+#include <SkCanvas.h>
+#include <SkMatrix.h>
+#include <SkPaint.h>
+#include <SkXfermode.h>
+
+#include <DeferredLayerUpdater.h>
+#include <LayerRenderer.h>
+#include <SkiaShader.h>
+#include <Rect.h>
+#include <RenderNode.h>
+
+namespace android {
+
+using namespace uirenderer;
+
+#ifdef USE_OPENGL_RENDERER
+
+static jlong android_view_HardwareLayer_createTextureLayer(JNIEnv* env, jobject clazz) {
+    Layer* layer = LayerRenderer::createTextureLayer();
+    if (!layer) return 0;
+
+    return reinterpret_cast<jlong>( new DeferredLayerUpdater(layer) );
+}
+
+static jlong android_view_HardwareLayer_createRenderLayer(JNIEnv* env, jobject clazz,
+        jint width, jint height) {
+    Layer* layer = LayerRenderer::createRenderLayer(width, height);
+    if (!layer) return 0;
+
+    OpenGLRenderer* renderer = new LayerRenderer(layer);
+    renderer->initProperties();
+    return reinterpret_cast<jlong>( new DeferredLayerUpdater(layer, renderer) );
+}
+
+static void android_view_HardwareLayer_onTextureDestroyed(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    layer->backingLayer()->clearTexture();
+}
+
+static jlong android_view_HardwareLayer_detachBackingLayer(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    return reinterpret_cast<jlong>( layer->detachBackingLayer() );
+}
+
+static void android_view_HardwareLayer_destroyLayerUpdater(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    delete layer;
+}
+
+static jboolean android_view_HardwareLayer_prepare(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr, jint width, jint height, jboolean isOpaque) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    bool changed = false;
+    changed |= layer->setSize(width, height);
+    changed |= layer->setBlend(!isOpaque);
+    return changed;
+}
+
+static void android_view_HardwareLayer_setLayerPaint(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr, jlong paintPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    if (layer) {
+        SkPaint* paint = reinterpret_cast<SkPaint*>(paintPtr);
+        layer->setPaint(paint);
+    }
+}
+
+static void android_view_HardwareLayer_setTransform(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr, jlong matrixPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
+    layer->setTransform(matrix);
+}
+
+static void android_view_HardwareLayer_setSurfaceTexture(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr, jobject surface, jboolean isAlreadyAttached) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    sp<GLConsumer> surfaceTexture(SurfaceTexture_getSurfaceTexture(env, surface));
+    layer->setSurfaceTexture(surfaceTexture, !isAlreadyAttached);
+}
+
+static void android_view_HardwareLayer_updateSurfaceTexture(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    layer->updateTexImage();
+}
+
+static void android_view_HardwareLayer_updateRenderLayer(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr, jlong displayListPtr,
+        jint left, jint top, jint right, jint bottom) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    RenderNode* displayList = reinterpret_cast<RenderNode*>(displayListPtr);
+    layer->setDisplayList(displayList, left, top, right, bottom);
+}
+
+static jboolean android_view_HardwareLayer_flushChanges(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    TreeInfo ignoredInfo;
+    return layer->apply(ignoredInfo);
+}
+
+static jlong android_view_HardwareLayer_getLayer(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    return reinterpret_cast<jlong>( layer->backingLayer() );
+}
+
+static jint android_view_HardwareLayer_getTexName(JNIEnv* env, jobject clazz,
+        jlong layerUpdaterPtr) {
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
+    return layer->backingLayer()->getTexture();
+}
+
+#endif // USE_OPENGL_RENDERER
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/view/HardwareLayer";
+
+static JNINativeMethod gMethods[] = {
+#ifdef USE_OPENGL_RENDERER
+
+    { "nCreateTextureLayer",     "()J",        (void*) android_view_HardwareLayer_createTextureLayer },
+    { "nCreateRenderLayer",      "(II)J",      (void*) android_view_HardwareLayer_createRenderLayer },
+    { "nOnTextureDestroyed",     "(J)V",       (void*) android_view_HardwareLayer_onTextureDestroyed },
+    { "nDetachBackingLayer",     "(J)J",       (void*) android_view_HardwareLayer_detachBackingLayer },
+    { "nDestroyLayerUpdater",    "(J)V",       (void*) android_view_HardwareLayer_destroyLayerUpdater },
+
+    { "nPrepare",                "(JIIZ)Z",    (void*) android_view_HardwareLayer_prepare },
+    { "nSetLayerPaint",          "(JJ)V",      (void*) android_view_HardwareLayer_setLayerPaint },
+    { "nSetTransform",           "(JJ)V",      (void*) android_view_HardwareLayer_setTransform },
+    { "nSetSurfaceTexture",      "(JLandroid/graphics/SurfaceTexture;Z)V",
+            (void*) android_view_HardwareLayer_setSurfaceTexture },
+    { "nUpdateSurfaceTexture",   "(J)V",       (void*) android_view_HardwareLayer_updateSurfaceTexture },
+    { "nUpdateRenderLayer",      "(JJIIII)V",  (void*) android_view_HardwareLayer_updateRenderLayer },
+
+    { "nFlushChanges",           "(J)Z",       (void*) android_view_HardwareLayer_flushChanges },
+
+    { "nGetLayer",               "(J)J",       (void*) android_view_HardwareLayer_getLayer },
+    { "nGetTexName",             "(J)I",       (void*) android_view_HardwareLayer_getTexName },
+#endif
+};
+
+int register_android_view_HardwareLayer(JNIEnv* env) {
+    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+};
diff --git a/core/jni/android_view_HardwareRenderer.cpp b/core/jni/android_view_HardwareRenderer.cpp
deleted file mode 100644
index 479fbe2..0000000
--- a/core/jni/android_view_HardwareRenderer.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#define LOG_TAG "HardwareRenderer"
-
-#include "jni.h"
-#include <nativehelper/JNIHelp.h>
-#include <android_runtime/AndroidRuntime.h>
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-#include <EGL/egl_cache.h>
-
-#include <utils/Timers.h>
-
-#include <Caches.h>
-#include <Extensions.h>
-
-#ifdef USE_OPENGL_RENDERER
-    EGLAPI void EGLAPIENTRY eglBeginFrame(EGLDisplay dpy, EGLSurface surface);
-#endif
-
-namespace android {
-
-/**
- * Note: OpenGLRenderer JNI layer is generated and compiled only on supported
- *       devices. This means all the logic must be compiled only when the
- *       preprocessor variable USE_OPENGL_RENDERER is defined.
- */
-#ifdef USE_OPENGL_RENDERER
-
-// ----------------------------------------------------------------------------
-// Defines
-// ----------------------------------------------------------------------------
-
-// Debug
-#define DEBUG_RENDERER 0
-
-// Debug
-#if DEBUG_RENDERER
-    #define RENDERER_LOGD(...) ALOGD(__VA_ARGS__)
-#else
-    #define RENDERER_LOGD(...)
-#endif
-
-// ----------------------------------------------------------------------------
-// Surface and display management
-// ----------------------------------------------------------------------------
-
-static jboolean android_view_HardwareRenderer_preserveBackBuffer(JNIEnv* env, jobject clazz) {
-    EGLDisplay display = eglGetCurrentDisplay();
-    EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
-
-    eglGetError();
-    eglSurfaceAttrib(display, surface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED);
-
-    EGLint error = eglGetError();
-    if (error != EGL_SUCCESS) {
-        RENDERER_LOGD("Could not enable buffer preserved swap behavior (%x)", error);
-    }
-
-    return error == EGL_SUCCESS;
-}
-
-static jboolean android_view_HardwareRenderer_isBackBufferPreserved(JNIEnv* env, jobject clazz) {
-    EGLDisplay display = eglGetCurrentDisplay();
-    EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
-    EGLint value;
-
-    eglGetError();
-    eglQuerySurface(display, surface, EGL_SWAP_BEHAVIOR, &value);
-
-    EGLint error = eglGetError();
-    if (error != EGL_SUCCESS) {
-        RENDERER_LOGD("Could not query buffer preserved swap behavior (%x)", error);
-    }
-
-    return error == EGL_SUCCESS && value == EGL_BUFFER_PRESERVED;
-}
-
-// ----------------------------------------------------------------------------
-// Tracing and debugging
-// ----------------------------------------------------------------------------
-
-static bool android_view_HardwareRenderer_loadProperties(JNIEnv* env, jobject clazz) {
-    if (uirenderer::Caches::hasInstance()) {
-        return uirenderer::Caches::getInstance().initProperties();
-    }
-    return false;
-}
-
-static void android_view_HardwareRenderer_beginFrame(JNIEnv* env, jobject clazz,
-        jintArray size) {
-
-    EGLDisplay display = eglGetCurrentDisplay();
-    EGLSurface surface = eglGetCurrentSurface(EGL_DRAW);
-
-    if (size) {
-        EGLint value;
-        jint* storage = env->GetIntArrayElements(size, NULL);
-
-        eglQuerySurface(display, surface, EGL_WIDTH, &value);
-        storage[0] = value;
-
-        eglQuerySurface(display, surface, EGL_HEIGHT, &value);
-        storage[1] = value;
-
-        env->ReleaseIntArrayElements(size, storage, 0);
-    }
-
-    eglBeginFrame(display, surface);
-}
-
-static jlong android_view_HardwareRenderer_getSystemTime(JNIEnv* env, jobject clazz) {
-    if (uirenderer::Extensions::getInstance().hasNvSystemTime()) {
-        return eglGetSystemTimeNV();
-    }
-    return systemTime(SYSTEM_TIME_MONOTONIC);
-}
-
-#endif // USE_OPENGL_RENDERER
-
-// ----------------------------------------------------------------------------
-// Shaders
-// ----------------------------------------------------------------------------
-
-static void android_view_HardwareRenderer_setupShadersDiskCache(JNIEnv* env, jobject clazz,
-        jstring diskCachePath) {
-
-    const char* cacheArray = env->GetStringUTFChars(diskCachePath, NULL);
-    egl_cache_t::get()->setCacheFilename(cacheArray);
-    env->ReleaseStringUTFChars(diskCachePath, cacheArray);
-}
-
-// ----------------------------------------------------------------------------
-// JNI Glue
-// ----------------------------------------------------------------------------
-
-const char* const kClassPathName = "android/view/HardwareRenderer";
-
-static JNINativeMethod gMethods[] = {
-#ifdef USE_OPENGL_RENDERER
-    { "nIsBackBufferPreserved", "()Z",   (void*) android_view_HardwareRenderer_isBackBufferPreserved },
-    { "nPreserveBackBuffer",    "()Z",   (void*) android_view_HardwareRenderer_preserveBackBuffer },
-    { "nLoadProperties",        "()Z",   (void*) android_view_HardwareRenderer_loadProperties },
-
-    { "nBeginFrame",            "([I)V", (void*) android_view_HardwareRenderer_beginFrame },
-
-    { "nGetSystemTime",         "()J",   (void*) android_view_HardwareRenderer_getSystemTime },
-#endif
-
-    { "nSetupShadersDiskCache", "(Ljava/lang/String;)V",
-            (void*) android_view_HardwareRenderer_setupShadersDiskCache },
-};
-
-int register_android_view_HardwareRenderer(JNIEnv* env) {
-    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
-}
-
-};
diff --git a/core/jni/android_view_KeyEvent.cpp b/core/jni/android_view_KeyEvent.cpp
index c83541d..7ae21a7 100644
--- a/core/jni/android_view_KeyEvent.cpp
+++ b/core/jni/android_view_KeyEvent.cpp
@@ -22,6 +22,7 @@
 #include <android_runtime/Log.h>
 #include <utils/Log.h>
 #include <input/Input.h>
+#include <ScopedUtfChars.h>
 #include "android_view_KeyEvent.h"
 
 namespace android {
@@ -102,20 +103,25 @@
     return OK;
 }
 
-static jboolean native_isSystemKey(JNIEnv* env, jobject clazz, jint keyCode) {
-    return KeyEvent::isSystemKey(keyCode);
+static jstring android_view_KeyEvent_nativeKeyCodeToString(JNIEnv* env, jobject clazz,
+        jint keyCode) {
+    return env->NewStringUTF(KeyEvent::getLabel(keyCode));
 }
 
-static jboolean native_hasDefaultAction(JNIEnv* env, jobject clazz, jint keyCode) {
-    return KeyEvent::hasDefaultAction(keyCode);
+static jint android_view_KeyEvent_nativeKeyCodeFromString(JNIEnv* env, jobject clazz,
+        jstring label) {
+    ScopedUtfChars keyLabel(env, label);
+    return KeyEvent::getKeyCodeFromLabel(keyLabel.c_str());
 }
 
 
 // ----------------------------------------------------------------------------
 
 static const JNINativeMethod g_methods[] = {
-    { "native_isSystemKey", "(I)Z", (void*)native_isSystemKey },
-    { "native_hasDefaultAction", "(I)Z", (void*)native_hasDefaultAction },
+    { "nativeKeyCodeToString", "(I)Ljava/lang/String;",
+        (void*)android_view_KeyEvent_nativeKeyCodeToString},
+    { "nativeKeyCodeFromString", "(Ljava/lang/String;)I",
+        (void*)android_view_KeyEvent_nativeKeyCodeFromString},
 };
 
 #define FIND_CLASS(var, className) \
diff --git a/core/jni/android_view_MotionEvent.cpp b/core/jni/android_view_MotionEvent.cpp
index 76e145b..6ae02e0 100644
--- a/core/jni/android_view_MotionEvent.cpp
+++ b/core/jni/android_view_MotionEvent.cpp
@@ -23,6 +23,7 @@
 #include <android_runtime/Log.h>
 #include <utils/Log.h>
 #include <input/Input.h>
+#include <ScopedUtfChars.h>
 #include "android_os_Parcel.h"
 #include "android_view_MotionEvent.h"
 #include "android_util_Binder.h"
@@ -724,6 +725,17 @@
     }
 }
 
+static jstring android_view_MotionEvent_nativeAxisToString(JNIEnv* env, jclass clazz,
+        jint axis) {
+    return env->NewStringUTF(MotionEvent::getLabel(static_cast<int32_t>(axis)));
+}
+
+static jint android_view_MotionEvent_nativeAxisFromString(JNIEnv* env, jclass clazz,
+        jstring label) {
+    ScopedUtfChars axisLabel(env, label);
+    return static_cast<jint>(MotionEvent::getAxisFromLabel(axisLabel.c_str()));
+}
+
 // ----------------------------------------------------------------------------
 
 static JNINativeMethod gMotionEventMethods[] = {
@@ -840,6 +852,10 @@
     { "nativeWriteToParcel",
             "(JLandroid/os/Parcel;)V",
             (void*)android_view_MotionEvent_nativeWriteToParcel },
+    { "nativeAxisToString", "(I)Ljava/lang/String;",
+            (void*)android_view_MotionEvent_nativeAxisToString },
+    { "nativeAxisFromString", "(Ljava/lang/String;)I",
+            (void*)android_view_MotionEvent_nativeAxisFromString },
 };
 
 #define FIND_CLASS(var, className) \
diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp
new file mode 100644
index 0000000..4715c26
--- /dev/null
+++ b/core/jni/android_view_RenderNode.cpp
@@ -0,0 +1,560 @@
+/*
+ * 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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#include <EGL/egl.h>
+
+#include "jni.h"
+#include "GraphicsJNI.h"
+#include <nativehelper/JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
+#include <Animator.h>
+#include <DisplayListRenderer.h>
+#include <RenderNode.h>
+
+namespace android {
+
+using namespace uirenderer;
+
+/**
+ * Note: OpenGLRenderer JNI layer is generated and compiled only on supported
+ *       devices. This means all the logic must be compiled only when the
+ *       preprocessor variable USE_OPENGL_RENDERER is defined.
+ */
+#ifdef USE_OPENGL_RENDERER
+
+// ----------------------------------------------------------------------------
+// DisplayList view properties
+// ----------------------------------------------------------------------------
+
+static void android_view_RenderNode_output(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->output();
+}
+
+static jlong android_view_RenderNode_create(JNIEnv* env, jobject clazz, jstring name) {
+    RenderNode* renderNode = new RenderNode();
+    renderNode->incStrong(0);
+    if (name != NULL) {
+        const char* textArray = env->GetStringUTFChars(name, NULL);
+        renderNode->setName(textArray);
+        env->ReleaseStringUTFChars(name, textArray);
+    }
+    return reinterpret_cast<jlong>(renderNode);
+}
+
+static void android_view_RenderNode_destroyRenderNode(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->decStrong(0);
+}
+
+static void android_view_RenderNode_setDisplayListData(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jlong newDataPtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    DisplayListData* newData = reinterpret_cast<DisplayListData*>(newDataPtr);
+    renderNode->setStagingDisplayList(newData);
+}
+
+// ----------------------------------------------------------------------------
+// RenderProperties - setters
+// ----------------------------------------------------------------------------
+
+static void android_view_RenderNode_setCaching(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jboolean caching) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setCaching(caching);
+}
+
+static void android_view_RenderNode_setStaticMatrix(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jlong matrixPtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
+    renderNode->mutateStagingProperties().setStaticMatrix(matrix);
+}
+
+static void android_view_RenderNode_setAnimationMatrix(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jlong matrixPtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixPtr);
+    renderNode->mutateStagingProperties().setAnimationMatrix(matrix);
+}
+
+static void android_view_RenderNode_setClipToBounds(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jboolean clipToBounds) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setClipToBounds(clipToBounds);
+}
+
+static void android_view_RenderNode_setProjectBackwards(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jboolean shouldProject) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setProjectBackwards(shouldProject);
+}
+
+static void android_view_RenderNode_setProjectionReceiver(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jboolean shouldRecieve) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setProjectionReceiver(shouldRecieve);
+}
+
+static void android_view_RenderNode_setOutlineRoundRect(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jint left, jint top,
+        jint right, jint bottom, jfloat radius) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().mutableOutline().setRoundRect(left, top, right, bottom, radius);
+    renderNode->mutateStagingProperties().updateClipPath();
+}
+
+static void android_view_RenderNode_setOutlineConvexPath(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jlong outlinePathPtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    SkPath* outlinePath = reinterpret_cast<SkPath*>(outlinePathPtr);
+    renderNode->mutateStagingProperties().mutableOutline().setConvexPath(outlinePath);
+    renderNode->mutateStagingProperties().updateClipPath();
+}
+
+static void android_view_RenderNode_setOutlineEmpty(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().mutableOutline().setEmpty();
+    renderNode->mutateStagingProperties().updateClipPath();
+}
+
+static void android_view_RenderNode_setClipToOutline(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jboolean clipToOutline) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().mutableOutline().setShouldClip(clipToOutline);
+    renderNode->mutateStagingProperties().updateClipPath();
+}
+
+static void android_view_RenderNode_setRevealClip(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jboolean shouldClip, jboolean inverseClip,
+        jfloat x, jfloat y, jfloat radius) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().mutableRevealClip().set(
+            shouldClip, inverseClip, x, y, radius);
+    renderNode->mutateStagingProperties().updateClipPath();
+}
+
+static void android_view_RenderNode_setAlpha(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float alpha) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setAlpha(alpha);
+}
+
+static void android_view_RenderNode_setHasOverlappingRendering(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, bool hasOverlappingRendering) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setHasOverlappingRendering(hasOverlappingRendering);
+}
+
+static void android_view_RenderNode_setElevation(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float elevation) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setElevation(elevation);
+}
+
+static void android_view_RenderNode_setTranslationX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float tx) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setTranslationX(tx);
+}
+
+static void android_view_RenderNode_setTranslationY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float ty) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setTranslationY(ty);
+}
+
+static void android_view_RenderNode_setTranslationZ(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float tz) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setTranslationZ(tz);
+}
+
+static void android_view_RenderNode_setRotation(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float rotation) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setRotation(rotation);
+}
+
+static void android_view_RenderNode_setRotationX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float rx) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setRotationX(rx);
+}
+
+static void android_view_RenderNode_setRotationY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float ry) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setRotationY(ry);
+}
+
+static void android_view_RenderNode_setScaleX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float sx) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setScaleX(sx);
+}
+
+static void android_view_RenderNode_setScaleY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float sy) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setScaleY(sy);
+}
+
+static void android_view_RenderNode_setPivotX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float px) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setPivotX(px);
+}
+
+static void android_view_RenderNode_setPivotY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float py) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setPivotY(py);
+}
+
+static void android_view_RenderNode_setCameraDistance(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float distance) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setCameraDistance(distance);
+}
+
+static void android_view_RenderNode_setLeft(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, int left) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setLeft(left);
+}
+
+static void android_view_RenderNode_setTop(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, int top) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setTop(top);
+}
+
+static void android_view_RenderNode_setRight(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, int right) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setRight(right);
+}
+
+static void android_view_RenderNode_setBottom(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, int bottom) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setBottom(bottom);
+}
+
+static void android_view_RenderNode_setLeftTopRightBottom(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, int left, int top,
+        int right, int bottom) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().setLeftTopRightBottom(left, top, right, bottom);
+}
+
+static void android_view_RenderNode_offsetLeftAndRight(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float offset) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().offsetLeftRight(offset);
+}
+
+static void android_view_RenderNode_offsetTopAndBottom(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, float offset) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().offsetTopBottom(offset);
+}
+
+// ----------------------------------------------------------------------------
+// RenderProperties - getters
+// ----------------------------------------------------------------------------
+
+static jboolean android_view_RenderNode_hasOverlappingRendering(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().hasOverlappingRendering();
+}
+
+static jfloat android_view_RenderNode_getAlpha(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getAlpha();
+}
+
+static jfloat android_view_RenderNode_getLeft(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getLeft();
+}
+
+static jfloat android_view_RenderNode_getTop(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getTop();
+}
+
+static jfloat android_view_RenderNode_getRight(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getRight();
+}
+
+static jfloat android_view_RenderNode_getBottom(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getBottom();
+}
+
+static jfloat android_view_RenderNode_getCameraDistance(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getCameraDistance();
+}
+
+static jfloat android_view_RenderNode_getScaleX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getScaleX();
+}
+
+static jfloat android_view_RenderNode_getScaleY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getScaleY();
+}
+
+static jfloat android_view_RenderNode_getElevation(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getElevation();
+}
+
+static jfloat android_view_RenderNode_getTranslationX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getTranslationX();
+}
+
+static jfloat android_view_RenderNode_getTranslationY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getTranslationY();
+}
+
+static jfloat android_view_RenderNode_getTranslationZ(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getTranslationZ();
+}
+
+static jfloat android_view_RenderNode_getRotation(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getRotation();
+}
+
+static jfloat android_view_RenderNode_getRotationX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getRotationX();
+}
+
+static jfloat android_view_RenderNode_getRotationY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().getRotationY();
+}
+
+static jboolean android_view_RenderNode_isPivotExplicitlySet(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    return renderNode->stagingProperties().isPivotExplicitlySet();
+}
+
+static jboolean android_view_RenderNode_hasIdentityMatrix(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().updateMatrix();
+    return !renderNode->stagingProperties().hasTransformMatrix();
+}
+
+// ----------------------------------------------------------------------------
+// RenderProperties - computed getters
+// ----------------------------------------------------------------------------
+
+static void android_view_RenderNode_getTransformMatrix(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jlong outMatrixPtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    SkMatrix* outMatrix = reinterpret_cast<SkMatrix*>(outMatrixPtr);
+
+    renderNode->mutateStagingProperties().updateMatrix();
+    const SkMatrix* transformMatrix = renderNode->stagingProperties().getTransformMatrix();
+
+    if (transformMatrix) {
+        *outMatrix = *transformMatrix;
+    } else {
+        outMatrix->setIdentity();
+    }
+}
+
+static void android_view_RenderNode_getInverseTransformMatrix(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr, jlong outMatrixPtr) {
+    // load transform matrix
+    android_view_RenderNode_getTransformMatrix(env, clazz, renderNodePtr, outMatrixPtr);
+    SkMatrix* outMatrix = reinterpret_cast<SkMatrix*>(outMatrixPtr);
+
+    // return it inverted
+    if (!outMatrix->invert(outMatrix)) {
+        // failed to load inverse, pass back identity
+        outMatrix->setIdentity();
+    }
+}
+
+static jfloat android_view_RenderNode_getPivotX(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().updateMatrix();
+    return renderNode->stagingProperties().getPivotX();
+}
+
+static jfloat android_view_RenderNode_getPivotY(JNIEnv* env,
+        jobject clazz, jlong renderNodePtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    renderNode->mutateStagingProperties().updateMatrix();
+    return renderNode->stagingProperties().getPivotY();
+}
+
+// ----------------------------------------------------------------------------
+// RenderProperties - Animations
+// ----------------------------------------------------------------------------
+
+static void android_view_RenderNode_addAnimator(JNIEnv* env, jobject clazz,
+        jlong renderNodePtr, jlong animatorPtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    RenderPropertyAnimator* animator = reinterpret_cast<RenderPropertyAnimator*>(animatorPtr);
+    renderNode->addAnimator(animator);
+}
+
+static void android_view_RenderNode_removeAnimator(JNIEnv* env, jobject clazz,
+        jlong renderNodePtr, jlong animatorPtr) {
+    RenderNode* renderNode = reinterpret_cast<RenderNode*>(renderNodePtr);
+    RenderPropertyAnimator* animator = reinterpret_cast<RenderPropertyAnimator*>(animatorPtr);
+    renderNode->removeAnimator(animator);
+}
+
+
+#endif // USE_OPENGL_RENDERER
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/view/RenderNode";
+
+static JNINativeMethod gMethods[] = {
+#ifdef USE_OPENGL_RENDERER
+    { "nCreate",               "(Ljava/lang/String;)J",    (void*) android_view_RenderNode_create },
+    { "nDestroyRenderNode",   "(J)V",   (void*) android_view_RenderNode_destroyRenderNode },
+    { "nSetDisplayListData",   "(JJ)V", (void*) android_view_RenderNode_setDisplayListData },
+    { "nOutput",               "(J)V",  (void*) android_view_RenderNode_output },
+
+    { "nSetCaching",           "(JZ)V",  (void*) android_view_RenderNode_setCaching },
+    { "nSetStaticMatrix",      "(JJ)V",  (void*) android_view_RenderNode_setStaticMatrix },
+    { "nSetAnimationMatrix",   "(JJ)V",  (void*) android_view_RenderNode_setAnimationMatrix },
+    { "nSetClipToBounds",      "(JZ)V",  (void*) android_view_RenderNode_setClipToBounds },
+    { "nSetProjectBackwards",  "(JZ)V",  (void*) android_view_RenderNode_setProjectBackwards },
+    { "nSetProjectionReceiver","(JZ)V",  (void*) android_view_RenderNode_setProjectionReceiver },
+
+    { "nSetOutlineRoundRect",  "(JIIIIF)V", (void*) android_view_RenderNode_setOutlineRoundRect },
+    { "nSetOutlineConvexPath", "(JJ)V",  (void*) android_view_RenderNode_setOutlineConvexPath },
+    { "nSetOutlineEmpty",      "(J)V",   (void*) android_view_RenderNode_setOutlineEmpty },
+    { "nSetClipToOutline",     "(JZ)V",  (void*) android_view_RenderNode_setClipToOutline },
+    { "nSetRevealClip",        "(JZZFFF)V", (void*) android_view_RenderNode_setRevealClip },
+
+    { "nSetAlpha",             "(JF)V",  (void*) android_view_RenderNode_setAlpha },
+    { "nSetHasOverlappingRendering", "(JZ)V",
+            (void*) android_view_RenderNode_setHasOverlappingRendering },
+    { "nSetElevation",         "(JF)V",  (void*) android_view_RenderNode_setElevation },
+    { "nSetTranslationX",      "(JF)V",  (void*) android_view_RenderNode_setTranslationX },
+    { "nSetTranslationY",      "(JF)V",  (void*) android_view_RenderNode_setTranslationY },
+    { "nSetTranslationZ",      "(JF)V",  (void*) android_view_RenderNode_setTranslationZ },
+    { "nSetRotation",          "(JF)V",  (void*) android_view_RenderNode_setRotation },
+    { "nSetRotationX",         "(JF)V",  (void*) android_view_RenderNode_setRotationX },
+    { "nSetRotationY",         "(JF)V",  (void*) android_view_RenderNode_setRotationY },
+    { "nSetScaleX",            "(JF)V",  (void*) android_view_RenderNode_setScaleX },
+    { "nSetScaleY",            "(JF)V",  (void*) android_view_RenderNode_setScaleY },
+    { "nSetPivotX",            "(JF)V",  (void*) android_view_RenderNode_setPivotX },
+    { "nSetPivotY",            "(JF)V",  (void*) android_view_RenderNode_setPivotY },
+    { "nSetCameraDistance",    "(JF)V",  (void*) android_view_RenderNode_setCameraDistance },
+    { "nSetLeft",              "(JI)V",  (void*) android_view_RenderNode_setLeft },
+    { "nSetTop",               "(JI)V",  (void*) android_view_RenderNode_setTop },
+    { "nSetRight",             "(JI)V",  (void*) android_view_RenderNode_setRight },
+    { "nSetBottom",            "(JI)V",  (void*) android_view_RenderNode_setBottom },
+    { "nSetLeftTopRightBottom","(JIIII)V", (void*) android_view_RenderNode_setLeftTopRightBottom },
+    { "nOffsetLeftAndRight",   "(JF)V",  (void*) android_view_RenderNode_offsetLeftAndRight },
+    { "nOffsetTopAndBottom",   "(JF)V",  (void*) android_view_RenderNode_offsetTopAndBottom },
+
+    { "nHasOverlappingRendering", "(J)Z",  (void*) android_view_RenderNode_hasOverlappingRendering },
+    { "nGetAlpha",                "(J)F",  (void*) android_view_RenderNode_getAlpha },
+    { "nGetLeft",                 "(J)F",  (void*) android_view_RenderNode_getLeft },
+    { "nGetTop",                  "(J)F",  (void*) android_view_RenderNode_getTop },
+    { "nGetRight",                "(J)F",  (void*) android_view_RenderNode_getRight },
+    { "nGetBottom",               "(J)F",  (void*) android_view_RenderNode_getBottom },
+    { "nGetCameraDistance",       "(J)F",  (void*) android_view_RenderNode_getCameraDistance },
+    { "nGetScaleX",               "(J)F",  (void*) android_view_RenderNode_getScaleX },
+    { "nGetScaleY",               "(J)F",  (void*) android_view_RenderNode_getScaleY },
+    { "nGetElevation",            "(J)F",  (void*) android_view_RenderNode_getElevation },
+    { "nGetTranslationX",         "(J)F",  (void*) android_view_RenderNode_getTranslationX },
+    { "nGetTranslationY",         "(J)F",  (void*) android_view_RenderNode_getTranslationY },
+    { "nGetTranslationZ",         "(J)F",  (void*) android_view_RenderNode_getTranslationZ },
+    { "nGetRotation",             "(J)F",  (void*) android_view_RenderNode_getRotation },
+    { "nGetRotationX",            "(J)F",  (void*) android_view_RenderNode_getRotationX },
+    { "nGetRotationY",            "(J)F",  (void*) android_view_RenderNode_getRotationY },
+    { "nIsPivotExplicitlySet",    "(J)Z",  (void*) android_view_RenderNode_isPivotExplicitlySet },
+    { "nHasIdentityMatrix",       "(J)Z",  (void*) android_view_RenderNode_hasIdentityMatrix },
+
+    { "nGetTransformMatrix",       "(JJ)V", (void*) android_view_RenderNode_getTransformMatrix },
+    { "nGetInverseTransformMatrix","(JJ)V", (void*) android_view_RenderNode_getInverseTransformMatrix },
+
+    { "nGetPivotX",                "(J)F",  (void*) android_view_RenderNode_getPivotX },
+    { "nGetPivotY",                "(J)F",  (void*) android_view_RenderNode_getPivotY },
+
+    { "nAddAnimator",              "(JJ)V", (void*) android_view_RenderNode_addAnimator },
+    { "nRemoveAnimator",           "(JJ)V", (void*) android_view_RenderNode_removeAnimator },
+#endif
+};
+
+#ifdef USE_OPENGL_RENDERER
+    #define FIND_CLASS(var, className) \
+            var = env->FindClass(className); \
+            LOG_FATAL_IF(! var, "Unable to find class " className);
+
+    #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
+            var = env->GetMethodID(clazz, methodName, methodDescriptor); \
+            LOG_FATAL_IF(! var, "Unable to find method " methodName);
+#else
+    #define FIND_CLASS(var, className)
+    #define GET_METHOD_ID(var, clazz, methodName, methodDescriptor)
+#endif
+
+int register_android_view_RenderNode(JNIEnv* env) {
+    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+};
+
diff --git a/core/jni/android_view_RenderNodeAnimator.cpp b/core/jni/android_view_RenderNodeAnimator.cpp
new file mode 100644
index 0000000..b92c992
--- /dev/null
+++ b/core/jni/android_view_RenderNodeAnimator.cpp
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#include "android_view_RenderNodeAnimator.h"
+
+#include "jni.h"
+#include "GraphicsJNI.h"
+#include <nativehelper/JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
+#include <Animator.h>
+#include <Interpolator.h>
+#include <RenderProperties.h>
+
+namespace android {
+
+using namespace uirenderer;
+
+static struct {
+    jclass clazz;
+
+    jmethodID callOnFinished;
+} gRenderNodeAnimatorClassInfo;
+
+#ifdef USE_OPENGL_RENDERER
+
+static JNIEnv* getEnv(JavaVM* vm) {
+    JNIEnv* env;
+    if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+        return 0;
+    }
+    return env;
+}
+
+RenderNodeAnimator::RenderNodeAnimator(JNIEnv* env, jobject weakThis,
+                RenderProperty property, DeltaValueType deltaType, float delta)
+        : RenderPropertyAnimator(property, deltaType, delta) {
+    mWeakThis = env->NewGlobalRef(weakThis);
+    env->GetJavaVM(&mJvm);
+}
+
+RenderNodeAnimator::~RenderNodeAnimator() {
+    JNIEnv* env = getEnv(mJvm);
+    env->DeleteGlobalRef(mWeakThis);
+    mWeakThis = NULL;
+}
+
+void RenderNodeAnimator::callOnFinished() {
+    JNIEnv* env = getEnv(mJvm);
+    env->CallStaticVoidMethod(
+            gRenderNodeAnimatorClassInfo.clazz,
+            gRenderNodeAnimatorClassInfo.callOnFinished,
+            mWeakThis);
+}
+
+static jlong createAnimator(JNIEnv* env, jobject clazz, jobject weakThis,
+        jint property, jint deltaType, jfloat deltaValue) {
+    LOG_ALWAYS_FATAL_IF(property < 0 || property > RenderNodeAnimator::ALPHA,
+            "Invalid property %d", property);
+    LOG_ALWAYS_FATAL_IF(deltaType != RenderPropertyAnimator::DELTA
+            && deltaType != RenderPropertyAnimator::ABSOLUTE,
+            "Invalid delta type %d", deltaType);
+
+    RenderNodeAnimator* animator = new RenderNodeAnimator(env, weakThis,
+            static_cast<RenderPropertyAnimator::RenderProperty>(property),
+            static_cast<RenderPropertyAnimator::DeltaValueType>(deltaType),
+            deltaValue);
+    animator->incStrong(0);
+    return reinterpret_cast<jlong>( animator );
+}
+
+static void setDuration(JNIEnv* env, jobject clazz, jlong animatorPtr, jint duration) {
+    LOG_ALWAYS_FATAL_IF(duration < 0, "Duration cannot be negative");
+    RenderNodeAnimator* animator = reinterpret_cast<RenderNodeAnimator*>(animatorPtr);
+    animator->setDuration(duration);
+}
+
+static void unref(JNIEnv* env, jobject clazz, jlong objPtr) {
+    VirtualLightRefBase* obj = reinterpret_cast<VirtualLightRefBase*>(objPtr);
+    obj->decStrong(0);
+}
+
+#endif
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/view/RenderNodeAnimator";
+
+static JNINativeMethod gMethods[] = {
+#ifdef USE_OPENGL_RENDERER
+    { "nCreateAnimator", "(Ljava/lang/ref/WeakReference;IIF)J", (void*) createAnimator },
+    { "nSetDuration", "(JI)V", (void*) setDuration },
+    { "nUnref", "(J)V", (void*) unref },
+#endif
+};
+
+#define FIND_CLASS(var, className) \
+        var = env->FindClass(className); \
+        LOG_FATAL_IF(! var, "Unable to find class " className);
+
+#define GET_STATIC_METHOD_ID(var, clazz, methodName, methodDescriptor) \
+        var = env->GetStaticMethodID(clazz, methodName, methodDescriptor); \
+        LOG_FATAL_IF(! var, "Unable to find method " methodName);
+
+int register_android_view_RenderNodeAnimator(JNIEnv* env) {
+    FIND_CLASS(gRenderNodeAnimatorClassInfo.clazz, kClassPathName);
+    gRenderNodeAnimatorClassInfo.clazz = jclass(env->NewGlobalRef(gRenderNodeAnimatorClassInfo.clazz));
+
+    GET_STATIC_METHOD_ID(gRenderNodeAnimatorClassInfo.callOnFinished, gRenderNodeAnimatorClassInfo.clazz,
+            "callOnFinished", "(Ljava/lang/ref/WeakReference;)V");
+
+    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+
+} // namespace android
diff --git a/core/jni/android_view_RenderNodeAnimator.h b/core/jni/android_view_RenderNodeAnimator.h
new file mode 100644
index 0000000..760ca91
--- /dev/null
+++ b/core/jni/android_view_RenderNodeAnimator.h
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+#include "jni.h"
+
+#ifdef USE_OPENGL_RENDERER
+
+#include <Animator.h>
+
+namespace android {
+
+class RenderNodeAnimator : public uirenderer::RenderPropertyAnimator {
+public:
+    RenderNodeAnimator(JNIEnv* env, jobject callbackObject,
+            RenderProperty property, DeltaValueType deltaType, float delta);
+    virtual ~RenderNodeAnimator();
+
+    void callOnFinished();
+
+private:
+    JavaVM* mJvm;
+    jobject mWeakThis;
+};
+
+}
+
+#endif
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index ed84a64..c293c7a 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -34,6 +34,7 @@
 #include <gui/SurfaceComposerClient.h>
 
 #include <ui/DisplayInfo.h>
+#include <ui/FrameStats.h>
 #include <ui/Rect.h>
 #include <ui/Region.h>
 
@@ -58,36 +59,21 @@
     jfieldID secure;
 } gPhysicalDisplayInfoClassInfo;
 
+// Implements SkMallocPixelRef::ReleaseProc, to delete the screenshot on unref.
+void DeleteScreenshot(void* addr, void* context) {
+    SkASSERT(addr == ((ScreenshotClient*) context)->getPixels());
+    delete ((ScreenshotClient*) context);
+}
 
-class ScreenshotPixelRef : public SkPixelRef {
-public:
-    ScreenshotPixelRef(const SkImageInfo& info, ScreenshotClient* screenshot) :
-      SkPixelRef(info),
-      mScreenshot(screenshot) {
-        setImmutable();
-    }
+static struct {
+    nsecs_t UNDEFINED_TIME_NANO;
+    jmethodID init;
+} gWindowContentFrameStatsClassInfo;
 
-    virtual ~ScreenshotPixelRef() {
-        delete mScreenshot;
-    }
-
-protected:
-    // overrides from SkPixelRef
-    virtual void* onLockPixels(SkColorTable** ct) {
-        *ct = NULL;
-        return (void*)mScreenshot->getPixels();
-    }
-
-    virtual void onUnlockPixels() {
-    }
-
-    SK_DECLARE_UNFLATTENABLE_OBJECT()
-private:
-    ScreenshotClient* mScreenshot;
-
-    typedef SkPixelRef INHERITED;
-};
-
+static struct {
+    nsecs_t UNDEFINED_TIME_NANO;
+    jmethodID init;
+} gWindowAnimationFrameStatsClassInfo;
 
 // ----------------------------------------------------------------------------
 
@@ -117,18 +103,25 @@
 }
 
 static jobject nativeScreenshotBitmap(JNIEnv* env, jclass clazz, jobject displayTokenObj,
-        jint width, jint height, jint minLayer, jint maxLayer, bool allLayers) {
+        jint width, jint height, jint minLayer, jint maxLayer, bool allLayers,
+        bool useIdentityTransform) {
     sp<IBinder> displayToken = ibinderForJavaObject(env, displayTokenObj);
     if (displayToken == NULL) {
         return NULL;
     }
 
     ScreenshotClient* screenshot = new ScreenshotClient();
-    status_t res = (width > 0 && height > 0)
-            ? (allLayers
-                    ? screenshot->update(displayToken, width, height)
-                    : screenshot->update(displayToken, width, height, minLayer, maxLayer))
-            : screenshot->update(displayToken);
+    status_t res;
+    if (width > 0 && height > 0) {
+        if (allLayers) {
+            res = screenshot->update(displayToken, width, height, useIdentityTransform);
+        } else {
+            res = screenshot->update(displayToken, width, height, minLayer, maxLayer,
+                    useIdentityTransform);
+        }
+    } else {
+        res = screenshot->update(displayToken, useIdentityTransform);
+    }
     if (res != NO_ERROR) {
         delete screenshot;
         return NULL;
@@ -160,19 +153,19 @@
         }
     }
 
-    // takes ownership of ScreenshotClient
-    ScreenshotPixelRef* pixels = new ScreenshotPixelRef(screenshotInfo, screenshot);
-    ssize_t rowBytes = screenshot->getStride() * android::bytesPerPixel(screenshot->getFormat());
+    const ssize_t rowBytes =
+            screenshot->getStride() * android::bytesPerPixel(screenshot->getFormat());
 
     SkBitmap* bitmap = new SkBitmap();
-    bitmap->setConfig(screenshotInfo, rowBytes);
+    bitmap->setConfig(screenshotInfo, (size_t)rowBytes);
     if (screenshotInfo.fWidth > 0 && screenshotInfo.fHeight > 0) {
+        // takes ownership of ScreenshotClient
+        SkMallocPixelRef* pixels = SkMallocPixelRef::NewWithProc(screenshotInfo,
+                (size_t) rowBytes, NULL, (void*) screenshot->getPixels(), &DeleteScreenshot,
+                (void*) screenshot);
+        pixels->setImmutable();
         bitmap->setPixelRef(pixels)->unref();
         bitmap->lockPixels();
-    } else {
-        // be safe with an empty bitmap.
-        delete pixels;
-        bitmap->setPixels(NULL);
     }
 
     return GraphicsJNI::createBitmap(env, bitmap,
@@ -181,7 +174,8 @@
 
 static void nativeScreenshot(JNIEnv* env, jclass clazz,
         jobject displayTokenObj, jobject surfaceObj,
-        jint width, jint height, jint minLayer, jint maxLayer, bool allLayers) {
+        jint width, jint height, jint minLayer, jint maxLayer, bool allLayers,
+        bool useIdentityTransform) {
     sp<IBinder> displayToken = ibinderForJavaObject(env, displayTokenObj);
     if (displayToken != NULL) {
         sp<Surface> consumer = android_view_Surface_getSurface(env, surfaceObj);
@@ -192,7 +186,8 @@
             }
             ScreenshotClient::capture(
                     displayToken, consumer->getIGraphicBufferProducer(),
-                    width, height, uint32_t(minLayer), uint32_t(maxLayer));
+                    width, height, uint32_t(minLayer), uint32_t(maxLayer),
+                    useIdentityTransform);
         }
     }
 }
@@ -387,6 +382,151 @@
     SurfaceComposerClient::unblankDisplay(token);
 }
 
+static jboolean nativeClearContentFrameStats(JNIEnv* env, jclass clazz, jlong nativeObject) {
+    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
+    status_t err = ctrl->clearLayerFrameStats();
+
+    if (err < 0 && err != NO_INIT) {
+        doThrowIAE(env);
+    }
+
+    // The other end is not ready, just report we failed.
+    if (err == NO_INIT) {
+        return JNI_FALSE;
+    }
+
+    return JNI_TRUE;
+}
+
+static jboolean nativeGetContentFrameStats(JNIEnv* env, jclass clazz, jlong nativeObject,
+    jobject outStats) {
+    FrameStats stats;
+
+    SurfaceControl* const ctrl = reinterpret_cast<SurfaceControl *>(nativeObject);
+    status_t err = ctrl->getLayerFrameStats(&stats);
+    if (err < 0 && err != NO_INIT) {
+        doThrowIAE(env);
+    }
+
+    // The other end is not ready, fine just return empty stats.
+    if (err == NO_INIT) {
+        return JNI_FALSE;
+    }
+
+    jlong refreshPeriodNano = static_cast<jlong>(stats.refreshPeriodNano);
+    size_t frameCount = stats.desiredPresentTimesNano.size();
+
+    jlongArray postedTimesNanoDst = env->NewLongArray(frameCount);
+    if (postedTimesNanoDst == NULL) {
+        return JNI_FALSE;
+    }
+
+    jlongArray presentedTimesNanoDst = env->NewLongArray(frameCount);
+    if (presentedTimesNanoDst == NULL) {
+        return JNI_FALSE;
+    }
+
+    jlongArray readyTimesNanoDst = env->NewLongArray(frameCount);
+    if (readyTimesNanoDst == NULL) {
+        return JNI_FALSE;
+    }
+
+    nsecs_t postedTimesNanoSrc[frameCount];
+    nsecs_t presentedTimesNanoSrc[frameCount];
+    nsecs_t readyTimesNanoSrc[frameCount];
+
+    for (size_t i = 0; i < frameCount; i++) {
+        nsecs_t postedTimeNano = stats.desiredPresentTimesNano[i];
+        if (postedTimeNano == INT64_MAX) {
+            postedTimeNano = gWindowContentFrameStatsClassInfo.UNDEFINED_TIME_NANO;
+        }
+        postedTimesNanoSrc[i] = postedTimeNano;
+
+        nsecs_t presentedTimeNano = stats.actualPresentTimesNano[i];
+        if (presentedTimeNano == INT64_MAX) {
+            presentedTimeNano = gWindowContentFrameStatsClassInfo.UNDEFINED_TIME_NANO;
+        }
+        presentedTimesNanoSrc[i] = presentedTimeNano;
+
+        nsecs_t readyTimeNano = stats.frameReadyTimesNano[i];
+        if (readyTimeNano == INT64_MAX) {
+            readyTimeNano = gWindowContentFrameStatsClassInfo.UNDEFINED_TIME_NANO;
+        }
+        readyTimesNanoSrc[i] = readyTimeNano;
+    }
+
+    env->SetLongArrayRegion(postedTimesNanoDst, 0, frameCount, postedTimesNanoSrc);
+    env->SetLongArrayRegion(presentedTimesNanoDst, 0, frameCount, presentedTimesNanoSrc);
+    env->SetLongArrayRegion(readyTimesNanoDst, 0, frameCount, readyTimesNanoSrc);
+
+    env->CallVoidMethod(outStats, gWindowContentFrameStatsClassInfo.init, refreshPeriodNano,
+            postedTimesNanoDst, presentedTimesNanoDst, readyTimesNanoDst);
+
+    if (env->ExceptionCheck()) {
+        return JNI_FALSE;
+    }
+
+    return JNI_TRUE;
+}
+
+static jboolean nativeClearAnimationFrameStats(JNIEnv* env, jclass clazz) {
+    status_t err = SurfaceComposerClient::clearAnimationFrameStats();
+
+    if (err < 0 && err != NO_INIT) {
+        doThrowIAE(env);
+    }
+
+    // The other end is not ready, just report we failed.
+    if (err == NO_INIT) {
+        return JNI_FALSE;
+    }
+
+    return JNI_TRUE;
+}
+
+static jboolean nativeGetAnimationFrameStats(JNIEnv* env, jclass clazz, jobject outStats) {
+    FrameStats stats;
+
+    status_t err = SurfaceComposerClient::getAnimationFrameStats(&stats);
+    if (err < 0 && err != NO_INIT) {
+        doThrowIAE(env);
+    }
+
+    // The other end is not ready, fine just return empty stats.
+    if (err == NO_INIT) {
+        return JNI_FALSE;
+    }
+
+    jlong refreshPeriodNano = static_cast<jlong>(stats.refreshPeriodNano);
+    size_t frameCount = stats.desiredPresentTimesNano.size();
+
+    jlongArray presentedTimesNanoDst = env->NewLongArray(frameCount);
+    if (presentedTimesNanoDst == NULL) {
+        return JNI_FALSE;
+    }
+
+    nsecs_t presentedTimesNanoSrc[frameCount];
+
+    for (size_t i = 0; i < frameCount; i++) {
+        nsecs_t presentedTimeNano = stats.actualPresentTimesNano[i];
+        if (presentedTimeNano == INT64_MAX) {
+            presentedTimeNano = gWindowContentFrameStatsClassInfo.UNDEFINED_TIME_NANO;
+        }
+        presentedTimesNanoSrc[i] = presentedTimeNano;
+    }
+
+    env->SetLongArrayRegion(presentedTimesNanoDst, 0, frameCount, presentedTimesNanoSrc);
+
+    env->CallVoidMethod(outStats, gWindowAnimationFrameStatsClassInfo.init, refreshPeriodNano,
+            presentedTimesNanoDst);
+
+    if (env->ExceptionCheck()) {
+        return JNI_FALSE;
+    }
+
+    return JNI_TRUE;
+}
+
 // ----------------------------------------------------------------------------
 
 static JNINativeMethod sSurfaceControlMethods[] = {
@@ -396,9 +536,9 @@
             (void*)nativeRelease },
     {"nativeDestroy", "(J)V",
             (void*)nativeDestroy },
-    {"nativeScreenshot", "(Landroid/os/IBinder;IIIIZ)Landroid/graphics/Bitmap;",
+    {"nativeScreenshot", "(Landroid/os/IBinder;IIIIZZ)Landroid/graphics/Bitmap;",
             (void*)nativeScreenshotBitmap },
-    {"nativeScreenshot", "(Landroid/os/IBinder;Landroid/view/Surface;IIIIZ)V",
+    {"nativeScreenshot", "(Landroid/os/IBinder;Landroid/view/Surface;IIIIZZ)V",
             (void*)nativeScreenshot },
     {"nativeOpenTransaction", "()V",
             (void*)nativeOpenTransaction },
@@ -442,6 +582,14 @@
             (void*)nativeBlankDisplay },
     {"nativeUnblankDisplay", "(Landroid/os/IBinder;)V",
             (void*)nativeUnblankDisplay },
+    {"nativeClearContentFrameStats", "(J)Z",
+            (void*)nativeClearContentFrameStats },
+    {"nativeGetContentFrameStats", "(JLandroid/view/WindowContentFrameStats;)Z",
+            (void*)nativeGetContentFrameStats },
+    {"nativeClearAnimationFrameStats", "()Z",
+            (void*)nativeClearAnimationFrameStats },
+    {"nativeGetAnimationFrameStats", "(Landroid/view/WindowAnimationFrameStats;)Z",
+            (void*)nativeGetAnimationFrameStats },
 };
 
 int register_android_view_SurfaceControl(JNIEnv* env)
@@ -457,6 +605,19 @@
     gPhysicalDisplayInfoClassInfo.xDpi = env->GetFieldID(clazz, "xDpi", "F");
     gPhysicalDisplayInfoClassInfo.yDpi = env->GetFieldID(clazz, "yDpi", "F");
     gPhysicalDisplayInfoClassInfo.secure = env->GetFieldID(clazz, "secure", "Z");
+
+    jclass frameStatsClazz = env->FindClass("android/view/FrameStats");
+    jfieldID undefined_time_nano_field =  env->GetStaticFieldID(frameStatsClazz, "UNDEFINED_TIME_NANO", "J");
+    nsecs_t undefined_time_nano = env->GetStaticLongField(frameStatsClazz, undefined_time_nano_field);
+
+    jclass contFrameStatsClazz = env->FindClass("android/view/WindowContentFrameStats");
+    gWindowContentFrameStatsClassInfo.init =  env->GetMethodID(contFrameStatsClazz, "init", "(J[J[J[J)V");
+    gWindowContentFrameStatsClassInfo.UNDEFINED_TIME_NANO = undefined_time_nano;
+
+    jclass animFrameStatsClazz = env->FindClass("android/view/WindowAnimationFrameStats");
+    gWindowAnimationFrameStatsClassInfo.init =  env->GetMethodID(animFrameStatsClazz, "init", "(J[J)V");
+    gWindowAnimationFrameStatsClassInfo.UNDEFINED_TIME_NANO = undefined_time_nano;
+
     return err;
 }
 
diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp
new file mode 100644
index 0000000..58fc1e1
--- /dev/null
+++ b/core/jni/android_view_ThreadedRenderer.cpp
@@ -0,0 +1,281 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+#define LOG_TAG "ThreadedRenderer"
+
+#include <algorithm>
+
+#include "jni.h"
+#include <nativehelper/JNIHelp.h>
+#include <android_runtime/AndroidRuntime.h>
+
+#include <utils/StrongPointer.h>
+#include <android_runtime/android_view_Surface.h>
+#include <system/window.h>
+
+#include "android_view_RenderNodeAnimator.h"
+#include <RenderNode.h>
+#include <renderthread/RenderProxy.h>
+#include <renderthread/RenderTask.h>
+#include <renderthread/RenderThread.h>
+
+namespace android {
+
+#ifdef USE_OPENGL_RENDERER
+
+using namespace android::uirenderer;
+using namespace android::uirenderer::renderthread;
+
+static jmethodID gRunnableMethod;
+
+class JavaTask : public RenderTask {
+public:
+    JavaTask(JNIEnv* env, jobject jrunnable) {
+        env->GetJavaVM(&mVm);
+        mRunnable = env->NewGlobalRef(jrunnable);
+    }
+
+    virtual void run() {
+        env()->CallVoidMethod(mRunnable, gRunnableMethod);
+        env()->DeleteGlobalRef(mRunnable);
+        delete this;
+    };
+
+private:
+    JNIEnv* env() {
+        JNIEnv* env;
+        if (mVm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) {
+            return 0;
+        }
+        return env;
+    }
+
+    JavaVM* mVm;
+    jobject mRunnable;
+};
+
+class InvokeAnimationListeners : public MessageHandler {
+public:
+    InvokeAnimationListeners(std::vector< sp<RenderNodeAnimator> >& animators) {
+        mAnimators.swap(animators);
+    }
+
+    static void callOnFinished(const sp<RenderNodeAnimator>& animator) {
+        animator->callOnFinished();
+    }
+
+    virtual void handleMessage(const Message& message) {
+        std::for_each(mAnimators.begin(), mAnimators.end(), callOnFinished);
+        mAnimators.clear();
+    }
+
+private:
+    std::vector< sp<RenderNodeAnimator> > mAnimators;
+};
+
+class RootRenderNode : public RenderNode, public AnimationListener {
+public:
+    RootRenderNode() : RenderNode() {
+        mLooper = Looper::getForThread();
+        LOG_ALWAYS_FATAL_IF(!mLooper.get(),
+                "Must create RootRenderNode on a thread with a looper!");
+    }
+
+    virtual ~RootRenderNode() {}
+
+    void onAnimationFinished(const sp<RenderPropertyAnimator>& animator) {
+        mFinishedAnimators.push_back(
+                reinterpret_cast<RenderNodeAnimator*>(animator.get()));
+    }
+
+    virtual void prepareTree(TreeInfo& info) {
+        info.animationListener = this;
+        RenderNode::prepareTree(info);
+        info.animationListener = NULL;
+
+        // post all the finished stuff
+        if (mFinishedAnimators.size()) {
+            sp<InvokeAnimationListeners> message
+                    = new InvokeAnimationListeners(mFinishedAnimators);
+            mLooper->sendMessage(message, 0);
+        }
+    }
+
+private:
+    sp<Looper> mLooper;
+    std::vector< sp<RenderNodeAnimator> > mFinishedAnimators;
+};
+
+static void android_view_ThreadedRenderer_postToRenderThread(JNIEnv* env, jobject clazz,
+        jobject jrunnable) {
+    RenderTask* task = new JavaTask(env, jrunnable);
+    RenderThread::getInstance().queue(task);
+}
+
+static jlong android_view_ThreadedRenderer_createRootRenderNode(JNIEnv* env, jobject clazz) {
+    RootRenderNode* node = new RootRenderNode();
+    node->incStrong(0);
+    node->setName("RootRenderNode");
+    return reinterpret_cast<jlong>(node);
+}
+
+static jlong android_view_ThreadedRenderer_createProxy(JNIEnv* env, jobject clazz,
+        jboolean translucent, jlong rootRenderNodePtr) {
+    RenderNode* rootRenderNode = reinterpret_cast<RenderNode*>(rootRenderNodePtr);
+    return (jlong) new RenderProxy(translucent, rootRenderNode);
+}
+
+static void android_view_ThreadedRenderer_deleteProxy(JNIEnv* env, jobject clazz,
+        jlong proxyPtr) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    delete proxy;
+}
+
+static jboolean android_view_ThreadedRenderer_initialize(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jobject jsurface) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    sp<ANativeWindow> window = android_view_Surface_getNativeWindow(env, jsurface);
+    return proxy->initialize(window);
+}
+
+static void android_view_ThreadedRenderer_updateSurface(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jobject jsurface) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    sp<ANativeWindow> window;
+    if (jsurface) {
+        window = android_view_Surface_getNativeWindow(env, jsurface);
+    }
+    proxy->updateSurface(window);
+}
+
+static void android_view_ThreadedRenderer_pauseSurface(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jobject jsurface) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    sp<ANativeWindow> window;
+    if (jsurface) {
+        window = android_view_Surface_getNativeWindow(env, jsurface);
+    }
+    proxy->pauseSurface(window);
+}
+
+static void android_view_ThreadedRenderer_setup(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jint width, jint height) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    proxy->setup(width, height);
+}
+
+static void android_view_ThreadedRenderer_syncAndDrawFrame(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jint dirtyLeft, jint dirtyTop,
+        jint dirtyRight, jint dirtyBottom) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    proxy->syncAndDrawFrame(dirtyLeft, dirtyTop, dirtyRight, dirtyBottom);
+}
+
+static void android_view_ThreadedRenderer_destroyCanvasAndSurface(JNIEnv* env, jobject clazz,
+        jlong proxyPtr) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    proxy->destroyCanvasAndSurface();
+}
+
+static void android_view_ThreadedRenderer_invokeFunctor(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jlong functorPtr, jboolean waitForCompletion) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    Functor* functor = reinterpret_cast<Functor*>(functorPtr);
+    proxy->invokeFunctor(functor, waitForCompletion);
+}
+
+static void android_view_ThreadedRenderer_runWithGlContext(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jobject jrunnable) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    RenderTask* task = new JavaTask(env, jrunnable);
+    proxy->runWithGlContext(task);
+}
+
+static jlong android_view_ThreadedRenderer_createDisplayListLayer(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jint width, jint height) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    DeferredLayerUpdater* layer = proxy->createDisplayListLayer(width, height);
+    return reinterpret_cast<jlong>(layer);
+}
+
+static jlong android_view_ThreadedRenderer_createTextureLayer(JNIEnv* env, jobject clazz,
+        jlong proxyPtr) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    DeferredLayerUpdater* layer = proxy->createTextureLayer();
+    return reinterpret_cast<jlong>(layer);
+}
+
+static jboolean android_view_ThreadedRenderer_copyLayerInto(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jlong layerPtr, jlong bitmapPtr) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr);
+    SkBitmap* bitmap = reinterpret_cast<SkBitmap*>(bitmapPtr);
+    return proxy->copyLayerInto(layer, bitmap);
+}
+
+static void android_view_ThreadedRenderer_destroyLayer(JNIEnv* env, jobject clazz,
+        jlong proxyPtr, jlong layerPtr) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr);
+    proxy->destroyLayer(layer);
+}
+
+static void android_view_ThreadedRenderer_fence(JNIEnv* env, jobject clazz,
+        jlong proxyPtr) {
+    RenderProxy* proxy = reinterpret_cast<RenderProxy*>(proxyPtr);
+    proxy->fence();
+}
+
+#endif
+
+// ----------------------------------------------------------------------------
+// JNI Glue
+// ----------------------------------------------------------------------------
+
+const char* const kClassPathName = "android/view/ThreadedRenderer";
+
+static JNINativeMethod gMethods[] = {
+#ifdef USE_OPENGL_RENDERER
+    { "postToRenderThread", "(Ljava/lang/Runnable;)V",   (void*) android_view_ThreadedRenderer_postToRenderThread },
+    { "nCreateRootRenderNode", "()J", (void*) android_view_ThreadedRenderer_createRootRenderNode },
+    { "nCreateProxy", "(ZJ)J", (void*) android_view_ThreadedRenderer_createProxy },
+    { "nDeleteProxy", "(J)V", (void*) android_view_ThreadedRenderer_deleteProxy },
+    { "nInitialize", "(JLandroid/view/Surface;)Z", (void*) android_view_ThreadedRenderer_initialize },
+    { "nUpdateSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_updateSurface },
+    { "nPauseSurface", "(JLandroid/view/Surface;)V", (void*) android_view_ThreadedRenderer_pauseSurface },
+    { "nSetup", "(JII)V", (void*) android_view_ThreadedRenderer_setup },
+    { "nSyncAndDrawFrame", "(JIIII)V", (void*) android_view_ThreadedRenderer_syncAndDrawFrame },
+    { "nDestroyCanvasAndSurface", "(J)V", (void*) android_view_ThreadedRenderer_destroyCanvasAndSurface },
+    { "nInvokeFunctor", "(JJZ)V", (void*) android_view_ThreadedRenderer_invokeFunctor },
+    { "nRunWithGlContext", "(JLjava/lang/Runnable;)V", (void*) android_view_ThreadedRenderer_runWithGlContext },
+    { "nCreateDisplayListLayer", "(JII)J", (void*) android_view_ThreadedRenderer_createDisplayListLayer },
+    { "nCreateTextureLayer", "(J)J", (void*) android_view_ThreadedRenderer_createTextureLayer },
+    { "nCopyLayerInto", "(JJJ)Z", (void*) android_view_ThreadedRenderer_copyLayerInto },
+    { "nDestroyLayer", "(JJ)V", (void*) android_view_ThreadedRenderer_destroyLayer },
+    { "nFence", "(J)V", (void*) android_view_ThreadedRenderer_fence },
+#endif
+};
+
+int register_android_view_ThreadedRenderer(JNIEnv* env) {
+#ifdef USE_OPENGL_RENDERER
+    jclass cls = env->FindClass("java/lang/Runnable");
+    gRunnableMethod = env->GetMethodID(cls, "run", "()V");
+    env->DeleteLocalRef(cls);
+#endif
+    return AndroidRuntime::registerNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
+}
+
+}; // namespace android
diff --git a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
index 2004576..230658f 100644
--- a/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
+++ b/core/jni/com_android_internal_content_NativeLibraryHelper.cpp
@@ -61,8 +61,8 @@
     INSTALL_FAILED_INSUFFICIENT_STORAGE = -4,
     INSTALL_FAILED_CONTAINER_ERROR = -18,
     INSTALL_FAILED_INTERNAL_ERROR = -110,
-    INSTALL_FAILED_NO_MATCHING_ABIS = -112,
-    NO_NATIVE_LIBRARIES = -113
+    INSTALL_FAILED_NO_MATCHING_ABIS = -113,
+    NO_NATIVE_LIBRARIES = -114
 };
 
 typedef install_status_t (*iterFunc)(JNIEnv*, void*, ZipFileRO*, ZipEntryRO, const char*);
diff --git a/core/jni/com_android_internal_net_NetworkStatsFactory.cpp b/core/jni/com_android_internal_net_NetworkStatsFactory.cpp
index 0b9ad9b..c84a466 100644
--- a/core/jni/com_android_internal_net_NetworkStatsFactory.cpp
+++ b/core/jni/com_android_internal_net_NetworkStatsFactory.cpp
@@ -37,6 +37,7 @@
 
 static struct {
     jfieldID size;
+    jfieldID capacity;
     jfieldID iface;
     jfieldID uid;
     jfieldID set;
@@ -49,7 +50,6 @@
 } gNetworkStatsClassInfo;
 
 struct stats_line {
-    int32_t idx;
     char iface[32];
     int32_t uid;
     int32_t set;
@@ -60,8 +60,41 @@
     int64_t txPackets;
 };
 
+static jobjectArray get_string_array(JNIEnv* env, jobject obj, jfieldID field, int size, bool grow)
+{
+    if (!grow) {
+        jobjectArray array = (jobjectArray)env->GetObjectField(obj, field);
+        if (array != NULL) {
+            return array;
+        }
+    }
+    return env->NewObjectArray(size, gStringClass, NULL);
+}
+
+static jintArray get_int_array(JNIEnv* env, jobject obj, jfieldID field, int size, bool grow)
+{
+    if (!grow) {
+        jintArray array = (jintArray)env->GetObjectField(obj, field);
+        if (array != NULL) {
+            return array;
+        }
+    }
+    return env->NewIntArray(size);
+}
+
+static jlongArray get_long_array(JNIEnv* env, jobject obj, jfieldID field, int size, bool grow)
+{
+    if (!grow) {
+        jlongArray array = (jlongArray)env->GetObjectField(obj, field);
+        if (array != NULL) {
+            return array;
+        }
+    }
+    return env->NewLongArray(size);
+}
+
 static int readNetworkStatsDetail(JNIEnv* env, jclass clazz, jobject stats,
-        jstring path, jint limitUid) {
+        jstring path, jint limitUid, jobjectArray limitIfacesObj, jint limitTag) {
     ScopedUtfChars path8(env, path);
     if (path8.c_str() == NULL) {
         return -1;
@@ -72,50 +105,146 @@
         return -1;
     }
 
+    Vector<String8> limitIfaces;
+    if (limitIfacesObj != NULL && env->GetArrayLength(limitIfacesObj) > 0) {
+        int num = env->GetArrayLength(limitIfacesObj);
+        limitIfaces.setCapacity(num);
+        for (int i=0; i<num; i++) {
+            jstring string = (jstring)env->GetObjectArrayElement(limitIfacesObj, i);
+            ScopedUtfChars string8(env, string);
+            if (string8.c_str() != NULL) {
+                limitIfaces.add(String8(string8.c_str()));
+            }
+        }
+    }
+
     Vector<stats_line> lines;
 
     int lastIdx = 1;
+    int idx;
     char buffer[384];
     while (fgets(buffer, sizeof(buffer), fp) != NULL) {
         stats_line s;
         int64_t rawTag;
-        if (sscanf(buffer, "%d %31s 0x%llx %u %u %llu %llu %llu %llu", &s.idx,
-                s.iface, &rawTag, &s.uid, &s.set, &s.rxBytes, &s.rxPackets,
-                &s.txBytes, &s.txPackets) == 9) {
-            if (s.idx != lastIdx + 1) {
-                ALOGE("inconsistent idx=%d after lastIdx=%d", s.idx, lastIdx);
-                return -1;
+        char* pos = buffer;
+        char* endPos;
+        // First field is the index.
+        idx = (int)strtol(pos, &endPos, 10);
+        //ALOGI("Index #%d: %s", idx, buffer);
+        if (pos == endPos) {
+            // Skip lines that don't start with in index.  In particular,
+            // this will skip the initial header line.
+            continue;
+        }
+        if (idx != lastIdx + 1) {
+            ALOGE("inconsistent idx=%d after lastIdx=%d: %s", idx, lastIdx, buffer);
+            fclose(fp);
+            return -1;
+        }
+        lastIdx = idx;
+        pos = endPos;
+        // Skip whitespace.
+        while (*pos == ' ') {
+            pos++;
+        }
+        // Next field is iface.
+        int ifaceIdx = 0;
+        while (*pos != ' ' && *pos != 0 && ifaceIdx < (int)(sizeof(s.iface)-1)) {
+            s.iface[ifaceIdx] = *pos;
+            ifaceIdx++;
+            pos++;
+        }
+        if (*pos != ' ') {
+            ALOGE("bad iface: %s", buffer);
+            fclose(fp);
+            return -1;
+        }
+        s.iface[ifaceIdx] = 0;
+        if (limitIfaces.size() > 0) {
+            // Is this an iface the caller is interested in?
+            int i = 0;
+            while (i < (int)limitIfaces.size()) {
+                if (limitIfaces[i] == s.iface) {
+                    break;
+                }
+                i++;
             }
-            lastIdx = s.idx;
-
-            s.tag = rawTag >> 32;
+            if (i >= (int)limitIfaces.size()) {
+                // Nothing matched; skip this line.
+                //ALOGI("skipping due to iface: %s", buffer);
+                continue;
+            }
+        }
+        // Skip whitespace.
+        while (*pos == ' ') {
+            pos++;
+        }
+        // Next field is tag.
+        rawTag = strtoll(pos, &endPos, 16);
+        //ALOGI("Index #%d: %s", idx, buffer);
+        if (pos == endPos) {
+            ALOGE("bad tag: %s", pos);
+            fclose(fp);
+            return -1;
+        }
+        s.tag = rawTag >> 32;
+        if (limitTag != -1 && s.tag != limitTag) {
+            //ALOGI("skipping due to tag: %s", buffer);
+            continue;
+        }
+        pos = endPos;
+        // Skip whitespace.
+        while (*pos == ' ') {
+            pos++;
+        }
+        // Parse remaining fields.
+        if (sscanf(pos, "%u %u %llu %llu %llu %llu",
+                &s.uid, &s.set, &s.rxBytes, &s.rxPackets,
+                &s.txBytes, &s.txPackets) == 6) {
+            if (limitUid != -1 && limitUid != s.uid) {
+                //ALOGI("skipping due to uid: %s", buffer);
+                continue;
+            }
             lines.push_back(s);
+        } else {
+            //ALOGI("skipping due to bad remaining fields: %s", pos);
         }
     }
 
     if (fclose(fp) != 0) {
+        ALOGE("Failed to close netstats file");
         return -1;
     }
 
     int size = lines.size();
+    bool grow = size > env->GetIntField(stats, gNetworkStatsClassInfo.capacity);
 
-    ScopedLocalRef<jobjectArray> iface(env, env->NewObjectArray(size, gStringClass, NULL));
+    ScopedLocalRef<jobjectArray> iface(env, get_string_array(env, stats,
+            gNetworkStatsClassInfo.iface, size, grow));
     if (iface.get() == NULL) return -1;
-    ScopedIntArrayRW uid(env, env->NewIntArray(size));
+    ScopedIntArrayRW uid(env, get_int_array(env, stats,
+            gNetworkStatsClassInfo.uid, size, grow));
     if (uid.get() == NULL) return -1;
-    ScopedIntArrayRW set(env, env->NewIntArray(size));
+    ScopedIntArrayRW set(env, get_int_array(env, stats,
+            gNetworkStatsClassInfo.set, size, grow));
     if (set.get() == NULL) return -1;
-    ScopedIntArrayRW tag(env, env->NewIntArray(size));
+    ScopedIntArrayRW tag(env, get_int_array(env, stats,
+            gNetworkStatsClassInfo.tag, size, grow));
     if (tag.get() == NULL) return -1;
-    ScopedLongArrayRW rxBytes(env, env->NewLongArray(size));
+    ScopedLongArrayRW rxBytes(env, get_long_array(env, stats,
+            gNetworkStatsClassInfo.rxBytes, size, grow));
     if (rxBytes.get() == NULL) return -1;
-    ScopedLongArrayRW rxPackets(env, env->NewLongArray(size));
+    ScopedLongArrayRW rxPackets(env, get_long_array(env, stats,
+            gNetworkStatsClassInfo.rxPackets, size, grow));
     if (rxPackets.get() == NULL) return -1;
-    ScopedLongArrayRW txBytes(env, env->NewLongArray(size));
+    ScopedLongArrayRW txBytes(env, get_long_array(env, stats,
+            gNetworkStatsClassInfo.txBytes, size, grow));
     if (txBytes.get() == NULL) return -1;
-    ScopedLongArrayRW txPackets(env, env->NewLongArray(size));
+    ScopedLongArrayRW txPackets(env, get_long_array(env, stats,
+            gNetworkStatsClassInfo.txPackets, size, grow));
     if (txPackets.get() == NULL) return -1;
-    ScopedLongArrayRW operations(env, env->NewLongArray(size));
+    ScopedLongArrayRW operations(env, get_long_array(env, stats,
+            gNetworkStatsClassInfo.operations, size, grow));
     if (operations.get() == NULL) return -1;
 
     for (int i = 0; i < size; i++) {
@@ -132,15 +261,18 @@
     }
 
     env->SetIntField(stats, gNetworkStatsClassInfo.size, size);
-    env->SetObjectField(stats, gNetworkStatsClassInfo.iface, iface.get());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.uid, uid.getJavaArray());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.set, set.getJavaArray());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.tag, tag.getJavaArray());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.rxBytes, rxBytes.getJavaArray());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.rxPackets, rxPackets.getJavaArray());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.txBytes, txBytes.getJavaArray());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.txPackets, txPackets.getJavaArray());
-    env->SetObjectField(stats, gNetworkStatsClassInfo.operations, operations.getJavaArray());
+    if (grow) {
+        env->SetIntField(stats, gNetworkStatsClassInfo.capacity, size);
+        env->SetObjectField(stats, gNetworkStatsClassInfo.iface, iface.get());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.uid, uid.getJavaArray());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.set, set.getJavaArray());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.tag, tag.getJavaArray());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.rxBytes, rxBytes.getJavaArray());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.rxPackets, rxPackets.getJavaArray());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.txBytes, txBytes.getJavaArray());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.txPackets, txPackets.getJavaArray());
+        env->SetObjectField(stats, gNetworkStatsClassInfo.operations, operations.getJavaArray());
+    }
 
     return 0;
 }
@@ -157,7 +289,7 @@
 
 static JNINativeMethod gMethods[] = {
         { "nativeReadNetworkStatsDetail",
-                "(Landroid/net/NetworkStats;Ljava/lang/String;I)I",
+                "(Landroid/net/NetworkStats;Ljava/lang/String;I[Ljava/lang/String;I)I",
                 (void*) readNetworkStatsDetail }
 };
 
@@ -170,6 +302,7 @@
 
     jclass clazz = env->FindClass("android/net/NetworkStats");
     gNetworkStatsClassInfo.size = env->GetFieldID(clazz, "size", "I");
+    gNetworkStatsClassInfo.capacity = env->GetFieldID(clazz, "capacity", "I");
     gNetworkStatsClassInfo.iface = env->GetFieldID(clazz, "iface", "[Ljava/lang/String;");
     gNetworkStatsClassInfo.uid = env->GetFieldID(clazz, "uid", "[I");
     gNetworkStatsClassInfo.set = env->GetFieldID(clazz, "set", "[I");
diff --git a/core/jni/com_google_android_gles_jni_EGLImpl.cpp b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
index 3035d15..3d421d5 100644
--- a/core/jni/com_google_android_gles_jni_EGLImpl.cpp
+++ b/core/jni/com_google_android_gles_jni_EGLImpl.cpp
@@ -107,7 +107,7 @@
 
 static jint* beginNativeAttribList(JNIEnv *_env, jintArray attrib_list) {
     if (attrib_list != NULL) {
-        return (jint *)_env->GetPrimitiveArrayCritical(attrib_list, (jboolean *)0);
+        return _env->GetIntArrayElements(attrib_list, (jboolean *)0);
     } else {
         return(jint*) gNull_attrib_base;
     }
@@ -115,7 +115,7 @@
 
 static void endNativeAttributeList(JNIEnv *_env, jintArray attrib_list, jint* attrib_base) {
     if (attrib_list != NULL) {
-        _env->ReleasePrimitiveArrayCritical(attrib_list, attrib_base, JNI_ABORT);
+        _env->ReleaseIntArrayElements(attrib_list, attrib_base, JNI_ABORT);
     }
 }
 
@@ -154,9 +154,9 @@
     EGLBoolean success = EGL_FALSE;
     int len = _env->GetArrayLength(value);
     if (len) {
-        jint* base = (jint *)_env->GetPrimitiveArrayCritical(value, (jboolean *)0);
+        jint* base = _env->GetIntArrayElements(value, (jboolean *)0);
         success = eglQueryContext(dpy, ctx, attribute, base);
-        _env->ReleasePrimitiveArrayCritical(value, base, JNI_ABORT);
+        _env->ReleaseIntArrayElements(value, base, JNI_ABORT);
     }
     return EglBoolToJBool(success);
 }
@@ -174,9 +174,9 @@
     EGLBoolean success = EGL_FALSE;
     int len = _env->GetArrayLength(value);
     if (len) {
-        jint* base = (jint *)_env->GetPrimitiveArrayCritical(value, (jboolean *)0);
+        jint* base = _env->GetIntArrayElements(value, (jboolean *)0);
         success = eglQuerySurface(dpy, sur, attribute, base);
-        _env->ReleasePrimitiveArrayCritical(value, base, JNI_ABORT);
+        _env->ReleaseIntArrayElements(value, base, JNI_ABORT);
     }
     return EglBoolToJBool(success);
 }
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index 3c40d43..3d3e86f 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -83,6 +83,8 @@
     <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DELETED" />
     <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DISABLED" />
     <protected-broadcast android:name="android.appwidget.action.APPWIDGET_ENABLED" />
+    <protected-broadcast android:name="android.appwidget.action.APPWIDGET_HOST_RESTORED" />
+    <protected-broadcast android:name="android.appwidget.action.APPWIDGET_RESTORED" />
 
     <protected-broadcast android:name="android.backup.intent.RUN" />
     <protected-broadcast android:name="android.backup.intent.CLEAR" />
@@ -232,10 +234,12 @@
     <protected-broadcast android:name="android.net.conn.NETWORK_CONDITIONS_MEASURED" />
     <protected-broadcast
             android:name="android.net.ConnectivityService.action.PKT_CNT_SAMPLE_INTERVAL_ELAPSED" />
+    <protected-broadcast android:name="android.net.scoring.SCORE_NETWORKS" />
     <protected-broadcast android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" />
     <protected-broadcast android:name="android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE" />
     <protected-broadcast android:name="android.intent.action.AIRPLANE_MODE" />
     <protected-broadcast android:name="android.intent.action.ADVANCED_SETTINGS" />
+    <protected-broadcast android:name="android.intent.action.APPLICATION_RESTRICTIONS_CHANGED" />
     <protected-broadcast android:name="android.intent.action.BUGREPORT_FINISHED" />
 
     <protected-broadcast android:name="android.intent.action.ACTION_IDLE_MAINTENANCE_START" />
@@ -590,7 +594,7 @@
     <!-- =============================================================== -->
     <eat-comment />
 
-    <!-- Used for permissions that provide access to the user voicemail box. -->
+    <!-- Used for permissions that provide access to device alarms. -->
     <permission-group android:name="android.permission-group.DEVICE_ALARMS"
         android:label="@string/permgrouplab_deviceAlarms"
         android:icon="@drawable/perm_group_device_alarms"
@@ -760,6 +764,13 @@
         android:description="@string/permdesc_changeWimaxState"
         android:label="@string/permlab_changeWimaxState" />
 
+    <!-- Allows applications to act as network scorers. @hide -->
+    <permission android:name="android.permission.SCORE_NETWORKS"
+        android:permissionGroup="android.permission-group.NETWORK"
+        android:protectionLevel="normal"
+        android:description="@string/permdesc_scoreNetworks"
+        android:label="@string/permlab_scoreNetworks" />
+
     <!-- ======================================= -->
     <!-- Permissions for short range, peripheral networks -->
     <!-- ======================================= -->
@@ -822,8 +833,15 @@
     <!-- Allows access to the loop radio (Android@Home mesh network) device.
 	@hide -->
     <permission android:name="android.permission.LOOP_RADIO"
-	android:permissionGroup="android.permission-group.NETWORK"
-	android:protectionLevel="signature|system" />
+	    android:permissionGroup="android.permission-group.NETWORK"
+	    android:protectionLevel="signature|system" />
+
+    <!-- Allows for the NFC process to unlock the device
+         @hide This should only be used by the Nfc apk
+    -->
+    <permission android:name="android.permission.NFC_UNLOCK"
+        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+        android:protectionLevel="signature" />
 
     <!-- ================================== -->
     <!-- Permissions for accessing accounts -->
@@ -995,6 +1013,14 @@
         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
         android:protectionLevel="signature" />
 
+    <!-- Allows an application to communicate with a SIM card using logical
+         channels. -->
+    <permission android:name="android.permission.SIM_COMMUNICATION"
+        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+        android:label="@string/permlab_sim_communication"
+        android:description="@string/permdesc_sim_communication"
+        android:protectionLevel="dangerous" />
+
     <!-- =========================================== -->
     <!-- Permissions associated with audio capture -->
     <!-- =========================================== -->
@@ -1059,7 +1085,7 @@
     <!-- =========================================== -->
     <eat-comment />
 
-    <!-- Used for permissions that are associated with accessing and modifyign
+    <!-- Used for permissions that are associated with accessing and modifying
          telephony state: placing calls, intercepting outgoing calls, reading
          and modifying the phone state. -->
     <permission-group android:name="android.permission-group.PHONE_CALLS"
@@ -1069,8 +1095,9 @@
         android:permissionGroupFlags="personalInfo"
         android:priority="370" />
 
-    <!-- Allows an application to modify or abort outgoing
-         calls. -->
+    <!-- Allows an application to see the number being dialed during an outgoing
+         call with the option to redirect the call to a different number or
+         abort the call altogether. -->
     <permission android:name="android.permission.PROCESS_OUTGOING_CALLS"
         android:permissionGroup="android.permission-group.PHONE_CALLS"
         android:protectionLevel="dangerous"
@@ -1268,9 +1295,10 @@
     <!-- @hide Fuller form of {@link android.Manifest.permission#INTERACT_ACROSS_USERS}
          that removes restrictions on where broadcasts can be sent and allows other
          types of interactions. -->
+    <!-- TODO: Remove the system protection level.-->
     <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
-        android:protectionLevel="signature"
+        android:protectionLevel="signature|system"
         android:label="@string/permlab_interactAcrossUsersFull"
         android:description="@string/permdesc_interactAcrossUsersFull" />
 
@@ -1725,6 +1753,21 @@
         android:label="@string/permlab_manageCaCertificates"
         android:description="@string/permdesc_manageCaCertificates" />
 
+    <!-- Allows an application to do certain operations needed for
+         interacting with the recovery (system update) system. -->
+    <permission android:name="android.permission.RECOVERY"
+        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+        android:protectionLevel="signature|system"
+        android:label="@string/permlab_recovery"
+        android:description="@string/permdesc_recovery" />
+
+    <!-- Allows the system to bind to an application's idle services
+         @hide -->
+    <permission android:name="android.permission.BIND_IDLE_SERVICE"
+        android:protectionLevel="signature"
+        android:label="@string/permlab_bindIdleService"
+        android:description="@string/permdesc_bindIdleService" />
+
     <!-- ========================================= -->
     <!-- Permissions for special development tools -->
     <!-- ========================================= -->
@@ -1894,24 +1937,24 @@
         android:description="@string/permdesc_filter_events"
         android:protectionLevel="signature" />
 
-    <!-- @hide Allows an application to retrieve info for a window from the window manager. -->
-    <permission android:name="android.permission.RETRIEVE_WINDOW_INFO"
-        android:label="@string/permlab_retrieve_window_info"
-        android:description="@string/permdesc_retrieve_window_info"
+    <!-- @hide Allows an application to retrieve the window token from the accessibility manager. -->
+    <permission android:name="android.permission.RETRIEVE_WINDOW_TOKEN"
+        android:label="@string/permlab_retrieveWindowToken"
+        android:description="@string/permdesc_retrieveWindowToken"
         android:protectionLevel="signature" />
 
+    <!-- @hide Allows an application to collect frame statistics -->
+    <permission android:name="android.permission.FRAME_STATS"
+         android:label="@string/permlab_frameStats"
+         android:description="@string/permdesc_frameStats"
+         android:protectionLevel="signature" />
+
     <!-- @hide Allows an application to temporary enable accessibility on the device. -->
     <permission android:name="android.permission.TEMPORARY_ENABLE_ACCESSIBILITY"
         android:label="@string/permlab_temporary_enable_accessibility"
         android:description="@string/permdesc_temporary_enable_accessibility"
         android:protectionLevel="signature" />
 
-    <!-- @hide Allows an application to magnify the content of a display. -->
-    <permission android:name="android.permission.MAGNIFY_DISPLAY"
-        android:label="@string/permlab_magnify_display"
-        android:description="@string/permdesc_magnify_display"
-        android:protectionLevel="signature" />
-
     <!-- Allows an application to watch and control how activities are
          started globally in the system.  Only for is in debugging
          (usually the monkey command).
@@ -2013,6 +2056,13 @@
         android:description="@string/permdesc_bindWallpaper"
         android:protectionLevel="signature|system" />
 
+    <!-- Must be required by a {@link android.service.voice.VoiceInteractionService},
+         to ensure that only the system can bind to it. -->
+    <permission android:name="android.permission.BIND_VOICE_INTERACTION"
+        android:label="@string/permlab_bindVoiceInteraction"
+        android:description="@string/permdesc_bindVoiceInteraction"
+        android:protectionLevel="signature" />
+
     <!-- Must be required by a {@link com.android.media.remotedisplay.RemoteDisplayProvider},
          to ensure that only the system can bind to it.
          @hide -->
@@ -2021,6 +2071,21 @@
         android:description="@string/permdesc_bindRemoteDisplay"
         android:protectionLevel="signature" />
 
+    <!-- Must be required by a {@link android.tv.TvInputService}
+         to ensure that only the system can bind to it. -->
+    <permission android:name="android.permission.BIND_TV_INPUT"
+        android:label="@string/permlab_bindTvInput"
+        android:description="@string/permdesc_bindTvInput"
+        android:protectionLevel="signature|system" />
+
+    <!-- Must be required by a {@link android.media.routeprovider.RouteProviderService}
+         to ensure that only the system can interact with it.
+         -->
+    <permission android:name="android.permission.BIND_ROUTE_PROVIDER"
+        android:label="@string/permlab_bindRouteProvider"
+        android:description="@string/permdesc_bindRouteProvider"
+        android:protectionLevel="signature" />
+
     <!-- Must be required by device administration receiver, to ensure that only the
          system can interact with it. -->
     <permission android:name="android.permission.BIND_DEVICE_ADMIN"
@@ -2051,6 +2116,14 @@
         android:description="@string/permdesc_setPointerSpeed"
         android:protectionLevel="signature" />
 
+    <!-- Allows low-level access to setting input device calibration.
+         <p>Not for use by normal applications.
+         @hide -->
+    <permission android:name="android.permission.SET_INPUT_CALIBRATION"
+        android:label="@string/permlab_setInputCalibration"
+        android:description="@string/permdesc_setInputCalibration"
+        android:protectionLevel="signature" />
+
     <!-- Allows low-level access to setting the keyboard layout.
          <p>Not for use by third-party applications.
          @hide -->
@@ -2123,6 +2196,13 @@
         android:description="@string/permdesc_readFrameBuffer"
         android:protectionLevel="signature|system" />
 
+    <!-- Allows an application to use InputFlinger's low level features.
+    <p>Not for use by third-party applications. -->
+    <permission android:name="android.permission.ACCESS_INPUT_FLINGER"
+        android:label="@string/permlab_accessInputFlinger"
+        android:description="@string/permdesc_accessInputFlinger"
+        android:protectionLevel="signature" />
+
     <!-- Allows an application to configure and connect to Wifi displays
          @hide -->
     <permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"
@@ -2234,6 +2314,13 @@
         android:description="@string/permdesc_broadcastWapPush"
         android:protectionLevel="signature" />
 
+    <!-- Allows an application to broadcast a SCORE_NETWORKS request.
+         <p>Not for use by third-party applications. @hide -->
+    <permission android:name="android.permission.BROADCAST_SCORE_NETWORKS"
+        android:label="@string/permlab_broadcastScoreNetworks"
+        android:description="@string/permdesc_broadcastScoreNetworks"
+        android:protectionLevel="signature|system" />
+
     <!-- Not for use by third-party applications. -->
     <permission android:name="android.permission.MASTER_CLEAR"
         android:label="@string/permlab_masterClear"
@@ -2366,6 +2453,12 @@
         android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
         android:protectionLevel="signature" />
 
+    <!-- Internal permission to allows an application to read indexable data.
+        @hide -->
+    <permission android:name="android.permission.READ_SEARCH_INDEXABLES"
+        android:permissionGroup="android.permission-group.SYSTEM_TOOLS"
+        android:protectionLevel="signature|system" />
+
     <!-- Allows applications to set a live wallpaper.
          @hide XXX Change to signature once the picker is moved to its
          own apk as Ghod Intended. -->
@@ -2511,6 +2604,21 @@
         android:label="@string/permlab_control_keyguard"
         android:description="@string/permdesc_control_keyguard" />
 
+    <!-- Allows an application to listen to trust changes.  Only allowed for system processes.
+        @hide -->
+    <permission android:name="android.permission.TRUST_LISTENER"
+                android:protectionLevel="signature"
+                android:label="@string/permlab_trust_listener"
+                android:description="@string/permdesc_trust_listener" />
+
+    <!-- Must be required by an {@link
+         android.service.trust.TrustAgentService},
+         to ensure that only the system can bind to it. -->
+    <permission android:name="android.permission.BIND_TRUST_AGENT_SERVICE"
+                android:protectionLevel="signature"
+                android:label="@string/permlab_bind_trust_agent_service"
+                android:description="@string/permdesc_bind_trust_agent_service" />
+
     <!-- Must be required by an {@link
          android.service.notification.NotificationListenerService},
          to ensure that only the system can bind to it. -->
@@ -2519,6 +2627,15 @@
         android:description="@string/permdesc_bindNotificationListenerService"
         android:protectionLevel="signature" />
 
+    <!-- Must be required by an {@link
+         android.service.notification.ConditionProviderService},
+         to ensure that only the system can bind to it.
+         @hide -->
+    <permission android:name="android.permission.BIND_CONDITION_PROVIDER_SERVICE"
+        android:label="@string/permlab_bindConditionProviderService"
+        android:description="@string/permdesc_bindConditionProviderService"
+        android:protectionLevel="signature" />
+
     <!-- Allows an application to call into a carrier setup flow. It is up to the
          carrier setup application to enforce that this permission is required
          @hide This is not a third-party API (intended for OEMs and system apps). -->
@@ -2564,6 +2681,26 @@
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
+        <activity android:name="com.android.internal.app.IntentForwarderActivity"
+                android:finishOnCloseSystemDialogs="true"
+                android:theme="@style/Theme.NoDisplay"
+                android:excludeFromRecents="true"
+                android:label="@string/user_owner_label"
+                android:exported="true"
+                >
+        </activity>
+        <activity-alias android:name="com.android.internal.app.ForwardIntentToUserOwner"
+                android:targetActivity="com.android.internal.app.IntentForwarderActivity"
+                android:icon="@drawable/personal_icon"
+                android:exported="true"
+                android:label="@string/user_owner_label">
+        </activity-alias>
+        <activity-alias android:name="com.android.internal.app.ForwardIntentToManagedProfile"
+                android:targetActivity="com.android.internal.app.IntentForwarderActivity"
+                android:icon="@drawable/work_icon"
+                android:exported="true"
+                android:label="@string/managed_profile_label">
+        </activity-alias>
         <activity android:name="com.android.internal.app.HeavyWeightSwitcherActivity"
                 android:theme="@style/Theme.Holo.Dialog"
                 android:label="@string/heavy_weight_switcher_title"
@@ -2726,6 +2863,14 @@
             </intent-filter>
         </service>
 
+        <service android:name="com.android.server.MountServiceIdler"
+                 android:exported="false"
+                 android:permission="android.permission.BIND_IDLE_SERVICE" >
+            <intent-filter>
+                <action android:name="android.service.idle.IdleService" />
+            </intent-filter>
+        </service>
+
     </application>
 
 </manifest>
diff --git a/core/res/res/drawable/background_cache_hint_selector_holo_dark.xml b/core/res/res/color/background_cache_hint_selector_holo_dark.xml
similarity index 100%
rename from core/res/res/drawable/background_cache_hint_selector_holo_dark.xml
rename to core/res/res/color/background_cache_hint_selector_holo_dark.xml
diff --git a/core/res/res/drawable/background_cache_hint_selector_holo_light.xml b/core/res/res/color/background_cache_hint_selector_holo_light.xml
similarity index 100%
rename from core/res/res/drawable/background_cache_hint_selector_holo_light.xml
rename to core/res/res/color/background_cache_hint_selector_holo_light.xml
diff --git a/core/res/res/color/background_cache_hint_selector_quantum_dark.xml b/core/res/res/color/background_cache_hint_selector_quantum_dark.xml
new file mode 100644
index 0000000..ab66501
--- /dev/null
+++ b/core/res/res/color/background_cache_hint_selector_quantum_dark.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_accelerated="false" android:color="@android:color/background_quantum_dark" />
+    <item android:color="@android:color/transparent" />
+</selector>
diff --git a/core/res/res/color/background_cache_hint_selector_quantum_light.xml b/core/res/res/color/background_cache_hint_selector_quantum_light.xml
new file mode 100644
index 0000000..fb940a9
--- /dev/null
+++ b/core/res/res/color/background_cache_hint_selector_quantum_light.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_accelerated="false" android:color="@android:color/background_quantum_light" />
+    <item android:color="@android:color/transparent" />
+</selector>
diff --git a/core/res/res/color/primary_text_disable_only_quantum_dark.xml b/core/res/res/color/primary_text_disable_only_quantum_dark.xml
new file mode 100644
index 0000000..60a91f2
--- /dev/null
+++ b/core/res/res/color/primary_text_disable_only_quantum_dark.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_quantum_dark"/>
+    <item android:color="@android:color/bright_foreground_quantum_dark"/>
+</selector>
diff --git a/core/res/res/color/primary_text_disable_only_quantum_light.xml b/core/res/res/color/primary_text_disable_only_quantum_light.xml
new file mode 100644
index 0000000..ced9051
--- /dev/null
+++ b/core/res/res/color/primary_text_disable_only_quantum_light.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false" android:alpha="0.5" android:color="@android:color/bright_foreground_quantum_light"/>
+    <item android:color="@android:color/bright_foreground_quantum_light"/>
+</selector>
diff --git a/core/res/res/color/primary_text_quantum_dark.xml b/core/res/res/color/primary_text_quantum_dark.xml
new file mode 100644
index 0000000..1fcd0e3
--- /dev/null
+++ b/core/res/res/color/primary_text_quantum_dark.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false" android:alpha="0.5" android:color="@color/primary_text_default_quantum_dark"/>
+    <item android:color="@color/primary_text_default_quantum_dark"/>
+</selector>
diff --git a/core/res/res/color/primary_text_quantum_light.xml b/core/res/res/color/primary_text_quantum_light.xml
new file mode 100644
index 0000000..1ec1634
--- /dev/null
+++ b/core/res/res/color/primary_text_quantum_light.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2008 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false" android:alpha="0.5" android:color="@color/primary_text_default_quantum_light"/>
+    <item android:color="@color/primary_text_default_quantum_light"/>
+</selector>
diff --git a/core/res/res/color/search_url_text_quantum_dark.xml b/core/res/res/color/search_url_text_quantum_dark.xml
new file mode 100644
index 0000000..5263fd7
--- /dev/null
+++ b/core/res/res/color/search_url_text_quantum_dark.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" android:color="@android:color/search_url_text_pressed"/>
+    <item android:state_selected="true" android:color="@android:color/search_url_text_selected"/>
+    <item android:color="@android:color/search_url_text_normal"/>
+</selector>
diff --git a/core/res/res/color/search_url_text_quantum_light.xml b/core/res/res/color/search_url_text_quantum_light.xml
new file mode 100644
index 0000000..5263fd7
--- /dev/null
+++ b/core/res/res/color/search_url_text_quantum_light.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true" android:color="@android:color/search_url_text_pressed"/>
+    <item android:state_selected="true" android:color="@android:color/search_url_text_selected"/>
+    <item android:color="@android:color/search_url_text_normal"/>
+</selector>
diff --git a/core/res/res/drawable-hdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-hdpi/ab_share_pack_qntm_alpha.9.png
new file mode 100644
index 0000000..b07da0c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ab_share_pack_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-hdpi/ab_solid_shadow_qntm_alpha.9.png
new file mode 100644
index 0000000..e49ad54
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ab_solid_shadow_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-hdpi/btn_cab_done_qntm_alpha.9.png
new file mode 100644
index 0000000..992a8ff
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_cab_done_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_off_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_check_off_qntm_alpha.png
new file mode 100644
index 0000000..5bc1d90
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_check_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_check_on_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_check_on_qntm_alpha.png
new file mode 100644
index 0000000..e5de2c1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_check_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-hdpi/btn_qntm_alpha.9.png
new file mode 100644
index 0000000..171688f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_pressed_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_radio_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..7bef530
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_radio_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_off_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_radio_off_qntm_alpha.png
new file mode 100644
index 0000000..ae50dd5
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_radio_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_radio_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..0678dbb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_radio_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_radio_on_qntm_alpha.png
new file mode 100644
index 0000000..f332925
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_radio_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_rating_star_off_qntm_alpha.png
new file mode 100644
index 0000000..51a895d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_rating_star_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_rating_star_on_qntm_alpha.png
new file mode 100644
index 0000000..2f59488
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_rating_star_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-hdpi/btn_star_qntm_alpha.png
new file mode 100644
index 0000000..e11896f6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/btn_star_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-hdpi/expander_close_qntm_alpha.9.png
new file mode 100644
index 0000000..7bf9d90
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_close_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-hdpi/expander_open_qntm_alpha.9.png
new file mode 100644
index 0000000..d427a20
--- /dev/null
+++ b/core/res/res/drawable-hdpi/expander_open_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-hdpi/fastscroll_thumb_qntm_alpha.png
new file mode 100644
index 0000000..2000422d
--- /dev/null
+++ b/core/res/res/drawable-hdpi/fastscroll_thumb_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-hdpi/fastscroll_track_qntm_alpha.9.png
new file mode 100644
index 0000000..61ef6f6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/fastscroll_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-hdpi/ic_ab_back_qntm_am_alpha.png
new file mode 100644
index 0000000..f0910d8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_ab_back_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_alarm.png b/core/res/res/drawable-hdpi/ic_audio_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_alarm.png
rename to core/res/res/drawable-hdpi/ic_audio_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_alarm_mute.png b/core/res/res/drawable-hdpi/ic_audio_alarm_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_alarm_mute.png
rename to core/res/res/drawable-hdpi/ic_audio_alarm_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_bt.png b/core/res/res/drawable-hdpi/ic_audio_bt_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_bt.png
rename to core/res/res/drawable-hdpi/ic_audio_bt_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_bt_mute.png b/core/res/res/drawable-hdpi/ic_audio_bt_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_bt_mute.png
rename to core/res/res/drawable-hdpi/ic_audio_bt_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_notification_am.png b/core/res/res/drawable-hdpi/ic_audio_notification_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_notification_am.png
rename to core/res/res/drawable-hdpi/ic_audio_notification_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_notification_mute_am.png b/core/res/res/drawable-hdpi/ic_audio_notification_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_notification_mute_am.png
rename to core/res/res/drawable-hdpi/ic_audio_notification_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_phone_am.png b/core/res/res/drawable-hdpi/ic_audio_phone_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_phone_am.png
rename to core/res/res/drawable-hdpi/ic_audio_phone_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_ring_notif_am.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_ring_notif_am.png
rename to core/res/res/drawable-hdpi/ic_audio_ring_notif_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute_am.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_ring_notif_mute_am.png
rename to core/res/res/drawable-hdpi/ic_audio_ring_notif_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_ring_notif_vibrate_am.png b/core/res/res/drawable-hdpi/ic_audio_ring_notif_vibrate_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_ring_notif_vibrate_am.png
rename to core/res/res/drawable-hdpi/ic_audio_ring_notif_vibrate_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_vol_am.png b/core/res/res/drawable-hdpi/ic_audio_vol_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_vol_am.png
rename to core/res/res/drawable-hdpi/ic_audio_vol_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_audio_vol_mute_am.png b/core/res/res/drawable-hdpi/ic_audio_vol_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_audio_vol_mute_am.png
rename to core/res/res/drawable-hdpi/ic_audio_vol_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_cab_done_qntm_alpha.png
new file mode 100644
index 0000000..5635459
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_cab_done_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_clear_qntm_alpha.png
new file mode 100644
index 0000000..3813563
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_clear_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_commit_search_api_qntm_alpha.png
new file mode 100644
index 0000000..47263ea
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_commit_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_corp_badge.png b/core/res/res/drawable-hdpi/ic_corp_badge.png
new file mode 100644
index 0000000..f647375
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_corp_badge.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_dialog_alert_qntm_alpha.png
new file mode 100644
index 0000000..95cfb32
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_dialog_alert_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_find_next_qntm_alpha.png
new file mode 100644
index 0000000..6d5edac
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_find_next_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_find_previous_qntm_alpha.png
new file mode 100644
index 0000000..a5921af
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_find_previous_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_go_search_api_qntm_alpha.png
new file mode 100644
index 0000000..aa23c59
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_go_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_airplane_mode.png b/core/res/res/drawable-hdpi/ic_lock_airplane_mode_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lock_airplane_mode.png
rename to core/res/res/drawable-hdpi/ic_lock_airplane_mode_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_airplane_mode_off_am.png b/core/res/res/drawable-hdpi/ic_lock_airplane_mode_off_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lock_airplane_mode_off_am.png
rename to core/res/res/drawable-hdpi/ic_lock_airplane_mode_off_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_bugreport_alpha.png b/core/res/res/drawable-hdpi/ic_lock_bugreport_alpha.png
new file mode 100644
index 0000000..ba5bd01
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_lock_bugreport_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_idle_alarm.png b/core/res/res/drawable-hdpi/ic_lock_idle_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lock_idle_alarm.png
rename to core/res/res/drawable-hdpi/ic_lock_idle_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_lock.png b/core/res/res/drawable-hdpi/ic_lock_lock_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lock_lock.png
rename to core/res/res/drawable-hdpi/ic_lock_lock_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_power_off.png b/core/res/res/drawable-hdpi/ic_lock_power_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lock_power_off.png
rename to core/res/res/drawable-hdpi/ic_lock_power_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_ringer_off.png b/core/res/res/drawable-hdpi/ic_lock_ringer_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lock_ringer_off.png
rename to core/res/res/drawable-hdpi/ic_lock_ringer_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lock_ringer_on.png b/core/res/res/drawable-hdpi/ic_lock_ringer_on_alpha.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lock_ringer_on.png
rename to core/res/res/drawable-hdpi/ic_lock_ringer_on_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_disabled_qntm_alpha.png
new file mode 100644
index 0000000..e0a2ba1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_disabled_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_off_qntm_alpha.png
new file mode 100644
index 0000000..d37e8ee
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_0_qntm_alpha.png
new file mode 100644
index 0000000..0c604d9
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_0_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_1_qntm_alpha.png
new file mode 100644
index 0000000..2c3f4ff
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_1_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_2_qntm_alpha.png
new file mode 100644
index 0000000..991c50e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_2_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_media_route_on_qntm_alpha.png
new file mode 100644
index 0000000..05fb919
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_media_route_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-hdpi/ic_menu_copy_qntm_am_alpha.png
new file mode 100644
index 0000000..d6d1f2f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_copy_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_cut_qntm_alpha.png
new file mode 100644
index 0000000..ec8db6f6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_cut_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_find_qntm_alpha.png
new file mode 100644
index 0000000..0f9d41f
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_find_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_qntm_alpha.png
new file mode 100644
index 0000000..1ba1295
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_moreoverflow_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-hdpi/ic_menu_paste_qntm_am_alpha.png
new file mode 100644
index 0000000..bf44722
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_paste_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_search_qntm_alpha.png
new file mode 100644
index 0000000..a0501b3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_search_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_selectall_qntm_alpha.png
new file mode 100644
index 0000000..8539741
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_selectall_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_menu_share_qntm_alpha.png
new file mode 100644
index 0000000..0eacedd
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_menu_share_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_search_api_holo_dark.png b/core/res/res/drawable-hdpi/ic_search_api_holo_dark.png
new file mode 100644
index 0000000..8d529b8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_search_api_holo_light.png b/core/res/res/drawable-hdpi/ic_search_api_holo_light.png
index 72e207b..8b15ecb 100644
--- a/core/res/res/drawable-hdpi/ic_search_api_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_search_api_qntm_alpha.png
new file mode 100644
index 0000000..cac32b5
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_voice_search_api_holo_dark.png b/core/res/res/drawable-hdpi/ic_voice_search_api_holo_dark.png
new file mode 100644
index 0000000..32062a6
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_voice_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_voice_search_api_holo_light.png b/core/res/res/drawable-hdpi/ic_voice_search_api_holo_light.png
index 3481c98..d2b2d21 100644
--- a/core/res/res/drawable-hdpi/ic_voice_search_api_holo_light.png
+++ b/core/res/res/drawable-hdpi/ic_voice_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-hdpi/ic_voice_search_api_qntm_alpha.png
new file mode 100644
index 0000000..25b8935
--- /dev/null
+++ b/core/res/res/drawable-hdpi/ic_voice_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-hdpi/list_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..77845df
--- /dev/null
+++ b/core/res/res/drawable-hdpi/list_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-hdpi/list_section_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..20baf2a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/list_section_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/notify_panel_notification_icon_bg.png b/core/res/res/drawable-hdpi/notify_panel_notification_icon_bg.png
deleted file mode 100644
index 6f37a22..0000000
--- a/core/res/res/drawable-hdpi/notify_panel_notification_icon_bg.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/personal_icon.png b/core/res/res/drawable-hdpi/personal_icon.png
new file mode 100644
index 0000000..8d96b5e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/personal_icon.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-hdpi/progress_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..a278ed7a7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/progress_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-hdpi/progress_qntm_alpha.9.png
new file mode 100644
index 0000000..b11de9e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/progress_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrollbar_handle_accelerated_anim2.9.png b/core/res/res/drawable-hdpi/scrollbar_handle_accelerated_anim2.9.png
index 6eddc3f..fb9e7aa 100644
--- a/core/res/res/drawable-hdpi/scrollbar_handle_accelerated_anim2.9.png
+++ b/core/res/res/drawable-hdpi/scrollbar_handle_accelerated_anim2.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-hdpi/scrollbar_handle_qntm_alpha.9.png
new file mode 100644
index 0000000..a5166f2
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrollbar_handle_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..10ce2bc
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_control_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_off_qntm_alpha.png
new file mode 100644
index 0000000..f1023ea
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_control_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..0678dbb
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_control_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-hdpi/scrubber_control_on_qntm_alpha.png
new file mode 100644
index 0000000..15ceeee
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_control_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-hdpi/scrubber_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..4cfb1a7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-hdpi/scrubber_track_qntm_alpha.9.png
new file mode 100644
index 0000000..32ddf7a
--- /dev/null
+++ b/core/res/res/drawable-hdpi/scrubber_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-hdpi/spinner_qntm_am_alpha.9.png
new file mode 100644
index 0000000..66673d3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/spinner_qntm_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_off_qntm_alpha.9.png b/core/res/res/drawable-hdpi/switch_off_qntm_alpha.9.png
new file mode 100644
index 0000000..90b1498
--- /dev/null
+++ b/core/res/res/drawable-hdpi/switch_off_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_on_qntm_alpha.9.png b/core/res/res/drawable-hdpi/switch_on_qntm_alpha.9.png
new file mode 100644
index 0000000..b535758
--- /dev/null
+++ b/core/res/res/drawable-hdpi/switch_on_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-hdpi/switch_track_qntm_alpha.9.png
new file mode 100644
index 0000000..b11de9e
--- /dev/null
+++ b/core/res/res/drawable-hdpi/switch_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_indicator_normal_qntm_alpha.9.png b/core/res/res/drawable-hdpi/tab_indicator_normal_qntm_alpha.9.png
new file mode 100644
index 0000000..233d409
--- /dev/null
+++ b/core/res/res/drawable-hdpi/tab_indicator_normal_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/tab_indicator_selected_qntm_alpha.9.png b/core/res/res/drawable-hdpi/tab_indicator_selected_qntm_alpha.9.png
new file mode 100644
index 0000000..68b1dd7
--- /dev/null
+++ b/core/res/res/drawable-hdpi/tab_indicator_selected_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-hdpi/text_cursor_qntm_alpha.9.png
new file mode 100644
index 0000000..0179433
--- /dev/null
+++ b/core/res/res/drawable-hdpi/text_cursor_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-hdpi/text_select_handle_left_qntm_alpha.png
new file mode 100644
index 0000000..598b98c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/text_select_handle_left_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-hdpi/text_select_handle_middle_qntm_alpha.png
new file mode 100644
index 0000000..df2fdb8
--- /dev/null
+++ b/core/res/res/drawable-hdpi/text_select_handle_middle_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-hdpi/text_select_handle_right_qntm_alpha.png
new file mode 100644
index 0000000..79fe7c5
--- /dev/null
+++ b/core/res/res/drawable-hdpi/text_select_handle_right_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..7c77a45
--- /dev/null
+++ b/core/res/res/drawable-hdpi/textfield_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_default_qntm_alpha.9.png
new file mode 100644
index 0000000..bc6da21
--- /dev/null
+++ b/core/res/res/drawable-hdpi/textfield_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_search_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..7bcebcd
--- /dev/null
+++ b/core/res/res/drawable-hdpi/textfield_search_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-hdpi/textfield_search_default_qntm_alpha.9.png
new file mode 100644
index 0000000..eb1d945
--- /dev/null
+++ b/core/res/res/drawable-hdpi/textfield_search_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/work_icon.png b/core/res/res/drawable-hdpi/work_icon.png
new file mode 100644
index 0000000..e90866b
--- /dev/null
+++ b/core/res/res/drawable-hdpi/work_icon.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ab_solid_shadow_qntm.9.png b/core/res/res/drawable-ldpi/ab_solid_shadow_qntm.9.png
new file mode 100644
index 0000000..098a315
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ab_solid_shadow_qntm.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ab_transparent_qntm_alpha.9.png b/core/res/res/drawable-ldpi/ab_transparent_qntm_alpha.9.png
new file mode 100644
index 0000000..4d4cb4f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ab_transparent_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_check_off_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_check_off_qntm_alpha.png
new file mode 100644
index 0000000..fbe176f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_check_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_check_on_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_check_on_qntm_alpha.png
new file mode 100644
index 0000000..5fd18e5
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_check_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_qntm_alpha.9.png b/core/res/res/drawable-ldpi/btn_qntm_alpha.9.png
new file mode 100644
index 0000000..1b648db
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_off_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..ac27576
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_radio_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_off_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_off_qntm_alpha.png
new file mode 100644
index 0000000..d17081f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_radio_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..458abafa
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_radio_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_radio_on_qntm_alpha.png
new file mode 100644
index 0000000..f31d37f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_radio_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/btn_star_qntm_alpha.png b/core/res/res/drawable-ldpi/btn_star_qntm_alpha.png
new file mode 100644
index 0000000..ae665fd
--- /dev/null
+++ b/core/res/res/drawable-ldpi/btn_star_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-ldpi/expander_close_qntm_alpha.9.png
new file mode 100644
index 0000000..19ac6f5
--- /dev/null
+++ b/core/res/res/drawable-ldpi/expander_close_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-ldpi/expander_open_qntm_alpha.9.png
new file mode 100644
index 0000000..e51f018
--- /dev/null
+++ b/core/res/res/drawable-ldpi/expander_open_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-ldpi/fastscroll_thumb_qntm_alpha.png
new file mode 100644
index 0000000..c901730
--- /dev/null
+++ b/core/res/res/drawable-ldpi/fastscroll_thumb_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-ldpi/fastscroll_track_qntm_alpha.9.png
new file mode 100644
index 0000000..833dac9
--- /dev/null
+++ b/core/res/res/drawable-ldpi/fastscroll_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-ldpi/ic_ab_back_qntm_am_alpha.png
new file mode 100644
index 0000000..96e86b6
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_ab_back_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_cab_done_qntm_alpha.png
new file mode 100644
index 0000000..8ee0546
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_cab_done_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_dialog_alert_qntm_alpha.png
new file mode 100644
index 0000000..f604e8b
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_dialog_alert_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_find_next_qntm_alpha.png
new file mode 100644
index 0000000..dd6fe20
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_find_next_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_find_previous_qntm_alpha.png
new file mode 100644
index 0000000..d4598ba
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_find_previous_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_lock_airplane_mode.png b/core/res/res/drawable-ldpi/ic_lock_airplane_mode_alpha.png
similarity index 100%
rename from core/res/res/drawable-ldpi/ic_lock_airplane_mode.png
rename to core/res/res/drawable-ldpi/ic_lock_airplane_mode_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_lock_airplane_mode_off_am.png b/core/res/res/drawable-ldpi/ic_lock_airplane_mode_off_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-ldpi/ic_lock_airplane_mode_off_am.png
rename to core/res/res/drawable-ldpi/ic_lock_airplane_mode_off_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_lock_idle_alarm.png b/core/res/res/drawable-ldpi/ic_lock_idle_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-ldpi/ic_lock_idle_alarm.png
rename to core/res/res/drawable-ldpi/ic_lock_idle_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_lock_lock.png b/core/res/res/drawable-ldpi/ic_lock_lock_alpha.png
similarity index 100%
rename from core/res/res/drawable-ldpi/ic_lock_lock.png
rename to core/res/res/drawable-ldpi/ic_lock_lock_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_lock_power_off.png b/core/res/res/drawable-ldpi/ic_lock_power_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-ldpi/ic_lock_power_off.png
rename to core/res/res/drawable-ldpi/ic_lock_power_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_lock_ringer_off.png b/core/res/res/drawable-ldpi/ic_lock_ringer_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-ldpi/ic_lock_ringer_off.png
rename to core/res/res/drawable-ldpi/ic_lock_ringer_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_lock_ringer_on.png b/core/res/res/drawable-ldpi/ic_lock_ringer_on_alpha.png
similarity index 100%
rename from core/res/res/drawable-ldpi/ic_lock_ringer_on.png
rename to core/res/res/drawable-ldpi/ic_lock_ringer_on_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-ldpi/ic_menu_copy_qntm_am_alpha.png
new file mode 100644
index 0000000..565280b
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_copy_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_cut_qntm_alpha.png
new file mode 100644
index 0000000..dbedece
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_cut_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_find_qntm_alpha.png
new file mode 100644
index 0000000..c828577
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_find_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_moreoverflow_qntm_alpha.png
new file mode 100644
index 0000000..d47f81e
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_moreoverflow_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-ldpi/ic_menu_paste_qntm_am_alpha.png
new file mode 100644
index 0000000..430141b
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_paste_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_search_qntm_alpha.png
new file mode 100644
index 0000000..ec759fb
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_search_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_selectall_qntm_alpha.png
new file mode 100644
index 0000000..7b520bc
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_selectall_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-ldpi/ic_menu_share_qntm_alpha.png
new file mode 100644
index 0000000..db1e146
--- /dev/null
+++ b/core/res/res/drawable-ldpi/ic_menu_share_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-ldpi/list_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..77845df
--- /dev/null
+++ b/core/res/res/drawable-ldpi/list_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-ldpi/list_section_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..f1a0362
--- /dev/null
+++ b/core/res/res/drawable-ldpi/list_section_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-ldpi/progress_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..eb0933b
--- /dev/null
+++ b/core/res/res/drawable-ldpi/progress_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/progress_qntm_alpha.9.png b/core/res/res/drawable-ldpi/progress_qntm_alpha.9.png
new file mode 100644
index 0000000..a58128f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/progress_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrollbar_handle_accelerated_anim2.9.png b/core/res/res/drawable-ldpi/scrollbar_handle_accelerated_anim2.9.png
index 0562c03..a4ca3e0 100644
--- a/core/res/res/drawable-ldpi/scrollbar_handle_accelerated_anim2.9.png
+++ b/core/res/res/drawable-ldpi/scrollbar_handle_accelerated_anim2.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-ldpi/scrollbar_handle_qntm_alpha.9.png
new file mode 100644
index 0000000..3e301ef
--- /dev/null
+++ b/core/res/res/drawable-ldpi/scrollbar_handle_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..df88c4e
--- /dev/null
+++ b/core/res/res/drawable-ldpi/scrubber_control_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_off_qntm_alpha.png
new file mode 100644
index 0000000..bf6ce6c
--- /dev/null
+++ b/core/res/res/drawable-ldpi/scrubber_control_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..458abafa
--- /dev/null
+++ b/core/res/res/drawable-ldpi/scrubber_control_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-ldpi/scrubber_control_on_qntm_alpha.png
new file mode 100644
index 0000000..85a06b9
--- /dev/null
+++ b/core/res/res/drawable-ldpi/scrubber_control_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-ldpi/scrubber_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..6f99790
--- /dev/null
+++ b/core/res/res/drawable-ldpi/scrubber_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-ldpi/spinner_qntm_am_alpha.9.png
new file mode 100644
index 0000000..368a9b0
--- /dev/null
+++ b/core/res/res/drawable-ldpi/spinner_qntm_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/switch_off_qntm_alpha.9.png b/core/res/res/drawable-ldpi/switch_off_qntm_alpha.9.png
new file mode 100644
index 0000000..9cd2df3
--- /dev/null
+++ b/core/res/res/drawable-ldpi/switch_off_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/switch_on_qntm_alpha.9.png b/core/res/res/drawable-ldpi/switch_on_qntm_alpha.9.png
new file mode 100644
index 0000000..f9b287a
--- /dev/null
+++ b/core/res/res/drawable-ldpi/switch_on_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-ldpi/switch_track_qntm_alpha.9.png
new file mode 100644
index 0000000..a58128f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/switch_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_indicator_normal_qntm_alpha.9.png b/core/res/res/drawable-ldpi/tab_indicator_normal_qntm_alpha.9.png
new file mode 100644
index 0000000..2244362
--- /dev/null
+++ b/core/res/res/drawable-ldpi/tab_indicator_normal_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/tab_indicator_selected_qntm_alpha.9.png b/core/res/res/drawable-ldpi/tab_indicator_selected_qntm_alpha.9.png
new file mode 100644
index 0000000..22ea80e
--- /dev/null
+++ b/core/res/res/drawable-ldpi/tab_indicator_selected_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-ldpi/text_cursor_qntm_alpha.9.png
new file mode 100644
index 0000000..4aaa79f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/text_cursor_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-ldpi/textfield_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..d12ec06
--- /dev/null
+++ b/core/res/res/drawable-ldpi/textfield_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-ldpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-ldpi/textfield_default_qntm_alpha.9.png
new file mode 100644
index 0000000..6f0c57f
--- /dev/null
+++ b/core/res/res/drawable-ldpi/textfield_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-mdpi/ab_share_pack_qntm_alpha.9.png
new file mode 100644
index 0000000..f31730d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ab_share_pack_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-mdpi/ab_solid_shadow_qntm_alpha.9.png
new file mode 100644
index 0000000..ebdea00
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ab_solid_shadow_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-mdpi/btn_cab_done_qntm_alpha.9.png
new file mode 100644
index 0000000..5903856d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_cab_done_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_off_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_check_off_qntm_alpha.png
new file mode 100644
index 0000000..2ab6b7f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_check_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_check_on_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_check_on_qntm_alpha.png
new file mode 100644
index 0000000..2211d83
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_check_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-mdpi/btn_qntm_alpha.9.png
new file mode 100644
index 0000000..fc51595
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_pressed_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_radio_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..713fee8
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_radio_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_off_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_radio_off_qntm_alpha.png
new file mode 100644
index 0000000..dcb90d0
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_radio_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_radio_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..3c304bf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_radio_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_radio_on_qntm_alpha.png
new file mode 100644
index 0000000..04a8edb
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_radio_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_rating_star_off_qntm_alpha.png
new file mode 100644
index 0000000..d38aed2
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_rating_star_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_rating_star_on_qntm_alpha.png
new file mode 100644
index 0000000..87dade3
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_rating_star_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-mdpi/btn_star_qntm_alpha.png
new file mode 100644
index 0000000..7ce950d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/btn_star_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-mdpi/expander_close_qntm_alpha.9.png
new file mode 100644
index 0000000..6070397
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_close_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-mdpi/expander_open_qntm_alpha.9.png
new file mode 100644
index 0000000..29a3a1a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/expander_open_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-mdpi/fastscroll_thumb_qntm_alpha.png
new file mode 100644
index 0000000..4984f9c
--- /dev/null
+++ b/core/res/res/drawable-mdpi/fastscroll_thumb_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-mdpi/fastscroll_track_qntm_alpha.9.png
new file mode 100644
index 0000000..4041808
--- /dev/null
+++ b/core/res/res/drawable-mdpi/fastscroll_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-mdpi/ic_ab_back_qntm_am_alpha.png
new file mode 100644
index 0000000..e196bbe
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_ab_back_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_alarm.png b/core/res/res/drawable-mdpi/ic_audio_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_alarm.png
rename to core/res/res/drawable-mdpi/ic_audio_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_alarm_mute.png b/core/res/res/drawable-mdpi/ic_audio_alarm_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_alarm_mute.png
rename to core/res/res/drawable-mdpi/ic_audio_alarm_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_bt.png b/core/res/res/drawable-mdpi/ic_audio_bt_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_bt.png
rename to core/res/res/drawable-mdpi/ic_audio_bt_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_bt_mute.png b/core/res/res/drawable-mdpi/ic_audio_bt_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_bt_mute.png
rename to core/res/res/drawable-mdpi/ic_audio_bt_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_notification_am.png b/core/res/res/drawable-mdpi/ic_audio_notification_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_notification_am.png
rename to core/res/res/drawable-mdpi/ic_audio_notification_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_notification_mute_am.png b/core/res/res/drawable-mdpi/ic_audio_notification_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_notification_mute_am.png
rename to core/res/res/drawable-mdpi/ic_audio_notification_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_phone_am.png b/core/res/res/drawable-mdpi/ic_audio_phone_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_phone_am.png
rename to core/res/res/drawable-mdpi/ic_audio_phone_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_ring_notif_am.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_ring_notif_am.png
rename to core/res/res/drawable-mdpi/ic_audio_ring_notif_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute_am.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_ring_notif_mute_am.png
rename to core/res/res/drawable-mdpi/ic_audio_ring_notif_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_ring_notif_vibrate_am.png b/core/res/res/drawable-mdpi/ic_audio_ring_notif_vibrate_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_ring_notif_vibrate_am.png
rename to core/res/res/drawable-mdpi/ic_audio_ring_notif_vibrate_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_vol_am.png b/core/res/res/drawable-mdpi/ic_audio_vol_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_vol_am.png
rename to core/res/res/drawable-mdpi/ic_audio_vol_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_audio_vol_mute_am.png b/core/res/res/drawable-mdpi/ic_audio_vol_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_audio_vol_mute_am.png
rename to core/res/res/drawable-mdpi/ic_audio_vol_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_cab_done_qntm_alpha.png
new file mode 100644
index 0000000..541184a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_cab_done_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_clear_qntm_alpha.png
new file mode 100644
index 0000000..d43e4d1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_clear_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_commit_search_api_qntm_alpha.png
new file mode 100644
index 0000000..42ac8ca
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_commit_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_dialog_alert_qntm_alpha.png
new file mode 100644
index 0000000..8a882f90
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_dialog_alert_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_find_next_qntm_alpha.png
new file mode 100644
index 0000000..1cfdb3f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_find_next_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_find_previous_qntm_alpha.png
new file mode 100644
index 0000000..0d3c009
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_find_previous_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_go_search_api_qntm_alpha.png
new file mode 100644
index 0000000..b5f6176
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_go_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_airplane_mode.png b/core/res/res/drawable-mdpi/ic_lock_airplane_mode_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lock_airplane_mode.png
rename to core/res/res/drawable-mdpi/ic_lock_airplane_mode_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_airplane_mode_off_am.png b/core/res/res/drawable-mdpi/ic_lock_airplane_mode_off_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lock_airplane_mode_off_am.png
rename to core/res/res/drawable-mdpi/ic_lock_airplane_mode_off_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_bugreport_alpha.png b/core/res/res/drawable-mdpi/ic_lock_bugreport_alpha.png
new file mode 100644
index 0000000..4e2612d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_lock_bugreport_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_idle_alarm.png b/core/res/res/drawable-mdpi/ic_lock_idle_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lock_idle_alarm.png
rename to core/res/res/drawable-mdpi/ic_lock_idle_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_lock.png b/core/res/res/drawable-mdpi/ic_lock_lock_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lock_lock.png
rename to core/res/res/drawable-mdpi/ic_lock_lock_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_power_off.png b/core/res/res/drawable-mdpi/ic_lock_power_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lock_power_off.png
rename to core/res/res/drawable-mdpi/ic_lock_power_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_ringer_off.png b/core/res/res/drawable-mdpi/ic_lock_ringer_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lock_ringer_off.png
rename to core/res/res/drawable-mdpi/ic_lock_ringer_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lock_ringer_on.png b/core/res/res/drawable-mdpi/ic_lock_ringer_on_alpha.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lock_ringer_on.png
rename to core/res/res/drawable-mdpi/ic_lock_ringer_on_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_disabled_qntm_alpha.png
new file mode 100644
index 0000000..ec43047
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_disabled_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_off_qntm_alpha.png
new file mode 100644
index 0000000..a652117
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_0_qntm_alpha.png
new file mode 100644
index 0000000..35d1c56
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_0_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_1_qntm_alpha.png
new file mode 100644
index 0000000..264188b
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_1_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_2_qntm_alpha.png
new file mode 100644
index 0000000..06ae6659
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_2_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_media_route_on_qntm_alpha.png
new file mode 100644
index 0000000..a69e301
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_media_route_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-mdpi/ic_menu_copy_qntm_am_alpha.png
new file mode 100644
index 0000000..3fae32d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_copy_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_cut_qntm_alpha.png
new file mode 100644
index 0000000..61ff631
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_cut_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_find_qntm_alpha.png
new file mode 100644
index 0000000..6be897d
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_find_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_qntm_alpha.png
new file mode 100644
index 0000000..8415096
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_moreoverflow_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-mdpi/ic_menu_paste_qntm_am_alpha.png
new file mode 100644
index 0000000..112c268
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_paste_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_search_qntm_alpha.png
new file mode 100644
index 0000000..c5de768
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_search_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_selectall_qntm_alpha.png
new file mode 100644
index 0000000..6414956
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_selectall_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_menu_share_qntm_alpha.png
new file mode 100644
index 0000000..e0d5ac4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_menu_share_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search.png b/core/res/res/drawable-mdpi/ic_search.png
index 4be72f1..66145e0 100644
--- a/core/res/res/drawable-mdpi/ic_search.png
+++ b/core/res/res/drawable-mdpi/ic_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search_api_holo_dark.png b/core/res/res/drawable-mdpi/ic_search_api_holo_dark.png
new file mode 100644
index 0000000..4771a56
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search_api_holo_light.png b/core/res/res/drawable-mdpi/ic_search_api_holo_light.png
index f2e26f8..60a55f8 100644
--- a/core/res/res/drawable-mdpi/ic_search_api_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_search_api_qntm_alpha.png
new file mode 100644
index 0000000..9137fea
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search.png b/core/res/res/drawable-mdpi/ic_voice_search.png
index 73c6be6..b2535fb 100644
--- a/core/res/res/drawable-mdpi/ic_voice_search.png
+++ b/core/res/res/drawable-mdpi/ic_voice_search.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search_api_holo_dark.png b/core/res/res/drawable-mdpi/ic_voice_search_api_holo_dark.png
new file mode 100644
index 0000000..fcc2105
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_voice_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png b/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png
index 71d838e..b516b95 100644
--- a/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png
+++ b/core/res/res/drawable-mdpi/ic_voice_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-mdpi/ic_voice_search_api_qntm_alpha.png
new file mode 100644
index 0000000..3f1eee3
--- /dev/null
+++ b/core/res/res/drawable-mdpi/ic_voice_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-mdpi/list_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..77845df
--- /dev/null
+++ b/core/res/res/drawable-mdpi/list_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-mdpi/list_section_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..11ae4f4
--- /dev/null
+++ b/core/res/res/drawable-mdpi/list_section_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.png b/core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.png
deleted file mode 100644
index c286875..0000000
--- a/core/res/res/drawable-mdpi/notify_panel_notification_icon_bg.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-mdpi/progress_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..07cbed8
--- /dev/null
+++ b/core/res/res/drawable-mdpi/progress_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-mdpi/progress_qntm_alpha.9.png
new file mode 100644
index 0000000..8991421
--- /dev/null
+++ b/core/res/res/drawable-mdpi/progress_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_accelerated_anim2.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_accelerated_anim2.9.png
index 766e4c0..6d83bb4 100644
--- a/core/res/res/drawable-mdpi/scrollbar_handle_accelerated_anim2.9.png
+++ b/core/res/res/drawable-mdpi/scrollbar_handle_accelerated_anim2.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-mdpi/scrollbar_handle_qntm_alpha.9.png
new file mode 100644
index 0000000..1834b2e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrollbar_handle_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..1f4b46a
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_control_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_off_qntm_alpha.png
new file mode 100644
index 0000000..1833704
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_control_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..3c304bf
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_control_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-mdpi/scrubber_control_on_qntm_alpha.png
new file mode 100644
index 0000000..e64d3f2
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_control_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-mdpi/scrubber_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..a4ab0a1
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-mdpi/scrubber_track_qntm_alpha.9.png
new file mode 100644
index 0000000..db9e172
--- /dev/null
+++ b/core/res/res/drawable-mdpi/scrubber_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-mdpi/spinner_qntm_am_alpha.9.png
new file mode 100644
index 0000000..5e245bc
--- /dev/null
+++ b/core/res/res/drawable-mdpi/spinner_qntm_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_off_qntm_alpha.9.png b/core/res/res/drawable-mdpi/switch_off_qntm_alpha.9.png
new file mode 100644
index 0000000..ffd6c39
--- /dev/null
+++ b/core/res/res/drawable-mdpi/switch_off_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_on_qntm_alpha.9.png b/core/res/res/drawable-mdpi/switch_on_qntm_alpha.9.png
new file mode 100644
index 0000000..15faff0
--- /dev/null
+++ b/core/res/res/drawable-mdpi/switch_on_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-mdpi/switch_track_qntm_alpha.9.png
new file mode 100644
index 0000000..8991421
--- /dev/null
+++ b/core/res/res/drawable-mdpi/switch_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_indicator_normal_qntm_alpha.9.png b/core/res/res/drawable-mdpi/tab_indicator_normal_qntm_alpha.9.png
new file mode 100644
index 0000000..fd668ee
--- /dev/null
+++ b/core/res/res/drawable-mdpi/tab_indicator_normal_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/tab_indicator_selected_qntm_alpha.9.png b/core/res/res/drawable-mdpi/tab_indicator_selected_qntm_alpha.9.png
new file mode 100644
index 0000000..ace579f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/tab_indicator_selected_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-mdpi/text_cursor_qntm_alpha.9.png
new file mode 100644
index 0000000..e5760be
--- /dev/null
+++ b/core/res/res/drawable-mdpi/text_cursor_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-mdpi/text_select_handle_left_qntm_alpha.png
new file mode 100644
index 0000000..506a186
--- /dev/null
+++ b/core/res/res/drawable-mdpi/text_select_handle_left_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-mdpi/text_select_handle_middle_qntm_alpha.png
new file mode 100644
index 0000000..e54d32e
--- /dev/null
+++ b/core/res/res/drawable-mdpi/text_select_handle_middle_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-mdpi/text_select_handle_right_qntm_alpha.png
new file mode 100644
index 0000000..fb0e926
--- /dev/null
+++ b/core/res/res/drawable-mdpi/text_select_handle_right_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..7a72295
--- /dev/null
+++ b/core/res/res/drawable-mdpi/textfield_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_default_qntm_alpha.9.png
new file mode 100644
index 0000000..483931f
--- /dev/null
+++ b/core/res/res/drawable-mdpi/textfield_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_search_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..ef4ebc0
--- /dev/null
+++ b/core/res/res/drawable-mdpi/textfield_search_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-mdpi/textfield_search_default_qntm_alpha.9.png
new file mode 100644
index 0000000..9ddbcf5
--- /dev/null
+++ b/core/res/res/drawable-mdpi/textfield_search_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/ab_share_pack_qntm_alpha.9.png
new file mode 100644
index 0000000..8337ffe
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ab_share_pack_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/ab_solid_shadow_qntm_alpha.9.png
new file mode 100644
index 0000000..f51af63
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ab_solid_shadow_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/btn_cab_done_qntm_alpha.9.png
new file mode 100644
index 0000000..d0d0b1e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_cab_done_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_check_off_qntm_alpha.png
new file mode 100644
index 0000000..5d820ae
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_check_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_check_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_check_on_qntm_alpha.png
new file mode 100644
index 0000000..019c92e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_check_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/btn_qntm_alpha.9.png
new file mode 100644
index 0000000..30d732a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_pressed_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..2fd964e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_radio_off_qntm_alpha.png
new file mode 100644
index 0000000..8873cd6
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..a7ed0f8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_radio_on_qntm_alpha.png
new file mode 100644
index 0000000..be4aaf3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_radio_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_rating_star_off_qntm_alpha.png
new file mode 100644
index 0000000..33ec44c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_rating_star_on_qntm_alpha.png
new file mode 100644
index 0000000..0166d70
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_rating_star_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-xhdpi/btn_star_qntm_alpha.png
new file mode 100644
index 0000000..a85bc06
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/btn_star_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/expander_close_qntm_alpha.9.png
new file mode 100644
index 0000000..43dccf3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/expander_close_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/expander_open_qntm_alpha.9.png
new file mode 100644
index 0000000..181be1a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/expander_open_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-xhdpi/fastscroll_thumb_qntm_alpha.png
new file mode 100644
index 0000000..9534f78
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_thumb_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/fastscroll_track_qntm_alpha.9.png
new file mode 100644
index 0000000..02f0174
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/fastscroll_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-xhdpi/ic_ab_back_qntm_am_alpha.png
new file mode 100644
index 0000000..4385b2b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_ab_back_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_alarm.png b/core/res/res/drawable-xhdpi/ic_audio_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_alarm.png
rename to core/res/res/drawable-xhdpi/ic_audio_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_alarm_mute.png b/core/res/res/drawable-xhdpi/ic_audio_alarm_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_alarm_mute.png
rename to core/res/res/drawable-xhdpi/ic_audio_alarm_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_bt.png b/core/res/res/drawable-xhdpi/ic_audio_bt_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_bt.png
rename to core/res/res/drawable-xhdpi/ic_audio_bt_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_bt_mute.png b/core/res/res/drawable-xhdpi/ic_audio_bt_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_bt_mute.png
rename to core/res/res/drawable-xhdpi/ic_audio_bt_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_notification_am.png b/core/res/res/drawable-xhdpi/ic_audio_notification_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_notification_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_notification_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_notification_mute_am.png b/core/res/res/drawable-xhdpi/ic_audio_notification_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_notification_mute_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_notification_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_phone_am.png b/core/res/res/drawable-xhdpi/ic_audio_phone_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_phone_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_phone_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_ring_notif_am.png b/core/res/res/drawable-xhdpi/ic_audio_ring_notif_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_ring_notif_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_ring_notif_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute_am.png b/core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_ring_notif_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_ring_notif_vibrate_am.png b/core/res/res/drawable-xhdpi/ic_audio_ring_notif_vibrate_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_ring_notif_vibrate_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_ring_notif_vibrate_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_vol_am.png b/core/res/res/drawable-xhdpi/ic_audio_vol_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_vol_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_vol_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_audio_vol_mute_am.png b/core/res/res/drawable-xhdpi/ic_audio_vol_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_audio_vol_mute_am.png
rename to core/res/res/drawable-xhdpi/ic_audio_vol_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_cab_done_qntm_alpha.png
new file mode 100644
index 0000000..3d6d734
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_cab_done_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_clear_qntm_alpha.png
new file mode 100644
index 0000000..ddacb59
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_clear_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_commit_search_api_qntm_alpha.png
new file mode 100644
index 0000000..c10a1b7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_commit_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_corp_badge.png b/core/res/res/drawable-xhdpi/ic_corp_badge.png
new file mode 100644
index 0000000..80d848d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_corp_badge.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_dialog_alert_qntm_alpha.png
new file mode 100644
index 0000000..2229bf3
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_dialog_alert_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_find_next_qntm_alpha.png
new file mode 100644
index 0000000..9038282
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_find_next_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_find_previous_qntm_alpha.png
new file mode 100644
index 0000000..579347f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_find_previous_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_go_search_api_qntm_alpha.png
new file mode 100644
index 0000000..bd80981
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_go_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_airplane_mode.png b/core/res/res/drawable-xhdpi/ic_lock_airplane_mode_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lock_airplane_mode.png
rename to core/res/res/drawable-xhdpi/ic_lock_airplane_mode_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off_am.png b/core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off_am.png
rename to core/res/res/drawable-xhdpi/ic_lock_airplane_mode_off_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_bugreport_alpha.png b/core/res/res/drawable-xhdpi/ic_lock_bugreport_alpha.png
new file mode 100644
index 0000000..e6ca1ea
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_lock_bugreport_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_idle_alarm.png b/core/res/res/drawable-xhdpi/ic_lock_idle_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lock_idle_alarm.png
rename to core/res/res/drawable-xhdpi/ic_lock_idle_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_lock.png b/core/res/res/drawable-xhdpi/ic_lock_lock_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lock_lock.png
rename to core/res/res/drawable-xhdpi/ic_lock_lock_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_power_off.png b/core/res/res/drawable-xhdpi/ic_lock_power_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lock_power_off.png
rename to core/res/res/drawable-xhdpi/ic_lock_power_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_ringer_off.png b/core/res/res/drawable-xhdpi/ic_lock_ringer_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lock_ringer_off.png
rename to core/res/res/drawable-xhdpi/ic_lock_ringer_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lock_ringer_on.png b/core/res/res/drawable-xhdpi/ic_lock_ringer_on_alpha.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lock_ringer_on.png
rename to core/res/res/drawable-xhdpi/ic_lock_ringer_on_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_disabled_qntm_alpha.png
new file mode 100644
index 0000000..a020d64
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_disabled_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_off_qntm_alpha.png
new file mode 100644
index 0000000..e75ffb8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_0_qntm_alpha.png
new file mode 100644
index 0000000..1b9fc12
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_0_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_1_qntm_alpha.png
new file mode 100644
index 0000000..f63d47e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_1_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_2_qntm_alpha.png
new file mode 100644
index 0000000..fe005d9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_2_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_media_route_on_qntm_alpha.png
new file mode 100644
index 0000000..ea86408
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_media_route_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_copy_qntm_am_alpha.png
new file mode 100644
index 0000000..b690d7c
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_copy_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_cut_qntm_alpha.png
new file mode 100644
index 0000000..10c2067
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_cut_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_find_qntm_alpha.png
new file mode 100644
index 0000000..dd5460f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_find_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_qntm_alpha.png
new file mode 100644
index 0000000..f91b718
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_moreoverflow_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_paste_qntm_am_alpha.png
new file mode 100644
index 0000000..4024627
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_paste_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_search_qntm_alpha.png
new file mode 100644
index 0000000..4602b35
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_search_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_selectall_qntm_alpha.png
new file mode 100644
index 0000000..f7c0261
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_selectall_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_menu_share_qntm_alpha.png
new file mode 100644
index 0000000..7accf52
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_menu_share_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search.png b/core/res/res/drawable-xhdpi/ic_search.png
index 998f91b..738a392 100644
--- a/core/res/res/drawable-xhdpi/ic_search.png
+++ b/core/res/res/drawable-xhdpi/ic_search.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search_api_holo_dark.png b/core/res/res/drawable-xhdpi/ic_search_api_holo_dark.png
new file mode 100644
index 0000000..b0d7acf
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search_api_holo_light.png b/core/res/res/drawable-xhdpi/ic_search_api_holo_light.png
index a4cdf1c..c9626a0 100644
--- a/core/res/res/drawable-xhdpi/ic_search_api_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_search_api_qntm_alpha.png
new file mode 100644
index 0000000..513ee8b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_search_category_default.png b/core/res/res/drawable-xhdpi/ic_search_category_default.png
index 7d5170e..351cfe0 100644
--- a/core/res/res/drawable-xhdpi/ic_search_category_default.png
+++ b/core/res/res/drawable-xhdpi/ic_search_category_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_voice_search.png b/core/res/res/drawable-xhdpi/ic_voice_search.png
index c625a36..3f0518b 100644
--- a/core/res/res/drawable-xhdpi/ic_voice_search.png
+++ b/core/res/res/drawable-xhdpi/ic_voice_search.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_dark.png b/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_dark.png
new file mode 100644
index 0000000..eb6e5fa
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.png b/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.png
index c332ba0..c6b40bb 100644
--- a/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.png
+++ b/core/res/res/drawable-xhdpi/ic_voice_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-xhdpi/ic_voice_search_api_qntm_alpha.png
new file mode 100644
index 0000000..c1c23d04
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/ic_voice_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/list_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..77845df
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/list_section_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..e053b39
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/list_section_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/notify_panel_notification_icon_bg.png b/core/res/res/drawable-xhdpi/notify_panel_notification_icon_bg.png
deleted file mode 100644
index 9128e62..0000000
--- a/core/res/res/drawable-xhdpi/notify_panel_notification_icon_bg.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/progress_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..5c7e5cd
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/progress_qntm_alpha.9.png
new file mode 100644
index 0000000..4970f56
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/progress_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png
index 3cf84a5..70856c0 100644
--- a/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png
+++ b/core/res/res/drawable-xhdpi/scrollbar_handle_accelerated_anim2.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/scrollbar_handle_qntm_alpha.9.png
new file mode 100644
index 0000000..3c816c7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrollbar_handle_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..754b321
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_off_qntm_alpha.png
new file mode 100644
index 0000000..ad72f06
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..a7ed0f8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-xhdpi/scrubber_control_on_qntm_alpha.png
new file mode 100644
index 0000000..7aceed1
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_control_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/scrubber_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..2b4734d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/scrubber_track_qntm_alpha.9.png
new file mode 100644
index 0000000..805cb29
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/scrubber_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-xhdpi/spinner_qntm_am_alpha.9.png
new file mode 100644
index 0000000..79a260b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/spinner_qntm_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_off_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/switch_off_qntm_alpha.9.png
new file mode 100644
index 0000000..309b528
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/switch_off_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_on_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/switch_on_qntm_alpha.9.png
new file mode 100644
index 0000000..139795e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/switch_on_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/switch_track_qntm_alpha.9.png
new file mode 100644
index 0000000..4970f56
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/switch_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_indicator_normal_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/tab_indicator_normal_qntm_alpha.9.png
new file mode 100644
index 0000000..a677f9a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_indicator_normal_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/tab_indicator_selected_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/tab_indicator_selected_qntm_alpha.9.png
new file mode 100644
index 0000000..7de791d
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/tab_indicator_selected_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/text_cursor_qntm_alpha.9.png
new file mode 100644
index 0000000..3939214
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_cursor_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-xhdpi/text_select_handle_left_qntm_alpha.png
new file mode 100644
index 0000000..38b8e8b
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_select_handle_left_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-xhdpi/text_select_handle_middle_qntm_alpha.png
new file mode 100644
index 0000000..c1ca323
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_select_handle_middle_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-xhdpi/text_select_handle_right_qntm_alpha.png
new file mode 100644
index 0000000..d6002a7
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/text_select_handle_right_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..16c376a
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_default_qntm_alpha.9.png
new file mode 100644
index 0000000..e3bd904
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_search_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..1a2546f
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-xhdpi/textfield_search_default_qntm_alpha.9.png
new file mode 100644
index 0000000..500ec33
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/textfield_search_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ab_share_pack_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/ab_share_pack_qntm_alpha.9.png
new file mode 100644
index 0000000..469f736
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ab_share_pack_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm_alpha.9.png
new file mode 100644
index 0000000..e8a94dc
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ab_solid_shadow_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_cab_done_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/btn_cab_done_qntm_alpha.9.png
new file mode 100644
index 0000000..e1c55ad
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_cab_done_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_check_off_qntm_alpha.png
new file mode 100644
index 0000000..2a17861
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_check_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_check_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_check_on_qntm_alpha.png
new file mode 100644
index 0000000..61067ac
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_check_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png
new file mode 100644
index 0000000..7d29d18
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..fdbbbce
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_off_qntm_alpha.png
new file mode 100644
index 0000000..0ec2ee6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..b46ee1c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_radio_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_radio_on_qntm_alpha.png
new file mode 100644
index 0000000..8737156
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_radio_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_rating_star_off_qntm_alpha.png
new file mode 100644
index 0000000..4b49faf
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_rating_star_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_rating_star_on_qntm_alpha.png
new file mode 100644
index 0000000..561d9ef
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_rating_star_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png b/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png
new file mode 100644
index 0000000..7488ff9
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/btn_star_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png
new file mode 100644
index 0000000..e78fff6
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/expander_close_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png
new file mode 100644
index 0000000..a3d09657
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/expander_open_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png b/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png
new file mode 100644
index 0000000..55a73e7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/fastscroll_thumb_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png
new file mode 100644
index 0000000..be64a94
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/fastscroll_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png
new file mode 100644
index 0000000..ca15853
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_ab_back_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_alarm.png b/core/res/res/drawable-xxhdpi/ic_audio_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_alarm.png
rename to core/res/res/drawable-xxhdpi/ic_audio_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_alarm_mute.png b/core/res/res/drawable-xxhdpi/ic_audio_alarm_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_alarm_mute.png
rename to core/res/res/drawable-xxhdpi/ic_audio_alarm_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_bt.png b/core/res/res/drawable-xxhdpi/ic_audio_bt_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_bt.png
rename to core/res/res/drawable-xxhdpi/ic_audio_bt_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_bt_mute.png b/core/res/res/drawable-xxhdpi/ic_audio_bt_mute_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_bt_mute.png
rename to core/res/res/drawable-xxhdpi/ic_audio_bt_mute_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_notification_am.png b/core/res/res/drawable-xxhdpi/ic_audio_notification_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_notification_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_notification_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_notification_mute_am.png b/core/res/res/drawable-xxhdpi/ic_audio_notification_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_notification_mute_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_notification_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_phone_am.png b/core/res/res/drawable-xxhdpi/ic_audio_phone_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_phone_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_phone_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_ring_notif_am.png b/core/res/res/drawable-xxhdpi/ic_audio_ring_notif_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_ring_notif_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_ring_notif_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_ring_notif_mute_am.png b/core/res/res/drawable-xxhdpi/ic_audio_ring_notif_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_ring_notif_mute_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_ring_notif_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_ring_notif_vibrate_am.png b/core/res/res/drawable-xxhdpi/ic_audio_ring_notif_vibrate_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_ring_notif_vibrate_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_ring_notif_vibrate_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_vol_am.png b/core/res/res/drawable-xxhdpi/ic_audio_vol_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_vol_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_vol_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_audio_vol_mute_am.png b/core/res/res/drawable-xxhdpi/ic_audio_vol_mute_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_audio_vol_mute_am.png
rename to core/res/res/drawable-xxhdpi/ic_audio_vol_mute_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png
new file mode 100644
index 0000000..1f9c734
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_cab_done_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_clear_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_clear_qntm_alpha.png
new file mode 100644
index 0000000..21ed9144
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_clear_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_commit_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_commit_search_api_qntm_alpha.png
new file mode 100644
index 0000000..fc1b8b4
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_commit_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_corp_badge.png b/core/res/res/drawable-xxhdpi/ic_corp_badge.png
new file mode 100644
index 0000000..885e2ac
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_corp_badge.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png
new file mode 100644
index 0000000..10e0756
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_dialog_alert_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png
new file mode 100644
index 0000000..e3a7e9e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_find_next_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png
new file mode 100644
index 0000000..f9cf16c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_find_previous_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_go_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_go_search_api_qntm_alpha.png
new file mode 100644
index 0000000..8e1ab5b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_go_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_lock_airplane_mode.png b/core/res/res/drawable-xxhdpi/ic_lock_airplane_mode_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_lock_airplane_mode.png
rename to core/res/res/drawable-xxhdpi/ic_lock_airplane_mode_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_lock_airplane_mode_off_am.png b/core/res/res/drawable-xxhdpi/ic_lock_airplane_mode_off_am_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_lock_airplane_mode_off_am.png
rename to core/res/res/drawable-xxhdpi/ic_lock_airplane_mode_off_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_lock_bugreport_alpha.png b/core/res/res/drawable-xxhdpi/ic_lock_bugreport_alpha.png
new file mode 100644
index 0000000..d6018dd
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_lock_bugreport_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_lock_idle_alarm.png b/core/res/res/drawable-xxhdpi/ic_lock_idle_alarm_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_lock_idle_alarm.png
rename to core/res/res/drawable-xxhdpi/ic_lock_idle_alarm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_lock_lock.png b/core/res/res/drawable-xxhdpi/ic_lock_lock_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_lock_lock.png
rename to core/res/res/drawable-xxhdpi/ic_lock_lock_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_lock_power_off.png b/core/res/res/drawable-xxhdpi/ic_lock_power_off_alpha.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_lock_power_off.png
rename to core/res/res/drawable-xxhdpi/ic_lock_power_off_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_disabled_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_disabled_qntm_alpha.png
new file mode 100644
index 0000000..6fad4a64
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_disabled_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_off_qntm_alpha.png
new file mode 100644
index 0000000..44d98d5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_0_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_0_qntm_alpha.png
new file mode 100644
index 0000000..c807b50
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_0_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_1_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_1_qntm_alpha.png
new file mode 100644
index 0000000..d54f44a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_1_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_2_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_2_qntm_alpha.png
new file mode 100644
index 0000000..17c1d99
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_2_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_media_route_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_media_route_on_qntm_alpha.png
new file mode 100644
index 0000000..906401e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_media_route_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png
new file mode 100644
index 0000000..7c3a58b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_copy_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png
new file mode 100644
index 0000000..2200642
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_cut_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png
new file mode 100644
index 0000000..d35b337
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_find_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png
new file mode 100644
index 0000000..ff1759b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_moreoverflow_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png
new file mode 100644
index 0000000..28c0ae0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_paste_qntm_am_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png
new file mode 100644
index 0000000..cb295a3
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_search_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png
new file mode 100644
index 0000000..6430d45
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_selectall_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png
new file mode 100644
index 0000000..66f7d16
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_menu_share_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_search_api_holo_dark.png b/core/res/res/drawable-xxhdpi/ic_search_api_holo_dark.png
new file mode 100644
index 0000000..eb30465
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_search_api_holo_light.png b/core/res/res/drawable-xxhdpi/ic_search_api_holo_light.png
new file mode 100644
index 0000000..bc14415
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_search_api_qntm_alpha.png
new file mode 100644
index 0000000..81b13aa
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_voice_search_api_holo_dark.png b/core/res/res/drawable-xxhdpi/ic_voice_search_api_holo_dark.png
new file mode 100644
index 0000000..813048c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_voice_search_api_holo_dark.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_voice_search_api_holo_light.png b/core/res/res/drawable-xxhdpi/ic_voice_search_api_holo_light.png
new file mode 100644
index 0000000..8addde0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_voice_search_api_holo_light.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_voice_search_api_qntm_alpha.png b/core/res/res/drawable-xxhdpi/ic_voice_search_api_qntm_alpha.png
new file mode 100644
index 0000000..d95f1d0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/ic_voice_search_api_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..0fafd1a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/list_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png
new file mode 100644
index 0000000..491fab9
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/list_section_divider_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..2d4eb3f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/progress_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png
new file mode 100644
index 0000000..74a259b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/progress_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png
new file mode 100644
index 0000000..c1c0622
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrollbar_handle_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png
new file mode 100644
index 0000000..0319bd8
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_off_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png
new file mode 100644
index 0000000..c11b0ae
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_off_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png
new file mode 100644
index 0000000..b46ee1c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_on_pressed_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png b/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png
new file mode 100644
index 0000000..cde797e
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_control_on_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png
new file mode 100644
index 0000000..6a82af5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_primary_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/scrubber_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/scrubber_track_qntm_alpha.9.png
new file mode 100644
index 0000000..c3791fc
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/scrubber_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png b/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png
new file mode 100644
index 0000000..b8c78b5
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/spinner_qntm_am_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_off_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/switch_off_qntm_alpha.9.png
new file mode 100644
index 0000000..9e234af
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/switch_off_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_on_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/switch_on_qntm_alpha.9.png
new file mode 100644
index 0000000..b371eab
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/switch_on_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png
new file mode 100644
index 0000000..74a259b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/switch_track_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/tab_indicator_normal_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/tab_indicator_normal_qntm_alpha.9.png
new file mode 100644
index 0000000..0a14025
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/tab_indicator_normal_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/tab_indicator_selected_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/tab_indicator_selected_qntm_alpha.9.png
new file mode 100644
index 0000000..20e291a
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/tab_indicator_selected_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png
new file mode 100644
index 0000000..432c385
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/text_cursor_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_select_handle_left_qntm_alpha.png b/core/res/res/drawable-xxhdpi/text_select_handle_left_qntm_alpha.png
new file mode 100644
index 0000000..93469a2
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/text_select_handle_left_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_select_handle_middle_qntm_alpha.png b/core/res/res/drawable-xxhdpi/text_select_handle_middle_qntm_alpha.png
new file mode 100644
index 0000000..5753d89
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/text_select_handle_middle_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/text_select_handle_right_qntm_alpha.png b/core/res/res/drawable-xxhdpi/text_select_handle_right_qntm_alpha.png
new file mode 100644
index 0000000..b3493e7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/text_select_handle_right_qntm_alpha.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..a22f352
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/textfield_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png
new file mode 100644
index 0000000..b0504e0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/textfield_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_search_activated_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_search_activated_qntm_alpha.9.png
new file mode 100644
index 0000000..cd5b00f
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/textfield_search_activated_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/textfield_search_default_qntm_alpha.9.png b/core/res/res/drawable-xxhdpi/textfield_search_default_qntm_alpha.9.png
new file mode 100644
index 0000000..5ee867c
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/textfield_search_default_qntm_alpha.9.png
Binary files differ
diff --git a/core/res/res/drawable/ab_share_pack_quantum.xml b/core/res/res/drawable/ab_share_pack_quantum.xml
new file mode 100644
index 0000000..7d33ff4d
--- /dev/null
+++ b/core/res/res/drawable/ab_share_pack_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ab_share_pack_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ab_solid_shadow_quantum.xml b/core/res/res/drawable/ab_solid_shadow_quantum.xml
new file mode 100644
index 0000000..88e142a
--- /dev/null
+++ b/core/res/res/drawable/ab_solid_shadow_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ab_solid_shadow_qntm_alpha"
+    android:tint="@color/black" />
diff --git a/core/res/res/drawable/activated_background_quantum.xml b/core/res/res/drawable/activated_background_quantum.xml
new file mode 100644
index 0000000..e06c9f2
--- /dev/null
+++ b/core/res/res/drawable/activated_background_quantum.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_activated="true">
+        <color android:color="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <color android:color="@color/transparent" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/btn_borderless_quantum.xml b/core/res/res/drawable/btn_borderless_quantum.xml
new file mode 100644
index 0000000..2e3c515
--- /dev/null
+++ b/core/res/res/drawable/btn_borderless_quantum.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="?attr/colorButtonPressed">
+    <item android:id="@id/mask"
+        android:drawable="@drawable/btn_qntm_alpha" />
+</touch-feedback>
diff --git a/core/res/res/drawable/btn_cab_done_quantum.xml b/core/res/res/drawable/btn_cab_done_quantum.xml
new file mode 100644
index 0000000..c03ab0a
--- /dev/null
+++ b/core/res/res/drawable/btn_cab_done_quantum.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:autoMirrored="true">
+    <item android:state_pressed="true">
+        <color android:color="?attr/colorButtonPressed" />
+    </item>
+    <item android:state_focused="true" android:state_enabled="true">
+        <nine-patch android:src="@drawable/btn_cab_done_qntm_alpha"
+            android:tint="?attr/colorButtonPressed" />
+    </item>
+    <item android:state_enabled="true">
+        <nine-patch android:src="@drawable/btn_cab_done_qntm_alpha"
+            android:tint="?attr/colorButtonNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/btn_check_quantum.xml b/core/res/res/drawable/btn_check_quantum.xml
new file mode 100644
index 0000000..6ceba60
--- /dev/null
+++ b/core/res/res/drawable/btn_check_quantum.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true" android:state_pressed="true">
+        <bitmap android:src="@drawable/btn_check_on_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_checked="true">
+        <bitmap android:src="@drawable/btn_check_on_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_pressed="true">
+        <bitmap android:src="@drawable/btn_check_off_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <bitmap android:src="@drawable/btn_check_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/btn_check_quantum_anim.xml b/core/res/res/drawable/btn_check_quantum_anim.xml
new file mode 100644
index 0000000..0600522
--- /dev/null
+++ b/core/res/res/drawable/btn_check_quantum_anim.xml
@@ -0,0 +1,79 @@
+<!-- Copyright (C) 2014 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.
+-->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:trigger="state_checked"
+    android:versionCode="1" >
+
+    <size
+        android:height="32dp"
+        android:width="32dp" />
+
+    <viewport
+        android:viewportHeight="320"
+        android:viewportWidth="320" />
+
+    <group>
+        <path
+            android:name="box1"
+            android:pathData="M 240,80 L 240,240 L 80,240 L 80,80 L 240,80 L 240,80 z"
+            android:stroke="?attr/colorControlNormal"
+            android:strokeWidth="20"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+    <group>
+        <path
+            android:name="box2"
+            android:pathData="M 160,200 L 160,240 L 120,240 L 120,200 L 160,200 L 160,200 z"
+            android:stroke="?attr/colorControlNormal"
+            android:strokeWidth="10"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+    <group>
+        <path
+            android:name="box3"
+            android:pathData="M 160,216.5 L 143.5,240 L 120,223.5 L 136.5,200 L 160,216.5 L 160,216.5 z"
+            android:rotation="35"
+            android:pivotX="140"
+            android:pivotY="220"
+            android:fill="?attr/colorControlNormal"
+            android:stroke="?attr/colorControlNormal"
+            android:strokeWidth="5"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+    <group>
+        <path
+            android:name="box4"
+            android:pathData="M 160,216.5 L 143.5,240 L 120,223.5 L 136.5,200 L 160,216.5 L 160,216.5 z"
+            android:fill="?attr/colorControlActivated"
+            android:stroke="?attr/colorControlActivated"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+    <group>
+        <path
+            android:name="check"
+            android:pathData="M 232.1,80.6 L 248.5,92.1 L 145.2,239.5 L 71.5,187.8 L 83,171.5 L 140.3,211.7 z"
+            android:fill="?attr/colorControlActivated" />
+    </group>
+
+    <animation
+        android:durations="300,100,0,300"
+        android:sequence="box1,box2,box3,box4,check" />
+
+</vector>
diff --git a/core/res/res/drawable/btn_color_quantum.xml b/core/res/res/drawable/btn_color_quantum.xml
new file mode 100644
index 0000000..2da9226
--- /dev/null
+++ b/core/res/res/drawable/btn_color_quantum.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="?attr/colorButtonPressedColored">
+    <selector>
+        <item android:state_enabled="false">
+            <nine-patch android:src="@drawable/btn_qntm_alpha"
+                android:tint="?attr/colorButtonNormal"
+                android:alpha="?attr/disabledAlpha" />
+        </item>
+        <item>
+            <nine-patch android:src="@drawable/btn_qntm_alpha"
+                android:tint="?attr/colorButtonNormalColored" />
+        </item>
+    </selector>
+</touch-feedback>
diff --git a/core/res/res/drawable/btn_default_quantum.xml b/core/res/res/drawable/btn_default_quantum.xml
new file mode 100644
index 0000000..c6a3a33
--- /dev/null
+++ b/core/res/res/drawable/btn_default_quantum.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="?attr/colorButtonPressed">
+    <item>
+        <selector>
+            <item android:state_enabled="false">
+                <nine-patch
+                    android:src="@drawable/btn_qntm_alpha"
+                    android:tint="?attr/colorButtonNormal"
+                    android:alpha="?attr/disabledAlpha" />
+            </item>
+            <item>
+                <nine-patch
+                    android:src="@drawable/btn_qntm_alpha"
+                    android:tint="?attr/colorButtonNormal" />
+            </item>
+        </selector>
+    </item>
+</touch-feedback>
diff --git a/core/res/res/drawable/btn_radio_quantum.xml b/core/res/res/drawable/btn_radio_quantum.xml
new file mode 100644
index 0000000..0f9ebce
--- /dev/null
+++ b/core/res/res/drawable/btn_radio_quantum.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false" android:state_checked="true">
+        <bitmap android:src="@drawable/btn_radio_on_qntm_alpha"
+            android:tint="?attr/colorControlNormal"
+            android:alpha="?attr/disabledAlpha" />
+    </item>
+    <item android:state_enabled="false">
+        <bitmap android:src="@drawable/btn_radio_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal"
+            android:alpha="?attr/disabledAlpha" />
+    </item>
+    <item android:state_checked="true">
+        <bitmap android:src="@drawable/btn_radio_on_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <bitmap android:src="@drawable/btn_radio_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/btn_star_quantum.xml b/core/res/res/drawable/btn_star_quantum.xml
new file mode 100644
index 0000000..512cd57
--- /dev/null
+++ b/core/res/res/drawable/btn_star_quantum.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true">
+        <bitmap android:src="@drawable/btn_star_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_pressed="true">
+        <bitmap android:src="@drawable/btn_star_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <bitmap android:src="@drawable/btn_star_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/dialog_background_quantum.xml b/core/res/res/drawable/dialog_background_quantum.xml
new file mode 100644
index 0000000..7e5b003
--- /dev/null
+++ b/core/res/res/drawable/dialog_background_quantum.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+
+    <corners
+        android:radius="2dp" />
+    <solid
+        android:color="?attr/colorBackground" />
+
+</shape>
diff --git a/core/res/res/drawable/edit_text_quantum.xml b/core/res/res/drawable/edit_text_quantum.xml
new file mode 100644
index 0000000..c42c7b7
--- /dev/null
+++ b/core/res/res/drawable/edit_text_quantum.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="?attr/colorControlActivated">
+    <item>
+        <selector>
+            <item android:state_window_focused="false">
+                <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+                    android:tint="?attr/colorControlNormal" />
+            </item>
+            <item android:state_enabled="false">
+                <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+                    android:tint="?attr/colorControlNormal" />
+            </item>
+            <item android:state_focused="false" android:state_activated="false">
+                <nine-patch android:src="@drawable/textfield_default_qntm_alpha"
+                    android:tint="?attr/colorControlNormal" />
+            </item>
+            <item>
+                <nine-patch android:src="@drawable/textfield_activated_qntm_alpha"
+                    android:tint="?attr/colorControlNormal" />
+            </item>
+        </selector>
+    </item>
+</touch-feedback>
diff --git a/core/res/res/drawable/expander_group_quantum.xml b/core/res/res/drawable/expander_group_quantum.xml
new file mode 100644
index 0000000..48245ea
--- /dev/null
+++ b/core/res/res/drawable/expander_group_quantum.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_expanded="true">
+        <nine-patch android:src="@drawable/expander_close_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item>
+        <nine-patch android:src="@drawable/expander_open_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/fastscroll_thumb_quantum.xml b/core/res/res/drawable/fastscroll_thumb_quantum.xml
new file mode 100644
index 0000000..496b2ae
--- /dev/null
+++ b/core/res/res/drawable/fastscroll_thumb_quantum.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true">
+        <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <bitmap android:src="@drawable/fastscroll_thumb_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/fastscroll_track_quantum.xml b/core/res/res/drawable/fastscroll_track_quantum.xml
new file mode 100644
index 0000000..59c35db
--- /dev/null
+++ b/core/res/res/drawable/fastscroll_track_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/fastscroll_track_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_ab_back_quantum.xml b/core/res/res/drawable/ic_ab_back_quantum.xml
new file mode 100644
index 0000000..65c7584
--- /dev/null
+++ b/core/res/res/drawable/ic_ab_back_quantum.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_ab_back_qntm_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_alarm.xml b/core/res/res/drawable/ic_audio_alarm.xml
new file mode 100644
index 0000000..d3e5470
--- /dev/null
+++ b/core/res/res/drawable/ic_audio_alarm.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_audio_alarm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_alarm_mute.xml b/core/res/res/drawable/ic_audio_alarm_mute.xml
new file mode 100644
index 0000000..7d85872
--- /dev/null
+++ b/core/res/res/drawable/ic_audio_alarm_mute.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_audio_alarm_mute_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_bt.xml b/core/res/res/drawable/ic_audio_bt.xml
new file mode 100644
index 0000000..4f5af3d
--- /dev/null
+++ b/core/res/res/drawable/ic_audio_bt.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_audio_bt_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_bt_mute.xml b/core/res/res/drawable/ic_audio_bt_mute.xml
new file mode 100644
index 0000000..d2004c0
--- /dev/null
+++ b/core/res/res/drawable/ic_audio_bt_mute.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_audio_bt_mute_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_notification.xml b/core/res/res/drawable/ic_audio_notification.xml
index b87e4c8..65249f5 100644
--- a/core/res/res/drawable/ic_audio_notification.xml
+++ b/core/res/res/drawable/ic_audio_notification.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_notification_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_notification_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_notification_mute.xml b/core/res/res/drawable/ic_audio_notification_mute.xml
index 1caf27c..af6a8e0 100644
--- a/core/res/res/drawable/ic_audio_notification_mute.xml
+++ b/core/res/res/drawable/ic_audio_notification_mute.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_notification_mute_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_notification_mute_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_phone.xml b/core/res/res/drawable/ic_audio_phone.xml
index e6869fd..1bab863 100644
--- a/core/res/res/drawable/ic_audio_phone.xml
+++ b/core/res/res/drawable/ic_audio_phone.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_phone_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_phone_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_ring_notif.xml b/core/res/res/drawable/ic_audio_ring_notif.xml
index 2f48741..247d1b4 100644
--- a/core/res/res/drawable/ic_audio_ring_notif.xml
+++ b/core/res/res/drawable/ic_audio_ring_notif.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_ring_notif_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_ring_notif_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_ring_notif_mute.xml b/core/res/res/drawable/ic_audio_ring_notif_mute.xml
index 7549f6d..72aaa9d 100644
--- a/core/res/res/drawable/ic_audio_ring_notif_mute.xml
+++ b/core/res/res/drawable/ic_audio_ring_notif_mute.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_ring_notif_mute_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_ring_notif_mute_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_ring_notif_vibrate.xml b/core/res/res/drawable/ic_audio_ring_notif_vibrate.xml
index 3481e27..9e31aba 100644
--- a/core/res/res/drawable/ic_audio_ring_notif_vibrate.xml
+++ b/core/res/res/drawable/ic_audio_ring_notif_vibrate.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_ring_notif_vibrate_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_ring_notif_vibrate_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_vol.xml b/core/res/res/drawable/ic_audio_vol.xml
index 6dd249b..8d07ded 100644
--- a/core/res/res/drawable/ic_audio_vol.xml
+++ b/core/res/res/drawable/ic_audio_vol.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_vol_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_vol_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_audio_vol_mute.xml b/core/res/res/drawable/ic_audio_vol_mute.xml
index b093f59..edbdb23 100644
--- a/core/res/res/drawable/ic_audio_vol_mute.xml
+++ b/core/res/res/drawable/ic_audio_vol_mute.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_audio_vol_mute_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_audio_vol_mute_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_cab_done_quantum.xml b/core/res/res/drawable/ic_cab_done_quantum.xml
new file mode 100644
index 0000000..97495a8
--- /dev/null
+++ b/core/res/res/drawable/ic_cab_done_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_cab_done_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_clear_quantum.xml b/core/res/res/drawable/ic_clear_quantum.xml
new file mode 100644
index 0000000..02f0929
--- /dev/null
+++ b/core/res/res/drawable/ic_clear_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_clear_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_commit_search_api_quantum.xml b/core/res/res/drawable/ic_commit_search_api_quantum.xml
new file mode 100644
index 0000000..02d08b9
--- /dev/null
+++ b/core/res/res/drawable/ic_commit_search_api_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_commit_search_api_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_dialog_alert_quantum.xml b/core/res/res/drawable/ic_dialog_alert_quantum.xml
new file mode 100644
index 0000000..05f3630
--- /dev/null
+++ b/core/res/res/drawable/ic_dialog_alert_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_dialog_alert_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_find_next_quantum.xml b/core/res/res/drawable/ic_find_next_quantum.xml
new file mode 100644
index 0000000..fee196c
--- /dev/null
+++ b/core/res/res/drawable/ic_find_next_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_find_next_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_find_previous_quantum.xml b/core/res/res/drawable/ic_find_previous_quantum.xml
new file mode 100644
index 0000000..28f887a
--- /dev/null
+++ b/core/res/res/drawable/ic_find_previous_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_find_previous_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_go_search_api_quantum.xml b/core/res/res/drawable/ic_go_search_api_quantum.xml
new file mode 100644
index 0000000..b5b5cfb
--- /dev/null
+++ b/core/res/res/drawable/ic_go_search_api_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_go_search_api_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_lock_airplane_mode.xml b/core/res/res/drawable/ic_lock_airplane_mode.xml
new file mode 100644
index 0000000..4a16922
--- /dev/null
+++ b/core/res/res/drawable/ic_lock_airplane_mode.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_lock_airplane_mode_alpha"
+    android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/ic_lock_airplane_mode_off.xml b/core/res/res/drawable/ic_lock_airplane_mode_off.xml
index b344e28..a8cd390 100644
--- a/core/res/res/drawable/ic_lock_airplane_mode_off.xml
+++ b/core/res/res/drawable/ic_lock_airplane_mode_off.xml
@@ -18,6 +18,6 @@
 -->
 
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-        android:src="@drawable/ic_lock_airplane_mode_off_am"
-        android:autoMirrored="true">
-</bitmap>
+    android:src="@drawable/ic_lock_airplane_mode_off_am_alpha"
+    android:autoMirrored="true"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_lock_bugreport.xml b/core/res/res/drawable/ic_lock_bugreport.xml
new file mode 100644
index 0000000..a3f82ce
--- /dev/null
+++ b/core/res/res/drawable/ic_lock_bugreport.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_lock_bugreport_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_lock_idle_alarm.xml b/core/res/res/drawable/ic_lock_idle_alarm.xml
new file mode 100644
index 0000000..e8189bd
--- /dev/null
+++ b/core/res/res/drawable/ic_lock_idle_alarm.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_lock_idle_alarm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_lock_lock.xml b/core/res/res/drawable/ic_lock_lock.xml
new file mode 100644
index 0000000..39f268a
--- /dev/null
+++ b/core/res/res/drawable/ic_lock_lock.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_lock_lock_alpha"
+    android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/ic_lock_power_off.xml b/core/res/res/drawable/ic_lock_power_off.xml
new file mode 100644
index 0000000..718f17e
--- /dev/null
+++ b/core/res/res/drawable/ic_lock_power_off.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_lock_power_off_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_media_route_connecting_quantum.xml b/core/res/res/drawable/ic_media_route_connecting_quantum.xml
new file mode 100644
index 0000000..0029dd4
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_connecting_quantum.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
+    android:oneshot="false">
+    <item android:duration="500">
+        <bitmap android:src="@drawable/ic_media_route_on_0_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item android:duration="500">
+        <bitmap android:src="@drawable/ic_media_route_on_1_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item android:duration="500">
+        <bitmap android:src="@drawable/ic_media_route_on_2_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item android:duration="500">
+        <bitmap android:src="@drawable/ic_media_route_on_1_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</animation-list>
diff --git a/core/res/res/drawable/ic_media_route_quantum.xml b/core/res/res/drawable/ic_media_route_quantum.xml
new file mode 100644
index 0000000..16b63d4
--- /dev/null
+++ b/core/res/res/drawable/ic_media_route_quantum.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true" android:state_enabled="true"
+        android:drawable="@android:drawable/ic_media_route_connecting_quantum" />
+    <item android:state_activated="true" android:state_enabled="true">
+        <bitmap android:src="@android:drawable/ic_media_route_on_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item android:state_enabled="true">
+        <bitmap android:src="@android:drawable/ic_media_route_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item>
+        <bitmap android:src="@android:drawable/ic_media_route_disabled_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/ic_menu_copy_quantum.xml b/core/res/res/drawable/ic_menu_copy_quantum.xml
new file mode 100644
index 0000000..5f6ce51
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_copy_quantum.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_copy_qntm_am_alpha"
+    android:tint="?attr/colorControlNormal"
+    android:autoMirrored="true" />
diff --git a/core/res/res/drawable/ic_menu_cut_quantum.xml b/core/res/res/drawable/ic_menu_cut_quantum.xml
new file mode 100644
index 0000000..1e4996e
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_cut_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_cut_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_find_quantum.xml b/core/res/res/drawable/ic_menu_find_quantum.xml
new file mode 100644
index 0000000..a69c673
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_find_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_find_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_moreoverflow_quantum.xml b/core/res/res/drawable/ic_menu_moreoverflow_quantum.xml
new file mode 100644
index 0000000..7d3fcac
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_moreoverflow_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_moreoverflow_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_paste_quantum.xml b/core/res/res/drawable/ic_menu_paste_quantum.xml
new file mode 100644
index 0000000..f590904
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_paste_quantum.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_paste_qntm_am_alpha"
+    android:tint="?attr/colorControlNormal"
+    android:autoMirrored="true" />
diff --git a/core/res/res/drawable/ic_menu_search_quantum.xml b/core/res/res/drawable/ic_menu_search_quantum.xml
new file mode 100644
index 0000000..2ca8c20
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_search_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_search_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_selectall_quantum.xml b/core/res/res/drawable/ic_menu_selectall_quantum.xml
new file mode 100644
index 0000000..fd72ebf
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_selectall_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_selectall_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_menu_share_quantum.xml b/core/res/res/drawable/ic_menu_share_quantum.xml
new file mode 100644
index 0000000..f44e06c
--- /dev/null
+++ b/core/res/res/drawable/ic_menu_share_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_menu_share_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_search_api_quantum.xml b/core/res/res/drawable/ic_search_api_quantum.xml
new file mode 100644
index 0000000..2bbc294
--- /dev/null
+++ b/core/res/res/drawable/ic_search_api_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_search_api_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/ic_voice_search_api_quantum.xml b/core/res/res/drawable/ic_voice_search_api_quantum.xml
new file mode 100644
index 0000000..ddb14ef
--- /dev/null
+++ b/core/res/res/drawable/ic_voice_search_api_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_voice_search_api_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/item_background_quantum.xml b/core/res/res/drawable/item_background_quantum.xml
new file mode 100644
index 0000000..11e1f67
--- /dev/null
+++ b/core/res/res/drawable/item_background_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="?attr/colorButtonPressed"
+    android:pinned="true" />
diff --git a/core/res/res/drawable/list_divider_quantum.xml b/core/res/res/drawable/list_divider_quantum.xml
new file mode 100644
index 0000000..e3d4ba2
--- /dev/null
+++ b/core/res/res/drawable/list_divider_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/list_divider_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/list_section_divider_quantum.xml b/core/res/res/drawable/list_section_divider_quantum.xml
new file mode 100644
index 0000000..87a1439
--- /dev/null
+++ b/core/res/res/drawable/list_section_divider_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/list_section_divider_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/list_selector_quantum.xml b/core/res/res/drawable/list_selector_quantum.xml
new file mode 100644
index 0000000..c007117
--- /dev/null
+++ b/core/res/res/drawable/list_selector_quantum.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<touch-feedback xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="?attr/colorButtonPressed">
+    <item android:id="@id/mask">
+        <color android:color="@color/white" />
+    </item>
+</touch-feedback>
diff --git a/core/res/res/drawable/notification_bg_dim.xml b/core/res/res/drawable/notification_bg_dim.xml
new file mode 100644
index 0000000..ec20368
--- /dev/null
+++ b/core/res/res/drawable/notification_bg_dim.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<touch-feedback
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="#ff444444"
+    >
+    <item android:drawable="@drawable/notification_bg_normal" />
+</touch-feedback>
\ No newline at end of file
diff --git a/core/res/res/drawable/notification_icon_legacy_bg.xml b/core/res/res/drawable/notification_icon_legacy_bg.xml
new file mode 100644
index 0000000..4ac67c3
--- /dev/null
+++ b/core/res/res/drawable/notification_icon_legacy_bg.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="oval">
+    <solid
+            android:color="@color/notification_icon_legacy_bg_color"/>
+</shape>
diff --git a/core/res/res/drawable/notification_icon_legacy_bg_inset.xml b/core/res/res/drawable/notification_icon_legacy_bg_inset.xml
new file mode 100644
index 0000000..96c5573
--- /dev/null
+++ b/core/res/res/drawable/notification_icon_legacy_bg_inset.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<inset xmlns:android="http://schemas.android.com/apk/res/android"
+       android:drawable="@drawable/notification_icon_legacy_bg" android:insetBottom="8dp"
+       android:insetLeft="8dp" android:insetRight="8dp" android:insetTop="8dp"
+       android:visible="true"/>
diff --git a/core/res/res/drawable/notification_quantum_bg.xml b/core/res/res/drawable/notification_quantum_bg.xml
new file mode 100644
index 0000000..300a565
--- /dev/null
+++ b/core/res/res/drawable/notification_quantum_bg.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true">
+        <shape>
+            <solid android:color="#ffd0d0d0" />
+            <corners android:radius="@dimen/notification_quantum_rounded_rect_radius" />
+        </shape>
+    </item>
+    <item>
+        <shape>
+            <solid android:color="#fffafafa" />
+            <corners android:radius="@dimen/notification_quantum_rounded_rect_radius" />
+        </shape>
+    </item>
+</selector>
\ No newline at end of file
diff --git a/core/res/res/drawable/notification_quantum_bg_dim.xml b/core/res/res/drawable/notification_quantum_bg_dim.xml
new file mode 100644
index 0000000..ab0e049
--- /dev/null
+++ b/core/res/res/drawable/notification_quantum_bg_dim.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<touch-feedback
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:tint="#ffffffff"
+    android:tintMode="src_over"
+    >
+    <item>
+        <shape>
+            <solid android:color="#d4ffffff" />
+            <corners android:radius="@dimen/notification_quantum_rounded_rect_radius" />
+        </shape>
+    </item>
+</touch-feedback>
\ No newline at end of file
diff --git a/core/res/res/drawable/notify_panel_notification_icon_bg_tile.xml b/core/res/res/drawable/notify_panel_notification_icon_bg_tile.xml
deleted file mode 100644
index fa3c398..0000000
--- a/core/res/res/drawable/notify_panel_notification_icon_bg_tile.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<bitmap
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:tileMode="repeat"
-    android:src="@android:drawable/notify_panel_notification_icon_bg"
-    />
diff --git a/core/res/res/drawable/progress_horizontal_quantum.xml b/core/res/res/drawable/progress_horizontal_quantum.xml
new file mode 100644
index 0000000..1c2d494
--- /dev/null
+++ b/core/res/res/drawable/progress_horizontal_quantum.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@id/background">
+        <nine-patch android:src="@drawable/progress_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item android:id="@id/secondaryProgress">
+        <scale android:scaleWidth="100%">
+            <nine-patch android:src="@drawable/progress_qntm_alpha"
+                android:tint="?attr/colorControlActivated" />
+        </scale>
+    </item>
+    <item android:id="@id/progress">
+        <scale android:scaleWidth="100%">
+            <nine-patch android:src="@drawable/progress_primary_qntm_alpha"
+                android:tint="?attr/colorControlActivated" />
+        </scale>
+    </item>
+</layer-list>
diff --git a/core/res/res/drawable/ratingbar_full_empty_quantum.xml b/core/res/res/drawable/ratingbar_full_empty_quantum.xml
new file mode 100644
index 0000000..e5e4315
--- /dev/null
+++ b/core/res/res/drawable/ratingbar_full_empty_quantum.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true">
+        <bitmap android:src="@drawable/btn_rating_star_off_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <bitmap android:src="@drawable/btn_rating_star_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/ratingbar_full_filled_quantum.xml b/core/res/res/drawable/ratingbar_full_filled_quantum.xml
new file mode 100644
index 0000000..ad3aa5d
--- /dev/null
+++ b/core/res/res/drawable/ratingbar_full_filled_quantum.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_pressed="true">
+        <bitmap android:src="@drawable/btn_rating_star_on_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <bitmap android:src="@drawable/btn_rating_star_on_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/ratingbar_full_quantum.xml b/core/res/res/drawable/ratingbar_full_quantum.xml
new file mode 100644
index 0000000..143e7c2
--- /dev/null
+++ b/core/res/res/drawable/ratingbar_full_quantum.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:id="@id/background"
+        android:drawable="@drawable/ratingbar_full_empty_quantum" />
+    <item android:id="@id/secondaryProgress"
+        android:drawable="@drawable/ratingbar_full_empty_quantum" />
+    <item android:id="@id/progress" 
+        android:drawable="@drawable/ratingbar_full_filled_quantum" />
+</layer-list>
diff --git a/core/res/res/drawable/scrollbar_handle_quantum.xml b/core/res/res/drawable/scrollbar_handle_quantum.xml
new file mode 100644
index 0000000..f2de252
--- /dev/null
+++ b/core/res/res/drawable/scrollbar_handle_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/scrollbar_handle_qntm_alpha"
+    android:tint="?attr/colorControlNormal" />
diff --git a/core/res/res/drawable/scrubber_control_selector_quantum.xml b/core/res/res/drawable/scrubber_control_selector_quantum.xml
new file mode 100644
index 0000000..ef3af0c
--- /dev/null
+++ b/core/res/res/drawable/scrubber_control_selector_quantum.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false">
+        <bitmap android:src="@drawable/scrubber_control_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item>
+        <bitmap android:src="@drawable/scrubber_control_on_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/scrubber_progress_horizontal_quantum.xml b/core/res/res/drawable/scrubber_progress_horizontal_quantum.xml
new file mode 100644
index 0000000..d172b05
--- /dev/null
+++ b/core/res/res/drawable/scrubber_progress_horizontal_quantum.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false">
+        <bitmap android:src="@drawable/scrubber_track_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item>
+        <layer-list>
+            <item android:id="@id/background">
+                <bitmap android:src="@drawable/scrubber_track_qntm_alpha"
+                    android:tint="?attr/colorControlNormal" />
+            </item>
+            <item android:id="@id/secondaryProgress">
+                <bitmap android:src="@drawable/scrubber_primary_qntm_alpha"
+                    android:tint="?attr/colorControlNormal" />
+            </item>
+            <item android:id="@id/progress">
+                <bitmap android:src="@drawable/scrubber_primary_qntm_alpha"
+                    android:tint="?attr/colorControlActivated" />
+            </item>
+        </layer-list>
+    </item>
+</selector>
diff --git a/core/res/res/drawable/spinner_background_quantum.xml b/core/res/res/drawable/spinner_background_quantum.xml
new file mode 100644
index 0000000..727a78f
--- /dev/null
+++ b/core/res/res/drawable/spinner_background_quantum.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:autoMirrored="true">
+    <item android:state_checked="true">
+        <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_pressed="true">
+        <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <nine-patch android:src="@drawable/spinner_qntm_am_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/switch_inner_quantum.xml b/core/res/res/drawable/switch_inner_quantum.xml
new file mode 100644
index 0000000..856895e
--- /dev/null
+++ b/core/res/res/drawable/switch_inner_quantum.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false" android:state_checked="true">
+        <nine-patch android:src="@drawable/switch_on_qntm_alpha"
+            android:tint="?attr/colorControlNormal"
+            android:alpha="?attr/disabledAlpha" />
+    </item>
+    <item android:state_enabled="false">
+        <nine-patch android:src="@drawable/switch_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal"
+            android:alpha="?attr/disabledAlpha" />
+    </item>
+    <item android:state_checked="true">
+        <nine-patch android:src="@drawable/switch_on_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <nine-patch android:src="@drawable/switch_off_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/switch_track_quantum.xml b/core/res/res/drawable/switch_track_quantum.xml
new file mode 100644
index 0000000..8c4e6b71
--- /dev/null
+++ b/core/res/res/drawable/switch_track_quantum.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_checked="true">
+        <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <nine-patch android:src="@drawable/switch_track_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/tab_indicator_quantum.xml b/core/res/res/drawable/tab_indicator_quantum.xml
new file mode 100644
index 0000000..6fabe23
--- /dev/null
+++ b/core/res/res/drawable/tab_indicator_quantum.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_selected="true" android:state_pressed="true">
+        <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_selected="true" android:state_focused="true">
+        <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_selected="true">
+        <nine-patch android:src="@drawable/tab_indicator_selected_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+
+    <item android:state_pressed="true">
+        <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_focused="true">
+        <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item>
+        <nine-patch android:src="@drawable/tab_indicator_normal_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/drawable/text_cursor_quantum.xml b/core/res/res/drawable/text_cursor_quantum.xml
new file mode 100644
index 0000000..23d4ae0
--- /dev/null
+++ b/core/res/res/drawable/text_cursor_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/text_cursor_qntm_alpha"
+    android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/text_select_handle_left_quantum.xml b/core/res/res/drawable/text_select_handle_left_quantum.xml
new file mode 100644
index 0000000..a0ad7cf
--- /dev/null
+++ b/core/res/res/drawable/text_select_handle_left_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/text_select_handle_left_qntm_alpha"
+    android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/text_select_handle_middle_quantum.xml b/core/res/res/drawable/text_select_handle_middle_quantum.xml
new file mode 100644
index 0000000..bff0b66
--- /dev/null
+++ b/core/res/res/drawable/text_select_handle_middle_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/text_select_handle_middle_qntm_alpha"
+    android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/text_select_handle_right_quantum.xml b/core/res/res/drawable/text_select_handle_right_quantum.xml
new file mode 100644
index 0000000..413661f
--- /dev/null
+++ b/core/res/res/drawable/text_select_handle_right_quantum.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/text_select_handle_right_qntm_alpha"
+    android:tint="?attr/colorControlActivated" />
diff --git a/core/res/res/drawable/textfield_search_quantum.xml b/core/res/res/drawable/textfield_search_quantum.xml
new file mode 100644
index 0000000..877de46
--- /dev/null
+++ b/core/res/res/drawable/textfield_search_quantum.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_window_focused="false" android:state_enabled="true">
+        <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item android:state_window_focused="false" android:state_enabled="false">
+        <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item android:state_enabled="true" android:state_focused="true">
+        <nine-patch android:src="@drawable/textfield_search_activated_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_enabled="true" android:state_activated="true">
+        <nine-patch android:src="@drawable/textfield_search_activated_qntm_alpha"
+            android:tint="?attr/colorControlActivated" />
+    </item>
+    <item android:state_enabled="true">
+        <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+    <item>
+        <nine-patch android:src="@drawable/textfield_search_default_qntm_alpha"
+            android:tint="?attr/colorControlNormal" />
+    </item>
+</selector>
diff --git a/core/res/res/interpolator/fast_out_linear_in.xml b/core/res/res/interpolator/fast_out_linear_in.xml
new file mode 100644
index 0000000..19f95a6
--- /dev/null
+++ b/core/res/res/interpolator/fast_out_linear_in.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:controlX1="0.4"
+    android:controlY1="0"
+    android:controlX2="1"
+    android:controlY2="1"/>
diff --git a/core/res/res/interpolator/fast_out_slow_in.xml b/core/res/res/interpolator/fast_out_slow_in.xml
new file mode 100644
index 0000000..2d68dbb
--- /dev/null
+++ b/core/res/res/interpolator/fast_out_slow_in.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:controlX1="0.4"
+    android:controlY1="0"
+    android:controlX2="0.2"
+    android:controlY2="1"/>
diff --git a/core/res/res/interpolator/linear_out_slow_in.xml b/core/res/res/interpolator/linear_out_slow_in.xml
new file mode 100644
index 0000000..83fc223
--- /dev/null
+++ b/core/res/res/interpolator/linear_out_slow_in.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<pathInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
+    android:controlX1="0"
+    android:controlY1="0"
+    android:controlX2="0.2"
+    android:controlY2="1"/>
diff --git a/core/res/res/layout-land/time_picker_holo.xml b/core/res/res/layout-land/time_picker_holo.xml
new file mode 100644
index 0000000..f5ce1ec
--- /dev/null
+++ b/core/res/res/layout-land/time_picker_holo.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2013, 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.
+*/
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="horizontal"
+        android:focusable="true"
+        android:layout_marginLeft="@dimen/timepicker_minimum_margin_sides"
+        android:layout_marginRight="@dimen/timepicker_minimum_margin_sides"
+        android:layout_marginTop="@dimen/timepicker_minimum_margin_top_bottom"
+        android:layout_marginBottom="@dimen/timepicker_minimum_margin_top_bottom">
+    <LinearLayout
+            android:layout_width="@dimen/timepicker_left_side_width"
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+        <FrameLayout
+                android:layout_width="match_parent"
+                android:layout_height="0dip"
+                android:layout_weight="1"
+                android:background="?android:attr/timePickerHeaderBackgroundColor">
+            <include
+                    layout="@layout/time_header_label"
+                    android:layout_width="match_parent"
+                    android:layout_height="@dimen/timepicker_header_height"
+                    android:layout_gravity="center" />
+        </FrameLayout>
+        <LinearLayout
+                android:id="@+id/layout_buttons"
+                style="?android:attr/buttonBarStyle"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="vertical"
+                android:background="?android:attr/timePickerHeaderBackgroundColor"
+                android:divider="?android:attr/dividerHorizontal"
+                android:showDividers="beginning">
+            <Button
+                    android:id="@+id/done_button"
+                    style="?android:attr/buttonBarButtonStyle"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:minHeight="48dp"
+                    android:text="@string/done_label"
+                    android:textSize="@dimen/timepicker_done_label_size" />
+        </LinearLayout>
+    </LinearLayout>
+    <android.widget.RadialTimePickerView
+            android:id="@+id/radial_picker"
+            android:layout_width="@dimen/timepicker_radial_picker_dimen"
+            android:layout_height="match_parent"
+            android:layout_gravity="center"
+            android:focusable="true"
+            android:focusableInTouchMode="true" />
+</LinearLayout>
\ No newline at end of file
diff --git a/core/res/res/layout-xlarge/screen_action_bar.xml b/core/res/res/layout-xlarge/screen_action_bar.xml
index e495e53..d2fe9fa 100644
--- a/core/res/res/layout-xlarge/screen_action_bar.xml
+++ b/core/res/res/layout-xlarge/screen_action_bar.xml
@@ -34,6 +34,7 @@
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true"
         style="?android:attr/actionBarStyle"
+        android:sharedElementName="android:action_bar"
         android:gravity="top">
         <com.android.internal.widget.ActionBarView
             android:id="@+id/action_bar"
diff --git a/core/res/res/layout/action_bar_home_quantum.xml b/core/res/res/layout/action_bar_home_quantum.xml
new file mode 100644
index 0000000..9213458
--- /dev/null
+++ b/core/res/res/layout/action_bar_home_quantum.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+
+<view xmlns:android="http://schemas.android.com/apk/res/android"
+    class="com.android.internal.widget.ActionBarView$HomeView"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_gravity="center_vertical|start">
+    <ImageView android:id="@android:id/up"
+        android:src="?android:attr/homeAsUpIndicator"
+        android:layout_gravity="center_vertical|start"
+        android:visibility="gone"
+        android:layout_width="48dp"
+        android:layout_height="48dp"
+        android:scaleType="centerInside" />
+    <ImageView android:id="@android:id/home"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginEnd="8dip"
+        android:layout_marginTop="@android:dimen/action_bar_icon_vertical_padding"
+        android:layout_marginBottom="@android:dimen/action_bar_icon_vertical_padding"
+        android:adjustViewBounds="true"
+        android:scaleType="fitCenter" />
+</view>
diff --git a/core/res/res/layout/action_menu_layout.xml b/core/res/res/layout/action_menu_layout.xml
index c401fec..abf3300c 100644
--- a/core/res/res/layout/action_menu_layout.xml
+++ b/core/res/res/layout/action_menu_layout.xml
@@ -14,7 +14,7 @@
      limitations under the License.
 -->
 
-<com.android.internal.view.menu.ActionMenuView
+<ActionMenuView
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
diff --git a/core/res/res/layout/alert_dialog_progress_quantum.xml b/core/res/res/layout/alert_dialog_progress_quantum.xml
new file mode 100644
index 0000000..b9d0814
--- /dev/null
+++ b/core/res/res/layout/alert_dialog_progress_quantum.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="match_parent">
+    <ProgressBar android:id="@+id/progress"
+        style="?android:attr/progressBarStyleHorizontal"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dip"
+        android:layout_marginBottom="1dip"
+        android:layout_marginStart="16dip"
+        android:layout_marginEnd="16dip"
+        android:layout_centerHorizontal="true" />
+    <TextView
+        android:id="@+id/progress_percent"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingBottom="16dip"
+        android:layout_marginStart="16dip"
+        android:layout_marginEnd="16dip"
+        android:layout_alignParentStart="true"
+        android:layout_below="@id/progress" />
+    <TextView
+        android:id="@+id/progress_number"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingBottom="16dip"
+        android:layout_marginStart="16dip"
+        android:layout_marginEnd="16dip"
+        android:layout_alignParentEnd="true"
+        android:layout_below="@id/progress" />
+</RelativeLayout>
diff --git a/core/res/res/layout/alert_dialog_quantum.xml b/core/res/res/layout/alert_dialog_quantum.xml
new file mode 100644
index 0000000..80e34cb
--- /dev/null
+++ b/core/res/res/layout/alert_dialog_quantum.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/parentPanel"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:background="@drawable/dialog_background_quantum"
+    android:translationZ="@dimen/floating_window_z"
+    android:layout_margin="@dimen/floating_window_margin">
+
+    <LinearLayout android:id="@+id/topPanel"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical">
+        <LinearLayout android:id="@+id/title_template"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:gravity="center_vertical|start"
+            android:paddingStart="16dip"
+            android:paddingEnd="16dip"
+            android:paddingTop="16dip">
+            <ImageView android:id="@+id/icon"
+                android:layout_width="32dip"
+                android:layout_height="32dip"
+                android:layout_marginEnd="8dip"
+                android:scaleType="fitCenter"
+                android:src="@null" />
+            <TextView android:id="@+id/alertTitle"
+                style="?android:attr/windowTitleStyle"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:textAlignment="viewStart" />
+        </LinearLayout>
+        <!-- If the client uses a customTitle, it will be added here. -->
+    </LinearLayout>
+
+    <LinearLayout android:id="@+id/contentPanel"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:minHeight="64dp">
+        <ScrollView android:id="@+id/scrollView"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:clipToPadding="false">
+            <TextView android:id="@+id/message"
+                style="?android:attr/textAppearanceMedium"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingStart="16dip"
+                android:paddingEnd="16dip"
+                android:paddingTop="16dip" />
+        </ScrollView>
+    </LinearLayout>
+
+    <FrameLayout android:id="@+id/customPanel"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:minHeight="64dp">
+        <FrameLayout android:id="@+android:id/custom"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+    </FrameLayout>
+
+    <LinearLayout android:id="@+id/buttonPanel"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:minHeight="@dimen/alert_dialog_button_bar_height"
+        android:orientation="vertical"
+        android:padding="16dip">
+        <LinearLayout
+            style="?android:attr/buttonBarStyle"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layoutDirection="locale">
+            <Button android:id="@+id/button3"
+                style="?android:attr/buttonBarButtonStyle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginRight="8dip"
+                android:maxLines="2"
+                android:minHeight="@dimen/alert_dialog_button_bar_height" />
+            <View
+                android:layout_width="0dp"
+                android:layout_height="@dimen/alert_dialog_button_bar_height"
+                android:layout_weight="1"
+                android:visibility="invisible" />
+            <Button android:id="@+id/button2"
+                style="?android:attr/buttonBarButtonStyle"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:maxLines="2"
+                android:minHeight="@dimen/alert_dialog_button_bar_height" />
+            <Button android:id="@+id/button1"
+                style="?android:attr/buttonBarButtonStyle"
+                android:layout_marginLeft="8dip"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:maxLines="2"
+                android:minHeight="@dimen/alert_dialog_button_bar_height" />
+        </LinearLayout>
+     </LinearLayout>
+</LinearLayout>
diff --git a/core/res/res/layout/dialog_custom_title_quantum.xml b/core/res/res/layout/dialog_custom_title_quantum.xml
new file mode 100644
index 0000000..1bb93eb
--- /dev/null
+++ b/core/res/res/layout/dialog_custom_title_quantum.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!--
+This is a custom layout for a dialog.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:fitsSystemWindows="true">
+    <FrameLayout android:id="@android:id/title_container"
+        android:layout_width="match_parent"
+        android:layout_weight="0"
+        android:gravity="center_vertical|start"
+        style="?android:attr/windowTitleBackgroundStyle" />
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:foreground="?android:attr/windowContentOverlay">
+        <FrameLayout android:id="@android:id/content"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </FrameLayout>
+</LinearLayout>
diff --git a/core/res/res/layout/dialog_title_icons_quantum.xml b/core/res/res/layout/dialog_title_icons_quantum.xml
new file mode 100644
index 0000000..28e20d9
--- /dev/null
+++ b/core/res/res/layout/dialog_title_icons_quantum.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!--
+This is an optimized layout for a screen, with the minimum set of features
+enabled.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:fitsSystemWindows="true">
+
+    <LinearLayout android:id="@+id/title_container"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:gravity="center_vertical"
+        android:paddingStart="16dip"
+        android:paddingEnd="16dip"
+        android:paddingTop="16dip">
+        <ImageView android:id="@+id/left_icon"
+            android:layout_width="32dip"
+            android:layout_height="32dip"
+            android:scaleType="fitCenter"
+            android:layout_marginEnd="8dip" />
+        <TextView android:id="@android:id/title"
+            style="?android:attr/windowTitleStyle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0" />
+        <ImageView android:id="@+id/right_icon"
+            android:layout_width="32dip"
+            android:layout_height="32dip"
+            android:scaleType="fitCenter"
+            android:layout_marginStart="8dip" />
+    </LinearLayout>
+
+    <FrameLayout
+        android:layout_width="match_parent" android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:foreground="?android:attr/windowContentOverlay">
+        <FrameLayout android:id="@android:id/content"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </FrameLayout>
+</LinearLayout>
diff --git a/core/res/res/layout/dialog_title_quantum.xml b/core/res/res/layout/dialog_title_quantum.xml
new file mode 100644
index 0000000..b92c1e7
--- /dev/null
+++ b/core/res/res/layout/dialog_title_quantum.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!--
+This is an optimized layout for a screen, with the minimum set of features
+enabled.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:fitsSystemWindows="true">
+    <TextView android:id="@+id/alertTitle"
+        style="?android:attr/windowTitleStyle"
+        android:singleLine="true"
+        android:ellipsize="end"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:textAlignment="viewStart"
+        android:paddingStart="16dip"
+        android:paddingEnd="16dip"
+        android:paddingTop="16dip" />
+    <FrameLayout
+        android:layout_width="match_parent" android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:orientation="vertical"
+        android:foreground="?android:attr/windowContentOverlay">
+        <FrameLayout android:id="@android:id/content"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </FrameLayout>
+</LinearLayout>
diff --git a/core/res/res/layout/notification_quantum_action.xml b/core/res/res/layout/notification_quantum_action.xml
new file mode 100644
index 0000000..0986343
--- /dev/null
+++ b/core/res/res/layout/notification_quantum_action.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<Button xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@android:style/Widget.Quantum.Light.Button.Borderless.Small"
+    android:id="@+id/action0"
+    android:layout_width="0dp"
+    android:layout_height="48dp"
+    android:layout_weight="1"
+    android:gravity="start|center_vertical"
+    android:drawablePadding="8dp"
+    android:paddingStart="8dp"
+    android:textColor="#555555"
+    android:textSize="14dp"
+    android:singleLine="true"
+    android:ellipsize="end"
+    />
diff --git a/core/res/res/layout/notification_quantum_action_list.xml b/core/res/res/layout/notification_quantum_action_list.xml
new file mode 100644
index 0000000..ec4919b
--- /dev/null
+++ b/core/res/res/layout/notification_quantum_action_list.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/actions"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="horizontal"
+    android:visibility="gone"
+    android:layout_marginBottom="8dp"
+    android:showDividers="middle"
+    android:divider="@drawable/list_divider_holo_light"
+    android:dividerPadding="12dp"
+    >
+    <!-- actions will be added here -->
+</LinearLayout>
diff --git a/core/res/res/layout/notification_quantum_action_tombstone.xml b/core/res/res/layout/notification_quantum_action_tombstone.xml
new file mode 100644
index 0000000..51e4205
--- /dev/null
+++ b/core/res/res/layout/notification_quantum_action_tombstone.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<Button xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@android:style/Widget.Quantum.Light.Button.Borderless.Small"
+    android:id="@+id/action0"
+    android:layout_width="0dp"
+    android:layout_height="48dp"
+    android:layout_weight="1"
+    android:gravity="start|center_vertical"
+    android:drawablePadding="8dp"
+    android:paddingStart="8dp"
+    android:textColor="#555555"
+    android:textSize="14dp"
+    android:singleLine="true"
+    android:ellipsize="end"
+    android:alpha="0.5"
+    android:enabled="false"
+    />
diff --git a/core/res/res/layout/notification_template_quantum_base.xml b/core/res/res/layout/notification_template_quantum_base.xml
new file mode 100644
index 0000000..8f3019d
--- /dev/null
+++ b/core/res/res/layout/notification_template_quantum_base.xml
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:internal="http://schemas.android.com/apk/prv/res/android"
+    android:id="@+id/status_bar_latest_event_content"
+    android:layout_width="match_parent"
+    android:layout_height="64dp"
+    internal:layout_minHeight="64dp"
+    internal:layout_maxHeight="64dp"
+    >
+    <ImageView android:id="@+id/icon"
+        android:layout_width="@dimen/notification_large_icon_width"
+        android:layout_height="@dimen/notification_large_icon_height"
+        android:scaleType="center"
+        />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+
+        android:layout_gravity="fill_vertical"
+        android:layout_marginStart="@dimen/notification_large_icon_width"
+        android:minHeight="@dimen/notification_large_icon_height"
+        android:orientation="vertical"
+        android:paddingEnd="8dp"
+        android:paddingTop="2dp"
+        android:paddingBottom="2dp"
+        android:gravity="top"
+        >
+        <LinearLayout
+            android:id="@+id/line1"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingTop="6dp"
+            android:layout_marginStart="8dp"
+            android:orientation="horizontal"
+            >
+            <TextView android:id="@+id/title"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:singleLine="true"
+                android:ellipsize="marquee"
+                android:fadingEdge="horizontal"
+                android:layout_weight="1"
+                />
+            <ViewStub android:id="@+id/time"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="0"
+                android:visibility="gone"
+                android:layout="@layout/notification_template_part_time"
+                />
+            <ViewStub android:id="@+id/chronometer"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="0"
+                android:visibility="gone"
+                android:layout="@layout/notification_template_part_chronometer"
+                />
+        </LinearLayout>
+        <TextView android:id="@+id/text2"
+            android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="-2dp"
+            android:layout_marginBottom="-2dp"
+            android:layout_marginStart="8dp"
+            android:singleLine="true"
+            android:fadingEdge="horizontal"
+            android:ellipsize="marquee"
+            android:visibility="gone"
+            />
+        <ProgressBar
+            android:id="@android:id/progress"
+            android:layout_width="match_parent"
+            android:layout_height="12dp"
+            android:layout_marginStart="8dp"
+            android:visibility="gone"
+            style="@style/Widget.Quantum.Light.ProgressBar.Horizontal"
+            />
+        <LinearLayout
+            android:id="@+id/line3"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:gravity="center_vertical"
+            android:layout_marginStart="8dp"
+            >
+            <TextView android:id="@+id/text"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_gravity="center"
+                android:singleLine="true"
+                android:ellipsize="marquee"
+                android:fadingEdge="horizontal"
+                />
+            <TextView android:id="@+id/info"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:layout_weight="0"
+                android:singleLine="true"
+                android:gravity="center"
+                android:paddingStart="8dp"
+                />
+            <ImageView android:id="@+id/right_icon"
+                android:layout_width="16dp"
+                android:layout_height="16dp"
+                android:layout_gravity="center"
+                android:layout_weight="0"
+                android:layout_marginStart="8dp"
+                android:scaleType="centerInside"
+                android:visibility="gone"
+                android:drawableAlpha="153"
+                />
+        </LinearLayout>
+    </LinearLayout>
+</FrameLayout>
diff --git a/core/res/res/layout/notification_template_quantum_big_base.xml b/core/res/res/layout/notification_template_quantum_big_base.xml
new file mode 100644
index 0000000..45e69b1
--- /dev/null
+++ b/core/res/res/layout/notification_template_quantum_big_base.xml
@@ -0,0 +1,166 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:internal="http://schemas.android.com/apk/prv/res/android"
+    android:id="@+id/status_bar_latest_event_content"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    internal:layout_minHeight="65dp"
+    internal:layout_maxHeight="unbounded"
+    >
+    <ImageView android:id="@+id/icon"
+        android:layout_width="@dimen/notification_large_icon_width"
+        android:layout_height="@dimen/notification_large_icon_height"
+        android:scaleType="center"
+        />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="fill_vertical"
+        android:minHeight="@dimen/notification_large_icon_height"
+        android:orientation="vertical"
+        android:gravity="top"
+        >
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/notification_large_icon_width"
+            android:minHeight="@dimen/notification_large_icon_height"
+            android:paddingTop="2dp"
+            android:orientation="vertical"
+            >
+            <LinearLayout
+                android:id="@+id/line1"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingTop="6dp"
+                android:layout_marginEnd="8dp"
+                android:layout_marginStart="8dp"
+                android:orientation="horizontal"
+                >
+                <TextView android:id="@+id/title"
+                    android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:singleLine="true"
+                    android:ellipsize="marquee"
+                    android:fadingEdge="horizontal"
+                    android:layout_weight="1"
+                    />
+                <ViewStub android:id="@+id/time"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:visibility="gone"
+                    android:layout="@layout/notification_template_part_time"
+                    />
+                <ViewStub android:id="@+id/chronometer"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:visibility="gone"
+                    android:layout="@layout/notification_template_part_chronometer"
+                    />
+            </LinearLayout>
+            <TextView android:id="@+id/text2"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="-2dp"
+                android:layout_marginBottom="-2dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:fadingEdge="horizontal"
+                android:ellipsize="marquee"
+                android:visibility="gone"
+                />
+            <TextView android:id="@+id/big_text"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="false"
+                android:visibility="gone"
+                />
+            <LinearLayout
+                android:id="@+id/line3"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:orientation="horizontal"
+                android:gravity="center_vertical"
+                >
+                <TextView android:id="@+id/text"
+                    android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:layout_gravity="center"
+                    android:singleLine="true"
+                    android:ellipsize="marquee"
+                    android:fadingEdge="horizontal"
+                    />
+                <TextView android:id="@+id/info"
+                    android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center"
+                    android:layout_weight="0"
+                    android:singleLine="true"
+                    android:gravity="center"
+                    android:paddingStart="8dp"
+                    />
+                <ImageView android:id="@+id/right_icon"
+                    android:layout_width="16dp"
+                    android:layout_height="16dp"
+                    android:layout_gravity="center"
+                    android:layout_weight="0"
+                    android:layout_marginStart="8dp"
+                    android:scaleType="centerInside"
+                    android:visibility="gone"
+                    android:drawableAlpha="153"
+                    />
+            </LinearLayout>
+            <ProgressBar
+                android:id="@android:id/progress"
+                android:layout_width="match_parent"
+                android:layout_height="12dp"
+                android:layout_marginBottom="8dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:visibility="gone"
+                style="@style/Widget.Quantum.Light.ProgressBar.Horizontal"
+                />
+        </LinearLayout>
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:id="@+id/action_divider"
+            android:visibility="gone"
+            android:background="@drawable/list_divider_holo_light" />
+        <include
+            layout="@layout/notification_quantum_action_list"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="@dimen/notification_large_icon_width"
+            />
+    </LinearLayout>
+</FrameLayout>
diff --git a/core/res/res/layout/notification_template_quantum_big_picture.xml b/core/res/res/layout/notification_template_quantum_big_picture.xml
new file mode 100644
index 0000000..f68e414
--- /dev/null
+++ b/core/res/res/layout/notification_template_quantum_big_picture.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:internal="http://schemas.android.com/apk/prv/res/android"
+    android:id="@+id/status_bar_latest_event_content"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    internal:layout_minHeight="65dp"
+    internal:layout_maxHeight="unbounded"
+    >
+    <ImageView
+        android:id="@+id/big_picture"
+        android:layout_width="match_parent"
+        android:layout_height="192dp"
+        android:layout_marginTop="64dp"
+        android:layout_gravity="bottom"
+        android:scaleType="centerCrop"
+        />
+    <ImageView
+        android:layout_width="match_parent"
+        android:layout_height="6dp"
+        android:layout_marginTop="64dp"
+        android:scaleType="fitXY"
+        android:src="@drawable/title_bar_shadow"
+        />
+    <include layout="@layout/notification_template_quantum_base"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        />
+  <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="208dp"
+        android:paddingStart="64dp"
+        android:layout_gravity="bottom"
+        android:background="#CCEEEEEE"
+        >
+        <include
+            layout="@layout/notification_quantum_action_list"
+            android:id="@+id/actions"
+            android:layout_gravity="bottom"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            />
+    </FrameLayout>
+</FrameLayout>
diff --git a/core/res/res/layout/notification_template_quantum_big_text.xml b/core/res/res/layout/notification_template_quantum_big_text.xml
new file mode 100644
index 0000000..f7769d7
--- /dev/null
+++ b/core/res/res/layout/notification_template_quantum_big_text.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:internal="http://schemas.android.com/apk/prv/res/android"
+    android:id="@+id/status_bar_latest_event_content"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    internal:layout_minHeight="65dp"
+    internal:layout_maxHeight="unbounded"
+    >
+    <ImageView android:id="@+id/icon"
+        android:layout_width="@dimen/notification_large_icon_width"
+        android:layout_height="@dimen/notification_large_icon_height"
+        android:scaleType="center"
+        />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="fill_vertical"
+        android:layout_marginStart="@dimen/notification_large_icon_width"
+        android:orientation="vertical"
+        android:paddingTop="0dp"
+        android:paddingBottom="2dp"
+        android:gravity="top"
+        >
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:minHeight="@dimen/notification_large_icon_height"
+            android:orientation="vertical"
+            android:layout_marginStart="8dp"
+            android:layout_marginEnd="8dp"
+            android:layout_weight="1"
+            >
+            <LinearLayout
+                android:id="@+id/line1"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingTop="8dp"
+                android:orientation="horizontal"
+                android:layout_gravity="top"
+                android:layout_weight="0"
+                >
+                <TextView android:id="@+id/title"
+                    android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:singleLine="true"
+                    android:ellipsize="marquee"
+                    android:fadingEdge="horizontal"
+                    android:layout_weight="1"
+                    />
+                <ViewStub android:id="@+id/time"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:visibility="gone"
+                    android:layout="@layout/notification_template_part_time"
+                    />
+                <ViewStub android:id="@+id/chronometer"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:visibility="gone"
+                    android:layout="@layout/notification_template_part_chronometer"
+                    />
+            </LinearLayout>
+            <TextView android:id="@+id/text2"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="-2dp"
+                android:layout_marginBottom="-2dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:fadingEdge="horizontal"
+                android:ellipsize="marquee"
+                android:layout_weight="0"
+                android:visibility="gone"
+                />
+            <ProgressBar
+                android:id="@android:id/progress"
+                android:layout_width="match_parent"
+                android:layout_height="12dp"
+                android:layout_marginBottom="8dp"
+                android:layout_marginEnd="8dp"
+                android:visibility="gone"
+                android:layout_weight="0"
+                style="@style/Widget.Quantum.Light.ProgressBar.Horizontal"
+                />
+            <TextView android:id="@+id/big_text"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginBottom="10dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="false"
+                android:visibility="gone"
+                android:maxLines="8"
+                android:ellipsize="end"
+                android:layout_weight="1"
+                />
+        </LinearLayout>
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="1dip"
+            android:id="@+id/action_divider"
+            android:visibility="gone"
+            android:background="@drawable/list_divider_holo_light" />
+        <include
+            layout="@layout/notification_quantum_action_list"
+            android:layout_width="match_parent"
+            android:layout_height="0dp"
+            android:visibility="gone"
+            android:layout_weight="1"
+            />
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:id="@+id/overflow_divider"
+            android:layout_marginBottom="8dp"
+            android:visibility="visible"
+            android:background="@drawable/list_divider_holo_light" />
+        <LinearLayout
+            android:id="@+id/line3"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="8dp"
+            android:layout_marginBottom="8dp"
+            android:layout_marginEnd="8dp"
+            android:orientation="horizontal"
+            android:layout_weight="0"
+            android:gravity="center_vertical"
+            >
+            <TextView android:id="@+id/text"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_gravity="center"
+                android:singleLine="true"
+                android:ellipsize="marquee"
+                android:fadingEdge="horizontal"
+                />
+            <TextView android:id="@+id/info"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:layout_weight="0"
+                android:singleLine="true"
+                android:gravity="center"
+                android:paddingStart="8dp"
+                />
+            <ImageView android:id="@+id/right_icon"
+                android:layout_width="16dp"
+                android:layout_height="16dp"
+                android:layout_gravity="center"
+                android:layout_weight="0"
+                android:layout_marginStart="8dp"
+                android:scaleType="centerInside"
+                android:visibility="gone"
+                android:drawableAlpha="153"
+                />
+        </LinearLayout>
+    </LinearLayout>
+</FrameLayout>
diff --git a/core/res/res/layout/notification_template_quantum_inbox.xml b/core/res/res/layout/notification_template_quantum_inbox.xml
new file mode 100644
index 0000000..04974c4
--- /dev/null
+++ b/core/res/res/layout/notification_template_quantum_inbox.xml
@@ -0,0 +1,265 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:internal="http://schemas.android.com/apk/prv/res/android"
+    android:id="@+id/status_bar_latest_event_content"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    internal:layout_minHeight="65dp"
+    internal:layout_maxHeight="unbounded"
+    >
+    <ImageView android:id="@+id/icon"
+        android:layout_width="@dimen/notification_large_icon_width"
+        android:layout_height="@dimen/notification_large_icon_height"
+        android:scaleType="center"
+        />
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="fill_vertical"
+        android:layout_marginStart="@dimen/notification_large_icon_width"
+        android:minHeight="@dimen/notification_large_icon_height"
+        android:orientation="vertical"
+        android:paddingTop="0dp"
+        android:paddingBottom="2dp"
+        android:gravity="top"
+        >
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:minHeight="@dimen/notification_large_icon_height"
+            android:paddingTop="2dp"
+            android:orientation="vertical"
+            >
+            <LinearLayout
+                android:id="@+id/line1"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:paddingTop="6dp"
+                android:orientation="horizontal"
+                android:layout_weight="0"
+                >
+                <TextView android:id="@+id/title"
+                    android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Title"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:singleLine="true"
+                    android:ellipsize="marquee"
+                    android:fadingEdge="horizontal"
+                    android:layout_weight="1"
+                    />
+                <ViewStub android:id="@+id/time"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:visibility="gone"
+                    android:layout="@layout/notification_template_part_time"
+                    />
+                <ViewStub android:id="@+id/chronometer"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="0"
+                    android:visibility="gone"
+                    android:layout="@layout/notification_template_part_chronometer"
+                    />
+            </LinearLayout>
+            <TextView android:id="@+id/text2"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Line2"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="-2dp"
+                android:layout_marginBottom="-2dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:fadingEdge="horizontal"
+                android:ellipsize="marquee"
+                android:visibility="gone"
+                android:layout_weight="0"
+                />
+            <ProgressBar
+                android:id="@android:id/progress"
+                android:layout_width="match_parent"
+                android:layout_height="12dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:visibility="gone"
+                android:layout_weight="0"
+                style="@style/Widget.Quantum.Light.ProgressBar.Horizontal"
+                />
+            <TextView android:id="@+id/inbox_text0"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                />
+            <TextView android:id="@+id/inbox_text1"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                />
+            <TextView android:id="@+id/inbox_text2"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                />
+            <TextView android:id="@+id/inbox_text3"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                />
+            <TextView android:id="@+id/inbox_text4"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                />
+            <TextView android:id="@+id/inbox_text5"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                />
+            <TextView android:id="@+id/inbox_text6"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                />
+            <TextView android:id="@+id/inbox_more"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="match_parent"
+                android:layout_height="0dp"
+                android:layout_marginStart="8dp"
+                android:layout_marginEnd="8dp"
+                android:singleLine="true"
+                android:ellipsize="end"
+                android:visibility="gone"
+                android:layout_weight="1"
+                android:text="@android:string/ellipsis"
+                />
+            <FrameLayout
+                android:id="@+id/inbox_end_pad"
+                android:layout_width="match_parent"
+                android:layout_height="8dip"
+                android:visibility="gone"
+                android:layout_weight="0"
+            />
+        </LinearLayout>
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="1dip"
+            android:id="@+id/action_divider"
+            android:visibility="gone"
+            android:background="@drawable/list_divider_holo_light" />
+        <include
+            layout="@layout/notification_quantum_action_list"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            />
+        <ImageView
+            android:layout_width="match_parent"
+            android:layout_height="1dip"
+            android:id="@+id/overflow_divider"
+            android:visibility="visible"
+            android:background="@drawable/list_divider_holo_light" />
+        <LinearLayout
+            android:id="@+id/line3"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="8dp"
+            android:layout_marginStart="8dp"
+            android:layout_marginBottom="8dp"
+            android:layout_marginEnd="8dp"
+            android:orientation="horizontal"
+            android:layout_weight="0"
+            android:gravity="center_vertical"
+            >
+            <TextView android:id="@+id/text"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent"
+                android:layout_width="0dp"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:layout_gravity="center"
+                android:singleLine="true"
+                android:ellipsize="marquee"
+                android:fadingEdge="horizontal"
+                />
+            <TextView android:id="@+id/info"
+                android:textAppearance="@style/TextAppearance.StatusBar.Quantum.EventContent.Info"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center"
+                android:layout_weight="0"
+                android:singleLine="true"
+                android:gravity="center"
+                android:paddingStart="8dp"
+                />
+            <ImageView android:id="@+id/right_icon"
+                android:layout_width="16dp"
+                android:layout_height="16dp"
+                android:layout_gravity="center"
+                android:layout_weight="0"
+                android:layout_marginStart="8dp"
+                android:scaleType="centerInside"
+                android:visibility="gone"
+                android:drawableAlpha="153"
+                />
+        </LinearLayout>
+    </LinearLayout>
+</FrameLayout>
diff --git a/core/res/res/layout/preference_category_quantum.xml b/core/res/res/layout/preference_category_quantum.xml
new file mode 100644
index 0000000..032e09d
--- /dev/null
+++ b/core/res/res/layout/preference_category_quantum.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Layout used for PreferenceCategory in a PreferenceActivity. -->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+android:id/title"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginBottom="16dip"
+    android:textAppearance="@style/TextAppearance.Quantum.Body2"
+    android:textColor="?android:attr/textColorSecondary"
+    android:textStyle="bold"
+    android:paddingStart="?attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?attr/listPreferredItemPaddingEnd"
+    android:paddingTop="16dip" />
diff --git a/core/res/res/layout/preference_child_quantum.xml b/core/res/res/layout/preference_child_quantum.xml
new file mode 100644
index 0000000..690d64a
--- /dev/null
+++ b/core/res/res/layout/preference_child_quantum.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Layout for a visually child-like Preference in a PreferenceActivity. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginStart="?attr/listPreferredItemPaddingStart"
+    android:minHeight="?android:attr/listPreferredItemHeight"
+    android:gravity="center_vertical"
+    android:paddingStart="?attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?attr/listPreferredItemPaddingEnd">
+
+    <LinearLayout
+        android:id="@+android:id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="58dip"
+        android:gravity="left|center_vertical"
+        android:orientation="horizontal">
+        <ImageView
+            android:id="@+android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="8dip" />
+    </LinearLayout>
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dip"
+        android:paddingBottom="16dip">
+
+        <TextView android:id="@+android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceListItem" />
+
+        <TextView android:id="@+android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10" />
+
+    </RelativeLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout android:id="@+android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="58dip"
+        android:gravity="right|center_vertical"
+        android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/preference_holo.xml b/core/res/res/layout/preference_holo.xml
index 1cc803b..1b3ab86 100644
--- a/core/res/res/layout/preference_holo.xml
+++ b/core/res/res/layout/preference_holo.xml
@@ -23,7 +23,8 @@
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:gravity="center_vertical"
     android:paddingStart="@dimen/preference_item_padding_side"
-    android:paddingEnd="?android:attr/scrollbarSize">
+    android:paddingEnd="?android:attr/scrollbarSize"
+    android:background="?android:attr/activatedBackgroundIndicator">
 
     <LinearLayout
         android:layout_width="wrap_content"
diff --git a/core/res/res/layout/preference_information_quantum.xml b/core/res/res/layout/preference_information_quantum.xml
new file mode 100644
index 0000000..f21640fc
--- /dev/null
+++ b/core/res/res/layout/preference_information_quantum.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Layout for a Preference in a PreferenceActivity. The
+     Preference is able to place a specific widget for its particular
+     type in the "widget_frame" layout. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:paddingStart="?attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?attr/listPreferredItemPaddingEnd">
+
+    <LinearLayout
+        android:id="@+android:id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="58dip"
+        android:gravity="left|center_vertical"
+        android:orientation="horizontal">
+        <ImageView
+            android:id="@+android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginEnd="8dip" />
+    </LinearLayout>
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dip"
+        android:paddingBottom="16dip">
+
+        <TextView android:id="@+android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceListItem" />
+
+        <TextView android:id="@+android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10" />
+
+    </RelativeLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout android:id="@+android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="58dip"
+        android:gravity="right|center_vertical"
+        android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/preference_quantum.xml b/core/res/res/layout/preference_quantum.xml
new file mode 100644
index 0000000..a4fe73d
--- /dev/null
+++ b/core/res/res/layout/preference_quantum.xml
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Layout for a Preference in a PreferenceActivity. The
+     Preference is able to place a specific widget for its particular
+     type in the "widget_frame" layout. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:gravity="center_vertical"
+    android:paddingStart="?attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?attr/listPreferredItemPaddingEnd"
+    android:background="?android:attr/activatedBackgroundIndicator">
+
+    <LinearLayout
+        android:id="@+android:id/icon_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="58dip"
+        android:gravity="left|center_vertical"
+        android:orientation="horizontal">
+        <ImageView
+            android:id="@+android:id/icon"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:scaleType="centerInside"
+            android:layout_marginEnd="8dip" />
+    </LinearLayout>
+
+    <RelativeLayout
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:paddingTop="16dip"
+        android:paddingBottom="16dip">
+
+        <TextView android:id="@+android:id/title"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:singleLine="true"
+            android:textAppearance="?android:attr/textAppearanceListItem"
+            android:ellipsize="marquee" />
+
+        <TextView android:id="@+android:id/summary"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@android:id/title"
+            android:layout_alignStart="@android:id/title"
+            android:textAppearance="?android:attr/textAppearanceListItemSecondary"
+            android:textColor="?android:attr/textColorSecondary"
+            android:maxLines="10" />
+
+    </RelativeLayout>
+
+    <!-- Preference should place its actual preference widget here. -->
+    <LinearLayout android:id="@+android:id/widget_frame"
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:minWidth="58dip"
+        android:gravity="right|center_vertical"
+        android:orientation="vertical" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/preference_widget_checkbox.xml b/core/res/res/layout/preference_widget_checkbox.xml
index 33a43f4..bfd7f0a 100644
--- a/core/res/res/layout/preference_widget_checkbox.xml
+++ b/core/res/res/layout/preference_widget_checkbox.xml
@@ -20,6 +20,5 @@
     android:id="@+android:id/checkbox" 
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:layout_gravity="center"
     android:focusable="false"
     android:clickable="false" />
diff --git a/core/res/res/layout/preference_widget_switch.xml b/core/res/res/layout/preference_widget_switch.xml
index 83ef097..534c7ec 100644
--- a/core/res/res/layout/preference_widget_switch.xml
+++ b/core/res/res/layout/preference_widget_switch.xml
@@ -20,6 +20,5 @@
     android:id="@+android:id/switchWidget"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:layout_gravity="center"
     android:padding="16dip"
     android:focusable="false" />
diff --git a/core/res/res/layout/progress_dialog_quantum.xml b/core/res/res/layout/progress_dialog_quantum.xml
new file mode 100644
index 0000000..84d06b5
--- /dev/null
+++ b/core/res/res/layout/progress_dialog_quantum.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content">
+
+    <LinearLayout android:id="@+id/body"
+        android:orientation="horizontal"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:baselineAligned="false"
+        android:padding="16dip">
+
+        <ProgressBar android:id="@android:id/progress"
+            style="?android:attr/progressBarStyle"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:max="10000"
+            android:layout_marginEnd="16dip" />
+
+        <TextView android:id="@+id/message"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical" />
+    </LinearLayout>
+</FrameLayout>
diff --git a/core/res/res/layout/screen_action_bar.xml b/core/res/res/layout/screen_action_bar.xml
index b1889a2..77f537b 100644
--- a/core/res/res/layout/screen_action_bar.xml
+++ b/core/res/res/layout/screen_action_bar.xml
@@ -23,7 +23,8 @@
     android:id="@+id/action_bar_overlay_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:splitMotionEvents="false">
+    android:splitMotionEvents="false"
+    android:theme="?attr/actionBarTheme">
     <FrameLayout android:id="@android:id/content"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent" />
@@ -32,24 +33,25 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true"
-        style="?android:attr/actionBarStyle"
+        style="?attr/actionBarStyle"
+        android:sharedElementName="android:action_bar"
         android:gravity="top">
         <com.android.internal.widget.ActionBarView
             android:id="@+id/action_bar"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            style="?android:attr/actionBarStyle" />
+            style="?attr/actionBarStyle" />
         <com.android.internal.widget.ActionBarContextView
             android:id="@+id/action_context_bar"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:visibility="gone"
-            style="?android:attr/actionModeStyle" />
+            style="?attr/actionModeStyle" />
     </com.android.internal.widget.ActionBarContainer>
     <com.android.internal.widget.ActionBarContainer android:id="@+id/split_action_bar"
                   android:layout_width="match_parent"
                   android:layout_height="wrap_content"
-                  style="?android:attr/actionBarSplitStyle"
+                  style="?attr/actionBarSplitStyle"
                   android:visibility="gone"
                   android:gravity="center"/>
 </com.android.internal.widget.ActionBarOverlayLayout>
diff --git a/core/res/res/layout/screen_custom_title.xml b/core/res/res/layout/screen_custom_title.xml
index e3364d1..d02cc8b 100644
--- a/core/res/res/layout/screen_custom_title.xml
+++ b/core/res/res/layout/screen_custom_title.xml
@@ -31,6 +31,7 @@
     <FrameLayout android:id="@android:id/title_container" 
         android:layout_width="match_parent" 
         android:layout_height="?android:attr/windowTitleSize"
+        android:sharedElementName="android:title"
         style="?android:attr/windowTitleBackgroundStyle">
     </FrameLayout>
     <FrameLayout android:id="@android:id/content"
diff --git a/core/res/res/layout/select_dialog_item_quantum.xml b/core/res/res/layout/select_dialog_item_quantum.xml
new file mode 100644
index 0000000..59b432e
--- /dev/null
+++ b/core/res/res/layout/select_dialog_item_quantum.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<!--
+    This layout file is used by the AlertDialog when displaying a list of items.
+    This layout file is inflated and used as the TextView to display individual
+    items.
+-->
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:textAppearance="?android:attr/textAppearanceListItemSmall"
+    android:textColor="?android:attr/textColorAlertDialogListItem"
+    android:gravity="center_vertical"
+    android:paddingStart="16dip"
+    android:paddingEnd="16dip"
+    android:ellipsize="marquee" />
diff --git a/core/res/res/layout/select_dialog_multichoice_quantum.xml b/core/res/res/layout/select_dialog_multichoice_quantum.xml
new file mode 100644
index 0000000..8b4c59d
--- /dev/null
+++ b/core/res/res/layout/select_dialog_multichoice_quantum.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:textAppearance="?android:attr/textAppearanceMedium"
+    android:textColor="?android:attr/textColorAlertDialogListItem"
+    android:gravity="center_vertical"
+    android:paddingStart="16dip"
+    android:paddingEnd="16dip"
+    android:checkMark="?android:attr/listChoiceIndicatorMultiple"
+    android:ellipsize="marquee" />
diff --git a/core/res/res/layout/select_dialog_quantum.xml b/core/res/res/layout/select_dialog_quantum.xml
new file mode 100644
index 0000000..ee04039
--- /dev/null
+++ b/core/res/res/layout/select_dialog_quantum.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<!--
+    This layout file is used by the AlertDialog when displaying a list of items.
+    This layout file is inflated and used as the ListView to display the items.
+    Assign an ID so its state will be saved/restored.
+-->
+<view class="com.android.internal.app.AlertController$RecycleListView"
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+android:id/select_dialog_listview"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:cacheColorHint="@null"
+    android:divider="?android:attr/listDividerAlertDialog"
+    android:scrollbars="vertical"
+    android:overScrollMode="ifContentScrolls"
+    android:textAlignment="viewStart" />
diff --git a/core/res/res/layout/select_dialog_singlechoice_quantum.xml b/core/res/res/layout/select_dialog_singlechoice_quantum.xml
new file mode 100644
index 0000000..27a6648
--- /dev/null
+++ b/core/res/res/layout/select_dialog_singlechoice_quantum.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:textAppearance="?android:attr/textAppearanceMedium"
+    android:textColor="?android:attr/textColorAlertDialogListItem"
+    android:gravity="center_vertical"
+    android:paddingStart="16dip"
+    android:paddingEnd="16dip"
+    android:checkMark="?android:attr/listChoiceIndicatorSingle"
+    android:ellipsize="marquee" />
diff --git a/core/res/res/layout/simple_list_item_1.xml b/core/res/res/layout/simple_list_item_1.xml
index 4249d10..43a5635 100644
--- a/core/res/res/layout/simple_list_item_1.xml
+++ b/core/res/res/layout/simple_list_item_1.xml
@@ -22,5 +22,4 @@
     android:gravity="center_vertical"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
     android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-    android:minHeight="?android:attr/listPreferredItemHeightSmall"
-/>
+    android:minHeight="?android:attr/listPreferredItemHeightSmall" />
diff --git a/core/res/res/layout/simple_list_item_2.xml b/core/res/res/layout/simple_list_item_2.xml
index 63c542b..b47a3465 100644
--- a/core/res/res/layout/simple_list_item_2.xml
+++ b/core/res/res/layout/simple_list_item_2.xml
@@ -20,22 +20,19 @@
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:mode="twoLine"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
->
-    
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+
 	<TextView android:id="@android:id/text1"
-		android:layout_width="match_parent"
-		android:layout_height="wrap_content"
-    android:layout_marginTop="8dip"
-		android:textAppearance="?android:attr/textAppearanceListItem"
-	/>
-		
+    	android:layout_width="match_parent"
+    	android:layout_height="wrap_content"
+      android:layout_marginTop="8dip"
+    	android:textAppearance="?android:attr/textAppearanceListItem" />
+
 	<TextView android:id="@android:id/text2"
-		android:layout_width="match_parent"
-		android:layout_height="wrap_content"
-		android:layout_below="@android:id/text1"
-    android:layout_alignStart="@android:id/text1"
-		android:textAppearance="?android:attr/textAppearanceSmall"
-	/>
+    	android:layout_width="match_parent"
+    	android:layout_height="wrap_content"
+    	android:layout_below="@android:id/text1"
+      android:layout_alignStart="@android:id/text1"
+    	android:textAppearance="?android:attr/textAppearanceListItemSecondary" />
 
 </TwoLineListItem>
diff --git a/core/res/res/layout/simple_list_item_2_single_choice.xml b/core/res/res/layout/simple_list_item_2_single_choice.xml
index 5629567..940c6b8 100644
--- a/core/res/res/layout/simple_list_item_2_single_choice.xml
+++ b/core/res/res/layout/simple_list_item_2_single_choice.xml
@@ -21,32 +21,36 @@
     android:gravity="center_vertical"
     android:paddingStart="16dip"
     android:paddingEnd="12dip"
-    android:minHeight="?android:attr/listPreferredItemHeightSmall">
+    android:minHeight="?attr/listPreferredItemHeightSmall"
+    android:background="@color/transparent">
+
     <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:orientation="vertical"
         android:gravity="center_vertical">
+
         <TextView android:id="@android:id/text1"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceMedium"
-            android:textColor="?android:attr/textColorAlertDialogListItem"
+            android:textAppearance="?attr/textAppearanceListItem"
+            android:textColor="?attr/textColorAlertDialogListItem"
             android:gravity="center_vertical|start"
             android:singleLine="true"
-            android:ellipsize="marquee"
-        />
+            android:ellipsize="marquee" />
+        
         <TextView android:id="@android:id/text2"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:textAppearance="?android:attr/textAppearanceSmall"
-            android:textColor="?android:attr/textColorAlertDialogListItem"
+            android:textAppearance="?attr/textAppearanceListItemSecondary"
+            android:textColor="?attr/textColorAlertDialogListItem"
             android:gravity="center_vertical|start"
             android:singleLine="true"
-            android:ellipsize="marquee"
-        />
+            android:ellipsize="marquee" />
+        
     </LinearLayout>
+
     <RadioButton
         android:id="@+id/radio"
         android:layout_width="35dip"
@@ -54,6 +58,6 @@
         android:paddingEnd="12dip"
         android:gravity="center_vertical"
         android:focusable="false"
-        android:clickable="false"
-    />
+        android:clickable="false" />
+
 </LinearLayout>
diff --git a/core/res/res/layout/simple_list_item_activated_1.xml b/core/res/res/layout/simple_list_item_activated_1.xml
index 41155e4..9b778d7 100644
--- a/core/res/res/layout/simple_list_item_activated_1.xml
+++ b/core/res/res/layout/simple_list_item_activated_1.xml
@@ -23,5 +23,4 @@
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
     android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
     android:background="?android:attr/activatedBackgroundIndicator"
-    android:minHeight="?android:attr/listPreferredItemHeightSmall"
-/>
+    android:minHeight="?android:attr/listPreferredItemHeightSmall" />
diff --git a/core/res/res/layout/simple_list_item_activated_2.xml b/core/res/res/layout/simple_list_item_activated_2.xml
index 725697d..5036813 100644
--- a/core/res/res/layout/simple_list_item_activated_2.xml
+++ b/core/res/res/layout/simple_list_item_activated_2.xml
@@ -21,23 +21,20 @@
     android:layout_height="wrap_content"
     android:background="?android:attr/activatedBackgroundIndicator"
     android:minHeight="?android:attr/listPreferredItemHeight"
-    android:mode="twoLine"
->
+    android:mode="twoLine">
 
     <TextView android:id="@android:id/text1"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
         android:layout_marginTop="6dip"
-        android:textAppearance="?android:attr/textAppearanceListItem"
-    />
+        android:textAppearance="?android:attr/textAppearanceListItem" />
 
     <TextView android:id="@android:id/text2"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_below="@android:id/text1"
         android:layout_alignStart="@android:id/text1"
-        android:textAppearance="?android:attr/textAppearanceSmall"
-    />
+        android:textAppearance="?android:attr/textAppearanceListItemSecondary" />
 
 </TwoLineListItem>
diff --git a/core/res/res/layout/simple_list_item_checked.xml b/core/res/res/layout/simple_list_item_checked.xml
index 0c497d6..4673e27 100644
--- a/core/res/res/layout/simple_list_item_checked.xml
+++ b/core/res/res/layout/simple_list_item_checked.xml
@@ -22,5 +22,4 @@
     android:gravity="center_vertical"
     android:checkMark="?android:attr/textCheckMark"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-/>
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" />
diff --git a/core/res/res/layout/simple_list_item_multiple_choice.xml b/core/res/res/layout/simple_list_item_multiple_choice.xml
index 076d8c6..440b6fd 100644
--- a/core/res/res/layout/simple_list_item_multiple_choice.xml
+++ b/core/res/res/layout/simple_list_item_multiple_choice.xml
@@ -22,5 +22,4 @@
     android:gravity="center_vertical"
     android:checkMark="?android:attr/listChoiceIndicatorMultiple"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-/>
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" />
diff --git a/core/res/res/layout/simple_list_item_single_choice.xml b/core/res/res/layout/simple_list_item_single_choice.xml
index 4c1af09..02cb7f7 100644
--- a/core/res/res/layout/simple_list_item_single_choice.xml
+++ b/core/res/res/layout/simple_list_item_single_choice.xml
@@ -22,5 +22,4 @@
     android:gravity="center_vertical"
     android:checkMark="?android:attr/listChoiceIndicatorSingle"
     android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-/>
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" />
diff --git a/core/res/res/layout/tab_indicator_quantum.xml b/core/res/res/layout/tab_indicator_quantum.xml
new file mode 100644
index 0000000..fcb2d5f
--- /dev/null
+++ b/core/res/res/layout/tab_indicator_quantum.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="?android:attr/actionBarSize"
+    android:orientation="horizontal"
+    style="@android:style/Widget.Quantum.Tab">
+
+    <ImageView
+        android:id="@android:id/icon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:visibility="gone" />
+
+    <TextView
+        android:id="@android:id/title"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        style="@android:style/Widget.Quantum.TabText" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/time_header_label.xml b/core/res/res/layout/time_header_label.xml
new file mode 100644
index 0000000..f5f4a04
--- /dev/null
+++ b/core/res/res/layout/time_header_label.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2013 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
+  -->
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+                android:id="@+id/time_header"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_gravity="center" >
+
+    <TextView
+            android:id="@+id/hours"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_toLeftOf="@+id/separator"
+            android:layout_alignBaseline="@+id/separator"
+            android:textAppearance="?android:attr/timePickerHeaderTimeLabelTextAppearance"/>
+
+    <TextView
+            android:id="@+id/separator"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingLeft="@dimen/timepicker_separator_padding"
+            android:paddingRight="@dimen/timepicker_separator_padding"
+            android:layout_centerInParent="true"
+            android:textAppearance="?android:attr/timePickerHeaderTimeLabelTextAppearance"
+            android:importantForAccessibility="no" />
+
+    <TextView
+            android:id="@+id/minutes"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_toRightOf="@+id/separator"
+            android:layout_alignBaseline="@+id/separator"
+            android:textAppearance="?android:attr/timePickerHeaderTimeLabelTextAppearance" />
+
+    <TextView
+            android:id="@+id/ampm_label"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingLeft="@dimen/timepicker_ampm_left_padding"
+            android:paddingRight="@dimen/timepicker_ampm_left_padding"
+            android:layout_toRightOf="@+id/separator"
+            android:layout_alignBaseline="@+id/separator"
+            android:textAppearance="?android:attr/timePickerHeaderAmPmLabelTextAppearance" />
+
+</RelativeLayout>
diff --git a/core/res/res/layout/time_picker_holo.xml b/core/res/res/layout/time_picker_holo.xml
index c6b7d3a..0890fe5 100644
--- a/core/res/res/layout/time_picker_holo.xml
+++ b/core/res/res/layout/time_picker_holo.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
 **
-** Copyright 2011, The Android Open Source Project
+** Copyright 2013, 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.
@@ -17,70 +17,38 @@
 */
 -->
 
-<!-- Layout of time picker -->
-
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/timePickerLayout"
-    android:orientation="horizontal"
-    android:layout_gravity="center_horizontal"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:paddingStart="8dip"
-    android:paddingEnd="8dip">
-
-    <LinearLayout android:orientation="horizontal"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:paddingStart="8dip"
-        android:paddingEnd="8dip"
-        android:layoutDirection="ltr">
-
-        <!-- hour -->
-        <NumberPicker
-            android:id="@+id/hour"
+          android:layout_width="wrap_content"
+          android:layout_height="match_parent"
+          android:orientation="vertical"
+          android:focusable="true" >
+    <include
+            layout="@layout/time_header_label"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/timepicker_header_height"
+            android:layout_gravity="center" />
+    <android.widget.RadialTimePickerView
+            android:id="@+id/radial_picker"
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="16dip"
-            android:layout_marginBottom="16dip"
+            android:layout_height="@dimen/timepicker_radial_picker_dimen"
+            android:layout_gravity="center"
             android:focusable="true"
-            android:focusableInTouchMode="true"
-            />
-
-        <!-- divider -->
-        <TextView
-            android:id="@+id/divider"
-            android:layout_width="wrap_content"
+            android:focusableInTouchMode="true" />
+    <LinearLayout
+            android:id="@+id/layout_buttons"
+            style="?android:attr/buttonBarStyle"
+            android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginStart="6dip"
-            android:layout_marginEnd="6dip"
-            android:layout_gravity="center_vertical"
-            android:importantForAccessibility="no"
-            />
-
-        <!-- minute -->
-        <NumberPicker
-            android:id="@+id/minute"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_marginTop="16dip"
-            android:layout_marginBottom="16dip"
-            android:focusable="true"
-            android:focusableInTouchMode="true"
-            />
-
+            android:orientation="vertical"
+            android:divider="?android:attr/dividerHorizontal"
+            android:showDividers="beginning">
+        <Button
+                android:id="@+id/done_button"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:minHeight="48dp"
+                android:text="@string/done_label"
+                android:textSize="@dimen/timepicker_done_label_size"
+                style="?android:attr/buttonBarButtonStyle" />
     </LinearLayout>
-
-    <!-- AM / PM -->
-    <NumberPicker
-        android:id="@+id/amPm"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="16dip"
-        android:layout_marginBottom="16dip"
-        android:layout_marginStart="8dip"
-        android:layout_marginEnd="8dip"
-        android:focusable="true"
-        android:focusableInTouchMode="true"
-        />
-
 </LinearLayout>
diff --git a/core/res/res/layout/time_picker.xml b/core/res/res/layout/time_picker_legacy.xml
similarity index 100%
rename from core/res/res/layout/time_picker.xml
rename to core/res/res/layout/time_picker_legacy.xml
diff --git a/core/res/res/layout/time_picker_legacy_holo.xml b/core/res/res/layout/time_picker_legacy_holo.xml
new file mode 100644
index 0000000..c6b7d3a
--- /dev/null
+++ b/core/res/res/layout/time_picker_legacy_holo.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2011, 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.
+*/
+-->
+
+<!-- Layout of time picker -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/timePickerLayout"
+    android:orientation="horizontal"
+    android:layout_gravity="center_horizontal"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:paddingStart="8dip"
+    android:paddingEnd="8dip">
+
+    <LinearLayout android:orientation="horizontal"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:paddingStart="8dip"
+        android:paddingEnd="8dip"
+        android:layoutDirection="ltr">
+
+        <!-- hour -->
+        <NumberPicker
+            android:id="@+id/hour"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dip"
+            android:layout_marginBottom="16dip"
+            android:focusable="true"
+            android:focusableInTouchMode="true"
+            />
+
+        <!-- divider -->
+        <TextView
+            android:id="@+id/divider"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="6dip"
+            android:layout_marginEnd="6dip"
+            android:layout_gravity="center_vertical"
+            android:importantForAccessibility="no"
+            />
+
+        <!-- minute -->
+        <NumberPicker
+            android:id="@+id/minute"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="16dip"
+            android:layout_marginBottom="16dip"
+            android:focusable="true"
+            android:focusableInTouchMode="true"
+            />
+
+    </LinearLayout>
+
+    <!-- AM / PM -->
+    <NumberPicker
+        android:id="@+id/amPm"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="16dip"
+        android:layout_marginBottom="16dip"
+        android:layout_marginStart="8dip"
+        android:layout_marginEnd="8dip"
+        android:focusable="true"
+        android:focusableInTouchMode="true"
+        />
+
+</LinearLayout>
diff --git a/core/res/res/layout/volume_adjust.xml b/core/res/res/layout/volume_adjust.xml
index c16a12c..3ad1f23 100644
--- a/core/res/res/layout/volume_adjust.xml
+++ b/core/res/res/layout/volume_adjust.xml
@@ -14,47 +14,38 @@
      limitations under the License.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="480dp"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/visible_panel"
+    android:orientation="horizontal"
+    android:layout_width="300dp"
     android:layout_height="wrap_content">
+
     <LinearLayout
-        android:id="@+id/visible_panel"
-        android:layout_width="match_parent"
+        android:id="@+id/slider_group"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:background="@android:drawable/dialog_full_holo_dark"
-        android:orientation="horizontal"
-        >
-
-        <LinearLayout
-            android:id="@+id/slider_group"
-            android:layout_width="0dp"
-            android:layout_height="wrap_content"
-            android:layout_weight="1"
-            android:orientation="vertical"
-            >
-            <!-- Sliders go here -->
-        </LinearLayout>
-
-        <ImageView
-            android:id="@+id/expand_button_divider"
-            android:src="?attr/dividerVertical"
-            android:layout_width="wrap_content"
-            android:layout_height="32dip"
-            android:scaleType="fitXY"
-            android:layout_gravity="top"
-            android:layout_marginTop="16dip"
-            android:layout_marginBottom="16dip"
-            />
-
-        <ImageView
-            android:id="@+id/expand_button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="top"
-            android:padding="16dip"
-            android:background="?attr/selectableItemBackground"
-            android:src="@drawable/ic_sysbar_quicksettings"
-            />
-
+        android:layout_weight="1"
+        android:orientation="vertical">
+        <!-- Sliders go here -->
     </LinearLayout>
-</FrameLayout>
\ No newline at end of file
+
+    <ImageView
+        android:id="@+id/expand_button_divider"
+        android:src="?attr/dividerVertical"
+        android:layout_width="wrap_content"
+        android:layout_height="32dip"
+        android:scaleType="fitXY"
+        android:layout_gravity="top"
+        android:layout_marginTop="16dip"
+        android:layout_marginBottom="16dip" />
+
+    <ImageView
+        android:id="@+id/expand_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="top"
+        android:padding="16dip"
+        android:background="?attr/selectableItemBackground"
+        android:src="@drawable/ic_sysbar_quicksettings" />
+
+</LinearLayout>
diff --git a/core/res/res/layout/volume_adjust_item.xml b/core/res/res/layout/volume_adjust_item.xml
index 4a0fbaf..57cecf4 100644
--- a/core/res/res/layout/volume_adjust_item.xml
+++ b/core/res/res/layout/volume_adjust_item.xml
@@ -26,14 +26,14 @@
         android:id="@+id/stream_icon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:padding="16dip"
+        android:paddingLeft="16dip"
         android:background="?attr/selectableItemBackground"
-        />
+        android:contentDescription="@null" />
 
     <SeekBar
         style="?android:attr/seekBarStyle"
         android:id="@+id/seekbar"
-        android:layout_width="300dp"
+        android:layout_width="0dp"
         android:layout_height="wrap_content"
         android:layout_weight="1"
         android:padding="16dip"
diff --git a/core/res/res/transition/no_transition.xml b/core/res/res/transition/no_transition.xml
new file mode 100644
index 0000000..5679738
--- /dev/null
+++ b/core/res/res/transition/no_transition.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<transitionSet/>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index 1a9acd3..20d306d 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="UNIT">%2$s</xliff:g><xliff:g id="NUMBER">%1$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Titelloos&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Voer \'n PUK van 8 syfers of langer in."</string>
     <string name="needPuk" msgid="919668385956251611">"Jou SIM-kaart is PUK-gesluit. Voer die PUK-kode in om dit te ontsluit."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Sleutel PUK2 in om SIM-kaart oop te sluit."</string>
+    <string name="enablePin" msgid="209412020907207950">"Onsuksesvol, aktiveer SIM-/RUIM-slot."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende poging voordat SIM gesluit word."</item>
+    <item quantity="other" msgid="7530597808358774740">"Jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende pogings voordat SIM gesluit word."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Inkomender beller-ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinkroniseer"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Te veel <xliff:g id="CONTENT_TYPE">%s</xliff:g> uitgevee."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tablet se berging is vol. Vee \'n aantal lêers uit om spasie vry te maak."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Horlosieberging is vol! Vee \'n paar lêers uit om plek te maak."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Foon se berging is vol. Vee \'n aantal lêers uit om spasie vry te maak."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Netwerk kan dalk gemonitor word"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Deur \'n onbekende derde party"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Luitoestel aan"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Sit tans af…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Jou tablet gaan nou afskakel."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Jou horlosie gaan nou afskakel."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Jou foon gaan nou afsit."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Wil jy afskakel?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Herlaai na veilige modus"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegtuigmodus"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegtuigmodus is AAN"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegtuigmodus is AF"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Instellings"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Veiligmodus"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-stelsel"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"deïnstalleer kortpaaie"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Laat die program toe om Tuisskerm-kortpaaie te verwyder sonder gebruikerinmenging."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"herlei uitgaande oproepe"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Laat die program toe om uitgaande oproepe te verwerk en die nommer wat geskakel moet word te verander. Hierdie toestemming laat die program toe om uitgaande oproepe te monitor, herlei, of te voorkom."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Laat die program toe om te sien watter nommer tydens \'n uitgaande oproep geskakel word, met die opsie om die oproep na \'n ander nommer te herlei of die oproep heeltemal te beëindig."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"ontvang teksboodskappe (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Laat die program toe om SMS-boodskappe te ontvang en te verwerk. Dit beteken dat die program boodskappe wat na jou toestel gestuur is, kan monitor of uitvee, sonder dat jy dit gesien het."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"ontvang teksboodskappe (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Laat die program toe om die inhoud van die aktiewe venster op te haal. Kwaadwillige programme kan die hele venster se inhoud ophaal, en al die teks ondersoek, behalwe wagwoorde."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktiveer toeganklikheid tydelik"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Laat \'n program toe om toeganklikheid tydelik op die toestel te aktiveer. Kwaadwillige programme kan sonder die toestemming van die gebruiker toeganklikheid verkry."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"haal vensterinligting op"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Laat \'n program toe om inligting oor vensters vanaf die vensterbestuurder op te haal. Kwaadwillige programme kan moontlik inligting ophaal wat vir interne stelselgebruik bedoel is."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"haal vensterteken"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Laat \'n program toe om die vensterteken te gaan haal. Kwaadwillige programme kan dalk ongemagtigde interaksie met die programvenster uitvoer deur die stelsel te verpersoonlik."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"haal raamstatistiek"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Laat \'n program toe om raamstatistiek in te samel. Kwaadwillige programme kan dalk die raamstatistiek van vensters van ander programme af naboots."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filter gebeure"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Laat \'n program toe om \'n invoerfilter te registreer wat die stroom van alle gebruikergebeure filter voordat dit versend word. Kwaadwillige programme kan moontlik die stelsel-UI beheer sonder gebruikers se tussentrede."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"vergroot skerm"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Laat \'n program toe om die inhoud van \'n skerm te vergroot. Kwaadwillige programme kan die skerminhoud so omskep dat die toestel onbruikbaar word."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"gedeeltelike afskakeling"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Plaas die aktiwiteitbestuurder in \'n afsluitingstatus. Doen nie \'n volledige afsluiting nie."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"verhoed program-oorskakelings"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Laat die program toe om \'n kennisgewing uit te saai dat \'n SMS-boodskap ontvang is. Kwaadwillige programme kan dit dalk gebruik om inkomende SMS-boodskappe na te maak."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"stuur WAP-PUSH-ontvange uitsending"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Laat die program toe om \'n kennisgewing uit te saai dat \'n WAP PUSH-boodskap ontvang is. Kwaadwillige programme kan dit dalk gebruik om MMS-boodskap-ontvangsbewyse na te maak of die inhoud van enige webbladsy stilweg te vervang met kwaadwillige variante."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"stuur uitsending vir netwerktelling"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Laat die program toe om \'n kennisgewing uit te saai dat netwerke tellings moet kry. Nooit vir normale programme nodig nie."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"beperk hoeveelheid lopende prosesse"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Laat die program toe om die maksimum getal prosesse te beheer wat sal loop. Nooit nodig vir normale programme nie."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"dwing agtergrondprogramme om te sluit"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n VPN-diens te bind. Dit moet nooit vir normale programme nodig wees nie."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind aan \'n muurpapier"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n muurpapier te bind. Dit moet nooit vir normale programme nodig wees nie."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"verbind met \'n steminteraksiediens"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Laat die houer toe om met die topvlak-koppelvlak van \'n steminteraksiediens te verbind. Behoort nooit vir normale programme nodig te wees nie."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"koppel aan \'n afstandskerm"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Dit laat die houer toe om aan die top-koppelvlak van \'n afstandskerm te koppel. Behoort nooit vir gewone programme nodig te wees nie."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind aan \'n legstukdiens"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Dit laat die houer toe om aan die topvlak-koppelvlak van \'n legstuk-diens te bind. Dit moet nooit vir normale programme nodig wees nie."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"bind aan \'n roeteverskafferdiens"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Laat die houer toe om aan enige geregistreerde roeteverskaffers te bind. Behoort nooit vir normale programme nodig te wees nie."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"skakel met \'n toestel-admin"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Laat die houer toe om bedoelings na \'n toesteladministrateur te stuur. Dit moet nooit vir normale programme nodig wees nie."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"bind aan \'n TV-invoer"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Laat die houer toe om aan die topvlak-koppelvlak van \'n TV-invoer te bind. Behoort nooit vir gewone programme nodig te wees nie."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"voeg \'n toesteladministrateur by of verwyder een"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Laat die houer aktiewe toesteladministrateurs byvoeg of verwyder. Behoort nooit nodig te wees vir normale programme nie."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"verander skermoriëntasie"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Laat die program toe om enige geïnstalleer mediadekodeerder te gebruik om te kan dekodeer vir terugspeel."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"bestuur vertroude eiebewyse"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Laat die program CA-sertifikate as vertroude eiebewyse installeer en deïnstalleer."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"laat program gedurende ledige tyd loop"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Met hierdie toestemming kan die Android-stelsel die program in die agtergrond laat loop terwyl die toestel nie gebruik word nie."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"lees/skryf na bronne wat diag besit"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Laat die program toe om na enige hulpbron wat deur die diag-groep besit word, te skryf, byvoorbeeld lêers in /dev. Dit kan potensieel stelselstabiliteit en sekuriteit affekteer. Dit moet NET gebruik word vir hardewarespesifieke diagnose deur die vervaardiger of operateur."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"aktiveer of deaktiveer programkomponente"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Laat die program toe om persoonlike profielinligting  wat op jou toestel gestoor is, soos jou naam en kontakbesonderhede, te lees. Dit beteken dat die program jou kan identifiseer en jou profielinligting moontlik aan ander mense kan stuur."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"verander jou eie kontakkaart"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Laat die program toe om persoonlike profielinligting, soos jou naam en kontakinligting, wat op jou toestel gestoor is, te verander of daarby te voeg. Dit beteken dat die program jou kan identifiseer en moontlik jou profielinligting na ander mense kan stuur."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"liggaamsensors (soos hartklopmonitors)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Laat die program toe om toegang tot data te verkry vanaf sensors wat jy gebruik om te meet wat binne jou liggaam aangaan, soos hartklop."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lees jou sosiale stroom"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Laat die program toe om toegang tot sosiale opdaterings van jou en jou vriende te verkry en dit te sinkroniseer. Wees versigtig wanneer jy inligting deel -- dit laat die program toe om kommunikasie tussen jou en jou vriende op sosiale netwerke te lees, ongeag vertroulikheid. Let wel: hierdie toestemming mag dalk nie op alle sosiale netwerke afgedwing word nie."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skryf aan jou sosiale stroom"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Laat die program toe om SurfaceFlinger se laevlak-kenmerke te gebruik."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lees raambuffer"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Laat die program toe om die inhoud van die raambuffer te lees."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"kry toegang tot InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Laat die program toe om InputFlinger se laevlak-kenmerke te gebruik."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"stel Wi-Fi-skerms op"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Laat die program toe om Wi-Fi-skerms op te stel en daaraan te koppel."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"beheer Wi-Fi-skerms"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Laat die program toe om globale klankinstellings soos volume en watter luidspreker vir uitvoer gebruik word, te verander."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"neem klank op"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Laat die program toe om klank met die mikrofoon op te neem. Hierdie toestemming laat die program toe om klank te eniger tyd, sonder jou bevestiging, op te neem."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"sim-kommunikasie"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Laat die program toe om bevele na die SIM te stuur. Dit is baie gevaarlik."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"neem foto\'s en video\'s"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Laat die program toe om foto\'s en video\'s met die kamera te neem. Hierdie toestemming laat die program toe om die kamera te eniger tyd sonder jou bevestiging te gebruik."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"deaktiveer LED wat oordrag aandui wanneer kamera gebruik word"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Laat die program toe om die foonkenmerke van die toestel te beheer. \'n Program met hierdie toestemming kan tussen netwerke wissel, die foonradio aan en af skakel, en dies meer, sonder om jou ooit te laat weet."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lees foonstatus en identiteit"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Laat die program toe om toegang tot die foonfunksies van die toestel te verkry. Hierdie toestemming laat die program toe om te bepaal wat die foonnommer en toestel-IDs is, of die oproep aan die gang is, en die afgeleë nommer wat deur \'n oproep verbind word."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"lees presiese foonstate"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Gee die program toegang tot presiese foonstate. Hierdie toestemming laat die program toe om die werklike oproepstatus te bepaal, of \'n oproep aktief is en of dit in die agtergrond is. Dit kan ook mislukte oproepe, presiese dataverbindingstatus en mislukte dataverbindings bepaal."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"verhoed dat tablet slaap"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"verhoed foon om te slaap"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Laat die program toe om die tablet te keer om te slaap."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Verander WiMAX-status"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Laat die program toe om die tablet aan WiMAX-netwerke te koppel en daarvan te ontkoppel."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Laat die program toe om die foon aan WiMAX-netwerke te koppel en daarvan te ontkoppel."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"gee telling vir netwerke"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Laat die program toe om netwerke te gradeer en beïnvloed watter netwerke die tablet moet verkies."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Laat die program toe om netwerke te gradeer en beïnvloed watter netwerke die foon moet verkies."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"bind saam met Bluetooth-toestelle"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Laat die program toe om die opstelling van Bluetooth op die tablet te sien, en om verbindings met saamgebinde toestelle te maak en te aanvaar."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Laat die program toe om die opstelling van die Bluetooth op die foon te sien, en om verbindings met saamgebinde toestelle te maak en te aanvaar."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Laat die program toe om kennisgewings op te haal, te bestudeer en te verwyder, insluitende die kennisgewings wat deur ander programme geplaas is."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bind aan \'n kennisgewingluisteraardiens"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Laat die houer toe om aan die top-koppelvlak van \'n kennisgewingluisteraardiens te bind. Behoort nooit vir gewone programme nodig te wees nie."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"verbind met \'n toestandverskafferdiens"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Laat die houer toe om met die topvlak-koppelvlak van \'n toestandverskafferdiens te verbind. Behoort nooit vir normale programme nodig te wees nie."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"roep die opstellingprogram op wat deur die diensverskaffer voorsien is"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Laat die houer toe om die opstellingsprogram wat deur die diensverskaffer voorsien word, op te roep. Behoort nooit vir gewone programme nodig te wees nie."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"luister vir waarnemings oor netwerktoestande"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Laat \'n program luister vir waarnemings oor netwerktoestande. Behoort nooit nodig te wees vir normale programme nie."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"verander invoertoestelkalibrasie"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Laat die program toe om die kalibrasieparameters van die raakskerm te wysig. Dit behoort nooit vir normale programme nodig te wees nie."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"gaan in by DRM-sertifikate"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Laat \'n program toe om DRM-sertifikate op te stel en te gebruik. Behoort nooit vir normale programme nodig te wees nie."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Stel wagwoordreëls"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Beheer lengte en watter karakters wat in die skermontsluit-wagwoorde gebruik word."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Monitor pogings om skerm te ontsluit"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Tuis"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Werk"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Ander"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Geen program gekry om hierdie kontak te bekyk nie."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Voer PIN-kode in"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Voer PUK en nuwe PIN-kode in"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Laat \'n program toe om toegang tot keyguard se veilige berging te kry."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Beheer wys en versteek van keyguard"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Laat \'n program toe om keyguard te beheer."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Luister na vertrouenstaatveranderinge."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Laat \'n program toe om vir veranderinge in vertrouenstaat te luister."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Verbind met \'n vertrouensagentdiens"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Laat \'n program toe om met \'n vertrouensagentdiens te verbind."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Tree in wisselwerking met opdatering- en terugstellingstelsel"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Laat \'n program met die terugstellingstelsel en stelselopdaterings in wisselwerking tree."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Raak twee keer vir zoembeheer"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Kon nie legstuk byvoeg nie."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Gaan"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Muurpapier"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Verander muurpapier"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Kennisgewingluisteraar"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Toestandverskaffer"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN geaktiveer"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN is geaktiveer deur <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Raak om die netwerk te bestuur."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invoersleutel"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Kies \'n program"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Kon <xliff:g id="APPLICATION_NAME">%s</xliff:g> nie begin nie"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Deel met"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Deel met <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Skyfievatsel. Raak en hou."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Gly op vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Gly af vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Gly links vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Gly regs vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Ontsluit"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Klank aan"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Soek"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Sleep om te ontsluit."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Prop \'n kopfoon in om te hoor hoe wagwoordsleutels hardop gesê word."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punt."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Stelsel"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-oudio"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Draadlose skerm"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klaar"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Koppel aan toestel"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Saai skerm uit na toestel"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Soek tans vir toestelle…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Instellings"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Ontkoppel"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skandeer tans..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Koppel tans..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Beskikbaar"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Oorlegger #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", veilig"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Draadlose skerm is gekoppel"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Hierdie skerm word op \'n ander toestel gewys"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Skerm word tans uitgesaai"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Koppel tans aan <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Skerm word tans uitgesaai"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Gekoppel aan <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Ontkoppel"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Noodoproep"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Het jy die patroon vergeet?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ontsluit tans SIM-kaart…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Verkeerde PIN-kode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Tik \'n PIN in wat 4 tot 8 syfers lank is."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-kode moet 8 of meer syfers wees."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-kode moet 8 syfers wees."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Voer weer die korrekte PUK-kode in. Herhaalde pogings sal die SIM permanent deaktiveer."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-kodes stem nie ooreen nie"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Te veel patroonpogings"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Probeer weer oor <xliff:g id="COUNT">%d</xliff:g> sekondes"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Probeer later weer"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Sleep van bo af na onder om volskerm te verlaat."</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Swiep van bo af na onder om volskerm te verlaat."</string>
+    <string name="done_label" msgid="2093726099505892398">"Klaar"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Ure se sirkelglyer"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Minute se sirkelglyer"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Kies ure"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Kies minute"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Maandrooster van dae"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Jaarlys"</string>
+    <string name="select_day" msgid="7774759604701773332">"Kies maand en dag"</string>
+    <string name="select_year" msgid="7952052866994196170">"Kies jaar"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> gekies"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> uitgevee"</string>
 </resources>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index e64b6f5..04bfee5 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;ርዕስ አልባ&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -46,10 +68,15 @@
     <string name="badPin" msgid="9015277645546710014">"የተየበከው የድሮ ፒን ትክክል አይደለም።"</string>
     <string name="badPuk" msgid="5487257647081132201">"የተየብከው PUK ትክክል  አይደለም።"</string>
     <string name="mismatchPin" msgid="609379054496863419">"ያስገባሃቸው ፒኖች አይዛመዱም"</string>
-    <string name="invalidPin" msgid="3850018445187475377">"ከ4 እስከ 8 ቁጥሮች የያዘ PIN ተይብ"</string>
+    <string name="invalidPin" msgid="3850018445187475377">"ከ4 እስከ 8 ቁጥሮች የያዘ ፒን  ተይብ"</string>
     <string name="invalidPuk" msgid="8761456210898036513">"8 ወይም ከዛ በላይ የሆኑ ቁጥሮችንPUK ተይብ።"</string>
     <string name="needPuk" msgid="919668385956251611">"SIM ካርድዎ PUK-የተቆለፈ ነው።የPUK ኮዱን በመተየብ ይክፈቱት።"</string>
     <string name="needPuk2" msgid="4526033371987193070">" SIM ለመክፈት PUK2 ተይብ።"</string>
+    <string name="enablePin" msgid="209412020907207950">"አልተሳካም፣ የሲም/RUIM ቁልፍን አንቃ።"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"ሲምዎ ከመቆለፉ በፊት <xliff:g id="NUMBER">%d</xliff:g> ሙከራ ይቀርዎታል።"</item>
+    <item quantity="other" msgid="7530597808358774740">"ሲምዎ ከመቆለፉ በፊት <xliff:g id="NUMBER">%d</xliff:g> ሙከራዎች ይቀሩዎታል።"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"የገቢ ደዋይID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"ሥምሪያ"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"በጣም ብዙ <xliff:g id="CONTENT_TYPE">%s</xliff:g> ስርዞች።"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"የጡባዊ ተኮ ማከማቻ ሙሉ ነው! ቦታ ነፃ ለማድረግ አንዳንድ ፋይሎች ሰርዝ።"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"የእጅ ሰዓት ማከማቻ ሙሉ ነው። ቦታ ለማስለቀቅ አንዳንድ ፋይሎችን ይሰርዙ።"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"የስልክ ማከማቻ ሙሉ ነው! ቦታ ነፃ ለማድረግ አንዳንድ ፋይሎች ሰርዝ።"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"አውታረ መረብ በክትትል ውስጥ ሊሆን ይችላል"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"ባልታወቀ ሶስተኛ ወገን"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"መጥሪያ በርቷል"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"በመዝጋት ላይ..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"ጡባዊዎ ይዘጋል።"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"የእርስዎ የእጅ ሰዓት ይዘጋል።"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"ስልክዎ ይዘጋል።"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"ዘግተህ መውጣት  ትፈልጋለህ?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"በአስተማማኝ ኹነታ ውስጥ ዳግም አስጀምር"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"የአውሮፕላን ሁነታ"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"የአውሮፕላንሁነታ በርቷል"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"የአውሮፕላንሁነታ ጠፍቷል"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"ቅንብሮች"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"የሚያስተማምን ሁነታ"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android ስርዓት"</string>
@@ -175,7 +205,7 @@
     <string name="permgroupdesc_messages" msgid="7821999071003699236">"ኤስ ኤም ኤስህን፣ ኢሜይልህን እና ሌላ መልዕክቶችህን አንብብና ፃፍ።"</string>
     <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"የግል መረጃዎ"</string>
     <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"በእውቂያ ካርድህ ላይ ወደተከማቸ የአንተ መረጃ ቀጥተኛ መዳረሻ።"</string>
-    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ማህበራዊ መረጃህ"</string>
+    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ማህበራዊ መረጃዎ"</string>
     <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"ወደ የእውቂያዎችህና የማህበራዊ ግንኙነቶችህ መረጃ ቀጥተኛ መዳረሻ።"</string>
     <string name="permgrouplab_location" msgid="635149742436692049">"ስፍራዎ"</string>
     <string name="permgroupdesc_location" msgid="5704679763124170100">"ያለህበትን አካባቢ ተቆጣጠር።"</string>
@@ -205,7 +235,7 @@
     <string name="permgroupdesc_camera" msgid="2933667372289567714">"ለካሜራ ምስል ወይም ቪዲዮ ለመቅረጽ ቀጥተኛ መዳረሻ።"</string>
     <string name="permgrouplab_screenlock" msgid="8275500173330718168">"ማያ ገጽ ቆልፍ"</string>
     <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"በመሣሪያዎ ላይ ያለውን የመቆለፊያ ማያ ገጽ ባህሪያት ላይ ተጽዕኖ የመፍጠር ችሎታ።"</string>
-    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"የመተግበሪያዎችህ መረጃ"</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"የመተግበሪያዎችዎ መረጃ"</string>
     <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"በመሣሪያህ ላይ ያሉ የሌሎች መተግበሪያዎች ባህሪዎች ላይ ተፅዕኖ የማሳረፍ ችሎታ።"</string>
     <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"ልጣፍ"</string>
     <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"የመሣሪያውን ልጣፍ ቅንብሮች ቀይር።"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"አቋራጮችን ያራግፋል"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"መተግበሪያው ያለተጠቃሚ ጣልቃ-ገብነት የመነሻ ማያ ገጽ አቋራጮችን እንዲያስወግድ ያስችለዋል።"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"የወጪ ጥሪዎች አቅጣጫ ቀይር"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"መተግበሪያው ወጪ ጥሪዎችን እንዲያስኬድና የሚደወለውን ቁጥር እንዲቀይር ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው ወጪ ጥሪዎችን እንዲቆጣጠር፣ አቅጣጫ እንዲየስቀይር ወይም እንዲያግድ ይፈቅድለታል።"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"በወጪ ጥሪ ጊዜ ጥሪውን ወደተለየ ቁጥር ከማዞር ወይም ጥሪውን በአጠቃላይ ከመተው አማራጭ ጋር እየተደወለለት ያለውን ቁጥር እንዲያይ ያስችለዋል።"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"የፅሁፍ መልዕክቶችን ተቀበል (ኤስ.ኤም.ኤስ.)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"መተግበሪያው የኤስ.ኤም.ኤስ. መልእክቶችን እንዲያነብ እና እንዲያካሂድ ይፈቅዳል። ይህ ማለት መተግበሪያው ወደ መሳሪያህ የተላኩ መልእክቶችን ላንተ ሳያሳይህ ሊቆጣጠር ወይም ሊሰርዝ ይችላል።"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"የፅሁፍ መልዕክቶችን ተቀበል (ኤም.ኤም.ኤስ.)"</string>
@@ -264,15 +294,15 @@
     <string name="permdesc_sendSms" msgid="7094729298204937667">"መተግበሪያው የኤስ.ኤም.ኤስ. መልዕክቶችን እንዲልክ ይፈቅድለታል። ይህ ያልተጠበቁ ወጪዎችን ሊያስከትል ይችላል። ተንኮል አዘል መተግበሪያዎች ያላንተ ማረጋገጫ መልዕክቶችን በመላክ ገንዘብ ሊያስወጡህ ይችላሉ።"</string>
     <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"የበመልዕክት-በኩል-ምላሽ-ስጥ ክስተቶችን ይላኩ"</string>
     <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"መተግበሪያው ሌሎች የመልዕክት መላኪያ መተግበሪያዎች ለመጪ ጥሪዎች በመልዕክት-በኩል-ምላሽ-መስጠት ስራን እንዲይዙ ጥያቄዎች እንዲልክላቸው ያስችለዋል።"</string>
-    <string name="permlab_readSms" msgid="8745086572213270480">"የጽሑፍ መልዕክቶችህን አንብብ (ኤስ.ኤም.ኤስ. ወይም ኤም.ኤም.ኤስ.)"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"መገለጫው በጡባዊ ቱኮህ ወይም በSIM ካርድህ የተከማቹ የኤስ.ኤም.ኤስ. መልእክቶችን እንዲያነብ ይፈቅድለታል። ይህ መተግበሪያው ይዘት ወይም ሚስጥራዊነትን ከግምት ሳያስገባ ሁሉንም የኤስ.ኤም.ኤስ. መልእክቶች እንዲያነብ ይፈቅድለታል።"</string>
-    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"መገለጫው በስልክህ ወይም በSIM ካርድህ የተከማቹ የኤስ.ኤም.ኤስ. መልእክቶችን እንዲያነብ ይፈቅድለታል። ይህ መተግበሪያው ይዘት ወይም ሚስጥራዊነትን ከግምት ሳያስገባ ሁሉንም የኤስ.ኤም.ኤስ. መልእክቶች እንዲያነብ ይፈቅድለታል።"</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"የጽሑፍ መልዕክቶችዎን ያንብቡ (ኤስ.ኤም.ኤስ. ወይም ኤም.ኤም.ኤስ.)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"መገለጫው በጡባዊ ተኮዎ ወይም በSIM ካርድዎ የተከማቹ የኤስኤምኤስ. መልዕክቶችን እንዲያነብ ይፈቅድለታል። ይህ መተግበሪያው ይዘት ወይም ሚስጥራዊነትን ከግምት ሳያስገባ ሁሉንም የኤስኤምኤስ መልዕክቶች እንዲያነብ ይፈቅድለታል።"</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"መገለጫው በስልክዎ ወይም በSIM ካርድዎ የተከማቹ የኤስ.ኤም.ኤስ. መልዕክቶችን እንዲያነብ ይፈቅድለታል። ይህ መተግበሪያው ይዘት ወይም ሚስጥራዊነትን ከግምት ሳያስገባ ሁሉንም የኤስ.ኤም.ኤስ. መልዕክቶች እንዲያነብ ይፈቅድለታል።"</string>
     <string name="permlab_writeSms" msgid="3216950472636214774">"የጽሑፍ መልዕክቶችህን አርትዕ (ኤስ.ኤም.ኤስ. ወይም ኤም.ኤም.ኤስ.)"</string>
     <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"በጡባዊ ተኮህ ወይም ሲም ካርድህ ላይ ኤስ ኤም ኤስ መልዕክቶችን ለመፃፍ ለመተግበሪያው ይፈቅዳሉ፡፡መልዕክቶችህን ተንኮል አዘል መተግበሪያዎች ሊሰርዙ ይችላሉ፡፡"</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"በስልክህ ወይም ሲም ካርድህ ላይ ኤስ ኤም ኤስ መልዕክቶችን ለመፃፍ ለመተግበሪያው ይፈቅዳሉ፡፡መልዕክቶችህን ተንኮል አዘል መተግበሪያዎች ሊሰርዙ ይችላሉ፡፡"</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"በስልክዎ ወይም ሲም ካርድዎ ላይ ኤስ ኤም ኤስ መልዕክቶችን ለመፃፍ ለመተግበሪያው ይፈቅዳሉ። መልዕክቶችዎን ተንኮል አዘል መተግበሪያዎች ሊሰርዙ ይችላሉ።"</string>
     <string name="permlab_receiveWapPush" msgid="5991398711936590410">"የፅሁፍ መልዕክቶችን ተቀበል (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"መተግበሪያው የWAP መልእክቶችን እንዲያነብ እና እንዲያካሂድ ይፈቅዳል። ይህ ፈቃድ የተላኩልህን መልእክቶች ላንተ ሳያሳይህ የመቆጣጠር ወይም የመሰረዝ ብቃትን ያጠቃልላል።"</string>
-    <string name="permlab_getTasks" msgid="6466095396623933906">"አሂድ መተግበሪያዎችን ሰርስረህ አውጣ"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"መተግበሪያው የWAP መልዕክቶችን እንዲያነብ እና እንዲያካሂድ ይፈቅዳል። ይህ ፈቃድ የተላኩልዎን መልዕክቶች ለእርስዎ ሳያሳይዎ የመቆጣጠር ወይም የመሰረዝ ብቃትን ያጠቃልላል።"</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"አሂድ መተግበሪያዎችን ሰርስረው ያውጡ"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"መተግበሪያው በአሁኑ ጊዜና በቅርቡ እየተካሄዱ ስላሉ ተግባሮችን መረጃ ሰርስሮ እንዲያወጣ ይፈቅድለታል። ይህ መተግበሪያው በመሳሪያው ላይ የትኛዎቹ መተግበሪያዎች ጥቅም ላይ ስለመዋላቸው መረጃ እንዲያገኝ ሊፈቅድለት ይችላል።"</string>
     <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"በተለያዩ ተጠቃሚዎች መካከል መስተጋብር መፍጠር"</string>
     <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"መተግበሪያው በመሣሪያው ላይ በተለያዩ ተጠቃሚዎች ላይ እርምጃዎችን እንዲፈጽም ይፈቅድለታል። ተንኮል-አዘል መተግበሪያዎች ይህንን ተጠቅመው በተጠቃሚዎች መካከል ያለውን ጥበቃ ሊጥሱ ይችላሉ።"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"የነቃ መስኮት ይዘትን ለመበርበር ለመተግበሪያው ይፈቅዳሉ፡፡ ጠቅላላውን የመስኮት ይዘት ለመበርበር እና ከይለፍ ቃል በስተቀር ሁሉንም ጽሑፉን ለማየት ጎጂ መተግበሪያዎች ይችላሉ፡፡"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ተደራሽነት በጊዜያዊነት ያነቃል"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"አንድ መተግበሪያ በጊዜያዊነት በመሣሪያው ላይ ተደራሽነትን እንዲያነቃ ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ያለተጠቃሚው ፍቃድ ተደራሽነትን ሊያነቁ ይችላሉ።"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"የመስኮት መረጃን አምጣ"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"አንድ መተግበሪያ ከመስኮት አቀናባሪው ሆኖ ስለመስኮቱ መረጃ እንዲያመጣ ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ለውስጣዊ ስርዓት ጥቅም የታሰበ መረጃን ሊወስዱ ይችላሉ።"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"የመስኮት ማስመሰያ ሰርስሮ ያወጣል"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"አንድ መተግበሪያ የመስኮት ማስመሰያውን ሰርስሮ እንዲያወጣ ያስችላል። ተንኮል-አዘል ዌር ስርዓቱት በማስመሰል ከመተግበሪያው መስኮት ጋር ያልተፈቀደ መስተጋብር ሊፈጥሩ ይችላሉ።"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"የክፈፍ ስታቲስቲክሶችን ሰርስሮ ያወጣል"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"አንድ መተግበሪያ የክፈፍ ስታቲስቲክስን እንዲሰበስብ ያስችላል። ተንኮል-አዘል ዌር የሌሎች መተግበሪያዎች የክፈፍ ስታቲስቲክሶችን ሊመለከቱ ይችላሉ።"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"ክስተቶችን አጣራ"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"አንድ መተግበሪያ የሁሉንም ተጠቃሚዎች ክስተቶች ከመላካቸው በፊት እነሱን የሚያጣራ የግቤት ማጣሪያ እንዲመዘግብ ያስችለዋል። ተንኮል-አዘል መተግበሪያዎች ተጠቃሚው ጣልቃ ሳይገባ የስርዓቱን በይነገጽ ሊቆጣጠሩት ይችላሉ።"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ማሳያን አጉላ"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"አንድ መተግበሪያ የአንድ ማሳያ ይዘት እንዲያጎላ ይፈቅድለታል። ተንኮል-አዘል መተግበሪያዎች መሣሪያውን ከጥቅም ውጪ በሚያደርገው ሁኔታ የማሳያ ይዘቱ ሊለውጡት ይችላሉ።"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"ከፊል ዝጋ"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"የእንቅስቃሴውን አደራጅ ወደ ዝጋ ሁነታ አስቀምጥ።ሙሉ ለሙሉ ዝጋ አያከናውንም።"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"የትግበራ መቀያየርን ተከላከል"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"ኤስ ኤም ኤስ መልዕክት መቀበሉን ማሳወቂያ እንዲያሰራጭ ለመተግበሪያው ይፈቅዳሉ፡፡ መጪ ኤስ ኤም ኤስ መልዕክቶችን አመሳስሎ በማቅረብ  ተንኮል አዘል መተግበሪያዎች ይሄንን ሊጠቀሙበት ይችላሉ፡፡"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"የWAP-PUSH ደርስዋል ስርጭት ላክ"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"የWAP PUSH መልዕክት እንደተቀበለ ማሳወቂያ ለማሰራጨት ለመተግበሪያው ይፈቅዳሉ፡፡ ኤም ኤም ኤስ መልዕክት መቀበልን ለማስመሰል ወይም በተንኮል አዘል መሰሎች ለማንኛውም የድር ገፅ ይዘት በዝምታ ለመተካት ተንኮል አዘል መተግበሪያዎች ሊጠቀሙበት ይችላሉ፡፡"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ለአውታረ መረቦች የነጥብ ስጥ ስርጭት ይልካል"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"መተግበሪያው አውታረ መረቦች ነጥብ እንዲያዝለት የሚፈልጉት አንድ ማሳወቂያ እንዲያሰራጭ ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"የአሂድ ሂደቶችን ቁጥር ወስን"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"የሚሄዱ ሂደቶችን የመጨረሻ ቁጥር ለመቆጣጠር ለመተግበሪያው ይፈቅዳሉ፡፡ ለመደበኛ መተግበሪያዎች መቼም አያስፈልግም፡፡"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"የጀርባ መተግበሪያዎች እንዲዘጉ አስገድዳቸው"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"የVPN ግልጋሎትን ወደ ከፍተኛ-ደረጃ በየነ ገጽ ለማሳር ለመያዣው ይፈቅዳሉ፡፡ለተለመዱ መተግበሪያዎች አያስፈልግም፡፡"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"በልጣፍ ጠርዝ"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"ያዡ ግቤት ስልቱን ወደ ከፍተኛ-ደረጃ ልጣፍ ለመጠረዝ ይፈቅዳሉ። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"ከአንድ የድምጽ በይነተገናኝ ጋር ይሰሩ"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"ያዢው የአንድ የድምጽ በይነግንኙነት አገልግሎት የከፍተኛ ደረጃ በይነገጽ እንዲያስር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ከአንድ የርቀት ማሳያ ጋር ይጠርዛል"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"ያዢው ከአንድ የርቀት ማሳያ ከፍተኛ-ደረጃ በይነገጽ ጋር እንዲጠርዝ ይፈቅድለታል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ወደ ፍርግም አገልግሎት አያይዝ"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"ያዡ ግቤት ስልቱን ወደ ከፍተኛ-ደረጃ ፍርግም አገልግሎት ለመጠረዝ  ይፈቅዳሉ። ለመደበኛ ትግበራዎች በፍፁም አያስፈልግም።"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"ከመንገድ አቅራቢዎች አገልግሎት ጋር ያስተሳስሩ"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"አቃፊው ከማናቸውም የተመዘገቡ የመንገድ አቅራቢዎች ጋር እንዲተሳሰር ይፈቅድለታል። ለመደበኛ መተግበሪያዎች በጭራሽ ሊያስፈልግ አይገባም።"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ከመሣሪያ አስተዳደር ጋር ተገናኝ"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"ያዡ በይነመረብን ለመሣሪያ አስተዳዳሪ ለመላክ ይፈቅዳሉ። ለመደበኛ መተግበሪያዎች በፍፁም አያስፈልግም።"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"ከአንድ የቴሌቪዥን ግብዓት ጋር እሰር"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"ባለቤቱ ከአንድ የቴሌቪዥን ግብዓት ከፍተኛ-ደረጃ በይነገጽ ጋር እንዲያስር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"የመሣሪያ አስተዳዳሪ ያክሉ ወይም ያስወግዱ"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"ያዢው ንቁ የመሣሪያ አስተዳዳሪዎች እንዲያክል ወይም እንዲያስወግድ ያስችለዋል። ለመደበኛ መተግበሪያዎች ጭራሽ ሊያስፈልግ አይገባም።"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"የማያ ገፀ አቀማመጥን ለውጥ"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"ለመልሰህ አጫውት ፍታን በማንኛውም የተጫኑ በማህደረ መረጃ ዲኮደር ለመጠቀም  ለመተግበሪያ ይፈቅዳል።"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"የታመኑ ምስክርነቶችን ያስተዳድሩ"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"መተግበሪያው CA የምስክር ወረቀቶችን እንደሚታመኑ ምስክርነቶች አንዲጭን እና እንዲያራግፍ ይፍቀዱ።"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"ስራ በተፈታበት ጊዜ ላይ መተግበሪያውን አሂድ"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"ይህ ፍቃድ መሣሪያው ስራ ላይ ባልሆነ ጊዜ የAndroid ስርዓቱ መተግበሪያውን በጀርባ ውስጥ እንዲያሂደው ያስችለዋል።"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"በdiag ባለቤትነት ያሉ ንብረቶችን አንብብ/ፃፍ"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"በዲያግ ቡድን ባለቤትነት ወደ አለ ማንኛውም ንብረት ለምሳሌ በ/dev ያሉ ፋይሎች ለማንበብ እና ለመፃፍ ለመተግበሪያው ይፈቅዳሉ። ይህ በመሰረቱ የስርዓት መረጋጋትን እና ደህንነትን ሊጎዳ ይችላል። ይህ ውስን የሀርድዌር-ተኮር ዲያግኖስቲክስ በአምራቹ ወይም ከዋኙ ብቻ መሆን አለበት።"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"የመተግበሪያ ምንዝሮችን አንቃ ወይም አቦዝን"</string>
@@ -437,12 +479,12 @@
     <string name="permlab_broadcastSticky" msgid="7919126372606881614">"ልጥፍ ዝርዝር ላክ"</string>
     <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"መተግበሪያው ስርጭቱ ከተጠናቀቀ በኋላ የሚቀሩ አጣባቂ ስርጭቶችን እንዲልክ ይፈቅድለታል። ከልክ በላይ መጠቀም ጡባዊ ተኮው ብዙ ማህደረ ትውስታን እንዲጠቀም በማድረግ ቀርፋፋ ወይም ያልተረጋጋ ሊያደርገው ይችላል።"</string>
     <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"መተግበሪያው ስርጭቱ ከተጠናቀቀ በኋላ የሚቀሩ አጣባቂ ስርጭቶችን እንዲልክ ይፈቅድለታል። ከልክ በላይ መጠቀም ስልኩ ብዙ ማህደረ ትውስታን እንዲጠቀም በማድረግ ቀርፋፋ ወይም ያልተረጋጋ ሊያደርገው ይችላል።"</string>
-    <string name="permlab_readContacts" msgid="8348481131899886131">"እውቂያዎችህን አንብብ"</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"እውቂያዎችዎን ያንብቡ"</string>
     <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"መተግበሪያው በጡባዊ ተኮህ ስለተከማቹ ዕውቂያዎች ያሉትን ውሂቦች በሙሉ፤ ጥሪ ያደረግክበትን፣ ኢሜይል የላክበትን ወይም ከተወሰኑ ግለሰቦች ጋር በሌላ መንገድ የተገናኘህበትን ድግምግሞሽ ጨምሮ፣ እንዲያነብ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብህን እንዲያስቀምጡ የሚፈቅድላቸው ሲሆን ተንኮል አዘል መተግበሪያዎች የእውቂያህን ውሂብ ሳታውቀው ሊያጋሩት ይችላሉ።"</string>
-    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"መተግበሪያው በስልክህ ስለተከማቹ ዕውቂያዎች ያሉትን ውሂቦች በሙሉ፤ ጥሪ ያደረግክበትን፣ ኢሜይል የላክበትን ወይም ከተወሰኑ ግለሰቦች ጋር በሌላ መንገድ የተገናኘህበትን ድግምግሞሽ ጨምሮ፣ እንዲያነብ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብህን እንዲያስቀምጡ የሚፈቅድላቸው ሲሆን ተንኮል አዘል መተግበሪያዎች የእውቂያህን ውሂብ ሳታውቀው ሊያጋሩት ይችላሉ።"</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"መተግበሪያው በስልክዎ ስለተከማቹ ዕውቂያዎች ያሉትን ውሂቦች በሙሉ፤ ጥሪ ያደረጉበትን፣ ኢሜይል የላኩበትን ወይም ከተወሰኑ ግለሰቦች ጋር በሌላ መንገድ የተገናኙበትን ድግምግሞሽ ጨምሮ፣ እንዲያነብ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብዎን እንዲያስቀምጡ የሚፈቅድላቸው ሲሆን ተንኮል አዘል መተግበሪያዎች የእውቂያዎን ውሂብ ሳያውቁት ሊያጋሩት ይችላሉ።"</string>
     <string name="permlab_writeContacts" msgid="5107492086416793544">"ዕውቂያዎችዎን ያስተካክሉ"</string>
     <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"መተግበሪያው በጡባዊ ቱኮህ ስለተከማቹ የዕውቂያዎችህ ውሂብ በሙሉ፤ ጥሪ ያደረግክበትን፣ ኢሜይል የላክበትን ወይም ከተወሰኑ እውቂያዎች ጋር በሌላ መንገድ የተገናኘህበትን ድግምግሞሽ ጨምሮ፣ እንዲያስተካክል ይፈቅድለታል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብ እንዲሰርዙ ይፈቅድላቸዋል።"</string>
-    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"መተግበሪያው በስልክህ ስለተከማቹ የዕውቂያዎችህ ውሂብ በሙሉ፤ ጥሪ ያደረግክበትን፣ ኢሜይል የላክበትን ወይም ከተወሰኑ እውቂያዎች ጋር በሌላ መንገድ የተገናኘህበትን ድግምግሞሽ ጨምሮ፣ እንዲያስተካክል ይፈቅድለታል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብ እንዲሰርዙ ይፈቅድላቸዋል።"</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"መተግበሪያው በስልክዎ ስለተከማቹ የዕውቂያዎችዎ ውሂብ በሙሉ፤ ጥሪ ያደረጉበትን፣ ኢሜይል የላኩበትን ወይም ከተወሰኑ እውቂያዎች ጋር በሌላ መንገድ የተገናኙበትን ድግምግሞሽ ጨምሮ፣ እንዲያስተካክል ይፈቅድለታል። ይህ ፈቃድ መተግበሪያዎች የእውቂያ ውሂብ እንዲሰርዙ ይፈቅድላቸዋል።"</string>
     <string name="permlab_readCallLog" msgid="3478133184624102739">"የጥሪ ምዝግብ ማስታወሻን አንብብ"</string>
     <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"መተግበሪያው ስለገቢና ወጪ ጥሪዎች ያለ ውሂብን ጨምሮ የጡባዊ ተኮህን የጥሪ ምዝግብ ማስታወሻ እንዲያነብ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው የጥሪ ምዝግብ ማስታወሻ ውሂብህን እንዲያስቀምጥ የሚፈቅድለት ሲሆን ተንኮል አዘል መተግበሪያዎች ሳታውቀው የጥሪ ምዝግብ ማስታወሻ ውሂብህን ሊያጋሩት ይችላሉ።"</string>
     <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"መተግበሪያው ስለገቢና ወጪ ጥሪዎች ያለ ውሂብን ጨምሮ የስልክህን የጥሪ ምዝግብ ማስታወሻ እንዲያነብ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው የጥሪ ምዝግብ ማስታወሻ ውሂብህን እንዲያስቀምጥ የሚፈቅድለት ሲሆን ተንኮል አዘል መተግበሪያዎች ሳታውቀው የጥሪ ምዝግብ ማስታወሻ ውሂብህን ሊያጋሩት ይችላሉ።"</string>
@@ -450,25 +492,27 @@
     <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የጡባዊተኮህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
     <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"ስለ ገቢ እና ወጪ ጥሪዎችን ውሂብ ጨምሮ፣ የስልክህን ምዝግብ ማስታወሻ ለመቀየር ለመተግበሪያው ይፈቅዳል። ይሄንን ተንኮል አዘል መተግበሪያዎች የስልክህን ምዝግብ ማስታወሻ ለመሰረዝ ወይም ለመለወጥ ሊጠቀሙበት ይችላሉ።"</string>
     <string name="permlab_readProfile" msgid="4701889852612716678">"የራስህን የእውቂያ ካርድ አንብብ"</string>
-    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"መተግበሪያው ልክ እንደ ስምህ እና የእውቂያ መረጃህ ያሉ በመሳሪያህ ላይ የተከማቹ የግል መገለጫ መረጃዎችን እንዲያነብ ይፈቅድለታል። ይህም ማለት መተግበሪያው ለይቶ ሊያውቅህ እና የመገለጫ መረጃህን ለሌሎች ሊልክ ይችላል።"</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"መተግበሪያው ልክ እንደ ስምዎ እና የእውቂያ መረጃዎ ያሉ በመሳሪያዎ ላይ የተከማቹ የግል መገለጫ መረጃዎችን እንዲያነብ ይፈቅድለታል። ይህም ማለት መተግበሪያው ለይቶ ሊያውቁዎ እና የመገለጫ መረጃዎን ለሌሎች ሊልክ ይችላል።"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"የራስህን የዕውቂያ ካርድ አስተካክል"</string>
-    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"መተግበሪያው ልክ እንደ ስምህ እና የእውቂያ መረጃህ ያሉ በመሳሪያህ ላይ የተከማቹ የግል መገለጫ መረጃዎችን እንዲቀይር ወይም እንዲያክልባቸው ይፈቅድለታል። ይህም ማለት መተግበሪያው ለይቶ ሊያውቅህ እና የመገለጫ መረጃህን ለሌሎች ሊልክ ይችላል።"</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"መተግበሪያው ልክ እንደ ስምዎ እና የእውቂያ መረጃዎ ያሉ በመሳሪያዎ ላይ የተከማቹ የግል መገለጫ መረጃዎችን እንዲቀይር ወይም እንዲያክልባቸው ይፈቅድለታል። ይህም ማለት መተግበሪያው ለይቶ ሊያውቅዎ እና የመገለጫ መረጃዎን ለሌሎች ሊልክ ይችላል።"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"የሰውነት መመርመሪያዎች (እንደ የልብ ምት መቆጣጠሪያዎች)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"መተግበሪያው እርስዎ በሰውነትዎ ውስጥ እየተካሄዱ ያሉ እንደ የልብ ምት የመሳሰሉ ነገሮችን ለመለካት የሚጠቀሙበትን ውሂብ ከመመርመሪያዎቹ ላይ እንዲደርስ ይፈቅድለታል።"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"የአንተን ማህበራዊ የውይይት ክፍሎች አንብብ"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"መተግበሪያው የአንተንና የጓኞችህን ማህበራዊ ዝማኔዎችን እንዲደርስባቸው እና እንዲያመሳስላቸው ይፈቅድለታል። መረጃ ስታጋራ ተጠንቀቅ -- ይህ መተግበሪያው ሚስጥራዊነትን ከግምት ሳያስገባ በማህበራዊ አውታረ መረቦች በአንተ እና በጓደኞችህ መካከል የሚደረጉ ግንኙነቶችን እንዲያነብ ይፈቅድለታል። ማስታወሻ፦ ይህ ፈቃድ ለሁሉም ማህበራዊ አውታር መረቦች ላይ ላይፈጸም ይችላል።"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ወደ የአንተ  ማህበራዊ የውይይት ክፍሎች ጻፍ"</string>
     <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"መተግበሪያው ከጓኞችህን ማህበራዊ ዝማኔዎችን እንዲያሳይ ይፈቅድለታል። መረጃ ስታጋራ ተጠንቀቅ -- ይህ መተግበሪያው ከጓደኛ የመጡ የሚመስሉ መልእክቶችን እንዲያዘጋጅ ይፈቅድለታል። ማስታወሻ፦ ይህ ፈቃድ በሁሉም ማህበራዊ አውታረ መረቦች ላይ ላይፈጸም ይችላል።"</string>
     <string name="permlab_readCalendar" msgid="5972727560257612398">"የቀን መቁጠሪያ ክስተቶች ተጨማሪ ሚስጥራዊ መረጃ አንብብ"</string>
     <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"መተግበሪያው የጓደኞችን ወይም የስራ ባልደረቦችን ጨምሮ ሁሉንም በጡባዊ ቱኮህ ላይ የተከማቹ የቀን መቁጠሪያ ክስተቶች እንዲያነብ ይፈቅድለታል። ይህ መተግበሪያው የቀን መቁጠሪያ ውሂብህን ሚስጥራዊቱን ከግምት ሳያስገባ እንዲያጋራ ወይም እንዲያስቀምጥ ሊፈቅድለት ይችላል።"</string>
-    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"መተግበሪያው የጓደኞችን ወይም የስራ ባልደረቦችን ጨምሮ ሁሉንም በስልክህ ላይ የተከማቹ የቀን መቁጠሪያ ክስተቶች እንዲያነብ ይፈቅድለታል። ይህ መተግበሪያው የቀን መቁጠሪያ ውሂብህን ሚስጥራዊቱን ከግምት ሳያስገባ እንዲያጋራ ወይም እንዲያስቀምጥ ሊፈቅድለት ይችላል።"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"መተግበሪያው የጓደኞችን ወይም የስራ ባልደረቦችን ጨምሮ ሁሉንም በስልክዎ ላይ የተከማቹ የቀን መቁጠሪያ ክስተቶች እንዲያነብ ይፈቅድለታል። ይህ መተግበሪያው የቀን መቁጠሪያ ውሂብዎን ሚስጥራዊነቱን ከግምት ሳያስገባ እንዲያጋራ ወይም እንዲያስቀምጥ ሊፈቅድለት ይችላል።"</string>
     <string name="permlab_writeCalendar" msgid="8438874755193825647">"የቀን መቁጠሪያ ክስተቶችን ቀይር ወይም አክል እና ለእንግዶች ከባለቤቱ ዕውቅና ውጪ ላክ።"</string>
     <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"መተግበሪያው የጓደኞችህን እና የስራ ባልደረቦችህን ጨምሮ በጡባዊ ተኮህ ላይ ልታስተካክላቸው የምትችላቸውን ክስተቶች እንዲያክል፣ እንዲያስወግድ፣ እንዲለውጥ ይፈቅድለታል። ይህ መተግበሪያው ከቀን መቁጠሪያ ባለቤቶች የመጡ የሚመስሉ መልእክቶችን እንዲልክ ወይም ያለባለቤቱ እውቀት ክስተቶችን እንዲያስተካክል ሊፈቅድለት ይችላል።"</string>
-    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"መተግበሪያው የጓደኞችህን እና የስራ ባልደረቦችህን ጨምሮ በስልክህ ላይ ልታስተካክላቸው የምትችላቸውን ክስተቶች እንዲያክል፣ እንዲያስወግድ፣ እንዲለውጥ ይፈቅድለታል። ይህ መተግበሪያው ከቀን መቁጠሪያ ባለቤቶች የመጡ የሚመስሉ መልእክቶችን እንዲልክ ወይም ያለባለቤቱ እውቀት ክስተቶችን እንዲያስተካክል ሊፈቅድለት ይችላል።"</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"መተግበሪያው የጓደኞችዎን እና የስራ ባልደረቦችዎን ጨምሮ በስልክዎ ላይ ሊያስተካክሏቸው የሚችሏቸውን ክስተቶች እንዲያክል፣ እንዲያስወግድ፣ እንዲለውጥ ይፈቅድለታል። ይህ መተግበሪያው ከቀን መቁጠሪያ ባለቤቶች የመጡ የሚመስሉ መልዕክቶችን እንዲልክ ወይም ያለባለቤቱ እውቀት ክስተቶችን እንዲያስተካክል ሊፈቅድለት ይችላል።"</string>
     <string name="permlab_accessMockLocation" msgid="8688334974036823330">"ለሙከራ ጊዜያዊ ሥፍራ ፍጠር።"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"ለሙከራ የማስመሰል የመነሻ ምንጮችን ፍጠር ወይም አዲስ የአካባቢ አቅራቢ ጫን። ይህ መተግበሪያው አካባቢውን እና/ወይም እንደ GPS ወይም የአካባቢ አቅራቢዎች ባሉ ሌላ የመነሻ ምንጮች የተመለሱ ሁኔታዎችን ችላ እንዲል ይፈቅድለታል።"</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"ለሙከራ የጊዜያዊ የመነሻ ምንጮችን ይፍጠሩ ወይም አዲስ የአካባቢ አቅራቢ ይጫኑ። ይህ መተግበሪያው አካባቢውን እና/ወይም እንደ GPS ወይም የአካባቢ አቅራቢዎች ባሉ ሌላ የመነሻ ምንጮች የተመለሱ ሁኔታዎችን ችላ እንዲል ይፈቅድለታል።"</string>
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"ተጨማሪ ሥፍራ አቅራቢ ትዕዛዞችን ድረስ።"</string>
     <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"መተግበሪያው ተጨማሪ የአካባቢ አቅራቢ ትእዛዞችን እንዲደርስ ይፈቅድለታል። ይህ መተግበሪያው በGPS ወይም ሌላ የመነሻ ምንጮች ክወና ላይ ጣልቃ እንዲገባ ሊፈቅድለት ይችላል።"</string>
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"የሥፍራ አቅራቢ ለመጫን ፍቀድ"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"ለሙከራ የማስመሰል የመነሻ ምንጮችን ፍጠር ወይም አዲስ የአካባቢ አቅራቢ ጫን። ይህ መተግበሪያው አካባቢውን እና/ወይም እንደ GPS ወይም የአካባቢ አቅራቢዎች ባሉ ሌላ የመነሻ ምንጮች የተመለሱ ሁኔታዎችን ችላ እንዲል ይፈቅድለታል።"</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"ለሙከራ የጊዜያዊ የመነሻ ምንጮችን ይፍጠሩ ወይም አዲስ የአካባቢ አቅራቢ ይጫኑ። ይህ መተግበሪያው አካባቢውን እና/ወይም እንደ ጂፒኤስ ወይም የአካባቢ አቅራቢዎች ባሉ ሌላ የመነሻ ምንጮች የተመለሱ ሁኔታዎችን ችላ እንዲል ይፈቅድለታል።"</string>
     <string name="permlab_accessFineLocation" msgid="1191898061965273372">"ትክክለኛ አካባቢ (በጂ ፒ ኤስ እና አውታረ መረብ ላይ የተመሠረተ)"</string>
     <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"መተግበሪያው የእርስዎን አለምአቀፍ የመሬት አቀማመጥ ስርዓትን (ጂ ፒ ኤስ) ወይም እንደ የተንቀሳቃሽ ስልክ ማማዎች እና Wi-Fi ያሉ የአውታረ መረብ አካባቢ ምንጮችን ተጠቅሞ ትክክለኛ አካባቢዎትን እንዲያውቅ ያስችለዋል። መተግበሪያው እነዚህ የአካባቢ አገልግሎቶችን እንዲጠቀምባቸው እነሱ ሊበሩ እና ለመሣሪያዎ የሚገኙ መሆን አለባቸው። መተግበሪያዎች እርስዎ የት እንዳሉ ለማወቅ ይህንን ሊጠቀሙበት ይችላሉ፣ እና ተጨማሪ ባትሪ ሊፈጁ ይችላሉ።"</string>
     <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"ግምታዊ አካባቢ (በአውታረ መረብ ላይ የተመሰረተ)"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"መተግበሪያውን የSurfaceFlinger ዝቅተኛ ደረጃ ባህሪያትን ለመጠቀም ይፈቅዳል።"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"የንዑስ ክፈፍ ቋት አንብብ"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"የክፈፍ ቋት ይዘት ለማንበብ ለመተግበሪያው ይፈቅዳሉ።"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger ን መድረስ"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"መተግበሪያው ባለአነስተኛ የInputFlinger ባህሪያት እንዲጠቀም ይፈቅድለታል።"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"የWifi ማሳያዎችን አዋቅር"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"መተግበሪያው የWifi ማሳያዎችን እንዲያዋቅርና ከእነሱ ጋር እንዲገናኝ ይፈቅድለታል።"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"የWifi ማሳያዎችን ተቆጣጠር"</string>
@@ -493,9 +539,11 @@
     <string name="permdesc_mediaContentControl" msgid="1637478200272062">"መተግበሪያው የሚዲያ መልሰህ አጫውትን እንዲቆጣጠር እና የሚዲያ መረጃውን (ርእስ፣ ደራሲ...) እንዲደርስ ይፈቅድለታል።"</string>
     <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"የድምፅ ቅንብሮችን ለውጥ"</string>
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"መተግበሪያው አንደ የድምጽ መጠን እና ለውጽአት የትኛውን የድምጽ ማጉያ ጥቅም ላይ እንደዋለ የመሳሰሉ ሁለንተናዊ የድምጽ ቅንብሮችን እንዲያስተካክል ይፈቅድለታል።"</string>
-    <string name="permlab_recordAudio" msgid="3876049771427466323">"ኦዲዮ ቅዳ"</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"ኦዲዮ ይቅዱ"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"መተግበሪያው ድምጽን በማይክሮፎን እንዲቀዳ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው ያላንተ ማረጋገጫ በማንኛውም ጊዜ ድምጽ እንዲቀዳ ይፈቅድለታል።"</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"ፎቶዎች እና ቪዲዮዎች አንሳ"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"የሲም ግንኙነት"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"መተግበሪያው ትዕዛዞችን ወደ ሲሙ እንዲልክ ያስችለዋል። ይሄ በጣማ አደገኛ ነው።"</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"ፎቶዎች እና ቪዲዮዎች ያንሱ"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"መተግበሪያው በካሜራው ፎቶዎችንና ቪዲዮዎችን እንዲያነሳ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው ካሜራውን በማንኛውም ጊዜ ያላንተ ማረጋገጫ እንዲጠቀም ይፈቅድለታል።"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"ካሜራው ስራ ላይ ሲሆን የማስተላለፍ አመልካች ኤል ኢ ዲን ያሰናክሉ"</string>
     <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"ቀድሞ የተጫነ የስርዓት መተግበሪያ ካሜራውን አመላካች ኤል ኢ ዲ እንዳይጠቀም እንዲያሰናክል ያስችለዋል።"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"የመገልገያ መሳሪያውን የስልክ ባህሪያት ለመቆጣጠር ለመተግበሪያው ይፈቅዳል፡፡ ከዚህ ፍቃድ ጋር መተግበሪያ አውታረ መረቦችን ሊለውጥ ይችላል፤አንተን ምንም ሳያሳውቅ የስልኩን ሬድዮ አብራ እና አጥፋ እና የመሳሰሉትን ሊያበራ ይችላል፡፡"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"የስልክ ሁኔታና ማንነት አንብብ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"መተግበሪያው የመሳሪያውን የስልክ ባህሪያት ላይ እንዲደርስ ይፈቅድለታል። ይህ ፈቃድ መተግበሪያው የስልክ ቁጥሩን እና የመሳሪያውን መታወቂያዎች፣ ጥሪ የነቃ እንደሆነ፣ እና በጥሪ የተገናኘውን የሩቅ ቁጥር እንዲወስን ይፈቅድለታል።"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"ትክክለኛዎቹን የስልክ ሁኔታዎች ያነብባል"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"መተግበሪያው ትክክለኛዎቹ የስልክ ሁኔታዎችን እንዲደርስባቸው ያስችለዋል። ይህ ፍቃድ መተግበሪያው የእውነተኛ ጥሪው ሁኔታ፣ አንድ ጥሪ ገባሪ ወይም ጀርባ ላይ ይሁን፣ ያልተሳኩ ጥሪዎች፣ ትክክለኛው የውሂብ ግንኙነት ሁኔታ እና የውሂብ ግንኙነት አለመሳካቶችን እንዲያውቅ ያስችለዋል።"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ጡባዊ ከማንቀላፋት ተከላከል"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ስልክ ከማንቀላፋት ተከላከል"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ጡባዊውን ከመተኛት መከልከል ለመተግበሪያው ይፈቅዳሉ።"</string>
@@ -578,16 +628,16 @@
     <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">" የስልኩን ሰዓት መለወጥ ለመተግበሪያው ይፈቅዳሉ።"</string>
     <string name="permlab_accountManagerService" msgid="4829262349691386986">"እንደ አውርድአዸራጅአገልግሎት"</string>
     <string name="permdesc_accountManagerService" msgid="1948455552333615954">" ወደ መለያ አረጋጋጮች ጥሪ ለማድረግ ለመተግበሪያ ይፈቅዳሉ።"</string>
-    <string name="permlab_getAccounts" msgid="1086795467760122114">"መሣሪያው ላይ ያሉ መለያዎችን አግኝ"</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"መሣሪያው ላይ ያሉ መለያዎችን ያግኙ"</string>
     <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"መተግበሪያው በጡባዊ ተኮው የሚታወቁትን መለያዎች ዝርዝር እንዲያገኝ ይፈቅድለታል። ይህ በጫንዋቸው ማናቸውም መተግበሪያዎች የተፈጠሩ መለያዎችን ሊያጠቃልል ይችላል።"</string>
     <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"መተግበሪያው በስልኩ የሚታወቁትን መለያዎች ዝርዝር እንዲያገኝ ይፈቅድለታል። ይህ በጫንዋቸው ማናቸውም መተግበሪያዎች የተፈጠሩ መለያዎችን ሊያጠቃልል ይችላል።"</string>
     <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"መለያዎችን ፍጠርና የይለፍ ቃላትን አስቀምጥ"</string>
     <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"የመለያ አረጋጋጭ መለያ መናጅ ችሎታን ለመጠቀም፣ መለያ መፍጠር እና የይለፍ ቃሎችን ለማግኘት እና ለማቀናጀት አክሎ ለመተግበሪያው ይፈቅዳሉ ።"</string>
-    <string name="permlab_manageAccounts" msgid="4983126304757177305">"መለያዎችን አክል ወይም አስወግድ"</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"መለያዎችን ያክሉ ወይም ያስወግዱ"</string>
     <string name="permdesc_manageAccounts" msgid="8698295625488292506">"መለያዎችን እንደ ማከል እና ማስወገድ ክወናዎችን እና የይለፍ ቃልን መሰረዝ ለማከናወን ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
-    <string name="permlab_useCredentials" msgid="235481396163877642">"በመሣሪያው ላይ ያሉ መለያዎችን ተጠቀም"</string>
+    <string name="permlab_useCredentials" msgid="235481396163877642">"በመሣሪያው ላይ ያሉ መለያዎችን ይጠቀሙ"</string>
     <string name="permdesc_useCredentials" msgid="7984227147403346422">"የማረጋገጫ የምስጋና የምስክር ወረቀትን ለመጠየቅ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
-    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"የአውታረ መረብ ግኑኝነቶችን እይ"</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"የአውታረ መረብ ግንኙነቶችን ይመልከቱ"</string>
     <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"መተግበሪያው እንደ የትኛዎቹ አውታረ መረቦች እንዳሉ እና እንደተገናኙ ያሉ የአውታረ መረብ ግንኙነቶች መረጃዎችን እንዲያይ ይፈቅድለታል።"</string>
     <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"ሙሉ የአውታረ መረብ መዳረሻ"</string>
     <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"መተግበሪያው የአውታረ መረብ መሰኪያዎችን እንዲፈጥር እና ብጁ የአውታረ መረብ ፕሮቶኮሎችን እንዲጠቀም ይፈቅድለታል። አሳሹ እና ሌሎች መተግበሪያዎች ውሂብ ወደ በይነመረብ የመላኪያ መንገዶችን ስለሚያቀርቡውሂብ ወደ በይነመረብ ለመላክ ይህ ፍቃድ አያስፈልግም።"</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"የWiMAX ሁኔታ ለውጥ"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"መተግበሪያው ጡባዊ ተኮውን ከWiMAX አውታረ መረብ ጋር እንዲያገናኝና እንዲያለያይ ይፈቅድለታል።"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"መተግበሪያው ስልኩን ከWiMAX አውታረ መረብ ጋር እንዲያገናኝና እንዲያለያይ ይፈቅድለታል።"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ለአውታረ መረቦች ነጥብ ይሰጣል"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"መተግበሪያው ለአውታረ መረቦች ደረጃ እንዲሰጥ እና ጡባዊው የትኛዎቹን አውታረ መረቦች እንደሚመርጥ ላይ ተጽዕኖ እንዲያሳርፍ ያስችለዋል።"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"መተግበሪያው ለአውታረ መረቦች ደረጃ እንዲሰጥ እና ስልኩ የትኛዎቹን አውታረ መረቦች እንደሚመርጥ እና ላይ ተጽዕኖ እንዲያሳርፍ ያስችለዋል።"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"ከብሉቱዝ መሣሪያዎች ጋር ተጣመር"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"መተግበሪያው በጡባዊ ተኮው ላይ ያለውን የብሉቱዝ ውቅር እንዲያይ እና ከተጣመሩ መሳሪያዎች ጋር ግንኙነቶችን እንዲያደርግና እንዲቀበል ይፈቅድለታል።"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"መተግበሪያው በስልኩ ላይ ያለውን የብሉቱዝ ውቅር እንዲያይ እና ከተጣመሩ መሳሪያዎች ጋር ግንኙነቶችን እንዲያደርግና እንዲቀበል ይፈቅድለታል።"</string>
@@ -638,7 +691,7 @@
     <string name="permdesc_readDictionary" msgid="659614600338904243">"መተግበሪያው ተጠቃሚው በተጠቃሚው መዝገበ-ቃላት አከማችቷቸው ሊሆኑ የሚችሉ ሁሉንም ቃላት፣ ስሞችና ሐረጋት እንዲያነባቸው ይፈቅድለታል።"</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"በተጠቃሚ በተገለጸ መዝገበ ቃላት ላይ ቃላትን ያክላል"</string>
     <string name="permdesc_writeDictionary" msgid="8185385716255065291">"በተጠቃሚ መዝገበ ቃላት ውስጥ አዲስ ቃል እንዲጽፍ ለመተግበሪያው ይፈቅዳሉ፡፡"</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"የUSB ማከማቻህን ይዘቶች አንብብ"</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"የUSB ማከማቻዎን ይዘቶች ያንብቡ"</string>
     <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"የSD ካርድህን ይዘቶች አንብብ"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"መተግበሪያው የእርስዎ USB ማከማቻ ይዘቶችን እንዲያነብ ያስችለዋል።"</string>
     <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"መተግበሪያው የእርስዎ SD ካርድ ይዘቶችን እንዲያነብ ያስችለዋል።"</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"መተግበሪያው ማሳወቂያዎችን እንዲያስመጣ፣ እንዲመረምር እና እንዲያጸዳ ያስችለዋል፣ በሌሎች መተግበሪያዎች የተለጠፉትንም ጨምሮ።"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ከአንድ የማሳወቂያ አዳማጭ አገልግሎት ጋር ይሰሩ"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"ያዢው የማሳወቂያ አዳማጭ አገልግሎቱን ከከፍተኛ-ደረጃ በይነገጹ ጋር እንዲያስር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"ከአንድ የሁኔታ አቅራቢ አገልግሎት ጋር ይሰሩ"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"ያዢው የአንድ የሁኔታ አቅራቢ አገልግሎት የከፍተኛ ደረጃ በይነገጽ እንዲያስር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"በድምጸ-ተያያዥ ሞደም የቀረበው የውቅር መተግበሪያውን መጥራት"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"ያዢው በድምጸ-ተያያዥ ሞደም የቀረበው የውቅር መተግበሪያውን እንዲጠራው ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አያስፈልግም።"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"በአውታረ መረብ ሁኔታዎች ላይ የተስተዋሉ ነገሮችን ያዳምጣል"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"አንድ መተግበሪያ በአውታረ መረብ ሁኔታዎች ላይ የተስተዋሉ ነገሮችን እንዲያዳምጥ ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ አስፈላጊ ሊሆን አይገባም።"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"የግቤት መሣሪያ ማስተካከያ ቀይር"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"መተግበሪያው የማያ ንካ የማስተካከያ ልኬቶቹን እንዲቀይር ያስችለዋል። ለመደበኛ መተግበሪያዎች በጭራሽ ሊያስፈልግ አይገባም።"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"የDRM የምስክር ወረቀቶች ላይ ይድረሱ"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"አንድ መተግበሪያ የDRM የምስክር ወረቀቶችን እንዲሰጥና እንዲጠቀም ያስችላል። ለመደበኛ መተግበሪያዎች በፍጹም አስፈላጊ አይሆንም።"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"የይለፍ ቃል ደንቦች አዘጋጅ"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"በማያ-መክፈት የተፈቀዱ የይለፍ ቃል ርዝመት እና ቁምፊዎች ተቆጣጠር።"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"የማሳያ-ክፈት ሙከራዎችን አሳይ"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"መነሻ"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"ስራ"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"ሌላ"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"ምንም መተግበሪያ ይህንን እውቂያ ለመመልከት አልተገኘም።"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"ፒን ኮድ ተይብ"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK እና አዲስ ፒን ተይብ"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"የPUK ኮድ"</string>
@@ -816,7 +876,7 @@
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"የይለፍ ቃል ለመተየብ ንካ"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"ለመክፈት የይለፍ ቃል ተይብ"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"ለመክፈት ፒን ተይብ"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ትክክል ያልሆነ PIN ኮድ።"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ትክክል ያልሆነ ፒን  ኮድ።"</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"ለመክፈት፣ምናሌ ተጫን ከዛ 0"</string>
     <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"የአደጋ ጊዜቁጥር"</string>
     <string name="lockscreen_carrier_default" msgid="8963839242565653192">"ከአገልግሎት መስጫ ክልል ውጪ"</string>
@@ -959,7 +1019,7 @@
     <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"ይዘት አቅራቢዎችን በውጭ በኩል ድረስባቸው"</string>
     <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"ያዢውን ከቀፎው ወደሚመጡ የይዘት አቅራቢዎች እንዲደርስ ይፈቅድለታል። ለመደበኛ መተግበሪያዎች በፍጹም ማስፈለግ የለባቸውም።"</string>
     <string name="permlab_updateLock" msgid="3527558366616680889">"ራስ-ሰር የመሳሪያ መሻሻሎች አታበረታታ"</string>
-    <string name="permdesc_updateLock" msgid="1655625832166778492">"ያዢው መሳሪያው ለማሻሻል መቼ መስተጋብራዊ ያልሆነ ዳግም ማስጀመር ቢደረግ ጥሩ ጊዜ እንደሆነ መረጃ ለስርዓቱ መረጃ እንዲያቀርብለት ያስችለዋል።"</string>
+    <string name="permdesc_updateLock" msgid="1655625832166778492">"ያዢው መሳሪያው ለማላቅ መቼ መስተጋብራዊ ያልሆነ ዳግም ማስጀመር ቢደረግ ጥሩ ጊዜ እንደሆነ መረጃ ለስርዓቱ መረጃ እንዲያቀርብለት ያስችለዋል።"</string>
     <string name="save_password_message" msgid="767344687139195790">"አሳሹ ይህን ይለፍ ቃል እንዲያስታወስ ይፈልጋሉ?"</string>
     <string name="save_password_notnow" msgid="6389675316706699758">"አሁን አይደለም"</string>
     <string name="save_password_remember" msgid="6491879678996749466">"አስታውስ"</string>
@@ -974,12 +1034,12 @@
     <string name="search_go" msgid="8298016669822141719">"ፍለጋ"</string>
     <string name="searchview_description_search" msgid="6749826639098512120">"ፍለጋ"</string>
     <string name="searchview_description_query" msgid="5911778593125355124">"ጥያቄ ፍለጋ"</string>
-    <string name="searchview_description_clear" msgid="1330281990951833033">"ጥያቄ አጥራ"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"ጥያቄ አጽዳ"</string>
     <string name="searchview_description_submit" msgid="2688450133297983542">"ጥያቄ አስረክብ"</string>
     <string name="searchview_description_voice" msgid="2453203695674994440">"የድምፅ ፍለጋ"</string>
     <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"በመንካት አስስ ይንቃ?"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>  ማሰስን በንኪ ማንቃት ይፈልጋል። አስስ በንኪ በሚበራበት ጊዜ፣ ከጡባዊ ተኮው ጋር ለመግባባት ምን በጣትህ ስር ወይም ምልክቶችን ማከናወን እንዳለብህ ማብራሪያ ልታይ ወይም ልትሰማ ትችላለህ።"</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>  ማሰስን በንኪ ማንቃት ይፈልጋል። አስስ በንኪ በሚበራበት ጊዜ፣ ከስልኩ ጋር ለመግባባት ምን በጣትህ ስር ወይም ምልክቶችን ማከናወን እንዳለብህ ማብራሪያ ልታይ ወይም ልትሰማ ትችላለህ።"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>  ማሰስን በንኪ ማንቃት ይፈልጋል። አስስ በንኪ በሚበራበት ጊዜ፣ ከጡባዊ ተኮው ጋር ለመግባባት ምን በጣትዎ ስር ወይም ምልክቶችን ማከናወን እንዳለብዎ ማብራሪያ ሊመለከቱ ወይም ሊሰሙ ይችላሉ።"</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>  ማሰስን በንኪ ማንቃት ይፈልጋል። አስስ በንኪ በሚበራበት ጊዜ፣ ከስልኩ ጋር ለመግባባት ምን በጣትዎ ስር ወይም ምልክቶችን ማከናወን እንዳለብዎ ማብራሪያ ሊመለከቱ ወይም ሊሰሙ ይችላሉ።"</string>
     <string name="oneMonthDurationPast" msgid="7396384508953779925">"ከ1 ወር በፊት"</string>
     <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"ከ1 ወር በፊት"</string>
   <plurals name="num_seconds_ago">
@@ -1107,9 +1167,9 @@
     <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> እያሄደ ነው"</string>
     <string name="app_running_notification_text" msgid="4653586947747330058">"ተጨማሪ መረጃ ለማግኘት ወይም መተግበሪያውን ለማቆም ይንኩ።"</string>
     <string name="ok" msgid="5970060430562524910">"እሺ"</string>
-    <string name="cancel" msgid="6442560571259935130">"ሰርዝ"</string>
+    <string name="cancel" msgid="6442560571259935130">"ይቅር"</string>
     <string name="yes" msgid="5362982303337969312">"እሺ"</string>
-    <string name="no" msgid="5141531044935541497">"ሰርዝ"</string>
+    <string name="no" msgid="5141531044935541497">"ይቅር"</string>
     <string name="dialog_alert_title" msgid="2049658708609043103">"ትኩረት"</string>
     <string name="loading" msgid="7933681260296021180">"በመጫን ላይ…"</string>
     <string name="capital_on" msgid="1544682755514494298">"በ"</string>
@@ -1211,7 +1271,7 @@
     <string name="sms_short_code_details" msgid="3492025719868078457">"ይሄ በተንቀሳቃሽ ስልክ መለያዎ ላይ "<font fgcolor="#ffffb060">"ክፍያዎችን ሊያስከትል ይችላል"</font>"።"</string>
     <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"ይሄ በተንቀሳቃሽ ስልክ መለያዎ ላይ ክፍያዎችን ያስከትላል።"</font></string>
     <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"ላክ"</string>
-    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"ሰርዝ"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"ይቅር"</string>
     <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"ምርጫዬን አስታውስ"</string>
     <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"ይሄንን በኋላ ላይ በቅንብሮች &gt; መተግበሪያዎች ውስጥ ሊቀይሩት ይችላሉ"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"ሁልጊዜ ፍቀድ"</string>
@@ -1225,7 +1285,7 @@
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"ጊዜ አዘጋጅ"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"ውሂብ አዘጋጅ"</string>
     <string name="date_time_set" msgid="5777075614321087758">"አዘጋጅ"</string>
-    <string name="date_time_done" msgid="2507683751759308828">"ተጠናቋል"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"ተከናውኗል"</string>
     <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"አዲስ፦ "</font></string>
     <string name="perms_description_app" msgid="5139836143293299417">"በ<xliff:g id="APP_NAME">%1$s</xliff:g> የቀረበ።"</string>
     <string name="no_permissions" msgid="7283357728219338112">"ምንም ፍቃዶች አይጠየቁም"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"አንድ መተግበሪያ ደህንነቱ በቁልፍ የተጠበቀ ማከማቻ እንዲደርስ ያስችለዋል።"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"የቁልፍ መጠበቂያውን ማሳየት እና መደበቅ ይቆጣጠሩ"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"አንድ መተግበሪያ የቁልፍ መጠበቂያውን እንዲቆጣጠር ያስችለዋል።"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"የተአማኒነት ሁኔታ ለውጦችን አዳምጥ።"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"መተግበሪያው በተአማኒነት ሁኔታ ውስጥ ለውጦችን እንዲያዳምጥ ይፈቅዳል።"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ለተአማኒነት ወኪል አገልግሎት ተገዢ አድርግ"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"ለመተግበሪያን የተአማኒነት ወኪል አገልግሎትን እንዲያከብር ይፈቅዳል።"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"ከዝማኔዎች እና ከመልሶ ማግኛ ስርዓቶች ጋር ይገናኙ"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"መተግበሪያው ከመልሶ ማግኛ ስርዓት እና ከስርዓት ማዘመኛዎች ጋር እንዲገናኝ ይፈቅድለታል።"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ለአጉላ መቆጣጠሪያ ሁለት ጊዜ ነካ አድርግ"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ምግብር ማከል አልተቻለም።"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"ሂድ"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"ልጣፍ"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"ልጣፍ ለውጥ"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"ማሳወቂያ አዳማጭ"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"የሁኔታ አቅራቢ"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN ነቅቷል።"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN በ<xliff:g id="APP">%s</xliff:g>ገብሯል"</string>
     <string name="vpn_text" msgid="3011306607126450322">"አውታረመረብ ለማደራጀት  ንካ።"</string>
@@ -1407,25 +1474,17 @@
     <string name="date_picker_increment_year_button" msgid="6318697384310808899">"ዓመት ጨምር"</string>
     <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"ዓመት ቀንስ"</string>
     <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ተወው"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ይቅር"</string>
     <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"ሰርዝ"</string>
     <string name="keyboardview_keycode_done" msgid="1992571118466679775">"ተከናውኗል"</string>
     <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ሞድ ለውጥ"</string>
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ቀይር"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"አስገባ"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"መተግበሪያ ምረጥ"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>ን ማስጀመር አልተቻለም"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"ተጋራ ከ"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"ከ <xliff:g id="APPLICATION_NAME">%s</xliff:g> ጋር ተጋራ"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"ባለስላይድ መያዣ፡፡ ዳስ&amp;ያዝ፡፡"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ላይ አንሸራትት።"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ታች አንሸራትት።"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ግራ አንሸራትት።"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ቀኝ አንሸራትት።"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"ክፈት"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"ካሜራ"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"ፀጥታ"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"ድምፅ አብራ"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"ፍለጋ"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"ላለመቆለፍ አንሸራት፡፡"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"የይለፍ ቃል ቁልፎች  ሲነገሩ ለመስማት የጆሮ ማዳመጫ ሰካ።"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"ነጥብ."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"ስርዓት"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"የብሉቱዝ ድምጽ"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"ገመድ አልባ ማሳያ"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"ተከናውኗል"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"የሚዲያ ውጽዓት"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"ከመሳሪያ ጋር ያገናኙ"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"ማያ ገጽን ወደ መሣሪያ ይውሰዱ"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"መሳሪያዎችን በመፈለግ ላይ…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"ቅንብሮች"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"ግንኙነት አቋርጥ"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"በመቃኘት ላይ..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"በማገናኘት ላይ..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"የሚገኙ"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ተደራቢ #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>፦ <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>፣ <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"፣ የተጠበቀ"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"ገመድ አልባ ማሳያ ተገናኝቷል"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"ይህ ማያ ገጽ በሌላ መሣሪያ ላይ እያሳየ ነው"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"ማያ ገጽን በመውሰድ ላይ"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"ከ<xliff:g id="NAME">%1$s</xliff:g> ጋር በመገናኘት ላይ"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"ማያ ገጽን በመውሰድ ላይ"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"ከ<xliff:g id="NAME">%1$s</xliff:g> ጋር ተገናኝቷል"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"ግንኙነት አቋርጥ"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"የአደጋ ጊዜ ጥሪ"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ስርዓተ ጥለቱን እርሳ"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"ሲም ካርዱን በመክፈት ላይ…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"ትክክል ያልሆነ ፒን ኮድ።"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ከ4 እስከ 8 ቁጥሮች የያዘ ፒን ይተይቡ።"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"የPUK ኮድ 8 ወይም ከዚያ በላይ ቁጥሮች ሊኖረው ይገባል።"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"የፒዩኬ ኮድ 8 ቁጥሮች ነው መሆን ያለበት።"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"ትክክለኛውን የPUK ኮድ እንደገና ያስገቡ። ተደጋጋሚ ሙከራዎች ሲም ካርዱን እስከመጨረሻው ያሰናክሉታል።"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"ፒን ኮዶች አይገጣጠሙም"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"በጣም ብዙ የስርዓተ ጥለት ሙከራዎች"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"ቆይተው እንደገና ይሞክሩ"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"ከሙሉ ገጽ ማያ ለመውጣት ጣትዎን ከላይ ወደታች ያንሸራትቱ።"</string>
+    <string name="done_label" msgid="2093726099505892398">"ተከናውኗል"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"የሰዓታት ክብ ተንሸራታች"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"የደቂቃዎች ክብ ተንሸራታች"</string>
+    <string name="select_hours" msgid="6043079511766008245">"ሰዓታትን ይምረጡ"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"ደቂቃዎችን ይምረጡ"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"የቀናት የወር ፍርግርግ"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"የዓመት ዝርዝር"</string>
+    <string name="select_day" msgid="7774759604701773332">"ወር እና ቀን ይምረጡ"</string>
+    <string name="select_year" msgid="7952052866994196170">"ዓመት ይምረጡ"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> ተመርጧል"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> ተሰርዟል"</string>
 </resources>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 2d91e28..83168e4 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -27,14 +27,36 @@
     <string name="terabyteShort" msgid="231613018159186962">"تيرابايت"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"بيتابايت"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="untitled" msgid="4638956954852782576">"&lt;بلا عنوان&gt;"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
+    <string name="untitled" msgid="4638956954852782576">"‏&lt;بلا عنوان&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(ليس هناك رقم هاتف)"</string>
     <string name="unknownName" msgid="2277556546742746522">"(غير معروف)"</string>
     <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"البريد الصوتي"</string>
     <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
-    <string name="mmiError" msgid="5154499457739052907">"حدثت مشكلة في الاتصال أو أن كود MMI غير صحيح."</string>
+    <string name="mmiError" msgid="5154499457739052907">"‏حدثت مشكلة في الاتصال أو أن كود MMI غير صحيح."</string>
     <string name="mmiFdnError" msgid="5224398216385316471">"تم تقييد التشغيل لأرقام الاتصال الثابت فقط."</string>
     <string name="serviceEnabled" msgid="8147278346414714315">"تم تمكين الخدمة."</string>
     <string name="serviceEnabledFor" msgid="6856228140453471041">"تم تمكين الخدمة لـ:"</string>
@@ -42,23 +64,28 @@
     <string name="serviceRegistered" msgid="6275019082598102493">"تم التسجيل بنجاح."</string>
     <string name="serviceErased" msgid="1288584695297200972">"لم يتم المسح بنجاح."</string>
     <string name="passwordIncorrect" msgid="7612208839450128715">"كلمة مرور غير صحيحة."</string>
-    <string name="mmiComplete" msgid="8232527495411698359">"اكتمل MMI."</string>
-    <string name="badPin" msgid="9015277645546710014">"رقم التعريف الشخصي القديم الذي كتبته غير صحيح."</string>
-    <string name="badPuk" msgid="5487257647081132201">"رمز PUK الذي كتبته غير صحيح."</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"‏اكتمل MMI."</string>
+    <string name="badPin" msgid="9015277645546710014">"‏رمز PIN القديم الذي كتبته غير صحيح."</string>
+    <string name="badPuk" msgid="5487257647081132201">"‏رمز PUK الذي كتبته غير صحيح."</string>
     <string name="mismatchPin" msgid="609379054496863419">"أرقام التعريف الشخصية التي كتبتها غير مطابقة."</string>
     <string name="invalidPin" msgid="3850018445187475377">"اكتب رقم تعريف شخصيًا مكونًا من 4 إلى ثمانية أعداد."</string>
-    <string name="invalidPuk" msgid="8761456210898036513">"اكتب رمز PUK مكونًا من 8 أرقام أو أكثر."</string>
-    <string name="needPuk" msgid="919668385956251611">"بطاقة SIM مؤمّنة بكود PUK. اكتب كود PUK لإلغاء تأمينها."</string>
-    <string name="needPuk2" msgid="4526033371987193070">"اكتب PUK2 لإلغاء تأمين بطاقة SIM."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"‏اكتب رمز PUK مكونًا من 8 أرقام أو أكثر."</string>
+    <string name="needPuk" msgid="919668385956251611">"‏بطاقة SIM مؤمّنة بكود PUK. اكتب كود PUK لإلغاء تأمينها."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"‏اكتب PUK2 لإلغاء تأمين بطاقة SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"‏محاولة غير ناجحة، مكّن قفل SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"‏يتبقى لديك محاولة واحدة (<xliff:g id="NUMBER">%d</xliff:g>) يتم بعدها قفل بطاقة SIM."</item>
+    <item quantity="other" msgid="7530597808358774740">"‏يتبقى لديك <xliff:g id="NUMBER">%d</xliff:g> من المحاولات يتم بعدها قفل بطاقة SIM."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"معرف المتصل الوارد"</string>
     <string name="ClirMmi" msgid="7784673673446833091">"معرف المتصل الصادر"</string>
-    <string name="CfMmi" msgid="5123218989141573515">"إعادة توجيه الاتصال"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"اعادة توجيه المكالمة"</string>
     <string name="CwMmi" msgid="9129678056795016867">"انتظار المكالمة"</string>
     <string name="BaMmi" msgid="455193067926770581">"حظر الاتصال"</string>
     <string name="PwdMmi" msgid="7043715687905254199">"تغيير كلمة المرور"</string>
-    <string name="PinMmi" msgid="3113117780361190304">"تغيير رقم التعريف الشخصي"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"‏تغيير رمز PIN"</string>
     <string name="CnipMmi" msgid="3110534680557857162">"رقم الاتصال موجود"</string>
     <string name="CnirMmi" msgid="3062102121430548731">"رقم الاتصال مقيّد"</string>
     <string name="ThreeWCMmi" msgid="9051047170321190368">"اتصال ثلاثي"</string>
@@ -76,14 +103,14 @@
     <string name="RestrictedOnEmergency" msgid="6581163779072833665">"خدمة الطوارئ محظورة."</string>
     <string name="RestrictedOnNormal" msgid="4953867011389750673">"الخدمة الصوتية محظورة."</string>
     <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"جميع الخدمات الصوتية محظورة."</string>
-    <string name="RestrictedOnSms" msgid="8314352327461638897">"خدمة الرسائل القصيرة SMS محظورة."</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"‏خدمة الرسائل القصيرة SMS محظورة."</string>
     <string name="RestrictedOnVoiceData" msgid="996636487106171320">"خدمات الصوت/البيانات محظورة."</string>
-    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"خدمات الصوت/الرسائل القصيرة SMS محظورة."</string>
-    <string name="RestrictedOnAll" msgid="5643028264466092821">"جميع خدمات الصوت/البيانات/الرسائل القصيرة SMS محظورة."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"‏خدمات الصوت/الرسائل القصيرة SMS محظورة."</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"‏جميع خدمات الصوت/البيانات/الرسائل القصيرة SMS محظورة."</string>
     <string name="serviceClassVoice" msgid="1258393812335258019">"الصوت"</string>
     <string name="serviceClassData" msgid="872456782077937893">"البيانات"</string>
     <string name="serviceClassFAX" msgid="5566624998840486475">"الفاكس"</string>
-    <string name="serviceClassSMS" msgid="2015460373701527489">"الرسائل القصيرة SMS"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"‏الرسائل القصيرة SMS"</string>
     <string name="serviceClassDataAsync" msgid="4523454783498551468">"غير متزامنة"</string>
     <string name="serviceClassDataSync" msgid="7530000519646054776">"مزامنة"</string>
     <string name="serviceClassPacket" msgid="6991006557993423453">"الحزمة"</string>
@@ -111,7 +138,7 @@
     <string name="fcError" msgid="3327560126588500777">"حدثت مشكلة بالاتصال أو أن كود الميزة غير صحيح."</string>
     <string name="httpErrorOk" msgid="1191919378083472204">"موافق"</string>
     <string name="httpError" msgid="7956392511146698522">"حدث خطأ في الشبكة."</string>
-    <string name="httpErrorLookup" msgid="4711687456111963163">"تعذر العثور على عنوان URL."</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"‏تعذر العثور على عنوان URL."</string>
     <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"نظام مصادقة الموقع غير معتمد."</string>
     <string name="httpErrorAuth" msgid="1435065629438044534">"تعذرت المصادقة."</string>
     <string name="httpErrorProxyAuth" msgid="1788207010559081331">"لم تتم المصادقة عبر الخادم الوكيل بنجاح."</string>
@@ -121,7 +148,7 @@
     <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"تحتوي هذه الصفحة على عمليات إعادة توجيه خادم كثيرة للغاية."</string>
     <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"البروتوكول غير معتمد."</string>
     <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"تعذر إنشاء اتصال آمن."</string>
-    <string name="httpErrorBadUrl" msgid="3636929722728881972">"تعذر فتح الصفحة لأن عنوان URL غير صالح."</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"‏تعذر فتح الصفحة لأن عنوان URL غير صالح."</string>
     <string name="httpErrorFile" msgid="2170788515052558676">"تعذر الدخول إلى الملف."</string>
     <string name="httpErrorFileNotFound" msgid="6203856612042655084">"تعذر العثور على الملف المطلوب."</string>
     <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"تتم الآن معالجة طلبات كثيرة للغاية. حاول مرة أخرى في وقت لاحق."</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"مزامنة"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"عمليات حذف <xliff:g id="CONTENT_TYPE">%s</xliff:g> كثيرة للغاية."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"سعة تخزين الجهاز اللوحي ممتلئة! احذف بعض الملفات لإخلاء مساحة."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"سعة تخزين المشاهدة ممتلئة! احذف بعض الملفات لتحرير مساحة."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"سعة تخزين الهاتف ممتلئة. احذف بعض الملفات لإخلاء مساحة."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"قد تكون الشبكة مراقبة"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"بواسطة جهة خارجية غير معلومة"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"تشغيل الرنين"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"جارٍ إيقاف التشغيل..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"سيتم إيقاف تشغيل الجهاز اللوحي."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"سيتم إيقاف المشاهدة."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"سيتم إيقاف تشغيل هاتفك."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"هل تريد إيقاف التشغيل؟"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"إعادة تشغيل في الوضع الآمن"</string>
@@ -166,13 +195,14 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"وضع الطائرة"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"وضع الطائرة قيد التشغيل"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"وضع الطائرة متوقف"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"الإعدادات"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"الوضع الآمن"</string>
-    <string name="android_system_label" msgid="6577375335728551336">"نظام Android"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"‏نظام Android"</string>
     <string name="permgrouplab_costMoney" msgid="5429808217861460401">"الخدمات التي تكلفك المال"</string>
     <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"يمكنك تنفيذ إجراءات يمكن أن تكلفك مالاً."</string>
     <string name="permgrouplab_messages" msgid="7521249148445456662">"رسائلك"</string>
-    <string name="permgroupdesc_messages" msgid="7821999071003699236">"قراءة وكتابة الرسائل القصيرة SMS والرسائل الإلكترونية والرسائل الأخرى."</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"‏قراءة وكتابة الرسائل القصيرة SMS والرسائل الإلكترونية والرسائل الأخرى."</string>
     <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"معلوماتك الشخصية"</string>
     <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"الدخول المباشر إلى معلومات عنك، تم تخزينها في بطاقة الاتصال."</string>
     <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"المعلومات الاجتماعية"</string>
@@ -228,8 +258,8 @@
     <string name="permgrouplab_display" msgid="4279909676036402636">"واجهة مستخدم تطبيقات أخرى"</string>
     <string name="permgroupdesc_display" msgid="6051002031933013714">"التأثير على واجهة المستخدم بالتطبيقات الأخرى."</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"التخزين"</string>
-    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"الدخول إلى وحدة تخزين USB."</string>
-    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"الدخول إلى بطاقة SD."</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"‏الدخول إلى وحدة تخزين USB."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"‏الدخول إلى بطاقة SD."</string>
     <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"ميزات إمكانية الوصول"</string>
     <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"الميزات التي يمكن للتقنية المساعدة طلبها"</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"استرداد محتوى النافذة"</string>
@@ -251,27 +281,27 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"إزالة الاختصارات"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"للسماح للتطبيق بإزالة اختصارات من الشاشة الرئيسية بدون تدخل المستخدم."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"إعادة توجيه المكالمات الصادرة"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"للسماح للتطبيق بمعالجة المكالمات الصادرة وتغيير الرقم المطلوب. يتيح هذا الإذن للتطبيق مراقبة المكالمات الصادرة أو إعادة توجيهها أو منعها."</string>
-    <string name="permlab_receiveSms" msgid="8673471768947895082">"تلقي رسائل نصية (رسائل قصيرة SMS)"</string>
-    <string name="permdesc_receiveSms" msgid="6424387754228766939">"للسماح للتطبيق بتلقي ومعالجة الرسائل القصيرة SMS. وهذا يعني أنه يمكن للتطبيق مراقبة الرسائل التي يتم إرسالها إلى جهازك أو حذفها بدون عرضها لك."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"للسماح للتطبيق بالاطلاع على الرقم الذي يتم الاتصال به عند إجراء مكالمة صادرة مع وجود الخيار لإعادة توجيه المكالمة إلى رقم آخر أو إنهاء المكالمة تمامًا."</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"‏تلقي رسائل نصية (رسائل قصيرة SMS)"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"‏للسماح للتطبيق بتلقي ومعالجة الرسائل القصيرة SMS. وهذا يعني أنه يمكن للتطبيق مراقبة الرسائل التي يتم إرسالها إلى جهازك أو حذفها بدون عرضها لك."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"تلقي رسائل نصية (رسائل وسائط متعددة)"</string>
     <string name="permdesc_receiveMms" msgid="533019437263212260">"للسماح للتطبيق بتلقي ومعالجة رسائل الوسائط المتعددة. وهذا يعني أنه يمكن للتطبيق مراقبة الرسائل التي يتم إرسالها لجهازك أو حذفها بدون عرضها لك."</string>
     <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"تلقي بث الطوارئ"</string>
     <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"للسماح للتطبيق بتلقي رسائل بث الطوارئ ومعالجتها. لا يتوفر هذا الإذن سوى لتطبيقات النظام."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"قراءة رسائل بث الخلية"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"السماح للتطبيق بقراءة رسائل بث الخلية التي يتلقاها هذا الجهاز. يتم تسليم تنبيهات بث الخلية في بعض المواقع لتحذيرك من حالات طارئة. يمكن أن تتداخل التطبيقات الضارة مع أداء أو تشغيل الجهاز عندما يتم تلقي بث خلية طارئ."</string>
-    <string name="permlab_sendSms" msgid="5600830612147671529">"إرسال رسائل قصيرة SMS"</string>
-    <string name="permdesc_sendSms" msgid="7094729298204937667">"للسماح للتطبيق بإرسال رسائل قصيرة SMS. وقد يؤدي هذا إلى تحمل رسوم غير متوقعة. وقد تكلفك التطبيقات الضارة أموالاً من خلال إرسال رسائل بدون موافقة منك."</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"السماح للتطبيق بقراءة رسائل بث الخلية التي يتلقاها هذا الجهاز. يتم تسليم اشعارات بث الخلية في بعض المواقع لتحذيرك من حالات طارئة. يمكن أن تتداخل التطبيقات الضارة مع أداء أو تشغيل الجهاز عندما يتم تلقي بث خلية طارئ."</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"‏إرسال رسائل قصيرة SMS"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"‏للسماح للتطبيق بإرسال رسائل قصيرة SMS. وقد يؤدي هذا إلى تحمل رسوم غير متوقعة. وقد تكلفك التطبيقات الضارة أموالاً من خلال إرسال رسائل بدون موافقة منك."</string>
     <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"إرسال أحداث يتم الرد عليها عبر رسالة"</string>
     <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"السماح للتطبيق بإرسال طلبات إلى تطبيقات المراسلة الأخرى للتعامل مع الأحداث التي يتم الرد عليها عبر الرسائل في المكالمات الواردة."</string>
-    <string name="permlab_readSms" msgid="8745086572213270480">"قراءة الرسائل النصية (الرسائل القصيرة SMS أو رسائل الوسائط المتعددة)"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"للسماح للتطبيق بقراءة الرسائل القصيرة SMS المخزنة على الجهاز اللوحي أو على بطاقة SIM. ويتيح هذا للتطبيق قراءة جميع الرسائل القصيرة SMS، بغض النظر عن المحتوى أو مدى السرية."</string>
-    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"للسماح للتطبيق بقراءة الرسائل القصيرة SMS المخزنة على هاتفك أو على بطاقة SIM. ويتيح هذا للتطبيق قراءة جميع الرسائل القصيرة SMS، بغض النظر عن المحتوى أو مدى السرية."</string>
-    <string name="permlab_writeSms" msgid="3216950472636214774">"تعديل الرسائل النصية (الرسائل القصيرة SMS أو رسائل الوسائط المتعددة)"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"للسماح للتطبيق بالكتابة إلى الرسائل القصيرة SMS المخزّنة على الجهاز اللوحي أو بطاقة SIM. قد تحذف التطبيقات الضارة رسائلك."</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"للسماح للتطبيق بالكتابة إلى الرسائل القصيرة SMS المخزّنة على الهاتف أو بطاقة SIM. قد تحذف التطبيقات الضارة رسائلك."</string>
-    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"تلقي رسائل نصية (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"للسماح للتطبيق بتلقي رسائل WAP ومعالجتها. ويتضمن هذا الإذن إمكانية مراقبة الرسائل التي يتم إرسالها إليك أو حذفها بدون عرضها لك."</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"‏قراءة الرسائل النصية (الرسائل القصيرة SMS أو رسائل الوسائط المتعددة)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"‏للسماح للتطبيق بقراءة الرسائل القصيرة SMS المخزنة على الجهاز اللوحي أو على بطاقة SIM. ويتيح هذا للتطبيق قراءة جميع الرسائل القصيرة SMS، بغض النظر عن المحتوى أو مدى السرية."</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"‏للسماح للتطبيق بقراءة الرسائل القصيرة SMS المخزنة على هاتفك أو على بطاقة SIM. ويتيح هذا للتطبيق قراءة جميع الرسائل القصيرة SMS، بغض النظر عن المحتوى أو مدى السرية."</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"‏تعديل الرسائل النصية (الرسائل القصيرة SMS أو رسائل الوسائط المتعددة)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"‏للسماح للتطبيق بالكتابة إلى الرسائل القصيرة SMS المخزّنة على الجهاز اللوحي أو بطاقة SIM. قد تحذف التطبيقات الضارة رسائلك."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"‏للسماح للتطبيق بالكتابة إلى الرسائل القصيرة SMS المخزّنة على الهاتف أو بطاقة SIM. قد تحذف التطبيقات الضارة رسائلك."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"‏تلقي رسائل نصية (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"‏للسماح للتطبيق بتلقي رسائل WAP ومعالجتها. ويتضمن هذا الإذن إمكانية مراقبة الرسائل التي يتم إرسالها إليك أو حذفها بدون عرضها لك."</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"استرداد التطبيقات التي قيد التشغيل"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"للسماح للتطبيق باسترداد معلومات حول المهام التي يجري تشغيلها حاليًا والتي تم تشغيلها مؤخرًا. وقد يسمح هذا للتطبيق باكتشاف معلومات حول التطبيقات المستخدمة على الجهاز."</string>
     <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"التعامل بين المستخدمين"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"للسماح للتطبيق باسترداد محتوى النافذة النشطة. يمكن للبرامج الضارة استرداد محتوى النافذة بالكامل وفحص جميع النصوص الموجودة بها باستثناء كلمات المرور."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"تمكين إمكانية الدخول مؤقتًا"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"يتيح لتطبيق تمكين إمكانية الدخول مؤقتًا بالجهاز. قد تتيح التطبيقات الضارة تمكين إمكانية الدخول بدون موافقة المستخدم."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"استرداد معلومات النوافذ"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"للسماح لأحد التطبيقات باستعادة معلومات حول النوافذ من مدير النوافذ. يمكن أن تستعيد التطبيقات الضارة معلومات الغرض منها استخدام النظام الداخلي."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"استرداد النافذة التي تم التقاطها"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"يتيح للتطبيق استعادة النافذة التي تم التقاطها. وقد تتمكن التطبيقات الضارة من تنفيذ تفاعل غير مصرح به مع نافذة التطبيق التي تنتحل صفة النظام."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"استرداد الإحصاءات الإطارية"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"يتيح للتطبيق جمع إحصاءات إطارية. وقد تتمكن التطبيقات الضارة من رصد الإحصاءات الإطارية للنوافذ من تطبيقات أخرى."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"تصفية الأحداث"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"للسماح لأحد التطبيقات بتسجيل فلتر إدخال يعمل على تصفية مجموعة البث من جميع أحداث المستخدمين قبل إرسالها. يمكن أن يتحكم برنامج ضار في واجهة المستخدم النظام دون تدخل المستخدم."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"تكبير الشاشة"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"للسماح للتطبيق بتكبير محتوى شاشة. قد تؤدي التطبيقات الضارة إلى نقل محتوى الشاشة بطريقة تعرض الجهاز في وضع غير قابل للاستخدام."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"إيقاف تشغيل جزئي"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"لوضع مدير الأنشطة في حالة إيقاف التشغيل. لا يتم تنفيذ إيقاف تشغيل كامل."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"منع التبديل بين التطبيقات"</string>
@@ -326,10 +356,12 @@
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"للسماح للتطبيق بمراقبة كيفية بدء النظام للأنشطة والتحكم فيها. قد تُعرِّض التطبيقات الضارة النظام للضرر بشكل كامل. لن تكون هناك حاجة لهذا الإذن سوى للتطوير فقط، وليس للاستخدام العادي على الإطلاق."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"إرسال بث الحزمة الذي تمت إزالته"</string>
     <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"للسماح للتطبيق ببث تنبيه يفيد بإزالة حزمة أحد التطبيقات. قد تستخدم التطبيقات الضارة هذا لإنهاء أية تطبيقات أخرى قيد التشغيل."</string>
-    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"إرسال بث SMS مستلم"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"للسماح للتطبيق ببث إشعار باستلام رسالة قصيرة SMS. قد تستخدم التطبيقات الضارة هذا لتزييف الرسائل القصيرة SMS الواردة."</string>
-    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"إرسال بث WAP-PUSH المستلم"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"للسماح للتطبيق ببث إشعار باستلام رسالة WAP PUSH. يمكن أن تستخدم التطبيقات الضارة هذا لتزيف استلام رسالة وسائط متعددة أو لاستبدال محتوى أي صفحة ويب بمتغيرات ضارة بشكل غير ملحوظ."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"‏إرسال بث SMS مستلم"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"‏للسماح للتطبيق ببث إشعار باستلام رسالة قصيرة SMS. قد تستخدم التطبيقات الضارة هذا لتزييف الرسائل القصيرة SMS الواردة."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"‏إرسال بث WAP-PUSH المستلم"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"‏للسماح للتطبيق ببث إشعار باستلام رسالة WAP PUSH. يمكن أن تستخدم التطبيقات الضارة هذا لتزيف استلام رسالة وسائط متعددة أو لاستبدال محتوى أي صفحة ويب بمتغيرات ضارة بشكل غير ملحوظ."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"إرسال بث الشبكات التي تم تقييمها"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"السماح للتطبيق لكي يبث إشعارًا يفيد بأنه يلزم تقييم الشبكات. لا يلزم ذلك مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"تحديد عدد العمليات قيد التشغيل"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"للسماح للتطبيق بالتحكم في الحد الأقصى لعدد العمليات التي سيتم تشغيلها. غير مطلوب على الإطلاق للتطبيقات العادية."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"فرض إغلاق تطبيقات الخلفية"</string>
@@ -353,7 +385,7 @@
     <string name="permlab_setAnimationScale" msgid="2805103241153907174">"تعديل سرعة الرسوم المتحركة العمومية"</string>
     <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"للسماح للتطبيق بتغيير سرعة الرسوم المتحركة العمومية (رسوم متحركة أسرع أو أبطأ) في أي وقت."</string>
     <string name="permlab_manageAppTokens" msgid="1286505717050121370">"إدارة الرموز المميزة للتطبيقات"</string>
-    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"للسماح للتطبيق بإنشاء وإدارة رموزه الخاصة، وتجاوز ترتيب Z العادي. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"‏للسماح للتطبيق بإنشاء وإدارة رموزه الخاصة، وتجاوز ترتيب Z العادي. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_freezeScreen" msgid="4708181184441880175">"تجميد الشاشة"</string>
     <string name="permdesc_freezeScreen" msgid="8558923789222670064">"للسماح للتطبيق بتجميد الشاشة مؤقتًا لإجراء انتقال بملء الشاشة."</string>
     <string name="permlab_injectEvents" msgid="1378746584023586600">"مفاتيح الضغط وأزرار التحكم"</string>
@@ -369,18 +401,26 @@
     <string name="permdesc_bindPrintService" msgid="7960067623209111135">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الطباعة. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"الالتزام بخدمة التخزين المؤقت للطباعة"</string>
     <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة التخزين المؤقت للطباعة. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
-    <string name="permlab_bindNfcService" msgid="2752731300419410724">"الربط بخدمة NFC"</string>
-    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"للسماح لحامل البطاقة بالربط بالتطبيقات التي تحاكي بطاقات NFC. لا يتوجب استخدامه على الإطلاق للتطبيقات العادية."</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"‏الربط بخدمة NFC"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"‏للسماح لحامل البطاقة بالربط بالتطبيقات التي تحاكي بطاقات NFC. لا يتوجب استخدامه على الإطلاق للتطبيقات العادية."</string>
     <string name="permlab_bindTextService" msgid="7358378401915287938">"الالتزام بخدمة إدخال النصوص"</string>
-    <string name="permdesc_bindTextService" msgid="8151968910973998670">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة إدخال النصوص (على سبيل المثال، SpellCheckerService). لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
-    <string name="permlab_bindVpnService" msgid="4708596021161473255">"الالتزام بخدمة VPN"</string>
-    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الشبكة الظاهرية الخاصة (VPN). لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"‏للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة إدخال النصوص (على سبيل المثال، SpellCheckerService). لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"‏الالتزام بخدمة VPN"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"‏للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الشبكة الظاهرية الخاصة (VPN). لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"الالتزام بخلفية ما"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"للسماح للمالك بالالتزام بواجهة المستوى العلوي للخلفية. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"الربط بخدمة التفاعل الصوتي"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"للسماح للمالك بالربط بواجهة المستوى العلوي لخدمة التفاعل الصوتي. لن تكون هناك حاجة إلى هذا الإعداد مطلقًا مع التطبيقات العادية."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"الربط بالشاشة عن بُعد"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"للسماح للمالك بالالتزام بواجهة المستوى العلوي للعرض عن بُعد. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"الالتزام بخدمة أداة"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لخدمة الأداة. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"الربط مع خدمة مزود طريق"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"للسماح لحامل البطاقة الربط مع أي مزود طريق مسجل. لا يجب استخدامه على الإطلاق مع التطبيقات العادية."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"التفاعل مع مشرف الجهاز"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"للسماح للمالك بإرسال الأهداف إلى أحد مشرفي الجهاز. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"الالتزام بإدخال التلفزيون"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"للسماح للمالك بالالتزام بواجهة المستوى العلوي لإدخال التلفزيون. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"إضافة مشرف جهاز أو إزالته"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"للسماح بحامل البطاقة بإضافة مشرفي أجهزة نشطين أو إزالتهم. لا يلزم ذلك أبدًا للتطبيقات العادية."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"تغيير اتجاه الشاشة"</string>
@@ -389,13 +429,13 @@
     <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"للسماح للتطبيق بتغيير سرعة مؤشر الماوس أو لوحة التتبع في أي وقت. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"تغيير تنسيق لوحة مفاتيح"</string>
     <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"للسماح للتطبيق بتغيير تنسيق لوحة المفاتيح. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"إرسال إشارات Linux للتطبيقات"</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"‏إرسال إشارات Linux للتطبيقات"</string>
     <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"للسماح للتطبيق بطلب إرسال الإشارة المزوّدة لجميع العمليات المستمرة."</string>
     <string name="permlab_persistentActivity" msgid="8841113627955563938">"تشغيل التطبيق دائمًا"</string>
     <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"للسماح للتطبيق بجعل أجزاء منه ثابتة في الذاكرة. وقد يؤدي هذا إلى تقييد الذاكرة المتاحة للتطبيقات الأخرى مما يؤدي إلى حدوث بطء في الجهاز اللوحي."</string>
     <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"للسماح للتطبيق بجعل أجزاء منه ثابتة في الذاكرة. وقد يؤدي هذا إلى تقييد الذاكرة المتاحة للتطبيقات الأخرى مما يؤدي إلى حدوث بطء في الهاتف."</string>
     <string name="permlab_deletePackages" msgid="184385129537705938">"حذف التطبيقات"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"للسماح للتطبيق بحذف حزم Android. يمكن أن تستخدم التطبيقات الضارة ذلك لحذف التطبيقات المهمة."</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"‏للسماح للتطبيق بحذف حزم Android. يمكن أن تستخدم التطبيقات الضارة ذلك لحذف التطبيقات المهمة."</string>
     <string name="permlab_clearAppUserData" msgid="274109191845842756">"حذف بيانات التطبيقات الأخرى"</string>
     <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"للسماح للتطبيق بمحو بيانات المستخدم."</string>
     <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"حذف ذاكرات التخزين المؤقت للتطبيقات الأخرى"</string>
@@ -403,7 +443,7 @@
     <string name="permlab_getPackageSize" msgid="7472921768357981986">"قياس مساحة تخزين التطبيق"</string>
     <string name="permdesc_getPackageSize" msgid="3921068154420738296">"للسماح للتطبيق باسترداد شفرته وبياناته وأحجام ذاكرات التخزين المؤقت"</string>
     <string name="permlab_installPackages" msgid="2199128482820306924">"تثبيت التطبيقات مباشرة"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"للسماح للتطبيق بتثبيت حزم Android الجديدة أو المحدّثة. يمكن أن تستخدم التطبيقات الضارة ذلك لإضافة تطبيقات جديدة ذات أذونات قوية على نحو عشوائي."</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"‏للسماح للتطبيق بتثبيت حزم Android الجديدة أو المحدّثة. يمكن أن تستخدم التطبيقات الضارة ذلك لإضافة تطبيقات جديدة ذات أذونات قوية على نحو عشوائي."</string>
     <string name="permlab_clearAppCache" msgid="7487279391723526815">"حذف جميع بيانات ذاكرة التخزين المؤقت للتطبيق"</string>
     <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"للسماح للتطبيق بتفريغ سعة تخزين الجهاز اللوحي من خلال حذف الملفات من أدلة ذاكرة التخزين المؤقت للتطبيقات الأخرى. قد يتسبب هذا في تشغيل التطبيقات الأخرى بشكل أكثر بطئًا حيث يلزمها إعادة استرداد بياناتها."</string>
     <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"للسماح للتطبيق بتفريغ مساحة تخزين الهاتف من خلال حذف الملفات من أدلة ذاكرة التخزين المؤقت للتطبيقات الأخرى. قد يتسبب هذا في تشغيل التطبيقات الأخرى بشكل أكثر بطئًا حيث يلزمها إعادة استرداد بياناتها."</string>
@@ -415,9 +455,11 @@
     <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"استخدام أي برنامج فك تشفير وسائط من أجل التشغيل"</string>
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"السماح للتطبيق باستخدام أي برنامج فك تشفير وسائط مثبت لفك التشفير من أجل التشغيل."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"إدارة بيانات الاعتماد الموثوقة"</string>
-    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"السماح للتطبيق بتثبيت شهادات CA وإلغاء تثبيتها باعتبارها بيانات اعتماد محل ثقة."</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"‏السماح للتطبيق بتثبيت شهادات CA وإلغاء تثبيتها باعتبارها بيانات اعتماد محل ثقة."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"تشغيل التطبيق أثناء وقت الخمول"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"‏يتيح هذا الإذن لنظام Android تشغيل التطبيق في الخلفية في حين أن الجهاز ليس قيد الاستخدام."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"قراءة/كتابة إلى الموارد المملوكة بواسطة التشخيص"</string>
-    <string name="permdesc_diagnostic" msgid="6608295692002452283">"للسماح للتطبيق بالقراءة والكتابة إلى أي مورد مملوك بواسطة مجموعة التشخيصات؛ على سبيل المثال، الملفات في /dev. من المحتمل أن يؤثر ذلك في استقرار النظام وأمانه. يجب ألا يستخدم ذلك سوى للتشخيصات الخاصة بالنظام من قِبل المصنِّع أو المشغِّل."</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"‏للسماح للتطبيق بالقراءة والكتابة إلى أي مورد مملوك بواسطة مجموعة التشخيصات؛ على سبيل المثال، الملفات في /dev. من المحتمل أن يؤثر ذلك في استقرار النظام وأمانه. يجب ألا يستخدم ذلك سوى للتشخيصات الخاصة بالنظام من قِبل المصنِّع أو المشغِّل."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"تمكين مكونات التطبيق أو تعطيلها"</string>
     <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"للسماح للتطبيق بتغيير ما إذا كان سيتم تمكين مكون لتطبيق آخر أم لا. يمكن أن تستخدم التطبيقات الضارة ذلك لتعطيل قدرات الجهاز اللوحي المهمة. يجب توخي الحذر عند استخدام هذا الإذن، وذلك لأنه من الممكن أن يؤدي ذلك إلى جعل حالة مكونات التطبيق غير قابلة للاستخدام أو غير متناسقة أو غير مستقرة."</string>
     <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"للسماح للتطبيق بتغيير ما إذا كان سيتم تمكين مكون لتطبيق آخر أم لا. يمكن أن تستخدم التطبيقات الضارة ذلك لتعطيل قدرات الهاتف المهمة. يجب توخي الحذر عند استخدام هذا الإذن، وذلك لأنه من الممكن أن يؤدي ذلك إلى جعل حالة مكونات التطبيق غير قابلة للاستخدام أو غير متناسقة أو غير مستقرة."</string>
@@ -429,8 +471,8 @@
     <string name="permdesc_writeSettings" msgid="7775723441558907181">"للسماح للتطبيق بتعديل بيانات إعدادات النظام. يمكن أن تتلف التطبيقات الضارة تهيئة نظامك."</string>
     <string name="permlab_writeSecureSettings" msgid="204676251876718288">"تعديل إعدادات النظام الآمنة"</string>
     <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"للسماح للتطبيق بتعديل بيانات الإعدادات الآمنة للنظام. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
-    <string name="permlab_writeGservices" msgid="2149426664226152185">"تعديل خريطة خدمات Google"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"للسماح للتطبيق بتعديل خريطة خدمات Google. ليس للاستخدام بواسطة التطبيقات العادية."</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"‏تعديل خريطة خدمات Google"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"‏للسماح للتطبيق بتعديل خريطة خدمات Google. ليس للاستخدام بواسطة التطبيقات العادية."</string>
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"العمل عند بدء التشغيل"</string>
     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"للسماح للتطبيق ببدء تشغيل نفسه عقب انتهاء النظام من التشغيل. قد يؤدي ذلك إلى استغراق المزيد من الوقت عند بدء الجهاز اللوحي والسماح للتطبيق بإبطاء الأداء الإجمالي للجهاز اللوحي من خلال تشغيله دائمًا."</string>
     <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"للسماح للتطبيق ببدء تشغيل نفسه عقب انتهاء النظام من التشغيل. قد يؤدي ذلك إلى استغراق المزيد من الوقت عن بدء الهاتف والسماح للتطبيق بإبطاء الأداء الإجمالي للهاتف حيث يتم تشغيله دائمًا."</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"للسماح للتطبيق بقراءة المعلومات الشخصية في الملف الشخصي المخزنة على الجهاز، مثل اسمك ومعلومات جهات الاتصال. ويعني ذلك أنه يمكن للتطبيق التعرف عليك كما يمكنه إرسال معلومات ملفك الشخصي إلى الآخرين."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"تعديل بطاقة جهة الاتصال الخاصة"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"للسماح للتطبيق بتغيير المعلومات الشخصية في الملف الشخصي المخزنة على الجهاز أو الإضافة إليها، مثل اسمك ومعلومات جهات الاتصال. ويعني ذلك أنه يمكن للتطبيق التعرف عليك كما يمكنه إرسال معلومات ملفك الشخصي إلى الآخرين."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"أجهزة استشعار الجسم (مثل شاشات معدل ضربات القلب)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"للسماح للتطبيق بالدخول إلى البيانات من أجهزة الاستشعار التي تستخدمها لقياس ما يجري داخل جسمك، مثل معدل ضربات القلب."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"قراءة المشاركات الاجتماعية"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"للسماح للتطبيق بالدخول إلى التحديثات الاجتماعية منك ومن أصدقائك ومزامنتها. توخ الحذر عند مشاركة المعلومات، حيث يتيح هذا للتطبيق قراءة عمليات التواصل بينك وبين أصدقائك على الشبكات الاجتماعية، بغض النظر عن مدى السرية. ملاحظة: لا يجوز فرض هذا الإذن على جميع الشبكات الاجتماعية."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"كتابة إلى المشاركات الاجتماعية"</string>
@@ -464,23 +508,25 @@
     <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"للسماح للتطبيق بإضافة أو إزالة أو تغيير الأحداث التي يمكنك تعديلها على جهازك اللوحي، بما في ذلك أحداث الأصدقاء أو زملاء العمل. وقد يتيح هذا للتطبيق إرسال رسائل يبدو أنها واردة من أصحاب التقويم أو تعديل الأحداث بدون معرفة المالكين."</string>
     <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"للسماح للتطبيق بإضافة أو إزالة أو تغيير الأحداث التي يمكنك تعديلها على هاتفك، بما في ذلك أحداث الأصدقاء أو زملاء العمل. وقد يتيح هذا للتطبيق إرسال رسائل يبدو أنها واردة من أصحاب التقويم أو تعديل الأحداث بدون معرفة المالكين."</string>
     <string name="permlab_accessMockLocation" msgid="8688334974036823330">"مصادر مواقع وهمية للاختبار"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"لإنشاء مصادر مواقع زائفة للاختبار أو تثبيت موفر مواقع جديد. يتيح هذا للتطبيق إلغاء الموقع و/أو الحالة التي تعرضها مصادر المواقع الأخرى مثل GPS أو موفري المواقع."</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"‏لإنشاء مصادر مواقع زائفة للاختبار أو تثبيت موفر مواقع جديد. يتيح هذا للتطبيق إلغاء الموقع و/أو الحالة التي تعرضها مصادر المواقع الأخرى مثل GPS أو موفري المواقع."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"الدخول إلى المزيد من أوامر موفر الموقع"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"للسماح للتطبيق بالدخول إلى المزيد من أوامر موفر خدمة الموقع. وقد يتيح هذا للتطبيق التدخل في عمل GPS أو مصادر المواقع الأخرى."</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"‏للسماح للتطبيق بالدخول إلى المزيد من أوامر موفر خدمة الموقع. وقد يتيح هذا للتطبيق التدخل في عمل GPS أو مصادر المواقع الأخرى."</string>
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"إذن لتثبيت موفر خدمة موقع"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"لإنشاء مصادر مواقع زائفة للاختبار أو تثبيت موفر مواقع جديد. يتيح هذا للتطبيق إلغاء الموقع و/أو الحالة التي تعرضها مصادر المواقع الأخرى مثل GPS أو موفري المواقع."</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"‏لإنشاء مصادر مواقع زائفة للاختبار أو تثبيت موفر مواقع جديد. يتيح هذا للتطبيق إلغاء الموقع و/أو الحالة التي تعرضها مصادر المواقع الأخرى مثل GPS أو موفري المواقع."</string>
     <string name="permlab_accessFineLocation" msgid="1191898061965273372">"الموقع الدقيق (مستند إلى نظام تحديد المواقع العالمي والشبكة)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"للسماح للتطبيق بتحديد موقعك بدقة وهذا باستخدام نظام تحديد المواقع العالمي (GPS) أو مصادر المواقع التي تستخدم الشبكات مثل أبراج الجوال أو تقنية Wi-Fi. يتعين توفر خدمات المواقع هذه وتشغيلها على جهازك للتطبيق كي يستخدمها. وقد تستخدم التطبيقات هذا لتحديد موقعك وقد تستهلك مزيدًا من طاقة البطارية."</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"‏للسماح للتطبيق بتحديد موقعك بدقة وهذا باستخدام نظام تحديد المواقع العالمي (GPS) أو مصادر المواقع التي تستخدم الشبكات مثل أبراج الجوال أو تقنية Wi-Fi. يتعين توفر خدمات المواقع هذه وتشغيلها على جهازك للتطبيق كي يستخدمها. وقد تستخدم التطبيقات هذا لتحديد موقعك وقد تستهلك مزيدًا من طاقة البطارية."</string>
     <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"الموقع التقريبي (مستند إلى الشبكة)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"للسماح للتطبيق بتحديد موقعك التقريبي الذي يستمد من خدمات الموقع باستخدام مصادر المواقع التي تستخدم الشبكات مثل أبراج الجوال وتقنية Wi-Fi. يتعين توفر خدمات المواقع هذه وتشغيلها على جهازك للتطبيق كي يستخدمها. وقد تستخدم التطبيقات هذا لتحديد موقعك التقريبي."</string>
-    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"الدخول إلى SurfaceFlinger"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"للسماح للتطبيق باستخدام ميزات SurfaceFlinger ذات المستوى المنخفض."</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"‏للسماح للتطبيق بتحديد موقعك التقريبي الذي يستمد من خدمات الموقع باستخدام مصادر المواقع التي تستخدم الشبكات مثل أبراج الجوال وتقنية Wi-Fi. يتعين توفر خدمات المواقع هذه وتشغيلها على جهازك للتطبيق كي يستخدمها. وقد تستخدم التطبيقات هذا لتحديد موقعك التقريبي."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"‏الدخول إلى SurfaceFlinger"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"‏للسماح للتطبيق باستخدام ميزات SurfaceFlinger ذات المستوى المنخفض."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"قراءة المخزن المؤقت للإطارات"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"للسماح للتطبيق بقراءة محتوى المخزن المؤقت للإطارات."</string>
-    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"تهيئة شاشات Wi-Fi"</string>
-    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"للسماح للتطبيق بتهيئة شاشات Wi-Fi والاتصال بها."</string>
-    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"التحكم في شاشات Wi-Fi"</string>
-    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"للسماح للتطبيق بالتحكم في الميزات ذات المستوى المنخفض في شاشات Wi-Fi."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"‏الدخول إلى InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"‏للسماح للتطبيق باستخدام ميزات InputFlinger ذات المستوى المنخفض."</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"‏تهيئة شاشات Wi-Fi"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"‏للسماح للتطبيق بتهيئة شاشات Wi-Fi والاتصال بها."</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"‏التحكم في شاشات Wi-Fi"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"‏للسماح للتطبيق بالتحكم في الميزات ذات المستوى المنخفض في شاشات Wi-Fi."</string>
     <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"التقاط إخراج الصوت"</string>
     <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"السماح للتطبيق بالتقاط إخراج الصوت وإعادة توجيهه."</string>
     <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"اكتشاف الكلمة المهمة"</string>
@@ -495,10 +541,12 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"للسماح للتطبيق بتعديل إعدادات الصوت العامة مثل مستوى الصوت وأي السماعات يتم استخدامها للاستماع."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"تسجيل الصوت"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"للسماح للتطبيق بتسجيل الصوت باستخدام الميكروفون. ويتيح هذا الإذن للتطبيق تسجيل الصوت في أي وقت وبدون موافقة منك."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"‏اتصالات SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"‏السماح للتطبيق بإرسال أوامر إلى بطاقة SIM. وهذا أمر بالغ الخطورة."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"التقاط صور ومقاطع فيديو"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"للسماح للتطبيق بالتقاط صور ومقاطع فيديو من خلال الكاميرا. ويتيح هذا الإذن للتطبيق استخدام الكاميرا في أي وقت وبدون موافقة منك."</string>
-    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"تعطيل مؤشر LED للإرسال عندما تكون الكاميرا قيد الاستخدام"</string>
-    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"للسماح لتطبيق نظام مثبت مسبقًا لتعطيل مؤشر LED لاستخدام الكاميرا."</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"‏تعطيل مؤشر LED للإرسال عندما تكون الكاميرا قيد الاستخدام"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"‏للسماح لتطبيق نظام مثبت مسبقًا لتعطيل مؤشر LED لاستخدام الكاميرا."</string>
     <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"تعطيل الجهاز اللوحي نهائيًا"</string>
     <string name="permlab_brick" product="default" msgid="8337817093326370537">"تعطيل الهاتف على الدوام"</string>
     <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"للسماح للتطبيق بتعطيل الجهاز اللوحي بالكامل بشكل دائم. هذا خطير للغاية."</string>
@@ -507,11 +555,11 @@
     <string name="permlab_reboot" product="default" msgid="2898560872462638242">"فرض إعادة تشغيل الهاتف"</string>
     <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"للسماح للتطبيق بفرض إعادة تشغيل الجهاز اللوحي."</string>
     <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"للسماح للتطبيق بفرض إعادة تشغيل الهاتف."</string>
-    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"الدخول إلى نظام ملفات وحدة تخزين USB"</string>
-    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"الدخول إلى نظام ملفات بطاقة SD"</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"‏الدخول إلى نظام ملفات وحدة تخزين USB"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"‏الدخول إلى نظام ملفات بطاقة SD"</string>
     <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"للسماح للتطبيق بتحميل أنظمة الملفات وإلغاء تحميلها إلى وحدة التخزين القابلة للإزالة."</string>
-    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"محو وحدة تخزين USB"</string>
-    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"محو بطاقة SD"</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"‏محو وحدة تخزين USB"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"‏محو بطاقة SD"</string>
     <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"للسماح للتطبيق بتنسيق وحدة التخزين القابلة للإزالة."</string>
     <string name="permlab_asec_access" msgid="3411338632002193846">"الحصول على معلومات حول وحدة التخزين الداخلية"</string>
     <string name="permdesc_asec_access" msgid="3094563844593878548">"للسماح للتطبيق بالحصول على معلومات حول سعة التخزين الداخلية."</string>
@@ -527,19 +575,19 @@
     <string name="permdesc_vibrate" msgid="6284989245902300945">"للسماح للتطبيق بالتحكم في الهزّاز."</string>
     <string name="permlab_flashlight" msgid="2155920810121984215">"التحكم في الضوء الوامض"</string>
     <string name="permdesc_flashlight" msgid="6522284794568368310">"للسماح للتطبيق بالتحكم في الضوء الوامض."</string>
-    <string name="permlab_manageUsb" msgid="1113453430645402723">"إدارة التفضيلات والأذونات لأجهزة USB"</string>
-    <string name="permdesc_manageUsb" msgid="7776155430218239833">"للسماح للتطبيق بإدارة التفضيلات والأذونات لأجهزة USB."</string>
-    <string name="permlab_accessMtp" msgid="4953468676795917042">"تنفيذ بروتوكول MTP"</string>
-    <string name="permdesc_accessMtp" msgid="6532961200486791570">"لإتاحة الدخول إلى برنامج تشغيل kernel MTP لتنفيذ بروتوكول MTP USB."</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"‏إدارة التفضيلات والأذونات لأجهزة USB"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"‏للسماح للتطبيق بإدارة التفضيلات والأذونات لأجهزة USB."</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"‏تنفيذ بروتوكول MTP"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"‏لإتاحة الدخول إلى برنامج تشغيل kernel MTP لتنفيذ بروتوكول MTP USB."</string>
     <string name="permlab_hardware_test" msgid="4148290860400659146">"اختبار الأجهزة"</string>
     <string name="permdesc_hardware_test" msgid="6597964191208016605">"للسماح للتطبيق بالتحكم في الأجهزة الطرفية المتنوعة بغرض اختبار الأجهزة."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"اتصال مباشر بأرقام الهواتف"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"للسماح للتطبيق بطلب أرقام هاتفية بدون تدخل منك. وقد يؤدي ذلك إلى تحمل رسوم غير متوقعة أو إجراء مكالمات غير متوقعة. ومن الجدير بالذكر أن ذلك لا يتيح للتطبيق الاتصال بأرقام الطوارئ. وقد تؤدي التطبيقات الضارة إلى تحملك تكاليف مالية من خلال إجراء مكالمات بدون موافقة منك."</string>
     <string name="permlab_callPrivileged" msgid="4198349211108497879">"اتصال مباشر بأي رقم من أرقام الهواتف"</string>
     <string name="permdesc_callPrivileged" msgid="1689024901509996810">"للسماح للتطبيق بالاتصال بأي رقم هاتف، بما في ذلك أرقام الطوارئ، بدون تدخل منك. قد تجري التطبيقات الضارة اتصالات غير ضرورية وغير قانونية بخدمات الطوارئ."</string>
-    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"بدء إعداد الجهاز اللوحي CDMA مباشرةً"</string>
-    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"بدء إعداد هاتف CDMA مباشرة"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"للسماح للتطبيق ببدء توفير CDMA. قد تبدأ التطبيقات الضارة توفير CDMA بدون الحاجة إلى ذلك."</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"‏بدء إعداد الجهاز اللوحي CDMA مباشرةً"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"‏بدء إعداد هاتف CDMA مباشرة"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"‏للسماح للتطبيق ببدء توفير CDMA. قد تبدأ التطبيقات الضارة توفير CDMA بدون الحاجة إلى ذلك."</string>
     <string name="permlab_locationUpdates" msgid="7785408253364335740">"التحكم في اشعارات تحديث الموقع"</string>
     <string name="permdesc_locationUpdates" msgid="1120741557891438876">"للسماح للتطبيق بتمكين/تعطيل إشعارات تحديث الموقع من اللاسلكي. ليس للاستخدام بواسطة التطبيقات العادية."</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"الدخول إلى خصائص الإيداع"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"للسماح للتطبيق بالتحكم في ميزات الهاتف بالجهاز. يمكن لأحد التطبيقات بهذا الإذن تبديل الشبكات وتشغيل لاسلكي الهاتف وإيقاف تشغيله وما إلى ذلك بدون إعلامك على الإطلاق."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"قراءة حالة الهاتف والهوية"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"للسماح للتطبيق بالدخول إلى ميزات الهاتف في الجهاز. ويتيح هذا الإذن للتطبيق تحديد رقم الهاتف ومعرّفات الجهاز، وما إذا كانت هناك مكالمة نشطة والرقم البعيد الذي تم الاتصال به في المكالمة."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"قراءة حالات الهاتف الدقيقة"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"للسماح للتطبيق بالوصول إلى حالات الهاتف الدقيقة. يتيح هذا الإذن للتطبيق تحديد حالة المكالمة الفعلية، سواء أكانت مكالمة نشطة أم في الخلفية، وإخفاق الاتصال، وحالة اتصال البيانات الدقيقة، وإخفاق اتصال البيانات."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"منع الجهاز اللوحي من الدخول في وضع السكون"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"منع الهاتف من الدخول في وضع السكون"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"للسماح للتطبيق بمنع الجهاز اللوحي من الانتقال إلى وضع السكون."</string>
@@ -582,7 +632,7 @@
     <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"للسماح للتطبيق بالحصول على قائمة بالحسابات التي يعرفها الجهاز اللوحي. وقد يتضمن ذلك أية حسابات تم إنشاؤها بواسطة التطبيقات التي ثبتها."</string>
     <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"للسماح للتطبيق بالحصول على قائمة بالحسابات التي يعرفها الهاتف. وقد يتضمن ذلك أية حسابات تم إنشاؤها بواسطة التطبيقات التي ثبتها."</string>
     <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"إنشاء حسابات وتعيين كلمات مرور"</string>
-    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"للسماح للتطبيق باستخدام إمكانيات مصدِّق الحساب لـ AccountManager، بما في ذلك إنشاء حسابات والحصول على كلمات مرورها وتعينها."</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"‏للسماح للتطبيق باستخدام إمكانيات مصدِّق الحساب لـ AccountManager، بما في ذلك إنشاء حسابات والحصول على كلمات مرورها وتعينها."</string>
     <string name="permlab_manageAccounts" msgid="4983126304757177305">"إضافة حسابات أو إزالتها"</string>
     <string name="permdesc_manageAccounts" msgid="8698295625488292506">"للسماح للتطبيق بإجراء عمليات مثل إضافة حسابات وإزالتها وحذف كلمات مرورها."</string>
     <string name="permlab_useCredentials" msgid="235481396163877642">"استخدام الحسابات على الجهاز"</string>
@@ -592,36 +642,39 @@
     <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"إمكانية دخول كاملة إلى الشبكة"</string>
     <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"للسماح للتطبيق بإنشاء مقابس شبكات واستخدام بروتوكولات شبكات مخصصة. ويوفر المتصفح وتطبيقات أخرى طرقًا لإرسال البيانات إلى الإنترنت، ولذلك لا يعد هذا الإذن مطلوبًا لإرسال البيانات إلى الإنترنت."</string>
     <string name="permlab_writeApnSettings" msgid="505660159675751896">"تغيير/اعتراض إعدادات الشبكة وحركة المرور"</string>
-    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"للسماح للتطبيق بتغيير إعدادات الشبكة ومقاطعة وفحص جميع حركة المرور في الشبكة، على سبيل المثال، تغيير الخادم الوكيل ومنفذ أي APN. قد تراقب التطبيقات الضارة حزم الشبكة أو تعيد توجيهها أو تعدلها بدون معرفتك."</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"‏للسماح للتطبيق بتغيير إعدادات الشبكة ومقاطعة وفحص جميع حركة المرور في الشبكة، على سبيل المثال، تغيير الخادم الوكيل ومنفذ أي APN. قد تراقب التطبيقات الضارة حزم الشبكة أو تعيد توجيهها أو تعدلها بدون معرفتك."</string>
     <string name="permlab_changeNetworkState" msgid="958884291454327309">"تغيير اتصال الشبكة"</string>
     <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"للسماح للتطبيق بتغيير حالة اتصال الشبكة."</string>
     <string name="permlab_changeTetherState" msgid="5952584964373017960">"تغيير الاتصال المربوط"</string>
     <string name="permdesc_changeTetherState" msgid="1524441344412319780">"للسماح للتطبيق بتغيير حالة اتصال الشبكة المربوطة."</string>
     <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"تغيير إعداد استخدام بيانات الخلفية"</string>
     <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"للسماح للتطبيق بتغيير إعداد استخدام بيانات الخلفية."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"عرض اتصالات Wi-Fi"</string>
-    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"للسماح للتطبيق بعرض معلومات حول شبكات Wi-Fi، كعرض معلومات حول ما إذا تم تمكين Wi-Fi واسم أجهزة Wi-Fi المتصلة."</string>
-    <string name="permlab_changeWifiState" msgid="6550641188749128035">"التوصيل والفصل من Wi-Fi"</string>
-    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"للسماح للتطبيق بالاتصال بنقاط الوصول إلى Wi-Fi وقطع الاتصال بها، وإجراء تغييرات على تهيئة الجهاز لشبكات Wi-Fi."</string>
-    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"السماح باستقبال بث Wi-Fi متعدد"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"للسماح للتطبيق بتلقي الحزم التي يتم إرسالها إلى جميع الأجهزة على شبكة Wi-Fi باستخدام عناوين بث متعدد، وليس باستخدام جهازك اللوحي فقط. ويؤدي ذلك إلى استخدام قدر أكبر من الطاقة يفوق وضع البث غير المتعدد."</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"للسماح للتطبيق بتلقي الحزم التي يتم إرسالها إلى جميع الأجهزة على شبكة Wi-Fi باستخدام عناوين بث متعدد، وليس باستخدام هاتفك فقط. ويؤدي ذلك إلى استخدام قدر أكبر من الطاقة يفوق وضع البث غير المتعدد."</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"‏عرض اتصالات Wi-Fi"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"‏للسماح للتطبيق بعرض معلومات حول شبكات Wi-Fi، كعرض معلومات حول ما إذا تم تمكين Wi-Fi واسم أجهزة Wi-Fi المتصلة."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"‏التوصيل والفصل من Wi-Fi"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"‏للسماح للتطبيق بالاتصال بنقاط الوصول إلى Wi-Fi وقطع الاتصال بها، وإجراء تغييرات على تهيئة الجهاز لشبكات Wi-Fi."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"‏السماح باستقبال بث Wi-Fi متعدد"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"‏للسماح للتطبيق بتلقي الحزم التي يتم إرسالها إلى جميع الأجهزة على شبكة Wi-Fi باستخدام عناوين بث متعدد، وليس باستخدام جهازك اللوحي فقط. ويؤدي ذلك إلى استخدام قدر أكبر من الطاقة يفوق وضع البث غير المتعدد."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"‏للسماح للتطبيق بتلقي الحزم التي يتم إرسالها إلى جميع الأجهزة على شبكة Wi-Fi باستخدام عناوين بث متعدد، وليس باستخدام هاتفك فقط. ويؤدي ذلك إلى استخدام قدر أكبر من الطاقة يفوق وضع البث غير المتعدد."</string>
     <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"الدخول إلى إعدادات بلوتوث"</string>
     <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"للسماح للتطبيق بتهيئة لوحة البلوتوث المحلي، واكتشاف أجهزة التحكم عن بعد والاقتران بها."</string>
     <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"للسماح للتطبيق بتهيئة هاتف البلوتوث المحلي، واكتشاف أجهزة التحكم عن بعد والاقتران بها."</string>
     <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"السماح بإقران البلوتوث مع التطبيق"</string>
     <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"للسماح بإقران لتطبيق مع الأجهزة البعيدة بدون تدخل المستخدم."</string>
     <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"للسماح بإقران لتطبيق مع الأجهزة البعيدة بدون تدخل المستخدم."</string>
-    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"الاتصال بـشبكة WiMAX وقطع الاتصال بها"</string>
-    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"للسماح للتطبيق بتحديد ما إذا تم تمكين WiMAX وتحديد معلومات حول أية شبكات WiMAX متصلة."</string>
-    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"تغيير حالة WiMAX"</string>
-    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"للسماح للتطبيق بتوصيل الجهاز اللوحي بشبكات WiMAX وقطع اتصاله بها."</string>
-    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"للسماح للتطبيق بتوصيل الهاتف بشبكات WiMAX وقطع اتصاله بها."</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"‏الاتصال بـشبكة WiMAX وقطع الاتصال بها"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"‏للسماح للتطبيق بتحديد ما إذا تم تمكين WiMAX وتحديد معلومات حول أية شبكات WiMAX متصلة."</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"‏تغيير حالة WiMAX"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"‏للسماح للتطبيق بتوصيل الجهاز اللوحي بشبكات WiMAX وقطع اتصاله بها."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"‏للسماح للتطبيق بتوصيل الهاتف بشبكات WiMAX وقطع اتصاله بها."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"تقييم الشبكات"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"للسماح للتطبيق بترتيب الشبكات وتحديد تلك الشبكات التي من المفضل أن يستخدمها الجهاز اللوحي."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"للسماح للتطبيق بترتيب الشبكات وتحديد تلك الشبكات التي من المفضل أن يستخدمها الهاتف."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"الاتصال بأجهزة بلوتوث"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"للسماح للتطبيق بعرض تهيئة البلوتوث على الجهاز اللوحي وإجراء اتصالات وقبولها مع الأجهزة المقترنة."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"للسماح للتطبيق بعرض تهيئة البلوتوث على الهاتف وإجراء اتصالات وقبولها مع الأجهزة المقترنة."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"التحكم في اتصال الحقل القريب"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"للسماح للتطبيق بالاتصال بعلامات الاتصال قريب المدى (NFC)، والبطاقات وبرامج القراءة."</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"‏للسماح للتطبيق بالاتصال بعلامات الاتصال قريب المدى (NFC)، والبطاقات وبرامج القراءة."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"تعطيل قفل الشاشة"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"للسماح للتطبيق بتعطيل تأمين المفاتيح وأي أمان لكلمة مرور مرتبطة. على سبيل المثال، يعطل الهاتف تأمين المفاتيح عند استقبال مكالمة هاتفية واردة، ثم يعيد تمكين تأمين المفاتيح عند انتهاء المكالمة."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"قراءة إعدادات المزامنة"</string>
@@ -638,14 +691,14 @@
     <string name="permdesc_readDictionary" msgid="659614600338904243">"للسماح للتطبيق بقراءة جميع الكلمات والأسماء والعبارات التي ربما يكون المستخدم قد خزنها في قاموس المستخدم."</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"إضافة كلمات إلى القاموس المعرّف بواسطة المستخدم"</string>
     <string name="permdesc_writeDictionary" msgid="8185385716255065291">"للسماح للتطبيق بكتابة كلمات جديدة في قاموس المستخدم."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"قراءة محتويات وحدة تخزين USB"</string>
-    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"قراءة محتويات بطاقة SD"</string>
-    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"للسماح للتطبيق بقراءة محتويات وحدة تخزين USB."</string>
-    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"للسماح للتطبيق بقراءة محتويات بطاقة SD."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"تعديل محتويات وحدة تخزين USB أو حذفها"</string>
-    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"تعديل محتويات بطاقة SD أو حذفها"</string>
-    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"للسماح للتطبيق بالكتابة إلى وحدة تخزين USB."</string>
-    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"للسماح للتطبيق بالكتابة إلى بطاقة SD."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"‏قراءة محتويات وحدة تخزين USB"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"‏قراءة محتويات بطاقة SD"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"‏للسماح للتطبيق بقراءة محتويات وحدة تخزين USB."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"‏للسماح للتطبيق بقراءة محتويات بطاقة SD."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"‏تعديل محتويات وحدة تخزين USB أو حذفها"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"‏تعديل محتويات بطاقة SD أو حذفها"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"‏للسماح للتطبيق بالكتابة إلى وحدة تخزين USB."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"‏للسماح للتطبيق بالكتابة إلى بطاقة SD."</string>
     <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"تعديل/حذف محتويات وحدة تخزين الوسائط الداخلية"</string>
     <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"للسماح للتطبيق بتعديل محتويات وحدة تخزين الوسائط الداخلية."</string>
     <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"إدارة السعة التخزينية للمستند"</string>
@@ -655,7 +708,7 @@
     <string name="permlab_cache_filesystem" msgid="5656487264819669824">"الدخول إلى نظام ملفات ذاكرة التخزين المؤقت"</string>
     <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"للسماح للتطبيق بقراءة نظام ملفات ذاكرة التخزين المؤقت والكتابة به."</string>
     <string name="permlab_use_sip" msgid="5986952362795870502">"إجراء/تلقي مكالمات عبر الإنترنت"</string>
-    <string name="permdesc_use_sip" msgid="4717632000062674294">"للسماح للتطبيق باستخدام خدمة SIP لإجراء/تلقي مكالمات عبر الإنترنت."</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"‏للسماح للتطبيق باستخدام خدمة SIP لإجراء/تلقي مكالمات عبر الإنترنت."</string>
     <string name="permlab_bind_call_service" msgid="6724009726671246551">"التفاعل مع الشاشة أثناء الاتصال"</string>
     <string name="permdesc_bind_call_service" msgid="8732547662442572435">"للسماح للتطبيق بالتحكم في وقت وكيفية مشاهدة المستخدم للشاشة أثناء الاتصال."</string>
     <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"قراءة بيانات الاستخدام السابقة للشبكة"</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"يتيح للتطبيق استرجاع الإشعارات وفحصها ومسحها، بما في ذلك تلك التي نشرتها تطبيقات أخرى."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"الربط بخدمة تلقّي الإشعارات الصوتية"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"يتيح للمالك الربط بواجهة المستوى العلوي لخدمة تلقّي الإشعارات الصوتية. ولن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"الربط بخدمة موفر الحالة"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"للسماح للمالك بالربط بواجهة المستوى العلوي لخدمة موفر الحالة. لن تكون هناك حاجة إلى هذا الإعداد مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"استدعاء تطبيق التهيئة الذي يوفره مشغل شبكة الجوال"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"للسماح للمالك باستدعاء تطبيق التهيئة الذي يوفره مشغل شبكة الجوال. لن تكون هناك حاجة إليه مطلقًا مع التطبيقات العادية."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"الاستماع إلى ملاحظات حول أحوال الشبكة"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"للسماح للتطبيق بالاستماع إلى ملاحظات حول أحوال الشبكة. لا حاجة إلى هذا مع التطبيقات العادية."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"تغيير معايرة أجهزة الإدخال"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"يتيح للتطبيق إمكانية تعديل معلمات المعايرة في شاشة اللمس. يجب عدم اللجوء إليه مع التطبيقات العادية."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"‏الدخول إلى شهادات DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"‏للسماح لأحد التطبيقات بتقديم شهادات DRM واستخدامها. لا يجب أن يكون ذلك لازمًا مطلقًا مع التطبيقات العادية."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"تعيين قواعد كلمة المرور"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"يمكنك التحكم في الطول والأحرف المسموح بها في كلمات مرور إلغاء تأمين الشاشة."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"مراقبة محاولات إلغاء قفل الشاشة"</string>
@@ -809,14 +868,15 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"المنزل"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"العمل"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"غير ذلك"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"اكتب رمز رقم التعريف الشخصي"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"اكتب رمز PUK ورمز رقم التعريف الشخصي الجديد"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"رمز PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"رمز رقم التعريف الشخصي الجديد"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"لم يتم العثور على تطبيق لعرض جهة الاتصال هذه."</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"‏اكتب رمز رمز PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"‏اكتب رمز PUK ورمز رمز PIN الجديد"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"‏رمز PUK"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"‏رمز رمز PIN الجديد"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"المس لكتابة كلمة المرور"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"اكتب كلمة المرور لإلغاء التأمين"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"اكتب رقم التعريف الشخصي لإلغاء التأمين"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"رقم التعريف الشخصي غير صحيح."</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"‏اكتب رمز PIN لإلغاء التأمين"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"‏رمز PIN غير صحيح."</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"لإلغاء التأمين، اضغط على \"القائمة\" ثم على 0."</string>
     <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"رقم الطوارئ"</string>
     <string name="lockscreen_carrier_default" msgid="8963839242565653192">"لا تتوفر خدمة"</string>
@@ -834,13 +894,13 @@
     <string name="lockscreen_charged" msgid="321635745684060624">"تم الشحن"</string>
     <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="lockscreen_low_battery" msgid="1482873981919249740">"توصيل جهاز الشحن."</string>
-    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"ليست هناك بطاقة SIM"</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"ليس هناك بطاقة SIM في الجهاز اللوحي."</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"ليس هناك بطاقة SIM في الهاتف."</string>
-    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"أدخل بطاقة SIM."</string>
-    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string>
-    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"بطاقة SIM غير قابلة للاستخدام."</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"تم تعطيل بطاقة SIM بشكل دائم.\n اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"‏ليست هناك بطاقة SIM"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"‏ليس هناك بطاقة SIM في الجهاز اللوحي."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"‏ليس هناك بطاقة SIM في الهاتف."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"‏أدخل بطاقة SIM."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"‏بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"‏بطاقة SIM غير قابلة للاستخدام."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"‏تم تعطيل بطاقة SIM بشكل دائم.\n اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string>
     <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"زر المقطع الصوتي السابق"</string>
     <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"زر المقطع الصوتي التالي"</string>
     <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"زر الإيقاف المؤقت"</string>
@@ -848,15 +908,15 @@
     <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"زر الإيقاف"</string>
     <string name="emergency_calls_only" msgid="6733978304386365407">"مكالمات طوارئ فقط"</string>
     <string name="lockscreen_network_locked_message" msgid="143389224986028501">"الشبكة مؤمّنة"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"بطاقة SIM مؤمّنة بكود PUK."</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"‏بطاقة SIM مؤمّنة بكود PUK."</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"راجع دليل المستخدم أو اتصل بخدمة العملاء."</string>
-    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"بطاقة SIM مؤمّنة."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"‏بطاقة SIM مؤمّنة."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"‏جارٍ إلغاء تأمين بطاقة SIM…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة.\n\nالرجاء إعادة المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"لقد كتبت كلمة المرور <xliff:g id="NUMBER_0">%d</xliff:g> مرة بشكل غير صحيح. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"لقد كتبت رقم التعريف الشخصي <xliff:g id="NUMBER_0">%d</xliff:g> مرة بشكل غير صحيح. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الجهاز اللوحي باستخدام معلومات تسجيل الدخول إلى Google.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام معلومات تسجيل الدخول إلى Google.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"‏لقد كتبت رمز PIN <xliff:g id="NUMBER_0">%d</xliff:g> مرة بشكل غير صحيح. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"‏لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الجهاز اللوحي باستخدام معلومات تسجيل الدخول إلى Google.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"‏لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام معلومات تسجيل الدخول إلى Google.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"لقد حاولت إلغاء تأمين الجهاز اللوحي <xliff:g id="NUMBER_0">%d</xliff:g> من المرات. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة، ستتم إعادة تعيين الجهاز اللوحي إلى الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"لقد حاولت إلغاء تأمين الهاتف <xliff:g id="NUMBER_0">%d</xliff:g> من المرات. بعد <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة، ستتم إعادة تعيين الهاتف إلى الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"لقد حاولت إلغاء تأمين الجهاز اللوحي <xliff:g id="NUMBER">%d</xliff:g> من المرات بشكل غير صحيح. سيتم الآن إعادة تعيين الجهاز اللوحي إلى الإعدادات الافتراضية للمصنع."</string>
@@ -865,12 +925,12 @@
     <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"هل نسيت النمط؟"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"إلغاء تأمين الحساب"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"محاولات النقش كثيرة جدًا"</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"‏لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
     <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"اسم المستخدم (البريد إلكتروني)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"كلمة المرور"</string>
     <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"تسجيل الدخول"</string>
     <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"اسم المستخدم غير صحيح أو كلمة المرور غير صحيحة."</string>
-    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b></string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"‏هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b></string>
     <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"جارٍ التحقق..."</string>
     <string name="lockscreen_unlock_label" msgid="737440483220667054">"إلغاء تأمين"</string>
     <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"تشغيل الصوت"</string>
@@ -879,7 +939,7 @@
     <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"تم محو النمط"</string>
     <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"تمت إضافة الخلية"</string>
     <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"اكتمل النمط"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. الأداة %2$d من %3$d."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"‏%1$s. الأداة %2$d من %3$d."</string>
     <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"إضافة أداة."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"فارغة"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"تم توسيع منطقة إلغاء القفل."</string>
@@ -896,7 +956,7 @@
     <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"إلغاء القفل باستخدام التمرير."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string>
     <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"تأمين الجهاز بالوجه."</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"إلغاء القفل باستخدام رقم التعريف الشخصي."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"‏إلغاء القفل باستخدام رمز PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"إلغاء القفل باستخدام كلمة المرور."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"منطقة النقش."</string>
     <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"منطقة التمرير."</string>
@@ -910,8 +970,8 @@
     <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
     <string name="factorytest_failed" msgid="5410270329114212041">"أخفق اختبار المصنع"</string>
-    <string name="factorytest_not_system" msgid="4435201656767276723">"إجراء FACTORY_TEST غير متاح سوى للحزم المثبتة في /system/app."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"لم يتم العثور على أية حزمة توفر إجراء FACTORY_TEST."</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"‏إجراء FACTORY_TEST غير متاح سوى للحزم المثبتة في /system/app."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"‏لم يتم العثور على أية حزمة توفر إجراء FACTORY_TEST."</string>
     <string name="factorytest_reboot" msgid="6320168203050791643">"إعادة تشغيل"</string>
     <string name="js_dialog_title" msgid="1987483977834603872">"تعرض الصفحة في \"<xliff:g id="TITLE">%s</xliff:g>\":"</string>
     <string name="js_dialog_title_default" msgid="6961903213729667573">"جافا سكريبت"</string>
@@ -940,7 +1000,7 @@
     <string name="autofill_area" msgid="3547409050889952423">"المنطقة"</string>
     <string name="autofill_emirate" msgid="2893880978835698818">"الإمارة"</string>
     <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"قراءة إشارات ويب والسجل"</string>
-    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"للسماح للتطبيق بقراءة سجل جميع عناوين URL التي زارها المتصفح، وجميع الإشارات المرجعية في المتصفح. ملاحظة: لا يجوز فرض هذا الإذن من قِبل متصفحات جهة خارجية أو تطبيقات أخرى تتوفر بها إمكانيات تصفح الويب."</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"‏للسماح للتطبيق بقراءة سجل جميع عناوين URL التي زارها المتصفح، وجميع الإشارات المرجعية في المتصفح. ملاحظة: لا يجوز فرض هذا الإذن من قِبل متصفحات جهة خارجية أو تطبيقات أخرى تتوفر بها إمكانيات تصفح الويب."</string>
     <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"كتابة إشارات ويب والسجل"</string>
     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"للسماح للتطبيق بتعديل سجل المتصفح أو الإشارات المرجعية المخزنة على جهازك اللوحي. وقد يتيح هذا للتطبيق محو بيانات المتصفح أو تعديلها. ملاحظة: لا يجوز فرض هذا الإذن من قِبل متصفحات جهات خارجية أو تطبيقات أخرى بها إمكانيات تصفح الويب."</string>
     <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"للسماح للتطبيق بتعديل سجل المتصفح أو الإشارات المرجعية المخزنة على هاتفك. وقد يتيح هذا للتطبيق محو بيانات المتصفح أو تعديلها. ملاحظة: لا يجوز فرض هذا الإذن من قِبل متصفحات جهات خارجية أو تطبيقات أخرى بها إمكانيات تصفح الويب."</string>
@@ -977,9 +1037,9 @@
     <string name="searchview_description_clear" msgid="1330281990951833033">"محو طلب البحث"</string>
     <string name="searchview_description_submit" msgid="2688450133297983542">"إرسال طلب البحث"</string>
     <string name="searchview_description_voice" msgid="2453203695674994440">"البحث الصوتي"</string>
-    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"هل تريد تمكين ميزة Explore by Touch؟"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تمكين ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الجهاز اللوحي."</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تمكين ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الهاتف."</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"‏هل تريد تمكين ميزة Explore by Touch؟"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"‏يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تمكين ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الجهاز اللوحي."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"‏يريد <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> تمكين ميزة Explore by Touch. عند تشغيل ميزة Explore by Touch، سيكون بإمكانك سماع أو مشاهدة أوصاف لما تحت إصبعك أو إجراء إيماءات للتفاعل مع الهاتف."</string>
     <string name="oneMonthDurationPast" msgid="7396384508953779925">"قبل شهر واحد"</string>
     <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"قبل شهر واحد"</string>
   <plurals name="num_seconds_ago">
@@ -1095,7 +1155,7 @@
     <string name="paste" msgid="5629880836805036433">"لصق"</string>
     <string name="replace" msgid="5781686059063148930">"استبدال..."</string>
     <string name="delete" msgid="6098684844021697789">"حذف"</string>
-    <string name="copyUrl" msgid="2538211579596067402">"نسخ عنوان URL"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"‏نسخ عنوان URL"</string>
     <string name="selectTextMode" msgid="1018691815143165326">"تحديد نص"</string>
     <string name="textSelectionCABTitle" msgid="5236850394370820357">"تحديد النص"</string>
     <string name="addToDictionary" msgid="4352161534510057874">"إضافة إلى القاموس"</string>
@@ -1117,9 +1177,9 @@
     <string name="whichApplication" msgid="4533185947064773386">"إكمال الإجراء باستخدام"</string>
     <string name="whichHomeApplication" msgid="4616420172727326782">"تحديد تطبيق الشاشة الرئيسية"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"الاستخدام بشكل افتراضي لهذا الإجراء."</string>
-    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"يمكنك محو الإعدادات الافتراضية في إعدادات النظام &gt; التطبيقات &gt; ما تم تنزيله."</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"‏يمكنك محو الإعدادات الافتراضية في إعدادات النظام &gt; التطبيقات &gt; ما تم تنزيله."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"اختيار إجراء"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"اختيار أحد التطبيقات لجهاز USB"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"‏اختيار أحد التطبيقات لجهاز USB"</string>
     <string name="noApplications" msgid="2991814273936504689">"ليست هناك تطبيقات يمكنها تنفيذ هذا الإجراء."</string>
     <string name="aerr_title" msgid="1905800560317137752"></string>
     <string name="aerr_application" msgid="932628488013092776">"للأسف، توقف <xliff:g id="APPLICATION">%1$s</xliff:g>."</string>
@@ -1138,10 +1198,10 @@
     <string name="launch_warning_original" msgid="188102023021668683">"تم تشغيل <xliff:g id="APP_NAME">%1$s</xliff:g> من الأصل."</string>
     <string name="screen_compat_mode_scale" msgid="3202955667675944499">"تدرج"</string>
     <string name="screen_compat_mode_show" msgid="4013878876486655892">"الإظهار دائمًا"</string>
-    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"يمكنك إعادة تمكين هذا في إعدادات النظام &gt; التطبيقات &gt; ما تم تنزيله."</string>
-    <string name="smv_application" msgid="3307209192155442829">"انتهك التطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> (العملية <xliff:g id="PROCESS">%2$s</xliff:g>) سياسة StrictMode المفروضة ذاتيًا."</string>
-    <string name="smv_process" msgid="5120397012047462446">"انتهكت العملية <xliff:g id="PROCESS">%1$s</xliff:g> سياسة StrictMode المفروضة ذاتيًا."</string>
-    <string name="android_upgrading_title" msgid="1584192285441405746">"جارٍ ترقية Android..."</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"‏يمكنك إعادة تمكين هذا في إعدادات النظام &gt; التطبيقات &gt; ما تم تنزيله."</string>
+    <string name="smv_application" msgid="3307209192155442829">"‏انتهك التطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> (العملية <xliff:g id="PROCESS">%2$s</xliff:g>) سياسة StrictMode المفروضة ذاتيًا."</string>
+    <string name="smv_process" msgid="5120397012047462446">"‏انتهكت العملية <xliff:g id="PROCESS">%1$s</xliff:g> سياسة StrictMode المفروضة ذاتيًا."</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"‏جارٍ ترقية Android..."</string>
     <string name="android_upgrading_apk" msgid="7904042682111526169">"جارٍ تحسين التطبيق <xliff:g id="NUMBER_0">%1$d</xliff:g> من <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="android_upgrading_starting_apps" msgid="451464516346926713">"بدء التطبيقات."</string>
     <string name="android_upgrading_complete" msgid="1405954754112999229">"جارٍ إعادة التشغيل."</string>
@@ -1174,23 +1234,23 @@
     <string name="ringtone_picker_title" msgid="3515143939175119094">"نغمات الرنين"</string>
     <string name="ringtone_unknown" msgid="5477919988701784788">"نغمة رنين غير معروفة"</string>
   <plurals name="wifi_available">
-    <item quantity="one" msgid="6654123987418168693">"شبكة Wi-Fi متاحة"</item>
-    <item quantity="other" msgid="4192424489168397386">"شبكات Wi-Fi متاحة"</item>
+    <item quantity="one" msgid="6654123987418168693">"‏شبكة Wi-Fi متاحة"</item>
+    <item quantity="other" msgid="4192424489168397386">"‏شبكات Wi-Fi متاحة"</item>
   </plurals>
   <plurals name="wifi_available_detailed">
-    <item quantity="one" msgid="1634101450343277345">"هناك شبكة Wi-Fi مفتوحة متاحة"</item>
-    <item quantity="other" msgid="7915895323644292768">"هناك شبكات Wi-Fi مفتوحة متاحة"</item>
+    <item quantity="one" msgid="1634101450343277345">"‏هناك شبكة Wi-Fi مفتوحة متاحة"</item>
+    <item quantity="other" msgid="7915895323644292768">"‏هناك شبكات Wi-Fi مفتوحة متاحة"</item>
   </plurals>
-    <string name="wifi_available_sign_in" msgid="4029489716605255386">"تسجيل الدخول إلى شبكة Wi-Fi"</string>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"‏تسجيل الدخول إلى شبكة Wi-Fi"</string>
     <string name="network_available_sign_in" msgid="8495155593358054676">"تسجيل الدخول إلى الشبكة"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
-    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"تعذر الاتصال بـ Wi-Fi"</string>
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‏تعذر الاتصال بـ Wi-Fi"</string>
     <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" لديها اتصال إنترنت رديء."</string>
-    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"اتصال Wi-Fi مباشر"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"ابدأ Wi-Fi Direct. يؤدي هذا إلى إيقاف عميل/نقطة اتصال Wi-Fi."</string>
-    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"تعذر بدء Wi-Fi Direct."</string>
-    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"تم تشغيل اتصال Wi-Fi المباشر"</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"‏اتصال Wi-Fi مباشر"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"‏ابدأ Wi-Fi Direct. يؤدي هذا إلى إيقاف عميل/نقطة اتصال Wi-Fi."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"‏تعذر بدء Wi-Fi Direct."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"‏تم تشغيل اتصال Wi-Fi المباشر"</string>
     <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"المس للحصول على الإعدادات"</string>
     <string name="accept" msgid="1645267259272829559">"قبول"</string>
     <string name="decline" msgid="2112225451706137894">"رفض"</string>
@@ -1198,28 +1258,28 @@
     <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"دعوة للاتصال"</string>
     <string name="wifi_p2p_from_message" msgid="570389174731951769">"من:"</string>
     <string name="wifi_p2p_to_message" msgid="248968974522044099">"إلى:"</string>
-    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"اكتب رقم التعريف الشخصي المطلوب:"</string>
-    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"رقم التعريف الشخصي:"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"سيتم قطع اتصال الجهاز اللوحي مؤقتًا بشبكة Wi-Fi في الوقت الذي يكون فيه متصلاً بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"سيتم قطع اتصال الهاتف مؤقتًا بشبكة Wi-Fi في الوقت الذي يكون فيه متصلاً بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"‏اكتب رمز PIN المطلوب:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"‏رمز PIN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"‏سيتم قطع اتصال الجهاز اللوحي مؤقتًا بشبكة Wi-Fi في الوقت الذي يكون فيه متصلاً بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"‏سيتم قطع اتصال الهاتف مؤقتًا بشبكة Wi-Fi في الوقت الذي يكون فيه متصلاً بـ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="select_character" msgid="3365550120617701745">"إدراج حرف"</string>
-    <string name="sms_control_title" msgid="7296612781128917719">"إرسال رسائل قصيرة SMS"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; يرسل عددًا كبيرًا من الرسائل القصيرة SMS. هل تريد السماح لهذا التطبيق بالاستمرار في إرسال الرسائل؟"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"‏إرسال رسائل قصيرة SMS"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; يرسل عددًا كبيرًا من الرسائل القصيرة SMS. هل تريد السماح لهذا التطبيق بالاستمرار في إرسال الرسائل؟"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"السماح"</string>
     <string name="sms_control_no" msgid="625438561395534982">"رفض"</string>
-    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"هناك رغبة من &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; في إرسال رسالة إلى &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"‏هناك رغبة من &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; في إرسال رسالة إلى &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
     <string name="sms_short_code_details" msgid="3492025719868078457">"هذا "<font fgcolor="#ffffb060">"قد يؤدي إلى فرض رسوم"</font>" على حسابك على الجوال."</string>
     <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"سيؤدي هذا إلى فرض رسوم على حسابك على الجوال."</font></string>
     <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"إرسال"</string>
     <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"إلغاء"</string>
     <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"تذكر اختياري"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"يمكنك تغيير ذلك لاحقًا من إعدادات &gt; تطبيقات"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"‏يمكنك تغيير ذلك لاحقًا من إعدادات &gt; تطبيقات"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"السماح دومًا"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"عدم السماح مطلقًا"</string>
-    <string name="sim_removed_title" msgid="6227712319223226185">"تمت إزالة بطاقة SIM"</string>
-    <string name="sim_removed_message" msgid="2333164559970958645">"لن تكون شبكة الجوال متاحة حتى تتم إعادة التشغيل وإدخال بطاقة SIM صالحة."</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"‏تمت إزالة بطاقة SIM"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"‏لن تكون شبكة الجوال متاحة حتى تتم إعادة التشغيل وإدخال بطاقة SIM صالحة."</string>
     <string name="sim_done_button" msgid="827949989369963775">"تم"</string>
-    <string name="sim_added_title" msgid="3719670512889674693">"تمت إضافة بطاقة SIM"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"‏تمت إضافة بطاقة SIM"</string>
     <string name="sim_added_message" msgid="6599945301141050216">"أعد تشغيل جهازك للدخول إلى شبكة الجوال."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"إعادة التشغيل"</string>
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"تعيين الوقت"</string>
@@ -1230,38 +1290,38 @@
     <string name="perms_description_app" msgid="5139836143293299417">"يقدمه <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
     <string name="no_permissions" msgid="7283357728219338112">"لا أذونات مطلوبة"</string>
     <string name="perm_costs_money" msgid="4902470324142151116">"قد يكلفك هذا مالاً."</string>
-    <string name="usb_storage_activity_title" msgid="4465055157209648641">"تخزين USB كبير السعة"</string>
-    <string name="usb_storage_title" msgid="5901459041398751495">"USB متصل"</string>
-    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"لقد اتصلت بجهاز الكمبيوتر من خلال USB. المس الزر أدناه إذا كنت تريد نسخ الملفات بين جهاز الكمبيوتر ووحدة تخزين USB في Android."</string>
-    <string name="usb_storage_message" product="default" msgid="805351000446037811">"لقد اتصلت بجهاز الكمبيوتر من خلال USB. المس الزر أدناه إذا كنت تريد نسخ الملفات بين جهاز الكمبيوتر وبطاقة SD لـ Android."</string>
-    <string name="usb_storage_button_mount" msgid="1052259930369508235">"تشغيل سعة تخزين USB"</string>
-    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"حدثت مشكلة أثناء استخدام وحدة تخزين USB لتخزين كبير السعة عبر USB."</string>
-    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"حدثت مشكلة أثناء استخدام بطاقة SD لتخزين كبير السعة عبر USB."</string>
-    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB متصل"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"‏تخزين USB كبير السعة"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"‏USB متصل"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"‏لقد اتصلت بجهاز الكمبيوتر من خلال USB. المس الزر أدناه إذا كنت تريد نسخ الملفات بين جهاز الكمبيوتر ووحدة تخزين USB في Android."</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"‏لقد اتصلت بجهاز الكمبيوتر من خلال USB. المس الزر أدناه إذا كنت تريد نسخ الملفات بين جهاز الكمبيوتر وبطاقة SD لـ Android."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"‏تشغيل سعة تخزين USB"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"‏حدثت مشكلة أثناء استخدام وحدة تخزين USB لتخزين كبير السعة عبر USB."</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"‏حدثت مشكلة أثناء استخدام بطاقة SD لتخزين كبير السعة عبر USB."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"‏USB متصل"</string>
     <string name="usb_storage_notification_message" msgid="939822783828183763">"المس لنسخ الملفات إلى/من جهاز الكمبيوتر."</string>
-    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"إيقاف تشغيل سعة تخزين USB"</string>
-    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"المس لإيقاف وحدة تخزين USB."</string>
-    <string name="usb_storage_stop_title" msgid="660129851708775853">"سعة USB التخزينية المستخدمة"</string>
-    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"قبل إيقاف وحدة تخزين USB، الغ تحميل (\"أخرج\") وحدة تخزين USB لـ Android من الكمبيوتر."</string>
-    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"قبل إيقاف وحدة تخزين USB، الغ تحميل (\"أخرج\") بطاقة SD لـ Android من الكمبيوتر."</string>
-    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"إيقاف تشغيل سعة تخزين USB"</string>
-    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"حدثت مشكلة أثناء إيقاف وحدة تخزين USB. تحقق من إلغاء تحميل مضيف USB، ثم أعد المحاولة."</string>
-    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"تشغيل سعة تخزين USB"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"إذا تم تشغيل وحدة تخزين USB، فستتوقف بعض التطبيقات التي تستخدمها وربما تصبح غير متاحة إلى أن يتم إيقاف وحدة تخزين USB."</string>
-    <string name="dlg_error_title" msgid="7323658469626514207">"لم تتم عملية USB بنجاح"</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"‏إيقاف تشغيل سعة تخزين USB"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"‏المس لإيقاف وحدة تخزين USB."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"‏سعة USB التخزينية المستخدمة"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"‏قبل إيقاف وحدة تخزين USB، الغ تحميل (\"أخرج\") وحدة تخزين USB لـ Android من الكمبيوتر."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"‏قبل إيقاف وحدة تخزين USB، الغ تحميل (\"أخرج\") بطاقة SD لـ Android من الكمبيوتر."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"‏إيقاف تشغيل سعة تخزين USB"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"‏حدثت مشكلة أثناء إيقاف وحدة تخزين USB. تحقق من إلغاء تحميل مضيف USB، ثم أعد المحاولة."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"‏تشغيل سعة تخزين USB"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"‏إذا تم تشغيل وحدة تخزين USB، فستتوقف بعض التطبيقات التي تستخدمها وربما تصبح غير متاحة إلى أن يتم إيقاف وحدة تخزين USB."</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"‏لم تتم عملية USB بنجاح"</string>
     <string name="dlg_ok" msgid="7376953167039865701">"موافق"</string>
     <string name="usb_mtp_notification_title" msgid="3699913097391550394">"التوصيل كجهاز وسائط"</string>
     <string name="usb_ptp_notification_title" msgid="1960817192216064833">"التوصيل ككاميرا"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"التوصيل كأداة تثبيت"</string>
-    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"الاتصال بجهاز USB ملحق"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"المس للاطلاع على خيارات USB الأخرى."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"تهيئة وحدة تخزين USB؟"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"هل تريد تنسيق بطاقة SD؟"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"سيتم مسح جميع الملفات المخزنة على وحدة تخزين USB. لا يمكن عكس هذا الإجراء!"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‏الاتصال بجهاز USB ملحق"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"‏المس للاطلاع على خيارات USB الأخرى."</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"‏تهيئة وحدة تخزين USB؟"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"‏هل تريد تنسيق بطاقة SD؟"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"‏سيتم مسح جميع الملفات المخزنة على وحدة تخزين USB. لا يمكن عكس هذا الإجراء!"</string>
     <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ستفقد جميع البيانات على بطاقتك."</string>
     <string name="extmedia_format_button_format" msgid="4131064560127478695">"تنسيق"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"تم توصيل تصحيح أخطاء USB"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"المس لتعطيل تصحيح أخطاء USB."</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"‏تم توصيل تصحيح أخطاء USB"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"‏المس لتعطيل تصحيح أخطاء USB."</string>
     <string name="select_input_method" msgid="4653387336791222978">"اختيار أسلوب الإدخال"</string>
     <string name="configure_input_methods" msgid="9091652157722495116">"إعداد أسلوب الإدخال"</string>
     <string name="use_physical_keyboard" msgid="6203112478095117625">"لوحة مفاتيح فعلية"</string>
@@ -1271,29 +1331,29 @@
     <string name="fast_scroll_alphabet" msgid="5433275485499039199">" أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789 أ ب ت ث ج ح خ د ذ ر ز س ش ص ض ط ظ ع غ ف ق ك ل م ن ه و ي"</string>
     <string name="candidates_style" msgid="4333913089637062257"><u>"العناصر المرشحة"</u></string>
-    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"تحضير وحدة تخزين USB"</string>
-    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"تحضير بطاقة SD"</string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"‏تحضير وحدة تخزين USB"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"‏تحضير بطاقة SD"</string>
     <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"التحقق من الأخطاء."</string>
-    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"وحدة تخزين USB فارغة"</string>
-    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"بطاقة SD فارغة"</string>
-    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"وحدة تخزين USB فارغة أو تشتمل على نظام ملفات غير معتمد."</string>
-    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"بطاقة SD فارغة أو تشتمل على نظام ملفات غير معتمد."</string>
-    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"وحدة تخزين USB تالفة"</string>
-    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"بطاقة SD تالفة"</string>
-    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"تعطلت وحدة تخزين USB. جرّب إعادة تنسيقها."</string>
-    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"تعطلت بطاقة SD. جرّب إعادة تنسيقها."</string>
-    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"تمت إزالة وحدة تخزين USB على غير المتوقع"</string>
-    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"تمت إزالة بطاقة SD على نحو غير متوقع"</string>
-    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"إلغاء تركيب وحدة تخزين USB قبل الإزالة لتجنب فقد البيانات."</string>
-    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"ألغ تحميل بطاقة SD قبل الإزالة لتجنب فقدان البيانات."</string>
-    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"يمكنك إزالة وحدة تخزين USB بشكل آمن"</string>
-    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"يمكن إزالة بطاقة SD بأمان"</string>
-    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"يمكنك إزالة وحدة تخزين USB بشكل آمن."</string>
-    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"يمكنك إزالة بطاقة SD بأمان."</string>
-    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"تمت إزالة وحدة تخزين USB"</string>
-    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"تمت إزالة بطاقة SD"</string>
-    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"تمت إزالة وحدة تخزين USB. أدرج وسائط جديدة."</string>
-    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"تمت إزالة بطاقة SD. أدخل بطاقة جديدة."</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"‏وحدة تخزين USB فارغة"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"‏بطاقة SD فارغة"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"‏وحدة تخزين USB فارغة أو تشتمل على نظام ملفات غير معتمد."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"‏بطاقة SD فارغة أو تشتمل على نظام ملفات غير معتمد."</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"‏وحدة تخزين USB تالفة"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"‏بطاقة SD تالفة"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"‏تعطلت وحدة تخزين USB. جرّب إعادة تنسيقها."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"‏تعطلت بطاقة SD. جرّب إعادة تنسيقها."</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"‏تمت إزالة وحدة تخزين USB على غير المتوقع"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"‏تمت إزالة بطاقة SD على نحو غير متوقع"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"‏إلغاء تركيب وحدة تخزين USB قبل الإزالة لتجنب فقد البيانات."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"‏ألغ تحميل بطاقة SD قبل الإزالة لتجنب فقدان البيانات."</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"‏يمكنك إزالة وحدة تخزين USB بشكل آمن"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"‏يمكن إزالة بطاقة SD بأمان"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"‏يمكنك إزالة وحدة تخزين USB بشكل آمن."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"‏يمكنك إزالة بطاقة SD بأمان."</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"‏تمت إزالة وحدة تخزين USB"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"‏تمت إزالة بطاقة SD"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"‏تمت إزالة وحدة تخزين USB. أدرج وسائط جديدة."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"‏تمت إزالة بطاقة SD. أدخل بطاقة جديدة."</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"لم يتم العثور على أي أنشطة متطابقة."</string>
     <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"تحديث إحصاءات استخدام المكون"</string>
     <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"للسماح للتطبيق بتعديل إحصاءات استخدام المكون المجمّعة. ليس للاستخدام بواسطة التطبيقات العادية."</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"السماح لأحد التطبيقات بالدخول إلى التخزين المحمي بقفل المفاتيح."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"التحكم في عرض وإخفاء قفل المفاتيح"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"للسماح لأحد التطبيقات بالتحكم في قفل المفاتيح."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"معرفة تغييرات حالة الاعتماد."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"للسماح للتطبيق بالتعرف على التغييرات في حالة الاعتماد."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"الالتزام بخدمة الوكيل المعتمد"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"للسماح لأحد التطبيقات بالالتزام بخدمة الوكيل المعتمد."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"التفاعل مع نظام التحديث والاسترداد"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"للسماح للتطبيق بالتفاعل مع نظام الاسترداد وتحديثات النظام."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"المس مرتين للتحكم في التكبير/التصغير"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"تعذرت إضافة أداة."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"تنفيذ"</string>
@@ -1329,13 +1395,14 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"الخلفية"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"تغيير الخلفية"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"برنامج تلقّي الإشعارات الصوتية"</string>
-    <string name="vpn_title" msgid="19615213552042827">"تم تنشيط الشبكة الظاهرية الخاصة (VPN)"</string>
-    <string name="vpn_title_long" msgid="6400714798049252294">"تم تنشيط VPN بواسطة <xliff:g id="APP">%s</xliff:g>"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"موفر الحالة"</string>
+    <string name="vpn_title" msgid="19615213552042827">"‏تم تنشيط الشبكة الظاهرية الخاصة (VPN)"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"‏تم تنشيط VPN بواسطة <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"المس لإدارة الشبكة."</string>
     <string name="vpn_text_long" msgid="6407351006249174473">"تم الاتصال بـ <xliff:g id="SESSION">%s</xliff:g>. المس لإدارة الشبكة."</string>
-    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"جارٍ الاتصال بشبكة ظاهرية خاصة (VPN) دائمة التشغيل..."</string>
-    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"تم الاتصال بشبكة ظاهرية خاصة (VPN) دائمة التشغيل"</string>
-    <string name="vpn_lockdown_error" msgid="6009249814034708175">"خطأ بشبكة ظاهرية خاصة (VPN) دائمة التشغيل"</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"‏جارٍ الاتصال بشبكة ظاهرية خاصة (VPN) دائمة التشغيل..."</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"‏تم الاتصال بشبكة ظاهرية خاصة (VPN) دائمة التشغيل"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"‏خطأ بشبكة ظاهرية خاصة (VPN) دائمة التشغيل"</string>
     <string name="vpn_lockdown_config" msgid="6415899150671537970">"المس للتهيئة"</string>
     <string name="upload_file" msgid="2897957172366730416">"اختيار ملف"</string>
     <string name="no_file_chosen" msgid="6363648562170759465">"لم يتم اختيار أي ملف"</string>
@@ -1359,18 +1426,18 @@
     <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> من <xliff:g id="TOTAL">%d</xliff:g>"</item>
   </plurals>
     <string name="action_mode_done" msgid="7217581640461922289">"تم"</string>
-    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"جارٍ إلغاء تحميل وحدة تخزين USB..."</string>
-    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"جارٍ إلغاء تحميل بطاقة SD..."</string>
-    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"جارٍ محو وحدة تخزين USB..."</string>
-    <string name="progress_erasing" product="default" msgid="6596988875507043042">"جارٍ محو بطاقة SD..."</string>
-    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"تعذر مسح وحدة تخزين USB."</string>
-    <string name="format_error" product="default" msgid="7315248696644510935">"تعذر مسح بطاقة SD."</string>
-    <string name="media_bad_removal" msgid="7960864061016603281">"تمت إزالة بطاقة SD قبل أن يتم إلغاء تركيبها."</string>
-    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"يتم حاليًا التحقق من وحدة تخزين USB."</string>
-    <string name="media_checking" product="default" msgid="7334762503904827481">"يتم الآن التحقق من بطاقة SD."</string>
-    <string name="media_removed" msgid="7001526905057952097">"تمت إزالة بطاقة SD."</string>
-    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"وحدة تخزين USB قيد الاستخدام بواسطة كمبيوتر حاليًا."</string>
-    <string name="media_shared" product="default" msgid="5706130568133540435">"بطاقة SD قيد الاستخدام حاليًا بواسطة كمبيوتر."</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"‏جارٍ إلغاء تحميل وحدة تخزين USB..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"‏جارٍ إلغاء تحميل بطاقة SD..."</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"‏جارٍ محو وحدة تخزين USB..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"‏جارٍ محو بطاقة SD..."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"‏تعذر مسح وحدة تخزين USB."</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"‏تعذر مسح بطاقة SD."</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"‏تمت إزالة بطاقة SD قبل أن يتم إلغاء تركيبها."</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"‏يتم حاليًا التحقق من وحدة تخزين USB."</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"‏يتم الآن التحقق من بطاقة SD."</string>
+    <string name="media_removed" msgid="7001526905057952097">"‏تمت إزالة بطاقة SD."</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"‏وحدة تخزين USB قيد الاستخدام بواسطة كمبيوتر حاليًا."</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"‏بطاقة SD قيد الاستخدام حاليًا بواسطة كمبيوتر."</string>
     <string name="media_unknown_state" msgid="729192782197290385">"وسائط خارجية في حالة غير معروفة."</string>
     <string name="share" msgid="1778686618230011964">"مشاركة"</string>
     <string name="find" msgid="4808270900322985960">"بحث"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"العالي"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"اختيار تطبيق"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"تعذر تشغيل <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"مشاركة مع"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"مشاركة مع <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"مقبض التمرير. المس مع الاستمرار."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"تمرير لأسفل لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"تمرير لليسار لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"تمرير لليمين لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"إلغاء تأمين"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"الكاميرا"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"صامت"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"تشغيل الصوت"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"بحث"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"مرر بسرعة لإلغاء التأمين."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"يمكنك توصيل سماعة رأس لسماع مفاتيح كلمة المرور عندما يتم نطقها."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"نقطة"</string>
@@ -1435,20 +1494,20 @@
     <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s، %2$s"</string>
     <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s، %2$s، %3$s"</string>
     <string name="storage_internal" msgid="4891916833657929263">"وحدة تخزين داخلية"</string>
-    <string name="storage_sd_card" msgid="3282948861378286745">"بطاقة SD"</string>
-    <string name="storage_usb" msgid="3017954059538517278">"وحدة تخزين USB"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"‏بطاقة SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"‏وحدة تخزين USB"</string>
     <string name="extract_edit_menu_button" msgid="8940478730496610137">"تعديل"</string>
     <string name="data_usage_warning_title" msgid="1955638862122232342">"تحذير استخدام البيانات"</string>
     <string name="data_usage_warning_body" msgid="2814673551471969954">"المس لعرض الاستخدام والإعدادات."</string>
     <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"تم تعطيل بيانات شبكات الجيل الثاني والجيل الثالث"</string>
     <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
     <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"تم تعطيل بيانات الجوال"</string>
-    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"تم تعطيل بيانات Wi-Fi"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"‏تم تعطيل بيانات Wi-Fi"</string>
     <string name="data_usage_limit_body" msgid="3317964706973601386">"المس للتمكين."</string>
-    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"تم تجاوز حد بيانات شبكات 2G-3G"</string>
-    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"تم تجاوز حد بيانات 4G"</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"‏تم تجاوز حد بيانات شبكات 2G-3G"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"‏تم تجاوز حد بيانات 4G"</string>
     <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"تم تجاوز حد بيانات الجوال"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"تم تجاوز حد بيانات شبكة Wi-Fi"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"‏تم تجاوز حد بيانات شبكة Wi-Fi"</string>
     <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> فوق الحد المعين."</string>
     <string name="data_usage_restricted_title" msgid="5965157361036321914">"تم تقييد بيانات الخلفية"</string>
     <string name="data_usage_restricted_body" msgid="6741521330997452990">"المس لإزالة التقييد."</string>
@@ -1464,8 +1523,8 @@
     <string name="expires_on" msgid="3676242949915959821">"تنتهي الصلاحية في:"</string>
     <string name="serial_number" msgid="758814067660862493">"الرقم المسلسل:"</string>
     <string name="fingerprints" msgid="4516019619850763049">"بصمات الأصابع:"</string>
-    <string name="sha256_fingerprint" msgid="4391271286477279263">"بصمة أصبع SHA-256:"</string>
-    <string name="sha1_fingerprint" msgid="7930330235269404581">"بصمة أصبع SHA-1:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"‏بصمة أصبع SHA-256:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"‏بصمة أصبع SHA-1:"</string>
     <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"عرض الكل"</string>
     <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"اختيار نشاط"</string>
     <string name="share_action_provider_share_with" msgid="5247684435979149216">"مشاركة مع"</string>
@@ -1483,20 +1542,26 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"النظام"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"صوت بلوتوث"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"عرض شاشة لاسلكي"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"تم"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"المنفذ الإعلامي"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"الاتصال بجهاز"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"بث الشاشة على الجهاز"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"جارٍ البحث عن الأجهزة…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"الإعدادات"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"قطع الاتصال"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"جارٍ الفحص..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"جارٍ الاتصال..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"متاح"</string>
     <string name="media_route_status_not_available" msgid="6739899962681886401">"غير متاح"</string>
     <string name="media_route_status_in_use" msgid="4533786031090198063">"قيد الاستخدام"</string>
     <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"شاشة مدمجة"</string>
-    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"شاشة HDMI"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"‏شاشة HDMI"</string>
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"المركب #<xliff:g id="ID">%1$d</xliff:g>"</string>
-    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>، <xliff:g id="DPI">%4$d</xliff:g> نقطة لكل بوصة"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"‏<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>، <xliff:g id="DPI">%4$d</xliff:g> نقطة لكل بوصة"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"آمن"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"تم التوصيل بشاشة لاسلكية"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"يتم عرض هذه الشاشة على جهاز آخر"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"جارٍ بث الشاشة"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"جارٍ الاتصال بـ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"جارٍ بث الشاشة"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"متصل بـ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"قطع الاتصال"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"الاتصال بالطوارئ"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"نسيت النقش"</string>
@@ -1505,27 +1570,27 @@
     <string name="kg_wrong_pin" msgid="1131306510833563801">"رقم تعريف شخصي خاطئ"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"حاول مرة أخرى خلال <xliff:g id="NUMBER">%1$d</xliff:g> ثانية."</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"ارسم نقشك"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخل رقم التعريف الشخصي لبطاقة SIM"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخل رقم التعريف الشخصي"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"‏أدخل رمز PIN لبطاقة SIM"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"‏أدخل رمز PIN"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"أدخل كلمة المرور"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخال رمز رقم التعريف الشخصي المراد"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأكيد رمز رقم التعريف الشخصي المراد"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رقم التعريف الشخصي غير صحيح."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اكتب رقم التعريف الشخصي المكون من 4 إلى 8 أرقام."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"يجب أن يتضمن رمز PUK‏ 8 أرقام أو أكثر."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"لا يتطابق رمزا رقم التعريف الشخصي"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"‏بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"‏إدخال رمز رمز PIN المراد"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"‏تأكيد رمز رمز PIN المراد"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"‏جارٍ إلغاء تأمين بطاقة SIM…"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"‏رمز PIN غير صحيح."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"‏اكتب رمز PIN المكون من 4 إلى 8 أرقام."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"‏يجب أن يتكون رمز PUK من 8 أرقام."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"‏أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"‏لا يتطابق رمزا رمز PIN"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"محاولات النقش كثيرة جدًا"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"‏لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"اسم المستخدم (البريد إلكتروني)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"كلمة المرور"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"تسجيل الدخول"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"اسم مستخدم غير صحيح أو كلمة مرور غير صالحة."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‏هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"جارٍ فحص الحساب…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"لقد كتبت رقم التعريف الشخصي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"‏لقد كتبت رمز PIN بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
@@ -1635,19 +1700,30 @@
     <string name="reason_service_unavailable" msgid="7824008732243903268">"خدمة الطباعة ليست ممكّنة"</string>
     <string name="print_service_installed_title" msgid="2246317169444081628">"تم تثبيت خدمة <xliff:g id="NAME">%s</xliff:g>"</string>
     <string name="print_service_installed_message" msgid="5897362931070459152">"انقر للتمكين."</string>
-    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"أدخل رقم التعريف الشخصي للمشرف"</string>
-    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"إدخال رقم التعريف الشخصي"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"‏أدخل رمز PIN للمشرف"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"‏إدخال رمز PIN"</string>
     <string name="restr_pin_incorrect" msgid="8571512003955077924">"غير صحيح"</string>
-    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"رقم التعريف الشخصي الحالي"</string>
-    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"رقم التعريف الشخصي الجديد"</string>
-    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"تأكيد رقم التعريف الشخصي الجديد"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"‏رمز PIN الحالي"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"‏رمز PIN الجديد"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"‏تأكيد رمز PIN الجديد"</string>
     <string name="restr_pin_create_pin" msgid="8017600000263450337">"إنشاء رقم تعريف شخصي لتعديل القيود"</string>
     <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"أرقام التعريف الشخصية لا تتطابق، أعد المحاولة."</string>
-    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"رقم التعريف الشخصي أقصر مما يلزم، يجب ألا يقل عن 4 أرقام. "</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"‏رمز PIN أقصر مما يلزم، يجب ألا يقل عن 4 أرقام. "</string>
   <plurals name="restr_pin_countdown">
     <item quantity="one" msgid="311050995198548675">"أعد المحاولة خلال ثانية واحدة."</item>
     <item quantity="other" msgid="4730868920742952817">"أعد المحاولة خلال <xliff:g id="COUNT">%d</xliff:g> ثانية"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"أعد المحاولة لاحقًا"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"مرر بسرعة من أعلى لأسفل للخروج من وضع ملء الشاشة."</string>
+    <string name="done_label" msgid="2093726099505892398">"تم"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"شريط التمرير الدائري للساعات"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"شريط التمرير الدائري للدقائق"</string>
+    <string name="select_hours" msgid="6043079511766008245">"تحديد الساعات"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"تحديد الدقائق"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"شبكة الشهر مكونة من الأيام"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"قائمة الأعوام"</string>
+    <string name="select_day" msgid="7774759604701773332">"تحديد الشهر واليوم"</string>
+    <string name="select_year" msgid="7952052866994196170">"تحديد العام"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"تم تحديد <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"تم حذف <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..479cfcf
--- /dev/null
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -0,0 +1,1591 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B"</string>
+    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="4638956954852782576">"Başlıqsız"</string>
+    <string name="ellipsis" msgid="7899829516048813237">"..."</string>
+    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefon nömrəsi yoxdur)"</string>
+    <string name="unknownName" msgid="2277556546742746522">"(Naməlum)"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Səsli poçt"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+    <string name="mmiError" msgid="5154499457739052907">"Bağlantı problemi və ya yalnış MM kodu."</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"Əməliyyat yalnız sabit nömrələrə yığımla məhdudlaşıb."</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"Servis işə salındı."</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"Xidmət aktiv edilmişdir:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"Xidmət deaktiv edilib."</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"Qeydiyyat uğurlu oldu."</string>
+    <string name="serviceErased" msgid="1288584695297200972">"Silinmə uğurlu olmuşdur."</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"Yanlış parol"</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI tamamdır."</string>
+    <string name="badPin" msgid="9015277645546710014">"Daxil etdiyiniz köhnə PİN düzgün deyil."</string>
+    <string name="badPuk" msgid="5487257647081132201">"Daxil etdiyiniz PUK düzgün deyil."</string>
+    <string name="mismatchPin" msgid="609379054496863419">"Daxil etdiyiniz PİN kodlar uyğun gəlmir."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"4-dən 8-ə qədər rəqəmi olan PIN yazın."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"8 və daha çox rəqəmi olan PUK yazın."</string>
+    <string name="needPuk" msgid="919668385956251611">"Sizin SİM kart PUK ilə kilidlənib. Onu açmaq üçün PUK kodu yazın."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"SIM kartın kilidini açmaq üçün PUK2 yazın"</string>
+    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
+    <string name="meid" msgid="4841221237681254195">"MEID"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"Daxil olan zəng edənin ID\'si"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"Gedən Zəng ID"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"Zəng yönləndirmə"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"Zəng gözləyir"</string>
+    <string name="BaMmi" msgid="455193067926770581">"Zəng qadağası"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"Parolu dəyiş"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"PİN dəyişmək"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"Hazırdakı nömrəyə zəng edilir"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"Zənglərin sayı məhdudlaşdırılıb"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"Üç yollu zəng"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"Xoşagəlməz zənglərdən imtina"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Çatdırılma zəngi"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"Narahat etməyin"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Adətən zəng edənin ID\'si məhdudlaşdırılır. Növbəti zəng: Məhdudlaşdırılıb"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Adətən zəng edənin ID\'si məhdudlaşdırılır. Növbəti zəng: Məhdudlaşdırılmayıb"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Adətən zəng edənin ID\'si məhdudlaşdırılmır. Növbəti zəng: Məhdudlaşdırılıb"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Adətən zəng edənin ID\'si məhdudlaşdırılmır. Növbəti zəng: Məhdudlaşdırılmayıb"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"Xidmət təmin edilməyib."</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"Siz zəng edənin ID nizamlarını dəyişə bilməzsiz."</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Məhdudlaşdırılmış keçid dəyişdi"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"Data xidmət bağlıdır."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Təcili xidmət bağlıdır."</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"Səs xidməti bağlıdır."</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"Bütün Səs xidmətləri bağlıdır"</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS xidməti bloklanıb."</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"Səs/data xidmətləri bloklanıb."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Səs/SMS xidmətləri bloklanıb."</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"Bütün səs/data/SMS xidmətləri bağlıdır."</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"Səs"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"Məlumat"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Async"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"Sinx"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"Paket"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"Rominq göstəricisi işləkdir"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"Rominq göstəricisi işlək deyil"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"Rominq göstəricisi yanır"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"Qonşuluqdan Kənar"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"Binadan kənar"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"Rominq - Arzuolunan sistem"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"Rominq - Mümkün sistem"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Rominq - Alyans partnyoru"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"Rominq - Premium partnyor"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"Rouminq - Tam Xidmət Funksionallığı"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"Rouminq - Qismən Xidmət Funksionallığı"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"Rouminq Banneri Açıqdır"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"Roaming Banner Off"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"Xidmət axtarılır"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yönləndirilmədi"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> <xliff:g id="TIME_DELAY">{2}</xliff:g> saniyə sonra"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yönləndirilmədi"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yönləndirilmədi"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"Özəllik kodu tamamlandı."</string>
+    <string name="fcError" msgid="3327560126588500777">"Əlaqə problemi və ya yanlış funksiya kodu."</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
+    <string name="httpError" msgid="7956392511146698522">"Şəbəkə xətası var idi."</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"URL tapıla bilmədi."</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Sayt autentifikasiya sxemi dəstəklənmir."</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"Təsdiq edilə bilmədi."</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Proksi server vasitəsilə təsdiqlənmə uğursuz oldu."</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"Serverə qoşula bilmədi."</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"Serverlə əlaqə alınmadı. Sonra cəhd edin."</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"Server ilə olan əlaqə zaman aşımına məruz qaldı."</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Bu səhifədə həddindən çox server yönləndirilmələri var."</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Protokol dəstəklənmir."</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Güvənli bağlantı yaradıla bilmədi."</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"URL yanlış olduğu üçün səhifəni açmaq mümkün olmadı."</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"Fayla giriş baş tutmadı."</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Tələb olunan fayl tapılmadı."</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Həddindən çox sorğu işlənilir. Daha sonra yoxlayın."</string>
+    <string name="notification_title" msgid="8967710025036163822">"<xliff:g id="ACCOUNT">%1$s</xliff:g> üçün giriş xətası"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"Sinxronlaşdırma"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinxronlaşdırma"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Həddindən çox <xliff:g id="CONTENT_TYPE">%s</xliff:g> silinmələri var."</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"Planşetin yaddaşı doludur. Boş yer üçün bəzi faylları silin."</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonun yaddaşı doludur. Boş yer üçün bəzi faylları silin."</string>
+    <string name="me" msgid="6545696007631404292">"Mən"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Planşet seçimləri"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"Telefon seçimləri"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"Səssiz rejim"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"Simsizi işə salın"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"Simsiz rabitəni söndürün"</string>
+    <string name="screen_lock" msgid="799094655496098153">"Ekran kilidi"</string>
+    <string name="power_off" msgid="4266614107412865048">"Söndür"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"Zəng deaktivdir"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"Zəng vibrasiyadadır"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"Zəngvuran açıqdır"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"Söndürülür..."</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Planşetiniz sönəcək."</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefonunuz sönəcək."</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Söndürmək istəyirsiz?"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"Təhlükəsiz rejimdə yenidən başlayın"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Təhlükəsiz rejimdə yenidən başlamaq istəyirsiniz mi? Bu, quraşdırdığınız bütün üçüncü tərəf tətbiqlərini deaktiv edəcək."</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"Son"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"Heç bir son tətbiq yoxdur."</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"Planşet seçimləri"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"Telefon seçimləri"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"Ekran kilidi"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"Söndür"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"Baq hesabatı"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"Baqı xəbər verin"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"Bu, sizin hazırkı cihaz durumu haqqında məlumat toplayacaq ki, elektron məktub şəklində göndərsin. Baq raportuna başlamaq üçün bir az vaxt lazım ola bilər, bir az səbr edin."</string>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Səssiz rejim"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Səs qapalıdır"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Səs Aktivdir"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Təyyarə rejimi"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Uçuş rejimi açıqdır"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Təyyarə rejimi qapalıdır"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+    <string name="safeMode" msgid="2788228061547930246">"Təhlükəsiz rejim"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"Android sistemi"</string>
+    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Ödənişli xidmətlər"</string>
+    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Xərc tutulacaq əməliyyatlar edir"</string>
+    <string name="permgrouplab_messages" msgid="7521249148445456662">"Sizin mesajlarınız"</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, elektron poçt və digər mesajları oxuyur və yazır."</string>
+    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Şəxsi məlumatınız"</string>
+    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Kontakt kartınızda saxlanılan məlumatlarınıza birbaşa giriş."</string>
+    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Sosial məlumatınız"</string>
+    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kontaktlarınız və sosial əlaqələriniz haqqında məlumata birbaşa giriş."</string>
+    <string name="permgrouplab_location" msgid="635149742436692049">"Yerləşməniz"</string>
+    <string name="permgroupdesc_location" msgid="5704679763124170100">"Fiziki adresinizi monitorinq edir."</string>
+    <string name="permgrouplab_network" msgid="5808983377727109831">"Şəbəkə kommunikasiyası"</string>
+    <string name="permgroupdesc_network" msgid="4478299413241861987">"Müxtəlif şəbəkə xüsusiyyətlərinə daxil ol."</string>
+    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Bluetooth üzərindən cihazlara və şəbəkələrə daxil ol."</string>
+    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio Ayarlar"</string>
+    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio ayarları dəyişin."</string>
+    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Batareyaya təsir edir"</string>
+    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Batareyanızın tez qurtarmasına səbəb olan funksiyalar istifadə edir"</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Təqvim"</string>
+    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Təqvimə və tədbirlərə birbaşa giriş."</string>
+    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"İstifadəçi Lüğətini Oxu"</string>
+    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"İstifadəçi lüğətindəki sözləri oxuyur."</string>
+    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"İstifadəçi Lüğətini Yaz"</string>
+    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"İstifadəçi lüğətinə sözlər əlavə edin."</string>
+    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Əlfəcinlər və Tarixçə"</string>
+    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Əlfəcinlərə və brauzer tarixinə birbaşa icazə."</string>
+    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Zəng"</string>
+    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Alarm qur."</string>
+    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Səsli poçt"</string>
+    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Səs poçtuna birbaşa çıxış."</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Audio yazmaq üçün mikrofona birbaşa giriş."</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+    <string name="permgroupdesc_camera" msgid="2933667372289567714">"Şəkil və ya video çəkmək üçün kameraya birbaşa çıxış."</string>
+    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"Ekran kilidi"</string>
+    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"Cihazınızdakı kilid ekranının hərəkətinə təsir etmə bacarığı"</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Tətbiq məlumatlarınız"</string>
+    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Cihazınızdakı digər tətbiqlərin davranışına təsir etmək bacarığı."</string>
+    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Divar kağızı"</string>
+    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cihazın divar kağızı ayarlarını dəyişin."</string>
+    <string name="permgrouplab_systemClock" msgid="406535759236612992">"Saat"</string>
+    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cihazın vaxt və zaman zolağını dəyişir."</string>
+    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Status paneli"</string>
+    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cihazın status paneli ayarlarınızı dəyişir."</string>
+    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinx Ayarları"</string>
+    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Sinxronizasiya nizamlarına çıxış."</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Hesablarınız"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Əlçatımlı hesablara daxil olun."</string>
+    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware kontrolları"</string>
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Dəstəkdəki avadanlığa birbaşa giriş."</string>
+    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Telefon zəngləri"</string>
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Telefon zənglərinə nəzarət edin, qeydə alın və idarə edin."</string>
+    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Sistem alətləri"</string>
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Aşağı səviyyəli çıxış və sistem idarəetməsi."</string>
+    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"İnkişaf alətləri"</string>
+    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Özəlliklər yalnız tətbiq developerləri üçün lazımdır."</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"Digər tətbiq İstifadəçi İnterfeysi"</string>
+    <string name="permgroupdesc_display" msgid="6051002031933013714">"Digər tətbiqlərin İstifadəçi İnterfeysinə təsir edir."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Yaddaş"</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB yaddaşa daxil ol."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD karta daxil ol."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Əlçatımlılıq funksiyaları"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Yardımçı texnologiya tələb edə biləcəyi funksiyalar."</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pəncərənin məzmununu əldə edin"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Əlaqədə olduğunuz pəncərənin məzmununu nəzərdən keçirin."</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Toxunaraq Kəşf et funksiyasını yandırın"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Toxunulan hissələr səsləndiriləcək və ekran jestlərlə idarə oluna biləcək."</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"İnkişaf etmiş veb əlçatımlılığı yandırın"</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Skriptlər tətbiq məzmununun daha əlçatımlı olması üçün quraşdırıla bilər."</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Yazdığınız mətni izləyin"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Kredit kartı nömrələri və parollar kimi şəxsi məlumatlar daxildir."</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"status panelini deaktivləşdir və ya dəyişdir"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"Tətbiqə status panelini deaktiv etməyə və ya sistem ikonalarını əlavə etmək və ya silmək imkanı verir."</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"status paneli"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"Tətbiqə status paneli olmağa imkan verir."</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"status panelini genişlətmək və ya yığmaq"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Tətbiqə status panelini genişləndirməyə və ya yox etməyə imkan verir."</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"gedən zənglərin marşrutunu dəyişmək"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Tətbiqə zəng etməyə və zəng edilən nömrəni dəyişməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək gedən zəngləri izləyə, yönləndirə və ya qarşısını ala bilər."</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"SMS qəbul etmək"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"Tətbiqə MMS mesajlarını almaq və emal etmək icazəsi verir. Bu o deməkdir ki, tətbiq sizin mesajlarınızı sizə göstərmədən monitorinq edə və ya silə bilər."</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"mətn mesajlarını qəbul edir (MMS)"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"Tətbiqə MMS mesajlarını qəbul və emal üçün imkan verir. Bu o deməkdir ki, bu tətbiq sizə göstərmədən cihazınıza göndərilən mesajları silə bilər."</string>
+    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"təcili yayımları qəbul edir"</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Tətbiqə təcili yayım mesajlarını qəbul və emal etmək icazəsi verir. Bu icazə ancaq sistem tətbiqləri üçün mümkündür."</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"mobil yayım mesajlarını oxuyur"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Tətbiqə sizin telefonunuz tərəfindən alınmış yayım mesajlarını oxuma icazəsi verir. Telefon yayımı bəzi məkanlarda olan fövqəladə hadisələrlə bağlı sizi xəbərdar etmək üçün qəbul edilir. Zərərli tətbiqlər fövqəladə mobil yayım qəbul edildiyi zaman telefonunun performansına və əməliyyatına müdaxilə edə bilər."</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"SMS mesajlarını göndərir"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"Tətbiqə SMS mesajı göndərmə icazəsi verir. Bu gözlənilməyən ödənişlərə səbəb ola bilər. Zərərli tətbiqlər sizin təsdiqiniz olmadan mesaj göndərməklə sizə ödənişə səbəb ola bilərlər."</string>
+    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"mesajla cavab verilməli tədbirlər göndərmək"</string>
+    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"Tətbiqə zənglər üçün \"mesajla cavabla\" hadisələrini idarə etmək üçün digər mesajlaşma tətbiqlərinə sorğuların göndərilməsi icazəsi verir."</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"tekst mesajlarınızı oxuyur (SMS və ya MMS)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Tətbiqə planşetinizdə və ya SIM kartınızda saxlanan SMS mesajları oxumağa imkan verir. Bu bütün SMS mesajların, onların məzmunundan və konfidensiallığından asılı olmadan oxunması imkanı deməkdir."</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Tətbiqə telefonunuzda və ya SIM kartınızda saxlanan SMS mesajları oxumağa imkan verir. Bu bütün SMS mesajların, onların məzmunundan və konfidensiallığından asılı olmadan oxunması imkanı deməkdir."</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"mətn mesajlarınızı redaktə edir (SMS və ya MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Tətbiqə telefonunuzda və ya SİM kartınızda yerləşən SMS mesajlara yazma icazəsi verir. Zərərli tətbiqlər sizin mesajlarınızı silə bilər."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Tətbiqə telefonunuzda və ya SİM kartınızda yerləşən SMS mesajlara yazma icazəsi verir. Zərərli tətbiqlər sizin mesajlarınızı silə bilər."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"mətn mesajları qəbul etmək (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Tətbiqə WAP mesajlar göndərmək və ya qəbul etmək imkanı verir. Buna mesajları izləmək və Sizə xəbər vermədən silmək imkanları da daxildir."</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"işlənən tətbiqlər əldə etmək"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"Tətbiqə hazırda və az öncə işləyən tapşırıqlar haqqında ətraflı məlumat əldə etməyə imkan verir. Bu da cihazda hansı tətbiqlərin istifadə olunması haqqında məlumatların əldə edilməsinə imkan verir."</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"istifadəçilər arasında əlaqə qurur"</string>
+    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Tətbiqə bu cihazdakı digər istifadəçilərlə müxtəlif işləri görməyə icazə verir. Zərərli tətbiqlər bundan istifadəçilər arasındakı qorunmanı pozmaq üçün istifadə edə bilər."</string>
+    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"bütün istifadəçilər ilə əlaqə saxlamaq üçün tam hüquq"</string>
+    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"İstifadəçilər arasında bütün mümkün əlaqələrə imkan verir."</string>
+    <string name="permlab_manageUsers" msgid="1676150911672282428">"istifadəçiləri idarə edir"</string>
+    <string name="permdesc_manageUsers" msgid="8409306667645355638">"Tətbiqlərə cihazda olan istifadəçiləri, habelə sorğu göndərmə, yaratma və silmə izni verir."</string>
+    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"işlənən tətbiqlərin detallarını əldə etmək"</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Tətbiqə hazırda və az öncə işləyən tapşırıqlar haqqında ətraflı məlumat əldə etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək şəxsi məlumatları oğurlaya bilər."</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"işlənən tətbiqlərin sırasını dəyişmək"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Tətbiqə tapşırıqları ön plandan arxa plana keçirməyə imkan verir. Tətbiq bunu Sizin daxiletməniz olmadan da edə bilər."</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"işlək tətbiqləri dayandırır"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"Tətbiqə tapşırıqları silməyə və onların tətbiqlərini məhv etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək digər tətbiqlərin işlərini dayandıra bilər."</string>
+    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"fəaliyyət toplularını idarə edin"</string>
+    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"Tətbiqə digər tətbiqlərin fəaliyyəti daxilində fəaliyyət toplularını əlavə etmək, silmək və dəyişmək imkanı verir."</string>
+    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"hər hansı bir fəaliyyət başlat"</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"İcazə qorunması və ya eksport edilmiş statusdan asılı olmayaraq, tətbiqə hər hansı fəaliyyəti başlatmağa imkan verir."</string>
+    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"ekran uyğunluğunu yerləşdirir"</string>
+    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Tətbiqə digər tətbiqlərin ekran uyğunluğunu yoxlamaq imkanı verir. Zərərli tətbiqlər digər tətbiqlərin fəaliyyətini poza bilər."</string>
+    <string name="permlab_setDebugApp" msgid="3022107198686584052">"tətbiq sazlanmasını aktiv edir"</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Tətbiqə digər bir tətbiq üçün sazlamanı açmaq üçün imkan verir. Zərərli tətbiqlər bunu digər tətbiqləri yox etmək üçün istifadə edə bilər."</string>
+    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"sistem ekran nizamlarını dəyiş"</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Tətbiqə yerli parametrlər və ya şriftin ölçüsü kimi cari konfiqurasiyanı dəyişməyə imkan verir."</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"avtomobil rejimini aktivləşdirir"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Tətbiqə avtomobil rejimini aktivləşdirməyə imkan verir."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"digər tətbiqləri qapatmaq"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Tətbiqə başqa tətbiqlərin arxafon proseslərini dayandırmaq icazəsi verir. Bu digər tətbiqlərin dayanmasına səbəb ola bilər."</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"Digər tətbiqləri dayanmağa məcbur et"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Tətbiqə digər tətbiqləri məcburi şəkildə dayandırmağa imkan verir."</string>
+    <string name="permlab_forceBack" msgid="652935204072584616">"tətbiqi qapanmağa məcbur etmək"</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"Tətbiqə ön planda olan istənilən tətbiqi bağlayaraq geriyə dönməyə imkan verir. Normal tətbiqlər tərəfindən heç vaxt istifadə olunmamalıdır."</string>
+    <string name="permlab_dump" msgid="1681799862438954752">"sistemin daxili durumunu bərpa et"</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"Tətbiqə sistemin daxili statusunu bərpa etməyə imkan verir. Zərərli tətbiqlər lazım olmadığı halda müxtəlif şəxsi və güvənli məlumatları bərpa edə bilər."</string>
+    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ekran kontentini bərpa edir"</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Tətbiqə aktiv pəncərənin məzmununu əldə etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək pəncərə məzmununu ələ keçirib parollları oxuya bilər."</string>
+    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"giriş imkanını müvəqqəti açmaq"</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Tətbiqə cihaza girişi müvəqqəti olaraq aktivləşdirməyə imkan verir. Zərərli tətbiqlər istifadəçi razılığı olmadan girişi aktivləşdirə bilər."</string>
+    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"pəncərə infosunu bərpa edir"</string>
+    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tətbiqə pəncərə idarəçisindən gələn windows haqqında olan məlumatı bərpa etməyə imkan verir. Zərərli tətbiqlər daxili sistem istifadəsi üçün nəzərdə tutulan məlumatı bərpa edə bilər."</string>
+    <string name="permlab_filter_events" msgid="8675535648807427389">"tədbirləri filtr edir"</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"Tətbiqə daxiletmə filtrini qeydiyyat etdirməyə imkan verir, bu filtr bütün istifadəçi tədbirlərini göndərilməmişdən əvvəl filtrdən keçirir. Zərərli tətbiq istifadəçi müdaxiləsi olmadan İstifadəçi İnterfeysi sisteminə nəzarət edə bilər."</string>
+    <string name="permlab_magnify_display" msgid="5973626738170618775">"ekranı böyüdür"</string>
+    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Tətbiqə ekran kontentini böyütmək icazəsi verir. Zərərli tətbiqlər bundan istifadə edərək ekranda kontenti böyüdərək cihazın qeyri-stabilliyinə səbəb ola bilər."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"qismən söndürür"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"Aktivlik idarəçiliyini qapanmış hala gətirir. Tam qapanmanı həyata keçirmir."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"tətbiqdən tətbiqə keçidin qarşısını almaq"</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"İstifadəçinin başqa tətbiqə keçməsinin qarşısını alır."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"cari tətbiq informasiyası əldə etmək"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="8153651434145132505">"Sahibə ekran önündə cari tətbiq və xidmətlər haqqında şəxsi məlumat əldə etməyə imkan verir."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"işə salınan bütün tətbiqləri izləyir və idarə edir"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Tətbiqə sistemin fəaliyyətləri necə başlatdığını nəzarət və kontrol etməyə imkan verir. Zərərli tətbiqlər sistemi tamamilə kompromis edə bilər. Bu icazə yalnız inkişaf üçündür, heç vaxt normal istifadə üçün deyil."</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"qaldırılmış yayım paketini göndər"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Tətbiqə tətbiq paketinin silinməsi haqqında bildiriş translasiya etmə icazəsi verir. Zərərli tətbiqlər bundan digər işlək tətbiqləri dayandırmaq üçün istifadə edə bilər."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS tərəfindən qəbul edilən yayım göndər"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Tətbiqə mesaj gəlməsi haqqında bildirişi yayımlamaq imkanı verir. Zərərli tətbiqlər bundan gələn SMS mesajlarını saxtalaşdırmaq üçün istifadə edə bilər."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH tərəfindən qəbul edilən yayım göndər"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Tətbiqə WAP PUSH mesajın alındığı haqda bildiriş translasiya etməyə icazə verir. Zərərli tətbiqlər bundan istifadə edərək saxta MMS mesaj alışı və ya səssizcə istənilən veb səhifəni zərərverici variantlarla dəyişmək üçün istifadə edə bilər."</string>
+    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"çalışan proseslərin sayını məhdudlaşdırır"</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Tətbiqə işlədiləcək maksimum proses sayını idarə etmə izni verir. Normal tətbiqlər tərəfindən tələb olunmur."</string>
+    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"arxafon tətbiqlərini dayanmağa məcbur edir"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Tətbiqə aktivitilərin arxa fona getdiyi zaman bitməsini yoxlayır. Normal tətbiqlər tərəfindən tələn olunmur."</string>
+    <string name="permlab_batteryStats" msgid="2789610673514103364">"batareya statistikalarını oxumaq"</string>
+    <string name="permdesc_batteryStats" msgid="5897346582882915114">"Tətbiqə cari aşağı səviyyəli data sitifadəsini oxumaq imkanı verir. Tətbiqə hansı tətbiqi istifadə etdiyiniz haqqında ətraflı məlumat tapmağa imkan verə bilər."</string>
+    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"batareya statistikalarını dəyişmək"</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Tətbiqə yığılmış batareya statistikasını redaktə etmə icazəsi verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"tətbiq əməliyyat statistikalarını əldə etmək"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Toplanmış tətbiq əməliyyat statistikalarının bərpa edilməsinə imkan verir. Normal tətbiqlər tərəfindən istifadə üçün deyil."</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"tətbiq əməliyyat statistikasını dəyişmək"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Tətbiqə toplanmış tətbiq əməliyyat statistikasını dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"sistem yedəkləməsi və bərpasını idarə edir"</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"Tətbiqə sistemi rezerv etməyə və mexanizmi bərpa etməyə imkan verir. Normal tətbiqlər tərəfindən istifadə edilmək üçün nəzərdə tutulmayıb.."</string>
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"tam rezervi təsdiq etmək və ya əməliyyatı bərpa etmək"</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Tətbiqə İstifadəçi İnterfeysi tam rezerv təsdiqini işə salmağa imkan verir. Heç bir tətbiq tərəfindən istifadə olunmamalıdır."</string>
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"icazəsiz pəncərələri görüntüləyir"</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Tətbiqə daxili sistem interfeysi tərəfindən istifadə edilməsi üçün nəzərdə tutulmuş pəncərələri yaratmağa icazə verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"digər tətbiqlər üzərində çəkmək"</string>
+    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Tətbiqə digər tətbiqlərin və ya onların hissələrinin yuxarısında şəkil çəkməyə imkan verir. Onlar istənilən tətbiqin interfeysinin istifadəsinə müdaxilə edə və ya digər tətbiqlərdə axtardıqlarınızı dəyişə bilər."</string>
+    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"qlobal animasiya sürətini dəyişir"</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Tətbiqə istənilən vaxt qlobal animasiya sürətini (sürətli və ya yavaş animasiyalar) dəyişdirmək imkanı verir."</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"tətbiq nişanlarını idarə etmək"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Tətbiqlərə onların normal Z-orderinqi keçərək markerlərini yaratma və idarəetmə icazəsi verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_freezeScreen" msgid="4708181184441880175">"ekranı dondurur"</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Tətbiqə tam ekranlı yayım üçün ekranı müvəqqəti olaraq dondurma icazəsi verir."</string>
+    <string name="permlab_injectEvents" msgid="1378746584023586600">"düymələri və idarəetmə düymələrini basır"</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Tətbiqə özünün daxiletmə tədbirlərini digər tətbiqlərə çatdırmağa imkan verir. Zərərli tətbiqlər planşeti ələ keçirmək üçün bundan istifadə edə bilər."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Tətbiqə özünün daxiletmə tədbirlərini digər tətbiqlərə çatdırmağa imkan verir. Zərərli tətbiqlər telefonu ələ keçirmək üçün bundan istifadə edə bilər."</string>
+    <string name="permlab_readInputState" msgid="469428900041249234">"yazdıqlarınızı və etdiklərinizi izləyir"</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"Tətbiqə basdığınız düymələri izləmək imkanı verilir. Buna parolların və kredit kartı nömrələrinin yazılması da aiddir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"daxiletmə metoduna bağlanır"</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Sahibinə daxiletmə metodunun ən üst səviyyə interfeysinə bağlamaq imkanı verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"giriş xidmətinə bağlı qal"</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Sahibə giriş xidmətin ən üst səviyyə interfeysi bağlamağa imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindPrintService" msgid="8462815179572748761">"çap servisini qoşma"</string>
+    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Sahibinə bir çap xidmətinin ən üst səviyə araüzünü bağlamağa imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"çap spuler servisinə qoş"</string>
+    <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"Sahibinə çap spuler xidmətinin ən üst səviyyə interfeysinə bağlamağa imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC xidmətlərinə qoşun"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"Sahibinə NFC kartlarını emulyasiya edən tətbiqləri bir-birinə qoşmağa icazə verin. Normal tətbiqlər üçün lazım deyil."</string>
+    <string name="permlab_bindTextService" msgid="7358378401915287938">"mətn servisini qoşma"</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"Sahibinə bir mətn xidmətinin ən üst səviyyə araüzünü bağlamağa imkan verir(məsələn, SpellCheckerService). Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN xidmətə əlaqələndirmək"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Sahibinə bir Vpn xidmətinin ən üst səviyyə araüzünü bağlamağa imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"divar kağızına bağlanır"</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Cihaz sahibinə yuxarı səviyyəli divar kağızı interfeysini cildləməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmamalıdır."</string>
+    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"widget servisini qoşma"</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Sahibinə vidcet servisin yüksək səviyyəli interfeysi ilə əlaqə saxlamaq icazəsi verir. Normal tətbiqlər tərəfindən heç vaxt istənilməməlidir."</string>
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"cihaz admini ilə ünsiyyət qurmaq"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Sahibinə bir cihaz idarəçisinə planlar göndərmək üçün imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"cihaz admini əlavə edin və ya silin"</string>
+    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Sahibinə aktiv cihaz administratorlarını əlavə etməyə və ya silməyə icazə verir. Normal tətbiqlər üçün tələb olunmamalıdır."</string>
+    <string name="permlab_setOrientation" msgid="3365947717163866844">"ekran oriyentasiyasını dəyişir"</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"Tətbiqə istənilən zaman ekranın vəziyyətini dəyişmə icazəsi verir. Normal tətbiqlər tərəfindən tələb olunmur."</string>
+    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"kursor sürətini dəyişmək"</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"Tətbiqə mausun və ya trekpedin kursor sürətini istənilən zaman dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmamalıdır."</string>
+    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"klaviatura sxemini dəyişir"</string>
+    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"Tətbiqə klaviatura sxemini dəyişmək imkanı verir. Normal tətbiqlər tərəfindən tələb olunmur."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"tətbiqlərə Linux siqnalları göndərir"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Tətbiqə bütün davamlı proseslərə siqnal soğrusu göndərməyə imkan verir."</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"təbiqi həmişə çalışdır"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Tətbiqə öz komponentlərini yaddaşda saxlama icazəsi verir. Bu planşetin sürətini zəiflətməklə, digər tətbiqlər üçün mövcud olan yaddaşı limitləyə bilər."</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Tətbiqə öz komponentlərini yaddaşda saxlama icazəsi verir. Bu digər tətbiqlər üçün mövcud olan yaddaşı limitləyə bilər."</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"tətbiqləri sil"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"Tətbiqə Android paketləri silmə icazəsi verir. Zərərli tətbiqlər bundan digər vacib tətbiqləri silmək üçün istifadə edə bilər."</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"digər tətbiqlərin məlumatını silir"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Tətbiqə istifadəçi datasını təmizləməyə imkan verir."</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"digər tətbiqlərin keşini sil"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Tətbiqə keş faylları silmə icazəsi verir."</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"tətbiq saxlama yaddaşını ölçmək"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Tətbiqə özünün kodunu, məlumatını və keş ölçüsünü alma icazəsi verir."</string>
+    <string name="permlab_installPackages" msgid="2199128482820306924">"birbaşa tətbiqlər quraşdırmaq"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"Tətbiqə yeni və ya güncəllənmiş Android paketlərini quraşdırmağa imkan verir. Zərərli tətbiqlər bundan istifadə edərək güclü səlahiyyətlərə malik tətbiqləri endirə bilər."</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"bütün tətbiq keş datasını silir"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Tətbiqə planşetin yaddaşını boşaltmaq üçün digər tətbiqlərin keş fayllarını silmək imkanı verir. Bu da digər tətbiqlərin dataları yenidən əldə etmələri səbəbindən daha yavaş işləmələrinə səbəb ola bilər."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Tətbiqə digər tətbiqlərin keş qovluğunu təmizləyərək telefonun yaddaşını boşaltmaq icazəsi verir. Bu digər tətbiqlərin məlumatlarını yenidən əldə etməli olduqlarına görə daha yavaş başlamasına səbəb olur."</string>
+    <string name="permlab_movePackage" msgid="3289890271645921411">"tətbiq resurslarının yerini dəyişir"</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"Tətbiqə tətbiq resurslarını daxili mediadan xarici mediaya və əksinə daşımağa imkan verir."</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"məxfi loq datasını oxuyur"</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Tətbiqə sistemin müxtəlif jurnal fayllarını oxumağa imkan verir. Bu da Sizin planşetdə etdikləriniz haqqında məlumatlar, həmçinin şəxsi və konfidensial məlumatlar ola bilər."</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Tətbiqə sistemin müxtəlif jurnal fayllarını oxumağa imkan verir. Bu da Sizin planşetdə etdikləriniz haqqında məlumatlar, həmçinin şəxsi və konfidensial məlumatlar ola bilər."</string>
+    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"oxutmaq üçün istənilən media dekoderi istifadə edir"</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Tətbiqə playback\'i deşifrə etmək üçün hər hansı bir quraşdırılmış media deşifrələyicisini istifadə etmık imkanı verir."</string>
+    <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"etibarlı etimadnamələri idarə et"</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Tətbiqə etibarlı etimadnamələr kimi CA sertifikatlarını quraşdırmaq və sistemdən silməyə icazə verir."</string>
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"diaga məxsus olan mənbələri yaz/oxu"</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"Tətbiqə diag qrupa məsus olan resursları yazmaq və oxumaq icazəsi verir; məsələn  /dev qovluğundakı fayllar. Bu sistemin stabilliyinə və təhlükəsizliyinə təsir edə bilər. Bu ancaq istehsalçı və ya operator tərəfindən avadanlığa xas diaqnostika üçün olmalıdır."</string>
+    <string name="permlab_changeComponentState" msgid="6335576775711095931">"tətbiq komponentlərini aktivləşdirmə və ya deaktivləşdirmə"</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Tətbiqə digər tətbiq komponentinin aktiv olub-olmadığını dəyişmək imkanı verir. Zərərli tətbiqlər bundan əhəmiyyətli planşet imkanlarını deaktiv etmək üçün istifadə edə bilər. Bu icazə ilə ehtiyatlı olmaq lazımdır, çünki tətbiq komponentləri yararsız, ziddiyyətli, və ya qeyri-sabit statusa çevrilə bilər."</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Tətbiqə digər tətbiq komponentinin aktiv olub-olmadığını dəyişmək imkanı verir. Zərərli tətbiqlər bundan əhəmiyyətli telefon imkanlarını deaktiv etmək üçün istifadə edə bilər. Bu icazə ilə ehtiyatlı olmaq lazımdır, çünki tətbiq komponentləri yararsız, ziddiyyətli, və ya qeyri-sabit statusa çevrilə bilər."</string>
+    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"icazələr vermək və ya ləğv etmək"</string>
+    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Tətbiqə bu və ya digər tətbiqlərə xüsusi iznlər verməyə icazə verir. Zərərli tətbiqlər  bundan izin vermədiyiniz özəllikləri özlərinə vermək üçün istifadə edə bilər."</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"tərcih edilən tətbiqlər qur"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Tətbiqə tərcih etdiyiniz tətbiqləri dəyişmək imkanı verir. Zərərli tətbiqlər şəxsi məlumatlarınızı toplamaq üçün cari tətbiqlərinizi aldadaraq işləyən tətbiqləri xəbərsiz dəyişə bilər."</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"sistem ayarlarında dəyişiklik etmək"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"Tətbiqə sistem ayarları datasını redaktə etmə icazəsi verir. Zərərli tətbiqlər sistem ayarlarını korlaya bilər."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"təhlükəsiz sistem nizamlarını dəyişir"</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Tətbiqə sistemin təhlükəsiz ayarlar datasını dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə üçün deyil."</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"Google xidmətlər xəritəsini dəyişdir"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"Tətbiqə Google xidmətlər xəritəsini dəyişdirmək imkanı verir. Normal tətbiqlərin istifadəsi üçün deyil."</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"başlanğıcda işləyir"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Tətbiqə sistem yükləməni bitirdiyi zaman dərhal özünü başlatmağa imkan verir. Bu planşeti başlatmağın uzun çəkməsinə səbəb ola bilər və tətbiqə həmişə çalışdıraraq bütün planşeti yavaşlatmağa imkan verir."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Tətbiqə sistem bootinqi bitirdikdən dərhal sonra özünü başlatmaq icazəsi verir. Bu telefonun açılmasını ləngidə və daima işlək qalaraq telefonun sürətini aşağı sala bilər."</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"daimi siqnal göndərmək"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Tətbiqə yayım bitdikdən sonra da qalan çətin yayımlar göndərməyə imkan verir. Hədsiz istifadə çox yaddaş istifadəsinə səbəb olmaqla planşeti yavaş və qeyri-stabil edə bilər."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Tətbiqə yayım bitdikdən sonra da qalan çətin yayımlar göndərməyə imkan verir. Hədsiz istifadə çox yaddaş istifadəsinə səbəb olmaqla telefonu yavaş və qeyri-stabil edə bilər."</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"kontakrlatınızı oxumaq"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Tətbiqə planşetinizdə yerləşən kontaktları oxumaq icazəsi verir, tez-tez zəng elədiyiniz, emailləşdiyiniz və ya əlaqə saxladığınız xüsusi individuallar daxil olmaqla. Bu icazə tətbiqlərə kontakt məlumatlarınızı saxlamağa və zərərli tətbiqlərə kontakt məlumatlarını sizin bilginiz olmada paylaşma imkanı yaradır."</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Tətbiqə tez-tez zəng elədiyiniz, e-məktub göndərdiyiniz və ya əlaqə saxladığınız xüsusi individuallar daxil olmaqla telefonunuzda yerləşən kontaktları oxumaq icazəsi verir. Bu icazə tətbiqlərə kontakt məlumatlarınızı saxlamağa və zərərli tətbiqlərə kontakt məlumatlarını sizin xəbəriniz olmada paylaşma imkanı yaradır."</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"kontaktlarınızı dəyişdirir"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Tətbiqə planşetinizdəki zəng etmək tezliyiniz, elektron poçtlarınız, ünsiyyətləriniz haqqında məlumatları dəyişməyə imkan verir. Bu icazə kontakt məlumatlarının silinməsinə də imkan verir."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Tətbiqə Sizin zəng etmək tezliyiniz, elektron poçtlarınız, ünsiyyətləriniz haqqında məlumatları dəyişməyə imkan verir. Buna kontaktların silinməsi imkanı də daxildir."</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"zəng qeydiyyatını oxu"</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Tətbiqə gələn və gedən zənglər haqqında olan data daxil olmaqla bərabər planşetinizin zəng qeydiyyatını oxumağa imkan verir. Bu icazə tətbiqlərə zəng qeydiyyatınızı saxlamağa imkan verir və zərərli tətbiqlər zəng qeydiyyat datasını sizdən xəbərsiz paylaşa bilər."</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Tətbiqə telefon jurnalınızı oxumağa imkan verir, buna gələn və gedən zənglər haqqında məlumatlar da daxildir. Bu icazə tətbiqə zəng jurnalı datasını saxlamağa imkan verir ki, Zərərli tətbiqlər bundan istifadə edərək Sizdən xəbərsiz bütün məlumatlarnızı paylaşa bilər."</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"zəng loqu yazır"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Tətbiqə planşetinizdəki zəng jurnalını, həmçinin gedən və gələn zənglərin siyahısını dəyişməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək, zəng jurnalınıza dəyişiklik edə bilər."</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Tətbiqə sizin daxil olan və gedən zənglər daxil olmaqla telefon zəngi loqlarınızı redaktə etmək icazəsi verir. Zərərli tətbiqlər bundan telefon loqlarınızı silmək və ya redaktə etmək üçün istifadə edə bilər."</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"öz kontakt kartınızı oxuyun"</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Tətbiqə cihazınızda yerləşən adınız və kontakt məlumatlarınız kimi şəxsi profil məlumatlarını oxuma icazəsi verir. Bu o deməkdir ki, tətbiq sizi tanıya və sizin profil məlumatlarınızı başqalarına göndərə bilər."</string>
+    <string name="permlab_writeProfile" msgid="907793628777397643">"sizin kontakt kartınızda dəyişiklik etmək"</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Tətbiqə cihazınızda yerləşən adınız və kontakt məlumatlarınız kimi şəxsi profil məlumatlarını dəyişmək və ya əlavə etmək icazəsi verir. Bu o deməkdir ki, tətbiq sizi tanıya və sizin profil məlumatlarınızı başqalarına göndərə bilər."</string>
+    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"sosial lentinizi oxuyur"</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Tətbiqə Sizin və dostlarınızın sosial güncəllərini əldə etmək və sinxronizə etmək icazəsi verir. Məlumat paylaşarkən diqqətli olun - konfidensiallıqdan asılı olmayaraq bu, Siz və dostlarınız arasında sosial şəbəkələrdəki danışığı oxumaq imkanı verir. Qeyd: bu icazə bütün sosial şəbəkələrdə icra edilə bilməz."</string>
+    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"sosial axınınıza yazır"</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Tətbiqə dostlarınızdan sosial yenilənmələri göstərmə icazəsi verir. Məlumat paylaşarkən diqqətli olun - bu dostlarınızdan gələn mesajı emal etməyə izn verir. Qeyd: bu icazə bütün sosial şəbəkələrə şamil olunmaya bilər."</string>
+    <string name="permlab_readCalendar" msgid="5972727560257612398">"təqvim tədbirlərini və konfidensial məlumatları oxuyur"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Tətbiqə dostlarınızın və əməkdaşlarınızın planşetinizdə yerləşən kalendar tədbirlərini oxumağa icazə verir. Bu tətbiqə konfidensiallıq və ya həssaslıqdan asılı olmayaraq sizin kalendar məlumatlarınızı paylaşmaq və ya saxlamağa imkan yaradır."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Tətbiqə dost və əməkdaşlara məxsus olanlar daxil olmaqla planşetdə yerləşən bütün kalendar tətbiqlərini oxumaq icazəsi verir. Bu tətbiqə konfidensiallıq və ya həssaslıqdan asılı olmayaraq, Sizin kalendar məlumatlarınızı paylaşmaq və ya saxlamaq imkanı yaradır."</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"cihaz sahibinin icazəsi olmadan təqvim tədbirləri əlavə etmək və ya dəyişmək, bunun haqqında bildirişlər göndərmək"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Tətbiqə planşetinizdəki tədbirləri dəyişməyə, tədbir əlavə etməyə və ya silməyə imkan verir. Buna Sizin dostlarınızla və həmkarlarınızla birlikdə hazırladığınız tədbirlər də daxildir. Bu, tədbirə Sizin adınızdan və Sizdən xəbərsiz, təqvim sahibi kimi mesaj göndərmək imkanını verir."</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"Dostlarınız və həmkarlarınıza məxsus olanlar da daxil olmaqla, tətbiqə telefonunuzdakı tədbirləri dəyişməyə, tədbir əlavə etməyə və ya silməyə imkan verir. Bu, tədbirə Sizin adınızdan və Sizdən xəbərsiz, təqvim sahibi kimi mesaj göndərmək imkanı verir."</string>
+    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"test üçün saxta məkan mənbələri"</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Test üçün saxta məkan mənbələri yaradın və ya yeni məkan provayderi quraşdırın. Bu tətbiqlərə GPS və məkan provayderləri kimi məkan mənbələrindən alınan məkan və/ya statusları yenidən yazmağa icazə verir."</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"əlavə məkan provayderi əmrlərinə çıxış"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Tətbiqə əlavə məkan provayderi əmrlərinə daxil olmaq imkanı verir. Bu tətbiqə GPS əməliyyatına və ya digər məkan mənbələrinə mane olmaq imkanı verə bilər."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"Məkan provayderini quraşdırmaq icazəsi"</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Yeni yerləşmə təchizatçısını test etmək və ya quraşdırmaq üçün mock yerləşmə mənbələri yarat. Bu tətbiqə yerləşmənin və/ya digər yerləşmə mənbələrindən GPS və ya yerləşmə təchizatçıları qayıtmış statusların ləğv etməsinə imkan verir."</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"dəqiq yeri (GPS və şəbəkə-əsaslı)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Qlobal Pozisiya Sistemini və ya şəbəkə qüllələri və Wi-Fi kimi şəbəkə məkanını istifadə edərək tətbiqə Sizin dəqiq yerinizi təyin etməyə imkan verir. Bu məkan xidmətləri aktivləşdirilməlidirlər ki, Siz tətbiqi istifadə edən zaman tətbiq onları istifadə edə bilsin. Tətbiqlər Sizin harada olmağınızı bunun vasitəsilə təyin edəcək, eyni zamanda, bu xidmət əlavə batareya enerjisi apara bilər."</string>
+    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"təxmini məkan (şəbəkə əsaslı)"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Tətbiqə təxmini yerinizi almaq üçün imkan verir. Bu yer, yerləşmə xidmətləri tərəfindən mobil qüllələr və Wi-Fi kimi şəbəkə yerləşmə mənbələrdən istifadə etməklə əldə edilir. Bu yerləşmə xidmətləri tətbiqin onlardan istifadəsi üçün açıq və cihazınızın onları istifadəsi üçün mövcud olmalıdır. Tətbiqlər bundan sizin təxminən harada olduğunuzu müəyyənləşdirmək üçün istifadə edə bilər."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger\'ə daxil olmaq"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Tətbiqə aşağı səviyyəli SurfaceFnger özəlliklərini istifadə etməyə icazə verir."</string>
+    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"freym buferi oxuyur"</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Tətbiqə freym buferinin kontentini oxumaq icazəsi verir."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger keçidi"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Tətbiqə aşağı səviyyəli InputFlinger funksiyalarını istifadə etməyə icazə verir."</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi görüntülərini quraşdır"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tətbiqə Wifi görüntülərini quraşdırmağa və onlara qoşulmağa imkan verir."</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"WiFi görüntülərini dəyişir"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Tətbiqə Wifi displeylərinin aşağı səviyyəli funksiyalarını idarə etmək imkanı verir."</string>
+    <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"audio çıxışı alın"</string>
+    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Tətbiqə audio çıxışı almaq və yenidən yönləndirmək imkanı verir."</string>
+    <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"video çıxışı alın"</string>
+    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Tətbiqə video çıxışı almaq və yenidən yönləndirmək imkanı verir."</string>
+    <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"təhlükəsiz video çıxışı alın"</string>
+    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"Tətbiqə güvənli video çıxışı almaq və yenidən yönləndirmək imkanı verir."</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"audio ayarlarınızı dəyişir"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tətbiqə səs və hansı spikerin çıxış üçün istifadə olunduğu kimi qlobal səs ayarlarını dəyişdirməyə imkan verir."</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"səs yaz"</string>
+    <string name="permdesc_recordAudio" msgid="4906839301087980680">"Tətbiqə mikrofonla audio yazmaq icazəsi verir. İcazə tətbiqə sizin təsdiqiniz olmadan istənilən zaman səs yazma izni verir."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"şəkil və video çəkmək"</string>
+    <string name="permdesc_camera" msgid="8497216524735535009">"Tətbiqə kamera ilə şəkil və video çəkməyə imkan yaradır. Bu icazə tətbiqə sizin təsdiqiniz olmadan kameradan istifadə icazəsi verir."</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"kamera istifadə edildikdə LED göstərici ötürülməsini deaktiv edir"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Öncədən quraşdırılmış sistem tətbiqinə kamera tərəfindən istifadə edilən LED indikatorunu söndürmək icazəsi verir."</string>
+    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"planşeti daimi olaraq aradan qaldır"</string>
+    <string name="permlab_brick" product="default" msgid="8337817093326370537">"telefonu həmişəlik deaktiv etmək"</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Tətbiqə planşeti birdəfəlik deaktiv etməyə imkan verir. Bu da çox təhlükəlidir."</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Tətbiqə bütün telefonu birdəfəlik deaktivləşdirməyə imkan verir. Bu çox təhlükəlidir."</string>
+    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"planşeti yenidən yüklənməyə məcbur edir"</string>
+    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"telefonu yenidən yüklənməyə məcbur edir"</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Tətbiqə planşeti yenidən yükləməyə məcbur etmək imkanı verir."</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Tətbiqə telefonu yenidən yükləməyə məcbur etmək üçün imkan verir."</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"USB yaddaş fayl sisteminə daxil olmaq"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"SD Kart fayl sisteminə daxil olmaq"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Tətbiqə silinəbilən yaddaşları və ya fayl sistemini quraşdırma və ayırma icazəsi verir."</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB yaddaşı silir"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD kartı silir"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Tətbiqə çıxarıla bilən yaddaşı format etməyə imkan verir."</string>
+    <string name="permlab_asec_access" msgid="3411338632002193846">"daxili yaddaşınız haqqında məlumat əldə etmək"</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"Tətbiqə daxili yaddaş haqqında məlumat almağa imkan verir."</string>
+    <string name="permlab_asec_create" msgid="6414757234789336327">"daxili yaddaş yaratmaq"</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"Tətbiqə daxili yaddaş yaratmaq üçün imkan verir."</string>
+    <string name="permlab_asec_destroy" msgid="526928328301618022">"daxili yaddaşı məhv etmə"</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Tətbiqə daxili yaddaşı məhv etmə icazəsi verir."</string>
+    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"daxili yaddaşı montaj və ya demontaj etmək"</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Tətbiqə daxili yaddaşı quraşdırma/ayırma icazəsi verir."</string>
+    <string name="permlab_asec_rename" msgid="7496633954080472417">"daxili yaddaşın adını dəyiş"</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"Tətbiqə daxili yaddaşın adını dəyişmək imkanı verir."</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"vibrasiyaya nəzarət edir"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"Tətbiqə vibratoru idarə etmə icazəsi verir."</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"Flash işığını idarə edir"</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"Tətbiqə siqnal işığı na nəzarət etməyə imkan verir."</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"USB cihazlar üçün tərcihləri və icazələri idarə etmək"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"Tətbiqə USB cihazlar üçün olan tərcihləri və icazələri idarə etməyə imkan verir."</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP protokol həyata keçirmək"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"Kernel MTP drayverə girişə imkan verir ki, MTP USB protokolunu həyata keçirsin."</string>
+    <string name="permlab_hardware_test" msgid="4148290860400659146">"avadanlığı sınaq edir"</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"Tətbiqə avadanlığı yoxlamaq üçün müxtəlif periferiyaları kontrol etməyə imkan verir."</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"telefon nömrələrinə birbaşa zəng edir"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"Tətbiqə Sizin müdaxiləniz olmadan telefon zəngləri etməyə imkan verir. Zərərli tətbiqlər Sizdən xəbərsiz şəkildə müxtəlif zənglər edərək, Sizə maddi ziyan vura bilər. Qeyd: Bu, tətbiqlərə təcili nömrələrə zəng etməyə icazə vermir."</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"istənilən nömrəyə birbaşa zəng edir"</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Tətbiqə Sizin müdaxiləniz olmadan, təcili zənglər də daxil olmaqla, istənilən telefon zəngini etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək, təcili nömrələrə qanunsuz zəng vurmaqla Sizin üçün hüquqi problemlər yarada bilər."</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"CDMA planşet ayarlarına birbaşa başlamaq"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"CDMA telefon quraşdırmalarına birbaşa başlamaq"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Tətbiqə CDMA hazırlığını başlatma icazəsi verir. Zərərli tətbiqlər ehtiyac olmadıqda CDMA hazırlığını başlada bilərlər."</string>
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"məkan güncəlləmə bildirişlərini idarə edir"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Tətbiqə radiodan gələn məkan güncəllənmələrini aktiv və ya deaktiv etməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_checkinProperties" msgid="7855259461268734914">"qeydiyyat xüsusiyyətlərini əldə edir"</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Tətbiqə giriş qeydi servisi tərəfindən yüklənmiş mülkiyyətə girişi oxumaq/yazmaq imkanl verir. Normal tətbiqlər üçün nəzərdə tutulmayıb."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"vidcetlər seç"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"Tətbiqə sistemə hansı vidcetin hansı tətbiq tərəfindən istifadə edilə bilməsini deməyə icazə verir. Bu icazəli tətbiqlər şəxsi məlumatlara və digər tətbiqlərə çıxış verə bilər. Normal tətbiqlər tərəfindən istifadə üçün deyil."</string>
+    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"telefon statusunu dəyişmək"</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Tətbiqə cihazın telefon funksiyalarını idarə etmək imkanı verir. Belə icazəli tətbiq Sizi xəbərdar etmədən şəbəkələri qoşa, telefon radiosunu yandırıb-söndürə bilər."</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefon statusunu və identifikasiyanı oxuyur"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tətbiqə cihazın telefon funksiyalarına giriş icazəsi verir. Belə icazəli tətbiq bu telefonun nömrəsini və cihaz İD\'ni, zəngin aktiv olub-olmadığını və zəng edilən nömrəni müəyyən edə bilər."</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"planşetin yuxu rejiminin qarşısını almaq"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"telefonun yuxu rejiminə keçməsini əngəllə"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Tətbiqə planşetin yuxu rejimini qadağan etməyə imkan verir."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Tətbiqə telefonun yuxu rejimini qadağan etmək imkanı verir."</string>
+    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"planşeti yandırma və ya söndürmə"</string>
+    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"telefonu yandırmaq və ya söndürmək"</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Tətbiqə planşeti yandırmağa və söndürməyə imkan verir."</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Tətbiqə telefonu yandırıb söndürmə icazəsi verir."</string>
+    <string name="permlab_factoryTest" msgid="3715225492696416187">"zavod test rejimində işləyir"</string>
+    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Planşet avadanlığına tam girişə imkan verməklə aşağı səviyyəli istehsalçı sınağı kimi işləyir. Yalnız planşet istehsalçı sınaq rejimində olduqda işləyir."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Bir aşağı səviyyəli istehsalçı testi kimi çalışdırın, telefon hardware üçün tam giriş imkanı verir. Ancaq telefon, istehsalçı test rejimində çalışdığı zaman aktivdir."</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"divar kağızı yerləşdirir"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Tətbiqə sistemə divar kağızı yerləşdirmək icazəsi verir."</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"divar kağızı ölçüsünü verir"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Tətbiqə sistem divar kağızı ölçüsü göstərişlərini müəyyən etməyə imkan verir."</string>
+    <string name="permlab_masterClear" msgid="2315750423139697397">"fabrik defoltuna sıfırlamaq"</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"Tətbiqə bütün məlumatları, nizamları və quraşdırılmış tətbiqləri silərək sistemi fabrik nizamlarına qaytarmaq imkanı verir."</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"vaxtı təyin edir"</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Tətbiqə planşetin saat vaxtını dəyişməyə imkan verir."</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Tətbiqə telefonun saat vaxtını dəyişməyə imkan verir."</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"vaxt zonasını quraşdırır"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Tətbiqə planşetin vaxt zonasını dəyişmə icazəsi verir."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Tətbiqə telefon saat zolağını dəyişmək üçün imkan verir."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService kimi davranır"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Tətbiqə AccountAuthenticators\'ə zəng etməyə imkan verir."</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"cihazda hesabları tapır"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Tətbiqə planşet tərəfindən bilinən hesabların siyahısını alma icazəsi verir. Bu quraşdırdığınız tətbiqlər tərəfindən yaradılmış istənilən hesab ola bilər."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Tətbiqə telefonda olan hesabların siyahısını əldə etməyə imkan verir. Buna quraşdırdığınız istənilən tətbiq tərəfindən yaradılan hesablar da aiddir."</string>
+    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"hesablar yaradır və parollar təyin edir"</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Tətbiqə AccountManager\'in hesab yaratmaq və parol almaq və açmaq daxil olmaqla bərabər, hesab təsdiqləyici imkanlarını istifadə etməyə icazə verir."</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"hesabları əlavə edir və ya silir"</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Tətbiqə hesabların əlavə olunması və ya silinməsi, həmçinin onların parollarının silinməsi kimi əməliyyatları icra etməyə imkan verir."</string>
+    <string name="permlab_useCredentials" msgid="235481396163877642">"cihazda hesablar istifadə etmək"</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"Tətbiqə autentifikasiya tokenləri sorğularını göndərməyə icazə verir."</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"şəbəkə bağlantılarına baxmaq"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Tətbiqə mövcud olan və qoşulan şəbəkələr kimi qoşulmalar haqqında məlumatı görməyə icazə verir."</string>
+    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"tam şəbəkə girişi"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Tətbiqə şəbəkə soketlərini yaratmağa və fərdi şəbəkə protokollarını istifadə etməyə imkan verir. Brauzer və digər tətbiqlər datanın internetə ötürülməsini təmin edən vəsaitlər verir, ona görə də datanın internetə gönrədilməsi üçün bu icazə tələb olunmur."</string>
+    <string name="permlab_writeApnSettings" msgid="505660159675751896">"şəbəkə nizamlarını və trafiki dəyişdirir/qarşısını alır"</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Tətbiqə şəbəkə trafikinin qarşısını almaq üçün şəbəkə nizamlarını dəyişmə icazəsi verir, məsələn proksini və ya istənilən APN-in portunu. Zərərli tətbiqlər şəbəkə paketlərini sizin bilginiz olmadan monitorinq edə, yönləndirə və ya redaktə edə bilər."</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"şəbəkə bağlantısını dəyişir"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Tətbiqə şəbəkə vəziyyətini dəyişməyə icazə verir."</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"Sərhədli bağlantını dəyişir"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Tətbiqə birləşilmiş şəbəkə bağlantısının statusunu dəyişməyə imkan verir."</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"arxafon data istifadəsi ayarını dəyişir"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Tətbiqə fon rejimi nizamlarını dəyişməyə icazə verir."</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"Wi-Fi bağlantılarına baxmaq"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Tətbiqə Wi-Fi şəbəkələri haqqında məlumatı görməyə icazə verir, məsələn, Wi-Fi mövcudluğu və qoşulmuş Wi-Fi cihazlarının adları."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"Wi-Fi şəbəkəsinə qoşulmaq və ya ayrılmaq"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Tətbiqə Wi-Fi çıxış nöqtəsinə qoşulmaq və ondan ayrılmaq və cihazın Wi-Fi şəbəkə nizamlarını dəyişməyə icazə verir."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi Multicast qəbuluna icazə ver"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Tətbiqə Wi-Fi şəbəkədə sizin planşetdən başqa digər multikast adreslərə yönləndirilmiş paketləri almaq icazəsi verir. Bu qeyri-çoxadresli rejimdən fəqli olaraq daha çox enerji işlədir."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Tətbiqə qrup ünvanlar istifadə etməklə, Wi-Fi şəbəkəsində olan bütün cihazlara göndərilmiş paketləri qəbul etməyə imkan verir. Buna daha çox enerji sərf olunur."</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth ayarlarını əldə edir"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Tətbiqə yerli Bluetooth planşetinin konfiqurasiyasını görməyə və məsafədən cihazları tapmağa və cütləməyə imkan verir."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Tətbiqə lokal Bluetooth telefonunu konfiqurə etməyə və uzaq cihazları kəşf etmək və onlara qoşulmaq icazəsi verir."</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX\'a qoşul və bağlantını kəs"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Tətbiqə WiMAX mövcudluğu və qoşulmuş WiMAX şəbəkələrini təyin etməyə icazə verir."</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX vəziyyətini dəyişir"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Tətbiqə planşeti WiMAX şəbəkələrinə qoşmaq və onlardan ayırmaq icazəsi verir."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Tətbiqə telefonu WiMAX şəbəkəsinə qoşmağa və ya WiMAX şəbəkəsindən ayırmağa imkan verir."</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"Bluetooth cihazları ilə cütləndirmək"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Tətbiqə yerli Bluetooth planşetinin konfiqurasiyasını görməyə və cütlənmiş cihazlarla bağlantılar etməyə və qəbul etməyə imkan verir."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Tətbiqə Bluetooth və ya telefon konfiqurasiyalarını görməyə və qoşulmuş cihazlarla əlaqə qurmağa və qəbul etməyə icazə verir."</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"Near Field Communication\'ı kontrol et"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"Tətbiqə Yaxın Məsafə Kommunikasiyası (NFC) teqləri, kartları və oxuyucuları ilə əlaqə qurmağa icazə verir."</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"Ekran kilidini deaktiv edir"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Tətbiqə kilid açarını və təhlükəsizlik parolunu deaktiv etməyə imkan verir. Qanuni misal budur ki, telefon zəng qəbul edən zaman kilidi açır və zəng qurtarandan sonra kilidi bağlayır."</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"sinx ayarlarını oxu"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Tətbiqə hesablar üçün sinxronizasiya nizamlarını oxuma icazəsi verir. Məsələn, bu Şəxslər tətbiqinin sinxronizə olunub-olunmadığını təyin edə bilər."</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"sinxronizasiyaya davam edir və onu söndürür"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Tətbiqə hesab üçün sinxronizasiya nizamlarını dəyişməyə icazə verir. Məsələn, bu istifadəçi hesablı Şəxslər tətbiqinin sinxronizasiyasını başlamaq üçün istifadə edilə bilər."</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"sinxronizasiya statistikasını oxumaq"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Tətbiqə sync tədbirlərinin tarixçəsi və nə qədər datanın sinx olduğu da daxil olmaqla bərabər, hər hansı bir hesab üçün olan sinx statlarını oxumağa imkan verir."</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"abunə olunmuş xəbərləri oxuyur"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Tətbiqə hazırda sinxron lentlər haqqında ətraflı məlumat almaq üçün imkan verir."</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"abunə olunmuş xəbərləri yazır"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Tətbiqə cari sinxronlaşmış lentlərinizə dəyişiklik etmək imkanı verir. Zərərli tətbiqlər sixronlaşmış lentlərinizi dəyişə bilər."</string>
+    <string name="permlab_readDictionary" msgid="4107101525746035718">"lüğətə əlavə etdiyiniz şərtləri oxumaq"</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"Tətbiqə istifadəçinin lüğətdə saxladığı bütün sözləri, adları və frazaları oxumaq icazəsi verir."</string>
+    <string name="permlab_writeDictionary" msgid="2183110402314441106">"istifadəçi lüğətinə sözlər əlavə etmək"</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Tətbiqə istifadəçi lüğətinə yeni sözlər yazmağa imkan verir."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"qorunmuş yaddaşa daxil olmağa cəhd etmək"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"qorunmuş yaddaşa daxil olmağa cəhd etmək"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"Tətbiqə gələcək cihazlarda əlçatımlı olacaq USB yaddaş üçün icazə testi etməyə imkan verir."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"Tətbiqə gələcək cihazlarda mövcud olacaq SD kart üçün icazəni test etmək üçün imkan verir."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB yaddaşınızın məzmununu dəyişmək və ya silmək"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"SD kart kontentlərini dəyişir və ya silir"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Tətbiqə USB yaddaşa yazmağa imkan verir."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Tətbiqə SD karta yazma icazəsi verir."</string>
+    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"daxili media yaddaşı kontentini dəyişir/silir"</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Tətbiqə daxili media yaddaşdakı kontenti redaktə etmək icazəsi verir."</string>
+    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"sənəd yaddaşını nizamlayır"</string>
+    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"Tətbiqə sənəd yaddaşını idarə etməyə imkan verir."</string>
+    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"bütün istifadəçilərin xarici yaddaşına daxil ol"</string>
+    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Tətbiqə bütün istifadəçilər üçün olan xarici yaddaşa giriş imkanı verir."</string>
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"keş fayl sisteminə girmək"</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Tətbiqə keş fayl sistemini oxumağa və yazmağa icazə verir."</string>
+    <string name="permlab_use_sip" msgid="5986952362795870502">"İnternet zəngləri etmək və ya qəbul etmək"</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"Tətbiqə internet zənglərinin göndərilməsi və qəbul edilməsi üçün SIP servisindən istifadə icazəsi verir."</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"tarixi şəbəkə istifadəsini oxu"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Tətbiqə xüsusi şəbəkələr və tətbiqlər üçün tarixi şəbəkə istifadəsini oxumağa icazə verir."</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"şəbəkə siyasətini idarə etmək"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Tətbiqə şəbəkə qanunlarını və tətbiqin xüsusi qaydalarını idarə etmək imkanı verir."</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"şəbəkə istifadə hesabını dəyişmək"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Tətbiqə şəbəkə istifadəsinin tətbiqlərə qarşı nizamlarını redaktə etməyə icazə verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"soket işarələrini dəyişin"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"Tətbiqə araşdırma üçün soket işarələrini dəyişmək imkanı verir"</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"bildirişlərə daxil ol"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"Tətbiqə bildirişləri əldə etməyə, sınamağa və təmizləməyə imkan verir, buna digər tətbiqlər tərəfindən verilmiş bildirişlər də daxildir."</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bildiriş dinləmə xidmətinə bağlanır"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Sahibinə yüksək səviyyəli bildiriş dinləmə servisi ilə əlaqə saxlamağa icazə verir. Normal tətbiqlər tərəfindən heç vaxt istənilməməlidir."</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"operator xidmətli konfiurasiya tətbiqinə müraciət edin"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Sahibinə operator xidmətli tətbiq konfiqurasiyasına  müraciət imkanı verir. Normal tətbiqlər üçün tələb olunmamalıdır."</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"şəbəkə şəraiti haqqında müşahidələr üçün qulaq asmaq"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Tətbiqə şəbəkə şəraiti üzrə müşahidələr üçün qulaq asmaq imkanı verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_hotwordRecognition" msgid="3225080408746361313">"isti söz tanınması tələb et"</string>
+    <string name="permdesc_hotwordRecognition" msgid="3716741260195364252">"Tətbiqə isti söz tanınması tələb etməyə imkan verir. Normal tətbiq üçün lazım ola bilməz."</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"Parol qaydalarını təyin edin"</string>
+    <string name="policydesc_limitPassword" msgid="3252114203919510394">"Ekran kilidini açan şifrələrin uzunluğunu və onlardakı icazə verilən işarələrə nəzarət edir."</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"Ekran kilidi cəhdlərini monitorinq et"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Ekan kilidini açarkən daxil edilmiş yanlış parollara baxın və əgər həddindən çox yanlış parollar daxil edilibsə, planşeti kilidləyin və ya bütün planşet datasını silin."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Ekan kilidini açarkən daxil edilmiş yanlış parollara baxın və əgər həddindən çox yanlış parollar daxil edilibsə, telefonu kilidləyin və ya bütün telefon datasını silin."</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"Ekran kilid parolunu dəyişin"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"Ekran kilidini açan şifrəni dəyişdirin."</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Ekranı kilidləyin"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"Ekranın nə vaxt və necə kilidlənməsinə nəzarət edir."</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Bütün məlumatları silin"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Planşetin datasını xəbərdarlıq olmadan, zavod data sıfırlaması ilə silin."</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Telefonun datasını xəbərdarlıq olmadan, zavod data sıfırlaması ilə silin"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Cihazın qlobal proksisini ayarlayın"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Siyasət aktiv olarkən cihazın qlobal proksisini istifadə üçün qurun. Yalnız ilk cihaz admini effektiv qlobal proksini təyin edir."</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"Ekran kilidi şifrəsinə son zaman seç"</string>
+    <string name="policydesc_expirePassword" msgid="1729725226314691591">"Ekran kilidi parolunun nə qədər tez-tez dəyişməsini kontrol edin."</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Yaddaş şifrələnməsini ayarlayın"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Tətbiq məlumatlarının şifrələnməsini tələb edir."</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"Kameraları dekativ edin"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Bütün cihaz kameralarının istifadəsini əngəllə."</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Klaviatura kilidində funksiyaları deaktiv edin"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Klaviatura kilidində bəzi funksiyaların qarşısını alın."</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"Əsas səhifə"</item>
+    <item msgid="869923650527136615">"Mobil"</item>
+    <item msgid="7897544654242874543">"İş"</item>
+    <item msgid="1103601433382158155">"İş Faksı"</item>
+    <item msgid="1735177144948329370">"Ev Faksı"</item>
+    <item msgid="603878674477207394">"Peycer"</item>
+    <item msgid="1650824275177931637">"Digər"</item>
+    <item msgid="9192514806975898961">"Şəxsi"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"Ana səhifə"</item>
+    <item msgid="7084237356602625604">"İş"</item>
+    <item msgid="1112044410659011023">"Digər"</item>
+    <item msgid="2374913952870110618">"Fərdi"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"Əsas səhifə"</item>
+    <item msgid="5629153956045109251">"İş"</item>
+    <item msgid="4966604264500343469">"Digər"</item>
+    <item msgid="4932682847595299369">"Düzənləyin"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"Əsas səhifə"</item>
+    <item msgid="1359644565647383708">"İş"</item>
+    <item msgid="7868549401053615677">"Digər"</item>
+    <item msgid="3145118944639869809">"Fərdi"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"İş"</item>
+    <item msgid="4378074129049520373">"Digər"</item>
+    <item msgid="3455047468583965104">"Fərdi"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Söhbət"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"Şəxsi"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Ev"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobil"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"İş"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"İş Faksı"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Ev Faksı"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"Peycer"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"Digər"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"Geriyə zəng"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"Avtomobil"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Şirkət"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"Əsas"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Digər faks"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"Teleks"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Mobil iş telefonu"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"İş Peyceri"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Köməkçi"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"Fərdi"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"Doğum günü"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"İldönümü"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"Digər"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"Fərdi"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Əsas səhifə"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"İş"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"Digər"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"Mobil"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"Fərdi"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Əsas səhifə"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"İş"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"Digər"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"Fərdi"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Ana səhifə"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"İş"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"Digər"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Şəxsi"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Görüşlər"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"İş"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"Digər"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"Fərdi"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"Şəxsi"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"Köməkçi"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"Qardaş"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"Uşaq"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Ev yoldaşı"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"Ata"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"Dost"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"Müdir"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"Ana"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"Valideyn"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"Ortaq"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"Dəvət edən"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"Qohum"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"Bacı"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"Həyat yoldaşı"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Fərdi"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Əsas səhifə"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"İş"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Digər"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PİN kodu daxil edin"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK və yeni PİN kod daxil edin"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kod"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Yeni PIN kodu"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Şifrə daxil etmək üçün toxunun"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Kilidi açmaq üçün parol yazın"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Kilidi açmaq üçün PIN daxil edin"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Yanlış PIN kodu."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Kilidi açmaq üçün Menyu, sonra 0 basın."</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Təcili nömrə"</string>
+    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Xidmət yoxdur."</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Ekran kilidlənib."</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Təcili zəng kilidini açmaq və ya yerləşdirmək üçün Menyu düyməsinə basın."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Kilidi açmaq üçün Menyu düyməsinə basın."</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Kilidi açmaq üçün model çəkin"</string>
+    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Təcili zəng"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Zəngə qayıt"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Düzdür!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Bir də cəhd edin"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Bir daha cəhd et"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Sifət kilidi cəhdləriniz bitdi"</string>
+    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Batareya yığılır, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_charged" msgid="321635745684060624">"Dolub"</string>
+    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_low_battery" msgid="1482873981919249740">"Elektrikə qoşun."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM kart yoxdur."</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Planşetdə SIM kart yoxdur."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonda SİM kart yoxdur."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SİM kart daxil edin."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SİM kart yoxdur və ya oxuna bilinmir. SİM kart daxil edin."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Yararsız SIM kart."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Sizin SİM kartınız daimi olaraq deaktivləşib.\n Başqa SİM kart üçün simsiz xidmət provayderinizə müraciət edin."</string>
+    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Əvvəlki trek düyməsi"</string>
+    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Növbəti trek düyməsi"</string>
+    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pauza düyməsi"</string>
+    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Oxutma düyməsi"</string>
+    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Dayandırma düyməsi"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"Yalnız təcili zənglər"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Şəbəkə kilidlidir"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM kart PUK ilə kilidlənib."</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"İstifadəçi Təlimatlarına baxın və ya Müştəri Xidmətlərinə müraciət edin."</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM kart kilidlənib."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SİM kartın kilidi açılır..."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Siz kilid modelini <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış çəkdiniz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə içində yenidən sınayın."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Şifrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Siz PIN nömrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz. \n \n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə içində təkrar sınayın."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetin kilidini Google hesabınıza daxil olmaqla açmağınız istəniləcək.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetin kilidini Google hesabınıza daxil olmaqla açmağınız tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, planşet fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Siz telefon kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, telefon zavod ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Siz planşetin kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> yanlış cəhd etmisiniz. Planşet artıq defolt zavod halına sıfırlanacaq."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Siz telefonun kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> dəfə səhv cəhd etdiniz. Telefonunuz indi zavod nizamlarına yenilənəcək."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> saniyə ərzində bir daha cəhd edin."</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Şablonu unutdunuz?"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Hesab kilid açma"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Həddindən çox cəhd edildi!"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Kilidi açmaq üçün Google hesabınız ilə daxil olun."</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"İstifadəçi adı (e-poçt)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Şifrə"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Daxil olun"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Yanlış istifadəçi adı və parol."</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"İstifadəçi adınızı və ya parolunuzu unutmusunuz?\n "<b>"google.com/accounts/recovery"</b>" linkinə daxil olun."</string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Yoxlanır..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Kilidi aç"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Səs açıqdır"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Səs sönülüdür"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Model başlandı"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Model təmizləndi"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Xana əlavə edildi"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Model tamamlandı"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d of %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Widget əlavə edin."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Boş"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Kilidi açma sahəsi genişləndi."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Kilidi açma sahəsi çökdü."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> vidcet."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"İstifadəçi selektoru"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media kontrolları"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Yenidən sıralama vidceti başladıldı."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidcetin təkrar sifarişi sona çatdı."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidcet <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> silindi."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kilidi açma sahəsini genişləndir."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Sürüşdürmə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kild açma modeli."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Sifət Kilidi"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin kilid açması."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifrə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Model sahəsi."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Sürüşdürmə sahəsi."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"simvol"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"söz"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"link"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"xətt"</string>
+    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"Zavod testi alınmadı"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"Bu FACTORY_TEST fəaliyyəti yalnızca/sistemdə/tətbiqdə quraşdırılmış paketlər üçün dəstəklənir."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"FACTORY_TEST əməliyyatını təsdiqləyən heç bir paket tapılmadı."</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"Yenidən yükləyin"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"\"<xliff:g id="TITLE">%s</xliff:g>\"dakı səhifədə deyilir:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Naviqasiyanı Təsdiq edin"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Bu Səhifəni Tərk edin"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Bu səhifədə qalın"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nBu səhifədən kənara naviqasiya etmək istədiyinizə əminsiniz mi?"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"Təsdiqlə"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"Məsləhət: Böyütmək və kiçiltmək üçün iki dəfə tıklayın."</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"Avtodoldurma"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"AvtoDoldurmanı ayarla"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"Vilayət"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"Poçt kodu"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"Dövlət"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"Poçt indeksi"</string>
+    <string name="autofill_county" msgid="237073771020362891">"Ölkə"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"Ada"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"Sahə"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"Departament"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"Prefektura"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"Pariş"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"Sahə"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"Əmirlik"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"Veb əlfəcinlərinizi və tarixçələrinizi oxumaq"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"Tətbiqə Brauzerin daxil olduğu bütün linkləri və bütün Brauzer əlfəcinlərini oxumaq imkanı verir. Qeyd: bu icazə veb brauzer imkanları olan üçüncü tərəf brazuerləri və digər tətbiqlər tərəfindən yerinə yetirilə bilməz."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"veb əlfəcinləri və tarixçəsi yazmaq"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Tətbiqə planşetinizdəki brauzer tarixini və əlfəcinləri redaktə etmək icazəsi verir. Bu tətbizə brauzer məlumatlarını silmək və ya redaktə etmək imkanı verə bilər. Qeyd: Bu icazə 3-cü partiya brauzerlərə və ya veb brauzing xüsusiyyətli digər tətbiqlərə şamil olunmaya bilər."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Tətbiqə Brauzer tarixçəsi və telefonunuzda saxlanılan əlfəcinlərə dəyişiklik etmək imkanı verir. Bununla tətbiqlə Brauzer datanızı silə və ya dəyişdirə bilər. Qeyd: bu icazə veb brauzer imkanları olan üçüncü tərəf brazuerləri və digər tətbiqlər tərəfindən yerinə yetirilə bilməz."</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"siqnal qurur"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"Tətbiqə quraşdırlmış zəngli saata alarm ayarlamağa imkan verir. Bəzi zəngli saat tətbiqləri bu özəlliyi dəstəkləməyə bilər."</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"Səsli poçt əlavə et"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Tətbiqə səsli poçt qutunuza mesaj əlavə etməyə imkan verir."</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Brauzerin geolokasiya icazələrini dəyişir"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Tətbiqə Brauzerin geolokasiya icazələrini dəyişməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək məkan məlumatlarını təsadüfi saytlara göndərə bilər."</string>
+    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"paketləri təsdiqlə"</string>
+    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"Tətbiqə paketin quraşdırılabilən olmasını yoxlamağa imkan verir."</string>
+    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"paket doğrulayıcıya bağlanır"</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"Sahibinə paket yoxlayıcılarına sorğu göndərmək icazəsi verir. Normal tətbiqlər tərəfindən heç vaxt istənilməməlidir."</string>
+    <string name="permlab_serialPort" msgid="546083327654631076">"serial porta çıxır"</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"Sahibinə SerialManager API vasitəsilə serial portlara icazə izni verir."</string>
+    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"xarici kontent provayderlərinə giriş"</string>
+    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"Məzmun provayderlərinə örtükdən daxil olmaq üçün cihaz sahibinə imkan verir. Normal tətbiqlər üçün lazım deyil."</string>
+    <string name="permlab_updateLock" msgid="3527558366616680889">"avtomatik cihaz yenilənmələrini pozur"</string>
+    <string name="permdesc_updateLock" msgid="1655625832166778492">"Sahibinə yeni versiyaya yenilənmək üçün nə vaxt qeyri-interaktiv reboot məlumatını sistemə təklif etmə icazəsi verir."</string>
+    <string name="save_password_message" msgid="767344687139195790">"Brauzerin bu şifrəni yadda saxlamasını istəyirsiz?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"İndi yox"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"Yadda saxla"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"Heç vaxt"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"Bu səhifəni açmaq üçün icazəniz yoxdur."</string>
+    <string name="text_copied" msgid="4985729524670131385">"Mətn panoya kopyalandı."</string>
+    <string name="more_item_label" msgid="4650918923083320495">"Daha çox"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menyu+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"boşluq"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"daxil olun"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"sil"</string>
+    <string name="search_go" msgid="8298016669822141719">"Axtar"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"Axtarış"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"Axtarış sorğusu"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"Sorğunu təmizlə"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"Sorğunu göndərin"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"Səsli axtarış"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Toxunaraq Kəşf et funksiyası aktiv edilsin?"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> Toxunaraq Kəşf Et rejimini aktivləşdirmək istəyir. Toxunaraq Kəşf Et açıldığı zaman, barmağınızın altında nə olduğu haqda olan təsvirləri eşidə və ya görə bilərsiniz və yaplanşetdə insanlarla əlaqəyə keçmək üçün jestlər həyata keçirə bilərsiniz."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> Toxunaraq Kəşf Et rejimini aktivləşdirmək istəyir. Toxunaraq Kəşf Et açıldığı zaman, barmağınızın altında nə olduğu haqda olan təsvirləri eşidə və ya görə bilərsiniz və ya telefonda insanlarla əlaqəyə keçmək üçün jestlər həyata keçirə bilərsiniz"</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 ay öncə"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 ay əvvəl"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"1 saniyə əvvəl"</item>
+    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> saniyə əvvəl"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"1 dəqiqə əvvəl"</item>
+    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə əvvəl"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"1 saat əvvəl"</item>
+    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> saat əvvəl"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"Son <xliff:g id="COUNT">%d</xliff:g> gün"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"Keçən ay"</string>
+    <string name="older" msgid="5211975022815554840">"Köhnə"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"dünən"</item>
+    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> gün əvvəl"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"1 saniyə ərzində"</item>
+    <item quantity="other" msgid="1241926116443974687">"<xliff:g id="COUNT">%d</xliff:g> saniyə içində"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"1 dəqiqə içində"</item>
+    <item quantity="other" msgid="3330713936399448749">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə ərzində"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"1 saata"</item>
+    <item quantity="other" msgid="547290677353727389">"<xliff:g id="COUNT">%d</xliff:g> saata"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"sabah"</item>
+    <item quantity="other" msgid="5109449375100953247">"<xliff:g id="COUNT">%d</xliff:g> gün ərzində"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"1 saniyə əvvəl"</item>
+    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> san əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"1 dəqiqə əvvəl"</item>
+    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"1 saat əvvəl"</item>
+    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> saat əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"dünən"</item>
+    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> gün əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"1 san ərzində"</item>
+    <item quantity="other" msgid="5495880108825805108">"<xliff:g id="COUNT">%d</xliff:g> san ərzində"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"1 dəq ərzində"</item>
+    <item quantity="other" msgid="4216113292706568726">"<xliff:g id="COUNT">%d</xliff:g> dəqiqəyə"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"1 saat ərzində"</item>
+    <item quantity="other" msgid="3705373766798013406">"<xliff:g id="COUNT">%d</xliff:g> saata"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"sabah"</item>
+    <item quantity="other" msgid="2973062968038355991">"<xliff:g id="COUNT">%d</xliff:g> günə"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"<xliff:g id="DATE">%s</xliff:g> tarixində"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"saat <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"<xliff:g id="YEAR">%s</xliff:g> ilində"</string>
+    <string name="day" msgid="8144195776058119424">"gün"</string>
+    <string name="days" msgid="4774547661021344602">"günlər"</string>
+    <string name="hour" msgid="2126771916426189481">"saat"</string>
+    <string name="hours" msgid="894424005266852993">"saatlar"</string>
+    <string name="minute" msgid="9148878657703769868">"dəq."</string>
+    <string name="minutes" msgid="5646001005827034509">"dəqiqə"</string>
+    <string name="second" msgid="3184235808021478">"sn"</string>
+    <string name="seconds" msgid="3161515347216589235">"san"</string>
+    <string name="week" msgid="5617961537173061583">"həftə"</string>
+    <string name="weeks" msgid="6509623834583944518">"həftə"</string>
+    <string name="year" msgid="4001118221013892076">"il"</string>
+    <string name="years" msgid="6881577717993213522">"il"</string>
+  <plurals name="duration_seconds">
+    <item quantity="one" msgid="6962015528372969481">"1 saniyə"</item>
+    <item quantity="other" msgid="1886107766577166786">"<xliff:g id="COUNT">%d</xliff:g> saniyə"</item>
+  </plurals>
+  <plurals name="duration_minutes">
+    <item quantity="one" msgid="4915414002546085617">"1 dəqiqə"</item>
+    <item quantity="other" msgid="3165187169224908775">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə"</item>
+  </plurals>
+  <plurals name="duration_hours">
+    <item quantity="one" msgid="8917467491248809972">"1 saat"</item>
+    <item quantity="other" msgid="3863962854246773930">"<xliff:g id="COUNT">%d</xliff:g> saat"</item>
+  </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"Video problemi"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Bu video bu cihaza strim olunmaq üçün uyğun deyil."</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Bu video oxumur"</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"günorta"</string>
+    <string name="Noon" msgid="3342127745230013127">"Günorta"</string>
+    <string name="midnight" msgid="7166259508850457595">"gecəyarı"</string>
+    <string name="Midnight" msgid="5630806906897892201">"Gecəyarı"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"Hamısını seç"</string>
+    <string name="cut" msgid="3092569408438626261">"Kəs"</string>
+    <string name="copy" msgid="2681946229533511987">"Kopyala"</string>
+    <string name="paste" msgid="5629880836805036433">"Yerləşdir"</string>
+    <string name="replace" msgid="5781686059063148930">"Əvəz et..."</string>
+    <string name="delete" msgid="6098684844021697789">"Sil"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"URL kopyala"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"Mətn seçin"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Mətn seçimi"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"Lüğətə əlavə et"</string>
+    <string name="deleteText" msgid="6979668428458199034">"Sil"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"Daxiletmə metodu"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"Mətn əməliyyatları"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Yaddaş yeri bitir"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Bəzi sistem funksiyaları işləməyə bilər"</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> işlənir"</string>
+    <string name="app_running_notification_text" msgid="4653586947747330058">"Daha çox məlumat üçün və ya tətbiqi dayandırmaq üçün toxunun."</string>
+    <string name="ok" msgid="5970060430562524910">"OK"</string>
+    <string name="cancel" msgid="6442560571259935130">"Ləğv et"</string>
+    <string name="yes" msgid="5362982303337969312">"OK"</string>
+    <string name="no" msgid="5141531044935541497">"Ləğv et"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"Diqqət"</string>
+    <string name="loading" msgid="7933681260296021180">"Yüklənir…"</string>
+    <string name="capital_on" msgid="1544682755514494298">"AÇIQ"</string>
+    <string name="capital_off" msgid="6815870386972805832">"QAPALI"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"Əməliyyatı tamamlayın:"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"Bu fəaliyyət üçün defolt istifadə edin"</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Sistem ayarlarında, Tətbiqlərdə və Endirilmişlərdə defoltu təmizləyin."</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"Fəaliyyət seçin"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB cihaz üçün tətbiq seçin"</string>
+    <string name="noApplications" msgid="2991814273936504689">"Heç bir tətbiq bu əməliyyatı apara bilmir."</string>
+    <string name="aerr_title" msgid="1905800560317137752"></string>
+    <string name="aerr_application" msgid="932628488013092776">"Təəssüf ki, <xliff:g id="APPLICATION">%1$s</xliff:g> dayandı."</string>
+    <string name="aerr_process" msgid="4507058997035697579">"Təəssüf ki, <xliff:g id="PROCESS">%1$s</xliff:g> prosesi dayandı."</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> cavab vermir.\n\nOnu bağlamaq istəyirsiniz?"</string>
+    <string name="anr_activity_process" msgid="5776209883299089767">"<xliff:g id="ACTIVITY">%1$s</xliff:g> aktivitisi cavab vermir. \n\nOnu bağlamaq istəyirsiniz?"</string>
+    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> cavab vermir. Onu bağlamaq istəyirsiniz?"</string>
+    <string name="anr_process" msgid="6513209874880517125">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> cavab vermir. \n \n Onu bağlamaq istəyirsiniz?"</string>
+    <string name="force_close" msgid="8346072094521265605">"OK"</string>
+    <string name="report" msgid="4060218260984795706">"Şikayət edin"</string>
+    <string name="wait" msgid="7147118217226317732">"Gözlə"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"Bu səhifə yararsızlaşıb.\n\nBağlamaq istəyirsiz?"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"Tətbiq yönləndirildi"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> indi çalışır."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilk başladıldı."</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Miqyas"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"Həmişə göstər"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Bunları Sistem ayarlarında yenidən aktivləşdir Yüklənmiş &gt; Tətbiqlər &gt;."</string>
+    <string name="smv_application" msgid="3307209192155442829">"Tətbiq <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) StrictMode siyasətini pozdu."</string>
+    <string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> prosesi StrictMode siyasətini pozdu."</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"Android təkmilləşdirilir..."</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> əddədən <xliff:g id="NUMBER_0">%1$d</xliff:g> tətbiq optimallaşır."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Tətbiqlər başladılır."</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"Yükləmə başa çatır."</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> çalışır"</string>
+    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Tətbiqə keçmək üçün toxunun"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Tətbiqlərə keçilsin?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Bir tətbiq artıq işləyir. Digərini başlatmaq üçün onu dayandırmalısınız."</string>
+    <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> bölməsinə qayıdın"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"Yeni tətbiqi başlatmayın."</string>
+    <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> tətbiqini başladın"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"Köhnə tətbiqi yadda saxlamadan dayandırın."</string>
+    <string name="sendText" msgid="5209874571959469142">"Mətn üçün əməliyyat seçin"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"Zəngin səs gücü"</string>
+    <string name="volume_music" msgid="5421651157138628171">"Media həcmi"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bluetooth vasitəsilə oynadılır"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Səssiz zəng"</string>
+    <string name="volume_call" msgid="3941680041282788711">"Daxili zəng səsi"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetooth zəng həcmi"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"Siqnal səsi"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"Bildiriş səsi"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"Həcm"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth həcmi"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zəng səsi gücü"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"Zəng həcmi"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"Media həcmi"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"Bildiriş səsi"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"Defolt rinqton"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Defolt rinqton (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"Heç biri"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"Zəng səsləri"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"Naməlum rinqton"</string>
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Wi-Fi şəbəkəsi mövcuddur"</item>
+    <item quantity="other" msgid="4192424489168397386">"Wi-Fi şəbəkələri mövcuddur"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"Wi-Fi şəbəkəni açın"</item>
+    <item quantity="other" msgid="7915895323644292768">"Açıq Wi-Fi şəbəkələri mövcuddur"</item>
+  </plurals>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"Wi-Fi şəbəkəsinə daxil ol"</string>
+    <string name="network_available_sign_in" msgid="8495155593358054676">"Şəbəkəyə daxil olun"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi\'a qoşulmaq alınmadı"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" internet bağlantısı keyfiyyətsizdir."</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Wi-Fi Direct əməliyyatını başlat. Bu Wi-Fi müştəri/hotspotu bağlayacaq."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Wi-Fi Direct başladıla bilmədi."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct aktivdir"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Ayarlar üçün toxunun"</string>
+    <string name="accept" msgid="1645267259272829559">"Qəbul edin"</string>
+    <string name="decline" msgid="2112225451706137894">"İmtina edin"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Dəvətnamə göndərildi"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Qoşulmaq üçün dəvət"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"Kimdən:"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"Kimə:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Tələb olunan PİN kodu daxil edin:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PİN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Bu planşet <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazına qoşulan zaman Wi-Fi şəbəkəsindən müvəqqəti ayrılmış olacaq"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Bu telefon <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazına qoşulan zaman Wi-Fi şəbəkəsindən müvəqqəti ayrılmış olacaq"</string>
+    <string name="select_character" msgid="3365550120617701745">"Simvol daxil edin"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"SMS mesaj göndərilir"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; çox sayda SMS mesaj göndərir. Bu tətbiqin mesaj göndərməyə davam etməsinə icazə verirsiniz?"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"İcazə verin"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"Rədd edin"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt; ünvanına mesaj göndərmək istəyir."</string>
+    <string name="sms_short_code_details" msgid="3492025719868078457">"Bu, mobil hesabınıza "<font fgcolor="#ffffb060">"əlavə tariflərin tətbiq olunması"</font>" ilə nəticələnə bilər."</string>
+    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Bu mobil hesabınızda ödənişlərə səbəb olacaq."</font></string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Göndər"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Ləğv et"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Mənim seçimimi yadda saxla"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Bunu sonra Ayarlarda dəyişə bilərsiniz &gt; Tətbiqlər"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Həmişə icazə ver"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Heç vaxt icazə verməyin"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM kart çıxarıldı"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"Cihazınızı etibarlı SIM kart ilə başladana kimi mobil şəbəkə əlçatmaz olacaq."</string>
+    <string name="sim_done_button" msgid="827949989369963775">"Bitdi"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SİM kart əlavə edildi"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"Mobil şəbəkəyə qoşulmaq üçün cihazınızı yenidən başladın."</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"Yenidən başlat"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Vaxt ayarlayın"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Tarixi quraşdır"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"Ayarlayın"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"Hazırdır"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"YENİ: "</font></string>
+    <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> tərəfindən təmin edilib."</string>
+    <string name="no_permissions" msgid="7283357728219338112">"Heç bir icazə tələb olunmur"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"bununla sizdən xərc tutula bilər"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB toplu yaddaş"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"USB qoşuludur"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Siz USB vasitəsilə kompütere bağlandınız. Kompüter və Androidinizin USB yaddaşı arasında faylları kopyalamaq istəyirsinizsə, aşağıdakı düyməyə toxunun."</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"Kompüterinizə USB ilə qoşulmusunuz. Faylları Androidinizin SD kartı ilə kompüteriniz arasında kopyalamaq istəyirsinizsə aşağıdakı düyməyə toxunun."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"USB yaddaşı aktivləşdirin"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"USB yaddaşınızı USB kütləvi yaddaşı üçün istifadə edən zaman problem yarandı."</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"SD kartınızı USB kütləvi yaddaşı üçün istifadə edən zaman problem yarandı."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB qoşuludur"</string>
+    <string name="usb_storage_notification_message" msgid="939822783828183763">"Faylları kompüterinizə kopyalamaq və ya kompüterinizdən kopyalamaq üçün toxunun."</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB yaddaşı söndürün"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB yaddaşı söndürmək üçün toxunun."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB yaddaş istifadə olunur"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB yaddaşı söndürmədən öncə Android\'in USB yaddaşını kompüterdən demontaj etdiyinizə (çıxardığınıza) əmin olun."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"USB yaddaşı söndürmədən öncə Android\'in USB yaddaşını kompüterdən demontaj etdiyinizə (çıxardığınıza) əmin olun."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB yaddaşını söndür"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"USB yaddaşı söndürən zaman problem oldu. USB hostu demontaj etmənizi yoxlayın və yenidən cəhd edin."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB yaddaşı aktivləşdirin"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"USB yaddaşı aktivləşdirsəniz, istifadə etdiyiniz bəzi tətbiqlər dayana bilər və USB yaddaş deaktiv edilənə qədər işləməyə bilər."</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"USB əməliyyatı uğursuzdur"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
+    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Media cihazı kimi qoşuldu"</string>
+    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Kamera kimi bağlanıldı"</string>
+    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Quraşdırıcı kimi qoşulub"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB aksesuara qoşuldu"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"Digər USB seçimləri üçün toxunun."</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB yaddaşına format atılsın?"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD kart format edilsin?"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB yaddaşınızda yerləşdirilmiş bütün fayllar silinəcək. Bu addım geri dönülməzdir."</string>
+    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kartınızdakı bütün məlumatlar itəcək."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB sazlama qoşuludur"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"USB debaqı deaktivasiya etmək üçün toxunun."</string>
+    <string name="select_input_method" msgid="4653387336791222978">"Daxiletmə metodunu seçin"</string>
+    <string name="configure_input_methods" msgid="9091652157722495116">"Daxiletmə üsullarını ayarlayın"</string>
+    <string name="use_physical_keyboard" msgid="6203112478095117625">"Fiziki klaviatura"</string>
+    <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Klaviatura sxemi seçin"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Klaviatura tərtibatı seçmək üçün toxunun."</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCÇDEƏFGĞHXIİJKQLMNOÖPRSŞTUÜVYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCÇDEƏFGĞHİIJKLMNOÖPQRSŞTUÜVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"namizədlər"</u></string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB yaddaş hazırlanır"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD kart hazırlanır"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Səhvlər yoxlanılır."</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Boş USB yaddaşı"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Boş SD kart"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB yaddaş boşdur və ya sistem tərəfindən dəstəklənməyən fayl sisteminə malikdir."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD kart boşdur və ya sistem tərəfindən dəstəklənməyən fayl sisteminə malikdir."</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Zədəli USB yaddaş"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Zədəli SD kart"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"SD yaddaş zədələnib. Onu format etməyə çalışın."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD kart zədələnib. Onu format etməyə çalışın."</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB yaddaşı gözlənilmədən çıxarıldı"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD kart gözlənilmədən çıxarıldı"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Məlumat itkisinin qarşısını almaq üçün USB yaddaşı çıxarmazdan əvvəl onu demontaj edin."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Data itkisinin qarşısını almaq üçün SD kartı çıxarmadan öncə demontaj edin."</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"USB yaddaş çıxarmaq üçün təhlükəsizdir"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD kart təhlükəsiz çıxarıla bilər"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Siz USB yaddaşı təhlükəsiz çıxara bilərsiniz."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Siz SD kartı təhlükəsiz çıxara bilərsiniz."</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Silinmiş USB yaddaş"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD kart çıxarıldı"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB yaddaş çıxarıldı. Yeni media əlavə edin."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD kart çıxarıldı. Yenisini daxil edin."</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"Uyğun gələn fəaliyyət tapılmadı."</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"komponent istifadəsi statistikasını güncəlləyir"</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Tətbiqə toplanmış istifadə statistikasını dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"məzmunu kopyala"</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Tətbiqə kontenti kopyalamaq üçün defolt konteyner servisini çağırmaq icazəsi verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_route_media_output" msgid="1642024455750414694">"Media çıxışını yönləndirir"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Tətbiqə media çıxışını digər xarici cihazlara yönləndirmək imkanı verir."</string>
+    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Keyguard təhlükəsiz yaddaşa çıxış"</string>
+    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Tətbiqə keguard təhlükəsiz yaddaşa çatmağa icazə verir."</string>
+    <string name="permlab_control_keyguard" msgid="172195184207828387">"Klaviatura kilidinin görülməsini və gizlədilməsini idarə edir"</string>
+    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tətbiqə keguardı idarə etmək icazəsi verir."</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Zoom nəzarəti üçün iki dəfə toxunun"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget əlavə edilə bilmədi."</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"Get"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"Axtar"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"Göndər"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"Növbəti"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"Tamam"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"Əvvəlki"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"İcra edin"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"<xliff:g id="NUMBER">%s</xliff:g> istifadə etməklə\nnömrə yığın"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"<xliff:g id="NUMBER">%s</xliff:g>istifadə edərək kontakt yaradın\n"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Aşağıdakı bir və ya daha çox tətbiqlər indi və gələcəkdə hesabınıza daxil olmaq üçün icazə istəyir."</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Bu istəyə izn vermək istəyirsiniz?"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"Giriş sorğusu"</string>
+    <string name="allow" msgid="7225948811296386551">"İcazə verin"</string>
+    <string name="deny" msgid="2081879885755434506">"Rədd et"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"İcazə tələb olunur"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">\n" hesabı üçün<xliff:g id="ACCOUNT">%s</xliff:g> icazə sorğusu göndərildi."</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"Daxiletmə metodu"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"Sinxronizasiya"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Əlçatımlılıq"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Divar kağızı"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"Divar kağızını dəyişin"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Bildiriş dinləyən"</string>
+    <string name="vpn_title" msgid="19615213552042827">"VPN aktivləşdirildi"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"VPN <xliff:g id="APP">%s</xliff:g> tərəfindən aktivləşdirilib"</string>
+    <string name="vpn_text" msgid="3011306607126450322">"Şəbəkəni idarə etmək üçün toxunun."</string>
+    <string name="vpn_text_long" msgid="6407351006249174473">"<xliff:g id="SESSION">%s</xliff:g> sessiyaya qoşuludur. Şəbəkəni idarə etmək üçün toxunun."</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Həmişə aktiv VPN bağlanır..."</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"VPN bağlantısı həmişə aktiv"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Həmişə aktiv VPN xətası"</string>
+    <string name="vpn_lockdown_config" msgid="6415899150671537970">"Konfiqurə etmək üçün toxun"</string>
+    <string name="upload_file" msgid="2897957172366730416">"Fayl seçin"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"Heç bir fayl seçilməyib"</string>
+    <string name="reset" msgid="2448168080964209908">"Sıfırlayın"</string>
+    <string name="submit" msgid="1602335572089911941">"Göndər"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Avtomobil rejimi aktivdir"</string>
+    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Avtomobil rejimindən çıxmaq üçün toxunun."</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"Tezerinq və ya hotspot aktivdir"</string>
+    <string name="tethered_notification_message" msgid="6857031760103062982">"Quraşdırmaq üçün toxunun."</string>
+    <string name="back_button_label" msgid="2300470004503343439">"Geri"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"Növbəti"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"Keç"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Yüksək mobil data istifadəsi"</string>
+    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Mobil data istifadəsi haqqında daha çox öyrənmək üçün toxunun."</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"Mobil data limiti keçildi"</string>
+    <string name="throttled_notification_message" msgid="5443457321354907181">"Mobil data istifadəsi haqqında daha çox öyrənmək üçün toxunun."</string>
+    <string name="no_matches" msgid="8129421908915840737">"Uyğunluq yoxdur"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"Səhifədə tap"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"1 uyğunluq"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> ədəddən <xliff:g id="TOTAL">%d</xliff:g>"</item>
+  </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"Hazırdır"</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB yaddaşı qaldırılır..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD kart demontaj edilir..."</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB yaddaş silinir..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD kart silinir..."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB yaddaşı silinə bilmədi."</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"SD kartı silmək mümkün olmadı."</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"SD kart demontaj edilmədən öncə çıxarıldı."</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB yaddaş hazırda yoxlanılır."</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"SD kart hazırda yoxlanılır."</string>
+    <string name="media_removed" msgid="7001526905057952097">"SD kart çıxarılıb."</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"SD kart hazırda kompüter tərəfindən istifadə edilir."</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"SD kart hal-hazırda kompüter tərəfindən istifadə edilir."</string>
+    <string name="media_unknown_state" msgid="729192782197290385">"Naməlum vəziyyətdə xarici media."</string>
+    <string name="share" msgid="1778686618230011964">"Paylaşın"</string>
+    <string name="find" msgid="4808270900322985960">"Tapın"</string>
+    <string name="websearch" msgid="4337157977400211589">"Veb Axtarış"</string>
+    <string name="find_next" msgid="5742124618942193978">"Sonrakını tap"</string>
+    <string name="find_previous" msgid="2196723669388360506">"Əvvəlkini tap"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"<xliff:g id="NAME">%s</xliff:g> tərəfindən məkan sorğusu"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"Məkan sorğusu"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) tərəfindən tələb edilib"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"Bəli"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"Xeyr"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"Limiti keçəni silin"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> üçün <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> silinmiş fayl var, <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> hesabı. Nə etmək istəyirsiniz?"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"Elementləri sil"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"Silinənləri geri qaytar"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"İndilik heç nə etmə"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"Hesab seçin"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"Hesab əlavə et"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"Hesab əlavə edin"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"Artır"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"Azaldın"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g> toxunun və basaraq saxlayın."</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Artırmaq üçün yuxarı, azaltmaq üçün aşağı sürüşdürün."</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"Dəqiqə artırın"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"Dəqiqəni azalt"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Saatı artırın"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Saatı azaldın"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"PM qurun"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"AM qurun"</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Artma ayı"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Ayı azaldın"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Artma günü"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"Azalma günü"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"Artım ili"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"Azalma ili"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ləğv et"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Sil"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hazırdır"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Rejim dəyişikliyi"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Daxil olun"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Tətbiq seçin"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Bununla paylaşın"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ilə paylaşın"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"Sürüşən qulp. Toxunaraq basılı tutun."</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün yuxarı sürüşdürün."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün aşağı sürüşdürün."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sola sürüşdür."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sağa sürüşdür."</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Kilidi aç"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Səssiz"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Səs açıqdır"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Axtar"</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Kilidi açmaq üçün vurun."</string>
+    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Parolların səsləndirilməsi üçün qulaqlıqları taxın."</string>
+    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nöqtə."</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"Evə gedin"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"Yuxarı gedin"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"Əlavə seçimlər"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"Daxili yaddaş"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD kart"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB yaddaş"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"Redaktə et"</string>
+    <string name="data_usage_warning_title" msgid="1955638862122232342">"Data istifadə xəbərdarlığı"</string>
+    <string name="data_usage_warning_body" msgid="2814673551471969954">"İstifadə və ayarları görmək üçün toxunun"</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G data deaktivdir"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G data deaktiv edildi"</string>
+    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil data deaktivdir"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi data deaktiv edildi"</string>
+    <string name="data_usage_limit_body" msgid="3317964706973601386">"Aktivləşdirmək üçün toxunun."</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G data limiti aşılıb"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G data limiti keçildi"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobil data limiti keçildi"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi data limiti keçildi"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> müəyyən edilmiş limit aşır."</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"Arxaplan datası məhdudlaşdırıldı"</string>
+    <string name="data_usage_restricted_body" msgid="6741521330997452990">"Məhdudiyyəti aradan qaldırmaq üçün toxunun"</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"Təhlükəsizlik sertifikatı"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Bu sertifikat etibarlıdır."</string>
+    <string name="issued_to" msgid="454239480274921032">"Verilib:"</string>
+    <string name="common_name" msgid="2233209299434172646">"Ümumi ad:"</string>
+    <string name="org_name" msgid="6973561190762085236">"Təşkilat:"</string>
+    <string name="org_unit" msgid="7265981890422070383">"Təşkilati vahid:"</string>
+    <string name="issued_by" msgid="2647584988057481566">"Tərəfindən verilib:"</string>
+    <string name="validity_period" msgid="8818886137545983110">"Keçərlilik:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"Dərc olunub:"</string>
+    <string name="expires_on" msgid="3676242949915959821">"Bitmə vaxtı:"</string>
+    <string name="serial_number" msgid="758814067660862493">"Seriya nömrəsi:"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"Barmaq izləri:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 barmaq izi:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 barmaq izi:"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Hamısını seçın"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Fəaliyyəti seçin"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Bununla paylaşın"</string>
+    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
+    <string name="sending" msgid="3245653681008218030">"Göndərilir..."</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"Brauzer işə salınsın?"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"Zəngi qəbul edək?"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"Həmişə"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"Sadəcə bir dəfə"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Planşet"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Qulaqlıq"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dok spikerlər"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"Simsiz ekran"</string>
+    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hazırdır"</string>
+    <string name="media_route_button_content_description" msgid="5758553567065145276">"Media çıxışı"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"Skan edilir..."</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"Qoşulur..."</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"Əlçatımlı"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"Əlçatımlı deyil"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"İstifadə olunur"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Daxili ekran"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Ekran"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Örtük #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", təhlükəsiz"</string>
+    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Simsiz ekran qoşulub"</string>
+    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Bu ekran digər cihazda göstərir"</string>
+    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Bağlantını kəsin"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Təcili zəng"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Şablonu unutmuşam"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Yanlış Model"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Yanlış Şifrə"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN səhvdir"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%1$d</xliff:g> saniyə sonra yenidən cəhd edin."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Şablonunuzu çəkin"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN kodu daxil edin"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PİN kodu daxil edin"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Parol daxil edin"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM indi deaktivdir. Davam etmək üçün PUK kodu daxil edin. Əlavə məlumat üçün operatora müraciət edin."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"İstədiyiniz PİN kodu daxil edin"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"İstədiyiniz PIN kodu təsdiqləyin"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SİM kartın kilidi açılır..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PİN kod."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-dən 8-ə qədər rəqəmi olan PIN yazın."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kod 8 rəqəm və ya daha çox olmalıdır."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Düzgün PUK kodu yenidən daxil edin. Təkrarlanan cəhdlər SIM\'i birdəfəlik sıradan çıxaracaq."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodları uyğun deyil"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Həddindən çox cəhd edildi!"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Kilidi açmaq üçün Google hesabınız ilə daxil olun."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"İstifadəçi adı (e-poçt)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Şifrə"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Daxil ol"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Yanlış istifadəçi adı və ya parol."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"İstifadəçi adınızı və ya parolunuzu unutmusunuz?\n "<b>"google.com/accounts/recovery"</b>" linkinə daxil olun."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Hesab yoxlanılır..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodunuzu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Şifrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Modelinizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış çəkmisiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, planşet fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Siz telefon kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, telefon fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. Planşet fabrik ayarlarına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Siz telefonun kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> yanlış cəhd etmisiniz. Telefon artıq defolt zavod halına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetinizin kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz artıq modeli <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etmisiniz.<xliff:g id="NUMBER_1">%d</xliff:g> dəfə də yanlış daxil etsəniz, telefonun kilidinin açılması üçün elektron poçt ünvanınız tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində yenidən cəhd edin."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Yığışdır"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"Səs gücü tövsiyə edilən səviyyədən artırılsın?\nUzun müddət yüksək səs gücü ilə dinləmə Sizin eşitmə qabiliyyətinizə mənfi təsir edə bilər."</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Əlçatımlığı aktivləşdirmək üçün iki barmağınızı basılı saxlayın."</string>
+    <string name="accessibility_enabled" msgid="1381972048564547685">"Əlçatımlılıq aktivləşdirildi"</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"Giriş imkanı ləğv edilib."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Cari istifadəçi <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="owner_name" msgid="2716755460376028154">"Sahib"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"Xəta"</string>
+    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"Bu tətbiq məhdud profillər üçün hesabları dəstəkləmir."</string>
+    <string name="app_not_found" msgid="3429141853498927379">"Bu əməliyyatı idarə etmək üçün heç bir tətbiq tapılmadı."</string>
+    <string name="revoke" msgid="5404479185228271586">"Ləğv edin"</string>
+    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
+    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
+    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
+    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
+    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
+    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
+    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
+    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
+    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
+    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
+    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
+    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
+    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
+    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
+    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
+    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"B4 ISO"</string>
+    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
+    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
+    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
+    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
+    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
+    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
+    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
+    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
+    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
+    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
+    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
+    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
+    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
+    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
+    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
+    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
+    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
+    <string name="mediaSize_na_letter" msgid="4191805615829472953">"Məktub"</string>
+    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"Hökumət Məktubu"</string>
+    <string name="mediaSize_na_legal" msgid="6697982988283823150">"Hüquqi"</string>
+    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"Kiçik Hüquq"</string>
+    <string name="mediaSize_na_ledger" msgid="281871464896601236">"Qovluq"</string>
+    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"Qısa"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Ləğv edildi"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Kontent yazmna xətası"</string>
+    <string name="reason_unknown" msgid="6048913880184628119">"naməlum"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"Administrator PIN kodunu daxil edin"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN daxil edin"</string>
+    <string name="restr_pin_incorrect" msgid="8571512003955077924">"Səhv"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Cari PIN"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Yeni PIN"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Yeni PIN\'i təsdiq edin"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"Dəyişmə məhdudiyyətləri üçün PİN yaradın"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PİN uyğun gəlmir. Yenidən cəhd edin."</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PİN çox qısadır. Ən azı 4 rəqəm olmalıdır."</string>
+  <plurals name="restr_pin_countdown">
+    <item quantity="one" msgid="311050995198548675">"1 saniyə sonra təkrar yoxlayın"</item>
+    <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> saniyə sonra təkrar yoxlayın"</item>
+  </plurals>
+    <string name="restr_pin_try_later" msgid="973144472490532377">"Daha sonra yenidən yoxlayın."</string>
+    <string name="transient_navigation_confirmation" msgid="4907844043611123426">"Paneli göstərmək üçün ekranın küncünü sürüşdürün"</string>
+    <string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Sistem panelini göstərmək üçün ekranın küncündən sürüşdürün"</string>
+</resources>
diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml
new file mode 100644
index 0000000..08e79bb
--- /dev/null
+++ b/core/res/res/values-az/strings.xml
@@ -0,0 +1,1586 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B"</string>
+    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="4638956954852782576">"Başlıqsız"</string>
+    <string name="ellipsis" msgid="7899829516048813237">"..."</string>
+    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefon nömrəsi yoxdur)"</string>
+    <string name="unknownName" msgid="2277556546742746522">"(Naməlum)"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Səsli poçt"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+    <string name="mmiError" msgid="5154499457739052907">"Bağlantı problemi və ya yalnış MM kodu."</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"Əməliyyat yalnız sabit nömrələrə yığımla məhdudlaşıb."</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"Servis işə salındı."</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"Xidmət aktiv edilmişdir:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"Xidmət deaktiv edilib."</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"Qeydiyyat uğurlu oldu."</string>
+    <string name="serviceErased" msgid="1288584695297200972">"Silinmə uğurlu olmuşdur."</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"Yanlış parol"</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI tamamdır."</string>
+    <string name="badPin" msgid="9015277645546710014">"Daxil etdiyiniz köhnə PİN düzgün deyil."</string>
+    <string name="badPuk" msgid="5487257647081132201">"Daxil etdiyiniz PUK düzgün deyil."</string>
+    <string name="mismatchPin" msgid="609379054496863419">"Daxil etdiyiniz PİN kodlar uyğun gəlmir."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"4-dən 8-ə qədər rəqəmi olan PIN yazın."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"8 və daha çox rəqəmi olan PUK yazın."</string>
+    <string name="needPuk" msgid="919668385956251611">"Sizin SİM kart PUK ilə kilidlənib. Onu açmaq üçün PUK kodu yazın."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"SIM kartın kilidini açmaq üçün PUK2 yazın"</string>
+    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
+    <string name="meid" msgid="4841221237681254195">"MEID"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"Daxil olan zəng edənin ID\'si"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"Gedən Zəng ID"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"Zəng yönləndirmə"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"Zəng gözləyir"</string>
+    <string name="BaMmi" msgid="455193067926770581">"Zəng qadağası"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"Parolu dəyiş"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"PİN dəyişmək"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"Hazırdakı nömrəyə zəng edilir"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"Zənglərin sayı məhdudlaşdırılıb"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"Üç yollu zəng"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"Xoşagəlməz zənglərdən imtina"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Çatdırılma zəngi"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"Narahat etməyin"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Adətən zəng edənin ID\'si məhdudlaşdırılır. Növbəti zəng: Məhdudlaşdırılıb"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Adətən zəng edənin ID\'si məhdudlaşdırılır. Növbəti zəng: Məhdudlaşdırılmayıb"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Adətən zəng edənin ID\'si məhdudlaşdırılmır. Növbəti zəng: Məhdudlaşdırılıb"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Adətən zəng edənin ID\'si məhdudlaşdırılmır. Növbəti zəng: Məhdudlaşdırılmayıb"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"Xidmət təmin edilməyib."</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"Siz zəng edənin ID nizamlarını dəyişə bilməzsiz."</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Məhdudlaşdırılmış keçid dəyişdi"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"Data xidmət bağlıdır."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Təcili xidmət bağlıdır."</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"Səs xidməti bağlıdır."</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"Bütün Səs xidmətləri bağlıdır"</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS xidməti bloklanıb."</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"Səs/data xidmətləri bloklanıb."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Səs/SMS xidmətləri bloklanıb."</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"Bütün səs/data/SMS xidmətləri bağlıdır."</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"Səs"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"Məlumat"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Async"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"Sinx"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"Paket"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"Rominq göstəricisi işləkdir"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"Rominq göstəricisi işlək deyil"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"Rominq göstəricisi yanır"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"Qonşuluqdan Kənar"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"Binadan kənar"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"Rominq - Arzuolunan sistem"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"Rominq - Mümkün sistem"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Rominq - Alyans partnyoru"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"Rominq - Premium partnyor"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"Rouminq - Tam Xidmət Funksionallığı"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"Rouminq - Qismən Xidmət Funksionallığı"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"Rouminq Banneri Açıqdır"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"Roaming Banner Off"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"Xidmət axtarılır"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yönləndirilmədi"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> <xliff:g id="TIME_DELAY">{2}</xliff:g> saniyə sonra"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yönləndirilmədi"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Yönləndirilmədi"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"Özəllik kodu tamamlandı."</string>
+    <string name="fcError" msgid="3327560126588500777">"Əlaqə problemi və ya yanlış funksiya kodu."</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
+    <string name="httpError" msgid="7956392511146698522">"Şəbəkə xətası var idi."</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"URL tapıla bilmədi."</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Sayt autentifikasiya sxemi dəstəklənmir."</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"Təsdiq edilə bilmədi."</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Proksi server vasitəsilə təsdiqlənmə uğursuz oldu."</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"Serverə qoşula bilmədi."</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"Serverlə əlaqə alınmadı. Sonra cəhd edin."</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"Server ilə olan əlaqə zaman aşımına məruz qaldı."</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Bu səhifədə həddindən çox server yönləndirilmələri var."</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Protokol dəstəklənmir."</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Güvənli bağlantı yaradıla bilmədi."</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"URL yanlış olduğu üçün səhifəni açmaq mümkün olmadı."</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"Fayla giriş baş tutmadı."</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Tələb olunan fayl tapılmadı."</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Həddindən çox sorğu işlənilir. Daha sonra yoxlayın."</string>
+    <string name="notification_title" msgid="8967710025036163822">"<xliff:g id="ACCOUNT">%1$s</xliff:g> üçün giriş xətası"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"Sinxronlaşdırma"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinxronlaşdırma"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Həddindən çox <xliff:g id="CONTENT_TYPE">%s</xliff:g> silinmələri var."</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"Planşetin yaddaşı doludur. Boş yer üçün bəzi faylları silin."</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonun yaddaşı doludur. Boş yer üçün bəzi faylları silin."</string>
+    <string name="me" msgid="6545696007631404292">"Mən"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Planşet seçimləri"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"Telefon seçimləri"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"Səssiz rejim"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"Simsizi işə salın"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"Simsiz rabitəni söndürün"</string>
+    <string name="screen_lock" msgid="799094655496098153">"Ekran kilidi"</string>
+    <string name="power_off" msgid="4266614107412865048">"Söndür"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"Zəng deaktivdir"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"Zəng vibrasiyadadır"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"Zəngvuran açıqdır"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"Söndürülür..."</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Planşetiniz sönəcək."</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefonunuz sönəcək."</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Söndürmək istəyirsiz?"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"Təhlükəsiz rejimdə yenidən başlayın"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Təhlükəsiz rejimdə yenidən başlamaq istəyirsiniz mi? Bu, quraşdırdığınız bütün üçüncü tərəf tətbiqlərini deaktiv edəcək."</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"Son"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"Heç bir son tətbiq yoxdur."</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"Planşet seçimləri"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"Telefon seçimləri"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"Ekran kilidi"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"Söndür"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"Baq hesabatı"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"Baqı xəbər verin"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"Bu, sizin hazırkı cihaz durumu haqqında məlumat toplayacaq ki, elektron məktub şəklində göndərsin. Baq raportuna başlamaq üçün bir az vaxt lazım ola bilər, bir az səbr edin."</string>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Səssiz rejim"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Səs qapalıdır"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Səs Aktivdir"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Təyyarə rejimi"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Uçuş rejimi açıqdır"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Təyyarə rejimi qapalıdır"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+    <string name="safeMode" msgid="2788228061547930246">"Təhlükəsiz rejim"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"Android sistemi"</string>
+    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Ödənişli xidmətlər"</string>
+    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Xərc tutulacaq əməliyyatlar edir"</string>
+    <string name="permgrouplab_messages" msgid="7521249148445456662">"Sizin mesajlarınız"</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"SMS, elektron poçt və digər mesajları oxuyur və yazır."</string>
+    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Şəxsi məlumatınız"</string>
+    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Kontakt kartınızda saxlanılan məlumatlarınıza birbaşa giriş."</string>
+    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Sosial məlumatınız"</string>
+    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Kontaktlarınız və sosial əlaqələriniz haqqında məlumata birbaşa giriş."</string>
+    <string name="permgrouplab_location" msgid="635149742436692049">"Yerləşməniz"</string>
+    <string name="permgroupdesc_location" msgid="5704679763124170100">"Fiziki adresinizi monitorinq edir."</string>
+    <string name="permgrouplab_network" msgid="5808983377727109831">"Şəbəkə kommunikasiyası"</string>
+    <string name="permgroupdesc_network" msgid="4478299413241861987">"Müxtəlif şəbəkə xüsusiyyətlərinə daxil ol."</string>
+    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
+    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Bluetooth üzərindən cihazlara və şəbəkələrə daxil ol."</string>
+    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Audio Ayarlar"</string>
+    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Audio ayarları dəyişin."</string>
+    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Batareyaya təsir edir"</string>
+    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Batareyanızın tez qurtarmasına səbəb olan funksiyalar istifadə edir"</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Təqvim"</string>
+    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Təqvimə və tədbirlərə birbaşa giriş."</string>
+    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"İstifadəçi Lüğətini Oxu"</string>
+    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"İstifadəçi lüğətindəki sözləri oxuyur."</string>
+    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"İstifadəçi Lüğətini Yaz"</string>
+    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"İstifadəçi lüğətinə sözlər əlavə edin."</string>
+    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Əlfəcinlər və Tarixçə"</string>
+    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Əlfəcinlərə və brauzer tarixinə birbaşa icazə."</string>
+    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Zəng"</string>
+    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Alarm qur."</string>
+    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Səsli poçt"</string>
+    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Səs poçtuna birbaşa çıxış."</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
+    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Audio yazmaq üçün mikrofona birbaşa giriş."</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
+    <string name="permgroupdesc_camera" msgid="2933667372289567714">"Şəkil və ya video çəkmək üçün kameraya birbaşa çıxış."</string>
+    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"Ekran kilidi"</string>
+    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"Cihazınızdakı kilid ekranının hərəkətinə təsir etmə bacarığı"</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Tətbiq məlumatlarınız"</string>
+    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Cihazınızdakı digər tətbiqlərin davranışına təsir etmək bacarığı."</string>
+    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Divar kağızı"</string>
+    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Cihazın divar kağızı ayarlarını dəyişin."</string>
+    <string name="permgrouplab_systemClock" msgid="406535759236612992">"Saat"</string>
+    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Cihazın vaxt və zaman zolağını dəyişir."</string>
+    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Status paneli"</string>
+    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Cihazın status paneli ayarlarınızı dəyişir."</string>
+    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sinx Ayarları"</string>
+    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Sinxronizasiya nizamlarına çıxış."</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Hesablarınız"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Əlçatımlı hesablara daxil olun."</string>
+    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Hardware kontrolları"</string>
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Dəstəkdəki avadanlığa birbaşa giriş."</string>
+    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Telefon zəngləri"</string>
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Telefon zənglərinə nəzarət edin, qeydə alın və idarə edin."</string>
+    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Sistem alətləri"</string>
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Aşağı səviyyəli çıxış və sistem idarəetməsi."</string>
+    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"İnkişaf alətləri"</string>
+    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Özəlliklər yalnız tətbiq developerləri üçün lazımdır."</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"Digər tətbiq İstifadəçi İnterfeysi"</string>
+    <string name="permgroupdesc_display" msgid="6051002031933013714">"Digər tətbiqlərin İstifadəçi İnterfeysinə təsir edir."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Yaddaş"</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB yaddaşa daxil ol."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD karta daxil ol."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Əlçatımlılıq funksiyaları"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Yardımçı texnologiya tələb edə biləcəyi funksiyalar."</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Pəncərənin məzmununu əldə edin"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Əlaqədə olduğunuz pəncərənin məzmununu nəzərdən keçirin."</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Toxunaraq Kəşf et funksiyasını yandırın"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Toxunulan hissələr səsləndiriləcək və ekran jestlərlə idarə oluna biləcək."</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"İnkişaf etmiş veb əlçatımlılığı yandırın"</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Skriptlər tətbiq məzmununun daha əlçatımlı olması üçün quraşdırıla bilər."</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Yazdığınız mətni izləyin"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Kredit kartı nömrələri və parollar kimi şəxsi məlumatlar daxildir."</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"status panelini deaktivləşdir və ya dəyişdir"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"Tətbiqə status panelini deaktiv etməyə və ya sistem ikonalarını əlavə etmək və ya silmək imkanı verir."</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"status paneli"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"Tətbiqə status paneli olmağa imkan verir."</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"status panelini genişlətmək və ya yığmaq"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Tətbiqə status panelini genişləndirməyə və ya yox etməyə imkan verir."</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"gedən zənglərin marşrutunu dəyişmək"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Tətbiqə zəng etməyə və zəng edilən nömrəni dəyişməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək gedən zəngləri izləyə, yönləndirə və ya qarşısını ala bilər."</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"SMS qəbul etmək"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"Tətbiqə MMS mesajlarını almaq və emal etmək icazəsi verir. Bu o deməkdir ki, tətbiq sizin mesajlarınızı sizə göstərmədən monitorinq edə və ya silə bilər."</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"mətn mesajlarını qəbul edir (MMS)"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"Tətbiqə MMS mesajlarını qəbul və emal üçün imkan verir. Bu o deməkdir ki, bu tətbiq sizə göstərmədən cihazınıza göndərilən mesajları silə bilər."</string>
+    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"təcili yayımları qəbul edir"</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Tətbiqə təcili yayım mesajlarını qəbul və emal etmək icazəsi verir. Bu icazə ancaq sistem tətbiqləri üçün mümkündür."</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"mobil yayım mesajlarını oxuyur"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Tətbiqə sizin telefonunuz tərəfindən alınmış yayım mesajlarını oxuma icazəsi verir. Telefon yayımı bəzi məkanlarda olan fövqəladə hadisələrlə bağlı sizi xəbərdar etmək üçün qəbul edilir. Zərərli tətbiqlər fövqəladə mobil yayım qəbul edildiyi zaman telefonunun performansına və əməliyyatına müdaxilə edə bilər."</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"SMS mesajlarını göndərir"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"Tətbiqə SMS mesajı göndərmə icazəsi verir. Bu gözlənilməyən ödənişlərə səbəb ola bilər. Zərərli tətbiqlər sizin təsdiqiniz olmadan mesaj göndərməklə sizə ödənişə səbəb ola bilərlər."</string>
+    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"mesajla cavab verilməli tədbirlər göndərmək"</string>
+    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"Tətbiqə zənglər üçün \"mesajla cavabla\" hadisələrini idarə etmək üçün digər mesajlaşma tətbiqlərinə sorğuların göndərilməsi icazəsi verir."</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"tekst mesajlarınızı oxuyur (SMS və ya MMS)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Tətbiqə planşetinizdə və ya SIM kartınızda saxlanan SMS mesajları oxumağa imkan verir. Bu bütün SMS mesajların, onların məzmunundan və konfidensiallığından asılı olmadan oxunması imkanı deməkdir."</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Tətbiqə telefonunuzda və ya SIM kartınızda saxlanan SMS mesajları oxumağa imkan verir. Bu bütün SMS mesajların, onların məzmunundan və konfidensiallığından asılı olmadan oxunması imkanı deməkdir."</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"mətn mesajlarınızı redaktə edir (SMS və ya MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Tətbiqə telefonunuzda və ya SİM kartınızda yerləşən SMS mesajlara yazma icazəsi verir. Zərərli tətbiqlər sizin mesajlarınızı silə bilər."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Tətbiqə telefonunuzda və ya SİM kartınızda yerləşən SMS mesajlara yazma icazəsi verir. Zərərli tətbiqlər sizin mesajlarınızı silə bilər."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"mətn mesajları qəbul etmək (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Tətbiqə WAP mesajlar göndərmək və ya qəbul etmək imkanı verir. Buna mesajları izləmək və Sizə xəbər vermədən silmək imkanları da daxildir."</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"işlənən tətbiqlər əldə etmək"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"Tətbiqə hazırda və az öncə işləyən tapşırıqlar haqqında ətraflı məlumat əldə etməyə imkan verir. Bu da cihazda hansı tətbiqlərin istifadə olunması haqqında məlumatların əldə edilməsinə imkan verir."</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"istifadəçilər arasında əlaqə qurur"</string>
+    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Tətbiqə bu cihazdakı digər istifadəçilərlə müxtəlif işləri görməyə icazə verir. Zərərli tətbiqlər bundan istifadəçilər arasındakı qorunmanı pozmaq üçün istifadə edə bilər."</string>
+    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"bütün istifadəçilər ilə əlaqə saxlamaq üçün tam hüquq"</string>
+    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"İstifadəçilər arasında bütün mümkün əlaqələrə imkan verir."</string>
+    <string name="permlab_manageUsers" msgid="1676150911672282428">"istifadəçiləri idarə edir"</string>
+    <string name="permdesc_manageUsers" msgid="8409306667645355638">"Tətbiqlərə cihazda olan istifadəçiləri, habelə sorğu göndərmə, yaratma və silmə izni verir."</string>
+    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"işlənən tətbiqlərin detallarını əldə etmək"</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Tətbiqə hazırda və az öncə işləyən tapşırıqlar haqqında ətraflı məlumat əldə etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək şəxsi məlumatları oğurlaya bilər."</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"işlənən tətbiqlərin sırasını dəyişmək"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Tətbiqə tapşırıqları ön plandan arxa plana keçirməyə imkan verir. Tətbiq bunu Sizin daxiletməniz olmadan da edə bilər."</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"işlək tətbiqləri dayandırır"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"Tətbiqə tapşırıqları silməyə və onların tətbiqlərini məhv etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək digər tətbiqlərin işlərini dayandıra bilər."</string>
+    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"fəaliyyət toplularını idarə edin"</string>
+    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"Tətbiqə digər tətbiqlərin fəaliyyəti daxilində fəaliyyət toplularını əlavə etmək, silmək və dəyişmək imkanı verir."</string>
+    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"hər hansı bir fəaliyyət başlat"</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"İcazə qorunması və ya eksport edilmiş statusdan asılı olmayaraq, tətbiqə hər hansı fəaliyyəti başlatmağa imkan verir."</string>
+    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"ekran uyğunluğunu yerləşdirir"</string>
+    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Tətbiqə digər tətbiqlərin ekran uyğunluğunu yoxlamaq imkanı verir. Zərərli tətbiqlər digər tətbiqlərin fəaliyyətini poza bilər."</string>
+    <string name="permlab_setDebugApp" msgid="3022107198686584052">"tətbiq sazlanmasını aktiv edir"</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Tətbiqə digər bir tətbiq üçün sazlamanı açmaq üçün imkan verir. Zərərli tətbiqlər bunu digər tətbiqləri yox etmək üçün istifadə edə bilər."</string>
+    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"sistem ekran nizamlarını dəyiş"</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Tətbiqə yerli parametrlər və ya şriftin ölçüsü kimi cari konfiqurasiyanı dəyişməyə imkan verir."</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"avtomobil rejimini aktivləşdirir"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Tətbiqə avtomobil rejimini aktivləşdirməyə imkan verir."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"digər tətbiqləri qapatmaq"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Tətbiqə başqa tətbiqlərin arxafon proseslərini dayandırmaq icazəsi verir. Bu digər tətbiqlərin dayanmasına səbəb ola bilər."</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"Digər tətbiqləri dayanmağa məcbur et"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Tətbiqə digər tətbiqləri məcburi şəkildə dayandırmağa imkan verir."</string>
+    <string name="permlab_forceBack" msgid="652935204072584616">"tətbiqi qapanmağa məcbur etmək"</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"Tətbiqə ön planda olan istənilən tətbiqi bağlayaraq geriyə dönməyə imkan verir. Normal tətbiqlər tərəfindən heç vaxt istifadə olunmamalıdır."</string>
+    <string name="permlab_dump" msgid="1681799862438954752">"sistemin daxili durumunu bərpa et"</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"Tətbiqə sistemin daxili statusunu bərpa etməyə imkan verir. Zərərli tətbiqlər lazım olmadığı halda müxtəlif şəxsi və güvənli məlumatları bərpa edə bilər."</string>
+    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ekran kontentini bərpa edir"</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Tətbiqə aktiv pəncərənin məzmununu əldə etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək pəncərə məzmununu ələ keçirib parollları oxuya bilər."</string>
+    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"giriş imkanını müvəqqəti açmaq"</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Tətbiqə cihaza girişi müvəqqəti olaraq aktivləşdirməyə imkan verir. Zərərli tətbiqlər istifadəçi razılığı olmadan girişi aktivləşdirə bilər."</string>
+    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"pəncərə infosunu bərpa edir"</string>
+    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tətbiqə pəncərə idarəçisindən gələn windows haqqında olan məlumatı bərpa etməyə imkan verir. Zərərli tətbiqlər daxili sistem istifadəsi üçün nəzərdə tutulan məlumatı bərpa edə bilər."</string>
+    <string name="permlab_filter_events" msgid="8675535648807427389">"tədbirləri filtr edir"</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"Tətbiqə daxiletmə filtrini qeydiyyat etdirməyə imkan verir, bu filtr bütün istifadəçi tədbirlərini göndərilməmişdən əvvəl filtrdən keçirir. Zərərli tətbiq istifadəçi müdaxiləsi olmadan İstifadəçi İnterfeysi sisteminə nəzarət edə bilər."</string>
+    <string name="permlab_magnify_display" msgid="5973626738170618775">"ekranı böyüdür"</string>
+    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Tətbiqə ekran kontentini böyütmək icazəsi verir. Zərərli tətbiqlər bundan istifadə edərək ekranda kontenti böyüdərək cihazın qeyri-stabilliyinə səbəb ola bilər."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"qismən söndürür"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"Aktivlik idarəçiliyini qapanmış hala gətirir. Tam qapanmanı həyata keçirmir."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"tətbiqdən tətbiqə keçidin qarşısını almaq"</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"İstifadəçinin başqa tətbiqə keçməsinin qarşısını alır."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"cari tətbiq informasiyası əldə etmək"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="8153651434145132505">"Sahibə ekran önündə cari tətbiq və xidmətlər haqqında şəxsi məlumat əldə etməyə imkan verir."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"işə salınan bütün tətbiqləri izləyir və idarə edir"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Tətbiqə sistemin fəaliyyətləri necə başlatdığını nəzarət və kontrol etməyə imkan verir. Zərərli tətbiqlər sistemi tamamilə kompromis edə bilər. Bu icazə yalnız inkişaf üçündür, heç vaxt normal istifadə üçün deyil."</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"qaldırılmış yayım paketini göndər"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Tətbiqə tətbiq paketinin silinməsi haqqında bildiriş translasiya etmə icazəsi verir. Zərərli tətbiqlər bundan digər işlək tətbiqləri dayandırmaq üçün istifadə edə bilər."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS tərəfindən qəbul edilən yayım göndər"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Tətbiqə mesaj gəlməsi haqqında bildirişi yayımlamaq imkanı verir. Zərərli tətbiqlər bundan gələn SMS mesajlarını saxtalaşdırmaq üçün istifadə edə bilər."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH tərəfindən qəbul edilən yayım göndər"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Tətbiqə WAP PUSH mesajın alındığı haqda bildiriş translasiya etməyə icazə verir. Zərərli tətbiqlər bundan istifadə edərək saxta MMS mesaj alışı və ya səssizcə istənilən veb səhifəni zərərverici variantlarla dəyişmək üçün istifadə edə bilər."</string>
+    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"çalışan proseslərin sayını məhdudlaşdırır"</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Tətbiqə işlədiləcək maksimum proses sayını idarə etmə izni verir. Normal tətbiqlər tərəfindən tələb olunmur."</string>
+    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"arxafon tətbiqlərini dayanmağa məcbur edir"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Tətbiqə aktivitilərin arxa fona getdiyi zaman bitməsini yoxlayır. Normal tətbiqlər tərəfindən tələn olunmur."</string>
+    <string name="permlab_batteryStats" msgid="2789610673514103364">"batareya statistikalarını oxumaq"</string>
+    <string name="permdesc_batteryStats" msgid="5897346582882915114">"Tətbiqə cari aşağı səviyyəli data sitifadəsini oxumaq imkanı verir. Tətbiqə hansı tətbiqi istifadə etdiyiniz haqqında ətraflı məlumat tapmağa imkan verə bilər."</string>
+    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"batareya statistikalarını dəyişmək"</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Tətbiqə yığılmış batareya statistikasını redaktə etmə icazəsi verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"tətbiq əməliyyat statistikalarını əldə etmək"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Toplanmış tətbiq əməliyyat statistikalarının bərpa edilməsinə imkan verir. Normal tətbiqlər tərəfindən istifadə üçün deyil."</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"tətbiq əməliyyat statistikasını dəyişmək"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Tətbiqə toplanmış tətbiq əməliyyat statistikasını dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"sistem yedəkləməsi və bərpasını idarə edir"</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"Tətbiqə sistemi rezerv etməyə və mexanizmi bərpa etməyə imkan verir. Normal tətbiqlər tərəfindən istifadə edilmək üçün nəzərdə tutulmayıb.."</string>
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"tam rezervi təsdiq etmək və ya əməliyyatı bərpa etmək"</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Tətbiqə İstifadəçi İnterfeysi tam rezerv təsdiqini işə salmağa imkan verir. Heç bir tətbiq tərəfindən istifadə olunmamalıdır."</string>
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"icazəsiz pəncərələri görüntüləyir"</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Tətbiqə daxili sistem interfeysi tərəfindən istifadə edilməsi üçün nəzərdə tutulmuş pəncərələri yaratmağa icazə verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"digər tətbiqlər üzərində çəkmək"</string>
+    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Tətbiqə digər tətbiqlərin və ya onların hissələrinin yuxarısında şəkil çəkməyə imkan verir. Onlar istənilən tətbiqin interfeysinin istifadəsinə müdaxilə edə və ya digər tətbiqlərdə axtardıqlarınızı dəyişə bilər."</string>
+    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"qlobal animasiya sürətini dəyişir"</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Tətbiqə istənilən vaxt qlobal animasiya sürətini (sürətli və ya yavaş animasiyalar) dəyişdirmək imkanı verir."</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"tətbiq nişanlarını idarə etmək"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Tətbiqlərə onların normal Z-orderinqi keçərək markerlərini yaratma və idarəetmə icazəsi verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_freezeScreen" msgid="4708181184441880175">"ekranı dondurur"</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Tətbiqə tam ekranlı yayım üçün ekranı müvəqqəti olaraq dondurma icazəsi verir."</string>
+    <string name="permlab_injectEvents" msgid="1378746584023586600">"düymələri və idarəetmə düymələrini basır"</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Tətbiqə özünün daxiletmə tədbirlərini digər tətbiqlərə çatdırmağa imkan verir. Zərərli tətbiqlər planşeti ələ keçirmək üçün bundan istifadə edə bilər."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Tətbiqə özünün daxiletmə tədbirlərini digər tətbiqlərə çatdırmağa imkan verir. Zərərli tətbiqlər telefonu ələ keçirmək üçün bundan istifadə edə bilər."</string>
+    <string name="permlab_readInputState" msgid="469428900041249234">"yazdıqlarınızı və etdiklərinizi izləyir"</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"Tətbiqə basdığınız düymələri izləmək imkanı verilir. Buna parolların və kredit kartı nömrələrinin yazılması da aiddir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"daxiletmə metoduna bağlanır"</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Sahibinə daxiletmə metodunun ən üst səviyyə interfeysinə bağlamaq imkanı verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"giriş xidmətinə bağlı qal"</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Sahibə giriş xidmətin ən üst səviyyə interfeysi bağlamağa imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindPrintService" msgid="8462815179572748761">"çap servisini qoşma"</string>
+    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Sahibinə bir çap xidmətinin ən üst səviyə araüzünü bağlamağa imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_accessAllPrintJobs" msgid="1120792468465711159">"bütün çap işlərinə giriş əldə et"</string>
+    <string name="permdesc_accessAllPrintJobs" msgid="2978185311041864762">"Sahibinə digər tətbiqlər tərəfindən yaradılan çap işlərinə giriş hüququ verir. Normal tətbiqlər üçün tələb olunmamalıdır."</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC xidmətlərinə qoşun"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"Sahibinə NFC kartlarını emulyasiya edən tətbiqləri bir-birinə qoşmağa icazə verin. Normal tətbiqlər üçün lazım deyil."</string>
+    <string name="permlab_bindTextService" msgid="7358378401915287938">"mətn servisini qoşma"</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"Sahibinə bir mətn xidmətinin ən üst səviyyə araüzünü bağlamağa imkan verir(məsələn, SpellCheckerService). Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN xidmətə əlaqələndirmək"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Sahibinə bir Vpn xidmətinin ən üst səviyyə araüzünü bağlamağa imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"divar kağızına bağlanır"</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Cihaz sahibinə yuxarı səviyyəli divar kağızı interfeysini cildləməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmamalıdır."</string>
+    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"widget servisini qoşma"</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Sahibinə vidcet servisin yüksək səviyyəli interfeysi ilə əlaqə saxlamaq icazəsi verir. Normal tətbiqlər tərəfindən heç vaxt istənilməməlidir."</string>
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"cihaz admini ilə ünsiyyət qurmaq"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Sahibinə bir cihaz idarəçisinə planlar göndərmək üçün imkan verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"cihaz admini əlavə edin və ya silin"</string>
+    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Sahibinə aktiv cihaz administratorlarını əlavə etməyə və ya silməyə icazə verir. Normal tətbiqlər üçün tələb olunmamalıdır."</string>
+    <string name="permlab_setOrientation" msgid="3365947717163866844">"ekran oriyentasiyasını dəyişir"</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"Tətbiqə istənilən zaman ekranın vəziyyətini dəyişmə icazəsi verir. Normal tətbiqlər tərəfindən tələb olunmur."</string>
+    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"kursor sürətini dəyişmək"</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"Tətbiqə mausun və ya trekpedin kursor sürətini istənilən zaman dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmamalıdır."</string>
+    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"klaviatura sxemini dəyişir"</string>
+    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"Tətbiqə klaviatura sxemini dəyişmək imkanı verir. Normal tətbiqlər tərəfindən tələb olunmur."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"tətbiqlərə Linux siqnalları göndərir"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Tətbiqə bütün davamlı proseslərə siqnal soğrusu göndərməyə imkan verir."</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"təbiqi həmişə çalışdır"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Tətbiqə öz komponentlərini yaddaşda saxlama icazəsi verir. Bu planşetin sürətini zəiflətməklə, digər tətbiqlər üçün mövcud olan yaddaşı limitləyə bilər."</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Tətbiqə öz komponentlərini yaddaşda saxlama icazəsi verir. Bu digər tətbiqlər üçün mövcud olan yaddaşı limitləyə bilər."</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"tətbiqləri sil"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"Tətbiqə Android paketləri silmə icazəsi verir. Zərərli tətbiqlər bundan digər vacib tətbiqləri silmək üçün istifadə edə bilər."</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"digər tətbiqlərin məlumatını silir"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Tətbiqə istifadəçi datasını təmizləməyə imkan verir."</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"digər tətbiqlərin keşini sil"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Tətbiqə keş faylları silmə icazəsi verir."</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"tətbiq saxlama yaddaşını ölçmək"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Tətbiqə özünün kodunu, məlumatını və keş ölçüsünü alma icazəsi verir."</string>
+    <string name="permlab_installPackages" msgid="2199128482820306924">"birbaşa tətbiqlər quraşdırmaq"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"Tətbiqə yeni və ya güncəllənmiş Android paketlərini quraşdırmağa imkan verir. Zərərli tətbiqlər bundan istifadə edərək güclü səlahiyyətlərə malik tətbiqləri endirə bilər."</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"bütün tətbiq keş datasını silir"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Tətbiqə planşetin yaddaşını boşaltmaq üçün digər tətbiqlərin keş fayllarını silmək imkanı verir. Bu da digər tətbiqlərin dataları yenidən əldə etmələri səbəbindən daha yavaş işləmələrinə səbəb ola bilər."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Tətbiqə digər tətbiqlərin keş qovluğunu təmizləyərək telefonun yaddaşını boşaltmaq icazəsi verir. Bu digər tətbiqlərin məlumatlarını yenidən əldə etməli olduqlarına görə daha yavaş başlamasına səbəb olur."</string>
+    <string name="permlab_movePackage" msgid="3289890271645921411">"tətbiq resurslarının yerini dəyişir"</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"Tətbiqə tətbiq resurslarını daxili mediadan xarici mediaya və əksinə daşımağa imkan verir."</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"məxfi loq datasını oxuyur"</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Tətbiqə sistemin müxtəlif jurnal fayllarını oxumağa imkan verir. Bu da Sizin planşetdə etdikləriniz haqqında məlumatlar, həmçinin şəxsi və konfidensial məlumatlar ola bilər."</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Tətbiqə sistemin müxtəlif jurnal fayllarını oxumağa imkan verir. Bu da Sizin planşetdə etdikləriniz haqqında məlumatlar, həmçinin şəxsi və konfidensial məlumatlar ola bilər."</string>
+    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"oxutmaq üçün istənilən media dekoderi istifadə edir"</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Tətbiqə playback\'i deşifrə etmək üçün hər hansı bir quraşdırılmış media deşifrələyicisini istifadə etmık imkanı verir."</string>
+    <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"etibarlı etimadnamələri idarə et"</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Tətbiqə etibarlı etimadnamələr kimi CA sertifikatlarını quraşdırmaq və sistemdən silməyə icazə verir."</string>
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"diaga məxsus olan mənbələri yaz/oxu"</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"Tətbiqə diag qrupa məsus olan resursları yazmaq və oxumaq icazəsi verir; məsələn  /dev qovluğundakı fayllar. Bu sistemin stabilliyinə və təhlükəsizliyinə təsir edə bilər. Bu ancaq istehsalçı və ya operator tərəfindən avadanlığa xas diaqnostika üçün olmalıdır."</string>
+    <string name="permlab_changeComponentState" msgid="6335576775711095931">"tətbiq komponentlərini aktivləşdirmə və ya deaktivləşdirmə"</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Tətbiqə digər tətbiq komponentinin aktiv olub-olmadığını dəyişmək imkanı verir. Zərərli tətbiqlər bundan əhəmiyyətli planşet imkanlarını deaktiv etmək üçün istifadə edə bilər. Bu icazə ilə ehtiyatlı olmaq lazımdır, çünki tətbiq komponentləri yararsız, ziddiyyətli, və ya qeyri-sabit statusa çevrilə bilər."</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Tətbiqə digər tətbiq komponentinin aktiv olub-olmadığını dəyişmək imkanı verir. Zərərli tətbiqlər bundan əhəmiyyətli telefon imkanlarını deaktiv etmək üçün istifadə edə bilər. Bu icazə ilə ehtiyatlı olmaq lazımdır, çünki tətbiq komponentləri yararsız, ziddiyyətli, və ya qeyri-sabit statusa çevrilə bilər."</string>
+    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"icazələr vermək və ya ləğv etmək"</string>
+    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Tətbiqə bu və ya digər tətbiqlərə xüsusi iznlər verməyə icazə verir. Zərərli tətbiqlər  bundan izin vermədiyiniz özəllikləri özlərinə vermək üçün istifadə edə bilər."</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"tərcih edilən tətbiqlər qur"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Tətbiqə tərcih etdiyiniz tətbiqləri dəyişmək imkanı verir. Zərərli tətbiqlər şəxsi məlumatlarınızı toplamaq üçün cari tətbiqlərinizi aldadaraq işləyən tətbiqləri xəbərsiz dəyişə bilər."</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"sistem ayarlarında dəyişiklik etmək"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"Tətbiqə sistem ayarları datasını redaktə etmə icazəsi verir. Zərərli tətbiqlər sistem ayarlarını korlaya bilər."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"təhlükəsiz sistem nizamlarını dəyişir"</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Tətbiqə sistemin təhlükəsiz ayarlar datasını dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə üçün deyil."</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"Google xidmətlər xəritəsini dəyişdir"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"Tətbiqə Google xidmətlər xəritəsini dəyişdirmək imkanı verir. Normal tətbiqlərin istifadəsi üçün deyil."</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"başlanğıcda işləyir"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Tətbiqə sistem yükləməni bitirdiyi zaman dərhal özünü başlatmağa imkan verir. Bu planşeti başlatmağın uzun çəkməsinə səbəb ola bilər və tətbiqə həmişə çalışdıraraq bütün planşeti yavaşlatmağa imkan verir."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Tətbiqə sistem bootinqi bitirdikdən dərhal sonra özünü başlatmaq icazəsi verir. Bu telefonun açılmasını ləngidə və daima işlək qalaraq telefonun sürətini aşağı sala bilər."</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"daimi siqnal göndərmək"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Tətbiqə yayım bitdikdən sonra da qalan çətin yayımlar göndərməyə imkan verir. Hədsiz istifadə çox yaddaş istifadəsinə səbəb olmaqla planşeti yavaş və qeyri-stabil edə bilər."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Tətbiqə yayım bitdikdən sonra da qalan çətin yayımlar göndərməyə imkan verir. Hədsiz istifadə çox yaddaş istifadəsinə səbəb olmaqla telefonu yavaş və qeyri-stabil edə bilər."</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"kontakrlatınızı oxumaq"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Tətbiqə planşetinizdə yerləşən kontaktları oxumaq icazəsi verir, tez-tez zəng elədiyiniz, emailləşdiyiniz və ya əlaqə saxladığınız xüsusi individuallar daxil olmaqla. Bu icazə tətbiqlərə kontakt məlumatlarınızı saxlamağa və zərərli tətbiqlərə kontakt məlumatlarını sizin bilginiz olmada paylaşma imkanı yaradır."</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Tətbiqə tez-tez zəng elədiyiniz, e-məktub göndərdiyiniz və ya əlaqə saxladığınız xüsusi individuallar daxil olmaqla telefonunuzda yerləşən kontaktları oxumaq icazəsi verir. Bu icazə tətbiqlərə kontakt məlumatlarınızı saxlamağa və zərərli tətbiqlərə kontakt məlumatlarını sizin xəbəriniz olmada paylaşma imkanı yaradır."</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"kontaktlarınızı dəyişdirir"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Tətbiqə planşetinizdəki zəng etmək tezliyiniz, elektron poçtlarınız, ünsiyyətləriniz haqqında məlumatları dəyişməyə imkan verir. Bu icazə kontakt məlumatlarının silinməsinə də imkan verir."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Tətbiqə Sizin zəng etmək tezliyiniz, elektron poçtlarınız, ünsiyyətləriniz haqqında məlumatları dəyişməyə imkan verir. Buna kontaktların silinməsi imkanı də daxildir."</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"zəng qeydiyyatını oxu"</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Tətbiqə gələn və gedən zənglər haqqında olan data daxil olmaqla bərabər planşetinizin zəng qeydiyyatını oxumağa imkan verir. Bu icazə tətbiqlərə zəng qeydiyyatınızı saxlamağa imkan verir və zərərli tətbiqlər zəng qeydiyyat datasını sizdən xəbərsiz paylaşa bilər."</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Tətbiqə telefon jurnalınızı oxumağa imkan verir, buna gələn və gedən zənglər haqqında məlumatlar da daxildir. Bu icazə tətbiqə zəng jurnalı datasını saxlamağa imkan verir ki, Zərərli tətbiqlər bundan istifadə edərək Sizdən xəbərsiz bütün məlumatlarnızı paylaşa bilər."</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"zəng loqu yazır"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Tətbiqə planşetinizdəki zəng jurnalını, həmçinin gedən və gələn zənglərin siyahısını dəyişməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək, zəng jurnalınıza dəyişiklik edə bilər."</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Tətbiqə sizin daxil olan və gedən zənglər daxil olmaqla telefon zəngi loqlarınızı redaktə etmək icazəsi verir. Zərərli tətbiqlər bundan telefon loqlarınızı silmək və ya redaktə etmək üçün istifadə edə bilər."</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"öz kontakt kartınızı oxuyun"</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Tətbiqə cihazınızda yerləşən adınız və kontakt məlumatlarınız kimi şəxsi profil məlumatlarını oxuma icazəsi verir. Bu o deməkdir ki, tətbiq sizi tanıya və sizin profil məlumatlarınızı başqalarına göndərə bilər."</string>
+    <string name="permlab_writeProfile" msgid="907793628777397643">"sizin kontakt kartınızda dəyişiklik etmək"</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Tətbiqə cihazınızda yerləşən adınız və kontakt məlumatlarınız kimi şəxsi profil məlumatlarını dəyişmək və ya əlavə etmək icazəsi verir. Bu o deməkdir ki, tətbiq sizi tanıya və sizin profil məlumatlarınızı başqalarına göndərə bilər."</string>
+    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"sosial lentinizi oxuyur"</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Tətbiqə Sizin və dostlarınızın sosial güncəllərini əldə etmək və sinxronizə etmək icazəsi verir. Məlumat paylaşarkən diqqətli olun - konfidensiallıqdan asılı olmayaraq bu, Siz və dostlarınız arasında sosial şəbəkələrdəki danışığı oxumaq imkanı verir. Qeyd: bu icazə bütün sosial şəbəkələrdə icra edilə bilməz."</string>
+    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"sosial axınınıza yazır"</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Tətbiqə dostlarınızdan sosial yenilənmələri göstərmə icazəsi verir. Məlumat paylaşarkən diqqətli olun - bu dostlarınızdan gələn mesajı emal etməyə izn verir. Qeyd: bu icazə bütün sosial şəbəkələrə şamil olunmaya bilər."</string>
+    <string name="permlab_readCalendar" msgid="5972727560257612398">"təqvim tədbirlərini və konfidensial məlumatları oxuyur"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Tətbiqə dostlarınızın və əməkdaşlarınızın planşetinizdə yerləşən kalendar tədbirlərini oxumağa icazə verir. Bu tətbiqə konfidensiallıq və ya həssaslıqdan asılı olmayaraq sizin kalendar məlumatlarınızı paylaşmaq və ya saxlamağa imkan yaradır."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Tətbiqə dost və əməkdaşlara məxsus olanlar daxil olmaqla planşetdə yerləşən bütün kalendar tətbiqlərini oxumaq icazəsi verir. Bu tətbiqə konfidensiallıq və ya həssaslıqdan asılı olmayaraq, Sizin kalendar məlumatlarınızı paylaşmaq və ya saxlamaq imkanı yaradır."</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"cihaz sahibinin icazəsi olmadan təqvim tədbirləri əlavə etmək və ya dəyişmək, bunun haqqında bildirişlər göndərmək"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Tətbiqə planşetinizdəki tədbirləri dəyişməyə, tədbir əlavə etməyə və ya silməyə imkan verir. Buna Sizin dostlarınızla və həmkarlarınızla birlikdə hazırladığınız tədbirlər də daxildir. Bu, tədbirə Sizin adınızdan və Sizdən xəbərsiz, təqvim sahibi kimi mesaj göndərmək imkanını verir."</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"Dostlarınız və həmkarlarınıza məxsus olanlar da daxil olmaqla, tətbiqə telefonunuzdakı tədbirləri dəyişməyə, tədbir əlavə etməyə və ya silməyə imkan verir. Bu, tədbirə Sizin adınızdan və Sizdən xəbərsiz, təqvim sahibi kimi mesaj göndərmək imkanı verir."</string>
+    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"test üçün saxta məkan mənbələri"</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Test üçün saxta məkan mənbələri yaradın və ya yeni məkan provayderi quraşdırın. Bu tətbiqlərə GPS və məkan provayderləri kimi məkan mənbələrindən alınan məkan və/ya statusları yenidən yazmağa icazə verir."</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"əlavə məkan provayderi əmrlərinə çıxış"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Tətbiqə əlavə məkan provayderi əmrlərinə daxil olmaq imkanı verir. Bu tətbiqə GPS əməliyyatına və ya digər məkan mənbələrinə mane olmaq imkanı verə bilər."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"Məkan provayderini quraşdırmaq icazəsi"</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Yeni yerləşmə təchizatçısını test etmək və ya quraşdırmaq üçün mock yerləşmə mənbələri yarat. Bu tətbiqə yerləşmənin və/ya digər yerləşmə mənbələrindən GPS və ya yerləşmə təchizatçıları qayıtmış statusların ləğv etməsinə imkan verir."</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"dəqiq yeri (GPS və şəbəkə-əsaslı)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Qlobal Pozisiya Sistemini və ya şəbəkə qüllələri və Wi-Fi kimi şəbəkə məkanını istifadə edərək tətbiqə Sizin dəqiq yerinizi təyin etməyə imkan verir. Bu məkan xidmətləri aktivləşdirilməlidirlər ki, Siz tətbiqi istifadə edən zaman tətbiq onları istifadə edə bilsin. Tətbiqlər Sizin harada olmağınızı bunun vasitəsilə təyin edəcək, eyni zamanda, bu xidmət əlavə batareya enerjisi apara bilər."</string>
+    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"təxmini məkan (şəbəkə əsaslı)"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Tətbiqə təxmini yerinizi almaq üçün imkan verir. Bu yer, yerləşmə xidmətləri tərəfindən mobil qüllələr və Wi-Fi kimi şəbəkə yerləşmə mənbələrdən istifadə etməklə əldə edilir. Bu yerləşmə xidmətləri tətbiqin onlardan istifadəsi üçün açıq və cihazınızın onları istifadəsi üçün mövcud olmalıdır. Tətbiqlər bundan sizin təxminən harada olduğunuzu müəyyənləşdirmək üçün istifadə edə bilər."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger\'ə daxil olmaq"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Tətbiqə aşağı səviyyəli SurfaceFnger özəlliklərini istifadə etməyə icazə verir."</string>
+    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"freym buferi oxuyur"</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Tətbiqə freym buferinin kontentini oxumaq icazəsi verir."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger keçidi"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Tətbiqə aşağı səviyyəli InputFlinger funksiyalarını istifadə etməyə icazə verir."</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi görüntülərini quraşdır"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tətbiqə Wifi görüntülərini quraşdırmağa və onlara qoşulmağa imkan verir."</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"WiFi görüntülərini dəyişir"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Tətbiqə Wifi displeylərinin aşağı səviyyəli funksiyalarını idarə etmək imkanı verir."</string>
+    <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"audio çıxışı alın"</string>
+    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"Tətbiqə audio çıxışı almaq və yenidən yönləndirmək imkanı verir."</string>
+    <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"video çıxışı alın"</string>
+    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"Tətbiqə video çıxışı almaq və yenidən yönləndirmək imkanı verir."</string>
+    <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"təhlükəsiz video çıxışı alın"</string>
+    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"Tətbiqə güvənli video çıxışı almaq və yenidən yönləndirmək imkanı verir."</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"audio ayarlarınızı dəyişir"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tətbiqə səs və hansı spikerin çıxış üçün istifadə olunduğu kimi qlobal səs ayarlarını dəyişdirməyə imkan verir."</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"səs yaz"</string>
+    <string name="permdesc_recordAudio" msgid="4906839301087980680">"Tətbiqə mikrofonla audio yazmaq icazəsi verir. İcazə tətbiqə sizin təsdiqiniz olmadan istənilən zaman səs yazma izni verir."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"şəkil və video çəkmək"</string>
+    <string name="permdesc_camera" msgid="8497216524735535009">"Tətbiqə kamera ilə şəkil və video çəkməyə imkan yaradır. Bu icazə tətbiqə sizin təsdiqiniz olmadan kameradan istifadə icazəsi verir."</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"kamera istifadə edildikdə LED göstərici ötürülməsini deaktiv edir"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Öncədən quraşdırılmış sistem tətbiqinə kamera tərəfindən istifadə edilən LED indikatorunu söndürmək icazəsi verir."</string>
+    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"planşeti daimi olaraq aradan qaldır"</string>
+    <string name="permlab_brick" product="default" msgid="8337817093326370537">"telefonu həmişəlik deaktiv etmək"</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Tətbiqə planşeti birdəfəlik deaktiv etməyə imkan verir. Bu da çox təhlükəlidir."</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Tətbiqə bütün telefonu birdəfəlik deaktivləşdirməyə imkan verir. Bu çox təhlükəlidir."</string>
+    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"planşeti yenidən yüklənməyə məcbur edir"</string>
+    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"telefonu yenidən yüklənməyə məcbur edir"</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Tətbiqə planşeti yenidən yükləməyə məcbur etmək imkanı verir."</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Tətbiqə telefonu yenidən yükləməyə məcbur etmək üçün imkan verir."</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"USB yaddaş fayl sisteminə daxil olmaq"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"SD Kart fayl sisteminə daxil olmaq"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Tətbiqə silinəbilən yaddaşları və ya fayl sistemini quraşdırma və ayırma icazəsi verir."</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB yaddaşı silir"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD kartı silir"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Tətbiqə çıxarıla bilən yaddaşı format etməyə imkan verir."</string>
+    <string name="permlab_asec_access" msgid="3411338632002193846">"daxili yaddaşınız haqqında məlumat əldə etmək"</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"Tətbiqə daxili yaddaş haqqında məlumat almağa imkan verir."</string>
+    <string name="permlab_asec_create" msgid="6414757234789336327">"daxili yaddaş yaratmaq"</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"Tətbiqə daxili yaddaş yaratmaq üçün imkan verir."</string>
+    <string name="permlab_asec_destroy" msgid="526928328301618022">"daxili yaddaşı məhv etmə"</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Tətbiqə daxili yaddaşı məhv etmə icazəsi verir."</string>
+    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"daxili yaddaşı montaj və ya demontaj etmək"</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Tətbiqə daxili yaddaşı quraşdırma/ayırma icazəsi verir."</string>
+    <string name="permlab_asec_rename" msgid="7496633954080472417">"daxili yaddaşın adını dəyiş"</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"Tətbiqə daxili yaddaşın adını dəyişmək imkanı verir."</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"vibrasiyaya nəzarət edir"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"Tətbiqə vibratoru idarə etmə icazəsi verir."</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"Flash işığını idarə edir"</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"Tətbiqə siqnal işığı na nəzarət etməyə imkan verir."</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"USB cihazlar üçün tərcihləri və icazələri idarə etmək"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"Tətbiqə USB cihazlar üçün olan tərcihləri və icazələri idarə etməyə imkan verir."</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP protokol həyata keçirmək"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"Kernel MTP drayverə girişə imkan verir ki, MTP USB protokolunu həyata keçirsin."</string>
+    <string name="permlab_hardware_test" msgid="4148290860400659146">"avadanlığı sınaq edir"</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"Tətbiqə avadanlığı yoxlamaq üçün müxtəlif periferiyaları kontrol etməyə imkan verir."</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"telefon nömrələrinə birbaşa zəng edir"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"Tətbiqə Sizin müdaxiləniz olmadan telefon zəngləri etməyə imkan verir. Zərərli tətbiqlər Sizdən xəbərsiz şəkildə müxtəlif zənglər edərək, Sizə maddi ziyan vura bilər. Qeyd: Bu, tətbiqlərə təcili nömrələrə zəng etməyə icazə vermir."</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"istənilən nömrəyə birbaşa zəng edir"</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Tətbiqə Sizin müdaxiləniz olmadan, təcili zənglər də daxil olmaqla, istənilən telefon zəngini etməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək, təcili nömrələrə qanunsuz zəng vurmaqla Sizin üçün hüquqi problemlər yarada bilər."</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"CDMA planşet ayarlarına birbaşa başlamaq"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"CDMA telefon quraşdırmalarına birbaşa başlamaq"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Tətbiqə CDMA hazırlığını başlatma icazəsi verir. Zərərli tətbiqlər ehtiyac olmadıqda CDMA hazırlığını başlada bilərlər."</string>
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"məkan güncəlləmə bildirişlərini idarə edir"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Tətbiqə radiodan gələn məkan güncəllənmələrini aktiv və ya deaktiv etməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_checkinProperties" msgid="7855259461268734914">"qeydiyyat xüsusiyyətlərini əldə edir"</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Tətbiqə giriş qeydi servisi tərəfindən yüklənmiş mülkiyyətə girişi oxumaq/yazmaq imkanl verir. Normal tətbiqlər üçün nəzərdə tutulmayıb."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"vidcetlər seç"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"Tətbiqə sistemə hansı vidcetin hansı tətbiq tərəfindən istifadə edilə bilməsini deməyə icazə verir. Bu icazəli tətbiqlər şəxsi məlumatlara və digər tətbiqlərə çıxış verə bilər. Normal tətbiqlər tərəfindən istifadə üçün deyil."</string>
+    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"telefon statusunu dəyişmək"</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Tətbiqə cihazın telefon funksiyalarını idarə etmək imkanı verir. Belə icazəli tətbiq Sizi xəbərdar etmədən şəbəkələri qoşa, telefon radiosunu yandırıb-söndürə bilər."</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefon statusunu və identifikasiyanı oxuyur"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tətbiqə cihazın telefon funksiyalarına giriş icazəsi verir. Belə icazəli tətbiq bu telefonun nömrəsini və cihaz İD\'ni, zəngin aktiv olub-olmadığını və zəng edilən nömrəni müəyyən edə bilər."</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"planşetin yuxu rejiminin qarşısını almaq"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"telefonun yuxu rejiminə keçməsini əngəllə"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Tətbiqə planşetin yuxu rejimini qadağan etməyə imkan verir."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Tətbiqə telefonun yuxu rejimini qadağan etmək imkanı verir."</string>
+    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"planşeti yandırma və ya söndürmə"</string>
+    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"telefonu yandırmaq və ya söndürmək"</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Tətbiqə planşeti yandırmağa və söndürməyə imkan verir."</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Tətbiqə telefonu yandırıb söndürmə icazəsi verir."</string>
+    <string name="permlab_factoryTest" msgid="3715225492696416187">"zavod test rejimində işləyir"</string>
+    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Planşet avadanlığına tam girişə imkan verməklə aşağı səviyyəli istehsalçı sınağı kimi işləyir. Yalnız planşet istehsalçı sınaq rejimində olduqda işləyir."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Bir aşağı səviyyəli istehsalçı testi kimi çalışdırın, telefon hardware üçün tam giriş imkanı verir. Ancaq telefon, istehsalçı test rejimində çalışdığı zaman aktivdir."</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"divar kağızı yerləşdirir"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Tətbiqə sistemə divar kağızı yerləşdirmək icazəsi verir."</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"divar kağızı ölçüsünü verir"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Tətbiqə sistem divar kağızı ölçüsü göstərişlərini müəyyən etməyə imkan verir."</string>
+    <string name="permlab_masterClear" msgid="2315750423139697397">"fabrik defoltuna sıfırlamaq"</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"Tətbiqə bütün məlumatları, nizamları və quraşdırılmış tətbiqləri silərək sistemi fabrik nizamlarına qaytarmaq imkanı verir."</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"vaxtı təyin edir"</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Tətbiqə planşetin saat vaxtını dəyişməyə imkan verir."</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Tətbiqə telefonun saat vaxtını dəyişməyə imkan verir."</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"vaxt zonasını quraşdırır"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Tətbiqə planşetin vaxt zonasını dəyişmə icazəsi verir."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Tətbiqə telefon saat zolağını dəyişmək üçün imkan verir."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService kimi davranır"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Tətbiqə AccountAuthenticators\'ə zəng etməyə imkan verir."</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"cihazda hesabları tapır"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Tətbiqə planşet tərəfindən bilinən hesabların siyahısını alma icazəsi verir. Bu quraşdırdığınız tətbiqlər tərəfindən yaradılmış istənilən hesab ola bilər."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Tətbiqə telefonda olan hesabların siyahısını əldə etməyə imkan verir. Buna quraşdırdığınız istənilən tətbiq tərəfindən yaradılan hesablar da aiddir."</string>
+    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"hesablar yaradır və parollar təyin edir"</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Tətbiqə AccountManager\'in hesab yaratmaq və parol almaq və açmaq daxil olmaqla bərabər, hesab təsdiqləyici imkanlarını istifadə etməyə icazə verir."</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"hesabları əlavə edir və ya silir"</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Tətbiqə hesabların əlavə olunması və ya silinməsi, həmçinin onların parollarının silinməsi kimi əməliyyatları icra etməyə imkan verir."</string>
+    <string name="permlab_useCredentials" msgid="235481396163877642">"cihazda hesablar istifadə etmək"</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"Tətbiqə autentifikasiya tokenləri sorğularını göndərməyə icazə verir."</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"şəbəkə bağlantılarına baxmaq"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Tətbiqə mövcud olan və qoşulan şəbəkələr kimi qoşulmalar haqqında məlumatı görməyə icazə verir."</string>
+    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"tam şəbəkə girişi"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Tətbiqə şəbəkə soketlərini yaratmağa və fərdi şəbəkə protokollarını istifadə etməyə imkan verir. Brauzer və digər tətbiqlər datanın internetə ötürülməsini təmin edən vəsaitlər verir, ona görə də datanın internetə gönrədilməsi üçün bu icazə tələb olunmur."</string>
+    <string name="permlab_writeApnSettings" msgid="505660159675751896">"şəbəkə nizamlarını və trafiki dəyişdirir/qarşısını alır"</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Tətbiqə şəbəkə trafikinin qarşısını almaq üçün şəbəkə nizamlarını dəyişmə icazəsi verir, məsələn proksini və ya istənilən APN-in portunu. Zərərli tətbiqlər şəbəkə paketlərini sizin bilginiz olmadan monitorinq edə, yönləndirə və ya redaktə edə bilər."</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"şəbəkə bağlantısını dəyişir"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Tətbiqə şəbəkə vəziyyətini dəyişməyə icazə verir."</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"Sərhədli bağlantını dəyişir"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Tətbiqə birləşilmiş şəbəkə bağlantısının statusunu dəyişməyə imkan verir."</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"arxafon data istifadəsi ayarını dəyişir"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Tətbiqə fon rejimi nizamlarını dəyişməyə icazə verir."</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"Wi-Fi bağlantılarına baxmaq"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Tətbiqə Wi-Fi şəbəkələri haqqında məlumatı görməyə icazə verir, məsələn, Wi-Fi mövcudluğu və qoşulmuş Wi-Fi cihazlarının adları."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"Wi-Fi şəbəkəsinə qoşulmaq və ya ayrılmaq"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Tətbiqə Wi-Fi çıxış nöqtəsinə qoşulmaq və ondan ayrılmaq və cihazın Wi-Fi şəbəkə nizamlarını dəyişməyə icazə verir."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi Multicast qəbuluna icazə ver"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Tətbiqə Wi-Fi şəbəkədə sizin planşetdən başqa digər multikast adreslərə yönləndirilmiş paketləri almaq icazəsi verir. Bu qeyri-çoxadresli rejimdən fəqli olaraq daha çox enerji işlədir."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Tətbiqə qrup ünvanlar istifadə etməklə, Wi-Fi şəbəkəsində olan bütün cihazlara göndərilmiş paketləri qəbul etməyə imkan verir. Buna daha çox enerji sərf olunur."</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth ayarlarını əldə edir"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Tətbiqə yerli Bluetooth planşetinin konfiqurasiyasını görməyə və məsafədən cihazları tapmağa və cütləməyə imkan verir."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Tətbiqə lokal Bluetooth telefonunu konfiqurə etməyə və uzaq cihazları kəşf etmək və onlara qoşulmaq icazəsi verir."</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX\'a qoşul və bağlantını kəs"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Tətbiqə WiMAX mövcudluğu və qoşulmuş WiMAX şəbəkələrini təyin etməyə icazə verir."</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX vəziyyətini dəyişir"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Tətbiqə planşeti WiMAX şəbəkələrinə qoşmaq və onlardan ayırmaq icazəsi verir."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Tətbiqə telefonu WiMAX şəbəkəsinə qoşmağa və ya WiMAX şəbəkəsindən ayırmağa imkan verir."</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"Bluetooth cihazları ilə cütləndirmək"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Tətbiqə yerli Bluetooth planşetinin konfiqurasiyasını görməyə və cütlənmiş cihazlarla bağlantılar etməyə və qəbul etməyə imkan verir."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Tətbiqə Bluetooth və ya telefon konfiqurasiyalarını görməyə və qoşulmuş cihazlarla əlaqə qurmağa və qəbul etməyə icazə verir."</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"Near Field Communication\'ı kontrol et"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"Tətbiqə Yaxın Məsafə Kommunikasiyası (NFC) teqləri, kartları və oxuyucuları ilə əlaqə qurmağa icazə verir."</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"Ekran kilidini deaktiv edir"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Tətbiqə kilid açarını və təhlükəsizlik parolunu deaktiv etməyə imkan verir. Qanuni misal budur ki, telefon zəng qəbul edən zaman kilidi açır və zəng qurtarandan sonra kilidi bağlayır."</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"sinx ayarlarını oxu"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Tətbiqə hesablar üçün sinxronizasiya nizamlarını oxuma icazəsi verir. Məsələn, bu Şəxslər tətbiqinin sinxronizə olunub-olunmadığını təyin edə bilər."</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"sinxronizasiyaya davam edir və onu söndürür"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Tətbiqə hesab üçün sinxronizasiya nizamlarını dəyişməyə icazə verir. Məsələn, bu istifadəçi hesablı Şəxslər tətbiqinin sinxronizasiyasını başlamaq üçün istifadə edilə bilər."</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"sinxronizasiya statistikasını oxumaq"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Tətbiqə sync tədbirlərinin tarixçəsi və nə qədər datanın sinx olduğu da daxil olmaqla bərabər, hər hansı bir hesab üçün olan sinx statlarını oxumağa imkan verir."</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"abunə olunmuş xəbərləri oxuyur"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Tətbiqə hazırda sinxron lentlər haqqında ətraflı məlumat almaq üçün imkan verir."</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"abunə olunmuş xəbərləri yazır"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Tətbiqə cari sinxronlaşmış lentlərinizə dəyişiklik etmək imkanı verir. Zərərli tətbiqlər sixronlaşmış lentlərinizi dəyişə bilər."</string>
+    <string name="permlab_readDictionary" msgid="4107101525746035718">"lüğətə əlavə etdiyiniz şərtləri oxumaq"</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"Tətbiqə istifadəçinin lüğətdə saxladığı bütün sözləri, adları və frazaları oxumaq icazəsi verir."</string>
+    <string name="permlab_writeDictionary" msgid="2183110402314441106">"istifadəçi lüğətinə sözlər əlavə etmək"</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Tətbiqə istifadəçi lüğətinə yeni sözlər yazmağa imkan verir."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"qorunmuş yaddaşa daxil olmağa cəhd etmək"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"qorunmuş yaddaşa daxil olmağa cəhd etmək"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"Tətbiqə gələcək cihazlarda əlçatımlı olacaq USB yaddaş üçün icazə testi etməyə imkan verir."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"Tətbiqə gələcək cihazlarda mövcud olacaq SD kart üçün icazəni test etmək üçün imkan verir."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"USB yaddaşınızın məzmununu dəyişmək və ya silmək"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"SD kart kontentlərini dəyişir və ya silir"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Tətbiqə USB yaddaşa yazmağa imkan verir."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Tətbiqə SD karta yazma icazəsi verir."</string>
+    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"daxili media yaddaşı kontentini dəyişir/silir"</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Tətbiqə daxili media yaddaşdakı kontenti redaktə etmək icazəsi verir."</string>
+    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"sənəd yaddaşını nizamlayır"</string>
+    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"Tətbiqə sənəd yaddaşını idarə etməyə imkan verir."</string>
+    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"bütün istifadəçilərin xarici yaddaşına daxil ol"</string>
+    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Tətbiqə bütün istifadəçilər üçün olan xarici yaddaşa giriş imkanı verir."</string>
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"keş fayl sisteminə girmək"</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Tətbiqə keş fayl sistemini oxumağa və yazmağa icazə verir."</string>
+    <string name="permlab_use_sip" msgid="5986952362795870502">"İnternet zəngləri etmək və ya qəbul etmək"</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"Tətbiqə internet zənglərinin göndərilməsi və qəbul edilməsi üçün SIP servisindən istifadə icazəsi verir."</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"tarixi şəbəkə istifadəsini oxu"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Tətbiqə xüsusi şəbəkələr və tətbiqlər üçün tarixi şəbəkə istifadəsini oxumağa icazə verir."</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"şəbəkə siyasətini idarə etmək"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Tətbiqə şəbəkə qanunlarını və tətbiqin xüsusi qaydalarını idarə etmək imkanı verir."</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"şəbəkə istifadə hesabını dəyişmək"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Tətbiqə şəbəkə istifadəsinin tətbiqlərə qarşı nizamlarını redaktə etməyə icazə verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"soket işarələrini dəyişin"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"Tətbiqə araşdırma üçün soket işarələrini dəyişmək imkanı verir"</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"bildirişlərə daxil ol"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"Tətbiqə bildirişləri əldə etməyə, sınamağa və təmizləməyə imkan verir, buna digər tətbiqlər tərəfindən verilmiş bildirişlər də daxildir."</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bildiriş dinləmə xidmətinə bağlanır"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Sahibinə yüksək səviyyəli bildiriş dinləmə servisi ilə əlaqə saxlamağa icazə verir. Normal tətbiqlər tərəfindən heç vaxt istənilməməlidir."</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"operator xidmətli konfiurasiya tətbiqinə müraciət edin"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Sahibinə operator xidmətli tətbiq konfiqurasiyasına  müraciət imkanı verir. Normal tətbiqlər üçün tələb olunmamalıdır."</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"şəbəkə şəraiti haqqında müşahidələr üçün qulaq asmaq"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Tətbiqə şəbəkə şəraiti üzrə müşahidələr üçün qulaq asmaq imkanı verir. Normal tətbiqlər üçün heç vaxt lazım olmamalıdır."</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"Parol qaydalarını təyin edin"</string>
+    <string name="policydesc_limitPassword" msgid="3252114203919510394">"Ekran kilidini açan şifrələrin uzunluğunu və onlardakı icazə verilən işarələrə nəzarət edir."</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"Ekran kilidi cəhdlərini monitorinq et"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Ekan kilidini açarkən daxil edilmiş yanlış parollara baxın və əgər həddindən çox yanlış parollar daxil edilibsə, planşeti kilidləyin və ya bütün planşet datasını silin."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Ekan kilidini açarkən daxil edilmiş yanlış parollara baxın və əgər həddindən çox yanlış parollar daxil edilibsə, telefonu kilidləyin və ya bütün telefon datasını silin."</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"Ekran kilid parolunu dəyişin"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"Ekran kilidini açan şifrəni dəyişdirin."</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Ekranı kilidləyin"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"Ekranın nə vaxt və necə kilidlənməsinə nəzarət edir."</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Bütün məlumatları silin"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Planşetin datasını xəbərdarlıq olmadan, zavod data sıfırlaması ilə silin."</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Telefonun datasını xəbərdarlıq olmadan, zavod data sıfırlaması ilə silin"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Cihazın qlobal proksisini ayarlayın"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Siyasət aktiv olarkən cihazın qlobal proksisini istifadə üçün qurun. Yalnız ilk cihaz admini effektiv qlobal proksini təyin edir."</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"Ekran kilidi şifrəsinə son zaman seç"</string>
+    <string name="policydesc_expirePassword" msgid="1729725226314691591">"Ekran kilidi parolunun nə qədər tez-tez dəyişməsini kontrol edin."</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Yaddaş şifrələnməsini ayarlayın"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Tətbiq məlumatlarının şifrələnməsini tələb edir."</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"Kameraları dekativ edin"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Bütün cihaz kameralarının istifadəsini əngəllə."</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Klaviatura kilidində funksiyaları deaktiv edin"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Klaviatura kilidində bəzi funksiyaların qarşısını alın."</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"Əsas səhifə"</item>
+    <item msgid="869923650527136615">"Mobil"</item>
+    <item msgid="7897544654242874543">"İş"</item>
+    <item msgid="1103601433382158155">"İş Faksı"</item>
+    <item msgid="1735177144948329370">"Ev Faksı"</item>
+    <item msgid="603878674477207394">"Peycer"</item>
+    <item msgid="1650824275177931637">"Digər"</item>
+    <item msgid="9192514806975898961">"Şəxsi"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"Ana səhifə"</item>
+    <item msgid="7084237356602625604">"İş"</item>
+    <item msgid="1112044410659011023">"Digər"</item>
+    <item msgid="2374913952870110618">"Fərdi"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"Əsas səhifə"</item>
+    <item msgid="5629153956045109251">"İş"</item>
+    <item msgid="4966604264500343469">"Digər"</item>
+    <item msgid="4932682847595299369">"Düzənləyin"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"Əsas səhifə"</item>
+    <item msgid="1359644565647383708">"İş"</item>
+    <item msgid="7868549401053615677">"Digər"</item>
+    <item msgid="3145118944639869809">"Fərdi"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"İş"</item>
+    <item msgid="4378074129049520373">"Digər"</item>
+    <item msgid="3455047468583965104">"Fərdi"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Söhbət"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"Şəxsi"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"Ev"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobil"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"İş"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"İş Faksı"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Ev Faksı"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"Peycer"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"Digər"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"Geriyə zəng"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"Avtomobil"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Şirkət"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"Əsas"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Digər faks"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"Teleks"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Mobil iş telefonu"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"İş Peyceri"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Köməkçi"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"Fərdi"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"Doğum günü"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"İldönümü"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"Digər"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"Fərdi"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"Əsas səhifə"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"İş"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"Digər"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"Mobil"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"Fərdi"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"Əsas səhifə"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"İş"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"Digər"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"Fərdi"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"Ana səhifə"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"İş"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"Digər"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"Şəxsi"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Görüşlər"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"İş"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"Digər"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"Fərdi"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"Şəxsi"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"Köməkçi"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"Qardaş"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"Uşaq"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Ev yoldaşı"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"Ata"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"Dost"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"Müdir"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"Ana"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"Valideyn"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"Ortaq"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"Dəvət edən"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"Qohum"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"Bacı"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"Həyat yoldaşı"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Fərdi"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Əsas səhifə"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"İş"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Digər"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PİN kodu daxil edin"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK və yeni PİN kod daxil edin"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kod"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Yeni PIN kodu"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Şifrə daxil etmək üçün toxunun"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Kilidi açmaq üçün parol yazın"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Kilidi açmaq üçün PIN daxil edin"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Yanlış PIN kodu."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Kilidi açmaq üçün Menyu, sonra 0 basın."</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Təcili nömrə"</string>
+    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Xidmət yoxdur."</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Ekran kilidlənib."</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Təcili zəng kilidini açmaq və ya yerləşdirmək üçün Menyu düyməsinə basın."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Kilidi açmaq üçün Menyu düyməsinə basın."</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Kilidi açmaq üçün model çəkin"</string>
+    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Təcili zəng"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Zəngə qayıt"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Düzdür!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Bir də cəhd edin"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Bir daha cəhd et"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Sifət kilidi cəhdləriniz bitdi"</string>
+    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Batareya yığılır, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_charged" msgid="321635745684060624">"Dolub"</string>
+    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_low_battery" msgid="1482873981919249740">"Elektrikə qoşun."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM kart yoxdur."</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Planşetdə SIM kart yoxdur."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonda SİM kart yoxdur."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SİM kart daxil edin."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SİM kart yoxdur və ya oxuna bilinmir. SİM kart daxil edin."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Yararsız SIM kart."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Sizin SİM kartınız daimi olaraq deaktivləşib.\n Başqa SİM kart üçün simsiz xidmət provayderinizə müraciət edin."</string>
+    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Əvvəlki trek düyməsi"</string>
+    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Növbəti trek düyməsi"</string>
+    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Pauza düyməsi"</string>
+    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Oxutma düyməsi"</string>
+    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Dayandırma düyməsi"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"Yalnız təcili zənglər"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Şəbəkə kilidlidir"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM kart PUK ilə kilidlənib."</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"İstifadəçi Təlimatlarına baxın və ya Müştəri Xidmətlərinə müraciət edin."</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM kart kilidlənib."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SİM kartın kilidi açılır..."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Siz kilid modelini <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış çəkdiniz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə içində yenidən sınayın."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Şifrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Siz PIN nömrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz. \n \n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə içində təkrar sınayın."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetin kilidini Google hesabınıza daxil olmaqla açmağınız istəniləcək.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetin kilidini Google hesabınıza daxil olmaqla açmağınız tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, planşet fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Siz telefon kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, telefon zavod ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Siz planşetin kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> yanlış cəhd etmisiniz. Planşet artıq defolt zavod halına sıfırlanacaq."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Siz telefonun kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> dəfə səhv cəhd etdiniz. Telefonunuz indi zavod nizamlarına yenilənəcək."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> saniyə ərzində bir daha cəhd edin."</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Şablonu unutdunuz?"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Hesab kilid açma"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Həddindən çox cəhd edildi!"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Kilidi açmaq üçün Google hesabınız ilə daxil olun."</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"İstifadəçi adı (e-poçt)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Şifrə"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Daxil olun"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Yanlış istifadəçi adı və parol."</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"İstifadəçi adınızı və ya parolunuzu unutmusunuz?\n "<b>"google.com/accounts/recovery"</b>" linkinə daxil olun."</string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Yoxlanır..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Kilidi aç"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Səs açıqdır"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Səs sönülüdür"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Model başlandı"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Model təmizləndi"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Xana əlavə edildi"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Model tamamlandı"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d of %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Widget əlavə edin."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Boş"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Kilidi açma sahəsi genişləndi."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Kilidi açma sahəsi çökdü."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> vidcet."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"İstifadəçi selektoru"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media kontrolları"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Yenidən sıralama vidceti başladıldı."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidcetin təkrar sifarişi sona çatdı."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidcet <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> silindi."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kilidi açma sahəsini genişləndir."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Sürüşdürmə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kild açma modeli."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Sifət Kilidi"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin kilid açması."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifrə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Model sahəsi."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Sürüşdürmə sahəsi."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"simvol"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"söz"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"link"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"xətt"</string>
+    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"Zavod testi alınmadı"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"Bu FACTORY_TEST fəaliyyəti yalnızca/sistemdə/tətbiqdə quraşdırılmış paketlər üçün dəstəklənir."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"FACTORY_TEST əməliyyatını təsdiqləyən heç bir paket tapılmadı."</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"Yenidən yükləyin"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"\"<xliff:g id="TITLE">%s</xliff:g>\"dakı səhifədə deyilir:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Naviqasiyanı Təsdiq edin"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Bu Səhifəni Tərk edin"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Bu səhifədə qalın"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nBu səhifədən kənara naviqasiya etmək istədiyinizə əminsiniz mi?"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"Təsdiqlə"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"Məsləhət: Böyütmək və kiçiltmək üçün iki dəfə tıklayın."</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"Avtodoldurma"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"AvtoDoldurmanı ayarla"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"Vilayət"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"Poçt kodu"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"Dövlət"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"Poçt indeksi"</string>
+    <string name="autofill_county" msgid="237073771020362891">"Ölkə"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"Ada"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"Sahə"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"Departament"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"Prefektura"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"Pariş"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"Sahə"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"Əmirlik"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"Veb əlfəcinlərinizi və tarixçələrinizi oxumaq"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"Tətbiqə Brauzerin daxil olduğu bütün linkləri və bütün Brauzer əlfəcinlərini oxumaq imkanı verir. Qeyd: bu icazə veb brauzer imkanları olan üçüncü tərəf brazuerləri və digər tətbiqlər tərəfindən yerinə yetirilə bilməz."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"veb əlfəcinləri və tarixçəsi yazmaq"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Tətbiqə planşetinizdəki brauzer tarixini və əlfəcinləri redaktə etmək icazəsi verir. Bu tətbizə brauzer məlumatlarını silmək və ya redaktə etmək imkanı verə bilər. Qeyd: Bu icazə 3-cü partiya brauzerlərə və ya veb brauzing xüsusiyyətli digər tətbiqlərə şamil olunmaya bilər."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Tətbiqə Brauzer tarixçəsi və telefonunuzda saxlanılan əlfəcinlərə dəyişiklik etmək imkanı verir. Bununla tətbiqlə Brauzer datanızı silə və ya dəyişdirə bilər. Qeyd: bu icazə veb brauzer imkanları olan üçüncü tərəf brazuerləri və digər tətbiqlər tərəfindən yerinə yetirilə bilməz."</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"siqnal qurur"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"Tətbiqə quraşdırlmış zəngli saata alarm ayarlamağa imkan verir. Bəzi zəngli saat tətbiqləri bu özəlliyi dəstəkləməyə bilər."</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"Səsli poçt əlavə et"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Tətbiqə səsli poçt qutunuza mesaj əlavə etməyə imkan verir."</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Brauzerin geolokasiya icazələrini dəyişir"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Tətbiqə Brauzerin geolokasiya icazələrini dəyişməyə imkan verir. Zərərli tətbiqlər bundan istifadə edərək məkan məlumatlarını təsadüfi saytlara göndərə bilər."</string>
+    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"paketləri təsdiqlə"</string>
+    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"Tətbiqə paketin quraşdırılabilən olmasını yoxlamağa imkan verir."</string>
+    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"paket doğrulayıcıya bağlanır"</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"Sahibinə paket yoxlayıcılarına sorğu göndərmək icazəsi verir. Normal tətbiqlər tərəfindən heç vaxt istənilməməlidir."</string>
+    <string name="permlab_serialPort" msgid="546083327654631076">"serial porta çıxır"</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"Sahibinə SerialManager API vasitəsilə serial portlara icazə izni verir."</string>
+    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"xarici kontent provayderlərinə giriş"</string>
+    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"Məzmun provayderlərinə örtükdən daxil olmaq üçün cihaz sahibinə imkan verir. Normal tətbiqlər üçün lazım deyil."</string>
+    <string name="permlab_updateLock" msgid="3527558366616680889">"avtomatik cihaz yenilənmələrini pozur"</string>
+    <string name="permdesc_updateLock" msgid="1655625832166778492">"Sahibinə yeni versiyaya yenilənmək üçün nə vaxt qeyri-interaktiv reboot məlumatını sistemə təklif etmə icazəsi verir."</string>
+    <string name="save_password_message" msgid="767344687139195790">"Brauzerin bu şifrəni yadda saxlamasını istəyirsiz?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"İndi yox"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"Yadda saxla"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"Heç vaxt"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"Bu səhifəni açmaq üçün icazəniz yoxdur."</string>
+    <string name="text_copied" msgid="4985729524670131385">"Mətn panoya kopyalandı."</string>
+    <string name="more_item_label" msgid="4650918923083320495">"Daha çox"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menyu+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"boşluq"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"daxil olun"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"sil"</string>
+    <string name="search_go" msgid="8298016669822141719">"Axtar"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"Axtarış"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"Axtarış sorğusu"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"Sorğunu təmizlə"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"Sorğunu göndərin"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"Səsli axtarış"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Toxunaraq Kəşf et funksiyası aktiv edilsin?"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> Toxunaraq Kəşf Et rejimini aktivləşdirmək istəyir. Toxunaraq Kəşf Et açıldığı zaman, barmağınızın altında nə olduğu haqda olan təsvirləri eşidə və ya görə bilərsiniz və yaplanşetdə insanlarla əlaqəyə keçmək üçün jestlər həyata keçirə bilərsiniz."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> Toxunaraq Kəşf Et rejimini aktivləşdirmək istəyir. Toxunaraq Kəşf Et açıldığı zaman, barmağınızın altında nə olduğu haqda olan təsvirləri eşidə və ya görə bilərsiniz və ya telefonda insanlarla əlaqəyə keçmək üçün jestlər həyata keçirə bilərsiniz"</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 ay öncə"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"1 ay əvvəl"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"1 saniyə əvvəl"</item>
+    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> saniyə əvvəl"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"1 dəqiqə əvvəl"</item>
+    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə əvvəl"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"1 saat əvvəl"</item>
+    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> saat əvvəl"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"Son <xliff:g id="COUNT">%d</xliff:g> gün"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"Keçən ay"</string>
+    <string name="older" msgid="5211975022815554840">"Köhnə"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"dünən"</item>
+    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> gün əvvəl"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"1 saniyə ərzində"</item>
+    <item quantity="other" msgid="1241926116443974687">"<xliff:g id="COUNT">%d</xliff:g> saniyə içində"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"1 dəqiqə içində"</item>
+    <item quantity="other" msgid="3330713936399448749">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə ərzində"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"1 saata"</item>
+    <item quantity="other" msgid="547290677353727389">"<xliff:g id="COUNT">%d</xliff:g> saata"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"sabah"</item>
+    <item quantity="other" msgid="5109449375100953247">"<xliff:g id="COUNT">%d</xliff:g> gün ərzində"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"1 saniyə əvvəl"</item>
+    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> san əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"1 dəqiqə əvvəl"</item>
+    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"1 saat əvvəl"</item>
+    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> saat əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"dünən"</item>
+    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> gün əvvəl"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"1 san ərzində"</item>
+    <item quantity="other" msgid="5495880108825805108">"<xliff:g id="COUNT">%d</xliff:g> san ərzində"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"1 dəq ərzində"</item>
+    <item quantity="other" msgid="4216113292706568726">"<xliff:g id="COUNT">%d</xliff:g> dəqiqəyə"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"1 saat ərzində"</item>
+    <item quantity="other" msgid="3705373766798013406">"<xliff:g id="COUNT">%d</xliff:g> saata"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"sabah"</item>
+    <item quantity="other" msgid="2973062968038355991">"<xliff:g id="COUNT">%d</xliff:g> günə"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"<xliff:g id="DATE">%s</xliff:g> tarixində"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"saat <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"<xliff:g id="YEAR">%s</xliff:g> ilində"</string>
+    <string name="day" msgid="8144195776058119424">"gün"</string>
+    <string name="days" msgid="4774547661021344602">"günlər"</string>
+    <string name="hour" msgid="2126771916426189481">"saat"</string>
+    <string name="hours" msgid="894424005266852993">"saatlar"</string>
+    <string name="minute" msgid="9148878657703769868">"dəq."</string>
+    <string name="minutes" msgid="5646001005827034509">"dəqiqə"</string>
+    <string name="second" msgid="3184235808021478">"sn"</string>
+    <string name="seconds" msgid="3161515347216589235">"san"</string>
+    <string name="week" msgid="5617961537173061583">"həftə"</string>
+    <string name="weeks" msgid="6509623834583944518">"həftə"</string>
+    <string name="year" msgid="4001118221013892076">"il"</string>
+    <string name="years" msgid="6881577717993213522">"il"</string>
+  <plurals name="duration_seconds">
+    <item quantity="one" msgid="6962015528372969481">"1 saniyə"</item>
+    <item quantity="other" msgid="1886107766577166786">"<xliff:g id="COUNT">%d</xliff:g> saniyə"</item>
+  </plurals>
+  <plurals name="duration_minutes">
+    <item quantity="one" msgid="4915414002546085617">"1 dəqiqə"</item>
+    <item quantity="other" msgid="3165187169224908775">"<xliff:g id="COUNT">%d</xliff:g> dəqiqə"</item>
+  </plurals>
+  <plurals name="duration_hours">
+    <item quantity="one" msgid="8917467491248809972">"1 saat"</item>
+    <item quantity="other" msgid="3863962854246773930">"<xliff:g id="COUNT">%d</xliff:g> saat"</item>
+  </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"Video problemi"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Bu video bu cihaza strim olunmaq üçün uyğun deyil."</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Bu video oxumur"</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"günorta"</string>
+    <string name="Noon" msgid="3342127745230013127">"Günorta"</string>
+    <string name="midnight" msgid="7166259508850457595">"gecəyarı"</string>
+    <string name="Midnight" msgid="5630806906897892201">"Gecəyarı"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"Hamısını seç"</string>
+    <string name="cut" msgid="3092569408438626261">"Kəs"</string>
+    <string name="copy" msgid="2681946229533511987">"Kopyala"</string>
+    <string name="paste" msgid="5629880836805036433">"Yerləşdir"</string>
+    <string name="replace" msgid="5781686059063148930">"Əvəz et..."</string>
+    <string name="delete" msgid="6098684844021697789">"Sil"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"URL kopyala"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"Mətn seçin"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Mətn seçimi"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"Lüğətə əlavə et"</string>
+    <string name="deleteText" msgid="6979668428458199034">"Sil"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"Daxiletmə metodu"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"Mətn əməliyyatları"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Yaddaş yeri bitir"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Bəzi sistem funksiyaları işləməyə bilər"</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> işlənir"</string>
+    <string name="app_running_notification_text" msgid="4653586947747330058">"Daha çox məlumat üçün və ya tətbiqi dayandırmaq üçün toxunun."</string>
+    <string name="ok" msgid="5970060430562524910">"OK"</string>
+    <string name="cancel" msgid="6442560571259935130">"Ləğv et"</string>
+    <string name="yes" msgid="5362982303337969312">"OK"</string>
+    <string name="no" msgid="5141531044935541497">"Ləğv et"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"Diqqət"</string>
+    <string name="loading" msgid="7933681260296021180">"Yüklənir…"</string>
+    <string name="capital_on" msgid="1544682755514494298">"AÇIQ"</string>
+    <string name="capital_off" msgid="6815870386972805832">"QAPALI"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"Əməliyyatı tamamlayın:"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"Bu fəaliyyət üçün defolt istifadə edin"</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Sistem ayarlarında, Tətbiqlərdə və Endirilmişlərdə defoltu təmizləyin."</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"Fəaliyyət seçin"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB cihaz üçün tətbiq seçin"</string>
+    <string name="noApplications" msgid="2991814273936504689">"Heç bir tətbiq bu əməliyyatı apara bilmir."</string>
+    <string name="aerr_title" msgid="1905800560317137752"></string>
+    <string name="aerr_application" msgid="932628488013092776">"Təəssüf ki, <xliff:g id="APPLICATION">%1$s</xliff:g> dayandı."</string>
+    <string name="aerr_process" msgid="4507058997035697579">"Təəssüf ki, <xliff:g id="PROCESS">%1$s</xliff:g> prosesi dayandı."</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> cavab vermir.\n\nOnu bağlamaq istəyirsiniz?"</string>
+    <string name="anr_activity_process" msgid="5776209883299089767">"<xliff:g id="ACTIVITY">%1$s</xliff:g> aktivitisi cavab vermir. \n\nOnu bağlamaq istəyirsiniz?"</string>
+    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> cavab vermir. Onu bağlamaq istəyirsiniz?"</string>
+    <string name="anr_process" msgid="6513209874880517125">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> cavab vermir. \n \n Onu bağlamaq istəyirsiniz?"</string>
+    <string name="force_close" msgid="8346072094521265605">"OK"</string>
+    <string name="report" msgid="4060218260984795706">"Şikayət edin"</string>
+    <string name="wait" msgid="7147118217226317732">"Gözlə"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"Bu səhifə yararsızlaşıb.\n\nBağlamaq istəyirsiz?"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"Tətbiq yönləndirildi"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> indi çalışır."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> ilk başladıldı."</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Miqyas"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"Həmişə göstər"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Bunları Sistem ayarlarında yenidən aktivləşdir Yüklənmiş &gt; Tətbiqlər &gt;."</string>
+    <string name="smv_application" msgid="3307209192155442829">"Tətbiq <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) StrictMode siyasətini pozdu."</string>
+    <string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> prosesi StrictMode siyasətini pozdu."</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"Android təkmilləşdirilir..."</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> əddədən <xliff:g id="NUMBER_0">%1$d</xliff:g> tətbiq optimallaşır."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Tətbiqlər başladılır."</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"Yükləmə başa çatır."</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> çalışır"</string>
+    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Tətbiqə keçmək üçün toxunun"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Tətbiqlərə keçilsin?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Bir tətbiq artıq işləyir. Digərini başlatmaq üçün onu dayandırmalısınız."</string>
+    <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> bölməsinə qayıdın"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"Yeni tətbiqi başlatmayın."</string>
+    <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> tətbiqini başladın"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"Köhnə tətbiqi yadda saxlamadan dayandırın."</string>
+    <string name="sendText" msgid="5209874571959469142">"Mətn üçün əməliyyat seçin"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"Zəngin səs gücü"</string>
+    <string name="volume_music" msgid="5421651157138628171">"Media həcmi"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bluetooth vasitəsilə oynadılır"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Səssiz zəng"</string>
+    <string name="volume_call" msgid="3941680041282788711">"Daxili zəng səsi"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetooth zəng həcmi"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"Siqnal səsi"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"Bildiriş səsi"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"Həcm"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetooth həcmi"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Zəng səsi gücü"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"Zəng həcmi"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"Media həcmi"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"Bildiriş səsi"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"Defolt rinqton"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Defolt rinqton (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"Heç biri"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"Zəng səsləri"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"Naməlum rinqton"</string>
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Wi-Fi şəbəkəsi mövcuddur"</item>
+    <item quantity="other" msgid="4192424489168397386">"Wi-Fi şəbəkələri mövcuddur"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"Wi-Fi şəbəkəni açın"</item>
+    <item quantity="other" msgid="7915895323644292768">"Açıq Wi-Fi şəbəkələri mövcuddur"</item>
+  </plurals>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"Wi-Fi şəbəkəsinə daxil ol"</string>
+    <string name="network_available_sign_in" msgid="8495155593358054676">"Şəbəkəyə daxil olun"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi\'a qoşulmaq alınmadı"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" internet bağlantısı keyfiyyətsizdir."</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Wi-Fi Direct əməliyyatını başlat. Bu Wi-Fi müştəri/hotspotu bağlayacaq."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Wi-Fi Direct başladıla bilmədi."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct aktivdir"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Ayarlar üçün toxunun"</string>
+    <string name="accept" msgid="1645267259272829559">"Qəbul edin"</string>
+    <string name="decline" msgid="2112225451706137894">"İmtina edin"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Dəvətnamə göndərildi"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Qoşulmaq üçün dəvət"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"Kimdən:"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"Kimə:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Tələb olunan PİN kodu daxil edin:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PİN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Bu planşet <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazına qoşulan zaman Wi-Fi şəbəkəsindən müvəqqəti ayrılmış olacaq"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Bu telefon <xliff:g id="DEVICE_NAME">%1$s</xliff:g> cihazına qoşulan zaman Wi-Fi şəbəkəsindən müvəqqəti ayrılmış olacaq"</string>
+    <string name="select_character" msgid="3365550120617701745">"Simvol daxil edin"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"SMS mesaj göndərilir"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; çox sayda SMS mesaj göndərir. Bu tətbiqin mesaj göndərməyə davam etməsinə icazə verirsiniz?"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"İcazə verin"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"Rədd edin"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt; ünvanına mesaj göndərmək istəyir."</string>
+    <string name="sms_short_code_details" msgid="3492025719868078457">"Bu, mobil hesabınıza "<font fgcolor="#ffffb060">"əlavə tariflərin tətbiq olunması"</font>" ilə nəticələnə bilər."</string>
+    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Bu mobil hesabınızda ödənişlərə səbəb olacaq."</font></string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Göndər"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Ləğv et"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Mənim seçimimi yadda saxla"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Bunu sonra Ayarlarda dəyişə bilərsiniz &gt; Tətbiqlər"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Həmişə icazə ver"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Heç vaxt icazə verməyin"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM kart çıxarıldı"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"Cihazınızı etibarlı SIM kart ilə başladana kimi mobil şəbəkə əlçatmaz olacaq."</string>
+    <string name="sim_done_button" msgid="827949989369963775">"Bitdi"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SİM kart əlavə edildi"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"Mobil şəbəkəyə qoşulmaq üçün cihazınızı yenidən başladın."</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"Yenidən başlat"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Vaxt ayarlayın"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Tarixi quraşdır"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"Ayarlayın"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"Hazırdır"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"YENİ: "</font></string>
+    <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> tərəfindən təmin edilib."</string>
+    <string name="no_permissions" msgid="7283357728219338112">"Heç bir icazə tələb olunmur"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"bununla sizdən xərc tutula bilər"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB toplu yaddaş"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"USB qoşuludur"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Siz USB vasitəsilə kompütere bağlandınız. Kompüter və Androidinizin USB yaddaşı arasında faylları kopyalamaq istəyirsinizsə, aşağıdakı düyməyə toxunun."</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"Kompüterinizə USB ilə qoşulmusunuz. Faylları Androidinizin SD kartı ilə kompüteriniz arasında kopyalamaq istəyirsinizsə aşağıdakı düyməyə toxunun."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"USB yaddaşı aktivləşdirin"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"USB yaddaşınızı USB kütləvi yaddaşı üçün istifadə edən zaman problem yarandı."</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"SD kartınızı USB kütləvi yaddaşı üçün istifadə edən zaman problem yarandı."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB qoşuludur"</string>
+    <string name="usb_storage_notification_message" msgid="939822783828183763">"Faylları kompüterinizə kopyalamaq və ya kompüterinizdən kopyalamaq üçün toxunun."</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB yaddaşı söndürün"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB yaddaşı söndürmək üçün toxunun."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB yaddaş istifadə olunur"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB yaddaşı söndürmədən öncə Android\'in USB yaddaşını kompüterdən demontaj etdiyinizə (çıxardığınıza) əmin olun."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"USB yaddaşı söndürmədən öncə Android\'in USB yaddaşını kompüterdən demontaj etdiyinizə (çıxardığınıza) əmin olun."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB yaddaşını söndür"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"USB yaddaşı söndürən zaman problem oldu. USB hostu demontaj etmənizi yoxlayın və yenidən cəhd edin."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB yaddaşı aktivləşdirin"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"USB yaddaşı aktivləşdirsəniz, istifadə etdiyiniz bəzi tətbiqlər dayana bilər və USB yaddaş deaktiv edilənə qədər işləməyə bilər."</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"USB əməliyyatı uğursuzdur"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
+    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Media cihazı kimi qoşuldu"</string>
+    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Kamera kimi bağlanıldı"</string>
+    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Quraşdırıcı kimi qoşulub"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB aksesuara qoşuldu"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"Digər USB seçimləri üçün toxunun."</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB yaddaşına format atılsın?"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD kart format edilsin?"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"USB yaddaşınızda yerləşdirilmiş bütün fayllar silinəcək. Bu addım geri dönülməzdir."</string>
+    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kartınızdakı bütün məlumatlar itəcək."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB sazlama qoşuludur"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"USB debaqı deaktivasiya etmək üçün toxunun."</string>
+    <string name="select_input_method" msgid="4653387336791222978">"Daxiletmə metodunu seçin"</string>
+    <string name="configure_input_methods" msgid="9091652157722495116">"Daxiletmə üsullarını ayarlayın"</string>
+    <string name="use_physical_keyboard" msgid="6203112478095117625">"Fiziki klaviatura"</string>
+    <string name="hardware" msgid="7517821086888990278">"Hardware"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Klaviatura sxemi seçin"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Klaviatura tərtibatı seçmək üçün toxunun."</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCÇDEƏFGĞHXIİJKQLMNOÖPRSŞTUÜVYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCÇDEƏFGĞHİIJKLMNOÖPQRSŞTUÜVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"namizədlər"</u></string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB yaddaş hazırlanır"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD kart hazırlanır"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Səhvlər yoxlanılır."</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Boş USB yaddaşı"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Boş SD kart"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB yaddaş boşdur və ya sistem tərəfindən dəstəklənməyən fayl sisteminə malikdir."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD kart boşdur və ya sistem tərəfindən dəstəklənməyən fayl sisteminə malikdir."</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Zədəli USB yaddaş"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Zədəli SD kart"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"SD yaddaş zədələnib. Onu format etməyə çalışın."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD kart zədələnib. Onu format etməyə çalışın."</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB yaddaşı gözlənilmədən çıxarıldı"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD kart gözlənilmədən çıxarıldı"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Məlumat itkisinin qarşısını almaq üçün USB yaddaşı çıxarmazdan əvvəl onu demontaj edin."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Data itkisinin qarşısını almaq üçün SD kartı çıxarmadan öncə demontaj edin."</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"USB yaddaş çıxarmaq üçün təhlükəsizdir"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD kart təhlükəsiz çıxarıla bilər"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Siz USB yaddaşı təhlükəsiz çıxara bilərsiniz."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Siz SD kartı təhlükəsiz çıxara bilərsiniz."</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Silinmiş USB yaddaş"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD kart çıxarıldı"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB yaddaş çıxarıldı. Yeni media əlavə edin."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD kart çıxarıldı. Yenisini daxil edin."</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"Uyğun gələn fəaliyyət tapılmadı."</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"komponent istifadəsi statistikasını güncəlləyir"</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Tətbiqə toplanmış istifadə statistikasını dəyişməyə imkan verir. Normal tətbiqlər tərəfindən istifadə olunmur."</string>
+    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"məzmunu kopyala"</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Tətbiqə kontenti kopyalamaq üçün defolt konteyner servisini çağırmaq icazəsi verir. Normal tətbiqlər tərəfindən istifadə edilmir."</string>
+    <string name="permlab_route_media_output" msgid="1642024455750414694">"Media çıxışını yönləndirir"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Tətbiqə media çıxışını digər xarici cihazlara yönləndirmək imkanı verir."</string>
+    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Keyguard təhlükəsiz yaddaşa çıxış"</string>
+    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Tətbiqə keguard təhlükəsiz yaddaşa çatmağa icazə verir."</string>
+    <string name="permlab_control_keyguard" msgid="172195184207828387">"Klaviatura kilidinin görülməsini və gizlədilməsini idarə edir"</string>
+    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tətbiqə keguardı idarə etmək icazəsi verir."</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Zoom nəzarəti üçün iki dəfə toxunun"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget əlavə edilə bilmədi."</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"Get"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"Axtar"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"Göndər"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"Növbəti"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"Tamam"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"Əvvəlki"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"İcra edin"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"<xliff:g id="NUMBER">%s</xliff:g> istifadə etməklə\nnömrə yığın"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"<xliff:g id="NUMBER">%s</xliff:g>istifadə edərək kontakt yaradın\n"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Aşağıdakı bir və ya daha çox tətbiqlər indi və gələcəkdə hesabınıza daxil olmaq üçün icazə istəyir."</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Bu istəyə izn vermək istəyirsiniz?"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"Giriş sorğusu"</string>
+    <string name="allow" msgid="7225948811296386551">"İcazə verin"</string>
+    <string name="deny" msgid="2081879885755434506">"Rədd et"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"İcazə tələb olunur"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">\n" hesabı üçün<xliff:g id="ACCOUNT">%s</xliff:g> icazə sorğusu göndərildi."</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"Daxiletmə metodu"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"Sinxronizasiya"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Əlçatımlılıq"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Divar kağızı"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"Divar kağızını dəyişin"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Bildiriş dinləyən"</string>
+    <string name="vpn_title" msgid="19615213552042827">"VPN aktivləşdirildi"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"VPN <xliff:g id="APP">%s</xliff:g> tərəfindən aktivləşdirilib"</string>
+    <string name="vpn_text" msgid="3011306607126450322">"Şəbəkəni idarə etmək üçün toxunun."</string>
+    <string name="vpn_text_long" msgid="6407351006249174473">"<xliff:g id="SESSION">%s</xliff:g> sessiyaya qoşuludur. Şəbəkəni idarə etmək üçün toxunun."</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Həmişə aktiv VPN bağlanır..."</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"VPN bağlantısı həmişə aktiv"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Həmişə aktiv VPN xətası"</string>
+    <string name="vpn_lockdown_config" msgid="6415899150671537970">"Konfiqurə etmək üçün toxun"</string>
+    <string name="upload_file" msgid="2897957172366730416">"Fayl seçin"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"Heç bir fayl seçilməyib"</string>
+    <string name="reset" msgid="2448168080964209908">"Sıfırlayın"</string>
+    <string name="submit" msgid="1602335572089911941">"Göndər"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Avtomobil rejimi aktivdir"</string>
+    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Avtomobil rejimindən çıxmaq üçün toxunun."</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"Tezerinq və ya hotspot aktivdir"</string>
+    <string name="tethered_notification_message" msgid="6857031760103062982">"Quraşdırmaq üçün toxunun."</string>
+    <string name="back_button_label" msgid="2300470004503343439">"Geri"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"Növbəti"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"Keç"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Yüksək mobil data istifadəsi"</string>
+    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Mobil data istifadəsi haqqında daha çox öyrənmək üçün toxunun."</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"Mobil data limiti keçildi"</string>
+    <string name="throttled_notification_message" msgid="5443457321354907181">"Mobil data istifadəsi haqqında daha çox öyrənmək üçün toxunun."</string>
+    <string name="no_matches" msgid="8129421908915840737">"Uyğunluq yoxdur"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"Səhifədə tap"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"1 uyğunluq"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> ədəddən <xliff:g id="TOTAL">%d</xliff:g>"</item>
+  </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"Hazırdır"</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB yaddaşı qaldırılır..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD kart demontaj edilir..."</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB yaddaş silinir..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD kart silinir..."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB yaddaşı silinə bilmədi."</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"SD kartı silmək mümkün olmadı."</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"SD kart demontaj edilmədən öncə çıxarıldı."</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB yaddaş hazırda yoxlanılır."</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"SD kart hazırda yoxlanılır."</string>
+    <string name="media_removed" msgid="7001526905057952097">"SD kart çıxarılıb."</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"SD kart hazırda kompüter tərəfindən istifadə edilir."</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"SD kart hal-hazırda kompüter tərəfindən istifadə edilir."</string>
+    <string name="media_unknown_state" msgid="729192782197290385">"Naməlum vəziyyətdə xarici media."</string>
+    <string name="share" msgid="1778686618230011964">"Paylaşın"</string>
+    <string name="find" msgid="4808270900322985960">"Tapın"</string>
+    <string name="websearch" msgid="4337157977400211589">"Veb Axtarış"</string>
+    <string name="find_next" msgid="5742124618942193978">"Sonrakını tap"</string>
+    <string name="find_previous" msgid="2196723669388360506">"Əvvəlkini tap"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"<xliff:g id="NAME">%s</xliff:g> tərəfindən məkan sorğusu"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"Məkan sorğusu"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) tərəfindən tələb edilib"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"Bəli"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"Xeyr"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"Limiti keçəni silin"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> üçün <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> silinmiş fayl var, <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> hesabı. Nə etmək istəyirsiniz?"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"Elementləri sil"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"Silinənləri geri qaytar"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"İndilik heç nə etmə"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"Hesab seçin"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"Hesab əlavə et"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"Hesab əlavə edin"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"Artır"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"Azaldın"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g> toxunun və basaraq saxlayın."</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Artırmaq üçün yuxarı, azaltmaq üçün aşağı sürüşdürün."</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"Dəqiqə artırın"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"Dəqiqəni azalt"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Saatı artırın"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Saatı azaldın"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"PM qurun"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"AM qurun"</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Artma ayı"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Ayı azaldın"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Artma günü"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"Azalma günü"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"Artım ili"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"Azalma ili"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ləğv et"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Sil"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hazırdır"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Rejim dəyişikliyi"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Daxil olun"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Tətbiq seçin"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Bununla paylaşın"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ilə paylaşın"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"Sürüşən qulp. Toxunaraq basılı tutun."</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün yuxarı sürüşdürün."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün aşağı sürüşdürün."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sola sürüşdür."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sağa sürüşdür."</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Kilidi aç"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Səssiz"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Səs açıqdır"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Axtar"</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Kilidi açmaq üçün vurun."</string>
+    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Parolların səsləndirilməsi üçün qulaqlıqları taxın."</string>
+    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nöqtə."</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"Evə gedin"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"Yuxarı gedin"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"Əlavə seçimlər"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"Daxili yaddaş"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD kart"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB yaddaş"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"Redaktə et"</string>
+    <string name="data_usage_warning_title" msgid="1955638862122232342">"Data istifadə xəbərdarlığı"</string>
+    <string name="data_usage_warning_body" msgid="2814673551471969954">"İstifadə və ayarları görmək üçün toxunun"</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G data deaktivdir"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G data deaktiv edildi"</string>
+    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobil data deaktivdir"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi data deaktiv edildi"</string>
+    <string name="data_usage_limit_body" msgid="3317964706973601386">"Aktivləşdirmək üçün toxunun."</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G data limiti aşılıb"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G data limiti keçildi"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobil data limiti keçildi"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi data limiti keçildi"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> müəyyən edilmiş limit aşır."</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"Arxaplan datası məhdudlaşdırıldı"</string>
+    <string name="data_usage_restricted_body" msgid="6741521330997452990">"Məhdudiyyəti aradan qaldırmaq üçün toxunun"</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"Təhlükəsizlik sertifikatı"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Bu sertifikat etibarlıdır."</string>
+    <string name="issued_to" msgid="454239480274921032">"Verilib:"</string>
+    <string name="common_name" msgid="2233209299434172646">"Ümumi ad:"</string>
+    <string name="org_name" msgid="6973561190762085236">"Təşkilat:"</string>
+    <string name="org_unit" msgid="7265981890422070383">"Təşkilati vahid:"</string>
+    <string name="issued_by" msgid="2647584988057481566">"Tərəfindən verilib:"</string>
+    <string name="validity_period" msgid="8818886137545983110">"Keçərlilik:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"Dərc olunub:"</string>
+    <string name="expires_on" msgid="3676242949915959821">"Bitmə vaxtı:"</string>
+    <string name="serial_number" msgid="758814067660862493">"Seriya nömrəsi:"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"Barmaq izləri:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 barmaq izi:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 barmaq izi:"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Hamısını seçın"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Fəaliyyəti seçin"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Bununla paylaşın"</string>
+    <string name="status_bar_device_locked" msgid="3092703448690669768">"Cihaz kilidləndi."</string>
+    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
+    <string name="sending" msgid="3245653681008218030">"Göndərilir..."</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"Brauzer işə salınsın?"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"Zəngi qəbul edək?"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"Həmişə"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"Sadəcə bir dəfə"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Planşet"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Qulaqlıq"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Dok spikerlər"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"Simsiz ekran"</string>
+    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hazırdır"</string>
+    <string name="media_route_button_content_description" msgid="5758553567065145276">"Media çıxışı"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"Skan edilir..."</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"Qoşulur..."</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"Əlçatımlı"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"Əlçatımlı deyil"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"İstifadə olunur"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Daxili ekran"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI Ekran"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Örtük #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", təhlükəsiz"</string>
+    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Simsiz ekran qoşulub"</string>
+    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Bu ekran digər cihazda göstərir"</string>
+    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Bağlantını kəsin"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Təcili zəng"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Şablonu unutmuşam"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Yanlış Model"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Yanlış Şifrə"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN səhvdir"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%1$d</xliff:g> saniyə sonra yenidən cəhd edin."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Şablonunuzu çəkin"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN kodu daxil edin"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PİN kodu daxil edin"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Parol daxil edin"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM indi deaktivdir. Davam etmək üçün PUK kodu daxil edin. Əlavə məlumat üçün operatora müraciət edin."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"İstədiyiniz PİN kodu daxil edin"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"İstədiyiniz PIN kodu təsdiqləyin"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SİM kartın kilidi açılır..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PİN kod."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-dən 8-ə qədər rəqəmi olan PIN yazın."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kod 8 rəqəm və ya daha çox olmalıdır."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Düzgün PUK kodu yenidən daxil edin. Təkrarlanan cəhdlər SIM\'i birdəfəlik sıradan çıxaracaq."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodları uyğun deyil"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Həddindən çox cəhd edildi!"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Kilidi açmaq üçün Google hesabınız ilə daxil olun."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"İstifadəçi adı (e-poçt)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Şifrə"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Daxil ol"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Yanlış istifadəçi adı və ya parol."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"İstifadəçi adınızı və ya parolunuzu unutmusunuz?\n "<b>"google.com/accounts/recovery"</b>" linkinə daxil olun."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Hesab yoxlanılır..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodunuzu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Şifrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Modelinizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış çəkmisiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, planşet fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Siz telefon kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, telefon fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. Planşet fabrik ayarlarına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Siz telefonun kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> yanlış cəhd etmisiniz. Telefon artıq defolt zavod halına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetinizin kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz artıq modeli <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etmisiniz.<xliff:g id="NUMBER_1">%d</xliff:g> dəfə də yanlış daxil etsəniz, telefonun kilidinin açılması üçün elektron poçt ünvanınız tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində yenidən cəhd edin."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Yığışdır"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"Səs gücü tövsiyə edilən səviyyədən artırılsın?\nUzun müddət yüksək səs gücü ilə dinləmə Sizin eşitmə qabiliyyətinizə mənfi təsir edə bilər."</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Əlçatımlığı aktivləşdirmək üçün iki barmağınızı basılı saxlayın."</string>
+    <string name="accessibility_enabled" msgid="1381972048564547685">"Əlçatımlılıq aktivləşdirildi"</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"Giriş imkanı ləğv edilib."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Cari istifadəçi <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="owner_name" msgid="2716755460376028154">"Sahib"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"Xəta"</string>
+    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"Bu tətbiq məhdud profillər üçün hesabları dəstəkləmir."</string>
+    <string name="app_not_found" msgid="3429141853498927379">"Bu əməliyyatı idarə etmək üçün heç bir tətbiq tapılmadı."</string>
+    <string name="revoke" msgid="5404479185228271586">"Ləğv edin"</string>
+    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
+    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
+    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
+    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
+    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
+    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
+    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
+    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
+    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
+    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
+    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
+    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
+    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
+    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
+    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
+    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"B4 ISO"</string>
+    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
+    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
+    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
+    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
+    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
+    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
+    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
+    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
+    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
+    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
+    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
+    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
+    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
+    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
+    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
+    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
+    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
+    <string name="mediaSize_na_letter" msgid="4191805615829472953">"Məktub"</string>
+    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"Hökumət Məktubu"</string>
+    <string name="mediaSize_na_legal" msgid="6697982988283823150">"Hüquqi"</string>
+    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"Kiçik Hüquq"</string>
+    <string name="mediaSize_na_ledger" msgid="281871464896601236">"Qovluq"</string>
+    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"Qısa"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Ləğv edildi"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Kontent yazmna xətası"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN daxil edin"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Cari PIN"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Yeni PIN"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Yeni PIN\'i təsdiq edin"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"Dəyişmə məhdudiyyətləri üçün PİN yaradın"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PİN uyğun gəlmir. Yenidən cəhd edin."</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PİN çox qısadır. Ən azı 4 rəqəm olmalıdır."</string>
+  <plurals name="restr_pin_countdown">
+    <item quantity="one" msgid="4835639969503729874">"Yanlış PİN. 1 saniyə sonra təkrar sınayın."</item>
+    <item quantity="other" msgid="8030607343223287654">"Yanlış PİN. <xliff:g id="COUNT">%d</xliff:g> saniyə sonra təkrar sınayın."</item>
+  </plurals>
+    <string name="transient_navigation_confirmation" msgid="4907844043611123426">"Paneli göstərmək üçün ekranın küncünü sürüşdürün"</string>
+    <string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"Sistem panelini göstərmək üçün ekranın küncündən sürüşdürün"</string>
+</resources>
diff --git a/core/res/res/values-be/donottranslate-cldr.xml b/core/res/res/values-be/donottranslate-cldr.xml
deleted file mode 100755
index cb74942..0000000
--- a/core/res/res/values-be/donottranslate-cldr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="numeric_date_template">"%s.%s.%s"</string>
-    <string name="month_day_year">%-e %B %Y</string>
-    <string name="time_of_day">%H.%M.%S</string>
-    <string name="date_and_time">%H.%M.%S %-e.%-m.%Y</string>
-    <string name="date_time">%2$s %1$s</string>
-</resources>
diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml
deleted file mode 100644
index ccc2986..0000000
--- a/core/res/res/values-be/strings.xml
+++ /dev/null
@@ -1,1801 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="5973789783504771878">"Кб"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"Мб"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"Гб"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"Тб"</string>
-    <string name="petabyteShort" msgid="5637816680144990219">"Пб"</string>
-    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="untitled" msgid="4638956954852782576">"&lt;Без назвы&gt;"</string>
-    <string name="ellipsis" msgid="7899829516048813237">"..."</string>
-    <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
-    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Няма нумара тэлефона)"</string>
-    <string name="unknownName" msgid="2277556546742746522">"(Невядомы)"</string>
-    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Галасавая пошта"</string>
-    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
-    <string name="mmiError" msgid="5154499457739052907">"Праблема падлучэння ці няправільны код MMI."</string>
-    <string name="mmiFdnError" msgid="5224398216385316471">"Выкарыстанне абмежаванае толькі дазволенымі нумарамі."</string>
-    <string name="serviceEnabled" msgid="8147278346414714315">"Служба была ўключана."</string>
-    <string name="serviceEnabledFor" msgid="6856228140453471041">"Служба была ўключана для:"</string>
-    <string name="serviceDisabled" msgid="1937553226592516411">"Служба была адключаная."</string>
-    <string name="serviceRegistered" msgid="6275019082598102493">"Рэгістрацыя прайшла паспяхова."</string>
-    <string name="serviceErased" msgid="1288584695297200972">"Паспяхова выдалена."</string>
-    <string name="passwordIncorrect" msgid="7612208839450128715">"Няправільны пароль."</string>
-    <string name="mmiComplete" msgid="8232527495411698359">"MMI завершаны."</string>
-    <string name="badPin" msgid="9015277645546710014">"Стары PIN-код уведзены няправільна."</string>
-    <string name="badPuk" msgid="5487257647081132201">"Няправільны PUK-код."</string>
-    <string name="mismatchPin" msgid="609379054496863419">"Уведзеныя PIN-коды не супадаюць."</string>
-    <string name="invalidPin" msgid="3850018445187475377">"Увядзіце PIN-код, які змяшчае ад 4 да 8 лічбаў."</string>
-    <string name="invalidPuk" msgid="8761456210898036513">"Увядзіце PUK з 8 лічбаў ці больш."</string>
-    <string name="needPuk" msgid="919668385956251611">"Ваша SIM-карта заблакавана PUK-кодам. Увядзіце PUK, каб разблакаваць карту."</string>
-    <string name="needPuk2" msgid="4526033371987193070">"Увядзіце PUK2 для разблакавання SIM-карты."</string>
-    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
-    <string name="meid" msgid="4841221237681254195">"MEID"</string>
-    <string name="ClipMmi" msgid="6952821216480289285">"Ідэнтыфікатар АВН"</string>
-    <string name="ClirMmi" msgid="7784673673446833091">"Ідэнтыфікатар АВН"</string>
-    <string name="CfMmi" msgid="5123218989141573515">"Пераадрасацыя выкліку"</string>
-    <string name="CwMmi" msgid="9129678056795016867">"Чаканне выкліку"</string>
-    <string name="BaMmi" msgid="455193067926770581">"Забарона выкліку"</string>
-    <string name="PwdMmi" msgid="7043715687905254199">"Змена пароля"</string>
-    <string name="PinMmi" msgid="3113117780361190304">"Змена PIN-коду"</string>
-    <string name="CnipMmi" msgid="3110534680557857162">"Цяперашні нумар выкліку"</string>
-    <string name="CnirMmi" msgid="3062102121430548731">"Нумар выкліку абмежаваны"</string>
-    <string name="ThreeWCMmi" msgid="9051047170321190368">"Трохбаковы выклік"</string>
-    <string name="RuacMmi" msgid="7827887459138308886">"Адмова ад непажаданых раздражняючых выклікаў"</string>
-    <string name="CndMmi" msgid="3116446237081575808">"Дастаўка нумару выкліку"</string>
-    <string name="DndMmi" msgid="1265478932418334331">"Не турбаваць"</string>
-    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Налады ідэнтыфікатару АВН па змаўчанні абмежаваныя. Наступны выклік: абмежавана"</string>
-    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Ідэнтыфікатар АВН па змаўчанні абмежаваны. Наступны выклік: не абмежавана"</string>
-    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Па змаўчанні ідэнтыфікатар АВН не абмежаваны. Наступны выклік: абмежаваны"</string>
-    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Налады ідэнтыфікатару АВН па змаўчанні: не абмяжавана. Наступны выклік: не абмежавана"</string>
-    <string name="serviceNotProvisioned" msgid="8614830180508686666">"Служба не прадастаўляецца."</string>
-    <string name="CLIRPermanent" msgid="3377371145926835671">"Вы не можаце змяніць налады ідэнтыфікатара абанента, якi тэлефануе."</string>
-    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Абмежаваны доступ змяніўся"</string>
-    <string name="RestrictedOnData" msgid="8653794784690065540">"Служба дадзеных блакуецца."</string>
-    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Аварыйная служба блакуецца."</string>
-    <string name="RestrictedOnNormal" msgid="4953867011389750673">"Галасавая служба заблакаваная."</string>
-    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"Усе галасавыя службы заблакаваны."</string>
-    <string name="RestrictedOnSms" msgid="8314352327461638897">"Служба SMS заблакаваная."</string>
-    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"Службы перадачы голаса/дадзеных заблакаваны."</string>
-    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Службы перадачы голаса і SMS заблакаваныя."</string>
-    <string name="RestrictedOnAll" msgid="5643028264466092821">"Усе службы перадачы дадзеных, галасавыя і SMS-службы заблакаваны."</string>
-    <string name="serviceClassVoice" msgid="1258393812335258019">"Голас"</string>
-    <string name="serviceClassData" msgid="872456782077937893">"Дадзеныя"</string>
-    <string name="serviceClassFAX" msgid="5566624998840486475">"Факс"</string>
-    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
-    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Асінхронныя"</string>
-    <string name="serviceClassDataSync" msgid="7530000519646054776">"Сінхронныя"</string>
-    <string name="serviceClassPacket" msgid="6991006557993423453">"Пакет"</string>
-    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
-    <string name="roamingText0" msgid="7170335472198694945">"Індыкатар роўмінгу ўключаны"</string>
-    <string name="roamingText1" msgid="5314861519752538922">"Індыкатар роўмінгу адключаны"</string>
-    <string name="roamingText2" msgid="8969929049081268115">"Індыкатар роўмінгу міргае"</string>
-    <string name="roamingText3" msgid="5148255027043943317">"З раёну"</string>
-    <string name="roamingText4" msgid="8808456682550796530">"З будынку"</string>
-    <string name="roamingText5" msgid="7604063252850354350">"Роўмінг: пераважная сістэма"</string>
-    <string name="roamingText6" msgid="2059440825782871513">"Роўмінг: даступная сістэма"</string>
-    <string name="roamingText7" msgid="7112078724097233605">"Роўмінг: асацыятыўны партнёр"</string>
-    <string name="roamingText8" msgid="5989569778604089291">"Роўмінг: прэмiум-партнёр"</string>
-    <string name="roamingText9" msgid="7969296811355152491">"Роўмінг: поўная функцыянальнасць службы"</string>
-    <string name="roamingText10" msgid="3992906999815316417">"Роўмінг – частковая функцыянальнасць службы"</string>
-    <string name="roamingText11" msgid="4154476854426920970">"Банэр роўмінгу ўключаны"</string>
-    <string name="roamingText12" msgid="1189071119992726320">"Банэр роўмінгу адключаны"</string>
-    <string name="roamingTextSearching" msgid="8360141885972279963">"Пошук службы"</string>
-    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: не пераадрасоўваецца"</string>
-    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
-    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> праз <xliff:g id="TIME_DELAY">{2}</xliff:g> с."</string>
-    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: не пераадрасоўваецца"</string>
-    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: не пераадрасоўваецца"</string>
-    <string name="fcComplete" msgid="3118848230966886575">"Код аб\'екта завершаны."</string>
-    <string name="fcError" msgid="3327560126588500777">"Праблема падлучэння ці няправільны код функцыі."</string>
-    <string name="httpErrorOk" msgid="1191919378083472204">"ОК"</string>
-    <string name="httpError" msgid="7956392511146698522">"Адбылася памылка сеткі."</string>
-    <string name="httpErrorLookup" msgid="4711687456111963163">"Не атрымалася знайсці URL."</string>
-    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Схема аўтэнтыфікацыі сайта не падтрымліваецца."</string>
-    <string name="httpErrorAuth" msgid="1435065629438044534">"Памылка аўтэнтыфікацыі."</string>
-    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Праверка сапраўднасці праз проксі-сервер скончылася няўдала."</string>
-    <string name="httpErrorConnect" msgid="8714273236364640549">"Немагчыма падлучыцца да сервера."</string>
-    <string name="httpErrorIO" msgid="2340558197489302188">"Немагчыма звязацца з серверам. Паўтарыце спробу пазней."</string>
-    <string name="httpErrorTimeout" msgid="4743403703762883954">"Час чакання злучэння з серверам скончыўся."</string>
-    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Старонка змяшчае зашмат перанакіраванняў сервера."</string>
-    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Пратакол не падтрымліваецца."</string>
-    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Немагчыма ўсталяваць бяспечнае злучэнне."</string>
-    <string name="httpErrorBadUrl" msgid="3636929722728881972">"Немагчыма адкрыць старонку, таму што URL несапраўдны."</string>
-    <string name="httpErrorFile" msgid="2170788515052558676">"Немагчыма атрымаць доступ да файла."</string>
-    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Немагчыма знайсці патрабаваны файл."</string>
-    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Апрацоўваецца занадта шмат запытаў. Паспрабуйце яшчэ раз пазней."</string>
-    <string name="notification_title" msgid="8967710025036163822">"Памылка ўваходу ва ўлiковы запiс <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
-    <string name="contentServiceSync" msgid="8353523060269335667">"Сінхранізацыя"</string>
-    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Сінхранізацыя"</string>
-    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Занадта шмат выдаленняў <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
-    <string name="low_memory" product="tablet" msgid="6494019234102154896">"Памяць планшэта поўная. Выдаліце некаторыя файлы, каб вызваліць месца."</string>
-    <string name="low_memory" product="default" msgid="3475999286680000541">"Памяць тэлефона поўная. Выдаліце ​​некаторыя файлы, каб вызваліць месца."</string>
-    <!-- no translation found for ssl_ca_cert_warning (5848402127455021714) -->
-    <skip />
-    <!-- no translation found for ssl_ca_cert_noti_by_unknown (4475437862189850602) -->
-    <skip />
-    <!-- no translation found for ssl_ca_cert_noti_managed (4030263497686867141) -->
-    <skip />
-    <string name="me" msgid="6545696007631404292">"Я"</string>
-    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Параметры планшэта"</string>
-    <string name="power_dialog" product="default" msgid="1319919075463988638">"Параметры тэлефона"</string>
-    <string name="silent_mode" msgid="7167703389802618663">"Бязгучны рэжым"</string>
-    <string name="turn_on_radio" msgid="3912793092339962371">"Уключыць бесправадную сетку"</string>
-    <string name="turn_off_radio" msgid="8198784949987062346">"Адключыць бесправадную сетку"</string>
-    <string name="screen_lock" msgid="799094655496098153">"Блакіроўка экрана"</string>
-    <string name="power_off" msgid="4266614107412865048">"Выключыць"</string>
-    <string name="silent_mode_silent" msgid="319298163018473078">"Званок выкл."</string>
-    <string name="silent_mode_vibrate" msgid="7072043388581551395">"Званок з вібрацыяй"</string>
-    <string name="silent_mode_ring" msgid="8592241816194074353">"Званок укл."</string>
-    <string name="shutdown_progress" msgid="2281079257329981203">"Выключэнне..."</string>
-    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Планшэт будзе адключаны."</string>
-    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ваш тэлефон будзе выключаны."</string>
-    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Закрыць?"</string>
-    <string name="reboot_safemode_title" msgid="7054509914500140361">"Перазагрузка ў бяспечным рэжыме"</string>
-    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Хочаце перазагрузіцца ў бяспечным рэжыме? Гэта дазволіць адключыць усе іншыя ўсталяваныя прыкладанні. Пасля перазагрузкi iх праца будзе адноўлена."</string>
-    <string name="recent_tasks_title" msgid="3691764623638127888">"Апошнія"</string>
-    <string name="no_recent_tasks" msgid="8794906658732193473">"Няма апошніх прыкладанняў."</string>
-    <string name="global_actions" product="tablet" msgid="408477140088053665">"Параметры планшэта"</string>
-    <string name="global_actions" product="default" msgid="2406416831541615258">"Параметры тэлефона"</string>
-    <string name="global_action_lock" msgid="2844945191792119712">"Блакіроўка экрана"</string>
-    <string name="global_action_power_off" msgid="4471879440839879722">"Выключыць"</string>
-    <string name="global_action_bug_report" msgid="7934010578922304799">"Справаздача пра памылкі"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"Справаздача пра памылку"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Будзе збiрацца iнфармацыя пра бягучы стан прылады, якая будзе адпраўляцца на электронную пошту. Стварэнне справаздачы пра памылкi зойме некаторы час."</string>
-    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Бязгучны рэжым"</string>
-    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Гук выкл."</string>
-    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Гук уключаны"</string>
-    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Рэжым \"У самалёце\""</string>
-    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Уключаны рэжым \"У самалёце\""</string>
-    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Рэжым \"У самалёце\" адключаны"</string>
-    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
-    <string name="safeMode" msgid="2788228061547930246">"Бяспечны рэжым"</string>
-    <string name="android_system_label" msgid="6577375335728551336">"Сістэма Android"</string>
-    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Платныя паслугі"</string>
-    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Рабіць справы, якія могуць каштаваць вам грошай."</string>
-    <string name="permgrouplab_messages" msgid="7521249148445456662">"Вашыя паведамленні"</string>
-    <string name="permgroupdesc_messages" msgid="7821999071003699236">"Счытваць і запісваць вашы SMS-паведамленні, паведамленні электроннай пошты і іншыя паведамленні."</string>
-    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Вашая персанальная інфармацыя"</string>
-    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Прамы доступ да інфармацыі пра вас, якая захоўваецца на вашай кантактнай карце."</string>
-    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Ваша сацыяльная інфармацыя"</string>
-    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Прамы доступ да інфармацыі аб вашых кантактах і сацыяльных сувязях."</string>
-    <string name="permgrouplab_location" msgid="635149742436692049">"Ваша месцазнаходжанне"</string>
-    <string name="permgroupdesc_location" msgid="5704679763124170100">"Кантраляваць сваё фізічнае месцазнаходжанне."</string>
-    <string name="permgrouplab_network" msgid="5808983377727109831">"Сеткавая сувязь"</string>
-    <string name="permgroupdesc_network" msgid="4478299413241861987">"Доступ да розных функцый сеткі."</string>
-    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
-    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Доступ да прылад і сетак праз Bluetooth."</string>
-    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Налады гуку"</string>
-    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Змена налад гуку."</string>
-    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Уплывае на батарэю"</string>
-    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Выкарыстоўвайць магчымасці, якія могуць хутка разрадзіць батарэю."</string>
-    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Каляндар"</string>
-    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Прамы доступ да календара і мерапрыемстваў."</string>
-    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Чытаць карыстальніцкі слоўнік"</string>
-    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Чытаць словы ў карыстальніцкім слоўніку."</string>
-    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Запісаць карыстальніцкі слоўнік"</string>
-    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Дадаць словы ў карыстальніцкі слоўнік."</string>
-    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Закладкі і гісторыя"</string>
-    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Прамы доступ да закладак і гісторыі браўзера."</string>
-    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Будзільнік"</string>
-    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Усталяваць будзільнік."</string>
-    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Галасавая пошта"</string>
-    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Прамы доступ да галасавой пошты."</string>
-    <string name="permgrouplab_microphone" msgid="171539900250043464">"Мікрафон"</string>
-    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Прамы доступ да мікрафону для запісу гуку."</string>
-    <string name="permgrouplab_camera" msgid="4820372495894586615">"Камера"</string>
-    <string name="permgroupdesc_camera" msgid="2933667372289567714">"Прамы доступ да камеры, каб зрабіць здымак ці зняць відэа."</string>
-    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"Экран блакіроўкі"</string>
-    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"Магчымасць уплываць на паводзіны экрана блакіроўкi на вашай прыладзе."</string>
-    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Інфармацыя аб вашых прыкладаннях"</string>
-    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Магчымасць уплываць на паводзіны іншых прыкладанняў на вашай прыладзе."</string>
-    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Шпалеры"</string>
-    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Змяніць налады шпалер прылады."</string>
-    <string name="permgrouplab_systemClock" msgid="406535759236612992">"Гадзіннік"</string>
-    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Змяніць час або часавы пояс прылады."</string>
-    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Радок стану"</string>
-    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Змяніць налады прылады ў радку стану."</string>
-    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Налады сінхранізацыі"</string>
-    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Доступ да налад сінхранізацыі."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Вашыя ўліковыя запісы"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Доступ да дзеючых уліковых запісаў."</string>
-    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Кіраванне апаратным забеспячэннем"</string>
-    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Прамы доступ да апаратнага забеспячэння з тэлефоннай трубкі."</string>
-    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Тэлефонныя выклікі"</string>
-    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Адсочваць, запісваць і апрацоўваць выклікі тэлефона."</string>
-    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Сістэмныя інструменты"</string>
-    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Ніжні ўзровень доступу і кіравання сістэмай."</string>
-    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Сродкі распрацоўкі"</string>
-    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Функцыi, патрэбныя толькі для распрацоўшчыкаў прыкладанняў."</string>
-    <string name="permgrouplab_display" msgid="4279909676036402636">"Карыстальніцкі інтэрфейс іншага прыкладання"</string>
-    <string name="permgroupdesc_display" msgid="6051002031933013714">"Уплыў карыстальніцкіх інтэрфейсаў іншых прыкладанняў."</string>
-    <string name="permgrouplab_storage" msgid="1971118770546336966">"Сховішча"</string>
-    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Атрымаць доступ да USB-назапашвальнiка."</string>
-    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Доступ да SD-карты."</string>
-    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Спецыяльныя магчымасці"</string>
-    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Функцыі, якія могуць запытаць дадатковыя тэхналогii."</string>
-    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Атрымайце змесцiва акна"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Вывучыце змесцiва акна, з якiм вы працуеце."</string>
-    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Уключыце Explore by Touch"</string>
-    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Элемент, да якiх дакраналiся, могуць быць агучаны, а экран будзе працаваць з жэстамi."</string>
-    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Уключыце паляпшэнне вэб-даступнасці"</string>
-    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Сцэнарыi могуць быць усталяваны, каб зрабіць змесцiва прыкладання больш даступным."</string>
-    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Глядзiце, што набiраеце"</string>
-    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Уключае ў сябе асабістыя дадзеныя, такія як нумары крэдытных карт і паролі."</string>
-    <string name="permlab_statusBar" msgid="7417192629601890791">"адключаць ці змяняць радок стану"</string>
-    <string name="permdesc_statusBar" msgid="8434669549504290975">"Дазваляе прыкладанням адключаць радок стану або дадаваць і выдаляць сістэмныя значкі."</string>
-    <string name="permlab_statusBarService" msgid="7247281911387931485">"радок стану"</string>
-    <string name="permdesc_statusBarService" msgid="716113660795976060">"Дазваляе прыкладанням быць радком стану."</string>
-    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"разгарнуць/згарнуць радок стану"</string>
-    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Дазваляе прыкладанню разгортваць ці згортваць радок стану."</string>
-    <!-- no translation found for permlab_install_shortcut (4279070216371564234) -->
-    <skip />
-    <!-- no translation found for permdesc_install_shortcut (8341295916286736996) -->
-    <skip />
-    <!-- no translation found for permlab_uninstall_shortcut (4729634524044003699) -->
-    <skip />
-    <!-- no translation found for permdesc_uninstall_shortcut (6745743474265057975) -->
-    <skip />
-    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"перанакіраванне зыходзячых выклікіаў"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Дазваляе прыкладанням апрацоўваць выходныя выклікі і змяняць набіраны нумар. Дзякуючы гэтаму дазволу прыкладаннi могуць адсочваць, перанакіроўваць ці прадухіляць выходныя выклікі."</string>
-    <string name="permlab_receiveSms" msgid="8673471768947895082">"атрыманне тэкставых паведамленняў (SMS)"</string>
-    <string name="permdesc_receiveSms" msgid="6424387754228766939">"Дазваляе прыкладанням атрымліваць і апрацоўваць SMS-паведамленні. Гэта значыць, што прыкладанне можа кантраляваць або выдаляць паведамленні, адпраўленыя на прыладу, не паказваючы іх вам."</string>
-    <string name="permlab_receiveMms" msgid="1821317344668257098">"атрыманне тэкставых паведамленняў (MMS)"</string>
-    <string name="permdesc_receiveMms" msgid="533019437263212260">"Дазваляе прыкладанням атрымліваць і апрацоўваць MMS-паведамленнi. Гэта значыць, што прыкладанне можа кантраляваць або выдаляць паведамленні, адпраўленыя на прыладу, не паказваючы іх вам."</string>
-    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"атрымліваць экстраныя трансляцыі"</string>
-    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Дазваляе прыкладанням атрымліваць і апрацоўваць экстраныя паведамленні. Гэты дазвол даступны толькі для сістэмных прыкладанняў."</string>
-    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"чытаць паведамленні базавай станцыі"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Дазваляе прыкладанню чытаць паведамленні базавай станцыі, атрыманыя прыладай. Папярэджанні базавай станцыі дасылаюцца ў некаторыя месцы, каб папярэдзіць вас аб надзвычайных сітуацыях. Шкоднасныя прыкладанні могуць уплываць на прадукцыйнасць ці працу прылады пры атрыманні паведамлення базавай станцыі аб надзвычайнай сітуацыі."</string>
-    <string name="permlab_sendSms" msgid="5600830612147671529">"адпраўляць SMS"</string>
-    <string name="permdesc_sendSms" msgid="7094729298204937667">"Дазваляе прыкладанне для адпраўкі SMS паведамленняў. Гэта можа прывесці да нечаканых абвінавачванняў. Шкоднасныя праграмы могуць каштаваць вам грошай на адпраўку паведамленняў без вашага пацвярджэння."</string>
-    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"адправiць мерапрыемства \"адказ праз паведамленне\""</string>
-    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"Прыкладанне зможа адпраўляць запыты ў іншыя прыкладанні для апрацоўкі паведамленняў пра мерапрыемствы туы \"рэагаваць-праз-паведамленне\" для ўваходных выклікаў."</string>
-    <string name="permlab_readSms" msgid="8745086572213270480">"чытанне сваiх тэкставых паведамленняў (SMS ці MMS)"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Дазваляе прыкладанню чытаць SMS-паведамленнi, якія захоўваюцца на планшэце ці SIM-карце. Гэта дазваляе прыкладанням чытаць ўсе SMS-паведамленні, незалежна ад змесцiва або прыватнасці."</string>
-    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Дазваляе прыкладанню чытаць SMS-паведамленні, якія захоўваюцца ў тэлефоне або на SIM-карце. Гэта дазваляе прыкладанням чытаць ўсе SMS-паведамленні, незалежна ад змесцiва або прыватнасці."</string>
-    <string name="permlab_writeSms" msgid="3216950472636214774">"рэдагаванне тэкставых паведамленняў (SMS ці MMS)"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Дазваляе прыкладанню запісваць дадзеныя ў SMS-паведамленні, якія захоўваюцца на планшэце або на SIM-карце. Шкоднасныя прыкладанні могуць выдаляць вашы паведамленні."</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Дазваляе прыкладанням запісваць дадзеныя ў SMS-паведамленні, якія захоўваюцца ў тэлефоне або на SIM-карце. Шкоднасныя прыкладанні могуць выдаляць вашы паведамленні."</string>
-    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"атрыманне тэкставых паведамленняў (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Дазваляе прыкладанням атрымліваць і апрацоўваць паведамленні WAP. Дзякуючы гэтаму дазволу можна кантраляваць або выдаляць паведамленні, пасланыя вам, не паказваючы іх."</string>
-    <string name="permlab_getTasks" msgid="6466095396623933906">"атрымаць запушчаныя прыкладанні"</string>
-    <string name="permdesc_getTasks" msgid="7454215995847658102">"Дазваляе прыкладанню атрымлiваць звесткi пра прыкладаннi, запушчаныя зараз i нядаўна. Прыкладанне можа знайсцi iнфармацыю пра тое, якiя прыкладаннi выкарыстоўваюцца на прыладзе."</string>
-    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"узаемадзеянне паміж карыстальнікамі"</string>
-    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Дазваляе прыкладанню выконваць дзеяннi сярод розных карыстальнiкаў прылады. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта, каб парушыць абарону памiж карыстальнiкамi."</string>
-    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"поўная ліцэнзія для ўзаемадзеяння паміж карыстальнiкамi"</string>
-    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"Дазваляе ўсе магчымыя ўзаемадзеяннi паміж карыстальнікамі."</string>
-    <string name="permlab_manageUsers" msgid="1676150911672282428">"кіраванне дадзенымi карыстальнікаў"</string>
-    <string name="permdesc_manageUsers" msgid="8409306667645355638">"Дазваляе прыкладанням кіраваць звесткамi карыстальнікаў на прыладзе, у тым ліку запытамi, працэсамi стварэння і выдалення."</string>
-    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"атрымаць падрабязныя дадзеныя пра запушчаныя прыкладаннi"</string>
-    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Дазваляе прыкладанню атрымліваць падрабязную інфармацыю пра бягучыя і нядаўна запушчаныя задачы. Шкоднасныя прыкладанні могуць атрымліваць асабістую інфармацыю пра іншыя прыкладаннi."</string>
-    <string name="permlab_reorderTasks" msgid="2018575526934422779">"змяніць парадак запушчаных прыкладанняў"</string>
-    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Дазваляе прыкладанню перамяшчаць заданні на ​​пярэдні план і ў фон. Шкоднасныя прыкладанні могуць прымусова рабіць сябе асноўнымі без вашага ведама."</string>
-    <string name="permlab_removeTasks" msgid="6821513401870377403">"спыніць запушчаныя прыкладанні"</string>
-    <string name="permdesc_removeTasks" msgid="1394714352062635493">"Дазваляе прыкладанням выдаляць заданні і спыняць прыкладанні, якія іх выкарыстоўваюць. Шкоднасныя прыкладаннi могуць перашкодзiць працы іншых прыкладанняў."</string>
-    <!-- no translation found for permlab_manageActivityStacks (7391191384027303065) -->
-    <skip />
-    <!-- no translation found for permdesc_manageActivityStacks (1615881933034084440) -->
-    <skip />
-    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"пачынаць любы працэс"</string>
-    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"Дазваляе прыкладанню пачынаць любы працэс, незалежна ад абароны дазволам ці стану экспарту."</string>
-    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"усталяваць сумяшчальнасць экранаў"</string>
-    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Дазваляе прыкладанню кіраваць рэжымам сумяшчальнасці экранаў іншых прыкладанняў. Шкоднаснае ПЗ можа перашкодзiць працы іншых прыкладанняў."</string>
-    <string name="permlab_setDebugApp" msgid="3022107198686584052">"уключыць адладку прыкладання"</string>
-    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Дазваляе прыкладанням уключаць адладку для іншага прыкладання. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб спыняць іншыя прыкладанні."</string>
-    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"змена налад адлюстравання ў сістэме"</string>
-    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Дазваляе прыкладанням змяняць бягучую канфігурацыю, напрыклад мову цi агульны памер шрыфта."</string>
-    <string name="permlab_enableCarMode" msgid="5684504058192921098">"дазваляць рэжым \"У аўтамабілі\""</string>
-    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Дазваляе прыкладанню ўключаць рэжым гучнай сувязi."</string>
-    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"закрыццё іншых прыкладанняў"</string>
-    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Дазваляе прыкладанню завяршаць фонавыя працэсы іншых прыкладанняў. Гэта можа спынiць працу iншых прыкладанняў."</string>
-    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"прымусова спыніць іншыя прыкладанні"</string>
-    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Дазваляе прыкладанням прымусова спыняць іншыя прыкладанні."</string>
-    <string name="permlab_forceBack" msgid="652935204072584616">"прымусова закрыць прыкладанне"</string>
-    <string name="permdesc_forceBack" msgid="3892295830419513623">"Дазваляе прыкладанням прымусова закрываць любы асноўны працэс. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_dump" msgid="1681799862438954752">"атрымліваць унутраны стан сістэмы"</string>
-    <string name="permdesc_dump" msgid="1778299088692290329">"Дазваляе прыкладанням атрымліваць інфармацыю аб унутраным стане сістэмы. Шкоднасныя прыкладанні могуць атрымліваць шырокі спектр прыватных дадзеных і дадзеных, прызначаных для забеспячэння бяспекі інфармацыі, якія звычайна ім не патрэбны."</string>
-    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"атрыманне зместу экрана"</string>
-    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дазваляе прыкладанням атрымліваць змесціва актыўнага акна. Шкоднасныя прыкладанні могуць атрымліваць усё змесціва акна і разглядаць увесь яго тэкст, акрамя пароляў."</string>
-    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"часова ўключыць даступнасць"</string>
-    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Дазваляе прыкладанню часова ўключаць даступнасць прылады. Шкоднасныя прыкладаннi могуць уключыць даступнасць без згоды карыстальніка."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"атрымаць звесткi пра акно"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Дазваляе прыкладанням вымаць iнфармацыю пра вокны з iнструмента кiравання вокнамi. Шкоднасныя прыкладаннi могуць вымаць iнфармацыю, якая прызначана для ўнутранага выкарыстання ў сiстэме."</string>
-    <string name="permlab_filter_events" msgid="8675535648807427389">"фільтр падзей"</string>
-    <string name="permdesc_filter_events" msgid="8006236315888347680">"Дазваляе прыкладанню рэгiстраваць фiльтр уводу, якi перадае паток усiх дзеянняў карыстальнiка, перш чым будуць адпраўленыя звесткi пра iх. Шкоднасныя прыкладаннi могуць кантраляваць iнтэрфейс без умяшальнiцтва."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"павялічыць адлюстраванне"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Прыкладанне зможа павялічыць ўтрыманне дысплея. Шкоднасныя праграмы могуць пераўтварыць змесціва дысплея такім чынам, што яно зробіць прыладу непрыдатнай для выкарыстання."</string>
-    <string name="permlab_shutdown" msgid="7185747824038909016">"частковае адключэнне"</string>
-    <string name="permdesc_shutdown" msgid="7046500838746291775">"Спыняе дзейнасць менеджэра. Не выконвае поўнае адключэнне."</string>
-    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"прадухіляць пераключэнне прыкладанняў"</string>
-    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Не дазваляе карыстальніку пераходзіць да іншага прыкладання."</string>
-    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"атрымаць бягучую інфармацыю прыкладання"</string>
-    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Дазваляе ўладальніку атрымлiваць асабістую інфармацыю аб бягучым прыкладаннi на пярэднім плане экрана."</string>
-    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"адсочваць і кантраляваць запуск усіх прыкладанняў"</string>
-    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Дазваляе прыкладанню сачыць і кантраляваць, як сістэма запускае працэсы. Шкоднасныя прыкладанні могуць цалкам парушыць працу сістэмы. Гэты дазвол патрэбны толькі для распрацоўкі, ніколі для звычайнага выкарыстання."</string>
-    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"трансляваць паведамленні аб выдаленні пакетаў"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Дазваляе прыкладанням перадаваць апавяшчэнне, што пакет прыкладанняў быў выдалены. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб спыняць любыя іншыя запушчаныя прыкладанні."</string>
-    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"перасылаць трансляцыі, атрыманыя па SMS"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Дазваляе прыкладанням перадаваць апавяшчэнне пра атрыманне SMS-паведамлення. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб падрабляць уваходныя SMS-паведамленні."</string>
-    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"пасылаць сігнал WAP-PUSH-received"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Дазваляе прыкладанням перадаваць апавяшчэнне, што паведамленне WAP PUSH не было атрымана. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб падрабляць атрыманне MMS-паведамлення або непрыкметна замяняць змесціва любой вэб-старонкі на шкоднасную версiю."</string>
-    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"абмяжоўваць колькасць запушчаных працэсаў"</string>
-    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Дазваляе прыкладанням кантраляваць максімальную колькасць запушчаных працэсаў. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"прымусовае закрыццё фонавых прыкладанняў"</string>
-    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Дазваляе прыкладанням кантраляваць, ці будуць працэсы заўсёды завяршацца, як толькі яны пераходзяць у фонавы рэжым. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_batteryStats" msgid="2789610673514103364">"чытаць статыстыку батарэі"</string>
-    <string name="permdesc_batteryStats" msgid="5897346582882915114">"Прыкладанне можа счытваць бягучыя звесткi пры нiзкi зарад акумулятара. Прыкладанне можа знайсцi падрабязную iнфармацы. пра прыкладаннi, якiя вы выкарыстоўваеце."</string>
-    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"змяняць статыстыку батарэі"</string>
-    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Дазваляе прыкладанням змяняць сабраную статыстыку батарэi. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"атрымлiваць статыстыку выкарыстання прыкладання"</string>
-    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Дазваляе прыкладанню атрымлiваць сабраную статыстыку выкарыстання прыкладання. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"змяняць статыстыку выкарыстання прыкладання"</string>
-    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Дазваляе прыкладанню змяняць сабраную статыстыку выкарыстання прыкладання. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_backup" msgid="470013022865453920">"кантраляваць рэзервовае капіяванне і аднаўленне сістэмы"</string>
-    <string name="permdesc_backup" msgid="6912230525140589891">"Дазваляе прыкладанням кантраляваць рэзервовае капіяванне сістэмы і механізм аднаўлення. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"пацверджанне поўнага рэзервовага капіявання або аднаўлення"</string>
-    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Дазваляе прыкладанням запускаць поўны інтэрфейс карыстальніка пацвярджэння рэзервавання. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"паказваць несанкцыянаваныя вокны"</string>
-    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Дазваляе прыкладанням ствараць вокны, прызначаныя для выкарыстання ўнутраным інтэрфейсам карыстальніка сістэмы. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"прыарытэт перад іншымі прыкладаннямі"</string>
-    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Прыкладанне можа з\'яўляцца паверх iншых прыкладанняў. Яны могуць шкодзiць адно аднаму падчас працы iнтэрфейсаў або змяняць тое, што вы бачыце ў iншых прыкладаннях."</string>
-    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"зменяць агульную хуткасць анімацыі"</string>
-    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Дазваляе прыкладанням у любы час змяняць агульную хуткасць анімацыі (хутчэй ці павольней)."</string>
-    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"кіраваць ключамі прыкладання"</string>
-    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Дазваляе прыкладанням ствараць  сваімі ўласнымі ключамі, абыходзячы іх звычайны Z-парадак. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_freezeScreen" msgid="4708181184441880175">"замарозіць экран"</string>
-    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Прыкладанне зможа часова замарозіць экран для пераходу ў поўнаэкранны рэжым."</string>
-    <string name="permlab_injectEvents" msgid="1378746584023586600">"націскаць клавішы і кнопкі кіравання"</string>
-    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Дазваляе прыкладанням ажыццяўляць свае ўласныя падзеі ўводу (націску клавіш і г.д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб захапіць кіраванне планшэтам."</string>
-    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Дазваляе прыкладанню ажыццяўляць свае ўласныя падзеі ўводу (націску клавіш і г. д.) для іншых прыкладанняў. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб захапіць кіраванне тэлефонам."</string>
-    <string name="permlab_readInputState" msgid="469428900041249234">"запісваць, што вы друкуеце, і дзеянні, якія вы прадпрымаеце"</string>
-    <string name="permdesc_readInputState" msgid="8387754901688728043">"Дазваляе прыкладанням адсочваць клавішы, якія вы націскаеце, нават падчас узаемадзеяння з іншым прыкладаннем (напрыклад, пры ўводзе пароля). Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"звязацца з метадам уводу"</string>
-    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню метада ўводу. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"прывязацца да службы доступу"</string>
-    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню службы доступу. Не патрабуецца для звычайных прыкладанняў."</string>
-    <!-- no translation found for permlab_bindPrintService (8462815179572748761) -->
-    <skip />
-    <!-- no translation found for permdesc_bindPrintService (7960067623209111135) -->
-    <skip />
-    <!-- no translation found for permlab_bindPrintSpoolerService (6807762783744125954) -->
-    <skip />
-    <!-- no translation found for permdesc_bindPrintSpoolerService (3680552285933318372) -->
-    <skip />
-    <!-- no translation found for permlab_bindNfcService (2752731300419410724) -->
-    <skip />
-    <!-- no translation found for permdesc_bindNfcService (6120647629174066862) -->
-    <skip />
-    <string name="permlab_bindTextService" msgid="7358378401915287938">"звязаць з тэкставай службай"</string>
-    <string name="permdesc_bindTextService" msgid="8151968910973998670">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню тэкставай паслугі (напрыклад, SpellCheckerService). Ніколі не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_bindVpnService" msgid="4708596021161473255">"звязвацца з VPN сэрвісам"</string>
-    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Дазваляе ўладальніку звязвацца з інтэрфейсам службы VPN вышэйшага ўзроўню. Не патрэбна для звычайных прыкладанняў."</string>
-    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"прывязаць да шпалер"</string>
-    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Дазваляе ўладальніку ўсталёўваць прывязку да інтэрфейсу шпалер верхняга ўзроўню. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"прывязаць да службы віджэту"</string>
-    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Дазваляе ўладальніку прывязвацца да інтэрфейсу верхняга ўзроўню службы віджэта. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"узаемадзейнічаць з адміністратарам прылады"</string>
-    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Дазваляе ўладальніку адпраўляць намеры да адміністратара прылады. Не патрабуецца для звычайных прыкладанняў."</string>
-    <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) -->
-    <skip />
-    <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) -->
-    <skip />
-    <string name="permlab_setOrientation" msgid="3365947717163866844">"змяняць арыентацыю экрана"</string>
-    <string name="permdesc_setOrientation" msgid="3046126619316671476">"Дазваляе прыкладанням змяняць паварот экрана ў любы час. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"змена хутк. перамяшч. ўказ."</string>
-    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"Дазваляе прыкладанням змяняць хуткасць курсору мышы або трэкпада ў любы час. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"змяніць раскладку клавіятуры"</string>
-    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"Дазваляе прыкладанню змяняць раскладку клавіятуры. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"адправіць сігналы Linux да прыкладанняў"</string>
-    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Дазваляе прыкладанням запытваць адпраўку падаваемага сігнала для ўсiх пастаянных працэсаў."</string>
-    <string name="permlab_persistentActivity" msgid="8841113627955563938">"прымусіць прыкладанне працаваць заўсёды"</string>
-    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Дазваляе прыкладанню захоўваць некаторыя пастаянныя часткi ў памяцi. Гэта можа абмежаваць аб\'ём памяці, даступнай для іншых прыкладанняў, i запаволiць працу планшэта."</string>
-    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Дазваляе прыкладанню захоўваць некаторыя пастаянныя часткi ў памяцi. Гэта можа абмежаваць аб\'ём памяці, даступнай для іншых прыкладанняў, i запаволiць працу тэлефона."</string>
-    <string name="permlab_deletePackages" msgid="184385129537705938">"выдаліць прыкладанні"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"Дазваляе прыкладанню выдаляць пакеты Android. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб выдаляць важныя прыкладанні."</string>
-    <string name="permlab_clearAppUserData" msgid="274109191845842756">"выдаліць дадзеныя іншых прыкладанняў"</string>
-    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Дазваляе прыкладанням выдаляць дадзеныя карыстальніка."</string>
-    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"выдаліць кэш-памяць іншых прыкладанняў"</string>
-    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Дазваляе прыкладанню выдаляць файлы кэш-памяці."</string>
-    <string name="permlab_getPackageSize" msgid="7472921768357981986">"вымерыць прастору для захоўвання прыкладання"</string>
-    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Дазваляе прыкладанням атрымліваць яго код, дадзеныя і аб\'ём кэш-памяці"</string>
-    <string name="permlab_installPackages" msgid="2199128482820306924">"усталяваць прыкладанні непасрэдна"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"Дазваляе прыкладанням ксталёўваць новыя або абноўленыя пакеты Android. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб дадаваць новыя прыкладаннi з дазволамі адвольнай ступені."</string>
-    <string name="permlab_clearAppCache" msgid="7487279391723526815">"выдаліць усе дадзеныя з кэш-памяці прыкладання"</string>
-    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Прыкладанне дазваляе вызваляць сховiшча планшэта, выдаляючы файлы з дырэкторый кэша iншых прыкладанняў. Гэта можа прывесцi да таго, што iншыя прыкладаннi пачнуць працаваць павольней, таму што iм трэба будзе паўторна атрымлiваць свае дадзеныя."</string>
-    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Прыкладанне дазваляе вызваляць сховiшча тэлефона, выдаляючы файлы з дырэкторый кэша iншых прыкладанняў. Гэта можа прывесцi да таго, што iншыя прыкладаннi пачнуць працаваць павольней, таму што iм трэба будзе паўторна атрымлiваць свае дадзеныя."</string>
-    <string name="permlab_movePackage" msgid="3289890271645921411">"перамясціць рэсурсы прыкладання"</string>
-    <string name="permdesc_movePackage" msgid="319562217778244524">"Дазваляе прыкладанням перамяшчаць рэсурсы прыкладання з унутраных на знешнія носьбіты і наадварот."</string>
-    <string name="permlab_readLogs" msgid="6615778543198967614">"чытаць канфідэнцыйныя дадзеныя дзённiка"</string>
-    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Дазваляе прыкладанням счытваць розныя файлы сiстэмнай гiсторыi. Такiм чынам, можна выявiць агульную інфармацыю пра тое, што вы робіце з планшэтам, у тым ліку, магчыма, асабістыя або канфiдэнцыйныя звесткi."</string>
-    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Дазваляе прыкладанню счытваць розныя сістэмныя файлы гiсторый. Гэта дазваляе атрымліваць агульную інфармацыю аб тым, як выкарыстоўваецца тэлефон, у тым ліку, магчыма, асабістую або прыватную інфармацыю."</string>
-    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"для прайгравання выкарыстоўваць любы мультымедыйны дэкодэр"</string>
-    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Дазваляе прыкладанням выкарыстоўваць любы ўсталяваны iнструмент для мультымедыйнага дэкадавання, каб прайграць."</string>
-    <!-- no translation found for permlab_manageCaCertificates (1678391896786882014) -->
-    <skip />
-    <!-- no translation found for permdesc_manageCaCertificates (4015644047196937014) -->
-    <skip />
-    <string name="permlab_diagnostic" msgid="8076743953908000342">"чытаць/запісваць на дыягнастычныя рэсурсы"</string>
-    <string name="permdesc_diagnostic" msgid="6608295692002452283">"Дазваляе прыкладанням счытваць і запісваць любы рэсурс, які належыць дыягнастычнай групе, напрыклад файлы распрацоўшчыка ў тэчцы /dev. Патэнцыйна гэта можа паўплываць на стабільнасць і бяспеку сістэмы. Гэта павінна выкарыстоўвацца ТОЛЬКІ для апаратнай дыягностыкі вытворцам або аператарам."</string>
-    <string name="permlab_changeComponentState" msgid="6335576775711095931">"уключыць або адключыць кампаненты прыкладання"</string>
-    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Дазваляе прыкладанням змяняць вызначэнне таго, будзе ўключаны кампанент іншага прыкладання ці не. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта для адключэння важных магчымасцяў планшэта. З гэтым дазволам трэба быць уважлівым, бо можна прывесці кампаненты прыкладання ў непрыдатны, супярэчлівы або няўстойлівы стан."</string>
-    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Дазваляе прыкладанням змяняць вызначэнне таго, будзе ўключаны кампанент іншага прыкладання ці не. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта для адключэння важных магчымасцяў тэлефона. З гэтым дазволам трэба быць уважлівым, бо можна прывесці кампаненты прыкладання ў непрыдатны, супярэчлівы або няўстойлівы стан."</string>
-    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"прадаставiць або адмяніць дазвол"</string>
-    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Дазваляе прыкладанню прадастаўляць або адмяняць пэўныя дазволы для гэтага або іншых прыкладанняў. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта, каб атрымаць доступ да функцый, якiя вы iм не прадаставiлi."</string>
-    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"усталяваць пажаданыя прыкладанні"</string>
-    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Дазваляе прыкладанням змяняць вашы пажаданыя прыкладанні. Шкоднасныя прыкладанні могуць непрыкметна змяняць запушчаныя прыкладанні, падмяняючы існуючыя прыкладанні, каб збiраць вашы асабістыя дадзеныя."</string>
-    <string name="permlab_writeSettings" msgid="2226195290955224730">"змена сістэмных налад"</string>
-    <string name="permdesc_writeSettings" msgid="7775723441558907181">"Дазваляе прыкладаннем змяняць дадзеныя налад сістэмы. Шкоднасныя прыкладанні могуць пашкодзіць канфігурацыю вашай сістэмы."</string>
-    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"змяняць параметры бяспекі сістэмы"</string>
-    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Дазваляе прыкладанням змяняць дадзеныя параметраў бяспекі сістэмы. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_writeGservices" msgid="2149426664226152185">"змяняць карту службаў Google"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"Дазваляе прыкладанням змяняць карту службаў Google. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"запуск пры загрузцы сістэмы"</string>
-    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Дазваляе прыкладанню самастойна запускацца, як толькі сістэма будзе цалкам загружана. Гэта можа павялічыць час запуску планшэту і дазволіць прыкладанню запаволіць увесь планшэт, прымушаючы яго працаваць заўсёды."</string>
-    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Дазваляе прыкладанням самастойна запускацца, як толькі сістэма будзе цалкам запушчана. Гэта можа павялічыць час запуску тэлефону і дазволіць прыкладанню запаволіць увесь тэлефон, прымушаючы яго працаваць заўсёды."</string>
-    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"адпраўляць нетэрмiновую рассылку"</string>
-    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Дазваляе прыкладанням адпраўляць далейшыя звязаныя перадачы, якія застаюцца пасля заканчэння асноўнай перадачы. Злоўжыванне можа зрабіць працу планшэта павольнай або няўстойлівай, прымушаючы яго выкарыстоўваць занадта шмат памяці."</string>
-    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Дазваляе прыкладанню адпраўляць далейшыя звязаныя перадачы, якія застаюцца пасля заканчэння асноўнай перадачы. Злоўжыванне можа зрабіць працу тэлефона павольнай або няўстойлівай, прымушаючы яго выкарыстоўваць занадта шмат памяці."</string>
-    <string name="permlab_readContacts" msgid="8348481131899886131">"чытанне кантактаў"</string>
-    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Дазваляе прыкладанням счытваць дадзеныя аб кантактах, якія захоўваюцца на планшэце, у тым ліку звесткi пра тое, як часта вы выклiкалi канкрэтных абанентаў, пiсалi iм па электроннай пошце або кантактавалi іншымi спосабамі. Дзякуючы гэтаму дазволу прыкладаннi могуць захоўваць дадзеныя гiсторыi выклiкаў, а шкоднасныя прыкладаннi могуць адпраўляць кантактныя дадзеныя без вашага ведама."</string>
-    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Дазваляе прыкладанням счытваць дадзеныя аб кантактах, якія захоўваюцца на тэлефоне, у тым ліку звесткi пра частату, з якой вы выклiкалi iх, пiсалi iм па электроннай пошце ці кантактавалi іншым спосабам. Дзякуючы гэтаму дазволу прыкладаннi могуць захоўваць дадзеныя гiсторыi выклiкаў, а шкоднасныя прыкладаннi могуць адпраўляць кантактныя дадзеныя без вашага ведама."</string>
-    <string name="permlab_writeContacts" msgid="5107492086416793544">"змена кантактаў"</string>
-    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Дазваляе прыкладанням змяняць дадзеныя аб кантактах, якія захоўваюцца на планшэце, у тым ліку частата, з якой вы выклiкалi асоб, пiсалi па электроннай пошце ці іншым спосабам кантактавалi з iмі. З гэтым дазволам прыкладаннi змогуць выдаляць кантактныя дадзеныя."</string>
-    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Дазваляе прыкладанням змяняць дадзеныя аб кантактах, якія захоўваюцца на тэлефоне, у тым ліку частата, з якой вы выклiкалi асоб, пiсалi па электроннай пошце ці іншым спосабам кантактавалi з iмі. З гэтым дазволам прыкладаннi змогуць выдаляць кантактныя дадзеныя."</string>
-    <string name="permlab_readCallLog" msgid="3478133184624102739">"чытанне гiсторыi выклікаў"</string>
-    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Дазваляе прыкладанням чытаць гiсторыю выклiкаў планшэта, у тым лiку дадзеныя пра ўваходныя i выходныя выклiкi. Дзякуючы гэтаму дазволу прыкладаннi могуць захоўваць дадзеныя гiсторыi выклiкаў, а шкоднасныя прыкладаннi могуць адпраўляць гiсторыю выклiкаў без вашага ведама."</string>
-    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Дазваляе прыкладанням чытаць гiсторыю выклiкаў тэлефона, у тым лiку дадзеныя пра ўваходныя i выходныя выклiкi. Дзякуючы гэтаму дазволу прыкладаннi могуць захоўваць дадзеныя гiсторыi выклiкаў, а шкоднасныя прыкладаннi могуць адпраўляць гiсторыю выклiкаў без вашага ведама."</string>
-    <string name="permlab_writeCallLog" msgid="8552045664743499354">"запіс гiсторыi выклікаў"</string>
-    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Дазваляе прыкладанню змяняць гiсторыю выклiкаў планшэта, у тым лiку дадзеныя пра ўваходныя i зыходныя выклiкi. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта, каб выдаляць або змяняць гiсторыю выклікаў."</string>
-    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Дазваляе прыкладанням змяняць гiсторыю выклiкаў тэлефону, у тым лiку дадзеныя пра ўваходныя і зыходныя выклiкi. Шкоднасныя прыкладаннi могуць выкарыстоўваць гэта, каб выдаляць або змяняць гiсторыю выклікаў."</string>
-    <string name="permlab_readProfile" msgid="4701889852612716678">"чытанне сваёй кантактнай карты"</string>
-    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Дазваляе прыкладанням счытваць асабістую інфармацыю ў профілях, якая захоўваецца на вашай прыладзе, напрыклад ваша імя і кантактную інфармацыю. Гэта значыць, што прыкладанне можа ідэнтыфікаваць вас і адпраўляць інфармацыю вашага профілю трэцім асобам."</string>
-    <string name="permlab_writeProfile" msgid="907793628777397643">"змена сваёй кантактнай карты"</string>
-    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Дазваляе прыкладанням змяняць ці дадаваць асабістую інфармацыю профіляў, захаваных на прыладзе, напрыклад ваша імя і кантактную інфармацыю. Такім чынам, прыкладанне можа ідэнтыфікаваць вас і адпраўляць інфармацыю вашага профіля трэцім асобам."</string>
-    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"чытаць мой паток абнаўленняў"</string>
-    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Дазваляе прыкладанню атрымлiваць доступ да абнаўленняў у сацыяльных службах ад вас і вашых сяброў. Будзьце асцярожны падчас адпраўкi iнфармацыi – гэта дазваляе прыкладанню чытаць сувязі паміж вамі і вашымі сябрамі ў сацыяльных сетках, незалежна ад прыватнасці. Увага: гэты дазвол не распаўсюджваецца на ўсе сацыяльныя сеткi."</string>
-    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"запісаць у мой паток абнаўленняў"</string>
-    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Дазваляе прыкладанню адлюстроўваць абнаўленнi  ад вашых сяброў у сацыяльных службах. Будзьце асцярожны падчас абмену iнфармацыяй: гэта прыкладанне адпраўляе паведамленнi, якiя падобны на тое, што iх даслалi сябры. Увага: гэты дазвол не распаўсюджваееца на ўсе сацыяльныя сеткi."</string>
-    <string name="permlab_readCalendar" msgid="5972727560257612398">"чытаць падзеі календара, а таксама прыватную інфармацыю"</string>
-    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Дазваляе прыкладанню чытаць усе мерапрыемствы з календара, захаваныя на вашым планшэце, у тым ліку з сябрамi або калегамi. Гэта дазваляе прыкладанню адпраўляць дадзеныя календара, нягледзячы на прыватнасць i адчувальнасць."</string>
-    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Дазваляе прыкладанню чытаць усе мерапрыемствы з календара, захаваныя на вашым тэлефоне, у тым ліку з сябрамi або калегамi. Гэта дазваляе прыкладанню адпраўляць дадзеныя календара, нягледзячы на прыватнасць i адчувальнасць."</string>
-    <string name="permlab_writeCalendar" msgid="8438874755193825647">"дадаваць ці змяняць падзеі календара і адпраўляць электронную пошту да гасцей без ведама ўладальнікаў"</string>
-    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Дазваляе прыкладанню дадаваць, выдаляць, змяняць мерапрыемствы, якія можна рэдагаваць на планшэце, у тым ліку сустрэчы с сябрамi i калегамi. Гэта дазваляе прыкладанню адпраўляць паведамленні ад уладальнiкаў календароў або змяняць мерапрыемствы без ведама уладальнiкаў."</string>
-    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"Дазваляе прыкладанню дадаваць, выдаляць, змяняць мерапрыемствы, якія можна рэдагаваць на тэлефоне, у тым ліку сустрэчы с сябрамi i калегамi. Гэта дазваляе прыкладанню адпраўляць паведамленні ад уладальнiкаў календароў або змяняць мерапрыемствы без ведама уладальнiкаў."</string>
-    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"макет крыніц месцазнаходжання для тэставання"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Стварыць макет крыніц месцазнаходжання для тэставання і ўсталёўкі новага правайдара месцазнаходжання. Гэта дазваляе прыкладанню перавызначыць месцазнаходжанне і/або статус, вернуты іншымi крыніцамi, напрыклад геапазiцыйнай службай i правайдарамi месцазнаходжання."</string>
-    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"доступ да дадатковых камандаў пастаўшчыка месцазнаходжання"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Дазваляе прыкладанням атрымліваць доступ да дадатковых каманд правайдара месцазнаходжання. Гэта можа дазволiць прыкладанню ўмешвацца ў працу GPS або іншых крыніц месцазнаходжання."</string>
-    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"дазвол на ўсталяванне пастаўшчыка месцазнаходжання"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Стварыць макет крыніц месцазнаходжання для тэставання і ўсталёўкі новага правайдара месцазнаходжання. Гэта дазваляе прыкладанню перавызначыць месцазнаходжанне і/або статус, вернуты іншымi крыніцамi, напрыклад геапазiцыйнай службай i правайдарамi месцазнаходжання."</string>
-    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"дакладнае месцазнаходжанне (на аснове GPS і сеткі)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Дазваляе прыкладанню вызначаць дакладнае месцазнаходжанне з дапамогай GPS або сеткавых крынiц месцазнаходжання, напрыклад веж сотавай сувязi i Wi-Fi. Гэтыя службы вызначэння месцазнаходжання павiнны быць уключаны i даступныя для вашай прылады i прыкладання. Прыкладаннi могуць выкарыстоўваць гэта, каб вызначаць ваша прыблiзнае месцазнаходжанне, а таксама спажываць дадатковае сiлкаванне."</string>
-    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"прыблізнае месцазнаходжанне (па дадзеных сеткі)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Дазваляе прыкладанню вызначаць прыблiзнае месцазнаходжанне. Гэта месцазнаходжанне вызначаецца спецыяльнымi службамi з выкарыстаннем сеткавых крынiц месцазнаходжання, напрыклад веж сотавай сувязi i Wi-Fi. Службы вызначэння месцазнаходжання павiнны быць уключаны i даступныя для вашай прылады i прыкладання. Прыкладаннi могуць выкарыстоўваць гэта, каб вызначаць ваша прыблiзнае месцазнаходжанне."</string>
-    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"доступ да SurfaceFlinger"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дазваляе прыкладанням выкарыстоўваць нізкаўзроўневыя функцыі SurfaceFlinger."</string>
-    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"чытаць буфер кадраў"</string>
-    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дазваляе прыкладанням счытваць змесціва буферу кадра."</string>
-    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"налада дысплеяў Wi-Fi"</string>
-    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Дазволiць прыкладанню наладжвацца i падключацца да дысплеяў Wi-Fi."</string>
-    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"кіраванне дысплеямi Wi-Fi"</string>
-    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Прыкладанне зможа кіраваць нізкім узроўнем функцый дысплеяў Wi-Fi."</string>
-    <!-- no translation found for permlab_captureAudioOutput (6857134498402346708) -->
-    <skip />
-    <!-- no translation found for permdesc_captureAudioOutput (6210597754212208853) -->
-    <skip />
-    <!-- no translation found for permlab_captureAudioHotword (1890553935650349808) -->
-    <skip />
-    <!-- no translation found for permdesc_captureAudioHotword (9151807958153056810) -->
-    <skip />
-    <!-- no translation found for permlab_captureVideoOutput (2246828773589094023) -->
-    <skip />
-    <!-- no translation found for permdesc_captureVideoOutput (359481658034149860) -->
-    <skip />
-    <!-- no translation found for permlab_captureSecureVideoOutput (7815398969303382016) -->
-    <skip />
-    <!-- no translation found for permdesc_captureSecureVideoOutput (2779793064709350289) -->
-    <skip />
-    <!-- no translation found for permlab_mediaContentControl (8749790560720562511) -->
-    <skip />
-    <!-- no translation found for permdesc_mediaContentControl (1637478200272062) -->
-    <skip />
-    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"змяняць налады аудыё"</string>
-    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дазваляе прыкладанням змяняць глабальныя налады гуку, такія як моц і тое, што дынамік выкарыстоўваецца для выхаду."</string>
-    <string name="permlab_recordAudio" msgid="3876049771427466323">"запісваць аўдыё"</string>
-    <string name="permdesc_recordAudio" msgid="4906839301087980680">"Дазваляе прыкладанню запісваць аўдыё з дапамогай мікрафона. Дзякуючы гэтаму дазволу прыкладаннi могуць запiсваць аўдыё ў любы час без вашага пацвярджэння."</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"рабіць фатаграфіі і відэа"</string>
-    <string name="permdesc_camera" msgid="8497216524735535009">"Дазваляе прыкладанню рабiць фотаздымкi і здымаць відэа з дапамогай камеры. Дзякуючы ггэтаму дазволу прыкладанне можа ў любы час выкарыстоўваць камеру без вашага пацверджання."</string>
-    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"адключыць святлодыёдны індыкатар перадачы, калі камера выкарыстоўваецца"</string>
-    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Дазваляе папярэдне ўсталяванаму сістэмнаму прыкладанню адключыць святлодыёдны індыкатар працы камеры."</string>
-    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"цалкам адключыць планшэт"</string>
-    <string name="permlab_brick" product="default" msgid="8337817093326370537">"цалкам адключаць тэлефон"</string>
-    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Дазваляе прыкладанням цалкам адключаць планшэт. Гэта вельмі небяспечна."</string>
-    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Дазваляе прыкладанням цалкам адключаць тэлефон. Гэта вельмі небяспечна."</string>
-    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"прымусовая перазагрузка планшэта"</string>
-    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"прымусова перазагружаць тэлефон"</string>
-    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Дазваляе прыкладанням прымусова перазагружаць планшэт."</string>
-    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Дазваляе прыкладанням прымусова перазагружаць тэлефон."</string>
-    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"файлавая сіст. USB-назапашв."</string>
-    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"доступ да файлавай сістэмы SD-карты"</string>
-    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Дазваляе прыкладанням падключаць і адключаць файлавыя сістэмы для здымных назапашвальнікаў."</string>
-    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"выдаленне дадзеных з USB-назапашвальніка"</string>
-    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"выдаленне дадзеных з SD-карты"</string>
-    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Дазваляе прыкладанням фарматаваць здымны назапашвальнiк."</string>
-    <string name="permlab_asec_access" msgid="3411338632002193846">"атрымаць інфармацыю аб унутранай памяці"</string>
-    <string name="permdesc_asec_access" msgid="3094563844593878548">"Дазваляе прыкладанню атрымліваць інфармацыю пра ўнутраную памяць."</string>
-    <string name="permlab_asec_create" msgid="6414757234789336327">"стварыць унутраную памяць"</string>
-    <string name="permdesc_asec_create" msgid="4558869273585856876">"Дазваляе прыкладанням ствараць унутраную памяць."</string>
-    <string name="permlab_asec_destroy" msgid="526928328301618022">"знішчыць унутраную памяць"</string>
-    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Дазваляе прыкладанням выдаляць унутраную памяць."</string>
-    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"падключэнне/адключэнне ўнутранай памяці"</string>
-    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Дазваляе прыкладанням падлучаць i адлучаць унутраную памяць."</string>
-    <string name="permlab_asec_rename" msgid="7496633954080472417">"перайменаваць унутраную памяць"</string>
-    <string name="permdesc_asec_rename" msgid="1794757588472127675">"Дазваляе прыкладанням змяняць імя ўнутранай памяці."</string>
-    <string name="permlab_vibrate" msgid="7696427026057705834">"кіраванне вібрацыяй"</string>
-    <string name="permdesc_vibrate" msgid="6284989245902300945">"Дазваляе прыкладанням кіраваць вібрацыяй."</string>
-    <string name="permlab_flashlight" msgid="2155920810121984215">"кіраваць ўспышкай"</string>
-    <string name="permdesc_flashlight" msgid="6522284794568368310">"Дазваляе прыкладанню кіраваць ліхтарыкам."</string>
-    <string name="permlab_manageUsb" msgid="1113453430645402723">"кіраваць спісам пажаданых і дазволеных USB-прылад"</string>
-    <string name="permdesc_manageUsb" msgid="7776155430218239833">"Дазваляе прыкладанням кіраваць наладамі і дазволамі USB-прылад."</string>
-    <string name="permlab_accessMtp" msgid="4953468676795917042">"рэалізаваць пратакол MTP"</string>
-    <string name="permdesc_accessMtp" msgid="6532961200486791570">"Дазваляе атрымаць доступ да драйвер ядра MTP, каб рэалізаваць USB-пратакол MTP."</string>
-    <string name="permlab_hardware_test" msgid="4148290860400659146">"тэставаць апаратнае забеспячэнне"</string>
-    <string name="permdesc_hardware_test" msgid="6597964191208016605">"Дазваляе прыкладанням кіраваць рознымі перыферыйнымі прыладамі для тэставання апаратнага абсталявання."</string>
-    <string name="permlab_callPhone" msgid="3925836347681847954">"непасрэдна набіраць тэлефонныя нумары"</string>
-    <string name="permdesc_callPhone" msgid="3740797576113760827">"Дазваляе прыкладанням званiць на тэлефонныя нумары без вашага ўмяшання. Гэта можа прывесці да нечаканага спагнання сродкаў або званкоў. Звярніце ўвагу, што прыкладанне не можа рабiць экстраныя выклікi. Шкоднасныя прыкладаннi могуць спаганяць з вас сродкi, робячы званкі без вашага пацверджання."</string>
-    <string name="permlab_callPrivileged" msgid="4198349211108497879">"непасрэдна выклікаць любыя тэлефонныя нумары"</string>
-    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Дазваляе прыкладанню тэлефанаваць на любы тэлефонны нумар, у тым лiку на экстраныя нумары, без вашага ведама. Шкоднасныя прыкладанні могуць рабіць непатрэбныя і незаконныя экстраныя выклікі."</string>
-    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"непасрэдна пачаць наладу CDMA-планшэта"</string>
-    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"непасрэдна запускаць налады тэлефона CDMA"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Дазваляе прыкладанням запускаць рэзервы CDMA. Шкоднасныя прыкладанні могуць запускаць залішнія рэзервы CDMA."</string>
-    <string name="permlab_locationUpdates" msgid="7785408253364335740">"кіраваць абвесткамі абнаўлення месцазнаходжання"</string>
-    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Дазваляе прыкладанням уключаць i адключаць апавяшчэннi аб абнаўленні месцазнаходжання ад радыё. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_checkinProperties" msgid="7855259461268734914">"атрымліваць доступ да ўласцівасцяў праверкі"</string>
-    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Дазваляе прыкладанням сытваць/запісваць доступ да ўласцівасцяў, запампаваных службай праверкі. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_bindGadget" msgid="776905339015863471">"выбіраць віджэты"</string>
-    <string name="permdesc_bindGadget" msgid="8261326938599049290">"Дазваляе прыкладанням паведамляць сістэме, якая віджэты могуць быць выкарыстаны пэўнымі прыкладаннямі. Прыкладанне з гэтым дазволам можа прадастаўляць доступ да персанальных дадзеных іншым прыкладанням. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"змяняць стан тэлефона"</string>
-    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Дазваляе прыкладанням кіраваць тэлефоннымі функцыямі прылады. Прыкладанне з гэтым дазволам можа пераключаць сеткі, уключаць і выключаць радыё на тэлефоне і г. д., нават не паведамляючы пра гэта."</string>
-    <string name="permlab_readPhoneState" msgid="9178228524507610486">"чытанне статусу тэлефона і ідэнтыфікацыя"</string>
-    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Дазваляе прыкладанням атрымлiваць доступ да функцый тэлефона на прыладзе. Дзякуючы гэтаму дазволу прыкладанне можа вызначаць iдэнтыфiкатары нумару тэлефона i прылады, незалежна ад таго, цi актыўны выклiк, i аддалены нумар, на якi робiцца выклiк."</string>
-    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"прадухіліць планшэт ад пераходу ў рэжым сну"</string>
-    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"забараняць тэлефону пераходзіць ў рэжым сну"</string>
-    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Дазваляе прыкладанням прадухіляць пераход планшэта ў рэжым сну."</string>
-    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Дазваляе прыкладанням прадухіляць тэлефон ад пераходу ў рэжым сну."</string>
-    <!-- no translation found for permlab_transmitIr (7545858504238530105) -->
-    <skip />
-    <!-- no translation found for permdesc_transmitIr (5358308854306529170) -->
-    <skip />
-    <!-- no translation found for permdesc_transmitIr (7957763745020300725) -->
-    <skip />
-    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"Уключыць або выключыць планшэт"</string>
-    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"уключаць або выключаць тэлефон"</string>
-    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Дазваляе прыкладанням уключаць ці адключаць планшэт."</string>
-    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Дазваляе прыкладанням уключаць або адключаць тэлефон."</string>
-    <string name="permlab_factoryTest" msgid="3715225492696416187">"запусціць у рэжыме заводскага тэставання"</string>
-    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Запуск у якасці нізкаўзроўневага тэсты вытворцы, што дазваляе атрымаць поўны доступ да абсталявання планшэта. Даступна, толькі калі планшэт працуе ў рэжыме тэставання вытворцы."</string>
-    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Запусціць як нізкаўзроўневы тэст вытворцы, што дазваляе атрымаць поўны доступ да абсталявання тэлефона. Даступна, толькі калі прылада працуе ў рэжыме тэста вытворцы."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"усталёўваць шпалеры"</string>
-    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Дазваляе прыкладанням ксталёўваць сiстэмныя шпалеры."</string>
-    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"наладка памеру шпалер"</string>
-    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Дазваляе прыкладанням задаваць падказкі па памеры сістэмных шпалер."</string>
-    <string name="permlab_masterClear" msgid="2315750423139697397">"скідаць сістэму да завадскіх наладаў"</string>
-    <string name="permdesc_masterClear" msgid="3665380492633910226">"Дазваляе прыкладанню цалкам скідваць сістэму да заводскіх налад, выдаляючы ўсе дадзеныя, налады і ўсталяваныя прыкладанні."</string>
-    <string name="permlab_setTime" msgid="2021614829591775646">"задаць час"</string>
-    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Дазваляе прыкладанням змяняць час на гадзінніку планшэта."</string>
-    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Дазваляе прыкладаннМ змяняць час на гадзінніку тэлефона."</string>
-    <string name="permlab_setTimeZone" msgid="2945079801013077340">"усталёўваць часавы пояс"</string>
-    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Дазваляе прыкладанням змяняць гадзінны пояс планшэта."</string>
-    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Дазваляе прыкладанню змяняць гадзінны пояс тэлефона."</string>
-    <string name="permlab_accountManagerService" msgid="4829262349691386986">"выступаць у якасці службы AccountManagerService"</string>
-    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Дазваляе прыкладанням тэлефанаваць на AccountAuthenticators."</string>
-    <string name="permlab_getAccounts" msgid="1086795467760122114">"пошук уліковых запісаў на прыладзе"</string>
-    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Дазваляе прыкладанню атрымлiваць спіс уліковых запісаў, вядомых планшэту. Сярод iх могуць быць улiковыя запiсы, створаныя прыкладаннямi, якiя вы ўсталявалi."</string>
-    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Дазваляе прыкладанню атрымлiваць спіс уліковых запісаў, вядомых тэлефону. Сярод iх могуць быць улiковыя запiсы, створаныя прыкладаннямi, якiя вы ўсталявалi."</string>
-    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"стварэнне ўліковых запісаў і ўсталёўка пароляў"</string>
-    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Дазваляе прыкладанням выкарыстоўваць магчымасці сродку праверкі сапраўднасці ўліковых запісаў AccountManager, у тым ліку ствараць уліковыя запісы, атрымліваць і наладжваць паролі для іх."</string>
-    <string name="permlab_manageAccounts" msgid="4983126304757177305">"даданне або выдаленне ўліковых запісаў"</string>
-    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Дазваляе прыкладанням выконваць даданне і выдаленне ўліковых запісаў або выдаленне іх пароляў."</string>
-    <string name="permlab_useCredentials" msgid="235481396163877642">"выкарыстанне ўліковых запісаў на прыладзе"</string>
-    <string name="permdesc_useCredentials" msgid="7984227147403346422">"Дазваляе прыкладанням запытваць ключы аўтэнтыфікаціі."</string>
-    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"прагляд сеткавых злучэнняў"</string>
-    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Дазваляе прыкладанню праглядаць звесткi пра падключэннi да сеткi, напрыклад пра тое, якiя сеткi iснуюць i з якiмi ёсць сувязь."</string>
-    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"поўны доступ да сеткі"</string>
-    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Дазваляе прыкладанням ствараць сеткавыя сокеты і выкарыстоўваць уласныя сеткавыя пратаколы. браўзер і іншыя прыкладаннi прадастаўляюць сродкі для перадачы дадзеных у Iнтэрнэт, так што гэты дазвол для перадачы дадзеных у Iнтэрнэце не патрабуецца."</string>
-    <string name="permlab_writeApnSettings" msgid="505660159675751896">"змяняць/перахопліваць сеткавыя налады і трафік"</string>
-    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Дазваляе прыкладанням змяняць налады сеткі, перахапляць і правяраць увесь сеткавы трафік, напрыклад для змены проксі-сервера і порта любога APN. Шкоднасныя прыкладанні могуць адсочваць, перанакіроўваць або змяняць сеткавыя пакеты без вашага ведама."</string>
-    <string name="permlab_changeNetworkState" msgid="958884291454327309">"змяніць падлучэнне да сеткі"</string>
-    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Дазваляе прыкладанням змяняць стан сеткавага падключэння."</string>
-    <string name="permlab_changeTetherState" msgid="5952584964373017960">"змяніць прывязку да падлучэння"</string>
-    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Дазваляе прыкладанням змяняць стан прывязкі да сеткі."</string>
-    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"змяняць налады выкарыстання фонавых дадзеных"</string>
-    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Дазваляе прыкладанням змяняць налады выкарыстання зыходных дадзеных."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"прагляд злучэнняў Wi-Fi"</string>
-    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Дазваляе прыкладанню праглядаць звесткi пра падключэннi да сеткi, напрыклад пра тое, дзе ёсць сеткi Wi-Fi i якiя прылады Wi-Fi да iх падключаны."</string>
-    <string name="permlab_changeWifiState" msgid="6550641188749128035">"падключэнне да сеткі Wi-Fi і адключэнне ад яе"</string>
-    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Дазваляе прыкладанням падключацца да кропак доступу Wi-Fi і адключацца ад iх, а таксама ўносіць змяненні ў канфiгурацыю прылад сеткі Wi-Fi."</string>
-    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"дазваляе прыём Wi-Fi Multicast"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Дазваляе прыкладанням атрымліваць пакеты, адпраўленыя на ўсе прылады з сеткi Wi-Fi з дапамогай групавых адрасоў, а не толькі на ваш планшэт. Будзе выкарыстоўвацца больш энергіі, чым у рэжыме нешматадраснай перадачы."</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Дазваляе прыкладанням атрымліваць пакеты, адпраўленыя на ўсе прылады з сеткi Wi-Fi з дапамогай групавых адрасоў, а не толькі на ваш тэлефон. Будзе выкарыстоўвацца больш энергіі, чым у рэжыме нешматадраснай перадачы."</string>
-    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"атрыманне доступу да налад прылады Bluetooth"</string>
-    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Дазваляе прыкладанням наладжваць лакальны планшэт Bluetooth, выяўляць і падлучаць выдаленыя прылады."</string>
-    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Дазваляе прыкладанням наладжваць лакальны тэлефон Bluetooth, а таксама знаходзіць выдаленыя прылады i падлучацца да ix."</string>
-    <!-- no translation found for permlab_bluetoothPriv (4009494246009513828) -->
-    <skip />
-    <!-- no translation found for permdesc_bluetoothPriv (8045735193417468857) -->
-    <skip />
-    <!-- no translation found for permdesc_bluetoothPriv (8045735193417468857) -->
-    <skip />
-    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"падключаць да WiMAX i адключаць ад яго"</string>
-    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Дазваляе прыкладанню вызначаць, ці ўключаны WiMAX, і інфармацыю пра любую сетку WiMAX, якая спалучана з iншымi."</string>
-    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Змяніць стан WiMAX"</string>
-    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Дазваляе прыкладанням падключаць планшэт да сеткі WiMAX i адключаць яго ад яе."</string>
-    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Дазваляе прыкладанням падключацца да сетак WiMAX і адключацца ад iх."</string>
-    <string name="permlab_bluetooth" msgid="6127769336339276828">"падлучэнне да прылады Bluetooth"</string>
-    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Дазваляе прыкладанню праглядаць канфігурацыю Bluetooth на планшэце , а таксама здзяйсняць і прымаць злучэнні са спалучанымі прыладамі."</string>
-    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Дазваляе прыкладанню праглядаць канфігурацыю Bluetooth на тэлефоне , а таксама здзяйсняць і прымаць злучэнні са спалучанымі прыладамі."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"кантроль Near Field Communication"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"Дазваляе прыкладаннzv спалучацца з тэгамі, картамі і счытваючымі прыладамі Near Field Communication (NFC)."</string>
-    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"адключэнне блакiроўкi экрана"</string>
-    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Дазваляе прыкладанням адключаць блакiроўку клавіятуры і любыя сродкі абароны, звязаныя з паролем. Прыкладам гэтага з\'яўляецца адключэнне тэлефонам блакiроўкi клавіятуры пры атрыманні ўваходнага выкліку і паўторнае ўключэнне блакiроўкi клавіятуры, калі выклік завершаны."</string>
-    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"чытаць параметры сінхранізацыі"</string>
-    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Дазваляе прыкладанням чытаць параметры сінхранізацыі для ўліковага запісу. Напрыклад, яны могуць вызначыць, цi сiнхранiзавана з улiковым запiсам прыкладанне \"Кантакты\"."</string>
-    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"уключэнне ці адключэнне сінхранізацыi"</string>
-    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Дазваляе прыкладанню змяняць налады сінхранізацыі для ўліковага запісу. Напрыклад, гэта можа выкарыстоўвацца для ўключэння сінхранізацыі прыкладання \"Кантакты\" з уліковым запісам."</string>
-    <string name="permlab_readSyncStats" msgid="7396577451360202448">"чытаць статыстыку сінхранізацыі"</string>
-    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Дазваляе прыкладанням чытаць статыстыку сінхранізацыі для ўліковага запісу, у тым ліку гісторыю сінхранізацыі мерапрыемстваў і наколькі сінхранізаваны дадзеныя."</string>
-    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"чытаць падпісаныя каналы"</string>
-    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Дазваляе прыкладанням атрымліваць інфармацыю пра каналы, якія сінхранізуюцца ў бягучы момант."</string>
-    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"запісваць каналы, на якія ёсць падпіска"</string>
-    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Дазваляе прыкладанням змяняць бягучыя каналы сінхранізавання. Шкоднасныя прыкладанні могуць змяняць вашы каналы сінхранізацыi."</string>
-    <string name="permlab_readDictionary" msgid="4107101525746035718">"чытанне тэрмінаў, дададзеных у слоўнік"</string>
-    <string name="permdesc_readDictionary" msgid="659614600338904243">"Дазваляе прыкладанням счытваць любыя словы, імёны і фразы, якія карыстальнік можа захоўваць у карыстальніцкім слоўніку."</string>
-    <string name="permlab_writeDictionary" msgid="2183110402314441106">"Даданне слоў у карыстальнiцкі слоўнік"</string>
-    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Дазваляе прыкладанням запісваць новыя словы ў карыстальніцкі слоўнік."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"чытанне змесціва USB-назапашв."</string>
-    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"чытанне змесціва SD-карты"</string>
-    <!-- no translation found for permdesc_sdcardRead (3446988712598386079) -->
-    <skip />
-    <!-- no translation found for permdesc_sdcardRead (2607362473654975411) -->
-    <skip />
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"зм. або выд. змес. USB-назап."</string>
-    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"змяніць або выдаліць змесціва SD-карты"</string>
-    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Дазваляе прыкладаням выконваць запіс ва USB-назапашвальнік."</string>
-    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Дазваляе прыкладанням запісваць на SD-карту."</string>
-    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"змяніць/выдаліць унутраныя носьбіты змесціва"</string>
-    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Дазваляе прыкладанням змяняць змесціва ўнутранай памяці."</string>
-    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"кіраваць сховішчам для дакументаў"</string>
-    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"Дазваляе прыкладанню кіраваць сховішчам для дакументаў."</string>
-    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"доступ да знешніх захоўвання для ўсіх карыстальнікаў"</string>
-    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Дазваляе ўсiм карыстальнiкам прыкладання атрымлiваць доступ да знешнега сховiшча"</string>
-    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"доступ да файлавай сістэмы кэша"</string>
-    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Дазваляе прыкладанню счытваць і выконваць запіс у файлавую сістэму кэш-памяці."</string>
-    <string name="permlab_use_sip" msgid="5986952362795870502">"рабіць/прымаць iнтэрнэт-выклікі"</string>
-    <string name="permdesc_use_sip" msgid="4717632000062674294">"Дазваляе прыкладанням выкарыстоўваць службу SIP, каб прымаць/рабіць Інтэрнэт-выклікі."</string>
-    <!-- no translation found for permlab_bind_call_service (6724009726671246551) -->
-    <skip />
-    <!-- no translation found for permdesc_bind_call_service (8732547662442572435) -->
-    <skip />
-    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"чытаць дадзеныя выкарыстання сеткі"</string>
-    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Дазваляе прыкладанню счытваць дадзеныя аб гісторыі выкарыстання сеткі для пэўных сетак і прыкладанняў."</string>
-    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"кіраванне палітыкай сеткі"</string>
-    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Дазваляе прыкладаннм кіраваць сеткавымі палітыкамі і вызначаць правілы пэўных прыкладанняў."</string>
-    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"змяніць улік выкарыстання сеткі"</string>
-    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Дазваляе прыкладанням змяняць метад уліку выкарыстання сеткі прыкладаннямі. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <!-- no translation found for permlab_markNetworkSocket (3658527214914959749) -->
-    <skip />
-    <!-- no translation found for permdesc_markNetworkSocket (7655568433696356578) -->
-    <skip />
-    <string name="permlab_accessNotifications" msgid="7673416487873432268">"доступ да паведамленняў"</string>
-    <string name="permdesc_accessNotifications" msgid="458457742683431387">"Дазваляе прыкладанню атрымлiваць, правяраць i выдаляць апавяшчэннi, у тым лiку апублiкаваныя iншымi прыкладаннямi."</string>
-    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"прывязка да службы апавяшчэння слухача"</string>
-    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Дазваляе ўладальніку прывязвацца да верхняга ўзроўню інтэрфейсу службы  апавяшчэння слухачоў. Ніколі не патрэбнае для звычайных прыкладанняў."</string>
-    <!-- no translation found for permlab_invokeCarrierSetup (3699600833975117478) -->
-    <skip />
-    <!-- no translation found for permdesc_invokeCarrierSetup (4159549152529111920) -->
-    <skip />
-    <!-- no translation found for permlab_accessNetworkConditions (8206077447838909516) -->
-    <skip />
-    <!-- no translation found for permdesc_accessNetworkConditions (6899102075825272211) -->
-    <skip />
-    <string name="policylab_limitPassword" msgid="4497420728857585791">"Устанавіць правілы паролю"</string>
-    <string name="policydesc_limitPassword" msgid="3252114203919510394">"Кіраванне даўжынёй і колькасцю знакаў у паролі разблакоўкі экрана."</string>
-    <string name="policylab_watchLogin" msgid="914130646942199503">"Сачыць за спробамі разблакоўкі экрана"</string>
-    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Сачыць за колькасцю няправільных набраных пароляў падчас разблакоўкі экрана і блакаваць планшэт або сціраць усе дадзеныя на ім, калі няправільны пароль набраны занадта шмат разоў."</string>
-    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Сачыць за колькасцю няправільных набраных пароляў падчас разблакоўкі экрана і блакаваць тяэлефон або сціраць усе дадзеныя на ім, калі набрана занадта шмат няправільных пароляў."</string>
-    <string name="policylab_resetPassword" msgid="2620077191242688955">"Змяненне паролю разблакоўкі экрана"</string>
-    <string name="policydesc_resetPassword" msgid="605963962301904458">"Змяніць пароль разблакоўкі экрана."</string>
-    <string name="policylab_forceLock" msgid="2274085384704248431">"Заблакаваць экран"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Кіраванне часам і спосабам блакавання экрана"</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"Сцерці ўсе дадзеныя"</string>
-    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Выдаліць дадзеныя з планшэта без папярэджання, выканаўшы скід налад."</string>
-    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Выдаліць дадзеныя з тэлефона без папярэджання, выканаўшы скід налад."</string>
-    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Усталяваць глабальны проксі прылады"</string>
-    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Усталяваць глабальны проксі-cервер прылады, які будзе выкарыстоўвацца, калі палітыка актыўная. Толькі першы адміністратар прылады ўсталёўвае эфектыўныя глабальныя проксі-серверы."</string>
-    <string name="policylab_expirePassword" msgid="885279151847254056">"Нал. тэрм. дз. пар. блак. экр."</string>
-    <string name="policydesc_expirePassword" msgid="1729725226314691591">"Кіраваць частатой змены паролю для блакавання экрана."</string>
-    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Усталяваць шыфраванне сховішча."</string>
-    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Запыт на шыфраванне захаваных дадзеных прыкладанняў."</string>
-    <string name="policylab_disableCamera" msgid="6395301023152297826">"Адключыць камеры"</string>
-    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Забараніць выкарыстанне ўсіх камер прылады."</string>
-    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Адключэнне функцыі блакiроўкi клавiятуры"</string>
-    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Прадухіленне выкарыстання некаторых функцый падчас блакiроўкi."</string>
-  <string-array name="phoneTypes">
-    <item msgid="8901098336658710359">"Галоўная старонка"</item>
-    <item msgid="869923650527136615">"Мабільны"</item>
-    <item msgid="7897544654242874543">"Працоўны"</item>
-    <item msgid="1103601433382158155">"Працоўны факс"</item>
-    <item msgid="1735177144948329370">"Хатні факс"</item>
-    <item msgid="603878674477207394">"Пэйджар"</item>
-    <item msgid="1650824275177931637">"Іншы"</item>
-    <item msgid="9192514806975898961">"Асаблівы"</item>
-  </string-array>
-  <string-array name="emailAddressTypes">
-    <item msgid="8073994352956129127">"Хатні"</item>
-    <item msgid="7084237356602625604">"Працоўны"</item>
-    <item msgid="1112044410659011023">"Іншы"</item>
-    <item msgid="2374913952870110618">"Карыстальніцкі"</item>
-  </string-array>
-  <string-array name="postalAddressTypes">
-    <item msgid="6880257626740047286">"На Галоўную старонку"</item>
-    <item msgid="5629153956045109251">"Працоўны"</item>
-    <item msgid="4966604264500343469">"Іншы"</item>
-    <item msgid="4932682847595299369">"Карыстальніцкі"</item>
-  </string-array>
-  <string-array name="imAddressTypes">
-    <item msgid="1738585194601476694">"Хатні"</item>
-    <item msgid="1359644565647383708">"Працоўны"</item>
-    <item msgid="7868549401053615677">"Іншы"</item>
-    <item msgid="3145118944639869809">"Карыстальніцкі"</item>
-  </string-array>
-  <string-array name="organizationTypes">
-    <item msgid="7546335612189115615">"Працоўны"</item>
-    <item msgid="4378074129049520373">"Іншае"</item>
-    <item msgid="3455047468583965104">"Карыстальніцкі"</item>
-  </string-array>
-  <string-array name="imProtocols">
-    <item msgid="8595261363518459565">"AIM"</item>
-    <item msgid="7390473628275490700">"Windows Live"</item>
-    <item msgid="7882877134931458217">"Yahoo"</item>
-    <item msgid="5035376313200585242">"Skype"</item>
-    <item msgid="7532363178459444943">"QQ"</item>
-    <item msgid="3713441034299660749">"Google Talk"</item>
-    <item msgid="2506857312718630823">"ICQ"</item>
-    <item msgid="1648797903785279353">"Jabber"</item>
-  </string-array>
-    <string name="phoneTypeCustom" msgid="1644738059053355820">"Карыстальніцкі"</string>
-    <string name="phoneTypeHome" msgid="2570923463033985887">"Галоўная старонка"</string>
-    <string name="phoneTypeMobile" msgid="6501463557754751037">"Мабільны"</string>
-    <string name="phoneTypeWork" msgid="8863939667059911633">"Працоўны"</string>
-    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Працоўны факс"</string>
-    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Хатні факс"</string>
-    <string name="phoneTypePager" msgid="7582359955394921732">"Пэйджар"</string>
-    <string name="phoneTypeOther" msgid="1544425847868765990">"Іншы"</string>
-    <string name="phoneTypeCallback" msgid="2712175203065678206">"Зваротны выклік"</string>
-    <string name="phoneTypeCar" msgid="8738360689616716982">"Машына"</string>
-    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Асноўны тэлефон кампаніі"</string>
-    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
-    <string name="phoneTypeMain" msgid="6766137010628326916">"Галоўны"</string>
-    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Іншы факс"</string>
-    <string name="phoneTypeRadio" msgid="4093738079908667513">"Радыё"</string>
-    <string name="phoneTypeTelex" msgid="3367879952476250512">"Тэлекс"</string>
-    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
-    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Працоўны мабільны нумар"</string>
-    <string name="phoneTypeWorkPager" msgid="649938731231157056">"Працоўны пэйджар"</string>
-    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Асістэнт"</string>
-    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
-    <string name="eventTypeCustom" msgid="7837586198458073404">"Карыстальніцкі"</string>
-    <string name="eventTypeBirthday" msgid="2813379844211390740">"Дзень нараджэння"</string>
-    <string name="eventTypeAnniversary" msgid="3876779744518284000">"Гадавіна"</string>
-    <string name="eventTypeOther" msgid="7388178939010143077">"Іншае"</string>
-    <string name="emailTypeCustom" msgid="8525960257804213846">"Карыстальніцкі"</string>
-    <string name="emailTypeHome" msgid="449227236140433919">"Галоўная старонка"</string>
-    <string name="emailTypeWork" msgid="3548058059601149973">"Працоўны"</string>
-    <string name="emailTypeOther" msgid="2923008695272639549">"Іншы"</string>
-    <string name="emailTypeMobile" msgid="119919005321166205">"Мабільны"</string>
-    <string name="postalTypeCustom" msgid="8903206903060479902">"Карыстальніцкі"</string>
-    <string name="postalTypeHome" msgid="8165756977184483097">"Галоўная старонка"</string>
-    <string name="postalTypeWork" msgid="5268172772387694495">"Працоўны"</string>
-    <string name="postalTypeOther" msgid="2726111966623584341">"Іншы"</string>
-    <string name="imTypeCustom" msgid="2074028755527826046">"Карыстальніцкі"</string>
-    <string name="imTypeHome" msgid="6241181032954263892">"Галоўная старонка"</string>
-    <string name="imTypeWork" msgid="1371489290242433090">"Працоўны"</string>
-    <string name="imTypeOther" msgid="5377007495735915478">"Іншы"</string>
-    <string name="imProtocolCustom" msgid="6919453836618749992">"Карыстальніцкі"</string>
-    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
-    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
-    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
-    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
-    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <!-- no translation found for imProtocolGoogleTalk (493902321140277304) -->
-    <skip />
-    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
-    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
-    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
-    <string name="orgTypeWork" msgid="29268870505363872">"Працоўная"</string>
-    <string name="orgTypeOther" msgid="3951781131570124082">"Іншая"</string>
-    <string name="orgTypeCustom" msgid="225523415372088322">"Карыстальніцкі"</string>
-    <string name="relationTypeCustom" msgid="3542403679827297300">"Карыстальніцкі"</string>
-    <string name="relationTypeAssistant" msgid="6274334825195379076">"Памочнік"</string>
-    <string name="relationTypeBrother" msgid="8757913506784067713">"Брат"</string>
-    <string name="relationTypeChild" msgid="1890746277276881626">"Дзіця"</string>
-    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Унутраны Партнёр"</string>
-    <string name="relationTypeFather" msgid="5228034687082050725">"Бацька"</string>
-    <string name="relationTypeFriend" msgid="7313106762483391262">"Сябар/сяброўка"</string>
-    <string name="relationTypeManager" msgid="6365677861610137895">"Кіраўнік"</string>
-    <string name="relationTypeMother" msgid="4578571352962758304">"Маці"</string>
-    <string name="relationTypeParent" msgid="4755635567562925226">"Бацька"</string>
-    <string name="relationTypePartner" msgid="7266490285120262781">"Партнёр"</string>
-    <string name="relationTypeReferredBy" msgid="101573059844135524">"Запрошаны"</string>
-    <string name="relationTypeRelative" msgid="1799819930085610271">"Адносны"</string>
-    <string name="relationTypeSister" msgid="1735983554479076481">"Сястра"</string>
-    <string name="relationTypeSpouse" msgid="394136939428698117">"Муж/жонка"</string>
-    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Карыстальніцкі"</string>
-    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Галоўная старонка"</string>
-    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Працоўны"</string>
-    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Іншае"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Увядзіце PIN-код"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Увядзіце PUK-код і новы PIN-код"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новы PIN-код"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Дакраніцеся, каб увесці пароль"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Увядзіце пароль для разблакавання"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Каб разблакаваць, увядзіце PIN-код"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Няправільны PIN-код."</string>
-    <string name="keyguard_label_text" msgid="861796461028298424">"Каб разблакаваць, націсніце \"Меню\", затым 0."</string>
-    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Нумар экстранай службы"</string>
-    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Не абслугоўваецца"</string>
-    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Экран заблакаваны."</string>
-    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Націсніце \"Меню\", каб разблакаваць, або зрабіце экстраны выклік."</string>
-    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Націсніце \"Меню\", каб разблакаваць."</string>
-    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Намалюйце камбінацыю разблакоўкі, каб разблакаваць"</string>
-    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Экстраны выклік"</string>
-    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Вярнуцца да выкліку"</string>
-    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Правільна!"</string>
-    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Паспрабуйце яшчэ раз"</string>
-    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Паўтарыце спробу"</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Перавышана максімальная колькасць спроб разблакоўкі праз Фэйскантроль"</string>
-    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Зарадка, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="lockscreen_charged" msgid="321635745684060624">"Зараджаны"</string>
-    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="lockscreen_low_battery" msgid="1482873981919249740">"Падлучыце зарадную прыладу."</string>
-    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Няма SIM-карты"</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Няма SIM-карты ў планшэце."</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"У тэлефоне няма SIM-карты."</string>
-    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Усталюйце SIM-карту."</string>
-    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-карта адсутнічае ці не чытаецца. Устаўце SIM-карту."</string>
-    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"SIM-карту немагчыма выкарыстоўваць"</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Ваша SIM-карта была адключана назаўсёды.\n Звяжыцеся з аператарам бесправадной сувязі, каб атрымаць іншую SIM-карту."</string>
-    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Кнопка папярэдняй кампазiцыi"</string>
-    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Кнопка наступнай кампазiцыi"</string>
-    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Кнопка паўзы"</string>
-    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Кнопка прайгравання"</string>
-    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Кнопка прыпынку"</string>
-    <string name="emergency_calls_only" msgid="6733978304386365407">"Толькі экстраныя выклікі"</string>
-    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Сетка заблакаваная"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-карта заблакавана PUK-кодам."</string>
-    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Глядзіце \"Інструкцыю для карыстальніка\" або звяжыцеся са службай тэхнiчнай падтрымкі."</string>
-    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM-карта заблакаваная."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Разблакаванне SIM-карты..."</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Вы няправільна ўвялі графічны ключ разблакавання пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
-    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Вы няправільна ўвялі пароль пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Вы няправільна ўвялі PIN-код пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_1">%d</xliff:g>."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Вы няправільна ўвялі графічны ключ разблакавання пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакаваць планшэт з дапамогай уваходу ў Google.\n\n Паўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Вы няправільна ўвялі графічны ключ разблакавання пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакаваць тэлефон з дапамогай уваходу ў Google.\n\n Паўтарыце спробу праз наступную колькасць секунд: <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Вы няправільна спрабавалі разблакаваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спробаў (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да заводскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Вы няправільна спрабавалі разблакаваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спробаў (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да заводскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Вы няправільна спрабавалі разблакаваць планшэт некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да заводскіх налад."</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Вы няправільна спрабавалі разблакаваць тэлефон некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да заводскіх налад."</string>
-    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Паўтарыце спробу праз <xliff:g id="NUMBER">%d</xliff:g> с."</string>
-    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Забылі ўзор?"</string>
-    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Разблакаванне ўліковага запісу"</string>
-    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Занадта шмат спроб паўтарыць шаблон!"</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Каб разблакаваць, увайдзіце ў свой уліковы запіс Google."</string>
-    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Імя карыстальніка (электронная пошта)"</string>
-    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Пароль"</string>
-    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Увайсці"</string>
-    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Няправільнае імя карыстальніка ці пароль."</string>
-    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"Забыліся на імя карыстальніка або пароль?\nНаведайце "<b>"google.com/accounts/recovery"</b></string>
-    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Праверка..."</string>
-    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Разблакаваць"</string>
-    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Гук уключаны"</string>
-    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Гук выключаны"</string>
-    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Ключ пачаты"</string>
-    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Ключ выдалены"</string>
-    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Сотавы дададзены"</string>
-    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Ключ завершаны"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ВIджэт %2$d з %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Дадаць віджэт"</string>
-    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Пусты"</string>
-    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Вобласць разблакіроўкі разгарнута."</string>
-    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Вобласць разблакіроўкі згарнута."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Віджэт <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
-    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Селектар карыстальнiка"</string>
-    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Стан"</string>
-    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камера"</string>
-    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Налады мультымедыя"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Змяненне парадку віджэтаў пачалося."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Змяненне парадку віджэтаў скончылася."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Віджэт <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> выдалены."</string>
-    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Разгарнуць вобласць разблакіроўкі."</string>
-    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Разблакiроўка слайда."</string>
-    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Узор разблакiроўкі."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Фэйскантроль"</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-код разблакiроўкі."</string>
-    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Пароль разблакiроўкі."</string>
-    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Вобласць узора."</string>
-    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Вобласць слайда."</string>
-    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"123"</string>
-    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
-    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string>
-    <string name="granularity_label_character" msgid="7336470535385009523">"Знак"</string>
-    <string name="granularity_label_word" msgid="7075570328374918660">"слова"</string>
-    <string name="granularity_label_link" msgid="5815508880782488267">"спасылка"</string>
-    <string name="granularity_label_line" msgid="5764267235026120888">"радок"</string>
-    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
-    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <string name="factorytest_failed" msgid="5410270329114212041">"Не атрымалася выканаць заводскую праверку"</string>
-    <string name="factorytest_not_system" msgid="4435201656767276723">"Дзеянне FACTORY_TEST падтрымліваецца толькі для пакетаў, усталяваных на шляху /system/app."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"Пакет, які выконвае дзеянне FACTORY_TEST, не знойдзены."</string>
-    <string name="factorytest_reboot" msgid="6320168203050791643">"Перазагрузіць"</string>
-    <string name="js_dialog_title" msgid="1987483977834603872">"На старонцы з адрасам <xliff:g id="TITLE">%s</xliff:g> вызначана:"</string>
-    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
-    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Пацвердзіце пераход"</string>
-    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Пакінуць гэту старонку"</string>
-    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Заставацца на гэтай старонцы"</string>
-    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nВы ўпэўнены, што хочаце пакiнуць гэту старонку?"</string>
-    <string name="save_password_label" msgid="6860261758665825069">"Пацвердзіць"</string>
-    <string name="double_tap_toast" msgid="4595046515400268881">"Падказка: двойчы націсніце, каб павялічыць або паменшыць."</string>
-    <string name="autofill_this_form" msgid="4616758841157816676">"Аўтазапаўненне"</string>
-    <string name="setup_autofill" msgid="7103495070180590814">"Усталяванне аўтазапаўнення"</string>
-    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
-    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
-    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
-    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
-    <string name="autofill_province" msgid="2231806553863422300">"Правінцыя"</string>
-    <string name="autofill_postal_code" msgid="4696430407689377108">"Паштовы індэкс"</string>
-    <string name="autofill_state" msgid="6988894195520044613">"Штат"</string>
-    <string name="autofill_zip_code" msgid="8697544592627322946">"Паштовы індэкс"</string>
-    <string name="autofill_county" msgid="237073771020362891">"Акруга"</string>
-    <string name="autofill_island" msgid="4020100875984667025">"Востраў"</string>
-    <string name="autofill_district" msgid="8400735073392267672">"Раён"</string>
-    <string name="autofill_department" msgid="5343279462564453309">"Аддзел"</string>
-    <string name="autofill_prefecture" msgid="2028499485065800419">"Прэфектура"</string>
-    <string name="autofill_parish" msgid="8202206105468820057">"Прыход"</string>
-    <string name="autofill_area" msgid="3547409050889952423">"Плошча"</string>
-    <string name="autofill_emirate" msgid="2893880978835698818">"Эмірат"</string>
-    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"чытанне вэб-закладак і гісторыi"</string>
-    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"Дазваляе прыкладанню счытваць усе URL-адрасы, якiя былi наведаны ў браўзеры, а таксама ўсе закладкi. Увага: гэты дазвол нельга ажыццяўляць пабочнымi браўзерамi або iншымi прыкладаннямi з уласцiвасцямi браўзера."</string>
-    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"запіс вэб-закладак і гісторыi"</string>
-    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Дазваляе прыкладанням змяняць гісторыю браўзера або закладкі, якiя захоўваюцца на планшэце. Гэта можа дазволіць прыкладанню выдаляць або змяняць дадзеныя браўзера. Увага: гэты дазвол не распаўсюджваецца на пабочныя браўзеры i iншыя прыкладаннi з функцыямi браўзера."</string>
-    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Дазваляе прыкладанню змяняць гісторыю браўзера, і закладкі, захаваныя ў тэлефоне. Гэта дазволіць прыкладанню выдаляць або змяняць дадзеныя браўзера. Увага: гэты дазвол можа не дзейнiчаць для іншых браўзераў і іншых прыкладанняў з магчымасцямі вэб-браўзера."</string>
-    <string name="permlab_setAlarm" msgid="1379294556362091814">"усталёўка сігналу"</string>
-    <string name="permdesc_setAlarm" msgid="316392039157473848">"Дазваляе прыкладанню ўсталёўваць сігнал на ўсталяваным прыкладанні будзільніка. Пэўныя прыкладанні будзільніка не могуць рэалізоўваць гэтую магчымасць."</string>
-    <string name="permlab_addVoicemail" msgid="5525660026090959044">"дадаць галасавое паведамленне"</string>
-    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Дазваляе прыкладанням дадаваць паведамленні ў вашу скрыню галасавой пошты."</string>
-    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"змяніць дазволы геапазіцыянавання для браўзэра"</string>
-    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Дазваляе прыкладанням змяняць дазволы геалакацыі браўзэра. Шкоднасныя прыкладанні могуць выкарыстоўваць гэта, каб дазваляць адпраўку інфармацыі аб месцазнаходжанні выпадковым вэб-сайтам."</string>
-    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"верыфікаваць пакеты"</string>
-    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"Дазваляе прыкладанням правяраць магчымасць усталявання пакету."</string>
-    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"прывязаць да верыфікатару пакету"</string>
-    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"Дазваляе ўладальніку рабіць запыты верыфікатараў пакету. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_serialPort" msgid="546083327654631076">"атрымаць доступ да паслядоўных партоў"</string>
-    <string name="permdesc_serialPort" msgid="2991639985224598193">"Дазваляе ўладальніку атрымліваць доступ да паслядоўных партоў з дапамогай API SerialManager."</string>
-    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"знешнi доступ да кантэнт-правайдэраў"</string>
-    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"Дае ўладальніку доступ да кантэнт-правайдэраў з абалонкi. Не патрабуецца для звычайных прыкладанняў."</string>
-    <string name="permlab_updateLock" msgid="3527558366616680889">"адмянiць аўтаматычнае абнаўленне прылад"</string>
-    <string name="permdesc_updateLock" msgid="1655625832166778492">"Дазваляе ўладальніку адпраўляць у сiстэму звесткi пра тое, калі будзе зручны час для неінтерактыўнага перазапуску ў мэтах абнаўлення прылады."</string>
-    <string name="save_password_message" msgid="767344687139195790">"Вы хочаце, каб браўзэр запомніў гэты пароль?"</string>
-    <string name="save_password_notnow" msgid="6389675316706699758">"Не цяпер"</string>
-    <string name="save_password_remember" msgid="6491879678996749466">"Запомніць"</string>
-    <string name="save_password_never" msgid="8274330296785855105">"Ніколі"</string>
-    <string name="open_permission_deny" msgid="7374036708316629800">"У вас няма дазволу на адкрыццё гэтай старонкі."</string>
-    <string name="text_copied" msgid="4985729524670131385">"Тэкст скапіяваны ў буфер абмену."</string>
-    <string name="more_item_label" msgid="4650918923083320495">"Больш"</string>
-    <string name="prepend_shortcut_label" msgid="2572214461676015642">"Меню+"</string>
-    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"прабел"</string>
-    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
-    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"выдаліць"</string>
-    <string name="search_go" msgid="8298016669822141719">"Пошук"</string>
-    <string name="searchview_description_search" msgid="6749826639098512120">"Пошук"</string>
-    <string name="searchview_description_query" msgid="5911778593125355124">"Запыт на пошук"</string>
-    <string name="searchview_description_clear" msgid="1330281990951833033">"Выдаліць запыт"</string>
-    <string name="searchview_description_submit" msgid="2688450133297983542">"Адправіць запыт"</string>
-    <string name="searchview_description_voice" msgid="2453203695674994440">"Галасавы пошук"</string>
-    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Уключыць функцыю Explore by Touch?"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"Служба доступу <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> запытвае ўключэнне функцыі Explore by Touch. Калі функцыя Explore by Touch будзе ўключаная, вы зможаце пачуць або ўбачыць апісанні таго, што знаходзіцца пад вашым пальцам, або выконваць жэсты для ўзаемадзеяння з планшэтам."</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"Служба доступу <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> запытвае ўключэнне функцыі Explore by Touch. Калі функцыя Explore by Touch будзе ўключаная, вы зможаце пачуць або ўбачыць апісанні таго, што знаходзіцца пад вашым пальцам, або выконваць жэсты для ўзаемадзеяння з тэлефонам."</string>
-    <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 месяц таму"</string>
-    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Раней, чым 1 месяц таму"</string>
-  <plurals name="num_seconds_ago">
-    <item quantity="one" msgid="4869870056547896011">"1 секунду таму"</item>
-    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> с. таму"</item>
-  </plurals>
-  <plurals name="num_minutes_ago">
-    <item quantity="one" msgid="3306787433088810191">"1 хвіліну таму"</item>
-    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> хв. таму"</item>
-  </plurals>
-  <plurals name="num_hours_ago">
-    <item quantity="one" msgid="9150797944610821849">"1 гадзіну таму"</item>
-    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> гадз. таму"</item>
-  </plurals>
-  <plurals name="last_num_days">
-    <item quantity="other" msgid="3069992808164318268">"Апошніх дзён: <xliff:g id="COUNT">%d</xliff:g>"</item>
-  </plurals>
-    <string name="last_month" msgid="3959346739979055432">"Апошні месяц"</string>
-    <string name="older" msgid="5211975022815554840">"Раней"</string>
-  <plurals name="num_days_ago">
-    <item quantity="one" msgid="861358534398115820">"учора"</item>
-    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> д. таму"</item>
-  </plurals>
-  <plurals name="in_num_seconds">
-    <item quantity="one" msgid="2729745560954905102">"праз 1 секунду"</item>
-    <item quantity="other" msgid="1241926116443974687">"праз <xliff:g id="COUNT">%d</xliff:g> с."</item>
-  </plurals>
-  <plurals name="in_num_minutes">
-    <item quantity="one" msgid="8793095251325200395">"праз 1 хвіліну"</item>
-    <item quantity="other" msgid="3330713936399448749">"праз <xliff:g id="COUNT">%d</xliff:g> хв."</item>
-  </plurals>
-  <plurals name="in_num_hours">
-    <item quantity="one" msgid="7164353342477769999">"праз 1 гадзіну"</item>
-    <item quantity="other" msgid="547290677353727389">"праз <xliff:g id="COUNT">%d</xliff:g> гадз."</item>
-  </plurals>
-  <plurals name="in_num_days">
-    <item quantity="one" msgid="5413088743009839518">"заўтра"</item>
-    <item quantity="other" msgid="5109449375100953247">"праз <xliff:g id="COUNT">%d</xliff:g> д."</item>
-  </plurals>
-  <plurals name="abbrev_num_seconds_ago">
-    <item quantity="one" msgid="1849036840200069118">"1 секунду таму"</item>
-    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> с. таму"</item>
-  </plurals>
-  <plurals name="abbrev_num_minutes_ago">
-    <item quantity="one" msgid="6361490147113871545">"1 хвiлiну таму"</item>
-    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> мін. таму"</item>
-  </plurals>
-  <plurals name="abbrev_num_hours_ago">
-    <item quantity="one" msgid="4796212039724722116">"1 гадзіну таму"</item>
-    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> гадз. таму"</item>
-  </plurals>
-  <plurals name="abbrev_num_days_ago">
-    <item quantity="one" msgid="8463161711492680309">"учора"</item>
-    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> д. таму"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_seconds">
-    <item quantity="one" msgid="5842225370795066299">"праз 1 секунду"</item>
-    <item quantity="other" msgid="5495880108825805108">"праз <xliff:g id="COUNT">%d</xliff:g> с."</item>
-  </plurals>
-  <plurals name="abbrev_in_num_minutes">
-    <item quantity="one" msgid="562786149928284878">"праз 1 хв."</item>
-    <item quantity="other" msgid="4216113292706568726">"Праз <xliff:g id="COUNT">%d</xliff:g> хв."</item>
-  </plurals>
-  <plurals name="abbrev_in_num_hours">
-    <item quantity="one" msgid="3274708118124045246">"праз 1 гадзіну"</item>
-    <item quantity="other" msgid="3705373766798013406">"праз <xliff:g id="COUNT">%d</xliff:g> гадз."</item>
-  </plurals>
-  <plurals name="abbrev_in_num_days">
-    <item quantity="one" msgid="2178576254385739855">"заўтра"</item>
-    <item quantity="other" msgid="2973062968038355991">"праз <xliff:g id="COUNT">%d</xliff:g> д."</item>
-  </plurals>
-    <string name="preposition_for_date" msgid="9093949757757445117">"дата: <xliff:g id="DATE">%s</xliff:g>"</string>
-    <string name="preposition_for_time" msgid="5506831244263083793">"у <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="preposition_for_year" msgid="5040395640711867177">"у <xliff:g id="YEAR">%s</xliff:g>"</string>
-    <string name="day" msgid="8144195776058119424">"дзень"</string>
-    <string name="days" msgid="4774547661021344602">"д."</string>
-    <string name="hour" msgid="2126771916426189481">"гадзіна"</string>
-    <string name="hours" msgid="894424005266852993">"г."</string>
-    <string name="minute" msgid="9148878657703769868">"хв."</string>
-    <string name="minutes" msgid="5646001005827034509">"хв."</string>
-    <string name="second" msgid="3184235808021478">"с."</string>
-    <string name="seconds" msgid="3161515347216589235">"с."</string>
-    <string name="week" msgid="5617961537173061583">"тыдзень"</string>
-    <string name="weeks" msgid="6509623834583944518">"тыд."</string>
-    <string name="year" msgid="4001118221013892076">"год"</string>
-    <string name="years" msgid="6881577717993213522">"г."</string>
-  <plurals name="duration_seconds">
-    <item quantity="one" msgid="6962015528372969481">"1 секунда"</item>
-    <item quantity="other" msgid="1886107766577166786">"<xliff:g id="COUNT">%d</xliff:g> с"</item>
-  </plurals>
-  <plurals name="duration_minutes">
-    <item quantity="one" msgid="4915414002546085617">"1 хвіліна"</item>
-    <item quantity="other" msgid="3165187169224908775">"<xliff:g id="COUNT">%d</xliff:g> хв."</item>
-  </plurals>
-  <plurals name="duration_hours">
-    <item quantity="one" msgid="8917467491248809972">"1 гадзіна"</item>
-    <item quantity="other" msgid="3863962854246773930">"<xliff:g id="COUNT">%d</xliff:g> гадз."</item>
-  </plurals>
-    <string name="VideoView_error_title" msgid="3534509135438353077">"Праблема з відэа"</string>
-    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Відэа не падыходзіць для патокавай перадачы на ​​гэту прыладу."</string>
-    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Немагчыма прайграць гэта відэа."</string>
-    <string name="VideoView_error_button" msgid="2822238215100679592">"ОК"</string>
-    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="noon" msgid="7245353528818587908">"апоўдні"</string>
-    <string name="Noon" msgid="3342127745230013127">"Поўдзень"</string>
-    <string name="midnight" msgid="7166259508850457595">"апоўначы"</string>
-    <string name="Midnight" msgid="5630806906897892201">"Апоўначы"</string>
-    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
-    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
-    <string name="selectAll" msgid="6876518925844129331">"Вылучыць усё"</string>
-    <string name="cut" msgid="3092569408438626261">"Выразаць"</string>
-    <string name="copy" msgid="2681946229533511987">"Капіяваць"</string>
-    <string name="paste" msgid="5629880836805036433">"Уставіць"</string>
-    <string name="replace" msgid="5781686059063148930">"Замяніць..."</string>
-    <string name="delete" msgid="6098684844021697789">"Выдаліць"</string>
-    <string name="copyUrl" msgid="2538211579596067402">"Скапіяваць URL"</string>
-    <string name="selectTextMode" msgid="1018691815143165326">"Выбраць тэкст"</string>
-    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Вылучэнне тэксту"</string>
-    <string name="addToDictionary" msgid="4352161534510057874">"Дадаць у слоўнік"</string>
-    <string name="deleteText" msgid="6979668428458199034">"Выдалiць"</string>
-    <string name="inputMethod" msgid="1653630062304567879">"Метад уводу"</string>
-    <string name="editTextMenuTitle" msgid="4909135564941815494">"Дзеянні з тэкстам"</string>
-    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Месца для захавання на зыходзе"</string>
-    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Некаторыя сістэмныя функцыі могуць не працаваць"</string>
-    <string name="app_running_notification_title" msgid="8718335121060787914">"Прыкладанне <xliff:g id="APP_NAME">%1$s</xliff:g> працуе"</string>
-    <string name="app_running_notification_text" msgid="4653586947747330058">"Націсніце, каб атрымаць дадатковую інфармацыю або спыніць праграму."</string>
-    <string name="ok" msgid="5970060430562524910">"ОК"</string>
-    <string name="cancel" msgid="6442560571259935130">"Адмяніць"</string>
-    <string name="yes" msgid="5362982303337969312">"ОК"</string>
-    <string name="no" msgid="5141531044935541497">"Адмяніць"</string>
-    <string name="dialog_alert_title" msgid="2049658708609043103">"Увага"</string>
-    <string name="loading" msgid="7933681260296021180">"Загрузка..."</string>
-    <string name="capital_on" msgid="1544682755514494298">"Уключыць"</string>
-    <string name="capital_off" msgid="6815870386972805832">"Адключана"</string>
-    <string name="whichApplication" msgid="4533185947064773386">"Завяршыць дзеянне з дапамогай"</string>
-    <!-- no translation found for whichHomeApplication (4616420172727326782) -->
-    <skip />
-    <string name="alwaysUse" msgid="4583018368000610438">"Выкарыстоўваць па змаўчанні для гэтага дзеяння."</string>
-    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Ачысціць па змаўчанні ў раздзеле \"Налады сістэмы &gt; Прыкладанні &gt; Спампаваныя\"."</string>
-    <string name="chooseActivity" msgid="7486876147751803333">"Выберыце дзеянне"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"Выберыце прыкладанне для USB-прылады"</string>
-    <string name="noApplications" msgid="2991814273936504689">"Няма прыкладанняў, якія могуць выконваць гэты працэс."</string>
-    <string name="aerr_title" msgid="1905800560317137752"></string>
-    <string name="aerr_application" msgid="932628488013092776">"На жаль, прыкладанне <xliff:g id="APPLICATION">%1$s</xliff:g> спынілася."</string>
-    <string name="aerr_process" msgid="4507058997035697579">"На жаль, працэс <xliff:g id="PROCESS">%1$s</xliff:g> спыніўся."</string>
-    <string name="anr_title" msgid="4351948481459135709"></string>
-    <string name="anr_activity_application" msgid="1904477189057199066">"Прыкладанне <xliff:g id="APPLICATION">%2$s</xliff:g> не адказвае.\n\nЗакрыць яго?"</string>
-    <string name="anr_activity_process" msgid="5776209883299089767">"Працэс <xliff:g id="ACTIVITY">%1$s</xliff:g> не адказвае.\n\nЗакрыць яго?"</string>
-    <string name="anr_application_process" msgid="8941757607340481057">"Прыкладанне <xliff:g id="APPLICATION">%1$s</xliff:g> не адказвае. Закрыць яго?"</string>
-    <string name="anr_process" msgid="6513209874880517125">"Працэс <xliff:g id="PROCESS">%1$s</xliff:g> не адказвае.\n\nЗакрыць яго?"</string>
-    <string name="force_close" msgid="8346072094521265605">"ОК"</string>
-    <string name="report" msgid="4060218260984795706">"Справаздача"</string>
-    <string name="wait" msgid="7147118217226317732">"Чакаць"</string>
-    <string name="webpage_unresponsive" msgid="3272758351138122503">"Старонка не адказвае на запыты.\n\nЗакрыць яе?"</string>
-    <string name="launch_warning_title" msgid="1547997780506713581">"Прыкл. перанакіраванае"</string>
-    <string name="launch_warning_replace" msgid="6202498949970281412">"Прыкладанне <xliff:g id="APP_NAME">%1$s</xliff:g> зараз запушчанае."</string>
-    <string name="launch_warning_original" msgid="188102023021668683">"Прыкладанне <xliff:g id="APP_NAME">%1$s</xliff:g> запушчанае."</string>
-    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Шкала"</string>
-    <string name="screen_compat_mode_show" msgid="4013878876486655892">"Заўсёды паказваць"</string>
-    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Зноў уключыце гэта ў раздзеле \"Сістэмныя налады &gt; Прыкладанні &gt; Спампаваныя\"."</string>
-    <string name="smv_application" msgid="3307209192155442829">"Прыкладанне <xliff:g id="APPLICATION">%1$s</xliff:g> (працэс <xliff:g id="PROCESS">%2$s</xliff:g>) парушыла ўласную палітыку StrictMode."</string>
-    <string name="smv_process" msgid="5120397012047462446">"Працэс <xliff:g id="PROCESS">%1$s</xliff:g> парушыў уласную палітыку StrictMode."</string>
-    <string name="android_upgrading_title" msgid="1584192285441405746">"Абнаўленне Android..."</string>
-    <string name="android_upgrading_apk" msgid="7904042682111526169">"Аптымізацыя прыкладання <xliff:g id="NUMBER_0">%1$d</xliff:g> з <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
-    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Запуск прыкладанняў."</string>
-    <string name="android_upgrading_complete" msgid="1405954754112999229">"Завяршэнне загрузкі."</string>
-    <string name="heavy_weight_notification" msgid="9087063985776626166">"Прыкладанне \"<xliff:g id="APP">%1$s</xliff:g>\" запушчанае"</string>
-    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Націсніце, каб перайсці да прыкладання"</string>
-    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Пераключыць прыкладанні?"</string>
-    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Ужо запушчана іншае прыкладанне, якое павінна быць спынена перад запускам новага."</string>
-    <string name="old_app_action" msgid="493129172238566282">"Вярнуцца да <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
-    <string name="old_app_description" msgid="2082094275580358049">"Не запускайце новыя прыкладанні."</string>
-    <string name="new_app_action" msgid="5472756926945440706">"Запусціць <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
-    <string name="new_app_description" msgid="1932143598371537340">"Спыніць старыя прыкладанні без захавання."</string>
-    <string name="sendText" msgid="5209874571959469142">"Выберыце дзеянне для тэкста"</string>
-    <string name="volume_ringtone" msgid="6885421406845734650">"Гучнасць званка"</string>
-    <string name="volume_music" msgid="5421651157138628171">"Гучнасць прайгравальніка"</string>
-    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Прайграваецца праз Bluetooth"</string>
-    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Усталяваны ціхі рэжым"</string>
-    <string name="volume_call" msgid="3941680041282788711">"Гучнасць падчас размовы"</string>
-    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Гучнасць Bluetooth падчас выкліку"</string>
-    <string name="volume_alarm" msgid="1985191616042689100">"Гучнасць будзільніка"</string>
-    <string name="volume_notification" msgid="2422265656744276715">"Гучнасць апавяшчэнняў"</string>
-    <string name="volume_unknown" msgid="1400219669770445902">"Гучнасць"</string>
-    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Гучнасць Bluetooth"</string>
-    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Гучнасць рынгтона"</string>
-    <string name="volume_icon_description_incall" msgid="8890073218154543397">"Гучнасць выкліка"</string>
-    <string name="volume_icon_description_media" msgid="4217311719665194215">"Гучнасць прайгравальніка"</string>
-    <string name="volume_icon_description_notification" msgid="7044986546477282274">"Гучнасць апавяшчэнняў"</string>
-    <string name="ringtone_default" msgid="3789758980357696936">"Рынгтон па змаўчаннi"</string>
-    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Рынгтон па змаўчаннi (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
-    <string name="ringtone_silent" msgid="7937634392408977062">"Няма"</string>
-    <string name="ringtone_picker_title" msgid="3515143939175119094">"Рынгтоны"</string>
-    <string name="ringtone_unknown" msgid="5477919988701784788">"Невядомы рынгтон"</string>
-  <plurals name="wifi_available">
-    <item quantity="one" msgid="6654123987418168693">"Сетка Wi-Fi даступная"</item>
-    <item quantity="other" msgid="4192424489168397386">"Даступныя сеткі Wi-Fi"</item>
-  </plurals>
-  <plurals name="wifi_available_detailed">
-    <item quantity="one" msgid="1634101450343277345">"Адкрытая сетка Wi-Fi даступная"</item>
-    <item quantity="other" msgid="7915895323644292768">"Даступны адкрытыя сеткі Wi-Fi"</item>
-  </plurals>
-    <string name="wifi_available_sign_in" msgid="4029489716605255386">"Увайдзіце ў сетку Wi-Fi"</string>
-    <string name="network_available_sign_in" msgid="8495155593358054676">"Увайдзіце ў сетку Wi-Fi"</string>
-    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
-    <skip />
-    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Немагчыма падключыцца да Wi-Fi"</string>
-    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" дрэннае падключэнне да Інтэрнэту."</string>
-    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Пачаць работу Wi-Fi Direct. Гэта адключыць кліента або кропку доступу Wi-Fi."</string>
-    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Немагчыма запусціць Wi-Fi Direct."</string>
-    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct уключаны"</string>
-    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Дакраніцеся, каб наладзіць"</string>
-    <string name="accept" msgid="1645267259272829559">"Прыняць"</string>
-    <string name="decline" msgid="2112225451706137894">"Адхіліць"</string>
-    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Запрашэнне адпраўлена"</string>
-    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Запрашэнне далучыцца"</string>
-    <string name="wifi_p2p_from_message" msgid="570389174731951769">"Ад:"</string>
-    <string name="wifi_p2p_to_message" msgid="248968974522044099">"Каму:"</string>
-    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Увядзіце патрэбны PIN-код:"</string>
-    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN-код"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Тэлефон будзе часова адключаны ад сеткі Wi-Fi, пакуль ён падлучаны да прылады <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Тэлефон будзе часова адключаны ад Wi-Fi, пакуль ён падлучаны да прылады <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="select_character" msgid="3365550120617701745">"Уставіць сімвал"</string>
-    <string name="sms_control_title" msgid="7296612781128917719">"Адпраўка SMS"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"Прыкладанне &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; дасылае вялікую колькасць SMS-паведамленняў. Дазволіць гэтаму прыкладанню працягваць адпраўляць паведамленні?"</string>
-    <string name="sms_control_yes" msgid="3663725993855816807">"Дазволіць"</string>
-    <string name="sms_control_no" msgid="625438561395534982">"Забараніць"</string>
-    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; хоча адправiць паведамленне на адрас &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
-    <string name="sms_short_code_details" msgid="3492025719868078457">"Гэта "<font fgcolor="#ffffb060">"можа прывесцi да дадатковых выдаткаванняў"</font>" з вашага мабiльнага ўлiковага запiсу."</string>
-    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Гэта стане прычынай дадатковага спагнання сродкаў з вашага мабiльнага ўлiковага запiсу."</font></string>
-    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Адправiць"</string>
-    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Адмена"</string>
-    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Захаваць мой выбар"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Пазней гэта можна змянiць у раздзеле \"Налады &gt; Прыкладаннi\""</string>
-    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Заўсёды дазваляць"</string>
-    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ніколі не дазваляць"</string>
-    <string name="sim_removed_title" msgid="6227712319223226185">"SIM-карта выдаленая"</string>
-    <string name="sim_removed_message" msgid="2333164559970958645">"Мабільная сетка будзе недаступная да перазагрузкі з дзеючай SIM-картай."</string>
-    <string name="sim_done_button" msgid="827949989369963775">"Гатова"</string>
-    <string name="sim_added_title" msgid="3719670512889674693">"SIM-карта дадазеная"</string>
-    <string name="sim_added_message" msgid="6599945301141050216">"Перазагрузіце прыладу, каб атрымаць доступ да мабільнай сеткі."</string>
-    <string name="sim_restart_button" msgid="4722407842815232347">"Перазапусціць"</string>
-    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Усталяваць час"</string>
-    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Усталяваць дату"</string>
-    <string name="date_time_set" msgid="5777075614321087758">"Задаць"</string>
-    <string name="date_time_done" msgid="2507683751759308828">"Гатова"</string>
-    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"НОВАЕ: "</font></string>
-    <string name="perms_description_app" msgid="5139836143293299417">"Прадастаўленыя прыкладаннем <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
-    <string name="no_permissions" msgid="7283357728219338112">"Дазволу не патрабуецца"</string>
-    <string name="perm_costs_money" msgid="4902470324142151116">"за гэта можа спаганяцца плата"</string>
-    <string name="usb_storage_activity_title" msgid="4465055157209648641">"Унiверсальны USB-назапашвальнік"</string>
-    <string name="usb_storage_title" msgid="5901459041398751495">"USB падлучаны"</string>
-    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Вы падлучаны да камп\'ютара праз USB. Націсніце на кнопку ніжэй, калі жадаеце капіраваць файлы з камп\'ютара на USB-назапашвальнік прылады Android і наадварот."</string>
-    <string name="usb_storage_message" product="default" msgid="805351000446037811">"Вы падключыліся да камп\'ютара праз USB. Націсніце на кнопку ніжэй, калі вы жадаеце скапіраваць файлы з камп\'ютара на SD-карту прылады Android і наадварот."</string>
-    <string name="usb_storage_button_mount" msgid="1052259930369508235">"Уключыць USB-назапашвальнiк"</string>
-    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"Паўстала праблема з выкарыстаннем USB-назапашвальнiка ва ўнiверсальным USB-назапашвальнiку."</string>
-    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"Паўстала праблема выкарыстання SD-карты ва ўнiверсальным USB-назапашвальнiку."</string>
-    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB падключаны"</string>
-    <string name="usb_storage_notification_message" msgid="939822783828183763">"Дакраніцеся, каб капіяваць файлы з камп\'ютара цi на яго."</string>
-    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Выключыць USB-назапашвальнiк"</string>
-    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"Націсніце, каб адключыць USB-назапашвальнік."</string>
-    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB-назапашвальнік выкарыстоўваецца"</string>
-    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"Перш чым адключыць USB-назапашвальнік, адключыце(\"вымiце\") USB-назапашвальнік прылады Android ад камп\'ютара."</string>
-    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"Перш чым адключыць USB-назапашвальнік, адключыце(\"вымiце\") SD-карту вашай прылады Android з камп\'ютара."</string>
-    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Адключыць USB-назапашвальнiк"</string>
-    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"Памылка адключэння USB-назапашвальніка. Пераканайцеся, што вы адключылі хост USB, а потым паўтарыце спробу."</string>
-    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Падключыць USB-назапашвальнiк"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Калі вы ўключыце USB-назапашвальнік, некаторыя прыкладанні, якія вы выкарыстоўваеце, спыняцца і могуць быць недаступныя, пакуль USB-назапашвальнік не будзе адключаны."</string>
-    <string name="dlg_error_title" msgid="7323658469626514207">"Памылка працы USB"</string>
-    <string name="dlg_ok" msgid="7376953167039865701">"ОК"</string>
-    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Падлучана як медыя-прылада"</string>
-    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Падключаны як камера"</string>
-    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Падлучаны як усталявальнік"</string>
-    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Падключаны да USB-прылады"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"Націсніце, каб убачыць іншыя параметры USB."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Фарматаваць USB-назапашвальнiк?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Фарматаваць SD-карту?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Усе файлы, якія захоўваюцца на вашым USB-назапашвальніку, будуць выдалены. Гэта дзеянне не можа быць адменена."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Усе дадзеныя на карце будуць страчаны."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Фармат"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"Прылада адладкі USB падключана"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"Націсніце, каб адключыць адладку USB."</string>
-    <string name="select_input_method" msgid="4653387336791222978">"Выберыце метад уводу"</string>
-    <string name="configure_input_methods" msgid="9091652157722495116">"Наладзіць метады ўводу"</string>
-    <string name="use_physical_keyboard" msgid="6203112478095117625">"Фізічная клавіятура"</string>
-    <string name="hardware" msgid="7517821086888990278">"Апар. ср."</string>
-    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Выбраць раскладку клавіятуры"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Націсніце, каб выбраць раскладку клавіятуры."</string>
-    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШ\'ЫЬЭЮЯ"</string>
-    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="candidates_style" msgid="4333913089637062257"><u>"кандыдат."</u></string>
-    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Падрыхтоўка USB-назапашвальнiка"</string>
-    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Падрыхтоўка SD-карты"</string>
-    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Праверка на наяўнасць памылак."</string>
-    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Пусты USB-назапашвальнiк"</string>
-    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Пустая SD-карта"</string>
-    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB-назапашвальнік пусты або мае файлавую сістэму, якая не падтрымліваецца."</string>
-    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD-карта пустая або мае файлавую сістэму, якая не падтрымліваецца."</string>
-    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Пашкоджаны USB-назапашвальнiк"</string>
-    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"SD-карта пашкоджаная"</string>
-    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB-назапашвальнік пашкоджаны. Паспрабуйце адфарматаваць яго."</string>
-    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD-карта пашкоджана. Паспрабуйце адфарматаваць яе."</string>
-    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB-назапашвальнiк нечакана быў выдалены"</string>
-    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-карта была нечакана выдалена"</string>
-    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Адключыце USB-назапашвальнiк, перш чым выцягваць яго, каб пазбегнуць страты дадзеных."</string>
-    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Каб пазбегнуць страты дадзеных, адключыце SD-карту, перш чым вымаць яе."</string>
-    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"USB-назап. можна бясп. выцягнуць"</string>
-    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"Можна бяспечна выдаліць SD-карту"</string>
-    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Вы можаце бяспечна выдалiць USB-назапашвальнiк."</string>
-    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Вы можаце бяспечна выдаліць SD-карту."</string>
-    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"USB-назапашвальнiк выдалены"</string>
-    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD-карта выдаленая"</string>
-    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB-назапашвальнiк выдалены. Уставіць новыя носьбіты."</string>
-    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-карта выдаленая. Устаўце новую."</string>
-    <string name="activity_list_empty" msgid="1675388330786841066">"Адпаведныя дзеянні не знойдзены."</string>
-    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"абнавіць статыстыку выкарыстання кампанентаў"</string>
-    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Дазваляе прыкладанням змяняць сабраную статыстыку выкарыстання кампанентаў. Не для выкарыстання звычайнымі прыкладаннямі."</string>
-    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"капіяваць змесціва"</string>
-    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Дазваляе прыкладанням выклікаць службу захавання па змаўчанні для капіявання змесціва. Не выкарыстоўваецца звычайнымі прыкладаннямі."</string>
-    <string name="permlab_route_media_output" msgid="1642024455750414694">"Маршрутны мультымедыйны выхад"</string>
-    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Дазваляе прыкладанням маршрутызаваць мультымедыйны выхад на iншыя знешнiя прылады."</string>
-    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Доступ да блакіроўкі клавіятуры бяспечнага сховішча"</string>
-    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Дазваляе прыкладанню атрымліваць доступ да блакіроўкі клавіятуры бяспечнага сховішча."</string>
-    <string name="permlab_control_keyguard" msgid="172195184207828387">"Кiраванне адлюстраваннем і схаваннем блакiроўкi клавіятуры"</string>
-    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Дазваляе прыкладанню кiраваць блакiроўкай клавiятуры."</string>
-    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Двойчы дакраніцеся, каб змянiць маштаб"</string>
-    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Немагчыма дадаць віджэт."</string>
-    <string name="ime_action_go" msgid="8320845651737369027">"Пачаць"</string>
-    <string name="ime_action_search" msgid="658110271822807811">"Пошук"</string>
-    <string name="ime_action_send" msgid="2316166556349314424">"Адправіць"</string>
-    <string name="ime_action_next" msgid="3138843904009813834">"Далей"</string>
-    <string name="ime_action_done" msgid="8971516117910934605">"Гатова"</string>
-    <string name="ime_action_previous" msgid="1443550039250105948">"Назад"</string>
-    <string name="ime_action_default" msgid="2840921885558045721">"Выканаць"</string>
-    <string name="dial_number_using" msgid="5789176425167573586">"Набраць нумар\nз выкарыстаннем <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="create_contact_using" msgid="4947405226788104538">"Стварыць кантакт\nз дапамогай<xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Гэтыя адно або некалькі прыкладанняў запытваюць дазвол на доступ да вашага ўліковага запісу цяпер і ў будучыні."</string>
-    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Дазволіць гэты запыт?"</string>
-    <string name="grant_permissions_header_text" msgid="6874497408201826708">"Запыт на доступ"</string>
-    <string name="allow" msgid="7225948811296386551">"Дазволіць"</string>
-    <string name="deny" msgid="2081879885755434506">"Забараніць"</string>
-    <string name="permission_request_notification_title" msgid="6486759795926237907">"Дазвол запытаны"</string>
-    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Запытаны дазвол\nдля ўліковага запісу <xliff:g id="ACCOUNT">%s</xliff:g>"</string>
-    <string name="input_method_binding_label" msgid="1283557179944992649">"Метад уводу"</string>
-    <string name="sync_binding_label" msgid="3687969138375092423">"Сінхранізацыя"</string>
-    <string name="accessibility_binding_label" msgid="4148120742096474641">"Спецыяльныя магчымасці"</string>
-    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Шпалеры"</string>
-    <string name="chooser_wallpaper" msgid="7873476199295190279">"Змена шпалер"</string>
-    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Слухач апавяшчэння"</string>
-    <string name="vpn_title" msgid="19615213552042827">"VPN актываваны"</string>
-    <string name="vpn_title_long" msgid="6400714798049252294">"VPN актывуецца прыкладаннем <xliff:g id="APP">%s</xliff:g>"</string>
-    <string name="vpn_text" msgid="3011306607126450322">"Дакраніцеся, каб кіраваць сеткай."</string>
-    <string name="vpn_text_long" msgid="6407351006249174473">"Падлучаны да сеанса \"<xliff:g id="SESSION">%s</xliff:g>\". Дакраніцеся, каб кiраваць сеткай."</string>
-    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Падключэнне заўсёды ўключанага VPN..."</string>
-    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"Заўсёды ўключаны i падключаны VPN"</string>
-    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Памылка заўсёды ўключанага VPN"</string>
-    <string name="vpn_lockdown_config" msgid="6415899150671537970">"Націсніце, каб змяніць налады"</string>
-    <string name="upload_file" msgid="2897957172366730416">"Выберыце файл"</string>
-    <string name="no_file_chosen" msgid="6363648562170759465">"Файл не выбраны"</string>
-    <string name="reset" msgid="2448168080964209908">"Скінуць"</string>
-    <string name="submit" msgid="1602335572089911941">"Перадаць"</string>
-    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Рэжым \"У машыне\" ўключаны"</string>
-    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Дакраніцеся, каб выйсці з рэжыму \"Штурман\"."</string>
-    <string name="tethered_notification_title" msgid="3146694234398202601">"USB-мадэм або кропка доступу Wi-Fi актыўныя"</string>
-    <string name="tethered_notification_message" msgid="6857031760103062982">"Націсніце, каб наладзіць."</string>
-    <string name="back_button_label" msgid="2300470004503343439">"Назад"</string>
-    <string name="next_button_label" msgid="1080555104677992408">"Далей"</string>
-    <string name="skip_button_label" msgid="1275362299471631819">"Прапусціць"</string>
-    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Інтэнсіўнае выкарыстанне перадачы дадзеных праз мабільную сетку"</string>
-    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Націсніце, каб атрымаць дадатковыя звесткі аб выкарыстанні мабiльнай перадачы дадзеных."</string>
-    <string name="throttled_notification_title" msgid="6269541897729781332">"Ліміт мабільнай перадачы дадзеных перавышаны"</string>
-    <string name="throttled_notification_message" msgid="5443457321354907181">"Націсніце, каб атрымаць дадатковыя звесткі аб выкарыстанні мабiльнай перадачы дадзеных."</string>
-    <string name="no_matches" msgid="8129421908915840737">"Няма супадзенняў"</string>
-    <string name="find_on_page" msgid="1946799233822820384">"Знайсці на старонцы"</string>
-  <plurals name="matches_found">
-    <item quantity="one" msgid="8167147081136579439">"1 супадзенне"</item>
-    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> з <xliff:g id="TOTAL">%d</xliff:g>"</item>
-  </plurals>
-    <string name="action_mode_done" msgid="7217581640461922289">"Гатова"</string>
-    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"Адключэнне USB-назапашвальнiка..."</string>
-    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"Адключэнне SD-карты..."</string>
-    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"Выдаленне дадзеных з USB-назапашвальнiка..."</string>
-    <string name="progress_erasing" product="default" msgid="6596988875507043042">"Выдаленне дадзеных з SD-карты..."</string>
-    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Немагчыма ачысцiць USB-назапашвальнік."</string>
-    <string name="format_error" product="default" msgid="7315248696644510935">"Немагчыма ачысцiць SD-карту."</string>
-    <string name="media_bad_removal" msgid="7960864061016603281">"SD-карта была вынутая да адключэння"</string>
-    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"Зараз USB-назапашвальнiк правяраецца."</string>
-    <string name="media_checking" product="default" msgid="7334762503904827481">"Зараз SD-карта правяраецца."</string>
-    <string name="media_removed" msgid="7001526905057952097">"SD-карта была выдаленая."</string>
-    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"Зараз USB-назапашвальнiк выкарыстоўваецца кампутарам."</string>
-    <string name="media_shared" product="default" msgid="5706130568133540435">"Зараз SD-карта выкарыстоўваецца кампутарам."</string>
-    <string name="media_unknown_state" msgid="729192782197290385">"Знешнія носьбіты ў невядомым стане."</string>
-    <string name="share" msgid="1778686618230011964">"Адкрыць доступ"</string>
-    <string name="find" msgid="4808270900322985960">"Пошук"</string>
-    <string name="websearch" msgid="4337157977400211589">"Вэб-пошук"</string>
-    <string name="find_next" msgid="5742124618942193978">"Знайсці нiжэй"</string>
-    <string name="find_previous" msgid="2196723669388360506">"Знайсці вышэй"</string>
-    <string name="gpsNotifTicker" msgid="5622683912616496172">"Запыт пра месцазнаходжанне ад карыстальніка <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="gpsNotifTitle" msgid="5446858717157416839">"Запыт месцазнаходжання"</string>
-    <string name="gpsNotifMessage" msgid="1374718023224000702">"Запыт ад карыстальнiка <xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)"</string>
-    <string name="gpsVerifYes" msgid="2346566072867213563">"Так"</string>
-    <string name="gpsVerifNo" msgid="1146564937346454865">"Не"</string>
-    <string name="sync_too_many_deletes" msgid="5296321850662746890">"Выдаліць перавышаны ліміт"</string>
-    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Выдалена элементаў для тыпу сінхранiзацыi \"<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>\": <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g>. Уліковы запіс <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Што вы жадаеце зрабіць?"</string>
-    <string name="sync_really_delete" msgid="2572600103122596243">"Выдаліць элементы."</string>
-    <string name="sync_undo_deletes" msgid="2941317360600338602">"Скасаваць выдаленні"</string>
-    <string name="sync_do_nothing" msgid="3743764740430821845">"Нічога зараз не рабіць"</string>
-    <string name="choose_account_label" msgid="5655203089746423927">"Выберыце ўліковы запіс"</string>
-    <string name="add_account_label" msgid="2935267344849993553">"Дадаць уліковы запіс"</string>
-    <string name="add_account_button_label" msgid="3611982894853435874">"Дадаць уліковы запіс"</string>
-    <string name="number_picker_increment_button" msgid="2412072272832284313">"Павялічыць"</string>
-    <string name="number_picker_decrement_button" msgid="476050778386779067">"Паменшыць"</string>
-    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"Націсніце і ўтрымлівайце <xliff:g id="VALUE">%s</xliff:g>."</string>
-    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Правядзіце пальцам уверх, каб павялічыць, або ўніз, каб паменшыць."</string>
-    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"Павялічыць лічбу хвілін."</string>
-    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"Паменшыць лічбу хвілін."</string>
-    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Павялічыць лічбу гадзін."</string>
-    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Паменшыць лічбу гадзін."</string>
-    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Усталяваць час пасля паўдня"</string>
-    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Усталяваць час да паўдня"</string>
-    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Павялічыць лічбу месяца"</string>
-    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Паменшыць лічбу месяца"</string>
-    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Павялічыць лічбу дня"</string>
-    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"Паменшыць лічбу дня"</string>
-    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"Павялічыць лічбу года"</string>
-    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"Паменшыць лічбу года"</string>
-    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Адмена"</string>
-    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Выдаліць"</string>
-    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Гатова"</string>
-    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Змена рэжыму"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
-    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
-    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Выберыце прыкладанне"</string>
-    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Апублікаваць з дапамогай"</string>
-    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Адправiць з дапамогай прыкладання <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="content_description_sliding_handle" msgid="415975056159262248">"Ручка для перасоўвання. Націсніце і ўтрымлівайце."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Правядзіце пальцам уверх, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Правядзіце пальцам уніз, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Правядзіце пальцам улева, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Правядзіце пальцам управа, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Разблакаваць"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Ціхі рэжым"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Гук уключаны"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
-    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Прагартайце, каб разблакаваць."</string>
-    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Каб праслухаць паролi, падключыце гарнiтуру."</string>
-    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Кропка."</string>
-    <string name="action_bar_home_description" msgid="5293600496601490216">"Перайсці да пачатковай старонкі"</string>
-    <string name="action_bar_up_description" msgid="2237496562952152589">"Перайсці ўверх"</string>
-    <string name="action_menu_overflow_description" msgid="2295659037509008453">"Больш налад"</string>
-    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
-    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
-    <string name="storage_internal" msgid="4891916833657929263">"Унутраная памяць"</string>
-    <string name="storage_sd_card" msgid="3282948861378286745">"SD-карта"</string>
-    <string name="storage_usb" msgid="3017954059538517278">"USB-назапашвальнік"</string>
-    <string name="extract_edit_menu_button" msgid="8940478730496610137">"Рэдагаваць"</string>
-    <string name="data_usage_warning_title" msgid="1955638862122232342">"Папярэджанне выкарыстання дадзеных"</string>
-    <string name="data_usage_warning_body" msgid="2814673551471969954">"Дакраніцеся, каб прагледзець гісторыю выкарыстання і налады."</string>
-    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Перадача дадз. 2G-3G выключана"</string>
-    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Перадача дадзеных 4G выключана"</string>
-    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Мабільная перадача дадз. выкл."</string>
-    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Перад. дадз. Wi-Fi адключаная"</string>
-    <string name="data_usage_limit_body" msgid="3317964706973601386">"Націсніце, каб уключыць."</string>
-    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Перавышаны ліміт 2G-3G"</string>
-    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Перавышаны ліміт дадзеных 4G"</string>
-    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Перавышаны ліміт мабільных дадзеных"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Перав. ліміт па дадзеным Wi-Fi"</string>
-    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"Аб\'ём <xliff:g id="SIZE">%s</xliff:g> перавышае устаноўл. мяжу."</string>
-    <string name="data_usage_restricted_title" msgid="5965157361036321914">"Зыходныя дадзеныя абмежаваныя"</string>
-    <string name="data_usage_restricted_body" msgid="6741521330997452990">"Націсніце, каб зняць абмежаванне."</string>
-    <string name="ssl_certificate" msgid="6510040486049237639">"Сертыфікат бяспекі"</string>
-    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Гэты сертыфікат сапраўдны."</string>
-    <string name="issued_to" msgid="454239480274921032">"Выдадзены:"</string>
-    <string name="common_name" msgid="2233209299434172646">"Звычайнае імя:"</string>
-    <string name="org_name" msgid="6973561190762085236">"Арганізацыя:"</string>
-    <string name="org_unit" msgid="7265981890422070383">"Аддзел арганізацыі:"</string>
-    <string name="issued_by" msgid="2647584988057481566">"Выдана:"</string>
-    <string name="validity_period" msgid="8818886137545983110">"Тэрмін дзеяння:"</string>
-    <string name="issued_on" msgid="5895017404361397232">"Выдадзены:"</string>
-    <string name="expires_on" msgid="3676242949915959821">"Заканчваецца:"</string>
-    <string name="serial_number" msgid="758814067660862493">"Серыйны нумар:"</string>
-    <string name="fingerprints" msgid="4516019619850763049">"Адбіткі пальцаў:"</string>
-    <string name="sha256_fingerprint" msgid="4391271286477279263">"Адбітак пальцаў SHA-256:"</string>
-    <string name="sha1_fingerprint" msgid="7930330235269404581">"Адбіткі пальцаў SHA-1:"</string>
-    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Прагледзець усё"</string>
-    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Выберыце працэс"</string>
-    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Апублікаваць з дапамогай"</string>
-    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
-    <string name="sending" msgid="3245653681008218030">"Адпраўка..."</string>
-    <string name="launchBrowserDefault" msgid="2057951947297614725">"Запусцiць браўзер?"</string>
-    <string name="SetupCallDefault" msgid="5834948469253758575">"Прыняць выклік?"</string>
-    <string name="activity_resolver_use_always" msgid="8017770747801494933">"Заўсёды"</string>
-    <string name="activity_resolver_use_once" msgid="2404644797149173758">"Толькі адзін раз"</string>
-    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Планшэт"</string>
-    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Тэлефон"</string>
-    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Навушнікі"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Дынамікі станцыi"</string>
-    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
-    <string name="default_audio_route_category_name" msgid="3722811174003886946">"Сістэма"</string>
-    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-аўдыё"</string>
-    <string name="wireless_display_route_description" msgid="9070346425023979651">"Бесправадны дысплей"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Гатова"</string>
-    <string name="media_route_button_content_description" msgid="5758553567065145276">"Мультымедыйны выхад"</string>
-    <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканiраванне..."</string>
-    <string name="media_route_status_connecting" msgid="6422571716007825440">"Падключэнне..."</string>
-    <string name="media_route_status_available" msgid="6983258067194649391">"Даступна"</string>
-    <string name="media_route_status_not_available" msgid="6739899962681886401">"Недаступны"</string>
-    <!-- no translation found for media_route_status_in_use (4533786031090198063) -->
-    <skip />
-    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Убудаваны экран"</string>
-    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Экран HDMI"</string>
-    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Оверлей # <xliff:g id="ID">%1$d</xliff:g>"</string>
-    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> кр. на цалю"</string>
-    <!-- no translation found for display_manager_overlay_display_secure_suffix (6022119702628572080) -->
-    <skip />
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Падключаны бесправадны дысплей"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Гэты экран паказваецца на іншай прыладзе"</string>
-    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Адключыць"</string>
-    <string name="kg_emergency_call_label" msgid="684946192523830531">"Экстранны выклік"</string>
-    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забылі ключ"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Няправільна ключ"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Няправiльны пароль"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"Няправільны PIN-код"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Паўтарыце спробу праз <xliff:g id="NUMBER">%1$d</xliff:g> с."</string>
-    <string name="kg_pattern_instructions" msgid="398978611683075868">"Намалюйце ключ"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Увядзіце PIN-код SIM-карты"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"Увядзіце PIN-код"</string>
-    <string name="kg_password_instructions" msgid="5753646556186936819">"Увядзіце пароль"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-карта зараз адключана. Увядзіце PUK-код, каб працягнуць. Звяжыцеся са сваiм аператарам, каб атрымаць дадатковую iнфармацыю."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Увядзіце жаданы PIN-код"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Пацвердзіце жадан PIN-код"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблакiроўка SIM-карты..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Няправільны PIN-код."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Увядзіце PIN-код, які змяшчае ад 4 да 8 лічбаў."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код павінен утрымлiваць 8 лiчбаў і больш."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"Паўторна увядзіце правільны PUK-код. Неаднаразовыя спробы назаўжды адключаць SIM-карту."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-коды не супадаюць"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Занадта шмат спроб паўтарыць шаблон!"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Каб разблакiраваць, увайдзіце ў свой уліковы запіс Google."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Імя карыстальніка (электронная пошта)"</string>
-    <string name="kg_login_password_hint" msgid="9057289103827298549">"Пароль"</string>
-    <string name="kg_login_submit_button" msgid="5355904582674054702">"Увайсцi"</string>
-    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Няправільнае імя карыстальніка ці пароль."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забыліся на імя карыстальніка або пароль?\nНаведайце "<b>"google.com/accounts/recovery"</b></string>
-    <string name="kg_login_checking_password" msgid="1052685197710252395">"Праверка ўлiковага запiсу..."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Вы няправільна ўвялі PIN-код пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Вы няправільна ўвялі пароль пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да заводскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да завадскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да завадскіх налад."</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Вы няправільна спрабавалі разблакiраваць тэлефон некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да завадскіх налад."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google.\n\n Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google.\n\n Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
-    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
-    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Выдалiць"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"Павялiчыць гук больш за рэкамендаваны ўзровень?\nДоўгае слуханне музыкi на вялiкай гучнасцi можа пашкодзiць ваш слых."</string>
-    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Утрымлiвайце два пальцы, каб уключыць доступ."</string>
-    <string name="accessibility_enabled" msgid="1381972048564547685">"Даступнасць уключана."</string>
-    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"Даступнасць адменена."</string>
-    <string name="user_switched" msgid="3768006783166984410">"Бягучы карыстальнік <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="owner_name" msgid="2716755460376028154">"Уладальнік"</string>
-    <string name="error_message_title" msgid="4510373083082500195">"Памылка"</string>
-    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"Гэта прыкладанне не падтрымлівае ўліковыя запісы для профiляў з абмежаваннямі"</string>
-    <string name="app_not_found" msgid="3429141853498927379">"Прыкладанне для гэтага дзеяння не знойдзенае"</string>
-    <string name="revoke" msgid="5404479185228271586">"Ануляваць"</string>
-    <!-- no translation found for mediasize_iso_a0 (1994474252931294172) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a1 (3333060421529791786) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a2 (3097535991925798280) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a3 (3023213259314236123) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a4 (231745325296873764) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a5 (3484327407340865411) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a6 (4861908487129577530) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a7 (5890208588072936130) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a8 (4319425041085816612) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a9 (4882220529506432008) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_a10 (2382866026365359391) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b0 (3651827147402009675) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b1 (6072859628278739957) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b2 (1348731852150380378) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b3 (2612510181259261379) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b4 (695151378838115434) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b5 (4863754285582212487) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b6 (5305816292139647241) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b7 (531673542602786624) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b8 (9164474595708850034) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b9 (282102976764774160) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_b10 (4517141714407898976) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c0 (3103521357901591100) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c1 (1231954105985048595) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c2 (927702816980087462) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c3 (835154173518304159) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c4 (5095951985108194011) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c5 (1985397450332305739) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c6 (8147421924174693013) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c7 (8993994925276122950) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c8 (6871178104139598957) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c9 (7983532635227561362) -->
-    <skip />
-    <!-- no translation found for mediasize_iso_c10 (5040764293406765584) -->
-    <skip />
-    <!-- no translation found for mediasize_na_letter (2841414839888344296) -->
-    <skip />
-    <!-- no translation found for mediasize_na_gvrnmt_letter (5295836838862962809) -->
-    <skip />
-    <!-- no translation found for mediasize_na_legal (8621364037680465666) -->
-    <skip />
-    <!-- no translation found for mediasize_na_junior_legal (3309324162155085904) -->
-    <skip />
-    <!-- no translation found for mediasize_na_ledger (5567030340509075333) -->
-    <skip />
-    <!-- no translation found for mediasize_na_tabloid (4571735038501661757) -->
-    <skip />
-    <!-- no translation found for mediasize_na_index_3x5 (5182901917818625126) -->
-    <skip />
-    <!-- no translation found for mediasize_na_index_4x6 (7687620625422312396) -->
-    <skip />
-    <!-- no translation found for mediasize_na_index_5x8 (8834215284646872800) -->
-    <skip />
-    <!-- no translation found for mediasize_na_monarch (213639906956550754) -->
-    <skip />
-    <!-- no translation found for mediasize_na_quarto (835778493593023223) -->
-    <skip />
-    <!-- no translation found for mediasize_na_foolscap (1573911237983677138) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_roc_8k (3626855847189438896) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_roc_16k (9182191577022943355) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_1 (4793232644980170500) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_2 (5404109730975720670) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_3 (1335092253339363526) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_4 (9167997800486569834) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_5 (845875168823541497) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_6 (3220325667692648789) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_7 (1776792138507038527) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_8 (1417176642687456692) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_9 (4785983473123798365) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_10 (7847982299391851899) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_prc_16k (262793383539980677) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_om_pa_kai (5256815579447959814) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_om_dai_pa_kai (7336412963441354407) -->
-    <skip />
-    <!-- no translation found for mediasize_chinese_om_jurro_ku_kai (6324465444100490742) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b10 (1787262845627694376) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b9 (3336035783663287470) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b8 (6195398299104345731) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b7 (1674621886902828884) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b6 (4170576286062657435) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b5 (4899297958100032533) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b4 (4213158129126666847) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b3 (8513715307410310696) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b2 (4777690211897131190) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b1 (4608142385457034603) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_b0 (7587108366572243991) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_jis_exec (5244075432263649068) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_chou4 (4941652015032631361) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_chou3 (6387319169263957010) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_chou2 (1299112025415343982) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_hagaki (8070115620644254565) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_oufuku (6049065587307896564) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_kahu (6872696027560065173) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_kaku2 (2359077233775455405) -->
-    <skip />
-    <!-- no translation found for mediasize_japanese_you4 (2091777168747058008) -->
-    <skip />
-    <!-- no translation found for mediasize_unknown_portrait (3088043641616409762) -->
-    <skip />
-    <!-- no translation found for mediasize_unknown_landscape (4876995327029361552) -->
-    <skip />
-    <!-- no translation found for write_fail_reason_cancelled (7091258378121627624) -->
-    <skip />
-    <!-- no translation found for write_fail_reason_cannot_write (8132505417935337724) -->
-    <skip />
-    <!-- no translation found for reason_unknown (6048913880184628119) -->
-    <skip />
-    <!-- no translation found for reason_service_unavailable (7824008732243903268) -->
-    <skip />
-    <!-- no translation found for print_service_installed_title (2246317169444081628) -->
-    <skip />
-    <!-- no translation found for print_service_installed_message (5897362931070459152) -->
-    <skip />
-    <!-- no translation found for restr_pin_enter_admin_pin (783643731895143970) -->
-    <skip />
-    <!-- no translation found for restr_pin_enter_pin (3395953421368476103) -->
-    <skip />
-    <!-- no translation found for restr_pin_incorrect (8571512003955077924) -->
-    <skip />
-    <!-- no translation found for restr_pin_enter_old_pin (1462206225512910757) -->
-    <skip />
-    <!-- no translation found for restr_pin_enter_new_pin (5959606691619959184) -->
-    <skip />
-    <!-- no translation found for restr_pin_confirm_pin (8501523829633146239) -->
-    <skip />
-    <!-- no translation found for restr_pin_create_pin (8017600000263450337) -->
-    <skip />
-    <!-- no translation found for restr_pin_error_doesnt_match (2224214190906994548) -->
-    <skip />
-    <!-- no translation found for restr_pin_error_too_short (8173982756265777792) -->
-    <skip />
-    <!-- no translation found for restr_pin_countdown:one (311050995198548675) -->
-    <!-- no translation found for restr_pin_countdown:other (4730868920742952817) -->
-    <!-- no translation found for restr_pin_try_later (973144472490532377) -->
-    <skip />
-    <!-- no translation found for immersive_mode_confirmation (7227416894979047467) -->
-    <!-- no translation found for immersive_mode_confirmation (8554991488096662508) -->
-    <skip />
-</resources>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 99ba922..2d22cdc 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"ТБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Без заглавие&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Въведете PUK код с поне осем цифри."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM картата ви е заключена с PUK. Въведете PUK кода, за да я отключите."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Въведете PUK2, за да отблокирате SIM картата."</string>
+    <string name="enablePin" msgid="209412020907207950">"Неуспешно – активирайте заключването на SIM/RUIM картата."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Остава ви <xliff:g id="NUMBER">%d</xliff:g> опит, преди SIM картата да бъде заключена."</item>
+    <item quantity="other" msgid="7530597808358774740">"Остават ви <xliff:g id="NUMBER">%d</xliff:g> опита, преди SIM картата да бъде заключена."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Идентификация на вх. обаждания"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Синхронизиране"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Изтриванията за <xliff:g id="CONTENT_TYPE">%s</xliff:g> са твърде много."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Хранилището на таблета е пълно. Изтрийте файлове, за да освободите място."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Хранилището на часовника е пълно. Изтрийте файлове, за да освободите място."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Хранилището на телефона е пълно. Изтрийте файлове, за да освободите място."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Мрежата може да се наблюдава"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"От неизвестна трета страна"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Звъненето е включено"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Изключва се..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Таблетът ви ще се изключи."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Часовникът ви ще се изключи."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Телефонът ви ще се изключи."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Искате ли да изключите?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Рестартиране в безопасен режим"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Самолетен режим"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Самолетният режим е ВКЛЮЧЕН"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Самолетният режим е ИЗКЛЮЧЕН"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Настройки"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Безопасен режим"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Системно от Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"деинсталиране на преки пътища"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Разрешава на приложението да премахва преки пътища от началния екран без намеса на потребителя."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"пренасочване на изходящите обаждания"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Разрешава на приложението да обработва изходящите обаждания и да променя номера, който да се набере. Това разрешение му позволява да наблюдава, пренасочва или не допуска изходящи обаждания."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Разрешава на приложението да вижда набирания номер по време на изходящо обаждане и му дава възможност да пренасочи обаждането към друг номер или да го прекрати изцяло."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"получаване на текстови съобщения (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Разрешава на приложението да получава и обработва SMS съобщения. Това означава, че то може да наблюдава или изтрива изпратените до устройството ви, без да ви ги покаже."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"получаване на текстови съобщения (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Разрешава на приложението да извлича съдържанието от активния прозорец. Злонамерените приложения могат да извлекат цялото му съдържание и да проследят целия текст в него освен паролите."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"временно активиране на достъпността"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Разрешава на приложението временно да активира достъпността на устройството. Злонамерените приложения може да я активират без съгласието на потребителя."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"извличане на информация за прозорците"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Разрешава на приложението да извлича информация за прозорците от съответния мениджър. Злонамерените приложения може да извличат данни, които са предназначени за вътрешно използване от системата."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"извличане на означението за прозорци"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Разрешава на приложението да извлича означението за прозорци. Представяйки се за системата, злонамерените приложения може да извършат неупълномощено взаимодействие с прозореца на приложението."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"извличане на статистически данни за кадрите"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Разрешава на приложението да събира статистически данни за кадрите. Злонамерените приложения може да наблюдават тези данни за прозорците на други приложения."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"филтриране на събитията"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Разрешава на приложението да регистрира входящ филтър, който филтрира потока на всички потребителски събития преди изпращането им. Злонамерено приложение може да контролира системния потребителски интерфейс без намесата на потребителя."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"промяна на мащаба на дисплея"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Разрешава на приложението да променя мащаба на съдържанието на дисплей. Злонамерените приложения може да преобразят съдържанието на дисплея по начин, който изобразява устройството като неизползваемо."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"частично изключване"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Изключва диспечера на дейностите. Не извършва пълно изключване."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"предотвратяване на превключването между приложения"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Разрешава на приложението да излъчва известие, че е получен SMS. Злонамерените приложения могат да използват това, за да фалшифицират входящите SMS съобщения."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"изпращане на излъчване при получено WAP PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Разрешава на приложението да излъчва известие, че е получено WAP PUSH съобщение. Злонамерените приложения могат да използват това, за да фалшифицират получаването на MMS или скрито да заменят съдържанието на произволна уеб страница със злонамерен вариант."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"изпращане на излъчване за оценяване на мрежите"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Разрешава на приложението да излъчи известие, че мрежите трябва да бъдат оценени. Не е необходимо за нормалните приложения."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ограничаване на броя изпълнявани процеси"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Разрешава на приложението да контролира максималния брой изпълнявани процеси. Нормалните приложения никога не се нуждаят от това."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"принудително затваряне на приложенията на заден план"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на услуга за VPN. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"обвързване с тапет"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на тапет. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"свързване с услуга за гласово взаимодействие"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Разрешава на притежателя да се свърже с интерфейса от най-високото ниво на услуга за гласово взаимодействие. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"свързване с отдалечен екран"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Разрешава на притежателя да се свърже с интерфейса от първо ниво на отдалечен екран. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"обвързване с услуга за приспособления"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Разрешава на притежателя да се обвърже с интерфейса от най-високото ниво на услуга за приспособления. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"свързване с услуга за предоставяне на маршрути"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Разрешава на собственика да се свързва с всички регистрирани доставчици на маршрути. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"взаимодействие с администратор на устройството"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Разрешава на притежателя да изпраща намерения до администратор на устройството. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"свързване към вход на телевизор"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Разрешава на притежателя да се свърже към интерфейса от най-високото ниво за вход на телевизор. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"добавяне или премахване на администратор на устройства"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Разрешава на притежателя да добавя или премахва администратори на активни устройства. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"промяна на ориентацията на екрана"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Разрешава на приложението да използва всеки инсталиран медиен декодер с цел декодиране за възпроизвеждане."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"управление на надеждните идентификационни данни"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Разрешава на приложението да инсталира и деинсталира сертификати от сертифициращи органи като надеждни идентификационни данни."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"изпълняване на приложението по време на неактивност"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Това разрешение позволява на системата Android да изпълнява приложението на заден план, докато устройството не се използва."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"четене/запис в ресурси, притежавани от diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Разрешава на приложението да чете и записва във всеки ресурс, притежаван от групата diag, например файловете в /dev. Това потенциално може да засегне стабилността и сигурността на системата. То трябва да се използва САМО за диагностика, конкретно за хардуера, от страна на производителя или оператора."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"активиране или деактивиране на компоненти на приложенията"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Разрешава на приложението да чете информацията от личния потребителски профил, съхранена на устройството ви, например вашето име и данни за връзка. Това означава, че приложението може да ви идентифицира и да изпраща информацията за потребителския ви профил на други хора."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"промяна на собств. ви карт. с данни за контакт"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Разрешава на приложението да променя или добавя към личния потребителски профил информация, съхранена на устройството ви, като например вашето име и данни за връзка. Това означава, че приложението може да ви идентифицира и да изпраща данните за потребителския ви профил на други хора."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"телесни сензори (като монитори за сърдечния ритъм)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Разрешава на приложението да осъществява достъп до данни от използваните от вас сензори, за да измери какво се случва в тялото ви, като например сърдечен ритъм."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"четене на социалния ви поток"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Разрешава на приложението да осъществява достъп и да синхронизира социални актуализации от вас и приятелите ви. Бъдете внимателни при споделянето на информация – това позволява на приложението да чете съобщения помежду ви в социалните мрежи независимо от поверителността. Забележка: Възможно е ограниченията на това разрешение да не могат да бъдат наложени във всички социални мрежи."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"писане в социалния ви поток"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Разрешава на приложението да използва функциите на SurfaceFlinger от ниско ниво."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"четене на кадровия буфер"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Разрешава на приложението да чете съдържанието на кадровия буфер."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"достъп до InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Разрешава на приложението да използва функциите на InputFlinger от ниско ниво."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"конфигуриране на дисплеите през WiFi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Разрешава на приложението да конфигурира и да се свързва с дисплеите през WiFi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"контролиране на дисплеите през WiFi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Разрешава на приложението да променя глобалните настройки за звука, като например силата и това, кой високоговорител се използва за изход."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"запис на звук"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Разрешава на приложението да записва звук с микрофона. Това разрешение му позволява да го прави по всяко време без потвърждение от ваша страна."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"комуникация със SIM картата"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Разрешава на приложението да изпраща команди до SIM картата. Това е много опасно."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"правене на снимки и видеоклипове"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Разрешава на приложението да прави снимки и видеоклипове с камерата. Това разрешение му позволява да я използва по всяко време без потвърждение от ваша страна."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"деактивиране на светодиодния индикатор за предаване, когато камерата се използва"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Разрешава на приложението да контролира телефонните функции на устройството. Приложение с такова разрешение може да превключва между мрежи, да включва и изключва радиомодула на телефона и други подобни, без изобщо да ви известява."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"четене на състоянието и идентификационните данни на телефона"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Разрешава на приложението достъп до телефонните функции на устройството. Това разрешение позволява на приложението да определя телефонния номер и идентификационния номер на устройството, дали се води разговор и отдалечения номер, до който е установена връзка с обаждането."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"четене на точните състояния на телефона"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Позволява на приложението да осъществява достъп до точните състояния на телефона. С това разрешение то може да определи действителното състояние на обаждането – дали е активно, или е на заден план, дали е неуспешно, точното състояние на връзката за пренос на данни и неуспешната връзка за пренос."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"предотвратяване на спящия режим на таблета"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"предотвратява спящ режим на телефона"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Разрешава на приложението да предотвратява преминаването на таблета в спящ режим."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Промяна на състоянието на WiMAX мрежата"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Разрешава на приложението да свързва таблета към WiMAX мрежа и да прекратява връзката му с нея."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Разрешава на приложението да свързва телефона към WiMAX мрежа и да прекратява връзката му с нея."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"оценяване на мрежите"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Разрешава на приложението да класира мрежите и да повлияе върху това, кои да са предпочитаните за таблета."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Разрешава на приложението да класира мрежите и да повлияе върху това, кои да са предпочитаните за телефона."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"сдвояване с устройства с Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Разрешава на приложението да вижда конфигурацията на Bluetooth на таблета и да изгражда и приема връзки със сдвоени устройства."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Разрешава на приложението да вижда конфигурацията на Bluetooth на телефона и да изгражда и приема връзки със сдвоени устройства."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Разрешава на приложението да извлича, преглежда и изчиства известия, включително публикуваните от други приложения."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"обвързване с услуга за слушател на известия"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Разрешава на притежателя да се обвърже с интерфейса от първо ниво на услуга за слушател на известия. Нормалните приложения не би трябвало никога да се нуждаят от това."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"свързване с услуга за предоставяне на условия"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Разрешава на притежателя да се свърже с интерфейса от най-високото ниво на услуга за предоставяне на условия. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"извикване на предоставеното от оператора приложение за конфигуриране"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Разрешава на притежателя да извиква предоставеното от оператора приложение за конфигуриране. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"слушане за наблюдения на мрежовите условия"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Разрешава на приложението да слуша за наблюдения на мрежовите условия. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"промяна на калибрирането на устройството за въвеждане"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Разрешава на приложението да променя параметрите на калибриране на сензорния екран. Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"достъп до сертификатите за управление на цифровите права (DRM)"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Разрешава на приложението да обезпечава и използва сертификатите за управление на цифровите права (DRM). Нормалните приложения би трябвало никога да не се нуждаят от това."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Задаване на правила за паролата"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Контролирайте дължината и разрешените знаци за паролите за отключване на екрана."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Наблюдаване на опитите за отключване на екрана"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Домашен"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Служебен"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Друг"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Няма намерено приложение, с което да се отвори този контакт."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Въведете ПИН кода"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Въведете PUK и новия ПИН код"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK код"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Позволява на приложението да осъществява достъп до надеждното хранилище, свързано с функцията за защита на клавишите."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Контролиране на показването и скриването на функцията за защита на клавишите"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Разрешава на приложението да контролира функцията за защита на клавишите."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Следене за промени в състоянието на надеждност"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Разрешава на приложението да следи за промени в състоянието на надеждност."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Обвързване с услуга за trust agents"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Разрешава на приложението да се обвърже с услуга за trust agents."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Взаимодействие със системата за актуализации и възстановяване"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Разрешава на приложението да взаимодейства със системата за възстановяване и системните актуализации."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Докоснете двукратно за управление на промяната на мащаба"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Приспособлението не можа да бъде добавено."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Старт"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Тапет"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Промяна на тапета"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Слушател на известия"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Доставчик на условия"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN е активирана"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN е активирана от <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Докоснете за управление на мрежата."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Изберете приложение"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> не можа да се стартира"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Споделяне със"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Споделяне със: <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Плъзгаща се дръжка. Докоснете и задръжте."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Плъзнете нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Плъзнете надолу за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Плъзнете наляво за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Плъзнете надясно за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Отключване"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Тих режим"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Включване на звука"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Търсене"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Прокарайте пръст, за да отключите."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Включете слушалки, за да чуете изговарянето на клавишите за паролата."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Звук през Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Безжичен дисплей"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Изходяща мултимедия"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Свързване с устройство"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Екран за предаване към устройството"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Търсят се устройства…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Настройки"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Прекратяване на връзката"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканира се..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Установява се връзка..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Налице"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Наслагване №<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"„<xliff:g id="NAME">%1$s</xliff:g>“: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", защитено"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Безжичният дисплей е свързан"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Този екран се показва на друго устройство"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Екранът се предава"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Установява се връзка с/ъс „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Екранът се предава"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Установена е връзка с/ъс „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Прекратяване на връзката"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Спешно обаждане"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забравена фигура"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM картата се отключва…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправилен ПИН код."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Въведете ПИН код с четири до осем цифри."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK кодът трябва да е с 8 или повече цифри."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK кодът трябва да е с осем цифри."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Въведете отново правилния PUK код. Многократните опити ще деактивират за постоянно SIM картата."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"ПИН кодовете не съвпадат"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Опитите за фигурата са твърде много"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Опитайте отново по-късно"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"За изход от цял екран прекарайте пръст отгоре надолу."</string>
+    <string name="done_label" msgid="2093726099505892398">"Готово"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Кръгов плъзгач за часовете"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Кръгов плъзгач за минутите"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Избиране на часове"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Избиране на минути"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Месечна таблица на дните"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Списък с години"</string>
+    <string name="select_day" msgid="7774759604701773332">"Избиране на месец и ден"</string>
+    <string name="select_year" msgid="7952052866994196170">"Избиране на година"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Избрахте <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Изтрихте <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index 8b46e84..cfb77d3 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Sense títol&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Introdueix un PUK compost com a mínim de 8 nombres."</string>
     <string name="needPuk" msgid="919668385956251611">"La targeta SIM està bloquejada pel PUK. Escriviu el codi PUK per desbloquejar-la."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Escriviu el PUK2 per desbloquejar la targeta SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"No és correcte; activa el bloqueig de RUIM/SIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Et queda <xliff:g id="NUMBER">%d</xliff:g> intent; si no l\'encertes, la SIM es bloquejarà."</item>
+    <item quantity="other" msgid="7530597808358774740">"Et queden <xliff:g id="NUMBER">%d</xliff:g> intents; si no l\'encertes, la SIM es bloquejarà."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Identificació de trucada entrant"</string>
@@ -130,8 +157,9 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronització"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Massa supressions de <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"L\'emmagatzematge de la tauleta és ple. Suprimeix uns quants fitxers per alliberar espai."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"L\'emmagatzematge del rellotge està ple. Suprimeix uns quants fitxers per alliberar espai."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"L\'emmagatzematge del telèfon és ple. Suprimeix uns quants fitxers per alliberar espai."</string>
-    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Pot ser que la xarxa se supervisi."</string>
+    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"És possible que la xarxa estigui supervisada"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Per un tercer desconegut"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"Per <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
     <string name="me" msgid="6545696007631404292">"Mi"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Timbre activat"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"S\'està apagant..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"La tauleta s\'apagarà."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"El rellotge s\'apagarà."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"El telèfon s\'apagarà."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Vols apagar-lo?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reinicia en mode segur"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode d\'avió"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mode d\'avió activat"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mode d\'avió desactivat"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Configuració"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"+999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Mode segur"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"desinstal·la dreceres"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permet que l\'aplicació suprimeixi les dreceres de la pantalla d\'inici sense la intervenció de l\'usuari."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"desviació de les trucades sortints"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permet que l\'aplicació processi les trucades sortints i que canviï el número que es marcarà. Aquest permís permet que l\'aplicació supervisi, redirigeixi o bloquegi les trucades sortints."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permet que l\'aplicació vegi el número que s\'està marcant durant una trucada sortint, amb l\'opció de redirigir la trucada a un altre número o bé de cancel·lar-la completament."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"recepció de missatges de text (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permet que l\'aplicació rebi i processi missatges SMS. Això vol dir que l\'aplicació pot controlar o suprimir missatges que s\'han enviat al teu dispositiu sense mostrar-te\'ls."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"recepció de missatges de text (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permet que l\'aplicació recuperi el contingut de la finestra activa. Les aplicacions malicioses poden recuperar el contingut de tota la finestra i examinar-ne tot el text, excepte les contrasenyes."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"activació temporal de l\'accessibilitat"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permet que una aplicació activi temporalment l\'accessibilitat al dispositiu. És possible que les aplicacions malicioses activin l\'accessibilitat sense el consentiment de l\'usuari."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recupera informació de les finestres"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permet que una aplicació recuperi informació sobre les finestres del gestor de finestres. Aplicacions malicioses podrien recuperar informació dirigida a la utilització per part del sistema intern."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"recuperació del testimoni de la finestra"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permet que una aplicació recuperi el testimoni de la finestra. Les aplicacions malicioses poden suplantar la identitat del sistema per dur a terme una interacció no autoritzada amb la finestra de l\'aplicació."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"recuperació d\'estadístiques de fotogrames"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permet que una aplicació recopili estadístiques de fotogrames. Les aplicacions malicioses poden veure les estadístiques de fotogrames de finestres d\'altres aplicacions."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtra els esdeveniments"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permet que una aplicació registri un filtre d\'entrada per a l\'emissió de tots els esdeveniments d\'usuari abans no s\'enviïn. Aplicacions malicioses podrien controlar la IU del sistema sense la intervenció de l\'usuari."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"augment de la pantalla"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permet a una aplicació augmentar el contingut d\'una pantalla. Les aplicacions malicioses poden transformar el contingut de la pantalla de manera que el dispositiu no es pugui fer servir."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"apagar parcialment"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Posa el gestor d\'activitats en estat d\'apagada. No fa una apagada completa."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir els canvis d\'aplicació"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permet que l\'aplicació difongui una notificació en què s\'indiqui que s\'ha rebut un missatge SMS. Les aplicacions malicioses poden fer servir aquesta funció per falsificar els missatges SMS entrants."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"enviar una difusió de tipus WAP-PUSH-received"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permet que l\'aplicació difongui una notificació que indica que s\'ha rebut un missatge d\'inserció WAP. Les aplicacions malicioses poden utilitzar-ho per falsificar la recepció dels missatges MMS o per substituir silenciosament el contingut d\'una pàgina web per variants malicioses."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"enviar l\'emissió de la puntuació de les xarxes"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Permet que l\'aplicació emeti una notificació necessària perquè les xarxes rebin una puntuació. No es necessita mai per a les aplicacions normals."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitar el nombre de processos en execució"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permet que l\'aplicació controli el nombre màxim de processos que s\'executaran. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"com fer que es tanquin les aplicacions en segon pla"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permet que el titular vinculi a la interfície de nivell superior d\'un servei de VPN. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"enllaça amb un fons de pantalla"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permet que el titular vinculi a la interfície de nivell superior d\'un fons de pantalla. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"vinculació amb una eina d\'interacció de veu"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permet que el titular es vinculi amb la interfície de nivell superior d\'un servei d\'interacció de veu. No ha de ser mai necessari per a aplicacions normals."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"vincula a una pantalla remota"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permet que el titular es vinculi a la interfície de nivell superior d\'una pantalla remota. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincula a un servei de widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permet que el titular vinculi a la interfície de nivell superior d\'un servei de widget. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"establir vincles amb un servei d\'aprovisionament de rutes"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permet que el titular estableixi vincles amb els proveïdors de rutes registrats. No hauria de ser mai necessari per a les aplicacions normals."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactuar amb un administrador del dispositiu"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permet que el titular enviï intents a un administrador del sistema. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"Vinculació a una entrada de televisor"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permet que el titular es vinculi a la interfície de nivell superior d\'una entrada de televisor. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"afegeix un administrador al dispositiu o suprimeix-lo"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permet que el titular afegeixi administradors actius al dispositiu o en suprimeixi. No s\'hauria de necessitar per a les aplicacions normals."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"canviar l\'orientació de la pantalla"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permet que l\'aplicació utilitzi qualsevol descodificador de mitjans instal·lat per descodificar per a la reproducció."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"gestiona les credencials de confiança"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permet que l\'aplicació instal·li i desinstal·li certificats de CA com a credencials de confiança."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"executar l\'aplicació durant el temps d\'inactivitat"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Aquest permís permet que el sistema Android executi l\'aplicació en segon pla mentre el dispositiu no està en ús."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"llegir/escriure recursos propietat de diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permet que l\'aplicació llegeixi i escrigui a qualsevol recurs propietat del grup diag; per exemple, els fitxers de /dev. Això podria afectar l\'estabilitat i la seguretat del sistema. NOMÉS l\'hauria d\'utilitzar el fabricant o l\'operador per a diagnòstics específics de maquinari."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"activa o desactiva els components de l\'aplicació"</string>
@@ -425,19 +467,19 @@
     <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Permet que una aplicació concedeixi o denegui permisos específics per a aquesta o per a altres aplicacions. És possible que les aplicacions malicioses ho facin servir per accedir a funcions a les quals no has concedit accés."</string>
     <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"defineix les aplicacions preferides"</string>
     <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Permet que l\'aplicació modifiqui les aplicacions preferides. Les aplicacions malicioses poden canviar silenciosament les aplicacions que s\'executen, falsejar les aplicacions existents o recollir dades privades de l\'usuari."</string>
-    <string name="permlab_writeSettings" msgid="2226195290955224730">"modificació de la configuració del sistema"</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"modificar la configuració del sistema"</string>
     <string name="permdesc_writeSettings" msgid="7775723441558907181">"Permet que l\'aplicació modifiqui les dades de configuració del sistema. Les aplicacions malicioses poden malmetre la configuració del sistema."</string>
     <string name="permlab_writeSecureSettings" msgid="204676251876718288">"modificar la configuració de seguretat del sistema"</string>
     <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Permet que l\'aplicació modifiqui les dades de la configuració de seguretat del sistema. No indicat per a les aplicacions normals."</string>
     <string name="permlab_writeGservices" msgid="2149426664226152185">"modificar el mapa de serveis de Google"</string>
     <string name="permdesc_writeGservices" msgid="1287309437638380229">"Permet que l\'aplicació modifiqui el mapa dels serveis de Google. No la poden fer servir les aplicacions normals."</string>
-    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"execució en iniciar"</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"executar-se a l\'inici"</string>
     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Permet que l\'aplicació s\'iniciï tan bon punt el sistema hagi acabat d\'arrencar. Això pot fer que es trigui més a iniciar el telèfon i permetre a l\'aplicació alentir-ne el funcionament general en executar-se sempre."</string>
     <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Permet que l\'aplicació s\'iniciï tan bon punt el sistema hagi acabat d\'arrencar. Això pot fer que es trigui més a iniciar el telèfon i permetre a l\'aplicació alentir-ne el funcionament general si s\'executa sempre."</string>
     <string name="permlab_broadcastSticky" msgid="7919126372606881614">"enviar difusió permanent"</string>
     <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Permet que l\'aplicació enviï emissions permanents, que es conserven després de finalitzar l\'emissió. L\'ús excessiu pot alentir o desestabilitzar la tauleta si li fan utilitzar massa memòria."</string>
     <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Permet que l\'aplicació enviï emissions permanents, que es conserven després de finalitzar l\'emissió. L\'ús excessiu pot alentir o desestabilitzar el telèfon si li fan utilitzar massa memòria."</string>
-    <string name="permlab_readContacts" msgid="8348481131899886131">"lectura dels contactes"</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"consultar els contactes"</string>
     <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Permet que l\'aplicació llegeixi dades sobre els contactes que tinguis emmagatzemats a la tauleta, inclosa la freqüència amb què has trucat, has enviat correus electrònics o t\'has comunicat d\'altres maneres amb persones concretes. Aquest permís permet que les aplicacions desin les dades dels teus contactes, i és possible que les aplicacions malicioses comparteixin dades dels contactes sense el teu coneixement."</string>
     <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Permet que l\'aplicació llegeixi dades sobre els contactes que tinguis emmagatzemats al telèfon, inclosa la freqüència amb què has trucat, has enviat correus electrònics o t\'has comunicat d\'altres maneres amb persones concretes. Aquest permís permet que les aplicacions desin les dades dels teus contactes, i és possible que les aplicacions malicioses comparteixin dades dels contactes sense el teu coneixement."</string>
     <string name="permlab_writeContacts" msgid="5107492086416793544">"modificar els teus contactes"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permet que l\'aplicació pugui llegir informació del perfil personal emmagatzemada al dispositiu, com ara el teu nom i la teva informació de contacte. Això significa que l\'aplicació et pot identificar i enviar la informació del teu perfil a altres persones."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modificació targeta contacte"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permet que l\'aplicació pugui canviar o afegir informació del perfil personal emmagatzemada al dispositiu, com ara el teu nom i la teva informació de contacte. Això significa que l\'aplicació et pot identificar i enviar la informació del teu perfil a altres persones."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"sensors corp. (monitors freq. cardíaca)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permet que l\'aplicació accedeixi a les dades dels sensors que utilitzes per mesurar els signes vitals del teu cos, com ara la freqüència cardíaca."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"llegeix el teu tauler d\'activitat social"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permet que l\'aplicació accedeixi i sincronitzi actualitzacions socials teves i dels teus amics. Vés amb compte en compartir informació: això permet que l\'aplicació llegeixi comunicacions entre tu i els teus amics a les xarxes socials, independentment de la confidencialitat. Nota: És possible que aquest permís no s\'apliqui a totes les xarxes socials."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escriu al tauler d\'activitat social"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permet que l\'aplicació utilitzi funcions SurfaceFlinger de baix nivell."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"llegir la memòria intermèdia de marcs"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permet que l\'aplicació llegeixi el contingut de la memòria intermèdia de marcs."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"accedeix a InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permet que l\'aplicació utilitzi funcions de baix nivell d\'InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configuració de les pantalles Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permet a l\'aplicació configurar-se i connectar-se a les pantalles Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"control de les pantalles Wi-Fi"</string>
@@ -495,7 +541,9 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet que l\'aplicació modifiqui la configuració d\'àudio general, com ara el volum i l\'altaveu de sortida que es fa servir."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"enregistrar àudio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permet que l\'aplicació enregistri àudio amb el micròfon. Aquest permís permet que l\'aplicació enregistri àudio en qualsevol moment sense la teva confirmació."</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"fes fotos i vídeos"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicació SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permet que l\'aplicació enviï ordres a la SIM. Això és molt perillós."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"fer fotos i vídeos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permet que l\'aplicació faci fotos i vídeos amb la càmera. Aquest permís permet que l\'aplicació utilitzi la càmera en qualsevol moment sense la teva confirmació."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"desactiva la transmissió del LED indicador en fer servir la càmera"</string>
     <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Permet que una aplicació dels sistema preinstal·lada desactivi el LED indicador d\'ús de la càmera."</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permet que l\'aplicació controli les funcions de telèfon del dispositiu. Una aplicació amb aquest permís pot canviar de xarxa, activar i desactivar el senyal mòbil i dur a terme accions semblants sense notificar-t\'ho."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"veure l\'estat i la identitat del telèfon"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permet que l\'aplicació accedeixi a les funcions de telèfon del dispositiu. Aquest permís permet que l\'aplicació determini el número de telèfon i els identificadors del dispositiu, si hi ha una trucada activa i el número remot connectat amb una trucada."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"llegeix els estats exactes del telèfon"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permet que l\'aplicació accedeixi als estats exactes del telèfon. Amb aquest permís, l\'aplicació pot determinar l\'estat real de la trucada, si la trucada està activa o en segon pla, si s\'ha produït algun error, l\'estat exacte de la connexió de dades i els errors de la connexió de dades."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evita que la tauleta entri en mode d\'inactivitat"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"impedir que el telèfon entri en mode de repòs"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permet que l\'aplicació impedeixi que la tauleta entri en repòs."</string>
@@ -583,7 +633,7 @@
     <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Permet que l\'aplicació obtingui la llista de comptes coneguts pel telèfon. Això pot incloure tots els comptes que hagin creat les aplicacions que tens instal·lades."</string>
     <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"creació de comptes i definició de contrasenyes"</string>
     <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Permet que l\'aplicació utilitzi les funcions d\'autenticador de comptes del gestor de comptes, incloses la creació de comptes i l\'obtenció i la definició de les seves contrasenyes."</string>
-    <string name="permlab_manageAccounts" msgid="4983126304757177305">"addició o eliminació de comptes"</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"afegir o eliminar comptes"</string>
     <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Permet que l\'aplicació dugui a terme operacions com ara afegir i eliminar comptes i suprimir-ne la contrasenya."</string>
     <string name="permlab_useCredentials" msgid="235481396163877642">"fer servir comptes del dispositiu"</string>
     <string name="permdesc_useCredentials" msgid="7984227147403346422">"Permet que l\'aplicació sol·liciti testimonis d\'autenticació."</string>
@@ -617,16 +667,19 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Canvia l\'estat de WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permet que l\'aplicació connecti i desconnecti la tauleta de les xarxes WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permet que l\'aplicació connecti i desconnecti el telèfon de les xarxes WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"puntuar les xarxes"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Permet que l\'aplicació classifiqui les xarxes i indiqui quines han de ser les xarxes preferides de la tauleta."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Permet que l\'aplicació classifiqui les xarxes i indiqui quines han de ser les xarxes preferides del telèfon."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"emparella amb dispositius Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permet que l\'aplicació visualitzi la configuració de Bluetooth de la tauleta i que estableixi i accepti connexions amb dispositius sincronitzats."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permet que una aplicació visualitzi la configuració de Bluetooth del telèfon i que estableixi i accepti connexions amb els dispositius sincronitzats."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"controla Near Field Communication (NFC)"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"controlar Comunicació de camp proper (NFC)"</string>
     <string name="permdesc_nfc" msgid="7120611819401789907">"Permet que l\'aplicació es comuniqui amb les etiquetes, les targetes i els lectors de Near Field Communication (NFC)."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"desactivació del bloqueig de pantalla"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Permet que l\'aplicació desactivi el bloqueig del teclat i qualsevol element de seguretat de contrasenyes associat. Per exemple, el telèfon desactiva el bloqueig del teclat en rebre una trucada telefònica entrant i, a continuació, reactiva el bloqueig del teclat quan finalitza la trucada."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"llegir la configuració de sincronització"</string>
     <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Permet que l\'aplicació llegeixi la configuració de sincronització d\'un compte. Per exemple, això pot determinar que l\'aplicació Persones estigui sincronitzada amb un compte."</string>
-    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"activació o desactivació de la sincronització"</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"activar o desactivar la sincronització"</string>
     <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Permet que una aplicació modifiqui la configuració de sincronització d\'un compte. Per exemple, aquesta acció es pot fer servir per activar la sincronització de l\'aplicació Persones amb un compte."</string>
     <string name="permlab_readSyncStats" msgid="7396577451360202448">"llegir les estadístiques de sincronització"</string>
     <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Permet que una aplicació llegeixi les estadístiques de sincronització d\'un compte, inclòs l\'historial d\'esdeveniments sincronitzats i quantes dades se sincronitzen."</string>
@@ -638,7 +691,7 @@
     <string name="permdesc_readDictionary" msgid="659614600338904243">"Permet que l\'aplicació llegeixi les paraules, els noms i les frases que l\'usuari pot haver emmagatzemat al seu diccionari."</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"afegeix paraules al diccionari definit per l\'usuari"</string>
     <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Permet que l\'aplicació escrigui paraules noves al diccionari de l\'usuari."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"lectura contingut emmagat. USB"</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"consultar contingut emmagatzematge USB"</string>
     <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"lectura del contingut de la targeta SD"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Permet que l\'aplicació llegeixi el contingut de l\'emmagatzematge USB."</string>
     <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Permet que l\'aplicació llegeixi el contingut de la targeta SD."</string>
@@ -668,22 +721,28 @@
     <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"Permet que l\'aplicació modifiqui les marques de sòcols per a l\'encaminament"</string>
     <string name="permlab_accessNotifications" msgid="7673416487873432268">"accedeix a les notificacions"</string>
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permet que l\'aplicació recuperi, examini i esborri les notificacions, incloses les que han publicat altres aplicacions."</string>
-    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vincula a un servei de processament de notificacions"</string>
-    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permet que el titular vinculi la interfície de nivell superior d\'un servei de processament de notificacions. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vincula a un servei oient de notificacions"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permet que el titular vinculi la interfície de nivell superior d\'un servei oient de notificacions. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"vinculació amb el servei d\'un proveïdor de condicions"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permet que el titular es vinculi amb la interfície de nivell superior del servei d\'un proveïdor de condicions. No ha de ser mai necessari per a aplicacions normals."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invoca l\'aplicació de configuració proporcionada per l\'operador"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permet que el titular invoqui l\'aplicació de configuració proporcionada per l\'operador. No s\'hauria de necessitar mai per a les aplicacions normals."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"conèixer les observacions sobre les condicions de la xarxa"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permet que una aplicació conegui les observacions sobre les condicions de la xarxa. No s\'ha de necessitar mai per a aplicacions normals."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"canviar el calibratge del dispositiu d\'entrada"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permet que l\'aplicació modifiqui els paràmetres de calibratge de la pantalla tàctil. No ha de ser mai necessari per a aplicacions normals."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"accedir als certificats de DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permet que una aplicació proporcioni i utilitzi certificats de gestió de drets digitals (DRM, Digital Rights Management). No ha de ser mai necessari per a aplicacions normals."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Definir les normes de contrasenya"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Controla la longitud i els caràcters permesos a les contrasenyes de desbloqueig de pantalla."</string>
-    <string name="policylab_watchLogin" msgid="914130646942199503">"Controlar intents de desbloqueig de pantalla"</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"Controlar els intents de desbloqueig de pantalla"</string>
     <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Supervisa el nombre de contrasenyes incorrectes introduïdes per desbloquejar la pantalla i bloqueja la tauleta o n\'esborra totes les dades si s\'introdueixen massa contrasenyes incorrectes."</string>
     <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Supervisa el nombre de contrasenyes incorrectes introduïdes en desbloquejar la pantalla, i bloqueja el telèfon o esborra totes les dades del telèfon si s\'introdueixen massa contrasenyes incorrectes."</string>
     <string name="policylab_resetPassword" msgid="2620077191242688955">"Canvia la contrasenya de desbloqueig de pantalla"</string>
     <string name="policydesc_resetPassword" msgid="605963962301904458">"Canvia la contrasenya de desbloqueig de pantalla."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Bloqueig de pantalla"</string>
     <string name="policydesc_forceLock" msgid="1141797588403827138">"Controla com i quan es bloqueja la pantalla."</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"Esborra totes les dades"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Esborrar totes les dades"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Esborra les dades de la tauleta sense advertiment mitjançant un restabliment de les dades de fàbrica."</string>
     <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Esborra les dades del telèfon sense avisar, restablint les dades de fàbrica."</string>
     <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Defineix el servidor intermediari global del dispositiu"</string>
@@ -693,7 +752,7 @@
     <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Encriptació d’emmagatzematge"</string>
     <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Requereix que les dades de l\'aplicació emmagatzemades estiguin encriptades."</string>
     <string name="policylab_disableCamera" msgid="6395301023152297826">"Desactivar les càmeres"</string>
-    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Impedeix l\'ús de totes les càmeres del dispositiu."</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Impedeix l\'ús de les càmeres del dispositiu."</string>
     <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Des. funcions en bloq. tecles"</string>
     <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Impedeix l\'ús d\'algunes funcions en bloqueig de tecles."</string>
   <string-array name="phoneTypes">
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Casa"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Feina"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Altres"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"No hem trobat cap aplicació per mostrar aquest contacte."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introdueix el codi PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introdueix el codi PUK i el codi PIN nou"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codi PUK"</string>
@@ -981,10 +1041,10 @@
     <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'exploració tàctil. Quan l\'exploració tàctil està activada, pots escoltar o veure les descripcions del contingut seleccionat o utilitzar gestos per interactuar amb la tauleta."</string>
     <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> vol activar l\'exploració tàctil. Quan l\'exploració per tàctil està activada, pots escoltar o veure les descripcions del contingut seleccionat o utilitzar gestos per interactuar amb el telèfon."</string>
     <string name="oneMonthDurationPast" msgid="7396384508953779925">"Fa 1 mes"</string>
-    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Fa menys d\'1 mes"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Fa més d\'1 mes"</string>
   <plurals name="num_seconds_ago">
     <item quantity="one" msgid="4869870056547896011">"Fa 1 segon"</item>
-    <item quantity="other" msgid="3903706804349556379">"fa <xliff:g id="COUNT">%d</xliff:g> segons"</item>
+    <item quantity="other" msgid="3903706804349556379">"Fa <xliff:g id="COUNT">%d</xliff:g> segons"</item>
   </plurals>
   <plurals name="num_minutes_ago">
     <item quantity="one" msgid="3306787433088810191">"Fa 1 minut"</item>
@@ -1000,7 +1060,7 @@
     <string name="last_month" msgid="3959346739979055432">"El mes passat"</string>
     <string name="older" msgid="5211975022815554840">"Més antigues"</string>
   <plurals name="num_days_ago">
-    <item quantity="one" msgid="861358534398115820">"ahir"</item>
+    <item quantity="one" msgid="861358534398115820">"Ahir"</item>
     <item quantity="other" msgid="2479586466153314633">"Fa <xliff:g id="COUNT">%d</xliff:g> dies"</item>
   </plurals>
   <plurals name="in_num_seconds">
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permet que una aplicació accedeixi a l\'emmagatzematge protegit per contrasenya."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Controla si es mostra o s\'amaga el bloqueig de les tecles."</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permet que una aplicació controli el bloqueig de les tecles."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Escoltar els canvis de l\'estat de confiança"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permet que una aplicació escolti els canvis en l\'estat de confiança."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Enllaçar amb el servei d\'un agent de confiança"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permet que una aplicació es vinculi amb el servei d\'un agent de confiança."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interacciona amb el sistema de recuperació i amb les actualitzacions"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permet que una aplicació interaccioni amb el sistema de recuperació i amb les actualitzacions del sistema."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toca dos cops per controlar el zoom"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"No s\'ha pogut afegir el widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Vés"</string>
@@ -1328,7 +1394,8 @@
     <string name="accessibility_binding_label" msgid="4148120742096474641">"Accessibilitat"</string>
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fons de pantalla"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Canvia el fons de pantalla"</string>
-    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Processador de notificacions"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Oient de notificacions"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Proveïdor de condicions"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN activada"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> ha activat VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Toca per gestionar la xarxa."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retorn"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Selecciona una aplicació"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"No s\'ha pogut iniciar <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Comparteix amb"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Comparteix amb <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Llisca el dit. Mantén premut."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Fes lliscar el dit cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Fes lliscar el dit cap avall per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Fes lliscar el dit cap a l\'esquerra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Fes lliscar el dit cap a la dreta per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Desbloqueja"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Càmera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silenci"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Activa el so"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Cerca"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Llisca el dit per desbloquejar."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Connecta un auricular per escoltar les claus de la contrasenya en veu alta."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punt."</string>
@@ -1483,9 +1542,13 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Àudio per Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Pantalla sense fil"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fet"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Sortida de contingut multimèdia"</string>
-    <string name="media_route_status_scanning" msgid="7279908761758293783">"S\'està explorant..."</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Connexió al dispositiu"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Emissió de pantalla al dispositiu"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"S\'estan cercant dispositius…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Configuració"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Desconnecta"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"S\'està cercant…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"S\'està connectant..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponible"</string>
     <string name="media_route_status_not_available" msgid="6739899962681886401">"No disponible"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposa #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", segur"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"La pantalla sense fil està connectada"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Aquesta pantalla es mostra en un altre dispositiu"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Emissió de pantalla"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"S\'està connectant a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Emissió de pantalla"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Connectat a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Desconnecta"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Trucada d\'emergència"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Patró oblidat"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"S\'està desbloquejant la targeta SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codi PIN incorrecte."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escriu un PIN que tingui de 4 a 8 números."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El codi PUK ha de tenir 8 números o més."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"El codi PUK ha de tenir 8 números."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Torna a introduir el codi PUK correcte. Els intents repetits faran que es desactivi la SIM de manera permanent."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Els codis PIN no coincideixen"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Massa intents incorrectes"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Torna-ho a provar més tard"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Fes lliscar el dit cap avall per sortir de la pantalla completa."</string>
+    <string name="done_label" msgid="2093726099505892398">"Fet"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Control circular de les hores"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Control circular dels minuts"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Selecciona les hores"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Selecciona els minuts"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Graella mensual de dies"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Llista anual"</string>
+    <string name="select_day" msgid="7774759604701773332">"Selecciona un mes i un dia"</string>
+    <string name="select_year" msgid="7952052866994196170">"Selecciona un any"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> seleccionat"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> suprimit"</string>
 </resources>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index 73ca02b..868f899 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez názvu&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Zadejte osmimístný nebo delší kód PUK."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM karta je blokována pomocí kódu PUK. Odblokujete ji zadáním kódu PUK."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Chcete-li odblokovat SIM kartu, zadejte kód PUK2."</string>
+    <string name="enablePin" msgid="209412020907207950">"Operace nebyla úspěšná, povolte zámek SIM/RUIM karty."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Máte ještě <xliff:g id="NUMBER">%d</xliff:g> pokus. Poté bude SIM karta uzamčena."</item>
+    <item quantity="other" msgid="7530597808358774740">"Počet zbývajících pokusů, po jejichž vyčerpání bude SIM karta uzamčena: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Příchozí identifikace volajícího"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchronizace"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Příliš mnoho smazaných položek služby <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Úložiště tabletu je plné. Uvolněte místo smazáním některých souborů."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Úložiště hodinek je plné. Uvolněte místo smazáním některých souborů."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Paměť telefonu je plná. Uvolněte místo smazáním některých souborů."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Síť může být monitorována"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Původce: neznámá třetí strana"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Vyzvánění zapnuto"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Vypínání..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablet se vypne."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Hodinky se vypnou."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Váš telefon bude vypnut."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Chcete zařízení vypnout?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Restart v nouzovém režimu"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Režim V letadle"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Režim V letadle je ZAPNUTÝ"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Režim V letadle je VYPNUTÝ"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Nastavení"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Nouzový režim"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Systém Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"odinstalace zástupců"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Umožňuje aplikaci odebrat zástupce z plochy bez zásahu uživatele."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"přesměrování odchozích hovorů"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Umožňuje aplikaci zpracovávat odchozí hovory a měnit vytáčené číslo. Toto oprávnění umožňuje sledovat či přesměrovat odchozí hovory nebo jim zabránit."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Umožňuje aplikaci sledovat při odchozích hovorech volaná čísla a přesměrovat hovor na jiné číslo nebo jej zcela zrušit."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"příjem textových zpráv (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Umožňuje aplikaci přijmout a zpracovat zprávy SMS. Znamená to, že aplikace může sledovat zprávy odeslané do vašeho zařízení nebo je smazat, aniž by se vám zobrazily."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"příjem textových zpráv (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Umožňuje aplikaci načíst obsah aktivního okna. Škodlivé aplikace mohou načíst obsah celého okna a prozkoumat všechen text kromě hesel."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"dočasná aktivace usnadnění přístupu"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Umožňuje aplikaci dočasně aktivovat usnadnění přístupu v zařízení. Škodlivé aplikace mohou usnadnění přístupu aktivovat bez souhlasu uživatele."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"načítání informací o oknech"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Umožňuje aplikaci načíst informace o oknech ze správce oken. Škodlivé aplikace mnohou načíst informace, které slouží k internímu systémovému využití."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"načíst token okna"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Umožňuje aplikaci načíst token okna. Škodlivé aplikace se mohou vydávat za systém a provádět s oknem aplikace neoprávněné interakce."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"načíst statistiky rámců"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Umožňuje aplikaci shromažďovat statistiky rámců. Škodlivé aplikace mohou sledovat statistiky rámců oken ostatních aplikací."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrování událostí"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Umožní aplikaci registrovat vstupní filtr, který filtruje stream všech uživatelských přenosů před jejich odvysíláním. Škodlivé aplikace mohou používat uživatelské rozhraní systému bez zásahu uživatele."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"zvětšit zobrazení"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Povoluje aplikaci zvětšit obsah displeje. Škodlivé aplikace mohou změnit zobrazení obsahu způsobem, který učiní zařízení nepoužitelným."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"částečné vypnutí"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Uvede správce činností do vypnutého stavu. Nedojde však k úplnému vypnutí."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zabránění přepínání aplikací"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Umožňuje aplikaci vysílat oznámení o přijetí zprávy SMS. Škodlivé aplikace mohou toto oprávnění použít k vytváření falešných příchozích zpráv SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"odeslání vysílání typu WAP-PUSH-received"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Umožňuje aplikaci vysílat oznámení o přijetí zprávy WAP PUSH. Škodlivé aplikace mohou toto oprávnění použít k vytváření falešných přijatých zpráv MMS nebo utajenému nahrazení obsahu libovolné webové stránky jejich škodlivými variantami."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"odeslání skóre vysílaných sítěmi"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Umožňuje aplikaci vysílat oznámení, že je třeba zadat skóre sítí. Běžné aplikace toto oprávnění nepotřebují."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"omezení počtu spuštěných procesů"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Umožňuje aplikaci řídit maximální počet spuštěných procesů. Běžné aplikace toto oprávnění nikdy nepotřebují."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"vynucení zavření aplikací na pozadí"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Umožňuje držiteli navázat se na nejvyšší úroveň služby VPN. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"vazba na tapetu"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní tapety. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"navázání na hlasovou interakci"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní služby hlasové interakce. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"připojit se ke vzdálenému displeji"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Umožňuje držiteli připojit se k vysokoúrovňovému rozhraní vzdáleného displeje. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"navázat se na službu widgetu"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Umožňuje držiteli navázat se na nejvyšší úroveň služby widgetu. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"navázání na službu poskytovatele tras"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Umožňuje držiteli navázat se na libovolného poskytovatele registrovaných tras. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"komunikovat se správcem zařízení"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Umožňuje držiteli oprávnění odesílat informace správci zařízení. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"navázání na televizní vstup"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní televizního vstupu. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"přidat nebo odebrat správce zařízení"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Opravňuje držitele přidávat nebo odebírat aktivní správce zařízení. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"změna orientace obrazovky"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Umožňuje aplikaci používat libovolný nainstalovaný dekodér médií k dekódování při přehrávání."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"správa důvěryhodných identifikačních údajů"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Umožňuje aplikaci instalovat a odinstalovat certifikáty CA jako důvěryhodné identifikační údaje."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"spustit aplikaci během nečinnosti"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Toto oprávnění umožňuje systému Android spustit aplikaci na pozadí, když zařízení není používáno."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"čtení nebo zápis do prostředků funkce diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Umožňuje aplikaci číst libovolné prostředky ve skupině diag, např. soubory ve složce /dev, a zapisovat do nich. Může dojít k ovlivnění stability a bezpečnosti systému. Toto nastavení by měl používat POUZE výrobce či operátor pro diagnostiku hardwaru."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"aktivace či deaktivace komponent aplikací"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Umožňuje aplikaci číst údaje v osobním profilu uložené v zařízení, například jméno nebo kontaktní údaje. Znamená to, že vás aplikace může identifikovat a odeslat údaje z profilu dalším aplikacím."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"úprava vaší vlastní vizitky"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Umožňuje aplikaci změnit nebo přidat údaje osobního profilu uložené v zařízení, například jméno nebo kontaktní údaje. Znamená to, že vás aplikace může identifikovat a odeslat údaje z profilu dalším aplikacím."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"tělesné senzory (například snímače tepu)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Umožňuje aplikaci přistupovat k datům ze senzorů, pomocí kterých měříte činnost svého těla, například tep."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"čtení vašeho sociálního streamu"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Umožňuje aplikaci získat přístup k sociálním aktualizacím od vašich přátel a synchronizaci těchto aktualizací. Při sdílení informací buďte opatrní – toto oprávnění umožňuje aplikaci číst komunikaci mezi vámi a vašimi přáteli v sociálních sítích bez ohledu na její důvěrnost. Poznámka: Toto oprávnění nemusí platit pro všechny sociální sítě."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"zápis do sociálního streamu"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Umožňuje aplikaci používat nízkoúrovňové funkce SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"čtení vyrovnávací paměti snímků"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Umožňuje aplikaci číst obsah vyrovnávací paměti snímků."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"přístup k funkci InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Umožňuje aplikaci používat nízkoúrovňové funkce InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurovat displeje přes Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Povoluje aplikaci připojit a konfigurovat displeje přes Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"ovládat displeje přes Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Umožňuje aplikaci změnit globální nastavení zvuku, například hlasitost či reproduktor pro výstup zvuku."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"nahrávání zvuku"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Umožňuje aplikaci zaznamenat zvuk pomocí mikrofonu. Toto oprávnění umožňuje aplikaci kdykoliv zaznamenat zvuk bez vašeho svolení."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikace s kartou SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Umožňuje aplikaci odesílat příkazy na kartu SIM. Toto oprávnění je velmi nebezpečné."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"pořizování fotografií a videí"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Umožňuje aplikaci pořizovat fotografie a videa pomocí fotoaparátu. Toto oprávnění umožňuje aplikaci používat fotoaparát kdykoliv i bez vašeho svolení."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"vypnutí indikátoru LED přenosu při použití fotoaparátu"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Umožňuje aplikaci ovládat telefonní funkce zařízení. Aplikace s tímto oprávněním smí bez upozornění přepínat sítě, zapínat a vypínat bezdrátový modul telefonu a podobně."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"čtení stavu a identity telefonu"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Umožňuje aplikaci získat přístup k telefonním funkcím zařízení. Toto oprávnění umožňuje aplikaci zjistit telefonní číslo telefonu, identifikační čísla zařízení, zda zrovna probíhá hovor, a vzdálené číslo, ke kterému je hovor připojen."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"čtení přesného stavu telefonování"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Umožňuje aplikaci zjišťovat přesný stav telefonování a mobilních dat. Toto oprávnění aplikaci umožňuje zjistit skutečný stav volání, zda je volání aktivní nebo na pozadí, zda volání selhalo, přesný stav datového připojení a zda datové připojení selhalo."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"bránění přechodu tabletu do režimu spánku"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"bránění přechodu telefonu do režimu spánku"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Umožňuje aplikaci zabránit přechodu tabletu do režimu spánku."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Změnit stav připojení WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Umožňuje aplikaci připojovat tablet k sítím WiMAX a odpojovat jej od nich."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Umožňuje aplikaci připojovat telefon k sítím WiMAX a odpojovat jej od nich."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"zadání skóre sítí"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Umožňuje aplikaci hodnotit sítě a ovlivňovat, které sítě by měl tablet preferovat."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Umožňuje aplikaci hodnotit sítě a ovlivňovat, které sítě by měl telefon preferovat."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"párování se zařízeními Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Umožňuje aplikaci zobrazit konfiguraci tabletu s rozhraním Bluetooth, vytvářet připojení ke spárovaným zařízením a přijímat tato připojení."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Umožňuje aplikaci zobrazit konfiguraci telefonu s rozhraním Bluetooth, vytvářet připojení ke spárovaným zařízením a přijímat tato připojení."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Umožňuje aplikacím načítat, zobrazovat a mazat oznámení včetně těch přidaných jinými aplikacemi."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"navázání na službu pro poslouchání oznámení"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Umožňuje držiteli navázat se na nejvyšší úroveň služby pro poslouchání oznámení. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"navázání na službu poskytovatele podmínky"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Umožňuje držiteli navázat se na nejvyšší úroveň rozhraní služby poskytovatele podmínky. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"vyvolat konfigurační aplikaci poskytnutou operátorem"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Umožňuje vyvolání konfigurační aplikace poskytnuté operátorem. Běžné aplikace by toto oprávnění neměly nikdy požadovat."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"naslouchat informacím o stavu sítě"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Umožňuje aplikaci naslouchat informacím o stavu sítě. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"měnit kalibraci vstupního zařízení"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Umožňuje aplikaci měnit parametry kalibrace dotykové obrazovky. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"přístup k certifikátům DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Umožňuje aplikaci vydávat a používat certifikáty DRM. Běžné aplikace by toto oprávnění neměly nikdy potřebovat."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Nastavit pravidla pro heslo"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Řídit délku hesel pro odemčení obrazovky a povolené znaky."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Sledovat pokusy o odemčení obrazovky"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Domů"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Práce"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Jiné"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nebyla nalezena žádná aplikace, pomocí které by tento kontakt bylo možné zobrazit."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Zadejte kód PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Zadejte kód PUK a nový kód PIN."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kód PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Umožňuje aplikaci přístup k bezpečnému úložišti keyguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Ovládání zobrazování a skrývání zámku obrazovky"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Umožňuje aplikaci ovládat zámek obrazovky."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Naslouchat změnám stavu důvěryhodnosti"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Umožňuje aplikaci naslouchat změnám ve stavu důvěryhodnosti."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Vázat se na službu zástupce důvěryhodnosti"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Umožňuje aplikaci vázat se na službu zástupce důvěryhodnosti."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interakce se systémem aktualizací a obnovení"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Umožňuje aplikaci interakci se systémem obnovení a s aktualizacemi systému."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dvojitým dotykem můžete ovládat přiblížení"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget nelze přidat."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Přejít"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Tapeta"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Změnit tapetu"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Aplikace poslouchající oznámení"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Poskytovatel podmínky"</string>
     <string name="vpn_title" msgid="19615213552042827">"Síť VPN je aktivována"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Aplikace <xliff:g id="APP">%s</xliff:g> aktivovala síť VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Dotykem zobrazíte správu sítě."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Vybrat aplikaci"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Aplikaci <xliff:g id="APPLICATION_NAME">%s</xliff:g> nelze spustit."</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Sdílet s"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Sdílet s aplikací <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Posuvník. Dotkněte se a podržte."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Přejeďte prstem nahoru: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Přejeďte prstem dolů: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Přejeďte prstem doleva: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Přejeďte prstem doprava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Odemknout"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Zapnout zvuk"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Vyhledávání"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Odemknete posunutím prstu."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Chcete-li slyšet, které klávesy jste při zadávání hesla stiskli, připojte sluchátka."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Tečka."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth Audio"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Bezdrátový displej"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Připojení k zařízení"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Odesílání obsahu obrazovky do zařízení"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Vyhledávání zařízení…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Nastavení"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Odpojit"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Vyhledávání…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Připojování…"</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Dostupná"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Překryvná vrstva č. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", zabezpečené"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Bezdrátový displej je připojen"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Tato obrazovka se zobrazuje v jiném zařízení"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Odesílání obsahu obrazovky"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Připojování k obrazovce <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Odesílání obsahu obrazovky"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Připojeno k obrazovce <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Odpojit"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Tísňové volání"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Zapomenuté gesto"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokování SIM karty..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávný kód PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadejte kód PIN o délce 4–8 číslic."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Minimální délka kódu PUK je 8 číslic."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Kód PUK by měl obsahovat 8 číslic."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Znovu zadejte správný kód PUK. Opakovanými pokusy SIM kartu trvale deaktivujete."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kódy PIN se neshodují."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Příliš mnoho pokusů o nakreslení gesta"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Zkuste to znovu později"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Režim celé obrazovky ukončíte přejetím dolů."</string>
+    <string name="done_label" msgid="2093726099505892398">"Hotovo"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Kruhový posuvník hodin"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Kruhový posuvník minut"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Zvolte hodiny"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Zvolte minuty"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Dny uspořádané po měsících"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Seznam roků"</string>
+    <string name="select_day" msgid="7774759604701773332">"Vyberte měsíc a den"</string>
+    <string name="select_year" msgid="7952052866994196170">"Vyberte rok"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Vybrána položka <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Číslice <xliff:g id="KEY">%1$s</xliff:g> byla smazána"</string>
 </resources>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 0cf5bc5..206db12 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"Tb"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Pb"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Uden titel&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
@@ -46,10 +68,15 @@
     <string name="badPin" msgid="9015277645546710014">"Den gamle pinkode, som du har indtastet, er ikke korrekt."</string>
     <string name="badPuk" msgid="5487257647081132201">"Den indtastede PUK-kode er forkert."</string>
     <string name="mismatchPin" msgid="609379054496863419">"De indtastede pinkoder er ikke ens"</string>
-    <string name="invalidPin" msgid="3850018445187475377">"Indtast en PIN-kode på mellem 4 og 8 tal."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"Indtast en pinkode på mellem 4 og 8 tal."</string>
     <string name="invalidPuk" msgid="8761456210898036513">"Angiv en PUK-kode på 8 eller flere cifre."</string>
     <string name="needPuk" msgid="919668385956251611">"Dit SIM-kort er låst med PUK-koden. Indtast PUK-koden for at låse den op."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Indtast PUK2-koden for at låse op for SIM-kortet."</string>
+    <string name="enablePin" msgid="209412020907207950">"Mislykkedes. Aktivér SIM-/RUIM-lås."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver låst."</item>
+    <item quantity="other" msgid="7530597808358774740">"Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver låst."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI-nummer"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Indgående opkalds-id"</string>
@@ -58,12 +85,12 @@
     <string name="CwMmi" msgid="9129678056795016867">"Ventende opkald"</string>
     <string name="BaMmi" msgid="455193067926770581">"Opkaldsspærring"</string>
     <string name="PwdMmi" msgid="7043715687905254199">"Ændring af adgangskode"</string>
-    <string name="PinMmi" msgid="3113117780361190304">"ændring af PIN-kode"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"ændring af pinkode"</string>
     <string name="CnipMmi" msgid="3110534680557857162">"Opkaldsnummeret er til stede"</string>
     <string name="CnirMmi" msgid="3062102121430548731">"Opkaldsnummeret er begrænset"</string>
     <string name="ThreeWCMmi" msgid="9051047170321190368">"Trevejsopkald"</string>
     <string name="RuacMmi" msgid="7827887459138308886">"Afvisning af uønskede, irriterende opkald"</string>
-    <string name="CndMmi" msgid="3116446237081575808">"Levering af opkaldsnummer"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"Levering af nummervisning"</string>
     <string name="DndMmi" msgid="1265478932418334331">"Forstyr ikke"</string>
     <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Standarder for opkalds-id til begrænset. Næste opkald: Begrænset"</string>
     <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Standarder for opkalds-id til begrænset. Næste opkald: Ikke begrænset"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synkroniser"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"For mange <xliff:g id="CONTENT_TYPE">%s</xliff:g> sletninger"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Din tablets lager er fuldt. Slet nogle filer for at frigøre plads."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Urets lager er fuldt. Slet nogle filer for at frigøre plads."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonens lager er fuldt. Slet nogle filer for at frigøre plads."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Netværket kan være overvåget"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Af en ukendt tredjepart"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Ringeren er aktiveret"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Lukker ned..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Din tablet slukkes nu."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Dit ur lukkes ned."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Din telefon slukkes nu."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Vil du slukke?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Genstart i sikker tilstand"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flytilstand"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flytilstand er TIL"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flytilstand er slået FRA"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Indstillinger"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Sikker tilstand"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-system"</string>
@@ -230,13 +260,13 @@
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Lagring"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Få adgang til USB-lager."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Få adgang til SD-kortet."</string>
-    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Tilgængelighedsfunktioner"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Hjælpefunktioner"</string>
     <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funktioner, som hjælpeteknologier kan anmode om."</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"hente indholdet i vinduet"</string>
     <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"undersøge indholdet i et vindue, du interagerer med."</string>
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"aktivere Udforsk ved berøring"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"De emner, der trykkes på, læses højt, og skærmen kan udforskes ved hjælp af bevægelser."</string>
-    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"aktivere forbedret webtilgængelighed"</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"aktivere forbedrede webhjælpefunktioner"</string>
     <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Der installeres muligvis scripts for at gøre appindhold mere tilgængeligt."</string>
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"observere tekst, du skriver"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Dette omfatter personlige data såsom kreditkortnumre og adgangskoder."</string>
@@ -251,15 +281,15 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"afinstaller genveje"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Tillader, at applikationen fjerner genveje på startskærmen uden brugerindgriben."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"omdirigere udgående opkald"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Tillader, at appen kan behandle udgående opkald og ændre det nummer, der skal ringes til. Med denne tilladelse kan appen overvåge, omdirigere eller forhindre udgående opkald."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Tillader, at appen kan se det nummer, der ringes op til under et udgående opkald, og giver mulighed for at omdirigere opkaldet til et andet nummer eller afbryde opkaldet helt."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"modtage tekstbeskeder (sms)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Tillader, at appen kan modtage og behandle sms-beskeder. Det betyder, at appen kan overvåge eller slette de beskeder, der sendes til din enhed, uden at vise dem til dig."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"modtage tekstbeskeder (mms)"</string>
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Tillader, at appen kan modtage og behandle mms-beskeder. Det betyder, at appen kan overvåge eller slette de beskeder, der sendes til din enhed, uden at vise dem til dig."</string>
     <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"modtage nødudsendelser"</string>
     <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Tillader, at appen kan modtage og behandle nødtransmissioner. Denne tilladelse er kun tilgængelig for systemapps."</string>
-    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"læse mobiltransmissionsbeskeder"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Tillader, at appen læser mobiltransmissionsbeskeder, der modtages af din enhed. I nogle områder sendes mobiltransmissionsbeskeder for at advare om nødsituationer. Ondsindede apps kan forstyrre ydelsen eller driften af ​din ​enhed, når en mobiltransmission om en nødsituation modtages."</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"læse Cell Broadcast-beskeder"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Tillader, at appen læser Cell Broadcast-beskeder, der modtages af din enhed. I nogle områder sendes der Cell Broadcast-beskeder for at advare om nødsituationer. Ondsindede apps kan forstyrre ydelsen eller driften af ​din ​enhed, når der modtages en Cell Broadcast-besked om en nødsituation."</string>
     <string name="permlab_sendSms" msgid="5600830612147671529">"send sms-beskeder"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"Tillader, at appen kan sende sms-beskeder. Dette kan resultere i uventede opkrævninger. Skadelige apps kan koste dig penge ved at sende beskeder uden din bekræftelse."</string>
     <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"send hændelser, hvor der skal svares pr. besked"</string>
@@ -308,14 +338,14 @@
     <string name="permdesc_dump" msgid="1778299088692290329">"Tillader, at appen kan hente systemets interne tilstand. Ondsindede apps kan hente en lang række fortrolige og beskyttede oplysninger, som de normalt aldrig ville have brug for."</string>
     <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"hente skærmindhold"</string>
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Tillader, at appen kan hente indholdet i det aktive vindue. Ondsindede apps kan hente al indholdet i vinduet og undersøge al dens tekst med undtagelse af adgangskoder."</string>
-    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktivér tilgængelighed midlertidigt"</string>
-    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Tillader, at en applikation midlertidigt kan aktivere tilgængelighed på enheden. Skadelige apps kan muligvis aktivere tilgængelighed uden brugerens samtykke."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hent oplysninger om vinduer"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tillader, at en applikation henter oplysninger om vinduerne i vinduesadministratoren. Skadelige apps kan muligvis hente oplysninger, der er beregnet til intern systembrug."</string>
+    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktivere hjælpefunktioner midlertidigt"</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Tillader, at en app midlertidigt kan aktivere hjælpefunktioner på enheden. Skadelige apps kan muligvis aktivere hjælpefunktioner uden brugerens samtykke."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"hente vinduestoken"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Tillader, at en applikation kan hente vinduestokenet. Skadelige apps udfører muligvis uautoriseret interaktion med applikationsvinduet ved at efterligne systemet."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"hente rammestatistik"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Tillader, at en applikation kan indsamle rammestatistik. Skadelige apps kan muligvis observere rammestatistikker for vinduer fra andre apps."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrer begivenheder"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Tillader, at en applikation registrerer et inputfilter, som filtrerer alle brugeres strøm, før disse afsendes. Skadelige apps kan muligvis kontrollere systemets grænseflade uden brugerens deltagelse."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"forstør skærmen"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Tillader, at applikationer kan forstørre indholdet på en skærm. Skadelige apps kan omdanne skærmindholdet, så enheden bliver ubrugelig."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"delvis lukning"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Sætter aktivitetsadministratoren i lukningstilstand. Lukker ikke helt ned."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"undgå programskift"</string>
@@ -325,11 +355,13 @@
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"overvåge og kontrollere åbning af alle apps"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Tillader, at appen kan overvåge og kontrollere, hvordan systemet starter aktiviteter. Ondsindede apps kan fuldstændig kompromittere systemet. Denne tilladelse er kun nødvendig til udvikling, aldrig til normal brug."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"send udsendelse om fjernet pakke"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Tillader, at appen kan udsende en meddelelse om, at en apppakke er fjernet. Ondsindede apps kan bruge dette til at dræbe andre kørende apps."</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Tillader, at appen kan udsende en underretning om, at en app-pakke er fjernet. Ondsindede apps kan bruge dette til at lukke andre kørende apps."</string>
     <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"send sms-modtaget udsendelse"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Tillader, at appen kan udsende en meddelelse om, at der er modtaget en sms-besked. Ondsindede apps kan bruge dette til at forfalske indgående sms-beskeder."</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Tillader, at appen kan udsende en underretning om, at der er modtaget en sms-besked. Ondsindede apps kan bruge dette til at simulere indgående sms-beskeder."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"send WAP-PUSH-modtaget udsendelse"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Tillader, at appen kan udsende en meddelelse om, at der er modtaget en WAP PUSH-besked. Ondsindede apps kan bruge dette til at forfalske modtagelse af mms-beskeder eller i det skjulte erstatte indholdet på en webside med ondsindede varianter."</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Tillader, at appen kan udsende en underretning om, at der er modtaget en WAP PUSH-besked. Ondsindede apps kan bruge dette til at simulere modtagelse af mms-beskeder eller i det skjulte erstatte indholdet på en webside med ondsindede varianter."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"sende underretninger om bedømmelse af netværk"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Tillader, at appen kan udsende en underretning om, at netværket skal bedømmes. Dette er aldrig nødvendigt for almindelige apps."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"begræns antallet af kørende processer"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Tillader, at appen kan kontrollere det maksimale antal kørende processer. Dette er aldrig nødvendigt til normale apps."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"tvinge baggrundsapps til at lukke"</string>
@@ -348,7 +380,7 @@
     <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Tillader, at appen kan åbne brugergrænsefladen til bekræftelse af komplet sikkerhedskopiering. Må ikke anvendes af nogen app."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"vis uautoriserede vinduer"</string>
     <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Tillader, at appen kan oprette vinduer, der er beregnet til brugergrænsefladen i det interne system. Anvendes ikke af normale apps."</string>
-    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"trække over andre apps"</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"ignorere andre apps"</string>
     <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Tillader, at appen trækkes oven på andre applikationer eller dele af brugergrænsefladen. De kan forstyrre din brug af grænsefladen i en applikation eller ændre det, du tror, du ser i andre applikationer."</string>
     <string name="permlab_setAnimationScale" msgid="2805103241153907174">"rediger global animationshastighed"</string>
     <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Tillader, at appen til enhver tid kan ændre den globale animationshastighed (hurtigere eller langsommere animationer)."</string>
@@ -363,8 +395,8 @@
     <string name="permdesc_readInputState" msgid="8387754901688728043">"Tillader, at appen kan se de taster, som du trykker på, selv i en anden app (såsom indtastning af adgangskode). Dette bør aldrig være nødvendigt for normale apps."</string>
     <string name="permlab_bindInputMethod" msgid="3360064620230515776">"forpligt til en inputmetode"</string>
     <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Tillader, at brugeren kan forpligter sig til en inputmetodes grænseflade på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string>
-    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"bind dig til en tilgængelighedstjeneste"</string>
-    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Tillader, at brugeren binder sig til en grænseflade for en tilgængelighedstjeneste på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string>
+    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"binde dig til en hjælpetjeneste"</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Tillader, at appen kan binde sig til en grænseflade for en hjælpetjeneste på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string>
     <string name="permlab_bindPrintService" msgid="8462815179572748761">"forbinde til en udskriftstjeneste"</string>
     <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Tillader, at brugeren forbinder til grænsefladen for en udskriftstjeneste på øverste niveau. Dette bør aldrig være nødvendigt for almindelige apps."</string>
     <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"forbinde til en udskriftsspoolertjeneste"</string>
@@ -375,12 +407,20 @@
     <string name="permdesc_bindTextService" msgid="8151968910973998670">"Tillader, at ejeren kan binde en teksttjenestes grænseflade (f. eks. SpellCheckerService) på øverste niveau. Dette bør aldrig være nødvendigt til normale apps."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"bind til en VPN-tjeneste"</string>
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Tillader, at brugeren forpligter sig til en VPN-tjenestes grænseflade på øverste niveau. Bør aldrig være nødvendigt i almindelige apps."</string>
-    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"forpligt til et tapet"</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"knyt til en baggrund"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Tillader, at indehaveren kan binde en baggrunds grænseflade på øverste niveau. Dette bør aldrig være nødvendigt for almindelige apps."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"oprette binding til en tjeneste til stemmeinteraktion"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Tillader, at brugeren opretter en binding til det øverste niveau af grænsefladen i en tjeneste til stemmeinteraktion. Dette bør aldrig være nødvendigt for almindelige apps."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind til en ekstern skærm"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Tillader, at brugeren kan foretage en binding til grænsefladens øverste niveau på en ekstern skærm. Bør aldrig være nødvendigt til almindelige apps."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"forpligt til en widgettjeneste"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Tillader, at brugeren kan forpligte sig til en grænseflade for en widgettjeneste på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"oprette tilknytning til en ruteudbydertjeneste"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Tillader, at indehaveren opretter tilknytninger til registrerede ruteudbydere. Dette bør aldrig være nødvendigt for normale apps."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"kommunikere med en enhedsadministrator"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Tillader, at brugeren kan sende hensigter til en enhedsadministrator. Dette bør aldrig være nødvendigt for almindelige apps."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"knyt til en tv-indgang"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Giver indehaveren mulighed for at knytte sig til det øverste grænsefladeniveau for en tv-indgang. Dette bør ikke være nødvendigt i normale apps."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"tilføje eller fjerne en enhedsadministrator"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Tillader, at man tilføjer eller fjerner aktive enhedsadministratorer. Dette burde aldrig være nødvendigt til normale apps."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"skift skærmretning"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Tillader, at appen bruger enhver installeret medieafkoder til at afkode til afspilning."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"administrer pålidelige logonoplysninger"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Tillader, at appen installerer og afinstallerer CA-certifikater som pålidelige loginoplysninger."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"kør applikation, mens enheden er i dvale"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Med denne tilladelse kan Android-systemet køre applikationen i baggrunden, mens enheden ikke er i brug."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"læs/skriv til ressourcer ejet af diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Tillader, at appen kan læse og skrive til alle ressourcer, der ejes af diag-gruppen,  f.eks. filer i /dev. Dette kan muligvis påvirke systemets stabilitet og sikkerhed. Dette bør KUN bruges til hardwarespecifik diagnosticering, som foretages af producenten eller udbyderen."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"aktivere eller deaktivere appkomponenter"</string>
@@ -434,7 +476,7 @@
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"køre ved opstart"</string>
     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Tillader, at appen kan starte af sig selv, så snart systemet er færdig med at starte. Dette kan gøre tablettens opstartstid længere og give appen tilladelse til at gøre tabletten langsommere ved altid at lade appen køre."</string>
     <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Tillader, at appen kan åbne sig selv, når systemet er færdig med at starte op. Dette kan gøre opstarten af telefonen langsommere og generelt gøre systemet langsommere, når appen altid kører."</string>
-    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"send klæbende udsendelse"</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"sende klæbende udsendelse"</string>
     <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Tillader, at appen kan sende klæbende udsendelser, der forbliver tilbage, når udsendelsen er slut. Overdreven brug kan gøre din tablet langsom eller ustabil ved at tvinge den til at bruge for meget hukommelse."</string>
     <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Tillader, at appen kan sende klæbende udsendelser, der forbliver tilbage, når udsendelsen er slut. Overdreven brug kan gøre din telefon langsom eller ustabil ved at tvinge den til at bruge for meget hukommelse."</string>
     <string name="permlab_readContacts" msgid="8348481131899886131">"læse dine kontaktpersoner"</string>
@@ -453,11 +495,13 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Tillader, at appen kan læse de personlige profiloplysninger, der er gemt på din enhed, f.eks. dit navn og dine kontaktoplysninger. Det betyder, at appen kan identificere dig og sende dine profiloplysninger til andre."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"ændre dit eget kontaktkort"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Tillader, at appen kan ændre eller tilføje oplysninger i din personlige profil, der er gemt på din enhed, f.eks. dit navn eller dine kontaktoplysninger. Dette betyder, at andre apps kan identificere dig og sende profiloplysninger til andre."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"kropssensorer (f.eks. pulsmålere)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Tillader, at appen får adgang til data fra sensorer, du bruger til at måle, hvad der sker inde i din krop, f.eks. din puls."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"læs din sociale strøm"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Tillader, at appen kan få adgang til og synkronisere sociale opdateringer fra dig og dine venner. Vær forsigtig, når du deler oplysninger – med denne tilladelse kan appen læse kommunikation mellem dig og dine venner på sociale netværk, uanset fortrolighed. Bemærk! Denne tilladelse håndhæves muligvis ikke på alle sociale netværk."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skriv i din sociale strøm"</string>
     <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Tillader, at appen kan vise sociale opdateringer fra dine venner. Vær forsigtig, når du deler oplysninger – med denne tilladelse kan appen producere meddelelser, der kan synes at komme fra en ven. Bemærk! Denne tilladelse håndhæves muligvis ikke på alle sociale netværk."</string>
-    <string name="permlab_readCalendar" msgid="5972727560257612398">"læs kalenderbegivenheder plus fortrolige oplysninger"</string>
+    <string name="permlab_readCalendar" msgid="5972727560257612398">"læse kalenderbegivenheder og fortrolige oplysninger"</string>
     <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Tillader, at appen kan læse alle de kalenderbegivenheder, der er gemt på din tablet, f.eks. venners eller kollegers. Med denne tilladelse kan appen dele eller gemme dine kalenderdata, uanset fortrolighed eller følsomhed."</string>
     <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Tillader, at appen kan læse alle de kalenderbegivenheder, der er gemt på din telefon, f.eks. venners eller kollegers. Med denne tilladelse kan appen dele eller gemme dine kalenderdata, uanset fortrolighed eller følsomhed."</string>
     <string name="permlab_writeCalendar" msgid="8438874755193825647">"tilføje eller ændre kalenderbegivenheder og sende e-mail til gæster uden ejerens viden"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Tillader, at appen kan bruge SurfaceFlinger-funktioner på lavt niveau."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"læs rammebuffer"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Tillader, at appen kan læse indholdet fra rammebufferen."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"få adgang til InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Giver appen tilladelse til at bruge SurfaceFlinger-funktioner på lavt niveau."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurer Wi-Fi-skærme"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tillader, at appen konfigurerer og opretter forbindelse til Wi-Fi-skærme."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kontrollér Wi-Fi-skærme"</string>
@@ -495,7 +541,9 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tillader, at appen kan ændre globale lydindstillinger, som f.eks. lydstyrke og hvilken højttaler der bruges til output."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"optage lyd"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Tillader, at appen kan optage lyd med mikrofonen. Med denne tilladelse kan appen til enhver tid optage lyd uden din bekræftelse."</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"tag billeder og optag video"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-kommunikation"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Tillader, at appen sender kommandoer til SIM-kortet. Dette er meget farligt."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"tage billeder og optage video"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Tillader, at appen kan tage billeder og videoer med kameraet. Med denne tilladelse kan appen til enhver tid bruge kameraet uden din bekræftelse."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"deaktiver sendelysdioden, når kameraet er i brug"</string>
     <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Tillader, at en forudinstalleret systemapplikation deaktiverer lysdioden for brug af kameraet."</string>
@@ -533,15 +581,15 @@
     <string name="permdesc_accessMtp" msgid="6532961200486791570">"Tillader adgang til kerne-MTP-driveren for at implementere MTB USB-protokollen."</string>
     <string name="permlab_hardware_test" msgid="4148290860400659146">"test hardware"</string>
     <string name="permdesc_hardware_test" msgid="6597964191208016605">"Tillader, at appen kan kontrollere forskellige perifere enheder til at teste hardwaren."</string>
-    <string name="permlab_callPhone" msgid="3925836347681847954">"ring direkte op til telefonnumre"</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"ringe direkte op til telefonnumre"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Tillader, at appen kan ringe til telefonnumre uden din indgriben. Dette kan resultere i uventede opkrævninger eller opkald. Bemærk, at appen med denne tilladelse ikke kan ringe til nødopkaldsnumre. Skadelige apps kan koste dig penge ved at foretage opkald uden din bekræftelse."</string>
-    <string name="permlab_callPrivileged" msgid="4198349211108497879">"ring direkte op til alle telefonnumre"</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"ringe direkte op til alle telefonnumre"</string>
     <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Tillader, at appen kan ringe til et hvilket som helst nummer, bl.a. nødopkald uden din indgriben. Ondsindede apps kan foretage unødvendige og ulovlige opkald til nødtjenester."</string>
     <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"start CDMA-opsætning af tabletcomputeren direkte"</string>
     <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"start CDMA-telefonopsætning direkte"</string>
     <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Tillader, at appen kan starte CDMA-levering. Ondsindede apps kan starte unødvendig CDMA-levering."</string>
-    <string name="permlab_locationUpdates" msgid="7785408253364335740">"kontroller meddelelser om placeringsopdatering"</string>
-    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Tillader, at appen kan aktivere/deaktivere meddelelser om placeringsopdatering fra senderen. Anvendes ikke i almindelige apps."</string>
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"kontroller underretninger om placeringsopdatering"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Tillader, at appen kan aktivere/deaktivere underretninger om placeringsopdatering fra senderen. Anvendes ikke i almindelige apps."</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"egenskaber for adgangskontrol"</string>
     <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Tillader, at appen kan få læse/skrive-adgang til egenskaber, der er uploadet af kontroltjenesten. Anvendes ikke af almindelige apps."</string>
     <string name="permlab_bindGadget" msgid="776905339015863471">"vælg widgets"</string>
@@ -550,7 +598,9 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Tillader, at appen kan styre enhedens telefonfunktioner. En app med denne tilladelse kan skifte netværk, slå telefonsenderen til og fra og lignende uden at underrette dig."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"læse telefonens status og identitet"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tillader, at appen kan få adgang til telefonfunktionerne på enheden. Med denne tilladelse kan appen fastslå telefonnummeret og enheds-id\'erne, hvorvidt et opkald er aktivt samt det eksterne nummer, der oprettes forbindelse til via et opkald."</string>
-    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"afhold tabletcomputeren fra at gå i dvale"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"læse nøjagtig status for telefonen"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Tillader, at appen får adgang til den nøjagtige status for telefonen. Denne tilladelse giver appen mulighed for at fastlægge den rigtige opkaldsstatus – om et opkald er aktivt eller kører i baggrunden, om opkaldet mislykkes, hvad den nøjagtige status for dataforbindelsen er, og om dataforbindelsen mislykkes."</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"afholde tabletcomputeren fra at gå i dvale"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"afholde telefonen fra at gå i dvale"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Tillader, at appen kan forhindre tabletten i at gå i dvale."</string>
     <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Tillader, at appen kan forhindre, at telefonen går i dvale."</string>
@@ -564,7 +614,7 @@
     <string name="permlab_factoryTest" msgid="3715225492696416187">"kør i fabriksindstillet testtilstand"</string>
     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Kør som en producenttest på lavt niveau, der giver fuld adgang til tabletens hardware. Kun tilgængeligt når en tablet kører i producenttesttilstand."</string>
     <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Kør som en producenttest på lavt niveau. Giver fuld adgang til telefonens hardware. Kun tilgængeligt når en telefon kører i producenttesttilstand."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"angiv tapet"</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"angive baggrund"</string>
     <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Tillader, at appen kan konfigurere systembaggrunden."</string>
     <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"ændre størrelsen på din baggrund"</string>
     <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Tillader, at appen giver tips til systembaggrundens størrelse."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Skift WiMAX-tilstand"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Tillader, at appen kan oprette forbindelse fra tabletten og afbryde forbindelsen til tabletten på WiMAX-netværk."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Tillader, at appen kan oprette forbindelse fra telefonen og afbryde forbindelsen til telefonen på WiMAX-netværk."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"bedømme netværk"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Tillader, at appen rangerer netværk og påvirker, hvilke netværk tabletten bør foretrække."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Tillader, at appen rangerer netværk og påvirker, hvilke netværk telefonen bør foretrække."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"parre med Bluetooth-enheder"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Tillader, at appen kan læse konfigurationen af ​​Bluetooth på tabletten samt kan oprette og acceptere forbindelser med parrede enheder."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Tillader, at appen kan læse konfigurationen af ​​Bluetooth på telefonen samt kan oprette og acceptere forbindelser med parrede enheder."</string>
@@ -670,20 +723,26 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Tillader, at appen kan hente, undersøge og rydde underretninger, f.eks. dem, der er sendt af andre apps."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"forpligte sig til en underretningslyttertjeneste"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Tillader brugeren at forpligte sig til en underretningslyttertjenestes grænseflade på øverste niveau. Bør aldrig være nødvendigt til almindelige apps."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"oprette binding til en tjeneste til formidling af betingelser"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Tillader, at brugeren opretter en binding til det øverste niveau af grænsefladen i en tjeneste til formidling af betingelser. Dette bør aldrig være nødvendigt for almindelige apps."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"aktivere konfigurationsappen, der leveres af mobilselskabet"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Tillader, at brugeren aktiverer konfigurationsappen, der er forsynet af mobilselskabet. Dette bør aldrig være nødvendigt for almindelige apps."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"observer netværksforhold"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Tillader, at en applikation observerer netværksforhold. Bør aldrig være nødvendigt for almindelige apps."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"skift kalibrering for inputenheden"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Tillader, at appen ændrer kalibreringsparametrene for berøringsskærmen. Dette bør aldrig være nødvendigt for almindelige apps."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"få adgang til DRM-certifikater"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Tillader, at en applikation leverer og anvender DRM-certfikater. Dette bør aldrig være nødvendigt for almindelige apps."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Indstil regler for adgangskode"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontroller længden samt tilladte tegn i adgangskoder til oplåsning af skærmen."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Overvåg forsøg på oplåsning af skærm"</string>
     <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Overvåg antallet af forkert indtastede adgangskoder, når du låser skærmen op, og lås din tablet, eller slet alle data i den, hvis der er indtastet for mange forkerte adgangskoder."</string>
     <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Overvåg antallet af forkerte adgangskoder ved oplåsning af skærmen, og lås telefonen eller slet alle data på telefonen, hvis der er indtastet for mange forkerte adgangskoder."</string>
-    <string name="policylab_resetPassword" msgid="2620077191242688955">"Skift adgangskode til oplåsning af skærm"</string>
-    <string name="policydesc_resetPassword" msgid="605963962301904458">"Skift adgangskode til oplåsning af skærmen."</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"Skifte adgangskode til oplåsning af skærm"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"Skifter adgangskode til oplåsning af skærmen."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"Lås skærmen"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Kontroller, hvordan og hvornår skærmen låses."</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"Slet alle data"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"Kontrollerer, hvordan og hvornår skærmen låses."</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"Slette alle data"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Slet din tablets data uden varsel ved at gendanne fabriksindstillingerne."</string>
     <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Slet telefonens data uden varsel ved at gendanne fabriksindstillingerne."</string>
     <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Angiv enhedens globale proxy"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Hjem"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Arbejde"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Andet"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Der blev ikke fundet nogen applikation, som kan vise denne kontaktperson."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Indtast pinkode"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Indtast PUK- og pinkode"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
@@ -1114,8 +1174,8 @@
     <string name="loading" msgid="7933681260296021180">"Indlæser…"</string>
     <string name="capital_on" msgid="1544682755514494298">"TIL"</string>
     <string name="capital_off" msgid="6815870386972805832">"FRA"</string>
-    <string name="whichApplication" msgid="4533185947064773386">"Fuldfør handling ved hjælp af"</string>
-    <string name="whichHomeApplication" msgid="4616420172727326782">"Vælg en startsideapp"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"Brug"</string>
+    <string name="whichHomeApplication" msgid="4616420172727326782">"Vælg en startapp"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"Brug som standard til denne handling."</string>
     <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Ryd standard i Systemindstillinger &gt; Apps &gt; Downloadet."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"Vælg en handling"</string>
@@ -1143,7 +1203,7 @@
     <string name="smv_process" msgid="5120397012047462446">"Processen <xliff:g id="PROCESS">%1$s</xliff:g> har overtrådt sin egen StrictMode-politik."</string>
     <string name="android_upgrading_title" msgid="1584192285441405746">"Android opgraderes..."</string>
     <string name="android_upgrading_apk" msgid="7904042682111526169">"Optimerer app <xliff:g id="NUMBER_0">%1$d</xliff:g> ud af <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
-    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Sådan åbner du dine apps."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Åbner dine apps."</string>
     <string name="android_upgrading_complete" msgid="1405954754112999229">"Gennemfører start."</string>
     <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> er i gang"</string>
     <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Tryk for at skifte til appen"</string>
@@ -1234,20 +1294,20 @@
     <string name="usb_storage_title" msgid="5901459041398751495">"USB er tilsluttet"</string>
     <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Du har fået forbindelse til din computer via USB. Tryk på knappen nedenfor, hvis du vil kopiere filer mellem din computer og din Androids USB-lager."</string>
     <string name="usb_storage_message" product="default" msgid="805351000446037811">"Du har fået forbindelse til din computer via USB. Tryk på knappen nedenfor, hvis du vil kopiere filer mellem din computer og din Androids SD-kort."</string>
-    <string name="usb_storage_button_mount" msgid="1052259930369508235">"Slå USB-lagring til"</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"Slå USB-lager til"</string>
     <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"Der er et problem med at bruge dit USB-lager som USB-masselager."</string>
     <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"Der er et problem med at bruge dit SD-kort som USB-masselager."</string>
     <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB er tilsluttet"</string>
     <string name="usb_storage_notification_message" msgid="939822783828183763">"Tryk for at kopiere filer til/fra din computer."</string>
     <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Slå USB-lagringen fra"</string>
-    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"Tryk for at slå USB-lagring fra."</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"Tryk for at slå USB-lager fra."</string>
     <string name="usb_storage_stop_title" msgid="660129851708775853">"USB-lager i brug"</string>
-    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"Før du slår USB-lagring fra, skal du demontere din Androids USB-lager (\"skubbe enheden ud\") fra din computer."</string>
-    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"Før du slår USB-lagring fra, skal du demontere din Androids SD-kort (\"skubbe enheden ud\") fra din computer."</string>
-    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Slå USB-lagring fra"</string>
-    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"Der opstod et problem med at slå USB-lagring fra. Kontroller, at du har demonteret USB-værten, og prøv derefter igen."</string>
-    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Slå USB-lagring til"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Hvis du slår USB-lagring til, stoppes nogle af de apps, som du bruger, og de kan være utilgængelige, indtil du slår USB-lagring fra igen."</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"Før du slår USB-lager fra, skal du demontere din Androids USB-lager (\"skubbe enheden ud\") fra din computer."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"Før du slår USB-lager fra, skal du demontere din Androids SD-kort (\"skubbe enheden ud\") fra din computer."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Slå USB-lager fra"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"Der opstod et problem med at slå USB-lager fra. Kontroller, at du har demonteret USB-værten, og prøv derefter igen."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Slå USB-lager til"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Hvis du slår USB-lager til, stoppes nogle af de apps, som du bruger, og de kan være utilgængelige, indtil du slår USB-lager fra igen."</string>
     <string name="dlg_error_title" msgid="7323658469626514207">"USB-handlingen mislykkedes"</string>
     <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
     <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Tilsluttet som en medieenhed"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Tillader, at en applikation får adgang til et nøglebeskyttet lager."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Administrer, om nøglebeskyttelse skal vises eller skjules"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tillader, at en applikation styrer nøglebeskyttelsen."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Registrere ændringer i trust-tilstand."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Tillader, at en applikation registrerer ændringer i trust-tilstand."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Knytte sig til en trust agent-tjeneste"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Tillader, at en applikation knytter sig til en trust agent-tjeneste."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interager med opdaterings- og gendannelsessystemet"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Giver en applikation tilladelse til at interagere med gendannelsessystemet og systemopdateringerne."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Tryk to gange for zoomstyring"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget kunne ikke tilføjes."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Gå"</string>
@@ -1325,10 +1391,11 @@
     <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Der er anmodet om tilladelse\nfor kontoen <xliff:g id="ACCOUNT">%s</xliff:g>."</string>
     <string name="input_method_binding_label" msgid="1283557179944992649">"Inputmetode"</string>
     <string name="sync_binding_label" msgid="3687969138375092423">"Synkroniser"</string>
-    <string name="accessibility_binding_label" msgid="4148120742096474641">"Tilgængelighed"</string>
-    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Tapet"</string>
-    <string name="chooser_wallpaper" msgid="7873476199295190279">"Skift tapet"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"Hjælpefunktioner"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Baggrund"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"Skift baggrund"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Underretningslytter"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Tjeneste til formidling af betingelser"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN er aktiveret."</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN aktiveres af <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Tryk for at administrere netværket."</string>
@@ -1363,7 +1430,7 @@
     <string name="progress_unmounting" product="default" msgid="1327894998409537190">"Demonterer SD-kortet..."</string>
     <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"Sletter USB-lageret..."</string>
     <string name="progress_erasing" product="default" msgid="6596988875507043042">"Sletter SD-kortet..."</string>
-    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kunne ikke slette USB-lagring."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Kunne ikke slette USB-lager."</string>
     <string name="format_error" product="default" msgid="7315248696644510935">"Kunne ikke slette SD-kort."</string>
     <string name="media_bad_removal" msgid="7960864061016603281">"SD-kortet blev fjernet, før det blev demonteret."</string>
     <string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-lager bliver kontrolleret."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Angiv"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Vælg en app"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> kunne ikke startes"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Del med"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Del med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Glidende håndtag. Tryk og hold nede."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Glid op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Glid ned for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Glid til venstre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Glid til højre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Lås op"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Lydløs"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Lyd slået til"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Søgning"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Glid hurtigt henover for at låse op."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Tilslut et headset for at høre tasterne blive læst højt ved angivelse af adgangskode."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punktum."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Trådløs skærm"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Udfør"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieudgang"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Opret forbindelse til enheden"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Send skærm til enhed"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Søger efter enheder…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Indstillinger"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Afbryd forbindelsen"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Søger..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Opretter forbindelse..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Tilgængelig"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlejring nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", sikker"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Der er tilsluttet en trådløs skærm"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Denne skærm vises på en anden enhed"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Skærm sendes"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Der oprettes forbindelse til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Skærm sendes"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Forbundet til <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Afbryd forbindelsen"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Nødopkald"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Glemt mønster"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortet låses op…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Forkert pinkode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Indtast en pinkode på mellem 4 og 8 tal."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden skal være på 8 tal eller mere."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-koden skal være på 8 tal."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Indtast den korrekte PUK-kode. Gentagne forsøg vil permanent deaktivere SIM-kortet."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Pinkoderne stemmer ikke overens"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"For mange forsøg på at tegne mønstret korrekt"</string>
@@ -1537,9 +1602,9 @@
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Fjern"</string>
     <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"Skal lydstyrken være over det anbefalede niveau?\nDu kan skade din hørelse ved at lytte ved høj lydstyrke i længere tid."</string>
-    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Hold fortsat to fingre nede for at aktivere tilgængelighed."</string>
-    <string name="accessibility_enabled" msgid="1381972048564547685">"Tilgængelighed aktiveret."</string>
-    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"Tilgængelighed er annulleret."</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Bliv ved med at holde to fingre nede for at aktivere hjælpefunktioner."</string>
+    <string name="accessibility_enabled" msgid="1381972048564547685">"Hjælpefunktioner er aktiveret."</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"Hjælpefunktioner er annulleret."</string>
     <string name="user_switched" msgid="3768006783166984410">"Nuværende bruger <xliff:g id="NAME">%1$s</xliff:g>."</string>
     <string name="owner_name" msgid="2716755460376028154">"Ejer"</string>
     <string name="error_message_title" msgid="4510373083082500195">"Fejl"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Prøv igen senere"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Stryg ned fra toppen for at afslutte fuld skærm"</string>
+    <string name="done_label" msgid="2093726099505892398">"Udfør"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Cirkulær timevælger"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Cirkulær minutvælger"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Vælg timer"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Vælg minutter"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Månedsgitter med dage"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Liste over år"</string>
+    <string name="select_day" msgid="7774759604701773332">"Vælg måned og dag"</string>
+    <string name="select_year" msgid="7952052866994196170">"Vælg år"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> er valgt"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> er slettet"</string>
 </resources>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index f799be4..87d4aa0 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Unbenannt&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Geben Sie eine mindestens achtstellige PUK ein."</string>
     <string name="needPuk" msgid="919668385956251611">"Ihre SIM-Karte ist mit einem PUK gesperrt. Geben Sie zum Entsperren den PUK-Code ein."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Geben Sie zum Entsperren der SIM-Karte den PUK2 ein."</string>
+    <string name="enablePin" msgid="209412020907207950">"Fehler. SIM-/RUIM-Sperre aktivieren."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuch, bevor Ihre SIM-Karte gesperrt wird."</item>
+    <item quantity="other" msgid="7530597808358774740">"Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuche, bevor Ihre SIM-Karte gesperrt wird."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Anrufer-ID für eingehenden Anruf"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchronisierung"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Zu viele <xliff:g id="CONTENT_TYPE">%s</xliff:g> gelöscht."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Der Tablet-Speicher ist voll. Löschen Sie Dateien, um Speicherplatz freizugeben."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Der Speicher Ihrer Uhr ist voll. Löschen Sie Dateien, um Speicherplatz freizugeben."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Der Handyspeicher ist voll! Löschen Sie Dateien, um Speicherplatz freizugeben."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Das Netzwerk wird möglicherweise überwacht."</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Von einem unbekannten Dritten"</string>
@@ -140,13 +168,14 @@
     <string name="silent_mode" msgid="7167703389802618663">"Lautlos-Modus"</string>
     <string name="turn_on_radio" msgid="3912793092339962371">"Funk einschalten"</string>
     <string name="turn_off_radio" msgid="8198784949987062346">"Funk ausschalten"</string>
-    <string name="screen_lock" msgid="799094655496098153">"Display-Sperre"</string>
+    <string name="screen_lock" msgid="799094655496098153">"Displaysperre"</string>
     <string name="power_off" msgid="4266614107412865048">"Ausschalten"</string>
     <string name="silent_mode_silent" msgid="319298163018473078">"Klingelton aus"</string>
     <string name="silent_mode_vibrate" msgid="7072043388581551395">"Klingeltonmodus \"Vibration\""</string>
     <string name="silent_mode_ring" msgid="8592241816194074353">"Klingelton ein"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Wird heruntergefahren..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Ihr Tablet wird heruntergefahren."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Ihre Uhr wird heruntergefahren."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefon wird heruntergefahren."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Möchten Sie das Gerät herunterfahren?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Im abgesicherten Modus starten"</string>
@@ -155,7 +184,7 @@
     <string name="no_recent_tasks" msgid="8794906658732193473">"Keine kürzlich geöffneten Apps"</string>
     <string name="global_actions" product="tablet" msgid="408477140088053665">"Tablet-Optionen"</string>
     <string name="global_actions" product="default" msgid="2406416831541615258">"Telefonoptionen"</string>
-    <string name="global_action_lock" msgid="2844945191792119712">"Display-Sperre"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"Displaysperre"</string>
     <string name="global_action_power_off" msgid="4471879440839879722">"Ausschalten"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"Fehlerbericht"</string>
     <string name="bugreport_title" msgid="2667494803742548533">"Fehlerbericht abrufen"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flugmodus"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flugmodus ist AN."</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flugmodus ist AUS."</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Einstellungen"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Abgesicherter Modus"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-System"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"Verknüpfungen deinstallieren"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Ermöglicht einer App das Entfernen von Verknüpfungen vom Startbildschirm ohne Eingriff des Nutzers"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"Ausgehende Anrufe umleiten"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Ermöglicht der App, ausgehende Anrufe zu verarbeiten und die zu wählende Nummer zu ändern. Die Berechtigung erlaubt der App, ausgehende Anrufe zu überwachen, umzuleiten und zu unterbinden."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Ermöglicht der App die Erkennung der während eines ausgehenden Anrufs gewählten Nummer und gibt ihr die Möglichkeit, den Anruf an eine andere Nummer umzuleiten oder den Anruf ganz abzubrechen"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"SMS empfangen"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Ermöglicht der App, SMS zu empfangen und zu verarbeiten. Das bedeutet, dass die App an Ihr Gerät gesendete Nachrichten überwachen und löschen kann, ohne sie Ihnen anzuzeigen."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"MMS empfangen"</string>
@@ -309,13 +339,13 @@
     <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"Bildschirminhalt abrufen"</string>
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Ermöglicht der App, den Inhalt des aktiven Fensters abzurufen. Schädliche Apps können so den gesamten Fensterinhalt abrufen und mit Ausnahme von Passwörtern den gesamten Text auswerten."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Bedienungshilfen vorübergehend aktivieren"</string>
-    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ermöglicht einer App, die Bedienungshilfen auf dem Gerät vorübergehend zu aktivieren. Schädliche Apps können Bedienungshilfen ohne die Zustimmung des Nutzers aktivieren."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"Fensterinformationen abrufen"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ermöglicht einer App, Informationen über die Fenster vom Fenster-Manager abzurufen. Schädliche Apps können Informationen abrufen, die für die systeminterne Nutzung gedacht sind."</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ermöglicht der App, die Bedienungshilfen auf dem Gerät vorübergehend zu aktivieren. Schädliche Apps können Bedienungshilfen ohne die Zustimmung des Nutzers aktivieren."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"Fenstertoken abrufen"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Berechtigt eine App zum Abruf des Fenstertokens. Bösartige Apps können sich als System ausgeben und unautorisiert mit dem App-Fenster interagieren."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"Framestatistiken abrufen"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Berechtigt eine App zur Erfassung von Framestatistiken. Bösartige Apps können möglicherweise die Framestatistiken für Fenster von anderen Apps beobachten."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"Ereignisse filtern"</string>
-    <string name="permdesc_filter_events" msgid="8006236315888347680">"Ermöglicht einer App, einen Eingabefilter zu registrieren, der den Stream aller Nutzerereignisse vor ihrem Versand filtert. Eine schädliche App kann die System-UI ohne Eingriff des Nutzers kontrollieren."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"Anzeige vergrößern"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Erlaubt der App, den Inhalt einer Anzeige zu vergrößern. Schädliche Apps verändern eventuell die Ansicht, sodass Inhalte nicht richtig angezeigt werden."</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"Ermöglicht der App, einen Eingabefilter zu registrieren, der den Stream aller Nutzerereignisse vor ihrem Versand filtert. Eine schädliche App kann die System-UI ohne Eingriff des Nutzers kontrollieren."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"Partielles Herunterfahren"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Versetzt den Aktivitätsmanager in einen heruntergefahrenen Zustand. Führt kein vollständiges Herunterfahren aus."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"App-Wechsel verhindern"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Ermöglicht der App, eine Benachrichtigung zu senden, dass eine SMS empfangen wurde. Schädliche Apps können so eingehende SMS fälschen."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"Von WAP-PUSH empfangenen Broadcast senden"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Ermöglicht der App, eine Benachrichtigung zu senden, dass eine WAP PUSH-Nachricht empfangen wurde. Schädliche Apps können so den Empfang von MMS vortäuschen oder unbemerkt den Inhalt einer beliebigen Webseite durch schädliche Inhalte ersetzen."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"Netzwerkbewertungen senden"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Ermöglicht der App, Benachrichtigungen zu senden, dass Netzwerke bewertet werden müssen. Für normale Apps ist dies nie erforderlich."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"Anzahl der laufenden Prozesse beschränken"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Ermöglicht der App, die maximale Anzahl an aktiven Prozessen zu steuern. Wird nie für normale Apps benötigt."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"Apps im Hintergrund schließen"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Ermöglicht dem Halter, sich an die Oberfläche eines VPN-Dienstes auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"An einen Hintergrund binden"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Ermöglicht dem Halter, sich an die Oberfläche eines Hintergrunds auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"An einen Sprachinteraktionsdienst binden"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Ermöglicht dem Inhaber, sich an die Oberfläche eines Sprachinteraktionsdienstes auf oberster Ebene zu binden. Für normale Apps sollte dies nie erforderlich sein."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"An Remote-Display binden"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Ermöglicht dem Halter, sich an die Oberfläche eines Remote-Displays auf oberster Ebene zu binden. Sollte für normale Apps nie benötigt werden."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"An einen Widget-Dienst binden"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Ermöglicht dem Halter, sich an die Oberfläche eines Widget-Dienstes auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"An Routenanbieterdienst binden"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Ermöglicht dem Inhaber die Bindung an registrierte Routenanbieter. Sollte für normale Apps nicht erforderlich sein"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"Interaktion mit einem Geräteadministrator"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Ermöglicht dem Halter, Intents an einen Geräteadministrator zu senden. Sollte nie für normale Apps benötigt werden."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"An eine TV-Eingabe binden"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Ermöglicht dem Inhaber, sich an die Oberfläche einer TV-Eingabe auf oberster Ebene zu binden. Sollte nie für normale Apps benötigt werden."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"Geräteadministrator hinzufügen oder entfernen"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Ermöglicht dem Inhaber, aktive Geräteadministratoren hinzuzufügen oder zu entfernen. Sollte für normale Apps nie benötigt werden."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"Bildschirmausrichtung ändern"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Ermöglicht der App, alle installierten Mediendecodierer zur Wiedergabe zu verwenden."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"Vertrauenswürdige Anmeldedaten verwalten"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Ermöglicht der App, CA-Zertifikate als vertrauenswürdige Anmeldedaten zu installieren und zu deinstallieren."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"App bei Inaktivität ausführen"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Diese Berechtigung ermöglicht es dem Android-System, die App im Hintergrund auszuführen, wenn das Gerät nicht verwendet wird."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"Lese-/Schreibberechtigung für zu Diagnosegruppe gehörige Elemente"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Ermöglicht der App, alle Elemente in der Diagnosegruppe zu lesen und zu bearbeiten, etwa Dateien in \"/dev\". Dies könnte eine potenzielle Gefährdung für die Stabilität und Sicherheit des Systems darstellen und sollte NUR für hardwarespezifische Diagnosen des Herstellers oder Mobilfunkanbieters verwendet werden."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"App-Komponenten aktivieren oder deaktivieren"</string>
@@ -449,10 +491,12 @@
     <string name="permlab_writeCallLog" msgid="8552045664743499354">"Anrufliste bearbeiten"</string>
     <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Ermöglicht der App, die Anrufliste Ihres Tablets zu ändern, einschließlich der Daten über ein- und ausgehende Anrufe. Schädliche Apps können so Ihre Anrufliste löschen oder ändern."</string>
     <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Ermöglicht der App, die Anrufliste Ihres Telefons zu ändern, einschließlich der Daten über ein- und ausgehende Anrufe. Schädliche Apps können so Ihre Anrufliste löschen oder ändern."</string>
-    <string name="permlab_readProfile" msgid="4701889852612716678">"Meine Kontaktkarten lesen"</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"Ihre Kontaktkarten lesen"</string>
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Ermöglicht der App, auf Ihrem Gerät gespeicherte personenbezogene Profildaten zu lesen, einschließlich Ihres Namens und Ihrer Kontaktdaten. Die App kann Sie somit identifizieren und Ihre Profildaten an andere senden."</string>
-    <string name="permlab_writeProfile" msgid="907793628777397643">"Meine Kontaktkarten ändern"</string>
+    <string name="permlab_writeProfile" msgid="907793628777397643">"Ihre Kontaktkarten ändern"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Ermöglicht der App, auf Ihrem Gerät gespeicherte personenbezogene Profildaten zu ändern, einschließlich Ihres Namens und Ihrer Kontaktdaten, sowie Daten hinzuzufügen. Die App kann Sie so identifizieren und Ihre Profildaten an andere senden."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"Körpersensoren (wie Herzfrequenzmesser)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Ermöglicht der App den Zugriff auf Daten von Sensoren, mit denen Ihre Vitalfunktionen, etwa die Herzfrequenz, gemessen werden."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"In sozialem Stream lesen"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Ermöglicht der App, auf Updates aus sozialen Netzwerken von Ihnen und Ihren Freunden zuzugreifen und diese zu synchronisieren. Seien Sie vorsichtig, wenn Sie Informationen teilen: Der App wird erlaubt, die Kommunikation zwischen Ihnen und Ihren Freunden in sozialen Netzwerken zu lesen, unabhängig von der Vertraulichkeit der kommunizierten Informationen. Hinweis: Diese Berechtigung kann möglicherweise nicht in allen sozialen Netzwerken erzwungen werden."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"In sozialem Stream schreiben"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Ermöglicht der App, die systemnahen SurfaceFlinger-Funktionen zu verwenden"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"Frame-Puffer lesen"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Ermöglicht der App, den Inhalt des Frame-Puffers zu lesen"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"Auf InputFlinger zugreifen"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Ermöglicht der App, die systemnahen InputFlinger-Funktionen zu verwenden"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"WLAN-Anzeigen konfigurieren"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Erlaubt der App, WLAN-Anzeigen zu konfigurieren und eine Verbindung zu diesen herzustellen"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"WLAN-Anzeigen steuern"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ermöglicht der App, globale Audio-Einstellungen zu ändern, etwa die Lautstärke und den Lautsprecher für die Ausgabe."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"Audio aufnehmen"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Ermöglicht der App, Ton mithilfe des Mikrofons aufzunehmen. Die Berechtigung erlaubt der App, Tonaufnahmen jederzeit und ohne Ihre Bestätigung durchzuführen."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-Kommunikation"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Ermöglicht der App das Senden von Befehlen an die SIM-Karte. Dies ist äußerst risikoreich."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"Bilder und Videos aufnehmen"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Ermöglicht der App, Bilder und Videos mit der Kamera aufzunehmen. Die Berechtigung erlaubt der App, die Kamera jederzeit und ohne Ihre Bestätigung zu nutzen."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"LED-Anzeige für Übertragung bei Kameranutzung deaktivieren"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Ermöglicht der App, die Telefonfunktionen des Geräts zu steuern. Eine App mit dieser Berechtigung kann das Netzwerk wechseln oder das Radio des Telefons ein- und ausschalten, ohne Sie darüber zu informieren."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"Telefonstatus und Identität abrufen"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Ermöglicht der App, auf die Telefonfunktionen des Geräts zuzugreifen. Die Berechtigung erlaubt der App, die Telefonnummer und Geräte-IDs zu erfassen, festzustellen, ob gerade ein Gespräch geführt wird, und die Rufnummer verbundener Anrufer zu lesen."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"Genaue Telefonstatusangaben abrufen"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Ermöglicht der App, auf die genauen Telefonstatusangaben zuzugreifen. Diese Erlaubnis ermöglicht der App, den tatsächlichen Rufstatus zu ermitteln, das bedeutet, ob ein Anruf aktiv ist oder im Hintergrund abläuft, ob bei einem Anruf ein Fehler aufgetreten ist, wie der genaue Datenverbindungsstatus lautet oder ob bei der Datenverbindung ein Fehler aufgetreten ist."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"Ruhezustand des Tablets deaktivieren"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"Ruhezustand deaktivieren"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Ermöglicht der App, den Ruhezustand des Tablets zu deaktivieren"</string>
@@ -617,12 +667,15 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-Status ändern"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Ermöglicht der App, eine Verbindung zwischen dem Tablet und WiMAX-Netzwerken herzustellen und solche zu trennen."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Ermöglicht der App, eine Verbindung zwischen dem Telefon und WiMAX-Netzwerken herzustellen und solche zu trennen."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"Netzwerke bewerten"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Ermöglicht der App, Netzwerke zu bewerten und die Auswahl des jeweiligen Netzwerks für das Tablet zu beeinflussen"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Ermöglicht der App, Netzwerke zu bewerten und die Auswahl des jeweiligen Netzwerks für das Telefon zu beeinflussen"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Pairing mit Bluetooth-Geräten durchführen"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Ermöglicht der App, die Bluetooth-Konfiguration eines Tablets einzusehen und Verbindungen zu gekoppelten Geräten herzustellen und zu akzeptieren."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Ermöglicht der App, die Bluetooth-Konfiguration des Telefons einzusehen und Verbindungen mit gekoppelten Geräten herzustellen und zu akzeptieren."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"Nahfeldkommunikation steuern"</string>
     <string name="permdesc_nfc" msgid="7120611819401789907">"Ermöglicht der App die Kommunikation mit Tags für die Nahfeldkommunikation, Karten und Readern"</string>
-    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"Display-Sperre deaktivieren"</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"Displaysperre deaktivieren"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Ermöglicht der App, die Tastensperre sowie den damit verbundenen Passwortschutz zu deaktivieren. Das Telefon deaktiviert die Tastensperre beispielsweise, wenn ein Anruf eingeht, und aktiviert sie wieder, nachdem das Gespräch beendet wurde."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"Synchronisierungseinstellungen lesen"</string>
     <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Ermöglicht der App, die Synchronisierungseinstellungen eines Kontos zu lesen. Beispielsweise kann damit festgestellt werden, ob Kontakte mit einem Konto synchronisiert werden."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Ermöglicht der App das Abrufen, Überprüfen und Löschen von Benachrichtigungen, einschließlich Benachrichtigungen, die von anderen Apps gepostet wurden"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"An Benachrichtigungs-Listener-Dienst binden"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Ermöglicht dem Inhaber, sich an die Oberfläche der obersten Ebene eines Benachrichtigungs-Listener-Dienstes zu binden. Sollte nie für normale Apps benötigt werden."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"An einen Bedingungsanbieterdienst binden"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Ermöglicht dem Inhaber, sich an die Oberfläche eines Bedingungsanbieterdienstes auf oberster Ebene zu binden. Für normale Apps sollte dies nie erforderlich sein."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Vom Mobilfunkanbieter bereitgestellte Konfigurations-App aufrufen"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Ermöglicht dem Inhaber, die vom Mobilfunkanbieter bereitgestellte Konfigurations-App aufzurufen. Sollte für normale Apps nie benötigt werden."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Informationen zu den Netzwerkbedingungen erfassen"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Ermöglicht der App, Informationen zu den Netzwerkbedingungen zu erfassen. Sollte für normale Apps nie benötigt werden."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"Kalibrierung für Eingabegerät ändern"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Ermöglicht der App, die Kalibrierungsparameter des Touchscreens zu ändern. Für normale Apps sollte dies nie erforderlich sein."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"Auf DRM-Zertifikate zugreifen"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Ermöglicht einer App die Bereitstellung und Nutzung von DRM-Zertifikaten. Sollte für normale Apps nie benötigt werden."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Passwortregeln festlegen"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Zulässige Länge und Zeichen für Passwörter zum Entsperren des Bildschirms festlegen"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Versuche zum Entsperren des Displays überwachen"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Privat"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Geschäftlich"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Sonstige"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Es wurde keine App zum Anzeigen dieses Kontakts gefunden."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN-Code eingeben"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK und neuen PIN-Code eingeben"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-Code"</string>
@@ -830,7 +890,7 @@
     <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Erneut versuchen"</string>
     <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Erneut versuchen"</string>
     <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Die maximal zulässige Anzahl an Face Unlock-Versuchen wurde überschritten."</string>
-    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Wird geladen... (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Wird aufgeladen... (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
     <string name="lockscreen_charged" msgid="321635745684060624">"Aufgeladen"</string>
     <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="lockscreen_low_battery" msgid="1482873981919249740">"Ladegerät anschließen"</string>
@@ -1198,7 +1258,7 @@
     <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Einladung zum Aufbau einer Verbindung"</string>
     <string name="wifi_p2p_from_message" msgid="570389174731951769">"Von:"</string>
     <string name="wifi_p2p_to_message" msgid="248968974522044099">"An:"</string>
-    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Geben Sie die erforderliche PIN ein:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Geben Sie die PIN ein:"</string>
     <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
     <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Das Tablet wird vorübergehend vom WLAN getrennt, während eine Verbindung mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> besteht."</string>
     <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Das Telefon wird vorübergehend vom WLAN getrennt, während eine Verbindung mit <xliff:g id="DEVICE_NAME">%1$s</xliff:g> hergestellt wird."</string>
@@ -1300,11 +1360,17 @@
     <string name="permlab_copyProtectedData" msgid="4341036311211406692">"Inhalte kopieren"</string>
     <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Ermöglicht der App das Aufrufen des Standard-Containerdienstes zum Kopieren von Inhalten. Nicht für normale Apps vorgesehen."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"Medienausgabe umleiten"</string>
-    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ermöglicht einer App, die Medienausgabe auf andere externe Geräte umzuleiten."</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Ermöglicht der App, die Medienausgabe auf andere externe Geräte umzuleiten."</string>
     <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Zugriff auf mit Keyguard geschützten Speicher"</string>
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Ermöglicht einer App den Zugriff auf mit Keyguard geschützten Speicher"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Anzeige und Ausblenden des Keyguard steuern"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Apps können den Keyguard steuern."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Überwachung von Änderungen des Trust-Status"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Ermöglicht einer App die Überwachungen von Änderungen des Trust-Status"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"An Trust Agent-Service anbinden"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ermöglicht einer App die Anbindung an einen Trust Agent-Service"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Mit Update- und Wiederherstellungssystem interagieren"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Ermöglicht einer App die Interaktion mit dem Wiederherstellungssystem und den Systemupdates"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Für Zoomeinstellung zweimal berühren"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget konnte nicht hinzugefügt werden."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Los"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Hintergrund"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Hintergrund ändern"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Benachrichtigungs-Listener"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Bedingungsanbieter"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN aktiviert"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN wurde von <xliff:g id="APP">%s</xliff:g> aktiviert."</string>
     <string name="vpn_text" msgid="3011306607126450322">"Zum Verwalten des Netzwerks berühren"</string>
@@ -1411,21 +1478,13 @@
     <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Löschen"</string>
     <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fertig"</string>
     <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusänderung"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Umschalttaste"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Eingabetaste"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"App auswählen"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> konnte nicht gestartet werden."</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Teilen mit"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Mit <xliff:g id="APPLICATION_NAME">%s</xliff:g> teilen"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Schieberegler: Berühren und halten"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben schieben"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach unten schieben"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach links schieben"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach rechts schieben"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Entsperren"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Lautlos"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Ton ein"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Suche"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Zum Entsperren den Finger über den Bildschirm ziehen"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Schließen Sie ein Headset an, um das Passwort gesprochen zu hören."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-Audio"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Kabellose Übertragung (WiDi)"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fertig"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medienausgabe"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Mit Gerät verbinden"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Bildschirm auf Gerät übertragen"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Geräte werden gesucht…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Einstellungen"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Verbindung trennen"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Wird gescannt..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Verbindung wird hergestellt..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Verfügbar"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay-Nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", sicher"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Kabellose Übertragung (WiDi) ist aktiviert."</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Dieser Bildschirm wird auf einem anderen Gerät angezeigt."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Bildschirm wird übertragen"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Verbindung mit <xliff:g id="NAME">%1$s</xliff:g> wird hergestellt."</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Bildschirm wird übertragen"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Verbunden mit <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Verbindung trennen"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Notruf"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Muster vergessen"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-Karte wird entsperrt…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Falscher PIN-Code"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Geben Sie eine 4- bis 8-stellige PIN ein."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Der PUK-Code muss mindestens 8 Ziffern betragen."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Der PUK-Code muss 8 Ziffern aufweisen."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Geben Sie den richtigen PUK-Code ein. Bei wiederholten Versuchen wird die SIM-Karte dauerhaft deaktiviert."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-Codes stimmen nicht überein"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Zu viele Musterversuche"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Später erneut versuchen"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Zum Schließen des Vollbilds von oben nach unten wischen"</string>
+    <string name="done_label" msgid="2093726099505892398">"Fertig"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Kreisförmiger Schieberegler für Stunden"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Kreisförmiger Schieberegler für Minuten"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Stunden auswählen"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Minuten auswählen"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Monatsraster mit einzelnen Tagen"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Jahresliste"</string>
+    <string name="select_day" msgid="7774759604701773332">"Monat und Tag auswählen"</string>
+    <string name="select_year" msgid="7952052866994196170">"Jahr auswählen"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> ausgewählt"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> gelöscht"</string>
 </resources>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 605d845..9105cb2 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Χωρίς τίτλο&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Πληκτρολογήστε έναν κωδικό PUK με 8 αριθμούς ή περισσότερους."</string>
     <string name="needPuk" msgid="919668385956251611">"Η κάρτα SIM έχει κλειδωθεί με κωδικό PUK. Πληκτρολογήστε τον κωδικό PUK για να την ξεκλειδώσετε."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Πληκτρολογήστε τον κωδικό PUK2 για την κατάργηση αποκλεισμού της κάρτας SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Ανεπιτυχής προσπάθεια. Ενεργοποιήστε το Κλείδωμα SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Απομένει άλλη <xliff:g id="NUMBER">%d</xliff:g> προσπάθεια προτού η κάρτα SIM κλειδωθεί."</item>
+    <item quantity="other" msgid="7530597808358774740">"Απομένουν <xliff:g id="NUMBER">%d</xliff:g> προσπάθειες προτού η κάρτα SIM κλειδωθεί."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Εισερχόμενη αναγνώριση κλήσης"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Συγχρονισμός"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Πάρα πολλές <xliff:g id="CONTENT_TYPE">%s</xliff:g> διαγραφές."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Ο αποθηκευτικός χώρος του tablet είναι πλήρης. Διαγράψτε μερικά αρχεία για να δημιουργήσετε ελεύθερο χώρο."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Ο αποθηκευτικός χώρος παρακολούθησης είναι πλήρης! Διαγράψτε μερικά αρχεία για να απελευθερώσετε χώρο."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Ο αποθηκευτικός χώρος του τηλεφώνου είναι πλήρης. Διαγράψτε μερικά αρχεία για να δημιουργήσετε ελεύθερο χώρο."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Το δίκτυο ενδέχεται να παρακολουθείται"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Από ένα άγνωστο τρίτο μέρος"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Ειδοποίηση ήχου ενεργή"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Απενεργοποίηση..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Το tablet σας θα απενεργοποιηθεί."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Η παρακολούθησή σας θα τερματιστεί."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Το τηλέφωνό σας θα απενεργοποιηθεί."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Θέλετε να γίνει τερματισμός λειτουργίας;"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Επανεκκίνηση στην ασφαλή λειτουργία"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Λειτουργία πτήσης"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Η λειτουργία πτήσης είναι ενεργοποιημένη."</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Λειτ. πτήσης είναι ανενεργή"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Ρυθμίσεις"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Ασφαλής λειτουργία"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Σύστημα Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"κατάργηση εγκατάστασης συντομεύσεων"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Επιτρέπει στην εφαρμογή την κατάργηση συντομεύσεων από την Αρχική οθόνη χωρίς την παρέμβαση του χρήστη."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"αναδρομολόγηση εξερχόμενων κλήσεων"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Επιτρέπει στην εφαρμογή την επεξεργασία εξερχόμενων κλήσεων και την αλλαγή του αριθμού που πρόκειται να κληθεί. Αυτό δίνει τη δυνατότητα στην εφαρμογή να παρακολουθεί, να ανακατευθύνει ή να παρεμποδίζει εξερχόμενες κλήσεις:"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Επιτρέπει στην εφαρμογή να βλέπει τον αριθμό που καλέσατε κατά τη διάρκεια μιας εξερχόμενης κλήσης με επιλογή ανακατεύθυνσης της κλήσης σε έναν διαφορετικό αριθμό ή διακοπής της κλήσης."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"λήψη μηνυμάτων κειμένου (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Επιτρέπει στην εφαρμογή τη λήψη και την επεξεργασία μηνυμάτων SMS. Αυτό σημαίνει ότι η εφαρμογή θα μπορούσε να παρακολουθήσει ή να διαγράψει τα μηνύματα που αποστέλλονται στη συσκευή σας χωρίς αυτά να εμφανιστούν σε εσάς."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"λήψη μηνυμάτων κειμένου (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Επιτρέπει στην εφαρμογή την ανάκτηση του περιεχομένου του ενεργού παραθύρου. Τυχόν κακόβουλες εφαρμογές ενδέχεται να ανακτήσουν ολόκληρο το περιεχόμενο του παραθύρου και να εξετάσουν ολόκληρο το κείμενό του εκτός από τους κωδικούς πρόσβασης."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"προσωρινή ενεργοποίηση προσβασιμότητας"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Επιτρέπει σε μια εφαρμογή να ενεργοποιήσει την προσβασιμότητα στη συσκευή. Οι κακόβουλες εφαρμογές ενδέχεται να ενεργοποιήσουν την προσβασιμότητα χωρίς τη συγκατάθεση των χρηστών."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ανάκτηση πληροφοριών παραθύρων"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Επιτρέπει σε μια εφαρμογή να ανακτήσει πληροφορίες σχετικά με τα παράθυρα από το διαχειριστή παραθύρων. Οι κακόβουλες εφαρμογές ενδέχεται να ανακτήσουν πληροφορίες που προορίζονται για την εσωτερική χρήση του συστήματος."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"ανάκτηση διακριτικού παραθύρου"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Επιτρέπει σε μια εφαρμογή να ανακτήσει το διακριτικό παραθύρου. Οι κακόβουλες εφαρμογές μπορούν να εκτελούν μη εξουσιοδοτημένη αλληλεπίδραση με το παράθυρο της εφαρμογής, σε απομίμηση του συστήματος."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"ανάκτηση στατιστικών πλαισίου"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Επιτρέπει σε μια εφαρμογή να συλλέγει στατιστικά στοιχεία πλαισίου. Οι κακόβουλες εφαρμογές μπορούν να παρατηρούν τα στατιστικά στοιχεία πλαισίου των παραθύρων από άλλες εφαρμογές."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"φιλτράρισμα συμβάντων"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Επιτρέπει σε μια εφαρμογή να καταγράφει ένα φίλτρο εισαγωγής, το οποίο φιλτράρει τη ροή όλων των συμβάντων χρήστη πριν την αποστολή τους. Μια κακόβουλη εφαρμογή μπορεί να ελέγξει τη διεπαφή του συστήματος χωρίς την παρέμβαση του χρήστη."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"μεγέθυνση οθόνης"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Επιτρέπει στην εφαρμογή να μεγεθύνει το περιεχόμενο της οθόνης. Οι κακόβουλες εφαρμογές ενδέχεται να τροποποιούν το περιεχόμενο της οθόνης με τέτοιο τρόπο ώστε η εφαρμογή να μην μπορεί να χρησιμοποιηθεί."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"μερικός τερματισμός λειτουργίας"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Θέτει το πρόγραμμα διαχείρισης δραστηριοτήτων σε κατάσταση τερματισμού λειτουργιών. Δεν εκτελεί πλήρη τερματισμό λειτουργιών."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"αποτροπή εναλλαγών εφαρμογών"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Επιτρέπει στην εφαρμογή την εκπομπή ειδοποίησης σχετικά με τη λήψη μηνύματος SMS. Τυχόν κακόβουλες εφαρμογές ενδέχεται να χρησιμοποιήσουν αυτήν τη δυνατότητα για τη δημιουργία πλαστών εισερχόμενων μηνυμάτων SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"αποστολή εκπομπής που έχει ληφθεί με WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Επιτρέπει στην εφαρμογή τη μετάδοση μιας ειδοποίησης ότι έχει ληφθεί κάποιο μήνυμα WAP PUSH. Τυχόν κακόβουλες εφαρμογές ενδέχεται να χρησιμοποιήσουν αυτήν τη δυνατότητα για τη λήψη πλαστών μηνυμάτων MMS ή την εν αγνοία του χρήστη αντικατάσταση του περιεχομένου οποιασδήποτε ιστοσελίδας με κακόβουλες παραλλαγές."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"αποστολή μετάδοσης κατάταξης δικτύων"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Επιτρέπει στην εφαρμογή να μεταδίδει μια ειδοποίηση ότι απαιτείται κατάταξη των δικτύων. Δεν απαιτείται ποτέ για τις συνήθεις εφαρμογές."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"περιορισμός αριθμού εκτελούμενων διαδικασιών"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Επιτρέπει στην εφαρμογή τον έλεγχο του μέγιστου αριθμού διαδικασιών που θα εκτελούνται. Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"αναγκαστικός τερματισμός εφαρμογών στο παρασκήνιο"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας Vpn. Δεν απαιτείται για κανονικές εφαρμογές."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"δέσμευση σε ταπετσαρία"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας ταπετσαρίας. Δεν απαιτείται για συνήθεις εφαρμογές."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"σύνδεση σε παράγοντα φωνητικής αλληλεπίδρασης"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Επιτρέπει στον κάτοχο τη σύνδεση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας φωνητικής αλληλεπίδρασης. Δεν απαιτείται για κανονικές εφαρμογές."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"μεταφορά σε μια απομακρυσμένη οθόνη"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας απομακρυσμένης οθόνης. Δεν απαιτείται ποτέ για κανονικές εφαρμογές."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"δέσμευση σε υπηρεσία γραφικών στοιχείων"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας γραφικών στοιχείων. Δεν απαιτείται για κανονικές εφαρμογές."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"σύνδεση σε μια υπηρεσία παρόχου δρομολογητή"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Δίνει στον κάτοχο τη δυνατότητα σύνδεσης με οποιονδήποτε εγγεγραμμένο πάροχο δρομολογητή. Δεν απαιτείται ποτέ για κανονικές εφαρμογές."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"επικοινωνία με έναν διαχειριστή συσκευής"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Επιτρέπει στον κάτοχο την αποστολή στόχων σε έναν διαχειριστή συσκευής. Δεν είναι απαραίτητο για συνήθεις εφαρμογές."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"σύνδεση σε μία είσοδο τηλεόρασης"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Επιτρέπει στον κάτοχο τη σύνδεση στη διεπαφή ανώτερου επιπέδου μιας εισόδου τηλεόρασης. Δεν απαιτείται ποτέ για τις συνηθισμένες εφαρμογές."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"προσθήκη ή κατάργηση ενός διαχειριστή συσκευής"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Επιτρέπει στον κάτοχο να προσθέτει ή να καταργεί ενεργούς διαχειριστές συσκευών. Δεν θα πρέπει να ζητείται ποτέ για κανονικές εφαρμογές."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"αλλαγή προσανατολισμού οθόνης"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Επιτρέπει στην εφαρμογή τη χρήση οποιουδήποτε εγκατεστημένου αποκωδικοποιητή μέσων για αναπαραγωγή."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"διαχείριση αξιόπιστων διαπιστευτηρίων"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Επιτρέπει στην εφαρμογή την εγκατάσταση και την απεγκατάσταση πιστοποιητικών CA ως αξιόπιστων διαπιστευτηρίων."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"εκτέλεση εφαρμογής κατά τη λειτουργία αδράνειας"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Αυτή η άδεια επιτρέπει στο σύστημα Android να εκτελεί την εφαρμογή στο παρασκήνιο όταν δεν χρησιμοποιείται η συσκευή."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"ανάγνωση/εγγραφή σε πόρους που ανήκουν στο διαγνωστικό"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Επιτρέπει στην εφαρμογή την ανάγνωση και την εγγραφή σε οποιονδήποτε πόρο που ανήκει στην ομάδα διαγνωστικού (π.χ. αρχεία στον κατάλογο /dev). Αυτό ενδέχεται να επηρεάσει την σταθερότητα και την ασφάλεια του συστήματος. Θα πρέπει να χρησιμοποιείται ΜΟΝΟ για διαγνωστικά υλικού από τον κατασκευαστή ή τον χειριστή."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"ενεργοποίηση ή απενεργοποίηση στοιχείων εφαρμογής"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Επιτρέπει στην εφαρμογή την ανάγνωση προσωπικών πληροφοριών προφίλ οι οποίες είναι αποθηκευμένες στη συσκευή σας, όπως το όνομα και τα στοιχεία επικοινωνίας σας. Αυτό σημαίνει ότι η εφαρμογή μπορεί να σας αναγνωρίσει και να στείλει τις πληροφορίες του προφίλ σας σε άλλους."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"τροποποίηση κάρτας επαφής"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Επιτρέπει στην εφαρμογή την αλλαγή ή την προσθήκη προσωπικών πληροφοριών προφίλ οι οποίες είναι αποθηκευμένες στη συσκευή σας, όπως το όνομα και τα στοιχεία επικοινωνίας σας. Αυτό σημαίνει ότι η εφαρμογή μπορεί να σας αναγνωρίσει και να στείλει τις πληροφορίες του προφίλ σας σε άλλα άτομα."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"αισθητήρες λειτουργιών (π.χ. καρδιακό ρυθμό)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Επιτρέπει στην εφαρμογή την πρόσβαση στα δεδομένα από τους αισθητήρες που χρησιμοποιείτε για να παρακολουθείτε τις εσωτερικές λειτουργίες σας, όπως τον καρδιακό ρυθμό."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"διαβάστε τη ροή σας κοινωνικών δικτύων"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Επιτρέπει στην εφαρμογή την πρόσβαση και το συγχρονισμό κοινωνικών ενημερώσεων από εσάς και τους φίλους σας. Θα πρέπει να είστε προσεκτικοί όταν μοιράζεστε πληροφορίες -- αυτό δίνει τη δυνατότητα στην εφαρμογή να διαβάζει τις επικοινωνίες ανάμεσα σε εσάς και τους φίλους σας σε κοινωνικά δίκτυα, ανεξάρτητα από το επίπεδο εμπιστευτικότητας. Σημείωση: αυτή η άδεια ίσως να μην μπορεί να εφαρμοστεί σε όλα τα κοινωνικά δίκτυα."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"γράψτε στη ροή σας κοινωνικών δικτύων"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Επιτρέπει σε μια εφαρμογή να χρησιμοποιεί λειτουργίες SurfaceFlinger χαμηλού επιπέδου."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"ανάγνωση προσωρινής μνήμης πλαισίου"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Επιτρέπει στην εφαρμογή την ανάγνωση του περιεχομένου της προσωρινής μνήμης πλαισίου."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"πρόσβαση στο InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Επιτρέπει σε μια εφαρμογή να χρησιμοποιεί λειτουργίες InputFlinger χαμηλού επιπέδου."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"διαμόρφωση οθονών Wifi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Επιτρέπει τη διαμόρφωση της εφαρμογής και τη σύνδεσης σε οθόνες Wifi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"έλεγχος οθονών Wifi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Επιτρέπει στην εφαρμογή την τροποποίηση καθολικών ρυθμίσεων ήχου, όπως η ένταση και ποιο ηχείο χρησιμοποιείται για έξοδο."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"εγγραφή ήχου"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Επιτρέπει στην εφαρμογή την εγγραφή ήχου με το μικρόφωνο. Αυτή η άδεια δίνει τη δυνατότητα στην εφαρμογή να εγγράφει ήχο ανά πάσα στιγμή χωρίς την έγκρισή σας."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"επικοινωνία με κάρτα sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Επιτρέπει στην εφαρμογή την αποστολή εντολών στην κάρτα SIM. Αυτό είναι εξαιρετικά επικίνδυνο."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"λήψη φωτογραφιών και βίντεο"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Επιτρέπει στην εφαρμογή τη λήψη φωτογραφιών και βίντεο με τη φωτογραφική μηχανή. Αυτή η άδεια δίνει τη δυνατότητα στην εφαρμογή να χρησιμοποιεί τη φωτογραφική μηχανή ανά πάσα στιγμή χωρίς την έγκρισή σας."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"απενεργοποίηση ένδειξης LED μετάδοσης όταν χρησιμοποιείται η φωτογραφική μηχανή"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Επιτρέπει στην εφαρμογή να ελέγχει τις λειτουργίες τηλεφώνου της συσκευής. Μια εφαρμογή η οποία διαθέτει αυτήν την άδεια μπορεί να κάνει εναλλαγή μεταξύ δικτύων, να ενεργοποιεί και να απενεργοποιεί το ραδιόφωνο του τηλεφώνου και άλλα, χωρίς να ειδοποιείστε."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ανάγνωση κατάστασης και ταυτότητας τηλεφώνου"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Επιτρέπει στην εφαρμογή την πρόσβαση στις λειτουργίες τηλεφώνου της συσκευής. Αυτή η άδεια δίνει τη δυνατότητα στην εφαρμογή να καθορίζει τον αριθμό τηλεφώνου και τα αναγνωριστικά συσκευών, εάν μια κλήση είναι ενεργή, καθώς και τον απομακρυσμένο αριθμό που συνδέεται από μια κλήση."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"ανάγνωση ακριβούς κατάστασης τηλεφώνου"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Επιτρέπει στην εφαρμογή να αποκτήσει πρόσβαση στην ακριβή κατάσταση του τηλεφώνου. Αυτή η άδεια επιτρέπει στην εφαρμογή να καθορίσει την πραγματική κατάσταση της κλήσης, εάν η κλήση είναι ενεργή ή πραγματοποιείται στο παρασκήνιο, αποτυχίες κλήσεων, ακριβή δεδομένα κατάστασης σύνδεσης και αποτυχίες σύνδεσης δεδομένων."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"παρεμπόδιση μετάβασης του tablet σε κατάσταση αδράνειας"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"παρεμπόδιση μετάβασης του τηλεφώνου σε κατάσταση αδράνειας"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Επιτρέπει στην εφαρμογή την παρεμπόδιση της μετάβασης του tablet σε κατάσταση αδράνειας."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Αλλαγή κατάστασης WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Επιτρέπει στην εφαρμογή τη σύνδεση στο tablet και την αποσύνδεση από αυτό, από δίκτυα WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Επιτρέπει στην εφαρμογή τη σύνδεση στο τηλέφωνο και την αποσύνδεση από αυτό, από δίκτυα WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"κατάταξη δικτύων"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Επιτρέπει στην εφαρμογή να κατατάσσει τα δίκτυα και να επιλέγει τα προτιμώμενα δίκτυα του tablet."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Επιτρέπει στην εφαρμογή να κατατάσσει τα δίκτυα και να επιλέγει τα προτιμώμενα δίκτυα του τηλεφώνου."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"σύζευξη με συσκευές Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Επιτρέπει στην εφαρμογή να προβάλλει τη διαμόρφωση του Bluetooth στο tablet, καθώς και να πραγματοποιεί και να αποδέχεται συνδέσεις με συζευγμένες συσκευές."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Επιτρέπει στην εφαρμογή να προβάλλει τη διαμόρφωση του Bluetooth στο τηλέφωνο, καθώς και να πραγματοποιεί και να αποδέχεται συνδέσεις με συζευγμένες συσκευές."</string>
@@ -642,7 +695,7 @@
     <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"ανάγνωση του περιεχομένου της κάρτας SD"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Επιτρέπει στην εφαρμογή την ανάγνωση του περιεχομένου του αποθηκευτικού σας χώρου USB."</string>
     <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Επιτρέπει στην εφαρμογή την ανάγνωση του περιεχομένου της κάρτας SD."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"τροπ. ή διαγρ. του USB"</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"τροποποίηση ή διαγραφή του USB"</string>
     <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"τροποποίηση ή διαγραφή των περιεχομένων της κάρτας SD"</string>
     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Επιτρέπει στην εφαρμογή την εγγραφή στον αποθηκευτικό χώρο USB."</string>
     <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Επιτρέπει στην εφαρμογή την εγγραφή στην κάρτα SD."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Επιτρέπει στην εφαρμογή να ανακτά, να εξετάζει και να απαλείφει ειδοποιήσεις, συμπεριλαμβανομένων εκείνων που δημοσιεύονται από άλλες εφαρμογές."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"δέσμευση σε υπηρεσία ακρόασης ειδοποίησης"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Επιτρέπει στον κάτοχο τη δέσμευση στη διεπαφή ανωτάτου επιπέδου μιας υπηρεσίας ακρόασης ειδοποιήσεων. Δεν απαιτείται σε κανονικές εφαρμογές."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"σύνδεση σε μια υπηρεσία παρόχου συνθηκών"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Επιτρέπει στον κάτοχο τη σύνδεση στη διεπαφή ανωτάτου επιπέδου ενός παρόχου συνθηκών. Δεν απαιτείται για κανονικές εφαρμογές."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"κλήση της εφαρμογής διαμόρφωσης που παρέχεται από την εταιρεία κινητής τηλεφωνίας"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Επιτρέπει στον κάτοχο την κλήση της εφαρμογής διαμόρφωσης που παρέχεται από την εταιρεία κινητής τηλεφωνίας. Δεν απαιτείται για κανονικές εφαρμογές."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"λήψη παρατηρήσεων σχετικά με την κατάσταση δικτύου"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Επιτρέπει σε μια εφαρμογή να λαμβάνει παρατηρήσεις σχετικά με την κατάσταση δικτύου. Δεν θα πρέπει να απαιτείται ποτέ για κανονικές εφαρμογές."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"αλλαγή βαθμονόμησης της συσκευής εισόδου"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Επιτρέπει στην εφαρμογή να τροποποιεί τις παραμέτρους βαθμονόμησης της οθόνης αφής. Δεν απαιτείται για τις κανονικές εφαρμογές."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"πρόσβαση σε πιστοποιητικά DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Επιτρέπει σε μια εφαρμογή να παρέχει και να χρησιμοποιεί πιστοποιητικά DRM. Δεν θα χρειαστεί ποτέ για κανονικές εφαρμογές."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Ορισμός κανόνων κωδικού πρόσβασης"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Έλεγχος του μεγέθους και των χαρακτήρων που επιτρέπονται στους κωδικούς πρόσβασης ξεκλειδώματος οθόνης."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Παρακολούθηση προσπαθειών ξεκλειδώματος οθόνης"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Αρχική σελίδα"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Εργασία"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Άλλο"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Δεν βρέθηκε καμία εφαρμογή για την προβολή αυτής της επαφής."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Πληκτρολογήστε τον κωδικό αριθμό PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Πληκτρολογήστε τον κωδικό PUK και τον νέο κωδικό PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Κωδικός PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Επιτρέπει σε μια εφαρμογή να αποκτήσει πρόσβαση στον ασφαλή αποθηκευτικό χώρο με κλείδωμα."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Έλεγχος εμφάνισης και απόκρυψης κλειδώματος πληκτρολογίου"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Επιτρέπει σε μια εφαρμογή τον έλεγχο του κλειδώματος πληκτρολογίου."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Αντίληψη αλλαγών καταστάσεων εμπιστοσύνης."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Επιτρέπει σε μια εφαρμογή να αντιλαμβάνεται τις αλλαγές στην κατάσταση εμπιστοσύνης."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Σύνδεση σε υπηρεσία trust agent"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Επιτρέπει σε μια εφαρμογή να συνδεθεί σε μια υπηρεσία trust agents."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Αλληλεπίδραση με το σύστημα ενημέρωσης και ανάκτησης"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Επιτρέπει σε μια εφαρμογή να αλληλεπιδρά με το σύστημα ανάκτησης και ενημερώσεων συστήματος."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Αγγίξτε δύο φορές για έλεγχο εστίασης"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Δεν ήταν δυνατή η προσθήκη του γραφικού στοιχείου."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Μετάβαση"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Ταπετσαρία"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Αλλαγή ταπετσαρίας"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Υπηρεσία ακρόασης ειδοποίησης"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Πάροχος συνθηκών"</string>
     <string name="vpn_title" msgid="19615213552042827">"Το VPN ενεργοποιήθηκε"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Το VPN ενεργοποιήθηκε από την εφαρμογή <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Αγγίξτε για τη διαχείριση του δικτύου."</string>
@@ -1338,7 +1405,7 @@
     <string name="vpn_lockdown_error" msgid="6009249814034708175">"Σφάλμα πάντα ενεργοποιημένου VPN"</string>
     <string name="vpn_lockdown_config" msgid="6415899150671537970">"Αγγίξτε για διαμόρφωση"</string>
     <string name="upload_file" msgid="2897957172366730416">"Επιλογή αρχείου"</string>
-    <string name="no_file_chosen" msgid="6363648562170759465">"Δεν έχει επιλεγεί αρχείο"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"Δεν επιλέχθηκε κανένα αρχείο."</string>
     <string name="reset" msgid="2448168080964209908">"Επαναφορά"</string>
     <string name="submit" msgid="1602335572089911941">"Υποβολή"</string>
     <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Η λειτουργία αυτοκινήτου είναι ενεργοποιημένη"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Επιλέξτε κάποια εφαρμογή"</string>
-    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Κοινή χρήση με"</string>
-    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Κοινή χρήση με <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Δεν ήταν δυνατή η εκκίνηση του <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Κοινοποίηση με"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Κοινοποίηση με <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Στοιχείο χειρισμού με δυνατότητα ολίσθησης. Αγγίξτε και πατήστε παρατεταμένα."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Κύλιση προς τα επάνω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Κύλιση προς τα κάτω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Κύλιση προς τα αριστερά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Κύλιση προς τα δεξιά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Ξεκλείδωμα"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Φωτογραφική μηχανή"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Αθόρυβο"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Ενεργοποίηση ήχου"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Αναζήτηση"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Σύρετε για ξεκλείδωμα."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Συνδέστε ακουστικά για να ακούσετε τα πλήκτρα του κωδικού πρόσβασης να εκφωνούνται."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Τελεία."</string>
@@ -1468,7 +1527,7 @@
     <string name="sha1_fingerprint" msgid="7930330235269404581">"Αποτύπωμα SHA-1"</string>
     <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Εμφάνιση όλων"</string>
     <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Επιλογή δραστηριότητας"</string>
-    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Κοινή χρήση με"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Κοινοποίηση με"</string>
     <string name="list_delimeter" msgid="3975117572185494152">", "</string>
     <string name="sending" msgid="3245653681008218030">"Γίνεται αποστολή…"</string>
     <string name="launchBrowserDefault" msgid="2057951947297614725">"Εκκίνηση προγράμματος περιήγησης;"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Σύστημα"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Ήχος Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Ασύρματη οθόνη"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Τέλος"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Έξοδος μέσων"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Σύνδεση με τη συσκευή"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Μετάδοση οθόνης σε συσκευή"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Αναζήτηση συσκευών…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Ρυθμίσεις"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Αποσύνδεση"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Σάρωση…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Σύνδεση…"</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Διαθέσιμη"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Επικάλυψη #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", ασφαλές"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Έχει συνδεθεί ασύρματη οθόνη"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Αυτή η οθόνη εμφανίζεται σε μια άλλη συσκευή"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Μετάδοση οθόνης"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Γίενται σύνδεση με το <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Μετάδοση οθόνης"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Συνδέθηκε με το <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Αποσύνδεση"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Κλήσεις επείγουσας ανάγκης"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Ξεχάσατε το μοτίβο"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ξεκλείδωμα κάρτας SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Εσφαλμένος κωδικός PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Πληκτρολογήστε έναν αριθμό PIN που να αποτελείται από 4 έως 8 αριθμούς."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Ο κωδικός PUK θα πρέπει να περιέχει τουλάχιστον 8 αριθμούς."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Ο κωδικός PUK θα πρέπει να αποτελείται από 8 αριθμούς."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Εισαγάγετε ξανά τον κωδικό PUK. Οι επαναλαμβανόμενες προσπάθειες θα απενεργοποιήσουν οριστικά την κάρτα SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Δεν υπάρχει αντιστοιχία των κωδικών PIN"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Πάρα πολλές προσπάθειες μοτίβου"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Δοκιμάστε ξανά αργότερα"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Σάρωση προς τα κάτω για έξοδο από πλήρη οθόνη"</string>
+    <string name="done_label" msgid="2093726099505892398">"Τέλος"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Κυκλικό ρυθμιστικό ωρών"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Κυκλικό ρυθμιστικό λεπτών"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Επιλογή ωρών"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Επιλογή λεπτών"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Πλέγμα ημερών του μήνα"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Λίστα ετών"</string>
+    <string name="select_day" msgid="7774759604701773332">"Επιλογή μήνα και ημέρας"</string>
+    <string name="select_year" msgid="7952052866994196170">"Επιλογή έτους"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Επιλέχτηκε το στοιχείο <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> διαγράφηκε"</string>
 </resources>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index ca8509a..51a85e3 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Untitled&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Type a PUK that is 8 numbers or longer."</string>
     <string name="needPuk" msgid="919668385956251611">"Your SIM card is PUK-locked. Type the PUK code to unlock it."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Type PUK2 to unblock SIM card."</string>
+    <string name="enablePin" msgid="209412020907207950">"Unsuccessful, enable SIM/RUIM Lock."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"You have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM is locked."</item>
+    <item quantity="other" msgid="7530597808358774740">"You have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM is locked."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Incoming Caller ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sync"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Too many <xliff:g id="CONTENT_TYPE">%s</xliff:g> deletions."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tablet storage is full. Delete some files to free space."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Watch storage is full. Delete some files to free up space."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Phone storage is full. Delete some files to free space."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Network may be monitored"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"By an unknown third party"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Ringer on"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Shutting down…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Your tablet will shut down."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Your watch will shut down."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Your phone will shut down."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Do you want to shut down?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reboot to safe mode"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Aeroplane mode"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Aeroplane mode is ON"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Aeroplane mode is OFF"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Settings"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android System"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"uninstall shortcuts"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Allows the application to remove Home screen shortcuts without user intervention."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"reroute outgoing calls"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Allows the app to process outgoing calls and change the number to be dialled. This permission allows the app to monitor, redirect or prevent outgoing calls."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Allows the app to see the number being dialled during an outgoing call with the option to redirect the call to a different number or abort the call altogether."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"receive text messages (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Allows the app to receive and process SMS messages. This means that the app could monitor or delete messages sent to your device without showing them to you."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"receive text messages (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Allows the app to retrieve the content of the active window. Malicious apps may retrieve the entire window content and examine all its text except passwords."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"temporary enable accessibility"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Allows an application to temporarily enable accessibility on the device. Malicious apps may enable accessibility without user consent."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"retrieve window info"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Allows an application to retrieve information about the windows from the window manager. Malicious apps may retrieve information that is intended for internal system usage."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"retrieve window token"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Allows an application to retrieve the window token. Malicious apps may perform unauthorised interaction with the application window impersonating the system."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"retrieve frame statistics"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Allows an application to collect frame statistics. Malicious apps may observe the frame statistics of windows from other apps."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filter events"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Allows an application to register an input filter which filters the stream of all user events before they are dispatched. Malicious app may control the system UI without user intervention."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"magnify display"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Allows an application to magnify the content of a display. Malicious apps may transform the display content in a way that renders the device unusable."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"partial shutdown"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Puts the activity manager into a shut-down state. Does not perform a complete shut down."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"prevent app switches"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Allows the app to broadcast a notification that an SMS message has been received. Malicious apps may use this to forge incoming SMS messages."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"send WAP-PUSH-received broadcast"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Allows the app to broadcast a notification that a WAP PUSH message has been received. Malicious apps may use this to forge MMS message receipt or to silently replace the content of any web page with malicious variants."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"send score networks broadcast"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Allows the app to broadcast a notification that networks need to be scored. Never needed for normal apps."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limit number of running processes"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Allows the app to control the maximum number of processes that will run. Never needed for normal apps."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"force background apps to close"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Allows the holder to bind to the top-level interface of a Vpn service. Should never be needed for normal apps."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind to wallpaper"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Allows the holder to bind to the top-level interface of wallpaper. Should never be needed for normal applications."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bind to a voice interactor"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Allows the holder to bind to the top-level interface of a voice interaction service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind to a remote display"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Allows the holder to bind to the top-level interface of a remote display. Should never be needed for normal apps."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind to a widget service"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Allows the holder to bind to the top-level interface of a widget service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"bind to a route provider service"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Allows the holder to bind to any registered route providers. Should never be needed for normal apps."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interact with device admin"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Allows the holder to send intents to a device administrator. Should never be needed for normal apps."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"bind to a TV input"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Allows the holder to bind to the top-level interface of a TV input. Should never be needed for normal apps."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"add or remove a device admin"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Allows the holder to add or remove active device administrators. Should never be needed for normal apps."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"change screen orientation"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Allows the app to use any installed media decoder to decode for playback."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"manage trusted credentials"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Allows the app to install and uninstall CA certificates as trusted credentials."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"run application during idle time"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"This permission allows the Android system to run the application in the background while the device is not in use."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"read/write to resources owned by diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Allows the app to read and write to any resource owned by the diag group; for example, files in /dev. This could potentially affect system stability and security. This should ONLY be used for hardware-specific diagnostics by the manufacturer or operator."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"enable or disable app components"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Allows the app to read personal profile information stored on your device, such as your name and contact information. This means that the app can identify you and may send your profile information to others."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modify your own contact card"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Allows the app to change or add to personal profile information stored on your device, such as your name and contact information. This means that the app can identify you and may send your profile information to others."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"body sensors (like heart rate monitors)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Allows the app to access data from sensors that you use to measure what’s happening inside your body, such as heart rate."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"read your social stream"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Allows the app to access and sync social updates from you and your friends. Be careful when sharing information - this allows the app to read communications between you and your friends on social networks, regardless of confidentiality. Note: this permission may not be enforced on all social networks."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"write to your social stream"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Allows the app to use SurfaceFlinger low-level features."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"read frame buffer"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Allows the app to read the content of the frame buffer."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"access InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Allows the app to use InputFlinger low-level features."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configure Wi-Fi displays"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Allows the app to configure and connect to Wi-Fi displays."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"control Wi-Fi displays"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Allows the app to modify global audio settings such as volume and which speaker is used for output."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"record audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Allows the app to record audio with the microphone. This permission allows the app to record audio at any time without your confirmation."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM communication"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Allows the app to send commands to the SIM. This is very dangerous."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"take pictures and videos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Allows the app to take pictures and videos with the camera. This permission allows the app to use the camera at any time without your confirmation."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"disable transmit indicator LED when camera is in use"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Allows the app to control the phone features of the device. An app with this permission can switch networks, turn the phone radio on and off and the like without ever notifying you."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"read phone status and identity"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active and the remote number connected by a call."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"read precise phone states"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Allows the app to access the precise phone states. This permission allows the app to determine the real call status, whether a call is active or in the background, call fails, precise data connection status and data connection fails."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"prevent tablet from sleeping"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"prevent phone from sleeping"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Allows the app to prevent the tablet from going to sleep."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"change WiMAX state"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Allows the app to connect the tablet to and disconnect the tablet from WiMAX networks."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Allows the app to connect the phone to and disconnect the phone from WiMAX networks."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"score networks"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Allows the app to rank networks and influence which networks the tablet should prefer."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Allows the app to rank networks and influence which networks the phone should prefer."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"pair with Bluetooth devices"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Allows the app to view the configuration of Bluetooth on the tablet and to make and accept connections with paired devices."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Allows the app to view the configuration of the Bluetooth on the phone and to make and accept connections with paired devices."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bind to a notification listener service"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bind to a condition provider service"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invoke the carrier-provided configuration app"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"listen for observations on network conditions"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Allows an application to listen for observations on network conditions. Should never be needed for normal apps."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"change input device calibration"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"access DRM certificates"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Allows an application to provision and use DRM certficates. Should never be needed for normal apps."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Set password rules"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Control the length and the characters allowed in screen-unlock passwords."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Monitor screen-unlock attempts"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Home"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Work"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Other"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"No application found to view this contact."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Type PIN code"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Type PUK and new PIN code"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Allows an application to access keyguard secure storage."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Control displaying and hiding keyguard"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Allows an application to control keyguard."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Listen to trust state changes."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Allows an application to listen for changes in trust state."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bind to a trust agent service"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Allows an application to bind to a trust agent service."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interact with update and recovery system"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Allows an application to interact with the recovery system and system updates."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Touch twice for zoom control"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Couldn\'t add widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Go"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Change wallpaper"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Condition provider"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN activated"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN is activated by <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Touch to manage the network."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Choose an app"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Couldn\'t launch <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Share with"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Sliding handle. Touch &amp; hold."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Slide down for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Slide right for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Unlock"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silent"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Sound on"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Swipe to unlock."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Plug in a headset to hear password keys spoken."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Done"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Media output"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Connect to device"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Cast screen to device"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Searching for devices…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Settings"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Disconnect"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Scanning..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Connecting..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Available"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", secure"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Wireless display is connected"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"This screen is showing on another device"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Casting screen"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Connecting to <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Casting screen"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Connected to <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Disconnect"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency call"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Forgot Pattern"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Incorrect PIN code."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK code should be 8 numbers or more."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK code should be 8 numbers."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN codes do not match"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Too many pattern attempts"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Try again later"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Swipe down from the top to exit full screen."</string>
+    <string name="done_label" msgid="2093726099505892398">"Finished"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Hours circular slider"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Minutes circular slider"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Select hours"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Select minutes"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Month grid of days"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Year list"</string>
+    <string name="select_day" msgid="7774759604701773332">"Select month and day"</string>
+    <string name="select_year" msgid="7952052866994196170">"Select year"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> selected"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> deleted"</string>
 </resources>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index ca8509a..51a85e3 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Untitled&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Type a PUK that is 8 numbers or longer."</string>
     <string name="needPuk" msgid="919668385956251611">"Your SIM card is PUK-locked. Type the PUK code to unlock it."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Type PUK2 to unblock SIM card."</string>
+    <string name="enablePin" msgid="209412020907207950">"Unsuccessful, enable SIM/RUIM Lock."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"You have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM is locked."</item>
+    <item quantity="other" msgid="7530597808358774740">"You have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM is locked."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Incoming Caller ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sync"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Too many <xliff:g id="CONTENT_TYPE">%s</xliff:g> deletions."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tablet storage is full. Delete some files to free space."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Watch storage is full. Delete some files to free up space."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Phone storage is full. Delete some files to free space."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Network may be monitored"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"By an unknown third party"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Ringer on"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Shutting down…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Your tablet will shut down."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Your watch will shut down."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Your phone will shut down."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Do you want to shut down?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reboot to safe mode"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Aeroplane mode"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Aeroplane mode is ON"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Aeroplane mode is OFF"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Settings"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android System"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"uninstall shortcuts"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Allows the application to remove Home screen shortcuts without user intervention."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"reroute outgoing calls"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Allows the app to process outgoing calls and change the number to be dialled. This permission allows the app to monitor, redirect or prevent outgoing calls."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Allows the app to see the number being dialled during an outgoing call with the option to redirect the call to a different number or abort the call altogether."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"receive text messages (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Allows the app to receive and process SMS messages. This means that the app could monitor or delete messages sent to your device without showing them to you."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"receive text messages (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Allows the app to retrieve the content of the active window. Malicious apps may retrieve the entire window content and examine all its text except passwords."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"temporary enable accessibility"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Allows an application to temporarily enable accessibility on the device. Malicious apps may enable accessibility without user consent."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"retrieve window info"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Allows an application to retrieve information about the windows from the window manager. Malicious apps may retrieve information that is intended for internal system usage."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"retrieve window token"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Allows an application to retrieve the window token. Malicious apps may perform unauthorised interaction with the application window impersonating the system."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"retrieve frame statistics"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Allows an application to collect frame statistics. Malicious apps may observe the frame statistics of windows from other apps."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filter events"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Allows an application to register an input filter which filters the stream of all user events before they are dispatched. Malicious app may control the system UI without user intervention."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"magnify display"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Allows an application to magnify the content of a display. Malicious apps may transform the display content in a way that renders the device unusable."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"partial shutdown"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Puts the activity manager into a shut-down state. Does not perform a complete shut down."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"prevent app switches"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Allows the app to broadcast a notification that an SMS message has been received. Malicious apps may use this to forge incoming SMS messages."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"send WAP-PUSH-received broadcast"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Allows the app to broadcast a notification that a WAP PUSH message has been received. Malicious apps may use this to forge MMS message receipt or to silently replace the content of any web page with malicious variants."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"send score networks broadcast"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Allows the app to broadcast a notification that networks need to be scored. Never needed for normal apps."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limit number of running processes"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Allows the app to control the maximum number of processes that will run. Never needed for normal apps."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"force background apps to close"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Allows the holder to bind to the top-level interface of a Vpn service. Should never be needed for normal apps."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bind to wallpaper"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Allows the holder to bind to the top-level interface of wallpaper. Should never be needed for normal applications."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bind to a voice interactor"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Allows the holder to bind to the top-level interface of a voice interaction service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind to a remote display"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Allows the holder to bind to the top-level interface of a remote display. Should never be needed for normal apps."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind to a widget service"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Allows the holder to bind to the top-level interface of a widget service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"bind to a route provider service"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Allows the holder to bind to any registered route providers. Should never be needed for normal apps."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interact with device admin"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Allows the holder to send intents to a device administrator. Should never be needed for normal apps."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"bind to a TV input"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Allows the holder to bind to the top-level interface of a TV input. Should never be needed for normal apps."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"add or remove a device admin"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Allows the holder to add or remove active device administrators. Should never be needed for normal apps."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"change screen orientation"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Allows the app to use any installed media decoder to decode for playback."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"manage trusted credentials"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Allows the app to install and uninstall CA certificates as trusted credentials."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"run application during idle time"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"This permission allows the Android system to run the application in the background while the device is not in use."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"read/write to resources owned by diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Allows the app to read and write to any resource owned by the diag group; for example, files in /dev. This could potentially affect system stability and security. This should ONLY be used for hardware-specific diagnostics by the manufacturer or operator."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"enable or disable app components"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Allows the app to read personal profile information stored on your device, such as your name and contact information. This means that the app can identify you and may send your profile information to others."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modify your own contact card"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Allows the app to change or add to personal profile information stored on your device, such as your name and contact information. This means that the app can identify you and may send your profile information to others."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"body sensors (like heart rate monitors)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Allows the app to access data from sensors that you use to measure what’s happening inside your body, such as heart rate."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"read your social stream"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Allows the app to access and sync social updates from you and your friends. Be careful when sharing information - this allows the app to read communications between you and your friends on social networks, regardless of confidentiality. Note: this permission may not be enforced on all social networks."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"write to your social stream"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Allows the app to use SurfaceFlinger low-level features."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"read frame buffer"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Allows the app to read the content of the frame buffer."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"access InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Allows the app to use InputFlinger low-level features."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configure Wi-Fi displays"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Allows the app to configure and connect to Wi-Fi displays."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"control Wi-Fi displays"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Allows the app to modify global audio settings such as volume and which speaker is used for output."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"record audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Allows the app to record audio with the microphone. This permission allows the app to record audio at any time without your confirmation."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM communication"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Allows the app to send commands to the SIM. This is very dangerous."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"take pictures and videos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Allows the app to take pictures and videos with the camera. This permission allows the app to use the camera at any time without your confirmation."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"disable transmit indicator LED when camera is in use"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Allows the app to control the phone features of the device. An app with this permission can switch networks, turn the phone radio on and off and the like without ever notifying you."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"read phone status and identity"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Allows the app to access the phone features of the device. This permission allows the app to determine the phone number and device IDs, whether a call is active and the remote number connected by a call."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"read precise phone states"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Allows the app to access the precise phone states. This permission allows the app to determine the real call status, whether a call is active or in the background, call fails, precise data connection status and data connection fails."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"prevent tablet from sleeping"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"prevent phone from sleeping"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Allows the app to prevent the tablet from going to sleep."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"change WiMAX state"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Allows the app to connect the tablet to and disconnect the tablet from WiMAX networks."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Allows the app to connect the phone to and disconnect the phone from WiMAX networks."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"score networks"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Allows the app to rank networks and influence which networks the tablet should prefer."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Allows the app to rank networks and influence which networks the phone should prefer."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"pair with Bluetooth devices"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Allows the app to view the configuration of Bluetooth on the tablet and to make and accept connections with paired devices."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Allows the app to view the configuration of the Bluetooth on the phone and to make and accept connections with paired devices."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Allows the app to retrieve, examine, and clear notifications, including those posted by other apps."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bind to a notification listener service"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bind to a condition provider service"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invoke the carrier-provided configuration app"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"listen for observations on network conditions"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Allows an application to listen for observations on network conditions. Should never be needed for normal apps."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"change input device calibration"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"access DRM certificates"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Allows an application to provision and use DRM certficates. Should never be needed for normal apps."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Set password rules"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Control the length and the characters allowed in screen-unlock passwords."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Monitor screen-unlock attempts"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Home"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Work"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Other"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"No application found to view this contact."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Type PIN code"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Type PUK and new PIN code"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Allows an application to access keyguard secure storage."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Control displaying and hiding keyguard"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Allows an application to control keyguard."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Listen to trust state changes."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Allows an application to listen for changes in trust state."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bind to a trust agent service"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Allows an application to bind to a trust agent service."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interact with update and recovery system"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Allows an application to interact with the recovery system and system updates."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Touch twice for zoom control"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Couldn\'t add widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Go"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Change wallpaper"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Condition provider"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN activated"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN is activated by <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Touch to manage the network."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Choose an app"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Couldn\'t launch <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Share with"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Share with <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Sliding handle. Touch &amp; hold."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Slide down for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Slide right for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Unlock"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silent"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Sound on"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Swipe to unlock."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Plug in a headset to hear password keys spoken."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Done"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Media output"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Connect to device"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Cast screen to device"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Searching for devices…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Settings"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Disconnect"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Scanning..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Connecting..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Available"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", secure"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Wireless display is connected"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"This screen is showing on another device"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Casting screen"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Connecting to <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Casting screen"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Connected to <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Disconnect"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency call"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Forgot Pattern"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Incorrect PIN code."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK code should be 8 numbers or more."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK code should be 8 numbers."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN codes do not match"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Too many pattern attempts"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Try again later"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Swipe down from the top to exit full screen."</string>
+    <string name="done_label" msgid="2093726099505892398">"Finished"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Hours circular slider"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Minutes circular slider"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Select hours"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Select minutes"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Month grid of days"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Year list"</string>
+    <string name="select_day" msgid="7774759604701773332">"Select month and day"</string>
+    <string name="select_year" msgid="7952052866994196170">"Select year"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> selected"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> deleted"</string>
 </resources>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index eb731a3..2a4f7e9 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Sin título&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Ingresa un código PUK de ocho números o más."</string>
     <string name="needPuk" msgid="919668385956251611">"Tu tarjeta SIM está bloqueada con PUK. Escribe el código PUK para desbloquearla."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Escribir PUK2 para desbloquear la tarjeta SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Error; habilita el bloqueo de SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Te queda <xliff:g id="NUMBER">%d</xliff:g> intento antes de que se bloquee la tarjeta SIM."</item>
+    <item quantity="other" msgid="7530597808358774740">"Te quedan <xliff:g id="NUMBER">%d</xliff:g> intentos antes de que se bloquee la tarjeta SIM."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Identificador de llamadas entrantes"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronización"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Demasiadas eliminaciones de <xliff:g id="CONTENT_TYPE">%s</xliff:g>"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Se ha agotado el espacio de almacenamiento de la tablet. Elimina algunos archivos para liberar espacio."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"El almacenamiento del reloj está completo. Elimina algunos archivos para liberar espacio."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Se ha agotado el espacio de almacenamiento del dispositivo. Elimina algunos archivos para liberar espacio."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Es posible que la red esté supervisada"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Por un tercero desconocido"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Timbre activado"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Apagando…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tu tablet se apagará."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Se apagará el reloj."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Tu dispositivo se apagará."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"¿Deseas apagarlo?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reiniciar en modo seguro"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avión"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"El modo avión está Activado"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"El modo avión está Desactivado"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Configuración"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"desinstalar accesos directos"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permite que la aplicación elimine accesos directos de la pantalla principal sin que el usuario intervenga."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"redireccionar llamadas salientes"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permite que la aplicación procese las llamadas salientes y cambie el número que se va a marcar. La aplicación puede utilizar este permiso para controlar o desviar llamadas salientes o para impedir que se realicen."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permite que la aplicación vea el número marcado al realizar una llamada, con la opción de redirigir esta llamada a un número distinto o cancelarla completamente."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"recibir mensajes de texto (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permite que la aplicación reciba y procese mensajes SMS, lo que significa que podría controlar o eliminar mensajes enviados al dispositivo sin mostrártelos."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"recibir mensajes de texto (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que la aplicación recupere el contenido de la ventana activa. Las aplicaciones maliciosas pueden recuperar el contenido completo de la ventana y examinar todo el texto, excepto las contraseñas."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Activación temporal de la accesibilidad"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite a una aplicación activar temporalmente la accesibilidad en el dispositivo. Las aplicaciones maliciosas pueden activar la accesibilidad sin el consentimiento del usuario."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recuperar información de ventanas"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que una aplicación recupere la información del administrador de ventanas relacionada con estas. Las aplicaciones maliciosas pueden recuperar información destinada al uso interno del sistema."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"recuperar token de ventana"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permite que una aplicación recupere el token de ventana. Las aplicaciones maliciosas pueden interaccionar sin autorización con la ventana de la aplicación al hacerse pasar por el sistema."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"recuperar estadísticas de marcos"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permite que una aplicación recopile estadísticas de marcos. Las aplicaciones maliciosas pueden observar estas estadísticas de ventanas desde otras aplicaciones."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que una aplicación registre un filtro de entrada que filtre la transmisión de todos los eventos del usuario antes de ser enviados. Las aplicaciones maliciosas pueden controlar la IU del sistema sin la intervención del usuario."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ampliar la pantalla"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permite que una aplicación amplíe el contenido de una pantalla. Las aplicaciones malintencionadas pueden transformar el contenido de la pantalla de manera que el dispositivo quede inutilizable."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"cierre parcial"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Pone al administrador de la actividad en estado de cierre. No realiza un cierre completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir conmutadores de aplicación"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permite que la aplicación transmita una notificación acerca de la recepción de un mensaje SMS. Las aplicaciones maliciosas pueden utilizar este permiso para falsificar mensajes SMS entrantes."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"enviar emisiones WAP-PUSH-recibido"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permite que la aplicación transmita una notificación acerca de la recepción de un mensaje WAP PUSH. Las aplicaciones maliciosas pueden utilizar este permiso para falsificar la recepción de mensajes MMS o para reemplazar sin aviso el contenido de cualquier página web con variantes maliciosas."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"enviar transmisión de puntuación de redes"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Permite que la aplicación transmita una notificación que las redes necesitan para recibir una puntuación. Las aplicaciones normales no necesitan nunca este permiso."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitar la cantidad de procesos en ejecución"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permite que la aplicación controle la cantidad máxima de procesos que se ejecutarán. Las aplicaciones normales no deben utilizar este permiso."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forzar el cierre de aplicaciones de fondo"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite al titular vincularse a la interfaz de nivel superior de un servicio de VPN. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a un fondo de pantalla"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite al propietario vincularse a la interfaz de nivel superior de un fondo de pantalla. Las aplicaciones normales no deben utilizar este permiso."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"vincular con un servicio de interacción por voz"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permite vincular con la interfaz de nivel superior de un servicio de interacción por voz. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"vincular a una pantalla remota"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite al propietario vincularse a la interfaz de nivel superior de una pantalla remota. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincular a un servicio de widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite al propietario vincularse a la interfaz de nivel superior del servicio de widget. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"vincular con un servicio de proveedor de rutas"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permite al propietario vincular con proveedores de rutas registrados. No debe ser necesario para las aplicaciones normales."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactuar con un administrador de dispositivos"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite enviar intentos a un administrador de dispositivos. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"vincular a una entrada de TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permite al propietario vincularse a la interfaz de nivel superior de una entrada de TV. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"agregar o eliminar un administrador de dispositivos"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite al propietario agregar o eliminar administradores de dispositivos activos. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"cambiar la orientación de la pantalla"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permite que la aplicación use cualquier decodificador de archivos multimedia instalado para la reproducción."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"administrar credenciales de confianza"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permite que la aplicación instale y desinstale certificados de CA como credenciales de confianza."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"ejecutar la aplicación durante el tiempo de inactividad"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Con este permiso, el sistema Android puede ejecutar la aplicación en segundo plano mientras el dispositivo no está en uso."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"leer y escribir a recursos dentro del grupo de diagnóstico"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permite que la aplicación lea y escriba en cualquier recurso propiedad del grupo de diagnóstico como, por ejemplo, archivos in/dev. Este permiso podría afectar la seguridad y estabilidad del sistema. SOLO se debe utilizar para diagnósticos específicos de hardware realizados por el fabricante o el operador."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"activar o desactivar componentes de la aplicación"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permite que la aplicación consulte la información del perfil personal almacenada en el dispositivo, como el nombre o la información de contacto, lo que significa que la aplicación puede identificar al usuario y enviar la información de su perfil a otros usuarios."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modif. tarjeta contacto propia"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permite que la aplicación modifique la información del perfil personal almacenada en el dispositivo, como el nombre o la información de contacto, o que agregue contenido a esa información. Esto significa que puede identificarte y enviar la información de tu perfil a otros usuarios."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"sensores corporales (frec. card)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permite que la aplicación acceda a datos de sensores que utilizas para medir lo que sucede en tu cuerpo, como la frecuencia cardíaca."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"Lectura de tu muro social"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permite que la aplicación acceda a las actualizaciones de tus redes sociales y las de tus amigos, y que las sincronice. Ten cuidado al compartir información, ya que la aplicación puede utilizar este permiso para leer las conversaciones que tengas con tus amigos en las redes sociales sin tener en cuenta si son confidenciales. Nota: Este permiso no se puede utilizar en todas las redes sociales."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Escritura en tu muro social"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que la aplicación utilice funciones de SurfaceFlinger de bajo nivel."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leer el búfer de tramas"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite que la aplicación lea el contenido del búfer de tramas."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"acceder a InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permite que la aplicación utilice funciones de InputFlinger de bajo nivel."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurar pantallas Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permite que la aplicación configure y se conecte a pantallas Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controlar pantallas Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que la aplicación modifique la configuración de audio global, por ejemplo, el volumen y el altavoz de salida."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"grabar audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que la aplicación grabe audio con el micrófono. La aplicación puede utilizar este permiso para grabar audio en cualquier momento sin tener tu confirmación."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"Comunicación con tarjeta SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que la aplicación envíe comandos a la tarjeta SIM. Usar este permiso es peligroso."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"tomar fotografías y grabar videos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permite que la aplicación saque fotos o grabe videos con la cámara. Este permiso autoriza a la aplicación a utilizar la cámara en cualquier momento sin tu confirmación."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Inhabilitar el indicador LED de transmisión mientras se utiliza la cámara"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Una aplicación con este permiso puede cambiar redes, encender y apagar la radio del teléfono y tareas similares sin siquiera notificártelo."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"leer la identidad y el estado del dispositivo"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. La aplicación puede utilizar este permiso para descubrir identificadores de dispositivos y números de teléfono, para saber si una llamada está activa y para conocer el número remoto con el que se ha establecido conexión mediante una llamada."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"leer estados precisos del teléfono"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permite que la aplicación acceda a los estados precisos del teléfono y determine el estado real de la llamada, si hay una llamada activa o en segundo plano, si se produjeron fallos en la llamada, el estado preciso de la conexión de datos y si hubo fallos relacionados con la conexión de datos."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"evitar que el tablet entre en estado de inactividad"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"evitar que el dispositivo entre en estado de inactividad"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permite que la aplicación evite que la tablet entre en estado de inactividad."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Cambiar el estado de WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permite que la aplicación conecte la tablet a una red WiMAX y que la desconecte de ella."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permite que la aplicación conecte el dispositivo a una red WiMAX y que lo desconecte de ella."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"puntuar redes"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Permite que la aplicación clasifique redes e influya en las redes que la tablet debería preferir."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Permite que la aplicación clasifique redes e influya en las redes que el teléfono debería preferir."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"vincular con dispositivos Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permite que la aplicación vea la configuración de Bluetooth de la tablet y que cree y acepte conexiones con los dispositivos sincronizados."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permite que la aplicación vea la configuración de Bluetooth del dispositivo y que cree y acepte conexiones con los dispositivos sincronizados."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que la aplicación recupere, examine y elimine notificaciones, incluidas aquellas publicadas por otras aplicaciones."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"Vincular a un servicio de agente de escucha de notificaciones"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite al propietario vincularse a la interfaz de nivel superior de un servicio de agente de escucha de notificaciones. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"vincular con un servicio de proveedor de condiciones"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permite vincular con la interfaz de nivel superior de un servicio de proveedor de condiciones. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ejecutar la aplicación de configuración proporcionada por el proveedor"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite al propietario ejecutar la aplicación de configuración proporcionada por el proveedor. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Detectar cambios en el estado de la red"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permite que una aplicación detecte cambios en el estado de la red. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"cambiar la calibración del dispositivo de entrada"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permite que la aplicación modifique los parámetros de calibración de la pantalla táctil. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"Acceder a certificados DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permite que una aplicación proporcione y utilice certificados DRM. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Establecer reglas de contraseña"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Controlar la longitud y los caracteres permitidos en las contraseñas para desbloquear la pantalla"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Supervisa los intentos para desbloquear la pantalla"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Casa"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Trabajo"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Otro"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"No se encontró ninguna aplicación para ver este contacto."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ingresa el código PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Escribe el código PUK y un nuevo código PIN."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite que una aplicación acceda al almacenamiento seguro de bloqueos."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Controlar cuándo se muestra y se oculta el bloqueo"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que una aplicación controle los bloqueos."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Detectar cambios en estado de confianza"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que una aplicación detecte cambios en el estado de confianza."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Vincular con un servicio de agente de confianza"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite que una aplicación se vincule con un servicio de agente de confianza."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interaccionar con el sistema de recuperación y las actualizaciones"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permite que una aplicación interaccione con el sistema de recuperación y las actualizaciones del sistema."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toca dos veces para acceder al control de zoom."</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"No se pudo agregar el widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Papel tapiz"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Cambiar fondo de pantalla"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Agente de escucha de notificaciones"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Proveedor de condiciones"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN activada"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN está activado por <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Toca para administrar la red."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayúscula"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ingresar"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Elige una aplicación."</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"No se pudo abrir <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Compartir con"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Mantén presionado el controlador deslizante."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Desliza el dedo hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Desliza el dedo hacia la derecha para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Desliza el dedo para desbloquear."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Conecta un auricular para escuchar las contraseñas."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Pantalla inalámbrica"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Listo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Conectar al dispositivo"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Transmitir pantalla a dispositivo"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Buscando dispositivos…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Configuración"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Desconectar"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Examinando..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Conectando..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponible"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposición #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> ppp"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", segura"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Se conectó la pantalla inalámbrica"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Esta pantalla se muestra en otro dispositivo."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Transmitiendo pantalla"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Estableciendo conexión con <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Transmitiendo pantalla"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Se estableció conexión con <xliff:g id="NAME">%1$s</xliff:g>."</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Desconectar"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Realizar llamada de emergencia"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"¿Olvidaste el patrón?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escribe un PIN que tenga de cuatro a ocho números."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El código PUK debe tener ocho números como mínimo."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"El código PUK debe tener 8 números."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Vuelve a ingresar el código PUK correcto. Si ingresas un código incorrecto varias veces, se inhabilitará la tarjeta SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Los códigos PIN no coinciden."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos de ingresar el patrón"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Intentar en <xliff:g id="COUNT">%d</xliff:g> s"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Vuelve a intentar más tarde."</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Salir de pantalla completa: deslizar abajo"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Desliza el dedo hacia abajo para salir de la pantalla completa."</string>
+    <string name="done_label" msgid="2093726099505892398">"Listo"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Control deslizante circular de horas"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Control deslizante circular de minutos"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Seleccionar horas"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Seleccionar minutos"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Cuadrícula mensual de días"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Lista de años"</string>
+    <string name="select_day" msgid="7774759604701773332">"Seleccionar mes y día"</string>
+    <string name="select_year" msgid="7952052866994196170">"Seleccionar año"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> seleccionado"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> borrado"</string>
 </resources>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index a89f35a..2e0d68b 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Sin título&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"..."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Escribe un código PUK de ocho caracteres o más."</string>
     <string name="needPuk" msgid="919668385956251611">"La tarjeta SIM está bloqueada con el código PUK. Introduce el código PUK para desbloquearla."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Introduce el código PUK2 para desbloquear la tarjeta SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Error, habilitar bloqueo de SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Te queda <xliff:g id="NUMBER">%d</xliff:g> intento para bloquear la tarjeta SIM."</item>
+    <item quantity="other" msgid="7530597808358774740">"Quedan <xliff:g id="NUMBER">%d</xliff:g> intentos para bloquear la tarjeta SIM."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID de emisor de llamada entrante"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronización"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Demasiadas eliminaciones de <xliff:g id="CONTENT_TYPE">%s</xliff:g>"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Se ha agotado el espacio de almacenamiento del tablet. Elimina algunos archivos para liberar espacio."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"El almacenamiento del reloj está lleno. Elimina algunos archivos para liberar espacio."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Se ha agotado el espacio de almacenamiento del teléfono. Elimina algunos archivos para liberar espacio."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Es posible que la red esté supervisada"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Por un tercero desconocido"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Timbre activado"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Apagando..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"El tablet se apagará."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"El reloj se apagará."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"El teléfono se apagará."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"¿Seguro que quieres apagar el teléfono?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reiniciar en modo seguro"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avión"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avión activado. Desactivar"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avión desactivado. Activar"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Ajustes"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"&gt; 999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"desinstalar accesos directos"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permite que la aplicación elimine accesos directos de la pantalla de inicio sin la intervención del usuario."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"redireccionar llamadas salientes"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permite que la aplicación procese las llamadas salientes y cambie el número que se va a marcar. La aplicación puede utilizar este permiso para controlar, desviar o impedir que se realicen llamadas salientes."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permite que la aplicación vea el número que se marca al realizar una llamada con la opción de redirigir la llamada a otro número o cancelar la llamada."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"recibir mensajes de texto (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permite que la aplicación reciba y procese mensajes MMS, lo que significa que podría utilizar este permiso para controlar o eliminar mensajes enviados al dispositivo sin mostrárselos al usuario."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"recibir mensajes de texto (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que la aplicación recupere el contenido de la ventana activa. Las aplicaciones malintencionadas pueden recuperar todo el contenido de la ventana y analizar todo el texto de la misma, excepto las contraseñas."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"habilitar la accesibilidad de forma temporal"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite que una aplicación habilite la accesibilidad en el dispositivo de forma temporal. Las aplicaciones maliciosas pueden habilitar la accesibilidad sin el consentimiento del usuario."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recuperar información de ventanas"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que una aplicación recupere información sobre las ventanas del administrador de ventanas. Las aplicaciones malintencionadas pueden recuperar información destinada al uso interno del sistema."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"recuperar token de ventana"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permite que una aplicación recupere el token de ventana. Las aplicaciones maliciosas pueden interactuar sin autorización con la ventana de la aplicación suplantando la identidad del sistema."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"recuperar estadísticas de enmarcación"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permite que una aplicación recopile estadísticas de enmarcación. Las aplicaciones maliciosas pueden observar estas estadísticas de ventanas desde otras aplicaciones."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que una aplicación registre un filtro de entrada que filtre el flujo de los eventos del usuario antes de que se envíe. Las aplicaciones malintencionadas pueden controlar la interfaz del sistema sin la intervención del usuario."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ampliar pantalla"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permite que una aplicación amplíe el contenido de una pantalla. Las aplicaciones maliciosas pueden transformar el contenido de la pantalla para que el dispositivo no se pueda utilizar."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"cierre parcial"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Pone el administrador de actividades en estado de cierre. No realiza un cierre completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar cambios de aplicación"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permite que la aplicación emita una notificación cuando se haya recibido un mensaje SMS. Las aplicaciones malintencionadas pueden usar este permiso para falsificar mensajes SMS entrantes."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"enviar emisión recibida mediante mensaje WAP PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permite que la aplicación envíe una notificación cuando se haya recibido un mensaje WAP PUSH. Las aplicaciones malintencionadas pueden usar este permiso para falsificar la recepción de un mensaje MMS o para reemplazar sin aviso el contenido de cualquier página web con variantes malintencionadas."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"enviar notificaciones sobre la puntuación de las redes"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Permite que la aplicación emita una notificación que la red necesita para recibir una puntuación. Las aplicaciones normales no necesitan nunca este permiso."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitar el número de procesos en ejecución"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permite que la aplicación controle el número máximo de procesos que se ejecutarán. No es necesario nunca para las aplicaciones normales."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forzar el cierre de aplicaciones en segundo plano"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite enlazar con la interfaz de nivel superior de un servicio de VPN. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"enlazar con un fondo de pantalla"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite enlazar con la interfaz de nivel superior de un fondo de pantalla. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"enlazar con un servicio de interacción de voz"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permite enlazar con la interfaz de nivel superior de un servicio de interacción de voz. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"enlazar a una pantalla remota"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite enlazar con la interfaz de nivel superior de una pantalla remota. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"enlazar con un servicio de widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite enlazar con la interfaz de nivel superior de un servicio de widget. Las aplicaciones normales no deberían necesitar este permiso."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"enlazar con un servicio de proveedor de rutas"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permite enlazar con proveedores de rutas registrados. No debe ser necesario para las aplicaciones normales."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactuar con el administrador de un dispositivo"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite que se envíen intentos a un administrador de dispositivos. Las aplicaciones normales nunca deberían necesitar este permiso."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"enlazar a una entrada de TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permite enlazar con la interfaz de nivel superior de una entrada de TV. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"añadir o eliminar un administrador de dispositivos"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite añadir o eliminar administradores de dispositivos activos. No debe ser necesario para aplicaciones normales."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"cambiar orientación de la pantalla"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permite que la aplicación use cualquier decodificador de archivos multimedia instalado para la reproducción."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"administrar credenciales de confianza"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permite que la aplicación instale y desinstale certificados de CA como credenciales de confianza."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"ejecutar la aplicación durante el tiempo de inactividad"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Esto permite que el sistema Android ejecute la aplicación en segundo plano mientras el dispositivo no se utiliza."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"leer/escribir en los recursos propiedad del grupo de diagnóstico"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permite que la aplicación consulte y escriba en cualquier recurso del grupo de diagnóstico como, por ejemplo, archivos en /dev. Este permiso podría afectar a la seguridad y estabilidad del sistema. SOLO se debe usar para diagnósticos específicos de hardware realizados por el fabricante o el operador."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"habilitar o inhabilitar componentes de la aplicación"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permite que la aplicación consulte la información del perfil personal almacenada en el dispositivo (como el nombre o la información de contacto), lo que significa que la aplicación puede identificar al usuario y enviar la información de su perfil a otros usuarios."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modificar tu propia tarjeta de contacto"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permite que la aplicación modifique la información del perfil personal almacenada en el dispositivo (como el nombre o la información de contacto) o que añada contenido a esa información, lo que significa que puede identificar al usuario y enviar la información de su perfil a otros usuarios."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"sens. corp. (mon. frec. card.)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permite que la aplicación acceda a datos de sensores que utilizas para medir lo que sucede en tu cuerpo, como la frecuencia cardíaca."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"consulta tu actividad social"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permite que la aplicación acceda a novedades de redes sociales tuyas y de tus amigos y las sincronice. Ten cuidado al compartir información, ya que la aplicación puede utilizar este permiso para leer conversaciones privadas con tus amigos en las redes sociales sin tener en cuenta si son confidenciales. Nota: este permiso no se puede utilizar en todas las redes sociales."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escribir en tu actividad social"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que la aplicación use funciones de SurfaceFlinger de nivel inferior."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leer memoria de almacenamiento intermedio"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite que la aplicación lea el contenido de la memoria de almacenamiento intermedio."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"acceder a InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permite que la aplicación utilice funciones de bajo nivel de SurfaceFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurar pantallas Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permite que la aplicación configure pantallas Wi-Fi y se conecte a ellas."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controlar pantallas Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que la aplicación modifique la configuración de audio global (por ejemplo, el volumen y el altavoz de salida)."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"grabar sonido"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que la aplicación grabe audio con el micrófono. La aplicación puede utilizar este permiso para grabar audio en cualquier momento sin tener la confirmación del usuario."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicación con la tarjeta SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que la aplicación envíe comandos a la tarjeta SIM. Este permiso es muy peligroso."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"realizar fotografías y vídeos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permite que la aplicación haga fotos o grabe vídeos con la cámara. Este permiso autoriza a la aplicación a utilizar la cámara en cualquier momento sin tu confirmación."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"inhabilitar el indicador LED de transmisión mientras se utiliza la cámara"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permite que la aplicación controle las funciones de teléfono del dispositivo. Las aplicaciones que tengan este permiso pueden cambiar de red, desactivar la señal móvil, etc., sin necesidad de informar al usuario."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"consultar la identidad y el estado del teléfono"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que la aplicación acceda a las funciones de teléfono del dispositivo. La aplicación puede utilizar este permiso para descubrir identificadores de dispositivos y números de teléfono, para saber si una llamada está activa y para conocer el número remoto con el que se ha establecido conexión mediante una llamada."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"leer estados precisos del teléfono"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permite que la aplicación acceda a estados precisos del teléfono y que pueda determinar el estado real de la llamada, si una llamada está activa o en segundo plano, si se ha producido un error en la llamada, el estado de conexión de datos preciso y si se ha producido un error en la conexión de datos."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"impedir que el tablet entre en modo de suspensión"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"impedir que el teléfono entre en modo de suspensión"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permite que la aplicación impida que el tablet entre en modo de suspensión."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Cambiar estado de WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permite que la aplicación conecte el tablet a redes WiMAX y lo desconecte de ellas."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permite que la aplicación conecte el teléfono a redes WiMAX y lo desconecte de ellas."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"puntuar redes"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Permite que la aplicación clasifique redes e influya en las redes que el tablet debe preferir."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Permite que la aplicación clasifique una red e influya en las redes que el teléfono debe preferir."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"vincular con dispositivos Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permite que la aplicación acceda a la configuración de Bluetooth del tablet y que establezca y acepte conexiones con los dispositivos sincronizados."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permite que la aplicación acceda a la configuración de Bluetooth del teléfono y que establezca y acepte conexiones con los dispositivos sincronizados."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que la aplicación recupere, examine y borre notificaciones, incluidas las que han publicado otras aplicaciones."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"enlazar con un servicio de detector de notificaciones"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite enlazar con la interfaz de nivel superior de un servicio de detector de notificaciones. No debe ser necesario para las aplicaciones normales."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"enlazar con un servicio de proveedor de condiciones"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permite enlazar con la interfaz de nivel superior de un servicio de proveedor de condiciones. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ejecutar la aplicación de configuración proporcionada por el operador"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite ejecutar la aplicación de configuración proporcionada por el operador. No debe ser necesario para aplicaciones normales."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"detectar cambios en el estado de la red"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permite que una aplicación detecte cambios en el estado de la red. No debe ser necesario para aplicaciones normales."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"cambiar la calibración del dispositivo de entrada"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permite que la aplicación modifique los parámetros de calibración de la pantalla táctil. No debe ser necesario para las aplicaciones normales."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"acceder a certificados DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permite que una aplicación proporcione y utilice certificados DRM. Las aplicaciones normales no deberían necesitar este permiso."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Establecimiento de reglas de contraseña"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Controlar la longitud y los caracteres permitidos en las contraseñas de bloqueo de pantalla"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Control de intentos de bloqueo de pantalla"</string>
@@ -783,7 +842,7 @@
     <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo!"</string>
     <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
     <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Conversaciones"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
     <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
     <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
     <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Casa"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Trabajo"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Otro"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"No se ha encontrado ninguna aplicación para ver este contacto."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduce el código PIN."</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduce el código PUK y un nuevo código PIN."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite que una aplicación acceda al almacenamiento seguro de bloqueos."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Controlar cuándo se muestra y se oculta el bloqueo"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que una aplicación controle los bloqueos."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Detectar cambios en el estado de confianza."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que una aplicación detecte cambios en el estado de confianza."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Enlazar con un servicio de agente de confianza"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite a una aplicación enlazar con un servicio de agente de confianza."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interactuar con el sistema de recuperación y las actualizaciones"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permite que una aplicación interactúe con el sistema de recuperación y las actualizaciones del sistema."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toca dos veces para acceder al control de zoom."</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"No se ha podido añadir el widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fondo de pantalla"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Cambiar fondo de pantalla"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Detector de notificaciones"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Proveedor de condiciones"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN activada"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN activada por <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Toca para administrar la red."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Mayús"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Intro"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Seleccionar una aplicación"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"No se ha podido abrir <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Compartir con"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartir con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Mantén pulsado el icono de desbloqueo y deslízalo."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Desliza el dedo hacia abajo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Desliza el dedo hacia la derecha para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Cámara"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silencio"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Sonido activado"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Desliza el dedo para desbloquear."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Conecta un auricular para escuchar las contraseñas."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Pantalla inalámbrica"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fin"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Salida multimedia"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Conectar a dispositivo"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Enviar pantalla a dispositivo"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Buscando dispositivos…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Ajustes"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Desconectar"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Analizando..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Conectando..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponible"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposición #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", seguro"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Pantalla inalámbrica conectada"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Esta pantalla se muestra en otro dispositivo."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Enviando pantalla"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Conectando a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Enviando pantalla"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Conectado a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Desconectar"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Llamada de emergencia"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"¿Has olvidado el patrón?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduce un código PIN con una longitud comprendida entre cuatro y ocho dígitos."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El código PUK debe tener ocho números como mínimo."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"El código PUK debe tener 8 números."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Vuelve a introducir el código PUK correcto. Si introduces un código incorrecto varias veces, se inhabilitará la tarjeta SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Los códigos PIN no coinciden."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiados intentos incorrectos de crear el patrón"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Volver a intentar más tarde"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Desliza el dedo hacia abajo para salir de la pantalla completa"</string>
+    <string name="done_label" msgid="2093726099505892398">"Listo"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Control deslizante circular de horas"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Control deslizante circular de minutos"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Seleccionar horas"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Seleccionar minutos"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Cuadrícula mensual de días"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Lista de años"</string>
+    <string name="select_day" msgid="7774759604701773332">"Seleccionar mes y día"</string>
+    <string name="select_year" msgid="7952052866994196170">"Seleccionar año"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> seleccionado"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> eliminado"</string>
 </resources>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index 742d3da..32abeb8 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Pealkirjata&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Sisestage 8- või enamanumbriline PUK-kood."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM-kaart on PUK-lukustatud. Avamiseks sisestage PUK-kood."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Sisestage SIM-kaardi blokeeringu tühistamiseks PUK2-kood."</string>
+    <string name="enablePin" msgid="209412020907207950">"Ebaõnnestus, SIM-i/RUIM-i lukustuse lubamine."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Teil on enne SIM-i lukustumist jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katse."</item>
+    <item quantity="other" msgid="7530597808358774740">"Teil on enne SIM-i lukustumist jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katset."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Sissetuleva kõne helistaja ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sünkroonimine"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Liiga palju üksuse <xliff:g id="CONTENT_TYPE">%s</xliff:g> kustutusi."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tahvelarvuti mäluruum on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Kella talletusruum on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonimälu on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Võrku võidakse jälgida"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Tundmatu kolmas osapool:"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Helin on sees"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Väljalülitamine ..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Teie tahvelarvuti lülitub välja."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Teie kell lülitub välja."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Teie telefon lülitub välja."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Kas soovite välja lülitada?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Ohutus režiimis taaskäivitamine"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lennurežiim"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Lennurežiim on SEES"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Lennurežiim on VÄLJAS"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Seaded"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Turvarežiim"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-süsteem"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"otseteede desinstallimine"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Lubab rakendusel eemaldada avaekraani otseteid ilma kasutaja sekkumiseta."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"marsruutige väljuvad kõned uuesti"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Võimaldab rakendusel töödelda väljuvaid kõnesid ja muuta valitavat numbrit. Luba võimaldab rakendusel jälgida, ümber suunata või takistada väljuvaid kõnesid."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Lubab rakendusel näha, mis number valitakse väljahelistamisel, ning laseb suunata kõne teisele numbrile või selle üldse katkestada."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"võtke vastu tekstisõnumeid (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Võimaldab rakendusel vastu võtta ja töödelda SMS-sõnumeid. See tähendab, et rakendus võib jälgida või kustutada teie seadmele saadetud sõnumeid neid teile näitamata."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"võtke vastu tekstisõnumeid (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Võimaldab rakendusel kätte saada aktiivse akna sisu. Pahatahtlikud rakendused võivad hankida kogu akna sisu ja uurida kogu selle teksti, välja arvatud paroole."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ajutine hõlbustuse lubamine"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Lubab rakendusel ajutiselt lubada seadmes hõlbustuse. Pahatahtlikud rakendused võivad lubada hõlbustuse kasutaja nõusolekuta."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hangi akna teave"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Võimaldab rakendusel hankida teavet aknahalduri akende kohta. Pahatahtlikud rakendused võivad hankida teavet, mis on mõeldud süsteemisiseseks kasutamiseks."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"aknaloa toomine"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Lubab rakendusel tuua aknaloa. Pahatahtlikud rakendused võivad jäljendada süsteemi ja suhelda rakenduse aknaga ilma loata."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"raamistatistika toomine"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Lubab rakendusel koguda raamistatistikat. Pahatahtlikud rakendused võivad jälgida teiste rakenduste akende raamistatistikat."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtreeri sündmused"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Võimaldab rakendusel registreerida sisestusfiltri, mis filtreerib kõigi kasutaja sündmuste voo, enne kui need ära saadetakse. Pahatahtlik rakendus võib süsteemi kasutajaliidest juhtida ilma kasutaja sekkumiseta."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"kuva suurendamine"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Lubab rakendusel ekraani sisu suurendada. Pahatahtlikud rakendused võivad muundada kuva sisu nii, et seade muutub ebastabiilseks."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"osaline väljalülitamine"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Lülitab tegevushalduri väljalülitusolekusse. Ei lülita lõplikult välja."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"väldi rakenduste ümberlülitamist"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Võimaldab rakendusel edastada teatise SMS-sõnumi vastuvõtmise kohta. Pahatahtlikud rakendused võivad seda kasutada sissetulevate SMS-sõnumite võltsimiseks."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"saada WAP-PUSH-vastuvõetud saateid"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Võimaldab rakendusel edastada teatise WAP PUSH-sõnumi vastuvõtmise kohta. Pahatahtlikud rakendused võivad seda kasutada MMS-sõnumite vastuvõtmise võltsimiseks või mis tahes veebilehe sisu salaja asendamiseks pahatahtlikuga."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"võrkude levi hinnangu saatmine"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Lubab rakendusel levitada märguannet, et võrke tuleb hinnata. Seda ei ole kunagi vaja tavapäraste rakenduste puhul."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"piira töötavate protsesside arvu"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Võimaldab rakendusel juhtida töötavate protsesside maksimaalset arvu. Tavarakenduste puhul pole seda vaja."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"sundige taustarakendused sulguma"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Võimaldab omanikul siduda VPN-teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"taustapildiga sidumine"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lubab omanikul siduda taustapildi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"seo häälinteraktsiooniga"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Lubab omanikul siduda häälinteraktsiooni teenuse ülataseme liidesega. Pole kunagi vajalik tavaliste rakenduste puhul."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"kaugekraaniga sidumine"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Lubab omanikul siduda rakenduse kaugekraani ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vidinateenusega sidumine"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lubab omanikul siduda vidina teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"sidumine marsruudi pakkumisteenusega"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Lubab õiguste omajal luua seosed kõikide registreeritud marsruutide pakkujatega. Pole kunagi vajalik tavaliste rakenduste korral."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"seadme administraatoriga suhtlemine"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Võimaldab omanikul saata kavatsusi seadme administraatorile. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"sidumine TV-sisendiga"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Lubab omanikul siduda TV-sisendi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"seadme administraatori lisamine või eemaldamine"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Võimaldab omanikul lisada või eemaldada aktiivseid seadme administraatoreid. Tavarakenduste puhul ei tohiks see kunagi vajalik olla."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"muuda ekraani paigutust"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Võimaldab rakendusel taasesituseks kasutada mis tahes installitud meediumidekooderit."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"usaldusväärsete mandaatide haldamine"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Lubab rakendusel installida ja desinstallida usaldusväärsete mandaatidena CA-sertifikaate."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"rakenduse käitamine tegevusetul ajal"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"See luba võimaldab Android-süsteemil käitada rakendust taustal siis, kui seadet ei kasutata."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"loe/kirjuta valija allikaid"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Võimaldab rakendusel lugeda valimisrühma mis tahes ressurssi ja sellesse kirjutada (näiteks kaustas /dev olevad failid). See võib mõjutada süsteemi stabiilsust ja turvet. Seda tohiks kasutada tootja või operaator AINULT riistvaraspetsiifiliseks diagnostikaks."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"Rakenduse komponentide lubamine või keelamine"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Võimaldab rakendusel lugeda seadmesse salvestatud isiklikku profiiliteavet, näiteks teie nime ja kontaktteavet. See tähendab, et rakendus saab teid tuvastada ja saata teie profiiliteavet teistele."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"muutke oma kontaktikaarti"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Võimaldab rakendusel muuta või lisada seadmesse salvestatud isiklikku profiiliteavet, näiteks teie nime ja kontaktteavet. See tähendab, et rakendus saab teid tuvastada ja saata teie profiiliteavet teistele."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"kehaandurid (nt pulsilugeja)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Lubab rakendusel saada juurdepääsu selliste andurite andmetele, mida kasutate kehas toimuva (nt pulsi) mõõtmiseks."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"Sotsiaalvoo lugemine"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Annab rakendusele juurdepääsu ja võimaldab sünkroonida teie ja teie sõprade sotsiaalseid värskendusi. Olge teabe jagamisel ettevaatlik – see võimaldab rakendusel lugeda teie suhtlusi sõpradega suhtlusvõrgustikes konfidentsiaalsusest hoolimata. Märkus: see luba ei pruugi jõustuda kõigis suhtlusvõrgustikes."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Sotsiaalvoogu kirjutamine"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Võimaldab rakendusel kasutada SurfaceFlingeri madalatasemelisi funktsioone."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"loe kaadripuhvrit"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Võimaldab rakendusel kaadripuhvri sisu lugeda."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"juurdepääs InputFlingerile"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Lubab rakendusel kasutada InputFlingeri madalatasemelisi funktsioone."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"WiFi-ekraanide seadistamine"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Lubab rakendusel seadistada WiFi-ekraane ja nendega ühendus luua."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"WiFi-ekraanide juhtimine"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Võimaldab rakendusel muuta üldiseid heliseadeid, näiteks helitugevust ja seda, millist kõlarit kasutatakse väljundiks."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"salvesta heli"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Võimaldab rakendusel salvestada mikrofoniga heli. See luba võimaldab rakendusel salvestada heli igal ajal ilma teie kinnituseta."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"side SIM-kaardiga"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Lubab rakendusel saata käske SIM-kaardile. See on väga ohtlik."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"piltide ja videote tegemine"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Võimaldab rakendusel teha kaameraga pilte ja videoid. See luba võimaldab rakendusel kasutada kaamerat mis tahes ajal teie kinnituseta."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"keela kaamera kasutamisel näidikutule kasutamine"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Võimaldab rakendusel juhtida seadme telefonifunktsioone. Selle loaga rakendus saab vahetada võrke, lülitada telefoniraadiot sisse ja välja ning teha muudki ilma teid teavitamata."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lugege telefoni olekut ja identiteeti"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Annab rakendusele juurdepääsu seadme telefonifunktsioonidele. See luba võimaldab rakendusel määrata telefoninumbri ja seadme ID-d ning kontrollida, kas kõne on aktiivne ja kaugnumber on kõne kaudu telefoniga ühendatud."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"telefoni täpsete olekute lugemine"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Lubab rakendusel hankida juurdepääsu telefoni täpsetele olekutele. Selle loa korral saab rakendus tuvastada kõne tõelise oleku, kas kõne on aktiivne või taustal, kõnede ebaõnnestumised, täpse andmesideühenduse oleku ja andmesideühenduse ebaõnnestumised."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"tahvelarvuti uinumise vältimine"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"väldi telefoni uinumist"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Võimaldab rakendusel vältida tahvelarvuti uinumist."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-i oleku muutmine"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Võimaldab rakendusel luua ja katkestada tahvelarvuti ühenduse WiMAX-i võrkudega."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Võimaldab rakendusel luua ja katkestada telefoni ühenduse WiMAX-i võrkudega."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"võrkude hindamine"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Lubab rakendusel võrke hinnata ja mõjutada seda, milliseid võrke peaks tahvelarvuti eelistama."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Lubab rakendusel võrke hinnata ja mõjutada seda, milliseid võrke peaks telefon eelistama."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"siduge Bluetoothi seadmetega"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Võimaldab rakendusel vaadata tahvelarvuti Bluetooth-konfiguratsiooni ning luua ja heaks kiita ühendusi seotud seadmetega."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Võimaldab rakendusel vaadata telefoni Bluetooth-konfiguratsiooni ning luua ja heaks kiita ühendusi seotud seadmetega."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Võimaldab rakendusel tuua, kontrollida ja kustutada märguandeid, sh neid, mille on postitanud teised rakendused."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"seo märguannete kuulamisteenusega"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Võimaldab omanikul siduda märguannete kuulamisteenuse ülemise taseme kasutajaliidese. Seda ei tohiks tavarakenduste puhul kunagi vaja olla."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"seo tingimuse pakkuja teenusega"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Lubab omanikul siduda tingimuse pakkuja teenuse ülataseme liidesega. Pole kunagi vajalik tavaliste rakenduste puhul."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"operaatoripoolse konfiguratsioonirakenduse aktiveerimine"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Lubab omanikul aktiveerida operaatoripoolse konfiguratsioonirakenduse. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"võrgutingimuste teabe kuulamine"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Lubab rakendusel kuulata võrgutingimuste teavet. Ei ole kunagi vajalik tavaliste rakenduste puhul."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"sisendseadme kalibreerimise muutmine"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Lubab rakendusel muuta puuteekraani kalibreerimisparameetreid. Ei tohiks kunagi olla vajalik tavaliste rakenduste puhul."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"juurdepääs DRM-i sertifikaatidele"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Lubab rakendusel ette valmistada ja kasutada DRM-i sertifikaate. Tavarakenduste puhul ei tohiks see vajalik olla."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Parooli reeglite määramine"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontrollige ekraaniluku avamise paroolide pikkust ja tähemärke."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Ekraani avamiskatsed"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Kodu"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Töö"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Muu"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Selle kontakti kuvamiseks ei leitud ühtegi rakendust."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Sisestage PIN-kood"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Sisestage PUK-kood ja uus PIN-kood"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kood"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Lubab rakendusel hankida juurdepääsu võtmekaitsega turvalisele talletusruumile."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Võtmekaitse kuvamise ja peitmise juhtimine"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Lubab rakendusel võtmekaitset juhtida."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Usaldusväärse oleku muudatuste tuvastamine."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Lubab rakendusel tuvastada muudatusi usaldusväärses olekus."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Usaldusväärse agendi teenusega sidumine"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Lubab rakendusel ennast siduda usaldusväärse agendi teenusega."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Suhtlemine värskenduse ja taastesüsteemiga"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Lubab rakendusel suhelda taastesüsteemi ja süsteemivärskendustega."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Suumi juhtimiseks puudutage kaks korda"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Vidinat ei saanud lisada."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Mine"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Taustapilt"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Muutke taustapilti"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Märguannete kuulamisteenus"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Tingimuse pakkuja"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN on aktiveeritud"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN-i aktiveeris <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Võrgu haldamiseks puudutage."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tõstuklahv"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Sisestusklahv"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Valige rakendus"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Rakendust <xliff:g id="APPLICATION_NAME">%s</xliff:g> ei õnnestunud käivitada"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Jaga:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Jaga rakendusega <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Libistamispide. Puudutage ja hoidke all."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Lohistage alla: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Lohistage paremale: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Luku avamine"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kaamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Hääletu"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Heli on sees"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Avamiseks tõmmake sõrmega."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Paroolide kuulamiseks ühendage peakomplekt."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Süsteem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-heli"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Juhtmeta ekraan"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Meediaväljund"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Seadmega ühendamine"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Ekraanikuva ülekandmine seadmesse"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Seadmete otsimine …"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Seaded"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Katkesta ühendus"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skaneering ..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Ühendan..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Saadaval"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Ülekate nr .<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", turvaline"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Juhtmeta ekraaniühendus on loodud"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Ekraan on näha teises seadmes"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Ekraanikuva ülekandmine"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Ühendamine ekraaniga <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Ekraanikuva ülekandmine"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Ühendatud ekraaniga <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Katkesta ühendus"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Hädaabikõne"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unustasin mustri"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kaardi avamine ..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Vale PIN-kood."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Sisestage 4–8-numbriline PIN-kood."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodi pikkus peab olema vähemalt 8 numbrit."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-kood peab koosnema 8 numbrist."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Sisestage uuesti õige PUK-kood. Korduvkatsete korral keelatakse SIM jäädavalt."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodid ei ole vastavuses"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liiga palju mustrikatseid"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Proovige uuesti <xliff:g id="COUNT">%d</xliff:g> sekundi pärast"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Proovige hiljem uuesti"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Täisekraani sulgemiseks pühkige ülevalt alla"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Täisekraanilt väljumiseks pühkige ülevalt alla."</string>
+    <string name="done_label" msgid="2093726099505892398">"Valmis"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Ringikujuline tunniliugur"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Ringikujuline minutiliugur"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Tundide valimine"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Minutite valimine"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Päevad kuu ruudustikus"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Aastate loend"</string>
+    <string name="select_day" msgid="7774759604701773332">"Kuu ja päeva valimine"</string>
+    <string name="select_year" msgid="7952052866994196170">"Aasta valimine"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> on valitud"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> on kustutatud"</string>
 </resources>
diff --git a/core/res/res/values-et/donottranslate-cldr.xml b/core/res/res/values-et/donottranslate-cldr.xml
deleted file mode 100755
index 49db240..0000000
--- a/core/res/res/values-et/donottranslate-cldr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="numeric_date_template">"%s.%s.%s"</string>
-    <string name="month_day_year">%-e %B %Y</string>
-    <string name="time_of_day">%-k:%M:%S</string>
-    <string name="date_and_time">%-k:%M:%S %d.%m.%Y</string>
-    <string name="date_time">%2$s %1$s</string>
-</resources>
diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml
deleted file mode 100644
index 71832c8..0000000
--- a/core/res/res/values-et/strings.xml
+++ /dev/null
@@ -1,1584 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="byteShort" msgid="8340973892742019101">"B"</string>
-    <string name="kilobyteShort" msgid="5973789783504771878">"kB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
-    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
-    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="untitled" msgid="4638956954852782576">"&lt;Pealkirjata&gt;"</string>
-    <string name="ellipsis" msgid="7899829516048813237">"…"</string>
-    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥."</string>
-    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Telefoninumbrit pole)"</string>
-    <string name="unknownName" msgid="2277556546742746522">"(Tundmatu)"</string>
-    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Kõnepost"</string>
-    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
-    <string name="mmiError" msgid="5154499457739052907">"Ühendusprobleem või kehtetu MMI-kood."</string>
-    <string name="mmiFdnError" msgid="5224398216385316471">"Toiming on ainult fikseeritud valimisnumbritele."</string>
-    <string name="serviceEnabled" msgid="8147278346414714315">"Teenus on lubatud."</string>
-    <string name="serviceEnabledFor" msgid="6856228140453471041">"Teenus oli lubatud järgmisele:"</string>
-    <string name="serviceDisabled" msgid="1937553226592516411">"Teenus on keelatud."</string>
-    <string name="serviceRegistered" msgid="6275019082598102493">"Registreerimine õnnestus."</string>
-    <string name="serviceErased" msgid="1288584695297200972">"Kustutamine oli edukas."</string>
-    <string name="passwordIncorrect" msgid="7612208839450128715">"Vale parool."</string>
-    <string name="mmiComplete" msgid="8232527495411698359">"MMI on lõpule viidud."</string>
-    <string name="badPin" msgid="9015277645546710014">"Sisestatud vana PIN-kood pole õige."</string>
-    <string name="badPuk" msgid="5487257647081132201">"Sisestatud PUK-kood pole õige."</string>
-    <string name="mismatchPin" msgid="609379054496863419">"Sisestatud PIN-koodid ei kattu."</string>
-    <string name="invalidPin" msgid="3850018445187475377">"Sisestage 4–8-numbriline PIN-kood."</string>
-    <string name="invalidPuk" msgid="8761456210898036513">"Sisestage 8- või enamanumbriline PUK-kood."</string>
-    <string name="needPuk" msgid="919668385956251611">"SIM-kaart on PUK-lukustatud. Avamiseks sisestage PUK-kood."</string>
-    <string name="needPuk2" msgid="4526033371987193070">"Sisestage SIM-kaardi blokeeringu tühistamiseks PUK2-kood."</string>
-    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
-    <string name="meid" msgid="4841221237681254195">"MEID"</string>
-    <string name="ClipMmi" msgid="6952821216480289285">"Sissetuleva kõne helistaja ID"</string>
-    <string name="ClirMmi" msgid="7784673673446833091">"Väljuva kõne helistaja ID"</string>
-    <string name="CfMmi" msgid="5123218989141573515">"Kõnede suunamine"</string>
-    <string name="CwMmi" msgid="9129678056795016867">"Koputus"</string>
-    <string name="BaMmi" msgid="455193067926770581">"Kõnepiirang"</string>
-    <string name="PwdMmi" msgid="7043715687905254199">"Parooli muutmine"</string>
-    <string name="PinMmi" msgid="3113117780361190304">"PIN-koodi muutmine"</string>
-    <string name="CnipMmi" msgid="3110534680557857162">"Helistaja number olemas"</string>
-    <string name="CnirMmi" msgid="3062102121430548731">"Helistaja number piiratud"</string>
-    <string name="ThreeWCMmi" msgid="9051047170321190368">"Kolmesuunaline kõne"</string>
-    <string name="RuacMmi" msgid="7827887459138308886">"Soovimatute tüütute kõnede hülgamine"</string>
-    <string name="CndMmi" msgid="3116446237081575808">"Helistaja numbri kohaletoimetamine"</string>
-    <string name="DndMmi" msgid="1265478932418334331">"Mitte häirida"</string>
-    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"Helistaja ID vaikimisi piiratud. Järgmine kõne: piiratud"</string>
-    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"Helistaja ID vaikimisi piiratud. Järgmine kõne: pole piiratud"</string>
-    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"Vaikimisi pole helistaja ID piiratud. Järgmine kõne: piiratud"</string>
-    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Helistaja ID pole vaikimisi piiratud. Järgmine kõne: pole piiratud"</string>
-    <string name="serviceNotProvisioned" msgid="8614830180508686666">"Teenus pole ette valmistatud."</string>
-    <string name="CLIRPermanent" msgid="3377371145926835671">"Helistaja ID seadet ei saa muuta."</string>
-    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Piiratud juurdepääs muutunud"</string>
-    <string name="RestrictedOnData" msgid="8653794784690065540">"Andmesideteenus on blokeeritud."</string>
-    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Hädaabiteenus on blokeeritud."</string>
-    <string name="RestrictedOnNormal" msgid="4953867011389750673">"Häälteenus on blokeeritud."</string>
-    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"Kõik häälteenused on blokeeritud."</string>
-    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS-teenus on blokeeritud."</string>
-    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"Hääl-/andmeteenused on blokeeritud."</string>
-    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Hääl-/SMS-teenused on blokeeritud."</string>
-    <string name="RestrictedOnAll" msgid="5643028264466092821">"Kõik hääl-/andme-/SMS-teenused on blokeeritud."</string>
-    <string name="serviceClassVoice" msgid="1258393812335258019">"Hääl"</string>
-    <string name="serviceClassData" msgid="872456782077937893">"Andmed"</string>
-    <string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string>
-    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
-    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Asünkrooni"</string>
-    <string name="serviceClassDataSync" msgid="7530000519646054776">"Sünkroonimine"</string>
-    <string name="serviceClassPacket" msgid="6991006557993423453">"Pakett"</string>
-    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
-    <string name="roamingText0" msgid="7170335472198694945">"Rändlusindikaator sees"</string>
-    <string name="roamingText1" msgid="5314861519752538922">"Rändlusindikaator väljas"</string>
-    <string name="roamingText2" msgid="8969929049081268115">"Rändlusindikaator vilgub"</string>
-    <string name="roamingText3" msgid="5148255027043943317">"Naabruskonnast väljas"</string>
-    <string name="roamingText4" msgid="8808456682550796530">"Arendusest väljas"</string>
-    <string name="roamingText5" msgid="7604063252850354350">"Rändlus – eelistatud süsteem"</string>
-    <string name="roamingText6" msgid="2059440825782871513">"Rändlus – saadaolev süsteem"</string>
-    <string name="roamingText7" msgid="7112078724097233605">"Rändlus – Alliance\'i partner"</string>
-    <string name="roamingText8" msgid="5989569778604089291">"Rändlus – Premiumi partner"</string>
-    <string name="roamingText9" msgid="7969296811355152491">"Rändlus - täisteenuse funktsionaalsus"</string>
-    <string name="roamingText10" msgid="3992906999815316417">"Rändlus - osaline teenusefunktsionaalsus"</string>
-    <string name="roamingText11" msgid="4154476854426920970">"Rändluse bänner sees"</string>
-    <string name="roamingText12" msgid="1189071119992726320">"Rändlusbänner väljas"</string>
-    <string name="roamingTextSearching" msgid="8360141885972279963">"Teenuse otsimine"</string>
-    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: pole suunatud"</string>
-    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
-    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> <xliff:g id="TIME_DELAY">{2}</xliff:g> sekundi pärast"</string>
-    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: pole suunatud"</string>
-    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: pole edastatud"</string>
-    <string name="fcComplete" msgid="3118848230966886575">"Funktsioonikood valmis."</string>
-    <string name="fcError" msgid="3327560126588500777">"Ühendusprobleem või kehtetu funktsioonikood."</string>
-    <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
-    <string name="httpError" msgid="7956392511146698522">"Ilmnes võrgu viga."</string>
-    <string name="httpErrorLookup" msgid="4711687456111963163">"URL-i ei leita."</string>
-    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Saidi autentimise skeemi ei toetata."</string>
-    <string name="httpErrorAuth" msgid="1435065629438044534">"Autentimine ebaõnnestus."</string>
-    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Puhverserveri kaudu autentimine ebaõnnestus."</string>
-    <string name="httpErrorConnect" msgid="8714273236364640549">"Serveriga ei saanud ühendust."</string>
-    <string name="httpErrorIO" msgid="2340558197489302188">"Serveriga ei saanud ühendust. Proovige hiljem uuesti."</string>
-    <string name="httpErrorTimeout" msgid="4743403703762883954">"Ühendus serveriga aegunud."</string>
-    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Leht sisaldab liiga palju serveri ümbersuunamisi."</string>
-    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Protokolli ei toetata."</string>
-    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Turvalist ühendust ei saanud luua."</string>
-    <string name="httpErrorBadUrl" msgid="3636929722728881972">"Lehte pole võimalik avada, kuna URL on vale."</string>
-    <string name="httpErrorFile" msgid="2170788515052558676">"Failile ei pääse juurde."</string>
-    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Soovitud faili ei leitud."</string>
-    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Töötlemisel on liiga palju taotlusi. Proovige hiljem uuesti."</string>
-    <string name="notification_title" msgid="8967710025036163822">"Viga kontole <xliff:g id="ACCOUNT">%1$s</xliff:g> sisselogimisel"</string>
-    <string name="contentServiceSync" msgid="8353523060269335667">"Sünkroonimine"</string>
-    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sünkroonimine"</string>
-    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Liiga palju üksuse <xliff:g id="CONTENT_TYPE">%s</xliff:g> kustutusi."</string>
-    <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tahvelarvuti mäluruum on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
-    <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonimälu on täis. Ruumi vabastamiseks kustutage mõned failid."</string>
-    <string name="me" msgid="6545696007631404292">"Mina"</string>
-    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Tahvelarvuti valikud"</string>
-    <string name="power_dialog" product="default" msgid="1319919075463988638">"Telefonivalikud"</string>
-    <string name="silent_mode" msgid="7167703389802618663">"Hääletu režiim"</string>
-    <string name="turn_on_radio" msgid="3912793092339962371">"Lülitage traadita side sisse"</string>
-    <string name="turn_off_radio" msgid="8198784949987062346">"Lülitage raadioside välja"</string>
-    <string name="screen_lock" msgid="799094655496098153">"Ekraanilukk"</string>
-    <string name="power_off" msgid="4266614107412865048">"Lülita välja"</string>
-    <string name="silent_mode_silent" msgid="319298163018473078">"Helin on väljas"</string>
-    <string name="silent_mode_vibrate" msgid="7072043388581551395">"Vibreeriv helin"</string>
-    <string name="silent_mode_ring" msgid="8592241816194074353">"Helin on sees"</string>
-    <string name="shutdown_progress" msgid="2281079257329981203">"Väljalülitamine ..."</string>
-    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Teie tahvelarvuti lülitub välja."</string>
-    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Teie telefon lülitub välja."</string>
-    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Kas soovite välja lülitada?"</string>
-    <string name="reboot_safemode_title" msgid="7054509914500140361">"Ohutus režiimis taaskäivitamine"</string>
-    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Kas soovite taaskäivitada ohutus režiimis? See keelab kõik installitud kolmandate osapoolte rakendused. Need taastatakse pärast uuesti taaskäivitamist."</string>
-    <string name="recent_tasks_title" msgid="3691764623638127888">"Hiljutised"</string>
-    <string name="no_recent_tasks" msgid="8794906658732193473">"Hiljutisi rakendusi pole."</string>
-    <string name="global_actions" product="tablet" msgid="408477140088053665">"Tahvelarvuti valikud"</string>
-    <string name="global_actions" product="default" msgid="2406416831541615258">"Telefonivalikud"</string>
-    <string name="global_action_lock" msgid="2844945191792119712">"Ekraanilukk"</string>
-    <string name="global_action_power_off" msgid="4471879440839879722">"Lülita välja"</string>
-    <string name="global_action_bug_report" msgid="7934010578922304799">"Veaaruanne"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"Veaaruande võtmine"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Nii kogutakse teavet teie seadme praeguse oleku kohta, et saata see meilisõnumina. Enne kui saate veaaruande ära saata, võtab selle loomine natuke aega; varuge kannatust."</string>
-    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Hääletu režiim"</string>
-    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Heli on VÄLJAS"</string>
-    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Heli on SEES"</string>
-    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lennurežiim"</string>
-    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Lennurežiim on SEES"</string>
-    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Lennurežiim on VÄLJAS"</string>
-    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
-    <string name="safeMode" msgid="2788228061547930246">"Turvarežiim"</string>
-    <string name="android_system_label" msgid="6577375335728551336">"Android-süsteem"</string>
-    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Tasulised teenused"</string>
-    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Tasuliste toimingute tegemine."</string>
-    <string name="permgrouplab_messages" msgid="7521249148445456662">"Teie sõnumid"</string>
-    <string name="permgroupdesc_messages" msgid="7821999071003699236">"Teie SMS-, meili- ja muude sõnumite lugemine ja kirjutamine."</string>
-    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Teie isiklikud andmed"</string>
-    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Otsene juurdepääs teie kohta käivale teabele, mis on salvestatud teie kontaktikaardile."</string>
-    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Teie sotsiaalne teave"</string>
-    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Otsene juurdepääs teie kontaktide teabele ja sotsiaalsetele sidemetele."</string>
-    <string name="permgrouplab_location" msgid="635149742436692049">"Teie asukoht"</string>
-    <string name="permgroupdesc_location" msgid="5704679763124170100">"Jälgige oma füüsilist asukohta."</string>
-    <string name="permgrouplab_network" msgid="5808983377727109831">"Võrgusuhtlus"</string>
-    <string name="permgroupdesc_network" msgid="4478299413241861987">"Juurdepääs erinevatele võrgufunktsioonidele."</string>
-    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
-    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Juurdepääs seadmetele ja võrkudele Bluetoothi kaudu."</string>
-    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Heliseaded"</string>
-    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Heliseadete muutmine."</string>
-    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Aku mõjutamine"</string>
-    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Funktsioonide, mis võivad aku kiiresti tühjendada, kasutamine."</string>
-    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalender"</string>
-    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Otsene juurdepääs kalendrile ja sündmustele."</string>
-    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Kasutaja sõnaraamatu lugemine"</string>
-    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Kasutaja sõnaraamatu sõnade lugemine."</string>
-    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Kasutaja sõnaraamatusse kirjutamine"</string>
-    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Kasutaja sõnaraamatusse sõnade lisamine."</string>
-    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Järjehoidjad ja ajalugu"</string>
-    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Otsene juurdepääs järjehoidjatele ja brauseri ajaloole."</string>
-    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Alarm"</string>
-    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Äratuskella seadmine."</string>
-    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Kõnepost"</string>
-    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Otsene juurdepääs kõnepostile."</string>
-    <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
-    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Otsene juurdepääs mikrofonile heli salvestamiseks."</string>
-    <string name="permgrouplab_camera" msgid="4820372495894586615">"Kaamera"</string>
-    <string name="permgroupdesc_camera" msgid="2933667372289567714">"Otsene juurdepääs kaamerale fotode või videote jäädvustamiseks."</string>
-    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"Lukustuskuva"</string>
-    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"Võime mõjutada lukustuskuva käitumist seadmes."</string>
-    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Teie rakenduste teave"</string>
-    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Võime mõjutada teiste seadmes olevate rakenduste käitumist."</string>
-    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Taustapilt"</string>
-    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Seadme taustapildi seadete muutmine."</string>
-    <string name="permgrouplab_systemClock" msgid="406535759236612992">"Kell"</string>
-    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Seadme aja või ajavööndi muutmine."</string>
-    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Olekuriba"</string>
-    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Seadme olekuriba seadete muutmine."</string>
-    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Sünkroonimisseaded"</string>
-    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Juurdepääs sünkroonimisseadetele."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Teie kontod"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Juurdepääs saadaolevatele kontodele."</string>
-    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Riistvara juhtelemendid"</string>
-    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Otsene juurdepääs mobiiltelefoni riistvarale."</string>
-    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Telefonikõned"</string>
-    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Telefonikõnede jälgimine, salvestamine ja töötlemine."</string>
-    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Süsteemitööriistad"</string>
-    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Süsteemi madalama taseme juurdepääs ja juhtimine."</string>
-    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Arendustööriistad"</string>
-    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funktsioonid on vajalikud ainult rakenduste arendajatele."</string>
-    <string name="permgrouplab_display" msgid="4279909676036402636">"Muu rakenduse kasutajaliides"</string>
-    <string name="permgroupdesc_display" msgid="6051002031933013714">"Teiste rakenduste kasutajaliidese mõjutamine."</string>
-    <string name="permgrouplab_storage" msgid="1971118770546336966">"Mäluruum"</string>
-    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Juurdepääs USB-mäluseadmele."</string>
-    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Juurdepääs SD-kaardile."</string>
-    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Pääsufunktsioonid"</string>
-    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funktsioonid, mida saab taotleda abistav tehnoloogia."</string>
-    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Akna sisu toomine"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Tutvuge kasutatava akna sisuga."</string>
-    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Puudutusega sirvimise sisselülitamine"</string>
-    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Puudutatud üksuste nimesid esitatakse häälega ning ekraani saab sirvida puudutustega."</string>
-    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Veebi täiustatud juurdepääsu sisselülitamine"</string>
-    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Rakenduse sisu kättesaadavamaks muutmiseks võidakse installida skripte."</string>
-    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Sisestatud teksti jälgimine"</string>
-    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Sisaldab isiklikke andmeid, nt krediitkaardi numbreid ja paroole."</string>
-    <string name="permlab_statusBar" msgid="7417192629601890791">"keela või muuda olekuriba"</string>
-    <string name="permdesc_statusBar" msgid="8434669549504290975">"Võimaldab rakendusel keelata olekuriba või lisada ja eemaldada süsteemiikoone."</string>
-    <string name="permlab_statusBarService" msgid="7247281911387931485">"olekuriba"</string>
-    <string name="permdesc_statusBarService" msgid="716113660795976060">"Võimaldab rakendusel olla olekuriba."</string>
-    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"laienda/ahenda olekuriba"</string>
-    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Võimaldab rakendusel laiendada või ahendada olekuriba."</string>
-    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"marsruutige väljuvad kõned uuesti"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Võimaldab rakendusel töödelda väljuvaid kõnesid ja muuta valitavat numbrit. Luba võimaldab rakendusel jälgida, ümber suunata või takistada väljuvaid kõnesid."</string>
-    <string name="permlab_receiveSms" msgid="8673471768947895082">"võtke vastu tekstisõnumeid (SMS)"</string>
-    <string name="permdesc_receiveSms" msgid="6424387754228766939">"Võimaldab rakendusel vastu võtta ja töödelda SMS-sõnumeid. See tähendab, et rakendus võib jälgida või kustutada teie seadmele saadetud sõnumeid neid teile näitamata."</string>
-    <string name="permlab_receiveMms" msgid="1821317344668257098">"võtke vastu tekstisõnumeid (MMS)"</string>
-    <string name="permdesc_receiveMms" msgid="533019437263212260">"Võimaldab rakendusel vastu võtta ja töödelda multimeediumsõnumeid. See tähendab, et rakendus võib jälgida või kustutada teie seadmele saadetud sõnumeid neid teile näitamata."</string>
-    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"hädaabiteadete vastuvõtmine"</string>
-    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Võimaldab rakendusel vastu võtta ja töödelda hädaabisõnumeid. See õigus on saadaval ainult süsteemirakendustele."</string>
-    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"mobiilsidesõnumite lugemine"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Võimaldab rakendusel lugeda seadme vastu võetud mobiilsidesõnumeid. Mobiilsidemärguandeid edastatakse mõnes asukohas eriolukorrast teavitamiseks. Pahatahtlikud rakendused võivad segada seadme toimivust või tööd eriolukorra sõnumi vastuvõtmisel."</string>
-    <string name="permlab_sendSms" msgid="5600830612147671529">"saada SMS-sõnumeid"</string>
-    <string name="permdesc_sendSms" msgid="7094729298204937667">"Võimaldab rakendusel saata SMS-sõnumeid. See võib kaasa tuua ootamatuid tasusid. Pahatahtlikud rakendused võivad teile tekitada kulusid, saates sõnumeid teie kinnituseta."</string>
-    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"sõnumiga vastamise sündmuste saatmine"</string>
-    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"Lubab rakendusel saata taotlusi teistele sõnumiside rakendustele, et käsitleda sissetulevate kõnedele sõnumiga vastamise sündmusi."</string>
-    <string name="permlab_readSms" msgid="8745086572213270480">"lugege oma tekstisõnumeid (SMS või MMS)"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Võimaldab rakendusel lugeda tahvelarvutisse või SIM-kaardile salvestatud SMS-sõnumeid. See võimaldab rakendusel lugeda kõiki SMS-sõnumeid sisust või konfidentsiaalsusest hoolimata."</string>
-    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Võimaldab rakendusel lugeda telefoni või SIM-kaardile salvestatud SMS-sõnumeid. See võimaldab rakendusel lugeda kõiki SMS-sõnumeid sisust või konfidentsiaalsusest hoolimata."</string>
-    <string name="permlab_writeSms" msgid="3216950472636214774">"muutke oma tekstisõnumeid (SMS või MMS)"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Võimaldab rakendusel kirjutada teie tahvelarvutisse või SIM-kaardile salvestatud SMS-sõnumitesse. Pahatahtlikud rakendused võivad teie sõnumid kustutada."</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Võimaldab rakendusel kirjutada teie telefoni või SIM-kaardile salvestatud SMS-sõnumitesse. Pahatahtlikud rakendused võivad teie sõnumid kustutada."</string>
-    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"võtke vastu tekstisõnumeid (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Võimaldab rakendusel vastu võtta ja töödelda WAP-sõnumeid. See luba hõlmab võimet jälgida või kustutada teile saadetud sõnumeid neid teile näitamata."</string>
-    <string name="permlab_getTasks" msgid="6466095396623933906">"Käitatud rakenduste toomine"</string>
-    <string name="permdesc_getTasks" msgid="7454215995847658102">"Võimaldab rakendusel tuua teavet praegu ja hiljuti käitatud ülesannete kohta. See võib lubada rakendusel avastada teavet selle kohta, milliseid rakendusi seadmes kasutatakse."</string>
-    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"toimingud erinevatel kasutajakontodel"</string>
-    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Lubab rakendusel teha toiminguid seadme erinevatel kasutajakontodel. Pahatahtlikud rakendused võivad kasutada seda kasutajatevahelise kaitse rikkumiseks."</string>
-    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"täielik litsents teha toiminguid erinevatel kasutajakontodel"</string>
-    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"Lubab kõiki võimalikke toiminguid erinevatel kasutajakontodel."</string>
-    <string name="permlab_manageUsers" msgid="1676150911672282428">"kasutajate haldamine"</string>
-    <string name="permdesc_manageUsers" msgid="8409306667645355638">"Võimaldab rakendustel hallata seadme kasutajaid, sealhulgas päringuid, loomist ja kustutamist."</string>
-    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"töötavate rakenduste üksikasjade toomine"</string>
-    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Võimaldab rakendusel tuua üksikasjalikku teavet praegu töötavate ja hiljuti käitatud ülesannete kohta. Pahatahtlikud rakendused võivad tuvastada privaatset teavet muude rakenduste kohta."</string>
-    <string name="permlab_reorderTasks" msgid="2018575526934422779">"käitatud rakenduste ümberjärjestamine"</string>
-    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Võimaldab rakendusel teisaldada ülesanded esiplaanile ja taustale. Rakendus võib seda teha teie sisendita."</string>
-    <string name="permlab_removeTasks" msgid="6821513401870377403">"käitatud rakenduste peatamine"</string>
-    <string name="permdesc_removeTasks" msgid="1394714352062635493">"Võimaldab rakendusel eemaldada ülesanded ja peatada nende rakendused. Pahatahtlikud rakendused võivad häirida teiste rakenduste käitumist."</string>
-    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"tegevusvirnade haldamine"</string>
-    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"Lubab rakendusel lisada, eemaldada ja muuta tegevusvirnasid, kus teised rakendused töötavad. Pahatahtlikud rakendused võivad häirida teiste rakenduste käitumist."</string>
-    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"mis tahes toimingu alustamine"</string>
-    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"Võimaldab rakendusel käivitada mis tahes toimingu loa kaitsest või eksporditud olekust sõltumata."</string>
-    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"kuva ühilduvuse seadmine"</string>
-    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Võimaldab rakendusel juhtida teiste rakenduste kuva ühilduvuse režiimi. Pahatahtlikud rakendused võivad teisi rakendusi häirida."</string>
-    <string name="permlab_setDebugApp" msgid="3022107198686584052">"Rakenduse silumise lubamine"</string>
-    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Võimaldab rakendusel lülitada sisse teise rakenduse silumise. Pahatahtlikud rakendused võivad seda kasutada teiste rakenduste peatamiseks."</string>
-    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"muutke süsteemi kuvaseadeid"</string>
-    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Võimaldab rakendusel muuta praegust konfiguratsiooni, näiteks lokaati või üldist kirjasuurust."</string>
-    <string name="permlab_enableCarMode" msgid="5684504058192921098">"autorežiimi lubamine"</string>
-    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Võimaldab rakendusel autorežiimi lubada."</string>
-    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"sulgege teised rakendused"</string>
-    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Võimaldab rakendusel lõpetada teiste rakenduste taustaprotsesse. See võib peatada teiste rakenduste töö."</string>
-    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"Teiste rakenduste jõuga peatamine"</string>
-    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Lubab rakendusel sunniviisiliselt teisi rakendusi peatada."</string>
-    <string name="permlab_forceBack" msgid="652935204072584616">"Rakenduse sulguma sundimine"</string>
-    <string name="permdesc_forceBack" msgid="3892295830419513623">"Võimaldab rakendusel sundida iga esiplaanil oleva rakenduse sulgema ja tagasi minema. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_dump" msgid="1681799862438954752">"võta vastu süsteemi siseolek"</string>
-    <string name="permdesc_dump" msgid="1778299088692290329">"Võimaldab rakendusel teada saada süsteemi sisemist olekut. Pahatahtlikud rakendused võivad hankida mitmesugust privaatset ja turvateavet, mida neil tavaliselt kunagi vaja ei lähe."</string>
-    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"ekraanisisu taastamine"</string>
-    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Võimaldab rakendusel kätte saada aktiivse akna sisu. Pahatahtlikud rakendused võivad hankida kogu akna sisu ja uurida kogu selle teksti, välja arvatud paroole."</string>
-    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ajutine hõlbustuse lubamine"</string>
-    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Lubab rakendusel ajutiselt lubada seadmes hõlbustuse. Pahatahtlikud rakendused võivad lubada hõlbustuse kasutaja nõusolekuta."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hangi akna teave"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Võimaldab rakendusel hankida teavet aknahalduri akende kohta. Pahatahtlikud rakendused võivad hankida teavet, mis on mõeldud süsteemisiseseks kasutamiseks."</string>
-    <string name="permlab_filter_events" msgid="8675535648807427389">"filtreeri sündmused"</string>
-    <string name="permdesc_filter_events" msgid="8006236315888347680">"Võimaldab rakendusel registreerida sisestusfiltri, mis filtreerib kõigi kasutaja sündmuste voo, enne kui need ära saadetakse. Pahatahtlik rakendus võib süsteemi kasutajaliidest juhtida ilma kasutaja sekkumiseta."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"kuva suurendamine"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Lubab rakendusel ekraani sisu suurendada. Pahatahtlikud rakendused võivad muundada kuva sisu nii, et seade muutub ebastabiilseks."</string>
-    <string name="permlab_shutdown" msgid="7185747824038909016">"osaline väljalülitamine"</string>
-    <string name="permdesc_shutdown" msgid="7046500838746291775">"Lülitab tegevushalduri väljalülitusolekusse. Ei lülita lõplikult välja."</string>
-    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"väldi rakenduste ümberlülitamist"</string>
-    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Takistab kasutaja lülitumist teisele rakendusele."</string>
-    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"aktiivse rakenduse teabe hankimine"</string>
-    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Lubab õiguste saajal hankida privaatset teavet ekraanil esiplaanil oleva aktiivse rakenduse kohta."</string>
-    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"Kõigi rakenduste käivitumise jälgimine ja juhtimine"</string>
-    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Võimaldab rakendusel jälgida ja juhtida, kuidas süsteem tegevusi käivitab. Pahatahtlikud rakendused võivad süsteemi täielikult rikkuda. Seda õigust on vaja ainult arenduseks, mitte tavakasutuse korral."</string>
-    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"saada paketist eemaldatud saade"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Võimaldab rakendusel edastada teatise rakenduse paketi eemaldamise kohta. Pahatahtlikud rakendused võivad seda kasutada teiste käitatud rakenduste peatamiseks."</string>
-    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"saada SMS-i teel vastuvõetud saade"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Võimaldab rakendusel edastada teatise SMS-sõnumi vastuvõtmise kohta. Pahatahtlikud rakendused võivad seda kasutada sissetulevate SMS-sõnumite võltsimiseks."</string>
-    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"saada WAP-PUSH-vastuvõetud saateid"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Võimaldab rakendusel edastada teatise WAP PUSH-sõnumi vastuvõtmise kohta. Pahatahtlikud rakendused võivad seda kasutada MMS-sõnumite vastuvõtmise võltsimiseks või mis tahes veebilehe sisu salaja asendamiseks pahatahtlikuga."</string>
-    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"piira töötavate protsesside arvu"</string>
-    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Võimaldab rakendusel juhtida töötavate protsesside maksimaalset arvu. Tavarakenduste puhul pole seda vaja."</string>
-    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"sundige taustarakendused sulguma"</string>
-    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Võimaldab rakendusel määrata, kas tegevused lõpetatakse kohe, kui need liiguvad taustale. Tavarakenduste puhul pole seda vaja."</string>
-    <string name="permlab_batteryStats" msgid="2789610673514103364">"aku statistika lugemine"</string>
-    <string name="permdesc_batteryStats" msgid="5897346582882915114">"Lubab rakendusel lugeda madala akutaseme kasutusandmeid. Võib lubada rakendusel hankida üksikasjalikku teavet selle kohta, mis rakendusi te kasutate."</string>
-    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"aku statistika muutmine"</string>
-    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Võimaldab rakendusel muuta aku kohta kogutud statistikat. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"rakenduse tööstatistika hankimine"</string>
-    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Võimaldab rakendusel hankida kogutud rakenduse tööstatistikat. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"rakenduse tööstatistika muutmine"</string>
-    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Võimaldab rakendusel muuta kogutud rakenduse tööstatistikat. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_backup" msgid="470013022865453920">"juhi süsteemi varundust ja taastet"</string>
-    <string name="permdesc_backup" msgid="6912230525140589891">"Võimaldab rakendusel juhtida süsteemi varundus- ja taastemehhanismi. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"täieliku varukoopia kinnitamine või toimingu taastamine"</string>
-    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Võimaldab rakendusel käivitada täieliku varukoopia kinnitusliidese. Mitte kasutada üheski rakenduses."</string>
-    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"kuva volituseta aknad"</string>
-    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Võimaldab rakendusel luua aknaid, mis on mõeldud kasutamiseks süsteemisisesele kasutajaliidesele. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"tõmmake üle teiste rakenduste"</string>
-    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Lubab rakendusel joonistada teistele rakendustele või nende kasutajaliidestele. See võib segada ükskõik millise rakenduse liidese kasutamist või muuta seda, mida arvate nägevat."</string>
-    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"muuda üldist animatsioonikiirust"</string>
-    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Võimaldab rakendusel muuta animatsiooni üldist kiirust (animatsioone kiirendada või aeglustada) ükskõik millal."</string>
-    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"Rakenduse lubade haldamine"</string>
-    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Võimaldab rakendusel luua ja hallata tema enda lube, möödudes tavapärasest Z-järjekorrast. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_freezeScreen" msgid="4708181184441880175">"ekraanikuva peatamine"</string>
-    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Lubab rakendusel ajutiselt peatada ekraani kuva täisekraanile üleminekuks."</string>
-    <string name="permlab_injectEvents" msgid="1378746584023586600">"vajuta klahve ja juhtnuppe"</string>
-    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Võimaldab rakendusel saata oma sisendtoiminguid (klahvivajutusi jms) teistele rakendustele. Pahatahtlikud rakendused võivad seda kasutada tahvelarvuti ülevõtmiseks."</string>
-    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Võimaldab rakendusel saata oma sisendtoiminguid (klahvivajutusi jms) teistele rakendustele. Pahatahtlikud rakendused võivad seda kasutada telefoni ülevõtmiseks."</string>
-    <string name="permlab_readInputState" msgid="469428900041249234">"salvesta sisestatav tekst ja tehtavad toimingud"</string>
-    <string name="permdesc_readInputState" msgid="8387754901688728043">"Võimaldab rakendusel vaadata vajutatavaid klahve, isegi kui suhtlete teise rakendusega (näiteks parooli sisestamisel). Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"seo sisestusmeetodiga"</string>
-    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Lubab omanikul siduda sisestusmeetodi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"sidumine juurdepääsuteenusega"</string>
-    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Lubab omanikul luua sideme juurdepääsuteenuse ülataseme liidesega. Tavarakenduste puhul ei tohiks seda kunagi vaja minna."</string>
-    <string name="permlab_bindPrintService" msgid="8462815179572748761">"sidumine printimisteenusega"</string>
-    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Lubab omanikul siduda printimisteenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_accessAllPrintJobs" msgid="1120792468465711159">"juurdepääs kõikidele printimistöödele"</string>
-    <string name="permdesc_accessAllPrintJobs" msgid="2978185311041864762">"Lubab omanikule juurdepääsu teise rakenduse loodud printimistöödele. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC-teenusega sidumine"</string>
-    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"Lubab kasutajal luua seosed rakendustega, mis jäljendavad NFC-kaarte. Pole kunagi vajalik tavaliste rakenduste korral."</string>
-    <string name="permlab_bindTextService" msgid="7358378401915287938">"tekstiteenusega sidumine"</string>
-    <string name="permdesc_bindTextService" msgid="8151968910973998670">"Võimaldab omanikul siduda tekstiteenuse (nt SpellCheckerService) ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_bindVpnService" msgid="4708596021161473255">"seo VPN-teenusega"</string>
-    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Võimaldab omanikul siduda VPN-teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"taustapildiga sidumine"</string>
-    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lubab omanikul siduda taustapildi ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vidinateenusega sidumine"</string>
-    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lubab omanikul siduda vidina teenuse ülataseme liidesega. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"seadme administraatoriga suhtlemine"</string>
-    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Võimaldab omanikul saata kavatsusi seadme administraatorile. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"seadme administraatori lisamine või eemaldamine"</string>
-    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Võimaldab omanikul lisada või eemaldada aktiivseid seadme administraatoreid. Tavarakenduste puhul ei tohiks see kunagi vajalik olla."</string>
-    <string name="permlab_setOrientation" msgid="3365947717163866844">"muuda ekraani paigutust"</string>
-    <string name="permdesc_setOrientation" msgid="3046126619316671476">"Võimaldab rakendusel muuta ekraani pööramist mis tahes ajal. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"kursorikiiruse muutmine"</string>
-    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"Võimaldab rakendusel muuta igal ajal hiire- või puutepadjakursori kiirust. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"klaviatuuri paigutuse muutmine"</string>
-    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"Lubab rakendusel muuta klaviatuuri paigutust. Tavarakenduste puhul ei peaks kunagi vaja olema."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"Linuxi signaalide saatmine rakendustele"</string>
-    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Võimaldab rakendusel taotleda edastatud signaali saatmist kõigile püsiprotsessidele."</string>
-    <string name="permlab_persistentActivity" msgid="8841113627955563938">"Rakenduste pidev töös hoidmine"</string>
-    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Võimaldab rakendusel muuta oma osi mälus püsivaks. See võib piirata teistele (tahvelarvutit aeglasemaks muutvatele) rakendustele saadaolevat mälu."</string>
-    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Võimaldab rakendusel muuta oma osi mälus püsivaks. See võib piirata teistele (telefoni aeglasemaks muutvatele) rakendustele saadaolevat mälu."</string>
-    <string name="permlab_deletePackages" msgid="184385129537705938">"Rakenduste kustutamine"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"Võimaldab rakendusel kustutada Android-pakette. Pahatahtlikud rakendused võivad seda kasutada oluliste rakenduste kustutamiseks."</string>
-    <string name="permlab_clearAppUserData" msgid="274109191845842756">"Teiste rakenduste andmete kustutamine"</string>
-    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Võimaldab rakendusel kustutada kasutaja andmed."</string>
-    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"Teiste rakenduste vahemälu kustutamine"</string>
-    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Võimaldab rakendusel kustutada vahemälu failid."</string>
-    <string name="permlab_getPackageSize" msgid="7472921768357981986">"Rakenduse mäluruumi mõõtmine"</string>
-    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Võimaldab rakendusel tuua oma koodi, andmed ja vahemälu suurused"</string>
-    <string name="permlab_installPackages" msgid="2199128482820306924">"Rakenduste otse installimine"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"Võimaldab rakendusel installida uusi või värskendatud Android-pakette. Pahatahtlikud rakendused võivad selle abil lisada uusi meelevaldse tegevuse lubadega rakendusi."</string>
-    <string name="permlab_clearAppCache" msgid="7487279391723526815">"Kõigi rakenduse vahemäluandmete kustutamine"</string>
-    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Lubab rakendusel vabastada tahvelarvuti mäluruumi, kustutades faile teiste rakenduste vahemälu kataloogides. Selle tagajärjel võivad teised rakendused käivituda aeglasemalt, sest need peavad oma andmed uuesti tooma."</string>
-    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Lubab rakendusel vabastada telefoni mäluruumi, kustutades faile teiste rakenduste vahemälu kataloogides. Selle tagajärjel võivad teised rakendused käivituda aeglasemalt, sest need peavad oma andmed uuesti tooma."</string>
-    <string name="permlab_movePackage" msgid="3289890271645921411">"Rakenduse ressursside teisaldamine"</string>
-    <string name="permdesc_movePackage" msgid="319562217778244524">"Võimaldab rakendusel teisalda rakenduseressursid sisemiselt kandjalt välisele ja vastupidi."</string>
-    <string name="permlab_readLogs" msgid="6615778543198967614">"tundlike logiandmete lugemine"</string>
-    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Võimaldab rakendusel lugeda süsteemi erinevaid logifaile. Nii on võimalik avastada üldist teavet selle kohta, mida te tahvelarvutiga teete, sh isiklikku või privaatset teavet."</string>
-    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Võimaldab rakendusel lugeda süsteemi erinevaid logifaile. Nii on võimalik avastada üldist teavet selle kohta, mida te telefoniga teete, mis võib kaasata ka isiklikku või privaatset teavet."</string>
-    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"Mis tahes meediumidekooderi kasutamine taasesituseks"</string>
-    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Võimaldab rakendusel taasesituseks kasutada mis tahes installitud meediumidekooderit."</string>
-    <string name="permlab_diagnostic" msgid="8076743953908000342">"loe/kirjuta valija allikaid"</string>
-    <string name="permdesc_diagnostic" msgid="6608295692002452283">"Võimaldab rakendusel lugeda valimisrühma mis tahes ressurssi ja sellesse kirjutada (näiteks kaustas /dev olevad failid). See võib mõjutada süsteemi stabiilsust ja turvet. Seda tohiks kasutada tootja või operaator AINULT riistvaraspetsiifiliseks diagnostikaks."</string>
-    <string name="permlab_changeComponentState" msgid="6335576775711095931">"Rakenduse komponentide lubamine või keelamine"</string>
-    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Võimaldab rakendusel määrata, kas teise rakenduse komponent on lubatud või mitte. Pahatahtlikud rakendused võivad kasutada seda oluliste tahvelarvutirakenduste keelamiseks. Nende õiguste puhul peab olema ettevaatlik, kuna need võimaldavad muuta rakenduse komponente kasutuks, ebaühtlaseks või ebastabiilseks."</string>
-    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Võimaldab rakendusel määrata, kas teise rakenduse komponent on lubatud või mitte. Pahatahtlikud rakendused võivad kasutada seda oluliste telefonirakenduste keelamiseks. Nende õiguste puhul peab olema ettevaatlik, kuna need võimaldavad muuta rakenduse komponente kasutuks, ebaühtlaseks või ebastabiilseks."</string>
-    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"lubade andmine või tühistamine"</string>
-    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Võimaldab rakendusel anda või tühistada teatud lubasid endale või teistele rakendustele. Pahatahtlikud rakendused võivad kasutada seda juurdepääsu hankimiseks sellistele funktsioonidele, mille jaoks te pole luba andnud."</string>
-    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"Eelistatud rakenduste määramine"</string>
-    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Võimaldab rakendusel muuta teie eelistatud rakendusi. Pahatahtlikud rakendused võivad salaja muuta töötavaid rakendusi, pettes teie olemasolevad rakendused koguma teilt privaatseid andmeid."</string>
-    <string name="permlab_writeSettings" msgid="2226195290955224730">"muutke süsteemi seadeid"</string>
-    <string name="permdesc_writeSettings" msgid="7775723441558907181">"Võimaldab rakendusel muuta süsteemiseadete andmeid. Pahatahtlikud rakendused võivad rikkuda teie süsteemi konfiguratsiooni."</string>
-    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"muuda turvalisi süsteemiseadeid"</string>
-    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Võimaldab rakendusel muuta süsteemi turvaseadete andmeid. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_writeGservices" msgid="2149426664226152185">"muuda Google\'i teenustekaarti"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"Võimaldab rakendusel muuta Google\'i teenustekaarti. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"käitage käivitamisel"</string>
-    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Võimaldab rakendusel käivituda ise kohe, kui süsteem on käivitunud. See võib tahvelarvuti käivitamist aeglustada ja lubab rakendusel muuta tahvelarvuti ka üldiselt aeglasemaks, kuna töötab pidevalt."</string>
-    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Võimaldab rakendusel käivituda ise kohe, kui süsteem on käivitunud. See võib telefoni käivitamist aeglustada ja lubab rakendusel muuta telefoni ka üldiselt aeglasemaks, kuna töötab pidevalt."</string>
-    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"kleepsaate saatmine"</string>
-    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Võimaldab rakendusel saata püsivaid edastusi, mis jäävad pärast saate lõppemist alles. Ülemäärane kasutamine võib muuta tahvelarvuti aeglaseks või ebastabiilseks, põhjustades selle liiga suure mälukasutuse."</string>
-    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Võimaldab rakendusel saata püsivaid edastusi, mis jäävad pärast saate lõppemist alles. Ülemäärane kasutamine võib muuta telefoni aeglaseks või ebastabiilseks, põhjustades selle liiga suure mälukasutuse."</string>
-    <string name="permlab_readContacts" msgid="8348481131899886131">"lugege oma kontakte"</string>
-    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Võimaldab rakendusel lugeda andmeid teie tahvelarvutisse salvestatud kontaktide kohta, näiteks seda, kui tihti te kellelegi helistate, meilite või nendega muul viisil suhtlete. See luba võimaldab rakendustel salvestada teie kontaktandmeid ja pahatahtlikud rakendused võivad teie teadmata kontaktandmeid jagada."</string>
-    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Võimaldab rakendusel lugeda andmeid teie telefoni salvestatud kontaktide kohta, näiteks seda, kui tihti te kellelegi helistate, meilite või nendega muul viisil suhtlete. See luba võimaldab rakendustel salvestada teie kontaktandmeid ja pahatahtlikud rakendused võivad teie teadmata kontaktandmeid jagada."</string>
-    <string name="permlab_writeContacts" msgid="5107492086416793544">"muutke oma kontakte"</string>
-    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Võimaldab rakendusel muuta tahvelarvutisse salvestatud kontaktide andmeid, sealhulgas seda, kui tihti olete konkreetsetele kontaktidele helistanud, meilinud või nendega muul viisil suhelnud. See luba võimaldab rakendustel kustutada kontaktandmeid."</string>
-    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Võimaldab rakendusel muuta telefoni salvestatud kontaktide andmeid, sealhulgas seda, kui tihti olete konkreetsetele kontaktidele helistanud, meilinud või nendega muul viisil suhelnud. See luba võimaldab rakendustel kustutada kontaktandmeid."</string>
-    <string name="permlab_readCallLog" msgid="3478133184624102739">"kõnelogi lugemine"</string>
-    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Võimaldab rakendusel lugeda teie tahvelarvuti kõnelogi, sh andmeid sissetulevate ja väljuvate kõnede kohta. See luba võimaldab rakendustel salvestada teie kõnelogi andmeid ja pahatahtlikud rakendused võivad teie teadmata kõnelogi andmeid jagada."</string>
-    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Võimaldab rakendusel lugeda teie telefoni kõnelogi, sh andmeid sissetulevate ja väljuvate kõnede kohta. See luba võimaldab rakendustel salvestada teie kõnelogi andmeid ja pahatahtlikud rakendused võivad teie teadmata kõnelogi andmeid jagada."</string>
-    <string name="permlab_writeCallLog" msgid="8552045664743499354">"kõnelogi kirjutamine"</string>
-    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Lubab rakendusel muuta tahvelarvuti kõnelogi, sh sissetulevate ja väljaminevate kõnede andmeid. Pahatahtlikud rakendused võivad kasutada seda kõnelogi kustutamiseks või muutmiseks."</string>
-    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Lubab rakendusel muuta telefoni kõnelogi, sh sissetulevate ja väljaminevate kõnede andmeid. Pahatahtlikud rakendused võivad kasutada seda kõnelogi kustutamiseks või muutmiseks."</string>
-    <string name="permlab_readProfile" msgid="4701889852612716678">"lugege oma kontaktikaarti"</string>
-    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Võimaldab rakendusel lugeda seadmesse salvestatud isiklikku profiiliteavet, näiteks teie nime ja kontaktteavet. See tähendab, et rakendus saab teid tuvastada ja saata teie profiiliteavet teistele."</string>
-    <string name="permlab_writeProfile" msgid="907793628777397643">"muutke oma kontaktikaarti"</string>
-    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Võimaldab rakendusel muuta või lisada seadmesse salvestatud isiklikku profiiliteavet, näiteks teie nime ja kontaktteavet. See tähendab, et rakendus saab teid tuvastada ja saata teie profiiliteavet teistele."</string>
-    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"Sotsiaalvoo lugemine"</string>
-    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Annab rakendusele juurdepääsu ja võimaldab sünkroonida teie ja teie sõprade sotsiaalseid värskendusi. Olge teabe jagamisel ettevaatlik – see võimaldab rakendusel lugeda teie suhtlusi sõpradega suhtlusvõrgustikes konfidentsiaalsusest hoolimata. Märkus: see luba ei pruugi jõustuda kõigis suhtlusvõrgustikes."</string>
-    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Sotsiaalvoogu kirjutamine"</string>
-    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Võimaldab rakendusel kuvada sõprade sotsiaalseid värskendusi. Olge teabe jagamisel ettevaatlik – see võimaldab rakendusel luua sõnumeid, mis võivad näida tulevat sõpradelt. Märkus: see luba ei pruugi jõustuda kõikides suhtlusvõrgustikes."</string>
-    <string name="permlab_readCalendar" msgid="5972727560257612398">"kalendrisündmuste lugemine ja konfidentsiaalne teave"</string>
-    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Võimaldab rakendusel lugeda kõiki tahvelarvutisse salvestatud kalendrisündmusi, sh sõprade või töökaaslaste omi. See võib lubada rakendusel jagada või salvestada teie kalendriandmeid, hoolimata konfidentsiaalsusest või tundlikkusest."</string>
-    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Võimaldab rakendusel lugeda kõiki telefoni salvestatud kalendrisündmusi, sh sõprade või töökaaslaste omi. See võib lubada rakendusel jagada või salvestada teie kalendriandmeid, hoolimata konfidentsiaalsusest või tundlikkusest."</string>
-    <string name="permlab_writeCalendar" msgid="8438874755193825647">"kalendrisündmuste lisamine või muutmine ja külalistele omanike teadmata meili saatmine"</string>
-    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Võimaldab rakendusel lisada, eemaldada ja muuta sündmusi, mida saate muuta oma tahvelarvutis, sh sõprade ja töökaaslaste omi. See võib võimaldada rakendusel saata sõnumeid, mis näivad tulevat kalendri omanikelt, või muuta sündmusi omaniku teadmata."</string>
-    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"Võimaldab rakendusel lisada, eemaldada ja muuta sündmusi, mida saate muuta oma telefonis, sh sõprade ja töökaaslaste omi. See võib võimaldada rakendusel saata sõnumeid, mis näivad tulevat kalendri omanikelt, või muuta sündmusi omaniku teadmata."</string>
-    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"võltsasukohad testimiseks"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Looge võltsasukoha allikaid, et katsetada või installida uut asukohapakkujat. See lubab rakendusel tühistada teiste asukohaallikate, näiteks GPS-i või asukohapakkujate tagastatud asukoha ja/või oleku."</string>
-    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"juurdepääs asukohapakkuja lisakäskudele"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Võimaldab rakendusel pääseda juurde asukohapakkuja erikäskudele. See võib lubada rakendusel segada GPS-i või muude asukohaallikate tööd."</string>
-    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"luba asukohapakkuja installimiseks"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Looge võltsasukoha allikaid, et katsetada või installida uut asukohapakkujat. See lubab rakendusel tühistada teiste asukohaallikate, näiteks GPS-i või asukohapakkujate tagastatud asukoha ja/või oleku."</string>
-    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"täpne asukoht (GPS- ja võrgupõhine)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Lubab rakendusel hankida teie täpse asukoha globaalse positsioneerimissüsteemi (GPS) või võrgu asukohaallikate (nt mobiilimastide ja WiFi) järgi. Need asukohateenused peavad olema sisse lülitatud ja teie seadme jaoks saadaval, et rakendus saaks neid kasutada. Rakendused võivad kasutada seda teie asukoha tuvastamiseks ja tarbida akut."</string>
-    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"ligikaudne asukoht (võrgupõhine)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Lubab rakendusel hankida juurdepääsu ligikaudsele asukohale. Asukoht tuletatakse asukohateenuste järgi, kasutades võrgu asukohaallikaid, nt mobiilimastid ja WiFi. Need asukohateenused peavad olema sisse lülitatud ja teie seadme jaoks saadaval, et rakendus saaks neid kasutada. Rakendused võivad kasutada seda teie ligikaudse asukoha tuvastamiseks."</string>
-    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"juurdepääs SurfaceFlingerile"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Võimaldab rakendusel kasutada SurfaceFlingeri madalatasemelisi funktsioone."</string>
-    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"loe kaadripuhvrit"</string>
-    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Võimaldab rakendusel kaadripuhvri sisu lugeda."</string>
-    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"juurdepääs InputFlingerile"</string>
-    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Lubab rakendusel kasutada InputFlingeri madalatasemelisi funktsioone."</string>
-    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"WiFi-ekraanide seadistamine"</string>
-    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Lubab rakendusel seadistada WiFi-ekraane ja nendega ühendus luua."</string>
-    <!-- no translation found for permlab_captureAudioOutput (6857134498402346708) -->
-    <skip />
-    <!-- no translation found for permdesc_captureAudioOutput (6210597754212208853) -->
-    <skip />
-    <!-- no translation found for permlab_captureVideoOutput (2246828773589094023) -->
-    <skip />
-    <!-- no translation found for permdesc_captureVideoOutput (359481658034149860) -->
-    <skip />
-    <!-- no translation found for permlab_captureSecureVideoOutput (7815398969303382016) -->
-    <skip />
-    <!-- no translation found for permdesc_captureSecureVideoOutput (2779793064709350289) -->
-    <skip />
-    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"muuda heliseadeid"</string>
-    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Võimaldab rakendusel muuta üldiseid heliseadeid, näiteks helitugevust ja seda, millist kõlarit kasutatakse väljundiks."</string>
-    <string name="permlab_recordAudio" msgid="3876049771427466323">"salvesta heli"</string>
-    <string name="permdesc_recordAudio" msgid="4906839301087980680">"Võimaldab rakendusel salvestada mikrofoniga heli. See luba võimaldab rakendusel salvestada heli igal ajal ilma teie kinnituseta."</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"piltide ja videote tegemine"</string>
-    <string name="permdesc_camera" msgid="8497216524735535009">"Võimaldab rakendusel teha kaameraga pilte ja videoid. See luba võimaldab rakendusel kasutada kaamerat mis tahes ajal teie kinnituseta."</string>
-    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"keela kaamera kasutamisel näidikutule kasutamine"</string>
-    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Lubab eelinstallitud süsteemirakendusel keelata kaamera näidikutule kasutamise."</string>
-    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"blokeeri tahvelarvuti jäädavalt"</string>
-    <string name="permlab_brick" product="default" msgid="8337817093326370537">"blokeeri telefon jäädavalt"</string>
-    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Võimaldab rakendusel kogu tahvelarvuti jäädavalt keelata. See on väga ohtlik."</string>
-    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Võimaldab rakendusel kogu telefoni jäädavalt keelata. See on väga ohtlik."</string>
-    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"sunni tahvelarvuti taaskäivituma"</string>
-    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"sunni telefoni taaskäivitus"</string>
-    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Võimaldab rakendusel sundida tahvelarvutit taaskäivituma."</string>
-    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Võimaldab rakendusel sundida telefoni taaskäivituma."</string>
-    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"juurdep. USB-ruumi failisüst."</string>
-    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"juurdepääs SD-kaardi failisüsteemile"</string>
-    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Võimaldab rakendusel failisüsteeme irdmällu paigaldada ja sealt lahutada."</string>
-    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"tühjendage USB-salvestusruum"</string>
-    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"tühjendage SD-kaart"</string>
-    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Võimaldab rakendusel vormindada irdmälu."</string>
-    <string name="permlab_asec_access" msgid="3411338632002193846">"hangi teavet sisemälu kohta"</string>
-    <string name="permdesc_asec_access" msgid="3094563844593878548">"Võimaldab rakendusel hankida sisemälu teavet."</string>
-    <string name="permlab_asec_create" msgid="6414757234789336327">"sisemälu loomine"</string>
-    <string name="permdesc_asec_create" msgid="4558869273585856876">"Lubab rakendusel luua sisemälu."</string>
-    <string name="permlab_asec_destroy" msgid="526928328301618022">"hävita sisemälu"</string>
-    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Lubab rakendusel sisemälu hävitada."</string>
-    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"Sisemälu paigaldamine/eemaldamine"</string>
-    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Võimaldab rakendusel sisemäluseadme paigaldada/eraldada."</string>
-    <string name="permlab_asec_rename" msgid="7496633954080472417">"sisemälu ümbernimetamine"</string>
-    <string name="permdesc_asec_rename" msgid="1794757588472127675">"Võimaldab rakendusel sisemälu ümber nimetada."</string>
-    <string name="permlab_vibrate" msgid="7696427026057705834">"juhtige vibreerimist"</string>
-    <string name="permdesc_vibrate" msgid="6284989245902300945">"Võimaldab rakendusel juhtida vibreerimist."</string>
-    <string name="permlab_flashlight" msgid="2155920810121984215">"juhi taskulampi"</string>
-    <string name="permdesc_flashlight" msgid="6522284794568368310">"Võimaldab rakendusel juhtida taskulampi."</string>
-    <string name="permlab_manageUsb" msgid="1113453430645402723">"USB-seadmete eelistuste ja lubade haldamine"</string>
-    <string name="permdesc_manageUsb" msgid="7776155430218239833">"Võimaldab rakendusel hallata USB-seadmete eelistusi ja lube."</string>
-    <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP-protokolli rakendamine"</string>
-    <string name="permdesc_accessMtp" msgid="6532961200486791570">"Lubab juurdepääsu tuuma MTP-draiverile MTP USB-protokolli rakendamiseks."</string>
-    <string name="permlab_hardware_test" msgid="4148290860400659146">"testi riistvara"</string>
-    <string name="permdesc_hardware_test" msgid="6597964191208016605">"Võimaldab rakendusel juhtida erinevaid välisseadmeid riistvara testimise eesmärgil."</string>
-    <string name="permlab_callPhone" msgid="3925836347681847954">"helista otse telefoninumbritele"</string>
-    <string name="permdesc_callPhone" msgid="3740797576113760827">"Võimaldab rakendusel teie sekkumiseta telefoninumbritele helistada. See võib põhjustada ootamatuid tasusid või telefonikõnesid. Pange tähele, et see ei luba rakendusel helistada hädaabinumbritele. Pahatahtlikud rakendused võivad teile kulusid tekitada, tehes telefonikõnesid teie kinnituseta."</string>
-    <string name="permlab_callPrivileged" msgid="4198349211108497879">"helista otse mis tahes telefoninumbritele"</string>
-    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Võimaldab rakendusel helistada mis tahes telefoninumbrile, sh hädaabinumbritele ilma teie sekkumiseta. Pahatahtlikud rakendused võivad teha hädaabiteenustele mittevajalikke ja ebaseaduslikke kõnesid."</string>
-    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"käivita otse CDMA-tahvelarvuti seadistamine"</string>
-    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"CDMA-telefoniseadistuse otse käivitamine"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Võimaldab rakendusel käivitada CDMA ettevalmistamise. Pahatahtlikud rakendused võivad CDMA ettevalmistamise asjatult käivitada."</string>
-    <string name="permlab_locationUpdates" msgid="7785408253364335740">"kontrolli asukoha värskendamise teatisi"</string>
-    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Võimaldab rakendusel lubada/keelata asukoha värskendamise teatised raadiost. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_checkinProperties" msgid="7855259461268734914">"juurdepääs registreerimisatribuutidele"</string>
-    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Annab rakendusele lugemis-/kirjutusõiguse registreerimisteenusega üles laaditud atribuutidele. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_bindGadget" msgid="776905339015863471">"vali vidinaid"</string>
-    <string name="permdesc_bindGadget" msgid="8261326938599049290">"Võimaldab rakendusel öelda süsteemile, milline rakendus saab kasutada milliseid vidinaid. Selle õigusega rakendus võib anda teistele rakendustele juurdepääsu isiklikele andmetele. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"muuda telefoni olekut"</string>
-    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Võimaldab rakendusel juhtida seadme telefonifunktsioone. Selle loaga rakendus saab vahetada võrke, lülitada telefoniraadiot sisse ja välja ning teha muudki ilma teid teavitamata."</string>
-    <string name="permlab_readPhoneState" msgid="9178228524507610486">"lugege telefoni olekut ja identiteeti"</string>
-    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Annab rakendusele juurdepääsu seadme telefonifunktsioonidele. See luba võimaldab rakendusel määrata telefoninumbri ja seadme ID-d ning kontrollida, kas kõne on aktiivne ja kaugnumber on kõne kaudu telefoniga ühendatud."</string>
-    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"tahvelarvuti uinumise vältimine"</string>
-    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"väldi telefoni uinumist"</string>
-    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Võimaldab rakendusel vältida tahvelarvuti uinumist."</string>
-    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Võimaldab rakendusel vältida telefoni uinumist."</string>
-    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"lülita tahvelarvuti sisse või välja"</string>
-    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"lülita telefon sisse või välja"</string>
-    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Võimaldab rakendusel tahvelarvutit sisse või välja lülitada."</string>
-    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Võimaldab rakendusel telefoni sisse või välja lülitada."</string>
-    <string name="permlab_factoryTest" msgid="3715225492696416187">"käivita tehase testrežiimis"</string>
-    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Käitage madalatasemelise tootjatestina, mis annab täieliku juurdepääsu tahvelarvuti riistvarale. Saadaval ainult siis, kui tahvelarvuti töötab tootjatesti režiimis."</string>
-    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Käivitage madalatasemelise tootjatestina, mis võimaldab täielikku juurdepääsu telefoni riistvarale. Kasutatav ainult juhul, kui telefon töötab tootja testrežiimis."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"määra taustapilt"</string>
-    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Võimaldab rakendusel määrata süsteemi taustapildi."</string>
-    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"korrigeerige oma taustapildi suurust"</string>
-    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Võimaldab rakendusel määrata süsteemi taustapildi suuruse vihjeid."</string>
-    <string name="permlab_masterClear" msgid="2315750423139697397">"lähtesta süsteem tehase vaikeseadetele"</string>
-    <string name="permdesc_masterClear" msgid="3665380492633910226">"Võimaldab rakendusel süsteemi tehaseseaded täielikult lähtestada, kustutades kõik andmed, konfiguratsiooni ja installitud rakendused."</string>
-    <string name="permlab_setTime" msgid="2021614829591775646">"kellaaja määramine"</string>
-    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Võimaldab rakendusel muuta tahvelarvuti kellaaega."</string>
-    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Võimaldab rakendusel muuta telefoni kellaaega."</string>
-    <string name="permlab_setTimeZone" msgid="2945079801013077340">"määra ajavöönd"</string>
-    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Võimaldab rakendusel muuta tahvelarvuti ajavööndit."</string>
-    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Võimaldab rakendusel muuta telefoni ajavööndit."</string>
-    <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService\'ina tegutsemine"</string>
-    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Võimaldab rakendusel helistada konto autentijatele."</string>
-    <string name="permlab_getAccounts" msgid="1086795467760122114">"leidke seadmest kontod"</string>
-    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Võimaldab rakendusel hankida tahvelarvutile teadaolevaid kontoloendeid. See võib hõlmata mis tahes kontosid, mille on loonud teie installitud rakendused."</string>
-    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Võimaldab rakendusel hankida telefonile teadaolevaid kontoloendeid. See võib hõlmata mis tahes kontosid, mille on loonud teie installitud rakendused."</string>
-    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"looge kontod ja määrake paroolid"</string>
-    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Võimaldab rakendusel kasutada kontohalduri konto autentija võimalusi, sh luua kontosid ning hankida ja määrata paroole."</string>
-    <string name="permlab_manageAccounts" msgid="4983126304757177305">"lisage või eemaldage kontosid"</string>
-    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Võimaldab rakendusel teha toiminguid, nagu kontode lisamine ja eemaldamine ning nende paroolide kustutamine."</string>
-    <string name="permlab_useCredentials" msgid="235481396163877642">"kasutage seadmes olevaid kontosid"</string>
-    <string name="permdesc_useCredentials" msgid="7984227147403346422">"Võimaldab rakendusel taotleda autentimise lubasid."</string>
-    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"vaadake võrguühendusi"</string>
-    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Lubab rakendusel vaadata teavet võrguühenduste kohta, näiteks seda, millised võrgud on olemas ja ühendatud."</string>
-    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"täielik juurdepääs võrgule"</string>
-    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Võimaldab rakendusel luua võrgupesasid ja kasutada kohandatud võrguprotokolle. Brauser ja teised rakendused annavad vahendid andmete saatmiseks Internetti, nii et seda luba ei ole vaja andmete saatmiseks Internetti."</string>
-    <string name="permlab_writeApnSettings" msgid="505660159675751896">"võrguseadete ja -liikluse muutmine/hõivamine"</string>
-    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Võimaldab rakendusel muuta võrguseadeid ning peatada ja kontrollida kogu võrguliiklust, näiteks muuta mis tahes APN-i puhverserverit ja porti. Pahatahtlikud rakendused võivad võrgupakette jälgida, ümber suunata või muuta teie teadmata."</string>
-    <string name="permlab_changeNetworkState" msgid="958884291454327309">"muuda võrguühenduvust"</string>
-    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Võimaldab rakendusel muuta võrguühenduvuse olekut."</string>
-    <string name="permlab_changeTetherState" msgid="5952584964373017960">"Jagatud ühenduvuse muutmine"</string>
-    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Võimaldab rakendusel muuta jagatud võrgu ühenduvuse olekut."</string>
-    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"muuda taustaandmete kasutusseadeid"</string>
-    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Võimaldab rakendusel muuta taustaandmete kasutuse seadeid."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"vaadake WiFi-ühendusi"</string>
-    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Võimaldab rakendusel vaadata teavet WiFi-võrgu kohta, näiteks ühendatud WiFi-seadmete nimesid ja seda, kas WiFi on lubatud."</string>
-    <string name="permlab_changeWifiState" msgid="6550641188749128035">"ühendage ja katkestage ühendus WiFi-ga"</string>
-    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Võimaldab rakendusel luua ja katkestada ühenduse WiFi-pääsupunktidega ning teha muudatusi seadme konfiguratsioonis WiFi-võrkudesse."</string>
-    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"luba WiFi multiedastusvastuvõtt"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Võimaldab rakendusel vastu võtta pakette, mis on saadetud kõikidele WiFi-võrguga ühendatud seadmetele, mis kasutavad multiedastuse aadresse, mitte ainult teie tahvelarvutit. See võtab rohkem energiat kui mittemultiedastuse režiim."</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Võimaldab rakendusel vastu võtta pakette, mis on saadetud kõikidele WiFi-võrguga ühendatud seadmetele, mis kasutavad multiedastuse aadresse, mitte ainult teie telefoni. See võtab rohkem energiat kui mittemultiedastuse režiim."</string>
-    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"juurdepääs Bluetoothi ​​seadetele"</string>
-    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Võimaldab rakendusel seadistada kohalikku Bluetooth-tahvelarvutit ning leida ja siduda seda kaugseadmetega."</string>
-    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Võimaldab rakendusel seadistada kohalikku Bluetooth-telefoni ning leida ja siduda seda kaugseadmetega."</string>
-    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX-iga ühenduse loomine ja ühenduse katkestamine"</string>
-    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Võimaldab rakendusel määrata, kas WiMAX on lubatud, ja vaadata teavet kõikide ühendatud WiMAX-võrkude kohta."</string>
-    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-i oleku muutmine"</string>
-    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Võimaldab rakendusel luua ja katkestada tahvelarvuti ühenduse WiMAX-i võrkudega."</string>
-    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Võimaldab rakendusel luua ja katkestada telefoni ühenduse WiMAX-i võrkudega."</string>
-    <string name="permlab_bluetooth" msgid="6127769336339276828">"siduge Bluetoothi seadmetega"</string>
-    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Võimaldab rakendusel vaadata tahvelarvuti Bluetooth-konfiguratsiooni ning luua ja heaks kiita ühendusi seotud seadmetega."</string>
-    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Võimaldab rakendusel vaadata telefoni Bluetooth-konfiguratsiooni ning luua ja heaks kiita ühendusi seotud seadmetega."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"lähiväljaside juhtimine"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"Võimaldab rakendusel suhelda lähiväljaside (NFC) märgendite, kaartide ja lugeritega."</string>
-    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"keelake ekraanilukk"</string>
-    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Võimaldab rakendusel keelata klahviluku ja muu seotud parooli turvalisuse. Näiteks keelab telefon klahviluku sissetuleva kõne vastuvõtmisel ja lubab klahviluku uuesti, kui kõne on lõpetatud."</string>
-    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"loe sünkroonimisseadeid"</string>
-    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Võimaldab rakendusel lugeda konto sünkroonimisseadeid. Näiteks võib see määrata, kas rakendus Inimesed on kontoga sünkroonitud."</string>
-    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"lülitage sünkroonimine sisse ja välja"</string>
-    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Võimaldab rakendusel muuta konto sünkroonimisseadeid. Näiteks saab seda kasutada, et lubada rakenduse Inimesed sünkroonimine kontoga."</string>
-    <string name="permlab_readSyncStats" msgid="7396577451360202448">"loe sünkroonimisstatistikat"</string>
-    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Võimaldab rakendusel lugeda konto sünkroonimisstatistikat, sh sünkroonimissündmuste ajalugu ja sünkroonitud andmete hulka."</string>
-    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"loe tellitud kanaleid"</string>
-    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Võimaldab rakendusel saada üksikasju praegu sünkroonitavate voogude kohta."</string>
-    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"kirjuta tellitud kanaleid"</string>
-    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Võimaldab rakendusel muuta teie praegu sünkroonitud vooge. Pahatahtlikud rakendused võivad muuta teie sünkroonitud vooge."</string>
-    <string name="permlab_readDictionary" msgid="4107101525746035718">"lugege termineid, mis te sõnastikku lisasite"</string>
-    <string name="permdesc_readDictionary" msgid="659614600338904243">"Võimaldab rakendusel lugeda kõiki sõnu, nimesid ja fraase, mille kasutaja on kasutaja sõnaraamatusse salvestanud."</string>
-    <string name="permlab_writeDictionary" msgid="2183110402314441106">"sõnade lisamine kasutaja määratletud sõnastikku"</string>
-    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Võimaldab rakendusel kirjutada kasutajasõnastikku uusi sõnu."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"kaitstud salvestusruumi juurdepääsu katsetamine"</string>
-    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"kaitstud salvestusruumi juurdepääsu katsetamine"</string>
-    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"Võimaldab rakendusel testida luba USB-salvestuseks, mis on saadaval tulevastes seadmetes."</string>
-    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"Võimaldab rakendusel katsetada SD-kaardi luba, mis on saadaval tulevastel seadmetel."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"muutke, kustut. USB-ruumi sisu"</string>
-    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"SD-kaardi sisu muutmine või kustutamine"</string>
-    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Võimaldab rakendusel kirjutada USB-mäluseadmele."</string>
-    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Võimaldab rakendusel kirjutada SD-kaardile."</string>
-    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"sisemälu sisu muutm./kustut."</string>
-    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Võimaldab rakendusel muuta sisemise andmekandja sisu."</string>
-    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"dokumendi talletuse haldamine"</string>
-    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"Lubab rakendusel hallata dokumendi talletamist."</string>
-    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"juurdepääs välismäluseadmele (kõikidele kasutajatele)"</string>
-    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Võimaldab rakenduse kõikidel kasutajatel pöörduda välismäluseadme poole."</string>
-    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"juurdepääs vahemälu failisüsteemile"</string>
-    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Võimaldab rakendusel vahemälu failisüsteemi lugeda ja kirjutada."</string>
-    <string name="permlab_use_sip" msgid="5986952362795870502">"Interneti-kõnede tegemine/vastuvõtmine"</string>
-    <string name="permdesc_use_sip" msgid="4717632000062674294">"Võimaldab rakendusel kasutada SIP-teenust Interneti-kõnede valimiseks/vastuvõtmiseks."</string>
-    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"võrgukasutuse ajaloo lugemine"</string>
-    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Võimaldab rakendusel lugeda võrgukasutuse ajalugu teatud võrkude ja rakenduste puhul."</string>
-    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"võrgueeskirjade haldamine"</string>
-    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Võimaldab rakendusel hallata võrgueeskirju ja määratleda rakendusespetsiifilisi reegleid."</string>
-    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"võrgukasutuse arvestamise muutmine"</string>
-    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Võimaldab rakendusel muuta võrgukasutuse loendamist rakenduste suhtes. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"sokli märkide muutmine"</string>
-    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"Lubab rakendusel muuta marsruutimiseks sokli märke"</string>
-    <string name="permlab_accessNotifications" msgid="7673416487873432268">"juurdepääsu märguanded"</string>
-    <string name="permdesc_accessNotifications" msgid="458457742683431387">"Võimaldab rakendusel tuua, kontrollida ja kustutada märguandeid, sh neid, mille on postitanud teised rakendused."</string>
-    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"seo märguannete kuulamisteenusega"</string>
-    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Võimaldab omanikul siduda märguannete kuulamisteenuse ülemise taseme kasutajaliidese. Seda ei tohiks tavarakenduste puhul kunagi vaja olla."</string>
-    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"operaatoripoolse konfiguratsioonirakenduse aktiveerimine"</string>
-    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Lubab omanikul aktiveerida operaatoripoolse konfiguratsioonirakenduse. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="policylab_limitPassword" msgid="4497420728857585791">"Parooli reeglite määramine"</string>
-    <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontrollige ekraaniluku avamise paroolide pikkust ja tähemärke."</string>
-    <string name="policylab_watchLogin" msgid="914130646942199503">"Ekraani avamiskatsed"</string>
-    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Jälgib ekraani avamisel valesti sisestatud paroolide arvu ja lukustab tahvelarvuti või kustutab kõik selle andmed, kui vale parool sisestatakse liiga palju kordi."</string>
-    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Jälgib ekraani avamisel valesti sisestatud paroolide arvu ja lukustab telefoni või kustutab kõik selle andmed, kui vale parool sisestatakse liiga palju kordi."</string>
-    <string name="policylab_resetPassword" msgid="2620077191242688955">"Ekraaniluku parooli muutmine"</string>
-    <string name="policydesc_resetPassword" msgid="605963962301904458">"Ekraaniluku parooli muutmine."</string>
-    <string name="policylab_forceLock" msgid="2274085384704248431">"Ekraani lukustamine"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Määrake, kuidas ja millal ekraan lukustub."</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"Kõikide andmete kustutamine"</string>
-    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Kustutage tahvelarvuti andmed hoiatamata, lähtestades arvuti tehaseandmetele."</string>
-    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Kustuta telefoniandmed hoiatuseta, lähtestades telefoni tehaseandmetele."</string>
-    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Määra seadme globaalne puhverserver"</string>
-    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Eeskirjade lubamise ajal kasutatava seadme globaalse puhverserveri määramine. Ainult esimese seadme administraator määrab tõhusa globaalse puhverserveri."</string>
-    <string name="policylab_expirePassword" msgid="885279151847254056">"Ekraaniluku parooli aegumise määramine"</string>
-    <string name="policydesc_expirePassword" msgid="1729725226314691591">"Määrake ekraaniluku parooli muutmissagedus."</string>
-    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Salvestamise krüpt. määramine"</string>
-    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Nõua salvestatud rakenduse andmete krüpteerimist."</string>
-    <string name="policylab_disableCamera" msgid="6395301023152297826">"Keela kaamerad"</string>
-    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Vältige seadme kõigi kaamerate kasutamist."</string>
-    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Klahviluku funkts. keelamine"</string>
-    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Takistage klahviluku mõne funktsiooni kasutamist."</string>
-  <string-array name="phoneTypes">
-    <item msgid="8901098336658710359">"Kodu"</item>
-    <item msgid="869923650527136615">"Mobiil"</item>
-    <item msgid="7897544654242874543">"Töö"</item>
-    <item msgid="1103601433382158155">"Tööfaks"</item>
-    <item msgid="1735177144948329370">"Kodufaks"</item>
-    <item msgid="603878674477207394">"Piipar"</item>
-    <item msgid="1650824275177931637">"Muu"</item>
-    <item msgid="9192514806975898961">"Kohandatud"</item>
-  </string-array>
-  <string-array name="emailAddressTypes">
-    <item msgid="8073994352956129127">"Kodu"</item>
-    <item msgid="7084237356602625604">"Töö"</item>
-    <item msgid="1112044410659011023">"Muu"</item>
-    <item msgid="2374913952870110618">"Kohandatud"</item>
-  </string-array>
-  <string-array name="postalAddressTypes">
-    <item msgid="6880257626740047286">"Kodu"</item>
-    <item msgid="5629153956045109251">"Töö"</item>
-    <item msgid="4966604264500343469">"Muu"</item>
-    <item msgid="4932682847595299369">"Kohandatud"</item>
-  </string-array>
-  <string-array name="imAddressTypes">
-    <item msgid="1738585194601476694">"Kodu"</item>
-    <item msgid="1359644565647383708">"Töö"</item>
-    <item msgid="7868549401053615677">"Muu"</item>
-    <item msgid="3145118944639869809">"Kohandatud"</item>
-  </string-array>
-  <string-array name="organizationTypes">
-    <item msgid="7546335612189115615">"Töö"</item>
-    <item msgid="4378074129049520373">"Muu"</item>
-    <item msgid="3455047468583965104">"Kohandatud"</item>
-  </string-array>
-  <string-array name="imProtocols">
-    <item msgid="8595261363518459565">"AIM"</item>
-    <item msgid="7390473628275490700">"Windows Live"</item>
-    <item msgid="7882877134931458217">"Yahoo"</item>
-    <item msgid="5035376313200585242">"Skype"</item>
-    <item msgid="7532363178459444943">"QQ"</item>
-    <item msgid="3713441034299660749">"Google Talk"</item>
-    <item msgid="2506857312718630823">"ICQ"</item>
-    <item msgid="1648797903785279353">"Jabber"</item>
-  </string-array>
-    <string name="phoneTypeCustom" msgid="1644738059053355820">"Kohandatud"</string>
-    <string name="phoneTypeHome" msgid="2570923463033985887">"Kodune telefon"</string>
-    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mobiil"</string>
-    <string name="phoneTypeWork" msgid="8863939667059911633">"Töökoha telefon"</string>
-    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Töökoha faksinumber"</string>
-    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Kodune faksinumber"</string>
-    <string name="phoneTypePager" msgid="7582359955394921732">"Piipar"</string>
-    <string name="phoneTypeOther" msgid="1544425847868765990">"Muu"</string>
-    <string name="phoneTypeCallback" msgid="2712175203065678206">"Tagasihelistus"</string>
-    <string name="phoneTypeCar" msgid="8738360689616716982">"Auto"</string>
-    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Ettevõtte üldtelefon"</string>
-    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
-    <string name="phoneTypeMain" msgid="6766137010628326916">"Peamine"</string>
-    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Teine faks"</string>
-    <string name="phoneTypeRadio" msgid="4093738079908667513">"Raadiotelefon"</string>
-    <string name="phoneTypeTelex" msgid="3367879952476250512">"Teleksinumber"</string>
-    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
-    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Töökoha mobiiltelefon"</string>
-    <string name="phoneTypeWorkPager" msgid="649938731231157056">"Töökoha piipar"</string>
-    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Assistent"</string>
-    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
-    <string name="eventTypeCustom" msgid="7837586198458073404">"Kohandatud"</string>
-    <string name="eventTypeBirthday" msgid="2813379844211390740">"Sünnipäev"</string>
-    <string name="eventTypeAnniversary" msgid="3876779744518284000">"Aastapäev"</string>
-    <string name="eventTypeOther" msgid="7388178939010143077">"Muu"</string>
-    <string name="emailTypeCustom" msgid="8525960257804213846">"Kohandatud"</string>
-    <string name="emailTypeHome" msgid="449227236140433919">"Kodune e-post"</string>
-    <string name="emailTypeWork" msgid="3548058059601149973">"Töökoha e-post"</string>
-    <string name="emailTypeOther" msgid="2923008695272639549">"Muu"</string>
-    <string name="emailTypeMobile" msgid="119919005321166205">"Mobiil"</string>
-    <string name="postalTypeCustom" msgid="8903206903060479902">"Kohandatud"</string>
-    <string name="postalTypeHome" msgid="8165756977184483097">"Kodune aadress"</string>
-    <string name="postalTypeWork" msgid="5268172772387694495">"Töökoha aadress"</string>
-    <string name="postalTypeOther" msgid="2726111966623584341">"Muu"</string>
-    <string name="imTypeCustom" msgid="2074028755527826046">"Kohandatud"</string>
-    <string name="imTypeHome" msgid="6241181032954263892">"Kodune IM-aadress"</string>
-    <string name="imTypeWork" msgid="1371489290242433090">"Töökoha IM-aadress"</string>
-    <string name="imTypeOther" msgid="5377007495735915478">"Muu"</string>
-    <string name="imProtocolCustom" msgid="6919453836618749992">"Kohandatud"</string>
-    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
-    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
-    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
-    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
-    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
-    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
-    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
-    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
-    <string name="orgTypeWork" msgid="29268870505363872">"Töö"</string>
-    <string name="orgTypeOther" msgid="3951781131570124082">"Muu"</string>
-    <string name="orgTypeCustom" msgid="225523415372088322">"Kohandatud"</string>
-    <string name="relationTypeCustom" msgid="3542403679827297300">"Kohandatud"</string>
-    <string name="relationTypeAssistant" msgid="6274334825195379076">"Assistent"</string>
-    <string name="relationTypeBrother" msgid="8757913506784067713">"Vend"</string>
-    <string name="relationTypeChild" msgid="1890746277276881626">"Laps"</string>
-    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Elukaaslane"</string>
-    <string name="relationTypeFather" msgid="5228034687082050725">"Isa"</string>
-    <string name="relationTypeFriend" msgid="7313106762483391262">"Sõber"</string>
-    <string name="relationTypeManager" msgid="6365677861610137895">"Haldur"</string>
-    <string name="relationTypeMother" msgid="4578571352962758304">"Ema"</string>
-    <string name="relationTypeParent" msgid="4755635567562925226">"Vanem"</string>
-    <string name="relationTypePartner" msgid="7266490285120262781">"Partner"</string>
-    <string name="relationTypeReferredBy" msgid="101573059844135524">"Viitas:"</string>
-    <string name="relationTypeRelative" msgid="1799819930085610271">"Sugulane"</string>
-    <string name="relationTypeSister" msgid="1735983554479076481">"Õde"</string>
-    <string name="relationTypeSpouse" msgid="394136939428698117">"Abikaasa"</string>
-    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Kohandatud"</string>
-    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Kodu"</string>
-    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Töö"</string>
-    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Muu"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Sisestage PIN-kood"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Sisestage PUK-kood ja uus PIN-kood"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kood"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Uus PIN-kood"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Puudutage parooli sisestamiseks"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Avamiseks sisestage parool"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Avamiseks sisestage PIN-kood"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Vale PIN-kood."</string>
-    <string name="keyguard_label_text" msgid="861796461028298424">"Avamiseks vajutage menüüklahvi, seejärel klahvi 0."</string>
-    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Hädaabinumber"</string>
-    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Teenus puudub."</string>
-    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Ekraan lukus."</string>
-    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Vajutage avamiseks või hädaabikõne tegemiseks menüünuppu"</string>
-    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Vajutage avamiseks menüüklahvi."</string>
-    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Avamiseks joonistage muster"</string>
-    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Hädaabikõne"</string>
-    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Kõne juurde tagasi"</string>
-    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Õige."</string>
-    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Proovige uuesti"</string>
-    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Proovige uuesti"</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimaalne teenusega Face Unlock avamise katsete arv on ületatud"</string>
-    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="lockscreen_charged" msgid="321635745684060624">"Laetud"</string>
-    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="lockscreen_low_battery" msgid="1482873981919249740">"Ühendage laadija."</string>
-    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM-kaarti pole"</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Tahvelarvutis pole SIM-kaarti."</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonis pole SIM-kaarti."</string>
-    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Sisestage SIM-kaart."</string>
-    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM-kaart puudub või on loetamatu. Sisestage SIM-kaart."</string>
-    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Kasutamiskõlbmatu SIM-kaart."</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"SIM-kaart on jäädavalt keelatud.\n Teise SIM-kaardi saamiseks võtke ühendust oma traadita side teenusepakkujaga."</string>
-    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Eelmise loo nupp"</string>
-    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Nupp Järgmine rada"</string>
-    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Nupp Peata"</string>
-    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Nupp Esita"</string>
-    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Nupp Peata"</string>
-    <string name="emergency_calls_only" msgid="6733978304386365407">"Ainult hädaabikõned"</string>
-    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Võrk suletud"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM-kaart on PUK-lukus."</string>
-    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Vaadake kasutusjuhendit või võtke ühendust klienditeenindusega."</string>
-    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM-kaart on lukus."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM-kaardi avamine ..."</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Olete oma avamismustrit <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti koostanud. \n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Olete parooli <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud. \n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Olete PIN-koodi <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud. \n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada Google\'i sisselogimisega.\n\n Proovige <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada Google\'i sisselogimisega.\n\n Proovige <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda tahvelarvutit valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> edutut katset lähtestatakse tahvelarvuti tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda telefoni valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse telefon tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Olete püüdnud tahvelarvutit <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Tahvelarvuti lähtestatakse nüüd tehase vaikeseadetele."</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Olete püüdnud telefoni <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Telefon lähtestatakse nüüd tehase vaikeseadetele."</string>
-    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Proovige uuesti <xliff:g id="NUMBER">%d</xliff:g> sekundi pärast."</string>
-    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Kas unustasite mustri?"</string>
-    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Konto avamine"</string>
-    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Liiga palju mustrikatseid"</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Avamiseks logige sisse oma Google\'i kontoga."</string>
-    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Kasutajanimi (e-post)"</string>
-    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Parool"</string>
-    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Logi sisse"</string>
-    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Vale kasutajanimi või parool."</string>
-    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"Kas unustasite oma kasutajanime või parooli?\nKülastage aadressi "<b>"google.com/accounts/recovery"</b>"."</string>
-    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Kontrollimine ..."</string>
-    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Ava"</string>
-    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Heli sisse"</string>
-    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Heli välja"</string>
-    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Mustri koostamisega on alustatud"</string>
-    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Muster on kustutatud"</string>
-    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Lahter on lisatud"</string>
-    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Muster on valmis"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Vidin %2$d/%3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Vidina lisamine."</string>
-    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tühi"</string>
-    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Avamisala on laiendatud."</string>
-    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Avamisala on ahendatud."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
-    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Kasutaja valija"</string>
-    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Olek"</string>
-    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kaamera"</string>
-    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Meedia juhtnupud"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Vidina ümberkorraldamine algas."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidina ümberkorraldamine lõppes."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> on kustutatud."</string>
-    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Avamisala laiendamine."</string>
-    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Lohistamisega avamine."</string>
-    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mustriga avamine."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Näoga avamine."</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-koodiga avamine."</string>
-    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parooliga avamine."</string>
-    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mustri ala."</string>
-    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Lohistamisala."</string>
-    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
-    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
-    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
-    <string name="granularity_label_character" msgid="7336470535385009523">"tähemärk"</string>
-    <string name="granularity_label_word" msgid="7075570328374918660">"sõna"</string>
-    <string name="granularity_label_link" msgid="5815508880782488267">"link"</string>
-    <string name="granularity_label_line" msgid="5764267235026120888">"rida"</string>
-    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%P</xliff:g>"</string>
-    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g> <xliff:g id="AMPM">%p</xliff:g>"</string>
-    <string name="factorytest_failed" msgid="5410270329114212041">"Tehasetest ebaõnnestus"</string>
-    <string name="factorytest_not_system" msgid="4435201656767276723">"Toimingut FACTORY_TEST toetatakse ainult kausta \\system\\app installitud pakettide puhul."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"Ei leitud ühtegi paketti, mis võimaldaks toimingut FACTORY_TEST."</string>
-    <string name="factorytest_reboot" msgid="6320168203050791643">"Taaskäivita"</string>
-    <string name="js_dialog_title" msgid="1987483977834603872">"Leht  „<xliff:g id="TITLE">%s</xliff:g>” ütleb järgmist."</string>
-    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
-    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Navigeerimise kinnitamine"</string>
-    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Lahku sellelt lehelt"</string>
-    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Jää sellele lehele"</string>
-    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nKas soovite kindlasti sellelt lehelt lahkuda?"</string>
-    <string name="save_password_label" msgid="6860261758665825069">"Kinnita"</string>
-    <string name="double_tap_toast" msgid="4595046515400268881">"Vihje: suurendamiseks ja vähendamiseks puudutage kaks korda."</string>
-    <string name="autofill_this_form" msgid="4616758841157816676">"Automaatne täitmine"</string>
-    <string name="setup_autofill" msgid="7103495070180590814">"Automaatse täitmise seadistamine"</string>
-    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
-    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
-    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
-    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
-    <string name="autofill_province" msgid="2231806553863422300">"Provints"</string>
-    <string name="autofill_postal_code" msgid="4696430407689377108">"Sihtnumber"</string>
-    <string name="autofill_state" msgid="6988894195520044613">"Olek"</string>
-    <string name="autofill_zip_code" msgid="8697544592627322946">"Sihtnumber"</string>
-    <string name="autofill_county" msgid="237073771020362891">"Maakond"</string>
-    <string name="autofill_island" msgid="4020100875984667025">"Saar"</string>
-    <string name="autofill_district" msgid="8400735073392267672">"Piirkond"</string>
-    <string name="autofill_department" msgid="5343279462564453309">"Osakond"</string>
-    <string name="autofill_prefecture" msgid="2028499485065800419">"Prefektuur"</string>
-    <string name="autofill_parish" msgid="8202206105468820057">"Vald"</string>
-    <string name="autofill_area" msgid="3547409050889952423">"Piirkond"</string>
-    <string name="autofill_emirate" msgid="2893880978835698818">"Emiraat"</string>
-    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"lugege oma veebijärjehoidjaid ja -ajalugu"</string>
-    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"Võimaldab rakendusel lugeda kõikide URL-ide ajalugu, mida brauser on külastanud, ja kõiki brauseri järjehoidjaid. Märkus: see luba ei pruugi jõustuda kolmanda osapoole brauseritega või teiste veebisirvimisvõimega rakendustega."</string>
-    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"kirjutage veebijärjehoidjaid ja -ajalugu"</string>
-    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Võimaldab rakendusel muuta tahvelarvutisse salvestatud brauseri ajalugu või järjehoidjaid. See võimaldab rakendusel kustutada või muuta brauseri andmeid. Märkus: see luba ei pruugi jõustuda kolmanda osapoole brauserites või teistes veebisirvimisvõimega rakendustes."</string>
-    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Võimaldab rakendusel muuta telefoni salvestatud brauseri ajalugu või järjehoidjaid. See võimaldab rakendusel kustutada või muuta brauseri andmeid. Märkus: see luba ei pruugi jõustuda kolmanda osapoole brauserites või teistes veebisirvimisvõimega rakendustes."</string>
-    <string name="permlab_setAlarm" msgid="1379294556362091814">"määrake äratus"</string>
-    <string name="permdesc_setAlarm" msgid="316392039157473848">"Võimaldab rakendusel seada installitud äratuskellarakenduses äratuse. Mõned äratuskellarakendused ei pruugi seda funktsiooni juurutada."</string>
-    <string name="permlab_addVoicemail" msgid="5525660026090959044">"lisa kõneposti"</string>
-    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Võimaldab rakendusel lisada sõnumeid teie kõneposti postkasti."</string>
-    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Brauseri geolokatsiooniõiguste muutmine"</string>
-    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Võimaldab rakendusel muuta brauseri geolokatsiooniõigusi. Pahatahtlikud rakendused võivad seda kasutada asukohateabe saatmise lubamiseks suvalistele veebisaitidele."</string>
-    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"pakettide kinnitamine"</string>
-    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"Võimaldab rakendusel kinnitada, et paketti saab installida."</string>
-    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"sidumine paketi kinnitajaga"</string>
-    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"Lubab omanikul teha taotlusi paketi kinnitajate kohta. Tavarakenduste puhul ei peaks seda kunagi vaja minema."</string>
-    <string name="permlab_serialPort" msgid="546083327654631076">"juurdepääs jadaportidele"</string>
-    <string name="permdesc_serialPort" msgid="2991639985224598193">"Võimaldab omanikul SerialManageri API-liidese abil jadaportidele juurde pääseda."</string>
-    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"väline juurdepääs sisupakkujatele"</string>
-    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"Võimaldab valdajal hankida juurdepääsu sisupakkujatele kesta kaudu. Pole kunagi vajalik tavaliste rakenduste puhul."</string>
-    <string name="permlab_updateLock" msgid="3527558366616680889">"seadme autom. värskendamiste takistamine"</string>
-    <string name="permdesc_updateLock" msgid="1655625832166778492">"Võimaldab valdajal pakkuda süsteemile teavet selle kohta, kas on sobiv aeg mitteinteraktiivseks taaskäivitamiseks, et viia seade üle uuele versioonile."</string>
-    <string name="save_password_message" msgid="767344687139195790">"Kas soovite, et brauser jätaks selle parooli meelde?"</string>
-    <string name="save_password_notnow" msgid="6389675316706699758">"Mitte praegu"</string>
-    <string name="save_password_remember" msgid="6491879678996749466">"Pidage meeles"</string>
-    <string name="save_password_never" msgid="8274330296785855105">"Mitte kunagi"</string>
-    <string name="open_permission_deny" msgid="7374036708316629800">"Teil pole luba selle lehe avamiseks."</string>
-    <string name="text_copied" msgid="4985729524670131385">"Lõikelauale kopeeritud tekst."</string>
-    <string name="more_item_label" msgid="4650918923083320495">"Rohkem"</string>
-    <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menüü+"</string>
-    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"tühik"</string>
-    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"sisestusklahv"</string>
-    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"kustuta"</string>
-    <string name="search_go" msgid="8298016669822141719">"Otsing"</string>
-    <string name="searchview_description_search" msgid="6749826639098512120">"Otsing"</string>
-    <string name="searchview_description_query" msgid="5911778593125355124">"Otsingupäring"</string>
-    <string name="searchview_description_clear" msgid="1330281990951833033">"Tühjenda päring"</string>
-    <string name="searchview_description_submit" msgid="2688450133297983542">"Päringu esitamine"</string>
-    <string name="searchview_description_voice" msgid="2453203695674994440">"Häälotsing"</string>
-    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Kas lubada puudutusega uurimine?"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> soovib lubada puudutusega uurimise. Kui puudutusega uurimine on sisse lülitatud, kuulete või näete kirjeldusi asjade kohta, mis on teie sõrme all, või saate suhelda tahvelarvutiga liigutuste abil."</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> soovib lubada puudutusega uurimise. Kui puudutusega uurimine on sisse lülitatud, kuulete või näete kirjeldusi asjade kohta, mis on teie sõrme all, või saate suhelda telefoniga liigutuste abil."</string>
-    <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 kuu tagasi"</string>
-    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Varem kui 1 kuu tagasi"</string>
-  <plurals name="num_seconds_ago">
-    <item quantity="one" msgid="4869870056547896011">"1 sekund tagasi"</item>
-    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> sekundit tagasi"</item>
-  </plurals>
-  <plurals name="num_minutes_ago">
-    <item quantity="one" msgid="3306787433088810191">"1 minut tagasi"</item>
-    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> minutit tagasi"</item>
-  </plurals>
-  <plurals name="num_hours_ago">
-    <item quantity="one" msgid="9150797944610821849">"1 tund tagasi"</item>
-    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> tundi tagasi"</item>
-  </plurals>
-  <plurals name="last_num_days">
-    <item quantity="other" msgid="3069992808164318268">"Viimased <xliff:g id="COUNT">%d</xliff:g> päeva"</item>
-  </plurals>
-    <string name="last_month" msgid="3959346739979055432">"Eelmisel kuul"</string>
-    <string name="older" msgid="5211975022815554840">"Vanem"</string>
-  <plurals name="num_days_ago">
-    <item quantity="one" msgid="861358534398115820">"eile"</item>
-    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> päeva tagasi"</item>
-  </plurals>
-  <plurals name="in_num_seconds">
-    <item quantity="one" msgid="2729745560954905102">"1 sekundi pärast"</item>
-    <item quantity="other" msgid="1241926116443974687">"<xliff:g id="COUNT">%d</xliff:g> sekundi pärast"</item>
-  </plurals>
-  <plurals name="in_num_minutes">
-    <item quantity="one" msgid="8793095251325200395">"1 minuti pärast"</item>
-    <item quantity="other" msgid="3330713936399448749">"<xliff:g id="COUNT">%d</xliff:g> minuti pärast"</item>
-  </plurals>
-  <plurals name="in_num_hours">
-    <item quantity="one" msgid="7164353342477769999">"1 tunni pärast"</item>
-    <item quantity="other" msgid="547290677353727389">"<xliff:g id="COUNT">%d</xliff:g> tunni pärast"</item>
-  </plurals>
-  <plurals name="in_num_days">
-    <item quantity="one" msgid="5413088743009839518">"homme"</item>
-    <item quantity="other" msgid="5109449375100953247">"<xliff:g id="COUNT">%d</xliff:g> päeva pärast"</item>
-  </plurals>
-  <plurals name="abbrev_num_seconds_ago">
-    <item quantity="one" msgid="1849036840200069118">"1 s tagasi"</item>
-    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> sekundit tagasi"</item>
-  </plurals>
-  <plurals name="abbrev_num_minutes_ago">
-    <item quantity="one" msgid="6361490147113871545">"1 minut tagasi"</item>
-    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> minutit tagasi"</item>
-  </plurals>
-  <plurals name="abbrev_num_hours_ago">
-    <item quantity="one" msgid="4796212039724722116">"1 tund tagasi"</item>
-    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> tundi tagasi"</item>
-  </plurals>
-  <plurals name="abbrev_num_days_ago">
-    <item quantity="one" msgid="8463161711492680309">"eile"</item>
-    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> päeva tagasi"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_seconds">
-    <item quantity="one" msgid="5842225370795066299">"1 sekundi pärast"</item>
-    <item quantity="other" msgid="5495880108825805108">"<xliff:g id="COUNT">%d</xliff:g> sekundi pärast"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_minutes">
-    <item quantity="one" msgid="562786149928284878">"1 minuti pärast"</item>
-    <item quantity="other" msgid="4216113292706568726">"<xliff:g id="COUNT">%d</xliff:g> minuti pärast"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_hours">
-    <item quantity="one" msgid="3274708118124045246">"1 tunni pärast"</item>
-    <item quantity="other" msgid="3705373766798013406">"<xliff:g id="COUNT">%d</xliff:g> tunni pärast"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_days">
-    <item quantity="one" msgid="2178576254385739855">"homme"</item>
-    <item quantity="other" msgid="2973062968038355991">"<xliff:g id="COUNT">%d</xliff:g> päeva pärast"</item>
-  </plurals>
-    <string name="preposition_for_date" msgid="9093949757757445117">"kuupäeval <xliff:g id="DATE">%s</xliff:g>"</string>
-    <string name="preposition_for_time" msgid="5506831244263083793">"kell <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="preposition_for_year" msgid="5040395640711867177">"aastal <xliff:g id="YEAR">%s</xliff:g>"</string>
-    <string name="day" msgid="8144195776058119424">"päev"</string>
-    <string name="days" msgid="4774547661021344602">"päeva"</string>
-    <string name="hour" msgid="2126771916426189481">"tund"</string>
-    <string name="hours" msgid="894424005266852993">"tundi"</string>
-    <string name="minute" msgid="9148878657703769868">"min"</string>
-    <string name="minutes" msgid="5646001005827034509">"min"</string>
-    <string name="second" msgid="3184235808021478">"s"</string>
-    <string name="seconds" msgid="3161515347216589235">"s"</string>
-    <string name="week" msgid="5617961537173061583">"nädal"</string>
-    <string name="weeks" msgid="6509623834583944518">"nädalat"</string>
-    <string name="year" msgid="4001118221013892076">"aasta"</string>
-    <string name="years" msgid="6881577717993213522">"aastat"</string>
-  <plurals name="duration_seconds">
-    <item quantity="one" msgid="6962015528372969481">"1 sekund"</item>
-    <item quantity="other" msgid="1886107766577166786">"<xliff:g id="COUNT">%d</xliff:g> sekundit"</item>
-  </plurals>
-  <plurals name="duration_minutes">
-    <item quantity="one" msgid="4915414002546085617">"1 minut"</item>
-    <item quantity="other" msgid="3165187169224908775">"<xliff:g id="COUNT">%d</xliff:g> minutit"</item>
-  </plurals>
-  <plurals name="duration_hours">
-    <item quantity="one" msgid="8917467491248809972">"1 tund"</item>
-    <item quantity="other" msgid="3863962854246773930">"<xliff:g id="COUNT">%d</xliff:g> tundi"</item>
-  </plurals>
-    <string name="VideoView_error_title" msgid="3534509135438353077">"Probleem videoga"</string>
-    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"See video ei sobi voogesituseks selles seadmes."</string>
-    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Videot ei saa esitada."</string>
-    <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
-    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="noon" msgid="7245353528818587908">"keskpäev"</string>
-    <string name="Noon" msgid="3342127745230013127">"Keskpäev"</string>
-    <string name="midnight" msgid="7166259508850457595">"kesköö"</string>
-    <string name="Midnight" msgid="5630806906897892201">"Kesköö"</string>
-    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
-    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
-    <string name="selectAll" msgid="6876518925844129331">"Vali kõik"</string>
-    <string name="cut" msgid="3092569408438626261">"Lõika"</string>
-    <string name="copy" msgid="2681946229533511987">"Kopeeri"</string>
-    <string name="paste" msgid="5629880836805036433">"Kleebi"</string>
-    <string name="replace" msgid="5781686059063148930">"Asenda..."</string>
-    <string name="delete" msgid="6098684844021697789">"Kustuta"</string>
-    <string name="copyUrl" msgid="2538211579596067402">"Kopeeri URL"</string>
-    <string name="selectTextMode" msgid="1018691815143165326">"Valige tekst"</string>
-    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Teksti valimine"</string>
-    <string name="addToDictionary" msgid="4352161534510057874">"Lisa sõnastikku"</string>
-    <string name="deleteText" msgid="6979668428458199034">"Kustuta"</string>
-    <string name="inputMethod" msgid="1653630062304567879">"Sisestusmeetod"</string>
-    <string name="editTextMenuTitle" msgid="4909135564941815494">"Tekstitoimingud"</string>
-    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Talletusruum saab täis"</string>
-    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Mõned süsteemifunktsioonid ei pruugi töötada"</string>
-    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> töötab"</string>
-    <string name="app_running_notification_text" msgid="4653586947747330058">"Puudutage lisateabe saamiseks või rakenduse peatamiseks."</string>
-    <string name="ok" msgid="5970060430562524910">"OK"</string>
-    <string name="cancel" msgid="6442560571259935130">"Tühista"</string>
-    <string name="yes" msgid="5362982303337969312">"OK"</string>
-    <string name="no" msgid="5141531044935541497">"Tühista"</string>
-    <string name="dialog_alert_title" msgid="2049658708609043103">"Tähelepanu"</string>
-    <string name="loading" msgid="7933681260296021180">"Laadimine ..."</string>
-    <string name="capital_on" msgid="1544682755514494298">"SEES"</string>
-    <string name="capital_off" msgid="6815870386972805832">"VÄLJAS"</string>
-    <string name="whichApplication" msgid="4533185947064773386">"Lõpetage toiming rakendusega"</string>
-    <string name="alwaysUse" msgid="4583018368000610438">"Kasuta vaikimisi selleks toiminguks."</string>
-    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Tühjendage vaikeandmed valikutes Süsteemiseaded &gt; Rakendused &gt; Allalaaditud."</string>
-    <string name="chooseActivity" msgid="7486876147751803333">"Toimingu valimine"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB-seadme jaoks rakenduse valimine"</string>
-    <string name="noApplications" msgid="2991814273936504689">"Ükski rakendus ei saa seda toimingut teostada."</string>
-    <string name="aerr_title" msgid="1905800560317137752"></string>
-    <string name="aerr_application" msgid="932628488013092776">"Kahjuks on rakendus <xliff:g id="APPLICATION">%1$s</xliff:g> peatunud."</string>
-    <string name="aerr_process" msgid="4507058997035697579">"Kahjuks on protsess <xliff:g id="PROCESS">%1$s</xliff:g> peatunud."</string>
-    <string name="anr_title" msgid="4351948481459135709"></string>
-    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> ei vasta.\n\nKas soovite selle sulgeda?"</string>
-    <string name="anr_activity_process" msgid="5776209883299089767">"Tegevus <xliff:g id="ACTIVITY">%1$s</xliff:g> ei vasta.\n\nKas soovite selle sulgeda?"</string>
-    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> ei vasta. Kas soovite selle sulgeda?"</string>
-    <string name="anr_process" msgid="6513209874880517125">"Protsess <xliff:g id="PROCESS">%1$s</xliff:g> ei vasta.\n\nKas soovite selle sulgeda?"</string>
-    <string name="force_close" msgid="8346072094521265605">"OK"</string>
-    <string name="report" msgid="4060218260984795706">"Teata"</string>
-    <string name="wait" msgid="7147118217226317732">"Oodake"</string>
-    <string name="webpage_unresponsive" msgid="3272758351138122503">"Leht ei reageeri.\n\nKas soovite selle sulgeda?"</string>
-    <string name="launch_warning_title" msgid="1547997780506713581">"Rakendus on ümber suunatud"</string>
-    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> on nüüd käivitunud."</string>
-    <string name="launch_warning_original" msgid="188102023021668683">"Algselt käivitati rakendus <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
-    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Mõõtkava"</string>
-    <string name="screen_compat_mode_show" msgid="4013878876486655892">"Kuva alati"</string>
-    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Lubage see uuesti valikutes Süsteemiseaded &gt; Rakendused &gt; Allalaaditud."</string>
-    <string name="smv_application" msgid="3307209192155442829">"Rakendus <xliff:g id="APPLICATION">%1$s</xliff:g> (protsess <xliff:g id="PROCESS">%2$s</xliff:g>) on rikkunud isekehtestatud StrictMode\'i eeskirju."</string>
-    <string name="smv_process" msgid="5120397012047462446">"Protsess <xliff:g id="PROCESS">%1$s</xliff:g> on rikkunud isejõustatud StrictMode\'i eeskirju."</string>
-    <string name="android_upgrading_title" msgid="1584192285441405746">"Android viiakse üle uuemale versioonile ..."</string>
-    <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_0">%1$d</xliff:g>. rakenduse <xliff:g id="NUMBER_1">%2$d</xliff:g>-st optimeerimine."</string>
-    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Rakenduste käivitamine."</string>
-    <string name="android_upgrading_complete" msgid="1405954754112999229">"Käivitamise lõpuleviimine."</string>
-    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> töötab"</string>
-    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Puudutage rakendusele lülitumiseks"</string>
-    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Kas lülituda teisele rakendusele?"</string>
-    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Teine rakendus juba töötab ja see tuleb peatada, et saaksite uue käivitada."</string>
-    <string name="old_app_action" msgid="493129172238566282">"Tagasi rakendusse <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
-    <string name="old_app_description" msgid="2082094275580358049">"Ärge käivitage uut rakendust."</string>
-    <string name="new_app_action" msgid="5472756926945440706">"Käivitage rakendus <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
-    <string name="new_app_description" msgid="1932143598371537340">"Peatage vana rakendus salvestamata."</string>
-    <string name="sendText" msgid="5209874571959469142">"Valige teksti jaoks toiming"</string>
-    <string name="volume_ringtone" msgid="6885421406845734650">"Helina helitugevus"</string>
-    <string name="volume_music" msgid="5421651157138628171">"Meediumi helitugevus"</string>
-    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Esitatakse Bluetoothi kaudu"</string>
-    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Valitud on hääletu märguanne"</string>
-    <string name="volume_call" msgid="3941680041282788711">"Kõne helitugevus"</string>
-    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Bluetoothi kõne helitugevus"</string>
-    <string name="volume_alarm" msgid="1985191616042689100">"Alarmi helitugevus"</string>
-    <string name="volume_notification" msgid="2422265656744276715">"Teadistusheli"</string>
-    <string name="volume_unknown" msgid="1400219669770445902">"Helitugevus"</string>
-    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Bluetoothi maht"</string>
-    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Helina tugevus"</string>
-    <string name="volume_icon_description_incall" msgid="8890073218154543397">"Kõne helitugevus"</string>
-    <string name="volume_icon_description_media" msgid="4217311719665194215">"Meediumi helitugevus"</string>
-    <string name="volume_icon_description_notification" msgid="7044986546477282274">"Teatise helitugevus"</string>
-    <string name="ringtone_default" msgid="3789758980357696936">"Vaikehelin"</string>
-    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Vaikehelin (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
-    <string name="ringtone_silent" msgid="7937634392408977062">"Puudub"</string>
-    <string name="ringtone_picker_title" msgid="3515143939175119094">"Helinad"</string>
-    <string name="ringtone_unknown" msgid="5477919988701784788">"Tundmatu helin"</string>
-  <plurals name="wifi_available">
-    <item quantity="one" msgid="6654123987418168693">"WiFi-võrk on saadaval"</item>
-    <item quantity="other" msgid="4192424489168397386">"WiFi-võrgud saadaval"</item>
-  </plurals>
-  <plurals name="wifi_available_detailed">
-    <item quantity="one" msgid="1634101450343277345">"Avatud WiFi võrk on saadaval"</item>
-    <item quantity="other" msgid="7915895323644292768">"Avatud WiFi-võrgud on saadaval"</item>
-  </plurals>
-    <string name="wifi_available_sign_in" msgid="4029489716605255386">"Logige sisse WiFi-võrku"</string>
-    <string name="network_available_sign_in" msgid="8495155593358054676">"Logige võrku"</string>
-    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
-    <skip />
-    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ei saanud WiFi-ga ühendust"</string>
-    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" on halb Interneti-ühendus."</string>
-    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"WiFi Direct"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Käivitage WiFi otseühendus. See lülitab välja WiFi kliendi/leviala."</string>
-    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"WiFi otseühenduse käivitamine ebaõnnestus."</string>
-    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"WiFi Direct on sees"</string>
-    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Puuted seadete jaoks"</string>
-    <string name="accept" msgid="1645267259272829559">"Nõustu"</string>
-    <string name="decline" msgid="2112225451706137894">"Keeldu"</string>
-    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Kutse on saadetud"</string>
-    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Kutse ühendamiseks"</string>
-    <string name="wifi_p2p_from_message" msgid="570389174731951769">"Saatja:"</string>
-    <string name="wifi_p2p_to_message" msgid="248968974522044099">"Saaja:"</string>
-    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Sisestage nõutav PIN-kood:"</string>
-    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN-kood:"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Tahvelarvuti ühendus WiFi-ga katkestatakse ajutiselt, kui see on ühendatud seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Telefoni ühendus WiFi-ga katkestatakse ajutiselt, kui see on ühendatud seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="select_character" msgid="3365550120617701745">"Sisesta tähemärk"</string>
-    <string name="sms_control_title" msgid="7296612781128917719">"SMS-sõnumite saatmine"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; saadab suurel hulgal SMS-sõnumeid. Kas tahate lubada sellel rakendusel ka edaspidi sõnumeid saata?"</string>
-    <string name="sms_control_yes" msgid="3663725993855816807">"Luba"</string>
-    <string name="sms_control_no" msgid="625438561395534982">"Keela"</string>
-    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; soovib saata sõnumi aadressile &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
-    <string name="sms_short_code_details" msgid="3492025719868078457">"See "<font fgcolor="#ffffb060">"võib põhjustada kulusid"</font>" teie mobiilikontole."</string>
-    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"See lisab kulusid teie mobiilikontole."</font></string>
-    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Saada"</string>
-    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Tühista"</string>
-    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Jäta minu valik meelde"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Saate muuta jaotises Seaded &gt; Rakendused"</string>
-    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Luba alati"</string>
-    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Ära luba"</string>
-    <string name="sim_removed_title" msgid="6227712319223226185">"SIM-kaart eemaldatud"</string>
-    <string name="sim_removed_message" msgid="2333164559970958645">"Mobiilsidevõrk ei ole saadaval, kuni sisestate kehtiva SIM-kaardi ja taaskäivitate seadme."</string>
-    <string name="sim_done_button" msgid="827949989369963775">"Valmis"</string>
-    <string name="sim_added_title" msgid="3719670512889674693">"SIM-kaart lisatud"</string>
-    <string name="sim_added_message" msgid="6599945301141050216">"Mobiilsidevõrku pääsemiseks taaskäivitage seade."</string>
-    <string name="sim_restart_button" msgid="4722407842815232347">"Taaskäivita"</string>
-    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Kellaaja määramine"</string>
-    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Kuupäeva määramine"</string>
-    <string name="date_time_set" msgid="5777075614321087758">"Määra"</string>
-    <string name="date_time_done" msgid="2507683751759308828">"Valmis"</string>
-    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"UUS: "</font></string>
-    <string name="perms_description_app" msgid="5139836143293299417">"Teenusepakkuja: <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
-    <string name="no_permissions" msgid="7283357728219338112">"Lube pole vaja"</string>
-    <string name="perm_costs_money" msgid="4902470324142151116">"see võib olla tasuline"</string>
-    <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB-massmälu"</string>
-    <string name="usb_storage_title" msgid="5901459041398751495">"USB ühendatud"</string>
-    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Teil on arvutiga ühendus USB kaudu. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi USB-salvestusruumi vahel kopeerida."</string>
-    <string name="usb_storage_message" product="default" msgid="805351000446037811">"Olete arvutiga ühendatud USB kaudu. Puudutage allolevat nuppu, kui soovite faile arvuti ja Androidi SD-kaardi vahel kopeerida."</string>
-    <string name="usb_storage_button_mount" msgid="1052259930369508235">"Lülita USB-mäluseade sisse"</string>
-    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"Probleem USB-salvestusruumi kasutamisel USB-mäluseadmena."</string>
-    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"Probleem SD-kaardi kasutamisel USB-mäluseadmena."</string>
-    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB ühendatud"</string>
-    <string name="usb_storage_notification_message" msgid="939822783828183763">"Puudutage, et kopeerida faile arvutist/arvutisse."</string>
-    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Lülita USB-mäluseade välja"</string>
-    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB-salvestusruumi väljalülitamiseks puudutage."</string>
-    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB kasutusel"</string>
-    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"Enne USB-salvestusruumi väljalülitamist eraldage (väljutage) Androidi USB-salvestusruum arvutist."</string>
-    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"Enne USB-salvestusruumi väljalülitamist eemaldage (väljutage) Androidi SD-kaart arvutist."</string>
-    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Lülita USB-mäluseade välja"</string>
-    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"Tekkis probleem USB-salvestusruumi väljalülitamisega. Kontrollige, kas olete USB-hosti eemaldanud, ja proovige seejärel uuesti."</string>
-    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Lülita USB-mäluseade sisse"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Kui lülitate USB-salvestusruumi sisse, võivad mõned kasutatavad rakendused peatuda ega pruugi olla saadaval enne USB-salvestusruumi väljalülitamist."</string>
-    <string name="dlg_error_title" msgid="7323658469626514207">"USB toiming ebaõnnestus"</string>
-    <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
-    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Ühendatud meediumiseadmena"</string>
-    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Ühendatud kaamerana"</string>
-    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Ühendatud installijana"</string>
-    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Ühendatud USB-lisaseadmega"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"Puudutage teisi USB valikuid."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Vormind. USB-seade?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Kas vormindada SD-kaart?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Kõik USB-mäluseadmele salvestatud failid kustutatakse. Seda toimingut ei saa tagasi võtta."</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Kõik kaardil olevad andmed lähevad kaduma."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Vorminda"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-silumine ühendatud"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"Puudutage USB-silumise keelamiseks."</string>
-    <string name="select_input_method" msgid="4653387336791222978">"Valige sisestusmeetod"</string>
-    <string name="configure_input_methods" msgid="9091652157722495116">"Seadista sisestusmeetodid"</string>
-    <string name="use_physical_keyboard" msgid="6203112478095117625">"Füüsiline klaviatuur"</string>
-    <string name="hardware" msgid="7517821086888990278">"Riistvara"</string>
-    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Klaviatuuri paigutuse valimine"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Puudutage klaviatuuri paigutuse valimiseks."</string>
-    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY"</string>
-    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY"</string>
-    <string name="candidates_style" msgid="4333913089637062257"><u>"kandidaadid"</u></string>
-    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB-mäluseadme ettevalm. ..."</string>
-    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD-kaardi ettevalmistamine"</string>
-    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Vigade kontrollimine."</string>
-    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Tühi USB-mäluseade"</string>
-    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Tühi SD-kaart"</string>
-    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB-salvestusruum on tühi või ei toeta failisüsteemi."</string>
-    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD-kaart on tühi või ei toetata selle failisüsteemi."</string>
-    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Kahjustatud USB-mäluseade"</string>
-    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Kahjustatud SD-kaart"</string>
-    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB-salvestusruum on kahjustatud. Proovige uuesti vormindada."</string>
-    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD-kaart on kahjustatud. Proovige uuesti vormindada."</string>
-    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB-seade eemaldati ootamatult"</string>
-    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD-kaart on ootamatult eemaldatud"</string>
-    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Andmekao vältimiseks lahutage USB-mäluseade enne eemaldamist."</string>
-    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Andmekao vältimiseks lahutage SD-kaart enne eemaldamist."</string>
-    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"USB-seadme eemaldamine ohutu"</string>
-    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD-kaardi eemaldamine on ohutu"</string>
-    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Saate USB-mäluseadme ohutult eemaldada."</string>
-    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"SD-kaardi saate ohutult eemaldada."</string>
-    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"USB-mäluseade eemaldatud"</string>
-    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Eemaldatud SD-kaart"</string>
-    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB-mäluseade eemaldatud. Sisestage uus meedium."</string>
-    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD-kaart on eemaldatud. Sisestage uus."</string>
-    <string name="activity_list_empty" msgid="1675388330786841066">"Sobivat tegevust ei leitud"</string>
-    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"värskenda komponentide kasutusstatistikat"</string>
-    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Võimaldab rakendusel muuta komponendi kohta kogutud kasutusstatistikat. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"Sisu kopeerimine"</string>
-    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Võimaldab rakendusel võtta sisu kopeerimiseks appi vaikekonteinerteenuse. Mitte kasutada tavarakenduste puhul."</string>
-    <string name="permlab_route_media_output" msgid="1642024455750414694">"Meediaväljundi teekonna koostamine"</string>
-    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Võimaldab rakendusel koostada teekonna meediaväljundist teistesse välistesse seadmetesse."</string>
-    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Juurdepääs võtmekaitsega turvalisele talletusruumile"</string>
-    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Lubab rakendusel hankida juurdepääsu võtmekaitsega turvalisele talletusruumile."</string>
-    <string name="permlab_control_keyguard" msgid="172195184207828387">"Võtmekaitse kuvamise ja peitmise juhtimine"</string>
-    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Lubab rakendusel võtmekaitset juhtida."</string>
-    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Suumi juhtimiseks puudutage kaks korda"</string>
-    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Vidinat ei saanud lisada."</string>
-    <string name="ime_action_go" msgid="8320845651737369027">"Mine"</string>
-    <string name="ime_action_search" msgid="658110271822807811">"Otsing"</string>
-    <string name="ime_action_send" msgid="2316166556349314424">"Saada"</string>
-    <string name="ime_action_next" msgid="3138843904009813834">"Järgmine"</string>
-    <string name="ime_action_done" msgid="8971516117910934605">"Valmis"</string>
-    <string name="ime_action_previous" msgid="1443550039250105948">"Eelm."</string>
-    <string name="ime_action_default" msgid="2840921885558045721">"Täida"</string>
-    <string name="dial_number_using" msgid="5789176425167573586">"Vali number\n kasutades numbrit <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="create_contact_using" msgid="4947405226788104538">"Loo kontakt\nnumbriga <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Üks või mitu rakendust taotlevad luba pääseda nüüd ja edaspidi teie kontole juurde."</string>
-    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Kas soovite taotluse lubada?"</string>
-    <string name="grant_permissions_header_text" msgid="6874497408201826708">"Juurdepääsutaotlus"</string>
-    <string name="allow" msgid="7225948811296386551">"Luba"</string>
-    <string name="deny" msgid="2081879885755434506">"Keela"</string>
-    <string name="permission_request_notification_title" msgid="6486759795926237907">"Taotletud luba"</string>
-    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Luba on taotletud\nkontole <xliff:g id="ACCOUNT">%s</xliff:g>."</string>
-    <string name="input_method_binding_label" msgid="1283557179944992649">"Sisestusmeetod"</string>
-    <string name="sync_binding_label" msgid="3687969138375092423">"Sünkroonimine"</string>
-    <string name="accessibility_binding_label" msgid="4148120742096474641">"Juurdepääsetavus"</string>
-    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Taustapilt"</string>
-    <string name="chooser_wallpaper" msgid="7873476199295190279">"Muutke taustapilti"</string>
-    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Märguannete kuulamisteenus"</string>
-    <string name="vpn_title" msgid="19615213552042827">"VPN on aktiveeritud"</string>
-    <string name="vpn_title_long" msgid="6400714798049252294">"VPN-i aktiveeris <xliff:g id="APP">%s</xliff:g>"</string>
-    <string name="vpn_text" msgid="3011306607126450322">"Võrgu haldamiseks puudutage."</string>
-    <string name="vpn_text_long" msgid="6407351006249174473">"Ühendatud seansiga <xliff:g id="SESSION">%s</xliff:g>. Võrgu haldamiseks puudutage."</string>
-    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Ühendamine alati sees VPN-iga …"</string>
-    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"Ühendatud alati sees VPN-iga"</string>
-    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Alati sees VPN-i viga"</string>
-    <string name="vpn_lockdown_config" msgid="6415899150671537970">"Puudutage seadistamiseks"</string>
-    <string name="upload_file" msgid="2897957172366730416">"Valige fail"</string>
-    <string name="no_file_chosen" msgid="6363648562170759465">"Ühtegi faili pole valitud"</string>
-    <string name="reset" msgid="2448168080964209908">"Lähtesta"</string>
-    <string name="submit" msgid="1602335572089911941">"Saada"</string>
-    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Autorežiim lubatud"</string>
-    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Autorežiimist väljumiseks puudutage."</string>
-    <string name="tethered_notification_title" msgid="3146694234398202601">"Jagamine või tööpunkt on aktiivne"</string>
-    <string name="tethered_notification_message" msgid="6857031760103062982">"Seadistamiseks puudutage."</string>
-    <string name="back_button_label" msgid="2300470004503343439">"Tagasi"</string>
-    <string name="next_button_label" msgid="1080555104677992408">"Järgmine"</string>
-    <string name="skip_button_label" msgid="1275362299471631819">"Jäta vahele"</string>
-    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Kõrge mobiilse andmeside kasutus"</string>
-    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Mobiilse andmeside kasutamise kohta lisateabe saamiseks puudutage."</string>
-    <string name="throttled_notification_title" msgid="6269541897729781332">"Mobiili andmemahupiirang ületatud"</string>
-    <string name="throttled_notification_message" msgid="5443457321354907181">"Mobiilse andmeside kasutamise kohta lisateabe saamiseks puudutage."</string>
-    <string name="no_matches" msgid="8129421908915840737">"Vasted puuduvad"</string>
-    <string name="find_on_page" msgid="1946799233822820384">"Otsige lehelt"</string>
-  <plurals name="matches_found">
-    <item quantity="one" msgid="8167147081136579439">"1 vaste"</item>
-    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g>/<xliff:g id="TOTAL">%d</xliff:g>"</item>
-  </plurals>
-    <string name="action_mode_done" msgid="7217581640461922289">"Valmis"</string>
-    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB-salvestusruumi eemaldamine ..."</string>
-    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD-kaardi eemaldamine ..."</string>
-    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB-salvestusruumi kustutamine ..."</string>
-    <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD-kaardi kustutamine ..."</string>
-    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB-mäluseadme tühjendamine ebaõnnestus."</string>
-    <string name="format_error" product="default" msgid="7315248696644510935">"SD-kaardi kustutamine ebaõnnestus."</string>
-    <string name="media_bad_removal" msgid="7960864061016603281">"SD-kaart eemaldati enne lahutamist."</string>
-    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB-mäluseadet kontrollitakse praegu."</string>
-    <string name="media_checking" product="default" msgid="7334762503904827481">"SD-kaarti kontrollitakse praegu."</string>
-    <string name="media_removed" msgid="7001526905057952097">"SD-kaart on eemaldatud."</string>
-    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"Praegu kasutab USB-mäluseadet arvuti."</string>
-    <string name="media_shared" product="default" msgid="5706130568133540435">"Praegu kasutab SD-kaarti arvuti."</string>
-    <string name="media_unknown_state" msgid="729192782197290385">"Väline meedium on tundmatus olekus."</string>
-    <string name="share" msgid="1778686618230011964">"Jaga"</string>
-    <string name="find" msgid="4808270900322985960">"Otsi"</string>
-    <string name="websearch" msgid="4337157977400211589">"Veebiotsing"</string>
-    <string name="find_next" msgid="5742124618942193978">"Leia järgmine"</string>
-    <string name="find_previous" msgid="2196723669388360506">"Leia eelmine"</string>
-    <string name="gpsNotifTicker" msgid="5622683912616496172">"Asukohapäring kasutajalt <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="gpsNotifTitle" msgid="5446858717157416839">"Asukohapäring"</string>
-    <string name="gpsNotifMessage" msgid="1374718023224000702">"Taotleja: <xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)"</string>
-    <string name="gpsVerifYes" msgid="2346566072867213563">"Jah"</string>
-    <string name="gpsVerifNo" msgid="1146564937346454865">"Ei"</string>
-    <string name="sync_too_many_deletes" msgid="5296321850662746890">"Kustutamiste piirarv on ületatud"</string>
-    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Kustutatavad üksused kontol <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> sünkroonimistüübi <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> jaoks: <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g>. Mida soovite teha?"</string>
-    <string name="sync_really_delete" msgid="2572600103122596243">"Kustuta üksused"</string>
-    <string name="sync_undo_deletes" msgid="2941317360600338602">"Võtke kustutamised tagasi"</string>
-    <string name="sync_do_nothing" msgid="3743764740430821845">"Ära tee praegu midagi"</string>
-    <string name="choose_account_label" msgid="5655203089746423927">"Konto valimine"</string>
-    <string name="add_account_label" msgid="2935267344849993553">"Konto lisamine"</string>
-    <string name="add_account_button_label" msgid="3611982894853435874">"Lisa konto"</string>
-    <string name="number_picker_increment_button" msgid="2412072272832284313">"Suurendamine"</string>
-    <string name="number_picker_decrement_button" msgid="476050778386779067">"Vähendamine"</string>
-    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g> puudutage ja hoidke."</string>
-    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Suurendamiseks lohistage üles, vähendamiseks alla."</string>
-    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"Minutite suurendamine"</string>
-    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"Minutite vähendamine"</string>
-    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Tundide suurendamine"</string>
-    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Tundide vähendamine"</string>
-    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"PM-i seadmine"</string>
-    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"AM-i seadmine"</string>
-    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Kuu suurendamine"</string>
-    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Kuu vähendamine"</string>
-    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Päeva suurendamine"</string>
-    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"Päeva vähendamine"</string>
-    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"Aasta suurendamine"</string>
-    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"Aasta vähendamine"</string>
-    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Tühista"</string>
-    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Kustuta"</string>
-    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Valmis"</string>
-    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režiimi muutmine"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tõstuklahv"</string>
-    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Sisestusklahv"</string>
-    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Valige rakendus"</string>
-    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Jaga:"</string>
-    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Jaga rakendusega <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="content_description_sliding_handle" msgid="415975056159262248">"Libistamispide. Puudutage ja hoidke all."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Lohistage alla: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Lohistage paremale: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Luku avamine"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kaamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Hääletu"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Heli on sees"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
-    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Avamiseks tõmmake sõrmega."</string>
-    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Paroolide kuulamiseks ühendage peakomplekt."</string>
-    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
-    <string name="action_bar_home_description" msgid="5293600496601490216">"Liigu avalehele"</string>
-    <string name="action_bar_up_description" msgid="2237496562952152589">"Liigu üles"</string>
-    <string name="action_menu_overflow_description" msgid="2295659037509008453">"Rohkem valikuid"</string>
-    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
-    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
-    <string name="storage_internal" msgid="4891916833657929263">"Sisemine salvestusruum"</string>
-    <string name="storage_sd_card" msgid="3282948861378286745">"SD-kaart"</string>
-    <string name="storage_usb" msgid="3017954059538517278">"USB-mäluseade"</string>
-    <string name="extract_edit_menu_button" msgid="8940478730496610137">"Muuda"</string>
-    <string name="data_usage_warning_title" msgid="1955638862122232342">"Andmete kasutamise hoiatus"</string>
-    <string name="data_usage_warning_body" msgid="2814673551471969954">"Kasutuse/sätete vaat. puudutage."</string>
-    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G–3G-andmeside on keelatud"</string>
-    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-andmeside on keelatud"</string>
-    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiilne andmeside on keelatud"</string>
-    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"WiFi-andmed on keelatud"</string>
-    <string name="data_usage_limit_body" msgid="3317964706973601386">"Lubamiseks puudutage."</string>
-    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G andmemahupiirang ületatud"</string>
-    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G andmemahupiirang ületatud"</string>
-    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobiilne andmemahupiirang ületatud"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"WiFi-andmete piir on ületatud"</string>
-    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> üle määratud piirmäära."</string>
-    <string name="data_usage_restricted_title" msgid="5965157361036321914">"Taustandmed on piiratud"</string>
-    <string name="data_usage_restricted_body" msgid="6741521330997452990">"Piirangu eemaldamiseks puudut."</string>
-    <string name="ssl_certificate" msgid="6510040486049237639">"Turvasertifikaat"</string>
-    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"See sertifikaat on kehtiv."</string>
-    <string name="issued_to" msgid="454239480274921032">"Väljastatud subjektile:"</string>
-    <string name="common_name" msgid="2233209299434172646">"Pärisnimi:"</string>
-    <string name="org_name" msgid="6973561190762085236">"Organisatsioon:"</string>
-    <string name="org_unit" msgid="7265981890422070383">"Organisatsiooniüksus:"</string>
-    <string name="issued_by" msgid="2647584988057481566">"Väljastaja:"</string>
-    <string name="validity_period" msgid="8818886137545983110">"Kehtivus:"</string>
-    <string name="issued_on" msgid="5895017404361397232">"Väljastamiskuupäev:"</string>
-    <string name="expires_on" msgid="3676242949915959821">"Aegumiskuupäev:"</string>
-    <string name="serial_number" msgid="758814067660862493">"Seerianumber:"</string>
-    <string name="fingerprints" msgid="4516019619850763049">"Sõrmejäljed:"</string>
-    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 sõrmejälg:"</string>
-    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 sõrmejälg:"</string>
-    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Kuva kõik"</string>
-    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Tegevuse valimine"</string>
-    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Jagamine rakendusega:"</string>
-    <string name="status_bar_device_locked" msgid="3092703448690669768">"Seade lukustatud."</string>
-    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
-    <string name="sending" msgid="3245653681008218030">"Saatmine ..."</string>
-    <string name="launchBrowserDefault" msgid="2057951947297614725">"Kas käivitada brauser?"</string>
-    <string name="SetupCallDefault" msgid="5834948469253758575">"Kas vastata kõnele?"</string>
-    <string name="activity_resolver_use_always" msgid="8017770747801494933">"Alati"</string>
-    <string name="activity_resolver_use_once" msgid="2404644797149173758">"Ainult üks kord"</string>
-    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Tahvelarvuti"</string>
-    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
-    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Kõrvaklapid"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Doki kõlarid"</string>
-    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
-    <string name="default_audio_route_category_name" msgid="3722811174003886946">"Süsteem"</string>
-    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-heli"</string>
-    <string name="wireless_display_route_description" msgid="9070346425023979651">"Juhtmeta ekraan"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
-    <string name="media_route_button_content_description" msgid="5758553567065145276">"Meediaväljund"</string>
-    <string name="media_route_status_scanning" msgid="7279908761758293783">"Skaneering ..."</string>
-    <string name="media_route_status_connecting" msgid="6422571716007825440">"Ühendan..."</string>
-    <string name="media_route_status_available" msgid="6983258067194649391">"Saadaval"</string>
-    <string name="media_route_status_not_available" msgid="6739899962681886401">"Ei ole saadaval"</string>
-    <string name="media_route_status_in_use" msgid="4533786031090198063">"Kasutusel"</string>
-    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Sisseehitatud ekraan"</string>
-    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI-ekraan"</string>
-    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Ülekate nr .<xliff:g id="ID">%1$d</xliff:g>"</string>
-    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
-    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", turvaline"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Juhtmeta ekraaniühendus on loodud"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Ekraan on näha teises seadmes"</string>
-    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Katkesta ühendus"</string>
-    <string name="kg_emergency_call_label" msgid="684946192523830531">"Hädaabikõne"</string>
-    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unustasin mustri"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Vale muster"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Vale parool"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"Vale PIN-kood"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Proovige uuesti <xliff:g id="NUMBER">%1$d</xliff:g> sekundi pärast."</string>
-    <string name="kg_pattern_instructions" msgid="398978611683075868">"Joonistage oma muster"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Sisestage SIM-i PIN-kood"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"Sisestage PIN-kood"</string>
-    <string name="kg_password_instructions" msgid="5753646556186936819">"Sisestage parool"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Üksikasju küsige operaatorilt."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Sisestage soovitud PIN-kood"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kinnitage soovitud PIN-kood"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kaardi avamine ..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Vale PIN-kood."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Sisestage 4–8-numbriline PIN-kood."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodi pikkus peab olema vähemalt 8 numbrit."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"Sisestage uuesti õige PUK-kood. Korduvkatsete korral keelatakse SIM jäädavalt."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodid ei ole vastavuses"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liiga palju mustrikatseid"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Avamiseks logige sisse oma Google\'i kontoga."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Kasutajanimi (e-post)"</string>
-    <string name="kg_login_password_hint" msgid="9057289103827298549">"Parool"</string>
-    <string name="kg_login_submit_button" msgid="5355904582674054702">"Logi sisse"</string>
-    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Vale kasutajanimi või parool."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Kas unustasite kasutajanime või parooli?\nKülastage aadressi "<b>"google.com/accounts/recovery"</b>"."</string>
-    <string name="kg_login_checking_password" msgid="1052685197710252395">"Konto kontrollimine ..."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Olete PIN-koodi <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud.\n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Olete parooli <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud. \n\nProovige uuesti <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti.\n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda tahvelarvutit valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse tahvelarvuti tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda telefoni valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse telefon tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Olete püüdnud tahvelarvutit <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Tahvelarvuti lähtestatakse nüüd tehase vaikeseadetele."</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Olete püüdnud telefoni <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Telefon lähtestatakse nüüd tehase vaikeseadetele."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
-    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
-    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eemalda"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"Kas suurendada helitugevust üle soovitatud taseme?\nPikaajaline suure helitugevusega muusika kuulamine võib kahjustada kuulmist."</string>
-    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Hõlbustuse lubamiseks hoidke kaht sõrme all."</string>
-    <string name="accessibility_enabled" msgid="1381972048564547685">"Hõlbustus on lubatud."</string>
-    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"Hõlbustus on tühistatud."</string>
-    <string name="user_switched" msgid="3768006783166984410">"Praegune kasutaja <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="owner_name" msgid="2716755460376028154">"Omanik"</string>
-    <string name="error_message_title" msgid="4510373083082500195">"Viga"</string>
-    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"See rakendus ei toeta piiratud profiilide kontosid"</string>
-    <string name="app_not_found" msgid="3429141853498927379">"Selle toimingu käsitlemiseks ei leitud ühtegi rakendust"</string>
-    <string name="revoke" msgid="5404479185228271586">"Tühista"</string>
-    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
-    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
-    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
-    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
-    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
-    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
-    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
-    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
-    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
-    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
-    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
-    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
-    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
-    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
-    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
-    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"ISO B4"</string>
-    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
-    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
-    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
-    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
-    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
-    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
-    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
-    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
-    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
-    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
-    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
-    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
-    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
-    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
-    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
-    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
-    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
-    <string name="mediaSize_na_letter" msgid="4191805615829472953">"Letter"</string>
-    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"Government Letter"</string>
-    <string name="mediaSize_na_legal" msgid="6697982988283823150">"Legal"</string>
-    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"Junior Legal"</string>
-    <string name="mediaSize_na_ledger" msgid="281871464896601236">"Ledger"</string>
-    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"Tabloid"</string>
-    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Tühistatud"</string>
-    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Viga sisu kirjutamisel"</string>
-    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"Sisestage PIN-kood"</string>
-    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"Praegune PIN-kood"</string>
-    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"Uus PIN-kood"</string>
-    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Kinnitage uus PIN-kood"</string>
-    <string name="restr_pin_create_pin" msgid="8017600000263450337">"Looge PIN-kood piirangute muutmiseks"</string>
-    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN-kood ei sobi. Proovige uuesti."</string>
-    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN-kood on liiga lühike. Peab olema vähemalt 4-kohaline."</string>
-  <plurals name="restr_pin_countdown">
-    <item quantity="one" msgid="4835639969503729874">"Vale PIN-kood. Proovige 1 s pärast."</item>
-    <item quantity="other" msgid="8030607343223287654">"Vale PIN-kood. Proovige <xliff:g id="COUNT">%d</xliff:g> s pärast."</item>
-  </plurals>
-</resources>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 92d687f..c5abcbd 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -27,14 +27,36 @@
     <string name="terabyteShort" msgid="231613018159186962">"ترابایت"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"پتابایت"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="untitled" msgid="4638956954852782576">"&lt;بدون عنوان&gt;"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
+    <string name="untitled" msgid="4638956954852782576">"‏&lt;بدون عنوان&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(بدون شماره تلفن)"</string>
     <string name="unknownName" msgid="2277556546742746522">"(ناشناس)"</string>
     <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"پست صوتی"</string>
     <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
-    <string name="mmiError" msgid="5154499457739052907">"مشکل در اتصال یا کد MMI نامعتبر."</string>
+    <string name="mmiError" msgid="5154499457739052907">"‏مشکل در اتصال یا کد MMI نامعتبر."</string>
     <string name="mmiFdnError" msgid="5224398216385316471">"عملکرد فقط به شماره‌های شماره گیری ثابت محدود است."</string>
     <string name="serviceEnabled" msgid="8147278346414714315">"سرویس فعال شد."</string>
     <string name="serviceEnabledFor" msgid="6856228140453471041">"سرویس فعال شد برای:"</string>
@@ -42,14 +64,19 @@
     <string name="serviceRegistered" msgid="6275019082598102493">"ثبت با موفقیت انجام شد"</string>
     <string name="serviceErased" msgid="1288584695297200972">"پاک کردن با موفقیت انجام شد."</string>
     <string name="passwordIncorrect" msgid="7612208839450128715">"رمز ورود اشتباه است."</string>
-    <string name="mmiComplete" msgid="8232527495411698359">"MMI کامل شد."</string>
-    <string name="badPin" msgid="9015277645546710014">"پین قدیمی که نوشته‎اید صحیح نیست."</string>
-    <string name="badPuk" msgid="5487257647081132201">"PUK که نوشته‌اید صحیح نیست."</string>
-    <string name="mismatchPin" msgid="609379054496863419">"پین‎هایی که وارد کرده‎اید با یکدیگر مطابقت ندارند."</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"‏MMI کامل شد."</string>
+    <string name="badPin" msgid="9015277645546710014">"‏پین قدیمی که نوشته‎اید صحیح نیست."</string>
+    <string name="badPuk" msgid="5487257647081132201">"‏PUK که نوشته‌اید صحیح نیست."</string>
+    <string name="mismatchPin" msgid="609379054496863419">"‏پین‎هایی که وارد کرده‎اید با یکدیگر مطابقت ندارند."</string>
     <string name="invalidPin" msgid="3850018445187475377">"یک پین بنویسید که 4 تا 8 رقم باشد."</string>
-    <string name="invalidPuk" msgid="8761456210898036513">"یک PUK با 8 رقم یا بیشتر تایپ کنید."</string>
-    <string name="needPuk" msgid="919668385956251611">"سیم کارت شما با PUK قفل شده است. کد PUK را برای بازگشایی آن بنویسید."</string>
-    <string name="needPuk2" msgid="4526033371987193070">"PUK2 را برای بازگشایی قفل سیم کارت بنویسید."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"‏یک PUK با 8 رقم یا بیشتر تایپ کنید."</string>
+    <string name="needPuk" msgid="919668385956251611">"‏سیم کارت شما با PUK قفل شده است. کد PUK را برای بازگشایی آن بنویسید."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"‏PUK2 را برای بازگشایی قفل سیم کارت بنویسید."</string>
+    <string name="enablePin" msgid="209412020907207950">"‏ناموفق بود، قفل سیم/RUIM را فعال کنید."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"<xliff:g id="NUMBER">%d</xliff:g> بار دیگر می‌توانید تلاش کنید و پس از آن سیم کارت قفل می‌شود."</item>
+    <item quantity="other" msgid="7530597808358774740">"<xliff:g id="NUMBER">%d</xliff:g> بار دیگر می‌توانید تلاش کنید و پس از آن سیم کارت قفل می‌شود."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"شناسه تماس گیرنده ورودی"</string>
@@ -70,14 +97,14 @@
     <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"پیش‌فرض شناسه تماس گیرنده روی غیر محدود است. تماس بعدی: محدود"</string>
     <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"پیش‌فرض شناسه تماس گیرنده روی غیر محدود است. تماس بعدی: بدون محدودیت"</string>
     <string name="serviceNotProvisioned" msgid="8614830180508686666">"سرویس دارای مجوز نیست."</string>
-    <string name="CLIRPermanent" msgid="3377371145926835671">"شما می‎توانید تنظیم شناسه تماس گیرنده را تغییر دهید."</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"‏شما می‎توانید تنظیم شناسه تماس گیرنده را تغییر دهید."</string>
     <string name="RestrictedChangedTitle" msgid="5592189398956187498">"دسترسی محدود تغییر یافت"</string>
     <string name="RestrictedOnData" msgid="8653794784690065540">"سرویس داده مسدود است."</string>
     <string name="RestrictedOnEmergency" msgid="6581163779072833665">"سرویس اضطراری مسدود است."</string>
     <string name="RestrictedOnNormal" msgid="4953867011389750673">"سرویس صوتی مسدود شده است."</string>
-    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"تمام سرویس‎های صدا مسدود هستند."</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"‏تمام سرویس‎های صدا مسدود هستند."</string>
     <string name="RestrictedOnSms" msgid="8314352327461638897">"سرویس پیامک مسدود شده است."</string>
-    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"سرویس‎‎های صدا/داده مسدود شدند."</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"‏سرویس‎‎های صدا/داده مسدود شدند."</string>
     <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"سرویس‌های صوتی/پیامک مسدود شده‌اند"</string>
     <string name="RestrictedOnAll" msgid="5643028264466092821">"تمام سرویس‌های صدا/داده/ پیامک مسدود هستند."</string>
     <string name="serviceClassVoice" msgid="1258393812335258019">"صوتی"</string>
@@ -111,17 +138,17 @@
     <string name="fcError" msgid="3327560126588500777">"مشکل در اتصال یا کد ویژگی نامعتبر."</string>
     <string name="httpErrorOk" msgid="1191919378083472204">"تأیید"</string>
     <string name="httpError" msgid="7956392511146698522">"خطایی در شبکه وجود داشت."</string>
-    <string name="httpErrorLookup" msgid="4711687456111963163">"URL پیدا نشد."</string>
-    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"طرح کلی تأیید اعتبار سایت پشتیبانی نمی‎شود."</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"‏URL پیدا نشد."</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"‏طرح کلی تأیید اعتبار سایت پشتیبانی نمی‎شود."</string>
     <string name="httpErrorAuth" msgid="1435065629438044534">"تأیید اعتبار انجام نشد."</string>
     <string name="httpErrorProxyAuth" msgid="1788207010559081331">"تأیید اعتبار از طریق سرور پروکسی انجام نشد."</string>
     <string name="httpErrorConnect" msgid="8714273236364640549">"اتصال به سرور انجام نشد."</string>
     <string name="httpErrorIO" msgid="2340558197489302188">"برقراری ارتباط با سرور ممکن نبود. بعداً دوباره امتحان کنید."</string>
     <string name="httpErrorTimeout" msgid="4743403703762883954">"زمان اتصال به سرور تمام شده است."</string>
     <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"این صفحه دارای تعداد بسیار زیادی تغییر مسیر سرور است."</string>
-    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"پروتکل پشتیبانی نمی‎شود."</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"‏پروتکل پشتیبانی نمی‎شود."</string>
     <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"اتصال امن ایجاد نشد."</string>
-    <string name="httpErrorBadUrl" msgid="3636929722728881972">"بدلیل نامعتبر بودن URL، باز کردن صفحه ممکن نیست."</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"‏بدلیل نامعتبر بودن URL، باز کردن صفحه ممکن نیست."</string>
     <string name="httpErrorFile" msgid="2170788515052558676">"دسترسی به فایل انجام نشد."</string>
     <string name="httpErrorFileNotFound" msgid="6203856612042655084">"فایل درخواستی پیدا نشد."</string>
     <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"درخواست‌های زیادی در حال پردازش است. بعداً دوباره امتحان کنید."</string>
@@ -129,7 +156,8 @@
     <string name="contentServiceSync" msgid="8353523060269335667">"همگام‌سازی"</string>
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"همگام‌سازی"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"تعداد موارد حذف شده <xliff:g id="CONTENT_TYPE">%s</xliff:g> بسیار زیاد است."</string>
-    <string name="low_memory" product="tablet" msgid="6494019234102154896">"حافظه رایانهٔ لوحی پر است! برخی از فایل‎ها را حذف کنید تا فضا آزاد شود."</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"‏حافظه رایانهٔ لوحی پر است! برخی از فایل‎ها را حذف کنید تا فضا آزاد شود."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"حافظه ساعت پر است. برای آزادسازی فضا، چند فایل را حذف کنید."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"حافظه تلفن پر است. بعضی از فایل‌ها را حذف کنید تا فضا آزاد شود."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"ممکن است شبکه نظارت شده باشد"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"توسط یک شخص ثالث ناشناس"</string>
@@ -147,12 +175,13 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"زنگ روشن"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"در حال خاموش شدن…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"رایانهٔ لوحی شما خاموش می‌شود."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"ساعت شما خاموش می‌شود."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"گوشی شما خاموش می‌شود."</string>
-    <string name="shutdown_confirm_question" msgid="2906544768881136183">"آیا می‎خواهید تلفن خاموش شود؟"</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"‏آیا می‎خواهید تلفن خاموش شود؟"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"راه‌اندازی مجدد در حالت امن"</string>
     <string name="reboot_safemode_confirm" msgid="55293944502784668">"آیا می‌خواهید با حالت امن راه‌اندازی مجدد کنید؟ با این کار همهٔ برنامه‌های شخص ثالثی که نصب کرده‌اید غیرفعال می‌شوند. با راه‌اندازی دوباره سیستم این برنامه‌ها دوباره بازیابی می‌شوند."</string>
     <string name="recent_tasks_title" msgid="3691764623638127888">"اخیر"</string>
-    <string name="no_recent_tasks" msgid="8794906658732193473">"برنامه‎های جدید موجود نیست."</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"‏برنامه‎های جدید موجود نیست."</string>
     <string name="global_actions" product="tablet" msgid="408477140088053665">"گزینه‌های رایانهٔ لوحی"</string>
     <string name="global_actions" product="default" msgid="2406416831541615258">"گزینه‌های تلفن"</string>
     <string name="global_action_lock" msgid="2844945191792119712">"قفل صفحه"</string>
@@ -166,9 +195,10 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"حالت هواپیما"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"حالت هواپیما روشن است"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"حالت هواپیما خاموش است"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"تنظیمات"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"بیشتر از 999"</string>
     <string name="safeMode" msgid="2788228061547930246">"حالت ایمن"</string>
-    <string name="android_system_label" msgid="6577375335728551336">"سیستم Android"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"‏سیستم Android"</string>
     <string name="permgrouplab_costMoney" msgid="5429808217861460401">"سرویس‌های غیر رایگان"</string>
     <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"انجام کارهایی که برای شما هزینه دارد."</string>
     <string name="permgrouplab_messages" msgid="7521249148445456662">"پیام‌های شما"</string>
@@ -180,7 +210,7 @@
     <string name="permgrouplab_location" msgid="635149742436692049">"موقعیت مکانی شما"</string>
     <string name="permgroupdesc_location" msgid="5704679763124170100">"بر موقعیت مکانی فیزیکی خود نظارت داشته باشید."</string>
     <string name="permgrouplab_network" msgid="5808983377727109831">"ارتباط شبکه‌ای"</string>
-    <string name="permgroupdesc_network" msgid="4478299413241861987">"به ویژگی‎های مختلف شبکه دسترسی داشته باشید."</string>
+    <string name="permgroupdesc_network" msgid="4478299413241861987">"‏به ویژگی‎های مختلف شبکه دسترسی داشته باشید."</string>
     <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"بلوتوث"</string>
     <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"از طریق بلوتوث به دستگاه‌ها و شبکه‌ها دسترسی داشته باشد."</string>
     <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"تنظیمات صدا"</string>
@@ -228,8 +258,8 @@
     <string name="permgrouplab_display" msgid="4279909676036402636">"رابط برنامهٔ دیگر"</string>
     <string name="permgroupdesc_display" msgid="6051002031933013714">"روی رابط برنامه‌های دیگر اثر دارد."</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"حافظه"</string>
-    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"به حافظهٔ USB دسترسی پیدا کنید."</string>
-    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"به کارت SD دسترسی داشته باشید."</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"‏به حافظهٔ USB دسترسی پیدا کنید."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"‏به کارت SD دسترسی داشته باشید."</string>
     <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"ویژگی‌های قابلیت دسترسی"</string>
     <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"ویژگی‌هایی که فناوری مفید می‌تواند درخواست کند."</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"بازیابی محتوای پنجره"</string>
@@ -241,38 +271,38 @@
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"نوشتاری را که تایپ می‌کنید مشاهده نمایید"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"اطلاعات شخصی مانند شماره کارت اعتباری و گذرواژه‌ها را شامل می‌شود."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"غیرفعال کردن یا تغییر نوار وضعیت"</string>
-    <string name="permdesc_statusBar" msgid="8434669549504290975">"به برنامه اجازه می‎دهد تا نوار وضعیت را غیرفعال کند یا نمادهای سیستم را اضافه یا حذف کند."</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"‏به برنامه اجازه می‎دهد تا نوار وضعیت را غیرفعال کند یا نمادهای سیستم را اضافه یا حذف کند."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"نوار وضعیت"</string>
-    <string name="permdesc_statusBarService" msgid="716113660795976060">"به برنامه اجازه می‎دهد که تبدیل به نوار وضعیت شود."</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"‏به برنامه اجازه می‎دهد که تبدیل به نوار وضعیت شود."</string>
     <string name="permlab_expandStatusBar" msgid="1148198785937489264">"گسترش دادن/جمع کردن نوار وضعیت"</string>
-    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"به برنامه اجازه می‎دهد تا نوار ابزار را جمع کند یا باز کند."</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"‏به برنامه اجازه می‎دهد تا نوار ابزار را جمع کند یا باز کند."</string>
     <string name="permlab_install_shortcut" msgid="4279070216371564234">"نصب میان‌برها"</string>
     <string name="permdesc_install_shortcut" msgid="8341295916286736996">"به برنامه اجازه می‌دهد میان‌برهای صفحه اصلی را بدون دخالت کاربر اضافه کند."</string>
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"حذف نصب میان‌برها"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"به برنامه اجازه می‌دهد میان‌برهای صفحه اصلی را بدون دخالت کاربر حذف کند."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"ترسیم مجدد مسیر تماس‌های خروجی"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"به برنامه اجازه می‎دهد تماس‌های خروجی را پردازش کند و شماره‎هایی که باید گرفته شوند را تغییر دهد. این مجوز به برنامه امکان می‌دهد به کنترل، هدایت مجدد یا جلوگیری از تماس‌های خروجی بپردازد."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"به برنامه اجازه می‌دهد عددی را که در طی یک تماس خروجی شماره‌گیری شده، ببیند و این اختیار را دارد که تماس را به شماره دیگری هدایت کند یا کلاً تماس را قطع کند."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"دریافت پیام‌های نوشتاری (پیامک)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"به برنامه اجازه می‌دهد پیامک‌ها را دریافت و پردازش کند. این یعنی برنامه می‌تواند پیام‌های ارسالی به دستگاه شما را بدون نمایش آن‌ها به شما حذف یا کنترل کند."</string>
-    <string name="permlab_receiveMms" msgid="1821317344668257098">"دریافت پیام‌های نوشتاری (MMS)"</string>
-    <string name="permdesc_receiveMms" msgid="533019437263212260">"به برنامه اجازه می‌دهد پیام‌های MMS را دریافت و پردازش کند. این یعنی برنامه می‌تواند پیام‌های ارسالی به دستگاه شما را بدون نمایش آن‌ها به شما حذف یا کنترل کند."</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"‏دریافت پیام‌های نوشتاری (MMS)"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"‏به برنامه اجازه می‌دهد پیام‌های MMS را دریافت و پردازش کند. این یعنی برنامه می‌تواند پیام‌های ارسالی به دستگاه شما را بدون نمایش آن‌ها به شما حذف یا کنترل کند."</string>
     <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"دریافت پخش‌های اضطراری"</string>
-    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"به برنامه اجازه می‎دهد تا پیام‌های پخش اضطراری را دریافت و پردازش کند. این مجوز فقط برای برنامه‎های سیستم در دسترس است."</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"‏به برنامه اجازه می‎دهد تا پیام‌های پخش اضطراری را دریافت و پردازش کند. این مجوز فقط برای برنامه‎های سیستم در دسترس است."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"خواندن پیام‌های پخش سلولی"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"به برنامه اجازه می‎دهد پیام‌های پخش سلولی دستگاه شما را بخواند. هشدارهای پخش سلولی در برخی از موقعیت‌های مکانی تحویل داده می‎شوند تا موقعیت‌های اضطراری را به شما اعلام کنند. وقتی پخش سلولی دریافت می‎شود، ممکن است برنامه‎های مخرب در عملکرد یا کارکرد دستگاه شما اختلال ایجاد کنند."</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"‏به برنامه اجازه می‎دهد پیام‌های پخش سلولی دستگاه شما را بخواند. هشدارهای پخش سلولی در برخی از موقعیت‌های مکانی تحویل داده می‎شوند تا موقعیت‌های اضطراری را به شما اعلام کنند. وقتی پخش سلولی دریافت می‎شود، ممکن است برنامه‎های مخرب در عملکرد یا کارکرد دستگاه شما اختلال ایجاد کنند."</string>
     <string name="permlab_sendSms" msgid="5600830612147671529">"ارسال پیامک ها"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"به برنامه اجازه می‌دهد پیامک‌ها را ارسال کند. این باعث ایجاد هزینه‌های پیش‌بینی نشده می‌شود. برنامه‌های مخرب ممکن است با ارسال پیام بدون تأیید شما هزینه‌هایی را برای شما ایجاد کنند."</string>
     <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"ارسال رویدادهای «پاسخ‌ از طریق پیام»"</string>
     <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"به برنامه اجازه می‌دهد درخواست‌ها را برای دیگر برنامه‌های پیام‌رسانی بفرستد تا به رویدادهای «پاسخ‌ از طریق پیام» برای تماس‌های دریافتی رسیدگی کند."</string>
-    <string name="permlab_readSms" msgid="8745086572213270480">"خواندن پیام‌های نوشتاری شما (پیامک یا MMS)"</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"‏خواندن پیام‌های نوشتاری شما (پیامک یا MMS)"</string>
     <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"به برنامه اجازه می‌دهد پیامک‌های ذخیره شده در رایانهٔ لوحی یا سیم کارت شما را بخواند. این ویژگی به برنامه امکان می‌دهد همه پیامک‌ها را صرفنظر از محتوا یا محرمانه بودن آن‌ها بخواند."</string>
     <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"به برنامه اجازه می‌دهد پیامک‌های ذخیره شده در تلفن یا سیم کارت شما را بخواند. این ویژگی به برنامه امکان می‌دهد همه پیامک‌ها را صرفنظر از محتوا یا محرمانه بودن آن‌ها بخواند."</string>
-    <string name="permlab_writeSms" msgid="3216950472636214774">"ویرایش پیام‌های نوشتاری شما (پیامک یا MMS)"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"به برنامه اجازه می‎دهد تا در پیام‌های کوتاه ذخیره شده در رایانهٔ لوحی یا سیم کارت بنویسد. برنامه‎های مخرب پیام‌های شما را حذف می‎کنند."</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"به برنامه اجازه می‎دهد تا در پیام‌های کوتاه ذخیره شده در تلفن یا سیم کارت بنویسد. برنامه‎های مخرب می‎توانند پیام‌های شما را حذف کنند."</string>
-    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"دریافت پیام‌های نوشتاری (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"به برنامه اجازه می‌دهد پیام‌های WAP را دریافت و پردازش کند. این مجوز می‌تواند پیام‌های ارسالی به شما را بدون نمایش آن‌ها به شما حذف یا کنترل کند."</string>
-    <string name="permlab_getTasks" msgid="6466095396623933906">"بازیابی برنامه‎های در حال اجرا"</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"‏ویرایش پیام‌های نوشتاری شما (پیامک یا MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"‏به برنامه اجازه می‎دهد تا در پیام‌های کوتاه ذخیره شده در رایانهٔ لوحی یا سیم کارت بنویسد. برنامه‎های مخرب پیام‌های شما را حذف می‎کنند."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"‏به برنامه اجازه می‎دهد تا در پیام‌های کوتاه ذخیره شده در تلفن یا سیم کارت بنویسد. برنامه‎های مخرب می‎توانند پیام‌های شما را حذف کنند."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"‏دریافت پیام‌های نوشتاری (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"‏به برنامه اجازه می‌دهد پیام‌های WAP را دریافت و پردازش کند. این مجوز می‌تواند پیام‌های ارسالی به شما را بدون نمایش آن‌ها به شما حذف یا کنترل کند."</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"‏بازیابی برنامه‎های در حال اجرا"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"به برنامه امکان می‌دهد اطلاعات مربوط به کارهای در حال اجرای اخیر و کنونی را بازیابی کند. این ممکن است به برنامه امکان دهد به اطلاعات مربوط به برنامه‌هایی که در دستگاه استفاده می‌شوند دست یابد."</string>
     <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"ارتباط بین کاربران"</string>
     <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"به برنامه اجازه می‌دهد اقداماتی در بین کاربران مختلف در دستگاه انجام دهد. ممکن است برنامه‌های مخرب از این قابلیت برای نقض حفاظت موجود در بین کاربران استفاده کنند."</string>
@@ -281,162 +311,174 @@
     <string name="permlab_manageUsers" msgid="1676150911672282428">"مدیریت کاربران"</string>
     <string name="permdesc_manageUsers" msgid="8409306667645355638">"به برنامه‌ها اجازه می‌دهد مدیریت کاربران، از قبیل پرسش، ایجاد و حذف کاربران، را در دستگاه انجام دهند."</string>
     <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"بازیابی جزئیات برنامه‌های در حال اجرا"</string>
-    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"به برنامه اجازه می‎دهد تا اطلاعات مفصلی مربوط به کارهایی که در حال حاضر و اخیراً اجرا می‎شوند را بازیابی کند. برنامه‎های مخرب می‎توانند اطلاعات شخصی مربوط به برنامه‎های دیگر را پیدا کنند."</string>
-    <string name="permlab_reorderTasks" msgid="2018575526934422779">"تنظیم مجدد ترتیب برنامه‎های در حال اجرا"</string>
-    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"به برنامه اجازه می‎دهد تا کارها را به پیش‌زمینه و پس‌زمینه منتقل کند. برنامه‎ ممکن است بدون دخالت شما این کار را انجام دهد."</string>
-    <string name="permlab_removeTasks" msgid="6821513401870377403">"متوقف کردن برنامه‎های در حال اجرا"</string>
-    <string name="permdesc_removeTasks" msgid="1394714352062635493">"به برنامه اجازه می‎دهد تا کارها را حذف کند و برنامه‎های آن‌ها را متوقف کند. برنامه‎های مخرب می‌توانند در اجرای برنامه‎های دیگر اختلال ایجاد ‎کنند."</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"‏به برنامه اجازه می‎دهد تا اطلاعات مفصلی مربوط به کارهایی که در حال حاضر و اخیراً اجرا می‎شوند را بازیابی کند. برنامه‎های مخرب می‎توانند اطلاعات شخصی مربوط به برنامه‎های دیگر را پیدا کنند."</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"‏تنظیم مجدد ترتیب برنامه‎های در حال اجرا"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"‏به برنامه اجازه می‎دهد تا کارها را به پیش‌زمینه و پس‌زمینه منتقل کند. برنامه‎ ممکن است بدون دخالت شما این کار را انجام دهد."</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"‏متوقف کردن برنامه‎های در حال اجرا"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"‏به برنامه اجازه می‎دهد تا کارها را حذف کند و برنامه‎های آن‌ها را متوقف کند. برنامه‎های مخرب می‌توانند در اجرای برنامه‎های دیگر اختلال ایجاد ‎کنند."</string>
     <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"مدیریت پشته‌های فعالیت"</string>
     <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"به برنامه اجازه می‌دهد پشته‌های فعالیتی که سایر برنامه‌ها در آنها اجرا می‌شوند را اضافه یا حذف کند و تغییر دهد. برنامه‌های مخرب ممکن است فعالیت برنامه‌های دیگر را مختل کنند."</string>
     <string name="permlab_startAnyActivity" msgid="2918768238045206456">"شروع هر نوع فعالیت"</string>
-    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"به برنامه اجازه می‎دهد هر فعالیتی را شروع کند بدون اینکه وضعیت صادرشده یا حفاظت با مجوز در نظر گرفته شود."</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"‏به برنامه اجازه می‎دهد هر فعالیتی را شروع کند بدون اینکه وضعیت صادرشده یا حفاظت با مجوز در نظر گرفته شود."</string>
     <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"تنظیم سازگاری با صفحهٔ نمایش"</string>
     <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"به برنامهٔ کاربردی اجازه کنترل حالت سازگاری صفحهٔ نمایش برای برنامه‌های دیگر را می‌دهد. برنامه‌های خرابکار ممکن است باعث کارکرد نادرست دیگر برنامه‌ها شوند."</string>
     <string name="permlab_setDebugApp" msgid="3022107198686584052">"فعال کردن عیب‌یابی برنامه"</string>
-    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"به برنامه اجازه می‎دهد تا عیب‌یابی را برای برنامه‌ای دیگر فعال کند. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا اجرای برنامه‎های دیگر را متوقف کنند."</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"‏به برنامه اجازه می‎دهد تا عیب‌یابی را برای برنامه‌ای دیگر فعال کند. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا اجرای برنامه‎های دیگر را متوقف کنند."</string>
     <string name="permlab_changeConfiguration" msgid="4162092185124234480">"تغییر تنظیمات نمایشگر سیستم"</string>
-    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"به برنامه اجازه می‎دهد تا پیکربندی فعلی، از قبیل اندازه کلی قلم یا محل، را تغییر دهد."</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"‏به برنامه اجازه می‎دهد تا پیکربندی فعلی، از قبیل اندازه کلی قلم یا محل، را تغییر دهد."</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"فعال کردن حالت خودرو"</string>
-    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"به برنامه اجازه می‎دهد تا حالت خودرو را فعال کند."</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"‏به برنامه اجازه می‎دهد تا حالت خودرو را فعال کند."</string>
     <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"بستن سایر برنامه‌ها"</string>
     <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"به برنامه امکان می‌دهد به فرآیندهای پس‌زمینه سایر برنامه‌ها پایان دهد. این ممکن است باعث شود سایر برنامه‌ها متوقف شوند."</string>
-    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"توقف اجباری برنامه‎های دیگر"</string>
-    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"به برنامه اجازه می‎دهد تا به اجبار برنامه‎های دیگر را متوقف کند."</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"‏توقف اجباری برنامه‎های دیگر"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"‏به برنامه اجازه می‎دهد تا به اجبار برنامه‎های دیگر را متوقف کند."</string>
     <string name="permlab_forceBack" msgid="652935204072584616">"بستن اجباری برنامه"</string>
-    <string name="permdesc_forceBack" msgid="3892295830419513623">"به برنامه اجازه می‎دهد تا برنامه‌ای را که در پیش زمینه است ببندد و برگردد. برای برنامه‎های عادی مورد نیاز نیست."</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"‏به برنامه اجازه می‎دهد تا برنامه‌ای را که در پیش زمینه است ببندد و برگردد. برای برنامه‎های عادی مورد نیاز نیست."</string>
     <string name="permlab_dump" msgid="1681799862438954752">"بازیابی وضعیت داخلی سیستم"</string>
-    <string name="permdesc_dump" msgid="1778299088692290329">"به برنامه اجازه می‎دهد تا وضعیت داخلی سیستم را بازیابی کند. برنامه‎های مخرب می‎توانند انواع مختلفی از اطلاعات خصوصی و امن را که معمولا به آن‌ها نیاز ندارند، بازیابی کنند."</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"‏به برنامه اجازه می‎دهد تا وضعیت داخلی سیستم را بازیابی کند. برنامه‎های مخرب می‎توانند انواع مختلفی از اطلاعات خصوصی و امن را که معمولا به آن‌ها نیاز ندارند، بازیابی کنند."</string>
     <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"بازیابی محتوای صفحه"</string>
-    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"به برنامه اجازه می‎دهد تا محتوای پنجره فعال را بازیابی کند. برنامه‎های مخرب می‎توانند کل محتوای پنجره را بازیابی کنند و همه متن آنرا به غیر از گذرواژه‎ها امتحان کنند."</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"‏به برنامه اجازه می‎دهد تا محتوای پنجره فعال را بازیابی کند. برنامه‎های مخرب می‎توانند کل محتوای پنجره را بازیابی کنند و همه متن آنرا به غیر از گذرواژه‎ها امتحان کنند."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"قابلیت دسترسی به طور موقت فعال شود"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"به یک برنامه اجازه می‌دهد به صورت موقت قابلیت دسترسی را در دستگاه فعال کند. برنامه‌های مخرب می‌توانند قابلیت دسترسی را بدون رضایت کاربر فعال کنند."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"بازیابی اطلاعات پنجره"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"به یک برنامه کاربردی اجازه می‌دهد که اطلاعات مربوط به پنجره‌ها را از مدیریت پنجره بازیابی کند. برنامه‌های کاربردی مخرب ممکن است اطلاعاتی که برای استفاده سیستم داخلی درنظر گرفته شده‌اند را بازیابی کنند."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"بازیابی کد پنجره"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"به یک برنامه کاربردی اجازه می‌دهد کد پنجره را بازیابی کند. برنامه‌های مخرب ممکن است با جعل کردن سیستم، تعامل غیرمجازی با پنجره برنامه انجام دهند."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"بازیابی آمار قاب‌ها"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"به یک برنامه کاربردی اجازه می‌دهد آمار قاب‌ها را جمع‌آوری کند. برنامه‌های مخرب ممکن است از برنامه‌های دیگر آمار قاب‌های مربوط به پنجره‌ها را مشاهده کنند."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"فیلتر کردن رویدادها"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"به یک برنامه کاربردی اجازه می‌دهد یک فیلتر ورودی را که جریان تمام رویدادهای کاربران را قبل از ارسال شدن فیلتر می‌کند، ثبت نماید. برنامه‌ کاربردی مخرب ممکن است رابط کاربری سیستم را بدون مداخله کاربر، کنترل کند."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"بزرگ کردن صفحه نمایش"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"به یک برنامه کاربردی اجازه بزرگ کردن محتوای یک صفحه نمایش را می‌دهد. برنامه‌های کاربردی مضر می‌توانند محتوای صفحه نمایش را به طریقی منتقل کنند که باعث غیرقابل‌استفاده شدن دستگاه شود."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"خاموش شدن جزئی"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"مدیر فعالیت را در حالت خاموشی قرار می‌دهد. خاموشی را به صورت کامل انجام نمی‌دهد."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ممانعت از جابجایی برنامه"</string>
-    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"اجازه نمی‎دهد کاربر به برنامه دیگری برود."</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"‏اجازه نمی‎دهد کاربر به برنامه دیگری برود."</string>
     <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"دریافت اطلاعات برنامه فعلی"</string>
     <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"به دارنده اجازه می‌دهد اطلاعات خصوصی مربوط به برنامه فعلی را در پیش زمینه صفحه بازیابی کند."</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"نظارت و کنترل راه‌اندازی همه برنامه"</string>
-    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"به برنامه اجازه می‎دهد تا نحوه راه‌اندازی فعالیت‌های سیستم را کنترل کند. برنامه‎های مخرب می‎توانند کاملا با سیستم سازگار شوند. این مجوز فقط برای توسعه نیاز است و برای استفاده عادی نیست."</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"‏به برنامه اجازه می‎دهد تا نحوه راه‌اندازی فعالیت‌های سیستم را کنترل کند. برنامه‎های مخرب می‎توانند کاملا با سیستم سازگار شوند. این مجوز فقط برای توسعه نیاز است و برای استفاده عادی نیست."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"ارسال پخش بسته حذف شده"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"به برنامه اجازه می‎دهد تا اعلان حذف بسته برنامه را پخش کند. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا هر برنامه در حال اجرای دیگر را از بین ببرد."</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"‏به برنامه اجازه می‎دهد تا اعلان حذف بسته برنامه را پخش کند. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا هر برنامه در حال اجرای دیگر را از بین ببرد."</string>
     <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"ارسال پخش دریافت شده توسط پیامک"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"به برنامه اجازه می‎دهد تا اعلان دریافت پیام کوتاه را پخش کند. برنامه‎های مخرب می‎توانند از این برای جعل پیام‌های کوتاه ورودی استفاده کنند."</string>
-    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ارسال پخش دریافت شده توسط WAP-PUSH"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"به برنامه اجازه می‎دهد تا اعلانی را پخش کند که پیام WAP PUSH دریافت کرده است. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا دریافت پیام MMS را جعل کنند یا محتوای هر صفحهٔ وب را با انواع مخرب جایگزین کنند."</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"‏به برنامه اجازه می‎دهد تا اعلان دریافت پیام کوتاه را پخش کند. برنامه‎های مخرب می‎توانند از این برای جعل پیام‌های کوتاه ورودی استفاده کنند."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"‏ارسال پخش دریافت شده توسط WAP-PUSH"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"‏به برنامه اجازه می‎دهد تا اعلانی را پخش کند که پیام WAP PUSH دریافت کرده است. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا دریافت پیام MMS را جعل کنند یا محتوای هر صفحهٔ وب را با انواع مخرب جایگزین کنند."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ارسال اعلان پخش برای امتیازبندی شبکه‌ها"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"به برنامه اجازه می‌دهد تا اعلانی پخش کند که شبکه‌ها باید امتیازبندی شوند. هرگز برای برنامه‌های عادی مورد نیاز نیست."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"محدود کردن تعداد فرآیندهای در حال اجرا"</string>
-    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"به برنامه اجازه می‎دهد تا حداکثر تعداد پردازشهایی را که اجرا خواهد شد کنترل کند. هرگز برای برنامه‎های عادی لازم نیست."</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"‏به برنامه اجازه می‎دهد تا حداکثر تعداد پردازشهایی را که اجرا خواهد شد کنترل کند. هرگز برای برنامه‎های عادی لازم نیست."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"بستن اجباری برنامه‌های پس‌زمینه"</string>
-    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"به برنامه اجازه می‎دهد تا به محض اینکه فعالیتها به پس‌زمینه رفتند تمام شوند. برای برنامه‎های عادی نیازی نیست."</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"‏به برنامه اجازه می‎دهد تا به محض اینکه فعالیتها به پس‌زمینه رفتند تمام شوند. برای برنامه‎های عادی نیازی نیست."</string>
     <string name="permlab_batteryStats" msgid="2789610673514103364">"خواندن آمار باتری"</string>
     <string name="permdesc_batteryStats" msgid="5897346582882915114">"به یک برنامه کاربردی اجازه می‌دهد که داده‌های استفاده کننده از میزان باتری کم کنونی را بخواند. این کار ممکن است به برنامه این امکان را بدهد که اطلاعات جزئی درباره برنامه‌هایی که استفاده می‌کنید، بدست آورد."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"اصلاح آمار باتری"</string>
-    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"به برنامه اجازه می‎دهد تا آمار جمع‌آوری شده باتری را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"‏به برنامه اجازه می‎دهد تا آمار جمع‌آوری شده باتری را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"بازیابی آمار مربوط به کارکرد برنامه"</string>
     <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"به برنامه امکان می‌دهد آمار جمع‌آوری شده مربوط به عملکرد برنامه را بازیابی کند. برای استفاده توسط برنامه‌های معمولی، در نظر گرفته نشده است."</string>
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"تغییر آمار کارکرد برنامه"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"به برنامه اجازه تغییر آمار کارکرد جمع‌آوری شده از برنامه را می‌دهد. برای استفاده توسط برنامه‌های معمولی نیست."</string>
     <string name="permlab_backup" msgid="470013022865453920">"کنترل نسخهٔ پشتیبان سیستم و بازیابی"</string>
-    <string name="permdesc_backup" msgid="6912230525140589891">"به برنامه اجازه می‎دهد پشتیبان سیستم را کنترل کند و مکانیستم را بازیابی کند. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"‏به برنامه اجازه می‎دهد پشتیبان سیستم را کنترل کند و مکانیستم را بازیابی کند. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"تهیهٔ نسخهٔ پشتیبان کامل را تأیید کرده یا عملیات را بازیابی کنید"</string>
-    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"به برنامه اجازه می‎دهد تا رابط کاربر تایید نسخه کامل پشتیبان را راه‌اندازی کند. هر برنامه‌ای نمی‎تواند از آن استفاده کند."</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"‏به برنامه اجازه می‎دهد تا رابط کاربر تایید نسخه کامل پشتیبان را راه‌اندازی کند. هر برنامه‌ای نمی‎تواند از آن استفاده کند."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"نمایش پنجره‌های غیرمجاز"</string>
-    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"به برنامه اجازه می‎دهد پنجره‎هایی را ایجاد کند که می‎خواهد توسط رابط کاربر سیستم داخلی استفاده شود. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"‏به برنامه اجازه می‎دهد پنجره‎هایی را ایجاد کند که می‎خواهد توسط رابط کاربر سیستم داخلی استفاده شود. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"ترسیم روی برنامه‌های دیگر"</string>
     <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"به برنامه اجازه می‌دهد که در بالا یا بخش‌هایی از رابط کاربری دیگر برنامه‌های کاربردی متصل شود. این کار می‌تواند در استفاده شما از رابط هر برنامه کاربردی تداخل ایجاد کند یا آنچه را که به نظر خود در دیگر برنامه‌های کاربردی می‌بینید، تغییر دهد."</string>
     <string name="permlab_setAnimationScale" msgid="2805103241153907174">"اصلاح سرعت انیمیشن کلی"</string>
-    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"به برنامه اجازه می‎دهد سرعت کلی انیمیشن را هر زمان که بخواهد تغییر دهد (انیمیشن‎های سریعتر یا آهسته‎تر)."</string>
-    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"مدیریت نشانه‎های برنامه"</string>
-    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"به برنامه اجازه می‎دهد با ایجاد کنارگذر از سفارش عادی Z، نشانه‎های خود را ایجاد و مدیریت کند. برای برنامه‎های عادی مورد نیاز است."</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"‏به برنامه اجازه می‎دهد سرعت کلی انیمیشن را هر زمان که بخواهد تغییر دهد (انیمیشن‎های سریعتر یا آهسته‎تر)."</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"‏مدیریت نشانه‎های برنامه"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"‏به برنامه اجازه می‎دهد با ایجاد کنارگذر از سفارش عادی Z، نشانه‎های خود را ایجاد و مدیریت کند. برای برنامه‎های عادی مورد نیاز است."</string>
     <string name="permlab_freezeScreen" msgid="4708181184441880175">"ثابت نگه داشتن صفحه"</string>
     <string name="permdesc_freezeScreen" msgid="8558923789222670064">"به برنامه کاربردی اجازه می‌دهد که موقتاً صفحه را برای یک انتقال تمام صفحه ثابت نگه دارد."</string>
     <string name="permlab_injectEvents" msgid="1378746584023586600">"کلیدها و دکمه‌های کنترل را فشار دهید"</string>
-    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"به برنامه اجازه می‎دهد تا رویدادهای ورودی خود (فشردن کلیدها و غیره) را تحویل دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا کارکرد رایانهٔ لوحی را کنترل کنند."</string>
-    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"به برنامه اجازه می‎دهد تا رویدادهای ورودی خود را به برنامه‎های دیگر تحویل دهد (فشردن کلیدها و غیره). برنامه‎های مخرب می‎توانند از آن برای کنترل کارکرد تلفن استفاده کنند."</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"‏به برنامه اجازه می‎دهد تا رویدادهای ورودی خود (فشردن کلیدها و غیره) را تحویل دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا کارکرد رایانهٔ لوحی را کنترل کنند."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"‏به برنامه اجازه می‎دهد تا رویدادهای ورودی خود را به برنامه‎های دیگر تحویل دهد (فشردن کلیدها و غیره). برنامه‎های مخرب می‎توانند از آن برای کنترل کارکرد تلفن استفاده کنند."</string>
     <string name="permlab_readInputState" msgid="469428900041249234">"مواردی که می‌نویسید و کارهایی که انجام می‌دهید را ضبط کنید"</string>
-    <string name="permdesc_readInputState" msgid="8387754901688728043">"به برنامه اجازه می‎دهد تا کلیدهایی را که هنگام تعامل با برنامهٔ دیگر فشار می‎دهید ببیند (مانند تایپ کردن گذرواژه). برای برنامه‎های عادی مورد نیاز نیست."</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"‏به برنامه اجازه می‎دهد تا کلیدهایی را که هنگام تعامل با برنامهٔ دیگر فشار می‎دهید ببیند (مانند تایپ کردن گذرواژه). برای برنامه‎های عادی مورد نیاز نیست."</string>
     <string name="permlab_bindInputMethod" msgid="3360064620230515776">"پیوند شده به روش ورودی"</string>
-    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"به دارنده این دستگاه اجازه می‎دهد تا به رابط سطح بالای یک روش ورودی متصل شود. این ویژگی هیچگاه برای برنامه‎های معمولی ضروری نمی‎باشد."</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"‏به دارنده این دستگاه اجازه می‎دهد تا به رابط سطح بالای یک روش ورودی متصل شود. این ویژگی هیچگاه برای برنامه‎های معمولی ضروری نمی‎باشد."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"اتصال به سرویس دسترسی"</string>
     <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"به دارنده اجازه می‌دهد که به رابط سطح بالای سرویس دسترسی متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
     <string name="permlab_bindPrintService" msgid="8462815179572748761">"اتصال به یک سرویس چاپ"</string>
     <string name="permdesc_bindPrintService" msgid="7960067623209111135">"به برنامه اجازه می‌دهد که به رابط سطح بالای سرویس چاپ متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
     <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"اتصال به سرویس هماهنگ‌کننده چاپ"</string>
     <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"به دارنده اجازه می‌دهد که به واسط سطح بالای سرویس هماهنگ‌کننده چاپ متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
-    <string name="permlab_bindNfcService" msgid="2752731300419410724">"اتصال به سرویس NFC"</string>
-    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"به دارنده اجازه می‌دهد به برنامه‌هایی متصل شود که مشابه با کارت‌های NFC عمل می‌کنند. هرگز نباید برای برنامه‌های عادی مورد نیاز باشد."</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"‏اتصال به سرویس NFC"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"‏به دارنده اجازه می‌دهد به برنامه‌هایی متصل شود که مشابه با کارت‌های NFC عمل می‌کنند. هرگز نباید برای برنامه‌های عادی مورد نیاز باشد."</string>
     <string name="permlab_bindTextService" msgid="7358378401915287938">"اتصال به یک سرویس متنی"</string>
-    <string name="permdesc_bindTextService" msgid="8151968910973998670">"به دارنده اجازه می‌دهد خود را به یک رابط سطح بالای خدمات متنی مرتبط کند (برای مثال SpellCheckerService). هرگز برای برنامه‌های عادی لازم نیست."</string>
-    <string name="permlab_bindVpnService" msgid="4708596021161473255">"اتصال به یک سرویس VPN"</string>
-    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"به دارنده اجازه می‌دهد که به رابط سطح بالای سرویس Vpn متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"‏به دارنده اجازه می‌دهد خود را به یک رابط سطح بالای خدمات متنی مرتبط کند (برای مثال SpellCheckerService). هرگز برای برنامه‌های عادی لازم نیست."</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"‏اتصال به یک سرویس VPN"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"‏به دارنده اجازه می‌دهد که به رابط سطح بالای سرویس Vpn متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"پیوند شده به تصویر زمینه"</string>
-    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"به دارنده اجازه می‎دهد تا به رابط سطح بالای تصویر زمینه متصل شود. برنامه‎های معمولی هرگز به این ویژگی نیاز ندارند."</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"‏به دارنده اجازه می‎دهد تا به رابط سطح بالای تصویر زمینه متصل شود. برنامه‎های معمولی هرگز به این ویژگی نیاز ندارند."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"مقید بودن به سرویس تعامل صوتی"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"به دارنده امکان می‌دهد به واسط سطح بالای سرویس تعامل صوتی مقید باشد. برای برنامه‌های عادی هرگز نباید لازم باشد."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"اتصال به نمایشگر راه دور"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"به دارنده ام‍ک‍ان می‌دهد تا به رابط سطح بالای نمایشگر راه دور وصل شود. نباید هرگز برای برنامه‌های عادی لازم باشد."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"اتصال به یک سرویس ابزارک"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"به دارنده اجازه می‌دهد که به رابط سطح بالای سرویس ابزارک متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"اتصال به یک سرویس ارائه‌دهنده مسیر"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"به دارنده امکان می‌دهد به هر ارائه‌دهنده مسیر ثبت شده‌ای متصل شود. هرگز برای برنامه‌های عادی مورد نیاز نیست."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"تعامل با یک سرپرست دستگاه"</string>
-    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"به دارنده اجازه می‎دهد اهداف خود را به سرپرست دستگاه ارسال کند. برنامه‎های معمولی هیچگاه به این ویژگی نیازی ندارند."</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"‏به دارنده اجازه می‎دهد اهداف خود را به سرپرست دستگاه ارسال کند. برنامه‎های معمولی هیچگاه به این ویژگی نیازی ندارند."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"اتصال به ورودی تلویزیون"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"به برنامه امکان می‌دهد که به رابط سطح بالای ورودی تلویزیون متصل شود. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"اضافه یا حذف سرپرست دستگاه"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"به دارنده اجازه می‌دهد سرپرستان دستگاه فعال را اضافه یا حذف کند.هرگز نباید برای برنامه‌های عادی مورد نیاز باشد."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"تغییر جهت صفحه"</string>
-    <string name="permdesc_setOrientation" msgid="3046126619316671476">"به برنامه اجازه می‎دهد تا چرخش صفحه را هر وقت بخواهد تغییر دهد. برای برنامه‎های عادی نیاز نیست."</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"‏به برنامه اجازه می‎دهد تا چرخش صفحه را هر وقت بخواهد تغییر دهد. برای برنامه‎های عادی نیاز نیست."</string>
     <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"تغییر سرعت اشاره‌گر"</string>
-    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"به برنامه اجازه می‎دهد تا سرعت ماوس و پد کنترل را هر وقت خواست تغییر دهد. برای برنامه‎های عادی نیاز نیست."</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"‏به برنامه اجازه می‎دهد تا سرعت ماوس و پد کنترل را هر وقت خواست تغییر دهد. برای برنامه‎های عادی نیاز نیست."</string>
     <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"تغییر چیدمان صفحه‌کلید"</string>
     <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"به برنامه اجازه می‌دهد تا چیدمان صفحه‌کلید را تغییر دهد. این کار هیچ‌گاه برای برنامه‌های عادی نیاز نیست."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"ارسال سیگنالهای Linux به برنامه‎ها"</string>
-    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"به برنامه اجازه می‎دهد تا درخواست کند سیگنال ارائه شده به همه مراحل دائم ارسال شود."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"‏ارسال سیگنالهای Linux به برنامه‎ها"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"‏به برنامه اجازه می‎دهد تا درخواست کند سیگنال ارائه شده به همه مراحل دائم ارسال شود."</string>
     <string name="permlab_persistentActivity" msgid="8841113627955563938">"همیشه برنامه اجرا شود"</string>
     <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"به برنامه امکان می‌دهد قسمت‌هایی از خود را در حافظه دائمی کند. این کار حافظه موجود را برای سایر برنامه‌ها محدود کرده و باعث کندی رایانهٔ لوحی می‌شود."</string>
     <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"به برنامه امکان می‌دهد قسمت‌هایی از خود را در حافظه دائمی کند. این کار حافظه موجود را برای سایر برنامه‌ها محدود کرده و باعث کندی تلفن می‌شود."</string>
-    <string name="permlab_deletePackages" msgid="184385129537705938">"حذف برنامه‎ها"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"به برنامه اجازه می‎دهد تا بسته‎های Android را پاک کند. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا برنامه‎های مهم را حذف کنند."</string>
-    <string name="permlab_clearAppUserData" msgid="274109191845842756">"حذف داده‎های برنامه‎های دیگر"</string>
-    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"به برنامه اجازه می‎دهد تا داده‎های کاربر را پاک کند."</string>
-    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"حذف حافظهٔ پنهان برنامه‎های دیگر"</string>
-    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"به برنامه اجازه می‎دهد تا فایل‌های حافظهٔ پنهان را پاک کند."</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"‏حذف برنامه‎ها"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"‏به برنامه اجازه می‎دهد تا بسته‎های Android را پاک کند. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا برنامه‎های مهم را حذف کنند."</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"‏حذف داده‎های برنامه‎های دیگر"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"‏به برنامه اجازه می‎دهد تا داده‎های کاربر را پاک کند."</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"‏حذف حافظهٔ پنهان برنامه‎های دیگر"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"‏به برنامه اجازه می‎دهد تا فایل‌های حافظهٔ پنهان را پاک کند."</string>
     <string name="permlab_getPackageSize" msgid="7472921768357981986">"اندازه گیری فضای حافظه برنامه"</string>
-    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"به برنامه اجازه می‎دهد تا کدها، داده‎ها و اندازه‎های حافظهٔ پنهان خود را بازیابی کند"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"‏به برنامه اجازه می‎دهد تا کدها، داده‎ها و اندازه‎های حافظهٔ پنهان خود را بازیابی کند"</string>
     <string name="permlab_installPackages" msgid="2199128482820306924">"نصب مستقیم برنامه"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"به برنامه اجازه می‎دهد تا بسته‎های Android به روز شده یا جدید را نصب کند. برنامه‎های مخرب می‎توانند از این استفاده کنند تا برنامه‎های جدید را با مجوزهای قوی اختیاری اضافه کنند."</string>
-    <string name="permlab_clearAppCache" msgid="7487279391723526815">"حذف تمام داده‎های حافظهٔ پنهان برنامه"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"‏به برنامه اجازه می‎دهد تا بسته‎های Android به روز شده یا جدید را نصب کند. برنامه‎های مخرب می‎توانند از این استفاده کنند تا برنامه‎های جدید را با مجوزهای قوی اختیاری اضافه کنند."</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"‏حذف تمام داده‎های حافظهٔ پنهان برنامه"</string>
     <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"به برنامه اجازه می‌دهد که فضای رایانه لوحی را از طریق حذف کردن فایل‌ها در دایرکتوری حافظه پنهان دیگر برنامه‌های کاربردی، آزاد کند. این کار ممکن است باعث کندی دیگر برنامه‌های کاربردی در هنگام راه‌اندازی شود زیرا آنها باید دوباره داده‌های خود را بازیابی کنند."</string>
     <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"به برنامه اجازه می‌دهد که فضای تلفن را از طریق حذف کردن فایل‌ها در دایرکتوری حافظه پنهان دیگر برنامه‌های کاربردی، آزاد کند. این کار ممکن است باعث راه اندازی آهسته دیگر برنامه‌های کاربردی در نتیجه نیاز آنها به بازیابی داده‌های خود، شود."</string>
     <string name="permlab_movePackage" msgid="3289890271645921411">"انتقال منابع برنامه"</string>
-    <string name="permdesc_movePackage" msgid="319562217778244524">"به برنامه اجازه می‎دهد تا منابع برنامه را از رسانه داخلی به رسانه خارجی و بالعکس منتقل کند."</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"‏به برنامه اجازه می‎دهد تا منابع برنامه را از رسانه داخلی به رسانه خارجی و بالعکس منتقل کند."</string>
     <string name="permlab_readLogs" msgid="6615778543198967614">"مطالعه داده‌های گزارش حساس"</string>
-    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"به برنامه اجازه می‎دهد فایل‌های مختلف گزارش سیستم را بخواند. با این کار، برنامه اطلاعات کلی مربوط به کاری که با رایانهٔ لوحی انجام می‎دهید را کشف می‌کند، که ممکن است حاوی اطلاعات شخصی و خصوصی باشند."</string>
-    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"به برنامه اجازه می‎دهد تا فایل‌های گزارش مختلف سیستم را بخواند. این کار به برنامه اجازه می‎دهد اطلاعات عمومی کاری که با تلفن انجام می‎دهید مثلا اطلاعات خصوصی و شخصی را کشف کند."</string>
-    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"استفاده از هر رمزگشای رسانه‎ای برای بازپخش"</string>
-    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"اجازه می‎دهد برنامه از هر رمزگشای رسانه نصب شده‌ای استفاده کند تا برای پخش رمزگشایی شود."</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"‏به برنامه اجازه می‎دهد فایل‌های مختلف گزارش سیستم را بخواند. با این کار، برنامه اطلاعات کلی مربوط به کاری که با رایانهٔ لوحی انجام می‎دهید را کشف می‌کند، که ممکن است حاوی اطلاعات شخصی و خصوصی باشند."</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"‏به برنامه اجازه می‎دهد تا فایل‌های گزارش مختلف سیستم را بخواند. این کار به برنامه اجازه می‎دهد اطلاعات عمومی کاری که با تلفن انجام می‎دهید مثلا اطلاعات خصوصی و شخصی را کشف کند."</string>
+    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"‏استفاده از هر رمزگشای رسانه‎ای برای بازپخش"</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"‏اجازه می‎دهد برنامه از هر رمزگشای رسانه نصب شده‌ای استفاده کند تا برای پخش رمزگشایی شود."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"مدیریت اطلاعات کاربری مورد اعتماد"</string>
-    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"به برنامه امکان می‌دهد گواهینامه‌های CA را به عنوان اطلاعات کاربری مورد اعتماد نصب یا حذف نصب کند."</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"‏به برنامه امکان می‌دهد گواهینامه‌های CA را به عنوان اطلاعات کاربری مورد اعتماد نصب یا حذف نصب کند."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"اجرای برنامه در هنگام بدون فعالیت بودن دستگاه"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"‏این مجوز به سیستم Android امکان می‌دهد تا وقتی دستگاه استفاده نمی‌شود برنامه را در پس‌زمینه اجرا کند."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"خواندن/نوشتن منابع متعلق به تشخیص"</string>
-    <string name="permdesc_diagnostic" msgid="6608295692002452283">"به برنامه اجازه می‌دهد هر منبعی را که متعلق به گروه تشخیص است بخواند و در آن بنویسد؛ به‌عنوان مثال، فایل‌های /dev. این امر به‌صورت بالقوه می‌تواند بر پایدار بودن و امنیت سیستم تأثیر بگذارد. این تنها باید برای تشخیص‎‌های مختص سخت‌افزار توسط تولیدکننده یا اپراتور استفاده شود."</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"‏به برنامه اجازه می‌دهد هر منبعی را که متعلق به گروه تشخیص است بخواند و در آن بنویسد؛ به‌عنوان مثال، فایل‌های /dev. این امر به‌صورت بالقوه می‌تواند بر پایدار بودن و امنیت سیستم تأثیر بگذارد. این تنها باید برای تشخیص‎‌های مختص سخت‌افزار توسط تولیدکننده یا اپراتور استفاده شود."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"فعال یا غیر فعال کردن اجزای برنامه"</string>
-    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"به برنامه اجازه می‎دهد تا فعال بودن یا نبودن اجزای برنامهٔ دیگر را تغییر دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا قابلیتهای مهم رایانهٔ لوحی را غیرفعال کنند. باید دقت کرد که با این مجوز ممکن است وضعیت اجزای برنامه ناپایدار، ناهماهنگ یا غیرقابل استفاده شود."</string>
-    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"به برنامه اجازه می‎دهد تا فعال بودن یا غیرفعال بودن جزئیات برنامهٔ دیگر را تغییر دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا ویژگی‌های مهم را غیرفعال کنند. برای این مجوز باید دقت کنید چون ممکن است وضعیت جزئیات برنامه ناپایدار، بی‎ثبات یا غیرقابل استفاده شود."</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"‏به برنامه اجازه می‎دهد تا فعال بودن یا نبودن اجزای برنامهٔ دیگر را تغییر دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا قابلیتهای مهم رایانهٔ لوحی را غیرفعال کنند. باید دقت کرد که با این مجوز ممکن است وضعیت اجزای برنامه ناپایدار، ناهماهنگ یا غیرقابل استفاده شود."</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"‏به برنامه اجازه می‎دهد تا فعال بودن یا غیرفعال بودن جزئیات برنامهٔ دیگر را تغییر دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا ویژگی‌های مهم را غیرفعال کنند. برای این مجوز باید دقت کنید چون ممکن است وضعیت جزئیات برنامه ناپایدار، بی‎ثبات یا غیرقابل استفاده شود."</string>
     <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"ارائه یا لغو مجوزها"</string>
     <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"به یک برنامهٔ کاربردی اجازه می‌دهد تا مجوزهای خاصی را برای خود یا دیگر برنامه‌ها ارائه کرده یا آن‌ها را لغو کند. برنامه‌های مضر از این حالت برای دسترسی به ویژگی‌هایی استفاده می‌کنند که شما اجازه آن را در اختیارشان قرار نداده‌اید."</string>
-    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"تنظیم برنامه‎های ترجیحی"</string>
-    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"به برنامه اجازه می‎دهد تا برنامه‎های ترجیحی شما را تغییر دهد. برنامه‎های مخرب می‎توانند بدون اعلان برنامه‎هایی را که اجرا می‎شوند، تغییر دهند خود را به جای برنامه‎های کنونی قلمداد کنند تا داده‎های شخصی را از شما جمع‌آوری کنند."</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"‏تنظیم برنامه‎های ترجیحی"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"‏به برنامه اجازه می‎دهد تا برنامه‎های ترجیحی شما را تغییر دهد. برنامه‎های مخرب می‎توانند بدون اعلان برنامه‎هایی را که اجرا می‎شوند، تغییر دهند خود را به جای برنامه‎های کنونی قلمداد کنند تا داده‎های شخصی را از شما جمع‌آوری کنند."</string>
     <string name="permlab_writeSettings" msgid="2226195290955224730">"اصلاح تنظیمات سیستم"</string>
-    <string name="permdesc_writeSettings" msgid="7775723441558907181">"به برنامه اجازه می‎دهد تا داده‎های تنظیم سیستم را تغییر دهد. برنامه‎های مخرب می‎توانند پیکربندی سیستم شما را خراب کنند."</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"‏به برنامه اجازه می‎دهد تا داده‎های تنظیم سیستم را تغییر دهد. برنامه‎های مخرب می‎توانند پیکربندی سیستم شما را خراب کنند."</string>
     <string name="permlab_writeSecureSettings" msgid="204676251876718288">"اصلاح کردن تنظیمات سیستم ایمن"</string>
-    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"به برنامه اجازه می‎دهد داده‎های تنظیمات امنیتی سیستم را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
-    <string name="permlab_writeGservices" msgid="2149426664226152185">"اصلاح کردن نقشه سرویس‌های Google"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"به برنامه اجازه می‎دهد تا نقشه سرویس‌های Google را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"‏به برنامه اجازه می‎دهد داده‎های تنظیمات امنیتی سیستم را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"‏اصلاح کردن نقشه سرویس‌های Google"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"‏به برنامه اجازه می‎دهد تا نقشه سرویس‌های Google را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"اجرا شدن در هنگام راه‌اندازی"</string>
-    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"به برنامه اجازه می‎دهد تا به محض اتمام راه‎اندازی سیستم خودبخود شروع به کار کند. این کار ممکن است باعث شود مدت زمان بیشتری صرف شدوع به کار رایانهٔ لوحی شود و به برنامه اجازه می‎دهد تا با اجرای همیشگی رایانهٔ لوحی را کند کند."</string>
-    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"به برنامه اجازه می‎دهد تا به محض اینکه سیستم راه‎اندازی شد خودبخود شروع به کار کند. این کار باعث می‎شود مدت زمان بیشتری صرف شود تا تلفن شروع به کار کند و به برنامه اجازه می‎دهد تا کل تلفن کند شود چون همیشه در حال اجرا شدن است."</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"‏به برنامه اجازه می‎دهد تا به محض اتمام راه‎اندازی سیستم خودبخود شروع به کار کند. این کار ممکن است باعث شود مدت زمان بیشتری صرف شدوع به کار رایانهٔ لوحی شود و به برنامه اجازه می‎دهد تا با اجرای همیشگی رایانهٔ لوحی را کند کند."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"‏به برنامه اجازه می‎دهد تا به محض اینکه سیستم راه‎اندازی شد خودبخود شروع به کار کند. این کار باعث می‎شود مدت زمان بیشتری صرف شود تا تلفن شروع به کار کند و به برنامه اجازه می‎دهد تا کل تلفن کند شود چون همیشه در حال اجرا شدن است."</string>
     <string name="permlab_broadcastSticky" msgid="7919126372606881614">"ارسال پخش چسبنده"</string>
-    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"به برنامه اجازه می‎دهد تا پخش‌های ماندگار را که پس از اتمام پخش باقی می‎مانند ارسال کند. استفاده بیش از حد این ویژگی ممکن است باعث مصرف بیش از حد حافظه و در نتیجه کندی یا ناپایداری رایانهٔ لوحی شود."</string>
-    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"به برنامه اجازه می‎دهد تا پخش‌های ماندگار را که پس از اتمام پخش باقی می‎مانند ارسال کند. استفاده بیش از حد این ویژگی ممکن است باعث مصرف بیش از حد حافظه و در نتیجه کندی یا ناپایداری تلفن شود."</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"‏به برنامه اجازه می‎دهد تا پخش‌های ماندگار را که پس از اتمام پخش باقی می‎مانند ارسال کند. استفاده بیش از حد این ویژگی ممکن است باعث مصرف بیش از حد حافظه و در نتیجه کندی یا ناپایداری رایانهٔ لوحی شود."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"‏به برنامه اجازه می‎دهد تا پخش‌های ماندگار را که پس از اتمام پخش باقی می‎مانند ارسال کند. استفاده بیش از حد این ویژگی ممکن است باعث مصرف بیش از حد حافظه و در نتیجه کندی یا ناپایداری تلفن شود."</string>
     <string name="permlab_readContacts" msgid="8348481131899886131">"خواندن مخاطبین شما"</string>
     <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"به برنامه اجازه می‌دهد داده‌های مربوط به مخاطبین ذخیره شده در رایانهٔ لوحی شما را بخواند از جمله، تعداد دفعات تماس‌هایی که برقرار کرده‌اید، ایمیل‌هایی که ارسال کرده‌اید یا به روش‌های دیگری به افراد خاصی ارتباط برقرار کرده‌اید. این با برنامه‌ها امکان می‌دهد داده‌های مخاطب شما را ذخیره کنند و برنامه‌های مخرب ممکن است داده‌های مخاطب را بدون اطلاع شما به اشتراک بگذارند."</string>
     <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"به برنامه اجازه می‌دهد داده‌های مربوط به مخاطبین ذخیره شده در تلفن شما را بخواند از جمله، تعداد دفعات تماس‌هایی که برقرار کرده‌اید، ایمیل‌هایی که ارسال کرده‌اید یا به روش‌های دیگری با افراد خاصی ارتباط برقرار کرده‌اید. این به برنامه‌ها امکان می‌دهد داده‌های مخاطب شما را ذخیره کنند و برنامه‌های مخرب ممکن است داده‌های مخاطب را بدون اطلاع شما به اشتراک بگذارند."</string>
@@ -447,12 +489,14 @@
     <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"به برنامه اجازه می‌دهد گزارش تماس رایانهٔ لوحی شما را بخواند از جمله داده‌های مربوط به تماس‌های ورودی و خروجی. این مجوز به برنامه‌ها اجازه می‌دهد داده‌های گزارش تماس شما را ذخیره کنند و برنامه‌های مخرب ممکن است داده‌های گزارش تماس شما را بدون اطلاع شما به اشتراک بگذارند."</string>
     <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"به برنامه اجازه می‌دهد گزارش تماس تلفنی شما را بخواند از جمله داده‌های مربوط به تماس‌های ورودی و خروجی. این مجوز به برنامه‌ها اجازه می‌دهد داده‌های گزارش تماس شما را ذخیره کنند و برنامه‌های مخرب ممکن است داده‌های گزارش تماس شما را بدون اطلاع شما به اشتراک بگذارند."</string>
     <string name="permlab_writeCallLog" msgid="8552045664743499354">"نوشتن گزارش تماس"</string>
-    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"به برنامه اجازه می‌دهد گزارشات تماس رایانهٔ لوحی شما، از جمله داده‌هایی درمورد تماس‎های ورودی و خروجی را تغییر دهد. برنامه‌های مخرب ممکن است از این ویژگی برای پاک کردن یا تغییر گزارش تماس شما استفاده کنند."</string>
-    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"به برنامه اجازه می‌دهد گزارشات تماس تلفنی شما، از جمله داده‌هایی درمورد تماس‎های ورودی و خروجی را تغییر دهد. برنامه‌های مخرب ممکن است از این ویژگی برای پاک کردن یا تغییر گزارش تماس شما استفاده کنند."</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"‏به برنامه اجازه می‌دهد گزارشات تماس رایانهٔ لوحی شما، از جمله داده‌هایی درمورد تماس‎های ورودی و خروجی را تغییر دهد. برنامه‌های مخرب ممکن است از این ویژگی برای پاک کردن یا تغییر گزارش تماس شما استفاده کنند."</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"‏به برنامه اجازه می‌دهد گزارشات تماس تلفنی شما، از جمله داده‌هایی درمورد تماس‎های ورودی و خروجی را تغییر دهد. برنامه‌های مخرب ممکن است از این ویژگی برای پاک کردن یا تغییر گزارش تماس شما استفاده کنند."</string>
     <string name="permlab_readProfile" msgid="4701889852612716678">"خواندن کارت تماس شما"</string>
-    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"به برنامه اجازه می‎دهد اطلاعات نمایه شخصی ذخیره شده در دستگاه شما، مانند نام و اطلاعات تماس شما را بخواند. یعنی برنامه می‎تواند شما را شناسایی کند و ممکن است اطلاعات نمایهٔ شما را به دیگران ارسال کند."</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"‏به برنامه اجازه می‎دهد اطلاعات نمایه شخصی ذخیره شده در دستگاه شما، مانند نام و اطلاعات تماس شما را بخواند. یعنی برنامه می‎تواند شما را شناسایی کند و ممکن است اطلاعات نمایهٔ شما را به دیگران ارسال کند."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"اصلاح کارت تماس شما"</string>
-    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"به برنامه اجازه می‎دهد تا اطلاعات نمایه شخصی ذخیره شده در دستگاه شما، مانند نام و اطلاعات تماس شما را تغییر دهد یا اضافه کند. یعنی برنامه‎ می‎تواند شما را شناسایی کند و ممکن است اطلاعات نمایهٔ شما را برای دیگران ارسال کند."</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"‏به برنامه اجازه می‎دهد تا اطلاعات نمایه شخصی ذخیره شده در دستگاه شما، مانند نام و اطلاعات تماس شما را تغییر دهد یا اضافه کند. یعنی برنامه‎ می‎تواند شما را شناسایی کند و ممکن است اطلاعات نمایهٔ شما را برای دیگران ارسال کند."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"حسگرهای بدن (مانند پایشگرهای ضربان قلب)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"به برنامه امکان می‌دهد به اطلاعات حسگرهایی که استفاده می‌کنید، دسترسی پیدا کند تا اندازه‌گیری‌های مربوط به آنچه که درون بدنتان رخ می‌دهد، مانند ضربان قلب، را انجام دهد."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"خواندن جریان اجتماعی شما"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"به برنامه اجازه می‌دهد به به‌روزرسانی‌های اجتماعی از طرف شما و دوستان شما دسترسی پیدا کرده و آن‌ها را همگام‌سازی کند. دقت کنید که هنگام اشتراک‌گذاری -- این ویژگی به برنامه اجازه می‌دهد ارتباطات بین شما و دوستان شما را در شبکه‌های اجتماعی، صرفنظر از محرمانه بودن آن‌ها بخواند. توجه: این مجوز ممکن است در همه شبکه‌های اجتماعی اجرا نشود."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"نوشتن در جریان اجتماعی شما"</string>
@@ -464,23 +508,25 @@
     <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"به برنامه اجازه می‌دهد رویدادهایی را که می‌توانید در رایانهٔ لوحی خود اصلاح نمایید، از جمله رویدادهای دوستان یا همکاران خود را، اضافه یا حذف کرده یا تغییر دهد. این ویژگی ممکن است به برنامه اجازه دهد پیام‌هایی را که به نظر می‌رسد از مالکین تقویم رسیده است ارسال نموده یا رویدادها را بدون اطلاع مالک اصلاح کنند."</string>
     <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"به برنامه اجازه می‌دهد رویدادهایی را که می‌توانید در تلفن خود اصلاح نمایید، از جمله رویدادهای دوستان یا همکاران خود را، اضافه یا حذف کرده یا تغییر دهد. این ویژگی ممکن است به برنامه اجازه دهد پیام‌هایی را که به نظر می‌رسد از مالکین تقویم رسیده است ارسال نموده یا رویدادها را بدون اطلاع مالک اصلاح کنند."</string>
     <string name="permlab_accessMockLocation" msgid="8688334974036823330">"منابع مکان کاذب برای تست"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"منابع موقعیت مکانی کاذب را برای تست کردن یا نصب یک ارائه‌دهنده موقعیت مکانی جدید ایجاد نمایید. این کار به برنامه امکان می‌دهد موقعیت مکانی و/یا وضعیت گزارش داده شده توسط سایر منابع موقعیت مکانی مانند GPS یا ارائه‌دهندگان موقعیت مکانی را نادیده بگیرد."</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"‏منابع موقعیت مکانی کاذب را برای تست کردن یا نصب یک ارائه‌دهنده موقعیت مکانی جدید ایجاد نمایید. این کار به برنامه امکان می‌دهد موقعیت مکانی و/یا وضعیت گزارش داده شده توسط سایر منابع موقعیت مکانی مانند GPS یا ارائه‌دهندگان موقعیت مکانی را نادیده بگیرد."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"دسترسی به فرمان‌های بیشتر ارائه دهنده مکان"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"به برنامه اجازه می‎دهد تا به فرمان‌های ارائه‎دهنده موقعیت مکانی دیگری دسترسی داشته باشد. این ویژگی ممکن است باعث مختل شدن عملکرد GPS یا دیگر منابع موقعیت مکانی توسط این برنامه شود."</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"‏به برنامه اجازه می‎دهد تا به فرمان‌های ارائه‎دهنده موقعیت مکانی دیگری دسترسی داشته باشد. این ویژگی ممکن است باعث مختل شدن عملکرد GPS یا دیگر منابع موقعیت مکانی توسط این برنامه شود."</string>
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"مجوز برای نصب یک ارائه دهنده مکان"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"منابع موقعیت مکانی کاذب را برای تست کردن یا نصب یک ارائه‌دهنده موقعیت مکانی جدید ایجاد نمایید. این کار به برنامه امکان می‌دهد موقعیت مکانی و/یا وضعیت گزارش داده شده توسط سایر منابع موقعیت مکانی مانند GPS یا ارائه‌دهندگان موقعیت مکانی را نادیده بگیرد."</string>
-    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"موقعیت مکانی دقیق (مبتنی بر GPS و شبکه)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"به برنامه اجازه می‌دهد که موقعیت مکانی دقیق شما را با استفاده از سیستم موقعیت‌یاب جهانی (GPS) یا منابع موقعیت مکانی شبکه‌ای مانند برج‌های سلولی یا Wi-Fi دریافت کند. این سرویس‌های موقعیت مکانی باید در دستگاه شما برای برنامه‌ای که از آنها استفاده می‌کند، فعال و در دسترس باشد. برنامه‌ها ممکن است از آن برای تعیین جایی که هستید، استفاده کنند و ممکن است نیروی باتری بیشتری مصرف کنند."</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"‏منابع موقعیت مکانی کاذب را برای تست کردن یا نصب یک ارائه‌دهنده موقعیت مکانی جدید ایجاد نمایید. این کار به برنامه امکان می‌دهد موقعیت مکانی و/یا وضعیت گزارش داده شده توسط سایر منابع موقعیت مکانی مانند GPS یا ارائه‌دهندگان موقعیت مکانی را نادیده بگیرد."</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"‏موقعیت مکانی دقیق (مبتنی بر GPS و شبکه)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"‏به برنامه اجازه می‌دهد که موقعیت مکانی دقیق شما را با استفاده از سیستم موقعیت‌یاب جهانی (GPS) یا منابع موقعیت مکانی شبکه‌ای مانند برج‌های سلولی یا Wi-Fi دریافت کند. این سرویس‌های موقعیت مکانی باید در دستگاه شما برای برنامه‌ای که از آنها استفاده می‌کند، فعال و در دسترس باشد. برنامه‌ها ممکن است از آن برای تعیین جایی که هستید، استفاده کنند و ممکن است نیروی باتری بیشتری مصرف کنند."</string>
     <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"موقعیت مکانی تقریبی (مبتنی بر شبکه)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"به برنامه اجازه می‌دهد که موقعیت مکانی تقریبی شما را بدست آورد. این موقعیت مکانی از سرویس‌های موقعیت مکانی که از منابع موقعیت مکانی شبکه‌ای مانند برج‌های سلولی و Wi-Fi استفاده می‌کنند، بدست می‌آید. این سرویس‌های موقعیت مکانی باید در دستگاه شما برای برنامه‌ای که از آنها استفاده می‌کند، فعال و در دسترس باشد. برنامه‌ها ممکن است از آن برای تعیین تقریبی جایی که هستید، استفاده کنند."</string>
-    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"دسترسی به SurfaceFlinger"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"اجازه می‎دهد برنامه از ویژگی‌های سطح پایین SurfaceFlinger استفاده کند."</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"‏به برنامه اجازه می‌دهد که موقعیت مکانی تقریبی شما را بدست آورد. این موقعیت مکانی از سرویس‌های موقعیت مکانی که از منابع موقعیت مکانی شبکه‌ای مانند برج‌های سلولی و Wi-Fi استفاده می‌کنند، بدست می‌آید. این سرویس‌های موقعیت مکانی باید در دستگاه شما برای برنامه‌ای که از آنها استفاده می‌کند، فعال و در دسترس باشد. برنامه‌ها ممکن است از آن برای تعیین تقریبی جایی که هستید، استفاده کنند."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"‏دسترسی به SurfaceFlinger"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"‏اجازه می‎دهد برنامه از ویژگی‌های سطح پایین SurfaceFlinger استفاده کند."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"خواندن بافر قاب"</string>
-    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"به برنامه اجازه می‎دهد تا محتوای بافر کادر را بخواند."</string>
-    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"پیکربندی صفحه نمایش‌های Wi‑Fi"</string>
-    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"به برنامه اجازه می‌دهد تا اتصال به صفحات نمایش Wi‑Fi را پیکربندی کند."</string>
-    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"کنترل صفحه نمایش‌های Wi‑Fi"</string>
-    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"به برنامه اجازه می‌دهد که ویژگی‌های سطح پایین صفحه‌های نمایش Wi‑Fi را کنترل کند."</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"‏به برنامه اجازه می‎دهد تا محتوای بافر کادر را بخواند."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"‏دسترسی به InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"‏اجازه می‎دهد برنامه از قابلیت‌های سطح پایین InputFlinger استفاده کند."</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"‏پیکربندی صفحه نمایش‌های Wi‑Fi"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"‏به برنامه اجازه می‌دهد تا اتصال به صفحات نمایش Wi‑Fi را پیکربندی کند."</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"‏کنترل صفحه نمایش‌های Wi‑Fi"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"‏به برنامه اجازه می‌دهد که ویژگی‌های سطح پایین صفحه‌های نمایش Wi‑Fi را کنترل کند."</string>
     <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"ضبط خروجی صدا"</string>
     <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"به برنامه امکان می‌دهد خروجی صدا را ضبط و هدایت کند."</string>
     <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"تشخیص کلیدگفته"</string>
@@ -495,133 +541,140 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"به برنامه امکان می‌دهد تنظیمات صوتی کلی مانند میزان صدا و بلندگوی مورد استفاده برای پخش صدا را اصلاح کند."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ضبط صدا"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"به برنامه اجازه می‌دهد صدا را با میکروفن ضبط کند. این مجوز به برنامه اجازه می‌دهد صدا را در هر زمان که بخواهید بدون تأیید شما ضبط کند."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"ارتباطات سیم کارت"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"به برنامه اجازه ارسال دستورات به سیم کارت را می‌دهد. این بسیار خطرناک است."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"عکسبرداری و فیلمبرداری"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"به برنامه اجازه می‌دهد با دوربین به عکسبرداری و فیلمبرداری بپردازد. این مجوز به برنامه اجازه می‌‌دهد از دوربین در هر زمانی بدون تأیید شما استفاده کند."</string>
-    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"LED نشانگر انتقال داده، هنگام استفاده از دوربین غیرفعال شود"</string>
-    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"به یک برنامه سیستم از قبل نصب شده اجازه می‌دهد LED نشانگر استفاده از دوربین را غیرفعال کند."</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"‏LED نشانگر انتقال داده، هنگام استفاده از دوربین غیرفعال شود"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"‏به یک برنامه سیستم از قبل نصب شده اجازه می‌دهد LED نشانگر استفاده از دوربین را غیرفعال کند."</string>
     <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"غیر فعال کردن دائم رایانهٔ لوحی"</string>
     <string name="permlab_brick" product="default" msgid="8337817093326370537">"تلفن بطور دائمی غیرفعال شود"</string>
-    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"به برنامه اجازه می‎دهد تا رایانهٔ لوحی را به طور کلی و دائمی غیرفعال کند. این کار بسیار خطرناک است."</string>
-    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"به برنامه اجازه می‎دهد تا گوشی را به طور کلی و دائمی غیرفعال کند. این کار بسیار خطرناک است."</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"‏به برنامه اجازه می‎دهد تا رایانهٔ لوحی را به طور کلی و دائمی غیرفعال کند. این کار بسیار خطرناک است."</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"‏به برنامه اجازه می‎دهد تا گوشی را به طور کلی و دائمی غیرفعال کند. این کار بسیار خطرناک است."</string>
     <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"راه‌اندازی مجدد اجباری رایانهٔ لوحی"</string>
     <string name="permlab_reboot" product="default" msgid="2898560872462638242">"اجبار برنامه برای راه‌اندازی مجدد"</string>
-    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"به برنامه اجازه می‎دهد تا سبب راه‌اندازی مجدد رایانهٔ لوحی شود."</string>
-    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"به برنامه اجازه می‎دهد تا سبب راه‌اندازی مجدد گوشی شود."</string>
-    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"دسترسی به سیستم فایل حافظهٔ USB"</string>
-    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"دسترسی به سیستم فایل کارت SD"</string>
-    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"به برنامه اجازه می‎دهد تا فایل‌های سیستمی در حافظه جداشدنی نصب شود یا نصب آن لغو شود."</string>
-    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"پاک کردن حافظهٔ USB"</string>
-    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"پاک کردن کارت SD"</string>
-    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"به برنامه اجازه می‎دهد تا حافظه جداشدنی را فرمت کند."</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"‏به برنامه اجازه می‎دهد تا سبب راه‌اندازی مجدد رایانهٔ لوحی شود."</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"‏به برنامه اجازه می‎دهد تا سبب راه‌اندازی مجدد گوشی شود."</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"‏دسترسی به سیستم فایل حافظهٔ USB"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"‏دسترسی به سیستم فایل کارت SD"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"‏به برنامه اجازه می‎دهد تا فایل‌های سیستمی در حافظه جداشدنی نصب شود یا نصب آن لغو شود."</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"‏پاک کردن حافظهٔ USB"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"‏پاک کردن کارت SD"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"‏به برنامه اجازه می‎دهد تا حافظه جداشدنی را فرمت کند."</string>
     <string name="permlab_asec_access" msgid="3411338632002193846">"دریافت اطلاعات مربوط به حافظهٔ داخلی"</string>
-    <string name="permdesc_asec_access" msgid="3094563844593878548">"به برنامه اجازه می‎دهد تا اطلاعات مربوط به حافظهٔ داخلی را دریافت کند."</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"‏به برنامه اجازه می‎دهد تا اطلاعات مربوط به حافظهٔ داخلی را دریافت کند."</string>
     <string name="permlab_asec_create" msgid="6414757234789336327">"ایجاد حافظهٔ داخلی"</string>
-    <string name="permdesc_asec_create" msgid="4558869273585856876">"به برنامه اجازه می‎دهد تا حافظهٔ داخلی ایجاد کند."</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"‏به برنامه اجازه می‎دهد تا حافظهٔ داخلی ایجاد کند."</string>
     <string name="permlab_asec_destroy" msgid="526928328301618022">"خراب کردن حافظهٔ داخلی"</string>
-    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"به برنامه اجازه می‎دهد تا حافظهٔ داخلی را از بین ببرد."</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"‏به برنامه اجازه می‎دهد تا حافظهٔ داخلی را از بین ببرد."</string>
     <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"نصب/لغو نصب حافظهٔ داخلی"</string>
-    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"به برنامه اجازه می‎دهد حافظهٔ داخلی را نصب کرده/نصب آنرا لغو کند."</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"‏به برنامه اجازه می‎دهد حافظهٔ داخلی را نصب کرده/نصب آنرا لغو کند."</string>
     <string name="permlab_asec_rename" msgid="7496633954080472417">"نامگذاری مجدد دستگاه ذخیره داخلی"</string>
-    <string name="permdesc_asec_rename" msgid="1794757588472127675">"به برنامه اجازه می‎دهد تا نام حافظهٔ داخلی را تغییر دهد."</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"‏به برنامه اجازه می‎دهد تا نام حافظهٔ داخلی را تغییر دهد."</string>
     <string name="permlab_vibrate" msgid="7696427026057705834">"کنترل لرزش"</string>
-    <string name="permdesc_vibrate" msgid="6284989245902300945">"به برنامه اجازه می‎دهد تا لرزاننده را کنترل کند."</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"‏به برنامه اجازه می‎دهد تا لرزاننده را کنترل کند."</string>
     <string name="permlab_flashlight" msgid="2155920810121984215">"کنترل چراغ قوه"</string>
-    <string name="permdesc_flashlight" msgid="6522284794568368310">"به برنامه اجازه می‎دهد تا چراغ قوه را کنترل کند."</string>
-    <string name="permlab_manageUsb" msgid="1113453430645402723">"مدیریت تنظیمات برگزیده و مجوزها برای دستگاه‌های USB"</string>
-    <string name="permdesc_manageUsb" msgid="7776155430218239833">"به برنامه اجازه می‎دهد تا تنظیمات برگزیده و مجوزهای دستگاه‌های USB را مدیریت کند."</string>
-    <string name="permlab_accessMtp" msgid="4953468676795917042">"اعمال پروتکل MTP"</string>
-    <string name="permdesc_accessMtp" msgid="6532961200486791570">"دسترسی به درایور کرنل MTP جهت اعمال پروتکل MTP USB را اجازه می‌دهد."</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"‏به برنامه اجازه می‎دهد تا چراغ قوه را کنترل کند."</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"‏مدیریت تنظیمات برگزیده و مجوزها برای دستگاه‌های USB"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"‏به برنامه اجازه می‎دهد تا تنظیمات برگزیده و مجوزهای دستگاه‌های USB را مدیریت کند."</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"‏اعمال پروتکل MTP"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"‏دسترسی به درایور کرنل MTP جهت اعمال پروتکل MTP USB را اجازه می‌دهد."</string>
     <string name="permlab_hardware_test" msgid="4148290860400659146">"تست سخت‌افزار"</string>
-    <string name="permdesc_hardware_test" msgid="6597964191208016605">"به برنامه اجازه می‎دهد به منظور تست سخت‌افزار، قسمت‌های جانبی مختلف را کنترل کنند."</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"‏به برنامه اجازه می‎دهد به منظور تست سخت‌افزار، قسمت‌های جانبی مختلف را کنترل کنند."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"تماس مستقیم با شماره تلفن‌ها"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"به برنامه اجازه می‌دهد بدون دخالت شما با شماره‌های تلفن تماس بگیرد. این ممکن است باعث ایجاد هزینه یا تماس‌های پیش‌بینی نشده شود. توجه داشته باشید که این به برنامه اجازه نمی‌دهد به برقراری تماس‌های اضطراری بپردازد. برنامه‌های مخرب ممکن است با برقراری تماس بدون تأیید شما هزینه‌هایی را برای شما ایجاد کنند."</string>
     <string name="permlab_callPrivileged" msgid="4198349211108497879">"تماس مستقیم با هر شماره تلفنی"</string>
-    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"به برنامه اجازه می‎دهد تا بدون دخالت با هر شماره تلفنی تماس بگیرد، از جمله شماره‎های اضطراری. برنامه‎های مخرب می‎توانند تماس‌های غیرضروری و غیر قانونی با خدمات اضطراری بگیرند."</string>
-    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"راه‌اندازی مستقیم تنظیم رایانهٔ لوحی CDMA"</string>
-    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"شروع مستقیم راه‌اندازی تلفن CDMA"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"به برنامه اجازه می‎دهد تا شرایط مقررات CDMA را شروع کند. برنامه‎های مخرب می‎توانند شرایط مقررات CDMA را در مواقع غیرضروری شروع کند."</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"‏به برنامه اجازه می‎دهد تا بدون دخالت با هر شماره تلفنی تماس بگیرد، از جمله شماره‎های اضطراری. برنامه‎های مخرب می‎توانند تماس‌های غیرضروری و غیر قانونی با خدمات اضطراری بگیرند."</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"‏راه‌اندازی مستقیم تنظیم رایانهٔ لوحی CDMA"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"‏شروع مستقیم راه‌اندازی تلفن CDMA"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"‏به برنامه اجازه می‎دهد تا شرایط مقررات CDMA را شروع کند. برنامه‎های مخرب می‎توانند شرایط مقررات CDMA را در مواقع غیرضروری شروع کند."</string>
     <string name="permlab_locationUpdates" msgid="7785408253364335740">"کنترل اعلان‌های به‌روزرسانی مکان"</string>
-    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"به برنامه اجازه می‎دهد اعلانهای به‎روزرسانی موقعیت مکانی را از رادیو فعال/غیرفعال کند. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"‏به برنامه اجازه می‎دهد اعلانهای به‎روزرسانی موقعیت مکانی را از رادیو فعال/غیرفعال کند. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"دسترسی به مشخصات اعلام ورود"</string>
-    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"به برنامه اجازه می‎دهد دسترسی به ویژگی‌های بارگذاری شده توسط سرویس‌های ورود را بخواند/بنویسد. برای استفاده برنامه‎های عادی مورد نیاز نیست."</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"‏به برنامه اجازه می‎دهد دسترسی به ویژگی‌های بارگذاری شده توسط سرویس‌های ورود را بخواند/بنویسد. برای استفاده برنامه‎های عادی مورد نیاز نیست."</string>
     <string name="permlab_bindGadget" msgid="776905339015863471">"انتخاب ابزارک‌ها"</string>
-    <string name="permdesc_bindGadget" msgid="8261326938599049290">"به برنامه اجازه می‎دهد تا به سیستم اعلام کند کدام ویجت را کدام برنامه می‎تواند استفاده کند. برنامه‎ای که این مجوز را دارد می‎تواند به داده‎های شخصی دیگر برنامه‎ها دسترسی داشته باشد. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"‏به برنامه اجازه می‎دهد تا به سیستم اعلام کند کدام ویجت را کدام برنامه می‎تواند استفاده کند. برنامه‎ای که این مجوز را دارد می‎تواند به داده‎های شخصی دیگر برنامه‎ها دسترسی داشته باشد. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"اصلاح کردن حالت تلفن"</string>
-    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"به برنامه اجازه می‎دهد ویژگی‌های دستگاه را کنترل کند. برنامه‎ای که این مجوز را دارد می‎تواند بدون اطلاع شما تعویض شبکه داشته باشد، رادیوی تلفن را روشن یا خاموش کند و کارهایی از این قبیل را انجام دهد."</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"‏به برنامه اجازه می‎دهد ویژگی‌های دستگاه را کنترل کند. برنامه‎ای که این مجوز را دارد می‎تواند بدون اطلاع شما تعویض شبکه داشته باشد، رادیوی تلفن را روشن یا خاموش کند و کارهایی از این قبیل را انجام دهد."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"خواندن وضعیت تلفن و شناسه"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"به برنامه اجازه می‌دهد به ویژگی‌های تلفن دستگاه شما دسترسی پیدا کند. این مجوز به برنامه اجازه می‌دهد شماره تلفن و شناسه‌های دستگاه، فعال بودن یک تماس و شماره راه دوری که با یک تماس متصل شده است را مشخص کند."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"خواندن وضعیت‌های دقیق تلفن"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"به برنامه امکان می‌دهد به وضعیت‌های دقیق تلفن دسترسی داشته باشد. این مجوز به برنامه امکان می‌دهد وضعیت واقعی تماس، اینکه آیا تماس فعال است یا در پس‌زمینه قرار دارد، تماس‌های ناموفق، وضعیت دقیق اتصال داده و اتصال‌های ناموفق داده را تعیین کند."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ممانعت از به خواب رفتن رایانهٔ لوحی"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ممانعت از به خواب رفتن تلفن"</string>
-    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"به برنامه اجازه می‎دهد تا از غیرفعال شدن رایانهٔ لوحی جلوگیری کند."</string>
-    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"به برنامه اجازه می‎دهد تا از غیرفعال شدن تلفن جلوگیری کند."</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"‏به برنامه اجازه می‎دهد تا از غیرفعال شدن رایانهٔ لوحی جلوگیری کند."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"‏به برنامه اجازه می‎دهد تا از غیرفعال شدن تلفن جلوگیری کند."</string>
     <string name="permlab_transmitIr" msgid="7545858504238530105">"ارسال مادون قرمز"</string>
     <string name="permdesc_transmitIr" product="tablet" msgid="5358308854306529170">"به برنامه اجازه می‌دهد تا از فرستنده مادون قرمز رایانه لوحی استفاده کند."</string>
     <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"به برنامه اجازه می‌دهد تا از فرستنده مادون قرمز تلفن استفاده کند."</string>
     <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"روشن/خاموش کردن رایانهٔ لوحی"</string>
     <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"روشن/خاموش کردن تلفن"</string>
-    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"به برنامه اجازه می‎دهد رایانهٔ لوحی را روشن یا خاموش کند."</string>
-    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"به برنامه اجازه می‎دهد گوشی را روشن یا خاموش کند."</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"‏به برنامه اجازه می‎دهد رایانهٔ لوحی را روشن یا خاموش کند."</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"‏به برنامه اجازه می‎دهد گوشی را روشن یا خاموش کند."</string>
     <string name="permlab_factoryTest" msgid="3715225492696416187">"اجرا در حالت تست کارخانه"</string>
     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"اجرا به‌عنوان تست سازنده سطح پایین، امکان دسترسی کامل به سخت‌افزار رایانهٔ لوحی شما را فراهم می‌آورد. فقط زمانی که رایانهٔ لوحی در حالت تست سازنده در حال اجراست قابل دسترسی است."</string>
     <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"اجرا به‌عنوان تست سازنده سطح پایین، امکان دسترسی کامل به سخت‌افزار تلفن شما را فراهم می‌آورد. فقط زمانی که تلفن در حالت تست سازنده در حال اجراست قابل دسترسی است."</string>
     <string name="permlab_setWallpaper" msgid="6627192333373465143">"تنظیم تصویر زمینه"</string>
-    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"به برنامه اجازه می‎دهد تا تصویر زمینه سیستم را تنظیم کند."</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"‏به برنامه اجازه می‎دهد تا تصویر زمینه سیستم را تنظیم کند."</string>
     <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"تنظیم اندازه تصویر زمینه"</string>
-    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"به برنامه اجازه می‎دهد تا نکات اندازه تصویر زمینه سیستم را تنظیم کند."</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"‏به برنامه اجازه می‎دهد تا نکات اندازه تصویر زمینه سیستم را تنظیم کند."</string>
     <string name="permlab_masterClear" msgid="2315750423139697397">"بازنشانی سیستم به موارد پیش‌فرض کارخانه"</string>
-    <string name="permdesc_masterClear" msgid="3665380492633910226">"به برنامه اجازه می‎دهد تا بطور کامل سیستم را روی تنظیمات کارخانه بازنشانی کند، همه داده‎ها، پیکربندی و برنامه‎های نصب شده را پاک کند."</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"‏به برنامه اجازه می‎دهد تا بطور کامل سیستم را روی تنظیمات کارخانه بازنشانی کند، همه داده‎ها، پیکربندی و برنامه‎های نصب شده را پاک کند."</string>
     <string name="permlab_setTime" msgid="2021614829591775646">"تنظیم ساعت"</string>
-    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"به برنامه اجازه می‎دهد تا زمان ساعت رایانهٔ لوحی را تغییر دهد."</string>
-    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"به برنامه اجازه می‎دهد تا زمان ساعت تلفن را تغییر دهد."</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"‏به برنامه اجازه می‎دهد تا زمان ساعت رایانهٔ لوحی را تغییر دهد."</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"‏به برنامه اجازه می‎دهد تا زمان ساعت تلفن را تغییر دهد."</string>
     <string name="permlab_setTimeZone" msgid="2945079801013077340">"تنظیم منطقهٔ زمانی"</string>
-    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"به برنامه اجازه می‎دهد تا منطقهٔ زمانی رایانهٔ لوحی را تغییر دهد."</string>
-    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"به برنامه اجازه می‎دهد تا منطقهٔ زمانی تلفن را تغییر دهد."</string>
-    <string name="permlab_accountManagerService" msgid="4829262349691386986">"عملکرد به‌عنوان AccountManagerService"</string>
-    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"به برنامه اجازه می‎دهد با AccountAuthenticators تماس برقرار کند."</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"‏به برنامه اجازه می‎دهد تا منطقهٔ زمانی رایانهٔ لوحی را تغییر دهد."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"‏به برنامه اجازه می‎دهد تا منطقهٔ زمانی تلفن را تغییر دهد."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"‏عملکرد به‌عنوان AccountManagerService"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"‏به برنامه اجازه می‎دهد با AccountAuthenticators تماس برقرار کند."</string>
     <string name="permlab_getAccounts" msgid="1086795467760122114">"یافتن حساب‌ها در دستگاه"</string>
     <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"به برنامه اجازه می‌دهد به لیست حساب‌های شناخته شده توسط رایانهٔ لوحی دسترسی پیدا کند. این ممکن است حسا‌ب‌های ایجاد شده توسط برنامه‌هایی را که نصب کرده‌اید، شامل شود."</string>
     <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"به برنامه اجازه می‌دهد به لیست حساب‌های شناخته شده توسط تلفن دسترسی پیدا کند. این ممکن است حسا‌ب‌های ایجاد شده توسط برنامه‌هایی را که نصب کرده‌اید، شامل شود."</string>
     <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"ایجاد حساب‌ها و تنظیم گذرواژ‌ه‌ها"</string>
-    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"به برنامه اجازه می‎دهد از امکانات تأیید کننده اعتبار حساب AccountManager از جمله ایجاد حساب و دریافت و تنظیم گذرواژه‎ها استفاده کند."</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"‏به برنامه اجازه می‎دهد از امکانات تأیید کننده اعتبار حساب AccountManager از جمله ایجاد حساب و دریافت و تنظیم گذرواژه‎ها استفاده کند."</string>
     <string name="permlab_manageAccounts" msgid="4983126304757177305">"افزودن یا حذف حساب‌ها"</string>
-    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"به برنامه اجازه می‎دهد تا عملکردهایی مانند افزودن و حذف حساب‌ها و حذف گذرواژه‎ها را انجام دهد."</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"‏به برنامه اجازه می‎دهد تا عملکردهایی مانند افزودن و حذف حساب‌ها و حذف گذرواژه‎ها را انجام دهد."</string>
     <string name="permlab_useCredentials" msgid="235481396163877642">"استفاده از حساب‌ها در دستگاه"</string>
-    <string name="permdesc_useCredentials" msgid="7984227147403346422">"به برنامه اجازه می‎دهد نشانه‎های تایید اعتبار را درخواست کند."</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"‏به برنامه اجازه می‎دهد نشانه‎های تایید اعتبار را درخواست کند."</string>
     <string name="permlab_accessNetworkState" msgid="4951027964348974773">"مشاهدهٔ اتصالات شبکه"</string>
     <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"به برنامه امکان می‌دهد اطلاعات مربوط به اتصالات شبکه مانند شبکه‌های موجود و متصل را مشاهده کند."</string>
     <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"دسترسی کامل به شبکه"</string>
     <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"به برنامه امکان می‌دهد سوکت‌های شبکه را ایجاد کند و از پروتکل‌های شبکه سفارشی استفاده نماید. مرورگر و سایر برنامه‌ها روشی را برای ارسال داده‌ها به اینترنت ارائه می‌کنند بنابراین این مجوز برای ارسال داده به اینترنت ضروری نیست."</string>
     <string name="permlab_writeApnSettings" msgid="505660159675751896">"تغییر/رهگیری تنظیمات شبکه و ترافیک"</string>
-    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"به برنامه اجازه می‎دهد تا تنظیمات شبکه را تغییر دهد و در کل ترافیک شبکه مداخله کند و آن را زیر نظر داشته باشد، برای مثال پراکسی و پورت هر APN را تغییر دهد. برنامه‎های مخرب می‎توانند بسته‎های شبکه را بدون اطلاع شما کنترل کنند، مجددا هدایت کنند یا تغییر دهند."</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"‏به برنامه اجازه می‎دهد تا تنظیمات شبکه را تغییر دهد و در کل ترافیک شبکه مداخله کند و آن را زیر نظر داشته باشد، برای مثال پراکسی و پورت هر APN را تغییر دهد. برنامه‎های مخرب می‎توانند بسته‎های شبکه را بدون اطلاع شما کنترل کنند، مجددا هدایت کنند یا تغییر دهند."</string>
     <string name="permlab_changeNetworkState" msgid="958884291454327309">"تغییر قابلیت اتصال شبکه"</string>
-    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"به برنامه اجازه می‎دهد تا وضعیت اتصال شبکه را تغییر دهد."</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"‏به برنامه اجازه می‎دهد تا وضعیت اتصال شبکه را تغییر دهد."</string>
     <string name="permlab_changeTetherState" msgid="5952584964373017960">"تغییر قابلیت اتصال داده با سیم"</string>
-    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"به برنامه اجازه می‎دهد تا وضعیت اتصال شبکه اتصال داده با سیم را تغییر دهد."</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"‏به برنامه اجازه می‎دهد تا وضعیت اتصال شبکه اتصال داده با سیم را تغییر دهد."</string>
     <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"تغییر تنظیمات میزان استفاده داده در پس‌زمینه"</string>
-    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"به برنامه اجازه می‎دهد تا تنظیم کاربرد داده‎های پس‌زمینه را تغییر دهد."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"مشاهدهٔ اتصالات Wi-Fi"</string>
-    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"به برنامه امکان می‌دهد اطلاعات مربوط به شبکه Wi-Fi را مشاهده کند، به‌عنوان مثال فعال بودن Wi-Fi و نام دستگاه‌های Wi-Fi متصل."</string>
-    <string name="permlab_changeWifiState" msgid="6550641188749128035">"اتصال به Wi-Fi و قطع اتصال از آن"</string>
-    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"به برنامه اجازه می‎دهد تا به نقاط دسترسی Wi-Fi وصل شود و ارتباط خود را با آن‌ها قطع کند و تغییراتی را در پیکربندی دستگاه برای شبکه‎های Wi-Fi ایجاد کند."</string>
-    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"دریافت چندگانه Wi-Fi را مجاز می‌کند"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"به برنامه اجازه می‌دهد به دریافت بسته‌های ارسالی به همه دستگاه‌های موجود در شبکه Wi-Fi با استفاده از آدرس‌های پخش چندگانه و نه فقط به رایانهٔ لوحی شما بپردازند. این از توان مصرف بیشتری نسبت به حالت پخش غیرچندگانه استفاده می‌کند."</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"به برنامه اجازه می‌دهد به دریافت بسته‌های ارسالی به همه دستگاه‌های موجود در شبکه Wi-Fi با استفاده از آدرس‌های پخش چندگانه و نه فقط به تلفن شما بپردازند. این از توان مصرف بیشتری نسبت به حالت پخش غیرچندگانه استفاده می‌کند."</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"‏به برنامه اجازه می‎دهد تا تنظیم کاربرد داده‎های پس‌زمینه را تغییر دهد."</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"‏مشاهدهٔ اتصالات Wi-Fi"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"‏به برنامه امکان می‌دهد اطلاعات مربوط به شبکه Wi-Fi را مشاهده کند، به‌عنوان مثال فعال بودن Wi-Fi و نام دستگاه‌های Wi-Fi متصل."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"‏اتصال به Wi-Fi و قطع اتصال از آن"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"‏به برنامه اجازه می‎دهد تا به نقاط دسترسی Wi-Fi وصل شود و ارتباط خود را با آن‌ها قطع کند و تغییراتی را در پیکربندی دستگاه برای شبکه‎های Wi-Fi ایجاد کند."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"‏دریافت چندگانه Wi-Fi را مجاز می‌کند"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"‏به برنامه اجازه می‌دهد به دریافت بسته‌های ارسالی به همه دستگاه‌های موجود در شبکه Wi-Fi با استفاده از آدرس‌های پخش چندگانه و نه فقط به رایانهٔ لوحی شما بپردازند. این از توان مصرف بیشتری نسبت به حالت پخش غیرچندگانه استفاده می‌کند."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"‏به برنامه اجازه می‌دهد به دریافت بسته‌های ارسالی به همه دستگاه‌های موجود در شبکه Wi-Fi با استفاده از آدرس‌های پخش چندگانه و نه فقط به تلفن شما بپردازند. این از توان مصرف بیشتری نسبت به حالت پخش غیرچندگانه استفاده می‌کند."</string>
     <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"دسترسی به تنظیمات بلوتوث"</string>
-    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"به برنامه اجازه می‎دهد تا رایانهٔ لوحی بلوتوث محلی را پیکربندی کرده، دستگاه‌های راه دور را شناسایی کرده و با آن‌ها جفت شود."</string>
-    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"به برنامه اجازه می‎دهد تا تلفن بلوتوث محلی را پیکربندی کند و دستگاه‌های راه دور را پیدا کند و با آن‌ها جفت شود."</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"‏به برنامه اجازه می‎دهد تا رایانهٔ لوحی بلوتوث محلی را پیکربندی کرده، دستگاه‌های راه دور را شناسایی کرده و با آن‌ها جفت شود."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"‏به برنامه اجازه می‎دهد تا تلفن بلوتوث محلی را پیکربندی کند و دستگاه‌های راه دور را پیدا کند و با آن‌ها جفت شود."</string>
     <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"اجازه ارتباط با بلوتوث از طریق برنامه"</string>
     <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"به برنامه امکان می‌دهد بدون تعامل کاربر با دستگاه‌های راه دور مرتبط شود."</string>
     <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"به برنامه امکان می‌دهد بدون تعامل کاربر با دستگاه‌های راه دور مرتبط شود."</string>
-    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"اتصال و قطع اتصال از WiMAX"</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"‏اتصال و قطع اتصال از WiMAX"</string>
     <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"به برنامه امکان می‌دهد فعال بودن وایمکس و اطلاعات مربوط به هر یک از شبکه‌های وایمکس متصل را مشخص کند."</string>
-    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"تغییر وضعیت WiMAX"</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"‏تغییر وضعیت WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"به برنامه امکان می‌دهد رایانهٔ لوحی را به شبکه‌های وایمکس متصل کرده یا اتصال آن را از این شبکه‌ها قطع کند."</string>
-    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"به برنامه امکان می‎دهد تا تلفن را به شبکه‌های وایمکس متصل کرده یا اتصال آنرا از این شبکه‌ها قطع کند."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"‏به برنامه امکان می‎دهد تا تلفن را به شبکه‌های وایمکس متصل کرده یا اتصال آنرا از این شبکه‌ها قطع کند."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"امتیازبندی شبکه‌ها"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"به برنامه اجازه می‌دهد که شبکه‌ها را درجه‌بندی کند و روی اینکه رایانه لوحی باید کدام شبکه را در اولویت قرار دهد تأثیر می‌گذارد."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"به برنامه اجازه می‌دهد که شبکه‌ها را درجه‌بندی کند و روی اینکه تلفن باید کدام شبکه را در اولویت قرار دهد تأثیر می‌گذارد."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"جفت کردن با دستگاه‌های بلوتوث"</string>
-    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"به برنامه اجازه می‎دهد تا پیکربندی بلوتوث در رایانهٔ لوحی را مشاهده کند و اتصال با دستگاه‌های مرتبط را برقرار کرده و بپذیرد."</string>
-    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"به برنامه اجازه می‎دهد تا پیکربندی بلوتوث در تلفن را مشاهده کند، و اتصالات دستگاه‌های مرتبط را برقرار کرده و بپذیرد."</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"‏به برنامه اجازه می‎دهد تا پیکربندی بلوتوث در رایانهٔ لوحی را مشاهده کند و اتصال با دستگاه‌های مرتبط را برقرار کرده و بپذیرد."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"‏به برنامه اجازه می‎دهد تا پیکربندی بلوتوث در تلفن را مشاهده کند، و اتصالات دستگاه‌های مرتبط را برقرار کرده و بپذیرد."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"کنترل ارتباط راه نزدیک"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"به برنامه اجازه می‎دهد تا با تگهای ارتباط میدان نزدیک (NFC)، کارتها و فایل خوان ارتباط برقرار کند."</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"‏به برنامه اجازه می‎دهد تا با تگهای ارتباط میدان نزدیک (NFC)، کارتها و فایل خوان ارتباط برقرار کند."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"غیرفعال کردن قفل صفحه شما"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"به برنامه امکان می‌دهد قفل کلید و هر گونه امنیت گذرواژه مرتبط را غیرفعال کند. به‌عنوان مثال تلفن هنگام دریافت یک تماس تلفنی ورودی قفل کلید را غیرفعال می‌کند و بعد از پایان تماس، قفل کلید را دوباره فعال می‌کند."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"خواندن تنظیمات همگام‌سازی"</string>
@@ -631,54 +684,60 @@
     <string name="permlab_readSyncStats" msgid="7396577451360202448">"خواندن اطلاعات آماری همگام‌سازی"</string>
     <string name="permdesc_readSyncStats" msgid="1510143761757606156">"به یک برنامه اجازه می‌دهد وضعیت همگام‌سازی یک حساب را بخواند، از جمله سابقه رویدادهای همگام‌سازی و میزان داده‌های همگام‌سازی شده."</string>
     <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"خواندن فیدهای مشترک"</string>
-    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"به برنامه اجازه می‎دهد تا جزئیات مربوط به فیدهای همگام شده کنونی را دریافت کند."</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"‏به برنامه اجازه می‎دهد تا جزئیات مربوط به فیدهای همگام شده کنونی را دریافت کند."</string>
     <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"نوشتن فیدهای مشترک"</string>
-    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"به برنامه اجازه می‎دهد تا فیدهای همگام شده کنونی را تغییر دهد. برنامه‎های مخرب می‎توانند فیدهای همگام شده را تغییر دهند."</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"‏به برنامه اجازه می‎دهد تا فیدهای همگام شده کنونی را تغییر دهد. برنامه‎های مخرب می‎توانند فیدهای همگام شده را تغییر دهند."</string>
     <string name="permlab_readDictionary" msgid="4107101525746035718">"خواندن واژه‌هایی که به فرهنگ‌ لغت اضافه کردید"</string>
-    <string name="permdesc_readDictionary" msgid="659614600338904243">"به برنامه اجازه می‎دهد همه کلمه، نام و عباراتی را که کاربر در فرهنگ لغت خود ذخیره کرده است بخواند."</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"‏به برنامه اجازه می‎دهد همه کلمه، نام و عباراتی را که کاربر در فرهنگ لغت خود ذخیره کرده است بخواند."</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"افزودن کلمات به فرهنگ لغت تعریف‌ شده توسط کاربر"</string>
-    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"به برنامه اجازه می‎دهد تا کلمات جدید را در فهرست کاربر بنویسد."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"خواندن محتویات حافظهٔ USB شما"</string>
-    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"خواندن محتویات کارت SD شما"</string>
-    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"به برنامه اجازه می‌دهد محتواهای فضای ذخیره USB را بخواند."</string>
-    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"به برنامه اجازه می‌دهد محتواهای کارت SD شما را بخواند."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"اصلاح یا حذف محتویات حافظهٔ USB شما"</string>
-    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"محتوای کارت SD شما را اصلاح کرده یا تغییر دهد"</string>
-    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"به برنامه اجازه می‎دهد تا در حافظهٔ USB بنویسد."</string>
-    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"به برنامه اجازه می‎دهد تا در کارت SD بنویسد."</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"‏به برنامه اجازه می‎دهد تا کلمات جدید را در فهرست کاربر بنویسد."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"‏خواندن محتویات حافظهٔ USB شما"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"‏خواندن محتویات کارت SD شما"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"‏به برنامه اجازه می‌دهد محتواهای فضای ذخیره USB را بخواند."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"‏به برنامه اجازه می‌دهد محتواهای کارت SD شما را بخواند."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"‏اصلاح یا حذف محتویات حافظهٔ USB شما"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"‏محتوای کارت SD شما را اصلاح کرده یا تغییر دهد"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"‏به برنامه اجازه می‎دهد تا در حافظهٔ USB بنویسد."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"‏به برنامه اجازه می‎دهد تا در کارت SD بنویسد."</string>
     <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"تغییر/حذف محتواهای حافظه رسانه داخلی"</string>
-    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"به برنامه اجازه می‎دهد تا محتویات حافظه رسانه داخلی را تغییر دهد."</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"‏به برنامه اجازه می‎دهد تا محتویات حافظه رسانه داخلی را تغییر دهد."</string>
     <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"مدیریت فضای ذخیره‌سازی اسناد"</string>
     <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"به برنامه اجازه می‌دهد فضای ذخیره‌سازی اسناد را مدیریت کند."</string>
     <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"دسترسی به دستگاه ذخیره خارجی تمام کاربران"</string>
     <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"به برنامه اجازه می‌دهد به دستگاه ذخیره خارجی برای همه کاربران دسترسی داشته باشد."</string>
     <string name="permlab_cache_filesystem" msgid="5656487264819669824">"دسترسی به سیستم فایل حافظهٔ پنهان"</string>
-    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"به برنامه اجازه می‎دهد تا سیستم فایل حافظهٔ پنهان را بخواند و بنویسد."</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"‏به برنامه اجازه می‎دهد تا سیستم فایل حافظهٔ پنهان را بخواند و بنویسد."</string>
     <string name="permlab_use_sip" msgid="5986952362795870502">"علامت‌گذاری/دریافت تماس‌های اینترنتی"</string>
-    <string name="permdesc_use_sip" msgid="4717632000062674294">"به برنامه اجازه می‎دهد تا از خدمات SIP استفاده کند و تماس‌های اینترنتی بگیرد/دریافت کند."</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"‏به برنامه اجازه می‎دهد تا از خدمات SIP استفاده کند و تماس‌های اینترنتی بگیرد/دریافت کند."</string>
     <string name="permlab_bind_call_service" msgid="6724009726671246551">"تعامل با صفحه‌نمایش هنگام تماس"</string>
     <string name="permdesc_bind_call_service" msgid="8732547662442572435">"به برنامه امکان می‌دهد کنترل کند که کاربر چه زمانی و چگونه صفحه‌نمایش هنگام تماس را مشاهده کند."</string>
     <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"خواندن سابقه استفاده از شبکه"</string>
-    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"به برنامه اجازه می‎دهد تا کاربرد شبکه را در طول زمان برای برنامه‎ها و شبکه‎های خاص بخواند."</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"‏به برنامه اجازه می‎دهد تا کاربرد شبکه را در طول زمان برای برنامه‎ها و شبکه‎های خاص بخواند."</string>
     <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"مدیریت خط مشی شبکه"</string>
-    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"به برنامه اجازه می‎دهد تا خط مشی‎های شبکه را مدیریت کند و قوانین خاص برنامه را تعیین کند."</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"‏به برنامه اجازه می‎دهد تا خط مشی‎های شبکه را مدیریت کند و قوانین خاص برنامه را تعیین کند."</string>
     <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"اصلاح محاسبه استفاده از شبکه"</string>
-    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"به برنامه اجازه می‎دهد تا نحوه محاسبه کاربرد شبکه در برنامه را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"‏به برنامه اجازه می‎دهد تا نحوه محاسبه کاربرد شبکه در برنامه را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"تغییر علائم سوکت"</string>
     <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"به برنامه اجازه می‌دهد برای مسیریابی علائم سوکت را تغییر دهد."</string>
     <string name="permlab_accessNotifications" msgid="7673416487873432268">"اعلان‌های دسترسی"</string>
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"به برنامه اجازه می‌دهد به بازیابی، بررسی و پاک کردن اعلان‌ها از جمله موارد پست شده توسط سایر برنامه‌ها بپردازد."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"اتصال به یک سرویس شنونده اعلان"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"به دارنده اجازه می‌دهد به یک رابط سطح بالای سرویس شنونده اعلان متصل شود. هرگز نباید برای برنامه‌های عادی لازم شود."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"مقید بودن به سرویس ارائه‌دهنده وضعیت"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"به دارنده امکان می‌دهد تا به واسط سطح بالای سرویس ارائه‌دهنده وضعیت مقید باشد. برای برنامه‌های عادی هرگز نباید لازم باشد."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"لغو برنامه پیکربندی ارائه شده توسط شرکت مخابراتی"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"به دارنده اجازه می‌دهد که تنظیمات برنامه شرکت مخابراتی را لغو کند. هرگز برای برنامه‌های معمولی مورد نیاز نیست."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"گوش دادن برای بررسی شرایط شبکه"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"به برنامه امکان می‌دهد برای بررسی شرایط شبکه گوش دهد. این امکان هرگز نباید برای برنامه‌های معمولی مورد نیاز باشد."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"تغییر کالیبراسیون دستگاه ورودی"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"به برنامه امکان می‌دهد پارامترهای کالیبراسیون صفحه لمسی را تغییر دهد. هرگز نباید برای برنامه‌های عادی مورد نیاز باشد."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"‏دسترسی به گواهی‌های DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"‏به یک برنامه کاربردی اجازه ارائه مجوز و استفاده از گواهی‌های DRM را می‌دهد. هرگز برای برنامه‌های عادی مورد نیاز نیست."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"تنظیم قوانین رمز ورود"</string>
-    <string name="policydesc_limitPassword" msgid="3252114203919510394">"طول و نویسه‎های مجاز در گذرواژه‌های بازکردن قفل صفحه را کنترل کنید."</string>
+    <string name="policydesc_limitPassword" msgid="3252114203919510394">"‏طول و نویسه‎های مجاز در گذرواژه‌های بازکردن قفل صفحه را کنترل کنید."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"نمایش تلاش‌های قفل گشایی صفحه"</string>
-    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"تعداد گذرواژه‎های اشتباه تایپ شده را هنگام بازکردن قفل صفحه کنترل می‌کند، و یا اگر دفعات زیادی گذرواژه اشتباه تایپ شود رایانهٔ لوحی را قفل می‎کند و همه داده‎های رایانهٔ لوحی را پاک می‎کند."</string>
-    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"تعداد گذرواژه‎های نادرست تایپ شده را کنترل می‎کند. هنگام بازکردن قفل صفحه اگر دفعات زیادی گذرواژه نادرست تایپ کرده‎اید، تلفن را قفل کنید یا همه داده‎های تلفن را پاک کنید."</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"‏تعداد گذرواژه‎های اشتباه تایپ شده را هنگام بازکردن قفل صفحه کنترل می‌کند، و یا اگر دفعات زیادی گذرواژه اشتباه تایپ شود رایانهٔ لوحی را قفل می‎کند و همه داده‎های رایانهٔ لوحی را پاک می‎کند."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"‏تعداد گذرواژه‎های نادرست تایپ شده را کنترل می‎کند. هنگام بازکردن قفل صفحه اگر دفعات زیادی گذرواژه نادرست تایپ کرده‎اید، تلفن را قفل کنید یا همه داده‎های تلفن را پاک کنید."</string>
     <string name="policylab_resetPassword" msgid="2620077191242688955">"تغییر رمز ورود قفل گشایی صفحه"</string>
     <string name="policydesc_resetPassword" msgid="605963962301904458">"گذرواژه بازگشایی قفل صفحه را تغییر دهید."</string>
     <string name="policylab_forceLock" msgid="2274085384704248431">"قفل کردن صفحه"</string>
@@ -693,7 +752,7 @@
     <string name="policylab_encryptedStorage" msgid="8901326199909132915">"تنظیم رمزگذاری حافظه"</string>
     <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"باید اطلاعات ذخیره شده برنامه رمزگذاری شود."</string>
     <string name="policylab_disableCamera" msgid="6395301023152297826">"غیر فعال کردن دوربین ها"</string>
-    <string name="policydesc_disableCamera" msgid="2306349042834754597">"از استفاده از تمام دوربین‎های دستگاه جلوگیری کنید."</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"جلوگیری از استفاده از همه دوربین‌های دستگاه."</string>
     <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"غیرفعال کردن ویژگی‌‌ها در محافظ کلید"</string>
     <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"از استفاده از برخی ویژگی‌ها در محافظ کلید جلوگیری شود."</string>
   <string-array name="phoneTypes">
@@ -809,9 +868,10 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"صفحهٔ اصلی"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"محل کار"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"سایر موارد"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"هیچ برنامه‌ای برای مشاهده این مخاطب پیدا نشد."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"پین کد را وارد کنید"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK و پین کد جدید را تایپ کنید"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"کد PUK"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"‏PUK و پین کد جدید را تایپ کنید"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"‏کد PUK"</string>
     <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"پین کد جدید"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"برای تایپ گذرواژه لمس کنید"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"برای بازکردن قفل، گذرواژه را وارد کنید"</string>
@@ -829,7 +889,7 @@
     <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"صحیح است!"</string>
     <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"دوباره امتحان کنید"</string>
     <string name="lockscreen_password_wrong" msgid="5737815393253165301">"دوباره امتحان کنید"</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"دفعات تلاش برای Face Unlock از حداکثر مجاز بیشتر شد"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"‏دفعات تلاش برای Face Unlock از حداکثر مجاز بیشتر شد"</string>
     <string name="lockscreen_plugged_in" msgid="8057762828355572315">"در حال شارژ، <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="lockscreen_charged" msgid="321635745684060624">"شارژ شد"</string>
     <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
@@ -840,7 +900,7 @@
     <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"سیم کارت را وارد کنید."</string>
     <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"سیم کارت موجود نیست یا قابل خواندن نیست. یک سیم کارت وارد کنید."</string>
     <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"سیم کارت غیرقابل استفاده است."</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"سیم کارت شما به طور دائم غیر فعال شده است. \nبرای داشتن سیم کارت دیگر با ارائه‎دهنده سرویس بی‎سیم خود تماس بگیرید."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"‏سیم کارت شما به طور دائم غیر فعال شده است. \nبرای داشتن سیم کارت دیگر با ارائه‎دهنده سرویس بی‎سیم خود تماس بگیرید."</string>
     <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"دکمه تراک قبلی"</string>
     <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"دکمه تراک بعدی"</string>
     <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"دکمه مکث"</string>
@@ -848,15 +908,15 @@
     <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"دکمه توقف"</string>
     <string name="emergency_calls_only" msgid="6733978304386365407">"فقط تماس‌های اضطراری"</string>
     <string name="lockscreen_network_locked_message" msgid="143389224986028501">"شبکه قفل شد"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"سیم کارت با PUK قفل شده است."</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"‏سیم کارت با PUK قفل شده است."</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"لطفاً به راهنمای کاربر مراجعه کرده یا با مرکز پشتیبانی از مشتریان تماس بگیرید."</string>
     <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"سیم کارت قفل شد."</string>
     <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"بازگشایی قفل سیم کارت..."</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. \n\nلطفاً پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"‏الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. \n\nلطفاً پس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"گذرواژهٔ خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کرده‌اید. \n\nپس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"پین را<xliff:g id="NUMBER_0">%d</xliff:g>  بار اشتباه تایپ کرده‎اید. \n\nپس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که برای بازگشایی قفل رایانهٔ لوحی خود به Google وارد شوید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر از شما خواسته می‎شود که برای بازگشایی قفل گوشی خود به برنامهٔ Google وارد شوید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"‏پین را<xliff:g id="NUMBER_0">%d</xliff:g>  بار اشتباه تایپ کرده‎اید. \n\nپس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"‏شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که برای بازگشایی قفل رایانهٔ لوحی خود به Google وارد شوید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"‏شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر از شما خواسته می‎شود که برای بازگشایی قفل گوشی خود به برنامهٔ Google وارد شوید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"شما به اشتباه <xliff:g id="NUMBER_0">%d</xliff:g> بار اقدام به باز کردن قفل رایانهٔ لوحی کرده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر، رایانهٔ لوحی به پیش‌فرض کارخانه بازنشانی می‌شود و تمام داده‌های کاربر از دست خواهد رفت."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"شما به اشتباه <xliff:g id="NUMBER_0">%d</xliff:g> بار اقدام به باز کردن قفل تلفن کرده‌اید. پس از<xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر، تلفن به پیش‌فرض کارخانه بازنشانی می‌شود و تمام داده‌های کاربر از دست خواهد رفت."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"شما به اشتباه اقدام به باز کردن قفل <xliff:g id="NUMBER">%d</xliff:g> رایانهٔ لوحی کرده‌اید. رایانهٔ لوحی در حال حاضر به پیش‌فرض کارخانه بازنشانی می‌شود."</string>
@@ -864,13 +924,13 @@
     <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"در <xliff:g id="NUMBER">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"الگو را فراموش کرده‌اید؟"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"بازگشایی قفل حساب"</string>
-    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"تلاش‎های زیادی برای کشیدن الگو صورت گرفته است"</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"‏تلاش‎های زیادی برای کشیدن الگو صورت گرفته است"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"‏برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string>
     <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"نام کاربری (ایمیل)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"رمز ورود"</string>
     <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"ورود به سیستم"</string>
     <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"نام کاربر یا رمز ورود نامعتبر است."</string>
-    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"نام کاربری یا گذرواژهٔ خود را فراموش کردید؟\nاز "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"‏نام کاربری یا گذرواژهٔ خود را فراموش کردید؟\nاز "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
     <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"در حال بررسی..."</string>
     <string name="lockscreen_unlock_label" msgid="737440483220667054">"بازگشایی قفل"</string>
     <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"صدا روشن"</string>
@@ -879,7 +939,7 @@
     <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"الگو پاک شد"</string>
     <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"سلول اضافه شد"</string>
     <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"الگو تکمیل شد"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ابزارک %2$d از %3$d."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"‏%1$s. ابزارک %2$d از %3$d."</string>
     <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"ابزارک اضافه کنید."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"خالی"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"منطقه بازگشایی گسترده شد."</string>
@@ -910,10 +970,10 @@
     <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
     <string name="factorytest_failed" msgid="5410270329114212041">"تست کارخانه انجام نشد"</string>
-    <string name="factorytest_not_system" msgid="4435201656767276723">"عملکرد FACTORY_TEST تنها برای بسته‌های نصب شده در /system/app پشتیبانی می‌شود."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"بسته‌ای یافت نشد که عملکرد FACTORY_TEST را ارائه کند."</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"‏عملکرد FACTORY_TEST تنها برای بسته‌های نصب شده در /system/app پشتیبانی می‌شود."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"‏بسته‌ای یافت نشد که عملکرد FACTORY_TEST را ارائه کند."</string>
     <string name="factorytest_reboot" msgid="6320168203050791643">"راه‌اندازی مجدد"</string>
-    <string name="js_dialog_title" msgid="1987483977834603872">"صفحه در \"<xliff:g id="TITLE">%s</xliff:g>\" می‎گوید:"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"‏صفحه در \"<xliff:g id="TITLE">%s</xliff:g>\" می‎گوید:"</string>
     <string name="js_dialog_title_default" msgid="6961903213729667573">"جاوا اسکریپت"</string>
     <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"تأیید پیمایش"</string>
     <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"ترک این صفحه"</string>
@@ -945,17 +1005,17 @@
     <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"به برنامه اجازه می‌دهد سابقه مرورگر یا نشانک‌های ذخیره شده در رایانهٔ لوحی شما را اصلاح کند. این ویژگی ممکن است به برنامه اجازه دهد داده‌های مرورگر را حذف یا اصلاح کند. توجه: این مجوز ممکن است توسط مرورگرهای شخص ثالث یا سایر برنامه‌های دارای قابلیت مرور وب قابل اجرا نباشد."</string>
     <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"به برنامه اجازه می‌دهد سابقه مرورگر یا نشانک‌های ذخیره شده در تلفن شما را اصلاح کند. این ویژگی ممکن است به برنامه اجازه دهد داده‌های مرورگر را حذف یا اصلاح کند. توجه: این مجوز ممکن است توسط مرورگرهای شخص ثالث یا سایر برنامه‌های دارای قابلیت مرور وب قابل اجرا نباشد."</string>
     <string name="permlab_setAlarm" msgid="1379294556362091814">"تنظیم یک هشدار"</string>
-    <string name="permdesc_setAlarm" msgid="316392039157473848">"به برنامه اجازه می‎دهد تا هشداری را در برنامه ساعت زنگدار نصب شده تنظیم کند. برخی از برنامه‎های ساعت زنگدار نمی‎توانند این ویژگی را اعمال کنند."</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"‏به برنامه اجازه می‎دهد تا هشداری را در برنامه ساعت زنگدار نصب شده تنظیم کند. برخی از برنامه‎های ساعت زنگدار نمی‎توانند این ویژگی را اعمال کنند."</string>
     <string name="permlab_addVoicemail" msgid="5525660026090959044">"افزودن پست صوتی"</string>
     <string name="permdesc_addVoicemail" msgid="6604508651428252437">"به برنامه اجازه می‌دهد تا پیام‌ها را به صندوق دریافت پست صوتی شما اضافه کند."</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"تغییر مجوزهای مکان جغرافیایی مرورگر"</string>
-    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"به برنامه اجازه می‎دهد تا مجوزهای جغرافیایی مرورگر را تغییر دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا اطلاعات موقعیت مکانی را به سایت‌های وب کتابخانه بفرستند."</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"‏به برنامه اجازه می‎دهد تا مجوزهای جغرافیایی مرورگر را تغییر دهد. برنامه‎های مخرب می‎توانند از آن استفاده کنند تا اطلاعات موقعیت مکانی را به سایت‌های وب کتابخانه بفرستند."</string>
     <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"تأیید بسته‌ها"</string>
     <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"به برنامه اجازه می‌دهد قابل نصب بودن بسته را تأیید کند."</string>
     <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"اتصال به یک تأیید کننده بسته"</string>
-    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"به دارنده اجازه می‎دهد تا تاییدکنندگان بسته را درخواست کند. برای برنامه‎های عادی نیاز نیست."</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"‏به دارنده اجازه می‎دهد تا تاییدکنندگان بسته را درخواست کند. برای برنامه‎های عادی نیاز نیست."</string>
     <string name="permlab_serialPort" msgid="546083327654631076">"دسترسی به درگاه‌های سریال"</string>
-    <string name="permdesc_serialPort" msgid="2991639985224598193">"به دارنده اجازه می‌دهد با استفاده از SerialManager API به درگاه‌های سریال دسترسی داشته باشد."</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"‏به دارنده اجازه می‌دهد با استفاده از SerialManager API به درگاه‌های سریال دسترسی داشته باشد."</string>
     <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"دسترسی خارجی به ارائه‌دهندگان محتوا"</string>
     <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"به دارنده اجازه می‌دهد تا از خارج برنامه به ارائه‌دهندگان محتوا دسترسی داشته باشد. هرگز برای برنامه‌های معمولی به آن نیازی نیست."</string>
     <string name="permlab_updateLock" msgid="3527558366616680889">"ترغیب به انجام ندادن به‌روزرسانی‌های خودکار دستگاه"</string>
@@ -1095,7 +1155,7 @@
     <string name="paste" msgid="5629880836805036433">"جای گذاری"</string>
     <string name="replace" msgid="5781686059063148930">"جایگزین شود..."</string>
     <string name="delete" msgid="6098684844021697789">"حذف"</string>
-    <string name="copyUrl" msgid="2538211579596067402">"کپی URL"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"‏کپی URL"</string>
     <string name="selectTextMode" msgid="1018691815143165326">"انتخاب متن"</string>
     <string name="textSelectionCABTitle" msgid="5236850394370820357">"انتخاب متن"</string>
     <string name="addToDictionary" msgid="4352161534510057874">"افزودن به فرهنگ‌لغت"</string>
@@ -1117,18 +1177,18 @@
     <string name="whichApplication" msgid="4533185947064773386">"تکمیل عملکرد با استفاده از"</string>
     <string name="whichHomeApplication" msgid="4616420172727326782">"انتخاب یک برنامه صفحه اصلی"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"استفاده به صورت پیش‌فرض برای این عملکرد."</string>
-    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"پیش‌فرض را در تنظیمات سیستم&gt; برنامه‎ها&gt; مورد دانلود شده پاک کنید."</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"‏پیش‌فرض را در تنظیمات سیستم&gt; برنامه‎ها&gt; مورد دانلود شده پاک کنید."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"انتخاب عملکرد"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"انتخاب برنامه برای دستگاه USB"</string>
-    <string name="noApplications" msgid="2991814273936504689">"هیچ برنامه‌ای نمی‎تواند این کار را انجام دهد."</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"‏انتخاب برنامه برای دستگاه USB"</string>
+    <string name="noApplications" msgid="2991814273936504689">"‏هیچ برنامه‌ای نمی‎تواند این کار را انجام دهد."</string>
     <string name="aerr_title" msgid="1905800560317137752"></string>
     <string name="aerr_application" msgid="932628488013092776">"متأسفانه، <xliff:g id="APPLICATION">%1$s</xliff:g> متوقف شده است."</string>
     <string name="aerr_process" msgid="4507058997035697579">"متأسفانه، پردازش <xliff:g id="PROCESS">%1$s</xliff:g> متوقف شده است."</string>
     <string name="anr_title" msgid="4351948481459135709"></string>
-    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> پاسخ نمی‎دهد.\n\nآیا می‎خواهید آنرا ببندید؟"</string>
-    <string name="anr_activity_process" msgid="5776209883299089767">"فعالیت <xliff:g id="ACTIVITY">%1$s</xliff:g> پاسخ نمی‎دهد.\n\nآیا می‎خواهید آن را ببندید؟"</string>
-    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> پاسخ نمی‎دهد. آیا می‎خواهید آن را ببندید؟"</string>
-    <string name="anr_process" msgid="6513209874880517125">"روند <xliff:g id="PROCESS">%1$s</xliff:g> پاسخ نمی‎دهد. \n\nآیا می‎خواهید آن را ببندید؟"</string>
+    <string name="anr_activity_application" msgid="1904477189057199066">"‏<xliff:g id="APPLICATION">%2$s</xliff:g> پاسخ نمی‎دهد.\n\nآیا می‎خواهید آنرا ببندید؟"</string>
+    <string name="anr_activity_process" msgid="5776209883299089767">"‏فعالیت <xliff:g id="ACTIVITY">%1$s</xliff:g> پاسخ نمی‎دهد.\n\nآیا می‎خواهید آن را ببندید؟"</string>
+    <string name="anr_application_process" msgid="8941757607340481057">"‏<xliff:g id="APPLICATION">%1$s</xliff:g> پاسخ نمی‎دهد. آیا می‎خواهید آن را ببندید؟"</string>
+    <string name="anr_process" msgid="6513209874880517125">"‏روند <xliff:g id="PROCESS">%1$s</xliff:g> پاسخ نمی‎دهد. \n\nآیا می‎خواهید آن را ببندید؟"</string>
     <string name="force_close" msgid="8346072094521265605">"تأیید"</string>
     <string name="report" msgid="4060218260984795706">"گزارش"</string>
     <string name="wait" msgid="7147118217226317732">"منتظر بمانید"</string>
@@ -1138,9 +1198,9 @@
     <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> از ابتدا راه‌اندازی شد."</string>
     <string name="screen_compat_mode_scale" msgid="3202955667675944499">"مقیاس"</string>
     <string name="screen_compat_mode_show" msgid="4013878876486655892">"همیشه نشان داده شود"</string>
-    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"در تنظیمات سیستم &gt;برنامه‎ها &gt; مورد دانلود شده آن را دوباره فعال کنید."</string>
-    <string name="smv_application" msgid="3307209192155442829">"برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> (پردازش <xliff:g id="PROCESS">%2$s</xliff:g>) خط مشی StrictMode اجرایی خود را نقض کرده است."</string>
-    <string name="smv_process" msgid="5120397012047462446">"فرآیند <xliff:g id="PROCESS">%1$s</xliff:g> خط مشی StrictMode اجرای خودکار خود را نقض کرده است."</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"‏در تنظیمات سیستم &gt;برنامه‎ها &gt; مورد دانلود شده آن را دوباره فعال کنید."</string>
+    <string name="smv_application" msgid="3307209192155442829">"‏برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> (پردازش <xliff:g id="PROCESS">%2$s</xliff:g>) خط مشی StrictMode اجرایی خود را نقض کرده است."</string>
+    <string name="smv_process" msgid="5120397012047462446">"‏فرآیند <xliff:g id="PROCESS">%1$s</xliff:g> خط مشی StrictMode اجرای خودکار خود را نقض کرده است."</string>
     <string name="android_upgrading_title" msgid="1584192285441405746">"‏Android در حال ارتقا است..."</string>
     <string name="android_upgrading_apk" msgid="7904042682111526169">"در حال بهینه‌سازی برنامهٔ <xliff:g id="NUMBER_0">%1$d</xliff:g> از <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="android_upgrading_starting_apps" msgid="451464516346926713">"در حال آغاز برنامه‌ها."</string>
@@ -1174,23 +1234,23 @@
     <string name="ringtone_picker_title" msgid="3515143939175119094">"آهنگ‌های زنگ"</string>
     <string name="ringtone_unknown" msgid="5477919988701784788">"آهنگ زنگ ناشناس"</string>
   <plurals name="wifi_available">
-    <item quantity="one" msgid="6654123987418168693">"شبکه Wi-Fi موجود است"</item>
-    <item quantity="other" msgid="4192424489168397386">"شبکه‌های Wi-Fi موجود هستند"</item>
+    <item quantity="one" msgid="6654123987418168693">"‏شبکه Wi-Fi موجود است"</item>
+    <item quantity="other" msgid="4192424489168397386">"‏شبکه‌های Wi-Fi موجود هستند"</item>
   </plurals>
   <plurals name="wifi_available_detailed">
-    <item quantity="one" msgid="1634101450343277345">"شبکه Wi-Fi موجود را باز کنید"</item>
-    <item quantity="other" msgid="7915895323644292768">"شبکه‌های Wi-Fi موجود را باز کنید"</item>
+    <item quantity="one" msgid="1634101450343277345">"‏شبکه Wi-Fi موجود را باز کنید"</item>
+    <item quantity="other" msgid="7915895323644292768">"‏شبکه‌های Wi-Fi موجود را باز کنید"</item>
   </plurals>
-    <string name="wifi_available_sign_in" msgid="4029489716605255386">"ورود به شبکه Wi-Fi"</string>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"‏ورود به شبکه Wi-Fi"</string>
     <string name="network_available_sign_in" msgid="8495155593358054676">"ورود به شبکه"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
-    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"اتصال به Wi-Fi ممکن نیست"</string>
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‏اتصال به Wi-Fi ممکن نیست"</string>
     <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" اتصال اینترنتی ضعیفی دارد."</string>
     <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Wi-Fi Direct را شروع کنید. این کار نقطه اتصال/سرویس گیرنده Wi-Fi را غیرفعال خواهد کرد."</string>
-    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Wi-Fi Direct شروع نشد."</string>
-    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct روشن است"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"‏Wi-Fi Direct را شروع کنید. این کار نقطه اتصال/سرویس گیرنده Wi-Fi را غیرفعال خواهد کرد."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"‏Wi-Fi Direct شروع نشد."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"‏Wi-Fi Direct روشن است"</string>
     <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"لمس کردن برای تنظیمات"</string>
     <string name="accept" msgid="1645267259272829559">"پذیرش"</string>
     <string name="decline" msgid="2112225451706137894">"عدم پذیرش"</string>
@@ -1200,20 +1260,20 @@
     <string name="wifi_p2p_to_message" msgid="248968974522044099">"به:"</string>
     <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"پین لازم را تایپ کنید:"</string>
     <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"پین:"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"در حین اتصال به <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ارتباط این رایانه لوحی با Wi-Fi موقتاً قطع خواهد شد."</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"این گوشی به‌طور موقت از Wi-Fi قطع خواهد شد، در حالی که به <xliff:g id="DEVICE_NAME">%1$s</xliff:g> وصل است"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"‏در حین اتصال به <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ارتباط این رایانه لوحی با Wi-Fi موقتاً قطع خواهد شد."</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"‏این گوشی به‌طور موقت از Wi-Fi قطع خواهد شد، در حالی که به <xliff:g id="DEVICE_NAME">%1$s</xliff:g> وصل است"</string>
     <string name="select_character" msgid="3365550120617701745">"درج نویسه"</string>
     <string name="sms_control_title" msgid="7296612781128917719">"ارسال پیامک ها"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; در حال ارسال تعداد زیادی پیامک است. آیا اجازه می‌دهید این برنامه همچنان پیامک ارسال کند؟"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; در حال ارسال تعداد زیادی پیامک است. آیا اجازه می‌دهید این برنامه همچنان پیامک ارسال کند؟"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"اجازه دادن"</string>
     <string name="sms_control_no" msgid="625438561395534982">"ردکردن"</string>
-    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; مایل است پیامی به &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt; ارسال کند."</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; مایل است پیامی به &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt; ارسال کند."</string>
     <string name="sms_short_code_details" msgid="3492025719868078457">"این کار "<font fgcolor="#ffffb060">"می‌تواند منجر به شارژ"</font>" حساب تلفن همراه شما شود."</string>
     <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"این کار حساب تلفن همراه شما را شارژ خواهد کرد."</font></string>
     <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"ارسال"</string>
     <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"لغو"</string>
     <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"این انتخاب را به خاطر بسپار"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"می‌توانید بعداً آن را در تنظیمات &gt; برنامه‌ها تغییر دهید"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"‏می‌توانید بعداً آن را در تنظیمات &gt; برنامه‌ها تغییر دهید"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"همیشه مجاز"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"همیشه غیرمجاز"</string>
     <string name="sim_removed_title" msgid="6227712319223226185">"سیم کارت برداشته شد"</string>
@@ -1230,38 +1290,38 @@
     <string name="perms_description_app" msgid="5139836143293299417">"ارائه شده توسط <xliff:g id="APP_NAME">%1$s</xliff:g> ."</string>
     <string name="no_permissions" msgid="7283357728219338112">"مجوزی لازم نیست"</string>
     <string name="perm_costs_money" msgid="4902470324142151116">"ممکن است برای شما هزینه داشته باشد"</string>
-    <string name="usb_storage_activity_title" msgid="4465055157209648641">"حافظه انبوه USB"</string>
-    <string name="usb_storage_title" msgid="5901459041398751495">"USB متصل شد"</string>
-    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"شما از طریق USB به رایانهٔ خود متصل شده‎اید. اگر می‎خواهید فایل‎ها را بین رایانهٔ خود و حافظهٔ USB در Android کپی کنید، دکمه زیر را لمس کنید."</string>
-    <string name="usb_storage_message" product="default" msgid="805351000446037811">"شما از طریق USB به رایانهٔ خود متصل شده‎اید. اگر می‎خواهید فایل‎ها را بین رایانهٔ خود و کارت SD در Android کپی کنید، دکمه زیر را لمس کنید."</string>
-    <string name="usb_storage_button_mount" msgid="1052259930369508235">"روشن کردن دستگاه ذخیره‌سازی USB"</string>
-    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"هنگام استفاده از حافظهٔ USB برای حافظه انبوه USB مشکلی بوجود آمد."</string>
-    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"هنگام استفاده از کارت SD برای حافظه ذخیره انبوه USB مشکلی بوجود آمد."</string>
-    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB متصل شد"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"‏حافظه انبوه USB"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"‏USB متصل شد"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"‏شما از طریق USB به رایانهٔ خود متصل شده‎اید. اگر می‎خواهید فایل‎ها را بین رایانهٔ خود و حافظهٔ USB در Android کپی کنید، دکمه زیر را لمس کنید."</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"‏شما از طریق USB به رایانهٔ خود متصل شده‎اید. اگر می‎خواهید فایل‎ها را بین رایانهٔ خود و کارت SD در Android کپی کنید، دکمه زیر را لمس کنید."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"‏روشن کردن دستگاه ذخیره‌سازی USB"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"‏هنگام استفاده از حافظهٔ USB برای حافظه انبوه USB مشکلی بوجود آمد."</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"‏هنگام استفاده از کارت SD برای حافظه ذخیره انبوه USB مشکلی بوجود آمد."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"‏USB متصل شد"</string>
     <string name="usb_storage_notification_message" msgid="939822783828183763">"برای کپی کردن فایل‌ها از/به رایانهٔ خود لمس کنید."</string>
-    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"خاموش کردن دستگاه ذخیره‌سازی USB"</string>
-    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"برای غیرفعال کردن حافظهٔ USB، لمس کنید."</string>
-    <string name="usb_storage_stop_title" msgid="660129851708775853">"دستگاه ذخیره‌سازی USB در حال استفاده است"</string>
-    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"قبل از غیرفعال کردن حافظهٔ USB، حافظهٔ USB مربوط به Android را در رایانهٔ خود لغو نصب کنید (\"خارج کنید\")."</string>
-    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"قبل از غیرفعال کردن حافظهٔ USB، کارت SD مربوط به Android را در رایانه لغو نصب کنید (\"خارج کنید\")."</string>
-    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"خاموش کردن دستگاه ذخیره‌سازی USB"</string>
-    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"هنگام غیرفعال کردن حافظهٔ USB مشکلی بوجود آمد. بررسی کنید میزبان USB را لغو نصب کرده باشید، سپس دوباره امتحان کنید."</string>
-    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"روشن کردن دستگاه ذخیره‌سازی USB"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"در صورت فعال کردن حافظهٔ USB، برخی از برنامه‎هایی که از آن‌ها استفاده می‎کنید متوقف می‎شوند و تا زمانی که حافظهٔ USB را غیرفعال نکنید امکان استفاده از آن‌ها وجود نخواهد داشت."</string>
-    <string name="dlg_error_title" msgid="7323658469626514207">"راه‌اندازی USB ناموفق بود."</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"‏خاموش کردن دستگاه ذخیره‌سازی USB"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"‏برای غیرفعال کردن حافظهٔ USB، لمس کنید."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"‏دستگاه ذخیره‌سازی USB در حال استفاده است"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"‏قبل از غیرفعال کردن حافظهٔ USB، حافظهٔ USB مربوط به Android را در رایانهٔ خود لغو نصب کنید (\"خارج کنید\")."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"‏قبل از غیرفعال کردن حافظهٔ USB، کارت SD مربوط به Android را در رایانه لغو نصب کنید (\"خارج کنید\")."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"‏خاموش کردن دستگاه ذخیره‌سازی USB"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"‏هنگام غیرفعال کردن حافظهٔ USB مشکلی بوجود آمد. بررسی کنید میزبان USB را لغو نصب کرده باشید، سپس دوباره امتحان کنید."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"‏روشن کردن دستگاه ذخیره‌سازی USB"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"‏در صورت فعال کردن حافظهٔ USB، برخی از برنامه‎هایی که از آن‌ها استفاده می‎کنید متوقف می‎شوند و تا زمانی که حافظهٔ USB را غیرفعال نکنید امکان استفاده از آن‌ها وجود نخواهد داشت."</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"‏راه‌اندازی USB ناموفق بود."</string>
     <string name="dlg_ok" msgid="7376953167039865701">"تأیید"</string>
     <string name="usb_mtp_notification_title" msgid="3699913097391550394">"متصل شده به‌عنوان دستگاه رسانه‌ای"</string>
     <string name="usb_ptp_notification_title" msgid="1960817192216064833">"متصل شده به‌عنوان دوربین"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"متصل شده به‌عنوان نصب کننده"</string>
-    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"به یک وسیله جانبی USB وصل شده است"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"برای سایر گزینه‌های USB لمس کنید."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"حافظهٔ USB فرمت شود؟"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"کارت SD فرمت شود؟"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"همه فایل‌های ذخیره شده در حافظهٔ USB پاک خواهد شد. این عمل را نمی‎توان برگرداند!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"تمام اطلاعات روی کارت شما از بین می‎رود."</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‏به یک وسیله جانبی USB وصل شده است"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"‏برای سایر گزینه‌های USB لمس کنید."</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"‏حافظهٔ USB فرمت شود؟"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"‏کارت SD فرمت شود؟"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"‏همه فایل‌های ذخیره شده در حافظهٔ USB پاک خواهد شد. این عمل را نمی‎توان برگرداند!"</string>
+    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"‏تمام اطلاعات روی کارت شما از بین می‎رود."</string>
     <string name="extmedia_format_button_format" msgid="4131064560127478695">"قالب"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"اتصال رفع عیب USB"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"برای غیرفعال کردن اشکال زدایی USB لمس کنید."</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"‏اتصال رفع عیب USB"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"‏برای غیرفعال کردن اشکال زدایی USB لمس کنید."</string>
     <string name="select_input_method" msgid="4653387336791222978">"انتخاب روش ورودی"</string>
     <string name="configure_input_methods" msgid="9091652157722495116">"تنظیم روش‌های ورودی"</string>
     <string name="use_physical_keyboard" msgid="6203112478095117625">"صفحه‌کلید فیزیکی"</string>
@@ -1271,40 +1331,46 @@
     <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style" msgid="4333913089637062257"><u>"داوطلبین"</u></string>
-    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"آماده سازی حافظهٔ USB"</string>
-    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"آماده کردن کارت SD"</string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"‏آماده سازی حافظهٔ USB"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"‏آماده کردن کارت SD"</string>
     <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"بررسی خطاها."</string>
-    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"حافظهٔ USB خالی"</string>
-    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"کارت SD خالی"</string>
-    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"حافظهٔ USB خالی است یا دارای سیستم فایل پشتیبانی نشده است."</string>
-    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"کارت SD خالی است یا دارای سیستم فایل پشتیبانی نشده است."</string>
-    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"حافظهٔ USB خراب شده"</string>
-    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"کارت SD آسیب دیده"</string>
-    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"حافظهٔ USB خراب است. سعی کنید آنرا دوباره فرمت کنید."</string>
-    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"کارت SD خراب است. سعی کنید آنرا دوباره فرمت کنید."</string>
-    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"حافظهٔ USB به صورت غیرمنتظره جدا شد"</string>
-    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"کارت SD به صورت غیرمنتظره‌ای جدا شد"</string>
-    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"اتصال حافظهٔ USB را قبل از بیرون آوردن قطع کنید تا سبب از بین رفتن داده‌ها نشود."</string>
-    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"کارت SD را قبل از بیرون آوردن جدا کنید تا سبب از بین رفتن داده‌ها نشود."</string>
-    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"حافظهٔ USB را می‌توانید با ایمنی جدا کنید"</string>
-    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"کارت SD را می‌توان با امنیت کامل جدا کرد"</string>
-    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"شما می‌توانید حافظهٔ USB را با اطمینان جدا کنید."</string>
-    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"کارت SD را می‌توانید با امنیت کامل خارج کنید."</string>
-    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"جدا کردن حافظهٔ USB"</string>
-    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"کارت SD حذف شده"</string>
-    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"حافظهٔ USB جدا شد. یک رسانه جدید متصل کنید."</string>
-    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"کارت SD جدا شد. یک کارت جدید وارد کنید."</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"‏حافظهٔ USB خالی"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"‏کارت SD خالی"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"‏حافظهٔ USB خالی است یا دارای سیستم فایل پشتیبانی نشده است."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"‏کارت SD خالی است یا دارای سیستم فایل پشتیبانی نشده است."</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"‏حافظهٔ USB خراب شده"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"‏کارت SD آسیب دیده"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"‏حافظهٔ USB خراب است. سعی کنید آنرا دوباره فرمت کنید."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"‏کارت SD خراب است. سعی کنید آنرا دوباره فرمت کنید."</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"‏حافظهٔ USB به صورت غیرمنتظره جدا شد"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"‏کارت SD به صورت غیرمنتظره‌ای جدا شد"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"‏اتصال حافظهٔ USB را قبل از بیرون آوردن قطع کنید تا سبب از بین رفتن داده‌ها نشود."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"‏کارت SD را قبل از بیرون آوردن جدا کنید تا سبب از بین رفتن داده‌ها نشود."</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"‏حافظهٔ USB را می‌توانید با ایمنی جدا کنید"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"‏کارت SD را می‌توان با امنیت کامل جدا کرد"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"‏شما می‌توانید حافظهٔ USB را با اطمینان جدا کنید."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"‏کارت SD را می‌توانید با امنیت کامل خارج کنید."</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"‏جدا کردن حافظهٔ USB"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"‏کارت SD حذف شده"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"‏حافظهٔ USB جدا شد. یک رسانه جدید متصل کنید."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"‏کارت SD جدا شد. یک کارت جدید وارد کنید."</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"فعالیتی مطابق با این مورد یافت نشد."</string>
     <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"به‌روزرسانی آمار مربوط به استفاده مؤلفه"</string>
-    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"به برنامه اجازه می‎دهد آمار جمع‎آوری شده کاربرد قطعه را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"‏به برنامه اجازه می‎دهد آمار جمع‎آوری شده کاربرد قطعه را تغییر دهد. برای استفاده برنامه‎های عادی نیست."</string>
     <string name="permlab_copyProtectedData" msgid="4341036311211406692">"کپی کردن محتوا"</string>
-    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"به برنامه اجازه می‎دهد تا سرویس پیش‌فرض را فراخوانی کند و محتوا را کپی کند. برای استفاده برنامه‎های عادی مورد نیاز نیست."</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"‏به برنامه اجازه می‎دهد تا سرویس پیش‌فرض را فراخوانی کند و محتوا را کپی کند. برای استفاده برنامه‎های عادی مورد نیاز نیست."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"تعیین مسیر خروجی رسانه"</string>
     <string name="permdesc_route_media_output" msgid="4932818749547244346">"به یک برنامه اجازه می‌دهد خروجی رسانه را به دستگاه‌های خارجی دیگر تعیین مسیر کند."</string>
     <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"دسترسی به فضای ذخیره‌سازی ایمن محافظ کلید"</string>
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"به یک برنامه کاربردی برای دسترسی به فضای ذخیره‌سازی ایمن محافظ کلید اجازه می‌دهد."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"کنترل نمایش و پنهان کردن محافظ کلید"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"اجازه می‌دهد برنامه‌ای محافظ کلید را کنترل کند."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"‏گوش دادن به تغییرات وضعیت trust."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"‏به یک برنامه کاربردی برای گوش دادن به تغییرات در trust اجازه می‌دهد."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"‏اتصال به یک سرویس trust agent"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"‏به یک برنامه کاربردی برای اتصال به یک سرویس trust agent اجازه می‌دهد."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"تعامل با سیستم به‌روزرسانی و بازیابی"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"به یک برنامه کاربردی اجازه می‌دهد با سیستم بازیابی و به‌روزرسانی‌های سیستم تعامل داشته باشد."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"دوبار لمس کنید تا بزرگنمایی کنترل شود"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"افزودن ابزارک انجام نشد."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"برو"</string>
@@ -1329,13 +1395,14 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"تصویر زمینه"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"تغییر تصویر زمینه"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"شنونده اعلان"</string>
-    <string name="vpn_title" msgid="19615213552042827">"VPN فعال شد"</string>
-    <string name="vpn_title_long" msgid="6400714798049252294">"VPN توسط <xliff:g id="APP">%s</xliff:g> فعال شده است"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ارائه‌دهنده وضعیت"</string>
+    <string name="vpn_title" msgid="19615213552042827">"‏VPN فعال شد"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"‏VPN توسط <xliff:g id="APP">%s</xliff:g> فعال شده است"</string>
     <string name="vpn_text" msgid="3011306607126450322">"برای مدیریت شبکه لمس کنید."</string>
     <string name="vpn_text_long" msgid="6407351006249174473">"به <xliff:g id="SESSION">%s</xliff:g> وصل شد. برای مدیریت شبکه لمس کنید."</string>
-    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"در حال اتصال VPN همیشه فعال…"</string>
-    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"VPN همیشه فعال متصل شد"</string>
-    <string name="vpn_lockdown_error" msgid="6009249814034708175">"خطای VPN همیشه فعال"</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"‏در حال اتصال VPN همیشه فعال…"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"‏VPN همیشه فعال متصل شد"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"‏خطای VPN همیشه فعال"</string>
     <string name="vpn_lockdown_config" msgid="6415899150671537970">"برای پیکربندی لمس کنید"</string>
     <string name="upload_file" msgid="2897957172366730416">"انتخاب فایل"</string>
     <string name="no_file_chosen" msgid="6363648562170759465">"هیچ فایلی انتخاب نشد"</string>
@@ -1359,18 +1426,18 @@
     <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> از <xliff:g id="TOTAL">%d</xliff:g>"</item>
   </plurals>
     <string name="action_mode_done" msgid="7217581640461922289">"انجام شد"</string>
-    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"در حال لغو نصب حافظهٔ USB..."</string>
-    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"در حال لغو نصب کارت SD..."</string>
-    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"در حال پاک کردن حافظهٔ USB..."</string>
-    <string name="progress_erasing" product="default" msgid="6596988875507043042">"در حال پاک کردن کارت SD..."</string>
-    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"پاک کردن محل ذخیره  USB ممکن نیست."</string>
-    <string name="format_error" product="default" msgid="7315248696644510935">"پاک کردن کارت SD ممکن نیست."</string>
-    <string name="media_bad_removal" msgid="7960864061016603281">"کارت SD قبل از قطع اتصال از دستگاه خارج شد."</string>
-    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"حافظهٔ USB اکنون در حال بررسی شدن است."</string>
-    <string name="media_checking" product="default" msgid="7334762503904827481">"کارت SD در حال حاضر در حال بررسی است."</string>
-    <string name="media_removed" msgid="7001526905057952097">"کارت SD حذف شده است."</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"‏در حال لغو نصب حافظهٔ USB..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"‏در حال لغو نصب کارت SD..."</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"‏در حال پاک کردن حافظهٔ USB..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"‏در حال پاک کردن کارت SD..."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"‏پاک کردن محل ذخیره  USB ممکن نیست."</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"‏پاک کردن کارت SD ممکن نیست."</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"‏کارت SD قبل از قطع اتصال از دستگاه خارج شد."</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"‏حافظهٔ USB اکنون در حال بررسی شدن است."</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"‏کارت SD در حال حاضر در حال بررسی است."</string>
+    <string name="media_removed" msgid="7001526905057952097">"‏کارت SD حذف شده است."</string>
     <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"حافظه در حال حاضر توسط رایانه دیگری استفاده می‌شود."</string>
-    <string name="media_shared" product="default" msgid="5706130568133540435">"کارت SD در حال حاضر توسط یک رایانه در حال استفاده است."</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"‏کارت SD در حال حاضر توسط یک رایانه در حال استفاده است."</string>
     <string name="media_unknown_state" msgid="729192782197290385">"رسانه خارجی در حالت ناشناس است."</string>
     <string name="share" msgid="1778686618230011964">"اشتراک‌گذاری"</string>
     <string name="find" msgid="4808270900322985960">"یافتن"</string>
@@ -1383,7 +1450,7 @@
     <string name="gpsVerifYes" msgid="2346566072867213563">"بله"</string>
     <string name="gpsVerifNo" msgid="1146564937346454865">"خیر"</string>
     <string name="sync_too_many_deletes" msgid="5296321850662746890">"از حد مجاز حذف فراتر رفت"</string>
-    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"<xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> مورد حذف شده برای <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>، حساب <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> وجود دارد. می‎خواهید چه کاری انجام دهید؟"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"‏<xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> مورد حذف شده برای <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>، حساب <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> وجود دارد. می‎خواهید چه کاری انجام دهید؟"</string>
     <string name="sync_really_delete" msgid="2572600103122596243">"حذف موارد"</string>
     <string name="sync_undo_deletes" msgid="2941317360600338602">"لغو موارد حذف شده"</string>
     <string name="sync_do_nothing" msgid="3743764740430821845">"اکنون کاری انجام نشود"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"انتخاب برنامه"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"راه‌اندازی <xliff:g id="APPLICATION_NAME">%s</xliff:g> انجام نشد"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"اشتراک‌گذاری با"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"اشتراک‌گذاری با <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"اهرم کنترل حرکت. لمس کرده و نگهدارید."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"لغزاندن به بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"لغزاندن به پایین برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"لغزاندن به چپ برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"لغزاندن به راست برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"بازکردن قفل"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"دوربین"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"ساکت"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"صدا روشن"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"جستجو"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"برای بازگشایی قفل، بلغزانید."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"برای شنیدن کلیدهای گذرواژه که با صدای بلند خوانده می‌شوند، هدست را وصل کنید."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"نقطه."</string>
@@ -1435,20 +1494,20 @@
     <string name="action_bar_home_description_format" msgid="7965984360903693903">"‎%1$s, %2$s"</string>
     <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"‎%1$s, %2$s, %3$s"</string>
     <string name="storage_internal" msgid="4891916833657929263">"حافظهٔ داخلی"</string>
-    <string name="storage_sd_card" msgid="3282948861378286745">"کارت SD"</string>
-    <string name="storage_usb" msgid="3017954059538517278">"حافظهٔ USB"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"‏کارت SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"‏حافظهٔ USB"</string>
     <string name="extract_edit_menu_button" msgid="8940478730496610137">"ویرایش"</string>
     <string name="data_usage_warning_title" msgid="1955638862122232342">"هشدار میزان استفاده از داده"</string>
     <string name="data_usage_warning_body" msgid="2814673551471969954">"برای مشاهده کاربرد و تنظیمات لمس کنید."</string>
-    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"داده‌های 2G-3G غیرفعال شد"</string>
-    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"داده 4G غیر فعال شده است"</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"‏داده‌های 2G-3G غیرفعال شد"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"‏داده 4G غیر فعال شده است"</string>
     <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"داده‌های تلفن همراه غیرفعال شد"</string>
-    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"داده‌های Wi-Fi غیرفعال شد"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"‏داده‌های Wi-Fi غیرفعال شد"</string>
     <string name="data_usage_limit_body" msgid="3317964706973601386">"برای فعال کردن لمس کنید."</string>
-    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"اطلاعات 2G-3G بیش از حد مجاز است"</string>
-    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"بیش از حد مجاز 4G است"</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"‏اطلاعات 2G-3G بیش از حد مجاز است"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"‏بیش از حد مجاز 4G است"</string>
     <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"داده‌های تلفن همراه از مقدار مجاز بیشتر است"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"از محدوده مجاز داده‌های Wi-Fi بیشتر شد"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"‏از محدوده مجاز داده‌های Wi-Fi بیشتر شد"</string>
     <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> از حد تعیین شده بیشتر شد."</string>
     <string name="data_usage_restricted_title" msgid="5965157361036321914">"داده پس‌زمینه محدود شد"</string>
     <string name="data_usage_restricted_body" msgid="6741521330997452990">"برای حذف محدودیت، لمس کنید."</string>
@@ -1464,8 +1523,8 @@
     <string name="expires_on" msgid="3676242949915959821">"تاریخ انقضا:"</string>
     <string name="serial_number" msgid="758814067660862493">"شمارهٔ سریال:"</string>
     <string name="fingerprints" msgid="4516019619850763049">"اثر انگشت:"</string>
-    <string name="sha256_fingerprint" msgid="4391271286477279263">"اثر انگشت SHA-256:"</string>
-    <string name="sha1_fingerprint" msgid="7930330235269404581">"اثر انگشت SHA-1"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"‏اثر انگشت SHA-256:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"‏اثر انگشت SHA-1"</string>
     <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"مشاهدهٔ همه"</string>
     <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"انتخاب فعالیت"</string>
     <string name="share_action_provider_share_with" msgid="5247684435979149216">"اشتراک‌گذاری با"</string>
@@ -1483,20 +1542,26 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"سیستم"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"بلوتوث‌های صوتی"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"صفحه نمایش بی‌سیم"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"انجام شد"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"خروجی رسانه"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"برقراری ارتباط با دستگاه"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"فرستادن صفحه نمایش به دستگاه"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"در حال جستجو برای دستگاه‌ها..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"تنظیمات"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"قطع ارتباط"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"در حال اسکن کردن…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"درحال اتصال…"</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"در دسترس"</string>
     <string name="media_route_status_not_available" msgid="6739899962681886401">"در دسترس نیست"</string>
     <string name="media_route_status_in_use" msgid="4533786031090198063">"در حال استفاده"</string>
     <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"صفحه نمایش از خود"</string>
-    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"صفحه HDMI"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"‏صفحه HDMI"</string>
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"همپوشانی #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"، امن"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"نمایشگر بی‌سیم متصل است"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"این صفحه در حال نمایش در دستگاه دیگری است"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"درحال فرستادن صفحه نمایش"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"درحال اتصال به <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"درحال فرستادن صفحه نمایش"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"به <xliff:g id="NAME">%1$s</xliff:g> متصل شد"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"قطع اتصال"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"تماس اضطراری"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"الگو را فراموش کرده‌اید"</string>
@@ -1514,16 +1579,16 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"بازگشایی قفل سیم کارت..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"پین کد اشتباه است."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"یک پین ۴ تا ۸ رقمی را تایپ کنید."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"پین کد باید ۸ عدد یا بیشتر باشد."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"‏کد PUK باید ۸ عدد داشته باشد."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"پین کد صحیح را دوباره وارد کنید. تلاش‌های مکرر به‌طور دائم سیم کارت را غیرفعال خواهد کرد."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"پین کدها منطبق نیستند"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"تلاش‎های زیادی برای کشیدن الگو صورت گرفته است"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"‏تلاش‎های زیادی برای کشیدن الگو صورت گرفته است"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"‏برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"نام کاربری (ایمیل)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"گذرواژه"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"ورود به سیستم"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"نام کاربری یا گذرواژه نامعتبر."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"نام کاربری یا گذرواژه خود را فراموش کردید؟\nاز "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‏نام کاربری یا گذرواژه خود را فراموش کردید؟\nاز "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"درحال بررسی حساب..."</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"پین خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. \n\nپس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"گذرواژه خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. \n\nپس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
@@ -1532,8 +1597,8 @@
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"شما به اشتباه <xliff:g id="NUMBER_0">%d</xliff:g> بار اقدام به باز کردن قفل تلفن کرده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر، تلفن به پیش‌فرض کارخانه بازنشانی می‌شود و تمام داده‌های کاربر از دست خواهد رفت."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"شما به اشتباه <xliff:g id="NUMBER">%d</xliff:g> بار اقدام به باز کردن قفل رایانه لوحی کرده‌اید. رایانه لوحی اکنون به پیش‌فرض کارخانه بازنشانی می‌شود."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"شما به اشتباه <xliff:g id="NUMBER">%d</xliff:g> بار اقدام به باز کردن قفل تلفن کرده‌اید. این تلفن اکنون به پیش‌فرض کارخانه بازنشانی می‌شود."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل رایانه لوحی خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل تلفن خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"‏شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل رایانه لوحی خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"‏شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل تلفن خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"حذف"</string>
     <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"صدا به بالاتر از سطح توصیه شده افزایش یابد؟\nگوش دادن به صدای بلند برای مدت طولانی می‌تواند به شنوایی شما آسیب برساند."</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"امتحان پس از <xliff:g id="COUNT">%d</xliff:g> ثانیه"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"بعداً دوباره امتحان کنید"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"برای خروج از تمام صفحه از بالا به پایین بکشید"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"برای خروج از حالت تمام صفحه، انگشت خود را به تندی از بالای صفحه به پایین بکشید."</string>
+    <string name="done_label" msgid="2093726099505892398">"انجام شد"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"لغزنده دایره‌ای ساعت"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"لغزنده دایره‌ای دقیقه"</string>
+    <string name="select_hours" msgid="6043079511766008245">"انتخاب ساعت"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"انتخاب دقیقه"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"جدول روزها براساس ماه"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"لیست سال‌ها"</string>
+    <string name="select_day" msgid="7774759604701773332">"انتخاب ماه و روز"</string>
+    <string name="select_year" msgid="7952052866994196170">"انتخاب سال"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> انتخاب شد"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> حذف شد"</string>
 </resources>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index 3130cba..945c7ab 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"Tt"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Pt"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Nimetön&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Kirjoita vähintään 8 numeron pituinen PUK-koodi."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM-korttisi on PUK-lukittu. Poista lukitus antamalla PUK-koodi."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Pura SIM-kortin esto antamalla PUK2-koodi."</string>
+    <string name="enablePin" msgid="209412020907207950">"Epäonnistui, ota SIM-/RUIM-lukitus käyttöön."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritys jäljellä, ennen kuin SIM-kortti lukitaan."</item>
+    <item quantity="other" msgid="7530597808358774740">"Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritystä jäljellä, ennen kuin SIM-kortti lukitaan."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI-koodi"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Soittajan tunnus"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synkronointi"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Liikaa <xliff:g id="CONTENT_TYPE">%s</xliff:g>-poistoja."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tablet-laitteen tallennustila on täynnä. Vapauta tilaa poistamalla tiedostoja."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Kellon tallennustila on täynnä. Vapauta tilaa poistamalla tiedostoja."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Puhelimen tallennustila on täynnä. Vapauta tilaa poistamalla tiedostoja."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Verkkoa saatetaan valvoa"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Valvoja on tuntematon kolmas osapuoli."</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Soittoääni: normaali"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Suljetaan..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablet-laitteesi sammutetaan."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Kello sammutetaan."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Puhelin suljetaan."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Haluatko sammuttaa?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Käynnistä vikasietotilassa"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lentokonetila"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Lentokonetila on KÄYTÖSSÄ"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Lentokonetila on POIS KÄYTÖSTÄ"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Asetukset"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Suojattu tila"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-järjestelmä"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"poista pikakuvakkeita"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Antaa sovelluksen poistaa aloitusruudun pikakuvakkeita ilman käyttäjän toimia."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"ohjaa uudelleen lähtevät puhelut"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Antaa sovelluksen käsitellä lähteviä puheluita ja muuttaa kohdenumeroita. Sovellus voi valvoa, uudelleenohjata tai estää lähteviä puheluita."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Sallii sovelluksen nähdä numeron, joka valitaan lähtevää puhelua soitettaessa, ja antaa mahdollisuuden ohjata puhelun eri numeroon tai keskeyttää puhelun kokonaan."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"vastaanota tekstiviestejä (teksti)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Antaa sovelluksen vastaanottaa ja käsitellä tekstiviestejä. Sovellus voi valvoa tai poistaa laitteeseesi lähetettyjä viestejä näyttämättä niitä sinulle."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"vastaanota tekstiviestejä (multimedia)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Antaa sovelluksen noutaa aktiivisen ikkunan sisällön. Haitalliset sovellukset voivat noutaa koko ikkunan sisällön ja tarkastella sen kaikkea tekstiä lukuun ottamatta salasanoja."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ota esteettömyystila käyttöön väliaikaisesti"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Antaa sovelluksen ottaa esteettömyystilan käyttöön laitteessa väliaikaisesti. Haitalliset sovellukset voivat ottaa esteettömyystilan käyttöön ilman käyttäjän lupaa."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"nouda ikkunoiden tietoja"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Antaa sovelluksen noutaa ikkunoiden tietoja ikkunanhallinnasta. Haitalliset sovellukset voivat noutaa tietoja, jotka on tarkoitettu järjestelmän sisäiseen käyttöön."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"ikkunan tunnisteen noutaminen"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Antaa sovelluksen noutaa ikkunan tunnisteen. Haitalliset sovellukset saattavat käyttää sovelluksen ikkunaa luvattomasti esiintymällä järjestelmänä."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"kehystilastojen noutaminen"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Antaa sovelluksen kerätä kehystilastoja. Haitalliset sovellukset saattavat tarkkailla toisten sovellusten ikkunoiden kehystilastoja."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"suodata tapahtumat"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Antaa sovelluksen rekisteröidä syöttösuodattimen, joka suodattaa kaikkien käyttäjätapahtumien streamin ennen tapahtumien näyttämistä. Haitalliset sovellukset voivat hallita järjestelmän käyttöliittymää ilman käyttäjän lupaa."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"suurenna ruutu"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Antaa sovelluksen suurentaa ruudun sisällön. Haitalliset sovellukset voivat muuttaa näytettävää sisältöä siten, ettei laitetta enää voi käyttää."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"sulje puhelin osittain"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Asettaa toimintojen hallinnan sulkeutumistilaan. Ei sulje puhelinta kokonaan."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"estä sovellusten vaihto"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Sallii sovelluksen lähettää ilmoituksen tekstiviestin vastaanotosta. Haitalliset sovellukset voivat käyttää tätä saapuvien tekstiviestien väärentämiseen."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"lähetä WAP-PUSH-vastaanotettu lähetys"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Antaa sovelluksen lähettää ilmoituksen WAP PUSH -viestin vastaanotosta. Haitalliset sovellukset voivat käyttää tätä MMS-viestien vastaanoton väärentämiseen tai sivujen sisällön korvaamiseen huomaamattomasti haitallisella sisällöllä."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"lähetä verkkojen pisteet"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Sallii sovelluksen lähettää ilmoituksen verkon pisteytystarpeesta. Ei tarvita tavallisissa sovelluksissa."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"rajoita käynnissä olevien prosessien määrää"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Antaa sovelluksen hallita suoritettavien sovellusten enimmäismäärää. Ei tavallisten sovellusten käyttöön."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"pakota taustasovelluksia sulkeutumaan"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Antaa sovelluksen sitoutua VPN-palvelun ylemmän tason käyttöliittymään. Ei tavallisten sovellusten käyttöön."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sido taustakuvaan"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Antaa sovelluksen sitoutua taustakuvan ylätason käyttöliittymään. Ei tavallisten sovellusten käyttöön."</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"etänäyttöön sitoutuminen"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Antaa sovelluksen sitoutua etänäytön ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sitoudu widget-palveluun"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Antaa sovelluksen sitoutua widget-palvelun ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"reitin tarjoajan palveluun sitominen"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Antaa sovelluksen luoda sidoksen mihin tahansa rekisteröityyn reitin tarjoajaan. Ei tavallisten sovelluksien käyttöön."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"kommunikoi laitteen järjestelmänvalvojan kanssa"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Antaa sovelluksen lähettää aikomuksia laitteen järjestelmänvalvojalle. Ei tavallisten sovellusten käyttöön."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"sido TV-tuloon"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Antaa sovelluksen sitoutua TV-tulon ylemmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"lisää tai poista laitteen järjestelmänvalvoja"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Haltija voi lisätä tai poistaa aktiivisen laitteen järjestelmänvalvojia. Tätä ei pitäisi tarvita tavallisille sovelluksille."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"muuta näytön suuntaa"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Sallii sovelluksen käyttää mitä tahansa asennettua tietovälineen koodin purkajaa toistoa varten."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"hallinnoi luotettavia varmenteita"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Antaa sovellukselle luvan asentaa ja poistaa luotettavia CA-varmenteita."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"suorita sovellus laitteen ollessa käyttämättömänä"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Tämä oikeus sallii Android-järjestelmän siirtää sovelluksen suorituksen taustalle, kun laite ei ole käytössä."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"lue diag:in omistamia resursseja / kirjoita resursseihin"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Antaa sovelluksen lukea ja kirjoittaa diag-ryhmän omistamiin resursseihin, esimerkiksi /dev-hakemistossa oleviin tiedostoihin. Tämä voi vaikuttaa järjestelmän vakauteen ja turvallisuuteen. Tämä lupa tulee myöntää VAIN valmistajan tai operaattorin laitteistotesteille."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"sovelluskomponenttien ottaminen käyttöön tai pois käytöstä"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Antaa sovelluksen lukea laitteelle tallennettuja henkilökohtaisia tietoja, kuten nimen ja yhteystietoja. Sovellus voi tunnistaa sinut ja lähettää profiilitietojasi muille."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"muokkaa omia yhteystietoja"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Antaa sovelluksen muuttaa laitteelle tallennettuja henkilökohtaisia tietoja, kuten nimeä ja yhteystietoja, tai lisätä niitä. Sovellus voi tunnistaa sinut ja lähettää profiilitietojasi muille."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"kehon anturit (kuten sykemittarit)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Antaa sovelluksen käyttää tietoja antureista, joita käytetään kehon toimintojen kuten sykkeen mittaamiseen."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lue sosiaalista streamia"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Antaa sovelluksen käyttää ja synkronoida sinun tai kavereidesi päivityksiä sosiaalisista palveluista. Mieti tarkkaan ennen tietojen jakamista: tämän luvan saaneet sovellukset voivat lukea sinun ja kavereidesi välisiä viestejä sosiaalisissa verkkopalveluissa huolimatta viestien arkaluonteisuudesta. Huom: tätä lupaa ei saa ottaa käyttöön kaikissa sosiaalisissa verkkopalveluissa."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"kirjoita sosiaaliseen streamiin"</string>
@@ -477,6 +523,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Antaa sovelluksen käyttää SurfaceFlingerin matalan tason ominaisuuksia."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lue kehyspuskuria"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Antaa sovelluksen lukea kehyspuskurin sisältöä."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlingerin käyttäminen"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Antaa sovelluksen käyttää InputFlingerin matalan tason ominaisuuksia."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"määritä wifi-näyttöjen asetukset"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Antaa sovelluksen määrittää wifi-näyttöjä ja muodostaa yhteyden niihin."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"hallitse wifi-näyttöjä"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Antaa sovelluksen muokata yleisiä ääniasetuksia, kuten äänenvoimakkuutta ja käytettävää kaiutinta."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"tallentaa ääntä"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Antaa sovelluksen tallentaa ääntä mikrofonin avulla. Sovellus voi tallentaa ääntä milloin tahansa pyytämättä sinulta lupaa."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-viestintä"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Antaa sovelluksen lähettää komentoja SIM-kortille. Tämä ei ole turvallista."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ota kuvia ja videoita"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Antaa sovelluksen ottaa kuvia ja kuvata videoita kameralla. Sovellus voi käyttää kameraa milloin tahansa ilman lupaasi."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"poista lähetyksen merkkivalo käytöstä, kun kameraa käytetään"</string>
@@ -550,6 +600,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Antaa sovelluksen hallita laitteen puhelinominaisuuksia. Jos sovelluksella on tämä oikeus, se voi esimerkiksi vaihtaa verkkoa tai ottaa puhelinradion käyttöön tai poistaa sen käytöstä ilmoittamatta käyttäjälle."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lue puhelimen tila ja identiteetti"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Antaa sovelluksen käyttää laitteen puhelinominaisuuksia. Sovellus voi määrittää puhelinnumeron ja laitteen tunnuksen, puhelun tilan sekä soitetun numeron."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"lue puhelimen tarkat tilat"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Antaa sovelluksen käyttää puhelimen tarkkoja tiloja. Tämän oikeus antaa sovelluksen määrittää puhelun todellisen tilan, eli onko puhelu aktiivinen vai taustalla, puhelujen epäonnistumiset, tietoliikenneyhteyden tarkan tilan ja tietoliikenneyhteyden muodostuksen epäonnistumiset."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"estä tablet-laitetta menemästä virransäästötilaan"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"estä puhelinta menemästä virransäästötilaan"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Antaa sovelluksen estää tablet-laitetta siirtymästä virransäästötilaan."</string>
@@ -617,6 +669,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Vaihda WiMAX-verkon tilaa"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Antaa sovelluksen muodostaa tablet-laitteella yhteyden WiMAX-verkkoon ja katkaista yhteyden."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Antaa sovelluksen muodostaa puhelimella yhteyden WiMAX-verkkoon ja katkaista yhteyden."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"pisteytä verkot"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Sallii sovelluksen asettaa verkkoja paremmuusjärjestykseen ja vaikuttaa siihen, mikä verkko tablet-laitteen kannattaa valita."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Sallii sovelluksen asettaa verkkoja paremmuusjärjestykseen ja vaikuttaa siihen, mikä verkko puhelimen kannattaa valita."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"muodosta laitepari Bluetooth-laitteiden kanssa"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Antaa sovelluksen tarkastella tablet-laitteen Bluetooth-asetuksia sekä muodostaa ja hyväksyä laitepariyhteyksiä."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Antaa sovelluksen tarkastella puhelimen Bluetooth-asetuksia sekä muodostaa ja hyväksyä laitepariyhteyksiä muihin laitteisiin."</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Antaa sovelluksen noutaa, tutkia ja tyhjentää ilmoituksia (myös muiden sovelluksien lähettämiä)."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"sido ilmoituskuuntelijapalveluun"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Antaa sovelluksen sitoutua ilmoituskuuntelijan ylimmän tason käyttöliittymään. Ei tavallisten sovelluksien käyttöön."</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Palveluntarjoajan määrityssovelluksen käynnistäminen"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Antaa luvanhaltijan käynnistää palveluntarjoajan määrityssovelluksen. Ei tavallisten sovelluksien käyttöön."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"verkon tilahavaintojen kuunteleminen"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Antaa sovellukselle luvan kuunnella verkon tilahavaintoja. Ei tavallisten sovellusten käyttöön."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"Muuttaa syöttölaitteen kalibrointia."</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Antaa sovelluksen muokata kosketusnäytön kalibrointiparametreja. Ei tavallisten sovellusten käyttöön."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM-varmenteiden käyttö"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Antaa sovelluksen käyttää DRM-varmenteita ja hallita niiden käyttäjiä. Ei tavallisten sovellusten käyttöön."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Aseta salasanasäännöt"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Hallinnoi ruudun lukituksenpoistosalasanoissa sallittuja merkkejä ja salasanan pituutta."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Tarkkaile ruudun lukituksen poistoyrityksiä"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Koti"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Työ"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Muu"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Tämän kontaktin katselemiseen ei löydy sovellusta."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Anna PIN-koodi"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Anna PUK-koodi ja uusi PIN-koodi"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-koodi"</string>
@@ -1174,8 +1238,8 @@
     <string name="ringtone_picker_title" msgid="3515143939175119094">"Soittoäänet"</string>
     <string name="ringtone_unknown" msgid="5477919988701784788">"Tuntematon soittoääni"</string>
   <plurals name="wifi_available">
-    <item quantity="one" msgid="6654123987418168693">"Wifi-verkko käytettävissä"</item>
-    <item quantity="other" msgid="4192424489168397386">"Wifi-verkkoja käytettävissä"</item>
+    <item quantity="one" msgid="6654123987418168693">"Wi-Fi-verkko käytettävissä"</item>
+    <item quantity="other" msgid="4192424489168397386">"Wi-Fi-verkkoja käytettävissä"</item>
   </plurals>
   <plurals name="wifi_available_detailed">
     <item quantity="one" msgid="1634101450343277345">"Avoin wifi-verkko käytettävissä"</item>
@@ -1185,10 +1249,10 @@
     <string name="network_available_sign_in" msgid="8495155593358054676">"Kirjaudu verkkoon"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
-    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wifi-yhteyden muodostaminen epäonnistui"</string>
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi-yhteyden muodostaminen epäonnistui"</string>
     <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" : huono internetyhteys."</string>
     <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Suora wifi-yhteys"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Käynnistä suora wifi-yhteys. Wifi-asiakas/-hotspot poistetaan käytöstä."</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Käynnistä suora wifi-yhteys. Wi-Fi-asiakas/-hotspot poistetaan käytöstä."</string>
     <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Suoran wifi-yhteyden käynnistäminen epäonnistui."</string>
     <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct on käytössä"</string>
     <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Tarkastele asetuksia koskettamalla"</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Sallii sovelluksen käyttää salasanalla suojattua tallennustilaa."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Hallinnoi näppäinvahdin näyttämistä ja piilottamista"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Antaa sovelluksen hallita näppäinvahtia."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Seuraa luottamuksen tilamuutoksia."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Antaa sovelluksen seurata luottamuksen tilamuutoksia."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Luotettavaan tahoon sitoutuminen"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Antaa sovelluksen sitoutua luotettavaan tahoon."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Vuorovaikutus päivitys- ja palautusjärjestelmän kanssa"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Sallii sovelluksen vuorovaikutuksen palautusjärjestelmän ja järjestelmäpäivitysten kanssa."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Ohjaa zoomausta napauttamalla kahdesti"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widgetin lisääminen epäonnistui."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Siirry"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Taustakuva"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Vaihda taustakuvaa"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Ilmoituskuuntelija"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"VPN on aktivoitu"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> on aktivoinut VPN-yhteyden"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Voit hallinnoida verkkoa koskettamalla."</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Valitse sovellus"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ei käynnisty"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Jaa seuraavien kanssa:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Jaa sovelluksessa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Liukuva valitsin. Kosketa pitkään."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Liu\'uta ylös ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Liu\'uta alas ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Liu\'uta vasemmalle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Liu\'uta oikealle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Poista lukitus"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Äänetön"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Ääni käytössä"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Haku"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Poista lukitus liu\'uttamalla."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Liitä kuulokkeet kuullaksesi, mitä näppäimiä painat kirjoittaessasi salasanaa."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Piste."</string>
@@ -1443,12 +1507,12 @@
     <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G-tiedonsiirto pois käytöstä"</string>
     <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G-tiedonsiirto pois käytöstä"</string>
     <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Mobiilitiedonsiirto pois käytöstä"</string>
-    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wifi-tiedonsiirto pois käytöstä"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi-tiedonsiirto pois käytöstä"</string>
     <string name="data_usage_limit_body" msgid="3317964706973601386">"Ota käyttöön koskettamalla."</string>
     <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G-tiedonsiirtoraja ylitetty"</string>
     <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G-tiedonsiirtoraja ylitetty"</string>
     <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Mobiilitiedonsiirtoraja ylitetty"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wifi-tiedonsiirtoraja ylitetty"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi-tiedonsiirtoraja ylitetty"</string>
     <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> yli asetetun rajan"</string>
     <string name="data_usage_restricted_title" msgid="5965157361036321914">"Rajoitettu taustatietojen käyttö"</string>
     <string name="data_usage_restricted_body" msgid="6741521330997452990">"Poista rajoitus koskettamalla."</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Järjestelmä"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ääni"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Langaton näyttö"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Valmis"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Median äänentoisto"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Yhdistä laitteeseen"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Lähetä näyttö laitteeseen"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Etsitään laitteita…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Asetukset"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Katkaise yhteys"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Etsitään..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Yhdistetään..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Käytettävissä"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Peittokuva # <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", suojattu"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Langaton näyttö on yhdistetty"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Tämä ruutu näkyy toisella laitteella"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Lähetetään näyttöä"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Yhdistetään näyttöön <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Lähetetään näyttöä"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Yhdistetty näyttöön <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Katkaise yhteys"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Hätäpuhelu"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unohtunut kuvio"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortin lukitusta poistetaan…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Virheellinen PIN-koodi."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Anna 4–8-numeroinen PIN-koodi."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodissa tulee olla vähintään 8 numeroa."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-koodissa tulee olla 8 numeroa."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Anna uudelleen oikea PUK-koodi. Jos teet liian monta yritystä, SIM-kortti poistetaan käytöstä pysyvästi."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodit eivät täsmää"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liikaa kuvionpiirtoyrityksiä"</string>
@@ -1649,5 +1719,16 @@
     <item quantity="other" msgid="4730868920742952817">"Yritä uud. <xliff:g id="COUNT">%d</xliff:g> s kul."</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Yritä myöhemmin uudelleen"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Poistu koko näytön tilasta liu\'uttamalla alas."</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Poistu koko näytön tilasta pyyhkäisemällä alas."</string>
+    <string name="done_label" msgid="2093726099505892398">"Valmis"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Tuntien ympyränmuotoinen liukusäädin"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Minuuttien ympyränmuotoinen liukusäädin"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Valitse tunnit"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Valitse minuutit"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Päiväruudukko kuukausittain"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Vuosiluettelo"</string>
+    <string name="select_day" msgid="7774759604701773332">"Valitse kuukausi ja päivä"</string>
+    <string name="select_year" msgid="7952052866994196170">"Valitse vuosi"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> on valittu"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> poistettiin"</string>
 </resources>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index 385ed4b..c917749 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"To"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Po"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Sans_titre&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"..."</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Veuillez saisir une clé PUK comportant au moins huit chiffres."</string>
     <string name="needPuk" msgid="919668385956251611">"Votre carte SIM est verrouillée par clé PUK. Saisissez la clé PUK pour la déverrouiller."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Saisissez la clé PUK2 pour débloquer la carte SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Opération infructueuse. Activez le verrouillage SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative avant que votre carte SIM soit verrouillée."</item>
+    <item quantity="other" msgid="7530597808358774740">"Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative(s) avant que votre carte SIM soit verrouillée."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"Code IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Numéro de l\'appelant (entrant)"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchroniser"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Trop de contenus supprimés (<xliff:g id="CONTENT_TYPE">%s</xliff:g>)."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"La mémoire de la tablette est pleine. Supprimez des fichiers pour libérer de l\'espace."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"La mémoire de la montre est pleine. Supprimez des fichiers pour libérer de l\'espace."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"La mémoire du téléphone est pleine. Veuillez supprimer des fichiers pour libérer de l\'espace."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Le réseau peut être surveillé"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Par un tiers inconnu"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Sonnerie activée"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Arrêt en cours..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Votre tablette va s\'éteindre."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Votre montre va s\'éteindre."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Votre téléphone va s\'éteindre."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Voulez-vous éteindre l\'appareil?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Redémarrer en mode sans échec"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode Avion"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Le mode Avion est activé."</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Le mode Avion est désactivé."</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Paramètres"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"&gt;999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Mode sécurisé"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Système Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"désinstaller des raccourcis"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permet à l\'application de supprimer des raccourcis de la page d\'accueil sans intervention de l\'utilisateur."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"transférer les appels sortants"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permet à l\'application de traiter les appels sortants et de modifier le numéro à composer. Cette autorisation lui permet de surveiller, rediriger ou empêcher les appels sortants."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permet à l\'application de lire le numéro composé lors d\'un appel sortant et lui donne la possibilité de rediriger l\'appel vers un autre numéro ou d\'abandonner l\'appel."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"recevoir des messages texte"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permet à l\'application de recevoir et de traiter les messages texte. Cette autorisation lui donne la possibilité de surveiller ou de supprimer les messages envoyés à votre appareil sans vous les montrer."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"recevoir des messages multimédias"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permet à l\'application de récupérer le contenu de la fenêtre active. Des applications malveillantes peuvent exploiter cette fonctionnalité pour récupérer et lire la totalité du contenu de la fenêtre, à l\'exception des mots de passe."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"activer temporairement l\'accessibilité"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permet à une application d\'activer temporairement l\'accessibilité sur l\'appareil. Des applications malveillantes peuvent activer l\'accessibilité sans le consentement de l\'utilisateur."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"récupérer les données sur les fenêtres"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permet à une application de récupérer les données sur les fenêtres dans le gestionnaire de fenêtres. Des applications malveillantes peuvent récupérer des données destinées à un usage interne du système."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"récupérer les jetons de fenêtre"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permet à une application de récupérer les jetons de fenêtre. Des applications malveillantes peuvent effectuer des interactions non autorisées avec la fenêtre de l\'application, se faisant passer pour le système."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"récupérer les statistiques de référence"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permet à une application d\'obtenir des statistiques de référence. Des applications malveillantes peuvent observer les statistiques de référence de fenêtres dans d\'autres applications."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrer les événements"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permet à une application d\'enregistrer un filtre d\'entrée pour filtrer le flux de tous les événements des utilisateurs avant qu\'ils ne soient traités. Des applications malveillantes peuvent contrôler l\'interface utilisateur du système sans l\'intervention de l\'utilisateur."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"agrandir l\'écran"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permet à une application d\'agrandir le contenu à l\'écran. Les applications malveillantes peuvent transformer ce contenu et rendre l\'appareil inutilisable."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"arrêt partiel"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Place le gestionnaire d\'activités en état d\'arrêt, mais n\'effectue pas d\'arrêt complet."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"empêcher les changements d\'applications"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permet à l\'application d\'envoyer une notification indiquant la réception d\'un message texte. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux messages entrants."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"envoyer une diffusion de réception de WAP par poussée"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permet à l\'application d\'envoyer une notification indiquant la réception d\'un message WAP par poussée. Des applications malveillantes peuvent utiliser cette fonctionnalité pour créer de faux messages multimédias entrants ou pour remplacer le contenu d\'une page Web par du contenu malveillant."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"diffuser le classement des réseaux"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Autorise l\'application à diffuser une notification signalant que les réseaux doivent être évalués. Cela n\'est jamais nécessaire pour les applications normales."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"restreindre le nombre de processus en cours d\'exécution"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permet à l\'application de définir le nombre maximal de processus devant s\'exécuter. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forcer la fermeture des applications en arrière-plan"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service RPV. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"se fixer à un fond d\'écran"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un fond d\'écran. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"s\'associer à un service d\'interaction vocale"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'interaction vocale. Ne devrait pas être nécessaire pour les applications standards."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"lier à un écran distant"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un écran distant. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"s\'associer à un service de widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service de widget. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"associer à un fournisseur d\'itinéraires enregistré"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permet à l\'application autorisée de s\'associer à des fournisseurs d\'itinéraires enregistrés. Cette fonctionnalité ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interagir avec l\'administrateur d\'un périphérique"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permet à l\'application autorisée d\'envoyer des intentions à l\'administrateur de l\'appareil. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"s\'associer à une entrée de téléviseur"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'une entrée de téléviseur. Les applications standards ne devraient pas avoir à utiliser cette fonctionnalité."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"ajouter ou supprimer un administrateur de l\'appareil"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permet à l\'application d\'ajouter ou de supprimer des administrateurs actifs de l\'appareil. Les applications standards ne devraient jamais utiliser cette autorisation."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"modifier l\'orientation de l\'écran"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permet à une application d\'utiliser n\'importe quel décodeur installé pour lire les fichiers multimédias."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"gérer les certificats de confiance"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permet à l\'application d\'installer et de désinstaller les certificats CA en tant que certificats de confiance."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"exécuter l\'application lorsque l\'appareil est inactif"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Cette autorisation permet au système Android d\'exécuter l\'application en arrière-plan lorsque l\'appareil est inactif."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"lire ou modifier les ressources appartenant au groupe de diagnostics"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permet à l\'application d\'obtenir des droits en lecture et en écriture pour toute ressource appartenant au groupe de diagnostics (par exemple, les fichiers du répertoire /dev). Cela peut affecter la stabilité et la sécurité du système. Cette fonctionnalité est UNIQUEMENT réservée aux diagnostics matériels effectués par le fabricant ou le fournisseur de services."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"activer ou désactiver les composants d\'une application"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permet à l\'application d\'accéder aux données de profil enregistrées sur votre appareil, comme votre nom et vos coordonnées. L\'application peut alors vous identifier et envoyer les données de votre profil à des tiers."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modifier votre fiche de contact"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permet à l\'application de modifier les données de profil enregistrées sur votre appareil, telles que votre nom et vos coordonnées, ou d\'en ajouter. Elle peut alors vous identifier et envoyer vos données de profil à des tiers."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"capteurs corporels (tels que les moniteurs de fréquence cardiaque)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permet à l\'application d\'accéder aux données des capteurs utilisés pour mesurer des valeurs physiologiques, telles que votre fréquence cardiaque."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lire les flux de réseaux sociaux"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permet à l\'application d\'accéder à vos mises à jour sur les réseaux sociaux, ainsi qu\'à celles de vos amis, et de les synchroniser. Soyez prudent lorsque vous partagez de l\'information. Cette autorisation permet à l\'application de lire les communications entre vous et vos amis sur les réseaux sociaux, indépendamment de leur caractère confidentiel. Remarque : Il est possible que cette autorisation ne soit pas appliquée sur tous les réseaux sociaux."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"modifier vos flux de réseaux sociaux"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permet à l\'application d\'utiliser les fonctionnalités de bas niveau de SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lire la mémoire tampon graphique"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permet à l\'application de lire le contenu de la mémoire tampon graphique."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"accéder à InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permet à l\'application d\'utiliser les fonctionnalités de bas niveau de SurfaceFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurer les écrans Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permet à l\'application de configurer des écrans Wi-Fi et de s\'y connecter."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"contrôler les écrans Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet à l\'application de modifier les paramètres audio généraux, tels que le volume et la sortie audio utilisée."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"enregistrer fichier audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permet à l\'application d\'enregistrer des contenus audio à l\'aide du microphone. Cette autorisation lui donne la possibilité d\'enregistrer du contenu audio à tout moment sans votre consentement."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"Communication avec la carte SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permet à l\'application d\'envoyer des commandes à la carte SIM. Cette fonctionnalité est très dangereuse."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"prendre des photos et filmer des vidéos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permet à l\'application de prendre des photos et de filmer des vidéos avec l\'appareil photo. Cette autorisation lui permet d\'utiliser l\'appareil photo à tout moment sans votre consentement."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"désactiver l\'indicateur d\'émission LED lorsque la caméra est en cours d\'utilisation"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permet à l\'application de contrôler les fonctionnalités de téléphonie de l\'appareil. Une application disposant de cette autorisation peut, par exemple, basculer d\'un réseau à l\'autre et activer ou désactiver le signal radio du téléphone à votre insu."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"voir l\'état et l\'identité du téléphone"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permet à l\'application d\'accéder aux fonctionnalités téléphoniques de l\'appareil. Cette autorisation permet à l\'application de déterminer le numéro de téléphone et les identifiants de l\'appareil, si un appel est actif et le numéro distant connecté par un appel."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"Accéder aux états précis du téléphone"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permet à l\'application d\'accéder aux états précis du téléphone. Cette autorisation lui permet de déterminer le statut d\'appel réel, si un appel est actif ou en arrière-plan, si des appels ont échoué, l\'état précis de la connexion et si cette dernière a échoué."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"empêcher la tablette de passer en mode veille"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"empêcher le téléphone de passer en mode veille"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permet à l\'application d\'empêcher la tablette de passer en mode veille."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Modifier l\'état du WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permet à l\'application de connecter la tablette aux réseaux WiMAX et de l\'en déconnecter."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permet à l\'application de connecter le téléphone aux réseaux WiMAX et de l\'en déconnecter."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"classer les réseaux"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Autorise l\'application à classer les réseaux et à influencer la sélection du réseau par la tablette."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Autorise l\'application à classer les réseaux et à influencer la sélection du réseau par le téléphone."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"s\'associer à des appareils Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permet à l\'application d\'accéder à la configuration du Bluetooth sur la tablette, et d\'établir et accepter des connexions avec les appareils associés."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permet à l\'application d\'accéder à la configuration du Bluetooth sur le téléphone, et d\'établir et accepter des connexions avec les appareils associés."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permet aux applications de récupérer, d\'examiner et d\'autoriser les notifications, y compris celles envoyées par d\'autres applications."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications. Ne devrait jamais être nécessaire pour les applications normales."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"s\'associer à un service de fournisseur de conditions"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service de fournisseur de conditions. Ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"faire appel à l\'application de configuration du fournisseur de services"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permet à l\'application autorisée de faire appel à l\'application de configuration fournie par le fournisseur de services. Cette fonctionnalité ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"détecter des observations sur les conditions du réseau"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permet à une application de détecter les observations sur les conditions du réseau. Ne devrait jamais être nécessaire pour les applications standards."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"modifier le calibrage du périphérique d\'entrée"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permet à l\'application de modifier les paramètres de calibrage de l\'écran tactile. Ne devrait jamais être nécessaire pour les applications standards."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"accéder aux certificats GDN"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permet à une application de fournir et d\'utiliser les certificats de GDN. Cela ne devrait jamais être nécessaire pour les applications normales."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Définir les règles du mot de passe"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Choisir le nombre et le type de caractères autorisés dans les mots de passe de déverrouillage de l\'écran"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Gérer les tentatives de déverrouillage de l\'écran"</string>
@@ -783,7 +842,7 @@
     <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
     <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
     <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Conversations"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
     <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
     <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
     <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Domicile"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Travail"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Autre"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Aucune application permettant d\'afficher ce contact n\'a été trouvée."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Saisissez le NIP."</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Saisissez la clé PUK et le nouveau NIP."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Clé PUK"</string>
@@ -1112,8 +1172,8 @@
     <string name="no" msgid="5141531044935541497">"Annuler"</string>
     <string name="dialog_alert_title" msgid="2049658708609043103">"Attention"</string>
     <string name="loading" msgid="7933681260296021180">"Chargement en cours..."</string>
-    <string name="capital_on" msgid="1544682755514494298">"ACTIVÉE"</string>
-    <string name="capital_off" msgid="6815870386972805832">"DÉSACTIVÉE"</string>
+    <string name="capital_on" msgid="1544682755514494298">"OUI"</string>
+    <string name="capital_off" msgid="6815870386972805832">"NON"</string>
     <string name="whichApplication" msgid="4533185947064773386">"Continuer avec"</string>
     <string name="whichHomeApplication" msgid="4616420172727326782">"Sélectionnez une application de l\'écran d\'accueil"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"Utiliser cette application par défaut pour cette action"</string>
@@ -1250,11 +1310,11 @@
     <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Si vous activez la mémoire de stockage USB, certaines applications en cours d\'utilisation vont être fermées et risquent de rester indisponibles jusqu\'à ce que la mémoire de stockage USB soit désactivée."</string>
     <string name="dlg_error_title" msgid="7323658469626514207">"Échec du fonctionnement de la mémoire de stockage USB."</string>
     <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
-    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connecté en tant qu\'appareil multimédia"</string>
+    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Connecté en tant qu\'app. multimédia"</string>
     <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Connecté en tant qu\'appareil photo"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Connecté en tant que programme d\'installation"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Connecté à un accessoire USB"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"Appuyez ici pour accéder aux autres options USB."</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"Appuyez pour accéder aux autres options USB."</string>
     <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Formater mémoire?"</string>
     <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Formater la carte SD?"</string>
     <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Tous les fichiers stockés sur la mémoire de stockage USB vont être effacés. Cette action est irréversible."</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permet à une application d\'accéder au stockage sécurisé keyguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Contrôler l\'affichage et le masquage de la protection des touches"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permet à une application de contrôler la protection des touches."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Détecter les modifications de l\'état de confiance"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permet à une application de détecter les modifications de l\'état de confiance."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Lier à un service d\'agent de confiance"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permet à une application de se lier à un service d\'agent de confiance."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interagir avec le système de récupération et de mise à jour"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permet à une application d\'interagir avec le système de récupération et les mises à jour système."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Appuyer deux fois pour régler le zoom"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Impossible d\'ajouter le widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Aller"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fond d\'écran"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Changer de fond d\'écran"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Outil d\'écoute des notifications"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Fournisseur de conditions"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN activé"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN activé par <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Appuyez ici pour gérer le réseau."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Entrée"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Sélectionnez une application"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Impossible de lancer l\'application <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Partagez avec"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Partager avec <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Poignée coulissante. Appuyez de manière prolongée."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Faire glisser le doigt vers le haut : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Faire glisser le doigt vers le bas : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser votre doigt vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Faites glisser votre doigt vers la droite pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Déverrouiller"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Appareil photo"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Mode silencieux"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Son activé"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Recherche"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Faites glisser votre doigt pour déverrouiller l\'appareil."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Branchez des écouteurs pour entendre l\'énoncé des touches lors de la saisie du mot de passe."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Point."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Système"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Affichage sans fil"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Terminé"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Sortie multimédia"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Connexion à l\'appareil"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Diffuser l\'écran sur l\'appareil"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Recherche d\'appareils en cours…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Paramètres"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Déconnecter"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Analyse en cours..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Connexion en cours..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponible"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposition n° <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g> : <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> ppp"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", sécurisé"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"L\'affichage sans fil est connecté."</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Cet écran s\'affiche sur un autre appareil."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Connexion à l\'écran en cours"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Connexion au réseau <xliff:g id="NAME">%1$s</xliff:g> en cours…"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Diffusion de l\'écran en cours"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Connecté à <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Déconnecter"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Appel d\'urgence"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"J\'ai oublié le schéma"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Déblocage de la carte SIM en cours…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"NIP erroné."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Saisissez un NIP comprenant entre quatre et huit chiffres"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Le code PUK doit contenir au moins 8 chiffres."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Le code PUK doit contenir 8 chiffres."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Veuillez saisir de nouveau le code PUK correct. Des tentatives répétées désactivent définitivement la carte SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Les codes PIN ne correspondent pas."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Trop de tentatives."</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Réessayer dans <xliff:g id="COUNT">%d</xliff:g> s"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Réessayez plus tard"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Balayez vers le bas pour quitter plein écran"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Balayez vers le bas pour quitter le mode plein écran"</string>
+    <string name="done_label" msgid="2093726099505892398">"Terminé"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Curseur circulaire des heures"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Curseur circulaire des minutes"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Sélectionnez les heures"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Sélectionnez les minutes"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Calendrier mensuel sous forme de grille"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Liste des années"</string>
+    <string name="select_day" msgid="7774759604701773332">"Sélectionnez un mois et un jour"</string>
+    <string name="select_year" msgid="7952052866994196170">"Sélectionnez une année"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"« <xliff:g id="ITEM">%1$s</xliff:g> » a été sélectionné"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"« <xliff:g id="KEY">%1$s</xliff:g> » a été supprimé"</string>
 </resources>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 9a44a31..9359606 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"To"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Po"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Sans nom&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Saisissez un code PUK comportant au moins huit chiffres."</string>
     <string name="needPuk" msgid="919668385956251611">"Votre carte SIM est verrouillée par clé PUK. Saisissez la clé PUK pour la déverrouiller."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Saisissez la clé PUK2 pour débloquer la carte SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Échec de l\'opération. Veuillez activer le verrouillage de la carte SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative avant que votre carte SIM ne soit verrouillée."</item>
+    <item quantity="other" msgid="7530597808358774740">"Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentatives avant que votre carte SIM ne soit verrouillée."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"Code IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"Code MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Numéro de l\'appelant (entrant)"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchronisation"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Trop de contenus supprimés (<xliff:g id="CONTENT_TYPE">%s</xliff:g>)."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"La mémoire de la tablette est pleine. Supprimez des fichiers pour libérer de l\'espace."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"La mémoire de la montre est saturée. Veuillez supprimer des fichiers pour libérer de l\'espace."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"La mémoire du téléphone est pleine. Veuillez supprimer des fichiers pour libérer de l\'espace."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Il est possible que le réseau soit surveillé."</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Par un tiers inconnu"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Sonnerie activée"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Arrêt en cours..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Votre tablette va s\'éteindre."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"La montre va s\'éteindre."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Votre téléphone va s\'éteindre."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Voulez-vous éteindre l\'appareil ?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Redémarrer en mode sans échec"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode Avion"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Le mode Avion est activé."</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Le mode Avion est désactivé."</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Paramètres"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"&gt;999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Mode sécurisé"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Système Android"</string>
@@ -225,7 +255,7 @@
     <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Accès et contrôle de faible niveau du système."</string>
     <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Outils de développement"</string>
     <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ces fonctionnalités sont destinées uniquement aux développeurs d\'applications."</string>
-    <string name="permgrouplab_display" msgid="4279909676036402636">"Interface utilisateur d\'une autre application"</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"Interface des autres applis"</string>
     <string name="permgroupdesc_display" msgid="6051002031933013714">"Effet sur l\'interface utilisateur d\'autres applications"</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"Stockage"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Accéder à la  mémoire de stockage USB"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"désinstaller des raccourcis"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permettre à l\'application de supprimer des raccourcis de l\'écran d\'accueil sans l\'intervention de l\'utilisateur"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"transférer les appels sortants"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permet à l\'application de traiter les appels sortants et de modifier le numéro à composer. Cette autorisation lui permet de surveiller, rediriger ou empêcher les appels sortants."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permettre à l\'application de lire le numéro composé lors d\'un appel sortant, et lui donner la possibilité de rediriger l\'appel vers un autre numéro ou d\'abandonner l\'appel"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"recevoir des messages texte (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permet à l\'application de recevoir et de traiter les SMS. Cette autorisation lui donne la possibilité de surveiller ou supprimer les messages envoyés à votre appareil sans vous les montrer."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"recevoir des messages texte (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permet à l\'application de récupérer le contenu de la fenêtre active. Des applications malveillantes peuvent exploiter cette fonctionnalité pour récupérer et lire la totalité du contenu de la fenêtre, à l\'exception des mots de passe."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"activer temporairement l\'accessibilité"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permet à une application d\'activer temporairement l\'accessibilité sur l\'appareil. Des applications malveillantes peuvent activer l\'accessibilité sans le consentement de l\'utilisateur."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"récupérer les informations sur les fenêtres"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permet à une application de récupérer les informations sur les fenêtres depuis le gestionnaire de fenêtres. Des applications malveillantes peuvent récupérer des informations destinées à un usage interne du système."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"récupérer les jetons de fenêtre"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permettre à une application de récupérer les jetons de fenêtre. Des applications malveillantes peuvent interagir avec la fenêtre de l\'application sans votre autorisation en se faisant passer pour le système."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"récupérer des statistiques de référence"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permettre à une application de collecter des statistiques de référence. Des applications malveillantes peuvent suivre les statistiques de référence de fenêtres dans d\'autres applications."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrer les événements"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permet à une application d\'enregistrer un filtre d\'entrée pour filtrer le flux de tous les événements des utilisateurs avant qu\'ils ne soient traités. Des applications malveillantes peuvent contrôler l\'interface utilisateur du système sans l\'intervention de l\'utilisateur."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"agrandir l\'écran"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permet à une application d\'agrandir le contenu à l\'écran. Les applications malveillantes peuvent transformer ce contenu et rendre l\'appareil inutilisable."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"arrêt partiel"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Place le gestionnaire d\'activités en état d\'arrêt. N\'effectue pas un arrêt complet."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"empêcher les changements d\'applications"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permet à l\'application d\'envoyer une notification indiquant la réception d\'un SMS. Des applications malveillantes peuvent exploiter cette fonctionnalité pour créer de faux SMS entrants."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"Envoi de diffusion de réception de WAP PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permet à l\'application d\'envoyer une notification indiquant la réception d\'un message WAP PUSH. Des applications malveillantes peuvent exploiter cette fonctionnalité pour créer de faux MMS entrants ou pour remplacer le contenu d\'une page Web par du contenu malveillant."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"diffuser des notifications pour l\'évaluation des réseaux"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Autoriser l\'application à diffuser une notification signalant que les réseaux doivent être évalués. Cette autorisation n\'est pas nécessaire pour les applications standards."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"Nombre maximal de processus en cours d\'exécution"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permet à l\'application de contrôler le nombre maximal de processus devant s\'exécuter. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forcer la fermeture des applications en arrière-plan"</string>
@@ -348,7 +380,7 @@
     <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Permet à l\'application de lancer l\'interface utilisateur de confirmation de sauvegarde complète. Seules certaines applications peuvent bénéficier de cette permission."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"Affichage de fenêtres non autorisées"</string>
     <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Permet à l\'application de créer des fenêtres destinées à être utilisées par l\'interface utilisateur du système interne. Les applications standards ne doivent pas utiliser cette fonctionnalité."</string>
-    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"ignorer les autres applications"</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"Se superposer aux autres applis"</string>
     <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Permet à l\'application d\'ignorer d\'autres applications ou certaines parties de l\'interface utilisateur. Cela peut altérer votre utilisation de l\'interface de n\'importe quelle application, ou modifier ce que vous pensez voir dans d\'autres applications."</string>
     <string name="permlab_setAnimationScale" msgid="2805103241153907174">"Réglage de la vitesse des animations"</string>
     <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Permet à l\'application de modifier à tout moment la vitesse générale des animations pour les ralentir ou les accélérer."</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service VPN. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"Se fixer sur un fond d\'écran"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un fond d\'écran. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"s\'associer à un service d\'interaction vocale"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'interaction vocale. Ne devrait pas être nécessaire pour les applications standards."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"s\'associer à un écran à distance"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permettre à l\'application autorisée de s\'associer à l\'interface de niveau supérieur d\'un écran à distance. Cette fonctionnalité ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"associer à un service widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permet à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'un service widget. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"s\'associer à un fournisseur d\'itinéraires"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permettre à l\'application autorisée de s\'associer à n\'importe quel fournisseur d\'itinéraires. Ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interagir avec l\'administrateur du périphérique"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permet à l\'application autorisée d\'envoyer des intentions à l\'administrateur de l\'appareil. Les applications standards ne doivent jamais avoir recours à cette fonctionnalité."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"s\'associer à une entrée TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permettre à l\'application autorisée de s\'associer à l\'interface de plus haut niveau d\'une entrée TV. Ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"ajouter ou supprimer un administrateur de l\'appareil"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permet à l\'application autorisée d\'ajouter ou de supprimer des administrateurs actifs de l\'appareil. Les applications standards ne devraient pas nécessiter cette autorisation."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"Changement d\'orientation de l\'écran"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permet à une application d\'utiliser n\'importe quel décodeur installé pour lire les fichiers multimédias."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"gérer les certificats de confiance"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permet à l\'application d\'installer et de désinstaller les certificats CA en tant que certificats de confiance."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"exécuter l\'application lorsque l\'appareil est inactif"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Cette autorisation permet au système Android d\'exécuter l\'application en arrière-plan lorsque l\'appareil est inactif."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"Lecture/écriture dans les ressources appartenant aux diagnostics"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permet à l\'application d\'obtenir des droits en lecture/écriture concernant toute ressource appartenant au groupe de diagnostics (par exemple, les fichiers du répertoire /dev). Ceci peut affecter la stabilité et la sécurité du système. Cette fonctionnalité est UNIQUEMENT réservée aux diagnostics matériels effectués par le fabricant ou l\'opérateur."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"activer ou désactiver les composants de l\'application"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permet à l\'application d\'accéder aux informations de profil stockées sur votre appareil, telles que votre nom et vos coordonnées. L\'application peut alors vous identifier et envoyer vos informations de profil à des tiers."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modifier votre fiche de contact"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permet à l\'application de modifier les informations de profil stockées sur votre appareil, telles que votre nom et vos coordonnées, ou d\'en ajouter. Elle peut alors vous identifier et envoyer vos informations de profil à des tiers."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"capteurs corporels (tels que les cardiofréquencemètres)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permet à l\'application d\'accéder aux données des capteurs utilisés pour mesurer des valeurs physiologiques, telles que votre fréquence cardiaque."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lire votre flux de réseau social"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permet à l\'application d\'accéder à vos mises à jour sur les réseaux sociaux, ainsi qu\'à celles de vos amis, et de les synchroniser. Soyez prudent lorsque vous partagez des informations. Cette autorisation permet à l\'application de lire les communications entre vous et vos amis sur les réseaux sociaux, indépendamment de leur caractère confidentiel. Remarque : il est possible que cette autorisation ne soit pas appliquée sur tous les réseaux sociaux."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"écrire sur votre flux social"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permet à l\'application d\'utiliser les fonctionnalités de bas niveau de SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"Lecture de la mémoire tampon graphique"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permet à l\'application de lire le contenu de la mémoire tampon graphique."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"accéder à InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permet à l\'application d\'utiliser les fonctionnalités de base d\'InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurer les écrans Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permet à l\'application de configurer des écrans Wi-Fi et de s\'y connecter."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"contrôler les écrans Wi-Fi"</string>
@@ -493,8 +539,10 @@
     <string name="permdesc_mediaContentControl" msgid="1637478200272062">"Permet à l\'application de contrôler la lecture des contenus multimédias et d\'accéder aux informations associées, telles que le titre ou l\'auteur."</string>
     <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modifier vos paramètres audio"</string>
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permet à l\'application de modifier les paramètres audio généraux, tels que le volume et la sortie audio utilisée."</string>
-    <string name="permlab_recordAudio" msgid="3876049771427466323">"Enregistrer des fichiers audio"</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"enregistrer des fichiers audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permet à l\'application d\'enregistrer des contenus audio à l\'aide du microphone. Cette autorisation lui donne la possibilité d\'enregistrer du contenu audio à tout moment sans votre consentement."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"Communication avec la carte SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Autoriser l\'envoi de commandes à la carte SIM via l\'application. Cette fonctionnalité est très risquée."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"prendre des photos et enregistrer des vidéos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permet à l\'application de prendre des photos et de filmer des vidéos avec l\'appareil photo. Cette autorisation lui permet d\'utiliser l\'appareil photo à tout moment sans votre consentement."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"désactiver l\'indicateur d\'émission LED lorsque la caméra est en cours d\'utilisation"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permet à l\'application de contrôler les fonctionnalités de téléphonie de l\'appareil. Une application disposant de cette autorisation peut, par exemple, basculer d\'un réseau à l\'autre et activer ou désactiver le signal radio du téléphone à votre insu."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"voir l\'état et l\'identité du téléphone"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permet à l\'application d\'accéder aux fonctionnalités téléphoniques de l\'appareil. Cette autorisation permet à l\'application de déterminer le numéro de téléphone et les identifiants de l\'appareil, si un appel est actif et le numéro distant connecté par un appel."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"Accéder aux états précis du téléphone"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permet à l\'application d\'accéder aux états précis du téléphone. Cette autorisation lui permet de déterminer le statut d\'appel réel, si un appel est actif ou en arrière-plan, si des appels ont échoué, l\'état précis de la connexion et si cette dernière a échoué."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"empêcher la tablette de passer en mode veille"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"empêcher le téléphone de passer en mode veille"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permet à l\'application d\'empêcher la tablette de passer en mode veille."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Modifier l\'état du WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permet à l\'application de connecter la tablette aux réseaux WiMAX et de l\'en déconnecter."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permet à l\'application de connecter le téléphone aux réseaux WiMAX et de l\'en déconnecter."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"évaluer les réseaux"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Autoriser l\'application à classer les réseaux et à influencer la sélection du réseau sur la tablette"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Autoriser l\'application à classer les réseaux et à influencer la sélection du réseau sur le téléphone"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"associer à des appareils Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permet à l\'application d\'accéder à la configuration du Bluetooth sur la tablette, et d\'établir et accepter des connexions avec les appareils associés."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permet à l\'application d\'accéder à la configuration du Bluetooth sur le téléphone, et d\'établir et accepter des connexions avec les appareils associés."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permet aux applications de récupérer, d\'examiner et d\'autoriser les notifications, y compris celles envoyées par d\'autres applications."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service d\'écoute des notifications. Ne devrait jamais être nécessaire pour les applications normales."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"s\'associer à un service de fournisseur de conditions"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permet à l\'application de s\'associer à l\'interface de niveau supérieur d\'un service de fournisseur de conditions. Ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"faire appel à l\'application de configuration fournie par l\'opérateur"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permet à l\'application autorisée de faire appel à l\'application de configuration fournie par l\'opérateur. Cette fonctionnalité ne devrait pas être nécessaire pour les applications standards."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"détecter des observations sur les conditions du réseau"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permet à une application de détecter des observations sur les conditions du réseau. Les applications standards ne devraient pas nécessiter cette autorisation."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"modifier le calibrage du périphérique d\'entrée"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permettre à l\'application de modifier les paramètres de calibrage de l\'écran tactile. Ne devrait jamais être nécessaire pour les applications standards."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"accéder aux certificats de GDN"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permettre à une application de fournir et d\'utiliser des certificats de GDN. Ne devrait jamais être nécessaire pour les applications standards."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Définir les règles du mot de passe"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Choisir le nombre et le type de caractères autorisés dans les mots de passe de déverrouillage de l\'écran"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Gérer les tentatives de déverrouillage de l\'écran"</string>
@@ -702,7 +761,7 @@
     <item msgid="7897544654242874543">"Bureau"</item>
     <item msgid="1103601433382158155">"Télécopie bureau"</item>
     <item msgid="1735177144948329370">"Télécopie domicile"</item>
-    <item msgid="603878674477207394">"Pager"</item>
+    <item msgid="603878674477207394">"Bipeur"</item>
     <item msgid="1650824275177931637">"Autre"</item>
     <item msgid="9192514806975898961">"Personnalisé"</item>
   </string-array>
@@ -745,7 +804,7 @@
     <string name="phoneTypeWork" msgid="8863939667059911633">"Bureau"</string>
     <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Télécopie bureau"</string>
     <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Télécopie domicile"</string>
-    <string name="phoneTypePager" msgid="7582359955394921732">"Pager"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"Bipeur"</string>
     <string name="phoneTypeOther" msgid="1544425847868765990">"Autre"</string>
     <string name="phoneTypeCallback" msgid="2712175203065678206">"Rappel"</string>
     <string name="phoneTypeCar" msgid="8738360689616716982">"Voiture"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Domicile"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Professionnelle"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Autre"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Aucune application permettant d\'afficher ce contact n\'a été trouvée."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Saisissez le code PIN."</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Saisissez la clé PUK et le nouveau code PIN."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Code PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permet à une application d\'accéder au stockage sécurisé keyguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Contrôler l\'affichage et le masquage de la protection des touches"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permet à une application de contrôler la protection des touches."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Détecter les modifications de l\'état de confiance"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permettre à une application de détecter les modifications de l\'état de confiance."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"S\'associer à un service d\'agent de confiance"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permettre à une application de s\'associer à un service d\'agent de confiance."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interagir avec le système de récupération et de mise à jour"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permet à une application d\'interagir avec le système de récupération et les mises à jour du système."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Appuyez deux fois pour régler le zoom."</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Impossible d\'ajouter le widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"OK"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fond d\'écran"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Changer de fond d\'écran"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Outil d\'écoute des notifications"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Fournisseur de conditions"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN activé"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN activé par <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Appuyez ici pour gérer le réseau."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Entrée"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Sélectionnez une application"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Impossible de lancer l\'application <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Partager avec"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Partager avec <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Poignée coulissante. Appuyez de manière prolongée."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Faites glisser vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Faites glisser vers le bas pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Faites glisser vers la droite pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Déverrouiller"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Appareil photo"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Mode silencieux"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Son activé"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Faites glisser votre doigt pour déverrouiller l\'appareil."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Branchez des écouteurs pour entendre l\'énoncé des touches lors de la saisie du mot de passe."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Point."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Système"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Affichage sans fil"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"OK"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Sortie multimédia"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Connexion à l\'appareil"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Caster l\'écran sur l\'appareil"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Recherche d\'appareils en cours…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Paramètres"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Déconnecter"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Analyse en cours..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Connexion en cours..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponible"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Superposition n° <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g> : <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", sécurisé"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"L\'affichage sans fil est connecté."</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Cet écran s\'affiche sur un autre appareil."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Diffusion de l\'écran en cours"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Connexion à <xliff:g id="NAME">%1$s</xliff:g> en cours…"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Diffusion de l\'écran en cours"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Connecté à <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Déconnecter"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Appel d\'urgence"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"J\'ai oublié le schéma"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Déblocage de la carte SIM en cours…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Le code PIN est erroné."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Veuillez saisir un code PIN comprenant entre quatre et huit chiffres."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Le code PUK doit contenir au moins 8 chiffres."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"La clé PUK doit contenir 8 chiffres."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Veuillez saisir de nouveau le code PUK correct. Des tentatives répétées désactivent définitivement la carte SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Les codes PIN ne correspondent pas."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Trop de tentatives."</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Réessayer dans <xliff:g id="COUNT">%d</xliff:g> s"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Veuillez réessayer ultérieurement."</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Balayer vers le bas pour quitter le plein écran"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Faites glisser le doigt vers le bas pour quitter le mode plein écran."</string>
+    <string name="done_label" msgid="2093726099505892398">"OK"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Curseur circulaire des heures"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Curseur circulaire des minutes"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Sélectionner une heure"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Sélectionner des minutes"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Calendrier mensuel sous forme de grille"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Liste des années"</string>
+    <string name="select_day" msgid="7774759604701773332">"Sélectionner un mois et un jour"</string>
+    <string name="select_year" msgid="7952052866994196170">"Sélectionner une année"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"\"<xliff:g id="ITEM">%1$s</xliff:g>\" sélectionné"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"\"<xliff:g id="KEY">%1$s</xliff:g>\" supprimé"</string>
 </resources>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index 73575bd..3d5f4df 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;शीर्षक-रहित&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"ऐसा PUK लिखें जो 8 अंकों या अधिक का हो."</string>
     <string name="needPuk" msgid="919668385956251611">"आपका सिम कार्ड PUK लॉक किया गया है. इसे अनलॉक करने के लिए PUK कोड लिखें."</string>
     <string name="needPuk2" msgid="4526033371987193070">"सिम कार्ड अनब्‍लॉक करने के लिए PUK2 लिखें."</string>
+    <string name="enablePin" msgid="209412020907207950">"असफल, सिम//RUIM लॉक सक्षम करें."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"सिम के लॉक हो जाने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष है."</item>
+    <item quantity="other" msgid="7530597808358774740">"सिम के लॉक हो जाने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष हैं."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"इनकमिंग कॉलर ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"समन्वयन"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"बहुत से <xliff:g id="CONTENT_TYPE">%s</xliff:g> हटाए जाते हैं."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"टेबलेट संग्रहण भर गया है. स्‍थान रिक्त करने के लिए कुछ फ़ाइलें हटाएं."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"घड़ी संग्रहण भर गया है. स्‍थान रिक्त करने के लिए कुछ फ़ाइलें हटाएं."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"फ़ोन संग्रहण भर गया है. स्‍थान रिक्त करने के लिए कुछ फ़ाइलें हटाएं."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"नेटवर्क को मॉनिटर किया जा सकता है"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"किसी अज्ञात तृतीय पक्ष के द्वारा"</string>
@@ -147,12 +175,13 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"रिंगर चालू"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"शट डाउन हो रहा है..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"आपकी टेबलेट शट डाउन हो जाएगी."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"आपकी घड़ी बंद हो जाएगी."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"आपका फ़ोन शट डाउन हो जाएगा."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"क्‍या आप शट डाउन करना चाहते हैं?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"सुरक्षित मोड में रीबूट करें"</string>
-    <string name="reboot_safemode_confirm" msgid="55293944502784668">"क्या आप सुरक्षित मोड में रीबूट करना चाहते हैं? इससे आपके इंस्टॉल किए हुए सभी तृतीय पक्ष एप्स अक्षम हो जाएंगे. जब आप फिर से रीबूट करेंगे तो वे पुनर्स्थापित हो जाएंगे."</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"क्या आप सुरक्षित मोड में रीबूट करना चाहते हैं? इससे आपके इंस्टॉल किए हुए सभी तृतीय पक्ष ऐप्स  अक्षम हो जाएंगे. जब आप फिर से रीबूट करेंगे तो वे पुनर्स्थापित हो जाएंगे."</string>
     <string name="recent_tasks_title" msgid="3691764623638127888">"हाल के"</string>
-    <string name="no_recent_tasks" msgid="8794906658732193473">"कोई हाल ही के एप्स नहीं."</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"कोई हाल ही के ऐप्स  नहीं."</string>
     <string name="global_actions" product="tablet" msgid="408477140088053665">"टेबलेट विकल्‍प"</string>
     <string name="global_actions" product="default" msgid="2406416831541615258">"फ़ोन विकल्‍प"</string>
     <string name="global_action_lock" msgid="2844945191792119712">"स्‍क्रीन लॉक"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"हवाई जहाज मोड"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"हवाई जहाज मोड चालू है"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"हवाई जहाज मोड बंद है"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"सेटिंग"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android सिस्‍टम"</string>
@@ -205,8 +235,8 @@
     <string name="permgroupdesc_camera" msgid="2933667372289567714">"चित्र या वीडियो कैप्‍चर के लिए कैमरे पर सीधी पहुंच."</string>
     <string name="permgrouplab_screenlock" msgid="8275500173330718168">"स्‍क्रीन लॉक करें"</string>
     <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"आपके उपकरण की लॉक स्क्रीन का व्यवहार प्रभावित करने की क्षमता."</string>
-    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"आपके एप्‍स की जानकारी"</string>
-    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"अपने उपकरण पर अन्‍य एप्‍स के व्‍यवहार को प्रभावित करने की क्षमता."</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"आपके ऐप्स की जानकारी"</string>
+    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"अपने उपकरण पर अन्‍य ऐप्स के व्‍यवहार को प्रभावित करने की क्षमता."</string>
     <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"वॉलपेपर"</string>
     <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"उपकरण की वॉलपेपर सेटिंग बदलें."</string>
     <string name="permgrouplab_systemClock" msgid="406535759236612992">"घड़ी"</string>
@@ -224,9 +254,9 @@
     <string name="permgrouplab_systemTools" msgid="4652191644082714048">"सिस्‍टम टूल"</string>
     <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"सिस्‍टम का निम्‍न-स्‍तर पहुंच और नियंत्रण."</string>
     <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"डेवलपमेंट टूल"</string>
-    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"सुविधाएं जो केवल एप्स डेवलपर के लिए आवश्यक हैं."</string>
-    <string name="permgrouplab_display" msgid="4279909676036402636">"अन्‍य एप्‍स UI"</string>
-    <string name="permgroupdesc_display" msgid="6051002031933013714">"अन्‍य एप्‍स के UI को प्रभावित करें."</string>
+    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"सुविधाएं जो केवल ऐप्स  डेवलपर के लिए आवश्यक हैं."</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"अन्‍य ऐप्स UI"</string>
+    <string name="permgroupdesc_display" msgid="6051002031933013714">"अन्‍य ऐप्स के UI को प्रभावित करें."</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"संग्रहण"</string>
     <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB संग्रहण में पहुंचें."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD कार्ड में पहुंचें."</string>
@@ -237,443 +267,472 @@
     <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"स्पर्श द्वारा एक्सप्लोर करें को चालू करें"</string>
     <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"स्पर्श किए गए आइटम ज़ोर से बोले जाएंगे और स्क्रीन को जेस्चर के उपयोग से एक्सप्लोर किया जा सकेगा."</string>
     <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"एन्हांस की गई वेब आसान तरीका चालू करें"</string>
-    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"एप्स सामग्री को अधिक पहुंच-योग्य बनाने के लिए स्क्रिप्ट इंस्टॉल किए जा सकते हैं."</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"ऐप्स  सामग्री को अधिक पहुंच-योग्य बनाने के लिए स्क्रिप्ट इंस्टॉल किए जा सकते हैं."</string>
     <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"आपके द्वारा लिखे हुए पाठ को ध्यान से देखें"</string>
     <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"क्रेडिट कार्ड नंबर और पासवर्ड जैसा व्यक्तिगत डेटा शामिल होता है."</string>
     <string name="permlab_statusBar" msgid="7417192629601890791">"स्‍थिति बार अक्षम या बदलें"</string>
-    <string name="permdesc_statusBar" msgid="8434669549504290975">"एप्स को स्थिति बार अक्षम करने या सिस्‍टम आइकन को जोड़ने या निकालने देता है."</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"ऐप्स  को स्थिति बार अक्षम करने या सिस्‍टम आइकन को जोड़ने या निकालने देता है."</string>
     <string name="permlab_statusBarService" msgid="7247281911387931485">"स्‍थिति बार"</string>
-    <string name="permdesc_statusBarService" msgid="716113660795976060">"एप्‍स को स्‍थिति बार होने देता है."</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"ऐप्स को स्‍थिति बार होने देता है."</string>
     <string name="permlab_expandStatusBar" msgid="1148198785937489264">"स्‍थिति बार विस्‍तृत/संक्षिप्त करें"</string>
-    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"एप्स को स्थिति बार को विस्तृत या संक्षिप्त करने देता है."</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"ऐप्स  को स्थिति बार को विस्तृत या संक्षिप्त करने देता है."</string>
     <string name="permlab_install_shortcut" msgid="4279070216371564234">"शॉर्टकट इंस्‍टॉल करें"</string>
     <string name="permdesc_install_shortcut" msgid="8341295916286736996">"एप्‍लिकेशन को उपयोगकर्ता के हस्‍तक्षेप के बिना होमस्‍क्रीन शॉर्टकट जोड़ने की अनुमति देता है."</string>
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"शॉर्टकट अनइंस्टॉल करें"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"एप्‍लिकेशन को उपयोगकर्ता के हस्‍तक्षेप के बिना होमस्‍क्रीन शॉर्टकट निकालने की अनुमति देता है."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"आउटगोइंग कॉल को कहीं और भेजें"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"एप्‍स को आउटगोइंग कॉल संसाधित करने और डायल किए जाने वाला नंबर बदलने देता है. यह अनुमति एप्‍स को आउटगोइंग कॉल की निगरानी करने, रीडायरेक्‍ट करने, या उन्‍हें रोकने देती है."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"ऐप्स को किसी कॉल को भिन्न नंबर पर रिडायरेक्ट करने या पूरी तरह से कॉल निरस्त करने के विकल्प के साथ आउटगोइंग कॉल के दौरान डायल किए जा रहे नंबर को देखने की अनुमति देती है."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"पाठ संदेश (SMS) प्राप्त करें"</string>
-    <string name="permdesc_receiveSms" msgid="6424387754228766939">"एप्स को SMS संदेशों को प्राप्‍त और संसाधित करने देता है. इसका अर्थ है कि एप्स आपके उपकरण पर भेजे गए संदेशों की निगरानी आपको दिखाए बिना कर सकता है और उन्‍हें हटा सकता है."</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"ऐप्स  को SMS संदेशों को प्राप्‍त और संसाधित करने देता है. इसका अर्थ है कि ऐप्स  आपके उपकरण पर भेजे गए संदेशों की निगरानी आपको दिखाए बिना कर सकता है और उन्‍हें हटा सकता है."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"पाठ संदेश (MMS) प्राप्त करें"</string>
-    <string name="permdesc_receiveMms" msgid="533019437263212260">"एप्स को MMS संदेशों को प्राप्‍त और संसाधित करने देता है. इसका अर्थ है कि एप्स आपके उपकरण पर भेजे गए संदेशों की निगरानी आपको दिखाए बिना कर सकता है और उन्‍हें हटा सकता है."</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"ऐप्स  को MMS संदेशों को प्राप्‍त और संसाधित करने देता है. इसका अर्थ है कि ऐप्स  आपके उपकरण पर भेजे गए संदेशों की निगरानी आपको दिखाए बिना कर सकता है और उन्‍हें हटा सकता है."</string>
     <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"आपातकालीन प्रसारण प्राप्त करें"</string>
-    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"एप्स को आपातकालीन प्रसारण संदेशों को प्राप्त करने और संसाधित करने देता है. यह अनुमति केवल सिस्टम एप्स में उपलब्ध है."</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"ऐप्स  को आपातकालीन प्रसारण संदेशों को प्राप्त करने और संसाधित करने देता है. यह अनुमति केवल सिस्टम ऐप्स  में उपलब्ध है."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारण संदेश पढ़ें"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"एप्‍स को आपके उपकरण द्वारा प्राप्त सेल प्रसारण संदेशों को पढ़ने देता है. कुछ स्‍थानों पर आपको आपातकालीन स्‍थितियों की चेतावनी देने के लिए सेल प्रसारण अलर्ट वितरित किए जाते हैं. आपातकालीन सेल प्रसारण प्राप्त होने पर दुर्भावनापूर्ण एप्‍स आपके उपकरण के निष्‍पादन या संचालन में हस्‍तक्षेप कर सकते हैं."</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ऐप्स को आपके उपकरण द्वारा प्राप्त सेल प्रसारण संदेशों को पढ़ने देता है. कुछ स्‍थानों पर आपको आपातकालीन स्‍थितियों की चेतावनी देने के लिए सेल प्रसारण अलर्ट वितरित किए जाते हैं. आपातकालीन सेल प्रसारण प्राप्त होने पर दुर्भावनापूर्ण ऐप्स आपके उपकरण के निष्‍पादन या संचालन में हस्‍तक्षेप कर सकते हैं."</string>
     <string name="permlab_sendSms" msgid="5600830612147671529">"SMS संदेश भेजें"</string>
-    <string name="permdesc_sendSms" msgid="7094729298204937667">"एप्स को SMS संदेशों को भेजने देता है. इसके परिणामस्वरूप अप्रत्‍याशित शुल्‍क लागू हो सकते हैं. दुर्भावनापूर्ण एप्स आपकी पुष्टि के बिना संदेश भेजकर आपका धन व्‍यय कर सकते हैं."</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"ऐप्स  को SMS संदेशों को भेजने देता है. इसके परिणामस्वरूप अप्रत्‍याशित शुल्‍क लागू हो सकते हैं. दुर्भावनापूर्ण ऐप्स  आपकी पुष्टि के बिना संदेश भेजकर आपका धन व्‍यय कर सकते हैं."</string>
     <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"संदेश-द्वारा-जवाब भेजें ईवेंट"</string>
-    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"इनकमिंग कॉल के संदेश-द्वारा-जवाब देने के ईवेंट प्रबंधित करने के लिए, एप्स को अन्य संदेश सेवा एप्स को अनुरोध भेजने देती है."</string>
+    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"इनकमिंग कॉल के संदेश-द्वारा-जवाब देने के ईवेंट प्रबंधित करने के लिए, ऐप्स  को अन्य संदेश सेवा ऐप्स  को अनुरोध भेजने देती है."</string>
     <string name="permlab_readSms" msgid="8745086572213270480">"अपने पाठ संदेश (SMS या MMS) पढ़ें"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"एप्स को आपके टेबलेट या SIM कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या गोपनीयता पर ध्यान दिए बिना, एप्स सभी SMS संदेश पढ़ सकता है."</string>
-    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"एप्स को आपके फ़ोन या SIM कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या गोपनीयता पर ध्यान दिए बिना, एप्स सभी SMS संदेश पढ़ सकता है."</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"ऐप्स  को आपके टेबलेट या SIM कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या गोपनीयता पर ध्यान दिए बिना, ऐप्स  सभी SMS संदेश पढ़ सकता है."</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"ऐप्स  को आपके फ़ोन या SIM कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या गोपनीयता पर ध्यान दिए बिना, ऐप्स  सभी SMS संदेश पढ़ सकता है."</string>
     <string name="permlab_writeSms" msgid="3216950472636214774">"अपने पाठ संदेश (SMS या MMS) संपादित करें"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"एप्स को आपके टेबलेट या सिम कार्ड में संग्रहीत SMS संदेशों में लिखने देता है. दुर्भावनापूर्ण एप्स आपके संदेशों को हटा सकते हैं."</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"एप्स को आपके फ़ोन या सिम कार्ड में संग्रहीत SMS संदेशों को लिखने देता है.  दुर्भावनापूर्ण एप्स आपके संदेशों को हटा सकते हैं."</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"ऐप्स  को आपके टेबलेट या सिम कार्ड में संग्रहीत SMS संदेशों में लिखने देता है. दुर्भावनापूर्ण ऐप्स  आपके संदेशों को हटा सकते हैं."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"ऐप्स  को आपके फ़ोन या सिम कार्ड में संग्रहीत SMS संदेशों को लिखने देता है.  दुर्भावनापूर्ण ऐप्स  आपके संदेशों को हटा सकते हैं."</string>
     <string name="permlab_receiveWapPush" msgid="5991398711936590410">"पाठ संदेश (WAP) प्राप्त करें"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"एप्स को WAP संदेशों को प्राप्‍त और संसाधित करने देता है. इस अनुमति में आपको भेजे गए संदेशों की निगरानी आपको दिखाए बिना करने और हटाने की क्षमता शामिल है."</string>
-    <string name="permlab_getTasks" msgid="6466095396623933906">"चल रहे एप्‍स पुनर्प्राप्त करें"</string>
-    <string name="permdesc_getTasks" msgid="7454215995847658102">"एप्स को वर्तमान में और हाल ही में चल रहे कार्यों के बारे में जानकारी को पुन: प्राप्‍त करने देता है. इससे एप्स उपकरण पर उपयोग किए गए एप्स के बारे में जानकारी खोज सकता है."</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"ऐप्स  को WAP संदेशों को प्राप्‍त और संसाधित करने देता है. इस अनुमति में आपको भेजे गए संदेशों की निगरानी आपको दिखाए बिना करने और हटाने की क्षमता शामिल है."</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"चल रहे ऐप्स पुनर्प्राप्त करें"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"ऐप्स  को वर्तमान में और हाल ही में चल रहे कार्यों के बारे में जानकारी को पुन: प्राप्‍त करने देता है. इससे ऐप्स  उपकरण पर उपयोग किए गए ऐप्स  के बारे में जानकारी खोज सकता है."</string>
     <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"उपयोगकर्ताओं के बीच सहभागिता करें"</string>
-    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"एप्स को उपकरण पर भिन्न उपयोगकर्ताओं के बीच कार्य निष्पादित करने देता है. दुर्भावनापूर्ण एप्स उपयोगकर्ताओं के बीच सुरक्षा का उल्लंघन करने के लिए इसका उपयोग कर सकते हैं."</string>
+    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"ऐप्स  को उपकरण पर भिन्न उपयोगकर्ताओं के बीच कार्य निष्पादित करने देता है. दुर्भावनापूर्ण ऐप्स  उपयोगकर्ताओं के बीच सुरक्षा का उल्लंघन करने के लिए इसका उपयोग कर सकते हैं."</string>
     <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"उपयोगकर्ताओं के बीच सहभागिता करने के लिए पूर्ण लाइसेंस"</string>
     <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"उपयोगकर्ताओं के बीच सभी संभव सहभागिता करने देता है."</string>
     <string name="permlab_manageUsers" msgid="1676150911672282428">"उपयोगकर्ता प्रबंधित करें"</string>
-    <string name="permdesc_manageUsers" msgid="8409306667645355638">"एप्स को उपकरण पर क्वेरी, निर्माण और हटाने सहित उपयोगकर्ताओं को प्रबंधित करने की सुविधा देता है."</string>
-    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"चल रहे एप्‍स के विवरण प्राप्त करें"</string>
-    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"एप्स को वर्तमान में और हाल ही में चल रहे कार्यों की जानकारी प्राप्त करने देता है. दुर्भावनापूर्ण एप्स अन्य एप्स के बारे में निजी जानकारी खोज सकते हैं."</string>
-    <string name="permlab_reorderTasks" msgid="2018575526934422779">"चल रहे एप्‍स पुन: क्रमित करें"</string>
-    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"एप्स को कार्यों को अग्रभूमि और पृष्‍ठभूमि पर ले जाने देता है. एप्स आपके इनपुट के बिना यह कर सकता है."</string>
-    <string name="permlab_removeTasks" msgid="6821513401870377403">"चलने वाले एप्स रोकें"</string>
-    <string name="permdesc_removeTasks" msgid="1394714352062635493">"किसी एप्‍स को कार्यों को निकालने और उनके एप्‍स समाप्त करने देता है. दुर्भावनापूर्ण एप्‍स अन्‍य एप्‍स का व्‍यवहार बाधित कर सकते हैं."</string>
+    <string name="permdesc_manageUsers" msgid="8409306667645355638">"ऐप्स  को उपकरण पर क्वेरी, निर्माण और हटाने सहित उपयोगकर्ताओं को प्रबंधित करने की सुविधा देता है."</string>
+    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"चल रहे ऐप्स के विवरण प्राप्त करें"</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"ऐप्स  को वर्तमान में और हाल ही में चल रहे कार्यों की जानकारी प्राप्त करने देता है. दुर्भावनापूर्ण ऐप्स  अन्य ऐप्स  के बारे में निजी जानकारी खोज सकते हैं."</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"चल रहे ऐप्स पुन: क्रमित करें"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"ऐप्स  को कार्यों को अग्रभूमि और पृष्‍ठभूमि पर ले जाने देता है. ऐप्स  आपके इनपुट के बिना यह कर सकता है."</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"चलने वाले ऐप्स  रोकें"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"किसी ऐप्स को कार्यों को निकालने और उनके ऐप्स समाप्त करने देता है. दुर्भावनापूर्ण ऐप्स अन्‍य ऐप्स का व्‍यवहार बाधित कर सकते हैं."</string>
     <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"गतिविधि स्टैक प्रबंधित करें"</string>
-    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"एप्स को ऐसे गतिविधि स्टैक जोड़ने, निकालने, और बदलने देता है जिनमें अन्य एप्स चलते हों. दुर्भावनापूर्ण एप्स अन्य एप्स के व्यवहार में बाधा डाल सकते हैं."</string>
+    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"ऐप्स  को ऐसे गतिविधि स्टैक जोड़ने, निकालने, और बदलने देता है जिनमें अन्य ऐप्स  चलते हों. दुर्भावनापूर्ण ऐप्स  अन्य ऐप्स  के व्यवहार में बाधा डाल सकते हैं."</string>
     <string name="permlab_startAnyActivity" msgid="2918768238045206456">"कोई गतिविधि प्रारंभ करें"</string>
-    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"अनुमति सुरक्षा या निर्यात की स्‍थिति पर ध्‍यान दिए बिना, एप्‍स को कोई गतिविधि प्रारंभ करने देता है."</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"अनुमति सुरक्षा या निर्यात की स्‍थिति पर ध्‍यान दिए बिना, ऐप्स को कोई गतिविधि प्रारंभ करने देता है."</string>
     <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"स्‍क्रीन संगतता सेट करें"</string>
-    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"एप्‍स को अन्‍य एप्‍स के स्‍क्रीन संगतता मोड को नियंत्रित करने देता है. दुर्भावनापूर्ण एप्‍स अन्‍य एप्‍स का व्‍यवहार बाधित कर सकते हैं."</string>
-    <string name="permlab_setDebugApp" msgid="3022107198686584052">"एप्‍स डीबग करना सक्षम करें"</string>
-    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"एप्स को अन्य एप्स के लिए डीबग किया जाना चालू करने देता है. दुर्भावनापूर्ण एप्स इसका उपयोग अन्य एप्स को समाप्त करने के लिए कर सकते हैं."</string>
+    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"ऐप्स को अन्‍य ऐप्स के स्‍क्रीन संगतता मोड को नियंत्रित करने देता है. दुर्भावनापूर्ण ऐप्स अन्‍य ऐप्स का व्‍यवहार बाधित कर सकते हैं."</string>
+    <string name="permlab_setDebugApp" msgid="3022107198686584052">"ऐप्स डीबग करना सक्षम करें"</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"ऐप्स  को अन्य ऐप्स  के लिए डीबग किया जाना चालू करने देता है. दुर्भावनापूर्ण ऐप्स  इसका उपयोग अन्य ऐप्स  को समाप्त करने के लिए कर सकते हैं."</string>
     <string name="permlab_changeConfiguration" msgid="4162092185124234480">"सिस्‍टम प्रदर्शन सेटिंग बदलें"</string>
-    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"एप्स को वर्तमान कॉन्फ़िगरेशन, जैसे स्थान या समग्र अक्षरों का आकार, बदलने देता है."</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"ऐप्स  को वर्तमान कॉन्फ़िगरेशन, जैसे स्थान या समग्र अक्षरों का आकार, बदलने देता है."</string>
     <string name="permlab_enableCarMode" msgid="5684504058192921098">"कार मोड सक्षम करें"</string>
-    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"एप्स को कार मोड सक्षम करने देता है."</string>
-    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"अन्‍य एप्‍स बंद करें"</string>
-    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"एप्स को अन्‍य एप्‍स की पृष्ठभूमि प्रक्रियाओं को समाप्त करने देता है. यह अन्य एप्स का चलना रोक सकता है."</string>
-    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"अन्‍य एप्‍स बलपूर्वक बंद करें"</string>
-    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"एप्स को अन्य एप्स बलपूर्वक बंद करने देता है."</string>
-    <string name="permlab_forceBack" msgid="652935204072584616">"एप्‍स को बलपूर्वक बंद करें"</string>
-    <string name="permdesc_forceBack" msgid="3892295830419513623">"एप्स को अग्रभूमि में चल रही कोई भी गतिविधि बलपूर्वक बंद करने और वापस जाने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"ऐप्स  को कार मोड सक्षम करने देता है."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"अन्‍य ऐप्स बंद करें"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"ऐप्स  को अन्‍य ऐप्स की पृष्ठभूमि प्रक्रियाओं को समाप्त करने देता है. यह अन्य ऐप्स  का चलना रोक सकता है."</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"अन्‍य ऐप्स बलपूर्वक बंद करें"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"ऐप्स  को अन्य ऐप्स  बलपूर्वक बंद करने देता है."</string>
+    <string name="permlab_forceBack" msgid="652935204072584616">"ऐप्स को बलपूर्वक बंद करें"</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"ऐप्स  को अग्रभूमि में चल रही कोई भी गतिविधि बलपूर्वक बंद करने और वापस जाने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_dump" msgid="1681799862438954752">"सिस्‍टम की आंतरिक स्‍थिति पुनर्प्राप्त करें"</string>
-    <string name="permdesc_dump" msgid="1778299088692290329">"एप्‍स को सिस्‍टम की आंतरिक स्‍थिति पुनर्प्राप्त करने देता है. दुर्भावनापूर्ण एप्‍स विभिन्‍न प्रकार की निजी और सुरक्षा जानकारी प्राप्त कर सकते हैं जिनकी उन्‍हें सामान्‍यत: आवश्‍यकता नहीं होती."</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"ऐप्स को सिस्‍टम की आंतरिक स्‍थिति पुनर्प्राप्त करने देता है. दुर्भावनापूर्ण ऐप्स विभिन्‍न प्रकार की निजी और सुरक्षा जानकारी प्राप्त कर सकते हैं जिनकी उन्‍हें सामान्‍यत: आवश्‍यकता नहीं होती."</string>
     <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"स्‍क्रीन सामग्री पुनर्प्राप्त करें"</string>
-    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"एप्‍स को सक्रिय विंडो की सामग्री पुनर्प्राप्त करने देता है. दुर्भावनापूर्ण एप्‍स विंडो की संपूर्ण सामग्री प्राप्त कर सकते हैं और पासवर्ड को छोड़कर इसके सभी पाठ जांच सकते हैं."</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"ऐप्स को सक्रिय विंडो की सामग्री पुनर्प्राप्त करने देता है. दुर्भावनापूर्ण ऐप्स विंडो की संपूर्ण सामग्री प्राप्त कर सकते हैं और पासवर्ड को छोड़कर इसके सभी पाठ जांच सकते हैं."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"आसान तरीका को अस्थायी रूप से सक्षम करें"</string>
-    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"एप्स को उपकरण पर आसान तरीका को अस्थायी रूप से सक्षम करने देता है. दुर्भावनापूर्ण एप्स उपयोगकर्ता की सहमति के बिना आसान तरीका को सक्षम कर सकते हैं."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"विंडो जानकारी प्राप्त करें"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"एप्‍स को विंडो प्रबंधक से windows के बारे में जानकारी प्राप्त करने देता है. दुर्भावनापूर्ण एप्‍स आंतरिक सिस्टम उपयोग के लिए अभिप्रेत जानकारी को प्राप्त कर सकते हैं."</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"ऐप्स  को उपकरण पर आसान तरीका को अस्थायी रूप से सक्षम करने देता है. दुर्भावनापूर्ण ऐप्स  उपयोगकर्ता की सहमति के बिना आसान तरीका को सक्षम कर सकते हैं."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"विंडो टोकन प्राप्त करें"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"एप्लिकेशन को विंडो टोकन प्राप्त करने देती है. दुर्भावनापूर्ण ऐप्स सिस्टम का प्रतिरूपण करने वाली एप्लिकेशन विंडो से अनधिकृत इंटरैक्शन कर सकते हैं."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"फ़्रेम के आंकड़े प्राप्त करें"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"एप्लिकेशन को फ़्रेम के आंकड़े एकत्र करने देती है. दुर्भावनापूर्ण ऐप्स अन्य ऐप्स से विंडो के फ़्रेम के आंकड़ों को देख सकते हैं."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"ईवेंट फ़िल्टर करें"</string>
-    <string name="permdesc_filter_events" msgid="8006236315888347680">"एप्‍स को इनपुट फ़िल्‍टर पंजीकृत करने देता है, जो सभी उपयोगकर्ता ईवेंट के स्‍ट्रीम को भेजे जाने से पहले फ़िल्‍टर करता है. दुर्भावनापूर्ण एप्‍स उपयोगकर्ता के हस्‍तक्षेप के बिना सिस्‍टम UI को नियंत्रित कर सकता है."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"डिस्प्ले को आवर्धित करें"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"एप्स को डिस्प्ले की सामग्री आवर्धित करने देता है. दुर्भावनापूर्ण एप्स डिस्प्ले सामग्री को इस तरह से बदल सकते हैं कि उपकरण अनुपयोगी रेंडर होता है."</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"ऐप्स को इनपुट फ़िल्‍टर पंजीकृत करने देता है, जो सभी उपयोगकर्ता ईवेंट के स्‍ट्रीम को भेजे जाने से पहले फ़िल्‍टर करता है. दुर्भावनापूर्ण ऐप्स उपयोगकर्ता के हस्‍तक्षेप के बिना सिस्‍टम UI को नियंत्रित कर सकता है."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"आंशिक शटडाउन"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"गतिविधि प्रबंधक को शटडाउन स्‍थिति में रखता है. पूर्ण शटडाउन निष्‍पादित नहीं करता है."</string>
-    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"एप्‍स स्‍विच करने से रोकता है"</string>
-    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"उपयोगकर्ता को दूसरे एप्‍स पर स्‍विच करने से रोकता है."</string>
-    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"वर्तमान एप्स की जानकारी प्राप्त करें"</string>
-    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"धारक को स्क्रीन के अग्रभाग में स्थित वर्तमान एप्स के बारे में निजी जानकारी प्राप्त करने देती है."</string>
-    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"सभी एप्‍स की लॉन्‍चिंग की निगरानी करें और उसे नियंत्रित करें"</string>
-    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"एप्स को यह निगरानी और नियंत्रित करने देता है कि सिस्टम कैसे गतिविधियां लॉन्च करता है. दुर्भावनापूर्ण एप्स सिस्टम को पूरी तरह से जोखिम में डाल सकते हैं. इस अनुमति की आवश्यकता केवल विकास के लिए है, सामान्य उपयोग के लिए कभी नहीं."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ऐप्स स्‍विच करने से रोकता है"</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"उपयोगकर्ता को दूसरे ऐप्स पर स्‍विच करने से रोकता है."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"वर्तमान ऐप्स  की जानकारी प्राप्त करें"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"धारक को स्क्रीन के अग्रभाग में स्थित वर्तमान ऐप्स  के बारे में निजी जानकारी प्राप्त करने देती है."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"सभी ऐप्स की लॉन्‍चिंग की निगरानी करें और उसे नियंत्रित करें"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"ऐप्स  को यह निगरानी और नियंत्रित करने देता है कि सिस्टम कैसे गतिविधियां लॉन्च करता है. दुर्भावनापूर्ण ऐप्स  सिस्टम को पूरी तरह से जोखिम में डाल सकते हैं. इस अनुमति की आवश्यकता केवल विकास के लिए है, सामान्य उपयोग के लिए कभी नहीं."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"पैकेज निकाले गए प्रसारण भेजें"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"एप्स को कोई ऐसी सूचना प्रसारित करने देता है जिसे किसी एप्स पैकेज ने निकाल दिया गया हो. दुर्भावनापूर्ण एप्स इसका उपयोग चल रहे अन्य एप्स को समाप्त करने के लिए कर सकते हैं."</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"ऐप्स  को कोई ऐसी सूचना प्रसारित करने देता है जिसे किसी ऐप्स  पैकेज ने निकाल दिया गया हो. दुर्भावनापूर्ण ऐप्स  इसका उपयोग चल रहे अन्य ऐप्स  को समाप्त करने के लिए कर सकते हैं."</string>
     <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS-प्राप्त प्रसार भेजें"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"एप्स को वह सूचना प्रसारित करने देता है जो SMS संदेश ने प्राप्त की है. दुर्भावनापूर्ण एप्स इसका उपयोग नकली इनकमिंग संदेश गढ़ने के लिए कर सकते हैं."</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"ऐप्स  को वह सूचना प्रसारित करने देता है जो SMS संदेश ने प्राप्त की है. दुर्भावनापूर्ण ऐप्स  इसका उपयोग नकली इनकमिंग संदेश गढ़ने के लिए कर सकते हैं."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-प्राप्त प्रसारण भेजें"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"एप्स को वह सूचना प्रसारित करने देता है जो WAP PUSH संदेश को प्राप्त हुआ है. दुर्भावनापूर्ण एप्स इसका उपयोग नकली MMS संदेश प्राप्त करने या किसी वेबपृष्ठ की सामग्री को दुर्भावनापूर्ण दूसरे रूप से चुपचाप प्रतिस्थापित करने के लिए कर सकते हैं."</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"ऐप्स  को वह सूचना प्रसारित करने देता है जो WAP PUSH संदेश को प्राप्त हुआ है. दुर्भावनापूर्ण ऐप्स  इसका उपयोग नकली MMS संदेश प्राप्त करने या किसी वेबपृष्ठ की सामग्री को दुर्भावनापूर्ण दूसरे रूप से चुपचाप प्रतिस्थापित करने के लिए कर सकते हैं."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"स्कोर नेटवर्क प्रसारण भेजें"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"ऐप्स को यह सूचना प्रसारित करने देती है कि नेटवर्क को स्कोर किए जाने की आवश्यकता है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"चल रही प्रक्रियाओं की संख्‍या सीमित करें"</string>
-    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"एप्स को चलाई जाने वाली अधिकतम प्रक्रियाओं को नियंत्रित करने देता है. सामान्य एप्स के लिए कभी आवश्यक नहीं होती."</string>
-    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"पृष्ठभूमि एप्‍स को बलपूर्वक बंद करें"</string>
-    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"एप्स को यह नियंत्रित करने देता है कि पृष्ठभूमि में जाते ही गतिविधियां पूर्ण हो जाती है या नही. सामान्य एप्स के लिए कभी आवश्यकता नहीं होती."</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"ऐप्स  को चलाई जाने वाली अधिकतम प्रक्रियाओं को नियंत्रित करने देता है. सामान्य ऐप्स  के लिए कभी आवश्यक नहीं होती."</string>
+    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"पृष्ठभूमि ऐप्स को बलपूर्वक बंद करें"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"ऐप्स  को यह नियंत्रित करने देता है कि पृष्ठभूमि में जाते ही गतिविधियां पूर्ण हो जाती है या नही. सामान्य ऐप्स  के लिए कभी आवश्यकता नहीं होती."</string>
     <string name="permlab_batteryStats" msgid="2789610673514103364">"बैटरी के आंकड़े पढ़ें"</string>
-    <string name="permdesc_batteryStats" msgid="5897346582882915114">"एप्स को वर्तमान निम्न-स्तरीय बैटरी उपयोग डेटा पढ़ने देती है. एप्स को आपके द्वारा उपयोग किए जाने वाले एप्स के बारे में विस्तृत जानकारी ढूंढने दे सकती है."</string>
+    <string name="permdesc_batteryStats" msgid="5897346582882915114">"ऐप्स  को वर्तमान निम्न-स्तरीय बैटरी उपयोग डेटा पढ़ने देती है. ऐप्स  को आपके द्वारा उपयोग किए जाने वाले ऐप्स  के बारे में विस्तृत जानकारी ढूंढने दे सकती है."</string>
     <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"बैटरी के आंकड़े संशोधित करें"</string>
-    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"एप्‍स को बैटरी के संकलित आंकड़ों को संशोधित करने देती है. सामान्‍य एप्‍स के द्वारा उपयोग करने के लिए नहीं."</string>
-    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"एप्स संचालन आंकड़े प्राप्त करें"</string>
-    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"एप्स को संकलित एप्स संचालन आंकड़े प्राप्त करने देता है. सामान्य एप्स के द्वारा उपयोग के लिए नहीं."</string>
-    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"एप्स कार्यवाही के आंकड़े बदलें"</string>
-    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"एप्स को एप्स कार्यवाही के एकत्रित आंकड़े बदलने देता है. सामान्य एप्स के द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"ऐप्स को बैटरी के संकलित आंकड़ों को संशोधित करने देती है. सामान्‍य ऐप्स के द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"ऐप्स  संचालन आंकड़े प्राप्त करें"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"ऐप्स  को संकलित ऐप्स  संचालन आंकड़े प्राप्त करने देता है. सामान्य ऐप्स  के द्वारा उपयोग के लिए नहीं."</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"ऐप्स  कार्यवाही के आंकड़े बदलें"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"ऐप्स  को ऐप्स  कार्यवाही के एकत्रित आंकड़े बदलने देता है. सामान्य ऐप्स  के द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_backup" msgid="470013022865453920">"सिस्‍टम सुरक्षा नियंत्रित और पुनर्स्‍थापित करें"</string>
-    <string name="permdesc_backup" msgid="6912230525140589891">"एप्स को सिस्टम के बैकअप को नियंत्रित और क्रियाविधि को पुर्नस्थापित करने देता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"ऐप्स  को सिस्टम के बैकअप को नियंत्रित और क्रियाविधि को पुर्नस्थापित करने देता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"पूर्ण सुरक्षा या पुनर्स्‍थापना कार्यवाही की पुष्टि करें"</string>
-    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"एप्‍स को पूर्ण बैकअप पुष्टिकरण UI लॉन्‍च करने देता है. किसी एप्‍स द्वारा उपयोग के लिए नहीं."</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"ऐप्स को पूर्ण बैकअप पुष्टिकरण UI लॉन्‍च करने देता है. किसी ऐप्स द्वारा उपयोग के लिए नहीं."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"अनधिकृत विंडो दिखाएं"</string>
-    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"किसी एप्‍स को ऐसी विंडो बनाने देता है जिनका उपयोग आंतरिक सिस्‍टम उपयोगकर्ता इंटरफ़ेस द्वारा किया जाना है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
-    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"अन्‍य एप्‍स पर खींचें"</string>
-    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"एप्स को अन्य एप्स के शीर्ष पर या उपयोगकर्ता इंटरफ़ेस के हिस्सों पर आने देती है. वे किसी भी एप्स में इंटरफ़ेस के आपके उपयोग में हस्तक्षेप कर सकते हैं, या उस चीज को बदल सकती है जिसके बारे में आपको लगता है कि आप उसे अन्य एप्स में देख रहे हैं."</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"किसी ऐप्स को ऐसी विंडो बनाने देता है जिनका उपयोग आंतरिक सिस्‍टम उपयोगकर्ता इंटरफ़ेस द्वारा किया जाना है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"अन्‍य ऐप्स पर खींचें"</string>
+    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"ऐप्स  को अन्य ऐप्स  के शीर्ष पर या उपयोगकर्ता इंटरफ़ेस के हिस्सों पर आने देती है. वे किसी भी ऐप्स  में इंटरफ़ेस के आपके उपयोग में हस्तक्षेप कर सकते हैं, या उस चीज को बदल सकती है जिसके बारे में आपको लगता है कि आप उसे अन्य ऐप्स  में देख रहे हैं."</string>
     <string name="permlab_setAnimationScale" msgid="2805103241153907174">"वैश्विक एनिमेशन गति बदलें"</string>
-    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"एप्‍स को किसी भी समय वैश्विक एनिमेशन गति (तेज़ या धीमे एनिमेशन) बदलने देता है."</string>
-    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"एप्‍स टोकन प्रबंधित करें"</string>
-    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"एप्स को उनके सामान्य Z-क्रमों पर न पहुंचते हुए उनके स्वयं के टोकन बनाने और प्रबंधित करने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"ऐप्स को किसी भी समय वैश्विक एनिमेशन गति (तेज़ या धीमे एनिमेशन) बदलने देता है."</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"ऐप्स टोकन प्रबंधित करें"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"ऐप्स  को उनके सामान्य Z-क्रमों पर न पहुंचते हुए उनके स्वयं के टोकन बनाने और प्रबंधित करने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_freezeScreen" msgid="4708181184441880175">"स्क्रीन को स्थिर करें"</string>
-    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"पूर्ण-स्क्रीन संक्रमण के लिए एप्स को अस्थायी रूप से स्क्रीन को स्थिर करने देता है."</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"पूर्ण-स्क्रीन संक्रमण के लिए ऐप्स  को अस्थायी रूप से स्क्रीन को स्थिर करने देता है."</string>
     <string name="permlab_injectEvents" msgid="1378746584023586600">"कुंजियों और नियंत्रण बटन को दबाएं"</string>
-    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"एप्‍स को स्‍वयं के इनपुट ईवेंट (कुंजी दबाना, आदि) को अन्‍य एप्‍स को वितरित करने देता है. दुर्भावनापूर्ण एप्‍स टेबलेट को टेक ओवर करने में इसका उपयोग कर सकते हैं."</string>
-    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"एप्‍स को स्‍वयं के इनपुट ईवेंट (कुंजी दबाना, आदि) अन्‍य एप्‍स को वितरित करने देता है. दुर्भावनापूर्ण एप्‍स इसका उपयोग फ़ोन को टेक ओवर करने में कर सकते हैं."</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"ऐप्स को स्‍वयं के इनपुट ईवेंट (कुंजी दबाना, आदि) को अन्‍य ऐप्स को वितरित करने देता है. दुर्भावनापूर्ण ऐप्स टेबलेट को टेक ओवर करने में इसका उपयोग कर सकते हैं."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"ऐप्स को स्‍वयं के इनपुट ईवेंट (कुंजी दबाना, आदि) अन्‍य ऐप्स को वितरित करने देता है. दुर्भावनापूर्ण ऐप्स इसका उपयोग फ़ोन को टेक ओवर करने में कर सकते हैं."</string>
     <string name="permlab_readInputState" msgid="469428900041249234">"आप जो भी लिखते हैं और जो कार्यवाहियां करते हैं उन्‍हें रिकॉर्ड करें"</string>
-    <string name="permdesc_readInputState" msgid="8387754901688728043">"एप्स को अन्य एप्स के साथ सहभागिता करते समय भी आपके द्वारा दबाई जाने वाली कुंजियां देखने देता है (जैसे कोई पासवर्ड लिखना). सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"ऐप्स  को अन्य ऐप्स  के साथ सहभागिता करते समय भी आपके द्वारा दबाई जाने वाली कुंजियां देखने देता है (जैसे कोई पासवर्ड लिखना). सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindInputMethod" msgid="3360064620230515776">"किसी इनपुट विधि से आबद्ध करें"</string>
-    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"धारक को किसी इनपुट विधि के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"धारक को किसी इनपुट विधि के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"आसान तरीका सेवा से आबद्ध करें"</string>
-    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"धारक को किसी आसान तरीका सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"धारक को किसी आसान तरीका सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindPrintService" msgid="8462815179572748761">"प्रिंट सेवा से आबद्ध करें"</string>
-    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"धारक को किसी प्रिंट सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"धारक को किसी प्रिंट सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"प्रिंट स्पूलर सेवा से आबद्ध करें"</string>
-    <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"धारक को प्रिंट स्पूलर सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"धारक को प्रिंट स्पूलर सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC सेवा से आबद्ध रहें"</string>
-    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"धारक को ऐसे एप्स से आबद्ध रहने देता है जो NFC कार्ड का अनुकरण कर रहे हैं. सामान्य एप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"धारक को ऐसे ऐप्स  से आबद्ध रहने देता है जो NFC कार्ड का अनुकरण कर रहे हैं. सामान्य ऐप्स  के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
     <string name="permlab_bindTextService" msgid="7358378401915287938">"किसी पाठ सेवा पर बने रहें"</string>
-    <string name="permdesc_bindTextService" msgid="8151968910973998670">"धारक को किसी पाठ सेवा (उदा. SpellCheckerService) के शीर्ष-स्‍तर इंटरफ़ेस पर आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"धारक को किसी पाठ सेवा (उदा. SpellCheckerService) के शीर्ष-स्‍तर इंटरफ़ेस पर आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindVpnService" msgid="4708596021161473255">"किसी VPN सेवा से आबद्ध करें"</string>
-    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"धारक को किसी Vpn सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"धारक को किसी Vpn सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"वॉलपेपर से आबद्ध करें"</string>
-    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"धारक को किसी वॉलपेपर के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"धारक को किसी वॉलपेपर के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"किसी ध्वनि सहभागिताकर्ता से आबद्ध हों"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"धारक को किसी ध्वनि सहभागिता सेवा के शीर्ष-स्तर के इंटरफ़ेस से आबद्ध होने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"रिमोट डिस्प्ले से आबद्ध करें"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"धारक को किसी रिमोट डिस्प्ले के शीर्ष-स्‍तरीय इंटरफ़ेस से आबद्ध होने देती है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"किसी विजेट सेवा से आबद्ध करें"</string>
-    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"धारक को किसी विजेट सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"धारक को किसी विजेट सेवा के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"किसी रूट प्रदाता सेवा से आबद्ध हों"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"धारक को किसी भी पंजीकृत रूट प्रदाता से आबद्ध रहने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"किसी उपकरण व्‍यवस्‍थापक के साथ सहभागिता करें"</string>
-    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"धारक को किसी उपकरण व्‍यवस्‍थापक को उद्देश्य भेजने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"धारक को किसी उपकरण व्‍यवस्‍थापक को उद्देश्य भेजने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"टीवी इनपुट से आबद्ध करें"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"धारक को किसी टीवी इनपुट के शीर्ष-स्‍तर इंटरफ़ेस से आबद्ध होने देती है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"उपकरण उपकरण सुचारू ढ़ंग से चलाने वाले को जोड़ें या निकालें"</string>
-    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"धारक को सक्रिय डिवाइस व्यवस्थापकों को जोड़ने या निकालने देता है. सामान्य एप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"धारक को सक्रिय डिवाइस व्यवस्थापकों को जोड़ने या निकालने देता है. सामान्य ऐप्स  के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"स्‍क्रीन अभिविन्‍यास बदलें"</string>
-    <string name="permdesc_setOrientation" msgid="3046126619316671476">"एप्‍स को किसी भी समय स्‍क्रीन का रोटेशन बदलने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"ऐप्स को किसी भी समय स्‍क्रीन का रोटेशन बदलने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"सूचक गति बदलें"</string>
-    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"एप्स को माउस या ट्रैकपैड सूचक गति को किसी भी समय बदलने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"ऐप्स  को माउस या ट्रैकपैड सूचक गति को किसी भी समय बदलने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"कीबोर्ड लेआउट बदलें"</string>
-    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"एप्‍स को कीबोर्ड लेआउट बदलने देता है. सामान्‍य एप्‍स के लिए कभी आवश्‍यक नहीं है."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"एप्स को Linux सिग्नल भेजें"</string>
-    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"एप्‍स को यह अनुरोध करने देता है कि दिया गया सिग्नल सभी जारी प्रक्रियाओं को भेजा जाए."</string>
-    <string name="permlab_persistentActivity" msgid="8841113627955563938">"एप्‍स को हमेशा चलने वाला बनाएं"</string>
-    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"एप्‍स को स्मृति में स्‍वयं के कुछ हिस्सों को लगातार बनाने की अनुमति देता है. यह अन्‍य एप्स के लिए उपलब्‍ध स्‍मृति को सीमित कर टेबलेट को धीमा कर सकता है."</string>
-    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"एप्‍स को स्मृति में स्‍वयं के कुछ हिस्सों को लगातार बनाने देता है. यह अन्‍य एप्स के लिए उपलब्‍ध स्‍मृति को सीमित कर फ़ोन को धीमा कर सकता है."</string>
-    <string name="permlab_deletePackages" msgid="184385129537705938">"एप्‍स हटाएं"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"एप्स को Android पैकेज हटाने देता है. दुर्भावनापूर्ण एप्स इसका उपयोग महत्वपूर्ण एप्स हटाने के लिए कर सकते हैं."</string>
-    <string name="permlab_clearAppUserData" msgid="274109191845842756">"अन्‍य एप्‍स का डेटा हटाएं"</string>
-    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"एप्स को उपयोगकर्ता डेटा साफ़ करने देता है."</string>
-    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"अन्‍य एप्‍स के संचय हटाएं"</string>
-    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"एप्स को संचय फ़ाइलें हटाने देता है."</string>
-    <string name="permlab_getPackageSize" msgid="7472921768357981986">"एप्स संग्रहण स्थान मापें"</string>
-    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"एप्स को उसका कोड, डेटा, और संचय आकारों को प्राप्त करने देता है"</string>
-    <string name="permlab_installPackages" msgid="2199128482820306924">"सीधे एप्‍स इंस्‍टॉल करें"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"एप को नए या नई जानकारी वाले Android पैकेज इंस्टॉल करने देता है. दुर्भावनापूर्ण एप्स इसका उपयोग अनियंत्रित रूप से सशक्त अनुमतियों वाले नए एप्स जोड़ने में कर सकते हैं."</string>
-    <string name="permlab_clearAppCache" msgid="7487279391723526815">"सभी एप्स संचय डेटा हटाएं"</string>
-    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"एप्स को अन्य एप्स की संचय निर्देशिकाओं में से फ़ाइलें हटाकर टेबलेट संग्रहण को खाली करने देती है. इससे अन्य एप्स अधिक धीमे प्रारंभ हो सकते हैं क्योंकि उन्हें अपना डेटा पुनर्प्राप्त करने की आवश्यकता होती है."</string>
-    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"एप्स को अन्य एप्स की संचय निर्देशिकाओं में से फ़ाइलें हटाकर फ़ोन संग्रहण को खाली करने देती है. इससे अन्य एप्स अधिक धीमे प्रारंभ हो सकते हैं क्योंकि उन्हें अपना डेटा पुनर्प्राप्त करने की आवश्यकता होती है."</string>
-    <string name="permlab_movePackage" msgid="3289890271645921411">"एप्‍स संसाधनों को ले जाएं"</string>
-    <string name="permdesc_movePackage" msgid="319562217778244524">"एप्‍स को एप्‍स संसाधनों को आंतरिक से बाहरी मीडिया में और इसके विपरीत ले जाने देता है."</string>
+    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"ऐप्स को कीबोर्ड लेआउट बदलने देता है. सामान्‍य ऐप्स के लिए कभी आवश्‍यक नहीं है."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"ऐप्स  को Linux सिग्नल भेजें"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"ऐप्स को यह अनुरोध करने देता है कि दिया गया सिग्नल सभी जारी प्रक्रियाओं को भेजा जाए."</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"ऐप्स को हमेशा चलने वाला बनाएं"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"ऐप्स को स्मृति में स्‍वयं के कुछ हिस्सों को लगातार बनाने की अनुमति देता है. यह अन्‍य ऐप्स  के लिए उपलब्‍ध स्‍मृति को सीमित कर टेबलेट को धीमा कर सकता है."</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"ऐप्स को स्मृति में स्‍वयं के कुछ हिस्सों को लगातार बनाने देता है. यह अन्‍य ऐप्स  के लिए उपलब्‍ध स्‍मृति को सीमित कर फ़ोन को धीमा कर सकता है."</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"ऐप्स हटाएं"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"ऐप्स  को Android पैकेज हटाने देता है. दुर्भावनापूर्ण ऐप्स  इसका उपयोग महत्वपूर्ण ऐप्स  हटाने के लिए कर सकते हैं."</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"अन्‍य ऐप्स का डेटा हटाएं"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"ऐप्स  को उपयोगकर्ता डेटा साफ़ करने देता है."</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"अन्‍य ऐप्स के संचय हटाएं"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"ऐप्स  को संचय फ़ाइलें हटाने देता है."</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"ऐप्स  संग्रहण स्थान मापें"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"ऐप्स  को उसका कोड, डेटा, और संचय आकारों को प्राप्त करने देता है"</string>
+    <string name="permlab_installPackages" msgid="2199128482820306924">"सीधे ऐप्स इंस्‍टॉल करें"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"एप को नए या नई जानकारी वाले Android पैकेज इंस्टॉल करने देता है. दुर्भावनापूर्ण ऐप्स  इसका उपयोग अनियंत्रित रूप से सशक्त अनुमतियों वाले नए ऐप्स  जोड़ने में कर सकते हैं."</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"सभी ऐप्स  संचय डेटा हटाएं"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"ऐप्स  को अन्य ऐप्स  की संचय निर्देशिकाओं में से फ़ाइलें हटाकर टेबलेट संग्रहण को खाली करने देती है. इससे अन्य ऐप्स  अधिक धीमे प्रारंभ हो सकते हैं क्योंकि उन्हें अपना डेटा पुनर्प्राप्त करने की आवश्यकता होती है."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"ऐप्स  को अन्य ऐप्स  की संचय निर्देशिकाओं में से फ़ाइलें हटाकर फ़ोन संग्रहण को खाली करने देती है. इससे अन्य ऐप्स  अधिक धीमे प्रारंभ हो सकते हैं क्योंकि उन्हें अपना डेटा पुनर्प्राप्त करने की आवश्यकता होती है."</string>
+    <string name="permlab_movePackage" msgid="3289890271645921411">"ऐप्स संसाधनों को ले जाएं"</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"ऐप्स को ऐप्स संसाधनों को आंतरिक से बाहरी मीडिया में और इसके विपरीत ले जाने देता है."</string>
     <string name="permlab_readLogs" msgid="6615778543198967614">"संवेदनशील लॉग डेटा पढ़ें"</string>
-    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"किसी एप्‍स को सिस्‍टम की विभिन्‍न लॉग फ़ाइलों से पढ़ने देता है. संभावित रूप से व्यक्तिगत या निजी जानकारी शामिल करते हुए, टेबलेट के साथ आप क्‍या कर रहे हैं इस बारे में सामान्‍य जानकारी खोजने देता है."</string>
-    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"एप्‍स को सिस्‍टम की विभिन्‍न लॉग फ़ाइलें पढ़ने देता है. संभावित रूप से व्यक्तिगत या निजी जानकारी सहित, यह इसे इस बारे में सामान्य जानकारी खोजने देता है कि आप फ़ोन से क्‍या कर रहे हैं."</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"किसी ऐप्स को सिस्‍टम की विभिन्‍न लॉग फ़ाइलों से पढ़ने देता है. संभावित रूप से व्यक्तिगत या निजी जानकारी शामिल करते हुए, टेबलेट के साथ आप क्‍या कर रहे हैं इस बारे में सामान्‍य जानकारी खोजने देता है."</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"ऐप्स को सिस्‍टम की विभिन्‍न लॉग फ़ाइलें पढ़ने देता है. संभावित रूप से व्यक्तिगत या निजी जानकारी सहित, यह इसे इस बारे में सामान्य जानकारी खोजने देता है कि आप फ़ोन से क्‍या कर रहे हैं."</string>
     <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"प्लेबैक के लिए किसी भी मीडिया डीकोडर का उपयोग करें"</string>
-    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"एप्स को प्लेबैक डीकोड करने के लिए किसी भी इंस्टॉल किए गए डीकोडर का उपयोग करने देता है."</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"ऐप्स  को प्लेबैक डीकोड करने के लिए किसी भी इंस्टॉल किए गए डीकोडर का उपयोग करने देता है."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"विश्वसनीय क्रेडेंशियल प्रबंधित करें"</string>
-    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"एप्स को CA प्रमाणपत्रों को विश्वसनीय क्रेडेंशियल के रूप में इंस्टॉल और अनइंस्टॉल करने दें"</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"ऐप्स  को CA प्रमाणपत्रों को विश्वसनीय क्रेडेंशियल के रूप में इंस्टॉल और अनइंस्टॉल करने दें"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"निष्क्रिय समय के दौरान एप्लिकेशन चलाएं"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"यह अनुमति Android सिस्टम को उपकरण के उपयोग में नहीं रहने पर एप्लिकेशन को पृष्ठभूमि में चलाने देती है."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"निदान के स्‍वामित्‍व वाले संसाधनों को पढ़ें/लिखें"</string>
-    <string name="permdesc_diagnostic" msgid="6608295692002452283">"एप्‍स को diag समूह के स्‍वामित्‍व वाले किसी संसाधन को पढ़ने और उसमें लिखने देता है; उदाहरण के लिए, /dev की फ़ाइलें. यह सिस्‍टम की स्‍थिरता और सुरक्षा को संभावित रूप से प्रभावित कर सकता है. इसका उपयोग निर्माता या ऑपरेटर द्वारा केवल हार्डवेयर-विशिष्ट निदान के लिए किया जाना चाहिए."</string>
-    <string name="permlab_changeComponentState" msgid="6335576775711095931">"एप्‍स घटकों को सक्षम या अक्षम करें"</string>
-    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"एप्‍स को यह बदलने देता है कि किसी अन्‍य एप्‍स का घटक सक्षम है या नहीं. दुर्भावनापूर्ण एप्‍स महत्‍वपूर्ण फ़ोन क्षमताओं को अक्षम करने में इसका उपयोग कर सकते हैं. इस अनुमति का उपयोग सावधानी के साथ करना चाहिए, क्योंकि इससे एप्‍स घटकों के अनुपयोगी, असंगत, या अस्‍थिर स्‍थिति में जाने की संभावना है."</string>
-    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"एप्‍स को यह बदलने देता है कि किसी अन्‍य एप्‍स का घटक सक्षम है या नहीं. दुर्भावनापूर्ण एप्‍स महत्‍वपूर्ण फ़ोन क्षमताओं को अक्षम करने में इसका उपयोग कर सकते हैं. इस अनुमति का उपयोग सावधानी के साथ करना चाहिए, क्योंकि इससे एप्‍स घटकों के अनुपयोगी, असंगत, या अस्‍थिर स्‍थिति में जाने की संभावना है."</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"ऐप्स को diag समूह के स्‍वामित्‍व वाले किसी संसाधन को पढ़ने और उसमें लिखने देता है; उदाहरण के लिए, /dev की फ़ाइलें. यह सिस्‍टम की स्‍थिरता और सुरक्षा को संभावित रूप से प्रभावित कर सकता है. इसका उपयोग निर्माता या ऑपरेटर द्वारा केवल हार्डवेयर-विशिष्ट निदान के लिए किया जाना चाहिए."</string>
+    <string name="permlab_changeComponentState" msgid="6335576775711095931">"ऐप्स घटकों को सक्षम या अक्षम करें"</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"ऐप्स को यह बदलने देता है कि किसी अन्‍य ऐप्स का घटक सक्षम है या नहीं. दुर्भावनापूर्ण ऐप्स महत्‍वपूर्ण फ़ोन क्षमताओं को अक्षम करने में इसका उपयोग कर सकते हैं. इस अनुमति का उपयोग सावधानी के साथ करना चाहिए, क्योंकि इससे ऐप्स घटकों के अनुपयोगी, असंगत, या अस्‍थिर स्‍थिति में जाने की संभावना है."</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"ऐप्स को यह बदलने देता है कि किसी अन्‍य ऐप्स का घटक सक्षम है या नहीं. दुर्भावनापूर्ण ऐप्स महत्‍वपूर्ण फ़ोन क्षमताओं को अक्षम करने में इसका उपयोग कर सकते हैं. इस अनुमति का उपयोग सावधानी के साथ करना चाहिए, क्योंकि इससे ऐप्स घटकों के अनुपयोगी, असंगत, या अस्‍थिर स्‍थिति में जाने की संभावना है."</string>
     <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"अनुमति दें या रद्द करें"</string>
-    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"एप्स को उसके या अन्य एप्स के लिए विशेष अनुमतियां देने या रद्द करने देता है. दुर्भावनापूर्ण एप्स इसका उपयोग उन सुविधाओं तक पहुंचने के लिए कर सकते हैं जो आपने उन्हें नहीं दी हैं."</string>
-    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"पसंदीदा एप्‍स सेट करें"</string>
-    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"एप्स को आपके पसंदीदा एप्स को संशोधित करने देता है. दुर्भावनापूर्ण एप्स आपसे निजी डेटा एकत्रित करने के लिए आपके मौजूदा एप्स को स्पूफ़ करके, चलाए जाने वाले एप्स को चुपचाप बदल सकते हैं."</string>
+    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"ऐप्स  को उसके या अन्य ऐप्स  के लिए विशेष अनुमतियां देने या रद्द करने देता है. दुर्भावनापूर्ण ऐप्स  इसका उपयोग उन सुविधाओं तक पहुंचने के लिए कर सकते हैं जो आपने उन्हें नहीं दी हैं."</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"पसंदीदा ऐप्स सेट करें"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"ऐप्स  को आपके पसंदीदा ऐप्स  को संशोधित करने देता है. दुर्भावनापूर्ण ऐप्स  आपसे निजी डेटा एकत्रित करने के लिए आपके मौजूदा ऐप्स  को स्पूफ़ करके, चलाए जाने वाले ऐप्स  को चुपचाप बदल सकते हैं."</string>
     <string name="permlab_writeSettings" msgid="2226195290955224730">"सिस्‍टम सेटिंग बदलें"</string>
-    <string name="permdesc_writeSettings" msgid="7775723441558907181">"एप्स को सिस्टम सेटिंग डेटा संशोधित करने देता है. दुर्भावनापूर्ण एप्स आपके सिस्टम के कॉन्फ़िगरेशन को दूषित कर सकते हैं."</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"ऐप्स  को सिस्टम सेटिंग डेटा संशोधित करने देता है. दुर्भावनापूर्ण ऐप्स  आपके सिस्टम के कॉन्फ़िगरेशन को दूषित कर सकते हैं."</string>
     <string name="permlab_writeSecureSettings" msgid="204676251876718288">"सुरक्षित सिस्‍टम सेटिंग बदलें"</string>
-    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"एप्स को सिस्टम के सुरक्षित सेटिंग डेटा को संशोधित करने देता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"ऐप्स  को सिस्टम के सुरक्षित सेटिंग डेटा को संशोधित करने देता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_writeGservices" msgid="2149426664226152185">"Google सेवाएं नक्शा बदलें"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"एप्‍स को Google सेवाओं का नक्शे संशोधित करने देता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"ऐप्स को Google सेवाओं का नक्शे संशोधित करने देता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"प्रारंभ होने पर चलाएं"</string>
-    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"एप्स को सिस्टम द्वारा बूटिंग पूर्ण करते ही स्वतः आरंभ करने देता है. इससे टेबलेट को आरंभ होने में अधिक समय लग सकता है और एप्स को निरंतर चलाकर संपूर्ण टेबलेट को धीमा करने देता है."</string>
-    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"एप्स को सिस्टम द्वारा बूटिंग पूर्ण करते ही स्वतः प्रारंभ होने देता है. इससे फ़ोन को प्रारंभ होने में अधिक समय लग सकता है और एप्स के निरंतर चलते रहने से संपूर्ण फ़ोन प्रक्रियाएं धीमी हो सकती हैं."</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"ऐप्स  को सिस्टम द्वारा बूटिंग पूर्ण करते ही स्वतः आरंभ करने देता है. इससे टेबलेट को आरंभ होने में अधिक समय लग सकता है और ऐप्स  को निरंतर चलाकर संपूर्ण टेबलेट को धीमा करने देता है."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"ऐप्स  को सिस्टम द्वारा बूटिंग पूर्ण करते ही स्वतः प्रारंभ होने देता है. इससे फ़ोन को प्रारंभ होने में अधिक समय लग सकता है और ऐप्स  के निरंतर चलते रहने से संपूर्ण फ़ोन प्रक्रियाएं धीमी हो सकती हैं."</string>
     <string name="permlab_broadcastSticky" msgid="7919126372606881614">"स्टिकी प्रसारण भेजें"</string>
-    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"एप्‍स को स्‍टिकी प्रसारण भेजने देता है, जो प्रसारण समाप्त होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, टेबलेट की बहुत अधिक स्मृति का उपयोग करके उसे धीमा या अस्‍थिर कर सकता है."</string>
-    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"एप्‍स को स्‍टिकी प्रसारण भेजने देता है, जो प्रसारण समाप्त होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, फ़ोन की बहुत अधिक स्मृति का उपयोग करके उसे धीमा या अस्‍थिर कर सकता है."</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"ऐप्स को स्‍टिकी प्रसारण भेजने देता है, जो प्रसारण समाप्त होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, टेबलेट की बहुत अधिक स्मृति का उपयोग करके उसे धीमा या अस्‍थिर कर सकता है."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"ऐप्स को स्‍टिकी प्रसारण भेजने देता है, जो प्रसारण समाप्त होने के बाद भी बने रहते हैं. अत्यधिक उपयोग, फ़ोन की बहुत अधिक स्मृति का उपयोग करके उसे धीमा या अस्‍थिर कर सकता है."</string>
     <string name="permlab_readContacts" msgid="8348481131899886131">"अपने संपर्क पढ़ें"</string>
-    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"एप्स को आपके टेबलेट में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को पढ़ने देता है. यह अनुमति एप्स को आपके संपर्क डेटा को सहेजने देती है, और दुर्भावनापूर्ण एप्स आपकी जानकारी के बिना संपर्क डेटा को साझा कर सकते हैं."</string>
-    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"एप्स को आपके फ़ोन में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को पढ़ने देता है. यह अनुमति एप्स को आपके संपर्क डेटा को सहेजने देती है, और दुर्भावनापूर्ण एप्स आपकी जानकारी के बिना संपर्क डेटा को साझा कर सकते हैं."</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"ऐप्स  को आपके टेबलेट में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को पढ़ने देता है. यह अनुमति ऐप्स  को आपके संपर्क डेटा को सहेजने देती है, और दुर्भावनापूर्ण ऐप्स  आपकी जानकारी के बिना संपर्क डेटा को साझा कर सकते हैं."</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"ऐप्स  को आपके फ़ोन में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को पढ़ने देता है. यह अनुमति ऐप्स  को आपके संपर्क डेटा को सहेजने देती है, और दुर्भावनापूर्ण ऐप्स  आपकी जानकारी के बिना संपर्क डेटा को साझा कर सकते हैं."</string>
     <string name="permlab_writeContacts" msgid="5107492086416793544">"अपने संपर्क बदलें"</string>
-    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"एप्स को आपके टेबलेट में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को संशोधित करने देता है. यह अनुमति एप्स को आपके संपर्क डेटा को हटाने देती है."</string>
-    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"एप्स को आपके फ़ोन में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को संशोधित करने देता है. यह अनुमति एप्स को आपके संपर्क डेटा को हटाने देती है."</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"ऐप्स  को आपके टेबलेट में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को संशोधित करने देता है. यह अनुमति ऐप्स  को आपके संपर्क डेटा को हटाने देती है."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"ऐप्स  को आपके फ़ोन में संग्रहीत संपर्कों के डेटा को, साथ ही आपके द्वारा विशिष्ट व्यक्तियों को कॉल करने, ईमेल करने, या अन्‍य तरीके से संवाद करने की आवृत्ति को संशोधित करने देता है. यह अनुमति ऐप्स  को आपके संपर्क डेटा को हटाने देती है."</string>
     <string name="permlab_readCallLog" msgid="3478133184624102739">"कॉल लॉग पढ़ें"</string>
-    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"एप्स को आपके फ़ोन का कॉल लॉग पढ़ने देता है, जिसमें इनकमिंग और आउटगोइंग कॉल का डेटा शामिल है. यह अनुमति एप्स को आपके कॉल लॉग डेटा को सहेजने देती है, और दुर्भावनापूर्ण एप्स आपकी जानकारी के बिना कॉल लॉग डेटा को साझा कर सकते हैं."</string>
-    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"एप्स को आपके फ़ोन का कॉल लॉग पढ़ने देता है, जिसमें इनकमिंग और आउटगोइंग कॉल का डेटा शामिल है. यह अनुमति एप्स को आपके कॉल लॉग डेटा को सहेजने देती है, और दुर्भावनापूर्ण एप्स आपकी जानकारी के बिना कॉल लॉग डेटा को साझा कर सकते हैं."</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"ऐप्स  को आपके फ़ोन का कॉल लॉग पढ़ने देता है, जिसमें इनकमिंग और आउटगोइंग कॉल का डेटा शामिल है. यह अनुमति ऐप्स  को आपके कॉल लॉग डेटा को सहेजने देती है, और दुर्भावनापूर्ण ऐप्स  आपकी जानकारी के बिना कॉल लॉग डेटा को साझा कर सकते हैं."</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"ऐप्स  को आपके फ़ोन का कॉल लॉग पढ़ने देता है, जिसमें इनकमिंग और आउटगोइंग कॉल का डेटा शामिल है. यह अनुमति ऐप्स  को आपके कॉल लॉग डेटा को सहेजने देती है, और दुर्भावनापूर्ण ऐप्स  आपकी जानकारी के बिना कॉल लॉग डेटा को साझा कर सकते हैं."</string>
     <string name="permlab_writeCallLog" msgid="8552045664743499354">"कॉल लॉग लिखें"</string>
-    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"एप्‍स को इनकमिंग और आउटगोइंग कॉल के डेटा सहित, आपके टेबलेट का कॉल लॉग संशोधित करने देता है. दुर्भावनापूर्ण एप्‍स आपके कॉल लॉग को मिटाने या संशोधित करने के लिए इसका उपयोग कर सकते हैं."</string>
-    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"एप्‍स को इनकमिंग और आउटगोइंग कॉल के डेटा सहित, आपके फ़ोन का कॉल लॉग संशोधित करने देता है. दुर्भावनापूर्ण एप्‍स आपके कॉल लॉग को मिटाने या संशोधित करने के लिए इसका उपयोग कर सकते हैं."</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"ऐप्स को इनकमिंग और आउटगोइंग कॉल के डेटा सहित, आपके टेबलेट का कॉल लॉग संशोधित करने देता है. दुर्भावनापूर्ण ऐप्स आपके कॉल लॉग को मिटाने या संशोधित करने के लिए इसका उपयोग कर सकते हैं."</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"ऐप्स को इनकमिंग और आउटगोइंग कॉल के डेटा सहित, आपके फ़ोन का कॉल लॉग संशोधित करने देता है. दुर्भावनापूर्ण ऐप्स आपके कॉल लॉग को मिटाने या संशोधित करने के लिए इसका उपयोग कर सकते हैं."</string>
     <string name="permlab_readProfile" msgid="4701889852612716678">"स्‍वयं का संपर्क कार्ड पढ़ें"</string>
-    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"एप्स को आपके उपकरण में संग्रहीत व्यक्तिगत प्रोफ़ाइल जानकारी, जैसे आपका नाम और संपर्क जानकारी, पढ़ने देता है. इसका अर्थ है कि एप्स आपको पहचान सकता है और आपकी प्रोफ़ाइल जानकारी अन्य लोगों को भेज सकता है."</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"ऐप्स  को आपके उपकरण में संग्रहीत व्यक्तिगत प्रोफ़ाइल जानकारी, जैसे आपका नाम और संपर्क जानकारी, पढ़ने देता है. इसका अर्थ है कि ऐप्स  आपको पहचान सकता है और आपकी प्रोफ़ाइल जानकारी अन्य लोगों को भेज सकता है."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"स्‍वयं का संपर्क कार्ड बदलें"</string>
-    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"एप्स को आपके उपकरण में संग्रहीत निजी प्रोफ़ाइल जानकारी, जैसे आपका नाम और संपर्क जानकारी को बदलने या उसमें कुछ जोड़ने देता है. इसका अर्थ है कि एप्स आपको पहचान सकता है और आपकी प्रोफ़ाइल जानकारी अन्य लोगों को भेज सकता है."</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"ऐप्स  को आपके उपकरण में संग्रहीत निजी प्रोफ़ाइल जानकारी, जैसे आपका नाम और संपर्क जानकारी को बदलने या उसमें कुछ जोड़ने देता है. इसका अर्थ है कि ऐप्स  आपको पहचान सकता है और आपकी प्रोफ़ाइल जानकारी अन्य लोगों को भेज सकता है."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"बॉडी सेंसर (जैसे हृदय गति मॉनीटर)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"एप्लिकेशन को ऐसे सेंसर का डेटा एक्सेस करने देती है जिनका उपयोग आप यह मापने के लिए करते हैं कि आपके शरीर के भीतर क्या चल रहा है, जैसे हृदय गति."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"अपनी सामाजिक स्‍ट्रीम पढ़ें"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"एप को आपके और आपके मित्रों की नई सामाजिक जानकारी तक पहुंचने और उन्हें समन्‍वयित करने देता है. जानकारी साझा करते समय सावधान रहें - इससे गोपनीयता पर ध्यान दिए बिना, एप सामाजिक नेटवर्क पर आपके और आपके मित्रों के बीच संचारों को पढ़ सकता है. ध्‍यान दें: यह अनुमति सभी सामाजिक नेटवर्क पर लागू नहीं की जा सकती."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"सामाजिक स्‍ट्रीम में लिखें"</string>
-    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"एप को आपके मित्रों की नई सामाजिक जानकारी प्रदर्शित करने देता है. जानकारी साझा करते समय सावधान रहें - इससे एप्स ऐसे संदेश बना सकता है जो किसी मित्र की ओर से आते दिखाई देते हैं. ध्‍यान दें: यह अनुमति सभी सामाजिक नेटवर्क पर लागू नहीं की जा सकती."</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"एप को आपके मित्रों की नई सामाजिक जानकारी प्रदर्शित करने देता है. जानकारी साझा करते समय सावधान रहें - इससे ऐप्स  ऐसे संदेश बना सकता है जो किसी मित्र की ओर से आते दिखाई देते हैं. ध्‍यान दें: यह अनुमति सभी सामाजिक नेटवर्क पर लागू नहीं की जा सकती."</string>
     <string name="permlab_readCalendar" msgid="5972727560257612398">"केलैंडर ईवेंट के साथ-साथ गोपनीय जानकारी पढ़ें"</string>
-    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"एप्स को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके टेबलेट पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे गोपनीयता या संवेदनशीलता पर ध्यान दिए बिना, एप्स आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
-    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"एप्स को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके फ़ोन पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे गोपनीयता या संवेदनशीलता पर ध्यान दिए बिना, एप्स आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"ऐप्स  को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके टेबलेट पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे गोपनीयता या संवेदनशीलता पर ध्यान दिए बिना, ऐप्स  आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"ऐप्स  को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके फ़ोन पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे गोपनीयता या संवेदनशीलता पर ध्यान दिए बिना, ऐप्स  आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
     <string name="permlab_writeCalendar" msgid="8438874755193825647">"अपनी जानकारी के बि‍ना कैलेंडर ईवेंट जोड़ें या संशोधि‍त करें और अति‍थि‍यों को ईमेल भेजें"</string>
-    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"एप्स को मित्रों या सहकर्मियों के ईवेंट के साथ ही वे ईवेंट जोड़ने, निकालने, बदलने देता है जिन्हें आप अपने टेबलेट पर संशोधित कर सकते हैं. इससे एप्स,अपनी जानकारी के बिना उन संदेशों को भेज सकता है जो कैलेंडर स्वामियों की ओर से आते दिखाई देते हैं, या ईवेंट संशोधित कर सकता है."</string>
-    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"एप्स को मित्रों या सहकर्मियों के ईवेंट के साथ ही वे ईवेंट जोड़ने, निकालने, बदलने देता है जिन्हें आप अपने फ़ोन पर संशोधित कर सकते हैं. इससे एप्स, अपनी जानकारी के बिना उन संदेशों को भेज सकता है जो कैलेंडर स्वामियों की ओर से आते दिखाई देते हैं, या ईवेंट संशोधित कर सकता है."</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"ऐप्स  को मित्रों या सहकर्मियों के ईवेंट के साथ ही वे ईवेंट जोड़ने, निकालने, बदलने देता है जिन्हें आप अपने टेबलेट पर संशोधित कर सकते हैं. इससे ऐप्स ,अपनी जानकारी के बिना उन संदेशों को भेज सकता है जो कैलेंडर स्वामियों की ओर से आते दिखाई देते हैं, या ईवेंट संशोधित कर सकता है."</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"ऐप्स  को मित्रों या सहकर्मियों के ईवेंट के साथ ही वे ईवेंट जोड़ने, निकालने, बदलने देता है जिन्हें आप अपने फ़ोन पर संशोधित कर सकते हैं. इससे ऐप्स , अपनी जानकारी के बिना उन संदेशों को भेज सकता है जो कैलेंडर स्वामियों की ओर से आते दिखाई देते हैं, या ईवेंट संशोधित कर सकता है."</string>
     <string name="permlab_accessMockLocation" msgid="8688334974036823330">"परीक्षण के लिए नकली स्‍थान स्रोत"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"परीक्षण के लिए कृत्रिम स्थान स्रोत बनाएं या एक नया स्थान प्रदाता इंस्‍टॉल करें. यह एप्स को स्‍थान और/या अन्‍य स्थान स्रोतों जैसे GPS या स्‍थान प्रदाताओं द्वारा लौटाई गई स्थिति को ओवरराइड करने देता है."</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"परीक्षण के लिए कृत्रिम स्थान स्रोत बनाएं या एक नया स्थान प्रदाता इंस्‍टॉल करें. यह ऐप्स  को स्‍थान और/या अन्‍य स्थान स्रोतों जैसे GPS या स्‍थान प्रदाताओं द्वारा लौटाई गई स्थिति को ओवरराइड करने देता है."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"अतिरिक्त स्‍थान प्रदाता आदेशों में पहुंचे"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"एप्स को अतिरिक्त स्थान प्रदाता आदेशों पर पहुंचने देता है. यह एप्स को GPS या अन्य स्थान स्रोतों के संचालन में बाधा पहुंचाने दे सकता है."</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"ऐप्स  को अतिरिक्त स्थान प्रदाता आदेशों पर पहुंचने देता है. यह ऐप्स  को GPS या अन्य स्थान स्रोतों के संचालन में बाधा पहुंचाने दे सकता है."</string>
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"किसी स्‍थान प्रदाता को इंस्‍टॉल करने की अनुमति"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"परीक्षण के लिए कृत्रिम स्थान स्रोत बनाएं या एक नए स्थान प्रदाता को इंस्‍टॉल करें. यह एप्स को स्‍थान और/या अन्‍य स्थान स्रोतों जैसे GPS या स्‍थान प्रदाताओं द्वारा लौटाई गई स्थिति को ओवरराइड करने देता है."</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"परीक्षण के लिए कृत्रिम स्थान स्रोत बनाएं या एक नए स्थान प्रदाता को इंस्‍टॉल करें. यह ऐप्स  को स्‍थान और/या अन्‍य स्थान स्रोतों जैसे GPS या स्‍थान प्रदाताओं द्वारा लौटाई गई स्थिति को ओवरराइड करने देता है."</string>
     <string name="permlab_accessFineLocation" msgid="1191898061965273372">"सटीक स्थान (GPS और नेटवर्क-आधारित)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"एप्स को ग्लोबल पोज़िशनिंग सिस्टम (GPS) या सेल टॉवर और Wi-Fi जैसे नेटवर्क स्थान स्रोतों का उपयोग करके आपका सटीक स्थान प्राप्त करने देती है. एप्स द्वारा इन स्थान सेवाओं का उपयोग किए जाने के लिए इन्हें चालू होना चाहिए और आपके उपकरण पर उपलब्ध होना चाहिए. एप्स इसका उपयोग यह पता करने में कर सकते हैं कि आप कहां पर हैं, और अतिरिक्त बैटरी की खपत कर सकते हैं."</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"ऐप्स  को ग्लोबल पोज़िशनिंग सिस्टम (GPS) या सेल टॉवर और Wi-Fi जैसे नेटवर्क स्थान स्रोतों का उपयोग करके आपका सटीक स्थान प्राप्त करने देती है. ऐप्स  द्वारा इन स्थान सेवाओं का उपयोग किए जाने के लिए इन्हें चालू होना चाहिए और आपके उपकरण पर उपलब्ध होना चाहिए. ऐप्स  इसका उपयोग यह पता करने में कर सकते हैं कि आप कहां पर हैं, और अतिरिक्त बैटरी की खपत कर सकते हैं."</string>
     <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"अनुमानित स्थान (नेटवर्क-आधारित)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"एप्स को आपका अनुमानित स्थान प्राप्त करने देती है. इस स्थान को सेल टॉवर और Wi-Fi जैसे नेटवर्क स्थान स्रोतों का उपयोग करके स्थान सेवाओं द्वारा प्राप्त किया गया है. एप्स द्वारा इन स्थान सेवाओं का उपयोग करने के लिए इन्हें चालू होना चाहिए और आपके उपकरण में उपलब्ध होना चाहिए. एप्स इसका उपयोग यह पता लगाने में कर सकते हैं कि आप लगभग कहां पर हैं."</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"ऐप्स  को आपका अनुमानित स्थान प्राप्त करने देती है. इस स्थान को सेल टॉवर और Wi-Fi जैसे नेटवर्क स्थान स्रोतों का उपयोग करके स्थान सेवाओं द्वारा प्राप्त किया गया है. ऐप्स  द्वारा इन स्थान सेवाओं का उपयोग करने के लिए इन्हें चालू होना चाहिए और आपके उपकरण में उपलब्ध होना चाहिए. ऐप्स  इसका उपयोग यह पता लगाने में कर सकते हैं कि आप लगभग कहां पर हैं."</string>
     <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger में पहुंचें"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"एप्‍स को SurfaceFlinger निम्‍न-स्‍तर सुविधाएं उपयोग करने देता है."</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"ऐप्स को SurfaceFlinger निम्‍न-स्‍तर सुविधाएं उपयोग करने देता है."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"फ़्रेम बफ़र पढ़ें"</string>
-    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"एप्‍स को फ़्रेम बफ़र की सामग्री पढ़ने देता है."</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"ऐप्स को फ़्रेम बफ़र की सामग्री पढ़ने देता है."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger एक्सेस करें"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"ऐप्स को InputFlinger निम्‍न-स्‍तर सुविधाओं का उपयोग करने देता है."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi डिस्प्ले को कॉन्फ़िगर करें"</string>
-    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"एप्स को कॉन्फ़िगर करने देता है और Wifi डिस्प्ले से कनेक्ट करता है."</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"ऐप्स  को कॉन्फ़िगर करने देता है और Wifi डिस्प्ले से कनेक्ट करता है."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wifi डिस्प्ले को नियंत्रित करें"</string>
-    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"एप्स को Wifi डिस्प्ले की निम्न-स्तर की सुविधाएं नियंत्रित करने देता है."</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"ऐप्स  को Wifi डिस्प्ले की निम्न-स्तर की सुविधाएं नियंत्रित करने देता है."</string>
     <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"ऑडियो आउटपुट को कैप्‍चर करें"</string>
-    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"एप्‍स को ऑडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
+    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"ऐप्स को ऑडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
     <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"हॉटवर्ड पहचान"</string>
     <string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"एप्लिकेशन को हॉटवर्ड पहचान के लिए ऑडियो कैप्चर करने देती है. कैप्चर पृष्ठभूमि में हो सकता है लेकिन वह अन्य ऑडियो कैप्चर (उदा. कैमकॉर्डर) को नहीं रोकता."</string>
     <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"वीडियो आउटपुट को कैप्‍चर करें"</string>
-    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"एप्‍स को वीडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
+    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"ऐप्स को वीडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
     <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"सुरक्षित वीडियो आउटपुट को कैप्‍चर करें"</string>
-    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"एप्‍स को सुरक्षित वीडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
+    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"ऐप्स को सुरक्षित वीडियो आउटपुट को कैप्‍चर और रीडायरेक्‍ट करने देता है."</string>
     <string name="permlab_mediaContentControl" msgid="8749790560720562511">"मीडिया प्लेबैक और मेटाडेटा एक्सेस नियंत्रित करें"</string>
     <string name="permdesc_mediaContentControl" msgid="1637478200272062">"एप्लिकेशन को मीडिया प्लेबैक नियंत्रित करने देती है और मीडिया जानकारी (शीर्षक, लेखक...) एक्सेस करने देती है."</string>
     <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"अपनी ऑडियो सेटिंग बदलें"</string>
-    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"एप्स को वैश्विक ऑडियो सेटिंग, जैसे वॉल्‍यूम और कौन-सा स्पीकर आउटपुट के लिए उपयोग किया गया, संशोधित करने देता है."</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ऐप्स  को वैश्विक ऑडियो सेटिंग, जैसे वॉल्‍यूम और कौन-सा स्पीकर आउटपुट के लिए उपयोग किया गया, संशोधित करने देता है."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ऑडियो रिकॉर्ड करें"</string>
-    <string name="permdesc_recordAudio" msgid="4906839301087980680">"एप्स को माइक्रोफ़ोन द्वारा ऑडियो रिकार्ड करने देता है. यह अनुमति एप्स को आपकी पुष्टि के बिना किसी भी समय ऑडियो रिकार्ड करने देती है."</string>
+    <string name="permdesc_recordAudio" msgid="4906839301087980680">"ऐप्स  को माइक्रोफ़ोन द्वारा ऑडियो रिकार्ड करने देता है. यह अनुमति ऐप्स  को आपकी पुष्टि के बिना किसी भी समय ऑडियो रिकार्ड करने देती है."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"सिम संचार"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"ऐप्स को सिम में आदेश भेजने देती है. यह बहुत ही खतरनाक है."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"चित्र और वीडियो लें"</string>
-    <string name="permdesc_camera" msgid="8497216524735535009">"एप्स को कैमरे से चित्र और वीडियो लेने देता है. यह अनुमति एप्स को किसी भी समय आपकी पुष्टि के बिना कैमरे का उपयोग करने देती है."</string>
+    <string name="permdesc_camera" msgid="8497216524735535009">"ऐप्स  को कैमरे से चित्र और वीडियो लेने देता है. यह अनुमति ऐप्स  को किसी भी समय आपकी पुष्टि के बिना कैमरे का उपयोग करने देती है."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"कैमरा उपयोग में होने पर संचारण संकेतक LED अक्षम करें"</string>
-    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"पहले से इंस्टॉल किए गए सिस्टम एप्स को कैमरे को संकेतक LED का उपयोग करने से अक्षम करती है."</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"पहले से इंस्टॉल किए गए सिस्टम ऐप्स  को कैमरे को संकेतक LED का उपयोग करने से अक्षम करती है."</string>
     <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"स्‍थायी रूप से टेबलेट अक्षम करें"</string>
     <string name="permlab_brick" product="default" msgid="8337817093326370537">"फ़ोन को स्‍थायी रूप से अक्षम करें"</string>
-    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"एप्‍स को संपूर्ण टेबलेट को स्‍थायी रूप से अक्षम करने देता है. यह बहुत खतरनाक है."</string>
-    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"एप्‍स को संपूर्ण फ़ोन को स्‍थायी रूप से अक्षम करने देता है. यह बहुत खतरनाक है."</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"ऐप्स को संपूर्ण टेबलेट को स्‍थायी रूप से अक्षम करने देता है. यह बहुत खतरनाक है."</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"ऐप्स को संपूर्ण फ़ोन को स्‍थायी रूप से अक्षम करने देता है. यह बहुत खतरनाक है."</string>
     <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"टेबलेट रीबूट के लिए बाध्‍य करें"</string>
     <string name="permlab_reboot" product="default" msgid="2898560872462638242">"फ़ोन रीबूट के लिए बाध्‍य करें"</string>
-    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"एप्‍स को टेबलेट रीबूट करने के लिए बाध्‍य करने देता है."</string>
-    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"एप्‍स को फ़ोन बलपूर्वक रीबूट करने देता है."</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"ऐप्स को टेबलेट रीबूट करने के लिए बाध्‍य करने देता है."</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"ऐप्स को फ़ोन बलपूर्वक रीबूट करने देता है."</string>
     <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"USB संग्रहण फ़ाइल सिस्‍टम पर पहुंचें"</string>
     <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"SD कार्ड फ़ाइल सिस्‍टम पर पहुंचें"</string>
-    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"एप्‍स को निकाले जाने योग्‍य संग्रहण के लिए फ़ाइल सिस्‍टम माउंट और अनमाउंट करने देता है."</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"ऐप्स को निकाले जाने योग्‍य संग्रहण के लिए फ़ाइल सिस्‍टम माउंट और अनमाउंट करने देता है."</string>
     <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB संग्रहण मिटाएं"</string>
     <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD कार्ड मिटाएं"</string>
-    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"एप्‍स को निकालने योग्‍य संग्रहण फ़ॉर्मेट करने देता है."</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"ऐप्स को निकालने योग्‍य संग्रहण फ़ॉर्मेट करने देता है."</string>
     <string name="permlab_asec_access" msgid="3411338632002193846">"मोबाइल संग्रहण पर जानकारी प्राप्त करें"</string>
-    <string name="permdesc_asec_access" msgid="3094563844593878548">"एप्स को मोबाइल संग्रहण की जानकारी प्राप्‍त करने देता है."</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"ऐप्स  को मोबाइल संग्रहण की जानकारी प्राप्‍त करने देता है."</string>
     <string name="permlab_asec_create" msgid="6414757234789336327">"मोबाइल संग्रहण बनाएं"</string>
-    <string name="permdesc_asec_create" msgid="4558869273585856876">"एप्‍स को मोबाइल संग्रहण बनाने देता है."</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"ऐप्स को मोबाइल संग्रहण बनाने देता है."</string>
     <string name="permlab_asec_destroy" msgid="526928328301618022">"मोबाइल संग्रहण नष्ट करें"</string>
-    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"एप्‍स को मोबाइल संग्रहण नष्ट करने देता है."</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"ऐप्स को मोबाइल संग्रहण नष्ट करने देता है."</string>
     <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"मोबाइल संग्रहण माउंट/अनमाउंट करें"</string>
-    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"एप्‍स को मोबाइल संग्रहण माउंट/अनमाउंट करने देता है."</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"ऐप्स को मोबाइल संग्रहण माउंट/अनमाउंट करने देता है."</string>
     <string name="permlab_asec_rename" msgid="7496633954080472417">"मोबाइल संग्रहण का नाम बदलें"</string>
-    <string name="permdesc_asec_rename" msgid="1794757588472127675">"एप्‍स को मोबाइल संग्रहण का नाम बदलने देता है."</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"ऐप्स को मोबाइल संग्रहण का नाम बदलने देता है."</string>
     <string name="permlab_vibrate" msgid="7696427026057705834">"कंपन नियंत्रित करें"</string>
-    <string name="permdesc_vibrate" msgid="6284989245902300945">"एप्‍स को कंपनकर्ता नियंत्रित करने देता है."</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"ऐप्स को कंपनकर्ता नियंत्रित करने देता है."</string>
     <string name="permlab_flashlight" msgid="2155920810121984215">"फ़्लैशलाइट नियंत्रित करें"</string>
-    <string name="permdesc_flashlight" msgid="6522284794568368310">"एप्‍स को फ़्लैशलाइट नियंत्रित करने देता है."</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"ऐप्स को फ़्लैशलाइट नियंत्रित करने देता है."</string>
     <string name="permlab_manageUsb" msgid="1113453430645402723">"USB उपकरणों की प्राथमिकताएं और अनुमतियां प्रबंधित करें"</string>
-    <string name="permdesc_manageUsb" msgid="7776155430218239833">"एप्‍स को USB उपकरणों की प्राथमिकताओं और अनुमतियों को प्रबंधित करने देता है."</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"ऐप्स को USB उपकरणों की प्राथमिकताओं और अनुमतियों को प्रबंधित करने देता है."</string>
     <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP प्रोटोकॉल लागू करें"</string>
     <string name="permdesc_accessMtp" msgid="6532961200486791570">"MTP USB प्रोटोकॉल लागू करने के लिए कर्नेल MTP ड्राइवर में पहुंच की अनुमति देता है."</string>
     <string name="permlab_hardware_test" msgid="4148290860400659146">"परीक्षण हार्डवेयर"</string>
-    <string name="permdesc_hardware_test" msgid="6597964191208016605">"एप्‍स को हार्डवेयर परीक्षण के लिए विविध सहायक उपकरणों को नियंत्रित करने देता है."</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"ऐप्स को हार्डवेयर परीक्षण के लिए विविध सहायक उपकरणों को नियंत्रित करने देता है."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"फ़ोन नंबर पर सीधे कॉल करें"</string>
-    <string name="permdesc_callPhone" msgid="3740797576113760827">"एप्स को आपके हस्‍तक्षेप के बिना फ़ोन नंबर पर कॉल करने देता है. इसके परिणाम अप्रत्‍याशित शुल्‍क या कॉल हो सकते हैं. ध्यान दें कि यह एप्स को आपातकालीन नंबर पर कॉल नहीं करने देता. दुर्भावनापूर्ण एप्स आपकी पुष्टि के बिना कॉल करके आपका धन व्‍यय कर सकते हैं."</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"ऐप्स  को आपके हस्‍तक्षेप के बिना फ़ोन नंबर पर कॉल करने देता है. इसके परिणाम अप्रत्‍याशित शुल्‍क या कॉल हो सकते हैं. ध्यान दें कि यह ऐप्स  को आपातकालीन नंबर पर कॉल नहीं करने देता. दुर्भावनापूर्ण ऐप्स  आपकी पुष्टि के बिना कॉल करके आपका धन व्‍यय कर सकते हैं."</string>
     <string name="permlab_callPrivileged" msgid="4198349211108497879">"किसी भी फ़ोन नंबर पर सीधे कॉल करें"</string>
-    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"एप्‍स को आपके हस्‍तक्षेप के बिना आपातकालीन नंबरों सहित, किसी भी फ़ोन नंबर पर कॉल करने देता है. दुर्भावनापूर्ण एप्‍स आपातकालीन सेवाओं पर अनावश्‍यक और अवैध कॉल कर सकते हैं."</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"ऐप्स को आपके हस्‍तक्षेप के बिना आपातकालीन नंबरों सहित, किसी भी फ़ोन नंबर पर कॉल करने देता है. दुर्भावनापूर्ण ऐप्स आपातकालीन सेवाओं पर अनावश्‍यक और अवैध कॉल कर सकते हैं."</string>
     <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"सीधे CDMA टेबलेट सेटअप प्रारंभ करें"</string>
     <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"सीधे CDMA फ़ोन सेटअप प्रारंभ करें"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"एप्‍स को CDMA प्रावधान प्रारंभ करने देता है. दुर्भावनापूर्ण एप्‍स अनावश्‍यक रूप से CDMA प्रावधान प्रारंभ कर सकते हैं."</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"ऐप्स को CDMA प्रावधान प्रारंभ करने देता है. दुर्भावनापूर्ण ऐप्स अनावश्‍यक रूप से CDMA प्रावधान प्रारंभ कर सकते हैं."</string>
     <string name="permlab_locationUpdates" msgid="7785408253364335740">"स्‍थान के बारे में नई जानकारी की सूचनाओं को नियंत्रित करें"</string>
-    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"एप को रेडियो से स्‍थान के बारे में नई जानकारी की सूचनाएं सक्षम/अक्षम करने देता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"एप को रेडियो से स्‍थान के बारे में नई जानकारी की सूचनाएं सक्षम/अक्षम करने देता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"चेकइन गुणों में पहुंचें"</string>
-    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"एप्स को चेकइन सेवा द्वारा अपलोड किए गए गुणों पर पढ़ें/लिखें पहुंच देता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"ऐप्स  को चेकइन सेवा द्वारा अपलोड किए गए गुणों पर पढ़ें/लिखें पहुंच देता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_bindGadget" msgid="776905339015863471">"विजेट चुनें"</string>
-    <string name="permdesc_bindGadget" msgid="8261326938599049290">"एप्स को सिस्टम को यह बताने देता है कि किस एप्स द्वारा कौन से विजेट का उपयोग किया जा सकता है. कोई एप्स, इस अनुमति के साथ अन्य एप्स के निजी डेटा पर पहुंच सकते हैं. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"ऐप्स  को सिस्टम को यह बताने देता है कि किस ऐप्स  द्वारा कौन से विजेट का उपयोग किया जा सकता है. कोई ऐप्स , इस अनुमति के साथ अन्य ऐप्स  के निजी डेटा पर पहुंच सकते हैं. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"फ़ोन स्‍थिति बदलें"</string>
-    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"एप्‍स को उपकरण की फ़ोन सुविधाएं नियंत्रित करने देता है. इस अनुमति वाला कोई एप्‍स आपको सूचित किए बिना नेटवर्क स्‍विच कर सकता है, फ़ोन का रेडियो चालू और बंद कर सकता है और ऐसे ही अन्य कार्य कर सकता है."</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"ऐप्स को उपकरण की फ़ोन सुविधाएं नियंत्रित करने देता है. इस अनुमति वाला कोई ऐप्स आपको सूचित किए बिना नेटवर्क स्‍विच कर सकता है, फ़ोन का रेडियो चालू और बंद कर सकता है और ऐसे ही अन्य कार्य कर सकता है."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"फ़ोन की स्‍थिति और पहचान पढ़ें"</string>
-    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"एप्स को उपकरण की फ़ोन सुविधाओं तक पहुंचने देता है. यह अनुमति एप्स को फ़ोन नंबर और उपकरण आईडी, कॉल सक्रिय है या नहीं, और कॉल द्वारा कनेक्ट किया गया दूरस्‍थ नंबर निर्धारित करने देती है."</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ऐप्स  को उपकरण की फ़ोन सुविधाओं तक पहुंचने देता है. यह अनुमति ऐप्स  को फ़ोन नंबर और उपकरण आईडी, कॉल सक्रिय है या नहीं, और कॉल द्वारा कनेक्ट किया गया दूरस्‍थ नंबर निर्धारित करने देती है."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"सटीक फ़ोन स्थितियों को पढ़ना"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"ऐप्स को सटीक फ़ोन स्थितियों की एक्सेस देती है. यह अनुमति ऐप्स को कॉल की वास्तविक स्थिति, चाहे वह कॉल सक्रिय हो या पृष्ठभूमि में हो, कॉल विफलताओं, सटीक डेटा कनेक्शन की स्थिति और डेटा कनेक्शन विफलताओं का पता लगाने देती है."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"टेबलेट को निष्‍क्रिय होने से रोकें"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"फ़ोन को निष्‍क्रिय होने से रोकें"</string>
-    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"एप्स को टेबलेट को प्रयोग में नहीं हो जाने से रोकता है."</string>
-    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"एप्स को फ़ोन को प्रयोग में नहीं होने से रोकता है."</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ऐप्स  को टेबलेट को प्रयोग में नहीं हो जाने से रोकता है."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"ऐप्स  को फ़ोन को प्रयोग में नहीं होने से रोकता है."</string>
     <string name="permlab_transmitIr" msgid="7545858504238530105">"इंफ़्रारेड संचारित करें"</string>
     <string name="permdesc_transmitIr" product="tablet" msgid="5358308854306529170">"एप्लिकेशन को टेबलेट के इंफ़्रारेड ट्रांसमीटर का उपयोग करने देती है."</string>
     <string name="permdesc_transmitIr" product="default" msgid="7957763745020300725">"एप्लिकेशन को फ़ोन के इंफ़्रारेड ट्रांसमीटर का उपयोग करने देती है."</string>
     <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"टेबलेट चालू या बंद करें"</string>
     <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"फ़ोन चालू या बंद करें"</string>
-    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"एप्‍स को टेबलेट चालू या बंद करने देता है."</string>
-    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"एप्‍स को फ़ोन चालू या बंद करने देता है."</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"ऐप्स को टेबलेट चालू या बंद करने देता है."</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"ऐप्स को फ़ोन चालू या बंद करने देता है."</string>
     <string name="permlab_factoryTest" msgid="3715225492696416187">"फ़ैक्‍ट्री परीक्षण मोड में चलाएं"</string>
     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"टेबलेट हार्डवेयर में पूर्ण पहुंच की अनुमति देते हुए निम्‍न-स्‍तर निर्माता परीक्षण के रूप में चलाएं. केवल तभी उपलब्‍ध जब कोई टेबलेट निर्माता परीक्षण मोड में चल रहा हो."</string>
     <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"फ़ोन हार्डवेयर में पूर्ण पहुंच की अनुमति देते हुए निम्‍न-स्‍तर निर्माता परीक्षण के रूप में चलाएं. केवल तभी उपलब्‍ध जब कोई फ़ोन निर्माता परीक्षण मोड में चल रहा हो."</string>
     <string name="permlab_setWallpaper" msgid="6627192333373465143">"वॉलपेपर सेट करें"</string>
-    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"एप्‍स को सिस्‍टम वॉलपेपर सेट करने देता है."</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"ऐप्स को सिस्‍टम वॉलपेपर सेट करने देता है."</string>
     <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"अपने वॉलपेपर का आकार एडजस्ट करें"</string>
-    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"एप्‍स को सिस्‍टम वॉलपेपर आकार संकेत सेट करने देता है."</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"ऐप्स को सिस्‍टम वॉलपेपर आकार संकेत सेट करने देता है."</string>
     <string name="permlab_masterClear" msgid="2315750423139697397">"फ़ैक्‍ट्री डिफ़ॉल्‍ट पर सिस्‍टम रीसेट करें"</string>
-    <string name="permdesc_masterClear" msgid="3665380492633910226">"एप्स को सभी डेटा, कॉन्फ़िगरेशन, और इंस्टॉल एप्स मिटाकर, सिस्टम को पूरी तरह उसकी फ़ैक्टरी सेटिंग पर रीसेट करने देता है."</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"ऐप्स  को सभी डेटा, कॉन्फ़िगरेशन, और इंस्टॉल ऐप्स  मिटाकर, सिस्टम को पूरी तरह उसकी फ़ैक्टरी सेटिंग पर रीसेट करने देता है."</string>
     <string name="permlab_setTime" msgid="2021614829591775646">"समय सेट करें"</string>
-    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"एप्‍स को टेबलेट की घड़ी का समय बदलने देता है."</string>
-    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"एप्‍स को फ़ोन की घड़ी का समय बदलने देता है."</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"ऐप्स को टेबलेट की घड़ी का समय बदलने देता है."</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"ऐप्स को फ़ोन की घड़ी का समय बदलने देता है."</string>
     <string name="permlab_setTimeZone" msgid="2945079801013077340">"समय क्षेत्र सेट करें"</string>
-    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"एप्‍स को टेबलेट का समय क्षेत्र बदलने देता है."</string>
-    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"एप्‍स को टेबलेट का समय क्षेत्र बदलने देता है."</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"ऐप्स को टेबलेट का समय क्षेत्र बदलने देता है."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"ऐप्स को टेबलेट का समय क्षेत्र बदलने देता है."</string>
     <string name="permlab_accountManagerService" msgid="4829262349691386986">"खाता प्रबंधक सेवा के रूप में कार्य करें"</string>
-    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"एप्‍स को खाता प्रमाणकों को कॉल करने देता है."</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"ऐप्स को खाता प्रमाणकों को कॉल करने देता है."</string>
     <string name="permlab_getAccounts" msgid="1086795467760122114">"उपकरण पर खाते ढूंढें"</string>
-    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"एप्स को टेबलेट द्वारा ज्ञात खातों की सूची प्राप्‍त करने देता है. इसमें वे खाते शामिल हो सकते हैं जिन्‍हें आपके द्वारा इंस्‍टॉल किए गए एप्स ने बनाया है."</string>
-    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"एप्स को फ़ोन द्वारा ज्ञात खातों की सूची प्राप्‍त करने देता है. इसमें वे खाते शामिल हो सकते हैं जिन्‍हें आपके द्वारा इंस्‍टॉल किए गए एप्स ने बनाया है."</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"ऐप्स  को टेबलेट द्वारा ज्ञात खातों की सूची प्राप्‍त करने देता है. इसमें वे खाते शामिल हो सकते हैं जिन्‍हें आपके द्वारा इंस्‍टॉल किए गए ऐप्स  ने बनाया है."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"ऐप्स  को फ़ोन द्वारा ज्ञात खातों की सूची प्राप्‍त करने देता है. इसमें वे खाते शामिल हो सकते हैं जिन्‍हें आपके द्वारा इंस्‍टॉल किए गए ऐप्स  ने बनाया है."</string>
     <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"खाते बनाएं और पासवर्ड सेट करें"</string>
     <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"एप्‍िलकेशन को खाता बनाने और उनके पासवर्ड प्राप्त करने और सेट करने सहित, खाता प्रबंधक की खाता प्रमाणक क्षमताओं का उपयोग करने देता है."</string>
     <string name="permlab_manageAccounts" msgid="4983126304757177305">"खाते जोडें या निकालें"</string>
-    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"एप्‍स को खाते जोड़ना और निकालना और उनके पासवर्ड हटाने जैसे कार्य करने देता है."</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"ऐप्स को खाते जोड़ना और निकालना और उनके पासवर्ड हटाने जैसे कार्य करने देता है."</string>
     <string name="permlab_useCredentials" msgid="235481396163877642">"उपकरण पर खातों का उपयोग करें"</string>
-    <string name="permdesc_useCredentials" msgid="7984227147403346422">"एप्स को प्रमाणीकरण टोकन का अनुरोध करने देता है."</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"ऐप्स  को प्रमाणीकरण टोकन का अनुरोध करने देता है."</string>
     <string name="permlab_accessNetworkState" msgid="4951027964348974773">"नेटवर्क कनेक्‍शन देखें"</string>
-    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"एप्स को नेटवर्क कनेक्‍शन के बारे में जानकारी देखने देता है जैसे कौन से नेटवर्क मौजूद हैं और कनेक्‍ट हैं."</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"ऐप्स  को नेटवर्क कनेक्‍शन के बारे में जानकारी देखने देता है जैसे कौन से नेटवर्क मौजूद हैं और कनेक्‍ट हैं."</string>
     <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"पूर्ण नेटवर्क पहुंच"</string>
-    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"एप्स को नेटवर्क सॉकेट बनाने और कस्‍टम नेटवर्क प्रोटोकॉल का उपयोग करने देता है. ब्राउज़र और अन्‍य एप्स इंटरनेट को डेटा भेजने के साधन उपलब्‍ध कराते हैं, ताकि इंटरनेट को डेटा भेजने के लिए इस अनुमति की आवश्‍यकता नहीं हो."</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"ऐप्स  को नेटवर्क सॉकेट बनाने और कस्‍टम नेटवर्क प्रोटोकॉल का उपयोग करने देता है. ब्राउज़र और अन्‍य ऐप्स  इंटरनेट को डेटा भेजने के साधन उपलब्‍ध कराते हैं, ताकि इंटरनेट को डेटा भेजने के लिए इस अनुमति की आवश्‍यकता नहीं हो."</string>
     <string name="permlab_writeApnSettings" msgid="505660159675751896">"नेटवर्क सेटिंग और ट्रैफ़िक बदलें/रोकें"</string>
-    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"एप्स को नेटवर्क सेटिंग बदलने और सभी ट्रैफ़िक नेटवर्क को बाधित और निरीक्षण करने देता है, उदाहरण के लिए किसी APN का प्रॉक्सी और पोर्ट बदलना. दुर्भावनापूर्ण एप्स आपकी जानकारी के बिना नेटवर्क पैकेट की निगरानी कर सकते हैं, उन्हें रीडायरेक्ट, या संशोधित कर सकते हैं."</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"ऐप्स  को नेटवर्क सेटिंग बदलने और सभी ट्रैफ़िक नेटवर्क को बाधित और निरीक्षण करने देता है, उदाहरण के लिए किसी APN का प्रॉक्सी और पोर्ट बदलना. दुर्भावनापूर्ण ऐप्स  आपकी जानकारी के बिना नेटवर्क पैकेट की निगरानी कर सकते हैं, उन्हें रीडायरेक्ट, या संशोधित कर सकते हैं."</string>
     <string name="permlab_changeNetworkState" msgid="958884291454327309">"नेटवर्क कनेक्‍टिविटी बदलें"</string>
-    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"एप्स को नेटवर्क कनेक्टिविटी की स्थिति बदलने देता है."</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"ऐप्स  को नेटवर्क कनेक्टिविटी की स्थिति बदलने देता है."</string>
     <string name="permlab_changeTetherState" msgid="5952584964373017960">"टेदर की गई कनेक्‍टिविटी बदलें"</string>
-    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"एप्‍स को टेदर की गई नेटवर्क कनेक्‍टिविटी की स्‍थिति बदलने देता है."</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"ऐप्स को टेदर की गई नेटवर्क कनेक्‍टिविटी की स्‍थिति बदलने देता है."</string>
     <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"पृष्ठभूमि डेटा उपयोग सेटिंग बदलें"</string>
-    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"एप्‍स को पृष्ठभूमि डेटा उपयोग सेटिंग बदलने देता है."</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"ऐप्स को पृष्ठभूमि डेटा उपयोग सेटिंग बदलने देता है."</string>
     <string name="permlab_accessWifiState" msgid="5202012949247040011">"Wi-Fi कनेक्‍शन देखें"</string>
-    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"एप्स को Wi-Fi नेटवर्क के बारे में जानकारी, जैसे WI-Fi सक्षम है या नहीं और कनेक्‍ट किए गए Wi-Fi उपकरणों के नाम, देखने देता है."</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"ऐप्स  को Wi-Fi नेटवर्क के बारे में जानकारी, जैसे WI-Fi सक्षम है या नहीं और कनेक्‍ट किए गए Wi-Fi उपकरणों के नाम, देखने देता है."</string>
     <string name="permlab_changeWifiState" msgid="6550641188749128035">"Wi-Fi से कनेक्‍ट और डिस्‍कनेक्‍ट करें"</string>
-    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"एप्स को Wi-Fi पहुंच बिंदुओं से कनेक्ट और डिस्कनेक्ट करने और Wi-Fi नेटवर्क के लिए उपकरण कॉन्फ़िगरेशन में परिवर्तन करने देता है."</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"ऐप्स  को Wi-Fi पहुंच बिंदुओं से कनेक्ट और डिस्कनेक्ट करने और Wi-Fi नेटवर्क के लिए उपकरण कॉन्फ़िगरेशन में परिवर्तन करने देता है."</string>
     <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi मल्‍टीकास्‍ट प्राप्ति को अनुमति दें"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"एप्स को Wi-Fi नेटवर्क पर मल्टीकास्ट पते के उपयोग से केवल आपके टेबलेट पर ही नहीं, बल्कि सभी उपकरणों पर भेजे गए पैकेट प्राप्‍त करने देता है. यह गैर-मल्टीकास्ट मोड से अधिक पावर का उपयोग करता है."</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"एप्स को Wi-Fi नेटवर्क पर मल्टीकास्ट पते के उपयोग से केवल आपके फ़ोन पर ही नहीं, बल्कि सभी उपकरणों पर भेजे गए पैकेट प्राप्‍त करने देता है. यह गैर-मल्टीकास्ट मोड से अधिक पावर का उपयोग करता है."</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"ऐप्स  को Wi-Fi नेटवर्क पर मल्टीकास्ट पते के उपयोग से केवल आपके टेबलेट पर ही नहीं, बल्कि सभी उपकरणों पर भेजे गए पैकेट प्राप्‍त करने देता है. यह गैर-मल्टीकास्ट मोड से अधिक पावर का उपयोग करता है."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"ऐप्स  को Wi-Fi नेटवर्क पर मल्टीकास्ट पते के उपयोग से केवल आपके फ़ोन पर ही नहीं, बल्कि सभी उपकरणों पर भेजे गए पैकेट प्राप्‍त करने देता है. यह गैर-मल्टीकास्ट मोड से अधिक पावर का उपयोग करता है."</string>
     <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"Bluetooth सेटिंग पर पहुंचें"</string>
-    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"किसी एप्‍स को स्‍थानीय Bluetooth टेबलेट कॉन्‍फ़िगर करने की और रिमोट उपकरणों के साथ खोजने और युग्‍मित करने देता है."</string>
-    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"एप्‍स को स्‍थानीय Bluetooth फ़ोन कॉन्‍फ़िगर करने देता है, और रिमोट उपकरणों के साथ खोजने और युग्‍मित करने देता है."</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"किसी ऐप्स को स्‍थानीय Bluetooth टेबलेट कॉन्‍फ़िगर करने की और रिमोट उपकरणों के साथ खोजने और युग्‍मित करने देता है."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"ऐप्स को स्‍थानीय Bluetooth फ़ोन कॉन्‍फ़िगर करने देता है, और रिमोट उपकरणों के साथ खोजने और युग्‍मित करने देता है."</string>
     <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"एप्‍लिकेशन के द्वारा Bluetooth युग्‍मन करने देती है"</string>
     <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"एप्‍लिकेशन को उपयोगकर्ता के इंटरैक्शन के बिना दूरस्‍थ उपकरणों के साथ युग्‍मित करने देती है."</string>
     <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"एप्‍लिकेशन को उपयोगकर्ता के इंटरैक्शन के बिना दूरस्‍थ उपकरणों के साथ युग्‍मित करने देती है."</string>
     <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX से कनेक्ट और डिस्कनेक्ट करें"</string>
-    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"एप्स को WiMAX सक्षम है या नहीं और कनेक्‍ट किए गए किसी WiMAX नेटवर्क के बारे में जानकारी निर्धारित करने देता है."</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"ऐप्स  को WiMAX सक्षम है या नहीं और कनेक्‍ट किए गए किसी WiMAX नेटवर्क के बारे में जानकारी निर्धारित करने देता है."</string>
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX स्‍थिति बदलें"</string>
-    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"एप्‍स को WiMAX नेटवर्क से टेबलेट को कनेक्‍ट और डिस्‍कनेक्‍ट करने देता है."</string>
-    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"एप्‍स को WiMAX नेटवर्क से फ़ोन को कनेक्‍ट और डिस्‍कनेक्‍ट करने देता है."</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"ऐप्स को WiMAX नेटवर्क से टेबलेट को कनेक्‍ट और डिस्‍कनेक्‍ट करने देता है."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"ऐप्स को WiMAX नेटवर्क से फ़ोन को कनेक्‍ट और डिस्‍कनेक्‍ट करने देता है."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"स्कोर नेटवर्क"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"ऐप्स को नेटवर्क को रैंक करने देती है और इस बात पर ज़ोर देती है कि टेबलेट को किस नेटवर्क को प्राथमिकता देनी चाहिए."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"ऐप्स को नेटवर्क को रैंक करने देती है और इस बात पर ज़ोर देती है कि फ़ोन को किस नेटवर्क को प्राथमिकता देनी चाहिए."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Bluetooth उपकरणों के साथ युग्मित करें"</string>
-    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"एप्‍स को टेबलेट पर Bluetooth का कॉन्‍फ़िगरेशन देखने, और युग्‍मित उपकरणों के साथ कनेक्‍शन बनाने और स्‍वीकार करने देता है."</string>
-    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"एप्‍स को फ़ोन पर Bluetooth का कॉन्‍फ़िगरेशन देखने, और युग्‍मित उपकरणों के साथ कनेक्‍शन बनाने और स्‍वीकार करने देता है."</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ऐप्स को टेबलेट पर Bluetooth का कॉन्‍फ़िगरेशन देखने, और युग्‍मित उपकरणों के साथ कनेक्‍शन बनाने और स्‍वीकार करने देता है."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"ऐप्स को फ़ोन पर Bluetooth का कॉन्‍फ़िगरेशन देखने, और युग्‍मित उपकरणों के साथ कनेक्‍शन बनाने और स्‍वीकार करने देता है."</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"नियर फ़ील्‍ड कम्‍यूनिकेशन नियंत्रित करें"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"एप्स को नियर फ़ील्ड कम्यूनिकेशन (NFC) टैग, कार्ड, और रीडर के साथ संचार करने देता है."</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"ऐप्स  को नियर फ़ील्ड कम्यूनिकेशन (NFC) टैग, कार्ड, और रीडर के साथ संचार करने देता है."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"अपना स्‍क्रीन लॉक अक्षम करें"</string>
-    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"एप्‍स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा अक्षम करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल प्राप्त करते समय फ़ोन, कीलॉक को अक्षम कर देता है, फिर कॉल समाप्त होने पर कीलॉक को पुन: सक्षम कर देता है."</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा अक्षम करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल प्राप्त करते समय फ़ोन, कीलॉक को अक्षम कर देता है, फिर कॉल समाप्त होने पर कीलॉक को पुन: सक्षम कर देता है."</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"समन्वयन सेटिंग पढ़ें"</string>
-    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"एप्स को किसी खाते की समन्वयन सेटिंग पढ़ने देता है. उदाहरण के लिए, इससे यह निर्धारित किया जा सकता है कि लोग एप्स किसी खाते के साथ समन्‍वयित है या नहीं."</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"ऐप्स  को किसी खाते की समन्वयन सेटिंग पढ़ने देता है. उदाहरण के लिए, इससे यह निर्धारित किया जा सकता है कि लोग ऐप्स  किसी खाते के साथ समन्‍वयित है या नहीं."</string>
     <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"समन्‍वयन बंद या चालू टॉगल करें"</string>
-    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"एप्स को किसी खाते की समन्वयन सेटिंग संशोधित करने देता है. उदाहरण के लिए, इसका उपयोग लोग एप्स का समन्‍वयन किसी खाते से सक्षम करने में हो सकता है."</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"ऐप्स  को किसी खाते की समन्वयन सेटिंग संशोधित करने देता है. उदाहरण के लिए, इसका उपयोग लोग ऐप्स  का समन्‍वयन किसी खाते से सक्षम करने में हो सकता है."</string>
     <string name="permlab_readSyncStats" msgid="7396577451360202448">"समन्वयन आंकड़े पढ़ें"</string>
-    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"एप्स को किसी खाते के समन्वयन आंकड़े, साथ ही समन्‍वयित ईवेंट का इतिहास और समन्‍वयित डेटा की मात्रा पढ़ने देता है."</string>
-    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"ग्राहकी-प्राप्त फ़ीड पढ़ें"</string>
-    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"एप्‍स को वर्तमान में समन्वयित फ़ीड के बारे में विवरण प्राप्त करने देता है."</string>
-    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"ग्राहकी-प्राप्त फ़ीड लिखें"</string>
-    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"एप्स को आपके वर्तमान समन्वयित फ़ीड को संशोधित करने देता है. दुर्भावनापूर्ण एप्स आपके समन्वयित फ़ीड को बदल सकते है."</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"ऐप्स  को किसी खाते के समन्वयन आंकड़े, साथ ही समन्‍वयित ईवेंट का इतिहास और समन्‍वयित डेटा की मात्रा पढ़ने देता है."</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्यता-प्राप्त फ़ीड पढ़ें"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"ऐप्स को वर्तमान में समन्वयित फ़ीड के बारे में विवरण प्राप्त करने देता है."</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"सदस्यता-प्राप्त फ़ीड लिखें"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"ऐप्स  को आपके वर्तमान समन्वयित फ़ीड को संशोधित करने देता है. दुर्भावनापूर्ण ऐप्स  आपके समन्वयित फ़ीड को बदल सकते है."</string>
     <string name="permlab_readDictionary" msgid="4107101525746035718">"शब्दकोश में आपके द्वारा जोड़े गए शब्‍दों को पढ़ें"</string>
-    <string name="permdesc_readDictionary" msgid="659614600338904243">"एप्‍स को ऐसे सभी शब्‍दों, नामों और वाक्यांशों को पढ़ने देता है जो संभवत: उपयोगकर्ता द्वारा उपयोगकर्ता ‍शब्दकोश में संग्रहीत किए गए हों."</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"ऐप्स को ऐसे सभी शब्‍दों, नामों और वाक्यांशों को पढ़ने देता है जो संभवत: उपयोगकर्ता द्वारा उपयोगकर्ता ‍शब्दकोश में संग्रहीत किए गए हों."</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"उपयोगकर्ता द्वारा परिभाषित शब्दकोश में शब्द जोड़ें"</string>
-    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"एप्स को उपयोगकर्ता शब्दकोश में नए शब्द लिखने देता है."</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"ऐप्स  को उपयोगकर्ता शब्दकोश में नए शब्द लिखने देता है."</string>
     <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"अपने USB संग्रहण की सामग्री पढ़ें"</string>
     <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"अपने SD कार्ड की सामग्री पढ़ें"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"एप्‍लिकेशन को आपके USB संग्रहण की सामग्री पढ़ने की अनुमति देता है."</string>
     <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"एप्‍लिकेशन को आपके SD कार्ड की सामग्री पढ़ने की अनुमति देता है."</string>
     <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"अपने USB संग्रहण की सामग्री बदलें या हटाएं"</string>
     <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"अपने SD कार्ड की सामग्री बदलें या हटाएं"</string>
-    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"एप्लि. को USB संग्रहण में लिखने देता है."</string>
-    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"एप्स को SD कार्ड पर लिखने देता है."</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"ऐप्स को USB संग्रहण में लिखने देता है."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"ऐप्स  को SD कार्ड पर लिखने देता है."</string>
     <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"आंतरिक मीडिया संग्रहण सामग्रियों को बदलें/हटाएं"</string>
-    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"एप्स को आंतरिक मीडिया संग्रहण की सामग्री को संशोधित करने देता है."</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"ऐप्स  को आंतरिक मीडिया संग्रहण की सामग्री को संशोधित करने देता है."</string>
     <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"दस्तावेज़ संग्रहण प्रबंधित करें"</string>
-    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"एप्स को दस्तावेज़ संग्रहण प्रबंधित करने की अनुमति दें."</string>
+    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"ऐप्स  को दस्तावेज़ संग्रहण प्रबंधित करने की अनुमति दें."</string>
     <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"सभी उपयोगकर्ताओं के बाहरी संग्रहण तक पहुंचें"</string>
-    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"एप्स को सभी उपयोगकर्ताओं के बाहरी संग्रहण तक पहुंचने दें."</string>
+    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"ऐप्स  को सभी उपयोगकर्ताओं के बाहरी संग्रहण तक पहुंचने दें."</string>
     <string name="permlab_cache_filesystem" msgid="5656487264819669824">"कैश फ़ाइल सिस्‍टम में पहंचे"</string>
-    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"एप्‍स को संचय फ़ाइल सिस्‍टम पढ़ने और लिखने देता है."</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"ऐप्स को संचय फ़ाइल सिस्‍टम पढ़ने और लिखने देता है."</string>
     <string name="permlab_use_sip" msgid="5986952362795870502">"इंटरनेट कॉल करें/प्राप्त करें"</string>
-    <string name="permdesc_use_sip" msgid="4717632000062674294">"एप्स को इंटरनेट कॉल करने/प्राप्त करने के लिए SIP सेवा का उपयोग करने देता है."</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"ऐप्स  को इंटरनेट कॉल करने/प्राप्त करने के लिए SIP सेवा का उपयोग करने देता है."</string>
     <string name="permlab_bind_call_service" msgid="6724009726671246551">"इन-कॉल स्क्रीन से सहभागिता करें"</string>
     <string name="permdesc_bind_call_service" msgid="8732547662442572435">"एप्लिकेशन को यह नियंत्रित करने देती है कि उपयोगकर्ता को इन-कॉल स्क्रीन कब और कैसी दिखाई देती है."</string>
     <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"ऐतिहासिक नेटवर्क उपयोग पढें"</string>
-    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"किसी एप्स को विशिष्ट नेटवर्क और एप्‍स के लिए ऐतिहासिक नेटवर्क उपयोग को पढ़ने देता है."</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"किसी ऐप्स  को विशिष्ट नेटवर्क और ऐप्स के लिए ऐतिहासिक नेटवर्क उपयोग को पढ़ने देता है."</string>
     <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"नेटवर्क नीति प्रबंधित करें"</string>
-    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"एप्‍स को नेटवर्क नीतियां प्रबंधित करने और एप्‍स-विशिष्‍ट नियमों को परिभाषित करने देता है."</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"ऐप्स को नेटवर्क नीतियां प्रबंधित करने और ऐप्स-विशिष्‍ट नियमों को परिभाषित करने देता है."</string>
     <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"नेटवर्क उपयोग हिसाब बदलें"</string>
-    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"एप्स को यह संशोधित करने देता है कि एप्‍स की तुलना में नेटवर्क उपयोग का मूल्यांकन कैसे किया जाता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"ऐप्स  को यह संशोधित करने देता है कि ऐप्स की तुलना में नेटवर्क उपयोग का मूल्यांकन कैसे किया जाता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"सॉकेट मार्क बदलें"</string>
-    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"एप्स को रूटिंग के लिए सॉकेट मार्क बदलने देता है"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"ऐप्स  को रूटिंग के लिए सॉकेट मार्क बदलने देता है"</string>
     <string name="permlab_accessNotifications" msgid="7673416487873432268">"सूचनाओं तक पहुंचें"</string>
-    <string name="permdesc_accessNotifications" msgid="458457742683431387">"एप्स को सूचनाओं को प्राप्त करने, जांच करने, और साफ़ करने देता है, जिनमें अन्य एप्स के द्वारा पोस्ट की गई सूचनाएं भी शामिल हैं."</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"ऐप्स  को सूचनाओं को प्राप्त करने, जांच करने, और साफ़ करने देता है, जिनमें अन्य ऐप्स  के द्वारा पोस्ट की गई सूचनाएं भी शामिल हैं."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"सूचना श्रवणकर्ता सेवा से जुड़ें"</string>
-    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"धारक को सूचना श्रवणकर्ता सेवा के शीर्ष स्तरीय इंटरफ़ेस से जुड़ने देती है. सामान्य एप्स के लिए कभी भी आवश्यक नहीं होनी चाहिए."</string>
-    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"वाहक के द्वारा उपलब्ध कराया गया कॉन्फ़िगरेशन एप्स प्रारंभ करें"</string>
-    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"धारक को वाहक के द्वारा उपलब्ध कराया गया कॉन्फ़िगरेशन एप्स प्रारंभ करने देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"धारक को सूचना श्रवणकर्ता सेवा के शीर्ष स्तरीय इंटरफ़ेस से जुड़ने देती है. सामान्य ऐप्स  के लिए कभी भी आवश्यक नहीं होनी चाहिए."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"किसी स्थिति प्रदाता सेवा से आबद्ध हों"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"धारक को किसी स्थिति प्रदाता सेवा के शीर्ष-स्तर के इंटरफ़ेस से आबद्ध होने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"वाहक के द्वारा उपलब्ध कराया गया कॉन्फ़िगरेशन ऐप्स  प्रारंभ करें"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"धारक को वाहक के द्वारा उपलब्ध कराया गया कॉन्फ़िगरेशन ऐप्स  प्रारंभ करने देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"नेटवर्क स्थितियों के अवलोकनों को सुनें"</string>
-    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"एप्स को नेटवर्क स्थितियों के अवलोकनों को सुनने देता है. सामान्य एप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"ऐप्स  को नेटवर्क स्थितियों के अवलोकनों को सुनने देता है. सामान्य ऐप्स  के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"इनपुट उपकरण कैलिब्रेशन बदलें"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"ऐप्स को टच स्क्रीन के कैलिब्रेशन पैरामीटर को बदलने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यक नहीं होना चाहिए."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM प्रमाणपत्र एक्सेस करें"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"एप्लिकेशन को DRM प्रमाणपत्रों का प्रावधान और उपयोग करने देती है. सामान्य ऐप्स के लिए कभी भी आवश्यकता नहीं होना चाहिए."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"पासवर्ड नियम सेट करें"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"स्‍क्रीन-अनलॉक पासवर्ड में अनुमति प्राप्त लंबाई और वर्णों को नियंत्रित करें."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"स्‍क्रीन-अनलॉक के प्रयासों पर निगरानी रखें"</string>
@@ -691,7 +750,7 @@
     <string name="policylab_expirePassword" msgid="885279151847254056">"स्‍क्रीन लॉक करें पासवर्ड समाप्ति सेट करें"</string>
     <string name="policydesc_expirePassword" msgid="1729725226314691591">"नियंत्रित करें कि कितने समय में लॉक-स्‍क्रीन पासवर्ड बदला जाना चाहिए."</string>
     <string name="policylab_encryptedStorage" msgid="8901326199909132915">"संग्रहण एन्‍क्रिप्‍शन सेट करें"</string>
-    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"संग्रहीत एप्‍स डेटा को एन्क्रिप्ट किया जाना आवश्‍यक है."</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"संग्रहीत ऐप्स डेटा को एन्क्रिप्ट किया जाना आवश्‍यक है."</string>
     <string name="policylab_disableCamera" msgid="6395301023152297826">"कैमरों को अक्षम करें"</string>
     <string name="policydesc_disableCamera" msgid="2306349042834754597">"सभी उपकरण कैमरों का उपयोग रोकें."</string>
     <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"कीगार्ड में सुविधाएं अक्षम करें"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"घर"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"कार्यालय"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"अन्य"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"इस संपर्क को देखने के लिए कोई एप्लिकेशन नहीं मिला."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"पिन कोड लिखें"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK और नया पिन कोड लिखें"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string>
@@ -940,24 +1000,24 @@
     <string name="autofill_area" msgid="3547409050889952423">"क्षेत्र"</string>
     <string name="autofill_emirate" msgid="2893880978835698818">"अमीरात"</string>
     <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"अपने वेब बुकमार्क और इतिहास पढ़ें"</string>
-    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"एप्स को ब्राउज़र द्वारा विज़िट किए गए सभी URL के इतिहास, और सभी ब्राउज़र बुकमार्क पढ़ने देता है. ध्‍यान दें: यह अनुमति तृतीय-पक्ष ब्राउज़र या वेब ब्राउज़िंग क्षमताओं वाले अन्‍य एप्स द्वारा लागू नहीं की जा सकती."</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"ऐप्स  को ब्राउज़र द्वारा विज़िट किए गए सभी URL के इतिहास, और सभी ब्राउज़र बुकमार्क पढ़ने देता है. ध्‍यान दें: यह अनुमति तृतीय-पक्ष ब्राउज़र या वेब ब्राउज़िंग क्षमताओं वाले अन्‍य ऐप्स  द्वारा लागू नहीं की जा सकती."</string>
     <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"वेब बुकमार्क और इतिहास लिखें"</string>
-    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"एप्स को आपके टेबलेट में संग्रहीत ब्राउज़र के इतिहास या बुकमार्क को संशोधित करने देता है. इससे एप्स ब्राउज़र डेटा को मिटा सकता है या संशोधित कर सकता है. ध्‍यान दें: यह अनुमति तृतीय-पक्ष ब्राउज़र या वेब ब्राउज़िंग क्षमताओं वाले अन्‍य एप्स द्वारा लागू नहीं की जा सकती."</string>
-    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"एप्स को आपके फ़ोन में संग्रहीत ब्राउज़र के इतिहास या बुकमार्क को संशोधित करने देता है. इससे एप्स ब्राउज़र डेटा को मिटा सकता है या संशोधित कर सकता है. ध्‍यान दें: यह अनुमति तृतीय-पक्ष ब्राउज़र या वेब ब्राउज़िंग क्षमताओं वाले अन्‍य एप्स द्वारा लागू नहीं की जा सकती."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"ऐप्स  को आपके टेबलेट में संग्रहीत ब्राउज़र के इतिहास या बुकमार्क को संशोधित करने देता है. इससे ऐप्स  ब्राउज़र डेटा को मिटा सकता है या संशोधित कर सकता है. ध्‍यान दें: यह अनुमति तृतीय-पक्ष ब्राउज़र या वेब ब्राउज़िंग क्षमताओं वाले अन्‍य ऐप्स  द्वारा लागू नहीं की जा सकती."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"ऐप्स  को आपके फ़ोन में संग्रहीत ब्राउज़र के इतिहास या बुकमार्क को संशोधित करने देता है. इससे ऐप्स  ब्राउज़र डेटा को मिटा सकता है या संशोधित कर सकता है. ध्‍यान दें: यह अनुमति तृतीय-पक्ष ब्राउज़र या वेब ब्राउज़िंग क्षमताओं वाले अन्‍य ऐप्स  द्वारा लागू नहीं की जा सकती."</string>
     <string name="permlab_setAlarm" msgid="1379294556362091814">"अलार्म सेट करें"</string>
-    <string name="permdesc_setAlarm" msgid="316392039157473848">"एप्‍स को इंस्‍टॉल किए गए अलार्म घड़ी एप्‍स में अलार्म सेट करने देता है. हो सकता है कुछ अलार्म घड़ी एप्‍स में यह सुविधा न हो."</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"ऐप्स को इंस्‍टॉल किए गए अलार्म घड़ी ऐप्स में अलार्म सेट करने देता है. हो सकता है कुछ अलार्म घड़ी ऐप्स में यह सुविधा न हो."</string>
     <string name="permlab_addVoicemail" msgid="5525660026090959044">"ध्‍वनिमेल जोड़ें"</string>
-    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"एप्स को आपके ध्‍वनिमेल इनबॉक्‍स में संदेश जोड़ने देता है."</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"ऐप्स  को आपके ध्‍वनिमेल इनबॉक्‍स में संदेश जोड़ने देता है."</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"ब्राउज़र भौगोलिक-स्थान अनुमतियों को बदलें"</string>
-    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"एप्‍स को ब्राउज़र के भौगोलिक-स्‍थान की अनुमतियां संशोधित करने देता है. दुर्भावनापूर्ण एप्‍स इसका उपयोग एकपक्षीय वेबसाइट को स्‍थान जानकारी भेजने में कर सकते हैं."</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"ऐप्स को ब्राउज़र के भौगोलिक-स्‍थान की अनुमतियां संशोधित करने देता है. दुर्भावनापूर्ण ऐप्स इसका उपयोग एकपक्षीय वेबसाइट को स्‍थान जानकारी भेजने में कर सकते हैं."</string>
     <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"पैकेज सत्‍यापि‍त करें"</string>
     <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"एप्‍लि‍केशन को इंस्‍टॉल करने योग्‍य पैकेज सत्‍यापि‍त करने देता है."</string>
     <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"पैकेज प्रमाणक से आबद्ध करें"</string>
-    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"धारक को पैकेज प्रमाणक के अनुरोध की अनुमति‍ देता है. सामान्‍य एप्‍स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"धारक को पैकेज प्रमाणक के अनुरोध की अनुमति‍ देता है. सामान्‍य ऐप्स के लिए कभी भी आवश्‍यक नहीं होना चाहिए."</string>
     <string name="permlab_serialPort" msgid="546083327654631076">"सीरियल पोर्ट पर पहुंचें"</string>
     <string name="permdesc_serialPort" msgid="2991639985224598193">"SerialManager API का उपयोग करके धारक को सीरियल पोर्ट पर पहुंच प्रदान करता है."</string>
     <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"बाह्य रूप से सामग्री प्रदाताओं पर पहुंच"</string>
-    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"धारक को शेल से सामग्री प्रदाताओं तक पहुंचने देता है. सामान्य एप्स के लिए कभी भी आवश्यकता नहीं होनी चाहिए."</string>
+    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"धारक को शेल से सामग्री प्रदाताओं तक पहुंचने देता है. सामान्य ऐप्स  के लिए कभी भी आवश्यकता नहीं होनी चाहिए."</string>
     <string name="permlab_updateLock" msgid="3527558366616680889">"अपनेआप उपकरण की नई जानकारी न लें"</string>
     <string name="permdesc_updateLock" msgid="1655625832166778492">"धारक को उपकरण अपग्रेड करने के लिए, गैर-सहभागी रीबूट के ठीक समय के बारे में सिस्टम पर जानकारी प्रस्तुत करने देता है."</string>
     <string name="save_password_message" msgid="767344687139195790">"क्‍या आप चाहते हैं कि ब्राउज़र पासवर्ड को याद रखे?"</string>
@@ -1105,7 +1165,7 @@
     <string name="low_internal_storage_view_title" msgid="5576272496365684834">"संग्रहण स्‍थान समाप्‍त हो रहा है"</string>
     <string name="low_internal_storage_view_text" msgid="6640505817617414371">"हो सकता है कुछ सिस्टम फ़ंक्शन कार्य न करें"</string>
     <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> चल रहा है"</string>
-    <string name="app_running_notification_text" msgid="4653586947747330058">"अधिक जानकारी के लिए या एप्स रोकने के लिए स्पर्श करें."</string>
+    <string name="app_running_notification_text" msgid="4653586947747330058">"अधिक जानकारी के लिए या ऐप्स  रोकने के लिए स्पर्श करें."</string>
     <string name="ok" msgid="5970060430562524910">"ठीक है"</string>
     <string name="cancel" msgid="6442560571259935130">"रद्द करें"</string>
     <string name="yes" msgid="5362982303337969312">"ठीक है"</string>
@@ -1119,8 +1179,8 @@
     <string name="alwaysUse" msgid="4583018368000610438">"इस क्रिया के लिए डिफ़ॉल्‍ट रूप से उपयोग करें."</string>
     <string name="clearDefaultHintMsg" msgid="3252584689512077257">"सिस्‍टम सेटिंग &gt; Apps &gt; डाउनलोड किए गए में डिफ़ॉल्‍ट साफ करें."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"कोई क्रिया चुनें"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB उपकरण के लिए कोई एप्स चुनें"</string>
-    <string name="noApplications" msgid="2991814273936504689">"कोई भी एप्‍स यह कार्यवाही नहीं कर सकता."</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB उपकरण के लिए कोई ऐप्स  चुनें"</string>
+    <string name="noApplications" msgid="2991814273936504689">"कोई भी ऐप्स यह कार्यवाही नहीं कर सकता."</string>
     <string name="aerr_title" msgid="1905800560317137752"></string>
     <string name="aerr_application" msgid="932628488013092776">"दुर्भाग्‍यवश, <xliff:g id="APPLICATION">%1$s</xliff:g> रुक गया है."</string>
     <string name="aerr_process" msgid="4507058997035697579">"दुर्भाग्‍यवश, <xliff:g id="PROCESS">%1$s</xliff:g> प्रक्रिया रुक गई है."</string>
@@ -1139,20 +1199,20 @@
     <string name="screen_compat_mode_scale" msgid="3202955667675944499">"स्केल"</string>
     <string name="screen_compat_mode_show" msgid="4013878876486655892">"हमेशा दिखाएं"</string>
     <string name="screen_compat_mode_hint" msgid="1064524084543304459">"इसे सिस्‍टम सेटिंग &gt; Apps &gt; डाउनलोड किए गए में पुन: सक्षम करें."</string>
-    <string name="smv_application" msgid="3307209192155442829">"एप्‍स <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ने उसकी स्‍वयं लागू होने वाली StrictMode नीति का उल्‍लंघन किया है."</string>
+    <string name="smv_application" msgid="3307209192155442829">"ऐप्स <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ने उसकी स्‍वयं लागू होने वाली StrictMode नीति का उल्‍लंघन किया है."</string>
     <string name="smv_process" msgid="5120397012047462446">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> ने उसकी स्‍व-प्रवर्तित StrictMode नीति का उल्‍लंघन किया है."</string>
     <string name="android_upgrading_title" msgid="1584192285441405746">"Android अपग्रेड हो रहा है..."</string>
-    <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> में से <xliff:g id="NUMBER_0">%1$d</xliff:g> एप्स अनुकूलित हो रहा है."</string>
-    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"एप्स प्रारंभ होने वाले हैं"</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> में से <xliff:g id="NUMBER_0">%1$d</xliff:g> ऐप्स  अनुकूलित हो रहा है."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"ऐप्स  प्रारंभ होने वाले हैं"</string>
     <string name="android_upgrading_complete" msgid="1405954754112999229">"बूट समाप्‍त हो रहा है."</string>
     <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> चल रही है"</string>
-    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"एप्‍स पर स्‍विच करने के लिए स्‍पर्श करें"</string>
-    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"एप्स स्विच करें?"</string>
-    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"दूसरा एप्स पहले से चल रहा है जिसे किसी नए एप्‍स को प्रारंभ करने के पहले बंद किया जाना आवश्‍यक है."</string>
+    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"ऐप्स पर स्‍विच करने के लिए स्‍पर्श करें"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"ऐप्स  स्विच करें?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"दूसरा ऐप्स  पहले से चल रहा है जिसे किसी नए ऐप्स को प्रारंभ करने के पहले बंद किया जाना आवश्‍यक है."</string>
     <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> पर वापस लौटें"</string>
-    <string name="old_app_description" msgid="2082094275580358049">"नया एप्‍स प्रारंभ न करें."</string>
+    <string name="old_app_description" msgid="2082094275580358049">"नया ऐप्स प्रारंभ न करें."</string>
     <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> प्रारंभ करें"</string>
-    <string name="new_app_description" msgid="1932143598371537340">"पुराने एप्‍स को बिना सहेजे बंद करें."</string>
+    <string name="new_app_description" msgid="1932143598371537340">"पुराने ऐप्स को बिना सहेजे बंद करें."</string>
     <string name="sendText" msgid="5209874571959469142">"पाठ के लिए किसी क्रिया को चुनें"</string>
     <string name="volume_ringtone" msgid="6885421406845734650">"रिंगर वॉल्‍यूम"</string>
     <string name="volume_music" msgid="5421651157138628171">"मीडिया वॉल्‍यूम"</string>
@@ -1204,7 +1264,7 @@
     <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"फ़ोन <xliff:g id="DEVICE_NAME">%1$s</xliff:g> से कनेक्ट रहते समय Wi-Fi से अस्थायी रूप से डिस्कनेक्ट हो जाएगा"</string>
     <string name="select_character" msgid="3365550120617701745">"वर्ण सम्‍मिलित करें"</string>
     <string name="sms_control_title" msgid="7296612781128917719">"SMS संदेश भेज रहा है"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; बड़ी संख्या में SMS संदेश भेज रहा है. क्या आप इस एप्स को संदेश भेजना जारी रखने देना चाहते हैं?"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; बड़ी संख्या में SMS संदेश भेज रहा है. क्या आप इस ऐप्स  को संदेश भेजना जारी रखने देना चाहते हैं?"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"अनुमति दें"</string>
     <string name="sms_control_no" msgid="625438561395534982">"अस्वीकार करें"</string>
     <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt;, &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt; पर संदेश भेजना चाहता है."</string>
@@ -1213,7 +1273,7 @@
     <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"भेजें"</string>
     <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"रद्द करें"</string>
     <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"मेरी पसंद को याद रखें"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"आप इसे बाद में सेटिंग &gt; एप्स में बदल सकते हैं"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"आप इसे बाद में सेटिंग &gt; ऐप्स  में बदल सकते हैं"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"हमेशा अनुमति दें"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"कभी भी अनुमति न दें"</string>
     <string name="sim_removed_title" msgid="6227712319223226185">"सिमकार्ड निकाला गया"</string>
@@ -1247,7 +1307,7 @@
     <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB संग्रहण बंद करें"</string>
     <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"USB संग्रहण बंद करने में कोई समस्‍या हुई थी. जांचें कि आपने USB होस्‍ट अनमाउंट किया है या नहीं, तब पुन: प्रयास करें."</string>
     <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB संग्रहण चालू करें"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"यदि आप USB संग्रहण चालू करते हैं, तो आपके द्वारा उपयोग किए जा रहे कुछ एप्‍स रुक जाएंगे और हो सकता है कि वे तब तक अनुपलब्‍ध रहें जब तक कि आप USB संग्रहण बंद नहीं कर देते."</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"यदि आप USB संग्रहण चालू करते हैं, तो आपके द्वारा उपयोग किए जा रहे कुछ ऐप्स रुक जाएंगे और हो सकता है कि वे तब तक अनुपलब्‍ध रहें जब तक कि आप USB संग्रहण बंद नहीं कर देते."</string>
     <string name="dlg_error_title" msgid="7323658469626514207">"USB कार्यवाही विफल"</string>
     <string name="dlg_ok" msgid="7376953167039865701">"ठीक है"</string>
     <string name="usb_mtp_notification_title" msgid="3699913097391550394">"किसी मीडिया उपकरण के रूप में कनेक्‍ट किया गया"</string>
@@ -1296,15 +1356,21 @@
     <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD कार्ड निकाला गया. एक नया सम्‍मिलित करें."</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"कोई मिलती-जुलती गतिविधि नहीं मिली."</string>
     <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"घटक उपयोग आंकड़ों की नई जानकारी पाएं"</string>
-    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"एप्‍स को घटक उपयोग के संकलित आंकड़े संशोधित करने देता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"ऐप्स को घटक उपयोग के संकलित आंकड़े संशोधित करने देता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_copyProtectedData" msgid="4341036311211406692">"सामग्री की प्रतिलिपि बनाएं"</string>
-    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"एप्स को सामग्री की प्रतिलिपि बनाने के लिए डिफ़ॉल्ट कंटेनर सेवा शुरू करने देता है. सामान्‍य एप्‍स द्वारा उपयोग करने के लिए नहीं."</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"ऐप्स  को सामग्री की प्रतिलिपि बनाने के लिए डिफ़ॉल्ट कंटेनर सेवा शुरू करने देता है. सामान्‍य ऐप्स द्वारा उपयोग करने के लिए नहीं."</string>
     <string name="permlab_route_media_output" msgid="1642024455750414694">"मीडिया आउटपुट को रूट करें"</string>
-    <string name="permdesc_route_media_output" msgid="4932818749547244346">"एप्स को मीडिया आउटपुट को अन्य बाहरी उपकरणों पर रूट करने देता है."</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"ऐप्स  को मीडिया आउटपुट को अन्य बाहरी उपकरणों पर रूट करने देता है."</string>
     <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"कीगार्ड सुरक्षित संग्रहण एक्सेस करें"</string>
-    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"एप्स को कीगार्ड सुरक्षित संग्रहण एक्सेस करने देती है."</string>
+    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"ऐप्स  को कीगार्ड सुरक्षित संग्रहण एक्सेस करने देती है."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"कीगार्ड दिखाना और छिपाना नियंत्रित करें"</string>
-    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"एप्स को कीगार्ड नियंत्रित करने देती है."</string>
+    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"ऐप्स  को कीगार्ड नियंत्रित करने देती है."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"ट्रस्ट स्थिति बदलावों को सुनें."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"किसी एप्लिकेशन को ट्रस्ट स्थिति के बदलावों को सुनने की अनुमति देती है."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ट्रस्ट एजेंट सेवा से आबद्ध करना"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"किसी एप्लिकेशन को ट्रस्ट एजेंट सेवा से आबद्ध करने की अनुमति देती है."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"अपडेट और पुनर्प्राप्ति सिस्टम के साथ सहभागिता करें"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"एप्लिकेशन को पुनर्प्राप्ति सिस्टम और सिस्टम अपडेट के साथ सहभागिता करने देती है."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ज़ूम नियंत्रण के लिए दो बार स्पर्श करें"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"विजेट नहीं जोड़ा जा सका."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"जाएं"</string>
@@ -1316,7 +1382,7 @@
     <string name="ime_action_default" msgid="2840921885558045721">"निष्‍पादित करें"</string>
     <string name="dial_number_using" msgid="5789176425167573586">"<xliff:g id="NUMBER">%s</xliff:g> के उपयोग द्वारा \n नंबर डायल करें"</string>
     <string name="create_contact_using" msgid="4947405226788104538">"<xliff:g id="NUMBER">%s</xliff:g> का उपयोग करके\n संपर्क बनाएं"</string>
-    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"निम्‍न एक या अधिक एप्‍स अभी और भविष्‍य में आपके खाते में पहुंच की अनुमति का अनुरोध करते हैं."</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"निम्‍न एक या अधिक ऐप्स अभी और भविष्‍य में आपके खाते में पहुंच की अनुमति का अनुरोध करते हैं."</string>
     <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"क्या आप इस अनुरोध को अनुमति देना चाहते हैं?"</string>
     <string name="grant_permissions_header_text" msgid="6874497408201826708">"पहुंच अनुरोध"</string>
     <string name="allow" msgid="7225948811296386551">"अनुमति दें"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"वॉलपेपर"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"वॉलपेपर बदलें"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"सूचना श्रवणकर्ता"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"स्थिति प्रदाता"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN सक्रिय"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN को <xliff:g id="APP">%s</xliff:g> द्वारा सक्रिय किया गया है"</string>
     <string name="vpn_text" msgid="3011306607126450322">"नेटवर्क प्रबंधित करने के लिए स्‍पर्श करें."</string>
@@ -1413,19 +1480,11 @@
     <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string>
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
-    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"कोई एप्‍स चुनें"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"कोई ऐप्स चुनें"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> को लॉन्च नहीं किया जा सका"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"इसके साथ साझा करें:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> के साथ साझा करें"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"स्लाइडिंग हैंडल. स्पर्श करके रखें."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर स्‍लाइड करें."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए नीचे स्‍लाइड करें."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए बाएं स्‍लाइड करें."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए दाएं स्‍लाइड करें."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"अनलॉक करें"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"कैमरा"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"मौन"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"ध्‍वनि चालू करें"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"खोजें"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"अनलॉक करने के लिए स्‍वाइप करें."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"बोली गईं पासवर्ड कुंजियां सुनने के लिए हेडसेट प्‍लग इन करें."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"बिंदु."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"सिस्‍टम"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ऑडियो"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"वायरलेस प्रदर्शन"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"पूर्ण"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"मीडिया आउटपुट"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"उपकरण से कनेक्ट करें"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"स्क्रीन को उपकरण में कास्ट करें"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"उपकरण खोजे जा रहे हैं…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"सेटिंग"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"डिस्कनेक्ट करें"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"स्‍कैन कर रहा है..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"कनेक्ट हो रहा है..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"उपलब्ध"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ओवरले #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", सुरक्षित"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"वायरलेस डिस्प्ले कनेक्ट है"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"यह स्क्रीन अन्य उपकरण पर दिखाई दे रही है"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"स्क्रीन कास्ट हो रही है"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"<xliff:g id="NAME">%1$s</xliff:g> से कनेक्ट हो रहा है"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"स्क्रीन कास्ट हो रही है"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"<xliff:g id="NAME">%1$s</xliff:g> से कनेक्ट है"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"डिस्कनेक्ट करें"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"आपातकालीन कॉल"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"आकार भूल गए"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलॉक कर रहा है…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ऐसा PIN लिखें, जो 4 से 8 अंकों का हो."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK कोड 8 या अधिक संख्या वाला होना चाहिए."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK कोड 8 अंकों का होना चाहिए."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"सही PUK कोड पुन: डालें. बार-बार प्रयास करने से सिम स्थायी रूप से अक्षम हो जाएगी."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"पिन कोड का मिलान नहीं होता"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"बहुत अधिक आकार प्रयास"</string>
@@ -1543,8 +1608,8 @@
     <string name="user_switched" msgid="3768006783166984410">"वर्तमान उपयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>."</string>
     <string name="owner_name" msgid="2716755460376028154">"स्वामी"</string>
     <string name="error_message_title" msgid="4510373083082500195">"त्रुटि"</string>
-    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"यह एप्स प्रतिबंधित प्रोफ़ाइल के खातों का समर्थन नहीं करता है"</string>
-    <string name="app_not_found" msgid="3429141853498927379">"इस कार्यवाही को प्रबंधित करने के लिए कोई एप्स नहीं मिला"</string>
+    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"यह ऐप्स  प्रतिबंधित प्रोफ़ाइल के खातों का समर्थन नहीं करता है"</string>
+    <string name="app_not_found" msgid="3429141853498927379">"इस कार्यवाही को प्रबंधित करने के लिए कोई ऐप्स  नहीं मिला"</string>
     <string name="revoke" msgid="5404479185228271586">"निरस्‍त करें"</string>
     <string name="mediasize_iso_a0" msgid="1994474252931294172">"ISO A0"</string>
     <string name="mediasize_iso_a1" msgid="3333060421529791786">"ISO A1"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"बाद में पुनः प्रयास करें"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"पूर्ण स्क्रीन से बाहर आने के लिए ऊपर से नीचे स्वाइप करें."</string>
+    <string name="done_label" msgid="2093726099505892398">"पूर्ण"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"घंटो का चक्राकार स्लाइडर"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"मिनटों का चक्राकार स्लाइडर"</string>
+    <string name="select_hours" msgid="6043079511766008245">"घंटे चुनें"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"मिनट चुनें"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"दिनों की माह ग्रिड"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"वर्ष की सूची"</string>
+    <string name="select_day" msgid="7774759604701773332">"माह और दिन चुनें"</string>
+    <string name="select_year" msgid="7952052866994196170">"वर्ष चुनें"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> चयनित"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> को हटा दिया गया"</string>
 </resources>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index 37dc141..a195512 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez naslova&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Upišite PUK koji se sastoji od barem 8 brojeva."</string>
     <string name="needPuk" msgid="919668385956251611">"Vaša je SIM kartica zaključana PUK-om. Unesite PUK kôd da biste je otključali."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Unesite PUK2 da biste odblokirali SIM karticu."</string>
+    <string name="enablePin" msgid="209412020907207950">"Neuspješno; omogući zaključavanje SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Imate još <xliff:g id="NUMBER">%d</xliff:g> pokušaj prije zaključavanja SIM kartice."</item>
+    <item quantity="other" msgid="7530597808358774740">"Imate još nekoliko preostalih pokušaja (<xliff:g id="NUMBER">%d</xliff:g>) prije zaključavanja SIM kartice."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID dolaznog pozivatelja"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinkronizacija"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Previše brisanja stavki <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Prostor za pohranu tabletnog računala pun je. Izbrišite nekoliko datoteka kako biste oslobodili prostor."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Memorija sata je puna. Izbrišite neke datoteke da biste oslobodili prostor."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Prostor za pohranu na telefonu je pun. Izbrišite nekoliko datoteka kako biste oslobodili prostor."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Mreža se možda nadzire"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Od strane nepoznate treće strane"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Zvono uključeno"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Isključivanje..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Vaš tabletni uređaj će se isključiti."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Sat će se isključiti."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Vaš će se telefon isključiti."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Želite li isključiti uređaj?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Ponovno pokretanje u sigurnom načinu rada"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Način rada u zrakoplovu"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Uključen je način rada u zrakoplovu"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Isključen je način rada u zrakoplovu"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Postavke"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Siguran način rada"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sustav Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"deinstaliranje prečaca"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Aplikaciji omogućuje uklanjanje prečaca početnog zaslona bez intervencije korisnika."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"preusmjeravanje odlaznih poziva"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Aplikaciji omogućuje obradu odlaznih poziva i promjenu broja za biranje. Ta dozvola aplikaciji omogućuje nadziranje, preusmjeravanje ili sprječavanje odlaznih poziva."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Omogućuje aplikaciji da vidi broj koji se bira prilikom odlaznog poziva uz opciju preusmjeravanja poziva na neki drugi broj ili prekidanja poziva."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"primanje tekstnih poruka (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Aplikaciji omogućuje primanje i obradu SMS poruka. To znači da aplikacija može nadzirati ili izbrisati poruke poslane na vaš uređaj, a da vam ih ne prikaže."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"primanje tekstnih poruka (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Omogućuje aplikaciji dohvaćanje sadržaja aktivnog prozora. Zlonamjerne aplikacije mogu dohvatiti sav sadržaj prozora i pregledati sav njegov tekst osim zaporki."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"privremeno omogući dostupnost"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Aplikacija može privremeno omogućiti dostupnost na uređaju. Zlonamjerne aplikacije mogu omogućiti dostupnost bez korisnikova odobrenja."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"dohvaćanje informacija o prozoru"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Aplikaciji omogućuje dohvaćanje informacija o prozorima iz upravitelja prozora. Zlonamjerne aplikacije mogu dohvaćati informacije koje su namijenjene za internu uporabu sustava."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"učitavanje prozora tokena"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Omogućuje aplikaciji učitavanje tokena prozora. Zlonamjerne aplikacije mogu stupati u neovlaštenu interakciju s prozorom aplikacije lažno se predstavljajući kao sustav."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"učitavanje statističkih pokazatelja okvira"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Omogućuje aplikaciji prikupljanje statističkih podataka okvira. Zlonamjerne aplikacije mogu pratiti statističke podatke okvira prozora iz drugih aplikacija."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtriranje događaja"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Aplikaciji omogućuje registraciju ulaznog filtra koji filtrira strujanje svih korisničkih događaja prije otpreme. Zlonamjerne aplikacije mogu kontrolirati korisničko sučelje sustava bez znanja korisnika."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"uvećaj prikaz"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Omogućuje aplikaciji uvećavanje sadržaja zaslona. Zlonamjerne aplikacije mogu izmijeniti sadržaj zaslona tako da uređaj postane neupotrebljiv."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"djelomično isključivanje"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Postavlja upravitelja za aktivnost u stanje mirovanja. Ne isključuje ga u potpunosti."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"sprečavanje promjene aplikacije"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Omogućuje aplikaciji emitiranje obavijesti da je primljena SMS poruka. Zlonamjerne aplikacije mogu to upotrijebiti za krivotvorenje dolaznih SMS poruka."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"slanje WAP-PUSH-primljenih prijenosa"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Omogućuje aplikaciji emitiranje obavijesti da je primljena WAP PUSH poruka. Zlonamjerne aplikacije mogu to upotrijebiti da bi krivotvorile prijem MMS poruka ili da bi potajno zamijenile sadržaj bilo koje web-stranice zlonamjernim varijantama."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"slanje obavijesti za ocjenjivanje mreža"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Aplikaciji omogućuje emitiranje obavijesti da se mreža treba ocijeniti. Nije potrebno za normalne aplikacije."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ograničavanje broja pokrenutih postupaka"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Omogućuje aplikaciji upravljanje maksimalnim brojem postupaka koji će biti pokrenuti. Nikada nije potrebno za uobičajene aplikacije."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"prisilno zatvaranje pozadinskih aplikacija"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Nositelju omogućuje vezanje uz sučelje najviše razine VPN usluge. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"povezano s pozadinskom slikom"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Nositelju omogućuje povezivanje sa sučeljem pozadinske slike najviše razine. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"povezivanje s uslugom glasovne interakcije"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Vlasniku omogućuje povezivanje sa sučeljem najviše razine usluge glasovne interakcije. Nije potrebno za normalne aplikacije."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"vezanje uz udaljeni zaslon"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Nositelju omogućuje vezanje uza sučelje najviše razine udaljenog zaslona. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vezanje na uslugu widgeta"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Nositelju omogućuje vezanje uz sučelje najviše razine usluge widgeta. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"povezivanje s davateljem usluge usmjeravanja poziva"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Nositelju omogućuje povezivanje s registriranim davateljem usluga usmjeravanja poziva. Nije potrebno za normalne aplikacije."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interakcija s administratorom uređaja"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Nositelju omogućuje slanje namjera administratoru uređaja. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"povezivanje s TV ulazom"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Nositelju omogućuje vezanje uz sučelje najviše razine TV ulaza. Ne bi smjelo biti potrebno za normalne aplikacije."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"dodavanje ili uklanjanje administratora uređaja"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Omogućuje nositelju dodavanje ili uklanjanje administratora aktivnih uređaja. Nikada ne bi trebalo biti potrebno za uobičajene aplikacije."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"promjena orijentacije zaslona"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Aplikaciji omogućuje korištenje bilo kojim instaliranim dekoderom medija za dekodiranje radi reprodukcije."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"upravljanje pouzdanim vjerodajnicama"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Omogućuje aplikaciji instaliranje i deinstaliranje CA certifikata kao pouzdanih vjerodajnica."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"izvodi aplikaciju tijekom mirovanja"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"To dopuštenje omogućuje sustavu Android da izvodi aplikaciju u pozadini dok se uređaj ne upotrebljava."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"pisanje/čitanje u resursima čije je vlasnik dijagnostika"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Aplikaciji omogućuje čitanje i pisanje na bilo koji resurs u vlasništvu dijag. grupe; na primjer, datoteke u sustavu /dev. To bi moglo utjecati na stabilnost sustava i sigurnost. Dozvolu bi trebao upotrebljavati proizvođač ili operater SAMO za dijagnostiku koja se odnosi na hardver."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"omogućavanje ili onemogućavanje komponenti aplikacije"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Aplikaciji omogućuje čitanje osobnih podataka profila pohranjenih na uređaju, kao što su vaše ime ili kontaktni podaci. To znači da vas aplikacija može identificirati i slati informacije s vašeg profila drugima."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"izmjena vaše kontaktne kartice"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Aplikaciji omogućuje promjenu ili dodavanje osobnih podataka profila pohranjenih na uređaju, kao što su vaše ime i kontaktni podaci. To znači da vas aplikacija može identificirati i slati informacije s vašeg profila drugima."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"senzori tjelesnih funkcija (npr. monitori otkucaja srca)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Aplikaciji omogućuje pristup podacima iz senzora koje upotrebljavate za mjerenje onoga što se odvija u vašem tijelu, poput otkucaja srca."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"čitanje društvenog streama"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Aplikaciji omogućuje pristup vašim ažuriranjima na društvenim mrežama i ažuriranjima vaših prijatelja, kao i sinkronizaciju tih ažuriranja. Budite oprezni kad dijelite informacije – to aplikaciji omogućuje čitanje poruka između vas i vaših prijatelja na društvenim mrežama, neovisno o povjerljivosti. Napomena: ta se dozvola možda ne primjenjuje na svim društvenim mrežama."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"pisanje društvenog streama"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Aplikaciji omogućuje upotrebu značajki niske razine SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"čitanje međuspremnika okvira"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Aplikaciji omogućuje čitanje sadržaja međuspremnika okvira."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"pristupi InputFlingeru"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Dopušta aplikaciji upotrebu značajki niske razine InputFlingera."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfiguriraj Wifi zaslone"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Omogućuje aplikaciji konfiguriranje i povezivanje s Wi-Fi zaslonima."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"upravljaj Wifi zaslonima"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Aplikaciji omogućuje izmjenu globalnih postavki zvuka, primjerice glasnoće i zvučnika koji se upotrebljava za izlaz."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"snimanje zvuka"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Aplikaciji omogućuje snimanje zvuka mikrofonom. Ta dozvola aplikaciji omogućuje snimanje zvuka u bilo kojem trenutku bez vašeg odobrenja."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikacija sa SIM-om"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Omogućuje aplikaciji slanje naredbi SIM-u. To je vrlo opasno."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"snimi fotografije i videozapise"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Aplikaciji omogućuje snimanje slika i videozapisa fotoaparatom. Ta dozvola aplikaciji omogućuje upotrebu fotoaparata u bilo kojem trenutku bez vašeg odobrenja."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"onemogućavanje lampice pokazivača prijenosa kada je fotoaparat u upotrebi"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Omogućuje aplikaciji upravljanje telefonskim značajkama uređaja. Aplikacija s tom dozvolom može izmjenjivati mreže, uključiti i isključiti radiouređaj telefona i tome slično, a da vas o tome uopće ne obavijesti."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"čitanje statusa i identiteta telefona"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Aplikaciji omogućuje pristup telefonskim značajkama uređaja. Ta dozvola aplikaciji omogućuje utvrđivanje telefonskog broja i ID-ova uređaja, je li poziv aktivan te udaljeni broj koji je povezan pozivom."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"čitaj precizna stanja telefona"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Omogućuje aplikaciji pristup preciznim stanjima telefona. To dopuštenje omogućuje aplikaciji da odredi stvarni status poziva, je li poziv aktivan ili u pozadini, neuspjele pozive, precizne podatke o statusu veze te neuspjela uspostavljanja podatkovnih veza."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"spriječi mirovanje tabletnog uređaja"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"sprečava telefon da prijeđe u stanje mirovanja"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Aplikaciji omogućuje sprječavanje prelaska tabletnog računala u mirovanje."</string>
@@ -617,10 +667,13 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Promjena stanja WiMAX mreže"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Aplikaciji omogućuje povezivanje tabletnog računala s WiMAX mrežama i prekidanje veze tabletnog računala s njima."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Aplikaciji omogućuje povezivanje telefona s WiMAX mrežama i prekidanje veze telefona s njima."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ocjenjivanje mreža"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Aplikaciji omogućuje rangiranje mreža i utjecanje na odabir preferiranih mreža na tabletu."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Aplikaciji omogućuje rangiranje mreža i utjecanje na odabir preferiranih mreža na telefonu."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"uparivanje s Bluetooth uređajima"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Aplikaciji omogućuje pregled konfiguracije Bluetootha na tabletnom računalu te uspostavljanje i prihvaćanje veza s uparenim uređajima."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Aplikaciji omogućuje pregled konfiguracije Bluetootha na telefonu te uspostavljanje i prihvaćanje veza s uparenim uređajima."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"upravljaj beskontaktnom (NFC) komunikacijom"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"upravljanje beskontaktnom komunikacijom (NFC)"</string>
     <string name="permdesc_nfc" msgid="7120611819401789907">"Aplikaciji omogućuje komunikaciju s oznakama, karticama i čitačima komunikacije kratkog dometa (NFC)."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"onemogućavanje zaključavanja zaslona"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Aplikaciji omogućuje onemogućavanje zaključavanja tipkovnice i svih pripadajućih sigurnosnih zaporki. Na primjer, telefon onemogućuje zaključavanje tipkovnice kod primanja dolaznog telefonskog poziva, nakon kojeg se zaključavanje tipkovnice ponovo omogućuje."</string>
@@ -642,7 +695,7 @@
     <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"čitanje sadržaja SD kartice"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Aplikaciji omogućuje čitanje sadržaja vaše USB pohrane."</string>
     <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Aplikaciji omogućuje čitanje sadržaja vaše SD kartice."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"izmjena/brisanje sadrž. USB-a"</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"izmjena/brisanje sadržaja USB-a"</string>
     <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"izmjena ili brisanje sadržaja SD kartice"</string>
     <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Dopušta pisanje u USB pohranu."</string>
     <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Aplikaciji omogućuje pisanje na SD karticu."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Omogućuje aplikaciji dohvaćanje, pregledavanje i brisanje obavijesti, uključujući obavijesti drugih aplikacija."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vezanje uz uslugu slušatelja obavijesti"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Nositelju omogućuje vezanje uz sučelje najviše razine usluge slušatelja obavijesti. Ne bi smjelo biti potrebno za uobičajene aplikacije."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"povezivanje s uslugom davatelja uvjeta"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Vlasniku omogućuje povezivanje sa sučeljem najviše razine usluge davatelja uvjeta. Nije potrebno za normalne aplikacije."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"pozovi operaterovu aplikaciju za konfiguraciju"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Dopušta nositelju pozivanje operaterove aplikacije za konfiguraciju. Ne bi smjelo biti potrebno za uobičajene aplikacije."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"praćenje motrenja mrežnih uvjeta"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Omogućuje aplikaciji praćenje motrenja mrežnih uvjeta. Ne bi trebalo biti potrebno za uobičajene aplikacije."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"promjena kalibracije uređaja za unos"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Omogućuje aplikaciji izmjenu parametara kalibracije dodirnog zaslona. Ne bi trebalo biti potrebno za uobičajene aplikacije."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"pristup DRM certifikatima"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Aplikaciji omogućuje pružanje i korištenje DRM certifikata. Ne bi trebalo biti potrebno za uobičajene aplikacije."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Postavi pravila zaporke"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Upravljajte duljinom zaporki za otključavanje zaslona i dopuštenim znakovima u tim zaporkama."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Nadgledaj pokušaje otključavanja zaslona"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Početna"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Posao"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Drugo"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nema aplikacije za prikazivanje tog kontakta."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Unesite PIN kôd"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Unesite PUK i novi PIN kôd"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kôd"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Omogućuje aplikaciji pristupanje zaključanoj sigurnoj pohrani."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Upravljanje prikazivanjem i skrivanjem zaključavanja tipkovnice"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Omogućuje aplikaciji upravljanje zaključavanjem tipkovnice."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Prati promjene pouzdanog stanja."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Omogućuje aplikaciji praćenje promjena pouzdanog stanja."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Povezivanje s uslugom pouzdanog predstavnika"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Omogućuje aplikaciji povezivanje s uslugom pouzdanog predstavnika."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interakcija s ažuriranjem i sustavom za oporavak"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Omogućuje aplikaciji interakciju sa sustavom za oporavak i ažuriranjima sustava."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dodirnite dvaput za upravljanje zumiranjem"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget nije moguće dodati."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Idi"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Pozadinska slika"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Promjena pozadinske slike"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Slušatelj obavijesti"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Davatalj uvjeta"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN aktiviran"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Aplikacija <xliff:g id="APP">%s</xliff:g> aktivirala je VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Dodirnite za upravljanje mrežom."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Odabir aplikacije"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Nije moguće pokrenuti aplikaciju <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Dijeljenje sa"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Dijeli s aplikacijom <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Klizna ručka. Dodirnite i držite."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Kliznite prema gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Kliznite prema dolje za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Kliznite lijevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Kliznite desno za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Otključaj"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Bešumno"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Zvuk je uključen"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Prijeđite prstima da biste otključali."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Priključite slušalice kako biste čuli izgovaranje tipki zaporke."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Točka."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sustav"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth zvuk"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Bežični prikaz"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotovo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medijski izlaz"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Povezivanje s uređajem"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Emitiranje zaslona na uređaj"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Traženje uređaja…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Postavke"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Prekini vezu"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skeniranje..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Povezivanje..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Dostupno"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Preklapanje br. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", sigurno"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Bežični je prikaz povezan"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Ovaj se zaslon prikazuje na nekom drugom uređaju"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Emitiranje zaslona"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Povezivanje sa zaslonom <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Emitiranje zaslona"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Povezan sa zaslonom <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Isključi"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Hitan poziv"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Zaboravili ste obrazac"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Otključavanje SIM kartice…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netočan PIN kôd."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Unesite PIN koji ima od 4 do 8 brojeva."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kôd treba imati 8 brojeva ili više."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK kôd mora se sastojati od 8 brojeva."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ponovo unesite ispravan PUK kôd. Ponovljeni pokušaji trajno će onemogućiti SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodovi nisu jednaki"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Previše pokušaja iscrtavanja obrasca"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Pokušajte ponovo kasnije"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Prijeđite prstom s vrha prema dolje za izlaz iz cijelog zaslona."</string>
+    <string name="done_label" msgid="2093726099505892398">"Gotovo"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Kružni klizač sati"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Kružni klizač minuta"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Odaberite sate"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Odaberite minute"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Mreža dana u mjesecu"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Popis godina"</string>
+    <string name="select_day" msgid="7774759604701773332">"Odaberite mjesec i dan"</string>
+    <string name="select_year" msgid="7952052866994196170">"Odaberite godinu"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Odabrana je stavka <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Izbrisan je broj <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index 4ae5938..6e82bb8 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Névtelen&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -48,8 +70,13 @@
     <string name="mismatchPin" msgid="609379054496863419">"A beírt PIN kódok nem egyeznek."</string>
     <string name="invalidPin" msgid="3850018445187475377">"Írjon be egy 4-8 számjegyű PIN-kódot."</string>
     <string name="invalidPuk" msgid="8761456210898036513">"8 számjegyű vagy hosszabb PUK kódot írjon be."</string>
-    <string name="needPuk" msgid="919668385956251611">"A SIM-kártya le van zárva a PUK-kóddal. A feloldáshoz adja meg a PUK-kódot."</string>
-    <string name="needPuk2" msgid="4526033371987193070">"A SIM-kártya feloldásához adja meg a PUK2-kódot."</string>
+    <string name="needPuk" msgid="919668385956251611">"A SIM kártya le van zárva a PUK kóddal. A feloldáshoz adja meg a PUK kódot."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"A SIM kártya feloldásához adja meg a PUK2 kódot."</string>
+    <string name="enablePin" msgid="209412020907207950">"Sikertelen, engedélyezze a SIM-/RUIM-zárolást."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt zároljuk a SIM kártyát."</item>
+    <item quantity="other" msgid="7530597808358774740">"Még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt zároljuk a SIM kártyát."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Beérkező hívóazonosító"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Szinkronizálás"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Túl sok <xliff:g id="CONTENT_TYPE">%s</xliff:g> törlés."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"A táblagép tárhelye tele van. Szabadítson fel helyet néhány fájl törlésével."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Az óra tárhelye megtelt. Szabadítson fel helyet néhány fájl törlésével."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"A telefon tárhelye megtelt. Hely felszabadításához töröljön néhány fájlt."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Lehet, hogy a hálózat felügyelt"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Ismeretlen harmadik fél által"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Csengő bekapcsolva"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Leállítás..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"A táblagép ki fog kapcsolni."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Az óra ki fog kapcsolni."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"A telefon le fog állni."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Kikapcsolja?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Újraindítás csökkentett módban"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Repülőgép üzemmód"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Repülőgép üzemmód bekapcsolva"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Repülőgép üzemmód kikapcsolva"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Beállítások"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Biztonsági üzemmód"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android rendszer"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"parancsikonok eltávolítása"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Lehetővé teszi egy alkalmazás számára, hogy felhasználói beavatkozás nélkül távolítson el parancsikonokat a kezdőképernyőről."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"kimenő hívások átirányítása"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Lehetővé teszi az alkalmazás számára a kimenő hívások kezdeményezését, és a tárcsázandó szám módosítását. Az engedéllyel rendelkező alkalmazás felügyelheti, átirányíthatja vagy megakadályozhatja a kimenő hívásokat."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Lehetővé teszi, hogy az alkalmazás kimenő híváskor lássa a tárcsázott számot, valamint a hívást átirányítsa egy másik számra, vagy megszakítsa."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"szöveges üzenetek (SMS) fogadása"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Lehetővé teszi az alkalmazás számára, hogy SMS-eket fogadjon és dolgozzon fel. Ez azt jelenti, hogy az alkalmazás megfigyelheti vagy törölheti a beérkező üzeneteket anélkül, hogy Ön látná azokat."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"szöveges üzenetek (MMS) fogadása"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Lehetővé teszi az alkalmazás számára az aktív ablak tartalmának letöltését. A rosszindulatú alkalmazások letölthetik az ablak teljes tartalmát, és a jelszavak kivételével az összes szöveget megvizsgálhatják."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Ideiglenes hozzáférés engedélyezése"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Engedélyezi egy alkalmazás számára, hogy ideiglenesen hozzáférést biztosítson az eszközhöz. A kártékony alkalmazások a felhasználó beleegyezése nélkül engedélyezhetik a hozzáférést."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ablakkal kapcsolatos információk lekérése"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Lehetővé teszi, hogy az alkalmazás információkat kérjen le az ablakkezelőben lévő ablakokkal kapcsolatban. A rosszindulatú alkalmazások belső rendszerhasználathoz szükséges információkat kérhetnek le."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"ablaktoken lekérése"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Lehetővé teszi, hogy az alkalmazás lekérje az ablaktokent. A kártékony alkalmazások jogosulatlan kapcsolatot létesíthetnek az alkalmazásablakkal a rendszer nevében."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"keretstatisztikák lekérése"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Lehetővé teszi, hogy az alkalmazás keretstatisztikákat gyűjtsön. A kártékony alkalmazások figyelhetik a más alkalmazások ablakainak keretstatisztikáit."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"események szűrése"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Lehetővé teszi az alkalmazás számára, hogy egy bemeneti szűrőt használjon, amely megszűri a falon megjelenő felhasználói eseményeket, még mielőtt megjelennének. A rosszindulatú alkalmazások felhasználói beavatkozás nélkül irányíthatják a rendszer kezelőfelületét."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"kijelző nagyítása"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Lehetővé teszi egy alkalmazás számára, hogy kinagyítsa a kijelzőn megjelenő tartalmat. Előfordulhat, hogy a rosszindulatú alkalmazások úgy alakítják át a kijelző tartalmát, hogy használhatatlanná válik az eszköz."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"részleges rendszerleállítás"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Leállítás állapotba helyezi a tevékenységkezelőt. Nem hajtja végre a teljes leállítást."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"alkalmazásváltás megakadályozása"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Lehetővé teszi az alkalmazás számára értesítés küldését SMS érkezéséről. A rosszindulatú alkalmazások beérkező SMS-ek hamisítására használhatják fel ezt."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH alapú üzenetek küldése"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Lehetővé teszi az alkalmazás számára értesítés küldését WAP PUSH üzenet érkezése esetén. A rosszindulatú alkalmazások arra használhatják ezt, hogy MMS-kézbesítési jelentést hamisítsanak, vagy hogy a háttérben rosszindulatú variánssal cseréljék le bármelyik weboldal tartalmát."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"hálózatpontozási értesítés küldése"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Lehetővé teszi, hogy az alkalmazás szétküldjön egy értesítést, amely szerint a hálózatokat pontozni kell. A normál alkalmazásoknak erre soha nincs szükségük."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"futó folyamatok számának korlátozása"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Lehetővé teszi az alkalmazás számára a futtatható folyamatok maximális számának vezérlését. Soha nem lehet rá szüksége a normál alkalmazásoknak."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"háttéralkalmazások leállításának kényszerítése"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Lehetővé teszi a használó számára, hogy csatlakozzon egy VPN-szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szüksége."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"összekapcsolás háttérképpel"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lehetővé teszi, hogy a tulajdonos kötelezővé tegye egy háttérkép legfelső szintű felületét. A normál alkalmazásoknak erre soha nincs szüksége."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"csatlakozás egy hangvezérlőhöz"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Lehetővé teszi a használó számára, hogy csatlakozzon egy hangvezérlő szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"csatlakozás egy távoli kijelzőhöz"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Lehetővé teszi a használó számára, hogy csatlakozzon egy távoli kijelző legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"csatlakozás modulszolgáltatáshoz"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lehetővé teszi a használó számára, hogy csatlakozzon egy modulszolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szüksége."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"csatlakozás egy útvonal-szolgáltatóhoz"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Az eszköz kezelője csatlakozhat bármely regisztrált útvonal-szolgáltatóhoz. A normál alkalmazások esetében erre nincs szükség."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"az eszközkezelő használata"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Lehetővé teszi a tulajdonos számára, hogy célokat küldjön egy eszközkezelőnek. A normál alkalmazásoknak erre soha nincs szüksége."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"csatlakozás tévébemenethez"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Lehetővé teszi, hogy a tulajdonos kapcsolódjon egy tévébemenet legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"eszközrendszergazda hozzáadása vagy eltávolítása"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Lehetővé teszi a tulajdonos számára, hogy aktív eszközrendszergazdákat adjon meg vagy távolítson el. A normál alkalmazásoknál erre soha nincs szükség."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"képernyő irányának módosítása"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Lehetővé teszi egy alkalmazás számára bármely telepített médiadekóder használatát a lejátszás dekódolásához."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"megbízható tanúsítványok kezelése"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Lehetővé teszi az alkalmazás számára a CA tanúsítványok telepítését és eltávolítását."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"alkalmazás futtatása tétlen időszakban"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Ezzel az engedéllyel az Android a háttérben futtathatja az alkalmazást, amikor az eszközt nem használják."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"a diag tulajdonában lévő erőforrások olvasása és írása"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Lehetővé teszi egy alkalmazás számára, hogy olvassa és írja a diagnosztikai csoport minden erőforrását, például a /dev könyvtárban lévő fájlokat. Ez potenciálisan befolyásolhatja a rendszer stabilitását és biztonságát, ezért CSAK a gyártó vagy a szolgáltató használhatja hardverspecifikus diagnosztizálásra."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"alkalmazáskomponensek be- és kikapcsolása"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Lehetővé teszi az alkalmazás számára, hogy hozzáférést biztosítson az eszközön tárolt személyes profiladatokhoz, például a névhez és az elérhetőségekhez. Ez azt jelenti, hogy az alkalmazás azonosíthatja Önt, és elküldheti másoknak profiladatait."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"saját névjegykártya módosítása"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Lehetővé teszi az alkalmazás számára az eszközön tárolt személyes profiladatok, például a név és az elérhetőségek módosítását vagy hozzáadását. Ez azt jelenti, hogy az alkalmazás azonosíthatja Önt, és elküldheti másoknak profiladatait."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"testérzékelők (pl. pulzusmérő)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Lehetővé teszi, hogy az alkalmazás hozzáférjen az olyan érzékelők által észlelt adatokhoz, amelyek az Ön életfunkcióit – például a pulzusszámát – figyelik."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"közösségi adatfolyam olvasása"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen az Ön és ismerősei közösségi oldalakon szereplő frissítéseihez. Legyen elővigyázatos, amikor információt tesz közzé -- így az alkalmazás hozzáférhet az ismerőseivel a közösségi hálózatokon folytatott magánbeszélgetésekhez, a tartalom titkos jellegétől függetlenül. Megjegyzés: előfordulhat, hogy ez nincs minden közösségi hálózaton engedélyezve."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"írás a közösség adatfolyamra"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Lehetővé teszi az alkalmazás számára a SurfaceFlinger alacsony szintű funkciók használatát."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"keretpuffer olvasása"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Lehetővé teszi az alkalmazás számára a keretpuffer tartalmának olvasását."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"hozzáférés az InputFlingerhez"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Lehetővé teszi az alkalmazás számára az InputFlinger alacsony szintű funkciók használatát."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wi-Fi kijelzők konfigurálása"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Lehetővé teszi, hogy az alkalmazás Wi-Fi kijelzőket konfiguráljon, és csatlakozzon hozzájuk."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wi-Fi kijelzők irányítása"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Lehetővé teszi az alkalmazás számára az általános hangbeállítások, például a hangerő és a használni kívánt kimeneti hangszóró módosítását."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"hanganyag rögzítése"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Lehetővé teszi az alkalmazás számára a mikrofonnal való hangfelvételt.Az engedéllyel rendelkező alkalmazás az Ön jóváhagyása nélkül, bármikor rögzíthet hanganyagot."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-kommunikáció"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Engedélyezi, hogy az alkalmazás parancsokat küldjön a SIM kártyára. Ez rendkívül veszélyes lehet."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"fotók és videók készítése"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Lehetővé teszi az alkalmazás számára, hogy a fényképezőgéppel fotókat és videókat készítsen. Az engedéllyel rendelkező alkalmazás bármikor, az Ön jóváhagyása nélkül használhatja a fényképezőgépet."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"átviteljelző LED letiltása, ha a kamera használatban van"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Lehetővé teszi az alkalmazás számára, hogy az eszköz telefonálási funkcióit vezérelje. Egy ilyen engedéllyel rendelkező alkalmazás váltani tud a hálózatok között, be- és kikapcsolhatja a telefon rádióját, és hasonlókat tehet anélkül, hogy valaha értesítené Önt."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefonállapot és azonosító olvasása"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Lehetővé teszi az alkalmazás számára, hogy hozzáférjen az eszköz telefonálási funkcióihoz. Az engedéllyel rendelkező alkalmazás meghatározhatja a telefonszámot és eszközazonosítókat, hogy egy hívás aktív-e, valamint híváskor a másik fél telefonszámát."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"pontos telefonállapot megállapítása"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Engedélyezi, hogy az alkalmazás hozzáférjen a pontos telefonállapothoz. Az ilyen engedéllyel rendelkező alkalmazás képes meghatározni a valós hívási állapotot, azt, hogy egy hívás aktív-e vagy a háttérben van, a hívás meghiúsult-e, illetve képes meghatározni az adatkapcsolat pontos állapotát és az adatkapcsolati műveletek meghiúsulását."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"táblagép alvás üzemmódjának megakadályozása"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"telefon alvó üzemmódjának megakadályozása"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Lehetővé teszi az alkalmazás számára, hogy megakadályozza, hogy a táblagép alvó üzemmódra váltson."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-állapot módosítása"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Lehetővé teszi az alkalmazás számára, hogy a táblagépet csatlakoztassa WiMAX-hálózathoz vagy leválassza azt róla."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Lehetővé teszi az alkalmazás számára, hogy a telefont csatlakoztassa WiMAX-hálózathoz vagy leválassza azt róla."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"hálózatok pontozása"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Lehetővé teszi, hogy az alkalmazás rangsorolja a hálózatokat, illetve befolyásolja, hogy a táblagép mely hálózatokat részesítse előnyben."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Lehetővé teszi, hogy az alkalmazás rangsorolja a hálózatokat, illetve befolyásolja, hogy a telefon mely hálózatokat részesítse előnyben."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Bluetooth-eszközök párosítása"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Lehetővé teszi az alkalmazás számára a táblagépen lévő Bluetooth beállításainak megtekintését, valamint kapcsolatok kezdeményezését és fogadását a párosított eszközökkel."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Lehetővé teszi az alkalmazás számára a telefonon lévő Bluetooth beállításainak megtekintését, valamint kapcsolatok kezdeményezését és fogadását a párosított eszközökkel."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Lehetővé teszi, hogy az alkalmazás értesítéseket kérdezzen le, vizsgáljon és tisztítson meg, beleértve az egyéb alkalmazások által közzétett értesítéseket is."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"csatlakozzon értesítésfigyelő szolgáltatáshoz"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Lehetővé teszi a használó számára, hogy csatlakozzon egy értesítésfigyelő szolgáltatás legfelső szintű felületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"csatlakozás egy feltételbiztosító szolgáltatáshoz"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Lehetővé teszi a használó számára, hogy csatlakozzon egy feltételbiztosító szolgáltatás legfelső szintű kezelőfelületéhez. A normál alkalmazásoknak erre soha nincs szükségük."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"a szolgáltatói konfigurációs alkalmazás hívása"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Lehetővé teszi a használó számára a szolgáltató által biztosított konfigurációs alkalmazás hívását. A normál alkalmazásoknak erre soha nincs szükségük."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"hálózati körülményekkel kapcsolatos észrevételek figyelemmel kísérése"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Lehetővé teszi egy alkalmazás számára, hogy figyelemmel kísérje a hálózati körülményekkel kapcsolatos észrevételeket. A normál alkalmazásoknak erre soha nincs szükségük."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"beviteli eszköz kalibrációjának módosítása"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Lehetővé teszi, hogy az alkalmazás módosítsa az érintőképernyő kalibrációs paramétereit. A normál alkalmazásoknál erre elvileg soha nincs szükség."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM-tanúsítványokhoz való hozzáférés"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Engedélyezi egy alkalmazás számára a DRM-tanúsítványokhoz való hozzáférést és azok használatát. Átlagos alkalmazásoknak erre nem lehet szükségük."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Jelszavakkal kapcsolatos szabályok beállítása"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"A képernyőzár-feloldási jelszavakban engedélyezett karakterek és hosszúság vezérlése."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Képernyőzár-feloldási kísérletek figyelése"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Otthoni"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Munkahely"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Egyéb"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nem található alkalmazás a névjegy megtekintéshez."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Írja be a PIN kódot"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Írja be a PUK kódot, majd az új PIN kódot"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kód"</string>
@@ -835,8 +895,8 @@
     <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="lockscreen_low_battery" msgid="1482873981919249740">"Csatlakoztassa a töltőt."</string>
     <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Nincs SIM kártya."</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Nincs SIM-kártya a táblagépben."</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nincs SIM-kártya a telefonban."</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Nincs SIM kártya a táblagépben."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Nincs SIM kártya a telefonban."</string>
     <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Helyezzen be egy SIM kártyát."</string>
     <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"A SIM kártya hiányzik vagy nem olvasható. Helyezzen be egy SIM kártyát."</string>
     <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"A SIM kártya nem használható."</string>
@@ -850,8 +910,8 @@
     <string name="lockscreen_network_locked_message" msgid="143389224986028501">"A hálózat lezárva"</string>
     <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"A SIM-kártya le van zárva a PUK-kóddal."</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Nézze meg a felhasználói útmutatót, vagy vegye fel a kapcsolatot az ügyfélszolgálattal."</string>
-    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"A SIM-kártya le van zárva."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM-kártya feloldása..."</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"A SIM kártya le van zárva."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM kártya feloldása..."</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal rosszul rajzolta le feloldási mintát. \n\nKérjük, <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva próbálja újra."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Ön helytelenül adta meg a jelszót <xliff:g id="NUMBER_0">%d</xliff:g> alkalommal. \n \n Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string>
     <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Ön <xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül adta meg PIN kódját. \n \n Próbálja újra <xliff:g id="NUMBER_1">%d</xliff:g> másodperc múlva."</string>
@@ -865,7 +925,7 @@
     <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Elfelejtette a mintát?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Fiók feloldása"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Túl sok mintarajzolási próbálkozás"</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"A feloldáshoz jelentkezzen be Google Fiókjával."</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"A feloldáshoz jelentkezzen be Google-fiókjával."</string>
     <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Felhasználónév (e-mail cím)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Jelszó"</string>
     <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Bejelentkezés"</string>
@@ -1216,10 +1276,10 @@
     <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Módosítás: Beállítások &gt; Alkalmazások"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Engedélyezés mindig"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Soha nem engedélyezem"</string>
-    <string name="sim_removed_title" msgid="6227712319223226185">"SIM-kártya eltávolítva"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM kártya eltávolítva"</string>
     <string name="sim_removed_message" msgid="2333164559970958645">"A mobilhálózat nem lesz elérhető, amíg újra nem indítja egy érvényes SIM kártya behelyezése után."</string>
     <string name="sim_done_button" msgid="827949989369963775">"Kész"</string>
-    <string name="sim_added_title" msgid="3719670512889674693">"SIM-kártya hozzáadva"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SIM kártya hozzáadva"</string>
     <string name="sim_added_message" msgid="6599945301141050216">"A mobilhálózathoz eléréséhez indítsa újra az eszközt."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"Újraindítás"</string>
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Idő beállítása"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Lehetővé teszi egy alkalmazás számára, hogy hozzáférjen a kóddal védett tárhelyhez."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Billentyűzár megjelenítésének és elrejtésének vezérlése"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Lehetővé teszi egy alkalmazás számára a billentyűzár vezérlését."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Trust-állapot változásának figyelése"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Lehetővé teszi, hogy az alkalmazás figyelje a trust-állapot változásait."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Csatlakozás egy trust agent szolgáltatáshoz"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Lehetővé teszi, hogy az alkalmazás egy trust agent szolgáltatáshoz csatlakozzon."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Kapcsolatfelvétel a frissítési és helyreállítási rendszerrel"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Lehetővé teszi egy alkalmazás számára, hogy kapcsolatba lépjen a helyreállítási rendszerrel és a rendszerfrissítésekkel."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Érintse meg kétszer a nagyítás beállításához"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nem sikerült hozzáadni a modult."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Ugrás"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Háttérkép"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Háttérkép megváltoztatása"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Értesítésfigyelő"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Feltételbiztosító"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN aktiválva"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"A(z) <xliff:g id="APP">%s</xliff:g> aktiválta a VPN-t"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Érintse meg a hálózat kezeléséhez."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Válasszon ki egy alkalmazást"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"A(z) <xliff:g id="APPLICATION_NAME">%s</xliff:g> alkalmazást indítása nem sikerült"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Megosztás a következővel:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Ossza meg a következő alkalmazással: <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Csúsztatható fogantyú. Érintse meg és tartsa."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa felfelé."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa lefelé."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa balra."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa jobbra."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Feloldás"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Némítás"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Hang bekapcsolása"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Keresés"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"A feloldásához húzza végig az ujját."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Csatlakoztasson egy fülhallgatót, ha hallani szeretné a jelszó betűit felolvasva."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Pont."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Rendszer"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth hang"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Vezeték nélküli kijelző"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Kész"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Médiakimenet"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Csatlakozás adott eszközhöz"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Képernyő átküldése az eszközre"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Eszközkeresés…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Beállítások"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Leválasztás"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Keresés..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Kapcsolódás..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Elérhető"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"<xliff:g id="ID">%1$d</xliff:g>. fedvény"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> képpont"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", biztonságos"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Vezeték nélküli kijelző csatlakoztatva"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Ez a kijelző megjelenítést végez egy másik eszközön"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Képernyő átküldése…"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Csatlakozás a következőhöz: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Képernyő átküldése…"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Csatlakozva a következőhöz: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Szétkapcsol"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Segélyhívás"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Elfelejtett minta"</string>
@@ -1514,11 +1579,11 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kártya feloldása..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Helytelen PIN kód."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4–8 számjegyű PIN kódot írjon be."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"A PUK kód legalább  8 számjegyből kell, hogy álljon."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"A PUK kód 8 karakter hosszú kell, hogy legyen."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Adja meg újra a helyes PUK kódot. Az ismételt próbálkozással véglegesen letiltja a SIM kártyát."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"A PIN kódok nem egyeznek."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Túl sok mintarajzolási próbálkozás"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"A feloldáshoz jelentkezzen be Google Fiókjával."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"A feloldáshoz jelentkezzen be Google-fiókjával."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"Felhasználónév (e-mail cím)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"Jelszó"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"Bejelentkezés"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Próbálja újra <xliff:g id="COUNT">%d</xliff:g> másodperc múlva"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Próbálkozzon később"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"A teljes képernyős nézetből való kilépéshez húzza ujját a tetejétől lefelé."</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"A teljes képernyős nézetből való kilépéshez húzza ujját a képernyő tetejétől lefelé."</string>
+    <string name="done_label" msgid="2093726099505892398">"Kész"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Óra kör alakú csúszkája"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Perc kör alakú csúszkája"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Óra kiválasztása"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Perc kiválasztása"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Napok havi leosztásban"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Évek listája"</string>
+    <string name="select_day" msgid="7774759604701773332">"Válassza ki a hónapot és a napot"</string>
+    <string name="select_year" msgid="7952052866994196170">"Válassza ki az évet"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> kiválasztva"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"A(z) <xliff:g id="KEY">%1$s</xliff:g> érték törölve"</string>
 </resources>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index 96ff31e..12e5fdb 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"Տբ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Պբ"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Անանուն&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Մուտքագրեք PUK, որն 8 կամ ավել թիվ ունի:"</string>
     <string name="needPuk" msgid="919668385956251611">"Ձեր SIM քարտը PUK-ով կողպված է: Մուտքագրեք PUK կոդը այն ապակողպելու համար:"</string>
     <string name="needPuk2" msgid="4526033371987193070">"Մուտքագրեք PUK2-ը` SIM քարտն արգելաբացելու համար:"</string>
+    <string name="enablePin" msgid="209412020907207950">"Ձախողվեց: Միացրեք SIM/RUIM կողպումը:"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ՝ մինչև SIM-ի արգելափակումը:"</item>
+    <item quantity="other" msgid="7530597808358774740">"Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ՝ մինչև SIM-ի արգելափակումը:"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Մուտքային զանգողի ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Համաժամել"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Չափից շատ <xliff:g id="CONTENT_TYPE">%s</xliff:g> հեռացումներ:"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Գրասալիկի պահոցը լիքն է: Ջնջեք մի քանի ֆայլ` տարածք ազատելու համար:"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Ժամացույցի ֆայլերի պահեստը լիքն է: Ջնջեք որոշ ֆայլեր՝ տարածք ազատելու համար:"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Հեռախոսի պահոցը լիքն է: Ջնջեք մի քանի ֆայլեր` տարածություն ազատելու համար:"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Ցանցը կարող է վերահսկվել"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Անհայտ երրորդ կողմի կողմից"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Զանգակը միացված է"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Անջատվում է…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Ձեր գրասալիկը կանջատվի:"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Ձեր ժամացույցը կանջատվի:"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ձեր հեռախոսը կանջատվի:"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Ցանկանու՞մ եք անջատել:"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Վերաբեռնել անվտանգ ռեժիմի"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Ինքնաթիռային ռեժիմ"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Ինքնաթիռային ռեժիմը միացված է"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Ինքնաթիռային ռեժիմը անջատված է"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Կարգավորումներ"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Անվտանգ ռեժիմ"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android համակարգ"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"ապատեղադրել դյուրանցումները"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Հավելվածին թույլ է տալիս հեռացնել գլխավոր էկրանի դյուրանցումները՝ առանց օգտագործողի միջամտության:"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"վերաուղղել ելքային զանգերը"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Թույլ է տալիս հավելվածին մշակել ելքային զանգերը և փոխել համարհավաքումը: Վնասարար հավելվածները կարող են վերահսկել, վերահասցեավորել կամ կանխել ելքային զանգերը:"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Թույլ է տալիս ծրագրին ելքային զանգի ընթացքում տեսնել արդեն հավաքած համարը՝ հնարավորություն տալով վերահղել կամ անջատել զանգը։"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"ստանալ տեքստային հաղորդագրություններ (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Թույլ է տալիս հավելվածին ստանալ և մշակել SMS հաղորդագրությունները: Սա նշանակում է, որ հավելվածը կարող է ստուգել կամ ջնջել ձեր սարքին ուղարկված հաղորդագրությունները` առանց դրանք ձեզ ցուցադրելու:"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"ստանալ տեքստային հաղորդագրություններ (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Թույլ է տալիս հավելվածին առբերել ակտիվ պատուհանի պարունակությունը: Վնասարար հավելվածները կարող են առբերել պատուհանի լրիվ պարունակությունը և հետազոտել դրա ամբողջ տեքստը` բացառությամբ գաղտնաբառերի:"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ժամանակավոր միացնել մուտքի հնարավորությունը"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Թույլ է տալիս հավելվածին ժամանակավորապես մուտքի հնարավորություն տալ սարքին: Վնասարար հավելվածները կարող են մուտքի հնարավորություն ընձեռել առանց օգտվողի համաձայնության:"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"առբերել պատուհանի տեղեկություները"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Թույլ է տալիս հավելվածին առբերել պատուհանների մասին տեղեկատվություններ  պատուհանի կառավարչից: Վնասարար հավելվածները կարող են առբերել տեղեկություններ, որը նախատեսված է ներքին համակարգի օգտագործման համար:"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"առբերել պատուհանի այլանիշը"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Ծրագրին թույլ է տալիս առբերել պատուհանի այլանիշը: Վնասակար ծրագրերը կարող են չթույլատրված ազդեցություն ունենալ ծրագրի պատուհանին՝ նմանակելով համակարգը:"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"առբերել շրջանակի վիճակագրությունը"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Ծրագրին թույլ է տալիս հավաքել շրջանակի վիճակագրությունը: Վնասակար ծրագրերը կարող են այլ ծրագրերից հետևել շրջանակի վիճակագրությանը պատուհանների համար:"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"զտել իրադարձությունները"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Թույլ է տալիս հավելվածին գրանցել մուտքագրման զտիչ, որը զտում է օգտվողի իրադարձությունների ամբողջ հոսքը` նախքան դրանք կուղարկվեն: Վնասարար հավելվածը կարող է կառավարել համակարգի UI-ը` առանց ձեր միջամտության:"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"խոշորացնել ցուցադրիչը"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Թույլ է տալիս հավելվածին խոշորացնել ցուցադրիչի բովանդակությունը: Վնասարար հավելվածները կարող են փոխակերպել ցուցադրիչի բովանդակությունը այնպես, որ սարքը դառնա անպիտան:"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"մասնակի անջատում"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Դնում է գործունեության կառավարչին անջատման կարգավիճակի մեջ: Չի իրականացնում ամբողջական անջատում:"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"կանխել ծրագրի փոխարկումները"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Թույլ է տալիս հավելվածին հաղորդել ծանուցում, որ ստացվել է SMS հաղորդագրություն: Վնասարար հավելվածները կարող են օգտագործել սա` կեղծելու մուտքային SMS հաղորդագրությունները:"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ուղարկել ստացված WAP-PUSH-ի  հաղորդում"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Թույլ է տալիս հավելվածին հաղորդել ծանուցում, որ ստացվել է WAP PUSH հաղորդագրություն: Վնասարար հավելվածները կարող են օգտագործել սա` կեղծելու MMS հաղորդագրության ստացումը կամ աննկատ փոխարինելու ցանկացած կայքի բովանդակությունը վնասարար տարբերակներով:"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ուղարկել ցանցերի գնահատականի հեռարձակում"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Ծրագրին թույլ է տալիս հեռարձակել ծանուցում, որ ցանցերը պետք է հաշվարկվեն: Նորմալ ծրագրերում երբեք պետք չի գալիս:"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"սահմանափակել աշխատող գործընթացների թիվը"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Թույլ է տալիս հավելվածին վերահսկել գործընթացների առավելագույն թիվը, որ աշխատելու են: Երբևէ անհրաժեշտ չէ սովորական հավելվածների համար:"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"ստիպել, որ առաջին պլանի հավելվածները փակվեն"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Թույլ է տալիս սեփականատիրոջը միանալ Vpn ծառայության վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"միանալ պաստառին"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Թույլ է տալիս սեփականատիրոջը միանալ պաստառի վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"միանալ հեռակա էկրանին"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Թույլ է տալիս սեփականատիրոջը միանալ հեռակա էկրանի վերին մակարդակի ինտերֆեյսին: Սովորական ծրագրերի համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"միանալ վիջեթ ծառայությանը"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Թույլ է տալիս սեփականատիրոջը միանալ վիջեթ ծառայության վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"կապվել երթուղու մատակարարի ծառայությանը"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Թույլ է տալիս տիրոջը կապվել երթուղու մատակարարներից ցանկացածին: Սովորական ծրագրերի համար երբեք անհրաժեշտ չէ:"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"փոխգործակցել սարքի կառավարչի հետ"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Թույլ է տալիս սեփականատիրոջը ուղարկել մտադրություններ սարքի կառավարչին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"միանալ հեռուստացույցի մուտքին"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Թույլ է տալիս սեփականատիրոջը միանալ հեռուստացույցի մուտքի վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"ավելացնել կամ հեռացնել սարքի արդմինիստրատոր"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Թույլ է տալիս սեփականատիրոջը ավելացնել կամ հեռացնել սարքի ակտիվ ադմինիստրատորներ: Երբեք չպետք է անհրաժեշտ լինի սովորական ծրագրերին:"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"փոխել էկրանի դիրքավորումը"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Թույլ է տալիս հավելվածին օգտագործել ցանկացած տեղադրված մեդիա վերծանիչ` նվագարկումը ապակոդավորելու համար:"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"կառավարել վստահելի հավաստագրերը"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Թույլատրում է հավելվածին տեղադրել և ապատեղադրել CA վկայագրերը՝ որպես վստահելի հավաստագրեր:"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"գործադրել ծրագրեր պարապուրդի ժամանակ"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Այս թույլտվությունը հնարավորություն է տալիս, որ Android համակարգը ծրագրեր գործադրի ֆոնային ռեժիմում, երբ սարքը չի օգտագործվում:"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"կարդալ կամ գրել ախտորոշիչին պատկանող ռեսուրսները"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Թույլ է տալիս հավելվածին կարդալ և գրել ախտորոշիչ խմբին պատկանող ցանկացած ռեսուրսում, ինչպես օրինակ ֆայլերը /dev-ում: Դա կարող է ազդել համակարգի կայունության և անվտանգության վրա: Սա պետք է օգտագործել միայն արտադրողի կամ օպերատորի կողմից սարքին հատուկ ախտորոշման համար:"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"միացնել կամ անջատել հավելվածի բաղադրիչները"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Թույլ է տալիս հավելվածին կարդալ ձեր սարքում պահված անհատական ​​պրոֆիլի տվյալները, ինչպիսիք են ձեր անունը և կոնտակտային տվյալները: Սա նշանակում է, որ հավելվածը կարող է ձեզ ճանաչել և ուղարկել ձեր պրոֆիլի տվյալները ուրիշներին:"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"փոփոխել ձեր սեփական կոնտակտային քարտը"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Թույլ է տալիս հավելվածին փոխել կամ ավելացնել ձեր սարքում պահված անհատական ​​պրոֆիլի տվյալները, ինչպիսիք են ձեր անունը և կոնտակտային տվյալները: Սա նշանակում է, որ հավելվածը կարող է ձեզ ճանաչել և ուղարկել ձեր պրոֆիլի տվյալները ուրիշներին:"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"մարմնի սենսորներ (օր.` սրտի)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Ծրագրին թույլ է տալիս մատչել ձեր կողմից օգտագործվող սենսորների տվյալները՝ չափելու, թե ինչ է տեղի ունենում ձեր մարմնի ներսում, ինչպես օրինակ՝ սրտի զարկերը:"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"կարդալ ձեր սոցիալական հոսքը"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Թույլ է տալիս հավելվածին մուտք գործել և համաժամեցնել ձեր և ձեր ընկերների սոցիալական թարմացումները: Զգույշ եղեք տեղեկություններ տարածելիս. այն թույլ է տալիս հավելվածին կարդալ ձեր և ձեր ընկերների միջև անձնական հաղորդագրությունները սոցիալական ցանցերում` անկախ գաղտնիությունից: Նշում. այս թույլտվությունը չի կարող գործածվել բոլոր սոցիալական ցանցերում:"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"գրել ձեր սոցիալական հոսքում"</string>
@@ -477,6 +523,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Թույլ է տալիս հավելվածին օգտագործել SurfaceFlinger ցածր մակարդակի գործառույթները:"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"կարդալ շրջանակի պահնակը"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Թույլ է տալիս հավելվածին կարդալ շրջանակի պահնակի բովանդակությունը:"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"մուտք գործել InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Թույլ է տալիս ծրագրին օգտագործել InputFlinger ցածր մակարդակի գործառույթները:"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"կարգավորել WiFi-ի ցուցադրումը"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Թույլ է տալիս հավելվածին կարգավորել և միանալ WiFi ցուցադրիչներին:"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"կառավարել Wifi-ի ցուցադրումը"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Թույլ է տալիս հավելվածին փոփոխել ձայնանյութի գլոբալ կարգավորումները, ինչպես օրինակ` ձայնը և թե որ խոսափողն է օգտագործված արտածման համար:"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ձայնագրել ձայնանյութ"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Թույլ է տալիս հավելվածին բարձրախոսով ձայնագրել ձայնանյութ: Այս թույլտվությունը հնարավորություն է տալիս հավելվածին ձայնանյութ ձայնագրել ցանկացած ժամանակ` առանց ձեր հաստատման:"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM հաղորդակցում"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Թույլ է տալիս հավելվածին հրամաններ ուղարկել SIM-ին: Սա շատ վտանգավոր է:"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"լուսանկարել և տեսանկարել"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Թույլ է տալիս հավելվածին ֆոտոխցիկով լուսանկարել և տեսանկարել: Այս թույլտվությունը հնարավորություն է տալիս հավելվածին օգտագործել ֆոտոխցիկը ցանկացած ժամանակ` առանց ձեր հաստատման:"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"անջատել փոխանցող LED ցուցիչը, երբ ֆոտոխցիկը օգտագործվում է"</string>
@@ -550,6 +600,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Թույլ է տալիս հավելվածին կառավարել սարքի հեռախոսային գործիքները: Այս թույլտվությամբ հավելվածը կարող է փոխարկել ցանցերը, միացնելև անջատել հեռախոսի ռադիոն և նման այլ բաներ` առանց ձեզ երբևէ տեղեկացնելու:"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"կարդալ հեռախոսի կարգավիճակը և ինքնությունը"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Թույլ է տալիս հավելվածին օգտագործել սարքի հեռախոսային գործիքները: Այս թույլտվությունը հավելվածին հնարավորություն է տալիս որոշել հեռախոսահամարը և սարքի ID-ները, արդյոք զանգը ակտիվ է և միացված զանգի հեռակա հեռախոսահամարը:"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"դիտել հեռախոսի ճշգրիտ կարգավիճակները"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Թույլ է տալիս ծրագրին մուտք ունենալ հեռախոսի ճշգրիտ կարգավիճակներին: Այս թույլատվության շնորհիվ ծրագիրը կարող է որոշել զանգի իրական կարգավիճակը, արդյոք զանգը ակտիվ է, թե հետին պլանում է, զանգերի ժամանակ տեղի ունեցած սխալները, տվյալների միացման ճշգրիտ կարգավիճակը և տվյալների միացման ժամանակ տեղի ունեցած սխալները:"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"զերծ պահել գրասալիկը քնելուց"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"կանխել հեռախոսի քնի ռեժիմին անցնելը"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Թույլ է տալիս հավելվածին կանխել գրասալիկի` քնի ռեժիմին անցնելը:"</string>
@@ -617,6 +669,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Փոխել WiMAX-ի կարգավիճակը"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Թույլ է տալիս հավելվածին գրասալիկը միացնել WiMAX ցանցին և անջատվել այդ ցանցից:"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Թույլ է տալիս հավելվածին հեռախոսը միացնել WiMAX ցանցին և անջատել այդ ցանցից:"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ցանցերի գնահատական"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Ծրագրին թույլ է տալիս դասակարգել ցանցերը և ազդել գրասալիկի նախընտրելի ցանցի ընտրության գործընթացի վրա:"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Ծրագրին թույլ է տալիս դասակարգել ցանցերը և ազդել հեռախոսի նախընտրելի ցանցի ընտրության գործընթացի վրա:"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"զուգակցվել Bluetooth սարքերի հետ"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Թույլ է տալիս հավելվածին տեսնել Bluetooth-ի կարգավորումը գրասալիկի վրա և կապվել ու կապեր ընդունել զուգակցված սարքերի հետ:"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Թույլ է տալիս հավելվածին տեսնել Bluetooth-ի կարգավորումը հեռախոսի վրա և կապվել ու կապեր ընդունել զուգակցված սարքերի հետ:"</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Թույլ է տալիս հավելվածին առբերել, ուսումնասիրել և մաքրել ծանուցումներն, այդ թվում նաև այլ հավելվածների կողմից գրառվածները:"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"միանալ ծանուցումների ունկնդրիչ ծառայությանը"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Թույլ է տալիս սեփականատիրոջը միանալ ծանուցումները ունկնդրող ծառայության վերին մակարդակի ինտերֆեյսին: Սովորական հավելվածների համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"գործարկել օպերատորի կողմից տրամադրված կազմաձևման ծրագիրը"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Թույլ է տալիս սեփականատիրոջը գործարկել օպերատորի կողմից տրամադրված կազմաձևման ծրագիրը: Սովորական ծրագրերի համար երբևէ չպետք է անհրաժեշտ լինի:"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"լսել դիտարկումներ ցանցային պայմանների վերաբերյալ"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Հավելվածին թույլ է տալիս լսել դիտարկումներ ցանցային պայմանների վերաբերյալ: Սովորական հավելվածների համար երբեք պետք չի գալիս:"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"փոփոխել մուտքի սարքի չափաբերումը"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Թույլ է տալիս ծրագրին փոփոխել հպէկրանի չափաբերման կարգավորումները: Սովորական ծրագրերի համար երբեք պետք չի գալու:"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM հավաստագրերի մատչում"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Ծրագրին թույլ է տալիս տրամադրել և օգտագործել DRM վկայագրեր: Սովորական ծրագրերի համար երբեք պետք չի գալիս:"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Սահմանել գաղտնաբառի կանոնները"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Վերահսկել էկրանի ապակողպման գաղտնաբառերի թույլատրելի երկարությունն ու գրանշանները:"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Վերահսկել էկրանի ապակողպման փորձերը"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Տնային"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Աշխատանքային"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Այլ"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Այս կոնտակտը դիտելու համար համապատասխան ծրագիր չկա:"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Մուտքագրեք PIN կոդը"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Մուտքագրեք PUK-ը և նոր PIN կոդը"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK կոդ"</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Թույլ է տալիս հավելվածին մուտք գործել ստեղնակողպեքով պաշտպանված պահոց:"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Կառավարել ստեղնակողպեքի ցուցադրումը և թաքցնումը"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Թույլ է տալիս հավելվածին կառավարել ստեղնաշարի պաշտպանիչը:"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Լսել վստահության կարգավիճակի ​փոփոխությունները:"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Ծրագրին թույլ է տալիս լսել վստահության կարգավիճակի փոփոխությունները:"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Կապվել վստահելի գործակալի ծառայությանը"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ծրագրին թույլ է տալիս կապվել վստահելի գործակալի ծառայությանը:"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Փոխազդել թարմացման և վերականգնման համակարգի հետ"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Թույլ է տալիս ծրագրին փոխազդել վերականգնման համակարգի և համակարգի թարմացումների հետ:"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Հպեք երկու անգամ` դիտափոխման կարգավորման համար"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Չհաջողվեց վիջեթ ավելացնել:"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Առաջ"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Պաստառ"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Փոխել պաստառը"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Ծանուցման ունկնդիր"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"VPN-ը ակտիվացված է"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN-ն ակտիվացված է <xliff:g id="APP">%s</xliff:g>-ի կողմից"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Հպեք` ցանցի կառավարման համար:"</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Մուտք"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Ընտրել ծրագիր"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Չհաջողվեց գործարկել <xliff:g id="APPLICATION_NAME">%s</xliff:g> ծրագիրը"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Տարածել"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Համօգտագործել <xliff:g id="APPLICATION_NAME">%s</xliff:g>-ի հետ"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Սահող բռնակ: Հպել &amp; պահել:"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Սահեցրեք վերև <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Սահեցրեք ցած <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Սահեցրեք ձախ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Սահեցրեք աջ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Ապակողպել"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Ֆոտոխցիկ"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Լուռ"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Ձայնը միացնել"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Որոնել"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Սահեցրեք` ապակողպելու համար:"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Միացրեք ականջակալները` արտասանվող գաղտնաբառը լսելու համար:"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Կետ:"</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Համակարգ"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ի ձայնանյութ"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Անլար էկրան"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Կատարված է"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Մեդիա արտածում"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Միանալ սարքին"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Հեռարձակել էկրանը սարքի վրա"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Որոնվում են սարքեր..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Կարգավորումներ"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Անջատել"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Սկանավորում..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Միանում է..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Հասանելի է"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Վերածածկ #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>. <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> կմվ"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", անվտանգ"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Անլար ցուցադրումը կապակցված է"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Այս էկրանը ցուցադրվում է այլ սարքում"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Էկրանի հեռարձակում"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Միանում է <xliff:g id="NAME">%1$s</xliff:g>-ին"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Էկրանը հեռարձակվում է"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Միացված է <xliff:g id="NAME">%1$s</xliff:g>-ին"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Անջատել"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Արտակարգ իրավիճակի հեռախոսազանգ"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Մոռացել եմ սխեման"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ապակողպում է SIM քարտը ..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Սխալ PIN ծածկագիր:"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Մուտքագրեք PIN, որը 4-ից 8 թիվ է:"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK կոդը պետք է լինի 8 կամ ավելի թիվ:"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK կոդը պետք է լինի 8 թիվ:"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Վերամուտքագրեք ճիշտ PUK ծածկագիրը: Կրկնվող փորձերը ընդմիշտ կկասեցնեն SIM քարտը:"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN ծածկագրերը չեն համընկնում"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Չափից շատ սխեմայի փորձեր"</string>
@@ -1650,4 +1720,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Կրկին փորձեք մի փոքր ուշ"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Սահահարվածեք վերից վար՝ ամբողջական էկրանից դուրս գալու համար:"</string>
+    <string name="done_label" msgid="2093726099505892398">"Պատրաստ է"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Ժամերի ընտրություն թվատախտակից"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Րոպեների ընտրություն թվատախտակից"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Ընտրեք ժամը"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Ընտրեք րոպեն"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Ամսաթվի ընտրության պատուհան"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Տարիների ցանկ"</string>
+    <string name="select_day" msgid="7774759604701773332">"Ընտրեք ամիսն ու օրը"</string>
+    <string name="select_year" msgid="7952052866994196170">"Ընտրեք տարին"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Ընտրված է <xliff:g id="ITEM">%1$s</xliff:g> տարրը"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> թիվը ջնջված է"</string>
 </resources>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 417c18e..2fb00bb 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Tanpa judul&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Ketik PUK yang terdiri dari 8 angka atau lebih."</string>
     <string name="needPuk" msgid="919668385956251611">"Kartu SIM Anda dikunci PUK. Ketikkan kode PUK untuk membukanya."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Ketikkan PUK2 untuk membuka kartu SIM"</string>
+    <string name="enablePin" msgid="209412020907207950">"Gagal, aktifkan Kunci SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum SIM terkunci."</item>
+    <item quantity="other" msgid="7530597808358774740">"Sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum SIM terkunci."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Nomor Penelepon Masuk"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinkron"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Terlalu banyak <xliff:g id="CONTENT_TYPE">%s</xliff:g> penghapusan."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Penyimpanan tablet penuh. Hapus beberapa file untuk mengosongkan ruang."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Penyimpanan arloji penuh. Hapus beberapa file untuk mengosongkan ruang."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Penyimpanan di ponsel penuh. Hapus sebagian file untuk mengosongkan ruang."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Jaringan mungkin dipantau"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Oleh pihak ketiga yang tidak dikenal"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Pendering nyala"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Sedang mematikan..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablet Anda akan dimatikan."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Arloji Anda akan dimatikan."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ponsel Anda akan dimatikan."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Anda ingin mematikannya?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reboot ke mode aman"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mode pesawat"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mode pesawat AKTIF"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mode pesawat MATI"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Setelan"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Mode aman"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"mencopot pemasangan pintasan"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Mengizinkan aplikasi menghapus pintasan Layar Utama tanpa tindakan dari pengguna."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"ubah rute panggilan keluar"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Memungkinkan aplikasi memproses panggilan keluar dan mengubah nomor yang akan dipanggil. Izin ini memungkinkan aplikasi memantau, mengalihkan, atau mencegah panggilan keluar."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Memungkinkan aplikasi melihat nomor yang dihubungi saat melakukan panggilan keluar dengan opsi untuk mengalihkan panggilan ke nomor lain atau membatalkan panggilan sepenuhnya."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"terima pesan teks (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Memungkinkan aplikasi menerima dan memproses pesan SMS. Ini artinya aplikasi dapat memantau atau menghapus pesan yang dikirim ke perangkat Anda tanpa menunjukkannya kepada Anda."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"terima pesan teks (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Mengizinkan apl mengambil konten jendela aktif. Apl berbahaya dapat mengambil seluruh konten jendela dan memeriksa semua teksnya kecuali sandi."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktifkan aksesibilitas untuk sementara"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Memungkinkan aplikasi mengaktifkan aksesibilitas pada perangkat untuk sementara. Aplikasi berbahaya dapat mengaktifkan aksesibilitas tanpa izin pengguna."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"mengambil info jendela"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Mengizinkan aplikasi mengambil informasi tentang jendela dari pengelola jendela. Aplikasi berbahaya dapat mengambil informasi yang ditujukan untuk penggunaan sistem internal."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"mengambil token jendela"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Memungkinkan aplikasi mengambil token jendela. Aplikasi berbahaya dapat melakukan interaksi yang tidak sah dengan jendela aplikasi dengan meniru sistem."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"mengambil statistik bingkai"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Memungkinkan aplikasi mengumpulkan statistik bingkai. Aplikasi berbahaya dapat mengamati statistik bingkai jendela dari aplikasi lain."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"memfilter acara"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Mengizinkan aplikasi mendaftarkan filter masukan yang memfilter streaming semua acara pengguna sebelum acara dikirimkan. Aplikasi berbahaya dapat mengontrol UI sistem tanpa campur tangan pengguna."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"memperbesar tampilan"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Izinkan aplikasi memperbesar konten tampilan. Aplikasi berbahaya dapat mengubah konten tampilan dengan merender perangkat menjadi tidak dapat digunakan."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"penghentian sebagian"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Letakkan pengelola aktivitas dalam kondisi mati. Tidak melakukan penonaktifan penuh."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"cegah pergantian aplikasi"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Mengizinkan apl menyiarkan pemberitahuan bahwa pesan SMS telah diterima. Apl berbahaya dapat menggunakan ini untuk memalsukan pesan SMS masuk."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"kirim siaran WAP-PUSH-diterima"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Mengizinkan apl menyiarkan pemberitahuan bahwa pesan WAP PUSH telah diterima. Apl berbahaya dapat menggunakan ini untuk memalsukan penerimaan pesan MMS atau diam-diam mengganti konten laman web apa pun dengan varian berbahaya."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"mengirim siaran beri skor jaringan"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Memungkinkan aplikasi menyiarkan pemberitahuan bahwa jaringan perlu diberi skor. Tidak pernah diperlukan untuk aplikasi normal."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"batasi jumlah dari proses yang berjalan"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Mengizinkan apl mengontrol jumlah maksimum proses yang akan berjalan. Tidak pernah diperlukan oleh apl normal."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"paksa aplikasi latar belakang agar menutup"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu layanan Vpn. Tidak pernah diperlukan oleh apl normal."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"mengikat ke wallpaper"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu wallpaper. Tidak pernah diperlukan oleh apl normal."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"mengikat ke pemicu interaksi suara"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Memungkinkan pemegang mengikat antarmuka tingkat tinggi dari layanan interaksi suara. Tidak pernah diperlukan oleh aplikasi normal."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"mengikat ke layar jarak jauh"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Mengizinkan pemegang mengikat ke antarmuka tingkat atas dari layar jarak jauh. Tidak pernah diperlukan untuk aplikasi normal."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"mengikat ke layanan widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Mengizinkan pemegang mengikat antarmuka tingkat tinggi dari suatu layanan widget. Tidak pernah diperlukan oleh apl normal."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"mengikat ke layanan penyedia rute"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Memungkinkan pemegang mengikat ke penyedia rute terdaftar mana pun. Tidak pernah dibutuhkan untuk aplikasi normal."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"berinteraksi dengan admin perangkat"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Mengizinkan pemegang mengirimkan tujuan kepada administrator perangkat. Tidak pernah diperlukan oleh apl normal."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"mengikat ke masukan TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Memungkinkan pemegang mengikat ke antarmuka tingkat tinggi dari masukan TV. Tidak pernah diperlukan oleh aplikasi normal."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"menambah atau menghapus admin perangkat"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Memungkinkan pemegang menambahkan atau menghapus administrator perangkat aktif. Tidak pernah dibutuhkan oleh aplikasi normal."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"ubah orientasi layar"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Mengizinkan apl menggunakan pengawasandi media apa pun yang terpasang guna mengawasandikan media untuk diputar."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"kelola kredensial tepercaya"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Izinkan aplikasi memasang dan mencopot pemasangan sertifikat CA sebagai kredensial tepercaya."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"menjalankan aplikasi selama waktu nganggur"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Izin ini memungkinkan sistem Android menjalankan aplikasi di latar belakang saat perangkat tidak digunakan."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"baca/tulis ke sumber daya yang dimiliki oleh diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Mengizinkan apl membaca dan menulis ke sumber daya apa pun yang dimiliki oleh grup diag; misalnya, file dalam /dev. Izin ini berpotensi memengaruhi kestabilan dan keamanan sistem. Sebaiknya ini HANYA digunakan untuk diagnosis khusus perangkat keras oleh pabrikan atau operator."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"mengaktifkan atau menonaktifkan komponen apl"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Memungkinkan aplikasi membaca informasi profil pribadi yang tersimpan di perangkat Anda, misalnya nama dan informasi kontak Anda. Ini artinya aplikasi dapat mengenali dan mengirim informasi profil Anda ke orang lain."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"ubah kartu kontak Anda"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Memungkinkan aplikasi mengubah atau menambah informasi profil pribadi yang tersimpan di perangkat Anda, seperti nama dan informasi kontak. Ini berarti aplikasi tersebut dapat mengenali Anda dan mengirim informasi profil Anda ke orang lain."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"sensor tubuh (misal: monitor detak jantung)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Memungkinkan aplikasi mengakses data dari sensor yang Anda gunakan untuk mengukur yang terjadi di dalam tubuh, misalnya detak jantung."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"membaca aliran sosial Anda"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Memungkinkan aplikasi mengakses dan menyinkronkan pembaruan sosial dari Anda dan teman. Hati-hati ketika berbagi informasi -- izin ini memungkinkan aplikasi membaca komunikasi antara Anda dan teman di jejaring sosial, terlepas dari kerahasiaan. Catatan: izin ini tidak dapat diberlakukan di semua jejaring sosial."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"menulis ke aliran sosial Anda"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Mengizinkan apl menggunakan fitur tingkat rendah SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"baca buffer frame"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Mengizinkan apl membaca konten penyangga frame."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"mengakses InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Memungkinkan aplikasi menggunakan fitur tingkat rendah InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"mengonfigurasi tampilan Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Izinkan aplikasi mengonfigurasi dan terhubung ke tampilan Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"mengontrol tampilan Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Memungkinkan aplikasi mengubah setelan audio global, misalnya volume dan pengeras suara mana yang digunakan untuk keluaran."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"rekam audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Memungkinkan aplikasi merekam audio dengan mikrofon. Izin ini memungkinkan aplikasi merekam audio kapan saja tanpa konfirmasi Anda."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikasi sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Mengizinkan aplikasi mengirim perintah ke SIM. Ini sangat berbahaya."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ambil gambar dan video"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Memungkinkan aplikasi mengambil gambar dan video dengan kamera. Izin ini memungkinkan aplikasi menggunakan kamera kapan saja tanpa konfirmasi Anda."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"nonaktifkan LED indikator transmisi saat kamera digunakan"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Mengizinkan apl mengontrol fitur telepon perangkat. Apl dengan izin ini dapat mengalihkan jaringan, menyalakan dan mematikan radio ponsel, dan melakukan hal serupa lainnya tanpa pernah memberi tahu Anda."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"baca identitas dan status ponsel"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Memungkinkan aplikasi mengakses fitur telepon perangkat. Izin ini memungkinkan aplikasi menentukan nomor telepon dan ID perangkat, apakah suatu panggilan aktif atau tidak, dan nomor jarak jauh yang tersambung oleh sebuah panggilan."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"membaca keadaan ponsel dengan akurat"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Memungkinkan aplikasi mengakses keadaan ponsel dengan akurat. Izin ini memungkinkan aplikasi menentukan status panggilan yang sebenarnya, apakah panggilan sedang aktif atau di latar belakang, kegagalan panggilan, status sambungan data yang akurat, dan kegagalan sambungan data."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"cegah tablet dari tidur"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"mencegah ponsel menjadi tidak aktif"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Mengizinkan apl mencegah tablet tidur."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Ubah status WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Memungkinkan aplikasi menyambungkan tablet ke dan memutus tablet dari jaringan WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Memungkinkan aplikasi menyambungkan ponsel ke dan memutus ponsel dari jaringan WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"memberi skor jaringan"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Memungkinkan aplikasi menilai jaringan dan memengaruhi jaringan mana yang sebaiknya dipilih tablet."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Memungkinkan aplikasi menilai jaringan dan memengaruhi jaringan mana yang sebaiknya dipilih ponsel."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"sandingkan dengan perangkat Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Memungkinkan aplikasi melihat konfigurasi Bluetooth di tablet, dan membuat serta menerima sambungan dengan perangkat yang disandingkan."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Memungkinkan aplikasi melihat konfigurasi Bluetooth di ponsel, dan membuat serta menerima sambungan dengan perangkat yang disandingkan."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Mengizinkan aplikasi mengambil, memeriksa, dan menghapus pemberitahuan, termasuk pemberitahuan yang diposkan oleh aplikasi lain."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"mengikat layanan pendengar pemberitahuan"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Memungkinkan pemegang mengikat antarmuka tingkat teratas dari suatu layanan pendengar pemberitahuan. Tidak pernah diperlukan oleh aplikasi normal."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"mengikat ke layanan penyedia ketentuan"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Memungkinkan pemegang mengikat antarmuka tingkat tinggi dari layanan penyedia ketentuan. Tidak pernah diperlukan oleh aplikasi normal."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"memanggil aplikasi konfigurasi yang disediakan operator"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Memungkinkan pemegang meminta aplikasi konfigurasi yang disediakan operator. Tidak pernah diperlukan aplikasi normal."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"mendengar untuk observasi kondisi jaringan"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Memungkinkan aplikasi mendengar untuk observasi kondisi jaringan. Tidak pernah dibutuhkan oleh aplikasi normal."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"mengubah kalibrasi perangkat masukan"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Memungkinkan aplikasi mengubah parameter kalibrasi layar sentuh. Tidak diperlukan oleh aplikasi normal."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"mengakses sertifikat DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Memungkinkan aplikasi menyediakan dan menggunakan sertifikat DRM. Tidak pernah dibutuhkan untuk aplikasi normal."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Setel aturan sandi"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontrol panjang dan karakter yang diizinkan dalam sandi pembuka layar."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Upaya pembukaan kunci layar monitor"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Beranda"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Kerjaan"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Lainnya"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Tidak ada aplikasi yang ditemukan untuk melihat kontak ini."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ketik kode PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ketik kode PUK dan PIN baru"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kode PUK"</string>
@@ -965,7 +1025,7 @@
     <string name="save_password_remember" msgid="6491879678996749466">"Ingat"</string>
     <string name="save_password_never" msgid="8274330296785855105">"Jangan"</string>
     <string name="open_permission_deny" msgid="7374036708316629800">"Anda tidak memiliki izin untuk membuka laman ini."</string>
-    <string name="text_copied" msgid="4985729524670131385">"Teks disalin ke clipboard."</string>
+    <string name="text_copied" msgid="4985729524670131385">"Teks disalin ke papan klip."</string>
     <string name="more_item_label" msgid="4650918923083320495">"Lainnya"</string>
     <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menu+"</string>
     <string name="menu_space_shortcut_label" msgid="2410328639272162537">"spasi"</string>
@@ -1142,15 +1202,15 @@
     <string name="smv_application" msgid="3307209192155442829">"Apl <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah melanggar kebijakan StrictMode yang diberlakukannya sendiri."</string>
     <string name="smv_process" msgid="5120397012047462446">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah melanggar kebijakan StrictMode yang diberlakukan secara otomatis."</string>
     <string name="android_upgrading_title" msgid="1584192285441405746">"Android sedang meningkatkan versi..."</string>
-    <string name="android_upgrading_apk" msgid="7904042682111526169">"Mengoptimalkan apl <xliff:g id="NUMBER_0">%1$d</xliff:g> dari <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
-    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Memulai apl."</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"Mengoptimalkan aplikasi <xliff:g id="NUMBER_0">%1$d</xliff:g> dari <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Memulai aplikasi."</string>
     <string name="android_upgrading_complete" msgid="1405954754112999229">"Menyelesaikan boot."</string>
     <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> berjalan"</string>
     <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Sentuh untuk beralih ke apl"</string>
     <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Beralih apl?"</string>
     <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Apl lain sudah berjalan dan harus dihentikan agar Anda dapat memulai yang baru."</string>
     <string name="old_app_action" msgid="493129172238566282">"Kembali ke<xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
-    <string name="old_app_description" msgid="2082094275580358049">"Jangan memulai apl baru."</string>
+    <string name="old_app_description" msgid="2082094275580358049">"Jangan memulai aplikasi baru."</string>
     <string name="new_app_action" msgid="5472756926945440706">"Mulai <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
     <string name="new_app_description" msgid="1932143598371537340">"Hentikan apl lama tanpa menyimpan."</string>
     <string name="sendText" msgid="5209874571959469142">"Pilih tindakan untuk teks"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Mengizinkan aplikasi mengakses pengaman penyimpanan aman."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Kontrol untuk menampilkan dan menyembunyikan pengaman"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Izinkan aplikasi untuk mengontrol pengaman."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Dengarkan perubahan status kepercayaan."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Mengizinkan aplikasi mendengarkan perubahan dalam status kepercayaan."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Ikat ke layanan agen kepercayaan"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Mengizinkan aplikasi mengikat ke layanan agen kepercayaan."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Berinteraksi dengan sistem pemulihan dan pembaruan"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Mengizinkan aplikasi berinteraksi dengan sistem pemulihan dan pembaruan sistem."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Sentuh dua kali untuk mengontrol perbesar/perkecil"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Tidak dapat menambahkan widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Buka"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Ubah wallpaper"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Pendengar pemberitahuan"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Penyedia ketentuan"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN diaktifkan"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN diaktifkan oleh <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Sentuh untuk mengelola jaringan."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Pilih apl"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Tidak dapat meluncurkan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Berbagi dengan"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Berbagi dengan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Gagang geser. Sentuh &amp; tahan."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Geser ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Geser ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Geser ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Geser ke kanan untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Membuka gembok"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Suara hidup"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Telusuri"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Gesek untuk membuka kunci."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Pasang headset untuk mendengar tombol sandi yang diucapkan."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Titik."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Layar nirkabel"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Keluaran media"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Sambungkan ke perangkat"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Transmisi layar ke perangkat"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Menelusuri perangkat…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Setelan"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Putuskan sambungan"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Memindai..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Menyambung..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Tersedia"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Hamparan #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", aman"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Layar nirkabel tersambung"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Layar ini ditampilkan di perangkat lain"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Transmisi layar"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Menyambung ke <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Transmisi layar"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Tersambung ke <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Putuskan sambungan"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan darurat"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Pola?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kartu SIM…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kode PIN salah."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ketik PIN yang terdiri dari 4 sampai 8 angka."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kode PUK harus terdiri dari 8 angka atau lebih."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Kode PUK seharusnya terdiri dari 8 angka."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan kembali kode PUK yang benar. Jika berulang kali gagal, SIM akan dinonaktifkan secara permanen."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kode PIN tidak cocok"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak upaya pola"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Coba <xliff:g id="COUNT">%d</xliff:g> detik lagi"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Coba lagi nanti"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Gesek ke bawah untuk keluar dari layar penuh"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Gesek dari atas ke bawah untuk keluar dari layar penuh."</string>
+    <string name="done_label" msgid="2093726099505892398">"Selesai"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Penggeser putar jam"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Penggeser putar menit"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Pilih jam"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Pilih menit"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Kisi hari pada bulan"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Daftar tahun"</string>
+    <string name="select_day" msgid="7774759604701773332">"Pilih bulan dan hari"</string>
+    <string name="select_year" msgid="7952052866994196170">"Pilih tahun"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> dipilih"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> dihapus"</string>
 </resources>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index d2dbfc3..af8ed3f 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Senza nome&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Digita un PUK formato da almeno 8 numeri."</string>
     <string name="needPuk" msgid="919668385956251611">"La SIM è bloccata tramite PUK. Digita il codice PUK per sbloccarla."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Digita il PUK2 per sbloccare la SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Operazione non riuscita; attiva blocco SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativo a disposizione prima che la SIM venga bloccata."</item>
+    <item quantity="other" msgid="7530597808358774740">"Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativi a disposizione prima che la SIM venga bloccata."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID chiamante in entrata"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronizzazione"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Troppe eliminazioni di <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Spazio di archiviazione del tablet esaurito. Elimina alcuni file per liberare spazio."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"La memoria dell\'orologio è piena. Elimina alcuni file per liberare spazio."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Spazio di archiviazione del telefono esaurito. Elimina alcuni file per liberare spazio."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"La rete potrebbe essere monitorata"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Da una terza parte sconosciuta"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Suoneria attiva"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Spegnimento..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Il tablet verrà spento."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"L\'orologio verrà spento."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Il telefono verrà spento."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Spegnere?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Riavvia in modalità provvisoria"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modalità aereo"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modalità aereo attiva"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modalità aereo non attiva"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Impostazioni"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Modalità provvisoria"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"eliminazione di scorciatoie"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Consente all\'applicazione di rimuovere le scorciatoie della schermata Home automaticamente."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"reindirizzamento chiamate in uscita"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Consente all\'applicazione di elaborare le chiamate in uscita e di modificare il numero da comporre. Questa autorizzazione consente all\'applicazione di monitorare, reindirizzare o impedire le chiamate in uscita."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Consente all\'app di rilevare il numero digitato durante una chiamata in uscita, con la possibilità di reindirizzare la telefonata a un numero diverso o interromperla del tutto."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"ricezione messaggi di testo (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Consente all\'applicazione di ricevere ed elaborare messaggi SMS. Significa che l\'applicazione potrebbe monitorare o eliminare i messaggi inviati al tuo dispositivo senza mostrarteli."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"ricezione messaggi di testo (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Consente all\'applicazione di recuperare i contenuti della finestra attiva. Le applicazioni dannose potrebbero recuperare l\'intero contenuto della finestra ed esaminare tutto il testo, tranne le password."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"attivazione temporanea dell\'accessibilità"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Consente a un\'applicazione di attivare temporaneamente l\'accessibilità sul dispositivo. Le applicazioni dannose potrebbero attivare l\'accessibilità senza il consenso dell\'utente."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recupero di informazioni sulle finestre"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Consente a un\'applicazione di recuperare informazioni sulle finestre dalla gestione finestre. Le applicazioni dannose potrebbero recuperare informazioni destinate all\'utilizzo da parte del sistema interno."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"recupero del token delle finestre"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Consente a un\'applicazione di recuperare il token delle finestre. Le app dannose potrebbero effettuare interazioni non consentite con la finestra dell\'applicazione identificandosi come il sistema."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"recupero di statistiche del frame"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Consente a un\'applicazione di raccogliere statistiche del frame. Le app dannose potrebbero osservare le statistiche del frame relative alle finestre da altre app."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtro eventi"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Consente a un\'applicazione di registrare un filtro di ingresso che filtra lo stream di tutti gli eventi degli utenti prima che vengano inviati. Un\'applicazione dannosa potrebbe controllare l\'interfaccia utente del sistema senza l\'intervento dell\'utente."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ingrandimento dello schermo"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Consente a un\'applicazione di ingrandire i contenuti di uno schermo. Le applicazioni dannose potrebbero trasformare i contenuti dello schermo in modo da rendere inutilizzabile il dispositivo."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"chiusura parziale"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Mette il gestore delle attività in uno stato di chiusura. Non esegue una chiusura completa."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedire commutazione applicazione"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Consente all\'applicazione di trasmettere una notifica che informa della ricezione di un messaggio SMS. Le applicazioni dannose potrebbero farne uso per creare messaggi SMS in arrivo."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"invio broadcast ricevuti tramite WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Consente all\'applicazione di trasmettere una notifica che informa della ricezione di un messaggio WAP PUSH. Le applicazioni dannose potrebbero farne uso per simulare la ricezione di messaggi MMS o per sostituire di nascosto i contenuti di qualsiasi pagina web con varianti dannose."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"invio trasmissione classificazione reti"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Consente all\'app di trasmettere una notifica indicante che le reti devono essere classificate. Opzione non necessaria per le app normali."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"numero limite di processi in esecuzione"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Consente all\'applicazione di controllare il numero massimo di processi che verranno eseguiti. Mai necessaria per le applicazioni normali."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"chiusura forzata applicazioni di background"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Consente l\'associazione all\'interfaccia principale di un servizio VPN. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"associazione a sfondo"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Consente l\'associazione di uno sfondo all\'interfaccia principale. Non dovrebbe mai essere necessaria per le normali applicazioni."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"collegamento a un servizio di interazione vocale"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio di interazione vocale. Non dovrebbe essere mai necessaria per le normali app."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"collega a un display remoto"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un display remoto. Non dovrebbe essere mai necessaria per le normali applicazioni."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"associazione a un servizio widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Consente l\'associazione all\'interfaccia principale di un servizio widget. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"collegamento a un servizio provider di routing"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Consente al titolare di collegarsi a qualsiasi provider di routing registrato. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interazione con un amministratore dispositivo"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Consente l\'invio di intent a un amministratore del dispositivo. L\'autorizzazione non dovrebbe mai essere necessaria per le normali applicazioni."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"collegamento a ingresso TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un ingresso TV. Non dovrebbe essere mai necessario per le normali applicazioni."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"aggiungere o rimuovere un amministratore del dispositivo"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Consente al titolare di aggiungere o rimuovere gli amministratori attivi del dispositivo. Non dovrebbe mai essere necessario per le normali applicazioni."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"modifica orientamento dello schermo"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Consente all\'applicazione di utilizzare qualsiasi decoder multimediale installato per la decodifica ai fini della riproduzione."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"gestione di credenziali attendibili"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Consente all\'app di installare e disinstallare certificati CA come credenziali attendibili."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"esegui l\'applicazione nel tempo di inattività del sistema"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Questa autorizzazione consente al sistema Android di eseguire l\'applicazione in background mentre il dispositivo non è in uso."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"lettura/scrittura risorse di proprietà di diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Consente all\'applicazione di leggere le risorse del gruppo diag e scrivere in esse, ad esempio i file in /dev. Ciò potrebbe influire su stabilità e sicurezza del sistema. Dovrebbe essere utilizzata SOLTANTO per diagnostiche specifiche dell\'hardware effettuate dal produttore o dall\'operatore."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"attivazione/disattivazione componenti applicazioni"</string>
@@ -449,10 +491,12 @@
     <string name="permlab_writeCallLog" msgid="8552045664743499354">"scrittura del registro chiamate"</string>
     <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Consente all\'applicazione di modificare il registro chiamate del tablet, inclusi i dati sulle chiamate in arrivo e in uscita. Le applicazioni dannose potrebbero farne uso per cancellare o modificare il registro chiamate."</string>
     <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Consente all\'applicazione di modificare il registro chiamate del telefono, inclusi i dati sulle chiamate in arrivo e in uscita. Le applicazioni dannose potrebbero farne uso per cancellare o modificare il registro chiamate."</string>
-    <string name="permlab_readProfile" msgid="4701889852612716678">"lettura scheda cont. personale"</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"lettura scheda contatti pers."</string>
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Consente all\'applicazione di leggere informazioni del profilo personale memorizzate sul dispositivo, come il tuo nome e le tue informazioni di contatto. Ciò significa che l\'applicazione può identificarti e inviare le informazioni del tuo profilo ad altri."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modifica scheda contatti"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Consente all\'applicazione di modificare o aggiungere informazioni ai dati del profilo personale memorizzati sul dispositivo, come il tuo nome e le tue informazioni di contatto. Significa che l\'applicazione può identificarti e inviare le informazioni del tuo profilo ad altri."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"sensori per il corpo (come il cardiofrequenzimetro)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Consente all\'app di accedere a dati derivanti dai sensori utilizzati per rilevare cosa sta accadendo nel tuo corpo, ad esempio la frequenza cardiaca."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lettura del tuo stream sociale"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Consente all\'applicazione di accedere agli aggiornamenti dei social network tra te e i tuoi amici e di sincronizzarli. Fai attenzione quando condividi informazioni: questa autorizzazione consente all\'applicazione di leggere le comunicazioni tra te e i tuoi amici sui social network, indipendentemente dal livello di riservatezza. Nota. È possibile che questa autorizzazione non sia applicabile su tutti i social network."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"scrittura nel tuo stream sociale"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Consente all\'applicazione l\'utilizzo di funzioni di basso livello SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lettura buffer di frame"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Consente all\'applicazione di leggere i contenuti del buffer di frame."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"accesso a InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Consente all\'applicazione di utilizzare funzioni di basso livello InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurazione di schermi Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Consente all\'applicazione di configurare schermi Wi-Fi e di collegarsi a essi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controllo di schermi Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Consente all\'applicazione di modificare le impostazioni audio globali, come il volume e quale altoparlante viene utilizzato per l\'uscita."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"registrazione audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Consente all\'applicazione di registrare audio con il microfono. Questa autorizzazione consente all\'applicazione di registrare audio in qualsiasi momento senza la tua conferma."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicazione SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Consente all\'app di inviare comandi alla SIM. Questo è molto pericoloso."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"acquisizione di foto e video"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Consente all\'applicazione di scattare foto e riprendere video con la fotocamera. Questa autorizzazione consente all\'applicazione di utilizzare la fotocamera in qualsiasi momento senza la tua conferma."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"disabilitazione del LED di indicazione della trasmissione quando la fotocamera è in uso"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Consente all\'applicazione di controllare le funzioni telefoniche del dispositivo. Un\'applicazione con questa autorizzazione può cambiare rete, attivare/disattivare il segnale radio del telefono e così via a tua insaputa."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lettura stato e identità telefono"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Consente all\'applicazione di accedere alle funzioni telefoniche del dispositivo. Questa autorizzazione consente all\'applicazione di determinare il numero di telefono e gli ID dei dispositivi, se una chiamata è attiva e il numero remoto connesso da una chiamata."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"rileva gli stati esatti del telefono"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Consente all\'app di accedere allo stato esatto del telefono. Questa autorizzazione consente all\'app di determinare il reale stato della chiamata: se una chiamata è attiva, in sottofondo o non riuscita. Inoltre, rileva l\'esatto stato della connessione dati nonché le connessioni dati non riuscite."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"disattivazione stand-by del tablet"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"disattivazione stand-by del telefono"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Consente all\'applicazione di impedire lo stand-by del tablet."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Modifica stato WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Consente all\'applicazione di connettere/disconnettere il tablet dalle reti WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Consente all\'applicazione di connettere/disconnettere il telefono dalle reti WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"valutazione reti"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Consente all\'app di stilare una classifica delle reti e determinare quali di queste il tablet deve prediligere."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Consente all\'app di stilare una classifica delle reti e determinare quali di queste il telefono deve prediligere."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"accoppiamento con dispositivi Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Consente all\'applicazione di visualizzare la configurazione del Bluetooth sul tablet e di stabilire e accettare connessioni con dispositivi accoppiati."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Consente all\'applicazione di visualizzare la configurazione del Bluetooth sul telefono e di stabilire e accettare connessioni con dispositivi accoppiati."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Consente all\'app di recuperare, esaminare e cancellare notifiche, comprese quelle pubblicate da altre app."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vincolo a un servizio listener di notifica"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Consente al titolare di vincolarsi all\'interfaccia di primo livello di un servizio listener di notifica. Non dovrebbe mai essere necessaria per le normali applicazioni."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"collegamento a un servizio provider di condizioni"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Consente al titolare di collegarsi all\'interfaccia di primo livello di un servizio provider di condizioni. Non dovrebbe essere mai necessaria per le normali app."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"richiamo dell\'app di configurazione operatore-provider"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Consente al titolare di richiamare l\'app di configurazione dell\'operatore-provider. Non dovrebbe essere mai necessaria per le normali applicazioni."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ascolto delle osservazioni sulle condizioni di rete"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Consente a un\'applicazione di ascoltare le osservazioni sulle condizioni di rete. Da non utilizzare mai con app normali."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"modifica calibrazione del dispositivo di immissione"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Consente all\'app di modificare i parametri di calibrazione del touch screen. Questa opzione non deve essere utilizzata per le app normali."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"accesso a certificati DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Consente a un\'app di fornire e utilizzare ceritificati DRM. Questa opzione non deve essere utilizzata per app normali."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Impostazione regole password"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Controlla la lunghezza e i caratteri ammessi nelle password di sblocco dello schermo."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Controllo tentativi di sblocco dello schermo"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Casa"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Lavoro"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Altro"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nessuna applicazione trovata per la visualizzazione di questo contatto."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Inserisci il codice PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Inserisci il PUK e il nuovo codice PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codice PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Consente a un\'applicazione di accedere all\'archivio sicuro keguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Controllo della visualizzazione e dell\'occultamento di keyguard"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Consente a un\'applicazione di controllare keguard."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Rilevamento modifiche dello stato trust."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Consente a un\'applicazione di rilevare le modifiche nello stato trust."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Associazione a un servizio trust agent"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Consente a un\'applicazione di associarsi a un servizio trust agent."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interazione con il sistema di ripristino e aggiornamento"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Consente a un\'applicazione di interagire con il sistema di ripristino e con gli aggiornamenti di sistema."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Tocca due volte per il comando dello zoom"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Aggiunta del widget non riuscita."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Vai"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Sfondo"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Cambia sfondo"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Listener di notifica"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Provider condizioni"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN attiva"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN attivata da <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Tocca per gestire la rete."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maiuscolo"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Invio"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Scegli un\'applicazione"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Impossibile avviare l\'applicazione <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Condividi con"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Condividi con <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Maniglia scorrevole. Tocca e tieni premuto."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Giù per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"A sinistra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"A destra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Sblocca"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Fotocamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silenzioso"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Audio attivato"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Ricerca"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Fai scorrere per sbloccare."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Collega gli auricolari per ascoltare la pronuncia dei tasti premuti per la password."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punto."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Visualizzazione wireless"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fine"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Uscita media"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Connetti al dispositivo"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Trasmetti schermo al dispositivo"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Ricerca di dispositivi in corso…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Impostazioni"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Disconnetti"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Ricerca in corso..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Connessione..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponibile"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay n. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", opzione sicura"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Il display wireless è connesso"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Questa schermata è mostrata su un altro dispositivo"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Trasmissione schermo"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Collegamento a <xliff:g id="NAME">%1$s</xliff:g> in corso"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Trasmissione schermo attiva"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Collegato a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Disconnetti"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Chiamata di emergenza"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Sequenza dimenticata"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Sblocco scheda SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codice PIN errato."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Il PIN deve essere di 4-8 numeri."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Il codice PUK dovrebbe avere almeno otto numeri."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Il codice PUK deve essere di 8 cifre."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Inserisci di nuovo il codice PUK corretto. Ripetuti tentativi comportano la disattivazione definitiva della scheda SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"I codici PIN non corrispondono"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Troppi tentativi di inserimento della sequenza"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Riprova più tardi"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Scorri dall\'alto verso il basso per uscire dalla modalità schermo intero."</string>
+    <string name="done_label" msgid="2093726099505892398">"Fine"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Dispositivo di scorrimento circolare per le ore"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Dispositivo di scorrimento circolare per i minuti"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Seleziona le ore"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Seleziona i minuti"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Griglia di giorni per mese"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Elenco degli anni"</string>
+    <string name="select_day" msgid="7774759604701773332">"Seleziona mese e giorno"</string>
+    <string name="select_year" msgid="7952052866994196170">"Seleziona anno"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Elemento selezionato: <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> eliminato"</string>
 </resources>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index 51f3889..0157f74 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -23,18 +23,40 @@
     <string name="byteShort" msgid="8340973892742019101">"B"</string>
     <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
     <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB‏‏"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"‏GB‏‏"</string>
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="untitled" msgid="4638956954852782576">"&gt;ללא כותרת&lt;"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
+    <string name="untitled" msgid="4638956954852782576">"‏&gt;ללא כותרת&lt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"..."</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
     <string name="emptyPhoneNumber" msgid="7694063042079676517">"(אין מספר טלפון)"</string>
     <string name="unknownName" msgid="2277556546742746522">"(לא ידוע)"</string>
     <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"דואר קולי"</string>
     <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
-    <string name="mmiError" msgid="5154499457739052907">"בעיה בחיבור או קוד MMI לא חוקי."</string>
+    <string name="mmiError" msgid="5154499457739052907">"‏בעיה בחיבור או קוד MMI לא חוקי."</string>
     <string name="mmiFdnError" msgid="5224398216385316471">"הפעולה מוגבלת למספרי חיוג קבועים בלבד."</string>
     <string name="serviceEnabled" msgid="8147278346414714315">"השירות הופעל."</string>
     <string name="serviceEnabledFor" msgid="6856228140453471041">"השירות הופעל עבור:"</string>
@@ -42,14 +64,19 @@
     <string name="serviceRegistered" msgid="6275019082598102493">"ההרשמה בוצעה בהצלחה."</string>
     <string name="serviceErased" msgid="1288584695297200972">"המחיקה בוצעה בהצלחה."</string>
     <string name="passwordIncorrect" msgid="7612208839450128715">"סיסמה שגויה."</string>
-    <string name="mmiComplete" msgid="8232527495411698359">"MMI הושלם."</string>
-    <string name="badPin" msgid="9015277645546710014">"ה-PIN הישן שהקלדת שגוי."</string>
-    <string name="badPuk" msgid="5487257647081132201">"ה-PUK שהקלדת שגוי."</string>
-    <string name="mismatchPin" msgid="609379054496863419">"קודי ה-PIN שהקלדת לא תואמים."</string>
-    <string name="invalidPin" msgid="3850018445187475377">"הקלד PIN שאורכו 4 עד 8 ספרות."</string>
-    <string name="invalidPuk" msgid="8761456210898036513">"הקלד PUK באורך 8 מספרים או יותר."</string>
-    <string name="needPuk" msgid="919668385956251611">"כרטיס ה-SIM נעול באמצעות PUK. הקלד את קוד PUK כדי לבטל את נעילתו."</string>
-    <string name="needPuk2" msgid="4526033371987193070">"הקלד PUK2 כדי לבטל את חסימת כרטיס ה-SIM."</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"‏MMI הושלם."</string>
+    <string name="badPin" msgid="9015277645546710014">"‏ה-PIN הישן שהקלדת שגוי."</string>
+    <string name="badPuk" msgid="5487257647081132201">"‏ה-PUK שהקלדת שגוי."</string>
+    <string name="mismatchPin" msgid="609379054496863419">"‏קודי ה-PIN שהקלדת לא תואמים."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"‏הקלד PIN שאורכו 4 עד 8 ספרות."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"‏הקלד PUK באורך 8 מספרים או יותר."</string>
+    <string name="needPuk" msgid="919668385956251611">"‏כרטיס ה-SIM נעול באמצעות PUK. הקלד את קוד PUK כדי לבטל את נעילתו."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"‏הקלד PUK2 כדי לבטל את חסימת כרטיס ה-SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"‏לא הצלחת. הפעל נעילת SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"‏נותר לך ניסיון <xliff:g id="NUMBER">%d</xliff:g> לפני נעילת כרטיס ה-SIM."</item>
+    <item quantity="other" msgid="7530597808358774740">"‏נותרו לך <xliff:g id="NUMBER">%d</xliff:g> ניסיונות לפני נעילת כרטיס ה-SIM."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"זיהוי מתקשר של שיחה נכנסת"</string>
@@ -58,7 +85,7 @@
     <string name="CwMmi" msgid="9129678056795016867">"שיחה ממתינה"</string>
     <string name="BaMmi" msgid="455193067926770581">"חסימת שיחות"</string>
     <string name="PwdMmi" msgid="7043715687905254199">"שינוי סיסמה"</string>
-    <string name="PinMmi" msgid="3113117780361190304">"שנה את ה-PIN"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"‏שנה את ה-PIN"</string>
     <string name="CnipMmi" msgid="3110534680557857162">"מספר מתקשר נמצא"</string>
     <string name="CnirMmi" msgid="3062102121430548731">"מספר מתקשר חסוי"</string>
     <string name="ThreeWCMmi" msgid="9051047170321190368">"שיחה עם שלושה משתתפים"</string>
@@ -76,10 +103,10 @@
     <string name="RestrictedOnEmergency" msgid="6581163779072833665">"שירות חירום חסום."</string>
     <string name="RestrictedOnNormal" msgid="4953867011389750673">"השירות הקולי חסום."</string>
     <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"כל השירותים הקוליים חסומים."</string>
-    <string name="RestrictedOnSms" msgid="8314352327461638897">"שירות SMS חסום."</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"‏שירות SMS חסום."</string>
     <string name="RestrictedOnVoiceData" msgid="996636487106171320">"שירותי הקול/נתונים חסומים."</string>
-    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"שירותי קול/SMS חסומים."</string>
-    <string name="RestrictedOnAll" msgid="5643028264466092821">"כל השירותים של קול/נתונים/SMS חסומים."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"‏שירותי קול/SMS חסומים."</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"‏כל השירותים של קול/נתונים/SMS חסומים."</string>
     <string name="serviceClassVoice" msgid="1258393812335258019">"Google Voice"</string>
     <string name="serviceClassData" msgid="872456782077937893">"Google Data"</string>
     <string name="serviceClassFAX" msgid="5566624998840486475">"פקס"</string>
@@ -114,7 +141,7 @@
     <string name="httpErrorLookup" msgid="4711687456111963163">"לא ניתן למצוא את כתובת האתר."</string>
     <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"סכימת אימות האתר אינה נתמכת."</string>
     <string name="httpErrorAuth" msgid="1435065629438044534">"האימות נכשל."</string>
-    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"האימות דרך שרת ה-Proxy נכשל."</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"‏האימות דרך שרת ה-Proxy נכשל."</string>
     <string name="httpErrorConnect" msgid="8714273236364640549">"לא ניתן להתחבר לשרת."</string>
     <string name="httpErrorIO" msgid="2340558197489302188">"לא ניתן לתקשר עם השרת. נסה שוב מאוחר יותר."</string>
     <string name="httpErrorTimeout" msgid="4743403703762883954">"חלף הזמן הקצוב של החיבור לשרת."</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"סינכרון"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"יש מחיקות רבות מדי של <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"שטח האחסון של הטאבלט מלא. מחק קבצים כדי לפנות מקום."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"שטח האחסון של השעון מלא. מחק כמה קבצים כדי לפנות שטח."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"שטח האחסון של הטלפון מלא. מחק חלק מהקבצים כדי לפנות שטח."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"ייתכן שהרשת מנוטרת"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"על ידי צד שלישי לא מוכר"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"צלצול מופעל"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"מכבה..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"הטאבלט שלך יכבה."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"השעון יכבה."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"הטלפון שלך יכובה."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"האם ברצונך לבצע כיבוי?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"אתחל למצב בטוח"</string>
@@ -158,7 +187,7 @@
     <string name="global_action_lock" msgid="2844945191792119712">"נעילת מסך"</string>
     <string name="global_action_power_off" msgid="4471879440839879722">"כיבוי"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"דיווח על באג"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"מלא דיווח על באג"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"שלח דיווח על באג"</string>
     <string name="bugreport_message" msgid="398447048750350456">"פעולה זו תאסוף מידע על מצב המכשיר הנוכחי שלך על מנת לשלוח אותו כהודעת דוא\"ל. היא תימשך זמן קצר מרגע פתיחת דיווח הבאג ועד שיהיה ניתן לבצע שליחה. התאזר בסבלנות."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"מצב שקט"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"הקול כבוי"</string>
@@ -166,13 +195,14 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"מצב טיסה"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"מצב טיסה מופעל"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"מצב טיסה כבוי"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"הגדרות"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"מצב בטוח"</string>
-    <string name="android_system_label" msgid="6577375335728551336">"מערכת Android"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"‏מערכת Android"</string>
     <string name="permgrouplab_costMoney" msgid="5429808217861460401">"שירותים שעולים כסף"</string>
     <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"ביצוע פעולות שעשויות לעלות לך כסף."</string>
     <string name="permgrouplab_messages" msgid="7521249148445456662">"ההודעות שלך"</string>
-    <string name="permgroupdesc_messages" msgid="7821999071003699236">"קריאה וכתיבה בהודעות ה-SMS, הדוא\"ל והודעות אחרות שלך."</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"‏קריאה וכתיבה בהודעות ה-SMS, הדוא\"ל והודעות אחרות שלך."</string>
     <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"המידע האישי שלך"</string>
     <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"גישה ישירה למידע עליך, המאוחסן בכרטיס איש הקשר שלך."</string>
     <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"מידע על הקשרים החברתיים שלך"</string>
@@ -182,7 +212,7 @@
     <string name="permgrouplab_network" msgid="5808983377727109831">"תקשורת רשת"</string>
     <string name="permgroupdesc_network" msgid="4478299413241861987">"הרשאת גישה לתכונות רשת שונות."</string>
     <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
-    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"גישה למכשירים ולרשתות באמצעות Bluetooth."</string>
+    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"‏גישה למכשירים ולרשתות באמצעות Bluetooth."</string>
     <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"הגדרות אודיו"</string>
     <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"שינוי הגדרות האודיו."</string>
     <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"השפעה על הסוללה"</string>
@@ -228,8 +258,8 @@
     <string name="permgrouplab_display" msgid="4279909676036402636">"ממשק המשתמש של אפליקציה אחרת"</string>
     <string name="permgroupdesc_display" msgid="6051002031933013714">"השפעה על ממשק המשתמש של אפליקציות אחרות."</string>
     <string name="permgrouplab_storage" msgid="1971118770546336966">"אחסון"</string>
-    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"גישה לאמצעי אחסון מסוג USB."</string>
-    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"גש לכרטיס SD."</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"‏גישה לאמצעי אחסון מסוג USB."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"‏גש לכרטיס SD."</string>
     <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"תכונות נגישות"</string>
     <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"תכונות שטכנולוגיה מסייעת יכולה לבקש."</string>
     <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"אחזר תוכן של חלון"</string>
@@ -251,27 +281,27 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"הסר התקנה של קיצורי דרך"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"מאפשר לאפליקציה להסיר קיצורי דרך במסך דף הבית ללא התערבות המשתמש."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"ניתוב מחדש של שיחות יוצאות"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"מאפשר לאפליקציה לעבד שיחות יוצאות ולשנות את המספר שיש לחייג. אישור זה מאפשר לאפליקציה לעקוב אחר שיחות יוצאות, לבצע הפניה מחדש שלהן או אף למנוע את ביצוען."</string>
-    <string name="permlab_receiveSms" msgid="8673471768947895082">"קבלת הודעות טקסט (SMS)"</string>
-    <string name="permdesc_receiveSms" msgid="6424387754228766939">"מאפשר לאפליקציה לקבל ולעבד הודעות SMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן."</string>
-    <string name="permlab_receiveMms" msgid="1821317344668257098">"קבלת הודעות טקסט (MMS)"</string>
-    <string name="permdesc_receiveMms" msgid="533019437263212260">"מאפשר לאפליקציה לקבל ולעבד הודעות MMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"מאפשרת לאפליקציה לראות את המספר המחויג במהלך ביצוע שיחה יוצאת, עם האפשרות להפנות את השיחה למספר אחר או לבטל את השיחה לחלוטין."</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"‏קבלת הודעות טקסט (SMS)"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"‏מאפשר לאפליקציה לקבל ולעבד הודעות SMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן."</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"‏קבלת הודעות טקסט (MMS)"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"‏מאפשר לאפליקציה לקבל ולעבד הודעות MMS. משמעות הדבר היא שהאפליקציה יכולה לעקוב אחר הודעות שנשלחו למכשיר או למחוק אותן מבלי להציג לך אותן."</string>
     <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"קבל שידורי חירום"</string>
     <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"מאפשר לאפליקציה לקבל ולעבד לשדר הודעות חירום משודרות. הרשאה זו זמינה רק לאפליקציות מערכת."</string>
     <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"קריאת הודעות שידור סלולרי"</string>
     <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"מאפשר לאפליקציה לקרוא הודעות שידור סלולרי שהתקבלו במכשיר שלך. התראות שידור סלולרי נשלחות במקומות מסוימים על מנת להזהיר אותך מפני מצבי חירום. אפליקציות זדוניות עשויות להפריע לביצועים או לפעולה של המכשיר שלך כאשר מתקבל שידור חירום סלולרי."</string>
-    <string name="permlab_sendSms" msgid="5600830612147671529">"שלוח הודעות SMS"</string>
-    <string name="permdesc_sendSms" msgid="7094729298204937667">"מאפשר לאפליקציה לשלוח הודעות SMS. הדבר עשוי לגרום לחיובים בלתי צפויים. אפליקציות זדוניות עלולות לגרום לעלויות על ידי שליחת הודעות ללא אישורך."</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"‏שלוח הודעות SMS"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"‏מאפשר לאפליקציה לשלוח הודעות SMS. הדבר עשוי לגרום לחיובים בלתי צפויים. אפליקציות זדוניות עלולות לגרום לעלויות על ידי שליחת הודעות ללא אישורך."</string>
     <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"שליחת אירועי \'תגובה באמצעות הודעה\'"</string>
     <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"מאפשר לאפליקציה לשלוח בקשות לאפליקציות אחרים של העברת הודעות כדי לטפל באירועי \'תגובה באמצעות הודעה\' עבור שיחות נכנסות."</string>
-    <string name="permlab_readSms" msgid="8745086572213270480">"קריאת הודעות הטקסט שלך (SMS או MMS)"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"מאפשר לאפליקציה לקרוא הודעות SMS המאוחסנות בטאבלט או בכרטיס ה-SIM. דבר זה מתיר לאפליקציה לקרוא את כל הודעות ה-SMS, ללא התחשבות בתוכן או בסודיות."</string>
-    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"מאפשר לאפליקציה לקרוא הודעות SMS המאוחסנות בטלפון או בכרטיס ה-SIM. דבר זה מתיר לאפליקציה לקרוא את כל הודעות ה-SMS, ללא התחשבות בתוכן או בסודיות."</string>
-    <string name="permlab_writeSms" msgid="3216950472636214774">"עריכת הודעות הטקסט שלך (SMS או MMS)"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"מאפשר לאפליקציה לכתוב להודעות SMS המאוחסנות בטאבלט או בכרטיס ה-SIM שלך. אפליקציות זדוניות עלולות למחוק את ההודעות שלך."</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"מאפשר לאפליקציה לכתוב להודעות SMS המאוחסנות בטלפון או בכרטיס ה-SIM שלך. אפליקציות זדוניות עלולות למחוק את ההודעות שלך."</string>
-    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"קבלת הודעות טקסט (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"מאפשר לאפליקציה לקבל ולעבד הודעות WAP. אישור זה כולל את היכולת לעקוב אחר הודעות שנשלחו אליך ולמחוק אותן מבלי להציג לך אותן."</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"‏קריאת הודעות הטקסט שלך (SMS או MMS)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"‏מאפשר לאפליקציה לקרוא הודעות SMS המאוחסנות בטאבלט או בכרטיס ה-SIM. דבר זה מתיר לאפליקציה לקרוא את כל הודעות ה-SMS, ללא התחשבות בתוכן או בסודיות."</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"‏מאפשר לאפליקציה לקרוא הודעות SMS המאוחסנות בטלפון או בכרטיס ה-SIM. דבר זה מתיר לאפליקציה לקרוא את כל הודעות ה-SMS, ללא התחשבות בתוכן או בסודיות."</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"‏עריכת הודעות הטקסט שלך (SMS או MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"‏מאפשר לאפליקציה לכתוב להודעות SMS המאוחסנות בטאבלט או בכרטיס ה-SIM שלך. אפליקציות זדוניות עלולות למחוק את ההודעות שלך."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"‏מאפשר לאפליקציה לכתוב להודעות SMS המאוחסנות בטלפון או בכרטיס ה-SIM שלך. אפליקציות זדוניות עלולות למחוק את ההודעות שלך."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"‏קבלת הודעות טקסט (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"‏מאפשר לאפליקציה לקבל ולעבד הודעות WAP. אישור זה כולל את היכולת לעקוב אחר הודעות שנשלחו אליך ולמחוק אותן מבלי להציג לך אותן."</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"אחזור אפליקציות פעילות"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"מאפשר לאפליקציה לאחזר מידע לגבי משימות הפועלות כרגע ושפעלו לאחרונה. ייתכן שהדבר יתיר לאפליקציה לגלות מידע לגבי האפליקציות שבהן נעשה שימוש במכשיר."</string>
     <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"אינטראקציה בין משתמשים"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"מאפשר לאפליקציה לאחזר את התוכן של החלון הפעיל. אפליקציות זדוניות עלולות לאחזר את תוכן החלון כולו ולבחון את כל הטקסט שבו, מלבד סיסמאות."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"הפעלת נגישות זמנית"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"מאפשר לאפליקציה להפעיל באופן זמני נגישות במכשיר. אפליקציות זדוניות עלולות לאפשר נגישות ללא הסכמת משתמש."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"אחזר מידע חלון"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"מאפשר לאפליקציה לאחזר מידע לגבי החלונות ממנהל החלונות. אפליקציות זדוניות עשויות לאחזר מידע המיועד לשימוש מערכת פנימי."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"אחזור אסימון חלון"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"מאפשרת לאפליקציה לאחזר את אסימון החלון. אפליקציות זדוניות עשויות לבצע אינטראקציה בלתי מורשית עם חלון האפליקציה, ולהעמיד פנים שהן המערכת."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"אחזור סטטיסטיקת מסגרת"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"מאפשרת לאפליקציה לאסוף סטטיסטיקת מסגרת. אפליקציות זדוניות עשויות לבחון את סטטיסטיקת המסגרת של חלונות מאפליקציות אחרות."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"סנן אירועים"</string>
-    <string name="permdesc_filter_events" msgid="8006236315888347680">"מאפשר לאפליקציה לרשום מסנן קלט שמסנן את הזרם של כל אירועי המשתמש לפני שהם נשלחים. אפליקציה זדונית עשויה לשלוט ב-UI של המערכת ללא התערבות משתמש."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"הגדלת תצוגה"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"מאפשר לאפליקציה להגדיל את התוכן של תצוגה. אפליקציות זדוניות עלולות לשנות את תוכן התצוגה כך שהמכשיר יהפוך לבלתי שמיש."</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"‏מאפשר לאפליקציה לרשום מסנן קלט שמסנן את הזרם של כל אירועי המשתמש לפני שהם נשלחים. אפליקציה זדונית עשויה לשלוט ב-UI של המערכת ללא התערבות משתמש."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"כיבוי חלקי"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"מעביר את מנהל הפעילויות למצב כיבוי. לא מבצע כיבוי מלא."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"מנע החלפת אפליקציות"</string>
@@ -326,10 +356,12 @@
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"מאפשר לאפליקציה לנהל מעקב אחר האופן שבו המערכת מפעילה פעילויות, ולשלוט בו. אפליקציות זדוניות עלולות לסכן את המערכת כולה. הרשאה זו אינה נחוצה לשימוש רגיל, אלא לפיתוח בלבד."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"שלח שידור שהוסר מחבילה"</string>
     <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"מאפשר לאפליקציה לשדר התראה על כך שחבילת אפליקציות הוסרה. אפליקציות זדוניות עלולות להשתמש בכך כדי לסגור אפליקציות פעילות אחרות."</string>
-    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"שלח שידור שהתקבל ב-SMS"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"מאפשר לאפליקציה לשדר התראה על כך שהתקבלה הודעת SMS. אפליקציות זדוניות עלולות להשתמש בכך כדי לזייף הודעות SMS נכנסות."</string>
-    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"שלח שידור שהתקבל באמצעות WAP-PUSH"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"מאפשר לאפליקציה לשדר התראה על כך שהתקבלה הודעה מסוג WAP PUSH. אפליקציות זדוניות עלולות להשתמש בכך כדי לזייף קבלה של הודעות MMS או כדי להחליף בחשאי את התוכן של דף אינטרנט כלשהו בגירסאות זדוניות."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"‏שלח שידור שהתקבל ב-SMS"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"‏מאפשר לאפליקציה לשדר התראה על כך שהתקבלה הודעת SMS. אפליקציות זדוניות עלולות להשתמש בכך כדי לזייף הודעות SMS נכנסות."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"‏שלח שידור שהתקבל באמצעות WAP-PUSH"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"‏מאפשר לאפליקציה לשדר התראה על כך שהתקבלה הודעה מסוג WAP PUSH. אפליקציות זדוניות עלולות להשתמש בכך כדי לזייף קבלה של הודעות MMS או כדי להחליף בחשאי את התוכן של דף אינטרנט כלשהו בגירסאות זדוניות."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"שלח שידור לדירוג רשתות"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"מאפשר לאפליקציה לשדר התראה על כדי שיש לדרג את הרשתות. לא בשימוש עבור אפליקציות רגילות."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"הגבל את מספר התהליכים הפועלים"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"מאפשר לאפליקציה לשלוט על המספר המרבי של תהליכים שיפעלו. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"אילוץ סגירה של אפליקציות ברקע"</string>
@@ -353,7 +385,7 @@
     <string name="permlab_setAnimationScale" msgid="2805103241153907174">"שנה את מהירות ההנפשה הגלובלית"</string>
     <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"הרשאה זו מאפשרת לאפליקציה לשנות את מהירות ההנפשה הכללית (הנפשות מהירות או איטיות יותר) בכל עת."</string>
     <string name="permlab_manageAppTokens" msgid="1286505717050121370">"ניהול אסימוני אפליקציות"</string>
-    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"מאפשר לאפליקציה ליצור ולנהל אסימונים משלהם, תוך עקיפת סידור ה-Z הרגיל שלהם. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"‏מאפשר לאפליקציה ליצור ולנהל אסימונים משלהם, תוך עקיפת סידור ה-Z הרגיל שלהם. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
     <string name="permlab_freezeScreen" msgid="4708181184441880175">"הקפאת מסך"</string>
     <string name="permdesc_freezeScreen" msgid="8558923789222670064">"מאפשר לאפליקציה להקפיא באופן זמני את המסך למעבר למסך מלא."</string>
     <string name="permlab_injectEvents" msgid="1378746584023586600">"לחץ על מקשים ושלוט בלחצנים"</string>
@@ -369,18 +401,26 @@
     <string name="permdesc_bindPrintService" msgid="7960067623209111135">"ההרשאה הזו מאפשרת לבעלים לבצע איגוד לממשק הרמה העליונה של שירות הדפסה. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
     <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"איגוד לשירות הדפסה"</string>
     <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"מאפשרת לבעלים לבצע איגוד לממשק ברמה העליונה של שירות הדפסה. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
-    <string name="permlab_bindNfcService" msgid="2752731300419410724">"איגוד לשירות NFC"</string>
-    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"מאפשרת לבעלים לאגד את האפליקציות המחקות כרטיסיות NFC. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"‏איגוד לשירות NFC"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"‏מאפשרת לבעלים לאגד את האפליקציות המחקות כרטיסיות NFC. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
     <string name="permlab_bindTextService" msgid="7358378401915287938">"הכפפה לשירות טקסט"</string>
-    <string name="permdesc_bindTextService" msgid="8151968910973998670">"מאפשר למשתמש ליצור איגוד לממשק הרמה העליונה של שירות טקסט (למשל, SpellCheckerService). הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
-    <string name="permlab_bindVpnService" msgid="4708596021161473255">"אגד לשירות VPN"</string>
-    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"מאפשר למשתמש לבצע איגוד לממשק ברמה עליונה של שירות VPN. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"‏מאפשר למשתמש ליצור איגוד לממשק הרמה העליונה של שירות טקסט (למשל, SpellCheckerService). הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"‏אגד לשירות VPN"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"‏מאפשר למשתמש לבצע איגוד לממשק ברמה עליונה של שירות VPN. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"קשור לטפט"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"מאפשר למשתמש לבצע איגוד לממשק הרמה העליונה של טפט. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
-    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"הכפפה לשירות Widget"</string>
-    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"מאפשר למשתמש לבצע איגוד לממשק הרמה העליונה של שירות Widget. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"איגוד לשירות אינטראקציה קולית"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות אינטראקציה קולית. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"איגוד לצג מרוחק"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של צג רחוק. לעולם אינה אמורה להיות נחוצה לאפליקציות רגילות."</string>
+    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"‏הכפפה לשירות Widget"</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"‏מאפשר למשתמש לבצע איגוד לממשק הרמה העליונה של שירות Widget. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"איגוד לשירות של ספק ניתוב"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"מאפשרת לבעלים לאגד לספקי ניתוב רשומים. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"קיים אינטראקציה עם מנהל המכשיר"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"מאפשר למשתמש לשלוח כוונות למנהל התקנים. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"איגוד לקלט טלוויזיה"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"הרשאה זו מאפשרת למחזיק בה לבצע איגוד לממשק הרמה העליונה של קלט טלוויזיה. הרשאה זו אף פעם אינה אמורה להיות נחוצה לאפליקציות רגילות."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"הוספה או הסרה של מנהלי מכשיר"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"מאפשרת לבעלים להוסיף או להסיר מנהלי מכשיר פעילים. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"שנה את כיוון המסך"</string>
@@ -389,13 +429,13 @@
     <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"מאפשר לאפליקציה לשנות את המהירות של מצביע העכבר או לוח המגע בכל עת. אפליקציות רגילות לא אמורים לעולם להזדקק להרשאה זו."</string>
     <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"שנה את פריסת המקלדת"</string>
     <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"מאפשר לאפליקציה לשנות את פריסת המקלדת. הרשאה זו לעולם אינה אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"שליחת אותות Linux לאפליקציות"</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"‏שליחת אותות Linux לאפליקציות"</string>
     <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"מאפשר לאפליקציה לבקש שהאות שנקלט יישלח לכל התהליכים המתמשכים."</string>
     <string name="permlab_persistentActivity" msgid="8841113627955563938">"הגדרת האפליקציה לפעול תמיד"</string>
     <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"מאפשר לאפליקציה להפוך חלקים ממנו לקבועים בזיכרון. פעולה זו עשויה להגביל את הזיכרון הזמין לאפליקציות אחרים ולהאט את פעולת הטאבלט."</string>
     <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"מאפשר לאפליקציה להפוך חלקים ממנו לקבועים בזיכרון. פעולה זו עשויה להגביל את הזיכרון הזמין לאפליקציות אחרים ולהאט את פעולת הטלפון."</string>
     <string name="permlab_deletePackages" msgid="184385129537705938">"מחיקת אפליקציות"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"מאפשר לאפליקציה למחוק חבילות Android. אפליקציות זדוניות עלולות להשתמש בכך כדי למחוק אפליקציות חשובות."</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"‏מאפשר לאפליקציה למחוק חבילות Android. אפליקציות זדוניות עלולות להשתמש בכך כדי למחוק אפליקציות חשובות."</string>
     <string name="permlab_clearAppUserData" msgid="274109191845842756">"מחיקת נתונים של אפליקציות אחרות"</string>
     <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"מאפשר לאפליקציה לנקות את נתוני המשתמש."</string>
     <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"מחיקת קבצים שמורים של אפליקציות אחרות"</string>
@@ -403,7 +443,7 @@
     <string name="permlab_getPackageSize" msgid="7472921768357981986">"מדידת נפח האחסון של אפליקציות"</string>
     <string name="permdesc_getPackageSize" msgid="3921068154420738296">"מאפשר לאפליקציה לאחזר את הקוד, הנתונים, וגודלי הקבצים השמורים שלו"</string>
     <string name="permlab_installPackages" msgid="2199128482820306924">"התקנה ישירה של אפליקציות"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"מאפשר לאפליקציה להתקין חבילות Android חדשות או מעודכנות. אפליקציות זדוניות עלולות להשתמש בכך כדי להוסיף אפליקציות חדשות בעלי הרשאות זה כדי להוסיף אפליקציות חדשות עם הרשאות רבות-עוצמה אקראיות."</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"‏מאפשר לאפליקציה להתקין חבילות Android חדשות או מעודכנות. אפליקציות זדוניות עלולות להשתמש בכך כדי להוסיף אפליקציות חדשות בעלי הרשאות זה כדי להוסיף אפליקציות חדשות עם הרשאות רבות-עוצמה אקראיות."</string>
     <string name="permlab_clearAppCache" msgid="7487279391723526815">"מחיקת כל הנתונים בקבצים שמורים של אפליקציות"</string>
     <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"מאפשר לאפליקציה לשחרר שטח אחסון בטאבלט על ידי מחיקת קבצים בספריות הקבצים השמורים של אפליקציות אחרות. הדבר עשוי לגרום להפעלה של אפליקציות אחרות להיות איטית יותר מכיוון שעליהם לאחזר מחדש את הנתונים."</string>
     <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"מאפשר לאפליקציה לפנות שטח אחסון בטלפון על ידי מחיקת קבצים בספריות הקבצים השמורים של אפליקציות אחרות. הדבר עשוי לגרום להפעלה של אפליקציות אחרות להיות איטית יותר מכיוון שעליהם לאחזר מחדש את הנתונים."</string>
@@ -415,9 +455,11 @@
     <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"שימוש בכל מפענח מדיה שהוא להפעלה"</string>
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"הרשאה זו מאפשרת לאפליקציה להשתמש בכל מפענח מדיה מותקן כדי לבצע פענוח להשמעה."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"ניהול פרטי כניסה מהימנים"</string>
-    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"מאפשרת לאפליקציה להתקין ולהסיר אישורי CA כפרטי כניסה מהימנים."</string>
-    <string name="permlab_diagnostic" msgid="8076743953908000342">"קרא/כתוב במשאבים בבעלות diag"</string>
-    <string name="permdesc_diagnostic" msgid="6608295692002452283">"מאפשר לאפליקציה לקרוא ולכתוב בכל משאב שבבעלות קבוצת ה-diag; לדוגמה, קבצים ב-‎/dev. פעולה זו עשויה להשפיע על היציבות והאבטחה של המערכת. אפשרות זו צריכה לשמש רק את היצרן או המפעיל, לצורך אבחונים ספציפיים לחומרה."</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"‏מאפשרת לאפליקציה להתקין ולהסיר אישורי CA כפרטי כניסה מהימנים."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"הרצת אפליקציה בזמן מצב לא פעיל"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"‏ההרשאה הזו מאפשרת למערכת Android להריץ את האפליקציה ברקע כשהמכשיר אינו בשימוש."</string>
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"‏קרא/כתוב במשאבים בבעלות diag"</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"‏מאפשר לאפליקציה לקרוא ולכתוב בכל משאב שבבעלות קבוצת ה-diag; לדוגמה, קבצים ב-‎/dev. פעולה זו עשויה להשפיע על היציבות והאבטחה של המערכת. אפשרות זו צריכה לשמש רק את היצרן או המפעיל, לצורך אבחונים ספציפיים לחומרה."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"הפעלה או השבתה של רכיבי אפליקציות"</string>
     <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"מאפשר לאפליקציה לשנות את מצב ההפעלה של רכיב באפליקציה אחרת. אפליקציות זדוניות עלולות להשתמש בכך כדי להשבית יכולות חשובות של הטאבלט. יש לנהוג בהרשאה זו בזהירות, מכיוון שהיא יכולה להביא רכיבי אפליקציות למצב לא שמיש, לא עקבי או לא יציב."</string>
     <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"מאפשר לאפליקציה לשנות את מצב ההפעלה של רכיב באפליקציה אחרת. אפליקציות זדוניות עלולות להשתמש בכך כדי להשבית יכולות חשובות של הטלפון. יש לנהוג בהרשאה זו בזהירות, מכיוון שהיא יכולה להביא רכיבי אפליקציות למצב לא שמיש, לא עקבי או לא יציב."</string>
@@ -429,8 +471,8 @@
     <string name="permdesc_writeSettings" msgid="7775723441558907181">"מאפשר לאפליקציה לשנות את נתוני הגדרות המערכת. אפליקציות זדוניות עלולות לשבש את תצורת המערכת שלך."</string>
     <string name="permlab_writeSecureSettings" msgid="204676251876718288">"שנה את הגדרות המערכת המאובטחת"</string>
     <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"מאפשר לאפליקציה לשנות את נתוני ההגדרות המאובטחים של המערכת. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
-    <string name="permlab_writeGservices" msgid="2149426664226152185">"שנה את מפת השירותים של Google"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"מאפשר לאפליקציה לשנות את מפת שירותי Google. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"‏שנה את מפת השירותים של Google"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"‏מאפשר לאפליקציה לשנות את מפת שירותי Google. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"הפעלה בעת אתחול"</string>
     <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"מאפשר לאפליקציה להפעיל את עצמו מיד עם סיום תהליך האתחול של המערכת. משום כך הפעלת הטאבלט עשויה להתארך והאפליקציה עלולה להאט את הפעילות הכללית של הטאבלט, בשל פעילותה התמידית."</string>
     <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"מאפשר לאפליקציה להפעיל את עצמו מיד עם השלמת תהליך האתחול של המערכת. משום כך הפעלת הטלפון עשויה להתארך והאפליקציה עלולה להאט את הפעילות הכללית של הטלפון, בשל פעילותה התמידית."</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"מאפשר לאפליקציה לקרוא פרטים מהפרופיל האישי המאוחסנים במכשיר, כגון שמך ופרטי אנשי הקשר שלך. משמעות הדבר שהאפליקציה תוכל לזהות אותך ולשלוח את פרטי הפרופיל שלך לאנשים אחרים."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"שינוי כרטיס איש הקשר שלך"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"מאפשר לאפליקציה לשנות או להוסיף נתונים לפרטי הפרופיל האישי המאוחסנים במכשיר, כגון שמך ופרטי הקשר שלך. משמעות הדבר שהאפליקציה יכולה לזהות אותך ועשוי לשלוח את פרטי הפרופיל שלך לאנשים אחרים."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"חיישני גוף (כמו מוניטורים עבור קצב לב)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"מאפשר לאפליקציה לגשת לנתוני חיישנים שבהם אתה משתמש כדי למדוד פעילות המתרחשת בתוך הגוף, כמו קצב לב."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"קריאת הזרם החברתי שלך"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"מאפשר לאפליקציה גישה ויכולת סנכרון של עדכונים חברתיים שאתה וחבריך מבצעים. היזהר בעת שיתוף מידע -- הדבר מתיר לאפליקציה לקרוא התכתבויות בינך ובין חבריך ברשתות חברתיות, ללא התחשבות בסודיות. שים לב: ייתכן שאישור זה לא נאכף בכל הרשתות החברתיות."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"כתיבה בזרם החברתי שלך"</string>
@@ -464,23 +508,25 @@
     <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטאבלט, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי לוח שנה או לשנות אירועים ללא ידיעת הבעלים."</string>
     <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"מאפשר לאפליקציה להוסיף, להסיר ולשנות אירועים שאתה יכול לשנות בטלפון, כולל אלה של חברים או עמיתים לעבודה. הדבר עשוי להתיר לאפליקציה לשלוח הודעות הנראות כאילו שנשלחו מבעלי לוח שנה או לשנות אירועים ללא ידיעת הבעלים."</string>
     <string name="permlab_accessMockLocation" msgid="8688334974036823330">"צור מקורות מיקום מדומים לצורך בדיקה"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"צור מקורות מיקום מדומים לבדיקה, או התקן ספק מיקום חדש. פעולה זו מאפשרת לאפליקציה לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות מיקום אחרים כמו GPS או ספקי מיקום."</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"‏צור מקורות מיקום מדומים לבדיקה, או התקן ספק מיקום חדש. פעולה זו מאפשרת לאפליקציה לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות מיקום אחרים כמו GPS או ספקי מיקום."</string>
     <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"גישה לפקודות ספק מיקום נוספות"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"מאפשר לאפליקציה לגשת לפקודות נוספות של ספק שירות המיקום. אישור זה עשוי לאפשר לאפליקציה לשבש את פעולת ה-GPS או מקורות מיקום אחרים."</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"‏מאפשר לאפליקציה לגשת לפקודות נוספות של ספק שירות המיקום. אישור זה עשוי לאפשר לאפליקציה לשבש את פעולת ה-GPS או מקורות מיקום אחרים."</string>
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"הרשאה להתקין ספק מיקום"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"צור מקורות מיקום מדומים לבדיקה, או התקן ספק מיקום חדש. פעולה זו מאפשרת לאפליקציה לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות מיקום אחרים כמו GPS או ספקי מיקום."</string>
-    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"מיקום מדויק (מבוסס GPS ורשת)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"מאפשר לאפליקציה לקבל את המיקום המדויק שלך באמצעות מערכת המיקום הגלובלית (GPS) או מקורות מיקום ברשת כגון אנטנות סלולריות ו-Wi-Fi. שירותי מיקום אלה חייבים להיות מופעלים ונגישים למכשיר שלך כדי שהאפליקציה תשתמש בהם. ייתכן שאפליקציות יעשו בכך שימוש כדי לקבוע היכן אתה נמצא ולגרום לצריכת סוללה מוגברת."</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"‏צור מקורות מיקום מדומים לבדיקה, או התקן ספק מיקום חדש. פעולה זו מאפשרת לאפליקציה לעקוף את המיקום ו/או הסטטוס המוחזרים על ידי מקורות מיקום אחרים כמו GPS או ספקי מיקום."</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"‏מיקום מדויק (מבוסס GPS ורשת)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"‏מאפשר לאפליקציה לקבל את המיקום המדויק שלך באמצעות מערכת המיקום הגלובלית (GPS) או מקורות מיקום ברשת כגון אנטנות סלולריות ו-Wi-Fi. שירותי מיקום אלה חייבים להיות מופעלים ונגישים למכשיר שלך כדי שהאפליקציה תשתמש בהם. ייתכן שאפליקציות יעשו בכך שימוש כדי לקבוע היכן אתה נמצא ולגרום לצריכת סוללה מוגברת."</string>
     <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"מיקום משוער (מבוסס רשת)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"מאפשר לאפליקציה לקבל את מיקומך המשוער. מיקום זה נגזר על-פי שירותי מיקום העושים שימוש במקורות מיקום ברשת, כגון אנטנות סלולריות ו-Wi-Fi. שירותי מיקום אלה חייבים להיות מופעלים ונגישים למכשיר שלך כדי שהאפליקציה תשתמש בהם. ייתכן שאפליקציות יעשו בכך שימוש כדי לקבוע את מיקומך המשוער."</string>
-    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"גישה ל-SurfaceFlinger"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"מאפשר לאפליקציה להשתמש בתכונות ברמה הנמוכה של SurfaceFlinger."</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"‏מאפשר לאפליקציה לקבל את מיקומך המשוער. מיקום זה נגזר על-פי שירותי מיקום העושים שימוש במקורות מיקום ברשת, כגון אנטנות סלולריות ו-Wi-Fi. שירותי מיקום אלה חייבים להיות מופעלים ונגישים למכשיר שלך כדי שהאפליקציה תשתמש בהם. ייתכן שאפליקציות יעשו בכך שימוש כדי לקבוע את מיקומך המשוער."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"‏גישה ל-SurfaceFlinger"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"‏מאפשר לאפליקציה להשתמש בתכונות ברמה הנמוכה של SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"אחסון זמני של מסגרת קריאה"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"מאפשר לאפליקציה לקרוא את התוכן של מאגר הנתונים הזמני של המסגרות."</string>
-    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"הגדר תצוגות Wi-Fi"</string>
-    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"מאפשר לאפליקציה להגדיר ולהתחבר לתצוגות Wi-Fi."</string>
-    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"שלוט בתצוגות Wi-Fi"</string>
-    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"מאפשר לאפליקציה לשלוט בתכונות ברמה נמוכה של תצוגות Wi-Fi."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"‏גישה אל InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"‏מאפשרת לאפליקציה להשתמש בתכונות ברמה נמוכה של InputFlinger."</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"‏הגדר תצוגות Wi-Fi"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"‏מאפשר לאפליקציה להגדיר ולהתחבר לתצוגות Wi-Fi."</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"‏שלוט בתצוגות Wi-Fi"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"‏מאפשר לאפליקציה לשלוט בתכונות ברמה נמוכה של תצוגות Wi-Fi."</string>
     <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"קליטת פלט אודיו"</string>
     <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"מאפשרת לאפליקציה לקלוט ולהפנות מחדש פלט אודיו."</string>
     <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"זיהוי של מילת הפעלה"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"מאפשר לאפליקציה לשנות הגדרות אודיו גלובליות כמו עוצמת קול ובחירת הרמקול המשמש לפלט."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"הקלט אודיו"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"מאפשר לאפליקציה להקליט אודיו באמצעות המיקרופון. אישור זה מתיר לאפליקציה להקליט אודיו בכל עת ללא אישורך."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"‏תקשורת SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"‏מאפשרת ליישום לשלוח פקודות ל-SIM. זוהי הרשאה מסוכנת מאוד."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"צלם תמונות וסרטונים"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"מאפשר לאפליקציה לצלם תמונות וסרטונים באמצעות המצלמה. אישור זה מאפשר לאפליקציה להשתמש במצלמה בכל עת ללא אישורך."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"השבת את נורית מצב השידור כשהמצלמה בשימוש"</string>
@@ -507,11 +555,11 @@
     <string name="permlab_reboot" product="default" msgid="2898560872462638242">"אלץ אתחול מחדש של הטלפון"</string>
     <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"מאפשר לאפליקציה לאלץ את הטאבלט לבצע אתחול."</string>
     <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"מאפשר לאפליקציה לאלץ את הטלפון לבצע אתחול."</string>
-    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"גישה למערכת הקבצים של אחסון USB"</string>
-    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"גישה למערכת הקבצים של כרטיס SD"</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"‏גישה למערכת הקבצים של אחסון USB"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"‏גישה למערכת הקבצים של כרטיס SD"</string>
     <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"מאפשר לאפליקציה לטעון ולבטל טעינה של מערכות קבצים באמצעי אחסון נשלפים."</string>
-    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"מחיקת אחסון USB"</string>
-    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"מחיקת כרטיס SD"</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"‏מחיקת אחסון USB"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"‏מחיקת כרטיס SD"</string>
     <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"מאפשר לאפליקציה לפרמט אמצעי אחסון נשלפים."</string>
     <string name="permlab_asec_access" msgid="3411338632002193846">"קבל מידע על אחסון פנימי"</string>
     <string name="permdesc_asec_access" msgid="3094563844593878548">"מאפשר לאפליקציה לקבל מידע על אמצעי האחסון הפנימי."</string>
@@ -527,29 +575,31 @@
     <string name="permdesc_vibrate" msgid="6284989245902300945">"מאפשר לאפליקציה לשלוט ברטט."</string>
     <string name="permlab_flashlight" msgid="2155920810121984215">"שליטה בפנס"</string>
     <string name="permdesc_flashlight" msgid="6522284794568368310">"מאפשר לאפליקציה לשלוט בפנס."</string>
-    <string name="permlab_manageUsb" msgid="1113453430645402723">"נהל העדפות ואישורים עבור מכשירי USB"</string>
-    <string name="permdesc_manageUsb" msgid="7776155430218239833">"מאפשר לאפליקציה לנהל העדפות והרשאות עבור מכשירי USB."</string>
-    <string name="permlab_accessMtp" msgid="4953468676795917042">"יישם פרוטוקול MTP"</string>
-    <string name="permdesc_accessMtp" msgid="6532961200486791570">"מאפשר גישה למנהל התקן MTP של הליבה כדי ליישם את פרוטוקול ה-USB של ה-MTP."</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"‏נהל העדפות ואישורים עבור מכשירי USB"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"‏מאפשר לאפליקציה לנהל העדפות והרשאות עבור מכשירי USB."</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"‏יישם פרוטוקול MTP"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"‏מאפשר גישה למנהל התקן MTP של הליבה כדי ליישם את פרוטוקול ה-USB של ה-MTP."</string>
     <string name="permlab_hardware_test" msgid="4148290860400659146">"בדוק חומרה"</string>
     <string name="permdesc_hardware_test" msgid="6597964191208016605">"מאפשר לאפליקציה לשלוט בפריטי ציוד היקפי שונים לצורך בדיקת החומרה."</string>
     <string name="permlab_callPhone" msgid="3925836347681847954">"התקשר ישירות למספרי טלפון"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"מאפשר לאפליקציה להתקשר למספרי טלפון ללא התערבותך. פעולה זו עשויה לגרום לשיחות או לחיובים לא צפויים. שים לב שהדבר לא מאפשר לאפליקציה להתקשר למספרי חירום. אפליקציות זדוניות עשויות לגרום לעלויות על ידי ביצוע שיחות ללא התערבותך."</string>
     <string name="permlab_callPrivileged" msgid="4198349211108497879">"התקשר ישירות לכל מספר טלפון"</string>
     <string name="permdesc_callPrivileged" msgid="1689024901509996810">"מאפשר לאפליקציה להתקשר לכל מספר טלפון שהוא, כולל מספרי חירום, ללא התערבותך. אפליקציות זדוניות עלולות לבצע שיחות מיותרות ולא חוקיות לשירותי חירום."</string>
-    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"הפעל ישירות התקנת טאבלט מסוג CDMA"</string>
-    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"הפעל ישירות הגדרה של טלפון CDMA"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"מאפשר לאפליקציה להפעיל הקצאת CDMA. אפליקציות זדוניות עלולות להפעיל הקצאת CDMA ללא צורך."</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"‏הפעל ישירות התקנת טאבלט מסוג CDMA"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"‏הפעל ישירות הגדרה של טלפון CDMA"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"‏מאפשר לאפליקציה להפעיל הקצאת CDMA. אפליקציות זדוניות עלולות להפעיל הקצאת CDMA ללא צורך."</string>
     <string name="permlab_locationUpdates" msgid="7785408253364335740">"שלוט בהתראות על עדכון מיקום"</string>
     <string name="permdesc_locationUpdates" msgid="1120741557891438876">"מאפשר לאפליקציה לאפשר/להשבית התראות לגבי עדכוני מיקום מהרדיו. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"גישה למאפייני כניסה"</string>
     <string name="permdesc_checkinProperties" msgid="4024526968630194128">"מאפשר לאפליקציה לקבל גישה לקריאה/כתיבה למאפיינים שהועלו על ידי שירות הכניסה. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
-    <string name="permlab_bindGadget" msgid="776905339015863471">"בחר רכיבי Widget"</string>
-    <string name="permdesc_bindGadget" msgid="8261326938599049290">"מאפשר לאפליקציה ליידע את המערכת באילו פריטי Widget יכול להשתמש כל אפליקציה. אפליקציה בעלת הרשאה זו יכול לספק לאפליקציות אחרות גישה לנתונים אישיים. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"‏בחר רכיבי Widget"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"‏מאפשר לאפליקציה ליידע את המערכת באילו פריטי Widget יכול להשתמש כל אפליקציה. אפליקציה בעלת הרשאה זו יכול לספק לאפליקציות אחרות גישה לנתונים אישיים. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"שנה את מצב הטלפון"</string>
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"מאפשר לאפליקציה לשלוט בתכונות הטלפון של המכשיר. אפליקציה בעלת הרשאה זו יכולה לעבור בין רשתות, להפעיל ולכבות את הרדיו בטלפון ולבצע פעולות נוספות דומות מבלי ליידע אותך."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"קריאת הסטטוס והזהות של הטלפון"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"מאפשר לאפליקציה לגשת לתכונות הטלפון של המכשיר. אישור זה מתיר לאפליקציה לגלות את מספר הטלפון ואת זיהויי המכשיר, האם שיחה פעילה ואת המספר המרוחק המחובר באמצעות שיחה."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"קריאת מצבי טלפון מדויקים"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"מאפשר לאפליקציה לגשת למצבי הטלפון המדויקים. ההרשאה הזו מאפשרית לאפליקציה לדעת מה סטטוס השיחה בפועל, האם שיחה פעילה או ברקע, כשלי שיחות, סטטוס מדויק על חיבור נתונים וכשלים בחיבור נתונים."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"מנע מהטאבלט לעבור למצב שינה"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"מניעת מעבר הטלפון למצב שינה"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"מאפשר לאפליקציה למנוע מהטאבלט לעבור למצב שינה."</string>
@@ -576,8 +626,8 @@
     <string name="permlab_setTimeZone" msgid="2945079801013077340">"הגדר אזור זמן"</string>
     <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"מאפשר לאפליקציה לשנות את אזור הזמן של הטאבלט."</string>
     <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"מאפשר לאפליקציה לשנות את אזור הזמן של הטלפון."</string>
-    <string name="permlab_accountManagerService" msgid="4829262349691386986">"פעל בתור ה-AccountManagerService"</string>
-    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"הרשאה זו מאפשרת לאפליקציה לבצע שיחות אל AccountAuthenticators."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"‏פעל בתור ה-AccountManagerService"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"‏הרשאה זו מאפשרת לאפליקציה לבצע שיחות אל AccountAuthenticators."</string>
     <string name="permlab_getAccounts" msgid="1086795467760122114">"חיפוש חשבונות במכשיר"</string>
     <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"מאפשר לאפליקציה לקבל רשימה של חשבונות המוכרים לטאבלט. הדבר עשוי לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת."</string>
     <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"מאפשר לאפליקציה לקבל רשימה של חשבונות המוכרים לטלפון. הדבר עשוי לכלול חשבונות שנוצרו על ידי אפליקציות שהתקנת."</string>
@@ -590,37 +640,40 @@
     <string name="permlab_accessNetworkState" msgid="4951027964348974773">"הצג חיבורי רשת"</string>
     <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"מאפשר לאפליקציה להציג מידע לגבי חיבורי רשת, למשל, אילו רשתות קיימות ומחוברות."</string>
     <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"גישת רשת מלאה"</string>
-    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"מאפשר לאפליקציה ליצור Sockets ולהשתמש בפרוטוקולי רשת מותאמים אישית. הדפדפן ואפליקציות  אחרות מספקות אמצעים לשליחת נתונים לאינטרנט, כך שאישור זה אינו נחוץ לשליחת נתונים לאינטרנט."</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"‏מאפשר לאפליקציה ליצור Sockets ולהשתמש בפרוטוקולי רשת מותאמים אישית. הדפדפן, כמו אפליקציות  אחרות, מספק אמצעים לשליחת נתונים לאינטרנט, כך שאישור זה אינו נחוץ לשליחת נתונים לאינטרנט."</string>
     <string name="permlab_writeApnSettings" msgid="505660159675751896">"שנה/עכב הגדרות רשת ותנועה"</string>
-    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"מאפשר לאפליקציה לשנות את הגדרות הרשת ולעכב ולבדוק את כל תנועת הרשת, לדוגמה, לשנות את ה-proxy והיציאה של כל רשת APN. אפליקציות זדוניות עלולות לעקוב אחר חבילות רשת, לבצע הפניה מחדש שלהן או לשנות אותן, ללא ידיעתך."</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"‏מאפשר לאפליקציה לשנות את הגדרות הרשת ולעכב ולבדוק את כל תנועת הרשת, לדוגמה, לשנות את ה-proxy והיציאה של כל רשת APN. אפליקציות זדוניות עלולות לעקוב אחר חבילות רשת, לבצע הפניה מחדש שלהן או לשנות אותן, ללא ידיעתך."</string>
     <string name="permlab_changeNetworkState" msgid="958884291454327309">"שנה את קישוריות הרשת"</string>
     <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"מאפשר לאפליקציה לשנות את מצב הקישוריות של הרשת."</string>
     <string name="permlab_changeTetherState" msgid="5952584964373017960">"שינוי של קישוריות קשורה"</string>
     <string name="permdesc_changeTetherState" msgid="1524441344412319780">"מאפשר לאפליקציה לשנות את מצב הקישוריות של רשת קשורה."</string>
     <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"שנה את הגדרות השימוש בנתוני הרקע"</string>
     <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"מאפשר לאפליקציה לשנות את הגדרת השימוש בנתוני רקע."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"הצג חיבורי Wi-Fi"</string>
-    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"מאפשר לאפליקציה להציג מידע על רשתות Wi-Fi, למשל, האם Wi-Fi מופעל, כמו גם שם מכשירי ה-Wi-Fi המחוברים."</string>
-    <string name="permlab_changeWifiState" msgid="6550641188749128035">"התחברות והתנתקות מ-Wi-Fi"</string>
-    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"מאפשר לאפליקציה להתחבר לנקודות גישת Wi-Fi ולהתנתק מהן, וכן לבצע שינויים בתצורת המכשיר עבור רשתות Wi-Fi."</string>
-    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"אפשר קבלת שידורים מרובים ב-Wi-Fi"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"מאפשר לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות שידור לקבוצה, ולא רק בטאבלט שלך. צריכת החשמל גבוהה יותר מאשר במצב שאינו שידור לקבוצה."</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"מאפשר לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות שידור לקבוצה, ולא רק בטלפון שלך. צריכת החשמל גבוהה יותר מאשר במצב שאינו שידור לקבוצה."</string>
-    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"גישה להגדרות Bluetooth"</string>
-    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"מאפשר לאפליקציה להגדיר את תצורתו של הטאבלט המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
-    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"מאפשר לאפליקציה להגדיר את תצורתו של הטלפון המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
-    <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"אפשר התאמת Bluetooth על ידי האפליקציה"</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"‏הצג חיבורי Wi-Fi"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"‏מאפשר לאפליקציה להציג מידע על רשתות Wi-Fi, למשל, האם Wi-Fi מופעל, כמו גם שם מכשירי ה-Wi-Fi המחוברים."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"‏התחברות והתנתקות מ-Wi-Fi"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"‏מאפשר לאפליקציה להתחבר לנקודות גישת Wi-Fi ולהתנתק מהן, וכן לבצע שינויים בתצורת המכשיר עבור רשתות Wi-Fi."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"‏אפשר קבלת שידורים מרובים ב-Wi-Fi"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"‏מאפשר לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות שידור לקבוצה, ולא רק בטאבלט שלך. צריכת החשמל גבוהה יותר מאשר במצב שאינו שידור לקבוצה."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"‏מאפשר לאפליקציה לקבל חבילות שנשלחו לכל המכשירים ברשת Wi-Fi באמצעות כתובות שידור לקבוצה, ולא רק בטלפון שלך. צריכת החשמל גבוהה יותר מאשר במצב שאינו שידור לקבוצה."</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"‏גישה להגדרות Bluetooth"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"‏מאפשר לאפליקציה להגדיר את תצורתו של הטאבלט המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"‏מאפשר לאפליקציה להגדיר את תצורתו של הטלפון המקומי מסוג Bluetooth וכן לגלות מכשירים מרוחקים ולבצע התאמה איתם."</string>
+    <string name="permlab_bluetoothPriv" msgid="4009494246009513828">"‏אפשר התאמת Bluetooth על ידי האפליקציה"</string>
     <string name="permdesc_bluetoothPriv" product="tablet" msgid="8045735193417468857">"מאפשרת לאפליקציה לבצע התאמה עם מכשירים מרוחקים ללא התערבות המשתמש."</string>
     <string name="permdesc_bluetoothPriv" product="default" msgid="8045735193417468857">"מאפשרת לאפליקציה לבצע התאמה עם מכשירים מרוחקים ללא התערבות המשתמש."</string>
-    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"התחברות והתנתקות מ-WiMAX"</string>
-    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"מאפשר לאפליקציה לדעת האם WiNMAX מופעל, כמו גם לקבל מידע האם רשתות WiNMAX כלשהן מחוברות."</string>
-    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"שנה את מצב WiMAX"</string>
-    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"מאפשר לאפליקציה לחבר את הטאבלט לרשתות WiMAX ולהתנתק מהן."</string>
-    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"מאפשר לאפליקציה לחבר את הטלפון לרשתות WiMAX ולהתנתק מהן."</string>
-    <string name="permlab_bluetooth" msgid="6127769336339276828">"התאמה למכשירי Bluetooth"</string>
-    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"מאפשר לאפליקציה להציג את תצורת ה-Bluetooth בטאבלט, וכן ליצור ולקבל חיבורים עם מכשירים מותאמים."</string>
-    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"מאפשר לאפליקציה להציג את תצורת ה-Bluetooth בטלפון, וכן ליצור ולקבל חיבורים עם מכשירים מותאמים."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"שלוט ב-Near Field Communication"</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"‏התחברות והתנתקות מ-WiMAX"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"‏מאפשר לאפליקציה לדעת האם WiNMAX מופעל, כמו גם לקבל מידע האם רשתות WiNMAX כלשהן מחוברות."</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"‏שנה את מצב WiMAX"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"‏מאפשר לאפליקציה לחבר את הטאבלט לרשתות WiMAX ולהתנתק מהן."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"‏מאפשר לאפליקציה לחבר את הטלפון לרשתות WiMAX ולהתנתק מהן."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"דרג רשתות"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"מאפשר ליישום לדרג רשתות ולהשפיע על הרשתות שאותן הטאבלט יעדיף."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"מאפשר ליישום לדרג רשתות ולהשפיע על הרשתות שאותן הטלפון יעדיף."</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"‏התאמה למכשירי Bluetooth"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"‏מאפשר לאפליקציה להציג את תצורת ה-Bluetooth בטאבלט, וכן ליצור ולקבל חיבורים עם מכשירים מותאמים."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"‏מאפשר לאפליקציה להציג את תצורת ה-Bluetooth בטלפון, וכן ליצור ולקבל חיבורים עם מכשירים מותאמים."</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"‏שלוט ב-Near Field Communication"</string>
     <string name="permdesc_nfc" msgid="7120611819401789907">"מאפשר לאפליקציה נהל תקשורת עם תגים, כרטיסים וקוראים מסוג \'תקשורת מטווח קצר\'."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"ביטול נעילת המסך שלך"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"מאפשר לאפליקציה להשבית את נעילת המקשים וכל אמצעי אבטחה משויך המבוסס על סיסמה. לדוגמה, הטלפון משבית את נעילת המקשים בעת קבלה של שיחת טלפון נכנסת, ולאחר מכן מפעיל מחדש את נעילת המקשים עם סיום השיחה."</string>
@@ -638,14 +691,14 @@
     <string name="permdesc_readDictionary" msgid="659614600338904243">"מאפשר לאפליקציה לקרוא את כל המילים, השמות והביטויים שהמשתמש אחסן במילון המשתמש."</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"הוספת מילים למילון מוגדר-משתמש"</string>
     <string name="permdesc_writeDictionary" msgid="8185385716255065291">"מאפשר לאפליקציה לכתוב מילים חדשות במילון המשתמש."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"קריאת התוכן של אחסון ה-USB שלך"</string>
-    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"קריאת התוכן של כרטיס ה-SD שלך"</string>
-    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"מאפשר לאפליקציה לקרוא את תוכן אחסון ה-USB שלך."</string>
-    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"מאפשר לאפליקציה לקרוא את תוכן כרטיס ה-SD שלך."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"שינוי או מחיקה של תוכן אחסון ה-USB שלך"</string>
-    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"שינוי או מחיקה של תוכן כרטיס ה-SD שלך"</string>
-    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"מאפשר לאפליקציה לכתוב להתקן האחסון מסוג USB."</string>
-    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"מאפשר לאפליקציה לכתוב לכרטיס ה-SD."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"‏קריאת התוכן של אחסון ה-USB שלך"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"‏קריאת התוכן של כרטיס ה-SD שלך"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"‏מאפשר לאפליקציה לקרוא את תוכן אחסון ה-USB שלך."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"‏מאפשר לאפליקציה לקרוא את תוכן כרטיס ה-SD שלך."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"‏שינוי או מחיקה של תוכן אחסון ה-USB שלך"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"‏שינוי או מחיקה של תוכן כרטיס ה-SD שלך"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"‏מאפשר לאפליקציה לכתוב להתקן האחסון מסוג USB."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"‏מאפשר לאפליקציה לכתוב לכרטיס ה-SD."</string>
     <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"שנה/מחק תוכן של אחסון מדיה פנימי"</string>
     <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"מאפשר לאפליקציה לשנות את התוכן של אמצעי האחסון הפנימי למדיה."</string>
     <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"ניהול של אחסון מסמכים"</string>
@@ -655,7 +708,7 @@
     <string name="permlab_cache_filesystem" msgid="5656487264819669824">"גישה למערכת הקבצים בקובץ השמור"</string>
     <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"מאפשר לאפליקציה לקרוא ולכתוב במערכת הקבצים של הקבצים השמורים."</string>
     <string name="permlab_use_sip" msgid="5986952362795870502">"בצע/קבל שיחות אינטרנט"</string>
-    <string name="permdesc_use_sip" msgid="4717632000062674294">"מאפשר לאפליקציה להשתמש בשירות SIP כדי לבצע/לקבל שיחות אינטרנט."</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"‏מאפשר לאפליקציה להשתמש בשירות SIP כדי לבצע/לקבל שיחות אינטרנט."</string>
     <string name="permlab_bind_call_service" msgid="6724009726671246551">"צור אינטראקציה עם מסך שיחה נכנסת"</string>
     <string name="permdesc_bind_call_service" msgid="8732547662442572435">"מאפשר לאפליקציה לקבוע מתי ואיך המשתמש יראה שיחה נכנסת על המסך."</string>
     <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"קריאת נתוני שימוש היסטוריים ברשת"</string>
@@ -664,16 +717,22 @@
     <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"מאפשר לאפליקציה לנהל מדיניות הרשת להגדיר כללים ספציפיים-לאפליקציה."</string>
     <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"שנה ניהול חשבונות של שימוש ברשת"</string>
     <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"הרשאה זו מאפשרת לאפליקציה לשנות את אופן החישוב של נתוני שימוש ברשת מול כל אפליקציה. לא מיועד לשימוש באפליקציות רגילות."</string>
-    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"שינוי של סימני Socket"</string>
-    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"ההרשאה הזו מאפשרת לאפליקציה לשנות סימני Socket עבור ניתוב"</string>
+    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"‏שינוי של סימני Socket"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"‏ההרשאה הזו מאפשרת לאפליקציה לשנות סימני Socket עבור ניתוב"</string>
     <string name="permlab_accessNotifications" msgid="7673416487873432268">"גישה להתראות"</string>
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"מאפשר לאפליקציה לאחזר, לבדוק ולמחוק התראות, כולל כאלה שפורסמו על ידי אפליקציות אחרות."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"איגוד לשירות של מאזין להתראות"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"הרשאה זו מאפשרת למשתמש לבצע איגוד לממשק הרמה העליונה של שירות מאזין להתראות. הרשאה זו אף פעם אינה נחוצה לאפליקציות רגילים."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"איגוד לשירות ספק תנאי"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"מאפשרת לבעלים לאגד לממשק ברמה העליונה של שירות ספק תנאי. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"הפעלה של אפליקציית תצורה שסופקה על ידי ספק"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"ההרשאה הזו מאפשרת לבעלים להפעיל את אפליקציית התצורה שסופקה על ידי ספק. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"קליטת מעקב אחר תנאי רשת"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"מאפשרת לאפליקציה לקלוט מעקב אחר תנאי רשת. לעולם לא אמורה להיות נחוצה עבור אפליקציות רגילות."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"שינוי הכיול של מכשיר קלט"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"מאפשרת לאפליקציה לשנות את פרמטרי הכיול של מסך המגע. לעולם לא אמורה להיות נחוצה לאפליקציות רגילות."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"‏גישה אל אישורי DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"‏מאפשרת לאפליקציה לנהל תצורה של אישורי DRM ולהשתמש בהם. לעולם לא אמורה להיות נחוצה עבור אפליקציה רגילה."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"הגדר כללי סיסמה"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"שלוט באורך ובתווים המותרים בסיסמאות לביטול נעילת מסך."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"עקוב אחר ניסיונות לביטול נעילת מסך"</string>
@@ -686,16 +745,16 @@
     <string name="policylab_wipeData" msgid="3910545446758639713">"מחק את כל הנתונים"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"מחק את נתוני הטאבלט ללא אזהרה על ידי ביצוע איפוס נתוני יצרן."</string>
     <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"מחק את נתוני הטלפון ללא אזהרה על ידי ביצוע איפוס נתוני יצרן."</string>
-    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"הגדר את שרת ה-Proxy הכללי של המכשיר"</string>
-    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"הגדר שימוש בשרת ה-Proxy הגלובלי של המכשיר כאשר המדיניות מופעלת. רק מנהל המכשיר הראשון מגדיר את שרת ה-Proxy הגלובלי הפעיל."</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"‏הגדר את שרת ה-Proxy הכללי של המכשיר"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"‏הגדר שימוש בשרת ה-Proxy הגלובלי של המכשיר כאשר המדיניות מופעלת. רק מנהל המכשיר הראשון מגדיר את שרת ה-Proxy הגלובלי הפעיל."</string>
     <string name="policylab_expirePassword" msgid="885279151847254056">"הגדר תאריך תפוגה לסיסמה של נעילת המסך"</string>
     <string name="policydesc_expirePassword" msgid="1729725226314691591">"שלוט בתדירות שבה יש לשנות את הסיסמה של נעילת המסך."</string>
     <string name="policylab_encryptedStorage" msgid="8901326199909132915">"הגדר הצפנת אחסון"</string>
     <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"דרוש שנתוני אפליקציות מאוחסנות יהיו מוצפנים."</string>
     <string name="policylab_disableCamera" msgid="6395301023152297826">"השבת מצלמות"</string>
     <string name="policydesc_disableCamera" msgid="2306349042834754597">"מנע שימוש בכל המצלמות שבמכשיר."</string>
-    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"השבת תכונות ב-Keyguard"</string>
-    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"מנע שימוש בתכונות מסוימות ב-Keyguard."</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"‏השבת תכונות ב-Keyguard"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"‏מנע שימוש בתכונות מסוימות ב-Keyguard."</string>
   <string-array name="phoneTypes">
     <item msgid="8901098336658710359">"בית"</item>
     <item msgid="869923650527136615">"נייד"</item>
@@ -809,14 +868,15 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"דף הבית"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"עבודה"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"אחר"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"הקלד קוד PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"הקלד את קוד ה-PUK וקוד  ה-PIN החדש"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"קוד PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"קוד PIN חדש"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"לא נמצאה אפליקציה להצגת התוכן הזה."</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"‏הקלד קוד PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"‏הקלד את קוד ה-PUK וקוד  ה-PIN החדש"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"‏קוד PUK"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"‏קוד PIN חדש"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"גע כדי להקליד את הסיסמה"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"הקלד סיסמה לביטול הנעילה"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"הקלד קוד PIN לביטול הנעילה"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"קוד PIN שגוי"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"‏הקלד קוד PIN לביטול הנעילה"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"‏קוד PIN שגוי"</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"כדי לבטל את הנעילה, לחץ על \'תפריט\' ולאחר מכן על 0."</string>
     <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"מספר חירום"</string>
     <string name="lockscreen_carrier_default" msgid="8963839242565653192">"אין שירות"</string>
@@ -834,13 +894,13 @@
     <string name="lockscreen_charged" msgid="321635745684060624">"טעון"</string>
     <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="lockscreen_low_battery" msgid="1482873981919249740">"חבר את המטען."</string>
-    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"אין כרטיס SIM"</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"אין כרטיס SIM בטאבלט."</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"אין כרטיס SIM בטלפון."</string>
-    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"הכנס כרטיס SIM."</string>
-    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string>
-    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"לא ניתן להשתמש בכרטיס SIM זה."</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"כרטיס ה-SIM שלך הושבת לצמיתות.\nפנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"‏אין כרטיס SIM"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"‏אין כרטיס SIM בטאבלט."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"‏אין כרטיס SIM בטלפון."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"‏הכנס כרטיס SIM."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"‏כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"‏לא ניתן להשתמש בכרטיס SIM זה."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"‏כרטיס ה-SIM שלך הושבת לצמיתות.\nפנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string>
     <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"לחצן הרצועה הקודמת"</string>
     <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"לחצן הרצועה הבאה"</string>
     <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"לחצן ההשהיה"</string>
@@ -848,15 +908,15 @@
     <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"לחצן העצירה"</string>
     <string name="emergency_calls_only" msgid="6733978304386365407">"שיחות חירום בלבד"</string>
     <string name="lockscreen_network_locked_message" msgid="143389224986028501">"רשת נעולה"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"כרטיס SIM נעול באמצעות PUK."</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"‏כרטיס SIM נעול באמצעות PUK."</string>
     <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"עיין במדריך למשתמש או פנה לשירות הלקוחות."</string>
-    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"כרטיס ה-SIM נעול."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"מבטל נעילה של כרטיס SIM…"</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"‏כרטיס ה-SIM נעול."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"‏מבטל נעילה של כרטיס SIM…"</string>
     <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
     <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"הקלדת קוד PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"שרטטת באופן שגוי את קו ביטול הנעילה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטאבלט באמצעות פרטי הכניסה שלך ל-Google.\n\nנסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. בעוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות פרטי הכניסה שלך ל-Google‏.\n\n נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"‏הקלדת קוד PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"‏שרטטת באופן שגוי את קו ביטול הנעילה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטאבלט באמצעות פרטי הכניסה שלך ל-Google.\n\nנסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"‏שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. בעוד <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות פרטי הכניסה שלך ל-Google‏.\n\n נסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטאבלט. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטאבלט יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
     <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטלפון יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
     <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"ביצעת <xliff:g id="NUMBER">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטאבלט. הטאבלט יעבור כעת איפוס לברירת המחדל של היצרן."</string>
@@ -865,12 +925,12 @@
     <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"שכחת את הקו?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"ביטול נעילת חשבון"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"בוצעו ניסיונות רבים מדי לשרטוט קו ביטול נעילה."</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"‏כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string>
     <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"שם משתמש (דוא\"ל)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"סיסמה"</string>
     <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"כניסה"</string>
     <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"שם משתמש או סיסמה לא חוקיים."</string>
-    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"שכחת את שם המשתמש או הסיסמה?\nבקר בכתובת "<b>"google.com/accounts/recovery"</b></string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"‏שכחת את שם המשתמש או הסיסמה?\nבקר בכתובת "<b>"google.com/accounts/recovery"</b></string>
     <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"בודק..."</string>
     <string name="lockscreen_unlock_label" msgid="737440483220667054">"בטל נעילה"</string>
     <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"קול פועל"</string>
@@ -879,24 +939,24 @@
     <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"התבנית נמחקה"</string>
     <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"התא נוסף"</string>
     <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"התבנית הושלמה"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d מתוך %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"הוסף Widget."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"‏%1$s. Widget %2$d מתוך %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"‏הוסף Widget."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ריק"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"אזור ביטול הנעילה הורחב."</string>
     <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"אזור ביטול הנעילה כווץ."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"‏Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
     <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"בוחר משתמשים"</string>
     <string name="keyguard_accessibility_status" msgid="8008264603935930611">"סטטוס"</string>
     <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"מצלמה"</string>
     <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"פקדי מדיה"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"סידור מחדש של Widgets התחיל."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"סידור מחדש של Widgets הסתיים."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> נמחק."</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"‏סידור מחדש של Widgets התחיל."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"‏סידור מחדש של Widgets הסתיים."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"‏Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> נמחק."</string>
     <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"הרחב את אזור ביטול הנעילה."</string>
     <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"ביטול נעילה באמצעות הסטה."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ביטול נעילה באמצעות ציור קו."</string>
     <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ביטול נעילה באמצעות זיהוי פנים."</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ביטול נעילה באמצעות מספר PIN."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"‏ביטול נעילה באמצעות מספר PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ביטול נעילה באמצעות סיסמה."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"אזור ציור קו."</string>
     <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"אזור הסטה."</string>
@@ -910,8 +970,8 @@
     <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
     <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
     <string name="factorytest_failed" msgid="5410270329114212041">"בדיקת היצרן נכשלה"</string>
-    <string name="factorytest_not_system" msgid="4435201656767276723">"הפעולה FACTORY_TEST נתמכת רק עבור חבילות שהותקנו ב-‎/system/app."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"לא נמצאה חבילה המספקת את הפעולה FACTORY_TEST."</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"‏הפעולה FACTORY_TEST נתמכת רק עבור חבילות שהותקנו ב-‎/system/app."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"‏לא נמצאה חבילה המספקת את הפעולה FACTORY_TEST."</string>
     <string name="factorytest_reboot" msgid="6320168203050791643">"אתחל מחדש"</string>
     <string name="js_dialog_title" msgid="1987483977834603872">"בדף שבכתובת \'<xliff:g id="TITLE">%s</xliff:g>\' כתוב כך:"</string>
     <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
@@ -940,10 +1000,10 @@
     <string name="autofill_area" msgid="3547409050889952423">"אזור"</string>
     <string name="autofill_emirate" msgid="2893880978835698818">"אמירות"</string>
     <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"קריאת סימניות והיסטוריית האינטרנט שלך"</string>
-    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"מאפשר לאפליקציה לקרוא את ההיסטוריה של כל כתובות האתרים שבהן הדפדפן ביקר, ואת כל ה-Bookmarks של הדפדפן. שים לב: דפדפני צד שלישי או אפליקציות אחרות עם יכולות לדפדוף באינטרנט אינם יכולים לאכוף אישור זה."</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"‏מאפשר לאפליקציה לקרוא את ההיסטוריה של כל כתובות האתרים שבהן הדפדפן ביקר, ואת כל ה-Bookmarks של הדפדפן. שים לב: דפדפני צד שלישי או אפליקציות אחרות עם יכולות לדפדוף באינטרנט אינם יכולים לאכוף אישור זה."</string>
     <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"כתיבת סימניות והיסטוריית אינטרנט"</string>
-    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"מאפשר לאפליקציה לשנות את ההיסטוריה או ה-Bookmarks של הדפדפן המאוחסנים בטאבלט. הדבר עשוי לאפשר לאפליקציה למחוק או לשנות נתוני דפדפן. שים לב: אישור זה אינו ניתן לאכיפה על ידי דפדפני צד שלישי או אפליקציות אחרות בעלות יכולות גלישה באינטרנט."</string>
-    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"מאפשר לאפליקציה לשנות את ההיסטוריה או ה-Bookmarks של הדפדפן המאוחסנים בטלפון. הדבר עשוי לאפשר לאפליקציה למחוק או לשנות נתוני דפדפן. שים לב: אישור זה אינו ניתן לאכיפה על ידי דפדפני צד שלישי או אפליקציות אחרות בעלות יכולות גלישה באינטרנט."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"‏מאפשר לאפליקציה לשנות את ההיסטוריה או ה-Bookmarks של הדפדפן המאוחסנים בטאבלט. הדבר עשוי לאפשר לאפליקציה למחוק או לשנות נתוני דפדפן. שים לב: אישור זה אינו ניתן לאכיפה על ידי דפדפני צד שלישי או אפליקציות אחרות בעלות יכולות גלישה באינטרנט."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"‏מאפשר לאפליקציה לשנות את ההיסטוריה או ה-Bookmarks של הדפדפן המאוחסנים בטלפון. הדבר עשוי לאפשר לאפליקציה למחוק או לשנות נתוני דפדפן. שים לב: אישור זה אינו ניתן לאכיפה על ידי דפדפני צד שלישי או אפליקציות אחרות בעלות יכולות גלישה באינטרנט."</string>
     <string name="permlab_setAlarm" msgid="1379294556362091814">"הגדרת התראה"</string>
     <string name="permdesc_setAlarm" msgid="316392039157473848">"מאפשר לאפליקציה להגדיר התראה באפליקציה מותקנת של שעון מעורר. אפליקציות מסוימות של שעון מעורר אינן מיישמות תכונה זו."</string>
     <string name="permlab_addVoicemail" msgid="5525660026090959044">"הוסף דואר קולי"</string>
@@ -955,7 +1015,7 @@
     <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"הכפפה למאמת חבילה"</string>
     <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"מאפשר למשתמש להגיש בקשות של מאמתי חבילות. הרשאה זו לעולם אינה נחוצה לאפליקציות רגילים."</string>
     <string name="permlab_serialPort" msgid="546083327654631076">"גישה ליציאות טוריות"</string>
-    <string name="permdesc_serialPort" msgid="2991639985224598193">"מאפשר לבעלים לגשת ליציאות טוריות באמצעות ממשק ה- API של SerialManager."</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"‏מאפשר לבעלים לגשת ליציאות טוריות באמצעות ממשק ה- API של SerialManager."</string>
     <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"גישה לספקי תוכן באופן חיצוני"</string>
     <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"מאפשר לבעלים לגשת לספקי תוכן מהמעטפת. לעולם לא אמור להיות צורך עבור אפליקציות רגילות."</string>
     <string name="permlab_updateLock" msgid="3527558366616680889">"דחה עדכוני מכשיר אוטומטיים"</string>
@@ -1093,7 +1153,7 @@
     <string name="cut" msgid="3092569408438626261">"חתוך"</string>
     <string name="copy" msgid="2681946229533511987">"העתק"</string>
     <string name="paste" msgid="5629880836805036433">"הדבק"</string>
-    <string name="replace" msgid="5781686059063148930">"להחליף..."</string>
+    <string name="replace" msgid="5781686059063148930">"החלף..."</string>
     <string name="delete" msgid="6098684844021697789">"מחק"</string>
     <string name="copyUrl" msgid="2538211579596067402">"העתק כתובת אתר"</string>
     <string name="selectTextMode" msgid="1018691815143165326">"בחר טקסט"</string>
@@ -1117,9 +1177,9 @@
     <string name="whichApplication" msgid="4533185947064773386">"השלמת פעולה באמצעות"</string>
     <string name="whichHomeApplication" msgid="4616420172727326782">"בחר אפליקציה לדף הבית"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"השתמש כברירת מחדל עבור פעולה זו."</string>
-    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"נקה את הגדרת המחדל ב\'הגדרות מערכת\' &lt;‏ Google Apps‏ &lt; \'הורדות\'."</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"‏נקה את הגדרת המחדל ב\'הגדרות מערכת\' &lt;‏ Google Apps‏ &lt; \'הורדות\'."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"בחירת פעולה"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"בחר אפליקציה עבור התקן ה-USB"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"‏בחר אפליקציה עבור התקן ה-USB"</string>
     <string name="noApplications" msgid="2991814273936504689">"אין אפליקציות שיכולות לבצע פעולה זו."</string>
     <string name="aerr_title" msgid="1905800560317137752"></string>
     <string name="aerr_application" msgid="932628488013092776">"לצערנו, פעולת <xliff:g id="APPLICATION">%1$s</xliff:g> הופסקה."</string>
@@ -1138,9 +1198,9 @@
     <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> הופעל במקור."</string>
     <string name="screen_compat_mode_scale" msgid="3202955667675944499">"שינוי קנה-מידה"</string>
     <string name="screen_compat_mode_show" msgid="4013878876486655892">"הצג תמיד"</string>
-    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"אפשר תכונה זו מחדש ב\'הגדרות מערכת\' &lt;‏ Google Apps‏ &lt; \'הורדות\'."</string>
-    <string name="smv_application" msgid="3307209192155442829">"האפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> (תהליך <xliff:g id="PROCESS">%2$s</xliff:g>) הפר את מדיניות StrictMode באכיפה עצמית שלו."</string>
-    <string name="smv_process" msgid="5120397012047462446">"התהליך <xliff:g id="PROCESS">%1$s</xliff:g> הפר את מדיניות StrictMode באכיפה עצמית."</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"‏אפשר תכונה זו מחדש ב\'הגדרות מערכת\' &lt;‏ Google Apps‏ &lt; \'הורדות\'."</string>
+    <string name="smv_application" msgid="3307209192155442829">"‏האפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> (תהליך <xliff:g id="PROCESS">%2$s</xliff:g>) הפר את מדיניות StrictMode באכיפה עצמית שלו."</string>
+    <string name="smv_process" msgid="5120397012047462446">"‏התהליך <xliff:g id="PROCESS">%1$s</xliff:g> הפר את מדיניות StrictMode באכיפה עצמית."</string>
     <string name="android_upgrading_title" msgid="1584192285441405746">"‏Android מבצע שדרוג…"</string>
     <string name="android_upgrading_apk" msgid="7904042682111526169">"מבצע אופטימיזציה של אפליקציה <xliff:g id="NUMBER_0">%1$d</xliff:g> מתוך <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
     <string name="android_upgrading_starting_apps" msgid="451464516346926713">"מפעיל אפליקציות."</string>
@@ -1156,14 +1216,14 @@
     <string name="sendText" msgid="5209874571959469142">"בחירת פעולה לביצוע עם טקסט"</string>
     <string name="volume_ringtone" msgid="6885421406845734650">"עוצמת קול של צלצול"</string>
     <string name="volume_music" msgid="5421651157138628171">"עוצמת קול של מדיה"</string>
-    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"הפעלה באמצעות Bluetooth"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"‏הפעלה באמצעות Bluetooth"</string>
     <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"הוגדר רינגטון שקט"</string>
     <string name="volume_call" msgid="3941680041282788711">"עוצמת קול בשיחה"</string>
-    <string name="volume_bluetooth_call" msgid="2002891926351151534">"עוצמת הקול בשיחה ב-Bluetooth"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"‏עוצמת הקול בשיחה ב-Bluetooth"</string>
     <string name="volume_alarm" msgid="1985191616042689100">"עוצמת קול של התראה"</string>
     <string name="volume_notification" msgid="2422265656744276715">"עוצמת קול של התראות"</string>
     <string name="volume_unknown" msgid="1400219669770445902">"עוצמת קול"</string>
-    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"עוצמת קול של Bluetooth"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"‏עוצמת קול של Bluetooth"</string>
     <string name="volume_icon_description_ringer" msgid="3326003847006162496">"עוצמת קול של רינגטון"</string>
     <string name="volume_icon_description_incall" msgid="8890073218154543397">"עוצמת קול של שיחות"</string>
     <string name="volume_icon_description_media" msgid="4217311719665194215">"עוצמת קול של מדיה"</string>
@@ -1174,23 +1234,23 @@
     <string name="ringtone_picker_title" msgid="3515143939175119094">"רינגטונים"</string>
     <string name="ringtone_unknown" msgid="5477919988701784788">"רינגטון לא ידוע"</string>
   <plurals name="wifi_available">
-    <item quantity="one" msgid="6654123987418168693">"רשת Wi-Fi זמינה"</item>
-    <item quantity="other" msgid="4192424489168397386">"רשתות Wi-Fi זמינות"</item>
+    <item quantity="one" msgid="6654123987418168693">"‏רשת Wi-Fi זמינה"</item>
+    <item quantity="other" msgid="4192424489168397386">"‏רשתות Wi-Fi זמינות"</item>
   </plurals>
   <plurals name="wifi_available_detailed">
-    <item quantity="one" msgid="1634101450343277345">"רשת Wi-Fi פתוחה זמינה"</item>
-    <item quantity="other" msgid="7915895323644292768">"רשתות Wi-Fi פתוחות זמינות"</item>
+    <item quantity="one" msgid="1634101450343277345">"‏רשת Wi-Fi פתוחה זמינה"</item>
+    <item quantity="other" msgid="7915895323644292768">"‏רשתות Wi-Fi פתוחות זמינות"</item>
   </plurals>
-    <string name="wifi_available_sign_in" msgid="4029489716605255386">"כניסה לרשת Wi-Fi"</string>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"‏כניסה לרשת Wi-Fi"</string>
     <string name="network_available_sign_in" msgid="8495155593358054676">"היכנס לרשת"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
-    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"אין אפשרות להתחבר ל-Wi-Fi"</string>
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"‏אין אפשרות להתחבר ל-Wi-Fi"</string>
     <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" אינו מחובר היטב לאינטרנט."</string>
-    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi ישיר"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"הפעל Wi-Fi ישיר. פעולה זו תכבה את הלקוח/הנקודה החמה של ה-Wi-Fi."</string>
-    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"לא ניתן להפעיל Wi-Fi ישיר"</string>
-    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi ישיר מופעל"</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"‏Wi-Fi ישיר"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"‏הפעל Wi-Fi ישיר. פעולה זו תכבה את הנקודה לשיתוף אינטרנט ב-Wi-Fi."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"‏לא ניתן להפעיל Wi-Fi ישיר"</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"‏Wi-Fi ישיר מופעל"</string>
     <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"גע עבור הגדרות"</string>
     <string name="accept" msgid="1645267259272829559">"קבל"</string>
     <string name="decline" msgid="2112225451706137894">"דחה"</string>
@@ -1198,28 +1258,28 @@
     <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"הזמנה להתחבר"</string>
     <string name="wifi_p2p_from_message" msgid="570389174731951769">"מאת:"</string>
     <string name="wifi_p2p_to_message" msgid="248968974522044099">"אל:"</string>
-    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"הקלד את קוד ה-PIN הנדרש."</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"‏הקלד את קוד ה-PIN הנדרש."</string>
     <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"הטאבלט יתנתק מרשת ה-Wi-Fi באופן זמני בשעה שהוא מחובר אל <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"הטלפון יתנתק מרשת ה-Wi-Fi באופן זמני בשעה שהוא מחובר אל <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"‏הטאבלט יתנתק מרשת ה-Wi-Fi באופן זמני בשעה שהוא מחובר אל <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"‏הטלפון יתנתק מרשת ה-Wi-Fi באופן זמני בשעה שהוא מחובר אל <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
     <string name="select_character" msgid="3365550120617701745">"הוסף תו"</string>
-    <string name="sms_control_title" msgid="7296612781128917719">"שולח הודעות SMS"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt; <xliff:g id="APP_NAME">%1$s</xliff:g> &lt;/ b&gt; שולח מספר רב של הודעות SMS. האם ברצונך לאפשר לאפליקציה זו להמשיך לשלוח הודעות?"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"‏שולח הודעות SMS"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"‏&lt;b&gt; <xliff:g id="APP_NAME">%1$s</xliff:g> &lt;/ b&gt; שולח מספר רב של הודעות SMS. האם ברצונך לאפשר לאפליקציה זו להמשיך לשלוח הודעות?"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"אפשר"</string>
     <string name="sms_control_no" msgid="625438561395534982">"דחה"</string>
-    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; רוצה לשלוח הודעה אל &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"‏&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; רוצה לשלוח הודעה אל &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
     <string name="sms_short_code_details" msgid="3492025719868078457">"הפעולה "<font fgcolor="#ffffb060">"עשויה לגרום לחיובים"</font>" בחשבון המכשיר הנייד שלך."</string>
     <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"הפעולה תגרום לחיובים בחשבון המכשיר הנייד שלך."</font></string>
     <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"שלח"</string>
     <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"בטל"</string>
     <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"זכור את הבחירה שלי"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"ניתן לשנות זאת מאוחר יותר ב\'הגדרות\' &gt; \'אפליקציות\'"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"‏ניתן לשנות זאת מאוחר יותר ב\'הגדרות\' &gt; \'אפליקציות\'"</string>
     <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"אפשר תמיד"</string>
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"לעולם אל תאפשר"</string>
-    <string name="sim_removed_title" msgid="6227712319223226185">"כרטיס ה-SIM הוסר"</string>
-    <string name="sim_removed_message" msgid="2333164559970958645">"הרשת הסלולרית לא תהיה זמינה עד שתפעיל מחדש לאחר הכנסת כרטיס SIM חוקי."</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"‏כרטיס ה-SIM הוסר"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"‏הרשת הסלולרית לא תהיה זמינה עד שתפעיל מחדש לאחר הכנסת כרטיס SIM חוקי."</string>
     <string name="sim_done_button" msgid="827949989369963775">"סיום"</string>
-    <string name="sim_added_title" msgid="3719670512889674693">"כרטיס ה-SIM נוסף"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"‏כרטיס ה-SIM נוסף"</string>
     <string name="sim_added_message" msgid="6599945301141050216">"הפעל מחדש את המכשיר כדי לגשת אל הרשת הסלולרית."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"הפעל מחדש"</string>
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"הגדרת שעה"</string>
@@ -1230,38 +1290,38 @@
     <string name="perms_description_app" msgid="5139836143293299417">"מטעם <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
     <string name="no_permissions" msgid="7283357728219338112">"לא דרושים אישורים"</string>
     <string name="perm_costs_money" msgid="4902470324142151116">"פעולה זו עשויה לחייב אותך בכסף:"</string>
-    <string name="usb_storage_activity_title" msgid="4465055157209648641">"אמצעי מסוג USB לאחסון בנפח גדול"</string>
-    <string name="usb_storage_title" msgid="5901459041398751495">"USB מחובר"</string>
-    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב לאחסון ה-USB של מכשיר ה-Android שלך."</string>
-    <string name="usb_storage_message" product="default" msgid="805351000446037811">"התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב לבין כרטיס ה-SD של מכשיר ה-Android."</string>
-    <string name="usb_storage_button_mount" msgid="1052259930369508235">"הפעל אחסון USB"</string>
-    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"יש בעיה בשימוש באחסון ה-USB שלך לאחסון בנפח גדול ב-USB."</string>
-    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"יש בעיה בשימוש בכרטיס ה-SD שלך לאחסון בנפח גדול ב-USB."</string>
-    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB מחובר"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"‏אמצעי מסוג USB לאחסון בנפח גדול"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"‏USB מחובר"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"‏התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב לאחסון ה-USB של מכשיר ה-Android שלך."</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"‏התחברת למחשב באמצעות USB. גע בלחצן שבהמשך אם ברצונך להעתיק קבצים בין המחשב לבין כרטיס ה-SD של מכשיר ה-Android."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"‏הפעל אחסון USB"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"‏יש בעיה בשימוש באחסון ה-USB שלך לאחסון בנפח גדול ב-USB."</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"‏יש בעיה בשימוש בכרטיס ה-SD שלך לאחסון בנפח גדול ב-USB."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"‏USB מחובר"</string>
     <string name="usb_storage_notification_message" msgid="939822783828183763">"גע כדי להעתיק קבצים למחשב/מהמחשב."</string>
-    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"כבה אחסון USB"</string>
-    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"גע כדי לכבות את אחסון ה-USB."</string>
-    <string name="usb_storage_stop_title" msgid="660129851708775853">"אחסון USB שנמצא בשימוש"</string>
-    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"לפני שתכבה את אחסון ה-USB, בטל את הטעינה (\"הוצא\") של אחסון ה-USB של ה-Android שלך מהמחשב."</string>
-    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"לפני שתכבה את אחסון ה-USB, ודא שביטלת את הטעינה (\"הוצאת\") של כרטיס ה-SD של ה-Android שלך מהמחשב."</string>
-    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"כבה אחסון USB"</string>
-    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"היתה בעיה בכיבוי אחסון ה-USB. ודא שביטלת את טעינת מארח ה-USB, ולאחר מכן נסה שוב."</string>
-    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"הפעל אחסון USB"</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"אם תפעיל אחסון USB, אפליקציות מסוימות שבהן אתה משתמש יפסיקו לפעול, וייתכן שהן לא יהיו זמינות עד שתכבה את אחסון ה-USB."</string>
-    <string name="dlg_error_title" msgid="7323658469626514207">"פעולת USB נכשלה"</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"‏כבה אחסון USB"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"‏גע כדי לכבות את אחסון ה-USB."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"‏אחסון USB שנמצא בשימוש"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"‏לפני שתכבה את אחסון ה-USB, בטל את הטעינה (\"הוצא\") של אחסון ה-USB של ה-Android שלך מהמחשב."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"‏לפני שתכבה את אחסון ה-USB, ודא שביטלת את הטעינה (\"הוצאת\") של כרטיס ה-SD של ה-Android שלך מהמחשב."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"‏כבה אחסון USB"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"‏היתה בעיה בכיבוי אחסון ה-USB. ודא שביטלת את טעינת מארח ה-USB, ולאחר מכן נסה שוב."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"‏הפעל אחסון USB"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"‏אם תפעיל אחסון USB, אפליקציות מסוימות שבהן אתה משתמש יפסיקו לפעול, וייתכן שהן לא יהיו זמינות עד שתכבה את אחסון ה-USB."</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"‏פעולת USB נכשלה"</string>
     <string name="dlg_ok" msgid="7376953167039865701">"אישור"</string>
     <string name="usb_mtp_notification_title" msgid="3699913097391550394">"מחובר כמכשיר מדיה"</string>
     <string name="usb_ptp_notification_title" msgid="1960817192216064833">"מחובר כמצלמה"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"מחובר כמתקין"</string>
-    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"מחובר לאביזר USB"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"גע לקבלת אפשרויות USB נוספות."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"לפרמט את אמצעי האחסון מסוג USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"לפרמט את כרטיס ה-SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"כל הקבצים ששמורים באמצעי האחסון מסוג USB שלך יימחקו. פעולה זו היא בלתי הפיכה!"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"‏מחובר לאביזר USB"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"‏גע לקבלת אפשרויות USB נוספות."</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"‏לפרמט את אמצעי האחסון מסוג USB?"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"‏לפרמט את כרטיס ה-SD?"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"‏כל הקבצים ששמורים באמצעי האחסון מסוג USB שלך יימחקו. פעולה זו היא בלתי הפיכה!"</string>
     <string name="extmedia_format_message" product="default" msgid="14131895027543830">"כל הנתונים שמאוחסנים בכרטיס יאבדו."</string>
     <string name="extmedia_format_button_format" msgid="4131064560127478695">"פרמוט"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"ניקוי באגים של USB מחובר"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"גע כדי להשבית את ניקוי הבאגים בהתקן ה-USB."</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"‏ניקוי באגים של USB מחובר"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"‏גע כדי להשבית את ניקוי הבאגים בהתקן ה-USB."</string>
     <string name="select_input_method" msgid="4653387336791222978">"בחר שיטת הזנה"</string>
     <string name="configure_input_methods" msgid="9091652157722495116">"הגדר שיטות קלט"</string>
     <string name="use_physical_keyboard" msgid="6203112478095117625">"מקלדת פיזית"</string>
@@ -1271,29 +1331,29 @@
     <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
     <string name="candidates_style" msgid="4333913089637062257"><u>"מועמדים"</u></string>
-    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"מכין אחסון USB"</string>
-    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"מכין את כרטיס SD"</string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"‏מכין אחסון USB"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"‏מכין את כרטיס SD"</string>
     <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"בודק אם יש שגיאות."</string>
-    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"אמצעי אחסון ריק מסוג USB"</string>
-    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"כרטיס SD ריק"</string>
-    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"אחסון ה-USB ריק או שמערכת הקבצים שלו אינה נתמכת."</string>
-    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"כרטיס ה-SD ריק או שמערכת הקבצים שלו אינה נתמכת."</string>
-    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"אמצעי אחסון פגום מסוג USB"</string>
-    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"כרטיס SD פגום"</string>
-    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"אחסון ה-USB פגום. נסה לפרמט אותו מחדש."</string>
-    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"כרטיס ה-SD פגום. נסה לפרמט אותו מחדש."</string>
-    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"אחסון USB הוסר באופן בלתי צפוי"</string>
-    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"כרטיס SD הוסר באופן לא צפוי"</string>
-    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"בטל טעינה של אחסון USB לפני הסרתו כדי למנוע אובדן נתונים."</string>
-    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"בטל את טעינת כרטיס SD לפני הסרתו כדי למנוע אובדן נתונים."</string>
-    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"ניתן להסיר את אמצעי האחסון מסוג USB בבטחה"</string>
-    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"אפשר להסיר את כרטיס SD"</string>
-    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"אתה יכול להסיר בבטחה את אחסון ה-USB."</string>
-    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"ניתן להסיר בבטחה כרטיס SD."</string>
-    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"אחסון USB הוסר"</string>
-    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"כרטיס SD הוסר"</string>
-    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"אחסון USB הוסר. הכנס מדיה חדשה."</string>
-    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"כרטיס SD הוסר. הכנס כרטיס חדש."</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"‏אמצעי אחסון ריק מסוג USB"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"‏כרטיס SD ריק"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"‏אחסון ה-USB ריק או שמערכת הקבצים שלו אינה נתמכת."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"‏כרטיס ה-SD ריק או שמערכת הקבצים שלו אינה נתמכת."</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"‏אמצעי אחסון פגום מסוג USB"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"‏כרטיס SD פגום"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"‏אחסון ה-USB פגום. נסה לפרמט אותו מחדש."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"‏כרטיס ה-SD פגום. נסה לפרמט אותו מחדש."</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"‏אחסון USB הוסר באופן בלתי צפוי"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"‏כרטיס SD הוסר באופן לא צפוי"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"‏בטל טעינה של אחסון USB לפני הסרתו כדי למנוע אובדן נתונים."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"‏בטל את טעינת כרטיס SD לפני הסרתו כדי למנוע אובדן נתונים."</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"‏ניתן להסיר את אמצעי האחסון מסוג USB בבטחה"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"‏אפשר להסיר את כרטיס SD"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"‏אתה יכול להסיר בבטחה את אחסון ה-USB."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"‏ניתן להסיר בבטחה כרטיס SD."</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"‏אחסון USB הוסר"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"‏כרטיס SD הוסר"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"‏אחסון USB הוסר. הכנס מדיה חדשה."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"‏כרטיס SD הוסר. הכנס כרטיס חדש."</string>
     <string name="activity_list_empty" msgid="1675388330786841066">"לא נמצאו פעילויות תואמות."</string>
     <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"עדכן נתונים סטטיסטיים על שימוש ברכיב"</string>
     <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"מאפשר לאפליקציה לשנות סטטיסטיקות שימוש שנאספו לגבי רכיבים שונים. לא מיועד לשימוש על ידי אפליקציות רגילות."</string>
@@ -1305,8 +1365,14 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"מאפשר לאפליקציה לגשת לאחסון המוגן באמצעות מפתח."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"שלוט בהצגה והסתרה של מגן המקלדת"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"מאפשר לאפליקציה לשלוט במגן המקלדת."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"חיפוש שינויים במצב אמון."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"מאפשר לאפליקציה לחפש שינויים במצב אמון."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"איגוד אל שירות סוכן אמון"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"מאפשר לאפליקציה לאגוד אל שירות סוכן אמון."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"אינטראקציה עם מערכת שחזור ועדכונים"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"מאפשרת לאפליקציה ליצור אינטראקציה עם מערכת השחזור ועדכוני מערכת."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"גע פעמיים לבקרת מרחק מתצוגה"</string>
-    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"לא ניתן להוסיף widget."</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"‏לא ניתן להוסיף widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"התחל"</string>
     <string name="ime_action_search" msgid="658110271822807811">"חפש"</string>
     <string name="ime_action_send" msgid="2316166556349314424">"שלח"</string>
@@ -1329,13 +1395,14 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"טפט"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"שנה טפט"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"מאזין להתראות"</string>
-    <string name="vpn_title" msgid="19615213552042827">"VPN מופעל"</string>
-    <string name="vpn_title_long" msgid="6400714798049252294">"VPN מופעל על ידי <xliff:g id="APP">%s</xliff:g>"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ספק תנאי"</string>
+    <string name="vpn_title" msgid="19615213552042827">"‏VPN מופעל"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"‏VPN מופעל על ידי <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"גע כדי לנהל את הרשת."</string>
     <string name="vpn_text_long" msgid="6407351006249174473">"מחובר אל <xliff:g id="SESSION">%s</xliff:g>. גע כדי לנהל את הרשת."</string>
-    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"ה-VPN שמופעל תמיד, מתחבר..."</string>
-    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"ה-VPN שפועל תמיד, מחובר"</string>
-    <string name="vpn_lockdown_error" msgid="6009249814034708175">"שגיאת VPN שמופעל תמיד"</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"‏ה-VPN שמופעל תמיד, מתחבר..."</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"‏ה-VPN שפועל תמיד, מחובר"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"‏שגיאת VPN שמופעל תמיד"</string>
     <string name="vpn_lockdown_config" msgid="6415899150671537970">"גע כדי להגדיר"</string>
     <string name="upload_file" msgid="2897957172366730416">"בחר קובץ"</string>
     <string name="no_file_chosen" msgid="6363648562170759465">"לא נבחר קובץ"</string>
@@ -1343,7 +1410,7 @@
     <string name="submit" msgid="1602335572089911941">"שלח"</string>
     <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"מצב מכונית מופעל"</string>
     <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"גע כדי לצאת ממצב מכונית."</string>
-    <string name="tethered_notification_title" msgid="3146694234398202601">"קשור או פעיל כנקודה חמה"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"שיתוף אינטרנט פעיל"</string>
     <string name="tethered_notification_message" msgid="6857031760103062982">"גע כדי להגדיר."</string>
     <string name="back_button_label" msgid="2300470004503343439">"הקודם"</string>
     <string name="next_button_label" msgid="1080555104677992408">"הבא"</string>
@@ -1359,18 +1426,18 @@
     <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> מתוך <xliff:g id="TOTAL">%d</xliff:g>"</item>
   </plurals>
     <string name="action_mode_done" msgid="7217581640461922289">"סיום"</string>
-    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"מבטל טעינה של אחסון USB..."</string>
-    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"מבטל טעינה של כרטיס SD..."</string>
-    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"מוחק אחסון USB..."</string>
-    <string name="progress_erasing" product="default" msgid="6596988875507043042">"מוחק כרטיס SD..."</string>
-    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"לא ניתן למחוק את אחסון ה- USB."</string>
-    <string name="format_error" product="default" msgid="7315248696644510935">"לא ניתן למחוק את כרטיס ה-SD."</string>
-    <string name="media_bad_removal" msgid="7960864061016603281">"כרטיס SD הוסר לפני שטעינתו בוטלה."</string>
-    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"אחסון USB נבדק כעת."</string>
-    <string name="media_checking" product="default" msgid="7334762503904827481">"כרטיס SD נבדק כעת."</string>
-    <string name="media_removed" msgid="7001526905057952097">"כרטיס SD הוסר."</string>
-    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"אחסון USB נמצא כעת בשימוש של מחשב."</string>
-    <string name="media_shared" product="default" msgid="5706130568133540435">"כרטיס SD נמצא כעת בשימוש של מחשב."</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"‏מבטל טעינה של אחסון USB..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"‏מבטל טעינה של כרטיס SD..."</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"‏מוחק אחסון USB..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"‏מוחק כרטיס SD..."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"‏לא ניתן למחוק את אחסון ה- USB."</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"‏לא ניתן למחוק את כרטיס ה-SD."</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"‏כרטיס SD הוסר לפני שטעינתו בוטלה."</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"‏אחסון USB נבדק כעת."</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"‏כרטיס SD נבדק כעת."</string>
+    <string name="media_removed" msgid="7001526905057952097">"‏כרטיס SD הוסר."</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"‏אחסון USB נמצא כעת בשימוש של מחשב."</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"‏כרטיס SD נמצא כעת בשימוש של מחשב."</string>
     <string name="media_unknown_state" msgid="729192782197290385">"מדיה חיצונית במצב לא ידוע."</string>
     <string name="share" msgid="1778686618230011964">"שתף"</string>
     <string name="find" msgid="4808270900322985960">"מצא"</string>
@@ -1398,8 +1465,8 @@
     <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"הפחת דקה"</string>
     <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"הוסף שעה"</string>
     <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"הפחת שעה"</string>
-    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"הגדר PM"</string>
-    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"הגדר AM"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"‏הגדר PM"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"‏הגדר AM"</string>
     <string name="date_picker_increment_month_button" msgid="5369998479067934110">"הוסף חודש"</string>
     <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"הפחת חודש"</string>
     <string name="date_picker_increment_day_button" msgid="7130465412308173903">"הוסף יום"</string>
@@ -1414,41 +1481,33 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"בחר אפליקציה"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"לא ניתן היה להפעיל את <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"שתף עם"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"שתף עם <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"ידית להחלקה. גע והחזק."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"הסט למעלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"הסט למטה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"הסט שמאלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"הסט ימינה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"בטל נעילה"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"מצלמה"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"שקט"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"הקול פועל"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"חיפוש"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"החלק לביטול נעילה."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"חבר אוזניות כדי לשמוע הקראה של מפתחות סיסמה."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"נקודה."</string>
     <string name="action_bar_home_description" msgid="5293600496601490216">"נווט לדף הבית"</string>
     <string name="action_bar_up_description" msgid="2237496562952152589">"נווט למעלה"</string>
     <string name="action_menu_overflow_description" msgid="2295659037509008453">"אפשרויות נוספות"</string>
-    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s‏, %2$s"</string>
-    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s‏, %2$s‏, %3$s"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"‏%1$s‏, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"‏%1$s‏, %2$s‏, %3$s"</string>
     <string name="storage_internal" msgid="4891916833657929263">"אחסון פנימי"</string>
-    <string name="storage_sd_card" msgid="3282948861378286745">"כרטיס SD"</string>
-    <string name="storage_usb" msgid="3017954059538517278">"אחסון USB"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"‏כרטיס SD"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"‏אחסון USB"</string>
     <string name="extract_edit_menu_button" msgid="8940478730496610137">"ערוך"</string>
     <string name="data_usage_warning_title" msgid="1955638862122232342">"אזהרת שימוש בנתונים"</string>
     <string name="data_usage_warning_body" msgid="2814673551471969954">"גע כדי להציג נתוני שימוש והגדרות."</string>
-    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"נתוני 2G-3G מושבתים"</string>
-    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"נתוני 4G מושבתים"</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"‏נתוני 2G-3G מושבתים"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"‏נתוני 4G מושבתים"</string>
     <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"נתונים לנייד מושבתים"</string>
-    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"נתוני Wi-Fi הושבתו"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"‏נתוני Wi-Fi הושבתו"</string>
     <string name="data_usage_limit_body" msgid="3317964706973601386">"גע כדי להפעיל"</string>
-    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"אירעה חריגה ממגבלת הנתונים של 2G-3G"</string>
-    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"אירעה חריגה ממגבלת הנתונים של 4G"</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"‏אירעה חריגה ממגבלת הנתונים של 2G-3G"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"‏אירעה חריגה ממגבלת הנתונים של 4G"</string>
     <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"אירעה חריגה ממגבלת הנתונים לנייד"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"אירעה חריגה ממגבלת הנתונים של Wi-Fi"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"‏אירעה חריגה ממגבלת הנתונים של Wi-Fi"</string>
     <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> מעל למגבלה שצוינה."</string>
     <string name="data_usage_restricted_title" msgid="5965157361036321914">"נתוני הרקע מוגבלים"</string>
     <string name="data_usage_restricted_body" msgid="6741521330997452990">"גע כדי להסיר את ההגבלה."</string>
@@ -1464,8 +1523,8 @@
     <string name="expires_on" msgid="3676242949915959821">"תאריך תפוגה:"</string>
     <string name="serial_number" msgid="758814067660862493">"מספר סידורי:"</string>
     <string name="fingerprints" msgid="4516019619850763049">"טביעות אצבע:"</string>
-    <string name="sha256_fingerprint" msgid="4391271286477279263">"טביעת אצבע SHA-256:"</string>
-    <string name="sha1_fingerprint" msgid="7930330235269404581">"טביעת אצבע SHA-1:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"‏טביעת אצבע SHA-256:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"‏טביעת אצבע SHA-1:"</string>
     <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"הצג הכל"</string>
     <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"בחר פעילות"</string>
     <string name="share_action_provider_share_with" msgid="5247684435979149216">"שתף עם"</string>
@@ -1481,51 +1540,57 @@
     <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"רמקולים של מעגן"</string>
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"מערכת"</string>
-    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"אודיו Bluetooth"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"‏אודיו Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"צג אלחוטי"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"סיום"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"פלט מדיה"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"התחברות למכשיר"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"העברת מסך אל מכשיר"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"מחפש מכשירים…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"הגדרות"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"התנתק"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"סורק..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"מתחבר..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"זמין"</string>
     <string name="media_route_status_not_available" msgid="6739899962681886401">"לא זמין"</string>
     <string name="media_route_status_in_use" msgid="4533786031090198063">"בשימוש"</string>
     <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"מסך מובנה"</string>
-    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"מסך HDMI"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"‏מסך HDMI"</string>
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"שכבת על #<xliff:g id="ID">%1$d</xliff:g>"</string>
-    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: ‎<xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>‎, ‏<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"‏<xliff:g id="NAME">%1$s</xliff:g>: ‎<xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>‎, ‏<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", מאובטח"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"מסך אלחוטי מחובר"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"מסך זה מוצג במכשיר אחר"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"העברת מסך מתבצעת"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"מתחבר אל <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"העברת מסך מתבצעת"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"מחובר אל <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"נתק"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"שיחת חירום"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"שכחת את הקו"</string>
     <string name="kg_wrong_pattern" msgid="1850806070801358830">"קו ביטול נעילה שגוי"</string>
     <string name="kg_wrong_password" msgid="2333281762128113157">"סיסמה שגויה"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"מספר PIN שגוי"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"‏מספר PIN שגוי"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"נסה שוב בעוד <xliff:g id="NUMBER">%1$d</xliff:g> שניות."</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"שרטט את קו ביטול הנעילה"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"הזן מספר PIN ל-SIM"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"הזן מספר PIN"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"‏הזן מספר PIN ל-SIM"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"‏הזן מספר PIN"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"הזן את הסיסמה"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"הזן את קוד ה-PIN הרצוי"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"אשר את קוד ה-PIN הרצוי"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"מבטל נעילה של כרטיס SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"קוד PIN שגוי."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"הקלד מספר PIN שאורכו 4 עד 8 ספרות."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"קוד PUK צריך להיות בן 8 ספרות או יותר."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"הזן מחדש את קוד PUK הנכון. ניסיונות חוזרים ישביתו לצמיתות את כרטיס ה-SIM."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"קודי ה-PIN אינם תואמים"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"‏כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"‏הזן את קוד ה-PIN הרצוי"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"‏אשר את קוד ה-PIN הרצוי"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"‏מבטל נעילה של כרטיס SIM…"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"‏קוד PIN שגוי."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"‏הקלד מספר PIN שאורכו 4 עד 8 ספרות."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"‏קוד PUK צריך להיות בן 8 ספרות."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"‏הזן מחדש את קוד PUK הנכון. ניסיונות חוזרים ישביתו לצמיתות את כרטיס ה-SIM."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"‏קודי ה-PIN אינם תואמים"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ניסיונות רבים מדי לשרטוט קו ביטול נעילה."</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"‏כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"שם משתמש (דוא\"ל)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"סיסמה"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"היכנס"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"שם משתמש או סיסמה לא חוקיים."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"שכחת את שם המשתמש או הסיסמה?\nבקר בכתובת "<b>"google.com/accounts/recovery"</b></string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‏שכחת את שם המשתמש או הסיסמה?\nבקר בכתובת "<b>"google.com/accounts/recovery"</b></string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"בודק חשבון…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"הקלדת מספר PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"‏הקלדת מספר PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטאבלט יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
@@ -1585,9 +1650,9 @@
     <string name="mediasize_na_junior_legal" msgid="3309324162155085904">"Junior Legal"</string>
     <string name="mediasize_na_ledger" msgid="5567030340509075333">"Ledger"</string>
     <string name="mediasize_na_tabloid" msgid="4571735038501661757">"Tabloid"</string>
-    <string name="mediasize_na_index_3x5" msgid="5182901917818625126">"כרטיס אינדקס 3x5"</string>
-    <string name="mediasize_na_index_4x6" msgid="7687620625422312396">"כרטיס אינדקס 4x6"</string>
-    <string name="mediasize_na_index_5x8" msgid="8834215284646872800">"כרטיס אינדקס 5x8"</string>
+    <string name="mediasize_na_index_3x5" msgid="5182901917818625126">"‏כרטיס אינדקס 3x5"</string>
+    <string name="mediasize_na_index_4x6" msgid="7687620625422312396">"‏כרטיס אינדקס 4x6"</string>
+    <string name="mediasize_na_index_5x8" msgid="8834215284646872800">"‏כרטיס אינדקס 5x8"</string>
     <string name="mediasize_na_monarch" msgid="213639906956550754">"Monarch"</string>
     <string name="mediasize_na_quarto" msgid="835778493593023223">"Quarto"</string>
     <string name="mediasize_na_foolscap" msgid="1573911237983677138">"Foolscap"</string>
@@ -1635,19 +1700,30 @@
     <string name="reason_service_unavailable" msgid="7824008732243903268">"שירות ההדפסה לא הופעל"</string>
     <string name="print_service_installed_title" msgid="2246317169444081628">"שירות <xliff:g id="NAME">%s</xliff:g> מותקן"</string>
     <string name="print_service_installed_message" msgid="5897362931070459152">"הקש כדי להפעיל"</string>
-    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"הזן את מספר ה-PIN של מנהל המערכת"</string>
-    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"הזן מספר PIN"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"‏הזן את מספר ה-PIN של מנהל המערכת"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"‏הזן מספר PIN"</string>
     <string name="restr_pin_incorrect" msgid="8571512003955077924">"שגוי"</string>
-    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"מספר PIN נוכחי"</string>
-    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"מספר PIN חדש"</string>
-    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"אשר את מספר ה-PIN החדש"</string>
-    <string name="restr_pin_create_pin" msgid="8017600000263450337">"צור מספר PIN לשינוי הגבלות"</string>
-    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"מספרי ה-PIN לא תואמים. נסה שוב."</string>
-    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"מספר ה-PIN קצר מדי. חייב להיות באורך 4 ספרות לפחות."</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"‏מספר PIN נוכחי"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"‏מספר PIN חדש"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"‏אשר את מספר ה-PIN החדש"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"‏צור מספר PIN לשינוי הגבלות"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"‏מספרי ה-PIN לא תואמים. נסה שוב."</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"‏מספר ה-PIN קצר מדי. חייב להיות באורך 4 ספרות לפחות."</string>
   <plurals name="restr_pin_countdown">
     <item quantity="one" msgid="311050995198548675">"נסה שוב בעוד שנייה"</item>
     <item quantity="other" msgid="4730868920742952817">"נסה שוב בעוד <xliff:g id="COUNT">%d</xliff:g> שניות"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"נסה שוב מאוחר יותר"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"החלק מטה מהחלק העליון כדי לצאת ממסך מלא."</string>
+    <string name="done_label" msgid="2093726099505892398">"בוצע"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"מחוון שעות מעגלי"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"מחוון דקות מעגלי"</string>
+    <string name="select_hours" msgid="6043079511766008245">"בחר שעות"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"בחר דקות"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"בחירת ימים בחודש בתצוגת רשת"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"רשימת שנים"</string>
+    <string name="select_day" msgid="7774759604701773332">"בחר חודש ויום"</string>
+    <string name="select_year" msgid="7952052866994196170">"בחר שנה"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> נבחר"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> נמחק"</string>
 </resources>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index 246a82e..a9c5cfb 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;新規&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"..."</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"PUKは8桁以上で入力してください。"</string>
     <string name="needPuk" msgid="919668385956251611">"SIMカードはPUKでロックされています。ロックを解除するにはPUKコードを入力してください。"</string>
     <string name="needPuk2" msgid="4526033371987193070">"SIMカードのロック解除のためPUK2を入力します。"</string>
+    <string name="enablePin" msgid="209412020907207950">"SIM/RUIMロックを有効にしてください。"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えるとSIMがロックされます。"</item>
+    <item quantity="other" msgid="7530597808358774740">"入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えるとSIMがロックされます。"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"着信時の発信者番号"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"同期"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"<xliff:g id="CONTENT_TYPE">%s</xliff:g>での削除が多すぎます。"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"タブレットのストレージに空き領域がありません。ファイルを削除して空き領域を確保してください。"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"ウォッチのストレージに空き領域がありません。ファイルを削除して空き領域を確保してください。"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"端末のストレージに空き領域がありません。ファイルを削除して空き領域を確保してください。"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"ネットワークが監視される場合があります"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"不明な第三者"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"着信音オン"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"シャットダウン中..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"タブレットの電源をOFFにします。"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"ウォッチの電源をOFFにします。"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"携帯電話の電源を切ります。"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"シャットダウンしますか？"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"再起動してセーフモードに変更"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"機内モード"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"機内モードON"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"機内モードOFF"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"設定"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"セーフモード"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Androidシステム"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"ショートカットのアンインストール"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"ユーザー操作なしでホーム画面のショートカットを削除することをアプリに許可します。"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"発信先の変更"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"通話の発信とダイヤルする番号の変更をアプリに許可します。これにより、アプリが発信を監視、転送、阻止できるようになります。"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"発信を別の番号に転送するか完全に中止するオプションで、発信中にダイヤルされた番号にアクセスすることをアプリに許可します。"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"テキストメッセージ（SMS）の受信"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"SMSメッセージの受信と処理をアプリに許可します。これにより、アプリが端末に届いたメッセージを表示することなく監視または削除できるようになります。"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"テキストメッセージ（MMS）の受信"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"作業中のウィンドウの内容を取得することをアプリに許可します。この許可を悪意のあるアプリに利用されると、ウィンドウの内容全体が取得されてパスワード以外のテキストがすべてチェックされる恐れがあります。"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ユーザー補助を一時的に有効にする"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"この端末のユーザー補助を一時的に有効にすることをアプリに許可します。悪意のあるアプリはユーザーの同意を得ずにユーザー補助を有効にする場合があります。"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ウィンドウ情報の取得"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"ウィンドウマネージャからウィンドウに関する情報を取得することをアプリに許可します。悪意のあるアプリが内部システムの利用を目的に情報を取得する恐れがあります。"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"ウィンドウトークンの取得"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"ウィンドウトークンの取得をアプリに許可します。この許可を悪意のあるアプリに利用されると、システムを装ったアプリケーションウィンドウで不正な操作が実行される恐れがあります。"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"フレーム統計情報の取得"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"フレーム統計情報の収集をアプリに許可します。この許可を悪意のあるアプリに利用されると、他のアプリからウィンドウのフレーム統計情報を監視される恐れがあります。"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"イベントのフィルタリング"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"すべてのユーザーイベントが送られる前にストリームをフィルタリングする入力フィルタを登録することをアプリに許可します。悪意のあるアプリがユーザーの操作なしでシステムUIを制御する恐れがあります。"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"表示の拡大"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"表示内容を拡大することをアプリに許可します。悪意のあるアプリが、端末を使用できなくなるように表示内容を変換する恐れがあります。"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"部分的にシャットダウンする"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"アクティビティマネージャをシャットダウン状態にします。完全なシャットダウンは実行しません。"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"アプリケーションの切り替えを禁止する"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"SMSメッセージの受信通知の配信をアプリに許可します。この許可を悪意のあるアプリケーションに利用されると、受信SMSメッセージが偽造される恐れがあります。"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH受信ブロードキャストの送信"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"WAP PUSHメッセージの受信通知を配信することをアプリに許可します。この許可を悪意のあるアプリに利用されると、MMSメッセージの受信確認が偽造されたりウェブページのコンテンツが悪意のあるコンテンツに密かに置き換えられたりする恐れがあります。"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ネットワークスコアのブロードキャスト送信"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"ネットワークのスコアリングが必要であるという通知をブロードキャスト送信することをアプリに許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"実行中のプロセスの数を制限"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"実行するプロセスの上限数を制御することをアプリに許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"バックグラウンドのアプリの強制終了"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"VPNサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"壁紙にバインド"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"壁紙のトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"音声対話サービスへのバインド"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"音声対話サービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"リモートディスプレイへのバインド"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"リモートディスプレイのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ウィジェットサービスにバインド"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"ウィジェットサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"ルートプロバイダサービスへのバインド"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"登録済みのルートプロバイダにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"デバイス管理者との通信"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"デバイス管理者へのintentの送信を所有者に許可します。通常のアプリでは不要です。"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"テレビの入力へのバインド"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"テレビの入力のトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"端末の管理者の追加または削除"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"有効な端末の管理者を追加または削除することを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"画面の向きの変更"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"インストール済みのメディアデコーダーを使用して再生用にデコードすることをアプリに許可します。"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"信頼できる認証情報の管理"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"CA証明書を信頼できる認証情報としてインストールしたりアンインストールしたりすることをアプリに許可します。"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"アイドル状態でのアプリの実行"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"この権限により、端末が使用中でない場合でもAndroidシステムがバックグラウンドでアプリを実行できるようになります。"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"diagが所有するリソースの読み書き"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"diagグループが所有するリソース（/dev内のファイルなど）の読み書きをアプリに許可します。許可すると、システムの安定性とセキュリティに影響が生じる可能性があります。メーカー/通信事業者によるハードウェア固有の診断以外には使用しないでください。"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"アプリのコンポーネントの有効/無効化"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"端末に保存されている個人のプロフィール情報（名前、連絡先情報など）の読み取りをアプリに許可します。これにより、アプリがユーザーの身元を特定できるようになり、プロフィール情報を第三者に転送する可能性があります。"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"自分の連絡先カードの変更"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"端末に保存されている個人のプロフィール情報（名前、連絡先情報など）の変更と追加をアプリに許可します。これにより、アプリがユーザーの身元を特定できるようになり、プロフィール情報を第三者に転送する可能性があります。"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"ボディーセンサー（心拍数モニターなど）"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"心拍数など、体内の変化の測定に使用するセンサーからのデータにアクセスすることをアプリに許可します。"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ソーシャルストリームを読む"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"あなたや友だちのソーシャル更新情報へのアクセスと同期をアプリに許可します。情報の共有は慎重に行ってください。これを許可すると、あなたと友だちがソーシャルネットワークで行ったやり取りを、機密性に関係なくアプリから読み取ることができるようになります。注: この許可は、一部のソーシャルネットワークでは適用されない場合があります。"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ソーシャルストリームに書く"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"SurfaceFlingerの低レベルの機能の使用をアプリに許可します。"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"フレームバッファの読み取り"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"フレームバッファの内容の読み取りをアプリに許可します。"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlingerへのアクセス"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"InputFlingerの低レベルの機能を使用することをアプリに許可します。"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wi-Fiディスプレイの設定"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Wi-Fiディスプレイを設定して接続することをアプリに許可します。"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wi-Fiディスプレイの制御"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"音声全般の設定（音量、出力に使用するスピーカーなど）の変更をアプリに許可します。"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"録音"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"マイクを使った録音をアプリに許可します。これにより、アプリがいつでも確認なしで録音できるようになります。"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM通信"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"SIMにコマンドを送信することをアプリに許可します｡この許可は非常に危険です。"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"写真と動画の撮影"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"カメラでの写真と動画の撮影をアプリに許可します。これにより、アプリが確認なしでいつでもカメラを使用できるようになります。"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"カメラの使用中に通信インジケータLEDを無効にする"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"端末の電話機能の制御をアプリに許可します。許可すると、アプリではユーザーに通知なくネットワークの切り替え、無線通信のON/OFFなどを行えるようになります。"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"端末のステータスとIDの読み取り"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"端末の電話機能へのアクセスをアプリに許可します。これにより、電話番号、端末ID、通話中かどうか、通話相手の電話番号をアプリから特定できるようになります。"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"正確な電話ステータスの読み取り"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"正確な電話ステータスにアクセスすることをアプリに許可します。これにより、実際の発信ステータス（発信がアクティブか、バックグラウンドか）、発信エラー、正確なデータ接続ステータス、データ接続エラーをアプリから特定できるようになります。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"タブレットのスリープを無効化"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"端末のスリープを無効にする"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"タブレットのスリープを無効にすることをアプリに許可します。"</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX状態の変更"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"タブレットのWiMAXネットワークへの接続と切断をアプリに許可します。"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"携帯端末のWiMAXネットワークへの接続と切断をアプリに許可します。"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ネットワークスコア"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"ネットワークを順位付けし、タブレットでのネットワークの優先順位に反映することをアプリに許可します。"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"ネットワークを順位付けし、携帯電話でのネットワークの優先順位に反映することをアプリに許可します。"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Bluetoothデバイスのペアの設定"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"タブレットのBluetooth設定を表示すること、ペアの端末に接続すること/ペアの端末からの接続を受け入れることをアプリに許可します。"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"携帯端末のBluetooth設定を表示すること、ペアの端末に接続すること/ペアの端末からの接続を受け入れることをアプリに許可します。"</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"通知（他のアプリから投稿されたものも含む）を取得、調査、クリアすることをアプリに許可します。"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"通知リスナーサービスにバインド"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"通知リスナーサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"コンディションプロバイダサービスへのバインド"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"コンディションプロバイダサービスのトップレベルインターフェースにバインドすることを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"携帯通信会社が提供する設定アプリの呼び出し"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"携帯通信会社が提供する設定アプリを呼び出すことを所有者に許可します。通常のアプリでは不要です。"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ネットワーク状況監視のためのリッスン"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"ネットワーク状況を監視するためリッスンすることをアプリに許可します。通常のアプリで必要になることはありません。"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"入力デバイスの調整を変更"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"タッチスクリーンの調整パラメータの変更をアプリに許可します。通常のアプリでは必要ありません。"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM証明書へのアクセス権"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"DRM証明書のプロビジョニングと使用をアプリに許可します。通常のアプリでは不要です。"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"パスワードルールの設定"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"画面ロック解除パスワードの長さと使用できる文字を制御します。"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"画面ロック解除試行の監視"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"自宅"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"勤務先"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"その他"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"この連絡先を表示するアプリが見つかりません。"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PINコードを入力"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUKと新しいPINコードを入力"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUKコード"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"キーガードセキュアストレージへのアクセスをアプリに許可する"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"キーガードの表示/非表示の制御"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"キーガードの制御をアプリに許可します。"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"信頼状態の変更をリッスン"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"信頼状態の変更をリッスンすることをアプリに許可します。"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"信頼できるエージェントサービスへのバインド"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"信頼できるエージェントサービスにバインドすることをアプリに許可します。"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"アップデートと回復システムへのアクセス"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"回復システムとシステムアップデートへのアクセスをアプリに許可します。"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ダブルタップでズームコントロール"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ウィジェットを追加できませんでした。"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"移動"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"壁紙"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"壁紙を変更"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知リスナー"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"コンディションプロバイダ"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPNが有効になりました"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPNが<xliff:g id="APP">%s</xliff:g>により有効化されました"</string>
     <string name="vpn_text" msgid="3011306607126450322">"タップしてネットワークを管理します。"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"アプリの選択"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>を起動できませんでした"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"共有"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>と共有"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"スライダーハンドルです。押し続けます。"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"上にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"下にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"左にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"右にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"ロックを解除"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"カメラ"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"マナーモード"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"サウンドON"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"検索します"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"ロック解除するにはスワイプします。"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"パスワードのキーが音声出力されるのでヘッドセットを接続してください。"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"ドット。"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"システム"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth音声"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"ワイヤレスディスプレイ"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完了"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"メディア出力"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"端末に接続"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"端末への画面のキャスト"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"端末を検索しています…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"設定"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"接続を解除"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"スキャン中..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"接続中..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"利用できます"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"オーバーレイ第<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>、<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"、セキュア"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"ワイヤレスディスプレイが接続されています"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"この画面は別の端末で表示されています"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"画面のキャスト中"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"<xliff:g id="NAME">%1$s</xliff:g>に接続しています"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"画面のキャスト中"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"<xliff:g id="NAME">%1$s</xliff:g>に接続しました"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"切断"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"緊急通報"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"パターンを忘れた場合"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIMカードのロック解除中…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PINコードが正しくありません。"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"PINは4～8桁の数字で入力してください。"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUKコードは8桁以上の番号です。"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUKコードは8桁の番号です。"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"正しいPUKコードを再入力してください。誤入力を繰り返すと、SIMが永久に無効になるおそれがあります。"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PINコードが一致しません"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"パターンの入力を所定の回数以上間違えました。"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"しばらくしてから再試行"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"全画面表示を終了するには、上から下にスワイプ"</string>
+    <string name="done_label" msgid="2093726099505892398">"完了"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"円形スライダー（時）"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"円形スライダー（分）"</string>
+    <string name="select_hours" msgid="6043079511766008245">"時間を選択"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"分を選択"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"日グリッド（月別）"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"年リスト"</string>
+    <string name="select_day" msgid="7774759604701773332">"月と日を選択"</string>
+    <string name="select_year" msgid="7952052866994196170">"年を選択"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g>を選択しました"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g>を削除しました"</string>
 </resources>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index a8025d8..e5ec81b 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"ტბაიტი"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"უსათაურო"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"აკრიფეთ PUK, რომელიც რვა ან მეტი ციფრისგან შედგება."</string>
     <string name="needPuk" msgid="919668385956251611">"თქვენი SIM ბარათი დაბლოკილია PUK კოდით. განბლოკვისთვის შეიყვანეთ PUK კოდი."</string>
     <string name="needPuk2" msgid="4526033371987193070">"SIM ბარათის განსაბლოკად აკრიფეთ PUK2."</string>
+    <string name="enablePin" msgid="209412020907207950">"წარუმატებელი მცდელობა. ჩართეთ SIM/RUIM ჩაკეტვა."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ SIM დაიბლოკებოდეს."</item>
+    <item quantity="other" msgid="7530597808358774740">"თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ SIM დაიბლოკებოდეს."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"შემომავალი ზარის აბონენტის ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"სინქრონიზაცია"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"<xliff:g id="CONTENT_TYPE">%s</xliff:g>-ის ძალიან ბევრი წაშლილები."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"ტაბლეტის მეხსიერება გავსებულია. ადგილის გასათავისუფლებლად წაშალეთ ფაილების ნაწილი."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"საათის მეხსიერება გავსებულია. ადგილის გასათავისუფლებლად წაშალეთ ფაილების ნაწილი."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"ტელეფონის მეხსიერება გავსებულია. ადგილის გასათავისუფლებლად წაშალეთ ფაილების ნაწილი."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"შესაძლოა ქსელი მონიტორინგის ქვეშ იმყოფება"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"უცნობი მესამე მხარის მიერ"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"ზარი ჩართულია"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"გამორთვა…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"თქვენი ტაბლეტი გაითიშება."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"თქვენი საათი გაითიშება."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"თქვენი ტელეფონი გაითიშება."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"გსურთ გამორთვა?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"უსაფრთხო რეჟიმის ჩატვირთვა"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"თვითმფრინავის რეჟიმი"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"თვითმფრინავის რეჟიმი ჩართულია."</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"თვითმფრინავის რეჟიმი გამორთულია."</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"პარამეტრები"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"უსაფრთხო რეჟიმი"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-ის სისტემა"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"მალსახმობების წაშლა"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"მთავარ ეკრანზე აპლიკაციისთვის მალსახმობების დამოუკიდებლად წაშლის უფლების მიცემა."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"გამავალი ზარების გადამისამართება"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"აპს შეეძლება გამავალი ზარების დამუშავება და ასაკრეფი ნომრის შეცვლა. ეს უფლება აპს აძლევს შესაძლებლობას აკონტროლოს, გადაამისამართოს ან აღკვეთოს გამავალი ზარები."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"საშუალებას აძლევს აპს გამავალი ზარის დროს დაინახონ ზარის მიმღების ნომერი, ზარის სხვა მისამართზე გადამისამართებით ან ზარის საერთოდ შეწყვეტის საშუალებით."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"ტექსტური შეტყობინებების (SMS) მიღება"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"აპს შეეძლება SMS შეტყობინებების მიღება და დამუშავება. ეს ნიშნავს, რომ აპს შეეძლება თქვენ მოწყობილობაზე გამოგზავნილი შეტყობინებების მონიტორინგი და მათი წაშლა თქვენთვის ჩვენების გარეშე."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"ტექსტური შეტყობინებების (MMS) მიღება"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"აპს შეეძლება აქტიური ფანჯრიდან კონტენტის მოძიება. მავნე აპებს შეუძლიათ ფანჯრის სრული კონტენტის მოძიება და ყველა ტექსტის წაკითხვა პაროლების გარდა."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"მარტივი წვდომის დროებით გააქტიურება"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"აპს შეეძლება მოწყობილობაზე გამარტივებული რეჟიმის ჩართვა. მავნე აპებს შეეძლებათ ამ რეჟიმის ჩართვა მომხმარებლის გაფრთხილების გარეშე."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ფანჯრის ინფორმაციის მოძიება"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"აპს შეეძლება ფანჯრების მენეჯერის მეშვეობით ფანჯრების შესახებ ინფორმაციის მოპოვება. მავნე აპლიკაციებს შეეძლებათ ისეთი ინფორმაციის მოპოვება, რომელიც შიდა სისტემური მოხმარებისთვის არის განკუთვნილი."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"ფანჯრის ჟეტონის მოძიება"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"ნებას რთავს აპლიკაციას მოიძიოს ფანჯრის ჟეტონი. მავნე აპებს შეუძლია აპლიკაციის ფანჯარასთან არაავტორიზებული ინტერაქცია განახორციელოს და თავი სისტემად წარმოაჩინოს."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"ჩარჩოს სტატისტიკის მოძიება"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"ნებას რთავს აპლიკაციას შეაგროვოს ჩარჩოს სტატისტიკა. მავნე აპებმა შესაძლოა ფანჯრების ჩარჩოს სტატისტიკის მონიტორინგი განახორციელოს სხვა აპებიდან."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"ღონისძიებების გაფილტვრა"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"აპლიკაციას შეეძლება რეგისტრაცია შეტანის ფილტრებისა, რომლებიც ასუფთავებენ მომხმარებლის ღონისძიების ყველა დინებას. მავნე აპმა შესაძლოა ეს ფუნქცია სისტემის UI კონტროლისთვის გამოიყენოს, მომხმარებლის ინტერვენციის გარეშე."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ეკრანის გადიდება"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"აპლიკაციას შეეძლება, შეცვალოს დისპლეის კონტენტი. მავნე აპებმა შეიძლება იმგვარად გარდაქმნან დისპლეის კონტენტი, რომ  მოწყობილობა გამოუსადეგარი გახდეს."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"ნაწილობრივი გამორთვა"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"აქტივობების მენეჯერს გათიშვის რეჟიმში აყენებს. სრულ გათიშვას არ ახორციელებს."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"აპის გადართვებისგან დაცვა"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"აპს საშუალებას აძლევს გააგზავნოს შეტყობინება SMS შეტყობინების მიღების თაობაზე. მავნე აპლიკაციებში ეს ფუნქცია შეიძლება გამოყენებული იქნას SMS შეტყობინებების მიღების იმიტაციიისათვის."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-ით მიღებული სამაუწყებლო შეტყობინების გაგზავნა"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"აპს შეეძლება, გაგზავნოს შეტყობინება WAP PUSH შეტყობინების მიღების თაობაზე. მავნე აპებმა ეს შეიძლება გამოიყენონ MMS შეტყობინების მიღების გასაყალბებლად ან ნებისმიერი ვებგვერდის კონტენტის სახიფათო ვარიანტებით ჩუმად ჩასანაცვლებლად."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ქსელის შეფასებების მაუწყებლობის გაგზავნა"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"აპს ნებას რთავს გადასცეს შეტყობინება, რომ ქსელები შეფასებას საჭიროებს. ჩვეულებრივ აპებს ეს არასოდეს ჭირდება."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"მიმდინარე პროცესების რაოდენობის ლიმიტი"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"აპს შეეძლება, გააკონტროლოს მიმდინარე პროცესების მაქსიმალური რაოდენობა. ჩვეულებრივ აპებში არასდროს არის საჭირო."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"უკანა ფონის აპის იძულებით დახურვა"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"აპს შეეძლება Vpn სერვისის ზედა დონის ინტერფეისთან დაკავშირება. არასდროს გამოიყენება ჩვეულებრივ აპებში."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ფონზე მიჭედება"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"მფლობელს შეეძლება ფონის ზედა დონის ინტერფეისთან დაკავშირება. არასდროს გამოიყენება ჩვეულებრივ აპებში."</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"დისტანციურ მონიტორზე მიბმა"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"მფლობელს შეეძლება მიებას დისტანციურ მონიტორის ზედა დონის ინტერფეისს. ჩვეულებრივ აპს ეს წესით არასოდეს უნდა დაჭირდეს."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ვიჯეტ სერვისთან დაკავშირება"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"აპს შეეძლება ზედა დონის ინტერფეისის ვიჯეტთან დაკავშირება. არასდროს გამოიყენება ჩვეულებრივ აპებში."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"მარშრუტის სერვისის პროვაიდერთან შეკავშირება"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"საშუალებას აძლევს მფლობელს შეკავშირდეს მარშრუტების ნებისმიერ პროვაიდერთან. ჩვეულებრივ აპებს უმეტეს შემთხვევაში არ დაჭირდება."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"მოწყობილობის ადმინთან ინტერაქცია"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"აპს შეეძლება მოწყობილობის ადმინისტრატორისთვის intent ობიექტების გაგზავნა. არასდროს გამოიყენება ჩვეულებრივ აპებში."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"TV შეყვანასთან მიბმა"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"აპს შეეძლება TV შეყვანის ზედა დონის ინტერფეისთან დაკავშირება. არასდროს გამოიყენება ჩვეულებრივ აპებში."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"მოწყობილობის ადმინისტრატორს დამატება ან ამოშლა"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"საშუალებას აძლევს მფლობელს დაამატოს ან ამოშალოს მოწყობილობის აქტიური ადმინისტრატორები. ჩვეულებრივ აპებს, ალბათ, არასოდეს დაჭირდება"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"ეკრანის ორიენტაციის შეცვლა"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"აპს დასაკრავად შეეძლება გამოიყენოს ნებისმიერი დაყენებული მედია დეკოდერი."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"სანდო მტკიცებულებების მართვა"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"აპისთვის ნების დართვა, მოახდინოს CA სერტიფიკატების სანდო მტკიცებულებებად ინსტალაცია და დეინსტალაცია."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"უქმე მდგომარეობისას აპლიკაციის გაშვება"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"ეს უფლება Android-ის სისტემას უფლებას ანიჭებს ფონურად გაუშვას აპლიკაცია, როდესაც მოწყობილობა არ გამოიყენება."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"სისტემის დიაგნოსტიკის რესურსებში წაკითხვა/ჩაწერის უფლება"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"აპს შეეძლება, წაიკითხოს ან ჩაწეროს ნებისმიერ რესურსში, რომელიც დიაგნოსტიკის ჯგუფს ეკუთვნის, მაგალითად, ფაილები /dev-ში. ამან შესაძლოა იმოქმედოს სისტემის სტაბილურობასა და უსაფრთხოებაზე. მისი გამოყენება მხოლოდ მწარმოებლის ან ოპერატორის მიერ ტექნიკის სპეციფიკური დიაგნოსტიკისთვის უნდა მოხდეს."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"აპის კომპონენტების ჩართვა ან გამორთვა"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"აპს შეეძლება მოწყობილობაზე შენახული პირადი პროფილის ინფორმაციის წაკითხვა, მაგალითად, თქვენი სახელისა და საკონტაქტო ინფორმაციის. ეს ნიშნავს, რომ აპს შეუძლია თქვენი იდენტიფიცირება და თქვენი პირადი ინფორმაციის სხვებისთვის გაგზავნა."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"თქვენი საკონტაქტო ინფორმაციის შეცვლა"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"აპს შეეძლება მოწყობილობაზე შენახული პირადი პროფილის ინფორმაციის შეცვლა ან დამატება, მაგალითად, თქვენი სახელისა და საკონტაქტო ინფორმაციის. ეს ნიშნავს, რომ აპს შეუძლია თქვენი იდენტიფიცირება და თქვენი პირადი ინფორმაციის სხვებისთვის გაგზავნა."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"სხეულის სენსორები (მაგ. გულისცემის მონიტორები)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"საშუალებას აძლევს აპს იქონიოს წვდომა თქვენ მიერ გამოყენებული სენსორებიდან, რათა გაზომოთ, რა ხდება თქვენ სხეულში, მაგ. გულის ცემის რითმი."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"სოციალური ნაკადის წაკითხვა"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"აპს შეეძლება თქვენი და თქვენი მეგობრების სოციალური განახლებებთან წვდომა და სინქრონიზაცია. ინფორმაციის გაზიარებისას იყავით ფრთხიად - აპს ექნება შესაძლებლობა, რომ წაიკითხოს სოციალურ ქსელებში კომუნიკაცია თქვენსა და თქვენს მეგობრებს შორის კონფიდენციალურობის მიუხედავად. შენიშვნა: ეს უფლება შესაძლოა ვერ იყოს გამოყენებული ყველა სოციალურ ქსელში."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"თქვენს სოციალურ მაუწყებლობაზე დაწერა"</string>
@@ -477,6 +523,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"აპს შეეძლება, გამოიყენოს SurfaceFlinger-ის დაბალი დონის ელემენტები."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"კადრის ბუფერის (ეკრანის შიგთავსის) წაკითხვა"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"აპს შეეძლება წაიკითხოს ბუფერული ჩარჩოს კონტენტი."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger-ზე წვდომა"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"აპს შეეძლება, გამოიყენოს InputFlinger-ის დაბალი დონის ფუნქციები."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi ეკრანის კონფიგურაცია"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"აპს შეეძლება Wifi ეკრანებთან დაკავშირება და დაკონფიგურირება."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wifi ეკრანების მართვა"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"აპს შეეძლება აუდიოს გლობალური პარამეტრების შეცვლა. მაგ.: ხმის სიმაღლე და რომელი დინამიკი გამოიყენება სიგნალის გამოსტანად."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"აუდიოს ჩაწერა"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"აპს შეეძლება აუდიო ჩაწერა მიკროფონით. ნებართვა აპს აუდიო ჩაწერის უფლებას აძლევს ნებისმიერ დროს, თქვენი თანხმობის გარეშე."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"კომუნიკაცია SIM-თან"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"აპისთვის ნების დართვა გაუგზავნოს ბრძანებები SIM-ბარათს. ეს ძალიან საშიშია."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"სურათებისა და ვიდეოების გადაღება"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"აპს შეეძლება კამერით სურათისა და ვიდეოს გადაღება. ეს ნებართვა აპს უფლებას აძლევს, ნებისმიერ დროს გამოიყენოს კამერა თქვენი დადასტურების გარეშე."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"კამერის გამოყენებისას გადამცემი ინდიკატორის LED გათიშვა"</string>
@@ -550,6 +600,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"აპს შეეძლება აკონტროლოს მოწყობილობაზე ტელეფონის ფუნქციები. ამ უფლების მქონე აპს შეუძლია ქსელების გადართვა, ტელეფონის რადიოს ჩართვა და გამორთვა, მომხმარებლისათვის შეტყობინების გარეშე."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ტელეფონის სტატუსისა და იდენტობის წაკითხვა"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"აპს შეეძლება ჰქონდეს წვდომა მოწყობილობის სატელეფონო ფუნქციებზე. აპმა მსგავსი უფლებით შეძლებს დაადგინოს ტელეფონის ნომერი, მისი სერიული გამოცემა, აქტიური ზარი, დაკავშირებული ნომერი და მსგავსი."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"ტელეფონის ზუსტი მდგომარეობების დადგენა"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"ანიჭებს აპს ტელეფონის ზუსტ მდგომარეობაზე წვდომას. ეს უფლება საშუალებას აძლევს აპს შეიტყოს ინფორმაცია ზარის რეალურ სტატუსზე, აქტიურია ზარი თუ უკანა ფონზეა, ვერ განხორციელებული ზარები, მონაცემთა გადაცემის ზუსტი სტატუსი და ვერ განხორციელებული მონაცემთა კავშირები."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"დაიცავით ტაბლეტი დაძინებისგან"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ტელეფონის ძილის რეჟიმში გადასვლის აღკვეთა"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"აპს შეეძლება ხელი შეუშალოს ტაბლეტის დაძინებას."</string>
@@ -617,6 +669,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX მდგომარეობის შეცვლა"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"აპს შეეძლება, დაუკავშიროს და გამოაერთოს ტაბლეტი WiMAX ქსელებიდან."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"აპს შეეძლება, დაუკავშიროს და გამოაერთოს ტელეფონი WiMAX ქსელებიდან."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ქსელების შეფასება"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"აპს ნებას რთავს შეაფასოს ქსელები და იქონიოს ზეგავლენა, თუ რომელი ქსელი ამჯობინოს ტაბლეტმა."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"აპს ნებას რთავს შეაფასოს ქსელები და იქონიოს ზეგავლენა, თუ რომელი ქსელი ამჯობინოს ტელეფონმა."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Bluetooth მოწყობილობებთან დაწყვილება"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"აპს შეეძლება, ნახოს Bluetooth-ის კონფიგურაცია ტაბლეტზე, შექმნას და მიიღოს კავშირები დაწყვილებულ მოწყობილობებთან."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"აპს შეეძლება, ნახოს Bluetooth-ის კონფიგურაცია ტელეფონზე და შექმნას და მიიღოს კავშირები დაწყვილებულ მოწყობილობებთან."</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"აპს შეეძლება მოიძიოს, გამოიკვლიოს და წაშალოს შეტყობინებები, მათ შორის სხვა აპების მიერ გამოქვეყნებული."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"შეტყობინებების მოსმენის სერვისთან დაკავშირება"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"მფლობელს შეეძლება შეტყობინებების მსმენლის სერვისის ზედა დონის ინტერფეისთან დაკავშირება. არ უნდა მოხდეს მისი გამოყენება ჩვეუელებრივი აპებისთვის.ფ"</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ოპერატორის მიერ მოწოდებული კოფიგურაციის აპის გამოხმობა"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"საშუალებას აძლევს მფლობელს გამოიწვიოს ოპერატორის მიერ მოწოდებული კონფიგურაციის აპი. ჩვეულებრივ აპს ეს წესით არასოდეს არ უნდა დაჭირდეს."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"განხორციელდეს ქსელის მდგომარეობის მონიტორინგი"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"საშუალებას აძლევს აპლიკაციებს განახორციელოს ქსელის მდგომარეობის მონიტორინგი. ეს ფუნქცია ჩვეულებრივ აპებს არ ჭირდება."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"შეყვანის მოწყობილობის კალიბრაციის ცვლილება"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"საშუალებას აძლევს აპს შეცვალოს სენსორული ეკრანის კალიბრაციის პარამეტრები. ჩვეულებრივ აპებს წესით არ უნდა დაჭირდეს."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM სერთიფიკატებზე წვდომა"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"საშუალებას აძლევს აპლიკაციას დანერგოს და გამოიყენოს DRM სერთიფიკატები. ეს უფლება ჩვეულებრივ აპებს არ ჭირდება."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"პაროლის წესების დაყენება"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"გააკონტროლეთ ეკრანის განბლოკვის პაროლში დაშვებული სიმბოლოები და მისი სიგრძე."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"ეკრანის განბლოკვის მცდელობების გაკონტროლება"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"სახლი"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"სამსახური"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"სხვა"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"ამ კონტაქტის მნახველი აპლიკაცია ვერ მოიძებნა."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"აკრიფეთ PIN კოდი"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"დაბეჭდეთ PUK კოდი და ახალი PIN კოდი."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK კოდი"</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"აპლიკაციას ღილაკების დამცავის უსაფრთხო საცავზე წვდომის უფლება ექნება."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"ღილაკების დამცავის გამოჩენისა და დამალვის მართვა"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"აპლიკაციას შეეძლება ღილაკების დამცავის კონტროლი."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"ნდობის მდგომარეობის ცვლილებების მოსმენა."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"საშუალებას აძლევს აპლიკაციას მოუსმინოს ცვლილებებს სანდო მდგომარეობაში."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"სანდო აგენტის სერვისზე მიმაგრება."</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"საშუალებას აძლევს აპლიკაციას მიემაგროს სანდო აგენტის სერვისს."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"განახლებასთან და აღდგენის სისტემასთან ინტერაქცია"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"საშუალებას აძლევს აპლიკაციას მოახდინოს აღდგენის სისტემასთან და სისტემის განახლებასთან ინტერაქცია."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"მასშტაბის მართვისთვის შეეხეთ ორჯერ."</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ვერ დაემატა ვიჯეტი."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"გადასვლა"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"ფონი"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"ფონის შეცვლა"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"შეტყობინებების მსმენელი"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"VPN გააქტიურებულია"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN გააქტიურებულია <xliff:g id="APP">%s</xliff:g>-ის მიერ"</string>
     <string name="vpn_text" msgid="3011306607126450322">"შეეხეთ ქსელის სამართავად."</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift-"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"შეყვანა"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"აპის არჩევა"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ვერ გაეშვა"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"გაზიარება"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"გაუზიარეთ <xliff:g id="APPLICATION_NAME">%s</xliff:g>-ს"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"გასრიალებით მართვა. შეეხეთ &amp; არ აუშვათ."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"გაასრიალეთ ზემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"გაასრიალეთ ქვემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"გაასრიალეთ მარცხნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"გაასრიალეთ მარჯვნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"განბლოკვა"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"კამერა"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"უხმო"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"ხმის ჩართვა"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"ძიება"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"განბლოკვისათვის გადაფურცლეთ"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"შეაერთედ ყურსასმენები, პაროლის ღილაკები რომ გაიგოთ."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"წერტილი."</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"სისტემა"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth აუდიო"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"უსადენო ეკრანი"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"დასრულდა"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"მედია გამომავალი"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"მოწყობილობასთან დაკავშირება"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"ეკრანის მოწყობილობაზე გადაცემა"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"მოწყობილობების ძიება…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"პარამეტრები"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"კავშირის გაწყვეტა"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"სკანირება..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"დაკავშირება..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"ხელმისაწვდომი"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"გადაფარვა #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", დაცული"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"უსადენო ეკრანი დაკავშირებულია"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"გამოსახულება გადაეცემა სხვა მოწყობილობას"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"მიმდინარეობს ეკრანის გადაცემა"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"<xliff:g id="NAME">%1$s</xliff:g>-თან დაკავშირება"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"მიმდინარეობს ეკრანის გადაცემა"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"დაკავშირებულია <xliff:g id="NAME">%1$s</xliff:g>-თან"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"კავშირის გაწყვეტა"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"გადაუდებელი დახმარების ზარი"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"დაგავიწყდათ ნიმუში"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM ბარათის განბლოკვა…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"არასწორი PIN კოდი."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"აკრიფეთ PIN, რომელიც შედგება 4-დან 8 ციფრამდე."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK კოდი უნდა იყოს რვა ან მეტი ციფრისგან შემდგარი."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-კოდი 8 ციფრისგან უნდა შედგებოდეს."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"ხელახლა შეიყვანეთ სწორი PUK კოდი. რამდენიმე წარუმატებელი მცდელობა გამოიწვევს SIM ბარათის დაბლოკვას."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN კოდები არ ემთხვევა"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ნახატი ნიმუშის ძალიან ბევრი მცდელობა"</string>
@@ -1649,5 +1719,16 @@
     <item quantity="other" msgid="4730868920742952817">"კიდევ ერთხელ სცადეთ <xliff:g id="COUNT">%d</xliff:g> წამში"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"სცადეთ მოგვიანებით"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"ჩამოასრიალეთ ზევიდან სრული ეკრანის დასახურად"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"ჩამოასრიალეთ ზევიდან სრული ეკრანის დასახურად."</string>
+    <string name="done_label" msgid="2093726099505892398">"დასრულდა"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"საათების წრიული სლაიდერი"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"წუთების წრიული სლაიდერი"</string>
+    <string name="select_hours" msgid="6043079511766008245">"აირჩიეთ საათები"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"აირჩიეთ წუთები"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"დღეების ბადე თვეზე"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"წლის სია"</string>
+    <string name="select_day" msgid="7774759604701773332">"აირჩიეთ თვე და რიცხვი"</string>
+    <string name="select_year" msgid="7952052866994196170">"აირჩიეთ წელი"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"არჩეულია <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> წაიშალა"</string>
 </resources>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index 6dace3c..e9a021c 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"តេរ៉ាបៃ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;គ្មាន​ចំណង​ជើង&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"បញ្ចូល​កូដ PUK ដែល​មាន​ពី​ ៨ លេខ​ ឬ​វែង​ជាង​នេះ។"</string>
     <string name="needPuk" msgid="919668385956251611">"ស៊ីមកាត​​របស់​អ្នក​ជាប់​កូដ PUK ។ បញ្ចូល​កូដ PUK ដើម្បី​ដោះ​សោ។"</string>
     <string name="needPuk2" msgid="4526033371987193070">"បញ្ចូល​កូដ PUK2 ដើម្បី​ដោះ​សោ​ស៊ីម​កាត។"</string>
+    <string name="enablePin" msgid="209412020907207950">"បរាជ័យ, បើក​ការ​ចាក់សោ​ស៊ី​ម / RUIM ។"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"អ្នក​មាន <xliff:g id="NUMBER">%d</xliff:g> ការ​ព្យាយាម​ដែល​នៅសល់​មុន​ពេល​ស៊ី​ម​ត្រូវ​បាន​ចាក់សោ​។"</item>
+    <item quantity="other" msgid="7530597808358774740">"អ្នក​មាន <xliff:g id="NUMBER">%d</xliff:g> ការ​ព្យាយាម​ដែល​នៅសល់​មុន​ពេល​ស៊ី​ម​ត្រូវ​បាន​ចាក់សោ​។"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"លេខ​សម្គាល់​អ្នក​ហៅ​​ចូល"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"ធ្វើ​សម​កាល​កម្ម"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"មាន​ការ​លុប <xliff:g id="CONTENT_TYPE">%s</xliff:g> ច្រើន​ពេក។"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"ឧបករណ៍​ផ្ទុក​នៃ​​កុំព្យូទ័រ​បន្ទះ​ពេញ។ លុប​ឯកសារ​មួយ​ចំនួន​។"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"ឧបករណ៍​របស់​នាឡិកា​ពេញ។ លុប​ឯកសារ​មួយ​ចំនួន​។"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"ឧបករណ៍​ផ្ទុក​ទូរស័ព្ទ​ពេញ! លុប​ឯកសារ​មួយ​ចំនួន​ដើម្បី​បង្កើន​ទំហំ។"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"បណ្ដាញ​អាច​ត្រូវ​បាន​តាមដាន"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"ដោយ​ភាគី​ទីបី​ដែល​មិន​ស្គាល់"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"បើក​កម្មវិធី​រោទ៍"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"កំពុង​បិទ..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"កុំព្យូទ័រ​បន្ទះ​របស់​អ្នក​នឹង​បិទ។"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"នាឡិកា​របស់​អ្នក​នឹង​បិទ។"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"ទូរស័ព្ទ​របស់​អ្នក​នឹង​បិទ។"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"តើ​អ្នក​ចង់​បិទ​?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"ចាប់ផ្ដើម​ឡើងវិញ​ដើម្បី​ចូល​របៀប​សុវត្ថិភាព"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"ពេល​ជិះ​យន្តហោះ"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"បាន​បើក​របៀប​ពេល​ជិះ​យន្ត​ហោះ"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"បាន​បិទ​របៀបពេលជិះ​យន្តហោះ"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"ការ​កំណត់"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"របៀប​​​សុវត្ថិភាព"</string>
     <string name="android_system_label" msgid="6577375335728551336">"ប្រព័ន្ធ​​ Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"លុប​ផ្លូវកាត់"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"ឲ្យ​កម្មវិធី​លុប​ផ្លូវកាត់​អេក្រង់​ដើម​ដោយ​គ្មាន​អំពើ​ពី​អ្នកប្រើ។"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"នាំ​ផ្លូវ​ការ​ហៅ​ចេញ​ឡើងវិញ"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"ឲ្យ​កម្មវិធី​ដំណើរការ​ការ​ហៅ​ចេញ និង​ប្ដូរ​លេខ​ត្រូវ​ហៅ។ សិទ្ធិ​នេះ​អនុញ្ញាត​ឲ្យ​កម្មវិធី​តាមដាន ប្ដូរ​ទិស ឬ​ការពារ​ការ​ហៅ​ចេញ។"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"ឲ្យ​កម្មវិធី​ឃើញ​លេខ​ដែល​កំពុង​ត្រូវ​បាន​ហៅ​អំឡុង​ពេល​ហៅ​ចេញ​​ដោយ​ប្រើ​​ជម្រើស​ ដើម្បី​បញ្ជូន​​ការ​ហៅ​បន្ត​ទៅ​លេខ​ផ្សេង ឬ​បោះបង់​ការ​ហៅ​រួម​គ្នា។"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"ទទួល​សារ​អត្ថបទ (សារ SMS​)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"ឲ្យ​កម្មវិធី​ទទួល និង​ដំណើរការ​​សារ MMS ។ មាន​ន័យ​ថា កម្មវិធី​អាច​ត្រួតពិនិត្យ​ ឬ​លុប​សារ​ដែល​បាន​ផ្ញើ​ទៅ​ឧបករណ៍​របស់​អ្នក ដោយ​​មិន​បង្ហាញ​អ្នក។"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"ទទួល​សារ​អត្ថបទ (MMS​)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"ឲ្យ​កម្មវិធី​ទៅ​យក​មាតិកា​បង្អួច​សកម្ម។ កម្មវិធី​ព្យាបាទ​អាច​ទៅ​យក​មាតិកា​បង្អួច​ទាំង​មូល និង​ពិនិត្យ​អត្ថបទ​ទាំងអស់ លើកលែង​តែ​ពាក្យ​សម្ងាត់។"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"បើក​មធ្យោបាយ​ងាយស្រួល​ជា​បណ្ដោះ​អាសន្ន"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"ឲ្យ​កម្មវិធី​បើក​ភាព​ងាយស្រួល​លើ​ឧបករណ៍​ជា​បណ្ដោះអាសន្ន។ កម្មវិធី​ព្យាបាទ​អាច​បើក​ភាព​ងាយស្រួល​ដោយ​មិន​ឲ្យ​អ្នក​ប្រើ​ដឹង។"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ទៅ​យក​ព័ត៌មាន​បង្អួច"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"ឲ្យ​កម្មវិធី ទៅ​យក​ព័ត៌មាន​អំពី​បង្អួច​ពី​កម្មវិធី​គ្រប់គ្រង​បង្អួច។ កម្មវិធី​ព្យាបាទ​អាច​ទៅ​យក​ព័ត៌មាន​ដែល​មាន​បំណង​សម្រាប់​ការ​ប្រើ​ប្រព័ន្ធ​ខាង​ក្នុង។"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"ទៅ​យក​និមិត្តសញ្ញា​​បង្អួច"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"ឲ្យ​កម្មវិធី​ទៅ​យក​និមិត្តសញ្ញា​បង្អួច។ កម្មវិធី​ព្យាបាទ​អាច​អនុវត្ត​អន្តរកម្ម​ដែល​មិន​បាន​អនុញ្ញាត​ជា​មួយ​​បង្អួច​កម្មវិធី​ដោយ​ក្លែង​ធ្វើ​ជា​ប្រព័ន្ធ។"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"ទៅ​យក​ស្ថិតិ​ស៊ុម"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"ឲ្យ​កម្មវិធី​ប្រមូល​ស្ថិតិ​ស៊ុម​។ កម្មវិធី​ព្យាបាទ​អាច​សង្កេត​មើល​បង្អួច​ស្ថិតិ​ស៊ុម​ពី​កម្មវិធី​ផ្សេង។"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"ច្រោះ​ព្រឹត្តិការណ៍"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"ឲ្យ​កម្មវិធី​ចុះ​ឈ្មោះ​តម្រង​បញ្ចូល​​ដែល​ច្រោះ​​ព្រឹត្តិការណ៍​របស់​អ្នក​ប្រើ​ទាំងអស់​មុន​ពេល​ពួក​វា​ត្រូវ​បាន​ផ្ដាច់។ កម្មវិធី​ព្យាបាទ​អាច​ពិនិត្យ​ចំណុច​ប្រទាក់​ប្រព័ន្ធ​ដោយ​គ្មាន​អំពើ​ពី​អ្នក​ប្រើ។"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ពង្រីក​ការ​បង្ហាញ"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"ឲ្យ​កម្មវិធី​ពង្រីក​មាតិកា​នៃ​ការ​បង្ហាញ។ កម្មវិធី​ព្យាបាទ​អាច​ប្ដូរ​មាតិកា​ការ​បង្ហាញ​តាមវិធី​ដែល​បង្ហាញ​ថា​ឧបករណ៍​មិន​អាច​ប្រើ​បាន។"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"បិទ​​ដោយ​ផ្នែក"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"ដាក់​កម្មវិធី​គ្រប់គ្រង​​សកម្មភាព​ក្នុង​ស្ថាន​ភាព​បិទ។ មិន​អនុវត្ត​ការ​បិទ​ពេញលេញ​ទេ។"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ការ​ពារ​​ការ​ប្ដូរ​កម្មវិធី"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"ឲ្យ​កម្មវិធី​ប្រកាស​ការ​ជូន​ដំណឹង​​ការ​ទទួល​សារ​ SMS ។ កម្មវិធី​ព្យាបាទ​អាច​ប្រើ​វា​​ដើម្បី​​បន្លំ​សារ SMS ចូល។"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ផ្ញើ​ការ​ប្រកាស​បាន​ទទួល​ WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"ឲ្យ​កម្មវិធី​ប្រកាស​ការ​ជូន​ដំណឹង​ថា​បាន​ទទួល​សារ WAP PUSH ។ កម្មវិធី​ព្យាបាទ​អាច​ប្រើ​វា​ដើម្បី​​ក្លែង​​បង្កាន់ដៃ​សារ MMS ឬ​ជំនួស​មាតិកា​ទំព័រ​បណ្ដាញ​ណាមួយ​ស្ងាត់​ៗ​​​ដោយ​អ្វី​ដែល​ក្លែងក្លាយ។"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ផ្ញើ​ពិន្ទុ​ការ​ប្រកាស​បណ្ដាញ"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"ឲ្យ​កម្មវិធី​ប្រកាស​ការ​ជូនដំណឹង​ដែល​បណ្ដាញ​តម្រូវ​ឲ្យ​ដាក់​ពិន្ទុ។ មិន​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា។"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"កំណត់​ចំនួន​ដំណើរការ​ដែល​កំពុង​ដំណើរការ"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"ឲ្យ​កម្មវិធី​ពិនិត្យ​ចំនួន​ដំណើរការ​អតិបរមា​ដែល​នឹង​ដំណើរការ។ មិន​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"បង្ខំ​​ឲ្យ​បិទ​កម្មវិធី​ក្នុង​ផ្ទៃ​ខាង​ក្រោយ"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"ឲ្យ​ម្ចាស់​ចង​ចំណុច​ប្រទាក់​កម្រិត​កំពូល​នៃ​សេវាកម្ម Vpn ។​ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ចង​ទៅ​ផ្ទាំង​រូបភាព"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"ឲ្យ​ម្ចាស់​ចង​ចំណុចប្រទាក់​កម្រិត​កំពូល​នៃ​ផ្ទាំង​រូបភាព។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"ភ្ជាប់​ទៅ​​អ្នក​សហការ​សំឡេង"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"អនុញ្ញាត​ឲ្យ​ម្ចាស់​ភ្ជាប់​ទៅ​ចំណុច​ប្រទាក់​កម្រិត​កំពូល​​របស់​សេវាកម្ម​អន្តរកម្ម​សំឡេង។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ភ្ជាប់​ទៅ​ការ​បង្ហាញ​ពី​ចម្ងាយ"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"អនុញ្ញាត​ឲ្យ​ម្ចាស់​ភ្ជាប់​​ទៅ​ចំណុច​ប្រទាក់​កម្រិត​កំពូល​នៃ​ការ​បង្ហាញ​ពី​ចម្ងាយ។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ចង​សេវា​កម្ម​ធាតុ​ក្រាហ្វិក"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"ឲ្យ​ម្ចាស់​ចង​ចំណុច​ប្រទាក់​កម្រិត​កំពូល​នៃ​សេវាកម្ម​ធាតុ​ក្រាហ្វិក។ មិន​គួរ​​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"ភ្ជាប់​ទៅ​សេវាកម្ម​ក្រុមហ៊ុន​ផ្ដល់​ច្រក"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"អនុញ្ញាត​ឲ្យ​ម្ចាស់​ភ្ជាប់​ទៅ​ក្រុមហ៊ុន​ផ្ដល់​​ច្រក​ដែល​បាន​ចុះ​ឈ្មោះ។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ទាក់ទង​ជា​មួយ​អ្នកគ្រប់គ្រង​ឧបករណ៍"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"ឲ្យ​ម្ចាស់​ផ្ញើ​គោលបំណង​​ទៅ​អ្នក​គ្រប់គ្រង​ឧបករណ៍។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"ភ្ជាប់​ទៅ​ការ​បញ្ចូល​ទូរទស្សន៍"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"អនុញ្ញាត​ឲ្យ​ម្ចាស់​ភ្ជាប់​ទៅ​ចំណុចប្រទាក់​កម្រិត​ខ្ពស់​នៃ​ការ​បញ្ចូល​ទូរទស្សន៍។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"បន្ថែម​ ឬ​លុប​កម្មវិធី​គ្រប់គ្រង​​​ឧបករណ៍"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"អនុញ្ញាត​​​ឲ្យ​ម្ចាស់​​​បន្ថែម​ ឬ​លុប​កម្មវិធី​គ្រប់គ្រង​ឧបករណ៍​សកម្ម​ចេញ​។ មិន​គួរ​ប្រើ​សម្រាប់​កម្មវិធី​​ធម្មតា​ទេ​។"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"ប្ដូរ​ទិស​អេក្រង់"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"ឲ្យ​កម្មវិធី​ប្រើ​កម្មវិធី​ឌិកូដ​មេឌៀ​ដែល​បាន​ដំឡើង ដើម្បី​ឌិកូដ​សម្រាប់​ការ​ចាក់​ឡើងវិញ។"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"គ្រប់គ្រង​ព័ត៌មាន​សម្ងាត់​ដែល​ទុកចិត្ត"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"អនុញ្ញាត​ឲ្យ​កម្មវិធី​ដំឡើង និង​លុប​វិញ្ញាបនបត្រ CA នៅ​ពេល​មាន​ព័ត៌មាន​សម្ងាត់​ដែល​ទុកចិត្ត។"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"ដំណើរការ​កម្មវិធី​អំឡុង​ពេល​ទំនេរ"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"សិទ្ធិ​នេះ​អនុញ្ញាត​ឲ្យ​ប្រព័ន្ធ Android ដំណើរការ​កម្មវិធី​ក្នុង​ផ្ទៃ​ខាង​ក្រោយ ខណៈ​ដែល​ឧបករណ៍​មិន​កំពុង​ប្រើ។"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"អាន/សរសេរ​ធនធាន​គ្រប់គ្រង​ប្រអប់"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"ឲ្យ​កម្មវិធី​អាន និង​សរសេរ​ប្រភព​ណាមួយ​ដែល​គ្រប់គ្រង​ដោយ​ក្រុម​អ្នក​វិនិច្ឆ័យ ឧទាហរណ៍ ឯកសារ​នៅ​ក្នុង /dev ។ វា​អាច​ប៉ះពាល់​យ៉ាង​ខ្លាំង​ដល់​ស្ថេរ​ភាព​ និង​សុវត្ថិភាព​ប្រព័ន្ធ។ វា​គួរ​ត្រូវ​បាន​ប្រើ​សម្រាប់​វិនិច្ឆ័យ​ផ្នែក​រឹង​ជាក់​លាក់​ដោយ​ក្រុមហ៊ុន​ផលិត ឬ​ប្រតិបត្តិ​ករ។"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"បិទ ឬ​បើក​សមាសធាតុ​កម្មវិធី"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"ឲ្យ​កម្មវិធី​អាន​ព័ត៌មាន​ប្រវត្តិរូប​ផ្ទាល់ខ្លួន​ដែល​មាន​លើ​ឧបករណ៍​របស់​អ្នក ដូច​ជា ឈ្មោះ និង​ព័ត៌មាន​ទំនាក់ទំនង។ វា​មាន​ន័យ​ថា កម្មវិធី​អាច​កំណត់​អ្នក និង​អាច​ផ្ញើ​ព័ត៌មាន​ប្រវត្តិរូប​របស់​អ្នក​ទៅ​អ្នក​ផ្សេង។"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"កែ​កាត​ទំនាក់ទំនង​ផ្ទាល់​ខ្លួន​របស់​អ្នក"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"ឲ្យ​កម្មវិធី​ប្ដូរ ឬ​បន្ថែម​ព័ត៌មាន​ប្រវត្តិរូប​ផ្ទាល់​ខ្លួន​ដែល​បាន​រក្សាទុក​ក្នុង​ឧបករណ៍​របស់​អ្នក ដូចជា ឈ្មោះ និង​ព័ត៌មាន​ទំនាក់ទំនង​របស់​អ្នក។ នេះ​មាន​ន័យ​ថា​កម្មវិធី​អាច​កំណត់​អ្នក និង​ផ្ញើ​ព័ត៌មាន​ប្រវត្តិរូប​របស់​អ្នក​ទៅ​អ្នក​ផ្សេង។"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"ឧបករណ៍ចាប់សញ្ញារាងកាយ(ដូចជាម៉ាស៊ីនវាស់ចង្វាក់បេះដូង)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"​ឲ្យ​​កម្មវិធី​ដើម្បី​ចូល​ដំណើរការ​ទិន្នន័យ​ពី​ឧបករណ៍​ចាប់​សញ្ញា​ដែល​អ្នក​ប្រើ​ ដើម្បី​វាស់​ពី​អ្វី​ដែល​កំពុង​កើត​ឡើង​នៅ​ខាង​ក្នុង​ខ្លួន​របស់​អ្នក​ដូច​ជា​ចង្វាក់​បេះដូង​។"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"អាន​ចរន្ត​​សង្គម​របស់​អ្នក"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"ឲ្យ​កម្មវិធី​ចូល​ដំណើរការ និង​ធ្វើ​សម​កាល​កម្ម​បច្ចុប្បន្នភាព​សង្គម​ពី​អ្នក​ និង​មិត្តភ័ក្ដិ។ ប្រយ័ត្ន​ពេល​ចែករំលែក​ព័ត៌មាន វា​អនុញ្ញាត​ឲ្យ​កម្មវិធី​អាន​ការ​ទាក់ទង​រវាង​អ្នក​ និង​មិត្តភ័ក្ដិ​លើ​បណ្ដាញ​សង្គម ទាក់ទង​នឹង​ព័ត៌មាន​សម្ងាត់។ ចំណាំ៖​ សិទ្ធិ​នេះ​មិន​អាច​ត្រូវ​បាន​​អនុវត្ត​លើ​បណ្ដាញ​សង្គម​ទាំង​អស់​បាន​ទេ។"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"សរសេរ​ទៅ​ចរន្ត​សង្គម​របស់​អ្នក"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"ឲ្យ​កម្មវិធី​ប្រើ​លក្ខណៈ​កម្រិត​ទាប​របស់ SurfaceFlinger ។"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"អាន​អង្គ​ចងចាំ​បណ្ដោះ​អាសន្ន"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"ឲ្យ​កម្មវិធី​អាន​មាតិកា​នៃ​អង្គ​ចងចាំ​បណ្ដោះ​អាសន្ន។"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"ចូល​ដំណើរការ InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"ឲ្យ​កម្មវិធី​ប្រើ​លក្ខណៈ​កម្រិត​ទាប InputFlinger ។"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"កំណត់​រចនាសម្ព័ន្ធ​ការ​បង្ហាញ​វ៉ាយហ្វាយ"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"ឲ្យ​កម្មវិធី​កំណត់​រចនាសម្ព័ន្ធ​ និង​ភ្ជាប់​ទៅ​ការ​បង្ហាញ​វ៉ាយហ្វាយ។"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"ពិនិត្យ​ការ​បង្ហាញ​វ៉ាយហ្វាយ"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ឲ្យ​កម្មវិធី​កែ​ការ​កំណត់​សំឡេង​សកល ដូច​ជា​កម្រិត​សំឡេង និង​អូប៉ាល័រ​ដែល​បាន​ប្រើ​សម្រាប់​លទ្ធផល។"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ថត​សំឡេង"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"​ឱ្យ​កម្មវិធី​ថត​សំឡេង​​ជាមួយ​មីក្រូហ្វូន​​​។ សិទ្ធិ​នេះ​អនុញ្ញាត​ឲ្យ​កម្មវិធី​ថត​សំឡេង​​នៅ​ពេល​ណា​មួយ​ដោយ​គ្មាន​ការ​បញ្ជាក់​របស់​អ្នក។"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"ការ​ភ្ជាប់​ស៊ីមកាត"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"ឲ្យ​កម្មវិធី​ផ្ញើ​ពាក្យ​បញ្ជា​ទៅ​ស៊ីម​កាត។ វា​គ្រោះ​ថ្នាក់​ណាស់។"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ថត​រូប និងវីដេអូ"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"ឲ្យ​កម្មវិធី​ថត​រូប និង​វីដេអូ​ដោយ​ប្រើ​ម៉ាស៊ីន​ថត។ វា​ឲ្យ​កម្មវិធី​​ប្រើ​ម៉ាស៊ីន​ថត​នៅ​ពេល​​ណាមួយ​ដោយ​គ្មាន​ការ​បញ្ជាក់​របស់​អ្នក។"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"បិទ​​ពន្លឺ​បង្ហាញ​ការ​បញ្ជូន​​ពេល​ម៉ាស៊ីន​ថត​កំពុង​ប្រើ"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"ឲ្យ​កម្មវិធី​ពិនិត្យ​លក្ខណៈ​ទូរស័ព្ទ​នៃ​ឧបករណ៍។ កម្មវិធី​ដែល​មាន​សិទ្ធិ​នេះ​អាច​ប្ដូរ​បណ្ដាញ បិទ និង​បើកវិទ្យុ​ក្នុង​ទូរស័ព្ទ​ដោយ​មិន​ជូន​ដំណឹង​អ្នក។"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"អាន​ស្ថានភាព និង​អត្តសញ្ញាណ​ទូរស័ព្ទ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ឲ្យ​កម្មវិធី​ចូល​ដំណើរការ​លក្ខណៈ​ទូរស័ព្ទ​នៃ​ឧបករណ៍។ សិទ្ធិ​នេះ​​ឲ្យ​កម្មវិធី​កំណត់​លេខ​ទូរស័ព្ទ និង​លេខ​សម្គាល់​ឧបករណ៍ ថា​តើ​ការ​ហៅ​សកម្ម និង​លេខ​ពី​ចម្ងាយ​បាន​ភ្ជាប់​ដោយ​ការ​ហៅ។"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"អាន​ស្ថានភាព​ទូរស័ព្ទ​ត្រឹមត្រូវ"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"ឲ្យ​កម្មវិធី​ចូល​ដំណើរ​ការ​ស្ថានភាព​ទូរស័ព្ទ​​​ត្រឹមត្រូវ។ សិទ្ធិ​នេះ​អនុញ្ញាត​ឲ្យ​កម្មវិធី​កំណត់​ស្ថានភាព​ហៅ​ជាក់ស្ដែង ថា​តើ​ការ​ហៅ​សកម្ម ឬ​ស្ថិត​ក្នុង​ផ្ទៃ​ខាងក្រោយ ការ​ហៅ​បរាជ័យ ស្ថានភាព​ភ្ជាប់​ទិន្នន័យ​ត្រឹមត្រូវ និង​ការ​ភ្ជាប់​ទិន្នន័យ​បរាជ័យ។"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ការពារ​​កុំព្យូទ័រ​បន្ទះ​មិន​ឲ្យ​ដេក"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ការ​ពារ​ទូរស័ព្ទ​មិន​ឲ្យ​ដេក"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ឲ្យ​​កម្មវិធី​ការពារ​កុំព្យូទ័រ​បន្ទះ​មិន​ឲ្យ​ដេក។"</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"ប្ដូរ​ស្ថានភាព WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"ឲ្យ​កម្មវិធី​តភ្ជាប់​ និង​ផ្ដាច់​កុំព្យូទ័រ​បន្ទះ​ពី​បណ្ដាញ WiMAX ។"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"ឲ្យ​កម្មវិធី​ភ្ជាប់​ទូរស័ព្ទ​ និង​ផ្ដាច់​ពី​បណ្ដាញ WiMAX ។"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ដាក់​ពិន្ទុ​បណ្ដាញ"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"ឲ្យ​កម្មវិធី​ចាត់​ថ្នាក់​បណ្ដាញ និង​​មាន​ឥទ្ធិពល​លើ​បណ្ដាញ​ណា​មួយ​ដែល​​កុំព្យូទ័រ​បន្ទះ​ប្រើ។"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"ឲ្យ​កម្មវិធី​ចាត់​ថ្នាក់​បណ្ដាញ និង​​មាន​ឥទ្ធិពល​លើ​បណ្ដាញ​ណា​មួយ​ដែល​ទូរស័ព្ទ​គួរ​ប្រើ។"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"ផ្គូផ្គង​ជា​មួយ​ឧបករណ៍​ប៊្លូធូស"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ឲ្យ​កម្មវិធី​មើល​ការ​កំណត់​រចនាសម្ព័ន្ធ​​ប៊្លូធូស​លើ​​កុំព្យូទ័រ​បន្ទះ ព្រម​ទាំង​ធ្វើ​ការ​តភ្ជាប់ និង​ទទួល​​ជា​មួយ​ឧបករណ៍​បាន​ផ្គូផ្គង។"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"ឲ្យ​កម្មវិធី​មើល​​ការ​កំណត់​រចនាសម្ព័ន្ធ​ប៊្លូធូស​ក្នុង​ទូរស័ព្ទ ដើម្បី​ទទួល និង​តភ្ជាប់​ជា​មួយ​ឧបករណ៍​បាន​ផ្គូផ្គង។"</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"ឲ្យ​កម្មវិធី​ទៅ​យក ពិនិត្យ និង​សម្អាត​ការ​ជូន​ដំណឹង រួមមាន​​ប្រកាស​ដោយ​កម្មវិធី​ផ្សេងៗ។"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ចង​ទៅ​សេវាកម្ម​ស្ដាប់​ការ​ជូន​ដំណឹង"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"ឲ្យ​ម្ចាស់​ចង​ចំណុច​ប្រទាក់​កម្រិត​កំពូល​នៃ​សេវាកម្ម​កម្មវិធី​ស្ដាប់​ការ​ជូន​ដំណឹង។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​​ទេ។"</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"ភ្ជាប់​ទៅ​សេវាកម្ម​ក្រុមហ៊ុន​ផ្ដល់​លក្ខខណ្ឌ"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"អនុញ្ញាត​ឲ្យ​ម្ចាស់​ភ្ជាប់​ទៅ​ចំណុច​ប្រទាក់​កម្រិត​កំពូល​​របស់​សេវាកម្ម​ក្រុមហ៊ុន​ផ្ដល់​លក្ខខណ្ឌ។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ដកហូត​កម្មវិធី​កំណត់​រចនាសម្ព័ន្ធ​ដែល​បាន​ផ្ដល់​ដោយ​ក្រុមហ៊ុន​បញ្ជូន"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"អនុញ្ញាត​ឲ្យ​ម្ចាស់​ដក​ហូត​កម្មវិធី​កំណត់​រចនាសម្ព័ន្ធ​ដែល​បាន​ផ្ដល់​ដោយ​ក្រុមហ៊ុន​បញ្ជូន។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"សង្កេត​មើល​លើ​លក្ខខណ្ឌ​បណ្ដាញ"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"ឲ្យ​កម្មវិធី​សង្កេត​មើល​​លើ​លក្ខខណ្ឌ​បណ្ដាញ​។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"ប្ដូរ​​ចំណុច​ឧបករណ៍​បញ្ចូល"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"ឲ្យ​​កម្មវិធី​កែ​ប៉ារ៉ាម៉ែត្រ​កែ​ចំណុច​​នៃ​ការ​ប៉ះ​អេក្រង់។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"ចូល​មើល​វិញ្ញាបនបត្រ DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"ឲ្យ​កម្មវិធី​ផ្ដល់ និង​ប្រើ​វិញ្ញាបនបត្រ DRM ។ មិន​គួរ​ចាំបាច់​សម្រាប់​កម្មវិធី​ធម្មតា​ទេ។"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"កំណត់​ក្បួន​ពាក្យ​សម្ងាត់"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"ពិនិត្យ​ប្រវែង និង​តួអក្សរ​ដែល​បាន​អនុញ្ញាត​ក្នុង​ពាក្យ​សម្ងាត់​ចាក់​សោ​អេក្រង់។"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"ពិនិត្យ​ការ​ព្យាយាម​ដោះ​សោ​អេក្រង់"</string>
@@ -783,7 +842,7 @@
     <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
     <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
     <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"ការ​ជជែក"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
     <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
     <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
     <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"គេហ​ទំព័រ"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"កន្លែង​ធ្វើការ"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"ផ្សេងៗ"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"រក​មិន​ឃើញ​កម្មវិធី ដើម្បី​មើល​ទំនាក់ទំនង​នេះ​ទេ។"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"បញ្ចូល​កូដ PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"បញ្ចូល​កូដ PUK និង​ PIN ថ្មី"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"កូដ PUK"</string>
@@ -1123,14 +1183,14 @@
     <string name="noApplications" msgid="2991814273936504689">"គ្មាន​កម្មវិធី​អាច​អនុវត្ត​សកម្មភាព​នេះ។"</string>
     <string name="aerr_title" msgid="1905800560317137752"></string>
     <string name="aerr_application" msgid="932628488013092776">"ដោយ​បរាជ័យ <xliff:g id="APPLICATION">%1$s</xliff:g> បាន​បញ្ឈប់។"</string>
-    <string name="aerr_process" msgid="4507058997035697579">"ជា​អកុសល ដំណើរការ <xliff:g id="PROCESS">%1$s</xliff:g> បាន​បញ្ឈប់។"</string>
+    <string name="aerr_process" msgid="4507058997035697579">"ដោយ​បរាជ័យ ដំណើរការ <xliff:g id="PROCESS">%1$s</xliff:g> បាន​បញ្ឈប់។"</string>
     <string name="anr_title" msgid="4351948481459135709"></string>
     <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> មិន​ឆ្លើយតប។\n\nតើ​អ្នក​ចង់​បិទ​វា​ឬ?"</string>
     <string name="anr_activity_process" msgid="5776209883299089767">"សកម្មភាព <xliff:g id="ACTIVITY">%1$s</xliff:g> មិន​ឆ្លើយតប។\n\nតើ​អ្នក​ចង់​បិទ​វា?"</string>
     <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> មិន​ឆ្លើយតប។ តើ​អ្នក​ចង់​បិទ​វា?"</string>
     <string name="anr_process" msgid="6513209874880517125">"ដំណើរការ <xliff:g id="PROCESS">%1$s</xliff:g> មិន​ឆ្លើយតប។ \n\nតើ​អ្នក​ចង់​បិទ​វា​ឬ?"</string>
     <string name="force_close" msgid="8346072094521265605">"យល់​ព្រម"</string>
-    <string name="report" msgid="4060218260984795706">"របាយការណ៍"</string>
+    <string name="report" msgid="4060218260984795706">"រាយការណ៍"</string>
     <string name="wait" msgid="7147118217226317732">"រង់ចាំ"</string>
     <string name="webpage_unresponsive" msgid="3272758351138122503">"ទំព័រ​ក្លាយ​ជា​មិន​ឆ្លើយតប។\n\nតើ​អ្នក​​ចង់​បិទ​វា?"</string>
     <string name="launch_warning_title" msgid="1547997780506713581">"បាន​ប្ដូរ​ទិស​កម្មវិធី"</string>
@@ -1188,7 +1248,7 @@
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"មិន​​អាច​តភ្ជាប់​វ៉ាយហ្វាយ"</string>
     <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" មាន​ការ​តភ្ជាប់​អ៊ីនធឺណិត​មិន​ល្អ។"</string>
     <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"វ៉ាយហ្វាយ​ផ្ទាល់"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"ចាប់ផ្ដើម​វ៉ាយហ្វាយ​ដោយ​ផ្ទាល់។ វា​នឹង​បិទ​វ៉ាយហ្វាយ ។"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"ចាប់ផ្ដើម​វ៉ាយហ្វាយ​ផ្ទាល់។ វា​នឹង​បិទ​វ៉ាយហ្វាយ​ហតស្ពត។"</string>
     <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"មិន​អាច​ចាប់ផ្ដើម​វ៉ាយហ្វា​ដោយ​ផ្ទាល់។"</string>
     <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"បើក​​វ៉ាយហ្វាយ​ផ្ទាល់"</string>
     <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"ប៉ះ​ ដើម្បី​កំណត់"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"ឲ្យ​កម្មវិធី​ចូល​​ការ​ផ្ទុក​មាន​សុវត្ថិភាព keguard ។"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"ពិនិត្យ​ការ​បង្ហាញ និង​លាក់​ការ​ការពារ"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"ឲ្យ​កម្មវិធី​គ្រប់គ្រង keguard ។"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"ស្ដាប់​ការ​ផ្លាស់ប្ដូរ​ស្ថានភាព​ដែល​ទុកចិត្ត។"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"ឲ្យ​កម្មវិធី​ស្ដាប់​ការ​ផ្លាស់ប្ដូរ​ក្នុង​ស្ថានភាព​ដែល​​ទុកចិត្ត។"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ភ្ជាប់​ទៅ​សេវាកម្ម​ភ្នាក់ងារ​ដែល​ទុកចិត្ត"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"ឲ្យ​កម្មវិធី​ភ្ជាប់​សេវាកម្ម​ភ្នាក់ងារ​ដែល​ទុក​ចិត្ត។"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"អន្តរកម្ម​ជា​មួយ​បច្ចុប្បន្នភាព និង​ប្រព័ន្ធ​សង្គ្រោះ"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"ឲ្យ​កម្មវិធី​មាន​អន្តរកម្ម​ជា​មួយ​ប្រព័ន្ធ​សង្គ្រោះ និង​បច្ចុប្បន្នភាព​ប្រព័ន្ធ។"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ប៉ះ​ពីរ​ដង ​​ដើម្បី​គ្រប់គ្រង​ការ​ពង្រីក"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"មិន​អាច​បន្ថែម​ធាតុ​ក្រាហ្វិក។"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"ទៅ"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"ផ្ទាំង​រូបភាព"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"ប្ដូរ​ផ្ទាំង​រូបភាព"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"កម្មវិធី​ស្ដាប់​ការ​ជូន​ដំណឹង"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ក្រុមហ៊ុន​ផ្ដល់​លក្ខខណ្ឌ"</string>
     <string name="vpn_title" msgid="19615213552042827">"បាន​ធ្វើ​ឲ្យ VPN សកម្ម"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"បាន​ធ្វើ​ឲ្យ VPN សកម្ម​ដោយ <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"ប៉ះ ដើម្បី​គ្រប់គ្រង​បណ្ដាញ។"</string>
@@ -1343,7 +1410,7 @@
     <string name="submit" msgid="1602335572089911941">"ដាក់​ស្នើ"</string>
     <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"បាន​បើក​របៀប​រថយន្ត"</string>
     <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"ប៉ះ​ ដើម្បី​ចេញ​ពី​របៀប​រថយន្ត​។"</string>
-    <string name="tethered_notification_title" msgid="3146694234398202601">"​ភ្ជាប់ ឬ​ hotspot សកម្ម"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"ភ្ជាប់ ឬ​ហតស្ពត​សកម្ម"</string>
     <string name="tethered_notification_message" msgid="6857031760103062982">"ប៉ះ​ ដើម្បី​រៀបចំ។"</string>
     <string name="back_button_label" msgid="2300470004503343439">"ថយក្រោយ"</string>
     <string name="next_button_label" msgid="1080555104677992408">"បន្ទាប់"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"ជ្រើស​កម្មវិធី"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"មិន​អាច​ចាប់ផ្ដើម <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"ចែករំលែក​ជា​មួយ"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"ចែក​រំលែក​ជា​មួយ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"គ្រប់គ្រង​ការ​រុញ។ ប៉ះ &amp; សង្កត់។"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"រុញ​ឡើង​លើ​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"រុញ​ចុះក្រោម​សម្រាប់ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"រុញ​ទៅ​ឆ្វេង​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"រុញ​​ទៅ​ស្ដាំ​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"ដោះ​​សោ"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"ម៉ាស៊ីន​ថត"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"ស្ងាត់"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"បើក​សំឡេង"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"ស្វែងរក"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"អូស​ ដើម្បី​ដោះ​សោ។"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"ដោត​កាស​ដើម្បី​ស្ដាប់​ពាក្យ​សម្ងាត់​បាន​និយាយ។"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"ប្រព័ន្ធ"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"សំឡេង​ប៊្លូធូស"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"បង្ហាញ​បណ្ដាញ​ឥត​ខ្សែ"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"រួចរាល់"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"លទ្ធផល​មេឌៀ"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"ភ្ជាប់​ឧបករណ៍"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"ចាត់​ថ្នាក់​អេក្រង់​ទៅ​ឧបករណ៍"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"កំពុង​ស្វែងរក​ឧបករណ៍..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"ការ​កំណត់"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"ផ្ដាច់"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"កំពុង​វិភាគ​រក…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"កំពុង​​​ភ្ជាប់​…"</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"ទំនេរ"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"#<xliff:g id="ID">%1$d</xliff:g> ត្រួត​គ្នា"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", សុវត្ថិភាព"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"បាន​ភ្ជាប់​ការ​បង្ហាញ​បណ្ដាញ​ឥត​ខ្សែ"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"អេក្រង់​នេះ​បង្ហាញ​លើ​ឧបករណ៍​ផ្សេង"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"ចាត់​ថ្នាក់​អេក្រង់"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"កំពុង​តភ្ជាប់​ទៅ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"ចាត់​ថ្នាក់​អេក្រង់"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"តភ្ជាប់​ទៅ <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"ផ្ដាច់"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"ការ​ហៅ​ពេល​អាសន្ន"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ភ្លេច​​លំនាំ"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"កំពុង​ដោះ​សោ​​ស៊ីម​កាត..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"កូដ PIN មិន​ត្រឹមត្រូវ។"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"បញ្ចូល​កូដ PIN ដែល​មាន​ពី ៤ ដល់ ៨ លេខ។"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"កូដ PUK គួរ​តែ​មាន​​ ៨ លេខ ឬ​​ច្រើន​ជាង​នេះ។"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"លេខ​កូដ PUK គួរតែ​មាន ៨ខ្ទង់"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"បញ្ចូល​កូដ PUK ម្ដង​ទៀត។ ការ​ព្យាយាម​ដដែល​ច្រើន​ដឹង​នឹង​បិទ​ស៊ីម​កាត​ជា​អចិន្ត្រៃយ៍។"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"កូដ PIN មិន​ដូច​គ្នា"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ព្យាយាម​លំនាំ​ច្រើន​ពេក"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"សូម​ព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈពេល <xliff:g id="COUNT">%d</xliff:g> វិនាទី"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"សូម​ព្យាយាម​ម្ដងទៀត​នៅ​ពេល​ក្រោយ។"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"អូស​​​ចុះក្រោម ដើម្បី​ចេញ​ពី​ការ​បង្ហាញ​ពេញ​អេក្រង់"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"អូស​​​​ពីលើ​ចុះក្រោម ដើម្បី​ចេញ​ពី​ការ​បង្ហាញ​ពេញ​អេក្រង់។"</string>
+    <string name="done_label" msgid="2093726099505892398">"រួចរាល់"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"គ្រាប់​រំកិល​រង្វង់​ម៉ោង"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"គ្រាប់​រំកិល​រង្វង់​នាទី"</string>
+    <string name="select_hours" msgid="6043079511766008245">"ជ្រើស​ម៉ោង"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"ជ្រើស​នាទី"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"ក្រឡា​​​ខែ​នៃ​ថ្ងៃ"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"បញ្ជី​ឆ្នាំ"</string>
+    <string name="select_day" msgid="7774759604701773332">"ជ្រើស​ខែ និង​ថ្ងៃ"</string>
+    <string name="select_year" msgid="7952052866994196170">"ជ្រើស​ឆ្នាំ"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"បាន​ជ្រើស <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"បាន​លុប <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 1a0b2d9..7c6feba 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;제목 없음&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"8자리 이상의 숫자 PUK를 입력합니다."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM 카드의 PUK가 잠겨 있습니다. 잠금해제하려면 PUK 코드를 입력하세요."</string>
     <string name="needPuk2" msgid="4526033371987193070">"SIM 카드 잠금을 해제하려면 PUK2를 입력하세요."</string>
+    <string name="enablePin" msgid="209412020907207950">"실패했습니다. SIM/RUIM 잠금을 사용 설정하세요."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"<xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 SIM이 잠깁니다."</item>
+    <item quantity="other" msgid="7530597808358774740">"<xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 SIM이 잠깁니다."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"발신자 번호"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"동기화"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"<xliff:g id="CONTENT_TYPE">%s</xliff:g> 삭제가 너무 많습니다."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"태블릿 저장공간이 꽉 찼습니다. 일부 파일을 삭제하여 저장 여유 공간을 늘리세요."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"시계 저장공간이 가득 찼습니다. 일부 파일을 삭제하여 저장 여유 공간을 늘리세요."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"휴대전화 저장공간이 꽉 찼습니다. 일부 파일을 삭제하여 저장공간을 늘리세요."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"네트워크가 모니터링될 수 있음"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"알 수 없는 제3자의 모니터링"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"벨소리가 켜져 있습니다."</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"종료 중..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"태블릿이 종료됩니다."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"시계가 종료됩니다."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"휴대전화가 종료됩니다."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"종료하시겠습니까?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"안전 모드로 다시 부팅"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"비행기 모드"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"비행기 모드 사용중"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"비행기 모드 사용중이 아님"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"설정"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"안전 모드"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android 시스템"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"바로가기 제거"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"애플리케이션이 사용자의 작업 없이 홈 화면 바로가기를 삭제할 수 있도록 허용합니다."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"발신전화 경로 전환"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"앱이 발신 전화를 처리하고 전화를 걸 번호를 변경할 수 있도록 허용합니다. 이 권한을 사용하면 앱이 발신 전화를 모니터링, 리디렉션 또는 차단할 수도 있습니다."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"통화를 다른 번호로 리디렉션하거나 통화를 완전히 중단하는 옵션을 사용하여, 앱에서 발신 통화 중에 전화를 거는 번호를 볼 수 있게 허용합니다."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"문자 메시지 받기(SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"앱이 SMS 메시지를 수신하고 처리할 수 있도록 허용합니다. 이는 앱이 사용자에게 표시하지 않고 기기로 전송된 메시지를 모니터링 또는 삭제할 수도 있다는 것을 의미합니다."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"문자 메시지 받기(MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"앱이 활성 창의 콘텐츠를 검색할 수 있도록 허용합니다. 이 경우 악성 앱이 전체 창의 콘텐츠를 검색하여 비밀번호를 제외한 모든 텍스트를 살펴볼 수 있습니다."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"일시적인 접근성 사용"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"애플리케이션이 기기에서 일시적으로 접근성을 사용하도록 허용합니다. 이 경우 악성 앱이 사용자의 동의 없이 접근성을 사용할 수 있습니다."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"창 관련 정보 가져오기"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"애플리케이션이 Window Manager에서 창 관련 정보를 가져오도록 허용합니다. 이 경우 악성 앱이 내부 시스템에서만 사용하도록 되어 있는 정보를 가져올 수 있습니다."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"창 토큰 검색"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"애플리케이션이 창 토큰을 검색하도록 허용합니다. 악성 앱이 시스템을 가장하여 애플리케이션 창과 무단으로 상호작용할 수 있습니다."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"프레임 통계 검색"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"애플리케이션이 프레임 통계를 수집하도록 허용합니다. 악성 앱이 다른 앱에서 창의 프레임 통계를 볼 수 있습니다."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"일정 필터링"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"애플리케이션에 입력 필터를 등록할 수 있도록 하여 모든 사용자 일정 스트림을 전달하기 전에 필터링합니다. 이 경우 사용자의 개입 없이 악성 앱이 시스템 UI를 제어할 수 있습니다."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"디스플레이 확대"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"앱이 표시된 콘텐츠를 확대하도록 허용합니다. 악성 앱은 표시된 콘텐츠를 변형시켜 기기를 사용할 수 없게 만들 수 있습니다."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"부분 종료"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"작업 관리자를 종료 상태로 설정합니다. 전체 종료를 수행하지는 않습니다."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"애플리케이션 전환 방지"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"앱이 SMS 메시지를 받았다는 알림을 브로드캐스트할 수 있도록 허용합니다. 이 경우 악성 앱이 수신된 SMS 메시지를 위조할 수 있습니다."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-수신 브로드캐스트 보내기"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"앱이 WAP PUSH 메시지를 받았다는 알림을 브로드캐스트할 수 있도록 허용합니다. 이 경우 악성 앱이 MMS 메시지를 받은 것처럼 위장하거나 웹페이지의 콘텐츠를 악성 콘텐츠로 몰래 바꿀 수 있습니다."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"네트워크 점수화 브로드캐스트 전송"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"네트워크를 점수화할 필요가 있다는 알림을 앱이 브로드캐스트할 수 있도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"실행 중인 프로세스 수 제한"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"앱이 실행할 최대 프로세스 수를 제어할 수 있도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"백그라운드 앱 강제 종료"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"권한을 가진 프로그램이 VPN 서비스에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"배경화면 연결"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"권한을 가진 프로그램이 배경화면에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"음성 상호작용 서비스 사용"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"권한을 가진 프로그램이 음성 상호작용 서비스의 최상위 인터페이스를 사용하도록 합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"원격 디스플레이에 연결"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"권한을 가진 프로그램이 원격 디스플레이에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"위젯 서비스와 연결"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"권한을 가진 프로그램이 위젯 서비스에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"경로 제공업체 서비스 사용"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"권한을 가진 프로그램이 등록된 경로 제공업체를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"기기 관리자와 상호 작용"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"권한을 가진 프로그램이 기기 관리자에게 인텐트를 보낼 수 있도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"TV 입력 사용"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"권한을 가진 프로그램이 TV 입력에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"기기 관리자 추가 또는 삭제"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"권한을 가진 프로그램이 활성화된 기기의 관리자를 추가 또는 삭제하도록 합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"화면 방향 변경"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"애플리케이션에서 설치된 모든 미디어 디코더를 사용하여 재생하는 데 디코딩할 수 있도록 허용합니다."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"신뢰할 수 있는 자격증명 관리"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"앱에서 CA 인증서를 신뢰할 수 있는 자격증명으로 설치 및 제거하도록 허용합니다."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"유휴 시간 동안 애플리케이션 실행"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"이 권한을 부여하면 기기를 사용하지 않는 동안 Android 시스템이 백그라운드에서 애플리케이션을 실행할 수 있게 됩니다."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"진단 그룹 소유의 리소스 읽기/쓰기"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"앱이 진단 그룹 소유의 리소스(예: /dev에 있는 파일)를 읽고 쓸 수 있도록 허용합니다. 이 기능은 시스템 안정성 및 보안에 영향을 미칠 수 있으므로 제조업체 또는 사업자가 하드웨어 관련 진단을 수행하는 경우에만 사용해야 합니다."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"앱 구성요소 사용 또는 사용 안함"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"앱이 기기에 저장된 개인 프로필 정보(예: 사용자 이름, 연락처 정보 등)를 읽을 수 있도록 허용합니다. 이는 앱이 사용자를 확인할 수 있으며 다른 사용자에게 해당 프로필 정보를 전송할 수도 있다는 것을 의미합니다."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"나만의 연락처 카드 수정"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"앱이 기기에 저장된 개인 프로필 정보(예: 사용자 이름, 연락처 정보 등)를 변경 또는 추가할 수 있도록 허용합니다. 이는 앱이 사용자를 확인하고 다른 사용자에게 해당 프로필 정보를 전송할 수 있다는 것을 의미합니다."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"신체 센서(예: 심박수 모니터)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"앱이 신체 변화(예: 심박수) 측정을 위해 사용하는 센서의 데이터에 액세스하도록 허용합니다."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"소셜 스트림 읽기"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"앱이 사용자와 친구의 최신 소셜 소식에 액세스하고 동기화할 수 있도록 허용합니다. 이 경우 앱이 비밀유지와 관계 없이 소셜 네트워크에서 사용자와 친구가 주고받는 내용을 읽을 수 있으므로, 정보를 공유할 때 주의해야 합니다. 참고: 이 권한이 적용되지 않는 소셜 네트워크도 있습니다."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"소셜 스트림에 쓰기"</string>
@@ -460,7 +504,7 @@
     <string name="permlab_readCalendar" msgid="5972727560257612398">"캘린더 일정 및 기밀정보 읽기"</string>
     <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"앱이 친구나 동료의 일정을 포함하여 태블릿에 저장된 모든 캘린더 일정을 읽을 수 있도록 허용합니다. 이 경우 앱이 비밀유지 또는 기밀성을 무시하고 캘린더 데이터를 공유 또는 저장할 수도 있습니다."</string>
     <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"앱이 친구나 동료의 일정을 포함하여 휴대전화에 저장된 모든 캘린더 일정을 읽을 수 있도록 허용합니다. 이 경우 앱이 비밀유지 또는 기밀성과 관계 없이 캘린더 데이터를 공유 또는 저장할 수도 있습니다."</string>
-    <string name="permlab_writeCalendar" msgid="8438874755193825647">"소유자 몰래 캘린더 일정을 추가 또는 수정하고 참석자에게 이메일 전송"</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"소유자에게 알리지 않고 캘린더 일정을 추가 또는 수정하고 참석자에게 이메일 전송"</string>
     <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"앱이 친구나 동료의 일정을 포함하여 태블릿에서 수정할 수 있는 일정을 추가, 삭제, 변경할 수 있도록 허용합니다. 이 경우 앱이 캘린더 소유자가 보내는 것처럼 메시지를 전송하거나 소유자 모르게 일정을 수정할 수도 있습니다."</string>
     <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"앱이 친구나 동료의 일정을 포함하여 휴대전화에서 수정할 수 있는 일정을 추가, 삭제, 변경할 수 있도록 허용합니다. 이 경우 앱이 캘린더 소유자가 보내는 것처럼 메시지를 전송하거나 소유자 모르게 일정을 수정할 수도 있습니다."</string>
     <string name="permlab_accessMockLocation" msgid="8688334974036823330">"테스트를 위해 위치 정보제공자로 가장"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"앱이 SurfaceFlinger의 하위 수준 기능을 사용할 수 있도록 허용합니다."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"프레임 버퍼 읽기"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"앱이 프레임 버퍼의 내용을 읽을 수 있도록 허용합니다."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger에 액세스"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"앱이 InputFlinger의 하위 수준 기능을 사용하도록 합니다."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wi-Fi 디스플레이 설정"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"앱이 Wi-Fi 디스플레이를 설정하고 연결하도록 허용합니다."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wi-Fi 디스플레이 제어"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"앱이 음량이나 출력을 위해 사용하는 스피커 등 전체 오디오 설정을 변경할 수 있도록 허용합니다."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"오디오 녹음"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"앱이 마이크로 오디오를 녹음할 수 있도록 허용합니다. 이 권한을 사용하면 앱이 사용자의 확인 없이 언제든지 오디오를 녹음할 수 있습니다."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM 통신"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"앱이 SIM에 명령어를 전송할 수 있도록 허용합니다. 이 기능은 매우 위험합니다."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"사진과 동영상 찍기"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"앱이 카메라로 사진과 동영상을 찍을 수 있도록 허용합니다. 이 권한을 사용하면 앱이 언제든지 사용자의 확인 없이 카메라를 사용할 수 있습니다."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"카메라를 사용할 때 전송 표시 LED 사용 중지"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"앱이 기기의 휴대전화 기능을 관리할 수 있도록 허용합니다. 이 권한을 갖는 앱은 사용자에게 알리지 않고 네트워크를 전환하거나 무선 기능을 켜고 끄는 등의 작업을 수행할 수 있습니다."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"휴대전화 상태 및 ID 읽기"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"앱이 기기의 휴대전화 기능에 액세스할 수 있도록 허용합니다. 이 권한을 사용하면 앱이 전화번호 및 기기의 ID, 활성 통화인지 여부, 통화가 연결된 원격 번호 등을 확인할 수 있습니다."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"정확한 전화 상태 읽기"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"앱이 정확한 전화 상태에 액세스할 수 있도록 허용합니다. 이 권한을 부여하면 앱이 실제 통화 상태, 활성 통화 또는 백그라운드 상태인지 여부, 통화 실패, 정확한 데이터 연결 상태 및 데이터 연결 실패 등을 판단합니다."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"태블릿이 절전 모드로 전환되지 않도록 설정"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"휴대전화가 절전 모드로 전환되지 않도록 설정"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"앱이 태블릿의 절전 모드 전환을 막도록 허용합니다."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX 상태 변경"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"앱이 태블릿을 WiMAX 네트워크에 연결하거나 연결을 끊을 수 있도록 허용합니다."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"앱이 휴대전화를 WiMAX 네트워크에 연결하거나 연결을 끊을 수 있도록 허용합니다."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"네트워크 점수화"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"앱이 네트워크 순위를 정하고 태블릿에서 어떤 네트워크를 선호할지 영향을 주도록 허용합니다."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"앱이 네트워크 순위를 정하고 휴대전화에서 어떤 네트워크를 선호할지 영향을 주도록 허용합니다."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"블루투스 기기와 페어링"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"앱이 태블릿의 블루투스 설정을 확인하고 페어링된 기기에 연결하며 연결을 수락할 수 있도록 허용합니다."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"앱이 휴대전화의 블루투스 설정을 확인하고 페어링된 기기에 연결하며 연결을 수락할 수 있도록 허용합니다."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"앱이 다른 앱에서 게시한 알림을 비롯하여 알림을 검색하고 살펴보며 삭제할 수 있도록 허용합니다."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"알림 수신기 서비스 사용"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"권한을 가진 프로그램이 알림 수신기 서비스에 대한 최상위 인터페이스를 사용하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"조건 제공자 서비스 사용"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"권한을 가진 프로그램이 조건 제공자 서비스의 최상위 인터페이스를 사용하도록 합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"이동통신사에서 제공한 구성 앱 호출"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"권한을 가진 프로그램이 이동통신사에서 제공한 구성 앱을 호출하도록 합니다. 일반 앱에는 필요하지 않습니다."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"네트워크 상태에 대한 관측 보고 수신"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"애플리케이션이 네트워크 상태에 대한 관측 보고를 수신하도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"입력 기기 보정 변경"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"앱이 터치 스크린의 보정 매개변수를 수정할 수 있도록 허용합니다. 일반 앱에는 필요하지 않습니다."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM 인증서에 액세스"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"애플리케이션이 DRM 인증서를 프로비저닝하고 사용하도록 허용합니다. 일반 앱에서는 필요하지 않습니다."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"비밀번호 규칙 설정"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"화면 잠금해제 비밀번호에 허용되는 길이 및 문자 수를 제어합니다."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"화면 잠금해제 시도 모니터링"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"집"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"직장"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"기타"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"이 주소록을 표시할 수 있는 애플리케이션이 없습니다."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN 코드 입력"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK 및 새 PIN 코드 입력"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 코드"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"애플리케이션에서 키가드 보안 저장소에 액세스하도록 허용합니다."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"키가드 표시 및 숨기기 설정"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"애플리케이션에서 키가드를 제어하도록 허용합니다."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Trust 상태 변경사항 수신"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"애플리케이션이 Trust 상태에서의 변경사항을 수신할 수 있도록 허용합니다."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Trust Agent 서비스에 연결"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"애플리케이션이 Trust Agent 서비스에 바인딩할 수 있도록 허용합니다."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"업데이트 및 복구 시스템과 상호작용"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"애플리케이션이 복구 시스템 및 시스템 업데이트와 상호작용할 수 있도록 허용합니다."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"확대/축소하려면 두 번 터치하세요."</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"위젯을 추가할 수 없습니다."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"이동"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"배경화면"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"배경화면 변경"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"알림 수신기"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"조건 제공자"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN이 활성화됨"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN이 <xliff:g id="APP">%s</xliff:g>에 의해 활성화됨"</string>
     <string name="vpn_text" msgid="3011306607126450322">"네트워크를 관리하려면 터치하세요."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 키"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 키"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"앱 선택"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>을(를) 실행할 수 없습니다."</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"공유 대상:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>와(과) 공유"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"슬라이딩 핸들을 길게 터치하세요."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 아래로 슬라이드"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 왼쪽으로 슬라이드"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 오른쪽으로 슬라이드"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"잠금 해제"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"카메라"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"무음"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"사운드 켜기"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"검색"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"스와이프하여 잠급니다."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"비밀번호 키를 음성으로 들으려면 헤드셋을 연결하세요."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"점"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"시스템"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"블루투스 오디오"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"무선 디스플레이"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"완료"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"미디어 출력"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"기기에 연결"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"기기로 화면 전송"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"기기 검색 중…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"설정"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"연결 해제"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"검색 중..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"연결 중..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"사용 가능"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"<xliff:g id="ID">%1$d</xliff:g>번째 오버레이"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", 보안"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"무선 디스플레이가 연결되었습니다."</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"이 화면은 다른 기기에서 표시되고 있습니다."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"화면 전송 중"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"<xliff:g id="NAME">%1$s</xliff:g>에 연결 중"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"화면 전송 중"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"<xliff:g id="NAME">%1$s</xliff:g>에 연결됨"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"연결 해제"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"긴급 통화"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"패턴을 잊음"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM 카드 잠금해제 중..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 코드가 잘못되었습니다."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4~8자리 숫자로 된 PIN을 입력하세요."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 코드는 8자리 이상의 숫자여야 합니다."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK 코드는 8자리 숫자여야 합니다."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"올바른 PUK 코드를 다시 입력하세요. 입력을 반복해서 시도하면 SIM을 영구적으로 사용할 수 없게 됩니다."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 코드가 일치하지 않음"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"패턴 시도 횟수가 너무 많음"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g>초 후에 다시 시도하세요."</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"나중에 다시 시도"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"전체화면을 종료하려면 위에서 아래로 스와이프"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"전체화면을 종료하려면 위에서 아래로 스와이프하세요."</string>
+    <string name="done_label" msgid="2093726099505892398">"완료"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"시간 원형 슬라이더"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"분 원형 슬라이더"</string>
+    <string name="select_hours" msgid="6043079511766008245">"시간 선택"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"분 선택"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"월별 바둑판식 날짜 표시"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"년"</string>
+    <string name="select_day" msgid="7774759604701773332">"월/일 선택"</string>
+    <string name="select_year" msgid="7952052866994196170">"연도 선택"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g>이(가) 선택됨"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> 삭제됨"</string>
 </resources>
diff --git a/core/res/res/values-land/dimens.xml b/core/res/res/values-land/dimens.xml
index dc59f61..640ca1e 100644
--- a/core/res/res/values-land/dimens.xml
+++ b/core/res/res/values-land/dimens.xml
@@ -61,6 +61,10 @@
     Landscape's layout allows this to be smaller than for portrait. -->
     <dimen name="kg_squashed_layout_threshold">400dp</dimen>
 
+    <!-- New TimePicker dimensions. -->
+    <dimen name="timepicker_left_side_width">250dip</dimen>
+
     <!-- width of ImmersiveModeConfirmation (-1 for match_parent) -->
     <dimen name="immersive_mode_cling_width">380dp</dimen>
+
 </resources>
diff --git a/core/res/res/values-land/dimens_quantum.xml b/core/res/res/values-land/dimens_quantum.xml
new file mode 100644
index 0000000..7789219
--- /dev/null
+++ b/core/res/res/values-land/dimens_quantum.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<resources>
+
+    <!-- Default height of an action bar. -->
+    <dimen name="action_bar_default_height_quantum">48dp</dimen>
+    <!-- Default padding of an action bar. -->
+    <dimen name="action_bar_default_padding_quantum">0dp</dimen>
+
+</resources>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index 003b3f9..b31fbff 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;ບໍ່ມີຊື່&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"ພິມລະຫັດ PUK ທີ່ມີ 8 ໂຕເລກ ຫຼືຫຼາຍກວ່ານັ້ນ."</string>
     <string name="needPuk" msgid="919668385956251611">"ຊິມກາດຂອງທ່ານຖືກລັອກດ້ວຍລະຫັດ PUK. ໃຫ້ພິມລະຫັດ PUK ເພື່ອປົດລັອກມັນ."</string>
     <string name="needPuk2" msgid="4526033371987193070">"ພິມ PUK2 ເພື່ອປົດລັອກ SIM card."</string>
+    <string name="enablePin" msgid="209412020907207950">"ບໍ່ສຳເລັດ, ເປີດນໍາໃຊ້ການລັອກຂອງ SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະຖືກລັອກ."</item>
+    <item quantity="other" msgid="7530597808358774740">"ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະຖືກລັອກ."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ໝາຍເລກຜູ່ໂທເຂົ້າ"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"ຊິ້ງຂໍ້ມູນ"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"ມີການລຶບ <xliff:g id="CONTENT_TYPE">%s</xliff:g> ຫຼາຍເກີນໄປ."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"ພື້ນທີ່ຈັດເກັບຂໍ້ມູນໃນແທັບເລັດເຕັມ. ລຶບບາງໄຟລ໌ອອກເພື່ອເພີ່ມພື້ນທີ່ຫວ່າງ."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"ບ່ອນ​ຈັດ​ເກັບ​ຂໍ້​ມູນ​ໃນ​ໂມງ​ເຕັມ​ແລ້ວ. ໃຫ້​ລຶບ​ໄຟ​ລ໌​ບາງ​ອັນ​ທີ່ບໍ່​ໄດ້​ໃຊ້​ອອກ​ເພື່ອ​ເພີ່ມ​ເນື້ອ​ທີ່​ຫວ່າງ."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"ພື້ນທີ່ໃນໂທລະສັບເຕັມແລ້ວ. ກະລຸນາລຶບບາງໄຟລ໌ອອກເພື່ອເພີ່ມພື້ນທີ່ຫວ່າງ."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"ການນຳໃຊ້ເຄືອຂ່າຍອາດມີການກວດສອບຕິດຕາມ"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"ໂດຍບຸກຄົນທີສາມທີ່ບໍ່ຮູ້ຈັກ"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"ເປີດສຽງໂທເຂົ້າແລ້ວ"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"ກຳລັງປິດລະບົບລົງ..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"ແທັບເລັດຂອງທ່ານຈະຖືກປິດ."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"ໂມງ​ຂອງ​ທ່ານ​ຈະ​ຖືກ​ປິດ​ໄວ້."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"ໂທລະສັບຂອງທ່ານຈະຖືກປິດ."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"ທ່ານຕ້ອງການທີ່ຈະປິດບໍ່?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"ຣີບູດເຂົ້າ safe mode"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"ໂໝດໃນຍົນ"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"ເປີດໂໝດຢູ່ໃນຍົນແລ້ວ"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"ປິດໂໝດໃນຍົນແລ້ວ"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"​ການ​ຕັ້ງ​ຄ່າ"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string>
     <string name="android_system_label" msgid="6577375335728551336">"ລະບົບ Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"ຖອນທາງລັດ"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນລຶບທາງລັດໃນໜ້າຫຼັກໄດ້ ໂດຍບໍ່ຕ້ອງຮັບການຢືນຢັນຈາກຜູ່ໃຊ້."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"ປ່ຽນເສັ້ນທາງການໂທອອກ"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"ອະນຸຍາດໃຫ້ແອັບຯປະມວນຜົນສາຍທີ່ໂທອອກ ແລະປ່ຽນໝາຍເລກທີ່ຈະໂທອອກ. ແອັບຯທີ່ເປັນອັນຕະລາຍອາດກວດສອບ, ໂອນສາຍ ຫຼືຂັດຂວາງບໍ່ໃຫ້ໂທອອກໄດ້."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ເບິ່ງ​​ໝາຍ​ເລກເບີ​ໂທ ໃນ​ລະ​ຫວ່າງ​ການ​ໂທ​ອອກ ພ້ອມ​ທັງ​ໂຕ​ເລືອກ​ໃນ​ການ​ປ່ຽນ​ເສັ້ນ​ທາງ​ການ​ໂທ​ໄປ​ຫາ​ເບີ​ອື່ນ ຫຼື ລາຍ​ລະ​ອຽດກ່ຽວ​ກັບ​ເບີ​ໂທ​ລະ​ສັບ."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"ຮັບຂໍ້ຄວາມສັ້ນ (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"ອະນຸຍາດໃຫ້ແອັບຯຮັບ ແລະປະມວນຜົນຂໍ້ຄວາມ SMS. ນີ້ໝາຍຄວາມວ່າແອັບຯສາມາດຕິດຕາມ ຫຼືລຶບຂໍ້ຄວາມທີ່ສົ່ງເຂົ້າອຸປະກອນຂອງທ່ານ ໂດຍທີ່ບໍ່ສະແດງພວກມັນໃຫ້ທ່ານເຫັນ."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"ຮັບຂໍ້ຄວາມ (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"ອະນຸຍາດໃຫ້ແອັບຯດຶງຂໍ້ມູນເນື້ອຫາຂອງໜ້າຈໍທີ່ໃຊ້ຢູ່ໄດ້. ແອັບຯທີ່ເປັນອັນຕະລາຍອາດດຶງຂໍ້ມູນທັງໝົດໃນໜ້າຈໍ ແລະກວດສອບຂໍ້ຄວາມທັງໝົດໃນນັ້ນໄດ້ ຍົກເວັ້ນລະຫັດຜ່ານ."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ປິດການຊ່ວຍການເຂົ້າເຖິງຊົ່ວຄາວ"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນ ເປີດໃຊ້ການຊ່ວຍເຂົ້າເຖິງແບບຊົ່ວຄາວໃນອຸປະກອນ. ແອັບຯທີ່ເປັນອັນຕະລາຍ ອາດເປີດໃຊ້ການຊ່ວຍເຂົ້າເຖິງ ໂດຍບໍ່ໄດ້ຮັບການຍິນຍອມຈາກຜູ່ໃຊ້."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"ດຶງເອົາຂໍ້ມູນໜ້າຈໍ"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນ ດຶງເອົາຂໍ້ມູນກ່ຽວກັບໜ້າຈໍຈາກໂຕຈັດການໜ້າຈໍ. ແອັບຯທີ່ບໍ່ປອດໄພອາດດຶງເອົາຂໍ້ມູນທີ່ໃຊ້ສຳລັບພາຍໃນລະບົບໄດ້."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"​ດຶງ​ຂໍ້​ມູນ​ໂທ​ເຄນ​ໜ້າ​ຈໍ"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ດຶງ​ຂໍ້​ມູນ​ໂທ​ເຄນ​ຂອງ​ໜ້າ​ຈໍ​ໄດ້. ແອັບຯ​ທີ່​ເປັນ​ອັນ​ຕະ​ລາຍ​ອາດ​ດຳ​ເນີນ​ການ​ຕິດ​ຕໍ່​ທີ່ບໍ່​ໄດ້​ຮັບ​ອະ​ນຸ​ຍາດ​ກັບ​ໜ້າ​ຈໍ​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ເພື່ອ​ຮຽນ​ແບບ​ລະ​ບົບ."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"ດຶງ​ຂໍ້​ມູນ​ສະ​ຖິ​ຕິ​ເຟ​ຣມ"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"​ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ສາ​ມາດ​ສະ​ສົມ​ສະ​ຖິ​ຕິ​ເຟ​ຣມ​ໄດ້. ແອັບຯ​ທີ່​ເປັນ​ອັນ​ຕະ​ລາຍ​ອາດ​ສັງ​ເກດ​ສະ​ຖິ​ຕິ​ເຟ​ຣມ​ຂອງ​ໜ້າ​ຈໍ​ຕ່າງໆ​ຈາກ​ແອັບຯ​ອື່ນ​ໄດ້."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"ກັ່ນຕອງເຫດການ"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນ ລົງທະບຽນການກັ່ນຕອງຂາເຂົ້າ ທີ່ກັ່ນຕອງການສົ່ງຂໍ້ມູນເຫດການຜູ່ໃຊ້ທັງໝົດ ກ່ອນທີ່ພວກມັນຈະຖືກເຜີຍແຜ່. ແອັບຯທີ່ເປັນອັນຕະລາຍອາດຄວບຄຸມ UI ຂອງລະບົບໂດຍບໍ່ຕ້ອງໃຫ້ຜູ່ໃຊ້ຈັດການໄດ້."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ຂະຫຍາຍການສະແດງຜົນ"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນ ສາມາດຂະຫຍາຍເນື້ອຫາທີ່ສະແດງຜົນໄດ້. ແອັບພລິເຄຊັນທີ່ເປັນອັນຕະລາຍ ອາດປ່ຽນເນື້ອຫາທີ່ສະແດງໃນລັກສະນະ ທີ່ເຮັດໃຫ້ບໍ່ສາມາດນຳໃຊ້ອຸປະກອນໄດ້."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"ປິດລົງບາງສ່ວນ"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"ກຳນົດໃຫ້ໂຕຈັດການກິດຈະກຳຢູ່ໃນສະຖານະປິດລະບົບ ໂດຍບໍ່ໄດ້ປິດລະບົບຢ່າງສົມບູນ."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ຂັດຂວາງການສະລັບແອັບຯ"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"ອະນຸຍາດໃຫ້ແອັບຯ ກະຈາຍສັນຍານການແຈ້ງເຕືອນວ່າຂໍ້ຄວາມ SMS ໄດ້ຮັບແລ້ວ. ແອັບຯທີ່ເປັນອັນຕະລາຍອາດຈະໃຊ້ສິ່ງນີ້ໃນການປອມແປງຂໍ້ຄວາມ SMS ຂາເຂົ້າ."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ສົ່ງການກະຈາຍ WAP-PUSH ທີ່ໄດ້ຮັບ"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"ອະນຸຍາດໃຫ້ແອັບຯສົ່ງການແຈ້ງເຕືອນໃນເວລາທີ່ໄດ້ຮັບຂໍ້ມຄວາມ WAP PUSH. ແອັບຯທີ່ເປັນອັນຕະລາຍ ອາດໃຊ້ການກະທຳນີ້ເພື່ອປອມການໄດ້ຮັບຂໍ້ຄວາມ MMS ຫຼືລັກປ່ຽນເນື້ອຫາຂອງໜ້າເວັບຕ່າງໆ ດ້ວຍສິ່ງອັນຕະລາຍທັງຫຼາຍຢ່າງງຽບໆ."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"​ສົ່ງ​ການ​ກະ​ຈາຍ​ຄະແນນ​ເຄືອ​ຂ່າຍ"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"​ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ກະ​ຈາຍ​ການ​ແຈ້ງ​ເຕືອນທີ່​ເຄືອ​ຂ່າຍຕ່າງໆ​ຈຳ​ເປັນ​ຖືກໃຊ້​ນັບ​​ຄະ​ແນນ. ບໍ່​ມີຄວາມ​ຈຳ​ເປັນ​ໃນ​ແອັບຯ​ທົ່ວ​ໄປ."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ຈຳກັດຈຳນວນຂອງໂປຣເຊສທີ່ເຮັດວຽກຢູ່"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"ອະນຸຍາດໃຫ້ແອັບຯຄວບຄຸມຈຳນວນສູງສຸດ ຂອງໂປຣເຊສທີ່ຈະເຮັດວຽກ. ບໍ່ຄວນຖືກໃຊ້ກັບແອັບພລິເຄຊັນທົ່ວໄປ."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"ບັງຄັບໃຫ້ແອັບຯທີ່ເຮັດວຽກຢູ່ພື້ນຫຼັງປິດໂຕລົງ"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"ອະນຸຍາດໃຫ້ເຈົ້າຂອງເຊື່ອມໂຍງກັບສ່ວນຕິດຕໍ່ລະດັບເທິງສຸດ ຂອງບໍລິການ VPN. ແອັບຯທົ່ວໄປບໍ່ຄວນຈຳເປັນຕ້ອງໃຊ້."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ເຊື່ອມໂຍງກັບພາບພື້ນຫຼັງ"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"ອະນຸຍາດໃຫ້ຜູ່ໃຊ້ເຊື່ອມໂຍງກັບສ່ວນຕິດຕໍ່ລະດັບສູງສຸດ ຂອງພາບພື້ນຫຼັງໃດນຶ່ງ. ແອັບຯທຳມະດາບໍ່ຄວນຈຳເປັນຕ້ອງໃຊ້."</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ຜູກກັນເພື່ອສະແດງຜົນທາງໄກ."</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"ອະນຸຍາດໃຫ້ຜູ່ຖືຜູກກັບສ່ວນຕິດຕໍ່ລະດັບສູງສຸດ ຂອງການສະແດງຜົນທາງໄກ. ບໍ່ຈຳເປັນສຳລັບແອັບຯທົ່ວໄປ."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"ເຊື່ອມໂຍງໄປຫາບໍລິການວິດເຈັດ"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"ອະນຸຍາດໃຫ້ຜູ່ຖືຜູກກັບອິນເຕີເຟດລະດັບສູງສຸດ ຂອງບໍລິການວິເຈັດ. ບໍ່ຈຳເປັນສຳລັບແອັບຯທົ່ວໄປ."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"ເຊື່ອມ​ໂຍງ​ກັບ​ການ​ບໍ​ລິ​ການ​ຂອງ​ຜູ່​ໃຫ້​ບໍ​ລິ​ການ​ເສັ້ນ​ທາງ"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"ອະ​ນຸ​ຍາດ​ໃຫ້​ເຈົ້າ​ຂອງ​ສາ​ມາດ​ເຊື່ອມ​ໂຍງກັບ​ທຸກໆ​ຜູ່​ໃຫ້​ບໍ​ລິ​ການເສັ້ນ​ທາງ​ທີ່​ລົງ​ທະ​ບຽນ. ບໍ່​ຄວນ​ຈະ​ໄດ້​ໃຊ້​ໃນ​ແອັບຯ​ທົ່ວ​ໄປ."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ຕິດຕໍ່ກັບຜູ່ເບິ່ງແຍງອຸປະກອນ"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"ອະນຸຍາດໃຫ້ເຈົ້າຂອງສົ່ງເຈດຕະນາຫາຜູ່ເບິ່ງແຍງລະບົບອຸປະກອນ. ແອັບຯທົ່ວໄປບໍ່ຄວນຈຳເປັນຕ້ອງໃຊ້."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"ຜູກ​ກັບ​ການ​ປ້ອນ​ຂໍ້​ມູນ​ເຂົ້າ​ໂທ​ລະ​ທັດ"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"​ອະ​ນຸ​ຍາດ​ໃຫ້​ຜູ່​ຖື​ຜູກ​ຕິດ​ກັບ​ສ່ວ​ນ​ຕິດ​ຕໍ່​ລະ​ດັບ​ສູງ​ສຸດ​ຂອງ​ການ​ປ້ອນ​ຂໍ້​ມູນ​ເຂົ້າ​ໂທ​ລະ​ທັດ. ແອັບຯ​ທົ່ວ​ໄປ​ບໍ່​ຄວນ​ຈຳ​ເປັນ​ຕ້ອງ​ໃຊ້."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"ເພີ່ມ ຫຼືລຶບຜູ່ເບິ່ງແຍງລະບົບອຸປະກອນ"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"ອະນຸຍາດໃຫ້ເຈົ້າຂອງສາມາດລຶບ ຫຼືລຶບຂໍ້ມູນອຸປະກອນທີ່ນຳໃຊ້ໄດ້. ແອັບຯທົ່ວໄປບໍ່ຈຳເປັນຕ້ອງໃຊ້."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"ປ່ຽນລວງຂອງໜ້າຈໍ"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"ອະນຸຍາດໃຫ້ແອັບຯໃຊ້ທຸກຕົວຖອດລະຫັດສື່ທີ່ຕິດຕັ້ງໄວ້ແລ້ວ ເພື່ອການຖອດລະຫັດການຫຼິ້ນໄຟລ໌ຕ່າງໆ."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"ຈັດການໜັງສືຮັບຮອງທີ່ເຊື່ອຖືໄດ້."</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"ອະ​ນຸ​ຍາດ​ໃຫ້ແອັບຯ ຕິດຕັ້ງ ແລະ ຖອນການຕິດຕັ້ງໃບຢັ້ງຢືນ CA ທີ່ເປັນໃບຮັບຮອງທີ່ເຊື່ອຖືໄດ້."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"ເປີດ​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ໃນ​ເວ​ລາ​ທີ່​ບໍ່​ເຮັດ​ວຽກ"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"ນີ້​ຈະ​ເປັນ​ການອ​ະ​ນຸ​ຍາດ​​ໃຫ້​ລະ​ບົບ Android ສາ​ມາດ​ເປີດ​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ໃນ​ພື້ນຫຼັງໄດ້​ໃນ​ຂະ​ນະ​ທີ່​ອຸ​ປະ​ກອນບໍ່​​ຖືກ​ນຳ​ໃຊ້."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"ອ່ານ/ຂຽນ ໃສ່ຊັບພະຍາກອນທີ່ເປັນຂອງກຸ່ມວິໄຈ"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນອ່ານ ແລະຂຽນ ໃສ່ທຸກຊັບພະຍາກອນທີ່ເປັນຂອງກຸ່ມວິນິໄສ; ຕົວຢ່າງ: ໄຟລ໌ໃນ /dev. ສິ່ງນີ້ອາດສົ່ງຜົນກະທົບຕໍ່ຄວາມສະຖຽນ ແລະຄວາມປອດໄພຂອງລະບົບ. ສິ່ງນີ້ຄວນໃຊ້ສຳຫຼັບການວິເຄາະບັນຫາຈຳເພາະ ຂອງບາງຮາດແວໂດຍຜູ່ຜະລິດ ຫຼືຜູ່ປະຕິບັດການເທົ່ານັ້ນ."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"ເປີດ ຫຼືປິດນຳໃຊ້ອົງປະກອບຂອງແອັບຯ"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"ອະນຸຍາດໃຫ້ແອັບຯ ອ່ານຂໍ້ມູນໂປໄຟລ໌ສ່ວນໂຕໃນອຸປະກອນຂອງທ່ານເຊັ່ນ: ຊື່ຂອງທ່ານ ແລະຂໍ້ມູນການຕິດຕໍ່ຂອງທ່ານ. ນີ້ໝາຍຄວາມວ່າແອັບຯຈະສາມາດລະບຸໂຕຕົນຂອງທ່ານ ແລະສົ່ງຂໍ້ມູນໂປຣໄຟລ໌ຂອງທ່ານໃຫ້ຜູ່ອື່ນໄດ້."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"ແກ້ໄຂບັດລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານເອງ"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"ອະນຸຍາດໃຫ້ແອັບຯ ປ່ຽນແປງ ຫຼືເພີ່ມຂໍ້ມູນໃສ່ໂປຣໄຟລ໌ສ່ວນບຸກຄົນທີ່ເກັບໄວ້ໃນອຸປະກອນຂອງທ່ານ, ເຊັ່ນ: ຊື່ ແລະຂໍ້ມູນຕິດຕໍ່ທ່ານ. ນີ້ໝາຍຄວາມວ່າແອັບຯສາມາດບົ່ງບອກໂຕທ່ານ ແລະອາດສົ່ງຂໍ້ມູນໂປຣໄຟລ໌ຂອງທ່ານໃຫ້ຜູ່ອື່ນໄດ້."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"ເຊັນ​ເຊີ​​ຮ່າງ​ກາຍ (ເຊັ່ນ: ​ຕິດ​ຕາມ​ອັດ​ຕາ​ການ​ເຕັ້ນ​ຂອງ​ຫົວ​ໃຈ)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ເຂົ້າ​ເຖິງ​ຂໍ້​ມູນ​ຈາກ​ເຊັນ​ເຊີ​ທີ່​ທ່ານ​ໃຊ້​ເພື່ອ​ວັດ​ແທກ​ສິ່ງ​ທີ່​ເກີດ​ຂຶ້ນ​ໃນ​ຮ່າງ​ກາຍ​ຂອງ​ທ່ານ ເຊັ່ນ: ອັດ​ຕາ​ການ​ເຕັ້ນ​ຂອງ​ຫົວ​ໃຈ."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ອ່ານການອັບເດດສັງຄົມອອນລາຍຂອງທ່ານ"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"ອະນຸຍາດໃຫ້ແອັບຯ ເຂົ້າເຖິງ ແລະຊິ້ງຂໍ້ມູນຂ່າວສານສັງຄົມຈາກທ່ານ ແລະໝູ່ຂອງທ່ານ. ຄວນລະມັດລະວັງໃນເວລາທີ່ແລກປ່ຽນຂໍ້ມູນ -- ນີ້ຈະເປັນການອະນຸຍາດໃຫ້ແອັບຯ ອ່ານການສື່ສານລະຫວ່າງທ່ານ ກັບໝູ່ຂອງທ່ານເທິງເຄືອຂ່າຍສັງຄົມ ໂດຍບໍ່ຄຳນຶງເຖິງຄວາມລັບ. ໝາຍເຫດ: ການກຳນົດສິດນີ້ອາດບໍ່ໄດ້ບັງຄັບໃຊ້ໃນທຸກເຄືອຂ່າຍສັງຄົມ."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ຂຽນໃສ່ເຄືອຂ່າຍສັງຄົມຂອງທ່ານ"</string>
@@ -477,6 +523,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"ອະນຸຍາດໃຫ້ແອັບຯນຳໃຊ້ຄວາມສາມາດລະດັບຕ່ຳ SurfaceFlinger"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"ອ່ານເຟຣມບັບເຟີ"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"ອະນຸຍາດໃຫ້ແອັບຯອ່ານເນື້ອຫາຂອງເຟຣມບັບເຟີ."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"ເຂົ້າເຖິງ InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"ອະນຸຍາດໃຫ້ແອັບຯນຳໃຊ້ຄວາມສາມາດ InputFlinger ລະດັບຕ່ຳ"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"ປັບຄ່າການສະແດງຜົນ WiFi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"ອະນຸຍາດໃຫ້ແອັບຯຕັ້ງຄ່າ ແລະເຊື່ອມຕໍ່ຈໍສະແດງຜົນ WiFi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"ຄວບຄຸມການສະແດງ WiFi"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ອະນຸຍາດໃຫ້ແອັບຯແກ້ໄຂການຕັ້ງຄ່າສຽງສ່ວນກາງ ເຊັ່ນ: ລະດັບສຽງ ແລະລຳໂພງໃດທີ່ຖືກໃຊ້ສົ່ງສຽງອອກ."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ບັນທຶກສຽງ"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"ອະນຸຍາດໃຫ້ແອັບຯບັນທຶກສຽງດ້ວຍໄມໂຄຣໂຟນໄດ້. ການອະນຸຍາດນີ້ຈະເຮັດໃຫ້ແອັບຯ ສາມາດບັນທຶກສຽງໄດ້ຕະຫລອດເວລາ ໂດຍບໍ່ຕ້ອງຖ້າການຢືນຢັນຈາກທ່ານ."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"ການສື່ສານຂອງ SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"ອະນຸຍາດໃຫ້ແອັບຯສົ່ງຄຳສັ່ງຫາ SIM. ສິ່ງນີ້ອັນຕະລາຍຫຼາຍ."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ຖ່າຍຮູບ ແລະວິດີໂອ"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"ອະນຸຍາດໃຫ້ແອັບຯຖ່າຍຮູບ ແລະວິດີໂອດ້ວຍກ້ອງຖ່າຍຮູບ. ການອະນຸຍາດນີ້ຈະອານຸຍາດໃຫ້ແອັບຯ ສາມາດໃຊ້ກ້ອງຖ່າຍຮູບໄດ້ຕະຫລອດເວລາ ໂດຍບໍ່ຕ້ອງຖ້າການຢືນຢັນຈາກທ່ານ."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"ປິດໄຟສັນຍານ LED ເມື່ອນຳໃຊ້ກ້ອງ"</string>
@@ -550,6 +600,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"ອະນຸຍາດໃຫ້ແອັບຯຄວບຄຸມຄວາມສາມາດຂອງໂທລະສັບໃນອຸປະກອນ. ແອັບຯທີ່ມີການອະນຸຍາດນີ້ຈະສາມາດສະລັບເຄືອຂ່າຍ, ເປີດ ຫຼືປິດສັນຍານວິທະຍຸ ແລະຄວາມສາມາດອື່ນທີ່ຄ້າຍກັນ ໂດຍບໍ່ມີການແຈ້ງເຕືອນທ່ານ."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ອ່ານສະຖານະ ແລະຂໍ້ມູນລະບຸໂຕຕົນຂອງໂທລະສັບ"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"ອະນຸຍາດໃຫ້ແອັບຯ ເຂົ້າເຖິງຄວາມສາມາດການໂທລະສັບຂອງອຸປະກອນ. ການກຳນົດສິດນີ້ເຮັດໃຫ້ແອັບຯສາມາດກວດສອບເບີໂທລະສັບ ແລະ ID ຂອງອຸປະກອນ, ບໍ່ວ່າການໂທຈະຍັງດຳເນີນຢູ່ ແລະເບີປາຍທາງເຊື່ອມຕໍ່ຢູ່ຫຼືບໍ່ກໍຕາມ."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"ອ່ານ​ຄ່າ​ສະ​ຖາ​ນະ​ລະ​ອຽດ​ຂອງ​ໂທ​ລະ​ສັບ"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ເຂົ້າ​ເຖິງ​ສະ​ຖາ​ນະ​ໂດຍ​ລະ​ອຽດ​ຂອງ​ໂທ​ລະ​ສັບ. ການ​ອະ​ນຸ​ຍາດ​ນີ້​ຈະ​ຍິນຍອມ​ໃຫ້​ແອັບຯ​ກວດ​ສອບ​ສະ​ຖານ​ະ​ການ​ໂທ​ແທ້ໆ ວ່າ​ກຳ​ລັງ​ດຳ​ເນີນ​ຢູ່ ຫຼື​ຢູ່​ໃນ​ແບັກ​ກ​ຣາວ, ຄວາມລົ້ມ​ເຫລວ​ຂອງ​ການ​ໂທ, ສະ​ຖາ​ນະ​ການ​ເຊື່ອມ​ຕໍ່​ຂໍ້​ມູນ​ແບບ​ລະ​ອຽດ ແລະ​ຄວາມ​ລົ້ມ​ເຫລວ​ຂອງ​ການ​ເຊື່ອມ​ຕໍ່​ຂໍ້​ມູນ."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ຂັດຂວາງບໍ່ໃຫ້ປິດໜ້າຈໍແທັບເລັດ"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ຂັດຂວາງບໍ່ໃຫ້ໂທລະສັບປິດໜ້າຈໍ"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ອະນຸຍາດໃຫ້ແອັບຯ ປ້ອງກັນບໍ່ໃຫ້ປິດໜ້າຈໍແທັບເລັດ."</string>
@@ -617,6 +669,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"ປ່ຽນສະຖານະ WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"ອະນຸຍາດໃຫ້ແອັບຯເຊື່ອມຕໍ່ ແລະຕັດການເຊື່ອມຕໍ່ແທັບເລັດຈາກເຄືອຂ່າຍ WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"ອະນຸຍາດໃຫ້ແອັບຯເຊື່ອມຕໍ່ ແລະຕັດການເຊື່ອມຕໍ່ຂອງໂທລະສັບຈາກເຄືອຂ່າຍ WiMax ໄດ້."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ຄະແນນ​ເຄືອ​ຂ່າຍ"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ຈັດ​ລຳ​ດັບ​ເຄືອ​ຂ່າຍ ແລະ ຊ່ວຍ​ຕັດ​ສິນ​ໃຈ​ວ່າ​ເຄືອ​ຂ່າຍ​ໃດ​ທີ່​​ແທັບ​ເລັດ​ຄວນ​ນຳ​ໃຊ້."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ຈັດ​ລຳ​ດັບ​ເຄືອ​ຂ່າຍ ແລະ ຊ່ວຍ​ຕັດ​ສິນ​ໃຈ​ວ່າ​ເຄືອ​ຂ່າຍ​ໃດ​ທີ່​ໂທ​ລະ​ສັບ​ຄວນ​ນຳ​ໃຊ້."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"ຈັບຄູ່ກັບອຸປະກອນ Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ອະນຸຍາດໃຫ້ແອັບຯເບິ່ງການຕັ້ງຄ່າຂອງ Bluetooth ໃນແທັບເລັດ ຕະຫຼອດຈົນເຊື່ອມຕໍ່ ແລະຍອມຮັບການເຊື່ອມຕໍ່ກັບອຸປະກອນທີ່ຈັບຄູ່ກັນແລ້ວ."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"ອະນຸຍາດໃຫ້ແອັບຯເບິ່ງການຕັ້ງຄ່າຂອງ Bluetooth ໃນໂທລະສັບ, ຮວມທັງໃຫ້ສ້າງ ແລະຮັບການເຊື່ອມຕໍ່ຈາກອຸປະກອນທີ່ຈັບຄູ່ກັນ."</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"ອະນຸຍາດໃຫ້ແອັບຯດຶງຂໍ້ມູນ, ກວດສອບ ແລະລຶບລ້າງການແຈ້ງເຕືອນ ຮວມທັງພວກທີ່ໂພສໂດຍແອັບຯອື່ນໆນຳ."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ເຊື່ອມໂຍງກັບບໍລິການໂຕຟັງການແຈ້ງເຕືອນ"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"ອະນຸຍາດໃຫ້ເຈົ້າຂອງເຊື່ອມໂຍງສ່ວນຕິດຕໍ່ລະດັບເທິງສຸດ ຂອງຜູ່ຟັງບໍລິການການແຈ້ງເຕືອນ. ບໍ່ຈຳເປັນສຳລັບແອັບຯທົ່ວໄປ."</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"ຮ້ອງຂໍແອັບຯປັບຄ່າທີ່ສະໜອງໂດຍຜູ່ໃຫ້ບໍລິການ"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"ອະ​ນຸ​ຍາດ​ໃຫ້​ເຈົ້າຂອງຮ້ອງຂໍແອັບຯປັບຄ່າທີ່ສະໜອງໂດຍຜູ່ໃຫ້ບໍລິການ. ບໍ່ໜ້າຈະຕ້ອງການສຳລັບແອັບຯທົ່ວໄປ."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ຕິດຕາມເພື່ອສັງເກດສະພາບຂອງເຄືອຂ່າຍ"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັ່ນຕິດຕາມເພື່ອສັງເກດສະພາບຂອງເຄືອຂ່າຍ. ປົກກະຕິແລ້ວແອັບຯທຳມະດາຈະບໍ່ຕ້ອງການໃຊ້."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"ປ່ຽນ​ການ​ວັດ​ແທ້​ອຸ​ປະ​ກອນ​ປ້ອນ​ຂໍ້​ມູນ"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບຯ​ແກ້​ໄຂ​ຄ່າ​ການວັດ​ແທ້​ໜ້າ​ຈ​ໍ​ສຳ​ຜັດ. ​ແອັບຯ​ທຳ​ມະ​ດາບໍ່​ຄວນ​ໃຊ້."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"ເຂົ້າ​ເຖິງ​ໃບຮັບຮອງ DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"ອະນຸຍາດ​ໃຫ້​ແອັບພລິເຄຊັນ​ຈັດຫາ ແລະ​ນຳໃຊ້​ໃບຮັບຮອງ DRM. ແອັບຯ​ທຳມະດາ​ບໍ່​ຄວນ​ຕ້ອງ​ການ​ໃຊ້."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"ຕັ້ງຄ່າກົດຂອງລະຫັດຜ່ານ"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"ຄວບຄຸມຄວາມຍາວຂອງໂຕອັກສອນທີ່ສາມາດໃຊ້ກັບລະຫັດປົດລັອກໜ້າຈໍ"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"ຕິດຕາມການພະຍາຍາມປົດລັອກໜ້າຈໍ"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"ເຮືອນ"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"ບ່ອນເຮັດວຽກ"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"ອື່ນໆ"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"ບໍ່ພົບແອັບຯທີ່​ຕິດ​ຕໍ່​ນີ້​."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"ພິມລະຫັດ PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"ພິມລະຫັດ PUK ແລະ​ລະ​ຫັດ PIN ອັນໃໝ່"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"ລະ​ຫັດ PUK"</string>
@@ -1114,7 +1178,7 @@
     <string name="loading" msgid="7933681260296021180">"ກຳລັງໂຫລດ..."</string>
     <string name="capital_on" msgid="1544682755514494298">"ເປີດ"</string>
     <string name="capital_off" msgid="6815870386972805832">"ປິດ"</string>
-    <string name="whichApplication" msgid="4533185947064773386">"ເຮັດວຽກໃຫ້ສຳເລັດໂດຍໃຊ້"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"ດຳເນີນການໂດຍໃຊ້"</string>
     <string name="whichHomeApplication" msgid="4616420172727326782">"ເລືອກແອັບຯ Home"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"ໃຊ້ໂດຍຄ່າເລີ່ມຕົນສຳລັບການເຮັດວຽກນີ້."</string>
     <string name="clearDefaultHintMsg" msgid="3252584689512077257">"ລຶບລ້າງຄ່າເລີ່ມຕົ້ນ ໃນ ການຕັ້ງຄ່າລະບົບ &gt; ແອັບຯ &gt; ດາວໂຫລດແລ້ວ."</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນ ເຂົ້າເຖິງບ່ອນຈັດເກັບຂໍ້ມູນຄວາມປອດໄພດ້ວຍຄີກາດ."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"ຄວບຄຸມການສະແດງ ແລະການເຊື່ອງໂຕລັອກປຸ່ມກົດ"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນສາມາດຄວບຄຸມຄີກາດໄດ້."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"​ຕິດ​ຕາມ​ການ​ປ່ຽນ​ແປງ​ສະ​ຖາ​ນະ​ການ​ເຊື່ອ​ຖືກ."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ພ​ລິ​ເຄ​ຊັນ​ຕິດ​ຕາມ​​ການ​ປ່ຽນ​ແປງ​ໃນ​ສະ​ຖາ​ນະ​ການ​ເຊື່ອ​ຖື."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"​ເຊື່ອມ​ໂຍງ​ຫາ​ບໍ​ລິ​ການ​ຕົວ​ແທນ​ການ​ເຊື່ອ​ຖື"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"​ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ພ​ລິ​ເຄ​ຊັນເຊື່ອມ​ໂຍງ​ກັບ​ບໍ​ລິ​ການ​ຕົວ​ແທນ​ທີ່​ເຊື່ອ​ຖື​ໄດ້."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"ຕິດຕໍ່ກັບລະບົບອັບເດດ ແລະລະບົບກູ້ຂໍ້ມູນ."</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"ອະນຸຍາດໃຫ້ແອັບພລິເຄຊັນຕິດຕໍ່ກັບລະບົບກູ້ຂໍ້ມູນ ແລະການອັບເດດລະບົບ."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"ແຕະສອງເທື່ອສຳລັບການຄວບຄຸມການຊູມ"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ບໍ່ສາມາດເພີ່ມວິດເຈັດໄດ້."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"ໄປ"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"ພາບພື້ນຫຼັງ"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"ປ່ຽນພາບພື້ນຫຼັງ"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"ໂຕຟັງການແຈ້ງເຕືອນ"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"ເປີດນຳໃຊ້ VPN ແລ້ວ"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"ເປີດໃຊ້ VPN ໂດຍ <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"ແຕະເພື່ອຈັດການເຄືອຂ່າຍ."</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"ເລືອກແອັບຯ"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"ບໍ່​ສາ​ມາດ​ເປີດ <xliff:g id="APPLICATION_NAME">%s</xliff:g> ໄດ້"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"ແບ່ງປັນກັບ"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"ແບ່ງປັນໃຫ້ <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"ເລື່ອນບ່ອນຖື ແລ້ວແຕະຄ້າງໄວ້."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"ເລື່ອນຂຶ້ນເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"ເລື່ອນລົງເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"ເລື່ອນໄປທາງຊ້າຍເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"ເລື່ອນໄປທາງຂວາເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"ປົດລັອກ"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"ກ້ອງ"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"ປິດສຽງ"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"ເປີດສຽງ"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"ຊອກຫາ"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"ປັດເພື່ອປົດລັອກ."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"ສຽບສາຍຫູຟັງເພື່ອຟັງລະຫັດຜ່ານ."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"ຈໍ້າເມັດ."</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"ລະບົບ"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ສຽງ Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"ການສະແດງຜົນໄຮ້ສາຍ"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"ແລ້ວໆ"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"ມີເດຍເອົ້າພຸດ"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"ເຊື່ອມຕໍ່ຫາອຸປະກອນ"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"ສົ່ງພາບໜ້າຈໍໄປຫາອຸປະກອນ"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"ກຳລັງຊອກຫາອຸປະກອນ..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"ການຕັ້ງຄ່າ"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"ຕັດການເຊື່ອມຕໍ່"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"ກຳລັງສະແກນ..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"ກຳລັງເຊື່ອມຕໍ່..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"ສາມາດໃຊ້ໄດ້"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"ການວາງຊ້ອນ #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", ປອດໄພ"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"ເຊື່ອມຕໍ່ການສະແດງຜົນໄຮ້ສາຍແລ້ວ"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"ຈໍນີ້ກຳລັງສະແດງຢູ່ໃນອຸປະກອນອື່ນ"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"ກຳລັງສົ່ງພາບໜ້າຈໍ"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"ກຳລັງເຊື່ອມຕໍ່ຫາ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"ການສົ່ງພາບໜ້າຈໍ"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"ເຊື່ອມຕໍ່ກັບ <xliff:g id="NAME">%1$s</xliff:g> ແລ້ວ"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"ຢຸດການເຊື່ອມຕໍ່"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"ການໂທສຸກເສີນ"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ລືມຮູບແບບປົດລັອກ?"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"ປົດລັອກ SIM card..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"ລະຫັດ PIN ບໍ່ຖືກຕ້ອງ."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ພິມລະຫັດ PIN ຄວາມຍາວ 4 ເຖິງ 8 ໂຕເລກ."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"ລະຫັດ PUK ຄວນມີຢ່າງໜ້ອຍ 8 ໂຕເລກ."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"ລະຫັດ PUK ຄວນມີ 8 ໂຕເລກ"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"ປ້ອນລະຫັດ PUK ທີ່ຖືກຕ້ອງຄືນໃໝ່. ການພະຍາຍາມໃສ່ຫຼາຍເທື່ອຈະເຮັດໃຫ້ຊິມກາດໃຊ້ບໍ່ໄດ້ຖາວອນ."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"ລະຫັດ PIN ບໍ່ກົງກັນ"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ແຕ້ມຮູບແບບປົດລັອກຫຼາຍເກີນໄປ"</string>
@@ -1650,4 +1720,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"ລອງໃໝ່ອີກຄັ້ງໃນພາຍຫລັງ."</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"ປັດລົງມາຈາກທາງເທິງເພື່ອອອກຈາກໂໝດເຕັມໜ້າຈໍ."</string>
+    <string name="done_label" msgid="2093726099505892398">"ແລ້ວໆ"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"ໂຕໝຸນປັບຊົ່ວໂມງ"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"ໂຕໝຸນປັບນາທີ"</string>
+    <string name="select_hours" msgid="6043079511766008245">"ເລືອກ​ຊົ່ວ​ໂມງ"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"ເລືອກນາ​ທີ"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"ຕາຕາລາງວັນທີເດືອນປີ"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"ລາຍການປີ"</string>
+    <string name="select_day" msgid="7774759604701773332">"ເລືອກເດືອນ ແລະ ວັນ"</string>
+    <string name="select_year" msgid="7952052866994196170">"ເລືອກ​ປີ"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> ຖືກເລືອກແລ້ວ"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> ຖືກລຶບແລ້ວ"</string>
 </resources>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index 9fa41c9..62b6c7a 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Be pavadinimo&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Įveskite 8 skaitmenų ar ilgesnį PUK kodą."</string>
     <string name="needPuk" msgid="919668385956251611">"Jūsų SIM kortelė yra užrakinta PUK kodu. Jei norite ją atrakinti, įveskite PUK kodą."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Įveskite PUK2 kodą, kad panaikintumėte SIM kortelės blokavimą."</string>
+    <string name="enablePin" msgid="209412020907207950">"Nepavyko. Įgalinti SIM / RUIM užraktą."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui SIM kortelė bus užrakinta."</item>
+    <item quantity="other" msgid="7530597808358774740">"Liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui SIM kortelė bus užrakinta."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Įeinančio skambintojo ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinchronizuoti"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Per daug <xliff:g id="CONTENT_TYPE">%s</xliff:g> trynimo."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Planšetinio kompiuterio atmintis pilna. Kad atlaisvintumėte vietos, ištrinkite kelis failus."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Laikrodžio saugykla pilna. Ištrinkite kelis failus, kad atlaisvintumėte vietos."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Telefono atmintis pilna. Ištrinkite kai kuriuos failus, kad atlaisvintumėte vietos."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Tinklas gali būti stebimas"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Nežinoma trečioji šalis"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Skambutis įjungtas"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Išsijungia..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Planšetinio kompiuterio veikimas bus sustabdytas."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Laikrodis išsijungs."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefonas bus išjungtas."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Ar norite išjungti?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Iš naujo įkelti operacinę sistemą saugos režimu"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lėktuvo režimas"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"ĮJUNGTAS lėktuvo režimas"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"lėktuvo režimas IŠJUNGTAS"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Nustatymai"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Saugos režimas"</string>
     <string name="android_system_label" msgid="6577375335728551336">"„Android“ sistema"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"pašalinti sparčiuosius klavišus"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Programai leidžiama pašalinti sparčiuosius klavišus iš pagrindinio ekrano be naudotojo įsikišimo."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"peradresuoti išsiunčiamuosius skambučius"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Leidžiama programai atlikti išsiunčiamuosius skambučius ir keisti renkamą numerį. Šis leidimas suteikia teisę programai stebėti, peradresuoti ar neleisti išsiunčiamųjų skambučių."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Leidžiama programai peržiūrėti renkamą numerį išsiunčiamojo skambučio metu suteikiant galimybę peradresuoti skambutį kitu numeriu arba visiškai nutraukti skambutį."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"gauti teksto pranešimus (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Leidžiama programai gauti ir apdoroti SMS pranešimus. Tai reiškia, kad programa gali stebėti ir ištrinti į jūsų įrenginį siunčiamus pranešimus jums jų neparodžiusi."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"gauti teksto pranešimus (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Leidžiama programai nuskaityti aktyvaus lango turinį. Kenkėjiškos programos gali bandyti išgauti viso lango turinį ir tirti visą jo tekstą, išskyrus slaptažodžius."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"laikinai įgalinti pritaikymą neįgaliesiems"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Leidžiama programai laikinai įgalinti pritaikymą neįgaliesiems įrenginyje. Kenkėjiškos programos pritaikymą neįgaliesiems gali įgalinti be naudotojo sutikimo."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"gauti lango informaciją"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Leidžiama programai iš langų tvarkytuvės gauti informaciją apie langus. Kenkėjiškos programos gali gauti informaciją, kuri skirta naudoti sistemos viduje."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"gauti lango prieigos raktą"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Programai leidžiama gauti lango prieigos raktą. Kenkėjiškos programos gali vykdyti neteisėtą sąveiką su programos langu mėgdžiodamos sistemą."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"gauti kadrų statistinius duomenis"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Programai leidžiama rinkti kadrų statistinius duomenis. Kenkėjiškos programos gali stebėti kadrų statistinius duomenis iš kitų programų langų."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrų įvykiai"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Leidžiama programai registruoti įvesties filtrą, kuriuo filtruojamas visų naudotojo įvykių srautas prieš juos išsiunčiant. Kenkėjiška programa gali kontroliuoti sistemos naudotojo sąsają be naudotojo įsikišimo."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"didinti pateiktį"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Leidžiama programai didinti pateikties turinį. Kenkėjiškos programos gali pakeisti pateikties turinį taip, kad nebūtų galima naudoti įrenginio."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"dalinis išjungimas"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Veiklos tvarkyklę perjungia į išsijungimo būseną. Neišjungia visiškai."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"neleisti perjungti programų"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Leidžiama programai pateikti pranešimą, kad buvo gautas SMS pranešimas. Kenkėjiškos programos gali tai naudoti, kad klastotų gaunamuosius SMS pranešimus."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"siųsti „WAP-PUSH-received“ perdavimą"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Leidžiama programai pateikti pranešimą, kai gaunamas WAP PUSH pranešimas. Kenkėjiškos programos gali tai naudoti, kad klastotų MMS pranešimo gavimą ar kad nepastebimai pakeistų bet kurio tinklalapio turinį kenkėjiškais variantais."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"siųsti tinklų transliavimo įvertinimą"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Programai leidžiama transliuoti pranešimą, kad reikia įvertinti tinklus. Niekada nereikia įprastoms programoms."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"riboti vykdomų procesų skaičių"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Leidžiama programai valdyti didžiausią vykdomų procesų skaičių. Nereikalinga įprastoms programoms."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"priverstinai uždaryti fonines programas"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Leidžiama savininkui susisaistyti su aukščiausio lygio VPN paslaugos sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"susaistyti su darbalaukio fonu"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Leidžiama savininką susaistyti su aukščiausio lygio darbalaukio fono sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"susaistyti su sąveikos balsu priemone"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Turėtojui leidžiama susaistyti programą su sąveikos balsu paslaugos aukščiausio lygio sąsaja. Įprastoms programoms to niekada neturėtų prireikti."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"susisaistyti su nuotoliniu ekranu"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Leidžiama savininkui susisaistyti su aukščiausiojo lygio nuotolinio ekrano sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"susaistyti su valdiklio paslauga"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Leidžiama savininkui susisaistyti su aukščiausio lygio valdiklio paslaugos sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"susisaistyti su maršruto parinkimo paslauga"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Savininkui leidžiama susisaistyti su bet kokiomis registruotomis maršrutų parinkimo paslaugomis. To niekada neturėtų prireikti naudojant įprastas programas."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"sąveikauti su įrenginio administratoriumi"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Leidžiama savininkui siųsti tikslus įrenginio administratoriui. Įprastoms programoms to neturėtų prireikti."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"susisaistyti su TV įvestimi"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Leidžiama savininkui susisaistyti su aukščiausio lygio TV įvesties sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"pridėti arba pašalinti įrenginio administratorių"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Savininkui leidžiama pridėti aktyvių įrenginio administratorių arba juos pašalinti. Neturėtų reikėti įprastoms programoms."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"keisti ekrano padėtį"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Leidžiama programai naudoti bet kurį įdiegtą medijos dekoderį norint iššifruoti atkūrimą."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"tvarkyti patikimus prisijungimo duomenis"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Programoje galima įdiegti ir iš jos pašalinti CA sertifikatus kaip patikimus prisijungimo duomenis."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"paleisti programą, kai įrenginys yra neaktyvus"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Šiuo leidimu sistemai „Android“ leidžiama fone paleisti programą, kai įrenginys yra nenaudojamas."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"skaityti / rašyti ištekliuose, priklausančiuose diagnostikai"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Leidžiama programai skaityti ir rašyti visuose diagnostikos grupei priklausančiuose ištekliuose, pvz., failuose, esančiuose /dev. Tai gali paveikti sistemos stabilumą ir saugą. Tai turėtų būti naudojama TIK gamintojui ar operatoriui atliekant aparatinės įrangos diagnostiką."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"įgalinti programos komponentus arba jų neleisti"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Programai leidžiama skaityti įrenginyje saugomą asmeninę profilio informaciją, pvz., vardą, pavardę ir kontaktinę informaciją. Tai reiškia, kad programa gali nustatyti tapatybę ir siųsti profilio informaciją kitiems."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"keisti jūsų kontaktinę kortelę"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Leidžiama programai keisti įrenginyje saugomą asmeninę profilio informaciją, pvz., vardą, pavardę ir kontaktinę informaciją, arba jos pridėti. Tai reiškia, kad programa gali nustatyti tapatybę ir siųsti profilio informaciją kitiems."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"kūno jut. (pvz., pulso d. t.)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Programai leidžiama pasiekti naudojamų jutiklių duomenis, siekiant įvertinti, kas vyksta jūsų kūne, pvz., pulso dažnį."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"skaityti socialinį srautą"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Leidžiama programai pasiekti ir sinchronizuoti viešas naujienas iš jūsų ir jūsų draugų. Būkite atidūs bendrindami informaciją – programai leidžiama skaityti korespondenciją tarp jūsų ir draugų viešuosiuose tinkluose, neatsižvelgiant į konfidencialumą. Pastaba: šis leidimas negali būti taikomas visuose viešuosiuose tinkluose."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"rašyti į socialinį srautą"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Leidžiama programai naudoti „SurfaceFlinger“ žemo lygio funkcijas."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"skaityti kadrų buferį"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Leidžiama programai skaityti rėmelio buferio turinį."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"pasiekti „InputFlinger“"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Programai leidžiama naudoti „InputFlinger“ žemo lygio funkcijas."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigūruoti „Wi-Fi“ pateiktis"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Leidžiama programai konfigūruoti ir prisijungti prie „Wi-Fi“ pateikčių."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"valdyti „Wi-Fi“ pateiktis"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Leidžiama programai keisti visuotinius garso nustatymus, pvz., garsumą ir tai, kuris garsiakalbis naudojamas išvesčiai."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"įrašyti garsą"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Leidžiama programai įrašyti garsą naudojant mikrofoną. Šis leidimas suteikia galimybę programai įrašyti garsą bet kada be jūsų patvirtinimo."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM kortelės ryšys"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Programai leidžiama siųsti komandas į SIM kortelę. Tai labai pavojinga."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"fotografuoti ir filmuoti"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Leidžiama programai fotografuoti ir filmuoti kamera. Šis leidimas suteikia teisę programai naudoti kamerą bet kada be jūsų patvirtinimo."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"neleisti perduoti LED indikatoriaus, kai naudojamas fotoaparatas"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Leidžiama programai valdyti įrenginio telefono funkcijas. Šį leidimą turinti programa gali perjungti tinklus, įjungti ir išjungti telefono radiją ir atlikti panašius veiksmus jūsų neįspėdama."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"skaityti telefono būseną ir tapatybę"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Leidžiama programai pasiekti telefono funkcijas įrenginyje. Šis leidimas suteikia teisę programai nustatyti telefono numerį ir įrenginio ID, tai, ar skambutis aktyvus, ir skambučiu prijungtą nuotolinį numerį."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"skaityti tikslias telefono būsenas"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Programai leidžiama pasiekti tikslias telefono būsenas. Šiuo leidimu programai leidžiama nustatyti tikrą skambučio būseną, ar skambutis yra aktyvus, ar vyksta fone, ar paskambinti nepavyksta, tikslią duomenų ryšio būseną ir ar nepavyksta užmegzti duomenų ryšio."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"neleisti planšetiniam kompiuteriui užmigti"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"neleisti telefonui snausti"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Leidžiama programai neleisti planšetiniam kompiuteriui užmigti."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Keisti „WiMAX“ būseną"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Leidžia programai prijungti planšetinį kompiuterį prie „WiMAX“ ryšio tinklų ir nuo jų atjungti."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Leidžia programai prijungti telefoną prie „WiMAX“ ryšio tinklų ir nuo jų atjungti."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"įvertinti tinklus"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Programai leidžiama įvertinti tinklus ir nustatyti, kuriems tinklams planšetiniame kompiuteryje turėtų būti taikoma pirmenybė."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Programai leidžiama įvertinti tinklus ir nustatyti, kuriems tinklams telefone turėtų būti taikoma pirmenybė."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"susieti su „Bluetooth“ įrenginiais"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Leidžiama programai peržiūrėti „Bluetooth“ konfigūraciją planšetiniame kompiuteryje ir užmegzti bei priimti ryšius iš susietų įrenginių."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Leidžiama programai peržiūrėti „Bluetooth“ konfigūraciją telefone ir užmegzti bei priimti ryšius iš susietų įrenginių."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Programai leidžiama gauti, patikrinti ir išvalyti pranešimus, įskaitant pranešimus, kuriuos paskelbė kitos programos."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"susisaistyti su pranešimų skaitymo priemonės paslauga"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Leidžiama turėtojui susisaistyti su pranešimų skaitymo priemonės paslaugos aukščiausio lygio sąsaja. Įprastoms programoms to neturėtų prireikti."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"susaistyti su sąlygos teikėjo paslauga"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Turėtojui leidžiama susaistyti programą su sąlygos teikėjo paslaugos aukščiausio lygio sąsaja. Įprastoms programoms to niekada neturėtų prireikti."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"iškviesti operatoriaus pateiktą konfigūravimo programą"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Turėtojui leidžiama iškviesti operatoriaus pateiktą konfigūravimo programą. Įprastoms programoms to neturėtų prireikti."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"vykdyti tinklo sąlygų stebėjimą"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Leidžiama programai vykdyti tinklo sąlygų stebėjimą. To niekada neturėtų prireikti naudojant įprastas programas."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"keisti įvesties įrenginio kalibravimą"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Leidžiama programai keisti jutiklinio ekrano kalibravimo parametrus. Neturėtų prireikti naudojant įprastas programas."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"gali pasiekti DRM sertifikatus"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Programai leidžiama pasiekti ir naudoti DRM sertifikatus. Neturėtų prireikti naudojant įprastas programas."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Nustatyti slaptažodžio taisykles"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Valdyti leidžiamą ekrano atrakinimo slaptažodžių ilgį ir leidžiamus naudoti simbolius."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Stebėti bandymus atrakinti ekraną"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Pagrindinis"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Darbas"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Kita"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nerasta jokių programų šiam kontaktui peržiūrėti."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Įveskite PIN kodą"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Įveskite PUK ir naują PIN kodus"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kodas"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Programai leidžiama pasiekti „KeyGuard“ saugyklą."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Valdyti „KeyGuard“ rodymą ir slėpimą"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Programai leidžiama valdyti „KeyGuard“."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Atsižvelgti į patikimos būsenos pakeitimus."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Programai leidžiama atsižvelgti į patikimos būsenos pakeitimus."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Susisaistyti su „trust agent“ paslauga"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Programai leidžiama susisaistyti su „trust agent“ paslauga."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Sąveikauti su naujiniu ir atkūrimo sistema"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Programai leidžiama sąveikauti su atkūrimo sistema ir sistemos naujiniais."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dukart palieskite, kad valdytumėte mastelio keitimą"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nepavyko pridėti."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Pradėti"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Darbalaukio fonas"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Keisti darbalaukio foną"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Pranešimų skaitymo priemonė"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Sąlygos teikėjas"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN suaktyvintas"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN suaktyvino „<xliff:g id="APP">%s</xliff:g>“"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Palieskite, kad valdytumėte tinklą."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Įvesti"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Pasirinkite programą"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Nepavyko paleisti „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Bendrinti su"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Bendrinti su „<xliff:g id="APPLICATION_NAME">%s</xliff:g>“"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Slydimo valdymas. Palieskite ir laikykite."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Slyskite aukštyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Slyskite žemyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Slyskite į kairę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Slyskite į dešinę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Atrakinti"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Vaizdo kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Begarsis"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Garsas įjungtas"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Paieška"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Perbraukite pirštu, kad atrakintumėte."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Prijunkite ausines, kad išgirstumėte sakomus slaptažodžio klavišus."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Taškas."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"„Bluetooth“ garsas"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Belaidis rodymas"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Atlikta"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medijos išvestis"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Prijungimas prie įrenginio"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Perduoti ekraną į įrenginį"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Ieškoma įrenginių…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Nustatymai"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Atjungti"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Nuskaitoma..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Jungiama..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Pasiekiama"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Perdanga nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"„<xliff:g id="NAME">%1$s</xliff:g>“: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> tašk. colyje"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", saugu"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Prijungtas belaidis monitorius"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Šis ekranas rodomas kitame įrenginyje"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Perduodamas ekranas"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Prisijungiama prie „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Perduodamas ekranas"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Prisijungta prie „<xliff:g id="NAME">%1$s</xliff:g>“"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Atjungti"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Skambutis pagalbos numeriu"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Pamiršau atrakinimo piešinį"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Atrakinama SIM kortelė…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netinkamas PIN kodas."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Įveskite PIN kodą, sudarytą iš 4–8 skaičių."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodas turėtų būti mažiausiai 8 skaitmenų."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK kodą turi sudaryti 8 skaičiai."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Pakartotinai įveskite tinkamą PUK kodą. Pakartotinai bandant SIM bus neleidžiama visam laikui."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodai neatitinka"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Per daug atrakinimo piešinių bandymų"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Vėliau bandykite dar kartą"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Perbraukite nuo viršaus žemyn, kad išeitumėte iš viso ekrano režimo"</string>
+    <string name="done_label" msgid="2093726099505892398">"Atlikta"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Apskritas valandų slankiklis"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Apskritas minučių slankiklis"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Pasirinkite valandas"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Pasirinkite minutes"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Mėnesio dienų tinklelis"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Metų sąrašas"</string>
+    <string name="select_day" msgid="7774759604701773332">"Pasirinkite mėnesį ir dieną"</string>
+    <string name="select_year" msgid="7952052866994196170">"Pasirinkite metus"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Pasirinkta: <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Ištrinta: <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 036d5d6..b803e61 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez nosaukuma&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Ierakstiet PUK kodu, kas sastāv no 8 vai vairāk cipariem."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM karte ir bloķēta ar PUK kodu. Ierakstiet PUK kodu, lai to atbloķētu."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Ierakstiet PUK2 kodu, lai atbloķētu SIM karti."</string>
+    <string name="enablePin" msgid="209412020907207950">"Neizdevās. Iespējojiet SIM/RUIM bloķēšanu."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi, pirms SIM karte tiks bloķēta."</item>
+    <item quantity="other" msgid="7530597808358774740">"Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi(-es), pirms SIM karte tiks bloķēta."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Ienākošā zvana zvanītāja ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinhronizācija"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Pārāk daudz <xliff:g id="CONTENT_TYPE">%s</xliff:g> dzēsto vienumu."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Planšetdatora atmiņa ir pilna. Dzēsiet dažus failus, lai atbrīvotu vietu."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Pulksteņa atmiņa ir pilna. Dzēsiet dažus failus, lai atbrīvotu vietu."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Tālruņa atmiņa ir pilna! Dzēsiet dažus failus, lai atbrīvotu vietu."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Iespējams, tīklā veiktās darbības tiek pārraudzītas."</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Nezināma trešā puse"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Zvanītājs ieslēgts"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Notiek izslēgšana..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Planšetdators tiks beidzēts."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Pulkstenis tiks izslēgts."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Tālrunis tiks izslēgts."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Vai vēlaties izslēgt?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Atsāknēšana drošajā režīmā"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Lidojuma režīms"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Lidojuma režīms ir IESLĒGTS."</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Lidojuma režīms ir IZSLĒGTS."</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Iestatījumi"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"Pārsniedz"</string>
     <string name="safeMode" msgid="2788228061547930246">"Drošais režīms"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android sistēma"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"atinstalēt saīsnes"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Ļauj lietojumprogrammai noņemt saīsnes no sākuma ekrāna, nejautājot lietotājam."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"pārmaršrutēt izejošos zvanus"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Ļauj lietotnei apstrādāt izejošos zvanus un mainīt numuru, uz kuru tiks zvanīts. Ar šo atļauju lietotne var pārraudzīt, novirzīt vai neatļaut izejošos zvanus."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Ļauj lietotnei skatīt ievadīto tālruņa numuru izejošā zvana laikā un piedāvā iespēju šo zvanu pāradresēt uz citu numuru vai vispār pārtraukt zvanu."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"saņemt īsziņas (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Ļauj lietotnei saņemt un apstrādāt īsziņas. Tas nozīmē, ka lietotne var pārraudzīt vai dzēst uz jūsu ierīci nosūtītos ziņojumus, neparādot tos jums."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"saņemt ziņojumus (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Ļauj lietotnei izgūt aktīva loga saturu. Ļaunprātīgas lietotnes var izgūt visu loga saturu un pārbaudīt visu tā tekstu, izņemot paroles."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Īslaicīga pieejamības režīma iespējošana"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ļauj lietojumprogrammai īslaicīgi ierīcē iespējot pieejamības režīmu. Ļaunprātīgas lietotnes var iespējot pieejamības režīmu bez lietotāja atļaujas."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"Izgūt informāciju par logiem"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ļauj lietojumprogrammai no logu pārvaldnieka izgūt informāciju par logiem. Ļaunprātīgas lietotnes var izgūt informāciju, kas ir paredzēta iekšējai izmantošanai sistēmā."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"Loga marķiera izgūšana"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Ļauj lietojumprogrammai izgūt loga marķieri. Ļaunprātīgas lietotnes var veikt neautorizētas darbības ar lietojumprogrammas logu, izliekoties par attiecīgo sistēmu."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"Ietvaru statistikas izgūšana"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Ļauj lietojumprogrammai apkopot ietvaru statistiku. Ļaunprātīgas lietotnes var iegūt logu ietvaru statistiku no citām lietotnēm."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"Filtrēt notikumus"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Ļauj lietojumprogrammai reģistrēt ieejas filtru, kas filtrē visu lietotāja notikumu straumi, pirms notikumi tiek nosūtīti. Ļaunprātīga lietotne var kontrolēt sistēmas lietotāja saskarni, nejautājot lietotājam."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"displeja palielināšana"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Ļauj lietojumprogrammai palielināt displeja saturu. Ļaunprātīgas lietotnes var pārveidot displeja saturu tā, ka ierīce kļūst nelietojama."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"daļēja izslēgšana"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Liek darbību pārvaldniekam pāriet izslēgšanas stāvoklī. Neveic pilnīgu izslēgšanu."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"novērst lietojumprogrammu pārslēgšanu"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Ļauj lietotnei pārraidīt paziņojumu par saņemtu īsziņu. Ļaunprātīgas lietotnes to var izmantot, lai viltotu ienākošas īsziņas."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"sūtīt WAP-PUSH-saņemto apraidi"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Ļauj lietotnei pārraidīt paziņojumu par to, ka ir saņemts WAP PUSH ziņojums. Ļaunprātīgas lietotnes to var izmantot, lai viltotu multiziņas saņemšanu vai jebkuras tīmekļa lapas saturu nemanāmi nomainītu ar ļaunprātīgiem variantiem."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"apraidīt ziņojumu par tīklu vērtēšanu"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Ļauj lietotnei apraidīt paziņojumu, ka tīkli ir jānovērtē. Parastām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ierobežot aktīvo procesu skaitu"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Ļauj lietotnei kontrolēt izpildāmo procesu maksimālo skaitu. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"veikt fonā darbojošos lietotņu piespiedu aizvēršanu"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Ļauj īpašniekam izveidot saiti ar VPN pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"saistīt ar tapeti"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Ļauj īpašniekam piesaistīt tapetes augstākā līmeņa lietotāja saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"Saistīšana ar balss mijiedarbības elementu"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Ļauj īpašniekam izveidot savienojumu ar balss mijiedarbības pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"Saites izveide ar attālu displeju"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Ļauj īpašniekam izveidot saiti ar attāla displeja augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"saistīt ar logrīka pakalpojumu"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Ļauj īpašniekam izveidot saiti ar logrīka pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"Saistīšana ar maršruta nodrošinātāja pakalpojumu"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Ļauj īpašniekam saistīt jebkādus reģistrētus maršrutēšanas nodrošinātājus. Parastām lietotnēm šī atļauja nekad nav nepieciešama."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"mijiedarboties ar ierīces administratoru"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Ļauj īpašniekam nosūtīt informāciju par nodomiem ierīces administratoram. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"Izveidot saiti ar TV ieeju"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Ļauj īpašniekam izveidot saiti ar TV ieejas augšējā līmeņa saskarni. Parastām lietotnēm šī atļauja nekad nav nepieciešama."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"pievienot vai noņemt ierīces administratoru"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Ļauj īpašniekam pievienot vai noņemt aktīvos ierīces administratorus. Nekad nav nepieciešama parastām lietotnēm."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"mainīt ekrāna orientāciju"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Ļauj lietotnei izmantot jebkuru instalētu multivides failu dekodētāju, lai dekodētu failus atskaņošanai."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"Uzticamo akreditācijas datu pārvaldība"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Ļauj lietotnei instalēt un atinstalēt CA sertifikātus kā uzticamus akreditācijas datus."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"Lietojumprogrammas darbība dīkstāves laikā"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Ar šo atļauju Android sistēmā lietojumprogramma darbojas fonā, kad ierīce netiek lietota."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"lasīt grupas “diag” resursus un rakstīt tajos"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Ļauj lietotnei lasīt un rakstīt jebkurā resursā, kas pieder diagnostikas grupai, piemēram, failiem mapē /dev. Tas var ietekmēt sistēmas stabilitāti un drošību. Var izmantot ražotājs vai operators TIKAI konkrētas aparatūras diagnostikai."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"iespējot vai atspējot lietotnes komponentus"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Ļauj lietotnei lasīt ierīcē saglabāto personīgā profila informāciju, piemēram, jūsu vārdu un kontaktinformāciju. Tas nozīmē, ka lietotne var jūs identificēt un var nosūtīt jūsu profila informāciju citām personām."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"mainīt manu vizītkarti"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Ļauj lietotnei mainīt ierīcē saglabāto personīgā profila informāciju, piemēram, jūsu vārdu un kontaktinformāciju, vai pievienot tai citu informāciju. Tas nozīmē, ka lietotne var jūs identificēt un var nosūtīt jūsu profila informāciju citām personām."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"ķermeņa sensori (piemēram, sirdsdarbības monitori)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Ļauj lietotnei piekļūt to sensoru datiem, kurus izmantojat, lai novērtētu ķermeņa procesus, piemēram, sirdsdarbību."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lasīt jūsu soc. tīklu straumi"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Ļauj lietotnei piekļūt sociālajiem atjauninājumiem no jums un jūsu draugiem un sinhronizēt tos. Esiet piesardzīgs, kad kopīgojat informāciju, — šādi lietotne var lasīt sociālajos tīklos ar draugiem veikto saziņu, neraugoties uz konfidencialitāti. Piezīme: šo atļauju nedrīkst piemērot visiem sociālajiem tīkliem."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"rakstīt sociālo tīklu straumē"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Ļauj lietotnei lietot SurfaceFlinger zema līmeņa funkcijas."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lasīt kadru buferi"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Ļauj lietotnei lasīt kadru bufera saturu."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"Piekļuve InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Ļauj lietotnei izmantot InputFlinger zema līmeņa funkcijas."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wi-Fi displeju konfigurēšana"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Ļauj lietotnei konfigurēt Wi-Fi displejus un veidot savienojumu ar tiem."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wi-Fi displeju vadība"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ļauj lietotnei mainīt globālos audio iestatījumus, piemēram, skaļumu un izejai izmantoto skaļruni."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ierakstīt audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Ļauj lietotnei ierakstīt audio, izmantojot mikrofonu. Šī atļauja ļauj lietotnei ierakstīt audio jebkurā brīdī bez jūsu apstiprinājuma."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM saziņa"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Ļauj lietotnei sūtīt komandas uz SIM karti. Tas ir ļoti bīstami!"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"uzņemt attēlus un videoklipus"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Ļauj lietotnei uzņemt attēlus un videoklipus ar kameru. Ar šo atļauju lietotne var jebkurā brīdī izmantot kameru bez jūsu apstiprinājuma."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Atspējot pārraidīšanas LED indikatoru, kad kamera tiek izmantota"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Ļauj lietotnei kontrolēt ierīces tālruņa funkcijas. Lietotne, kurai ir šī atļauja, var pārslēgt tīklus, ieslēgt un izslēgt tālruņa radio un veikt tamlīdzīgas darbības, nebrīdinot jūs."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lasīt tālruņa statusu un identitāti"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Ļauj lietotnei piekļūt ierīces tālruņa funkcijām. Ar šo atļauju lietotne var noteikt tālruņa numuru un ierīču ID, zvana statusu un attālo numuru, ar ko ir izveidots savienojums, veicot zvanu."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"precīzu tālruņa statusa datu lasīšana"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Ļauj lietotnei piekļūt precīziem datiem par tālruņa statusu. Izmantojot šo atļauju, lietotne var noteikt zvana faktisko statusu, vai zvans ir aktīvs vai notiek fonā, vai zvans nav izdevies, kā arī precīzu datu savienojuma statusu un neizdevušos datu savienojumus."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"novērst planšetdatora pāriešanu miega režīmā"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"novērst tālruņa pāriešanu miega režīmā"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Ļauj lietotnei novērst planšetdatora pāriešanu miega režīmā."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX statusa mainīšana"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Ļauj lietotnei izveidot un pārtraukt planšetdatora savienojumu ar WiMAX tīkliem."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Ļauj lietotnei izveidot un pārtraukt tālruņa savienojumu ar WiMAX tīkliem."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"vērtēt tīklus"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Ļauj lietotnei ranžēt tīklus un ietekmēt to, kuriem tīkliem planšetdators dos priekšroku."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Ļauj lietotnei ranžēt tīklus un ietekmēt to, kuriem tīkliem tālrunis dos priekšroku."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"savienot pārī ar Bluetooth ierīcēm"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Ļauj lietotnei skatīt Bluetooth konfigurāciju planšetdatorā, kā arī veidot un pieņemt savienojumus ar pārī savienotām ierīcēm."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Ļauj lietotnei skatīt Bluetooth konfigurāciju tālrunī, kā arī veidot un pieņemt savienojumus ar pārī savienotām ierīcēm."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Ļauj lietotnei izgūt, pārbaudīt un dzēst paziņojumus, tostarp lietotņu publicētos paziņojumus."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"saites izveidošana ar paziņojumu uztvērēja pakalpojumu"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Ļauj īpašniekam izveidot saiti ar paziņojumu uztvērēja pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"Saistīšana ar nosacījumu sniedzēja pakalpojumu"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Ļauj īpašniekam izveidot savienojumu ar drukas nosacījumu sniedzēja pakalpojuma augšējā līmeņa saskarni. Parastajām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Operatora nodrošinātas konfigurācijas lietotnes izsaukšana"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Ļauj īpašniekam izsaukt operatora nodrošināto konfigurācijas lietotni. Parastām lietotnēm tas nekad nav nepieciešams."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"iegūt informāciju par tīkla stāvokļa novērojumiem"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Ļauj lietojumprogrammai iegūt informāciju par tīkla stāvokļa novērojumiem. Parastām lietotnēm šī atļauja nekad nav nepieciešama."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"mainīt ievadierīces kalibrēšanu"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Ļauj lietotnei pārveidot skārienekrāna kalibrēšanas parametrus. Parastām lietotnēm šī atļauja nekad nav nepieciešama."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"Piekļuve digitālā satura tiesību pārvaldības sertifikātiem"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Ļauj lietojumprogrammai nodrošināt un izmantot digitālā satura tiesību pārvaldības sertifikātus. Parastām lietotnēm šī atļauja nekad nav nepieciešama."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Paroles kārtulu iestatīšana"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontrolē ekrāna atbloķēšanas parolē atļautās rakstzīmes un garumu."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Ekrāna atbloķēšanas mēģinājumu pārraudzīšana"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Mājās"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Darbs"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Cits"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Netika atrasta neviena lietojumprogramma, ar kuru skatīt šo kontaktpersonu."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ievadiet PIN kodu."</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ievadiet PUK kodu un jaunu PIN kodu."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kods"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Ļauj lietojumprogrammai piekļūt krātuvei, kas aizsargāta ar atslēgu."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Pārvaldīt krātuves rādīšanu un paslēpšanu."</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Ļauj lietojumprogrammai pārvaldīt krātuvi."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Klausīties uzticamības statusa izmaiņas"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Ļauj lietojumprogrammai klausīties uzticamības statusa izmaiņas."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Izveidot savienojumu ar uzticamības pārbaudes pakalpojumu"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ļauj lietojumprogrammai izveidot savienojumu ar uzticamības pārbaudes pakalpojumu."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Mijiedarbošanās ar atjauninājumu un atkopšanas sistēmu"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Ļauj lietojumprogrammai mijiedarboties ar atkopšanas sistēmu un sistēmas atjauninājumiem."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Pieskarieties divreiz, lai kontrolētu tālummaiņu."</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nevarēja pievienot logrīku."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Doties uz"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Fona tapete"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Tapetes maiņa"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Paziņojumu uztvērējs"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Nosacījumu sniedzējs"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN ir aktivizēts."</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Lietojumprogramma <xliff:g id="APP">%s</xliff:g> aktivizēja VPN."</string>
     <string name="vpn_text" msgid="3011306607126450322">"Pieskarieties, lai pārvaldītu tīklu."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Pārslēgšanas taustiņš"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Ievadīšanas taustiņš"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Izvēlieties lietotni"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Nevarēja palaist lietotni <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Kopīgot ar:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Kopīgot ar lietojumprogrammu <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Bīdāms turis. Pieskarieties tam un turiet to nospiestu."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Velciet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Velciet uz leju, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Velciet pa kreisi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Velciet pa labi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Atbloķēt"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Klusums"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Skaņa ieslēgta"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Meklēt"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Velciet ar pirkstu, lai atbloķētu."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Pievienojiet austiņas, lai dzirdētu paroles taustiņu nosaukumus."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkts."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistēma"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Bezvadu attēlošana"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gatavs"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Multivides izeja"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Savienojuma izveide ar ierīci"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Ekrāna apraide uz ierīci"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Notiek ierīču meklēšana…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Iestatījumi"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Atvienot"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Notiek meklēšana..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Notiek savienojuma izveide..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Pieejams"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Pārklājums Nr. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", drošs"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Bezvadu attēlošanas savienojums ir izveidots."</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Šis ekrāns tiek rādīts citā ierīcē."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Ekrāna apraidīšana"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Notiek savienojuma izveide ar: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Ekrāna apraidīšana"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Izveidots savienojums ar: <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Pārtraukt savienojumu"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Ārkārtas izsaukums"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Aizmirsu kombināciju"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Notiek SIM kartes atbloķēšana..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN kods nav pareizs."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ievadiet PIN, kas sastāv no 4 līdz 8 cipariem."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodam ir jābūt vismaz 8 ciparus garam."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK kodā ir jābūt 8 cipariem."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Atkārtoti ievadiet pareizo PUK kodu. Ja vairākas reizes ievadīsiet to nepareizi, SIM karte tiks neatgriezeniski atspējota."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodi neatbilst."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Pārāk daudz kombinācijas mēģinājumu"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Vēlāk mēģiniet vēlreiz."</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Lai izietu no pilnekrāna režīma, velciet no augšas uz leju."</string>
+    <string name="done_label" msgid="2093726099505892398">"Gatavs"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Stundu apļveida slīdnis"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Minūšu apļveida slīdnis"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Atlasiet stundas."</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Atlasiet minūtes."</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Režģis ar mēneša dienām"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Gadu saraksts"</string>
+    <string name="select_day" msgid="7774759604701773332">"Atlasiet mēnesi un dienu."</string>
+    <string name="select_year" msgid="7952052866994196170">"Atlasiet gadu."</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Atlasīts: <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> tika dzēsts."</string>
 </resources>
diff --git a/core/res/res/values-mcc440-mnc20/config.xml b/core/res/res/values-mcc440-mnc20/config.xml
index ba709fa..62001d9 100644
--- a/core/res/res/values-mcc440-mnc20/config.xml
+++ b/core/res/res/values-mcc440-mnc20/config.xml
@@ -23,6 +23,6 @@
 
     <!-- Configure mobile network MTU. Carrier specific value is set here.
     -->
-    <integer name="config_mobile_mtu">1340</integer>
+    <integer name="config_mobile_mtu">1422</integer>
 
 </resources>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index fe3d78b..cc0fa7f 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Гарчиггүй&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"8-с цөөнгүй тооноос бүтэх PUK-г бичнэ үү."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM картны PUK-түгжигдсэн. Тайлах бол PUK кодыг бичнэ үү."</string>
     <string name="needPuk2" msgid="4526033371987193070">"SIM картын хаалтыг болиулах бол PUK2-г бичнэ үү."</string>
+    <string name="enablePin" msgid="209412020907207950">"Амжилтгүй боллоо, СИМ/РҮИМ түгжээг идэвхжүүлнэ үү."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Таны СИМ түгжигдэхээс өмнө танд <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item>
+    <item quantity="other" msgid="7530597808358774740">"СИМ түгжигдэхээс өмнө танд <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Дуудлага хийгчийн ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Синк"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Хэт олон <xliff:g id="CONTENT_TYPE">%s</xliff:g> устгах."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Таблетийн сан дүүрсэн. Зай чөлөөлөх бол зарим файлыг устгана уу."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Цагны сан дүүрсэн. Зай чөлөөлөх бол зарим файлыг устгана уу."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Утасны сан дүүрсэн. Зай чөлөөлөх бол зарим файлыг устгана уу."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Сүлжээ хянагдаж байж болзошгүй"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Тодорхойгүй гуравдагч талаас"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Хонх ассан"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Унтрааж байна…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Таны таблет унтрах болно."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Таны цаг унтрах болно."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Таны утас унтрах болно."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Та унтраах уу?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Аюулгүй горимоор дахин асаах"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Нислэгийн горим"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Нислэгийн горим асав"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Нислэгийн горим унтарсан"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Тохиргоо"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Аюулгүй горим"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Андройд систем"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"товчлолыг устгах"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Аппликешн нь хэрэглэгчийн оролцоогүйгээр Нүүр дэлгэцний товчлолыг устгаж чадна."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"гарсан дуудлагыг чиглэлийг өөрчлөх"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Апп нь дуудлага хийх болон залгаж байгаа дугаарыг өөрчлөх боломжтой. Энэ зөвшөөрөл нь апп-г залгасан дуудлагыг хаах, хянах болон дахин чиглүүлэх боломжтой болгодог."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Гадагш дуудлага хийх үед залгасан дугаарыг харах, дуудлагыг өөр дугаар руу шилжүүлэх, таслах боломжтой болгоно."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"текст мессеж(SMS) хүлээж авах"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Апп нь SMS мессежийг хүлээн авах болон гүйцэтгэх боломжтой. Ингэснээр апп нь таны төхөөрөмжрүү илгээсэн мессежийг танд үзүүлэхгүйгээр хянах болон устгаж чадна."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"текст мессеж(МMS) хүлээж авах"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Апп нь идэвхтэй цонхны контентыг авах боломжтой. Хортой апп нь цонхны контентыг бүхэлд авах болон нууц үгнээс бусад бүх текстийг шалгаж болзошгүй"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Хялбар байдлыг түр идэвхтэй болгох"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Аппликешн нь төхөөрөмжийн хялбар байдлыг түр зуур идэвхжүүлэх боломжтой. Хортой апп нь хэрэглэгчийн зөвшөөрөлгүйгээр хялбар байдлыг идэвхжүүлж болзошгүй."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"цонхны мэдээллийг унших"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Аппликешн нь цонхны менежерээс цонхны талаар мэдээллийг дуудах боломжтой. Хортой апп нь дотоод системийн хэрэглээнд зориулагдсан мэдээллийг дуудаж болзошгүй."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"цонхны токен авах"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Аппликешнд цонхны токен авах боломж олгоно. Хорлонтой апп-ууд системийн өмнөөс аппликешны цонхтой зөвшөөрөлгүйгээр харилцах боломжтой."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"фреймын статистик авах"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Аппликешнд фреймын статистикыг цуглуулах боломж олгоно. Хорлонтой апп-ууд виндовсын фреймын статистикыг өөр апп-с хянах боломжтой."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"үйл явдлыг шүүх"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Аппликешн нь хэрэглэгчийн бүх үйл явдалын илгээгдэхээс өмнөх урсгалыг шүүж байгаа оролтын шүүлтйиг бүртгэх боломжтой. Хортой апп нь хэрэглэгчийн интервэшнгүйгээр системийн UI-г удирдах боломжтой."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"дэлгэц томруулах"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Аппликешн нь дэлгэцний контентийг өсгөх боломжтой. Хортой апп нь дэлгэцийн контентыг төхөөрөмжнөөс ашиглаж болохгүй болгон хувиргах боломжтой."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"хэсэгчилсэн унтраалт"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Активити менежерийг унтраана. Бүрэн унтраалтыг хийхгүй."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"апп шилжүүлэхийг хориглох"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Апп нь SMS мессеж хүлээн авсан талаарх мэдэгдлийг өргөн дамжуулах боломжтой. Хортой апп энийг ашиглан ирсэн SMS мессежийг хуурамчаар хийх боломжтой."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-хүлээн авав өргөн дамжууллыг илгээх"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Аппликешн нь WAP PUSH мессеж хүлээж авсан мэдэгдлийг өргөн дамжуулах боломжтой. Хортой апп нь энийг ашиглан MMS мессеж хүлээн авсан гэж хуурамчаар мэдэгдэх эсвэл хортой хувьсагч агуулсан веб хуудасны контентыг чимээгүй орлуулах боломжтой."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"бүртгэгдсэн сүлжээнүүд рүү түгээх"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Апп-д сүлжээнүүдэд бүртгэгдсэн байх шаардлагатай мэдэгдлийг түгээх боломжийг олгоно. Энгийн апп-д хэзээ ч шаардагдахгүй."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ажиллаж байгаа процессийн тоог хязгаарлах"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Апп нь нэг зэрэг ажиллах процессийн тооны дээд утгыг удирдах боломжтой. Энгийн апп-д хэзээ ч ашиглагдахгүй."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"арын апп-г хүчээр хаах"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Эзэмшигч нь VPN үйлчилгээний дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-д шаардлагагүй."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"ханын зурагтай холбох"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Эзэмшигч нь ханын зурагны дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-уудад шаардлагагүй."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"дуугаар харьцагчтай холбох"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Эзэмшигчид дуугаар харьцах үйлчилгээний дээд-түвшний интерфейстэй холбох боломж олгоно. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"алсын дэлгэцтэй холбогдох"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Эзэмшигчид алсын дэлгэц дэх дээд давхаргын интерфэйстэй холбогдох боломж олгоно. Энгийн апп-д шаардагдахгүй."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"виджет үйлчилгээтэй холбох"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Эзэмшигч нь виджет үйлчилгээний дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-д шаардлагагүй."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"маршрут нийлүүлэгчийн үйлчилгээтэй холбогдох"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Эзэмшигчид бүртгэгдсэн маршрут нийлүүлэгчтэй холбогдох  боломж олгоно. Энгийн апп-уудад хэзээ ч шаардагдахгүй."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"төхөөрөмжийн админтай харилцан үйлчлэх"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Эзэмшигч нь төхөөрөмжийн админруу интент илгээх боломжтой. Энгийн апп-д шаардлагагүй."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"ТВ оролт холбох"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Эзэмшигч нь ТВ оролтын дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-д шаардлагагүй."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"төхөөрөмжийн админ нэмэх, хасах"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Эзэмшигч нь идэвхтэй төхөөрөмжийн администраторыг нэмэх, хасах боломжтой. Энгийн апп-д шаардлагагүй."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"дэлгэцний чиглэлийг солих"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Апп нь тоглуулах үедээ код тайлахдаа суулгагдсан ямарч медиа код тайлагчийг ашиглах боломжтой."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"итгэмжлэгдсэн жуухуудыг удирдах"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Апп-д CA сертификатуудыг итгэмжлэгдсэн жуух байдлаар суулгах болон устгахыг зөвшөөрнө."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"Сул зогсолтын хугацаанд аппликешнийг ажиллуулна"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Энэ зөвшөөрөл нь Андройд системд төхөөрөмжийг ашиглахгүй байгаа үед аппликешныг далд ажиллуулах боломж олгоно."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"оношлох грүпийн эзэмшдэг нөөцрүү унших/бичих"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Апп нь оношлох грүпийн эзэмшдэг, жишээ нь /dev доторх файлууд, дурын  нөөцийг унших бичих боломжтой.Энэ нь системийн тогвортой байдал болон аюулгүй байдалд бодитоор нөлөөлнө. Энэ нь үйлдвэрлэгч болон операторын хардверт-зориулсан оношлогоонд ашиглагдана."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"апп компонентыг идэвхжүүлэх эсвэл идэвхгүй болгох"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Апп нь таны нэр болон холбоо барих мэдээлэл зэрэг таны утсан дээр хадгалагдсан хувийн профайл мэдээллийг унших боломжтой. Ингэснээр апп нь танийг таньж чадах ба таны профайл мэдээллийг бусдад илгээх боломжтой."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"та өөрийн харилцагчийн картыг өөрчлөх"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Апп нь таны нэр болон холбоо барих мэдээлэл зэрэг таны төхөөрөмж дээр хадгалагдсан хувийн профайл мэдээллийг солих эсвэл нэмэх боломжтой. Ингэснээр апп нь танийг таньж чадах ба таны профайл мэдээллийг бусдад илгээх боломжтой."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"биеийн сенсор (зүрхний цохилт хянагч гэх мэт)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Зүрхний цохилт гэх мэт биеийн үзүүлэлт хэмждэг сенсоруудын дата-д хандалт хийх боломжийг апп-д олгоно."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"таны нийтийн урсгалаас унших"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Апп нь та болон таны найзуудын нийтийн шинэчлэлтэд хандах болон синк хийх боломжтой. Мэдээлэл хуваалцахдаа болгоомжтой байна уу - энэ нь апп-д нийтийн сүлжээндэх та болон таны найзууд хоорондын холбоог нууц эсэхээс үл хамааран унших боломжтой. Анхаар: энэ зөвшөөрөл нь бүх нийтийн сүлжээнд ашиглаж боломжгүй."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Таны нийтийн урсгалруу бичих"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Апп нь SurfaceFlinger доод-төвшиний функцийг ашиглах боломжтой."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"Фрэйм буферээс унших"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Апп нь фрэйм буферын контентыг унших боломжтой."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger-т хандалт хийх"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Апп-д SurfaceFlinger доод-түвшний функцуудыг ашиглах боломж олгоно."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi дэлгэцийг тохируулах"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Апп нь Wifi дэлгэцийг тохируулах болон холбогдох боломжтой."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wifi дэлгэцийг удирдах"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Апп нь дууны хэмжээ, спикерын гаралтад ашиглагдах глобал аудио тохиргоог өөрчлөх боломжтой."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"аудио бичих"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Апп нь микрофоноор аудио бичих боломжтой. Энэ зөвшөөрөл нь апп-д ямар ч үед таны зөвшөөрөлгүйгээр аудио бичих боломжийг олгоно."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"сим холбоо"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Апп-д SIM рүү комманд илгээхийг зөвшөөрнө. Энэ маш аюултай."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"зураг авах болон видео бичих"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Апп нь камераар зураг авах болон видео бичих боломжтой. Энэ зөвшөөрөл нь апп-д ямар ч үед таны зөвшөөрөлгүйгээр камер ашиглах боломжийг олгоно."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"камер ашиглаж байх үед дамжууллыг заагч LED-г идэвхгүй болгох"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Апп-н төхөөрөмжийн утасны функцийг удирдах боломжтой. Энэ зөвшөөрөлтэй апп  нь танд анхааруулахгүйгээр сүлжээг сэлгэх, утасны радиог асаах, унтраах боломжтой."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"утасны статус ба таниулбарыг унших"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Апп нь төхөөрөмжийн утасны функцд хандах боломжтой. Энэ зөвшөөрөл нь апп-д утасны дугаар болон төхөөрөмжийн ID-г, дуудлага идэвхтэй эсэх, холын дугаар дуудлагаар холбогдсон байгаа эсэхийг тогтоох боломжийг олгоно,"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"утасны байдлыг нарийн унших"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Апп-д утасны тодорхой байдалд хандах боломжийг олгодог. Энэ зөвшөөрөл апп-д дуудлагын бодит статус, дуудлага идэвхтэй эсхүл ар талд тавигдсан эсэх, амжилтгүй дуудлага болон дата холболтын нарийн статус болон дата холболтын алдааг тодорхойлох боломж олгоно."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"таблетыг унтуулахгүй байлгах"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"утсыг унтуулахгүй байлгах"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Апп нь таблетыг унтахаас сэргийлэх боломжтой"</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX статусыг өөрчлөх"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Апп нь WiMAX сүлжээнд таблетыг холбох болон салгах боломжтой."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Апп нь WiMAX сүлжээнд утсыг холбох болон салгах боломжтой."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"бүртгэгдсэн сүлжээ"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Апп-д сүлжээнүүдийг эрэмбэлж, аль сүлжээнд таблетыг холбоход нөлөөлөх боломж олгоно."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Апп-д сүлжээнүүдийг эрэмбэлж, аль сүлжээнд утсыг холбоход нөлөөлөх боломж олгоно."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Блютүүт төхөөрөмжтэй хос үүсгэх"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Апп нь таблет дээрх блютүүт тохиргоог харах боломжтой ба хос болох төхөөрөмжтэй холболтыг зөвшөөрөх болон хийх боломжтой."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Апп нь утсан дээрх Блютүүт тохиргоог харах боломжтой ба хос болох төхөөрөмжтэй холболтыг зөвшөөрөх болон хийх боломжтой."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Апп нь бусад апп-уудын илгээсэн мэдэгдлүүдийг дуудах, шалгах, болон цэвэрлэх боломжтой."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"мэдэгдэл сонсогч үйлчилгээтэй холбох"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Эзэмшигч нь мэдэгдэл сонсох үйлчилгээний дээд-төвшиний интерфейстэй холбох боломжтой. Энгийн апп-д шаардлагагүй."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"нөхцөл нийлүүлэгч үйлчилгээнд холбох"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Эзэмшигчид нөхцөл нийлүүлэгч үйлчилгээний дээд-түвшний интерфейстэй холбох боломж олгоно. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"үүрэн компанийн нийлүүлсэн тохируулгын апп-г өдөөх"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Эзэмшигчид үүрэн компанийн нийлүүлсэн тохируулах апп-г өдөөх боломж олгоно. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Сүлжээний байдлын талаар ажиглалтуудыг хүлээн авах"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Аппликешнд сүлжээний байдлын талаар ажиглалтуудыг хүлээн авахыг зөвшөөрнө. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"оролтын төхөөрөмжийн калибрешныг өөрчлөх"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Мэдрэгчтэй дэлгэцний калибрешн параметрийг өөрчлөхийг апп-д зөвшөөрнө. Энгийн апп-д шаардлагагүй."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"хандалтын DRM сертификат"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Аппликешнд DRM сертификатыг ашиглах болон нийлүүлэхийг зөвшөөрнө. Энгийн апп-уудад хэзээ ч ашиглагдахгүй."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Нууц үгний дүрмийг тохируулах"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Дэлгэц түгжих нууц үгэнд зөвшөөрөгдсөн тэмдэгт болон уртыг удирдах"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Дэлгэц тайлах оролдлогыг хянах"</string>
@@ -783,7 +842,7 @@
     <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
     <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
     <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Цугларалт"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
     <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
     <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
     <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Гэрийн"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Ажлын"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Бусад"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Энэ харилцагчийг харах аппликешн олдсонгүй."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN кодыг бичнэ үү"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK-г бичээд шинэ PIN код оруулна уу"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK код"</string>
@@ -947,7 +1007,7 @@
     <string name="permlab_setAlarm" msgid="1379294556362091814">"сэрүүлэг тохируулах"</string>
     <string name="permdesc_setAlarm" msgid="316392039157473848">"Апп нь суулгагдсан сэрүүлэгний апп дээр сэрүүлэг тохируулах боломжтой. Зарим сэрүүлэгний апп нь энэ функцийг дэмжихгүй байж болзошгүй."</string>
     <string name="permlab_addVoicemail" msgid="5525660026090959044">"дуут шуудан нэмэх"</string>
-    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Апп нь таны дуут шуудангийн ирсэн мэйлд мессеж нэмэх боломжтой."</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Таны дуут шуудангийн ирсэн мэйлд зурвас нэмэхийг апп-д зөвшөөрөх."</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"Хөтчийн геобайршлын зөвшөөрлийг өөрчлөх"</string>
     <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Апп нь Хөтчийн гео байршлын зөвшөөрлийг өөрчлөх боломжтой. Хортой апп нь энийг ашиглан дурын веб хуудасруу байршлын мэдээллийг илгээх боломжтой."</string>
     <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"багцийг тулгах"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Аппликешн нь хамгаалалттай аюулгүй санд хандах боломжтой."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Түлхүүр хамгаалалтын харуулах болон далдлахыг удирдах"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Аппликешн нь түлхүүр хамгаалагчыг удирдах боломжтой."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Итгэмжлэлд орж буй өөрчлөлтийг мэдэх."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Итгэмжлэлд орж буй өөрчлөлтийг мэдэх боломжийг аппликешнд олгоно."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Итгэмжлэгдсэн төлөөлөгчийн үйлчилгээтэй холбогдох"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Аппликешнд итгэмжлэгдсэн төлөөлөгчтэй холбогдох боломж олгоно."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Шинэчлэлт болон сэргээх системтэй харилцах"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Аппликешнд сэргээх систем болон системийн шинэчлэлтэй харилцах боломж олгоно."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Өсгөх контрол дээр хоёр удаа товшино уу"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Виджет нэмж чадсангүй."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Очих"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Ханын зураг"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Ханын зураг солих"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Мэдэгдэл сонсогч"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Нөхцөл нийлүүлэгч"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN идэвхтэй болов"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN-г <xliff:g id="APP">%s</xliff:g> идэвхтэй болгов"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Сүлжээг удирдах бол хүрнэ үү."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Шифт"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Оруулах"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Апп сонгох"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-г эхлүүлж чадсангүй"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Хуваалцах"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>-тай хуваалцана уу"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Бариулыг гулсуулна. Хүрээд хүлээнэ."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-г гулсуулах."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх бол доош гулсуулах."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх зүүнлүү гулсуулах."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх бол баруунлуу гулсуулах."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Тайлах"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Камер"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Чимээгүй"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Дуунууд идэвхтэй"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Хайх"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Түгжээг тайлах бол татна уу"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Нууц үгний дуудлагыг сонсох бол чихэвчийг залгана уу."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Цэг."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Блютүүт аудио"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Утасгүй дэлгэц"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Дууссан"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Медиа гаралт"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Төхөөрөмжтэй холбох"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Дэлгэцийг төхөөрөмж рүү дамжуулах"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Төхөөрөмжүүдийг хайж байна…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Тохиргоо"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Салгах"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Скан хийж байна..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Холбогдож байна..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Боломжтой"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Давхарга #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", найдвартай"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Утасгүй дэлгэц холбогдов"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Энэ дэлгэц өөр төхөөрөмжийг харуулж байна"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Дэлгэцийг дамжуулж байна"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"<xliff:g id="NAME">%1$s</xliff:g> руу холбогдож байна"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Дэлгэцийг дамжуулж байна"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"<xliff:g id="NAME">%1$s</xliff:g> руу холбогдсон"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Салгах"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Яаралтай дуудлага"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Хээг мартсан"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM картны түгжээг гаргаж байна…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Буруу PIN код."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-8 тооноос бүтэх PIN-г бичнэ үү."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK код 8-с цөөнгүй тооноос бүтнэ."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK код 8 тоотой байх ёстой."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Зөв PUK кодыг дахин оруулна уу. Давтан оролдвол SIM нь бүрмөсөн идэвхгүй болгоно."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN кодууд таарахгүй байна"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Хээ оруулах оролдлого хэт олон"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> секундын дараа дахин оролдоно уу"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Дараа дахин оролдоно уу"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Бүтэн дэлгэцээс гарахын тулд дээрээс нь эхлэн доош шудрана уу."</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Бүтэн дэлгэцээс гарахын тулд дээрээс нь доош шудрана уу."</string>
+    <string name="done_label" msgid="2093726099505892398">"Дууссан"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Цаг гүйлгэгч"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Минут гүйлгэгч"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Цаг сонгоно уу"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Минут сонгоно уу"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Өдрүүдийг сараар"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Жилийн жагсаалт"</string>
+    <string name="select_day" msgid="7774759604701773332">"Сар болон өдрийг сонгоно уу"</string>
+    <string name="select_year" msgid="7952052866994196170">"Жилийг сонгоно уу"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> сонгогдсон"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> устсан"</string>
 </resources>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 88d76e7..53c9b94 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Tidak bertajuk&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"..."</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Taipkan PUK yang mempunyai 8 nombor atau lebih panjang."</string>
     <string name="needPuk" msgid="919668385956251611">"Kad SIM anda dikunci PUK. Taipkan kod PUK untuk membuka kuncinya."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Taipkan PUK2 untuk menyahsekat kad SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Tidak berjaya, dayakan Kunci SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum SIM dikunci."</item>
+    <item quantity="other" msgid="7530597808358774740">"Anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum SIM dikunci."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID Pemanggil Masuk"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Penyegerakan"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Terlalu banyak pemadaman <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Storan tablet penuh. Padamkan beberapa fail untuk mengosongkan ruang."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Storan tontonan penuh. Padamkan beberapa fail untuk mengosongkan ruang."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Storan telefon penuh. Padamkan beberapa fail untuk mengosongkan ruang."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Rangkaian mungkin dipantau"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Oleh pihak ketiga yang tidak diketahui"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Pendering dihidupkan"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Mematikan..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablet anda akan dimatikan."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Tontonan anda akan dimatikan."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefon anda akan dimatikan."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Adakah anda mahu menutup?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"But semula ke mod selamat"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mod pesawat"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mod Pesawat DIHIDUPKAN"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mod Pesawat DIMATIKAN"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Tetapan"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Mod selamat"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"nyahpasang pintasan"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Membenarkan aplikasi mengalih keluar pintasan Skrin Laman Utama tanpa campur tangan pengguna."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"tukar laluan panggilan keluar"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Membenarkan apl memproses panggilan keluar dan menukar nombor yang perlu didail. Kebenaran ini membolehkan apl memantau, mengalih atau menghalang panggilan keluar."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Membenarkan apl melihat nombor yang didail semasa panggilan keluar dengan pilihan untuk mengubah hala panggilan ke nombor lain atau membatalkan terus panggilan."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"terima mesej teks (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Membenarkan apl menerima dan memproses mesej SMS. Ini bermakna apl boleh memantau atau memadam mesej yang dihantar ke peranti anda tanpa menunjukkannya kepada anda."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"terima mesej teks (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Membenarkan apl untuk mendapatkan kandungan tetingkap aktif. Apl hasad boleh mengambil keseluruhan kandungan tetingkap dan memeriksa semua teks kecuali kata laluan."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"dayakan kebolehcapaian untuk sementara"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Membenarkan aplikasi untuk mendayakan kebolehcapaian untuk sementara pada peranti. Apl hasad mungkin mendayakan kebolehcapaian tanpa izin pengguna."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"dapatkan maklumat tetingkap"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Membolehkan aplikasi mendapatkan maklumat tentang tetingkap dari pengurus tetingkap. Apl hasad boleh mendapatkan maklumat yang bertujuan untuk penggunaan sistem dalaman."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"dapatkan kembali token tetingkap"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Membenarkan apl mendapatkan kembali token tetingkap. Apl hasad mungkin meniru sistem dan menjalankan interaksi yang tidak dibenarkan dengan tetingkap aplikasi."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"dapatkan kembali statistik bingkai"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Membenarkan aplikasi mengumpul statistik bingkai. Apl hasad mungkin memerhatikan statistik bingkai tetingkap dari apl lain."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"tapis acara"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Membenarkan aplikasi mendaftarkan penapis input yang menapis strim semua acara pengguna sebelum dihantar. Apl hasad mungkin mengawal UI sistem tanpa campur tangan pengguna."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"besarkan paparan"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Membenarkan aplikasi membesarkan kandungan paparan. Apl hasad mungkin mengubah kandungan paparan yang akan membuatkan peranti tidak boleh digunakan."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"penutupan separa"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Meletakkan pengurus aktiviti dalam keadaan tutup. Tidak melaksanakan penutupan lengkap."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"halang pertukaran apl"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Membenarkan apl untuk menyiarkan pemberitahuan bahawa mesej SMS telah diterima. Apl hasad boleh menggunakannya untuk memalsukan mesej SMS masuk."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"hantar siaran WAP-TOLAK-diterima"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Membenarkan apl untuk menyiarkan pemberitahuan bahawa mesej WAP PUSH telah diterima. Apl hasad boleh menggunakannya untuk memalsukan penerimaan mesej MMS atau secara diam-diam menggantikan kandungan mana-mana laman web dengan varian hasad."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"hantar siaran markah rangkaian"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Membenarkan apl menyiarkan pemberitahuan bahawa rangkaian perlu diberi markah. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"hadkan bilangan proses yang dijalankan"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Membenarkan apl untuk mengawal bilangan maksimum proses yang akan berlangsung. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"memaksa apl latar belakang untuk menutup"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan Vpn. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"terikat pada kertas dinding"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kertas dinding. Tidak sekali-kali diperlukan untuk apl biasa."</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"terikat kepada paparan jauh"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi paparan jauh. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"terikat kepada perkhidmatan widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan widget. Tidak sekali-kali diperlukan untuk apl biasa."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"terikat kepada perkhidmatan pembekal laluan"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Membenarkan pemegang untuk terikat kepada mana-mana pembekal laluan yang berdaftar. Tidak sekali-kali diperlukan untuk apl normal."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"berinteraksi dengan pentadbir peranti"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Membenarkan pemegang menghantar tujuan kepada pentadbir peranti. Tidak sekali-kali diperlukan untuk apl biasa."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"ikat kepada input TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi input TV. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"tambah atau alih keluar pentadbir peranti"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Membenarkan pemegang menambah atau mengalih keluar pentadbir peranti aktif. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"tukar orientasi skrin"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Membenarkan apl untuk menggunakan sebarang penyahkod media yang dipasangkan untuk menyahkod main semula."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"urus bukti kelayakan yang dipercayai"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Membenarkan apl memasang dan menyahpasang sijil CA sebagai bukti kelayakan yang dipercayai."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"jalankan aplikasi pada masa melahu"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Kebenaran ini membolehkan sistem Android menjalankan aplikasi di latar belakang semasa peranti tidak digunakan."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"baca/tulis ke sumber yang dimiliki oleh diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Membenarkan apl membaca dan menulis ke sebarang sumber yang dimiliki oleh kumpulan diag; contohnya, fail dalam /dev. Hal ini berpotensi menjejaskan kestabilan dan keselamatan sistem. Perkara ini seharusnya HANYA digunakan untuk diagnosis khusus perkakasan oleh pengilang atau pengendali."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"dayakan atau lumpuhkan komponen apl"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Membenarkan apl membaca maklumat profil peribadi yang disimpan dalam peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna apl lain boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"ubah suai kad kenalan sendiri"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Membenarkan apl menukar atau menambah maklumat profil peribadi yang disimpan pada peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna apl boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"penderia (spt. denyut jantung)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Membenarkan apl mengakses data dari penderia yang anda gunakan untuk mengukur perkara yang berlaku dalam tubuh anda, seperti kadar denyutan jantung."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"baca aliran sosial anda"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Membenarkan apl mengakses dan menyegerakkan kemas kini sosial daripada anda dan rakan anda. Berhati-hati semasa berkongsi maklumat - ini membenarkan apl untuk membaca komunikasi di antara anda dan rakan anda pada rangkaian sosial tanpa mengira kerahsiaan. Nota: kebenaran ini tidak boleh dikuatkuasakan pada semua rangkaian sosial."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"tulis ke aliran sosial anda"</string>
@@ -477,6 +523,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Membenarkan apl menggunakan ciri peringkat rendah SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"baca penimbal bingkai"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Membenarkan apl membaca kandungan penimbal bingkai."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"akses InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Membenarkan apl menggunakan ciri peringkat rendah InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurasikan paparan Wifi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Membenarkan apl mengkonfigurasi dan menyambung ke paparan Wifi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kawal paparan Wifi"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Membenarkan apl untuk mengubah suai tetapan audio global seperti kelantangan dan pembesar suara mana digunakan untuk output."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"rakam audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Membenarkan apl untuk merakam audio menggunakan mikrofon. Kebenaran ini membenarkan apl untuk merakam audio pada bila-bila masa tanpa pengesahan anda."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikasi sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Membenarkan apl menghantar arahan kepada SIM. Ini amat berbahaya."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ambil gambar dan video"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Membenarkan apl mengambil gambar dan video menggunakan kamera. Kebenaran ini membenarkan apl untuk menggunakan kamera pada bila-bila masa tanpa pengesahan anda."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"lumpuhkan LED penunjuk penghantaran semasa kamera sedang digunakan"</string>
@@ -550,6 +600,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Membenarkan apl untuk mengawal ciri-ciri telefon peranti. Apl dengan kebenaran ini boleh menukar rangkaian, menghidupkan dan mematikan radio telefon dan sebagainya tanpa memberitahu anda."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"baca status dan identiti telefon"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Membenarkan apl mengakses ciri telefon pada peranti. Kebenaran ini membolehkan apl menentukan nombor telefon dan ID peranti, sama ada panggilan aktif dan nombor jauh yang dihubungkan dengan panggilan."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"baca keadaan telefon yang tepat"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Membenarkan apl mengakses keadaan telefon yang tepat. Kebenaran ini membolehkan apl menentukan status panggilan sebenar, sama ada panggilan aktif atau di latar belakang, kegagalan panggilan, status sambungan data yang tepat dan kegagalan sambungan data."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"menghalang tablet daripada tidur"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"halang telefon daripada tidur"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Membenarkan apl menghalang tablet daripada tidur."</string>
@@ -617,6 +669,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Tukar keadaan WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Membenarkan apl untuk menyambungkan tablet ke dan menyahsambungkan tablet dari rangkaian WiMaX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Membenarkan apl untuk menyambungkan telefon ke dan menyahsambung telefon dari rangkaian WiMaX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"beri markah kepada rangkaian"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Membenarkan apl menilai rangkaian dan mempengaruhi rangkaian yang harus dipilih oleh tablet."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Membenarkan apl menilai rangkaian dan mempengaruhi rangkaian yang harus dipilih oleh telefon."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"berpasangan dengan peranti Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Membenarkan apl melihat konfigurasi Bluetooth pada tablet dan untuk membuat serta menerima sambungan dengan peranti yang dipasangkan."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Membenarkan apl melihat konfigurasi Bluetooth pada telefon dan membuat serta menerima sambungan dengan peranti yang dipasangkan."</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Membenarkan apl untuk mendapatkan semula, memeriksa dan memadam bersih pemberitahuan, termasuk yang disiarkan oleh apl lain."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ikat kepada perkhidmatan pendengar pemberitahuan"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan pendengar pemberitahuan. Tidak sekali-kali diperlukan untuk apl biasa."</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"gunakan apl konfigurasi yang disediakan oleh pembawa"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Membenarkan pemegang menggunakan apl konfigurasi yang diberikan oleh pembawa. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"dengar pemerhatian mengenai keadaan rangkaian"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Membenarkan aplikasi mendengar pemerhatian tentang keadaan rangkaian. Tidak sekali-kali diperlukan untuk apl biasa."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"tukar penentukuran peranti input"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Membenarkan apl mengubah suai parameter penentukuran skrin sentuh. Ini tidak sekali-kali diperlukan untuk apl biasa."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"akses sijil DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Membenarkan aplikasi memperuntuk dan menggunakan sijil DRM. Tidak sekali-kali diperlukan untuk apl biasa."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Tetapkan peraturan kata laluan"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Mengawal panjang dan aksara yang dibenarkan dalam kata laluan buka kunci skrin."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Memantau percubaan buka kunci skrin"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Rumah"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Kerja"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Lain-lain"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Tiada aplikasi ditemui untuk melihat kenalan ini."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Taip kod PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Taip PUK dan kod PIN baharu"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kod PUK"</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Membenarkan aplikasi mengakses storan selamat pengawal kekunci."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Kawal paparkan dan sembunyikan pengawal kekunci"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Membenarkan aplikasi untuk mengawal pengawal kekunci."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Dengar perubahan keadaan amanah."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Membenarkan aplikasi mendengar perubahan dalam keadaan amanah."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Mengikat kepada perkhidmatan ejen amanah"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Membenarkan aplikasi terikat kepada perkhidmatan ejen amanah."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Berinteraksi dengan kemas kini dan sistem pemulihan"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Membenarkan aplikasi berinteraksi dengan sistem pemulihan dan kemas kini sistem."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Sentuh dua kali untuk mendapatkan kawalan zum"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Tidak dapat menambahkan widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Pergi"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Kertas dinding"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Tukar kertas dinding"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Pendengar pemberitahuan"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"VPN diaktifkan"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN diaktifkan oleh <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Sentuh untuk mengurus rangkaian."</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Masuk"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Pilih apl"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Tidak dapat melancarkan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Kongsi dengan"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Kongsi dengan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Pemegang gelongsor. Sentuh &amp; tahan."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Luncurkan ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Luncurkan ke kanan untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Buka kunci"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Leret untuk membuka kunci."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Pasangkan set kepala untuk mendengar kekunci kata laluan disebutkan."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Titik."</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Paparan wayarles"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Output media"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Sambung ke peranti"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Hantar skrin ke peranti"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Mencari peranti..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Tetapan"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Putuskan sambungan"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Mengimbas…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Menyambung..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Tersedia"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Tindih #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", selamat"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Paparan wayarles disambungkan"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Skrin ini ditunjukkan pada peranti lain"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Menghantar skrin"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Menyambung ke <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Menghantar skrin"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Disambungkan ke <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Putus sambungan"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan kecemasan"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Corak"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kad SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kod PIN salah."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK mestilah 8 nombor atau lebih."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Kod PUK mestilah 8 nombor."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan semula kod PIN yang betul. Percubaan berulang akan melumpuhkan SIM secara kekal."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kod PIN tidak sepadan"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak percubaan melukis corak"</string>
@@ -1649,5 +1719,16 @@
     <item quantity="other" msgid="4730868920742952817">"Cuba <xliff:g id="COUNT">%d</xliff:g> saat lagi"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Cuba sebentar lagi"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Leret ke bawah untuk keluar dari skrin penuh"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Leret ke bawah dari atas untuk keluar dari skrin penuh."</string>
+    <string name="done_label" msgid="2093726099505892398">"Selesai"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Penggelangsar bulatan jam"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Penggelangsar bulatan minit"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Pilih jam"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Pilih minit"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Grid hari bulanan"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Senarai tahun"</string>
+    <string name="select_day" msgid="7774759604701773332">"Pilih bulan dan hari"</string>
+    <string name="select_year" msgid="7952052866994196170">"Pilih tahun"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> dipilih"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> dipadamkan"</string>
 </resources>
diff --git a/core/res/res/values-ms/donottranslate-cldr.xml b/core/res/res/values-ms/donottranslate-cldr.xml
deleted file mode 100755
index 7da5a72..0000000
--- a/core/res/res/values-ms/donottranslate-cldr.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="numeric_date_template">"%s/%s/%s"</string>
-    <string name="month_day_year">%d %B %Y</string>
-    <string name="time_of_day">%-l:%M:%S %p</string>
-    <string name="date_and_time">%-l:%M:%S %p %d %b %Y</string>
-    <string name="date_time">%2$s %1$s</string>
-</resources>
diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml
deleted file mode 100644
index a9fe930..0000000
--- a/core/res/res/values-ms/strings.xml
+++ /dev/null
@@ -1,1587 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="byteShort" msgid="8340973892742019101">"B."</string>
-    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
-    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
-    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
-    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
-    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
-    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
-    <string name="untitled" msgid="4638956954852782576">"&lt;Tidak bertajuk&gt;"</string>
-    <string name="ellipsis" msgid="7899829516048813237">"..."</string>
-    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
-    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(Tiada nombor telefon)"</string>
-    <string name="unknownName" msgid="2277556546742746522">"(Tidak diketahui)"</string>
-    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Mel suara"</string>
-    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
-    <string name="mmiError" msgid="5154499457739052907">"Masalah sambungan atau kod MMI tidak sah"</string>
-    <string name="mmiFdnError" msgid="5224398216385316471">"Pengendalian dihadkan kepada nombor dailan tetap sahaja."</string>
-    <string name="serviceEnabled" msgid="8147278346414714315">"Perkhidmatan telah didayakan."</string>
-    <string name="serviceEnabledFor" msgid="6856228140453471041">"Perkhidmatan didayakan untuk:"</string>
-    <string name="serviceDisabled" msgid="1937553226592516411">"Perkhidmatan telah dilumpuhkan."</string>
-    <string name="serviceRegistered" msgid="6275019082598102493">"Pendaftaran berjaya."</string>
-    <string name="serviceErased" msgid="1288584695297200972">"Pemadaman berjaya."</string>
-    <string name="passwordIncorrect" msgid="7612208839450128715">"Kata laluan salah"</string>
-    <string name="mmiComplete" msgid="8232527495411698359">"MMI selesai."</string>
-    <string name="badPin" msgid="9015277645546710014">"PIN lama yang anda taipkan tidak betul."</string>
-    <string name="badPuk" msgid="5487257647081132201">"Kod PUK yang anda taipkan tidak betul."</string>
-    <string name="mismatchPin" msgid="609379054496863419">"PIN yang anda taip tidak sepadan."</string>
-    <string name="invalidPin" msgid="3850018445187475377">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string>
-    <string name="invalidPuk" msgid="8761456210898036513">"Taipkan PUK yang mempunyai 8 nombor atau lebih panjang."</string>
-    <string name="needPuk" msgid="919668385956251611">"Kad SIM anda dikunci PUK. Taipkan kod PUK untuk membuka kuncinya."</string>
-    <string name="needPuk2" msgid="4526033371987193070">"Taipkan PUK2 untuk menyahsekat kad SIM."</string>
-    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
-    <string name="meid" msgid="4841221237681254195">"MEID"</string>
-    <string name="ClipMmi" msgid="6952821216480289285">"ID Pemanggil Masuk"</string>
-    <string name="ClirMmi" msgid="7784673673446833091">"ID Pemanggil Keluar"</string>
-    <string name="CfMmi" msgid="5123218989141573515">"Pemajuan panggilan"</string>
-    <string name="CwMmi" msgid="9129678056795016867">"Panggilan menunggu"</string>
-    <string name="BaMmi" msgid="455193067926770581">"Sekatan panggilan"</string>
-    <string name="PwdMmi" msgid="7043715687905254199">"Tukar kata laluan"</string>
-    <string name="PinMmi" msgid="3113117780361190304">"Penukaran PIN"</string>
-    <string name="CnipMmi" msgid="3110534680557857162">"Nombor panggilan ada"</string>
-    <string name="CnirMmi" msgid="3062102121430548731">"Nombor panggilan terhad"</string>
-    <string name="ThreeWCMmi" msgid="9051047170321190368">"Panggilan tiga hala"</string>
-    <string name="RuacMmi" msgid="7827887459138308886">"Penolakan panggilan mengganggu yang tidak diingini"</string>
-    <string name="CndMmi" msgid="3116446237081575808">"Penghantaran nombor panggilan"</string>
-    <string name="DndMmi" msgid="1265478932418334331">"Jangan ganggu"</string>
-    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"ID pemanggil secara lalainya ditetapkan kepada terhad. Panggilan seterusnya: Terhad"</string>
-    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"ID pemanggil secara lalainya ditetapkan kepada terhad. Panggilan seterusnya: Tidak terhad"</string>
-    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"ID pemanggil secara lalainya ditetapkan kepada tidak terhad. Panggilan seterusnya: Terhad"</string>
-    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID pemanggil secara lalainya ditetapkan kepada tidak dihadkan. Panggilan seterusnya: Tidak terhad"</string>
-    <string name="serviceNotProvisioned" msgid="8614830180508686666">"Perkhidmatan yang tidak diuntukkan."</string>
-    <string name="CLIRPermanent" msgid="3377371145926835671">"Anda tidak boleh mengubah tetapan ID pemanggil."</string>
-    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Akses terhad diubah"</string>
-    <string name="RestrictedOnData" msgid="8653794784690065540">"Perkhidmatan data disekat."</string>
-    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Perkhidmatan kecemasan disekat."</string>
-    <string name="RestrictedOnNormal" msgid="4953867011389750673">"Perkhidmatan suara disekat."</string>
-    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"Semua perkhidmatan suara disekat."</string>
-    <string name="RestrictedOnSms" msgid="8314352327461638897">"Perkhidmatan SMS disekat."</string>
-    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"Perkhidmatan suara/data disekat."</string>
-    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"Perkhidmatan suara/SMS disekat."</string>
-    <string name="RestrictedOnAll" msgid="5643028264466092821">"Semua perkhidmatan suara/data/SMS disekat."</string>
-    <string name="serviceClassVoice" msgid="1258393812335258019">"Suara"</string>
-    <string name="serviceClassData" msgid="872456782077937893">"Data"</string>
-    <string name="serviceClassFAX" msgid="5566624998840486475">"FAKS"</string>
-    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
-    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Tak segerak"</string>
-    <string name="serviceClassDataSync" msgid="7530000519646054776">"Penyegerakan"</string>
-    <string name="serviceClassPacket" msgid="6991006557993423453">"Bingkisan"</string>
-    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
-    <string name="roamingText0" msgid="7170335472198694945">"Penunjuk Perayauan Dihidupkan"</string>
-    <string name="roamingText1" msgid="5314861519752538922">"Penunjuk Perayauan Dimatikan"</string>
-    <string name="roamingText2" msgid="8969929049081268115">"Penunjuk Perayauan Berkelip"</string>
-    <string name="roamingText3" msgid="5148255027043943317">"Di luar kawasan kejiranan"</string>
-    <string name="roamingText4" msgid="8808456682550796530">"Di luar Bangunan"</string>
-    <string name="roamingText5" msgid="7604063252850354350">"Perayauan - Sistem Diutamakan"</string>
-    <string name="roamingText6" msgid="2059440825782871513">"Perayauan - Sistem Tersedia"</string>
-    <string name="roamingText7" msgid="7112078724097233605">"Perayauan - Rakan Kongsi Gabungan"</string>
-    <string name="roamingText8" msgid="5989569778604089291">"Perayauan - Rakan Kongsi Premium"</string>
-    <string name="roamingText9" msgid="7969296811355152491">"Perayauan - Kefungsian Perkhidmatan Penuh"</string>
-    <string name="roamingText10" msgid="3992906999815316417">"Perayauan - Kefungsian Perkhidmatan Separa"</string>
-    <string name="roamingText11" msgid="4154476854426920970">"Sepanduk Perayauan Dihidupkan"</string>
-    <string name="roamingText12" msgid="1189071119992726320">"Sepanduk Perayauan Dimatikan"</string>
-    <string name="roamingTextSearching" msgid="8360141885972279963">"Mencari Perkhidmatan"</string>
-    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak dimajukan"</string>
-    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
-    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> selepas <xliff:g id="TIME_DELAY">{2}</xliff:g> saat"</string>
-    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak dimajukan"</string>
-    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: Tidak dimajukan"</string>
-    <string name="fcComplete" msgid="3118848230966886575">"Kod ciri selesai."</string>
-    <string name="fcError" msgid="3327560126588500777">"Masalah sambungan atau kod ciri tidak sah."</string>
-    <string name="httpErrorOk" msgid="1191919378083472204">"OK"</string>
-    <string name="httpError" msgid="7956392511146698522">"Berlaku ralat rangkaian."</string>
-    <string name="httpErrorLookup" msgid="4711687456111963163">"Tidak menemui URL."</string>
-    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"Skema pengesahan tapak tidak disokong."</string>
-    <string name="httpErrorAuth" msgid="1435065629438044534">"Tidak dapat mengesahkan."</string>
-    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"Pengesahan melalui pelayan proksi tidak berjaya."</string>
-    <string name="httpErrorConnect" msgid="8714273236364640549">"Tidak dapat menyambung ke pelayan."</string>
-    <string name="httpErrorIO" msgid="2340558197489302188">"Tidak dapat berkomunikasi dengan pelayan. Cuba sebentar lagi."</string>
-    <string name="httpErrorTimeout" msgid="4743403703762883954">"Sambungan ke pelayan tamat masa."</string>
-    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"Halaman ini mengandungi terlalu banyak pengubahhalaan pelayan."</string>
-    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Protokol tidak disokong."</string>
-    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Tidak dapat mewujudkan sambungan selamat."</string>
-    <string name="httpErrorBadUrl" msgid="3636929722728881972">"Tidak dapat membuka halaman kerana URL tidak sah."</string>
-    <string name="httpErrorFile" msgid="2170788515052558676">"Tidak dapat mengakses fail."</string>
-    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Tidak menemui fail yang diminta."</string>
-    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Terlalu banyak permintaan sedang diproses. Cuba sebentar lagi."</string>
-    <string name="notification_title" msgid="8967710025036163822">"Ralat log masuk untuk <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string>
-    <string name="contentServiceSync" msgid="8353523060269335667">"Penyegerakan"</string>
-    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Penyegerakan"</string>
-    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Terlalu banyak pemadaman <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
-    <string name="low_memory" product="tablet" msgid="6494019234102154896">"Storan tablet penuh. Padamkan beberapa fail untuk mengosongkan ruang."</string>
-    <string name="low_memory" product="default" msgid="3475999286680000541">"Storan telefon penuh. Padamkan beberapa fail untuk mengosongkan ruang."</string>
-    <string name="me" msgid="6545696007631404292">"Saya"</string>
-    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Pilihan tablet"</string>
-    <string name="power_dialog" product="default" msgid="1319919075463988638">"Pilihan telefon"</string>
-    <string name="silent_mode" msgid="7167703389802618663">"Mod senyap"</string>
-    <string name="turn_on_radio" msgid="3912793092339962371">"Hidupkan wayarles"</string>
-    <string name="turn_off_radio" msgid="8198784949987062346">"Matikan wayarles"</string>
-    <string name="screen_lock" msgid="799094655496098153">"Kunci skrin"</string>
-    <string name="power_off" msgid="4266614107412865048">"Matikan kuasa"</string>
-    <string name="silent_mode_silent" msgid="319298163018473078">"Pendering dimatikan"</string>
-    <string name="silent_mode_vibrate" msgid="7072043388581551395">"Pendering bergetar"</string>
-    <string name="silent_mode_ring" msgid="8592241816194074353">"Pendering dihidupkan"</string>
-    <string name="shutdown_progress" msgid="2281079257329981203">"Mematikan..."</string>
-    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablet anda akan dimatikan."</string>
-    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefon anda akan dimatikan."</string>
-    <string name="shutdown_confirm_question" msgid="2906544768881136183">"Adakah anda mahu menutup?"</string>
-    <string name="reboot_safemode_title" msgid="7054509914500140361">"But semula ke mod selamat"</string>
-    <string name="reboot_safemode_confirm" msgid="55293944502784668">"Adakah anda mahu but semula ke dalam mod selamat? Ini akan melumpuhkan semua aplikasi pihak ketiga yang telah anda pasang. Semua aplikasi itu akan dipulihkan semula apabila anda membut semula."</string>
-    <string name="recent_tasks_title" msgid="3691764623638127888">"Baru-baru ini"</string>
-    <string name="no_recent_tasks" msgid="8794906658732193473">"Tiada apl terbaharu"</string>
-    <string name="global_actions" product="tablet" msgid="408477140088053665">"Pilihan tablet"</string>
-    <string name="global_actions" product="default" msgid="2406416831541615258">"Pilihan telefon"</string>
-    <string name="global_action_lock" msgid="2844945191792119712">"Kunci skrin"</string>
-    <string name="global_action_power_off" msgid="4471879440839879722">"Matikan kuasa"</string>
-    <string name="global_action_bug_report" msgid="7934010578922304799">"Laporan pepijat"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"Ambil laporan pepijat"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Ini akan mengumpul maklumat tentang keadaan peranti semasa anda untuk dihantarkan sebagai mesej e-mel. Proses ini akan mengambil sedikit masa bermula dari laporan pepijat sehingga siap untuk dihantar; jadi diharap bersabar."</string>
-    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Mod senyap"</string>
-    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Bunyi DIMATIKAN"</string>
-    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Bunyi DIHIDUPKAN"</string>
-    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mod pesawat"</string>
-    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Mod Pesawat DIHIDUPKAN"</string>
-    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Mod Pesawat DIMATIKAN"</string>
-    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
-    <string name="safeMode" msgid="2788228061547930246">"Mod selamat"</string>
-    <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
-    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"Perkhidmatan yang anda perlu bayar"</string>
-    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"Melakukan perkara yang boleh mengenakan bayaran kepada anda."</string>
-    <string name="permgrouplab_messages" msgid="7521249148445456662">"Mesej anda"</string>
-    <string name="permgroupdesc_messages" msgid="7821999071003699236">"Membaca dan menulis SMS, e-mel, dan mesej lain."</string>
-    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"Maklumat peribadi anda"</string>
-    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"Akses langsung ke maklumat tentang anda, yang disimpan pada kad kenalan anda."</string>
-    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"Maklumat sosial anda"</string>
-    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"Akses langsung ke maklumat tentang kenalan anda dan sambungan sosial."</string>
-    <string name="permgrouplab_location" msgid="635149742436692049">"Lokasi anda"</string>
-    <string name="permgroupdesc_location" msgid="5704679763124170100">"Pantau lokasi fizikal anda."</string>
-    <string name="permgrouplab_network" msgid="5808983377727109831">"Komunikasi rangkaian"</string>
-    <string name="permgroupdesc_network" msgid="4478299413241861987">"Akses pelbagai ciri rangkaian."</string>
-    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"Bluetooth"</string>
-    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Akses peranti dan rangkaian melalui Bluetooth."</string>
-    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Tetapan Audio"</string>
-    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Tukar tetapan audio."</string>
-    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Menjejaskan Bateri"</string>
-    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Gunakan ciri yang boleh menghabiskan bateri dengan cepat."</string>
-    <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendar"</string>
-    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Akses langsung ke kalendar dan acara."</string>
-    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"Baca Kamus Pengguna"</string>
-    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"Baca perkataan di dalam kamus pengguna."</string>
-    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"Tulis Kamus Pengguna"</string>
-    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"Tambah perkataan ke kamus pengguna."</string>
-    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"Penanda halaman dan Sejarah"</string>
-    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"Akses langsung ke penanda halaman dan sejarah penyemak imbas."</string>
-    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"Penggera"</string>
-    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"Tetapkan jam penggera."</string>
-    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"Mel suara"</string>
-    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"Akses langsung ke mel suara."</string>
-    <string name="permgrouplab_microphone" msgid="171539900250043464">"Mikrofon"</string>
-    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"Akses langsung ke mikrofon untuk merakam audio."</string>
-    <string name="permgrouplab_camera" msgid="4820372495894586615">"Kamera"</string>
-    <string name="permgroupdesc_camera" msgid="2933667372289567714">"Akses langsung ke kamera untuk merakam imej atau video."</string>
-    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"Kunci skrin"</string>
-    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"Keupayaan untuk mempengaruhi kelakuan skrin kunci pada peranti anda."</string>
-    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"Maklumat aplikasi anda"</string>
-    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"Keupayaan untuk mempengaruhi tingkah laku aplikasi lain pada peranti anda."</string>
-    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"Kertas dinding"</string>
-    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"Tukar tetapan kertas dinding peranti."</string>
-    <string name="permgrouplab_systemClock" msgid="406535759236612992">"Jam"</string>
-    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"Tukar masa peranti atau zon masa."</string>
-    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"Bar Status"</string>
-    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"Tukar tetapan bar status peranti."</string>
-    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"Tetapan Penyegerakan"</string>
-    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"Akses ke tetapan segerakan."</string>
-    <string name="permgrouplab_accounts" msgid="3359646291125325519">"Akaun anda"</string>
-    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"Akses akaun yang tersedia."</string>
-    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"Kawalan perkakasan"</string>
-    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"Akses langsung kepada perkakasan pada set tangan."</string>
-    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"Panggilan telefon"</string>
-    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"Memantau, merekodkan dan memproses panggilan telefon."</string>
-    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"Alatan sistem"</string>
-    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"Akses dan kawalan peringkat lebih rendah bagi sistem."</string>
-    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"Alatan pembangunan"</string>
-    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Ciri hanya diperlukan untuk pembangun apl."</string>
-    <string name="permgrouplab_display" msgid="4279909676036402636">"Aplikasi UI Lain"</string>
-    <string name="permgroupdesc_display" msgid="6051002031933013714">"Mempengaruhi UI aplikasi lain."</string>
-    <string name="permgrouplab_storage" msgid="1971118770546336966">"Storan"</string>
-    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Akses storan USB."</string>
-    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Akses kad SD."</string>
-    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Ciri kebolehaksesan"</string>
-    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Ciri yang boleh diminta oleh teknologi bantuan."</string>
-    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"Dapatkan kembali kandungan tetingkap"</string>
-    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"Periksa kandungan tetingkap yang berinteraksi dengan anda."</string>
-    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"Hidupkan Jelajah melalui Sentuhan"</string>
-    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"Item yang disentuh akan disebut dengan kuat dan skrin boleh dijelajah menggunakan gerak isyarat."</string>
-    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"Hidupkan kebolehcapaian web dipertingkat"</string>
-    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"Skrip boleh dipasang untuk menjadikan kandungan apl lebih mudah diakses."</string>
-    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"Perhatikan teks yang anda taip"</string>
-    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"Berserta data peribadi seperti nombor kad kredit dan kata laluan."</string>
-    <string name="permlab_statusBar" msgid="7417192629601890791">"lumpuhkan atau ubah suai bar status"</string>
-    <string name="permdesc_statusBar" msgid="8434669549504290975">"Membenarkan apl melumpuhkan bar status atau menambah dan mengalih keluar ikon sistem."</string>
-    <string name="permlab_statusBarService" msgid="7247281911387931485">"bar status"</string>
-    <string name="permdesc_statusBarService" msgid="716113660795976060">"Membenarkan apl menjadi bar status."</string>
-    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"kembangkan/runtuhkan bar status"</string>
-    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Membenarkan apl mengembangkan atau meruntuhkan bar status."</string>
-    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"tukar laluan panggilan keluar"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Membenarkan apl memproses panggilan keluar dan menukar nombor yang perlu didail. Kebenaran ini membolehkan apl memantau, mengalih atau menghalang panggilan keluar."</string>
-    <string name="permlab_receiveSms" msgid="8673471768947895082">"terima mesej teks (SMS)"</string>
-    <string name="permdesc_receiveSms" msgid="6424387754228766939">"Membenarkan apl menerima dan memproses mesej SMS. Ini bermakna apl boleh memantau atau memadam mesej yang dihantar ke peranti anda tanpa menunjukkannya kepada anda."</string>
-    <string name="permlab_receiveMms" msgid="1821317344668257098">"terima mesej teks (MMS)"</string>
-    <string name="permdesc_receiveMms" msgid="533019437263212260">"Membenarkan apl menerima dan memproses mesej MMS. Ini bermakna apl boleh memantau atau memadam mesej yang dihantar ke peranti anda tanpa menunjukkannya kepada anda."</string>
-    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"terima siaran kecemasan"</string>
-    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Membenarkan apl untuk menerima dan memproses mesej siaran kecemasan. Kebenaran ini hanya tersedia kepada apl sistem."</string>
-    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"baca mesej siaran sel"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Membolehkan apl membaca mesej siaran sel yang diterima oleh peranti anda. Isyarat siaran sel dihantar di beberapa lokasi untuk memberi amaran kepada anda tentang situasi kecemasan. Apl hasad boleh mengganggu prestasi atau operasi peranti anda apabila siaran sel kecemasan diterima."</string>
-    <string name="permlab_sendSms" msgid="5600830612147671529">"hantar mesej SMS"</string>
-    <string name="permdesc_sendSms" msgid="7094729298204937667">"Membenarkan apl menghantar mesej SMS. Ini boleh menyebabkan caj di luar jangkaan. Apl hasad boleh membuat anda kerugian wang dengan menghantar mesej tanpa pengesahan anda."</string>
-    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"acara hantar respons-melalui-mesej"</string>
-    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"Membenarkan apl menghantar permintaan kepada apl permesejan lain untuk mengendalikan acara respons-melalui-mesej untuk panggilan masuk."</string>
-    <string name="permlab_readSms" msgid="8745086572213270480">"baca mesej teks anda (SMS atau MMS)"</string>
-    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Membenarkan apl membaca mesej SMS yang tersimpan pada tablet atau kad SIM anda. Ini membenarkan apl membaca semua mesej SMS, tanpa mengira kandungan atau kerahsiaan."</string>
-    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Membenarkan apl membaca mesej SMS yang tersimpan pada telefon atau kad SIM anda. Ini membenarkan apl membaca semua mesej SMS, tanpa mengira kandungan atau kerahsiaan."</string>
-    <string name="permlab_writeSms" msgid="3216950472636214774">"edit mesej teks (SMS atau MMS)"</string>
-    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"Membenarkan apl untuk menulis kepada mesej SMS yang disimpan pada tablet atau kad SIM anda. Apl hasad boleh memadam mesej anda."</string>
-    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"Membenarkan apl untuk menulis kepada mesej SMS yang disimpan pada telefon atau kad SIM anda. Apl hasad boleh memadam mesej anda."</string>
-    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"terima mesej teks (WAP)"</string>
-    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Membenarkan apl menerima dan memproses mesej WAP. Kebenaran ini termasuk keupayaan untuk memantau atau memadam mesej yang dihantar kepada anda tanpa menunjukkannya kepada anda."</string>
-    <string name="permlab_getTasks" msgid="6466095396623933906">"dapatkan semula apl yang sedang dijalankan"</string>
-    <string name="permdesc_getTasks" msgid="7454215995847658102">"Membenarkan apl mengambil maklumat tentang tugasan yang sedang dan baru berjalan. Ini boleh membenarkan apl untuk menemui maklumat tentang apl mana yang digunakan pada peranti."</string>
-    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"berinteraksi sesama pengguna"</string>
-    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Membenarkan apl melakukan tindakan merentasi pengguna berbeza pada peranti. Apl hasad boleh menggunakan ini untuk melanggar perlindungan antara pengguna."</string>
-    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"lesen penuh untuk berinteraksi sesama pengguna"</string>
-    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"Membenarkan semua interaksi yang mungkin sesama pengguna."</string>
-    <string name="permlab_manageUsers" msgid="1676150911672282428">"urus pengguna"</string>
-    <string name="permdesc_manageUsers" msgid="8409306667645355638">"Membenarkan apl mengurus pengguna pada peranti ini, termasuk pertanyaan, pembuatan dan pemadaman."</string>
-    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"dapatkan butiran apl yang berjalan"</string>
-    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"Membenarkan apl untuk mendapatkan maklumat terperinci tentang tugasan yang sedang dan baru berjalan. Apl hasad boleh mendapat maklumat peribadi tentang apl lain."</string>
-    <string name="permlab_reorderTasks" msgid="2018575526934422779">"susun semula tertib apl yang dijalankan"</string>
-    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Membenarkan apl memindahkan tugasan ke latar depan dan latar belakang. Apl boleh melakukan ini tanpa input anda."</string>
-    <string name="permlab_removeTasks" msgid="6821513401870377403">"hentikan apl yang sedang dijalankan"</string>
-    <string name="permdesc_removeTasks" msgid="1394714352062635493">"Membenarkan apl untuk mengalih keluar tugasan dan melupuskan aplnya. Apl hasad boleh mengganggu tingkah laku apl lain."</string>
-    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"urus tindanan aktiviti"</string>
-    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"Membenarkan apl menambah, mengalih keluar dan mengubah suai tindanan aktiviti tempat apl lain berjalan. Apl hasad boleh mengganggu tingkah laku apl lain."</string>
-    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"mulakan sebarang aktiviti"</string>
-    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"Membenarkan apl untuk memulakan apa-apa aktiviti, tanpa mengira perlindungan kebenaran atau keadaan eksport."</string>
-    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"tetapkan keserasian skrin"</string>
-    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"Membenarkan apl mengawal mod keserasian skrin aplikasi lain. Aplikasi hasad mungkin mematahkan kelakuan aplikasi lain."</string>
-    <string name="permlab_setDebugApp" msgid="3022107198686584052">"dayakan penyahpepijatan apl"</string>
-    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"Membenarkan apl untuk menghidupkan penyahpepijatan untuk apl lain. Apl hasad boleh menggunakannya untuk menghapuskan apl lain."</string>
-    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"tukar tetapan paparan sistem"</string>
-    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"Membenarkan apl mengubah konfigurasi semasa seperti tempat peristiwa atau saiz fon keseluruhan."</string>
-    <string name="permlab_enableCarMode" msgid="5684504058192921098">"dayakan mod kereta"</string>
-    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Membenarkan apl mendayakan mod kereta."</string>
-    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"tutup apl lain"</string>
-    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Membenarkan apl untuk menamatkan proses latar belakang apl lain. Ini boleh menyebabkan apl lain berhenti berjalan."</string>
-    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"paksa apl lain supaya berhenti"</string>
-    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"Membenarkan apl menghentikan apl lain secara paksa."</string>
-    <string name="permlab_forceBack" msgid="652935204072584616">"memaksa apl untuk menutup"</string>
-    <string name="permdesc_forceBack" msgid="3892295830419513623">"Membenarkan apl untuk memaksa apa-apa aktiviti yang ada di latar depan untuk tutup dan kembali. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_dump" msgid="1681799862438954752">"mendapatkan semula keadaan dalaman sistem"</string>
-    <string name="permdesc_dump" msgid="1778299088692290329">"Membenarkan apl untuk mendapatkan semula keadaan dalaman sistem. Apl hasad boleh mendapatkan pelbagai maklumat peribadi dan selamat yang biasanya tidak ia perlukan."</string>
-    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"dapatkan semula kandungan skrin"</string>
-    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Membenarkan apl untuk mendapatkan kandungan tetingkap aktif. Apl hasad boleh mengambil keseluruhan kandungan tetingkap dan memeriksa semua teks kecuali kata laluan."</string>
-    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"dayakan kebolehcapaian untuk sementara"</string>
-    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Membenarkan aplikasi untuk mendayakan kebolehcapaian untuk sementara pada peranti. Apl hasad mungkin mendayakan kebolehcapaian tanpa izin pengguna."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"dapatkan maklumat tetingkap"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Membolehkan aplikasi mendapatkan maklumat tentang tetingkap dari pengurus tetingkap. Apl hasad boleh mendapatkan maklumat yang bertujuan untuk penggunaan sistem dalaman."</string>
-    <string name="permlab_filter_events" msgid="8675535648807427389">"tapis acara"</string>
-    <string name="permdesc_filter_events" msgid="8006236315888347680">"Membenarkan aplikasi mendaftarkan penapis input yang menapis strim semua acara pengguna sebelum dihantar. Apl hasad mungkin mengawal UI sistem tanpa campur tangan pengguna."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"besarkan paparan"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Membenarkan aplikasi membesarkan kandungan paparan. Apl hasad mungkin mengubah kandungan paparan yang akan membuatkan peranti tidak boleh digunakan."</string>
-    <string name="permlab_shutdown" msgid="7185747824038909016">"penutupan separa"</string>
-    <string name="permdesc_shutdown" msgid="7046500838746291775">"Meletakkan pengurus aktiviti dalam keadaan tutup. Tidak melaksanakan penutupan lengkap."</string>
-    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"halang pertukaran apl"</string>
-    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Menghalang pengguna daripada bertukar kepada apl lain."</string>
-    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"dapatkan maklumat apl semasa"</string>
-    <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Membenarkan pemegang mendapatkan maklumat peribadi tentang permohonan semasa di latar hadapan skrin"</string>
-    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"pantau dan kawal semua pelancaran apl"</string>
-    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Membenarkan apl untuk memantau dan mengawal cara sistem melancarkan aktiviti. Apl hasad boleh menjejaskan sistem sepenuhnya. Kebenaran ini hanya diperlukan untuk pembangunan, tidak sekali-kali untuk penggunaan biasa."</string>
-    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"hantar siaran bahawa pakej telah dialih keluar"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Membenarkan apl untuk menyiarkan pemberitahuan bahawa pakej apl telah dikeluarkan. Apl hasad boleh menggunakannya untuk membunuh mana-mana apl lain yang sedang berjalan."</string>
-    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"hantar siaran SMS diterima"</string>
-    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Membenarkan apl untuk menyiarkan pemberitahuan bahawa mesej SMS telah diterima. Apl hasad boleh menggunakannya untuk memalsukan mesej SMS masuk."</string>
-    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"hantar siaran WAP-TOLAK-diterima"</string>
-    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Membenarkan apl untuk menyiarkan pemberitahuan bahawa mesej WAP PUSH telah diterima. Apl hasad boleh menggunakannya untuk memalsukan penerimaan mesej MMS atau secara diam-diam menggantikan kandungan mana-mana laman web dengan varian hasad."</string>
-    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"hadkan bilangan proses yang dijalankan"</string>
-    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Membenarkan apl untuk mengawal bilangan maksimum proses yang akan berlangsung. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"memaksa apl latar belakang untuk menutup"</string>
-    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"Membenarkan apl untuk mengawal sama ada aktiviti sentiasa selesai sebaik sahaja ia pergi ke latar belakang. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_batteryStats" msgid="2789610673514103364">"baca statistik bateri"</string>
-    <string name="permdesc_batteryStats" msgid="5897346582882915114">"Membenarkan aplikasi membaca data penggunaan bateri tahap rendah semasa. Boleh membenarkan aplikasi untuk mencari maklumat terperinci tentang apl yang anda gunakan."</string>
-    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"ubah suai statistik bateri"</string>
-    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"Membenarkan apl mengubah suai statistik bateri yang dikumpul. Bukan untuk penggunaan apl normal."</string>
-    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"dapatkan semula statistik pengendalian apl"</string>
-    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"Membenarkan apl mendapatkan semula statistik pengendalian aplikasi yang dikumpul. Bukan untuk kegunaan apl biasa."</string>
-    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"ubah suai apl ops statistik"</string>
-    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Membenarkan apl mengubah suai statistik operasi aplikasi yang dikumpul. Bukan untuk kegunaan apl biasa."</string>
-    <string name="permlab_backup" msgid="470013022865453920">"sandaran dan pemulihan sistem kawalan"</string>
-    <string name="permdesc_backup" msgid="6912230525140589891">"Membenarkan apl untuk mengawal sandaran sistem dan memulihkan mekanisme. Bukan untuk digunakan oleh apl biasa."</string>
-    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"sahkan penyandaran penuh atau pemulihan operasi"</string>
-    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Membenarkan apl untuk memulakan UI pengesahan sandaran penuh. Bukan untuk diguakan oleh mana-mana apl."</string>
-    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"memapaparkan tetingkap yang tiada kebenaran"</string>
-    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Membenarkan apl untuk membuat tetingkap yang dimaksudkan untuk digunakan oleh antara muka pengguna sistem dalaman. Bukan untuk digunakan oleh apl biasa."</string>
-    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"lukis atas apl lain"</string>
-    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Membenarkan aplikasi bertindih di atas aplikasi lain atau sebahagian daripada antara muka pengguna. Ini mungkin mengganggu penggunaan antara muka anda dalam sebarang aplikasi atau menukar apa yang anda rasa anda lihat dalam aplikasi lain."</string>
-    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"mengubah suai kelajuan animasi global"</string>
-    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Membenarkan apl menukar kelajuan animasi global (animasi yang lebih laju atau lebih perlahan) pada bila-bila masa sahaja."</string>
-    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"urus token apl"</string>
-    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Membenarkan apl untuk membuat dan menguruskan token mereka sendiri, dengan memintas susunan-Z biasanya. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_freezeScreen" msgid="4708181184441880175">"bekukan skrin"</string>
-    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Membenarkan aplikasi membekukan sementara skrin untuk peralihan skrin penuh."</string>
-    <string name="permlab_injectEvents" msgid="1378746584023586600">"menekan kekunci dan butang kawalan"</string>
-    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Membenarkan apl untuk menyampaikan peristiwa input sendiri (tekanan kekunci, dan sebagainya) kepada apl lain. Apl hasad boleh menggunakannya untuk mengambil alih tablet."</string>
-    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Membenarkan apl untuk menyampaikan peristiwa input sendiri (tekanan kekunci, dan sebagainya) kepada apl lain. Apl hasad boleh menggunakannya untuk mengambil alih telefon."</string>
-    <string name="permlab_readInputState" msgid="469428900041249234">"rakam apa yang anda taipkan dan tindakan yang anda ambil"</string>
-    <string name="permdesc_readInputState" msgid="8387754901688728043">"Membenarkan apl untuk melihat kekunci yang anda tekan walaupun semasa berinteraksi dengan apl lain (seperti menaip kata laluan). Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"terikat kepada kaedah input"</string>
-    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kaedah input itu. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"terikat kepada perkhidmatan yang boleh diakses"</string>
-    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan yang boleh diakses. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_bindPrintService" msgid="8462815179572748761">"terikat kepada perkhidmatan cetakan"</string>
-    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan cetakan. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_accessAllPrintJobs" msgid="1120792468465711159">"akses semua kerja cetakan"</string>
-    <string name="permdesc_accessAllPrintJobs" msgid="2978185311041864762">"Membenarkan pemegang mengakses kerja cetakan yang dibuat oleh apl lain. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <!-- no translation found for permlab_bindNfcService (2752731300419410724) -->
-    <skip />
-    <!-- no translation found for permdesc_bindNfcService (6120647629174066862) -->
-    <skip />
-    <string name="permlab_bindTextService" msgid="7358378401915287938">"terikat kepada perkhidmatan teks"</string>
-    <string name="permdesc_bindTextService" msgid="8151968910973998670">"Membenarkan pemegang mengikat kepada antara muka peringkat atasan perkhidmatan teks(mis. PerkhidmatanPenyemakEjaan). Tidak seharusnya diperlukan untuk apl biasa."</string>
-    <string name="permlab_bindVpnService" msgid="4708596021161473255">"terikat kepada perkhidmatan VPN"</string>
-    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan Vpn. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"terikat pada kertas dinding"</string>
-    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi kertas dinding. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"terikat kepada perkhidmatan widget"</string>
-    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan widget. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"berinteraksi dengan pentadbir peranti"</string>
-    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Membenarkan pemegang menghantar tujuan kepada pentadbir peranti. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"tambah atau alih keluar pentadbir peranti"</string>
-    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Membenarkan pemegang menambah atau mengalih keluar pentadbir peranti aktif. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_setOrientation" msgid="3365947717163866844">"tukar orientasi skrin"</string>
-    <string name="permdesc_setOrientation" msgid="3046126619316671476">"Membenarkan apl untuk menukar putaran skrin pada bila-bila masa. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"tukar kelajuan penuding"</string>
-    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"Membenarkan apl untuk menukar kelajuan penunjuk tetikus atau pad jejak pada bila-bila masa. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"tukar susun atur papan kekunci"</string>
-    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"Membenarkan apl menukar susun atur papan kekunci. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"hantar isyarat Linux kepada apl"</string>
-    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"Membenarkan apl meminta isyarat yang dibekalkan dihantar kepada semua proses yang berterusan."</string>
-    <string name="permlab_persistentActivity" msgid="8841113627955563938">"buatkan apl sentiasa berjalan"</string>
-    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"Membenarkan apl untuk membuat sebahagian dirinya berterusan dalam memori. Ini boleh mengehadkan memori yang tersedia kepada apl lain dan menjadikan tablet perlahan."</string>
-    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"Membenarkan apl untuk membuat sebahagian dari dirinya berterusan dalam memori. Ini boleh mengehadkan memori yang tersedia kepada apl lain dan menjadikan telefon perlahan."</string>
-    <string name="permlab_deletePackages" msgid="184385129537705938">"padam apl"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"Membenarkan apl untuk memadam pakej Android. Apl hasad boleh menggunakannya untuk memadam apl penting."</string>
-    <string name="permlab_clearAppUserData" msgid="274109191845842756">"padamkan data apl lain"</string>
-    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Membenarkan apl mengosongkan data pengguna."</string>
-    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"padamkan cache apl lain"</string>
-    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Membenarkan apl memadamkan fail cache."</string>
-    <string name="permlab_getPackageSize" msgid="7472921768357981986">"ukur ruang storan apl"</string>
-    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Membenarkan apl mendapatkan semula kodnya, datanya dan saiz cachenya"</string>
-    <string name="permlab_installPackages" msgid="2199128482820306924">"pasang terus apl"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"Membenarkan apl untuk memasang pakej Android yang baharu atau yang dikemas kini. Apl hasad boleh menggunakannya untuk menambah apl baharu dengan keizinan berkuasa secara sewenang-wenangnya."</string>
-    <string name="permlab_clearAppCache" msgid="7487279391723526815">"padamkan semua data cache apl"</string>
-    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Membenarkan apl mengosongkan storan tablet dengan memadam fail dalam direktori cache aplikasi lain. Ini boleh menyebabkan aplikasi lain bermula lebih perlahan kerana perlu mendapatkan semula datanya."</string>
-    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Membenarkan apl mengosongkan storan telefon dengan memadam fail dalam direktori cache aplikasi lain. Ini boleh menyebabkan aplikasi lain bermula lebih perlahan kerana perlu mendapatkan semula datanya."</string>
-    <string name="permlab_movePackage" msgid="3289890271645921411">"Alih sumber apl"</string>
-    <string name="permdesc_movePackage" msgid="319562217778244524">"Membenarkan apl untuk memindahkan sumber apl dari media dalaman ke luaran dan sebaliknya."</string>
-    <string name="permlab_readLogs" msgid="6615778543198967614">"baca data log sensitif"</string>
-    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"Membenarkan apl membaca daripada pelbagai fail log sistem. Hal ini membenarkannya menemui maklumat umum mengenai perkara yang anda lakukan dengan tablet, juga berpotensi menemui maklumat persendirian dan peribadi."</string>
-    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"Membenarkan apl membaca daripada pelbagai fail log sistem. Hal ini membenarkannya menemui maklumat umum mengenai perkara yang anda lakukan dengan telefon, juga berpotensi menyertakan maklumat persendirian dan peribadi."</string>
-    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"gunakan mana-mana penyahkod media untuk main semula"</string>
-    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Membenarkan apl untuk menggunakan sebarang penyahkod media yang dipasangkan untuk menyahkod main semula."</string>
-    <string name="permlab_diagnostic" msgid="8076743953908000342">"baca/tulis ke sumber yang dimiliki oleh diag"</string>
-    <string name="permdesc_diagnostic" msgid="6608295692002452283">"Membenarkan apl membaca dan menulis ke sebarang sumber yang dimiliki oleh kumpulan diag; contohnya, fail dalam /dev. Hal ini berpotensi menjejaskan kestabilan dan keselamatan sistem. Perkara ini seharusnya HANYA digunakan untuk diagnosis khusus perkakasan oleh pengilang atau pengendali."</string>
-    <string name="permlab_changeComponentState" msgid="6335576775711095931">"dayakan atau lumpuhkan komponen apl"</string>
-    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"Membenarkan apl untuk menukar sama ada komponen apl lain didayakan atau tidak. Apl hasad boleh menggunakannya untuk melumpuhkan keupayaan telefon yang penting. Berhati-hati semasa menggunakan kebenaran ini, kerana hal ini boleh menjadikan komponen apl berada dalam keadaan tidak boleh digunakan, tidak konsisten, atau tidak stabil."</string>
-    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"Membenarkan apl untuk menukar sama ada komponen apl lain didayakan atau tidak. Apl hasad boleh menggunakannya untuk melumpuhkan keupayaan telefon yang penting. Berhati-hati semasa menggunakan kebenaran ini, kerana hal ini boleh menjadikan komponen apl berada dalam keadaan tidak boleh digunakan, tidak konsisten, atau tidak stabil."</string>
-    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"berikan atau batalkan kebenaran"</string>
-    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"Membenarkan aplikasi memberikan atau membatalkan kebenaran khusus untuk aplikasi itu sendiri atau aplikasi lain. Aplikasi berniat jahat boleh menggunakan perkara ini untuk mengakses ciri yang belum anda berikan padanya."</string>
-    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"tetapkan keutamaan apl"</string>
-    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"Membenarkan apl untuk mengubah suai apl pilihan anda. Apl hasad secara diam-diam boleh menukar apl yang dijalankan, menipu apl anda yang sedia ada untuk mengumpul data peribadi daripada anda."</string>
-    <string name="permlab_writeSettings" msgid="2226195290955224730">"ubah suai tetapan sistem"</string>
-    <string name="permdesc_writeSettings" msgid="7775723441558907181">"Membenarkan apl untuk mengubah suai data tetapan sistem. Apl hasad boleh merosakkan konfigurasi sistem anda."</string>
-    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"ubah suai tetapan sistem selamat"</string>
-    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"Membenarkan apl untuk mengubah suai data tetapan selamat sistem. Bukan untuk digunakan oleh apl biasa."</string>
-    <string name="permlab_writeGservices" msgid="2149426664226152185">"mengubah suai peta perkhidmatan Google"</string>
-    <string name="permdesc_writeGservices" msgid="1287309437638380229">"Membolehkan apl mengubah suai peta perkhidmatan Google. Bukan untuk kegunaan oleh apl biasa."</string>
-    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"jalankan pada permulaan"</string>
-    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Membenarkan apl untuk memulakan dirinya sendiri sebaik sahaja sistem selesai mengebut. Ini boleh membuat masa untuk menghidupkan tablet menjadi lebih lama dan membenarkan apl untuk memperlahankan keseluruhan tablet dengan sentiasa berjalan."</string>
-    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Membenarkan apl bermula sendiri sebaik sahaja sistem telah selesai mengebut. Ini boleh menjadikannya mengambil masa yang lama untuk menghidupkan telefon dan membenarkan apl untuk melambatkan keseluruhan telefon dengan sentiasa berjalan."</string>
-    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"hantar siaran lekit"</string>
-    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Membenarkan apl untuk menghantar siaran melekit, yang kekal selepas siaran berakhir. Penggunaan berlebihan boleh membuatkan tablet perlahan atau tidak stabil kerana menggunakan terlalu banyak memori."</string>
-    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Membenarkan apl untuk menghantar siaran melekit, yang kekal selepas siaran berakhir. Penggunaan berlebihan boleh membuat telefon perlahan atau tidak stabil dengan menyebabkannya menggunakan memori yang terlalu banyak."</string>
-    <string name="permlab_readContacts" msgid="8348481131899886131">"baca kenalan anda"</string>
-    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Membenarkan apl membaca data tentang kenalan anda yang tersimpan di tablet anda, termasuk kekerapan anda memanggil, menghantar e-mel atau berkomunikasi dalam cara lain dengan individu tertentu. Kebenaran ini membenarkan apl untuk menyimpan data kenalan anda dan apl hasad boleh berkongsi data kenalan anda tanpa pengetahuan anda."</string>
-    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Membenarkan apl membaca data tentang kenalan anda yang tersimpan di telefon anda, termasuk kekerapan anda memanggil, menghantar e-mel atau berkomunikasi dalam cara lain dengan individu tertentu. Kebenaran ini membenarkan apl untuk menyimpan data kenalan anda dan apl hasad boleh berkongsi data kenalan anda tanpa pengetahuan anda."</string>
-    <string name="permlab_writeContacts" msgid="5107492086416793544">"ubah suai kenalan anda"</string>
-    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Membenarkan apl mengubah suai data tentang kenalan anda yang tersimpan pada tablet anda, termasuk kekerapan siapa anda panggil, hantar e-mel atau berkomunikasi dalam cara lain dengan kenalan tertentu. Kebenaran ini membenarkan apl untuk memadam data kenalan."</string>
-    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Membenarkan apl mengubah suai data tentang kenalan anda yang tersimpan pada telefon anda, termasuk kekerapan siapa anda panggil, hantar e-mel atau berkomunikasi dalam cara lain dengan kenalan tertentu. Kebenaran ini membenarkan apl untuk memadam data kenalan."</string>
-    <string name="permlab_readCallLog" msgid="3478133184624102739">"baca log panggilan"</string>
-    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Membenarkan apl membaca log panggilan tablet anda, termasuk data tentang panggilan masuk dan keluar. Kebenaran ini membenarkan apl untuk menyimpan data log panggilan anda dan apl hasad boleh berkongsi data panggilan tanpa pengetahuan anda."</string>
-    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Membenarkan apl membaca log panggilan telefon anda, termasuk data tentang panggilan masuk dan keluar. Kebenaran ini membenarkan apl untuk menyimpan data log panggilan anda dan apl hasad boleh berkongsi data panggilan tanpa pengetahuan anda."</string>
-    <string name="permlab_writeCallLog" msgid="8552045664743499354">"tulis log panggilan"</string>
-    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Membenarkan apl untuk mengubah suai panggilan tablet anda, termasuk data tentang panggilan masuk dan keluar. Apl hasad boleh menggunakannya untuk memadam atau mengubah suai log panggilan anda."</string>
-    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Membenarkan apl untuk mengubah suai panggilan telefon anda, termasuk data tentang panggilan masuk dan keluar. Apl hasad boleh menggunakannya untuk memadam atau mengubah suai log panggilan anda."</string>
-    <string name="permlab_readProfile" msgid="4701889852612716678">"baca kad kenalan anda sendiri"</string>
-    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Membenarkan apl membaca maklumat profil peribadi yang disimpan dalam peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna apl lain boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
-    <string name="permlab_writeProfile" msgid="907793628777397643">"ubah suai kad kenalan sendiri"</string>
-    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Membenarkan apl menukar atau menambah maklumat profil peribadi yang disimpan pada peranti anda, seperti nama dan maklumat kenalan anda. Ini bermakna apl boleh mengenal pasti anda dan menghantar maklumat profil anda kepada orang lain."</string>
-    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"baca aliran sosial anda"</string>
-    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Membenarkan apl mengakses dan menyegerakkan kemas kini sosial daripada anda dan rakan anda. Berhati-hati semasa berkongsi maklumat - ini membenarkan apl untuk membaca komunikasi di antara anda dan rakan anda pada rangkaian sosial tanpa mengira kerahsiaan. Nota: kebenaran ini tidak boleh dikuatkuasakan pada semua rangkaian sosial."</string>
-    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"tulis ke aliran sosial anda"</string>
-    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"Membenarkan apl memaparkan kemas kini sosial dari rakan anda. Berhati-hati semasa berkongsi maklumat - ini membenarkan apl untuk menghasilkan mesej yang kelihatan seperti datang dari seorang rakan. Nota: kebenaran ini tidak boleh dikuatkuasakan pada semua rangkaian sosial."</string>
-    <string name="permlab_readCalendar" msgid="5972727560257612398">"baca acara kalendar serta maklumat sulit"</string>
-    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Membenarkan apl membaca semua acara kalendar yang tersimpan pada tablet anda, termasuk milik rakan atau rakan sekerja. Ini boleh membenarkan apl untuk berkongsi atau menyimpan data kalendar anda, tanpa mengira kerahsiaan atau sensitiviti."</string>
-    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Membenarkan apl untuk membaca semua acara kalendar yang tersimpan pada telefon anda, termasuk milik rakan atau rakan sekerja. Ini boleh membenarkan apl untuk berkongsi atau menyimpan data kalendar anda, tanpa mengira kerahsiaan atau sensitiviti."</string>
-    <string name="permlab_writeCalendar" msgid="8438874755193825647">"tambah atau ubah suai acara kalendar dan hantar e-mel kepada tetamu tanpa pengetahuan pemilik"</string>
-    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Membenarkan apl menambah, mengalih keluar, mengubah acara yang anda boleh ubah suai pada tablet anda, termasuk milik rakan atau rakan sekerja. Ini boleh membenarkan apl menghantar mesej yang kelihatan seperti datang dari pemilik kalendar atau mengubah suai acara tanpa pengetahuan pemilik."</string>
-    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"Membenarkan apl menambah, mengalih keluar, mengubah acara yang anda boleh ubah suai pada telefon anda, termasuk milik rakan atau rakan sekerja. Ini boleh membenarkan apl menghantar mesej yang kelihatan seperti datang dari pemilik kalendar atau mengubah suai acara tanpa pengetahuan pemilik."</string>
-    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"gunakan sumber lokasi olok-olok untuk pengujian"</string>
-    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"Buat sumber lokasi palsu untuk menguji atau memasang pembekal lokasi baharu. Ini membenarkan apl untuk membatalkan lokasi dan/atau status yang dikembalikan oleh sumber lokasi lain seperti GPS atau pembekal lokasi."</string>
-    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"akses perintah tambahan pembekal lokasi"</string>
-    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Membenarkan apl untuk mengakses arahan pembekal lokasi tambahan. Ini boleh membenarkan apl untuk campur tangan dengan operasi GPS atau sumber lokasi lain."</string>
-    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"kebenaran untuk memasang pembekal lokasi"</string>
-    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Buat sumber lokasi palsu untuk menguji atau memasang pembekal lokasi baharu. Ini membenarkan apl untuk membatalkan lokasi dan/atau status yang dikembalikan oleh sumber lokasi lain seperti GPS atau pembekal lokasi."</string>
-    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"lokasi tepat (GPS dan berasaskan rangkaian)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Membenarkan apl mendapatkan lokasi tepat anda menggunakan Sistem Kedudukan Global (GPS) atau sumber lokasi rangkaian seperti menara sel dan Wi-Fi. Perkhidmatan lokasi ini mesti dihidupkan dan tersedia pada peranti anda untuk kegunaan apl. Apl boleh menggunakan ini untuk menentukan tempat anda berada dan mungkin menggunakan kuasa bateri tambahan."</string>
-    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"lokasi anggaran (berasaskan rangkaian)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Membenarkan apl mendapatkan lokasi anggaran anda. Lokasi ini diperolehi oleh perkhidmatan lokasi menggunakan sumber lokasi rangkaian seperti menara sel dan Wi-Fi. Perkhidmatan lokasi ini mesti dihidupkan dan tersedia pada peranti anda untuk kegunaan apl. Apl boleh menggunakan ini untuk menentukan secara anggaran tempat anda berada."</string>
-    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"akses SurfaceFlinger"</string>
-    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Membenarkan apl menggunakan ciri peringkat rendah SurfaceFlinger."</string>
-    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"baca penimbal bingkai"</string>
-    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Membenarkan apl membaca kandungan penimbal bingkai."</string>
-    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"akses InputFlinger"</string>
-    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Membenarkan apl menggunakan ciri peringkat rendah InputFlinger."</string>
-    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurasikan paparan Wifi"</string>
-    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Membenarkan apl mengkonfigurasi dan menyambung ke paparan Wifi."</string>
-    <!-- no translation found for permlab_captureAudioOutput (6857134498402346708) -->
-    <skip />
-    <!-- no translation found for permdesc_captureAudioOutput (6210597754212208853) -->
-    <skip />
-    <!-- no translation found for permlab_captureVideoOutput (2246828773589094023) -->
-    <skip />
-    <!-- no translation found for permdesc_captureVideoOutput (359481658034149860) -->
-    <skip />
-    <!-- no translation found for permlab_captureSecureVideoOutput (7815398969303382016) -->
-    <skip />
-    <!-- no translation found for permdesc_captureSecureVideoOutput (2779793064709350289) -->
-    <skip />
-    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"tukar tetapan audio anda"</string>
-    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Membenarkan apl untuk mengubah suai tetapan audio global seperti kelantangan dan pembesar suara mana digunakan untuk output."</string>
-    <string name="permlab_recordAudio" msgid="3876049771427466323">"rakam audio"</string>
-    <string name="permdesc_recordAudio" msgid="4906839301087980680">"Membenarkan apl untuk merakam audio menggunakan mikrofon. Kebenaran ini membenarkan apl untuk merakam audio pada bila-bila masa tanpa pengesahan anda."</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"ambil gambar dan video"</string>
-    <string name="permdesc_camera" msgid="8497216524735535009">"Membenarkan apl mengambil gambar dan video menggunakan kamera. Kebenaran ini membenarkan apl untuk menggunakan kamera pada bila-bila masa tanpa pengesahan anda."</string>
-    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"lumpuhkan LED penunjuk penghantaran semasa kamera sedang digunakan"</string>
-    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Membenarkan aplikasi sistem yang diprapasang untuk melumpuhkan LED penunjuk penggunaan kamera."</string>
-    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"melumpuhkan tablet secara kekal"</string>
-    <string name="permlab_brick" product="default" msgid="8337817093326370537">"lumpuhkan telefon secara kekal"</string>
-    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"Membenarkan apl melumpuhkan keseluruhan tablet secara kekal. Ini amat berbahaya."</string>
-    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"Membenarkan apl melumpuhkan keseluruhan telefon secara kekal. Ini amat berbahaya."</string>
-    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"memaksa tablet but semula"</string>
-    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"paksa telefon but semula"</string>
-    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"Membenarkan apl memaksa tablet untuk but semula."</string>
-    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"Membenarkan apl memaksa telefon untuk but semula."</string>
-    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"akses sistem fail storan USB"</string>
-    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"akses sistem fail Kad SD"</string>
-    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"Membenarkan apl melekapkan dan menyahlekapkan sistem fail untuk storan boleh alih."</string>
-    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"padamkan storan USB"</string>
-    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"padamkan kad SD"</string>
-    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Membenarkan apl memformatkan storan boleh alih."</string>
-    <string name="permlab_asec_access" msgid="3411338632002193846">"dapatkan maklumat tentang storan dalaman"</string>
-    <string name="permdesc_asec_access" msgid="3094563844593878548">"Membenarkan apl mendapatkan maklumat dari storan dalaman."</string>
-    <string name="permlab_asec_create" msgid="6414757234789336327">"buat storan dalaman"</string>
-    <string name="permdesc_asec_create" msgid="4558869273585856876">"Membenarkan apl membuat storan dalaman."</string>
-    <string name="permlab_asec_destroy" msgid="526928328301618022">"memusnahkan storan dalaman"</string>
-    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Membenarkan apl memusnahkan storan dalaman."</string>
-    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"lekap/nyahlekap storan dalaman"</string>
-    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Membenarkan apl melekapkan/menyahlekapkan storan dalaman."</string>
-    <string name="permlab_asec_rename" msgid="7496633954080472417">"namakan semula storan dalaman"</string>
-    <string name="permdesc_asec_rename" msgid="1794757588472127675">"Membenarkan apl menamakan semula storan dalaman."</string>
-    <string name="permlab_vibrate" msgid="7696427026057705834">"kawal getaran"</string>
-    <string name="permdesc_vibrate" msgid="6284989245902300945">"Membenarkan apl mengawal penggetar."</string>
-    <string name="permlab_flashlight" msgid="2155920810121984215">"mengawal lampu suluh"</string>
-    <string name="permdesc_flashlight" msgid="6522284794568368310">"Membenarkan apl mengawal lampu suluh."</string>
-    <string name="permlab_manageUsb" msgid="1113453430645402723">"urus pilihan dan kebenaran untuk peranti USB"</string>
-    <string name="permdesc_manageUsb" msgid="7776155430218239833">"Membenarkan apl untuk menguruskan pilihan dan kebenaran untuk peranti USB."</string>
-    <string name="permlab_accessMtp" msgid="4953468676795917042">"laksanakan protokol MTP"</string>
-    <string name="permdesc_accessMtp" msgid="6532961200486791570">"Membenarkan akses kepada pemacu inti MTP untuk melaksanakan protokol USB MTP."</string>
-    <string name="permlab_hardware_test" msgid="4148290860400659146">"uji perkakasan"</string>
-    <string name="permdesc_hardware_test" msgid="6597964191208016605">"Membenarkan apl mengawal pelbagai persisian untuk tujuan pengujian perkakasan."</string>
-    <string name="permlab_callPhone" msgid="3925836347681847954">"panggil terus nombor telefon"</string>
-    <string name="permdesc_callPhone" msgid="3740797576113760827">"Membenarkan apl memanggil nombor telefon tanpa campur tangan anda. Ini mungkin menyebabkan caj atau panggilan yang di luar jangkaan. Apl hasad boleh menyebabkan anda kerugian wang dengan membuat panggilan tanpa pengesahan anda."</string>
-    <string name="permlab_callPrivileged" msgid="4198349211108497879">"panggil terus sebarang nombor telefon"</string>
-    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Membenarkan apl untuk memanggil mana-mana nombor telefon, termasuk nombor kecemasan, tanpa campur tangan anda. Apl hasad boleh membuat panggilan yang tidak perlu dan salah di sisi undang-undang ke perkhidmatan kecemasan."</string>
-    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"mulakan terus persediaan tablet CDMA"</string>
-    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"memulakan persediaan telefon CDMA secara langsung"</string>
-    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"Membenarkan apl memulakan peruntukan CDMA. Apl hasad boleh memulakan peruntukan CDMA yang tidak perlu."</string>
-    <string name="permlab_locationUpdates" msgid="7785408253364335740">"kawal pemberitahuan kemas kini lokasi"</string>
-    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Membenarkan apl untuk mendayakan/melumpuhkan pemberitahuan kemas kini lokasi dari radio. Bukan untuk kegunaan apl biasa."</string>
-    <string name="permlab_checkinProperties" msgid="7855259461268734914">"akses sifat daftar masuk"</string>
-    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Membenarkan apl membaca/menulis akses kepada sifat yang dimuat naik oleh perkhidmatan checkin. Bukan untuk digunakan oleh apl biasa."</string>
-    <string name="permlab_bindGadget" msgid="776905339015863471">"pilih widget"</string>
-    <string name="permdesc_bindGadget" msgid="8261326938599049290">"Membenarkan apl untuk memberitahu sistem widget mana yang boleh digunakan oleh apl yang mana. Apl dengan kebenaran ini boleh memberi akses kepada data peribadi kepada apl lain. Bukan untuk digunakan oleh apl biasa."</string>
-    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"ubah suai keadaan telefon"</string>
-    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Membenarkan apl untuk mengawal ciri-ciri telefon peranti. Apl dengan kebenaran ini boleh menukar rangkaian, menghidupkan dan mematikan radio telefon dan sebagainya tanpa memberitahu anda."</string>
-    <string name="permlab_readPhoneState" msgid="9178228524507610486">"baca status dan identiti telefon"</string>
-    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Membenarkan apl mengakses ciri telefon pada peranti. Kebenaran ini membolehkan apl menentukan nombor telefon dan ID peranti, sama ada panggilan aktif dan nombor jauh yang dihubungkan dengan panggilan."</string>
-    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"menghalang tablet daripada tidur"</string>
-    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"halang telefon daripada tidur"</string>
-    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Membenarkan apl menghalang tablet daripada tidur."</string>
-    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Membenarkan apl menghalang telefon daripada tidur."</string>
-    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"menghidupkan atau mematikan kuasa tablet"</string>
-    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"kuasakan telefon hidup atau mati"</string>
-    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"Membenarkan apl menghidupkan atau mematikan tablet."</string>
-    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"Membenarkan apl menghidupkan atau mematikan telefon."</string>
-    <string name="permlab_factoryTest" msgid="3715225492696416187">"jalankan dalam mod ujian kilang"</string>
-    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Jalankan sebagai ujian pengeluar peringkat rendah, membenarkan akses penuh kepada perkakasan tablet. Hanya tersedia apabila tablet dijalankan dalam mod ujian pengeluar."</string>
-    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Menjalankan sebagai ujian pengilang peringkat rendah, membenarkan akses penuh kepada perkakasan telefon. Hanya tersedia apabila telefon dijalankan dalam mod ujian pengilang."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"tetapkan kertas dinding"</string>
-    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Membenarkan apl menetapkan kertas dinding sistem."</string>
-    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"laraskan saiz kertas dinding anda"</string>
-    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Membenarkan apl menetapkan pembayang saiz kertas dinding sistem."</string>
-    <string name="permlab_masterClear" msgid="2315750423139697397">"menetapkan semula sistem kepada lalai kilang"</string>
-    <string name="permdesc_masterClear" msgid="3665380492633910226">"Membenarkan apl untuk menetapkan semula sistem kepada tetapan kilang sepenuhnya, memadam semua data, konfigurasi, dan apl yang dipasang."</string>
-    <string name="permlab_setTime" msgid="2021614829591775646">"tetapkan masa"</string>
-    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"Membenarkan apl untuk menukar masa jam tablet."</string>
-    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"Membolehkan apl untuk menukar waktu jam telefon."</string>
-    <string name="permlab_setTimeZone" msgid="2945079801013077340">"tetapkan zon waktu"</string>
-    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"Membenarkan apl menukar zon waktu tablet."</string>
-    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Membenarkan apl menukar zon waktu telefon."</string>
-    <string name="permlab_accountManagerService" msgid="4829262349691386986">"bertindak sebagai PerkhidmatanPengurusAkaun"</string>
-    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"Membenarkan apl membuat panggilan ke Pengesah Akaun."</string>
-    <string name="permlab_getAccounts" msgid="1086795467760122114">"cari akaun pada peranti"</string>
-    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Membenarkan apl mendapatkan senarai akaun yang dikenali oleh tablet. Ini mungkin termasuk sebarang akaun yang dibuat oleh aplikasi yang telah anda pasang."</string>
-    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Membenarkan apl mendapatkan senarai akaun yang dikenali oleh telefon. Ini mungkin termasuk sebarang akaun yang dibuat oleh aplikasi yang telah anda pasang."</string>
-    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"buat akaun dan tetapkan kata laluan"</string>
-    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"Membenarkan apl menggunakan kebolehan pengesah akaun Pengurus Akaun, termasuk membuat akaun dan mendapatkan serta menetapkan kata laluannya."</string>
-    <string name="permlab_manageAccounts" msgid="4983126304757177305">"tambah atau alih keluar akaun"</string>
-    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Membenarkan apl melaksanakan operasi seperti menambah dan mengalih keluar akaun dan memadamkan kata laluannya."</string>
-    <string name="permlab_useCredentials" msgid="235481396163877642">"guna akaun pada peranti"</string>
-    <string name="permdesc_useCredentials" msgid="7984227147403346422">"Membenarkan apl meminta token pengesahan."</string>
-    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"lihat sambungan rangkaian"</string>
-    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Membenarkan apl melihat maklumat tentang sambungan rangkaian seperti rangkaian mana yang wujud dan bersambung."</string>
-    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"akses rangkaian penuh"</string>
-    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Membenarkan apl membuat soket rangkaian dan menggunakan protokol rangkaian tersuai. Penyemak imbas dan aplikasi lain menyediakan cara untuk menghantar data ke internet, jadi kebenaran ini tidak diperlukan untuk menghantar data ke internet."</string>
-    <string name="permlab_writeApnSettings" msgid="505660159675751896">"mengubah/memintas tetapan dan lalu lintas rangkaian"</string>
-    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Membenarkan apl untuk menukar tetapan rangkaian dan untuk memintas serta memeriksa semua trafik rangkaian, contohnya untuk menukar proksi dan port mana-mana APN. Apl hasad boleh memantau, mengubah hala, atau mengubah suai paket rangkaian tanpa pengetahuan anda."</string>
-    <string name="permlab_changeNetworkState" msgid="958884291454327309">"tukar kesambungan rangkaian"</string>
-    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Membenarkan apl untuk mengubah keadaan kesambungan rangkaian."</string>
-    <string name="permlab_changeTetherState" msgid="5952584964373017960">"tukar kesambungan bertambat"</string>
-    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Membenarkan apl untuk mengubah keadaan kesambungan rangkaian tambatan."</string>
-    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"tukar tetapan penggunaan data latar belakang"</string>
-    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Membenarkan apl menukar tetapan penggunaan data latar belakang."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"lihat sambungan Wi-Fi"</string>
-    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Membenarkan apl melihat maklumat tentang rangkaian Wi-Fi, seperti sama ada Wi-Fi didayakan dan nama peranti Wi-Fi yang disambungkan."</string>
-    <string name="permlab_changeWifiState" msgid="6550641188749128035">"sambung dan putuskan dari Wi-Fi"</string>
-    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Membenarkan apl menyambung ke dan memutuskan sambungan dari titik capaian Wi-Fi dan membuat perubahan kepada konfigurasi peranti untuk rangkaian Wi-Fi."</string>
-    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"benarkan penerimaan Wi-Fi Multisiar"</string>
-    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Membenarkan apl menerima paket yang dihantar kepada semua peranti pada rangkaian Wi-Fi menggunakan alamat multisiar, bukan hanya tablet anda. Apl menggunakan lebih kuasa berbanding mod bukan multisiar."</string>
-    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"Membenarkan apl menerima paket yang dihantar kepada semua peranti pada rangkaian Wi-Fi menggunakan alamat multisiar, bukan hanya telefon anda. Ia menggunakan lebih kuasa berbanding mod bukan multisiar."</string>
-    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"akses tetapan Bluetooth"</string>
-    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"Membenarkan apl mengkonfigurasikan tablet Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
-    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Membenarkan apl mengkonfigurasikan telefon Bluetooth setempat dan menemui serta berpasangan dengan peranti jauh."</string>
-    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"sambung dan putuskan sambungan WiMAX"</string>
-    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Membenarkan apl menentukan sama ada WiMaX didayakan dan maklumat tentang sebarang rangkaian WiMaX yang disambungkan."</string>
-    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Tukar keadaan WiMAX"</string>
-    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Membenarkan apl untuk menyambungkan tablet ke dan menyahsambungkan tablet dari rangkaian WiMaX."</string>
-    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Membenarkan apl untuk menyambungkan telefon ke dan menyahsambung telefon dari rangkaian WiMaX."</string>
-    <string name="permlab_bluetooth" msgid="6127769336339276828">"berpasangan dengan peranti Bluetooth"</string>
-    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Membenarkan apl melihat konfigurasi Bluetooth pada tablet dan untuk membuat serta menerima sambungan dengan peranti yang dipasangkan."</string>
-    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Membenarkan apl melihat konfigurasi Bluetooth pada telefon dan membuat serta menerima sambungan dengan peranti yang dipasangkan."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"mengawal Komunikasi Medan Dekat"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"Membenarkan apl berkomunikasi dengan teg, kad dan pembaca Komunikasi Medan Dekat (NFC)."</string>
-    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"lumpuhkan kunci skrin anda"</string>
-    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Membenarkan apl melumpuhkan kunci kekunci dan sebarang keselamatan kata laluan yang berkaitan. Sebagai contoh, telefon melumpuhkan kunci kekunci apabila menerima panggilan telefon masuk kemudian mendayakan semula kunci kekunci apabila panggilan selesai."</string>
-    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"membaca tetapan penyegerakan"</string>
-    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Membenarkan apl membaca tetapan segerak untuk akaun. Sebagai contoh, ini boleh menentukan sama ada apl Orang disegerakkan dengan akaun."</string>
-    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"togol segerak hidup dan mati"</string>
-    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Membenarkan apl mengubah suai tetapan segerak untuk akaun. Sebagai contoh, ini boleh digunakan untuk mendayakan penyegerakan apl Orang dengan akaun."</string>
-    <string name="permlab_readSyncStats" msgid="7396577451360202448">"baca statistik penyegerakan"</string>
-    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Membenarkan apl untuk membaca statistik segerak untuk akaun, termasuk sejarah acara segerak dan berapa banyak data disegerakkan."</string>
-    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"baca suapan langganan"</string>
-    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Membenarkan apl mendapatkan butiran mengenai suapan tersegerak semasa."</string>
-    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"tulis suapan yang dilanggan"</string>
-    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Membenarkan apl untuk mengubah suai suapan segerakan semasa anda. Apl hasad boleh menukar suapan anda yang disegerakkan."</string>
-    <string name="permlab_readDictionary" msgid="4107101525746035718">"baca istilah yang anda tambahkan kepada kamus"</string>
-    <string name="permdesc_readDictionary" msgid="659614600338904243">"Membenarkan apl membaca semua perkataan, nama dan frasa yang mungkin telah disimpan oleh pengguna dalam kamus pengguna."</string>
-    <string name="permlab_writeDictionary" msgid="2183110402314441106">"tambah perkataan ke kamus ditakrifkan pengguna"</string>
-    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Membenarkan apl menulis perkataan baharu ke dalam kamus pengguna."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"uji akses ke storan dilindungi"</string>
-    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"uji akses ke storan dilindungi"</string>
-    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"Apl boleh uji kebenaran USB."</string>
-    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"Membenarkan apl menguji kebenaran untuk kad SD yang akan tersedia pada peranti akan datang."</string>
-    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ubah suai atau padam kandungan storan USB anda"</string>
-    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"ubah suai atau padam kandungan kad SD anda"</string>
-    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Membenarkan apl menulis ke storan USB."</string>
-    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Membenarkan apl menulis ke kad SD."</string>
-    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"ubh suai/pdm kdg strn mdia dlm"</string>
-    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"Membenarkan apl mengubah suai kandungan storan media dalaman."</string>
-    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"urus storan dokumen"</string>
-    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"Membenarkan apl mengurus storan dokumen."</string>
-    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"mengakses storan luaran untuk semua pengguna"</string>
-    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Membenarkan apl untuk mengakses storan luaran untuk semua pengguna."</string>
-    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"akses sistem fail cache"</string>
-    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Membenarkan apl membaca dan menulis cache sistem fail."</string>
-    <string name="permlab_use_sip" msgid="5986952362795870502">"membuat/menerima panggilan Internet"</string>
-    <string name="permdesc_use_sip" msgid="4717632000062674294">"Membenarkan apl menggunakan perkhidmatan SIP untuk membuat/menerima panggilan Internet."</string>
-    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"baca sejarah penggunaan rangkaian"</string>
-    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Membenarkan apl membaca sejarah penggunaan rangkaian untuk rangkaian dan apl khusus."</string>
-    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"urus dasar rangkaian"</string>
-    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Membenarkan apl mengurus dasar rangkaian dan menentukan peraturan khusus apl."</string>
-    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"ubah suai perakaunan penggunaan rangkaian"</string>
-    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Membenarkan apl untuk mengubah suai bagaimana penggunaan rangkaian diambil kira terhadap apl. Bukan untuk digunakan oleh apl biasa."</string>
-    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"ubah tanda soket"</string>
-    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"Membenarkan apl mengubah suai tanda soket untuk laluan"</string>
-    <string name="permlab_accessNotifications" msgid="7673416487873432268">"pemberitahuan akses"</string>
-    <string name="permdesc_accessNotifications" msgid="458457742683431387">"Membenarkan apl untuk mendapatkan semula, memeriksa dan memadam bersih pemberitahuan, termasuk yang disiarkan oleh apl lain."</string>
-    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"ikat kepada perkhidmatan pendengar pemberitahuan"</string>
-    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Membenarkan pemegang terikat dengan antara muka peringkat tertinggi bagi perkhidmatan pendengar pemberitahuan. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"gunakan apl konfigurasi yang disediakan oleh pembawa"</string>
-    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Membenarkan pemegang menggunakan apl konfigurasi yang diberikan oleh pembawa. Tidak sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="policylab_limitPassword" msgid="4497420728857585791">"Tetapkan peraturan kata laluan"</string>
-    <string name="policydesc_limitPassword" msgid="3252114203919510394">"Mengawal panjang dan aksara yang dibenarkan dalam kata laluan buka kunci skrin."</string>
-    <string name="policylab_watchLogin" msgid="914130646942199503">"Memantau percubaan buka kunci skrin"</string>
-    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Memantau bilangan kata laluan yang tersilap ditaip apabila membuka skrin, dan mengunci tablet atau memadam semua data tablet jika terlalu banyak kesilapan menaip kata laluan."</string>
-    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Memantau bilangan kata laluan salah yang ditaip semasa membuka skrin, dan mengunci telefon atau memadam semua data telefon jika terlalu banyak kata laluan salah ditaip."</string>
-    <string name="policylab_resetPassword" msgid="2620077191242688955">"Tukar kata laluan buka kunci skrin"</string>
-    <string name="policydesc_resetPassword" msgid="605963962301904458">"Tukar kata laluan buka kunci skrin."</string>
-    <string name="policylab_forceLock" msgid="2274085384704248431">"Kunci skrin"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Mengawal cara dan bila skrin dikunci."</string>
-    <string name="policylab_wipeData" msgid="3910545446758639713">"Padamkan semua data"</string>
-    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Memadamkan data tablet tanpa amaran dengan melakukan tetapan semula data kilang."</string>
-    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Memadamkan data telefon tanpa amaran dengan melakukan tetapan semula data kilang."</string>
-    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Tetapkan proksi global peranti"</string>
-    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Menetapkan proksi global peranti untuk digunakan sementara dasar didayakan. Hanya pentadbir peranti pertama boleh menetapkan proksi global dengan berkesan."</string>
-    <string name="policylab_expirePassword" msgid="885279151847254056">"Ttpkn tmt tmph k/lln kci skrin"</string>
-    <string name="policydesc_expirePassword" msgid="1729725226314691591">"Kawal kekerapan penukaran kata laluan kunci skrin."</string>
-    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Tetapkan penyulitan storan"</string>
-    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Memerlukan data apl yang disimpan itu disulitkan."</string>
-    <string name="policylab_disableCamera" msgid="6395301023152297826">"Lumpuhkan kamera"</string>
-    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Menghalang penggunaan semua kamera peranti."</string>
-    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Lumpuh ciri pelindung kekunci"</string>
-    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Cegah penggunaan beberapa ciri dalam pelindung kekunci."</string>
-  <string-array name="phoneTypes">
-    <item msgid="8901098336658710359">"Laman Utama"</item>
-    <item msgid="869923650527136615">"Mudah alih"</item>
-    <item msgid="7897544654242874543">"Kerja"</item>
-    <item msgid="1103601433382158155">"Faks Kerja"</item>
-    <item msgid="1735177144948329370">"Faks Rumah"</item>
-    <item msgid="603878674477207394">"Alat kelui"</item>
-    <item msgid="1650824275177931637">"Lain-lain"</item>
-    <item msgid="9192514806975898961">"Peribadi"</item>
-  </string-array>
-  <string-array name="emailAddressTypes">
-    <item msgid="8073994352956129127">"Rumah"</item>
-    <item msgid="7084237356602625604">"Kerja"</item>
-    <item msgid="1112044410659011023">"Lain-lain"</item>
-    <item msgid="2374913952870110618">"Peribadi"</item>
-  </string-array>
-  <string-array name="postalAddressTypes">
-    <item msgid="6880257626740047286">"Rumah"</item>
-    <item msgid="5629153956045109251">"Kerja"</item>
-    <item msgid="4966604264500343469">"Lain-lain"</item>
-    <item msgid="4932682847595299369">"Peribadi"</item>
-  </string-array>
-  <string-array name="imAddressTypes">
-    <item msgid="1738585194601476694">"Laman Utama"</item>
-    <item msgid="1359644565647383708">"Kerja"</item>
-    <item msgid="7868549401053615677">"Lain-lain"</item>
-    <item msgid="3145118944639869809">"Peribadi"</item>
-  </string-array>
-  <string-array name="organizationTypes">
-    <item msgid="7546335612189115615">"Kerja"</item>
-    <item msgid="4378074129049520373">"Lain-lain"</item>
-    <item msgid="3455047468583965104">"Peribadi"</item>
-  </string-array>
-  <string-array name="imProtocols">
-    <item msgid="8595261363518459565">"AIM"</item>
-    <item msgid="7390473628275490700">"Windows Live"</item>
-    <item msgid="7882877134931458217">"Yahoo"</item>
-    <item msgid="5035376313200585242">"Skype"</item>
-    <item msgid="7532363178459444943">"QQ"</item>
-    <item msgid="3713441034299660749">"Bual Google"</item>
-    <item msgid="2506857312718630823">"ICQ"</item>
-    <item msgid="1648797903785279353">"Jabber"</item>
-  </string-array>
-    <string name="phoneTypeCustom" msgid="1644738059053355820">"Peribadi"</string>
-    <string name="phoneTypeHome" msgid="2570923463033985887">"Laman Utama"</string>
-    <string name="phoneTypeMobile" msgid="6501463557754751037">"Mudah Alih"</string>
-    <string name="phoneTypeWork" msgid="8863939667059911633">"Kerja"</string>
-    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"Faks Kerja"</string>
-    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"Faks Rumah"</string>
-    <string name="phoneTypePager" msgid="7582359955394921732">"Alat Kelui"</string>
-    <string name="phoneTypeOther" msgid="1544425847868765990">"Lain-lain"</string>
-    <string name="phoneTypeCallback" msgid="2712175203065678206">"Panggil balik"</string>
-    <string name="phoneTypeCar" msgid="8738360689616716982">"Kereta"</string>
-    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Nombor Utama Syarikat"</string>
-    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
-    <string name="phoneTypeMain" msgid="6766137010628326916">"Utama"</string>
-    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"Faks Lain"</string>
-    <string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
-    <string name="phoneTypeTelex" msgid="3367879952476250512">"Teleks"</string>
-    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
-    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"Telefon Mudah Alih Kerja"</string>
-    <string name="phoneTypeWorkPager" msgid="649938731231157056">"Alat Kelui Kerja"</string>
-    <string name="phoneTypeAssistant" msgid="5596772636128562884">"Pembantu"</string>
-    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
-    <string name="eventTypeCustom" msgid="7837586198458073404">"Peribadi"</string>
-    <string name="eventTypeBirthday" msgid="2813379844211390740">"Hari Lahir"</string>
-    <string name="eventTypeAnniversary" msgid="3876779744518284000">"Ulang tahun"</string>
-    <string name="eventTypeOther" msgid="7388178939010143077">"Lain-lain"</string>
-    <string name="emailTypeCustom" msgid="8525960257804213846">"Peribadi"</string>
-    <string name="emailTypeHome" msgid="449227236140433919">"Rumah"</string>
-    <string name="emailTypeWork" msgid="3548058059601149973">"Kerja"</string>
-    <string name="emailTypeOther" msgid="2923008695272639549">"Lain-lain"</string>
-    <string name="emailTypeMobile" msgid="119919005321166205">"Mudah Alih"</string>
-    <string name="postalTypeCustom" msgid="8903206903060479902">"Peribadi"</string>
-    <string name="postalTypeHome" msgid="8165756977184483097">"Laman Utama"</string>
-    <string name="postalTypeWork" msgid="5268172772387694495">"Kerja"</string>
-    <string name="postalTypeOther" msgid="2726111966623584341">"Lain-lain"</string>
-    <string name="imTypeCustom" msgid="2074028755527826046">"Peribadi"</string>
-    <string name="imTypeHome" msgid="6241181032954263892">"Laman Utama"</string>
-    <string name="imTypeWork" msgid="1371489290242433090">"Kerja"</string>
-    <string name="imTypeOther" msgid="5377007495735915478">"Lain-lain"</string>
-    <string name="imProtocolCustom" msgid="6919453836618749992">"Peribadi"</string>
-    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
-    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
-    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
-    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
-    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
-    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
-    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
-    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
-    <string name="orgTypeWork" msgid="29268870505363872">"Kerja"</string>
-    <string name="orgTypeOther" msgid="3951781131570124082">"Lain-lain"</string>
-    <string name="orgTypeCustom" msgid="225523415372088322">"Peribadi"</string>
-    <string name="relationTypeCustom" msgid="3542403679827297300">"Peribadi"</string>
-    <string name="relationTypeAssistant" msgid="6274334825195379076">"Pembantu"</string>
-    <string name="relationTypeBrother" msgid="8757913506784067713">"Abang/Adik"</string>
-    <string name="relationTypeChild" msgid="1890746277276881626">"Anak"</string>
-    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"Rakan Kongsi Domestik"</string>
-    <string name="relationTypeFather" msgid="5228034687082050725">"Bapa"</string>
-    <string name="relationTypeFriend" msgid="7313106762483391262">"Rakan"</string>
-    <string name="relationTypeManager" msgid="6365677861610137895">"Pengurus"</string>
-    <string name="relationTypeMother" msgid="4578571352962758304">"Ibu"</string>
-    <string name="relationTypeParent" msgid="4755635567562925226">"Ibu bapa"</string>
-    <string name="relationTypePartner" msgid="7266490285120262781">"Rakan Kongsi"</string>
-    <string name="relationTypeReferredBy" msgid="101573059844135524">"Dirujuk oleh"</string>
-    <string name="relationTypeRelative" msgid="1799819930085610271">"Saudara"</string>
-    <string name="relationTypeSister" msgid="1735983554479076481">"Kakak/Adik"</string>
-    <string name="relationTypeSpouse" msgid="394136939428698117">"Pasangan"</string>
-    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"Peribadi"</string>
-    <string name="sipAddressTypeHome" msgid="6093598181069359295">"Rumah"</string>
-    <string name="sipAddressTypeWork" msgid="6920725730797099047">"Kerja"</string>
-    <string name="sipAddressTypeOther" msgid="4408436162950119849">"Lain-lain"</string>
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Taip kod PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Taip PUK dan kod PIN baharu"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kod PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Kod PIN Baharu"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Sentuh untuk menaip kata laluan"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Taip kata laluan untuk membuka kunci"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Taip PIN untuk membuka kunci"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Kod PIN salah."</string>
-    <string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka kunci, tekan Menu, kemudian 0."</string>
-    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Nombor kecemasan"</string>
-    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"Tiada perkhidmatan."</string>
-    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Skrin dikunci."</string>
-    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Tekan Menu untuk menyahsekat atau membuat panggilan kecemasan."</string>
-    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Tekan Menu untuk membuka kunci."</string>
-    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Lukiskan corak untuk membuka kunci"</string>
-    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"Panggilan kecemasan"</string>
-    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Kembali ke panggilan"</string>
-    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Betul!"</string>
-    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Cuba lagi"</string>
-    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Cuba lagi"</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Telah melepasi had cubaan Buka Kunci Wajah"</string>
-    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Mengecas, (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
-    <string name="lockscreen_charged" msgid="321635745684060624">"Sudah dicas"</string>
-    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="lockscreen_low_battery" msgid="1482873981919249740">"Sambungkan pengecas anda."</string>
-    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Tiada kad SIM"</string>
-    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Tiada kad SIM dalam tablet."</string>
-    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Kad SIM tiada dalam telefon."</string>
-    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Masukkan kad SIM."</string>
-    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Kad SIM tiada atau tidak boleh dibaca. Sila masukkan kad SIM."</string>
-    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Kad SIM tidak boleh digunakan."</string>
-    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Kad SIM anda telah dilumpuhkan secara kekal.\n Hubungi pembekal perkhidmatan wayarles anda untuk mendapatkan kad SIM lain."</string>
-    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"Butang lagu sebelumnya"</string>
-    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"Butang lagu seterusnya"</string>
-    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"Butang Jeda"</string>
-    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"Butang main"</string>
-    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"Butang berhenti"</string>
-    <string name="emergency_calls_only" msgid="6733978304386365407">"Panggilan kecemasan sahaja"</string>
-    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rangkaian dikunci"</string>
-    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Kad SIM dikunci dengan PUK."</string>
-    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Lihat Panduan Pengguna atau hubungi Penjagaan Pelanggan."</string>
-    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Kad SIM dikunci."</string>
-    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Membuka kunci kad SIM..."</string>
-    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Anda telah tersilap melukis corak buka kunci anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nSila cuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Anda telah tersilap taip menaip kata laluan anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Anda telah tersilap taip PIN anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Anda telah tersilap melukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
-    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda.\n\n Sila cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Anda telah mencuba untuk membuka kunci tablet dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, tablet akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
-    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Anda telah mencuba untuk membuka kunci telefon dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, telefon akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Anda telah mencuba untuk membuka kunci tablet secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Tablet kini akan ditetapkan semula ke tetapan lalai kilang."</string>
-    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Anda telah mencuba untuk membuka kunci telefon secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Telefon kini akan ditetapkan semula kepada tetapan lalai kilang."</string>
-    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"Cuba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> saat."</string>
-    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Lupa corak?"</string>
-    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Buka kunci akaun"</string>
-    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Terlalu banyak percubaan melukis corak"</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Untuk membuka kunci, log masuk dengan akaun Google anda."</string>
-    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Nama Pengguna (E-mel)"</string>
-    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Kata laluan"</string>
-    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Log masuk"</string>
-    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nama pengguna atau kata laluan tidak sah."</string>
-    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"Lupa nama pengguna atau kata laluan anda?\nLawati "<b>"google.com/accounts/recovery"</b>"."</string>
-    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Menyemak…"</string>
-    <string name="lockscreen_unlock_label" msgid="737440483220667054">"Buka kunci"</string>
-    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Bunyi dihidupkan"</string>
-    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Bunyi dimatikan"</string>
-    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Corak dimulakan"</string>
-    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Corak dipadamkan"</string>
-    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Sel ditambahkan"</string>
-    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Corak siap"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d dari %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Tambah widget."</string>
-    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Kosong"</string>
-    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Bahagian buka kunci dikembangkan."</string>
-    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Bahagian buka kunci diruntuhkan."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
-    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Pemilih pengguna"</string>
-    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
-    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
-    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Kawalan media"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Penyusunan semula widget dimulakan."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Penyusunan semula widget tamat."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> dipadamkan."</string>
-    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kembangkan bahagian buka kunci."</string>
-    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Buka kunci luncur."</string>
-    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci corak."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Wajah Buka Kunci"</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci pin."</string>
-    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci kata laluan."</string>
-    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kawasan corak."</string>
-    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Kawasan luncur."</string>
-    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
-    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
-    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
-    <string name="granularity_label_character" msgid="7336470535385009523">"watak"</string>
-    <string name="granularity_label_word" msgid="7075570328374918660">"perkataan"</string>
-    <string name="granularity_label_link" msgid="5815508880782488267">"pautan"</string>
-    <string name="granularity_label_line" msgid="5764267235026120888">"baris"</string>
-    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
-    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
-    <string name="factorytest_failed" msgid="5410270329114212041">"Ujian kilang gagal"</string>
-    <string name="factorytest_not_system" msgid="4435201656767276723">"Tindakan FACTORY_TEST hanya disokong untuk pakej yang dipasangkan dalam /system/app."</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"Tiada pakej yang menyediakan tindakan FACTORY_TEST ditemui."</string>
-    <string name="factorytest_reboot" msgid="6320168203050791643">"But semula"</string>
-    <string name="js_dialog_title" msgid="1987483977834603872">"Halaman di \'<xliff:g id="TITLE">%s</xliff:g>\' berkata:"</string>
-    <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
-    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"Sahkan Navigasi"</string>
-    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"Tinggalkan Halaman ini"</string>
-    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"Kekal di Halaman ini"</string>
-    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nAdakah anda pasti anda mahu menavigasi keluar dari halaman ini?"</string>
-    <string name="save_password_label" msgid="6860261758665825069">"Sahkan"</string>
-    <string name="double_tap_toast" msgid="4595046515400268881">"Petua: Ketik dua kali untuk mengezum masuk dan keluar."</string>
-    <string name="autofill_this_form" msgid="4616758841157816676">"Auto isi"</string>
-    <string name="setup_autofill" msgid="7103495070180590814">"Sediakan Autoisi"</string>
-    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
-    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
-    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
-    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
-    <string name="autofill_province" msgid="2231806553863422300">"Wilayah"</string>
-    <string name="autofill_postal_code" msgid="4696430407689377108">"Poskod"</string>
-    <string name="autofill_state" msgid="6988894195520044613">"Negeri"</string>
-    <string name="autofill_zip_code" msgid="8697544592627322946">"Poskod"</string>
-    <string name="autofill_county" msgid="237073771020362891">"Wilayah"</string>
-    <string name="autofill_island" msgid="4020100875984667025">"Pulau"</string>
-    <string name="autofill_district" msgid="8400735073392267672">"Daerah"</string>
-    <string name="autofill_department" msgid="5343279462564453309">"Jabatan"</string>
-    <string name="autofill_prefecture" msgid="2028499485065800419">"Wilayah"</string>
-    <string name="autofill_parish" msgid="8202206105468820057">"Kariah"</string>
-    <string name="autofill_area" msgid="3547409050889952423">"Kawasan"</string>
-    <string name="autofill_emirate" msgid="2893880978835698818">"Emiriah"</string>
-    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"baca penanda buku dan sejarah Web anda"</string>
-    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"Membenarkan apl membaca sejarah semua URL yang telah Penyemak Imbas lawati dan semua penanda halaman Penyemak Imbas. Nota: kebenaran ini tidak boleh dikuatkuasakan oleh penyemak imbas pihak ketiga atau aplikasi lain dengan keupayaan menyemak imbas web."</string>
-    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"tulis penanda buku dan sejarah web"</string>
-    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"Membenarkan apl mengubah suai sejarah atau penanda halaman Penyemak Imbas yang tersimpan pada tablet anda. Ini boleh membenarkan apl untuk memadam atau mengubah suai data Penyemak Imbas. Nota: kebenaran ini tidak boleh dikuatkuasakan oleh penyemak imbas pihak ketiga atau aplikasi lain dengan keupayaan menyemak imbas web."</string>
-    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"Membenarkan apl mengubah suai sejarah atau penanda halaman Penyemak Imbas yang tersimpan pada telefon anda. Ini boleh membenarkan apl untuk memadam atau mengubah suai data Penyemak Imbas. Nota: kebenaran ini tidak boleh dikuatkuasakan oleh penyemak imbas pihak ketiga atau aplikasi lain dengan keupayaan menyemak imbas web."</string>
-    <string name="permlab_setAlarm" msgid="1379294556362091814">"tetapkan penggera"</string>
-    <string name="permdesc_setAlarm" msgid="316392039157473848">"Membenarkan apl untuk menetapkan penggera dalam apl penggera jam yang dipasang. Sesetengah applikasi jam penggera tidak boleh melaksanakan ciri ini."</string>
-    <string name="permlab_addVoicemail" msgid="5525660026090959044">"tambah mel suara"</string>
-    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Membenarkan apl untuk menambahkan mesej pada peti masuk mel suara anda."</string>
-    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"ubah suai kebenaran geolokasi Penyemak Imbas"</string>
-    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Membenarkan apl untuk mengubah suai kebenaran geolokasi Penyemak Imbas. Apl hasad boleh menggunakannya untuk membenarkan menghantar maklumat lokasi kepada laman web sembarangan."</string>
-    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"sahkan pakej"</string>
-    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"Membenarkan apl untuk mengesahkan bahawa pakej boleh dipasang."</string>
-    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"ikat kepada pengesah pakej"</string>
-    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"Membenarkan pemegang membuat permintaan pengesah pakej. Tidak sekali-kali diperlukan untuk apl normal."</string>
-    <string name="permlab_serialPort" msgid="546083327654631076">"akses port bersiri"</string>
-    <string name="permdesc_serialPort" msgid="2991639985224598193">"Membenarkan pemegang mengakses port bersiri menggunakan API SerialManager."</string>
-    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"akses pembekal kandungan secara luaran"</string>
-    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"Membolehkan pemegang mengakses pembekal kandungan dari luar. Tidak akan sekali-kali diperlukan untuk apl biasa."</string>
-    <string name="permlab_updateLock" msgid="3527558366616680889">"tidak menggalakkan kemas kini peranti automatik"</string>
-    <string name="permdesc_updateLock" msgid="1655625832166778492">"Membenarkan aplikasi untuk menawarkan maklumat kepada sistem tentang bila akan menjadi masa yang baik untuk but semula bukan interaktif untuk menaik taraf peranti."</string>
-    <string name="save_password_message" msgid="767344687139195790">"Adakah anda mahu penyemak imbas mengingati kata laluan ini?"</string>
-    <string name="save_password_notnow" msgid="6389675316706699758">"Bukan sekarang"</string>
-    <string name="save_password_remember" msgid="6491879678996749466">"Ingat"</string>
-    <string name="save_password_never" msgid="8274330296785855105">"Jangan sekali-kali"</string>
-    <string name="open_permission_deny" msgid="7374036708316629800">"Anda tidak mempunyai kebenaran untuk membuka laman ini."</string>
-    <string name="text_copied" msgid="4985729524670131385">"Teks disalin ke papan keratan"</string>
-    <string name="more_item_label" msgid="4650918923083320495">"Lagi"</string>
-    <string name="prepend_shortcut_label" msgid="2572214461676015642">"Menu+"</string>
-    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"ruang"</string>
-    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"enter"</string>
-    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"padam"</string>
-    <string name="search_go" msgid="8298016669822141719">"Cari"</string>
-    <string name="searchview_description_search" msgid="6749826639098512120">"Carian"</string>
-    <string name="searchview_description_query" msgid="5911778593125355124">"Pertanyaan carian"</string>
-    <string name="searchview_description_clear" msgid="1330281990951833033">"Pertanyaan jelas"</string>
-    <string name="searchview_description_submit" msgid="2688450133297983542">"Serah pertanyaan"</string>
-    <string name="searchview_description_voice" msgid="2453203695674994440">"Carian suara"</string>
-    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Dayakan Jelajah melalui Sentuhan?"</string>
-    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ingin mendayakan Jelajah melalui Sentuhan. Apabila Jelajah melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan tablet."</string>
-    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ingin mendayakan Jelajah melalui Sentuhan. Apabila Jelajah melalui Sentuhan didayakan, anda boleh mendengar atau melihat penerangan tentang apa di bawah jari anda atau melakukan gerak isyarat untuk berinteraksi dengan telefon."</string>
-    <string name="oneMonthDurationPast" msgid="7396384508953779925">"1 bulan yang lalu"</string>
-    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Sebelum 1 bulan yang lalu"</string>
-  <plurals name="num_seconds_ago">
-    <item quantity="one" msgid="4869870056547896011">"1 saat yang lalu"</item>
-    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> saat yang lalu"</item>
-  </plurals>
-  <plurals name="num_minutes_ago">
-    <item quantity="one" msgid="3306787433088810191">"1 minit yang lalu"</item>
-    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> minit yang lalu"</item>
-  </plurals>
-  <plurals name="num_hours_ago">
-    <item quantity="one" msgid="9150797944610821849">"1 jam yang lalu"</item>
-    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> jam yang lalu"</item>
-  </plurals>
-  <plurals name="last_num_days">
-    <item quantity="other" msgid="3069992808164318268">"<xliff:g id="COUNT">%d</xliff:g> hari terakhir"</item>
-  </plurals>
-    <string name="last_month" msgid="3959346739979055432">"Bulan lepas"</string>
-    <string name="older" msgid="5211975022815554840">"Lebih lama"</string>
-  <plurals name="num_days_ago">
-    <item quantity="one" msgid="861358534398115820">"semalam"</item>
-    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> hari yang lalu"</item>
-  </plurals>
-  <plurals name="in_num_seconds">
-    <item quantity="one" msgid="2729745560954905102">"dalam 1 saat"</item>
-    <item quantity="other" msgid="1241926116443974687">"dalam <xliff:g id="COUNT">%d</xliff:g> saat"</item>
-  </plurals>
-  <plurals name="in_num_minutes">
-    <item quantity="one" msgid="8793095251325200395">"dalam 1 minit"</item>
-    <item quantity="other" msgid="3330713936399448749">"dalam <xliff:g id="COUNT">%d</xliff:g> minit"</item>
-  </plurals>
-  <plurals name="in_num_hours">
-    <item quantity="one" msgid="7164353342477769999">"dalam 1 jam"</item>
-    <item quantity="other" msgid="547290677353727389">"dalam <xliff:g id="COUNT">%d</xliff:g> jam"</item>
-  </plurals>
-  <plurals name="in_num_days">
-    <item quantity="one" msgid="5413088743009839518">"esok"</item>
-    <item quantity="other" msgid="5109449375100953247">"dalam <xliff:g id="COUNT">%d</xliff:g> hari"</item>
-  </plurals>
-  <plurals name="abbrev_num_seconds_ago">
-    <item quantity="one" msgid="1849036840200069118">"1 saat yang lalu"</item>
-    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> saat yang lalu"</item>
-  </plurals>
-  <plurals name="abbrev_num_minutes_ago">
-    <item quantity="one" msgid="6361490147113871545">"1 minit yang lalu"</item>
-    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> minit yang lalu"</item>
-  </plurals>
-  <plurals name="abbrev_num_hours_ago">
-    <item quantity="one" msgid="4796212039724722116">"1 jam yang lalu"</item>
-    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> jam yang lalu"</item>
-  </plurals>
-  <plurals name="abbrev_num_days_ago">
-    <item quantity="one" msgid="8463161711492680309">"semalam"</item>
-    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> hari yang lalu"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_seconds">
-    <item quantity="one" msgid="5842225370795066299">"dalam 1 saat"</item>
-    <item quantity="other" msgid="5495880108825805108">"dalam <xliff:g id="COUNT">%d</xliff:g> saat"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_minutes">
-    <item quantity="one" msgid="562786149928284878">"dalam 1 minit"</item>
-    <item quantity="other" msgid="4216113292706568726">"dalam <xliff:g id="COUNT">%d</xliff:g> minit"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_hours">
-    <item quantity="one" msgid="3274708118124045246">"dalam 1 jam"</item>
-    <item quantity="other" msgid="3705373766798013406">"dalam <xliff:g id="COUNT">%d</xliff:g> jam"</item>
-  </plurals>
-  <plurals name="abbrev_in_num_days">
-    <item quantity="one" msgid="2178576254385739855">"esok"</item>
-    <item quantity="other" msgid="2973062968038355991">"dalam <xliff:g id="COUNT">%d</xliff:g> hari"</item>
-  </plurals>
-    <string name="preposition_for_date" msgid="9093949757757445117">"pada <xliff:g id="DATE">%s</xliff:g>"</string>
-    <string name="preposition_for_time" msgid="5506831244263083793">"pada <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="preposition_for_year" msgid="5040395640711867177">"dalam <xliff:g id="YEAR">%s</xliff:g>"</string>
-    <string name="day" msgid="8144195776058119424">"hari"</string>
-    <string name="days" msgid="4774547661021344602">"hari"</string>
-    <string name="hour" msgid="2126771916426189481">"jam"</string>
-    <string name="hours" msgid="894424005266852993">"jam"</string>
-    <string name="minute" msgid="9148878657703769868">"min"</string>
-    <string name="minutes" msgid="5646001005827034509">"min"</string>
-    <string name="second" msgid="3184235808021478">"saat"</string>
-    <string name="seconds" msgid="3161515347216589235">"saat"</string>
-    <string name="week" msgid="5617961537173061583">"minggu"</string>
-    <string name="weeks" msgid="6509623834583944518">"minggu"</string>
-    <string name="year" msgid="4001118221013892076">"tahun"</string>
-    <string name="years" msgid="6881577717993213522">"tahun"</string>
-  <plurals name="duration_seconds">
-    <item quantity="one" msgid="6962015528372969481">"1 saat"</item>
-    <item quantity="other" msgid="1886107766577166786">"<xliff:g id="COUNT">%d</xliff:g> saat"</item>
-  </plurals>
-  <plurals name="duration_minutes">
-    <item quantity="one" msgid="4915414002546085617">"1 minit"</item>
-    <item quantity="other" msgid="3165187169224908775">"<xliff:g id="COUNT">%d</xliff:g> minit"</item>
-  </plurals>
-  <plurals name="duration_hours">
-    <item quantity="one" msgid="8917467491248809972">"1 jam"</item>
-    <item quantity="other" msgid="3863962854246773930">"<xliff:g id="COUNT">%d</xliff:g> jam"</item>
-  </plurals>
-    <string name="VideoView_error_title" msgid="3534509135438353077">"Masalah video"</string>
-    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"Maaf, video ini tidak sah untuk penstriman ke peranti ini."</string>
-    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"Tidak dapat mainkan video ini."</string>
-    <string name="VideoView_error_button" msgid="2822238215100679592">"OK"</string>
-    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
-    <string name="noon" msgid="7245353528818587908">"tengah hari"</string>
-    <string name="Noon" msgid="3342127745230013127">"Tengah hari"</string>
-    <string name="midnight" msgid="7166259508850457595">"tengah malam"</string>
-    <string name="Midnight" msgid="5630806906897892201">"Tengah malam"</string>
-    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
-    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
-    <string name="selectAll" msgid="6876518925844129331">"Pilih semua"</string>
-    <string name="cut" msgid="3092569408438626261">"Potong"</string>
-    <string name="copy" msgid="2681946229533511987">"Salin"</string>
-    <string name="paste" msgid="5629880836805036433">"Tampal"</string>
-    <string name="replace" msgid="5781686059063148930">"Ganti..."</string>
-    <string name="delete" msgid="6098684844021697789">"Padam"</string>
-    <string name="copyUrl" msgid="2538211579596067402">"Salin URL"</string>
-    <string name="selectTextMode" msgid="1018691815143165326">"Pilih teks"</string>
-    <string name="textSelectionCABTitle" msgid="5236850394370820357">"Pemilihan teks"</string>
-    <string name="addToDictionary" msgid="4352161534510057874">"Tambah ke kamus"</string>
-    <string name="deleteText" msgid="6979668428458199034">"Padam"</string>
-    <string name="inputMethod" msgid="1653630062304567879">"Kaedah input"</string>
-    <string name="editTextMenuTitle" msgid="4909135564941815494">"Tindakan teks"</string>
-    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Ruang storan semakin berkurangan"</string>
-    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Beberapa fungsi sistem mungkin tidak berfungsi"</string>
-    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> sedang berjalan"</string>
-    <string name="app_running_notification_text" msgid="4653586947747330058">"Sentuh untuk maklumat lanjut atau untuk menghentikan apl."</string>
-    <string name="ok" msgid="5970060430562524910">"OK"</string>
-    <string name="cancel" msgid="6442560571259935130">"Batal"</string>
-    <string name="yes" msgid="5362982303337969312">"OK"</string>
-    <string name="no" msgid="5141531044935541497">"Batal"</string>
-    <string name="dialog_alert_title" msgid="2049658708609043103">"Perhatian"</string>
-    <string name="loading" msgid="7933681260296021180">"Memuatkan…"</string>
-    <string name="capital_on" msgid="1544682755514494298">"HIDUP"</string>
-    <string name="capital_off" msgid="6815870386972805832">"MATIKAN"</string>
-    <string name="whichApplication" msgid="4533185947064773386">"Selesaikan tindakan menggunakan"</string>
-    <string name="alwaysUse" msgid="4583018368000610438">"Gunakannya secara lalai untuk tindakan ini."</string>
-    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Padam bersih lalai dalam tetapan Sistem &gt; Apl &gt; Dimuat turun."</string>
-    <string name="chooseActivity" msgid="7486876147751803333">"Pilih tindakan"</string>
-    <string name="chooseUsbActivity" msgid="6894748416073583509">"Pilih apl untuk peranti USB"</string>
-    <string name="noApplications" msgid="2991814273936504689">"Tiada apl yang boleh menjalankan tindakan ini."</string>
-    <string name="aerr_title" msgid="1905800560317137752"></string>
-    <string name="aerr_application" msgid="932628488013092776">"Malangnya, <xliff:g id="APPLICATION">%1$s</xliff:g> telah berhenti."</string>
-    <string name="aerr_process" msgid="4507058997035697579">"Malangnya, proses <xliff:g id="PROCESS">%1$s</xliff:g> telah berhenti."</string>
-    <string name="anr_title" msgid="4351948481459135709"></string>
-    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> tidak bertindak balas.\n\nAdakah anda mahu menutupnya?"</string>
-    <string name="anr_activity_process" msgid="5776209883299089767">"Aktiviti <xliff:g id="ACTIVITY">%1$s</xliff:g> tidak bertindak balas. \n\n Adakah anda mahu menutupnya?"</string>
-    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> tidak bertindak balas. Adakah anda mahu menutupnya?"</string>
-    <string name="anr_process" msgid="6513209874880517125">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> tidak bertindak balas. \n\nAdakah anda mahu menutupnya?"</string>
-    <string name="force_close" msgid="8346072094521265605">"OK"</string>
-    <string name="report" msgid="4060218260984795706">"Laporkan"</string>
-    <string name="wait" msgid="7147118217226317732">"Tunggu"</string>
-    <string name="webpage_unresponsive" msgid="3272758351138122503">"Laman ini tidak bertindak balas. \n\nAdakah anda mahu menutupnya?"</string>
-    <string name="launch_warning_title" msgid="1547997780506713581">"Apl diubah hala"</string>
-    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> kini sedang berjalan."</string>
-    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> pada asalnya telah dilancarkan."</string>
-    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Skala"</string>
-    <string name="screen_compat_mode_show" msgid="4013878876486655892">"Sentiasa tunjukkan"</string>
-    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Dayakan semula kod kompak ini tetapan Sistem &gt; Apl &gt; Dimuat turun."</string>
-    <string name="smv_application" msgid="3307209192155442829">"Apl <xliff:g id="APPLICATION">%1$s</xliff:g> (proses <xliff:g id="PROCESS">%2$s</xliff:g>) telah melanggar dasar Mod Tegasnya sendiri."</string>
-    <string name="smv_process" msgid="5120397012047462446">"Proses <xliff:g id="PROCESS">%1$s</xliff:g> telah melanggar dasar Mod Tegasnya sendiri."</string>
-    <string name="android_upgrading_title" msgid="1584192285441405746">"Android sedang menaik taraf..."</string>
-    <string name="android_upgrading_apk" msgid="7904042682111526169">"Mengoptimumkan apl <xliff:g id="NUMBER_0">%1$d</xliff:g> daripada <xliff:g id="NUMBER_1">%2$d</xliff:g>."</string>
-    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"Memulakan apl."</string>
-    <string name="android_upgrading_complete" msgid="1405954754112999229">"But akhir."</string>
-    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> dijalankan"</string>
-    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Sentuh untuk bertukar ke apl"</string>
-    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Tukar apl?"</string>
-    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"Apl lain sudah pun dijalankan yang mesti dihentikan sebelum anda boleh memulakan yang baharu."</string>
-    <string name="old_app_action" msgid="493129172238566282">"Kembali ke <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
-    <string name="old_app_description" msgid="2082094275580358049">"Jangan mulakan apl baharu."</string>
-    <string name="new_app_action" msgid="5472756926945440706">"Mulakan <xliff:g id="OLD_APP">%1$s</xliff:g>"</string>
-    <string name="new_app_description" msgid="1932143598371537340">"Hentikan apl lama tanpa menyimpan."</string>
-    <string name="sendText" msgid="5209874571959469142">"Pilih tindakan untuk teks"</string>
-    <string name="volume_ringtone" msgid="6885421406845734650">"Kelantangan pendering"</string>
-    <string name="volume_music" msgid="5421651157138628171">"Kelantangan media"</string>
-    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"Bermain melalui Bluetooth"</string>
-    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"Nada dering senyap ditetapkan"</string>
-    <string name="volume_call" msgid="3941680041282788711">"Kelantangan semasa panggilan"</string>
-    <string name="volume_bluetooth_call" msgid="2002891926351151534">"Kelantangan semasa dalam panggilan menggunakan Bluetooth"</string>
-    <string name="volume_alarm" msgid="1985191616042689100">"Kelantangan penggera"</string>
-    <string name="volume_notification" msgid="2422265656744276715">"Kelantangan pemberitahuan"</string>
-    <string name="volume_unknown" msgid="1400219669770445902">"Kelantangan"</string>
-    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"Kelantangan Bluetooth"</string>
-    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"Kelantangan nada dering"</string>
-    <string name="volume_icon_description_incall" msgid="8890073218154543397">"Kelantangan panggilan"</string>
-    <string name="volume_icon_description_media" msgid="4217311719665194215">"Kelantangan media"</string>
-    <string name="volume_icon_description_notification" msgid="7044986546477282274">"Kelantangan pemberitahuan"</string>
-    <string name="ringtone_default" msgid="3789758980357696936">"Nada dering lalai"</string>
-    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Nada dering lalai (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
-    <string name="ringtone_silent" msgid="7937634392408977062">"Tiada"</string>
-    <string name="ringtone_picker_title" msgid="3515143939175119094">"Nada dering"</string>
-    <string name="ringtone_unknown" msgid="5477919988701784788">"Nada dering tidak diketahui"</string>
-  <plurals name="wifi_available">
-    <item quantity="one" msgid="6654123987418168693">"Rangkaian Wi-Fi tersedia"</item>
-    <item quantity="other" msgid="4192424489168397386">"Rangkaian Wi-Fi tersedia"</item>
-  </plurals>
-  <plurals name="wifi_available_detailed">
-    <item quantity="one" msgid="1634101450343277345">"Rangkaian Wi-Fi terbuka tersedia"</item>
-    <item quantity="other" msgid="7915895323644292768">"Rangkaian Wi-Fi terbuka tersedia"</item>
-  </plurals>
-    <string name="wifi_available_sign_in" msgid="4029489716605255386">"Log masuk ke rangkaian Wi-Fi"</string>
-    <string name="network_available_sign_in" msgid="8495155593358054676">"Log masuk ke rangkaian"</string>
-    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
-    <skip />
-    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Tidak boleh menyambung kepada Wi-Fi"</string>
-    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" mempunyai sambungan internet yang kurang baik."</string>
-    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Langsung"</string>
-    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Mulakan Wi-Fi Langsung. Hal ini akan mematikan pengendalian klien/liputan Wi-Fi."</string>
-    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Tidak dapat memulakan Wi-Fi Langsung."</string>
-    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct dihidupkan"</string>
-    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Sentuh untuk tetapan"</string>
-    <string name="accept" msgid="1645267259272829559">"Terima"</string>
-    <string name="decline" msgid="2112225451706137894">"Tolak"</string>
-    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Jemputan dihantar"</string>
-    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Jemputan untuk menyambung"</string>
-    <string name="wifi_p2p_from_message" msgid="570389174731951769">"Daripada:"</string>
-    <string name="wifi_p2p_to_message" msgid="248968974522044099">"Kepada:"</string>
-    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Taipkan PIN yang diperlukan:"</string>
-    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Sambungan tablet ke Wi-Fi akan diputuskan buat sementara waktu semasa tablet bersambung ke <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Sambungan telefon ke Wi-Fi akan diputuskan buat sementara waktu semasa telefon bersambung ke <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
-    <string name="select_character" msgid="3365550120617701745">"Masukkan aksara"</string>
-    <string name="sms_control_title" msgid="7296612781128917719">"Menghantar mesej SMS"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; sedang menghantar banyak mesej SMS. Adakah anda mahu membenarkan apl ini terus menghantar mesej?"</string>
-    <string name="sms_control_yes" msgid="3663725993855816807">"Benarkan"</string>
-    <string name="sms_control_no" msgid="625438561395534982">"Nafikan"</string>
-    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ingin menghantar mesej kepada &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
-    <string name="sms_short_code_details" msgid="3492025719868078457">"Ini akan menyebabkan akaun mudah alih anda "<font fgcolor="#ffffb060">"dikenakan caj"</font>"."</string>
-    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"Ini akan menyebabkan akaun mudah alih anda dikenakan caj."</font></string>
-    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Hantar"</string>
-    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Batal"</string>
-    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Ingat pilihan saya"</string>
-    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Anda boleh menukar ini nanti dalam Tetapan &gt; Apl"</string>
-    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"Sentiasa Benarkan"</string>
-    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Jangan Benarkan"</string>
-    <string name="sim_removed_title" msgid="6227712319223226185">"Kad SIM dikeluarkan"</string>
-    <string name="sim_removed_message" msgid="2333164559970958645">"Rangkaian mudah alih tidak akan tersedia sehingga anda mula semula dengan kad SIM yang sah dimasukkan."</string>
-    <string name="sim_done_button" msgid="827949989369963775">"Selesai"</string>
-    <string name="sim_added_title" msgid="3719670512889674693">"Kad SIM ditambah"</string>
-    <string name="sim_added_message" msgid="6599945301141050216">"Mulakan semula peranti anda untuk mengakses rangkaian mudah alih."</string>
-    <string name="sim_restart_button" msgid="4722407842815232347">"Mulakan semula"</string>
-    <string name="time_picker_dialog_title" msgid="8349362623068819295">"Tetapkan masa"</string>
-    <string name="date_picker_dialog_title" msgid="5879450659453782278">"Tetapkan tarikh"</string>
-    <string name="date_time_set" msgid="5777075614321087758">"Tetapkan"</string>
-    <string name="date_time_done" msgid="2507683751759308828">"Selesai"</string>
-    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"BAHARU: "</font></string>
-    <string name="perms_description_app" msgid="5139836143293299417">"Disediakan oleh <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
-    <string name="no_permissions" msgid="7283357728219338112">"Tiada kebenaran diperlukan"</string>
-    <string name="perm_costs_money" msgid="4902470324142151116">"anda mungkin dikenakan bayaran"</string>
-    <string name="usb_storage_activity_title" msgid="4465055157209648641">"Storan massa USB"</string>
-    <string name="usb_storage_title" msgid="5901459041398751495">"sambungan USB"</string>
-    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"Anda bersambung ke komputer melalui USB. Sentuh butang di bawah jika anda mahu menyalin fail antara komputer dan storan USB Android anda."</string>
-    <string name="usb_storage_message" product="default" msgid="805351000446037811">"Anda telah bersambung ke komputer melalui USB. Sentuh butang di bawah jika anda mahu menyalin fail di antara komputer dan kad SD Android anda."</string>
-    <string name="usb_storage_button_mount" msgid="1052259930369508235">"Hidupkan storan USB"</string>
-    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"Terdapat masalah menggunakan storan USB anda untuk storan massa USB."</string>
-    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"Terdapat masalah menggunakan kad SD anda untuk storan massa USB."</string>
-    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB disambungkan"</string>
-    <string name="usb_storage_notification_message" msgid="939822783828183763">"Pilih untuk menyalin fail ke/dari komputer anda."</string>
-    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"Matikan storan USB"</string>
-    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"Sentuh untuk mematikan storan USB."</string>
-    <string name="usb_storage_stop_title" msgid="660129851708775853">"Storan USB sedang digunakan"</string>
-    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"Sebelum mematikan storan USB, nyahlekap (\"keluarkan\") storan USB Android dari komputer anda."</string>
-    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"Sebelum mematikan storan USB, nyah lekap (\"keluarkan\") kad SD Android dari komputer anda."</string>
-    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"Matikan storan USB"</string>
-    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"Terdapat masalah mematikan storan USB. Semak bahawa anda telah menyahlekapkan hos USB, kemudian cuba lagi."</string>
-    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"Hidupkan storan USB."</string>
-    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"Jika anda menghidupkan storan USB, sesetengah apl yang sedang anda gunakan akan terhenti dan mungkin tidak akan tersedia sehingga anda mematikan storan USB."</string>
-    <string name="dlg_error_title" msgid="7323658469626514207">"Operasi USB tidak berjaya"</string>
-    <string name="dlg_ok" msgid="7376953167039865701">"OK"</string>
-    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"Disambungkan sebagai peranti media"</string>
-    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Disambungkan sebagai kamera"</string>
-    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Disambungkan sebagai pemasang"</string>
-    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Disambungkan kepada aksesori USB"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"Sentuh untuk mendapatkan pilihan USB yang lain."</string>
-    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Format storan USB?"</string>
-    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Format kad SD?"</string>
-    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Semua fail yang disimpan dalam storan USB anda akan dipadamkan. Tindakan ini tidak boleh diterbalikkan!"</string>
-    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Semua data pada kad anda akan hilang."</string>
-    <string name="extmedia_format_button_format" msgid="4131064560127478695">"Format"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"Penyahpepijatan USB disambungkan"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"Sentuh untuk melumpuhkan penyahpepijatan USB."</string>
-    <string name="select_input_method" msgid="4653387336791222978">"Pilih kaedah input"</string>
-    <string name="configure_input_methods" msgid="9091652157722495116">"Sediakan kaedah input"</string>
-    <string name="use_physical_keyboard" msgid="6203112478095117625">"Papan kekunci fizikal"</string>
-    <string name="hardware" msgid="7517821086888990278">"Perkakasan"</string>
-    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"Pilih susun atur papan kekunci"</string>
-    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"Sentuh untuk memilih susun atur papan kekunci."</string>
-    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-    <string name="candidates_style" msgid="4333913089637062257"><u>"calon"</u></string>
-    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"Menyediakan storan USB"</string>
-    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"Menyediakan kad SD"</string>
-    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"Menyemak untuk mengesan ralat."</string>
-    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"Storan USB kosong"</string>
-    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"Kad SD kosong"</string>
-    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"Storan USB kosong atau mempunyai sistem fail yang tidak disokong."</string>
-    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"Kad SD kosong atau mempunyai sistem fail yang tidak disokong."</string>
-    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"Storan USB rosak"</string>
-    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"Kad SD rosak"</string>
-    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"Storan USB rosak. Cuba formatkannya semula."</string>
-    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"Kad SD rosak. Cuba formatkannya semula."</string>
-    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"Strn USB dialh klr tnpa dijgka"</string>
-    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"Kad SD dikeluarkan tanpa dijangka"</string>
-    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"Nyahlekap storan USB sebelum mengeluarkannya untuk mengelakkan kehilangan data."</string>
-    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"Nyahlekap kad SD sebelum mengeluarkannya untuk mengelakkan kehilangan data."</string>
-    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"Strn USB slamat utk dikluarkan"</string>
-    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"selamat untuk mengeluarkan kad SD"</string>
-    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"Anda boleh mengeluarkan storan USB dengan selamat."</string>
-    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"Anda boleh mengeluarkan kad SD dengan selamat."</string>
-    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"Storan USB dialih keluar"</string>
-    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"Kad SD dikeluarkan"</string>
-    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"Storan USB dikeluarkan. Sisipkan media baru."</string>
-    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"Kad SD telah dikeluarkan. Masukkan yang baru."</string>
-    <string name="activity_list_empty" msgid="1675388330786841066">"Tiada aktiviti yang sepadan ditemui."</string>
-    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"kemas kini statistik penggunaan komponen"</string>
-    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"Membenarkan apl untuk mengubah suai statistik penggunaan komponen yang dikumpul. Bukan untuk kegunaan apl biasa."</string>
-    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"salin kandungan"</string>
-    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"Membenarkan apl untuk menggunakan perkhidmatan bekas lalai untuk menyalin kandungan. Bukan untuk digunakan oleh apl biasa."</string>
-    <string name="permlab_route_media_output" msgid="1642024455750414694">"Buat laluan output media"</string>
-    <string name="permdesc_route_media_output" msgid="4932818749547244346">"Membenarkan apl untuk membuat laluan output media ke peranti luaran lain."</string>
-    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"Akses storan selamat pengawal kekunci"</string>
-    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Membenarkan aplikasi mengakses storan selamat pengawal kekunci."</string>
-    <string name="permlab_control_keyguard" msgid="172195184207828387">"Kawal paparkan dan sembunyikan pengawal kekunci"</string>
-    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Membenarkan aplikasi untuk mengawal pengawal kekunci."</string>
-    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Sentuh dua kali untuk mendapatkan kawalan zum"</string>
-    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Tidak dapat menambahkan widget."</string>
-    <string name="ime_action_go" msgid="8320845651737369027">"Pergi"</string>
-    <string name="ime_action_search" msgid="658110271822807811">"Cari"</string>
-    <string name="ime_action_send" msgid="2316166556349314424">"Hantar"</string>
-    <string name="ime_action_next" msgid="3138843904009813834">"Seterusnya"</string>
-    <string name="ime_action_done" msgid="8971516117910934605">"Selesai"</string>
-    <string name="ime_action_previous" msgid="1443550039250105948">"Sblm"</string>
-    <string name="ime_action_default" msgid="2840921885558045721">"Laksanakan"</string>
-    <string name="dial_number_using" msgid="5789176425167573586">"Dail nombor\nmenggunakan <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="create_contact_using" msgid="4947405226788104538">"Wujudkan kenalan\nmenggunakan <xliff:g id="NUMBER">%s</xliff:g>"</string>
-    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Satu atau lebih apl berikut meminta kebenaran untuk mengakses akaun anda, sekarang dan pada masa hadapan."</string>
-    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Adakah anda mahu membenarkan permintaan ini?"</string>
-    <string name="grant_permissions_header_text" msgid="6874497408201826708">"Permintaan akses"</string>
-    <string name="allow" msgid="7225948811296386551">"Benarkan"</string>
-    <string name="deny" msgid="2081879885755434506">"Nafi"</string>
-    <string name="permission_request_notification_title" msgid="6486759795926237907">"Kebenaran diminta"</string>
-    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Kebenaran diminta\nuntuk akaun <xliff:g id="ACCOUNT">%s</xliff:g>."</string>
-    <string name="input_method_binding_label" msgid="1283557179944992649">"Kaedah input"</string>
-    <string name="sync_binding_label" msgid="3687969138375092423">"Penyegerakan"</string>
-    <string name="accessibility_binding_label" msgid="4148120742096474641">"Kebolehaksesan"</string>
-    <string name="wallpaper_binding_label" msgid="1240087844304687662">"Kertas dinding"</string>
-    <string name="chooser_wallpaper" msgid="7873476199295190279">"Tukar kertas dinding"</string>
-    <string name="notification_listener_binding_label" msgid="2014162835481906429">"Pendengar pemberitahuan"</string>
-    <string name="vpn_title" msgid="19615213552042827">"VPN diaktifkan"</string>
-    <string name="vpn_title_long" msgid="6400714798049252294">"VPN diaktifkan oleh <xliff:g id="APP">%s</xliff:g>"</string>
-    <string name="vpn_text" msgid="3011306607126450322">"Sentuh untuk mengurus rangkaian."</string>
-    <string name="vpn_text_long" msgid="6407351006249174473">"Bersambung ke <xliff:g id="SESSION">%s</xliff:g>. Sentuh untuk mengurus rangkaian."</string>
-    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"VPN sentiasa hidup sedang disambungkan..."</string>
-    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"VPN sentiasa hidup telah disambungkan"</string>
-    <string name="vpn_lockdown_error" msgid="6009249814034708175">"Ralat VPN sentiasa hidup"</string>
-    <string name="vpn_lockdown_config" msgid="6415899150671537970">"Sentuh untuk mengkonfigurasikan"</string>
-    <string name="upload_file" msgid="2897957172366730416">"Pilih fail"</string>
-    <string name="no_file_chosen" msgid="6363648562170759465">"Tiada fail dipilih"</string>
-    <string name="reset" msgid="2448168080964209908">"Tetapkan semula"</string>
-    <string name="submit" msgid="1602335572089911941">"Serah"</string>
-    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Mod kereta didayakan"</string>
-    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Sentuh untuk keluar dari mod kereta."</string>
-    <string name="tethered_notification_title" msgid="3146694234398202601">"Penambatan atau titik panas aktif"</string>
-    <string name="tethered_notification_message" msgid="6857031760103062982">"Sentuh untuk menyediakan."</string>
-    <string name="back_button_label" msgid="2300470004503343439">"Kembali"</string>
-    <string name="next_button_label" msgid="1080555104677992408">"Seterusnya"</string>
-    <string name="skip_button_label" msgid="1275362299471631819">"Langkau"</string>
-    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Penggunaan tinggi data mudah alih"</string>
-    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Sentuh untuk mengetahui lebih lanjut mengenai penggunaan data."</string>
-    <string name="throttled_notification_title" msgid="6269541897729781332">"Melebihi had data mudah alih"</string>
-    <string name="throttled_notification_message" msgid="5443457321354907181">"Sentuh untuk mengetahui lebih lanjut mengenai penggunaan data mudah alih."</string>
-    <string name="no_matches" msgid="8129421908915840737">"Tiada padanan"</string>
-    <string name="find_on_page" msgid="1946799233822820384">"Cari di halaman"</string>
-  <plurals name="matches_found">
-    <item quantity="one" msgid="8167147081136579439">"1 padanan"</item>
-    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="INDEX">%d</xliff:g> daripada <xliff:g id="TOTAL">%d</xliff:g>"</item>
-  </plurals>
-    <string name="action_mode_done" msgid="7217581640461922289">"Selesai"</string>
-    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"Menyahlekap storan USB…"</string>
-    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"Menyahlekap kad SD…"</string>
-    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"Memadamkan storan USB…"</string>
-    <string name="progress_erasing" product="default" msgid="6596988875507043042">"Memadamkan kad SD…"</string>
-    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"Tidak dapat memadamkan storan USB."</string>
-    <string name="format_error" product="default" msgid="7315248696644510935">"Tidak dapat memadamkan kad SD."</string>
-    <string name="media_bad_removal" msgid="7960864061016603281">"Kad SD telah dikeluarkan sebelum dinyahlekap."</string>
-    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"Storan USB sedang disemak buat masa ini."</string>
-    <string name="media_checking" product="default" msgid="7334762503904827481">"Kad SD sedang disemak buat masa ini."</string>
-    <string name="media_removed" msgid="7001526905057952097">"Kad SD telah dikeluarkan."</string>
-    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"Storan USB sedang digunakan oleh komputer buat masa ini."</string>
-    <string name="media_shared" product="default" msgid="5706130568133540435">"Kad SD sedang digunakan oleh komputer buat masa ini."</string>
-    <string name="media_unknown_state" msgid="729192782197290385">"Media luaran dalam keadaan yang tidak diketahui."</string>
-    <string name="share" msgid="1778686618230011964">"Kongsi"</string>
-    <string name="find" msgid="4808270900322985960">"Dapatkan"</string>
-    <string name="websearch" msgid="4337157977400211589">"Carian Web"</string>
-    <string name="find_next" msgid="5742124618942193978">"Cari seterusnya"</string>
-    <string name="find_previous" msgid="2196723669388360506">"Cari sebelumnya"</string>
-    <string name="gpsNotifTicker" msgid="5622683912616496172">"Permintaan lokasi daripada <xliff:g id="NAME">%s</xliff:g>"</string>
-    <string name="gpsNotifTitle" msgid="5446858717157416839">"Permintaan lokasi"</string>
-    <string name="gpsNotifMessage" msgid="1374718023224000702">"Diminta oleh <xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)"</string>
-    <string name="gpsVerifYes" msgid="2346566072867213563">"Ya"</string>
-    <string name="gpsVerifNo" msgid="1146564937346454865">"Tidak"</string>
-    <string name="sync_too_many_deletes" msgid="5296321850662746890">"Melebihi had padam"</string>
-    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Terdapat <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> item yang dipadamkan untuk <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, akaun <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Apakah yang mahu anda lakukan?"</string>
-    <string name="sync_really_delete" msgid="2572600103122596243">"Padamkan item itu"</string>
-    <string name="sync_undo_deletes" msgid="2941317360600338602">"Buat asal pemadaman"</string>
-    <string name="sync_do_nothing" msgid="3743764740430821845">"Jangan lakukan apa-apa sekarang"</string>
-    <string name="choose_account_label" msgid="5655203089746423927">"Pilih akaun"</string>
-    <string name="add_account_label" msgid="2935267344849993553">"Tambah akaun"</string>
-    <string name="add_account_button_label" msgid="3611982894853435874">"Tambah akaun"</string>
-    <string name="number_picker_increment_button" msgid="2412072272832284313">"Tingkatkan"</string>
-    <string name="number_picker_decrement_button" msgid="476050778386779067">"Kurangkan"</string>
-    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g> sentuh terus."</string>
-    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Luncurkan ke atas untuk meningkatkan dan ke bawah untuk mengurangkan."</string>
-    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"Tingkatkan minit"</string>
-    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"Kurangkan minit"</string>
-    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Tingkatkan jam"</string>
-    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Kurangkan jam"</string>
-    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Tetapkan PM"</string>
-    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Tetapkan AM"</string>
-    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Tingkatkan bulan"</string>
-    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Kurangkan bulan"</string>
-    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Tingkatkan hari"</string>
-    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"Kurangkan hari"</string>
-    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"Tingkatkan tahun"</string>
-    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"Kurangkan tahun"</string>
-    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Batal"</string>
-    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Padam"</string>
-    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Selesai"</string>
-    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Perubahan mod"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
-    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Masuk"</string>
-    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Pilih apl"</string>
-    <string name="shareactionprovider_share_with" msgid="806688056141131819">"Kongsi dengan"</string>
-    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Kongsi dengan <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="content_description_sliding_handle" msgid="415975056159262248">"Pemegang gelongsor. Sentuh &amp; tahan."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Luncurkan ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Luncurkan ke kanan untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Buka kunci"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
-    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Leret untuk membuka kunci."</string>
-    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Pasangkan set kepala untuk mendengar kekunci kata laluan disebutkan."</string>
-    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Titik."</string>
-    <string name="action_bar_home_description" msgid="5293600496601490216">"Navigasi laman utama"</string>
-    <string name="action_bar_up_description" msgid="2237496562952152589">"Navigasi ke atas"</string>
-    <string name="action_menu_overflow_description" msgid="2295659037509008453">"Lagi pilihan"</string>
-    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
-    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
-    <string name="storage_internal" msgid="4891916833657929263">"Storan dalaman"</string>
-    <string name="storage_sd_card" msgid="3282948861378286745">"Kad SD"</string>
-    <string name="storage_usb" msgid="3017954059538517278">"Storan USB"</string>
-    <string name="extract_edit_menu_button" msgid="8940478730496610137">"Edit"</string>
-    <string name="data_usage_warning_title" msgid="1955638862122232342">"Amaran penggunaan data"</string>
-    <string name="data_usage_warning_body" msgid="2814673551471969954">"Sentuh untuk melihat penggunaan dan tetapan."</string>
-    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"Data 2G-3G dilumpuhkan"</string>
-    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"Data 4G dilumpuhkan"</string>
-    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"Data mudah alih dilumpuhkan"</string>
-    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Data Wi-Fi dilumpuhkan"</string>
-    <string name="data_usage_limit_body" msgid="3317964706973601386">"Sentuh untuk mendayakan."</string>
-    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"Melebihi had data 2G-3G"</string>
-    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"Melebihi had data 4G"</string>
-    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"Melebihi had data mudah alih"</string>
-    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Melebihi had data Wi-Fi"</string>
-    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> melebihi had yang ditentukan."</string>
-    <string name="data_usage_restricted_title" msgid="5965157361036321914">"Data latar belakang terhad"</string>
-    <string name="data_usage_restricted_body" msgid="6741521330997452990">"Sentuh untuk membuang sekatan."</string>
-    <string name="ssl_certificate" msgid="6510040486049237639">"Sijil keselamatan"</string>
-    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Sijil ini sah."</string>
-    <string name="issued_to" msgid="454239480274921032">"Dikeluarkan kepada:"</string>
-    <string name="common_name" msgid="2233209299434172646">"Nama biasa:"</string>
-    <string name="org_name" msgid="6973561190762085236">"Organisasi:"</string>
-    <string name="org_unit" msgid="7265981890422070383">"Unit organisasi:"</string>
-    <string name="issued_by" msgid="2647584988057481566">"Dikeluarkan oleh:"</string>
-    <string name="validity_period" msgid="8818886137545983110">"Kesahan:"</string>
-    <string name="issued_on" msgid="5895017404361397232">"Dikeluarkan pada:"</string>
-    <string name="expires_on" msgid="3676242949915959821">"Tamat tempoh pada:"</string>
-    <string name="serial_number" msgid="758814067660862493">"Nombor siri:"</string>
-    <string name="fingerprints" msgid="4516019619850763049">"Cap jari:"</string>
-    <string name="sha256_fingerprint" msgid="4391271286477279263">"Cap jari SHA-256:"</string>
-    <string name="sha1_fingerprint" msgid="7930330235269404581">"Cap jari SHA-1:"</string>
-    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"Lihat semua"</string>
-    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"Pilih aktiviti"</string>
-    <string name="share_action_provider_share_with" msgid="5247684435979149216">"Kongsi dengan"</string>
-    <string name="status_bar_device_locked" msgid="3092703448690669768">"Peranti dikunci."</string>
-    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
-    <string name="sending" msgid="3245653681008218030">"Menghantar…"</string>
-    <string name="launchBrowserDefault" msgid="2057951947297614725">"Lancarkan Penyemak Imbas?"</string>
-    <string name="SetupCallDefault" msgid="5834948469253758575">"Terima panggilan?"</string>
-    <string name="activity_resolver_use_always" msgid="8017770747801494933">"Sentiasa"</string>
-    <string name="activity_resolver_use_once" msgid="2404644797149173758">"Hanya sekali"</string>
-    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"Tablet"</string>
-    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"Telefon"</string>
-    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"Fon kepala"</string>
-    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"Pembesar suara dok"</string>
-    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
-    <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
-    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
-    <string name="wireless_display_route_description" msgid="9070346425023979651">"Paparan wayarles"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Selesai"</string>
-    <string name="media_route_button_content_description" msgid="5758553567065145276">"Output media"</string>
-    <string name="media_route_status_scanning" msgid="7279908761758293783">"Mengimbas…"</string>
-    <string name="media_route_status_connecting" msgid="6422571716007825440">"Menyambung..."</string>
-    <string name="media_route_status_available" msgid="6983258067194649391">"Tersedia"</string>
-    <string name="media_route_status_not_available" msgid="6739899962681886401">"Tidak tersedia"</string>
-    <string name="media_route_status_in_use" msgid="4533786031090198063">"Sedang digunakan"</string>
-    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"Skrin Terbina Dalam"</string>
-    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"Skrin HDMI"</string>
-    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Tindih #<xliff:g id="ID">%1$d</xliff:g>"</string>
-    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
-    <!-- no translation found for display_manager_overlay_display_secure_suffix (6022119702628572080) -->
-    <skip />
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Paparan wayarles disambungkan"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Skrin ini ditunjukkan pada peranti lain"</string>
-    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Putus sambungan"</string>
-    <string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan kecemasan"</string>
-    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Corak"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Corak Salah"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Kata Laluan Salah"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN salah"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Cuba lagi dalam <xliff:g id="NUMBER">%1$d</xliff:g> saat."</string>
-    <string name="kg_pattern_instructions" msgid="398978611683075868">"Lukiskan corak anda"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Masukkan PIN SIM"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"Masukkan PIN"</string>
-    <string name="kg_password_instructions" msgid="5753646556186936819">"Masukkan Kata Laluan"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Hubungi pembawa untuk butiran."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Masukkan kod PIN yang diingini"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Sahkan kod PIN yang diingini"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kad SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kod PIN salah."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK mestilah 8 nombor atau lebih."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan semula kod PIN yang betul. Percubaan berulang akan melumpuhkan SIM secara kekal."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kod PIN tidak sepadan"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak percubaan melukis corak"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Untuk membuka kunci, log masuk dengan akaun Google anda."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Nama Pengguna (E-mel)"</string>
-    <string name="kg_login_password_hint" msgid="9057289103827298549">"Kata laluan"</string>
-    <string name="kg_login_submit_button" msgid="5355904582674054702">"Log masuk"</string>
-    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nama pengguna atau kata laluan tidak sah."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Lupa nama pengguna atau kata laluan anda?\nLawati"<b>"google.com/accounts/recovery"</b>"."</string>
-    <string name="kg_login_checking_password" msgid="1052685197710252395">"Menyemak akaun…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Anda telah menaip PIN anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Anda telah menaip kata laluan anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Anda telah tersilap melukis corak buka kunci anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Anda telah mencuba untuk membuka kunci tablet dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, tablet akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Anda telah mencuba untuk membuka kunci telefon dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, telefon akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Anda telah mencuba untuk membuka kunci tablet secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Tablet kini akan ditetapkan semula ke tetapan lalai kilang."</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Anda telah mencuba untuk membuka kunci telefon secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Telefon kini akan ditetapkan semula ke tetapan lalai kilang."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah tersilap melukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
-    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
-    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Alih keluar"</string>
-    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"Tingkatkan kelantangan melebihi aras yang dicadangkan?\nMendengar pada kelantangan tinggi untuk tempoh yang panjang boleh merosakkan pendengaran anda."</string>
-    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Teruskan menahan dengan dua jari untuk mendayakan kebolehcapaian."</string>
-    <string name="accessibility_enabled" msgid="1381972048564547685">"Kebolehcapaian didayakan."</string>
-    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"Kebolehcapaian dibatalkan."</string>
-    <string name="user_switched" msgid="3768006783166984410">"Pengguna semasa <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="owner_name" msgid="2716755460376028154">"Pemilik"</string>
-    <string name="error_message_title" msgid="4510373083082500195">"Ralat"</string>
-    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"Apl ini tidak menyokong akaun untuk profil yang disekat"</string>
-    <string name="app_not_found" msgid="3429141853498927379">"Tidak menemui aplikasi untuk mengendalikan tindakan ini"</string>
-    <string name="revoke" msgid="5404479185228271586">"Batalkan"</string>
-    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
-    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
-    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
-    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
-    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
-    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
-    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
-    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
-    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
-    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
-    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
-    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
-    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
-    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
-    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
-    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"ISO B4"</string>
-    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
-    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
-    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
-    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
-    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
-    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
-    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
-    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
-    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
-    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
-    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
-    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
-    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
-    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
-    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
-    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
-    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
-    <string name="mediaSize_na_letter" msgid="4191805615829472953">"Surat"</string>
-    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"Surat Kerajaan"</string>
-    <string name="mediaSize_na_legal" msgid="6697982988283823150">"Undang-undang"</string>
-    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"Undang-undang Junior"</string>
-    <string name="mediaSize_na_ledger" msgid="281871464896601236">"Lejar"</string>
-    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"Tabloid"</string>
-    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"Dibatalkan"</string>
-    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"Ralat menulis kandungan"</string>
-    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"Masukkan PIN"</string>
-    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"PIN semasa"</string>
-    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"PIN baharu"</string>
-    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"Sahkan PIN baharu"</string>
-    <string name="restr_pin_create_pin" msgid="8017600000263450337">"Buat PIN untuk mengubah suai sekatan"</string>
-    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN tidak sepadan. Cuba lagi."</string>
-    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN terlalu pendek. Mesti sekurang-kurangnya 4 angka."</string>
-  <plurals name="restr_pin_countdown">
-    <item quantity="one" msgid="4835639969503729874">"PIN salah. Cuba lagi dalam masa 1 saat."</item>
-    <item quantity="other" msgid="8030607343223287654">"PIN salah. Cuba lagi dalam masa <xliff:g id="COUNT">%d</xliff:g> saat."</item>
-  </plurals>
-</resources>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index 3be8817..a67cb28 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Uten navn&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Skriv inn en PUK-kode på åtte tall eller mer."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM-kortet ditt er PUK-låst. Skriv inn PUK-koden for å låse det opp."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Skriv inn PUK2 for å låse opp SIM-kortet."</string>
+    <string name="enablePin" msgid="209412020907207950">"Mislyktes – aktiver lås for SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før SIM-kortet låses."</item>
+    <item quantity="other" msgid="7530597808358774740">"Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før SIM-kortet låses."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Inngående nummervisning"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synkronisering"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"For mange slettinger av <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Nettbrettlageret er fullt. Slett noen filer for å frigjøre lagringsplass."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Klokkens lagringsplass er full. Slett filer for å frigjøre plass."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonlageret er fullt. Slett noen filer for å frigjøre lagringsplass."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Nettverket blir muligens overvåket"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Av en ukjent tredjepart"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Ringelyd på"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Avslutter…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Nettbrettet slås av."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Klokken slås av."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefonen kommer til å slås av."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Vil du slå av?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Start på nytt i sikker modus"</string>
@@ -159,13 +188,14 @@
     <string name="global_action_power_off" msgid="4471879440839879722">"Slå av"</string>
     <string name="global_action_bug_report" msgid="7934010578922304799">"Feilrapport"</string>
     <string name="bugreport_title" msgid="2667494803742548533">"Utfør feilrapport"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Informasjon om den nåværende tilstanden til enheten din samles inn og sendes som en e-post. Det tar litt tid fra du starter feilrapporten til e-posten er klar, så vær tålmodig."</string>
+    <string name="bugreport_message" msgid="398447048750350456">"Informasjon om tilstanden til enheten din samles inn og sendes som en e-post. Det tar litt tid fra du starter feilrapporten til e-posten er klar, så vær tålmodig."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Stillemodus"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Lyden er av"</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Lyden er på"</string>
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flymodus"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flymodus er på"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flymodus er av"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Innstillinger"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Sikkermodus"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-system"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"avinstallere snarveier"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Lar appen fjerne snarveier på startsiden uten å involvere brukeren."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"omdirigere utgående anrop"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Lar appen behandle utgående anrop og endre nummeret som skal ringes opp. Denne tillatelsen lar appen overvåke, viderekoble eller hindre utgående anrop."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Lar appen se nummeret det ringes til under en utgående samtale, med mulighet for å omdirigere anropet til et annet nummer eller avbryte samtalen fullstendig."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"motta tekstmeldinger (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Lar appen motta og behandle tekstmeldinger. Dette betyr at appen kan overvåke eller slette meldinger som er sendt til enheten din uten at du har sett dem."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"motta tekstmeldinger (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Lar appen hente ut innholdet i det aktive vinduet. Ondsinnede apper kan hente ut hele vindusinnholdet og undersøke all teksten, med unntak av passord."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktivere tilgjengelighet midlertidig"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Lar en app midlertidig aktivere tilgjengelighet på enheten. Skadelige apper kan aktivere tilgjengelighet uten bekreftelse fra brukeren."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hente vindusinformasjon"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Lar appen hente informasjon om vinduene fra vindusbehandleren. Skadelige apper kan hente informasjon som ikke er ment for intern systembruk."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"hente vindustoken"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Gir appen tillatelse til å hente vindustokenet. Skadelige apper kan sette igang uautorisert samhandling med appvinduet ved å imitere systemet."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"hente bildestatistikk"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Gir appen tillatelse til å samle inn bildestatistikk. Skadelige apper kan observere bildestatistikken til vinduer i andre apper."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrere hendelser"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Lar appen registrere et inndatafilter som filtrerer strømmen for alle brukerhendelser før de sendes ut. Skadelige apper kan kontrollere brukergrensesnittet for systemet uten at brukeren gjør noe."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"forstørre visningen"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Lar apper forstørre innholdet  på en skjerm. Skadelige apper kan endre skjerminnhold på en måte som gjør at enheten blir ubrukelig."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"delvis avslutning"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Lar appen sette aktivitetshåndtereren i avslutningstilstand. Slår ikke systemet helt av."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"forhindre bytte mellom apper"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Lar appen kringkaste et varsel om at en SMS-melding er mottatt. Ondsinnede apper kan bruke dette til å forfalske innkommende SMS-meldinger."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"kringkaste melding om mottatt WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Lar appen kringkaste et varsel om at en WAP-PUSH-melding er mottatt. Ondsinnede apper kan bruke dette til å forfalske MMS-meldingskvitteringer, eller ubemerket erstatte innholdet av alle slags nettsider med ondsinnede varianter."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"sende kringkasting om nettverksvurdering"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Gir appen tillatelse til å kringkaste et varsel om at nettverk må vurderes. Denne tillatelsen bør aldri være nødvendig for vanlige apper."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"begrense antallet kjørende prosesser"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Lar appen kontrollere det maksimale antallet prosesser som kjører. Aldri nødvendig for vanlige apper."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"tvinge bakgrunnsapper til å lukkes"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Lar innehaveren binde seg til det øverste nivået av grensesnittet for en VPN-tjeneste. Skal aldri være nødvendig for vanlige apper."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"binde til bakgrunnsbilde"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Lar innehaveren binde det øverste nivået av grensesnittet til en bakgrunn. Skal aldri være nødvendig for vanlige apper."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"binde seg til en tjeneste for talehandlinger"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Gir innehaveren tillatelse til å binde til toppnivået av brukergrensesnittet for en tjeneste for talehandlinger. Dette skal ikke være nødvendig for vanlige apper."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"binde til ekstern skjerm"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Lar innehaveren binde seg til det øverste grensesnittnivået for ekstern skjerm. Skal aldri være nødvendig for vanlige apper."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"binde til modultjenste"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lar innehaveren binde seg til det øverste nivået av grensesnittet for en modultjeneste. Skal aldri være nødvendig for vanlige apper."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"binde seg til en ruteleverandørtjeneste"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Innehaveren av tillatelsen kan binde seg til ruteleverandører. Dette er ikke nødvendig for vanlige apper."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"kommunisere med enhetsadministrator"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Lar innehaveren sende hensikter til en enhetsadministrator. Skal aldri være nødvendig for normale apper."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"binde appen til en TV-inngang"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Lar innehaveren binde appen til det øverste grensesnittnivået for en TV-inngang. Dette skal aldri være nødvendig for vanlige apper."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"legge til eller fjerne en enhetsadministrator"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Tillater innehaveren å legge til eller fjerne aktive enhetsadministratorer. Dette skal aldri være nødvendig for vanlige apper."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"snu skjermen"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Lar appen bruke en hvilken som helst installert mediedekoder for å dekode for avspilling."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"administrer pålitelig legitimasjon"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Lar appen installere og avinstallere CA-sertifikater som pålitelig legitimasjon."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"kjør appen når den ikke er i bruk"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Denne tillatelsen gjør at Android-systemet kan kjøre appen i bakgrunnen mens enheten ikke er i bruk."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"lese/skrive ressurser eid av diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Lar appen lese og skrive til alle ressurser som eies av gruppen «diag», som for eksempel filer i /dev. Dette kan potensielt påvirke systemets sikkerhet og stabilitet. Dette bør BARE brukes av produsenten eller operatøren til maskinvarespesifikk diagnostikk."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"aktivere eller deaktivere appkomponenter"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Lar appen lese personlig profilinformasjon som er lagret på enheten, som for eksempel navn og kontaktinformasjon. Dette betyr at appen kan identifisere deg og sende profilinformasjonen din til andre."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"endre ditt eget kontaktkort"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Lar appen endre eller legge til personlig profilinformasjon som er lagret på enheten din, som for eksempel navn og kontaktinformasjon. Dette betyr at appen kan identifisere deg og sende profilinformasjonen din til andre."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"kroppssensorer (som pulsmålere)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Gir appen tillatelse til å bruke data fra sensorer du bruker til å måle det som skjer i kroppen din, som f.eks. pulsen."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"lese din sosiale strøm"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Lar appen lese og synkronisere sosiale oppdateringer fra deg selv og vennene dine. Vær forsiktig når du deler informasjon - med denne tillatelsen kan appen lese kommunikasjon mellom deg og vennene dine på sosiale nettverk, uavhengig av konfidensialitet. Vær oppmerksom på at denne tillatelsen kanskje ikke gjelder for alle sosiale nettverk."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skrive i din sosiale strøm"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Lar appen bruke grunnleggende SurfaceFlinger-funksjoner."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"lese skjermbufferen"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Lar appen lese innholdet i rammebufferen."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"tilgang til InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Lar appen bruke grunnleggende InputFlinger-funksjoner."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurere Wi-Fi-skjermer"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tillater appen å konfigurere og koble til Wi-Fi-skjermer."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kontrollere Wi-Fi-skjermer"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Lar appen endre globale lydinnstillinger slik som volum og hvilken høyttaler som brukes for lydavspilling."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ta opp lyd"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Lar appen ta opp lyd med mikrofonen. Dette betyr at appen kan ta opp lyd når som helst uten at du har bedt om det."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"sim-kommunikasjon"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Lar appen sende kommandoer til SIM-kortet. Dette er veldig farlig."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ta bilder og videoer"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Lar appen ta bilder og filme med kameraet. Denne tillatelsen gjør at appen kan bruke kameraet når som helst uten bekreftelse fra deg."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"deaktiver LED-lyset for indikering av overføring når kameraet er i bruk"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Lar appen kontrollere telefonfunksjonene til enheten. En app som har denne tillatelsen kan bytte nettverk, slå telefonens radio på og av og lignende, uten å varsle deg i det hele tatt."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"lese telefonstatus og -identitet"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Lar appen bruke enhetens telefonfunksjoner. Med denne tillatelsen kan appen finne telefonnummer og enhets-ID-er, registrere om en samtale pågår, og se det eksterne nummeret det opprettes en forbindelse med via oppringing."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"lese nøyaktige telefontilstander"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Gir appen tilgang til nøyaktige telefontilstander. Denne tillatelsen gjør at appen kan fastslå den faktiske anropstatusen, om et anrop er aktivt eller i bakgrunnen, anropsfeil, nøyaktig status for datatilkobling og datatilkoblingsfeil."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"hindre nettbrettet fra å gå over til sovemodus"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"forhindre telefonen fra å sove"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Lar appen hindre nettbrettet fra å gå over i sovemodus."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Endre WiMAX-status"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Lar appen koble nettbrettet til og fra WiMAX-nettverk."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Lar appen koble telefonen til og fra WiMAX-nettverk."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"vurdere nettverk"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Gir appen tillatelse til å rangere nettverk, og påvirke hvilket nettverk nettbrettet skal foretrekke."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Gir appen tillatelse til å rangere nettverk, og påvirke hvilket nettverk telefonen skal foretrekke."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"koble til Bluetooth-enheter"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Lar appen se Bluetooth-konfigurasjonen på nettbrettet, samt opprette og godta tilkoblinger med sammenkoblede enheter."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Lar appen se Bluetooth-konfigurasjonen på telefonen, samt opprette og godta tilkoblinger med sammenkoblede enheter."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Lar appen hente, gjennomgå og fjerne varsler, inkludert de som sendes fra andre apper."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"binding til en varsellyttertjeneste"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Lar innehaveren binde seg til det øverste grensesnittnivået for en varsellyttertjeneste. Skal aldri være nødvendig for vanlige apper."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"binde seg til en leverandørtjeneste for betingelser"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Gir innehaveren tillatelse til å binde til toppnivået av brukergrensesnittet for en leverandørtjeneste for betingelser. Dette skal ikke være nødvendig for vanlige apper."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"starte konfigurasjonsappen som ble levert av operatøren"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Gir innehaveren tillatelse til å kalle opp den konfigurasjonsappen som ble levert av operatøren. Dette skal ikke være nødvendig for vanlige apper."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"lytte etter observasjoner om nettverksforhold"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Gir appen tillatelse til å lytte etter observasjoner om nettverksforhold. Dette skal ikke være nødvendig for vanlige apper."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"endre kalibreringen av inndataenheter"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Lar appen endre kalibrasjonsparametrene for berøringsskjermen. Denne tillatelsen bør aldri være nødvendig for vanlige apper."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"tilgang til DRM-sertifikater"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Tillater at en app klargjøre og bruke DRM-sertifikater. Denne tillatelsen bør aldri være nødvendig for vanlige apper."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Angi passordregler"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontroller tillatt lengde og tillatte tegn i passord for opplåsing av skjerm."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Overvåk forsøk på opplåsing av skjerm"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Hjem"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Arbeid"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Annen"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Du har ingen apper som kan åpne denne kontakten."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Skriv inn PIN-kode"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Skriv inn PUK-kode og ny personlig kode"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
@@ -865,7 +925,7 @@
     <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Glemt mønsteret?"</string>
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Opplåsing av konto"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"For mange forsøk på tegning av mønster"</string>
-    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Logg deg på med Google-kontoen din for å låse opp."</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Logg på med Google-kontoen din for å låse opp."</string>
     <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Brukernavn (e-post)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Passord"</string>
     <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Logg på"</string>
@@ -1182,7 +1242,7 @@
     <item quantity="other" msgid="7915895323644292768">"Åpne trådløsnett i nærheten"</item>
   </plurals>
     <string name="wifi_available_sign_in" msgid="4029489716605255386">"Pålogging til Wi-Fi-nettverk"</string>
-    <string name="network_available_sign_in" msgid="8495155593358054676">"Logg deg på nettverket"</string>
+    <string name="network_available_sign_in" msgid="8495155593358054676">"Logg på nettverket"</string>
     <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
     <skip />
     <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kan ikke koble til Wi-Fi"</string>
@@ -1218,7 +1278,7 @@
     <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"Aldri tillat"</string>
     <string name="sim_removed_title" msgid="6227712319223226185">"SIM-kort er fjernet"</string>
     <string name="sim_removed_message" msgid="2333164559970958645">"Det mobile nettverket forblir utilgjengelig inntil du starter på nytt med et gyldig SIM-kort."</string>
-    <string name="sim_done_button" msgid="827949989369963775">"Fullført"</string>
+    <string name="sim_done_button" msgid="827949989369963775">"Ferdig"</string>
     <string name="sim_added_title" msgid="3719670512889674693">"SIM-kort er lagt til"</string>
     <string name="sim_added_message" msgid="6599945301141050216">"Start enheten på nytt for å få tilgang til det mobile nettverket."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"Start på nytt"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Lar en app bruke sikker lagring via keyguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Kontrollér om tastelåsen er skjult eller vist"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tillater at en app kontrollerer tastelåsen."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Oppdag endringer i tillitsstatusen."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Gir appen tillatelse til å oppdage endringer i tillitsstatusen."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Tilknytt en tillitsagent-tjeneste."</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Gir appen tillatelse til å knyttes til en tillitsagent-tjeneste."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Samhandling med oppdateringer og gjenopprettingssystem"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Tillater en app å samhandle med gjenopprettingsssystemet og systemoppdateringer."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Trykk to ganger for zoomkontroll"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Kunne ikke legge til modulen."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Utfør"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Bakgrunnsbilde"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Velg bakgrunnsbilde"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Varsellytteren"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Betingelsesleverandør"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN er aktivert"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN er aktivert av <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Trykk for å administrere nettverket."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Velg en app"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Kunne ikke starte <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Del med"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Del med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Glidebryter. Trykk og hold inne."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Dra opp for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Dra ned for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Dra til venstre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Dra til høyre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Lås opp"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Stille"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Lyd på"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Søk"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Sveip for å låse opp."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Koble til hodetelefoner for å høre opplesing av bokstavene i passordet."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punktum."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-lyd"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Trådløs skjerm"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Fullført"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieutgang"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Koble til enheten"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Cast skjermen til enheten"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Søker etter enheter …"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Innstillinger"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Koble fra"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skanner ..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Kobler til ..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Tilgjengelig"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlegg #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", sikker"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Trådløs skjermdeling er tilkoblet"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Denne skjermen vises på en annen enhet"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Sender skjermen …"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Kobler til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Sender skjermen …"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Koblet til <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Koble fra"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Nødnummer"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Har du glemt mønsteret?"</string>
@@ -1514,11 +1579,11 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser opp SIM-kortet ..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Feil PIN-kode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Skriv inn en PIN-kode på fire til åtte sifre."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden skal være på åtte eller flere siffer."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-koden skal være på åtte sifre."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Skriv inn den korrekte PUK-koden på nytt. Gjentatte forsøk kommer til å deaktivere SIM-kortet."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-kodene stemmer ikke overens"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"For mange forsøk på tegning av mønster"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Logg deg på med Google-kontoen din for å låse opp."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Logg på med Google-kontoen din for å låse opp."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"Brukernavn (e-postadresse)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"Passord"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"Logg på"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Prøv på nytt senere"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Sveip ned fra toppen av skjermen for å gå ut av fullskjermvisningen."</string>
+    <string name="done_label" msgid="2093726099505892398">"Ferdig"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Sirkulær glidebryter for timer"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Sirkulær glidebryter for minutter"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Angi timer"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Angi minutter"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Månedsrutenett med dager"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Årsliste"</string>
+    <string name="select_day" msgid="7774759604701773332">"Velg måneden og dagen"</string>
+    <string name="select_year" msgid="7952052866994196170">"Velg året"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> er valgt"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> er slettet"</string>
 </resources>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..8626897b
--- /dev/null
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -0,0 +1,1591 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B"</string>
+    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="4638956954852782576">"&lt;बिना शीर्षक&gt;"</string>
+    <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(कुनै फोन नम्बर छैन)"</string>
+    <string name="unknownName" msgid="2277556546742746522">"(अज्ञात)"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"भ्वाइस मेल"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN१"</string>
+    <string name="mmiError" msgid="5154499457739052907">"जडान समस्या वा अमान्य MMI कोड।"</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"अपरेशन निश्चित डायल नम्बरहरूको लागि मात्र प्रतिबन्धित छ।"</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"सेवा सक्षम पारियो।"</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"निम्न उल्लेखितको लागि सेवा सक्षम पारियो:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"सेवा असक्षम पारिएको छ।"</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"दर्ता सफल भयो।"</string>
+    <string name="serviceErased" msgid="1288584695297200972">"मेटाइ सफल थियो।"</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"गलत पासवर्ड।"</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI पुरा भयो।"</string>
+    <string name="badPin" msgid="9015277645546710014">"तपाईंले टाइप गर्नुभएको पुरानो PIN सही छैन।"</string>
+    <string name="badPuk" msgid="5487257647081132201">"तपाईंले टाइप गर्नुभएको PUK सही छैन।"</string>
+    <string name="mismatchPin" msgid="609379054496863419">"तपाईंले टाइप गर्नुभएको PIN मेल खाँदैन।"</string>
+    <string name="invalidPin" msgid="3850018445187475377">"४ देखि ८ वटा नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"८ वटा नम्बरहरू वा सो भन्दा लामो एउटा PUK टाइप गर्नुहोस्।"</string>
+    <string name="needPuk" msgid="919668385956251611">"तपाईंको SIM कार्ड PUK-लक छ। यसलाई अनलक गर्न PUK कोड टाइप गर्नुहोस्।"</string>
+    <string name="needPuk2" msgid="4526033371987193070">"SIM कार्ड अनलक गर्न PUK2 टाइप गर्नुहोस्।"</string>
+    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
+    <string name="meid" msgid="4841221237681254195">"MEID"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"आगमन कलर ID"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"बाहिरिने कलर ID"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"कल अगाडि बढाउँदै"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"कल प्रतिक्षा"</string>
+    <string name="BaMmi" msgid="455193067926770581">"कल ब्यारिङ"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"पासवर्ड परिवर्तन"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"PIN परिवर्तन"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"प्रस्तुत नम्बरमा कल गर्दै"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"कल गर्ने अंक रोकेको छ।"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"कल गर्ने तिन तरिका"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"नचाहिएका रिसउठ्दा कलहरूको अस्वीकार"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"कलिङ नम्बर प्रदान गर्ने"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"बाधा नगर्नुहोस्"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"सीमति गर्न पूर्वनिर्धारित कलर ID, अर्को कल: सीमति गरिएको"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"कलर ID पूर्वनिर्धारितको लागि रोकावट छ। अर्को कल: रोकावट छैन"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"कलर ID पूर्वनिर्धारितदेखि प्रतिबन्धित छैन। अर्को कल: प्रतिबन्धित छ"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"कलर ID पूर्वनिर्धारितको लागि रोकावट छैन। अर्को कल: रोकावट छैन"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"सेवाको व्यवस्था छैन।"</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"तपाईं कलर ID सेटिङ परिवर्तन गर्न सक्नुहुन्न।"</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"प्रतिबन्धित पहुँच परिवर्तन भएको छ"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"डेटा सेवा रोकिएको छ।"</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"आपतकालीन सेवा रोकिएको छ।"</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"भ्वाइस सेवा ब्लक भएको छ।"</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"सबै आवाज सेवाहरू बन्द छन्।"</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS सेवा रोकिएको छ।"</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"भ्वाइस/डेटा सेवाहरू रोकिएका छन्।"</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"आवाज/SMS सेवाहरू बन्द छन्।"</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"सबै भ्वाइस/डेटा/SMS सेवाहरू ब्लक भएका छन्।"</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"आवाज"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"डेटा"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"फ्याक्स"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Async"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"सिङ्क गर्नुहोस्"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"प्याकेट"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"रोमिङ सूचक खुला"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"रोमिङ सूचक बन्द"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"रोमिङ सूचक फ्ल्यास गर्दै"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"छिमेकबाट बाहिर"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"बिल्डिङको बाहिर"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"रोमिङ - उपयुक्त प्रणाली"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"रोमिङ - उपलब्ध प्रणाली"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"रोमिङ - एलियन्सर पार्टनर"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"रोमिङ - प्रिमियम पार्टनर"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"रोमिङ - पूर्ण सेवा कार्यक्षमता अवस्था"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"रोमिङ - आङ्शिक सेवा प्रकार्यता"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"रोमिङ ध्वजा चालु छ"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"रोमिङ ब्यानर बन्द छ"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"सेवाको खोजी गर्दै…"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अगाडि पठाइएको छैन"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> पछि <xliff:g id="TIME_DELAY">{2}</xliff:g> सेकेन्ड"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अगाडि बढाइएको छैन"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अगाडि बढाइएको छैन"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"विशेषता कोड पुरा भयो।"</string>
+    <string name="fcError" msgid="3327560126588500777">"जडान समस्या वा अमान्य सुविधा कोड।"</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"ठिक छ"</string>
+    <string name="httpError" msgid="7956392511146698522">"एउटा नेटवर्क त्रुटि थियो।"</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"URL भेटाउन सकेन।"</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"साइटको आधिकारिकता योजना समर्थित छैन।"</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"प्रमाणीकरण गर्न सकेन।"</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"प्रोक्सी सर्भरको माध्यमद्वारा प्रमाणिकरण असफल भएको छ।"</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"सर्भरसँग जोड्न सकेन।"</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"सर्भरसँग संचार गर्न सकेन। फेरि पछि कोसिस गर्नुहोस्।"</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"सर्भर संगको सम्पर्क प्रक्रिया समय सकियो।"</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"पृष्टमा धेरै सर्भरहरूतिर पुनः निर्देशनहरू छन्।"</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"प्रोटोकल समर्थित छैन।"</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"एउटा सुरक्षित जडान स्थापना गर्न सकेन।"</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"पृष्ठ खोल्न सकिँदैन किनभने URL अमान्य छ।"</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"फाइल भेटाउन सकेन।"</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"अनुरोध गरिएको फाइल भेटाउन सकेन।"</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"धेरै नै अनुरोधहरू प्रक्रियामा छन्। पछि फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="notification_title" msgid="8967710025036163822">"<xliff:g id="ACCOUNT">%1$s</xliff:g>को लागि साइन इन त्रुटि"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"सिङक गर्नुहोस्"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"सिङ्क गर्नुहोस्"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"अति धेरै <xliff:g id="CONTENT_TYPE">%s</xliff:g> मेट्नुहोस्।"</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"ट्याब्लेट भण्डारण खाली छैन! ठाउँ खाली गर्नको लागि केही फाइलहरू मेटाउनुहोस्।"</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"फोन भण्डारण भरिएको छ! ठाउँ खाली गर्नको लागि केही फाइलहरू मेटाउनुहोस्।"</string>
+    <string name="me" msgid="6545696007631404292">"मलाई"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"ट्याब्लेट विकल्पहरू"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"फोन विकल्पहरू"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"मौन मोड"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"वायरलेस अन गर्नुहोस्"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"ताररहित बन्द गर्नुहोस्"</string>
+    <string name="screen_lock" msgid="799094655496098153">"स्क्रिन लक गर्नुहोस्"</string>
+    <string name="power_off" msgid="4266614107412865048">"पावर बन्द"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"घन्टी बन्द भयो"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"घन्टी कम्पन गर्छ"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"घन्टि चालु छ"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"बन्द गर्दै..."</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"तपाईँको ट्याब्लेट बन्द हुने छ।"</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"तपाईँको फोन बन्द हुने छ।"</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"के तपाईं बन्द गर्न चाहनुहुन्छ?"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"सुरक्षित मोडमा पुनःबुट गर्नुहोस्"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"सुरक्षित मोडमा तपाईँ पुनःबुट गर्न चाहनु हुन्छ? तपाईँले स्थापना गरेका सबै तेस्रो पक्षका अनुप्रयोगहरूलाई असक्षम गराउने छ।"</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"नयाँ"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"कुनै नयाँ अनुप्रयोगहरू छैनन्।"</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"ट्याब्लेट विकल्पहरू"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"फोन विकल्पहरू"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"स्क्रिन बन्द"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"शक्ति बन्द"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"बग रिपोर्ट"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"बग रिपोर्ट लिनुहोस्"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"एउटा इमेल सन्देशको रूपमा पठाउनलाई यसले तपाईँको हालैको उपकरणको अवस्थाको बारेमा सूचना जम्मा गर्ने छ। बग रिपोर्ट सुरु गरेदेखि पठाउन तयार नभएसम्म यसले केही समय लिन्छ; कृपया धैर्य गर्नुहोस्।"</string>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"मौन मोड"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"आवाज बन्द छ"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ध्वनि खुल्ला छ"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"हवाइजहाज मोड"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"हवाइजहाज मोड खुला छ"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"हवाइजहाज मोड बन्द छ"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"९९९+"</string>
+    <string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"एन्ड्रोइड प्रणाली"</string>
+    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"तपाईँले तिर्नु पर्ने सेवाहरू"</string>
+    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"तपाईँलाई महँगो पर्न सक्ने कामहरू गर्नुहोस्।"</string>
+    <string name="permgrouplab_messages" msgid="7521249148445456662">"तपाईंका सन्देशहरू"</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"तपाईँका SMS, इमेल र अन्य सन्देशहरू पढ्नुहोस् र लेख्नुहोस्।"</string>
+    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"तपाईँको निजी सूचना"</string>
+    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"तपाईँको सम्पर्क कार्डमा भण्डारण भएका तपाईँको बारेको जानकारीमा सिधा पहुँच पुर्‍याउनुहोस्।"</string>
+    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"तपाईँको सामाजिक सूचना"</string>
+    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"तपाईँको सम्पर्कहरू र सामाजिक जडानहरूको बारेको जानकारीमा सिधा पहुँच पुर्‍याउनुहोस्।"</string>
+    <string name="permgrouplab_location" msgid="635149742436692049">"तपाईँको स्थान"</string>
+    <string name="permgroupdesc_location" msgid="5704679763124170100">"तपाईँको भौतिक स्थान निरीक्षण गर्नुहोस्।"</string>
+    <string name="permgrouplab_network" msgid="5808983377727109831">"नेटवर्क संचार"</string>
+    <string name="permgroupdesc_network" msgid="4478299413241861987">"विभिन्न नेटवर्क सुविधाहरूमा पहुँच राख्नुहोस्।"</string>
+    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"ब्लुटुथ"</string>
+    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"ब्लुटुथको माध्यमद्वारा उपकरणहरू र नेटवर्कहरूमाथि पहुँच राख्नुहोस्।"</string>
+    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"अडियो सेटिङहरू"</string>
+    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"अडियो सेटिङहरू बदल्नुहोस्।"</string>
+    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"ब्यट्रिलाई प्रभाव पार्छ"</string>
+    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"छिट्टै ब्याट्रि सकाउन सक्ने ती विशेषताहरू प्रयोग गर्नुहोस्।"</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"पात्रो"</string>
+    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"पात्रो तथा घटनाहरूमा प्रत्यक्ष पहुँच"</string>
+    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"प्रयोगकर्ता शब्दकोश पढ्नुहोस्"</string>
+    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"प्रयोगकर्ता शब्दकोशमा शब्दहरू पढ्नुहोस्।"</string>
+    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"प्रयोगकर्ता शब्दकोश लेख्नुहोस्"</string>
+    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"प्रयोगकर्ता शब्दकोशमा शब्दहरू थप्नुहोस्।"</string>
+    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"बुकमार्कहरू र इतिहास"</string>
+    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"बुकमार्कहरू र ब्राउजर इतिहासमा सिधा पहुँच।"</string>
+    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"अलार्म"</string>
+    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"अलार्म घडी सेट गर्नुहोस्।"</string>
+    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"भ्वाइस मेल"</string>
+    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"भ्वाइसमेलमा सिधा पहुँच।"</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"माइक्रोफोन"</string>
+    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"मा[क्रोफोनबाट रेकर्ड अडियोमा सिधा पहुँच पुर्‍याउनुहोस्।"</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"क्यामेरा"</string>
+    <string name="permgroupdesc_camera" msgid="2933667372289567714">"तस्बिर वा भिडियो क्याप्चरको लागि क्यामेरामा सिधा पहुँच।"</string>
+    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"स्क्रिन लक गर्नुहोस्"</string>
+    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"तपाईँको उपकरणमा लक स्क्रिनको व्यवहारलाई प्रभावित गर्ने क्षमता।"</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"तपाईँका अनुप्रयोगहरूको सूचना"</string>
+    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"तपाईँको उपकरणमा अन्य अनुप्रयोगहरूको व्यवहारमा प्रभाव पार्ने क्षमता।"</string>
+    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"वालपेपर"</string>
+    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"उपकरण वालपेपर सेटिङहरू बदल्नुहोस्।"</string>
+    <string name="permgrouplab_systemClock" msgid="406535759236612992">"घडी"</string>
+    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"उपकरण समय वा समय क्षेत्र परिवर्तन गर्नुहोस्।"</string>
+    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"स्थिति पट्टी"</string>
+    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"उपकरण स्थिति सेटिङहरू परिवर्तन गर्नुहोस्।"</string>
+    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"सिङ्क सेटिङहरू"</string>
+    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"सिङ्क सेटिङहरूमा पहुँच गर्नुहोस्।"</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"तपाईँका खाताहरू"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्ध खाताहरू पहुँच गर्नुहोस्।"</string>
+    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"हार्डवेयर नियन्त्रणहरू"</string>
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"ह्यान्डसेटको हार्डवेयरमा प्रत्यक्ष पहुँच।"</string>
+    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"फोन कलहरू"</string>
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"अनुगमन, रेकर्ड र फोन कलहरूको प्रसोधन गर्नुहोस।"</string>
+    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"प्रणाली औजारहरू"</string>
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"निम्न-स्तर पहुँच र प्रणालीको नियन्त्रण"</string>
+    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"विकसित टुलहरू"</string>
+    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"अनुप्रयोग विकासकर्ताहरूको लागि मात्र सुविधाहरूको आवश्यकता।"</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"अन्य अनुप्रयोग UI"</string>
+    <string name="permgroupdesc_display" msgid="6051002031933013714">"अन्य अनुप्रयोगहरूको UI लाई असर पार्नुहोस्"</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"भण्डारण"</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB भण्डारणमाथि पहुँच गर्नुहोस्।"</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD कार्डमाथि पहुँच गर्नुहोस्।"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"पहुँचीकरण विशेषताहरू"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"सहयोगी प्रविधि भएको विशेषताहरूले अनुरोध गर्न सक्छन्।"</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"विन्डो सामग्रीको पुनःबहाली गर्नुहोस्।"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"तपाईँको अन्तरक्रिया भइरहेको विन्डोको सामग्रीको निरीक्षण गर्नुहोस्।"</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"छोएर गरिने खोजलाई सुचारु गर्नुहोस्"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"छोइएका आइटमहरू चर्को स्वरमा बोलिने छ र स्क्रिन इशाराहरूको प्रयोगले अन्वेषण गर्न सकिन्छ।"</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"उच्च वेब पहुँचलाई सुचारु गर्नुहोस्"</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"अनुप्रयोगको सामग्रीलाई थप पहुँचयोग्य बनाउन लिपिहरू स्थापना गर्न सक्नु हुन्छ।"</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"आफुले टाइप गरेको पाठको निरीक्षण गर्नुहोस्"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"व्यक्तिगत डेटा जस्तै क्रेडिट कार्ड नम्बरहरू र पासवर्डहरू समावेश गर्दछ।"</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"स्थिति पट्टिलाई अक्षम वा संशोधित गर्नुहोस्"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"स्थिति पट्टि असक्षम पार्न वा प्रणाली आइकनहरू थप्न र हटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"स्थिति पट्टि"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"अनुप्रयोगलाई स्थिति पट्टि हुन अनुमति दिन्छ।"</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"स्थिति पट्टिलाई विस्तृत/सङ्कुचित गर्नुहोस्"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"अनुप्रयोगलाई स्थिति पट्टि विस्तार वा संकुचन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"बहिर्गमन कलहरूलाई अर्को मार्ग दिनुहोस्"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"बहिर्गमन कलहरूको प्रशोधन गर्न र डायल गरिने नम्बर परिवर्तन गर्न अनुप्रयोगलाई अनुमति दिन्छ।  यो अनुमतिले अनुप्रयोगलाई मोनिटर गर्न, अन्यत्र पठाउन वा बाहिर जाने कलहरूलाई रोक्न दिन्छ।"</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"पाठ सन्देशहरू (SMS) प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"अनुप्रयोगलाई SMS सन्देशहरू प्राप्त गर्न र प्रक्रिया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको सन्देशहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"पाठ सन्देश (MMS) प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"अनुप्रयोगलाई MMS सन्देशहरू प्राप्त गर्न र प्रकृया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको सन्देशहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
+    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"आकस्मिक प्रसारणहरू प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"अनुप्रयोगलाई आपतकालीन प्रसारण सन्देशहरू प्राप्त गर्न र प्रक्रिया गर्न अनुमति दिन्छ। यो अनुमति प्रणाली अनुप्रयोगहरूमा मात्र उपलब्ध छ।"</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारित सन्देशहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"तपाईंको उपकरणद्वारा प्राप्त सेल प्रसारण सन्देशहरू अनुप्रयोगलाई पढ्न अनुमति दिन्छ। सेल प्रसारण चेतावनीहरू केही स्थानहरूमा तपाईंलाई आपतकालीन गतिविधिहरूको बारेमा सचेत गराउन गरिएका छन्। खराब अनुप्रयोगहरूले एउटा आपतकालीन सेल प्रसारण प्राप्त गर्दछ जब तपाईंको उपकरणको प्रदर्शन वा अपरेशनको साथ हस्तक्षेप गर्न सक्दछन्।"</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"SMS सन्देशहरू पठाउनुहोस्"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"अनुप्रयोगलाई SMS सन्देशहरू पठाउन अनुमति दिन्छ। यसले अप्रत्यासित चार्जहरूको परिणाम दिन सक्दछ। खराब अनुप्रयोगहरूले तपाईंको पुष्टि बिना सन्देशहरू पठाएर तपाईंको पैसा खर्च गराउन सक्दछ।"</string>
+    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"प्रतिक्रिया-मार्फत-सन्देश घटनाहरू पठाउनुहोस्"</string>
+    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"अनुप्रयोगलाई आगत कलहरूको लागि प्रतिक्रिया-मार्फत-सन्देश घटनाहरूलाई अन्य सन्देश पठाउने अनुप्रयोगहरूमा अनुरोधहरू पठाउन अनुमति दिन्छ।"</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"तपाईंका पाठ सन्देशहरू (SMS वा MMS) पढ्नुहोस्"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"तपाईँको ट्याब्लेट वा SIM कार्डमा भण्डारण भएका SMS सन्देशहरूलाई पढ्न अनुप्रयोगलाई अनुमति दिन्छ। यसले अनुप्रयोगलाई विषयवस्तु वा गोपनीयतालाई वेवास्ता गर्दै सबै SMS सन्देशहरू पढ्ने अनुमति दिन्छ।"</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"तपाईँको फोन वा SIM कार्डमा भण्डारण भएका SMS सन्देशहरूलाई पढ्न अनुप्रयोगलाई अनुमति दिन्छ। यसले सबै SMS सन्देशहरूलाई पढ्नको लागि सामग्री वा विश्वसनियता बिना नै अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"तपाईँका पाठ सन्देशहरू सम्पादन गर्नुहोस् (SMS वा MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"अनुप्रयोगलाई तपाईंको ट्याब्लेट वा SIM कार्डमा भण्डार गरिएका SMS सन्देशहरू लेख्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले तपाईंको सन्देशहरू मेटाउन सक्दछ।"</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"तपाईँको फोन वा SIM कार्डमा भण्डारण भएका SMS सन्देशहरूलाई लेख्‍नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले सायद तपाईँको सन्देशहरू मेटाउन सक्छन्।"</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"पाठ सन्देशहरू (WAP) प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAP सन्देशहरू प्राप्त गर्न र प्रशोधन गर्न अनुप्रयोगलाई अनुमति दिन्छ। यो अनुमतिमा मोनिटर गर्ने वा तपाईँलाई पठाइएका सन्देशहरू तपाईँलाई नदेखाई मेट्ने क्षमता समावेश हुन्छ।"</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"चलिरहेका अनुप्रयोगहरू पुनःबहाली गर्नुहोस्"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"वर्तमानमा र भरखरै चलिरहेका कार्यहरू बारेको सूचना पुनःबहाली गर्न अनुप्रयोगलाई अनुमित दिन्छ। यसले उपकरणमा प्रयोग भएका अनुप्रयोगहरूको बारेमा सूचना पत्ता लगाउन अनुप्रयोगलाई अनुमति दिन सक्छ।"</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"प्रयोगकर्ताहरू तर्फ अन्तर्क्रिया गर्नुहोस्"</string>
+    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"अनुप्रयोगलाई उपकरणमा विभिन्न प्रयोगकर्ताहरू मार्फत कार्यहरू गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले यो प्रयोगकर्ताहरू बिच सुरक्षा बिथोल्न प्रयोग गर्न सक्ने छन्।"</string>
+    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"कुराकानी प्रयोगकर्ताहरू बिच अन्तर्क्रिया गर्न पूर्ण अनुमति"</string>
+    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"प्रयोगकर्तासँगको कुराकानी सबै सम्भावनालाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageUsers" msgid="1676150911672282428">"प्रयोगकर्ताहरू व्यवस्थापन गर्नुहोस्"</string>
+    <string name="permdesc_manageUsers" msgid="8409306667645355638">"अनुप्रयोगलाई उपकरणमा, प्रश्न, सिर्जना र मेटाइसहित प्रयोगकर्ताहरूको प्रबन्ध गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"चलिरहेका अनुप्रयोगहरूको विवरण पुनःबहाली गर्नुहोस्"</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"वर्तमानमा र भरखरै चलिरहेका कार्यहरूको बारेमा विस्तृत सूचना पुनःबहाली गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले अन्य अनुप्रयोगहरू बारेको निजी सूचना पत्ता लगाउन सक्छ।"</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"चलिरहेका अनुप्रयोगहरूलाई पुनःक्रम गराउनुहोस्"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"कामहरूलाई अग्रभाग र पृष्ठभूमिमा सार्न अनुप्रयोगलाई अनुमति दिन्छ। अनुप्रयोगले यो तपाईँको इनपुट बिना नै गर्न सक्छ।"</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"चालु भइरहेका अनुप्रयोगहरू रोक्नुहोस्"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"कामहरू हटाउन र उनीहरूको अनुप्रयोगहरूलाई बन्द गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले अन्य अनुप्रयोगहरूको व्यवहारलाई अबरोध गर्न सक्छन्।"</string>
+    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"activity stacks को प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"अनुप्रयोगलाई अन्य अनुप्रयोगहरू चल्ने activity stacks लाई थप्न, हटाउन र परिवर्तन गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले अन्य अनुप्रयोगहरूको व्यवहारलाई विघटन गर्न सक्छन्।"</string>
+    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"कुनै गतिविधि सुरु गर्नुहोस्"</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"अनुमति सुरक्षा वा निर्यात अवस्थालाई वास्ता नगरिकन कुनै पनि कार्य सुरु गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"स्क्रिन अनुकूलता सेट गर्नुहोस्"</string>
+    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"अन्य अनुप्रयोहरूको स्क्रिन मिल्दो मोडलाई नियन्त्रण गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। अन्य अनुप्रयोहरूको व्यवहार खराब अनुप्रयोगहरूले टुटाउन सक्छन्।"</string>
+    <string name="permlab_setDebugApp" msgid="3022107198686584052">"अनुप्रयोग डिबग गर्ने सक्षम गर्नुहोस्"</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"अनुप्रयोगलाई अन्य अनुप्रयोगको लागि डिबग गर्ने प्रक्रिया चालु गर्ने अनुमति दिन्छ। खराब अनुप्रयोगले अरू अनुप्रयोगहरू समाप्त गर्न यसको उपयोग गर्न सक्दछ।"</string>
+    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"प्रणाली प्रदर्शन सेटिङहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"वर्तमान कन्फिगरेसन जस्तै लोक्याल वा सबैतिर फन्ट आकार बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"कार मोड सक्षम गर्नुहोस्"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"कार मोडलाई सक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"अनुप्रयोगहरू बन्द गर्नुहोस्"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"अनुप्रयोगलाई अन्य अनुप्रयोगहरूको पृष्ठभूमि प्रक्रियाहरू बन्द गर्न अनुमति दिन्छ। यसले अन्य अनुप्रयोगहरूलाई चल्नबाट रोक्न सक्दछ।"</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"अन्य अनुप्रयोगहरू दबाबमा रोक्नुहोस्"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"अन्य अनुप्रयोगहरूलाई बलपूर्वक बन्द गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_forceBack" msgid="652935204072584616">"अनुप्रयोग बन्द गर्न बल गर्नुहोस्"</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"अग्रभागमा भएको कुनै गतिविधिलाई जबरजस्ती बन्द गर्न र फर्केर जानका लागि अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाइ कहिल्यै आवश्यकता पर्दैन।"</string>
+    <string name="permlab_dump" msgid="1681799862438954752">"प्रणालीको आन्तरिक स्थिति प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"प्रणालीको आन्तरिक स्थिति पुनःबहाली गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले उनीहरूलाई सामान्यतः कहिल्यै नचाहिने व्यापक विविधताको निजी र सुरक्षित सूचना पुनःबहाली गर्न सक्छन्।"</string>
+    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"स्क्रिन सामग्री बहाली गर्नुहोस्"</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"सक्रिय विन्डोको विषयवस्तुलाई पुनःबहाली गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले पुरै विन्डोको विषयवस्तु पुनःबहाली गर्न सक्छन् र पासवर्डहरूबाहेक यसका सबै पाठको जाँच गर्न सक्छन्।"</string>
+    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"पहुँचतालाई अस्थायी सक्षम गर्नुहोस्"</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"अनुप्रयोगलाई अस्थायी रूपमा उपकरणमाथि पहुँच राख्न अनुमति दिन्छ। खराब अनुप्रयोगले उपयोगकर्ताको सहमति बिना नै पहुँचलाई सक्षम गर्न सक्दछ।"</string>
+    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"विन्डो जानकारी बहाली गर्नुहोस्"</string>
+    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"अनुप्रयोगलाई विन्डो व्यवस्थापकबाट विन्डोहरूको बारेमा जानकारी प्राप्त गर्न अनुमति दिन्छ। खराब अनुप्रयोगले आन्तरिक प्रणाली उपयोगको लागि निमित्त जानकारी पनि प्राप्त गर्न सक्दछ।"</string>
+    <string name="permlab_filter_events" msgid="8675535648807427389">"घटनाहरू छान्नुहोस्"</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"इन्पुट फिल्टर जुन सबै प्रयोगकर्ता घटनाहरू पठाइनुभन्दा पहिले फिल्टर गर्नेलाई दर्ता गर्न अनुप्रयोगलाई अनुमति दिन्छ। प्रयोगकर्ताको हस्तक्षेप बिना नै UI प्रणाली खराब अनुप्रयोगले नियन्त्रण गर्न सक्छन्।"</string>
+    <string name="permlab_magnify_display" msgid="5973626738170618775">"प्रदर्शन बढाउनुहोस्"</string>
+    <string name="permdesc_magnify_display" msgid="7121235684515003792">"अनुप्रयोगलाई प्रदर्शनको सामग्री आवर्धन गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले प्रदर्शन सामग्री संक्रमण गर्न सक्दछन् जसले उपकरणलाई अनुपयोगी बनाउँदछ।"</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"आंशिक बन्द"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"गतिविधि व्यवस्थापकलाई बन्द गर्ने अवस्थामा राख्छ। पूर्ण बन्द गर्ने काम गर्दैन।"</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"अनुप्रयोग स्विचहरू जोगाउनुहोस्"</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"अन्य अनुप्रयोगमा स्विच गर्नबाट प्रयोगकर्ताहरूलाई रोक्छ।"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"वर्तमान अनुप्रयोगको जानकारी प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="8153651434145132505">"स्क्रिनको अग्र भागमा हालको अनुप्रयोग र सेवाहरूका बारे निजी जानकारी निकाल्न बाहकलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"सबै अनुप्रयोग सुरुवात गर्ने निरीक्षण र नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"अनुप्रयोगलाई कसरी प्रणाली सुरुवात गतिहरू मोनिटर गर्न र नियन्त्रण गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले प्रणालीमा पूर्ण सहमत गर्न सक्दछ। यो अनुमति केवल विकासको लागि आवश्यक छ, साधारण प्रयोगको लागि कहिले होइन।"</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"प्याकेज हटाइएको प्रसारणलाई पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"अनुप्रयोगलाई सूचना प्रसारण गर्न अनुमति दिन्छ जुन अनुप्रयोग प्याकेज हटाइएको छ। खराब अनु्प्रयोगहरूले यो कुनै अन्य चालु अनु्प्रयोग बन्द गर्न प्रयोग गर्न सक्दछन्।"</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS-प्राप्त प्रसारण पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"त्यो एउटा SMS सन्देशबाट प्राप्त भएको सूचनालाई प्रसारण गर्न अनुप्रयोगलाई अनुमति दिन्छ। आउँदै गरेको SMS सन्देशहरूलाई जालसाजी गर्न सायद खराब भएका अनुप्रयोगहरूले यसलाई प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-प्राप्त प्रसारण पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"अनुप्रयोगलाई सूचना प्रसारण गर्न अनुमति दिन्छ जुन एउटा WAP PUSH सन्देश प्राप्त भएको छ। खराब अनुप्रयोगहरूले यो MMS सन्देश बिगार्न वा मौन तरिकाले कुनै पनि वेबपृष्ठको सामग्री खराब विभेदहरूसँग बदल्न प्रयोग गर्न सक्दछन्।"</string>
+    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"चालु प्रशोधनहरूको सङ्ख्या सीमति गर्नुहोस्"</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"अनुप्रयोगलाई चालु हुने प्रक्रियाहरूको अधिकतम संख्या नियन्त्रण गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"पृष्ठभूमि अनुप्रयोगहरू बन्द गर्न दबाब दिनुहोस्"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"अनुप्रयोगलाई गतिविधिहरू सधैँ समाप्त भयो कि भएन जब कि जति सक्दो तिनीहरू पृष्ठभूमिमा जान्छन् भन्ने नियन्त्रण गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_batteryStats" msgid="2789610673514103364">"ब्याट्रि तथ्याङ्हरू पढ्नुहोस्"</string>
+    <string name="permdesc_batteryStats" msgid="5897346582882915114">"वर्तमान थोरै ब्याट्री प्रयोग डेटा पढ्नको लागि एक अनुप्रयोगले अनुमति दिन्छ। जुन अनुप्रयोग तपाईँले प्रयोग गरीरहनुभएको छ त्यस्को बारेका पुर्ण जानकारी प्राप्त गर्न सायद अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"ब्याट्रि तथ्याङ्कलाई परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"अनुप्रयोगलाई संकलित ब्याट्रि तथ्याङ्कहरू परिमार्जन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"अनुप्रयोग संचालनका तथ्याङ्कहरू पुनःबहाली गर्नुहोस्"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"सङ्कलन गरिएका अनुप्रयोग संचालन तथ्याङ्लाई पुनः प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगबाट प्रयोगको लागि होइन।"</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"अनुप्रयोग संचलान तथ्याङ्कहरूलाई परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"सङ्कलन गरिएका अनुप्रयोग संचालन तथ्याङ्लाई परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगबाट प्रयोगको लागि होइन।"</string>
+    <string name="permlab_backup" msgid="470013022865453920">"प्रणाली ब्यकअप नियन्त्रण गर्नुहोस् र पुनः बहाली गर्नुहोस्"</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"प्रणालीको जगेडा नियन्त्रण गर्न र पुनःप्राप्तिको संयोजन गर्न अनुप्रयोगलाई अनुमित दिन्छ। सामान्य अनुप्रयोगद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"पूर्ण जगेडा गर्न वा प्रक्रिया पुनःबहाली गर्न निश्चित गर्नुहोस्"</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"UI को पूर्ण जगेडा निश्चिन्तता सुरु गर्नका लागि अनुप्रयोगलाई अनुमति दिन्छ। कुनै अनुप्रयोगबाट प्रयोग नगरिने।"</string>
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"अनधिकृत बिन्डोहरू प्रदर्शन गर्नुहोस्"</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"अनुप्रयोगलाई विन्डोहरू सिर्जना गर्न अनुमति दिन्छ जुन आन्तरिक प्रणाली प्रयोगकर्ता इन्टरफेसद्वारा प्रयोग गर्न अभिप्रेरित छ। साधारण अनुप्रयोगहरूद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"अन्य अनुप्रयोगहरूमा चित्र कोर्नुहोस्"</string>
+    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"अरू अनुप्रयोगहरूमाथि वा प्रयोगकर्ता इन्टरफेसका भागहरूमा चित्र कोर्न अनुप्रयोगलाई अनुमति दिन्छ। तिनीहरूले कुनै अनुप्रयोगमा इन्टरफेको तपाईँको प्रयोगसँग हस्तक्षेप गर्न वा तपाईँ अन्य अनुप्रयोगहरूमा के देखिरहनु भएको छ भन्ने सोच्न हुन्छ भन्ने बदल्न सक्छन्।"</string>
+    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"ग्लोबल सजीविकरण गति परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"विश्वब्यापि सजीविकरण(द्रुत वा ढिला सजीविकरणहरू) लाई कुनै पनि समय परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"अनुप्रयोग टोकनहरू प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"अनुप्रयोगलाई आफ्ना टोकनहरू सिर्जना गर्न र उनीहरूको साधारण Z-क्रमाङ्कन बाइपास गरेर प्रबन्ध गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिल्यै पनि आवश्यक नहुन सक्दछ।"</string>
+    <string name="permlab_freezeScreen" msgid="4708181184441880175">"स्क्रिन फ्रिज गर्नुहोस्"</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"अनुप्रयोगलाई पूर्ण-स्क्रिन संक्रमणको लागि अस्थायी रूपमा स्क्रिन स्थिर गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_injectEvents" msgid="1378746584023586600">"कुञ्जीहरू र नियन्त्रण बटनहरू थिच्नुहोस्"</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"यसका आफ्ना इनपुट घटनाहरू (कि थिचाइहरू, आदि) अन्य अनुप्रयोगहरूलाई वितरण गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई ट्याब्लेटसम्म लैजान प्रयोग गर्न सक्छन्।"</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"यस्को आफ्नै निवेश घटनाहरू (कि थिचाइहरू, आदि.) अन्य अनुप्रोयगहरूलाई पु्र्‍याउन अनुप्रयोगलाई अनुमति दिन्छ। फोनलाई हस्तक्षेप गर्न यसको प्रयोग खराब अनुप्रयोगहरूले गर्न सक्छन्।"</string>
+    <string name="permlab_readInputState" msgid="469428900041249234">"तपाईंले के टाइप गर्नुहुन्छ र के कार्यहरू लिनुहुन्छ रेकर्ड गर्नुहोस्"</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"अर्को अनुप्रयोग(जस्तै पासवर्ड टाइप गराइ)सँग अन्तर्क्रिया गरेको बेला पनि तपाईँले थिचेका किहरूलाइ हेर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिल्यै आवश्यक हुँदैन।"</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"एउटा निवेश तरिकामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"एउटा निवेश तरिकाको उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि समाती राख्नेलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"एउटा पहुँच सेवासँग जोड्नुहोस्"</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"एक पहुँच सेवाको उच्च स्तरको कुराकानीलाई पक्का गर्नको लागि समाती राख्नेले अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindPrintService" msgid="8462815179572748761">"एउटा प्रिन्ट सेवासँग जोड्नुहोस्"</string>
+    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"एउटा प्रिन्ट सेवाको उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि प्रयोगकर्तालाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"प्रिन्ट स्पुलर सेवासँग बाध्नुहोस्"</string>
+    <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"प्रिन्ट स्पुलर सेवाको शीर्ष तह इन्टर्फेसलाई बाहकसँग बाँध्न अनुमति दिन्छ। सामान्य अनुप्रयोगलाई कहिल्यै पनि आवाश्यक नपर्न सक्छ।"</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC सेवामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"NFC कार्डहरू इमुलेट गर्ने अनुप्रयोगहरूलाई बाँध्नका लागि होल्डरलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूका लागि कहिल्यै पनि आवश्यक पर्दैन।"</string>
+    <string name="permlab_bindTextService" msgid="7358378401915287938">"एउटा पाठ सेवासँग संगठित हुनुहोस्"</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"एउटा पाठ सेवाको (उदाहरण शब्द परीक्षणसेवा) उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि समाती राख्नेलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN सेवासँग बाँध्नुहोस्।"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"एक Vpn सेवाको उच्च स्तरको कुराकानीलाई पक्का गर्नको लागि समाती राख्नेले अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"एउटा वालपेपरमा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"वालपेपरको माथिल्लो स्तरको इन्टरफेसमा बाँध्न धारकलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्दैन।"</string>
+    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"एउटा विजेट सेवासँग संगठित हुनुहोस्"</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"एउटा विजेट सेवाको उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि समाती राख्नेलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"उपकरणको प्रबन्धसँग अन्तरक्रिया गर्नुहोस्"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"उपकरण प्रशासक लाई आशय पठाउन समाती राख्‍नेलाई अनुमति दिन्छ। साधारण अनुप्रयोहरूको लागि कहिल्यै पनी आवश्यक पर्दैन।"</string>
+    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"एउटा उपकरण व्यवस्थापक थप गर्नुहोस् वा हटाउनुहोस्"</string>
+    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"होल्डरलाई सक्रिय उपकरण व्यवस्थापकहरू थप गर्न वा हटाउन अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिल्यै पनि आवश्यक नहुन सक्दछ।"</string>
+    <string name="permlab_setOrientation" msgid="3365947717163866844">"स्क्रिन अभिमुखिकरण परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"अनुप्रयोगलाई कुनै पनि समयमा स्क्रिनको परिक्रमण परिवर्तन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"सङ्केतक गति बदल्नुहोस्"</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"कुनै पनि समयमा माउस परिवर्तन गर्न वा ट्राकप्याड संकेतकको गति बदल्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूको लागि कहिल्यै नचाहिन सक्छ।"</string>
+    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"किबोर्ड लेआउट परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"किबोर्ड लेआउटलाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई सायद कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"Linux संकेतहरू अनुप्रयोगलाई पठाउनुहोस्"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"सबै चलिरहेका प्रक्रियाहरूमा पठाइएका संकेतलाई अनुरोध गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"अनुप्रयोगहरू जहिले पनि चल्ने बनाउनुहोस्"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"यसको आफ्नै मेमोरीमा दृढ भएकोको अंश बनाउनको लागि अनुप्रयोगलाई अनुमति दिन्छ। ट्याब्लेटलाई ढिलो गराउँदै गरेका अन्य अनुप्रयोगहरूलाई सीमित मात्रामा यसले मेमोरी उपलब्ध गराउन सक्छ।"</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"अनुप्रयोगलाई मेमोरीमा आफैंको निरन्तरको अंश बनाउन अनुमति दिन्छ। यसले फोनलाई ढिला बनाएर अन्य अनुप्रयोगहरूमा मेमोरी SIMित गर्न सक्दछन्।"</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"अनुप्रयोगहरू मेटाउनुहोस्"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"अनुप्रयोगलाई एन्ड्रोइड प्याकेजहरू मेटाउन अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई महत्त्वपूर्ण अनुप्रयोगहरू मेटाउन प्रयोग गर्न सक्दछन्।"</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"अन्य अनुप्रयोगहरूको डेटा मेटाउनुहोस्"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"प्रयगकर्ता डेटा हटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"अन्य अनुप्रयोगहरूको क्यासहरू मेटाउनुहोस्"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"अनुप्रयोगलाई क्यास फाइलहरू मेटाउन अनुमति दिन्छ।"</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"अनुप्रयोग भण्डारण ठाउँको मापन गर्नुहोस्"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"अनुप्रयोगलाई यसको कोड, डेटा, र क्यास आकारहरू पुनःप्राप्त गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_installPackages" msgid="2199128482820306924">"अनुप्रयोगहरू सिधै स्थापना गर्नुहोस्"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"नयाँ स्थापना गर्न वा एन्ड्रोइड प्याकेजहरू अद्यावधिक गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई मनपरी रूपमा शक्तिशाली अनुमतिहरू भएका नयाँ अनुप्रयोगहरू थप्न प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"सबै अनुप्रयोग क्यास डेटा मेटाउनुहोस्"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"अन्य अनुप्रयोगहरूको क्यास डाइरेक्टरीहरूमा फाइलहरू हटाएर ट्याब्लेटको भण्डारण खाली गर्न अनुप्रयोगहरूलाई अनुमति दिन्छ। उनीहरूले आफ्नो डेटा पुनःबहाली गर्न पर्ने हुनाले यसले अन्य अनुप्रयोगहरूलाई स्टार्ट हुन निकै ढिलो गराउन सक्छ।"</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"अनुप्रयोगलाई अन्य अनुप्रयोगहरूको क्यास डाइरेक्टरीमा फाइलहरू मेटाएर फोन भण्डारण खाली गर्न अनुमति दिन्छ। यसले अन्य अनुप्रयोगहरूलाई बढी ढिला सुरु गराउँछ किनकि तिनीहरूले आफ्नो डेटा पुनःप्राप्ति गर्न आवश्यक पर्ने हुन्छ।"</string>
+    <string name="permlab_movePackage" msgid="3289890271645921411">"अनुप्रयोग स्रोतहरू सार्नुहोस्"</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"अनुप्रयोग स्रोतहरू आन्तरिकबाट बाह्य मेडियामा र विपरितमा लैजान अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"संवेनशील लग डेटा पढ्नुहोस्"</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"प्रणालीका विभिन्न फाइलहरूबाट पढ्न अनुप्रयोगलाई अनुमति दिन्छ। सम्भाव्य रूपमा व्यक्तिगत र निजी सूचनासहित तपाईँ ट्याब्लेटसँग के गरिरहनु भएको छ भन्ने बारेको साधारण सूचना पत्ता लगाउन यसलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"प्रणालीका विभिन्न फाइलहरूबाट पढ्न अनुप्रयोगलाई अनुमति दिन्छ। सम्भाव्य रूपमा व्यक्तिगत र निजी सूचनासहित तपाईँ फोनसँग के गरिरहनु भएको छ भन्ने बारेको साधारण सूचना पत्ता लगाउन यसलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"पछाडि बजाउनको लागि कुनै मिडिया प्रयोग गर्नुहोस्"</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"अनुप्रयोगलाई प्लेब्याक डिकोड गर्न कुनै पनि स्थापित मिडिया डिकोडर प्रयोगको लागि अनुमति दिन्छ।"</string>
+    <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"विश्वसनीय प्रमाणहरू प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"अनुप्रयोगलाई CA प्रमाणपत्रहरू विश्वसनीय प्रमाणहरूका रूपमा स्थापना गर्न र हटाउन अनुमति दिन्छ।"</string>
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"diag को स्वामित्वमा रहेको संसाधनहरूमा पढ्नुहोस्/लेख्नुहोस्"</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"अनुप्रयोगलाई diag समूहद्वारा स्वामित्व प्राप्त कुनै पनि स्रोतहरूमा पढ्न र लेख्न अनुमति दिन्छ; उदाहरणको लागि, /dev  मा फाइलहरू। यसले सम्भवतः प्रणाली स्थिरता र सुरक्षामा प्रभाव पार्न सक्दछ। यो केवल निर्माता वा संचालकद्वारा हार्डवेयर-निर्दिष्टको लागि प्रयोग हुन सक्दछ।"</string>
+    <string name="permlab_changeComponentState" msgid="6335576775711095931">"अनुप्रयोग अंशहरू सक्षम वा अक्षम गर्नुहोस्"</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"अन्य अनुप्रयोग सक्षम छ वा छैन भन्ने कुराको परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। महत्त्वपूर्ण फोन सक्षमता खराब अनुप्रोगहरूले असक्षम पार्न प्रयोग गर्न सक्छन्। यो अनुमतिसँगै होसियारी अपनाउनु पर्छ, अनुप्रयोग विषय सूचीमा प्रयोग नहुने, असंगत, अस्थिर अवस्था भएको प्राप्त हुने सम्भावना हुन्छ।"</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"अन्य अनुप्रयोगको अंश सक्षम छ वा छैन भन्नेमा परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। महत्त्वपूर्ण फोन सक्षमता खराब अनुप्रोगहरूले असक्षम पार्न प्रयोग गर्न सक्छन्। यो अनुमतिसँगै होसियारी अपनाउनु पर्छ, अनुप्रयोग विषय सूचीमा प्रयोग नहुने, असंगत, अस्थिर अवस्था भएको प्राप्त हुने सम्भावना हुन्छ।"</string>
+    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"अनुमतिहरू प्रदान गर्नुहोस् वा रद्द गर्नुहोस्"</string>
+    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"अनुप्रयोगलाई यो वा अन्य अनुप्रयोगहरूको लागि निर्दिष्ट स्वीकृतिहरू प्रदान गर्न वा रद्द गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले यो तपाईंले अनुमति प्रदान नगर्नुभएका सुविधाहरूमा पहुँच गर्न सक्दछन्।"</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"विशेष रूपमा मान्य अनुप्रयोगहरू सेट गर्नुहोस"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"तपाईँको मनपर्ने अनुप्रयोगलाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले चलिरहेका ती अनुप्रयोहरूलाई चुपचाप रूपमा परिवर्तन गर्न सक्छन्, तपाईँबाट निजी डेटा संकलन गर्नको लागि भइरहेको अनुप्रयोगलाई स्पुफ गर्न सक्छन्।"</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"प्रणाली सेटिङहरू परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"प्रणालीका सेटिङ डेटालाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले सायद तपाईँको प्रणालीको कन्फिगरेसनलाई क्षति पुर्‍याउन सक्छन्।"</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"सुरक्षित प्रणाली सेटिङहरू परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"प्रणालीको सुरक्षित सेटिङ डेटा परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूको प्रयोगको लागि होइन्।"</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"Google सेवा नक्सा परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"अनुप्रयोगलाई Google सेवा नक्साहरू परिमार्जन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूद्वाराको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"स्टार्टअपमा चलाउनुहोस्"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"आनुप्रयोगलाई प्रणाली बुट प्रक्रिया पूर्ण हुने बितिकै आफैलाई सुरु गर्ने अनुमति दिन्छ। यसले ट्याब्लेट सुरु गर्नमा ढिला गर्न सक्दछ र अनुप्रयोगलाई समग्रमा ट्याब्लेट सधैँ चालु गरेर ढिला बनाउँदछ।"</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"अनुप्रयोगलाई प्रणाली बुट गरी सकेपछि जति सक्दो चाँडो आफैंमा सुरु गर्न अनुमति दिन्छ। यसले फोन सुरु गर्नमा ढिला गर्न सक्दछ र अनप्रयोगलाई समग्रमा फोन सधैँ चालु गरेर ढिला बनाउँदछ।"</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"स्टिकि प्रसारण पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"औपचारिक प्रसारणलाई पठाउनको लागि एउटा अनुप्रयोगलाई अनुमति दिन्छ, जुन प्रसारण समाप्त भएपछि बाँकी रहन्छ। अत्याधिक प्रयोगले धेरै मेमोरी प्रयोग गरेको कारणले ट्याब्लेटलाई ढिलो र अस्थिर बनाउन सक्छ।"</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"औपचारिक प्रसारणलाई पठाउनको लागि एक अनुप्रयोगलाई अनुमति दिन्छ, जुन प्रसारण समाप्त भएपछि बाँकी रहन्छ। अत्याधिक प्रयोगले धेरै मेमोरी प्रयोग गरेको कारणले फोनलाई ढिलो र अस्थिर बनाउन सक्छ।"</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"तपाईँका सम्पर्कहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"अनुप्रयोगलाई निर्दिष्ट व्यक्तिगतसँग अन्य तरिकाहरूबाट कल गर्नु भएका, इमेल गर्नु भएका वा अन्तर्क्रिया गर्नुभएका आवृतिसहितको तपाईंको ट्याब्लेटमा भण्डारण गरिएका सम्पर्कहरूको डेटा पढ्न अनुमति दिन्छ। यो अनुमतिले तपाईंको सम्पर्क डेटा बचत गर्न अनुमति दिन्छ, र खराब अनुप्रयोगहरूले तपाईंको जानकारी बिना सम्पर्क डेटा साझेदारी गर्न सक्दछन्।"</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"तपाईँले विशेष व्यक्तिहरूसँग अर्को तरिकाबाट कल गर्नुभएका, इमेल गर्नुभएका वा संचार गर्नुभएका आवृतिसहित तपाईँको फोनमा भण्डारण भएका डेटाको बारेमा पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यो अनुमतिले अनुप्रयोगलाई तपाईँको सम्पर्क डेटा बचत गर्नको लागि अनुमति दिन्छ, र तपाईँको ज्ञान बिना नै खराब अनुप्रयोगहरूले सायद सम्पर्क डेटा साझेदारी गर्न सक्छन्।"</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"तपाईँका सम्पर्कहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"अन्य तरिकाका आवृतिहरूसँग जुन तपाईँले कल, इमेल, वा विशेष सम्पर्क गर्नुभएकासहित तपाईँको ट्याब्लेटमा भण्डारण भएका सम्पर्कहरूको बारेको डेटालाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यस अनुमतिले सम्पर्क डेटालाई मेटाउनको लागि अनुमति दिन्छ।"</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"तपाईँले बारम्बार कल गरेका, इमेल गरेका, वा विशेष सम्पर्कहरूसँग सञ्चार गरेका सहित तपाईँको फोनमा भण्डारण गरेका तपाईँका सम्पर्कहरू परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। यो अनुमतिले अनुप्रयोगलाई सम्पर्क डेटा मेटाउन दिन्छ।"</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"कल लग पढ्नुहोस्"</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"अनुप्रयोगलाई तपाईँको ट्याब्लेटको कल लग, आगमन र बहिर्गमन कलहरू बारे डेटा सहितको कल लग पढ्न अनुमति दिन्छ। यस अनुमतिले अनुप्रयोगहरूलाई तपाईँको कल लग डेटाहरूको बचत गर्न अनुमति दिन्छ, र खराब अनुप्रयोगहरूले तपाईँको जानकारी बिना नै यो कल लग डेटालाई अरूसँग साझेदार गर्न सक्छन्।"</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"भित्र आउने र बाहिर जाने कलहरूसहित तपाईँको फनको कल लग पढ्न अनुप्रयोगलाई अनुमति दिन्छ।  यो अनुमतिले अनुप्रयोगहरूलाई तपाईँका कल लग डेटा बचत गर्न दिन्छ र खराब अनुप्रयोगहरूले तपाईँले थाहै नपाई कल लग डेटालाई साझेदारी गर्न सक्छन्।"</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"कल लग लेख्‍नुहोस्"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"आगमन तथा बहर्गमन डेटासहित तपाईँको ट्याब्लेटको कल लगको परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई तपाईँको कल लग परिमार्जन गर्न वा मेटाउन प्रयोग गर्न सक्छन्।"</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"अनुप्रयोगलाई तपाईंको फोनको आउने र बाहिर जाने कलहरूको बारेको डेटा सहित कल लग परिमार्जन गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई तपाईंको कल लग मेटाउन वा परिमार्जन गर्न प्रयोग गर्न सक्दछ।"</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"तपाईँको आफ्नै सम्पर्क कार्ड पढ्नुहोस्"</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"अनुप्रयोगलाई तपाईंको उपकरणमा भण्डारण गरिएका व्यक्तिगत प्रोफाइल जानकारी पढ्न अनुमति दिन्छ, जस्तै तपाईंको नाम र सम्पर्क जानकारी। यसको मतलब अनुप्रयोगले तपाईंलाई पहिचान गर्न सक्दछ र तपाईंको प्रोफाइल जानकारी अरूलाई पठाउन सक्दछ।"</string>
+    <string name="permlab_writeProfile" msgid="907793628777397643">"तपाईँको आफ्नै सम्पर्क कार्ड परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"तपाईँको उपकरणमा भण्डार भएको व्याक्तिगत प्रोफाइल जानकारी, जस्तै तपाईँको नाम वा सम्पर्क जानकारीलाई परिवर्तन गर्न वा थप्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यसको मतलब अन्य अनुप्रयोगले तपाईँलाई चिन्न सक्छन् र सायद अन्यलाई तपाईँको प्रोफाइल जानकारी पठाउन सक्छन्।"</string>
+    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"तपाईंको सामाजिक स्ट्रिम पढ्नुहोस्"</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"तपाईँ र तपाईँका साथीहरूबाट सामाजिक अपडेटलाई पहुँच र सिंक गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। जानकारी साझेदारी गर्दा सावधान रहनुहोस्  -- समाजिक नेटवर्कहरूमा तपाईँ र तपाईँको साथीको  बिचमा भएका संचारलाई पढ्न विश्वासनीयता बेगरै यसले अनुप्रयोगलाई अनुमति दिन्छ। नोट: यो अनुमति बलपूर्वक सबै सामाजिक नेटवर्कहरूमा सायद नगर्न सकिन्छ।"</string>
+    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"तपाईँको सामाजिक प्रवाहमा लेख्‍नुहोस्"</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"अनुप्रयोगलाई तपाईंको साथीहरूबाट सामाजिक अपडेटहरू प्रदर्शन गर्न अनुमति दिन्छ। जानकारी साझेदारी गर्ने बेलामा होशियार रहनुहोस् -- यसले अनुप्रयोगलाई सन्देशहरू निर्माण गर्न अनुमति दिन्छ जुन साथीबाट आएको देखिन्छ। टिप्पणी: यो अनुमति सबै सामाजिक सञ्जालहरूमा लागू नहुन सक्दछ।"</string>
+    <string name="permlab_readCalendar" msgid="5972727560257612398">"गोप्य जानकारी र पात्रो घटनाहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"अनुप्रयोगलाई तपाईंको ट्याब्लेटमा भण्डारण गरिएका ती साथीहरू वा सहयोगीहरू सहितको पात्राका कार्यक्रमहरू पढ्न अनुमति दिन्छ। यसले गोपनीयता वा संवेदनशीलता बिना पनि अनुप्रयोगलाई तपाईंको पात्राका डेटा साझेदारी गर्न वा बचत गर्न अनुमति दिन्छ।"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"ती साथीहरू वा सहकर्मीहरूसहित सबै पात्रो घटनाहरू तपाईँको ट्याब्लेटमा भण्डारण भएकालाई पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। तपाईँको पात्रो डेटा यसले सायद सेयर गर्न वा सुरक्षित गर्नको लागि विश्वासनियता वा सम्वेदनशीलता बिना नै अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"पात्रो घटनाहरू थप्नुहोस् वा परिमार्जन गर्नुहोस् र मालिकको ज्ञान बिना नै पाहुनाहरूलाई इमेल पठाउनुहोस्"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"ती साथीहरू वा सहकर्मीहरूसहितका घटनाहरू जसलाई तपाईँले आफ्नो ट्याब्लेटमा परिमार्जन गर्न सक्ने अनुमति अनुप्रयोगलाई दिन्छ। यसले अनुप्रयोगलाई सन्देशहरू जुन पात्राको मालिकहरूबाट आएका देखिनेलाई पठाउने वा मालिकहरूको ज्ञान बेगर घटनालाई परिमार्जन गर्ने अनुमित दिन्छ।"</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"ती साथीहरू वा सहकर्मीहरूसहित तपाईँको फोनका घटनाहरू जसलाई थप्न, हटाउन र परिवर्तन गर्न  अनुप्रयोगलाई अनुमति दिन्छ। पात्रो मालिकबाट देखा परेका वा मालिकको ज्ञान बिना परिवर्तन भएका घटनाहरू सन्देश पठाउन यसले अनुप्रयोगलाई अनुमति दिन सक्छ।"</string>
+    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"परीक्षणको लागि स्थान स्रोतहरू मक गर्नुहोस्"</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"परीक्षणको लागि मक स्थान स्रोतहरू सिर्जना गर्नुहोस् वा नयाँ स्थान प्रदायक स्थापना गर्नुहोस्। यसले अनुप्रयोगलाई स्थानमा ओभरराइड गर्दछ र/वा स्थिति अन्य स्थान स्रोतहरू जस्तै GPS वा स्थान प्रदायकबाट फर्काइएका।"</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"अधिक स्थान प्रदायक आदेशहरू पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"थप स्थान प्रदायक कमाण्डहरू सम्म पहुँच पुर्‍याउन अनुप्रयोगले अनुमति दिन्छ। यसले अनुप्रयोगलाई सायद जीपीएसको वा अन्य स्थान सेवाहरूको कार्य सँग हस्तक्षेप गर्नको लागि यसलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"एउटा स्थान प्रदाता स्थापित गर्न अनुमति"</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"परीक्षणको लागि मक स्थान स्रोतहरू सिर्जना गर्नुहोस् वा नयाँ स्थान प्रदायक स्थापना गर्नुहोस्। यसले अनुप्रयोगलाई स्थानमा ओभरराइड गर्दछ र/वा स्थिति अन्य स्थान स्रोतहरू जस्तै GPS वा स्थान प्रदायकबाट फर्काइएका।"</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"सटिक स्थान (GPS र नेटवर्क आधारित)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"अनुप्रयोगले विश्वव्यापी स्थान प्रणाली (GPS) वा सेल टावरहरू र वाइ-फाइ जस्ता नेटवर्क स्थान स्रोतहरूको प्रयोग गरेर तपाईँको सही स्थान प्राप्त गर्न अनुमति दिन्छ। यी स्थान सेवाहरू खोल्नु पर्छ र अनुप्रयोगहरूका लागि प्रयोग गर्न तपाईँको उपकरणमा उपलब्ध हुनु पर्छ। अनुप्रयोगहरूले तपाईँ कहाँ हुनु हुन्छ भन्ने निर्धारण गर्न यसलाई प्रयोग गर्न सक्छ र यसले अतिरिक्त ब्याट्रि उर्जा खतप गर्न सक्छ।"</string>
+    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"अनुमानित स्थान (नेटवर्क-आधारित)"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"अनुप्रयोगलाई तपाईँको अनुमानित स्थान प्राप्त गर्न अनुमति दिन्छ। यो स्थान सेल टावर र वाइ-फाइजस्ता नेटवर्क स्थान स्रोतहरूको प्रोग गरी स्थान सेवाहरूबाट उत्पन्न गरिएको हो। अनुप्रयोगले यी स्थान सेवाहरूको उपयोग गर्नको लागि यी सेवाहरू तपाईँको उपकरणमा चालु र उपलब्ध हुनु आवश्यक छ। अनुप्रयोगहरूले अनुमानित रूपमा तपाईँ कहाँ हुनुहुन्छ भन्ने निर्धारण गर्न यसको प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger पहुँच गर्नुहोस्।"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"SurfaceFlinger कम-स्तर सुविधाहरू प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"फ्रेम बफर पढ्नुहोस्"</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"अनुप्रयोगलाई फ्रेम बफरको सामग्री पढ्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger को पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"InputFlinger को कम-स्तर सुविधाहरू प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"वाइफाइ प्रदर्शनहरूलाई विन्यास गर्नुहोस"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"अनुप्रयोगलाई कन्फिगर गर्न र वाइफाइ प्रदर्शनहरूसँग जोड्न अनुमति दिन्छ।"</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"वाइफाइ प्रदर्शनहरू नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"वाइफाइ प्रदर्शनीका तल्लो तह विषेशताहरू नियन्त्रण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"अडियो आउटपुट कैद गर्नुहोस्"</string>
+    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"अनुप्रयोगलाई अडियो आउटपुट कैद गर्न र रिडाइरेक्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"भिडियो आउटपुट कैद गर्नुहोस्"</string>
+    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"अनुप्रयोगलाई भिडियो आउटपुट कैद गर्न र रिडाइरेक्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"सुरक्षित भिडियो आउटपुट कैद गर्नुहोस्"</string>
+    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"अनुप्रयोगलाई सुरक्षित भिडियो आउटपुट कैद गर्न र रिडाइरेक्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"तपाईँका अडियो सेटिङहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"अनुप्रयोगलाई ग्लोबल अडियो सेटिङ्हरू परिमार्जन गर्न अनुमति दिन्छ, जस्तै आवाजको मात्रा र आउटपुटको लागि कुन स्पिकर प्रयोग गर्ने।"</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"अडियो रेकर्ड गर्नुहोस्"</string>
+    <string name="permdesc_recordAudio" msgid="4906839301087980680">"अनुप्रयोगलाई माइक्रोफोनको साथ अडियो रेकर्ड गर्न अनुमति दिन्छ। यस अनुमतिले तपाईंको पुष्टिकरण बिना कुनै पनि समयमा अडियो रेकर्ड गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"तस्बिरहरू र भिडियोहरू लिनुहोस्।"</string>
+    <string name="permdesc_camera" msgid="8497216524735535009">"अनुप्रयोगलाई क्यामेरासँग तस्बिर र भिडियोहरू लिन अनुमति दिन्छ। यस अनुमतिले अनुप्रयोगलाई तपाईंको पुष्टिकरण बिना कुनै पनि समयमा क्यामेरा प्रयोग गर्न स्वीकृति दिन्छ।"</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"क्यामेरा प्रयोगमा हुँदा सूचक LED प्रसारण असक्षम गर्नुहोस्"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"पूर्व-स्थापित प्रणाली अनुप्रयोगलाई क्यामेरा उपयोग सूचक LED अक्षम गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"स्थायी रूपमा ट्याब्लेट अक्षम पार्नुहोस्"</string>
+    <string name="permlab_brick" product="default" msgid="8337817093326370537">"फोनलाई स्थायी रूपमा असक्षम पार्नहोस्"</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"पुरै ट्याब्लेटलाई स्थायी रूपमा असक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ। यो निकै खतरनाक हुन्छ।"</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"सम्पूर्ण फोनलाई स्थायी रूपमा असक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ। यो धेरै खतरनाक हुन्छ।"</string>
+    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"ट्याब्लेट पुनःबुट गर्न जोड गर्नुहोस्"</string>
+    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"फोन पुनःबुट गर्नु जोड गर्नुहोस्"</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"ट्याब्लेटलाई बलपूर्वक पुनःबुट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"फोनलाई बलपुर्वक पुनःबुट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"USB भण्डारण फाइल प्रणाली पहुँच गर्नुहोस्"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"SD कार्ड फाइल प्रणाली पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"हटाउन मिल्ने भण्डारणको लागि फाइल प्रणालीहरू माउन्ट र अनमाउन्ट गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB भण्डारण मेट्नुहोस्"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD कार्ड मेटाउनुहोस्"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"हटाउन मिल्ने भण्डारण फर्म्याट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_access" msgid="3411338632002193846">"आन्तरिक भण्डारणको सूचना प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"आन्तरिक भण्डारणमा सूचना प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_create" msgid="6414757234789336327">"आन्तरिक भण्डारण सिर्जना गर्नुहोस्"</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"आन्तरिक भण्डारण सिर्जना गर्नको लागि अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_destroy" msgid="526928328301618022">"आन्तरिक भण्डारण ध्वस्त पार्नुहोस्"</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"अनुप्रयोगलाई आन्तरिक भण्डारण ध्वस्त पार्न अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"आन्तरिक भण्डारणलाई माउन्ट/अनमाउन्ट गर्नुहोस्"</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"अनुप्रयोगलाई आन्तरिक भण्डारण माउन्ट/अनमाउन्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_rename" msgid="7496633954080472417">"आन्तरिक भण्डारणको पुन:नामाकरण गर्नुहोस्"</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"आन्तरीक भण्डारणको पुननामाकरण गर्नको लागि अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"कम्पन नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"अनुप्रयोगलाई भाइब्रेटर नियन्त्रण गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"फ्ल्यासलाईट नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"फ्ल्यास प्रकाशलाई नियन्त्रण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"USB उपकरणहरूको लागि प्राथमिकताहरू र अनुमतिहरू प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"USB उपकरणहरूको लागि प्राथमिकताहरू र अनुमतिहरूलाई व्यवस्थापन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP प्रोटोकल कार्यान्वयन गर्नुहोस्"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"MTP USB प्रोटोकल कार्यान्वयन गर्न केर्नल MTP ड्राइभरको पहुँचको अनुमति दिन्छ।"</string>
+    <string name="permlab_hardware_test" msgid="4148290860400659146">"हार्डवेयर परीक्षण गर्नुहोस्"</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"हार्डवेयर परीक्षणको उद्देश्यका लागि विभिन्न परिधीयहरूलाई नियन्त्रण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"फोन नम्बरहरूमा सिधै कल गर्नुहोस्"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"तपाईँको हस्तक्षेप बेगरै फोन नम्बर कल गर्न अनुप्रयोगलाई अनुमति दिन्छ। यसले अनपेक्षित शुल्क वा कलहरू गराउन सक्छ। यसले अनुप्रयोगलाई आपतकालीन नम्बरहरू कल गर्न अनुमति दिँदैन विचार गर्नुहोस्। खराब अनुप्रयोगहरूले तपाईँको स्वीकार बिना कलहरू गरेर तपाईँलाई बढी पैसा तिराउन सक्छ।"</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"कुनै पनि फोन नम्बरहरू सिधै कल गर्नुहोस्"</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"कुनै पनि फोन नम्बरमा, आकस्मिक नम्बर सहित, तपाईँको हस्तक्षेप बिना कल गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले अनावश्यक र गैर कानुनी कलहरूलाई आकस्मिकमा स्थानान्तरण गर्न सक्छन्।"</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"CDMA ट्याब्लेट सेटअफ सिधै सुरु गर्नुहोस्"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"CDMA फोन सेटअप सिधै सुरु गर्नुहोस्"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"अनुप्रयोगलाई CDMA प्रावधान सुरu गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले अनावश्यक रूपमा CDMA प्रावधान सुरु गर्न सक्छन्।"</string>
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"स्थान अपडेट सूचनाहरू नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"रेडियोबाट स्थान अद्यावधिक सूचनाहरूलाई सक्षम/असक्षम गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूबाट प्रयोग नहुने।"</string>
+    <string name="permlab_checkinProperties" msgid="7855259461268734914">"परीक्षण विशेषताहरू पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"परीक्षण सेवाद्वारा विशेषता अपलोड भएको पहुँच पढ्न/लेख्‍न अनुप्रयोगलाई अनुमति दिन्छ। साधारण अनुप्रयोगद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"विजेटहरूको चयन गर्नुहोस्"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"अनुप्रयोगलाई प्रणालीलाई कुन विजेट कुन अनुप्रयोगद्वारा प्रयोग गर्न सकिन्छ भनेर अनुमति दिन्छ। यस अनुमतिसहितको अनुप्रयोगले अन्य अनुप्रयोगहरूलाई व्यक्तिगत डेटाको पहुँच दिन सक्दछ। सामान्य अनुप्रयोगहरूको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"फोनको स्थिति परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"उपकरणका फोन विशेषताहरूलाई नियन्त्रण गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।  यस अनुमतिले एउटा अनुप्रयोगले नेटवर्क स्विच गर्न, फोन रेडियो बन्द गर्न र खोल्न र जस्तै तपाईँ सधै सूचित नगरी गर्न सक्छ।"</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"फोन स्थिति र पहिचान पढ्नुहोस्"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"उपकरणको फोन विशेषताहरूको पहुँच गर्न अनुप्रयोगलाई अनुमति दिन्छ। यस अनुमतिले फोन नम्बर र उपकरणको IDs, कल सक्षम छ कि छैन र कलद्वारा जोडिएको टाढाको नम्बर निर्धारण गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ट्याब्लेटलाई निन्द्रामा जानबाट रोक्नुहोस्"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"फोनलाई निदाउनबाट रोक्नुहोस्"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ट्याब्लेटलाई निस्क्रिय हुनबाट रोक्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"फोनलाई निस्क्रिय हुनबाट रोक्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"ट्याब्लेट पावर खोल्न र बन्द गर्नुहोस्"</string>
+    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"फोन खोल्न वा बन्द गर्न उर्जा प्रदान गर्नुहोस"</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"ट्याब्लेटलाई खोल्न र बन्द गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"अनुप्रयोगलाई फोन खोल्न र बन्द गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_factoryTest" msgid="3715225492696416187">"फ्याक्ट्रि परीक्षण मोडमा चालु गर्नुहोस्"</string>
+    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"ट्याब्लेट हार्डवेयरलाई पुरा पहुँच गर्न दिँदै तल्लो स्तर उत्त्पादक परीक्षणको रूपमा चलाउनुहोस्। ट्याब्लेट उत्त्पादक परीक्षण मोडमा चलिरहेको बेला मात्र उपलब्ध हुन्छ।"</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"तल्लो स्तर उत्त्पादक जस्तै चलाउनुहोस्, पुरा पहुँच दिन फोन हार्डवेयरलाई अनुमति हुन्छ। फोन उत्पादक परीक्षण मोडमा चलिरहेको बेला मात्र उपलब्ध हुन्छ।"</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"वालपेपर सेट गर्नुहोस्"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"अनुप्रयोगलाई प्रणाली वालपेपर सेट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"तपाईंको वालपेपर आकार समायोजन गर्नुहोस्"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"प्रणाली वालपेपरको आकार सङ्केतहरू मिलाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_masterClear" msgid="2315750423139697397">"कार्यशाला पूर्वनिर्धारणको लागि प्रणाली पुनःसेट गर्नुहोस्"</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"यसका फ्याक्ट्रि सेटिङहरू, कन्फिगरेसन र स्थापित अनुप्रयोगहरूलाई प्रणालीमा पुरै पुनःसेट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"समय सेट गर्नुहोस्"</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"ट्याब्लेटको घडीको समय बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"फोनको घडीको समय बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"समय क्षेत्र सेट गर्नुहोस्"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"अनुप्रयोगलाई ट्याब्लेटको समय क्षेत्र परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"अनुप्रयोगलाई फोनको समय क्षेत्र परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService को रूपमा कार्य गर्नुहोस्"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"खाता अधिकारीहरूलाई कल गर्नको लागि अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"उपकरणमा खाताहरू भेट्टाउनुहोस्"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"अनुप्रयोगलाई ट्याब्लेटद्वारा ज्ञात खाताहरूको सूची पाउन अनुमति दिन्छ। यसले अनुप्रयोगद्वारा तपाईंले स्थापित गर्नुभएको कुनै पनि खाताहरू समावेश गर्न सक्दछ।"</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"फोनलाई थाहा भएका खाताहरूको सूची प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ। यसले तपाईँले स्थापना गर्नु भएका अनुप्रयोगहरूबाट सृजित कुनै खाताहरू समावेश हुन सक्छ।"</string>
+    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"खाता सिर्जना गर्नुहोस् र पासवर्ड सेट गर्नुहोस्"</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"खाताहरूको सिर्जना गर्ने र प्राप्त गर्ने र उनीहरूको पासवर्डहरूको सेटिङ गर्ने सहित खाता प्रबन्धकको खाता आधिकारी सक्षमताहरू प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"खाताहरू थप्नुहोस् वा हटाउनुहोस्"</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"खाताहरू थप्ने र हटाउने जस्ता प्रक्रियाहरू सम्पन्न गर्न, र उनीहरूको पासवर्ड मेटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_useCredentials" msgid="235481396163877642">"उपकरणमा खाताहरूको प्रयोग गर्नुहोस्"</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"अनुप्रयोगलाई प्रमाणीकरण टोकनहरू अनुरोध गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"नेटवर्क जडानहरू हेर्नहोस्"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"अनुप्रयोगलाई नेटवर्क जडानहरू जस्तै कुन नेटवर्कहरू अवस्थित हुन्छन् र जडित छन् जसले हेर्नलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"पूर्ण नेटवर्क पहुँच"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"नेटवर्क सकेटहरू सिर्जना गर्न र कस्टम नेटवर्क प्रोटोकल प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ। ब्राउजर र अन्य अनुप्रयोगहरूले इन्टरनेटमा डेटा पठाउने माध्यम प्रदान गर्छन्, त्यसैले इन्टरनेटमा डेटा पठाउन यो अनुमतिको आवश्यकता पर्दैन।"</string>
+    <string name="permlab_writeApnSettings" msgid="505660159675751896">"नेटवर्क सेटिङहरू र ट्राफिक परिवर्तन गर्नुहोस् / रोक्नुहोस्"</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"अनुप्रयोगलाई नेटवर्क सेटिङहरू परिवर्तन गर्न र सबै नेटवर्क ट्राफिक रोक्न र परीक्षण गर्न अनुमति दिन्छ, उदाहरणको लागि कुनै पनि APN को प्रोक्सी र पोर्ट परिवर्तन गर्न। खराब अनुप्रयोगहरूले तपाईंको ज्ञान बिना नेटवर्क प्याकेटहरू मोनिटर गर्न, पुन:निर्देशित गर्न, वा परिमार्जन गर्न सक्दछ।"</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"नेटवर्क जडान परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"अनुप्रयोगलाई नेटवर्क जडानको स्थिति परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"टेथर्ड नेटवर्क जडान परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"टिथर गरेको नेटवर्क जडानको स्थिति बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"पृष्ठभूमि डेटा प्रयोग सेटिङहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"अनुप्रयोगलाई पृष्ठभूमि डेटा उपयोग सेटिङ परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"वाइ-फाइ जडानहरू हेर्नुहोस्"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"अनुप्रयोगलाई वाइ-फाइ नेटवर्कको बारेमा जानकारी हेर्न अनुमति दिन्छ, जस्तै कि वाइ-फाइ सक्षम छ कि छैन र जडान गरिएको वाइ-फाइ उपकरणहरूको नाम।"</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"वाइ-फाइसँग जोड्नुहोस् वा छुटाउनुहोस्"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"अनुप्रयोगलाई वाइ-फाइ पहुँच बिन्दुबाट जडान गर्न र विच्छेदन गर्न र वाइ-फाइ नेटवर्कहरूको लागि उपकरण कन्फिगरेसनमा परिवर्तनहरू गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"वाइ-फाइ Multicast स्विकृतिलाई अनुमति दिनुहोस्"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"अनुप्रयोगलाई मल्टिकाष्ट ठेगानाहरू प्रयोग गरेर वाइ-फाइ नेटवर्कमा पठाइएको प्याकेटहरू प्राप्त गर्न अनुमति दिन्छ, केवल तपाईंको ट्याब्लेट मात्र होइन। यसले गैर-मल्टिकाष्ट मोड भन्दा बढी उर्जा प्रयोग गर्दछ।"</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"तपाईँको फोन मात्र होइन, मल्टिकास्ट ठेगानाहरूको प्रयोग गरे वाइ-फाइ नेटवर्कका सबै उपकरणहरूमा पठाइएका प्याकेटहरू प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ। यसले गैर-मल्टिकास्ट मोडभन्दा बढी उर्जा प्रयोग गर्छ।"</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"ब्लुटुथ सेटिङहरूमा पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"स्थानीय ब्लुटुथ ट्याब्लेटलाई कन्फिगर गर्नको लागि र टाढाका उपकरणहरूलाई पत्ता लगाउन र जोड्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"अनुप्रयोगलाई स्थानीय ब्लुटुथ फोन कन्फिगर गर्न र टाढाका उपकरणहरूसँग खोज गर्न र जोडी गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAXसँग जोड्नुहोस् वा छुटाउनुहोस्"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"अनुप्रयोगलाई वाइम्याक्स सक्षम छ कि छैन र जडान भएको कुनै पनि वाइम्याक्स नेटवर्कहरूको बारेमा जानकारी निर्धारिण गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"वाइम्याक्स स्थिति परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"अनुप्रयोगलाई वाइम्याक्स नेटवर्कहरूबाट ट्याब्लेट जडान गर्न र ट्याब्लेट विच्छेदन गर्न अनुमति दिन्छ।"</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"वाइम्याक्स नेटवर्कहरूसँग फोन जोड्न र छुटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"ब्लुटुथ उपकरणहरूसँग जोडी मिलाउनुहोस्"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ट्याब्लेटमा ब्लुटुथको कन्फिगुरेसनलाई हेर्न र बनाउन र जोडी उपकरणहरूसँग जडानहरूलाई स्वीकार गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"अनुप्रयोगलाई फोनमा ब्लुटुथको कन्फिगरेसन हेर्न र जोडी भएका उपकरणहरूसँग जडानहरू बनाउन र स्वीकार गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"नजिक क्षेत्र संचार नियन्त्रणहरू"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"अनुप्रयोगलाई नयाँ क्षेत्र संचार (NFC) ट्यागहरू, कार्डहरू र पाठकहरूसँग अन्तर्क्रिया गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"स्क्रिन लक असक्षम पार्नुहोस्"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"कुनै सम्बन्धित पासवर्ड सुरक्षा र किलकलाई असक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ। उदाहरणको लागि, अन्तर्गमन फोन कल प्राप्त गर्दा फोनले किलकलाई असक्षम पार्छ, त्यसपछि कल सकिएको बेला किलक पुनःसक्षम पार्छ।"</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"समीकरण सेटिङहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"अनुप्रयोगलाई खाताको लागि सिङ्क सेटिङहरू पढ्न अनुमति दिन्छ। उदाहरणको लागि यसले व्यक्तिहरको अनुप्रयोग खातासँग सिङ्क भएको नभएको निर्धारण गर्न सक्दछ।"</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"टगल सिङ्क खुला र बन्द"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"अनुप्रयोगहरूलाई खाताको लागि सिङ्क सेटिङहरू परिमार्जन गर्न अनुमति दिन्छ। उदाहरणको लागि, यो खातासँग व्यक्ति अनुप्रयोगको सिङ्क सक्षम गर्न प्रयोग गर्न सकिन्छ।"</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"सिङ्क तथ्याङ्कहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"अनुप्रयोगलाई खाताको लागि समीकरणको आँकडा समीकरण घटनाहरूको  इतिहास र समीकरण गरिएको डेटाको मापन समेत, पढ्न अनुमति दिन्छ।"</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्य बनाइका फिडहरू पढ्नुहोस्"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"अनुप्रयोगलाई अहिलेको समीकरण गरिएका सूचकहरू बारे विवरणहरू लिने अनुमति दिन्छ।"</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"सदस्य बनाइका फिडहरू लेख्नुहोस्"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"तपाईँका भर्खरै सिङ्क फिडहरूलाई परिमार्जन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। तपाईँको सिङ्क फिडहरूलाई परिवर्तन गर्नको लागि यसले  खराब अनुप्रयोगलाई अनुमति दिन सक्छ।"</string>
+    <string name="permlab_readDictionary" msgid="4107101525746035718">"तपाईँले शब्दकोशमा थपेका शब्दहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"अनुप्रयोगलाई प्रयोगकर्ताले प्रयोगकर्ता शब्दकोशमा भण्डारण गरेका हुन सक्ने सबै शब्दहरू, नामहरू र पदावलीहरू पढ्न अनुमति दिन्छ।"</string>
+    <string name="permlab_writeDictionary" msgid="2183110402314441106">"प्रयोगकर्ता-परिभाषित शब्दकोशमा शब्दहरू थप्नुहोस्।"</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"प्रयोगकर्ता शब्दकोशमा नयाँ शब्द लेख्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"सुरक्षित गरिएका भण्डारण पहुँचको परीक्षण गर्नुहोस्"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"सुरक्षित गरिएका भण्डारण पहुँचको परीक्षण गर्नुहोस्"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"भविष्य उपकरणहरूमा उपलब्ध हुने USB भण्डारणको लागि अनुमति परीक्षण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"भविष्य उपकरणहरूमा उपलब्ध हुने SD कार्डको लागि अनुमति परीक्षण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"तपाईँको USB भण्डारणको विषयवस्तुहरूलाई परिमार्जन गर्नुहोस् वा मेटाउनुहोस्"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"तपाईँको SD कार्डको विषयसूची परिमार्जन गर्नुहोस् वा मेट्नुहोस्"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"USB भण्डारणमा लेख्‍नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"अनुप्रयोगलाई SD कार्डमा लेख्न अनुमति दिन्छ।"</string>
+    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"आन्तरिक मिडिया भण्डारण सामग्रीहरू परिमार्जन गर्नुहोस्/मेटाउनुहोस्"</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"अनुप्रयोगलाई आन्तरिक मिडिया भण्डारणको सामग्रीहरू परिमार्जन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"कागजात भण्डारण प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"अनुप्रयोगलाई कागजात भण्डारण समायोजन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"सबै उपयोगकर्ताहरूको बाह्य भण्डारणको पहुँच राख्नुहोस्"</string>
+    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"अनुप्रयोगलाई सबै उपयोगकर्ताहरूको लागि बाह्य भण्डारणमाथि पहुँच राख्न अनुमति दिन्छ।"</string>
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"क्यास फाइल प्रणाली पहुँच गर्नुहोस्।"</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"केस फाइल प्रणालीलाई पढ्न र लेख्‍नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_use_sip" msgid="5986952362795870502">"इन्टरनेट कलहरू गर्नुहोस् वा प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"इन्टरनेट कल गर्न/प्राप्त गर्न SIP सेवालाई प्रयोग गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"नेटवर्क उपयोगको इतिहास पढ्नुहोस्"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"निश्चित नेटवर्कहरू र अनुप्रयोगहरूको लागि ऐतिहासिक नेटवर्क उपयोग पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"नेटवर्क नीति प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"नेटवर्क नीतिहरू व्यवस्थापन गर्न र अनुप्रयोग-विशेष नियमहरू परिभाषित गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"नेटवर्क उपयोग लेखालाई परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"अनुप्रयोगलाई कसरी अनुप्रयोगहरूको विरूद्धमा कसरी नेटवर्क उपयोगी अकाउन्टेड छ भनेर परिमार्जन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"सकेटको निशानहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"मार्ग दर्शनको लागि अनुप्रयोगलाई सकेटको निशानहरू परिवर्तन गर्न अनुमति दिन्छ"</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"सूचनाहरू पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"अन्य अनुप्रयोगहरूबाट पोस्ट गरिएकासहित पुनःप्राप्त गर्न, परीक्षण गर्न र सूचनाहरू हटाउन अनुप्रयोगहरूलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"जानकारी श्रोता सेवामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"होल्डरलाई सूचना श्रोता सेवाको शीर्ष-स्तरको इन्टरफेस बाँध्न अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"वाहक-प्रदान विन्यास अनुप्रयोग सुरु गर्नुहोस्"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"प्रयोगकर्तालाई वाहक-प्रदान विन्यास अनुप्रयोग सुरु गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"सञ्जाल अवस्थाका पर्यवेक्षणका लागि सुन्नुहोस्"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"सञ्जाल अवस्थाका पर्यवेक्षण सुन्नका लागि अनुप्रयोगलाई अनुमति दिन्छ।सामान्य अनुप्रयोगलाई चाँहिदै नचाँहिन सक्छ।"</string>
+    <string name="permlab_hotwordRecognition" msgid="3225080408746361313">"जल्दोबल्दो शब्द पहिचानका लागि अनुरोध गर्नुहोस्"</string>
+    <string name="permdesc_hotwordRecognition" msgid="3716741260195364252">"जल्दाबल्दा शब्द पहिचानका लागि अनुरोध पठाउन अनुप्रयोगलाई अनुमति दिन्छ।सामान्य अनुप्रयोगका लागि यो कहिल्यै नचाहिन सक्छ।"</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"पासवर्ड नियमहरू मिलाउनुहोस्"</string>
+    <string name="policydesc_limitPassword" msgid="3252114203919510394">"स्क्रिन-अनलक पासवर्डहरूमा अनुमति दिइएको लम्बाइ र अक्षरहरू नियन्त्रण गर्नुहोस्।"</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"मोनिटर स्क्रिन-अनलक प्रयत्नहरू"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"स्क्रिन अनलक गर्दा गलत पासवर्ड टाइप भएको संख्या निरीक्षण गर्नुहोस् र यदि निकै धेरै गलत पासवर्डहरू टाइप भएका छन भने ट्याब्लेट लक गर्नुहोस् वा ट्याब्लेटका सबै डेटा मेट्नुहोस्।"</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"स्क्रिनअनलक गर्दा गलत पासवर्ड टाइप भएको संख्या निरीक्षण गर्नुहोस् र यदि निकै धेरै गलत पासवर्डहरू टाइप भएका छन भने फोन लक गर्नुहोस् वा फोनका सबै डेटा मेट्नुहोस्।"</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"स्क्रिन-अनलक पासवर्ड बदल्नुहोस्"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"स्क्रिन-अनलक पासवर्ड परिवर्तन गर्नुहोस्।"</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"स्क्रिन लक गर्नुहोस्।"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"कसरी र कहिले स्क्रिन लक गर्ने नियन्त्रण गर्नुहोस्।"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"सबै डेटा मेट्नुहोस्"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"एउटा फ्याक्ट्रि डेटा पुनःसेट गरेर चेतावनी नआउँदै ट्याबल्टको डेटा मेट्नुहोस्।"</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"एउटा फ्याक्ट्रि डेटा पुनःसेट गरेर चेतावनी नआउँदै फोनको डेटा मेट्नुहोस्।"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"उपकरण विश्वव्यापी प्रोक्सी मिलाउनुहोस्"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"नीति सक्षम हुँदा प्रयोग हुने उपकरण  विश्वव्यापी प्रोक्सी सेट गर्नुहोस्। प्रथम उपकरण प्रशासशनले मात्र प्रभावकारी विश्वव्यापी प्रोक्सी सेट गर्छ।"</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"लक-स्क्रिन पासवर्ड अन्त सेट गर्नुहोस्"</string>
+    <string name="policydesc_expirePassword" msgid="1729725226314691591">"प्रायः कति छिटो लक-स्क्रिन पासवर्ड बदल्नु पर्छ यसलाई नियन्त्रण गर्नुहोस्।"</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"भण्डारण इन्क्रिप्सन मिलाउनुहोस्"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"भण्डार गरिएको डेटा इन्क्रिप्ट हुनु आवश्यक छ।"</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"क्यामेरालाई असक्षम गराउनुहोस्"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"सबै उपकरण क्यामराहरूको प्रयोग रोक्नुहोस्"</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"किगार्डमा भएका विशेषताहरू असक्षम पार्नुहोस्"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"केही किगार्ड विशेषताहरूको प्रयोग रोक्नुहोस्।"</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"गृह"</item>
+    <item msgid="869923650527136615">"मोबाइल"</item>
+    <item msgid="7897544654242874543">"काम गर्नुहोस्"</item>
+    <item msgid="1103601433382158155">"कार्य फ्याक्स"</item>
+    <item msgid="1735177144948329370">"घरको फ्याक्स"</item>
+    <item msgid="603878674477207394">"पेजर"</item>
+    <item msgid="1650824275177931637">"अन्य"</item>
+    <item msgid="9192514806975898961">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"गृह"</item>
+    <item msgid="7084237356602625604">"काम"</item>
+    <item msgid="1112044410659011023">"अन्य"</item>
+    <item msgid="2374913952870110618">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"गृह"</item>
+    <item msgid="5629153956045109251">"काम"</item>
+    <item msgid="4966604264500343469">"अन्य"</item>
+    <item msgid="4932682847595299369">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"गृह"</item>
+    <item msgid="1359644565647383708">"काम"</item>
+    <item msgid="7868549401053615677">"अन्य"</item>
+    <item msgid="3145118944639869809">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"काम गर्नुहोस्"</item>
+    <item msgid="4378074129049520373">"अन्य"</item>
+    <item msgid="3455047468583965104">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"स्काइप"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"अनुकूलन"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"गृह"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"मोबाइल"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"काम"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"कार्य फ्याक्स"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"घरको फ्याक्स"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"पेजर"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"अन्य"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"कलब्याक"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"कार"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"कम्पनी मुख्य"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"मुख्य"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"अन्य फ्याक्स"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"रेडियो"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"टेलेक्स"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"कार्य मोबाइल"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"कार्य पेजर"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"सहायक"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"अनुकूलन"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"जन्मदिन"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"वार्षिक समारोह"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"अन्य"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"अनुकूलन"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"गृह"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"काम"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"अन्य"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"मोबाइल"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"अनुकूलन"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"गृह"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"काम"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"अन्य"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"अनुकूलन"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"गृह"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"काम"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"अन्य"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"अनुकूलन"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"स्काइप"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"ह्याङआउटहरू"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"काम"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"अन्य"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"अनुकूलन"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"अनुकूलन"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"सहायक"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"भाइ"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"बच्चो"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"आन्तरिक साझेदार"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"बुबा"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"मित्र"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"ब्यवस्थापक"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"आमा"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"अभिभावक"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"पार्टनर"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"द्वारा उल्लिखित"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"आफन्त"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"बहिनी"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"पति-पत्नि"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"अनुकूलन"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"गृह"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"काम गर्नुहोस्"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"अन्य"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK र नयाँ PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"नयाँ PIN कोड"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"पासवर्ड टाइप गर्न छुनुहोस्"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"अनलक गर्न पासवर्ड टाइप गर्नुहोस्।"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"अनलक गर्न PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"गलत PIN कोड।"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"अनलक गर्न मेनु थिच्नुहोस् र त्यसपछि ० थिच्नुहोस्।"</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"आपतकालीन नम्बर"</string>
+    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"सेवा छैन।"</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"स्क्रिन लक गरिएको।"</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"अनलक वा आपतकालीन कल गर्न मेनु थिच्नुहोस्।"</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"अनलक गर्न मेनु थिच्नुहोस्।"</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"अनलक गर्नु ढाँचा खिच्नुहोस्"</string>
+    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"आपतकालीन कलहरू"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"कलमा फर्किनुहोस्"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"सही!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"फेरि प्रयास गर्नुहोस्"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"फेरि प्रयास गर्नुहोस्"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"अत्याधिक मोहडा खोल्ने प्रयासहरू बढी भए।"</string>
+    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"चार्ज हुँदै, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_charged" msgid="321635745684060624">"चार्ज भयो"</string>
+    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_low_battery" msgid="1482873981919249740">"तपाईँको चार्जर जोड्नुहोस्।"</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM कार्ड छैन"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"ट्याब्लेटमा SIM कार्ड छैन।"</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"फोनमा SIM कार्ड छैन।"</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM कार्ड घुसाउनुहोस्"</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM कार्ड छैन वा पढ्न मिल्दैन। SIM कार्ड हाल्नुहोस्।"</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"प्रयोग गर्न अयोग्य SIM कार्ड"</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"तपाईंको SIM कार्ड स्थायी रूपमा अक्षम भयो।\n अर्को SIM कार्डको लागि आफनो ताररहित सेवा प्रदायकसँग सम्पर्क गर्नुहोस्।"</string>
+    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"अघिल्लो ट्रयाक बटन"</string>
+    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"अर्को ट्रयाक बटन"</string>
+    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"रोक्ने बटन"</string>
+    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"बजाउने बटन"</string>
+    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"बटन रोक्नुहोस्"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"आपतकालीन कलहरू मात्र"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"नेटवर्क लक छ"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM कार्ड PUK-लक गरिएको छ।"</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"प्रयोगकर्ता निर्देशक वा ग्राहक सेवा सम्पर्क हर्नुहोस्।"</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM कार्ड लक गरिएको छ।"</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM कार्ड अनलक गरिँदै..."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"तपाईंले गलत तरिकाले आफ्नो पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नुभयो। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। पछि <xliff:g id="NUMBER_1">%d</xliff:g> थप असफल कोसिसहरू, तपाईँको Google साइन इन प्रयोग गरी तपाईँको ट्याब्लेट अनलक गर्न भनिने छ।\n\n  <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा फरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"तपाईँले <xliff:g id="NUMBER_0">%d</xliff:g> पटक गलत तरिकाले तपाईँको अनलक ढाँचालाई कोर्नु भएको छ। पछि <xliff:g id="NUMBER_1">%d</xliff:g> अरू धेरै असफल कोसिसहरूपछि, तपाईँलाई तपाईँको फोन Google साइन इन प्रयोग गरेर अनलक गर्नको लागि सोधिने छ। \n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"तपाईँले <xliff:g id="NUMBER_0">%d</xliff:g> पटक ट्याब्लेटलाई अनलक गर्नको लागि गलत तरिकाले कोशिस गर्नुभएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> अरू धेरै असफल कोसिसहरूपछि, ट्याब्लेट फ्याट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ र सबै प्रयोगकर्ता डेटा हराउने छन्।"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"तपाईंले गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक फोन अनलक गर्ने प्रयत्न गर्नुभयो। <xliff:g id="NUMBER_1">%d</xliff:g> बढी असफल प्रयत्नहरू पछि, फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ र सबै प्रयोगकर्ता डेटा हराउने छन्।"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"तपाईँले ट्यब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER">%d</xliff:g> पटक प्रयास गर्नु भएको छ। अब ट्याब्लेटलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ।"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"तपाईंले गलत तरिकाले फोन <xliff:g id="NUMBER">%d</xliff:g> पटक अनलक गर्ने प्रयत्न गर्नुभयो। अब फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ।"</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"ढाँचा बिर्सनु भयो?"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"खाता अनलक"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"निकै धेरै कोसिसहरू"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"अनलक गर्नको लागि, तपाईँको Google खातासँग साइन इन गर्नुहोस्।"</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"प्रयोगकर्तानाम (इमेल)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"पासवर्ड:"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"साइन इन गर्नुहोस्"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"अमान्य प्रयोगकर्तानाम वा पासवर्ड"</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"तपाईँको प्रयोगकर्ता नाम वा पासवर्ड बिर्सनुभयो?\n भ्रमण गर्नुहोस"<b>"google.com/accounts/recovery"</b></string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"जाँच गर्दै..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"खोल्नुहोस्"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"आवाज चालु छ।"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"ध्वनि बन्द"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"ढाँचा सुरु भयो"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"ढाँचा हटाइएको"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"सेल थप गरियो"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"ढाँचा पुरा भयो"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. विजेट %2$d of %3$d।"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"विजेट थप गर्नुहोस्।"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"खाली"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"अनलक क्षेत्र विस्तार भयो।"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"अनलक क्षेत्र भत्कियो।"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> विजेट।"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"प्रयोगकर्ता छनौटकर्ता"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"स्थिति"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"क्यामेरा"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"मिडिया नियन्त्रणहरू"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"विजेट पुनःक्रम गर्ने सुरु भयो।"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"विजेट पुनःक्रम समाप्त भएको छ।"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"विजेट <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> मेटाइयो।"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"अनलक क्षेत्र बढाउनुहोस्।"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"स्लाइड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ढाँचा अनलक।"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलक"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin अनलक"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ढाँचा क्षेत्र।"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र।"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?१२३"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"अक्षर"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"शब्द"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"लिङ्क"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"लाइन"</string>
+    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"कार्यशाला परीक्षण असफल भयो।"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"FACTORY_TEST कार्रवाइले /system/app मा स्थापित प्याकेजहरूको लागि मात्र समर्थन गर्छ।"</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"कुनै प्याकेज फेला पार्न सकिएन जसले FACTORY_TEST कार्य प्रदान गर्दछ।"</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"पुनःबुट गर्नुहोस्"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"यस \"<xliff:g id="TITLE">%s</xliff:g>\" मा भएको पृष्ठले बताउँछ:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"जाभास्क्रिप्ट"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"मार्गनिर्देशन पक्का गर्नुहोस्"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"यस पृष्ठलाई छोड्नुहोस्"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"यही पृष्ठमा रहनुहोस्"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nके तपाईँ यो पेजबाट नेभिगेट गर्न चाहनु हुन्छ भन्ने निश्चत छ?"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"निश्चित गर्नुहोस्"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"जुक्ति: जुमलाई ठूलो र सानो पार्न दुई पटक हान्नुहोस्।"</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"स्वतः भर्ने"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"अटोफिल सेटअप गर्नुहोस्"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$१$२$३"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"प्रान्त"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"हुलाकी कोड"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"राज्य"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"ZIP कोड"</string>
+    <string name="autofill_county" msgid="237073771020362891">"काउन्टी"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"टापु"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"जिल्ला"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"विभाग"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"प्रशासकीय क्षेत्र"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"पेरिस"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"क्षेत्र"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"इमिरेट"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"तपाईँका बुकमार्कहरू र इतिहास पढ्नुहोस्"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"ब्राउजरले भ्रमण गरेको सबै URL हरूको इतिहास र ब्राउजरका सबै बुकमार्कहरू पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। नोट: यो अनुमतिलाई तेस्रो पक्ष ब्राउजरहरूद्वारा वा वेब ब्राउज गर्ने क्षमताद्वारा बलपूर्वक गराउन सकिँदैन।"</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"वेब बुकमार्कहरू र इतिहास लेख्नुहोस्"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"अनुप्रयोगलाई तपाईंको ट्याब्लेटमा भण्डार गरिएको ब्राउजरको इतिहास वा बुकमार्कहरू परिमार्जन गर्न अनुमति दिन्छ। यसले अनुप्रयोगलाई ब्राजर डेटा मेटाउन वा परिमार्जन गर्न अनुमति दिन सक्दछ। टिप्पणी: यो अनुमति वेब ब्राउज गर्ने क्षमताहरूको साथ तेस्रो-पार्टी ब्राउजर वा अन्य अनुप्रयोगहरूद्वारा लागू गरिएको होइन।"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"तपाईँको फोनमा भण्डारण भएको ब्राउजरको इतिहास वा बुकमार्कहरू परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यसले सायद ब्राउजर डेटालाई मेट्न वा परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। नोट: वेब ब्राउज गर्ने क्षमतासहितका अन्य अनुप्रयोगहरू वा तेस्रो- पक्ष ब्राउजरद्वारा सायद यस अनुमतिलाई लागु गर्न सकिंदैन।"</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"एउटा आलर्म सेट गर्नुहोस्"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"स्थापना गरिएको सङ्केत घडी अनुप्रयोगमा सङ्केत समय मिलाउन अनुप्रयोगलाई अनुमति दिन्छ। केही सङ्केत घडी अनुप्रयोगहरूले यो सुविधा कार्यान्वयन नगर्न सक्छन्।"</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"भ्वाइसमेल थप गर्नुहोस्"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"तपाईँको भ्वाइसमेल इनबक्समा सन्देश थप्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"भूस्थान अनुमतिहरू ब्राउजर परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"ब्राउजरको भू-स्थान अनुमतिहरू परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले  स्थान सूचना मनपरी वेब साइटहरूमा पठाउने अनुमतिको लागि यसलाई प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"प्यकेजहरूको निरीक्षण गर्नुहोस्"</string>
+    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"प्याकेज स्थापना योग्य छ कि भनेर रुजु गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"एउटा प्याकेज रुजुकर्तामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"होल्डरलाई प्याकेज प्रमाणितकर्ताहरूको अनुरोधहरू बनाउन अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_serialPort" msgid="546083327654631076">"पहुँच सिरियल पोर्टहरू"</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"होल्डरलाई SerialManager API प्रयोग गरेर सिरियल पोर्टहरू पहुँच गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"विषयसूची प्रदातालाई बाह्य रूपमा पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"सेलबाट धारकले विषयवस्तु प्रदायकहरूसम्मको पहुँच पाउन अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्दैन।"</string>
+    <string name="permlab_updateLock" msgid="3527558366616680889">"स्वचालित उपकरण अपडेटहरू हतोत्साहित गर्नुहोस्"</string>
+    <string name="permdesc_updateLock" msgid="1655625832166778492">"होल्डरलाई उपकरण अपग्रेड गर्न गैर पारस्परिक पुनःबुटको लागि उचित समयको बारेमा प्रणालीमा जानाकारी प्रस्तावको लागि अनुमति दिन्छ।"</string>
+    <string name="save_password_message" msgid="767344687139195790">"के तपाईं ब्राउजरले यो पासवर्ड सम्झेको चाहनुहुन्छ?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"अहिले होइन"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"सम्झनुहोस्"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"कहिल्यै पनि होइन"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"यो पृष्ठ खोल्न तपाईँलाई अनुमति छैन।"</string>
+    <string name="text_copied" msgid="4985729524670131385">"क्लिपबोर्डमा प्रतिलिप गरिएको पाठ।"</string>
+    <string name="more_item_label" msgid="4650918923083320495">"बढी"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"मेनु+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"ठाउँ"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"प्रविष्टि गर्नुहोस्"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"मेटाउनुहोस्"</string>
+    <string name="search_go" msgid="8298016669822141719">"खोज्नुहोस्"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"खोज्नुहोस्"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"जिज्ञासा खोज गर्नुहोस्"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"प्रश्‍न हटाउनुहोस्"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"जिज्ञासा पेस गर्नुहोस्"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"भ्वाइस खोजी"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"छोएर अन्वेषण गर्ने सक्षम पार्न चाहनु हुन्छ?"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>ले स्पर्षद्वारा अन्वेषण सक्षम गर्न चाहन्छ। स्पर्षद्वारा अन्वेषण सक्षम भएको बेला, तपाईँ आफ्नो औँलाको मुनि भएका विषयवस्तुहरू बारे सुन्न वा विवरण हेर्न सक्नुहुन्छ वा ट्याब्लेटसँग अन्तर्क्रिया गर्न इशारा गर्नुहोस्।"</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>ले स्पर्षद्वारा अन्वेषण सक्षम गर्न चाहन्छ। स्पर्षद्वारा अन्वेषण सक्षम भएको बेला तपाईँ आफ्नो औँलाको मुनि भएका विषयवस्तुहरू बारे सुन्न वा विवरण हेर्न सक्नुहुन्छ वा फोनसँग अन्तर्क्रिया गर्न इशारा गर्नुहोस्।"</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"१ महिना अघि"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"१ महिना अघि"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"१ सेकेन्ड अघि"</item>
+    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्ड अघि"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"१ मिनेट अघि"</item>
+    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> मिनेट अघि"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"१ घन्टा अघि"</item>
+    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> घन्टा अघि"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"अन्तिम <xliff:g id="COUNT">%d</xliff:g> दिन"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"अन्तिम महिना"</string>
+    <string name="older" msgid="5211975022815554840">"पुरानो"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"हिजो"</item>
+    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> दिन अघि"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"१ सेकेन्डमा"</item>
+    <item quantity="other" msgid="1241926116443974687">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"१ मिनेटमा"</item>
+    <item quantity="other" msgid="3330713936399448749">"<xliff:g id="COUNT">%d</xliff:g>मिनेटमा"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"१ घन्टामा"</item>
+    <item quantity="other" msgid="547290677353727389">"<xliff:g id="COUNT">%d</xliff:g> घन्टामा"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"भोलि"</item>
+    <item quantity="other" msgid="5109449375100953247">"<xliff:g id="COUNT">%d</xliff:g> दिनमा"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"१ सेकेन्ड अघि"</item>
+    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्ड अगाडि"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"१ मिनेट अघि"</item>
+    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> मिनेट अघि"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"१ घन्टा अघि"</item>
+    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> घन्टा अघि"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"हिजो"</item>
+    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> दिन अघि"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"१ सेकन्ड"</item>
+    <item quantity="other" msgid="5495880108825805108">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"१ मिनेटमा"</item>
+    <item quantity="other" msgid="4216113292706568726">"<xliff:g id="COUNT">%d</xliff:g> मिनेटमा"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"१ घन्टामा"</item>
+    <item quantity="other" msgid="3705373766798013406">"<xliff:g id="COUNT">%d</xliff:g> घन्टामा"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"भोलि"</item>
+    <item quantity="other" msgid="2973062968038355991">"दिन<xliff:g id="COUNT">%d</xliff:g> मा"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"<xliff:g id="DATE">%s</xliff:g> मा"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"<xliff:g id="TIME">%s</xliff:g> मा"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"<xliff:g id="YEAR">%s</xliff:g> मा"</string>
+    <string name="day" msgid="8144195776058119424">"दिन"</string>
+    <string name="days" msgid="4774547661021344602">"दिन"</string>
+    <string name="hour" msgid="2126771916426189481">"घन्टा"</string>
+    <string name="hours" msgid="894424005266852993">"घन्टा"</string>
+    <string name="minute" msgid="9148878657703769868">"मिनेट"</string>
+    <string name="minutes" msgid="5646001005827034509">"मिनेट"</string>
+    <string name="second" msgid="3184235808021478">"सेकेन्ड"</string>
+    <string name="seconds" msgid="3161515347216589235">"सेकेन्ड"</string>
+    <string name="week" msgid="5617961537173061583">"हप्ता"</string>
+    <string name="weeks" msgid="6509623834583944518">"हप्ताहरू"</string>
+    <string name="year" msgid="4001118221013892076">"वर्ष"</string>
+    <string name="years" msgid="6881577717993213522">"वर्षहरू"</string>
+  <plurals name="duration_seconds">
+    <item quantity="one" msgid="6962015528372969481">"१ सेकेन्ड"</item>
+    <item quantity="other" msgid="1886107766577166786">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्ड"</item>
+  </plurals>
+  <plurals name="duration_minutes">
+    <item quantity="one" msgid="4915414002546085617">"१ मिनेट"</item>
+    <item quantity="other" msgid="3165187169224908775">"<xliff:g id="COUNT">%d</xliff:g> मिनेट"</item>
+  </plurals>
+  <plurals name="duration_hours">
+    <item quantity="one" msgid="8917467491248809972">"१ घन्टा"</item>
+    <item quantity="other" msgid="3863962854246773930">"<xliff:g id="COUNT">%d</xliff:g> घन्टा"</item>
+  </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"भिडियो समस्या"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"यो भिडियो यस उपकरणको लागि स्ट्रिमिङ गर्न मान्य छैन।"</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"यो भिडियो चलाउन सक्दैन।"</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"ठीक छ"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"मध्यान्न"</string>
+    <string name="Noon" msgid="3342127745230013127">"मध्यान्ह"</string>
+    <string name="midnight" msgid="7166259508850457595">"मध्यरात"</string>
+    <string name="Midnight" msgid="5630806906897892201">"मध्यरात"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"सबैलाई चयन गर्नुहोस्"</string>
+    <string name="cut" msgid="3092569408438626261">"काट्नुहोस्"</string>
+    <string name="copy" msgid="2681946229533511987">"प्रतिलिपि बनाउनुहोस्"</string>
+    <string name="paste" msgid="5629880836805036433">"टाँस्नुहोस्"</string>
+    <string name="replace" msgid="5781686059063148930">"विस्थापन गर्नुहोस्…"</string>
+    <string name="delete" msgid="6098684844021697789">"मेट्नुहोस्"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"URL को प्रतिलिप गर्नुहोस्"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"पाठ चयन गर्नुहोस्"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"पाठ चयनता"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"शब्दकोशमा थप्नुहोस्"</string>
+    <string name="deleteText" msgid="6979668428458199034">"मेट्नुहोस्"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"निवेश विधि"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"पाठ कार्यहरू"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"भण्डारण ठाउँ सकिँदै छ"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"सायद केही प्रणाली कार्यक्रमहरूले काम गर्दैनन्"</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलिरहेको छ"</string>
+    <string name="app_running_notification_text" msgid="4653586947747330058">"थप सूचनाको लागि छुनुहोस् वा अनुप्रयोग बन्द गर्नुहोस्।"</string>
+    <string name="ok" msgid="5970060430562524910">"ठिक छ"</string>
+    <string name="cancel" msgid="6442560571259935130">"रद्द गर्नुहोस्"</string>
+    <string name="yes" msgid="5362982303337969312">"ठिक छ"</string>
+    <string name="no" msgid="5141531044935541497">"रद्द गर्नुहोस्"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"सावधानी"</string>
+    <string name="loading" msgid="7933681260296021180">"लोड हुँदै..."</string>
+    <string name="capital_on" msgid="1544682755514494298">"चालु"</string>
+    <string name="capital_off" msgid="6815870386972805832">"बन्द"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"प्रयोग गरेर कारबाही पुरा गर्नुहोस्"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"यस कार्यको लागि पूर्वनिर्धारितबाट प्रयोग गर्नुहोस्।"</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"प्रणाली सेटिङहरूमा पूर्वनिर्धारितलाई हटाउनुहोस् &gt; अनुप्रयोगहरू &gt; डाउनलोड।"</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"एउटा कार्यको चयन गर्नुहोस्"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB उपकरणको लागि एउटा अनुप्रयोग छान्नुहोस्"</string>
+    <string name="noApplications" msgid="2991814273936504689">"कुनै पनि अनुप्रयोगहरूले यो कार्य गर्न सक्दैनन्।"</string>
+    <string name="aerr_title" msgid="1905800560317137752"></string>
+    <string name="aerr_application" msgid="932628488013092776">"दुर्भाग्यवश, <xliff:g id="APPLICATION">%1$s</xliff:g>ले रोकेको छ।"</string>
+    <string name="aerr_process" msgid="4507058997035697579">"दुर्भाग्यवश, प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> बन्द भयो।"</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g>ले कार्य गरिरहेको छैन।\n\nके तपाईँ यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="anr_activity_process" msgid="5776209883299089767">"गतिविधि <xliff:g id="ACTIVITY">%1$s</xliff:g> ले प्रतिक्रिया देखाइरहेको छैन।\n\nके तपाईं यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> जवाफ दिइरहेको छैन। के तपाईँ यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="anr_process" msgid="6513209874880517125">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g>ले कार्य गरिरहेको छैन।\n\nके तपाईँ यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="force_close" msgid="8346072094521265605">"ठिक छ"</string>
+    <string name="report" msgid="4060218260984795706">"रिपोर्ट गर्नुहोस्"</string>
+    <string name="wait" msgid="7147118217226317732">"प्रतीक्षा गर्नुहोस्"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"पृष्ठ गैर जिम्मेवारी भएको छ।\n\nके तपाईं यसलाई बन्द गर्न चाहनुहुन्छ?"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"अनुप्रयोग पुनः निर्देशीत"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> अहिले चलिरहेको छ।"</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> वास्तविक सुरुवात भएको थियो।"</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"स्केल"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"सधैँ देखाउनुहोस्"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"प्रणाली सेटिङहरूमा यसलाई पुनःसक्षम गराउनुहोस् &gt; अनुप्रयोगहरू &gt; डाउनलोड गरेको।"</string>
+    <string name="smv_application" msgid="3307209192155442829">"अनुप्रयोग <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ले यसको स्वयं-लागु गरिएको स्ट्रिटमोड नीति उलङ्घन गरेको छ।"</string>
+    <string name="smv_process" msgid="5120397012047462446">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> यसको आफ्नै कडामोड नीतिका कारण उल्लङ्घन गरिएको छ।"</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"एन्ड्रोइड अपग्रेड हुँदैछ…"</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"अनुप्रयोग अनुकुल हुँदै <xliff:g id="NUMBER_0">%1$d</xliff:g> को <xliff:g id="NUMBER_1">%2$d</xliff:g>।"</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"सुरुवात अनुप्रयोगहरू।"</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"बुट पुरा हुँदै।"</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> चलिरहेको छ"</string>
+    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"अनुप्रयोगमा स्विच गर्न छुनुहोस्"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"अनुप्रयोगहरू स्विच गर्ने हो?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"अर्को अनुप्रयोग पहिले नै चालु छ जुन तपाईंले एउटा नयाँ सुरु गर्नु अघि बन्द गर्नुपर्ने हुन्छ।"</string>
+    <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> मा फर्कनुहोस्"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"नयाँ अनुप्रयोग सुरु नगर्नुहोस्।"</string>
+    <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> सुरु गर्नुहोस्"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"बचत नगरी पुरानो अनुप्रयोग रोक्नुहोस्।"</string>
+    <string name="sendText" msgid="5209874571959469142">"पाठको लागि एउटा प्रकार्य छान्नुहोस्"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"बजाउने मात्रा"</string>
+    <string name="volume_music" msgid="5421651157138628171">"मिडियाको मात्रा"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"ब्लुटुथको माध्यमद्वारा बजाइदै छ।"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"शान्त रिङ्गटोन सेट"</string>
+    <string name="volume_call" msgid="3941680041282788711">"इन-कल भोल्युम"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"ब्लुटुथ भित्री-कल मात्रा"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"आलर्म मात्रा"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"सूचना मात्रा"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"मात्रा"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"ब्लुटुथ भोल्युम"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"घन्टिको आवाज मात्रा"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"कला मात्रा"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"मिडियाको मात्रा"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"सूचना भोल्युम"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"पूर्वनिर्धारित रिङटोन"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"पूर्वनिर्धारित रिङटोन (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"कुनै पनि होइन"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"घन्टीका स्वरहरू"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"अज्ञात रिङटोन"</string>
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"वाइ-फाइ नेटवर्क उपलब्ध छ"</item>
+    <item quantity="other" msgid="4192424489168397386">"वाइ-फाइ नेटवर्कहरू उपलब्ध"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"खुल्ला वाइ-फाइ नेटवर्क उपलब्ध छ"</item>
+    <item quantity="other" msgid="7915895323644292768">"खुल्ला वाइ-फाइ नेटवर्क उपलब्ध छ"</item>
+  </plurals>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"वाइ-फाइ नेटवर्कमा साइन गर्नुहोस्"</string>
+    <string name="network_available_sign_in" msgid="8495155593358054676">"नेटवर्कमा साइन गर्नुहोस्।"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"वाइ-फाइसँग जडान गर्न सकेन"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" कमजोर इन्टरनेट जडान छ।"</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"वाइ-फाइ प्रत्यक्ष"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"वाइ-फाइ सिधा सुरु गर्नुहोस्। यसले वाइ-फाइ ग्राहक/हट्स्पटलाई बन्द गराउने छ।"</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"वाइ-फाइ सिधा सुरु हुन सकेन।"</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"वाइ-फाइ प्रत्यक्ष खुल्ला छ"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"सेटिङहरूको लागि छुनुहोस्"</string>
+    <string name="accept" msgid="1645267259272829559">"स्वीकार्नुहोस्"</string>
+    <string name="decline" msgid="2112225451706137894">"अस्वीकार गर्नुहोस्"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"निमन्त्रणा पठाइएको"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"जडानमा निमन्त्रणा"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"बाट:"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"प्रापक:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"आवश्यक PIN टाइप गर्नुहोस्:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"यो <xliff:g id="DEVICE_NAME">%1$s</xliff:g>सँग जोडिएको बेला ट्याब्लेट अस्थायी रूपमा वाइ-फाइबाट विच्छेद गरिने छ।"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"जब यो <xliff:g id="DEVICE_NAME">%1$s</xliff:g> सँग जडित हुन्छ, फोन अस्थायी रूपमा वाइ-फाइबाट विच्छेद हुने छ"</string>
+    <string name="select_character" msgid="3365550120617701745">"अक्षरहरू प्रवेश गराउनुहोस्"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"SMS सन्देशहरू पठाइँदै"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ले धरै संख्यामा SMS सन्देशहरू पठाउँदैछ। के तपाईँ यस अनुप्रयोगलाई सन्देशहरू पठाउन सुचारु गर्न अनुमति दिन चाहनु हुन्छ?"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"अनुमति दिनुहोस्"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"अस्वीकार गर्नुहोस्"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; के तपाईँ सन्देश पठाउन चाहुनु हुन्छ &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
+    <string name="sms_short_code_details" msgid="3492025719868078457">"यसले "<font fgcolor="#ffffb060">" शुल्क लगाउन सक्छ"</font>" तपाईँको मोबाइल खातामा।"</string>
+    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"यसले तपाईंको मोबाइल खातामा चार्जहरू उत्पन्न गर्दछ।"</font></string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"पठाउनुहोस्"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"रद्द गर्नुहोस्"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"मेरो छनौट याद राख्नुहोस्"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"तपाईँ यसलाई पछि सेटिङहरूमा बदल्न सक्नु हुन्छ &gt; अनुप्रयोगहरू"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"सधैँ अनुमति दिनुहोस्"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"कहिल्यै अनुमति नदिनुहोस्"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM कार्ड हटाइयो"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"एउटा मान्य SIM कार्ड राखेर पुनःस्टार्ट नगरेसम्म मोबाइल नेटवर्क उपलब्ध हुने छैन।"</string>
+    <string name="sim_done_button" msgid="827949989369963775">"भयो"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SIM कार्ड थप गरियो"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"मोबाइल नेटवर्क पहुँच गर्न तपाईँको उपकरण पुनःस्टार्ट गर्नुहोस्।"</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"पुनःस्टार्ट गर्नुहोस्"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"समय मिलाउनुहोस्"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"मिति मिलाउनुहोस्"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"सेट गर्नुहोस्"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"भयो"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"नयाँ: "</font></string>
+    <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g>द्वारा प्रदान गरिएको।"</string>
+    <string name="no_permissions" msgid="7283357728219338112">"कुनै अनुमति आवश्यक छैन"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"सायद तपाईँलाई पैसा पर्न सक्छ।"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB ठूलो भण्डारण"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"USB जोडिएको छ"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"तपाईं आफ्नो कम्प्युटरमा USB मार्फत जडान हुनुभयो। तलको बटन टच गर्नुहोस् यदि तपाईं आफ्नो कम्प्युटर र एन्ड्रोइडको USB भण्डारण बीच फाइलहरू प्रतिलिपि गर्न चाहनुहुन्छ भने।"</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"तपाईं आफ्नो कम्प्युटरमा USB मार्फत जडान हुनुभयो। तलको बटन टच गर्नुहोस् यदि तपाईं आफ्नो कम्प्युटर र एन्ड्रोइडको SD कार्ड बीच फाइलहरू प्रतिलिपि गर्न चाहनुहुन्छ भने।"</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"USB भण्डारण चालु गर्नुहोस्"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"USB आम भण्डारणको लागि तपाईँको USB भण्डारण प्रयोग गर्दा एउटा समस्या भयो।"</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"USB आम भण्डारणको लागि तपाईँको SD कार्ड प्रयोग गर्दा एउटा समस्या भयो।"</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB जोडिएको छ"</string>
+    <string name="usb_storage_notification_message" msgid="939822783828183763">"तपाईँको कम्प्युटरबाट वा तिर फाइलहरू प्रतिलिप गर्न छुनुहोस्।"</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB भण्डारण बन्द गर्नुहोस्"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB भण्डारण बन्द गर्न छुनुहोस्।"</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB भण्डारण प्रयोगमा छ"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB भण्डारण बन्द हुनुभन्दा पहीले तपाईँको कम्प्युटरबाट तपाईँको एन्ड्रोइड USB भण्डारण अनमाउन्ट (\"झिक्नुहोस्\") गर्नुहोस् ।"</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"USB भण्डारण बन्द गर्नुअघि तपाईँको कम्प्युटरबाट तपाईँको एन्ड्रोइडको SD कार्ड अनमाउन्ट (\"निकालेको\") गर्नुहोस्।"</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB भण्डारण बन्द गर्नुहोस्"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"USB भण्डारण बन्द गर्दा एउटा समस्या भयो। तपाईँले USB होस्ट अनमाउन्ट गर्नु भएको जाँच गर्नुहोस्, त्यसपछि फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB भण्डारण खोल्नुहोस्"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"यदि तपाईँले USB भण्डारण खोल्नु भयो भने तपाईँले प्रयोग गरिरहनु भएका केही अनुप्रयोगहरू रोकिने छन् र तपाईँले USB भण्डारण बन्द नगरेसम्म अनुपलब्ध हुन सक्छन्।"</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"USB संचालन असफल"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"ठिक छ"</string>
+    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"मिडिया उपकरणको रूपमा जडित"</string>
+    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"क्यामेराको रूपमा जडान भएको"</string>
+    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"एउटा स्थापनकर्ताको रूपमा जोडिएको छ"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB सहायकमा जोडिएको छ"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"अन्य USB विकल्पहरूको लागि टच गर्नुहोस्।"</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB भण्डारणलाई फर्म्याट  गर्न चाहनु हुन्छ?"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD कार्ड फर्म्याट गर्ने?"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"तपाईंको USBमा सङ्ग्रह भएका सबै फाइलहरू मेटिने छन्। यो कार्य उल्टाउन सकिँदैन!"</string>
+    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"तपाईँको कार्डमा भएका सबै डेटाहरू हराउने छन्।"</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"फर्म्याट गर्नुहोस्"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने जडित छ"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डिबग गर्ने असक्षम पार्न छुनुहोस्।"</string>
+    <string name="select_input_method" msgid="4653387336791222978">"निवेश विधि छान्नुहोस्"</string>
+    <string name="configure_input_methods" msgid="9091652157722495116">"इनपुट विधिहरू सेटअप गर्नुहोस्"</string>
+    <string name="use_physical_keyboard" msgid="6203112478095117625">"भौतिक किबोर्ड"</string>
+    <string name="hardware" msgid="7517821086888990278">"हार्डवेयर"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"किबोर्ड रूपरेखा चयन गर्नुहोस्"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"किबोर्ड रूपरेखा चयन गर्न टच गर्नुहोस्।"</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"उम्मेदवार"</u></string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB भण्डारणको तयारी हुँदै"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD कार्ड तयार गर्दै"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"त्रुटिहरूको लागि जाँच गर्दै।"</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"रिक्त USB भण्डारण"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"खाली SD कार्ड"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB भण्डारण खाली वा असमर्थित फाइल प्रणाली छ।"</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD कार्ड खाली छ अथवा समर्थन नगरिएको फाइल प्रणाली छ।"</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"बिग्रिएको USB भण्डारण"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"बिग्रिएको SD कार्ड"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB भण्डारण बिग्रिएको छ। यसलाई पुनःफर्म्याट गर्न प्रयास गर्नुहोस।"</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD कार्ड बिग्रिएको छ। यसलाई पुनःफर्म्याट गर्न प्रयास गर्नुहोस।"</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB भण्डारण अप्रत्याशित रूपमा हटाइएको छ"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD कार्ड अनपेक्षित रूपमा हटाइयो"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"डेटा गुम्नबाट रोक्नको लागि USB भण्डारण हटाउनुअघि अनमाउन्ट गर्नुहोस्।"</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"डेटा नाश हुनबाट बच्न SD कार्डलाई निकाल्नुभन्दा पहिला अनमाउन्ट गर्नुहोस्।"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"USB भण्डारण हटाउनको लागि सुरक्षित छ"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD कार्ड हटाउन सुरक्षित छ।"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"तपाईं सुरक्षित रूपमा USB भण्डारण हटाउन सक्नुहुने छ।"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"तपाईँ SD कार्ड सुरक्षित रूपमा हटाउन सक्नु हुन्छ।"</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"USB भण्डारण हटाइयो"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"हटाइएको SD कार्ड"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USD भण्डारण हटाइयो। नयाँ मिडिया घुसाउनुहोस्।"</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD कार्ड हटाइयो। एउटा नयाँ छिराउनुहोस्।"</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"कुनै मिल्ने गतिविधि पाइएन।"</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"खण्ड प्रयोग तथ्याङ्कहरू अपडेट गर्नुहोस्"</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"जम्मा गरिएको घटक उपयोग तथ्याङ्कहरूलाई परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूबाट प्रयोगको लागि होइन।"</string>
+    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"सामाग्रीको नकल गर्नुहोस्"</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"अनुप्रयोगलाई सामग्री प्रतिलिपि गर्न पूर्वनिर्धारित कन्टेनर सेवा आह्वान गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूद्वाराको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_route_media_output" msgid="1642024455750414694">"मिडिया परिणाम दिशानिर्देश गर्नुहोस्"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"मिडिया परिणामलाई अन्य बाहिरी उपकरणहरूसँग लैजानको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"किगार्ड सुरक्षित भण्डारण पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"अनुप्रयोगलाई किगार्ड सुरक्षित भण्डारण पहुँच गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_control_keyguard" msgid="172195184207828387">"किगार्ड प्रदर्शन गर्ने र लुकाउने नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"अनुप्रयोगलाई किगार्ड नियन्त्रण गर्न अनुमति दिन्छ।"</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"जुम नियन्त्रणको लागि दुई चोटि टच गर्नुहोस्"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"विजेट थप गर्न सकिँदैन।"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"जानुहोस्"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"खोज्नुहोस्"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"पठाउनुहोस्"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"अर्को"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"भयो"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"अघिल्लो"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"चलाउनुहोस्"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">\n"नम्बर डायल गर्नुहोस् <xliff:g id="NUMBER">%s</xliff:g> प्रयोग गरेर"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"सम्पर्क सिर्जना गर्नुहोस्\nयो <xliff:g id="NUMBER">%s</xliff:g> प्रयोग गरेर"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"निम्न एउटा वा धेरै अनुप्रयोगहरूले तपाईँको खातामा पहुँचको लागि अनुमति अहिले र भविष्यमा अनुरोध गर्छन्।"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"के तपाईँ यस अनुरोधलाई अनुमति दिन चाहनुहुन्छ?"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"अनुरोध पहुँच गर्नुहोस्"</string>
+    <string name="allow" msgid="7225948811296386551">"अनुमति दिनुहोस्"</string>
+    <string name="deny" msgid="2081879885755434506">"अस्वीकार गर्नुहोस्"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"अनुरोध गरिएको अनुमति"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">\n"खाता <xliff:g id="ACCOUNT">%s</xliff:g>को लागि अनुरोध गरिएको अनुमति।"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"इनपुट विधि"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"सिङ्क गर्नुहोस्"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"उपलब्धता"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"वालपेपर"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"वालपेपर परिवर्तन गर्नुहोस्"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"सूचना सुन्नेवाला"</string>
+    <string name="vpn_title" msgid="19615213552042827">"VPN सक्रिय भयो"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"VPN <xliff:g id="APP">%s</xliff:g>द्वारा सक्रिय गरिएको हो"</string>
+    <string name="vpn_text" msgid="3011306607126450322">"नेटवर्क प्रबन्ध गर्न छुनुहोस्।"</string>
+    <string name="vpn_text_long" msgid="6407351006249174473">"<xliff:g id="SESSION">%s</xliff:g>सँग जोडिएको छ। नेटवर्क व्यवस्थापन गर्नको लागि छुनुहोस्।"</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"VPN जडान सधै जोड्दै…"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"सधैँ खुल्ला हुने VPN जोडिएको"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"सधैँ भरि VPN त्रुटिमा"</string>
+    <string name="vpn_lockdown_config" msgid="6415899150671537970">"कन्फिगर गर्न टच गर्नुहोस्"</string>
+    <string name="upload_file" msgid="2897957172366730416">"फाइल छान्नुहोस्"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"कुनै फाइल छानिएको छैन"</string>
+    <string name="reset" msgid="2448168080964209908">"पुनःसेट गर्नु"</string>
+    <string name="submit" msgid="1602335572089911941">"पेस गर्नुहोस्"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"कार मोड सक्षम पारियो।"</string>
+    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"कार मोडबाट निस्कन छुनुहोस्।"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"टेथर गर्ने वा हटस्पट सक्रिय"</string>
+    <string name="tethered_notification_message" msgid="6857031760103062982">"सेटअप गर्न टच गर्नुहोस्।"</string>
+    <string name="back_button_label" msgid="2300470004503343439">"पछाडि"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"अर्को"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"छोड्नुहोस्"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"उच्च मोबाइल डेटा प्रयोग"</string>
+    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"मोबाइल डेटा प्रयोगको बारेमा अरू थप जान्नको लागि  छुनुहोस्।"</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"मोबाइल डेटा सीमा पार भयो"</string>
+    <string name="throttled_notification_message" msgid="5443457321354907181">"मोबाइल डेटा प्रयोग बारे थप सिक्न छुनुहोस्।"</string>
+    <string name="no_matches" msgid="8129421908915840737">"कुनै मिलेन"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"पृष्ठमा फेला पार्नुहोस्"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"१ मेल"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="TOTAL">%d</xliff:g> को <xliff:g id="INDEX">%d</xliff:g>"</item>
+  </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"भयो"</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB  भण्डारण अनमाउन्ट गर्दै..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD कार्ड अनमाउन्ट गर्दै…"</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB भण्डारण मेटाउँदै…"</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD कार्ड मेटाउँदै…"</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB भण्डारणलाई मेटाउन सकेन।"</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"SD कार्ड मेटाउन सकेन"</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"SD कार्ड अनमाउन्ट हुनुभन्दा पहिला निकालियो।"</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"अहिले USB भण्डारण जाँच भइरहेको छ।"</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"SD कार्ड अहिले परीक्षण भइरहेको छ।"</string>
+    <string name="media_removed" msgid="7001526905057952097">"SD कार्ड हटाइयो।"</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"SD कार्ड कम्प्युटरद्वारा अहिले प्रयोगमा छ।"</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"SD कार्ड अहिले कम्प्युटरद्वारा प्रयोगमा छ।"</string>
+    <string name="media_unknown_state" msgid="729192782197290385">"बाह्य मिडिया अज्ञात अवस्थामा।"</string>
+    <string name="share" msgid="1778686618230011964">"साझेदारी गर्नुहोस्"</string>
+    <string name="find" msgid="4808270900322985960">"पत्ता लगाउनुहोस्"</string>
+    <string name="websearch" msgid="4337157977400211589">"वेब खोजी"</string>
+    <string name="find_next" msgid="5742124618942193978">"अर्को भेटाउनुहोस्"</string>
+    <string name="find_previous" msgid="2196723669388360506">"अघिल्लो फेला पार्नुहोस्"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"<xliff:g id="NAME">%s</xliff:g> बाट स्थान अनुरोध"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"स्थान अनुरोध"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) द्वारा अनुरोध गरिएको"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"हो"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"होइन"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"सीमा नाघेकाहरू मेट्नुहोस्"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"त्यहाँ <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> मेटाइएका आइटमहरू छन् <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>को लागि, खाता <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>। तपाईं के गर्न चाहनु हुन्छ?"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"वस्तुहरू मेट्नुहोस्"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"मेटिएकाहरू पूर्ववत बनाउनुहोस्।"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"अहिलेको लागि केही नगर्नुहोस्"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"एउटा खाता छान्‍नुहोस्"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"एउटा खाता थप्नुहोस्"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"खाता थप गर्नुहोस्"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"बढाउनुहोस्"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"घटाउनुहोस्"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g>छुनुहोस् र समाउनुहोस्।"</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"बढाउन माथि र घटाउन तल सार्नुहोस्।"</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"मिनेट बढाउनुहोस्"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"मिनेट घटाउनुहोस्"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"घन्टा बढाउनुहोस्"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"घन्टा घटाउनुहोस्"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"PM सेट गर्नुहोस्"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"AM सेट गर्नुहोस्"</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"महिना बढाउनुहोस्"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"महिना घटाउनुहो्स्"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"दिन बढाउनुहोस्"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"दिन घटाउनुहोस्"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"वर्ष बढाउनुहोस्"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"वर्ष घटाउनुहोस्"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"रद्द गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"मेट्नुहोस्"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"भयो"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"मोड परिवर्तन गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"प्रविष्टि गर्नुहोस्"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"एउटा अनुप्रयोग छान्नुहोस्"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"साझेदारी गर्नुहोस्..."</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सँग साझेदारी गर्नुहोस्"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"धिसार्ने ह्यान्डल। छुनुहोस् &amp; समाउनुहोस्।"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि माथि धिसार्नुहोस्"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> को लागि तल स्लाइड गर्नुहोस्।"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि बायाँ।"</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि दायाँ।"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"अनलक गर्नुहोस्"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"क्यामेरा"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"मौन"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"आवाज चालू"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"खोज्नुहोस्"</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"खोल्नलाइ हुत्त्याउनुहोस्।"</string>
+    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"बोलिएको पासवर्ड कुञ्जीहरू सुन्नको लागि हेडसेट प्लग इन गर्नुहोस्।"</string>
+    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"डट।"</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"गृह खोज्नुहोस्"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"माथि खोज्नुहोस्"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"थप विकल्पहरू"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"आन्तरिक भण्डारण"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD कार्ड"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB भण्डारण"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"सम्पादन गर्नुहोस्"</string>
+    <string name="data_usage_warning_title" msgid="1955638862122232342">"डेटा प्रयोग चेतावनी"</string>
+    <string name="data_usage_warning_body" msgid="2814673551471969954">"उपयोग र सेटिङहरू हेर्न छुनुहोस्।"</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G डेटा असक्षम गरिएको"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G डेटा असक्षम गरियो"</string>
+    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"मोबाइल डेटा असक्षम पारियो।"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"वाइ-फाइ डेटा असक्षम गरियो"</string>
+    <string name="data_usage_limit_body" msgid="3317964706973601386">"सक्षम पार्न छुनुहोस्।"</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G डेटा सीमा भन्दा पार भएको छ"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G डेटा SIMा नाघ्यो"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"मोवाइल डेटा SIMा नाघ्यो"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"वाइ-फाइ डेटा SIMा नाघ्यो"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> उल्लेखित सीमा भन्दा बढी छ।"</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"पृष्ठभूमिका डेटा प्रतिबन्धित गरिएको छ"</string>
+    <string name="data_usage_restricted_body" msgid="6741521330997452990">"अवरोध हटाउन छुनुहोस्।"</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"सुरक्षा प्रमाणपत्र"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"प्रमाणपत्र मान्य छ।"</string>
+    <string name="issued_to" msgid="454239480274921032">"द्वारा जारी गरिएको:"</string>
+    <string name="common_name" msgid="2233209299434172646">"साधारण नाम:"</string>
+    <string name="org_name" msgid="6973561190762085236">"संगठन:"</string>
+    <string name="org_unit" msgid="7265981890422070383">"संगठनात्मक एकाइ:"</string>
+    <string name="issued_by" msgid="2647584988057481566">"द्वारा जारी गरिएको:"</string>
+    <string name="validity_period" msgid="8818886137545983110">"मान्यता:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"जारी गरिएको:"</string>
+    <string name="expires_on" msgid="3676242949915959821">"अवधि समाप्त:"</string>
+    <string name="serial_number" msgid="758814067660862493">"क्रम संख्या:"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"औँठाछापहरू:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-२५६ औंठाछाप:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 औंलाछाप:"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"सबै हेर्नुहोस्"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"गतिविधि छनौट गर्नुहोस्"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"साझेदारी गर्नुहोस्..."</string>
+    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
+    <string name="sending" msgid="3245653681008218030">"पठाउँदै..."</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउजर सुरु गर्ने हो?"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"कल स्वीकार गर्नुहुन्छ?"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"सधैँ"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"एउटा मात्र"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"ट्याब्लेट"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"फोन"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"हेडफोनहरू"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"डक स्पिकरहरू"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"प्रणाली"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ब्लुटुथ अडियो"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"ताररहित प्रदर्शन"</string>
+    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"भयो"</string>
+    <string name="media_route_button_content_description" msgid="5758553567065145276">"मिडियाको उत्पादन"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"स्क्यान गर्दै ..."</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"जडान हुँदै..."</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"उपलब्ध"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"उपलब्ध छैन"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"प्रयोगमा छ"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"पूर्व-निर्मित स्क्रिन"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI स्क्रिन"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"आवरण #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", सुरक्षित"</string>
+    <string name="wifi_display_notification_title" msgid="2223050649240326557">"ताररहित प्रदर्शन जोडिएको छ"</string>
+    <string name="wifi_display_notification_message" msgid="4498802012464170685">"अर्को उपकरणमा यो स्क्रिनले देखाइरहेको छ"</string>
+    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"विच्छेदन गर्नुहोस्"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"आपतकालीन कल"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ढाँचा बिर्सनु भयो"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत ढाँचा"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"गलत पासवर्ड"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"गलत PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%1$d</xliff:g>सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"आफ्नो ढाँचा कोर्नुहोस्"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्।  विवरणको लागि वाहकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"इच्छित PIN कोड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"मनपर्दो PIN कोड निश्चित गर्नुहोस्"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलक गर्दै…"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड।"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"४ देखि ८ वाट नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK कोड ८ वटा नम्बर वा सो भन्दा बढी हुनुपर्छ।"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"PUK कोड पुन:प्रदान गर्नुहोस्। धेरै पुन:प्रयासहरूले SIMलाई स्थायी रूपमा निष्क्रिय गरिदिने छ।"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN कोडहरू मेल खाएन"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"निकै धेरै ढाँचा कोसिसहरू"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"अनलक गर्नको लागि, तपाईँको Google खाताको साथ साइन इन गर्नुहोस्।"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"प्रयोगकर्ता नाम (इमेल)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"पासवर्ड"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन गर्नुहोस्"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य प्रयोगकर्तानाम वा पासवर्ड।"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"के तपाईँले उपयोगकर्ता नाम वा पासवर्ड बिर्सनुभयो?\n"<b>"google.com/accounts/recovery"</b>" मा जानुहोस्।"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"खाता जाँच हुँदै…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"तपाईँले तपाईँक पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> पटक गलत टाइप गर्नुभएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"तपाईँले ट्याब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल प्रयासहरू, ट्याब्लेट पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"तपाईँले गलतसँग फोनलाई अनलक गर्न <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भयो। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल कोसिसहरू, फोनलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"तपाईँले ट्यब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER">%d</xliff:g> पटक प्रयास गर्नु भएको छ। अब ट्याब्लेटलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"तपाईंले गलत तरिकाले फोन <xliff:g id="NUMBER">%d</xliff:g> पटक अनलक गर्ने प्रयत्न गर्नुभयो। अब फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"तपाईंले गलत तरिकाले आफ्नो अनलक ढाँचा <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोर्नुभयो। <xliff:g id="NUMBER_1">%d</xliff:g> विफल प्रयत्नहरू पछि, तपाईंलाई आफ्नो ट्याब्लेट इमेल खाता प्रयोग गरेर अनलक गर्न सोधिने छ।\n\n फेरि प्रयास गर्नुहोस् <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डहरूमा।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"तपाईँले आफ्नो अनलक ढाँचा गलत रूपमा <xliff:g id="NUMBER_0">%d</xliff:g> पटक तान्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> धेरै असफल प्रयासहरूपछि, तपाईँलाई एउटा इमेल खाताको प्रयोग गरेर तपाईँको फोन अनलक गर्न सोधिने छ।\n\n फेरि <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा प्रयास गर्नुहोस्।"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"हटाउनुहोस्"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"आवाज सल्लाह दिएको तहभन्दा माथि  बढाउने हो?\nठूलो आवाजमा सुन्दा लामो समयको लागि तपाईँको सुन्ने शक्तीलाई खत्तम पार्न सक्छ।"</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"उपलब्धता सक्षम पार्न दुईवटा औंलाहरूले थिचिरहनुहोस्।"</string>
+    <string name="accessibility_enabled" msgid="1381972048564547685">"पहुँच सक्षम गरिएको।"</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"पहुँचयोग्यता रद्द गरियो।"</string>
+    <string name="user_switched" msgid="3768006783166984410">"अहिलेको प्रयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>।"</string>
+    <string name="owner_name" msgid="2716755460376028154">"मालिक"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"त्रुटि"</string>
+    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"प्रतिबन्धित प्रोफाइलहरूको लागि यस अनुप्रयोगले खाताहरू समर्थन गर्दैन"</string>
+    <string name="app_not_found" msgid="3429141853498927379">"यस कार्य सम्हालने कुनै अनुप्रयोग भेटिएन"</string>
+    <string name="revoke" msgid="5404479185228271586">"रद्द गर्नुहोस्"</string>
+    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
+    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
+    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
+    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
+    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
+    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
+    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
+    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
+    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
+    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
+    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
+    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
+    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
+    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
+    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
+    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"ISO B4"</string>
+    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
+    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
+    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
+    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
+    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
+    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
+    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
+    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
+    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
+    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
+    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
+    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
+    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
+    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
+    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
+    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
+    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
+    <string name="mediaSize_na_letter" msgid="4191805615829472953">"पत्र"</string>
+    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"सरकारी पत्र"</string>
+    <string name="mediaSize_na_legal" msgid="6697982988283823150">"कानूनी"</string>
+    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"Junior Legal"</string>
+    <string name="mediaSize_na_ledger" msgid="281871464896601236">"Ledger"</string>
+    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"Tabloid"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"रद्द गरियो"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"सामाग्री लेखनमा त्रुटि"</string>
+    <string name="reason_unknown" msgid="6048913880184628119">"अज्ञात"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"प्रशासक PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="restr_pin_incorrect" msgid="8571512003955077924">"गलत"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"वर्तमान PIN"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"नयाँ PIN"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"नयाँ PIN निश्चित गर्नुहोस्"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"प्रतिबन्धहरूलाई परिवर्तन गर्नको लागि एउटा PIN बनाउनुहोस्"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN हरू मेल खाएनन्। पुनः प्रयास गर्नुहोस्।"</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN अति छोटो भयो। कम्तीमा ४ अङ्क हुन आवश्यक छ।"</string>
+  <plurals name="restr_pin_countdown">
+    <item quantity="one" msgid="311050995198548675">"१ सेकेन्ड पछि पुनः प्रयास गर्नुहोस्।"</item>
+    <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा पुनः प्रयास गर्नुहोस्"</item>
+  </plurals>
+    <string name="restr_pin_try_later" msgid="973144472490532377">"पछि पुनः प्रयास गर्नुहोस्"</string>
+    <string name="transient_navigation_confirmation" msgid="4907844043611123426">"पट्टि देखिने बनाउन स्क्रिनको छेउमा स्वाइप गर्नुहोस्"</string>
+    <string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"प्रणाली पट्टि देखिने बनाउन स्क्रिनको छेउबाट स्वाइप गर्नुहोस्"</string>
+</resources>
diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml
new file mode 100644
index 0000000..b6e4fc3
--- /dev/null
+++ b/core/res/res/values-ne/strings.xml
@@ -0,0 +1,1588 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B"</string>
+    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="4638956954852782576">"&lt;बिना शीर्षक&gt;"</string>
+    <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(कुनै फोन नम्बर छैन)"</string>
+    <string name="unknownName" msgid="2277556546742746522">"(अज्ञात)"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"भ्वाइस मेल"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN१"</string>
+    <string name="mmiError" msgid="5154499457739052907">"जडान समस्या वा अमान्य MMI कोड।"</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"अपरेशन निश्चित डायल नम्बरहरूको लागि मात्र प्रतिबन्धित छ।"</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"सेवा सक्षम पारियो।"</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"निम्न उल्लेखितको लागि सेवा सक्षम पारियो:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"सेवा असक्षम पारिएको छ।"</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"दर्ता सफल भयो।"</string>
+    <string name="serviceErased" msgid="1288584695297200972">"मेटाइ सफल थियो।"</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"गलत पासवर्ड।"</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI पुरा भयो।"</string>
+    <string name="badPin" msgid="9015277645546710014">"तपाईंले टाइप गर्नुभएको पुरानो PIN सही छैन।"</string>
+    <string name="badPuk" msgid="5487257647081132201">"तपाईंले टाइप गर्नुभएको PUK सही छैन।"</string>
+    <string name="mismatchPin" msgid="609379054496863419">"तपाईंले टाइप गर्नुभएको PIN मेल खाँदैन।"</string>
+    <string name="invalidPin" msgid="3850018445187475377">"४ देखि ८ वटा नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"८ वटा नम्बरहरू वा सो भन्दा लामो एउटा PUK टाइप गर्नुहोस्।"</string>
+    <string name="needPuk" msgid="919668385956251611">"तपाईंको SIM कार्ड PUK-लक छ। यसलाई अनलक गर्न PUK कोड टाइप गर्नुहोस्।"</string>
+    <string name="needPuk2" msgid="4526033371987193070">"SIM कार्ड अनलक गर्न PUK2 टाइप गर्नुहोस्।"</string>
+    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
+    <string name="meid" msgid="4841221237681254195">"MEID"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"आगमन कलर ID"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"बाहिरिने कलर ID"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"कल अगाडि बढाउँदै"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"कल प्रतिक्षा"</string>
+    <string name="BaMmi" msgid="455193067926770581">"कल ब्यारिङ"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"पासवर्ड परिवर्तन"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"PIN परिवर्तन"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"प्रस्तुत नम्बरमा कल गर्दै"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"कल गर्ने अंक रोकेको छ।"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"कल गर्ने तिन तरिका"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"नचाहिएका रिसउठ्दा कलहरूको अस्वीकार"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"कलिङ नम्बर प्रदान गर्ने"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"बाधा नगर्नुहोस्"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"सीमति गर्न पूर्वनिर्धारित कलर ID, अर्को कल: सीमति गरिएको"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"कलर ID पूर्वनिर्धारितको लागि रोकावट छ। अर्को कल: रोकावट छैन"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"कलर ID पूर्वनिर्धारितदेखि प्रतिबन्धित छैन। अर्को कल: प्रतिबन्धित छ"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"कलर ID पूर्वनिर्धारितको लागि रोकावट छैन। अर्को कल: रोकावट छैन"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"सेवाको व्यवस्था छैन।"</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"तपाईं कलर ID सेटिङ परिवर्तन गर्न सक्नुहुन्न।"</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"प्रतिबन्धित पहुँच परिवर्तन भएको छ"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"डेटा सेवा रोकिएको छ।"</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"आपतकालीन सेवा रोकिएको छ।"</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"भ्वाइस सेवा ब्लक भएको छ।"</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"सबै आवाज सेवाहरू बन्द छन्।"</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS सेवा रोकिएको छ।"</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"भ्वाइस/डेटा सेवाहरू रोकिएका छन्।"</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"आवाज/SMS सेवाहरू बन्द छन्।"</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"सबै भ्वाइस/डेटा/SMS सेवाहरू ब्लक भएका छन्।"</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"आवाज"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"डेटा"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"फ्याक्स"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"Async"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"सिङ्क गर्नुहोस्"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"प्याकेट"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"रोमिङ सूचक खुला"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"रोमिङ सूचक बन्द"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"रोमिङ सूचक फ्ल्यास गर्दै"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"छिमेकबाट बाहिर"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"बिल्डिङको बाहिर"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"रोमिङ - उपयुक्त प्रणाली"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"रोमिङ - उपलब्ध प्रणाली"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"रोमिङ - एलियन्सर पार्टनर"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"रोमिङ - प्रिमियम पार्टनर"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"रोमिङ - पूर्ण सेवा कार्यक्षमता अवस्था"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"रोमिङ - आङ्शिक सेवा प्रकार्यता"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"रोमिङ ध्वजा चालु छ"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"रोमिङ ब्यानर बन्द छ"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"सेवाको खोजी गर्दै…"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अगाडि पठाइएको छैन"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g> पछि <xliff:g id="TIME_DELAY">{2}</xliff:g> सेकेन्ड"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अगाडि बढाइएको छैन"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: अगाडि बढाइएको छैन"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"विशेषता कोड पुरा भयो।"</string>
+    <string name="fcError" msgid="3327560126588500777">"जडान समस्या वा अमान्य सुविधा कोड।"</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"ठिक छ"</string>
+    <string name="httpError" msgid="7956392511146698522">"एउटा नेटवर्क त्रुटि थियो।"</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"URL भेटाउन सकेन।"</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"साइटको आधिकारिकता योजना समर्थित छैन।"</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"प्रमाणीकरण गर्न सकेन।"</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"प्रोक्सी सर्भरको माध्यमद्वारा प्रमाणिकरण असफल भएको छ।"</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"सर्भरसँग जोड्न सकेन।"</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"सर्भरसँग संचार गर्न सकेन। फेरि पछि कोसिस गर्नुहोस्।"</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"सर्भर संगको सम्पर्क प्रक्रिया समय सकियो।"</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"पृष्टमा धेरै सर्भरहरूतिर पुनः निर्देशनहरू छन्।"</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"प्रोटोकल समर्थित छैन।"</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"एउटा सुरक्षित जडान स्थापना गर्न सकेन।"</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"पृष्ठ खोल्न सकिँदैन किनभने URL अमान्य छ।"</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"फाइल भेटाउन सकेन।"</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"अनुरोध गरिएको फाइल भेटाउन सकेन।"</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"धेरै नै अनुरोधहरू प्रक्रियामा छन्। पछि फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="notification_title" msgid="8967710025036163822">"<xliff:g id="ACCOUNT">%1$s</xliff:g>को लागि साइन इन त्रुटि"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"सिङक गर्नुहोस्"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"सिङ्क गर्नुहोस्"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"अति धेरै <xliff:g id="CONTENT_TYPE">%s</xliff:g> मेट्नुहोस्।"</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"ट्याब्लेट भण्डारण खाली छैन! ठाउँ खाली गर्नको लागि केही फाइलहरू मेटाउनुहोस्।"</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"फोन भण्डारण भरिएको छ! ठाउँ खाली गर्नको लागि केही फाइलहरू मेटाउनुहोस्।"</string>
+    <string name="me" msgid="6545696007631404292">"मलाई"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"ट्याब्लेट विकल्पहरू"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"फोन विकल्पहरू"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"मौन मोड"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"वायरलेस अन गर्नुहोस्"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"ताररहित बन्द गर्नुहोस्"</string>
+    <string name="screen_lock" msgid="799094655496098153">"स्क्रिन लक गर्नुहोस्"</string>
+    <string name="power_off" msgid="4266614107412865048">"पावर बन्द"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"घन्टी बन्द भयो"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"घन्टी कम्पन गर्छ"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"घन्टि चालु छ"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"बन्द गर्दै..."</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"तपाईँको ट्याब्लेट बन्द हुने छ।"</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"तपाईँको फोन बन्द हुने छ।"</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"के तपाईं बन्द गर्न चाहनुहुन्छ?"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"सुरक्षित मोडमा पुनःबुट गर्नुहोस्"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"सुरक्षित मोडमा तपाईँ पुनःबुट गर्न चाहनु हुन्छ? तपाईँले स्थापना गरेका सबै तेस्रो पक्षका अनुप्रयोगहरूलाई असक्षम गराउने छ।"</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"नयाँ"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"कुनै नयाँ अनुप्रयोगहरू छैनन्।"</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"ट्याब्लेट विकल्पहरू"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"फोन विकल्पहरू"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"स्क्रिन बन्द"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"शक्ति बन्द"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"बग रिपोर्ट"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"बग रिपोर्ट लिनुहोस्"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"एउटा इमेल सन्देशको रूपमा पठाउनलाई यसले तपाईँको हालैको उपकरणको अवस्थाको बारेमा सूचना जम्मा गर्ने छ। बग रिपोर्ट सुरु गरेदेखि पठाउन तयार नभएसम्म यसले केही समय लिन्छ; कृपया धैर्य गर्नुहोस्।"</string>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"मौन मोड"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"आवाज बन्द छ"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"ध्वनि खुल्ला छ"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"हवाइजहाज मोड"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"उडान मोड खुला छ"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"हवाइजहाज मोड बन्द छ"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"९९९+"</string>
+    <string name="safeMode" msgid="2788228061547930246">"सुरक्षित मोड"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"एन्ड्रोइड प्रणाली"</string>
+    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"तपाईँले तिर्नु पर्ने सेवाहरू"</string>
+    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"तपाईँलाई महँगो पर्न सक्ने कामहरू गर्नुहोस्।"</string>
+    <string name="permgrouplab_messages" msgid="7521249148445456662">"तपाईंका सन्देशहरू"</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"तपाईँका SMS, इमेल र अन्य सन्देशहरू पढ्नुहोस् र लेख्नुहोस्।"</string>
+    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"तपाईँको निजी सूचना"</string>
+    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"तपाईँको सम्पर्क कार्डमा भण्डारण भएका तपाईँको बारेको जानकारीमा सिधा पहुँच पुर्‍याउनुहोस्।"</string>
+    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"तपाईँको सामाजिक सूचना"</string>
+    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"तपाईँको सम्पर्कहरू र सामाजिक जडानहरूको बारेको जानकारीमा सिधा पहुँच पुर्‍याउनुहोस्।"</string>
+    <string name="permgrouplab_location" msgid="635149742436692049">"तपाईँको स्थान"</string>
+    <string name="permgroupdesc_location" msgid="5704679763124170100">"तपाईँको भौतिक स्थान निरीक्षण गर्नुहोस्।"</string>
+    <string name="permgrouplab_network" msgid="5808983377727109831">"नेटवर्क संचार"</string>
+    <string name="permgroupdesc_network" msgid="4478299413241861987">"विभिन्न नेटवर्क सुविधाहरूमा पहुँच राख्नुहोस्।"</string>
+    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"ब्लुटुथ"</string>
+    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"ब्लुटुथको माध्यमद्वारा उपकरणहरू र नेटवर्कहरूमाथि पहुँच राख्नुहोस्।"</string>
+    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"अडियो सेटिङहरू"</string>
+    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"अडियो सेटिङहरू बदल्नुहोस्।"</string>
+    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"ब्यट्रिलाई प्रभाव पार्छ"</string>
+    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"छिट्टै ब्याट्रि सकाउन सक्ने ती विशेषताहरू प्रयोग गर्नुहोस्।"</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"पात्रो"</string>
+    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"पात्रो तथा घटनाहरूमा प्रत्यक्ष पहुँच"</string>
+    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"प्रयोगकर्ता शब्दकोश पढ्नुहोस्"</string>
+    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"प्रयोगकर्ता शब्दकोशमा शब्दहरू पढ्नुहोस्।"</string>
+    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"प्रयोगकर्ता शब्दकोश लेख्नुहोस्"</string>
+    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"प्रयोगकर्ता शब्दकोशमा शब्दहरू थप्नुहोस्।"</string>
+    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"बुकमार्कहरू र इतिहास"</string>
+    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"बुकमार्कहरू र ब्राउजर इतिहासमा सिधा पहुँच।"</string>
+    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"अलार्म"</string>
+    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"अलार्म घडी सेट गर्नुहोस्।"</string>
+    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"भ्वाइस मेल"</string>
+    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"भ्वाइसमेलमा सिधा पहुँच।"</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"माइक्रोफोन"</string>
+    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"मा[क्रोफोनबाट रेकर्ड अडियोमा सिधा पहुँच पुर्‍याउनुहोस्।"</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"क्यामेरा"</string>
+    <string name="permgroupdesc_camera" msgid="2933667372289567714">"तस्बिर वा भिडियो क्याप्चरको लागि क्यामेरामा सिधा पहुँच।"</string>
+    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"स्क्रिन लक गर्नुहोस्"</string>
+    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"तपाईँको उपकरणमा लक स्क्रिनको व्यवहारलाई प्रभावित गर्ने क्षमता।"</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"तपाईँका अनुप्रयोगहरूको सूचना"</string>
+    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"तपाईँको उपकरणमा अन्य अनुप्रयोगहरूको व्यवहारमा प्रभाव पार्ने क्षमता।"</string>
+    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"वालपेपर"</string>
+    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"उपकरण वालपेपर सेटिङहरू बदल्नुहोस्।"</string>
+    <string name="permgrouplab_systemClock" msgid="406535759236612992">"घडी"</string>
+    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"उपकरण समय वा समय क्षेत्र परिवर्तन गर्नुहोस्।"</string>
+    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"स्थिति पट्टी"</string>
+    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"उपकरण स्थिति सेटिङहरू परिवर्तन गर्नुहोस्।"</string>
+    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"सिङ्क सेटिङहरू"</string>
+    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"सिङ्क सेटिङहरूमा पहुँच गर्नुहोस्।"</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"तपाईँका खाताहरू"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"उपलब्ध खाताहरू पहुँच गर्नुहोस्।"</string>
+    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"हार्डवेयर नियन्त्रणहरू"</string>
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"ह्यान्डसेटको हार्डवेयरमा प्रत्यक्ष पहुँच।"</string>
+    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"फोन कलहरू"</string>
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"अनुगमन, रेकर्ड र फोन कलहरूको प्रसोधन गर्नुहोस।"</string>
+    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"प्रणाली औजारहरू"</string>
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"निम्न-स्तर पहुँच र प्रणालीको नियन्त्रण"</string>
+    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"विकसित टुलहरू"</string>
+    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"अनुप्रयोग विकासकर्ताहरूको लागि मात्र सुविधाहरूको आवश्यकता।"</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"अन्य अनुप्रयोग UI"</string>
+    <string name="permgroupdesc_display" msgid="6051002031933013714">"अन्य अनुप्रयोगहरूको UI लाई असर पार्नुहोस्"</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"भण्डारण"</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB भण्डारणमाथि पहुँच गर्नुहोस्।"</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD कार्डमाथि पहुँच गर्नुहोस्।"</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"पहुँचीकरण विशेषताहरू"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"सहयोगी प्रविधि भएको विशेषताहरूले अनुरोध गर्न सक्छन्।"</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"विन्डो सामग्रीको पुनःबहाली गर्नुहोस्।"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"तपाईँको अन्तरक्रिया भइरहेको विन्डोको सामग्रीको निरीक्षण गर्नुहोस्।"</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"छोएर गरिने खोजलाई सुचारु गर्नुहोस्"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"छोइएका आइटमहरू चर्को स्वरमा बोलिने छ र स्क्रिन इशाराहरूको प्रयोगले अन्वेषण गर्न सकिन्छ।"</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"उच्च वेब पहुँचलाई सुचारु गर्नुहोस्"</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"अनुप्रयोगको सामग्रीलाई थप पहुँचयोग्य बनाउन लिपिहरू स्थापना गर्न सक्नु हुन्छ।"</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"आफुले टाइप गरेको पाठको निरीक्षण गर्नुहोस्"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"व्यक्तिगत डेटा जस्तै क्रेडिट कार्ड नम्बरहरू र पासवर्डहरू समावेश गर्दछ।"</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"स्थिति पट्टिलाई अक्षम वा संशोधित गर्नुहोस्"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"स्थिति पट्टि असक्षम पार्न वा प्रणाली आइकनहरू थप्न र हटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"स्थिति पट्टि"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"अनुप्रयोगलाई स्थिति पट्टि हुन अनुमति दिन्छ।"</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"स्थिति पट्टिलाई विस्तृत/सङ्कुचित गर्नुहोस्"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"अनुप्रयोगलाई स्थिति पट्टि विस्तार वा संकुचन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"बहिर्गमन कलहरूलाई अर्को मार्ग दिनुहोस्"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"बहिर्गमन कलहरूको प्रशोधन गर्न र डायल गरिने नम्बर परिवर्तन गर्न अनुप्रयोगलाई अनुमति दिन्छ।  यो अनुमतिले अनुप्रयोगलाई मोनिटर गर्न, अन्यत्र पठाउन वा बाहिर जाने कलहरूलाई रोक्न दिन्छ।"</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"पाठ सन्देशहरू (SMS) प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"अनुप्रयोगलाई SMS सन्देशहरू प्राप्त गर्न र प्रक्रिया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको सन्देशहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"पाठ सन्देश (MMS) प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"अनुप्रयोगलाई MMS सन्देशहरू प्राप्त गर्न र प्रकृया गर्न अनुमति दिन्छ। यसको मतलब अनुप्रयोगले तपाईंको उपकरणमा पठाइएको सन्देशहरू तपाईंलाई नदेखाईनै मोनिटर गर्न वा मेटाउन सक्दछ।"</string>
+    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"आकस्मिक प्रसारणहरू प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"अनुप्रयोगलाई आपतकालीन प्रसारण सन्देशहरू प्राप्त गर्न र प्रक्रिया गर्न अनुमति दिन्छ। यो अनुमति प्रणाली अनुप्रयोगहरूमा मात्र उपलब्ध छ।"</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"सेल प्रसारित सन्देशहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"तपाईंको उपकरणद्वारा प्राप्त सेल प्रसारण सन्देशहरू अनुप्रयोगलाई पढ्न अनुमति दिन्छ। सेल प्रसारण चेतावनीहरू केही स्थानहरूमा तपाईंलाई आपतकालीन गतिविधिहरूको बारेमा सचेत गराउन गरिएका छन्। खराब अनुप्रयोगहरूले एउटा आपतकालीन सेल प्रसारण प्राप्त गर्दछ जब तपाईंको उपकरणको प्रदर्शन वा अपरेशनको साथ हस्तक्षेप गर्न सक्दछन्।"</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"SMS सन्देशहरू पठाउनुहोस्"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"अनुप्रयोगलाई SMS सन्देशहरू पठाउन अनुमति दिन्छ। यसले अप्रत्यासित चार्जहरूको परिणाम दिन सक्दछ। खराब अनुप्रयोगहरूले तपाईंको पुष्टि बिना सन्देशहरू पठाएर तपाईंको पैसा खर्च गराउन सक्दछ।"</string>
+    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"प्रतिक्रिया-मार्फत-सन्देश घटनाहरू पठाउनुहोस्"</string>
+    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"अनुप्रयोगलाई आगत कलहरूको लागि प्रतिक्रिया-मार्फत-सन्देश घटनाहरूलाई अन्य सन्देश पठाउने अनुप्रयोगहरूमा अनुरोधहरू पठाउन अनुमति दिन्छ।"</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"तपाईंका पाठ सन्देशहरू (SMS वा MMS) पढ्नुहोस्"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"तपाईँको ट्याब्लेट वा SIM कार्डमा भण्डारण भएका SMS सन्देशहरूलाई पढ्न अनुप्रयोगलाई अनुमति दिन्छ। यसले अनुप्रयोगलाई विषयवस्तु वा गोपनीयतालाई वेवास्ता गर्दै सबै SMS सन्देशहरू पढ्ने अनुमति दिन्छ।"</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"तपाईँको फोन वा SIM कार्डमा भण्डारण भएका SMS सन्देशहरूलाई पढ्न अनुप्रयोगलाई अनुमति दिन्छ। यसले सबै SMS सन्देशहरूलाई पढ्नको लागि सामग्री वा विश्वसनियता बिना नै अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"तपाईँका पाठ सन्देशहरू सम्पादन गर्नुहोस् (SMS वा MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"अनुप्रयोगलाई तपाईंको ट्याब्लेट वा SIM कार्डमा भण्डार गरिएका SMS सन्देशहरू लेख्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले तपाईंको सन्देशहरू मेटाउन सक्दछ।"</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"तपाईँको फोन वा SIM कार्डमा भण्डारण भएका SMS सन्देशहरूलाई लेख्‍नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले सायद तपाईँको सन्देशहरू मेटाउन सक्छन्।"</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"पाठ सन्देशहरू (WAP) प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAP सन्देशहरू प्राप्त गर्न र प्रशोधन गर्न अनुप्रयोगलाई अनुमति दिन्छ। यो अनुमतिमा मोनिटर गर्ने वा तपाईँलाई पठाइएका सन्देशहरू तपाईँलाई नदेखाई मेट्ने क्षमता समावेश हुन्छ।"</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"चलिरहेका अनुप्रयोगहरू पुनःबहाली गर्नुहोस्"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"वर्तमानमा र भरखरै चलिरहेका कार्यहरू बारेको सूचना पुनःबहाली गर्न अनुप्रयोगलाई अनुमित दिन्छ। यसले उपकरणमा प्रयोग भएका अनुप्रयोगहरूको बारेमा सूचना पत्ता लगाउन अनुप्रयोगलाई अनुमति दिन सक्छ।"</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"प्रयोगकर्ताहरू तर्फ अन्तर्क्रिया गर्नुहोस्"</string>
+    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"अनुप्रयोगलाई उपकरणमा विभिन्न प्रयोगकर्ताहरू मार्फत कार्यहरू गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले यो प्रयोगकर्ताहरू बिच सुरक्षा बिथोल्न प्रयोग गर्न सक्ने छन्।"</string>
+    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"कुराकानी प्रयोगकर्ताहरू बिच अन्तर्क्रिया गर्न पूर्ण अनुमति"</string>
+    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"प्रयोगकर्तासँगको कुराकानी सबै सम्भावनालाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageUsers" msgid="1676150911672282428">"प्रयोगकर्ताहरू व्यवस्थापन गर्नुहोस्"</string>
+    <string name="permdesc_manageUsers" msgid="8409306667645355638">"अनुप्रयोगलाई उपकरणमा, प्रश्न, सिर्जना र मेटाइसहित प्रयोगकर्ताहरूको प्रबन्ध गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"चलिरहेका अनुप्रयोगहरूको विवरण पुनःबहाली गर्नुहोस्"</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"वर्तमानमा र भरखरै चलिरहेका कार्यहरूको बारेमा विस्तृत सूचना पुनःबहाली गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले अन्य अनुप्रयोगहरू बारेको निजी सूचना पत्ता लगाउन सक्छ।"</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"चलिरहेका अनुप्रयोगहरूलाई पुनःक्रम गराउनुहोस्"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"कामहरूलाई अग्रभाग र पृष्ठभूमिमा सार्न अनुप्रयोगलाई अनुमति दिन्छ। अनुप्रयोगले यो तपाईँको इनपुट बिना नै गर्न सक्छ।"</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"चालु भइरहेका अनुप्रयोगहरू रोक्नुहोस्"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"कामहरू हटाउन र उनीहरूको अनुप्रयोगहरूलाई बन्द गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले अन्य अनुप्रयोगहरूको व्यवहारलाई अबरोध गर्न सक्छन्।"</string>
+    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"activity stacks को प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"अनुप्रयोगलाई अन्य अनुप्रयोगहरू चल्ने activity stacks लाई थप्न, हटाउन र परिवर्तन गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले अन्य अनुप्रयोगहरूको व्यवहारलाई विघटन गर्न सक्छन्।"</string>
+    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"कुनै गतिविधि सुरु गर्नुहोस्"</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"अनुमति सुरक्षा वा निर्यात अवस्थालाई वास्ता नगरिकन कुनै पनि कार्य सुरु गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"स्क्रिन अनुकूलता सेट गर्नुहोस्"</string>
+    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"अन्य अनुप्रयोहरूको स्क्रिन मिल्दो मोडलाई नियन्त्रण गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। अन्य अनुप्रयोहरूको व्यवहार खराब अनुप्रयोगहरूले टुटाउन सक्छन्।"</string>
+    <string name="permlab_setDebugApp" msgid="3022107198686584052">"अनुप्रयोग डिबग गर्ने सक्षम गर्नुहोस्"</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"अनुप्रयोगलाई अन्य अनुप्रयोगको लागि डिबग गर्ने प्रक्रिया चालु गर्ने अनुमति दिन्छ। खराब अनुप्रयोगले अरू अनुप्रयोगहरू समाप्त गर्न यसको उपयोग गर्न सक्दछ।"</string>
+    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"प्रणाली प्रदर्शन सेटिङहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"वर्तमान कन्फिगरेसन जस्तै लोक्याल वा सबैतिर फन्ट आकार बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"कार मोड सक्षम गर्नुहोस्"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"कार मोडलाई सक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"अनुप्रयोगहरू बन्द गर्नुहोस्"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"अनुप्रयोगलाई अन्य अनुप्रयोगहरूको पृष्ठभूमि प्रक्रियाहरू बन्द गर्न अनुमति दिन्छ। यसले अन्य अनुप्रयोगहरूलाई चल्नबाट रोक्न सक्दछ।"</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"अन्य अनुप्रयोगहरू दबाबमा रोक्नुहोस्"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"अन्य अनुप्रयोगहरूलाई बलपूर्वक बन्द गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_forceBack" msgid="652935204072584616">"अनुप्रयोग बन्द गर्न बल गर्नुहोस्"</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"अग्रभागमा भएको कुनै गतिविधिलाई जबरजस्ती बन्द गर्न र फर्केर जानका लागि अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाइ कहिल्यै आवश्यकता पर्दैन।"</string>
+    <string name="permlab_dump" msgid="1681799862438954752">"प्रणालीको आन्तरिक स्थिति प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"प्रणालीको आन्तरिक स्थिति पुनःबहाली गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले उनीहरूलाई सामान्यतः कहिल्यै नचाहिने व्यापक विविधताको निजी र सुरक्षित सूचना पुनःबहाली गर्न सक्छन्।"</string>
+    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"स्क्रिन सामग्री बहाली गर्नुहोस्"</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"सक्रिय विन्डोको विषयवस्तुलाई पुनःबहाली गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले पुरै विन्डोको विषयवस्तु पुनःबहाली गर्न सक्छन् र पासवर्डहरूबाहेक यसका सबै पाठको जाँच गर्न सक्छन्।"</string>
+    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"पहुँचतालाई अस्थायी सक्षम गर्नुहोस्"</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"अनुप्रयोगलाई अस्थायी रूपमा उपकरणमाथि पहुँच राख्न अनुमति दिन्छ। खराब अनुप्रयोगले उपयोगकर्ताको सहमति बिना नै पहुँचलाई सक्षम गर्न सक्दछ।"</string>
+    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"विन्डो जानकारी बहाली गर्नुहोस्"</string>
+    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"अनुप्रयोगलाई विन्डो व्यवस्थापकबाट विन्डोहरूको बारेमा जानकारी प्राप्त गर्न अनुमति दिन्छ। खराब अनुप्रयोगले आन्तरिक प्रणाली उपयोगको लागि निमित्त जानकारी पनि प्राप्त गर्न सक्दछ।"</string>
+    <string name="permlab_filter_events" msgid="8675535648807427389">"घटनाहरू छान्नुहोस्"</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"इन्पुट फिल्टर जुन सबै प्रयोगकर्ता घटनाहरू पठाइनुभन्दा पहिले फिल्टर गर्नेलाई दर्ता गर्न अनुप्रयोगलाई अनुमति दिन्छ। प्रयोगकर्ताको हस्तक्षेप बिना नै UI प्रणाली खराब अनुप्रयोगले नियन्त्रण गर्न सक्छन्।"</string>
+    <string name="permlab_magnify_display" msgid="5973626738170618775">"प्रदर्शन बढाउनुहोस्"</string>
+    <string name="permdesc_magnify_display" msgid="7121235684515003792">"अनुप्रयोगलाई प्रदर्शनको सामग्री आवर्धन गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले प्रदर्शन सामग्री संक्रमण गर्न सक्दछन् जसले उपकरणलाई अनुपयोगी बनाउँदछ।"</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"आंशिक बन्द"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"गतिविधि व्यवस्थापकलाई बन्द गर्ने अवस्थामा राख्छ। पूर्ण बन्द गर्ने काम गर्दैन।"</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"अनुप्रयोग स्विचहरू जोगाउनुहोस्"</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"अन्य अनुप्रयोगमा स्विच गर्नबाट प्रयोगकर्ताहरूलाई रोक्छ।"</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"वर्तमान अनुप्रयोगको जानकारी प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="8153651434145132505">"स्क्रिनको अग्र भागमा हालको अनुप्रयोग र सेवाहरूका बारे निजी जानकारी निकाल्न बाहकलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"सबै अनुप्रयोग सुरुवात गर्ने निरीक्षण र नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"अनुप्रयोगलाई कसरी प्रणाली सुरुवात गतिहरू मोनिटर गर्न र नियन्त्रण गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले प्रणालीमा पूर्ण सहमत गर्न सक्दछ। यो अनुमति केवल विकासको लागि आवश्यक छ, साधारण प्रयोगको लागि कहिले होइन।"</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"प्याकेज हटाइएको प्रसारणलाई पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"अनुप्रयोगलाई सूचना प्रसारण गर्न अनुमति दिन्छ जुन अनुप्रयोग प्याकेज हटाइएको छ। खराब अनु्प्रयोगहरूले यो कुनै अन्य चालु अनु्प्रयोग बन्द गर्न प्रयोग गर्न सक्दछन्।"</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS-प्राप्त प्रसारण पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"त्यो एउटा SMS सन्देशबाट प्राप्त भएको सूचनालाई प्रसारण गर्न अनुप्रयोगलाई अनुमति दिन्छ। आउँदै गरेको SMS सन्देशहरूलाई जालसाजी गर्न सायद खराब भएका अनुप्रयोगहरूले यसलाई प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-प्राप्त प्रसारण पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"अनुप्रयोगलाई सूचना प्रसारण गर्न अनुमति दिन्छ जुन एउटा WAP PUSH सन्देश प्राप्त भएको छ। खराब अनुप्रयोगहरूले यो MMS सन्देश बिगार्न वा मौन तरिकाले कुनै पनि वेबपृष्ठको सामग्री खराब विभेदहरूसँग बदल्न प्रयोग गर्न सक्दछन्।"</string>
+    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"चालु प्रशोधनहरूको सङ्ख्या सीमति गर्नुहोस्"</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"अनुप्रयोगलाई चालु हुने प्रक्रियाहरूको अधिकतम संख्या नियन्त्रण गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"पृष्ठभूमि अनुप्रयोगहरू बन्द गर्न दबाब दिनुहोस्"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"अनुप्रयोगलाई गतिविधिहरू सधैँ समाप्त भयो कि भएन जब कि जति सक्दो तिनीहरू पृष्ठभूमिमा जान्छन् भन्ने नियन्त्रण गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_batteryStats" msgid="2789610673514103364">"ब्याट्रि तथ्याङ्हरू पढ्नुहोस्"</string>
+    <string name="permdesc_batteryStats" msgid="5897346582882915114">"वर्तमान थोरै ब्याट्री प्रयोग डेटा पढ्नको लागि एक अनुप्रयोगले अनुमति दिन्छ। जुन अनुप्रयोग तपाईँले प्रयोग गरीरहनुभएको छ त्यस्को बारेका पुर्ण जानकारी प्राप्त गर्न सायद अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"ब्याट्रि तथ्याङ्कलाई परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"अनुप्रयोगलाई संकलित ब्याट्रि तथ्याङ्कहरू परिमार्जन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"अनुप्रयोग संचालनका तथ्याङ्कहरू पुनःबहाली गर्नुहोस्"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"सङ्कलन गरिएका अनुप्रयोग संचालन तथ्याङ्लाई पुनः प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगबाट प्रयोगको लागि होइन।"</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"अनुप्रयोग संचलान तथ्याङ्कहरूलाई परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"सङ्कलन गरिएका अनुप्रयोग संचालन तथ्याङ्लाई परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगबाट प्रयोगको लागि होइन।"</string>
+    <string name="permlab_backup" msgid="470013022865453920">"प्रणाली ब्यकअप नियन्त्रण गर्नुहोस् र पुनः बहाली गर्नुहोस्"</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"प्रणालीको जगेडा नियन्त्रण गर्न र पुनःप्राप्तिको संयोजन गर्न अनुप्रयोगलाई अनुमित दिन्छ। सामान्य अनुप्रयोगद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"पूर्ण जगेडा गर्न वा प्रक्रिया पुनःबहाली गर्न निश्चित गर्नुहोस्"</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"UI को पूर्ण जगेडा निश्चिन्तता सुरु गर्नका लागि अनुप्रयोगलाई अनुमति दिन्छ। कुनै अनुप्रयोगबाट प्रयोग नगरिने।"</string>
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"अनधिकृत बिन्डोहरू प्रदर्शन गर्नुहोस्"</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"अनुप्रयोगलाई विन्डोहरू सिर्जना गर्न अनुमति दिन्छ जुन आन्तरिक प्रणाली प्रयोगकर्ता इन्टरफेसद्वारा प्रयोग गर्न अभिप्रेरित छ। साधारण अनुप्रयोगहरूद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"अन्य अनुप्रयोगहरूमा चित्र कोर्नुहोस्"</string>
+    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"अरू अनुप्रयोगहरूमाथि वा प्रयोगकर्ता इन्टरफेसका भागहरूमा चित्र कोर्न अनुप्रयोगलाई अनुमति दिन्छ। तिनीहरूले कुनै अनुप्रयोगमा इन्टरफेको तपाईँको प्रयोगसँग हस्तक्षेप गर्न वा तपाईँ अन्य अनुप्रयोगहरूमा के देखिरहनु भएको छ भन्ने सोच्न हुन्छ भन्ने बदल्न सक्छन्।"</string>
+    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"ग्लोबल सजीविकरण गति परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"विश्वब्यापि सजीविकरण(द्रुत वा ढिला सजीविकरणहरू) लाई कुनै पनि समय परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"अनुप्रयोग टोकनहरू प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"अनुप्रयोगलाई आफ्ना टोकनहरू सिर्जना गर्न र उनीहरूको साधारण Z-क्रमाङ्कन बाइपास गरेर प्रबन्ध गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिल्यै पनि आवश्यक नहुन सक्दछ।"</string>
+    <string name="permlab_freezeScreen" msgid="4708181184441880175">"स्क्रिन फ्रिज गर्नुहोस्"</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"अनुप्रयोगलाई पूर्ण-स्क्रिन संक्रमणको लागि अस्थायी रूपमा स्क्रिन स्थिर गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_injectEvents" msgid="1378746584023586600">"कुञ्जीहरू र नियन्त्रण बटनहरू थिच्नुहोस्"</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"यसका आफ्ना इनपुट घटनाहरू (कि थिचाइहरू, आदि) अन्य अनुप्रयोगहरूलाई वितरण गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई ट्याब्लेटसम्म लैजान प्रयोग गर्न सक्छन्।"</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"यस्को आफ्नै निवेश घटनाहरू (कि थिचाइहरू, आदि.) अन्य अनुप्रोयगहरूलाई पु्र्‍याउन अनुप्रयोगलाई अनुमति दिन्छ। फोनलाई हस्तक्षेप गर्न यसको प्रयोग खराब अनुप्रयोगहरूले गर्न सक्छन्।"</string>
+    <string name="permlab_readInputState" msgid="469428900041249234">"तपाईंले के टाइप गर्नुहुन्छ र के कार्यहरू लिनुहुन्छ रेकर्ड गर्नुहोस्"</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"अर्को अनुप्रयोग(जस्तै पासवर्ड टाइप गराइ)सँग अन्तर्क्रिया गरेको बेला पनि तपाईँले थिचेका किहरूलाइ हेर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिल्यै आवश्यक हुँदैन।"</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"एउटा निवेश तरिकामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"एउटा निवेश तरिकाको उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि समाती राख्नेलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"एउटा पहुँच सेवासँग जोड्नुहोस्"</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"एक पहुँच सेवाको उच्च स्तरको कुराकानीलाई पक्का गर्नको लागि समाती राख्नेले अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindPrintService" msgid="8462815179572748761">"एउटा प्रिन्ट सेवासँग जोड्नुहोस्"</string>
+    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"एउटा प्रिन्ट सेवाको उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि प्रयोगकर्तालाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_accessAllPrintJobs" msgid="1120792468465711159">"सबै प्रिन्ट कार्यहरूको पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessAllPrintJobs" msgid="2978185311041864762">"प्रयोगकर्तालाई अन्य अनुप्रयोगद्वारा निर्मित प्रिन्ट कार्यहरू पहुँच गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC सेवामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"NFC कार्डहरू इमुलेट गर्ने अनुप्रयोगहरूलाई बाँध्नका लागि होल्डरलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूका लागि कहिल्यै पनि आवश्यक पर्दैन।"</string>
+    <string name="permlab_bindTextService" msgid="7358378401915287938">"एउटा पाठ सेवासँग संगठित हुनुहोस्"</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"एउटा पाठ सेवाको (उदाहरण शब्द परीक्षणसेवा) उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि समाती राख्नेलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN सेवासँग बाँध्नुहोस्।"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"एक Vpn सेवाको उच्च स्तरको कुराकानीलाई पक्का गर्नको लागि समाती राख्नेले अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"एउटा वालपेपरमा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"वालपेपरको माथिल्लो स्तरको इन्टरफेसमा बाँध्न धारकलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्दैन।"</string>
+    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"एउटा विजेट सेवासँग संगठित हुनुहोस्"</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"एउटा विजेट सेवाको उच्च स्तरको इन्टरफेसलाई पक्का गर्नको लागि समाती राख्नेलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"उपकरणको प्रबन्धसँग अन्तरक्रिया गर्नुहोस्"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"उपकरण प्रशासक लाई आशय पठाउन समाती राख्‍नेलाई अनुमति दिन्छ। साधारण अनुप्रयोहरूको लागि कहिल्यै पनी आवश्यक पर्दैन।"</string>
+    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"एउटा उपकरण व्यवस्थापक थप गर्नुहोस् वा हटाउनुहोस्"</string>
+    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"होल्डरलाई सक्रिय उपकरण व्यवस्थापकहरू थप गर्न वा हटाउन अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिल्यै पनि आवश्यक नहुन सक्दछ।"</string>
+    <string name="permlab_setOrientation" msgid="3365947717163866844">"स्क्रिन अभिमुखिकरण परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"अनुप्रयोगलाई कुनै पनि समयमा स्क्रिनको परिक्रमण परिवर्तन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"सङ्केतक गति बदल्नुहोस्"</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"कुनै पनि समयमा माउस परिवर्तन गर्न वा ट्राकप्याड संकेतकको गति बदल्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूको लागि कहिल्यै नचाहिन सक्छ।"</string>
+    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"किबोर्ड लेआउट परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"किबोर्ड लेआउटलाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई सायद कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"Linux संकेतहरू अनुप्रयोगलाई पठाउनुहोस्"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"सबै चलिरहेका प्रक्रियाहरूमा पठाइएका संकेतलाई अनुरोध गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"अनुप्रयोगहरू जहिले पनि चल्ने बनाउनुहोस्"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"यसको आफ्नै मेमोरीमा दृढ भएकोको अंश बनाउनको लागि अनुप्रयोगलाई अनुमति दिन्छ। ट्याब्लेटलाई ढिलो गराउँदै गरेका अन्य अनुप्रयोगहरूलाई सीमित मात्रामा यसले मेमोरी उपलब्ध गराउन सक्छ।"</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"अनुप्रयोगलाई मेमोरीमा आफैंको निरन्तरको अंश बनाउन अनुमति दिन्छ। यसले फोनलाई ढिला बनाएर अन्य अनुप्रयोगहरूमा मेमोरी SIMित गर्न सक्दछन्।"</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"अनुप्रयोगहरू मेटाउनुहोस्"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"अनुप्रयोगलाई एन्ड्रोइड प्याकेजहरू मेटाउन अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई महत्त्वपूर्ण अनुप्रयोगहरू मेटाउन प्रयोग गर्न सक्दछन्।"</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"अन्य अनुप्रयोगहरूको डेटा मेटाउनुहोस्"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"प्रयगकर्ता डेटा हटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"अन्य अनुप्रयोगहरूको क्यासहरू मेटाउनुहोस्"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"अनुप्रयोगलाई क्यास फाइलहरू मेटाउन अनुमति दिन्छ।"</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"अनुप्रयोग भण्डारण ठाउँको मापन गर्नुहोस्"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"अनुप्रयोगलाई यसको कोड, डेटा, र क्यास आकारहरू पुनःप्राप्त गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_installPackages" msgid="2199128482820306924">"अनुप्रयोगहरू सिधै स्थापना गर्नुहोस्"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"नयाँ स्थापना गर्न वा एन्ड्रोइड प्याकेजहरू अद्यावधिक गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई मनपरी रूपमा शक्तिशाली अनुमतिहरू भएका नयाँ अनुप्रयोगहरू थप्न प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"सबै अनुप्रयोग क्यास डेटा मेटाउनुहोस्"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"अन्य अनुप्रयोगहरूको क्यास डाइरेक्टरीहरूमा फाइलहरू हटाएर ट्याब्लेटको भण्डारण खाली गर्न अनुप्रयोगहरूलाई अनुमति दिन्छ। उनीहरूले आफ्नो डेटा पुनःबहाली गर्न पर्ने हुनाले यसले अन्य अनुप्रयोगहरूलाई स्टार्ट हुन निकै ढिलो गराउन सक्छ।"</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"अनुप्रयोगलाई अन्य अनुप्रयोगहरूको क्यास डाइरेक्टरीमा फाइलहरू मेटाएर फोन भण्डारण खाली गर्न अनुमति दिन्छ। यसले अन्य अनुप्रयोगहरूलाई बढी ढिला सुरु गराउँछ किनकि तिनीहरूले आफ्नो डेटा पुनःप्राप्ति गर्न आवश्यक पर्ने हुन्छ।"</string>
+    <string name="permlab_movePackage" msgid="3289890271645921411">"अनुप्रयोग स्रोतहरू सार्नुहोस्"</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"अनुप्रयोग स्रोतहरू आन्तरिकबाट बाह्य मेडियामा र विपरितमा लैजान अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"संवेनशील लग डेटा पढ्नुहोस्"</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"प्रणालीका विभिन्न फाइलहरूबाट पढ्न अनुप्रयोगलाई अनुमति दिन्छ। सम्भाव्य रूपमा व्यक्तिगत र निजी सूचनासहित तपाईँ ट्याब्लेटसँग के गरिरहनु भएको छ भन्ने बारेको साधारण सूचना पत्ता लगाउन यसलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"प्रणालीका विभिन्न फाइलहरूबाट पढ्न अनुप्रयोगलाई अनुमति दिन्छ। सम्भाव्य रूपमा व्यक्तिगत र निजी सूचनासहित तपाईँ फोनसँग के गरिरहनु भएको छ भन्ने बारेको साधारण सूचना पत्ता लगाउन यसलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"पछाडि बजाउनको लागि कुनै मिडिया प्रयोग गर्नुहोस्"</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"अनुप्रयोगलाई प्लेब्याक डिकोड गर्न कुनै पनि स्थापित मिडिया डिकोडर प्रयोगको लागि अनुमति दिन्छ।"</string>
+    <!-- no translation found for permlab_manageCaCertificates (1678391896786882014) -->
+    <skip />
+    <!-- no translation found for permdesc_manageCaCertificates (4015644047196937014) -->
+    <skip />
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"diag को स्वामित्वमा रहेको संसाधनहरूमा पढ्नुहोस्/लेख्नुहोस्"</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"अनुप्रयोगलाई diag समूहद्वारा स्वामित्व प्राप्त कुनै पनि स्रोतहरूमा पढ्न र लेख्न अनुमति दिन्छ; उदाहरणको लागि, /dev  मा फाइलहरू। यसले सम्भवतः प्रणाली स्थिरता र सुरक्षामा प्रभाव पार्न सक्दछ। यो केवल निर्माता वा संचालकद्वारा हार्डवेयर-निर्दिष्टको लागि प्रयोग हुन सक्दछ।"</string>
+    <string name="permlab_changeComponentState" msgid="6335576775711095931">"अनुप्रयोग अंशहरू सक्षम वा अक्षम गर्नुहोस्"</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"अन्य अनुप्रयोग सक्षम छ वा छैन भन्ने कुराको परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। महत्त्वपूर्ण फोन सक्षमता खराब अनुप्रोगहरूले असक्षम पार्न प्रयोग गर्न सक्छन्। यो अनुमतिसँगै होसियारी अपनाउनु पर्छ, अनुप्रयोग विषय सूचीमा प्रयोग नहुने, असंगत, अस्थिर अवस्था भएको प्राप्त हुने सम्भावना हुन्छ।"</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"अन्य अनुप्रयोगको अंश सक्षम छ वा छैन भन्नेमा परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। महत्त्वपूर्ण फोन सक्षमता खराब अनुप्रोगहरूले असक्षम पार्न प्रयोग गर्न सक्छन्। यो अनुमतिसँगै होसियारी अपनाउनु पर्छ, अनुप्रयोग विषय सूचीमा प्रयोग नहुने, असंगत, अस्थिर अवस्था भएको प्राप्त हुने सम्भावना हुन्छ।"</string>
+    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"अनुमतिहरू प्रदान गर्नुहोस् वा रद्द गर्नुहोस्"</string>
+    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"अनुप्रयोगलाई यो वा अन्य अनुप्रयोगहरूको लागि निर्दिष्ट स्वीकृतिहरू प्रदान गर्न वा रद्द गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले यो तपाईंले अनुमति प्रदान नगर्नुभएका सुविधाहरूमा पहुँच गर्न सक्दछन्।"</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"विशेष रूपमा मान्य अनुप्रयोगहरू सेट गर्नुहोस"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"तपाईँको मनपर्ने अनुप्रयोगलाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले चलिरहेका ती अनुप्रयोहरूलाई चुपचाप रूपमा परिवर्तन गर्न सक्छन्, तपाईँबाट निजी डेटा संकलन गर्नको लागि भइरहेको अनुप्रयोगलाई स्पुफ गर्न सक्छन्।"</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"प्रणाली सेटिङहरू परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"प्रणालीका सेटिङ डेटालाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले सायद तपाईँको प्रणालीको कन्फिगरेसनलाई क्षति पुर्‍याउन सक्छन्।"</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"सुरक्षित प्रणाली सेटिङहरू परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"प्रणालीको सुरक्षित सेटिङ डेटा परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूको प्रयोगको लागि होइन्।"</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"Google सेवा नक्सा परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"अनुप्रयोगलाई Google सेवा नक्साहरू परिमार्जन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूद्वाराको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"स्टार्टअपमा चलाउनुहोस्"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"आनुप्रयोगलाई प्रणाली बुट प्रक्रिया पूर्ण हुने बितिकै आफैलाई सुरु गर्ने अनुमति दिन्छ। यसले ट्याब्लेट सुरु गर्नमा ढिला गर्न सक्दछ र अनुप्रयोगलाई समग्रमा ट्याब्लेट सधैँ चालु गरेर ढिला बनाउँदछ।"</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"अनुप्रयोगलाई प्रणाली बुट गरी सकेपछि जति सक्दो चाँडो आफैंमा सुरु गर्न अनुमति दिन्छ। यसले फोन सुरु गर्नमा ढिला गर्न सक्दछ र अनप्रयोगलाई समग्रमा फोन सधैँ चालु गरेर ढिला बनाउँदछ।"</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"स्टिकि प्रसारण पठाउनुहोस्"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"औपचारिक प्रसारणलाई पठाउनको लागि एउटा अनुप्रयोगलाई अनुमति दिन्छ, जुन प्रसारण समाप्त भएपछि बाँकी रहन्छ। अत्याधिक प्रयोगले धेरै मेमोरी प्रयोग गरेको कारणले ट्याब्लेटलाई ढिलो र अस्थिर बनाउन सक्छ।"</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"औपचारिक प्रसारणलाई पठाउनको लागि एक अनुप्रयोगलाई अनुमति दिन्छ, जुन प्रसारण समाप्त भएपछि बाँकी रहन्छ। अत्याधिक प्रयोगले धेरै मेमोरी प्रयोग गरेको कारणले फोनलाई ढिलो र अस्थिर बनाउन सक्छ।"</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"तपाईँका सम्पर्कहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"अनुप्रयोगलाई निर्दिष्ट व्यक्तिगतसँग अन्य तरिकाहरूबाट कल गर्नु भएका, इमेल गर्नु भएका वा अन्तर्क्रिया गर्नुभएका आवृतिसहितको तपाईंको ट्याब्लेटमा भण्डारण गरिएका सम्पर्कहरूको डेटा पढ्न अनुमति दिन्छ। यो अनुमतिले तपाईंको सम्पर्क डेटा बचत गर्न अनुमति दिन्छ, र खराब अनुप्रयोगहरूले तपाईंको जानकारी बिना सम्पर्क डेटा साझेदारी गर्न सक्दछन्।"</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"तपाईँले विशेष व्यक्तिहरूसँग अर्को तरिकाबाट कल गर्नुभएका, इमेल गर्नुभएका वा संचार गर्नुभएका आवृतिसहित तपाईँको फोनमा भण्डारण भएका डेटाको बारेमा पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यो अनुमतिले अनुप्रयोगलाई तपाईँको सम्पर्क डेटा बचत गर्नको लागि अनुमति दिन्छ, र तपाईँको ज्ञान बिना नै खराब अनुप्रयोगहरूले सायद सम्पर्क डेटा साझेदारी गर्न सक्छन्।"</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"तपाईँका सम्पर्कहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"अन्य तरिकाका आवृतिहरूसँग जुन तपाईँले कल, इमेल, वा विशेष सम्पर्क गर्नुभएकासहित तपाईँको ट्याब्लेटमा भण्डारण भएका सम्पर्कहरूको बारेको डेटालाई परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यस अनुमतिले सम्पर्क डेटालाई मेटाउनको लागि अनुमति दिन्छ।"</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"तपाईँले बारम्बार कल गरेका, इमेल गरेका, वा विशेष सम्पर्कहरूसँग सञ्चार गरेका सहित तपाईँको फोनमा भण्डारण गरेका तपाईँका सम्पर्कहरू परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। यो अनुमतिले अनुप्रयोगलाई सम्पर्क डेटा मेटाउन दिन्छ।"</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"कल लग पढ्नुहोस्"</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"अनुप्रयोगलाई तपाईँको ट्याब्लेटको कल लग, आगमन र बहिर्गमन कलहरू बारे डेटा सहितको कल लग पढ्न अनुमति दिन्छ। यस अनुमतिले अनुप्रयोगहरूलाई तपाईँको कल लग डेटाहरूको बचत गर्न अनुमति दिन्छ, र खराब अनुप्रयोगहरूले तपाईँको जानकारी बिना नै यो कल लग डेटालाई अरूसँग साझेदार गर्न सक्छन्।"</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"भित्र आउने र बाहिर जाने कलहरूसहित तपाईँको फनको कल लग पढ्न अनुप्रयोगलाई अनुमति दिन्छ।  यो अनुमतिले अनुप्रयोगहरूलाई तपाईँका कल लग डेटा बचत गर्न दिन्छ र खराब अनुप्रयोगहरूले तपाईँले थाहै नपाई कल लग डेटालाई साझेदारी गर्न सक्छन्।"</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"कल लग लेख्‍नुहोस्"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"आगमन तथा बहर्गमन डेटासहित तपाईँको ट्याब्लेटको कल लगको परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई तपाईँको कल लग परिमार्जन गर्न वा मेटाउन प्रयोग गर्न सक्छन्।"</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"अनुप्रयोगलाई तपाईंको फोनको आउने र बाहिर जाने कलहरूको बारेको डेटा सहित कल लग परिमार्जन गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले यसलाई तपाईंको कल लग मेटाउन वा परिमार्जन गर्न प्रयोग गर्न सक्दछ।"</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"तपाईँको आफ्नै सम्पर्क कार्ड पढ्नुहोस्"</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"अनुप्रयोगलाई तपाईंको उपकरणमा भण्डारण गरिएका व्यक्तिगत प्रोफाइल जानकारी पढ्न अनुमति दिन्छ, जस्तै तपाईंको नाम र सम्पर्क जानकारी। यसको मतलब अनुप्रयोगले तपाईंलाई पहिचान गर्न सक्दछ र तपाईंको प्रोफाइल जानकारी अरूलाई पठाउन सक्दछ।"</string>
+    <string name="permlab_writeProfile" msgid="907793628777397643">"तपाईँको आफ्नै सम्पर्क कार्ड परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"तपाईँको उपकरणमा भण्डार भएको व्याक्तिगत प्रोफाइल जानकारी, जस्तै तपाईँको नाम वा सम्पर्क जानकारीलाई परिवर्तन गर्न वा थप्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यसको मतलब अन्य अनुप्रयोगले तपाईँलाई चिन्न सक्छन् र सायद अन्यलाई तपाईँको प्रोफाइल जानकारी पठाउन सक्छन्।"</string>
+    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"तपाईंको सामाजिक स्ट्रिम पढ्नुहोस्"</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"तपाईँ र तपाईँका साथीहरूबाट सामाजिक अपडेटलाई पहुँच र सिंक गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। जानकारी साझेदारी गर्दा सावधान रहनुहोस्  -- समाजिक नेटवर्कहरूमा तपाईँ र तपाईँको साथीको  बिचमा भएका संचारलाई पढ्न विश्वासनीयता बेगरै यसले अनुप्रयोगलाई अनुमति दिन्छ। नोट: यो अनुमति बलपूर्वक सबै सामाजिक नेटवर्कहरूमा सायद नगर्न सकिन्छ।"</string>
+    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"तपाईँको सामाजिक प्रवाहमा लेख्‍नुहोस्"</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"अनुप्रयोगलाई तपाईंको साथीहरूबाट सामाजिक अपडेटहरू प्रदर्शन गर्न अनुमति दिन्छ। जानकारी साझेदारी गर्ने बेलामा होशियार रहनुहोस् -- यसले अनुप्रयोगलाई सन्देशहरू निर्माण गर्न अनुमति दिन्छ जुन साथीबाट आएको देखिन्छ। टिप्पणी: यो अनुमति सबै सामाजिक सञ्जालहरूमा लागू नहुन सक्दछ।"</string>
+    <string name="permlab_readCalendar" msgid="5972727560257612398">"गोप्य जानकारी र पात्रो घटनाहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"अनुप्रयोगलाई तपाईंको ट्याब्लेटमा भण्डारण गरिएका ती साथीहरू वा सहयोगीहरू सहितको पात्राका कार्यक्रमहरू पढ्न अनुमति दिन्छ। यसले गोपनीयता वा संवेदनशीलता बिना पनि अनुप्रयोगलाई तपाईंको पात्राका डेटा साझेदारी गर्न वा बचत गर्न अनुमति दिन्छ।"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"ती साथीहरू वा सहकर्मीहरूसहित सबै पात्रो घटनाहरू तपाईँको ट्याब्लेटमा भण्डारण भएकालाई पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। तपाईँको पात्रो डेटा यसले सायद सेयर गर्न वा सुरक्षित गर्नको लागि विश्वासनियता वा सम्वेदनशीलता बिना नै अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"पात्रो घटनाहरू थप्नुहोस् वा परिमार्जन गर्नुहोस् र मालिकको ज्ञान बिना नै पाहुनाहरूलाई इमेल पठाउनुहोस्"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"ती साथीहरू वा सहकर्मीहरूसहितका घटनाहरू जसलाई तपाईँले आफ्नो ट्याब्लेटमा परिमार्जन गर्न सक्ने अनुमति अनुप्रयोगलाई दिन्छ। यसले अनुप्रयोगलाई सन्देशहरू जुन पात्राको मालिकहरूबाट आएका देखिनेलाई पठाउने वा मालिकहरूको ज्ञान बेगर घटनालाई परिमार्जन गर्ने अनुमित दिन्छ।"</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"ती साथीहरू वा सहकर्मीहरूसहित तपाईँको फोनका घटनाहरू जसलाई थप्न, हटाउन र परिवर्तन गर्न  अनुप्रयोगलाई अनुमति दिन्छ। पात्रो मालिकबाट देखा परेका वा मालिकको ज्ञान बिना परिवर्तन भएका घटनाहरू सन्देश पठाउन यसले अनुप्रयोगलाई अनुमति दिन सक्छ।"</string>
+    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"परीक्षणको लागि स्थान स्रोतहरू मक गर्नुहोस्"</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"परीक्षणको लागि मक स्थान स्रोतहरू सिर्जना गर्नुहोस् वा नयाँ स्थान प्रदायक स्थापना गर्नुहोस्। यसले अनुप्रयोगलाई स्थानमा ओभरराइड गर्दछ र/वा स्थिति अन्य स्थान स्रोतहरू जस्तै GPS वा स्थान प्रदायकबाट फर्काइएका।"</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"अधिक स्थान प्रदायक आदेशहरू पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"थप स्थान प्रदायक कमाण्डहरू सम्म पहुँच पुर्‍याउन अनुप्रयोगले अनुमति दिन्छ। यसले अनुप्रयोगलाई सायद जीपीएसको वा अन्य स्थान सेवाहरूको कार्य सँग हस्तक्षेप गर्नको लागि यसलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"एउटा स्थान प्रदाता स्थापित गर्न अनुमति"</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"परीक्षणको लागि मक स्थान स्रोतहरू सिर्जना गर्नुहोस् वा नयाँ स्थान प्रदायक स्थापना गर्नुहोस्। यसले अनुप्रयोगलाई स्थानमा ओभरराइड गर्दछ र/वा स्थिति अन्य स्थान स्रोतहरू जस्तै GPS वा स्थान प्रदायकबाट फर्काइएका।"</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"सटिक स्थान (GPS र नेटवर्क आधारित)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"अनुप्रयोगले विश्वव्यापी स्थान प्रणाली (GPS) वा सेल टावरहरू र वाइ-फाइ जस्ता नेटवर्क स्थान स्रोतहरूको प्रयोग गरेर तपाईँको सही स्थान प्राप्त गर्न अनुमति दिन्छ। यी स्थान सेवाहरू खोल्नु पर्छ र अनुप्रयोगहरूका लागि प्रयोग गर्न तपाईँको उपकरणमा उपलब्ध हुनु पर्छ। अनुप्रयोगहरूले तपाईँ कहाँ हुनु हुन्छ भन्ने निर्धारण गर्न यसलाई प्रयोग गर्न सक्छ र यसले अतिरिक्त ब्याट्रि उर्जा खतप गर्न सक्छ।"</string>
+    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"अनुमानित स्थान (नेटवर्क-आधारित)"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"अनुप्रयोगलाई तपाईँको अनुमानित स्थान प्राप्त गर्न अनुमति दिन्छ। यो स्थान सेल टावर र वाइ-फाइजस्ता नेटवर्क स्थान स्रोतहरूको प्रोग गरी स्थान सेवाहरूबाट उत्पन्न गरिएको हो। अनुप्रयोगले यी स्थान सेवाहरूको उपयोग गर्नको लागि यी सेवाहरू तपाईँको उपकरणमा चालु र उपलब्ध हुनु आवश्यक छ। अनुप्रयोगहरूले अनुमानित रूपमा तपाईँ कहाँ हुनुहुन्छ भन्ने निर्धारण गर्न यसको प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger पहुँच गर्नुहोस्।"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"SurfaceFlinger कम-स्तर सुविधाहरू प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"फ्रेम बफर पढ्नुहोस्"</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"अनुप्रयोगलाई फ्रेम बफरको सामग्री पढ्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger को पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"InputFlinger को कम-स्तर सुविधाहरू प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"वाइफाइ प्रदर्शनहरूलाई विन्यास गर्नुहोस"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"अनुप्रयोगलाई कन्फिगर गर्न र वाइफाइ प्रदर्शनहरूसँग जोड्न अनुमति दिन्छ।"</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"वाइफाइ प्रदर्शनहरू नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"वाइफाइ प्रदर्शनीका तल्लो तह विषेशताहरू नियन्त्रण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"अडियो आउटपुट कैद गर्नुहोस्"</string>
+    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"अनुप्रयोगलाई अडियो आउटपुट कैद गर्न र रिडाइरेक्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"भिडियो आउटपुट कैद गर्नुहोस्"</string>
+    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"अनुप्रयोगलाई भिडियो आउटपुट कैद गर्न र रिडाइरेक्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"सुरक्षित भिडियो आउटपुट कैद गर्नुहोस्"</string>
+    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"अनुप्रयोगलाई सुरक्षित भिडियो आउटपुट कैद गर्न र रिडाइरेक्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"तपाईँका अडियो सेटिङहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"अनुप्रयोगलाई ग्लोबल अडियो सेटिङ्हरू परिमार्जन गर्न अनुमति दिन्छ, जस्तै आवाजको मात्रा र आउटपुटको लागि कुन स्पिकर प्रयोग गर्ने।"</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"अडियो रेकर्ड गर्नुहोस्"</string>
+    <string name="permdesc_recordAudio" msgid="4906839301087980680">"अनुप्रयोगलाई माइक्रोफोनको साथ अडियो रेकर्ड गर्न अनुमति दिन्छ। यस अनुमतिले तपाईंको पुष्टिकरण बिना कुनै पनि समयमा अडियो रेकर्ड गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"तस्बिरहरू र भिडियोहरू लिनुहोस्।"</string>
+    <string name="permdesc_camera" msgid="8497216524735535009">"अनुप्रयोगलाई क्यामेरासँग तस्बिर र भिडियोहरू लिन अनुमति दिन्छ। यस अनुमतिले अनुप्रयोगलाई तपाईंको पुष्टिकरण बिना कुनै पनि समयमा क्यामेरा प्रयोग गर्न स्वीकृति दिन्छ।"</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"क्यामेरा प्रयोगमा हुँदा सूचक LED प्रसारण असक्षम गर्नुहोस्"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"पूर्व-स्थापित प्रणाली अनुप्रयोगलाई क्यामेरा उपयोग सूचक LED अक्षम गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"स्थायी रूपमा ट्याब्लेट अक्षम पार्नुहोस्"</string>
+    <string name="permlab_brick" product="default" msgid="8337817093326370537">"फोनलाई स्थायी रूपमा असक्षम पार्नहोस्"</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"पुरै ट्याब्लेटलाई स्थायी रूपमा असक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ। यो निकै खतरनाक हुन्छ।"</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"सम्पूर्ण फोनलाई स्थायी रूपमा असक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ। यो धेरै खतरनाक हुन्छ।"</string>
+    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"ट्याब्लेट पुनःबुट गर्न जोड गर्नुहोस्"</string>
+    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"फोन पुनःबुट गर्नु जोड गर्नुहोस्"</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"ट्याब्लेटलाई बलपूर्वक पुनःबुट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"फोनलाई बलपुर्वक पुनःबुट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"USB भण्डारण फाइल प्रणाली पहुँच गर्नुहोस्"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"SD कार्ड फाइल प्रणाली पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"हटाउन मिल्ने भण्डारणको लागि फाइल प्रणालीहरू माउन्ट र अनमाउन्ट गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB भण्डारण मेट्नुहोस्"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD कार्ड मेटाउनुहोस्"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"हटाउन मिल्ने भण्डारण फर्म्याट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_access" msgid="3411338632002193846">"आन्तरिक भण्डारणको सूचना प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"आन्तरिक भण्डारणमा सूचना प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_create" msgid="6414757234789336327">"आन्तरिक भण्डारण सिर्जना गर्नुहोस्"</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"आन्तरिक भण्डारण सिर्जना गर्नको लागि अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_destroy" msgid="526928328301618022">"आन्तरिक भण्डारण ध्वस्त पार्नुहोस्"</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"अनुप्रयोगलाई आन्तरिक भण्डारण ध्वस्त पार्न अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"आन्तरिक भण्डारणलाई माउन्ट/अनमाउन्ट गर्नुहोस्"</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"अनुप्रयोगलाई आन्तरिक भण्डारण माउन्ट/अनमाउन्ट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_asec_rename" msgid="7496633954080472417">"आन्तरिक भण्डारणको पुन:नामाकरण गर्नुहोस्"</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"आन्तरीक भण्डारणको पुननामाकरण गर्नको लागि अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"कम्पन नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"अनुप्रयोगलाई भाइब्रेटर नियन्त्रण गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"फ्ल्यासलाईट नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"फ्ल्यास प्रकाशलाई नियन्त्रण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"USB उपकरणहरूको लागि प्राथमिकताहरू र अनुमतिहरू प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"USB उपकरणहरूको लागि प्राथमिकताहरू र अनुमतिहरूलाई व्यवस्थापन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP प्रोटोकल कार्यान्वयन गर्नुहोस्"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"MTP USB प्रोटोकल कार्यान्वयन गर्न केर्नल MTP ड्राइभरको पहुँचको अनुमति दिन्छ।"</string>
+    <string name="permlab_hardware_test" msgid="4148290860400659146">"हार्डवेयर परीक्षण गर्नुहोस्"</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"हार्डवेयर परीक्षणको उद्देश्यका लागि विभिन्न परिधीयहरूलाई नियन्त्रण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"फोन नम्बरहरूमा सिधै कल गर्नुहोस्"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"तपाईँको हस्तक्षेप बेगरै फोन नम्बर कल गर्न अनुप्रयोगलाई अनुमति दिन्छ। यसले अनपेक्षित शुल्क वा कलहरू गराउन सक्छ। यसले अनुप्रयोगलाई आपतकालीन नम्बरहरू कल गर्न अनुमति दिँदैन विचार गर्नुहोस्। खराब अनुप्रयोगहरूले तपाईँको स्वीकार बिना कलहरू गरेर तपाईँलाई बढी पैसा तिराउन सक्छ।"</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"कुनै पनि फोन नम्बरहरू सिधै कल गर्नुहोस्"</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"कुनै पनि फोन नम्बरमा, आकस्मिक नम्बर सहित, तपाईँको हस्तक्षेप बिना कल गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले अनावश्यक र गैर कानुनी कलहरूलाई आकस्मिकमा स्थानान्तरण गर्न सक्छन्।"</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"CDMA ट्याब्लेट सेटअफ सिधै सुरु गर्नुहोस्"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"CDMA फोन सेटअप सिधै सुरु गर्नुहोस्"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"अनुप्रयोगलाई CDMA प्रावधान सुरu गर्न अनुमति दिन्छ। खराब अनुप्रयोगहरूले अनावश्यक रूपमा CDMA प्रावधान सुरु गर्न सक्छन्।"</string>
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"स्थान अपडेट सूचनाहरू नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"रेडियोबाट स्थान अद्यावधिक सूचनाहरूलाई सक्षम/असक्षम गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूबाट प्रयोग नहुने।"</string>
+    <string name="permlab_checkinProperties" msgid="7855259461268734914">"परीक्षण विशेषताहरू पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"परीक्षण सेवाद्वारा विशेषता अपलोड भएको पहुँच पढ्न/लेख्‍न अनुप्रयोगलाई अनुमति दिन्छ। साधारण अनुप्रयोगद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"विजेटहरूको चयन गर्नुहोस्"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"अनुप्रयोगलाई प्रणालीलाई कुन विजेट कुन अनुप्रयोगद्वारा प्रयोग गर्न सकिन्छ भनेर अनुमति दिन्छ। यस अनुमतिसहितको अनुप्रयोगले अन्य अनुप्रयोगहरूलाई व्यक्तिगत डेटाको पहुँच दिन सक्दछ। सामान्य अनुप्रयोगहरूको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"फोनको स्थिति परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"उपकरणका फोन विशेषताहरूलाई नियन्त्रण गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।  यस अनुमतिले एउटा अनुप्रयोगले नेटवर्क स्विच गर्न, फोन रेडियो बन्द गर्न र खोल्न र जस्तै तपाईँ सधै सूचित नगरी गर्न सक्छ।"</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"फोन स्थिति र पहिचान पढ्नुहोस्"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"उपकरणको फोन विशेषताहरूको पहुँच गर्न अनुप्रयोगलाई अनुमति दिन्छ। यस अनुमतिले फोन नम्बर र उपकरणको IDs, कल सक्षम छ कि छैन र कलद्वारा जोडिएको टाढाको नम्बर निर्धारण गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ट्याब्लेटलाई निन्द्रामा जानबाट रोक्नुहोस्"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"फोनलाई निदाउनबाट रोक्नुहोस्"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ट्याब्लेटलाई निस्क्रिय हुनबाट रोक्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"फोनलाई निस्क्रिय हुनबाट रोक्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"ट्याब्लेट पावर खोल्न र बन्द गर्नुहोस्"</string>
+    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"फोन खोल्न वा बन्द गर्न उर्जा प्रदान गर्नुहोस"</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"ट्याब्लेटलाई खोल्न र बन्द गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"अनुप्रयोगलाई फोन खोल्न र बन्द गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_factoryTest" msgid="3715225492696416187">"फ्याक्ट्रि परीक्षण मोडमा चालु गर्नुहोस्"</string>
+    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"ट्याब्लेट हार्डवेयरलाई पुरा पहुँच गर्न दिँदै तल्लो स्तर उत्त्पादक परीक्षणको रूपमा चलाउनुहोस्। ट्याब्लेट उत्त्पादक परीक्षण मोडमा चलिरहेको बेला मात्र उपलब्ध हुन्छ।"</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"तल्लो स्तर उत्त्पादक जस्तै चलाउनुहोस्, पुरा पहुँच दिन फोन हार्डवेयरलाई अनुमति हुन्छ। फोन उत्पादक परीक्षण मोडमा चलिरहेको बेला मात्र उपलब्ध हुन्छ।"</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"वालपेपर सेट गर्नुहोस्"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"अनुप्रयोगलाई प्रणाली वालपेपर सेट गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"तपाईंको वालपेपर आकार समायोजन गर्नुहोस्"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"प्रणाली वालपेपरको आकार सङ्केतहरू मिलाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_masterClear" msgid="2315750423139697397">"कार्यशाला पूर्वनिर्धारणको लागि प्रणाली पुनःसेट गर्नुहोस्"</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"यसका फ्याक्ट्रि सेटिङहरू, कन्फिगरेसन र स्थापित अनुप्रयोगहरूलाई प्रणालीमा पुरै पुनःसेट गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"समय सेट गर्नुहोस्"</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"ट्याब्लेटको घडीको समय बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"फोनको घडीको समय बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"समय क्षेत्र सेट गर्नुहोस्"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"अनुप्रयोगलाई ट्याब्लेटको समय क्षेत्र परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"अनुप्रयोगलाई फोनको समय क्षेत्र परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService को रूपमा कार्य गर्नुहोस्"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"खाता अधिकारीहरूलाई कल गर्नको लागि अनुप्रयोगले अनुमति दिन्छ।"</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"उपकरणमा खाताहरू भेट्टाउनुहोस्"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"अनुप्रयोगलाई ट्याब्लेटद्वारा ज्ञात खाताहरूको सूची पाउन अनुमति दिन्छ। यसले अनुप्रयोगद्वारा तपाईंले स्थापित गर्नुभएको कुनै पनि खाताहरू समावेश गर्न सक्दछ।"</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"फोनलाई थाहा भएका खाताहरूको सूची प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ। यसले तपाईँले स्थापना गर्नु भएका अनुप्रयोगहरूबाट सृजित कुनै खाताहरू समावेश हुन सक्छ।"</string>
+    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"खाता सिर्जना गर्नुहोस् र पासवर्ड सेट गर्नुहोस्"</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"खाताहरूको सिर्जना गर्ने र प्राप्त गर्ने र उनीहरूको पासवर्डहरूको सेटिङ गर्ने सहित खाता प्रबन्धकको खाता आधिकारी सक्षमताहरू प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"खाताहरू थप्नुहोस् वा हटाउनुहोस्"</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"खाताहरू थप्ने र हटाउने जस्ता प्रक्रियाहरू सम्पन्न गर्न, र उनीहरूको पासवर्ड मेटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_useCredentials" msgid="235481396163877642">"उपकरणमा खाताहरूको प्रयोग गर्नुहोस्"</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"अनुप्रयोगलाई प्रमाणीकरण टोकनहरू अनुरोध गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"नेटवर्क जडानहरू हेर्नहोस्"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"अनुप्रयोगलाई नेटवर्क जडानहरू जस्तै कुन नेटवर्कहरू अवस्थित हुन्छन् र जडित छन् जसले हेर्नलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"पूर्ण नेटवर्क पहुँच"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"नेटवर्क सकेटहरू सिर्जना गर्न र कस्टम नेटवर्क प्रोटोकल प्रयोग गर्न अनुप्रयोगलाई अनुमति दिन्छ। ब्राउजर र अन्य अनुप्रयोगहरूले इन्टरनेटमा डेटा पठाउने माध्यम प्रदान गर्छन्, त्यसैले इन्टरनेटमा डेटा पठाउन यो अनुमतिको आवश्यकता पर्दैन।"</string>
+    <string name="permlab_writeApnSettings" msgid="505660159675751896">"नेटवर्क सेटिङहरू र ट्राफिक परिवर्तन गर्नुहोस् / रोक्नुहोस्"</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"अनुप्रयोगलाई नेटवर्क सेटिङहरू परिवर्तन गर्न र सबै नेटवर्क ट्राफिक रोक्न र परीक्षण गर्न अनुमति दिन्छ, उदाहरणको लागि कुनै पनि APN को प्रोक्सी र पोर्ट परिवर्तन गर्न। खराब अनुप्रयोगहरूले तपाईंको ज्ञान बिना नेटवर्क प्याकेटहरू मोनिटर गर्न, पुन:निर्देशित गर्न, वा परिमार्जन गर्न सक्दछ।"</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"नेटवर्क जडान परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"अनुप्रयोगलाई नेटवर्क जडानको स्थिति परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"टेथर्ड नेटवर्क जडान परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"टिथर गरेको नेटवर्क जडानको स्थिति बदल्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"पृष्ठभूमि डेटा प्रयोग सेटिङहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"अनुप्रयोगलाई पृष्ठभूमि डेटा उपयोग सेटिङ परिवर्तन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"वाइ-फाइ जडानहरू हेर्नुहोस्"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"अनुप्रयोगलाई वाइ-फाइ नेटवर्कको बारेमा जानकारी हेर्न अनुमति दिन्छ, जस्तै कि वाइ-फाइ सक्षम छ कि छैन र जडान गरिएको वाइ-फाइ उपकरणहरूको नाम।"</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"वाइ-फाइसँग जोड्नुहोस् वा छुटाउनुहोस्"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"अनुप्रयोगलाई वाइ-फाइ पहुँच बिन्दुबाट जडान गर्न र विच्छेदन गर्न र वाइ-फाइ नेटवर्कहरूको लागि उपकरण कन्फिगरेसनमा परिवर्तनहरू गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"वाइ-फाइ Multicast स्विकृतिलाई अनुमति दिनुहोस्"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"अनुप्रयोगलाई मल्टिकाष्ट ठेगानाहरू प्रयोग गरेर वाइ-फाइ नेटवर्कमा पठाइएको प्याकेटहरू प्राप्त गर्न अनुमति दिन्छ, केवल तपाईंको ट्याब्लेट मात्र होइन। यसले गैर-मल्टिकाष्ट मोड भन्दा बढी उर्जा प्रयोग गर्दछ।"</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"तपाईँको फोन मात्र होइन, मल्टिकास्ट ठेगानाहरूको प्रयोग गरे वाइ-फाइ नेटवर्कका सबै उपकरणहरूमा पठाइएका प्याकेटहरू प्राप्त गर्न अनुप्रयोगलाई अनुमति दिन्छ। यसले गैर-मल्टिकास्ट मोडभन्दा बढी उर्जा प्रयोग गर्छ।"</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"ब्लुटुथ सेटिङहरूमा पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"स्थानीय ब्लुटुथ ट्याब्लेटलाई कन्फिगर गर्नको लागि र टाढाका उपकरणहरूलाई पत्ता लगाउन र जोड्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"अनुप्रयोगलाई स्थानीय ब्लुटुथ फोन कन्फिगर गर्न र टाढाका उपकरणहरूसँग खोज गर्न र जोडी गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAXसँग जोड्नुहोस् वा छुटाउनुहोस्"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"अनुप्रयोगलाई वाइम्याक्स सक्षम छ कि छैन र जडान भएको कुनै पनि वाइम्याक्स नेटवर्कहरूको बारेमा जानकारी निर्धारिण गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"वाइम्याक्स स्थिति परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"अनुप्रयोगलाई वाइम्याक्स नेटवर्कहरूबाट ट्याब्लेट जडान गर्न र ट्याब्लेट विच्छेदन गर्न अनुमति दिन्छ।"</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"वाइम्याक्स नेटवर्कहरूसँग फोन जोड्न र छुटाउन अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"ब्लुटुथ उपकरणहरूसँग जोडी मिलाउनुहोस्"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ट्याब्लेटमा ब्लुटुथको कन्फिगुरेसनलाई हेर्न र बनाउन र जोडी उपकरणहरूसँग जडानहरूलाई स्वीकार गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"अनुप्रयोगलाई फोनमा ब्लुटुथको कन्फिगरेसन हेर्न र जोडी भएका उपकरणहरूसँग जडानहरू बनाउन र स्वीकार गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"नजिक क्षेत्र संचार नियन्त्रणहरू"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"अनुप्रयोगलाई नयाँ क्षेत्र संचार (NFC) ट्यागहरू, कार्डहरू र पाठकहरूसँग अन्तर्क्रिया गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"स्क्रिन लक असक्षम पार्नुहोस्"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"कुनै सम्बन्धित पासवर्ड सुरक्षा र किलकलाई असक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ। उदाहरणको लागि, अन्तर्गमन फोन कल प्राप्त गर्दा फोनले किलकलाई असक्षम पार्छ, त्यसपछि कल सकिएको बेला किलक पुनःसक्षम पार्छ।"</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"समीकरण सेटिङहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"अनुप्रयोगलाई खाताको लागि सिङ्क सेटिङहरू पढ्न अनुमति दिन्छ। उदाहरणको लागि यसले व्यक्तिहरको अनुप्रयोग खातासँग सिङ्क भएको नभएको निर्धारण गर्न सक्दछ।"</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"टगल सिङ्क खुला र बन्द"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"अनुप्रयोगहरूलाई खाताको लागि सिङ्क सेटिङहरू परिमार्जन गर्न अनुमति दिन्छ। उदाहरणको लागि, यो खातासँग व्यक्ति अनुप्रयोगको सिङ्क सक्षम गर्न प्रयोग गर्न सकिन्छ।"</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"सिङ्क तथ्याङ्कहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"अनुप्रयोगलाई खाताको लागि समीकरणको आँकडा समीकरण घटनाहरूको  इतिहास र समीकरण गरिएको डेटाको मापन समेत, पढ्न अनुमति दिन्छ।"</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"सदस्य बनाइका फिडहरू पढ्नुहोस्"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"अनुप्रयोगलाई अहिलेको समीकरण गरिएका सूचकहरू बारे विवरणहरू लिने अनुमति दिन्छ।"</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"सदस्य बनाइका फिडहरू लेख्नुहोस्"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"तपाईँका भर्खरै सिङ्क फिडहरूलाई परिमार्जन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। तपाईँको सिङ्क फिडहरूलाई परिवर्तन गर्नको लागि यसले  खराब अनुप्रयोगलाई अनुमति दिन सक्छ।"</string>
+    <string name="permlab_readDictionary" msgid="4107101525746035718">"तपाईँले शब्दकोशमा थपेका शब्दहरू पढ्नुहोस्"</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"अनुप्रयोगलाई प्रयोगकर्ताले प्रयोगकर्ता शब्दकोशमा भण्डारण गरेका हुन सक्ने सबै शब्दहरू, नामहरू र पदावलीहरू पढ्न अनुमति दिन्छ।"</string>
+    <string name="permlab_writeDictionary" msgid="2183110402314441106">"प्रयोगकर्ता-परिभाषित शब्दकोशमा शब्दहरू थप्नुहोस्।"</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"प्रयोगकर्ता शब्दकोशमा नयाँ शब्द लेख्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"सुरक्षित गरिएका भण्डारण पहुँचको परीक्षण गर्नुहोस्"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"सुरक्षित गरिएका भण्डारण पहुँचको परीक्षण गर्नुहोस्"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"भविष्य उपकरणहरूमा उपलब्ध हुने USB भण्डारणको लागि अनुमति परीक्षण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"भविष्य उपकरणहरूमा उपलब्ध हुने SD कार्डको लागि अनुमति परीक्षण गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"तपाईँको USB भण्डारणको विषयवस्तुहरूलाई परिमार्जन गर्नुहोस् वा मेटाउनुहोस्"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"तपाईँको SD कार्डको विषयसूची परिमार्जन गर्नुहोस् वा मेट्नुहोस्"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"USB भण्डारणमा लेख्‍नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"अनुप्रयोगलाई SD कार्डमा लेख्न अनुमति दिन्छ।"</string>
+    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"आन्तरिक मिडिया भण्डारण सामग्रीहरू परिमार्जन गर्नुहोस्/मेटाउनुहोस्"</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"अनुप्रयोगलाई आन्तरिक मिडिया भण्डारणको सामग्रीहरू परिमार्जन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"कागजात भण्डारण प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"अनुप्रयोगलाई कागजात भण्डारण समायोजन गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"सबै उपयोगकर्ताहरूको बाह्य भण्डारणको पहुँच राख्नुहोस्"</string>
+    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"अनुप्रयोगलाई सबै उपयोगकर्ताहरूको लागि बाह्य भण्डारणमाथि पहुँच राख्न अनुमति दिन्छ।"</string>
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"क्यास फाइल प्रणाली पहुँच गर्नुहोस्।"</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"केस फाइल प्रणालीलाई पढ्न र लेख्‍नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_use_sip" msgid="5986952362795870502">"इन्टरनेट कलहरू गर्नुहोस् वा प्राप्त गर्नुहोस्"</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"इन्टरनेट कल गर्न/प्राप्त गर्न SIP सेवालाई प्रयोग गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"नेटवर्क उपयोगको इतिहास पढ्नुहोस्"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"निश्चित नेटवर्कहरू र अनुप्रयोगहरूको लागि ऐतिहासिक नेटवर्क उपयोग पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"नेटवर्क नीति प्रबन्ध गर्नुहोस्"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"नेटवर्क नीतिहरू व्यवस्थापन गर्न र अनुप्रयोग-विशेष नियमहरू परिभाषित गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"नेटवर्क उपयोग लेखालाई परिमार्जन गर्नुहोस्"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"अनुप्रयोगलाई कसरी अनुप्रयोगहरूको विरूद्धमा कसरी नेटवर्क उपयोगी अकाउन्टेड छ भनेर परिमार्जन गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूद्वारा प्रयोगको लागि होइन।"</string>
+    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"सकेटको निशानहरू परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"मार्ग दर्शनको लागि अनुप्रयोगलाई सकेटको निशानहरू परिवर्तन गर्न अनुमति दिन्छ"</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"सूचनाहरू पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"अन्य अनुप्रयोगहरूबाट पोस्ट गरिएकासहित पुनःप्राप्त गर्न, परीक्षण गर्न र सूचनाहरू हटाउन अनुप्रयोगहरूलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"जानकारी श्रोता सेवामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"होल्डरलाई सूचना श्रोता सेवाको शीर्ष-स्तरको इन्टरफेस बाँध्न अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"वाहक-प्रदान विन्यास अनुप्रयोग सुरु गर्नुहोस्"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"प्रयोगकर्तालाई वाहक-प्रदान विन्यास अनुप्रयोग सुरु गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्ने छैन।"</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"सञ्जाल अवस्थाका पर्यवेक्षणका लागि सुन्नुहोस्"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"सञ्जाल अवस्थाका पर्यवेक्षण सुन्नका लागि अनुप्रयोगलाई अनुमति दिन्छ।सामान्य अनुप्रयोगलाई चाँहिदै नचाँहिन सक्छ।"</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"पासवर्ड नियमहरू मिलाउनुहोस्"</string>
+    <string name="policydesc_limitPassword" msgid="3252114203919510394">"स्क्रिन-अनलक पासवर्डहरूमा अनुमति दिइएको लम्बाइ र अक्षरहरू नियन्त्रण गर्नुहोस्।"</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"मोनिटर स्क्रिन-अनलक प्रयत्नहरू"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"स्क्रिन अनलक गर्दा गलत पासवर्ड टाइप भएको संख्या निरीक्षण गर्नुहोस् र यदि निकै धेरै गलत पासवर्डहरू टाइप भएका छन भने ट्याब्लेट लक गर्नुहोस् वा ट्याब्लेटका सबै डेटा मेट्नुहोस्।"</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"स्क्रिनअनलक गर्दा गलत पासवर्ड टाइप भएको संख्या निरीक्षण गर्नुहोस् र यदि निकै धेरै गलत पासवर्डहरू टाइप भएका छन भने फोन लक गर्नुहोस् वा फोनका सबै डेटा मेट्नुहोस्।"</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"स्क्रिन-अनलक पासवर्ड बदल्नुहोस्"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"स्क्रिन-अनलक पासवर्ड परिवर्तन गर्नुहोस्।"</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"स्क्रिन लक गर्नुहोस्।"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"कसरी र कहिले स्क्रिन लक गर्ने नियन्त्रण गर्नुहोस्।"</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"सबै डेटा मेट्नुहोस्"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"एउटा फ्याक्ट्रि डेटा पुनःसेट गरेर चेतावनी नआउँदै ट्याबल्टको डेटा मेट्नुहोस्।"</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"एउटा फ्याक्ट्रि डेटा पुनःसेट गरेर चेतावनी नआउँदै फोनको डेटा मेट्नुहोस्।"</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"उपकरण विश्वव्यापी प्रोक्सी मिलाउनुहोस्"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"नीति सक्षम हुँदा प्रयोग हुने उपकरण  विश्वव्यापी प्रोक्सी सेट गर्नुहोस्। प्रथम उपकरण प्रशासशनले मात्र प्रभावकारी विश्वव्यापी प्रोक्सी सेट गर्छ।"</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"लक-स्क्रिन पासवर्ड अन्त सेट गर्नुहोस्"</string>
+    <string name="policydesc_expirePassword" msgid="1729725226314691591">"प्रायः कति छिटो लक-स्क्रिन पासवर्ड बदल्नु पर्छ यसलाई नियन्त्रण गर्नुहोस्।"</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"भण्डारण इन्क्रिप्सन मिलाउनुहोस्"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"भण्डार गरिएको डेटा इन्क्रिप्ट हुनु आवश्यक छ।"</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"क्यामेरालाई असक्षम गराउनुहोस्"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"सबै उपकरण क्यामराहरूको प्रयोग रोक्नुहोस्"</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"किगार्डमा भएका विशेषताहरू असक्षम पार्नुहोस्"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"केही किगार्ड विशेषताहरूको प्रयोग रोक्नुहोस्।"</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"गृह"</item>
+    <item msgid="869923650527136615">"मोबाइल"</item>
+    <item msgid="7897544654242874543">"काम गर्नुहोस्"</item>
+    <item msgid="1103601433382158155">"कार्य फ्याक्स"</item>
+    <item msgid="1735177144948329370">"घरको फ्याक्स"</item>
+    <item msgid="603878674477207394">"पेजर"</item>
+    <item msgid="1650824275177931637">"अन्य"</item>
+    <item msgid="9192514806975898961">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"गृह"</item>
+    <item msgid="7084237356602625604">"काम"</item>
+    <item msgid="1112044410659011023">"अन्य"</item>
+    <item msgid="2374913952870110618">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"गृह"</item>
+    <item msgid="5629153956045109251">"काम"</item>
+    <item msgid="4966604264500343469">"अन्य"</item>
+    <item msgid="4932682847595299369">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"गृह"</item>
+    <item msgid="1359644565647383708">"काम"</item>
+    <item msgid="7868549401053615677">"अन्य"</item>
+    <item msgid="3145118944639869809">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"काम गर्नुहोस्"</item>
+    <item msgid="4378074129049520373">"अन्य"</item>
+    <item msgid="3455047468583965104">"अनुकूलन"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"स्काइप"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"अनुकूलन"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"गृह"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"मोबाइल"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"काम"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"कार्य फ्याक्स"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"घरको फ्याक्स"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"पेजर"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"अन्य"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"कलब्याक"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"कार"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"कम्पनी मुख्य"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"मुख्य"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"अन्य फ्याक्स"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"रेडियो"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"टेलेक्स"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"कार्य मोबाइल"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"कार्य पेजर"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"सहायक"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"अनुकूलन"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"जन्मदिन"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"वार्षिक समारोह"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"अन्य"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"अनुकूलन"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"गृह"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"काम"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"अन्य"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"मोबाइल"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"अनुकूलन"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"गृह"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"काम"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"अन्य"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"अनुकूलन"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"गृह"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"काम"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"अन्य"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"अनुकूलन"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"स्काइप"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"ह्याङआउटहरू"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"काम"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"अन्य"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"अनुकूलन"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"अनुकूलन"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"सहायक"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"भाइ"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"बच्चो"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"आन्तरिक साझेदार"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"बुबा"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"मित्र"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"ब्यवस्थापक"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"आमा"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"अभिभावक"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"पार्टनर"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"द्वारा उल्लिखित"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"आफन्त"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"बहिनी"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"पति-पत्नि"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"अनुकूलन"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"गृह"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"काम गर्नुहोस्"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"अन्य"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK र नयाँ PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"नयाँ PIN कोड"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"पासवर्ड टाइप गर्न छुनुहोस्"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"अनलक गर्न पासवर्ड टाइप गर्नुहोस्।"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"अनलक गर्न PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"गलत PIN कोड।"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"अनलक गर्न मेनु थिच्नुहोस् र त्यसपछि ० थिच्नुहोस्।"</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"आपतकालीन नम्बर"</string>
+    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"सेवा छैन।"</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"स्क्रिन लक गरिएको।"</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"अनलक वा आपतकालीन कल गर्न मेनु थिच्नुहोस्।"</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"अनलक गर्न मेनु थिच्नुहोस्।"</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"अनलक गर्नु ढाँचा खिच्नुहोस्"</string>
+    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"आपतकालीन कलहरू"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"कलमा फर्किनुहोस्"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"सही!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"फेरि प्रयास गर्नुहोस्"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"फेरि प्रयास गर्नुहोस्"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"अत्याधिक मोहडा खोल्ने प्रयासहरू बढी भए।"</string>
+    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"चार्ज हुँदै, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_charged" msgid="321635745684060624">"चार्ज भयो"</string>
+    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_low_battery" msgid="1482873981919249740">"तपाईँको चार्जर जोड्नुहोस्।"</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM कार्ड छैन"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"ट्याब्लेटमा SIM कार्ड छैन।"</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"फोनमा SIM कार्ड छैन।"</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM कार्ड घुसाउनुहोस्"</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM कार्ड छैन वा पढ्न मिल्दैन। SIM कार्ड हाल्नुहोस्।"</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"प्रयोग गर्न अयोग्य SIM कार्ड"</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"तपाईंको SIM कार्ड स्थायी रूपमा अक्षम भयो।\n अर्को SIM कार्डको लागि आफनो ताररहित सेवा प्रदायकसँग सम्पर्क गर्नुहोस्।"</string>
+    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"अघिल्लो ट्रयाक बटन"</string>
+    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"अर्को ट्रयाक बटन"</string>
+    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"रोक्ने बटन"</string>
+    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"बजाउने बटन"</string>
+    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"बटन रोक्नुहोस्"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"आपतकालीन कलहरू मात्र"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"नेटवर्क लक छ"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM कार्ड PUK-लक गरिएको छ।"</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"प्रयोगकर्ता निर्देशक वा ग्राहक सेवा सम्पर्क हर्नुहोस्।"</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM कार्ड लक गरिएको छ।"</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM कार्ड अनलक गरिँदै..."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"तपाईंले गलत तरिकाले आफ्नो पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नुभयो। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। पछि <xliff:g id="NUMBER_1">%d</xliff:g> थप असफल कोसिसहरू, तपाईँको Google साइन इन प्रयोग गरी तपाईँको ट्याब्लेट अनलक गर्न भनिने छ।\n\n  <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा फरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"तपाईँले <xliff:g id="NUMBER_0">%d</xliff:g> पटक गलत तरिकाले तपाईँको अनलक ढाँचालाई कोर्नु भएको छ। पछि <xliff:g id="NUMBER_1">%d</xliff:g> अरू धेरै असफल कोसिसहरूपछि, तपाईँलाई तपाईँको फोन Google साइन इन प्रयोग गरेर अनलक गर्नको लागि सोधिने छ। \n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"तपाईँले <xliff:g id="NUMBER_0">%d</xliff:g> पटक ट्याब्लेटलाई अनलक गर्नको लागि गलत तरिकाले कोशिस गर्नुभएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> अरू धेरै असफल कोसिसहरूपछि, ट्याब्लेट फ्याट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ र सबै प्रयोगकर्ता डेटा हराउने छन्।"</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"तपाईंले गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक फोन अनलक गर्ने प्रयत्न गर्नुभयो। <xliff:g id="NUMBER_1">%d</xliff:g> बढी असफल प्रयत्नहरू पछि, फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ र सबै प्रयोगकर्ता डेटा हराउने छन्।"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"तपाईँले ट्यब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER">%d</xliff:g> पटक प्रयास गर्नु भएको छ। अब ट्याब्लेटलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ।"</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"तपाईंले गलत तरिकाले फोन <xliff:g id="NUMBER">%d</xliff:g> पटक अनलक गर्ने प्रयत्न गर्नुभयो। अब फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ।"</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"<xliff:g id="NUMBER">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"ढाँचा बिर्सनु भयो?"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"खाता अनलक"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"निकै धेरै कोसिसहरू"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"अनलक गर्नको लागि, तपाईँको Google खातासँग साइन इन गर्नुहोस्।"</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"प्रयोगकर्तानाम (इमेल)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"पासवर्ड:"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"साइन इन गर्नुहोस्"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"अमान्य प्रयोगकर्तानाम वा पासवर्ड"</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"तपाईँको प्रयोगकर्ता नाम वा पासवर्ड बिर्सनुभयो?\n भ्रमण गर्नुहोस"<b>"google.com/accounts/recovery"</b></string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"जाँच गर्दै..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"खोल्नुहोस्"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"आवाज चालु छ।"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"ध्वनि बन्द"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"ढाँचा सुरु भयो"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"ढाँचा हटाइएको"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"सेल थप गरियो"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"ढाँचा पुरा भयो"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. विजेट %2$d of %3$d।"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"विजेट थप गर्नुहोस्।"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"खाली"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"अनलक क्षेत्र विस्तार भयो।"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"अनलक क्षेत्र भत्कियो।"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> विजेट।"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"प्रयोगकर्ता छनौटकर्ता"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"स्थिति"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"क्यामेरा"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"मिडिया नियन्त्रणहरू"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"विजेट पुनःक्रम गर्ने सुरु भयो।"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"विजेट पुनःक्रम समाप्त भएको छ।"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"विजेट <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> मेटाइयो।"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"अनलक क्षेत्र बढाउनुहोस्।"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"स्लाइड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ढाँचा अनलक।"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलक"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin अनलक"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ढाँचा क्षेत्र।"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र।"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?१२३"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"अक्षर"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"शब्द"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"लिङ्क"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"लाइन"</string>
+    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"कार्यशाला परीक्षण असफल भयो।"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"FACTORY_TEST कार्रवाइले /system/app मा स्थापित प्याकेजहरूको लागि मात्र समर्थन गर्छ।"</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"कुनै प्याकेज फेला पार्न सकिएन जसले FACTORY_TEST कार्य प्रदान गर्दछ।"</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"पुनःबुट गर्नुहोस्"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"यस \"<xliff:g id="TITLE">%s</xliff:g>\" मा भएको पृष्ठले बताउँछ:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"जाभास्क्रिप्ट"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"मार्गनिर्देशन पक्का गर्नुहोस्"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"यस पृष्ठलाई छोड्नुहोस्"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"यही पृष्ठमा रहनुहोस्"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nके तपाईँ यो पेजबाट नेभिगेट गर्न चाहनु हुन्छ भन्ने निश्चत छ?"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"निश्चित गर्नुहोस्"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"जुक्ति: जुमलाई ठूलो र सानो पार्न दुई पटक हान्नुहोस्।"</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"स्वतः भर्ने"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"अटोफिल सेटअप गर्नुहोस्"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$१$२$३"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"प्रान्त"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"हुलाकी कोड"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"राज्य"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"ZIP कोड"</string>
+    <string name="autofill_county" msgid="237073771020362891">"काउन्टी"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"टापु"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"जिल्ला"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"विभाग"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"प्रशासकीय क्षेत्र"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"पेरिस"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"क्षेत्र"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"इमिरेट"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"तपाईँका बुकमार्कहरू र इतिहास पढ्नुहोस्"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"ब्राउजरले भ्रमण गरेको सबै URL हरूको इतिहास र ब्राउजरका सबै बुकमार्कहरू पढ्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। नोट: यो अनुमतिलाई तेस्रो पक्ष ब्राउजरहरूद्वारा वा वेब ब्राउज गर्ने क्षमताद्वारा बलपूर्वक गराउन सकिँदैन।"</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"वेब बुकमार्कहरू र इतिहास लेख्नुहोस्"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"अनुप्रयोगलाई तपाईंको ट्याब्लेटमा भण्डार गरिएको ब्राउजरको इतिहास वा बुकमार्कहरू परिमार्जन गर्न अनुमति दिन्छ। यसले अनुप्रयोगलाई ब्राजर डेटा मेटाउन वा परिमार्जन गर्न अनुमति दिन सक्दछ। टिप्पणी: यो अनुमति वेब ब्राउज गर्ने क्षमताहरूको साथ तेस्रो-पार्टी ब्राउजर वा अन्य अनुप्रयोगहरूद्वारा लागू गरिएको होइन।"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"तपाईँको फोनमा भण्डारण भएको ब्राउजरको इतिहास वा बुकमार्कहरू परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। यसले सायद ब्राउजर डेटालाई मेट्न वा परिवर्तन गर्नको लागि अनुप्रयोगलाई अनुमति दिन्छ। नोट: वेब ब्राउज गर्ने क्षमतासहितका अन्य अनुप्रयोगहरू वा तेस्रो- पक्ष ब्राउजरद्वारा सायद यस अनुमतिलाई लागु गर्न सकिंदैन।"</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"एउटा आलर्म सेट गर्नुहोस्"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"स्थापना गरिएको सङ्केत घडी अनुप्रयोगमा सङ्केत समय मिलाउन अनुप्रयोगलाई अनुमति दिन्छ। केही सङ्केत घडी अनुप्रयोगहरूले यो सुविधा कार्यान्वयन नगर्न सक्छन्।"</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"भ्वाइसमेल थप गर्नुहोस्"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"तपाईँको भ्वाइसमेल इनबक्समा सन्देश थप्नको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"भूस्थान अनुमतिहरू ब्राउजर परिवर्तन गर्नुहोस्"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"ब्राउजरको भू-स्थान अनुमतिहरू परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। खराब अनुप्रयोगहरूले  स्थान सूचना मनपरी वेब साइटहरूमा पठाउने अनुमतिको लागि यसलाई प्रयोग गर्न सक्छन्।"</string>
+    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"प्यकेजहरूको निरीक्षण गर्नुहोस्"</string>
+    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"प्याकेज स्थापना योग्य छ कि भनेर रुजु गर्न अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"एउटा प्याकेज रुजुकर्तामा बाँध्नुहोस्"</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"होल्डरलाई प्याकेज प्रमाणितकर्ताहरूको अनुरोधहरू बनाउन अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिले पनि आवश्यक नपर्न सक्दछ।"</string>
+    <string name="permlab_serialPort" msgid="546083327654631076">"पहुँच सिरियल पोर्टहरू"</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"होल्डरलाई SerialManager API प्रयोग गरेर सिरियल पोर्टहरू पहुँच गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"विषयसूची प्रदातालाई बाह्य रूपमा पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"सेलबाट धारकले विषयवस्तु प्रदायकहरूसम्मको पहुँच पाउन अनुमति दिन्छ। सामान्य अनुप्रयोगहरूलाई कहिल्यै आवश्यक पर्दैन।"</string>
+    <string name="permlab_updateLock" msgid="3527558366616680889">"स्वचालित उपकरण अपडेटहरू हतोत्साहित गर्नुहोस्"</string>
+    <string name="permdesc_updateLock" msgid="1655625832166778492">"होल्डरलाई उपकरण अपग्रेड गर्न गैर पारस्परिक पुनःबुटको लागि उचित समयको बारेमा प्रणालीमा जानाकारी प्रस्तावको लागि अनुमति दिन्छ।"</string>
+    <string name="save_password_message" msgid="767344687139195790">"के तपाईं ब्राउजरले यो पासवर्ड सम्झेको चाहनुहुन्छ?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"अहिले होइन"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"सम्झनुहोस्"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"कहिल्यै पनि होइन"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"यो पृष्ठ खोल्न तपाईँलाई अनुमति छैन।"</string>
+    <string name="text_copied" msgid="4985729524670131385">"क्लिपबोर्डमा प्रतिलिप गरिएको पाठ।"</string>
+    <string name="more_item_label" msgid="4650918923083320495">"बढी"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"मेनु+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"ठाउँ"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"प्रविष्टि गर्नुहोस्"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"मेटाउनुहोस्"</string>
+    <string name="search_go" msgid="8298016669822141719">"खोज्नुहोस्"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"खोज्नुहोस्"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"जिज्ञासा खोज गर्नुहोस्"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"प्रश्‍न हटाउनुहोस्"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"जिज्ञासा पेस गर्नुहोस्"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"भ्वाइस खोजी"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"छोएर अन्वेषण गर्ने सक्षम पार्न चाहनु हुन्छ?"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>ले स्पर्षद्वारा अन्वेषण सक्षम गर्न चाहन्छ। स्पर्षद्वारा अन्वेषण सक्षम भएको बेला, तपाईँ आफ्नो औँलाको मुनि भएका विषयवस्तुहरू बारे सुन्न वा विवरण हेर्न सक्नुहुन्छ वा ट्याब्लेटसँग अन्तर्क्रिया गर्न इशारा गर्नुहोस्।"</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g>ले स्पर्षद्वारा अन्वेषण सक्षम गर्न चाहन्छ। स्पर्षद्वारा अन्वेषण सक्षम भएको बेला तपाईँ आफ्नो औँलाको मुनि भएका विषयवस्तुहरू बारे सुन्न वा विवरण हेर्न सक्नुहुन्छ वा फोनसँग अन्तर्क्रिया गर्न इशारा गर्नुहोस्।"</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"१ महिना अघि"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"१ महिना अघि"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"१ सेकेन्ड अघि"</item>
+    <item quantity="other" msgid="3903706804349556379">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्ड अघि"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"१ मिनेट अघि"</item>
+    <item quantity="other" msgid="2176942008915455116">"<xliff:g id="COUNT">%d</xliff:g> मिनेट अघि"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"१ घन्टा अघि"</item>
+    <item quantity="other" msgid="2467273239587587569">"<xliff:g id="COUNT">%d</xliff:g> घन्टा अघि"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"अन्तिम <xliff:g id="COUNT">%d</xliff:g> दिन"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"अन्तिम महिना"</string>
+    <string name="older" msgid="5211975022815554840">"पुरानो"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"हिजो"</item>
+    <item quantity="other" msgid="2479586466153314633">"<xliff:g id="COUNT">%d</xliff:g> दिन अघि"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"१ सेकेन्डमा"</item>
+    <item quantity="other" msgid="1241926116443974687">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"१ मिनेटमा"</item>
+    <item quantity="other" msgid="3330713936399448749">"<xliff:g id="COUNT">%d</xliff:g>मिनेटमा"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"१ घन्टामा"</item>
+    <item quantity="other" msgid="547290677353727389">"<xliff:g id="COUNT">%d</xliff:g> घन्टामा"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"भोलि"</item>
+    <item quantity="other" msgid="5109449375100953247">"<xliff:g id="COUNT">%d</xliff:g> दिनमा"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"१ सेकेन्ड अघि"</item>
+    <item quantity="other" msgid="3699169366650930415">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्ड अगाडि"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"१ मिनेट अघि"</item>
+    <item quantity="other" msgid="851164968597150710">"<xliff:g id="COUNT">%d</xliff:g> मिनेट अघि"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"१ घन्टा अघि"</item>
+    <item quantity="other" msgid="6889970745748538901">"<xliff:g id="COUNT">%d</xliff:g> घन्टा अघि"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"हिजो"</item>
+    <item quantity="other" msgid="3453342639616481191">"<xliff:g id="COUNT">%d</xliff:g> दिन अघि"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"१ सेकन्ड"</item>
+    <item quantity="other" msgid="5495880108825805108">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"१ मिनेटमा"</item>
+    <item quantity="other" msgid="4216113292706568726">"<xliff:g id="COUNT">%d</xliff:g> मिनेटमा"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"१ घन्टामा"</item>
+    <item quantity="other" msgid="3705373766798013406">"<xliff:g id="COUNT">%d</xliff:g> घन्टामा"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"भोलि"</item>
+    <item quantity="other" msgid="2973062968038355991">"दिन<xliff:g id="COUNT">%d</xliff:g> मा"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"<xliff:g id="DATE">%s</xliff:g> मा"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"<xliff:g id="TIME">%s</xliff:g> मा"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"<xliff:g id="YEAR">%s</xliff:g> मा"</string>
+    <string name="day" msgid="8144195776058119424">"दिन"</string>
+    <string name="days" msgid="4774547661021344602">"दिन"</string>
+    <string name="hour" msgid="2126771916426189481">"घन्टा"</string>
+    <string name="hours" msgid="894424005266852993">"घन्टा"</string>
+    <string name="minute" msgid="9148878657703769868">"मिनेट"</string>
+    <string name="minutes" msgid="5646001005827034509">"मिनेट"</string>
+    <string name="second" msgid="3184235808021478">"सेकेन्ड"</string>
+    <string name="seconds" msgid="3161515347216589235">"सेकेन्ड"</string>
+    <string name="week" msgid="5617961537173061583">"हप्ता"</string>
+    <string name="weeks" msgid="6509623834583944518">"हप्ताहरू"</string>
+    <string name="year" msgid="4001118221013892076">"वर्ष"</string>
+    <string name="years" msgid="6881577717993213522">"वर्षहरू"</string>
+  <plurals name="duration_seconds">
+    <item quantity="one" msgid="6962015528372969481">"१ सेकेन्ड"</item>
+    <item quantity="other" msgid="1886107766577166786">"<xliff:g id="COUNT">%d</xliff:g> सेकेन्ड"</item>
+  </plurals>
+  <plurals name="duration_minutes">
+    <item quantity="one" msgid="4915414002546085617">"१ मिनेट"</item>
+    <item quantity="other" msgid="3165187169224908775">"<xliff:g id="COUNT">%d</xliff:g> मिनेट"</item>
+  </plurals>
+  <plurals name="duration_hours">
+    <item quantity="one" msgid="8917467491248809972">"१ घन्टा"</item>
+    <item quantity="other" msgid="3863962854246773930">"<xliff:g id="COUNT">%d</xliff:g> घन्टा"</item>
+  </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"भिडियो समस्या"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"यो भिडियो यस उपकरणको लागि स्ट्रिमिङ गर्न मान्य छैन।"</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"यो भिडियो चलाउन सक्दैन।"</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"ठीक छ"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"मध्यान्न"</string>
+    <string name="Noon" msgid="3342127745230013127">"मध्यान्ह"</string>
+    <string name="midnight" msgid="7166259508850457595">"मध्यरात"</string>
+    <string name="Midnight" msgid="5630806906897892201">"मध्यरात"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"सबैलाई चयन गर्नुहोस्"</string>
+    <string name="cut" msgid="3092569408438626261">"काट्नुहोस्"</string>
+    <string name="copy" msgid="2681946229533511987">"प्रतिलिपि बनाउनुहोस्"</string>
+    <string name="paste" msgid="5629880836805036433">"टाँस्नुहोस्"</string>
+    <string name="replace" msgid="5781686059063148930">"विस्थापन गर्नुहोस्…"</string>
+    <string name="delete" msgid="6098684844021697789">"मेट्नुहोस्"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"URL को प्रतिलिप गर्नुहोस्"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"पाठ चयन गर्नुहोस्"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"पाठ चयनता"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"शब्दकोशमा थप्नुहोस्"</string>
+    <string name="deleteText" msgid="6979668428458199034">"मेट्नुहोस्"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"निवेश विधि"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"पाठ कार्यहरू"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"भण्डारण ठाउँ सकिँदै छ"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"सायद केही प्रणाली कार्यक्रमहरूले काम गर्दैनन्"</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> चलिरहेको छ"</string>
+    <string name="app_running_notification_text" msgid="4653586947747330058">"थप सूचनाको लागि छुनुहोस् वा अनुप्रयोग बन्द गर्नुहोस्।"</string>
+    <string name="ok" msgid="5970060430562524910">"ठिक छ"</string>
+    <string name="cancel" msgid="6442560571259935130">"रद्द गर्नुहोस्"</string>
+    <string name="yes" msgid="5362982303337969312">"ठिक छ"</string>
+    <string name="no" msgid="5141531044935541497">"रद्द गर्नुहोस्"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"सावधानी"</string>
+    <string name="loading" msgid="7933681260296021180">"लोड हुँदै..."</string>
+    <string name="capital_on" msgid="1544682755514494298">"चालु"</string>
+    <string name="capital_off" msgid="6815870386972805832">"बन्द"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"प्रयोग गरेर कारबाही पुरा गर्नुहोस्"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"यस कार्यको लागि पूर्वनिर्धारितबाट प्रयोग गर्नुहोस्।"</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"प्रणाली सेटिङहरूमा पूर्वनिर्धारितलाई हटाउनुहोस् &gt; अनुप्रयोगहरू &gt; डाउनलोड।"</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"एउटा कार्यको चयन गर्नुहोस्"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB उपकरणको लागि एउटा अनुप्रयोग छान्नुहोस्"</string>
+    <string name="noApplications" msgid="2991814273936504689">"कुनै पनि अनुप्रयोगहरूले यो कार्य गर्न सक्दैनन्।"</string>
+    <string name="aerr_title" msgid="1905800560317137752"></string>
+    <string name="aerr_application" msgid="932628488013092776">"दुर्भाग्यवश, <xliff:g id="APPLICATION">%1$s</xliff:g>ले रोकेको छ।"</string>
+    <string name="aerr_process" msgid="4507058997035697579">"दुर्भाग्यवश, प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> बन्द भयो।"</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g>ले कार्य गरिरहेको छैन।\n\nके तपाईँ यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="anr_activity_process" msgid="5776209883299089767">"गतिविधि <xliff:g id="ACTIVITY">%1$s</xliff:g> ले प्रतिक्रिया देखाइरहेको छैन।\n\nके तपाईं यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> जवाफ दिइरहेको छैन। के तपाईँ यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="anr_process" msgid="6513209874880517125">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g>ले कार्य गरिरहेको छैन।\n\nके तपाईँ यसलाई बन्द गर्न चाहनु हुन्छ?"</string>
+    <string name="force_close" msgid="8346072094521265605">"ठिक छ"</string>
+    <string name="report" msgid="4060218260984795706">"रिपोर्ट गर्नुहोस्"</string>
+    <string name="wait" msgid="7147118217226317732">"प्रतीक्षा गर्नुहोस्"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"पृष्ठ गैर जिम्मेवारी भएको छ।\n\nके तपाईं यसलाई बन्द गर्न चाहनुहुन्छ?"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"अनुप्रयोग पुनः निर्देशीत"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> अहिले चलिरहेको छ।"</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> वास्तविक सुरुवात भएको थियो।"</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"स्केल"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"सधैँ देखाउनुहोस्"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"प्रणाली सेटिङहरूमा यसलाई पुनःसक्षम गराउनुहोस् &gt; अनुप्रयोगहरू &gt; डाउनलोड गरेको।"</string>
+    <string name="smv_application" msgid="3307209192155442829">"अनुप्रयोग <xliff:g id="APPLICATION">%1$s</xliff:g> (प्रक्रिया <xliff:g id="PROCESS">%2$s</xliff:g>) ले यसको स्वयं-लागु गरिएको स्ट्रिटमोड नीति उलङ्घन गरेको छ।"</string>
+    <string name="smv_process" msgid="5120397012047462446">"प्रक्रिया <xliff:g id="PROCESS">%1$s</xliff:g> यसको आफ्नै कडामोड नीतिका कारण उल्लङ्घन गरिएको छ।"</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"एन्ड्रोइड अपग्रेड हुँदैछ…"</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"अनुप्रयोग अनुकुल हुँदै <xliff:g id="NUMBER_0">%1$d</xliff:g> को <xliff:g id="NUMBER_1">%2$d</xliff:g>।"</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"सुरुवात अनुप्रयोगहरू।"</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"बुट पुरा हुँदै।"</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> चलिरहेको छ"</string>
+    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"अनुप्रयोगमा स्विच गर्न छुनुहोस्"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"अनुप्रयोगहरू स्विच गर्ने हो?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"अर्को अनुप्रयोग पहिले नै चालु छ जुन तपाईंले एउटा नयाँ सुरु गर्नु अघि बन्द गर्नुपर्ने हुन्छ।"</string>
+    <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> मा फर्कनुहोस्"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"नयाँ अनुप्रयोग सुरु नगर्नुहोस्।"</string>
+    <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> सुरु गर्नुहोस्"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"बचत नगरी पुरानो अनुप्रयोग रोक्नुहोस्।"</string>
+    <string name="sendText" msgid="5209874571959469142">"पाठको लागि एउटा प्रकार्य छान्नुहोस्"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"बजाउने मात्रा"</string>
+    <string name="volume_music" msgid="5421651157138628171">"मिडियाको मात्रा"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"ब्लुटुथको माध्यमद्वारा बजाइदै छ।"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"शान्त रिङ्गटोन सेट"</string>
+    <string name="volume_call" msgid="3941680041282788711">"इन-कल भोल्युम"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"ब्लुटुथ भित्री-कल मात्रा"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"आलर्म मात्रा"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"सूचना मात्रा"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"मात्रा"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"ब्लुटुथ भोल्युम"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"घन्टिको आवाज मात्रा"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"कला मात्रा"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"मिडियाको मात्रा"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"सूचना भोल्युम"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"पूर्वनिर्धारित रिङटोन"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"पूर्वनिर्धारित रिङटोन (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"कुनै पनि होइन"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"घन्टीका स्वरहरू"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"अज्ञात रिङटोन"</string>
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"वाइ-फाइ नेटवर्क उपलब्ध छ"</item>
+    <item quantity="other" msgid="4192424489168397386">"वाइ-फाइ नेटवर्कहरू उपलब्ध"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"खुल्ला वाइ-फाइ नेटवर्क उपलब्ध छ"</item>
+    <item quantity="other" msgid="7915895323644292768">"खुल्ला वाइ-फाइ नेटवर्क उपलब्ध छ"</item>
+  </plurals>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"वाइ-फाइ नेटवर्कमा साइन गर्नुहोस्"</string>
+    <string name="network_available_sign_in" msgid="8495155593358054676">"नेटवर्कमा साइन गर्नुहोस्।"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"वाइ-फाइसँग जडान गर्न सकेन"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" कमजोर इन्टरनेट जडान छ।"</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"वाइ-फाइ प्रत्यक्ष"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"वाइ-फाइ सिधा सुरु गर्नुहोस्। यसले वाइ-फाइ ग्राहक/हट्स्पटलाई बन्द गराउने छ।"</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"वाइ-फाइ सिधा सुरु हुन सकेन।"</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"वाइ-फाइ प्रत्यक्ष खुल्ला छ"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"सेटिङहरूको लागि छुनुहोस्"</string>
+    <string name="accept" msgid="1645267259272829559">"स्वीकार्नुहोस्"</string>
+    <string name="decline" msgid="2112225451706137894">"अस्वीकार गर्नुहोस्"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"निमन्त्रणा पठाइएको"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"जडानमा निमन्त्रणा"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"बाट:"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"प्रापक:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"आवश्यक PIN टाइप गर्नुहोस्:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"यो <xliff:g id="DEVICE_NAME">%1$s</xliff:g>सँग जोडिएको बेला ट्याब्लेट अस्थायी रूपमा वाइ-फाइबाट विच्छेद गरिने छ।"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"जब यो <xliff:g id="DEVICE_NAME">%1$s</xliff:g> सँग जडित हुन्छ, फोन अस्थायी रूपमा वाइ-फाइबाट विच्छेद हुने छ"</string>
+    <string name="select_character" msgid="3365550120617701745">"अक्षरहरू प्रवेश गराउनुहोस्"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"SMS सन्देशहरू पठाइँदै"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; ले धरै संख्यामा SMS सन्देशहरू पठाउँदैछ। के तपाईँ यस अनुप्रयोगलाई सन्देशहरू पठाउन सुचारु गर्न अनुमति दिन चाहनु हुन्छ?"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"अनुमति दिनुहोस्"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"अस्वीकार गर्नुहोस्"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; के तपाईँ सन्देश पठाउन चाहुनु हुन्छ &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
+    <string name="sms_short_code_details" msgid="3492025719868078457">"यसले "<font fgcolor="#ffffb060">" शुल्क लगाउन सक्छ"</font>" तपाईँको मोबाइल खातामा।"</string>
+    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"यसले तपाईंको मोबाइल खातामा चार्जहरू उत्पन्न गर्दछ।"</font></string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"पठाउनुहोस्"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"रद्द गर्नुहोस्"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"मेरो छनौट याद राख्नुहोस्"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"तपाईँ यसलाई पछि सेटिङहरूमा बदल्न सक्नु हुन्छ &gt; अनुप्रयोगहरू"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"सधैँ अनुमति दिनुहोस्"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"कहिल्यै अनुमति नदिनुहोस्"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM कार्ड हटाइयो"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"एउटा मान्य SIM कार्ड राखेर पुनःस्टार्ट नगरेसम्म मोबाइल नेटवर्क उपलब्ध हुने छैन।"</string>
+    <string name="sim_done_button" msgid="827949989369963775">"भयो"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SIM कार्ड थप गरियो"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"मोबाइल नेटवर्क पहुँच गर्न तपाईँको उपकरण पुनःस्टार्ट गर्नुहोस्।"</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"पुनःस्टार्ट गर्नुहोस्"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"समय मिलाउनुहोस्"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"मिति मिलाउनुहोस्"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"सेट गर्नुहोस्"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"भयो"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"नयाँ: "</font></string>
+    <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g>द्वारा प्रदान गरिएको।"</string>
+    <string name="no_permissions" msgid="7283357728219338112">"कुनै अनुमति आवश्यक छैन"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"सायद तपाईँलाई पैसा पर्न सक्छ।"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB ठूलो भण्डारण"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"USB जोडिएको छ"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"तपाईं आफ्नो कम्प्युटरमा USB मार्फत जडान हुनुभयो। तलको बटन टच गर्नुहोस् यदि तपाईं आफ्नो कम्प्युटर र एन्ड्रोइडको USB भण्डारण बीच फाइलहरू प्रतिलिपि गर्न चाहनुहुन्छ भने।"</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"तपाईं आफ्नो कम्प्युटरमा USB मार्फत जडान हुनुभयो। तलको बटन टच गर्नुहोस् यदि तपाईं आफ्नो कम्प्युटर र एन्ड्रोइडको SD कार्ड बीच फाइलहरू प्रतिलिपि गर्न चाहनुहुन्छ भने।"</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"USB भण्डारण चालु गर्नुहोस्"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"USB आम भण्डारणको लागि तपाईँको USB भण्डारण प्रयोग गर्दा एउटा समस्या भयो।"</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"USB आम भण्डारणको लागि तपाईँको SD कार्ड प्रयोग गर्दा एउटा समस्या भयो।"</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB जोडिएको छ"</string>
+    <string name="usb_storage_notification_message" msgid="939822783828183763">"तपाईँको कम्प्युटरबाट वा तिर फाइलहरू प्रतिलिप गर्न छुनुहोस्।"</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB भण्डारण बन्द गर्नुहोस्"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB भण्डारण बन्द गर्न छुनुहोस्।"</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB भण्डारण प्रयोगमा छ"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB भण्डारण बन्द हुनुभन्दा पहीले तपाईँको कम्प्युटरबाट तपाईँको एन्ड्रोइड USB भण्डारण अनमाउन्ट (\"झिक्नुहोस्\") गर्नुहोस् ।"</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"USB भण्डारण बन्द गर्नुअघि तपाईँको कम्प्युटरबाट तपाईँको एन्ड्रोइडको SD कार्ड अनमाउन्ट (\"निकालेको\") गर्नुहोस्।"</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB भण्डारण बन्द गर्नुहोस्"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"USB भण्डारण बन्द गर्दा एउटा समस्या भयो। तपाईँले USB होस्ट अनमाउन्ट गर्नु भएको जाँच गर्नुहोस्, त्यसपछि फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB भण्डारण खोल्नुहोस्"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"यदि तपाईँले USB भण्डारण खोल्नु भयो भने तपाईँले प्रयोग गरिरहनु भएका केही अनुप्रयोगहरू रोकिने छन् र तपाईँले USB भण्डारण बन्द नगरेसम्म अनुपलब्ध हुन सक्छन्।"</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"USB संचालन असफल"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"ठिक छ"</string>
+    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"मिडिया उपकरणको रूपमा जडित"</string>
+    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"क्यामेराको रूपमा जडान भएको"</string>
+    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"एउटा स्थापनकर्ताको रूपमा जोडिएको छ"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB सहायकमा जोडिएको छ"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"अन्य USB विकल्पहरूको लागि टच गर्नुहोस्।"</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB भण्डारणलाई फर्म्याट  गर्न चाहनु हुन्छ?"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD कार्ड फर्म्याट गर्ने?"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"तपाईंको USBमा सङ्ग्रह भएका सबै फाइलहरू मेटिने छन्। यो कार्य उल्टाउन सकिँदैन!"</string>
+    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"तपाईँको कार्डमा भएका सबै डेटाहरू हराउने छन्।"</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"फर्म्याट गर्नुहोस्"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने जडित छ"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डिबग गर्ने असक्षम पार्न छुनुहोस्।"</string>
+    <string name="select_input_method" msgid="4653387336791222978">"निवेश विधि छान्नुहोस्"</string>
+    <string name="configure_input_methods" msgid="9091652157722495116">"इनपुट विधिहरू सेटअप गर्नुहोस्"</string>
+    <string name="use_physical_keyboard" msgid="6203112478095117625">"भौतिक किबोर्ड"</string>
+    <string name="hardware" msgid="7517821086888990278">"हार्डवेयर"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"किबोर्ड रूपरेखा चयन गर्नुहोस्"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"किबोर्ड रूपरेखा चयन गर्न टच गर्नुहोस्।"</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"उम्मेदवार"</u></string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB भण्डारणको तयारी हुँदै"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD कार्ड तयार गर्दै"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"त्रुटिहरूको लागि जाँच गर्दै।"</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"रिक्त USB भण्डारण"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"खाली SD कार्ड"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"USB भण्डारण खाली वा असमर्थित फाइल प्रणाली छ।"</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD कार्ड खाली छ अथवा समर्थन नगरिएको फाइल प्रणाली छ।"</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"बिग्रिएको USB भण्डारण"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"बिग्रिएको SD कार्ड"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB भण्डारण बिग्रिएको छ। यसलाई पुनःफर्म्याट गर्न प्रयास गर्नुहोस।"</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD कार्ड बिग्रिएको छ। यसलाई पुनःफर्म्याट गर्न प्रयास गर्नुहोस।"</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"USB भण्डारण अप्रत्याशित रूपमा हटाइएको छ"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD कार्ड अनपेक्षित रूपमा हटाइयो"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"डेटा गुम्नबाट रोक्नको लागि USB भण्डारण हटाउनुअघि अनमाउन्ट गर्नुहोस्।"</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"डेटा नाश हुनबाट बच्न SD कार्डलाई निकाल्नुभन्दा पहिला अनमाउन्ट गर्नुहोस्।"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"USB भण्डारण हटाउनको लागि सुरक्षित छ"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD कार्ड हटाउन सुरक्षित छ।"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"तपाईं सुरक्षित रूपमा USB भण्डारण हटाउन सक्नुहुने छ।"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"तपाईँ SD कार्ड सुरक्षित रूपमा हटाउन सक्नु हुन्छ।"</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"USB भण्डारण हटाइयो"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"हटाइएको SD कार्ड"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USD भण्डारण हटाइयो। नयाँ मिडिया घुसाउनुहोस्।"</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD कार्ड हटाइयो। एउटा नयाँ छिराउनुहोस्।"</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"कुनै मिल्ने गतिविधि पाइएन।"</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"खण्ड प्रयोग तथ्याङ्कहरू अपडेट गर्नुहोस्"</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"जम्मा गरिएको घटक उपयोग तथ्याङ्कहरूलाई परिमार्जन गर्न अनुप्रयोगलाई अनुमति दिन्छ। सामान्य अनुप्रयोगहरूबाट प्रयोगको लागि होइन।"</string>
+    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"सामाग्रीको नकल गर्नुहोस्"</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"अनुप्रयोगलाई सामग्री प्रतिलिपि गर्न पूर्वनिर्धारित कन्टेनर सेवा आह्वान गर्न अनुमति दिन्छ। साधारण अनुप्रयोगहरूद्वाराको प्रयोगको लागि होइन।"</string>
+    <string name="permlab_route_media_output" msgid="1642024455750414694">"मिडिया परिणाम दिशानिर्देश गर्नुहोस्"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"मिडिया परिणामलाई अन्य बाहिरी उपकरणहरूसँग लैजानको लागि अनुप्रयोगलाई अनुमति दिन्छ।"</string>
+    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"किगार्ड सुरक्षित भण्डारण पहुँच गर्नुहोस्"</string>
+    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"अनुप्रयोगलाई किगार्ड सुरक्षित भण्डारण पहुँच गर्न अनुमति दिन्छ।"</string>
+    <string name="permlab_control_keyguard" msgid="172195184207828387">"किगार्ड प्रदर्शन गर्ने र लुकाउने नियन्त्रण गर्नुहोस्"</string>
+    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"अनुप्रयोगलाई किगार्ड नियन्त्रण गर्न अनुमति दिन्छ।"</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"जुम नियन्त्रणको लागि दुई चोटि टच गर्नुहोस्"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"विजेट थप गर्न सकिँदैन।"</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"जानुहोस्"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"खोज्नुहोस्"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"पठाउनुहोस्"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"अर्को"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"भयो"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"अघिल्लो"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"चलाउनुहोस्"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">\n"नम्बर डायल गर्नुहोस् <xliff:g id="NUMBER">%s</xliff:g> प्रयोग गरेर"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"सम्पर्क सिर्जना गर्नुहोस्\nयो <xliff:g id="NUMBER">%s</xliff:g> प्रयोग गरेर"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"निम्न एउटा वा धेरै अनुप्रयोगहरूले तपाईँको खातामा पहुँचको लागि अनुमति अहिले र भविष्यमा अनुरोध गर्छन्।"</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"के तपाईँ यस अनुरोधलाई अनुमति दिन चाहनुहुन्छ?"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"अनुरोध पहुँच गर्नुहोस्"</string>
+    <string name="allow" msgid="7225948811296386551">"अनुमति दिनुहोस्"</string>
+    <string name="deny" msgid="2081879885755434506">"अस्वीकार गर्नुहोस्"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"अनुरोध गरिएको अनुमति"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">\n"खाता <xliff:g id="ACCOUNT">%s</xliff:g>को लागि अनुरोध गरिएको अनुमति।"</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"इनपुट विधि"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"सिङ्क गर्नुहोस्"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"उपलब्धता"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"वालपेपर"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"वालपेपर परिवर्तन गर्नुहोस्"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"सूचना सुन्नेवाला"</string>
+    <string name="vpn_title" msgid="19615213552042827">"VPN सक्रिय भयो"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"VPN <xliff:g id="APP">%s</xliff:g>द्वारा सक्रिय गरिएको हो"</string>
+    <string name="vpn_text" msgid="3011306607126450322">"नेटवर्क प्रबन्ध गर्न छुनुहोस्।"</string>
+    <string name="vpn_text_long" msgid="6407351006249174473">"<xliff:g id="SESSION">%s</xliff:g>सँग जोडिएको छ। नेटवर्क व्यवस्थापन गर्नको लागि छुनुहोस्।"</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"VPN जडान सधै जोड्दै…"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"सधैँ खुल्ला हुने VPN जोडिएको"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"सधैँ भरि VPN त्रुटिमा"</string>
+    <string name="vpn_lockdown_config" msgid="6415899150671537970">"कन्फिगर गर्न टच गर्नुहोस्"</string>
+    <string name="upload_file" msgid="2897957172366730416">"फाइल छान्नुहोस्"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"कुनै फाइल छानिएको छैन"</string>
+    <string name="reset" msgid="2448168080964209908">"पुनःसेट गर्नु"</string>
+    <string name="submit" msgid="1602335572089911941">"पेस गर्नुहोस्"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"कार मोड सक्षम पारियो।"</string>
+    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"कार मोडबाट निस्कन छुनुहोस्।"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"टेथर गर्ने वा हटस्पट सक्रिय"</string>
+    <string name="tethered_notification_message" msgid="6857031760103062982">"सेटअप गर्न टच गर्नुहोस्।"</string>
+    <string name="back_button_label" msgid="2300470004503343439">"पछाडि"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"अर्को"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"छोड्नुहोस्"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"उच्च मोबाइल डेटा प्रयोग"</string>
+    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"मोबाइल डेटा प्रयोगको बारेमा अरू थप जान्नको लागि  छुनुहोस्।"</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"मोबाइल डेटा सीमा पार भयो"</string>
+    <string name="throttled_notification_message" msgid="5443457321354907181">"मोबाइल डेटा प्रयोग बारे थप सिक्न छुनुहोस्।"</string>
+    <string name="no_matches" msgid="8129421908915840737">"कुनै मिलेन"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"पृष्ठमा फेला पार्नुहोस्"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"१ मेल"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="TOTAL">%d</xliff:g> को <xliff:g id="INDEX">%d</xliff:g>"</item>
+  </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"भयो"</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB  भण्डारण अनमाउन्ट गर्दै..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD कार्ड अनमाउन्ट गर्दै…"</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB भण्डारण मेटाउँदै…"</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD कार्ड मेटाउँदै…"</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB भण्डारणलाई मेटाउन सकेन।"</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"SD कार्ड मेटाउन सकेन"</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"SD कार्ड अनमाउन्ट हुनुभन्दा पहिला निकालियो।"</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"अहिले USB भण्डारण जाँच भइरहेको छ।"</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"SD कार्ड अहिले परीक्षण भइरहेको छ।"</string>
+    <string name="media_removed" msgid="7001526905057952097">"SD कार्ड हटाइयो।"</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"SD कार्ड कम्प्युटरद्वारा अहिले प्रयोगमा छ।"</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"SD कार्ड अहिले कम्प्युटरद्वारा प्रयोगमा छ।"</string>
+    <string name="media_unknown_state" msgid="729192782197290385">"बाह्य मिडिया अज्ञात अवस्थामा।"</string>
+    <string name="share" msgid="1778686618230011964">"साझेदारी गर्नुहोस्"</string>
+    <string name="find" msgid="4808270900322985960">"पत्ता लगाउनुहोस्"</string>
+    <string name="websearch" msgid="4337157977400211589">"वेब खोजी"</string>
+    <string name="find_next" msgid="5742124618942193978">"अर्को भेटाउनुहोस्"</string>
+    <string name="find_previous" msgid="2196723669388360506">"अघिल्लो फेला पार्नुहोस्"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"<xliff:g id="NAME">%s</xliff:g> बाट स्थान अनुरोध"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"स्थान अनुरोध"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) द्वारा अनुरोध गरिएको"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"हो"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"होइन"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"सीमा नाघेकाहरू मेट्नुहोस्"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"त्यहाँ <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> मेटाइएका आइटमहरू छन् <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>को लागि, खाता <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>। तपाईं के गर्न चाहनु हुन्छ?"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"वस्तुहरू मेट्नुहोस्"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"मेटिएकाहरू पूर्ववत बनाउनुहोस्।"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"अहिलेको लागि केही नगर्नुहोस्"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"एउटा खाता छान्‍नुहोस्"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"एउटा खाता थप्नुहोस्"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"खाता थप गर्नुहोस्"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"बढाउनुहोस्"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"घटाउनुहोस्"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g>छुनुहोस् र समाउनुहोस्।"</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"बढाउन माथि र घटाउन तल सार्नुहोस्।"</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"मिनेट बढाउनुहोस्"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"मिनेट घटाउनुहोस्"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"घन्टा बढाउनुहोस्"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"घन्टा घटाउनुहोस्"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"PM सेट गर्नुहोस्"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"AM सेट गर्नुहोस्"</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"महिना बढाउनुहोस्"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"महिना घटाउनुहो्स्"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"दिन बढाउनुहोस्"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"दिन घटाउनुहोस्"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"वर्ष बढाउनुहोस्"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"वर्ष घटाउनुहोस्"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"रद्द गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"मेट्नुहोस्"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"भयो"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"मोड परिवर्तन गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"प्रविष्टि गर्नुहोस्"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"एउटा अनुप्रयोग छान्नुहोस्"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"साझेदारी गर्नुहोस्..."</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> सँग साझेदारी गर्नुहोस्"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"धिसार्ने ह्यान्डल। छुनुहोस् &amp; समाउनुहोस्।"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि माथि धिसार्नुहोस्"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> को लागि तल स्लाइड गर्नुहोस्।"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि बायाँ।"</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि दायाँ।"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"अनलक गर्नुहोस्"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"क्यामेरा"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"मौन"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"आवाज चालू"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"खोज्नुहोस्"</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"खोल्नलाइ हुत्त्याउनुहोस्।"</string>
+    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"बोलिएको पासवर्ड कुञ्जीहरू सुन्नको लागि हेडसेट प्लग इन गर्नुहोस्।"</string>
+    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"डट।"</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"गृह खोज्नुहोस्"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"माथि खोज्नुहोस्"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"थप विकल्पहरू"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"आन्तरिक भण्डारण"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD कार्ड"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB भण्डारण"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"सम्पादन गर्नुहोस्"</string>
+    <string name="data_usage_warning_title" msgid="1955638862122232342">"डेटा प्रयोग चेतावनी"</string>
+    <string name="data_usage_warning_body" msgid="2814673551471969954">"उपयोग र सेटिङहरू हेर्न छुनुहोस्।"</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G डेटा असक्षम गरिएको"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G डेटा असक्षम गरियो"</string>
+    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"मोबाइल डेटा असक्षम पारियो।"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"वाइ-फाइ डेटा असक्षम गरियो"</string>
+    <string name="data_usage_limit_body" msgid="3317964706973601386">"सक्षम पार्न छुनुहोस्।"</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G डेटा सीमा भन्दा पार भएको छ"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G डेटा SIMा नाघ्यो"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"मोवाइल डेटा SIMा नाघ्यो"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"वाइ-फाइ डेटा SIMा नाघ्यो"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> उल्लेखित सीमा भन्दा बढी छ।"</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"पृष्ठभूमिका डेटा प्रतिबन्धित गरिएको छ"</string>
+    <string name="data_usage_restricted_body" msgid="6741521330997452990">"अवरोध हटाउन छुनुहोस्।"</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"सुरक्षा प्रमाणपत्र"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"प्रमाणपत्र मान्य छ।"</string>
+    <string name="issued_to" msgid="454239480274921032">"द्वारा जारी गरिएको:"</string>
+    <string name="common_name" msgid="2233209299434172646">"साधारण नाम:"</string>
+    <string name="org_name" msgid="6973561190762085236">"संगठन:"</string>
+    <string name="org_unit" msgid="7265981890422070383">"संगठनात्मक एकाइ:"</string>
+    <string name="issued_by" msgid="2647584988057481566">"द्वारा जारी गरिएको:"</string>
+    <string name="validity_period" msgid="8818886137545983110">"मान्यता:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"जारी गरिएको:"</string>
+    <string name="expires_on" msgid="3676242949915959821">"अवधि समाप्त:"</string>
+    <string name="serial_number" msgid="758814067660862493">"क्रम संख्या:"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"औँठाछापहरू:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-२५६ औंठाछाप:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 औंलाछाप:"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"सबै हेर्नुहोस्"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"गतिविधि छनौट गर्नुहोस्"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"साझेदारी गर्नुहोस्..."</string>
+    <string name="status_bar_device_locked" msgid="3092703448690669768">"उपकरण लक छ।"</string>
+    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
+    <string name="sending" msgid="3245653681008218030">"पठाउँदै..."</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"ब्राउजर सुरु गर्ने हो?"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"कल स्वीकार गर्नुहुन्छ?"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"सधैँ"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"एउटा मात्र"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"ट्याब्लेट"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"फोन"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"हेडफोनहरू"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"डक स्पिकरहरू"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"प्रणाली"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"ब्लुटुथ अडियो"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"ताररहित प्रदर्शन"</string>
+    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"भयो"</string>
+    <string name="media_route_button_content_description" msgid="5758553567065145276">"मिडियाको उत्पादन"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"स्क्यान गर्दै ..."</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"जडान हुँदै..."</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"उपलब्ध"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"उपलब्ध छैन"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"प्रयोगमा छ"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"पूर्व-निर्मित स्क्रिन"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI स्क्रिन"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"आवरण #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", सुरक्षित"</string>
+    <string name="wifi_display_notification_title" msgid="2223050649240326557">"ताररहित प्रदर्शन जोडिएको छ"</string>
+    <string name="wifi_display_notification_message" msgid="4498802012464170685">"अर्को उपकरणमा यो स्क्रिनले देखाइरहेको छ"</string>
+    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"विच्छेदन गर्नुहोस्"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"आपतकालीन कल"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ढाँचा बिर्सनु भयो"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत ढाँचा"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"गलत पासवर्ड"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"गलत PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%1$d</xliff:g>सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"आफ्नो ढाँचा कोर्नुहोस्"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्।  विवरणको लागि वाहकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"इच्छित PIN कोड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"मनपर्दो PIN कोड निश्चित गर्नुहोस्"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलक गर्दै…"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड।"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"४ देखि ८ वाट नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK कोड ८ वटा नम्बर वा सो भन्दा बढी हुनुपर्छ।"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"PUK कोड पुन:प्रदान गर्नुहोस्। धेरै पुन:प्रयासहरूले SIMलाई स्थायी रूपमा निष्क्रिय गरिदिने छ।"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN कोडहरू मेल खाएन"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"निकै धेरै ढाँचा कोसिसहरू"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"अनलक गर्नको लागि, तपाईँको Google खाताको साथ साइन इन गर्नुहोस्।"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"प्रयोगकर्ता नाम (इमेल)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"पासवर्ड"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन गर्नुहोस्"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य प्रयोगकर्तानाम वा पासवर्ड।"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"के तपाईँले उपयोगकर्ता नाम वा पासवर्ड बिर्सनुभयो?\n"<b>"google.com/accounts/recovery"</b>" मा जानुहोस्।"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"खाता जाँच हुँदै…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"तपाईँले तपाईँक पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> पटक गलत टाइप गर्नुभएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"तपाईँले ट्याब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल प्रयासहरू, ट्याब्लेट पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"तपाईँले गलतसँग फोनलाई अनलक गर्न <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भयो। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल कोसिसहरू, फोनलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"तपाईँले ट्यब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER">%d</xliff:g> पटक प्रयास गर्नु भएको छ। अब ट्याब्लेटलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"तपाईंले गलत तरिकाले फोन <xliff:g id="NUMBER">%d</xliff:g> पटक अनलक गर्ने प्रयत्न गर्नुभयो। अब फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"तपाईंले गलत तरिकाले आफ्नो अनलक ढाँचा <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोर्नुभयो। <xliff:g id="NUMBER_1">%d</xliff:g> विफल प्रयत्नहरू पछि, तपाईंलाई आफ्नो ट्याब्लेट इमेल खाता प्रयोग गरेर अनलक गर्न सोधिने छ।\n\n फेरि प्रयास गर्नुहोस् <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डहरूमा।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"तपाईँले आफ्नो अनलक ढाँचा गलत रूपमा <xliff:g id="NUMBER_0">%d</xliff:g> पटक तान्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> धेरै असफल प्रयासहरूपछि, तपाईँलाई एउटा इमेल खाताको प्रयोग गरेर तपाईँको फोन अनलक गर्न सोधिने छ।\n\n फेरि <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा प्रयास गर्नुहोस्।"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"हटाउनुहोस्"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"आवाज सल्लाह दिएको तहभन्दा माथि  बढाउने हो?\nठूलो आवाजमा सुन्दा लामो समयको लागि तपाईँको सुन्ने शक्तीलाई खत्तम पार्न सक्छ।"</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"उपलब्धता सक्षम पार्न दुईवटा औंलाहरूले थिचिरहनुहोस्।"</string>
+    <string name="accessibility_enabled" msgid="1381972048564547685">"पहुँच सक्षम गरिएको।"</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"पहुँचयोग्यता रद्द गरियो।"</string>
+    <string name="user_switched" msgid="3768006783166984410">"अहिलेको प्रयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>।"</string>
+    <string name="owner_name" msgid="2716755460376028154">"मालिक"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"त्रुटि"</string>
+    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"प्रतिबन्धित प्रोफाइलहरूको लागि यस अनुप्रयोगले खाताहरू समर्थन गर्दैन"</string>
+    <string name="app_not_found" msgid="3429141853498927379">"यस कार्य सम्हालने कुनै अनुप्रयोग भेटिएन"</string>
+    <string name="revoke" msgid="5404479185228271586">"रद्द गर्नुहोस्"</string>
+    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
+    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
+    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
+    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
+    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
+    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
+    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
+    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
+    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
+    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
+    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
+    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
+    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
+    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
+    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
+    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"ISO B4"</string>
+    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
+    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
+    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
+    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
+    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
+    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
+    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
+    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
+    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
+    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
+    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
+    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
+    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
+    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
+    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
+    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
+    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
+    <string name="mediaSize_na_letter" msgid="4191805615829472953">"पत्र"</string>
+    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"सरकारी पत्र"</string>
+    <string name="mediaSize_na_legal" msgid="6697982988283823150">"कानूनी"</string>
+    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"Junior Legal"</string>
+    <string name="mediaSize_na_ledger" msgid="281871464896601236">"Ledger"</string>
+    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"Tabloid"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"रद्द गरियो"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"सामाग्री लेखनमा त्रुटि"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"वर्तमान PIN"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"नयाँ PIN"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"नयाँ PIN निश्चित गर्नुहोस्"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"प्रतिबन्धहरूलाई परिवर्तन गर्नको लागि एउटा PIN बनाउनुहोस्"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN हरू मेल खाएनन्। पुनः प्रयास गर्नुहोस्।"</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN अति छोटो भयो। कम्तीमा ४ अङ्क हुन आवश्यक छ।"</string>
+  <plurals name="restr_pin_countdown">
+    <item quantity="one" msgid="4835639969503729874">"गलत PIN । १ सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</item>
+    <item quantity="other" msgid="8030607343223287654">"गलत PIN । <xliff:g id="COUNT">%d</xliff:g> सेकेन्डमा पुनः प्रयास गर्नुहोस्।"</item>
+  </plurals>
+    <string name="transient_navigation_confirmation" msgid="4907844043611123426">"पट्टि देखिने बनाउन स्क्रिनको छेउमा स्वाइप गर्नुहोस्"</string>
+    <string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"प्रणाली पट्टि देखिने बनाउन स्क्रिनको छेउबाट स्वाइप गर्नुहोस्"</string>
+</resources>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index 30afea7..3b2391f 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Zonder titel&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Typ een PUK-code die 8 cijfers of langer is."</string>
     <string name="needPuk" msgid="919668385956251611">"Uw SIM-kaart is vergrendeld met de PUK-code. Typ de PUK-code om te ontgrendelen."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Voer de PUK2-code in om de SIM-kaart te ontgrendelen."</string>
+    <string name="enablePin" msgid="209412020907207950">"Mislukt. Schakel SIM/RUIM-vergrendeling in."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"U heeft nog <xliff:g id="NUMBER">%d</xliff:g> poging over voordat de simkaart wordt vergrendeld."</item>
+    <item quantity="other" msgid="7530597808358774740">"U heeft nog <xliff:g id="NUMBER">%d</xliff:g> pogingen over voordat de simkaart wordt vergrendeld."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Inkomende beller-id"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchroniseren"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Te veel verwijderen voor <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tabletgeheugen is vol. Verwijder enkele bestanden om ruimte vrij te maken."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Horlogegeheugen is vol. Verwijder enkele bestanden om ruimte vrij te maken."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Telefoongeheugen is vol. Verwijder enkele bestanden om ruimte vrij te maken."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Netwerk kan worden gecontroleerd"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Door een onbekende derde partij"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Belsoftware aan"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Uitschakelen..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Uw tablet wordt uitgeschakeld."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Uw horloge wordt uitgeschakeld."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Uw telefoon wordt uitgeschakeld."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Wilt u afsluiten?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Opnieuw opstarten in veilige modus"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Vliegmodus"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Vliegmodus is AAN"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Vliegmodus is UIT"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Instellingen"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string>
     <string name="safeMode" msgid="2788228061547930246">"Veilige modus"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-systeem"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"snelkoppelingen verwijderen"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"De app toestaan snelkoppelingen van het startscherm te verwijderen zonder tussenkomst van de gebruiker."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"uitgaande oproepen doorschakelen"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Hiermee kan de app uitgaande oproepen verwerken en het nummer wijzigen dat wordt gebeld. De app kan uitgaande oproepen bijhouden, omleiden of blokkeren."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"De app toestaan het nummer te bekijken dat wordt gekozen voor een uitgaande oproep, met de mogelijkheid de oproep om te leiden naar een ander nummer of de oproep helemaal af te breken."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"tekstberichten (SMS) ontvangen"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Hiermee kan de app sms-berichten ontvangen en verwerken. Dit betekent dat de app berichten die naar uw apparaat zijn verzonden, kan bijhouden of verwijderen zonder deze aan u weer te geven."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"tekstberichten (MMS) ontvangen"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Hiermee kan de app de inhoud van het actieve venster ophalen. Schadelijke apps kunnen de volledige inhoud van het venster ophalen en alle tekst bekijken, behalve wachtwoorden."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"toegankelijkheid tijdelijk inschakelen"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Een app toestaan toegankelijkheid tijdelijk in te schakelen op het apparaat. Schadelijke apps kunnen toegankelijkheid inschakelen zonder toestemming van de gebruiker."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"venstergegevens ophalen"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Toestaan dat een app gegevens over vensters kan ophalen uit vensterbeheer. Schadelijke apps kunnen gegevens ophalen die zijn bedoeld voor interne systeemfunctionaliteit."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"venstertoken ophalen"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Hiermee kan een app de venstertoken ophalen. Schadelijke apps kunnen niet-geautoriseerde interactie met het appvenster uitvoeren en het systeem nabootsen."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"framestatistieken ophalen"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Hiermee kan een app framestatistieken verzamelen. Schadelijke apps kunnen de framestatistieken voor vensters van andere apps bekijken."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"evenementen filteren"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Toestaan dat een app een invoerfilter registreert waarmee de streams van alle gebruikersgebeurtenissen worden gefilterd voordat deze worden verzonden. Schadelijke apps kunnen de gebruikersinterface van het systeem beheren zonder tussenkomst van de gebruiker."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"display vergroten"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Een app toestaan de inhoud van een display te vergroten. Schadelijke apps kunnen de display-inhoud transformeren op een manier waardoor het apparaat onbruikbaar wordt."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"gedeeltelijke uitschakeling"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Hiermee wordt activiteitenbeheer uitgeschakeld. Er wordt geen volledige uitschakeling uitgevoerd."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"schakelen tussen apps voorkomen"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Hiermee kan de app een melding verzenden dat een sms\'je is ontvangen. Schadelijke apps kunnen dit gebruiken om inkomende sms\'jes te vervalsen."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"melding over ontvangen WAP-PUSH-bericht verzenden"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Hiermee kan de app een melding verzenden dat een WAP PUSH-bericht is ontvangen. Schadelijke apps kunnen dit gebruiken om de ontvangst van MMS-berichten te vervalsen of de inhoud van een webpagina ongemerkt te vervangen door schadelijke varianten."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"melding verzenden dat netwerken een score moeten krijgen"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Hiermee kan de app een melding uitzenden dat netwerken een score moeten krijgen. Nooit vereist voor normale apps."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"aantal actieve processen beperken"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Hiermee kan de app het maximale aantal processen beheren dat kan worden uitgevoerd. Nooit nodig voor normale apps."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"achtergrondapps gedwongen stoppen"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Staat de houder toe verbinding te maken met de hoofdinterface van een VPN-service. Nooit vereist voor normale apps."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"verbinden met een achtergrond"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Hiermee wordt de houder toegestaan zich te verbinden met de hoofdinterface van een achtergrond. Nooit vereist voor normale apps."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"binden aan een service voor spraakinteractie"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Hiermee kan de houder binden aan de hoofdinterface van een service voor spraakinteractie. Nooit vereist voor normale apps."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"verbinding maken met een extern display"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Hiermee wordt de houder toegestaan verbinding te maken met de hoofdinterface van een extern display. Nooit vereist voor normale apps."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"verbinden met een widgetservice"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Hiermee wordt de houder toegestaan verbinding te maken met de hoofdinterface van een widgetservice. Nooit vereist voor normale apps."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"binden aan de service van een routeprovider"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Hiermee kan de houder binden aan geregistreerde routeproviders. Nooit gebruikt voor normale apps."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interactie met apparaatbeheer"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Hiermee kan de houder intenties verzenden naar een apparaatbeheerder. Nooit vereist voor normale apps."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"binden aan een tv-ingang"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Hiermee wordt de houder toegestaan te binden aan de hoofdinterface van een tv-ingang. Nooit vereist voor normale apps."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"een apparaatbeheerder toevoegen of verwijderen"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Hiermee kan de rechtenhouder actieve apparaatbeheerders toevoegen of verwijderen. Nooit vereist voor normale apps."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"schermstand wijzigen"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Hiermee kan de app alle geïnstalleerde mediadecoders gebruiken om te decoderen voor het afspelen."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"vertrouwde inloggegevens beheren"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Hiermee kan de app CA-certificaten installeren en verwijderen als vertrouwde inloggegevens."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"app uitvoeren tijdens inactiviteit"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Met dit recht kan het Android-systeem de app op de achtergrond uitvoeren terwijl het apparaat niet wordt gebruikt."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"lezen/schrijven naar bronnen van diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Hiermee kan de app lezen en schrijven naar elke bron die hoort bij de diagnostische groep, zoals bestanden in /dev. Hierdoor kan de systeemstabiliteit en -veiligheid worden beïnvloed. Dit mag ALLEEN worden gebruikt voor hardwarespecifieke diagnostiek door de fabrikant of provider."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"componenten van apps in- of uitschakelen"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Hiermee kan de app persoonlijke profielgegevens lezen die op uw apparaat zijn opgeslagen, zoals uw naam en contactgegevens. Dit betekent dat de app u kan identificeren en uw profielgegevens naar anderen kan verzenden."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"uw eigen contactkaart aanpassen"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Hiermee kan de app persoonlijke profielgegevens wijzigen of toevoegen die op uw apparaat zijn opgeslagen, zoals uw naam en contactgegevens. Dit betekent dat de app u kan identificeren en uw profielgegevens naar anderen kan verzenden."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"lichaamssensoren (zoals hartslagmeters)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Toestaan dat de app toegang krijgt tot gegevens van sensoren die u gebruikt om te meten wat er gebeurt in uw lichaam, zoals de hartslag."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"uw sociale stream lezen"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Hiermee kan de app toegang krijgen tot sociale updates van u en uw vrienden en deze synchroniseren. Wees voorzichtig bij het delen van informatie: hiermee kan de app communicatie lezen tussen u en uw vrienden op sociale netwerken, ongeacht de vertrouwelijkheid. Opmerking: deze toestemming kan niet worden afgedwongen voor alle sociale netwerken."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"schrijven naar sociale streams"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Hiermee kan de app SurfaceFlinger-functies op laag niveau gebruiken."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"framebuffer lezen"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Hiermee kan de app de inhoud van de framebuffer lezen."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"toegang krijgen tot InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Hiermee kan de app InputFlinger-functies op laag niveau gebruiken."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"wifi-displays configureren"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"De app toestaan wifi-displays te configureren en hiermee verbinding te maken."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"wifi-displays beheren"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Hiermee kan de app algemene audio-instellingen wijzigen zoals het volume en welke luidspreker wordt gebruikt voor de uitvoer."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"audio opnemen"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Hiermee kan de app audio opnemen met de microfoon. Met deze toestemming kan de app op elk moment audio opnemen, zonder om uw bevestiging te vragen."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"sim-communicatie"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Hiermee kan de app opdrachten verzenden naar de simkaart. Dit is erg gevaarlijk."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"foto\'s en video\'s maken"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Hiermee kan de app foto\'s en video\'s maken met de camera. Met deze toestemming kan de app de camera altijd gebruiken, zonder uw bevestiging."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"indicatielampje uitschakelen wanneer camera wordt gebruikt"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Hiermee kan de app de telefoonfuncties van het apparaat beheren. Een app met deze toestemming kan schakelen tussen netwerken, kan de radio van de telefoon in- en uitschakelen en dergelijke acties uitvoeren zonder dat u hiervan op de hoogte wordt gesteld."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefoonstatus en -identiteit lezen"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Hiermee kan de app toegang krijgen tot de telefoonfuncties van het apparaat, Met deze toestemming kan de app het telefoonnummer en de apparaat-ID\'s bepalen, of een oproep actief is, en het andere telefoonnummer waarmee wordt gebeld."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"exacte telefoonstatus lezen"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Toestaan dat de app toegang krijgt tot de exacte telefoonstatus. Hiermee kan de app bepalen wat de echte oproepstatus is, of een oproep actief is of zich op de achtergrond bevindt, of er mislukte oproepen zijn, wat de exacte status van de gegevensverbinding is en of er mislukte gegevensverbindingen zijn."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"voorkomen dat tablet overschakelt naar slaapmodus"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"voorkomen dat telefoon overschakelt naar slaapmodus"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Hiermee kan de app voorkomen dat de tablet overschakelt naar de slaapmodus."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX-status wijzigen"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Hiermee kan de app de tablet verbinden met WiMAX-netwerken en de verbinding daarmee verbreken."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Hiermee kan de app de telefoon verbinden met WiMAX-netwerken en de verbinding daarmee verbreken."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"score toekennen aan netwerken"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Hiermee kan de app netwerken rangschikken en beïnvloeden aan welke netwerken de tablet de voorkeur moet geven."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Hiermee kan de app netwerken rangschikken en beïnvloeden aan welke netwerken de telefoon de voorkeur moet geven."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"koppelen met Bluetooth-apparaten"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Hiermee kan de app de Bluetooth-configuratie van de tablet bekijken en verbindingen met gekoppelde apparaten maken en accepteren."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Hiermee kan de app de Bluetooth-configuratie van de telefoon bekijken en verbindingen met gekoppelde apparaten maken en accepteren."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Hiermee kan de app meldingen ophalen, onderzoeken en wissen, waaronder meldingen die zijn verzonden door andere apps."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"koppelen aan een listener-service voor meldingen"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Hiermee kan de houder koppelen aan de hoofdinterface van een listener-service voor meldingen. Nooit vereist voor normale apps."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"binden aan de service van een provider van voorwaarden"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Hiermee kan de houder binden aan de hoofdinterface van de service van een provider van voorwaarden. Nooit vereist voor normale apps."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"de door de provider geleverde configuratie-app aanroepen"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Hiermee kan de houder de door de provider geleverde configuratie-app aanroepen. Nooit vereist voor normale apps."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"controleren op waarnemingen met betrekking tot netwerkomstandigheden"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Hiermee kan een app controleren op waarnemingen met betrekking tot netwerkomstandigheden. Nooit vereist voor normale apps."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"kalibratie van invoerapparaat wijzigen"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Hiermee kan de app de kalibratieparameters van het aanraakscherm aanpassen. Nooit vereist voor normale apps."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"toegang tot DRM-certificaten"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Toestaan dat een app DRM-certificaten registreert en gebruikt. Nooit vereist voor normale apps."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Wachtwoordregels instellen"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"De lengte en tekens beheren die zijn toegestaan in wachtwoorden voor schermontgrendeling."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Pogingen voor schermontgrendeling bijhouden"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Startpagina"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Werk"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Overig"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Er is geen app gevonden om dit contact te bekijken."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Pincode typen"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Geef de PUK-code en de nieuwe pincode op"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-code"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Hiermee krijgt een app toegang tot opslag met toetsbeveiliging."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Weergeven en verbergen van toetsbeveiliging beheren"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Staat toe dat een app de toetsbeveiliging beheert."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Controleren op wijzigingen in de trust-status."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Toestaan dat een app controleert op wijzigingen in de trust-status."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Binden aan een trust-agentservice"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Toestaan dat een app wordt gebonden aan een trust-agentservice."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interactie met update- en herstelsysteem"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Hiermee kan een app interactie hebben met het herstelsysteem en systeemupdates."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Raak twee keer aan voor zoomregeling"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Kan widget niet toevoegen."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Ga"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Achtergrond"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Achtergrond wijzigen"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Listener voor meldingen"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Provider van voorwaarden"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN is geactiveerd"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN wordt geactiveerd door <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Raak aan om het netwerk te beheren."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Een app selecteren"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Kan <xliff:g id="APPLICATION_NAME">%s</xliff:g> niet starten"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Delen met"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Delen met <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Schuifgreep. Tikken en blijven aanraken."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Veeg omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Veeg omlaag voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Veeg naar links voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Veeg naar rechts voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Ontgrendelen"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Stil"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Geluid aan"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Zoeken"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Vegen om te ontgrendelen"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Sluit een headset aan om wachtwoordtoetsen te laten voorlezen."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Stip."</string>
@@ -1482,9 +1541,13 @@
     <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systeem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-audio"</string>
-    <string name="wireless_display_route_description" msgid="9070346425023979651">"Draadloze display"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gereed"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"Draadloze weergave"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Media-uitvoer"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Verbinding maken met apparaat"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Scherm casten naar apparaat"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Zoeken naar apparaten…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Instellingen"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Verbinding verbreken"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Scannen..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Verbinden..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Beschikbaar"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", beveiligd"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Draadloze display is aangesloten"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Dit scherm wordt op een ander apparaat weergegeven"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Scherm casten"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Verbinden met <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Scherm casten"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Verbonden met <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Verbinding verbreken"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Noodoproep"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Patroon vergeten"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Simkaart ontgrendelen..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Onjuiste pincode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Voer een pincode van 4 tot 8 cijfers in."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"De PUK-code is minimaal acht nummers lang."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"De PUK-code is acht cijfers lang."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Geef de juiste PUK-code opnieuw op. Bij herhaalde pogingen wordt de simkaart permanent uitgeschakeld."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Pincodes komen niet overeen"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Te veel patroonpogingen"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Probeer het later opnieuw"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Veeg omlaag vanaf de bovenkant om het volledige scherm te sluiten."</string>
+    <string name="done_label" msgid="2093726099505892398">"Gereed"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Ronde schuifregelaar voor uren"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Ronde schuifregelaar voor minuten"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Uren selecteren"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Minuten selecteren"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Maandraster van dagen"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Jaarlijst"</string>
+    <string name="select_day" msgid="7774759604701773332">"Maand en dag selecteren"</string>
+    <string name="select_year" msgid="7952052866994196170">"Jaar selecteren"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> geselecteerd"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> verwijderd"</string>
 </resources>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index 0e1bee9..b80c1fd 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez nazwy&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Wpisz kod PUK składający się z co najmniej 8 cyfr."</string>
     <string name="needPuk" msgid="919668385956251611">"Karta SIM jest zablokowana kodem PUK. Wprowadź kod PUK, aby odblokować kartę."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Wprowadź kod PUK2, aby odblokować kartę SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Nie udało się. Włącz blokadę karty SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> próbę, zanim karta SIM zostanie zablokowana."</item>
+    <item quantity="other" msgid="7530597808358774740">"Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> prób(y), zanim karta SIM zostanie zablokowana."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Nazwa rozmówcy przy połączeniach przychodzących"</string>
@@ -130,9 +157,10 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchronizuj"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Zbyt wiele usuwanych <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Pamięć tabletu jest pełna. Usuń niektóre pliki, aby zwolnić miejsce."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Pamięć w zegarku jest pełna. Usuń niektóre pliki, by zwolnić miejsce."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Pamięć telefonu jest pełna. Usuń niektóre pliki, aby zwolnić miejsce."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Sieć może być monitorowana"</string>
-    <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Przez nieznaną firmę zewnętrzną"</string>
+    <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Przez nieznany podmiot zewnętrzny"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"Przez <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
     <string name="me" msgid="6545696007631404292">"Ja"</string>
     <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Opcje tabletu"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Dzwonek włączony"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Wyłączanie..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablet zostanie wyłączony."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Zegarek zostanie wyłączony."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefon zostanie wyłączony"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Czy chcesz wyłączyć?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Uruchom w trybie awaryjnym"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Tryb samolotowy"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Tryb samolotowy jest włączony"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Tryb samolotowy jest wyłączony"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Ustawienia"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"&gt;999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Tryb awaryjny"</string>
     <string name="android_system_label" msgid="6577375335728551336">"System Android"</string>
@@ -251,15 +281,15 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"odinstalowywanie skrótów"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Pozwala aplikacji usuwać skróty z ekranu głównego bez interwencji użytkownika."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"przekierowywanie połączeń wychodzących"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Pozwala aplikacji na przetwarzanie połączeń wychodzących i zmianę wybieranego numeru. Aplikacje z tym uprawnieniem mogą monitorować, przekierowywać lub blokować połączenia wychodzące."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Pozwala aplikacji na sprawdzenie numeru wybieranego w trakcie połączenia wychodzącego, a także umożliwia przerwanie połączenia lub przekierowanie go pod inny numer."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"odbieranie wiadomości tekstowych (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Pozwala aplikacji na odbieranie i przetwarzanie SMS-ów. To oznacza, że aplikacja będzie mogła bez Twojej wiedzy monitorować i usuwać wiadomości wysyłane do Twojego urządzenia."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"odbieranie wiadomości tekstowych (MMS)"</string>
     <string name="permdesc_receiveMms" msgid="533019437263212260">"Pozwala aplikacji na odbieranie i przetwarzanie MMS-ów. To oznacza, że aplikacja będzie mogła bez Twojej wiedzy monitorować i usuwać wiadomości wysyłane do Twojego urządzenia."</string>
     <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"odbiór emisji alarmowych"</string>
     <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"Pozwala aplikacji na odbieranie i przetwarzanie komunikatów transmisji alarmowych. To pozwolenie jest dostępne tylko dla aplikacji systemowych."</string>
-    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"odczyt wiadomości z sieci komórkowej"</string>
-    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Zezwala aplikacji na odczyt wiadomości z sieci komórkowej odebranych na urządzeniu. Alerty sieci komórkowej są dostarczane w niektórych lokalizacjach w celu ostrzeżenia Cię o sytuacjach alarmowych. Złośliwe aplikacje mogą wpływać na wydajność lub zakłócać działanie urządzenia po odebraniu wiadomości alarmowej z sieci komórkowej."</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"odczyt komunikatów z sieci komórkowej"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Zezwala aplikacji na odczyt komunikatów z sieci komórkowej odebranych na urządzeniu. Komunikaty alarmowe z sieci komórkowej są dostarczane w niektórych lokalizacjach w celu ostrzeżenia Cię o sytuacjach zagrożenia. Złośliwe aplikacje mogą wpływać na wydajność lub zakłócać działanie urządzenia po odebraniu komunikatu alarmowego z sieci komórkowej."</string>
     <string name="permlab_sendSms" msgid="5600830612147671529">"wysyłanie wiadomości SMS"</string>
     <string name="permdesc_sendSms" msgid="7094729298204937667">"Pozwala aplikacji na wysyłanie SMS-ów. Może to skutkować nieoczekiwanymi opłatami. Złośliwe aplikacje mogą generować koszty, wysyłając wiadomości bez Twojego potwierdzenia."</string>
     <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"wysyłanie zdarzeń odpowiedzi przez SMS"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Pozwala aplikacji na pobieranie zawartości aktywnego okna. Złośliwe aplikacje mogą pobrać całą zawartość okna i przeanalizować znajdujący się w nim tekst z wyjątkiem haseł."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"tymczasowo włącz ułatwienia dostępu"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Umożliwia aplikacji tymczasowe włączanie ułatwień dostępu na urządzeniu. Złośliwe aplikacje mogą je włączać bez zgody użytkownika."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"pobieranie informacji o oknach"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Zezwala aplikacji na pobieranie informacji o oknach z menedżera okien. Złośliwe aplikacje mogą pobierać informacje przeznaczone do użytku wewnętrznego w systemie."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"pobieranie tokenu okna"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Zezwala aplikacji na pobieranie tokenu okna. Złośliwe aplikacje mogą podszywać się pod system i bez autoryzacji wchodzić w interakcję z oknem aplikacji."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"pobieranie statystyk klatek"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Zezwala aplikacji na zbieranie statystyk klatek. Złośliwe aplikacje mogą śledzić statystyki klatek wyświetlanych w oknach innych aplikacji."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrowanie zdarzeń"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Zezwala aplikacji na zarejestrowanie filtra wejściowego, który filtruje strumień wszystkich zdarzeń z udziałem użytkownika przed ich rozesłaniem. Złośliwe aplikacje mogą kontrolować interfejs systemu niezależnie od działań użytkownika."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"powiększanie ekranu"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Zezwala aplikacji na powiększenie zawartości ekranu. Szkodliwe aplikacje mogą przekształcić zawartość ekranu tak, by urządzenie stało się bezużyteczne."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"częściowe wyłączenie"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Przełącza menedżera aktywności w stan wyłączenia. Nie wykonuje pełnego wyłączenia."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zapobieganie przełączaniu aplikacji"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Pozwala aplikacji na wysyłanie powiadomienia, że została odebrana wiadomość SMS. Złośliwe aplikacje mogą to wykorzystać do fałszowania przychodzących wiadomości SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"wysyłanie transmisji informującej o otrzymaniu wiadomości WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Pozwala aplikacji na nadanie powiadomienia o odebraniu wiadomości WAP PUSH. Złośliwe aplikacje mogą to wykorzystać do fałszowania potwierdzenia odbioru wiadomości MMS lub do niezauważalnego podmieniania zawartości dowolnej strony internetowej jej szkodliwymi wariantami."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"rozsyłanie informacji o ocenie sieci"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Pozwala aplikacji na wysłanie powiadomienia, że sieci wymagają oceny. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ograniczanie liczby uruchomionych procesów"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Pozwala aplikacji na kontrolowanie maksymalnej liczby uruchamianych procesów. Nigdy niewykorzystywane przez normalne aplikacje."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"wymuszanie zamknięcia aplikacji w tle"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Pozwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi VPN. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"powiązanie z tapetą"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Pozwala na tworzenie powiązania z interfejsem najwyższego poziomu tapety. Nieprzeznaczone dla zwykłych aplikacji."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"powiąż z interaktorem głosowym"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi interakcji głosowej. Nieprzeznaczone dla zwykłych aplikacji."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"powiązanie z wyświetlaczem zdalnym"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu wyświetlacza zdalnego. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"powiązanie z usługą widżetów"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi widżetów. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"powiązanie z usługą dostawcy tras"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Umożliwia właścicielowi powiązanie z dowolnymi zarejestrowanymi dostawcami tras. Nie powinno być nigdy potrzebne w normalnych aplikacjach."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interakcja z administratorem urządzenia"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Zezwala na wysyłanie intencji do administratora urządzenia. Nie powinno być nigdy potrzebne w przypadku zwykłych aplikacji."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"powiązanie z wejściem TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Zezwala na utworzenie powiązania z głównym interfejsem wejścia TV. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"dodaj lub usuń administratora urządzenia"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Umożliwia właścicielowi dodawanie i usuwanie aktywnych administratorów urządzenia. Ta opcja nie jest wykorzystywana w przypadku standardowych aplikacji."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"zmienianie orientacji ekranu"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Pozwala aplikacji na użycie dowolnego zainstalowanego dekodera multimediów do odtwarzania."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"zarządzanie zaufanymi danymi uwierzytelniającymi"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Zezwala aplikacji na instalowanie i odinstalowywanie certyfikatów CA jako zaufanych danych uwierzytelniających."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"uruchom aplikację w czasie bezczynności"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"To uprawnienie pozwala systemowi Android uruchomić aplikację w tle, gdy urządzenie nie jest używane."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"czytanie/zapisywanie w zasobach należących do diagnostyki"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Pozwala aplikacji na czytanie i zapisywanie wszystkich zasobów należących do grupy diagnostyki, na przykład plików w katalogu /dev. Może to potencjalnie wpłynąć na stabilność i bezpieczeństwo systemu. Powinno być wykorzystywane WYŁĄCZNIE do diagnozowania sprzętu przez producenta lub operatora."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"włączanie lub wyłączanie składników aplikacji"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Pozwala aplikacji na odczyt osobistych informacji przechowywanych w Twoim profilu na urządzeniu (np. imienia i nazwiska lub adresu). Oznacza to, że aplikacja może Cię zidentyfikować i wysłać informacje z Twojego profilu do innych osób."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"zmiana własnej karty kontaktu"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Pozwala aplikacji na zmianę lub dodanie osobistych informacji przechowywanych w Twoim profilu na urządzeniu (np. imienia i nazwiska lub adresu). Oznacza to, że aplikacja może Cię zidentyfikować i wysłać informacje z Twojego profilu do innych osób."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"czujniki ciała (np. monitorujące tętno)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Zezwala aplikacji na dostęp do danych z czujników mierzących procesy zachodzące w ciele, np. bicie serca (tętno)."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"odczyt sieci społecznościowych"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Pozwala aplikacji na odczyt i synchronizację informacji publikowanych przez Ciebie i Twoich znajomych w sieciach społecznościowych. Zachowaj ostrożność, udostępniając informacje. Aplikacja z tym uprawnieniem może odczytać całą komunikację, którą prowadzisz ze swoimi znajomymi w sieciach społecznościowych, niezależnie od jej poufności. Uwaga: to uprawnienie może nie być egzekwowane we wszystkich sieciach społecznościowych."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"zapis sieci społecznościowych"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Pozwala aplikacji na wykorzystanie funkcji niskiego poziomu usługi SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"czytanie bufora ramki"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Pozwala aplikacji na odczyt zawartości bufora ramki."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"dostęp do InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Zezwala aplikacji na wykorzystanie niskopoziomowych funkcji usługi InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurowanie wyświetlaczy Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Zezwala aplikacji na konfigurację wyświetlaczy Wi-Fi i łączenie z nimi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"zarządzanie wyświetlaczami Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Pozwala aplikacji na modyfikowanie globalnych ustawień dźwięku, takich jak głośność oraz urządzenie wyjściowe."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"nagrywanie dźwięku"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Pozwala aplikacji na nagrywanie dźwięku przez mikrofon. Aplikacja z tym uprawnieniem może nagrywać dźwięk w dowolnym momencie bez Twojego potwierdzenia."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikacja z kartą SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Pozwala aplikacji na wysyłanie poleceń do karty SIM. To bardzo niebezpieczne."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"wykonywanie zdjęć i filmów wideo"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Pozwala aplikacji na robienie zdjęć i nagrywanie filmów przy użyciu aparatu. Aplikacja z tym uprawnieniem może użyć aparatu w dowolnym momencie bez Twojego potwierdzenia."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"wyłącz wskaźnik LED transmisji, gdy aparat jest w użyciu"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Pozwala aplikacji na kontrolowanie funkcji telefonu w urządzeniu. Aplikacja z tymi uprawnieniami może zmieniać, włączać i wyłączać sieci bezprzewodowe itp. bez informowania użytkownika."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"odczytywanie stanu i informacji o telefonie"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Pozwala aplikacji na dostęp do funkcji telefonicznych urządzenia. Aplikacja z tym uprawnieniem może odczytać numer telefonu i identyfikator urządzenia, sprawdzić, czy połączenie jest aktywne, oraz poznać numer, z którym jest nawiązane połączenie."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"dokładne rozpoznawanie stanów telefonu"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Pozwala aplikacji dokładnie rozpoznawać stany telefonu. Aplikacja z tym uprawnieniem może określić rzeczywisty stan połączenia, ustalić, czy jest ono aktywne czy znajduje się w tle, odczytać informacje o nieudanych połączeniach, precyzyjnie określić stan połączenia transmisji danych oraz odczytać informacje o błędach transmisji danych."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zapobieganie przechodzeniu tabletu do trybu uśpienia"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zapobieganie przejściu telefonu w stan uśpienia"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Pozwala aplikacji na zapobieganie przechodzeniu tabletu do trybu uśpienia."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"zmienianie stanu WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Pozwala aplikacji na nawiązywanie i kończenie połączeń z sieciami WiMAX w tablecie."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Pozwala aplikacji na nawiązywanie i kończenie połączeń z sieciami WiMAX w telefonie."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ocenianie sieci"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Pozwala aplikacji na ocenę sieci i wybieranie sieci preferowanych przez tablet."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Pozwala aplikacji na ocenę sieci i wybieranie sieci preferowanych przez telefon."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"parowanie z urządzeniami Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Pozwala aplikacji na dostęp do konfiguracji Bluetooth na tablecie oraz na nawiązywanie i akceptowanie połączeń ze sparowanych urządzeń."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Pozwala aplikacji na dostęp do konfiguracji Bluetooth na telefonie oraz na nawiązywanie i akceptowanie połączeń ze sparowanych urządzeń."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Umożliwia aplikacji pobieranie, sprawdzanie i usuwanie powiadomień, także tych, które pochodzą z innych aplikacji."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"utwórz połączenie z usługą odbiornika powiadomień"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi odbiornika powiadomień. Nie powinno być nigdy potrzebne dla zwykłych aplikacji."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"powiąż z usługą dostawcy warunków"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Zezwala na tworzenie powiązania z interfejsem najwyższego poziomu usługi dostawcy warunków. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"wywoływanie aplikacji konfiguracyjnej udostępnionej przez operatora"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Zezwala na wywoływanie aplikacji konfiguracyjnej udostępnionej przez operatora. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"śledź stan sieci"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Pozwala aplikacji śledzić stan sieci. Nieprzeznaczone dla zwykłych aplikacji."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"zmiana kalibracji urządzenia wejściwego"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Zezwala aplikacji na modyfikowanie parametrów kalibracji ekranu dotykowego. Nieprzeznaczone dla zwykłych aplikacji."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"dostęp do certyfikatów DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Zezwala aplikacji na dodanie i używanie certyfikatów DRM. Nieprzeznaczone dla zwykłych aplikacji."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Określ reguły hasła"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontrolowanie długości haseł odblokowania ekranu i dozwolonych w nich znaków"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Monitoruj próby odblokowania ekranu"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Domowy"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Służbowy"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Inny"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Brak aplikacji do wyświetlenia tego kontaktu."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Wpisz kod PIN."</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Wpisz kod PUK i nowy kod PIN."</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kod PUK"</string>
@@ -1204,7 +1264,7 @@
     <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Na czas połączenia z <xliff:g id="DEVICE_NAME">%1$s</xliff:g> telefon zostanie tymczasowo odłączony od Wi-Fi"</string>
     <string name="select_character" msgid="3365550120617701745">"Wstaw znak"</string>
     <string name="sms_control_title" msgid="7296612781128917719">"Wysyłanie wiadomości SMS"</string>
-    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; wysyła wiele SMS-ów. Chcesz pozwolić tej aplikacji dalej wysyłać SMS-y?"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"Aplikacja &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; wysyła wiele SMS-ów. Chcesz pozwolić tej aplikacji dalej wysyłać SMS-y?"</string>
     <string name="sms_control_yes" msgid="3663725993855816807">"Pozwól"</string>
     <string name="sms_control_no" msgid="625438561395534982">"Odmów"</string>
     <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; chce wysłać wiadomość do &lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;/b&gt;."</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Zezwala aplikacji na dostęp do bezpiecznego magazynu kluczy."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Kontroluj wyświetlanie i ukrywanie zabezpieczenia kluczami"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Umożliwia aplikacji kontrolowanie zabezpieczenia kluczami."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Monitoruj zmiany w stanie zaufania."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Zezwala aplikacji na monitorowanie zmian w stanie zaufania."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Powiąż z usługą agenta zaufania"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Zezwala aplikacji na powiązanie z usługą agenta zaufania."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interakcja z systemem odzyskiwania i aktualizacjami"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Zezwala aplikacji na interakcję z systemem odzyskiwania i aktualizacjami systemu."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dotknij dwukrotnie, aby sterować powiększeniem."</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nie można dodać widżetu."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"OK"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Tapeta"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Zmień tapetę"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Odbiornik powiadomień"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Dostawca warunków"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN aktywny"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Obsługa sieci VPN została włączona przez aplikację <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Dotknij, aby zarządzać siecią."</string>
@@ -1349,9 +1416,9 @@
     <string name="next_button_label" msgid="1080555104677992408">"Dalej"</string>
     <string name="skip_button_label" msgid="1275362299471631819">"Pomiń"</string>
     <string name="throttle_warning_notification_title" msgid="4890894267454867276">"Wysoki poziom użycia danych"</string>
-    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Dotknij, aby uzyskać więcej informacji na temat używania danych komórkowych."</string>
+    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"Dotknij, aby uzyskać więcej informacji na temat używania danych mobilnych."</string>
     <string name="throttled_notification_title" msgid="6269541897729781332">"Przekroczono limit danych"</string>
-    <string name="throttled_notification_message" msgid="5443457321354907181">"Dotknij, aby uzyskać więcej informacji na temat używania danych komórkowych."</string>
+    <string name="throttled_notification_message" msgid="5443457321354907181">"Dotknij, aby uzyskać więcej informacji na temat używania danych mobilnych."</string>
     <string name="no_matches" msgid="8129421908915840737">"Brak wyników"</string>
     <string name="find_on_page" msgid="1946799233822820384">"Znajdź na stronie"</string>
   <plurals name="matches_found">
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Wybierz aplikację"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Nie udało się uruchomić aplikacji <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Udostępnij przez"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Udostępnij przez <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Uchwyt przesuwny. Dotknij i przytrzymaj."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Przesuń w górę: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Przesuń w dół: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Przesuń w lewo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Przesuń w prawo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Odblokuj"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Aparat"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Wyciszenie"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Włącz dźwięk"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Szukaj"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Przesuń, aby odblokować."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Podłącz zestaw słuchawkowy, aby wysłuchać znaków hasła wypowiadanych na głos."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Kropka"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Dźwięk Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Wyświetlacz bezprzewodowy"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Gotowe"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Wyjście multimediów"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Połącz z urządzeniem"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Prezentuj ekran na urządzeniu"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Szukam urządzeń…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Ustawienia"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Rozłącz"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skanuję..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Łączę..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Dostępne"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Nakładka nr <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", bezpieczny"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Podłączony jest wyświetlacz bezprzewodowy"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Ten ekran jest wyświetlany na innym urządzeniu"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Rozpoczynam prezentowanie ekranu"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Łączę z <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Trwa prezentowanie ekranu"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Połączono z <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Rozłącz"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Połączenie alarmowe"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nie pamiętam wzoru"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokowuję kartę SIM…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nieprawidłowy PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Wpisz PIN o długości od 4 do 8 cyfr."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK musi mieć co najmniej 8 cyfr."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK musi mieć 8 cyfr."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ponownie podaj poprawny kod PUK. Nieudane próby spowodują trwałe wyłączenie karty SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kody PIN nie pasują"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Zbyt wiele prób narysowania wzoru"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Spróbuj ponownie później"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Przesuń z góry w dół, by zamknąć pełny ekran."</string>
+    <string name="done_label" msgid="2093726099505892398">"Gotowe"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Kołowy suwak godzin"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Kołowy suwak minut"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Wybierz godziny"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Wybierz minuty"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Siatka miesięczna z dniami"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Lista lat"</string>
+    <string name="select_day" msgid="7774759604701773332">"Wybierz miesiąc i dzień"</string>
+    <string name="select_year" msgid="7952052866994196170">"Wybierz rok"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Wybrałeś <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> usunięte"</string>
 </resources>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index f3c4020..668f9ef 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Sem nome&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Introduza um PUK que tenha 8 ou mais algarismos."</string>
     <string name="needPuk" msgid="919668385956251611">"O seu cartão SIM está bloqueado com PUK. Introduza o código PUK para desbloqueá-lo."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Introduza o PUK2 para desbloquear o cartão SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Ação sem êxito. Ative o bloqueio do SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativa antes de o cartão SIM ficar bloqueado."</item>
+    <item quantity="other" msgid="7530597808358774740">"Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativas antes de o cartão SIM ficar bloqueado."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID do Autor da Chamada"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronização"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Demasiadas eliminações de <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"O armazenamento do tablet está cheio. Elimine alguns ficheiros para libertar espaço."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"O armazenamento de visualizações está cheio. Elimine alguns ficheiros para libertar espaço."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"O armazenamento do telemóvel está cheio. Elimine alguns ficheiros para libertar espaço."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"A rede pode ser monitorizada"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Por um terceiro desconhecido"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Campainha ativada"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"A encerrar..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"O seu tablet irá encerrar."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"As suas visualizações vão ser encerradas."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"O seu telefone será encerrado."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Pretende encerrar?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reiniciar no modo de segurança"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo de avião"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"O modo de voo está ativado"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"O modo de voo está desativado"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Definições"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Modo seguro"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"desinstalar atalhos"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permite que a aplicação remova atalhos do Ecrã principal sem a intervenção do utilizador."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"redirecionar as chamadas efetuadas"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permite que a aplicação processe chamadas efetuadas e mude o número a marcar. Esta autorização permite que a aplicação monitorize, redirecione ou impeça a realização de chamadas."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permite que a aplicação veja o número que é marcado durante uma chamada efetuada, com a opção de redirecionar a chamada para um número diferente ou terminar a chamada."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"receber mensagens de texto (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permite que a aplicação receba e processe mensagens SMS. Isto significa que a aplicação poderá monitorizar ou eliminar mensagens enviadas para o seu dispositivo sem as apresentar."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"receber mensagens de texto (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que a aplicação obtenha o conteúdo da janela ativa. As aplicações maliciosas podem obter todo o conteúdo da janela e examinar todo o texto, exceto as palavras-passe."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"acessibilidade ativada temporariamente"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite que uma aplicação ative temporariamente a acessibilidade no dispositivo. As aplicações maliciosas podem ativar a acessibilidade sem o consentimento do utilizador."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"obter informações da janela"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que uma aplicação obtenha informações sobre as janelas a partir do gestor de janelas. Aplicações maliciosas podem obter informações que se destinam à utilização interna do sistema."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"obter token da janela"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permite que uma aplicação obtenha o token da janela. As aplicações maliciosas podem interagir de forma não autorizada com a janela da aplicação, roubando a identidade do sistema."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"obter estatísticas de fotograma"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permite que uma aplicação recolha estatísticas de fotograma. As aplicações maliciosas podem observar as estatísticas de fotograma de janelas de outras aplicações."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que uma aplicação registe um filtro de entrada que filtra a transmissão em fluxo contínuo para todos os eventos de utilizador antes de serem entregues. Uma aplicação maliciosa pode controlar a IU do sistema sem intervenção do utilizador."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ampliar o visor"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permite que uma aplicação amplie o conteúdo de um visor. As aplicações maliciosas poderão transformar o conteúdo do visor de um modo que torne o dispositivo inutilizável."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"encerramento parcial"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Coloca o gestor de actividade num estado de encerramento. Não executa um encerramento completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"impedir trocas de aplicações"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permite que a aplicação difunda uma notificação de que foi recebida uma mensagem SMS. As aplicações maliciosas podem utilizar este recurso para forjar mensagens SMS recebidas."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"enviar difusão recebida através de PUSH WAP"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permite que a aplicação difunda uma notificação de que foi recebida uma mensagens PUSH WAP. As aplicações maliciosas podem utilizar isto para forjar um recibo de mensagem MMS ou substituir, de forma silenciosa, o conteúdo de qualquer página Web por variantes maliciosas."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"enviar transmissão de pontuação de redes"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Permite à aplicação transmitir uma notificação de que é necessário pontuar as redes. Nunca é necessário para aplicações normais."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"número limite de processos em execução"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permite a uma aplicação controlar o número máximo de processos que será executado. Nunca é necessário para aplicações normais."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forçar as aplicações em segundo plano a fechar"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite que o titular se vincule à interface de nível superior de um serviço de VPN. Nunca deverá ser necessário para aplicações normais."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"vincular a uma imagem de fundo"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite ao titular vincular-se à interface de nível superior de uma imagem de fundo. Nunca deverá ser necessário para aplicações normais."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"vincular a um interlocutor de voz"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Permite que o titular vincule a interface de nível superior de um serviço de interação de voz. Nunca deverá ser necessário para aplicações normais."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"associar a um ecrã remoto"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite ao detentor associar a interface de nível superior a um ecrã remoto. Nunca deve ser necessário para aplicações normais."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"vincular a um serviço de widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite que o titular vincule a interface de nível superior de um serviço de widget. Nunca deverá ser necessário para aplicações normais."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"vincular a serviço de fornecedor de trajeto"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permite ao titular vincular a quaisquer fornecedores de trajeto registado. Nunca deverá ser necessário para aplicações normais."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interagir com um administrador do dispositivo"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite ao titular enviar intenções para um administrador do aparelho. Nunca deverá ser necessário para aplicações normais."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"vincular a uma entrada de TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permite ao titular vincular à interface de nível superior de uma entrada de TV. Nunca deverá ser necessário para aplicações normais."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"adicionar ou remover um administrador de dispositivos"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite que o titular adicione ou remova administradores de dispositivos ativos. Nunca deverá ser necessário para aplicações normais."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"mudar orientação do ecrã"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permite que a aplicação utilize qualquer descodificador de multimédia instalado para descodificar a reprodução."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"gerir credenciais fidedignas"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permite que a aplicação instale e desinstale certificados da AC (Autoridade de certificação) como credenciais fidedignas."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"executar aplicação durante o tempo de inatividade"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Esta autorização permite ao sistema Android executar a aplicação em segundo plano enquanto o dispositivo não estiver a ser utilizado."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"ler/escrever em recursos propriedade de diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permite à aplicação ler e escrever em qualquer recurso que seja propriedade do grupo diag; por exemplo, ficheiros em /dev. Isto pode potencialmente afetar a estabilidade e a segurança do sistema e deve ser utilizado APENAS para diagnósticos específicos do hardware pelo fabricante ou pelo operador."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"ativar ou desativar componentes da aplicação"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permite que a aplicação leia dados de perfil pessoais guardados no dispositivo, tais como o seu nome e informações de contacto. Isto significa que outras aplicações podem identificá-lo e enviar os seus dados de perfil a terceiros."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modificar o próprio cartão de contacto"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permite que a aplicação altere ou adicione dados de perfil pessoais guardados no dispositivo, tais como o seu nome e informações de contacto. Isto significa que outras aplicações podem identificá-lo e enviar os seus dados de perfil a terceiros."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"sensores corporais (como monitores do ritmo cardíaco)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permite à aplicação aceder a dados de sensores que o utilizador usa para medir o que está a acontecer no seu corpo, por exemplo o ritmo cardíaco."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ler o seu fluxo social"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permite que a aplicação aceda e sincronize atualizações de redes sociais suas e dos seus amigos. Tenha cuidado ao partilhar informações, pois esta ação permite que a aplicação leia comunicações entre si e os seus amigos nas redes sociais, independentemente do grau de confidencialidade. Nota: esta autorização pode não ser aplicada a todas as redes sociais."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escrever para o seu fluxo social"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite à aplicação utilizar funcionalidades de SurfaceFlinger de nível inferior."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"ler memória intermédia de fotogramas"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite à aplicação ler o conteúdo da memória intermédia de fotogramas."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"aceder a InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permite que a aplicação utilize funcionalidades de InputFlinger de nível inferior."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurar visores Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permite que a aplicação se configure e se ligue a visores Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controlar visores Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que a aplicação modifique definições de áudio globais, tais como o volume e qual o altifalante utilizado para a saída de som."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"gravar áudio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que a aplicação grave áudio com o microfone. Esta autorização permite que a aplicação grave áudio em qualquer altura sem a confirmação do utilizador."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicação com o SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que a aplicação envie comandos para o SIM. Esta ação é muito perigosa."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"tirar fotografias e vídeos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permite que a aplicação tire fotografias e grave vídeos com a câmara. Esta autorização permite que a aplicação utilize a câmara sem a sua confirmação em qualquer altura."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"desativar LED indicador de transmissão com a câmara em utilização"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permite que a aplicação controle as funcionalidades de telefone do aparelho. Uma aplicação com esta permissão pode alternar entre redes, ligar/desligar o rádio do telefone e outras coisas semelhantes sem sequer o notificar."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ler o estado e a identidade do telemóvel"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que a aplicação aceda às funcionalidades de telefone do dispositivo. Esta autorização permite que a aplicação determine o número de telefone e IDs do dispositivo, se alguma chamada está ativa e qual o número remoto ligado por uma chamada."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"ler os estados precisos do telemóvel"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permite que a aplicação aceda ao estados precisos do telemóvel. Esta autorização permite que a aplicação determine o estado real da chamada, se uma chamada está ativa ou em segundo plano, falhas em chamadas, o estado preciso da ligação de dados e falhas de ligação de dados."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"impedir que o tablet entre em inactividade"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"impedir modo de inactividade do telefone"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permite que a aplicação impeça o tablet de entrar no modo de suspensão."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Alterar estado do WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permite que a aplicação ligue e desligue o tablet de redes WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permite que a aplicação ligue e desligue o telemóvel de redes WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"pontuar redes"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Permite à aplicação classificar redes e influenciar as redes que o tablet deve preferir."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Permite à aplicação classificar redes e influenciar as redes que o telemóvel deve preferir."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"sincronizar com dispositivos Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permite que a aplicação visualize a configuração do Bluetooth no tablet e que estabeleça e aceite ligações com dispositivos emparelhados."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permite que a aplicação visualize a configuração do Bluetooth no telemóvel e que estabeleça e aceite ligações com dispositivos emparelhados."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que a aplicação obtenha, examine e limpe notificações, incluindo as que foram publicadas por outras aplicações."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"vincular a um serviço de escuta de notificações"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite que o titular vincule a interface de nível superior de um serviço de escuta de notificações. Nunca deverá ser necessário para aplicações normais."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"vincular a um serviço de fornecedor de condição"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Permite que o titular vincule a interface de nível superior de um serviço de fornecedor de condição. Nunca deverá ser necessário para aplicações normais."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invocar a aplicação de configuração fornecida pela operadora"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite que o titular invoque a aplicação de configuração fornecida pela operadora. Nunca deverá ser necessário para aplicações normais."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ouvir observações sobre as condições da rede"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permite que uma aplicação ouça observações sobre as condições da rede. Nunca deverá ser necessário para aplicações normais."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"alterar a calibragem de entrada do dispositivo"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permite à aplicação modificar os parâmetros de calibragem do ecrã tátil. Esta funcionalidade nunca deverá ser necessária para aplicações normais."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"Aceder a certificados DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permite que uma aplicação forneça e utilize certificados DRM. Nunca deverá ser necessário para aplicações normais."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Definir regras de palavra-passe"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Controlar o comprimento e os caracteres permitidos nas palavras-passe de desbloqueio do ecrã."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorizar tentativas de desbloqueio do ecrã"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Casa"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Emprego"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Outro"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Não foram encontradas aplicações para visualizar este contacto."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Escreva o código PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Escreva o PUK e o novo código PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
@@ -1089,7 +1149,7 @@
     <string name="Midnight" msgid="5630806906897892201">"Meia-noite"</string>
     <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
     <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
-    <string name="selectAll" msgid="6876518925844129331">"Seleccionar tudo"</string>
+    <string name="selectAll" msgid="6876518925844129331">"Selecionar tudo"</string>
     <string name="cut" msgid="3092569408438626261">"Cortar"</string>
     <string name="copy" msgid="2681946229533511987">"Copiar"</string>
     <string name="paste" msgid="5629880836805036433">"Colar"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite a uma aplicação aceder ao armazenamento seguro de proteção de teclado."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Controlar apresentação e ocultação de proteção de teclado"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que uma aplicação controle a proteção de teclado."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Registar alterações no estado trust."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que uma aplicação registe alterações no trust state."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Vincular a um serviço de trust agent"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite que uma aplicação fique vinculada a um serviço de trust agent."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interagir com o sistema de recuperação e de atualização"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permite que uma aplicação interaja com o sistema de recuperação e as atualizações do sistema."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toque duas vezes para controlar o zoom"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Não foi possível adicionar widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Imagem de fundo"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Alterar imagem de fundo"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Serviço de escuta de notificações"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Fornecedor de condição"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN ativada"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"A VPN foi ativada pelo <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Toque para gerir a rede."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Escolher uma aplicação"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Não foi possível iniciar <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Partilhar com:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartilhar com <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Barra deslizante. Toque &amp; não solte."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Deslize para baixo para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Deslize para a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Deslize para a direita para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Câmara"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Deslizar rapidamente para desbloquear."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Ligue os auscultadores com microfone integrado para ouvir as teclas da palavra-passe."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Ponto."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Visualização sem fios"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de som multimédia"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Ligar ao dispositivo"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Transmitir ecrã para o dispositivo"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"A pesquisar dispositivos…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Definições"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Desligar"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"A procurar..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"A ligar..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponível"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Sobreposição #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> ppp"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", protegido"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"O Display sem fios está ligado"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Este ecrã está a ser apresentado noutro dispositivo"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"A transmitir o ecrã"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"A ligar a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"A transmitir o ecrã"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Ligado a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Desligar"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Chamada de emergência"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Esqueceu-se da Sequência"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"A desbloquear cartão SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduza um PIN entre 4 e 8 números."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"O código PUK deve ter 8 ou mais números."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"O código PUK deve ter 8 números."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Volte a introduzir o código PUK correto. Demasiadas tentativas consecutivas irão desativar permanentemente o SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Os códigos PIN não correspondem"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Demasiadas tentativas para desenhar sequência"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Tente novamente mais tarde"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Deslize rapidamente para baixo para sair do ecrã inteiro."</string>
+    <string name="done_label" msgid="2093726099505892398">"Concluído"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Controlo de deslize circular das horas"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Controlo de deslize circular dos minutos"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Selecionar horas"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Selecionar minutos"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Grelha de dias do mês"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Lista de anos"</string>
+    <string name="select_day" msgid="7774759604701773332">"Selecionar mês e dia"</string>
+    <string name="select_year" msgid="7952052866994196170">"Selecionar ano"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> selecionado"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> eliminado"</string>
 </resources>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index 15a6130..db493e0 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Sem título&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Digite um PUK com oito números ou mais."</string>
     <string name="needPuk" msgid="919668385956251611">"O seu cartão SIM está bloqueado por um PUK. Digite o código PUK para desbloqueá-lo."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Digite o PUK2 para desbloquear o cartão SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Falha. Ative o bloqueio do SIM/R-UIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>. Caso o código correto não seja digitado, o SIM será bloqueado."</item>
+    <item quantity="other" msgid="7530597808358774740">"Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>. Caso o código correto não seja digitado, o SIM será bloqueado."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID do chamador de entrada"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronizar"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Muitas exclusões de <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"O armazenamento do tablet está cheio. Exclua alguns arquivos para liberar espaço."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Armazenamento do relógio cheio. Exclua alguns arquivos para liberar espaço."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"O armazenamento do telefone está cheio. Exclua alguns arquivos para liberar espaço."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"A rede pode ser monitorada"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Por terceiros desconhecidos"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Campainha ligada"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Encerrando…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Seu tablet será desligado."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Seu relógio será desligado."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"O seu telefone será desligado."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Deseja desligar?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reiniciar no modo de segurança"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modo avião"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modo avião ATIVADO"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modo avião DESATIVADO"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Configurações"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"&gt;999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Modo de segurança"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistema Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"desinstalar atalhos"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permite que o aplicativo remova atalhos da tela inicial sem a intervenção do usuário."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"redirecionar as chamadas efetuadas"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permite que o aplicativo processe as chamadas de saída e altere o número a ser discado. Esta permissão autoriza o aplicativo a monitorar, redirecionar ou evitar chamadas de saída."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permite que o aplicativo veja o número discado ao realizar uma chamada, com a opção de redirecionar a chamada para outro número ou abortá-la."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"receber mensagens de texto (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permite que o aplicativo receba e processe mensagens SMS. Isso significa que o aplicativo pode monitorar ou excluir mensagens enviadas para o dispositivo sem mostrá-las para você."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"receber mensagens de texto (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite que o aplicativo recupere o conteúdo da janela ativa. Aplicativos maliciosos podem recuperar o conteúdo da janela inteira e examinar todo o texto, exceto as senhas."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ativar temporariamente a acessibilidade"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite que um aplicativo ative temporariamente a acessibilidade no dispositivo. Aplicativos maliciosos podem ativar a acessibilidade sem o consentimento do usuário."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"recuperar informações de janelas"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite que o aplicativo recupere informações sobre as janelas do gerenciador de janelas. Aplicativos mal-intencionados podem recuperar informações destinadas ao uso interno do sistema."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"recuperar token da janela"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permite que o aplicativo recupere o token da janela. Aplicativos maliciosos podem realizar interações não autorizadas com a janela do aplicativo em nome do sistema."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"recuperar estatísticas de quadros"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permite que o aplicativo colete estatísticas de quadros. Aplicativos maliciosos podem observar as estatísticas de quadros de janelas de outros aplicativos."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrar eventos"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permite que o aplicativo registre um filtro de entrada que filtra o fluxo de todos os eventos do usuário antes que sejam enviados. Aplicativos mal-intencionados podem controlar a interface do sistema sem a intervenção do usuário."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ampliar monitor"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permite que o aplicativo amplie o conteúdo de um monitor. Aplicativos maliciosos podem manipular o conteúdo do monitor de modo a tornar o dispositivo inutilizável."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"desligamento parcial"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Coloca o gerenciador de atividades em um estado de desligamento. Não executa o desligamento completo."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar trocas de aplicativo"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permite que o aplicativo transmita uma notificação quando uma mensagem SMS foi recebida. Aplicativos maliciosos podem usar esse recurso para forjar mensagens SMS recebidas."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"enviar transmissão WAP-PUSH recebida"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permite que o aplicativo transmita uma notificação quando uma mensagem WAP PUSH for recebida. Aplicativos maliciosos podem usar esse recurso para forjar o recebimento de mensagens MMS ou substituir o conteúdo de qualquer página da web com variantes maliciosas."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"enviar transmissão de avaliação de redes"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Permite que o aplicativo transmita uma notificação informando que as redes devem ser avaliadas. Não deve ser necessário para aplicativos comuns."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitar número de processos em execução"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permite que o aplicativo controle o máximo de processos que serão executados. Nunca é necessário para aplicativos normais."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forçar encerramento de aplicativos em segundo plano"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite que seu proprietário sujeite a interface de alto nível de um serviço de VPN. Nunca deve ser necessário para aplicativos normais."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sujeitar-se a um plano de fundo"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite que o proprietário utilize interface de nível superior de um plano de fundo. Nunca deve ser necessário para aplicativos normais."</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"usar uma tela remota"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite que o proprietário use a interface de nível superior de uma tela remota. Não deve ser necessário para aplicativos comuns."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"sujeitar-se a um serviço de widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite que o proprietário utilize a interface de nível superior de um serviço de widget. Nunca deve ser necessário para aplicativos normais."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"usar um serviço provedor de rotas"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permite que o proprietário use qualquer provedor de rotas registrado. Não deve ser necessário para aplicativos comuns."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interagir com o administrador de um dispositivo"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite que o proprietário envie tentativas ao administrador de um aparelho. Nunca deve ser necessário para aplicativos normais."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"associar a uma entrada de TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permite que o proprietário use a interface de nível superior de uma entrada de TV. Não deve ser necessário para aplicativos comuns."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"adicionar ou remover um administrador do dispositivo"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite que o proprietário adicione ou remova administradores do dispositivo ativos. Não deve ser necessário para aplicativos comuns."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"alterar orientação da tela"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permite que o aplicativo use qualquer decodificador de mídia instalado para reprodução."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"gerenciar credenciais confiáveis"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permite que o aplicativo instale e desinstale certificados CA como credenciais confiáveis."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"executar o aplicativo durante o tempo ocioso"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Permite que o sistema Android execute o aplicativo em segundo plano enquanto o dispositivo não está em uso."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"ler/gravar em recursos pertencentes ao diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permite que um aplicativo leia e grave em qualquer recurso que pertença ao grupo de diagnósticos, por exemplo, arquivos in/dev. Isso pode afetar a estabilidade e a segurança do sistema. Esse recurso deve ser usado APENAS para diagnósticos específicos do hardware realizados pelo fabricante ou pela operadora."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"ativar ou desativar os componentes do aplicativo"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permite que o aplicativo leia informações de perfil pessoal armazenadas no dispositivo, como seu nome e dados de contato. Isso significa que o aplicativo poderá identificá-lo e enviar suas informações de perfil para terceiros."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"mod. próprio cartão contato"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permite que o aplicativo altere ou adicione informações pessoais de perfil armazenadas em seu dispositivo, como seu nome e informações de contato. Isso significa que o aplicativo pode identificá-lo e enviar as informações de seus perfil para terceiros."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"sensores corporais"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permite que o aplicativo acesse dados de sensores usados para medir o que acontece em seu corpo, como seus batimentos cardíacos."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ler suas transmissões sociais"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permite que o aplicativo acesse e sincronize suas atualizações sociais e as de seus amigos. Tenha cuidado ao compartilhar informações: isto permite que o aplicativo leia as mensagens trocadas por você e seus amigos em redes sociais, independentemente de sua confidencialidade. Obsservaç: pode não ser aplicável a todas as redes sociais."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"escrever p/ suas transm. soc."</string>
@@ -477,6 +523,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite que o aplicativo use recursos com baixos níveis de SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"ler o buffer do frame"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite que o aplicativo leia o conteúdo do buffer de frame."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"acessar InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permite que o aplicativo use recursos com baixos níveis de InputFinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurar monitores Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permite que o aplicativo configure e conecte a monitores Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controlar monitores Wi-Fi"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite que o aplicativo modifique configurações de áudio globais como volume e alto-falantes de saída."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"gravar áudio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite que o aplicativo grave áudio com o microfone. Esta permissão autoriza o aplicativo a gravar áudio a qualquer momento, sem sua confirmação."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicação com sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite que o aplicativo envie comandos ao SIM. Muito perigoso."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"tirar fotos e gravar vídeos"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permite que o aplicativo tire fotos e filme vídeos com a câmera. Esta permissão autoriza o aplicativo a usar a câmera a qualquer momento sem sua confirmação."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"desativar a transmissão do LED indicador quando a câmera estiver em uso"</string>
@@ -550,6 +600,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permite que o aplicativo controle os recursos de telefone do dispositivo. Um aplicativo com essa permissão pode alternar entre redes, ligar e desligar o rádio do telefone e assim por diante, sem nunca notificá-lo."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"ler status e identidade do telefone"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite que o aplicativo acesse os recursos de telefonia do dispositivo. Esta permissão autoriza o aplicativo a determinar o número de telefone e IDs de dispositivo, quando uma chamada está ativa, e o número remoto conectado a uma chamada."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"ler estados precisos do telefone"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permite que o aplicativo acesse estados precisos do telefone. Permite que o aplicativo determine o status real da chamada, se uma chamada está ativa em segundo plano, falhas em chamadas, o status preciso da conexão de dados e falhas na conexão de dados."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"impedir modo de inatividade do tablet"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"impedir modo de inatividade do telefone"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permite que o aplicativo impeça o tablet de entrar no modo de inatividade."</string>
@@ -617,6 +669,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Alterar estado do WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permite que o aplicativo conecte e desconecte o tablet de redes WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permite que o aplicativo conecte e desconecte o telefone de redes WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"avaliar redes"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Permite que o aplicativo classifique as redes e influencie a escolha de redes pelo tablet."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Permite que o aplicativo classifique as redes e influencie a escolha de redes pelo smartphone."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"parear com dispositivos Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permite que o aplicativo acesse a configuração do Bluetooth no tablet, além de fazer e aceitar conexões com dispositivos pareados."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permite que o aplicativo acesse a configuração do Bluetooth no telefone, além de fazer e aceitar conexões com dispositivos pareados."</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite que o aplicativo recupere, examine e limpe notificações, inclusive as postadas por outros aplicativos."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"sujeitar a um serviço ouvinte de notificações"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite que o proprietário sujeite a interface de nível superior a um serviço ouvinte de notificações. Não deve ser necessário para aplicativos comuns."</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"invocar o aplicativo de configuração fornecido pela operadora"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite que o proprietário invoque o aplicativo de configuração fornecido pela operadora. Não deve ser necessário para aplicativos comuns."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"detectar observações nas condições da rede"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permite que o aplicativo detecte observações nas condições da rede. Não deve ser necessário para aplicativos comuns."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"alterar calibragem do dispositivo de entrada"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permite que o aplicativo modifique os parâmetros de calibragem da tela sensível ao toque. Não deve ser necessário para aplicativos normais."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"acessar certificados de DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permite que o aplicativo provisione e use certificados de DRM. Não deve ser necessário para aplicativos comuns."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Definir regras para senha"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Controlar o tamanho e os caracteres permitidos nas senhas de desbloqueio de tela."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorar tentativas de desbloqueio da tela"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Página inicial"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Comercial"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Outros"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nenhum aplicativo encontrado para visualizar este contato."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Insira o código PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Insira o PUK e o novo código PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite que o aplicativo acesse o armazenamento seguro do bloqueio de teclado."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Controlar a exibição e ocultação do bloqueio de tela"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite que o aplicativo controle o bloqueio de teclado."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Detectar alterações no estado de confiança."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite que o aplicativo detecte alterações no estado de confiança."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Associar a um serviço de agente de confiança"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite que o aplicativo se associe a um serviço de agente de confiança."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interagir com o sistema de atualizações e recuperação"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permite que um aplicativo interaja com o sistema de recuperação e as atualizações do sistema."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Toque duas vezes para controlar o zoom"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Não foi possível adicionar widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Ir"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Plano de fundo"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Alterar plano de fundo"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Ouvinte de notificações"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"VPN ativada"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"A VPN está ativada por <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Toque para gerenciar a rede."</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Selecione um aplicativo"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Não foi possível iniciar o <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Compartilhar com"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Compartilhar com <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Recurso deslizante. Toque e segure."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para baixo."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a esquerda."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a direita."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Desbloquear"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Câmera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silencioso"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Som ativado"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Deslize para desbloquear."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Conecte um fone de ouvido para ouvir as teclas da senha."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Ponto final."</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistema"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Áudio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Display sem fio"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Concluído"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Saída de mídia"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Conectar ao dispositivo"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Transmitir tela para dispositivo"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Procurando dispositivos…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Configurações"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Desconectar"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Verificando..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Conectando..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponível"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Sobreposição nº <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", seguro"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"O Display sem fio está conectado"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Tela exibida em outro dispositivo."</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Transmitindo a tela"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Conectando a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Transmitindo a tela"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Conectado a <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Desconectar"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Chamada de emergência"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Esqueci o padrão"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando o cartão SIM…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Digite um PIN com quatro a oito números."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"O código PUK deve ter 8 números ou mais."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"O código PUK deve ter oito números."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Introduza novamente o código PUK correto. Muitas tentativas malsucedidas desativarão permanentemente o SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Os códigos PIN não coincidem"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Muitas tentativas de padrão"</string>
@@ -1649,5 +1719,16 @@
     <item quantity="other" msgid="4730868920742952817">"Tente novamente em <xliff:g id="COUNT">%d</xliff:g> segundos"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Tente novamente mais tarde"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Deslize para baixo para sair da tela inteira"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Deslize de cima para baixo para sair da tela inteira"</string>
+    <string name="done_label" msgid="2093726099505892398">"Concluído"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Controle deslizante circular das horas"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Controle deslizante circular dos minutos"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Selecione as horas"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Selecione os minutos"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Grade mensal de dias"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Lista de anos"</string>
+    <string name="select_day" msgid="7774759604701773332">"Selecione o mês e o dia"</string>
+    <string name="select_year" msgid="7952052866994196170">"Selecione o ano"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> selecionado"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> excluído"</string>
 </resources>
diff --git a/core/res/res/values-rm/strings.xml b/core/res/res/values-rm/strings.xml
index 9154621..3103b1f 100644
--- a/core/res/res/values-rm/strings.xml
+++ b/core/res/res/values-rm/strings.xml
@@ -28,6 +28,28 @@
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <!-- no translation found for fileSizeSuffix (9164292791500531949) -->
     <skip />
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <!-- no translation found for untitled (4638956954852782576) -->
     <skip />
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
@@ -57,6 +79,10 @@
     <skip />
     <string name="needPuk" msgid="919668385956251611">"Vossa carta SIM è bloccada cun in PUK. Endatai il PUK per debloccar ella."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Endatai il PUK2 per debloccar la carta SIM."</string>
+    <!-- no translation found for enablePin (209412020907207950) -->
+    <skip />
+    <!-- no translation found for pinpuk_attempts:one (6596245285809790142) -->
+    <!-- no translation found for pinpuk_attempts:other (7530597808358774740) -->
     <!-- no translation found for imei (2625429890869005782) -->
     <skip />
     <!-- no translation found for meid (4841221237681254195) -->
@@ -156,6 +182,8 @@
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Memia blers cuntegns stizzads (<xliff:g id="CONTENT_TYPE">%s</xliff:g>)."</string>
     <!-- no translation found for low_memory (6494019234102154896) -->
     <skip />
+    <!-- no translation found for low_memory (4415914910770005166) -->
+    <skip />
     <!-- no translation found for low_memory (3475999286680000541) -->
     <skip />
     <!-- no translation found for ssl_ca_cert_warning (5848402127455021714) -->
@@ -182,6 +210,8 @@
     <string name="shutdown_progress" msgid="2281079257329981203">"Vegn serrà..."</string>
     <!-- no translation found for shutdown_confirm (3385745179555731470) -->
     <skip />
+    <!-- no translation found for shutdown_confirm (3490275567476369184) -->
+    <skip />
     <!-- no translation found for shutdown_confirm (649792175242821353) -->
     <skip />
     <!-- no translation found for shutdown_confirm_question (2906544768881136183) -->
@@ -210,6 +240,8 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Modus d\'aviun"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Il modus d\'aviun è activà"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Il modus d\'aviun è deactivà."</string>
+    <!-- no translation found for global_action_settings (1756531602592545966) -->
+    <skip />
     <!-- no translation found for status_bar_notification_info_overflow (5301981741705354993) -->
     <skip />
     <string name="safeMode" msgid="2788228061547930246">"Modus segirà"</string>
@@ -359,7 +391,7 @@
     <skip />
     <!-- no translation found for permlab_processOutgoingCalls (3906007831192990946) -->
     <skip />
-    <!-- no translation found for permdesc_processOutgoingCalls (5331318931937402040) -->
+    <!-- no translation found for permdesc_processOutgoingCalls (5156385005547315876) -->
     <skip />
     <!-- no translation found for permlab_receiveSms (8673471768947895082) -->
     <skip />
@@ -474,18 +506,18 @@
     <skip />
     <!-- no translation found for permdesc_temporary_enable_accessibility (8079456293182975464) -->
     <skip />
-    <!-- no translation found for permlab_retrieve_window_info (8532295199112519378) -->
+    <!-- no translation found for permlab_retrieveWindowToken (7154762602367758602) -->
     <skip />
-    <!-- no translation found for permdesc_retrieve_window_info (4998836370424186849) -->
+    <!-- no translation found for permdesc_retrieveWindowToken (668173747687795074) -->
+    <skip />
+    <!-- no translation found for permlab_frameStats (7056374987314361639) -->
+    <skip />
+    <!-- no translation found for permdesc_frameStats (4758001089491284919) -->
     <skip />
     <!-- no translation found for permlab_filter_events (8675535648807427389) -->
     <skip />
     <!-- no translation found for permdesc_filter_events (8006236315888347680) -->
     <skip />
-    <!-- no translation found for permlab_magnify_display (5973626738170618775) -->
-    <skip />
-    <!-- no translation found for permdesc_magnify_display (7121235684515003792) -->
-    <skip />
     <string name="permlab_shutdown" msgid="7185747824038909016">"serrar parzialmain"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Metta l\'administratur dad activitads en in stadi da pausa. El na vegn betg serrà dal tut."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"evitar il midar tranter applicaziuns"</string>
@@ -508,6 +540,10 @@
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"trametter in broadcast retschavì da WAP-PUSH"</string>
     <!-- no translation found for permdesc_broadcastWapPush (4783402525039442729) -->
     <skip />
+    <!-- no translation found for permlab_broadcastScoreNetworks (6432008366605475024) -->
+    <skip />
+    <!-- no translation found for permdesc_broadcastScoreNetworks (7652980974435077828) -->
+    <skip />
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitar il dumber maximal da process exequids"</string>
     <!-- no translation found for permdesc_setProcessLimit (7318061314040879542) -->
     <skip />
@@ -594,13 +630,29 @@
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sa fixar vid in fund davos"</string>
     <!-- no translation found for permdesc_bindWallpaper (7108428692595491668) -->
     <skip />
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <!-- no translation found for permlab_bindRemoteDisplay (1782923938029941960) -->
+    <skip />
+    <!-- no translation found for permdesc_bindRemoteDisplay (1261242718727295981) -->
+    <skip />
     <!-- no translation found for permlab_bindRemoteViews (5697987759897367099) -->
     <skip />
     <!-- no translation found for permdesc_bindRemoteViews (4717987810137692572) -->
     <skip />
+    <!-- no translation found for permlab_bindRouteProvider (4869394607915096847) -->
+    <skip />
+    <!-- no translation found for permdesc_bindRouteProvider (4703804520859960329) -->
+    <skip />
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interacziun cun in administratur dad apparats"</string>
     <!-- no translation found for permdesc_bindDeviceAdmin (569715419543907930) -->
     <skip />
+    <!-- no translation found for permlab_bindTvInput (5601264742478168987) -->
+    <skip />
+    <!-- no translation found for permdesc_bindTvInput (2371008331852001924) -->
+    <skip />
     <!-- no translation found for permlab_manageDeviceAdmins (4248828900045808722) -->
     <skip />
     <!-- no translation found for permdesc_manageDeviceAdmins (5025608167709942485) -->
@@ -670,6 +722,10 @@
     <skip />
     <!-- no translation found for permdesc_manageCaCertificates (4015644047196937014) -->
     <skip />
+    <!-- no translation found for permlab_bindIdleService (816311765497613780) -->
+    <skip />
+    <!-- no translation found for permdesc_bindIdleService (1767538493214100612) -->
+    <skip />
     <string name="permlab_diagnostic" msgid="8076743953908000342">"leger/scriver en resursas che appartegnan a diagnostics"</string>
     <!-- no translation found for permdesc_diagnostic (6608295692002452283) -->
     <skip />
@@ -740,6 +796,10 @@
     <skip />
     <!-- no translation found for permdesc_writeProfile (5552084294598465899) -->
     <skip />
+    <!-- no translation found for permlab_bodySensors (4871091374767171066) -->
+    <skip />
+    <!-- no translation found for permdesc_bodySensors (2998865085124153531) -->
+    <skip />
     <!-- no translation found for permlab_readSocialStream (1268920956152419170) -->
     <skip />
     <!-- no translation found for permdesc_readSocialStream (4255706027172050872) -->
@@ -783,6 +843,10 @@
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"leger il paraculp da frame"</string>
     <!-- no translation found for permdesc_readFrameBuffer (4937405521809454680) -->
     <skip />
+    <!-- no translation found for permlab_accessInputFlinger (5348635270689553857) -->
+    <skip />
+    <!-- no translation found for permdesc_accessInputFlinger (2104864941201226616) -->
+    <skip />
     <!-- no translation found for permlab_configureWifiDisplay (5595661694746742168) -->
     <skip />
     <!-- no translation found for permdesc_configureWifiDisplay (7916815158690218065) -->
@@ -817,6 +881,10 @@
     <string name="permlab_recordAudio" msgid="3876049771427466323">"registrar audio"</string>
     <!-- no translation found for permdesc_recordAudio (4906839301087980680) -->
     <skip />
+    <!-- no translation found for permlab_sim_communication (1180265879464893029) -->
+    <skip />
+    <!-- no translation found for permdesc_sim_communication (5725159654279639498) -->
+    <skip />
     <string name="permlab_camera" msgid="3616391919559751192">"fotografar e registrar videos"</string>
     <!-- no translation found for permdesc_camera (8497216524735535009) -->
     <skip />
@@ -915,6 +983,10 @@
     <skip />
     <!-- no translation found for permdesc_readPhoneState (1639212771826125528) -->
     <skip />
+    <!-- no translation found for permlab_readPrecisePhoneState (5476483020282007597) -->
+    <skip />
+    <!-- no translation found for permdesc_readPrecisePhoneState (6648009074263855418) -->
+    <skip />
     <!-- no translation found for permlab_wakeLock (1531731435011495015) -->
     <skip />
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"evitar ch\'il telefon midia en il modus stand-by"</string>
@@ -1037,6 +1109,12 @@
     <skip />
     <!-- no translation found for permdesc_changeWimaxState (697025043004923798) -->
     <skip />
+    <!-- no translation found for permlab_scoreNetworks (6445777779383587181) -->
+    <skip />
+    <!-- no translation found for permdesc_scoreNetworks (1304304745850215556) -->
+    <skip />
+    <!-- no translation found for permdesc_scoreNetworks (1831501848178651379) -->
+    <skip />
     <!-- no translation found for permlab_bluetooth (6127769336339276828) -->
     <skip />
     <!-- no translation found for permdesc_bluetooth (3480722181852438628) -->
@@ -1138,6 +1216,10 @@
     <skip />
     <!-- no translation found for permdesc_bindNotificationListenerService (985697918576902986) -->
     <skip />
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <!-- no translation found for permlab_invokeCarrierSetup (3699600833975117478) -->
     <skip />
     <!-- no translation found for permdesc_invokeCarrierSetup (4159549152529111920) -->
@@ -1146,6 +1228,14 @@
     <skip />
     <!-- no translation found for permdesc_accessNetworkConditions (6899102075825272211) -->
     <skip />
+    <!-- no translation found for permlab_setInputCalibration (4902620118878467615) -->
+    <skip />
+    <!-- no translation found for permdesc_setInputCalibration (4527511047549456929) -->
+    <skip />
+    <!-- no translation found for permlab_accessDrmCertificates (7436886640723203615) -->
+    <skip />
+    <!-- no translation found for permdesc_accessDrmCertificates (8073288354426159089) -->
+    <skip />
     <!-- no translation found for policylab_limitPassword (4497420728857585791) -->
     <skip />
     <!-- no translation found for policydesc_limitPassword (3252114203919510394) -->
@@ -1322,6 +1412,8 @@
     <skip />
     <!-- no translation found for sipAddressTypeOther (4408436162950119849) -->
     <skip />
+    <!-- no translation found for quick_contacts_not_available (746098007828579688) -->
+    <skip />
     <!-- no translation found for keyguard_password_enter_pin_code (3037685796058495017) -->
     <skip />
     <!-- no translation found for keyguard_password_enter_puk_code (4800725266925845333) -->
@@ -2082,6 +2174,18 @@
     <skip />
     <!-- no translation found for permdesc_control_keyguard (3043732290518629061) -->
     <skip />
+    <!-- no translation found for permlab_trust_listener (1765718054003704476) -->
+    <skip />
+    <!-- no translation found for permdesc_trust_listener (8233895334214716864) -->
+    <skip />
+    <!-- no translation found for permlab_bind_trust_agent_service (8242093169457695334) -->
+    <skip />
+    <!-- no translation found for permdesc_bind_trust_agent_service (7041930026024507515) -->
+    <skip />
+    <!-- no translation found for permlab_recovery (3157024487744125846) -->
+    <skip />
+    <!-- no translation found for permdesc_recovery (8511774533266359571) -->
+    <skip />
     <!-- no translation found for tutorial_double_tap_to_zoom_message_short (4070433208160063538) -->
     <skip />
     <!-- no translation found for gadget_host_error_inflating (4882004314906466162) -->
@@ -2114,6 +2218,8 @@
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Midar il fund davos"</string>
     <!-- no translation found for notification_listener_binding_label (2014162835481906429) -->
     <skip />
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <!-- no translation found for vpn_title (19615213552042827) -->
     <skip />
     <!-- no translation found for vpn_title_long (6400714798049252294) -->
@@ -2267,30 +2373,14 @@
     <skip />
     <!-- no translation found for activitychooserview_choose_application (2125168057199941199) -->
     <skip />
+    <!-- no translation found for activitychooserview_choose_application_error (8624618365481126668) -->
+    <skip />
     <!-- no translation found for shareactionprovider_share_with (806688056141131819) -->
     <skip />
     <!-- no translation found for shareactionprovider_share_with_application (5627411384638389738) -->
     <skip />
     <!-- no translation found for content_description_sliding_handle (415975056159262248) -->
     <skip />
-    <!-- no translation found for description_direction_up (7169032478259485180) -->
-    <skip />
-    <!-- no translation found for description_direction_down (5087739728639014595) -->
-    <skip />
-    <!-- no translation found for description_direction_left (7207478719805562165) -->
-    <skip />
-    <!-- no translation found for description_direction_right (8034433242579600980) -->
-    <skip />
-    <!-- no translation found for description_target_unlock (2228524900439801453) -->
-    <skip />
-    <!-- no translation found for description_target_camera (969071997552486814) -->
-    <skip />
-    <!-- no translation found for description_target_silent (893551287746522182) -->
-    <skip />
-    <!-- no translation found for description_target_soundon (30052466675500172) -->
-    <skip />
-    <!-- no translation found for description_target_search (3091587249776033139) -->
-    <skip />
     <!-- no translation found for description_target_unlock_tablet (3833195335629795055) -->
     <skip />
     <!-- no translation found for keyboard_headset_required_to_hear_password (7011927352267668657) -->
@@ -2405,10 +2495,18 @@
     <skip />
     <!-- no translation found for wireless_display_route_description (9070346425023979651) -->
     <skip />
-    <!-- no translation found for media_route_chooser_grouping_done (7966438307723317169) -->
-    <skip />
     <!-- no translation found for media_route_button_content_description (5758553567065145276) -->
     <skip />
+    <!-- no translation found for media_route_chooser_title (1751618554539087622) -->
+    <skip />
+    <!-- no translation found for media_route_chooser_title_for_remote_display (3395541745872017583) -->
+    <skip />
+    <!-- no translation found for media_route_chooser_searching (4776236202610828706) -->
+    <skip />
+    <!-- no translation found for media_route_chooser_extended_settings (87015534236701604) -->
+    <skip />
+    <!-- no translation found for media_route_controller_disconnect (8966120286374158649) -->
+    <skip />
     <!-- no translation found for media_route_status_scanning (7279908761758293783) -->
     <skip />
     <!-- no translation found for media_route_status_connecting (6422571716007825440) -->
@@ -2429,9 +2527,13 @@
     <skip />
     <!-- no translation found for display_manager_overlay_display_secure_suffix (6022119702628572080) -->
     <skip />
-    <!-- no translation found for wifi_display_notification_title (2223050649240326557) -->
+    <!-- no translation found for wifi_display_notification_connecting_title (2838646471050359706) -->
     <skip />
-    <!-- no translation found for wifi_display_notification_message (4498802012464170685) -->
+    <!-- no translation found for wifi_display_notification_connecting_message (5837350993752841389) -->
+    <skip />
+    <!-- no translation found for wifi_display_notification_connected_title (8567308065912676285) -->
+    <skip />
+    <!-- no translation found for wifi_display_notification_connected_message (2587209325701109715) -->
     <skip />
     <!-- no translation found for wifi_display_notification_disconnect (6183754463561153372) -->
     <skip />
@@ -2467,7 +2569,7 @@
     <skip />
     <!-- no translation found for kg_invalid_sim_pin_hint (8795159358110620001) -->
     <skip />
-    <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
+    <!-- no translation found for kg_invalid_sim_puk_hint (6025069204539532000) -->
     <skip />
     <!-- no translation found for kg_invalid_puk (3638289409676051243) -->
     <skip />
@@ -2735,4 +2837,26 @@
     <!-- no translation found for immersive_mode_confirmation (7227416894979047467) -->
     <!-- no translation found for immersive_mode_confirmation (8554991488096662508) -->
     <skip />
+    <!-- no translation found for done_label (2093726099505892398) -->
+    <skip />
+    <!-- no translation found for hour_picker_description (6698199186859736512) -->
+    <skip />
+    <!-- no translation found for minute_picker_description (8606010966873791190) -->
+    <skip />
+    <!-- no translation found for select_hours (6043079511766008245) -->
+    <skip />
+    <!-- no translation found for select_minutes (3974345615920336087) -->
+    <skip />
+    <!-- no translation found for day_picker_description (8990847925961297968) -->
+    <skip />
+    <!-- no translation found for year_picker_description (5524331207436052403) -->
+    <skip />
+    <!-- no translation found for select_day (7774759604701773332) -->
+    <skip />
+    <!-- no translation found for select_year (7952052866994196170) -->
+    <skip />
+    <!-- no translation found for item_is_selected (949687401682476608) -->
+    <skip />
+    <!-- no translation found for deleted_key (7659477886625566590) -->
+    <skip />
 </resources>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index dc5a211..3ee0b8a 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TO"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PO"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Fără titlu&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Introduceţi un cod PUK care să aibă 8 cifre sau mai mult."</string>
     <string name="needPuk" msgid="919668385956251611">"Cardul SIM este blocat cu codul PUK. Introduceţi codul PUK pentru a-l debloca."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Introduceţi codul PUK2 pentru a debloca cardul SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Operațiunea nu a reușit. Activați blocarea cardului SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"V-a mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercare până la blocarea cardului SIM."</item>
+    <item quantity="other" msgid="7530597808358774740">"V-au mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercări până la blocarea cardului SIM."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID apelant de primire"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronizare"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Prea multe ştergeri <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Stocarea pe tabletă este plină. Ștergeţi câteva fişiere pentru a elibera spaţiu."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Spațiul de stocare de pe ceas este plin! Ștergeți câteva fișiere pentru a elibera spațiu."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Stocarea pe telefon este plină. Ștergeţi câteva fişiere pentru a elibera spaţiu."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Rețeaua poate fi monitorizată"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"De o terță parte necunoscută"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Sonerie activată"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Se închide..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Computerul dvs. tablet PC se va închide."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Ceasul dvs. se va închide."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefonul dvs. se va închide."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Doriţi să închideţi?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reporniţi în modul sigur"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Mod Avion"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Modul Avion este ACTIVAT"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Modul avion este DEZACTIVAT"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Setări"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"˃999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Mod sigur"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistemul Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"dezinstalează comenzi rapide"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permite aplicației să elimine comenzi rapide de pe ecranul de pornire, fără intervenția utilizatorului."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"redirecţionează apelurile efectuate"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Permite aplicaţiei să proceseze apelurile efectuate şi să schimbe numărul care trebuie format. Cu această permisiune aplicaţia poate monitoriza, redirecţiona sau împiedica apelurile efectuate."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permite aplicației să vadă numărul format în timpul unui apel de ieșire, cu opțiunea de a redirecționa apelul către un alt număr sau de a întrerupe apelul."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"primeşte mesaje text (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permite aplicaţiei să primească şi să proceseze mesaje SMS. Acest lucru înseamnă că aplicaţia ar putea monitoriza sau şterge mesajele trimise pe dispozitivul dvs. fără a vi le arăta."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"primeşte mesaje text (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Permite aplicaţiei să preia conţinutul ferestrei active. Aplicaţiile rău intenţionate pot să preia întregul conţinut al ferestrei şi să examineze integral textul acesteia, cu excepţia parolelor."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"activare temporară a accesibilității"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Permite unei aplicaţii să activeze temporar accesibilitatea pe gadget. Aplicaţiile rău intenţionate o pot activa fără consimţământul utilizatorului."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"preluare informaţii despre ferestre"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Permite unei aplicaţii să preia informaţii despre ferestrele din managerul de ferestre. Aplicaţiile rău intenţionate pot prelua informaţii care sunt destinate utilizării sistemului intern."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"preluarea indicativului ferestrei"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Permite unei aplicații să preia indicativul ferestrei. Aplicațiile dăunătoare pot interacționa neautorizat cu fereastra aplicației substituindu-se sistemului."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"preluarea statisticilor de referință"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Permite unei aplicații să culeagă statistici de referință. Aplicațiile dăunătoare ar putea urmări statisticile de referință ale ferestrelor din alte aplicații."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrare evenimente"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Permite unei aplicaţii să înregistreze un filtru de intrare, care filtrează transmiterea în flux a tuturor evenimentelor utilizatorilor înainte ca acestea să fie expediate. Aplicaţiile rău intenţionate pot controla interfaţa de utilizare a sistemului fără intervenţia utilizatorului."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"măreşte afişajul"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Permite unei aplicaţii să mărească conţinutul unui afişaj. Aplicaţiile rău intenţionate pot transforma conţinutul afişajului într-un mod care ar face inutilizabil dispozitivul."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"închidere parţială"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Plasează Managerul de activităţi într-o stare de închidere. Nu efectuează o închidere completă."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"împiedicare comutare între aplicaţii"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Permite aplicaţiei să difuzeze o notificare de primire a unui mesaj SMS. Aplicaţiile rău intenţionate pot să utilizeze această permisiune pentru a deturna primirea mesajelor SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"trimitere mesaj difuzat primit prin WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Permite aplicaţiei să difuzeze o notificare de primire a unui mesaj WAP PUSH. Aplicaţiile rău intenţionate pot să utilizeze această permisiune pentru a deturna primirea mesajelor MMS sau pentru a înlocui fără a vă înştiinţa conţinutul oricărei pagini web cu variante rău intenţionate."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"trimiteți transmisia cu rețelele punctate"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Permite aplicației să transmită o notificare de care rețelele au nevoie pentru a fi punctate. Nu este necesară pentru aplicațiile obișnuite."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitare număr de procese în derulare"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Permite aplicaţiei să controleze numărul maxim de procese care vor rula. Nu este niciodată necesară pentru aplicaţiile obişnuite."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"forţează închiderea aplicaţiilor de fundal"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unui serviciu VPN. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"conectare la o imagine de fundal"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unei imagini de fundal. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"conectare la un ecran la distanță"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Permite proprietarului să se conecteze la interfața de nivel superior a unui ecran la distanță. Nu ar trebui să fie niciodată necesară pentru aplicațiile obișnuite."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"conectare la un serviciu widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Permite proprietarului să se conecteze la interfaţa de nivel superior a unui serviciu widget. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"se conectează la un serviciu de furnizare a traseelor"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Permite titularului să se conecteze la furnizorii de trasee înregistrați. Nu este necesară pentru aplicațiile obișnuite."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interacţionare cu administratorul unui dispozitiv"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Permite proprietarului să trimită intenţii către un administrator al dispozitivului. Nu ar trebui să fie niciodată necesară pentru aplicaţiile obişnuite."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"se conectează la o intrare TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Permite proprietarului să se conecteze la interfața de nivel superior a unei intrări TV. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"adăugarea sau eliminarea unui administrator de dispozitiv"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Permite proprietarului să adauge sau să elimine administratorii activi ai dispozitivului. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"modificare orientare ecran"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Permite aplicaţiei să utilizeze orice decodor media instalat pentru a decodifica redarea."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"gestionarea acreditărilor de încredere"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Permite aplicației să instaleze și să dezinstaleze certificate CA ca acreditări de încredere."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"rulează aplicația în timp ce dispozitivul este inactiv"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Cu această permisiune, sistemul Android poate rula aplicația în fundal în timp ce dispozitivul nu este utilizat."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"citire/scriere în resursele deţinute de diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Permite aplicaţiei să citească şi să scrie în orice resursă deţinută de grupul diag, de ex., fişierele din /dev. Această permisiune ar putea să afecteze stabilitatea şi securitatea sistemului. Permisiunea trebuie utilizată NUMAI de producător sau de operator pentru diagnostice specifice pentru hardware."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"activare sau dezactivare a componentelor aplicaţiei"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Permite aplicaţiei să citească informaţiile personale din profil stocate pe dispozitiv, cum ar fi numele şi informaţiile de contact, ceea ce înseamnă că aplicaţia vă poate identifica şi poate trimite informaţiile dvs. de profil altor utilizatori."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"modifică cartea dvs. de vizită"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Permite aplicaţiei să schimbe sau să adauge conţinut în informaţiile personale din profil stocate pe dispozitivul dvs., cum ar fi numele şi informaţiile dvs. de contact. Aceasta înseamnă că aplicaţia vă poate identifica şi poate trimite informaţiile din profilul dvs. altor persoane."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"senzori (ex.: senzori de ritm cardiac)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Permite aplicației să acceseze datele de la senzorii pe care îi utilizați pentru a măsura funcțiile corpului, cum ar fi ritmul cardiac."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"citeşte fluxul social"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Permite aplicaţiei să acceseze şi să sincronizeze actualizările sociale de la dvs. şi de la prietenii dvs. Daţi dovadă de precauţie când distribuiţi informaţii - cu această permisiune aplicaţia citeşte comunicările realizate între dvs. şi prietenii dvs. în reţelele sociale, indiferent de gradul de confidenţialitate a acestora. Notă: această permisiune nu poate fi aplicată pentru toate reţelele sociale."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"scrie în fluxul social"</string>
@@ -477,6 +523,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Permite aplicaţiei să utilizeze funcţiile de nivel redus SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"citire zonă tampon de cadre"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Permite aplicaţiei să citească conţinutul zonei-tampon a cadrului."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"acces la InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Permite aplicației să utilizeze funcțiile de nivel redus InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"configurează afişaje Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Permite aplicaţiei să configureze şi să se conecteze la afişaje Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"controlează afişaje Wi-Fi"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite aplicaţiei să modifice setările audio globale, cum ar fi volumul şi difuzorul care este utilizat pentru ieşire."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"înregistrare audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Permite aplicaţiei să efectueze înregistrări audio cu ajutorul microfonului. Cu această permisiune aplicaţia efectuează oricând înregistrări audio fără confirmare."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"comunicare cu cardul SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Permite aplicației să trimită comenzi pe cardul SIM. Această permisiune este foarte periculoasă."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"realizarea de fotografii şi videoclipuri"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Permite aplicaţiei să realizeze fotografii şi videoclipuri cu camera foto. Cu această permisiune aplicaţia utilizează camera foto oricând şi fără confirmare."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"dezactivează ledul care indică când este utilizată camera foto"</string>
@@ -550,6 +600,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Permite aplicaţiei să controleze funcţiile de telefon ale dispozitivului. O aplicaţie cu această permisiune poate să schimbe reţeaua, să închidă şi să deschidă radioul şi să efectueze alte acţiuni similare, fără să vă înştiinţeze."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"citeşte starea şi identitatea telefonului"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite aplicaţiei să acceseze funcţiile de telefon ale dispozitivului. Cu această permisiune aplicaţia stabileşte numărul de telefon şi ID-urile de dispozitiv, dacă un apel este activ, precum şi numărul de la distanţă conectat printr-un apel."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"accesați stările exacte ale telefonului"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Permite aplicației să acceseze stările exacte ale telefonului. Cu această permisiune, aplicația poate să determine starea reală a apelului, dacă apelul este activ sau în fundal, dacă apelul eșuează, starea exactă și întreruperile conexiunii de date."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"împiedicarea computerului tablet PC să intre în repaus"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"împiedicare intrare telefon în repaus"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Permite aplicaţiei să împiedice intrarea tabletei în stare de repaus."</string>
@@ -617,6 +669,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Schimbaţi starea WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permite aplicaţiei să conecteze şi să deconecteze tableta la şi de la reţelele WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permite aplicaţiei să conecteze şi să deconecteze telefonul la şi de la reţelele WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"rețele punctate"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Permite aplicației să clasifice rețelele și să stabilească ce rețele preferă tableta."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Permite aplicației să clasifice rețelele și să stabilească ce rețele preferă telefonul."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"conectează dispozitive Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permite aplicaţiei să vadă configuraţia tabletei Bluetooth, să efectueze şi să accepte conexiuni cu dispozitive împerecheate."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permite aplicaţiei să vadă configuraţia telefonului Bluetooth, să efectueze şi să accepte conexiuni cu dispozitive împerecheate."</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite aplicației să recupereze, să examineze și să șteargă notificări, inclusiv pe cele postate de alte aplicații."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"conectare la un serviciu de citire a notificărilor"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Permite proprietarului să se conecteze la interfața de nivel superior a unui serviciu de citire a notificărilor. În mod normal aplicațiile nu ar trebui să aibă nevoie de această permisiune."</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"apelarea aplicației de configurare furnizată de operator"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Permite proprietarului să apeleze aplicația de configurare furnizată de operator. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ascultă observații despre starea rețelei"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Permite unei aplicații să asculte observații despre starea rețelei. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"schimbați calibrarea dispozitivului de intrare"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Permite aplicației să modifice parametrii de calibrare a ecranului tactil. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"accesează certificatele DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Permite unei aplicații să furnizeze și să utilizeze certificate DRM. Nu ar trebui să fie necesară pentru aplicațiile obișnuite."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Setaţi reguli pentru parolă"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Stabiliţi lungimea şi tipul de caractere permise în parolele pentru deblocarea ecranului."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorizaţi încercările de deblocare a ecranului"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Ecran pornire"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Serviciu"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Altul"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nu s-a găsit nicio aplicație pentru a afișa această persoană de contact."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduceţi codul PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduceţi codul PUK şi noul cod PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codul PUK"</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Permite unei aplicații să acceseze stocarea securizată când tastatura este blocată."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Stabilește afișarea și ascunderea blocării tastaturii"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Permite unei aplicații să controleze blocarea tastaturii."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Detectarea modificărilor în starea de încredere."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Permite unei aplicații să detecteze modificările în starea de încredere."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Asocierea la un serviciu „agenți de încredere”."</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Permite unei aplicații să se asocieze la un serviciu „agent de încredere”."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interacțiune cu sistemul de recuperare și de actualizare"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Permite unei aplicații să interacționeze cu sistemul de recuperare și cu actualizările de sistem."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Atingeţi de două ori pentru a mări/micşora"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nu s-a putut adăuga widgetul."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Accesaţi"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Imagine de fundal"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Modificaţi imaginea de fundal"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Serviciu de citire a notificărilor"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"VPN activat"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN este activată de <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Atingeţi pentru a gestiona reţeaua."</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Alegeţi o aplicaţie"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Nu s-a putut lansa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Permiteţi accesul pentru"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Permiteţi accesul pentru <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Mâner glisant. Atingeţi şi ţineţi apăsat."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Glisaţi în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Glisaţi în jos pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Glisaţi spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Glisaţi spre dreapta pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Deblocaţi"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Cameră foto"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Silenţios"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Sunet activat"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Căutaţi"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Glisaţi pentru a debloca."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Conectaţi un set căşti-microfon pentru a auzi tastele apăsate când introduceţi parola."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punct."</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Ecran wireless"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Terminat"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Rezultate media"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Conectați-vă la dispozitiv"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Trimiteți ecranul pe dispozitiv"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Se caută dispozitive..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Setări"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Deconectați-vă"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Se scanează..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Se conectează..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Disponibilă"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Suprapunerea <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", securizat"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Ecranul wireless este conectat"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Acest ecran este afişat pe alt gadget"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Se trimite ecranul"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Se conectează la <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Se trimite ecranul"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Conectat la <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Deconectaţi-vă"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Apel de urgenţă"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Model uitat"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Se deblochează cardul SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Cod PIN incorect."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceţi un cod PIN format din 4 până la 8 cifre."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Codul PUK trebuie să aibă minimum 8 cifre."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Codul PUK trebuie să conțină 8 numere."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Reintroduceţi codul PUK corect. Încercările repetate vor dezactiva definitiv cardul SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Codurile PIN nu coincid"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Prea multe încercări de desenare a modelului"</string>
@@ -1650,4 +1720,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Reîncercați mai târziu"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Glisați în jos pentru a ieși din ecran complet."</string>
+    <string name="done_label" msgid="2093726099505892398">"Terminat"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Selector circular pentru ore"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Selector circular pentru minute"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Selectați orele"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Selectați minutele"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Afișare pe luni"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Listă de ani"</string>
+    <string name="select_day" msgid="7774759604701773332">"Selectați luna și ziua"</string>
+    <string name="select_year" msgid="7952052866994196170">"Selectați anul"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> selectat"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> a fost șters"</string>
 </resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 5348084..8c7a566 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TБ"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"ПБ"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Без названия&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"..."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Введите PUK-код из 8 или более цифр."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM-карта заблокирована с помощью кода PUK. Для разблокировки введите код PUK."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Для разблокировки SIM-карты введите PUK2."</string>
+    <string name="enablePin" msgid="209412020907207950">"Произошла ошибка. Включите блокировку SIM-карты или карты R-UIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована."</item>
+    <item quantity="other" msgid="7530597808358774740">"Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Идентификация вызывающего абонента"</string>
@@ -130,8 +157,9 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Синхр."</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Слишком много удалений <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Память планшетного ПК заполнена. Удалите какие-нибудь файлы, чтобы освободить место."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Память устройства заполнена. Удалите файлы, чтобы освободить место."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Память телефона заполнена. Удалите какие-нибудь файлы, чтобы освободить место."</string>
-    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Действия в сети могут отслеживаться"</string>
+    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Сеть может отслеживаться"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"администратором"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"администратором домена <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
     <string name="me" msgid="6545696007631404292">"Я"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Звонок включен"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Выключение..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Планшетный ПК будет отключен."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Устройство будет отключено."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Телефон будет выключен."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Завершить работу?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Переход в безопасный режим"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Режим полета"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Выключить"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Включить"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Настройки"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"&gt;999"</string>
     <string name="safeMode" msgid="2788228061547930246">"Безопасный режим"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Система Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"Удаление ярлыков"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Приложение сможет удалять ярлыки с главного экрана без вмешательства пользователя."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"Перенаправление исходящих вызовов"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Приложение сможет обрабатывать исходящие вызовы и изменять набираемые номера, а также отслеживать, перенаправлять или блокировать исходящие вызовы."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Приложение сможет видеть набранный номер во время исходящего вызова и при необходимости перенаправлять вызов или завершать его."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"Прием SMS-сообщений"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Приложение сможет получать и обрабатывать SMS. Это значит, что оно сможет отслеживать и удалять отправленные на ваше устройство сообщения, не показывая их."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"Прием MMS-сообщений"</string>
@@ -274,9 +304,9 @@
     <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Приложение сможет получать и обрабатывать WAP-сообщения. Это значит, что оно сможет отслеживать и удалять отправленные на ваше устройство сообщения, не показывая их."</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"Получение данных о запущенных приложениях"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"Приложение сможет получать информацию о недавно запущенных и выполняемых задачах, а следовательно, и о приложениях, используемых на устройстве."</string>
-    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"разрешить взаимодействие со всеми аккаунтами"</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"Взаимодействие с аккаунтами всех пользователей"</string>
     <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Приложение сможет выполнять действия во всех аккаунтах на этом устройстве. При этом защита от вредоносных приложений может быть недостаточной."</string>
-    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"Полное взаимодействие со всеми аккаунтами"</string>
+    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"Полное взаимодействие с аккаунтами всех пользователей"</string>
     <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"Приложение сможет выполнять любые действия во всех аккаунтах на этом устройстве."</string>
     <string name="permlab_manageUsers" msgid="1676150911672282428">"Управлять аккаунтами"</string>
     <string name="permdesc_manageUsers" msgid="8409306667645355638">"Приложения смогут управлять аккаунтами на этом устройстве (выполнять поиск, создавать и удалять их)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Приложение сможет получать контент активного окна. Вредоносные программы смогут перехватывать такой контент и анализировать любой текст, кроме паролей."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"Включение специальных возможностей"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Приложение сможет временно включать на устройстве специальные возможности. Вредоносные приложения смогут включать их без вашего ведома."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"Доступ к информации в окне"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Открывает приложению доступ к информации из диспетчера окон. Обратите внимание, что вредоносное ПО может получить доступ к некоторой системной информации устройства."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"получение токена окна"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Приложение может получать токен окна. Вредоносные программы могут взаимодействовать с окном приложения под видом системы."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"получение статистики по фреймам"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Приложение может собирать статистику по фреймам. Вредоносные приложения могут получать доступ к такой статистике у других программ."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"Фильтрация событий"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Разрешает приложению зарегистрировать входной фильтр, который анализирует весь поток пользовательских событий. Обратите внимание, что вредоносное ПО может получить доступ к управлению интерфейсом без ведома пользователя."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"Увеличение изображений"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Приложение сможет увеличивать содержимое экрана. Вредоносные программы смогут изменять изображение таким образом, что устройством нельзя будет пользоваться."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"Частичное завершение работы"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Завершает работу диспетчера активности. Не выполняет полное завершение работы."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"Защита от переключения приложений"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Приложение сможет уведомлять о получении SMS. Вредоносные программы смогут таким образом подделывать входящие SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"Отправка уведомлений о доставке SMS с ссылкой на WAP-страницу"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Приложение сможет уведомлять о получении сообщений WAP PUSH. Вредоносные программы смогут таким образом фальсифицировать получение MMS или незаметно подменять содержание любой страницы вредоносными данными."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"Отправка уведомлений о рейтинге сетей"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Приложение сможет отправлять уведомления о том, что сети необходимо присвоить рейтинг. Это разрешение обычно используется только специальными приложениями."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"Ограничение количества запущенных процессов"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Приложение сможет управлять максимальным количеством процессов, которые могут быть запущены. Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"Закрытие фоновых приложений"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Приложение сможет подключаться к базовому интерфейсу службы VPN. Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"Привязка к фоновому рисунку"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Приложение сможет подключаться к базовому интерфейсу службы обоев. Это разрешение не используется обычными приложениями."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"Подключение к службам голосового взаимодействия"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Приложение сможет подключаться к базовому интерфейсу служб голосового взаимодействия. Это разрешение обычно используется только специальными приложениями."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"Подключение к удаленному дисплею"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Приложение сможет подключаться к базовому интерфейсу удаленного дисплея. Это разрешение обычно используется только специальными приложениями."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"Подключение к службе виджетов"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Приложение сможет подключаться к базовому интерфейсу службы виджетов. Это разрешение не используется обычными приложениями."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"Подключение к серверам поставщиков маршрутов"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Приложение сможет подключаться к серверам зарегистрированных поставщиков маршрутов. Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"Взаимодействие с администратором устройства"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Приложение сможет отправлять объекты intent администратору устройства. Это разрешение не используется обычными приложениями."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"Подключение к ТВ-входу"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Приложение сможет подключаться к базовому интерфейсу ТВ-входа. Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"Добавление/удаление администратора устройства"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Владелец сможет добавлять и удалять администраторов устройства (используется лишь в некоторых приложениях)."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"Изменение ориентации экрана"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Приложение сможет использовать любой установленный дешифратор."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"Управление учетными данными"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Приложение сможет устанавливать сертификаты ЦС в качестве надежных учетных данных, а также удалять их."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"выполнение приложения в спящем режиме"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Система Android сможет выполнять приложение в фоновом режиме, когда устройство не используется."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"Чтение/запись данных в системы диагностики"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Приложение сможет считывать и записывать данные системы диагностики (например, файлы в каталоге /dev). Это может повлиять на стабильность и безопасность системы. Это разрешение должно использоваться ТОЛЬКО производителем или оператором для диагностики аппаратного обеспечения."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"Включение/отключение компонентов приложения"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Приложение сможет просматривать вашу личную информацию (например, имя и контактные данные), сохраненную на устройстве. Получив эти данные, приложение сможет отправить их другим пользователям."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"Изменение ваших контактных данных"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Приложение сможет изменять вашу личную информацию (например, имя и контактные данные), сохраненную на устройстве. Получив эти данные, приложение сможет отправить их другим пользователям."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"датчики (например, пульсометр)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Приложение получит доступ к данным приборов, используемых для измерения ваших физиологических показателей (например, пульса)."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"Просмотр записей в вашей социальной ленте"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Приложение сможет просматривать и синхронизировать записи, публикуемые вами и вашими друзьями в социальных сетях. Будьте осторожны при передаче информации! С этим разрешением приложение сможет просматривать вашу переписку с друзьями в социальных сетях независимо от настроек конфиденциальности. Примечание. Это разрешение может применяться не во всех социальных сетях."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"Добавление записей в вашу социальную ленту"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Приложение сможет использовать низкоуровневые функции SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"Чтение данных в буфере кадров"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Приложение сможет считывать содержание буфера фреймов."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"Доступ к InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Приложение сможет использовать низкоуровневые функции InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"настраивать экраны, подключенные через Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Приложение сможет подключаться к экранам с помощью Wi-Fi и настраивать их."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Управление мониторами, подключенными через Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Приложение сможет изменять системные настройки звука, например уровень громкости и активный динамик."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"Запись аудио"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Приложение сможет записывать аудио с помощью микрофона в любое время без уведомления."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"Обращение к SIM-карте"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Приложение сможет отправлять команды SIM-карте (данное разрешение представляет большую угрозу)."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"Фото- и видеосъемка"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Приложение сможет снимать фотографии и видеоролики с помощью камеры в любое время без вашего разрешения."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Отключать светодиодный индикатор во время использования камеры"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Приложение сможет управлять на устройстве функциями телефона: переключать сети, включать и выключать приемопередатчик, а также выполнять другие подобные действия без уведомления."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"Получение данных о статусе телефона"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Приложение получит доступ к функциям телефона на устройстве. Кроме того, оно сможет определять номера телефонов и серийные номера моделей, состояние активности вызова, а также удаленные номера, с которыми установлено соединение."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"Доступ к точным статусам телефона"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Приложение сможет определять точный статус вызовов (активный, в фоновом режиме или сбой), а также статус интернет-соединения (в том числе, если подключиться не удалось)."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"Отключение спящего режима"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"Отключение спящего режима"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Приложение сможет запрещать перевод планшетного ПК в спящий режим."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Изменение статуса WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Приложение сможет подключать устройство к сетям WiMAX и отключать его от них."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Приложение сможет подключать устройство к сетям WiMAX и отключать его от них."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"Определение рейтинга сетей"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Приложение сможет присваивать сетям рейтинг и решать, к каким из них устройство должно подключаться в первую очередь."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Приложение сможет присваивать сетям рейтинг и решать, к каким из них устройство должно подключаться в первую очередь."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Установление связи с устройствами Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Приложение сможет просматривать конфигурацию Bluetooth на планшетном ПК, а также запрашивать и подтверждать соединение с другими устройствами."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Приложение сможет просматривать конфигурацию Bluetooth на телефоне, а также запрашивать и подтверждать соединение с другими устройствами."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Приложение сможет получать, проверять и удалять уведомления, включая те, что опубликованы другими приложениями."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"Подключение к службе просмотра уведомлений"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Приложение сможет подключаться к базовому интерфейсу службы просмотра уведомлений. Это разрешение не используется обычными приложениями."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"Подключение к серверам поставщиков условий"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Приложение сможет подключаться к базовому интерфейсу поставщиков условий. Это разрешение обычно используется только специальными приложениями."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"Запуск приложения настроек, предоставленного оператором"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Владелец сможет запускать приложение настроек, предоставленное оператором. Это разрешение не используется обычными приложениями."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Использование данных о состоянии сети"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Приложение сможет использовать данные о состоянии сети. Это разрешение обычно используется только специальными приложениями."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"изменение параметров калибровки экрана"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Приложение сможет изменять параметры калибровки сенсорного экрана. Это разрешение обычно используется только специальными приложениями."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"Доступ к сертификатам DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Приложение сможет синхронизировать и использовать сертификаты DRM (разрешение актуально только для специальных приложений)."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Правила выбора паролей"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Контролировать длину и символы при вводе паролей для снятия блокировки экрана."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Отслеживать попытки снятия блокировки экрана"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Домашний"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Рабочий"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Другой"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Не найдено приложение для просмотра контакта"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Введите PIN-код"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Введите PUK-код и новый PIN-код"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-код"</string>
@@ -1102,8 +1162,8 @@
     <string name="deleteText" msgid="6979668428458199034">"Удалить"</string>
     <string name="inputMethod" msgid="1653630062304567879">"Способ ввода"</string>
     <string name="editTextMenuTitle" msgid="4909135564941815494">"Операции с текстом"</string>
-    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Заканчивается свободное место"</string>
-    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Некоторые системные функции могут не работать"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Недостаточно памяти"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Некоторые функции могут не работать"</string>
     <string name="app_running_notification_title" msgid="8718335121060787914">"Приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" выполняется"</string>
     <string name="app_running_notification_text" msgid="4653586947747330058">"Нажмите, чтобы получить дополнительные данные или выключить приложение."</string>
     <string name="ok" msgid="5970060430562524910">"ОК"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Приложение сможет получить доступ к хранилищу ключей."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Управлять отображением хранилища ключей"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Приложение сможет управлять хранилищем ключей."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Отслеживание изменений статуса доверия"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Приложение сможет отслеживать изменения в статусе доверия."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Подключение к службе Trust Agents"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Приложение сможет подключаться к службе Trust Agents."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Взаимодействовать с системой восстановления и обновлениями"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Приложение сможет взаимодействовать с системой восстановления и обновлениями системы."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Нажмите дважды для изменения масштаба"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Не удалось добавить виджет."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Выбрать"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Фоновый рисунок"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Сменить обои"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Служба просмотра уведомлений"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Поставщик условий"</string>
     <string name="vpn_title" msgid="19615213552042827">"Сеть VPN активна"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Сеть VPN активирована приложением <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Нажмите, чтобы открыть настройки."</string>
@@ -1343,7 +1410,7 @@
     <string name="submit" msgid="1602335572089911941">"Отправить"</string>
     <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Включен режим \"Штурман\""</string>
     <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Чтобы выйти, нажмите здесь."</string>
-    <string name="tethered_notification_title" msgid="3146694234398202601">"USB-модем/точка доступа Wi-Fi используется"</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"Включен режим модема"</string>
     <string name="tethered_notification_message" msgid="6857031760103062982">"Нажмите для настройки."</string>
     <string name="back_button_label" msgid="2300470004503343439">"Назад"</string>
     <string name="next_button_label" msgid="1080555104677992408">"Далее"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Клавиша смены регистра"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Клавиша ввода"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Выберите приложение"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Не удалось запустить приложение \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\""</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Открыть доступ:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Открыть доступ приложению \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\""</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Перетаскиваемый значок блокировки. Нажмите и удерживайте."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Проведите вниз, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Проведите влево, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Проведите вправо, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Разблокировать"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Без звука"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Включить звук"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Поиск"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Проведите по экрану, чтобы разблокировать устройство."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Подключите гарнитуру, чтобы услышать пароль."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Точка"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Воспроизведение звука через Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Беспроводной монитор"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Перенаправлять поток мультимедиа"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Подключение к устройству"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Подключение к удаленному дисплею"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Поиск устройств…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Настройки"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Отключить"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканирование..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Подключение..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Доступен"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Наложение № <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> х <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> тчк/дюйм"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", безопасный"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Беспроводной проектор подключен"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Изображение передается на другое устройство"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Подключение к удаленному дисплею"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Подключение к <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Удаленный дисплей подключен"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Подключено к <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Отключить"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Экстренный вызов"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забыли графический ключ?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблокировка SIM-карты…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неверный PIN-код."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введите PIN-код (от 4 до 8 цифр)."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код должен содержать не менее 8 символов."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-код должен содержать 8 символов."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Введите правильный PUK-код. После нескольких неудачных попыток SIM-карта будет заблокирована."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-коды не совпадают"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Слишком много попыток ввода графического ключа"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Повтор через <xliff:g id="COUNT">%d</xliff:g> сек."</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Повторите попытку позже."</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Чтобы вернуться в обычный режим, проведите пальцем вниз"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Чтобы вернуться в обычный режим, проведите пальцем вниз."</string>
+    <string name="done_label" msgid="2093726099505892398">"Готово"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Выбор часов на циферблате"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Выбор минут на циферблате"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Выберите часы"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Выберите минуты"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Окно выбора даты"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Меню выбора года"</string>
+    <string name="select_day" msgid="7774759604701773332">"Выберите месяц и число"</string>
+    <string name="select_year" msgid="7952052866994196170">"Выберите год"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Выбран элемент <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Цифра <xliff:g id="KEY">%1$s</xliff:g> удалена"</string>
 </resources>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..0bbcd06
--- /dev/null
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -0,0 +1,1594 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B"</string>
+    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="4638956954852782576">"&lt;නම් යොදා නැත&gt;"</string>
+    <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(දුරකථන අංකයක් නොමැත)"</string>
+    <string name="unknownName" msgid="2277556546742746522">"(නොදනී)"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"කටහඬ තැපෑල"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+    <string name="mmiError" msgid="5154499457739052907">"සම්බන්ධතා ගැටළුවක් හෝ අවලංගු MMI කේතයකි."</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"ස්ථාවර ඇමතීම් අංක වලට පමණක් මෙහෙයුම සීමාකර ඇත."</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"සේවාව සබල කරන ලදි."</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"සේවාව සබලයි, සඳහා:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"සේවාව අබල කරන ලදි."</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"ලියාපදිංචි වීම සාර්ථකයි."</string>
+    <string name="serviceErased" msgid="1288584695297200972">"මැකීම සාර්ථක විය."</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"වැරදි මුරපදයක්."</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI සම්පූර්ණයි."</string>
+    <string name="badPin" msgid="9015277645546710014">"ඔබ ටයිප් කරන ලද පරණ PIN එක වැරදිය."</string>
+    <string name="badPuk" msgid="5487257647081132201">"ඔබ ටයිප් කරන ලද PUK එක වැරදියි."</string>
+    <string name="mismatchPin" msgid="609379054496863419">"ඔබ ටයිප් කල PIN නොගැළපේ."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"4 සිට 8 දක්වා අංක සහිත PIN එකක් ටයිප් කරන්න."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"අංක 8 ක් හෝ ඊට වැඩි PUK එකක් ටයිප් කරන්න."</string>
+    <string name="needPuk" msgid="919668385956251611">"ඔබගේ SIM පත පතට PUK අගුළු වැටී ඇත. එම අගුල ඇරීමට PUK කේතය ටයිප් කරන්න."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"SIM පතේ අගුළු ඇරීමට PUK2 ටයිප් කරන්න."</string>
+    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
+    <string name="meid" msgid="4841221237681254195">"MEID"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"පැමිණෙන අමතන්නාගේ ID"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"පිටතට යන අමතන්නාගේ ID"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"ඇමතුම ඉදිරියට යැවීම"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"ඇමතුම් රැඳීම"</string>
+    <string name="BaMmi" msgid="455193067926770581">"ඇමතුම අවහිර කිරීම"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"මුරපදය වෙනස් කිරීම"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"PIN වෙනස් වී ඇත"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"ඇමතුම් අංකය ඇත"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"ඇමතුම් අංකය සීමා කර ඇත"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"තුන් මාර්ග ඇමතීම"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"අනවශ්‍ය හිරිහැරදායක ඇමතුම් ප්‍රතික්ෂේප කිරීම"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"ඇමතීමේ අංකය භාරදීම"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"බාධා නොකරන්න"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"අමතන්නාගේ ID සුපුරුද්ද අනුව සීමා වී ඇත. මීළඟ ඇමතුම: සීමා කර ඇත"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී ඇත. මීළඟ ඇමතුම: සීමා කර නැත"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී නැත. මීළඟ ඇමතුම: සීමා කර ඇත"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී නැත. මීළඟ ඇමතුම: සීමා කර ඇත"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"සේවාවන් සපයා නැත."</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"අමතන්නාගේ ID සැකසීම ඔබට වෙනස්කල නොහැක."</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"සීමිත ප්‍රවේශය වෙනස් කෙරිණි"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"දත්ත සේවාව අවහිර කර ඇත."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"හදිසි සේවාව අවහිර කර ඇත."</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"හඬ සේවාව බාධා කර ඇත."</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"සියලු හඬ සේවා අවහිර කර ඇත."</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS සේවාව අවහිර කර ඇත."</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"හඬ/දත්ත සේවා අවහිර කර ඇත."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"හඬ/SMS සේවා අවහිර කර ඇත."</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"සියලුම හඬ/දත්ත/SMS සේවාවන් බාධා කර ඇත."</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"හඬ"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"දත්ත"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"ෆැක්ස්"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"අසමමුහුර්ත කරන්න"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"සමමුහුර්ත කිරීම"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"පැකැට්ටුව"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"රෝමිං දර්ශකය සක්‍රියයි"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"රෝමිං දර්ශකය අක්‍රියයි"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"රෝමිං දර්ශකය සැණෙලි වෙයි"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"වටපිටාවෙන් ඉවත්ව"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"ගොඩනැගිල්ලෙන් පිටත"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"රෝමිං  - කැමති පද්ධතිය"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"රෝමිං  - ලබාගත හැකි පද්ධතිය"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"රෝමිං - මිත්‍ර හවුල්කරු"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"රෝමිං - අධිමිල හවුල්කරු"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"රෝමිං  - සම්පූර්ණ සේවා ක්‍රියාකාරිත්වය"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"රෝමිං - අසම්පූර්ණ සේවා ක්‍රියාකාරීත්වය"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"රෝමිං  බැනරය සක්‍රීයයි"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"රෝමිං බැනරය අක්‍රියයි"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"සේවාව සඳහා සොයමින්"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ඉදිරියට නොයවන ලදි"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: තත්පර <xliff:g id="TIME_DELAY">{2}</xliff:g> ට පසුව <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ඉදිරියට නොයවන ලදි"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ඉදිරියට නොයවන ලදි"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"අංග කේතය සම්පූර්ණයි."</string>
+    <string name="fcError" msgid="3327560126588500777">"සම්බන්ධතා ගැටළුවක් හෝ අවලංගු විශේෂාංග කේතයකි."</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"හරි"</string>
+    <string name="httpError" msgid="7956392511146698522">"ජාල දෝෂයක් තිබුණි."</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"URL ය සෙවිය නොහැක."</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"අඩවියේ සත්‍යාපන පටිපාටිය වෙත සහය නොදක්වයි."</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"සත්‍යාපනය කළ නොහැක"</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"ප්‍රොක්සි සේවාදායකය හරහා සත්‍යාපනය අසාර්ථකය."</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"සේවාදායකයාට සම්බන්ධ විය නොහැක."</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"සේවාදායකයා සමග සම්බන්ධ වීමට නොහැකි විය. නැවත උත්සහ කරන්න."</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"සේවාදායකය වෙත සම්බන්ධතාවය කල් ඉකුත් විණි."</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"පිටුවේ බොහෝ සේවාදායක නැවත හරවා යැවීම් අඩංගු වේ."</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"ප්‍රොටෝකෝලය වෙත සහය නොදක්වයි."</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"සුරක්ෂිත සම්බන්ධතාවයක් පිහිටුවීමට නොහැකි විය."</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"URL වලංගු නොවන නිසා පිටුව විවෘත කිරීමට නොහැකි විය."</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"ගොනුව වෙත පිවිසිය නොහැක."</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"ඉල්ලන ලද ගොනු සෙවිය නොහැක."</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"ඉල්ලීම් විශාල ප්‍රමාණයක් ක්‍රියාත්මක වෙමින් පවතියි. පසුව නැවත උත්සාහ කරන්න."</string>
+    <string name="notification_title" msgid="8967710025036163822">"<xliff:g id="ACCOUNT">%1$s</xliff:g> සඳහා පුරනය වීමේ දෝෂයක්"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"සමමුහුර්ත කිරීම"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"සමමුහුර්ත කරන්න"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"<xliff:g id="CONTENT_TYPE">%s</xliff:g> මැකීම් වැඩිය"</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"ටැබ්ලට් ආචයනය පිරි ඇත. ඉඩ නිදහස් කිරීමට සමහර ගොනු මකන්න."</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"දුරකථන ආචයනය පිරී ඇත. ඉඩ නිදහස් කිරීමට සමහර ගොනු මකන්න."</string>
+    <string name="me" msgid="6545696007631404292">"මම"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"ටැබ්ලට විකල්ප"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"දුරකථන විකල්පයන්"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"නිහඬ ආකාරය"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"නොරැහන් සක්‍රිය කරන්න"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"නොරැහැන් අක්‍රිය කරන්න"</string>
+    <string name="screen_lock" msgid="799094655496098153">"තිර අගුල"</string>
+    <string name="power_off" msgid="4266614107412865048">"බලය අක්‍රිය කරන්න"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"හඬ නඟනය අක්‍රියයි"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"හඬ නඟනය කම්පනය"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"හඬ නඟනය සක්‍රීයයි"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"වසා දමමින්…"</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"ඔබගේ ටැබ්ලටය වැසේ."</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"ඔබගේ දුරකථනය වැසේ."</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"ඔබට වසා දැමීමට අවශ්‍යද?"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"ආරක්‍ෂිත ආකාරයට නැවත පණ ගන්වන්න"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"ආරක්‍ෂිත ආකාරයට නැවත පණ ගැන්වීමට ඔබට අවශ්‍යද? මෙමඟින් ඔබ ස්ථාපිත කර ඇති සියලුම තෙවන පාර්ශවීය යෙදුම් සියල්ල අබල වී යයි. ඔබ නැවත පණ ගන්වන විට ඒවා නැවත පිහිටුවීම සිදු වේ."</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"මෑත"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"මෑත යෙදුම් නැත."</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"ටැබ්ලට් විකල්ප"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"දුරකථන විකල්ප"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"තිර අගුල"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"බලය අක්‍රිය කරන්න"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"දෝෂ වර්තාව"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"දෝෂ වාර්තාවක් ගන්න"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"ඊ-තැපැල් පණිවිඩයක් ලෙස යැවීමට මෙය ඔබගේ වත්මන් උපාංග තත්වය ගැන තොරතුරු එකතු කරනු ඇත. දෝෂ වාර්තාව ආරම්භ කර එය යැවීමට සූදානම් කරන තෙක් එයට කිසියම් කාලයක් ගතවනු ඇත; කරුණාකර ඉවසන්න."</string>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"නිහඬ ආකාරය"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ශබ්දය අක්‍රියයි"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"හඬ සක්‍රියයි"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"අහස්යානා ආකාරය"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"අහස්යානා ආකාරය සක්‍රීයයි."</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"අහස්යානා අකාරය අක්‍රියයි"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+    <string name="safeMode" msgid="2788228061547930246">"ආරක්‍ෂිත ආකාරය"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"Android පද්ධතිය"</string>
+    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"ඔබගේ මුදල් වැයවන සේවාවන්"</string>
+    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"ඔබගෙන් මුදල් යන දේවල් කරන්න."</string>
+    <string name="permgrouplab_messages" msgid="7521249148445456662">"ඔබගේ පණිවිඩ"</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"ඔබගේ SMS, ඊ-තැපැල්, සහ වෙනත් පණිවිඩ කියවන්න සහ ලියන්න."</string>
+    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"ඔබගේ පෞද්ගලික තොරතුරු"</string>
+    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"ඔබගේ සම්බන්ධතා පතේ ආචයනය කරන ලද, ඔබ ගැන තොරතුරු වලට ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ඔබගේ සමාජයීය තොරතුරු"</string>
+    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"ඔබගේ සම්බන්ධතා සහ සාමාජ සම්බන්ධයන් ගැන තොරතුරු වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_location" msgid="635149742436692049">"ඔබගේ ස්ථානය"</string>
+    <string name="permgroupdesc_location" msgid="5704679763124170100">"ඔබගේ භෞතික පිහිටුම නිරීක්ෂණය කරයි."</string>
+    <string name="permgrouplab_network" msgid="5808983377727109831">"ජාල සන්නිවේදනය"</string>
+    <string name="permgroupdesc_network" msgid="4478299413241861987">"විවිධ ජාල විශේෂාංග වෙත පිවිසෙන්න."</string>
+    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"බ්ලූටූත්"</string>
+    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"බ්ලූටූත් ඔස්සේ උපාංග සහ ජාල වෙත පිවිසෙන්න."</string>
+    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"ශ්‍රව්‍ය සැකසීම්"</string>
+    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"ශ්‍රව්‍ය සැකසීම් වෙනස් කරන්න."</string>
+    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"බැටරිය වෙත බලපායි"</string>
+    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"බැටරියේ බලය ක්ෂණිකව අඩු වන විශේෂාංග භාවිත කරන්න."</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"දින දර්ශනය"</string>
+    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"දින දර්ශන සිද්ධින්ට සෘජුව ප්‍රවේශ වීම."</string>
+    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"පරිශීලක ශබ්ද කෝෂය කියවන්න"</string>
+    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"පරිශීලක ශබ්ද කෝෂයේ වචන කියවීම."</string>
+    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"පරිශීලක ශබ්දකෝෂයට ලිවිම"</string>
+    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"පරිශීලක ශබ්දකෝෂයට වචන එකතු කරන්න."</string>
+    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"පිටුසන් සහ ඉතිහාසය"</string>
+    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"පිටුසන් සහ බ්‍රව්සර ඉතිහාසය වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"සීනුව"</string>
+    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"සීනුව සකසන්න."</string>
+    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"හඬ තැපෑල"</string>
+    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"හඬ තැපෑල වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"මයික්‍රොෆෝනය"</string>
+    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"ශබ්දය පටිගත කිරීමට මයික්‍රොෆෝනය වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"කැමරාව"</string>
+    <string name="permgroupdesc_camera" msgid="2933667372289567714">"ඡායාරූප හෝ වීඩියෝ ග්‍රහණය සඳහා කැමරාව වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"අගුළු තිරය"</string>
+    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"ඔබගේ උපාංගයේ අගුළු තිරයේ ක්‍රියාකාරිත්වයට බලපාන හැකියාව."</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"ඔබගේ යෙදුම් වල තොරතුරු"</string>
+    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"ඔබගේ උපාංගයේ වෙනත් යෙදුම් වල ක්‍රියාකාරිත්වයට බලපෑම් කළ හැකි බව."</string>
+    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"බිතුපත"</string>
+    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"උපාංග බිතුපතේ සැකසීම් වෙනස් කරන්න."</string>
+    <string name="permgrouplab_systemClock" msgid="406535759236612992">"ඔරලෝසුව"</string>
+    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"උපාංග කාල හෝ කාල කලාප වෙනස් කරන්න."</string>
+    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"තත්ව තීරුව"</string>
+    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"උපාංග තත්ව තීරු සැකසීම් වෙනස් කරන්න."</string>
+    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"සමමුහුර්ත සැකසීම්"</string>
+    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"සමමුහුර්ත සැකසීම් වෙත ප්‍රවේශය."</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"ඔබගේ ගිණුම්"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ලබාගත හැකි ගිණුම් වලට ප්‍රවේශ වීම."</string>
+    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"දෘඩාංග පාලක"</string>
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"හෑන්ඩ්සෙටයේ දෘඩාංග වලට සෘජුවම ප්‍රවේශ වන්න."</string>
+    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"දුරකථන ඇමතුම්"</string>
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"දුරකථන ඇමතුම් නිරීක්ෂණය කරන්න, පටිගත කරන්න සහ ක්‍රියාත්මක කරන්න."</string>
+    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"පද්ධති මෙවලම්"</string>
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"පද්ධතියේ පහල මට්ටම් ප්‍රවේශය සහ පාලනය."</string>
+    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"සංවර්ධක මෙවලම්"</string>
+    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"යෙදුම් සංවර්ධකයන් සඳහා පමණක් අවශ්‍ය විශේෂාංග."</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"වෙනත් යෙදුම් UI"</string>
+    <string name="permgroupdesc_display" msgid="6051002031933013714">"වෙනත් යෙදුම්වල UI සඳහා බලපායි."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"ආචයනය"</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB ආචයනය වෙත ප්‍රවේශය."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD පත වෙත ප්‍රවේශය."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"ප්‍රවේශ්‍යතා විශේෂාංග"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"උපකාරීවන තාක්ෂණ ඉල්ලීම් කළ හැකි විශේෂාංග."</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"කවුළු අන්න්තර්ගතය ලබාගන්න"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ඔබ අන්තර්ක්‍රියාකාරී වන කවුළුවේ අන්තර්ගතය පරීක්ෂා කරන්න."</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"ස්පර්ශයෙන් ගවේෂණය සක්‍රිය කරන්න"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"ස්පර්ශ කරන අයිතම හඬ නගා කතා කෙරෙනු ඇති අතර ඉංගිති භාවිතයෙන් තිරය ගවේෂණය කිරීමට පුළුවනි."</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"උසස් වෙබ් ප්‍රවේශ්‍යතාව සක්‍රිය කරන්න"</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"යෙදුම් අන්තර්ගතයට ප්‍රවේශ්‍යතාවය වැඩිවන ලෙස සකස් කිරීමට ඇතැම් විට ස්ක්‍රිප්ට් ස්ථාපනය කර ඇත."</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"ඔබ ටයිප් කළ පෙළ බලන්න"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"ණයවරපත් අංක සහ මුරපද වැනි පුද්ගලික දත්ත ඇතුළත් වේ."</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"තත්ව තීරුව අබල කරන්න හෝ වෙනස් කරන්න"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"තත්ව තීරුව අක්‍රිය කිරීමට හෝ පද්ධති නිරූපක එකතු හෝ ඉවත් කිරීමට යෙදුමට අවසර දේ."</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"තත්ව තීරුව"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"තත්ව තීරුව වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"තත්ව තීරුව දිග හැරීම/හැකිලීම"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"තත්ව තීරුව දිග හැරීමට හෝ හැකිළීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"පිටවන ඇමතුම් වල මග වෙනස් කිරීම"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"පිටවන ඇමතුම් සකස් කිරීමට සහ ඇමතීමට නියමිත අංකය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙන් යෙදුමට පිටවන ඇමතුම් නිරීක්ෂණය, නැවත හැරවීම හෝ වැළක්වීම අවසර දෙයි."</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"කෙටි පණිවිඩ ලබාගැනීම (SMS)"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"SMS පණිවිඩ ලැබීමට සහ ක්‍රියාත්මක කිරීමට යෙදුමට අවසර දෙන්න. මෙහි තේරුම යෙදුමට ඔබගේ උපාංගයට ලැබෙන පණිවිඩ අධීක්ෂණය කිරීමට හැකිවීම වන අතර, ඒවා ඔබට නොපෙන්වා මකා දැමීමටද හැකි වීමයි."</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"පෙළ පණිවුඩ ලබාගන්න (MMS)"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS පණිවිඩ සොයා ලබාගැනීමට සහ ක්‍රියාත්මක කිරීමට යෙදුමට අවසර දෙන්න. යෙදුම නිරීක්ෂණය කරනු ලබන අතර ඔබට ලැබුන පණිවිඩ පෙන්වීමෙන් තොරවම මකා දැමිය හැකි බව මෙමඟින් අදහස් කරයි."</string>
+    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"හදිසි විකාශන ලබා ගැනීම"</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"හදිසි විකාශ පණිවිඩ ලැබීමට සහ ක්‍රියාත්මක කිරීමට යෙදුමට අවසර දෙන්න. පද්ධති යෙදුම් වලට පමණක් මෙම අවසරය අදාළ වෙයි."</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"සෙල් ප්‍රචාරණ පණිවිඩ කියවීම"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ඔබගේ උපාංගයට ලැබුණු සෙල් විකාශන පණිවිඩ කියවීමට යෙදුමට අවසර දෙන්න. ඔබට හදිසි අවස්ථාවන් පිළිබඳ අනතුරු ඇඟවීමට සෙල් විකාශන පණිවිඩ ඇතැම් ස්ථානවල සිට යවනු ලබයි. හදිසි සෙල් විකාශන ලැබෙන අවස්ථාවකදී, අනිෂ්ට යෙදුම් මඟින් ඔබගේ උපාංගයට කාර්ය සාධනයට හෝ ක්‍රියකරණයට බාධා සිදුවිය හැක."</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"SMS පණිවිඩ යැවීම"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"SMS පණිවිඩ යැවීමට යෙදුමට අවසර දෙන්න. මෙමඟින් බලාපොරොත්තු නොවූ ප්‍රතිඵල අත් විය හැක. අනිෂ්ට යෙදුම් ඔබගේ තහවුරුවකින් තොරව පණිවිඩ යැවීම මඟින් ඔබගේ මුදල් වැය කල හැක."</string>
+    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"පණිවිඩ සිදුවීම හරහා ප්‍රතිචාර යැවීම"</string>
+    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"පැමිණෙන ඇමතුම් සඳහා පණිවිඩ ඔස්සේ ප්‍රතිචාර සිදුවීම් හසුරුවීමට වෙනත් පණිවිඩ යෙදුම් සඳහා ඉල්ලීම් යැවීමට, යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"ඔබගේ පෙළ පණිවුඩ කියවන්න (SMS හෝ MMS)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"ඔබගේ ටැබ්ලටයේ හෝ SIM පතේ ආචයනය කර ඇති SMS පණිවිඩ කියවීමට යෙදුමට අවසර දෙන්න. අන්තර්ගතය හෝ විශවාසදයි බවින් තොරවම සියලු SMS පණිවිඩ කියවීමට මෙමගින් යෙදුමට අවසර දෙයි."</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"ඔබගේ දුරකථනයේ හෝ SIM පතේ ආචයනය කරන ලද SMS පණිවිඩ කියවීමට යෙදුමට අවසර දෙන්න. අන්තර්ගතය හෝ විශ්වාසදායී බවින් තොරවම සියලු SMS පණිවිඩ කියවීමට මෙමගින් යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"ඔබගේ කෙටි පණිවිඩ සංස්කරණය කිරීම (SMS හෝ MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"ඔබගේ ටැබ්ලටයේ හෝ SIM පතේ ගබඩා කර ඇති SMS පණිවිඩ වෙත ලිවීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් ඔබගේ පණිවිඩ මකා දැමිය හැක."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"ඔබගේ ටැබ්ලටයේ හෝ SIM පතේ ආචයනය කරන ලද SMS පණිවිඩ ලිවීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් ඔබගේ පණිවිඩ මකා දැමිය හැක."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"පෙළ පණිවිඩ ලබාගැනීම (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAP පණිවිඩ ලැබීමට සහ ක්‍රියාවලි කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙහි ඔබව ඒවාට පෙන්වීමකින් තොරව ඔබට පණිවිඩ නිරීක්ෂණයට හෝ මැකීමට හැකියාව ඇතුළත් වේ."</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"ධාවනය වන යෙදුම් ලබාගැනීම"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"දැනට සහ මෑත ක්‍රියාත්මක කාර්යයන් පිළිබඳ විස්තරාත්මක තොරතුරු සොයා ලබාගැනීමට යෙදුමට ඉඩ දෙන්න. මෙය කුමන යෙදුම් උපාංගයේ භාවිතා කරන්නේද යන තොරතුරු යෙදුම්වලට සොයා ගැනීමට ඉඩ දිය හැක."</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"පරිශීලකයන් අතර අන්තර්ක්‍රියාකාරී වන්න"</string>
+    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"උපාංගයේ විවිධ පරිශීලකයන් හරහා ක්‍රියාවන් දැක්වීමට යෙදුමට අවසර දෙන්න. පරිශීලකයන් අතර ආරක්ෂාව කඩකිරීමට අනිෂ්ට යෙදුම් විසින් මෙය භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"පරිශීලකයන් අතර අන්තර් ක්‍රියාකාරී වීමට සම්පූර්ණ බලපත්‍රය"</string>
+    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"පරිශීලකයන් හරහා සිදු කළ හැකි සියලු අන්තර් ක්‍රියා වලට අවසර දෙන්න."</string>
+    <string name="permlab_manageUsers" msgid="1676150911672282428">"පරිශීලකයන් කළමනාකරණය කරන්න"</string>
+    <string name="permdesc_manageUsers" msgid="8409306667645355638">"විස්තර ලබා ගැනීම, නිර්මාණකරණය, මකාදැමීම ඇතුළු පරිශීලකයන් කළමනාකරණයට යෙදුම්වලට අවසර දෙන්න."</string>
+    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"ධාවනය වන යෙදුම් වල තොරතුරු සොයා ලබාගැනීම"</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"දැනට සහ මෑතක ක්‍රියාත්මක කාර්යයන් පිළිබඳ විස්තරාත්මක තොරතුරු ලබාගැනීමට යෙදුමට අවසර දෙන්න අනිෂ්ට යෙදුම් අනෙකුත් යෙදුම් පිළිබඳ පුද්ගලික තොරතුරු සොයා ගැනීමට ඉඩ තිබේ."</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"ධාවනය වන යෙදුම් නැවත අනුපිළිවෙලට සැකසීම"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"පෙරබිමට හෝ පසුබිමට සිදුවීම් ගෙනයාමට යෙදුමට අවසර දෙන්න. ඔබගේ ආදානයකින් තොරව යෙදුම මෙය සිදුකරයි."</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"යෙදුම් ධාවනය නවත්වන්න"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"කාර්යයන් ඉවත් කිරීමට සහ ඒවායෙහි යෙදුම් නැති කිරීමට යෙදුමට අවසර දෙන්න. අනෙක් යෙදුම් හැසිරීම බාධා කිරීමට අනිෂ්ට යෙදුම්වලට අවසර දෙන්න."</string>
+    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"ක්‍රියාකාරකම් අට්ටි කළමනාකරණය කරන්න"</string>
+    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"වෙනත් යෙදුම් ධාවනය වන ක්‍රියාකාරකම් අට්ටි වලට එකතු කිරීමට, ඉවත් කිරීමට, සහ වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම්වල හැසිරීම අනිෂ්ට යෙදුම් මගින් බාධා විය හැක."</string>
+    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"ඕනෑම ක්‍රියාවක් අරඹන්න"</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"අවසර ආරක්ෂාව හෝ යැවුම් තත්වයෙන් තොරවම ඕනෑම ක්‍රියාවක් ආරම්භ කිරීමට යෙදුමට අවසර දේ."</string>
+    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"තිර ගැළපුම සැකසීම"</string>
+    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"වෙනත් යෙදුම්වල තිර ගැලපුම් මාදිලිය පාලනයට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම්වල හැසිරීම අනිෂ්ට යෙදුම් කැඩිය හැක."</string>
+    <string name="permlab_setDebugApp" msgid="3022107198686584052">"යෙදුම් නිදොස්කරණය සබල කිරීම"</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"වෙනත් යෙදුමක් සඳහා නිදොස්කරණය සක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම් විනාශ කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක."</string>
+    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"පද්ධති සංදර්ශක සැකසීම් වෙනස් කරන්න"</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"පෙදෙසිය හෝ සම්පූර්ණ අකුරු ප්‍රමාණය වැනි පවතින වින්‍යාසය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"මෝටර් රථ ආකාරය ක්‍රියාත්මක කරන්න"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"කාර් ආකාරය සබල කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"වෙනත් යෙදුම් වැසීම"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"අනෙක් යෙදුම්වල පසුබිම් ක්‍රියාවලි අවසන් කිරීමට යෙදුමට අවසර දෙන්න. අනෙක් යෙදුම් ධාවනය නැවතීමට මෙය හේතුවක් වේ."</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"වෙනත් යෙදුම් බලෙන් නවත්වන්න"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"යෙදුමට බලෙන් අනෙක් යෙදුම් නැවතීමට අවසර දෙන්න."</string>
+    <string name="permlab_forceBack" msgid="652935204072584616">"යෙදුම වැසීමට බල කිරීම"</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"නැවතීමට පෙරබිමේ ඇති ඕනෑම ක්‍රියාවක් බලෙන් නැවතීමට සහ පිටුපසට යාමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="permlab_dump" msgid="1681799862438954752">"පද්ධති අභ්‍යන්තර තත්වය සොයා ලබා ගන්න"</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"පද්ධතියේ අභ්‍යන්තර තත්වය ලැබීමට යෙදුමට අවසර දෙන්න. ඔවුන් සාමාන්‍යයෙන් භාවිත නොකරන විවිධත්වයකින් යුත් පුද්ගලික සහ ආරක්‍ෂිත තොරතුරු අනිෂ්ට යෙදුම් සොයා ලබා ගත හැක."</string>
+    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"තිර අන්තර්ගතය සොයා ලබාගැනීම"</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"ක්‍රියාකාරී කවුළුවක අන්තර්ගතය ලබාගැනීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් විසින් සම්පූර්ණ කවුළු අන්තර්ගතය ලබාගැනීම සහ මුරපදය හැර ඒවායෙහි පෙළ පරික්ෂා කිරීම සිදුකරයි."</string>
+    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ප්‍රවේශ්‍යතාවය තාවකාලිකව සබල කිරීම"</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"උපාංගය වෙත ප‍්‍රවේශ්‍යතාව තාවකාලිකව සක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. පරිශීලක අවධානයකින් තොරව අනිෂ්ට යෙදුම් ප‍්‍රවේශ්‍යතාව සක්‍රිය කළ හැක."</string>
+    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"තිර තොරතුරු සොයා ලබාගැනීම"</string>
+    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"කවුළු කළමනාකරු මගින් කවුළුව ගැන තොරතුරු සොයා ලබාගැනීමට යෙදුමට අවසර දෙන්න. අභ්‍යන්තර පද්ධති භාවිතය සඳහා කැමති තොරතුරු අනිෂ්ට යෙදුම් විසින් ලබා ගත හැක."</string>
+    <string name="permlab_filter_events" msgid="8675535648807427389">"සිදුවීම් පෙරන්න"</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"පිටත් කිරීමට පෙර සියලු පරිශීලක සිදුවීම්වල ප්‍රවාහයක් පෙරීමට යොදා ගන්නා ආදාන පෙරීමක් ලියාපදිංචි කිරීමට යෙදුමට අවසර දෙන්න. පරිශීලක මැදිහත් වීමකින් තොරව පද්ධති UI අනිෂ්ට යෙදුම් පාලනය කරයි."</string>
+    <string name="permlab_magnify_display" msgid="5973626738170618775">"දර්ශනය විශාලනය කරන්න"</string>
+    <string name="permdesc_magnify_display" msgid="7121235684515003792">"දසුනේ අන්තර්ගතය විශාල කිරීමට යෙදුමට අවසර දෙන්න. ඇතැම් විට අනිෂ්ට යෙදුම්, උපාංගය භාවිතා කළ නොහැකි බවට පත් කරමින් දසුනේ අන්තර්ගතය වෙනස් කළ හැක."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"අඩ වශයෙන් වැහීම"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"ක්‍රියාකාරකම් කළමනාකරු වැහීමේ තත්වයට දමන්න. සම්පූර්ණ වැහීමකට පත් නොකරන්න."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"යෙදුම් මාරු වීම වැළක්වීම"</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"වෙනත් යෙදුමක් වෙත පරිශීලකයාව මාරු වීම වළක්වයි."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"පවතින යෙදුමේ තොරතුරු ලබාගැනීම"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="8153651434145132505">"තිරයේ පෙරබිම තුළ තිබෙන දැන් පවත්නා යෙදුමේ සහ සේවාවල පෞද්ගලික තොරතුරු ලබාගැනීමට දරන්නාට අවසර දෙන්න."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"සියලු යෙදුම් දියත් කිරීම් නිරීක්ෂණය සහ පාලනය කිරීම"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"පද්ධතිය ක්‍රියාකාරකම් දියත් කරන්නේ කෙසේදැයි නිරීක්ෂණයට සහ පාලනයට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් මගින් පද්ධතිය සම්පූර්ණයෙන්ම සම්මුතියකට එළඹිය හැක. වර්ධනය සඳහා පමණක් මෙම අවසරය අවශ්‍ය වෙයි, සාමාන්‍ය භාවිතය සඳහා කිසි විටෙකත් අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"පැකේජ ඉවත් කිරීමේ ප්‍රචාරණයක් යවන්න"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"යෙදුම් පැකේජයක් ඉවත්කොට ඇති බවට දැනුම්දීමක් විකාශනයට යෙදුමට අවසර දෙයි. ධාවනය වන අනෙකුත් යෙදුමක් නැති කිරීමට අනිෂ්ට යෙදුම් විසින් මෙය භාවිත කළ හැක."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS-ලැබීම විකාශන යැවීම"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"SMS පණිවිඩයක් හරහා ලැබුණු දැනුම්දීමක් ප්‍රචාරණයට යෙදුමට අවසර දෙන්න. පැමිණෙන SMS පණිවිඩ වංචා කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-ලැබීම විකාශන යැවීම"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"WAP PUSH පණිවුඩයක් ලැබී ඇති බවට දැනුම්දීමක් විකාශනය කිරීමට යෙදුමට අවසර දෙන්න. වංචාකාරී MMS පණිවුඩ ලැබීම් හෝ නිහඬව ඕනෑම වෙබ් පිටුවක අන්තර්ගතය අනිෂ්ට විචල්‍යවලින් ඉවත් කිරීමට, අනිෂ්ට යෙදුම් විසින් මෙය භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ධාවන ක්‍රියාවලි ගණන සීමා කිරීම"</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"ධාවනය වන උපරිම ක්‍රියාවලි ගණන පාලනය කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"පසුබිම් යෙදුම් වලට වැසීමට බලකරන්න"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"පසුබිමට පිවිසෙනවාත් සමඟම ක්‍රියාකාරකම් නැවතීම පාලනයට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසිසේත් අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_batteryStats" msgid="2789610673514103364">"බැටරි සංඛ්‍යාන කියවීම"</string>
+    <string name="permdesc_batteryStats" msgid="5897346582882915114">"වර්තමාන පහළ මට්ටමේ බැටරිය භාවිතා දත්ත කියවීමට යෙදුමට අවසර දෙන්න. ඔබ භාවිත කරන යෙදුම් මොනවා දැයි ගැන විස්තරාත්මක තොරතුරු ගැන දැන ගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"බැටරි සංඛ්‍යාන වෙනස් කිරීම"</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"එකතු කරගන්නා ලද බැටරි සංඛ්‍යාන වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් වල භාවිතයට නොවේ."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"යෙදුමේ විකල්ප සංඛ්‍යාංක සොයා ලබාගැනීම"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"එකතු කරගත් යෙදුම් ක්‍රියාකාරිත්ව සංඛ්‍යා ලේඛන වෙනස් කිරීමට උපාංගයට ඉඩ දෙන්න. සාමාන්‍ය උපාංග භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"යෙදුම් විකල්ප සංඛ්‍යාංක වෙනස් කිරීම"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"එකතු කරගත් යෙදුම් ක්‍රියාකාරිත්ව සංඛ්‍යා ලේඛන වෙනස් කිරීමට යෙදුමට ඉඩ දෙන්න. සාමාන්‍ය යෙදුම් භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"පද්ධති උපස්ථ පාලනය කරන්න සහ නැවත පිහිටුවන්න"</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"පද්ධතියේ උපස්ථය සහ උපක්‍රම නැවත පිහිටුවීම පාලනයට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"සම්පූර්ණ උපස්ථය හෝ මෙහෙයුම් නැවත පිහිටුවීම සනාථ කිරීම"</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"පූර්ණ උපස්ථ තහවුරුකිරීම් UI පුරන්නට උපකරණයට ඉඩ දෙන්න. කිසිම යෙදුමක් භාවිතා නොකරනු ඇත."</string>
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"අවසර නොලත් කවුළුව දර්ශනය කරන්න"</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"අභ්‍යන්තර පද්ධති පරිශීලක අතුරුමුහුණත් විසින් භාවිතා කිරීමට බලාපොරොත්තු වන කවුළු නිර්මාණය කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"වෙනත් යෙදුම් උඩින් අඳින්න"</string>
+    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"අනෙක් යෙදුම් මත හෝ පරිශීලක අතුරු මුහුණත් කොටස්වල ඇඳීමට යෙදුමට ඉඩ දෙන්න. එය ඔබේ භාවිතයේ ඇති ඕනෑම යෙදුමක මුහුණත සමග සම්බන්ධ වීමට හෝ අනෙක් යෙදුම් ගැන ඔබට පෙනෙන ආකාරය වෙනස් කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"ගෝලීය සජීවන වේගය වෙනස් කරන්න"</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"ඕනෑම වෙලාවක පොදු සජීවීකරණ වේගය (වේගවත් හෝ මන්දගාමී සජීවීකරණ) වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"යෙදුම් ටෝකන කළමනාකරණය කිරීම"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"සාමාන්‍ය Z පටිපාටිය මඟහැරයමින් යෙදුම්වලට අයිති ටෝකන් පත් නිර්මාණයට සහ කළමනාකරණයට යෙදුම්වලට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසිසේත් අවශ්‍ය නොවේ."</string>
+    <string name="permlab_freezeScreen" msgid="4708181184441880175">"තිරය නිශ්චල කරන්න"</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"සම්පූර්ණ තිර සංක්‍රමණය සඳහා තිරය තාවකාලිකව මුදවිමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_injectEvents" msgid="1378746584023586600">"යතුරු සහ පාලන බොත්තම් ඔබන්න"</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"තමන්ගේ ආදාන සිදුවීම් (යතුරු එබිම් , ආදී ) අනෙකුත් යෙදුම්වලට භාරදීමට යෙදුමට ඉඩ දෙන්න. අනිෂ්ට යෙදුම් මෙය ටැබ්ලටය ලබා ගැනීමට භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"වෙනත් යෙදුම්වලට එහි ආදාන සිදුවීම් (යතුරු එබීම්, යනාදිය.) ආදිය යැවීමට යෙදුමට අවසර දෙන්න. දුරකථනය අත්කර ගැනීම අනිෂ්ට යෙදුම් මෙය භාවිත කරයි."</string>
+    <string name="permlab_readInputState" msgid="469428900041249234">"ඔබ ටයිප් කරන දෙය සහ ඔබ ගන්නා ක්‍රියාවන් පටිගත කරන්න"</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"මුරපදය ටයිප් කිරීම වැනි අනෙකුත් යෙදුම් සමඟ අන්තර්ක්‍රියාකාරී වනවිට යනාදී ඔබ ඔබන යතුරු දැකීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අදාළ නොවේ."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"ආදාන ක්‍රමයක් වෙත බඳින්න"</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"ආදාන ක්‍රමය ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"ප‍්‍රවේශ්‍යතා සේවාවක් වෙත බදින්න"</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"ප‍්‍රවේශ්‍යතා සේවාවේ ඉහළ මට්ටමේ අතුරුමුහුණතට බැඳීමට දරන්නාට අවසර දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිවිටක අවශ්‍ය නොවේ."</string>
+    <string name="permlab_bindPrintService" msgid="8462815179572748761">"මුද්‍රණ සේවාවකට බද්ධ වී ඇත"</string>
+    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"මුද්‍රණ සේවාව ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindPrintSpoolerService" msgid="6807762783744125954">"මුද්‍රණ සේවාවකට බද්ධ වී ඇත"</string>
+    <string name="permdesc_bindPrintSpoolerService" msgid="3680552285933318372">"මුද්‍රණ සේවාව ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC සේවාව වෙත බැඳෙන්න"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"NFC කාඩ් පත් ආදර්ශනය කරන යෙදුම් රඳවනයට සම්බන්ධ වීමට ඉඩ දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindTextService" msgid="7358378401915287938">"පෙළ සේවාවකට බඳින්න"</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"කෙටි පණිවිඩ සේවාවක (උදා. SpellCheckerService) ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN සේවාවකට බැඳීම"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"VPN සේවාව ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"බිතුපත වෙත බඳින්න"</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"බිතුපත ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"විජට සේවාවකට බඳින්න"</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"විජට් සේවාව ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"උපාංග පරිපාලක සමඟ අන්තර්ක්‍රියාකාරී වීම"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"උපාංග පාලකයා වෙතට අභිප්‍රායයන් යැවීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"උපාංග පරිපාලකයෙක් එක් කිරීම හෝ ඉවත් කිරීම"</string>
+    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"දරන්නාට උපාංග පරිපාලකයින් එක් කිරීමට හෝ ඉවත් කිරීමට අවසර දේ. සාමාන්‍ය යෙදුම් වලට කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="permlab_setOrientation" msgid="3365947717163866844">"තිර දිශානතිය වෙනස් කිරීම"</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"තිරයේ භ්‍රමණය ඕනෑම වේලාවක වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවනු ඇත."</string>
+    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"දර්ශකයේ වේගය වෙනස් කිරීම"</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"මූසිකයේ හෝ ට්‍රැක්පෑඩයේ වේගය ඕනෑම මොහොතක වෙනස් කිරීමට උපාංගයට ඉඩ දෙන්න. සාමාන්‍ය උපාංගයන් සඳහා කිසිදා අවශ්‍ය නොවනු ඇත."</string>
+    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"යතුරු පුවරු පිරිසැලැස්ම වෙනස් කිරීම"</string>
+    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"යතුරුපුවරු මුහුණත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"යෙදුම් වෙත Linux සංඥා යැවීම"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"පවතින සියලු ක්‍රියාවලි වෙත සැපයුම් සංඥා ඉල්ලවිමට යෙදුමට අවසර දේ."</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"යෙදුම සැමවිටම ධාවනය කරන්න"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"මතකයේ පවතින එහි කොටස් නොනැසී පැවතීමට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම් වලට මතකය සීමා කිරීමෙන් ටැබ්ලටය පමා කිරීම මගින්  මෙමගින් කළ හැක."</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"යෙදුමට තම කොටස් මතකය තුල නොබිඳීව රඳා පවත්වාගෙන යාමට අවසර දෙන්න. මෙය දුරකථනය මන්දගාමී කරමින් අනෙකුත් උපාංගයන් සඳහා ඉතිරි මතකය සීමා කිරීමට හැක."</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"යෙදුම් මකන්න"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"Android පැකේජ මැකීමට යෙදුමට අවසර දෙන්න. වැදගත් යෙදුම් මැකීමට අනිෂ්ට යෙදුම් විසින් මෙය භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"යෙදුමේ වෙනත් දත්ත මකන්න"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"පරිශීලක දත්ත හිස් කිරීමට යෙදුමකට ඉඩ දේ."</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"අනෙක් යෙදුම්වල හැඹිලි මකන්න"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"හැඹිලි ගොනු මැකීමට අවසර යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"යෙදුම් ආචයනයේ ඉඩ ප්‍රමාණය මැනීම"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"යෙදුමකට එහි කේතය, දත්ත සහ හැඹිලි ප්‍රමාණ ලබාගැනීමට අවසර දෙන්න."</string>
+    <string name="permlab_installPackages" msgid="2199128482820306924">"යෙදුම් කෙළින්ම ස්ථාපනය කිරීම"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"නව හෝ යාවත්කාලින කරන ලද Android පැකේජයන් ස්ථාපනය කිරීමට ඉඩ දෙන්න. බලසහිත අවසර තීන්දු සමග නව යෙදුම් එකතු කිරීමට අනිෂ්ට යෙදුම්වලට මෙය භාවිතා කිරීමට ඉඩ තිබේ."</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"යෙදුමේ සියලුම හැඹිලි දත්ත මකන්න"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"අනෙක් යෙදුම්වල හැඹිලි නාමාවලි තුළ ඇති ගොනු මැකීමෙන් යෙදුමට ටැබ්ලට ආචයනය නිදහස් කිරීමට අවසර දෙන්න. මෙමගින් අනෙක් යෙදුම්වලට ඒවායේ දත්ත නැවත ලබා ගැනීමට අවශ්‍ය වන නිසා, ඒවායේ ආරම්භය තවත් සෙමින් සිදුවීමට ඉඩ ඇත."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"අනෙක් යෙදුම්වල හැඹිලි නාමාවලි තුළ ඇති ගොනු මැකීමෙන් යෙදුමට දුරකථන ආචයනය නිදහස් කිරීමට අවසර දෙන්න. මෙමඟින් අනෙක් යෙදුම්වලට ඒවායේ දත්ත නැවත ලබා ගැනීමට අවශ්‍ය වන නිසා, ඒවායේ ආරම්භය තවත් සෙමින් සිදුවීමට ඉඩ ඇත."</string>
+    <string name="permlab_movePackage" msgid="3289890271645921411">"යෙදුම් සම්පත් ගෙන යාම"</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"අභ්‍යන්තර සහ බාහිර මාධ්‍යයන්ගෙන් යෙදුමේ සම්පත් ගෙනයාමට සහ යෙදුමේ සම්පත් වලින් අභ්‍යන්තර සහ බාහිර මාධ්‍යයන්ට යෙදුමේ සම්පත් ගෙනයාමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"සංවේදී ලොග් දත්ත කියවීම"</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"පද්ධතියේ විවිධ ලොග් ගොනු කියවීමට යෙදුමට අවසර දෙන්න. පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව ඔබ ටැබ්ලටයෙන් කුමක් කරන්නෙහිද යනාදී සාමාන්‍ය තොරතුරු සෙවීමට මෙයට අවසර දෙන්න."</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"පද්ධතියේ විවිධ ලොග් ගොනු කියවීමට යෙදුමට අවසර දෙන්න. පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව ඔබ දුරකථනයෙන් කුමක් කරන්නෙහිද යනාදී සාමාන්‍ය තොරතුරු සෙවීමට මෙයට අවසර දෙන්න."</string>
+    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"නැවත ධාවනය සඳහා ඕනෑම මාධ්‍ය විකේතකයක් හාවිතා කරන්න"</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"නැවත ධාවනය සඳහා විකේතනය කිරීමට ඕනෑම ස්ථාපිත මාධ්‍ය විකේතකයක් භාවිතයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"විශ්වාසදායී අක්තපත්‍ර කළමනාකරණය"</string>
+    <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"යෙදුමට CA සහතික විශ්වාසදායී අක්තපත්‍ර ලෙස ස්ථාපනය සහ අස්ථාපනය කිරීමට ඉඩ දෙන්න."</string>
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"Diag විසින් හිමිකාරත්වය දරණ සම්පත්වලට කියවීම/ ලිවිම"</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"Diag කණ්ඩායමට අයිති ඕනෑම සම්පතක් කියවීමට සහ ලිවීමට යෙදුමට අවසර දෙන්න. උදාහරණයක් ලෙස /dev තුල ඇති ගොනු. මෙයට පද්ධති ස්ථායිතාවට සහ ආරක්ෂාවට බලපෑම් කිරීමට හැකියාවක් ඇත. නිෂ්පාදක හෝ ක්‍රියාකරු විසින් දෘඩාංග-විශේෂිත දෝෂ නිර්ණය සඳහා පමණක් මෙය යොදාගත යුතුය."</string>
+    <string name="permlab_changeComponentState" msgid="6335576775711095931">"යෙදුම් අංග සබල හෝ අබල කිරීම"</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"වෙනත් යෙදුමක අංගයක් සබල ද නැද්ද යන්න වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. වැදගත් ටැබ්ලට් අවශ්‍යතා අබල කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක. මෙම අවසරය සැලකිල්ලෙන් භාවිතා කළ යුතුය, භාවිත නොකරන, අස්ථිර හෝ අස්ථායි තත්වයට යෙදුම පත් කිරීමට එයට හැකිය."</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"වෙනත් යෙදුමක අංගයක් සබල ද නැද්ද යන්න වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. වැදගත් දුරකථන අවශ්‍යතා අක්‍රිය කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක. මෙම අවසරය සැලකිල්ලෙන් භාවිත කළ යුතුය, භාවිත නොකරන, අස්ථිර හෝ අස්ථායි තත්වයට යෙදුම පත් කිරීමට එයට හැකිය."</string>
+    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"අවසර ප්‍රදානය කිරීම හෝ අහෝසි කිරීම"</string>
+    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"යෙදුමකට එයට හෝ අනෙක් යෙදුම් වලට විශේෂිත අවසර ප්‍රදානයට හෝ අහෝසි කිරීමට අවසර දෙන්න. අනිෂ්ට යෙදුම්, ඒවාට අවසර ප්‍රදානය නොකළ ගුණාංග වලට ප්‍රවේශ වීමට මෙය භාවිතා කළ හැක."</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"අභිරුචි යෙදුම් සකසන්න"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"ඔබගේ අභිරුචි යෙදුම් වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ ධාවනය වන යෙදුම් වෙනස් කිරීම, පවතින යෙදුම් වලින් දත්ත එකතු කිරීම, ප්‍රෝඩා කිරීම වැනි දේ අනිෂ්ට යෙදුම් නිශ්ශබදවම සිදු කරයි."</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"පද්ධති සැකසීම් වෙනස් කිරීම"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"පද්ධති සැකසීම් දත්ත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් ඔබගේ පද්ධති වින්‍යාස දෝෂ ගැන්විය හැක."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"ආරක්‍ෂිත පද්ධති සැකසීම් වෙනස් කරන්න"</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"පද්ධතියේ ආරක්‍ෂිත දත්ත වෙනස් කිරීමට උපාංගයට අවසර දෙන්න. සාමාන්‍ය උපාංග සඳහා භාවිතයට නොවේ."</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"Google සේවා සිතියම වෙනස් කරන්න"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"Google සේවා සිතියම වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා භාවිතයට නොවෙයි."</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"ආරම්භයේදී ධාවනය කිරීම"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"පද්ධතිය ඇරඹුම අවසන් වූ වහාම යෙදුම ආරම්භ වීමට යෙදුමට අවසර දෙන්න. ටැබ්ලටය ආරම්භ කිරීමට මෙමඟින් පමා කළ හැකි අතර සැමවිටම ධාවනය වන නිසා සම්පූර්ණ ටැබ්ලටයම ප්‍රමාද කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"පද්ධතිය ඇරඹුම අවසන් වූ වහාම යෙදුම ආරම්භ වීමට යෙදුමට අවසර දෙන්න. දුරකථනය ආරම්භ කිරීමට මෙමඟින් පමා කළ හැකි අතර සැමවිටම ධාවනය වන නිසා සම්පූර්ණ දුරකථනයේම ක්‍රියාකාරිත්වය ප්‍රමාද කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"බැඳුණු විකාශනය යැවීම"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"ප්‍රචාරණයට පසුවද පවතින, ප්‍රචාරණයන් යැවීමට යෙදුමට අවසර දෙන්න. වැඩිපුර මතකය භාවිතය හේතු කොට, අධික භාවිතය මඟින් ටැබ්ලටය පමා කිරීම හෝ අස්ථිර කළ හැක."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"ප්‍රචාරණයට පසුවද පවතින, ප්‍රචාරණයන් යැවීමට යෙදුමට අවසර දෙන්න. වැඩිපුර මතකය භාවිතය හේතු කොට, අධික භාවිතය මඟින් දුරකථනය පමා කිරීම හෝ අස්ථිර කළ හැක."</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"ඔබගේ සම්බන්ධතා කියවීම"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"සඳහන් පුද්ගලයන් හට ඔබ ඇමතුම් ගත්, ඊ-තැපැල්, හෝ  අනෙකුත් ආකාර වලින් සන්නිවේදනය කරගත් සංඛ්‍යතද ඇතුළුව, ඔබගේ ටැබ්ලටයේ ගබඩාවී ඇති සම්බන්ධතා පිළිබඳ දත්ත කියවීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය මඟින් යෙදුම්වලට ඔබගේ සම්බන්ධතා පිළිබඳ දත්ත සුරැකීමට ඉඩ ලබා දෙන අතර, අනිෂ්ට යෙදුම් විසින් ඔබ නොදැනුවත්වම සම්බන්ධතා දත්ත බෙදා ගැනීමට ඉඩ ඇත."</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"නියමිත පුද්ගලයන් සමග ඔබ ඇමතු, ඊ-තැපැල් කළ හෝ වෙනත් ආකාරයකින් සන්නිවේදනය කළ සංඛ්‍යාතය ඇතුලත් ඔබගේ දුරකථනයේ ආචයනය කරන ලද ඔබගේ සම්බන්ධතා ගැන දත්ත කියවීමට යෙදුමට අවසර දෙන්න. ඔබගේ සම්බන්ධතා දත්ත උපස්ථ කිරීමට මෙම අවසරය යෙදුමට අවසර දෙන අතර ඔබගේ දැනුමකින් තොරව අනිෂ්ට යෙදුම් සම්බන්ධතා දත්ත බෙදාගැනීම කළ හැක."</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"ඔබගේ සම්බන්ධතා වෙනස් කිරීම"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"නියමිත පුද්ගලයන්ට ඔබ ඇමතූ, ඊ-තැපැල් කළ හෝ ඇමතුම් කළ සංඛ්‍යාත ඇතුලත් ඔබගේ ටැබ්ලටයේ ආචයනය කරන ලද සම්බන්ධතා (ලිපින) දත්ත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙන් යෙදුමට සම්බන්ධතා දත්ත මැකීමට අවසර දෙයි."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"සඳහන් පුද්ගලයන්ට ඔබ ඇමතූ, ඊ-තැපැල් කළ හෝ ඇමතුම් කළ සංඛ්‍යාන ඇතුලත් ඔබගේ දුරකථනයේ ආචයනය කරන ලද සම්බන්ධතා (ලිපින) දත්ත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙන් යෙදුමට සම්බන්ධතා දත්ත මැකීමට අවසර දෙයි."</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"ඇමතුම් ලොගය කියවන්න"</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"පැමිණෙන සහ පිටවන ඇමතුම් ගැන දත්ත ඇතුළත්, ඔබගේ ටැබ්ලටයේ ඇමතුම් ලොග කියවීමට යෙදුමට අවසර දෙන්න. ඔබගේ ඇමතුම් ලොග දත්ත සුරක්ෂිත කිරීමට මෙම අවසරය යෙදුම්වලට අවසර දෙයි සහ ඔබගේ දැනුමකින් තොරව ඇමතුම් ලොග දත්ත අනිෂ්ට යෙදුම් බෙදා ගැනීම කළ හැක."</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"ලැබෙන සහ පිටවන ඇමතුම් පිළිබඳ දත්ත ඇතුළත්ව ඔබගේ දුරකථනයේ ඇමතුම් ලොග් කියවීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය ඔබගේ ඇමතුම් ලොග් දත්ත උපස්ථ කිරීමට යෙදුමට ඉඩදෙන අතර ඔබගේ අනුදැනුමකින් තොරව අනිෂ්ට යෙදුම් විසින් ඇමතුම් ලොග් දත්ත බෙදාගැනීම කළ හැක."</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"ඇමතුම් ලොගය ලිවීම"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"ලැබෙන ඇමතුම් සහ පිටවන ඇමතුම් දත්ත ඇතුළත්ව ඔබගේ ටැබ්ලටයේ ඇමතුම් ලොගය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ ඇමතුම් ලොගය මැකීමට හෝ වෙනස් කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිතා කෙරේ."</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"පැමිණෙන සහ පිටවෙන ඇමතුම් දත්ත ඇතුළුව ඔබගේ දුරකථනයේ ඇමතුම් ලොගය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ ඇමතුම් ලොගය මැකීමට හෝ වෙනස් කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කල හැක."</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"ඔබගේ සම්බන්ධතා පත කියවන්න"</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"ඔබගේ නම සම්බන්ධතා තොරතුරු ආදී ඔබගේ උපාංගයේ ගබඩා වී ඇති පුද්ගලික පැතිකඩ තොරතුරු කියවීමට යෙදුමට අවසර දෙන්න. මෙහි තේරුම යෙදුමට ඔබව හඳුනා ගැනීමට හැකි වන බව සහ ඔබගේ පුද්ගලික තොරතුරු අනෙක් අයට යැවීමට ද හැකි වීමයි."</string>
+    <string name="permlab_writeProfile" msgid="907793628777397643">"ඔබගේ සම්බන්ධතා පත වෙනස් කිරීම"</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"ඔබගේ නම සහ සම්බන්ධතා තොරතුරු වැනි ඔබගේ උපාංගයේ ආචයනය කරන ලද පුද්ගලික පැතිකඩ තොරතුරු වෙනස් කිරීමට හෝ එකතු කිරීමට යෙදුමට අවසර දෙන්න. මෙමගින් යෙදුමට ඔබව හඳුනා ගත හැකි අතර අනෙක් අයට ඔබගේ පැතිකඩ තොරතුරු යැවිය හැකි බව කියවෙයි."</string>
+    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ඔබගේ සමාජ ප්‍රවාහය කියවන්න"</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"ඔබගේ සහ ඔබගේ යහළුවන්ගේ සමාජ යාවත්කාලීනයන් වෙත පිවිසීමට හෝ සමමුහුර්ත කිරීමට යෙදුමට අවසර දෙන්න. තොරතුරු බෙදා ගැනීමේ දී සැලකිලිමත් වන්න -- විශ්වාසයකින් තොරව සමාජ ජාලවල ඔබගේ සහ ඔබගේ යහළුවන් අතර සන්නිවේදන කියවීමට මෙමගින් යෙදුමට අවසර දෙයි. සටහන: සියලු සමාජ ජාලවල මෙම අවසරය බල නොකරයි."</string>
+    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ඔබගේ සමාජ ප්‍රවාහය වෙත ලිවීම"</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"ඔබගේ යහළුවන්ගේ සමාජ යාවත්කාලීනයන් පෙන්වීමට යෙදුමට අවසර දෙන්න. තොරතුරු බෙදා ගැනීමේදී සැලකිලිමත් වන්න -- යහළුවෙක්ගෙන් පැමිණෙන ලෙස පණිවිඩ නිපදවීමට මෙමඟින් යෙදුමට අවසර දෙන්න. සටහන : සියලු සමාජ ජාල සඳහා මෙම අවසරය බල නොදෙයි."</string>
+    <string name="permlab_readCalendar" msgid="5972727560257612398">"දින දර්ශනයේ සිදුවීම් සහ රහසිගත තොරතුරු කියවීම"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"ඔබගේ ටැබ්ලටය තුල ගබඩා  කර ඇති මිතුරන්ගේ සහ එක්ව ක්‍රියාකරන්නන්ගේ ද ඇතුළුව සියලුම දින දර්ශන සිද්ධි කියවීමට යෙදුමට අවසර දෙන්න. මෙය රහස්‍යභාවය හෝ සංවේදීතාවය නොසලකා ඔබගේ දින දර්ශන දත්ත බෙදා ගැනීමට හෝ සුරැකීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"යහළුවන් සහ සමකාලිනයන් ඇතුලත් ඔබගේ දුරකථනයේ ආචයනය කරන ලද සියලු දින දර්ශන සිදුවීම් කියවීමට යෙදුමට අවසර දෙන්න. විශ්වාසයකින් හෝ සංවේදීතාවකින් තොරව ඔබගේ දින දර්ශන දත්ත බෙදා ගැනීමට හෝ උපස්ථ කිරීමට මෙමගින් යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"දින දර්ශන සිද්ධි එකතු කිරීම හෝ වෙනස් කිරීමක් සිදුකර හිමිකරුගේ දැනීමකින් තොරව අමුත්තන්ට ඊ-තැපෑලක් යවීම"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"යහළුවන් හෝ එකට-වැඩකරන්නන් ඇතුළත්ව ඔබට ටැබ්ලටයේ වෙනස් කළ හැකි සිද්ධි එකතු කිරීමට, ඉවත් කිරීමට, වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙමඟින් දින දර්ශන හිමිකරුවන්ගෙන් පණිවිඩ යවන පරිදි මෙන් මවාපෑමට හෝ හිමිකරුගේ අනුදැනුමකින් තොරව සිද්ධි වෙනස් කිරීමට යෙදුමට අවසර ලැබේ."</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"ඔබගේ යහළුවන් හෝ සමකාලීනයන් ඇතුළත් ඔබගේ දුරකථනයේ ඔබට වෙනස් කළ හැකි සිදු වීම් එකතු කිරීමට, ඉවත් කිරීමට, වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙමගින් දින දර්ශන හිමිකරුවන්ගෙන් පැමිණෙන සේ පෙනෙන පණිවිඩ යැවීමට හෝ හිමිකරුගේ දැනුමකින් තොරව සිදුවීම් වෙනස් කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"පරීක්ෂණ සඳහා ආදර්ශ ස්ථාන මූලාශ්‍ර"</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"පරීක්ෂණයට ව්‍යාජ ස්ථාන මූලාශ්‍ර සාදන්න හෝ නව ස්ථාන සැපයුම්කරුවෙකු ස්ථාපනය කරන්න. GPS හෝ ස්ථාන සැපයුම්කරුවන් ආදී වෙනත් ස්ථාන මූලාශ්‍ර විසින් ලබා දෙන ස්ථානය සහ/හෝ තත්වය ප්‍රතිස්ථාපනය කිරීමට යෙදුමට මෙය අවසර දෙයි."</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"අමතර ස්ථාන සැපයුම්කරු විධාන වෙත ප්‍රවේශ වීම"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"අමතර ස්ථාන සැපයුම්කරු විධාන වෙත පිවිසීමට යෙදුමට අවසර දෙන්න. GPS හෝ වෙනත් ස්ථාන මූලාශ්‍ර ක්‍රියාවලි වෙත බාධා කිරීමට මෙය අවසර දෙයි."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"ස්ථාන සැපයුම්කරුවෙකු ස්ථාපනයට අවසරය දෙන්න"</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"පරීක්ෂණයට ව්‍යාජ ස්ථාන මූලාශ්‍ර සාදන්න හෝ නව ස්ථාන සැපයුම්කරුවෙකු ස්ථාපනය කරන්න. GPS හෝ ස්ථාන සැපයුම්කරුවන් ආදී වෙනත් ස්ථාන මූලාශ්‍ර විසින් ලබා දෙන ස්ථානය සහ/හෝ තත්ත්වය ප්‍රතිස්ථාපනය කිරීමට යෙදුමට මෙය අවසර දෙයි."</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"නිවැරදි ස්ථානය (GPS සහ ජාලය පදනම් කරගත්)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"ගෝලීය ස්ථානීය පද්ධතිය (GPS) හෝ සෙල් කුළුණු සහ Wi-Fi වැනි ජාල ස්ථානීය ප්‍රභව භාවිතයෙන් ඔබගේ නිවැරදි ස්ථානය ලබාගැනීමට යෙදුම අවසර දෙන්න. යෙදුම් වලට ස්ථානීය සේවා භාවිතා කිරීමට  ඒවා සක්‍රිය විය යුතු වේ. ඔබව සොයා ගැනීමට යෙදුම් මෙය භාවිතා කරන අතර අමතර බැටරි බලයක්ද පරිභෝජනය කරයි."</string>
+    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"ආසන්නතම ස්ථානය (ජාලය-පාදක වූ)"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"ඔබගේ දළ ස්ථානය ලබාගැනීමට යෙදුමට අවසර දෙන්න. සන්නේවේදන කුළුණු සහ Wi-Fi ආදී ජාල ස්ථාන මූලාශ්‍ර භාවිත කරන ස්ථාන සේවා විසින් මෙම ස්ථානය ව්‍යුත්පන්න කර ඇත. යෙදුමට භාවිතය සඳහා මෙම ස්ථාන සේවා සක්‍රිය කළ යුතු අතර ඔබගේ උපාංගය සඳහා පැවතිය යුතුය. ඔබ සිටින තැන දළව හඳුනා ගැනීමට යෙදුම් වලට මෙය භාවිත කළ හැකිය."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"SurfaceFlinger පහල මට්ටමේ විශේෂාංග භාවිතයට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"රාමු අන්තරාචය කියවීම"</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"රාමු අන්තරාචයනයෙන් අන්තර්ගතයන් කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger වෙත පිවිසෙන්න"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"InputFlinger පහල මට්ටමේ විශේෂාංග භාවිතයට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi සංදර්ශක වින්‍යාස කරන්න"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"වින්‍යාස කිරීමට සහ Wifi සංදර්ශක වෙත සම්බන්ධ වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wifi සංදර්ශක පාලනය"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Wifi සංදර්ශකයේ පහළ මට්ටමේ විශේෂාංග පාලනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"ශබ්ද ප්‍රතිදානය ග්‍රහණය"</string>
+    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"යෙදුමට ශබ්ද ප්‍රතිදානය ග්‍රහණය කර හරවා යැවීමට ඉඩ දේ."</string>
+    <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"වීඩියෝ ප්‍රතිදානය"</string>
+    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"යෙදුමට වීඩියෝ ප්‍රතිදානය ග්‍රහණය කර හරවා යැවීමට ඉඩ දේ."</string>
+    <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"ආරක්‍ෂිත වීඩියෝ ප්‍රතිදානය"</string>
+    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"යෙදුමට ආරක්‍ෂිත වීඩියෝ ප්‍රතිදානය ග්‍රහණය කර හරවා යැවීමට ඉඩ දේ."</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"ඔබගේ ශ්‍රව්‍ය සැකසීම් වෙනස් කරන්න"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ශබ්දය ආදී ගෝලීය ශබ්ද සැකසීම් වෙනස් කිරීමට සහ ප්‍රතිදානය සඳහා භාවිත කරන්නේ කුමන නාදකය දැයි තේරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"ශබ්ද පටිගත කරන්න"</string>
+    <string name="permdesc_recordAudio" msgid="4906839301087980680">"මයික්‍රොෆෝනය මඟින් ශබ්ද පටිගත කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය මඟින් යෙදුමට ඕනෑම වේලාවක ඔබගේ අනුදැනුමකින් තොරව ශබ්ද පටිගත කිරීමට ඉඩ ලබා දේ."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"පින්තූර සහ වීඩියෝ ගන්න"</string>
+    <string name="permdesc_camera" msgid="8497216524735535009">"කැමරාවෙන් පින්තූර ගැනීමට සහ වීඩියෝ කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය මඟින් ඔබගේ අනුදැනුමකින් තොරව ඕනෑම වේලාවකදී කැමරාව භාවිතා කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"කැමරාව භාවිතයේදී LED දර්ශක සම්ප්‍රේෂණය අබල කරන්න"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"කැමරා භාවිතය පිළිබඳ LED දර්ශකය අක්‍රිය කිරීමට, කලින් පිහිටුවා ඇති පද්ධති යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"ටැබ්ලටය ස්ථිරවම අබල කිරීම"</string>
+    <string name="permlab_brick" product="default" msgid="8337817093326370537">"දුරකථනය ස්ථිරව අබල කිරීම"</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"මුළු ටැබ්ලටයම ස්ථිරවම අක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. මෙය ඉතා භයානකයි."</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"මුළු දුරකථනයම ස්ථිරවම අක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. මෙය ඉතා භයානකයි."</string>
+    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"ටැබ්ලට් නැවත පණ ගැන්වීමට බල කරන්න"</string>
+    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"දුරකථන නැවත පණ ගැන්වීමට බල කරන්න"</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"ටැබ්ලටය නැවත බල ගැන්වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"ටැබ්ලටය නැවත ඇරඹීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"USB ආචයනය ගොනු පද්ධතිය ප්‍රවේශ කිරීම"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"SD පත් ගොනු පද්ධතිය ප්‍රවේශ කිරීම"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"ඉවත් කළ හැකි ආචයනය සඳහා ගොනු පද්ධති ඈඳීමට සහ ගැලවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB ආචයනය මකන්න"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD පත මකන්න"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"ඉවත් කළ හැකි ආචයන ෆෝමැට් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_access" msgid="3411338632002193846">"අභ්‍යන්තර ආචයනය පිළිබඳ තොරතුරු ලබා ගැනීම"</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"අභ්‍යන්තර ආචයනයේ තොරතුරු ලබාගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_create" msgid="6414757234789336327">"අභ්‍යන්තර ආචයනය නිර්මාණය"</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"අභ්‍යන්තර ආචයනය සැදීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_destroy" msgid="526928328301618022">"අභ්‍යන්තර ආචයනය විනාශ කිරීම"</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"අභ්‍යන්තර ආචයනය විනාශ කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"අභ්‍යන්තර ආචයනය නංවීම/ගැලවීම"</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"අභ්‍යන්තර ආචයනය සවි කිරීමට/ගැලවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_rename" msgid="7496633954080472417">"අභ්‍යන්තර ආචයනය නැවත නම් කරන්න"</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"අභ්‍යන්තර ආචයනය නැවත නම් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"කම්පනය පාලනය කිරීම"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"කම්පකය පාලනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"සැණෙළි ආලෝකය පාලනය කරන්න"</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"සැණෙළිය පාලනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"USB උපාංග සඳහා කැමැත්ත සහ අවසර කළමනාකරණය කිරීම"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"USB උපාංග සඳහා අභිරුචි සහ අවසර කළමනාකරණයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP ප්‍රොටොකෝලය ක්‍රියාත්මක කිරීම"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"MTP USB ප්‍රොටෝකෝලය ක්‍රියාත්මක කිරීමට කර්නල MTP ධාවකයට ප්‍රවේශ වීමට අවසර දෙන්න."</string>
+    <string name="permlab_hardware_test" msgid="4148290860400659146">"දෘඩාංග පරීක්ෂණය කරන්න"</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"දෘඩාංග පරීක්ෂා කිරීමේ අරමුණ සඳහා යෙදුමට විවිධ පර්යන්ත පාලනය කිරීමට ඉඩ දෙන්න."</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"දුරකථන අංක වෙත ඍජුවම අමතන්න"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"ඔබගේ මැදිහත් වීමක් නොමැතිව දුරකථන අංක ඇමතීමට යෙදුමට අවසර දෙන්න. මෙහි ප්‍රතිඑලය වන්නේ අනපේක්ෂිත අයකිරීම් හෝ ඇමතුම් ඇතිවීමයි. මෙයන් හදිසි අංක වලට ඇමතුම් ගැනීමට යෙදුමට අවසර නොදෙන බවට සටහන් කරගන්න. ඔබගේ අනුදැනුමක් නොමැතිව ඇමතුම් ගැනීමෙන් අනිෂ්ට යෙදුම් ඔබගේ මුදල් නිකරුණේ වැය කරයි."</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"ඕනෑම දුරකථන අංකයකට ඍජුවම අමතන්න"</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"ඔබගේ මැදිහත්වීමකින් තොරව හදිසි අංක ඇතුළත්ව ඕනෑම දුරකථන අංකයකට ඇමතීමට යෙදුමට අවසර දෙන්න. හදිසි සේවා වෙත අනවශ්‍ය සහ නීතිමය නොවන ඇමතුම ලැබීමට අනිෂ්ට යෙදුම සිදු කළ හැක."</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"CDMA ටැබ්ලට පිහිටුම සෘජුව ඇරඹීම"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"CDMA දුරකථන පිහිටුම සෘජුව ඇරඹීම"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"යෙදුමට CDMA ප්‍රතිපාදන ආරම්භ කිරීමට ඉඩදෙන්න. අනිෂ්ට යෙදුම් අනවශ්‍ය ලෙස CDMA ප්‍රතිපාදන ආරම්භ කළ හැක."</string>
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"ස්ථාන යාවත්කාලීන දැනුම්දීම් පාලනය කරන්න"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"ස්ථානීය යාවත්කාලින දැනුම්දීම් රේඩියෝවෙන් සබල/අබල කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_checkinProperties" msgid="7855259461268734914">"පිරික්සුම් ගුණාංග වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"පිරික්සුම් සේවාව මගින් උත්ශ්‍රේණි කළ ගුණාංග වෙත කියවීම්/ලිවීම් පිවිසුම සඳහා යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් වල භාවිතයට නොවේ."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"විජට් තෝරන්න"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"කුමන විජටය කුමන යෙදුමෙන් භාවිතා කල හැකිද යන්න පද්ධතියට පැවසීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය ඇති යෙදුමකට අනෙක් යෙදුම්වලට පුද්ගලික දත්ත වලට ප්‍රවේශය ලබා දිය හැක. සාමාන්‍ය යෙදුම් වල භාවිතයට නොවේ."</string>
+    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"දුරකථනයේ තත්වය වෙනස් කිරීම"</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"උපාංගයේ දුරකථන විශේෂාංග පාලනයට යෙදුමට අවසර දෙන්න. මෙම අවසරය ඇති යෙදුමට ඔබට නිවේදනයෙන් තොරව ජාල මාරු කිරීම, දුරකථන රේඩියෝව සක්‍රිය සහ අක්‍රිය කිරීම කළ හැක."</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"දුරකථනයේ තත්වය සහ අනන්‍යතාවය කියවීම"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"උපාංගයේ දුරකථන විශේෂාංග වෙත පිවිසීමට යෙදුමට අවසර දෙන්න. ඇමතුම සක්‍රිය වුවත් සහ ඇමතුමකින් දුරස්ථ අංකය සම්බන්ධ වුවත් දුරකථන අංකය සහ උපාංග ID හඳුනා ගැනීමට මෙම අවසරය යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ටැබ්ලටය නින්දෙන් වැළක්වීම"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"දුරකථනය නින්දට යාමෙන් වළකන්න"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ටැබ්ලටය නින්දට යාමෙන් වැලැක්වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"දුරකථනය නින්දට යාමෙන් වැලැක්වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"ටැබ්ලටය සක්‍රිය හෝ අක්‍රිය කරන්න"</string>
+    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"දුරකථනය බල ගැන්වීම හෝ වැසීම"</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"ටැබ්ලටය සක්‍රිය හෝ අක්‍රිය කිරීමට යෙදුමට අවසර දේ."</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"දුරකථනය සක්‍රිය සහ අක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_factoryTest" msgid="3715225492696416187">"කර්මාන්තශාලා පරීක්ෂණ ආකාරය තුළ ධාවනය කරන්න"</string>
+    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"ටැබ්ලටයේ දෘඩාංග වෙත සම්පූර්ණ පිවිසුම සඳහා අවසර දීමෙන් පහළ මට්ටමේ නිපැවුම්කරු පරීක්ෂණයක් ලෙස ධාවනය කරන්න. නිපැවුම්කරු පරීක්ෂණ ආකාරයෙන් ටැබ්ලටයේ ධාවනය වන විට පමණි."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"දුරකථනයේ දෘඩාංග වෙත සම්පූර්ණ පිවිසුම සඳහා අවසර දීමෙන් පහළ මට්ටමේ නිපැවුම්කරු පරීක්ෂණයක් ලෙස ධාවනය කරන්න. නිපැවුම්කරු පරීක්ෂණ ආකාරයෙන් දුරකථනයේ ධාවනය වන විට පමණි."</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"බිතුපත සැකසීම"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"පද්ධති බිතුපත සැකසීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"ඔබගේ බිතුපතේ ප්‍රමාණය සැකසීම"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"පද්ධති බිතුපතේ ප්‍රමාණ ඉඟි සකස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_masterClear" msgid="2315750423139697397">"කර්මාන්තශාලා සුපුරුද්දට පද්ධතිය නැවත සකස් කිරීම"</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"සියලු දත්ත මැකීමෙන්, වින්‍යාස කිරීමෙන් සහ යෙදුම් ස්ථාපනයෙන් එහි කර්මාන්ත ශාලා සැකසීම් වෙත පද්ධතිය නැවත සැකසීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"වේලාව සැකසීම"</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"ටැබ්ලට ඔරලෝසුවේ වේලාව වෙනස් කිරීමට යෙදුමට ඉඩ දෙන්න."</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"දුරකථන ඔරලෝසුවේ වේලාව වෙනස් කිරීමට යෙදුමකට ඉඩ දෙන්න."</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"වේලා කලාපය සැකසීම"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"ටැබ්ලටයේ කාල කලාපය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"දුරකථනයේ වේලා කලාපය වෙනස් කිරීමට උපාංගයට අවසර දෙන්න."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService ලෙස පෙනී සිටින්න"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"AccountAuthenticators වෙත ඇමතුම් ගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"උපාංගයේ ඇති ගිණුම් සොයන්න"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"ටැබ්ලටය විසින් දන්නා ගිණුම් ලැයිස්තුවක් ලබාගැනීමට යෙදුමට අවසර දෙන්න. ඔබ ස්ථාපනය කොට ඇති යෙදුම් විසින් සාදා ඇති ගිණුම් මීට ඇතුළත් වේ."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"දුරකථනය විසින් දන්නා ගිණුම් ලැයිස්තුවක් ලබාගැනීමට යෙදුමට අවසර දෙන්න. ඔබ ස්ථාපනය කොට ඇති යෙදුම් විසින් සාදා ඇති ගිණුම් මීට ඇතුළත් වේ."</string>
+    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"ගිණුම් සාදන්න සහ මුරපද සකසන්න"</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"ගිණුම් සැදීමට සහ රහස් පද ලබාගැනීම සහ සැකසීම් කිරීම ඇතුළත්ව AccountManager ගේ ගිණුම් සත්‍යාපන හැකියාවන් භාවිතා කිරීමට යෙදුමකට අවසර දෙන්න."</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"ගිණුම් එකතු කරන්න හෝ ඉවත් කරන්න"</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"ගිණුම් එකතු කිරීම, සහ ඉවත් කිරීම සහ ඔවුන්ගේ මුරපද මැකීම ආදී ක්‍රියාවලි සිදු කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_useCredentials" msgid="235481396163877642">"උපාංගයේ ඇති ගිණුම් භාවිතා කිරීම"</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"සත්‍යාපන ටෝකන ඉල්ලීම සඳහා යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"ජාල සම්බන්ධතාවයන් බැලීම"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"කුමන ජාල පවතින්නේ ද සහ සම්බන්ධිත ද ආදී ජාල සබඳතා ගැන තොරතුරු බැලීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"සම්පූර්ණ ජාල ප්‍රවේශය"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"උපකරණයට ජාල කෙවනියන් සැදීමට සහ ජාල ප්‍රොටෝකෝල අභිරුචි භාවිතා කිරීමට උපකරණයට ඉඩ දෙන්න. අන්තර්ජාලයට දත්ත යැවීමට විධියන් බ්‍රව්සරය සහ අනෙකුත් යෙදුම් සපයයි, එනිසා මෙම අවසරය දත්ත අන්තර්ජාලයට යැවීමට අවශ්‍ය නොවේ."</string>
+    <string name="permlab_writeApnSettings" msgid="505660159675751896">"ජාලයේ සැකසීම් සහ ගමනාගමන වෙනස් කරන්න/අල්ලා ගැනීම"</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"ඕනෑම APN එකක නියුතුව සහ තොට වෙනස් කිරීම වැනි ජාල සැකසීම් වෙනස් කිරීමට සහ සියලුම ජාල අතුරු ඇරීමට සහ සෝදිසි කිරීමට යෙදුමට අවසර දෙන්න. ඇතැම්විට ඔබගේ අනුදැනුමකින් තොරව අනිෂ්ට උපාංග ජාල පැකැට්ටු අධීක්ෂණය,ආපසු දිශාගත කිරීම හෝ වෙනස්කිරීම සිදු කිරීමට ඉඩ තිබේ."</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"ජාල සම්බන්ධතාව වෙනස් කිරීම"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"ජාල සම්බන්ධතාවයේ තත්වය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"ටෙදර් කරන ලද සම්බන්ධතා වෙනස් කිරීම"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"ටෙදර් කළ ජාල සම්බන්ධතාවයේ තත්වය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"පසුබිම් දත්ත භාවිත සැකසීම් වෙනස් කිරීම"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"පසුබිම් දත්ත භාවිතා සැකසීම වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"Wi-Fi සම්බන්ධතාවන් බැලීම"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Wi-Fi සබල බව සහ සම්බන්ධිත Wi-Fi උපාංග වල නම් ආදී Wi-Fi ජාලකරණයේ තොරතුරු බැලීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"Wi-Fi වලට සම්බන්ධ විම සහ විසන්ධි කිරීම"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Wi-Fi ප්‍රවේශ ස්ථානයන් වෙත සම්බන්ධ වීමට සහ විසන්ධි වීමට සහ, Wi-Fi ජාල සඳහා උපාංගයේ වින්‍යාසයට වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi බහුවිකාශන පිළිගැනීමට අවසර දෙන්න"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"ඔබගේ ටැබ්ලටයට පමණක් නොව Wi-Fi ජාලයේ ඇති සියලුම උපාංගවලට යැවූ පැකැට්ටු බහු විකාශ ලිපින භාවිතයෙන් ලබාගැනීමට යෙදුමට අවසර දෙන්න. non-multicast ආකාරයට වඩා වැඩි බලයක් මෙහිදී භාවිතා වේ."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"ඔබගේ දුරකථනයට පමණක් නොව Wi-Fi ජාලයේ ඇති සියලුම යෙදුම්වලට යැවූ පැකැට්ටු බහුවාහක ලිපින භාවිතයෙන් ලබාගැනීමට යෙදුමට අවසර ලැබේ. බහුවාහක නැති ආකාරයට වඩා වැඩි බලයක් මෙහිදී භාවිතා වේ."</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"බ්ලූටූත් සැකසීම් ප්‍රවේශය"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"ස්ථානීය බ්ලූටූත් ටැබ්ලට්යක් සැකසීමට සහ වින්‍යාස කිරීමට සහ දුරස්ථ උපාංග සමග යුගළ කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"දුරකථනයේ පෙදෙසි බ්ලූටූත් වින්‍යාස කිරීමට, සහ දුරස්ථ උපාංග ගවේෂණයට සහ යුගල වීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX වෙතට සම්බන්ධ කරන්න හෝ විසන්ධි කරන්න"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"WiMAX සබල බව සහ සම්බන්ධිත ඕනෑම WiMAX ජාලයක තොරතුරු නිශ්චය කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX තත්වය වෙනස් කරන්න"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"ටැබ්ලටය WiMAX ජාල වෙත සම්බන්ධ කිරීමට සහ විසන්ධි කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"WiMAX ජාලයන්ට දුරකථනය සම්බන්ධ කිරීමට සහ විසන්ධි කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"බ්ලූටූත් උපාංග සමඟ යුගල කිරීම"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ටැබ්ලටයේ බ්ලූටූත් වින්‍යාසය බැලිමට, සැකසීමට සහ යුගල කළ උපාංග සමඟ සම්බන්ධතාවන් පිළිගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"දුරකථනයේ බ්ලූටූත් වින්‍යාසය දැකීමට, යුගල උපාංග සමඟ සම්බන්ධතාවන් සැකසීමට සහ භාරගැනීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"ආසන්න ක්ෂේත්‍ර සන්නිවේදනය පාලනය කරන්න"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"ආසන්න ක්ෂේත්‍ර සන්නිවේදන (NFC) ටැග්, පත්, සහ කියවන්නන් සමඟ සන්නිවේදනය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"ඔබගේ තිරයේ අගුල අබල කරන්න"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"යතුරු අගුල සහ ඕනෑම සම්බන්ධිත මුරපද ආරක්ෂාවක් අබල කිරීමට යෙදුමට අවසර දෙන්න. මෙහි උදාහරණයක් වන්නේ පැමිණෙන ඇමතුමක් ලැබෙද්දී, දුරකථනය අක්‍රිය වන අතර ඇමතුම අවසාන වන විට යතුරු අගුල නැවත සක්‍රිය වෙයි."</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"සමමුහුර්ත සැකසීම් කියවන්න"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"ගිණුම සඳහා සමමුහුර්ත සැකසීම් කියවීමට යෙදුමට අවසර දෙන්න. උදාහරණයක් ලෙස, ගිණුමක් සමඟ පුද්ගල යෙදුම සමමුහුර්ත දැයි මෙයට හඳුනා ගත හැක."</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"සමමුහුර්ත කිරීම සක්‍රිය කරන්න සහ අක්‍රිය කරන්න"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"ගිණුම සඳහා සමමුහුර්ත සැකසීම් වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. උදාහරණයක් ලෙස, ගිණුම සමඟ පුද්ගල යෙදුම සමමුහුර්ත කිරීම සක්‍රිය කිරීමට භාවිත කල හැක."</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"සමමුහුර්ත කිරීමේ සංඛ්‍යාන කියවීම"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"සමමුහුර්ත කිරීමේ සිදුවීම් ඉතිහාසය සහ කෙතරම් දත්ත සමමුහුර්ත වී ඇතිදැයි ඇතුලත් ගිණුම සඳහා සමමුහුර්ත කිරීමේ සංඛ්‍යාන කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"දායක වූ සංග්‍රහ කියවීම"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"වර්තමාන සමමුහුර්ත සංග්‍රහ ගැන විස්තර ලැබීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"දායක වූ සංග්‍රහ ලිවීම"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"ඔබගේ වර්තමාන සමමුහුර්ත සංග්‍රහ වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ සමමුහුර්ත සංග්‍රහ අනිෂ්ට යෙදුම්වලින් වෙනස් කල හැක."</string>
+    <string name="permlab_readDictionary" msgid="4107101525746035718">"ඔබ විසින් ශබ්දකෝෂයට ඇතුළත්කොට ඇති කොන්දේසි කියවීම"</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"පරිශීලක ශබ්ද කෝෂයේ පරිශීලකයන් විසින් ගබඩා කර තිබිය හැකි වචන, නම්, වාක්‍යංශ කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_writeDictionary" msgid="2183110402314441106">"පරිශීලකයින් අර්ථ දැක්වූ ශබ්ද කෝෂයට වචන එකතු කිරීම"</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"පරිශීලක ශබ්දකෝෂය තුළට අලුත් වචන ලිවීමට යෙදුමට ඉඩ දෙන්න."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"ආරක්‍ෂිත ආචයනය වෙත ප්‍රවේශය පරීක්ෂා කිරීම"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"ආරක්‍ෂිත ආචයනය වෙත ප්‍රවේශය පරීක්ෂා කිරීම"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"අනාගත උපාංගවල ලබාගත හැකි USB ආචයනය සඳහා අවසරයක් පරීක්ෂා කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"අනාගත උපාංගවල පැවතෙන SD කාඩ් පත සඳහා අවසරයක් පිරික්සීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ඔබගේ USB ආචයනයේ අන්තර්ගත වෙනස් කිරීම හෝ මැකීම"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"ඔබගේ SD පතේ අන්තර්ගත වෙනස් කිරීම හෝ මැකීම"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"USB ආචයනය වෙත ලිවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"SD පත වෙත ලිවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"අභ්‍යන්තර මාධ්‍ය ආචයනය අන්තර්ගත වෙනස් කරන්න/ මකන්න"</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"අභ්‍යන්තර මාධ්‍ය ආචයනයේ අන්තර්ගතය වෙනස් කිරීමට උපාංගයට අවසර දෙන්න."</string>
+    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"ලේඛන ආචයනය කළමනාකරණය කරන්න"</string>
+    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"ලේඛන ආචයනය කළමනාකරණය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"සියලුම පරිශීලකයන්ගේ බාහිර ආචයන වෙත පිවිසෙන්න"</string>
+    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"සියලු පරිශීලකයන් සඳහා බාහිර ආචයනය වෙත පිවිසීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"හැඹිලි ගොනු පද්ධතියට ප්‍රවේශ වීම"</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"හැඹිලි ගොනු පද්ධති කියවීමට සහ ලිවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_use_sip" msgid="5986952362795870502">"අන්තර්ජාල ඇමතුම් ගන්න/ලබන්න"</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"අන්තර්ජාල ඇමතුම් ගැනීමට/ලැබීමට SIP සේවාව භාවිතයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"ඉතිහාසගත ජාල භාවිතය කියවන්න"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"විශේෂිත ජාල සහ යෙදුම් සඳහා ඉතිහාසගත ජාල භාවිතය කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"ජාල ප්‍රතිපත්තිය කළමනාකරණය කිරීම"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"ජාල කොන්දේසි සහ සඳහන් යෙදුම් විශේෂීත රීති කළමනාකරණය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"ජාල භාවිත ගිණුම් කිරීම වෙනස් කිරීම"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"යෙදුම්වලට ජාල භාවිතයෙන් වන බලපෑම කෙසේද යන්න වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"කෙවෙනි ලකුණු වෙනස් කරන්න"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"මාර්ගගත වීම සඳහා කෙවෙනියේ ලකුණු වෙනස් කිරීමට යෙදුමට ඉඩ දෙන්න"</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"ප්‍රවේශ දැනුම්දීම්"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"වෙනත් යෙදුම් විසින් කළ පල කිරීම්ද ඇතුළත්ව දැන්වීම් ලබා ගැනීමට, පරීක්ෂා කිරීමට සහ හිස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"දැනුම්දීම ඇහුම්කන් දීම් සේවාවක් වෙත බඳින්න"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"දැනුම්දීම් අසන්නාගේ සේවාවේ ඉහළ මට්ටමේ අතුරුමුහුණතට බැඳීමට දරන්නාට අවසර දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අවශ්‍ය නොවේ."</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"වාහකය සැපයු වින්‍යාසය යෙදුම ඉල්ලා සිටින්න"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"වාහකයා ලබාදුන් සැකසුම් යෙදුම් උත්පාදනයට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ජාල තත්ව මත නිරීක්ෂණ වෙත ඇහුම්කන් දීම"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"යෙදුමකට ජාල තත්ව මත නිරීක්ෂණ වෙත ඇහුම්කන් දීමට අවසර දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="permlab_hotwordRecognition" msgid="3225080408746361313">"අණවදන හඳුනාගැනීම ඉල්ලයි"</string>
+    <string name="permdesc_hotwordRecognition" msgid="3716741260195364252">"අණවදන හඳුනාගැනීම සඳහා ඉල්ලීමට යෙදුමට ඉඩ දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"මුරපද නීති සකස් කිරීම"</string>
+    <string name="policydesc_limitPassword" msgid="3252114203919510394">"තිරය අගුළු ඇරීමේ මුරපදයට අනුමත අකුරු සහ දිග පාලනය කරන්න."</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"තිරය අගුළු ඇරීමේ උත්සාහයන් නිරීක්ෂණය කරන්න"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"තිරය අගුළු හැරීමේදී වැරදියට ටයිප් කළ මුරපද ගණන නිරීක්ෂණය කරන්න සහ ටැබ්ලටය අගුළු දමන්න හෝ වැරදි මුරපද බොහෝ ගණනක් ටයිප් කර ඇති නම් ටැබ්ලටයේ සියලු දත්ත මකන්න."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"තිරය අගුළු හැරීමේදී වැරදියට ටයිප් කළ මුරපද ගණන නිරීක්ෂණය කරන්න සහ දුරකථනය අගුළු දමන්න හෝ වැරදි මුරපද බොහෝ ගණනක් ටයිප් කර ඇති නම් දුරකථනයේ සියලු දත්ත මකන්න."</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"තිරය අගුළු ඇරීමේ මුරපදය වෙනස් කිරීම"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"තිරය අගුළු ඇරීමේ මුරපදය වෙනස් කරන්න."</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"තිරය අගුළු දැමීම"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"තිරයට අගුළු වැටීම සිදුවන්නේ කෙසේද සහ කවදාද යන්න පාලනය කරන්න."</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"සියලු දත්ත මකන්න"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"කර්මාන්ත ශාලා දත්ත යළි පිහිටුවීමෙන් පසුව අනතුරු ඇඟවිමකින් තොරවම ටැබ්ලට් දත්ත මකා දමයි."</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"කර්මාන්ත ශාලා දත්ත යළි පිහිටුවීමෙන් පසුව අනතුරු ඇඟවිමකින් තොරවම දුරකථන දත්ත මකා දමයි."</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"උපාංග ගෝලීය නියුතුව සකස් කිරීම"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"කොන්දේසි සක්‍රිය විට පොදු නියුතු එකක් භාවිත කරන ලෙස උපාංගය සකසන්න. පළමු උපාංග පරිපාලකයා පමණක් ඵලදායි පොදු නියුතුව සකසයි."</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"තිරය අගුළු දැමීමේ මුරපදය කල් ඉකුත්වීම සකසන්න"</string>
+    <string name="policydesc_expirePassword" msgid="1729725226314691591">"තිර-අගුළේ මුරපදය වෙනස්වීම කොපමණ කාල පරාසයකින් සිදුවිය යුතුද යන්න පාලනය කිරීම."</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"ආචයනයේ සංකේතනය සකස් කිරීම"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"ආචයනය කළ යෙදුම් දත්ත සංකේතනය කිරීමට අවශ්‍යය."</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"කැමරා අබල කිරීම"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"සියලු උපාංග කැමරාවල භාවිතය වලක්වන්න."</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"යතුරු ආරක්ෂාවේ විශේෂාංග අබල කරන්න"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"යතුරු ආරක්ෂාව හි සමහර විශේෂාංග භාවිතය වළක්වයි."</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"නිවස"</item>
+    <item msgid="869923650527136615">"ජංගම"</item>
+    <item msgid="7897544654242874543">"කාර්යාලය"</item>
+    <item msgid="1103601433382158155">"කාර්යාල ෆැක්ස්"</item>
+    <item msgid="1735177144948329370">"නිවසේ ෆැක්ස්"</item>
+    <item msgid="603878674477207394">"පේජරය"</item>
+    <item msgid="1650824275177931637">"වෙනත්"</item>
+    <item msgid="9192514806975898961">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"මුල් පිටුව"</item>
+    <item msgid="7084237356602625604">"කාර්යාලය"</item>
+    <item msgid="1112044410659011023">"වෙනත්"</item>
+    <item msgid="2374913952870110618">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"නිවස"</item>
+    <item msgid="5629153956045109251">"කාර්යාලය"</item>
+    <item msgid="4966604264500343469">"වෙනත්"</item>
+    <item msgid="4932682847595299369">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"නිවස"</item>
+    <item msgid="1359644565647383708">"කාර්යාලය"</item>
+    <item msgid="7868549401053615677">"වෙනත්"</item>
+    <item msgid="3145118944639869809">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"කාර්යාලය"</item>
+    <item msgid="4378074129049520373">"වෙනත්"</item>
+    <item msgid="3455047468583965104">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"අභිරුචි"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"නිවස"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"ජංගම"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"කාර්යාලය"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"කාර්යාල ෆැක්ස්"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"නිවසේ ෆැක්ස්"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"පේජරය"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"වෙනත්"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"යළි ඇමතීම"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"මෝටර් රථය"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"ආයතනයේ මූලිකය"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"මූලික"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"වෙනත් ෆැක්ස්"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"රේඩියෝව"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"ටෙලෙක්ස්"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"කාර්යාල ජංගම"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"කාර්යාල පේජරය"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"සහායක"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"අභිරුචි"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"උපන්දිනය"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"සංවත්සරය"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"වෙනත්"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"අභිරුචි"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"නිවස"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"කාර්යාලය"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"වෙනත්"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"ජංගම"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"අභිරුචි"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"නිවස"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"කාර්යාලය"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"වෙනත්"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"අභිරුචි"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"මුල් පිටුව"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"කාර්යාලය"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"වෙනත්"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"අභිරුචි"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"කාර්යාලය"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"වෙනත්"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"අභිරුචි"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"අභිරුචි"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"සහායක"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"සහෝදරයා"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"දරුවා"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"දේශීය හවුල්කරුවා"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"පියා"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"මිත්‍රයා"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"කළමනාකරු"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"මව"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"මව්පිය"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"හවුල්කරුවා"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"යොමුකරන ලද්දේ"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"නෑයා"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"සහෝදරිය"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"භාර්යාව හෝ ස්වාමිපුරුෂයා"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"අභිරුචි"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"නිවස"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"කාර්යාලය"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"වෙනත්"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK සහ නව PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK කේතය"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"නව PIN කේතය"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"මුරපදය ටයිප් කිරීමට ස්පර්ශ කරන්න"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"අගුළු ඇරීමට මුරපදය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"අගුළු හැරීමට PIN එක ටයිප් කරන්න"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"වැරදි PIN කේතයකි."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"අගුළු ඇරීමට, මෙනුව ඔබා පසුව 0 ද ඔබන්න."</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"හදිසි ඇමතුම් අංකය"</string>
+    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"සේවාව නැත."</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"තිරය අගුළු දමා ඇත."</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"අගුළු හැරීමට මෙනුව ඔබන්න හෝ හදිසි ඇමතුම ලබාගන්න."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"අගුළු හැරීමට මෙනු ඔබන්න."</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"අගුළු ඇරීමට රටාව අඳින්න"</string>
+    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"හදිසි ඇමතුම්"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"ඇමතුම වෙත නැවත යන්න"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"නිවැරදියි!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"නැවත උත්සාහ කරන්න"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"නැවත උත්සාහ කරන්න"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"මුහුණ භාවිතයෙන් අඟුළු හැරීමේ උපරිම ප්‍රයන්තයන් ගණන ඉක්මවා ඇත"</string>
+    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"ආරෝපණය වෙමින්, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_charged" msgid="321635745684060624">"අරෝපිතයි"</string>
+    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_low_battery" msgid="1482873981919249740">"ඔබගේ ආරෝපකයට සම්බන්ධ කරන්න."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM පත නැත"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"ටැබ්ලටයේ SIM පත නොමැත."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"දුරකථනය තුළ SIM පත නැත."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM පතක් ඇතුල් කරන්න."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM පත නොමැත හෝ කියවිය නොහැක. SIM පතක් ඇතුලත් කරන්න."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"භාවිතා කළ නොහැකි SIM පත."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"ඔබගේ SIM පත ස්ථිරව අබල කර තිබේ.\n වෙනත් SIM පතක් සඳහා ඔබගේ සේවාදායකයා සම්බන්ධ කරගන්න."</string>
+    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"පෙර ගීත බොත්තම"</string>
+    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ඊළඟ ගීත බොත්තම"</string>
+    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"විරාම බොත්තම"</string>
+    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"ධාවක බොත්තම"</string>
+    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"නැවතීමේ බොත්තම"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"හදිසි ඇමතුම් පමණි"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"ජාලය අගුළු දමා ඇත"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM පත PUK අගුළු දමා ඇත."</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"පරිශීලක උපදේශය බලන්න හෝ පරිභෝගික සේවාව අමතන්න."</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM පත අගුළු දමා ඇත."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM පත අගුළු අරිමින්..."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"ඔබ <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් අගුළු ඇරීමේ රටාව වැරදියට ඇඳ ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"ඔබ මුරපදය වාර <xliff:g id="NUMBER_0">%d</xliff:g> ක් වැරදියට ටයිප්කොට ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> කින් නැවත උත්සහ කරන්න."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"ඔබ PIN අංකය <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් වැරදියට ටයිප් කොට ඇත.\n\n තත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ Google පුරනය වීම් භාවිතයෙන් ඔබගේ ටැබ්ලටය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ Google පුරනය වීම භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසනු ඇත.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"ඔබ ටැබ්ලටය අගුළු හැරීමට වැරදියට අවස්ථා <xliff:g id="NUMBER_0">%d</xliff:g> ක් උත්සාහ කර ඇත. අවස්ථා <xliff:g id="NUMBER_1">%d</xliff:g> ක් අසාර්ථකව උත්සහ කිරීමකින් පසුව, ටැබ්ලටය කර්මාන්ත ශාලා මුල් තත්වයට නැවත පත් වන අතර සියලු පරිශීලක දත්ත නැති වෙයි."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER_0">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. තවත් අසාර්ථක ප්‍රයත්න <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, දුරකථනය කර්මාන්තශාලාවේ පෙරනිමියට යළි පිහිටුවන අතර සියලුම පරිශීලක දත්ත නැති වී යයි."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"ටැබ්ලටයේ අගුළු ඇරීමට ඔබ වැරදි ප්‍රයත්න <xliff:g id="NUMBER">%d</xliff:g> වාරයක් ගෙන ඇත. දැන් ටැබ්ලටය කර්මාන්තශාලා සුපුරුද්ද වෙත යළි පිහිටුවීම කෙරේ."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. දැන් දුරකථනය කර්මාන්තශාලා පෙරනිමියට පිහිටුවනු ලබයි."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"තත්පර <xliff:g id="NUMBER">%d</xliff:g> කින් නැවත උත්සාහ කරන්න."</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"රටාව අමතකද?"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"ගිණුමේ අගුළු අරින්න"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"රටා උත්සාහ කිරීම් වැඩිය"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"අගුළු හැරීමට, ඔබගේ Google ගිණුම සමග පුරනය වන්න."</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"පරිශීලක නාමය (ඊ-තැපෑල)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"මුරපදය"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"පුරනය වෙන්න"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"වලංගු නොවන පරිශීලක නාමයක් හෝ මුරපදයක්."</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"ඔබගේ පරිශීලක නාමය හෝ මුරපදය අමතකද?\n "<b>"google.com/accounts/recovery"</b>" වෙත යන්න."</string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"පරික්ෂා කරමින්..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"අඟුල අරින්න"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"ශබ්දය සක්‍රීය කරන්න"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"ශ්‍රව්‍ය අක්‍රිය කරන්න"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"රටාව අරඹන ලදි"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"රටාව හිස් කරන ලදි"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"කොටුවක් එකතු කරන ලදි"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"රටාව සම්පූර්ණයි"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for keyguard_accessibility_widget_changed (5678624624681400191) -->
+    <skip />
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"විජටය එකතු කරන්න."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"හිස්"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"අගුළු අරින ප්‍රදේශය විදහා ඇත."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"අගුළු අරින ප්‍රදේශය හැකිලී ඇත."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජට්."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"පරිශීලක තෝරන්නා"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"තත්වය"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"කැමරාව"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"මාධ්‍ය පාලක"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"විජටය නැවත අනුපිළිවෙළට සැකසිම ඇරඹුණි."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"විජට් නැවත අනුපිළිවෙලට සැකසීම අවසානය."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජටය මැකී ඇත."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"අගුළු නොදැමූ ප්‍රදේශය පුළුල් කරන්න."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"සර්පණ අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"රටා අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"මුහුණ භාවිතයෙන් අඟුළු හැරීම."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"මුරපද අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"රටා ප්‍රදේශය."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"සර්පණ ප්‍රදේශය."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"අක්ෂරය"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"වචනය"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"සබැඳිය"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"රේඛාව"</string>
+    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"කර්මාන්ත ශාලා පරීක්ෂණය අසාර්ථකයි"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"FACTORY_TEST ක්‍රියාව /system/app හි ස්ථාපිත පැකේජ සඳහා පමණක් සහය දක්වයි."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"FACTORY_TEST ක්‍රියාව ලබාදෙන පැකේජයක් සොයාගත නොහැකි විය."</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"පුනරාරම්භ කරන්න"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"\"<xliff:g id="TITLE">%s</xliff:g>\" හි ඇති පිටුව කියන්නේ:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"ජාවාස්ක්‍රිප්ට්"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"සංචලනය තහවුරු කරන්න"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"මෙම පිටුවෙන් ඉවත් වන්න"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"මෙම පිටුවෙහි ඉන්න"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nඔබට මෙම පිටුවෙන් සංචලනය කිරීමට අවශ්‍ය බවට ඔබට විශ්වාසද?"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"තහවුරු කරන්න"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"උපදෙස: විශාලනය කිරීමට සහ කුඩා කිරීමට දෙවරක් තට්ටු කරන්න."</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"ස්වයංක්‍රිය පිරවුම"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"ස්වයංක්‍රිය පිරවුම සකසන්න"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"පළාත"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"තැපැල් කේතය"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"ජනපදය"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"ZIP කේතය"</string>
+    <string name="autofill_county" msgid="237073771020362891">"ප්‍රාන්තය"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"දූපත"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"දිස්ත්‍රික්කය"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"දෙපාර්තමේන්තුව"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"ප්‍රාන්තය"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"කෝරලය"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"ප්‍රදේශය"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"එමිරේට්"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"ඔබගේ වෙබ් පිටුසන් සහ ඉතිහාසය කියවීම"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"බ්‍රව්සරය නැරඹූ සියලු URL සහ සියලු බ්‍රව්සර පිටුසන් වල ඉතිහාසය කියවීමට යෙදුමට අවසර දෙන්න. සටහන: වෙබ් බ්‍රව්සර අවශ්‍යතා සමග තෙවෙනි පාර්ශව බ්‍රව්සර වලට හෝ වෙනත් යෙදුම්වලට මෙම අවසරය බල නොදෙයි."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"වෙබ් පිටුසන් සහ ඉතිහාසයට ලිවිම"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"ඔබගේ ටැබ්ලටයේ ගබඩා කර ඇති බ්‍රව්සරයේ ඉතිහාසය හෝ පිටුසන් වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. බ්‍රව්සර දත්ත මැකීමට හෝ වෙනස් කිරීමට මෙමඟින් යෙදුමට අවසර දෙයි. සටහන: වෙබ් ගවේෂණ හැකියාව සහිත තෙවෙනි පාර්ශව බ්‍රව්සර හෝ වෙනත් යෙදුම් වලින් මෙම අවසරයට බල නොකරයි."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"ඔබගේ දුරකථනයේ ආචයනය කරන ලද බ්‍රව්සර ඉතිහාසය හෝ පිටුසන වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ බ්‍රව්සර දත්ත මැකීමට හෝ වෙනස් කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කරයි. සටහන: වෙබ් බ්‍රව්සර අවශ්‍යතාවය සමග තෙවෙනි පාර්ශව බ්‍රව්සර හෝ වෙනත් යෙදුම් විසින් මෙම අවසරය බල ගැන්විය හැක."</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"සීනුවක් සැකසීම"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"ස්ථාපනය කරන ලද සීනු ඔරලෝසු යෙදුමේ සීනුව සකස් කරන්නට යෙදුමට ඉඩ දෙන්න. ඇතැම් සීනු ඔරලෝසු යෙදුම් මෙම අංගය ක්‍රියාවට නංවා නොතිබීමට ඉඩ තිබේ."</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"හඬ තැපෑල එක් කිරීම"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"ඔබගේ හඬ තැපෑලේ එන ලිපි වෙත එන පණිවිඩ එකතු කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"බ්‍රව්සරයේ භූ අවසර වෙනස් කිරීම"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"බ්‍රවුසරයේ භූ ස්ථානීය අවසර වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. අභිමත වෙබ් අඩවි වලට ස්ථානීය තොරතුරු යැවීමට අනිෂ්ට යෙදුම් මෙය භාවිතා කෙරේ."</string>
+    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"පැකේජ සත්‍යාපනය කරන්න"</string>
+    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"ස්ථාපිත කොට ඇති පැකේජයක් සත්‍යාපනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"පැකේජ සත්‍යාපකයක් වෙත බඳින්න"</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"පැකේජ සත්‍යාපක ඉල්ලීම් වලට දරන්නාට ඉඩ ලබා දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අවශ්‍ය නොවේ."</string>
+    <string name="permlab_serialPort" msgid="546083327654631076">"ශ්‍රේණිගත පොට ප්‍රවේශ කිරීම"</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"SerialManager API භාවිතයෙන් අනුක්‍රම තොට වෙත ප්‍රවේශ වීමට රඳවනයට අවසර දෙන්න."</string>
+    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"බාහිර අන්තර්ගත සැපයුම්කරුවන් වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"අන්තර්ගත සපයන්නන්ට ප්‍රවේශ වීමට දරන්නන්ට ෂෙල් එකේ සිට ප්‍රවේශ වීමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අදාළ නොවේ."</string>
+    <string name="permlab_updateLock" msgid="3527558366616680889">"ස්වයංක්‍රීය උපාංග යවත්කාල කිරීම් පසුබට කරන්න"</string>
+    <string name="permdesc_updateLock" msgid="1655625832166778492">"උපාංගය උත්ශ්‍රේණිකරණයට අන්තර්ක්‍රියාකාරී නොවන යළි ඇරඹීමක් සඳහා සුදුසු වෙලාව කුමක්ද යන්න ගැන පද්ධතියට තොරතුරු ලබාදීමට දරන්නාට අවසර දෙන්න."</string>
+    <string name="save_password_message" msgid="767344687139195790">"බ්‍රව්සරයට මෙම මුරපදය මතක තබා ගැනීමට ඔබට අවශ්‍යද?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"දැන් නොවේ"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"මතක තබා ගන්න"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"කවදාවත් නොවේ"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"මෙම පිටුව විවෘත කිරීමට ඔබට අවසර නැත."</string>
+    <string name="text_copied" msgid="4985729524670131385">"පෙළ පසුරු පුවරුවට පිටපත් කරන ලදි."</string>
+    <string name="more_item_label" msgid="4650918923083320495">"තව"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"මෙනුව+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"space"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ඇතුල් කරන්න"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"මකන්න"</string>
+    <string name="search_go" msgid="8298016669822141719">"සෙවීම"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"සෙවීම"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"සෙවුම් විමසුම"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"විමසුම හිස් කරන්න"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"විමසුම යොමු කරන්න"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"හඬ සෙවීම"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"ස්පර්ශ කිරීමෙන් ගවේෂණය සබල කරන්න ද?"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය කිරීමට <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ට අවශ්‍යය. ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය විට, ඔබගේ ඇඟිලිවලට පහළ විස්තර ඇසිය හෝ බැලිය හැක හෝ ටැබ්ලටය සමග අන්තර් ක්‍රියාකාරී වීමට ඉංගිති සිදු කළ හැක."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය කිරීමට <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ට අවශ්‍යයි. ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය විට, ඔබගේ ඇඟිලිවලට පහළ විස්තර ඇසිය හෝ බැලිය හැක හෝ දුරකථනය සමග අන්තර් ක්‍රියාකාරී වීමට ඉංගිති සිදු කළ හැක."</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"මාස 1 කට පෙර"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"මාස 1 කට පෙර"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"තත්පර 1 කට පෙර"</item>
+    <item quantity="other" msgid="3903706804349556379">"තත්පර <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"මිනිත්තු 1 ට පෙර"</item>
+    <item quantity="other" msgid="2176942008915455116">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"පැය 1 කට පෙර"</item>
+    <item quantity="other" msgid="2467273239587587569">"පැය <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"අන්තිම දවස් <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"අවසාන මාසය"</string>
+    <string name="older" msgid="5211975022815554840">"පරණ"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"ඊයේ"</item>
+    <item quantity="other" msgid="2479586466153314633">"දින <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"තත්පර 1 කින්"</item>
+    <item quantity="other" msgid="1241926116443974687">"තත්පර <xliff:g id="COUNT">%d</xliff:g> කදී"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"මිනිත්තු 1 කදී"</item>
+    <item quantity="other" msgid="3330713936399448749">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"පැය 1 ක් තුළ"</item>
+    <item quantity="other" msgid="547290677353727389">"පැය <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"හෙට"</item>
+    <item quantity="other" msgid="5109449375100953247">"දින <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"තත්පර 1 කට පෙර"</item>
+    <item quantity="other" msgid="3699169366650930415">"තත්පර <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"මිනිත්තු 1 කට පෙර"</item>
+    <item quantity="other" msgid="851164968597150710">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"පැය 1 කට පෙර"</item>
+    <item quantity="other" msgid="6889970745748538901">"පැය <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"ඊයේ"</item>
+    <item quantity="other" msgid="3453342639616481191">"දින <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"තත්පර 1 ක් තුළ"</item>
+    <item quantity="other" msgid="5495880108825805108">"තත්පර <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"මිනිත්තු 1 ක් තුළ"</item>
+    <item quantity="other" msgid="4216113292706568726">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"පැය 1 ක් තුළ"</item>
+    <item quantity="other" msgid="3705373766798013406">"පැය <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"හෙට"</item>
+    <item quantity="other" msgid="2973062968038355991">"දින <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"<xliff:g id="DATE">%s</xliff:g> වන දා"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"<xliff:g id="TIME">%s</xliff:g> ට"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"<xliff:g id="YEAR">%s</xliff:g> තුළ"</string>
+    <string name="day" msgid="8144195776058119424">"දවස"</string>
+    <string name="days" msgid="4774547661021344602">"දින"</string>
+    <string name="hour" msgid="2126771916426189481">"පැය"</string>
+    <string name="hours" msgid="894424005266852993">"පැය"</string>
+    <string name="minute" msgid="9148878657703769868">"min"</string>
+    <string name="minutes" msgid="5646001005827034509">"මිනිත්තු"</string>
+    <string name="second" msgid="3184235808021478">"තත්"</string>
+    <string name="seconds" msgid="3161515347216589235">"තත්පර"</string>
+    <string name="week" msgid="5617961537173061583">"සතිය"</string>
+    <string name="weeks" msgid="6509623834583944518">"සති"</string>
+    <string name="year" msgid="4001118221013892076">"අවුරුද්ද"</string>
+    <string name="years" msgid="6881577717993213522">"අවුරුදු"</string>
+  <plurals name="duration_seconds">
+    <item quantity="one" msgid="6962015528372969481">"තත්පර 1"</item>
+    <item quantity="other" msgid="1886107766577166786">"තත්පර <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="duration_minutes">
+    <item quantity="one" msgid="4915414002546085617">"මිනිත්තු 1"</item>
+    <item quantity="other" msgid="3165187169224908775">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="duration_hours">
+    <item quantity="one" msgid="8917467491248809972">"පැය 1"</item>
+    <item quantity="other" msgid="3863962854246773930">"පැය <xliff:g id="COUNT">%d</xliff:g> ක්"</item>
+  </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"වීඩියෝ ගැටලුව"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"මේ වීඩියෝව මෙම උපාංගයට ප්‍රවාහනය සඳහා වලංගු නැත."</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"මෙම වීඩියෝව ධාවනය කළ නොහැක."</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"හරි"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"මධ්‍යහනය"</string>
+    <string name="Noon" msgid="3342127745230013127">"මධ්‍යාහනය"</string>
+    <string name="midnight" msgid="7166259508850457595">"මධ්‍යම රාත්‍රිය"</string>
+    <string name="Midnight" msgid="5630806906897892201">"මධ්‍යම රාත්‍රිය"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"සියල්ල තෝරන්න"</string>
+    <string name="cut" msgid="3092569408438626261">"කපන්න"</string>
+    <string name="copy" msgid="2681946229533511987">"පිටපත් කරන්න"</string>
+    <string name="paste" msgid="5629880836805036433">"අලවන්න"</string>
+    <string name="replace" msgid="5781686059063148930">"ප්‍රතිස්ථාපනය කරන්න..."</string>
+    <string name="delete" msgid="6098684844021697789">"මකන්න"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"URL පිටපත් කරන්න"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"පෙළ තෝරන්න"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"පෙළ තේරීම"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"ශබ්ද කෝෂයට එකතු කරන්න"</string>
+    <string name="deleteText" msgid="6979668428458199034">"මකන්න"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"ආදාන ක්‍රමය"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"පෙළ ක්‍රියාවන්"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"ආචයනය ඉඩ ප්‍රමාණය අඩු වී ඇත"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"සමහර පද්ධති කාර්යයන් ක්‍රියා නොකරනු ඇත"</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> ධාවනය වේ"</string>
+    <string name="app_running_notification_text" msgid="4653586947747330058">"වැඩිපුර තොරතුරු හෝ යෙදුම නැවතීම සඳහා ස්පර්ශ කරන්න."</string>
+    <string name="ok" msgid="5970060430562524910">"හරි"</string>
+    <string name="cancel" msgid="6442560571259935130">"අවලංගු කරන්න"</string>
+    <string name="yes" msgid="5362982303337969312">"හරි"</string>
+    <string name="no" msgid="5141531044935541497">"අවලංගු කරන්න"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"අවධානය"</string>
+    <string name="loading" msgid="7933681260296021180">"පූරණය වෙමින්..."</string>
+    <string name="capital_on" msgid="1544682755514494298">"සක්‍රීයයි"</string>
+    <string name="capital_off" msgid="6815870386972805832">"අක්‍රිය කරන්න"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"පහත භාවිතයෙන් ක්‍රියාව සම්පූර්ණ කරන්න"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"මෙම ක්‍රියාව සඳහා සුපුරුද්දෙන් භාවිත කරන්න."</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"පද්ධති සැකසීම් &gt; යෙදුම් &gt; බාගැනීම් තුළ ඇති සුපුරුද්ද හිස් කරන්න."</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"ක්‍රියාවක් තෝරන්න"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB උපාංගය සඳහා යෙදුමක් තෝරන්න"</string>
+    <string name="noApplications" msgid="2991814273936504689">"මෙම ක්‍රියාව සිදු කිරීමට කිසිදු යෙදුමකට නොහැකිය."</string>
+    <string name="aerr_title" msgid="1905800560317137752"></string>
+    <string name="aerr_application" msgid="932628488013092776">"අවාසනාවන්ත ලෙස <xliff:g id="APPLICATION">%1$s</xliff:g> නැවතී ඇත."</string>
+    <string name="aerr_process" msgid="4507058997035697579">"අවාසනාවන්ත ලෙස, <xliff:g id="PROCESS">%1$s</xliff:g> ක්‍රියාවලිය නතර විණි."</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> ප්‍රතිචාර නොදක්වයි.\n\nඔබට එය නතර කිරීමට අවශ්‍යද?"</string>
+    <string name="anr_activity_process" msgid="5776209883299089767">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ක්‍රියාකාරකම ප්‍රතිචාර නොදක්වයි.\n\nඑය වසා දැමීමට ඔබට අවශ්‍යද?"</string>
+    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> ප්‍රතිචාර නොදක්වයි. එය වසා දැමීමට ඔබට අවශ්‍යද?"</string>
+    <string name="anr_process" msgid="6513209874880517125">"<xliff:g id="PROCESS">%1$s</xliff:g> ක්‍රියාවලිය ප්‍රතිචාර නොදක්වයි.\n\nඔබට එය නතර කිරීමට අවශ්‍යද?"</string>
+    <string name="force_close" msgid="8346072094521265605">"හරි"</string>
+    <string name="report" msgid="4060218260984795706">"වාර්තාව"</string>
+    <string name="wait" msgid="7147118217226317732">"රැඳී සිටින්න"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"පිටුව ප්‍රතිචාර නොදක්වන තත්වයට පත්වී ඇත.\n\nඔබට එය වැසීමට අවශ්‍යද?"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"යෙදුම නැවත හරවා යවා ඇත"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> දැන් ධාවනය වෙයි."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> මුලින්ම අරඹා ඇත."</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"පරිමාණය"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"සැමවිටම පෙන්වන්න"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"පද්ධති සැකසීම් තුළ මෙය නැවත ක්‍රියාත්මක කරන්න &gt; යෙදුම් &gt; බාගන්නා ලදි."</string>
+    <string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> යෙදුම (<xliff:g id="PROCESS">%2$s</xliff:g> ක්‍රියාවලිය) එහි StrictMode කොන්දේසිය උල්ලංඝනය කර ඇත."</string>
+    <string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> ක්‍රියාවලිය එහි StrictMode කොන්දේසිය උල්ලංඝනය කර ඇත."</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"Android උත්ශ්‍රේණි වෙමින් පවතී..."</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> කින් <xliff:g id="NUMBER_0">%1$d</xliff:g> වැනි යෙදුමප්‍ රශස්ත කරමින්."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"යෙදුම් ආරම්භ කරමින්."</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"ඇරඹුම අවසාන කරමින්."</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> ධාවනය වෙමින්"</string>
+    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"යෙදුමට මාරු වීමට ස්පර්ශ කරන්න"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"යෙදුම් මාරු වනවාද?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"අලුත් යෙදුමක් ආරම්භ කිරීමට පෙර තවමත් ක්‍රියාවෙහි යෙදෙමින් පවතින යෙදුම නැවැත්විය යුතුයි."</string>
+    <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> වෙත ආපසු යන්න"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"නව යෙදුම ආරම්භ නොකරන්න."</string>
+    <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> අරඹන්න"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"සුරැකීමකින් තොරව පරණ යෙදුම නවත්වන්න."</string>
+    <string name="sendText" msgid="5209874571959469142">"පෙළ සඳහා ක්‍රියාව තෝරන්න"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"හඬ නඟනයේ ශබ්දය"</string>
+    <string name="volume_music" msgid="5421651157138628171">"මාධ්‍ය ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"බ්ලූටූත් හරහා ධාවනය වෙයි"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"නිහඬ රිගින් ටෝනයක් සකසන්න"</string>
+    <string name="volume_call" msgid="3941680041282788711">"ඇමතුම-තුළ ශබ්ද ත්‍රීවතාව"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"බ්ලූටූත් ඇමතුම-තුළ ශබ්ද ත්‍රීවතාවය"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"සීනුවේ ශබ්දය"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"දැනුම්දීමේ ශබ්දය"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"බ්ලූටූත් ශබ්ද ත්‍රීවතාව"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"රින්ටෝනයේ ශබ්දය"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"ඇමතුම් ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"මාධ්‍ය ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"දැනුම්දීමේ ශබ්ද ත්‍රීවතාව"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"සුපුරුදු රින්ටෝනය සකසන්න"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"සුපුරුදු රින්ටෝනය (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"කිසිවක් නැත"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"රිගින්ටෝන"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"නොදන්නා රින්ටෝනය"</string>
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Wi-Fi ජාලයක් තිබේ"</item>
+    <item quantity="other" msgid="4192424489168397386">"Wi-Fi ජාල ඇත"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"විවෘත Wi-Fi ජාලය ලබාගත හැක"</item>
+    <item quantity="other" msgid="7915895323644292768">"විවෘත Wi-Fi ජාල තිබේ"</item>
+  </plurals>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"Wi-Fi ජලයට පුරනය වන්න"</string>
+    <string name="network_available_sign_in" msgid="8495155593358054676">"ජාලයට පුරනය වන්න"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi වෙත සම්බන්ධ විය නොහැක"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" දුබල අන්තර්ජාල සම්බන්ධතාවයක් ඇත."</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"ඍජු Wi-Fi"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"ඍජු Wi-Fi ආරම්භ කරන්න. මෙය Wi-Fi සේවාදායක/හොට්ස්පොට් එක අක්‍රිය කරනු ඇත."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"ඍජු Wi-Fi ආරම්භ කළ නොහැක."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi ඍජු සම්බන්ධතාව සක්‍රියයි"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"සැකසීම් සඳහා ස්පර්ශ කරන්න"</string>
+    <string name="accept" msgid="1645267259272829559">"පිළිගන්න"</string>
+    <string name="decline" msgid="2112225451706137894">"ප්‍රතික්ෂේප කරන්න"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"ආරාධනාව යවන ලදි"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"සම්බන්ධතාවයට ඇරයුමකි"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"වෙතින්:"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"වෙත:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"අවශ්‍ය PIN එක ටයිප් කරන්න:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"ටැබ්ලටය <xliff:g id="DEVICE_NAME">%1$s</xliff:g> වෙත සම්බන්ධ වන අතරතුර එය Wi-Fi වලින් තාවකාලිකව විසන්ධි කෙරේ."</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"දුරකථනය <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ට සම්බන්ධ වී පවතින විට Wi-Fi වලින් එය තාවකාලිකව විසන්ධි වෙයි."</string>
+    <string name="select_character" msgid="3365550120617701745">"අකුර ඇතුළත් කරන්න"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"SMS පණිවිඩ යවමින්"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; SMS පණිවිඩ විශාල ගණනක් යවයි. මෙම යෙදුමට පණිවිඩ යැවීම නොනැවතී කරගෙන යාමට අවසර දීමට ඔබට අවශ්‍යද?"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"අවසර දෙන්න"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"ප්‍රතික්ෂේප කරන්න"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;b&gt; වෙත කෙටි පණිවීඩයක් යැවීමට &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;b&gt; කැමතිය."</string>
+    <!-- syntax error in translation for sms_short_code_details (3492025719868078457) org.xmlpull.v1.XmlPullParserException: expected: /string read: font (position:END_TAG </font>@1:83 in     <string name="sms_short_code_details" msgid="3492025719868078457">"මෙය "</font>"ඔබගේ ජංගම ගිණුමේ"<font fgcolor="#ffffb060">" අය වීම් වලට හේතුවක් වේ."</string>
+)  -->
+    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"මෙය ඔබගේ ජංගම ගිණුමෙන් අයවීමට හේතු වේ."</font></string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"යවන්න"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"අවලංගු කරන්න"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"මගේ තේරීම මතක තබාගන්න"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"ඔබට මෙය සැකසීම් තුළ වෙනස්කර ගැනීම පසුව කළ හැක &gt; යෙදුම්"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"සැමවිටම ඉඩ දෙන්න"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"කිසිදා අවසර නොදෙන්න"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM පත ඉවත් කරන ලදි"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"ඔබ ඇතුළත් කරන ලද වලංගු SIM පත සමඟ නැවත ඇරඹීම කරන තුරු ජංගම ජාලය නොතිබේ."</string>
+    <string name="sim_done_button" msgid="827949989369963775">"හරි"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SIM පතක් එකතු කරන ලදි"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"ජංගම ජාලයට ප්‍රවේශ වීමට ඔබගේ උපාංගය නැවත අරඹන්න."</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"යළි අරඹන්න"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"වේලාව සකසන්න"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"දිනය සැකසීම"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"සකසන්න"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"හරි"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"අලුත්: "</font></string>
+    <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> විසින් සපයන ලදි."</string>
+    <string name="no_permissions" msgid="7283357728219338112">"අවසර අවශ්‍ය නොමැත"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"මෙමඟින් ඔබට මුදල් වැය විය හැක"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB මහා ආචයනය"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"USB සම්බන්ධිතයි"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"ඔබ ඔබගේ පරිගණකයට සම්බන්ධ වී ඇත්තේ USB ස්පර්ශය හරහාය. ඔබට ඔබේ පරිගණකය හා ඔබගේ Android USB ආචයනය අතර ගොනු පිටපත් කිරීමට අවශ්‍ය නම් පහත බොත්තම ඔබන්න."</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"ඔබ ඔබගේ පරිගණකයට USB හරහා සම්බන්ධ වී ඇත. ඔබට ඔබේ පරිගණකය හා ඔබගේ Android SD පත අතර ගොනු පිටපත් කිරීමට අවශ්‍ය නම් පහත බොත්තම ස්පර්ශ කරන්න."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"USB ආචයනය සක්‍රිය කරන්න"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"USB මහා ආචයනය සඳහා ඔබගේ USB ආචයනය භාවිතයේදී ගැටළුවක් තිබේ."</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"USB මහා ආචයනය සඳහා ඔබගේ SD පත භාවිතයේදී ගැටළුවක් තිබේ."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB සම්බන්ධිතයි"</string>
+    <string name="usb_storage_notification_message" msgid="939822783828183763">"ඔබගේ පරිගණකය වෙතට/වෙතින් ගොනු පිටපත් කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB ආචයනය අක්‍රිය කරන්න"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB ආචයනය අක්‍රිය කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB ආචයනය භාවිතයේ පවතී"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB ආචයනය අක්‍රිය කිරීමට පෙර, ඔබගේ පරිගණකයෙන් Android USB ආචයනය ගලවා දමන්න (\"පිට කරන්න\")."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"USB ආචයනය අක්‍රිය කිරීමට පෙර, ඔබගේ Android SD පත පරිගණකයෙන් ගලවන්න."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB ආචයනය අක්‍රිය කරන්න"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"USB ආචයනය අක්‍රිය කිරීමේදී ගැටළුවක් ඇතිවිය. USB සංග්‍රාහකය ගලවා ඇති දැයි පරීක්ෂා කරන්න, පසුව නැවතත් උත්සහ කරන්න."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB ආචයනය සක්‍රිය කරන්න"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"ඔබ USB ආචයනය සක්‍රිය නම්, ඔබ භාවිතා කරන සමහර යෙදුම් නැවතීම සහ ඔබ USB ආචයනය අක්‍රිය කරන තුරු නොතිබේවී."</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"USB ක්‍රියාවලිය අසාර්ථකයි"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"හරි"</string>
+    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"මාධ්‍ය උපාංගයක් ලෙස සම්බන්ධිතයි"</string>
+    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"කැමරාවක් ලෙස සම්බන්ධ කර ඇත"</string>
+    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ස්ථාපිතයක් ලෙස සම්බන්ධයි"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB මෙවලමකට සම්බන්ධිතයි"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"අනෙක් USB විකල්පය සඳහා ස්පර්ශ කරන්න."</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB ආචයනය ෆෝමැට් කරන්නද?"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD පත ෆෝමැට් කරන්නද?"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ඔබගේ USB ආචයනයේ ඇති සියලුම ගොනු මැකී යනු ඇත. මෙම ක්‍රියාව ආපසු හැරවිය නොහැක!"</string>
+    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ඔබගේ පතේ සියලු දත්ත නැති වනු ඇත."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ෆෝමැට්"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB නිදොස්කරණය සම්බන්ධිතයි"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"USB නිදොස්කරණය අබල කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="select_input_method" msgid="4653387336791222978">"ආදාන ක්‍රමයක් තෝරන්න"</string>
+    <string name="configure_input_methods" msgid="9091652157722495116">"ආදාන ක්‍රම සකසන්න"</string>
+    <string name="use_physical_keyboard" msgid="6203112478095117625">"භෞතික යතුරු පුවරුව"</string>
+    <string name="hardware" msgid="7517821086888990278">"දෘඨාංග"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"යතුරු පුවරුවට පිරිසැලැස්ම තෝරන්න"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"යතුරු පුවරුවට පිරිසැලැස්මක් තේරීමට ස්පර්ශ කරන්න."</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"අපේක්ෂකයන්"</u></string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB ආචයනය සකසමින්"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD පත සුදානම් කරමින්"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"වැරදි සඳහා පරීක්ෂා කරමින්."</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"හිස් USB ආචයනය"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"හිස් SD පත"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"SD පත හිස් හෝ සහාය නොදක්වන ගොනු පද්ධතියක් ඇත."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD පත හිස් හෝ සහය නොදක්වන ගොනු පද්ධතියක් ඇත"</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"හානි වූ USB ආචයනය"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"හානි වූ SD පත"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB ආචයනයට හානි වී ඇත. එය නැවත ෆෝමැට් ගැන්වීමට උත්සහ කරන්න."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD පතට හානි වී ඇත. එය නැවත ෆෝමැට් ගැන්වීමට උත්සහ කරන්න."</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"බලාපොරොත්තු නොවූ ලෙස USB ආචයනය ඉවත් කෙරිණි"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD පත බලාපොරොත්තු රහිතව ඉවත් කරන ලදි"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"දත්ත නැතිවීම වැළක්වීමට USB ආචයනය ඉවත්කිරීමට පෙර ගලවන්න."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"දත්ත නැතිවීම වැළක්වීමට ගැලවීමට කලින් SD පත ඉවත් කරන්න."</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"ඉවත් කිරීමට USB ආචයනය ආරක්ෂිතයි"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD පත ඉවත් කිරීමට සුරක්ෂිතයි"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"ඔබට USB ආචයනය ආරක්ෂිතව ඉවත් කිරීමට පුළුවනි."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"ඔබට ආරක්ෂිතව SD පත ඉවත් කළ හැක"</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"USB ආචයනය ඉවත් කරන ලදි"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD පත ඉවත් කර ඇත"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB ආචයනය ඉවත්කොට ඇත. අලුත් මාධ්‍යයක් ඇතුළත් කරන්න."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD පත ඉවත් කරන ලදි. අලුත් එකක් ඇතුළත් කරන්න."</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"ගැලපෙන ක්‍රියාකාරකම් හමු නොවුණි."</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"සංරචකය භාවිත කිරීමේ සංඛ්‍යාන යාවත්කාලීන කරන්න"</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"එකතු කරන ලද සංරචකය භාවිතා සංඛ්‍යාන වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා නොවේ."</string>
+    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"අන්තර්ගතය පිටපත් කරන්න"</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"අන්තර්ගතය පිටපත් කිරීමට සුපුරුදු අන්තර්ගත සේවාව ඉල්වා සිටීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_route_media_output" msgid="1642024455750414694">"මාධ්‍ය ප්‍රතිදානයේ මාර්ගගත කිරීම"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"වෙනත් බාහිර උපාංග වෙත මාධ්‍ය ප්‍රතිදානය යැවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"යතුරු පාලක ආරක්‍ෂිත ආචයනය වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"යතුරු ආරක්ෂක ආචයනයට ප්‍රවේශ වීමට යෙදුමට දෙයි."</string>
+    <string name="permlab_control_keyguard" msgid="172195184207828387">"පෙන්වීමේ හා සැඟවීමේ යතුරු ආරක්ෂකය පාලනය කරන්න"</string>
+    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"යතුරු ආරක්ෂකය පාලනයට යෙදුමකට අවසර දෙන්න."</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"විශාලන පාලනය සඳහා දෙවරක් ස්පර්ශ කරන්න"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"විජටය එකතු කිරීමට නොහැකි විය."</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"යන්න"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"සෙවීම"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"යවන්න"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"මීලඟ"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"හරි"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"පෙර"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"ක්‍රියාකරවන්න"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"<xliff:g id="NUMBER">%s</xliff:g> භාවිතයෙන්\nඅංකය අමතන්න"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"<xliff:g id="NUMBER">%s</xliff:g> භාවිතයෙන්\nසම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"පහත දැක්වෙන එකක් හෝ ඊට වැඩි යෙදුම් ගණනක් ඔබගේ ගිණුමට ප්‍රවේශ වීමට, දැන් සහ ඉදිරියේදී අවසර ඉල්ලයි."</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"මෙම ඉල්ලීමට අවසර දීමට ඔබට අවශ්‍යද?"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"ප්‍රවේශය ඉල්ලීම"</string>
+    <string name="allow" msgid="7225948811296386551">"අවසර දෙන්න"</string>
+    <string name="deny" msgid="2081879885755434506">"ප්‍රතික්ෂේප කරන්න"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"අවසර ඉල්ලා සිටී"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"<xliff:g id="ACCOUNT">%s</xliff:g> ගිණුම සඳහා\nඅවසර ඉල්ලන ලදි."</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"ආදාන ක්‍රමය"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"සමමුහුර්තය"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"ප්‍රවේශ්‍යතාව"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"බිතුපත"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"බිතුපත වෙනස් කරන්න"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"දැනුම්දීම් අසන්නා"</string>
+    <string name="vpn_title" msgid="19615213552042827">"VPN ක්‍රියාත්මකයි"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> මඟින් VPN සක්‍රීය කරන ලදි"</string>
+    <string name="vpn_text" msgid="3011306607126450322">"ජාලය කළමනාකරණය කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="vpn_text_long" msgid="6407351006249174473">"<xliff:g id="SESSION">%s</xliff:g> වෙත සම්බන්ධ වුණි. ජාලය කළමනාකරණය කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"සැමවිටම VPN සම්බන්ධ වෙමින්…"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"නිරතුරුවම VPN සම්බන්ධ කර ඇත"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"සැමවිට සක්‍රිය VPN දෝෂය"</string>
+    <string name="vpn_lockdown_config" msgid="6415899150671537970">"වින්‍යාස කිරීමට ස්පර්ශ කරන්න"</string>
+    <string name="upload_file" msgid="2897957172366730416">"ගොනුව තෝරන්න"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"ගොනුවක් තෝරාගෙන නැත"</string>
+    <string name="reset" msgid="2448168080964209908">"යළි පිහිටුවන්න"</string>
+    <string name="submit" msgid="1602335572089911941">"යොමු කරන්න"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"මෝටර් රථ ආකාරය සබල කර ඇත"</string>
+    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"මෝටර් රථ ආකාරයෙන් පිටවීමට ස්පර්ශ කරන්න."</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"ටෙදරින් හෝ හොට්ස්පොට් සක්‍රීයයි"</string>
+    <string name="tethered_notification_message" msgid="6857031760103062982">"සකස් කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="back_button_label" msgid="2300470004503343439">"ආපසු"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"මීලඟ"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"මඟ හරින්න"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"ඉහළ ජංගම දත්ත භාවිතය"</string>
+    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"ජංගම දත්ත භාවිතය ගැන තව දැනගැනීමට ස්පර්ශ කරන්න."</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"ජංගම දත්ත සීමාව ඉක්මවා ඇත"</string>
+    <string name="throttled_notification_message" msgid="5443457321354907181">"ජංගම දත්ත භාවිතය ගැන තව දැනගැනීමට ස්පර්ශ කරන්න."</string>
+    <string name="no_matches" msgid="8129421908915840737">"ගැලපීම් නැත"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"පිටුවෙහි සෙවීම"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"ගැළපීම් 1 යි"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="TOTAL">%d</xliff:g> කින් <xliff:g id="INDEX">%d</xliff:g>"</item>
+  </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"හරි"</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB ආචයනය ගැලවීම..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD පත ගලවමින්..."</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB ආචයනය මකමින්..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD පත මකමින්..."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB ආචයනය මැකිය නොහැක."</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"SD පත මැකීමට නොහැකි විය."</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"ගැලවීමට පෙර SD පත ඉවත්කර ඇත."</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB ආචයනය මේ වනවිට පරීක්ෂා කරමින් පවතී."</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"SD පත දැන් පරීක්ෂා කරමින් පවතී."</string>
+    <string name="media_removed" msgid="7001526905057952097">"SD පත ඉවත් කර ඇත."</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"පරිගණකයක් විසින් දැන් USB ආචයනය භාවිතා කරයි."</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"SD පත දැනට පරිගණකයකින් පාවිච්චි කරයි."</string>
+    <string name="media_unknown_state" msgid="729192782197290385">"බාහිර මාධ්‍යය නොදන්නා අවස්ථාවේ පවතියි."</string>
+    <string name="share" msgid="1778686618230011964">"බෙදාගන්න"</string>
+    <string name="find" msgid="4808270900322985960">"සොයන්න"</string>
+    <string name="websearch" msgid="4337157977400211589">"වෙබ් සෙවුම"</string>
+    <string name="find_next" msgid="5742124618942193978">"මීළඟ සොයන්න"</string>
+    <string name="find_previous" msgid="2196723669388360506">"පෙර එක සොයන්න"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"<xliff:g id="NAME">%s</xliff:g> ගෙන් ස්ථානය ඉල්ලීම"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"ස්ථාන ඉල්ලීම"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) විසින් ඉල්ලන ලද"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"ඔව්"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"නැත"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"මැකීමේ සීමාව ඉක්මවන ලදි"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> සඳහා <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> ගිණුමේ මකන ලද අයිතම <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> ක් ඇත. ඔබට කුමක් කිරීමට අවශ්‍යද?"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"අයිතම මකන්න"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"මැකීම් අස් කරන්න"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"දැනට කිසිවක් නොකරන්න"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"ගිණුමක් තෝරන්න"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"ගිණුමක් එකතු කරන්න"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"ගිණුමක් එකතු කරන්න"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"වැඩි කරන්න"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"අඩු කරන්න"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g> ස්පර්ශ කර රඳවා සිටින්න."</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"වැඩි කිරීමට ඉහලට සර්පණය කරන්න සහ අඩු කිරීමට පහලට සර්පණය කරන්න."</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"මිනිත්තුවක් වැඩි කරන්න"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"මිනිත්තුව අඩු කරන්න"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"පැය වැඩිකරන්න"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"පැය අඩුකරන්න"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"ප.ව.සකසන්න"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"පෙ.ව. සකස් කිරීම"</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"මාසය වැඩි කරන්න"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"මාසයක් අඩු කරන්න"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"දවස වැඩි කරන්න"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"දවස අඩු කරන්න"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"වසර වැඩි කරන්න"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"වසර අඩු කරන්න"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"අවලංගු කරන්න"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"මකන්න"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"හරි"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ආකාරය වෙනස් කරන්න"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ඇතුල් කරන්න"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"යෙදුමක් තෝරන්න"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"සමඟ බෙදාගන්න"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> සමඟින් බෙදා ගන්න"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"සර්පණ හැඩලය. ස්පර්ශ කර රඳවා සිටීම."</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා උඩට සර්පණය කරන්න."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා පහලට සර්පණය කරන්න."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා වමට සර්පණය කරන්න."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා දකුණට සර්පණය කරන්න."</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"අඟුල අරින්න"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"කැමරාව"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"නිහඬ"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"ශබ්ද සක්‍රීය කරන්න"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"සෙවීම"</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"අගුළු ඇරීමට ස්වයිප් කරන්න."</string>
+    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"මුරපද යතුරු කියවනු ඇසීමට ඉස් බණුවක් සම්බන්ධ කරන්න."</string>
+    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"නැවතුම."</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"මුල් පිටුවට සංචාලනය කරන්න"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"ඉහලට සංචාලනය කරන්න"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"තවත් විකල්ප"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"අභ්‍යන්තර ආචයනය"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD පත"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB ආචයනය"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"සංස්කරණය කරන්න"</string>
+    <string name="data_usage_warning_title" msgid="1955638862122232342">"දත්ත භාවිතා අවවාදය"</string>
+    <string name="data_usage_warning_body" msgid="2814673551471969954">"භාවිතය සහ සැකසීම් බැලීමට ස්පර්ශ කරන්න."</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G දත්ත අබලයි"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G දත්ත අබල කරන ලදි"</string>
+    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"ජංගම දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi දත්ත අබල කරන ලදි"</string>
+    <string name="data_usage_limit_body" msgid="3317964706973601386">"සබල කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G දත්ත සීමාව ඉක්මවන ලදි"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G දත්ත සීමාව ඉක්මවා යන ලදි"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"ජංගම දත්ත සීමාව ඉක්මවා යන ලදි"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi දත්ත සීමාව ඉක්මවා යන ලදි"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"සඳහන් කළ සීමාවට වඩා <xliff:g id="SIZE">%s</xliff:g> වැඩිය."</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"පසුබිම් දත්ත සිමා කරන ලදි"</string>
+    <string name="data_usage_restricted_body" msgid="6741521330997452990">"සීමා කිරීම ඉවත් කිරීමට ස්පර්ශ කරන්න"</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"ආරක්‍ෂිත සහතිකය"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"මෙම සහතිකය වලංගුයි."</string>
+    <string name="issued_to" msgid="454239480274921032">"ලබාදුන්නේ:"</string>
+    <string name="common_name" msgid="2233209299434172646">"පොදු නාමය:"</string>
+    <string name="org_name" msgid="6973561190762085236">"සංවිධානය:"</string>
+    <string name="org_unit" msgid="7265981890422070383">"සංවිධානාත්මක ඒකකය:"</string>
+    <string name="issued_by" msgid="2647584988057481566">"ලබාදෙන ලද්දේ:"</string>
+    <string name="validity_period" msgid="8818886137545983110">"වලංගුතාවය:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"නිකුත් කරන ලද්දේ:"</string>
+    <string name="expires_on" msgid="3676242949915959821">"කල් ඉකුත් වන්නේ:"</string>
+    <string name="serial_number" msgid="758814067660862493">"අනුක්‍රමාංකය:"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"ඇඟිලි සලකුණු:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 ඇඟිලිසලකුණ:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 ඇඟිලි සලකුණ:"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"සියල්ල බලන්න"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"ක්‍රියාකාරකම තෝරන්න"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"සමඟ බෙදාගන්න"</string>
+    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
+    <string name="sending" msgid="3245653681008218030">"යවමින්..."</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"බ්‍රවුසරය දියත් කරන්නද?"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"ඇමතුම පිළිගන්නවාද?"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"සැම විටම"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"එක් වාරයයි"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"ටැබ්ලට්ය"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"දුරකථනය"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ඉස් බණු"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"නාදක ඩොක් කරන්න"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"පද්ධතිය"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"බ්ලූටූත් ශ්‍රව්‍ය"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"රැහැන් රහිත දර්ශනය"</string>
+    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"හරි"</string>
+    <string name="media_route_button_content_description" msgid="5758553567065145276">"මාධ්‍ය ප්‍රතිදානය"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"පරිලෝකනය කරමින්…"</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"සම්බන්ධ වෙමින්…"</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"ලබාගත හැක"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"ලබාගත නොහැක"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"භාවිතයේ ඇත"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"තිළැලි තිරය"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI තිරය"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"උඩැතිරිය #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", ආරක්‍ෂිත"</string>
+    <string name="wifi_display_notification_title" msgid="2223050649240326557">"නොරැහැන් සංදර්ශකය සම්බන්ධිතයි"</string>
+    <string name="wifi_display_notification_message" msgid="4498802012464170685">"වෙනත් උපාංගයක් මත මෙම තිරය පෙන්වයි"</string>
+    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"විසන්ධි කරන්න"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"හදිසි ඇමතුම"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"රටාව අමතකයි"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"වැරදි රටාවකි"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"වැරදි මුරපදය"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN එක වැරදියි"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"තත්පර <xliff:g id="NUMBER">%1$d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"ඔබගේ රටාව අඳින්න"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN ඇතුලු කරන්න"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN එක ඇතුළු කරන්න"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"මුරපදය ඇතුළු කරන්න"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"දැන් SIM එක අබල කර ඇත. ඉදිරියට යාමට PUK කේතය යොදන්න. විස්තර සඳහා වාහකයා අමතන්න."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"අපේක්ෂිත PIN කේතය ඇතුළත් කරන්න"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"අපේක්ෂිත PIN කේතය ස්ථිර කරන්න"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM පත අගුළු අරිමින්..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"වැරදි PIN කේතයකි."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"අංක 4 සිට 8 අතර වන PIN එකක් ටයිප් කරන්න."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK කේතය සංඛ්‍යා 8 ක් හෝ වැඩි විය යුතුය."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"නිවැරදි PUK කේතය නැවත ඇතුලත් කරන්න. නැවත නැවත උත්සාහ කිරීමෙන් SIM එක ස්ථිරවම අබල කරයි."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN කේත ගැලපී නැත"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"රටා උත්සාහ කිරීම් වැඩිය"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"අගුළු ඇරීමට, ඔබගේ Google ගිණුම සමග පුරනය වන්න."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"පරිශීලක නාමය (ඊ-තැපෑල)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"මුරපදය"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"පුරනය වන්න"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"වලංගු නොවන පරිශීලක නාමයක් හෝ මුරපදයක්."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ඔබගේ පරිශීලක නාමය හෝ මුරපදය අමතකද?\n "<b>"google.com/accounts/recovery"</b>" වෙත යන්න."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"ගිණුම පරීක්ෂා කරමින්…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ඔබ PIN අංකය <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් වැරදියට ටයිප් කොට ඇත.\n\n තත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ මුරපදය ඔබ වැරදියට ටයිප් කර ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ඔබ <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් අගුළු ඇරීමේ රටාව වැරදියට ඇඳ ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ඔබ ටැබ්ලටය අගුළු හැරීමට වැරදියට අවස්ථා <xliff:g id="NUMBER_0">%d</xliff:g> ක් උත්සාහ කර ඇත. අවස්ථා <xliff:g id="NUMBER_1">%d</xliff:g> ක් අසාර්ථකව උත්සහ කිරීමකින් පසුව, කර්මාන්ත ශාලා මුල් තත්වයට නැවත පත් වන අතර සියලු පරිශීලක දත්ත නැති වෙයි."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER_0">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. තවත් අසාර්ථක ප්‍රයත්න <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, දුරකථනය කර්මාන්ත ශාලාවේ සුපුරුද්දට යළි පිහිටුවන අතර සියලුම පරිශීලක දත්ත නැති වී යයි."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ටැබ්ලටයේ අගුළු ඇරීමට ඔබ වැරදි ප්‍රයත්න <xliff:g id="NUMBER">%d</xliff:g> වාරයක් ගෙන ඇත. දැන් ටැබ්ලටය කර්මාන්ත ශාලා සුපුරුද්ද වෙත යළි පිහිටුවීම කෙරේ."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER">%d</xliff:g> කදී වැරදී ප්‍රයන්තයන් ගෙන තිබේ. දැන් දුරකථනය කර්මාන්තශාලා සුපුරුද්දට පිහිටුවනු ලබයි."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ඔබ අගුළු ඇරිමේ රටාව <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් වැරදියට ඇඳ ඇත. තවත් අසාර්ථක උත්සාහ <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, ඊ-තැපැල් ගිණුම භාවිතා කරමින් ඔබගේ ටැබ්ලටයේ අගුළු ඇරීමට ඔබට පවසනු ඇත.\n\n නැවත තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> කින් උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ ඊ-තැපැල් ලිපිනය භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> න් පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"ඉවත් කරන්න"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"නිර්දේශිත මට්ටමෙන් ඉහළට ශබ්දය වැඩි කරනවද?\nවැඩි කාලයක් ඉහළ ශබ්දයක් ශ්‍රවනය කිරීමෙන් ඔබගේ ශ්‍රවනයට හානි විය හැක."</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"ප්‍රවේශ්‍යතාවය සබල කිරීමට ඇඟිලි දෙකක් පහළට රඳවා සිටින්න."</string>
+    <string name="accessibility_enabled" msgid="1381972048564547685">"ප‍්‍රවේශ්‍යතාව සබල කරන ලදි."</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"ප‍්‍රවේශ්‍යතාව අවලංගු කර ඇත."</string>
+    <string name="user_switched" msgid="3768006783166984410">"දැනට සිටින පරිශීලකයා <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="owner_name" msgid="2716755460376028154">"හිමිකරු"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"දෝෂය"</string>
+    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"සීමා සහිත පැතිකඩ සඳහා වන ගිණුම් වෙත මෙම යෙදුම සහය නොදක්වයි"</string>
+    <string name="app_not_found" msgid="3429141853498927379">"මෙම ක්‍රියාව හසුරුවීමට යෙදුමක් සොයාගත්තේ නැත"</string>
+    <string name="revoke" msgid="5404479185228271586">"අහෝසි කරන්න"</string>
+    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
+    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
+    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
+    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
+    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
+    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
+    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
+    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
+    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
+    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
+    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
+    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
+    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
+    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
+    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
+    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"ISO B4"</string>
+    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
+    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
+    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
+    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
+    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
+    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
+    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
+    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
+    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
+    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
+    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
+    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
+    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
+    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
+    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
+    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
+    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
+    <string name="mediaSize_na_letter" msgid="4191805615829472953">"අකුරු"</string>
+    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"රජයේ ලිපිය"</string>
+    <string name="mediaSize_na_legal" msgid="6697982988283823150">"නීත්‍යනුකූල"</string>
+    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"ප්‍රාථමික නීතිමය"</string>
+    <string name="mediaSize_na_ledger" msgid="281871464896601236">"ලෙජරය"</string>
+    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"කුඩා පුවත්පත"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"අවලංගු කරන ලදි"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"අන්තර්ගතය ලිවීමේදී දෝෂයකි"</string>
+    <string name="reason_unknown" msgid="6048913880184628119">"නොදනී"</string>
+    <string name="restr_pin_enter_admin_pin" msgid="783643731895143970">"පරිපාලකයාගේ PIN එක ඇතුළ් කරන්න"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN එක ඇතුළු කරන්න"</string>
+    <string name="restr_pin_incorrect" msgid="8571512003955077924">"වැරදියි"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"වත්මන් PIN"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"නව PIN"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"නව PIN තහවුරු කරන්න"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"සිමා වැඩිදියුණු කිරීමට PIN සාදන්න"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN නොගැළපෙයි. නැවත උත්සහ කරන්න."</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN කුඩා වැඩිය. ඉලක්කම් 4 වත් විය යුතුය."</string>
+  <plurals name="restr_pin_countdown">
+    <item quantity="one" msgid="311050995198548675">"තවත් තත්පර 1 කින් යළි උත්සාහ කරන්න"</item>
+    <item quantity="other" msgid="4730868920742952817">"තත්පර <xliff:g id="COUNT">%d</xliff:g> කින් නැවත උත්සහ කරන්න"</item>
+  </plurals>
+    <string name="restr_pin_try_later" msgid="973144472490532377">"පසුව නැවත උත්සාහ කරන්න"</string>
+    <string name="transient_navigation_confirmation" msgid="4907844043611123426">"තීරුව අනාවරණයට තිරයේ කෙලවර අදින්න"</string>
+    <string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"පද්ධති තීරුව අනාවරණයට තිරයේ කෙලවරින් අදින්න"</string>
+</resources>
diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml
new file mode 100644
index 0000000..165163b
--- /dev/null
+++ b/core/res/res/values-si/strings.xml
@@ -0,0 +1,1591 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="byteShort" msgid="8340973892742019101">"B"</string>
+    <string name="kilobyteShort" msgid="5973789783504771878">"KB"</string>
+    <string name="megabyteShort" msgid="6355851576770428922">"MB"</string>
+    <string name="gigabyteShort" msgid="3259882455212193214">"GB"</string>
+    <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
+    <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
+    <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <string name="untitled" msgid="4638956954852782576">"&lt;නම් යොදා නැත&gt;"</string>
+    <string name="ellipsis" msgid="7899829516048813237">"…"</string>
+    <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
+    <string name="emptyPhoneNumber" msgid="7694063042079676517">"(දුරකථන අංකයක් නොමැත)"</string>
+    <string name="unknownName" msgid="2277556546742746522">"(නොදනී)"</string>
+    <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"කටහඬ තැපෑල"</string>
+    <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string>
+    <string name="mmiError" msgid="5154499457739052907">"සම්බන්ධතා ගැටළුවක් හෝ අවලංගු MMI කේතයකි."</string>
+    <string name="mmiFdnError" msgid="5224398216385316471">"ස්ථාවර ඇමතීම් අංක වලට පමණක් මෙහෙයුම සීමාකර ඇත."</string>
+    <string name="serviceEnabled" msgid="8147278346414714315">"සේවාව සබල කරන ලදි."</string>
+    <string name="serviceEnabledFor" msgid="6856228140453471041">"සේවාව සබලයි, සඳහා:"</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"සේවාව අබල කරන ලදි."</string>
+    <string name="serviceRegistered" msgid="6275019082598102493">"ලියාපදිංචි වීම සාර්ථකයි."</string>
+    <string name="serviceErased" msgid="1288584695297200972">"මැකීම සාර්ථක විය."</string>
+    <string name="passwordIncorrect" msgid="7612208839450128715">"වැරදි මුරපදයක්."</string>
+    <string name="mmiComplete" msgid="8232527495411698359">"MMI සම්පූර්ණයි."</string>
+    <string name="badPin" msgid="9015277645546710014">"ඔබ ටයිප් කරන ලද පරණ PIN එක වැරදිය."</string>
+    <string name="badPuk" msgid="5487257647081132201">"ඔබ ටයිප් කරන ලද PUK එක වැරදියි."</string>
+    <string name="mismatchPin" msgid="609379054496863419">"ඔබ ටයිප් කල PIN නොගැළපේ."</string>
+    <string name="invalidPin" msgid="3850018445187475377">"4 සිට 8 දක්වා අංක සහිත PIN එකක් ටයිප් කරන්න."</string>
+    <string name="invalidPuk" msgid="8761456210898036513">"අංක 8 ක් හෝ ඊට වැඩි PUK එකක් ටයිප් කරන්න."</string>
+    <string name="needPuk" msgid="919668385956251611">"ඔබගේ SIM පත පතට PUK අගුළු වැටී ඇත. එම අගුල ඇරීමට PUK කේතය ටයිප් කරන්න."</string>
+    <string name="needPuk2" msgid="4526033371987193070">"SIM පතේ අගුළු ඇරීමට PUK2 ටයිප් කරන්න."</string>
+    <string name="imei" msgid="2625429890869005782">"IMEI"</string>
+    <string name="meid" msgid="4841221237681254195">"MEID"</string>
+    <string name="ClipMmi" msgid="6952821216480289285">"පැමිණෙන අමතන්නාගේ ID"</string>
+    <string name="ClirMmi" msgid="7784673673446833091">"පිටතට යන අමතන්නාගේ ID"</string>
+    <string name="CfMmi" msgid="5123218989141573515">"ඇමතුම ඉදිරියට යැවීම"</string>
+    <string name="CwMmi" msgid="9129678056795016867">"ඇමතුම් රැඳීම"</string>
+    <string name="BaMmi" msgid="455193067926770581">"ඇමතුම අවහිර කිරීම"</string>
+    <string name="PwdMmi" msgid="7043715687905254199">"මුරපදය වෙනස් කිරීම"</string>
+    <string name="PinMmi" msgid="3113117780361190304">"PIN වෙනස් වී ඇත"</string>
+    <string name="CnipMmi" msgid="3110534680557857162">"ඇමතුම් අංකය ඇත"</string>
+    <string name="CnirMmi" msgid="3062102121430548731">"ඇමතුම් අංකය සීමා කර ඇත"</string>
+    <string name="ThreeWCMmi" msgid="9051047170321190368">"තුන් මාර්ග ඇමතීම"</string>
+    <string name="RuacMmi" msgid="7827887459138308886">"අනවශ්‍ය හිරිහැරදායක ඇමතුම් ප්‍රතික්ෂේප කිරීම"</string>
+    <string name="CndMmi" msgid="3116446237081575808">"ඇමතීමේ අංකය භාරදීම"</string>
+    <string name="DndMmi" msgid="1265478932418334331">"බාධා නොකරන්න"</string>
+    <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"අමතන්නාගේ ID සුපුරුද්ද අනුව සීමා වී ඇත. මීළඟ ඇමතුම: සීමා කර ඇත"</string>
+    <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී ඇත. මීළඟ ඇමතුම: සීමා කර නැත"</string>
+    <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී නැත. මීළඟ ඇමතුම: සීමා කර ඇත"</string>
+    <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී නැත. මීළඟ ඇමතුම: සීමා කර ඇත"</string>
+    <string name="serviceNotProvisioned" msgid="8614830180508686666">"සේවාවන් සපයා නැත."</string>
+    <string name="CLIRPermanent" msgid="3377371145926835671">"අමතන්නාගේ ID සැකසීම ඔබට වෙනස්කල නොහැක."</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"සීමිත ප්‍රවේශය වෙනස් කෙරිණි"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"දත්ත සේවාව අවහිර කර ඇත."</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"හදිසි සේවාව අවහිර කර ඇත."</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"හඬ සේවාව බාධා කර ඇත."</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"සියලු හඬ සේවා අවහිර කර ඇත."</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"SMS සේවාව අවහිර කර ඇත."</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"හඬ/දත්ත සේවා අවහිර කර ඇත."</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"හඬ/SMS සේවා අවහිර කර ඇත."</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"සියලුම හඬ/දත්ත/SMS සේවාවන් බාධා කර ඇත."</string>
+    <string name="serviceClassVoice" msgid="1258393812335258019">"හඬ"</string>
+    <string name="serviceClassData" msgid="872456782077937893">"දත්ත"</string>
+    <string name="serviceClassFAX" msgid="5566624998840486475">"ෆැක්ස්"</string>
+    <string name="serviceClassSMS" msgid="2015460373701527489">"SMS"</string>
+    <string name="serviceClassDataAsync" msgid="4523454783498551468">"අසමමුහුර්ත කරන්න"</string>
+    <string name="serviceClassDataSync" msgid="7530000519646054776">"සමමුහුර්ත කිරීම"</string>
+    <string name="serviceClassPacket" msgid="6991006557993423453">"පැකැට්ටුව"</string>
+    <string name="serviceClassPAD" msgid="3235259085648271037">"PAD"</string>
+    <string name="roamingText0" msgid="7170335472198694945">"රෝමිං දර්ශකය සක්‍රියයි"</string>
+    <string name="roamingText1" msgid="5314861519752538922">"රෝමිං දර්ශකය අක්‍රියයි"</string>
+    <string name="roamingText2" msgid="8969929049081268115">"රෝමිං දර්ශකය සැණෙලි වෙයි"</string>
+    <string name="roamingText3" msgid="5148255027043943317">"වටපිටාවෙන් ඉවත්ව"</string>
+    <string name="roamingText4" msgid="8808456682550796530">"ගොඩනැගිල්ලෙන් පිටත"</string>
+    <string name="roamingText5" msgid="7604063252850354350">"රෝමිං  - කැමති පද්ධතිය"</string>
+    <string name="roamingText6" msgid="2059440825782871513">"රෝමිං  - ලබාගත හැකි පද්ධතිය"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"රෝමිං - මිත්‍ර හවුල්කරු"</string>
+    <string name="roamingText8" msgid="5989569778604089291">"රෝමිං - අධිමිල හවුල්කරු"</string>
+    <string name="roamingText9" msgid="7969296811355152491">"රෝමිං  - සම්පූර්ණ සේවා ක්‍රියාකාරිත්වය"</string>
+    <string name="roamingText10" msgid="3992906999815316417">"රෝමිං - අසම්පූර්ණ සේවා ක්‍රියාකාරීත්වය"</string>
+    <string name="roamingText11" msgid="4154476854426920970">"රෝමිං  බැනරය සක්‍රීයයි"</string>
+    <string name="roamingText12" msgid="1189071119992726320">"රෝමිං බැනරය අක්‍රියයි"</string>
+    <string name="roamingTextSearching" msgid="8360141885972279963">"සේවාව සඳහා සොයමින්"</string>
+    <string name="cfTemplateNotForwarded" msgid="1683685883841272560">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ඉදිරියට නොයවන ලදි"</string>
+    <string name="cfTemplateForwarded" msgid="1302922117498590521">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateForwardedTime" msgid="9206251736527085256">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: තත්පර <xliff:g id="TIME_DELAY">{2}</xliff:g> ට පසුව <xliff:g id="DIALING_NUMBER">{1}</xliff:g>"</string>
+    <string name="cfTemplateRegistered" msgid="5073237827620166285">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ඉදිරියට නොයවන ලදි"</string>
+    <string name="cfTemplateRegisteredTime" msgid="6781621964320635172">"<xliff:g id="BEARER_SERVICE_CODE">{0}</xliff:g>: ඉදිරියට නොයවන ලදි"</string>
+    <string name="fcComplete" msgid="3118848230966886575">"අංග කේතය සම්පූර්ණයි."</string>
+    <string name="fcError" msgid="3327560126588500777">"සම්බන්ධතා ගැටළුවක් හෝ අවලංගු විශේෂාංග කේතයකි."</string>
+    <string name="httpErrorOk" msgid="1191919378083472204">"හරි"</string>
+    <string name="httpError" msgid="7956392511146698522">"ජාල දෝෂයක් තිබුණි."</string>
+    <string name="httpErrorLookup" msgid="4711687456111963163">"URL ය සෙවිය නොහැක."</string>
+    <string name="httpErrorUnsupportedAuthScheme" msgid="6299980280442076799">"අඩවියේ සත්‍යාපන පටිපාටිය වෙත සහය නොදක්වයි."</string>
+    <string name="httpErrorAuth" msgid="1435065629438044534">"සත්‍යාපනය කළ නොහැක"</string>
+    <string name="httpErrorProxyAuth" msgid="1788207010559081331">"ප්‍රොක්සි සේවාදායකය හරහා සත්‍යාපනය අසාර්ථකය."</string>
+    <string name="httpErrorConnect" msgid="8714273236364640549">"සේවාදායකයාට සම්බන්ධ විය නොහැක."</string>
+    <string name="httpErrorIO" msgid="2340558197489302188">"සේවාදායකයා සමග සම්බන්ධ වීමට නොහැකි විය. නැවත උත්සහ කරන්න."</string>
+    <string name="httpErrorTimeout" msgid="4743403703762883954">"සේවාදායකය වෙත සම්බන්ධතාවය කල් ඉකුත් විණි."</string>
+    <string name="httpErrorRedirectLoop" msgid="8679596090392779516">"පිටුවේ බොහෝ සේවාදායක නැවත හරවා යැවීම් අඩංගු වේ."</string>
+    <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"ප්‍රොටෝකෝලය වෙත සහය නොදක්වයි."</string>
+    <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"සුරක්ෂිත සම්බන්ධතාවයක් පිහිටුවීමට නොහැකි විය."</string>
+    <string name="httpErrorBadUrl" msgid="3636929722728881972">"URL වලංගු නොවන නිසා පිටුව විවෘත කිරීමට නොහැකි විය."</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"ගොනුව වෙත පිවිසිය නොහැක."</string>
+    <string name="httpErrorFileNotFound" msgid="6203856612042655084">"ඉල්ලන ලද ගොනු සෙවිය නොහැක."</string>
+    <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"ඉල්ලීම් විශාල ප්‍රමාණයක් ක්‍රියාත්මක වෙමින් පවතියි. පසුව නැවත උත්සාහ කරන්න."</string>
+    <string name="notification_title" msgid="8967710025036163822">"<xliff:g id="ACCOUNT">%1$s</xliff:g> සඳහා පුරනය වීමේ දෝෂයක්"</string>
+    <string name="contentServiceSync" msgid="8353523060269335667">"සමමුහුර්ත කිරීම"</string>
+    <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"සමමුහුර්ත කරන්න"</string>
+    <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"<xliff:g id="CONTENT_TYPE">%s</xliff:g> මැකීම් වැඩිය"</string>
+    <string name="low_memory" product="tablet" msgid="6494019234102154896">"ටැබ්ලට් ආචයනය පිරි ඇත. ඉඩ නිදහස් කිරීමට සමහර ගොනු මකන්න."</string>
+    <string name="low_memory" product="default" msgid="3475999286680000541">"දුරකථන ආචයනය පිරී ඇත. ඉඩ නිදහස් කිරීමට සමහර ගොනු මකන්න."</string>
+    <string name="me" msgid="6545696007631404292">"මම"</string>
+    <string name="power_dialog" product="tablet" msgid="8545351420865202853">"ටැබ්ලට විකල්ප"</string>
+    <string name="power_dialog" product="default" msgid="1319919075463988638">"දුරකථන විකල්පයන්"</string>
+    <string name="silent_mode" msgid="7167703389802618663">"නිහඬ ආකාරය"</string>
+    <string name="turn_on_radio" msgid="3912793092339962371">"නොරැහන් සක්‍රිය කරන්න"</string>
+    <string name="turn_off_radio" msgid="8198784949987062346">"නොරැහැන් අක්‍රිය කරන්න"</string>
+    <string name="screen_lock" msgid="799094655496098153">"තිර අගුල"</string>
+    <string name="power_off" msgid="4266614107412865048">"බලය අක්‍රිය කරන්න"</string>
+    <string name="silent_mode_silent" msgid="319298163018473078">"හඬ නඟනය අක්‍රියයි"</string>
+    <string name="silent_mode_vibrate" msgid="7072043388581551395">"හඬ නඟනය කම්පනය"</string>
+    <string name="silent_mode_ring" msgid="8592241816194074353">"හඬ නඟනය සක්‍රීයයි"</string>
+    <string name="shutdown_progress" msgid="2281079257329981203">"වසා දමමින්…"</string>
+    <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"ඔබගේ ටැබ්ලටය වැසේ."</string>
+    <string name="shutdown_confirm" product="default" msgid="649792175242821353">"ඔබගේ දුරකථනය වැසේ."</string>
+    <string name="shutdown_confirm_question" msgid="2906544768881136183">"ඔබට වසා දැමීමට අවශ්‍යද?"</string>
+    <string name="reboot_safemode_title" msgid="7054509914500140361">"ආරක්‍ෂිත ආකාරයට නැවත පණ ගන්වන්න"</string>
+    <string name="reboot_safemode_confirm" msgid="55293944502784668">"ආරක්‍ෂිත ආකාරයට නැවත පණ ගැන්වීමට ඔබට අවශ්‍යද? මෙමඟින් ඔබ ස්ථාපිත කර ඇති සියලුම තෙවන පාර්ශවීය යෙදුම් සියල්ල අබල වී යයි. ඔබ නැවත පණ ගන්වන විට ඒවා නැවත පිහිටුවීම සිදු වේ."</string>
+    <string name="recent_tasks_title" msgid="3691764623638127888">"මෑත"</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"මෑත යෙදුම් නැත."</string>
+    <string name="global_actions" product="tablet" msgid="408477140088053665">"ටැබ්ලට් විකල්ප"</string>
+    <string name="global_actions" product="default" msgid="2406416831541615258">"දුරකථන විකල්ප"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"තිර අගුල"</string>
+    <string name="global_action_power_off" msgid="4471879440839879722">"බලය අක්‍රිය කරන්න"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"දෝෂ වර්තාව"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"දෝෂ වාර්තාවක් ගන්න"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"ඊ-තැපැල් පණිවිඩයක් ලෙස යැවීමට මෙය ඔබගේ වත්මන් උපාංග තත්වය ගැන තොරතුරු එකතු කරනු ඇත. දෝෂ වාර්තාව ආරම්භ කර එය යැවීමට සූදානම් කරන තෙක් එයට කිසියම් කාලයක් ගතවනු ඇත; කරුණාකර ඉවසන්න."</string>
+    <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"නිහඬ ආකාරය"</string>
+    <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ශබ්දය අක්‍රියයි"</string>
+    <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"හඬ සක්‍රියයි"</string>
+    <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"අහස්යානා ආකාරය"</string>
+    <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"අහස්යානා ආකාරය සක්‍රීයයි."</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"අහස්යානා අකාරය අක්‍රියයි"</string>
+    <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
+    <string name="safeMode" msgid="2788228061547930246">"ආරක්‍ෂිත ආකාරය"</string>
+    <string name="android_system_label" msgid="6577375335728551336">"Android පද්ධතිය"</string>
+    <string name="permgrouplab_costMoney" msgid="5429808217861460401">"ඔබගේ මුදල් වැයවන සේවාවන්"</string>
+    <string name="permgroupdesc_costMoney" msgid="3293301903409869495">"ඔබගෙන් මුදල් යන දේවල් කරන්න."</string>
+    <string name="permgrouplab_messages" msgid="7521249148445456662">"ඔබගේ පණිවිඩ"</string>
+    <string name="permgroupdesc_messages" msgid="7821999071003699236">"ඔබගේ SMS, ඊ-තැපැල්, සහ වෙනත් පණිවිඩ කියවන්න සහ ලියන්න."</string>
+    <string name="permgrouplab_personalInfo" msgid="3519163141070533474">"ඔබගේ පෞද්ගලික තොරතුරු"</string>
+    <string name="permgroupdesc_personalInfo" msgid="8426453129788861338">"ඔබගේ සම්බන්ධතා පතේ ආචයනය කරන ලද, ඔබ ගැන තොරතුරු වලට ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_socialInfo" msgid="5799096623412043791">"ඔබගේ සමාජයීය තොරතුරු"</string>
+    <string name="permgroupdesc_socialInfo" msgid="7129842457611643493">"ඔබගේ සම්බන්ධතා සහ සාමාජ සම්බන්ධයන් ගැන තොරතුරු වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_location" msgid="635149742436692049">"ඔබගේ ස්ථානය"</string>
+    <string name="permgroupdesc_location" msgid="5704679763124170100">"ඔබගේ භෞතික පිහිටුම නිරීක්ෂණය කරයි."</string>
+    <string name="permgrouplab_network" msgid="5808983377727109831">"ජාල සන්නිවේදනය"</string>
+    <string name="permgroupdesc_network" msgid="4478299413241861987">"විවිධ ජාල විශේෂාංග වෙත පිවිසෙන්න."</string>
+    <string name="permgrouplab_bluetoothNetwork" msgid="1585403544162128109">"බ්ලූටූත්"</string>
+    <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"බ්ලූටූත් ඔස්සේ උපාංග සහ ජාල වෙත පිවිසෙන්න."</string>
+    <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"ශ්‍රව්‍ය සැකසීම්"</string>
+    <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"ශ්‍රව්‍ය සැකසීම් වෙනස් කරන්න."</string>
+    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"බැටරිය වෙත බලපායි"</string>
+    <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"බැටරියේ බලය ක්ෂණිකව අඩු වන විශේෂාංග භාවිත කරන්න."</string>
+    <string name="permgrouplab_calendar" msgid="5863508437783683902">"දින දර්ශනය"</string>
+    <string name="permgroupdesc_calendar" msgid="5777534316982184416">"දින දර්ශන සිද්ධින්ට සෘජුව ප්‍රවේශ වීම."</string>
+    <string name="permgrouplab_dictionary" msgid="4148597128843641379">"පරිශීලක ශබ්ද කෝෂය කියවන්න"</string>
+    <string name="permgroupdesc_dictionary" msgid="7921166355964764490">"පරිශීලක ශබ්ද කෝෂයේ වචන කියවීම."</string>
+    <string name="permgrouplab_writeDictionary" msgid="8090237702432576788">"පරිශීලක ශබ්දකෝෂයට ලිවිම"</string>
+    <string name="permgroupdesc_writeDictionary" msgid="2711561994497361646">"පරිශීලක ශබ්දකෝෂයට වචන එකතු කරන්න."</string>
+    <string name="permgrouplab_bookmarks" msgid="1949519673103968229">"පිටුසන් සහ ඉතිහාසය"</string>
+    <string name="permgroupdesc_bookmarks" msgid="4169771606257963028">"පිටුසන් සහ බ්‍රව්සර ඉතිහාසය වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_deviceAlarms" msgid="6117704629728824101">"සීනුව"</string>
+    <string name="permgroupdesc_deviceAlarms" msgid="4769356362251641175">"සීනුව සකසන්න."</string>
+    <string name="permgrouplab_voicemail" msgid="4162237145027592133">"හඬ තැපෑල"</string>
+    <string name="permgroupdesc_voicemail" msgid="2498403969862951393">"හඬ තැපෑල වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_microphone" msgid="171539900250043464">"මයික්‍රොෆෝනය"</string>
+    <string name="permgroupdesc_microphone" msgid="7106618286905738408">"ශබ්දය පටිගත කිරීමට මයික්‍රොෆෝනය වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_camera" msgid="4820372495894586615">"කැමරාව"</string>
+    <string name="permgroupdesc_camera" msgid="2933667372289567714">"ඡායාරූප හෝ වීඩියෝ ග්‍රහණය සඳහා කැමරාව වෙත ඍජු ප්‍රවේශය."</string>
+    <string name="permgrouplab_screenlock" msgid="8275500173330718168">"අගුළු තිරය"</string>
+    <string name="permgroupdesc_screenlock" msgid="7067497128925499401">"ඔබගේ උපාංගයේ අගුළු තිරයේ ක්‍රියාකාරිත්වයට බලපාන හැකියාව."</string>
+    <string name="permgrouplab_appInfo" msgid="8028789762634147725">"ඔබගේ යෙදුම් වල තොරතුරු"</string>
+    <string name="permgroupdesc_appInfo" msgid="3950378538049625907">"ඔබගේ උපාංගයේ වෙනත් යෙදුම් වල ක්‍රියාකාරිත්වයට බලපෑම් කළ හැකි බව."</string>
+    <string name="permgrouplab_wallpaper" msgid="3850280158041175998">"බිතුපත"</string>
+    <string name="permgroupdesc_wallpaper" msgid="5630417854750540154">"උපාංග බිතුපතේ සැකසීම් වෙනස් කරන්න."</string>
+    <string name="permgrouplab_systemClock" msgid="406535759236612992">"ඔරලෝසුව"</string>
+    <string name="permgroupdesc_systemClock" msgid="3944359833624094992">"උපාංග කාල හෝ කාල කලාප වෙනස් කරන්න."</string>
+    <string name="permgrouplab_statusBar" msgid="2095862568113945398">"තත්ව තීරුව"</string>
+    <string name="permgroupdesc_statusBar" msgid="6242593432226807171">"උපාංග තත්ව තීරු සැකසීම් වෙනස් කරන්න."</string>
+    <string name="permgrouplab_syncSettings" msgid="3341990986147826541">"සමමුහුර්ත සැකසීම්"</string>
+    <string name="permgroupdesc_syncSettings" msgid="7603195265129031797">"සමමුහුර්ත සැකසීම් වෙත ප්‍රවේශය."</string>
+    <string name="permgrouplab_accounts" msgid="3359646291125325519">"ඔබගේ ගිණුම්"</string>
+    <string name="permgroupdesc_accounts" msgid="4948732641827091312">"ලබාගත හැකි ගිණුම් වලට ප්‍රවේශ වීම."</string>
+    <string name="permgrouplab_hardwareControls" msgid="7998214968791599326">"දෘඩාංග පාලක"</string>
+    <string name="permgroupdesc_hardwareControls" msgid="4357057861225462702">"හෑන්ඩ්සෙටයේ දෘඩාංග වලට සෘජුවම ප්‍රවේශ වන්න."</string>
+    <string name="permgrouplab_phoneCalls" msgid="9067173988325865923">"දුරකථන ඇමතුම්"</string>
+    <string name="permgroupdesc_phoneCalls" msgid="7489701620446183770">"දුරකථන ඇමතුම් නිරීක්ෂණය කරන්න, පටිගත කරන්න සහ ක්‍රියාත්මක කරන්න."</string>
+    <string name="permgrouplab_systemTools" msgid="4652191644082714048">"පද්ධති මෙවලම්"</string>
+    <string name="permgroupdesc_systemTools" msgid="8162102602190734305">"පද්ධතියේ පහල මට්ටම් ප්‍රවේශය සහ පාලනය."</string>
+    <string name="permgrouplab_developmentTools" msgid="3446164584710596513">"සංවර්ධක මෙවලම්"</string>
+    <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"යෙදුම් සංවර්ධකයන් සඳහා පමණක් අවශ්‍ය විශේෂාංග."</string>
+    <string name="permgrouplab_display" msgid="4279909676036402636">"වෙනත් යෙදුම් UI"</string>
+    <string name="permgroupdesc_display" msgid="6051002031933013714">"වෙනත් යෙදුම්වල UI සඳහා බලපායි."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"ආචයනය"</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"USB ආචයනය වෙත ප්‍රවේශය."</string>
+    <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"SD පත වෙත ප්‍රවේශය."</string>
+    <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"ප්‍රවේශ්‍යතා විශේෂාංග"</string>
+    <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"උපකාරීවන තාක්ෂණ ඉල්ලීම් කළ හැකි විශේෂාංග."</string>
+    <string name="capability_title_canRetrieveWindowContent" msgid="3901717936930170320">"කවුළු අන්න්තර්ගතය ලබාගන්න"</string>
+    <string name="capability_desc_canRetrieveWindowContent" msgid="3772225008605310672">"ඔබ අන්තර්ක්‍රියාකාරී වන කවුළුවේ අන්තර්ගතය පරීක්ෂා කරන්න."</string>
+    <string name="capability_title_canRequestTouchExploration" msgid="3108723364676667320">"ස්පර්ශයෙන් ගවේෂණය සක්‍රිය කරන්න"</string>
+    <string name="capability_desc_canRequestTouchExploration" msgid="5800552516779249356">"ස්පර්ශ කරන අයිතම හඬ නගා කතා කෙරෙනු ඇති අතර ඉංගිති භාවිතයෙන් තිරය ගවේෂණය කිරීමට පුළුවනි."</string>
+    <string name="capability_title_canRequestEnhancedWebAccessibility" msgid="1739881766522594073">"උසස් වෙබ් ප්‍රවේශ්‍යතාව සක්‍රිය කරන්න"</string>
+    <string name="capability_desc_canRequestEnhancedWebAccessibility" msgid="7881063961507511765">"යෙදුම් අන්තර්ගතයට ප්‍රවේශ්‍යතාවය වැඩිවන ලෙස සකස් කිරීමට ඇතැම් විට ස්ක්‍රිප්ට් ස්ථාපනය කර ඇත."</string>
+    <string name="capability_title_canRequestFilterKeyEvents" msgid="2103440391902412174">"ඔබ ටයිප් කළ පෙළ බලන්න"</string>
+    <string name="capability_desc_canRequestFilterKeyEvents" msgid="7463135292204152818">"ණයවරපත් අංක සහ මුරපද වැනි පුද්ගලික දත්ත ඇතුළත් වේ."</string>
+    <string name="permlab_statusBar" msgid="7417192629601890791">"තත්ව තීරුව අබල කරන්න හෝ වෙනස් කරන්න"</string>
+    <string name="permdesc_statusBar" msgid="8434669549504290975">"තත්ව තීරුව අක්‍රිය කිරීමට හෝ පද්ධති නිරූපක එකතු හෝ ඉවත් කිරීමට යෙදුමට අවසර දේ."</string>
+    <string name="permlab_statusBarService" msgid="7247281911387931485">"තත්ව තීරුව"</string>
+    <string name="permdesc_statusBarService" msgid="716113660795976060">"තත්ව තීරුව වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_expandStatusBar" msgid="1148198785937489264">"තත්ව තීරුව දිග හැරීම/හැකිලීම"</string>
+    <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"තත්ව තීරුව දිග හැරීමට හෝ හැකිළීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"පිටවන ඇමතුම් වල මග වෙනස් කිරීම"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"පිටවන ඇමතුම් සකස් කිරීමට සහ ඇමතීමට නියමිත අංකය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙන් යෙදුමට පිටවන ඇමතුම් නිරීක්ෂණය, නැවත හැරවීම හෝ වැළක්වීම අවසර දෙයි."</string>
+    <string name="permlab_receiveSms" msgid="8673471768947895082">"කෙටි පණිවිඩ ලබාගැනීම (SMS)"</string>
+    <string name="permdesc_receiveSms" msgid="6424387754228766939">"SMS පණිවිඩ ලැබීමට සහ ක්‍රියාත්මක කිරීමට යෙදුමට අවසර දෙන්න. මෙහි තේරුම යෙදුමට ඔබගේ උපාංගයට ලැබෙන පණිවිඩ අධීක්ෂණය කිරීමට හැකිවීම වන අතර, ඒවා ඔබට නොපෙන්වා මකා දැමීමටද හැකි වීමයි."</string>
+    <string name="permlab_receiveMms" msgid="1821317344668257098">"පෙළ පණිවුඩ ලබාගන්න (MMS)"</string>
+    <string name="permdesc_receiveMms" msgid="533019437263212260">"MMS පණිවිඩ සොයා ලබාගැනීමට සහ ක්‍රියාත්මක කිරීමට යෙදුමට අවසර දෙන්න. යෙදුම නිරීක්ෂණය කරනු ලබන අතර ඔබට ලැබුන පණිවිඩ පෙන්වීමෙන් තොරවම මකා දැමිය හැකි බව මෙමඟින් අදහස් කරයි."</string>
+    <string name="permlab_receiveEmergencyBroadcast" msgid="1803477660846288089">"හදිසි විකාශන ලබා ගැනීම"</string>
+    <string name="permdesc_receiveEmergencyBroadcast" msgid="848524070262431974">"හදිසි විකාශ පණිවිඩ ලැබීමට සහ ක්‍රියාත්මක කිරීමට යෙදුමට අවසර දෙන්න. පද්ධති යෙදුම් වලට පමණක් මෙම අවසරය අදාළ වෙයි."</string>
+    <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"සෙල් ප්‍රචාරණ පණිවිඩ කියවීම"</string>
+    <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"ඔබගේ උපාංගයට ලැබුණු සෙල් විකාශන පණිවිඩ කියවීමට යෙදුමට අවසර දෙන්න. ඔබට හදිසි අවස්ථාවන් පිළිබඳ අනතුරු ඇඟවීමට සෙල් විකාශන පණිවිඩ ඇතැම් ස්ථානවල සිට යවනු ලබයි. හදිසි සෙල් විකාශන ලැබෙන අවස්ථාවකදී, අනිෂ්ට යෙදුම් මඟින් ඔබගේ උපාංගයට කාර්ය සාධනයට හෝ ක්‍රියකරණයට බාධා සිදුවිය හැක."</string>
+    <string name="permlab_sendSms" msgid="5600830612147671529">"SMS පණිවිඩ යැවීම"</string>
+    <string name="permdesc_sendSms" msgid="7094729298204937667">"SMS පණිවිඩ යැවීමට යෙදුමට අවසර දෙන්න. මෙමඟින් බලාපොරොත්තු නොවූ ප්‍රතිඵල අත් විය හැක. අනිෂ්ට යෙදුම් ඔබගේ තහවුරුවකින් තොරව පණිවිඩ යැවීම මඟින් ඔබගේ මුදල් වැය කල හැක."</string>
+    <string name="permlab_sendRespondViaMessageRequest" msgid="8713889105305943200">"පණිවිඩ සිදුවීම හරහා ප්‍රතිචාර යැවීම"</string>
+    <string name="permdesc_sendRespondViaMessageRequest" msgid="7107648548468778734">"පැමිණෙන ඇමතුම් සඳහා පණිවිඩ ඔස්සේ ප්‍රතිචාර සිදුවීම් හසුරුවීමට වෙනත් පණිවිඩ යෙදුම් සඳහා ඉල්ලීම් යැවීමට, යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_readSms" msgid="8745086572213270480">"ඔබගේ පෙළ පණිවුඩ කියවන්න (SMS හෝ MMS)"</string>
+    <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"ඔබගේ ටැබ්ලටයේ හෝ SIM පතේ ආචයනය කර ඇති SMS පණිවිඩ කියවීමට යෙදුමට අවසර දෙන්න. අන්තර්ගතය හෝ විශවාසදයි බවින් තොරවම සියලු SMS පණිවිඩ කියවීමට මෙමගින් යෙදුමට අවසර දෙයි."</string>
+    <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"ඔබගේ දුරකථනයේ හෝ SIM පතේ ආචයනය කරන ලද SMS පණිවිඩ කියවීමට යෙදුමට අවසර දෙන්න. අන්තර්ගතය හෝ විශ්වාසදායී බවින් තොරවම සියලු SMS පණිවිඩ කියවීමට මෙමගින් යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_writeSms" msgid="3216950472636214774">"ඔබගේ කෙටි පණිවිඩ සංස්කරණය කිරීම (SMS හෝ MMS)"</string>
+    <string name="permdesc_writeSms" product="tablet" msgid="5160413947794501538">"ඔබගේ ටැබ්ලටයේ හෝ SIM පතේ ගබඩා කර ඇති SMS පණිවිඩ වෙත ලිවීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් ඔබගේ පණිවිඩ මකා දැමිය හැක."</string>
+    <string name="permdesc_writeSms" product="default" msgid="7268668709052328567">"ඔබගේ ටැබ්ලටයේ හෝ SIM පතේ ආචයනය කරන ලද SMS පණිවිඩ ලිවීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් ඔබගේ පණිවිඩ මකා දැමිය හැක."</string>
+    <string name="permlab_receiveWapPush" msgid="5991398711936590410">"පෙළ පණිවිඩ ලබාගැනීම (WAP)"</string>
+    <string name="permdesc_receiveWapPush" msgid="748232190220583385">"WAP පණිවිඩ ලැබීමට සහ ක්‍රියාවලි කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙහි ඔබව ඒවාට පෙන්වීමකින් තොරව ඔබට පණිවිඩ නිරීක්ෂණයට හෝ මැකීමට හැකියාව ඇතුළත් වේ."</string>
+    <string name="permlab_getTasks" msgid="6466095396623933906">"ධාවනය වන යෙදුම් ලබාගැනීම"</string>
+    <string name="permdesc_getTasks" msgid="7454215995847658102">"දැනට සහ මෑත ක්‍රියාත්මක කාර්යයන් පිළිබඳ විස්තරාත්මක තොරතුරු සොයා ලබාගැනීමට යෙදුමට ඉඩ දෙන්න. මෙය කුමන යෙදුම් උපාංගයේ භාවිතා කරන්නේද යන තොරතුරු යෙදුම්වලට සොයා ගැනීමට ඉඩ දිය හැක."</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"පරිශීලකයන් අතර අන්තර්ක්‍රියාකාරී වන්න"</string>
+    <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"උපාංගයේ විවිධ පරිශීලකයන් හරහා ක්‍රියාවන් දැක්වීමට යෙදුමට අවසර දෙන්න. පරිශීලකයන් අතර ආරක්ෂාව කඩකිරීමට අනිෂ්ට යෙදුම් විසින් මෙය භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"පරිශීලකයන් අතර අන්තර් ක්‍රියාකාරී වීමට සම්පූර්ණ බලපත්‍රය"</string>
+    <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"පරිශීලකයන් හරහා සිදු කළ හැකි සියලු අන්තර් ක්‍රියා වලට අවසර දෙන්න."</string>
+    <string name="permlab_manageUsers" msgid="1676150911672282428">"පරිශීලකයන් කළමනාකරණය කරන්න"</string>
+    <string name="permdesc_manageUsers" msgid="8409306667645355638">"විස්තර ලබා ගැනීම, නිර්මාණකරණය, මකාදැමීම ඇතුළු පරිශීලකයන් කළමනාකරණයට යෙදුම්වලට අවසර දෙන්න."</string>
+    <string name="permlab_getDetailedTasks" msgid="6229468674753529501">"ධාවනය වන යෙදුම් වල තොරතුරු සොයා ලබාගැනීම"</string>
+    <string name="permdesc_getDetailedTasks" msgid="153824741440717599">"දැනට සහ මෑතක ක්‍රියාත්මක කාර්යයන් පිළිබඳ විස්තරාත්මක තොරතුරු ලබාගැනීමට යෙදුමට අවසර දෙන්න අනිෂ්ට යෙදුම් අනෙකුත් යෙදුම් පිළිබඳ පුද්ගලික තොරතුරු සොයා ගැනීමට ඉඩ තිබේ."</string>
+    <string name="permlab_reorderTasks" msgid="2018575526934422779">"ධාවනය වන යෙදුම් නැවත අනුපිළිවෙලට සැකසීම"</string>
+    <string name="permdesc_reorderTasks" msgid="7734217754877439351">"පෙරබිමට හෝ පසුබිමට සිදුවීම් ගෙනයාමට යෙදුමට අවසර දෙන්න. ඔබගේ ආදානයකින් තොරව යෙදුම මෙය සිදුකරයි."</string>
+    <string name="permlab_removeTasks" msgid="6821513401870377403">"යෙදුම් ධාවනය නවත්වන්න"</string>
+    <string name="permdesc_removeTasks" msgid="1394714352062635493">"කාර්යයන් ඉවත් කිරීමට සහ ඒවායෙහි යෙදුම් නැති කිරීමට යෙදුමට අවසර දෙන්න. අනෙක් යෙදුම් හැසිරීම බාධා කිරීමට අනිෂ්ට යෙදුම්වලට අවසර දෙන්න."</string>
+    <string name="permlab_manageActivityStacks" msgid="7391191384027303065">"ක්‍රියාකාරකම් අට්ටි කළමනාකරණය කරන්න"</string>
+    <string name="permdesc_manageActivityStacks" msgid="1615881933034084440">"වෙනත් යෙදුම් ධාවනය වන ක්‍රියාකාරකම් අට්ටි වලට එකතු කිරීමට, ඉවත් කිරීමට, සහ වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම්වල හැසිරීම අනිෂ්ට යෙදුම් මගින් බාධා විය හැක."</string>
+    <string name="permlab_startAnyActivity" msgid="2918768238045206456">"ඕනෑම ක්‍රියාවක් අරඹන්න"</string>
+    <string name="permdesc_startAnyActivity" msgid="997823695343584001">"අවසර ආරක්ෂාව හෝ යැවුම් තත්වයෙන් තොරවම ඕනෑම ක්‍රියාවක් ආරම්භ කිරීමට යෙදුමට අවසර දේ."</string>
+    <string name="permlab_setScreenCompatibility" msgid="6975387118861842061">"තිර ගැළපුම සැකසීම"</string>
+    <string name="permdesc_setScreenCompatibility" msgid="692043618693917374">"වෙනත් යෙදුම්වල තිර ගැලපුම් මාදිලිය පාලනයට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම්වල හැසිරීම අනිෂ්ට යෙදුම් කැඩිය හැක."</string>
+    <string name="permlab_setDebugApp" msgid="3022107198686584052">"යෙදුම් නිදොස්කරණය සබල කිරීම"</string>
+    <string name="permdesc_setDebugApp" msgid="4474512416299013256">"වෙනත් යෙදුමක් සඳහා නිදොස්කරණය සක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම් විනාශ කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක."</string>
+    <string name="permlab_changeConfiguration" msgid="4162092185124234480">"පද්ධති සංදර්ශක සැකසීම් වෙනස් කරන්න"</string>
+    <string name="permdesc_changeConfiguration" msgid="4372223873154296076">"පෙදෙසිය හෝ සම්පූර්ණ අකුරු ප්‍රමාණය වැනි පවතින වින්‍යාසය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_enableCarMode" msgid="5684504058192921098">"මෝටර් රථ ආකාරය ක්‍රියාත්මක කරන්න"</string>
+    <string name="permdesc_enableCarMode" msgid="4853187425751419467">"කාර් ආකාරය සබල කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"වෙනත් යෙදුම් වැසීම"</string>
+    <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"අනෙක් යෙදුම්වල පසුබිම් ක්‍රියාවලි අවසන් කිරීමට යෙදුමට අවසර දෙන්න. අනෙක් යෙදුම් ධාවනය නැවතීමට මෙය හේතුවක් වේ."</string>
+    <string name="permlab_forceStopPackages" msgid="2329627428832067700">"වෙනත් යෙදුම් බලෙන් නවත්වන්න"</string>
+    <string name="permdesc_forceStopPackages" msgid="5253157296183940812">"යෙදුමට බලෙන් අනෙක් යෙදුම් නැවතීමට අවසර දෙන්න."</string>
+    <string name="permlab_forceBack" msgid="652935204072584616">"යෙදුම වැසීමට බල කිරීම"</string>
+    <string name="permdesc_forceBack" msgid="3892295830419513623">"නැවතීමට පෙරබිමේ ඇති ඕනෑම ක්‍රියාවක් බලෙන් නැවතීමට සහ පිටුපසට යාමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="permlab_dump" msgid="1681799862438954752">"පද්ධති අභ්‍යන්තර තත්වය සොයා ලබා ගන්න"</string>
+    <string name="permdesc_dump" msgid="1778299088692290329">"පද්ධතියේ අභ්‍යන්තර තත්වය ලැබීමට යෙදුමට අවසර දෙන්න. ඔවුන් සාමාන්‍යයෙන් භාවිත නොකරන විවිධත්වයකින් යුත් පුද්ගලික සහ ආරක්‍ෂිත තොරතුරු අනිෂ්ට යෙදුම් සොයා ලබා ගත හැක."</string>
+    <string name="permlab_retrieve_window_content" msgid="8022588608994589938">"තිර අන්තර්ගතය සොයා ලබාගැනීම"</string>
+    <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"ක්‍රියාකාරී කවුළුවක අන්තර්ගතය ලබාගැනීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් විසින් සම්පූර්ණ කවුළු අන්තර්ගතය ලබාගැනීම සහ මුරපදය හැර ඒවායෙහි පෙළ පරික්ෂා කිරීම සිදුකරයි."</string>
+    <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"ප්‍රවේශ්‍යතාවය තාවකාලිකව සබල කිරීම"</string>
+    <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"උපාංගය වෙත ප‍්‍රවේශ්‍යතාව තාවකාලිකව සක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. පරිශීලක අවධානයකින් තොරව අනිෂ්ට යෙදුම් ප‍්‍රවේශ්‍යතාව සක්‍රිය කළ හැක."</string>
+    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"තිර තොරතුරු සොයා ලබාගැනීම"</string>
+    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"කවුළු කළමනාකරු මගින් කවුළුව ගැන තොරතුරු සොයා ලබාගැනීමට යෙදුමට අවසර දෙන්න. අභ්‍යන්තර පද්ධති භාවිතය සඳහා කැමති තොරතුරු අනිෂ්ට යෙදුම් විසින් ලබා ගත හැක."</string>
+    <string name="permlab_filter_events" msgid="8675535648807427389">"සිදුවීම් පෙරන්න"</string>
+    <string name="permdesc_filter_events" msgid="8006236315888347680">"පිටත් කිරීමට පෙර සියලු පරිශීලක සිදුවීම්වල ප්‍රවාහයක් පෙරීමට යොදා ගන්නා ආදාන පෙරීමක් ලියාපදිංචි කිරීමට යෙදුමට අවසර දෙන්න. පරිශීලක මැදිහත් වීමකින් තොරව පද්ධති UI අනිෂ්ට යෙදුම් පාලනය කරයි."</string>
+    <string name="permlab_magnify_display" msgid="5973626738170618775">"දර්ශනය විශාලනය කරන්න"</string>
+    <string name="permdesc_magnify_display" msgid="7121235684515003792">"දසුනේ අන්තර්ගතය විශාල කිරීමට යෙදුමට අවසර දෙන්න. ඇතැම් විට අනිෂ්ට යෙදුම්, උපාංගය භාවිතා කළ නොහැකි බවට පත් කරමින් දසුනේ අන්තර්ගතය වෙනස් කළ හැක."</string>
+    <string name="permlab_shutdown" msgid="7185747824038909016">"අඩ වශයෙන් වැහීම"</string>
+    <string name="permdesc_shutdown" msgid="7046500838746291775">"ක්‍රියාකාරකම් කළමනාකරු වැහීමේ තත්වයට දමන්න. සම්පූර්ණ වැහීමකට පත් නොකරන්න."</string>
+    <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"යෙදුම් මාරු වීම වැළක්වීම"</string>
+    <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"වෙනත් යෙදුමක් වෙත පරිශීලකයාව මාරු වීම වළක්වයි."</string>
+    <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"පවතින යෙදුමේ තොරතුරු ලබාගැනීම"</string>
+    <string name="permdesc_getTopActivityInfo" msgid="8153651434145132505">"තිරයේ පෙරබිම තුළ තිබෙන දැන් පවත්නා යෙදුමේ සහ සේවාවල පෞද්ගලික තොරතුරු ලබාගැනීමට දරන්නාට අවසර දෙන්න."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"සියලු යෙදුම් දියත් කිරීම් නිරීක්ෂණය සහ පාලනය කිරීම"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"පද්ධතිය ක්‍රියාකාරකම් දියත් කරන්නේ කෙසේදැයි නිරීක්ෂණයට සහ පාලනයට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් මගින් පද්ධතිය සම්පූර්ණයෙන්ම සම්මුතියකට එළඹිය හැක. වර්ධනය සඳහා පමණක් මෙම අවසරය අවශ්‍ය වෙයි, සාමාන්‍ය භාවිතය සඳහා කිසි විටෙකත් අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"පැකේජ ඉවත් කිරීමේ ප්‍රචාරණයක් යවන්න"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"යෙදුම් පැකේජයක් ඉවත්කොට ඇති බවට දැනුම්දීමක් විකාශනයට යෙදුමට අවසර දෙයි. ධාවනය වන අනෙකුත් යෙදුමක් නැති කිරීමට අනිෂ්ට යෙදුම් විසින් මෙය භාවිත කළ හැක."</string>
+    <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"SMS-ලැබීම විකාශන යැවීම"</string>
+    <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"SMS පණිවිඩයක් හරහා ලැබුණු දැනුම්දීමක් ප්‍රචාරණයට යෙදුමට අවසර දෙන්න. පැමිණෙන SMS පණිවිඩ වංචා කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක."</string>
+    <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH-ලැබීම විකාශන යැවීම"</string>
+    <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"WAP PUSH පණිවුඩයක් ලැබී ඇති බවට දැනුම්දීමක් විකාශනය කිරීමට යෙදුමට අවසර දෙන්න. වංචාකාරී MMS පණිවුඩ ලැබීම් හෝ නිහඬව ඕනෑම වෙබ් පිටුවක අන්තර්ගතය අනිෂ්ට විචල්‍යවලින් ඉවත් කිරීමට, අනිෂ්ට යෙදුම් විසින් මෙය භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ධාවන ක්‍රියාවලි ගණන සීමා කිරීම"</string>
+    <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"ධාවනය වන උපරිම ක්‍රියාවලි ගණන පාලනය කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"පසුබිම් යෙදුම් වලට වැසීමට බලකරන්න"</string>
+    <string name="permdesc_setAlwaysFinish" msgid="7471310652868841499">"පසුබිමට පිවිසෙනවාත් සමඟම ක්‍රියාකාරකම් නැවතීම පාලනයට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසිසේත් අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_batteryStats" msgid="2789610673514103364">"බැටරි සංඛ්‍යාන කියවීම"</string>
+    <string name="permdesc_batteryStats" msgid="5897346582882915114">"වර්තමාන පහළ මට්ටමේ බැටරිය භාවිතා දත්ත කියවීමට යෙදුමට අවසර දෙන්න. ඔබ භාවිත කරන යෙදුම් මොනවා දැයි ගැන විස්තරාත්මක තොරතුරු ගැන දැන ගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_updateBatteryStats" msgid="3719689764536379557">"බැටරි සංඛ්‍යාන වෙනස් කිරීම"</string>
+    <string name="permdesc_updateBatteryStats" msgid="6862817857178025002">"එකතු කරගන්නා ලද බැටරි සංඛ්‍යාන වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් වල භාවිතයට නොවේ."</string>
+    <string name="permlab_getAppOpsStats" msgid="1508779687436585744">"යෙදුමේ විකල්ප සංඛ්‍යාංක සොයා ලබාගැනීම"</string>
+    <string name="permdesc_getAppOpsStats" msgid="6243887041577912877">"එකතු කරගත් යෙදුම් ක්‍රියාකාරිත්ව සංඛ්‍යා ලේඛන වෙනස් කිරීමට උපාංගයට ඉඩ දෙන්න. සාමාන්‍ය උපාංග භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"යෙදුම් විකල්ප සංඛ්‍යාංක වෙනස් කිරීම"</string>
+    <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"එකතු කරගත් යෙදුම් ක්‍රියාකාරිත්ව සංඛ්‍යා ලේඛන වෙනස් කිරීමට යෙදුමට ඉඩ දෙන්න. සාමාන්‍ය යෙදුම් භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_backup" msgid="470013022865453920">"පද්ධති උපස්ථ පාලනය කරන්න සහ නැවත පිහිටුවන්න"</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"පද්ධතියේ උපස්ථය සහ උපක්‍රම නැවත පිහිටුවීම පාලනයට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"සම්පූර්ණ උපස්ථය හෝ මෙහෙයුම් නැවත පිහිටුවීම සනාථ කිරීම"</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"පූර්ණ උපස්ථ තහවුරුකිරීම් UI පුරන්නට උපකරණයට ඉඩ දෙන්න. කිසිම යෙදුමක් භාවිතා නොකරනු ඇත."</string>
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"අවසර නොලත් කවුළුව දර්ශනය කරන්න"</string>
+    <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"අභ්‍යන්තර පද්ධති පරිශීලක අතුරුමුහුණත් විසින් භාවිතා කිරීමට බලාපොරොත්තු වන කවුළු නිර්මාණය කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"වෙනත් යෙදුම් උඩින් අඳින්න"</string>
+    <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"අනෙක් යෙදුම් මත හෝ පරිශීලක අතුරු මුහුණත් කොටස්වල ඇඳීමට යෙදුමට ඉඩ දෙන්න. එය ඔබේ භාවිතයේ ඇති ඕනෑම යෙදුමක මුහුණත සමග සම්බන්ධ වීමට හෝ අනෙක් යෙදුම් ගැන ඔබට පෙනෙන ආකාරය වෙනස් කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_setAnimationScale" msgid="2805103241153907174">"ගෝලීය සජීවන වේගය වෙනස් කරන්න"</string>
+    <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"ඕනෑම වෙලාවක පොදු සජීවීකරණ වේගය (වේගවත් හෝ මන්දගාමී සජීවීකරණ) වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_manageAppTokens" msgid="1286505717050121370">"යෙදුම් ටෝකන කළමනාකරණය කිරීම"</string>
+    <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"සාමාන්‍ය Z පටිපාටිය මඟහැරයමින් යෙදුම්වලට අයිති ටෝකන් පත් නිර්මාණයට සහ කළමනාකරණයට යෙදුම්වලට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසිසේත් අවශ්‍ය නොවේ."</string>
+    <string name="permlab_freezeScreen" msgid="4708181184441880175">"තිරය නිශ්චල කරන්න"</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"සම්පූර්ණ තිර සංක්‍රමණය සඳහා තිරය තාවකාලිකව මුදවිමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_injectEvents" msgid="1378746584023586600">"යතුරු සහ පාලන බොත්තම් ඔබන්න"</string>
+    <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"තමන්ගේ ආදාන සිදුවීම් (යතුරු එබිම් , ආදී ) අනෙකුත් යෙදුම්වලට භාරදීමට යෙදුමට ඉඩ දෙන්න. අනිෂ්ට යෙදුම් මෙය ටැබ්ලටය ලබා ගැනීමට භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"වෙනත් යෙදුම්වලට එහි ආදාන සිදුවීම් (යතුරු එබීම්, යනාදිය.) ආදිය යැවීමට යෙදුමට අවසර දෙන්න. දුරකථනය අත්කර ගැනීම අනිෂ්ට යෙදුම් මෙය භාවිත කරයි."</string>
+    <string name="permlab_readInputState" msgid="469428900041249234">"ඔබ ටයිප් කරන දෙය සහ ඔබ ගන්නා ක්‍රියාවන් පටිගත කරන්න"</string>
+    <string name="permdesc_readInputState" msgid="8387754901688728043">"මුරපදය ටයිප් කිරීම වැනි අනෙකුත් යෙදුම් සමඟ අන්තර්ක්‍රියාකාරී වනවිට යනාදී ඔබ ඔබන යතුරු දැකීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අදාළ නොවේ."</string>
+    <string name="permlab_bindInputMethod" msgid="3360064620230515776">"ආදාන ක්‍රමයක් වෙත බඳින්න"</string>
+    <string name="permdesc_bindInputMethod" msgid="3250440322807286331">"ආදාන ක්‍රමය ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindAccessibilityService" msgid="5357733942556031593">"ප‍්‍රවේශ්‍යතා සේවාවක් වෙත බදින්න"</string>
+    <string name="permdesc_bindAccessibilityService" msgid="7034615928609331368">"ප‍්‍රවේශ්‍යතා සේවාවේ ඉහළ මට්ටමේ අතුරුමුහුණතට බැඳීමට දරන්නාට අවසර දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිවිටක අවශ්‍ය නොවේ."</string>
+    <string name="permlab_bindPrintService" msgid="8462815179572748761">"මුද්‍රණ සේවාවකට බද්ධ වී ඇත"</string>
+    <string name="permdesc_bindPrintService" msgid="7960067623209111135">"මුද්‍රණ සේවාව ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_accessAllPrintJobs" msgid="1120792468465711159">"සියලු මුද්‍රණ කාර්යයන් වෙත පිවිසෙන්න"</string>
+    <string name="permdesc_accessAllPrintJobs" msgid="2978185311041864762">"වෙනත් යෙදුමකින් සෑදු මුද්‍රණ කාර්ය වෙත පිවිසීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindNfcService" msgid="2752731300419410724">"NFC සේවාව වෙත බැඳෙන්න"</string>
+    <string name="permdesc_bindNfcService" msgid="6120647629174066862">"NFC කාඩ් පත් ආදර්ශනය කරන යෙදුම් රඳවනයට සම්බන්ධ වීමට ඉඩ දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindTextService" msgid="7358378401915287938">"පෙළ සේවාවකට බඳින්න"</string>
+    <string name="permdesc_bindTextService" msgid="8151968910973998670">"කෙටි පණිවිඩ සේවාවක (උදා. SpellCheckerService) ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindVpnService" msgid="4708596021161473255">"VPN සේවාවකට බැඳීම"</string>
+    <string name="permdesc_bindVpnService" msgid="2067845564581693905">"VPN සේවාව ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindWallpaper" msgid="8716400279937856462">"බිතුපත වෙත බඳින්න"</string>
+    <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"බිතුපත ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"විජට සේවාවකට බඳින්න"</string>
+    <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"විජට් සේවාව ඉහල මට්ටමේ අතුරු මුහුණතක් වෙත සම්බන්ධ කිරීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"උපාංග පරිපාලක සමඟ අන්තර්ක්‍රියාකාරී වීම"</string>
+    <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"උපාංග පාලකයා වෙතට අභිප්‍රායයන් යැවීමට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වලට කිසි විටෙක අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"උපාංග පරිපාලකයෙක් එක් කිරීම හෝ ඉවත් කිරීම"</string>
+    <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"දරන්නාට උපාංග පරිපාලකයින් එක් කිරීමට හෝ ඉවත් කිරීමට අවසර දේ. සාමාන්‍ය යෙදුම් වලට කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="permlab_setOrientation" msgid="3365947717163866844">"තිර දිශානතිය වෙනස් කිරීම"</string>
+    <string name="permdesc_setOrientation" msgid="3046126619316671476">"තිරයේ භ්‍රමණය ඕනෑම වේලාවක වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවනු ඇත."</string>
+    <string name="permlab_setPointerSpeed" msgid="9175371613322562934">"දර්ශකයේ වේගය වෙනස් කිරීම"</string>
+    <string name="permdesc_setPointerSpeed" msgid="6866563234274104233">"මූසිකයේ හෝ ට්‍රැක්පෑඩයේ වේගය ඕනෑම මොහොතක වෙනස් කිරීමට උපාංගයට ඉඩ දෙන්න. සාමාන්‍ය උපාංගයන් සඳහා කිසිදා අවශ්‍ය නොවනු ඇත."</string>
+    <string name="permlab_setKeyboardLayout" msgid="4778731703600909340">"යතුරු පුවරු පිරිසැලැස්ම වෙනස් කිරීම"</string>
+    <string name="permdesc_setKeyboardLayout" msgid="8480016771134175879">"යතුරුපුවරු මුහුණත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_signalPersistentProcesses" msgid="4539002991947376659">"යෙදුම් වෙත Linux සංඥා යැවීම"</string>
+    <string name="permdesc_signalPersistentProcesses" msgid="4896992079182649141">"පවතින සියලු ක්‍රියාවලි වෙත සැපයුම් සංඥා ඉල්ලවිමට යෙදුමට අවසර දේ."</string>
+    <string name="permlab_persistentActivity" msgid="8841113627955563938">"යෙදුම සැමවිටම ධාවනය කරන්න"</string>
+    <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"මතකයේ පවතින එහි කොටස් නොනැසී පැවතීමට යෙදුමට අවසර දෙන්න. වෙනත් යෙදුම් වලට මතකය සීමා කිරීමෙන් ටැබ්ලටය පමා කිරීම මගින්  මෙමගින් කළ හැක."</string>
+    <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"යෙදුමට තම කොටස් මතකය තුල නොබිඳීව රඳා පවත්වාගෙන යාමට අවසර දෙන්න. මෙය දුරකථනය මන්දගාමී කරමින් අනෙකුත් උපාංගයන් සඳහා ඉතිරි මතකය සීමා කිරීමට හැක."</string>
+    <string name="permlab_deletePackages" msgid="184385129537705938">"යෙදුම් මකන්න"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"Android පැකේජ මැකීමට යෙදුමට අවසර දෙන්න. වැදගත් යෙදුම් මැකීමට අනිෂ්ට යෙදුම් විසින් මෙය භාවිතා කිරීමට ඉඩ ඇත."</string>
+    <string name="permlab_clearAppUserData" msgid="274109191845842756">"යෙදුමේ වෙනත් දත්ත මකන්න"</string>
+    <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"පරිශීලක දත්ත හිස් කිරීමට යෙදුමකට ඉඩ දේ."</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"අනෙක් යෙදුම්වල හැඹිලි මකන්න"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"හැඹිලි ගොනු මැකීමට අවසර යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_getPackageSize" msgid="7472921768357981986">"යෙදුම් ආචයනයේ ඉඩ ප්‍රමාණය මැනීම"</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"යෙදුමකට එහි කේතය, දත්ත සහ හැඹිලි ප්‍රමාණ ලබාගැනීමට අවසර දෙන්න."</string>
+    <string name="permlab_installPackages" msgid="2199128482820306924">"යෙදුම් කෙළින්ම ස්ථාපනය කිරීම"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"නව හෝ යාවත්කාලින කරන ලද Android පැකේජයන් ස්ථාපනය කිරීමට ඉඩ දෙන්න. බලසහිත අවසර තීන්දු සමග නව යෙදුම් එකතු කිරීමට අනිෂ්ට යෙදුම්වලට මෙය භාවිතා කිරීමට ඉඩ තිබේ."</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"යෙදුමේ සියලුම හැඹිලි දත්ත මකන්න"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"අනෙක් යෙදුම්වල හැඹිලි නාමාවලි තුළ ඇති ගොනු මැකීමෙන් යෙදුමට ටැබ්ලට ආචයනය නිදහස් කිරීමට අවසර දෙන්න. මෙමගින් අනෙක් යෙදුම්වලට ඒවායේ දත්ත නැවත ලබා ගැනීමට අවශ්‍ය වන නිසා, ඒවායේ ආරම්භය තවත් සෙමින් සිදුවීමට ඉඩ ඇත."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"අනෙක් යෙදුම්වල හැඹිලි නාමාවලි තුළ ඇති ගොනු මැකීමෙන් යෙදුමට දුරකථන ආචයනය නිදහස් කිරීමට අවසර දෙන්න. මෙමඟින් අනෙක් යෙදුම්වලට ඒවායේ දත්ත නැවත ලබා ගැනීමට අවශ්‍ය වන නිසා, ඒවායේ ආරම්භය තවත් සෙමින් සිදුවීමට ඉඩ ඇත."</string>
+    <string name="permlab_movePackage" msgid="3289890271645921411">"යෙදුම් සම්පත් ගෙන යාම"</string>
+    <string name="permdesc_movePackage" msgid="319562217778244524">"අභ්‍යන්තර සහ බාහිර මාධ්‍යයන්ගෙන් යෙදුමේ සම්පත් ගෙනයාමට සහ යෙදුමේ සම්පත් වලින් අභ්‍යන්තර සහ බාහිර මාධ්‍යයන්ට යෙදුමේ සම්පත් ගෙනයාමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_readLogs" msgid="6615778543198967614">"සංවේදී ලොග් දත්ත කියවීම"</string>
+    <string name="permdesc_readLogs" product="tablet" msgid="82061313293455151">"පද්ධතියේ විවිධ ලොග් ගොනු කියවීමට යෙදුමට අවසර දෙන්න. පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව ඔබ ටැබ්ලටයෙන් කුමක් කරන්නෙහිද යනාදී සාමාන්‍ය තොරතුරු සෙවීමට මෙයට අවසර දෙන්න."</string>
+    <string name="permdesc_readLogs" product="default" msgid="2063438140241560443">"පද්ධතියේ විවිධ ලොග් ගොනු කියවීමට යෙදුමට අවසර දෙන්න. පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව ඔබ දුරකථනයෙන් කුමක් කරන්නෙහිද යනාදී සාමාන්‍ය තොරතුරු සෙවීමට මෙයට අවසර දෙන්න."</string>
+    <string name="permlab_anyCodecForPlayback" msgid="715805555823881818">"නැවත ධාවනය සඳහා ඕනෑම මාධ්‍ය විකේතකයක් හාවිතා කරන්න"</string>
+    <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"නැවත ධාවනය සඳහා විකේතනය කිරීමට ඕනෑම ස්ථාපිත මාධ්‍ය විකේතකයක් භාවිතයට යෙදුමට අවසර දෙන්න."</string>
+    <!-- no translation found for permlab_manageCaCertificates (1678391896786882014) -->
+    <skip />
+    <!-- no translation found for permdesc_manageCaCertificates (4015644047196937014) -->
+    <skip />
+    <string name="permlab_diagnostic" msgid="8076743953908000342">"Diag විසින් හිමිකාරත්වය දරණ සම්පත්වලට කියවීම/ ලිවිම"</string>
+    <string name="permdesc_diagnostic" msgid="6608295692002452283">"Diag කණ්ඩායමට අයිති ඕනෑම සම්පතක් කියවීමට සහ ලිවීමට යෙදුමට අවසර දෙන්න. උදාහරණයක් ලෙස /dev තුල ඇති ගොනු. මෙයට පද්ධති ස්ථායිතාවට සහ ආරක්ෂාවට බලපෑම් කිරීමට හැකියාවක් ඇත. නිෂ්පාදක හෝ ක්‍රියාකරු විසින් දෘඩාංග-විශේෂිත දෝෂ නිර්ණය සඳහා පමණක් මෙය යොදාගත යුතුය."</string>
+    <string name="permlab_changeComponentState" msgid="6335576775711095931">"යෙදුම් අංග සබල හෝ අබල කිරීම"</string>
+    <string name="permdesc_changeComponentState" product="tablet" msgid="8887435740982237294">"වෙනත් යෙදුමක අංගයක් සබල ද නැද්ද යන්න වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. වැදගත් ටැබ්ලට් අවශ්‍යතා අබල කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක. මෙම අවසරය සැලකිල්ලෙන් භාවිතා කළ යුතුය, භාවිත නොකරන, අස්ථිර හෝ අස්ථායි තත්වයට යෙදුම පත් කිරීමට එයට හැකිය."</string>
+    <string name="permdesc_changeComponentState" product="default" msgid="1827232484416505615">"වෙනත් යෙදුමක අංගයක් සබල ද නැද්ද යන්න වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. වැදගත් දුරකථන අවශ්‍යතා අක්‍රිය කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කළ හැක. මෙම අවසරය සැලකිල්ලෙන් භාවිත කළ යුතුය, භාවිත නොකරන, අස්ථිර හෝ අස්ථායි තත්වයට යෙදුම පත් කිරීමට එයට හැකිය."</string>
+    <string name="permlab_grantRevokePermissions" msgid="4627315351093508795">"අවසර ප්‍රදානය කිරීම හෝ අහෝසි කිරීම"</string>
+    <string name="permdesc_grantRevokePermissions" msgid="4088642654085850662">"යෙදුමකට එයට හෝ අනෙක් යෙදුම් වලට විශේෂිත අවසර ප්‍රදානයට හෝ අහෝසි කිරීමට අවසර දෙන්න. අනිෂ්ට යෙදුම්, ඒවාට අවසර ප්‍රදානය නොකළ ගුණාංග වලට ප්‍රවේශ වීමට මෙය භාවිතා කළ හැක."</string>
+    <string name="permlab_setPreferredApplications" msgid="8463181628695396391">"අභිරුචි යෙදුම් සකසන්න"</string>
+    <string name="permdesc_setPreferredApplications" msgid="4973986762241783712">"ඔබගේ අභිරුචි යෙදුම් වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ ධාවනය වන යෙදුම් වෙනස් කිරීම, පවතින යෙදුම් වලින් දත්ත එකතු කිරීම, ප්‍රෝඩා කිරීම වැනි දේ අනිෂ්ට යෙදුම් නිශ්ශබදවම සිදු කරයි."</string>
+    <string name="permlab_writeSettings" msgid="2226195290955224730">"පද්ධති සැකසීම් වෙනස් කිරීම"</string>
+    <string name="permdesc_writeSettings" msgid="7775723441558907181">"පද්ධති සැකසීම් දත්ත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. අනිෂ්ට යෙදුම් ඔබගේ පද්ධති වින්‍යාස දෝෂ ගැන්විය හැක."</string>
+    <string name="permlab_writeSecureSettings" msgid="204676251876718288">"ආරක්‍ෂිත පද්ධති සැකසීම් වෙනස් කරන්න"</string>
+    <string name="permdesc_writeSecureSettings" msgid="8159535613020137391">"පද්ධතියේ ආරක්‍ෂිත දත්ත වෙනස් කිරීමට උපාංගයට අවසර දෙන්න. සාමාන්‍ය උපාංග සඳහා භාවිතයට නොවේ."</string>
+    <string name="permlab_writeGservices" msgid="2149426664226152185">"Google සේවා සිතියම වෙනස් කරන්න"</string>
+    <string name="permdesc_writeGservices" msgid="1287309437638380229">"Google සේවා සිතියම වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා භාවිතයට නොවෙයි."</string>
+    <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"ආරම්භයේදී ධාවනය කිරීම"</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"පද්ධතිය ඇරඹුම අවසන් වූ වහාම යෙදුම ආරම්භ වීමට යෙදුමට අවසර දෙන්න. ටැබ්ලටය ආරම්භ කිරීමට මෙමඟින් පමා කළ හැකි අතර සැමවිටම ධාවනය වන නිසා සම්පූර්ණ ටැබ්ලටයම ප්‍රමාද කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"පද්ධතිය ඇරඹුම අවසන් වූ වහාම යෙදුම ආරම්භ වීමට යෙදුමට අවසර දෙන්න. දුරකථනය ආරම්භ කිරීමට මෙමඟින් පමා කළ හැකි අතර සැමවිටම ධාවනය වන නිසා සම්පූර්ණ දුරකථනයේම ක්‍රියාකාරිත්වය ප්‍රමාද කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_broadcastSticky" msgid="7919126372606881614">"බැඳුණු විකාශනය යැවීම"</string>
+    <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"ප්‍රචාරණයට පසුවද පවතින, ප්‍රචාරණයන් යැවීමට යෙදුමට අවසර දෙන්න. වැඩිපුර මතකය භාවිතය හේතු කොට, අධික භාවිතය මඟින් ටැබ්ලටය පමා කිරීම හෝ අස්ථිර කළ හැක."</string>
+    <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"ප්‍රචාරණයට පසුවද පවතින, ප්‍රචාරණයන් යැවීමට යෙදුමට අවසර දෙන්න. වැඩිපුර මතකය භාවිතය හේතු කොට, අධික භාවිතය මඟින් දුරකථනය පමා කිරීම හෝ අස්ථිර කළ හැක."</string>
+    <string name="permlab_readContacts" msgid="8348481131899886131">"ඔබගේ සම්බන්ධතා කියවීම"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"සඳහන් පුද්ගලයන් හට ඔබ ඇමතුම් ගත්, ඊ-තැපැල්, හෝ  අනෙකුත් ආකාර වලින් සන්නිවේදනය කරගත් සංඛ්‍යතද ඇතුළුව, ඔබගේ ටැබ්ලටයේ ගබඩාවී ඇති සම්බන්ධතා පිළිබඳ දත්ත කියවීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය මඟින් යෙදුම්වලට ඔබගේ සම්බන්ධතා පිළිබඳ දත්ත සුරැකීමට ඉඩ ලබා දෙන අතර, අනිෂ්ට යෙදුම් විසින් ඔබ නොදැනුවත්වම සම්බන්ධතා දත්ත බෙදා ගැනීමට ඉඩ ඇත."</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"නියමිත පුද්ගලයන් සමග ඔබ ඇමතු, ඊ-තැපැල් කළ හෝ වෙනත් ආකාරයකින් සන්නිවේදනය කළ සංඛ්‍යාතය ඇතුලත් ඔබගේ දුරකථනයේ ආචයනය කරන ලද ඔබගේ සම්බන්ධතා ගැන දත්ත කියවීමට යෙදුමට අවසර දෙන්න. ඔබගේ සම්බන්ධතා දත්ත උපස්ථ කිරීමට මෙම අවසරය යෙදුමට අවසර දෙන අතර ඔබගේ දැනුමකින් තොරව අනිෂ්ට යෙදුම් සම්බන්ධතා දත්ත බෙදාගැනීම කළ හැක."</string>
+    <string name="permlab_writeContacts" msgid="5107492086416793544">"ඔබගේ සම්බන්ධතා වෙනස් කිරීම"</string>
+    <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"නියමිත පුද්ගලයන්ට ඔබ ඇමතූ, ඊ-තැපැල් කළ හෝ ඇමතුම් කළ සංඛ්‍යාත ඇතුලත් ඔබගේ ටැබ්ලටයේ ආචයනය කරන ලද සම්බන්ධතා (ලිපින) දත්ත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙන් යෙදුමට සම්බන්ධතා දත්ත මැකීමට අවසර දෙයි."</string>
+    <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"සඳහන් පුද්ගලයන්ට ඔබ ඇමතූ, ඊ-තැපැල් කළ හෝ ඇමතුම් කළ සංඛ්‍යාන ඇතුලත් ඔබගේ දුරකථනයේ ආචයනය කරන ලද සම්බන්ධතා (ලිපින) දත්ත වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරයෙන් යෙදුමට සම්බන්ධතා දත්ත මැකීමට අවසර දෙයි."</string>
+    <string name="permlab_readCallLog" msgid="3478133184624102739">"ඇමතුම් ලොගය කියවන්න"</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"පැමිණෙන සහ පිටවන ඇමතුම් ගැන දත්ත ඇතුළත්, ඔබගේ ටැබ්ලටයේ ඇමතුම් ලොග කියවීමට යෙදුමට අවසර දෙන්න. ඔබගේ ඇමතුම් ලොග දත්ත සුරක්ෂිත කිරීමට මෙම අවසරය යෙදුම්වලට අවසර දෙයි සහ ඔබගේ දැනුමකින් තොරව ඇමතුම් ලොග දත්ත අනිෂ්ට යෙදුම් බෙදා ගැනීම කළ හැක."</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"ලැබෙන සහ පිටවන ඇමතුම් පිළිබඳ දත්ත ඇතුළත්ව ඔබගේ දුරකථනයේ ඇමතුම් ලොග් කියවීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය ඔබගේ ඇමතුම් ලොග් දත්ත උපස්ථ කිරීමට යෙදුමට ඉඩදෙන අතර ඔබගේ අනුදැනුමකින් තොරව අනිෂ්ට යෙදුම් විසින් ඇමතුම් ලොග් දත්ත බෙදාගැනීම කළ හැක."</string>
+    <string name="permlab_writeCallLog" msgid="8552045664743499354">"ඇමතුම් ලොගය ලිවීම"</string>
+    <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"ලැබෙන ඇමතුම් සහ පිටවන ඇමතුම් දත්ත ඇතුළත්ව ඔබගේ ටැබ්ලටයේ ඇමතුම් ලොගය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ ඇමතුම් ලොගය මැකීමට හෝ වෙනස් කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිතා කෙරේ."</string>
+    <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"පැමිණෙන සහ පිටවෙන ඇමතුම් දත්ත ඇතුළුව ඔබගේ දුරකථනයේ ඇමතුම් ලොගය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ ඇමතුම් ලොගය මැකීමට හෝ වෙනස් කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කල හැක."</string>
+    <string name="permlab_readProfile" msgid="4701889852612716678">"ඔබගේ සම්බන්ධතා පත කියවන්න"</string>
+    <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"ඔබගේ නම සම්බන්ධතා තොරතුරු ආදී ඔබගේ උපාංගයේ ගබඩා වී ඇති පුද්ගලික පැතිකඩ තොරතුරු කියවීමට යෙදුමට අවසර දෙන්න. මෙහි තේරුම යෙදුමට ඔබව හඳුනා ගැනීමට හැකි වන බව සහ ඔබගේ පුද්ගලික තොරතුරු අනෙක් අයට යැවීමට ද හැකි වීමයි."</string>
+    <string name="permlab_writeProfile" msgid="907793628777397643">"ඔබගේ සම්බන්ධතා පත වෙනස් කිරීම"</string>
+    <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"ඔබගේ නම සහ සම්බන්ධතා තොරතුරු වැනි ඔබගේ උපාංගයේ ආචයනය කරන ලද පුද්ගලික පැතිකඩ තොරතුරු වෙනස් කිරීමට හෝ එකතු කිරීමට යෙදුමට අවසර දෙන්න. මෙමගින් යෙදුමට ඔබව හඳුනා ගත හැකි අතර අනෙක් අයට ඔබගේ පැතිකඩ තොරතුරු යැවිය හැකි බව කියවෙයි."</string>
+    <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"ඔබගේ සමාජ ප්‍රවාහය කියවන්න"</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"ඔබගේ සහ ඔබගේ යහළුවන්ගේ සමාජ යාවත්කාලීනයන් වෙත පිවිසීමට හෝ සමමුහුර්ත කිරීමට යෙදුමට අවසර දෙන්න. තොරතුරු බෙදා ගැනීමේ දී සැලකිලිමත් වන්න -- විශ්වාසයකින් තොරව සමාජ ජාලවල ඔබගේ සහ ඔබගේ යහළුවන් අතර සන්නිවේදන කියවීමට මෙමගින් යෙදුමට අවසර දෙයි. සටහන: සියලු සමාජ ජාලවල මෙම අවසරය බල නොකරයි."</string>
+    <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ඔබගේ සමාජ ප්‍රවාහය වෙත ලිවීම"</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"ඔබගේ යහළුවන්ගේ සමාජ යාවත්කාලීනයන් පෙන්වීමට යෙදුමට අවසර දෙන්න. තොරතුරු බෙදා ගැනීමේදී සැලකිලිමත් වන්න -- යහළුවෙක්ගෙන් පැමිණෙන ලෙස පණිවිඩ නිපදවීමට මෙමඟින් යෙදුමට අවසර දෙන්න. සටහන : සියලු සමාජ ජාල සඳහා මෙම අවසරය බල නොදෙයි."</string>
+    <string name="permlab_readCalendar" msgid="5972727560257612398">"දින දර්ශනයේ සිදුවීම් සහ රහසිගත තොරතුරු කියවීම"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"ඔබගේ ටැබ්ලටය තුල ගබඩා  කර ඇති මිතුරන්ගේ සහ එක්ව ක්‍රියාකරන්නන්ගේ ද ඇතුළුව සියලුම දින දර්ශන සිද්ධි කියවීමට යෙදුමට අවසර දෙන්න. මෙය රහස්‍යභාවය හෝ සංවේදීතාවය නොසලකා ඔබගේ දින දර්ශන දත්ත බෙදා ගැනීමට හෝ සුරැකීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"යහළුවන් සහ සමකාලිනයන් ඇතුලත් ඔබගේ දුරකථනයේ ආචයනය කරන ලද සියලු දින දර්ශන සිදුවීම් කියවීමට යෙදුමට අවසර දෙන්න. විශ්වාසයකින් හෝ සංවේදීතාවකින් තොරව ඔබගේ දින දර්ශන දත්ත බෙදා ගැනීමට හෝ උපස්ථ කිරීමට මෙමගින් යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_writeCalendar" msgid="8438874755193825647">"දින දර්ශන සිද්ධි එකතු කිරීම හෝ වෙනස් කිරීමක් සිදුකර හිමිකරුගේ දැනීමකින් තොරව අමුත්තන්ට ඊ-තැපෑලක් යවීම"</string>
+    <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"යහළුවන් හෝ එකට-වැඩකරන්නන් ඇතුළත්ව ඔබට ටැබ්ලටයේ වෙනස් කළ හැකි සිද්ධි එකතු කිරීමට, ඉවත් කිරීමට, වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙමඟින් දින දර්ශන හිමිකරුවන්ගෙන් පණිවිඩ යවන පරිදි මෙන් මවාපෑමට හෝ හිමිකරුගේ අනුදැනුමකින් තොරව සිද්ධි වෙනස් කිරීමට යෙදුමට අවසර ලැබේ."</string>
+    <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"ඔබගේ යහළුවන් හෝ සමකාලීනයන් ඇතුළත් ඔබගේ දුරකථනයේ ඔබට වෙනස් කළ හැකි සිදු වීම් එකතු කිරීමට, ඉවත් කිරීමට, වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. මෙමගින් දින දර්ශන හිමිකරුවන්ගෙන් පැමිණෙන සේ පෙනෙන පණිවිඩ යැවීමට හෝ හිමිකරුගේ දැනුමකින් තොරව සිදුවීම් වෙනස් කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_accessMockLocation" msgid="8688334974036823330">"පරීක්ෂණ සඳහා ආදර්ශ ස්ථාන මූලාශ්‍ර"</string>
+    <string name="permdesc_accessMockLocation" msgid="5808711039482051824">"පරීක්ෂණයට ව්‍යාජ ස්ථාන මූලාශ්‍ර සාදන්න හෝ නව ස්ථාන සැපයුම්කරුවෙකු ස්ථාපනය කරන්න. GPS හෝ ස්ථාන සැපයුම්කරුවන් ආදී වෙනත් ස්ථාන මූලාශ්‍ර විසින් ලබා දෙන ස්ථානය සහ/හෝ තත්වය ප්‍රතිස්ථාපනය කිරීමට යෙදුමට මෙය අවසර දෙයි."</string>
+    <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"අමතර ස්ථාන සැපයුම්කරු විධාන වෙත ප්‍රවේශ වීම"</string>
+    <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"අමතර ස්ථාන සැපයුම්කරු විධාන වෙත පිවිසීමට යෙදුමට අවසර දෙන්න. GPS හෝ වෙනත් ස්ථාන මූලාශ්‍ර ක්‍රියාවලි වෙත බාධා කිරීමට මෙය අවසර දෙයි."</string>
+    <string name="permlab_installLocationProvider" msgid="6578101199825193873">"ස්ථාන සැපයුම්කරුවෙකු ස්ථාපනයට අවසරය දෙන්න"</string>
+    <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"පරීක්ෂණයට ව්‍යාජ ස්ථාන මූලාශ්‍ර සාදන්න හෝ නව ස්ථාන සැපයුම්කරුවෙකු ස්ථාපනය කරන්න. GPS හෝ ස්ථාන සැපයුම්කරුවන් ආදී වෙනත් ස්ථාන මූලාශ්‍ර විසින් ලබා දෙන ස්ථානය සහ/හෝ තත්ත්වය ප්‍රතිස්ථාපනය කිරීමට යෙදුමට මෙය අවසර දෙයි."</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"නිවැරදි ස්ථානය (GPS සහ ජාලය පදනම් කරගත්)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"ගෝලීය ස්ථානීය පද්ධතිය (GPS) හෝ සෙල් කුළුණු සහ Wi-Fi වැනි ජාල ස්ථානීය ප්‍රභව භාවිතයෙන් ඔබගේ නිවැරදි ස්ථානය ලබාගැනීමට යෙදුම අවසර දෙන්න. යෙදුම් වලට ස්ථානීය සේවා භාවිතා කිරීමට  ඒවා සක්‍රිය විය යුතු වේ. ඔබව සොයා ගැනීමට යෙදුම් මෙය භාවිතා කරන අතර අමතර බැටරි බලයක්ද පරිභෝජනය කරයි."</string>
+    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"ආසන්නතම ස්ථානය (ජාලය-පාදක වූ)"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"ඔබගේ දළ ස්ථානය ලබාගැනීමට යෙදුමට අවසර දෙන්න. සන්නේවේදන කුළුණු සහ Wi-Fi ආදී ජාල ස්ථාන මූලාශ්‍ර භාවිත කරන ස්ථාන සේවා විසින් මෙම ස්ථානය ව්‍යුත්පන්න කර ඇත. යෙදුමට භාවිතය සඳහා මෙම ස්ථාන සේවා සක්‍රිය කළ යුතු අතර ඔබගේ උපාංගය සඳහා පැවතිය යුතුය. ඔබ සිටින තැන දළව හඳුනා ගැනීමට යෙදුම් වලට මෙය භාවිත කළ හැකිය."</string>
+    <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"SurfaceFlinger වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"SurfaceFlinger පහල මට්ටමේ විශේෂාංග භාවිතයට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"රාමු අන්තරාචය කියවීම"</string>
+    <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"රාමු අන්තරාචයනයෙන් අන්තර්ගතයන් කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger වෙත පිවිසෙන්න"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"InputFlinger පහල මට්ටමේ විශේෂාංග භාවිතයට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Wifi සංදර්ශක වින්‍යාස කරන්න"</string>
+    <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"වින්‍යාස කිරීමට සහ Wifi සංදර්ශක වෙත සම්බන්ධ වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Wifi සංදර්ශක පාලනය"</string>
+    <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"Wifi සංදර්ශකයේ පහළ මට්ටමේ විශේෂාංග පාලනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"ශබ්ද ප්‍රතිදානය ග්‍රහණය"</string>
+    <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"යෙදුමට ශබ්ද ප්‍රතිදානය ග්‍රහණය කර හරවා යැවීමට ඉඩ දේ."</string>
+    <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"වීඩියෝ ප්‍රතිදානය"</string>
+    <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"යෙදුමට වීඩියෝ ප්‍රතිදානය ග්‍රහණය කර හරවා යැවීමට ඉඩ දේ."</string>
+    <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"ආරක්‍ෂිත වීඩියෝ ප්‍රතිදානය"</string>
+    <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"යෙදුමට ආරක්‍ෂිත වීඩියෝ ප්‍රතිදානය ග්‍රහණය කර හරවා යැවීමට ඉඩ දේ."</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"ඔබගේ ශ්‍රව්‍ය සැකසීම් වෙනස් කරන්න"</string>
+    <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"ශබ්දය ආදී ගෝලීය ශබ්ද සැකසීම් වෙනස් කිරීමට සහ ප්‍රතිදානය සඳහා භාවිත කරන්නේ කුමන නාදකය දැයි තේරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"ශබ්ද පටිගත කරන්න"</string>
+    <string name="permdesc_recordAudio" msgid="4906839301087980680">"මයික්‍රොෆෝනය මඟින් ශබ්ද පටිගත කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය මඟින් යෙදුමට ඕනෑම වේලාවක ඔබගේ අනුදැනුමකින් තොරව ශබ්ද පටිගත කිරීමට ඉඩ ලබා දේ."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"පින්තූර සහ වීඩියෝ ගන්න"</string>
+    <string name="permdesc_camera" msgid="8497216524735535009">"කැමරාවෙන් පින්තූර ගැනීමට සහ වීඩියෝ කිරීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය මඟින් ඔබගේ අනුදැනුමකින් තොරව ඕනෑම වේලාවකදී කැමරාව භාවිතා කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"කැමරාව භාවිතයේදී LED දර්ශක සම්ප්‍රේෂණය අබල කරන්න"</string>
+    <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"කැමරා භාවිතය පිළිබඳ LED දර්ශකය අක්‍රිය කිරීමට, කලින් පිහිටුවා ඇති පද්ධති යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_brick" product="tablet" msgid="2961292205764488304">"ටැබ්ලටය ස්ථිරවම අබල කිරීම"</string>
+    <string name="permlab_brick" product="default" msgid="8337817093326370537">"දුරකථනය ස්ථිරව අබල කිරීම"</string>
+    <string name="permdesc_brick" product="tablet" msgid="4334818808001699530">"මුළු ටැබ්ලටයම ස්ථිරවම අක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. මෙය ඉතා භයානකයි."</string>
+    <string name="permdesc_brick" product="default" msgid="5788903297627283099">"මුළු දුරකථනයම ස්ථිරවම අක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න. මෙය ඉතා භයානකයි."</string>
+    <string name="permlab_reboot" product="tablet" msgid="3436634972561795002">"ටැබ්ලට් නැවත පණ ගැන්වීමට බල කරන්න"</string>
+    <string name="permlab_reboot" product="default" msgid="2898560872462638242">"දුරකථන නැවත පණ ගැන්වීමට බල කරන්න"</string>
+    <string name="permdesc_reboot" product="tablet" msgid="8172056180063700741">"ටැබ්ලටය නැවත බල ගැන්වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_reboot" product="default" msgid="5326008124289989969">"ටැබ්ලටය නැවත ඇරඹීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_mount_unmount_filesystems" product="nosdcard" msgid="2927361537942591841">"USB ආචයනය ගොනු පද්ධතිය ප්‍රවේශ කිරීම"</string>
+    <string name="permlab_mount_unmount_filesystems" product="default" msgid="4402305049890953810">"SD පත් ගොනු පද්ධතිය ප්‍රවේශ කිරීම"</string>
+    <string name="permdesc_mount_unmount_filesystems" msgid="1829290701658992347">"ඉවත් කළ හැකි ආචයනය සඳහා ගොනු පද්ධති ඈඳීමට සහ ගැලවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_mount_format_filesystems" product="nosdcard" msgid="6227819582624904972">"USB ආචයනය මකන්න"</string>
+    <string name="permlab_mount_format_filesystems" product="default" msgid="262582698639274056">"SD පත මකන්න"</string>
+    <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"ඉවත් කළ හැකි ආචයන ෆෝමැට් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_access" msgid="3411338632002193846">"අභ්‍යන්තර ආචයනය පිළිබඳ තොරතුරු ලබා ගැනීම"</string>
+    <string name="permdesc_asec_access" msgid="3094563844593878548">"අභ්‍යන්තර ආචයනයේ තොරතුරු ලබාගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_create" msgid="6414757234789336327">"අභ්‍යන්තර ආචයනය නිර්මාණය"</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"අභ්‍යන්තර ආචයනය සැදීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_destroy" msgid="526928328301618022">"අභ්‍යන්තර ආචයනය විනාශ කිරීම"</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"අභ්‍යන්තර ආචයනය විනාශ කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"අභ්‍යන්තර ආචයනය නංවීම/ගැලවීම"</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"අභ්‍යන්තර ආචයනය සවි කිරීමට/ගැලවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_asec_rename" msgid="7496633954080472417">"අභ්‍යන්තර ආචයනය නැවත නම් කරන්න"</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"අභ්‍යන්තර ආචයනය නැවත නම් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"කම්පනය පාලනය කිරීම"</string>
+    <string name="permdesc_vibrate" msgid="6284989245902300945">"කම්පකය පාලනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"සැණෙළි ආලෝකය පාලනය කරන්න"</string>
+    <string name="permdesc_flashlight" msgid="6522284794568368310">"සැණෙළිය පාලනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_manageUsb" msgid="1113453430645402723">"USB උපාංග සඳහා කැමැත්ත සහ අවසර කළමනාකරණය කිරීම"</string>
+    <string name="permdesc_manageUsb" msgid="7776155430218239833">"USB උපාංග සඳහා අභිරුචි සහ අවසර කළමනාකරණයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessMtp" msgid="4953468676795917042">"MTP ප්‍රොටොකෝලය ක්‍රියාත්මක කිරීම"</string>
+    <string name="permdesc_accessMtp" msgid="6532961200486791570">"MTP USB ප්‍රොටෝකෝලය ක්‍රියාත්මක කිරීමට කර්නල MTP ධාවකයට ප්‍රවේශ වීමට අවසර දෙන්න."</string>
+    <string name="permlab_hardware_test" msgid="4148290860400659146">"දෘඩාංග පරීක්ෂණය කරන්න"</string>
+    <string name="permdesc_hardware_test" msgid="6597964191208016605">"දෘඩාංග පරීක්ෂා කිරීමේ අරමුණ සඳහා යෙදුමට විවිධ පර්යන්ත පාලනය කිරීමට ඉඩ දෙන්න."</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"දුරකථන අංක වෙත ඍජුවම අමතන්න"</string>
+    <string name="permdesc_callPhone" msgid="3740797576113760827">"ඔබගේ මැදිහත් වීමක් නොමැතිව දුරකථන අංක ඇමතීමට යෙදුමට අවසර දෙන්න. මෙහි ප්‍රතිඑලය වන්නේ අනපේක්ෂිත අයකිරීම් හෝ ඇමතුම් ඇතිවීමයි. මෙයන් හදිසි අංක වලට ඇමතුම් ගැනීමට යෙදුමට අවසර නොදෙන බවට සටහන් කරගන්න. ඔබගේ අනුදැනුමක් නොමැතිව ඇමතුම් ගැනීමෙන් අනිෂ්ට යෙදුම් ඔබගේ මුදල් නිකරුණේ වැය කරයි."</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"ඕනෑම දුරකථන අංකයකට ඍජුවම අමතන්න"</string>
+    <string name="permdesc_callPrivileged" msgid="1689024901509996810">"ඔබගේ මැදිහත්වීමකින් තොරව හදිසි අංක ඇතුළත්ව ඕනෑම දුරකථන අංකයකට ඇමතීමට යෙදුමට අවසර දෙන්න. හදිසි සේවා වෙත අනවශ්‍ය සහ නීතිමය නොවන ඇමතුම ලැබීමට අනිෂ්ට යෙදුම සිදු කළ හැක."</string>
+    <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"CDMA ටැබ්ලට පිහිටුම සෘජුව ඇරඹීම"</string>
+    <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"CDMA දුරකථන පිහිටුම සෘජුව ඇරඹීම"</string>
+    <string name="permdesc_performCdmaProvisioning" msgid="1994193538802314186">"යෙදුමට CDMA ප්‍රතිපාදන ආරම්භ කිරීමට ඉඩදෙන්න. අනිෂ්ට යෙදුම් අනවශ්‍ය ලෙස CDMA ප්‍රතිපාදන ආරම්භ කළ හැක."</string>
+    <string name="permlab_locationUpdates" msgid="7785408253364335740">"ස්ථාන යාවත්කාලීන දැනුම්දීම් පාලනය කරන්න"</string>
+    <string name="permdesc_locationUpdates" msgid="1120741557891438876">"ස්ථානීය යාවත්කාලින දැනුම්දීම් රේඩියෝවෙන් සබල/අබල කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_checkinProperties" msgid="7855259461268734914">"පිරික්සුම් ගුණාංග වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"පිරික්සුම් සේවාව මගින් උත්ශ්‍රේණි කළ ගුණාංග වෙත කියවීම්/ලිවීම් පිවිසුම සඳහා යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් වල භාවිතයට නොවේ."</string>
+    <string name="permlab_bindGadget" msgid="776905339015863471">"විජට් තෝරන්න"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"කුමන විජටය කුමන යෙදුමෙන් භාවිතා කල හැකිද යන්න පද්ධතියට පැවසීමට යෙදුමට අවසර දෙන්න. මෙම අවසරය ඇති යෙදුමකට අනෙක් යෙදුම්වලට පුද්ගලික දත්ත වලට ප්‍රවේශය ලබා දිය හැක. සාමාන්‍ය යෙදුම් වල භාවිතයට නොවේ."</string>
+    <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"දුරකථනයේ තත්වය වෙනස් කිරීම"</string>
+    <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"උපාංගයේ දුරකථන විශේෂාංග පාලනයට යෙදුමට අවසර දෙන්න. මෙම අවසරය ඇති යෙදුමට ඔබට නිවේදනයෙන් තොරව ජාල මාරු කිරීම, දුරකථන රේඩියෝව සක්‍රිය සහ අක්‍රිය කිරීම කළ හැක."</string>
+    <string name="permlab_readPhoneState" msgid="9178228524507610486">"දුරකථනයේ තත්වය සහ අනන්‍යතාවය කියවීම"</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"උපාංගයේ දුරකථන විශේෂාංග වෙත පිවිසීමට යෙදුමට අවසර දෙන්න. ඇමතුම සක්‍රිය වුවත් සහ ඇමතුමකින් දුරස්ථ අංකය සම්බන්ධ වුවත් දුරකථන අංකය සහ උපාංග ID හඳුනා ගැනීමට මෙම අවසරය යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ටැබ්ලටය නින්දෙන් වැළක්වීම"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"දුරකථනය නින්දට යාමෙන් වළකන්න"</string>
+    <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"ටැබ්ලටය නින්දට යාමෙන් වැලැක්වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"දුරකථනය නින්දට යාමෙන් වැලැක්වීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_devicePower" product="tablet" msgid="2787034722616350417">"ටැබ්ලටය සක්‍රිය හෝ අක්‍රිය කරන්න"</string>
+    <string name="permlab_devicePower" product="default" msgid="4928622470980943206">"දුරකථනය බල ගැන්වීම හෝ වැසීම"</string>
+    <string name="permdesc_devicePower" product="tablet" msgid="6689862878984631831">"ටැබ්ලටය සක්‍රිය හෝ අක්‍රිය කිරීමට යෙදුමට අවසර දේ."</string>
+    <string name="permdesc_devicePower" product="default" msgid="6037057348463131032">"දුරකථනය සක්‍රිය සහ අක්‍රිය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_factoryTest" msgid="3715225492696416187">"කර්මාන්තශාලා පරීක්ෂණ ආකාරය තුළ ධාවනය කරන්න"</string>
+    <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"ටැබ්ලටයේ දෘඩාංග වෙත සම්පූර්ණ පිවිසුම සඳහා අවසර දීමෙන් පහළ මට්ටමේ නිපැවුම්කරු පරීක්ෂණයක් ලෙස ධාවනය කරන්න. නිපැවුම්කරු පරීක්ෂණ ආකාරයෙන් ටැබ්ලටයේ ධාවනය වන විට පමණි."</string>
+    <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"දුරකථනයේ දෘඩාංග වෙත සම්පූර්ණ පිවිසුම සඳහා අවසර දීමෙන් පහළ මට්ටමේ නිපැවුම්කරු පරීක්ෂණයක් ලෙස ධාවනය කරන්න. නිපැවුම්කරු පරීක්ෂණ ආකාරයෙන් දුරකථනයේ ධාවනය වන විට පමණි."</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"බිතුපත සැකසීම"</string>
+    <string name="permdesc_setWallpaper" msgid="7373447920977624745">"පද්ධති බිතුපත සැකසීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"ඔබගේ බිතුපතේ ප්‍රමාණය සැකසීම"</string>
+    <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"පද්ධති බිතුපතේ ප්‍රමාණ ඉඟි සකස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_masterClear" msgid="2315750423139697397">"කර්මාන්තශාලා සුපුරුද්දට පද්ධතිය නැවත සකස් කිරීම"</string>
+    <string name="permdesc_masterClear" msgid="3665380492633910226">"සියලු දත්ත මැකීමෙන්, වින්‍යාස කිරීමෙන් සහ යෙදුම් ස්ථාපනයෙන් එහි කර්මාන්ත ශාලා සැකසීම් වෙත පද්ධතිය නැවත සැකසීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_setTime" msgid="2021614829591775646">"වේලාව සැකසීම"</string>
+    <string name="permdesc_setTime" product="tablet" msgid="1896341438151152881">"ටැබ්ලට ඔරලෝසුවේ වේලාව වෙනස් කිරීමට යෙදුමට ඉඩ දෙන්න."</string>
+    <string name="permdesc_setTime" product="default" msgid="1855702730738020">"දුරකථන ඔරලෝසුවේ වේලාව වෙනස් කිරීමට යෙදුමකට ඉඩ දෙන්න."</string>
+    <string name="permlab_setTimeZone" msgid="2945079801013077340">"වේලා කලාපය සැකසීම"</string>
+    <string name="permdesc_setTimeZone" product="tablet" msgid="1676983712315827645">"ටැබ්ලටයේ කාල කලාපය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"දුරකථනයේ වේලා කලාපය වෙනස් කිරීමට උපාංගයට අවසර දෙන්න."</string>
+    <string name="permlab_accountManagerService" msgid="4829262349691386986">"AccountManagerService ලෙස පෙනී සිටින්න"</string>
+    <string name="permdesc_accountManagerService" msgid="1948455552333615954">"AccountAuthenticators වෙත ඇමතුම් ගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_getAccounts" msgid="1086795467760122114">"උපාංගයේ ඇති ගිණුම් සොයන්න"</string>
+    <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"ටැබ්ලටය විසින් දන්නා ගිණුම් ලැයිස්තුවක් ලබාගැනීමට යෙදුමට අවසර දෙන්න. ඔබ ස්ථාපනය කොට ඇති යෙදුම් විසින් සාදා ඇති ගිණුම් මීට ඇතුළත් වේ."</string>
+    <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"දුරකථනය විසින් දන්නා ගිණුම් ලැයිස්තුවක් ලබාගැනීමට යෙදුමට අවසර දෙන්න. ඔබ ස්ථාපනය කොට ඇති යෙදුම් විසින් සාදා ඇති ගිණුම් මීට ඇතුළත් වේ."</string>
+    <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"ගිණුම් සාදන්න සහ මුරපද සකසන්න"</string>
+    <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"ගිණුම් සැදීමට සහ රහස් පද ලබාගැනීම සහ සැකසීම් කිරීම ඇතුළත්ව AccountManager ගේ ගිණුම් සත්‍යාපන හැකියාවන් භාවිතා කිරීමට යෙදුමකට අවසර දෙන්න."</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"ගිණුම් එකතු කරන්න හෝ ඉවත් කරන්න"</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"ගිණුම් එකතු කිරීම, සහ ඉවත් කිරීම සහ ඔවුන්ගේ මුරපද මැකීම ආදී ක්‍රියාවලි සිදු කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_useCredentials" msgid="235481396163877642">"උපාංගයේ ඇති ගිණුම් භාවිතා කිරීම"</string>
+    <string name="permdesc_useCredentials" msgid="7984227147403346422">"සත්‍යාපන ටෝකන ඉල්ලීම සඳහා යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"ජාල සම්බන්ධතාවයන් බැලීම"</string>
+    <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"කුමන ජාල පවතින්නේ ද සහ සම්බන්ධිත ද ආදී ජාල සබඳතා ගැන තොරතුරු බැලීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"සම්පූර්ණ ජාල ප්‍රවේශය"</string>
+    <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"උපකරණයට ජාල කෙවනියන් සැදීමට සහ ජාල ප්‍රොටෝකෝල අභිරුචි භාවිතා කිරීමට උපකරණයට ඉඩ දෙන්න. අන්තර්ජාලයට දත්ත යැවීමට විධියන් බ්‍රව්සරය සහ අනෙකුත් යෙදුම් සපයයි, එනිසා මෙම අවසරය දත්ත අන්තර්ජාලයට යැවීමට අවශ්‍ය නොවේ."</string>
+    <string name="permlab_writeApnSettings" msgid="505660159675751896">"ජාලයේ සැකසීම් සහ ගමනාගමන වෙනස් කරන්න/අල්ලා ගැනීම"</string>
+    <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"ඕනෑම APN එකක නියුතුව සහ තොට වෙනස් කිරීම වැනි ජාල සැකසීම් වෙනස් කිරීමට සහ සියලුම ජාල අතුරු ඇරීමට සහ සෝදිසි කිරීමට යෙදුමට අවසර දෙන්න. ඇතැම්විට ඔබගේ අනුදැනුමකින් තොරව අනිෂ්ට උපාංග ජාල පැකැට්ටු අධීක්ෂණය,ආපසු දිශාගත කිරීම හෝ වෙනස්කිරීම සිදු කිරීමට ඉඩ තිබේ."</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"ජාල සම්බන්ධතාව වෙනස් කිරීම"</string>
+    <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"ජාල සම්බන්ධතාවයේ තත්වය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_changeTetherState" msgid="5952584964373017960">"ටෙදර් කරන ලද සම්බන්ධතා වෙනස් කිරීම"</string>
+    <string name="permdesc_changeTetherState" msgid="1524441344412319780">"ටෙදර් කළ ජාල සම්බන්ධතාවයේ තත්වය වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"පසුබිම් දත්ත භාවිත සැකසීම් වෙනස් කිරීම"</string>
+    <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"පසුබිම් දත්ත භාවිතා සැකසීම වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"Wi-Fi සම්බන්ධතාවන් බැලීම"</string>
+    <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Wi-Fi සබල බව සහ සම්බන්ධිත Wi-Fi උපාංග වල නම් ආදී Wi-Fi ජාලකරණයේ තොරතුරු බැලීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_changeWifiState" msgid="6550641188749128035">"Wi-Fi වලට සම්බන්ධ විම සහ විසන්ධි කිරීම"</string>
+    <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Wi-Fi ප්‍රවේශ ස්ථානයන් වෙත සම්බන්ධ වීමට සහ විසන්ධි වීමට සහ, Wi-Fi ජාල සඳහා උපාංගයේ වින්‍යාසයට වෙනස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"Wi-Fi බහුවිකාශන පිළිගැනීමට අවසර දෙන්න"</string>
+    <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"ඔබගේ ටැබ්ලටයට පමණක් නොව Wi-Fi ජාලයේ ඇති සියලුම උපාංගවලට යැවූ පැකැට්ටු බහු විකාශ ලිපින භාවිතයෙන් ලබාගැනීමට යෙදුමට අවසර දෙන්න. non-multicast ආකාරයට වඩා වැඩි බලයක් මෙහිදී භාවිතා වේ."</string>
+    <string name="permdesc_changeWifiMulticastState" product="default" msgid="6851949706025349926">"ඔබගේ දුරකථනයට පමණක් නොව Wi-Fi ජාලයේ ඇති සියලුම යෙදුම්වලට යැවූ පැකැට්ටු බහුවාහක ලිපින භාවිතයෙන් ලබාගැනීමට යෙදුමට අවසර ලැබේ. බහුවාහක නැති ආකාරයට වඩා වැඩි බලයක් මෙහිදී භාවිතා වේ."</string>
+    <string name="permlab_bluetoothAdmin" msgid="6006967373935926659">"බ්ලූටූත් සැකසීම් ප්‍රවේශය"</string>
+    <string name="permdesc_bluetoothAdmin" product="tablet" msgid="6921177471748882137">"ස්ථානීය බ්ලූටූත් ටැබ්ලට්යක් සැකසීමට සහ වින්‍යාස කිරීමට සහ දුරස්ථ උපාංග සමග යුගළ කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"දුරකථනයේ පෙදෙසි බ්ලූටූත් වින්‍යාස කිරීමට, සහ දුරස්ථ උපාංග ගවේෂණයට සහ යුගල වීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_accessWimaxState" msgid="4195907010610205703">"WiMAX වෙතට සම්බන්ධ කරන්න හෝ විසන්ධි කරන්න"</string>
+    <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"WiMAX සබල බව සහ සම්බන්ධිත ඕනෑම WiMAX ජාලයක තොරතුරු නිශ්චය කිරීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX තත්වය වෙනස් කරන්න"</string>
+    <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"ටැබ්ලටය WiMAX ජාල වෙත සම්බන්ධ කිරීමට සහ විසන්ධි කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"WiMAX ජාලයන්ට දුරකථනය සම්බන්ධ කිරීමට සහ විසන්ධි කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_bluetooth" msgid="6127769336339276828">"බ්ලූටූත් උපාංග සමඟ යුගල කිරීම"</string>
+    <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"ටැබ්ලටයේ බ්ලූටූත් වින්‍යාසය බැලිමට, සැකසීමට සහ යුගල කළ උපාංග සමඟ සම්බන්ධතාවන් පිළිගැනීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"දුරකථනයේ බ්ලූටූත් වින්‍යාසය දැකීමට, යුගල උපාංග සමඟ සම්බන්ධතාවන් සැකසීමට සහ භාරගැනීමට යෙදුමට අවසර දෙයි."</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"ආසන්න ක්ෂේත්‍ර සන්නිවේදනය පාලනය කරන්න"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"ආසන්න ක්ෂේත්‍ර සන්නිවේදන (NFC) ටැග්, පත්, සහ කියවන්නන් සමඟ සන්නිවේදනය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"ඔබගේ තිරයේ අගුල අබල කරන්න"</string>
+    <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"යතුරු අගුල සහ ඕනෑම සම්බන්ධිත මුරපද ආරක්ෂාවක් අබල කිරීමට යෙදුමට අවසර දෙන්න. මෙහි උදාහරණයක් වන්නේ පැමිණෙන ඇමතුමක් ලැබෙද්දී, දුරකථනය අක්‍රිය වන අතර ඇමතුම අවසාන වන විට යතුරු අගුල නැවත සක්‍රිය වෙයි."</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"සමමුහුර්ත සැකසීම් කියවන්න"</string>
+    <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"ගිණුම සඳහා සමමුහුර්ත සැකසීම් කියවීමට යෙදුමට අවසර දෙන්න. උදාහරණයක් ලෙස, ගිණුමක් සමඟ පුද්ගල යෙදුම සමමුහුර්ත දැයි මෙයට හඳුනා ගත හැක."</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"සමමුහුර්ත කිරීම සක්‍රිය කරන්න සහ අක්‍රිය කරන්න"</string>
+    <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"ගිණුම සඳහා සමමුහුර්ත සැකසීම් වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. උදාහරණයක් ලෙස, ගිණුම සමඟ පුද්ගල යෙදුම සමමුහුර්ත කිරීම සක්‍රිය කිරීමට භාවිත කල හැක."</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"සමමුහුර්ත කිරීමේ සංඛ්‍යාන කියවීම"</string>
+    <string name="permdesc_readSyncStats" msgid="1510143761757606156">"සමමුහුර්ත කිරීමේ සිදුවීම් ඉතිහාසය සහ කෙතරම් දත්ත සමමුහුර්ත වී ඇතිදැයි ඇතුලත් ගිණුම සඳහා සමමුහුර්ත කිරීමේ සංඛ්‍යාන කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"දායක වූ සංග්‍රහ කියවීම"</string>
+    <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"වර්තමාන සමමුහුර්ත සංග්‍රහ ගැන විස්තර ලැබීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"දායක වූ සංග්‍රහ ලිවීම"</string>
+    <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"ඔබගේ වර්තමාන සමමුහුර්ත සංග්‍රහ වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ සමමුහුර්ත සංග්‍රහ අනිෂ්ට යෙදුම්වලින් වෙනස් කල හැක."</string>
+    <string name="permlab_readDictionary" msgid="4107101525746035718">"ඔබ විසින් ශබ්දකෝෂයට ඇතුළත්කොට ඇති කොන්දේසි කියවීම"</string>
+    <string name="permdesc_readDictionary" msgid="659614600338904243">"පරිශීලක ශබ්ද කෝෂයේ පරිශීලකයන් විසින් ගබඩා කර තිබිය හැකි වචන, නම්, වාක්‍යංශ කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_writeDictionary" msgid="2183110402314441106">"පරිශීලකයින් අර්ථ දැක්වූ ශබ්ද කෝෂයට වචන එකතු කිරීම"</string>
+    <string name="permdesc_writeDictionary" msgid="8185385716255065291">"පරිශීලක ශබ්දකෝෂය තුළට අලුත් වචන ලිවීමට යෙදුමට ඉඩ දෙන්න."</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="8235341515605559677">"ආරක්‍ෂිත ආචයනය වෙත ප්‍රවේශය පරීක්ෂා කිරීම"</string>
+    <string name="permlab_sdcardRead" product="default" msgid="8235341515605559677">"ආරක්‍ෂිත ආචයනය වෙත ප්‍රවේශය පරීක්ෂා කිරීම"</string>
+    <string name="permdesc_sdcardRead" product="nosdcard" msgid="3642473292348132072">"අනාගත උපාංගවල ලබාගත හැකි USB ආචයනය සඳහා අවසරයක් පරීක්ෂා කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_sdcardRead" product="default" msgid="5914402684685848828">"අනාගත උපාංගවල පැවතෙන SD කාඩ් පත සඳහා අවසරයක් පිරික්සීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"ඔබගේ USB ආචයනයේ අන්තර්ගත වෙනස් කිරීම හෝ මැකීම"</string>
+    <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"ඔබගේ SD පතේ අන්තර්ගත වෙනස් කිරීම හෝ මැකීම"</string>
+    <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"USB ආචයනය වෙත ලිවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"SD පත වෙත ලිවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_mediaStorageWrite" product="default" msgid="6859839199706879015">"අභ්‍යන්තර මාධ්‍ය ආචයනය අන්තර්ගත වෙනස් කරන්න/ මකන්න"</string>
+    <string name="permdesc_mediaStorageWrite" product="default" msgid="8189160597698529185">"අභ්‍යන්තර මාධ්‍ය ආචයනයේ අන්තර්ගතය වෙනස් කිරීමට උපාංගයට අවසර දෙන්න."</string>
+    <string name="permlab_manageDocs" product="default" msgid="5778318598448849829">"ලේඛන ආචයනය කළමනාකරණය කරන්න"</string>
+    <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"ලේඛන ආචයනය කළමනාකරණය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"සියලුම පරිශීලකයන්ගේ බාහිර ආචයන වෙත පිවිසෙන්න"</string>
+    <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"සියලු පරිශීලකයන් සඳහා බාහිර ආචයනය වෙත පිවිසීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"හැඹිලි ගොනු පද්ධතියට ප්‍රවේශ වීම"</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"හැඹිලි ගොනු පද්ධති කියවීමට සහ ලිවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_use_sip" msgid="5986952362795870502">"අන්තර්ජාල ඇමතුම් ගන්න/ලබන්න"</string>
+    <string name="permdesc_use_sip" msgid="4717632000062674294">"අන්තර්ජාල ඇමතුම් ගැනීමට/ලැබීමට SIP සේවාව භාවිතයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"ඉතිහාසගත ජාල භාවිතය කියවන්න"</string>
+    <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"විශේෂිත ජාල සහ යෙදුම් සඳහා ඉතිහාසගත ජාල භාවිතය කියවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"ජාල ප්‍රතිපත්තිය කළමනාකරණය කිරීම"</string>
+    <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"ජාල කොන්දේසි සහ සඳහන් යෙදුම් විශේෂීත රීති කළමනාකරණය කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"ජාල භාවිත ගිණුම් කිරීම වෙනස් කිරීම"</string>
+    <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"යෙදුම්වලට ජාල භාවිතයෙන් වන බලපෑම කෙසේද යන්න වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_markNetworkSocket" msgid="3658527214914959749">"කෙවෙනි ලකුණු වෙනස් කරන්න"</string>
+    <string name="permdesc_markNetworkSocket" msgid="7655568433696356578">"මාර්ගගත වීම සඳහා කෙවෙනියේ ලකුණු වෙනස් කිරීමට යෙදුමට ඉඩ දෙන්න"</string>
+    <string name="permlab_accessNotifications" msgid="7673416487873432268">"ප්‍රවේශ දැනුම්දීම්"</string>
+    <string name="permdesc_accessNotifications" msgid="458457742683431387">"වෙනත් යෙදුම් විසින් කළ පල කිරීම්ද ඇතුළත්ව දැන්වීම් ලබා ගැනීමට, පරීක්ෂා කිරීමට සහ හිස් කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"දැනුම්දීම ඇහුම්කන් දීම් සේවාවක් වෙත බඳින්න"</string>
+    <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"දැනුම්දීම් අසන්නාගේ සේවාවේ ඉහළ මට්ටමේ අතුරුමුහුණතට බැඳීමට දරන්නාට අවසර දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අවශ්‍ය නොවේ."</string>
+    <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"වාහකය සැපයු වින්‍යාසය යෙදුම ඉල්ලා සිටින්න"</string>
+    <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"වාහකයා ලබාදුන් සැකසුම් යෙදුම් උත්පාදනයට ධාරකයාට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවෙයි."</string>
+    <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ජාල තත්ව මත නිරීක්ෂණ වෙත ඇහුම්කන් දීම"</string>
+    <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"යෙදුමකට ජාල තත්ව මත නිරීක්ෂණ වෙත ඇහුම්කන් දීමට අවසර දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිදා අවශ්‍ය නොවේ."</string>
+    <string name="policylab_limitPassword" msgid="4497420728857585791">"මුරපද නීති සකස් කිරීම"</string>
+    <string name="policydesc_limitPassword" msgid="3252114203919510394">"තිරය අගුළු ඇරීමේ මුරපදයට අනුමත අකුරු සහ දිග පාලනය කරන්න."</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"තිරය අගුළු ඇරීමේ උත්සාහයන් නිරීක්ෂණය කරන්න"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"තිරය අගුළු හැරීමේදී වැරදියට ටයිප් කළ මුරපද ගණන නිරීක්ෂණය කරන්න සහ ටැබ්ලටය අගුළු දමන්න හෝ වැරදි මුරපද බොහෝ ගණනක් ටයිප් කර ඇති නම් ටැබ්ලටයේ සියලු දත්ත මකන්න."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"තිරය අගුළු හැරීමේදී වැරදියට ටයිප් කළ මුරපද ගණන නිරීක්ෂණය කරන්න සහ දුරකථනය අගුළු දමන්න හෝ වැරදි මුරපද බොහෝ ගණනක් ටයිප් කර ඇති නම් දුරකථනයේ සියලු දත්ත මකන්න."</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"තිරය අගුළු ඇරීමේ මුරපදය වෙනස් කිරීම"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"තිරය අගුළු ඇරීමේ මුරපදය වෙනස් කරන්න."</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"තිරය අගුළු දැමීම"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"තිරයට අගුළු වැටීම සිදුවන්නේ කෙසේද සහ කවදාද යන්න පාලනය කරන්න."</string>
+    <string name="policylab_wipeData" msgid="3910545446758639713">"සියලු දත්ත මකන්න"</string>
+    <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"කර්මාන්ත ශාලා දත්ත යළි පිහිටුවීමෙන් පසුව අනතුරු ඇඟවිමකින් තොරවම ටැබ්ලට් දත්ත මකා දමයි."</string>
+    <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"කර්මාන්ත ශාලා දත්ත යළි පිහිටුවීමෙන් පසුව අනතුරු ඇඟවිමකින් තොරවම දුරකථන දත්ත මකා දමයි."</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"උපාංග ගෝලීය නියුතුව සකස් කිරීම"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"කොන්දේසි සක්‍රිය විට පොදු නියුතු එකක් භාවිත කරන ලෙස උපාංගය සකසන්න. පළමු උපාංග පරිපාලකයා පමණක් ඵලදායි පොදු නියුතුව සකසයි."</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"තිරය අගුළු දැමීමේ මුරපදය කල් ඉකුත්වීම සකසන්න"</string>
+    <string name="policydesc_expirePassword" msgid="1729725226314691591">"තිර-අගුළේ මුරපදය වෙනස්වීම කොපමණ කාල පරාසයකින් සිදුවිය යුතුද යන්න පාලනය කිරීම."</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"ආචයනයේ සංකේතනය සකස් කිරීම"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"ආචයනය කළ යෙදුම් දත්ත සංකේතනය කිරීමට අවශ්‍යය."</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"කැමරා අබල කිරීම"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"සියලු උපාංග කැමරාවල භාවිතය වලක්වන්න."</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"යතුරු ආරක්ෂාවේ විශේෂාංග අබල කරන්න"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"යතුරු ආරක්ෂාව හි සමහර විශේෂාංග භාවිතය වළක්වයි."</string>
+  <string-array name="phoneTypes">
+    <item msgid="8901098336658710359">"නිවස"</item>
+    <item msgid="869923650527136615">"ජංගම"</item>
+    <item msgid="7897544654242874543">"කාර්යාලය"</item>
+    <item msgid="1103601433382158155">"කාර්යාල ෆැක්ස්"</item>
+    <item msgid="1735177144948329370">"නිවසේ ෆැක්ස්"</item>
+    <item msgid="603878674477207394">"පේජරය"</item>
+    <item msgid="1650824275177931637">"වෙනත්"</item>
+    <item msgid="9192514806975898961">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="emailAddressTypes">
+    <item msgid="8073994352956129127">"මුල් පිටුව"</item>
+    <item msgid="7084237356602625604">"කාර්යාලය"</item>
+    <item msgid="1112044410659011023">"වෙනත්"</item>
+    <item msgid="2374913952870110618">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="postalAddressTypes">
+    <item msgid="6880257626740047286">"නිවස"</item>
+    <item msgid="5629153956045109251">"කාර්යාලය"</item>
+    <item msgid="4966604264500343469">"වෙනත්"</item>
+    <item msgid="4932682847595299369">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="imAddressTypes">
+    <item msgid="1738585194601476694">"නිවස"</item>
+    <item msgid="1359644565647383708">"කාර්යාලය"</item>
+    <item msgid="7868549401053615677">"වෙනත්"</item>
+    <item msgid="3145118944639869809">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="organizationTypes">
+    <item msgid="7546335612189115615">"කාර්යාලය"</item>
+    <item msgid="4378074129049520373">"වෙනත්"</item>
+    <item msgid="3455047468583965104">"අභිරුචි"</item>
+  </string-array>
+  <string-array name="imProtocols">
+    <item msgid="8595261363518459565">"AIM"</item>
+    <item msgid="7390473628275490700">"Windows Live"</item>
+    <item msgid="7882877134931458217">"Yahoo"</item>
+    <item msgid="5035376313200585242">"Skype"</item>
+    <item msgid="7532363178459444943">"QQ"</item>
+    <item msgid="3713441034299660749">"Google Talk"</item>
+    <item msgid="2506857312718630823">"ICQ"</item>
+    <item msgid="1648797903785279353">"Jabber"</item>
+  </string-array>
+    <string name="phoneTypeCustom" msgid="1644738059053355820">"අභිරුචි"</string>
+    <string name="phoneTypeHome" msgid="2570923463033985887">"නිවස"</string>
+    <string name="phoneTypeMobile" msgid="6501463557754751037">"ජංගම"</string>
+    <string name="phoneTypeWork" msgid="8863939667059911633">"කාර්යාලය"</string>
+    <string name="phoneTypeFaxWork" msgid="3517792160008890912">"කාර්යාල ෆැක්ස්"</string>
+    <string name="phoneTypeFaxHome" msgid="2067265972322971467">"නිවසේ ෆැක්ස්"</string>
+    <string name="phoneTypePager" msgid="7582359955394921732">"පේජරය"</string>
+    <string name="phoneTypeOther" msgid="1544425847868765990">"වෙනත්"</string>
+    <string name="phoneTypeCallback" msgid="2712175203065678206">"යළි ඇමතීම"</string>
+    <string name="phoneTypeCar" msgid="8738360689616716982">"මෝටර් රථය"</string>
+    <string name="phoneTypeCompanyMain" msgid="540434356461478916">"ආයතනයේ මූලිකය"</string>
+    <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+    <string name="phoneTypeMain" msgid="6766137010628326916">"මූලික"</string>
+    <string name="phoneTypeOtherFax" msgid="8587657145072446565">"වෙනත් ෆැක්ස්"</string>
+    <string name="phoneTypeRadio" msgid="4093738079908667513">"රේඩියෝව"</string>
+    <string name="phoneTypeTelex" msgid="3367879952476250512">"ටෙලෙක්ස්"</string>
+    <string name="phoneTypeTtyTdd" msgid="8606514378585000044">"TTY TDD"</string>
+    <string name="phoneTypeWorkMobile" msgid="1311426989184065709">"කාර්යාල ජංගම"</string>
+    <string name="phoneTypeWorkPager" msgid="649938731231157056">"කාර්යාල පේජරය"</string>
+    <string name="phoneTypeAssistant" msgid="5596772636128562884">"සහායක"</string>
+    <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string>
+    <string name="eventTypeCustom" msgid="7837586198458073404">"අභිරුචි"</string>
+    <string name="eventTypeBirthday" msgid="2813379844211390740">"උපන්දිනය"</string>
+    <string name="eventTypeAnniversary" msgid="3876779744518284000">"සංවත්සරය"</string>
+    <string name="eventTypeOther" msgid="7388178939010143077">"වෙනත්"</string>
+    <string name="emailTypeCustom" msgid="8525960257804213846">"අභිරුචි"</string>
+    <string name="emailTypeHome" msgid="449227236140433919">"නිවස"</string>
+    <string name="emailTypeWork" msgid="3548058059601149973">"කාර්යාලය"</string>
+    <string name="emailTypeOther" msgid="2923008695272639549">"වෙනත්"</string>
+    <string name="emailTypeMobile" msgid="119919005321166205">"ජංගම"</string>
+    <string name="postalTypeCustom" msgid="8903206903060479902">"අභිරුචි"</string>
+    <string name="postalTypeHome" msgid="8165756977184483097">"නිවස"</string>
+    <string name="postalTypeWork" msgid="5268172772387694495">"කාර්යාලය"</string>
+    <string name="postalTypeOther" msgid="2726111966623584341">"වෙනත්"</string>
+    <string name="imTypeCustom" msgid="2074028755527826046">"අභිරුචි"</string>
+    <string name="imTypeHome" msgid="6241181032954263892">"මුල් පිටුව"</string>
+    <string name="imTypeWork" msgid="1371489290242433090">"කාර්යාලය"</string>
+    <string name="imTypeOther" msgid="5377007495735915478">"වෙනත්"</string>
+    <string name="imProtocolCustom" msgid="6919453836618749992">"අභිරුචි"</string>
+    <string name="imProtocolAim" msgid="7050360612368383417">"AIM"</string>
+    <string name="imProtocolMsn" msgid="144556545420769442">"Windows Live"</string>
+    <string name="imProtocolYahoo" msgid="8271439408469021273">"Yahoo"</string>
+    <string name="imProtocolSkype" msgid="9019296744622832951">"Skype"</string>
+    <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
+    <string name="imProtocolIcq" msgid="1574870433606517315">"ICQ"</string>
+    <string name="imProtocolJabber" msgid="2279917630875771722">"Jabber"</string>
+    <string name="imProtocolNetMeeting" msgid="8287625655986827971">"NetMeeting"</string>
+    <string name="orgTypeWork" msgid="29268870505363872">"කාර්යාලය"</string>
+    <string name="orgTypeOther" msgid="3951781131570124082">"වෙනත්"</string>
+    <string name="orgTypeCustom" msgid="225523415372088322">"අභිරුචි"</string>
+    <string name="relationTypeCustom" msgid="3542403679827297300">"අභිරුචි"</string>
+    <string name="relationTypeAssistant" msgid="6274334825195379076">"සහායක"</string>
+    <string name="relationTypeBrother" msgid="8757913506784067713">"සහෝදරයා"</string>
+    <string name="relationTypeChild" msgid="1890746277276881626">"දරුවා"</string>
+    <string name="relationTypeDomesticPartner" msgid="6904807112121122133">"දේශීය හවුල්කරුවා"</string>
+    <string name="relationTypeFather" msgid="5228034687082050725">"පියා"</string>
+    <string name="relationTypeFriend" msgid="7313106762483391262">"මිත්‍රයා"</string>
+    <string name="relationTypeManager" msgid="6365677861610137895">"කළමනාකරු"</string>
+    <string name="relationTypeMother" msgid="4578571352962758304">"මව"</string>
+    <string name="relationTypeParent" msgid="4755635567562925226">"මව්පිය"</string>
+    <string name="relationTypePartner" msgid="7266490285120262781">"හවුල්කරුවා"</string>
+    <string name="relationTypeReferredBy" msgid="101573059844135524">"යොමුකරන ලද්දේ"</string>
+    <string name="relationTypeRelative" msgid="1799819930085610271">"නෑයා"</string>
+    <string name="relationTypeSister" msgid="1735983554479076481">"සහෝදරිය"</string>
+    <string name="relationTypeSpouse" msgid="394136939428698117">"භාර්යාව හෝ ස්වාමිපුරුෂයා"</string>
+    <string name="sipAddressTypeCustom" msgid="2473580593111590945">"අභිරුචි"</string>
+    <string name="sipAddressTypeHome" msgid="6093598181069359295">"නිවස"</string>
+    <string name="sipAddressTypeWork" msgid="6920725730797099047">"කාර්යාලය"</string>
+    <string name="sipAddressTypeOther" msgid="4408436162950119849">"වෙනත්"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK සහ නව PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK කේතය"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"නව PIN කේතය"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"මුරපදය ටයිප් කිරීමට ස්පර්ශ කරන්න"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"අගුළු ඇරීමට මුරපදය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"අගුළු හැරීමට PIN එක ටයිප් කරන්න"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"වැරදි PIN කේතයකි."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"අගුළු ඇරීමට, මෙනුව ඔබා පසුව 0 ද ඔබන්න."</string>
+    <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"හදිසි ඇමතුම් අංකය"</string>
+    <string name="lockscreen_carrier_default" msgid="8963839242565653192">"සේවාව නැත."</string>
+    <string name="lockscreen_screen_locked" msgid="7288443074806832904">"තිරය අගුළු දමා ඇත."</string>
+    <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"අගුළු හැරීමට මෙනුව ඔබන්න හෝ හදිසි ඇමතුම ලබාගන්න."</string>
+    <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"අගුළු හැරීමට මෙනු ඔබන්න."</string>
+    <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"අගුළු ඇරීමට රටාව අඳින්න"</string>
+    <string name="lockscreen_emergency_call" msgid="5347633784401285225">"හදිසි ඇමතුම්"</string>
+    <string name="lockscreen_return_to_call" msgid="5244259785500040021">"ඇමතුම වෙත නැවත යන්න"</string>
+    <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"නිවැරදියි!"</string>
+    <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"නැවත උත්සාහ කරන්න"</string>
+    <string name="lockscreen_password_wrong" msgid="5737815393253165301">"නැවත උත්සාහ කරන්න"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"මුහුණ භාවිතයෙන් අඟුළු හැරීමේ උපරිම ප්‍රයන්තයන් ගණන ඉක්මවා ඇත"</string>
+    <string name="lockscreen_plugged_in" msgid="8057762828355572315">"ආරෝපණය වෙමින්, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_charged" msgid="321635745684060624">"අරෝපිතයි"</string>
+    <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="lockscreen_low_battery" msgid="1482873981919249740">"ඔබගේ ආරෝපකයට සම්බන්ධ කරන්න."</string>
+    <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"SIM පත නැත"</string>
+    <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"ටැබ්ලටයේ SIM පත නොමැත."</string>
+    <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"දුරකථනය තුළ SIM පත නැත."</string>
+    <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"SIM පතක් ඇතුල් කරන්න."</string>
+    <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM පත නොමැත හෝ කියවිය නොහැක. SIM පතක් ඇතුලත් කරන්න."</string>
+    <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"භාවිතා කළ නොහැකි SIM පත."</string>
+    <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"ඔබගේ SIM පත ස්ථිරව අබල කර තිබේ.\n වෙනත් SIM පතක් සඳහා ඔබගේ සේවාදායකයා සම්බන්ධ කරගන්න."</string>
+    <string name="lockscreen_transport_prev_description" msgid="201594905152746886">"පෙර ගීත බොත්තම"</string>
+    <string name="lockscreen_transport_next_description" msgid="6089297650481292363">"ඊළඟ ගීත බොත්තම"</string>
+    <string name="lockscreen_transport_pause_description" msgid="7659088786780128001">"විරාම බොත්තම"</string>
+    <string name="lockscreen_transport_play_description" msgid="5888422938351019426">"ධාවක බොත්තම"</string>
+    <string name="lockscreen_transport_stop_description" msgid="4562318378766987601">"නැවතීමේ බොත්තම"</string>
+    <string name="emergency_calls_only" msgid="6733978304386365407">"හදිසි ඇමතුම් පමණි"</string>
+    <string name="lockscreen_network_locked_message" msgid="143389224986028501">"ජාලය අගුළු දමා ඇත"</string>
+    <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"SIM පත PUK අගුළු දමා ඇත."</string>
+    <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"පරිශීලක උපදේශය බලන්න හෝ පරිභෝගික සේවාව අමතන්න."</string>
+    <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"SIM පත අගුළු දමා ඇත."</string>
+    <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"SIM පත අගුළු අරිමින්..."</string>
+    <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"ඔබ <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් අගුළු ඇරීමේ රටාව වැරදියට ඇඳ ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"ඔබ මුරපදය වාර <xliff:g id="NUMBER_0">%d</xliff:g> ක් වැරදියට ටයිප්කොට ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> කින් නැවත උත්සහ කරන්න."</string>
+    <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"ඔබ PIN අංකය <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් වැරදියට ටයිප් කොට ඇත.\n\n තත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ Google පුරනය වීම් භාවිතයෙන් ඔබගේ ටැබ්ලටය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ Google පුරනය වීම භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසනු ඇත.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"ඔබ ටැබ්ලටය අගුළු හැරීමට වැරදියට අවස්ථා <xliff:g id="NUMBER_0">%d</xliff:g> ක් උත්සාහ කර ඇත. අවස්ථා <xliff:g id="NUMBER_1">%d</xliff:g> ක් අසාර්ථකව උත්සහ කිරීමකින් පසුව, ටැබ්ලටය කර්මාන්ත ශාලා මුල් තත්වයට නැවත පත් වන අතර සියලු පරිශීලක දත්ත නැති වෙයි."</string>
+    <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER_0">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. තවත් අසාර්ථක ප්‍රයත්න <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, දුරකථනය කර්මාන්තශාලාවේ පෙරනිමියට යළි පිහිටුවන අතර සියලුම පරිශීලක දත්ත නැති වී යයි."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"ටැබ්ලටයේ අගුළු ඇරීමට ඔබ වැරදි ප්‍රයත්න <xliff:g id="NUMBER">%d</xliff:g> වාරයක් ගෙන ඇත. දැන් ටැබ්ලටය කර්මාන්තශාලා සුපුරුද්ද වෙත යළි පිහිටුවීම කෙරේ."</string>
+    <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. දැන් දුරකථනය කර්මාන්තශාලා පෙරනිමියට පිහිටුවනු ලබයි."</string>
+    <string name="lockscreen_too_many_failed_attempts_countdown" msgid="6251480343394389665">"තත්පර <xliff:g id="NUMBER">%d</xliff:g> කින් නැවත උත්සාහ කරන්න."</string>
+    <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"රටාව අමතකද?"</string>
+    <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"ගිණුමේ අගුළු අරින්න"</string>
+    <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"රටා උත්සාහ කිරීම් වැඩිය"</string>
+    <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"අගුළු හැරීමට, ඔබගේ Google ගිණුම සමග පුරනය වන්න."</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"පරිශීලක නාමය (ඊ-තැපෑල)"</string>
+    <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"මුරපදය"</string>
+    <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"පුරනය වෙන්න"</string>
+    <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"වලංගු නොවන පරිශීලක නාමයක් හෝ මුරපදයක්."</string>
+    <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"ඔබගේ පරිශීලක නාමය හෝ මුරපදය අමතකද?\n "<b>"google.com/accounts/recovery"</b>" වෙත යන්න."</string>
+    <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"පරික්ෂා කරමින්..."</string>
+    <string name="lockscreen_unlock_label" msgid="737440483220667054">"අඟුල අරින්න"</string>
+    <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"ශබ්දය සක්‍රීය කරන්න"</string>
+    <string name="lockscreen_sound_off_label" msgid="996822825154319026">"ශ්‍රව්‍ය අක්‍රිය කරන්න"</string>
+    <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"රටාව අරඹන ලදි"</string>
+    <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"රටාව හිස් කරන ලදි"</string>
+    <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"කොටුවක් එකතු කරන ලදි"</string>
+    <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"රටාව සම්පූර්ණයි"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for keyguard_accessibility_widget_changed (5678624624681400191) -->
+    <skip />
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"විජටය එකතු කරන්න."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"හිස්"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"අගුළු අරින ප්‍රදේශය විදහා ඇත."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"අගුළු අරින ප්‍රදේශය හැකිලී ඇත."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජට්."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"පරිශීලක තෝරන්නා"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"තත්වය"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"කැමරාව"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"මාධ්‍ය පාලක"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"විජටය නැවත අනුපිළිවෙළට සැකසිම ඇරඹුණි."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"විජට් නැවත අනුපිළිවෙලට සැකසීම අවසානය."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජටය මැකී ඇත."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"අගුළු නොදැමූ ප්‍රදේශය පුළුල් කරන්න."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"සර්පණ අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"රටා අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"මුහුණ භාවිතයෙන් අඟුළු හැරීම."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"මුරපද අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"රටා ප්‍රදේශය."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"සර්පණ ප්‍රදේශය."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="granularity_label_character" msgid="7336470535385009523">"අක්ෂරය"</string>
+    <string name="granularity_label_word" msgid="7075570328374918660">"වචනය"</string>
+    <string name="granularity_label_link" msgid="5815508880782488267">"සබැඳිය"</string>
+    <string name="granularity_label_line" msgid="5764267235026120888">"රේඛාව"</string>
+    <string name="hour_ampm" msgid="4584338083529355982">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%P</xliff:g>"</string>
+    <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
+    <string name="factorytest_failed" msgid="5410270329114212041">"කර්මාන්ත ශාලා පරීක්ෂණය අසාර්ථකයි"</string>
+    <string name="factorytest_not_system" msgid="4435201656767276723">"FACTORY_TEST ක්‍රියාව /system/app හි ස්ථාපිත පැකේජ සඳහා පමණක් සහය දක්වයි."</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"FACTORY_TEST ක්‍රියාව ලබාදෙන පැකේජයක් සොයාගත නොහැකි විය."</string>
+    <string name="factorytest_reboot" msgid="6320168203050791643">"පුනරාරම්භ කරන්න"</string>
+    <string name="js_dialog_title" msgid="1987483977834603872">"\"<xliff:g id="TITLE">%s</xliff:g>\" හි ඇති පිටුව කියන්නේ:"</string>
+    <string name="js_dialog_title_default" msgid="6961903213729667573">"ජාවාස්ක්‍රිප්ට්"</string>
+    <string name="js_dialog_before_unload_title" msgid="2619376555525116593">"සංචලනය තහවුරු කරන්න"</string>
+    <string name="js_dialog_before_unload_positive_button" msgid="3112752010600484130">"මෙම පිටුවෙන් ඉවත් වන්න"</string>
+    <string name="js_dialog_before_unload_negative_button" msgid="5614861293026099715">"මෙම පිටුවෙහි ඉන්න"</string>
+    <string name="js_dialog_before_unload" msgid="3468816357095378590">"<xliff:g id="MESSAGE">%s</xliff:g>\n\nඔබට මෙම පිටුවෙන් සංචලනය කිරීමට අවශ්‍ය බවට ඔබට විශ්වාසද?"</string>
+    <string name="save_password_label" msgid="6860261758665825069">"තහවුරු කරන්න"</string>
+    <string name="double_tap_toast" msgid="4595046515400268881">"උපදෙස: විශාලනය කිරීමට සහ කුඩා කිරීමට දෙවරක් තට්ටු කරන්න."</string>
+    <string name="autofill_this_form" msgid="4616758841157816676">"ස්වයංක්‍රිය පිරවුම"</string>
+    <string name="setup_autofill" msgid="7103495070180590814">"ස්වයංක්‍රිය පිරවුම සකසන්න"</string>
+    <string name="autofill_address_name_separator" msgid="6350145154779706772">" "</string>
+    <string name="autofill_address_summary_name_format" msgid="3268041054899214945">"$1$2$3"</string>
+    <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string>
+    <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string>
+    <string name="autofill_province" msgid="2231806553863422300">"පළාත"</string>
+    <string name="autofill_postal_code" msgid="4696430407689377108">"තැපැල් කේතය"</string>
+    <string name="autofill_state" msgid="6988894195520044613">"ජනපදය"</string>
+    <string name="autofill_zip_code" msgid="8697544592627322946">"ZIP කේතය"</string>
+    <string name="autofill_county" msgid="237073771020362891">"ප්‍රාන්තය"</string>
+    <string name="autofill_island" msgid="4020100875984667025">"දූපත"</string>
+    <string name="autofill_district" msgid="8400735073392267672">"දිස්ත්‍රික්කය"</string>
+    <string name="autofill_department" msgid="5343279462564453309">"දෙපාර්තමේන්තුව"</string>
+    <string name="autofill_prefecture" msgid="2028499485065800419">"ප්‍රාන්තය"</string>
+    <string name="autofill_parish" msgid="8202206105468820057">"කෝරලය"</string>
+    <string name="autofill_area" msgid="3547409050889952423">"ප්‍රදේශය"</string>
+    <string name="autofill_emirate" msgid="2893880978835698818">"එමිරේට්"</string>
+    <string name="permlab_readHistoryBookmarks" msgid="3775265775405106983">"ඔබගේ වෙබ් පිටුසන් සහ ඉතිහාසය කියවීම"</string>
+    <string name="permdesc_readHistoryBookmarks" msgid="8462378226600439658">"බ්‍රව්සරය නැරඹූ සියලු URL සහ සියලු බ්‍රව්සර පිටුසන් වල ඉතිහාසය කියවීමට යෙදුමට අවසර දෙන්න. සටහන: වෙබ් බ්‍රව්සර අවශ්‍යතා සමග තෙවෙනි පාර්ශව බ්‍රව්සර වලට හෝ වෙනත් යෙදුම්වලට මෙම අවසරය බල නොදෙයි."</string>
+    <string name="permlab_writeHistoryBookmarks" msgid="3714785165273314490">"වෙබ් පිටුසන් සහ ඉතිහාසයට ලිවිම"</string>
+    <string name="permdesc_writeHistoryBookmarks" product="tablet" msgid="6825527469145760922">"ඔබගේ ටැබ්ලටයේ ගබඩා කර ඇති බ්‍රව්සරයේ ඉතිහාසය හෝ පිටුසන් වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. බ්‍රව්සර දත්ත මැකීමට හෝ වෙනස් කිරීමට මෙමඟින් යෙදුමට අවසර දෙයි. සටහන: වෙබ් ගවේෂණ හැකියාව සහිත තෙවෙනි පාර්ශව බ්‍රව්සර හෝ වෙනත් යෙදුම් වලින් මෙම අවසරයට බල නොකරයි."</string>
+    <string name="permdesc_writeHistoryBookmarks" product="default" msgid="8497389531014185509">"ඔබගේ දුරකථනයේ ආචයනය කරන ලද බ්‍රව්සර ඉතිහාසය හෝ පිටුසන වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. ඔබගේ බ්‍රව්සර දත්ත මැකීමට හෝ වෙනස් කිරීමට අනිෂ්ට යෙදුම් මෙය භාවිත කරයි. සටහන: වෙබ් බ්‍රව්සර අවශ්‍යතාවය සමග තෙවෙනි පාර්ශව බ්‍රව්සර හෝ වෙනත් යෙදුම් විසින් මෙම අවසරය බල ගැන්විය හැක."</string>
+    <string name="permlab_setAlarm" msgid="1379294556362091814">"සීනුවක් සැකසීම"</string>
+    <string name="permdesc_setAlarm" msgid="316392039157473848">"ස්ථාපනය කරන ලද සීනු ඔරලෝසු යෙදුමේ සීනුව සකස් කරන්නට යෙදුමට ඉඩ දෙන්න. ඇතැම් සීනු ඔරලෝසු යෙදුම් මෙම අංගය ක්‍රියාවට නංවා නොතිබීමට ඉඩ තිබේ."</string>
+    <string name="permlab_addVoicemail" msgid="5525660026090959044">"හඬ තැපෑල එක් කිරීම"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"ඔබගේ හඬ තැපෑලේ එන ලිපි වෙත එන පණිවිඩ එකතු කිරීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"බ්‍රව්සරයේ භූ අවසර වෙනස් කිරීම"</string>
+    <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"බ්‍රවුසරයේ භූ ස්ථානීය අවසර වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. අභිමත වෙබ් අඩවි වලට ස්ථානීය තොරතුරු යැවීමට අනිෂ්ට යෙදුම් මෙය භාවිතා කෙරේ."</string>
+    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"පැකේජ සත්‍යාපනය කරන්න"</string>
+    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"ස්ථාපිත කොට ඇති පැකේජයක් සත්‍යාපනයට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"පැකේජ සත්‍යාපකයක් වෙත බඳින්න"</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"පැකේජ සත්‍යාපක ඉල්ලීම් වලට දරන්නාට ඉඩ ලබා දේ. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අවශ්‍ය නොවේ."</string>
+    <string name="permlab_serialPort" msgid="546083327654631076">"ශ්‍රේණිගත පොට ප්‍රවේශ කිරීම"</string>
+    <string name="permdesc_serialPort" msgid="2991639985224598193">"SerialManager API භාවිතයෙන් අනුක්‍රම තොට වෙත ප්‍රවේශ වීමට රඳවනයට අවසර දෙන්න."</string>
+    <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"බාහිර අන්තර්ගත සැපයුම්කරුවන් වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_accessContentProvidersExternally" msgid="4544346486697853685">"අන්තර්ගත සපයන්නන්ට ප්‍රවේශ වීමට දරන්නන්ට ෂෙල් එකේ සිට ප්‍රවේශ වීමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා කිසිසේත් අදාළ නොවේ."</string>
+    <string name="permlab_updateLock" msgid="3527558366616680889">"ස්වයංක්‍රීය උපාංග යවත්කාල කිරීම් පසුබට කරන්න"</string>
+    <string name="permdesc_updateLock" msgid="1655625832166778492">"උපාංගය උත්ශ්‍රේණිකරණයට අන්තර්ක්‍රියාකාරී නොවන යළි ඇරඹීමක් සඳහා සුදුසු වෙලාව කුමක්ද යන්න ගැන පද්ධතියට තොරතුරු ලබාදීමට දරන්නාට අවසර දෙන්න."</string>
+    <string name="save_password_message" msgid="767344687139195790">"බ්‍රව්සරයට මෙම මුරපදය මතක තබා ගැනීමට ඔබට අවශ්‍යද?"</string>
+    <string name="save_password_notnow" msgid="6389675316706699758">"දැන් නොවේ"</string>
+    <string name="save_password_remember" msgid="6491879678996749466">"මතක තබා ගන්න"</string>
+    <string name="save_password_never" msgid="8274330296785855105">"කවදාවත් නොවේ"</string>
+    <string name="open_permission_deny" msgid="7374036708316629800">"මෙම පිටුව විවෘත කිරීමට ඔබට අවසර නැත."</string>
+    <string name="text_copied" msgid="4985729524670131385">"පෙළ පසුරු පුවරුවට පිටපත් කරන ලදි."</string>
+    <string name="more_item_label" msgid="4650918923083320495">"තව"</string>
+    <string name="prepend_shortcut_label" msgid="2572214461676015642">"මෙනුව+"</string>
+    <string name="menu_space_shortcut_label" msgid="2410328639272162537">"space"</string>
+    <string name="menu_enter_shortcut_label" msgid="2743362785111309668">"ඇතුල් කරන්න"</string>
+    <string name="menu_delete_shortcut_label" msgid="3658178007202748164">"මකන්න"</string>
+    <string name="search_go" msgid="8298016669822141719">"සෙවීම"</string>
+    <string name="searchview_description_search" msgid="6749826639098512120">"සෙවීම"</string>
+    <string name="searchview_description_query" msgid="5911778593125355124">"සෙවුම් විමසුම"</string>
+    <string name="searchview_description_clear" msgid="1330281990951833033">"විමසුම හිස් කරන්න"</string>
+    <string name="searchview_description_submit" msgid="2688450133297983542">"විමසුම යොමු කරන්න"</string>
+    <string name="searchview_description_voice" msgid="2453203695674994440">"හඬ සෙවීම"</string>
+    <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"ස්පර්ශ කිරීමෙන් ගවේෂණය සබල කරන්න ද?"</string>
+    <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය කිරීමට <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ට අවශ්‍යය. ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය විට, ඔබගේ ඇඟිලිවලට පහළ විස්තර ඇසිය හෝ බැලිය හැක හෝ ටැබ්ලටය සමග අන්තර් ක්‍රියාකාරී වීමට ඉංගිති සිදු කළ හැක."</string>
+    <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය කිරීමට <xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> ට අවශ්‍යයි. ස්පර්ශය වෙතින් ගවේෂණය සක්‍රිය විට, ඔබගේ ඇඟිලිවලට පහළ විස්තර ඇසිය හෝ බැලිය හැක හෝ දුරකථනය සමග අන්තර් ක්‍රියාකාරී වීමට ඉංගිති සිදු කළ හැක."</string>
+    <string name="oneMonthDurationPast" msgid="7396384508953779925">"මාස 1 කට පෙර"</string>
+    <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"මාස 1 කට පෙර"</string>
+  <plurals name="num_seconds_ago">
+    <item quantity="one" msgid="4869870056547896011">"තත්පර 1 කට පෙර"</item>
+    <item quantity="other" msgid="3903706804349556379">"තත්පර <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="num_minutes_ago">
+    <item quantity="one" msgid="3306787433088810191">"මිනිත්තු 1 ට පෙර"</item>
+    <item quantity="other" msgid="2176942008915455116">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="num_hours_ago">
+    <item quantity="one" msgid="9150797944610821849">"පැය 1 කට පෙර"</item>
+    <item quantity="other" msgid="2467273239587587569">"පැය <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="last_num_days">
+    <item quantity="other" msgid="3069992808164318268">"අන්තිම දවස් <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+    <string name="last_month" msgid="3959346739979055432">"අවසාන මාසය"</string>
+    <string name="older" msgid="5211975022815554840">"පරණ"</string>
+  <plurals name="num_days_ago">
+    <item quantity="one" msgid="861358534398115820">"ඊයේ"</item>
+    <item quantity="other" msgid="2479586466153314633">"දින <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="in_num_seconds">
+    <item quantity="one" msgid="2729745560954905102">"තත්පර 1 කින්"</item>
+    <item quantity="other" msgid="1241926116443974687">"තත්පර <xliff:g id="COUNT">%d</xliff:g> කදී"</item>
+  </plurals>
+  <plurals name="in_num_minutes">
+    <item quantity="one" msgid="8793095251325200395">"මිනිත්තු 1 කදී"</item>
+    <item quantity="other" msgid="3330713936399448749">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="in_num_hours">
+    <item quantity="one" msgid="7164353342477769999">"පැය 1 ක් තුළ"</item>
+    <item quantity="other" msgid="547290677353727389">"පැය <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="in_num_days">
+    <item quantity="one" msgid="5413088743009839518">"හෙට"</item>
+    <item quantity="other" msgid="5109449375100953247">"දින <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_num_seconds_ago">
+    <item quantity="one" msgid="1849036840200069118">"තත්පර 1 කට පෙර"</item>
+    <item quantity="other" msgid="3699169366650930415">"තත්පර <xliff:g id="COUNT">%d</xliff:g> කට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_num_minutes_ago">
+    <item quantity="one" msgid="6361490147113871545">"මිනිත්තු 1 කට පෙර"</item>
+    <item quantity="other" msgid="851164968597150710">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_num_hours_ago">
+    <item quantity="one" msgid="4796212039724722116">"පැය 1 කට පෙර"</item>
+    <item quantity="other" msgid="6889970745748538901">"පැය <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_num_days_ago">
+    <item quantity="one" msgid="8463161711492680309">"ඊයේ"</item>
+    <item quantity="other" msgid="3453342639616481191">"දින <xliff:g id="COUNT">%d</xliff:g> ට පෙර"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_seconds">
+    <item quantity="one" msgid="5842225370795066299">"තත්පර 1 ක් තුළ"</item>
+    <item quantity="other" msgid="5495880108825805108">"තත්පර <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_minutes">
+    <item quantity="one" msgid="562786149928284878">"මිනිත්තු 1 ක් තුළ"</item>
+    <item quantity="other" msgid="4216113292706568726">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_hours">
+    <item quantity="one" msgid="3274708118124045246">"පැය 1 ක් තුළ"</item>
+    <item quantity="other" msgid="3705373766798013406">"පැය <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+  <plurals name="abbrev_in_num_days">
+    <item quantity="one" msgid="2178576254385739855">"හෙට"</item>
+    <item quantity="other" msgid="2973062968038355991">"දින <xliff:g id="COUNT">%d</xliff:g> ක් තුළ"</item>
+  </plurals>
+    <string name="preposition_for_date" msgid="9093949757757445117">"<xliff:g id="DATE">%s</xliff:g> වන දා"</string>
+    <string name="preposition_for_time" msgid="5506831244263083793">"<xliff:g id="TIME">%s</xliff:g> ට"</string>
+    <string name="preposition_for_year" msgid="5040395640711867177">"<xliff:g id="YEAR">%s</xliff:g> තුළ"</string>
+    <string name="day" msgid="8144195776058119424">"දවස"</string>
+    <string name="days" msgid="4774547661021344602">"දින"</string>
+    <string name="hour" msgid="2126771916426189481">"පැය"</string>
+    <string name="hours" msgid="894424005266852993">"පැය"</string>
+    <string name="minute" msgid="9148878657703769868">"min"</string>
+    <string name="minutes" msgid="5646001005827034509">"මිනිත්තු"</string>
+    <string name="second" msgid="3184235808021478">"තත්"</string>
+    <string name="seconds" msgid="3161515347216589235">"තත්පර"</string>
+    <string name="week" msgid="5617961537173061583">"සතිය"</string>
+    <string name="weeks" msgid="6509623834583944518">"සති"</string>
+    <string name="year" msgid="4001118221013892076">"අවුරුද්ද"</string>
+    <string name="years" msgid="6881577717993213522">"අවුරුදු"</string>
+  <plurals name="duration_seconds">
+    <item quantity="one" msgid="6962015528372969481">"තත්පර 1"</item>
+    <item quantity="other" msgid="1886107766577166786">"තත්පර <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="duration_minutes">
+    <item quantity="one" msgid="4915414002546085617">"මිනිත්තු 1"</item>
+    <item quantity="other" msgid="3165187169224908775">"මිනිත්තු <xliff:g id="COUNT">%d</xliff:g>"</item>
+  </plurals>
+  <plurals name="duration_hours">
+    <item quantity="one" msgid="8917467491248809972">"පැය 1"</item>
+    <item quantity="other" msgid="3863962854246773930">"පැය <xliff:g id="COUNT">%d</xliff:g> ක්"</item>
+  </plurals>
+    <string name="VideoView_error_title" msgid="3534509135438353077">"වීඩියෝ ගැටලුව"</string>
+    <string name="VideoView_error_text_invalid_progressive_playback" msgid="3186670335938670444">"මේ වීඩියෝව මෙම උපාංගයට ප්‍රවාහනය සඳහා වලංගු නැත."</string>
+    <string name="VideoView_error_text_unknown" msgid="3450439155187810085">"මෙම වීඩියෝව ධාවනය කළ නොහැක."</string>
+    <string name="VideoView_error_button" msgid="2822238215100679592">"හරි"</string>
+    <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string>
+    <string name="noon" msgid="7245353528818587908">"මධ්‍යහනය"</string>
+    <string name="Noon" msgid="3342127745230013127">"මධ්‍යාහනය"</string>
+    <string name="midnight" msgid="7166259508850457595">"මධ්‍යම රාත්‍රිය"</string>
+    <string name="Midnight" msgid="5630806906897892201">"මධ්‍යම රාත්‍රිය"</string>
+    <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string>
+    <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string>
+    <string name="selectAll" msgid="6876518925844129331">"සියල්ල තෝරන්න"</string>
+    <string name="cut" msgid="3092569408438626261">"කපන්න"</string>
+    <string name="copy" msgid="2681946229533511987">"පිටපත් කරන්න"</string>
+    <string name="paste" msgid="5629880836805036433">"අලවන්න"</string>
+    <string name="replace" msgid="5781686059063148930">"ප්‍රතිස්ථාපනය කරන්න..."</string>
+    <string name="delete" msgid="6098684844021697789">"මකන්න"</string>
+    <string name="copyUrl" msgid="2538211579596067402">"URL පිටපත් කරන්න"</string>
+    <string name="selectTextMode" msgid="1018691815143165326">"පෙළ තෝරන්න"</string>
+    <string name="textSelectionCABTitle" msgid="5236850394370820357">"පෙළ තේරීම"</string>
+    <string name="addToDictionary" msgid="4352161534510057874">"ශබ්ද කෝෂයට එකතු කරන්න"</string>
+    <string name="deleteText" msgid="6979668428458199034">"මකන්න"</string>
+    <string name="inputMethod" msgid="1653630062304567879">"ආදාන ක්‍රමය"</string>
+    <string name="editTextMenuTitle" msgid="4909135564941815494">"පෙළ ක්‍රියාවන්"</string>
+    <string name="low_internal_storage_view_title" msgid="5576272496365684834">"ආචයනය ඉඩ ප්‍රමාණය අඩු වී ඇත"</string>
+    <string name="low_internal_storage_view_text" msgid="6640505817617414371">"සමහර පද්ධති කාර්යයන් ක්‍රියා නොකරනු ඇත"</string>
+    <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> ධාවනය වේ"</string>
+    <string name="app_running_notification_text" msgid="4653586947747330058">"වැඩිපුර තොරතුරු හෝ යෙදුම නැවතීම සඳහා ස්පර්ශ කරන්න."</string>
+    <string name="ok" msgid="5970060430562524910">"හරි"</string>
+    <string name="cancel" msgid="6442560571259935130">"අවලංගු කරන්න"</string>
+    <string name="yes" msgid="5362982303337969312">"හරි"</string>
+    <string name="no" msgid="5141531044935541497">"අවලංගු කරන්න"</string>
+    <string name="dialog_alert_title" msgid="2049658708609043103">"අවධානය"</string>
+    <string name="loading" msgid="7933681260296021180">"පූරණය වෙමින්..."</string>
+    <string name="capital_on" msgid="1544682755514494298">"සක්‍රීයයි"</string>
+    <string name="capital_off" msgid="6815870386972805832">"අක්‍රිය කරන්න"</string>
+    <string name="whichApplication" msgid="4533185947064773386">"පහත භාවිතයෙන් ක්‍රියාව සම්පූර්ණ කරන්න"</string>
+    <string name="alwaysUse" msgid="4583018368000610438">"මෙම ක්‍රියාව සඳහා සුපුරුද්දෙන් භාවිත කරන්න."</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"පද්ධති සැකසීම් &gt; යෙදුම් &gt; බාගැනීම් තුළ ඇති සුපුරුද්ද හිස් කරන්න."</string>
+    <string name="chooseActivity" msgid="7486876147751803333">"ක්‍රියාවක් තෝරන්න"</string>
+    <string name="chooseUsbActivity" msgid="6894748416073583509">"USB උපාංගය සඳහා යෙදුමක් තෝරන්න"</string>
+    <string name="noApplications" msgid="2991814273936504689">"මෙම ක්‍රියාව සිදු කිරීමට කිසිදු යෙදුමකට නොහැකිය."</string>
+    <string name="aerr_title" msgid="1905800560317137752"></string>
+    <string name="aerr_application" msgid="932628488013092776">"අවාසනාවන්ත ලෙස <xliff:g id="APPLICATION">%1$s</xliff:g> නැවතී ඇත."</string>
+    <string name="aerr_process" msgid="4507058997035697579">"අවාසනාවන්ත ලෙස, <xliff:g id="PROCESS">%1$s</xliff:g> ක්‍රියාවලිය නතර විණි."</string>
+    <string name="anr_title" msgid="4351948481459135709"></string>
+    <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> ප්‍රතිචාර නොදක්වයි.\n\nඔබට එය නතර කිරීමට අවශ්‍යද?"</string>
+    <string name="anr_activity_process" msgid="5776209883299089767">"<xliff:g id="ACTIVITY">%1$s</xliff:g> ක්‍රියාකාරකම ප්‍රතිචාර නොදක්වයි.\n\nඑය වසා දැමීමට ඔබට අවශ්‍යද?"</string>
+    <string name="anr_application_process" msgid="8941757607340481057">"<xliff:g id="APPLICATION">%1$s</xliff:g> ප්‍රතිචාර නොදක්වයි. එය වසා දැමීමට ඔබට අවශ්‍යද?"</string>
+    <string name="anr_process" msgid="6513209874880517125">"<xliff:g id="PROCESS">%1$s</xliff:g> ක්‍රියාවලිය ප්‍රතිචාර නොදක්වයි.\n\nඔබට එය නතර කිරීමට අවශ්‍යද?"</string>
+    <string name="force_close" msgid="8346072094521265605">"හරි"</string>
+    <string name="report" msgid="4060218260984795706">"වාර්තාව"</string>
+    <string name="wait" msgid="7147118217226317732">"රැඳී සිටින්න"</string>
+    <string name="webpage_unresponsive" msgid="3272758351138122503">"පිටුව ප්‍රතිචාර නොදක්වන තත්වයට පත්වී ඇත.\n\nඔබට එය වැසීමට අවශ්‍යද?"</string>
+    <string name="launch_warning_title" msgid="1547997780506713581">"යෙදුම නැවත හරවා යවා ඇත"</string>
+    <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> දැන් ධාවනය වෙයි."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> මුලින්ම අරඹා ඇත."</string>
+    <string name="screen_compat_mode_scale" msgid="3202955667675944499">"පරිමාණය"</string>
+    <string name="screen_compat_mode_show" msgid="4013878876486655892">"සැමවිටම පෙන්වන්න"</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"පද්ධති සැකසීම් තුළ මෙය නැවත ක්‍රියාත්මක කරන්න &gt; යෙදුම් &gt; බාගන්නා ලදි."</string>
+    <string name="smv_application" msgid="3307209192155442829">"<xliff:g id="APPLICATION">%1$s</xliff:g> යෙදුම (<xliff:g id="PROCESS">%2$s</xliff:g> ක්‍රියාවලිය) එහි StrictMode කොන්දේසිය උල්ලංඝනය කර ඇත."</string>
+    <string name="smv_process" msgid="5120397012047462446">"<xliff:g id="PROCESS">%1$s</xliff:g> ක්‍රියාවලිය එහි StrictMode කොන්දේසිය උල්ලංඝනය කර ඇත."</string>
+    <string name="android_upgrading_title" msgid="1584192285441405746">"Android උත්ශ්‍රේණි වෙමින් පවතී..."</string>
+    <string name="android_upgrading_apk" msgid="7904042682111526169">"<xliff:g id="NUMBER_1">%2$d</xliff:g> කින් <xliff:g id="NUMBER_0">%1$d</xliff:g> වැනි යෙදුමප්‍ රශස්ත කරමින්."</string>
+    <string name="android_upgrading_starting_apps" msgid="451464516346926713">"යෙදුම් ආරම්භ කරමින්."</string>
+    <string name="android_upgrading_complete" msgid="1405954754112999229">"ඇරඹුම අවසාන කරමින්."</string>
+    <string name="heavy_weight_notification" msgid="9087063985776626166">"<xliff:g id="APP">%1$s</xliff:g> ධාවනය වෙමින්"</string>
+    <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"යෙදුමට මාරු වීමට ස්පර්ශ කරන්න"</string>
+    <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"යෙදුම් මාරු වනවාද?"</string>
+    <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"අලුත් යෙදුමක් ආරම්භ කිරීමට පෙර තවමත් ක්‍රියාවෙහි යෙදෙමින් පවතින යෙදුම නැවැත්විය යුතුයි."</string>
+    <string name="old_app_action" msgid="493129172238566282">"<xliff:g id="OLD_APP">%1$s</xliff:g> වෙත ආපසු යන්න"</string>
+    <string name="old_app_description" msgid="2082094275580358049">"නව යෙදුම ආරම්භ නොකරන්න."</string>
+    <string name="new_app_action" msgid="5472756926945440706">"<xliff:g id="OLD_APP">%1$s</xliff:g> අරඹන්න"</string>
+    <string name="new_app_description" msgid="1932143598371537340">"සුරැකීමකින් තොරව පරණ යෙදුම නවත්වන්න."</string>
+    <string name="sendText" msgid="5209874571959469142">"පෙළ සඳහා ක්‍රියාව තෝරන්න"</string>
+    <string name="volume_ringtone" msgid="6885421406845734650">"හඬ නඟනයේ ශබ්දය"</string>
+    <string name="volume_music" msgid="5421651157138628171">"මාධ්‍ය ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_music_hint_playing_through_bluetooth" msgid="9165984379394601533">"බ්ලූටූත් හරහා ධාවනය වෙයි"</string>
+    <string name="volume_music_hint_silent_ringtone_selected" msgid="8310739960973156272">"නිහඬ රිගින් ටෝනයක් සකසන්න"</string>
+    <string name="volume_call" msgid="3941680041282788711">"ඇමතුම-තුළ ශබ්ද ත්‍රීවතාව"</string>
+    <string name="volume_bluetooth_call" msgid="2002891926351151534">"බ්ලූටූත් ඇමතුම-තුළ ශබ්ද ත්‍රීවතාවය"</string>
+    <string name="volume_alarm" msgid="1985191616042689100">"සීනුවේ ශබ්දය"</string>
+    <string name="volume_notification" msgid="2422265656744276715">"දැනුම්දීමේ ශබ්දය"</string>
+    <string name="volume_unknown" msgid="1400219669770445902">"ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_icon_description_bluetooth" msgid="6538894177255964340">"බ්ලූටූත් ශබ්ද ත්‍රීවතාව"</string>
+    <string name="volume_icon_description_ringer" msgid="3326003847006162496">"රින්ටෝනයේ ශබ්දය"</string>
+    <string name="volume_icon_description_incall" msgid="8890073218154543397">"ඇමතුම් ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_icon_description_media" msgid="4217311719665194215">"මාධ්‍ය ශබ්දය ත්‍රීවතාවය"</string>
+    <string name="volume_icon_description_notification" msgid="7044986546477282274">"දැනුම්දීමේ ශබ්ද ත්‍රීවතාව"</string>
+    <string name="ringtone_default" msgid="3789758980357696936">"සුපුරුදු රින්ටෝනය සකසන්න"</string>
+    <string name="ringtone_default_with_actual" msgid="8129563480895990372">"සුපුරුදු රින්ටෝනය (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string>
+    <string name="ringtone_silent" msgid="7937634392408977062">"කිසිවක් නැත"</string>
+    <string name="ringtone_picker_title" msgid="3515143939175119094">"රිගින්ටෝන"</string>
+    <string name="ringtone_unknown" msgid="5477919988701784788">"නොදන්නා රින්ටෝනය"</string>
+  <plurals name="wifi_available">
+    <item quantity="one" msgid="6654123987418168693">"Wi-Fi ජාලයක් තිබේ"</item>
+    <item quantity="other" msgid="4192424489168397386">"Wi-Fi ජාල ඇත"</item>
+  </plurals>
+  <plurals name="wifi_available_detailed">
+    <item quantity="one" msgid="1634101450343277345">"විවෘත Wi-Fi ජාලය ලබාගත හැක"</item>
+    <item quantity="other" msgid="7915895323644292768">"විවෘත Wi-Fi ජාල තිබේ"</item>
+  </plurals>
+    <string name="wifi_available_sign_in" msgid="4029489716605255386">"Wi-Fi ජලයට පුරනය වන්න"</string>
+    <string name="network_available_sign_in" msgid="8495155593358054676">"ජාලයට පුරනය වන්න"</string>
+    <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) -->
+    <skip />
+    <string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi වෙත සම්බන්ධ විය නොහැක"</string>
+    <string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" දුබල අන්තර්ජාල සම්බන්ධතාවයක් ඇත."</string>
+    <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"ඍජු Wi-Fi"</string>
+    <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"ඍජු Wi-Fi ආරම්භ කරන්න. මෙය Wi-Fi සේවාදායක/හොට්ස්පොට් එක අක්‍රිය කරනු ඇත."</string>
+    <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"ඍජු Wi-Fi ආරම්භ කළ නොහැක."</string>
+    <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi ඍජු සම්බන්ධතාව සක්‍රියයි"</string>
+    <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"සැකසීම් සඳහා ස්පර්ශ කරන්න"</string>
+    <string name="accept" msgid="1645267259272829559">"පිළිගන්න"</string>
+    <string name="decline" msgid="2112225451706137894">"ප්‍රතික්ෂේප කරන්න"</string>
+    <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"ආරාධනාව යවන ලදි"</string>
+    <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"සම්බන්ධතාවයට ඇරයුමකි"</string>
+    <string name="wifi_p2p_from_message" msgid="570389174731951769">"වෙතින්:"</string>
+    <string name="wifi_p2p_to_message" msgid="248968974522044099">"වෙත:"</string>
+    <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"අවශ්‍ය PIN එක ටයිප් කරන්න:"</string>
+    <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"PIN:"</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"ටැබ්ලටය <xliff:g id="DEVICE_NAME">%1$s</xliff:g> වෙත සම්බන්ධ වන අතරතුර එය Wi-Fi වලින් තාවකාලිකව විසන්ධි කෙරේ."</string>
+    <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"දුරකථනය <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ට සම්බන්ධ වී පවතින විට Wi-Fi වලින් එය තාවකාලිකව විසන්ධි වෙයි."</string>
+    <string name="select_character" msgid="3365550120617701745">"අකුර ඇතුළත් කරන්න"</string>
+    <string name="sms_control_title" msgid="7296612781128917719">"SMS පණිවිඩ යවමින්"</string>
+    <string name="sms_control_message" msgid="3867899169651496433">"&lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;/b&gt; SMS පණිවිඩ විශාල ගණනක් යවයි. මෙම යෙදුමට පණිවිඩ යැවීම නොනැවතී කරගෙන යාමට අවසර දීමට ඔබට අවශ්‍යද?"</string>
+    <string name="sms_control_yes" msgid="3663725993855816807">"අවසර දෙන්න"</string>
+    <string name="sms_control_no" msgid="625438561395534982">"ප්‍රතික්ෂේප කරන්න"</string>
+    <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"&lt;b&gt;<xliff:g id="DEST_ADDRESS">%2$s</xliff:g>&lt;b&gt; වෙත කෙටි පණිවීඩයක් යැවීමට &lt;b&gt;<xliff:g id="APP_NAME">%1$s</xliff:g>&lt;b&gt; කැමතිය."</string>
+    <!-- syntax error in translation for sms_short_code_details (3492025719868078457) org.xmlpull.v1.XmlPullParserException: expected: /string read: font (position:END_TAG </font>@1:83 in     <string name="sms_short_code_details" msgid="3492025719868078457">"මෙය "</font>"ඔබගේ ජංගම ගිණුමේ"<font fgcolor="#ffffb060">" අය වීම් වලට හේතුවක් වේ."</string>
+)  -->
+    <string name="sms_premium_short_code_details" msgid="5523826349105123687"><font fgcolor="#ffffb060">"මෙය ඔබගේ ජංගම ගිණුමෙන් අයවීමට හේතු වේ."</font></string>
+    <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"යවන්න"</string>
+    <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"අවලංගු කරන්න"</string>
+    <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"මගේ තේරීම මතක තබාගන්න"</string>
+    <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"ඔබට මෙය සැකසීම් තුළ වෙනස්කර ගැනීම පසුව කළ හැක &gt; යෙදුම්"</string>
+    <string name="sms_short_code_confirm_always_allow" msgid="3241181154869493368">"සැමවිටම ඉඩ දෙන්න"</string>
+    <string name="sms_short_code_confirm_never_allow" msgid="446992765774269673">"කිසිදා අවසර නොදෙන්න"</string>
+    <string name="sim_removed_title" msgid="6227712319223226185">"SIM පත ඉවත් කරන ලදි"</string>
+    <string name="sim_removed_message" msgid="2333164559970958645">"ඔබ ඇතුළත් කරන ලද වලංගු SIM පත සමඟ නැවත ඇරඹීම කරන තුරු ජංගම ජාලය නොතිබේ."</string>
+    <string name="sim_done_button" msgid="827949989369963775">"හරි"</string>
+    <string name="sim_added_title" msgid="3719670512889674693">"SIM පතක් එකතු කරන ලදි"</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"ජංගම ජාලයට ප්‍රවේශ වීමට ඔබගේ උපාංගය නැවත අරඹන්න."</string>
+    <string name="sim_restart_button" msgid="4722407842815232347">"යළි අරඹන්න"</string>
+    <string name="time_picker_dialog_title" msgid="8349362623068819295">"වේලාව සකසන්න"</string>
+    <string name="date_picker_dialog_title" msgid="5879450659453782278">"දිනය සැකසීම"</string>
+    <string name="date_time_set" msgid="5777075614321087758">"සකසන්න"</string>
+    <string name="date_time_done" msgid="2507683751759308828">"හරි"</string>
+    <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"අලුත්: "</font></string>
+    <string name="perms_description_app" msgid="5139836143293299417">"<xliff:g id="APP_NAME">%1$s</xliff:g> විසින් සපයන ලදි."</string>
+    <string name="no_permissions" msgid="7283357728219338112">"අවසර අවශ්‍ය නොමැත"</string>
+    <string name="perm_costs_money" msgid="4902470324142151116">"මෙමඟින් ඔබට මුදල් වැය විය හැක"</string>
+    <string name="usb_storage_activity_title" msgid="4465055157209648641">"USB මහා ආචයනය"</string>
+    <string name="usb_storage_title" msgid="5901459041398751495">"USB සම්බන්ධිතයි"</string>
+    <string name="usb_storage_message" product="nosdcard" msgid="3308538094316477839">"ඔබ ඔබගේ පරිගණකයට සම්බන්ධ වී ඇත්තේ USB ස්පර්ශය හරහාය. ඔබට ඔබේ පරිගණකය හා ඔබගේ Android USB ආචයනය අතර ගොනු පිටපත් කිරීමට අවශ්‍ය නම් පහත බොත්තම ඔබන්න."</string>
+    <string name="usb_storage_message" product="default" msgid="805351000446037811">"ඔබ ඔබගේ පරිගණකයට USB හරහා සම්බන්ධ වී ඇත. ඔබට ඔබේ පරිගණකය හා ඔබගේ Android SD පත අතර ගොනු පිටපත් කිරීමට අවශ්‍ය නම් පහත බොත්තම ස්පර්ශ කරන්න."</string>
+    <string name="usb_storage_button_mount" msgid="1052259930369508235">"USB ආචයනය සක්‍රිය කරන්න"</string>
+    <string name="usb_storage_error_message" product="nosdcard" msgid="3017045217365540658">"USB මහා ආචයනය සඳහා ඔබගේ USB ආචයනය භාවිතයේදී ගැටළුවක් තිබේ."</string>
+    <string name="usb_storage_error_message" product="default" msgid="2876018512716970313">"USB මහා ආචයනය සඳහා ඔබගේ SD පත භාවිතයේදී ගැටළුවක් තිබේ."</string>
+    <string name="usb_storage_notification_title" msgid="8175892554757216525">"USB සම්බන්ධිතයි"</string>
+    <string name="usb_storage_notification_message" msgid="939822783828183763">"ඔබගේ පරිගණකය වෙතට/වෙතින් ගොනු පිටපත් කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="usb_storage_stop_notification_title" msgid="2336058396663516017">"USB ආචයනය අක්‍රිය කරන්න"</string>
+    <string name="usb_storage_stop_notification_message" msgid="1656852098555623822">"USB ආචයනය අක්‍රිය කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="usb_storage_stop_title" msgid="660129851708775853">"USB ආචයනය භාවිතයේ පවතී"</string>
+    <string name="usb_storage_stop_message" product="nosdcard" msgid="4264025280777219521">"USB ආචයනය අක්‍රිය කිරීමට පෙර, ඔබගේ පරිගණකයෙන් Android USB ආචයනය ගලවා දමන්න (\"පිට කරන්න\")."</string>
+    <string name="usb_storage_stop_message" product="default" msgid="8043969782460613114">"USB ආචයනය අක්‍රිය කිරීමට පෙර, ඔබගේ Android SD පත පරිගණකයෙන් ගලවන්න."</string>
+    <string name="usb_storage_stop_button_mount" msgid="7060218034900696029">"USB ආචයනය අක්‍රිය කරන්න"</string>
+    <string name="usb_storage_stop_error_message" msgid="1970374898263063836">"USB ආචයනය අක්‍රිය කිරීමේදී ගැටළුවක් ඇතිවිය. USB සංග්‍රාහකය ගලවා ඇති දැයි පරීක්ෂා කරන්න, පසුව නැවතත් උත්සහ කරන්න."</string>
+    <string name="dlg_confirm_kill_storage_users_title" msgid="963039033470478697">"USB ආචයනය සක්‍රිය කරන්න"</string>
+    <string name="dlg_confirm_kill_storage_users_text" msgid="5100428757107469454">"ඔබ USB ආචයනය සක්‍රිය නම්, ඔබ භාවිතා කරන සමහර යෙදුම් නැවතීම සහ ඔබ USB ආචයනය අක්‍රිය කරන තුරු නොතිබේවී."</string>
+    <string name="dlg_error_title" msgid="7323658469626514207">"USB ක්‍රියාවලිය අසාර්ථකයි"</string>
+    <string name="dlg_ok" msgid="7376953167039865701">"හරි"</string>
+    <string name="usb_mtp_notification_title" msgid="3699913097391550394">"මාධ්‍ය උපාංගයක් ලෙස සම්බන්ධිතයි"</string>
+    <string name="usb_ptp_notification_title" msgid="1960817192216064833">"කැමරාවක් ලෙස සම්බන්ධ කර ඇත"</string>
+    <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"ස්ථාපිතයක් ලෙස සම්බන්ධයි"</string>
+    <string name="usb_accessory_notification_title" msgid="7848236974087653666">"USB මෙවලමකට සම්බන්ධිතයි"</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"අනෙක් USB විකල්පය සඳහා ස්පර්ශ කරන්න."</string>
+    <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"USB ආචයනය ෆෝමැට් කරන්නද?"</string>
+    <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"SD පත ෆෝමැට් කරන්නද?"</string>
+    <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"ඔබගේ USB ආචයනයේ ඇති සියලුම ගොනු මැකී යනු ඇත. මෙම ක්‍රියාව ආපසු හැරවිය නොහැක!"</string>
+    <string name="extmedia_format_message" product="default" msgid="14131895027543830">"ඔබගේ පතේ සියලු දත්ත නැති වනු ඇත."</string>
+    <string name="extmedia_format_button_format" msgid="4131064560127478695">"ෆෝමැට්"</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"USB නිදොස්කරණය සම්බන්ධිතයි"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"USB නිදොස්කරණය අබල කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="select_input_method" msgid="4653387336791222978">"ආදාන ක්‍රමයක් තෝරන්න"</string>
+    <string name="configure_input_methods" msgid="9091652157722495116">"ආදාන ක්‍රම සකසන්න"</string>
+    <string name="use_physical_keyboard" msgid="6203112478095117625">"භෞතික යතුරු පුවරුව"</string>
+    <string name="hardware" msgid="7517821086888990278">"දෘඨාංග"</string>
+    <string name="select_keyboard_layout_notification_title" msgid="1407367017263030773">"යතුරු පුවරුවට පිරිසැලැස්ම තෝරන්න"</string>
+    <string name="select_keyboard_layout_notification_message" msgid="4465907700449257063">"යතුරු පුවරුවට පිරිසැලැස්මක් තේරීමට ස්පර්ශ කරන්න."</string>
+    <string name="fast_scroll_alphabet" msgid="5433275485499039199">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="fast_scroll_numeric_alphabet" msgid="4030170524595123610">" 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
+    <string name="candidates_style" msgid="4333913089637062257"><u>"අපේක්ෂකයන්"</u></string>
+    <string name="ext_media_checking_notification_title" product="nosdcard" msgid="3449816005351468560">"USB ආචයනය සකසමින්"</string>
+    <string name="ext_media_checking_notification_title" product="default" msgid="5457603418970994050">"SD පත සුදානම් කරමින්"</string>
+    <string name="ext_media_checking_notification_message" msgid="8287319882926737053">"වැරදි සඳහා පරීක්ෂා කරමින්."</string>
+    <string name="ext_media_nofs_notification_title" product="nosdcard" msgid="7788040745686229307">"හිස් USB ආචයනය"</string>
+    <string name="ext_media_nofs_notification_title" product="default" msgid="780477838241212997">"හිස් SD පත"</string>
+    <string name="ext_media_nofs_notification_message" product="nosdcard" msgid="7840121067427269500">"SD පත හිස් හෝ සහාය නොදක්වන ගොනු පද්ධතියක් ඇත."</string>
+    <string name="ext_media_nofs_notification_message" product="default" msgid="8641065641786923604">"SD පත හිස් හෝ සහය නොදක්වන ගොනු පද්ධතියක් ඇත"</string>
+    <string name="ext_media_unmountable_notification_title" product="nosdcard" msgid="2090046769532713563">"හානි වූ USB ආචයනය"</string>
+    <string name="ext_media_unmountable_notification_title" product="default" msgid="6410723906019100189">"හානි වූ SD පත"</string>
+    <string name="ext_media_unmountable_notification_message" product="nosdcard" msgid="1795917578395333280">"USB ආචයනයට හානි වී ඇත. එය නැවත ෆෝමැට් ගැන්වීමට උත්සහ කරන්න."</string>
+    <string name="ext_media_unmountable_notification_message" product="default" msgid="1753898567525568253">"SD පතට හානි වී ඇත. එය නැවත ෆෝමැට් ගැන්වීමට උත්සහ කරන්න."</string>
+    <string name="ext_media_badremoval_notification_title" product="nosdcard" msgid="1661683031330951073">"බලාපොරොත්තු නොවූ ලෙස USB ආචයනය ඉවත් කෙරිණි"</string>
+    <string name="ext_media_badremoval_notification_title" product="default" msgid="6872152882604407837">"SD පත බලාපොරොත්තු රහිතව ඉවත් කරන ලදි"</string>
+    <string name="ext_media_badremoval_notification_message" product="nosdcard" msgid="4329848819865594241">"දත්ත නැතිවීම වැළක්වීමට USB ආචයනය ඉවත්කිරීමට පෙර ගලවන්න."</string>
+    <string name="ext_media_badremoval_notification_message" product="default" msgid="7260183293747448241">"දත්ත නැතිවීම වැළක්වීමට ගැලවීමට කලින් SD පත ඉවත් කරන්න."</string>
+    <string name="ext_media_safe_unmount_notification_title" product="nosdcard" msgid="3967973893270360230">"ඉවත් කිරීමට USB ආචයනය ආරක්ෂිතයි"</string>
+    <string name="ext_media_safe_unmount_notification_title" product="default" msgid="6729801130790616200">"SD පත ඉවත් කිරීමට සුරක්ෂිතයි"</string>
+    <string name="ext_media_safe_unmount_notification_message" product="nosdcard" msgid="6142195361606493530">"ඔබට USB ආචයනය ආරක්ෂිතව ඉවත් කිරීමට පුළුවනි."</string>
+    <string name="ext_media_safe_unmount_notification_message" product="default" msgid="568841278138377604">"ඔබට ආරක්ෂිතව SD පත ඉවත් කළ හැක"</string>
+    <string name="ext_media_nomedia_notification_title" product="nosdcard" msgid="4486377230140227651">"USB ආචයනය ඉවත් කරන ලදි"</string>
+    <string name="ext_media_nomedia_notification_title" product="default" msgid="8902518030404381318">"SD පත ඉවත් කර ඇත"</string>
+    <string name="ext_media_nomedia_notification_message" product="nosdcard" msgid="6921126162580574143">"USB ආචයනය ඉවත්කොට ඇත. අලුත් මාධ්‍යයක් ඇතුළත් කරන්න."</string>
+    <string name="ext_media_nomedia_notification_message" product="default" msgid="3870120652983659641">"SD පත ඉවත් කරන ලදි. අලුත් එකක් ඇතුළත් කරන්න."</string>
+    <string name="activity_list_empty" msgid="1675388330786841066">"ගැලපෙන ක්‍රියාකාරකම් හමු නොවුණි."</string>
+    <string name="permlab_pkgUsageStats" msgid="8787352074326748892">"සංරචකය භාවිත කිරීමේ සංඛ්‍යාන යාවත්කාලීන කරන්න"</string>
+    <string name="permdesc_pkgUsageStats" msgid="1106612424254277630">"එකතු කරන ලද සංරචකය භාවිතා සංඛ්‍යාන වෙනස් කිරීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම් සඳහා නොවේ."</string>
+    <string name="permlab_copyProtectedData" msgid="4341036311211406692">"අන්තර්ගතය පිටපත් කරන්න"</string>
+    <string name="permdesc_copyProtectedData" msgid="4390697124288317831">"අන්තර්ගතය පිටපත් කිරීමට සුපුරුදු අන්තර්ගත සේවාව ඉල්වා සිටීමට යෙදුමට අවසර දෙන්න. සාමාන්‍ය යෙදුම්වල භාවිතය සඳහා නොවේ."</string>
+    <string name="permlab_route_media_output" msgid="1642024455750414694">"මාධ්‍ය ප්‍රතිදානයේ මාර්ගගත කිරීම"</string>
+    <string name="permdesc_route_media_output" msgid="4932818749547244346">"වෙනත් බාහිර උපාංග වෙත මාධ්‍ය ප්‍රතිදානය යැවීමට යෙදුමට අවසර දෙන්න."</string>
+    <string name="permlab_access_keyguard_secure_storage" msgid="7565552237977815047">"යතුරු පාලක ආරක්‍ෂිත ආචයනය වෙත ප්‍රවේශය"</string>
+    <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"යතුරු ආරක්ෂක ආචයනයට ප්‍රවේශ වීමට යෙදුමට දෙයි."</string>
+    <string name="permlab_control_keyguard" msgid="172195184207828387">"පෙන්වීමේ හා සැඟවීමේ යතුරු ආරක්ෂකය පාලනය කරන්න"</string>
+    <string name="permdesc_control_keyguard" msgid="3043732290518629061">"යතුරු ආරක්ෂකය පාලනයට යෙදුමකට අවසර දෙන්න."</string>
+    <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"විශාලන පාලනය සඳහා දෙවරක් ස්පර්ශ කරන්න"</string>
+    <string name="gadget_host_error_inflating" msgid="4882004314906466162">"විජටය එකතු කිරීමට නොහැකි විය."</string>
+    <string name="ime_action_go" msgid="8320845651737369027">"යන්න"</string>
+    <string name="ime_action_search" msgid="658110271822807811">"සෙවීම"</string>
+    <string name="ime_action_send" msgid="2316166556349314424">"යවන්න"</string>
+    <string name="ime_action_next" msgid="3138843904009813834">"මීලඟ"</string>
+    <string name="ime_action_done" msgid="8971516117910934605">"හරි"</string>
+    <string name="ime_action_previous" msgid="1443550039250105948">"පෙර"</string>
+    <string name="ime_action_default" msgid="2840921885558045721">"ක්‍රියාකරවන්න"</string>
+    <string name="dial_number_using" msgid="5789176425167573586">"<xliff:g id="NUMBER">%s</xliff:g> භාවිතයෙන්\nඅංකය අමතන්න"</string>
+    <string name="create_contact_using" msgid="4947405226788104538">"<xliff:g id="NUMBER">%s</xliff:g> භාවිතයෙන්\nසම්බන්ධතාවයක් නිර්මාණය කරන්න"</string>
+    <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"පහත දැක්වෙන එකක් හෝ ඊට වැඩි යෙදුම් ගණනක් ඔබගේ ගිණුමට ප්‍රවේශ වීමට, දැන් සහ ඉදිරියේදී අවසර ඉල්ලයි."</string>
+    <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"මෙම ඉල්ලීමට අවසර දීමට ඔබට අවශ්‍යද?"</string>
+    <string name="grant_permissions_header_text" msgid="6874497408201826708">"ප්‍රවේශය ඉල්ලීම"</string>
+    <string name="allow" msgid="7225948811296386551">"අවසර දෙන්න"</string>
+    <string name="deny" msgid="2081879885755434506">"ප්‍රතික්ෂේප කරන්න"</string>
+    <string name="permission_request_notification_title" msgid="6486759795926237907">"අවසර ඉල්ලා සිටී"</string>
+    <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"<xliff:g id="ACCOUNT">%s</xliff:g> ගිණුම සඳහා\nඅවසර ඉල්ලන ලදි."</string>
+    <string name="input_method_binding_label" msgid="1283557179944992649">"ආදාන ක්‍රමය"</string>
+    <string name="sync_binding_label" msgid="3687969138375092423">"සමමුහුර්තය"</string>
+    <string name="accessibility_binding_label" msgid="4148120742096474641">"ප්‍රවේශ්‍යතාව"</string>
+    <string name="wallpaper_binding_label" msgid="1240087844304687662">"බිතුපත"</string>
+    <string name="chooser_wallpaper" msgid="7873476199295190279">"බිතුපත වෙනස් කරන්න"</string>
+    <string name="notification_listener_binding_label" msgid="2014162835481906429">"දැනුම්දීම් අසන්නා"</string>
+    <string name="vpn_title" msgid="19615213552042827">"VPN ක්‍රියාත්මකයි"</string>
+    <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> මඟින් VPN සක්‍රීය කරන ලදි"</string>
+    <string name="vpn_text" msgid="3011306607126450322">"ජාලය කළමනාකරණය කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="vpn_text_long" msgid="6407351006249174473">"<xliff:g id="SESSION">%s</xliff:g> වෙත සම්බන්ධ වුණි. ජාලය කළමනාකරණය කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"සැමවිටම VPN සම්බන්ධ වෙමින්…"</string>
+    <string name="vpn_lockdown_connected" msgid="8202679674819213931">"නිරතුරුවම VPN සම්බන්ධ කර ඇත"</string>
+    <string name="vpn_lockdown_error" msgid="6009249814034708175">"සැමවිට සක්‍රිය VPN දෝෂය"</string>
+    <string name="vpn_lockdown_config" msgid="6415899150671537970">"වින්‍යාස කිරීමට ස්පර්ශ කරන්න"</string>
+    <string name="upload_file" msgid="2897957172366730416">"ගොනුව තෝරන්න"</string>
+    <string name="no_file_chosen" msgid="6363648562170759465">"ගොනුවක් තෝරාගෙන නැත"</string>
+    <string name="reset" msgid="2448168080964209908">"යළි පිහිටුවන්න"</string>
+    <string name="submit" msgid="1602335572089911941">"යොමු කරන්න"</string>
+    <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"මෝටර් රථ ආකාරය සබල කර ඇත"</string>
+    <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"මෝටර් රථ ආකාරයෙන් පිටවීමට ස්පර්ශ කරන්න."</string>
+    <string name="tethered_notification_title" msgid="3146694234398202601">"ටෙදරින් හෝ හොට්ස්පොට් සක්‍රීයයි"</string>
+    <string name="tethered_notification_message" msgid="6857031760103062982">"සකස් කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="back_button_label" msgid="2300470004503343439">"ආපසු"</string>
+    <string name="next_button_label" msgid="1080555104677992408">"මීලඟ"</string>
+    <string name="skip_button_label" msgid="1275362299471631819">"මඟ හරින්න"</string>
+    <string name="throttle_warning_notification_title" msgid="4890894267454867276">"ඉහළ ජංගම දත්ත භාවිතය"</string>
+    <string name="throttle_warning_notification_message" msgid="3340822228599337743">"ජංගම දත්ත භාවිතය ගැන තව දැනගැනීමට ස්පර්ශ කරන්න."</string>
+    <string name="throttled_notification_title" msgid="6269541897729781332">"ජංගම දත්ත සීමාව ඉක්මවා ඇත"</string>
+    <string name="throttled_notification_message" msgid="5443457321354907181">"ජංගම දත්ත භාවිතය ගැන තව දැනගැනීමට ස්පර්ශ කරන්න."</string>
+    <string name="no_matches" msgid="8129421908915840737">"ගැලපීම් නැත"</string>
+    <string name="find_on_page" msgid="1946799233822820384">"පිටුවෙහි සෙවීම"</string>
+  <plurals name="matches_found">
+    <item quantity="one" msgid="8167147081136579439">"ගැළපීම් 1 යි"</item>
+    <item quantity="other" msgid="4641872797067609177">"<xliff:g id="TOTAL">%d</xliff:g> කින් <xliff:g id="INDEX">%d</xliff:g>"</item>
+  </plurals>
+    <string name="action_mode_done" msgid="7217581640461922289">"හරි"</string>
+    <string name="progress_unmounting" product="nosdcard" msgid="3923810448507612746">"USB ආචයනය ගැලවීම..."</string>
+    <string name="progress_unmounting" product="default" msgid="1327894998409537190">"SD පත ගලවමින්..."</string>
+    <string name="progress_erasing" product="nosdcard" msgid="4521573321524340058">"USB ආචයනය මකමින්..."</string>
+    <string name="progress_erasing" product="default" msgid="6596988875507043042">"SD පත මකමින්..."</string>
+    <string name="format_error" product="nosdcard" msgid="6299769563624776948">"USB ආචයනය මැකිය නොහැක."</string>
+    <string name="format_error" product="default" msgid="7315248696644510935">"SD පත මැකීමට නොහැකි විය."</string>
+    <string name="media_bad_removal" msgid="7960864061016603281">"ගැලවීමට පෙර SD පත ඉවත්කර ඇත."</string>
+    <string name="media_checking" product="nosdcard" msgid="418188720009569693">"USB ආචයනය මේ වනවිට පරීක්ෂා කරමින් පවතී."</string>
+    <string name="media_checking" product="default" msgid="7334762503904827481">"SD පත දැන් පරීක්ෂා කරමින් පවතී."</string>
+    <string name="media_removed" msgid="7001526905057952097">"SD පත ඉවත් කර ඇත."</string>
+    <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"පරිගණකයක් විසින් දැන් USB ආචයනය භාවිතා කරයි."</string>
+    <string name="media_shared" product="default" msgid="5706130568133540435">"SD පත දැනට පරිගණකයකින් පාවිච්චි කරයි."</string>
+    <string name="media_unknown_state" msgid="729192782197290385">"බාහිර මාධ්‍යය නොදන්නා අවස්ථාවේ පවතියි."</string>
+    <string name="share" msgid="1778686618230011964">"බෙදාගන්න"</string>
+    <string name="find" msgid="4808270900322985960">"සොයන්න"</string>
+    <string name="websearch" msgid="4337157977400211589">"වෙබ් සෙවුම"</string>
+    <string name="find_next" msgid="5742124618942193978">"මීළඟ සොයන්න"</string>
+    <string name="find_previous" msgid="2196723669388360506">"පෙර එක සොයන්න"</string>
+    <string name="gpsNotifTicker" msgid="5622683912616496172">"<xliff:g id="NAME">%s</xliff:g> ගෙන් ස්ථානය ඉල්ලීම"</string>
+    <string name="gpsNotifTitle" msgid="5446858717157416839">"ස්ථාන ඉල්ලීම"</string>
+    <string name="gpsNotifMessage" msgid="1374718023224000702">"<xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>) විසින් ඉල්ලන ලද"</string>
+    <string name="gpsVerifYes" msgid="2346566072867213563">"ඔව්"</string>
+    <string name="gpsVerifNo" msgid="1146564937346454865">"නැත"</string>
+    <string name="sync_too_many_deletes" msgid="5296321850662746890">"මැකීමේ සීමාව ඉක්මවන ලදි"</string>
+    <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"<xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g> සඳහා <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g> ගිණුමේ මකන ලද අයිතම <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> ක් ඇත. ඔබට කුමක් කිරීමට අවශ්‍යද?"</string>
+    <string name="sync_really_delete" msgid="2572600103122596243">"අයිතම මකන්න"</string>
+    <string name="sync_undo_deletes" msgid="2941317360600338602">"මැකීම් අස් කරන්න"</string>
+    <string name="sync_do_nothing" msgid="3743764740430821845">"දැනට කිසිවක් නොකරන්න"</string>
+    <string name="choose_account_label" msgid="5655203089746423927">"ගිණුමක් තෝරන්න"</string>
+    <string name="add_account_label" msgid="2935267344849993553">"ගිණුමක් එකතු කරන්න"</string>
+    <string name="add_account_button_label" msgid="3611982894853435874">"ගිණුමක් එකතු කරන්න"</string>
+    <string name="number_picker_increment_button" msgid="2412072272832284313">"වැඩි කරන්න"</string>
+    <string name="number_picker_decrement_button" msgid="476050778386779067">"අඩු කරන්න"</string>
+    <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"<xliff:g id="VALUE">%s</xliff:g> ස්පර්ශ කර රඳවා සිටින්න."</string>
+    <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"වැඩි කිරීමට ඉහලට සර්පණය කරන්න සහ අඩු කිරීමට පහලට සර්පණය කරන්න."</string>
+    <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"මිනිත්තුවක් වැඩි කරන්න"</string>
+    <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"මිනිත්තුව අඩු කරන්න"</string>
+    <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"පැය වැඩිකරන්න"</string>
+    <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"පැය අඩුකරන්න"</string>
+    <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"ප.ව.සකසන්න"</string>
+    <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"පෙ.ව. සකස් කිරීම"</string>
+    <string name="date_picker_increment_month_button" msgid="5369998479067934110">"මාසය වැඩි කරන්න"</string>
+    <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"මාසයක් අඩු කරන්න"</string>
+    <string name="date_picker_increment_day_button" msgid="7130465412308173903">"දවස වැඩි කරන්න"</string>
+    <string name="date_picker_decrement_day_button" msgid="4131881521818750031">"දවස අඩු කරන්න"</string>
+    <string name="date_picker_increment_year_button" msgid="6318697384310808899">"වසර වැඩි කරන්න"</string>
+    <string name="date_picker_decrement_year_button" msgid="4482021813491121717">"වසර අඩු කරන්න"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"අවලංගු කරන්න"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"මකන්න"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"හරි"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ආකාරය වෙනස් කරන්න"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ඇතුල් කරන්න"</string>
+    <string name="activitychooserview_choose_application" msgid="2125168057199941199">"යෙදුමක් තෝරන්න"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"සමඟ බෙදාගන්න"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> සමඟින් බෙදා ගන්න"</string>
+    <string name="content_description_sliding_handle" msgid="415975056159262248">"සර්පණ හැඩලය. ස්පර්ශ කර රඳවා සිටීම."</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා උඩට සර්පණය කරන්න."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා පහලට සර්පණය කරන්න."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා වමට සර්පණය කරන්න."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා දකුණට සර්පණය කරන්න."</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"අඟුල අරින්න"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"කැමරාව"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"නිහඬ"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"ශබ්ද සක්‍රීය කරන්න"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"සෙවීම"</string>
+    <string name="description_target_unlock_tablet" msgid="3833195335629795055">"අගුළු ඇරීමට ස්වයිප් කරන්න."</string>
+    <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"මුරපද යතුරු කියවනු ඇසීමට ඉස් බණුවක් සම්බන්ධ කරන්න."</string>
+    <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"නැවතුම."</string>
+    <string name="action_bar_home_description" msgid="5293600496601490216">"මුල් පිටුවට සංචාලනය කරන්න"</string>
+    <string name="action_bar_up_description" msgid="2237496562952152589">"ඉහලට සංචාලනය කරන්න"</string>
+    <string name="action_menu_overflow_description" msgid="2295659037509008453">"තවත් විකල්ප"</string>
+    <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
+    <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
+    <string name="storage_internal" msgid="4891916833657929263">"අභ්‍යන්තර ආචයනය"</string>
+    <string name="storage_sd_card" msgid="3282948861378286745">"SD පත"</string>
+    <string name="storage_usb" msgid="3017954059538517278">"USB ආචයනය"</string>
+    <string name="extract_edit_menu_button" msgid="8940478730496610137">"සංස්කරණය කරන්න"</string>
+    <string name="data_usage_warning_title" msgid="1955638862122232342">"දත්ත භාවිතා අවවාදය"</string>
+    <string name="data_usage_warning_body" msgid="2814673551471969954">"භාවිතය සහ සැකසීම් බැලීමට ස්පර්ශ කරන්න."</string>
+    <string name="data_usage_3g_limit_title" msgid="7093334419518706686">"2G-3G දත්ත අබලයි"</string>
+    <string name="data_usage_4g_limit_title" msgid="7636489436819470761">"4G දත්ත අබල කරන ලදි"</string>
+    <string name="data_usage_mobile_limit_title" msgid="7869402519391631884">"ජංගම දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_wifi_limit_title" msgid="8992154736441284865">"Wi-Fi දත්ත අබල කරන ලදි"</string>
+    <string name="data_usage_limit_body" msgid="3317964706973601386">"සබල කිරීමට ස්පර්ශ කරන්න."</string>
+    <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"2G-3G දත්ත සීමාව ඉක්මවන ලදි"</string>
+    <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"4G දත්ත සීමාව ඉක්මවා යන ලදි"</string>
+    <string name="data_usage_mobile_limit_snoozed_title" msgid="279240572165412168">"ජංගම දත්ත සීමාව ඉක්මවා යන ලදි"</string>
+    <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Wi-Fi දත්ත සීමාව ඉක්මවා යන ලදි"</string>
+    <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"සඳහන් කළ සීමාවට වඩා <xliff:g id="SIZE">%s</xliff:g> වැඩිය."</string>
+    <string name="data_usage_restricted_title" msgid="5965157361036321914">"පසුබිම් දත්ත සිමා කරන ලදි"</string>
+    <string name="data_usage_restricted_body" msgid="6741521330997452990">"සීමා කිරීම ඉවත් කිරීමට ස්පර්ශ කරන්න"</string>
+    <string name="ssl_certificate" msgid="6510040486049237639">"ආරක්‍ෂිත සහතිකය"</string>
+    <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"මෙම සහතිකය වලංගුයි."</string>
+    <string name="issued_to" msgid="454239480274921032">"ලබාදුන්නේ:"</string>
+    <string name="common_name" msgid="2233209299434172646">"පොදු නාමය:"</string>
+    <string name="org_name" msgid="6973561190762085236">"සංවිධානය:"</string>
+    <string name="org_unit" msgid="7265981890422070383">"සංවිධානාත්මක ඒකකය:"</string>
+    <string name="issued_by" msgid="2647584988057481566">"ලබාදෙන ලද්දේ:"</string>
+    <string name="validity_period" msgid="8818886137545983110">"වලංගුතාවය:"</string>
+    <string name="issued_on" msgid="5895017404361397232">"නිකුත් කරන ලද්දේ:"</string>
+    <string name="expires_on" msgid="3676242949915959821">"කල් ඉකුත් වන්නේ:"</string>
+    <string name="serial_number" msgid="758814067660862493">"අනුක්‍රමාංකය:"</string>
+    <string name="fingerprints" msgid="4516019619850763049">"ඇඟිලි සලකුණු:"</string>
+    <string name="sha256_fingerprint" msgid="4391271286477279263">"SHA-256 ඇඟිලිසලකුණ:"</string>
+    <string name="sha1_fingerprint" msgid="7930330235269404581">"SHA-1 ඇඟිලි සලකුණ:"</string>
+    <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"සියල්ල බලන්න"</string>
+    <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"ක්‍රියාකාරකම තෝරන්න"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"සමඟ බෙදාගන්න"</string>
+    <string name="status_bar_device_locked" msgid="3092703448690669768">"උපාංගයට අගුළු වැටි ඇත."</string>
+    <string name="list_delimeter" msgid="3975117572185494152">", "</string>
+    <string name="sending" msgid="3245653681008218030">"යවමින්..."</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"බ්‍රවුසරය දියත් කරන්නද?"</string>
+    <string name="SetupCallDefault" msgid="5834948469253758575">"ඇමතුම පිළිගන්නවාද?"</string>
+    <string name="activity_resolver_use_always" msgid="8017770747801494933">"සැම විටම"</string>
+    <string name="activity_resolver_use_once" msgid="2404644797149173758">"එක් වාරයයි"</string>
+    <string name="default_audio_route_name" product="tablet" msgid="4617053898167127471">"ටැබ්ලට්ය"</string>
+    <string name="default_audio_route_name" product="default" msgid="4239291273420140123">"දුරකථනය"</string>
+    <string name="default_audio_route_name_headphones" msgid="8119971843803439110">"ඉස් බණු"</string>
+    <string name="default_audio_route_name_dock_speakers" msgid="6240602982276591864">"නාදක ඩොක් කරන්න"</string>
+    <string name="default_media_route_name_hdmi" msgid="2450970399023478055">"HDMI"</string>
+    <string name="default_audio_route_category_name" msgid="3722811174003886946">"පද්ධතිය"</string>
+    <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"බ්ලූටූත් ශ්‍රව්‍ය"</string>
+    <string name="wireless_display_route_description" msgid="9070346425023979651">"රැහැන් රහිත දර්ශනය"</string>
+    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"හරි"</string>
+    <string name="media_route_button_content_description" msgid="5758553567065145276">"මාධ්‍ය ප්‍රතිදානය"</string>
+    <string name="media_route_status_scanning" msgid="7279908761758293783">"පරිලෝකනය කරමින්…"</string>
+    <string name="media_route_status_connecting" msgid="6422571716007825440">"සම්බන්ධ වෙමින්…"</string>
+    <string name="media_route_status_available" msgid="6983258067194649391">"ලබාගත හැක"</string>
+    <string name="media_route_status_not_available" msgid="6739899962681886401">"ලබාගත නොහැක"</string>
+    <string name="media_route_status_in_use" msgid="4533786031090198063">"භාවිතයේ ඇත"</string>
+    <string name="display_manager_built_in_display_name" msgid="2583134294292563941">"තිළැලි තිරය"</string>
+    <string name="display_manager_hdmi_display_name" msgid="1555264559227470109">"HDMI තිරය"</string>
+    <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"උඩැතිරිය #<xliff:g id="ID">%1$d</xliff:g>"</string>
+    <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
+    <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", ආරක්‍ෂිත"</string>
+    <string name="wifi_display_notification_title" msgid="2223050649240326557">"නොරැහැන් සංදර්ශකය සම්බන්ධිතයි"</string>
+    <string name="wifi_display_notification_message" msgid="4498802012464170685">"වෙනත් උපාංගයක් මත මෙම තිරය පෙන්වයි"</string>
+    <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"විසන්ධි කරන්න"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"හදිසි ඇමතුම"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"රටාව අමතකයි"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"වැරදි රටාවකි"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"වැරදි මුරපදය"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN එක වැරදියි"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"තත්පර <xliff:g id="NUMBER">%1$d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"ඔබගේ රටාව අඳින්න"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN ඇතුලු කරන්න"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN එක ඇතුළු කරන්න"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"මුරපදය ඇතුළු කරන්න"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"දැන් SIM එක අබල කර ඇත. ඉදිරියට යාමට PUK කේතය යොදන්න. විස්තර සඳහා වාහකයා අමතන්න."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"අපේක්ෂිත PIN කේතය ඇතුළත් කරන්න"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"අපේක්ෂිත PIN කේතය ස්ථිර කරන්න"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM පත අගුළු අරිමින්..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"වැරදි PIN කේතයකි."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"අංක 4 සිට 8 අතර වන PIN එකක් ටයිප් කරන්න."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK කේතය සංඛ්‍යා 8 ක් හෝ වැඩි විය යුතුය."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"නිවැරදි PUK කේතය නැවත ඇතුලත් කරන්න. නැවත නැවත උත්සාහ කිරීමෙන් SIM එක ස්ථිරවම අබල කරයි."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN කේත ගැලපී නැත"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"රටා උත්සාහ කිරීම් වැඩිය"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"අගුළු ඇරීමට, ඔබගේ Google ගිණුම සමග පුරනය වන්න."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"පරිශීලක නාමය (ඊ-තැපෑල)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"මුරපදය"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"පුරනය වන්න"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"වලංගු නොවන පරිශීලක නාමයක් හෝ මුරපදයක්."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ඔබගේ පරිශීලක නාමය හෝ මුරපදය අමතකද?\n "<b>"google.com/accounts/recovery"</b>" වෙත යන්න."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"ගිණුම පරීක්ෂා කරමින්…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ඔබ PIN අංකය <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් වැරදියට ටයිප් කොට ඇත.\n\n තත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ මුරපදය ඔබ වැරදියට ටයිප් කර ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ඔබ <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් අගුළු ඇරීමේ රටාව වැරදියට ඇඳ ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ඔබ ටැබ්ලටය අගුළු හැරීමට වැරදියට අවස්ථා <xliff:g id="NUMBER_0">%d</xliff:g> ක් උත්සාහ කර ඇත. අවස්ථා <xliff:g id="NUMBER_1">%d</xliff:g> ක් අසාර්ථකව උත්සහ කිරීමකින් පසුව, කර්මාන්ත ශාලා මුල් තත්වයට නැවත පත් වන අතර සියලු පරිශීලක දත්ත නැති වෙයි."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER_0">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. තවත් අසාර්ථක ප්‍රයත්න <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, දුරකථනය කර්මාන්ත ශාලාවේ සුපුරුද්දට යළි පිහිටුවන අතර සියලුම පරිශීලක දත්ත නැති වී යයි."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ටැබ්ලටයේ අගුළු ඇරීමට ඔබ වැරදි ප්‍රයත්න <xliff:g id="NUMBER">%d</xliff:g> වාරයක් ගෙන ඇත. දැන් ටැබ්ලටය කර්මාන්ත ශාලා සුපුරුද්ද වෙත යළි පිහිටුවීම කෙරේ."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER">%d</xliff:g> කදී වැරදී ප්‍රයන්තයන් ගෙන තිබේ. දැන් දුරකථනය කර්මාන්තශාලා සුපුරුද්දට පිහිටුවනු ලබයි."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ඔබ අගුළු ඇරිමේ රටාව <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් වැරදියට ඇඳ ඇත. තවත් අසාර්ථක උත්සාහ <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, ඊ-තැපැල් ගිණුම භාවිතා කරමින් ඔබගේ ටැබ්ලටයේ අගුළු ඇරීමට ඔබට පවසනු ඇත.\n\n නැවත තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> කින් උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ ඊ-තැපැල් ලිපිනය භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> න් පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"ඉවත් කරන්න"</string>
+    <string name="safe_media_volume_warning" product="default" msgid="7324161939475478066">"නිර්දේශිත මට්ටමෙන් ඉහළට ශබ්දය වැඩි කරනවද?\nවැඩි කාලයක් ඉහළ ශබ්දයක් ශ්‍රවනය කිරීමෙන් ඔබගේ ශ්‍රවනයට හානි විය හැක."</string>
+    <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"ප්‍රවේශ්‍යතාවය සබල කිරීමට ඇඟිලි දෙකක් පහළට රඳවා සිටින්න."</string>
+    <string name="accessibility_enabled" msgid="1381972048564547685">"ප‍්‍රවේශ්‍යතාව සබල කරන ලදි."</string>
+    <string name="enable_accessibility_canceled" msgid="3833923257966635673">"ප‍්‍රවේශ්‍යතාව අවලංගු කර ඇත."</string>
+    <string name="user_switched" msgid="3768006783166984410">"දැනට සිටින පරිශීලකයා <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="owner_name" msgid="2716755460376028154">"හිමිකරු"</string>
+    <string name="error_message_title" msgid="4510373083082500195">"දෝෂය"</string>
+    <string name="app_no_restricted_accounts" msgid="5739463249673727736">"සීමා සහිත පැතිකඩ සඳහා වන ගිණුම් වෙත මෙම යෙදුම සහය නොදක්වයි"</string>
+    <string name="app_not_found" msgid="3429141853498927379">"මෙම ක්‍රියාව හසුරුවීමට යෙදුමක් සොයාගත්තේ නැත"</string>
+    <string name="revoke" msgid="5404479185228271586">"අහෝසි කරන්න"</string>
+    <string name="mediaSize_iso_a0" msgid="7875427489420821793">"ISO A0"</string>
+    <string name="mediaSize_iso_a1" msgid="3760734499050875356">"ISO A1"</string>
+    <string name="mediaSize_iso_a2" msgid="5973266378020144382">"ISO A2"</string>
+    <string name="mediaSize_iso_a3" msgid="1373407105687300884">"ISO A3"</string>
+    <string name="mediaSize_iso_a4" msgid="6689772807982597254">"ISO A4"</string>
+    <string name="mediaSize_iso_a5" msgid="5353549652015741040">"ISO A5"</string>
+    <string name="mediaSize_iso_a6" msgid="8585038048674911907">"ISO A6"</string>
+    <string name="mediaSize_iso_a7" msgid="6641836716963839119">"ISO A7"</string>
+    <string name="mediaSize_iso_a8" msgid="7571139437465693355">"ISO A8"</string>
+    <string name="mediaSize_iso_a9" msgid="1378455891957115079">"ISO A9"</string>
+    <string name="mediaSize_iso_a10" msgid="2480747457429475344">"ISO A10"</string>
+    <string name="mediaSize_iso_b0" msgid="3965935097661108039">"ISO B0"</string>
+    <string name="mediaSize_iso_b1" msgid="2505753285010115437">"ISO B1"</string>
+    <string name="mediaSize_iso_b2" msgid="8763874709859458453">"ISO B2"</string>
+    <string name="mediaSize_iso_b3" msgid="4210506688191764076">"ISO B3"</string>
+    <string name="mediaSize_iso_b4" msgid="5749404165888526034">"ISO B4"</string>
+    <string name="mediaSize_iso_b5" msgid="7640627414621904733">"ISO B5"</string>
+    <string name="mediaSize_iso_b6" msgid="7342988864712748544">"ISO B6"</string>
+    <string name="mediaSize_iso_b7" msgid="5069844065235382429">"ISO B7"</string>
+    <string name="mediaSize_iso_b8" msgid="7316818922278779774">"ISO B8"</string>
+    <string name="mediaSize_iso_b9" msgid="5414727094026532341">"ISO B9"</string>
+    <string name="mediaSize_iso_b10" msgid="5251253731832048185">"ISO B10"</string>
+    <string name="mediaSize_iso_c0" msgid="4003138342671964217">"ISO C0"</string>
+    <string name="mediaSize_iso_c1" msgid="1935188063393553008">"ISO C1"</string>
+    <string name="mediaSize_iso_c2" msgid="3197307969712069904">"ISO C2"</string>
+    <string name="mediaSize_iso_c3" msgid="4335826087321913508">"ISO C3"</string>
+    <string name="mediaSize_iso_c4" msgid="3745639598281015005">"ISO C4"</string>
+    <string name="mediaSize_iso_c5" msgid="8269457765822791013">"ISO C5"</string>
+    <string name="mediaSize_iso_c6" msgid="566666105260346930">"ISO C6"</string>
+    <string name="mediaSize_iso_c7" msgid="8678413180782608498">"ISO C7"</string>
+    <string name="mediaSize_iso_c8" msgid="8392376206627041730">"ISO C8"</string>
+    <string name="mediaSize_iso_c9" msgid="9191613372324845405">"ISO C9"</string>
+    <string name="mediaSize_iso_c10" msgid="7327709699184920822">"ISO C10"</string>
+    <string name="mediaSize_na_letter" msgid="4191805615829472953">"අකුරු"</string>
+    <string name="mediaSize_na_gvrnmt_letter" msgid="7853382192649405507">"රජයේ ලිපිය"</string>
+    <string name="mediaSize_na_legal" msgid="6697982988283823150">"නීත්‍යනුකූල"</string>
+    <string name="mediaSize_na_junior_legal" msgid="3727743969902758948">"ප්‍රාථමික නීතිමය"</string>
+    <string name="mediaSize_na_ledger" msgid="281871464896601236">"ලෙජරය"</string>
+    <string name="mediaSize_na_tabloid" msgid="5775966416333578127">"කුඩා පුවත්පත"</string>
+    <string name="write_fail_reason_cancelled" msgid="7091258378121627624">"අවලංගු කරන ලදි"</string>
+    <string name="write_fail_reason_cannot_write" msgid="8132505417935337724">"අන්තර්ගතය ලිවීමේදී දෝෂයකි"</string>
+    <string name="restr_pin_enter_pin" msgid="3395953421368476103">"PIN එක ඇතුළු කරන්න"</string>
+    <string name="restr_pin_enter_old_pin" msgid="1462206225512910757">"වත්මන් PIN"</string>
+    <string name="restr_pin_enter_new_pin" msgid="5959606691619959184">"නව PIN"</string>
+    <string name="restr_pin_confirm_pin" msgid="8501523829633146239">"නව PIN තහවුරු කරන්න"</string>
+    <string name="restr_pin_create_pin" msgid="8017600000263450337">"සිමා වැඩිදියුණු කිරීමට PIN සාදන්න"</string>
+    <string name="restr_pin_error_doesnt_match" msgid="2224214190906994548">"PIN නොගැළපෙයි. නැවත උත්සහ කරන්න."</string>
+    <string name="restr_pin_error_too_short" msgid="8173982756265777792">"PIN කුඩා වැඩිය. ඉලක්කම් 4 වත් විය යුතුය."</string>
+  <plurals name="restr_pin_countdown">
+    <item quantity="one" msgid="4835639969503729874">"වැරදි PIN. තත්පරයකින් නැවත උත්සහ කරන්න."</item>
+    <item quantity="other" msgid="8030607343223287654">"වැරදි PIN. තත්පර <xliff:g id="COUNT">%d</xliff:g> කින් නැවත උත්සහ කරන්න."</item>
+  </plurals>
+    <string name="transient_navigation_confirmation" msgid="4907844043611123426">"තීරුව අනාවරණයට තිරයේ කෙලවර අදින්න"</string>
+    <string name="transient_navigation_confirmation_long" msgid="8061685920508086697">"පද්ධති තීරුව අනාවරණයට තිරයේ කෙලවරින් අදින්න"</string>
+</resources>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index cd865aa..c96c661 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Bez mena&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -38,7 +60,7 @@
     <string name="mmiFdnError" msgid="5224398216385316471">"Operácia je obmedzená len na režim čísla pevného vytáčania."</string>
     <string name="serviceEnabled" msgid="8147278346414714315">"Služba bola povolená."</string>
     <string name="serviceEnabledFor" msgid="6856228140453471041">"Služba bola povolená pre:"</string>
-    <string name="serviceDisabled" msgid="1937553226592516411">"Služba bola zakázaná."</string>
+    <string name="serviceDisabled" msgid="1937553226592516411">"Služba bola vypnutá."</string>
     <string name="serviceRegistered" msgid="6275019082598102493">"Registrácia prebehla úspešne."</string>
     <string name="serviceErased" msgid="1288584695297200972">"Vymazanie prebehlo úspešne."</string>
     <string name="passwordIncorrect" msgid="7612208839450128715">"Nesprávne heslo."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Zadajte kód PUK, ktorý má 8 alebo viac čísel."</string>
     <string name="needPuk" msgid="919668385956251611">"Karta SIM je uzamknutá pomocou kódu PUK. Odomknite ju zadaním kódu PUK."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Ak chcete odblokovať kartu SIM, zadajte kód PUK2."</string>
+    <string name="enablePin" msgid="209412020907207950">"Neúspešné, povoľte uzamknutie SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Zostáva vám <xliff:g id="NUMBER">%d</xliff:g> pokus, než sa vaša karta SIM uzamkne."</item>
+    <item quantity="other" msgid="7530597808358774740">"Počet zostávajúcich pokusov pred uzamknutím karty SIM: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Prichádzajúca identifikácia volajúceho"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synchronizovať"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Príliš veľa odstránených položiek služby <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Ukladací priestor tabletu je plný. Odstráňte niektoré súbory a uvoľnite miesto."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Ukladací priestor hodiniek je plný. Uvoľnite miesto odstránením niektorých súborov."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Pamäť telefónu je plná. Odstráňte niektoré súbory a uvoľnite miesto."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Sieť môže byť monitorovaná"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Neznámou treťou stranou"</string>
@@ -140,13 +168,14 @@
     <string name="silent_mode" msgid="7167703389802618663">"Tichý režim"</string>
     <string name="turn_on_radio" msgid="3912793092339962371">"Zapnúť bezdrôtové pripojenie"</string>
     <string name="turn_off_radio" msgid="8198784949987062346">"Vypnúť bezdrôtové pripojenie"</string>
-    <string name="screen_lock" msgid="799094655496098153">"Uzamknutie obrazovky"</string>
+    <string name="screen_lock" msgid="799094655496098153">"Zámka obrazovky"</string>
     <string name="power_off" msgid="4266614107412865048">"Vypnúť"</string>
     <string name="silent_mode_silent" msgid="319298163018473078">"Zvonenie je vypnuté"</string>
     <string name="silent_mode_vibrate" msgid="7072043388581551395">"Vibračné zvonenie"</string>
     <string name="silent_mode_ring" msgid="8592241816194074353">"Zvonenie je zapnuté"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Prebieha vypínanie..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Váš tablet bude vypnutý."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Hodinky sa vypnú."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Váš telefón bude vypnutý."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Chcete zariadenie vypnúť?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Reštartovať do núdzového režimu"</string>
@@ -155,17 +184,18 @@
     <string name="no_recent_tasks" msgid="8794906658732193473">"Žiadne nedávne aplikácie"</string>
     <string name="global_actions" product="tablet" msgid="408477140088053665">"Možnosti tabletu"</string>
     <string name="global_actions" product="default" msgid="2406416831541615258">"Možnosti telefónu"</string>
-    <string name="global_action_lock" msgid="2844945191792119712">"Uzamknutie obrazovky"</string>
+    <string name="global_action_lock" msgid="2844945191792119712">"Zámka obrazovky"</string>
     <string name="global_action_power_off" msgid="4471879440839879722">"Vypnúť"</string>
-    <string name="global_action_bug_report" msgid="7934010578922304799">"Správa o chybe"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"Zaznamenať správu o chybe"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"Zhromažďuje informácie o aktuálnom stave zariadenia a tieto informácie je následne možné odoslať prostredníctvom e-mailovej správy. Od spustenia vytvárania správy o chybe až do chvíle, kedy je tento nástroj pripravený odoslať prvú správu, môže uplynúť nejaký čas. Prosíme vás preto o trpezlivosť."</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"Hlásenie o chybách"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"Vytvoriť hlásenie o chybách"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"Zhromaždí informácie o aktuálnom stave zariadenia na odoslanie v e-mailovej správe. Chvíľu však potrvá, kým bude hlásenie o chybách pripravené na odoslanie. Prosíme vás preto o trpezlivosť."</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"Tichý režim"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"Zvuk je VYPNUTÝ."</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"Zvuk je zapnutý"</string>
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Režim V lietadle"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Režim V lietadle je ZAPNUTÝ"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Režim V lietadle je VYPNUTÝ"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Nastavenia"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Núdzový režim"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Systém Android"</string>
@@ -185,7 +215,7 @@
     <string name="permgroupdesc_bluetoothNetwork" msgid="5625288577164282391">"Prístup k zariadeniam a sieťam prostredníctvom rozhrania Bluetooth."</string>
     <string name="permgrouplab_audioSettings" msgid="8329261670151871235">"Nastavenia zvuku"</string>
     <string name="permgroupdesc_audioSettings" msgid="2641515403347568130">"Zmena nastavení zvuku."</string>
-    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Má vplyv na batériu"</string>
+    <string name="permgrouplab_affectsBattery" msgid="6209246653424798033">"Vplyv na batériu"</string>
     <string name="permgroupdesc_affectsBattery" msgid="6441275320638916947">"Používanie funkcií, ktoré môžu rýchlo vyčerpať batériu."</string>
     <string name="permgrouplab_calendar" msgid="5863508437783683902">"Kalendár"</string>
     <string name="permgroupdesc_calendar" msgid="5777534316982184416">"Priamy prístup ku kalendáru a udalostiam."</string>
@@ -227,8 +257,8 @@
     <string name="permgroupdesc_developmentTools" msgid="7058828032358142018">"Funkcie len pre vývojárov aplikácií."</string>
     <string name="permgrouplab_display" msgid="4279909676036402636">"Používateľské rozhranie iných aplikácií"</string>
     <string name="permgroupdesc_display" msgid="6051002031933013714">"Vplyv na používateľské rozhranie ďalších aplikácií."</string>
-    <string name="permgrouplab_storage" msgid="1971118770546336966">"Ukladací priestor"</string>
-    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Prístup do ukl. priestoru USB."</string>
+    <string name="permgrouplab_storage" msgid="1971118770546336966">"Úložisko"</string>
+    <string name="permgroupdesc_storage" product="nosdcard" msgid="7442318502446874999">"Prístup do úložiska USB."</string>
     <string name="permgroupdesc_storage" product="default" msgid="9203302214915355774">"Prístup na kartu SD."</string>
     <string name="permgrouplab_accessibilityFeatures" msgid="7919025602283593907">"Funkcie zjednodušenia ovládania"</string>
     <string name="permgroupdesc_accessibilityFeatures" msgid="4205196881678144335">"Funkcie, ktoré môže vyžadovať nápomocná technológia."</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"odinštalovať odkazy"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Povoľuje aplikácii odstrániť odkazy na ploche bez zásahu používateľa."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"presmerovať odchádzajúce hovory"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Umožňuje aplikácii spracovávať odchádzajúce hovory a meniť vytáčané číslo. Toto povolenie umožňuje aplikácii sledovať a presmerovať odchádzajúce hovory alebo im zabrániť."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Umožňuje aplikácii počas odchádzajúceho hovoru rozpoznať vytáčané číslo a poskytuje možnosť presmerovať daný hovor na odlišné číslo alebo ho úplne zrušiť."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"prijímať textové správy (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Umožňuje aplikácii prijímať a spracovávať správy SMS. Znamená to, že aplikácia môže sledovať správy odoslané na vaše zariadenie alebo ich odstrániť bez toho, aby sa vám zobrazili."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"prijímať textové správy (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Umožňuje aplikácii načítať obsah aktívneho okna. Škodlivé aplikácie môžu získať celý obsah okna a preskúmať celý jeho text okrem hesiel."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"dočasné povolenie zjednodušenia ovládania"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Umožňuje aplikácii dočasne povoliť zjednodušenie ovládania v zariadení. Škodlivé aplikáciu môžu zjednodušenie ovládania povoliť bez súhlasu používateľa."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"načítanie informácií o oknách"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Umožňuje aplikácii načítať informácie o oknách zo správcu okien. Škodlivé aplikácie môžu načítať informácie, ktoré sú určené pre interné využitie systému."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"získať token okna"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Umožňuje aplikácii získať token okna. Škodlivé aplikácie sa môžu správať ako systém a vykonať neautorizovanú interakciu s oknom aplikácie."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"získať štatistiky rámcov"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Umožňuje aplikácii zhromažďovať štatistiky rámcov. Škodlivé aplikácie môžu sledovať štatistiky rámcov okien z iných aplikácií."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrovanie udalostí"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Umožňuje aplikácii zaregistrovať vstupný filter, ktorý filtruje stream všetkých prenosov používateľa pred ich odvysielaním. Škodlivá aplikácia môže bez zásahu používateľa ovládať používateľské rozhranie systému."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"priblížiť zobrazenie"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Umožňuje aplikácii priblížiť obsah displeja. Škodlivé aplikácie môžu zmeniť zobrazenie obsahu tak, že sa zariadenie stane nepoužiteľným."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"Čiastočné vypnutie"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Uvedie správcu činností do vypnutého stavu. Úplné vypnutie však nenastane."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zabrániť prepínaniu aplikácií"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Umožňuje aplikácii vysielať oznámenie, že správa SMS bola doručená. Škodlivé aplikácie môžu toto nastavenie použiť na falšovanie prichádzajúcich správ SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"odoslanie vysielania typu WAP-PUSH-received"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Umožňuje aplikácii vysielať oznámenie, že správa WAP PUSH bola doručená. Škodlivé aplikácie môžu použiť toto nastavenie na vytvorenie potvrdenia o doručení správy MMS alebo na utajené nahradenie obsahu akejkoľvek stránky škodlivými variantmi."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"odoslanie skóre vysielaných sieťami"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Umožňuje aplikácii vysielať upozornenie, že je potrebné zadať skóre sietí. Bežné aplikácie toto povolenie nepotrebujú."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"obmedzenie počtu spustených procesov"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Umožňuje aplikácii kontrolovať maximálny počet spustených procesov. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"vynútiť zavretie aplikácií na pozadí"</string>
@@ -346,7 +378,7 @@
     <string name="permdesc_backup" msgid="6912230525140589891">"Umožňuje aplikácii ovládať mechanizmus na zálohovanie a obnovu údajov systému. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"potvrdenie operácie úplnej zálohy alebo úplného obnovenia"</string>
     <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Umožňuje aplikácii spustiť používateľské rozhranie potvrdenia úplnej zálohy. Toto nastavenie by nemala používať žiadna aplikácia."</string>
-    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"zobrazenie neoprávnených okien"</string>
+    <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"zobraziť neoprávnené okná"</string>
     <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Umožňuje aplikácii vytvárať okná, ktoré majú byť použité interným systémom používateľského rozhrania. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"vykresliť cez ďalšie aplikácie"</string>
     <string name="permdesc_systemAlertWindow" msgid="8584678381972820118">"Umožňuje aplikáciu vykresľovanie nad inými aplikáciami alebo súčasťami používateľského rozhrania. Táto funkcia môže zasahovať do vášho používania rozhrania inej aplikácie alebo meniť zobrazovaný obsah v iných aplikáciách."</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania služby VPN. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"väzba na tapetu"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania tapety. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"viazať na vzdialený displej"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania vzdialeného displeja. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"viazať sa k službe miniaplikácie"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania služby miniaplikácií. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"viazanie na službu poskytovateľa cesty"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Umožňuje držiteľovi viazať sa na akýchkoľvek registrovaných poskytovateľov cesty. Normálne aplikácie by toto povolenie nemali nikdy nepotrebovať."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"komunikovať so správcom zariadenia"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Umožňuje držiteľovi odosielať informácie správcovi zariadenia. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"viazanie na televízny vstup"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Umožňuje držiteľovi viazať sa na najvyššiu úroveň rozhrania televízneho vstupu. Bežné aplikácie by toto nastavenie nemali nikdy potrebovať."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"pridanie alebo odstránenie správcu zariadenia"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Umožňuje držiteľovi pridať alebo odstrániť správcov aktívnych zariadení. Bežné aplikácie by toto povolenie nemali nikdy potrebovať."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"zmena orientácie obrazovky"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Umožňuje aplikácii používať na reprodukciu ľubovoľný nainštalovaný dekódovač na dekódovanie."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"spravovať dôveryhodné poverenia"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Umožňuje aplikácii inštalovať a odinštalovať certifikáty CA ako dôveryhodné poverenia."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"spustiť aplikáciu počas nečinnosti"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Toto povolenie umožňuje systému Android spustiť aplikáciu na pozadí, keď sa zariadenie nepoužíva."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"čítanie alebo zápis do prostriedkov funkcie diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Umožňuje aplikácii čítať ľubovoľné prostriedky v skupine diag, napr. súbory v priečinku /dev, a zapisovať do nich. Môže dôjsť k ovplyvneniu stability a bezpečnosti systému. Toto nastavenie by mal používať IBA výrobca či operátor na diagnostiku hardvéru."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"povoliť alebo zakázať súčasti aplikácie"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Umožňuje aplikácii čítať informácie v osobnom profile uložené v zariadení, ako je vaše meno a kontaktné informácie. Znamená to, že vás ostatné aplikácie môžu identifikovať a odoslať informácie o vašom profile iným aplikáciám."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"upraviť vlastnú kartu kontaktu"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Umožňuje aplikácii zmeniť alebo pridať do osobného profilu informácie uložené vo vašom zariadení, ako je vaše meno a kontaktné informácie. Znamená to, že vás aplikácia môže identifikovať a odoslať informácie o vašom profile ostatným aplikáciám."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"telesné senzory (napr. snímače tepu)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Umožňuje aplikácii pristupovať k údajom zo senzorov, pomocou ktorých meriate činnosť svojho tela, napríklad tep."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"čítať váš sociálny stream"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Umožňuje aplikácii pristupovať k sociálnym aktualizáciám od vás a vašich priateľov a synchronizovať ich. Pri zdieľaní informácií dávajte pozor – toto povolenie umožňuje aplikácii čítať komunikáciu medzi vami a vašimi priateľmi v sociálnych sieťach, a to bez ohľadu na jej dôvernosť. Poznámka: Toto povolenie nie je možné vynucovať v prípade všetkých sociálnych sietí."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"písať do vášho sociálneho streamu"</string>
@@ -469,14 +515,16 @@
     <string name="permdesc_accessLocationExtraCommands" msgid="5945166642335800763">"Umožňuje aplikácii pristupovať k ďalším príkazom poskytovateľa informácií o polohe. Aplikácii to môže umožniť zasahovať do činnosti systému GPS alebo iných zdrojov informácií o polohe."</string>
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"Oprávnenie na inštaláciu poskytovateľa polohy"</string>
     <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"Vytváranie simulovaných zdrojov polohy na testovanie alebo inštalácia nového poskytovateľa informácií o polohe. Aplikácii to umožní nahradiť polohu a stav, ktoré vracajú iné zdroje informácií o polohe, ako sú napríklad systém GPS alebo poskytovatelia informácií o polohe."</string>
-    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"presná poloha (pomocou GPS a siete)"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Umožňuje aplikácii získať vašu presnú polohu pomocou systému GPS (Global Positioning System) alebo zdrojov určenia polohy siete, napríklad mobilných veží a sietí Wi-Fi. Tieto služby využívajúce polohu musia byť na vašom zariadení zapnuté a dostupné, inak ich aplikácia nebude môcť využívať. Aplikácie môžu tieto služby využívať na určenie vašej polohy. Tieto služby môžu zvýšiť spotrebu batérie."</string>
-    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"približná poloha (pomocou siete)"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Umožňuje aplikácii získať vašu približnú polohu. Táto poloha je odvodená zo služieb využívajúcich polohu pomocou zdrojov určenia polohy siete, napríklad mobilných veží a sietí Wi-Fi. Tieto služby využívajúce polohu musia byť na vašom zariadení zapnuté a dostupné, inak ich aplikácia nebude môcť využívať. Aplikácie môžu tieto služby využívať na určenie vašej približnej polohy."</string>
+    <string name="permlab_accessFineLocation" msgid="1191898061965273372">"zistiť presnú polohu (pomocou GPS a siete)"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Umožňuje aplikácii získať vašu presnú polohu pomocou systému GPS (Global Positioning System) alebo zdrojov určenia polohy siete, napríklad mobilných veží a sietí Wi-Fi. Tieto služby určovania polohy musia byť na vašom zariadení zapnuté a dostupné, inak ich aplikácia nebude môcť využívať. Aplikácie môžu tieto služby využívať na určenie vašej polohy. Tieto služby môžu zvýšiť spotrebu batérie."</string>
+    <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"zistiť približnú polohu (pomocou siete)"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Umožňuje aplikácii získať vašu približnú polohu. Táto poloha je odvodená zo služieb určovania polohy pomocou zdrojov určenia polohy siete, napríklad mobilných veží a sietí Wi-Fi. Tieto služby určovania polohy musia byť na vašom zariadení zapnuté a dostupné, inak ich aplikácia nebude môcť využívať. Aplikácie môžu tieto služby využívať na určenie vašej približnej polohy."</string>
     <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"prístup k službe SurfaceFlinger"</string>
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Umožňuje aplikácii používať funkcie nízkej úrovne aplikácie SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"čítanie vyrovnávacej pamäte snímok"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Umožňuje aplikácii čítať obsah vyrovnávacej pamäte snímok."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"prístup k aplikácii InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Umožňuje aplikácii používať funkcie nízkej úrovne aplikácie InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurovať displeje cez sieť Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Umožňuje aplikácii konfigurovať displeje a pripojiť sa k nim cez siete Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"ovládať displeje cez sieť Wi-Fi"</string>
@@ -491,11 +539,13 @@
     <string name="permdesc_captureSecureVideoOutput" msgid="2779793064709350289">"Umožňuje aplikácii zachytiť a presmerovať zabezpečený výstup videa."</string>
     <string name="permlab_mediaContentControl" msgid="8749790560720562511">"ovládanie reprodukcie médií a prístup k metadátam"</string>
     <string name="permdesc_mediaContentControl" msgid="1637478200272062">"Umožňuje aplikácii ovládať reprodukciu médií a pristupovať k informáciám o médiách (názov, autor...)."</string>
-    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"zmeny vašich nastavení zvuku"</string>
+    <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"meniť nastavenia zvuku"</string>
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Umožňuje aplikácii upraviť globálne nastavenia zvuku, ako je hlasitosť, alebo určiť, z ktorého reproduktora bude zvuk vychádzať."</string>
-    <string name="permlab_recordAudio" msgid="3876049771427466323">"záznam zvuku"</string>
+    <string name="permlab_recordAudio" msgid="3876049771427466323">"nahrávať zvuk"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Umožňuje aplikácii zaznamenávať zvuk pomocou mikrofónu. Toto povolenie umožňuje aplikácii zaznamenávať zvuk kedykoľvek bez vášho potvrdenia."</string>
-    <string name="permlab_camera" msgid="3616391919559751192">"snímanie fotografií a natáčanie videí"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"komunikácia s kartou SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Umožňuje aplikácii odosielať príkazy na kartu SIM. Toto je veľmi nebezpečné povolenie."</string>
+    <string name="permlab_camera" msgid="3616391919559751192">"fotiť a nakrúcať videá"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Umožňuje aplikácii fotografovať a nahrávať videá pomocou fotoaparátu. Toto povolenie umožňuje aplikácii používať fotoaparát kedykoľvek a bez vášho potvrdenia."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Zakázať indikátor LED prenosu pri používaní fotoaparátu"</string>
     <string name="permdesc_cameraDisableTransmitLed" msgid="4764585465480295341">"Umožňuje v predinštalovanej systémovej aplikácii zakázať indikátor LED používania fotoaparátu."</string>
@@ -515,17 +565,17 @@
     <string name="permdesc_mount_format_filesystems" msgid="8784268246779198627">"Umožňuje aplikácii formátovať vymeniteľný ukladací priestor."</string>
     <string name="permlab_asec_access" msgid="3411338632002193846">"získať informácie o internom ukladacom priestore"</string>
     <string name="permdesc_asec_access" msgid="3094563844593878548">"Umožňuje aplikácii získať informácie o internom ukladacom priestore."</string>
-    <string name="permlab_asec_create" msgid="6414757234789336327">"vytvoriť interný ukladací priestor"</string>
-    <string name="permdesc_asec_create" msgid="4558869273585856876">"Umožňuje aplikácii vytvoriť interný ukladací priestor."</string>
-    <string name="permlab_asec_destroy" msgid="526928328301618022">"zničiť interný ukladací priestor"</string>
-    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Umožňuje aplikácii zničiť interný ukladací priestor."</string>
-    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"pripojiť alebo odpojiť interný ukladací priestor"</string>
-    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Umožňuje aplikácii pripojiť alebo odpojiť interný ukladací priestor."</string>
-    <string name="permlab_asec_rename" msgid="7496633954080472417">"premenovať interný ukladací priestor"</string>
-    <string name="permdesc_asec_rename" msgid="1794757588472127675">"Umožňuje aplikácii premenovať interný ukladací priestor."</string>
+    <string name="permlab_asec_create" msgid="6414757234789336327">"vytvoriť interné úložisko"</string>
+    <string name="permdesc_asec_create" msgid="4558869273585856876">"Umožňuje aplikácii vytvoriť interné úložisko."</string>
+    <string name="permlab_asec_destroy" msgid="526928328301618022">"zničiť interné úložisko"</string>
+    <string name="permdesc_asec_destroy" msgid="7218749286145526537">"Umožňuje aplikácii zničiť interné úložisko."</string>
+    <string name="permlab_asec_mount_unmount" msgid="8877998101944999386">"pripojiť alebo odpojiť interné úložisko"</string>
+    <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Umožňuje aplikácii pripojiť alebo odpojiť interné úložisko."</string>
+    <string name="permlab_asec_rename" msgid="7496633954080472417">"premenovať interné úložisko"</string>
+    <string name="permdesc_asec_rename" msgid="1794757588472127675">"Umožňuje aplikácii premenovať interné úložisko."</string>
     <string name="permlab_vibrate" msgid="7696427026057705834">"ovládať vibrovanie"</string>
     <string name="permdesc_vibrate" msgid="6284989245902300945">"Umožňuje aplikácii ovládať vibrácie."</string>
-    <string name="permlab_flashlight" msgid="2155920810121984215">"ovládanie kontrolky"</string>
+    <string name="permlab_flashlight" msgid="2155920810121984215">"ovládať kontrolku"</string>
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Umožňuje aplikácii ovládať svetlo."</string>
     <string name="permlab_manageUsb" msgid="1113453430645402723">"spravovať predvoľby a povolenia zariadení USB"</string>
     <string name="permdesc_manageUsb" msgid="7776155430218239833">"Umožňuje aplikácii spravovať predvoľby a povolenia zariadení USB."</string>
@@ -533,9 +583,9 @@
     <string name="permdesc_accessMtp" msgid="6532961200486791570">"Povoľuje prístup k ovládaču kernel MTP na implementáciu protokolu MTP USB."</string>
     <string name="permlab_hardware_test" msgid="4148290860400659146">"testovanie hardvéru"</string>
     <string name="permdesc_hardware_test" msgid="6597964191208016605">"Umožňuje aplikácii ovládať rôzne periférie na účely testovania hardvéru."</string>
-    <string name="permlab_callPhone" msgid="3925836347681847954">"priame volanie na telefónne čísla"</string>
+    <string name="permlab_callPhone" msgid="3925836347681847954">"priamo volať na telefónne čísla"</string>
     <string name="permdesc_callPhone" msgid="3740797576113760827">"Umožňuje aplikácii volať telefónne čísla bez vášho zásahu. V dôsledku toho sa môžu účtovať neočakávané poplatky alebo sa môžu uskutočniť neočakávané hovory. Toto povolenie neumožňuje aplikácii volať na čísla tiesňového volania."</string>
-    <string name="permlab_callPrivileged" msgid="4198349211108497879">"priame volanie na ľubovoľné telefónne čísla"</string>
+    <string name="permlab_callPrivileged" msgid="4198349211108497879">"priamo volať na ľubovoľné telefónne čísla"</string>
     <string name="permdesc_callPrivileged" msgid="1689024901509996810">"Umožňuje aplikácii volať na akékoľvek telefónne číslo (bez vášho zásahu) vrátane čísiel tiesňového volania. Škodlivé aplikácie môžu uskutočňovať zbytočné a nezákonné volania na tiesňové linky."</string>
     <string name="permlab_performCdmaProvisioning" product="tablet" msgid="4842576994144604821">"priamo spustiť nastavenie tabletu CDMA"</string>
     <string name="permlab_performCdmaProvisioning" product="default" msgid="5604848095315421425">"priamo spustiť nastavenie telefónu CDMA"</string>
@@ -543,15 +593,17 @@
     <string name="permlab_locationUpdates" msgid="7785408253364335740">"ovládanie upozornení na aktualizáciu polohy"</string>
     <string name="permdesc_locationUpdates" msgid="1120741557891438876">"Umožňuje aplikácii povoliť alebo zakázať upozornenia s aktualizáciami polohy z rádia. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"prístup k vlastnostiam nahlásenia"</string>
-    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Umožňuje aplikácii čítať a zapisovať vlastnosti odovzdané službou nahlasovania. Bežné aplikácie toto nastavenie nepoužívajú."</string>
+    <string name="permdesc_checkinProperties" msgid="4024526968630194128">"Umožňuje aplikácii čítať a zapisovať vlastnosti nahrané službou nahlasovania. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_bindGadget" msgid="776905339015863471">"zvoliť miniaplikácie"</string>
     <string name="permdesc_bindGadget" msgid="8261326938599049290">"Umožňuje aplikácii povedať systému, ktoré aplikácie môžu používať určité miniaplikácie. Aplikácia s týmto povolením môže iným aplikáciám povoliť prístup k osobným údajom. Bežné aplikácie toto nastavenie nepoužívajú."</string>
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"zmeny stavu telefónu"</string>
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Umožňuje aplikácii ovládať telefónne funkcie zariadenia. Aplikácia s týmto povolením môže prepínať siete alebo zapnúť a vypnúť rádio bez toho, aby vás na to upozornila."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"čítať stav a identitu telefónu"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Umožňuje aplikácii pristupovať k telefónnym funkciám zariadenia. Aplikácia s týmto povolením môže určiť telefónne číslo a ID zariadenia, či práve prebieha hovor, a vzdialené číslo, s ktorým je prostredníctvom hovoru nadviazané spojenie."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"čítanie presných stavov telefónu"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Umožňuje aplikácii pristupovať k presným stavom telefónu. Toto povolenie umožňuje aplikácii zistiť skutočný stav hovoru, či je hovor aktívny alebo na pozadí, zlyhania hovorov, presný stav dátového pripojenia a zlyhania dátového pripojenia."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zabránenie prechodu tabletu do režimu spánku"</string>
-    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zabránenie prechodu telefónu do režimu spánku"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"deaktivovať režim spánku"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Umožňuje aplikácii zabrániť prechodu tabletu do režimu spánku."</string>
     <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Umožňuje aplikácii zabrániť prechodu telefónu do režimu spánku."</string>
     <string name="permlab_transmitIr" msgid="7545858504238530105">"infračervený prenos"</string>
@@ -564,7 +616,7 @@
     <string name="permlab_factoryTest" msgid="3715225492696416187">"spustenie v režime továrenského testu"</string>
     <string name="permdesc_factoryTest" product="tablet" msgid="3952059318359653091">"Umožňuje aplikácii spustenie v režime nízkoúrovňového testu výrobcu a povolí úplný prístup k hardvéru tabletu. K dispozícii iba vtedy, keď je tablet spustený v režime testovania výrobcu."</string>
     <string name="permdesc_factoryTest" product="default" msgid="8136644990319244802">"Umožňuje aplikácii spustenie v režime nízkoúrovňového testu výrobcu a povolí úplný prístup k hardvéru telefónu. K dispozícii iba vtedy, keď je telefón spustený v režime testovania výrobcu."</string>
-    <string name="permlab_setWallpaper" msgid="6627192333373465143">"nastavenie tapety"</string>
+    <string name="permlab_setWallpaper" msgid="6627192333373465143">"nastaviť tapetu"</string>
     <string name="permdesc_setWallpaper" msgid="7373447920977624745">"Umožňuje aplikácii nastaviť tapetu systému."</string>
     <string name="permlab_setWallpaperHints" msgid="3278608165977736538">"upraviť veľkosť tapety"</string>
     <string name="permdesc_setWallpaperHints" msgid="8235784384223730091">"Umožňuje aplikácii nastaviť tipy pre veľkosť tapety systému."</string>
@@ -599,7 +651,7 @@
     <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Umožňuje aplikácii zmeniť stav sieťového pripojenia zdieľaného pomocou tetheringu."</string>
     <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"zmeniť nastavenie použitia údajov na pozadí"</string>
     <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Umožňuje aplikácii zmeniť nastavenie používania údajov na pozadí."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"zobraziť pripojenia siete Wi-Fi"</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"zobraziť pripojenia Wi-Fi"</string>
     <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Umožňuje aplikácii zobraziť informácie o sieťach Wi-Fi. Napríklad o tom, či je sieť Wi-Fi povolená alebo názvy pripojených zariadení Wi-Fi."</string>
     <string name="permlab_changeWifiState" msgid="6550641188749128035">"pripojiť a odpojiť od siete Wi-Fi"</string>
     <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Umožňuje aplikácii pripojiť sa na prístupové body siete Wi-Fi, odpojiť sa od nich a meniť konfiguráciu zariadení pre siete Wi-Fi."</string>
@@ -617,22 +669,25 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Zmeniť stav siete WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Umožňuje aplikácii pripojiť tablet k sieťam WiMAX a odpojiť ho od nich."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Umožňuje aplikácii pripojiť telefón k sieťam WiMAX a odpojiť ho od nich."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"zadanie skóre sietí"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Umožňuje aplikácii hodnotiť siete a ovplyvňovať, ktoré siete by mal tablet preferovať."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Umožňuje aplikácii hodnotiť siete a ovplyvňovať, ktoré siete by mal telefón preferovať."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"párovať so zariadeniami Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Umožňuje aplikácii zobraziť informácie o konfigurácii Bluetooth na tablete. Taktiež jej umožňuje nadväzovať a akceptovať spojenia so spárovanými zariadeniami."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Umožňuje aplikácii zobraziť informácie o konfigurácii Bluetooth na telefóne. Taktiež jej umožňuje nadväzovať a akceptovať spojenia so spárovanými zariadeniami."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"ovládať technológiu Near Field Communication"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"Umožňuje aplikácii komunikovať so značkami, kartami a čítačkami s podporou technológie Near Field Communication (NFC)."</string>
-    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"zakázať uzamknutie obrazovky"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"ovládať technológiu NFC"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"Umožňuje aplikácii komunikovať so značkami, kartami a čítačkami s podporou technológie NFC."</string>
+    <string name="permlab_disableKeyguard" msgid="3598496301486439258">"deaktivácia zámky obrazovky"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Umožňuje aplikácii zakázať uzamknutie klávesnice a akékoľvek súvisiace zabezpečenie heslom. Príkladom je zakázanie uzamknutia klávesnice pri prichádzajúcom telefonickom hovore a jeho opätovné povolenie po skončení hovoru."</string>
-    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"čítanie nastavení synchronizácie"</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"čítať nastavenia synchronizácie"</string>
     <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Umožňuje aplikácii čítať nastavenia synchronizácie v účte. Môže napríklad určiť, či je s účtom synchronizovaná aplikácia Ľudia."</string>
-    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"prepínať nastavenie synchronizácie medzi hodnotou zapnuté a vypnuté"</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"zapnúť alebo vypnúť synchronizáciu"</string>
     <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Umožňuje aplikácii upraviť nastavenia synchronizácie v účte. Pomocou tohto povolenia je možné napríklad povoliť synchronizáciu aplikácie Ľudia s účtom."</string>
     <string name="permlab_readSyncStats" msgid="7396577451360202448">"čítanie štatistických údajov o synchronizácii"</string>
     <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Umožňuje aplikácii čítať štatistické informácie o synchronizácii v účte vrátane histórie uskutočnených synchronizácií a informácií o množstve synchronizovaných údajov."</string>
-    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"čítanie zdrojov prihlásených na odber"</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"čítať odoberané informačné kanály"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Umožňuje aplikácii získať podrobnosti o aktuálne synchronizovaných informačných kanáloch."</string>
-    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"zápis odoberaných zdrojov"</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"zapisovať odoberané informačné kanály"</string>
     <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Umožňuje aplikácii upraviť vaše aktuálne synchronizované informačné kanály. Škodlivé aplikácie môžu synchronizované informačné kanály zmeniť."</string>
     <string name="permlab_readDictionary" msgid="4107101525746035718">"čítať výrazy pridané do slovníka"</string>
     <string name="permdesc_readDictionary" msgid="659614600338904243">"Umožňuje aplikácii čítať všetky slová, názvy a frázy, ktoré mohol používateľ uložiť do svojho slovníka."</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Umožňuje aplikácii načítať, zobrazovať a mazať upozornenia vrátane tých, ktoré boli uverejnené inými aplikáciami."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"naviazanie sa na službu na počúvanie upozornení"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Umožňuje držiteľovi naviazať sa na najvyššiu úroveň služby na počúvanie upozornení. Bežné aplikácie by toto nastavenie nemali nikdy požadovať."</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"vyvolanie aplikácie pre konfiguráciu poskytnutú operátorom"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Umožňuje držiteľovi vyvolať aplikáciu pre konfiguráciu poskytnutú operátorom. Bežné aplikácie by toto povolenie nemali nikdy potrebovať."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"zachytávať informácie o stave siete"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Umožňuje aplikácii zachytávať informácie o stave siete. Bežné aplikácie by toto povolenie nemali nikdy potrebovať."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"zmeniť kalibráciu vstupného zariadenia"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Umožňuje aplikácii upraviť parametre kalibrácie dotykovej obrazovky. Bežné aplikácie by toto povolenie nemali nikdy potrebovať."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"prístup k certifikátom DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Umožňuje aplikácii vydávať a používať certifikáty DRM. Bežné aplikácie by toto povolenie nemali nikdy potrebovať."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Nastaviť pravidlá pre heslo"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Ovládanie dĺžky hesiel na odomknutie obrazovky a v nich používané znaky."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Sledovať pokusy o odomknutie obrazovky"</string>
@@ -688,7 +751,7 @@
     <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Bez predchádzajúceho upozornenia zmazať všetky údaje tým, že sa obnovia továrenské nastavenia telefónu."</string>
     <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Nastaviť globálny server proxy zariadenia"</string>
     <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Vyberte globálny server proxy, ktorý sa bude používať po aktivácii pravidiel. Platný globálny server proxy nastavuje iba prvý správca zariadenia."</string>
-    <string name="policylab_expirePassword" msgid="885279151847254056">"Nastav. koniec platnosti hesla"</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"Nastaviť vypršanie hesla zámky"</string>
     <string name="policydesc_expirePassword" msgid="1729725226314691591">"Nastavte, ako často sa musí zmeniť heslo na uzamknutie obrazovky."</string>
     <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Nastaviť šifr. ukl. priestoru"</string>
     <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Vyžadovať šifrovanie uložených údajov aplikácií."</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Domov"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Práca"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Iné"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Nebola nájdená žiadna aplikácia, pomocou ktorej by bolo možné zobraziť tento kontakt."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Zadajte kód PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Zadajte kód PUK a nový kód PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kód PUK"</string>
@@ -1117,7 +1181,7 @@
     <string name="whichApplication" msgid="4533185947064773386">"Dokončiť akciu pomocou aplikácie"</string>
     <string name="whichHomeApplication" msgid="4616420172727326782">"Vyberte domovskú aplikáciu"</string>
     <string name="alwaysUse" msgid="4583018368000610438">"Použiť ako predvolené nastavenie pre túto akciu."</string>
-    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Vymazať predvolené nastavenia v sekcii Nastavenia systému &gt; Aplikácie &gt; Prevzaté položky."</string>
+    <string name="clearDefaultHintMsg" msgid="3252584689512077257">"Vymazať predvolené nastavenia v sekcii Nastavenia systému &gt; Aplikácie &gt; Stiahnuté položky."</string>
     <string name="chooseActivity" msgid="7486876147751803333">"Zvoľte akciu"</string>
     <string name="chooseUsbActivity" msgid="6894748416073583509">"Zvoľte aplikáciu pre zariadenie USB"</string>
     <string name="noApplications" msgid="2991814273936504689">"Túto akciu nemôžu vykonávať žiadne aplikácie."</string>
@@ -1130,7 +1194,7 @@
     <string name="anr_application_process" msgid="8941757607340481057">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> neodpovedá. Chcete ju zavrieť?"</string>
     <string name="anr_process" msgid="6513209874880517125">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> neodpovedá. \n\nChcete ho zavrieť?"</string>
     <string name="force_close" msgid="8346072094521265605">"OK"</string>
-    <string name="report" msgid="4060218260984795706">"Prehľad"</string>
+    <string name="report" msgid="4060218260984795706">"Nahlásiť"</string>
     <string name="wait" msgid="7147118217226317732">"Čakajte"</string>
     <string name="webpage_unresponsive" msgid="3272758351138122503">"Stránka nereaguje.\n\nChcete ju zavrieť?"</string>
     <string name="launch_warning_title" msgid="1547997780506713581">"Presmerovaná aplikácia"</string>
@@ -1138,7 +1202,7 @@
     <string name="launch_warning_original" msgid="188102023021668683">"Pôvodne bola spustená aplikácia <xliff:g id="APP_NAME">%1$s</xliff:g>."</string>
     <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Prispôsobiť veľkosť"</string>
     <string name="screen_compat_mode_show" msgid="4013878876486655892">"Vždy zobraziť"</string>
-    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Povoľte to znova v sekcii Nastavenia systému &gt; Aplikácie &gt; Prevzaté súbory."</string>
+    <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Povoľte to znova v sekcii Nastavenia systému &gt; Aplikácie &gt; Stiahnuté súbory."</string>
     <string name="smv_application" msgid="3307209192155442829">"Aplikácia <xliff:g id="APPLICATION">%1$s</xliff:g> (proces <xliff:g id="PROCESS">%2$s</xliff:g>) porušila svoje vlastné vynútené pravidlá StrictMode."</string>
     <string name="smv_process" msgid="5120397012047462446">"Proces <xliff:g id="PROCESS">%1$s</xliff:g> porušil svoje vlastné vynútené pravidlá StrictMode."</string>
     <string name="android_upgrading_title" msgid="1584192285441405746">"Prebieha inovácia systému Android..."</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Umožňuje aplikácii získať prístup k ukladaciemu priestoru zabezpečenému technológiou keyguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Ovládanie zobrazenia alebo skrytia technológie keyguard"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Umožňuje aplikácii ovládať technológiu keyguard."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Reagovanie na zmeny stavu dôveryhodnosti."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Umožňuje aplikácii reagovať na zmeny stavu dôveryhodnosti."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Viazanie sa na službu zástupcu dôveryhodnosti"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Umožňuje aplikácii viazať sa na službu zástupcu dôveryhodnosti."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interakcia so systémom aktualizácií a obnovenia"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Umožňuje aplikácii interakciu so systémom obnovenia a s aktualizáciami systému."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Ovládacie prvky lupy zobrazíte dvojitým dotknutím"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Miniaplikáciu sa nepodarilo pridať."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Hľadať"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Tapeta"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Zmeniť tapetu"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Aplikácia na počúvanie upozornení"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"Sieť VPN je aktivovaná"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Aplikáciu <xliff:g id="APP">%s</xliff:g> aktivovala sieť VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Dotykom môžete spravovať sieť."</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Zvoľte aplikáciu"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Aplikáciu <xliff:g id="APPLICATION_NAME">%s</xliff:g> nie je možné spustiť"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Zdieľať s"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Zdieľať s aplikáciou <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Posuvné tlačidlo. Dotknite sa a podržte."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Prejdite prstom nahor: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Prejdite prstom nadol: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Prejdite prstom doľava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Prejdite prstom doprava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Odomknúť"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Fotoaparát"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Tichý"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Zapnúť zvuk"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Vyhľadávanie"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Posunom odomknúť."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Ak si chcete vypočuť vyslovené klávesy hesla, pripojte náhlavnú súpravu."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Bodka."</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Systém"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth audio"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Bezdrôtový displej"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Hotovo"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Výstup médií"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Pripojenie k zariadeniu"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Prenos obraz. do zariad."</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Prebieha vyhľadávanie zariadení…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Nastavenia"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Odpojiť"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Prebieha vyhľadávanie..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Prebieha pripájanie…"</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"K dispozícii"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Prekrytie č. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", zabezpečené"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Bezdrôtový displej je pripojený"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Táto obrazovka sa zobrazuje na inom zariadení"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Nahrávanie obrazovky na prehratie"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Prebieha pripájanie k obrazovke <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Nahrávanie obrazovky na prehratie"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Pripojené k obrazovke <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Odpojiť"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Tiesňové volanie"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nepamätám si vzor"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Prebieha odomykanie karty SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávny kód PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadajte kód PIN s dĺžkou 4 až 8 číslic."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kód PUK musí obsahovať 8 alebo viac číslic."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Kód PUK musí obsahovať 8 číslic."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Znova zadajte správny kód PUK. Opakované pokusy zakážu kartu SIM natrvalo."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kódy PIN sa nezhodujú"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Príliš veľa pokusov o nakreslenie vzoru"</string>
@@ -1649,5 +1719,16 @@
     <item quantity="other" msgid="4730868920742952817">"Skúste to zas o <xliff:g id="COUNT">%d</xliff:g> s"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Skúste to znova neskôr"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Režim celej obraz. ukončíte posunutím nadol"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Režim celej obrazovky ukončíte posunutím nadol."</string>
+    <string name="done_label" msgid="2093726099505892398">"Hotovo"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Kruhový posúvač hodín"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Kruhový posúvač minút"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Vyberte hodiny"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Vyberte minúty"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Tabuľka dní v mesiaci"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Zoznam rokov"</string>
+    <string name="select_day" msgid="7774759604701773332">"Vyberte mesiac a deň"</string>
+    <string name="select_year" msgid="7952052866994196170">"Vyberte rok"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Bola vybratá položka <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Číslo <xliff:g id="KEY">%1$s</xliff:g> bolo odstránené"</string>
 </resources>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 43da811..ef5d872 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Brez naslova&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Vnesite 8- ali več mestni PUK."</string>
     <string name="needPuk" msgid="919668385956251611">"Kartica SIM je zaklenjena s kodo PUK. Če jo želite odkleniti, vnesite kodo PUK."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Če želite odstraniti blokiranje kartice SIM, vnesite PUK2."</string>
+    <string name="enablePin" msgid="209412020907207950">"Ni uspelo. Omogočite zaklepanje kartice SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Na voljo imate še <xliff:g id="NUMBER">%d</xliff:g> poskus. Potem se bo kartica SIM zaklenila."</item>
+    <item quantity="other" msgid="7530597808358774740">"Poskusite lahko še <xliff:g id="NUMBER">%d</xliff:g>-krat. Potem se bo kartica SIM zaklenila."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"ID dohodnega klicatelja"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sinhronizacija"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Preveč izbrisov vsebine <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Pomnilnik tabličnega računalnika je poln. Izbrišite nekaj datotek, da sprostite prostor."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Shramba ure je polna. Izbrišite nekaj datotek, da sprostite prostor."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Pomnilnik telefona je poln. Izbrišite nekaj datotek, da sprostite prostor."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Omrežje je lahko nadzorovano"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Neznana tretja oseba"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Vklopi zvonjenje"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Se zaustavlja ..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tablični računalnik se bo zaustavil."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Ura se bo izklopila."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefon bo zaustavljen."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Ali želite izklopiti napravo?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Vnovičen zagon v varnem načinu"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Način za letalo"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Način za letalo je VKLOPLJEN"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Način za letalo je IZKLOPLJEN"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Nastavitve"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999 +"</string>
     <string name="safeMode" msgid="2788228061547930246">"Varni način"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Sistem Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"odstranjevanje bližnjic"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Aplikaciji omogoča odstranjevanje bližnjic z začetnega zaslona brez posredovanja uporabnika."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"preusmeritev odhodnih klicev"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Aplikaciji omogoča, da obdela odhodne klice in spreminja klicne številke. S tem lahko aplikacija nadzira, preusmerja ali preprečuje odhodne klice."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Aplikaciji dovoli ogled klicane številke pri odhodnem klicu in ji omogoča preusmeritev klica na drugo številko ali prekinitev klica."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"prejemanje sporočil (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Aplikaciji omogoča prejemanje in obdelavo SMS-ov. S tem lahko aplikacija nadzoruje ali izbriše sporočila, poslana v napravo, ne da bi vam jih pokazala."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"prejemanje sporočil (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Programu omogoča dostop do vsebine aktivnega okna. Zlonamerni programi lahko dobijo vso vsebino okna in pregledajo njeno besedilo razen gesel."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"začasno omogoči pripomočke za ljudi s posebnimi potrebami"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Aplikaciji omogoča, da v napravi začasno omogoči pripomočke za ljudi s posebnimi potrebami. Zlonamerne aplikacije jih lahko omogočijo brez soglasja uporabnika."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"prenos podatkov o oknih"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Omogoča, da aplikacija iz upravitelja oken pridobiva podatke o oknih. Zlonamerne aplikacije lahko pridobivajo podatke, namenjene za notranjo uporabo v sistemu."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"pridobivanje žetona okna"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Aplikaciji dovoli, da pridobi žeton okna. Zlonamerne aplikacije lahko z oknom aplikacije vzpostavijo stik brez pooblastila in se lažno predstavljajo kot sistem."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"pridobivanje statističnih podatkov o okvirjih"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Aplikaciji dovoli, da zbira statistične podatke o okvirjih. Zlonamerne aplikacije lahko vidijo statistične podatke o okvirjih oken iz drugih aplikacij."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtriranje dogodkov"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Omogoča, da aplikacija registrira vhodni filter, ki pred razpošiljanjem filtrira tok vseh uporabniških dogodkov. Zlonamerne aplikacije lahko nadzirajo uporabniški vmesnik sistema brez posega uporabnika."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"povečevanje zaslona"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Omogoča aplikaciji povečevanje vsebine zaslona. Zlonamerne aplikacije lahko preoblikujejo vsebino zaslona tako, da je naprava neuporabna."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"delna zaustavitev"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Upravitelja dejavnosti preklopi v stanje za zaustavitev. Ne izvede celotne zaustavitve."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"preprečevanje preklopa programov"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Programu omogoča oddajo obvestila o prejetih sporočilih SMS. Zlonamerni programi lahko to uporabijo za ponarejanje dohodnih SMS-ov."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"pošiljanje oddaje, prejete s potisnim sporočilom WAP"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Programu omogoča oddajo obvestila, da je bilo potisno sporočilo WAP prejeto. Zlonamerni programi lahko to uporabijo za ponarejanje potrdila o prejemu sporočila MMS ali za neopazno menjavo vsebine poljubne spletne strani z zlonamernimi različicami."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"pošiljanje oddaj o ocenjevanju omrežij"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Aplikaciji dovoli oddajo obvestila, da je treba omrežja oceniti. Tega nikoli ni treba uporabiti za navadne aplikacije."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"omejevanje števila izvajajočih se procesov"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Programu omogoča nadzor največjega števila postopkov, ki se bodo izvajali. Tega nikoli ni treba uporabiti za navadne programe."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"vsiljeno zapiranje aplikacij v ozadju"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Lastniku omogoča povezovanje z vmesnikom storitve navideznega zasebnega omrežja najvišje ravni. Ne uporabljajte za navadne programe."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"povezovanje z ozadjem"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Imetniku omogoča povezavo z vmesnikom ozadja najvišje ravni. Tega nikoli ni treba uporabiti za navadne programe."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"povezovanje z glasovnim interaktorjem"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Imetniku omogoča povezovanje z vmesnikom storitve glasovne interakcije najvišje ravni. Tega ni treba nikoli uporabiti za navadne aplikacije."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"povezava z oddaljenim prikazom"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Imetniku omogoča povezovanje z vmesnikom oddaljenega prikaza najvišje ravni. Tega ni treba nikoli uporabiti za navadne aplikacije."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"poveži s storitvijo pripomočka"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Lastniku omogoča povezovanje z vmesnikom storitve pripomočka najvišje ravni. Tega ni treba nikoli uporabiti za navadne programe."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"Povezava s storitvijo ponudnika poti"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Omogoča imetniku, da se povezuje z registriranimi ponudniki poti. Tega ni treba nikoli uporabiti za navadne aplikacije."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"interakcija s skrbnikom naprave"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Omogoča lastniku, da pošlje namere skrbniku naprave. Nikoli se ne uporablja za navadne programe."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"povezava s TV-vhodom"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Imetniku omogoča povezovanje z vmesnikom TV-vhoda najvišje ravni. Tega ni treba nikoli uporabiti za navadne aplikacije."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"dodajanje ali odstranjevanje skrbnikov naprave"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Imetniku omogoča, da doda ali odstrani aktivne skrbnike naprave. Normalne aplikacije tega načeloma ne potrebujejo."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"spreminjanje usmerjenosti zaslona"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Programu omogoča, da uporabi kateri koli dekodirnik večpredstavnosti za predvajanje."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"upravljanje preverjenih poverilnic"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Aplikaciji dovoli nameščanje in odstranjevanje potrdil overitelja potrdil kot preverjenih poverilnic."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"izvajanje aplikacije ob nedejavnosti"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"To dovoljenje sistemu Android omogoča, da izvaja aplikacijo v ozadju, ko naprava ni v uporabi."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"branje/pisanje v sredstva, ki so v lasti skupine za diagnostiko"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Programu omogoča branje in pisanje na poljuben vir, ki je v lasti skupine za diagnostiko; na primer datoteke v mapi /dev. To lahko vpliva na stabilnost in varnost sistema. To naj uporablja SAMO izdelovalec ali operater za diagnostiko, specifično za strojno opremo."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"omogočanje ali onemogočanje komponent programa"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Aplikaciji omogoča branje osebnih podatkov v profilu, ki so shranjeni v napravi, na primer ime in podatki za stik. To pomeni, da vas lahko aplikacija prepozna in vaše podatke v profilu pošlje drugim."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"spreminj. vaše osebne vizitke"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Aplikaciji omogoča spreminjanje ali dodajanje osebnih podatkov v profilu, ki so shranjeni v napravi, na primer ime in podatki za stik. To pomeni, da vas lahko aplikacija prepozna in vaše podatke v profilu pošlje drugim."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"tipala telesnih funkcij (npr. merilniki srčnega utripa)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Aplikaciji dovoli dostop do podatkov tipal, ki jih uporabljate za merjenje procesov v telesu, kot je srčni utrip."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"branje vašega družabnega toka"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Aplikaciji omogoča dostop do vaših objav in objav vaših prijateljev v družabnih omrežjih ter njihovo sinhronizacijo. Previdno pri objavljanju informacij – aplikacija lahko s tem bere komunikacijo med vami in prijatelji v družabnih omrežjih, ne glede na zasebnost. Opomba: Tega dovoljenja ni mogoče uveljaviti v vseh družabnih omrežjih."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"pisanje v vaš družabni tok"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Programu omogoča uporabo funkcij nizke ravni SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"branje grafičnega/slikovnega medpomnilnika"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Programu omogoča branje vsebine grafičnega/slikovnega medpomnilnika."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"dostop do funkcij InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Aplikaciji dovoljuje uporabo funkcij InputFlinger nizke ravni."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfiguriranje zaslonov Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Omogoča aplikaciji konfiguriranje zaslonov Wi-Fi in povezovanje z njimi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"nadzor zaslonov Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Aplikaciji omogoča spreminjanje splošnih zvočnih nastavitev, na primer glasnost in kateri zvočnik se uporablja."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"snemanje zvoka"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Aplikaciji omogoča snemanje zvoka z mikrofonom. S tem dovoljenjem lahko aplikacija kadar koli snema zvok brez vaše potrditve."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"komuniciranje s kartico SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Aplikaciji dovoli pošiljanje ukazov kartici SIM. To je lahko zelo nevarno."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"fotografiranje in snemanje videoposnetkov"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Aplikaciji omogoča fotografiranje in snemanje videoposnetkov s kamero. S tem dovoljenjem lahko aplikacija kadar koli uporablja kamero brez vaše potrditve."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"onemogoči LED-indikator prenašanja, ko je fotoaparat v uporabi"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Programu omogoča nadziranje telefonskih funkcij naprave. Program lahko s tem dovoljenjem preklaplja omrežja, vklopi ali izklopi radio v telefonu, ne da bi vas obvestil."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"branje stanja in identitete telefona"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Aplikaciji omogoča dostop do funkcij telefona v napravi. S tem dovoljenjem lahko aplikacija določi telefonsko številko in ID-je naprave, določi lahko tudi, ali je klic aktiven, in oddaljeno številko, s katero je klic povezan."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"branje natančnih stanj telefona"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Aplikaciji dovoli dostop do natančnih stanj telefona. To dovoljenje aplikaciji omogoča ugotoviti pravo stanje klica; ali je klic aktiven ali v ozadju; neuspele klice; natančno stanje podatkovne povezave in neuspele podatkovne povezave."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"preprečitev prehoda tabličnega računalnika v stanje pripravljenosti"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"preprečevanje prehoda v stanje pripravljenosti telefona"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Omogoča, da program prepreči prehod tabličnega računalnika v stanje pripravljenosti."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Sprememba stanja omrežja WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Aplikaciji omogoča, da vzpostavi povezavo med tabličnim računalnikom in omrežjem WiMAX ter jo prekine."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Aplikaciji omogoča, da vzpostavi povezavo med telefonom in omrežjem WiMAX ter jo prekine."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ocenjevanje omrežij"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Aplikaciji dovoli, da omrežja razvršča in vpliva na to, katera naj tablični računalnik prednostno izbere."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Aplikaciji dovoli, da omrežja razvršča in vpliva na to, katera naj telefon prednostno izbere."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"seznanitev z napravami Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Aplikaciji omogoča ogled konfiguracije Bluetootha tabličnega računalnika ter vzpostavljanje in sprejemanje povezave s seznanjenimi napravami."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Aplikaciji omogoča ogled konfiguracije Bluetootha telefona ter ustvarjanje in sprejemanje povezave s seznanjenimi napravami."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Dovoli aplikaciji, da prenese, razišče in izbriše obvestila, tudi tista, ki so jih objavile druge aplikacije."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"poveži se s storitvijo poslušalca obvestil"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Lastniku omogoča povezovanje z vmesnikom storitve poslušalca obvestil najvišje ravni. Tega nikoli ni treba uporabiti za navadne aplikacije."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"povezovanje s storitvijo ponudnika pogojev"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Imetniku omogoča povezovanje z vmesnikom storitve ponudnika pogojev najvišje ravni. Tega ni treba nikoli uporabiti za navadne aplikacije."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"sprožitev operaterjeve aplikacije za konfiguracijo"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Lastniku omogoča sproženje operaterjeve aplikacije za konfiguracijo. Tega nikoli ni treba uporabiti za navadne aplikacije."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"spremljanje razmer v omrežju"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Aplikaciji omogoča spremljanje razmer v omrežju. Pri navadnih aplikacijah to ne bi smelo biti potrebno."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"sprememba umerjanja vhodne naprave"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Aplikaciji dovoli spreminjanje parametrov za umerjanje zaslona na dotik. Tega ni treba nikoli uporabiti za navadne aplikacije."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"dostop do potrdil za upravljanje digitalnih pravic"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Aplikaciji omogoča pripravo in uporabo potrdil za upravljanje digitalnih pravic. To naj ne bi bilo nikoli potrebno za običajne aplikacije."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Nastavitev pravil za geslo"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Nadzor nad dolžino in znaki, ki so dovoljeni v geslih za odklepanje zaslona."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"nadzor nad poskusi odklepanja zaslona"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Domov"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Služba"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Drugo"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Ni aplikacije za ogled tega stika."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Vnesite kodo PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Vnesite kodo PUK in novo kodo PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Koda PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Aplikaciji omogoča dostop do varne shrambe Keyguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Nadzira prikaz in skrivanje zaklepanja tipkovnice"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Aplikaciji omogoča nadzor zaklepanja tipkovnice."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Spremljanje sprememb stanja zaupanja."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Aplikaciji dovoli spremljanje sprememb stanja zaupanja."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Povezovanje s storitvijo posrednikov zaupanja"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Aplikaciji dovoli povezovanje s storitvijo posrednikov zaupanja."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Uporaba sistema za posodobitev in obnovitev"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Aplikaciji dovoli uporabo sistema za obnovitev in posodobitev sistema."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Dvakrat se dotaknite za nadzor povečave/pomanjšave"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Pripomočka ni bilo mogoče dodati."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Pojdi"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Ozadje"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Spreminjanje ozadja"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Poslušalec obvestil"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Ponudnik pogojev"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN aktiviran"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN je aktiviral program <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Dotaknite se, če želite upravljati omrežje."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tipka Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Tipka Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Izberite program"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Aplikacije <xliff:g id="APPLICATION_NAME">%s</xliff:g> ni bilo mogoče zagnati"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Delite z"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Delite s programom <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Drsna ročica. Dotaknite se in pridržite."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Povlecite navzgor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Povlecite navzdol za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Povlecite v levo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Povlecite v desno za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Odkleni"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Fotoaparat"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Tiho"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Vklopljen zvok"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Iskanje"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Povlecite, če želite odkleniti."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Priključite slušalke, če želite slišati izgovorjene tipke gesla."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Pika."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Zvok prek Bluetootha"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Brezžični prikaz"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Končano"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Izhod predstavnosti"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Povezovanje z napravo"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Predvajanje zaslona v napravi"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Iskanje naprav …"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Nastavitve"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Prekinitev povezave"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Pregledovanje ..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Vzpostavljanje povezave ..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Na voljo"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Prekrivanje #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> pik na palec"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", varen"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Brezžični zaslon je povezan"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Ta zaslon je prikazan v drugi napravi"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Predvajanje zaslona"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Povezovanje z zaslonom <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Predvajanje zaslona"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Vzpostavljena povezava z zaslonom <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Prekini povezavo"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Klic v sili"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Pozabljen vzorec"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odklepanje kartice SIM ..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Napačna koda PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Vnesite PIN, ki vsebuje od štiri do osem številk."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Koda PUK mora vsebovati 8 ali več števk."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Koda PUK mora biti 8-mestno število."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Vnovič vnesite pravilno kodo PUK. Večkratni poskusi bodo trajno onemogočili kartico SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kodi PIN se ne ujemata"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Preveč poskusov vzorca"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Poskusite znova pozneje"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Povlecite z vrha, da zaprete celozaslonski način."</string>
+    <string name="done_label" msgid="2093726099505892398">"Dokončano"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Okrogli drsnik za ure"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Okrogli drsnik za minute"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Izberite ure"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Izberite minute"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Mesečna mreža dni"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Seznam let"</string>
+    <string name="select_day" msgid="7774759604701773332">"Izberite mesec in dan"</string>
+    <string name="select_year" msgid="7952052866994196170">"Izberite leto"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Izbrano: <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Številka <xliff:g id="KEY">%1$s</xliff:g> je izbrisana"</string>
 </resources>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 14b22cc..b87bd89 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Без наслова&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Унесите PUK који се састоји од 8 цифара или више."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM картица је закључана PUK кодом. Унесите PUK кôд да бисте је откључали."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Унесите PUK2 да бисте деблокирали SIM картицу."</string>
+    <string name="enablePin" msgid="209412020907207950">"Није успело. Омогућите закључавање SIM/RUIM картице."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Имате још <xliff:g id="NUMBER">%d</xliff:g> покушај пре него што се SIM картица закључа."</item>
+    <item quantity="other" msgid="7530597808358774740">"Имате још <xliff:g id="NUMBER">%d</xliff:g> покушаја пре него што се SIM картица закључа."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Долазни ИД позиваоца"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Синхронизација"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Превише <xliff:g id="CONTENT_TYPE">%s</xliff:g> избрисаних ставки."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Меморија таблета је пуна! Избришите неке датотеке да бисте ослободили простор."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Меморија сата је пуна. Избришите неке датотеке да бисте ослободили простор."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Складиште телефона је пуно! Избришите неке датотеке како бисте ослободили простор."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Мрежа се можда надгледа"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Од стране непознате треће стране"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Звоно је укључено"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Искључивање…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Таблет ће се искључити."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Сат ће се угасити."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Телефон ће се искључити."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Да ли желите да искључите телефон?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Поново покрени систем у безбедном режиму"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Режим рада у авиону"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Режим рада у авиону је УКЉУЧЕН"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Режим рада у авиону је ИСКЉУЧЕН"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Подешавања"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Безбедни режим"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android систем"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"деинсталирање пречица"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Омогућава апликацији да уклања пречице са почетног екрана без интервенције корисника."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"преусмеравање одлазних позива"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Дозвољава апликацији да обрађује одлазне позиве и промени број који се бира. Ова дозвола омогућава апликацији да надгледа, преусмерава или спречава одлазне позиве."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Дозвољава апликацији да види који број се бира при одлазном позиву уз опцију да преусмери позив на други број или га потпуно прекине."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"пријем текстуалних порука (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Дозвољава апликацији да прима и обрађује SMS поруке. То значи да апликација може да надгледа или брише поруке које се шаљу уређају, а да вам их не прикаже."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"пријем текстуалних порука (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дозвољава апликацији да преузме садржај активног прозора. Злонамерне апликације могу да преузму цео садржај прозора и прегледају целокупан текст, осим лозинки."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"привремено омогућавање приступачности"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Дозвољава апликацији да привремено омогући приступачност на уређају. Злонамерне апликације могу да омогуће приступачност без дозволе корисника."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"преузимање информација о прозорима"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Омогућава апликацији да преузме информације о прозорима од менаџера прозора. Злонамерне апликације могу да преузму информације које су намењене за интерну употребу система."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"преузимање токена прозора"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Дозвољава апликацији да преузима токен прозора. Злонамерне апликације могу да ступе у неовлашћену интеракцију са прозором апликације лажно се представљајући као систем."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"преузимње статистике оквира"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Дозвољава апликацији да прикупља статистику о оквиру. Злонамерне апликације могу да прате статистику оквира прозора из других апликација."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"филтрирање догађаја"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Омогућава апликацији да региструје филтер улазног садржаја који филтрира стрим свих догађаја корисника пре њиховог слања. Злонамерна апликација може да контролише кориснички интерфејс система без интервенције корисника."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"увеличавање екрана"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Дозвољава апликацији да увеличава садржај екрана. Злонамерне апликације могу да промене садржај екрана до те мере да уређај постаје неупотребљив."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"делимично искључивање"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Ставља менаџера активности у стање искључивања. Не искључује га у потпуности."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"спречавање пребацивања са једне апликације на другу"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Дозвољава апликацији да емитује обавештење да је SMS порука примљена. Злонамерне апликације на тај начин могу да фалсификују долазне SMS поруке."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"слање примљених PUSH емитовања преко WAP-а"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Дозвољава апликацији да емитује обавештење да је примљена PUSH порука преко WAP-а. Злонамерне апликације то могу да искористе да фалсификују пријем MMS порука или да кришом замене садржај било које веб-странице уносом злонамерног садржаја."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"шаљи обавештења о тестирању мрежа"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Омогућава апликацији да емитује обавештење да је потребно тестирање мрежа. Никада није потребно за стандардне апликације."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"ограничење броја покренутих процеса"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Дозвољава апликацији да управља максималним бројем процеса који ће моћи да се покрену. Никада није потребна уобичајеним апликацијама."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"принудно затварање позадинских апликација"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Дозвољава власнику да се повеже са интерфејсом VPN услуге највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"обавезивање на позадину"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Дозвољава власнику да се повеже са интерфејсом позадине највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"повежи са гласовним интерактором"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Дозвољава власнику да се повеже са интерфејсом највишег нивоа услуге гласовне интеракције. Не би требало никада да буде потребно за уобичајене апликације."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"повезивање са удаљеним екраном"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Дозвољава власнику да се повеже са интерфејсом удаљеног екрана највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"обавезивање на услугу виџета"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Дозвољава власнику да се обавеже на интерфејс услуге виџета највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"повежи са услугом добављача путања"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Дозвољава власнику да се повеже са добављачима путања. Никада не би требало да буде потребно за обичне апликације."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"интеракција са администратором уређаја"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Омогућава да власник шаље своје намере администратору уређаја. Уобичајене апликације никада не би требало да је користе."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"повезивање са ТВ улазом"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Дозвољава власнику да се повеже са интерфејсом ТВ улаза највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"додавање или уклањање администратора уређаја"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Дозвољава власнику да додаје или уклања активне администраторе уређаја. Уобичајене апликације никада не би требало да је користе."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"промена положаја екрана"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Омогућава апликацији да користи било који инсталирани декодер медија за декодирање за репродукцију."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"управљање поузданим акредитивима"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Дозвољава апликацији да инсталира и деинсталира CA сертификате као поуздане акредитиве."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"покреће апликације током неактивности"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Ова дозвола омогућава систему Android да покреће апликације у позадини док се уређај не користи."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"читање ресурса у власништву дијагностике и уписивање података у њих"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Дозвољава апликацији да чита и уписује податке у било који ресурс у власништву групе за дијагностиковање, на пример, датотеке у директоријуму /dev. То може да угрози стабилност и безбедност система и треба да је користе САМО произвођач или оператер у сврхе дијагностиковањa хардвера."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"омогућавање или онемогућавање компоненти апликације"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Дозвољава апликацији да чита личне информације о профилу ускладиштене на уређају, као што су име и контакт информације. То значи да апликација може да вас идентификује и шаље другима информације о профилу."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"измена ваше контакт картице"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Дозвољава апликацији да мења или додаје нове личне информације о профилу ускладиштене на уређају, као што су име и контакт информације. То значи да апликација може да вас идентификује и шаље другима информације о профилу."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"телесни сензори (нпр. срчани монитор)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Дозвољава апликацији да приступа подацима сензора које користите за мерење телесних функција, као што је срчани пулс."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"читање друштвеног стрима"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Дозвољава апликацији да приступа вашим друштвеним ажурирањима и друштвеним ажурирањима пријатеља и да их синхронизује. Будите опрезни када делите информације – ово омогућава апликацији да чита преписке између вас и пријатеља на друштвеним мрежама, без обзира на поверљивост. Напомена: Ова дозвола се можда не примењује на све друштвене мреже."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"писање у друштвени стрим"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дозвољава апликацији да користи SurfaceFlinger функције ниског нивоа."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"читање бафера кадрова"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дозвољава апликацији да чита садржај међумеморије кадрова."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"приступ InputFlinger функцијама"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Дозвољава апликацији да користи InputFlinger функције ниског нивоа."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"конфигурисање Wi-Fi екрана"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Дозвољава апликацији да конфигурише Wi-Fi екране и повезује се са њима."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"контрола Wi-Fi екрана"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дозвољава апликацији да мења глобална аудио подешавања као што су јачина звука и избор звучника који се користи као излаз."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"снимање аудио записа"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Дозвољава апликацији да снима звук помоћу микрофона. Ова дозвола омогућава апликацији да снима звук у било ком тренутку без ваше потврде."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"Комуникација са SIM картицом"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Омогућава апликацији да шаље команде SIM картици. То је веома опасно."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"снимање фотографија и видео снимака"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Дозвољава апликацији да снима слике и видео снимке камером. Ова дозвола омогућава апликацији да у било ком тренутку користи камеру без ваше потврде."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"онемогући пренос LED осветљења индикатора док се камера користи"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Дозвољава апликацији да управља функцијама телефона на уређају. Апликација са овом дозволом може да прелази са једне мреже на другу и да без обавештења укључује и искључује радио телефона и сличне функције."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"читање статуса и идентитета телефона"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Дозвољава апликацији да приступа функцијама телефона на уређају. Ова дозвола омогућава апликацији да утврди број телефона и ИД-ове уређаја, затим да ли је позив активан, као и број даљинског уређаја са којим је успостављен позив."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"читај прецизне статусе телефона"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Омогућава апликацији да приступа прецизним статусима телефона. Ова дозвола омогућава апликацији да утврди стварни статус позива, да ли је позив активан или у позадини, неуспеле позиве, прецизан статус везе за пренос података и неуспела успостављања везе за пренос података."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"спречавање преласка таблета у стање спавања"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"спречавање преласка телефона у стање спавања"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Дозвољава апликацији да спречи таблет да пређе у стање спавања."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Промени WiMAX статус"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Дозвољава апликацији да повезује таблет са WiMAX мрежама и прекида везе са њима."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Дозвољава апликацији да повезује телефон са WiMAX мрежама и прекида везе са њима."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"тестирај мреже"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Омогућава апликацији да рангира мреже и утиче на то које су мреже примарне на таблету."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Омогућава апликацији да рангира мреже и утиче на то које су мреже примарне на телефону."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"упаривање са Bluetooth уређајима"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Дозвољава апликацији да прегледа конфигурацију Bluetooth-а на таблету, као и да успоставља и прихвата везе са упареним уређајима."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Дозвољава апликацији да прегледа конфигурацију Bluetooth-а на телефону, као и да успоставља и прихвата везе са упареним уређајима."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Дозвољава апликацији да преузима, испитује и брише обавештења, укључујући она која постављају друге апликације."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"повезивање са услугом монитора обавештења"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Дозвољава власнику да се повеже са интерфејсом услуге монитора обавештења највишег нивоа. Уобичајене апликације никада не би требало да је користе."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"повежи са услугом добављача услова"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Дозвољава власнику да се повеже са интерфејсом највишег нивоа услуге добављача услова. Не би требало никада да буде потребно за уобичајене апликације."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"позивање апликације са конфигурацијом коју одређује оператер"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Дозвољава власнику да позива апликацију са конфигурацијом коју одређује оператер. Уобичајене апликације никада не би требало да је користе."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"праћење података о условима на мрежи"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Дозвољава апликацији да прати податке о условима на мрежи. Не би никада требало да буде потребно за нормалне апликације."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"промени калибрацију улазног уређаја"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Дозвољава апликацији да модификује параметре калибрације додирног екрана. Не би требало да буде потребно за нормалне апликације."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"приступ DRM сертификатима"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Дозвољава апликацији да додељује и користи DRM сертификате. Никада не би требало да се користи за уобичајене апликације."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Подешавање правила за лозинку"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Контролишите дужину и знакове дозвољене у лозинкама за откључавање екрана."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Надгледање покушаја откључавања екрана"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Почетна"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Посао"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Други"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Није пронађена ниједна апликација за приказ овог контакта."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Унесите PIN кôд"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Унесите PUK и нови PIN кôд"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK кôд"</string>
@@ -866,7 +926,7 @@
     <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Откључавање налога"</string>
     <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Превише покушаја уноса шаблона"</string>
     <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Да бисте откључали, пријавите се помоћу Google налога."</string>
-    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Корисничко име (адреса е-поште)"</string>
+    <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Корисничко име (имејл адреса)"</string>
     <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Лозинка"</string>
     <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Пријави ме"</string>
     <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Неважеће корисничко име или лозинка."</string>
@@ -1220,7 +1280,7 @@
     <string name="sim_removed_message" msgid="2333164559970958645">"Мобилна мрежа неће бити доступна док не покренете систем поново уз уметање важеће SIM картице."</string>
     <string name="sim_done_button" msgid="827949989369963775">"Готово"</string>
     <string name="sim_added_title" msgid="3719670512889674693">"SIM картица је додата"</string>
-    <string name="sim_added_message" msgid="6599945301141050216">"Поново покрените уређај да бисте могли да приступите мобилној мрежи."</string>
+    <string name="sim_added_message" msgid="6599945301141050216">"Рестартујте уређај да бисте могли да приступите мобилној мрежи."</string>
     <string name="sim_restart_button" msgid="4722407842815232347">"Поново покрени"</string>
     <string name="time_picker_dialog_title" msgid="8349362623068819295">"Подешавање времена"</string>
     <string name="date_picker_dialog_title" msgid="5879450659453782278">"Подешавање датума"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Дозвољава апликацији да приступа безбедној меморији заштићеној шифром."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Контролиши приказивање и скривање заштите шифром"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Дозвољава апликацији да контролише заштиту шифром."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Праћење промена Trust стања."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Дозвољава апликацији да прати промене Trust стања."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Везивање за услугу Trust agents"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Дозвољава апликацији да се веже за услугу Trust agents."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Интеракција са системом за ажурирање и опоравак"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Дозвољава апликацији да ступа у интеракцију са системом за опоравак и ажурирањима система."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Додирните двапут да бисте контролисали зум"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Није могуће додати виџет."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Иди"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Позадина"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Промена позадине"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Монитор обавештења"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Добављач услова"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN је активиран"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Апликација <xliff:g id="APP">%s</xliff:g> је активирала VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Додирните да бисте управљали мрежом."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Изаберите апликацију"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Није могуће покренути <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Дели са"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Дели са апликацијом <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Клизна ручица. Додирните и задржите."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Превуците нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Превуците надоле за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Превуците улево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Превуците удесно за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Откључај"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Нечујно"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Укључи звук"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Претрага"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Превуците да бисте откључали."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Прикључите слушалице да бисте чули изговорене тастере за лозинку."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Тачка."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Систем"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth аудио"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Бежични екран"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Излаз медија"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Повежите са уређајем"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Пребаците екран на уређај"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Тражење уређаја…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Подешавања"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Прекини везу"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Скенирање..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Повезивање..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Доступна"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Постављени елемент бр. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>×<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", безбедно"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Бежични екран је повезан"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Овај екран се приказује на другом уређају"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Пребацивање екрана"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Повезивање са <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Пребацивање екрана"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Повезано је са <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Прекини везу"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Хитни позив"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Заборављени шаблон"</string>
@@ -1514,12 +1579,12 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Откључавање SIM картице…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN кôд је нетачан."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Унесите PIN који има од 4 до 8 бројева."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK кôд треба да има 8 или више бројева."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK кôд треба да има 8 бројева."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Поново унесите исправни PUK кôд. Поновљени покушаји ће трајно онемогућити SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN кодови се не подударају"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Превише покушаја уноса шаблона"</string>
     <string name="kg_login_instructions" msgid="1100551261265506448">"Да бисте откључали, пријавите се помоћу Google налога."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (адреса е-поште)"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (имејл адреса)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"Лозинка"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"Пријави ме"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"Неважеће корисничко име или лозинка."</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Покушајте поново касније"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Превуците прстом одозго надоле да бисте изашли из целог екрана."</string>
+    <string name="done_label" msgid="2093726099505892398">"Готово"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Кружни клизач за сате"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Кружни клизач за минуте"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Изаберите сате"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Изаберите минуте"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Приказ дана у месецу у виду мреже"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Листа година"</string>
+    <string name="select_day" msgid="7774759604701773332">"Изаберите месец и дан"</string>
+    <string name="select_year" msgid="7952052866994196170">"Изаберите годину"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Изабрали сте <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Избрисали сте <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index aa20a64..9b4dae3 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Okänd&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Ange en PUK-kod med minst 8 siffror."</string>
     <string name="needPuk" msgid="919668385956251611">"Ditt SIM-kort är PUK-låst. Ange PUK-koden om du vill låsa upp det."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Ange PUK2-koden för att häva spärren av SIM-kortet."</string>
+    <string name="enablePin" msgid="209412020907207950">"Försöket misslyckades. Aktivera SIM-/RUIM-lås."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Du har <xliff:g id="NUMBER">%d</xliff:g> försök kvar innan SIM-kortet låses."</item>
+    <item quantity="other" msgid="7530597808358774740">"Du har <xliff:g id="NUMBER">%d</xliff:g> försök kvar innan SIM-kortet låses."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI-kod"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Nummerpresentatör för inkommande samtal"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Synkronisera"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"För många <xliff:g id="CONTENT_TYPE">%s</xliff:g>-borttagningar."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Pekdatorns lagringsutrymme är fullt. Ta bort några filer för att frigöra utrymme."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Klockans lagringsutrymme är fullt. Ta bort några filer för att frigöra utrymme."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Mobilens lagringsutrymme är fullt. Ta bort några filer för att frigöra utrymme."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Nätverket kan vara övervakat"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Av en okänd tredje part"</string>
@@ -147,12 +175,13 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Ringsignal på"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Avslutar…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Din surfplatta stängs av."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Klockan stängs av."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Din telefon stängs av."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Vill du stänga av?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Starta om i felsäkert läge"</string>
     <string name="reboot_safemode_confirm" msgid="55293944502784668">"Vill du starta om datorn i felsäkert läge? Då inaktiveras alla appar från tredje part som du har installerat. Apparna återställs när du startar om datorn igen."</string>
     <string name="recent_tasks_title" msgid="3691764623638127888">"Senaste"</string>
-    <string name="no_recent_tasks" msgid="8794906658732193473">"Inga nya appar."</string>
+    <string name="no_recent_tasks" msgid="8794906658732193473">"Inga aktiva appar."</string>
     <string name="global_actions" product="tablet" msgid="408477140088053665">"Alternativ för surfplattan"</string>
     <string name="global_actions" product="default" msgid="2406416831541615258">"Telefonalternativ"</string>
     <string name="global_action_lock" msgid="2844945191792119712">"Skärmlås"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Flygplansläge"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Flygplansläge är AKTIVERAT"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Flygplansläge är INAKTIVERAT"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Inställningar"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Säkert läge"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android-system"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"avinstallera genvägar"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Tillåter att appen tar bort genvägar på startskärmen utan åtgärd från användaren."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"omdirigera utgående samtal"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Tillåter att appen hanterar utgående samtal och ändrar numret som ska ringas upp. Med den här behörigheten kan appen övervaka, omdirigera eller förhindra utgående samtal."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Tillåter att appen ser numret du slår under ett utgående samtal och har möjlighet att koppla samtalet till ett annat nummer eller avbryta samtalet helt."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"ta emot textmeddelanden (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Tillåter att appen tar emot och hanterar SMS. Detta innebär att appen kan övervaka eller ta bort meddelanden som skickats till enheten utan att visa dem för dig."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"ta emot textmeddelanden (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Tillåter att appen hämtar innehållet i det aktiva fönstret. Skadliga appar kan hämta allt innehåll i fönstret och läsa all text utom lösenord."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"aktivera tillgänglighetsläget tillfälligt"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Tillåt att en app tillfälligt aktiverar tillgänglighetsläget på enheten. Skadliga appar kan aktivera tillgänglighetsläget utan användarens medgivande."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"hämta information om fönster"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Tillåter att appen hämtar information om fönstren från fönsterhanteraren. Skadliga appar kan hämta information som är avsedd för användning i det interna systemet."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"hämta fönstrets token"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Appen tillåts hämta fönstrets token. Skadliga appar kan interagera med appens fönster på ett otillåtet sätt och efterlikna systemet."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"hämta ramstatistik"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Appen tillåts samla in ramstatistik. Skadliga appar kan registrera statistik om ramar i andra appars fönster."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"filtrera händelser"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Tillåter att appen registrerar indatafilter som filtrerar flödet med användarhändelser innan de skickas. Skadliga appar kan styra systemets användargränssnitt utan att användaren gör något."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"förstora skärmen"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Tillåter att en app förstorar innehållet på en skärm. Skadliga appar kan förvandla skärminnehållet på ett sätt som gör att enheten blir oanvändbar."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"avsluta delvis"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Sätter aktivitetshanteraren i avstängningsläge. Utför inte en fullständig avstängning."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"förhindrar programbyten"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Tillåter att appen sänder ut en avisering när SMS tas emot. Skadliga appar kan använda detta för att förfalska inkommande SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"skicka WAP-PUSH-mottagen sändning"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Tillåter att appen skickar ett meddelande om att ett WAP PUSH-meddelande har tagits emot. Skadliga appar kan använda detta för att förfalska mottagning av MMS eller för att obemärkt byta ut innehållet på en webbsida mot skadligt innehåll."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"skicka betyg som nätverk skickar"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Tillåter att appen skickar ett meddelande om att nätverket måste betygsättas. Ska inte behövas för vanliga appar."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"begränsa antalet processer som körs"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Tillåter att appen styr högsta antalet processer som körs. Behövs inte för vanliga appar."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"tvinga bakgrundsappar att avslutas"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en VPN-tjänst. Ska inte behövas för vanliga appar."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"binda till en bakgrund"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Innehavaren kan binda till den översta nivåns gränssnitt för en bakgrund. Ska inte behövas för vanliga appar."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bind till en röstkomponent"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en rösttjänst. Ska inte behövas för vanliga appar."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bind till en fjärrskärm"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en fjärrskärm. Ska inte behövas för vanliga appar."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bind till en widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en widget. Ska inte behövas för vanliga appar."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"bind till en ruttleverantörstjänst"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Tillåter att innehavaren binds till en registrerad ruttleverantör. Detta ska inte behövas för vanliga appar."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"arbeta med en enhetsadministratör"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Tillåter att innehavaren skickar avsikter till en enhetsadministratör. Vanliga appar behöver aldrig göra detta."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"binda till en tv-insignal"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en tv-insignal. Ska inte behövas för vanliga appar."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"lägga till eller ta bort en enhetsadministratör"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Innehavaren får lägga till eller ta bort aktiva enhetsadministratörer. Detta ska normalt inte behövas för vanliga appar."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"ändra bildskärmens rikting"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Tillåter att appen använder installerade medieavkodare för att avkoda media för uppspelning."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"hantera betrodda uppgifter"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Tillåter att appen installerar och avinstallerar CA-certifikat som betrodda uppgifter."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"kör appen när enheten är inaktiv"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Med den här behörigheten tillåts Android-systemet att köra appen i bakgrunden när enheten inte används."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"läsa/skriva till resurser som ägs av diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Tillåter att appen läser och skriver till en resurs som ägs av diag-gruppen, till exempel filer i /dev. Detta kan eventuellt påverka systemets stabilitet och säkerhet. Detta bör ENDAST användas av tillverkaren eller operatören för maskinvaruspecifik diagnostik."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"aktivera eller inaktivera appkomponenter"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Tillåter att appen läser personliga profiluppgifter som sparats på din enhet, t.ex. ditt namn och kontaktuppgifter. Det innebär att appen kan identifiera dig och skicka profiluppgifter till andra."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"ändra ditt eget kontaktkort"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Tillåter att appen ändrar eller lägger till personliga profiluppgifter som sparats på din enhet, till exempel ditt namn och dina kontaktuppgifter. Det innebär att appen kan identifiera dig och skicka profiluppgifter till andra."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"kroppssens. (för hjärtat m.m.)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Tillåter att appen får åtkomst till data från sensorer som används för att mäta vad som sker inuti kroppen, till exempel hjärtfrekvens."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"läs mitt sociala flöde"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Tillåter att appen kommer åt och synkroniserar sociala uppdateringar från dig och dina vänner. Var försiktig när du delar information – med den här behörigheten tillåts appen att läsa kommunikation mellan dig och dina vänner på sociala nätverk oavsett sekretessnivå. Observera att den här behörigheten kanske inte är tillämplig på alla sociala nätverk."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"skriv till mitt sociala flöde"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Tillåter att appen använder lågnivåfunktioner i SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"läsa rambuffert"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Tillåter att appen läser innehållet i rambufferten."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"få tillgång till InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Tillåter att appen använder lågnivåfunktioner i InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"konfigurerar Wi-Fi-skärmar"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Tillåter att appen konfigurerar och ansluter till Wi-Fi-skärmar."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kontrollerar Wi-Fi-skärmar"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Tillåter att appen ändrar globala ljudinställningar som volym och vilken högtalarutgång som används."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"spela in ljud"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Tillåter att appen spelar in ljud med mikrofonen. Med den här behörigheten tillåts appen att spela in ljud när som helst utan ditt godkännande."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM-kommunikation"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Tillåter att appen skickar kommandon till SIM-kortet. Detta är mycket farligt."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ta bilder och spela in videoklipp"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Tillåter att appen tar bilder och spelar in videor med kameran. Med den här behörigheten tillåts appen att använda kameran när som helst utan ditt godkännande."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"inaktivera LED-sändningsindikator när kameran används"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Tillåter att appen styr enhetens telefonfunktioner. En app med den här behörigheten kan byta nätverk, aktivera/inaktivera mobilens radio och liknande utan att meddela dig."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"läsa telefonens status och identitet"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Tillåter att appen kommer åt enhetens telefonfunktioner. Med den här behörigheten tillåts appen att identifiera mobilens telefonnummer och enhets-ID, om ett samtal pågår och vilket nummer samtalet är kopplat till."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"läsa mobilens exakta status"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Tillåter att appen får tillgång till mobilens exakta status. Appen får behörighet att avgöra mobilens faktiska samtalsstatus, om samtalet är aktivt eller i bakgrunden, om samtal misslyckas, mobilens exakta dataanslutningsstatus och om dataanslutningar misslyckas."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"förhindra att surfplattan går in i viloläge"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"förhindra att telefonen sätts i viloläge"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Tillåter att appen förhindrar att surfplattan går in i viloläge."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"ändra WiMAX-status"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Tillåter att appen ansluter surfplattan till eller kopplar från WiMAX-nätverk."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Tillåter att appen ansluter mobilen till eller kopplar från WiMAX-nätverk."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"betygsätt nätverk"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Tillåter att appen betygsätter nätverk och påverkar vilka nätverk som ska användas i första hand av surfplattan."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Tillåter att appen betygsätter nätverk och påverkar vilka nätverk som ska användas i första hand av mobilen."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"koppla till Bluetooth-enheter"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Tillåter att appen kommer åt pekdatorns Bluetooth-konfiguration och upprättar och godkänner anslutningar till parkopplade enheter."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Tillåter att appen kommer åt mobilens Bluetooth-konfiguration och upprättar och godkänner anslutningar till parkopplade enheter."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Tillåter att appen hämtar, granskar och raderar meddelanden, även sådana som skickats av andra appar."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"binda till en meddelandelyssnare"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en meddelandelyssnare. Ska inte behövas för vanliga appar."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bind till en leverantörstjänst"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Innehavaren tillåts att binda till den översta nivåns gränssnitt för en leverantörstjänst. Ska inte behövas för vanliga appar."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"anropa konfigurationsappen från operatören"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Innehavaren tillåts att anropa konfigurationsappen från operatören. Ska inte behövas för vanliga appar."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"lyssna efter information om nätverksförhållanden"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Tillåter att appen lyssnar efter information om nätverksförhållanden. Vanliga appar bör aldrig behöva den här behörigheten."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"ändra kalibreringen för inmatningsenheten"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Tillåter att appen ändrar kalibreringsparametrarna för pekskärmen. Detta behövs aldrig för vanliga appar."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"tillgång till DRM-certifikat"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Tillåter att en app tillhandahåller och använder DRM-certifikat. Behövs inte för vanliga appar."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Ange lösenordsregler"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Bestäm hur många och vilka tecken som är tillåtna i skärmlåsets lösenord."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Övervaka försök att låsa upp skärmen"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Hem"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Arbete"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Övrigt"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Ingen app för att visa den här kontakten hittades."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ange PIN-kod"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ange PUK-koden och en ny PIN-kod"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kod"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Tillåter att en app får åtkomst till säkert keyguard-lagringsutrymme."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Kontrollera hur knapplåset visas och döljs"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Tillåter att en app kontrollerar knapplåsfunktionen."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Lyssna efter ändringar i betrodda agenters status."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Tillåter att en app lyssnar efter ändringar i den betrodda agentens status."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bind till en tjänst från en betrodd agent"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Tillåter att en app binds vid en tjänst från en betrodd agent."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Interagera med uppdaterings- och återställningssystemet"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Tillåter att en app interagerar med systemuppdateringar och återställningssystemet."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Tryck två gånger för zoomkontroll"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Det gick inte att lägga till widgeten."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Kör"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Bakgrund"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Ändra bakgrund"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Meddelandelyssnare"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Leverantör"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN är aktiverat"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN aktiveras av <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Tryck om du vill hantera nätverket."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Skift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Retur"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Välj en app"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Det gick inte att starta <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Dela med"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Dela med <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Skärmlåsfunktion. Tryck och dra."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Dra uppåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Dra nedåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Dra åt vänster för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Dra åt höger för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Lås upp"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Tyst"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Ljud på"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Sök"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Lås upp genom att dra."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Anslut mikrofonlurar om du vill att lösenordet ska läsas upp."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punkt."</string>
@@ -1451,7 +1510,7 @@
     <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"Gränsen för data via Wi-Fi har överskridits"</string>
     <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> över angiven gräns."</string>
     <string name="data_usage_restricted_title" msgid="5965157361036321914">"Bakgrundsdata är begränsade"</string>
-    <string name="data_usage_restricted_body" msgid="6741521330997452990">"Tryck för att radera begränsning"</string>
+    <string name="data_usage_restricted_body" msgid="6741521330997452990">"Tryck för att ta bort begränsning"</string>
     <string name="ssl_certificate" msgid="6510040486049237639">"Säkerhetscertifikat"</string>
     <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certifikatet är giltigt."</string>
     <string name="issued_to" msgid="454239480274921032">"Utfärdad till:"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth-ljud"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Trådlös skärm"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Klar"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medieuppspelning"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Anslut till enhet"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Överför skärmen till enheten"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Söker efter enheter ..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Inställningar"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Koppla från"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Skannar…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Ansluter ..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Tillgängliga"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Överlagring #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g> x <xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", säker"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Trådlös anslutning till skärm"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Den här skärmen visas på en annan enhet"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Överför skärmen"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Ansluter till <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Överför skärmen"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Ansluten till <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Koppla från"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Nödsamtal"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Har du glömt ditt grafiska lösenord?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser upp SIM-kort …"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Fel PIN-kod."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ange en PIN-kod med 4 till 8 siffror."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden ska vara minst åtta siffror."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-koden ska vara åtta siffror."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ange rätt PUK-kod igen. Om försöken upprepas inaktiveras SIM-kortet permanent."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koderna stämmer inte överens"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"För många försök med grafiskt lösenord"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Försök igen senare"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Dra nedåt om du vill avbryta fullskärmsläget."</string>
+    <string name="done_label" msgid="2093726099505892398">"Klart"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Cirkelreglage för timmar"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Cirkelreglage för minuter"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Välj timmar"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Välj minuter"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Rutnät för månad"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Lista över år"</string>
+    <string name="select_day" msgid="7774759604701773332">"Välj månad och dag"</string>
+    <string name="select_year" msgid="7952052866994196170">"Välj år"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> har markerats"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> har tagits bort"</string>
 </resources>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index b066758..558cae2 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Haina jina&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Andika PUK ambayo ina urefu wa nambari 8 au zaidi."</string>
     <string name="needPuk" msgid="919668385956251611">"Kadi yako ya SIM imefungwa na PUK. Anika msimbo wa PUK ili kuifungua."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Chapisha PUK2 ili kufungua SIM kadi."</string>
+    <string name="enablePin" msgid="209412020907207950">"Imeshindwa, washa ufungaji wa SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ya SIM kufungwa."</item>
+    <item quantity="other" msgid="7530597808358774740">"Umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ya SIM kufungwa."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Kitambulisho cha Mpigaji wa Simu Inayoingia"</string>
@@ -95,7 +122,7 @@
     <string name="roamingText4" msgid="8808456682550796530">"Nje ya Jengo"</string>
     <string name="roamingText5" msgid="7604063252850354350">"Urandaji - Mfumo unaopendelewa"</string>
     <string name="roamingText6" msgid="2059440825782871513">"Uzururaji - Mfumo Unaopatikana"</string>
-    <string name="roamingText7" msgid="7112078724097233605">"Uzururaji - Mwenza wa Ushirikiamo"</string>
+    <string name="roamingText7" msgid="7112078724097233605">"Roaming - Alliance Partner"</string>
     <string name="roamingText8" msgid="5989569778604089291">"Uzururaji - Mwenzi wa Thamani"</string>
     <string name="roamingText9" msgid="7969296811355152491">"Uzururaji - Utendajikazi Kamili wa Huduma"</string>
     <string name="roamingText10" msgid="3992906999815316417">"Uzururaji - Utendajikazi Nusi wa Huduma"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sawazisha"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Ufutaji mwingi sana <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Hifadhi ya kompyuta kibao imejaa. Futa baadhi ya faili ili kupata nafasi."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Hifadhi ya saa imejaa. Futa baadhi ya faili ili uweze kupata nafasi."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Hifadhi ya simu imejaa. Futa baadhi ya faili ili uweze kupata nafasi."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Huenda mtandao unafuatiliwa"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Na mtu mwingine asiyejulikana"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Programu ya milio imewashwa"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Inafunga..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Kompyuta kibao yako itazima."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Saa yako itajizima."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Simu yako itazima."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Unataka kuzima?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Washa upya kwa hali salama"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Hali ya ndege"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Hali ya ndege IMEWASHWA"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Hali ya ndege IMEZIMWA"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Mipangilio"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Mtindo salama"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Mfumo wa Android"</string>
@@ -246,12 +276,12 @@
     <string name="permdesc_statusBarService" msgid="716113660795976060">"Inaruhusu programu kuwa upau wa hali."</string>
     <string name="permlab_expandStatusBar" msgid="1148198785937489264">"panua/kunja mwambaa hali"</string>
     <string name="permdesc_expandStatusBar" msgid="6917549437129401132">"Inaruhusu programu kupanua au kukunja upau wa hali."</string>
-    <string name="permlab_install_shortcut" msgid="4279070216371564234">"sakinisha njia za mkato"</string>
+    <string name="permlab_install_shortcut" msgid="4279070216371564234">"kuweka njia za mkato"</string>
     <string name="permdesc_install_shortcut" msgid="8341295916286736996">"Huruhusu programu kuongeza njia za mkato za Skrini ya kwanza bila mtumiaji kuingilia."</string>
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"ondoa njia za mikato"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Huruhusu programu kuondoa njia za mkato za Skrini ya kwanza bila mtumiaji kuingilia."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"panga upya simu zinazotoka"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Inaruhusu programu kuchakata simu zinazotoka nje na kubadilisha nambari ya kupigwa. Idhini hii inaruhusu programu kuchunguza, kuelekeza upya, au kuzuia simu zinazotoka nje."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Huruhusu programu kuona nambari inayopigwa wakati simu inapigwa ikiwa na chaguo la kuelekeza simu kwenye nambari tofauti au kukata simu kabisa."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"pokea ujumbe wa maandishi wa SMS"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Inaruhusu programu kupokea na kuchakata ujumbe wa SMS. Hii inamaanisha programu hii inaweza kuchunguza na kufuta ujumbe uliotumwa katika kifaa chako bila ya kukuonyesha."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"pokea ujumbe wa maandishi wa MMS"</string>
@@ -274,7 +304,7 @@
     <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Inaruhusu programu kupokea na kuchakata ujumbe wa WAP. Idhini hii inajumuisha uwezo wa kuchunguza na kufuta ujumbe uliotumwa kwako bila ya kukuonyesha."</string>
     <string name="permlab_getTasks" msgid="6466095396623933906">"rudisha programu zinazoendeshwa"</string>
     <string name="permdesc_getTasks" msgid="7454215995847658102">"Inaruhusu programu kurudisha taarifa kuhusu kazi zinazoendeshwa sasa na hivi karibuni. Hii inaweza kuruhusu programu kugundua taarifa kuhusu ni programu zipi zinazotumika kwenye kifaa."</string>
-    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"Tagusana na watumiaji"</string>
+    <string name="permlab_interactAcrossUsers" msgid="7114255281944211682">"kuwasiliana na watumiaji wengine"</string>
     <string name="permdesc_interactAcrossUsers" msgid="364670963623385786">"Inaruhusu programu kutenda vitendo kwa watumiaji tofauti kwenye kifaa. Programu hasidi huenda zikatumia hii ili kukiuka ulinzi kati ya watumiaji."</string>
     <string name="permlab_interactAcrossUsersFull" msgid="2567734285545074105">"leseni kamili ili kushirikiana na watumiaji"</string>
     <string name="permdesc_interactAcrossUsersFull" msgid="376841368395502366">"Inaruhusu miingialiano yote inayowezekana kwa watumiaji."</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Inaruhusu programu kutoa maudhui ya dirisha amilifu. Programu hasidi zinaweza kutoa maudhui yote ya dirisha na kuchunguza maandishi yake yote isipokuwa nenosiri."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"wezesha ufikivu kwa muda"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Inaruhusu programu kuwezesha kwa muda ufikivu kwenye kifaa. Huenda programu hasidi zikawezesha ufikivu bila kibali cha mtumiaji."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"okoa maelezo ya dirisha"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Huruhusu programu kuokoa maelezo kuhusu madirisha kutoka kwenye kidhibiti dirisha. Huenda programu hasidi ikakusanya maelezo ambayo yamekusudiwa kwa matumizi ya mfumo wa ndani."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"rejesha tokeni ya dirisha"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Inaruhusu programu kurejesha tokeni ya dirisha. Programu hasidi zinaweza kutekeleza mwingiliano usioidhinishwa na dirisha la programu zikiiga mfumo."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"rejesha takwimu za fremu"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Inaruhusu programu kukusanya takwimu za fremu. Programu hasidi zinaweza kuchunguza takwimu za fremu za dirisha kutoka kwenye programu zingine."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"chuja matukio"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Huruhusu programu kusajili kichujio ingizo kinachochuja mkondo wa matukio ya mtumiaji kabla ya kutumwa. Huenda programu hasidi ikadhibiti mfumo wa UI bila mtumiaji kuingilia kati."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"kuza oneysho"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Inaruhusu programu kukuza maudhui ya onyesho. Programu hasidi zinaweza kubadili maudhui kwa njia ambayo inaweza kukifanya kifaa kutotumika."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"Zima nusu"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Huweka kisimamia shughuli katika hali ya kuzima. Haiadhiri uzimaji kamili"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"zuia swichi za app"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Huruhusu programu kutangaza taarifa kwamba ujumbe wa SMS umeingia. Programu hasidi zinaweza kutumia hii kubuni SMS zinazoingia."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"tuma tangazo lililopokewa la MSUKUMO WA WAP"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Inaruhusu programu kutangaza taarifa kwamba ujumbe wa WAP PUSH umepokewa. Programu hasidi zinaweza kutumia hii kubuni risiti ya ujumbe wa MMS au polepole kubadilisha maudhui yoyote ya ukurasa wa tovuti na vibadala vibovu."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"tuma tangazo la alama za mitandao"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Huruhusu programu kutangaza arifa kuwa mitandao inafaa kupewa alama. Haihitajiki kamwe kwa programu za kawaida."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"zuia idadi ya michakato inayoendeshwa"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Inaruhusu programu kudhibiti upeo wa idadi ya michakato ambayo itaendeshwa. Kamwe hazihitajiki kwa programu za kwaida."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"lazimisha programu za usuli kufunga"</string>
@@ -343,9 +375,9 @@
     <string name="permlab_updateAppOpsStats" msgid="8829097373851521505">"rekebisha takwimu za oparesheni ya programu"</string>
     <string name="permdesc_updateAppOpsStats" msgid="50784596594403483">"Inaruhusu programu kurekebisha takwimu za matumizi ya programu zilizokusanywa. Si ya kutumiwa na programu za kawaida."</string>
     <string name="permlab_backup" msgid="470013022865453920">"Dhibiti kuhifadhi nakala na kurejesha kwa mfumo"</string>
-    <string name="permdesc_backup" msgid="6912230525140589891">"Inaruhusu programu kudhibiti utaratibu wa kucheleza na kurejesha wa mfumo. Si kwa matumizi na programu za kawaida."</string>
+    <string name="permdesc_backup" msgid="6912230525140589891">"Huruhusu programu kudhibiti utaratibu wa kuhifadhi nakala rudufu na kurejesha mfumo. Haifai kutumiwa na programu za kawaida."</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"thibitisha chelezo kamilifu au rejesha upya uendeshaji"</string>
-    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Inaruhusu programu kuzindua UI ya kuthibitisha chelezo kamili. Si ya kutumiwa na programu yoyote."</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Huruhusu programu kuzindua kiolesura cha kuthibitisha kuhifadhiwa kwa nakala rudufu kamili. Haitumiwi na programu yoyote."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"onyesha madirisha yasiyoidhinishwa"</string>
     <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Huruhusu programu kuunda madirisha ambayo yananuiwa kutumiwa na kusano ya mtumiaji ya mfumo wa ndani. Sio ya matumizi na programu za kawaida."</string>
     <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"chora juu ya programu zingine"</string>
@@ -354,8 +386,8 @@
     <string name="permdesc_setAnimationScale" msgid="7690063428924343571">"Huruhusu programu kubadilisha kasi ya uhuishaji kijumla (uhuisho wa haraka zaidi au wa polepole zaidi) wakati wowote."</string>
     <string name="permlab_manageAppTokens" msgid="1286505717050121370">"Dhibiti shuhuda za programu"</string>
     <string name="permdesc_manageAppTokens" msgid="8043431713014395671">"Inaruhusu programu kuunda na kudhibiti shuhuda zake, kukwepa mipangilio yao ya kawaida. Haitahitajika kamwe na programu za kawaida."</string>
-    <string name="permlab_freezeScreen" msgid="4708181184441880175">"lemaza skrini"</string>
-    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Inaruhusu programu kulemaza kwa muda skrini kwa ajili ya mpito kamili wa skrinimaombi kwa muda kufungia screen kwa ajili ya mpito full-screen."</string>
+    <string name="permlab_freezeScreen" msgid="4708181184441880175">"fanya skrini isisonge"</string>
+    <string name="permdesc_freezeScreen" msgid="8558923789222670064">"Huruhusu programu kufanya skrini isisonge kwa muda ili kuruhusu kubadilisha hadi skrini nzima."</string>
     <string name="permlab_injectEvents" msgid="1378746584023586600">"bonyeza vitufe na vitufe vya kudhibiti"</string>
     <string name="permdesc_injectEvents" product="tablet" msgid="206352565599968632">"Huruhusu programu kuwasilisha matukio yake ya ingizo (mibonyezo ya vitufe, nk.) kwa programu zingine. programu hasidi zinaweza kutumia hii ili kutawala kompyuta kibao."</string>
     <string name="permdesc_injectEvents" product="default" msgid="653128057572326253">"Inaruhusu programu kuwasilisha matukio yake ya ingizo (mibonyezo ya kitufe, nk.)kwa programu zingine.Programu hasidi zinaweza kutumia hii kutawala simu."</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Inaruhusu kishikiliaji kushurutisha kusano ya kiwango cha juu cha huduma ya Vpn. Haipaswi kuhitajika kwa programu za kawaida."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"funga kwa mandhari"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Inaruhusu kishikiliaji kushurutisha kwa kusano ya kiwango cha juu cha mandhari. Haipaswi kamwe kuhitajika kwa programu za kawaida."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"shurutisha kwa muingiliano wa sauti"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Humruhusu mmiliki kushurutisha kwa kiolesura cha hali ya juu cha huduma ya muingiliano wa sauti. Kamwe isihitajike kwa programu za kawaida."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"fungisha kwenye mwonekano wa mbali"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Huruhusu mtumiaji kujifungia kiolesura cha kiwango cha juu cha mwonekano wa mbali. Haipaswi kuhitajika kwa programu za kawaida."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"funga kwenye huduma ya widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Inaruhusu mmiliki kushurutisha kusano ya kiwango cha juu ya huduma ya wijeti. Haipaswi kuhitajika kwa programu za kawaida."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"bandika kwenye huduma ya mtoa huduma za njia"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Huruhusu mmiliki kubandika kwenye watoa huduma za njia waliosajiliwa. Haipaswi kuhitajika kwa programu za kawaida."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"jiunge na msimamizi wa kifaa"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Inamruhusu mmiliki kutuma malengo kwa msimamizi wa kifaa. Haipaswi kuhitajika kwa programu za kawaida."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"bandika kwenye zana za data ya runinga"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Inaruhusu kishikiliaji kubandika kwenye kusano la kiwango cha juu cha zana za data kwenye runinga. Haipaswi kuhitajika kwa programu za kawaida."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"ongeza au ondoa msimamizi wa kifaa"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Inaruhusu mmiliki kuongeza au kuondoa wasimamizi wa kifaa waliopo. Kamwe kisihitajike kwa ajili ya programu za kawaida."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"badilisha uelekezo wa skrini"</string>
@@ -398,15 +438,15 @@
     <string name="permdesc_deletePackages" msgid="7411480275167205081">"Inaruhusu programu kufuta furushi za Android. Programu hasidi zinaweza kutumia hii kufuta programu muhimu."</string>
     <string name="permlab_clearAppUserData" msgid="274109191845842756">"Futa data za programu zingine"</string>
     <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"Inaruhusu programu kufuta data ya mtumiaji."</string>
-    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"Futa kache za programu zingine"</string>
-    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Inaruhusu programu kufuta faili za kache."</string>
+    <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"Kufuta akiba za programu zingine"</string>
+    <string name="permdesc_deleteCacheFiles" msgid="3812998599006730196">"Huruhusu programu kufuta faili za akiba."</string>
     <string name="permlab_getPackageSize" msgid="7472921768357981986">"Pima nafasi ya hifadhi ya programu"</string>
-    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Inaruhusu Programu kupata tena msimbo, data na ukubwa wa kache yake."</string>
+    <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Huruhusu Programu kupata tena msimbo, data na ukubwa wa akiba yake"</string>
     <string name="permlab_installPackages" msgid="2199128482820306924">"sakinisha programu moja kwa moja"</string>
     <string name="permdesc_installPackages" msgid="5628530972548071284">"Inaruhusu programu kusakanisha au kusasisha furushi mpya za Android. Programu hasidi zinaweza kutumia hii kuongeza programu mpya ambazo zina ruhusa zenye nguvu."</string>
-    <string name="permlab_clearAppCache" msgid="7487279391723526815">"Futa data yote kwenye kache ya programu"</string>
-    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Inaruhusu programu kutoa nafasi ya hifadhi ya kompyuta ndogo kwa kufuta faili katika saraka za kache za programu nyingine. Huenda hii ikasababisha programu nyingine kuanza polepole zaidi kwa sababu zinahitaji kuepua data zazo."</string>
-    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Inaruhusu programu kutoa nafasi ya hifadhi ya simu kwa kufuta faili katika saraka za kache za programu nyingine. Huenda hii ikasababisha programu nyingine kuanza polepole zaidi kwa sababu zinahitaji kuepua data zazo."</string>
+    <string name="permlab_clearAppCache" msgid="7487279391723526815">"kufuta data yote kwenye akiba ya programu"</string>
+    <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"Huruhusu programu kuongeza nafasi katika hifadhi ya kompyuta kibao kwa kufuta faili katika saraka za akiba za programu zingine. Huenda hii ikafanya baadhi ya programu zianze kufanya kazi polepole kwa sababu zinahitaji kupakua tena data iliyokuwemo."</string>
+    <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"Huruhusu programu kuongeza nafasi ya hifadhi ya simu kwa kufuta faili katika saraka za akiba za programu zingine. Huenda hii ikafanya baadhi ya programu zianze kufanya kazi polepole kwa sababu zinahitaji kupakua tena data iliyokuwemo."</string>
     <string name="permlab_movePackage" msgid="3289890271645921411">"songesha rasilimali ya programu"</string>
     <string name="permdesc_movePackage" msgid="319562217778244524">"Huruhusu programu kuhamisha nyenzo za programu kutoka midia ya ndani hadi ya nje na kinyume chake."</string>
     <string name="permlab_readLogs" msgid="6615778543198967614">"soma kumbukumbu ya data muhimu"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Huruhusu programu kutumia vyombo vyovyote vya habari vilivyosakinishwa ili kusimbua kwa ajili ya kucheza tena."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"dhibiti vitambulisho vinavyoaminika"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Huruhusu programu kusakinisha na kusanidua vyeti vya CA kama vitambulisho vinavyoaminika."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"endesha programu wakati kifaa hakifanyi kitu"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Ruhusa hii huwezesha mfumo wa Android kuendesha programu chini kwa chini wakati kifaa hakitumiki."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"soma/andika kwa vyanzo vinavyomilikiwa na diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Inaruhusu programu kusoma na kuandika kwa chanzo chochote kinachomilikiwa na kikundi cha diag; kwa mfano, faili katika /dev. Hii inaweza kuathiri udhabiti na usalama wa mfumo. Hii inapaswa kutumiwa TU kwa utambuzi mahsusi wa maunzi na mtengenezaji au opareta."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"wezesha au lemeza vijenzi vya programu"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Inaruhusu programu kusoma taarifa ya kibinafsi ya maelezo mafupi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na taarifa ya anwani. Hii inamaanisha kuwa programu inaweza kukutambua na inaweza kuwatumia wengine taarifa yako ya maelezo mafupi."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"rekebisha kadi yako mwenyewe ya mawasiliano"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Inaruhusu programu kubadilisha au kuongeza taarifa ya maelezo mafupi ya kibinafsi yaliyohifadhiwa kwenye kifaa chako, kama vile jina lako na taarifa ya anwani. Hii inamaanisha kuwa programu inaweza kukutambua na inaweza kutuma taarifa ya maelezo yako mafupi kwa wengine."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"vipima hali ya mwili (kama mpigo wa moyo)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Huruhusu programu kufikia data kutoka kwenye vipima mawimbi unavyotumia kupima kinachoendelea mwilini mwako kama vile mpigo wa moyo."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"soma mipasho yako wa kijamii"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Huruhusu programu kufikia na kupatanisha masasisho ya kijamii kutoka kwa marafiki zako. Kuwa makini wakati unashiriki taarifa -- hii huruhusu programu kusoma mawasiliano kati yako na marafiki zako kwenye mitandao jamii, bila kujali usiri. Kumbuka: idhini hii haiwezi kutekelezwa kwenye mitandao yote ya jamii."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"kuandikia mipasho yako wa kijamii"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Inaruhusu programu kutumia vipengee vya kiwango cha chini vya SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"soma bafa ya fremu"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Inaruhusu programu kusoma maudhui ya fremu ya bafa."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"fikia InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Inaruhusu programu kutumia vipengele vya chini vya InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"sanidi maonyesho ya Wifi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Inaruhusu programu kusanidi na kuunganika kwenye maonyesho ya Wifi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"dhibiti maonyesho ya Wifi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Inaruhusu programu kurekebisha mipangilio ya sauti kila mahali kama vile sauti na ni kipaza sauti kipi ambacho kinatumika kwa kutoa."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"kurekodi sauti"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Inaruhusu programu kurekodi sauti kwa kinasa sauti. Idhini hii inaruhusu programu kurekodi sauti wakati wowote bila ya uthibitisho wako."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"mawasiliano ya sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Huruhusu programu kutuma amri kwa SIM. Hii ni hatari sana."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"Kupiga picha na kurekodi video"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Inaruhusu programu kupiga picha na video kwa kamera. Kibali hiki kinaruhusu programu kutumia kamera kwa wakati wowote bila uthibitisho wako."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"zima LED ya kisambaza kiashirio wakati kamera inatumika"</string>
@@ -523,7 +571,7 @@
     <string name="permdesc_asec_mount_unmount" msgid="3451360114902490929">"Inaruhusu programu kupachika/kupachua hifadhi ya ndani."</string>
     <string name="permlab_asec_rename" msgid="7496633954080472417">"ipe hifadhi ya ndani jina jipya"</string>
     <string name="permdesc_asec_rename" msgid="1794757588472127675">"Inaruhusu programu kubadilisha jina la hifadhi ya ndani."</string>
-    <string name="permlab_vibrate" msgid="7696427026057705834">"dhibiti mtetemo"</string>
+    <string name="permlab_vibrate" msgid="7696427026057705834">"Kudhibiti mtetemo"</string>
     <string name="permdesc_vibrate" msgid="6284989245902300945">"Inaruhusu programu kudhibiti kitingishi."</string>
     <string name="permlab_flashlight" msgid="2155920810121984215">"dhibiti tochi"</string>
     <string name="permdesc_flashlight" msgid="6522284794568368310">"Inaruhusu programu kudhibiti tochi."</string>
@@ -549,9 +597,11 @@
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"badiliisha hali ya simu"</string>
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Inaruhusu programu kudhibiti vipengee vya kifaa. Programu iliyo na ruhusa hii inaweza badilisha mtandao, kuzima na kuwasha redio ya simu bila hata kukujulisha."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"kusoma hali na kitambulisho cha simu"</string>
-    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Inaruhusu programu kufikia vipengele vya simu vya kifaa. Idhini hii inaruhusu programu kutambua nambari ya simu na kifaa, kama simu ni amilifu, na nambari ya mbali iliyounganishwa kwa simu."</string>
+    <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Huruhusu programu kufikia vipengele vya simu vilivyo kwenye kifaa. Idhini hii inaruhusu programu kutambua nambari ya simu na kifaa, kama kuna simu inayopigwa, na nambari ya mbali iliyounganishwa kwenye simu."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"Soma hali sahihi ya simu"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Huruhusu programu kufikia hali sahihi ya simu. Ruhusa hii huwezesha programu kufahamu hali sahihi ya simu, iwapo simu inatumika au iko katika hali ya chini kwa chini, simu inaposhindikana, hali sahihi ya muunganisho wa data na muunganisho wa data unaposhindikana."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"zuia kompyuta ndogo dhidi ya kulala"</string>
-    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"zuia simu dhidi ya kulala"</string>
+    <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"kuzuia simu isilale"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Inaruhusu programu kuzuia kompyuta kibao  kwenda kulala."</string>
     <string name="permdesc_wakeLock" product="default" msgid="8559100677372928754">"Inaruhusu programu kuzuia simu isiende kulala."</string>
     <string name="permlab_transmitIr" msgid="7545858504238530105">"sambaza infrared"</string>
@@ -587,19 +637,19 @@
     <string name="permdesc_manageAccounts" msgid="8698295625488292506">"Inaruhusu programu kutekeleza shughuli kama vile kuongeza na kutoa akaunti, na kufuta manenosiri yazo."</string>
     <string name="permlab_useCredentials" msgid="235481396163877642">"kutumia akaunti zilizo kwenye kifaa"</string>
     <string name="permdesc_useCredentials" msgid="7984227147403346422">"Inaruhusu programu kuomba shuhuda za uthibitisho."</string>
-    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"Kuangalia mitandao"</string>
+    <string name="permlab_accessNetworkState" msgid="4951027964348974773">"kuona mitandao"</string>
     <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Inaruhusu programu kuona taarifa kuhusu miunganisho ya mtandao kama vile mitandao ipi iliyopo na imeunganishwa."</string>
     <string name="permlab_createNetworkSockets" msgid="8018758136404323658">"ufikiaji kamili wa mtandao"</string>
     <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Inaruhusu programu kuunda soketi za mtandao na kutumia itifaki za mtandao maalum. Kivinajri na programu nyingine zilizotolewa zinamaanisha kutuma data kwenye mtandao, kwa hivyo kibali hiki hakihitajiki kutuma data kwenye mtandao."</string>
     <string name="permlab_writeApnSettings" msgid="505660159675751896">"mabadiliko / kuingilia mipangilio ya mtandao/msonmgamano"</string>
     <string name="permdesc_writeApnSettings" msgid="5333798886412714193">"Inaruhusu programu kubadilisha mipangilio ya mtandao na kukatiza na kukagua uendaji wa mtandao, kwa mfano kubadilisha kituo tarishi na mbadala cha APN yoyote. Programu hasidi zinaweza kuangalia, kuelekeza kwingine, au kurekebisha furushi za mtandao bila ya wewe kujua."</string>
-    <string name="permlab_changeNetworkState" msgid="958884291454327309">"badilisha muunganisho wa mtandao"</string>
+    <string name="permlab_changeNetworkState" msgid="958884291454327309">"kubadilisha muunganisho wa mtandao"</string>
     <string name="permdesc_changeNetworkState" msgid="6789123912476416214">"Inaruhusu programu kubadilisha hali ya muunganisho wa mtandao."</string>
     <string name="permlab_changeTetherState" msgid="5952584964373017960">"Badilisha muunganisho uliofunganishwa"</string>
     <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Inaruhusu programu kubadilisha hali ya muunganisho wa mtandao uliofungwa."</string>
     <string name="permlab_changeBackgroundDataSetting" msgid="1400666012671648741">"badilisha mpangilio wa utumiaji data ya mandharinyuma"</string>
     <string name="permdesc_changeBackgroundDataSetting" msgid="5347729578468744379">"Inaruhusu programu kubadilisha mpangilio wa matumizi ya data ya usuli."</string>
-    <string name="permlab_accessWifiState" msgid="5202012949247040011">"ona miunganisho ya Wi-Fi"</string>
+    <string name="permlab_accessWifiState" msgid="5202012949247040011">"Kuona miunganisho ya Wi-Fi"</string>
     <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Inaruhusu programu kuona taarifa kuhusu mtandao wa Wi-Fi, kama vile ikiwa Wi-Fi imewezeshwa mna jina la vifaa vya Wi-Fi vilivyounganishwa."</string>
     <string name="permlab_changeWifiState" msgid="6550641188749128035">"unganisha na utenganishe kutoka kwa Wi-Fi"</string>
     <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Inaruhusu programu kuunganisha kwenye au kukata kutoka pointi za ufikivu wa Wi-Fi na kufanya mabadiliko kwenye usanidi wa kifaa cha mitandao ya Wi-Fi."</string>
@@ -617,28 +667,31 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Badilisha hali ya WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Inaruhusu programu kuunganisha kompyuta kibao,  na kukata kompyuta kibao kutoka mitandao ya WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Inaruhusu programu kuunganisha simu kwenye, na kukata simu kutoka mitandao ya WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ipe mitandao alama"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Huruhusu programu kupanga mitandao kwa alama na kushawishi mitandao ambayo kompyuta kibao inapaswa kupendelea."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Huruhusu programu kupanga mitandao kwa alama na kushawishi mitandao ambayo simu inapaswa kupendelea."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"oanisha na vifaa vya Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Inaruhusu programu kuona usanidi wa Bluetooth kwenye kompyuta kibao, na kuunda na kukubali miunganisho kwa vifaa vilivyooanishwa."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Inaruhusu programu kuona usanidi wa Bluetooth kwenye simu, na kuunda na kukubali miunganisho kwa vifaa vilivyooanishwa."</string>
-    <string name="permlab_nfc" msgid="4423351274757876953">"dhibiti Mawasiliano ya vifaa vilivyo Karibu"</string>
+    <string name="permlab_nfc" msgid="4423351274757876953">"kudhibiti Mawasiliano ya Vifaa Vilivyokaribu (NFC)"</string>
     <string name="permdesc_nfc" msgid="7120611819401789907">"Inaruhusu programu kuwasiliana na lebo, kadi na wasomaji wa Near Field Communication (NFC)."</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"zima kufuli la skrini yako"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"Inaruhusu programu kulemaza ufunguo wa vitufe na usalama mwingine ambata wa nenosiri. Kwa mfano, simu inalemaza ufunguo wa viitufe inapopokea simu inayoingia, kisha inawezesha upya ufunguo wa vitufe wakati simu inapokamilika."</string>
-    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"soma mipangilio ya usawazishaji"</string>
+    <string name="permlab_readSyncSettings" msgid="6201810008230503052">"kusoma mipangilio ya usawazishaji"</string>
     <string name="permdesc_readSyncSettings" msgid="2706745674569678644">"Inaruhusu programu kusoma mipangilio ya upatanishi wa akaunti. Kwa mfano, huku kunaweza kuamua kama programu ya Watu imepatanishwa na akaunti."</string>
-    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"washa na uzime usawazishaji"</string>
+    <string name="permlab_writeSyncSettings" msgid="5408694875793945314">"kuwasha na kuzima usawazishaji"</string>
     <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Inaruhusu programu kurekebisha mipangalio ya upatanishi wa akaunti. Kwa mfano, hii inaweza kuwezesha programu ya upatanishi wa Watu na akaunti."</string>
-    <string name="permlab_readSyncStats" msgid="7396577451360202448">"soma takwimu za usawazishaji"</string>
+    <string name="permlab_readSyncStats" msgid="7396577451360202448">"kusoma takwimu za usawazishaji"</string>
     <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Inaruhusu programu kusoma takwimu za upatanishi za akaunti, ikiwa ni pamoja na historia ya matukio ya upatanishi na kiasi cha data kimepatanishwa."</string>
-    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"soma milisho ya kujiunga"</string>
+    <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"kusoma mipasho kutoka vyanzo unavyofuatilia"</string>
     <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Inaruhusu programu kupata maelezo kuhusu mlisho iliyolandanishwa kwa sasa."</string>
-    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"andika milisho ya kujiunga"</string>
+    <string name="permlab_subscribedFeedsWrite" msgid="9015246325408209296">"kuandika mipasho kutoka vyanzo unavyofuatilia"</string>
     <string name="permdesc_subscribedFeedsWrite" msgid="6928930188826089413">"Inaruhusu programu kurekebisha milisho yako iliyolandanishwa kwa sasa. Programu hasidi zinaweza kubadilisha milisho yako iliyolandanishwa."</string>
     <string name="permlab_readDictionary" msgid="4107101525746035718">"soma maneno uliyoongeza kwenye kamusi"</string>
     <string name="permdesc_readDictionary" msgid="659614600338904243">"Inaruhusu programu kusoma maneno, majina na misemo yote ambayo mtumiaji alihifadhi katika kamusi ya mtumiaji."</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"ongeza maneno katika kamusi ya mtumiaji iliyofafanuliwa"</string>
     <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Inaruhusu programu kuandika maneno mapya katika kamusi ya mtumiaji."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"soma maudhui ya hifadhi yako ya USB"</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"kusoma maudhui yaliyo kwenye hifadhi yako ya USB"</string>
     <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"soma maudhui ya kadi yako ya SD"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Huruhusu programu kusoma maudhui ya hifadhi ya USB."</string>
     <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Huruhusu programu kusoma maudhui ya kadi yako ya SD."</string>
@@ -652,12 +705,12 @@
     <string name="permdesc_manageDocs" product="default" msgid="8704323176914121484">"Huruhusu programu kudhibiti hifadhi ya hati."</string>
     <string name="permlab_sdcardAccessAll" msgid="8150613823900460576">"Fikia hifadhi ya nje ya watumiaji wote"</string>
     <string name="permdesc_sdcardAccessAll" msgid="3215208357415891320">"Inaruhusu programu kufikia hifadhi ya nje kwa watumiaji wote."</string>
-    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"fikia faili za mfumo za kache"</string>
-    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Inaruhusu programu kusoma na kuandika mfumo wa faili wa kache."</string>
+    <string name="permlab_cache_filesystem" msgid="5656487264819669824">"fikia faili za mfumo za akiba"</string>
+    <string name="permdesc_cache_filesystem" msgid="5578967642265550955">"Huruhusu programu kusoma na kuandika mfumo wa faili wa akiba."</string>
     <string name="permlab_use_sip" msgid="5986952362795870502">"piga/pokea simu za mtandao"</string>
     <string name="permdesc_use_sip" msgid="4717632000062674294">"Inaruhusu programu kutumia huduma ya SIP kupiga/kupokea simu za mtandao."</string>
     <string name="permlab_bind_call_service" msgid="6724009726671246551">"tumikisha skrini ya simu inayoendelea"</string>
-    <string name="permdesc_bind_call_service" msgid="8732547662442572435">"Inaruhusu programu kudhibiti wakati na jinsi mtumiaji anaona skrini ya simu inayoendelea."</string>
+    <string name="permdesc_bind_call_service" msgid="8732547662442572435">"Huruhusu programu kudhibiti wakati na jinsi mtumiaji anaona skrini anapopigiwa simu."</string>
     <string name="permlab_readNetworkUsageHistory" msgid="7862593283611493232">"soma matumizi ya historia ya mtandao"</string>
     <string name="permdesc_readNetworkUsageHistory" msgid="7689060749819126472">"Inaruhusu programu kusoma historia ya matumizi ya mtandao kwa mitandao maalum na programu."</string>
     <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"dhibiti sera ya mtandao"</string>
@@ -670,32 +723,38 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Huruhusu programu kurejesha, kuchunguza, na kuondoa arifa, ikiwa ni pamoja na zile zilizochapishwa na programu nyingine."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"unganisha kwenye huduma ya kisikilizi cha arifa"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Inaruhusu kishikilizi kuunganishwa kwenye kusano cha kiwango cha juu cha huduma ya kisikilizi cha arifa. Haipaswi kuhitajika tena kwa programu za kawaida."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"shurutisha kwa huduma ya mtoa masharti"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Humruhusu mmiliki kushurutisha kwa kiolesura cha kiwango cha juu cha huduma ya mtoa masharti. Kamwe isihitajike kwa pogramu za kawaida."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"omba programu ya usakinishaji inayotolewa na mtoa huduma."</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Inaruhusu kishikiliaji kuomba programu ya usakinishaji inayotolewa na mto huduma. Haipaswi kuhitajika kwa programu za kawaida."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"sikiliza matukio katika hali za mtandao"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Huruhusu programu kusikiliza matukio katika hali za mtandao. Haipaswi kuhitajika kamwe kwa programu za kawaida."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"badilisha urekebishaji wa kifaa cha kuingiza data"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Huruhusu programu kubadilisha vigezo vya urekebishaji vya skrini ya kugusa. Havipaswi kuhitajika kamwe kwa programu za kawaida."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"fikia vyeti vya DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Huruhusu programu kwa utoaji na matumizi ya vyeti vya DRM. Havifahi kuhitajika kwa ajili ya programu za kawaida."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Kuweka kanuni za nenosiri"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kudhibiti urefu na herufi zinazoruhusiwa katika manenosiri ya kufungua skrini."</string>
-    <string name="policylab_watchLogin" msgid="914130646942199503">"Kuhesabu idadi ya mara ambazo skrini inajaribu kufunguliwa"</string>
-    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Fuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na ufunge kompyuta kibao au ufute data yote iliyomo kama manenosiri mengi yenye makosa yataingizwa."</string>
-    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Fuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na ufunge simu au ufute data yote iliyomo kama manenosiri mengi sana yasiyo sahihi yataingizwa."</string>
-    <string name="policylab_resetPassword" msgid="2620077191242688955">"Badilisha nenosiri la kufungua skrini"</string>
-    <string name="policydesc_resetPassword" msgid="605963962301904458">"Badilisha nenosiri la kufungua skrini."</string>
-    <string name="policylab_forceLock" msgid="2274085384704248431">"Funga skrini"</string>
-    <string name="policydesc_forceLock" msgid="1141797588403827138">"Dhibiti jinsi na wakati skrini inapofunga."</string>
+    <string name="policylab_watchLogin" msgid="914130646942199503">"Kuhesabu mara ambazo skrini inajaribu kufunguliwa"</string>
+    <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Kufuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na kufunga kompyuta kibao au kufuta data yote iliyomo kama manenosiri mengi yasiyo sahihi yataingizwa."</string>
+    <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Kufuatilia idadi ya manenosiri yasiyo sahihi yatakayoingizwa wakati wa kufungua skrini, na kufunga simu au kufuta data yote iliyomo kama manenosiri mengi sana yasiyo sahihi yataingizwa."</string>
+    <string name="policylab_resetPassword" msgid="2620077191242688955">"Kubadilisha nenosiri la kufungua skrini"</string>
+    <string name="policydesc_resetPassword" msgid="605963962301904458">"Kubadilisha nenosiri la kufungua skrini."</string>
+    <string name="policylab_forceLock" msgid="2274085384704248431">"Kufunga skrini"</string>
+    <string name="policydesc_forceLock" msgid="1141797588403827138">"Kudhibiti jinsi na wakati skrini inapofunga."</string>
     <string name="policylab_wipeData" msgid="3910545446758639713">"Kufuta data yote"</string>
     <string name="policydesc_wipeData" product="tablet" msgid="4306184096067756876">"Futa data ya kompyuta kibao bila ilani kwa kurejesha mipangilio ya mwanzo."</string>
     <string name="policydesc_wipeData" product="default" msgid="5096895604574188391">"Kufuta data ya simu bila ilani kwa kurejesha data ambayo kifaa kilitoka nayo kiwandani"</string>
-    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Weka mbadala wa kifaa cha ulimwengu"</string>
-    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Weka kifaa mbadala cha ulimwengu kitakachotumiwa wakati wa kuwezesha sera. Msimamizi wa kwanza wa kifaa pekee anaweka matekelezo mbadala ya ulimwengu."</string>
-    <string name="policylab_expirePassword" msgid="885279151847254056">"Weka muda wa kuisha wa nenosiri"</string>
-    <string name="policydesc_expirePassword" msgid="1729725226314691591">"Dhibiti ni mara ngapi nenosiri la kufunga skrini linafaa libadilishwe."</string>
-    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Weka msimbo fiche wa hifadhi"</string>
-    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Inahitaji kwamba data ya programu iliyohifadhiwa iwe na msimbo fiche."</string>
-    <string name="policylab_disableCamera" msgid="6395301023152297826">"Zima kamera"</string>
-    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Zuia matumizi yote ya kamera za kifaa."</string>
-    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Lemaza vipengele kwenye kilinzi cha kitufe."</string>
-    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Inazuia matumizi ya baadhi ya vipengele kwenye kilinzi cha kitufe."</string>
+    <string name="policylab_setGlobalProxy" msgid="2784828293747791446">"Weka seva mbadala ya ulimwengu kote ya kifaa"</string>
+    <string name="policydesc_setGlobalProxy" msgid="6387497466660154931">"Weka seva mbadala ya ulimwengu kote ya kifaa itakayotumiwa wakati sera iwezeshwa. Msimamizi wa kwanza wa kifaa pekee ndiye anaweza kuweka seva mbadala ya ulimwengu inayofanya kazi."</string>
+    <string name="policylab_expirePassword" msgid="885279151847254056">"Kuweka kipindi cha kutumia nenosiri la kufunga skrini"</string>
+    <string name="policydesc_expirePassword" msgid="1729725226314691591">"Kudhibiti ni mara ngapi nenosiri la kufunga skrini linafaa libadilishwe."</string>
+    <string name="policylab_encryptedStorage" msgid="8901326199909132915">"Kuweka msimbo fiche wa hifadhi"</string>
+    <string name="policydesc_encryptedStorage" msgid="2637732115325316992">"Inahitaji kwamba data iliyohifadhiwa ya programu iwe na msimbo fiche."</string>
+    <string name="policylab_disableCamera" msgid="6395301023152297826">"Kuzima kamera"</string>
+    <string name="policydesc_disableCamera" msgid="2306349042834754597">"Kuzuia matumizi yote ya kamera za kifaa."</string>
+    <string name="policylab_disableKeyguardFeatures" msgid="266329104542638802">"Kuzima vipengele kwenye kilinda vitufe"</string>
+    <string name="policydesc_disableKeyguardFeatures" msgid="3467082272186534614">"Inazuia matumizi ya baadhi ya vipengele kwenye kilinda vitufe."</string>
   <string-array name="phoneTypes">
     <item msgid="8901098336658710359">"Nyumbani"</item>
     <item msgid="869923650527136615">"Simu ya mkononi"</item>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Nyumbani"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Kazi"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Nyinginezo"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Hakuna programu iliyopatikana ili kuona anwani hii."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ingiza msimbo wa PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ingiza PUK na msimbo mpya wa PIN"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Msimbo wa PUK"</string>
@@ -831,7 +891,7 @@
     <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Jaribu tena"</string>
     <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Majaribio ya Juu ya Kufungua Uso yamezidishwa"</string>
     <string name="lockscreen_plugged_in" msgid="8057762828355572315">"Inachaji <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="lockscreen_charged" msgid="321635745684060624">"Imechajiwa"</string>
+    <string name="lockscreen_charged" msgid="321635745684060624">"Betri imejaa"</string>
     <string name="lockscreen_battery_short" msgid="4477264849386850266">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="lockscreen_low_battery" msgid="1482873981919249740">"Unganisha chaja yako"</string>
     <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Hakuna SIM kadi"</string>
@@ -879,8 +939,8 @@
     <string name="lockscreen_access_pattern_cleared" msgid="5583479721001639579">"Ruwaza imefutwa"</string>
     <string name="lockscreen_access_pattern_cell_added" msgid="6756031208359292487">"Kiini kimeongezwa"</string>
     <string name="lockscreen_access_pattern_detected" msgid="4988730895554057058">"Ruwaza imekamilika"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Wiji %2$d ya %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ongeza wiji"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Wijeti %2$d ya %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ongeza wijeti."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tupu"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Eneo la kufungua limepanuliwa."</string>
     <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Eneo la kufungua limekunjwa."</string>
@@ -889,7 +949,7 @@
     <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Hali"</string>
     <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
     <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Vidhibiti vya media"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Upangaji upya wa wiji umeanza."</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Upangaji upya wa wijeti umeanza."</string>
     <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Upangaji upya wa wiji umekamilika."</string>
     <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Wiji <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> imefutwa."</string>
     <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Panua eneo la kufungua."</string>
@@ -1254,14 +1314,14 @@
     <string name="usb_ptp_notification_title" msgid="1960817192216064833">"Imeunganishwa kama kamera"</string>
     <string name="usb_cd_installer_notification_title" msgid="6774712827892090754">"Imeunganishwa kama kisakinishi"</string>
     <string name="usb_accessory_notification_title" msgid="7848236974087653666">"Imeunganishwa kwa kifuasi cha USB"</string>
-    <string name="usb_notification_message" msgid="2290859399983720271">"Gusa kwa chaguo nyingine za USB."</string>
+    <string name="usb_notification_message" msgid="2290859399983720271">"Gusa ili uone chaguo zingine za USB."</string>
     <string name="extmedia_format_title" product="nosdcard" msgid="9020092196061007262">"Fomati hifadhi ya USB?"</string>
     <string name="extmedia_format_title" product="default" msgid="3648415921526526069">"Umbiza kadi ya SD."</string>
     <string name="extmedia_format_message" product="nosdcard" msgid="3934016853425761078">"Faili zote zilizohifadhiwa katika hifadhi yako ya USB zitafutwa. Hatua hii haiwezi kubadilishwa!"</string>
     <string name="extmedia_format_message" product="default" msgid="14131895027543830">"Data yote kwenye kadi yako itapotea."</string>
     <string name="extmedia_format_button_format" msgid="4131064560127478695">"Fomati"</string>
-    <string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji USB umeunganishwa"</string>
-    <string name="adb_active_notification_message" msgid="1016654627626476142">"Gusa ili kulemaza utatuaji wa USB."</string>
+    <string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji wa USB umeunganishwa"</string>
+    <string name="adb_active_notification_message" msgid="1016654627626476142">"Gusa ili uzime utatuaji wa USB."</string>
     <string name="select_input_method" msgid="4653387336791222978">"Chagua njia ya ingizo"</string>
     <string name="configure_input_methods" msgid="9091652157722495116">"Weka mbinu za ingizo"</string>
     <string name="use_physical_keyboard" msgid="6203112478095117625">"Kibodi halisi"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Inaruhusu programu kufikia hifadhi salama ya ufunguo wa ulinzi."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Dhibiti uonyeshaji na ufichaji wa kilinda-funguo"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Huruhusu programu kudhibiti kilinda-funguo."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Sikiliza mabadiliko ya hali ya kuaminiwa."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Huruhusu programu kusikiliza mabadiliko katika hali ya kuaminiwa."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Funga kwenye huduma ya dalali wa kuaminiwa"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Huruhusu programu kufungamanisha kwenye huduma ya dalali wa kuaminiwa."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Ingiliana na sasisho na mfumo wa kurejesha"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Huruhusu programu kuingiliana na mfumo wa kurejesha na sasisho la mfumo."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Gusa mara mbili kwa udhibiti cha kuza"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Haikuweza kuongeza wijeti."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Nenda"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Mandhari"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Badilisha mandhari"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Kisikilizi cha arifa"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Mtoa hali"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN imewezeshwa"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN imeamilishwa na <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Gusa ili kudhibiti mtandao."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Songa"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Chagua programu"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Haikuweza kuzindua <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Shiriki na"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Shiriki na <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Utambo unaosonga. Gusa &amp; shika"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Sogeza juu kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Sogeza chini kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Sogeza kushoto kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Sogeza kulika kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Fungua"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Kimya"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Sauti imewashwa"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Tafuta"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Pitisha ili kufungua."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Chomeka kifaa cha sauti ili kusikiliza vibonye vya nenosiri vikizungumzwa."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nukta."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Mfumo"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Sauti ya Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Uonyeshaji usiotumia waya"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Nimemaliza"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Towe la midia"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Unganisha kwenye kifaa"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Tuma skrini kwenye kifaa"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Inatafuta vifaa..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Mipangilio"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Ondoa"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Inatambaza..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Inaunganisha..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Inapatikana"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Uwekeleaji #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", salama"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Onyesho pasiwaya limeunganishwa"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Skrini hii inaonyesha kwenye kifaa kingine"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Inatuma skrini"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Inaunganishwa na <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Inatuma skrini"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Imeungwanishwa na <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Tenganisha"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Simu ya dharura"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Umesahau Ruwaza"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Inafungua SIM kadi..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Msimbo wa PIN usio sahihi."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Charaza PIN iliyo na tarakimu kati ya 4 na 8."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Msimbo wa PUK unafaa kuwa na nambari 8 au zaidi."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Msimbo wa PUK lazima uwe na tarakimu 8."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ingiza upya msimbo sahihi wa PUK. Majaribio yanayorudiwa yatalemaza SIM kabisa."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Misimbo ya PIN haifanani"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Majaribio mengi mno ya mchoro"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Jaribu tena baada ya sekunde <xliff:g id="COUNT">%d</xliff:g>"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Jaribu tena baadaye"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Telezesha kidole kwa kasi chini kuanzia juu ili uondoke kwenye skrini kamili"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Telezesha kidole kwa kasi chini kuanzia juu ili uondoke kwenye skrini zima."</string>
+    <string name="done_label" msgid="2093726099505892398">"Imekamilika"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Kitelezi cha mviringo wa saa"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Kitelezi cha mviringo wa dakika"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Chagua saa"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Chagua dakika"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Gridi ya mwezi ya siku"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Orodha ya miaka"</string>
+    <string name="select_day" msgid="7774759604701773332">"Chagua mwezi na siku"</string>
+    <string name="select_year" msgid="7952052866994196170">"Chagua mwaka"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> kimechaguliwa"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> kimefutwa"</string>
 </resources>
diff --git a/core/res/res/values-sw600dp/dimens.xml b/core/res/res/values-sw600dp/dimens.xml
index d21f9b7..8f83ab2 100644
--- a/core/res/res/values-sw600dp/dimens.xml
+++ b/core/res/res/values-sw600dp/dimens.xml
@@ -22,6 +22,10 @@
     <dimen name="thumbnail_width">200dp</dimen>
     <!-- The height that is used when creating thumbnails of applications. -->
     <dimen name="thumbnail_height">177dp</dimen>
+    <!-- The width that is used when creating thumbnails of applications. -->
+    <dimen name="recents_thumbnail_width">512dp</dimen>
+    <!-- The height that is used when creating thumbnails of applications. -->
+    <dimen name="recents_thumbnail_height">512dp</dimen>
     <!-- The maximum number of action buttons that should be permitted within
          an action bar/action mode. This will be used to determine how many
          showAsAction="ifRoom" items can fit. "always" items can override this. -->
diff --git a/core/res/res/values-sw720dp/dimens.xml b/core/res/res/values-sw720dp/dimens.xml
index ccdb4be..040bb5b 100644
--- a/core/res/res/values-sw720dp/dimens.xml
+++ b/core/res/res/values-sw720dp/dimens.xml
@@ -38,6 +38,10 @@
     <dimen name="thumbnail_width">230dp</dimen>
     <!-- The height that is used when creating thumbnails of applications. -->
     <dimen name="thumbnail_height">135dp</dimen>
+    <!-- The width that is used when creating thumbnails of applications. -->
+    <dimen name="recents_thumbnail_width">512dp</dimen>
+    <!-- The height that is used when creating thumbnails of applications. -->
+    <dimen name="recents_thumbnail_height">512dp</dimen>
 
     <!-- Preference activity, vertical padding for the header list -->
     <dimen name="preference_screen_header_vertical_padding">32dp</dimen>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 58f5268..826fa64 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;ไม่มีชื่อ&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"พิมพ์รหัส PUK ซึ่งต้องเป็นตัวเลขอย่างน้อย 8 หลัก"</string>
     <string name="needPuk" msgid="919668385956251611">"ซิมการ์ดของคุณถูกล็อกด้วย PUK พิมพ์รหัส PUK เพื่อปลดล็อก"</string>
     <string name="needPuk2" msgid="4526033371987193070">"พิมพ์ PUK2 เพื่อยกเลิกการปิดกั้นซิมการ์ด"</string>
+    <string name="enablePin" msgid="209412020907207950">"ไม่สำเร็จ เปิดใช้การล็อกซิม/RUIM"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่ซิมจะถูกล็อก"</item>
+    <item quantity="other" msgid="7530597808358774740">"คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่ซิมจะถูกล็อก"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"หมายเลขผู้โทรเข้า"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"ซิงค์"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"มีการลบ <xliff:g id="CONTENT_TYPE">%s</xliff:g> มากเกินไป"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"ที่จัดเก็บข้อมูลของแท็บเล็ตเต็ม ลบไฟล์บางไฟล์เพื่อเพิ่มพื้นที่ว่าง"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"ที่เก็บข้อมูลนาฬิกาเต็ม โปรดลบไฟล์บางไฟล์เพื่อเพิ่มพื้นที่ว่าง"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"ที่เก็บข้อมูลโทรศัพท์เต็ม ลบบางไฟล์เพื่อเพิ่มที่ว่าง"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"เครือข่ายอาจได้รับการตรวจสอบ"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"โดยบุคคลที่สามที่ไม่รู้จัก"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"เปิดเสียง"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"กำลังปิดระบบ..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"แท็บเล็ตของคุณจะปิดการทำงาน"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"นาฬิกาจะปิดการทำงาน"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"โทรศัพท์ของคุณจะปิดเครื่อง"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"คุณต้องการปิดการทำงานหรือไม่"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"รีบูตเข้าสู่โหมดปลอดภัย"</string>
@@ -157,15 +186,16 @@
     <string name="global_actions" product="default" msgid="2406416831541615258">"ตัวเลือกโทรศัพท์"</string>
     <string name="global_action_lock" msgid="2844945191792119712">"ล็อกหน้าจอ"</string>
     <string name="global_action_power_off" msgid="4471879440839879722">"ปิดเครื่อง"</string>
-    <string name="global_action_bug_report" msgid="7934010578922304799">"รายงานบั๊ก"</string>
-    <string name="bugreport_title" msgid="2667494803742548533">"ใช้รายงานบั๊ก"</string>
-    <string name="bugreport_message" msgid="398447048750350456">"การดำเนินการนี้จะรวบรวมข้อมูลเกี่ยวกับสถานะปัจจุบันของอุปกรณ์ของคุณ โดยจะส่งไปในรูปแบบข้อความอีเมล อาจใช้เวลาสักครู่ตั้งแต่เริ่มการสร้างรายงานบั๊กจนกระทั่งเสร็จสมบูรณ์ โปรดอดทนรอ"</string>
+    <string name="global_action_bug_report" msgid="7934010578922304799">"รายงานข้อบกพร่อง"</string>
+    <string name="bugreport_title" msgid="2667494803742548533">"ใช้รายงานข้อบกพร่อง"</string>
+    <string name="bugreport_message" msgid="398447048750350456">"การดำเนินการนี้จะรวบรวมข้อมูลเกี่ยวกับสถานะปัจจุบันของอุปกรณ์ของคุณ โดยจะส่งไปในรูปแบบข้อความอีเมล อาจใช้เวลาสักครู่ตั้งแต่เริ่มการสร้างรายงานข้อบกพร่องจนกระทั่งเสร็จสมบูรณ์ โปรดอดทนรอ"</string>
     <string name="global_action_toggle_silent_mode" msgid="8219525344246810925">"โหมดปิดเสียง"</string>
     <string name="global_action_silent_mode_on_status" msgid="3289841937003758806">"ปิดเสียงไว้"</string>
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"เปิดเสียงแล้ว"</string>
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"โหมดใช้งานบนเครื่องบิน"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"เปิดโหมดใช้งานบนเครื่องบิน"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"โหมดใช้งานบนเครื่องบินปิดทำงานอยู่"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"การตั้งค่า"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"โหมดปลอดภัย"</string>
     <string name="android_system_label" msgid="6577375335728551336">"ระบบ Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"ถอนการติดตั้งทางลัด"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"อนุญาตให้แอปพลิเคชันลบทางลัดหน้าจอหลักโดยไม่ต้องให้ผู้ใช้จัดการ"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"จัดเส้นทางการโทรออกใหม่"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"อนุญาตให้แอปพลิเคชันประมวลผลการโทรออกและเปลี่ยนแปลงหมายเลขที่จะโทรไป การอนุญาตนี้จะทำให้แอปพลิเคชันสามารถตรวจสอบ เปลี่ยนเส้นทาง หรือกีดขวางไม่ให้โทรออกได้"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"อนุญาตให้แอปดูหมายเลขที่โทรในระหว่างการโทรออกโดยสามารถเลือกเปลี่ยนเส้นทางการโทรไปยังหมายเลขอื่นหรือยกเลิกการโทรไปเลยได้"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"รับข้อความ (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"อนุญาตให้แอปพลิเคชันรับและประมวลผลข้อความ SMS ซึ่งหมายความว่าแอปพลิเคชันจะสามารถตรวจสอบหรือลบข้อความที่ส่งมายังอุปกรณ์ของคุณได้โดยไม่ต้องแสดงให้คุณเห็น"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"รับข้อความ (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"อนุญาตให้แอปพลิเคชันดึงเนื้อหาของหน้าต่างที่ใช้งานอยู่ แอปพลิเคชันที่เป็นอันตรายอาจดึงเนื้อหาจากหน้าต่างทั้งหมดและตรวจสอบข้อความทั้งหมดยกเว้นรหัสผ่าน"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"เปิดใช้งานการเข้าถึงชั่วคราว"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"ช่วยให้แอปพลิเคชันสามารถเปิดใช้งานการเข้าถึงบนอุปกรณ์เป็นการชั่วคราว แอปพลิเคชันที่เป็นอันตรายอาจเปิดใช้งานการเข้าถึงโดยไม่ได้รับความยินยอมจากผู้ใช้"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"เรียกข้อมูลหน้าต่าง"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"อนุญาตให้แอปพลิเคชันดึงข้อมูลเกี่ยวกับหน้าต่างจากเครื่องมือจัดการหน้าต่าง แอปพลิเคชันที่เป็นอันตรายอาจดึงข้อมูลที่มีไว้เพื่อการใช้ของระบบภายใน"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"เรียกโทเค็นหน้าต่าง"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"อนุญาตให้แอปพลิเคชันเรียกโทเค็นหน้าต่าง แอปที่เป็นอันตรายอาจทำการโต้ตอบที่ไม่ได้รับอนุญาตกับหน้าต่างแอปพลิเคชันโดยปลอมแปลงเป็นระบบ"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"เรียกสถิติเฟรม"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"อนุญาตให้แอปพลิเคชันเก็บสถิติเฟรม แอปที่เป็นอันตรายอาจดูสถิติเฟรมของหน้าต่างจากแอปอื่น"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"กรองกิจกรรม"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"อนุญาตให้แอปพลิเคชันลงทะเบียนตัวกรองข้อมูลซึ่งจะกรองสตรีมกิจกรรมทั้งหมดของผู้ใช้ก่อนที่จะทำการเผยแพร่ออกไป แอปพลิเคชันที่เป็นอันตรายอาจควบคุม UI ของระบบโดยไม่ต้องให้ผู้ใช้จัดการ"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ขยายการแสดงผล"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"อนุญาตให้แอปพลิเคชันขยายเนื้อหาที่แสดงผล แอปพลิเคชันที่เป็นอันตรายอาจแปลงเนื้อหาที่แสดงในลักษณะที่ทำให้ไม่สามารถใช้อุปกรณ์ได้"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"ปิดการทำงานบางส่วน"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"กำหนดให้ตัวจัดการกิจกรรมอยู่ในสถานะปิดระบบ โดยไม่ได้ปิดระบบอย่างสมบูรณ์"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ป้องกันการเปลี่ยนแอปพลิเคชัน"</string>
@@ -324,12 +354,14 @@
     <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"ช่วยให้เจ้าของสามารถดึงข้อมูลส่วนตัวเกี่ยวกับแอปพลิเคชันปัจจุบันในส่วนหน้าของหน้าจอ"</string>
     <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"ตรวจสอบและควบคุมแอปพลิเคชันทั้งหมดที่เปิดใช้งาน"</string>
     <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"อนุญาตให้แอปพลิเคชันตรวจสอบและควบคุมวิธีการที่ระบบเปิดกิจกรรมต่างๆ แอปพลิเคชันที่เป็นอันตรายอาจทำอันตรายแก่ระบบได้อย่างสิ้นเชิง การอนุญาตนี้จำเป็นสำหรับการพัฒนาเท่านั้น ไม่ใช้สำหรับแอปพลิเคชันทั่วไปโดยเด็ดขาด"</string>
-    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"ส่งการกระจายข้อมูลว่ามีการนำแพคเกจออก"</string>
-    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"อนุญาตให้แอปพลิเคชันกระจายข้อมูลการแจ้งเตือนว่าแพคเกจของแอปพลิเคชันหนึ่งๆ ได้ถูกนำออกไปแล้ว แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ยุติแอปพลิเคชันอื่นๆ ที่กำลังทำงานอยู่"</string>
+    <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"ส่งการกระจายข้อมูลว่ามีการนำแพ็กเกจออก"</string>
+    <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"อนุญาตให้แอปพลิเคชันกระจายข้อมูลการแจ้งเตือนว่าแพ็กเกจของแอปพลิเคชันหนึ่งๆ ได้ถูกนำออกไปแล้ว แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ยุติแอปพลิเคชันอื่นๆ ที่กำลังทำงานอยู่"</string>
     <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"ส่งการกระจายข้อมูลว่าได้รับ SMS"</string>
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"อนุญาตให้แอปพลิเคชันกระจายข้อมูลการแจ้งเตือนว่าได้รับข้อความ SMS แล้ว แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ปลอมข้อความ SMS ที่เข้ามา"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ส่งการกระจายข้อมูลว่าได้รับ WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"อนุญาตให้แอปพลิเคชันกระจายข้อมูลการแจ้งเตือนว่าได้รับข้อความ WAP PUSH แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ปลอมการแจ้งรับข้อความ MMS หรือแอบเปลี่ยนเนื้อหาในหน้าเว็บโดยใช้ตัวแปรที่เป็นอันตราย"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ส่งเผยแพร่การให้คะแนนเครือข่าย"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"อนุญาตให้แอปนี้เผยแพร่ข้อมูลการแจ้งเตือนว่าเครือข่ายจะต้องผ่านการให้คะแนน ไม่จำเป็นสำหรับแอปทั่วไป"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"จำกัดจำนวนกระบวนการที่กำลังทำงาน"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"อนุญาตให้แอปพลิเคชันควบคุมจำนวนสูงสุดของกระบวนการที่จะเรียกใช้ ไม่จำเป็นต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"บังคับปิดแอปพลิเคชันในพื้นหลัง"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"อนุญาตให้เจ้าของเชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของบริการ VPN ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"เชื่อมโยงกับวอลเปเปอร์"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"อนุญาตให้ผู้ใช้เชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของวอลเปเปอร์ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"เชื่อมโยงกับโปรแกรมโต้ตอบด้วยเสียง"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"อนุญาตให้ผู้ใช้อุปกรณ์เชื่อมโยงกับอินเทอร์เฟซระดับบนสุดของบริการโต้ตอบด้วยเสียง ไม่จำเป็นสำหรับแอปทั่วไป"</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"ผูกกับจอแสดงผลระยะไกล"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"อนุญาตให้ผู้ใช้ผูกกับอินเทอร์เฟซระดับสูงสุดของจอแสดงผลระยะไกล ซึ่งแอปพลิเคชันทั่วไปไม่จำเป็นต้องใช้"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"เชื่อมโยงกับบริการวิดเจ็ต"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"อนุญาตให้ผู้ใช้เชื่อมโยงกับส่วนติดต่อผู้ใช้ระดับสูงสุดของบริการวิดเจ็ต ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"เชื่อมโยงกับบริการของผู้ให้บริการเส้นทาง"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"ช่วยให้เจ้าของสามารถเชื่อมโยงกับผู้ให้บริการเส้นทางที่ลงทะเบียนรายใดก็ได้ ไม่จำเป็นสำหรับแอปทั่วไป"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"ติดต่อกับผู้ดูแลอุปกรณ์"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"อนุญาตให้ผู้ใช้ส่งการติดต่อไปยังโปรแกรมควบคุมอุปกรณ์ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"เชื่อมโยงกับอินพุตทีวี"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"อนุญาตให้เจ้าของเชื่อมโยงกับส่วนติดต่อระดับสูงสุดของอินพุตทีวี ซึ่งแอปทั่วไปไม่จำเป็นต้องใช้"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"เพิ่มหรือลบผู้ดูแลระบบอุปกรณ์"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"อนุญาตให้เจ้าของเพิ่มหรือลบผู้ดูแลระบบอุปกรณ์ที่ใช้งาน ไม่ควรต้องใช้สำหรับแอปปกติ"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"เปลี่ยนการวางแนวหน้าจอ"</string>
@@ -395,7 +435,7 @@
     <string name="permdesc_persistentActivity" product="tablet" msgid="8525189272329086137">"อนุญาตให้แอปพลิเคชันทำให้ส่วนหนึ่งของตัวเองคงอยู่ถาวรในหน่วยความจำ ซึ่งจะจำกัดพื้นที่หน่วยความจำที่ใช้งานได้ของแอปพลิเคชันอื่นๆ และทำให้แท็บเล็ตทำงานช้าลง"</string>
     <string name="permdesc_persistentActivity" product="default" msgid="4384760047508278272">"อนุญาตให้แอปพลิเคชันทำให้ส่วนหนึ่งของตัวเองคงอยู่ถาวรในหน่วยความจำ ซึ่งจะจำกัดพื้นที่หน่วยความจำที่ใช้งานได้ของแอปพลิเคชันอื่นๆ และทำให้โทรศัพท์ทำงานช้าลง"</string>
     <string name="permlab_deletePackages" msgid="184385129537705938">"ลบแอปพลิเคชัน"</string>
-    <string name="permdesc_deletePackages" msgid="7411480275167205081">"อนุญาตให้แอปพลิเคชันลบแพคเกจ Android แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ลบแอปพลิเคชันที่สำคัญ"</string>
+    <string name="permdesc_deletePackages" msgid="7411480275167205081">"อนุญาตให้แอปพลิเคชันลบแพ็กเกจ Android แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ลบแอปพลิเคชันที่สำคัญ"</string>
     <string name="permlab_clearAppUserData" msgid="274109191845842756">"ลบข้อมูลของแอปพลิเคชันอื่น"</string>
     <string name="permdesc_clearAppUserData" msgid="4625323684125459488">"อนุญาตให้แอปพลิเคชันล้างข้อมูลผู้ใช้"</string>
     <string name="permlab_deleteCacheFiles" msgid="3128665571837408675">"ลบแคชของแอปพลิเคชันอื่น"</string>
@@ -403,7 +443,7 @@
     <string name="permlab_getPackageSize" msgid="7472921768357981986">"วัดพื้นที่เก็บข้อมูลของแอปพลิเคชัน"</string>
     <string name="permdesc_getPackageSize" msgid="3921068154420738296">"อนุญาตให้แอปพลิเคชันเรียกดูรหัส ข้อมูล และขนาดแคชของตน"</string>
     <string name="permlab_installPackages" msgid="2199128482820306924">"ติดตั้งแอปพลิเคชันโดยตรง"</string>
-    <string name="permdesc_installPackages" msgid="5628530972548071284">"อนุญาตให้แอปพลิเคชันติดตั้งแพคเกจ Android ใหม่หรือที่อัปเดต แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ในการเพิ่มแอปพลิเคชันใหม่ๆ ด้วยสิทธิ์ที่สูงนี้ได้ตามต้องการ"</string>
+    <string name="permdesc_installPackages" msgid="5628530972548071284">"อนุญาตให้แอปพลิเคชันติดตั้งแพ็กเกจ Android ใหม่หรือที่อัปเดต แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ในการเพิ่มแอปพลิเคชันใหม่ๆ ด้วยสิทธิ์ที่สูงนี้ได้ตามต้องการ"</string>
     <string name="permlab_clearAppCache" msgid="7487279391723526815">"ลบข้อมูลแคชของแอปพลิเคชันทั้งหมด"</string>
     <string name="permdesc_clearAppCache" product="tablet" msgid="8974640871945434565">"อนุญาตให้แอปพลิเคชันสร้างพื้นที่ว่างในที่จัดเก็บข้อมูลของแท็บเล็ต โดยลบไฟล์ในไดเรกทอรีแคชของแอปพลิเคชันอื่นๆ ซึ่งอาจทำให้แอปพลิเคชันอื่นเริ่มทำงานช้ากว่าเดิมเนื่องจากต้องดึงข้อมูลของตนซ้ำ"</string>
     <string name="permdesc_clearAppCache" product="default" msgid="2459441021956436779">"อนุญาตให้แอปพลิเคชันสร้างพื้นที่ว่างในที่จัดเก็บข้อมูลของโทรศัพท์ โดยลบไฟล์ในไดเรกทอรีแคชของแอปพลิเคชันอื่นๆ ซึ่งอาจทำให้แอปพลิเคชันอื่นเริ่มทำงานช้ากว่าเดิมเนื่องจากต้องดึงข้อมูลของตนซ้ำ"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"อนุญาตให้แอปพลิเคชันใช้ตัวถอดรหัสสื่อใดก็ได้ที่ติดตั้งไว้เพื่อถอดรหัสสำหรับการเล่น"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"จัดการข้อมูลรับรองที่เชื่อถือได้"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"อนุญาตให้แอปติดตั้งและถอนการติดตั้งใบรับรอง CA ในฐานะข้อมูลรับรองที่เชื่อถือได้"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"เรียกใช้แอปพลิเคชันในระหว่างที่ไม่ได้ใช้งาน"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"สิทธิ์นี้ช่วยให้ระบบแอนดรอยด์สามารถเรียกใช้แอปพลิเคชันในพื้นหลังขณะไม่ได้ใช้งานอุปกรณ์อยู่"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"อ่าน/เขียนไปยังรีซอร์สที่เป็นเจ้าของโดยกลุ่มวินิจฉัย"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"อนุญาตให้แอปพลิเคชันอ่านและเขียนไปยังทรัพยากรที่เป็นของกลุ่มวินิจฉัย เช่น ไฟล์ใน /dev การทำเช่นนี้อาจส่งผลต่อความเสถียรและความปลอดภัยของระบบ และควรใช้สำหรับการวินิจฉัยเกี่ยวกับฮาร์ดแวร์โดยเฉพาะที่ทำโดยผู้ผลิตหรือผู้ให้บริการเท่านั้น"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"เปิดหรือปิดใช้งานคอมโพเนนต์ของแอปพลิเคชัน"</string>
@@ -438,14 +480,14 @@
     <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"อนุญาตให้แอปพลิเคชันส่งการกระจายข้อมูลที่ติดหนึบ ซึ่งจะยังคงอยู่หลังจากการกระจายข้อมูลจบไปแล้ว การใช้งานมากเกินไปอาจทำให้แท็บเล็ตทำงานช้าลงหรือไม่เสถียรโดยการใช้หน่วยความจำมากเกินไป"</string>
     <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"อนุญาตให้แอปพลิเคชันส่งการกระจายข้อมูลที่ติดหนึบ ซึ่งจะยังคงอยู่หลังจากการกระจายข้อมูลจบไปแล้ว การใช้งานมากเกินไปอาจทำให้โทรศัพท์ทำงานช้าลงหรือไม่เสถียรโดยการใช้หน่วยความจำมากเกินไป"</string>
     <string name="permlab_readContacts" msgid="8348481131899886131">"อ่านผู้ติดต่อของคุณ"</string>
-    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลผู้ติดต่อที่จัดเก็บไว้ในแท็บเล็ต ซึ่งรวมถึงความถี่ในการโทร ส่งอีเมล หรือการติดต่อด้วยวิธีอื่นๆ กับบุคคลใดบุคคลหนึ่ง การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลผู้ติดต่อของคุณ และแอปพลิเคชันที่เป็นอันตรายอาจแบ่งปันข้อมูลผู้ติดต่อโดยไม่แจ้งให้คุณทราบ"</string>
-    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลผู้ติดต่อที่จัดเก็บไว้ในโทรศัพท์ ซึ่งรวมถึงความถี่ในการโทร ส่งอีเมล หรือการติดต่อด้วยวิธีอื่นๆ กับบุคคลใดบุคคลหนึ่ง การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลผู้ติดต่อของคุณ และแอปพลิเคชันที่เป็นอันตรายอาจแบ่งปันข้อมูลผู้ติดต่อโดยไม่แจ้งให้คุณทราบ"</string>
+    <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลผู้ติดต่อที่จัดเก็บไว้ในแท็บเล็ต ซึ่งรวมถึงความถี่ในการโทร ส่งอีเมล หรือการติดต่อด้วยวิธีอื่นๆ กับบุคคลใดบุคคลหนึ่ง การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลผู้ติดต่อของคุณ และแอปพลิเคชันที่เป็นอันตรายอาจแชร์ข้อมูลผู้ติดต่อโดยไม่แจ้งให้คุณทราบ"</string>
+    <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลผู้ติดต่อที่จัดเก็บไว้ในโทรศัพท์ ซึ่งรวมถึงความถี่ในการโทร ส่งอีเมล หรือการติดต่อด้วยวิธีอื่นๆ กับบุคคลใดบุคคลหนึ่ง การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลผู้ติดต่อของคุณ และแอปพลิเคชันที่เป็นอันตรายอาจแชร์ข้อมูลผู้ติดต่อโดยไม่แจ้งให้คุณทราบ"</string>
     <string name="permlab_writeContacts" msgid="5107492086416793544">"แก้ไขผู้ติดต่อของคุณ"</string>
     <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"อนุญาตให้แอปพลิเคชันเปลี่ยนแปลงข้อมูลผู้ติดต่อที่จัดเก็บไว้ในแท็บเล็ต ซึ่งรวมถึงความถี่ในการโทร ส่งอีเมล หรือการติดต่อด้วยวิธีอื่นๆ กับบุคคลใดบุคคลหนึ่ง การอนุญาตนี้ทำให้แอปพลิเคชันสามารถลบข้อมูลผู้ติดต่อได้"</string>
     <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"อนุญาตให้แอปพลิเคชันเปลี่ยนแปลงข้อมูลผู้ติดต่อที่จัดเก็บไว้ในโทรศัพท์ ซึ่งรวมถึงความถี่ในการโทร ส่งอีเมล หรือการติดต่อด้วยวิธีอื่นๆ กับบุคคลใดบุคคลหนึ่ง การอนุญาตนี้ทำให้แอปพลิเคชันสามารถลบข้อมูลผู้ติดต่อได้"</string>
     <string name="permlab_readCallLog" msgid="3478133184624102739">"อ่านประวัติการโทร"</string>
-    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"อนุญาตให้แอปพลิเคชันอ่านบันทึกการโทรของแท็บเล็ต ซึ่งรวมถึงข้อมูลเกี่ยวกับการโทรเข้าและโทรออก การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลบันทึกการโทรของคุณได้ และแอปพลิเคชันที่เป็นอันตรายอาจแบ่งปันข้อมูลบันทึกการโทรนี้โดยไม่แจ้งให้คุณทราบ"</string>
-    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"อนุญาตให้แอปพลิเคชันอ่านบันทึกการโทรของโทรศัพท์ ซึ่งรวมถึงข้อมูลเกี่ยวกับการโทรเข้าและโทรออก การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลบันทึกการโทรของคุณได้ และแอปพลิเคชันที่เป็นอันตรายอาจแบ่งปันข้อมูลบันทึกการโทรนี้โดยไม่แจ้งให้คุณทราบ"</string>
+    <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"อนุญาตให้แอปพลิเคชันอ่านบันทึกการโทรของแท็บเล็ต ซึ่งรวมถึงข้อมูลเกี่ยวกับการโทรเข้าและโทรออก การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลบันทึกการโทรของคุณได้ และแอปพลิเคชันที่เป็นอันตรายอาจแชร์ข้อมูลบันทึกการโทรนี้โดยไม่แจ้งให้คุณทราบ"</string>
+    <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"อนุญาตให้แอปพลิเคชันอ่านบันทึกการโทรของโทรศัพท์ ซึ่งรวมถึงข้อมูลเกี่ยวกับการโทรเข้าและโทรออก การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกข้อมูลบันทึกการโทรของคุณได้ และแอปพลิเคชันที่เป็นอันตรายอาจแชร์ข้อมูลบันทึกการโทรนี้โดยไม่แจ้งให้คุณทราบ"</string>
     <string name="permlab_writeCallLog" msgid="8552045664743499354">"เขียนประวัติการโทร"</string>
     <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"อนุญาตให้แอปแก้ไขประวัติการโทรจากแท็บเล็ตของคุณ รวมถึงข้อมูลเกี่ยวกับสายเรียกเข้าและการโทรออก แอปที่เป็นอันตรายอาจใช้สิ่งนี้เพื่อลบหรือแก้ไขประวัติการโทรของคุณ"</string>
     <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"อนุญาตให้แอปแก้ไขประวัติการโทรจากโทรศัพท์ของคุณ รวมถึงข้อมูลเกี่ยวกับสายเรียกเข้าและการโทรออก แอปที่เป็นอันตรายอาจใช้สิ่งนี้เพื่อลบหรือแก้ไขประวัติการโทรของคุณ"</string>
@@ -453,13 +495,15 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"อนุญาตให้แอปพลิเคชันอ่านข้อมูลส่วนตัวในโปรไฟล์ที่จัดเก็บไว้ในอุปกรณ์ของคุณ เช่น ชื่อและข้อมูลติดต่อของคุณ ซึ่งหมายความว่าแอปพลิเคชันสามารถระบุตัวคุณและอาจส่งข้อมูลโปรไฟล์ของคุณให้ผู้อื่น"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"แก้ไขบัตรผู้ติดต่อของคุณเอง"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"อนุญาตให้แอปพลิเคชันเปลี่ยนแปลงหรือเพิ่มข้อมูลโปรไฟล์ส่วนตัวที่จัดเก็บไว้บนอุปกรณ์ของคุณ เช่น ชื่อและข้อมูลติดต่อ ซึ่งหมายความว่าแอปพลิเคชันจะสามารถระบุตัวตนของคุณและส่งข้อมูลโปรไฟล์ของคุณให้แก่ผู้อื่นได้"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"เซ็นเซอร์ร่างกาย (เช่น วัดอัตราการเต้นของหัวใจ)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"ช่วยให้แอปสามารถเข้าถึงข้อมูลจากเซ็นเซอร์ที่คุณใช้เพื่อวัดความเป็นไปภายในร่างกายของคุณ เช่น อัตราการเต้นของหัวใจ"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"อ่านสตรีมเครือข่ายสังคม"</string>
-    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"อนุญาตให้แอปพลิเคชันเข้าถึงและซิงค์การอัปเดตทางสังคมจากคุณและเพื่อน โปรดแบ่งปันข้อมูลอย่างระมัดระวังเนื่องจากการอนุญาตนี้ทำให้แอปพลิเคชันสามารถอ่านการติดต่อระหว่างคุณและเพื่อนในเครือข่ายสังคมได้ ไม่ว่าจะมีการรักษาข้อมูลที่เป็นความลับแบบใดก็ตาม หมายเหตุ: การอนุญาตนี้อาจไม่สามารถใช้งานได้กับทุกเครือข่ายสังคม"</string>
+    <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"อนุญาตให้แอปพลิเคชันเข้าถึงและซิงค์การอัปเดตทางสังคมจากคุณและเพื่อน โปรดแชร์ข้อมูลอย่างระมัดระวังเนื่องจากการอนุญาตนี้ทำให้แอปพลิเคชันสามารถอ่านการติดต่อระหว่างคุณและเพื่อนในเครือข่ายสังคมได้ ไม่ว่าจะมีการรักษาข้อมูลที่เป็นความลับแบบใดก็ตาม หมายเหตุ: การอนุญาตนี้อาจไม่สามารถใช้งานได้กับทุกเครือข่ายสังคม"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"เขียนในสตรีมเครือข่ายสังคม"</string>
-    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"อนุญาตให้แอปพลิเคชันแสดงการอัปเดตทางสังคมจากเพื่อนของคุณ โปรดแบ่งปันข้อมูลอย่างระมัดระวังเนื่องจากการอนุญาตนี้ทำให้แอปพลิเคชันสามารถสร้างข้อความที่ดูเหมือนมาจากเพื่อนได้ หมายเหตุ: การอนุญาตนี้อาจไม่สามารถใช้ได้กับทุกเครือข่ายสังคม"</string>
+    <string name="permdesc_writeSocialStream" product="default" msgid="3086557552204114849">"อนุญาตให้แอปพลิเคชันแสดงการอัปเดตทางสังคมจากเพื่อนของคุณ โปรดแชร์ข้อมูลอย่างระมัดระวังเนื่องจากการอนุญาตนี้ทำให้แอปพลิเคชันสามารถสร้างข้อความที่ดูเหมือนมาจากเพื่อนได้ หมายเหตุ: การอนุญาตนี้อาจไม่สามารถใช้ได้กับทุกเครือข่ายสังคม"</string>
     <string name="permlab_readCalendar" msgid="5972727560257612398">"อ่านกิจกรรมบนปฏิทินรวมถึงข้อมูลที่เป็นความลับ"</string>
-    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมในปฏิทินทั้งหมดที่จัดเก็บไว้ในแท็บเล็ตของคุณ ซึ่งรวมถึงกิจกรรมของเพื่อนหรือเพื่อนร่วมงานด้วย ซึ่งอาจทำให้แอปพลิเคชันสามารถแบ่งปันหรือบันทึกข้อมูลในปฏิทินของคุณได้ไม่ว่าจะมีการรักษาข้อมูลที่เป็นความลับหรือหรือข้อมูลที่อ่อนไหวแบบใดก็ตาม"</string>
-    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมในปฏิทินทั้งหมดที่จัดเก็บไว้ในโทรศัพท์ของคุณ ซึ่งรวมถึงกิจกรรมของเพื่อนหรือเพื่อนร่วมงานด้วย ซึ่งอาจทำให้แอปพลิเคชันสามารถแบ่งปันหรือบันทึกข้อมูลในปฏิทินของคุณได้ไม่ว่าจะมีการรักษาข้อมูลที่เป็นความลับหรือหรือข้อมูลที่อ่อนไหวแบบใดก็ตาม"</string>
+    <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมในปฏิทินทั้งหมดที่จัดเก็บไว้ในแท็บเล็ตของคุณ ซึ่งรวมถึงกิจกรรมของเพื่อนหรือเพื่อนร่วมงานด้วย ซึ่งอาจทำให้แอปพลิเคชันสามารถแชร์หรือบันทึกข้อมูลในปฏิทินของคุณได้ไม่ว่าจะมีการรักษาข้อมูลที่เป็นความลับหรือหรือข้อมูลที่อ่อนไหวแบบใดก็ตาม"</string>
+    <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"อนุญาตให้แอปพลิเคชันอ่านกิจกรรมในปฏิทินทั้งหมดที่จัดเก็บไว้ในโทรศัพท์ของคุณ ซึ่งรวมถึงกิจกรรมของเพื่อนหรือเพื่อนร่วมงานด้วย ซึ่งอาจทำให้แอปพลิเคชันสามารถแชร์หรือบันทึกข้อมูลในปฏิทินของคุณได้ไม่ว่าจะมีการรักษาข้อมูลที่เป็นความลับหรือหรือข้อมูลที่อ่อนไหวแบบใดก็ตาม"</string>
     <string name="permlab_writeCalendar" msgid="8438874755193825647">"เพิ่มหรือแก้ไขกิจกรรมบนปฏิทินและส่งอีเมลให้ผู้เข้าร่วมโดยที่เจ้าของไม่ทราบ"</string>
     <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"อนุญาตให้แอปพลิเคชันเพิ่ม ลบ เปลี่ยนกิจกรรมที่คุณสามารถเปลี่ยนแปลงในแท็บเล็ตได้ รวมถึงกิจกรรมของเพื่อนหรือเพื่อนร่วมงานด้วย การอนุญาตนี้อาจทำให้แอปพลิเคชันสามารถส่งข้อความที่มาจากเจ้าของปฏิทิน หรือเปลี่ยนแปลงกิจกรรมโดยที่เจ้าของไม่ทราบ"</string>
     <string name="permdesc_writeCalendar" product="default" msgid="2324469496327249376">"อนุญาตให้แอปพลิเคชันเพิ่ม ลบ เปลี่ยนกิจกรรมที่คุณสามารถเปลี่ยนแปลงในโทรศัพท์ได้ รวมถึงกิจกรรมของเพื่อนหรือเพื่อนร่วมงานด้วย การอนุญาตนี้อาจทำให้แอปพลิเคชันสามารถส่งข้อความที่มาจากเจ้าของปฏิทิน หรือเปลี่ยนแปลงกิจกรรมโดยที่เจ้าของไม่ทราบ"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"อนุญาตให้แอปพลิเคชันใช้คุณลักษณะระดับต่ำของ SurfaceFlinger"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"อ่านเฟรมบัฟเฟอร์"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"อนุญาตให้แอปพลิเคชันอ่านเนื้อหาในเฟรมบัฟเฟอร์"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"เข้าถึง InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"อนุญาตให้แอปใช้คุณลักษณะระดับต่ำของ InputFlinger"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"กำหนดค่าการแสดงผลด้วย WiFi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"อนุญาตให้แอปกำหนดค่าและเชื่อมต่อกับจอแสดงผล WiFi ได้"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"ควบคุมการแสดงผลด้วย WiFi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"อนุญาตให้แอปพลิเคชันปรับเปลี่ยนการตั้งค่าเสียงทั้งหมดได้ เช่น ระดับเสียงและลำโพงที่จะใช้งาน"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"บันทึกเสียง"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"อนุญาตให้แอปพลิเคชันบันทึกเสียงด้วยไมโครโฟน การอนุญาตนี้ทำให้แอปพลิเคชันสามารถบันทึกเสียงได้ทุกเมื่อโดยไม่ต้องรอการยืนยันจากคุณ"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"การสื่อสารกับ SIM"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"อนุญาตให้แอปส่งคำสั่งไปยัง SIM ซึ่งอันตรายมาก"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"ถ่ายภาพและวิดีโอ"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"อนุญาตให้แอปพลิเคชันถ่ายภาพและวิดีโอด้วยกล้องถ่ายรูปนี้ การอนุญาตนี้จะทำให้แอปพลิเคชันสามารถใช้กล้องถ่ายรูปได้ทุกเมื่อโดยไม่ต้องรอการยืนยันจากคุณ"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"ปิดไฟสัญญาณ LED เมื่อใช้งานกล้อง"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"อนุญาตให้แอปพลิชันควบคุมคุณลักษณะโทรศัพท์ของอุปกรณ์ แอปพลิเคชันที่ได้รับอนุญาตจะสามารถสลับเครือข่าย เปิดและปิดวิทยุในโทรศัพท์ และคุณลักษณะอื่นที่คล้ายกันนี้ได้โดยไม่ต้องแจ้งให้คุณทราบ"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"อ่านสถานะและข้อมูลระบุตัวตนของโทรศัพท์"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"อนุญาตให้แอปพลิเคชันเข้าถึงคุณลักษณะโทรศัพท์ของอุปกรณ์ การอนุญาตนี้ทำให้แอปพลิเคชันสามารถตรวจสอบหมายเลขโทรศัพท์และรหัสอุปกรณ์ ตรวจสอบว่ามีการโทรที่ทำงานอยู่หรือไม่ และตรวจสอบหมายเลขระยะไกลที่เชื่อมต่อด้วยการโทร"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"อ่านสถานะที่แม่นยำของโทรศัพท์"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"ช่วยให้แอปสามารถเข้าถึงสถานะที่แม่นยำของโทรศัพท์ สิทธิ์นี้ช่วยให้แอปสามารถทราบถึงสถานะการโทรที่แท้จริงว่ากำลังมีการโทรอยู่หรือการโทรในพื้นหลัง การโทรล้มเหลว สถานะการเชื่อมต่อข้อมูลที่แม่นยำและการเชื่อมต่อข้อมูลล้มเหลว"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ป้องกันไม่ให้แท็บเล็ตเข้าสู่โหมดสลีป"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ป้องกันไม่ให้โทรศัพท์เข้าโหมดสลีป"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"อนุญาตให้แอปพลิเคชันป้องกันไม่ให้แท็บเล็ตเข้าสู่โหมดสลีป"</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"เปลี่ยนสถานะของ WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"อนุญาตให้แอปพลิเคชันเชื่อมต่อและยกเลิกการเชื่อมต่อแท็บเล็ตกับเครือข่าย WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"อนุญาตให้แอปพลิเคชันเชื่อมต่อและยกเลิกการเชื่อมต่อโทรศัพท์กับเครือข่าย WiMAX"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ให้คะแนนเครือข่าย"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"อนุญาตให้แอปนี้จัดลำดับเครือข่าย ซึ่งมีผลต่อการเลือกใช้เครือข่ายของแท็บเล็ต"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"อนุญาตให้แอปนี้จัดอันดับเครือข่ายและมีผลต่อการเลือกใช้เครือข่ายของโทรศัพท์"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"จับคู่กับอุปกรณ์บลูทูธ"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"อนุญาตให้แอปพลิเคชันดูการกำหนดค่าบลูทูธของแท็บเล็ต ตลอดจนเชื่อมต่อและยอมรับการเชื่อมต่อกับอุปกรณ์ที่จับคู่ไว้"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"อนุญาตให้แอปพลิเคชันดูการกำหนดค่าบลูทูธของโทรศัพท์ ตลอดจนเชื่อมต่อและยอมรับการเชื่อมต่อกับอุปกรณ์ที่จับคู่ไว้"</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"ทำให้แอปสามารถเรียกดู ตรวจสอบ และล้างการแจ้งเตือนได้ ซึ่งรวมถึงการแจ้งเตือนที่โพสต์โดยแอปอื่นๆ ด้วย"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"เชื่อมโยงกับบริการตัวฟังการแจ้งเตือน"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"อนุญาตให้เจ้าของเชื่อมโยงกับอินเตอร์เฟซระดับสูงสุดของบริการตัวฟังการแจ้งเตือน ซึ่งไม่มีความจำเป็นสำหรับแอปธรรมดา"</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"เชื่อมโยงกับบริการของผู้เสนอเงื่อนไข"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"อนุญาตให้ผู้ใช้อุปกรณ์เชื่อมโยงกับอินเทอร์เฟซระดับบนสุดของบริการของผู้เสนอเงื่อนไข ไม่จำเป็นสำหรับแอปทั่วไป"</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"เรียกใช้แอปการกำหนดค่าของผู้ให้บริการ"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"อนุญาตให้ผู้ใช้สามารถเรียกใช้แอปการกำหนดค่าของผู้ให้บริการ ซึ่งแอปทั่วไปไม่จำเป็นต้องใช้"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ฟังข้อสังเกตเกี่ยวกับสภาวะของเครือข่าย"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"อนุญาตให้แอปพลิเคชันฟังข้อสังเกตเกี่ยวกับสภาวะของเครือข่าย ไม่จำเป็นสำหรับแอปปกติ"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"เปลี่ยนการเทียบมาตรฐานอุปกรณ์อินพุต"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"อนุญาตให้แอปสามารถปรับพารามิเตอร์การเทียบมาตรฐานของหน้าจอสัมผัส ไม่ควรใช้สำหรับแอปทั่วไป"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"เข้าถึงใบรับรอง DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"ช่วยให้แอปพลิเคชันสามารถจัดสรรและใช้ใบรับรอง DRM ได้ ไม่จำเป็นสำหรับแอปปกติทั่วไป"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"ตั้งค่ากฎรหัสผ่าน"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"ควบคุมความยาวและอักขระที่อนุญาตให้ใช้ในรหัสผ่านการปลดล็อกหน้าจอ"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"ตรวจสอบความพยายามในการปลดล็อกหน้าจอ"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"หน้าแรก"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"ที่ทำงาน"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"อื่นๆ"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"ไม่พบแอปพลิเคชันที่ใช้ดูที่อยู่ติดต่อนี้"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"พิมพ์รหัส PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"พิมพ์ PUK และรหัส PIN ใหม่"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"รหัส PUK"</string>
@@ -911,7 +971,7 @@
     <string name="hour_cap_ampm" msgid="2083465992940444366">"<xliff:g id="HOUR">%-l</xliff:g><xliff:g id="AMPM">%p</xliff:g>"</string>
     <string name="factorytest_failed" msgid="5410270329114212041">"การทดสอบจากโรงงานล้มเหลว"</string>
     <string name="factorytest_not_system" msgid="4435201656767276723">"การทำงาน FACTORY_TEST ได้รับการสนับสนุนเฉพาะสำหรับแพ็คเก็จที่ติดตั้งใน /system/app เท่านั้น"</string>
-    <string name="factorytest_no_action" msgid="872991874799998561">"ไม่พบแพคเกจที่มีการทำงาน FACTORY_TEST"</string>
+    <string name="factorytest_no_action" msgid="872991874799998561">"ไม่พบแพ็กเกจที่มีการทำงาน FACTORY_TEST"</string>
     <string name="factorytest_reboot" msgid="6320168203050791643">"รีบูต"</string>
     <string name="js_dialog_title" msgid="1987483977834603872">"หน้าเว็บที่ \"<xliff:g id="TITLE">%s</xliff:g>\" ระบุว่า:"</string>
     <string name="js_dialog_title_default" msgid="6961903213729667573">"JavaScript"</string>
@@ -950,10 +1010,10 @@
     <string name="permdesc_addVoicemail" msgid="6604508651428252437">"อนุญาตให้แอปพลิเคชันเพิ่มข้อความลงในกล่องข้อความเสียงของคุณ"</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"แก้ไขการอนุญาตเกี่ยวกับการระบุตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์"</string>
     <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"อนุญาตให้แอปพลิเคชันแก้ไขการอนุญาตตำแหน่งทางภูมิศาสตร์ของเบราว์เซอร์ แอปพลิเคชันที่เป็นอันตรายอาจใช้การอนุญาตนี้ในการส่งข้อมูลตำแหน่งไปยังเว็บไซต์ต่างๆ ได้ตามต้องการ"</string>
-    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"ยืนยันแพคเกจ"</string>
-    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"อนุญาตให้แอปพลิเคชันยืนยันว่าแพคเกจสามารถติดตั้งได้หรือไม่"</string>
-    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"เชื่อมโยงกับการยืนยันแพคเกจ"</string>
-    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"อนุญาตให้ผู้ใช้ส่งคำขอให้มีการยืนยันแพคเกจ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
+    <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"ยืนยันแพ็กเกจ"</string>
+    <string name="permdesc_packageVerificationAgent" msgid="8437590190990843381">"อนุญาตให้แอปพลิเคชันยืนยันว่าแพ็กเกจสามารถติดตั้งได้หรือไม่"</string>
+    <string name="permlab_bindPackageVerifier" msgid="4187786793360326654">"เชื่อมโยงกับการยืนยันแพ็กเกจ"</string>
+    <string name="permdesc_bindPackageVerifier" msgid="3180741773233862126">"อนุญาตให้ผู้ใช้ส่งคำขอให้มีการยืนยันแพ็กเกจ ไม่ควรต้องใช้สำหรับแอปพลิเคชันทั่วไป"</string>
     <string name="permlab_serialPort" msgid="546083327654631076">"เข้าถึงพอร์ตอนุกรม"</string>
     <string name="permdesc_serialPort" msgid="2991639985224598193">"อนุญาตให้ผู้ถือสามารถเข้าถึงพอร์ตอนุกรมโดยใช้ SerialManager API"</string>
     <string name="permlab_accessContentProvidersExternally" msgid="5077774297943409285">"เข้าถึงผู้ให้บริการเนื้อหาจากภายนอก"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"อนุญาตให้แอปพลิเคชันเข้าถึงพื้นที่จัดเก็บที่รักษาความปลอดภัยด้วยคีย์การ์ด"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"ควบคุมการแสดงผลและการซ่อนตัวล็อกปุ่มกด"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"อนุญาตให้แอปพลิเคชันควบคุมตัวล็อกปุ่มกด"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"ฟังการเปลี่ยนแปลงของสถานะความน่าเชื่อถือ"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"อนุญาตให้แอปพลิเคชันฟังการเปลี่ยนแปลงที่มีต่อสถานะความน่าเชื่อถือ"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"ผูกกับบริการของตัวแทนที่เชื่อถือได้"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"อนุญาตให้แอปพลิเคชันผูกกับบริการของตัวแทนที่เชื่อถือได้"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"โต้ตอบกับการอัปเดตและระบบการกู้คืน"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"ช่วยให้แอปพลิเคชันสามารถโต้ตอบกับระบบการกู้คืนและการอัปเดตระบบ"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"แตะสองครั้งเพื่อควบคุมการซูม"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"ไม่สามารถเพิ่มวิดเจ็ต"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"ไป"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"วอลเปเปอร์"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"เปลี่ยนวอลเปเปอร์"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"ตัวฟังการแจ้งเตือน"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"ผู้เสนอเงื่อนไข"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN เปิดใช้งานแล้ว"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"เปิดใช้งาน VPN โดย <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"แตะเพื่อจัดการเครือข่าย"</string>
@@ -1345,7 +1412,7 @@
     <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"แตะเพื่อออกจากโหมดรถยนต์"</string>
     <string name="tethered_notification_title" msgid="3146694234398202601">"การปล่อยสัญญาณหรือฮอตสปอตทำงานอยู่"</string>
     <string name="tethered_notification_message" msgid="6857031760103062982">"แตะเพื่อตั้งค่า"</string>
-    <string name="back_button_label" msgid="2300470004503343439">"ย้อนกลับ"</string>
+    <string name="back_button_label" msgid="2300470004503343439">"กลับ"</string>
     <string name="next_button_label" msgid="1080555104677992408">"ถัดไป"</string>
     <string name="skip_button_label" msgid="1275362299471631819">"ข้าม"</string>
     <string name="throttle_warning_notification_title" msgid="4890894267454867276">"การใช้งานข้อมูลมือถือในระดับสูง"</string>
@@ -1372,7 +1439,7 @@
     <string name="media_shared" product="nosdcard" msgid="5830814349250834225">"ขณะนี้ที่เก็บข้อมูล USB ถูกใช้งานอยู่โดยคอมพิวเตอร์"</string>
     <string name="media_shared" product="default" msgid="5706130568133540435">"ขณะนี้การ์ด SD มีการใช้งานอยู่โดยคอมพิวเตอร์"</string>
     <string name="media_unknown_state" msgid="729192782197290385">"สื่อภายนอกอยู่ในสถานะที่ไม่รู้จัก"</string>
-    <string name="share" msgid="1778686618230011964">"แบ่งปัน"</string>
+    <string name="share" msgid="1778686618230011964">"แชร์"</string>
     <string name="find" msgid="4808270900322985960">"ค้นหา"</string>
     <string name="websearch" msgid="4337157977400211589">"ค้นเว็บ"</string>
     <string name="find_next" msgid="5742124618942193978">"ค้นหาถัดไป"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ป้อน"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"เลือกแอปพลิเคชัน"</string>
-    <string name="shareactionprovider_share_with" msgid="806688056141131819">"แบ่งปันกับ"</string>
-    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"แบ่งปันด้วย <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"ไม่สามารถเปิด <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
+    <string name="shareactionprovider_share_with" msgid="806688056141131819">"แชร์กับ"</string>
+    <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"แชร์ด้วย <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"ที่จับสำหรับเลื่อน แตะค้างไว้"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"เลื่อนลงเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"เลื่อนไปทางซ้ายเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"เลื่อนไปทางขวาเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"ปลดล็อก"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"กล้อง"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"ปิดเสียง"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"เปิดเสียง"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"ค้นหา"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"กวาดเพื่อปลดล็อก"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"เสียบชุดหูฟังเพื่อฟังเสียงเมื่อพิมพ์รหัสผ่าน"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"เครื่องหมายจุด"</string>
@@ -1468,7 +1527,7 @@
     <string name="sha1_fingerprint" msgid="7930330235269404581">"ลายนิ้วมือ SHA-1"</string>
     <string name="activity_chooser_view_see_all" msgid="4292569383976636200">"ดูทั้งหมด"</string>
     <string name="activity_chooser_view_dialog_title_default" msgid="4710013864974040615">"เลือกกิจกรรม"</string>
-    <string name="share_action_provider_share_with" msgid="5247684435979149216">"แบ่งปันกับ"</string>
+    <string name="share_action_provider_share_with" msgid="5247684435979149216">"แชร์กับ"</string>
     <string name="list_delimeter" msgid="3975117572185494152">", "</string>
     <string name="sending" msgid="3245653681008218030">"กำลังส่ง…"</string>
     <string name="launchBrowserDefault" msgid="2057951947297614725">"เปิดเบราว์เซอร์หรือไม่"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"ระบบ"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"เสียงบลูทูธ"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"การแสดงผลแบบไร้สาย"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"เสร็จสิ้น"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"เอาต์พุตสื่อ"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"เชื่อมต่อกับอุปกรณ์"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"ส่งหน้าจอไปยังอุปกรณ์"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"กำลังค้นหาอุปกรณ์…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"การตั้งค่า"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"ยกเลิกการเชื่อมต่อ"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"กำลังสแกน..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"กำลังเชื่อมต่อ..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"พร้อมใช้งาน"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"การวางซ้อน #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", ปลอดภัย"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"เชื่อมต่อการแสดงผลแบบไร้สายอยู่"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"หน้าจอนี้กำลังแสดงบนอุปกรณ์อื่น"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"กำลังส่งหน้าจอ"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"กำลังเชื่อมต่อไปยัง <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"กำลังส่งหน้าจอ"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"เชื่อมต่อกับ <xliff:g id="NAME">%1$s</xliff:g> แล้ว"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"หยุดเชื่อมต่อ"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"หมายเลขฉุกเฉิน"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ลืมรูปแบบใช่หรือไม่"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"กำลังปลดล็อกซิมการ์ด…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"รหัส PIN ไม่ถูกต้อง"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"พิมพ์ PIN ซึ่งเป็นเลข 4 ถึง 8 หลัก"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"รหัส PUK ต้องเป็นตัวเลขอย่างน้อย 8 หลัก"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"รหัส PUK ต้องเป็นตัวเลข 8 หลัก"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"ใส่รหัส PUK ที่ถูกต้องอีกครั้ง การพยายามซ้ำหลายครั้งจะทำให้ซิมการ์ดถูกปิดใช้งานอย่างถาวร"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"รหัส PIN ไม่ตรง"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ลองหลายรูปแบบมากเกินไป"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"ลองอีกใน <xliff:g id="COUNT">%d</xliff:g> วินาที"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"ลองอีกครั้งในภายหลัง"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"กวาดนิ้วจากบนลงล่างเพื่อออกจากโหมดเต็มหน้าจอ"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"กวาดนิ้วบนลงล่างเพื่อออกจากโหมดเต็มหน้าจอ"</string>
+    <string name="done_label" msgid="2093726099505892398">"เสร็จสิ้น"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"ตัวเลื่อนหมุนระบุชั่วโมง"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"ตัวเลื่อนหมุนระบุนาที"</string>
+    <string name="select_hours" msgid="6043079511766008245">"เลือกชั่วโมง"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"เลือกนาที"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"ตารางเดือนของวัน"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"รายการปี"</string>
+    <string name="select_day" msgid="7774759604701773332">"เลือกเดือนและวัน"</string>
+    <string name="select_year" msgid="7952052866994196170">"เลือกปี"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"เลือก <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"ลบ <xliff:g id="KEY">%1$s</xliff:g> แล้ว"</string>
 </resources>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index bc396ed..6e50517 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Walang pamagat&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Mag-type ng PUK na may 8 numbero o mas mahaba."</string>
     <string name="needPuk" msgid="919668385956251611">"Na-PUK-lock ang iyong SIM card. I-type ang PUK code upang i-unlock ito."</string>
     <string name="needPuk2" msgid="4526033371987193070">"I-type ang PUK2 upang i-unblock ang SIM card."</string>
+    <string name="enablePin" msgid="209412020907207950">"Hindi matagumpay, i-enable ang SIM/RUIM Lock."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago ma-lock ang SIM."</item>
+    <item quantity="other" msgid="7530597808358774740">"Mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago ma-lock ang SIM."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Papasok na Caller ID"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"I-sync"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Masyadong maraming pagtanggal ng <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Puno na ang storage ng tablet. Magtanggal ng ilang file upang magbakante ng espasyo."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Puno na ang storage ng relo. Magtanggal ng ilang file upang magbakante ng espasyo."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Puno na ang storage ng telepono. Magtanggal ng ilang file upang magbakante ng espasyo."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Maaaring sinusubaybayan ang network"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Ng isang di-kilalang third party"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"I-on ang ringer"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Nagsa-shut down…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Mag-shut down ang iyong tablet."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Magsa-shut down ang iyong relo."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Magsa-shut down ang iyong telepono."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Nais mo bang mag-shut down?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Mag-reboot sa safe mode"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Airplane mode"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Naka-ON ang airplane mode"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Naka-OFF ang airplane mode"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Mga Setting"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Safe mode"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android System"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"i-uninstall ang mga shortcut"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Pinapayagan ang application na alisin ang mga shortcut ng Homescreen nang walang panghihimasok ng user."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"baguhin ang ruta ng mga papalabas na tawag"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Pinapayagan ang app na magproseso ng mga papalabas na tawag at baguhin ang numerong ida-dial. Pinapayagan ng pahintulot na ito ang app na sumubaybay, mag-redirect, o pumigil ng mga papalabas na tawag."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Pinapayagan ang app na makita ang numerong idina-dial sa isang papalabas na tawag na may opsyon na i-redirect ang tawag sa ibang numero o itigil ang tawag nang tuluyan."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"tumanggap ng mga text message (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Pinapayagan ang app na tumanggap at magproseso ng mga mensaheng SMS. Nangangahulugan ito na maaaring sumubaybay o magtanggal ang app ng mga mensaheng ipinapadala sa iyong device nang hindi ipinapakita ang mga ito sa iyo."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"tumanggap ng mga text message (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Pinapayagan ang app na bawiin ang nilalaman ng aktibong window. Maaaring bawiin ng nakakahamak na apps ang kabuuang nilalaman ng window at suriin ang lahat ng teksto nito maliban sa mga password."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"pansamantalang paganahin ang accessibility"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Nagbibigay-daan sa isang application na pansamantalang paganahin ang accessibility sa device. Maaaring paganahin ng nakakahamak na apps ang accessibility nang walang pahintulot ng user."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"kunin ang impormasyon ng window"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Pinapayagan ang application na kumuha ng impormasyon tungkol sa mga window mula sa tagapamahala ng window. Maaaring kumuha ang mga nakakahamak na app ng impormasyong nilayon para sa panloob na paggamit ng system."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"kunin ang token ng window"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Nagbibigay-daan sa isang application upang makuha ang token ng window. Maaaring magsagawa ng hindi pinapahintulutang pakikipag-ugnayan ang mga nakakahamak na app sa window ng application nang nagkukunwari bilang ang system."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"kunin ang mga istatistika ng frame"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Nagbibigay-daan sa isang application upang mangolekta ng mga istatistika ng frame. Maaaring mag-obserba ng mga window mula sa ibang mga app ang mga nakakahamak na app."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"i-filter ang mga kaganapan"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Pinapayagan ang isang application na magrehistro ng filter ng input na nagpi-filter sa stream ng lahat ng kaganapan ng user bago maipadala ang mga iyon. Maaaring kontrolin ng nakakahamak na app ang system UI nang hindi nakikialam ang user."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"i-magnify ang display"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Pinapayagan ang isang application na i-magnify ang nilalaman ng isang display. Maaaring ibahin ng nakakahamak na apps ang nilalaman ng display sa paraang nagre-render sa device na hindi kapaki-pakinabang."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"bahagyang pag-shutdown"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Inilalagay ang tagapamahala ng aktibidad sa katayuan ng pag-shutdown. Hindi nagsasagawa ng kumpletong pag-shutdown."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"pigilan ang mga paglipat ng app"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Pinapayagan ang app na mag-broadcast ng isang notification na natanggap ang isang mensaheng SMS. Maaari itong gamitin ng nakakahamak na apps upang dayain ang papasok na mga mensaheng SMS."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"ipadala ang WAP-PUSH-natanggap na pag-broadcast"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Pinapayagan ang app na mag-broadcast ng isang notification na natanggap ang isang mensaheng WAP PUSH. Maaari itong gamitin ng nakakahamak na apps upang dayain ang pagtanggap ng mensaheng MMS o upang tahimik na palitan ang nilalaman ng anumang webpage ng mga nakakahamak na variant."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"magpadala ng broadcast ng mga network ng score"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Nagbibigay-daan sa app na mag-broadcast ng notification na kailangang ma-score ng mga network. Hindi kailanman kinakailangan para sa mga normal na app."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"limitahan ang numero ng mga tumatakbong proseso"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Pinapayagan ang app na kontrolin ang maximum na bilang ng mga proseso na tatakbo. Hindi kailanman kinakailangan para sa normal na apps."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"pwersahin ang mga app sa background na magsara"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Pinapayagan ang may-hawak na sumailalim sa nangungunang interface ng serbisyo ng Vpn. Hindi kailanman dapat na kailanganin para sa normal na apps."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"sumailalim sa wallpaper"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Pinapayagan ang may-hawak na sumailalim sa nangungunang interface ng isang wallpaper. Hindi kailanman dapat na kailanganin para sa normal na apps."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"i-bind sa isang voice interactor"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Nagbibigay-daan sa may-hawak na i-bind ang top-level na interface ng isang serbisyo sa pakikipag-ugnayan gamit ang boses. Hindi kailanman dapat kailanganin ng mga normal na app."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"magpasaklaw sa isang remote na display"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Binibigyang-daan ang may-hawak na masaklaw ang pinakamataas na antas ng interface ng isang remote na display. Hindi dapat kailanman kailanganin ng normal na apps."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"itali sa serbisyo ng widget"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Pinapayagan ang may-hawak na sumailalim sa nangungunang interface ng serbisyo ng widget. Hindi kailanman dapat na kailanganin para sa normal na apps."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"mag-bind sa isang serbisyo ng route provider"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Nagbibigay-daan sa may-pahintulot na mag-bind sa anumang nakarehistrong route provider. Hindi dapat kailanganin kailanman ng mga normal na app."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"makipag-ugnay sa tagapangasiwa ng device"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Pinapayagan ang mga may-ari na magpadala ng mga layunin sa administrator ng device. Hindi kailanman dapat na kailanganin para sa normal na apps."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"i-bind sa isang TV input"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Pinapayagan ang may-hawak na mag-bind sa top-level na interface ng isang TV input. Hindi kailanman kakailanganin ng mga normal na app."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"magdagdag o mag-alis ng admin ng device"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Pinapayagan ang may-ari na magdagdag o mag-alis ng mga aktibong administrator ng device. Hindi dapat kailanganin kailanman para sa normal na apps."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"baguhin ang orientation ng screen"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Pinapayagan ang app na gumamit ng anumang naka-install na media decoder upang mag-decode para sa pag-playback."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"mga pinamamahalaang pinagkakatiwalaang kredensyal"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Pinapayagan ang app na mag-install at mag-uninstall ng mga CA certificate bilang mga pinagkakatiwalaang kredensyal."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"paganahin ang application habang idle"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Nagbibigay-daan ang pahintulot na ito sa Android system na paganahin ang application sa background habang hindi ginagamit ang device."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"magbasa/magsulat sa mga mapagkukunang pag-aari ng diag"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Pinapayagan ang app na magbasa at magsulat sa anumang mapagkukunang pag-aari ng pangkat ng diag; halimbawa, mga file sa /dev. Maaaring potensyal na maapektuhan nito ang katatagan at seguridad ng system. Dapat LAMANG itong gamitin para sa diagnostics na tukoy sa hardware ng tagagawa o operator."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"paganahin o huwag paganahin ang mga bahagi ng app"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Pinapayagan ang app na basahin ang personal na impormasyon ng profile na naka-imbak sa iyong device, gaya ng iyong pangalan at impormasyon sa pakikipag-ugnay. Nangangahulugan ito na makikilala ka ng app at maaari nitong ipadala ang impormasyon ng iyong profile sa iba."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"baguhin sarili mo contact card"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Pinapayagan ang app na baguhin ang o magdagdag sa personal na impormasyon ng profile na naka-imbak sa iyong device, gaya ng iyong pangalan at impormasyon sa pakikipag-ugnay. Nangangahulugan ito na makikilala ka ng app at maaari nitong ipadala ang impormasyon ng iyong profile sa iba."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"mga sensor sa katawan (gaya ng mga heart rate monitor)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Pinapayagan ang app na i-access ang data mula sa mga sensor na ginagamit mo upang sukatin kung anong nangyayari sa iyong katawan, gaya ng heart rate."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"basahin ang iyong social stream"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Pinapayagan ang app na mag-access at mag-sync ng mga social na update mula sa iyo at sa iyong mga kaibigan. Maging maingat kapag nagbabahagi ng impormasyon -- pinapayagan nito ang app na magbasa ng mga pakikipag-ugnayan sa pagitan mo at ng iyong mga kaibigan sa mga social network, ano pa man ang katayuan sa pagiging kumpedensyal nito. Tandaan: hindi maaaring ipatupad ang pahintulot na ito sa lahat ng social network."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"magsulat sa iyong social stream"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Pinapayagan ang app na gamitin ang mababang antas na mga tampok ng SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"basahin ang buffer ng frame"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Pinapayagan ang app na basahin ang nilalaman ng buffer ng frame."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"i-access ang InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Nagbibigay-daan sa app na gumamit ng mga tampok ng InputFlinger sa mababang antas."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"mag-configure ng mga Wifi display"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Pinapayagan ang app na mag-configure at kumonekta sa mga Wifi display."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"magkontrol ng mga Wifi display"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Pinapayagan ang app na baguhin ang mga pandaigdigang setting ng audio gaya ng volume at kung aling speaker ang ginagamit para sa output."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"mag-record ng audio"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Pinapayagan ang app na mag-record ng audio gamit ang mikropono. Pinapayagan ng pahintulot na ito ang app na mag-record ng audio anumang oras nang wala ng iyong kumpirmasyon."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"pag-uusap sa sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Pinapahintulutang magpadala ang app ng mga command sa SIM. Napakapanganib nito."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"kumuha ng mga larawan at video"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Pinapayagan ang app na kumuha ng mga larawan at video gamit ang camera. Pinapayagan ng pahintulot na ito ang app na gamitin ang camera anumang oras nang wala ng iyong kumpirmasyon."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"i-disable ang LED na tagapagpahiwatig kapag ginagamit ang camera"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Pinapayagan ang app na kontrolin ang mga tampok ng telepono ng device. Maaaring lumipat ng mga network ang isang app na mayroong ganitong pahintulot, i-on o i-off ang radyo ng telepono at mga kaparehong bagay nang hindi ka nano-notify."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"basahin ang katayuan at pagkakakilanlan ng telepono"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Pinapayagan ang app na i-access ang mga tampok ng telepono ng device. Pinapayagan ng pahintulot na ito ang app na tukuyin ang numero ng telepono at  mga ID ng device, kung aktibo man ang isang tawag, at ang malayuang numerong ikinonekta ng isang tawag."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"basahin ang tiyak na katayuan ng telepono"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Binibigyang-daan ang app na ma-access ang tumpak na katayuan ng telepono. Nagbibigay-daan ang pahintulot na ito sa app na matukoy ang tunay na status ng tawag, kung aktibo ang isang tawag o nasa background, mga hindi natuloy na tawag, tumpak na status ng koneksyon sa data at hindi natuloy na pagkonekta sa data."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"pigilan ang tablet mula sa pag-sleep"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"pigilan ang telepono mula sa paghinto"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Pinapayagan ang app na pigilan ang tablet mula sa pag-sleep."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Baguhin ang katayuan ng WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Pinapayagan ang app na ikonekta ang tablet at idiskonekta ang tablet mula sa mga WiMAX network."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Pinapayagan ang app na ikonekta ang telepono at idiskonekta ang telepono mula sa mga WiMAX network."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"mga network ng score"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Nagbibigay-daan sa app na iranggo ang mga network at impluwensiyahan kung aling mga network ang dapat na piliin ng tablet."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Nagbibigay-daan sa app na iranggo ang mga network at impluwensiyahan kung aling mga network ang dapat na piliin ng telepono."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"ipares sa mga Bluetooth device"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Pinapayagan ang app na tingnan ang configuration ng Bluetooth sa tablet, at na gumawa at tumanggap ng mga koneksyong may mga nakapares na device."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Pinapayagan ang app na tingnan ang configuration ng Bluetooth sa telepono, at na gumawa at tumanggap ng mga koneksyong may mga nakapares na device."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Pinapayagan ang app na kumuha, sumuri, at mag-clear ng mga notification, kabilang ang mga na-post ng iba pang apps."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"mapailalim sa isang serbisyo ng notification listener"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Nagbibigay-daan sa may-ari na mapailalim sa interface sa tuktok na antas ng isang serbisyo ng notification listener. Hindi dapat kailanganin para sa karaniwang apps kahit kailan."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"i-bind sa isang serbisyo sa pagbibigay ng kundisyon"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Nagbibigay-daan sa naghahawak na i-bind ang top-level na interface ng isang serbisyo sa pagbibigay ng kundisyon. Hindi kailanman dapat kailanganin ng mga normal na app."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"paganahin ang app ng configuration na ibinigay ng carrier"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Nagbibigay-daan sa may-ari na paganahin ang app ng configuration na ibinigay ng carrier. Hindi dapat kailanganin para sa normal na apps kahit kailan."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"makinig sa mga obserbasyon sa mga kundisyon ng network"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Nagbibigay-daan sa isang application na makinig sa mga obserbasyon sa mga kundisyon ng network. Dapat na hindi kailanman kakailanganin para sa normal na apps."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"baguhin ang pag-calibrate ng input device"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Pinapayagan ang app na baguhin ang mga parameter sa pag-calibrate ng touch screen. Hindi dapat kailanganin sa normal na apps."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"access sa Mga DRM certificate"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Nagbibigay-daan sa isang application na makapagbigay at gumamit ng mga DRM certficate. Hindi dapat kailanman kailanganin para sa mga normal na app."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Magtakda ng mga panuntunan sa password"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kontrolin ang haba at mga character na pinapayagan sa mga password sa pag-unlock ng screen."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Subaybayan ang mga pagsubok sa pag-unlock ng screen"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Home"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Trabaho"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Iba pa"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Walang nakitang application upang matingnan ang contact na ito."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"I-type ang PIN code"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"I-type ang PUK at bagong PIN code"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Nagbibigay-daan sa isang application na i-access ang secure na storage ng keyguard."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Kontrolin ang pagpapakita at pagtago sa keyguard"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Pinapayagan ang isang application na kontrolin ang keyguard."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Makinig sa mga pagbabago sa estado ng trust."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Pinapayagan ang isang application na makinig para sa mga pagbabago sa estado ng trust."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Sumailalim sa isang serbisyo ng trust agent"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Pinapayagan ang isang application na sumailalim sa isang serbisyo ng trust agent."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Makipag-ugnay sa system ng pag-update at pagbawi"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Binibigyang-daan ang isang application na makipag-ugnay sa system ng pagbawi at mga pag-update ng system."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Pindutin nang dalawang beses para sa pagkontrol ng zoom"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Hindi maidagdag ang widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Pumunta"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Wallpaper"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Baguhin ang wallpaper"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Notification listener"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Nagbibigay ng kundisyon"</string>
     <string name="vpn_title" msgid="19615213552042827">"Naka-activate ang VPN"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Isinaaktibo ang VPN ng <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Pindutin upang pamahalaan ang network."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Pumili ng isang app"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Hindi mailunsad ang <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Ibahagi sa"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Ibahagi sa <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Hawakan sa pag-slide. Pindutin nang matagal."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Mag-slide pataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Mag-slide pababa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Mag-slide pakaliwa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Mag-slide pakanan para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"I-unlock"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Tahimik"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"I-on ang tunog"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Maghanap"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Mag-swipe upang i-unlock."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Mag-plug in ng isang headset upang marinig ang mga password key na binabanggit."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dot."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"System"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Audio sa Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Wireless display"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tapos na"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Output ng media"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Kumonekta sa device"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"I-cast ang screen sa device"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Naghahanap ng mga device…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Mga Setting"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Idiskonekta"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Nagsa-scan..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Kumukonekta..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Available"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Overlay #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", secure"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Nakakonekta ang wireless na display"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Lumalabas ang screen na ito sa isa pang device"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Kina-cast ang screen"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Kumokonekta sa <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Kina-cast ang screen"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Nakakonekta sa <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Alisin sa pagkakakonekta"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency na tawag"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Nakalimutan ang Pattern"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ina-unlock ang SIM card…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Hindi tamang PIN code."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Mag-type ng PIN na 4 hanggang 8 numero."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Dapat ay 8 numero o higit pa ang PUK code."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"8 numero dapat ang PUK code."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Muling ilagay ang tamang PUK code. Permanenteng hindi pagaganahin ang SIM ng mga paulit-ulit na pagtatangka."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Hindi tumutugma ang mga PIN code"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Masyadong maraming pagtatangka sa pattern"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Subukan muli sa <xliff:g id="COUNT">%d</xliff:g> seg"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Subukang muli sa ibang pagkakataon"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Mag-swipe pababa upang lumabas sa full screen"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Mag-swipe pababa mula sa itaas upang lumabas sa full screen."</string>
+    <string name="done_label" msgid="2093726099505892398">"Tapos na"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Pabilog na slider ng mga oras"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Pabilog na slider ng mga minuto"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Pumili ng mga oras"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Pumili ng mga minuto"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Grid ng mga araw ayon sa buwan"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Listahan ng taon"</string>
+    <string name="select_day" msgid="7774759604701773332">"Pumili ng buwan at araw"</string>
+    <string name="select_year" msgid="7952052866994196170">"Pumili ng taon"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Napili ang <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Tinanggal ang <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 99a137b..bd2f926 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Adsız&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"8 veya daha uzun basamaklı bir PUK kodu yazın."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM kartınızın PUK kilidi devrede. Kilidi açmak için PUK kodunu yazın."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Engellenen SIM kartı açmak için PUK2 kodunu yazın."</string>
+    <string name="enablePin" msgid="209412020907207950">"Başarısız. SIM/RUIM Kilidini etkinleştirin."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"SIM kilitlenmeden önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item>
+    <item quantity="other" msgid="7530597808358774740">"SIM kilitlenmeden önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Gelen Çağrı Kimliği"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Senk."</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Çok fazla <xliff:g id="CONTENT_TYPE">%s</xliff:g> silme var."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Tabletin depolama alanı dolu! Yer açmak için bazı dosyaları silin."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Saat depolama alanınız dolu. Lütfen yer boşaltmak için bazı dosyaları silin."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Telefonun depolama alanı dolu! Yer açmak için bazı dosyaları silin."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Ağ izlenebilir"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Bunu, bilinmeyen üçüncü taraflar yapabilir"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Telefon zili açık"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Kapanıyor…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Tabletiniz kapanacak."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Saatiniz kapatılacak."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefonunuz kapanacak."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Kapatmak istiyor musunuz?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Güvenli modda yeniden aç"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Uçak modu"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Uçak modu AÇIK"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Uçak modu KAPALI"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Ayarlar"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Güvenli mod"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android Sistemi"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"kısayolların yüklemesini kaldırma"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Uygulamaya, kullanıcının müdahalesi olmadan kısayolları Ana Ekrandan kaldırma izni verir."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"giden çağrıları yeniden yönlendir"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Uygulamaya, yapılan çağrıları işleme ve aranacak numarayı değiştirme izni verir. Bu izin, uygulamanın yapılan çağrıları izlemesine, yönlendirmesine ve önlemesine olanak sağlar."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Uygulamaya, giden bir çağrının numarası çevrilirken çağrıyı farklı bir numaraya yönlendirme ya da tamamen kapatma seçeneğiyle birlikte numarayı görme izni verir."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"kısa mesajları al (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Uygulamaya SMS mesajlarını alma ve işleme izni verir. Bu izin, uygulamanın cihazınıza gönderilen mesajları takip edip size göstermeden silebileceği anlamına gelir."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"kısa mesajları (MMS) al"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Uygulamaya, etkin pencerenin içeriğini alma izni verir. Kötü amaçlı uygulamalar tüm pencere içeriğini alabilir ve şifreleri hariç tüm metni inceleyebilir."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"erişilebilirliği geçici olarak etkinleştir"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Uygulamaya, cihazda erişilebilirliği geçici olarak etkinleştirme izni verir. Kötü amaçlı uygulamalar, kullanıcının izni olmadan erişilebilirliği etkinleştirebilirler."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"pencere bilgilerini al"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Uygulamaya, pencere yöneticisinden pencerelerle ilgili bilgi alma izni verir. Zararlı uygulamalar dahili sistem kullanımına yönelik bilgileri alabilir."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"pencere kodunu alma"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Bir uygulamanın pencere kodunu almasına izin verir. Zararlı uygulamalar, uygulama penceresi yerine geçme sistemiyle yetkisiz etkileşim gerçekleştirebilir."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"çerçeve istatistiklerini alma"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Bir uygulamanın çerçeve istatistikleri toplamasına izin verir. Zararlı uygulamalar, diğer uygulamalardan pencerelerin çerçeve istatistiklerini alabilirler."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"etkinlikleri filtrele"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Uygulamaya, tüm kullanıcı etkinlikleri dağıtılmadan önce ilgili akışa filtre uygulayan bir giriş filtresi kaydetme izni verir. Zararlı uygulamalar kullanıcı müdahalesi olmadan sistem arayüzünü denetleyebilir."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"ekranı büyüt"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Uygulamaya bir ekranın içeriğini büyütme izni verir. Kötü amaçlı uygulamalar ekranın içeriğini etkileyerek cihazı kullanılmaz hale getirebilir."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"kısmi kapatma"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Eylem yöneticisini kapalı duruma getirir. Tam kapatma işlemi gerçekleştirmez."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"uygulama değişimlerini engelle"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Uygulamaya, SMS mesajı alındığına dair bildirim yayınlama izni verir. Kötü amaçlı uygulamalar sahte SMS mesajları göndermek için bunu kullanabilir."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"WAP-PUSH ile alınan yayın gönder"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Uygulamaya, WAP PUSH mesajı alındığına dair bildirim yayınlama izni verir. Kötü amaçlı uygulamalar sahte MMS bildirimleri oluşturmak veya bir web sayfasının içeriğini sessiz şekilde zararlı öğelerle değiştirmek için bunu kullanabilir."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"ağları puanlama yayını gönderme"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Uygulamaya, ağların puanlanması gerektiği bildirimini yayınlama izni verir. Normal uygulamalar için hiçbir zaman gerekmez."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"çalışan işlem sayısını sınırla"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Uygulamaya, çalışacak süreçlerin azami sayısını denetleme izni verir. Normal uygulamalar için gerekli değildir."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"arka plan uygulamaları kapanmaya zorla"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Cihazın sahibine bir VPN hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"bir duvar kağıdına tabi kıl"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Cihazın sahibine, duvar kağıdının en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"bir ses etkileşimi hizmetine bağlanma"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"İzin sahibinin, bir ses etkileşimi hizmetine ait üst düzey arayüze bağlanmasına izin verir. Normal uygulamalar için hiçbir zaman gerekli değildir."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"uzak ekrana bağlan"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"İzin sahibine, bir uzak ekranın en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bir widget hizmetine bağla"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Cihazın sahibine bir widget hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"rota sağlayıcı hizmetine bağlanma"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"İzin verilen uygulamaya tüm kayıtlı rota sağlayıcılarına bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"bir cihaz yöneticisi ile etkileşimde bulun"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Cihazın sahibinin cihaz yöneticisine amaç göndermesine izin verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"TV girişine bağlanma"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"İzin sahibine, bir TV girişinin en üst düzey arayüzüne bağlanma olanağı verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"cihaz yöneticisi ekle veya kaldır"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"İzin sahibine, etkin cihaz yöneticileri ekleyip kaldırma izni verir. Normal uygulamalar için hiçbir zaman gerekmez."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"ekran yönünü değiştir"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Uygulamaya, oynatma kodunu çözmek için herhangi bir yüklü medya kod çözücüyü kullanma izni verir."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"güvenilen kimlik bilgilerini yönetme"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Uygulamaya, güvenilir kimlik bilgileri olarak CA sertifikaları yükleme veya sertifikaların yüklemelerini kaldırma izni verir."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"boşta kaldığında uygulamayı çalıştır"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Bu izin, cihaz kullanımda değilken Android sistemin uygulamayı arka planda çalıştırmasına olanak sağlar."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"sahibi tanılama olan kaynakları oku/bunlara yaz"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Uygulamaya, tanılama grubunun sahip olduğu tüm kaynaklara (örneğin /dev içindeki dosyalar) okuma ve yazma izni verir. Bu işlevin sistem kararlılığını ve güvenliğini olumsuz etkileme olasılığı vardır. Üretici veya operatör tarafından YALNIZCA donanıma özgü tanılama için kullanılmalıdır."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"uygulama bileşenlerini etkinleştir veya devre dışı bırak"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Uygulamaya adınız ve iletişim bilgileriniz gibi cihazınızda saklanan kişisel profil bilgilerini okuma izni verir. Bu izin, uygulamanın sizi tanımlayabileceği ve profil bilgilerinizi başkalarına gönderebileceği anlamına gelir."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"kendi kişi kartınızı değiştirme"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Uygulamaya adınız ve iletişim bilgileriniz gibi cihazınızda saklanan kişisel profil bilgilerini değiştirme veya bunlara ekleme yapma izni verir. Bu izin, uygulamanın sizi tanımlayabileceği ve profil bilgilerinizi başkalarına gönderebileceği anlamına gelir."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"vücut sensörleri (kalp atış hızı takip cihazları gibi)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Uygulamanın, kalp atış hızınız gibi vücudunuzla ilgili olayları ölçmek için kullandığınız sensörlerden gelen verilere erişmesine izin verir."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"sosyal akışınızı okuma"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Uygulamaya size veya arkadaşlarınıza ait sosyal güncellemelere erişme ve bunları senkronize etme izni verir. Bilgi paylaşırken dikkatli olun. Bu izin, uygulamanın sosyal ağlarda sizinle arkadaşlarınız arasındaki iletişimi, gizliliğine bakılmaksızın okumasına olanak sağlar. Not: Bu izin tüm sosyal ağlar için geçerli olmayabilir."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"sosyal akışınıza yazma"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Uygulamaya, SurfaceFlinger\'a ait düşük düzey özellikleri kullanma izni verir."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"çerçeve arabelleğini oku"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Uygulamaya, çerçeve arabelleğinin içeriğini okuma izni verir."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"InputFlinger\'a eriş"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Uygulamaya, alt düzey InputFlinger özelliklerini kullanma izni verir."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"Kablosuz ekranları yapılandır"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Uygulamaya kablosuz ekranları yapılandırma ve bunlara bağlanma izni verir."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"Kablosuz ekranları denetle"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Uygulamaya ses düzeyi ve ses çıkışı için kullanılan hoparlör gibi genel ses ayarlarını değiştirme izni verir."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ses kaydet"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Uygulamaya mikrofonla ses kaydetme izni verir. Bu izin, uygulamanın istediği zaman onayınız olmadan ses kaydetmesine olanak sağlar."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"sim iletişimi"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Uygulamanın SIM karta komut göndermesine izin verir. Bu izin çok tehlikelidir."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"resim çekme ve görüntü kaydetme"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Uygulamaya kamerayla fotoğraf ve video çekme izni verir. Bu izin, uygulamanın sizin onayınız olmadan istediği zaman kamerayı kullanmasına olanak sağlar."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"Kamera kullanımda iken iletim göstergesi LED\'ini devre dışı bırak"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Uygulamaya, cihazın telefon özelliklerini kontrol etme izni verir. Bu izne sahip bir uygulama sizi hiç uyarmadan ağlar arasında geçiş, telefonun radyosunu açıp kapatma ve benzeri işlemler yapabilir."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"telefonun durumunu ve kimliğini okuma"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Uygulamaya cihazdaki telefon özelliklerine erişme izni verir. Bu izin, uygulamanın telefon numarasını ve cihaz kimliğini, etkin bir çağrı olup olmadığını ve çağrıda bağlanılan karşı tarafın numarasını öğrenmesine olanak sağlar."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"telefon durum bilgilerini hassas bir şekilde oku"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Uygulamanın, telefonun durum bilgilerine hassas bir şekilde erişmesine izin verir. Bu izin sayesinde uygulama, gerçek çağrı durumunu, çağrının aktif mi yoksa arka planda mı olduğunu, çağrının başarısız olup olmadığını, veri bağlantısı durumuyla ilgili hassas bilgileri ve veri bağlantısının başarısız olup olmadığını belirleyebilir."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"tabletin uykuya geçmesini önle"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"telefonun uykuya geçmesini önleme"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Uygulamaya, tabletin uykuya geçmesini önleme izni verir."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"WiMAX durumunu değiştir"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Uygulamaya, tableti WiMAX ağlarına bağlanma veya bağlantıyı kesme izni verir."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Uygulamaya, telefonu WiMAX ağlarına bağlanma veya bağlantıyı kesme izni verir."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"ağları puanlama"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Uygulamaya, ağları sıralama ve tabletin tercih edeceği ağları etkileme izni verir."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Uygulamaya, ağları sıralama ve telefonunun tercih edeceği ağları etkileme izni verir."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"Bluetooth cihazlarla eşle"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Uygulamaya, tabletteki Bluetooth yapılandırmasını görüntüleme, eşleştirilmiş cihazlarla bağlantı yapma ve bu tür bağlantıları kabul etme izni verir."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Uygulamaya, telefondaki Bluetooth yapılandırmasını görüntüleme, eşleştirilmiş cihazlarla bağlantı yapma ve bu tür bağlantıları kabul etme izni verir."</string>
@@ -638,7 +691,7 @@
     <string name="permdesc_readDictionary" msgid="659614600338904243">"Uygulamaya, kullanıcının kullanıcı sözlüğünde depolamış olabileceği kelimeleri, adları ve kelime öbeklerini okuma izni verir."</string>
     <string name="permlab_writeDictionary" msgid="2183110402314441106">"kullanıcı tanımlı sözlüğe kelime ekle"</string>
     <string name="permdesc_writeDictionary" msgid="8185385716255065291">"Uygulamaya, kullanıcı sözlüğüne yeni kelimeler yazma izni verir."</string>
-    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"USB belleğimin içeriğini oku"</string>
+    <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"USB belleğini okuma"</string>
     <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"SD kartımın içeriğini oku"</string>
     <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Uygulamaya, USB depolama biriminizin içeriğini okuma izni verir."</string>
     <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Uygulamaya, SD kartınızın içeriğini okuma izni verir."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Uygulamanın bildirimler almasına, bildirimleri incelemesine ve temizlemesine izin verir. Buna diğer uygulamalar tarafından yayınlanan bildirimler de dahildir."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bildirim dinleyici hizmetine bağlan"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"İzin sahibine bir bildirim dinleyici hizmetinin en üst düzey arayüzüne bağlanma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"bir durum sağlayıcı hizmetine bağlanma"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"İzin sahibinin, bir durum sağlayıcı hizmete ait üst düzey arayüze bağlanmasına izin verir. Normal uygulamalar için hiçbir zaman gerekli değildir."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"operatör tarafından sağlanan yapılandırma uygulamasını çalıştır"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"İzin sahibine, operatör tarafından sağlanan yapılandırma uygulamasını çalıştırma izni verir. Normal uygulamalarda hiçbir zaman gerek duyulmaz."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"ağ koşullarındaki gözlemleri dinle"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Bir uygulamaya, ağ koşullarındaki gözlemleri dinleme izni verir. Normal uygulamalar için hiçbir zaman gerekmez."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"giriş cihazı kalibrasyonunu değiştir"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Uygulamaya, dokunmatik ekranın kalibrasyon parametrelerini değiştirme izni verir. Normal uygulamalar için hiçbir zaman gerekmez."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"DRM sertifikalarına eriş"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Bir uygulamanın DRM sertifikaları için temel hazırlık yapmasına ve bunları kullanmasına izin verir. Normal uygulamalar için hiçbir zaman gerekmez."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Şifre kuralları ayarla"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Ekran kilidini açma şifrelerinde izin verilen uzunluğu ve karakterleri denetleme."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Ekran kilidini açma denemelerini izle"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Ev"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"İş"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Diğer"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Bu kişiyi görüntüleyecek uygulama bulunamadı."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN kodunu yazın"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK ve yeni PIN kodunu yazın"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kodu"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Bir uygulamanın tuş kilitli güvenli depolamaya erişimine izin verir."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Tuş koruyucuyu görüntülemeyi ve gizlemeyi kontrol et"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Bir uygulamaya tuş koruyucuyu denetleme izni verir."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Güven durumundaki değişiklileri dinle."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Bir uygulamanın, güven durumundaki değişiklikleri dinlemesine izin verir."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Güven aracı hizmetine bağlan"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Bir uygulamanın, güven aracı hizmetine bağlanmasına izin verir."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Güncelleme ve kurtarma sistemiyle etkileşim kur"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Bir uygulamaya, kurtarma sistemi ve sistem güncellemeriyle etkileşim kurma izni verir."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Yakınlaştırma denetimi için iki kez dokunun"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Widget eklenemedi."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Git"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Duvar Kağıdı"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Duvar kağıdını değiştir"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Bildirim dinleyici"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Durum sağlayıcı"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN etkinleştirildi"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN, <xliff:g id="APP">%s</xliff:g> tarafından etkinleştirildi"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Ağı yönetmek için dokunun."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"ÜstKrkt"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Giriş"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Bir uygulama seçin"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> başlatılamadı"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Şununla paylaş:"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ile paylaş"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Kayan tutma yeri. Dokunun ve basılı tutun."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı kaydırın."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için aşağı kaydırın."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sola kaydırın."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sağa kaydırın."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Kilidi aç"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Sessiz"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Ses açık"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Ara"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Kilidi açmak için kaydırın."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Şifre tuşlarının sesli okunmasını dinlemek için mikrofonlu kulaklık takın."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Nokta."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Sistem"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Bluetooth ses"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Kablosuz ekran"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Tamamlandı"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Medya çıkışı"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Cihaza bağlanın"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Ekranı cihaza yayınlayın"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Cihaz aranıyor…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Ayarlar"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Bağlantıyı kes"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Taranıyor..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Bağlanılıyor..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Kullanılabilir"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Yer Paylaşımı No. <xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", güvenli"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Kablosuz ekrana bağlandı"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Bu ekran başka bir cihazda gösteriliyor"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Ekran yayınlanıyor"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"<xliff:g id="NAME">%1$s</xliff:g> bağlantısı yapılıyor"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Ekran yayınlanıyor"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"<xliff:g id="NAME">%1$s</xliff:g> bağlantısı yapıldı"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Bağlantıyı kes"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Acil durum çağrısı"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Deseni Unuttunuz mu?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kart kilidi açılıyor…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PIN kodu."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-8 rakamdan oluşan bir PIN girin."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodu 8 veya daha çok basamaklı bir sayı olmalıdır."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK kodu 8 basamaklı bir sayı olmalıdır."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Doğru PUK kodunu tekrar girin. Çok sayıda deneme yapılırsa SIM kart kalıcı olarak devre dışı bırakılır."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodları eşleşmiyor"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Çok fazla sayıda desen denemesi yapıldı"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> saniye içinde tekrar deneyin"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Daha sonra tekrar deneyin"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Tam ekrandan çıkmak için aşağıya hızlıca kaydırın"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Tam ekrandan çıkmak için yukarıdan aşağıya hızlıca kaydırın."</string>
+    <string name="done_label" msgid="2093726099505892398">"Bitti"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Saat kaydırma çemberi"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Dakika kaydırma çemberi"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Saati seçin"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Dakikayı seçin"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Ayın günleri tablosu"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Yıl listesi"</string>
+    <string name="select_day" msgid="7774759604701773332">"Ayı ve günü seçin"</string>
+    <string name="select_year" msgid="7952052866994196170">"Yılı seçin"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"<xliff:g id="ITEM">%1$s</xliff:g> seçildi"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> silindi"</string>
 </resources>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 61f45ec..d01c5776 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"Тб"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"Пб"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Без назви&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">".."</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Введіть PUK-код із 8 або більше цифр."</string>
     <string name="needPuk" msgid="919668385956251611">"SIM-карта заблок. PUK-кодом. Введіть PUK-код, щоб її розблок."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Введ. PUK2, щоб розбл. SIM-карту."</string>
+    <string name="enablePin" msgid="209412020907207950">"Помилка. Увімкніть блокування SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"У вас залишилась <xliff:g id="NUMBER">%d</xliff:g> спроба. Після цього SIM-карту буде заблоковано."</item>
+    <item quantity="other" msgid="7530597808358774740">"У вас залишилося стільки спроб: <xliff:g id="NUMBER">%d</xliff:g>. Після цього SIM-карту буде заблоковано."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Вхідн. ід. абонента"</string>
@@ -130,8 +157,9 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Синхр."</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Забагато видалень <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Пам’ять планшетного ПК заповнено. Видаліть якісь файли, щоб звільнити місце."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Пам’ять годинника заповнено. Видаліть файли, щоб звільнити місце."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Пам’ять телефону заповнено. Видаліть якісь файли, щоб звільнити місце."</string>
-    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Мережу можуть відстежувати"</string>
+    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Мережа може відстежуватися"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Невідомою третьою стороною"</string>
     <string name="ssl_ca_cert_noti_managed" msgid="4030263497686867141">"Доменом <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>"</string>
     <string name="me" msgid="6545696007631404292">"Я"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Дзвінок увімкнено"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Вимкнення..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Ваш пристрій буде вимкнено."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Годинник буде вимкнено."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ваш телефон буде вимкнено."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Вимкнути?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Перейти в безпечний режим"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Режим польоту"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Режим польоту ВВІМК."</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Режим польоту ВИМК."</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Налаштування"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Безп. режим"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Система Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"видаляти ярлики"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Дозволяє програмі самостійно вилучати ярлики з головного екрана."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"переадресовувати вихідні виклики"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Дозволяє програмі обробляти вихідні дзвінки та змінювати номер для виклику. Такий дозвіл дає програмі змогу відстежувати, переадресовувати чи блокувати вихідні дзвінки."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Дозволяє додатку читати номер вихідного дзвінка, переспрямовувати дзвінок на інший номер або переривати його."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"отримувати текстові повідомлення (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Дозволяє програмі отримувати й обробляти SMS-повідомлення. Це означає, що програма може відстежувати чи видаляти повідомлення, надіслані на ваш пристрій, навіть не показуючи їх вам."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"отримувати текстові повідомлення (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Дозволяє програмі отримувати вміст активного вікна. Шкідливі програми можуть отримувати весь вміст вікна та вивчати весь його текст, окрім паролів."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"тимчасово вмикати доступність"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Дозволяє програмі тимчасового вмикати доступність на пристрої. Шкідливі програми можуть вмикати доступність без згоди користувача."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"отримувати інформацію про вікна"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Дозволяє програмі отримувати інформацію про вікна від диспетчера вікон. Шкідливі програми можуть отримувати інформацію, яка призначена для внутрішнього користування системи."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"отримувати маркер вікна"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Дозволяє додатку отримувати маркер вікна. Шкідливі додатки можуть без дозволу взаємодіяти з вікном додатка, видаючи себе за систему."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"отримувати статистику частоти кадрів"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Дозволяє додатку збирати статистику частоти кадрів. Шкідливі додатки можуть відстежувати частоту кадрів у вікнах інших додатків."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"фільтрувати події"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Дозволяє програмі реєструвати вхідний фільтр, який фільтрує потік усіх подій користувача перед їх надсиланням. Шкідливі програми можуть контролювати інтерфейс системи без втручання користувача."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"збільшити екран"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Дозволяє програмі збільшувати вміст екрана. Зловмисні програми можуть змінювати вміст екрана так, що пристроєм стає неможливо користуватися."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"частк. заверш. роб."</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Переводить диспетчер дій у стан завершення роботи. Не виконує повне завершення роботи."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"запобіг. зміні програм"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Дозволяє програмі передавати сповіщення про отримання SMS повідомлення. Шкідливі програми можуть використовувати це для підробки вхідних SMS повідомлень."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"надсил. запис, отр. через WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Дозволяє програмі передавати сповіщення про отримання повідомлення WAP PUSH. Шкідливі програми можуть використовувати це для підробки отримання MMS повідомлень або для непомітної заміни вмісту будь-якої веб-сторінки шкідливими варіантами."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"надсилати сповіщення про оцінку мереж"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Дозволяє додатку передавати сповіщення про оцінку мереж. Ніколи не застосовується для звичайних додатків."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"обмежувати кількість запущ. процесів"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Дозволяє програмі контролювати максимальну кількість процесів, які буде запущено. Ніколи не вимагається для звичайних програм."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"примусово закривати фонові програми"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня служби VPN. Ніколи не застосовується для звичайних програм."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"прив’язати до фонового малюнка"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Дозволяє власнику прив’язуватися до інтерфейсу верхнього рівня фонового малюнка. Ніколи не застосовується для звичайних програм."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"підключитися до служби голосової взаємодії"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Додаток зможе підключатися до інтерфейсу верхнього рівня служби голосової взаємодії. Звичайні додатки ніколи не використовують цей дозвіл."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"прив’язуватися до віддаленого екрана"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня віддаленого екрана. Ніколи не застосовується для звичайних програм."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"прив\'язувати до служби віджетів"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Дозволяє власникові прив’язуватися до інтерфейсу верхнього рівня служби віджетів. Ніколи не застосовується для звичайних програм."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"підключитися до служби постачання маршрутів"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Дозволяє власникові підключатися до зареєстрованих постачальників маршрутів. Звичайні додатки ніколи не використовують цей дозвіл."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"взаємодіяти з адмін. пристрою"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Дозволяє власнику надсилати задавані функції адміністратору пристрою. Ніколи не застосовується для звичайних програм."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"підключатися до TV-входу"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Додаток зможе підключатися до інтерфейсу верхнього рівня TV-входу. Звичайні додатки ніколи не використовують цей дозвіл."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"додавати чи вилучати адміністраторів пристрою"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Дозволяє власнику додавати чи вилучати активних адміністраторів пристрою. Ніколи не застосовується для звичайних програм."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"змінювати орієнтацію екрана"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Дозволяє програмі використовувати будь-який установлений медіа-декодер для декодування з метою відтворення."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"керувати захищеними обліковими даними"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Дозволяє програмі встановлювати та видаляти сертифікати центру сертифікації (CA) як захищені облікові дані."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"запускати додаток, коли пристрій неактивний"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Маючи цей дозвіл, система Android може запускати додаток у фоновому режимі, коли пристрій не використовується."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"чит./зап. на ресури., якими вол. діаг."</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Дозволяє програмі читати та писати на будь-який ресурс, яким володіє діагностична група; наприклад, у файли в папці /dev. Це потенційно може вплинути на стабільність і безпеку системи. Потрібно використовувати ЛИШЕ для певної діагностики обладнання, яку виконує виробник чи оператор."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"вмикати чи вимикати компоненти програми"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Дозволяє програмі читати особисту інформацію профілю, збережену на пристрої, як-от ваше ім’я та контактну інформацію. Це означає, що програма може ідентифікувати вашу особу та надсилати дані вашого профілю іншим."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"змінювати картки контактів"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Дозволяє програмі змінювати чи додавати особисту інформацію профілю, збережену на пристрої, як-от ваше ім’я та контактну інформацію. Це означає, що програма може ідентифікувати вашу особу та надсилати дані вашого профілю іншим."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"датчики на тілі (як-от пульсометр)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Дозволяє додатку отримувати дані з датчиків, які вимірюють фізіологічні процеси, як-от пульс."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"читати ваш соціальний потік"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Дозволяє програмі отримувати доступ до оновлень із соціальних мереж від вас і ваших друзів та синхронізувати їх. Будьте обережні, надаючи доступ до інформації – це дозволяє програмі читати повідомлення, якими ви та ваші друзі обмінювалися в соціальних мережах, незалежно від конфіденційності. Зауважте: цей дозвіл не можна застосовувати в усіх соціальних мережах."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"писати у ваш соціальний потік"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Дозволяє програмі використовувати низькорівневі функції SurfaceFlinger."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"читати фрейм-буфер"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Дозволяє програмі читати вміст буфера кадрів."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"отримувати доступ до InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Дозволяє програмі використовувати низькорівневі функції InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"налаштувати екрани Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Дозволяє програмі налаштовувати екрани Wi-Fi і під’єднуватися до них."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"керувати екранами Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Дозволяє програмі змінювати загальні налаштування звуку, як-от гучність і динамік, який використовується для виводу сигналу."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"запис-ти аудіо"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Дозволяє програмі записувати звук за допомогою мікрофона. Такий дозвіл дає програмі змогу будь-коли записувати звук без вашого підтвердження."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"комунікація із SIM-картою"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Дозволяє програмі надсилати команди на SIM-карту. Це дуже небезпечно."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"фотограф. та знімати відео"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Дозволяє програмі фотографувати та знімати відео за допомогою камери. Такий дозвіл дає програмі змогу будь-коли використовувати камеру без вашого підтвердження."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"вимикати світлодіодний індикатор передавання, коли використовується камера"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Дозволяє програмі контролювати телефонні функції пристрою. Програма з цим дозволом може переключати мережі, вмикати та вимикати радіо в телефоні тощо без вашого відома."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"читати статус та ідентифікаційну інформацію телефону"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Дозволяє програмі отримувати доступ до телефонних функцій пристрою. Такий дозвіл дає програмі змогу визначати номер телефону й ідентифікатори пристрою, активність виклику, а також віддалений номер, на який здійснюється виклик."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"читати точні статуси телефону"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Дозволяє додатку отримувати доступ до статусів телефону. Цей дозвіл дає додатку змогу визначати статус виклику (активний чи у фоновому режимі), помилки викликів, точний статус передавання даних і помилки передавання даних."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"не доп.перехід пристр.в реж.сну"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"недоп. перехід тел. в реж. сну"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Дозволяє програмі не допускати перехід планшетного ПК у режим сну."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Змінити стан WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Дозволяє програмі під’єднувати планшетний ПК до мереж WiMAX і від’єднувати його від них."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Дозволяє програмі під’єднувати телефон до мереж WiMAX і від’єднувати його від них."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"оцінювати мережі"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Дозволяє додатку оцінювати мережі та впливати на вибір мережі планшетом."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Дозволяє додатку оцінювати мережі та впливати на вибір мережі телефоном."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"створювати пару з пристроями Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Дозволяє програмі переглядати конфігурацію Bluetooth на планшетному ПК, а також створювати та приймати з’єднання зі спареними пристроями."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Дозволяє програмі переглядати конфігурацію Bluetooth на телефоні, а також створювати та приймати з’єднання зі спареними пристроями."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Дозволяє програмі отримувати, перевіряти й очищати сповіщення, зокрема опубліковані іншими програмами."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"прив’язуватися до служби читання сповіщень"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Дозволяє власнику прив’язуватися до інтерфейсу верхнього рівня служби читання сповіщень. Ніколи не застосовується для звичайних програм."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"підключитися до служби постачання умов"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Додаток зможе підключатися до інтерфейсу верхнього рівня служби постачання умов. Звичайні додатки ніколи не використовують цей дозвіл."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"викликати надану оператором програму конфігурації"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Дозволяє власнику викликати надану оператором програму конфігурації. Ніколи не застосовується для звичайних програм."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"прослуховувати дані спостережень за станом мережі"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Дозволяє програмі прослуховувати дані спостережень за станом мережі. Ніколи не застосовується для звичайних програм."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"змінювати калібрування пристрою введення"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Програма може змінювати параметри калібрування сенсорного екрана. Ніколи не застосовується для звичайних програм."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"отримувати доступ до сертифікатів DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Дозволяє додатку надавати та використовувати сертифікати DRM. Ніколи не застосовується для звичайних додатків."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Устан. правила пароля"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Контролювати довжину паролів для розблокування екрана та дозволені в них символи."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Відстежув. спроби розблок. екрана"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Головна"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Робоча"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Інша"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Не знайдено програму для перегляду цього контакта."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Введіть PIN-код"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Введіть PUK-код і новий PIN-код"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-код"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Дозволяє програмі отримувати доступ до безпечного сховища через клавіатуру."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Керувати відображенням і хованням клавіатури"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Дозволяє програмі керувати клавіатурою."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Відстежувати зміни в стані довіри."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Дозволяє додатку відстежувати зміни в стані довіри."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Прив’язуватися до служби довірчих агентів"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Дозволяє додатку прив’язуватися до служби довірчих агентів."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Взаємодіяти з оновленнями системи та системою відновлення."</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Дозволяє додатку взаємодіяти із системою відновлення й оновленнями системи."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Двічі торкніться, щоб керувати масштабом"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Не вдалося додати віджет."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Йти"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Фоновий мал."</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Змінити фоновий малюнок"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Служба читання сповіщень"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Постачальник умов"</string>
     <string name="vpn_title" msgid="19615213552042827">"Мережу VPN активовано"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"Мережу VPN активовано програмою <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Торкніться, щоб керувати мережею."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Вибрати програму"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Не вдалося запустити програму <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Надіслати через"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Надіслати через <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Вказівник-повзунок. Торкніться й утримуйте."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Проведіть пальцем угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Проведіть пальцем униз, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Проведіть пальцем ліворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Проведіть пальцем праворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Розблокувати"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Без звуку"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Увімкнути звук"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Гортайте, щоб розблокувати."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Підключіть гарнітуру, щоб прослухати відтворені вголос символи пароля."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Крапка."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Система"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Аудіо Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Бездротовий екран"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Готово"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Вивід медіа-даних"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Під’єднатися до пристрою"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Транслювати екран на пристрій"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Пошук пристроїв…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Налаштування"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Від’єднатися"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Сканування..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"З’єднання..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Доступно"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Накладання №<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>х<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", безпечний"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Бездротовий екран під’єднано"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Цей екран відображається на іншому пристрої"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Транслювання екрана"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"<xliff:g id="NAME">%1$s</xliff:g> – під’єднання"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Транслювання екрана"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"<xliff:g id="NAME">%1$s</xliff:g> – під’єднано"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Від’єднати"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Екстрений виклик"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Не пам’ятаю ключ"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Розблокування SIM-карти…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправильний PIN-код."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введіть PIN-код із 4–8 цифр."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код має складатися зі щонайменше 8 цифр."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK-код має складатися з 8 цифр."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Повторно введіть правильний PUK-код. Численні спроби назавжди вимкнуть SIM-карту."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-коди не збігаються"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Забагато спроб намалювати ключ"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Спробуйте пізніше"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Проведіть пальцем зверху вниз, щоб вийти з повноекранного режиму."</string>
+    <string name="done_label" msgid="2093726099505892398">"Готово"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Вибір годин на циферблаті"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Вибір хвилин на циферблаті"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Виберіть години"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Виберіть хвилини"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Вікно вибору дати"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Меню вибору року"</string>
+    <string name="select_day" msgid="7774759604701773332">"Виберіть місяць і день"</string>
+    <string name="select_year" msgid="7952052866994196170">"Виберіть рік"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Вибрано: <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> видалено"</string>
 </resources>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index 82752b7..24b2db5 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Không có tiêu đề&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Nhập PUK có từ 8 số trở lên."</string>
     <string name="needPuk" msgid="919668385956251611">"Thẻ SIM của bạn đã bị khóa PUK. Nhập mã PUK để mở khóa thẻ SIM đó."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Nhập mã PUK2 để bỏ chặn thẻ SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Không thành công, kích hoạt tính năng khóa SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi SIM bị khóa."</item>
+    <item quantity="other" msgid="7530597808358774740">"Bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi SIM bị khóa."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"Số gọi đến"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Đồng bộ hóa"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Quá nhiều lần xóa <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Bộ nhớ máy tính bảng đã đầy. Hãy xóa một số tệp để tạo thêm dung lượng."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Bộ nhớ đồng hồ đã đầy. Hãy xóa một số tệp để giải phóng dung lượng."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Bộ nhớ điện thoại đã đầy. Hãy xóa một số tệp để tạo thêm dung lượng."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Mạng có thể được giám sát"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Bởi một bên thứ ba không xác định"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Bật chuông"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Đang tắt…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Máy tính bảng của bạn sẽ tắt."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Đồng hồ của bạn sẽ tắt."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Điện thoại của bạn sẽ tắt."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Bạn có muốn tắt không?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Khởi động lại ở chế độ an toàn"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Chế độ trên máy bay"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Chế độ trên máy bay BẬT"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Chế độ trên máy bay TẮT"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Cài đặt"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Chế độ an toàn"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Hệ thống Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"gỡ cài đặt lối tắt"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Cho phép ứng dụng xóa lối tắt trên Màn hình chính mà không cần sự can thiệp của người dùng."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"định tuyến lại cuộc gọi đi"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Cho phép ứng dụng xử lý cuộc gọi đi và thay đổi số được gọi. Quyền này cho phép ứng dụng theo dõi, chuyển hướng hoặc chặn cuộc gọi đi."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Cho phép ứng dụng xem số được gọi trong một cuộc gọi đi với tùy chọn chuyển hướng cuộc gọi đến một số khác hoặc hủy cuộc gọi đó hoàn toàn."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"nhận tin nhắn văn bản (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Cho phép ứng dụng nhận và xử lý tin nhắn SMS. Điều này có nghĩa là ứng dụng có thể theo dõi hoặc xóa tin nhắn được gửi đến thiết bị của bạn mà không hiển thị chúng cho bạn."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"nhận tin nhắn văn bản (MMS)"</string>
@@ -310,26 +340,28 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Cho phép ứng dụng truy xuất nội dung của cửa sổ hiện hành. Ứng dụng độc hại có thể truy xuất toàn bộ nội dung của cửa sổ cũng như xem xét toàn bộ văn bản của cửa sổ ngoại trừ mật khẩu."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"tạm thời bật trợ năng"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Cho phép ứng dụng tạm thời bật trợ năng trên thiết bị. Các ứng dụng độc hại có thể bật trợ năng mà không có sự đồng ý của người dùng."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"truy xuất thông tin cửa sổ"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Cho phép ứng dụng truy xuất thông tin về các cửa sổ từ trình quản lý cửa sổ. Các ứng dụng độc hại có thể truy xuất thông tin được dành để sử dụng trong hệ thống nội bộ."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"truy xuất mã thông báo cửa sổ"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Cho phép một ứng dụng truy xuất mã thông báo cửa sổ. Các ứng dụng độc hại có thể thực hiện hoạt động tương tác trái phép với cửa sổ ứng dụng mạo danh hệ thống."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"truy xuất số liệu thống kê về khung"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Cho phép một ứng dụng thu thập số liệu thống kê về khung. Ứng dụng độc hại có thể quan sát số liệu thống kê về khung của cửa sổ từ ứng dụng khác."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"lọc sự kiện"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Cho phép ứng dụng đăng ký bộ lọc dữ liệu nhập để lọc luồng tất cả các sự kiện người dùng trước khi chúng được gửi đi. Ứng dụng độc hại có thể kiểm soát Giao diện người dùng hệ thống mà không cần sự can thiệp của người dùng."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"thu phóng màn hình"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Cho phép ứng dụng thu phóng nội dung trên màn hình. Ứng dụng độc hại có thể biến đổi nội dung trên màn hình theo cách kết xuất thiết bị không thể sử dụng được."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"tắt từng phần"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Đặt trình quản lý hoạt động sang trạng thái tắt. Không thực hiện tắt hoàn toàn."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"ngăn chuyển đổi ứng dụng"</string>
     <string name="permdesc_stopAppSwitches" msgid="8262195802582255021">"Ngăn người dùng chuyển sang ứng dụng khác."</string>
     <string name="permlab_getTopActivityInfo" msgid="2537922311411546016">"truy cập thông tin ứng dụng hiện tại"</string>
     <string name="permdesc_getTopActivityInfo" msgid="2512448855496067131">"Cho phép chủ sở hữu truy xuất thông tin cá nhân về ứng dụng hiện tại ở nền trước của màn hình."</string>
-    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"giám sát và kiểm soát tất cả hoạt động khởi chạy ứng dụng"</string>
-    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Cho phép ứng dụng giám sát và kiểm soát cách hệ thống khởi chạy các hoạt động. Ứng dụng độc hại hoàn toàn có thể làm tổn hại hệ thống. Quyền này chỉ cần cho mục đích phát triển, không dành cho mục đích sử dụng thông thường."</string>
+    <string name="permlab_runSetActivityWatcher" msgid="892239094867182656">"giám sát và kiểm soát tất cả hoạt động chạy ứng dụng"</string>
+    <string name="permdesc_runSetActivityWatcher" msgid="6003603162578577406">"Cho phép ứng dụng giám sát và kiểm soát cách hệ thống chạy các hoạt động. Ứng dụng độc hại hoàn toàn có thể làm tổn hại hệ thống. Quyền này chỉ cần cho mục đích phát triển, không dành cho mục đích sử dụng thông thường."</string>
     <string name="permlab_broadcastPackageRemoved" msgid="2576333434893532475">"gửi truyền phát đã xóa của gói"</string>
     <string name="permdesc_broadcastPackageRemoved" msgid="6621901216207931089">"Cho phép ứng dụng truyền phát thông báo cho biết rằng gói ứng dụng đã bị xóa. Ứng dụng độc hại có thể sử dụng quyền này để loại bỏ bất kỳ ứng dụng nào khác đang chạy."</string>
     <string name="permlab_broadcastSmsReceived" msgid="5689095009030336593">"gửi truyền phát SMS nhận được"</string>
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Cho phép ứng dụng truyền phát thông báo cho biết đã nhận được tin nhắn SMS. Ứng dụng độc hại có thể sử dụng quyền này để giả mạo tin nhắn SMS đến."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"gửi truyền phát WAP-PUSH nhận được"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Cho phép ứng dụng truyền phát thông báo cho biết rằng đã nhận được tin nhắn WAP PUSH. Ứng dụng độc hại có thể sử dụng quyền này để giả mạo xác nhận đã nhận được tin nhắn MMS hoặc ngầm thay thế nội dung của bất kỳ trang web nào bằng các biến thể độc hại."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"gửi chương trình phát mạng điểm số"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Cho phép ứng dụng truyền thông báo rằng các mạng cần để được tính điểm. Không bao giờ cần cho ứng dụng thông thường."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"giới hạn số quá trình đang chạy"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Cho phép ứng dụng kiểm soát số quy trình tối đa sẽ chạy. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"buộc ứng dụng nền đóng"</string>
@@ -345,7 +377,7 @@
     <string name="permlab_backup" msgid="470013022865453920">"kiểm soát sao lưu và khôi phục hệ thống"</string>
     <string name="permdesc_backup" msgid="6912230525140589891">"Cho phép ứng dụng kiểm soát cơ chế sao lưu và khôi phục của hệ thống. Không dành cho các ứng dụng thông thường."</string>
     <string name="permlab_confirm_full_backup" msgid="5557071325804469102">"xác nhận bản sao lưu đầy đủ hoặc khôi phục hoạt động"</string>
-    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Cho phép ứng dụng khởi chạy UI xác nhận sao lưu toàn bộ. Không dành cho bất kỳ ứng dụng nào."</string>
+    <string name="permdesc_confirm_full_backup" msgid="1748762171637699562">"Cho phép ứng dụng chạy UI xác nhận sao lưu toàn bộ. Không dành cho bất kỳ ứng dụng nào."</string>
     <string name="permlab_internalSystemWindow" msgid="2148563628140193231">"hiển thị các cửa sổ trái phép"</string>
     <string name="permdesc_internalSystemWindow" msgid="7458387759461466397">"Cho phép ứng dụng tạo các cửa sổ dùng cho giao diện người dùng hệ thống nội bộ. Không dành cho các ứng dụng thông thường."</string>
     <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"vẽ trên ứng dụng khác"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ Vpn. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"liên kết với hình nền"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của hình nền. Không cần thiết cho các ứng dụng thông thường."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"liên kết với trình tương tác bằng giọng nói"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ tương tác bằng giọng nói. Không cần thiết cho các ứng dụng thông thường."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"liên kết với màn hình từ xa"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của màn hình từ xa. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"liên kết với dịch vụ tiện ích con"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ tiện ích con. Không cần thiết cho các ứng dụng thông thường."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"liên kết với dịch vụ nhà cung cấp định tuyến"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Cho phép chủ sở hữu liên kết với bất kỳ nhà cung cấp định tuyến đã đăng ký nào. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"tương tác với quản trị viên thiết bị"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Cho phép chủ sở hữu gửi các ý định đến quản trị viên thiết bị. Không cần thiết cho các ứng dụng thông thường."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"liên kết với đầu vào TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của đầu vào TV. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"thêm hoặc xóa quản trị viên thiết bị"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Cho phép chủ sở hữu thêm hoặc xóa quản trị viên thiết bị đang hoạt động. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"thay đổi hướng màn hình"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Cho phép ứng dụng sử dụng bất kỳ trình giải mã phương tiện nào đã cài đặt nhằm giải mã để phát lại."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"quản lý thông tin xác thực đáng tin cậy"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Cho phép ứng dụng cài đặt và gỡ cài đặt chứng chỉ CA dưới dạng thông tin xác thực đáng tin cậy."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"chạy ứng dụng trong thời gian rảnh"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Quyền này cho phép hệ thống Android chạy ứng dụng trong nền khi thiết bị không được sử dụng."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"đọc/ghi vào tài nguyên do chẩn đoán sở hữu"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Cho phép ứng dụng đọc và ghi vào bất kỳ tài nguyên nào do nhóm chẩn đoán sở hữu; ví dụ: các tệp trong /dev. Quyền này có thể ảnh hưởng đến sự ổn định và tính bảo mật của hệ thống. CHỈ nên sử dụng quyền này cho các chẩn đoán phần cứng cụ thể của nhà sản xuất hoặc nhà cung cấp."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"bật hoặc tắt cấu phần ứng dụng"</string>
@@ -432,8 +474,8 @@
     <string name="permlab_writeGservices" msgid="2149426664226152185">"sửa đổi bản đồ dịch vụ của Google"</string>
     <string name="permdesc_writeGservices" msgid="1287309437638380229">"Cho phép ứng dụng sửa đổi bản đồ dịch vụ của Google. Không dành cho ứng dụng thông thường."</string>
     <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"chạy khi khởi động"</string>
-    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Cho phép ứng dụng tự khởi chạy ngay khi hệ thống khởi động xong. Quyền này có thể khiến máy tính bảng mất nhiều thời gian khởi động hơn và cho phép ứng dụng làm chậm toàn bộ máy tính bảng do ứng dụng luôn chạy."</string>
-    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Cho phép ứng dụng tự khởi chạy ngay khi hệ thống khởi động xong. Quyền này có thể khiến điện thoại mất nhiều thời gian khởi động hơn và cho phép ứng dụng làm chậm toàn bộ điện thoại do ứng dụng luôn chạy."</string>
+    <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Cho phép ứng dụng tự chạy ngay khi hệ thống khởi động xong. Quyền này có thể khiến máy tính bảng mất nhiều thời gian khởi động hơn và cho phép ứng dụng làm chậm toàn bộ máy tính bảng do ứng dụng luôn chạy."</string>
+    <string name="permdesc_receiveBootCompleted" product="default" msgid="513950589102617504">"Cho phép ứng dụng tự chạy ngay khi hệ thống khởi động xong. Quyền này có thể khiến điện thoại mất nhiều thời gian khởi động hơn và cho phép ứng dụng làm chậm toàn bộ điện thoại do ứng dụng luôn chạy."</string>
     <string name="permlab_broadcastSticky" msgid="7919126372606881614">"gửi truyền phát hấp dẫn người xem"</string>
     <string name="permdesc_broadcastSticky" product="tablet" msgid="7749760494399915651">"Cho phép ứng dụng gửi nội dung truyền phát hấp dẫn người xem. Nội dung này sẽ vẫn còn sau khi quá trình truyền phát kết thúc. Việc sử dụng quá mức có thể làm cho máy tính bảng bị chậm hoặc không ổn định do khiến máy tính bảng sử dụng quá nhiều bộ nhớ."</string>
     <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Cho phép ứng dụng gửi nội dung truyền phát hấp dẫn người xem. Nội dung này sẽ vẫn còn sau khi quá trình truyền phát kết thúc. Việc sử dụng quá mức có thể làm cho điện thoại bị chậm hoặc không ổn định do khiến điện thoại sử dụng quá nhiều bộ nhớ."</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Cho phép ứng dụng đọc thông tin tiểu sử cá nhân được lưu trữ trên thiết bị, chẳng hạn như tên và thông tin liên hệ của bạn. Điều này có nghĩa là ứng dụng có thể xác định danh tính của bạn và gửi thông tin tiểu sử của bạn cho người khác."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"sửa đổi thẻ liên hệ của riêng bạn"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Cho phép ứng dụng thay đổi hoặc thêm vào thông tin tiểu sử cá nhân được lưu trữ trên thiết bị, chẳng hạn như tên và thông tin liên hệ của bạn. Điều này có nghĩa là ứng dụng có thể xác định danh tính của bạn và gửi thông tin tiểu sử của bạn cho người khác."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"cảm biến cơ thể (như máy đo nhịp tim)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Cho phép ứng dụng truy cập dữ liệu từ cảm biến mà bạn sử dụng để đo những gì đang diễn ra bên trong cơ thể của bạn, chẳng hạn như nhịp tim."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"đọc luồng xã hội của bạn"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Cho phép ứng dụng truy cập và đồng bộ hóa các cập nhật xã hội của bạn và bạn bè bạn. Hãy cẩn trọng khi chia sẻ thông tin -- việc này có thể cho phép ứng dụng đọc thông tin liên lạc giữa bạn và bạn bè bạn trên các mạng xã hội, bất kể tính bí mật là gì. Lưu ý: quyền này có thể không được thực thi trên tất cả các mạng xã hội."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"ghi luồng xã hội của bạn"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Cho phép ứng dụng sử dụng các tính năng SurfaceFlinger cấp độ thấp."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"đọc bộ đệm khung"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Cho phép ứng dụng đọc nội dung của bộ đệm khung."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"truy cập InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Cho phép ứng dụng sử dụng các tính năng InputFlinger cấp độ thấp."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"định cấu hình màn hình Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Cho phép ứng dụng định cấu hình và kết nối với màn hình Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"kiểm soát màn hình Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Cho phép ứng dụng sửa đổi cài đặt âm thanh chung chẳng hạn như âm lượng và loa nào được sử dụng cho thiết bị ra."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"ghi âm"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Cho phép ứng dụng ghi âm bằng micrô. Quyền này cho phép ứng dụng ghi âm bất kỳ lúc nào mà không cần sự xác nhận của bạn."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"liên lạc qua sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Cho phép ứng dụng gửi lệnh đến SIM. Việc này rất nguy hiểm."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"chụp ảnh và quay video"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Cho phép ứng dụng chụp ảnh và quay video bằng máy ảnh. Quyền này cho phép ứng dụng sử dụng máy ảnh bất kỳ lúc nào mà không cần sự xác nhận của bạn."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"vô hiệu hóa tính năng phát đèn LED chỉ báo khi máy ảnh đang được sử dụng"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Cho phép ứng dụng kiểm soát các tính năng điện thoại của thiết bị. Ứng dụng có quyền này có thể chuyển đổi mạng, bật và tắt radio điện thoại cũng như thực hiện các tác vụ tương tự mà không cần thông báo cho bạn."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"đọc trạng thái và nhận dạng của điện thoại"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Cho phép ứng dụng truy cập vào các tính năng điện thoại của thiết bị. Quyền này cho phép ứng dụng xác định số điện thoại và ID thiết bị, cho dù cuộc gọi có hiện hoạt hay không và số từ xa có được kết nối bằng một cuộc gọi hay không."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"đọc trạng thái điện thoại chính xác"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Cho phép ứng dụng truy cập trạng thái điện thoại chính xác. Quyền này cho phép ứng dụng xác định trạng thái cuộc gọi thực, cuộc gọi đang hoạt động hay trong nền, cuộc gọi không thành công, trạng thái kết nối dữ liệu chính xác và kết nối dữ liệu không thành công."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"ngăn máy tính bảng chuyển sang chế độ ngủ"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"ngăn điện thoại chuyển sang chế độ ngủ"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Cho phép ứng dụng ngăn máy tính bảng chuyển sang chế độ ngủ."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Thay đổi trạng thái WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Cho phép ứng dụng kết nối máy tính bảng và ngắt kết nối máy tính bảng khỏi mạng WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Cho phép ứng dụng kết nối điện thoại và ngắt kết nối điện thoại khỏi mạng WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"mạng điểm số"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Cho phép ứng dụng xếp hạng mạng và ảnh hưởng đến việc máy tính bảng nên ưu tiên mạng nào."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Cho phép ứng dụng xếp hạng các mạng và ảnh hưởng đến việc điện thoại nên ưu tiên mạng nào."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"ghép nối với thiết bị Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Cho phép ứng dụng xem cấu hình của Bluetooth trên máy tính bảng và tạo và chấp nhận các kết nối với các thiết bị được ghép nối."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Cho phép ứng dụng xem cấu hình của Bluetooth trên điện thoại, tạo và chấp nhận các kết nối với các thiết bị được ghép nối."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Cho phép ứng dụng truy xuất, kiểm tra và xóa thông báo, bao gồm những thông báo được đăng bởi các ứng dụng khác."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"liên kết với dịch vụ trình xử lý thông báo"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ trình xử lý thông báo. Không cần thiết cho các ứng dụng thông thường."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"liên kết với dịch vụ trình cung cấp điều kiện"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Cho phép chủ sở hữu liên kết với giao diện cấp cao nhất của dịch vụ trình cung cấp điều kiện. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"gọi ra ứng dụng cấu hình do nhà cung cấp dịch vụ cung cấp"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Cho phép chủ sở hữu gọi ra ứng dụng cấu hình do nhà cung cấp dịch vụ cung cấp. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"quan sát các điều kiện mạng"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Cho phép ứng dụng quan sát các điều kiện mạng. Không bao giờ cần cho ứng dụng thông thường."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"thay đổi hiệu chỉnh thiết bị đầu vào"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Cho phép ứng dụng sửa đổi các thông số hiệu chỉnh của màn hình cảm ứng. Không cần cho ứng dụng thông thường."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"truy cập chứng chỉ DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Cho phép ứng dụng cung cấp và sử dụng chứng chỉ DRM. Không cần thiết cho các ứng dụng thông thường."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Đặt quy tắc mật khẩu"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Kiểm soát độ dài và ký tự được phép trong mật khẩu mở khóa màn hình."</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Giám sát những lần thử mở khóa màn hình"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Nhà riêng"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Cơ quan"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Khác"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Không tìm thấy ứng dụng nào để xem liên hệ này."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Nhập mã PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Nhập PUK và mã PIN mới"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Mã PUK"</string>
@@ -1135,7 +1195,7 @@
     <string name="webpage_unresponsive" msgid="3272758351138122503">"Trang không phản hồi.\n\nBạn có muốn đóng trang không?"</string>
     <string name="launch_warning_title" msgid="1547997780506713581">"Đã chuyển hướng ứng dụng"</string>
     <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> hiện đang chạy."</string>
-    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> được khởi chạy trước tiên."</string>
+    <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> được chạy trước tiên."</string>
     <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Tỷ lệ"</string>
     <string name="screen_compat_mode_show" msgid="4013878876486655892">"Luôn hiển thị"</string>
     <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Bật lại chế độ này trong cài đặt Hệ thống &gt; Ứng dụng &gt; Đã tải xuống."</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Cho phép ứng dụng truy cập bộ nhớ an toàn khóa"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Kiểm soát việc hiển thị và ẩn tính năng bảo vệ phím"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Cho phép ứng dụng kiểm soát tính năng bảo vệ phím."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Quan sát các thay đổi ở trạng thái đáng tin cậy."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Cho phép ứng dụng quan sát các thay đổi ở trạng thái đáng tin cậy."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Liên kết với một dịch vụ của đại lý đáng tin cậy"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Cho phép ứng dụng liên kết với một dịch vụ của đại lý đáng tin cậy."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Tương tác với hệ thống khôi phục và bản cập nhật"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Cho phép ứng dụng tương tác với hệ thống khôi phục và bản cập nhật hệ thống."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Chạm hai lần để kiểm soát thu phóng"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Không thể thêm tiện ích."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Đến"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Hình nền"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Thay đổi hình nền"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Trình xử lý thông báo"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Trình cung cấp điều kiện"</string>
     <string name="vpn_title" msgid="19615213552042827">"Đã kích hoạt VPN"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"VPN được <xliff:g id="APP">%s</xliff:g> kích hoạt"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Chạm để quản lý mạng."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Chọn một ứng dụng"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Không thể chạy <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Chia sẻ với"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Chia sẻ với <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Tay trượt. Chạm &amp; giữ."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Trượt lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Trượt xuống để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Trượt sang trái để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Trượt sang phải để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Mở khóa"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Máy ảnh"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Im lặng"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Bật âm thanh"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Tìm kiếm"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Trượt để mở khóa."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Cắm tai nghe để nghe các khóa mật khẩu được đọc."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Dấu chấm."</string>
@@ -1471,7 +1530,7 @@
     <string name="share_action_provider_share_with" msgid="5247684435979149216">"Chia sẻ với"</string>
     <string name="list_delimeter" msgid="3975117572185494152">", "</string>
     <string name="sending" msgid="3245653681008218030">"Đang gửi…"</string>
-    <string name="launchBrowserDefault" msgid="2057951947297614725">"Khởi chạy trình duyệt?"</string>
+    <string name="launchBrowserDefault" msgid="2057951947297614725">"Chạy trình duyệt?"</string>
     <string name="SetupCallDefault" msgid="5834948469253758575">"Chấp nhận cuộc gọi?"</string>
     <string name="activity_resolver_use_always" msgid="8017770747801494933">"Luôn chọn"</string>
     <string name="activity_resolver_use_once" msgid="2404644797149173758">"Chỉ một lần"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Hệ thống"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Âm thanh Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Hiển thị không dây"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Xong"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Đầu ra phương tiện"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Kết nối với thiết bị"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Truyền màn hình tới thiết bị"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Đang tìm kiếm thiết bị…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Cài đặt"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Ngắt kết nối"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Đang quét..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Đang kết nối..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Khả dụng"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Lớp phủ #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", an toàn"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Hiển thị không dây đã được kết nối"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Màn hình này đang hiển thị trên thiết bị khác"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Truyền màn hình"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Đang kết nối với <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Truyền màn hình"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Đã kết nối với <xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Ngắt kết nối"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Cuộc gọi khẩn cấp"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Đã quên hình"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Đang mở khóa thẻ SIM…"</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Mã PIN không chính xác."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Nhập mã PIN có từ 4 đến 8 số."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Mã PUK phải có từ 8 số trở lên."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Mã PUK phải có 8 số."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Hãy nhập lại mã PUK chính xác. Nhiều lần lặp lại sẽ vô hiệu hóa vĩnh viễn thẻ SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Mã PIN không khớp"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Quá nhiều lần nhập hình"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"Hãy thử lại sau <xliff:g id="COUNT">%d</xliff:g> giây"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Hãy thử lại sau"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Vuốt từ trên xuống để thoát toàn màn hình"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Vuốt từ trên xuống để thoát toàn màn hình."</string>
+    <string name="done_label" msgid="2093726099505892398">"Xong"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Thanh trượt giờ hình tròn"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Thanh trượt phút hình tròn"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Chọn giờ"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Chọn phút"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Lưới ngày theo tháng"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Danh sách năm"</string>
+    <string name="select_day" msgid="7774759604701773332">"Chọn tháng và ngày"</string>
+    <string name="select_year" msgid="7952052866994196170">"Chọn năm"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"Đã chọn <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"Đã xóa <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index dbfd039..9297e3a 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g> <xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;未命名&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"..."</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"请键入至少 8 位数字的 PUK 码。"</string>
     <string name="needPuk" msgid="919668385956251611">"已对 SIM 卡进行 PUK 码锁定。键入 PUK 码将其解锁。"</string>
     <string name="needPuk2" msgid="4526033371987193070">"输入 PUK2 码以解锁 SIM 卡。"</string>
+    <string name="enablePin" msgid="209412020907207950">"失败，请启用 SIM/RUIM 卡锁定设置。"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败，SIM 卡将被锁定。"</item>
+    <item quantity="other" msgid="7530597808358774740">"您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败，SIM 卡将被锁定。"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"来电显示"</string>
@@ -71,15 +98,15 @@
     <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"默认显示本机号码，在下一次通话中也显示"</string>
     <string name="serviceNotProvisioned" msgid="8614830180508686666">"未提供服务。"</string>
     <string name="CLIRPermanent" msgid="3377371145926835671">"您无法更改来电显示设置。"</string>
-    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"访问受限情况已发生变化"</string>
-    <string name="RestrictedOnData" msgid="8653794784690065540">"数据服务已禁用。"</string>
-    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"紧急服务已禁用。"</string>
-    <string name="RestrictedOnNormal" msgid="4953867011389750673">"已禁用语音服务。"</string>
-    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"已停用所有语音服务。"</string>
-    <string name="RestrictedOnSms" msgid="8314352327461638897">"已禁用短信服务。"</string>
-    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"已停用语音/数据服务。"</string>
-    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"已禁用语音/短信服务。"</string>
-    <string name="RestrictedOnAll" msgid="5643028264466092821">"已停用所有语音/数据/短信服务。"</string>
+    <string name="RestrictedChangedTitle" msgid="5592189398956187498">"网络可用情况发生变化"</string>
+    <string name="RestrictedOnData" msgid="8653794784690065540">"数据网络服务已停用。"</string>
+    <string name="RestrictedOnEmergency" msgid="6581163779072833665">"紧急服务已停用。"</string>
+    <string name="RestrictedOnNormal" msgid="4953867011389750673">"语音服务已停用。"</string>
+    <string name="RestrictedOnAllVoice" msgid="3396963652108151260">"所有语音服务都已停用。"</string>
+    <string name="RestrictedOnSms" msgid="8314352327461638897">"短信服务已停用。"</string>
+    <string name="RestrictedOnVoiceData" msgid="996636487106171320">"语音/数据服务已停用。"</string>
+    <string name="RestrictedOnVoiceSms" msgid="1888588152792023873">"语音/短信服务已停用。"</string>
+    <string name="RestrictedOnAll" msgid="5643028264466092821">"所有语音/数据/短信服务都已停用。"</string>
     <string name="serviceClassVoice" msgid="1258393812335258019">"语音"</string>
     <string name="serviceClassData" msgid="872456782077937893">"数据"</string>
     <string name="serviceClassFAX" msgid="5566624998840486475">"传真"</string>
@@ -122,7 +149,7 @@
     <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"不支持该协议。"</string>
     <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"无法建立安全连接。"</string>
     <string name="httpErrorBadUrl" msgid="3636929722728881972">"无法打开网页，因为该网址是无效的。"</string>
-    <string name="httpErrorFile" msgid="2170788515052558676">"无法访问该文件。"</string>
+    <string name="httpErrorFile" msgid="2170788515052558676">"无法使用该文件。"</string>
     <string name="httpErrorFileNotFound" msgid="6203856612042655084">"找不到请求的文件。"</string>
     <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"正在处理的请求太多，请稍后重试。"</string>
     <string name="notification_title" msgid="8967710025036163822">"登录 <xliff:g id="ACCOUNT">%1$s</xliff:g> 时出错"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"同步"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"太多<xliff:g id="CONTENT_TYPE">%s</xliff:g>删除项。"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"平板电脑存储空间已满。请删除一些文件以腾出空间。"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"手表存储空间已满。请删除一些文件以腾出空间。"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"手机存储空间已满。请删除一些文件以腾出空间。"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"网络可能会受到监控"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"受到不明第三方的监控"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"振铃器开启"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"正在关机..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"您的平板电脑会关闭。"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"您的手表即将关机。"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"您的手机将会关机。"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"您要关机吗？"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"重新启动并进入安全模式"</string>
@@ -165,7 +194,8 @@
     <string name="global_action_silent_mode_off_status" msgid="1506046579177066419">"声音已开启"</string>
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"飞行模式"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"已开启飞行模式"</string>
-    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"已关闭飞行模式"</string>
+    <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"未开启飞行模式"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"设置"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"安全模式"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android 系统"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"卸载快捷方式"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"允许应用自行删除主屏幕快捷方式。"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"重新设置外拨电话的路径"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"允许该应用处理外拨电话以及更改要拨打的号码。此权限可让该应用监视、重定向或阻止外拨电话。"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"允许应用在拨出电话时查看拨打的电话号码，并选择改为拨打其他号码或完全中止通话。"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"接收讯息（短信）"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"允许该应用接收和处理短信。这就意味着，该应用可能会监视发送到您设备的短信，或删除发送到您设备的短信而不向您显示。"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"接收讯息（彩信）"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"允许应用检索活动窗口的内容。恶意应用可能会检索整个窗口的内容，并检查其中除密码以外的所有文字。"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"暂时启用辅助功能"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"允许应用在设备上暂时启用辅助功能。恶意应用可能会在未经用户同意的情况下擅自启用辅助功能。"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"检索窗口信息"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"允许应用通过窗口管理器检索窗口信息。恶意应用可能会检索供内部系统使用的信息。"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"检索窗口令牌"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"允许应用检索窗口令牌。恶意软件可能会借此在未经授权的情况下冒充系统与应用窗口进行互动。"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"检索框架统计信息"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"允许应用收集框架统计信息。恶意应用可能会借此监测其他应用的窗口框架统计信息。"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"过滤事件"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"允许应用注册输入过滤器，这类过滤器会在所有用户事件分派之前对用户事件流进行过滤。恶意应用可能会在没有用户干预的情况下控制系统用户界面。"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"放大显示内容"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"允许应用放大显示内容。恶意应用可能会以特定方式改变显示内容，使得设备无法使用。"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"部分关机"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"使活动管理器进入关闭状态。不执行彻底关机。"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"禁止切换应用"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"允许应用广播一条有关已收到短信的通知。恶意应用可能借此伪造接到的短信。"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"发送 WAP-PUSH 收到的广播"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"允许应用广播一条有关已收到 WAP PUSH 短信的通知。恶意应用可能借此伪造短信接收，或在后台将任意网页的内容替换为恶意内容。"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"发送网络评分广播通知"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"允许应用广播“需要为网络评分”的通知。普通应用绝不需要此权限。"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"限制运行的进程个数"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"允许应用控制将运行的进程数上限。普通应用绝不需要此权限。"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"强制关闭后台应用"</string>
@@ -377,10 +409,20 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"允许用户绑定到 VPN 服务的顶级接口。普通应用绝不需要此权限。"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"绑定到壁纸"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"允许用户绑定到壁纸的顶级接口。普通应用绝不需要此权限。"</string>
+    <!-- no translation found for permlab_bindVoiceInteraction (5334852580713715068) -->
+    <skip />
+    <!-- no translation found for permdesc_bindVoiceInteraction (2345721766501778101) -->
+    <skip />
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"绑定至远程显示屏"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"允许应用绑定至远程显示屏的顶级接口。普通应用绝不需要此权限。"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"绑定到小部件服务"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"允许应用绑定到小部件服务的顶级接口。普通应用绝不需要此权限。"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"绑定到路由程序服务"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"允许应用绑定到任何已注册的路由程序。普通应用绝不需要此权限。"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"与设备管理器交互"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"允许用户将意向发送给设备管理员。普通应用绝不需要此权限。"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"绑定至电视输入设备"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"允许应用绑定至电视输入设备的顶级接口。普通应用绝不需要此权限。"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"添加或删除设备管理员"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"允许应用添加或删除有效的设备管理员。普通应用绝不需要此权限。"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"更改屏幕显示方向"</string>
@@ -416,6 +458,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"允许该应用使用任何已安装的媒体解码器进行解码，以便播放媒体。"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"管理受信任的凭据"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"允许应用安装和卸载 CA 证书（作为受信任的凭据）。"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"在设备处于闲置状态时运行应用"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"当设备处于闲置状态时，此权限允许Android系统在后台运行该应用。"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"读取/写入诊断所拥有的资源"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"允许应用读取/写入诊断组拥有的所有资源（例如 /dev 中的文件）。这可能会影响系统的稳定性和安全性。此权限仅供制造商或运营商诊断硬件方面的问题时使用。"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"启用或停用应用组件"</string>
@@ -453,6 +497,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"允许该应用读取您设备上存储的个人资料信息，例如您的姓名和联系信息。这意味着该应用可以识别您的身份，并可能将您的个人资料信息发送给他人。"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"修改您自己的名片"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"允许该应用更改或添加您设备上存储的个人资料信息，例如您的姓名和联系信息。这意味着该应用可以识别您的身份，并可能将您的个人资料信息发送给他人。"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"人体传感器（如心跳速率检测器）"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"允许应用访问您用于测量身体状况（如心跳速率）的传感器中的数据。"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"读取您的社交信息流"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"允许该应用访问并同步您和朋友的社交动态信息。在分享信息时一定要小心，因为此权限可让该应用读取您与社交网络上的朋友之间的交流信息。"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"写入您的社交信息流"</string>
@@ -470,21 +516,23 @@
     <string name="permlab_installLocationProvider" msgid="6578101199825193873">"允许安装位置信息提供程序"</string>
     <string name="permdesc_installLocationProvider" msgid="9066146120470591509">"创建用于测试的模拟位置源或安装新的位置提供程序。此权限可让该应用覆盖由其他位置源（如 GPS）或位置提供程序返回的位置和/或状态信息。"</string>
     <string name="permlab_accessFineLocation" msgid="1191898061965273372">"精确位置（基于 GPS 和网络）"</string>
-    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"允许该应用通过全球定位系统 (GPS) 或网络位置信息源（例如基站和 WLAN）获取您的精确位置信息。您必须在设备上开启这些位置服务，应用才能获得位置信息。应用会使用此类服务确定您的位置，这可能会消耗更多电量。"</string>
+    <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"允许该应用通过全球定位系统(GPS)或网络位置信息源（例如基站和WLAN）获取您的精确位置信息。您必须在设备上开启这些位置信息服务，应用才能获得位置信息。应用会使用此类服务确定您的位置，这可能会消耗更多电量。"</string>
     <string name="permlab_accessCoarseLocation" msgid="4887895362354239628">"大致位置（基于网络）"</string>
-    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"允许该应用获取您的大致位置信息。这类位置信息来自于使用网络位置信息源（例如基站和 WLAN）的位置服务。您必须在设备上开启这些位置服务，应用才能获得位置信息。应用会使用此类服务确定您的大概位置。"</string>
+    <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"允许该应用获取您的大致位置信息。这类位置信息来自于使用网络位置信息源（例如基站和WLAN）的位置信息服务。您必须在设备上开启这些位置信息服务，应用才能获得位置信息。应用会使用此类服务确定您的大概位置。"</string>
     <string name="permlab_accessSurfaceFlinger" msgid="2363969641792388947">"访问 SurfaceFlinger"</string>
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"允许应用使用 SurfaceFlinger 低级功能。"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"读取帧缓冲区"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"允许应用读取帧缓冲区的内容。"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"使用 InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"允许应用使用 InputFlinger 底层功能。"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"配置 WLAN 显示设备"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"允许应用配置并连接到 WLAN 显示设备。"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"控制 WLAN 显示设备"</string>
     <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"允许应用控制 WLAN 显示设备的基础功能。"</string>
     <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"捕获音频输出"</string>
     <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"允许该应用捕获和重定向音频输出。"</string>
-    <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"检测关键词"</string>
-    <string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"允许应用捕获音频以便检测语音指令的关键词。捕获操作会在后台进行，但不会妨碍其他音频捕获工具（例如摄像机）。"</string>
+    <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"启动指令检测"</string>
+    <string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"允许应用捕获音频以便检测语音启动指令。捕获操作会在后台进行，但不会妨碍其他音频捕获工具（例如摄像机）。"</string>
     <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"捕获视频输出"</string>
     <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"允许该应用捕获和重定向视频输出。"</string>
     <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"捕获安全视频输出"</string>
@@ -495,6 +543,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允许该应用修改全局音频设置，例如音量和用于输出的扬声器。"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"录音"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"允许该应用使用麦克风录制音频。此权限可让该应用不经您的确认即可随时录制音频。"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM卡通信"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"允许应用向SIM卡发送命令（此权限具有很高的危险性）。"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"拍摄照片和视频"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"允许该应用使用相机拍摄照片和视频。此权限可让该应用随时使用相机，而无需您的确认。"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"在相机使用过程中停用传输指示灯 LED"</string>
@@ -545,11 +595,13 @@
     <string name="permlab_checkinProperties" msgid="7855259461268734914">"访问检入属性"</string>
     <string name="permdesc_checkinProperties" msgid="4024526968630194128">"允许应用对登记服务上传的属性拥有读取/写入权限。普通应用不应使用此权限。"</string>
     <string name="permlab_bindGadget" msgid="776905339015863471">"选择小部件"</string>
-    <string name="permdesc_bindGadget" msgid="8261326938599049290">"允许应用告知系统哪些小部件可供哪个应用使用。拥有此权限的应用可向其他应用授予对个人资料的访问权限。普通应用不应使用此权限。"</string>
+    <string name="permdesc_bindGadget" msgid="8261326938599049290">"允许应用告知系统哪些小部件可供哪个应用使用。拥有此权限的应用可向其他应用授予对个人数据的访问权限。普通应用不应使用此权限。"</string>
     <string name="permlab_modifyPhoneState" msgid="8423923777659292228">"修改手机状态"</string>
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"允许应用控制设备的电话功能。拥有此权限的应用可在不通知您的情况下执行切换网络、开关手机无线装置等此类操作。"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"读取手机状态和身份"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"允许该应用访问设备的电话功能。此权限可让该应用确定本机号码和设备 ID、是否正处于通话状态以及拨打的号码。"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"读取确切的手机状态"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"允许应用获取确切的手机状态。此权限可让应用确定实际通话状态、通话是在界面上进行还是在后台进行、通话未接通情况、确切的数据网络连接状态，以及数据网络连接失败情况。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"阻止平板电脑进入休眠状态"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"防止手机休眠"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"允许应用阻止平板电脑进入休眠状态。"</string>
@@ -583,8 +635,8 @@
     <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"允许该应用获取手机已知的帐户列表，其中可能包括由已安装的应用创建的所有帐户。"</string>
     <string name="permlab_authenticateAccounts" msgid="5265908481172736933">"创建帐户并设置密码"</string>
     <string name="permdesc_authenticateAccounts" msgid="5472124296908977260">"允许应用使用 AccountManager 的帐户身份验证程序功能，包括创建帐户以及获取和设置其密码。"</string>
-    <string name="permlab_manageAccounts" msgid="4983126304757177305">"添加或删除帐户"</string>
-    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"允许应用执行添加帐户、删除帐户、删除帐户密码等操作。"</string>
+    <string name="permlab_manageAccounts" msgid="4983126304757177305">"添加或移除帐户"</string>
+    <string name="permdesc_manageAccounts" msgid="8698295625488292506">"允许应用执行添加帐户、移除帐户、删除帐户密码等操作。"</string>
     <string name="permlab_useCredentials" msgid="235481396163877642">"使用设备上的帐户"</string>
     <string name="permdesc_useCredentials" msgid="7984227147403346422">"允许应用请求身份验证令牌。"</string>
     <string name="permlab_accessNetworkState" msgid="4951027964348974773">"查看网络连接"</string>
@@ -617,11 +669,14 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"更改 WiMAX 状态"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"允许该应用建立和断开平板电脑与 WiMAX 网络之间的连接。"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"允许该应用建立和断开手机与 WiMAX 网络之间的连接。"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"为网络评分"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"允许应用为网络评分，并控制平板电脑应优先使用的网络。"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"允许应用为网络评分，并控制手机应优先使用的网络。"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"与蓝牙设备配对"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"允许该应用查看平板电脑上的蓝牙配置，以及建立和接受与配对设备的连接。"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"允许该应用查看手机上的蓝牙配置，以及建立和接受与配对设备的连接。"</string>
     <string name="permlab_nfc" msgid="4423351274757876953">"控制近距离通信"</string>
-    <string name="permdesc_nfc" msgid="7120611819401789907">"允许应用与近距离无线通信 (NFC) 标记、卡和阅读器进行通信。"</string>
+    <string name="permdesc_nfc" msgid="7120611819401789907">"允许应用与近距离无线通信(NFC)标签、卡和读取器通信。"</string>
     <string name="permlab_disableKeyguard" msgid="3598496301486439258">"停用屏幕锁定"</string>
     <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"允许该应用停用键锁以及任何关联的密码安全措施。例如，让手机在接听来电时停用键锁，在通话结束后重新启用键锁。"</string>
     <string name="permlab_readSyncSettings" msgid="6201810008230503052">"读取同步设置"</string>
@@ -670,10 +725,18 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"允许该应用检索、检查并清除通知，包括其他应用发布的通知。"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"绑定到通知侦听器服务"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"允许应用绑定到通知侦听器服务的顶级接口（普通应用绝不需要此权限）。"</string>
+    <!-- no translation found for permlab_bindConditionProviderService (1180107672332704641) -->
+    <skip />
+    <!-- no translation found for permdesc_bindConditionProviderService (1680513931165058425) -->
+    <skip />
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"调用运营商提供的配置应用"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"允许应用调用运营商提供的配置应用。普通应用绝不需要此权限。"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"监听网络状况的观测信息"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"允许应用监听网络状况的观测信息。普通应用绝不需要此权限。"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"更改输入设备校准设置"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"允许应用修改触摸屏的校准参数。普通应用绝不需要此权限。"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"访问DRM证书"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"允许应用配置和使用DRM证书。普通应用绝不需要此权限。"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"设置密码规则"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"控制屏幕解锁密码所允许的长度和字符。"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"监视屏幕解锁尝试次数"</string>
@@ -809,6 +872,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"住宅"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"单位"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"其他"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"找不到可用来查看此联系人的应用。"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"输入 PIN 码"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"请输入 PUK 码和新的 PIN 码"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 码"</string>
@@ -1112,7 +1176,7 @@
     <string name="no" msgid="5141531044935541497">"取消"</string>
     <string name="dialog_alert_title" msgid="2049658708609043103">"注意"</string>
     <string name="loading" msgid="7933681260296021180">"正在加载..."</string>
-    <string name="capital_on" msgid="1544682755514494298">"打开"</string>
+    <string name="capital_on" msgid="1544682755514494298">"开启"</string>
     <string name="capital_off" msgid="6815870386972805832">"关闭"</string>
     <string name="whichApplication" msgid="4533185947064773386">"选择要使用的应用："</string>
     <string name="whichHomeApplication" msgid="4616420172727326782">"选择主屏幕应用"</string>
@@ -1305,6 +1369,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"允许应用访问密钥保护安全存储空间。"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"控制是显示还是隐藏锁屏"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"允许应用控制锁屏。"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"检测信任状态的变化。"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"允许应用检测信任状态的变化。"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"绑定至信任的代理服务"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"允许应用绑定至信任的代理服务。"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"与更新和恢复系统互动"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"允许应用与恢复系统和系统更新互动。"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"触摸两次可进行缩放控制"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"无法添加小部件。"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"开始"</string>
@@ -1329,6 +1399,8 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"壁纸"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"更改壁纸"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知侦听器"</string>
+    <!-- no translation found for condition_provider_service_binding_label (1321343352906524564) -->
+    <skip />
     <string name="vpn_title" msgid="19615213552042827">"VPN 已激活"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"“<xliff:g id="APP">%s</xliff:g>”已激活 VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"触摸可管理网络。"</string>
@@ -1414,18 +1486,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"选择应用"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"无法启动“<xliff:g id="APPLICATION_NAME">%s</xliff:g>”"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"分享方式"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"使用<xliff:g id="APPLICATION_NAME">%s</xliff:g>分享"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"滑动手柄。触摸并按住。"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"向上滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"向下滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"向左滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"向右滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"解锁"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"相机"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"静音"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"打开声音"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"搜索"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"滑动解锁。"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"需要插入耳机才能听到密码的按键声。"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"点。"</string>
@@ -1483,8 +1547,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"系统"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"蓝牙音频"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"无线显示"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"媒体输出线路"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"连接到设备"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"将屏幕投射到设备上"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"正在搜索设备…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"设置"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"断开连接"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"正在扫描..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"正在连接..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"可连接"</string>
@@ -1495,8 +1563,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"叠加视图 #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>：<xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>，<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"，安全"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"已连接到无线显示设备"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"此屏幕的内容正显示在另一台设备上"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"正在投射屏幕"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"正在连接到“<xliff:g id="NAME">%1$s</xliff:g>”"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"正在投射屏幕"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"已连接到“<xliff:g id="NAME">%1$s</xliff:g>”"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"断开连接"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"紧急呼救"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘记了图案"</string>
@@ -1514,7 +1584,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解锁 SIM 卡..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 码有误。"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"请输入 4 至 8 位数的 PIN。"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 码应至少包含 8 位数字。"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK码应包含8位数字。"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"请重新输入正确的 PUK 码。如果尝试错误次数过多，SIM 卡将永久停用。"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 码不匹配"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"图案尝试次数过多"</string>
@@ -1649,5 +1719,16 @@
     <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g>秒后重试"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"稍后重试"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"从顶部向下滑动即可退出全屏模式"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"从顶部向下滑动即可退出全屏模式。"</string>
+    <string name="done_label" msgid="2093726099505892398">"完成"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"小时转盘"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"分钟转盘"</string>
+    <string name="select_hours" msgid="6043079511766008245">"选择小时"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"选择分钟"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"按月份划分的日期网格"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"年份列表"</string>
+    <string name="select_day" msgid="7774759604701773332">"选择月份和日期"</string>
+    <string name="select_year" msgid="7952052866994196170">"选择年份"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"已选择<xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"已删除<xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index 2d2e77e..1c8cfe8 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;未命名&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"..."</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"輸入 8 位數以上的 PUK。"</string>
     <string name="needPuk" msgid="919668385956251611">"您的 SIM 卡已鎖定 PUK，請輸入 PUK 碼以解除鎖定。"</string>
     <string name="needPuk2" msgid="4526033371987193070">"輸入 PUK2 為 SIM 卡解除封鎖。"</string>
+    <string name="enablePin" msgid="209412020907207950">"操作失敗，請啟用「SIM/RUIM 鎖定」。"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤，SIM 將會被鎖定。"</item>
+    <item quantity="other" msgid="7530597808358774740">"您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤，SIM 將會被鎖定。"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"來電顯示"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Google Sync"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"同時刪除太多 <xliff:g id="CONTENT_TYPE">%s</xliff:g>。"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"平板電腦的儲存空間已滿。請刪除一些檔案，以騰出可用空間。"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"手錶的儲存空間已滿。請刪除一些檔案，以騰出可用空間。"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"手機的儲存空間已滿。請刪除一些檔案，以騰出可用空間。"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"網絡可能會受到監控"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"由不明的第三方監管"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"鈴聲開啟"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"正在關機..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"您的平板電腦將會關機。"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"您的手錶即將關機。"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"您的手機即將關機。"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"您要關機嗎？"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"重新啟動進入安全模式"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"飛行模式"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"飛航模式為 [開啟]"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"飛行模式為 [關閉]"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"設定"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"安全模式"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android 系統"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"解除安裝捷徑"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"允許應用程式繞過用戶授權直接移除主畫面捷徑。"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"重新設定撥出電話的路徑"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"允許應用程式處理撥出電話及更改撥打的號碼。這項權限允許應用程式監控、轉接或阻止撥出的電話。"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"允許應用程式在撥出電話時查看所撥打的電話號碼，並選擇將電話重新導向至另一個號碼或完全中斷通話。"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"接收短訊 (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"允許應用程式接收和處理短訊。這表示應用程式可監控傳送至您裝置的訊息，或在您閱讀訊息前擅自刪除訊息。"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"接收短訊 (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"允許應用程式擷取使用中的視窗內容。惡意應用程式可能會擷取整個視窗的內容，以及檢視密碼除外的所有文字。"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"暫時啟用協助工具"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"允許應用程式在裝置上暫時啟用協助工具。惡意應用程式可能藉此在未經用戶同意的情況下擅自啟用協助工具。"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"擷取視窗資訊"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"允許應用程式從視窗管理程式擷取視窗的相關資訊。惡意應用程式可能會擷取專供內部系統使用的資訊。"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"擷取視窗憑證"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"允許應用程式擷取視窗憑證。惡意應用程式可能會在未經授權的情況下，與冒充系統的應用程式視窗互動。"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"擷取畫格統計資料"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"允許應用程式收集畫格統計資料。惡意應用程式可能會透過其他應用程式監察視窗畫格統計資料。"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"篩選活動"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"允許應用程式註冊輸入篩選器，在分派所有用戶活動的串流前先行篩選。惡意應用程式可能會繞過用戶操作，直接控制系統用戶介面。"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"放大畫面"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"允許應用程式放大畫面內容。惡意應用程式可能會改變顯示內容，導致裝置失靈。"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"部分關機"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"讓活動管理員進入關機狀態，而不執行完整的關機程序。"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"防止切換應用程式"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"允許應用程式在收到短訊時發出通知。惡意應用程式可能會藉此偽造外來短訊。"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"傳送可由 WAP PUSH 接收的廣播"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"允許應用程式在收到 WAP PUSH 訊息時發送通知。惡意應用程式可能會藉此偽造 MMS 訊息回條或私自以惡意內容更換網頁。"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"傳送網絡計分廣播"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"允許應用程式廣播網絡需要計分的通知，但一般應用程式並不需要使用。"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"執行程序數目上限"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"允許應用程式控制可執行程序的數量上限 (不建議一般應用程式使用)。"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"強制關閉背景應用程式"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"允許應用程式繫結至 VPN 服務的頂層介面 (不建議一般應用程式使用)。"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"繫結至桌布"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"允許應用程式繫結至桌布的頂層介面 (不建議一般應用程式使用)。"</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"繫結至語音互動器"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"允許應用程式繫結至語音互動服務的頂層介面，但一般應用程式並不需要使用。"</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"繫結至遠端螢幕"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"允許應用程式繫結至遠端屏螢的頂層介面 (不建議一般應用程式使用)。"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"繫結至小工具服務"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"允許應用程式繫結至小工具服務的頂層介面　(不建議一般應用程式使用)。"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"繫結至路由供應商服務"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"允許應用程式繫結至任何已註冊的路由供應商，但一般應用程式並不需要使用。"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"與裝置管理員互動"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"允許應用程式將調用請求傳送至裝置管理員　(不建議一般應用程式使用)。"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"繫結至電視訊號輸入裝置"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"允許應用程式繫結至電視訊號輸入裝置的頂層介面，但一般應用程式並不需要使用。"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"新增或移除裝置管理員"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"允許應用程式新增或移除有效的裝置管理員 (不建議一般應用程式使用)。"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"更改屏幕瀏覽方向"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"允許應用程式使用任何已安裝的媒體解碼器為播放解碼。"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"管理信任的憑證"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"允許應用程式安裝 CA 憑證為信任的憑證及解除安裝 CA 憑證。"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"當裝置閒置時執行應用程式"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"當您不使用裝置時，此權限允許 Android 系統在背景執行應用程式。"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"讀取/寫入由診斷應用程式擁有的資源"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"允許應用程式讀取及寫入診斷群組所擁有的任何資源 (例如：位於 /dev 中的檔案)。這可能會影響系統的穩定性及安全性，只應對製造商或網絡供應商所使用的硬件專用診斷程式開放這項權限。"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"啟用或停用應用程式元件"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"允許應用程式讀取裝置上儲存的個人資料，例如您的姓名和聯絡資訊。這表示應用程式可以識別您的身份，並將您的個人資料傳送給他人。"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"修改自己的聯絡資料"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"允許應用程式新增或更改裝置上儲存的個人資料，例如您的姓名和聯絡資訊。這表示應用程式可以識別您的身份，並將您的個人資料傳送給他人。"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"身體感應器 (例如心跳監視器)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"允許應用程式存取用於測量身體狀況感應器的資料，例如心跳。"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"讀取您的社交串流"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"允許應用程式存取並同步處理您和好友的最新動態。當您分享資訊時，請務必小心，因為這項權限允許應用程式讀取您和好友在社交網絡上的私人通訊，不論是否機密。注意：這項權限可能不適用於所有社交網絡。"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"寫入您的社交串流"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"允許應用程式使用 SurfaceFlinger 的低層功能。"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"讀取框架緩衝區"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"允許應用程式讀取畫面緩衝區的內容。"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"存取 InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"允許應用程式使用 InputFlinger 的低階功能。"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"設定 WiFi Display"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"允許應用程式設定及連接 WiFi Display。"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"控制 WiFi Display"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允許應用程式修改全域音頻設定，例如音量和用於輸出的喇叭。"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"錄製音效"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"允許應用程式使用麥克風錄音。這項權限允許應用程式隨時錄音，而不需經您確認。"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM 卡通訊"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"允許應用程式傳送指令到 SIM 卡。這項操作具有高危險性。"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"拍照和拍攝影片"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"允許應用程式使用相機拍照和錄影。這項權限允許應用程式隨時使用相機，而不需經您確認。"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"使用相機時停用傳輸指示燈"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"允許應用程式控制裝置上的電話功能。具備此權限的應用程式可在未通知您的情況下，進行切換網絡以及開關手機無線電之類的操作。"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"讀取手機狀態和識別碼"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"允許應用程式使用裝置的電話功能。這項權限允許應用程式確定手機號碼和裝置編號、是否正在通話中，以及所撥打的對方號碼。"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"讀取精確的手機狀態"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"允許應用程式存取精確的手機狀態。此權限可讓應用程式判斷實際的通話狀態、是否正在通話或在背景中運作、無法通話次數、精確的數據連線狀態和數據連線失敗次數。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"防止平板電腦進入休眠狀態"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"防止手機進入休眠狀態"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"允許應用程式防止平板電腦進入休眠狀態。"</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"更改 WiMAX 狀態"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"允許應用程式建立或中斷平板電腦與 WiMAX 網絡的連線。"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"允許應用程式建立或中斷手機與 WiMAX 網絡的連線。"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"為網絡計分"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"允許應用程式為網絡排名，及決定平板電腦偏好使用的網絡。"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"允許應用程式為網絡排名，及決定手機偏好使用的網絡。"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"與藍牙裝置配對"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"允許應用程式查看平板電腦的藍牙設定，以及建立和接受與其他配對裝置的連線。"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"允許應用程式查看手機的藍牙設定，以及建立和接受與其他配對裝置的連線。"</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"允許應用程式擷取、檢查及清除通知 (包括由其他應用程式發佈的通知)。"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"繫結至通知接聽器服務"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"允許應用程式繫結至通知接聽器服務的頂層介面 (不建議一般應用程式使用)。"</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"繫結至條件供應商服務"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"允許應用程式繫結至條件供應商服務的頂層介面，但一般應用程式並不需要使用。"</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"調用流動網絡供應商提供的設定應用程式"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"允許應用程式調用流動網絡供應商提供的設定應用程式 (不建議一般應用程式使用)。"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"監聽對網絡狀況的觀察"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"允許應用程式監聽對網絡狀況的觀察 (不建議一般應用程式使用)。"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"變更輸入裝置校正設定"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"允許應用程式修改觸控式螢幕的校正參數，而一般應用程式並不需要作出類似修改。"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"存取 DRM 憑證"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"允許應用程式準備和使用 DRM 憑證，但一般應用程式並不需要使用。"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"設定密碼規則"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"控制屏幕解鎖密碼所允許的長度和字元。"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"監控屏幕解鎖嘗試次數"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"家用"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"工作"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"其他"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"找不到可以查看這位聯絡人的應用程式。"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"輸入 PIN 碼"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"輸入 PUK 碼和新 PIN 碼"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 碼"</string>
@@ -947,7 +1007,7 @@
     <string name="permlab_setAlarm" msgid="1379294556362091814">"設定鬧鐘"</string>
     <string name="permdesc_setAlarm" msgid="316392039157473848">"允許應用程式在安裝的鬧鐘應用程式中設定鬧鐘，某些鬧鐘應用程式可能沒有這項功能。"</string>
     <string name="permlab_addVoicemail" msgid="5525660026090959044">"新增留言"</string>
-    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"允許應用程式將訊息加到您的留言信箱收件匣。"</string>
+    <string name="permdesc_addVoicemail" msgid="6604508651428252437">"允許應用程式將訊息加到您的留言信箱收件箱。"</string>
     <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"修改瀏覽器地理資訊的權限"</string>
     <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"允許應用程式修改瀏覽器的地理資訊權限。惡意應用程式可能會藉此允許將您的位置資訊任意傳送給某些網站。"</string>
     <string name="permlab_packageVerificationAgent" msgid="5568139100645829117">"驗證套件"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"允許應用程式存取 Keyguard 安全儲存空間。"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"控制顯示或隱藏鍵盤鎖"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"允許應用程式控制鍵盤鎖。"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"聽取信任狀態變更。"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"允許應用程式聽取信任狀態的變更。"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"繫結至信任的代理程式服務"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"允許應用程式繫結至信任的代理程式服務。"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"與更新和復原系統互動"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"允許應用程式與復原系統和系統更新互動。"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"輕觸兩下即可控制縮放"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"無法新增小工具。"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"開始"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"桌布"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"變更桌布"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知接聽器"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"條件供應商"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN 已啟用。"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> 已啟用 VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"輕觸即可管理網絡。"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 鍵"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 鍵"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"選擇應用程式"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"無法啟動 <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"分享給"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"與「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」分享"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"滑動控制。持續輕觸。"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"向下滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"向右滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"解鎖"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"相機"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"靜音"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"音效已開啟"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"滑動即可解鎖。"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"插上耳機即可聽到系統朗讀密碼鍵。"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"點。"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"系統"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"藍牙音頻"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"無線螢幕分享"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"媒體輸出"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"連接裝置"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"在裝置上放送螢幕"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"正在搜尋裝置…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"設定"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"停止連接"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"正在掃描…"</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"正在連線..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"可用"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"重疊效果 #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>：<xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>，<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"(安全)"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"已連接無線顯示裝置"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"這個畫面正在另一部裝置上顯示"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"正在此放送螢幕"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"正在連線到「<xliff:g id="NAME">%1$s</xliff:g>」"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"正在此放送螢幕"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"已連線到「<xliff:g id="NAME">%1$s</xliff:g>」"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"中斷連線"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"緊急電話"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘記圖案"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解開上鎖的 SIM 卡..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 碼不正確。"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"請輸入一個 4 至 8 位數的 PIN 碼。"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 碼應由 8 個或以上數字組成。"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK 碼應由 8 位數字組成。"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"請重新輸入正確的 PUK 碼。如果嘗試輸入的次數過多，SIM 卡將永久停用。"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 碼不符"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"圖案嘗試次數過多"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> 秒後再試一次"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"稍後再試"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"從頂端往下滑動即可結束全螢幕。"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"由頂端往下快速滑動即可離開全螢幕。"</string>
+    <string name="done_label" msgid="2093726099505892398">"完成"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"小時環形滑桿"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"分鐘環形滑桿"</string>
+    <string name="select_hours" msgid="6043079511766008245">"選取小時"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"選取分鐘"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"顯示每日的月曆方格"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"年份清單"</string>
+    <string name="select_day" msgid="7774759604701773332">"選取月份和日期"</string>
+    <string name="select_year" msgid="7952052866994196170">"選取年份"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"已選取<xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"<xliff:g id="KEY">%1$s</xliff:g> 已刪除"</string>
 </resources>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 3ec8d4c..05e0894 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;未命名&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"…"</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"輸入 8 位數以上的 PUK。"</string>
     <string name="needPuk" msgid="919668385956251611">"SIM 卡的 PUK 已鎖定。請輸入 PUK 碼解除鎖定。"</string>
     <string name="needPuk2" msgid="4526033371987193070">"請輸入 PUK2 以解鎖 SIM 卡。"</string>
+    <string name="enablePin" msgid="209412020907207950">"操作失敗，請啟用 SIM/RUIM 鎖定。"</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗，SIM 卡將被鎖住。"</item>
+    <item quantity="other" msgid="7530597808358774740">"您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗，SIM 卡將被鎖住。"</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"來電顯示"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"同步處理"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"同時刪除太多 <xliff:g id="CONTENT_TYPE">%s</xliff:g>。"</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"平板電腦的儲存空間已滿。請刪除一些檔案，以釋放出可用空間。"</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"手錶儲存空間已用盡，請刪除一些檔案以釋出可用空間。"</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"手機儲存空間已滿。請刪除一些檔案，以釋放可用空間。"</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"網路可能會受到監控"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"受到不明的第三方監控"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"鈴聲開啟"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"關機中…"</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"您的平板電腦將會關機。"</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"您的手錶即將關機。"</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"手機即將關機。"</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"您要關機嗎？"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"重新啟動進入安全模式"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"飛航模式"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"飛航模式為 [開啟]"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"飛航模式為 [關閉]"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"設定"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"超過 999"</string>
     <string name="safeMode" msgid="2788228061547930246">"安全模式"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Android 系統"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"解除安裝捷徑"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"允許應用程式自動移除主螢幕捷徑。"</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"重設撥號路徑"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"允許應用程式處理撥出電話及更改撥打的號碼。這項權限可讓應用程式監控、轉接或阻止撥出的電話。"</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"允許應用程式在撥打電話期間查看撥出的電話號碼，並可選擇改撥其他號碼或中斷通話。"</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"接收簡訊 (SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"允許應用程式接收和處理簡訊。這項設定可讓應用程式監控傳送至您裝置的訊息，或在您閱讀訊息前擅自刪除訊息。"</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"接收簡訊 (MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"允許應用程式擷取使用中的視窗內容。請注意，惡意應用程式可能利用此功能擷取完整視窗內容，並檢視密碼之外的所有文字。"</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"暫時啟用協助工具"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"允許應用程式在裝置上暫時啟用協助工具。惡意應用程式可能藉此在未經使用者同意的情況下擅自啟用協助工具。"</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"擷取視窗資訊"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"允許應用程式透過視窗管理程式擷取視窗的相關資訊。請注意，惡意應用程式可能藉此擷取僅限內部系統使用的資訊。"</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"擷取視窗符記"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"允許應用程式擷取視窗符記。惡意應用程式可能會藉此在未經授權的情況下與模擬系統的應用程式視窗互動。"</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"擷取畫格統計資料"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"允許應用程式收集畫格統計資料。惡意應用程式可能會藉此得知其他應用程式的視窗畫格統計資料。"</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"篩選活動"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"允許應用程式註冊輸入篩選器，在分派所有使用者活動的串流前先行篩選。請注意，惡意應用程式可能藉此擅自控制系統使用者介面。"</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"放大畫面"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"允許應用程式放大畫面內容。請注意，惡意應用程式可能會藉此利用不正常的方式改變顯示內容，導致裝置失靈。"</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"部分關機"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"讓活動管理員進入關機狀態，而不執行完整的關機程序。"</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"防止切換應用程式"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"允許應用程式在收到 SMS 簡訊時發出通知。請注意，惡意應用程式可能利用此功能偽造外來的 SMS 簡訊。"</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"送出「WAP PUSH 已接收」廣播"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"允許應用程式在收到 WAP PUSH 訊息時發送通知。請注意，惡意應用程式可能利用此功能偽造 MMS 簡訊回條，或私自將網頁內容更換為惡意陷阱。"</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"傳送網路計分廣播通知"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"允許應用程式廣播「網路需計分」的通知訊息 (一般應用程式並不需要)。"</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"執行程序限制數"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"允許應用程式控制可執行程序的數量上限 (一般應用程式不需使用)。"</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"強制關閉背景應用程式"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"允許應用程式聯繫至 VPN 服務的頂層介面 (一般應用程式不需使用)。"</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"連結至桌布"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"允許應用程式繫結至桌布的頂層介面 (一般應用程式不需使用)。"</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"繫結至語音互動器"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"允許應用程式繫結至語音互動服務的頂層介面 (一般應用程式並不需要)。"</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"繫結至遠端螢幕"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"允許應用程式繫結至遠端螢幕的頂層介面 (一般應用程式不需使用)。"</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"繫結至小工具服務"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"允許應用程式繫結至小工具服務的頂層介面 (一般應用程式不需使用)。"</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"繫結至路由供應商服務"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"允許應用程式繫結至任何已註冊的路由供應商 (一般應用程式並不需要)。"</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"與裝置管理員互動"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"允許應用程式將調用請求傳送至裝置管理員 (一般應用程式不需使用)。"</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"繫結至電視訊號輸入裝置"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"允許應用程式繫結至電視訊號輸入裝置的頂層介面 (一般應用程式並不需要)。"</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"新增或移除裝置管理員"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"允許應用程式新增或移除有效的裝置管理員 (一般應用程式並不需要)。"</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"變更螢幕顯示方向"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"允許應用程式使用任何已安裝的媒體解碼器進行解碼以播放影片。"</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"管理信任的憑證"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"允許應用程式安裝 CA 憑證 (做為信任的憑證) 及解除安裝 CA 憑證。"</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"當裝置閒置時執行應用程式"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"當裝置處於未使用狀態時，此權限允許 Android 系統在背景執行應用程式。"</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"讀寫 diag 擁有的資源"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"允許應用程式讀取或寫入診斷群組擁有的任何資源，例如 /dev 底下的檔案。這可能會影響系統的穩定性和安全性，因此應由製造商或電信業者操作，且只用在特定硬體診斷。"</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"啟用或停用應用程式元件"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"允許應用程式讀取裝置上儲存的個人資料，例如您的姓名和聯絡資訊。這表示應用程式可以識別您的身分，並將您的個人資料傳送給他人。"</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"修改自己的聯絡資訊"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"允許應用程式新增或變更裝置上儲存的個人資料，例如您的姓名和聯絡資訊。這項設定可讓應用程式識別您的身分，並可能將您的個人資料傳送給他人。"</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"身體感應器 (例如心律監測器)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"允許應用程式存取感應器從您的身體測得的資料，例如心跳頻率。"</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"讀取您的社交串流"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"允許應用程式存取並同步處理您和好友的最新動態。因此，當您分享資訊時請小心，因為這項權限可讓應用程式讀取您和好友在社交網路上的私人通訊，包括機密通訊。注意：並非所有社交網路皆適用於這項權限。"</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"寫入您的社交串流"</string>
@@ -477,14 +521,16 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"允許應用程式使用 SurfaceFlinger 的低階功能。"</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"讀取框架緩衝"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"允許應用程式讀取畫面緩衝區的內容。"</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"存取 InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"允許應用程式使用 InputFlinger 的低階功能。"</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"設定 Wi-Fi 顯示裝置"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"允許應用程式設定及連接 Wi-Fi 顯示裝置。"</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"控制 Wi-Fi 顯示裝置"</string>
     <string name="permdesc_controlWifiDisplay" msgid="4543912292681826986">"允許應用程式控制 Wi-Fi 顯示裝置的低階功能。"</string>
     <string name="permlab_captureAudioOutput" msgid="6857134498402346708">"擷取音訊輸出"</string>
     <string name="permdesc_captureAudioOutput" msgid="6210597754212208853">"允許應用程式擷取及重新導向音訊輸出。"</string>
-    <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"熱門字詞偵測"</string>
-    <string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"允許應用程式擷取音訊用於熱門字詞偵測。擷取作業可在背景執行，但並未禁止使用其他音訊擷取工具 (例如攝錄影機)。"</string>
+    <string name="permlab_captureAudioHotword" msgid="1890553935650349808">"啟動字詞偵測"</string>
+    <string name="permdesc_captureAudioHotword" msgid="9151807958153056810">"允許應用程式擷取音訊用於啟動字詞偵測。擷取作業可在背景執行，但並未禁止使用其他音訊擷取工具 (例如攝錄影機)。"</string>
     <string name="permlab_captureVideoOutput" msgid="2246828773589094023">"擷取視訊輸出"</string>
     <string name="permdesc_captureVideoOutput" msgid="359481658034149860">"允許應用程式擷取及重新導向視訊輸出。"</string>
     <string name="permlab_captureSecureVideoOutput" msgid="7815398969303382016">"擷取安全視訊輸出"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"允許應用程式修改全域音訊設定，例如音量和用來輸出的喇叭。"</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"錄製音訊"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"允許應用程式使用麥克風錄音。這項權限可讓應用程式隨時錄音，不需經過您的確認。"</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"SIM 卡通訊"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"允許應用程式傳送指令到 SIM 卡。這麼做非常危險。"</string>
     <string name="permlab_camera" msgid="3616391919559751192">"拍攝相片和影片"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"允許應用程式使用相機拍照和錄影。這項權限可讓應用程式隨時使用相機，而不需請求您進行確認。"</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"使用攝影機時停用傳輸指示器 LED"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"允許應用程式控制裝置的電話功能。擁有這項權限的應用程式可在未通知您的情況下，任意切換網路、開啟或關閉手機無線電等。"</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"讀取手機狀態和識別碼"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"允許應用程式使用裝置的電話功能。這項權限可讓應用程式判讀手機號碼和裝置 ID、是否正在通話中，以及所撥打的對方號碼。"</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"讀取手機精確狀態"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"允許應用程式存取手機的精確狀態。這項權限可讓應用程式判別實際通話狀態，包括通話正在進行中或是在背景運作、通話失敗次數、精確數據連線狀態和數據連線失敗次數。"</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"防止平板電腦進入休眠狀態"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"防止手機進入待命狀態"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"允許應用程式防止平板電腦進入休眠狀態。"</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"變更 WiMAX 狀態"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"允許應用程式建立或中斷平板電腦與 WiMAX 網路的連線。"</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"允許應用程式建立或中斷手機與 WiMAX 網路的連線。"</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"為網路計分"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"允許應用程式建立網路排名，決定平板電腦偏好使用的網路。"</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"允許應用程式建立網路排名，決定手機偏好使用的網路。"</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"與藍牙裝置配對"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"允許應用程式查看平板電腦的藍牙設定，以及建立和接受與其他配對裝置的連線。"</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"允許應用程式查看手機的藍牙設定，以及建立和接受與其他配對裝置的連線。"</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"允許應用程式擷取、檢查及清除通知 (包括由其他應用程式發佈的通知)。"</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"繫結至通知接聽器服務"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"允許應用程式繫結至通知接聽器服務的頂層介面 (一般應用程式不需使用)。"</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"繫結至條件提供者服務"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"允許應用程式繫結至條件提供者服務的頂層介面 (一般應用程式並不需要)。"</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"叫用行動通訊業者提供的設定應用程式"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"允許應用程式叫用行動通訊業者提供的設定應用程式 (一般應用程式並不需要)。"</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"監聽網路狀況觀察資訊"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"允許應用程式監聽網路狀況觀察資訊 (一般應用程式並不需要)。"</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"變更輸入裝置校正設定"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"允許應用程式修改觸控螢幕的校正參數 (一般應用程式並不需要)。"</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"存取 DRM 憑證"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"允許應用程式佈建及使用 DRM 憑證 (一般應用程式並不需要)。"</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"設定密碼規則"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"控制螢幕解鎖密碼所允許的長度和字元。"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"監視螢幕解鎖嘗試次數"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"住家"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"公司"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"其他"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"找不到可用來查看這位聯絡人的應用程式。"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"輸入 PIN 碼"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"輸入 PUK 碼和新 PIN 碼"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 碼"</string>
@@ -1122,7 +1182,7 @@
     <string name="chooseUsbActivity" msgid="6894748416073583509">"選取要以 USB 裝置存取的應用程式"</string>
     <string name="noApplications" msgid="2991814273936504689">"沒有應用程式可執行這項操作。"</string>
     <string name="aerr_title" msgid="1905800560317137752"></string>
-    <string name="aerr_application" msgid="932628488013092776">"很抱歉，<xliff:g id="APPLICATION">%1$s</xliff:g> 已停止。"</string>
+    <string name="aerr_application" msgid="932628488013092776">"很抱歉，<xliff:g id="APPLICATION">%1$s</xliff:g>已停止運作。"</string>
     <string name="aerr_process" msgid="4507058997035697579">"很抱歉，處理程序 <xliff:g id="PROCESS">%1$s</xliff:g> 已停止。"</string>
     <string name="anr_title" msgid="4351948481459135709"></string>
     <string name="anr_activity_application" msgid="1904477189057199066">"<xliff:g id="APPLICATION">%2$s</xliff:g> 沒有回應。\n\n您要結束嗎？"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"允許應用程式存取 Keyguard 安全儲存空間。"</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"控制鍵盤鎖的顯示和隱藏"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"允許應用程式控制鍵盤鎖。"</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"接聽信任狀態變更。"</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"允許應用程式接聽信任狀態變更。"</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"繫結至信任的代理程式服務"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"允許應用程式繫結至信任的代理程式服務。"</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"與更新和還原系統互動"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"允許應用程式與還原系統及系統更新互動。"</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"輕觸兩下即可控制縮放"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"無法新增小工具。"</string>
     <string name="ime_action_go" msgid="8320845651737369027">"開始"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"桌布"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"變更桌布"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"通知接聽器"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"條件提供者"</string>
     <string name="vpn_title" msgid="19615213552042827">"VPN 已啟用"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"<xliff:g id="APP">%s</xliff:g> 已啟用 VPN"</string>
     <string name="vpn_text" msgid="3011306607126450322">"輕觸即可管理網路。"</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 鍵"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 鍵"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"選擇應用程式"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"無法啟動 <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"分享對象："</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"與「<xliff:g id="APPLICATION_NAME">%s</xliff:g>」分享"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"滑動控制。持續輕觸。"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"向下滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"向右滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"解除鎖定"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"相機"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"靜音"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"開啟音效"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"滑動即可解鎖。"</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"連接耳機即可聽取系統朗讀密碼按鍵。"</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"點。"</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"系統"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"藍牙音訊"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"無線螢幕分享"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"完成"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"媒體輸出"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"連線至裝置"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"將螢幕投放到裝置上"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"正在搜尋裝置..."</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"設定"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"中斷連線"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"掃描中..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"連線中…"</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"可以使用"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"第 <xliff:g id="ID">%1$d</xliff:g> 個重疊效果"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>：<xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>，<xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">"(安全)"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"已連接無線顯示器"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"其他裝置正在顯示這個畫面"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"正在投放螢幕"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"正在連線至「<xliff:g id="NAME">%1$s</xliff:g>」"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"正在投放螢幕"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"已連線至「<xliff:g id="NAME">%1$s</xliff:g>」"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"中斷連線"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"緊急電話"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘記圖形"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解除 SIM 卡鎖定..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 碼不正確。"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"請輸入 4 到 8 碼的 PIN。"</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 碼至少必須為 8 碼。"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"PUK 碼必須為 8 碼。"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"重新輸入正確的 PUK 碼。如果錯誤次數過多，SIM 卡將會永久停用。"</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 碼不符"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"圖形嘗試次數過多"</string>
@@ -1649,5 +1714,16 @@
     <item quantity="other" msgid="4730868920742952817">"<xliff:g id="COUNT">%d</xliff:g> 秒後再試一次"</item>
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"稍後再試"</string>
-    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"從頂端往下滑動即可結束全螢幕。"</string>
+    <string name="immersive_mode_confirmation" msgid="7227416894979047467">"從頂端往下滑動即可退出全螢幕模式。"</string>
+    <string name="done_label" msgid="2093726099505892398">"完成"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"小時數環狀滑桿"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"分鐘數環狀滑桿"</string>
+    <string name="select_hours" msgid="6043079511766008245">"選取小時數"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"選取分鐘數"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"日期網格 (按月顯示)"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"年份清單"</string>
+    <string name="select_day" msgid="7774759604701773332">"選取月份和日期"</string>
+    <string name="select_year" msgid="7952052866994196170">"選取年份"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"已選取 <xliff:g id="ITEM">%1$s</xliff:g>"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"已刪除 <xliff:g id="KEY">%1$s</xliff:g>"</string>
 </resources>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 57d59c3..9c8542e 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -27,6 +27,28 @@
     <string name="terabyteShort" msgid="231613018159186962">"TB"</string>
     <string name="petabyteShort" msgid="5637816680144990219">"PB"</string>
     <string name="fileSizeSuffix" msgid="9164292791500531949">"<xliff:g id="NUMBER">%1$s</xliff:g><xliff:g id="UNIT">%2$s</xliff:g>"</string>
+    <!-- no translation found for durationDays (6652371460511178259) -->
+    <skip />
+    <!-- no translation found for durationDayHours (2713107458736744435) -->
+    <skip />
+    <!-- no translation found for durationDayHour (7293789639090958917) -->
+    <skip />
+    <!-- no translation found for durationHours (4266858287167358988) -->
+    <skip />
+    <!-- no translation found for durationHourMinutes (9029176248692041549) -->
+    <skip />
+    <!-- no translation found for durationHourMinute (2741677355177402539) -->
+    <skip />
+    <!-- no translation found for durationMinutes (3134226679883579347) -->
+    <skip />
+    <!-- no translation found for durationMinuteSeconds (1424656185379003751) -->
+    <skip />
+    <!-- no translation found for durationMinuteSecond (3989228718067466680) -->
+    <skip />
+    <!-- no translation found for durationSeconds (8050088505238241405) -->
+    <skip />
+    <!-- no translation found for durationSecond (985669622276420331) -->
+    <skip />
     <string name="untitled" msgid="4638956954852782576">"&lt;Akunasihloko&gt;"</string>
     <string name="ellipsis" msgid="7899829516048813237">"..."</string>
     <string name="ellipsis_two_dots" msgid="1228078994866030736">"‥"</string>
@@ -50,6 +72,11 @@
     <string name="invalidPuk" msgid="8761456210898036513">"Thayipha i-PUK enezinombolo ezingu-8 noma ngaphezu."</string>
     <string name="needPuk" msgid="919668385956251611">"Ikhadi lakho le-SIM livalwe nge-PUK. Thayipha ikhodi ye-PUK ukulivula."</string>
     <string name="needPuk2" msgid="4526033371987193070">"Thayipha i-PUK2 ukuze uvule ikhadi le-SIM."</string>
+    <string name="enablePin" msgid="209412020907207950">"Akuphumelelanga, nika amandla ukhiye we-SIM/RUIM."</string>
+  <plurals name="pinpuk_attempts">
+    <item quantity="one" msgid="6596245285809790142">"Unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> ngaphambi kokuba i-SIM ikhiywe."</item>
+    <item quantity="other" msgid="7530597808358774740">"Unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> ngaphambi kokuba i-SIM ikhiywe."</item>
+  </plurals>
     <string name="imei" msgid="2625429890869005782">"IMEI"</string>
     <string name="meid" msgid="4841221237681254195">"MEID"</string>
     <string name="ClipMmi" msgid="6952821216480289285">"I-ID Yocingo Olungenayo"</string>
@@ -130,6 +157,7 @@
     <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Vumelanisa"</string>
     <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Kunokususa <xliff:g id="CONTENT_TYPE">%s</xliff:g> okuningi kakhulu."</string>
     <string name="low_memory" product="tablet" msgid="6494019234102154896">"Isilondolozi sethebhulethi sigcwele! Susa amanye amafayela ukukhulula isikhala."</string>
+    <string name="low_memory" product="watch" msgid="4415914910770005166">"Isitoreji sokubuka sigcwele. Susa amanye amafayela ukukhulula isikhala."</string>
     <string name="low_memory" product="default" msgid="3475999286680000541">"Isilondolozi sefoni sigcwele! Susa amanye amafayela ukukhulula isikhala."</string>
     <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Inethiwekhi ingase inganyelwe"</string>
     <string name="ssl_ca_cert_noti_by_unknown" msgid="4475437862189850602">"Ngenkampani yangaphandle engaziwa"</string>
@@ -147,6 +175,7 @@
     <string name="silent_mode_ring" msgid="8592241816194074353">"Iringa iyasebenza"</string>
     <string name="shutdown_progress" msgid="2281079257329981203">"Ivala shaqa..."</string>
     <string name="shutdown_confirm" product="tablet" msgid="3385745179555731470">"Ithebhulethi yakho izocima."</string>
+    <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Ukubuka kwakho kuzocima."</string>
     <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Ifoni yakho izocima."</string>
     <string name="shutdown_confirm_question" msgid="2906544768881136183">"Ingabe ufuna ukucisha?"</string>
     <string name="reboot_safemode_title" msgid="7054509914500140361">"Qala kabusha emodini ephephile"</string>
@@ -166,6 +195,7 @@
     <string name="global_actions_toggle_airplane_mode" msgid="5884330306926307456">"Imodi yendiza"</string>
     <string name="global_actions_airplane_mode_on_status" msgid="2719557982608919750">"Imodi yendiza IVULIWE"</string>
     <string name="global_actions_airplane_mode_off_status" msgid="5075070442854490296">"Imodi yendiza IVALIWE"</string>
+    <string name="global_action_settings" msgid="1756531602592545966">"Izilungiselelo"</string>
     <string name="status_bar_notification_info_overflow" msgid="5301981741705354993">"999+"</string>
     <string name="safeMode" msgid="2788228061547930246">"Imodi ephephile"</string>
     <string name="android_system_label" msgid="6577375335728551336">"Uhlelo lwe-Android"</string>
@@ -251,7 +281,7 @@
     <string name="permlab_uninstall_shortcut" msgid="4729634524044003699">"khipha izinqamuleli"</string>
     <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Ivumela uhlelo lokusebenza ukususa izinqamuleli zesikrini sasekhaya ngaphandle kokungenela komsebenzisi."</string>
     <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"thumela amakholi aphumayo kabusha"</string>
-    <string name="permdesc_processOutgoingCalls" msgid="5331318931937402040">"Ivumela uhlelo lokusebenza ukucubungula amakholi aphumayo futhi ishintshe inombolo ezoshayelwa. Le mvume ivumela uhlelo lokusebenza ukwengamela, liqondise kabusha, noma livikele amakholi aphumayo."</string>
+    <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Ivumela uhlelo lokusebenza ukubona inombolo eshayelwayo ngesikhathi sekholi ephumayo ngenketho yokuqondisa kabusha ikholi kwinombolo ehlukile noma ukuyekisa ikholi yonke."</string>
     <string name="permlab_receiveSms" msgid="8673471768947895082">"thola imiyalezo ebhaliwe (i-SMS)"</string>
     <string name="permdesc_receiveSms" msgid="6424387754228766939">"Ivumela uhlelo lokusebenza ukuthola nokucubungula imilayezo ye-SMS. Loku kuchaza ukuthi uhlelo lokusebenza lungangamela noma lesuse imilayezo ethunyelwe kudivayisi yakho ngaphandle kokukubonisa yona."</string>
     <string name="permlab_receiveMms" msgid="1821317344668257098">"thola imiyalezo ebhaliwe (i-MMS)"</string>
@@ -310,12 +340,12 @@
     <string name="permdesc_retrieve_window_content" msgid="3193269069469700265">"Ivumela uhlelo lokusebenza ukuthi ithole okuqukethe kwi-Window. Izuhlelo lokusebenza ezinobungozi zingathola kabush iwindi eliphelele bese ibheka konke okuqukethwe ngaphandle kwaaaphasiwedi."</string>
     <string name="permlab_temporary_enable_accessibility" msgid="2312612135127310254">"nika amandla okwesikhashana ukufinyelela"</string>
     <string name="permdesc_temporary_enable_accessibility" msgid="8079456293182975464">"Ivumela uhlelo lokusebenza ukunika amandla ukufinyelela kwesikhashana kuvidayisi. Izinhlelo zokusebenza ezingalungile zinganika amandla ukufinyelela ngaphandle kwemvume yomsebenzisi."</string>
-    <string name="permlab_retrieve_window_info" msgid="8532295199112519378">"buyisa ulwazi lewindi"</string>
-    <string name="permdesc_retrieve_window_info" msgid="4998836370424186849">"Ivumela uhlelo lokusebenza ukubuyisa ulwazi mayelana namawindi avela kumphathi wewindi. Izinhlelo zokusebenza zingabuyisa ulwazi olubhekiswe ukusetshenziselwa kohlelo lwangaphakathi."</string>
+    <string name="permlab_retrieveWindowToken" msgid="7154762602367758602">"buyisa ithokheni yewindi"</string>
+    <string name="permdesc_retrieveWindowToken" msgid="668173747687795074">"Ivumela uhlelo lokusebenza ukuletha ithokheni yewindi. Izinhlelo zokusebenza ezinonya zingenza izenzo ezingagunyaziwe ngewindi lohlelo lokusebenza lizenze isistimu."</string>
+    <string name="permlab_frameStats" msgid="7056374987314361639">"buyisa izibalo zefreyimu"</string>
+    <string name="permdesc_frameStats" msgid="4758001089491284919">"Ivumela uhlelo lokusebenza ukuthi luqoqe izibalo zefreyimu. Izinhlelo zokusebenza ezinonya zingabona izibalo zefreyimu zamawindi kusuka kwezinye izinhlelo zokusebenza."</string>
     <string name="permlab_filter_events" msgid="8675535648807427389">"hlunga imicimbi"</string>
     <string name="permdesc_filter_events" msgid="8006236315888347680">"Ivumela uhlelo lokusebenza ukubhalisa isihlungi sokufaka ukusakaza kwazo zonke izehlakalo zomsebenzisi ngaphambi kokuthunyelwa. Izinhlelo zokusebenza zingalawula i-UI yohlelo ngaphandle kokungena komsebenzisi."</string>
-    <string name="permlab_magnify_display" msgid="5973626738170618775">"lungisa ukubuka"</string>
-    <string name="permdesc_magnify_display" msgid="7121235684515003792">"Ivumela uhlelo lokusebenza ukusondeza okuqukethwe kokubukwa. Izinhlelo zokusebenza ezingalungile zidlulisela okuqukethwe kokubuka ngendlela eyenza idivayisi ingasebenziseki."</string>
     <string name="permlab_shutdown" msgid="7185747824038909016">"ukuvala shaqa kwengxenye"</string>
     <string name="permdesc_shutdown" msgid="7046500838746291775">"Ibeka imeneja yomsebenzi kwisimo sokuvala shaqa. Ayenzi ukuvala shaqa okuphelele."</string>
     <string name="permlab_stopAppSwitches" msgid="4138608610717425573">"gwema ukushintsha kohlelo lokusebenza"</string>
@@ -330,6 +360,8 @@
     <string name="permdesc_broadcastSmsReceived" msgid="4152037720034365492">"Ivumela uhlelo lokusebenza ukuthi isakaze isaziso sokuthi umyalezo we-SMS utholakele. Izuhlelo lokusebenza ezinobungozi zingasebenzisa lokhu ukufoja imiyalezo ye-SMS engenayo."</string>
     <string name="permlab_broadcastWapPush" msgid="3145347413028582371">"thumela umsakazo otholwe nge-WAP-PUSH"</string>
     <string name="permdesc_broadcastWapPush" msgid="4783402525039442729">"Ivumela uhlelo lokusebenza ukuthi isakaze isaziso sokuthi umyalezo we-WAP PUSH utholakele. Izuhlelo lokusebenza ezinobungozi zingasebenzisa lokhu ukufoja ukutholakala kwemiyalezo ye-S noma zisuse okuqukethwe kwanoma iliphi ikhasi lewebhu eliqukethe okunobungozi."</string>
+    <string name="permlab_broadcastScoreNetworks" msgid="6432008366605475024">"thumela ukusakaza kwamanethiwekhi ayisikolo"</string>
+    <string name="permdesc_broadcastScoreNetworks" msgid="7652980974435077828">"Ivumela uhlelo lokusebenza ukusakaza isaziso sokuthi amanethiwekhi adinga isikolo. Awadingeki kuzinhlelo zokusebenza ezivamile."</string>
     <string name="permlab_setProcessLimit" msgid="2451873664363662666">"khawula inani lezinqubo ezisebenzayo"</string>
     <string name="permdesc_setProcessLimit" msgid="7318061314040879542">"Ivumela uhlelo lokusebenza ukuthi ilawule isibalo esikhulu sezinto eziqhubekayo eziyosebenza. Ayidingakeli izinhlelo zokusebenza ezijwayelekile."</string>
     <string name="permlab_setAlwaysFinish" msgid="550958507798796965">"phoqa izinhlelo zokusebenza ezingemuva ukuthi zivaleke"</string>
@@ -377,10 +409,18 @@
     <string name="permdesc_bindVpnService" msgid="2067845564581693905">"Ivumela umnini ukuthi abophele kwissekelo esingaphezulu sesevisi ye-Vpm. Ayidingakeli izinhlelo zokusebenza ezejwayelekile."</string>
     <string name="permlab_bindWallpaper" msgid="8716400279937856462">"hlanganisa kwiphephadonga"</string>
     <string name="permdesc_bindWallpaper" msgid="7108428692595491668">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lwephephadonga. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_bindVoiceInteraction" msgid="5334852580713715068">"hlanganisa kusisebenzisani sezwi"</string>
+    <string name="permdesc_bindVoiceInteraction" msgid="2345721766501778101">"Ivumela umbambi ukuhlanganisa isixhumi esibonakalayo sesevisi yokusebenzisana yezwi. Akufanele kudingekele izinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_bindRemoteDisplay" msgid="1782923938029941960">"bophezela kusibonisi sesilawuli kude"</string>
+    <string name="permdesc_bindRemoteDisplay" msgid="1261242718727295981">"Ivumela umbambi ukuhlanganisa isixhumi esibonakalayo esisezingeni eliphezulu sesibonisi sesilawuli kude. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string>
     <string name="permlab_bindRemoteViews" msgid="5697987759897367099">"bophezela kube isevisi yesinqunjana"</string>
     <string name="permdesc_bindRemoteViews" msgid="4717987810137692572">"Ivumela umbambi ukuhlanganisa uxhumano nomsebenzisi kwezinga eliphezulu lensizakalo yesinqunjwana. Akusoze kwadingeka kwezinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_bindRouteProvider" msgid="4869394607915096847">"bophezela kusevisi yomhlinzeki womzila"</string>
+    <string name="permdesc_bindRouteProvider" msgid="4703804520859960329">"Ivumela isibambi ukubophezela kunoma yimuphi umhlinzeki womzila obhalisiwe. Akufanele kudingeke izinhlelo zokusebenza ezivamile."</string>
     <string name="permlab_bindDeviceAdmin" msgid="8704986163711455010">"xhumana nomphathi wedivaysi"</string>
     <string name="permdesc_bindDeviceAdmin" msgid="569715419543907930">"Ivumela ummeli ukuthumela okuqukethwe kumphathi wedivaysi. Akusoze kwadingeka kwizinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_bindTvInput" msgid="5601264742478168987">"bophezela kokokufaka kwe-TV"</string>
+    <string name="permdesc_bindTvInput" msgid="2371008331852001924">"Ivumela umbambi ukuthi abophezele uxhumano nomsebenzisi kwezinga eliphezulu lokokufaka kwe-TV. Akumele kudingelwe izinhlelo zokusebenza ezijwayelekile."</string>
     <string name="permlab_manageDeviceAdmins" msgid="4248828900045808722">"engeza noma susa umlawuli wedivayisi"</string>
     <string name="permdesc_manageDeviceAdmins" msgid="5025608167709942485">"Ivumela umnikazi ukuthi angeze noma asuse abalawuli bedivayisi esebenzayo. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string>
     <string name="permlab_setOrientation" msgid="3365947717163866844">"shintsha ukujikeleza kwesikrini"</string>
@@ -416,6 +456,8 @@
     <string name="permdesc_anyCodecForPlayback" msgid="8283912488433189010">"Ivumela uhlelo lokusebenza ukusebenzisa noma isiphi isiqophi semidiya esifakiwe ukuqopha ukudlala."</string>
     <string name="permlab_manageCaCertificates" msgid="1678391896786882014">"phatha ukuqinisekisa okuthenjiwe"</string>
     <string name="permdesc_manageCaCertificates" msgid="4015644047196937014">"Ivumela uhlelo lokusebenza ukuthi lifake liphinde likhiphe izitifiketi ze-CA njengokuqinisekiswa okuthenjiwe."</string>
+    <string name="permlab_bindIdleService" msgid="816311765497613780">"qalisa uhlelo lokusebenza ngesikhathi sokungenzi lutho"</string>
+    <string name="permdesc_bindIdleService" msgid="1767538493214100612">"Le mvume ivumela isistimu ye-Android ukuthi iqalise uhlelo lokusebenza ngemuva ngenkathi idivayisi ingasebenzi."</string>
     <string name="permlab_diagnostic" msgid="8076743953908000342">"funda/bhalela emithombweni ephethwe idayegi"</string>
     <string name="permdesc_diagnostic" msgid="6608295692002452283">"Ivumela uhlelo lokusebenza ukufunda nokubhala kunoma yimuphi umthombo weqembu ledayegi; ngokwesibonelo, amafayela akwi/dev. Lokhu kungase kuthinte kakhulu ukuba nokuphepha kohlelo. Lokhu kumele kusebenziselwe KUPHELA ukuhlola ihadiwe okucacile ngumkhiqizi noma u-opheretha."</string>
     <string name="permlab_changeComponentState" msgid="6335576775711095931">"vumela noma vimbela izingxenye zensiza"</string>
@@ -453,6 +495,8 @@
     <string name="permdesc_readProfile" product="default" msgid="5462475151849888848">"Ivumela uhlelo lokusebenza ukuthi lifunde ulwazi lephrofayela lomuntu siqu olugcinwe kudivayisi yakho njengegama lakho kanye nolwazi lokuxhumana. Lokhu kuchaza ukuthi uhlelo lokusebenza lingakuhlonza bese lithumelela abanye ulwazi lakho lephrofayela."</string>
     <string name="permlab_writeProfile" msgid="907793628777397643">"guqula ikhadi lakho lokuxhumana"</string>
     <string name="permdesc_writeProfile" product="default" msgid="5552084294598465899">"Ivumela uhlelo lokusebenza ukushintsha noma ingeze ulwazi lomuntu siqu lwephrofayela olulondolozwe kudivayisi yakho, njengegama lakho kanye nolwazi lokuxhumana. Lokhu kuchaza ukuthi ezinye izinhlelo zokusebenza zingakuhlonza bese zithumelela abanye ulwazi lephrofayela yakho."</string>
+    <string name="permlab_bodySensors" msgid="4871091374767171066">"izinzwa zomzimba (njengeziqaphi zokulinganisela inhliziyo)"</string>
+    <string name="permdesc_bodySensors" product="default" msgid="2998865085124153531">"Ivumela uhlelo lokusebenza ukuze lufinyelele kudatha esuka kuzinzwa ozisebenzisayo ukuze lulinganise ukuthi kwenzakalani phakathi komzimba wakho, njengokulinganisela kwenhliziyo."</string>
     <string name="permlab_readSocialStream" product="default" msgid="1268920956152419170">"funda ngezindlela zakho zokuxhumana nabanye abantu"</string>
     <string name="permdesc_readSocialStream" product="default" msgid="4255706027172050872">"Ivumela uhlelo lokusebenza ukufinyelela nokuvumelanisa izibuyekezo zomphakathi ezivela kuwe nakubangani bakho. Qaphela uma waba ulwazi -- lokhu kuvumela uhlelo lokusebenza ukufunda ukuxhumana phakathi kwakho nabangani bakho kumanethiwekhi omphakathi, ngaphandle kokugcinwa kuyimfihlo. Qaphela: le mvume ingaphoqelelwa kuwo onke amanethiwekhi omphakathi."</string>
     <string name="permlab_writeSocialStream" product="default" msgid="3504179222493235645">"bhala indlela yakho yokuxhumana nabantu"</string>
@@ -477,6 +521,8 @@
     <string name="permdesc_accessSurfaceFlinger" msgid="1041619516733293551">"Ivumela uhlelo lokusebenza ukuthi isebenzise okuqukethwe i-SurfaceFlinger okusezingeni eliphansi."</string>
     <string name="permlab_readFrameBuffer" msgid="6690504248178498136">"funda isikhumbuli sesikhashana sendikimba"</string>
     <string name="permdesc_readFrameBuffer" msgid="4937405521809454680">"Ivumela uhlelo lokusebenza ukuthi ifunde okuqukethwe ifreyimu yebhafa."</string>
+    <string name="permlab_accessInputFlinger" msgid="5348635270689553857">"finyelela ku-InputFlinger"</string>
+    <string name="permdesc_accessInputFlinger" msgid="2104864941201226616">"Ivumela uhlelo lokusebenza ukuthi lusebenzise izici zezinga eliphansi ze-InputFlinger."</string>
     <string name="permlab_configureWifiDisplay" msgid="5595661694746742168">"lungisa ukubukwa kwe-Wi-Fi"</string>
     <string name="permdesc_configureWifiDisplay" msgid="7916815158690218065">"Ivumela uhlelo lokusebenza ukulungisa nokuxhuma ekubukisweni kwe-Wi-Fi."</string>
     <string name="permlab_controlWifiDisplay" msgid="393641276723695496">"lawula ukubukwa kwe-Wi-Fi"</string>
@@ -495,6 +541,8 @@
     <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Ivumela uhlelo lokusebenza ukushintsha izilungiselelo zomsindo we-global njengevolomu nokuthi isiphi isipika esisetshenziselwa okukhiphayo."</string>
     <string name="permlab_recordAudio" msgid="3876049771427466323">"qopha umsindo"</string>
     <string name="permdesc_recordAudio" msgid="4906839301087980680">"Ivumela uhlelo lokusebenza ukurekhoda umsindo nge-microphone. Le mvume ivumela uhlelo lokusebenza ukuqopha umsindo noma kunini ngaphandle kokuqinisekisa kwakho."</string>
+    <string name="permlab_sim_communication" msgid="1180265879464893029">"uxhumano le-sim"</string>
+    <string name="permdesc_sim_communication" msgid="5725159654279639498">"Ivumela uhlelo lokusebenza ukuthumela imiyalo ku-SIM. Lokhu kuyingozi kakhulu."</string>
     <string name="permlab_camera" msgid="3616391919559751192">"thatha izithombe namavidiyo"</string>
     <string name="permdesc_camera" msgid="8497216524735535009">"Ivumela uhlelo lokusebenza ukuthatha izithombe namavidiyo ngekhamera. Le mvume ivumela uhlelo lokusebenza ukusebenzisa ikhamera nganoma isiphi isikhathi ngaphandle kwemvume yakho."</string>
     <string name="permlab_cameraDisableTransmitLed" msgid="2651072630501126222">"khubaza i-LED yesikhombi sokudlulisa uma ikhamera isebenza"</string>
@@ -550,6 +598,8 @@
     <string name="permdesc_modifyPhoneState" msgid="1029877529007686732">"Ivumela ukuthi uhlelo lokusebenza ilawule okuqukethwe ocingweni edivayisini. Insiza enalemvume ingaguquguqula amanethwekhi, ivule umsakazo wocingo iphinde iwucishe kanye nokunye okufana nalokho ngaphandle kokukwazisa."</string>
     <string name="permlab_readPhoneState" msgid="9178228524507610486">"funda isimo sefoni kanye nesazisi"</string>
     <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Ivumela uhlelo lokusebenza ukufinyelela izici zefoni zedivayisi. Le mvume ivumela uhlelo lokusebenza ukucacisa inombolo yefoni nobunikazi bedivayisi, ukuthi noma ikholi iyasebenza, futhi nenombolo yesilawuli kude zixhunywe ngekholi."</string>
+    <string name="permlab_readPrecisePhoneState" msgid="5476483020282007597">"funda izimo zefoni ezinembile"</string>
+    <string name="permdesc_readPrecisePhoneState" msgid="6648009074263855418">"Ivumelanisa uhlelo lokusebenza ukuthi lufinyelele kuzimo ezinembile zefoni. Le mvume ivumela uhlelo lokusebenza ukuthi linqume isimo sekholi sangempela, noma ikholi isebenza noma ingemuva, ikholi ihluleka, isimo esinembile sokuxhumeka kwedatha nokuhluleka kokuxhumeka kwedatha."</string>
     <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"gwema ithebhulethi ukuba ingalali"</string>
     <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"gwema ifoni ukuba ingalali"</string>
     <string name="permdesc_wakeLock" product="tablet" msgid="7311319824400447868">"Ivumela uhlelo lokusebenza ukuthi linqande ithebulethi yakho ukuthi ilale."</string>
@@ -617,6 +667,9 @@
     <string name="permlab_changeWimaxState" msgid="2405042267131496579">"Shintsha isimo se-WiMAX"</string>
     <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Ivumela uhlelo lokusebenza ukuxhuma ithebhulethi nokunqamula ithebhulethi kumanethiwekhi e-WiMAX."</string>
     <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Ivumela uhlelo lokusebenza ukuxhuma ifoni nokuyinqamula kumanethiwekhi e-WiMAX."</string>
+    <string name="permlab_scoreNetworks" msgid="6445777779383587181">"amanethiwekhi ayisikolo"</string>
+    <string name="permdesc_scoreNetworks" product="tablet" msgid="1304304745850215556">"Ivumela uhlelo lokusebenza ukuthi lilinganise amanethiwekhi futhi lithuthukise ukuthi imaphi amanethiwekhi ithebhulethi okufanele iwakhethe."</string>
+    <string name="permdesc_scoreNetworks" product="default" msgid="1831501848178651379">"Ivumela uhlelo lokusebenza ukuthi lilinganise amanethiwekhi futhi lithuthukise ukuthi imaphi amanethiwekhi ifoni okufanele iwakhethe."</string>
     <string name="permlab_bluetooth" msgid="6127769336339276828">"matanisa namadivayisi e-Bluetooth"</string>
     <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Ivumela uhlelo lokusebenza ukubuka ukucushwa kwe-Bluetooth kuthebhulethi, nokwenza futhi nokwamukela uxhumo namadivayisi amatanisiwe."</string>
     <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Ivumela uhlelo lokusebenza ukubuka ukucushwa kwe-Bluetooth efonini, ukwenza futhi nokwamukela uxhumo namadivayisi amatanisiwe."</string>
@@ -670,10 +723,16 @@
     <string name="permdesc_accessNotifications" msgid="458457742683431387">"Ivumela uhlelo lokusebenza ukuthi lithole, lihlole, liphinde lisuse izaziso, ezifaka lezo ezithunyelwe ezinye izinhlelo zokusebenza."</string>
     <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"bophezela kwisevisi yomlaleli wesaziso"</string>
     <string name="permdesc_bindNotificationListenerService" msgid="985697918576902986">"Ivumela umbambi ukubophezela kwisixhumi esibonakalayo sezinga eliphezulu lesevisi yomlaleli wesaziso. Akusoze kwadingeka kwizinhlelo zokusebenza ezivamile."</string>
+    <string name="permlab_bindConditionProviderService" msgid="1180107672332704641">"hlanganisa kwisevisi yomhlinzeki wesimo"</string>
+    <string name="permdesc_bindConditionProviderService" msgid="1680513931165058425">"Ivumela umbambi ukuhlanganisa isixhumi esibonakalayo seleveli ephezulu sesevisi yomhlinzeki wesimo. Akufanele kudingekele izinhlelo zokusebenza ezivamile."</string>
     <string name="permlab_invokeCarrierSetup" msgid="3699600833975117478">"buyisela uhlelo lokusebenza lokulungiselelwa okunikezwe yinkampani yenethiwekhi"</string>
     <string name="permdesc_invokeCarrierSetup" msgid="4159549152529111920">"Ivumela umnikazi ukuthi abuyisele uhlelo lokusebenza lokulungiselelwa. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string>
     <string name="permlab_accessNetworkConditions" msgid="8206077447838909516">"Lalela okubonwayo kuzimo zenethiwekhi"</string>
     <string name="permdesc_accessNetworkConditions" msgid="6899102075825272211">"Ivumela uhlelo lokusebenza ukuthi lulalele okubonwa kuzimo zenethiwekhi. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string>
+    <string name="permlab_setInputCalibration" msgid="4902620118878467615">"guqula ukulinganisa kokufaka kwedivayisi"</string>
+    <string name="permdesc_setInputCalibration" msgid="4527511047549456929">"Ivumela uhlelo lokusebenza ukuthi lushintshe imingcele yokulinganisa yesikrini esithintwayo. Akumele idingelwe izinhlelo zokusebenza ezijwayelekile."</string>
+    <string name="permlab_accessDrmCertificates" msgid="7436886640723203615">"finyelela izitifiketi ze-DRM"</string>
+    <string name="permdesc_accessDrmCertificates" msgid="8073288354426159089">"Ivumela uhlelo lokusebenza ekunikezweni nokusetshenziswa kwezitifiketi ze-DRM. Akufanele kudingeke kuzinhlelo zokusebenza ezivamile."</string>
     <string name="policylab_limitPassword" msgid="4497420728857585791">"Misa imithetho yephasiwedi"</string>
     <string name="policydesc_limitPassword" msgid="3252114203919510394">"Lawula ubude nezinhlamvu ezivunyelwe kumaphasiwedi okuvula isikrini"</string>
     <string name="policylab_watchLogin" msgid="914130646942199503">"Gaka imizamo yokuvula isikrini"</string>
@@ -783,7 +842,7 @@
     <string name="imProtocolYahoo" msgid="8271439408469021273">"i-Yahoo"</string>
     <string name="imProtocolSkype" msgid="9019296744622832951">"i-Skype"</string>
     <string name="imProtocolQq" msgid="8887484379494111884">"QQ"</string>
-    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Ama-Hangout"</string>
+    <string name="imProtocolGoogleTalk" msgid="493902321140277304">"Hangouts"</string>
     <string name="imProtocolIcq" msgid="1574870433606517315">"i-ICQ"</string>
     <string name="imProtocolJabber" msgid="2279917630875771722">"i-Jabber"</string>
     <string name="imProtocolNetMeeting" msgid="8287625655986827971">"Umhlangano we-Net"</string>
@@ -809,6 +868,7 @@
     <string name="sipAddressTypeHome" msgid="6093598181069359295">"Ekhaya"</string>
     <string name="sipAddressTypeWork" msgid="6920725730797099047">"Umsebenzi"</string>
     <string name="sipAddressTypeOther" msgid="4408436162950119849">"Okunye"</string>
+    <string name="quick_contacts_not_available" msgid="746098007828579688">"Alukho uhlelo lokusebenza olutholakele lokubuka lona oxhumana naye."</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Faka ikhodi ye-PIN"</string>
     <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Faka i-PUK nephinikhodi entsha"</string>
     <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Ikhodi le-PUK"</string>
@@ -1305,6 +1365,12 @@
     <string name="permdesc_access_keyguard_secure_storage" msgid="5866245484303285762">"Ivumela uhlelo lokusebenza ukuthi lufinyelele kusitoreji esiqashwa ngesikhiya esiphephile."</string>
     <string name="permlab_control_keyguard" msgid="172195184207828387">"Lawula ukubonisa nokufihla ukhiye wokuqapha"</string>
     <string name="permdesc_control_keyguard" msgid="3043732290518629061">"Ivumela uhlelo lokusebenza ukuthi lulawule ukhiye wokuqapha."</string>
+    <string name="permlab_trust_listener" msgid="1765718054003704476">"Lalela izinguquko zesimo sokuthemba."</string>
+    <string name="permdesc_trust_listener" msgid="8233895334214716864">"Ivumela uhlelo lokusebenza ukuthi lilalelele izinguquko kusimo sethemba."</string>
+    <string name="permlab_bind_trust_agent_service" msgid="8242093169457695334">"Bophezela kusevisi yomenzeli wethemba"</string>
+    <string name="permdesc_bind_trust_agent_service" msgid="7041930026024507515">"Ivumela uhlelo lokusebenza ukuthi libophezeleke kusevisi yomenzeli wethemba."</string>
+    <string name="permlab_recovery" msgid="3157024487744125846">"Ixhumana nesibuyekezo nesistimu yokutakula"</string>
+    <string name="permdesc_recovery" msgid="8511774533266359571">"Ivumela uhlelo lokusebenza ukuthi lixhumane nesistimu yokutakula nezibuyekezo zesistimu."</string>
     <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Thinta kabili ukulawula ukusondeza"</string>
     <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Yehlulekile ukwengeza i-widget."</string>
     <string name="ime_action_go" msgid="8320845651737369027">"Iya"</string>
@@ -1329,6 +1395,7 @@
     <string name="wallpaper_binding_label" msgid="1240087844304687662">"Iphephadonga"</string>
     <string name="chooser_wallpaper" msgid="7873476199295190279">"Shintsha iphephadonga"</string>
     <string name="notification_listener_binding_label" msgid="2014162835481906429">"Umlaleli wesaziso"</string>
+    <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Umhlinzeki wesimo"</string>
     <string name="vpn_title" msgid="19615213552042827">"I-VPN isiyasebenza"</string>
     <string name="vpn_title_long" msgid="6400714798049252294">"i-VPN ivuswe ngu <xliff:g id="APP">%s</xliff:g>"</string>
     <string name="vpn_text" msgid="3011306607126450322">"Thinta ukuze wengamele inethiwekhi."</string>
@@ -1414,18 +1481,10 @@
     <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Beka kwenye indawo"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Faka"</string>
     <string name="activitychooserview_choose_application" msgid="2125168057199941199">"Khetha uhlelo lokusebenza"</string>
+    <string name="activitychooserview_choose_application_error" msgid="8624618365481126668">"Ayikwazanga ukuqalisa i-<xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="shareactionprovider_share_with" msgid="806688056141131819">"Yabelana no"</string>
     <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Yabelana no <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
     <string name="content_description_sliding_handle" msgid="415975056159262248">"Ihaambis isibambo. Thinta &amp; ubambe."</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Shelelisela ngenhla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Shelelisela ngezansi ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Shelelisela ngakwesokunxele ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Shelelisela ngakwesokudla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Vula"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Ikhamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Thulile"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Umsindo uvuliwe"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Sesha"</string>
     <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Swayipha ukuze uvule."</string>
     <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Plaka ku-headset ukuze uzwe okhiye bephasiwedi ezindlebeni zakho bezwakala kakhulu."</string>
     <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Icashazi."</string>
@@ -1483,8 +1542,12 @@
     <string name="default_audio_route_category_name" msgid="3722811174003886946">"Isistimu"</string>
     <string name="bluetooth_a2dp_audio_route_name" msgid="8575624030406771015">"Umsindo we-Bluetooth"</string>
     <string name="wireless_display_route_description" msgid="9070346425023979651">"Ukubonisa okungenazintambo"</string>
-    <string name="media_route_chooser_grouping_done" msgid="7966438307723317169">"Qedile"</string>
     <string name="media_route_button_content_description" msgid="5758553567065145276">"Okukhiphayo kwemidiya"</string>
+    <string name="media_route_chooser_title" msgid="1751618554539087622">"Xhuma kudivayisi"</string>
+    <string name="media_route_chooser_title_for_remote_display" msgid="3395541745872017583">"Lingisa isikrini kudivayisi"</string>
+    <string name="media_route_chooser_searching" msgid="4776236202610828706">"Isesha amadivayisi…"</string>
+    <string name="media_route_chooser_extended_settings" msgid="87015534236701604">"Izilungiselelo"</string>
+    <string name="media_route_controller_disconnect" msgid="8966120286374158649">"Nqamula"</string>
     <string name="media_route_status_scanning" msgid="7279908761758293783">"Iyaskena..."</string>
     <string name="media_route_status_connecting" msgid="6422571716007825440">"Iyaxhuma..."</string>
     <string name="media_route_status_available" msgid="6983258067194649391">"Kuyatholakala"</string>
@@ -1495,8 +1558,10 @@
     <string name="display_manager_overlay_display_name" msgid="5142365982271620716">"Isendlalelo #<xliff:g id="ID">%1$d</xliff:g>"</string>
     <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string>
     <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", kuphephile"</string>
-    <string name="wifi_display_notification_title" msgid="2223050649240326557">"Ukubukeka okungenantambo kuxhunyiwe"</string>
-    <string name="wifi_display_notification_message" msgid="4498802012464170685">"Lesi sikrini siyabonakala kwenye idivayisi"</string>
+    <string name="wifi_display_notification_connecting_title" msgid="2838646471050359706">"Isikrini sokulingisa"</string>
+    <string name="wifi_display_notification_connecting_message" msgid="5837350993752841389">"Ixhuma ku-<xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="wifi_display_notification_connected_title" msgid="8567308065912676285">"Isikrini sokulingisa"</string>
+    <string name="wifi_display_notification_connected_message" msgid="2587209325701109715">"Kuxhunywe ku-<xliff:g id="NAME">%1$s</xliff:g>"</string>
     <string name="wifi_display_notification_disconnect" msgid="6183754463561153372">"Nqamula"</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"Ucingo lwezimo eziphuthumayo"</string>
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Ukhohlwe iphethini?"</string>
@@ -1514,7 +1579,7 @@
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ivula ikhadi le-SIM..."</string>
     <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Iphinikhodi engalungile."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Thayipha iphinikhodi enezinombolo ezingu-4 kuya kwezingu-8."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Ikhodi ye-PUK kufanele ibe yizinombolo ezingu-8 noma eziningi."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Ikhodi ye-PUK kumele ibe yizinombolo ezingu-8."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Faka kabusha ikhodi ye-PUK elungile. Imizamo ephindiwe izokhubaza unaphakade i-SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Iphinikhodi ayifani"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Kunemizamo eminingi kakhulu yephathini"</string>
@@ -1650,4 +1715,15 @@
   </plurals>
     <string name="restr_pin_try_later" msgid="973144472490532377">"Zama futhi emva kwesikhathi"</string>
     <string name="immersive_mode_confirmation" msgid="7227416894979047467">"Swayiphela phansi kusukela phezulu ukuze uphume kusikrini esigcwele."</string>
+    <string name="done_label" msgid="2093726099505892398">"Kwenziwe"</string>
+    <string name="hour_picker_description" msgid="6698199186859736512">"Amahora weslayidi esiyindingilizi"</string>
+    <string name="minute_picker_description" msgid="8606010966873791190">"Amaminithi weslayidi esiyindingilizi"</string>
+    <string name="select_hours" msgid="6043079511766008245">"Khetha amahora"</string>
+    <string name="select_minutes" msgid="3974345615920336087">"Khetha amaminithi"</string>
+    <string name="day_picker_description" msgid="8990847925961297968">"Igridi yenyanga yezinsuku"</string>
+    <string name="year_picker_description" msgid="5524331207436052403">"Uhlu lonyaka"</string>
+    <string name="select_day" msgid="7774759604701773332">"Khetha inyanga nosuku"</string>
+    <string name="select_year" msgid="7952052866994196170">"Khetha unyaka"</string>
+    <string name="item_is_selected" msgid="949687401682476608">"I-<xliff:g id="ITEM">%1$s</xliff:g> ekhethiwe"</string>
+    <string name="deleted_key" msgid="7659477886625566590">"I-<xliff:g id="KEY">%1$s</xliff:g> isusiwe"</string>
 </resources>
diff --git a/core/res/res/values/arrays.xml b/core/res/res/values/arrays.xml
index 91af50a..305ba28 100644
--- a/core/res/res/values/arrays.xml
+++ b/core/res/res/values/arrays.xml
@@ -226,9 +226,11 @@
        <item>@drawable/ic_clear</item>
        <item>@drawable/ic_clear_disabled</item>
        <item>@drawable/ic_clear_normal</item>
-       <item>@drawable/ic_search</item>
+       <item>@drawable/ic_search_api_holo_dark</item>
+       <item>@drawable/ic_search_api_holo_light</item>
        <item>@drawable/ic_go</item>
-       <item>@drawable/ic_voice_search</item>
+       <item>@drawable/ic_voice_search_api_holo_dark</item>
+       <item>@drawable/ic_voice_search_api_holo_light</item>
        <item>@drawable/dialog_bottom_holo_dark</item>
        <item>@drawable/dialog_bottom_holo_light</item>
        <item>@drawable/dialog_full_holo_dark</item>
@@ -346,4 +348,43 @@
         <item>中文 (繁體)</item>
     </string-array>
 
+    <!-- Used by callers to Resources.selectSystemTheme(). Defines the minimum
+         targetSdkVersion required for the theme style at a given index.
+         NOTE: Must be sorted in ascending order. -->
+    <integer-array name="system_theme_sdks">
+        <item>0</item>
+        <item>11</item>
+        <item>14</item>
+        <item>21</item>
+    </integer-array>
+
+    <!-- Used by Resources.selectDefaultTheme(). Defines the default theme style
+         for the targetSdkVersion at a given index (see system_theme_sdks).
+         NOTE: Must match number of entries in system_theme_sdks. -->
+    <array name="system_theme_styles">
+        <item>@style/Theme</item>
+        <item>@style/Theme.Holo</item>
+        <item>@style/Theme.DeviceDefault</item>
+        <item>@style/Theme.DeviceDefault.Light.DarkActionBar</item>
+    </array>
+
+    <!-- Used by ContextImpl for notifications. Defines the default dialog theme
+         style for the targetSdkVersion at a given index (see system_theme_sdks).
+         NOTE: Must match number of entries in system_theme_sdks. -->
+    <array name="system_theme_dialog_styles">
+        <item>@style/Theme</item>
+        <item>@style/Theme.Holo.Dialog</item>
+        <item>@style/Theme.DeviceDefault.Dialog</item>
+        <item>@style/Theme.DeviceDefault.Light.Dialog</item>
+    </array>
+
+    <!-- Used by InputMethodService.onCreate(). Defines the default IME theme
+         style for the targetSdkVersion at a given index (see system_theme_sdks).
+         NOTE: Must match number of entries in system_theme_sdks. -->
+    <array name="system_theme_ime_styles">
+        <item>@style/Theme.InputMethod</item>
+        <item>@style/Theme.Holo.InputMethod</item>
+        <item>@style/Theme.DeviceDefault.InputMethod</item>
+        <item>@style/Theme.DeviceDefault.InputMethod</item>
+    </array>
 </resources>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 91d502b..e07ebd4 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -245,6 +245,8 @@
 
         <!-- The preferred TextAppearance for the primary text of list items. -->
         <attr name="textAppearanceListItem" format="reference" />
+        <!-- The preferred TextAppearance for the secondary text of list items. -->
+        <attr name="textAppearanceListItemSecondary" format="reference" />
         <!-- The preferred TextAppearance for the primary text of small list items. -->
         <attr name="textAppearanceListItemSmall" format="reference" />
 
@@ -451,6 +453,50 @@
              Corresponds to {@link android.view.Window#FEATURE_SWIPE_TO_DISMISS} -->
         <attr name="windowSwipeToDismiss" format="boolean" />
 
+        <!-- Flag indicating whether this window requests that content changes be performed
+             as scene changes with transitions. Corresponds to
+             {@link android.view.Window#FEATURE_CONTENT_TRANSITIONS}. -->
+        <attr name="windowContentTransitions" format="boolean" />
+
+        <!-- Reference to a TransitionManager XML resource defining the desired
+             transitions between different window content. -->
+        <attr name="windowContentTransitionManager" format="reference" />
+
+        <!-- Reference to a Transition XML resource defining the desired Transition
+             used to move Views into the initial Window's content Scene. Corresponds to
+             {@link android.view.Window#setEnterTransition(android.transition.Transition)}. -->
+        <attr name="windowEnterTransition" format="reference"/>
+
+        <!-- Reference to a Transition XML resource defining the desired Transition
+             used to move Views out of the Window's content Scene when launching a new Activity.
+             Corresponds to
+             {@link android.view.Window#setExitTransition(android.transition.Transition)}. -->
+        <attr name="windowExitTransition" format="reference"/>
+
+        <!-- Reference to a Transition XML resource defining the desired Transition
+             used to move shared elements transferred into the Window's initial content Scene.
+             Corresponds to {@link android.view.Window#setSharedElementEnterTransition(
+             android.transition.Transition)}. -->
+        <attr name="windowSharedElementEnterTransition" format="reference"/>
+
+        <!-- Reference to a Transition XML resource defining the desired Transition
+             used when starting a new Activity to move shared elements prior to transferring
+             to the called Activity.
+             Corresponds to {@link android.view.Window#setSharedElementExitTransition(
+             android.transition.Transition)}. -->
+        <attr name="windowSharedElementExitTransition" format="reference"/>
+
+        <!-- Flag indicating whether this Window's transition should overlap with
+             the exiting transition of the calling Activity. Corresponds to
+             {@link android.view.Window#setAllowEnterTransitionOverlap(boolean)}. -->
+        <attr name="windowAllowEnterTransitionOverlap" format="boolean"/>
+
+        <!-- Flag indicating whether this Window's transition should overlap with
+             the exiting transition of the called Activity when the called Activity
+             finishes. Corresponds to
+             {@link android.view.Window#setAllowExitTransitionOverlap(boolean)}. -->
+        <attr name="windowAllowExitTransitionOverlap" format="boolean"/>
+
         <!-- ============ -->
         <!-- Alert Dialog styles -->
         <!-- ============ -->
@@ -611,6 +657,8 @@
         <attr name="popupMenuStyle" format="reference" />
         <!-- Default StackView style. -->
         <attr name="stackViewStyle" format="reference" />
+        <!-- Default style for the FragmentBreadCrumbs widget. -->
+        <attr name="fragmentBreadCrumbsStyle" format="reference" />
 
         <!-- NumberPicker style. -->
         <attr name="numberPickerStyle" format="reference" />
@@ -621,12 +669,26 @@
         <!-- The TimePicker style. -->
         <attr name="timePickerStyle" format="reference" />
 
+        <!-- The TimePicker Header background color . -->
+        <attr name="timePickerHeaderBackgroundColor" format="reference" />
+
+        <!-- The TimePicker Header time label text appearance -->
+        <attr name="timePickerHeaderTimeLabelTextAppearance" format="reference" />
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <attr name="timePickerHeaderAmPmLabelTextAppearance" format="reference" />
+
+        <!-- The TimePicker dialog theme. -->
+        <attr name="timePickerDialogTheme" format="reference" />
+
         <!-- The DatePicker style. -->
         <attr name="datePickerStyle" format="reference" />
 
         <!-- Default ActivityChooserView style. -->
         <attr name="activityChooserViewStyle" format="reference" />
 
+        <attr name="toolbarStyle" format="reference" />
+
         <!-- Fast scroller styles -->
         <eat-comment />
 
@@ -666,6 +728,10 @@
              buttons. actionBarStyle is still used for the primary
              bar. -->
         <attr name="actionBarSplitStyle" format="reference" />
+        <!-- Reference to a theme that should be used to inflate the
+             action bar. This will be inherited by any widget inflated
+             into the action bar. -->
+        <attr name="actionBarTheme" format="reference" />
         <!-- Reference to a theme that should be used to inflate widgets
              and layouts destined for the action bar. Most of the time
              this will be a reference to the current theme, but when
@@ -885,6 +951,21 @@
         <!-- Drawable for WebView find-on-page dialogue's "previous" button. @hide -->
         <attr name="findOnPagePreviousDrawable" format="reference" />
 
+        <!-- ============= -->
+        <!-- Color palette -->
+        <!-- ============= -->
+        <attr name="colorPrimaryDark" format="color" />
+        <attr name="colorPrimary" format="color" />
+        <attr name="colorPrimaryLight" format="color" />
+        <attr name="colorAccent" format="color" />
+
+        <attr name="colorControlNormal" format="color" />
+        <attr name="colorControlActivated" format="color" />
+
+        <attr name="colorButtonNormal" format="color" />
+        <attr name="colorButtonPressed" format="color" />
+        <attr name="colorButtonNormalColored" format="color" />
+        <attr name="colorButtonPressedColored" format="color" />
     </declare-styleable>
 
     <!-- **************************************************************** -->
@@ -1611,6 +1692,9 @@
         <attr name="windowTranslucentStatus" />
         <attr name="windowTranslucentNavigation" />
         <attr name="windowSwipeToDismiss" />
+        <attr name="windowContentTransitions" />
+        <attr name="windowContentTransitionManager" />
+
         <!-- The minimum width the window is allowed to be, along the major
              axis of the screen.  That is, when in landscape.  Can be either
              an absolute dimension or a fraction of the screen size in that
@@ -1640,6 +1724,41 @@
              or a fraction of the screen size in that dimension. -->
         <attr name="windowFixedHeightMajor" format="dimension|fraction" />
         <attr name="windowOutsetBottom" format="dimension" />
+        <!-- Reference to a TransitionManager XML resource defining the desired Transition
+             used to move Views into the initial Window's content Scene. Corresponds to
+             {@link android.view.Window#setEnterTransition(android.transition.Transition)}. -->
+        <attr name="windowEnterTransition"/>
+
+        <!-- Reference to a TransitionManager XML resource defining the desired Transition
+             used to move Views out of the Window's content Scene when launching a new Activity.
+             Corresponds to
+             {@link android.view.Window#setExitTransition(android.transition.Transition)}. -->
+        <attr name="windowExitTransition"/>
+
+        <!-- Reference to a TransitionManager XML resource defining the desired Transition
+             used to move shared elements transferred into the Window's initial content Scene.
+             Corresponds to {@link android.view.Window#setSharedElementEnterTransition(
+             android.transition.Transition)}. -->
+        <attr name="windowSharedElementEnterTransition"/>
+
+        <!-- Reference to a TransitionManager XML resource defining the desired Transition
+             used when starting a new Activity to move shared elements prior to transferring
+             to the called Activity.
+             Corresponds to {@link android.view.Window#setSharedElementExitTransition(
+             android.transition.Transition)}. -->
+        <attr name="windowSharedElementExitTransition"/>
+
+
+        <!-- Flag indicating whether this Window's transition should overlap with
+             the exiting transition of the calling Activity. Corresponds to
+             {@link android.view.Window#setAllowEnterTransitionOverlap(boolean)}. -->
+        <attr name="windowAllowEnterTransitionOverlap"/>
+
+        <!-- Flag indicating whether this Window's transition should overlap with
+             the exiting transition of the called Activity when the called Activity
+             finishes. Corresponds to
+             {@link android.view.Window#setAllowExitTransitionOverlap(boolean)}. -->
+        <attr name="windowAllowExitTransitionOverlap"/>
     </declare-styleable>
 
     <!-- The set of attributes that describe a AlertDialog's theme. -->
@@ -2071,14 +2190,20 @@
              (completely opaque). -->
         <attr name="alpha" format="float" />
 
+        <!-- base z depth of the view -->
+        <attr name="elevation" format="dimension" />
+
         <!-- translation in x of the view. This value is added post-layout to the left
              property of the view, which is set by its layout. -->
         <attr name="translationX" format="dimension" />
 
-        <!-- translation in y of the view. This value is added post-layout to the left
+        <!-- translation in y of the view. This value is added post-layout to the top
              property of the view, which is set by its layout. -->
         <attr name="translationY" format="dimension" />
 
+        <!-- translation in z of the view. This value is added to its elevation. -->
+        <attr name="translationZ" format="dimension" />
+
         <!-- x location of the pivot point around which the view will rotate and scale.
              This xml attribute sets the pivotX property of the View. -->
         <attr name="transformPivotX" format="dimension" />
@@ -2223,6 +2348,29 @@
              Hence, the TextView is a label for the EditText. -->
         <attr name="labelFor" format="integer" />
 
+        <!-- Specifies a theme override for a view. When a theme override is set, the
+             view will be inflated using a {@link android.content.Context} themed with
+             the specified resource. During XML inflation, any child views under the
+             view with a theme override will inherit the themed context. -->
+        <attr name="theme" />
+
+        <!-- Specifies that the shared name of the View to be shared with another Activity.
+             When transitioning between Activities, the name links a UI element in the starting
+             Activity to UI element in the called Activity. Names should be unique in the
+             View hierarchy. -->
+        <attr name="sharedElementName" format="string" />
+
+        <!-- Specifies that this view should permit nested scrolling within a compatible
+             ancestor view. -->
+        <attr name="nestedScrollingEnabled" format="boolean" />
+    </declare-styleable>
+
+    <!-- Attributes that can be assigned to a tag for a particular View. -->
+    <declare-styleable name="ViewTag">
+        <!-- Specifies the key identifying a tag. This must be a resource reference. -->
+        <attr name="id" />
+        <!-- Specifies the value with which to tag the view. -->
+        <attr name="value" />
     </declare-styleable>
 
     <!-- Attributes that can be used with a {@link android.view.ViewGroup} or any
@@ -2306,6 +2454,15 @@
             <!-- Use the children's optical bounds when laying out this container. -->
             <enum name="opticalBounds" value="1" />
         </attr>
+
+        <!-- Sets whether or not this ViewGroup should be treated as a single entity
+             when doing an Activity transition. Typically, the elements inside a
+             ViewGroup are each transitioned from the scene individually. The default
+             for a ViewGroup is false unless it has a background. See
+             {@link android.app.ActivityOptions#makeSceneTransitionAnimation(android.view.Window,
+             android.view.View, String)} for more information. Corresponds to
+             {@link android.view.ViewGroup#setTransitionGroup(boolean)}.-->
+        <attr name="transitionGroup" format="boolean" />
     </declare-styleable>
 
     <!-- A {@link android.view.ViewStub} lets you lazily include other XML layouts
@@ -2414,7 +2571,7 @@
         <!-- Set to true if this input method supports ways to switch to
              a next input method (e.g. a globe key.). When this is true and
              InputMethodManager#shouldOfferSwitchingToNextInputMethod() returns true,
-             the IME has to offer ways to to invoke InputMethodManager#switchToNextInputMethod()
+             the IME has to offer ways to invoke InputMethodManager#switchToNextInputMethod()
              accordingly.
              <p> Note that the system determines the most appropriate next input method
              and subtype in order to provide the consistent user experience in switching
@@ -2581,6 +2738,8 @@
             <flag name="flagReportViewIds" value="0x00000010" />
             <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_REQUEST_FILTER_KEY_EVENTS} -->
             <flag name="flagRequestFilterKeyEvents" value="0x00000020" />
+            <!-- Has flag {@link android.accessibilityservice.AccessibilityServiceInfo#FLAG_RETRIEVE_INTERACTIVE_WINDOWS} -->
+            <flag name="flagRetrieveInteractiveWindows" value="0x00000040" />
         </attr>
         <!-- Component name of an activity that allows the user to modify
              the settings for this service. This setting cannot be changed at runtime. -->
@@ -2733,6 +2892,8 @@
         <!-- Enables the fast scroll thumb that can be dragged to quickly scroll through
              the list. -->
         <attr name="fastScrollEnabled" format="boolean" />
+        <!-- Specifies the style of the fast scroll decorations. -->
+        <attr name="fastScrollStyle" format="reference" />
         <!-- When set to true, the list will use a more refined calculation
              method based on the pixels height of the items visible on screen. This
              property is set to true by default but should be set to false if your adapter
@@ -2801,6 +2962,36 @@
     </declare-styleable>
     <declare-styleable name="EditText">
     </declare-styleable>
+    <declare-styleable name="FastScroll">
+        <!-- Drawable used for the scroll bar thumb. -->
+        <attr name="thumbDrawable" format="reference" />
+        <!-- Minimum width of the thumb. -->
+        <attr name="thumbMinWidth" format="dimension" />
+        <!-- Minimum height of the thumb. -->
+        <attr name="thumbMinHeight" format="dimension" />
+        <!-- Drawable used for the scroll bar track. -->
+        <attr name="trackDrawable" format="reference" />
+        <!-- Drawable used for the section header preview when right-aligned. -->
+        <attr name="backgroundRight" format="reference" />
+        <!-- Drawable used for the section header preview when left-aligned. -->
+        <attr name="backgroundLeft" format="reference" />
+        <!-- Position of section header preview. -->
+        <attr name="position">
+            <!-- Floating at the top of the content. -->
+            <enum name="floating" value="0" />
+            <!-- Pinned alongside the thumb. -->
+            <enum name="atThumb" value="1" />
+        </attr>
+        <attr name="textAppearance" />
+        <attr name="textColor" />
+        <attr name="textSize" />
+        <!-- Minimum width of the section header preview. -->
+        <attr name="minWidth" />
+        <!-- Minimum height of the section header preview. -->
+        <attr name="minHeight" />
+        <!-- Padding for the section header preview. -->
+        <attr name="padding" />
+    </declare-styleable>
     <declare-styleable name="FrameLayout">
         <!-- Defines the drawable to draw over the content. This can be used as an overlay.
              The foreground drawable participates in the padding of the content if the gravity
@@ -3243,6 +3434,8 @@
         <attr name="shadowDy" format="float" />
         <!-- Radius of the shadow. -->
         <attr name="shadowRadius" format="float" />
+        <!-- Elegant text height, especially for less compacted complex script text. -->
+        <attr name="elegantTextHeight" format="boolean" />
     </declare-styleable>
     <declare-styleable name="TextClock">
         <!-- Specifies the formatting pattern used to show the time and/or date
@@ -3534,6 +3727,8 @@
         <attr name="textIsSelectable" />
         <!-- Present the text in ALL CAPS. This may use a small-caps form when available. -->
         <attr name="textAllCaps" />
+        <!-- Elegant text height, especially for less compacted complex script text. -->
+        <attr name="elegantTextHeight" />
     </declare-styleable>
     <declare-styleable name="TextViewAppearance">
         <!-- Base text color, typeface, size, and style. -->
@@ -3966,6 +4161,30 @@
     <declare-styleable name="TimePicker">
         <!-- @hide The layout of the time picker. -->
         <attr name="internalLayout" />
+        <!-- @hide The layout of the legacy time picker. -->
+        <attr name="legacyLayout" format="reference" />
+        <!-- @hide Enables or disable the use of the legacy layout for the TimePicker. -->
+        <attr name="legacyMode" format="boolean" />
+        <!-- @hide The color when the non legacy TimePicker is disabled. -->
+        <attr name="disabledColor" format="color|reference" />
+        <!-- @hide The color for selected text of the non legacy TimePicker. -->
+        <attr name="headerSelectedTextColor" format="color|reference" />
+        <!-- @hide The color for unselected text of the non legacy TimePicker. -->
+        <attr name="headerUnselectedTextColor" format="color|reference" />
+        <!-- @hide The background color for the header of the non legacy TimePicker. -->
+        <attr name="headerBackgroundColor" format="color|reference" />
+        <!-- @hide The color for the hours/minutes numbers of the non legacy TimePicker. -->
+        <attr name="numbersTextColor" format="color|reference" />
+        <!-- @hide The background color for the hours/minutes numbers of the non legacy TimePicker. -->
+        <attr name="numbersBackgroundColor" format="color|reference" />
+        <!-- @hide The color for the AM/PM selectors of the non legacy TimePicker. -->
+        <attr name="amPmTextColor" format="color|reference" />
+        <!-- @hide The background color for the AM/PM selectors of the non legacy TimePicker when unselected. -->
+        <attr name="amPmUnselectedBackgroundColor" format="color|reference" />
+        <!-- @hide The background color for the AM/PM selectors of the non legacy TimePicker when selected. -->
+        <attr name="amPmSelectedBackgroundColor" format="color|reference" />
+        <!-- @hide The color for the hours/minutes selector of the non legacy TimePicker. -->
+        <attr name="numbersSelectorColor" format="color|reference" />
     </declare-styleable>
 
     <!-- ========================= -->
@@ -4167,6 +4386,14 @@
         <!-- Indicates if the drawable needs to be mirrored when its layout direction is
              RTL (right-to-left). -->
         <attr name="autoMirrored" />
+        <!-- Indicates how layer padding should affect the bounds of subsequent layers.
+            The default value is nest. -->
+        <attr name="paddingMode">
+            <!-- Nest each layer inside the padding of the previous layer. -->
+            <enum name="nest" value="0" />
+            <!-- Stack each layer directly atop the previous layer. -->
+            <enum name="stack" value="1" />
+        </attr>
     </declare-styleable>
 
     <!-- Describes an item (or child) of a LayerDrawable. -->
@@ -4182,7 +4409,7 @@
         <!-- Drawable used to render the layer. -->
         <attr name="drawable" />
         <!-- Identifier of the layer. This can be used to retrieve the layer
-             from a drawbable container. -->
+             from a drawable container. -->
         <attr name="id" />
     </declare-styleable>
 
@@ -4259,6 +4486,32 @@
         <!-- Indicates if the drawable needs to be mirrored when its layout direction is
              RTL (right-to-left). -->
         <attr name="autoMirrored" />
+        <!-- If set, specifies the color to apply to the drawable as a tint. By default,
+             no tint is applied. May be a color state list. -->
+        <attr name="tint" />
+        <!-- When a tint color is set, specifies its Porter-Duff blending mode. The
+             default value is src_in, which treats the drawable as an alpha mask. -->
+        <attr name="tintMode">
+            <!-- The tint is drawn on top of the drawable.
+                 [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc] -->
+            <enum name="src_over" value="3" />
+            <!-- The tint is masked by the alpha channel of the drawable. The drawable’s
+                 color channels are thrown out. [Sa * Da, Sc * Da] -->
+            <enum name="src_in" value="5" />
+            <!-- The tint is drawn above the drawable, but with the drawable’s alpha
+                 channel masking the result. [Da, Sc * Da + (1 - Sa) * Dc] -->
+            <enum name="src_atop" value="9" />
+            <!-- Multiplies the color and alpha channels of the drawable with those of
+                 the tint. [Sa * Da, Sc * Dc] -->
+            <enum name="multiply" value="14" />
+            <!-- [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc] -->
+            <enum name="screen" value="15" />
+            <!-- Combines the tint and drawable color and alpha channels, clamping the
+                 result to valid color values. Saturate(S + D) -->
+            <enum name="add" value="16" />
+        </attr>
+        <!-- Specifies the alpha multiplier to apply to the base drawable. -->
+        <attr name="alpha" />
     </declare-styleable>
 
     <!-- Drawable used to draw 9-patches. -->
@@ -4272,6 +4525,14 @@
         <!-- Indicates if the drawable needs to be mirrored when its layout direction is
              RTL (right-to-left). -->
         <attr name="autoMirrored" />
+        <!-- If set, specifies the color to apply to the drawable as a tint. By default,
+             no tint is applied. May be a color state list. -->
+        <attr name="tint" />
+        <!-- When a tint color is set, specifies its Porter-Duff blending mode. The
+             default value is src_in, which treats the drawable as an alpha mask. -->
+        <attr name="tintMode" />
+        <!-- Specifies the alpha multiplier to apply to the base drawable. -->
+        <attr name="alpha" />
     </declare-styleable>
 
     <!-- Drawable used to draw a single color. -->
@@ -4280,6 +4541,16 @@
         <attr name="color" />
     </declare-styleable>
 
+    <!-- Drawable used to show animated touch feedback. -->
+    <declare-styleable name="TouchFeedbackDrawable">
+        <!-- The tint to use for feedback ripples. This attribute is required. -->
+        <attr name="tint" />
+        <!-- Specifies the Porter-Duff blending mode used to apply the tint. The default vlaue is src_atop, which draws over the opaque parts of the drawable. -->
+        <attr name="tintMode" />
+        <!-- Whether to pin feedback ripples to the center of the drawable. Default value is false. -->
+        <attr name="pinned" format="boolean" />
+    </declare-styleable>
+
     <declare-styleable name="ScaleDrawable">
         <!-- Scale width, expressed as a percentage of the drawable's bound. The value's
              format is XX%. For instance: 100%, 12.5%, etc.-->
@@ -4373,6 +4644,146 @@
     </declare-styleable>
 
     <!-- ========================== -->
+    <!--   Vector drawable class   -->
+    <!-- ========================== -->
+    <eat-comment />
+
+    <!-- Drawable used to draw Vector Drawables. -->
+    <declare-styleable name="VectorDrawable">
+           <!-- What event triggers the animation -->
+        <attr name="trigger" format="enum">
+            <enum name="state_pressed" value="1" />
+            <enum name="state_focused" value="2" />
+            <enum name="state_hovered" value="3" />
+            <enum name="state_selected" value="4" />
+            <enum name="state_checkable" value="5" />
+            <enum name="state_checked" value="6" />
+            <enum name="state_enabled" value="7" />
+            <enum name="state_activated" value="8" />
+            <enum name="state_window_focused" value="9" />
+        </attr>
+        <attr name="versionCode" />
+    </declare-styleable>
+
+    <!-- Define the virtual size of the drawing surface paths will draw to. -->
+    <declare-styleable name="VectorDrawableViewport">
+        <!-- The width of the canvas the drawing is on. -->
+        <attr name="viewportWidth" format="float"/>
+        <!-- The height of the canvas the drawing is on. -->
+        <attr name="viewportHeight" format="float"/>
+    </declare-styleable>
+
+    <!-- Define the size of the drawable -->
+    <declare-styleable name="VectorDrawableSize">
+        <!-- Width of the Vector Drawable. -->
+        <attr name="width" />
+        <!-- Height of the Vector Drawable. -->
+        <attr name="height" />
+    </declare-styleable>
+
+    <!-- Define the animations of drawable -->
+    <declare-styleable name="VectorDrawableAnimation">
+        <!-- Configures this animation sequence between the named paths  -->
+        <attr name="sequence" format="string"/>
+        <!-- Limits an animation to only interpolate the selected variable  -->
+        <attr name="limitTo" format="enum">
+            <enum name="unlimited" value="0"/>
+            <enum name="path" value="1"/>
+            <enum name="rotation" value="2"/>
+            <enum name="trimPathStart" value="3"/>
+            <enum name="trimPathEnd" value="4"/>
+            <enum name="trimPathOffset" value="5"/>
+        </attr>
+        <!-- Number of times to loop this aspect of the animation -->
+        <attr name="repeatCount"/>
+        <!-- A list of times in milliseconds to transision from on path to another.
+         List must contain one less than the number of named paths
+         e.g. given sequence="A,B,C,D" durations="100,0,100" implies 100ms for the
+         "A" to "B" transision instantanious switch to "C" and 100ms for "C" to "D". -->
+        <attr name="durations" format="string" />
+        <!-- The delay before stating this aspect of the animation in milli seconds -->
+        <attr name="startDelay" />
+        <!-- when repeating how does it repeat back and forth or a to b -->
+        <attr name="repeatStyle" format="enum">
+            <enum name="forward"  value="0"/>
+            <enum name="reverse"  value="1"/>[]
+        </attr>
+        <!-- how does the animation progress from start to finish -->
+        <attr name="animate" format="enum">
+            <enum name="linear"  value="0"/>
+            <enum name="easeIn"  value="1"/>
+            <enum name="easeOut"  value="2"/>
+            <enum name="easeInOut"  value="3"/>
+        </attr>
+    </declare-styleable>
+
+    <!-- Defines the path used in Vector Drawables. -->
+    <declare-styleable name="VectorDrawablePath">
+        <!-- The Name of this path -->
+        <attr name="name" />
+        <!-- The width a path stroke -->
+        <attr name="strokeWidth" format="float" />
+        <!-- The opacity of a path stroke -->
+        <attr name="strokeOpacity" format="float" />
+        <!-- The amount to rotate the path stroke -->
+        <attr name="rotation" />
+        <!-- The X coordinate of the center of rotation of a path -->
+        <attr name="pivotX" />
+        <!-- The Y coordinate of the center of rotation of a path -->
+        <attr name="pivotY" />
+        <!-- The color to stroke the path if not defined implies no stroke-->
+        <attr name="stroke" format="color" />
+        <!-- The color to fill the path if not defined implies no fill-->
+        <attr name="fill" format="color" />
+        <!-- The level of opacity of the filled area of the path -->
+        <attr name="fillOpacity" format="float" />
+        <!-- The specification of the operations that define the path  -->
+        <attr name="pathData" format="string" />
+        <!-- The fraction of the path to trim from the start from 0 to 1 -->
+        <attr name="trimPathStart" format="float" />
+        <!-- The fraction of the path to trim from the end from 0 to 1  -->
+        <attr name="trimPathEnd" format="float" />
+        <!-- Shift trim region (allows visible region to include the start and end) from 0 to 1  -->
+        <attr name="trimPathOffset" format="float" />
+        <!-- Path will set the current clip path -->
+        <attr name="clipToPath" format="boolean" />
+        <!-- sets the linecap for a stroked path -->
+        <attr name="strokeLineCap" format="enum">
+            <enum name="butt" value="0"/>
+            <enum name="round" value="1"/>
+            <enum name="square" value="2"/>
+        </attr>
+        <!-- sets the lineJoin for a stroked path -->
+        <attr name="strokeLineJoin" format="enum">
+            <enum name="miter" value="0"/>
+            <enum name="round" value="1"/>
+            <enum name="bevel" value="2"/>
+        </attr>
+        <!-- sets the Miter limit for a stroked path -->
+        <attr name="strokeMiterLimit" format="float"/>
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_pressed" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_focused" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_selected" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_window_focused" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_enabled" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_activated" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_accelerated" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_hovered" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_checked" />
+        <!-- sets a condition to be met to draw path -->
+        <attr name="state_checkable" />
+    </declare-styleable>
+
+    <!-- ========================== -->
     <!-- Animation class attributes -->
     <!-- ========================== -->
     <eat-comment />
@@ -4546,6 +4957,13 @@
         <attr name="extraTension" format="float" />
     </declare-styleable>
 
+    <declare-styleable name="PathInterpolator">
+        <attr name="controlX1" format="float" />
+        <attr name="controlY1" format="float" />
+        <attr name="controlX2" format="float" />
+        <attr name="controlY2" format="float" />
+    </declare-styleable>
+
     <!-- ========================== -->
     <!-- Transition attributes -->
     <!-- ========================== -->
@@ -4579,6 +4997,24 @@
         </attr>
     </declare-styleable>
 
+    <!-- Use <code>slide</code>as the root tag of the XML resource that
+         describes a {@link android.transition.Slide Slide} transition.
+         The attributes of the {@link android.R.styleable#Transition Transition}
+         resource are available in addition to the specific attributes of Slide
+         described here. -->
+    <declare-styleable name="Slide">
+        <attr name="slideEdge">
+            <!-- Slide to and from the bottom edge of the Scene. -->
+            <enum name="left" value="0" />
+            <!-- Slide to and from the bottom edge of the Scene. -->
+            <enum name="top" value="1" />
+            <!-- Slide to and from the bottom edge of the Scene. -->
+            <enum name="right" value="2" />
+            <!-- Slide to and from the bottom edge of the Scene. -->
+            <enum name="bottom" value="3" />
+        </attr>
+    </declare-styleable>
+
     <!-- Use <code>target</code> as the root tag of the XML resource that
      describes a {@link android.transition.Transition#addTarget(int)
      targetId} of a transition. There can be one or more targets inside
@@ -4588,6 +5024,12 @@
     <declare-styleable name="TransitionTarget">
         <!-- The id of a target on which this transition will animate changes. -->
         <attr name="targetId" format="reference" />
+        <!-- The id of a target to exclude from this transition. -->
+        <attr name="excludeId" format="reference" />
+        <!-- The fully-qualified name of the Class to exclude from this transition. -->
+        <attr name="excludeClass" format="string" />
+        <!-- The fully-qualified name of the Class to include in this transition. -->
+        <attr name="targetClass" />
     </declare-styleable>
 
     <!-- Use <code>set</code> as the root tag of the XML resource that
@@ -5615,6 +6057,16 @@
         <attr name="settingsActivity" />
     </declare-styleable>
 
+    <!-- Use <code>trust_agent</code> as the root tag of the XML resource that
+         describes an {@link android.service.trust.TrustAgentService}, which is
+         referenced from its {@link android.service.trust.TrustAgentService#TRUST_AGENT_META_DATA}
+         meta-data entry.  Described here are the attributes that can be included in that tag. -->
+    <declare-styleable name="TrustAgent">
+        <!-- Component name of an activity that allows the user to modify
+             the settings for this TrustAgent. -->
+        <attr name="settingsActivity" />
+    </declare-styleable>
+
     <!-- =============================== -->
     <!-- Accounts package class attributes -->
     <!-- =============================== -->
@@ -5723,16 +6175,16 @@
     <eat-comment />
     <declare-styleable name="GlowPadView">
         <!-- Reference to an array resource that be shown as targets around a circle. -->
-        <attr name="targetDrawables"/>
+        <attr name="targetDrawables" format="reference" />
 
         <!-- Reference to an array resource that be used as description for the targets around the circle. -->
-        <attr name="targetDescriptions"/>
+        <attr name="targetDescriptions" format="reference" />
 
         <!-- Reference to an array resource that be used to announce the directions with targets around the circle. -->
-        <attr name="directionDescriptions"/>
+        <attr name="directionDescriptions" format="reference" />
 
         <!-- Sets a drawable as the center. -->
-        <attr name="handleDrawable"/>
+        <attr name="handleDrawable" format="reference" />
 
         <!-- Drawable to use for wave ripple animation. -->
         <attr name="outerRingDrawable" format="reference"/>
@@ -5744,22 +6196,22 @@
         <attr name="innerRadius"/>
 
         <!-- Outer radius of glow area. Target icons will be drawn on this circle. -->
-        <attr name="outerRadius"/>
+        <attr name="outerRadius" format="dimension" />
 
         <!-- Radius of glow under finger. -->
         <attr name="glowRadius" format="dimension" />
 
         <!-- Tactile feedback duration for actions. Set to '0' for no vibration. -->
-        <attr name="vibrationDuration"/>
+        <attr name="vibrationDuration" format="integer" />
 
         <!-- How close we need to be before snapping to a target. -->
-        <attr name="snapMargin"/>
+        <attr name="snapMargin" format="dimension" />
 
         <!-- Number of waves/chevrons to show in animation. -->
-        <attr name="feedbackCount"/>
+        <attr name="feedbackCount" format="integer" />
 
         <!-- Used when the handle shouldn't wait to be hit before following the finger -->
-        <attr name="alwaysTrackFinger"/>
+        <attr name="alwaysTrackFinger" format="boolean" />
 
         <!-- Location along the circle of the first item, in degrees.-->
         <attr name="firstItemOffset" format="float" />
@@ -5776,45 +6228,6 @@
     </declare-styleable>
 
     <!-- =============================== -->
-    <!-- MultiWaveView class attributes -->
-    <!-- =============================== -->
-    <eat-comment />
-    <declare-styleable name="MultiWaveView">
-        <!-- Reference to an array resource that be shown as targets around a circle. -->
-        <attr name="targetDrawables" format="reference"/>
-
-        <!-- Reference to an array resource that be used as description for the targets around the circle. -->
-        <attr name="targetDescriptions" format="reference"/>
-
-        <!-- Reference to an array resource that be used to announce the directions with targets around the circle. -->
-        <attr name="directionDescriptions" format="reference"/>
-
-        <!-- Sets a drawable as the drag center. -->
-        <attr name="handleDrawable" format="reference" />
-
-        <!-- Drawables to use for chevron animations. May be null. -->
-        <attr name="chevronDrawables" format="reference"/>
-
-        <!-- Drawable to use for wave ripple animation. -->
-        <attr name="waveDrawable" format="reference" />
-
-        <!-- Outer radius of target circle. Icons will be drawn on this circle. -->
-        <attr name="outerRadius" format="dimension" />
-
-        <!-- Tactile feedback duration for actions. Set to '0' for no vibration. -->
-        <attr name="vibrationDuration" format="integer"/>
-
-        <!-- How close we need to be before snapping to a target. -->
-        <attr name="snapMargin" format="dimension" />
-
-        <!-- Number of waves/chevrons to show in animation. -->
-        <attr name="feedbackCount" format="integer" />
-
-        <!-- Used when the handle shouldn't wait to be hit before following the finger -->
-        <attr name="alwaysTrackFinger" format="boolean" />
-    </declare-styleable>
-
-    <!-- =============================== -->
     <!-- SizeAdaptiveLayout class attributes -->
     <!-- =============================== -->
     <eat-comment />
@@ -5857,16 +6270,27 @@
         <!-- Aspect to use when drawing LockPatternView. Choices are "square"(default), "lock_width"
              or "lock_height" -->
         <attr name="aspect" format="string" />
+        <!-- Color to use when drawing LockPatternView paths. -->
+        <attr name="pathColor" format="color|reference" />
     </declare-styleable>
 
     <!-- Use <code>recognition-service</code> as the root tag of the XML resource that
-         describes a {@link android.speech.RecognitionService}, which is reference from
+         describes a {@link android.speech.RecognitionService}, which is referenced from
          its {@link android.speech.RecognitionService#SERVICE_META_DATA} meta-data entry.
          Described here are the attributes that can be included in that tag. -->
     <declare-styleable name="RecognitionService">
         <attr name="settingsActivity" />
     </declare-styleable>
 
+    <!-- Use <code>voice-interaction-service</code> as the root tag of the XML resource that
+         describes a {@link android.service.voice.VoiceInteractionService}, which is referenced from
+         its {@link android.service.voice.VoiceInteractionService#SERVICE_META_DATA} meta-data entry.
+         Described here are the attributes that can be included in that tag. -->
+    <declare-styleable name="VoiceInteractionService">
+        <attr name="sessionService" format="string" />
+        <attr name="settingsActivity" />
+    </declare-styleable>
+
     <!-- Attributes used to style the Action Bar. -->
     <declare-styleable name="ActionBar">
         <!-- The type of navigation to use. -->
@@ -5923,6 +6347,8 @@
         <!-- Specifies padding that should be applied to the left and right sides of
              system-provided items in the bar. -->
         <attr name="itemPadding" format="dimension" />
+        <!-- Set true to hide the action bar on a vertical nested scroll of content. -->
+        <attr name="hideOnContentScroll" format="boolean" />
     </declare-styleable>
 
     <declare-styleable name="ActionMode">
@@ -5952,10 +6378,6 @@
         <attr name="inputType" />
     </declare-styleable>
 
-    <declare-styleable name="ActionBar_LayoutParams">
-        <attr name="layout_gravity" />
-    </declare-styleable>
-
     <declare-styleable name="Switch">
         <!-- Drawable to use as the "thumb" that switches back and forth. -->
         <attr name="thumb" />
@@ -6164,4 +6586,25 @@
         <attr name="textView" format="reference" />
     </declare-styleable>
 
+    <declare-styleable name="Toolbar">
+        <attr name="titleTextAppearance" format="reference" />
+        <attr name="subtitleTextAppearance" format="reference" />
+        <attr name="title" />
+        <attr name="subtitle" />
+        <attr name="gravity" />
+        <attr name="titleMargins" format="dimension" />
+        <attr name="titleMarginStart" format="dimension" />
+        <attr name="titleMarginEnd" format="dimension" />
+        <attr name="titleMarginTop" format="dimension" />
+        <attr name="titleMarginBottom" format="dimension" />
+    </declare-styleable>
+
+    <declare-styleable name="Toolbar_LayoutParams">
+        <attr name="layout_gravity" />
+    </declare-styleable>
+
+    <declare-styleable name="ActionBar_LayoutParams">
+        <attr name="layout_gravity" />
+    </declare-styleable>
+
 </resources>
diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml
index 5377987..cce4dbd 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -274,6 +274,17 @@
          applications can request this feature. Default value is false. -->
     <attr name="requiredForAllUsers" format="boolean" />
 
+    <!-- Flag to specifiy for which types of profile this application needs to be present.
+         Only pre-installed applications can request this feature. Default is none. -->
+    <attr name="requiredForProfile">
+        <!-- This application needs to be present for restricted profiles -->
+        <flag name="restricted" value="0x0001" />
+        <!-- This application needs to be present for managed profiles -->
+        <flag name="managed" value="0x0002" />
+        <!-- This application needs to be present for all types of profiles -->
+        <flag name="all" value="0xFFFF" />
+    </attr>
+
     <!-- Flag indicating whether the application can be debugged, even when
          running on a device that is running in user mode. -->
     <attr name="debuggable" format="boolean" />
@@ -862,6 +873,18 @@
     <!-- The name of the logical parent of the activity as it appears in the manifest. -->
     <attr name="parentActivityName" format="string" />
 
+    <!-- Define an activity that will persist across reboots. If such an activity is in the
+         Recents list when the device is shut off it will appear in the Recents list when
+         the device is next powered on. To be persisted all activities in the task from the
+         root activity up to the last activity before a <em>break</em> must be declared with
+         the persistable attribute. A <em>break</em> is the first activity after the root
+         started with Intent.FLAG_CLEAR_TASK_WHEN_RESET.
+
+         <p>Activities that are declared with the persistable attribute will be provided with a
+         forced-persistable Bundle in onCreate() and onSavedInstanceState(), and must only
+         be passed a persistable Bundle in their Intent.extras. -->
+    <attr name="persistable" format="boolean" />
+
     <!-- The <code>manifest</code> tag is the root of an
          <code>AndroidManifest.xml</code> file,
          describing the contents of an Android package (.apk) file.  One
@@ -930,6 +953,7 @@
         <attr name="hasCode" format="boolean" />
         <attr name="persistent" />
         <attr name="requiredForAllUsers" />
+        <attr name="requiredForProfile" />
         <!-- Specify whether the components in this application are enabled or not (that is, can be
              instantiated by the system).
              If "false", it overrides any component specific values (a value of "true" will not
@@ -1523,6 +1547,7 @@
         <!-- @hide This broacast receiver will only receive broadcasts for the
              primary user.  Can only be used with receivers. -->
         <attr name="primaryUserOnly" format="boolean" />
+        <attr name="persistable" />
         <attr name="allowEmbedded" />
     </declare-styleable>
     
diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml
index 0c3e754..441fd949 100644
--- a/core/res/res/values/colors.xml
+++ b/core/res/res/values/colors.xml
@@ -22,8 +22,6 @@
     <drawable name="screen_background_dark">#ff000000</drawable>
     <drawable name="status_bar_closed_default_background">#ff000000</drawable>
     <drawable name="status_bar_opened_default_background">#ff000000</drawable>
-    <drawable name="notification_item_background_color">#ff111111</drawable>
-    <drawable name="notification_item_background_color_pressed">#ff454545</drawable>
     <drawable name="search_bar_default_color">#ff000000</drawable>
     <drawable name="safe_mode_background">#60000000</drawable>
     <!-- Background drawable that can be used for a transparent activity to
@@ -125,8 +123,8 @@
     <color name="facelock_spotlight_mask">#CC000000</color>
 
     <!-- For holo theme -->
-      <drawable name="screen_background_holo_light">#fff3f3f3</drawable>
-      <drawable name="screen_background_holo_dark">#ff000000</drawable>
+    <drawable name="screen_background_holo_light">#fff3f3f3</drawable>
+    <drawable name="screen_background_holo_dark">#ff000000</drawable>
     <color name="background_holo_dark">#ff000000</color>
     <color name="background_holo_light">#fff3f3f3</color>
     <color name="bright_foreground_holo_dark">@android:color/background_holo_light</color>
@@ -197,6 +195,9 @@
     <drawable name="notification_template_icon_bg">#3333B5E5</drawable>
     <drawable name="notification_template_icon_low_bg">#0cffffff</drawable>
 
+    <color name="notification_icon_legacy_bg_color">#ff4285F4</color>
+    <color name="notification_action_legacy_color_filter">#ff555555</color>
+
     <!-- Keyguard colors -->
     <color name="keyguard_avatar_frame_color">#ffffffff</color>
     <color name="keyguard_avatar_frame_shadow_color">#80000000</color>
@@ -204,5 +205,22 @@
     <color name="keyguard_avatar_frame_pressed_color">#ff35b5e5</color>
 
     <color name="accessibility_focus_highlight">#80ffff00</color>
+
+    <!-- New TimePicker colors -->
+    <color name="timepicker_default_background_holo_light">@android:color/white</color>
+    <color name="timepicker_default_background_holo_dark">#ff303030</color>
+
+    <color name="timepicker_default_text_color_holo_light">#8c8c8c</color>
+    <color name="timepicker_default_text_color_holo_dark">@android:color/white</color>
+
+    <color name="timepicker_default_disabled_color_holo_light">#7f000000</color>
+    <color name="timepicker_default_disabled_color_holo_dark">#7f08c8c8</color>
+
+    <color name="timepicker_default_ampm_selected_background_color_holo_light">@android:color/holo_blue_light</color>
+    <color name="timepicker_default_ampm_selected_background_color_holo_dark">@android:color/holo_blue_light</color>
+
+    <color name="timepicker_default_ampm_unselected_background_color_holo_light">@android:color/white</color>
+    <color name="timepicker_default_ampm_unselected_background_color_holo_dark">@android:color/transparent</color>
+
 </resources>
 
diff --git a/core/res/res/values/colors_quantum.xml b/core/res/res/values/colors_quantum.xml
new file mode 100644
index 0000000..f8f192f
--- /dev/null
+++ b/core/res/res/values/colors_quantum.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<resources>
+    <color name="background_quantum_dark">@color/black</color>
+    <color name="background_quantum_light">@color/white</color>
+
+    <color name="bright_foreground_quantum_dark">@color/background_quantum_light</color>
+    <color name="bright_foreground_quantum_light">@color/background_quantum_dark</color>
+    <!-- TODO: This is 50% alpha black -->
+    <color name="bright_foreground_disabled_quantum_dark">#80000000</color>
+    <!-- TODO: This is 50% alpha white -->
+    <color name="bright_foreground_disabled_quantum_light">#80ffffff</color>
+    <color name="bright_foreground_inverse_quantum_dark">@color/bright_foreground_quantum_light</color>
+    <color name="bright_foreground_inverse_quantum_light">@color/bright_foreground_quantum_dark</color>
+
+    <color name="dim_foreground_quantum_dark">#ffbebebe</color>
+    <color name="dim_foreground_quantum_light">#ff323232</color>
+    <color name="dim_foreground_disabled_quantum_dark">#80bebebe</color>
+    <color name="dim_foreground_disabled_quantum_light">#80323232</color>
+
+    <color name="hint_foreground_quantum_dark">@color/bright_foreground_disabled_quantum_dark</color>
+    <color name="hint_foreground_quantum_light">@color/bright_foreground_disabled_quantum_light</color>
+    <!-- TODO: This is 40% alpha teal_A200 -->
+    <color name="highlighted_text_quantum_dark">#660097a7</color>
+    <!-- TODO: This is 40% alpha teal_A200 -->
+    <color name="highlighted_text_quantum_light">#660097a7</color>
+
+    <!-- Primary & accent colors -->
+
+    <color name="quantum_red_100">#fff4c7c3</color>
+    <color name="quantum_red_300">#ffe67c73</color>
+    <color name="quantum_red_500">#ffdb4437</color>
+    <color name="quantum_red_700">#ffc53929</color>
+    <color name="quantum_red_A200">#ffff5252</color>
+    <color name="quantum_red_A400">#ffff1744</color>
+
+    <color name="quantum_blue_100">#ffc6dafc</color>
+    <color name="quantum_blue_300">#ff7baaf7</color>
+    <color name="quantum_blue_500">#ff4285f4</color>
+    <color name="quantum_blue_700">#ff3367d6</color>
+    <color name="quantum_blue_A200">#ff448aff</color>
+    <color name="quantum_blue_A400">#ff2979ff</color>
+
+    <color name="quantum_teal_100">#ffb2ebf2</color>
+    <color name="quantum_teal_300">#ff4dd0e1</color>
+    <color name="quantum_teal_500">#ff00bcd4</color>
+    <color name="quantum_teal_700">#ff0097a7</color>
+    <color name="quantum_teal_A200">#ff18ffff</color>
+    <color name="quantum_teal_A400">#ff00e5ff</color>
+
+    <color name="quantum_green_100">#ffb7e1cd</color>
+    <color name="quantum_green_300">#ff57bb8a</color>
+    <color name="quantum_green_500">#ff0f9d58</color>
+    <color name="quantum_green_700">#ff0b8043</color>
+    <color name="quantum_green_A200">#ff69f0ae</color>
+    <color name="quantum_green_A400">#ff00e676</color>
+
+    <color name="quantum_lime_100">#fff0f4c3</color>
+    <color name="quantum_lime_300">#ffdce775</color>
+    <color name="quantum_lime_500">#ffcddc39</color>
+    <color name="quantum_lime_700">#ffafb42b</color>
+    <color name="quantum_lime_A200">#ffeeff41</color>
+    <color name="quantum_lime_A400">#ffc6ff00</color>
+
+    <color name="quantum_yellow_100">#fffce8b2</color>
+    <color name="quantum_yellow_300">#fff7cb4d</color>
+    <color name="quantum_yellow_500">#fff4b400</color>
+    <color name="quantum_yellow_700">#fff09300</color>
+    <color name="quantum_yellow_A200">#ffffcd40</color>
+    <color name="quantum_yellow_A400">#ffffbc00</color>
+
+    <color name="quantum_orange_100">#ffffe0b2</color>
+    <color name="quantum_orange_300">#ffffb74d</color>
+    <color name="quantum_orange_500">#ffff9800</color>
+    <color name="quantum_orange_700">#fff57c00</color>
+    <color name="quantum_orange_A200">#ffffab40</color>
+    <color name="quantum_orange_A400">#ffff9100</color>
+
+    <color name="quantum_deep_orange_100">#fff4c7c3</color>
+    <color name="quantum_deep_orange_300">#ffe67c73</color>
+    <color name="quantum_deep_orange_500">#ffff5722</color>
+    <color name="quantum_deep_orange_700">#ffc53929</color>
+    <color name="quantum_deep_orange_A200">#ffff5252</color>
+    <color name="quantum_deep_orange_A400">#ffff1744</color>
+
+    <!-- Neutral colors -->
+
+    <color name="quantum_grey_50">#fffafafa</color>
+    <color name="quantum_grey_100">#fff5f5f5</color>
+    <color name="quantum_grey_300">#ffeeeeee</color>
+    <color name="quantum_grey_500">#ffa3a3a3</color>
+    <color name="quantum_grey_700">#ff717171</color>
+
+    <color name="quantum_blue_grey_50">#ffeceff1</color>
+    <color name="quantum_blue_grey_100">#ffcfd8dc</color>
+    <color name="quantum_blue_grey_300">#ff90a4ae</color>
+    <color name="quantum_blue_grey_500">#ff607d8b</color>
+    <color name="quantum_blue_grey_700">#ff455a64</color>
+
+    <color name="quantum_brown_100">#ffd7ccc8</color>
+    <color name="quantum_brown_300">#ffa1887f</color>
+    <color name="quantum_brown_500">#ff795548</color>
+    <color name="quantum_brown_700">#ff5d4037</color>
+
+    <!-- Text & foreground colors -->
+
+    <color name="primary_text_default_quantum_light">#de000000</color>
+    <color name="secondary_text_quantum_light">#8a000000</color>
+    <color name="tertiary_text_quantum_light">#4d000000</color>
+
+    <color name="primary_text_default_quantum_dark">#deffffff</color>
+    <color name="secondary_text_quantum_dark">#8affffff</color>
+    <color name="tertiary_text_quantum_dark">#4dffffff</color>
+</resources>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 9d27164..f39155b 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -529,6 +529,12 @@
         <item>40</item>
     </integer-array>
 
+    <!-- Vibrator pattern for feedback when selecting an hour/minute tick of a Clock -->
+    <integer-array name="config_clockTickVibePattern">
+        <item>125</item>
+        <item>5</item>
+    </integer-array>
+
     <!-- Vibrator pattern for feedback about booting with safe mode disabled -->
     <integer-array name="config_safeModeDisabledVibePattern">
         <item>0</item>
@@ -801,6 +807,21 @@
         <item>com.android.location.fused</item>
     </string-array>
 
+    <!-- This string array can be overriden to enable test location providers initially. -->
+    <!-- Array of "[locationProviderName],[requiresNetwork],
+         [requiresSatellite],[requiresCell],[hasMonetaryCost],
+         [supportAltitute],[supportsSpeed],[supportsBearing],
+         [powerRequirement],[accuracy]" -->
+    <!-- powerRequirement is defined in android.location.Criteria
+         0 = NO_REQUIREMENT / 1 = POWER_LOW / 2 = POWER_MEDIUM / 3 = POWER_HIGH -->
+    <!-- accuracy is defined in anroid.location.Criteria
+         1 = ACCURACY_FINE / 2 = ACCURACY_COARSE -->
+    <string-array name="config_testLocationProviders" translatable="false">
+        <!-- Example test network location provider
+        <item>network,false,false,false,false,true,true,true,1,2</item>
+        -->
+    </string-array>
+
     <!-- Boolean indicating if current platform supports bluetooth SCO for off call
     use cases -->
     <bool name="config_bluetooth_sco_off_call">true</bool>
@@ -1213,6 +1234,12 @@
 
     <!--  Maximum number of supported users -->
     <integer name="config_multiuserMaximumUsers">1</integer>
+    <!-- Whether UI for multi user should be shown -->
+    <bool name="config_enableMultiUserUI">false</bool>
+
+    <!-- If true, then we do not ask user for permission for apps to connect to USB devices.
+         Do not set this to true for production devices. Doing so will cause you to fail CTS. -->
+    <bool name="config_disableUsbPermissionDialogs">false</bool>
 
     <!-- Minimum span needed to begin a touch scaling gesture.
          If the span is equal to or greater than this size, a scaling gesture
@@ -1367,7 +1394,7 @@
     </string-array>
 
     <string-array name="config_notificationScorers">
-        <item>com.android.internal.notification.DemoContactNotificationScorer</item>
+        <item>com.android.internal.notification.PeopleNotificationScorer</item>
     </string-array>
 
     <!-- Flag indicating that this device does not rotate and will always remain in its default
@@ -1429,6 +1456,9 @@
     <!-- default window inset isRound property -->
     <bool name="config_windowIsRound">false</bool>
 
+    <!-- Package name for default network scorer app; overridden by product overlays. -->
+    <string name="config_defaultNetworkScorerPackageName"></string>
+
     <!-- Defines the default set of global actions. Actions may still be disabled or hidden based
          on the current state of the device.
          Each item must be one of the following strings:
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index f96195c..6b2c788 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -22,6 +22,10 @@
     <dimen name="thumbnail_width">164dp</dimen>
     <!-- The height that is used when creating thumbnails of applications. -->
     <dimen name="thumbnail_height">145dp</dimen>
+    <!-- The width that is used when creating thumbnails of applications. -->
+    <dimen name="recents_thumbnail_width">256dp</dimen>
+    <!-- The height that is used when creating thumbnails of applications. -->
+    <dimen name="recents_thumbnail_height">256dp</dimen>
     <!-- The standard size (both width and height) of an application icon that
          will be displayed in the app launcher and elsewhere. -->
     <dimen name="app_icon_size">48dip</dimen>
@@ -50,16 +54,6 @@
     <!-- Margin at the edge of the screen to ignore touch events for in the windowshade. -->
     <dimen name="status_bar_edge_ignore">5dp</dimen>
 
-    <!-- Minimum size of the fastscroll overlay -->
-    <dimen name="fastscroll_overlay_size">104dp</dimen>
-    <!-- Text size of the fastscroll overlay -->
-    <dimen name="fastscroll_overlay_text_size">52sp</dimen>
-    <!-- Padding of the fastscroll overlay -->
-    <dimen name="fastscroll_overlay_padding">16dp</dimen>
-    <!-- Width of the fastscroll thumb -->
-    <dimen name="fastscroll_thumb_width">64dp</dimen>
-    <!-- Height of the fastscroll thumb -->
-    <dimen name="fastscroll_thumb_height">52dp</dimen>
     <!-- Min width for a tablet device -->
     <dimen name="min_xlarge_screen_width">800dp</dimen>
 
@@ -77,18 +71,6 @@
     <!-- Size of lockscreen outerring on unsecure unlock LockScreen -->
     <dimen name="keyguard_lockscreen_outerring_diameter">270dp</dimen>
 
-    <!-- Default target placement radius for GlowPadView. Should be 1/2 of outerring diameter. -->
-    <dimen name="glowpadview_target_placement_radius">135dip</dimen>
-
-    <!-- Default glow radius for GlowPadView -->
-    <dimen name="glowpadview_glow_radius">75dip</dimen>
-
-    <!-- Default distance beyond which GlowPadView snaps to the matching target -->
-    <dimen name="glowpadview_snap_margin">40dip</dimen>
-
-    <!-- Default distance from each snap target that GlowPadView considers a "hit" -->
-    <dimen name="glowpadview_inner_radius">15dip</dimen>
-
     <!-- Preference activity side margins -->
     <dimen name="preference_screen_side_margin">0dp</dimen>
     <!-- Preference activity side margins negative-->
@@ -219,7 +201,7 @@
     <dimen name="textview_error_popup_default_width">240dip</dimen>
 
     <!-- Volume panel y offset -->
-    <dimen name="volume_panel_top">80dp</dimen>
+    <dimen name="volume_panel_top">16dp</dimen>
 
     <!-- Default padding to apply to AppWidgetHostViews containing widgets targeting API level 14 and up. -->
     <dimen name="default_app_widget_padding_left">8dp</dimen>
@@ -356,6 +338,35 @@
     <!-- Outline width for video subtitles. -->
     <dimen name="subtitle_outline_width">2dp</dimen>
 
+    <!-- New TimePicker dimensions. -->
+    <item name="timepicker_circle_radius_multiplier" format="float" type="string">0.82</item>
+    <item name="timepicker_circle_radius_multiplier_24HourMode" format="float" type="string">0.85</item>
+    <item name="timepicker_selection_radius_multiplier" format="float" type="string">0.16</item>
+    <item name="timepicker_ampm_circle_radius_multiplier" format="float" type="string">0.19</item>
+    <item name="timepicker_numbers_radius_multiplier_normal" format="float" type="string">0.81</item>
+    <item name="timepicker_numbers_radius_multiplier_inner" format="float" type="string">0.60</item>
+    <item name="timepicker_numbers_radius_multiplier_outer" format="float" type="string">0.83</item>
+    <item name="timepicker_text_size_multiplier_normal" format="float" type="string">0.17</item>
+    <item name="timepicker_text_size_multiplier_inner" format="float" type="string">0.14</item>
+    <item name="timepicker_text_size_multiplier_outer" format="float" type="string">0.11</item>
+    <item name="timepicker_transition_mid_radius_multiplier" format="float" type="string">0.95</item>
+    <item name="timepicker_transition_end_radius_multiplier" format="float" type="string">1.3</item>
+
+    <dimen name="timepicker_time_label_size">60sp</dimen>
+    <dimen name="timepicker_extra_time_label_margin">-30dp</dimen>
+    <dimen name="timepicker_ampm_label_size">16sp</dimen>
+    <dimen name="timepicker_done_label_size">14sp</dimen>
+    <dimen name="timepicker_ampm_left_padding">6dip</dimen>
+    <dimen name="timepicker_separator_padding">4dip</dimen>
+    <dimen name="timepicker_header_height">96dip</dimen>
+    <dimen name="timepicker_minimum_margin_sides">48dip</dimen>
+    <dimen name="timepicker_minimum_margin_top_bottom">24dip</dimen>
+    <dimen name="timepicker_radial_picker_dimen">270dip</dimen>
+
     <!-- width of ImmersiveModeConfirmation (-1 for match_parent) -->
     <dimen name="immersive_mode_cling_width">-1px</dimen>
+
+    <!-- radius of the corners of the quantum rounded rect background -->
+    <dimen name="notification_quantum_rounded_rect_radius">2dp</dimen>
+
 </resources>
diff --git a/core/res/res/values/dimens_quantum.xml b/core/res/res/values/dimens_quantum.xml
new file mode 100644
index 0000000..cebee12
--- /dev/null
+++ b/core/res/res/values/dimens_quantum.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<resources>
+
+    <!-- Default height of an action bar. -->
+    <dimen name="action_bar_default_height_quantum">56dp</dimen>
+    <!-- Default padding of an action bar. -->
+    <dimen name="action_bar_default_padding_quantum">4dp</dimen>
+    <!-- Vertical padding around action bar icons. -->
+    <dimen name="action_bar_icon_vertical_padding_quantum">16dp</dimen>
+    <!-- Text size for action bar titles -->
+    <dimen name="action_bar_title_text_size_quantum">20sp</dimen>
+    <!-- Text size for action bar subtitles -->
+    <dimen name="action_bar_subtitle_text_size_quantum">16sp</dimen>
+    <!-- Top margin for action bar subtitles -->
+    <dimen name="action_bar_subtitle_top_margin_quantum">-3dp</dimen>
+    <!-- Bottom margin for action bar subtitles -->
+    <dimen name="action_bar_subtitle_bottom_margin_quantum">5dp</dimen>
+
+    <dimen name="action_button_min_width_quantum">48dp</dimen>
+    <dimen name="action_button_min_height_quantum">48dp</dimen>
+    <dimen name="action_overflow_min_width_quantum">36dp</dimen>
+
+    <dimen name="text_size_display_4_quantum">112sp</dimen>
+    <dimen name="text_size_display_3_quantum">56sp</dimen>
+    <dimen name="text_size_display_2_quantum">45sp</dimen>
+    <dimen name="text_size_display_1_quantum">34sp</dimen>
+    <dimen name="text_size_headline_quantum">24sp</dimen>
+    <dimen name="text_size_title_quantum">20sp</dimen>
+    <dimen name="text_size_subhead_quantum">16sp</dimen>
+    <dimen name="text_size_body_2_quantum">14sp</dimen>
+    <dimen name="text_size_body_1_quantum">14sp</dimen>
+    <dimen name="text_size_caption_quantum">12sp</dimen>
+    <dimen name="text_size_menu_quantum">14sp</dimen>
+    <dimen name="text_size_button_quantum">14sp</dimen>
+
+    <dimen name="floating_window_z">16dp</dimen>
+    <dimen name="floating_window_margin">32dp</dimen>
+</resources>
diff --git a/core/res/res/values/donottranslate_quantum.xml b/core/res/res/values/donottranslate_quantum.xml
new file mode 100644
index 0000000..83cc4e5
--- /dev/null
+++ b/core/res/res/values/donottranslate_quantum.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<resources>
+
+    <string name="font_family_display_4_quantum">sans-serif-light</string>
+    <string name="font_family_display_3_quantum">sans-serif</string>
+    <string name="font_family_display_2_quantum">sans-serif</string>
+    <string name="font_family_display_1_quantum">sans-serif</string>
+    <string name="font_family_headline_quantum">sans-serif</string>
+    <string name="font_family_title_quantum">sans-serif-medium</string>
+    <string name="font_family_subhead_quantum">sans-serif</string>
+    <string name="font_family_body_2_quantum">sans-serif-medium</string>
+    <string name="font_family_body_1_quantum">sans-serif</string>
+    <string name="font_family_caption_quantum">sans-serif</string>
+    <string name="font_family_menu_quantum">sans-serif-medium</string>
+    <string name="font_family_button_quantum">sans-serif</string>
+
+</resources>
diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml
index 5c0baaa..889c368 100644
--- a/core/res/res/values/ids.xml
+++ b/core/res/res/values/ids.xml
@@ -82,4 +82,7 @@
   <item type="id" name="action_bar_spinner" />
   <item type="id" name="current_scene" />
   <item type="id" name="scene_layoutid_cache" />
+  <item type="id" name="shared_element_name" />
+  <item type="id" name="mask" />
+  <item type="id" name="shared_element" />
 </resources>
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 97fd76b..22c2b050 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -2088,12 +2088,333 @@
   <public type="style" name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" id="0x010301e4" />
 
 <!-- ===============================================================
-    Resources added in version 20 of the platform
-    =============================================================== -->
+     Resources added in version 20 of the platform
+     =============================================================== -->
   <eat-comment />
 
   <public type="attr" name="banner" id="0x10103f2" />
   <public type="attr" name="windowSwipeToDismiss" id="0x10103f3" />
   <public type="attr" name="isGame" id="0x10103f4" />
   <public type="attr" name="allowEmbedded" id="0x10103f5" />
+
+<!-- ===============================================================
+     Resources added in version 21 of the platform
+     =============================================================== -->
+  <eat-comment />
+
+  <public-padding type="attr" name="l_resource_pad" end="0x1010410" />
+
+  <public type="attr" name="fragmentBreadCrumbsStyle" />
+  <public type="attr" name="fastScrollStyle" />
+  <public type="attr" name="windowContentTransitions" />
+  <public type="attr" name="windowContentTransitionManager" />
+  <public type="attr" name="translationZ" />
+  <public type="attr" name="tintMode" />
+  <public type="attr" name="controlX1" />
+  <public type="attr" name="controlY1" />
+  <public type="attr" name="controlX2" />
+  <public type="attr" name="controlY2" />
+  <public type="attr" name="sharedElementName" />
+  <public type="attr" name="transitionGroup" />
+  <public type="attr" name="trigger" />
+  <public type="attr" name="viewportWidth" />
+  <public type="attr" name="viewportHeight" />
+  <public type="attr" name="fillOpacity" />
+  <public type="attr" name="fill" />
+  <public type="attr" name="pathData" />
+  <public type="attr" name="stroke" />
+  <public type="attr" name="strokeOpacity" />
+  <public type="attr" name="strokeWidth" />
+  <public type="attr" name="durations" />
+  <public type="attr" name="sequence" />
+  <public type="attr" name="repeatStyle" />
+  <public type="attr" name="trimPathStart" />
+  <public type="attr" name="trimPathEnd" />
+  <public type="attr" name="trimPathOffset" />
+  <public type="attr" name="strokeLineCap" />
+  <public type="attr" name="strokeLineJoin" />
+  <public type="attr" name="clipToPath" />
+  <public type="attr" name="animate" />
+  <public type="attr" name="limitTo" />
+  <public type="attr" name="requiredForProfile"/>
+  <public type="attr" name="pinned" />
+  <public type="attr" name="colorControlNormal" />
+  <public type="attr" name="colorControlActivated" />
+  <public type="attr" name="colorButtonNormal" />
+  <public type="attr" name="colorButtonPressed" />
+  <public type="attr" name="colorButtonNormalColored" />
+  <public type="attr" name="colorButtonPressedColored" />
+  <public type="attr" name="persistable" />
+  <public type="attr" name="titleTextAppearance" />
+  <public type="attr" name="subtitleTextAppearance" />
+  <public type="attr" name="slideEdge" />
+  <public type="attr" name="actionBarTheme" />
+  <public type="attr" name="textAppearanceListItemSecondary" />
+  <public type="attr" name="colorPrimaryLight" />
+  <public type="attr" name="colorPrimary" />
+  <public type="attr" name="colorPrimaryDark" />
+  <public type="attr" name="colorAccent" />
+  <public type="attr" name="nestedScrollingEnabled" />
+  <public type="attr" name="windowEnterTransition" />
+  <public type="attr" name="windowExitTransition" />
+  <public type="attr" name="windowSharedElementEnterTransition" />
+  <public type="attr" name="windowSharedElementExitTransition" />
+  <public type="attr" name="windowAllowExitTransitionOverlap" />
+  <public type="attr" name="windowAllowEnterTransitionOverlap" />
+  <public type="attr" name="sessionService" />
+  <public type="attr" name="stackViewStyle" />
+  <public type="attr" name="switchStyle" />
+  <public type="attr" name="elevation" />
+  <public type="attr" name="excludeId" />
+  <public type="attr" name="excludeClass" />
+  <public type="attr" name="hideOnContentScroll" />
+
+  <public-padding type="dimen" name="l_resource_pad" end="0x01050010" />
+
+  <public type="dimen" name="recents_thumbnail_height" />
+  <public type="dimen" name="recents_thumbnail_width" />
+
+  <public-padding type="id" name="l_resource_pad" end="0x01020040" />
+
+  <public type="id" name="shared_element_name" />
+  <public type="id" name="mask" />
+  <public type="id" name="shared_element" />
+
+  <public-padding type="style" name="l_resource_pad" end="0x01030200" />
+
+  <public type="style" name="Widget.FastScroll" />
+  <public type="style" name="Widget.StackView" />
+
+  <public type="style" name="Widget.Holo.FastScroll" />
+  <public type="style" name="Widget.Holo.FragmentBreadCrumbs" />
+  <public type="style" name="Widget.Holo.StackView" />
+
+  <public type="style" name="Widget.Holo.Light.Button.Borderless" />
+  <public type="style" name="Widget.Holo.Light.FastScroll" />
+  <public type="style" name="Widget.Holo.Light.FragmentBreadCrumbs" />
+  <public type="style" name="Widget.Holo.Light.StackView" />
+
+  <public type="style" name="Widget.DeviceDefault.FastScroll" />
+  <public type="style" name="Widget.DeviceDefault.FragmentBreadCrumbs" />
+  <public type="style" name="Widget.DeviceDefault.StackView" />
+
+  <public type="style" name="Widget.DeviceDefault.Light.FastScroll" />
+  <public type="style" name="Widget.DeviceDefault.Light.FragmentBreadCrumbs" />
+  <public type="style" name="Widget.DeviceDefault.Light.StackView" />
+
+  <public type="style" name="TextAppearance.Quantum" />
+  <public type="style" name="TextAppearance.Quantum.DialogWindowTitle" />
+  <public type="style" name="TextAppearance.Quantum.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.Large" />
+  <public type="style" name="TextAppearance.Quantum.Large.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.Medium" />
+  <public type="style" name="TextAppearance.Quantum.Medium.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.SearchResult.Subtitle" />
+  <public type="style" name="TextAppearance.Quantum.SearchResult.Title" />
+  <public type="style" name="TextAppearance.Quantum.Small" />
+  <public type="style" name="TextAppearance.Quantum.Small.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.WindowTitle" />
+
+  <public type="style" name="TextAppearance.Quantum.Widget" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Menu" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Subtitle" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Title" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Subtitle" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Title" />
+  <public type="style" name="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse" />
+  <public type="style" name="TextAppearance.Quantum.Widget.Button" />
+  <public type="style" name="TextAppearance.Quantum.Widget.DropDownHint" />
+  <public type="style" name="TextAppearance.Quantum.Widget.DropDownItem" />
+  <public type="style" name="TextAppearance.Quantum.Widget.EditText" />
+  <public type="style" name="TextAppearance.Quantum.Widget.IconMenu.Item" />
+  <public type="style" name="TextAppearance.Quantum.Widget.PopupMenu" />
+  <public type="style" name="TextAppearance.Quantum.Widget.PopupMenu.Large" />
+  <public type="style" name="TextAppearance.Quantum.Widget.PopupMenu.Small" />
+  <public type="style" name="TextAppearance.Quantum.Widget.TabWidget" />
+  <public type="style" name="TextAppearance.Quantum.Widget.TextView" />
+  <public type="style" name="TextAppearance.Quantum.Widget.TextView.PopupMenu" />
+  <public type="style" name="TextAppearance.Quantum.Widget.TextView.SpinnerItem" />
+
+  <public type="style" name="Theme.Quantum" />
+  <public type="style" name="Theme.Quantum.Dialog" />
+  <public type="style" name="Theme.Quantum.Dialog.MinWidth" />
+  <public type="style" name="Theme.Quantum.Dialog.NoActionBar" />
+  <public type="style" name="Theme.Quantum.Dialog.NoActionBar.MinWidth" />
+  <public type="style" name="Theme.Quantum.DialogWhenLarge" />
+  <public type="style" name="Theme.Quantum.DialogWhenLarge.NoActionBar" />
+  <public type="style" name="Theme.Quantum.InputMethod" />
+  <public type="style" name="Theme.Quantum.NoActionBar" />
+  <public type="style" name="Theme.Quantum.NoActionBar.Fullscreen" />
+  <public type="style" name="Theme.Quantum.NoActionBar.Overscan" />
+  <public type="style" name="Theme.Quantum.NoActionBar.TranslucentDecor" />
+  <public type="style" name="Theme.Quantum.Panel" />
+  <public type="style" name="Theme.Quantum.Wallpaper" />
+  <public type="style" name="Theme.Quantum.Wallpaper.NoTitleBar" />
+
+  <public type="style" name="Theme.Quantum.Light" />
+  <public type="style" name="Theme.Quantum.Light.DarkActionBar" />
+  <public type="style" name="Theme.Quantum.Light.Dialog" />
+  <public type="style" name="Theme.Quantum.Light.Dialog.MinWidth" />
+  <public type="style" name="Theme.Quantum.Light.Dialog.NoActionBar" />
+  <public type="style" name="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth" />
+  <public type="style" name="Theme.Quantum.Light.DialogWhenLarge" />
+  <public type="style" name="Theme.Quantum.Light.DialogWhenLarge.NoActionBar" />
+  <public type="style" name="Theme.Quantum.Light.NoActionBar" />
+  <public type="style" name="Theme.Quantum.Light.NoActionBar.Fullscreen" />
+  <public type="style" name="Theme.Quantum.Light.NoActionBar.Overscan" />
+  <public type="style" name="Theme.Quantum.Light.NoActionBar.TranslucentDecor" />
+  <public type="style" name="Theme.Quantum.Light.Panel" />
+
+  <public type="style" name="Widget.Quantum" />
+  <public type="style" name="Widget.Quantum.ActionBar" />
+  <public type="style" name="Widget.Quantum.ActionBar.Solid" />
+  <public type="style" name="Widget.Quantum.ActionBar.TabBar" />
+  <public type="style" name="Widget.Quantum.ActionBar.TabText" />
+  <public type="style" name="Widget.Quantum.ActionBar.TabView" />
+  <public type="style" name="Widget.Quantum.ActionButton" />
+  <public type="style" name="Widget.Quantum.ActionButton.CloseMode" />
+  <public type="style" name="Widget.Quantum.ActionButton.Overflow" />
+  <public type="style" name="Widget.Quantum.ActionMode" />
+  <public type="style" name="Widget.Quantum.AutoCompleteTextView" />
+  <public type="style" name="Widget.Quantum.Button" />
+  <public type="style" name="Widget.Quantum.Button.Borderless" />
+  <public type="style" name="Widget.Quantum.Button.Borderless.Small" />
+  <public type="style" name="Widget.Quantum.Button.Inset" />
+  <public type="style" name="Widget.Quantum.Button.Small" />
+  <public type="style" name="Widget.Quantum.Button.Toggle" />
+  <public type="style" name="Widget.Quantum.Button.Paper" />
+  <public type="style" name="Widget.Quantum.Button.Paper.Color" />
+  <public type="style" name="Widget.Quantum.ButtonBar" />
+  <public type="style" name="Widget.Quantum.ButtonBar.AlertDialog" />
+  <public type="style" name="Widget.Quantum.CalendarView" />
+  <public type="style" name="Widget.Quantum.CheckedTextView" />
+  <public type="style" name="Widget.Quantum.CompoundButton.CheckBox" />
+  <public type="style" name="Widget.Quantum.CompoundButton.RadioButton" />
+  <public type="style" name="Widget.Quantum.CompoundButton.Star" />
+  <public type="style" name="Widget.Quantum.DatePicker" />
+  <public type="style" name="Widget.Quantum.DropDownItem" />
+  <public type="style" name="Widget.Quantum.DropDownItem.Spinner" />
+  <public type="style" name="Widget.Quantum.EditText" />
+  <public type="style" name="Widget.Quantum.ExpandableListView" />
+  <public type="style" name="Widget.Quantum.FastScroll" />
+  <public type="style" name="Widget.Quantum.FragmentBreadCrumbs" />
+  <public type="style" name="Widget.Quantum.GridView" />
+  <public type="style" name="Widget.Quantum.HorizontalScrollView" />
+  <public type="style" name="Widget.Quantum.ImageButton" />
+  <public type="style" name="Widget.Quantum.ListPopupWindow" />
+  <public type="style" name="Widget.Quantum.ListView" />
+  <public type="style" name="Widget.Quantum.ListView.DropDown" />
+  <public type="style" name="Widget.Quantum.MediaRouteButton" />
+  <public type="style" name="Widget.Quantum.PopupMenu" />
+  <public type="style" name="Widget.Quantum.PopupWindow" />
+  <public type="style" name="Widget.Quantum.ProgressBar" />
+  <public type="style" name="Widget.Quantum.ProgressBar.Horizontal" />
+  <public type="style" name="Widget.Quantum.ProgressBar.Large" />
+  <public type="style" name="Widget.Quantum.ProgressBar.Small" />
+  <public type="style" name="Widget.Quantum.ProgressBar.Small.Title" />
+  <public type="style" name="Widget.Quantum.RatingBar" />
+  <public type="style" name="Widget.Quantum.RatingBar.Indicator" />
+  <public type="style" name="Widget.Quantum.RatingBar.Small" />
+  <public type="style" name="Widget.Quantum.ScrollView" />
+  <public type="style" name="Widget.Quantum.SeekBar" />
+  <public type="style" name="Widget.Quantum.SegmentedButton" />
+  <public type="style" name="Widget.Quantum.StackView" />
+  <public type="style" name="Widget.Quantum.Spinner" />
+  <public type="style" name="Widget.Quantum.Tab" />
+  <public type="style" name="Widget.Quantum.TabWidget" />
+  <public type="style" name="Widget.Quantum.TextView" />
+  <public type="style" name="Widget.Quantum.TextView.SpinnerItem" />
+  <public type="style" name="Widget.Quantum.WebTextView" />
+  <public type="style" name="Widget.Quantum.WebView" />
+
+  <public type="style" name="Widget.Quantum.Light" />
+  <public type="style" name="Widget.Quantum.Light.ActionBar" />
+  <public type="style" name="Widget.Quantum.Light.ActionBar.Solid" />
+  <public type="style" name="Widget.Quantum.Light.ActionBar.TabBar" />
+  <public type="style" name="Widget.Quantum.Light.ActionBar.TabText" />
+  <public type="style" name="Widget.Quantum.Light.ActionBar.TabView" />
+  <public type="style" name="Widget.Quantum.Light.ActionButton" />
+  <public type="style" name="Widget.Quantum.Light.ActionButton.CloseMode" />
+  <public type="style" name="Widget.Quantum.Light.ActionButton.Overflow" />
+  <public type="style" name="Widget.Quantum.Light.ActionMode" />
+  <public type="style" name="Widget.Quantum.Light.AutoCompleteTextView" />
+  <public type="style" name="Widget.Quantum.Light.Button" />
+  <public type="style" name="Widget.Quantum.Light.Button.Borderless" />
+  <public type="style" name="Widget.Quantum.Light.Button.Borderless.Small" />
+  <public type="style" name="Widget.Quantum.Light.Button.Inset" />
+  <public type="style" name="Widget.Quantum.Light.Button.Small" />
+  <public type="style" name="Widget.Quantum.Light.Button.Toggle" />
+  <public type="style" name="Widget.Quantum.Light.Button.Paper" />
+  <public type="style" name="Widget.Quantum.Light.Button.Paper.Color" />
+  <public type="style" name="Widget.Quantum.Light.ButtonBar" />
+  <public type="style" name="Widget.Quantum.Light.ButtonBar.AlertDialog" />
+  <public type="style" name="Widget.Quantum.Light.CalendarView" />
+  <public type="style" name="Widget.Quantum.Light.CheckedTextView" />
+  <public type="style" name="Widget.Quantum.Light.CompoundButton.CheckBox" />
+  <public type="style" name="Widget.Quantum.Light.CompoundButton.RadioButton" />
+  <public type="style" name="Widget.Quantum.Light.CompoundButton.Star" />
+  <public type="style" name="Widget.Quantum.Light.DropDownItem" />
+  <public type="style" name="Widget.Quantum.Light.DropDownItem.Spinner" />
+  <public type="style" name="Widget.Quantum.Light.EditText" />
+  <public type="style" name="Widget.Quantum.Light.ExpandableListView" />
+  <public type="style" name="Widget.Quantum.Light.FastScroll" />
+  <public type="style" name="Widget.Quantum.Light.FragmentBreadCrumbs" />
+  <public type="style" name="Widget.Quantum.Light.GridView" />
+  <public type="style" name="Widget.Quantum.Light.HorizontalScrollView" />
+  <public type="style" name="Widget.Quantum.Light.ImageButton" />
+  <public type="style" name="Widget.Quantum.Light.ListPopupWindow" />
+  <public type="style" name="Widget.Quantum.Light.ListView" />
+  <public type="style" name="Widget.Quantum.Light.ListView.DropDown" />
+  <public type="style" name="Widget.Quantum.Light.MediaRouteButton" />
+  <public type="style" name="Widget.Quantum.Light.PopupMenu" />
+  <public type="style" name="Widget.Quantum.Light.PopupWindow" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar.Horizontal" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar.Inverse" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar.Large" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar.Large.Inverse" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar.Small" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar.Small.Inverse" />
+  <public type="style" name="Widget.Quantum.Light.ProgressBar.Small.Title" />
+  <public type="style" name="Widget.Quantum.Light.RatingBar" />
+  <public type="style" name="Widget.Quantum.Light.RatingBar.Indicator" />
+  <public type="style" name="Widget.Quantum.Light.RatingBar.Small" />
+  <public type="style" name="Widget.Quantum.Light.ScrollView" />
+  <public type="style" name="Widget.Quantum.Light.SeekBar" />
+  <public type="style" name="Widget.Quantum.Light.SegmentedButton" />
+  <public type="style" name="Widget.Quantum.Light.StackView" />
+  <public type="style" name="Widget.Quantum.Light.Spinner" />
+  <public type="style" name="Widget.Quantum.Light.Tab" />
+  <public type="style" name="Widget.Quantum.Light.TabWidget" />
+  <public type="style" name="Widget.Quantum.Light.TextView" />
+  <public type="style" name="Widget.Quantum.Light.TextView.SpinnerItem" />
+  <public type="style" name="Widget.Quantum.Light.WebTextView" />
+  <public type="style" name="Widget.Quantum.Light.WebView" />
+
+  <public type="style" name="TextAppearance.Quantum.Display4" />
+  <public type="style" name="TextAppearance.Quantum.Display3" />
+  <public type="style" name="TextAppearance.Quantum.Display2" />
+  <public type="style" name="TextAppearance.Quantum.Display1" />
+  <public type="style" name="TextAppearance.Quantum.Headline" />
+  <public type="style" name="TextAppearance.Quantum.Title" />
+  <public type="style" name="TextAppearance.Quantum.Subhead" />
+  <public type="style" name="TextAppearance.Quantum.Body2" />
+  <public type="style" name="TextAppearance.Quantum.Body1" />
+  <public type="style" name="TextAppearance.Quantum.Caption" />
+  <public type="style" name="TextAppearance.Quantum.Menu" />
+  <public type="style" name="TextAppearance.Quantum.Button" />
+
+  <public-padding type="interpolator" name="l_resource_pad" end="0x010c0010" />
+
+  <!-- An interpolator which accelerates fast but decelerates slowly. -->
+  <public type="interpolator" name="fast_out_slow_in" />
+  <!-- An interpolator which starts with a peak non-zero velocity and decelerates slowly. -->
+  <public type="interpolator" name="linear_out_slow_in" />
+  <!-- An interpolator which accelerates fast and keeps accelerating until the end. -->
+  <public type="interpolator" name="fast_out_linear_in" />
+
+  <public type="transition" name="no_transition" id="0x010f0000"/>
 </resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index a923104..97400b2 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -36,6 +36,45 @@
          the placeholders. -->
     <string name="fileSizeSuffix"><xliff:g id="number" example="123">%1$s</xliff:g><xliff:g id="unit" example="KB">%2$s</xliff:g></string>
 
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in days -->
+    <string name="durationDays"><xliff:g id="days">%1$d</xliff:g> days</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one day with hours -->
+    <string name="durationDayHours"><xliff:g id="days">%1$d</xliff:g> day
+            <xliff:g id="hours">%2$d</xliff:g> hrs</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one day with one hours -->
+    <string name="durationDayHour"><xliff:g id="days">%1$d</xliff:g> day
+            <xliff:g id="hours">%2$d</xliff:g> hr</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in hours -->
+    <string name="durationHours"><xliff:g id="hours">%1$d</xliff:g> hrs</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one hour with minutes -->
+    <string name="durationHourMinutes"><xliff:g id="hours">%1$d</xliff:g> hr
+            <xliff:g id="minutes">%2$d</xliff:g> mins</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one hour with one minute -->
+    <string name="durationHourMinute"><xliff:g id="hours">%1$d</xliff:g> hr
+            <xliff:g id="minutes">%2$d</xliff:g> min</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in minutes -->
+    <string name="durationMinutes"><xliff:g id="minutes">%1$d</xliff:g> mins</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one minute with seconds -->
+    <string name="durationMinuteSeconds"><xliff:g id="minutes">%1$d</xliff:g> min
+            <xliff:g id="seconds">%2$d</xliff:g> secs</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one minute with one second -->
+    <string name="durationMinuteSecond"><xliff:g id="minutes">%1$d</xliff:g> min
+            <xliff:g id="seconds">%2$d</xliff:g> sec</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration in seconds -->
+    <string name="durationSeconds"><xliff:g id="seconds">%1$d</xliff:g> secs</string>
+
+    <!-- [CHAR_LIMIT=10] Suffix added to signify duration of one second -->
+    <string name="durationSecond"><xliff:g id="seconds">%1$d</xliff:g> sec</string>
+
     <!-- Used in Contacts for a field that has no label and in Note Pad
          for a note with no name. -->
     <string name="untitled">&lt;Untitled&gt;</string>
@@ -415,6 +454,12 @@
     <!-- Label for the Android system components when they are shown to the user. -->
     <string name="android_system_label">Android System</string>
 
+    <!-- Label for the user owner in the intent forwarding app. -->
+    <string name="user_owner_label">Personal</string>
+
+    <!-- Label for a corporate profile in the intent forwarding app. -->
+    <string name="managed_profile_label">Work</string>
+
     <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permgrouplab_costMoney">Services that cost you money</string>
     <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
@@ -633,9 +678,9 @@
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_processOutgoingCalls">reroute outgoing calls</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_processOutgoingCalls">Allows the app to process
-      outgoing calls and change the number to be dialed. This permission allows
-      the app to monitor, redirect, or prevent outgoing calls.</string>
+    <string name="permdesc_processOutgoingCalls">Allows the app to see the
+        number being dialed during an outgoing call with the option to redirect
+        the call to a different number or abort the call altogether.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_receiveSms">receive text messages (SMS)</string>
@@ -838,11 +883,18 @@
          user consent.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permlab_retrieve_window_info">retrieve window info</string>
+    <string name="permlab_retrieveWindowToken">retrieve window token</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_retrieve_window_info">Allows an application to retrieve
-         information about the the windows from the window manager. Malicious apps may
-         retrieve information that is intended for internal system usage.</string>
+    <string name="permdesc_retrieveWindowToken">Allows an application to retrieve
+        the window token. Malicious apps may perfrom unauthorized interaction with
+        the application window impersonating the system.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_frameStats">retrieve frame statistics</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_frameStats">Allows an application to collect
+        frame statistics. Malicious apps may observe the frame statistics
+        of windows from other apps.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_filter_events">filter events</string>
@@ -852,13 +904,6 @@
             may control the system UI whtout user intervention.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permlab_magnify_display">magnify display</string>
-    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
-    <string name="permdesc_magnify_display">Allows an application to magnify the content of a
-        display. Malicious apps may transform the display content in a way that renders the
-        device unusable.</string>
-
-    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_shutdown">partial shutdown</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_shutdown">Puts the activity manager into a shutdown
@@ -909,6 +954,14 @@
         silently replace the content of any webpage with malicious variants.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_broadcastScoreNetworks">send score networks broadcast</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_broadcastScoreNetworks">Allows the app
+        to broadcast a notification that networks need to be scored.
+        Never needed for normal apps.
+    </string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_setProcessLimit">limit number of running processes</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_setProcessLimit">Allows the app
@@ -1060,6 +1113,12 @@
         interface of a wallpaper. Should never be needed for normal apps.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_bindVoiceInteraction">bind to a voice interactor</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_bindVoiceInteraction">Allows the holder to bind to the top-level
+        interface of a voice interaction service. Should never be needed for normal apps.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_bindRemoteDisplay">bind to a remote display</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_bindRemoteDisplay">Allows the holder to bind to the top-level
@@ -1072,12 +1131,24 @@
         interface of a widget service. Should never be needed for normal apps.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_bindRouteProvider">bind to a route provider service</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_bindRouteProvider">Allows the holder to bind to any registered
+        route providers. Should never be needed for normal apps.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_bindDeviceAdmin">interact with a device admin</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_bindDeviceAdmin">Allows the holder to send intents to
         a device administrator. Should never be needed for normal apps.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_bindTvInput">bind to a TV input</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_bindTvInput">Allows the holder to bind to the top-level
+        interface of a TV input. Should never be needed for normal apps.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_manageDeviceAdmins">add or remove a device admin</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_manageDeviceAdmins">Allows the holder to add or remove active device
@@ -1183,6 +1254,15 @@
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. [CHAR LIMIT=NONE]-->
     <string name="permdesc_manageCaCertificates">Allows the app to install and uninstall CA certificates as trusted credentials.</string>
 
+    <!-- Title of a permission that is never presented to the user.  This is not a
+         permission that an application must be granted by the user.  Instead, it
+         is part of a mechanism that applications use to indicate to the system
+         that they want to do occasional work while the device is idle.  -->
+    <string name="permlab_bindIdleService">run application during idle time</string>
+    <!-- Description of an application permission, so that the user can understand
+         what is being done if they are curious. -->
+    <string name="permdesc_bindIdleService">This permission allows the Android system to run the application in the background while the device is not in use.</string>
+
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_diagnostic">read/write to resources owned by diag</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -1447,6 +1527,11 @@
     <string name="permdesc_readFrameBuffer">Allows the app to read the content of the frame buffer.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_accessInputFlinger">access InputFlinger</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_accessInputFlinger">Allows the app to use InputFlinger low-level features.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_configureWifiDisplay">configure Wifi displays</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_configureWifiDisplay">Allows the app to configure and connect to Wifi displays.</string>
@@ -1495,6 +1580,11 @@
       without your confirmation.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_sim_communication">sim communication</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_sim_communication">Allows the app to send commands to the SIM. This is very dangerous.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_camera">take pictures and videos</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_camera">Allows the app to take pictures and videos
@@ -1859,6 +1949,15 @@
       connect the phone to and disconnect the phone from WiMAX networks.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_scoreNetworks">score networks</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_scoreNetworks" product="tablet">Allows the app to
+      rank networks and influence which networks the tablet should prefer.</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_scoreNetworks" product="default">Allows the app to
+        rank networks and influence which networks the phone should prefer.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_bluetooth">pair with Bluetooth devices</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_bluetooth" product="tablet">Allows the app to view the
@@ -2000,6 +2099,11 @@
     <string name="permdesc_bindNotificationListenerService">Allows the holder to bind to the top-level interface of a notification listener service. Should never be needed for normal apps.</string>
 
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permlab_bindConditionProviderService">bind to a condition provider service</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_bindConditionProviderService">Allows the holder to bind to the top-level interface of a condition provider service. Should never be needed for normal apps.</string>
+
+    <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_invokeCarrierSetup">invoke the carrier-provided configuration app</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_invokeCarrierSetup">Allows the holder to invoke the carrier-provided configuration app. Should never be needed for normal apps.</string>
@@ -2009,6 +2113,10 @@
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permdesc_accessNetworkConditions">Allows an application to listen for observations on network conditions. Should never be needed for normal apps.</string>
 
+    <string name="permlab_setInputCalibration">change input device calibration</string>
+    <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+    <string name="permdesc_setInputCalibration">Allows the app to modify the calibration parameters of the touch screen. Should never be needed for normal apps.</string>
+
     <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
     <string name="permlab_accessDrmCertificates">access DRM certificates</string>
     <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
@@ -3663,6 +3771,21 @@
     <!-- Description of an application permission that lets it control keyguard. -->
     <string name="permdesc_control_keyguard">Allows an application to control keguard.</string>
 
+    <!-- Title of an application permission that lets it listen to trust state changes. -->
+    <string name="permlab_trust_listener">Listen to trust state changes.</string>
+    <!-- Description of an application permission that lets it listen to trust state changes. -->
+    <string name="permdesc_trust_listener">Allows an application to listen for changes in trust state.</string>
+
+    <!-- Title of an application permission that lets it bind to a trust agent service. -->
+    <string name="permlab_bind_trust_agent_service">Bind to a trust agent service</string>
+    <!-- Description of an application permission that lets it bind to a trust agent service. -->
+    <string name="permdesc_bind_trust_agent_service">Allows an application to bind to a trust agent service.</string>
+
+    <!-- Title of an application permission that lets it interact with recovery. -->
+    <string name="permlab_recovery">Interact with update and recovery system</string>
+    <!-- Description of an application permission that lets it control keyguard. -->
+    <string name="permdesc_recovery">Allows an application to interact with the recovery system and system updates.</string>
+
     <!-- Shown in the tutorial for tap twice for zoom control. -->
     <string name="tutorial_double_tap_to_zoom_message_short">Touch twice for zoom control</string>
 
@@ -3730,6 +3853,8 @@
     <!-- Label to show for a service that is running because it is observing
          the user's notifications. -->
     <string name="notification_listener_binding_label">Notification listener</string>
+    <!-- Label to show for a service that is running because it is providing conditions. -->
+    <string name="condition_provider_service_binding_label">Condition provider</string>
 
     <!-- Do Not Translate: Alternate eri.xml -->
     <string name="alternate_eri_file">/data/eri.xml</string>
@@ -3954,26 +4079,6 @@
     <!-- Description of the sliding handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
     <string name="content_description_sliding_handle">"Sliding handle. Touch &amp; hold."</string>
 
-    <!-- Description of the up direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_direction_up">Slide up for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
-    <!-- Description of the down direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_direction_down">Slide down for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
-    <!-- Description of the left direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_direction_left">"Slide left for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
-    <!-- Description of the right direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_direction_right">Slide right for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
-
-    <!-- Description of the unlock target in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_target_unlock">Unlock</string>
-    <!-- Description of the camera target in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_target_camera">Camera</string>
-    <!-- Description of the silent target in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_target_silent">Silent</string>
-    <!-- Description of the sound on target in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_target_soundon">Sound on</string>
-    <!-- Description of the unlock target in the Slide unlock screen. [CHAR LIMIT=NONE] -->
-    <string name="description_target_search">Search</string>
-
     <!-- Description of the unlock handle in the Slide unlock screen for tablets. [CHAR LIMIT=NONE] -->
     <string name="description_target_unlock_tablet">Swipe to unlock.</string>
 
@@ -4554,4 +4659,55 @@
     <!-- Cling help message when hiding the navigation bar entering immersive mode [CHAR LIMIT=none] -->
     <string name="immersive_mode_confirmation" msgid="8554991488096662508">Swipe down from the top to exit full screen.</string>
 
+    <!-- Label for button to confirm chosen date or time [CHAR LIMIT=30] -->
+    <string name="done_label">Done</string>
+    <!--
+         Content description for the hour selector in the time picker, which displays
+         selectable hours of the day along the inside edge of a circle, as in an analog clock.
+         [CHAR LIMIT=50]
+    -->
+    <string name="hour_picker_description">Hours circular slider</string>
+    <!--
+         Content description for the minute selector in the time picker, which displays
+         selectable five-minute intervals along the inside edge of a circle, as in an analog clock.
+         [CHAR LIMIT=50]
+    -->
+    <string name="minute_picker_description">Minutes circular slider</string>
+    <!-- Accessibility announcement for hour circular picker [CHAR LIMIT=NONE] -->
+    <string name="select_hours">Select hours</string>
+    <!-- Accessibility announcement for minute circular picker [CHAR LIMIT=NONE] -->
+    <string name="select_minutes">Select minutes</string>
+
+    <!--
+        Content description for the month and day selector in the date picker, which displays
+        a selectable grid of days laid out by month.
+        [CHAR LIMIT=50]
+     -->
+    <string name="day_picker_description">Month grid of days</string>
+    <!--
+        Content description for the year selector in the date picker, which displays
+        a scrolling, vertical list of years.
+        [CHAR LIMIT=50]
+     -->
+    <string name="year_picker_description">Year list</string>
+    <!-- Accessibility announcement for the day picker [CHAR LIMIT=NONE] -->
+    <string name="select_day">Select month and day</string>
+    <!-- Accessibility announcement for the year picker [CHAR LIMIT=NONE] -->
+    <string name="select_year">Select year</string>
+    <!-- Accessibility description for the item that is currently selected. -->
+    <string name="item_is_selected"><xliff:g id="item" example="2013">%1$s</xliff:g> selected</string>
+    <!-- Accessibility announcement when a number that had been typed in is deleted [CHAR_LIMIT=NONE] -->
+    <string name="deleted_key"><xliff:g id="key" example="4">%1$s</xliff:g> deleted</string>
+
+    <!-- DO NOT TRANSLATE -->
+    <string name="time_placeholder">--</string>
+
+    <!-- DO NOT TRANSLATE -->
+    <string name="radial_numbers_typeface">sans-serif</string>
+    <!-- DO NOT TRANSLATE -->
+    <string name="sans_serif">sans-serif</string>
+
+    <!-- DO NOT TRANSLATE -->
+    <string name="day_of_week_label_typeface">sans-serif</string>
+
 </resources>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 4d4feeee..37716f7 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -271,6 +271,33 @@
         <item name="android:textColor">#CCCCCC</item>
     </style>
 
+    <style name="TextAppearance.StatusBar.Quantum">
+    </style>
+    <style name="TextAppearance.StatusBar.Quantum.EventContent">
+        <item name="android:textColor">#888888</item>
+        <item name="android:textSize">@dimen/notification_text_size</item>
+    </style>
+    <style name="TextAppearance.StatusBar.Quantum.EventContent.Title">
+        <item name="android:textColor">#000000</item>
+        <item name="android:fontFamily">sans-serif-light</item>
+        <item name="android:textSize">@dimen/notification_title_text_size</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+    <style name="TextAppearance.StatusBar.Quantum.EventContent.Line2">
+        <item name="android:textSize">@dimen/notification_subtext_size</item>
+    </style>
+    <style name="TextAppearance.StatusBar.Quantum.EventContent.Info">
+        <item name="android:textSize">@dimen/notification_subtext_size</item>
+        <item name="android:textColor">#888888</item>
+    </style>
+    <style name="TextAppearance.StatusBar.Quantum.EventContent.Time">
+        <item name="android:textSize">@dimen/notification_subtext_size</item>
+        <item name="android:textColor">#888888</item>
+    </style>
+    <style name="TextAppearance.StatusBar.Quantum.EventContent.Emphasis">
+        <item name="android:textColor">#555555</item>
+    </style>
+
     <style name="TextAppearance.Small.CalendarViewWeekDayView">
         <item name="android:textStyle">bold</item>
     </style>
@@ -300,6 +327,7 @@
     <style name="Widget.AbsListView">
         <item name="android:scrollbars">vertical</item>
         <item name="android:fadingEdge">vertical</item>
+        <item name="android:fastScrollStyle">?android:attr/fastScrollStyle</item>
     </style>
 
     <style name="Widget.GestureOverlayView">
@@ -369,6 +397,11 @@
         <item name="android:disabledAlpha">?android:attr/disabledAlpha</item>
     </style>
 
+    <style name="Widget.StackView">
+        <item name="android:resOutColor">@android:color/holo_blue_light</item>
+        <item name="android:clickColor">@android:color/holo_blue_light</item>
+    </style>
+
     <style name="Widget.ProgressBar">
         <item name="android:indeterminateOnly">true</item>
         <item name="android:indeterminateDrawable">@android:drawable/progress_medium_white</item>
@@ -518,6 +551,11 @@
         <item name="android:childDivider">@android:drawable/divider_horizontal_bright_opaque</item>
     </style>
 
+    <style name="Widget.FragmentBreadCrumbs">
+        <item name="android:padding">4dp</item>
+        <item name="android:animateLayoutChanges">true</item>
+    </style>
+
     <style name="Widget.ImageWell">
         <item name="android:background">@android:drawable/panel_picture_frame_background</item>
     </style>
@@ -552,7 +590,7 @@
     </style>
 
     <style name="Widget.TimePicker">
-        <item name="android:internalLayout">@android:layout/time_picker</item>
+        <item name="android:legacyLayout">@android:layout/time_picker_legacy</item>
     </style>
 
     <style name="Widget.DatePicker">
@@ -689,12 +727,6 @@
         <item name="android:popupAnimationStyle">@android:style/Animation.PopupWindow</item>
     </style>
 
-    <!-- Default style for {@link android.app.FragmentBreadCrumbs} view. -->
-    <style name="Widget.FragmentBreadCrumbs">
-        <item name="android:padding">4dp</item>
-        <item name="android:animateLayoutChanges">true</item>
-    </style>
-
     <style name="Widget.KeyboardView" parent="android:Widget">
         <item name="android:background">@android:drawable/keyboard_background</item>
         <item name="android:keyBackground">@android:drawable/btn_keyboard_key</item>
@@ -1181,6 +1213,13 @@
         <item name="android:subtitleTextStyle">@android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
     </style>
 
+    <style name="Widget.Toolbar">
+        <item name="android:titleTextAppearance">@android:style/TextAppearance.Widget.Toolbar.Title</item>
+        <item name="android:subtitleTextAppearance">@android:style/TextAppearance.Widget.Toolbar.Subtitle</item>
+        <item name="android:minHeight">?android:attr/actionBarSize</item>
+        <item name="android:titleMargins">4dp</item>
+    </style>
+
     <style name="TextAppearance.Widget.ActionBar.Title"
            parent="@android:style/TextAppearance.Medium">
     </style>
@@ -1198,6 +1237,14 @@
         <item name="android:textColor">?android:attr/textColorSecondary</item>
     </style>
 
+    <style name="TextAppearance.Widget.Toolbar.Title"
+           parent="@android:style/TextAppearance.Widget.ActionBar.Title">
+    </style>
+
+    <style name="TextAppearance.Widget.Toolbar.Subtitle"
+           parent="@android:style/TextAppearance.Widget.ActionBar.Subtitle">
+    </style>
+
     <style name="Widget.ActionButton">
         <item name="android:background">?android:attr/actionBarItemBackground</item>
         <item name="android:paddingStart">12dip</item>
@@ -1567,11 +1614,6 @@
         <item name="android:minWidth">64dip</item>
     </style>
 
-    <style name="Widget.Holo.StackView">
-        <item name="android:resOutColor">@android:color/holo_blue_light</item>
-        <item name="android:clickColor">@android:color/holo_blue_light</item>
-    </style>
-
     <style name="Widget.Holo.Button.Borderless">
         <item name="android:background">?android:attr/selectableItemBackground</item>
         <item name="android:paddingStart">4dip</item>
@@ -1603,6 +1645,11 @@
         <item name="android:minHeight">48dip</item>
     </style>
 
+    <style name="Widget.Holo.StackView">
+        <item name="android:resOutColor">@android:color/holo_blue_light</item>
+        <item name="android:clickColor">@android:color/holo_blue_light</item>
+    </style>
+
     <style name="Holo.ButtonBar" parent="ButtonBar">
         <item name="android:paddingTop">0dip</item>
         <item name="android:paddingStart">0dip</item>
@@ -1670,6 +1717,9 @@
     <style name="Widget.Holo.ExpandableListView.White">
     </style>
 
+    <style name="Widget.Holo.FragmentBreadCrumbs" parent="Widget.FragmentBreadCrumbs">
+    </style>
+
     <style name="Widget.Holo.Gallery" parent="Widget.Gallery">
     </style>
 
@@ -1706,7 +1756,18 @@
     </style>
 
     <style name="Widget.Holo.TimePicker" parent="Widget.TimePicker">
+        <item name="android:legacyLayout">@android:layout/time_picker_legacy_holo</item>
         <item name="android:internalLayout">@android:layout/time_picker_holo</item>
+        <item name="android:disabledColor">@android:color/timepicker_default_disabled_color_holo_dark</item>
+        <item name="android:headerSelectedTextColor">@android:color/holo_blue_light</item>
+        <item name="android:headerUnselectedTextColor">@android:color/timepicker_default_text_color_holo_dark</item>
+        <item name="android:headerBackgroundColor">@android:color/timepicker_default_background_holo_dark</item>
+        <item name="android:numbersTextColor">@android:color/timepicker_default_text_color_holo_dark</item>
+        <item name="android:numbersBackgroundColor">@android:color/timepicker_default_background_holo_dark</item>
+        <item name="android:amPmTextColor">@android:color/timepicker_default_text_color_holo_dark</item>
+        <item name="android:amPmUnselectedBackgroundColor">@android:color/timepicker_default_background_holo_dark</item>
+        <item name="android:amPmSelectedBackgroundColor">@android:color/holo_blue_light</item>
+        <item name="android:numbersSelectorColor">@android:color/holo_blue_light</item>
     </style>
 
     <style name="Widget.Holo.DatePicker" parent="Widget.DatePicker">
@@ -2043,6 +2104,11 @@
         <item name="android:minHeight">48dip</item>
     </style>
 
+    <style name="Widget.Holo.Light.StackView">
+        <item name="android:resOutColor">@android:color/holo_blue_light</item>
+        <item name="android:clickColor">@android:color/holo_blue_light</item>
+    </style>
+
     <style name="Holo.Light.ButtonBar" parent="Holo.ButtonBar">
     </style>
 
@@ -2099,6 +2165,9 @@
     <style name="Widget.Holo.Light.ExpandableListView.White">
     </style>
 
+    <style name="Widget.Holo.Light.FragmentBreadCrumbs" parent="Widget.FragmentBreadCrumbs">
+    </style>
+
     <style name="Widget.Holo.Light.Gallery" parent="Widget.Gallery">
     </style>
 
@@ -2124,7 +2193,19 @@
     <style name="Widget.Holo.Light.NumberPicker" parent="Widget.Holo.NumberPicker">
     </style>
 
-    <style name="Widget.Holo.Light.TimePicker" parent="Widget.Holo.TimePicker">
+    <style name="Widget.Holo.Light.TimePicker" parent="Widget.TimePicker">
+        <item name="android:legacyLayout">@android:layout/time_picker_legacy_holo</item>
+        <item name="android:internalLayout">@android:layout/time_picker_holo</item>
+        <item name="android:disabledColor">@android:color/timepicker_default_disabled_color_holo_light</item>
+        <item name="android:headerSelectedTextColor">@android:color/holo_blue_light</item>
+        <item name="android:headerUnselectedTextColor">@android:color/timepicker_default_text_color_holo_light</item>
+        <item name="android:headerBackgroundColor">@android:color/timepicker_default_background_holo_light</item>
+        <item name="android:numbersTextColor">@android:color/timepicker_default_text_color_holo_light</item>
+        <item name="android:numbersBackgroundColor">@android:color/timepicker_default_background_holo_light</item>
+        <item name="android:amPmTextColor">@android:color/timepicker_default_text_color_holo_light</item>
+        <item name="android:amPmUnselectedBackgroundColor">@android:color/timepicker_default_background_holo_light</item>
+        <item name="android:amPmSelectedBackgroundColor">@android:color/holo_blue_light</item>
+        <item name="android:numbersSelectorColor">@android:color/holo_blue_light</item>
     </style>
 
     <style name="Widget.Holo.Light.DatePicker" parent="Widget.Holo.DatePicker">
@@ -2503,13 +2584,8 @@
         <item name="android:contentDescription">@android:string/media_route_button_content_description</item>
     </style>
 
-    <style name="Widget.Holo.Light.MediaRouteButton">
-        <item name="android:background">?android:attr/selectableItemBackground</item>
+    <style name="Widget.Holo.Light.MediaRouteButton" parent="Widget.Holo.MediaRouteButton">
         <item name="android:externalRouteEnabledDrawable">@drawable/ic_media_route_holo_light</item>
-        <item name="android:minWidth">56dp</item>
-        <item name="android:minHeight">48dp</item>
-        <item name="android:focusable">true</item>
-        <item name="android:contentDescription">@android:string/media_route_button_content_description</item>
     </style>
 
     <!-- Keyguard PIN pad styles -->
@@ -2539,4 +2615,57 @@
         <item name="android:textColor">#80ffffff</item>
     </style>
 
+    <style name="TextAppearance.TimePicker.TimeLabel" parent="TextAppearance">
+    </style>
+
+    <style name="TextAppearance.TimePicker.AmPmLabel" parent="TextAppearance">
+    </style>
+
+    <style name="TextAppearance.Holo.TimePicker.TimeLabel" parent="TextAppearance.Holo">
+        <item name="android:textSize">@dimen/timepicker_time_label_size</item>
+        <item name="android:textColor">@android:color/timepicker_default_text_color_holo_dark</item>
+    </style>
+
+    <style name="TextAppearance.Holo.TimePicker.AmPmLabel" parent="TextAppearance.Holo">
+        <item name="android:textSize">@dimen/timepicker_ampm_label_size</item>
+        <item name="android:textAllCaps">true</item>
+        <item name="android:textColor">@android:color/timepicker_default_text_color_holo_dark</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="TextAppearance.Holo.Light.TimePicker.TimeLabel" parent="TextAppearance.Holo.Light">
+        <item name="android:textSize">@dimen/timepicker_time_label_size</item>
+        <item name="android:textColor">@color/timepicker_default_text_color_holo_light</item>
+    </style>
+
+    <style name="TextAppearance.Holo.Light.TimePicker.AmPmLabel" parent="TextAppearance.Holo.Light">
+        <item name="android:textSize">@dimen/timepicker_ampm_label_size</item>
+        <item name="android:textAllCaps">true</item>
+        <item name="android:textColor">@color/timepicker_default_text_color_holo_light</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+
+    <style name="Widget.FastScroll">
+        <item name="android:thumbDrawable">?android:attr/fastScrollThumbDrawable</item>
+        <item name="android:trackDrawable">?android:attr/fastScrollTrackDrawable</item>
+        <item name="android:backgroundLeft">?android:attr/fastScrollPreviewBackgroundLeft</item>
+        <item name="android:backgroundRight">?android:attr/fastScrollPreviewBackgroundRight</item>
+        <item name="android:position">?android:attr/fastScrollOverlayPosition</item>
+        <item name="android:textColor">?android:attr/fastScrollTextColor</item>
+        <item name="android:thumbMinWidth">64dp</item>
+        <item name="android:thumbMinHeight">52dp</item>
+        <item name="android:textSize">52sp</item>
+        <item name="android:minWidth">72dp</item>
+        <item name="android:minHeight">72dp</item>
+        <item name="android:padding">16dp</item>
+    </style>
+
+    <style name="Widget.Holo.FastScroll" parent="Widget.FastScroll">
+        <item name="android:thumbMinWidth">0dp</item>
+        <item name="android:thumbMinHeight">0dp</item>
+    </style>
+
+    <style name="Widget.Holo.Light.FastScroll" parent="Widget.Holo.FastScroll">
+    </style>
+
 </resources>
diff --git a/core/res/res/values/styles_device_defaults.xml b/core/res/res/values/styles_device_defaults.xml
index edeba02..60e06ce 100644
--- a/core/res/res/values/styles_device_defaults.xml
+++ b/core/res/res/values/styles_device_defaults.xml
@@ -32,701 +32,249 @@
  -->
 <resources>
     <!-- Widget Styles -->
-    <style name="Widget.DeviceDefault" parent="Widget.Holo" >
+    <style name="Widget.DeviceDefault" parent="Widget.Quantum"/>
+    <style name="Widget.DeviceDefault.Button" parent="Widget.Quantum.Button"/>
+    <style name="Widget.DeviceDefault.Button.Small" parent="Widget.Quantum.Button.Small"/>
+    <style name="Widget.DeviceDefault.Button.Inset" parent="Widget.Quantum.Button.Inset"/>
+    <style name="Widget.DeviceDefault.Button.Toggle" parent="Widget.Quantum.Button.Toggle"/>
+    <style name="Widget.DeviceDefault.TextView" parent="Widget.Quantum.TextView"/>
+    <style name="Widget.DeviceDefault.CheckedTextView" parent="Widget.Quantum.CheckedTextView"/>
+    <style name="Widget.DeviceDefault.AutoCompleteTextView" parent="Widget.Quantum.AutoCompleteTextView"/>
+    <style name="Widget.DeviceDefault.CompoundButton.CheckBox" parent="Widget.Quantum.CompoundButton.CheckBox"/>
+    <style name="Widget.DeviceDefault.ListView.DropDown" parent="Widget.Quantum.ListView.DropDown"/>
+    <style name="Widget.DeviceDefault.EditText" parent="Widget.Quantum.EditText"/>
+    <style name="Widget.DeviceDefault.ExpandableListView" parent="Widget.Quantum.ExpandableListView"/>
+    <style name="Widget.DeviceDefault.GridView" parent="Widget.Quantum.GridView"/>
+    <style name="Widget.DeviceDefault.ImageButton" parent="Widget.Quantum.ImageButton"/>
+    <style name="Widget.DeviceDefault.ListView" parent="Widget.Quantum.ListView"/>
+    <style name="Widget.DeviceDefault.PopupWindow" parent="Widget.Quantum.PopupWindow"/>
+    <style name="Widget.DeviceDefault.ProgressBar" parent="Widget.Quantum.ProgressBar"/>
+    <style name="Widget.DeviceDefault.ProgressBar.Horizontal" parent="Widget.Quantum.ProgressBar.Horizontal"/>
+    <style name="Widget.DeviceDefault.ProgressBar.Small" parent="Widget.Quantum.ProgressBar.Small"/>
+    <style name="Widget.DeviceDefault.ProgressBar.Small.Title" parent="Widget.Quantum.ProgressBar.Small.Title"/>
+    <style name="Widget.DeviceDefault.ProgressBar.Large" parent="Widget.Quantum.ProgressBar.Large"/>
+    <style name="Widget.DeviceDefault.SeekBar" parent="Widget.Quantum.SeekBar"/>
+    <style name="Widget.DeviceDefault.RatingBar" parent="Widget.Quantum.RatingBar"/>
+    <style name="Widget.DeviceDefault.RatingBar.Indicator" parent="Widget.Quantum.RatingBar.Indicator"/>
+    <style name="Widget.DeviceDefault.RatingBar.Small" parent="Widget.Quantum.RatingBar.Small"/>
+    <style name="Widget.DeviceDefault.CompoundButton.RadioButton" parent="Widget.Quantum.CompoundButton.RadioButton"/>
+    <style name="Widget.DeviceDefault.ScrollView" parent="Widget.Quantum.ScrollView"/>
+    <style name="Widget.DeviceDefault.HorizontalScrollView" parent="Widget.Quantum.HorizontalScrollView"/>
+    <style name="Widget.DeviceDefault.Spinner" parent="Widget.Quantum.Spinner"/>
+    <style name="Widget.DeviceDefault.CompoundButton.Star" parent="Widget.Quantum.CompoundButton.Star"/>
+    <style name="Widget.DeviceDefault.TabWidget" parent="Widget.Quantum.TabWidget"/>
+    <style name="Widget.DeviceDefault.WebTextView" parent="Widget.Quantum.WebTextView"/>
+    <style name="Widget.DeviceDefault.WebView" parent="Widget.Quantum.WebView"/>
+    <style name="Widget.DeviceDefault.DropDownItem" parent="Widget.Quantum.DropDownItem"/>
+    <style name="Widget.DeviceDefault.DropDownItem.Spinner" parent="Widget.Quantum.DropDownItem.Spinner"/>
+    <style name="Widget.DeviceDefault.TextView.SpinnerItem" parent="Widget.Quantum.TextView.SpinnerItem"/>
+    <style name="Widget.DeviceDefault.ListPopupWindow" parent="Widget.Quantum.ListPopupWindow"/>
+    <style name="Widget.DeviceDefault.PopupMenu" parent="Widget.Quantum.PopupMenu"/>
+    <style name="Widget.DeviceDefault.ActionButton" parent="Widget.Quantum.ActionButton"/>
+    <style name="Widget.DeviceDefault.ActionButton.Overflow" parent="Widget.Quantum.ActionButton.Overflow"/>
+    <style name="Widget.DeviceDefault.ActionButton.TextButton" parent="Widget.Quantum.ActionButton"/>
+    <style name="Widget.DeviceDefault.ActionMode" parent="Widget.Quantum.ActionMode"/>
+    <style name="Widget.DeviceDefault.ActionButton.CloseMode" parent="Widget.Quantum.ActionButton.CloseMode"/>
+    <style name="Widget.DeviceDefault.ActionBar" parent="Widget.Quantum.ActionBar"/>
+    <style name="Widget.DeviceDefault.Button.Borderless" parent="Widget.Quantum.Button.Borderless"/>
+    <style name="Widget.DeviceDefault.Tab" parent="Widget.Quantum.Tab"/>
+    <style name="Widget.DeviceDefault.CalendarView" parent="Widget.Quantum.CalendarView"/>
+    <style name="Widget.DeviceDefault.DatePicker" parent="Widget.Quantum.DatePicker"/>
+    <style name="Widget.DeviceDefault.ActionBar.TabView" parent="Widget.Quantum.ActionBar.TabView"/>
+    <style name="Widget.DeviceDefault.ActionBar.TabText" parent="Widget.Quantum.ActionBar.TabText"/>
+    <style name="Widget.DeviceDefault.ActionBar.TabBar" parent="Widget.Quantum.ActionBar.TabBar"/>
+    <style name="Widget.DeviceDefault.ActionBar.Solid" parent="Widget.Quantum.ActionBar.Solid"/>
+    <style name="Widget.DeviceDefault.Button.Borderless.Small" parent="Widget.Quantum.Button.Borderless.Small"/>
+    <style name="Widget.DeviceDefault.AbsListView" parent="Widget.Quantum.AbsListView"/>
+    <style name="Widget.DeviceDefault.Spinner.DropDown.ActionBar" parent="Widget.Quantum.Spinner.DropDown.ActionBar"/>
+    <style name="Widget.DeviceDefault.PopupWindow.ActionMode" parent="Widget.Quantum.PopupWindow.ActionMode"/>
+    <style name="Widget.DeviceDefault.CompoundButton.Switch" parent="Widget.Quantum.CompoundButton.Switch"/>
+    <style name="Widget.DeviceDefault.ExpandableListView.White" parent="Widget.Quantum.ExpandableListView.White"/>
+    <style name="Widget.DeviceDefault.FastScroll" parent="Widget.Quantum.FastScroll"/>
+    <style name="Widget.DeviceDefault.FragmentBreadCrumbs" parent="Widget.Quantum.FragmentBreadCrumbs"/>
+    <style name="Widget.DeviceDefault.Gallery" parent="Widget.Quantum.Gallery"/>
+    <style name="Widget.DeviceDefault.GestureOverlayView" parent="Widget.Quantum.GestureOverlayView"/>
+    <style name="Widget.DeviceDefault.ImageWell" parent="Widget.Quantum.ImageWell"/>
+    <style name="Widget.DeviceDefault.KeyboardView" parent="Widget.Quantum.KeyboardView"/>
+    <style name="Widget.DeviceDefault.ListView.White" parent="Widget.Quantum.ListView.White"/>
+    <style name="Widget.DeviceDefault.MediaRouteButton" parent="Widget.Quantum.MediaRouteButton" />
+    <style name="Widget.DeviceDefault.NumberPicker" parent="Widget.Quantum.NumberPicker"/>
+    <style name="Widget.DeviceDefault.PreferenceFrameLayout" parent="Widget.Quantum.PreferenceFrameLayout"/>
+    <style name="Widget.DeviceDefault.ProgressBar.Inverse" parent="Widget.Quantum.ProgressBar.Inverse"/>
+    <style name="Widget.DeviceDefault.ProgressBar.Large.Inverse" parent="Widget.Quantum.ProgressBar.Large.Inverse"/>
+    <style name="Widget.DeviceDefault.ProgressBar.Small.Inverse" parent="Widget.Quantum.ProgressBar.Small.Inverse"/>
+    <style name="Widget.DeviceDefault.QuickContactBadge.WindowLarge" parent="Widget.Quantum.QuickContactBadge.WindowLarge"/>
+    <style name="Widget.DeviceDefault.QuickContactBadge.WindowMedium" parent="Widget.Quantum.QuickContactBadge.WindowMedium"/>
+    <style name="Widget.DeviceDefault.QuickContactBadge.WindowSmall" parent="Widget.Quantum.QuickContactBadge.WindowSmall"/>
+    <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge" parent="Widget.Quantum.QuickContactBadgeSmall.WindowLarge"/>
+    <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium" parent="Widget.Quantum.QuickContactBadgeSmall.WindowMedium"/>
+    <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall" parent="Widget.Quantum.QuickContactBadgeSmall.WindowSmall"/>
+    <style name="Widget.DeviceDefault.Spinner.DropDown" parent="Widget.Quantum.Spinner.DropDown"/>
+    <style name="Widget.DeviceDefault.StackView" parent="Widget.Quantum.StackView"/>
+    <style name="Widget.DeviceDefault.TextSelectHandle" parent="Widget.Quantum.TextSelectHandle"/>
+    <style name="Widget.DeviceDefault.TextSuggestionsPopupWindow" parent="Widget.Quantum.TextSuggestionsPopupWindow"/>
+    <style name="Widget.DeviceDefault.TextView.ListSeparator" parent="Widget.Quantum.TextView.ListSeparator"/>
+    <style name="Widget.DeviceDefault.TimePicker" parent="Widget.Quantum.TimePicker"/>
 
-    </style>
-    <style name="Widget.DeviceDefault.Button" parent="Widget.Holo.Button" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Button.Small" parent="Widget.Holo.Button.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Button.Inset" parent="Widget.Holo.Button.Inset" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Button.Toggle" parent="Widget.Holo.Button.Toggle" >
-
-    </style>
-    <style name="Widget.DeviceDefault.TextView" parent="Widget.Holo.TextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.CheckedTextView" parent="Widget.Holo.CheckedTextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.AutoCompleteTextView" parent="Widget.Holo.AutoCompleteTextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.CompoundButton.CheckBox" parent="Widget.Holo.CompoundButton.CheckBox" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ListView.DropDown" parent="Widget.Holo.ListView.DropDown" >
-
-    </style>
-    <style name="Widget.DeviceDefault.EditText" parent="Widget.Holo.EditText" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ExpandableListView" parent="Widget.Holo.ExpandableListView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.GridView" parent="Widget.Holo.GridView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ImageButton" parent="Widget.Holo.ImageButton" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ListView" parent="Widget.Holo.ListView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.PopupWindow" parent="Widget.Holo.PopupWindow" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar" parent="Widget.Holo.ProgressBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar.Horizontal" parent="Widget.Holo.ProgressBar.Horizontal" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar.Small" parent="Widget.Holo.ProgressBar.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar.Small.Title" parent="Widget.Holo.ProgressBar.Small.Title" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar.Large" parent="Widget.Holo.ProgressBar.Large" >
-
-    </style>
-    <style name="Widget.DeviceDefault.SeekBar" parent="Widget.Holo.SeekBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.RatingBar" parent="Widget.Holo.RatingBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.RatingBar.Indicator" parent="Widget.Holo.RatingBar.Indicator" >
-
-    </style>
-    <style name="Widget.DeviceDefault.RatingBar.Small" parent="Widget.Holo.RatingBar.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.CompoundButton.RadioButton" parent="Widget.Holo.CompoundButton.RadioButton" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ScrollView" parent="Widget.Holo.ScrollView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.HorizontalScrollView" parent="Widget.Holo.HorizontalScrollView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Spinner" parent="Widget.Holo.Spinner" >
-
-    </style>
-    <style name="Widget.DeviceDefault.CompoundButton.Star" parent="Widget.Holo.CompoundButton.Star" >
-
-    </style>
-    <style name="Widget.DeviceDefault.TabWidget" parent="Widget.Holo.TabWidget" >
-
-    </style>
-    <style name="Widget.DeviceDefault.WebTextView" parent="Widget.Holo.WebTextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.WebView" parent="Widget.Holo.WebView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.DropDownItem" parent="Widget.Holo.DropDownItem" >
-
-    </style>
-    <style name="Widget.DeviceDefault.DropDownItem.Spinner" parent="Widget.Holo.DropDownItem.Spinner" >
-
-    </style>
-    <style name="Widget.DeviceDefault.TextView.SpinnerItem" parent="Widget.Holo.TextView.SpinnerItem" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ListPopupWindow" parent="Widget.Holo.ListPopupWindow" >
-
-    </style>
-    <style name="Widget.DeviceDefault.PopupMenu" parent="Widget.Holo.PopupMenu" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionButton" parent="Widget.Holo.ActionButton" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionButton.Overflow" parent="Widget.Holo.ActionButton.Overflow" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionButton.TextButton" parent="Widget.Holo.ActionButton.TextButton" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionMode" parent="Widget.Holo.ActionMode" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionButton.CloseMode" parent="Widget.Holo.ActionButton.CloseMode" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionBar" parent="Widget.Holo.ActionBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Button.Borderless" parent="Widget.Holo.Button.Borderless" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Tab" parent="Widget.Holo.Tab" >
-
-    </style>
-    <style name="Widget.DeviceDefault.CalendarView" parent="Widget.Holo.CalendarView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.DatePicker" parent="Widget.Holo.DatePicker" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionBar.TabView" parent="Widget.Holo.ActionBar.TabView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionBar.TabText" parent="Widget.Holo.ActionBar.TabText" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionBar.TabBar" parent="Widget.Holo.ActionBar.TabBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.ActionBar.Solid" parent="Widget.Holo.ActionBar.Solid" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Button.Borderless.Small" parent="Widget.Holo.Button.Borderless.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.AbsListView" parent="Widget.Holo.AbsListView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Spinner.DropDown.ActionBar" parent="Widget.Holo.Spinner.DropDown.ActionBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.PopupWindow.ActionMode" parent="Widget.Holo.PopupWindow.ActionMode" >
-
-    </style>
-    <style name="Widget.DeviceDefault.CompoundButton.Switch" parent="Widget.Holo.CompoundButton.Switch">
-
-    </style>
-    <style name="Widget.DeviceDefault.ExpandableListView.White" parent="Widget.Holo.ExpandableListView.White">
-
-    </style>
-    <style name="Widget.DeviceDefault.Gallery" parent="Widget.Holo.Gallery">
-
-    </style>
-    <style name="Widget.DeviceDefault.GestureOverlayView" parent="Widget.Holo.GestureOverlayView">
-
-    </style>
-    <style name="Widget.DeviceDefault.ImageWell" parent="Widget.Holo.ImageWell">
-
-    </style>
-    <style name="Widget.DeviceDefault.KeyboardView" parent="Widget.Holo.KeyboardView">
-
-    </style>
-    <style name="Widget.DeviceDefault.ListView.White" parent="Widget.Holo.ListView.White">
-
-    </style>
-    <style name="Widget.DeviceDefault.NumberPicker" parent="Widget.Holo.NumberPicker">
-
-    </style>
-    <style name="Widget.DeviceDefault.PreferenceFrameLayout" parent="Widget.Holo.PreferenceFrameLayout">
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar.Inverse" parent="Widget.Holo.ProgressBar.Inverse">
-
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar.Large.Inverse" parent="Widget.Holo.ProgressBar.Large.Inverse">
-
-    </style>
-    <style name="Widget.DeviceDefault.ProgressBar.Small.Inverse" parent="Widget.Holo.ProgressBar.Small.Inverse">
-
-    </style>
-    <style name="Widget.DeviceDefault.QuickContactBadge.WindowLarge" parent="Widget.Holo.QuickContactBadge.WindowLarge">
-
-    </style>
-    <style name="Widget.DeviceDefault.QuickContactBadge.WindowMedium" parent="Widget.Holo.QuickContactBadge.WindowMedium">
-
-    </style>
-    <style name="Widget.DeviceDefault.QuickContactBadge.WindowSmall" parent="Widget.Holo.QuickContactBadge.WindowSmall">
-
-    </style>
-    <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge" parent="Widget.Holo.QuickContactBadgeSmall.WindowLarge">
-
-    </style>
-    <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium" parent="Widget.Holo.QuickContactBadgeSmall.WindowMedium">
-
-    </style>
-    <style name="Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall" parent="Widget.Holo.QuickContactBadgeSmall.WindowSmall">
-
-    </style>
-    <style name="Widget.DeviceDefault.Spinner.DropDown" parent="Widget.Holo.Spinner.DropDown">
-
-    </style>
-    <style name="Widget.DeviceDefault.StackView" parent="Widget.Holo.StackView">
-
-    </style>
-    <style name="Widget.DeviceDefault.TextSelectHandle" parent="Widget.Holo.TextSelectHandle">
-
-    </style>
-    <style name="Widget.DeviceDefault.TextSuggestionsPopupWindow" parent="Widget.Holo.TextSuggestionsPopupWindow">
-
-    </style>
-    <style name="Widget.DeviceDefault.TextView.ListSeparator" parent="Widget.Holo.TextView.ListSeparator">
-
-    </style>
-    <style name="Widget.DeviceDefault.TimePicker" parent="Widget.Holo.TimePicker">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light" parent="Widget.Holo.Light" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Button" parent="Widget.Holo.Light.Button" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Button.Small" parent="Widget.Holo.Light.Button.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Button.Inset" parent="Widget.Holo.Light.Button.Inset" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Button.Toggle" parent="Widget.Holo.Light.Button.Toggle" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.TextView" parent="Widget.Holo.Light.TextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.CheckedTextView" parent="Widget.Holo.Light.CheckedTextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.AutoCompleteTextView" parent="Widget.Holo.Light.AutoCompleteTextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.CompoundButton.CheckBox" parent="Widget.Holo.Light.CompoundButton.CheckBox" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ListView.DropDown" parent="Widget.Holo.Light.ListView.DropDown" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.EditText" parent="Widget.Holo.Light.EditText" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ExpandableListView" parent="Widget.Holo.Light.ExpandableListView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.GridView" parent="Widget.Holo.Light.GridView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ImageButton" parent="Widget.Holo.Light.ImageButton" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ListView" parent="Widget.Holo.Light.ListView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.PopupWindow" parent="Widget.Holo.Light.PopupWindow" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar" parent="Widget.Holo.Light.ProgressBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar.Horizontal" parent="Widget.Holo.Light.ProgressBar.Horizontal" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar.Small" parent="Widget.Holo.Light.ProgressBar.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Title" parent="Widget.Holo.Light.ProgressBar.Small.Title" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar.Large" parent="Widget.Holo.Light.ProgressBar.Large" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar.Inverse" parent="Widget.Holo.Light.ProgressBar.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Inverse" parent="Widget.Holo.Light.ProgressBar.Small.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ProgressBar.Large.Inverse" parent="Widget.Holo.Light.ProgressBar.Large.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.SeekBar" parent="Widget.Holo.Light.SeekBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.RatingBar" parent="Widget.Holo.Light.RatingBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.RatingBar.Indicator" parent="Widget.Holo.Light.RatingBar.Indicator" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.RatingBar.Small" parent="Widget.Holo.Light.RatingBar.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.CompoundButton.RadioButton" parent="Widget.Holo.Light.CompoundButton.RadioButton" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ScrollView" parent="Widget.Holo.Light.ScrollView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.HorizontalScrollView" parent="Widget.Holo.Light.HorizontalScrollView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Spinner" parent="Widget.Holo.Light.Spinner" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.CompoundButton.Star" parent="Widget.Holo.Light.CompoundButton.Star" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.TabWidget" parent="Widget.Holo.Light.TabWidget" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.WebTextView" parent="Widget.Holo.Light.WebTextView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.WebView" parent="Widget.Holo.Light.WebView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.DropDownItem" parent="Widget.Holo.Light.DropDownItem" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.DropDownItem.Spinner" parent="Widget.Holo.Light.DropDownItem.Spinner" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.TextView.SpinnerItem" parent="Widget.Holo.Light.TextView.SpinnerItem" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ListPopupWindow" parent="Widget.Holo.Light.ListPopupWindow" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.PopupMenu" parent="Widget.Holo.Light.PopupMenu" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Tab" parent="Widget.Holo.Light.Tab" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.CalendarView" parent="Widget.Holo.Light.CalendarView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Button.Borderless.Small" parent="Widget.Holo.Light.Button.Borderless.Small" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionButton" parent="Widget.Holo.Light.ActionButton" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionButton.Overflow" parent="Widget.Holo.Light.ActionButton.Overflow" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionMode" parent="Widget.Holo.Light.ActionMode" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionButton.CloseMode" parent="Widget.Holo.Light.ActionButton.CloseMode" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar" parent="Widget.Holo.Light.ActionBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.TabView" parent="Widget.Holo.Light.ActionBar.TabView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.TabText" parent="Widget.Holo.Light.ActionBar.TabText" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.TabBar" parent="Widget.Holo.Light.ActionBar.TabBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.Solid" parent="Widget.Holo.Light.ActionBar.Solid" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.Solid.Inverse" parent="Widget.Holo.Light.ActionBar.Solid.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse" parent="Widget.Holo.Light.ActionBar.TabBar.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.TabView.Inverse" parent="Widget.Holo.Light.ActionBar.TabView.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionBar.TabText.Inverse" parent="Widget.Holo.Light.ActionBar.TabText.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ActionMode.Inverse" parent="Widget.Holo.Light.ActionMode.Inverse" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.AbsListView" parent="Widget.Holo.Light.AbsListView" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar" parent="Widget.Holo.Light.Spinner.DropDown.ActionBar" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.PopupWindow.ActionMode" parent="Widget.Holo.Light.PopupWindow.ActionMode" >
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Button.Borderless" parent="Widget.Holo.Light.Button.Borderless">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.DatePicker" parent="Widget.Holo.Light.DatePicker">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ExpandableListView.White" parent="Widget.Holo.Light.ExpandableListView.White">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Gallery" parent="Widget.Holo.Light.Gallery">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.GestureOverlayView" parent="Widget.Holo.Light.GestureOverlayView">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ImageWell" parent="Widget.Holo.Light.ImageWell">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.ListView.White" parent="Widget.Holo.Light.ListView.White">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.NumberPicker" parent="Widget.Holo.Light.NumberPicker">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.Spinner.DropDown" parent="Widget.Holo.Light.Spinner.DropDown">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.TextView.ListSeparator" parent="Widget.Holo.Light.TextView.ListSeparator">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.TimePicker" parent="Widget.Holo.Light.TimePicker">
-
-    </style>
-    <style name="Widget.DeviceDefault.Light.TextSuggestionsPopupWindow" parent="Widget.Holo.Light.TextSuggestionsPopupWindow">
-
-    </style>
-
+    <style name="Widget.DeviceDefault.Light" parent="Widget.Quantum.Light"/>
+    <style name="Widget.DeviceDefault.Light.Button" parent="Widget.Quantum.Light.Button"/>
+    <style name="Widget.DeviceDefault.Light.Button.Small" parent="Widget.Quantum.Light.Button.Small"/>
+    <style name="Widget.DeviceDefault.Light.Button.Inset" parent="Widget.Quantum.Light.Button.Inset"/>
+    <style name="Widget.DeviceDefault.Light.Button.Toggle" parent="Widget.Quantum.Light.Button.Toggle"/>
+    <style name="Widget.DeviceDefault.Light.StackView" parent="Widget.Quantum.Light.StackView"/>
+    <style name="Widget.DeviceDefault.Light.TextView" parent="Widget.Quantum.Light.TextView"/>
+    <style name="Widget.DeviceDefault.Light.CheckedTextView" parent="Widget.Quantum.Light.CheckedTextView"/>
+    <style name="Widget.DeviceDefault.Light.AutoCompleteTextView" parent="Widget.Quantum.Light.AutoCompleteTextView"/>
+    <style name="Widget.DeviceDefault.Light.CompoundButton.CheckBox" parent="Widget.Quantum.Light.CompoundButton.CheckBox"/>
+    <style name="Widget.DeviceDefault.Light.ListView.DropDown" parent="Widget.Quantum.Light.ListView.DropDown"/>
+    <style name="Widget.DeviceDefault.Light.EditText" parent="Widget.Quantum.Light.EditText"/>
+    <style name="Widget.DeviceDefault.Light.ExpandableListView" parent="Widget.Quantum.Light.ExpandableListView"/>
+    <style name="Widget.DeviceDefault.Light.FastScroll" parent="Widget.Quantum.Light.FastScroll"/>
+    <style name="Widget.DeviceDefault.Light.FragmentBreadCrumbs" parent="Widget.Quantum.Light.FragmentBreadCrumbs"/>
+    <style name="Widget.DeviceDefault.Light.GridView" parent="Widget.Quantum.Light.GridView"/>
+    <style name="Widget.DeviceDefault.Light.ImageButton" parent="Widget.Quantum.Light.ImageButton"/>
+    <style name="Widget.DeviceDefault.Light.ListView" parent="Widget.Quantum.Light.ListView"/>
+    <style name="Widget.DeviceDefault.Light.MediaRouteButton" parent="Widget.Quantum.Light.MediaRouteButton" />
+    <style name="Widget.DeviceDefault.Light.PopupWindow" parent="Widget.Quantum.Light.PopupWindow"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar" parent="Widget.Quantum.Light.ProgressBar"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar.Horizontal" parent="Widget.Quantum.Light.ProgressBar.Horizontal"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar.Small" parent="Widget.Quantum.Light.ProgressBar.Small"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Title" parent="Widget.Quantum.Light.ProgressBar.Small.Title"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar.Large" parent="Widget.Quantum.Light.ProgressBar.Large"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar.Inverse" parent="Widget.Quantum.Light.ProgressBar.Inverse"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar.Small.Inverse" parent="Widget.Quantum.Light.ProgressBar.Small.Inverse"/>
+    <style name="Widget.DeviceDefault.Light.ProgressBar.Large.Inverse" parent="Widget.Quantum.Light.ProgressBar.Large.Inverse"/>
+    <style name="Widget.DeviceDefault.Light.SeekBar" parent="Widget.Quantum.Light.SeekBar"/>
+    <style name="Widget.DeviceDefault.Light.RatingBar" parent="Widget.Quantum.Light.RatingBar"/>
+    <style name="Widget.DeviceDefault.Light.RatingBar.Indicator" parent="Widget.Quantum.Light.RatingBar.Indicator"/>
+    <style name="Widget.DeviceDefault.Light.RatingBar.Small" parent="Widget.Quantum.Light.RatingBar.Small"/>
+    <style name="Widget.DeviceDefault.Light.CompoundButton.RadioButton" parent="Widget.Quantum.Light.CompoundButton.RadioButton"/>
+    <style name="Widget.DeviceDefault.Light.ScrollView" parent="Widget.Quantum.Light.ScrollView"/>
+    <style name="Widget.DeviceDefault.Light.HorizontalScrollView" parent="Widget.Quantum.Light.HorizontalScrollView"/>
+    <style name="Widget.DeviceDefault.Light.Spinner" parent="Widget.Quantum.Light.Spinner"/>
+    <style name="Widget.DeviceDefault.Light.CompoundButton.Star" parent="Widget.Quantum.Light.CompoundButton.Star"/>
+    <style name="Widget.DeviceDefault.Light.TabWidget" parent="Widget.Quantum.Light.TabWidget"/>
+    <style name="Widget.DeviceDefault.Light.WebTextView" parent="Widget.Quantum.Light.WebTextView"/>
+    <style name="Widget.DeviceDefault.Light.WebView" parent="Widget.Quantum.Light.WebView"/>
+    <style name="Widget.DeviceDefault.Light.DropDownItem" parent="Widget.Quantum.Light.DropDownItem"/>
+    <style name="Widget.DeviceDefault.Light.DropDownItem.Spinner" parent="Widget.Quantum.Light.DropDownItem.Spinner"/>
+    <style name="Widget.DeviceDefault.Light.TextView.SpinnerItem" parent="Widget.Quantum.Light.TextView.SpinnerItem"/>
+    <style name="Widget.DeviceDefault.Light.ListPopupWindow" parent="Widget.Quantum.Light.ListPopupWindow"/>
+    <style name="Widget.DeviceDefault.Light.PopupMenu" parent="Widget.Quantum.Light.PopupMenu"/>
+    <style name="Widget.DeviceDefault.Light.Tab" parent="Widget.Quantum.Light.Tab"/>
+    <style name="Widget.DeviceDefault.Light.CalendarView" parent="Widget.Quantum.Light.CalendarView"/>
+    <style name="Widget.DeviceDefault.Light.Button.Borderless.Small" parent="Widget.Quantum.Light.Button.Borderless.Small"/>
+    <style name="Widget.DeviceDefault.Light.ActionButton" parent="Widget.Quantum.Light.ActionButton"/>
+    <style name="Widget.DeviceDefault.Light.ActionButton.Overflow" parent="Widget.Quantum.Light.ActionButton.Overflow"/>
+    <style name="Widget.DeviceDefault.Light.ActionMode" parent="Widget.Quantum.Light.ActionMode"/>
+    <style name="Widget.DeviceDefault.Light.ActionButton.CloseMode" parent="Widget.Quantum.Light.ActionButton.CloseMode"/>
+    <style name="Widget.DeviceDefault.Light.ActionBar" parent="Widget.Quantum.Light.ActionBar"/>
+    <style name="Widget.DeviceDefault.Light.ActionBar.TabView" parent="Widget.Quantum.Light.ActionBar.TabView"/>
+    <style name="Widget.DeviceDefault.Light.ActionBar.TabText" parent="Widget.Quantum.Light.ActionBar.TabText"/>
+    <style name="Widget.DeviceDefault.Light.ActionBar.TabBar" parent="Widget.Quantum.Light.ActionBar.TabBar"/>
+    <style name="Widget.DeviceDefault.Light.ActionBar.Solid" parent="Widget.Quantum.Light.ActionBar.Solid"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="Widget.DeviceDefault.Light.ActionBar.Solid.Inverse" parent="Widget.Holo.Light.ActionBar.Solid.Inverse"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse" parent="Widget.Holo.Light.ActionBar.TabBar.Inverse"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="Widget.DeviceDefault.Light.ActionBar.TabView.Inverse" parent="Widget.Holo.Light.ActionBar.TabView.Inverse"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="Widget.DeviceDefault.Light.ActionBar.TabText.Inverse" parent="Widget.Holo.Light.ActionBar.TabText.Inverse"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="Widget.DeviceDefault.Light.ActionMode.Inverse" parent="Widget.Holo.Light.ActionMode.Inverse"/>
+    <style name="Widget.DeviceDefault.Light.AbsListView" parent="Widget.Quantum.Light.AbsListView"/>
+    <style name="Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar" parent="Widget.Quantum.Light.Spinner.DropDown.ActionBar"/>
+    <style name="Widget.DeviceDefault.Light.PopupWindow.ActionMode" parent="Widget.Quantum.Light.PopupWindow.ActionMode"/>
+    <style name="Widget.DeviceDefault.Light.Button.Borderless" parent="Widget.Quantum.Light.Button.Borderless"/>
+    <style name="Widget.DeviceDefault.Light.DatePicker" parent="Widget.Quantum.Light.DatePicker"/>
+    <style name="Widget.DeviceDefault.Light.ExpandableListView.White" parent="Widget.Quantum.Light.ExpandableListView.White"/>
+    <style name="Widget.DeviceDefault.Light.Gallery" parent="Widget.Quantum.Light.Gallery"/>
+    <style name="Widget.DeviceDefault.Light.GestureOverlayView" parent="Widget.Quantum.Light.GestureOverlayView"/>
+    <style name="Widget.DeviceDefault.Light.ImageWell" parent="Widget.Quantum.Light.ImageWell"/>
+    <style name="Widget.DeviceDefault.Light.ListView.White" parent="Widget.Quantum.Light.ListView.White"/>
+    <style name="Widget.DeviceDefault.Light.NumberPicker" parent="Widget.Quantum.Light.NumberPicker"/>
+    <style name="Widget.DeviceDefault.Light.Spinner.DropDown" parent="Widget.Quantum.Light.Spinner.DropDown"/>
+    <style name="Widget.DeviceDefault.Light.TextView.ListSeparator" parent="Widget.Quantum.Light.TextView.ListSeparator"/>
+    <style name="Widget.DeviceDefault.Light.TimePicker" parent="Widget.Quantum.Light.TimePicker"/>
+    <style name="Widget.DeviceDefault.Light.TextSuggestionsPopupWindow" parent="Widget.Quantum.Light.TextSuggestionsPopupWindow"/>
 
     <!-- Text Appearance Styles -->
-    <style name="TextAppearance.DeviceDefault" parent="TextAppearance.Holo" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Inverse" parent="TextAppearance.Holo.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Large" parent="TextAppearance.Holo.Large" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Large.Inverse" parent="TextAppearance.Holo.Large.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Medium" parent="TextAppearance.Holo.Medium" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Medium.Inverse" parent="TextAppearance.Holo.Medium.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Small" parent="TextAppearance.Holo.Small" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Small.Inverse" parent="TextAppearance.Holo.Small.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.SearchResult.Title" parent="TextAppearance.Holo.SearchResult.Title" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.SearchResult.Subtitle" parent="TextAppearance.Holo.SearchResult.Subtitle" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget" parent="TextAppearance.Holo.Widget" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.Button" parent="TextAppearance.Holo.Widget.Button" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.IconMenu.Item" parent="TextAppearance.Holo.Widget.IconMenu.Item" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.TabWidget" parent="TextAppearance.Holo.Widget.TabWidget" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.TextView" parent="TextAppearance.Holo.Widget.TextView" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.TextView.PopupMenu" parent="TextAppearance.Holo.Widget.TextView.PopupMenu" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.DropDownHint" parent="TextAppearance.Holo.Widget.DropDownHint" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.DropDownItem" parent="TextAppearance.Holo.Widget.DropDownItem" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem" parent="TextAppearance.Holo.Widget.TextView.SpinnerItem" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.EditText" parent="TextAppearance.Holo.Widget.EditText" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.PopupMenu" parent="TextAppearance.Holo.Widget.PopupMenu" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Large" parent="TextAppearance.Holo.Widget.PopupMenu.Large" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Small" parent="TextAppearance.Holo.Widget.PopupMenu.Small" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title" parent="TextAppearance.Holo.Widget.ActionBar.Title" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle" parent="TextAppearance.Holo.Widget.ActionBar.Subtitle" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title" parent="TextAppearance.Holo.Widget.ActionMode.Title" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle" parent="TextAppearance.Holo.Widget.ActionMode.Subtitle" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.WindowTitle" parent="TextAppearance.Holo.WindowTitle" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.DialogWindowTitle" parent="TextAppearance.Holo.DialogWindowTitle" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Holo.Widget.ActionBar.Title.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Holo.Widget.ActionMode.Title.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Holo.Widget.ActionMode.Subtitle.Inverse" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Menu" parent="TextAppearance.Holo.Widget.ActionBar.Menu" >
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light" parent="TextAppearance.Holo.Light">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Inverse" parent="TextAppearance.Holo.Light.Inverse">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Large" parent="TextAppearance.Holo.Light.Large">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Large.Inverse" parent="TextAppearance.Holo.Light.Large.Inverse">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Medium" parent="TextAppearance.Holo.Light.Medium">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Medium.Inverse" parent="TextAppearance.Holo.Light.Medium.Inverse">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.SearchResult.Subtitle" parent="TextAppearance.Holo.Light.SearchResult.Subtitle">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.SearchResult.Title" parent="TextAppearance.Holo.Light.SearchResult.Title">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Small" parent="TextAppearance.Holo.Light.Small">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Small.Inverse" parent="TextAppearance.Holo.Light.Small.Inverse">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Widget.Button" parent="TextAppearance.Holo.Light.Widget.Button">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Large" parent="TextAppearance.Holo.Light.Widget.PopupMenu.Large">
-
-    </style>
-    <style name="TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Small" parent="TextAppearance.Holo.Light.Widget.PopupMenu.Small">
-
-    </style>
-
+    <style name="TextAppearance.DeviceDefault" parent="TextAppearance.Quantum"/>
+    <style name="TextAppearance.DeviceDefault.Inverse" parent="TextAppearance.Quantum.Inverse"/>
+    <style name="TextAppearance.DeviceDefault.Large" parent="TextAppearance.Quantum.Large"/>
+    <style name="TextAppearance.DeviceDefault.Large.Inverse" parent="TextAppearance.Quantum.Large.Inverse"/>
+    <style name="TextAppearance.DeviceDefault.Medium" parent="TextAppearance.Quantum.Medium"/>
+    <style name="TextAppearance.DeviceDefault.Medium.Inverse" parent="TextAppearance.Quantum.Medium.Inverse"/>
+    <style name="TextAppearance.DeviceDefault.Small" parent="TextAppearance.Quantum.Small"/>
+    <style name="TextAppearance.DeviceDefault.Small.Inverse" parent="TextAppearance.Quantum.Small.Inverse"/>
+    <style name="TextAppearance.DeviceDefault.SearchResult.Title" parent="TextAppearance.Quantum.SearchResult.Title"/>
+    <style name="TextAppearance.DeviceDefault.SearchResult.Subtitle" parent="TextAppearance.Quantum.SearchResult.Subtitle"/>
+    <style name="TextAppearance.DeviceDefault.TimePicker.TimeLabel" parent="TextAppearance.Quantum.TimePicker.TimeLabel"/>
+    <style name="TextAppearance.DeviceDefault.TimePicker.AmPmLabel" parent="TextAppearance.Quantum.TimePicker.AmPmLabel"/>
+    <style name="TextAppearance.DeviceDefault.Widget" parent="TextAppearance.Quantum.Widget"/>
+    <style name="TextAppearance.DeviceDefault.Widget.Button" parent="TextAppearance.Quantum.Widget.Button"/>
+    <style name="TextAppearance.DeviceDefault.Widget.IconMenu.Item" parent="TextAppearance.Quantum.Widget.IconMenu.Item"/>
+    <style name="TextAppearance.DeviceDefault.Widget.TabWidget" parent="TextAppearance.Quantum.Widget.TabWidget"/>
+    <style name="TextAppearance.DeviceDefault.Widget.TextView" parent="TextAppearance.Quantum.Widget.TextView"/>
+    <style name="TextAppearance.DeviceDefault.Widget.TextView.PopupMenu" parent="TextAppearance.Quantum.Widget.TextView.PopupMenu"/>
+    <style name="TextAppearance.DeviceDefault.Widget.DropDownHint" parent="TextAppearance.Quantum.Widget.DropDownHint"/>
+    <style name="TextAppearance.DeviceDefault.Widget.DropDownItem" parent="TextAppearance.Quantum.Widget.DropDownItem"/>
+    <style name="TextAppearance.DeviceDefault.Widget.TextView.SpinnerItem" parent="TextAppearance.Quantum.Widget.TextView.SpinnerItem"/>
+    <style name="TextAppearance.DeviceDefault.Widget.EditText" parent="TextAppearance.Quantum.Widget.EditText"/>
+    <style name="TextAppearance.DeviceDefault.Widget.PopupMenu" parent="TextAppearance.Quantum.Widget.PopupMenu"/>
+    <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Large" parent="TextAppearance.Quantum.Widget.PopupMenu.Large"/>
+    <style name="TextAppearance.DeviceDefault.Widget.PopupMenu.Small" parent="TextAppearance.Quantum.Widget.PopupMenu.Small"/>
+    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title" parent="TextAppearance.Quantum.Widget.ActionBar.Title"/>
+    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle" parent="TextAppearance.Quantum.Widget.ActionBar.Subtitle"/>
+    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title" parent="TextAppearance.Quantum.Widget.ActionMode.Title"/>
+    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle" parent="TextAppearance.Quantum.Widget.ActionMode.Subtitle"/>
+    <style name="TextAppearance.DeviceDefault.WindowTitle" parent="TextAppearance.Quantum.WindowTitle"/>
+    <style name="TextAppearance.DeviceDefault.DialogWindowTitle" parent="TextAppearance.Quantum.DialogWindowTitle"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse"/>
+    <!-- @deprecated Action bars are now themed using the inheritable android:theme attribute. -->
+    <style name="TextAppearance.DeviceDefault.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse"/>
+    <style name="TextAppearance.DeviceDefault.Widget.ActionBar.Menu" parent="TextAppearance.Quantum.Widget.ActionBar.Menu"/>
 
     <!-- Preference Styles -->
-    <style name="Preference.DeviceDefault" parent="Preference.Holo">
-
-    </style>
-    <style name="Preference.DeviceDefault.Category" parent="Preference.Holo.Category">
-
-    </style>
-    <style name="Preference.DeviceDefault.CheckBoxPreference" parent="Preference.Holo.CheckBoxPreference">
-
-    </style>
-    <style name="Preference.DeviceDefault.DialogPreference" parent="Preference.Holo.DialogPreference">
-
-    </style>
-    <style name="Preference.DeviceDefault.DialogPreference.EditTextPreference" parent="Preference.Holo.DialogPreference.EditTextPreference">
-
-    </style>
-    <style name="Preference.DeviceDefault.DialogPreference.YesNoPreference" parent="Preference.Holo.DialogPreference.YesNoPreference">
-
-    </style>
-    <style name="Preference.DeviceDefault.Information" parent="Preference.Holo.Information">
-
-    </style>
-    <style name="Preference.DeviceDefault.PreferenceScreen" parent="Preference.Holo.PreferenceScreen">
-
-    </style>
-    <style name="Preference.DeviceDefault.RingtonePreference" parent="Preference.Holo.RingtonePreference">
-
-    </style>
-    <style name="Preference.DeviceDefault.SwitchPreference" parent="Preference.Holo.SwitchPreference">
-
-    </style>
-
+    <style name="Preference.DeviceDefault" parent="Preference.Quantum"/>
+    <style name="Preference.DeviceDefault.Category" parent="Preference.Quantum.Category"/>
+    <style name="Preference.DeviceDefault.CheckBoxPreference" parent="Preference.Quantum.CheckBoxPreference"/>
+    <style name="Preference.DeviceDefault.DialogPreference" parent="Preference.Quantum.DialogPreference"/>
+    <style name="Preference.DeviceDefault.DialogPreference.EditTextPreference" parent="Preference.Quantum.DialogPreference.EditTextPreference"/>
+    <style name="Preference.DeviceDefault.DialogPreference.YesNoPreference" parent="Preference.Quantum.DialogPreference.YesNoPreference"/>
+    <style name="Preference.DeviceDefault.Information" parent="Preference.Quantum.Information"/>
+    <style name="Preference.DeviceDefault.PreferenceScreen" parent="Preference.Quantum.PreferenceScreen"/>
+    <style name="Preference.DeviceDefault.RingtonePreference" parent="Preference.Quantum.RingtonePreference"/>
+    <style name="Preference.DeviceDefault.SwitchPreference" parent="Preference.Quantum.SwitchPreference"/>
 
     <!-- AlertDialog Styles -->
-    <style name="AlertDialog.DeviceDefault" parent="AlertDialog.Holo">
-
-    </style>
-    <style name="AlertDialog.DeviceDefault.Light" parent="AlertDialog.Holo.Light" >
-
-    </style>
+    <style name="AlertDialog.DeviceDefault" parent="AlertDialog.Quantum"/>
+    <style name="AlertDialog.DeviceDefault.Light" parent="AlertDialog.Quantum.Light"/>
 
     <!-- Animation Styles -->
-    <style name="Animation.DeviceDefault.Activity" parent="Animation.Holo.Activity">
-
-    </style>
-    <style name="Animation.DeviceDefault.Dialog" parent="Animation.Holo.Dialog">
-
-    </style>
-
+    <style name="Animation.DeviceDefault.Activity" parent="Animation.Quantum.Activity"/>
+    <style name="Animation.DeviceDefault.Dialog" parent="Animation.Quantum.Dialog"/>
 
     <!-- DialogWindowTitle Styles -->
-    <style name="DialogWindowTitle.DeviceDefault" parent="DialogWindowTitle.Holo">
-
-    </style>
-    <style name="DialogWindowTitle.DeviceDefault.Light" parent="DialogWindowTitle.Holo.Light">
-
-    </style>
-
+    <style name="DialogWindowTitle.DeviceDefault" parent="DialogWindowTitle.Quantum"/>
+    <style name="DialogWindowTitle.DeviceDefault.Light" parent="DialogWindowTitle.Quantum.Light"/>
 
     <!-- WindowTitle Styles -->
-    <style name="WindowTitle.DeviceDefault" parent="WindowTitle.Holo">
-
-    </style>
-    <style name="WindowTitleBackground.DeviceDefault" parent="WindowTitleBackground.Holo">
-
-    </style>
-
+    <style name="WindowTitle.DeviceDefault" parent="WindowTitle.Quantum"/>
+    <style name="WindowTitleBackground.DeviceDefault" parent="WindowTitleBackground.Quantum"/>
 
     <!-- Other Styles -->
-    <style name="DeviceDefault.ButtonBar" parent="Holo.ButtonBar" >
+    <style name="DeviceDefault.ButtonBar" parent="Widget.Quantum.ButtonBar"/>
+    <style name="DeviceDefault.ButtonBar.AlertDialog" parent="Widget.Quantum.ButtonBar.AlertDialog"/>
+    <style name="DeviceDefault.SegmentedButton" parent="Widget.Quantum.SegmentedButton"/>
 
-    </style>
-    <style name="DeviceDefault.ButtonBar.AlertDialog" parent="Holo.ButtonBar.AlertDialog" >
-
-    </style>
-    <style name="DeviceDefault.SegmentedButton" parent="Holo.SegmentedButton" >
-
-    </style>
-    <style name="DeviceDefault.Light.ButtonBar" parent="Holo.Light.ButtonBar" >
-
-    </style>
-    <style name="DeviceDefault.Light.ButtonBar.AlertDialog" parent="Holo.Light.ButtonBar.AlertDialog" >
-
-    </style>
-    <style name="DeviceDefault.Light.SegmentedButton" parent="Holo.Light.SegmentedButton" >
-
-    </style>
-
-    <style name="Widget.DeviceDefault.MediaRouteButton" parent="Widget.Holo.MediaRouteButton" />
-    <style name="Widget.DeviceDefault.Light.MediaRouteButton" parent="Widget.Holo.Light.MediaRouteButton" />
-
+    <style name="DeviceDefault.Light.ButtonBar" parent="Widget.Quantum.Light.ButtonBar"/>
+    <style name="DeviceDefault.Light.ButtonBar.AlertDialog" parent="Widget.Quantum.Light.ButtonBar.AlertDialog"/>
+    <style name="DeviceDefault.Light.SegmentedButton" parent="Widget.Quantum.Light.SegmentedButton"/>
 </resources>
diff --git a/core/res/res/values/styles_quantum.xml b/core/res/res/values/styles_quantum.xml
new file mode 100644
index 0000000..23172c1
--- /dev/null
+++ b/core/res/res/values/styles_quantum.xml
@@ -0,0 +1,1029 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!--
+===============================================================
+                        PLEASE READ
+===============================================================
+
+The Quantum themes must not be modified in order to pass CTS.
+Many related themes and styles depend on other values defined in this file.
+If you would like to provide custom themes and styles for your device,
+please see styles_device_defaults.xml.
+
+===============================================================
+                        PLEASE READ
+===============================================================
+ -->
+<resources>
+    <!-- Preference styles -->
+    <eat-comment/>
+
+    <style name="Preference.Quantum">
+        <item name="layout">@layout/preference_quantum</item>
+    </style>
+
+    <style name="PreferenceFragment.Quantum">
+        <item name="paddingStart">@dimen/preference_fragment_padding_side</item>
+        <item name="paddingEnd">@dimen/preference_fragment_padding_side</item>
+    </style>
+
+    <style name="Preference.Quantum.Information">
+        <item name="layout">@layout/preference_information_quantum</item>
+        <item name="enabled">false</item>
+        <item name="shouldDisableView">false</item>
+    </style>
+
+    <style name="Preference.Quantum.Category">
+        <item name="layout">@layout/preference_category_quantum</item>
+        <!-- The title should not dim if the category is disabled, instead only the preference children should dim. -->
+        <item name="shouldDisableView">false</item>
+        <item name="selectable">false</item>
+    </style>
+
+    <style name="Preference.Quantum.CheckBoxPreference">
+        <item name="widgetLayout">@layout/preference_widget_checkbox</item>
+    </style>
+
+    <style name="Preference.Quantum.SwitchPreference">
+        <item name="widgetLayout">@layout/preference_widget_switch</item>
+        <item name="switchTextOn">@string/capital_on</item>
+        <item name="switchTextOff">@string/capital_off</item>
+    </style>
+
+    <style name="Preference.Quantum.PreferenceScreen"/>
+
+    <style name="Preference.Quantum.DialogPreference">
+        <item name="positiveButtonText">@string/ok</item>
+        <item name="negativeButtonText">@string/cancel</item>
+    </style>
+
+    <style name="Preference.Quantum.DialogPreference.YesNoPreference">
+        <item name="positiveButtonText">@string/yes</item>
+        <item name="negativeButtonText">@string/no</item>
+    </style>
+
+    <style name="Preference.Quantum.DialogPreference.EditTextPreference">
+        <item name="dialogLayout">@layout/preference_dialog_edittext</item>
+    </style>
+
+    <style name="Preference.Quantum.RingtonePreference">
+        <item name="ringtoneType">ringtone</item>
+        <item name="showSilent">true</item>
+        <item name="showDefault">true</item>
+    </style>
+
+    <!-- Begin Quantum theme styles -->
+
+    <!-- Text styles -->
+
+    <style name="TextAppearance.Quantum">
+        <item name="textColor">?textColorPrimary</item>
+        <item name="textColorHint">?textColorHint</item>
+        <item name="textColorHighlight">?textColorHighlight</item>
+        <item name="textColorLink">?textColorLink</item>
+        <item name="textSize">@dimen/text_size_body_1_quantum</item>
+        <item name="fontFamily">@string/font_family_body_1_quantum</item>
+        <item name="elegantTextHeight">true</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Display4">
+        <item name="textSize">@dimen/text_size_display_4_quantum</item>
+        <item name="fontFamily">@string/font_family_display_4_quantum</item>
+        <item name="textColor">?textColorSecondary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Display3">
+        <item name="textSize">@dimen/text_size_display_3_quantum</item>
+        <item name="fontFamily">@string/font_family_display_3_quantum</item>
+        <item name="textColor">?textColorSecondary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Display2">
+        <item name="textSize">@dimen/text_size_display_2_quantum</item>
+        <item name="fontFamily">@string/font_family_display_2_quantum</item>
+        <item name="textColor">?textColorSecondary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Display1">
+        <item name="textSize">@dimen/text_size_display_1_quantum</item>
+        <item name="fontFamily">@string/font_family_display_1_quantum</item>
+        <item name="textColor">?textColorSecondary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Headline">
+        <item name="textSize">@dimen/text_size_headline_quantum</item>
+        <item name="fontFamily">@string/font_family_headline_quantum</item>
+        <item name="textColor">?textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Title">
+        <item name="textSize">@dimen/text_size_title_quantum</item>
+        <item name="fontFamily">@string/font_family_title_quantum</item>
+        <item name="textColor">?textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Subhead">
+        <item name="textSize">@dimen/text_size_subhead_quantum</item>
+        <item name="fontFamily">@string/font_family_subhead_quantum</item>
+        <item name="textColor">?textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Body2">
+        <item name="textSize">@dimen/text_size_body_2_quantum</item>
+        <item name="fontFamily">@string/font_family_body_2_quantum</item>
+        <item name="textColor">?textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Body1">
+        <item name="textSize">@dimen/text_size_body_1_quantum</item>
+        <item name="fontFamily">@string/font_family_body_1_quantum</item>
+        <item name="textColor">?textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Caption">
+        <item name="textSize">@dimen/text_size_caption_quantum</item>
+        <item name="fontFamily">@string/font_family_caption_quantum</item>
+        <item name="textColor">?textColorSecondary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Menu">
+        <item name="textSize">@dimen/text_size_menu_quantum</item>
+        <item name="fontFamily">@string/font_family_menu_quantum</item>
+        <item name="textColor">?textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Button">
+        <item name="textSize">@dimen/text_size_button_quantum</item>
+        <item name="fontFamily">@string/font_family_button_quantum</item>
+        <item name="textAllCaps">true</item>
+        <item name="textColor">?textColorPrimary</item>
+    </style>
+
+    <!-- Deprecated text styles -->
+
+    <style name="TextAppearance.Quantum.Inverse">
+        <item name="textColor">?attr/textColorPrimaryInverse</item>
+        <item name="textColorHint">?attr/textColorHintInverse</item>
+        <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+        <item name="textColorLink">?attr/textColorLinkInverse</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Large" parent="TextAppearance.Quantum.Headline" />
+
+    <style name="TextAppearance.Quantum.Large.Inverse">
+        <item name="textColor">?attr/textColorPrimaryInverse</item>
+        <item name="textColorHint">?attr/textColorHintInverse</item>
+        <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+        <item name="textColorLink">?attr/textColorLinkInverse</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Medium" parent="TextAppearance.Quantum.Body1" />
+
+    <style name="TextAppearance.Quantum.Medium.Inverse">
+        <item name="textColor">?attr/textColorSecondaryInverse</item>
+        <item name="textColorHint">?attr/textColorHintInverse</item>
+        <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+        <item name="textColorLink">?attr/textColorLinkInverse</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Small" parent="TextAppearance.Quantum.Caption" />
+
+    <style name="TextAppearance.Quantum.Small.Inverse">
+        <item name="textColor">?attr/textColorTertiaryInverse</item>
+        <item name="textColorHint">?attr/textColorHintInverse</item>
+        <item name="textColorHighlight">?attr/textColorHighlightInverse</item>
+        <item name="textColorLink">?attr/textColorLinkInverse</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.SearchResult">
+    </style>
+
+    <style name="TextAppearance.Quantum.SearchResult.Title" parent="TextAppearance.Quantum.Title" />
+    <style name="TextAppearance.Quantum.SearchResult.Subtitle" parent="TextAppearance.Quantum.Subhead" />
+
+    <style name="TextAppearance.Quantum.Widget"/>
+    <style name="TextAppearance.Quantum.Widget.Button" parent="TextAppearance.Quantum.Button" />
+
+    <style name="TextAppearance.Quantum.Widget.EditText">
+        <item name="textColor">?attr/textColorPrimaryInverse</item>
+        <item name="textColorHint">?attr/textColorHintInverse</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.Switch">
+        <item name="textSize">14sp</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.PopupMenu"/>
+
+    <style name="TextAppearance.Quantum.Widget.PopupMenu.Large">
+        <item name="fontFamily">@string/font_family_menu_quantum</item>
+        <item name="textSize">@dimen/text_size_menu_quantum</item>>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.PopupMenu.Small">
+        <item name="fontFamily">@string/font_family_menu_quantum</item>
+        <item name="textSize">@dimen/text_size_menu_quantum</item>>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.DropDownHint">
+        <item name="fontFamily">@string/font_family_menu_quantum</item>
+        <item name="textSize">@dimen/text_size_menu_quantum</item>>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.IconMenu.Item" parent="TextAppearance.Quantum.Small">
+        <item name="textColor">?attr/textColorPrimary</item>
+    </style>
+
+    <!-- This style is for smaller screens; values-xlarge defines a version
+         for larger screens. -->
+    <style name="TextAppearance.Quantum.Widget.TabWidget">
+        <item name="textSize">14sp</item>
+        <item name="textStyle">normal</item>
+        <item name="textColor">@color/tab_indicator_text</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.TextView">
+        <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
+        <item name="textColorHint">?attr/textColorHint</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.TextView.PopupMenu">
+        <item name="fontFamily">@string/font_family_menu_quantum</item>
+        <item name="textSize">@dimen/text_size_menu_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.TextView.SpinnerItem"/>
+
+    <style name="TextAppearance.Quantum.Widget.DropDownItem">
+        <item name="textColor">?attr/textColorPrimaryDisableOnly</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionMode"/>
+
+    <style name="TextAppearance.Quantum.Widget.ActionMode.Title" parent="TextAppearance.Quantum.Medium">
+        <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionMode.Title.Inverse" parent="TextAppearance.Quantum.Medium.Inverse">
+        <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle" parent="TextAppearance.Quantum.Small">
+        <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionMode.Subtitle.Inverse" parent="TextAppearance.Quantum.Small.Inverse">
+        <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
+    </style>
+
+    <!-- Text styles with no light versions -->
+
+    <style name="TextAppearance.Quantum.Widget.ActionBar.Title" parent="TextAppearance.Quantum.Medium">
+        <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionBar.Title.Inverse" parent="TextAppearance.Quantum.Medium.Inverse">
+        <item name="textSize">@dimen/action_bar_title_text_size_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle" parent="TextAppearance.Quantum.Small">
+        <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionBar.Subtitle.Inverse" parent="TextAppearance.Quantum.Small.Inverse">
+        <item name="textSize">@dimen/action_bar_subtitle_text_size_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionBar.Menu" parent="TextAppearance.Quantum.Small">
+        <item name="fontFamily">@string/font_family_menu_quantum</item>
+        <item name="textSize">@dimen/text_size_menu_quantum</item>>
+        <item name="textColor">?attr/actionMenuTextColor</item>
+        <item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.Widget.ActionBar.Menu.Inverse" parent="TextAppearance.Quantum.Small.Inverse">
+        <item name="fontFamily">@string/font_family_menu_quantum</item>
+        <item name="textSize">@dimen/text_size_menu_quantum</item>>
+        <item name="textColor">?attr/actionMenuTextColor</item>
+        <item name="textAllCaps">@bool/config_actionMenuItemAllCaps</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.WindowTitle">
+        <item name="textColor">?attr/textColorPrimary</item>
+        <item name="fontFamily">@string/font_family_headline_quantum</item>
+        <item name="textSize">@dimen/text_size_headline_quantum</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.DialogWindowTitle">
+        <item name="fontFamily">@string/font_family_headline_quantum</item>
+        <item name="textSize">@dimen/text_size_headline_quantum</item>
+        <item name="textColor">?attr/textColorPrimary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.CalendarViewWeekDayView" parent="TextAppearance.Quantum.Small">
+        <item name="textStyle">bold</item>
+        <item name="textColor">#505050</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.TimePicker.TimeLabel" parent="TextAppearance.Quantum">
+        <item name="textSize">@dimen/timepicker_time_label_size</item>
+        <item name="textColor">?attr/textColorSecondary</item>
+    </style>
+
+    <style name="TextAppearance.Quantum.TimePicker.AmPmLabel" parent="TextAppearance.Quantum">
+        <item name="textSize">@dimen/timepicker_ampm_label_size</item>
+        <item name="textAllCaps">true</item>
+        <item name="textColor">?attr/textColorSecondary</item>
+        <item name="textStyle">bold</item>
+    </style>
+
+    <!-- Widget Styles -->
+
+    <style name="Quantum"/>
+    <style name="Quantum.Light"/>
+    <style name="Widget.Quantum" parent="Widget" />
+
+    <!-- Bordered ink button -->
+    <style name="Widget.Quantum.Button" parent="Widget.Button">
+        <item name="background">@drawable/btn_default_quantum</item>
+        <item name="textAppearance">?attr/textAppearanceButton</item>
+        <item name="textColor">?attr/textColorPrimary</item>
+        <item name="minHeight">48dip</item>
+        <item name="minWidth">96dip</item>
+    </style>
+
+    <!-- Small bordered ink button -->
+    <style name="Widget.Quantum.Button.Small">
+        <item name="minHeight">48dip</item>
+        <item name="minWidth">48dip</item>
+    </style>
+
+    <!-- Bordered paper button -->
+    <style name="Widget.Quantum.Button.Paper">
+        <!-- TODO: Specify pressed state animation. -->
+    </style>
+
+    <!-- Bordered paper button with color -->
+    <style name="Widget.Quantum.Button.Paper.Color">
+        <item name="background">@drawable/btn_color_quantum</item>
+    </style>
+
+    <!-- Borderless ink button -->
+    <style name="Widget.Quantum.Button.Borderless">
+        <item name="background">@drawable/btn_borderless_quantum</item>
+    </style>
+
+    <!-- Small borderless ink button -->
+    <style name="Widget.Quantum.Button.Borderless.Small">
+        <item name="minHeight">48dip</item>
+        <item name="minWidth">48dip</item>
+    </style>
+
+    <!-- Borderless paper button -->
+    <style name="Widget.Quantum.Button.Borderless.Paper">
+        <!-- TODO: Specify pressed state animation. -->
+    </style>
+
+    <style name="Widget.Quantum.Button.Inset">
+        <item name="background">@drawable/button_inset</item>
+    </style>
+
+    <style name="Widget.Quantum.Button.Toggle">
+        <item name="background">@drawable/btn_toggle_holo_dark</item>
+        <item name="textOn">@string/capital_on</item>
+        <item name="textOff">@string/capital_off</item>
+        <item name="textAppearance">?attr/textAppearanceSmall</item>
+        <item name="minHeight">48dip</item>
+    </style>
+
+    <style name="Widget.Quantum.ButtonBar">
+        <item name="background">@null</item>
+    </style>
+
+    <style name="Widget.Quantum.ButtonBar.AlertDialog">
+        <item name="background">@null</item>
+    </style>
+
+    <style name="Widget.Quantum.SegmentedButton" parent="SegmentedButton">
+        <item name="background">@drawable/btn_group_holo_dark</item>
+    </style>
+
+    <style name="Widget.Quantum.StackView">
+        <item name="resOutColor">@color/holo_blue_light</item>
+        <item name="clickColor">@color/holo_blue_light</item>
+    </style>
+
+    <style name="Widget.Quantum.TextView" parent="Widget.TextView"/>
+
+    <style name="Widget.Quantum.TextView.ListSeparator" parent="Widget.TextView.ListSeparator">
+        <item name="background">@drawable/list_section_divider_quantum</item>
+        <item name="textAllCaps">true</item>
+    </style>
+
+    <style name="Widget.Quantum.TextView.SpinnerItem" parent="Widget.TextView.SpinnerItem">
+        <item name="textAppearance">@style/TextAppearance.Quantum.Widget.TextView.SpinnerItem</item>
+        <item name="paddingStart">8dp</item>
+        <item name="paddingEnd">8dp</item>
+    </style>
+
+    <style name="Widget.Quantum.CheckedTextView" parent="Widget.CheckedTextView"/>
+    <style name="Widget.Quantum.TextSelectHandle" parent="Widget.TextSelectHandle"/>
+    <style name="Widget.Quantum.TextSuggestionsPopupWindow" parent="Widget.TextSuggestionsPopupWindow"/>
+    <style name="Widget.Quantum.AbsListView" parent="Widget.AbsListView"/>
+
+    <style name="Widget.Quantum.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
+        <item name="dropDownSelector">@drawable/list_selector_quantum</item>
+        <item name="popupBackground">?attr/colorBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.CompoundButton" parent="Widget.CompoundButton"/>
+
+    <style name="Widget.Quantum.CompoundButton.CheckBox" parent="Widget.CompoundButton.CheckBox">
+        <item name="background">?attr/selectableItemBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.CompoundButton.RadioButton" parent="Widget.CompoundButton.RadioButton">
+        <item name="background">?attr/selectableItemBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.CompoundButton.Star" parent="Widget.CompoundButton.Star">
+        <item name="button">@drawable/btn_star_quantum</item>
+        <item name="background">?attr/selectableItemBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.CompoundButton.Switch">
+        <item name="track">@drawable/switch_track_quantum</item>
+        <item name="thumb">@drawable/switch_inner_quantum</item>
+        <item name="switchTextAppearance">@style/TextAppearance.Quantum.Widget.Switch</item>
+        <item name="textOn"></item>
+        <item name="textOff"></item>
+        <item name="thumbTextPadding">12dip</item>
+        <item name="switchMinWidth">72dip</item>
+        <item name="switchPadding">16dip</item>
+        <item name="background">?attr/selectableItemBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.EditText" parent="Widget.EditText"/>
+
+    <style name="Widget.Quantum.ExpandableListView" parent="Widget.Quantum.ListView">
+        <item name="groupIndicator">@drawable/expander_group_quantum</item>
+        <item name="indicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
+        <item name="indicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
+        <item name="childDivider">?attr/listDivider</item>
+    </style>
+
+    <style name="Widget.Quantum.ExpandableListView.White"/>
+    <style name="Widget.Quantum.FragmentBreadCrumbs" parent="Widget.FragmentBreadCrumbs"/>
+    <style name="Widget.Quantum.Gallery" parent="Widget.Gallery"/>
+    <style name="Widget.Quantum.GestureOverlayView" parent="Widget.GestureOverlayView"/>
+    <style name="Widget.Quantum.GridView" parent="Widget.GridView"/>
+
+    <style name="Widget.Quantum.CalendarView" parent="Widget.CalendarView">
+        <item name="selectedWeekBackgroundColor">#330099FF</item>
+        <item name="focusedMonthDateColor">#FFFFFFFF</item>
+        <item name="unfocusedMonthDateColor">#66FFFFFF</item>
+        <item name="weekNumberColor">#33FFFFFF</item>
+        <item name="weekSeparatorLineColor">#19FFFFFF</item>
+        <item name="selectedDateVerticalBar">@drawable/day_picker_week_view_dayline_holo</item>
+        <item name="weekDayTextAppearance">@style/TextAppearance.Quantum.CalendarViewWeekDayView</item>
+    </style>
+
+    <style name="Widget.Quantum.ImageButton" parent="Widget.ImageButton">
+        <item name="background">@drawable/btn_default_quantum</item>
+    </style>
+
+    <style name="Widget.Quantum.NumberPicker" parent="Widget.NumberPicker">
+        <item name="internalLayout">@layout/number_picker_with_selector_wheel</item>
+        <item name="solidColor">@color/transparent</item>
+        <item name="selectionDivider">@drawable/numberpicker_selection_divider</item>
+        <item name="selectionDividerHeight">2dip</item>
+        <item name="selectionDividersDistance">48dip</item>
+        <item name="internalMinWidth">64dip</item>
+        <item name="internalMaxHeight">180dip</item>
+        <item name="virtualButtonPressedDrawable">?attr/selectableItemBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.TimePicker" parent="Widget.TimePicker">
+        <item name="legacyLayout">@layout/time_picker_legacy_holo</item>
+        <item name="internalLayout">@layout/time_picker_holo</item>
+        <item name="disabledColor">@color/bright_foreground_disabled_quantum_dark</item>
+        <item name="headerSelectedTextColor">?attr/colorControlActivated</item>
+        <item name="headerUnselectedTextColor">?attr/textColorPrimary</item>
+        <item name="headerBackgroundColor">?attr/colorBackground</item>
+        <item name="numbersTextColor">?attr/textColorSecondary</item>
+        <item name="numbersBackgroundColor">?attr/colorControlNormal</item>
+        <item name="amPmTextColor">?attr/textColorSecondary</item>
+        <item name="amPmUnselectedBackgroundColor">?attr/colorControlNormal</item>
+        <item name="amPmSelectedBackgroundColor">?attr/colorControlActivated</item>
+        <item name="numbersSelectorColor">?attr/colorControlActivated</item>
+    </style>
+
+    <style name="Widget.Quantum.DatePicker" parent="Widget.DatePicker">
+        <item name="internalLayout">@layout/date_picker_holo</item>
+        <item name="calendarViewShown">true</item>
+    </style>
+
+    <style name="Widget.Quantum.ActivityChooserView" parent="Widget.ActivityChooserView"/>
+    <style name="Widget.Quantum.ImageWell" parent="Widget.ImageWell"/>
+
+    <style name="Widget.Quantum.ListView" parent="Widget.ListView">
+        <item name="divider">?attr/listDivider</item>
+        <item name="listSelector">?attr/listChoiceBackgroundIndicator</item>
+    </style>
+
+    <style name="Widget.Quantum.ListView.DropDown"/>
+    <style name="Widget.Quantum.ListView.White"/>
+
+    <style name="Widget.Quantum.PopupWindow" parent="Widget.PopupWindow"/>
+
+    <style name="Widget.Quantum.PopupWindow.ActionMode">
+        <item name="popupBackground">@color/black</item>
+        <item name="popupAnimationStyle">@style/Animation.PopupWindow.ActionMode</item>
+    </style>
+
+    <style name="Widget.Quantum.ProgressBar" parent="Widget.ProgressBar">
+        <item name="indeterminateDrawable">@drawable/progress_medium_holo</item>
+    </style>
+
+    <style name="Widget.Quantum.ProgressBar.Inverse"/>
+
+    <style name="Widget.Quantum.ProgressBar.Horizontal" parent="Widget.ProgressBar.Horizontal">
+        <item name="progressDrawable">@drawable/progress_horizontal_quantum</item>
+        <item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal_holo</item>
+        <item name="minHeight">16dip</item>
+        <item name="maxHeight">16dip</item>
+    </style>
+
+    <style name="Widget.Quantum.ProgressBar.Small" parent="Widget.ProgressBar.Small">
+        <item name="indeterminateDrawable">@drawable/progress_small_holo</item>
+    </style>
+
+    <style name="Widget.Quantum.ProgressBar.Small.Inverse"/>
+    <style name="Widget.Quantum.ProgressBar.Small.Title"/>
+
+    <style name="Widget.Quantum.ProgressBar.Large" parent="Widget.ProgressBar.Large">
+        <item name="indeterminateDrawable">@drawable/progress_large_holo</item>
+    </style>
+
+    <style name="Widget.Quantum.ProgressBar.Large.Inverse"/>
+
+    <style name="Widget.Quantum.SeekBar">
+        <item name="indeterminateOnly">false</item>
+        <item name="progressDrawable">@drawable/scrubber_progress_horizontal_quantum</item>
+        <item name="indeterminateDrawable">@drawable/scrubber_progress_horizontal_quantum</item>
+        <item name="minHeight">13dip</item>
+        <item name="maxHeight">13dip</item>
+        <item name="thumb">@drawable/scrubber_control_selector_quantum</item>
+        <item name="thumbOffset">16dip</item>
+        <item name="focusable">true</item>
+        <item name="paddingStart">16dip</item>
+        <item name="paddingEnd">16dip</item>
+        <item name="mirrorForRtl">true</item>
+        <item name="background">?attr/selectableItemBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.RatingBar" parent="Widget.RatingBar">
+        <item name="progressDrawable">@drawable/ratingbar_full_quantum</item>
+        <item name="indeterminateDrawable">@drawable/ratingbar_full_quantum</item>
+    </style>
+
+    <style name="Widget.Quantum.RatingBar.Indicator" parent="Widget.RatingBar.Indicator">
+        <item name="progressDrawable">@drawable/ratingbar_holo_dark</item>
+        <item name="indeterminateDrawable">@drawable/ratingbar_holo_dark</item>
+        <item name="minHeight">35dip</item>
+        <item name="maxHeight">35dip</item>
+    </style>
+
+    <style name="Widget.Quantum.RatingBar.Small" parent="Widget.RatingBar.Small">
+        <item name="progressDrawable">@drawable/ratingbar_small_holo_dark</item>
+        <item name="indeterminateDrawable">@drawable/ratingbar_small_holo_dark</item>
+        <item name="minHeight">16dip</item>
+        <item name="maxHeight">16dip</item>
+    </style>
+
+    <style name="Widget.Quantum.ScrollView" parent="Widget.ScrollView"/>
+    <style name="Widget.Quantum.HorizontalScrollView" parent="Widget.HorizontalScrollView"/>
+
+    <style name="Widget.Quantum.Spinner" parent="Widget.Spinner.DropDown">
+        <item name="background">@drawable/spinner_background_quantum</item>
+        <item name="dropDownSelector">@drawable/list_selector_quantum</item>
+        <item name="popupBackground">?attr/colorBackground</item>
+        <item name="dropDownVerticalOffset">0dip</item>
+        <item name="dropDownHorizontalOffset">0dip</item>
+        <item name="dropDownWidth">wrap_content</item>
+        <item name="popupPromptView">@layout/simple_dropdown_hint</item>
+        <item name="gravity">start|center_vertical</item>
+        <item name="disableChildrenWhenDisabled">true</item>
+    </style>
+
+    <style name="Widget.Quantum.Spinner.DropDown"/>
+
+    <style name="Widget.Quantum.Spinner.DropDown.ActionBar">
+        <item name="background">@drawable/spinner_background_quantum</item>
+    </style>
+
+    <style name="Widget.Quantum.TabWidget" parent="Widget.TabWidget">
+        <item name="tabStripLeft">@null</item>
+        <item name="tabStripRight">@null</item>
+        <item name="tabStripEnabled">false</item>
+        <item name="divider">?attr/dividerVertical</item>
+        <item name="showDividers">middle</item>
+        <item name="dividerPadding">8dip</item>
+        <item name="measureWithLargestChild">true</item>
+        <item name="tabLayout">@layout/tab_indicator_quantum</item>
+    </style>
+
+    <style name="Widget.Quantum.Tab" parent="Widget.Quantum.ActionBar.TabView">
+        <item name="background">@drawable/tab_indicator_quantum</item>
+        <item name="layout_width">0dip</item>
+        <item name="layout_weight">1</item>
+        <item name="minWidth">80dip</item>
+    </style>
+
+    <style name="Widget.Quantum.TabText" parent="Widget.Quantum.ActionBar.TabText">
+        <item name="maxWidth">180dip</item>
+    </style>
+
+    <style name="Widget.Quantum.WebTextView" parent="Widget.WebTextView"/>
+
+    <style name="Widget.Quantum.WebView" parent="Widget.WebView"/>
+
+    <style name="Widget.Quantum.DropDownItem" parent="Widget.DropDownItem">
+        <item name="textAppearance">@style/TextAppearance.Quantum.Widget.DropDownItem</item>
+        <item name="paddingStart">8dp</item>
+        <item name="paddingEnd">8dp</item>
+    </style>
+
+    <style name="Widget.Quantum.DropDownItem.Spinner"/>
+
+    <style name="Widget.Quantum.KeyboardView" parent="Widget.KeyboardView"/>
+    <style name="Widget.Quantum.QuickContactBadge.WindowSmall" parent="Widget.QuickContactBadge.WindowSmall"/>
+    <style name="Widget.Quantum.QuickContactBadge.WindowMedium" parent="Widget.QuickContactBadge.WindowMedium"/>
+    <style name="Widget.Quantum.QuickContactBadge.WindowLarge" parent="Widget.QuickContactBadge.WindowLarge"/>
+    <style name="Widget.Quantum.QuickContactBadgeSmall.WindowSmall" parent="Widget.QuickContactBadgeSmall.WindowSmall"/>
+    <style name="Widget.Quantum.QuickContactBadgeSmall.WindowMedium" parent="Widget.QuickContactBadgeSmall.WindowMedium"/>
+    <style name="Widget.Quantum.QuickContactBadgeSmall.WindowLarge" parent="Widget.QuickContactBadgeSmall.WindowLarge"/>
+
+    <style name="Widget.Quantum.ListPopupWindow" parent="Widget.ListPopupWindow">
+        <item name="dropDownSelector">@drawable/list_selector_quantum</item>
+        <item name="popupBackground">?attr/colorBackground</item>
+        <item name="dropDownVerticalOffset">0dip</item>
+        <item name="dropDownHorizontalOffset">0dip</item>
+        <item name="dropDownWidth">wrap_content</item>
+    </style>
+
+    <style name="Widget.Quantum.PopupMenu" parent="Widget.Quantum.ListPopupWindow"/>
+
+    <style name="Widget.Quantum.ActionButton" parent="Widget.ActionButton">
+        <item name="minWidth">@dimen/action_button_min_width_quantum</item>
+        <item name="minHeight">@dimen/action_button_min_height_quantum</item>
+        <item name="gravity">center</item>
+        <item name="scaleType">center</item>
+        <item name="maxLines">2</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionButton.CloseMode">
+        <item name="background">@drawable/btn_cab_done_quantum</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionButton.Overflow">
+        <item name="src">@drawable/ic_menu_moreoverflow_quantum</item>
+        <item name="background">?attr/actionBarItemBackground</item>
+        <item name="contentDescription">@string/action_menu_overflow_description</item>
+        <item name="minWidth">@dimen/action_overflow_min_width_quantum</item>
+        <item name="minHeight">@dimen/action_button_min_height_quantum</item>
+        <item name="scaleType">center</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionBar.TabView" parent="Widget.ActionBar.TabView">
+        <item name="background">@drawable/tab_indicator_quantum</item>
+        <item name="paddingStart">16dip</item>
+        <item name="paddingEnd">16dip</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionBar.TabBar" parent="Widget.ActionBar.TabBar">
+        <item name="divider">?attr/actionBarDivider</item>
+        <item name="showDividers">middle</item>
+        <item name="dividerPadding">12dip</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionBar.TabText" parent="Widget.ActionBar.TabText">
+        <item name="textAppearance">@style/TextAppearance.Quantum.Medium</item>
+        <item name="textColor">?attr/textColorPrimary</item>
+        <item name="textSize">12sp</item>
+        <item name="textStyle">bold</item>
+        <item name="textAllCaps">true</item>
+        <item name="ellipsize">marquee</item>
+        <item name="maxLines">2</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionBar" parent="Widget.ActionBar">
+        <item name="background">@null</item>
+        <item name="backgroundStacked">@null</item>
+        <item name="backgroundSplit">@null</item>
+        <item name="displayOptions">useLogo|showHome|showTitle</item>
+        <item name="divider">?attr/dividerVertical</item>
+        <item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Title</item>
+        <item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Subtitle</item>
+        <item name="progressBarStyle">@style/Widget.Quantum.ProgressBar.Horizontal</item>
+        <item name="indeterminateProgressStyle">@style/Widget.Quantum.ProgressBar</item>
+        <item name="progressBarPadding">32dip</item>
+        <item name="itemPadding">8dip</item>
+        <item name="homeLayout">@layout/action_bar_home_quantum</item>
+        <item name="gravity">center_vertical</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionBar.Solid">
+        <item name="background">?attr/colorPrimary</item>
+        <item name="backgroundStacked">?attr/colorPrimary</item>
+        <item name="backgroundSplit">?attr/colorPrimary</item>
+    </style>
+
+    <style name="Widget.Quantum.ActionMode" parent="Widget.ActionMode">
+        <item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionMode.Title</item>
+        <item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionMode.Subtitle</item>
+    </style>
+
+    <style name="Widget.Quantum.FastScroll" parent="Widget.FastScroll">
+        <item name="thumbMinWidth">0dp</item>
+        <item name="thumbMinHeight">0dp</item>
+    </style>
+
+    <style name="Widget.Quantum.PreferenceFrameLayout">
+        <item name="borderTop">0dip</item>
+        <item name="borderBottom">@dimen/preference_fragment_padding_bottom</item>
+        <item name="borderLeft">?attr/preferenceFragmentPaddingSide</item>
+        <item name="borderRight">?attr/preferenceFragmentPaddingSide</item>
+    </style>
+
+    <style name="Widget.Quantum.MediaRouteButton">
+        <item name="background">?attr/selectableItemBackground</item>
+        <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_quantum</item>
+        <item name="minWidth">56dp</item>
+        <item name="minHeight">48dp</item>
+        <item name="focusable">true</item>
+        <item name="contentDescription">@string/media_route_button_content_description</item>
+    </style>
+
+    <!-- Light widget styles -->
+
+    <style name="Widget.Quantum.Light" parent="Widget.Quantum"/>
+    <style name="Widget.Quantum.Light.Button" parent="Widget.Quantum.Button"/>
+    <style name="Widget.Quantum.Light.Button.Small" parent="Widget.Quantum.Button.Small"/>
+    <style name="Widget.Quantum.Light.Button.Paper" parent="Widget.Quantum.Button.Paper"/>
+    <style name="Widget.Quantum.Light.Button.Paper.Color" parent="Widget.Quantum.Button.Paper.Color"/>
+    <style name="Widget.Quantum.Light.Button.Borderless" parent="Widget.Quantum.Button.Borderless"/>
+    <style name="Widget.Quantum.Light.Button.Borderless.Small" parent="Widget.Quantum.Button.Borderless.Small"/>
+    <style name="Widget.Quantum.Light.Button.Borderless.Paper" parent="Widget.Quantum.Button.Borderless.Paper"/>
+    <style name="Widget.Quantum.Light.Button.Inset" parent="Widget.Quantum.Button.Inset"/>
+
+    <style name="Widget.Quantum.Light.Button.Toggle">
+        <item name="background">@drawable/btn_toggle_holo_light</item>
+        <item name="textOn">@string/capital_on</item>
+        <item name="textOff">@string/capital_off</item>
+        <item name="textAppearance">?attr/textAppearanceSmall</item>
+        <item name="minHeight">48dip</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ButtonBar" parent="Widget.Quantum.ButtonBar"/>
+    <style name="Widget.Quantum.Light.ButtonBar.AlertDialog" parent="Widget.Quantum.ButtonBar.AlertDialog"/>
+
+    <style name="Widget.Quantum.Light.SegmentedButton" parent="Widget.Quantum.SegmentedButton">
+        <item name="background">@drawable/btn_group_holo_light</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.StackView" parent="Widget.Quantum.StackView"/>
+    <style name="Widget.Quantum.Light.TextView" parent="Widget.Quantum.TextView"/>
+    <style name="Widget.Quantum.Light.TextView.ListSeparator" parent="Widget.Quantum.TextView.ListSeparator"/>
+    <style name="Widget.Quantum.Light.TextView.SpinnerItem" parent="Widget.Quantum.TextView.SpinnerItem"/>
+    <style name="Widget.Quantum.Light.CheckedTextView" parent="Widget.Quantum.CheckedTextView"/>
+    <style name="Widget.Quantum.Light.TextSelectHandle" parent="Widget.Quantum.TextSelectHandle"/>
+    <style name="Widget.Quantum.Light.TextSuggestionsPopupWindow" parent="Widget.Quantum.TextSuggestionsPopupWindow"/>
+    <style name="Widget.Quantum.Light.AbsListView" parent="Widget.Quantum.AbsListView"/>
+
+    <style name="Widget.Quantum.Light.AutoCompleteTextView" parent="Widget.AutoCompleteTextView">
+        <item name="dropDownSelector">@drawable/list_selector_quantum</item>
+        <item name="popupBackground">?attr/colorBackground</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.CompoundButton" parent="Widget.Quantum.CompoundButton"/>
+    <style name="Widget.Quantum.Light.CompoundButton.CheckBox" parent="Widget.Quantum.CompoundButton.CheckBox"/>
+    <style name="Widget.Quantum.Light.CompoundButton.RadioButton" parent="Widget.Quantum.CompoundButton.RadioButton"/>
+    <style name="Widget.Quantum.Light.CompoundButton.Star" parent="Widget.Quantum.CompoundButton.Star"/>
+
+    <style name="Widget.Quantum.Light.CompoundButton.Switch" parent="Widget.Quantum.CompoundButton.Switch">
+        <item name="switchTextAppearance">@style/TextAppearance.Quantum.Widget.Switch</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ListView.DropDown" parent="Widget.Quantum.ListView.DropDown"/>
+    <style name="Widget.Quantum.Light.EditText" parent="Widget.Quantum.EditText"/>
+    <style name="Widget.Quantum.Light.ExpandableListView" parent="Widget.Quantum.ExpandableListView"/>
+    <style name="Widget.Quantum.Light.ExpandableListView.White" parent="Widget.Quantum.ExpandableListView.White"/>
+    <style name="Widget.Quantum.Light.FragmentBreadCrumbs" parent="Widget.Quantum.FragmentBreadCrumbs"/>
+    <style name="Widget.Quantum.Light.Gallery" parent="Widget.Quantum.Gallery"/>
+    <style name="Widget.Quantum.Light.GestureOverlayView" parent="Widget.Quantum.GestureOverlayView"/>
+    <style name="Widget.Quantum.Light.GridView" parent="Widget.Quantum.GridView"/>
+    <style name="Widget.Quantum.Light.ImageButton" parent="Widget.Quantum.ImageButton"/>
+
+    <style name="Widget.Quantum.Light.CalendarView" parent="Widget.CalendarView">
+        <item name="selectedWeekBackgroundColor">#330066ff</item>
+        <item name="focusedMonthDateColor">#FF000000</item>
+        <item name="unfocusedMonthDateColor">#7F08002B</item>
+        <item name="weekNumberColor">#7F080021</item>
+        <item name="weekSeparatorLineColor">#7F08002A</item>
+        <item name="weekDayTextAppearance">@style/TextAppearance.Quantum.CalendarViewWeekDayView</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.NumberPicker" parent="Widget.Quantum.NumberPicker"/>
+
+    <style name="Widget.Quantum.Light.TimePicker" parent="Widget.Quantum.TimePicker">
+        <item name="legacyLayout">@layout/time_picker_legacy_holo</item>
+        <item name="internalLayout">@layout/time_picker_holo</item>
+        <item name="disabledColor">@color/bright_foreground_disabled_quantum_light</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.DatePicker" parent="Widget.Quantum.DatePicker"/>
+
+    <style name="Widget.Quantum.Light.ActivityChooserView" parent="Widget.Quantum.ActivityChooserView">
+        <item name="background">@drawable/ab_share_pack_quantum</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ImageWell" parent="Widget.Quantum.ImageWell"/>
+    <style name="Widget.Quantum.Light.ListView" parent="Widget.Quantum.ListView"/>
+    <style name="Widget.Quantum.Light.ListView.White" parent="Widget.Quantum.ListView.White"/>
+    <style name="Widget.Quantum.Light.PopupWindow" parent="Widget.Quantum.PopupWindow"/>
+
+    <style name="Widget.Quantum.Light.PopupWindow.ActionMode">
+        <item name="popupBackground">@color/white</item>
+        <item name="popupAnimationStyle">@style/Animation.PopupWindow.ActionMode</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ProgressBar" parent="Widget.Quantum.ProgressBar"/>
+    <style name="Widget.Quantum.Light.ProgressBar.Horizontal" parent="Widget.Quantum.ProgressBar.Horizontal"/>
+    <style name="Widget.Quantum.Light.ProgressBar.Small" parent="Widget.Quantum.ProgressBar.Small"/>
+    <style name="Widget.Quantum.Light.ProgressBar.Small.Title" parent="Widget.Quantum.ProgressBar.Small.Title"/>
+    <style name="Widget.Quantum.Light.ProgressBar.Large" parent="Widget.Quantum.ProgressBar.Large"/>
+    <style name="Widget.Quantum.Light.ProgressBar.Inverse" parent="Widget.Quantum.ProgressBar.Inverse"/>
+    <style name="Widget.Quantum.Light.ProgressBar.Small.Inverse" parent="Widget.Quantum.ProgressBar.Small.Inverse"/>
+    <style name="Widget.Quantum.Light.ProgressBar.Large.Inverse" parent="Widget.Quantum.ProgressBar.Large.Inverse"/>
+    <style name="Widget.Quantum.Light.SeekBar" parent="Widget.Quantum.SeekBar"/>
+
+    <style name="Widget.Quantum.Light.RatingBar" parent="Widget.Quantum.RatingBar" />
+
+    <style name="Widget.Quantum.Light.RatingBar.Indicator" parent="Widget.RatingBar.Indicator">
+        <item name="progressDrawable">@drawable/ratingbar_holo_light</item>
+        <item name="indeterminateDrawable">@drawable/ratingbar_holo_light</item>
+        <item name="minHeight">35dip</item>
+        <item name="maxHeight">35dip</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.RatingBar.Small" parent="Widget.RatingBar.Small">
+        <item name="progressDrawable">@drawable/ratingbar_small_holo_light</item>
+        <item name="indeterminateDrawable">@drawable/ratingbar_small_holo_light</item>
+        <item name="minHeight">16dip</item>
+        <item name="maxHeight">16dip</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ScrollView" parent="Widget.Quantum.ScrollView"/>
+    <style name="Widget.Quantum.Light.HorizontalScrollView" parent="Widget.Quantum.HorizontalScrollView"/>
+
+    <style name="Widget.Quantum.Light.Spinner" parent="Widget.Quantum.Spinner">
+        <item name="background">@drawable/spinner_background_quantum</item>
+        <item name="dropDownSelector">@drawable/list_selector_quantum</item>
+        <item name="popupBackground">?attr/colorBackground</item>
+        <item name="dropDownVerticalOffset">0dip</item>
+        <item name="dropDownHorizontalOffset">0dip</item>
+        <item name="dropDownWidth">wrap_content</item>
+        <item name="popupPromptView">@layout/simple_dropdown_hint</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.Spinner.DropDown" parent="Widget.Quantum.Spinner.DropDown"/>
+    <style name="Widget.Quantum.Light.Spinner.DropDown.ActionBar" parent="Widget.Quantum.Spinner.DropDown.ActionBar"/>
+    <style name="Widget.Quantum.Light.TabWidget" parent="Widget.Quantum.TabWidget"/>
+    <style name="Widget.Quantum.Light.WebTextView" parent="Widget.Quantum.WebTextView"/>
+    <style name="Widget.Quantum.Light.WebView" parent="Widget.Quantum.WebView"/>
+    <style name="Widget.Quantum.Light.DropDownItem" parent="Widget.Quantum.DropDownItem"/>
+    <style name="Widget.Quantum.Light.DropDownItem.Spinner" parent="Widget.Quantum.DropDownItem.Spinner"/>
+    <style name="Widget.Quantum.Light.KeyboardView" parent="Widget.Quantum.KeyboardView"/>
+    <style name="Widget.Quantum.Light.QuickContactBadge.WindowSmall" parent="Widget.Quantum.QuickContactBadge.WindowSmall"/>
+    <style name="Widget.Quantum.Light.QuickContactBadge.WindowMedium" parent="Widget.Quantum.QuickContactBadge.WindowMedium"/>
+    <style name="Widget.Quantum.Light.QuickContactBadge.WindowLarge" parent="Widget.Quantum.QuickContactBadge.WindowLarge"/>
+    <style name="Widget.Quantum.Light.QuickContactBadgeSmall.WindowSmall" parent="Widget.Quantum.QuickContactBadgeSmall.WindowSmall"/>
+    <style name="Widget.Quantum.Light.QuickContactBadgeSmall.WindowMedium" parent="Widget.Quantum.QuickContactBadgeSmall.WindowMedium"/>
+    <style name="Widget.Quantum.Light.QuickContactBadgeSmall.WindowLarge" parent="Widget.Quantum.QuickContactBadgeSmall.WindowLarge"/>
+
+    <style name="Widget.Quantum.Light.ListPopupWindow" parent="Widget.ListPopupWindow">
+        <item name="dropDownSelector">@drawable/list_selector_quantum</item>
+        <item name="popupBackground">?attr/colorBackground</item>
+        <item name="dropDownVerticalOffset">0dip</item>
+        <item name="dropDownHorizontalOffset">0dip</item>
+        <item name="dropDownWidth">wrap_content</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.PopupMenu" parent="Widget.Quantum.Light.ListPopupWindow"/>
+
+    <style name="Widget.Quantum.Light.ActionButton" parent="Widget.Quantum.ActionButton"/>
+    <style name="Widget.Quantum.Light.ActionButton.Overflow" parent="Widget.Quantum.ActionButton.Overflow"/>
+    <style name="Widget.Quantum.Light.Tab" parent="Widget.Quantum.Tab"/>
+    <style name="Widget.Quantum.Light.ActionBar.TabView" parent="Widget.Quantum.ActionBar.TabView"/>
+    <style name="Widget.Quantum.Light.ActionBar.TabBar" parent="Widget.Quantum.ActionBar.TabBar"/>
+    <style name="Widget.Quantum.Light.ActionBar.TabText" parent="Widget.Quantum.ActionBar.TabText"/>
+
+    <style name="Widget.Quantum.Light.ActionMode" parent="Widget.Quantum.ActionMode">
+        <item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionMode.Title</item>
+        <item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionMode.Subtitle</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ActionButton.CloseMode">
+        <item name="background">@drawable/btn_cab_done_quantum</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ActionBar" parent="Widget.Quantum.ActionBar">
+        <item name="titleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Title</item>
+        <item name="subtitleTextStyle">@style/TextAppearance.Quantum.Widget.ActionBar.Subtitle</item>
+        <item name="background">@null</item>
+        <item name="backgroundStacked">@null</item>
+        <item name="backgroundSplit">@null</item>
+        <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum</item>
+        <item name="progressBarStyle">@style/Widget.Quantum.Light.ProgressBar.Horizontal</item>
+        <item name="indeterminateProgressStyle">@style/Widget.Quantum.Light.ProgressBar</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.ActionBar.Solid">
+        <item name="background">?attr/colorPrimary</item>
+        <item name="backgroundStacked">?attr/colorPrimary</item>
+        <item name="backgroundSplit">?attr/colorPrimary</item>
+    </style>
+
+    <style name="Widget.Quantum.Light.FastScroll" parent="Widget.Quantum.FastScroll"/>
+
+    <style name="Widget.Quantum.Light.MediaRouteButton" parent="Widget.Quantum.MediaRouteButton">
+        <item name="externalRouteEnabledDrawable">@drawable/ic_media_route_quantum</item>
+    </style>
+
+    <!-- Animation Styles -->
+
+    <style name="Animation.Quantum" parent="Animation"/>
+    <style name="Animation.Quantum.Activity" parent="Animation.Activity"/>
+    <style name="Animation.Quantum.Dialog" parent="Animation.Dialog"/>
+
+    <!-- Dialog styles -->
+
+    <style name="AlertDialog.Quantum" parent="AlertDialog">
+        <item name="fullDark">@color/transparent</item>
+        <item name="topDark">@color/transparent</item>
+        <item name="centerDark">@color/transparent</item>
+        <item name="bottomDark">@color/transparent</item>
+        <item name="fullBright">@color/transparent</item>
+        <item name="topBright">@color/transparent</item>
+        <item name="centerBright">@color/transparent</item>
+        <item name="bottomBright">@color/transparent</item>
+        <item name="bottomMedium">@color/transparent</item>
+        <item name="centerMedium">@color/transparent</item>
+        <item name="layout">@layout/alert_dialog_quantum</item>
+        <item name="listLayout">@layout/select_dialog_quantum</item>
+        <item name="progressLayout">@layout/progress_dialog_quantum</item>
+        <item name="horizontalProgressLayout">@layout/alert_dialog_progress_quantum</item>
+        <item name="listItemLayout">@layout/select_dialog_item_quantum</item>
+        <item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_quantum</item>
+        <item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_quantum</item>
+    </style>
+
+    <style name="AlertDialog.Quantum.Light"/>
+
+    <!-- Window title -->
+    <style name="WindowTitleBackground.Quantum">
+        <item name="background">@null</item>
+    </style>
+
+    <style name="WindowTitle.Quantum">
+        <item name="singleLine">true</item>
+        <item name="textAppearance">@style/TextAppearance.Quantum.WindowTitle</item>
+        <item name="shadowRadius">0</item>
+    </style>
+
+    <style name="DialogWindowTitle.Quantum">
+        <item name="maxLines">1</item>
+        <item name="scrollHorizontally">true</item>
+        <item name="textAppearance">@style/TextAppearance.Quantum.DialogWindowTitle</item>
+    </style>
+
+    <style name="DialogWindowTitle.Quantum.Light">
+        <item name="textAppearance">@style/TextAppearance.Quantum.DialogWindowTitle</item>
+    </style>
+
+</resources>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index e2e7a34..7c6a91a 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -224,6 +224,7 @@
 
   <java-symbol type="attr" name="actionModeShareDrawable" />
   <java-symbol type="attr" name="alertDialogCenterButtons" />
+  <java-symbol type="attr" name="fragmentBreadCrumbsStyle" />
   <java-symbol type="attr" name="gestureOverlayViewStyle" />
   <java-symbol type="attr" name="keyboardViewStyle" />
   <java-symbol type="attr" name="numberPickerStyle" />
@@ -231,8 +232,6 @@
   <java-symbol type="attr" name="preferenceFrameLayoutStyle" />
   <java-symbol type="attr" name="searchDialogTheme" />
   <java-symbol type="attr" name="searchViewSearchIcon" />
-  <java-symbol type="attr" name="stackViewStyle" />
-  <java-symbol type="attr" name="switchStyle" />
   <java-symbol type="attr" name="textAppearanceAutoCorrectionSuggestion" />
   <java-symbol type="attr" name="textAppearanceEasyCorrectSuggestion" />
   <java-symbol type="attr" name="textAppearanceMisspelledSuggestion" />
@@ -288,6 +287,8 @@
   <java-symbol type="bool" name="config_useFixedVolume" />
   <java-symbol type="bool" name="config_forceDefaultOrientation" />
   <java-symbol type="bool" name="config_wifi_batched_scan_supported" />
+  <java-symbol type="bool" name="config_enableMultiUserUI"/>
+  <java-symbol type="bool" name="config_disableUsbPermissionDialogs"/>
   <java-symbol type="bool" name="config_windowIsRound" />
 
   <java-symbol type="integer" name="config_cursorWindowSize" />
@@ -335,11 +336,6 @@
   <java-symbol type="dimen" name="default_gap" />
   <java-symbol type="dimen" name="dropdownitem_icon_width" />
   <java-symbol type="dimen" name="dropdownitem_text_padding_left" />
-  <java-symbol type="dimen" name="fastscroll_overlay_size" />
-  <java-symbol type="dimen" name="fastscroll_overlay_text_size" />
-  <java-symbol type="dimen" name="fastscroll_overlay_padding" />
-  <java-symbol type="dimen" name="fastscroll_thumb_height" />
-  <java-symbol type="dimen" name="fastscroll_thumb_width" />
   <java-symbol type="dimen" name="password_keyboard_spacebar_vertical_correction" />
   <java-symbol type="dimen" name="search_view_preferred_width" />
   <java-symbol type="dimen" name="textview_error_popup_default_width" />
@@ -351,6 +347,7 @@
   <java-symbol type="dimen" name="notification_title_text_size" />
   <java-symbol type="dimen" name="notification_subtext_size" />
   <java-symbol type="dimen" name="immersive_mode_cling_width" />
+  <java-symbol type="dimen" name="notification_quantum_rounded_rect_radius" />
 
   <java-symbol type="string" name="add_account_button_label" />
   <java-symbol type="string" name="addToDictionary" />
@@ -509,6 +506,17 @@
   <java-symbol type="string" name="display_manager_overlay_display_secure_suffix" />
   <java-symbol type="string" name="display_manager_overlay_display_title" />
   <java-symbol type="string" name="double_tap_toast" />
+  <java-symbol type="string" name="durationDays" />
+  <java-symbol type="string" name="durationDayHours" />
+  <java-symbol type="string" name="durationDayHour" />
+  <java-symbol type="string" name="durationHours" />
+  <java-symbol type="string" name="durationHourMinutes" />
+  <java-symbol type="string" name="durationHourMinute" />
+  <java-symbol type="string" name="durationMinutes" />
+  <java-symbol type="string" name="durationMinuteSeconds" />
+  <java-symbol type="string" name="durationMinuteSecond" />
+  <java-symbol type="string" name="durationSeconds" />
+  <java-symbol type="string" name="durationSecond" />
   <java-symbol type="string" name="elapsed_time_short_format_h_mm_ss" />
   <java-symbol type="string" name="elapsed_time_short_format_mm_ss" />
   <java-symbol type="string" name="emailTypeCustom" />
@@ -1096,8 +1104,8 @@
   <java-symbol type="drawable" name="unlock_halo" />
   <java-symbol type="drawable" name="unlock_ring" />
   <java-symbol type="drawable" name="unlock_wave" />
-  <java-symbol type="drawable" name="ic_action_assist_generic" />
   <java-symbol type="drawable" name="notification_bg" />
+  <java-symbol type="drawable" name="notification_bg_dim" />
   <java-symbol type="drawable" name="notification_bg_low" />
   <java-symbol type="drawable" name="notification_template_icon_bg" />
   <java-symbol type="drawable" name="notification_template_icon_low_bg" />
@@ -1110,6 +1118,7 @@
   <java-symbol type="drawable" name="cling_button" />
   <java-symbol type="drawable" name="cling_arrow_up" />
   <java-symbol type="drawable" name="cling_bg" />
+  <java-symbol type="drawable" name="ic_corp_badge" />
 
   <java-symbol type="layout" name="action_bar_home" />
   <java-symbol type="layout" name="action_bar_title_item" />
@@ -1184,7 +1193,7 @@
   <java-symbol type="layout" name="tab_content" />
   <java-symbol type="layout" name="tab_indicator_holo" />
   <java-symbol type="layout" name="textview_hint" />
-  <java-symbol type="layout" name="time_picker" />
+  <java-symbol type="layout" name="time_picker_legacy" />
   <java-symbol type="layout" name="time_picker_dialog" />
   <java-symbol type="layout" name="transient_notification" />
   <java-symbol type="layout" name="volume_adjust" />
@@ -1233,6 +1242,7 @@
   <java-symbol type="xml" name="sms_short_codes" />
   <java-symbol type="xml" name="audio_assets" />
   <java-symbol type="xml" name="global_keys" />
+  <java-symbol type="xml" name="default_zen_mode_config" />
 
   <java-symbol type="raw" name="accessibility_gestures" />
   <java-symbol type="raw" name="incognito_mode_start_page" />
@@ -1259,7 +1269,6 @@
   <java-symbol type="style" name="TextAppearance.SlidingTabNormal" />
   <java-symbol type="style" name="Theme.DeviceDefault.Dialog.NoFrame" />
   <java-symbol type="style" name="Theme.IconMenu" />
-  <java-symbol type="style" name="Theme.Panel.Volume" />
 
   <java-symbol type="attr" name="mediaRouteButtonStyle" />
   <java-symbol type="attr" name="externalRouteEnabledDrawable" />
@@ -1446,6 +1455,7 @@
   <java-symbol type="array" name="radioAttributes" />
   <java-symbol type="array" name="config_oemUsbModeOverride" />
   <java-symbol type="array" name="config_locationProviderPackageNames" />
+  <java-symbol type="array" name="config_testLocationProviders" />
   <java-symbol type="array" name="config_defaultNotificationVibePattern" />
   <java-symbol type="array" name="config_notificationFallbackVibePattern" />
   <java-symbol type="array" name="config_onlySingleDcAllowed" />
@@ -1581,6 +1591,7 @@
   <java-symbol type="string" name="low_internal_storage_view_text" />
   <java-symbol type="string" name="low_internal_storage_view_title" />
   <java-symbol type="string" name="notification_listener_binding_label" />
+  <java-symbol type="string" name="condition_provider_service_binding_label" />
   <java-symbol type="string" name="report" />
   <java-symbol type="string" name="select_input_method" />
   <java-symbol type="string" name="select_keyboard_layout_notification_title" />
@@ -1632,6 +1643,7 @@
   <java-symbol type="bool" name="config_powerDecoupleAutoSuspendModeFromDisplay" />
   <java-symbol type="bool" name="config_powerDecoupleInteractiveModeFromDisplay" />
   <java-symbol type="string" name="config_customAdbPublicKeyConfirmationComponent" />
+  <java-symbol type="string" name="config_defaultNetworkScorerPackageName" />
 
   <java-symbol type="layout" name="resolver_list" />
   <java-symbol type="id" name="resolver_list" />
@@ -1641,7 +1653,20 @@
   <java-symbol type="integer" name="config_maxResolverActivityColumns" />
   <java-symbol type="array" name="config_notificationScorers" />
 
-  <!-- From SystemUI -->
+  <java-symbol type="layout" name="notification_quantum_action" />
+  <java-symbol type="layout" name="notification_quantum_action_list" />
+  <java-symbol type="layout" name="notification_quantum_action_tombstone" />
+  <java-symbol type="layout" name="notification_template_quantum_base" />
+  <java-symbol type="layout" name="notification_template_quantum_big_base" />
+  <java-symbol type="layout" name="notification_template_quantum_big_picture" />
+  <java-symbol type="layout" name="notification_template_quantum_big_text" />
+  <java-symbol type="layout" name="notification_template_quantum_inbox" />
+  <java-symbol type="color" name="notification_action_legacy_color_filter" />
+  <java-symbol type="drawable" name="notification_icon_legacy_bg_inset" />
+  <java-symbol type="drawable" name="notification_quantum_bg_dim" />
+  <java-symbol type="drawable" name="notification_quantum_bg" />
+
+    <!-- From SystemUI -->
   <java-symbol type="anim" name="push_down_in" />
   <java-symbol type="anim" name="push_down_out" />
   <java-symbol type="anim" name="push_up_in" />
@@ -1777,4 +1802,69 @@
   <java-symbol type="dimen" name="subtitle_shadow_radius" />
   <java-symbol type="dimen" name="subtitle_shadow_offset" />
   <java-symbol type="dimen" name="subtitle_outline_width" />
+
+  <!-- From the new TimePicker -->
+  <java-symbol type="attr" name="timePickerHeaderBackgroundColor" />
+  <java-symbol type="attr" name="timePickerDialogTheme" />
+  <java-symbol type="attr" name="headerSelectedTextColor" />
+  <java-symbol type="attr" name="headerUnselectedTextColor" />
+  <java-symbol type="attr" name="numbersTextColor" />
+  <java-symbol type="attr" name="numbersBackgroundColor" />
+  <java-symbol type="attr" name="amPmTextColor" />
+  <java-symbol type="attr" name="amPmUnselectedBackgroundColor" />
+  <java-symbol type="attr" name="amPmSelectedBackgroundColor" />
+  <java-symbol type="attr" name="numbersSelectorColor" />
+  <java-symbol type="attr" name="timePickerHeaderTimeLabelTextAppearance" />
+  <java-symbol type="attr" name="nestedScrollingEnabled" />
+  <java-symbol type="style" name="TextAppearance.Holo.TimePicker.TimeLabel" />
+  <java-symbol type="layout" name="time_picker_holo" />
+  <java-symbol type="layout" name="time_header_label" />
+  <java-symbol type="id" name="time_header" />
+  <java-symbol type="id" name="hours" />
+  <java-symbol type="id" name="minutes" />
+  <java-symbol type="id" name="ampm_label" />
+  <java-symbol type="id" name="radial_picker" />
+  <java-symbol type="id" name="separator" />
+  <java-symbol type="id" name="layout_buttons" />
+  <java-symbol type="id" name="done_button" />
+  <java-symbol type="string" name="done_label" />
+  <java-symbol type="string" name="hour_picker_description" />
+  <java-symbol type="string" name="minute_picker_description" />
+  <java-symbol type="string" name="select_hours" />
+  <java-symbol type="string" name="select_minutes" />
+  <java-symbol type="string" name="time_placeholder" />
+  <java-symbol type="string" name="timepicker_circle_radius_multiplier" />
+  <java-symbol type="string" name="timepicker_circle_radius_multiplier_24HourMode" />
+  <java-symbol type="string" name="timepicker_ampm_circle_radius_multiplier" />
+  <java-symbol type="string" name="deleted_key" />
+  <java-symbol type="string" name="sans_serif" />
+  <java-symbol type="string" name="radial_numbers_typeface" />
+  <java-symbol type="string" name="timepicker_text_size_multiplier_inner" />
+  <java-symbol type="string" name="timepicker_text_size_multiplier_outer" />
+  <java-symbol type="string" name="timepicker_text_size_multiplier_normal" />
+  <java-symbol type="string" name="timepicker_numbers_radius_multiplier_outer" />
+  <java-symbol type="string" name="timepicker_selection_radius_multiplier" />
+  <java-symbol type="string" name="timepicker_numbers_radius_multiplier_inner" />
+  <java-symbol type="string" name="timepicker_numbers_radius_multiplier_normal" />
+  <java-symbol type="string" name="timepicker_transition_mid_radius_multiplier" />
+  <java-symbol type="string" name="timepicker_transition_end_radius_multiplier" />
+  <java-symbol type="color" name="timepicker_default_text_color_holo_light" />
+  <java-symbol type="color" name="timepicker_default_disabled_color_holo_light" />
+  <java-symbol type="color" name="timepicker_default_ampm_unselected_background_color_holo_light" />
+  <java-symbol type="color" name="timepicker_default_ampm_selected_background_color_holo_light" />
+  <java-symbol type="array" name="config_clockTickVibePattern" />
+
+  <!-- From various Quantum changes -->
+  <java-symbol type="attr" name="toolbarStyle" />
+  <java-symbol type="attr" name="titleTextAppearance" />
+  <java-symbol type="attr" name="subtitleTextAppearance" />
+  <java-symbol type="drawable" name="ic_lock_bugreport" />
+  <java-symbol type="id" name="icon_frame" />
+  <java-symbol type="style" name="Animation.VolumePanel" />
+  <java-symbol type="transition" name="no_transition" />
+  <java-symbol type="array" name="system_theme_sdks" />
+  <java-symbol type="array" name="system_theme_styles" />
+  <java-symbol type="array" name="system_theme_dialog_styles" />
+  <java-symbol type="array" name="system_theme_ime_styles" />
+
 </resources>
diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml
index c8d9fc6..7b3d5e3a 100644
--- a/core/res/res/values/themes.xml
+++ b/core/res/res/values/themes.xml
@@ -126,6 +126,7 @@
         <item name="dropdownListPreferredItemHeight">?android:attr/listPreferredItemHeight</item>
         <item name="textAppearanceListItem">?android:attr/textAppearanceLarge</item>
         <item name="textAppearanceListItemSmall">?android:attr/textAppearanceLarge</item>
+        <item name="textAppearanceListItemSecondary">?android:attr/textAppearanceSmall</item>
         <item name="listPreferredItemPaddingLeft">6dip</item>
         <item name="listPreferredItemPaddingRight">6dip</item>
         <item name="listPreferredItemPaddingStart">6dip</item>
@@ -249,6 +250,7 @@
         <item name="editTextStyle">@android:style/Widget.EditText</item>
         <item name="expandableListViewStyle">@android:style/Widget.ExpandableListView</item>
         <item name="expandableListViewWhiteStyle">@android:style/Widget.ExpandableListView.White</item>
+        <item name="fastScrollStyle">@android:style/Widget.FastScroll</item>
         <item name="galleryStyle">@android:style/Widget.Gallery</item>
         <item name="gestureOverlayViewStyle">@android:style/Widget.GestureOverlayView</item>
         <item name="gridViewStyle">@android:style/Widget.GridView</item>
@@ -296,8 +298,8 @@
         <item name="listPopupWindowStyle">@android:style/Widget.ListPopupWindow</item>
         <item name="popupMenuStyle">@android:style/Widget.PopupMenu</item>
         <item name="activityChooserViewStyle">@android:style/Widget.ActivityChooserView</item>
-
         <item name="mediaRouteButtonStyle">@android:style/Widget.DeviceDefault.MediaRouteButton</item>
+        <item name="fragmentBreadCrumbsStyle">@android:style/Widget.FragmentBreadCrumbs</item>
 
         <!-- Preference styles -->
         <item name="preferenceScreenStyle">@android:style/Preference.PreferenceScreen</item>
@@ -348,9 +350,12 @@
         <item name="actionMenuTextAppearance">@android:style/TextAppearance.Holo.Widget.ActionBar.Menu</item>
         <item name="actionMenuTextColor">?android:attr/textColorPrimary</item>
         <item name="actionBarWidgetTheme">@null</item>
+        <item name="actionBarTheme">@null</item>
         <item name="actionBarDivider">?android:attr/dividerVertical</item>
         <item name="actionBarItemBackground">?android:attr/selectableItemBackground</item>
 
+        <item name="toolbarStyle">@android:style/Widget.Toolbar</item>
+
         <item name="dividerVertical">@drawable/divider_vertical_dark</item>
         <item name="dividerHorizontal">@drawable/divider_vertical_dark</item>
         <item name="buttonBarStyle">@android:style/ButtonBar</item>
@@ -362,9 +367,9 @@
         <item name="searchViewTextField">@drawable/textfield_searchview_holo_dark</item>
         <item name="searchViewTextFieldRight">@drawable/textfield_searchview_right_holo_dark</item>
         <item name="searchViewCloseIcon">@android:drawable/ic_clear</item>
-        <item name="searchViewSearchIcon">@android:drawable/ic_search</item>
+        <item name="searchViewSearchIcon">@android:drawable/ic_search_api_holo_dark</item>
         <item name="searchViewGoIcon">@android:drawable/ic_go</item>
-        <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search</item>
+        <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search_api_holo_dark</item>
         <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_holo_dark</item>
         <item name="searchViewEditQueryBackground">?attr/selectableItemBackground</item>
 
@@ -382,6 +387,18 @@
         <!-- TimePicker style -->
         <item name="timePickerStyle">@style/Widget.TimePicker</item>
 
+        <!-- TimePicker background color -->
+        <item name="timePickerHeaderBackgroundColor">@android:color/darker_gray</item>
+
+        <!-- TimePicker Header time label text appearance -->
+        <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.TimePicker.TimeLabel</item>
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.TimePicker.AmPmLabel</item>
+
+        <!-- TimePicker dialog theme -->
+        <item name="timePickerDialogTheme">@android:style/Theme.Dialog.TimePicker</item>
+
         <!-- DatePicker style -->
         <item name="datePickerStyle">@style/Widget.DatePicker</item>
 
@@ -391,7 +408,6 @@
         <item name="fastScrollPreviewBackgroundLeft">@android:drawable/menu_submenu_background</item>
         <item name="fastScrollOverlayPosition">floating</item>
         <item name="fastScrollTextColor">@android:color/primary_text_dark</item>
-
         <!-- Pointer style -->
         <item name="pointerStyle">@android:style/Pointer</item>
 
@@ -687,8 +703,17 @@
         <item name="itemTextAppearance">@android:style/TextAppearance.Large.Inverse</item>
         <item name="textAppearanceListItem">@android:style/TextAppearance.Large.Inverse</item>
         <item name="textAppearanceListItemSmall">@android:style/TextAppearance.Large.Inverse</item>
+        <item name="textAppearanceListItemSecondary">@android:style/TextAppearance.Small.Inverse</item>
     </style>
-    
+
+    <!-- Default heme for the TimePicker dialog windows, which is used by the
+         {@link android.app.TimePickerDialog} class. -->
+    <style name="Theme.Dialog.TimePicker">
+        <item name="windowBackground">@android:color/transparent</item>
+        <item name="windowTitleStyle">@android:style/DialogWindowTitle</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
     <!-- Default dark theme for panel windows (on API level 10 and lower).  This removes all
          extraneous window decorations, so you basically have an empty rectangle in which
          to place your content.  It makes the window floating, with a transparent
@@ -867,11 +892,6 @@
         <item name="android:windowCloseOnTouchOutside">false</item>
     </style>
 
-    <style name="Theme.Panel.Volume">
-        <item name="android:windowAnimationStyle">@android:style/Animation.VolumePanel</item>
-        <item name="android:windowCloseOnTouchOutside">true</item>
-    </style>
-
     <!-- Default theme with an Action Bar. -->
     <style name="Theme.WithActionBar">
         <item name="android:windowActionBar">true</item>
@@ -907,7 +927,7 @@
         <item name="colorForeground">@android:color/bright_foreground_holo_dark</item>
         <item name="colorForegroundInverse">@android:color/bright_foreground_inverse_holo_dark</item>
         <item name="colorBackground">@android:color/background_holo_dark</item>
-        <item name="colorBackgroundCacheHint">@android:drawable/background_cache_hint_selector_holo_dark</item>
+        <item name="colorBackgroundCacheHint">@android:color/background_cache_hint_selector_holo_dark</item>
         <item name="disabledAlpha">0.5</item>
         <item name="backgroundDimAmount">0.6</item>
 
@@ -984,6 +1004,7 @@
         <item name="listPreferredItemHeightLarge">80dip</item>
         <item name="dropdownListPreferredItemHeight">?android:attr/listPreferredItemHeightSmall</item>
         <item name="textAppearanceListItemSmall">?android:attr/textAppearanceMedium</item>
+        <item name="textAppearanceListItemSecondary">?android:attr/textAppearanceSmall</item>
         <item name="listPreferredItemPaddingLeft">8dip</item>
         <item name="listPreferredItemPaddingRight">8dip</item>
         <item name="listPreferredItemPaddingStart">8dip</item>
@@ -1088,6 +1109,7 @@
         <item name="editTextStyle">@android:style/Widget.Holo.EditText</item>
         <item name="expandableListViewStyle">@android:style/Widget.Holo.ExpandableListView</item>
         <item name="expandableListViewWhiteStyle">@android:style/Widget.Holo.ExpandableListView.White</item>
+        <item name="fastScrollStyle">@android:style/Widget.Holo.FastScroll</item>
         <item name="galleryStyle">@android:style/Widget.Holo.Gallery</item>
         <item name="gestureOverlayViewStyle">@android:style/Widget.Holo.GestureOverlayView</item>
         <item name="gridViewStyle">@android:style/Widget.Holo.GridView</item>
@@ -1135,6 +1157,7 @@
         <item name="popupMenuStyle">@android:style/Widget.Holo.PopupMenu</item>
         <item name="stackViewStyle">@android:style/Widget.Holo.StackView</item>
         <item name="activityChooserViewStyle">@android:style/Widget.Holo.ActivityChooserView</item>
+        <item name="fragmentBreadCrumbsStyle">@android:style/Widget.Holo.FragmentBreadCrumbs</item>
 
         <!-- Preference styles -->
         <item name="preferenceScreenStyle">@android:style/Preference.Holo.PreferenceScreen</item>
@@ -1170,6 +1193,7 @@
         <item name="actionBarSize">@dimen/action_bar_default_height</item>
         <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.PopupWindow.ActionMode</item>
         <item name="actionBarWidgetTheme">@null</item>
+        <item name="actionBarTheme">@null</item>
 
         <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_dark</item>
         <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_dark</item>
@@ -1202,6 +1226,18 @@
         <!-- TimePicker style -->
         <item name="timePickerStyle">@style/Widget.Holo.TimePicker</item>
 
+        <!-- TimePicker background color -->
+        <item name="timePickerHeaderBackgroundColor">@android:color/timepicker_default_background_holo_dark</item>
+
+        <!-- TimePicker Header time label text appearance -->
+        <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Holo.TimePicker.TimeLabel</item>
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Holo.TimePicker.AmPmLabel</item>
+
+        <!-- TimePicker dialog theme -->
+        <item name="timePickerDialogTheme">@android:style/Theme.Holo.Dialog.TimePicker</item>
+
         <!-- DatePicker style -->
         <item name="datePickerStyle">@style/Widget.Holo.DatePicker</item>
 
@@ -1222,7 +1258,7 @@
         <item name="colorForeground">@android:color/bright_foreground_holo_light</item>
         <item name="colorForegroundInverse">@android:color/bright_foreground_inverse_holo_light</item>
         <item name="colorBackground">@android:color/background_holo_light</item>
-        <item name="colorBackgroundCacheHint">@android:drawable/background_cache_hint_selector_holo_light</item>
+        <item name="colorBackgroundCacheHint">@android:color/background_cache_hint_selector_holo_light</item>
         <item name="disabledAlpha">0.5</item>
         <item name="backgroundDimAmount">0.6</item>
 
@@ -1299,6 +1335,7 @@
         <item name="listPreferredItemHeightLarge">80dip</item>
         <item name="dropdownListPreferredItemHeight">?android:attr/listPreferredItemHeightSmall</item>
         <item name="textAppearanceListItemSmall">?android:attr/textAppearanceMedium</item>
+        <item name="textAppearanceListItemSecondary">?android:attr/textAppearanceSmall</item>
         <item name="listPreferredItemPaddingLeft">8dip</item>
         <item name="listPreferredItemPaddingRight">8dip</item>
         <item name="listPreferredItemPaddingStart">8dip</item>
@@ -1403,6 +1440,7 @@
         <item name="editTextStyle">@android:style/Widget.Holo.Light.EditText</item>
         <item name="expandableListViewStyle">@android:style/Widget.Holo.Light.ExpandableListView</item>
         <item name="expandableListViewWhiteStyle">@android:style/Widget.Holo.Light.ExpandableListView.White</item>
+        <item name="fastScrollStyle">@android:style/Widget.Holo.Light.FastScroll</item>
         <item name="galleryStyle">@android:style/Widget.Holo.Light.Gallery</item>
         <item name="gestureOverlayViewStyle">@android:style/Widget.Holo.Light.GestureOverlayView</item>
         <item name="gridViewStyle">@android:style/Widget.Holo.Light.GridView</item>
@@ -1450,6 +1488,7 @@
         <item name="popupMenuStyle">@android:style/Widget.Holo.Light.PopupMenu</item>
         <item name="stackViewStyle">@android:style/Widget.Holo.StackView</item>
         <item name="activityChooserViewStyle">@android:style/Widget.Holo.Light.ActivityChooserView</item>
+        <item name="fragmentBreadCrumbsStyle">@android:style/Widget.Holo.Light.FragmentBreadCrumbs</item>
 
         <!-- Preference styles -->
         <item name="preferenceScreenStyle">@android:style/Preference.Holo.PreferenceScreen</item>
@@ -1488,6 +1527,7 @@
         <item name="actionBarSize">@dimen/action_bar_default_height</item>
         <item name="actionModePopupWindowStyle">@android:style/Widget.Holo.Light.PopupWindow.ActionMode</item>
         <item name="actionBarWidgetTheme">@null</item>
+        <item name="actionBarTheme">@null</item>
 
         <item name="actionModeCutDrawable">@android:drawable/ic_menu_cut_holo_light</item>
         <item name="actionModeCopyDrawable">@android:drawable/ic_menu_copy_holo_light</item>
@@ -1517,6 +1557,18 @@
         <!-- TimePicker style -->
         <item name="timePickerStyle">@style/Widget.Holo.Light.TimePicker</item>
 
+        <!-- TimePicker Header background color -->
+        <item name="timePickerHeaderBackgroundColor">@android:color/timepicker_default_background_holo_light</item>
+
+        <!-- TimePicker Header time label text appearance -->
+        <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Holo.Light.TimePicker.TimeLabel</item>
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Holo.Light.TimePicker.AmPmLabel</item>
+
+        <!-- TimePicker dialog theme -->
+        <item name="timePickerDialogTheme">@android:style/Theme.Holo.Light.Dialog.TimePicker</item>
+
         <!-- DatePicker style -->
         <item name="datePickerStyle">@style/Widget.Holo.Light.DatePicker</item>
 
@@ -1535,6 +1587,7 @@
         <item name="android:windowContentOverlay">@android:drawable/ab_solid_shadow_holo</item>
         <item name="android:actionBarStyle">@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse</item>
         <item name="actionBarWidgetTheme">@android:style/Theme.Holo</item>
+        <item name="actionBarTheme">@null</item>
 
         <item name="actionDropDownStyle">@android:style/Widget.Holo.Spinner.DropDown.ActionBar</item>
         <item name="actionButtonStyle">@android:style/Widget.Holo.ActionButton</item>
@@ -1729,6 +1782,14 @@
         <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
     </style>
 
+    <!-- Holo theme for the TimePicker dialog windows, which is used by the
+         {@link android.app.TimePickerDialog} class. -->
+    <style name="Theme.Holo.Dialog.TimePicker">
+        <item name="windowBackground">@android:color/transparent</item>
+        <item name="windowTitleStyle">@android:style/DialogWindowTitle.Holo</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
     <!-- Theme for a window that will be displayed either full-screen on
          smaller screens (small, normal) or as a dialog on larger screens
          (large, xlarge). -->
@@ -1844,6 +1905,14 @@
         <item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
     </style>
 
+    <!-- Holo Light theme for the TimePicker dialog windows, which is used by the
+         {@link android.app.TimePickerDialog} class. -->
+    <style name="Theme.Holo.Light.Dialog.TimePicker">
+        <item name="windowBackground">@android:color/transparent</item>
+        <item name="windowTitleStyle">@android:style/DialogWindowTitle.Holo.Light</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
     <!-- Theme for a presentation window on a secondary display. -->
     <style name="Theme.Holo.Light.Dialog.Presentation" parent="@android:style/Theme.Holo.Light.NoActionBar.Fullscreen" >
     </style>
@@ -1861,4 +1930,5 @@
     <style name="Theme.Holo.Wallpaper.NoTitleBar">
         <item name="android:windowNoTitle">true</item>
     </style>
+
 </resources>
diff --git a/core/res/res/values/themes_device_defaults.xml b/core/res/res/values/themes_device_defaults.xml
index 721c6b0..80c10dd 100644
--- a/core/res/res/values/themes_device_defaults.xml
+++ b/core/res/res/values/themes_device_defaults.xml
@@ -32,158 +32,158 @@
  -->
 <resources>
 
-    <!-- The default theme for apps that target API level 14 and higher.
+    <!-- The default theme for apps that target API level XX and higher.
          <p>The DeviceDefault themes are aliases for a specific device’s native look and feel. The
          DeviceDefault theme family and widget style family offer ways for you to target your app
          to a device’s native theme with all device customizations intact.</p>
-         <p>For example, when you set your app's {@code targetSdkVersion} to 14 or higher, this
+         <p>For example, when you set your app's {@code targetSdkVersion} to XX or higher, this
          theme is applied to your application by default. As such, your app might appear with the
-         {@link #Theme_Holo Holo} styles on one device, but with a different set of styles on
+         {@link #Theme_Quantum Quantum} styles on one device, but with a different set of styles on
          another device. This is great if you want your app to fit with the device's native look and
          feel. If, however, you prefer to keep your UI style the same across all devices, you should
-         apply a specific theme such as {@link #Theme_Holo Holo} or one of your own design. For more
-         information, read <a
-         href="http://android-developers.blogspot.com/2012/01/holo-everywhere.html">Holo
+         apply a specific theme such as {@link #Theme_Quantum Quantum} or one of your own design.
+         For more information, read <a
+         href="http://android-developers.blogspot.com/20XX/XX/quantum-everywhere.html">Quantum
          Everywhere</a>.</p>
          <p>Styles used by the DeviceDefault theme are named using the convention
          Type.DeviceDefault.Etc (for example, {@code Widget.DeviceDefault.Button} and
          {@code TextAppearance.DeviceDefault.Widget.PopupMenu.Large}).</p>
           -->
-    <style name="Theme.DeviceDefault" parent="Theme.Holo" >
+    <style name="Theme.DeviceDefault" parent="Theme.Quantum" >
         <!-- Text styles -->
-        <item name="textAppearance">@android:style/TextAppearance.DeviceDefault</item>
-        <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Inverse</item>
+        <item name="textAppearance">@style/TextAppearance.DeviceDefault</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item>
 
-        <item name="textAppearanceLarge">@android:style/TextAppearance.DeviceDefault.Large</item>
-        <item name="textAppearanceMedium">@android:style/TextAppearance.DeviceDefault.Medium</item>
-        <item name="textAppearanceSmall">@android:style/TextAppearance.DeviceDefault.Small</item>
-        <item name="textAppearanceLargeInverse">@android:style/TextAppearance.DeviceDefault.Large.Inverse</item>
-        <item name="textAppearanceMediumInverse">@android:style/TextAppearance.DeviceDefault.Medium.Inverse</item>
-        <item name="textAppearanceSmallInverse">@android:style/TextAppearance.DeviceDefault.Small.Inverse</item>
-        <item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.DeviceDefault.SearchResult.Title</item>
-        <item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.DeviceDefault.SearchResult.Subtitle</item>
+        <item name="textAppearanceLarge">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceMedium">@style/TextAppearance.DeviceDefault.Medium</item>
+        <item name="textAppearanceSmall">@style/TextAppearance.DeviceDefault.Small</item>
+        <item name="textAppearanceLargeInverse">@style/TextAppearance.DeviceDefault.Large.Inverse</item>
+        <item name="textAppearanceMediumInverse">@style/TextAppearance.DeviceDefault.Medium.Inverse</item>
+        <item name="textAppearanceSmallInverse">@style/TextAppearance.DeviceDefault.Small.Inverse</item>
+        <item name="textAppearanceSearchResultTitle">@style/TextAppearance.DeviceDefault.SearchResult.Title</item>
+        <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.DeviceDefault.SearchResult.Subtitle</item>
 
-        <item name="textAppearanceButton">@android:style/TextAppearance.DeviceDefault.Widget.Button</item>
+        <item name="textAppearanceButton">@style/TextAppearance.DeviceDefault.Widget.Button</item>
 
-        <item name="textAppearanceLargePopupMenu">@android:style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large</item>
-        <item name="textAppearanceSmallPopupMenu">@android:style/TextAppearance.DeviceDefault.Widget.PopupMenu.Small</item>
+        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large</item>
+        <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Small</item>
 
         <!-- Button styles -->
-        <item name="buttonStyle">@android:style/Widget.DeviceDefault.Button</item>
+        <item name="buttonStyle">@style/Widget.DeviceDefault.Button</item>
 
-        <item name="buttonStyleSmall">@android:style/Widget.DeviceDefault.Button.Small</item>
-        <item name="buttonStyleInset">@android:style/Widget.DeviceDefault.Button.Inset</item>
+        <item name="buttonStyleSmall">@style/Widget.DeviceDefault.Button.Small</item>
+        <item name="buttonStyleInset">@style/Widget.DeviceDefault.Button.Inset</item>
 
-        <item name="buttonStyleToggle">@android:style/Widget.DeviceDefault.Button.Toggle</item>
-        <item name="switchStyle">@android:style/Widget.DeviceDefault.CompoundButton.Switch</item>
+        <item name="buttonStyleToggle">@style/Widget.DeviceDefault.Button.Toggle</item>
+        <item name="switchStyle">@style/Widget.DeviceDefault.CompoundButton.Switch</item>
 
-        <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Button.Borderless</item>
+        <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Button.Borderless</item>
 
-        <item name="listSeparatorTextViewStyle">@android:style/Widget.DeviceDefault.TextView.ListSeparator</item>
+        <item name="listSeparatorTextViewStyle">@style/Widget.DeviceDefault.TextView.ListSeparator</item>
 
         <!-- Window attributes -->
-        <item name="windowTitleStyle">@android:style/WindowTitle.DeviceDefault</item>
-        <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground.DeviceDefault</item>
-        <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Activity</item>
+        <item name="windowTitleStyle">@style/WindowTitle.DeviceDefault</item>
+        <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.DeviceDefault</item>
+        <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Activity</item>
 
         <!-- Dialog attributes -->
-        <item name="dialogTheme">@android:style/Theme.DeviceDefault.Dialog</item>
+        <item name="dialogTheme">@style/Theme.DeviceDefault.Dialog</item>
 
         <!-- AlertDialog attributes -->
-        <item name="alertDialogTheme">@android:style/Theme.DeviceDefault.Dialog.Alert</item>
-        <item name="alertDialogStyle">@android:style/AlertDialog.DeviceDefault</item>
+        <item name="alertDialogTheme">@style/Theme.DeviceDefault.Dialog.Alert</item>
+        <item name="alertDialogStyle">@style/AlertDialog.DeviceDefault</item>
 
         <!-- Presentation attributes -->
-        <item name="presentationTheme">@android:style/Theme.DeviceDefault.Dialog.Presentation</item>
+        <item name="presentationTheme">@style/Theme.DeviceDefault.Dialog.Presentation</item>
 
         <!-- Text selection handle attributes -->
-        <item name="textSelectHandleWindowStyle">@android:style/Widget.DeviceDefault.TextSelectHandle</item>
-        <item name="textSuggestionsWindowStyle">@android:style/Widget.DeviceDefault.TextSuggestionsPopupWindow</item>
+        <item name="textSelectHandleWindowStyle">@style/Widget.DeviceDefault.TextSelectHandle</item>
+        <item name="textSuggestionsWindowStyle">@style/Widget.DeviceDefault.TextSuggestionsPopupWindow</item>
 
         <!-- Widget styles -->
-        <item name="absListViewStyle">@android:style/Widget.DeviceDefault.AbsListView</item>
-        <item name="autoCompleteTextViewStyle">@android:style/Widget.DeviceDefault.AutoCompleteTextView</item>
-        <item name="checkboxStyle">@android:style/Widget.DeviceDefault.CompoundButton.CheckBox</item>
-        <item name="checkedTextViewStyle">@android:style/Widget.DeviceDefault.CheckedTextView</item>
-        <item name="dropDownListViewStyle">@android:style/Widget.DeviceDefault.ListView.DropDown</item>
-        <item name="editTextStyle">@android:style/Widget.DeviceDefault.EditText</item>
-        <item name="expandableListViewStyle">@android:style/Widget.DeviceDefault.ExpandableListView</item>
-        <item name="expandableListViewWhiteStyle">@android:style/Widget.DeviceDefault.ExpandableListView.White</item>
-        <item name="galleryStyle">@android:style/Widget.DeviceDefault.Gallery</item>
-        <item name="gestureOverlayViewStyle">@android:style/Widget.DeviceDefault.GestureOverlayView</item>
-        <item name="gridViewStyle">@android:style/Widget.DeviceDefault.GridView</item>
-        <item name="imageButtonStyle">@android:style/Widget.DeviceDefault.ImageButton</item>
-        <item name="imageWellStyle">@android:style/Widget.DeviceDefault.ImageWell</item>
-        <item name="listViewStyle">@android:style/Widget.DeviceDefault.ListView</item>
-        <item name="listViewWhiteStyle">@android:style/Widget.DeviceDefault.ListView.White</item>
-        <item name="popupWindowStyle">@android:style/Widget.DeviceDefault.PopupWindow</item>
-        <item name="progressBarStyle">@android:style/Widget.DeviceDefault.ProgressBar</item>
-        <item name="progressBarStyleHorizontal">@android:style/Widget.DeviceDefault.ProgressBar.Horizontal</item>
-        <item name="progressBarStyleSmall">@android:style/Widget.DeviceDefault.ProgressBar.Small</item>
-        <item name="progressBarStyleSmallTitle">@android:style/Widget.DeviceDefault.ProgressBar.Small.Title</item>
-        <item name="progressBarStyleLarge">@android:style/Widget.DeviceDefault.ProgressBar.Large</item>
-        <item name="progressBarStyleInverse">@android:style/Widget.DeviceDefault.ProgressBar.Inverse</item>
-        <item name="progressBarStyleSmallInverse">@android:style/Widget.DeviceDefault.ProgressBar.Small.Inverse</item>
-        <item name="progressBarStyleLargeInverse">@android:style/Widget.DeviceDefault.ProgressBar.Large.Inverse</item>
-        <item name="seekBarStyle">@android:style/Widget.DeviceDefault.SeekBar</item>
-        <item name="ratingBarStyle">@android:style/Widget.DeviceDefault.RatingBar</item>
-        <item name="ratingBarStyleIndicator">@android:style/Widget.DeviceDefault.RatingBar.Indicator</item>
-        <item name="ratingBarStyleSmall">@android:style/Widget.DeviceDefault.RatingBar.Small</item>
-        <item name="radioButtonStyle">@android:style/Widget.DeviceDefault.CompoundButton.RadioButton</item>
-        <item name="scrollViewStyle">@android:style/Widget.DeviceDefault.ScrollView</item>
-        <item name="horizontalScrollViewStyle">@android:style/Widget.DeviceDefault.HorizontalScrollView</item>
-        <item name="dropDownSpinnerStyle">@android:style/Widget.DeviceDefault.Spinner.DropDown</item>
-        <item name="starStyle">@android:style/Widget.DeviceDefault.CompoundButton.Star</item>
-        <item name="tabWidgetStyle">@android:style/Widget.DeviceDefault.TabWidget</item>
-        <item name="textViewStyle">@android:style/Widget.DeviceDefault.TextView</item>
-        <item name="webTextViewStyle">@android:style/Widget.DeviceDefault.WebTextView</item>
-        <item name="webViewStyle">@android:style/Widget.DeviceDefault.WebView</item>
-        <item name="dropDownItemStyle">@android:style/Widget.DeviceDefault.DropDownItem</item>
-        <item name="spinnerDropDownItemStyle">@android:style/Widget.DeviceDefault.DropDownItem.Spinner</item>
-        <item name="spinnerItemStyle">@android:style/Widget.DeviceDefault.TextView.SpinnerItem</item>
-        <item name="dropDownHintAppearance">@android:style/TextAppearance.DeviceDefault.Widget.DropDownHint</item>
-        <item name="keyboardViewStyle">@android:style/Widget.DeviceDefault.KeyboardView</item>
-        <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item>
-        <item name="quickContactBadgeStyleWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item>
-        <item name="quickContactBadgeStyleWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item>
-        <item name="quickContactBadgeStyleSmallWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item>
-        <item name="quickContactBadgeStyleSmallWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item>
-        <item name="quickContactBadgeStyleSmallWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item>
-        <item name="listPopupWindowStyle">@android:style/Widget.DeviceDefault.ListPopupWindow</item>
-        <item name="popupMenuStyle">@android:style/Widget.DeviceDefault.PopupMenu</item>
-        <item name="stackViewStyle">@android:style/Widget.DeviceDefault.StackView</item>
+        <item name="absListViewStyle">@style/Widget.DeviceDefault.AbsListView</item>
+        <item name="autoCompleteTextViewStyle">@style/Widget.DeviceDefault.AutoCompleteTextView</item>
+        <item name="checkboxStyle">@style/Widget.DeviceDefault.CompoundButton.CheckBox</item>
+        <item name="checkedTextViewStyle">@style/Widget.DeviceDefault.CheckedTextView</item>
+        <item name="dropDownListViewStyle">@style/Widget.DeviceDefault.ListView.DropDown</item>
+        <item name="editTextStyle">@style/Widget.DeviceDefault.EditText</item>
+        <item name="expandableListViewStyle">@style/Widget.DeviceDefault.ExpandableListView</item>
+        <item name="expandableListViewWhiteStyle">@style/Widget.DeviceDefault.ExpandableListView.White</item>
+        <item name="galleryStyle">@style/Widget.DeviceDefault.Gallery</item>
+        <item name="gestureOverlayViewStyle">@style/Widget.DeviceDefault.GestureOverlayView</item>
+        <item name="gridViewStyle">@style/Widget.DeviceDefault.GridView</item>
+        <item name="imageButtonStyle">@style/Widget.DeviceDefault.ImageButton</item>
+        <item name="imageWellStyle">@style/Widget.DeviceDefault.ImageWell</item>
+        <item name="listViewStyle">@style/Widget.DeviceDefault.ListView</item>
+        <item name="listViewWhiteStyle">@style/Widget.DeviceDefault.ListView.White</item>
+        <item name="popupWindowStyle">@style/Widget.DeviceDefault.PopupWindow</item>
+        <item name="progressBarStyle">@style/Widget.DeviceDefault.ProgressBar</item>
+        <item name="progressBarStyleHorizontal">@style/Widget.DeviceDefault.ProgressBar.Horizontal</item>
+        <item name="progressBarStyleSmall">@style/Widget.DeviceDefault.ProgressBar.Small</item>
+        <item name="progressBarStyleSmallTitle">@style/Widget.DeviceDefault.ProgressBar.Small.Title</item>
+        <item name="progressBarStyleLarge">@style/Widget.DeviceDefault.ProgressBar.Large</item>
+        <item name="progressBarStyleInverse">@style/Widget.DeviceDefault.ProgressBar.Inverse</item>
+        <item name="progressBarStyleSmallInverse">@style/Widget.DeviceDefault.ProgressBar.Small.Inverse</item>
+        <item name="progressBarStyleLargeInverse">@style/Widget.DeviceDefault.ProgressBar.Large.Inverse</item>
+        <item name="seekBarStyle">@style/Widget.DeviceDefault.SeekBar</item>
+        <item name="ratingBarStyle">@style/Widget.DeviceDefault.RatingBar</item>
+        <item name="ratingBarStyleIndicator">@style/Widget.DeviceDefault.RatingBar.Indicator</item>
+        <item name="ratingBarStyleSmall">@style/Widget.DeviceDefault.RatingBar.Small</item>
+        <item name="radioButtonStyle">@style/Widget.DeviceDefault.CompoundButton.RadioButton</item>
+        <item name="scrollViewStyle">@style/Widget.DeviceDefault.ScrollView</item>
+        <item name="horizontalScrollViewStyle">@style/Widget.DeviceDefault.HorizontalScrollView</item>
+        <item name="dropDownSpinnerStyle">@style/Widget.DeviceDefault.Spinner.DropDown</item>
+        <item name="starStyle">@style/Widget.DeviceDefault.CompoundButton.Star</item>
+        <item name="tabWidgetStyle">@style/Widget.DeviceDefault.TabWidget</item>
+        <item name="textViewStyle">@style/Widget.DeviceDefault.TextView</item>
+        <item name="webTextViewStyle">@style/Widget.DeviceDefault.WebTextView</item>
+        <item name="webViewStyle">@style/Widget.DeviceDefault.WebView</item>
+        <item name="dropDownItemStyle">@style/Widget.DeviceDefault.DropDownItem</item>
+        <item name="spinnerDropDownItemStyle">@style/Widget.DeviceDefault.DropDownItem.Spinner</item>
+        <item name="spinnerItemStyle">@style/Widget.DeviceDefault.TextView.SpinnerItem</item>
+        <item name="dropDownHintAppearance">@style/TextAppearance.DeviceDefault.Widget.DropDownHint</item>
+        <item name="keyboardViewStyle">@style/Widget.DeviceDefault.KeyboardView</item>
+        <item name="quickContactBadgeStyleWindowSmall">@style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item>
+        <item name="quickContactBadgeStyleWindowMedium">@style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item>
+        <item name="quickContactBadgeStyleWindowLarge">@style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item>
+        <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item>
+        <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item>
+        <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item>
+        <item name="listPopupWindowStyle">@style/Widget.DeviceDefault.ListPopupWindow</item>
+        <item name="popupMenuStyle">@style/Widget.DeviceDefault.PopupMenu</item>
+        <item name="stackViewStyle">@style/Widget.DeviceDefault.StackView</item>
 
         <!-- Preference styles -->
-        <item name="preferenceScreenStyle">@android:style/Preference.DeviceDefault.PreferenceScreen</item>
-        <item name="preferenceCategoryStyle">@android:style/Preference.DeviceDefault.Category</item>
-        <item name="preferenceStyle">@android:style/Preference.DeviceDefault</item>
-        <item name="preferenceInformationStyle">@android:style/Preference.DeviceDefault.Information</item>
-        <item name="checkBoxPreferenceStyle">@android:style/Preference.DeviceDefault.CheckBoxPreference</item>
-        <item name="switchPreferenceStyle">@android:style/Preference.DeviceDefault.SwitchPreference</item>
-        <item name="yesNoPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item>
-        <item name="dialogPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference</item>
-        <item name="editTextPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item>
-        <item name="ringtonePreferenceStyle">@android:style/Preference.DeviceDefault.RingtonePreference</item>
+        <item name="preferenceScreenStyle">@style/Preference.DeviceDefault.PreferenceScreen</item>
+        <item name="preferenceCategoryStyle">@style/Preference.DeviceDefault.Category</item>
+        <item name="preferenceStyle">@style/Preference.DeviceDefault</item>
+        <item name="preferenceInformationStyle">@style/Preference.DeviceDefault.Information</item>
+        <item name="checkBoxPreferenceStyle">@style/Preference.DeviceDefault.CheckBoxPreference</item>
+        <item name="switchPreferenceStyle">@style/Preference.DeviceDefault.SwitchPreference</item>
+        <item name="yesNoPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item>
+        <item name="dialogPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference</item>
+        <item name="editTextPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item>
+        <item name="ringtonePreferenceStyle">@style/Preference.DeviceDefault.RingtonePreference</item>
 
         <!-- Action bar styles -->
-        <item name="actionDropDownStyle">@android:style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item>
-        <item name="actionButtonStyle">@android:style/Widget.DeviceDefault.ActionButton</item>
-        <item name="actionOverflowButtonStyle">@android:style/Widget.DeviceDefault.ActionButton.Overflow</item>
+        <item name="actionDropDownStyle">@style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item>
+        <item name="actionButtonStyle">@style/Widget.DeviceDefault.ActionButton</item>
+        <item name="actionOverflowButtonStyle">@style/Widget.DeviceDefault.ActionButton.Overflow</item>
         <item name="actionBarTabStyle">@style/Widget.DeviceDefault.ActionBar.TabView</item>
         <item name="actionBarTabBarStyle">@style/Widget.DeviceDefault.ActionBar.TabBar</item>
         <item name="actionBarTabTextStyle">@style/Widget.DeviceDefault.ActionBar.TabText</item>
         <item name="actionModeStyle">@style/Widget.DeviceDefault.ActionMode</item>
         <item name="actionModeCloseButtonStyle">@style/Widget.DeviceDefault.ActionButton.CloseMode</item>
-        <item name="actionBarStyle">@android:style/Widget.DeviceDefault.ActionBar</item>
-        <item name="actionModePopupWindowStyle">@android:style/Widget.DeviceDefault.PopupWindow.ActionMode</item>
+        <item name="actionBarStyle">@style/Widget.DeviceDefault.ActionBar</item>
+        <item name="actionModePopupWindowStyle">@style/Widget.DeviceDefault.PopupWindow.ActionMode</item>
 
-        <item name="buttonBarStyle">@android:style/DeviceDefault.ButtonBar</item>
-        <item name="segmentedButtonStyle">@android:style/DeviceDefault.SegmentedButton</item>
+        <item name="buttonBarStyle">@style/DeviceDefault.ButtonBar</item>
+        <item name="segmentedButtonStyle">@style/DeviceDefault.SegmentedButton</item>
 
         <item name="searchDialogTheme">@style/Theme.DeviceDefault.SearchBar</item>
 
         <!-- PreferenceFrameLayout attributes -->
-        <item name="preferenceFrameLayoutStyle">@android:style/Widget.DeviceDefault.PreferenceFrameLayout</item>
+        <item name="preferenceFrameLayoutStyle">@style/Widget.DeviceDefault.PreferenceFrameLayout</item>
 
         <!-- NumberPicker style-->
         <item name="numberPickerStyle">@style/Widget.DeviceDefault.NumberPicker</item>
@@ -194,163 +194,247 @@
         <!-- TimePicker style -->
         <item name="timePickerStyle">@style/Widget.DeviceDefault.TimePicker</item>
 
+        <!-- TimePicker Header time label text appearance -->
+        <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.DeviceDefault.TimePicker.TimeLabel</item>
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.DeviceDefault.TimePicker.AmPmLabel</item>
+
+        <!-- TimePicker dialog theme -->
+        <item name="timePickerDialogTheme">@style/Theme.DeviceDefault.Dialog.TimePicker</item>
+
         <!-- DatePicker style -->
         <item name="datePickerStyle">@style/Widget.DeviceDefault.DatePicker</item>
 
-        <item name="mediaRouteButtonStyle">@android:style/Widget.DeviceDefault.MediaRouteButton</item>
+        <item name="mediaRouteButtonStyle">@style/Widget.DeviceDefault.MediaRouteButton</item>
     </style>
 
     <!-- Variant of {@link #Theme_DeviceDefault} with no action bar -->
-    <style name="Theme.DeviceDefault.NoActionBar" parent="Theme.Holo.NoActionBar" >
-    </style>
+    <style name="Theme.DeviceDefault.NoActionBar" parent="Theme.Quantum.NoActionBar"  />
 
     <!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar.  This theme
          sets {@link android.R.attr#windowFullscreen} to true.  -->
-    <style name="Theme.DeviceDefault.NoActionBar.Fullscreen" parent="Theme.Holo.NoActionBar.Fullscreen" >
-    </style>
+    <style name="Theme.DeviceDefault.NoActionBar.Fullscreen" parent="Theme.Quantum.NoActionBar.Fullscreen"  />
 
     <!-- Variant of {@link #Theme_DeviceDefault} with no action bar and no status bar and
     extending in to overscan region.  This theme
     sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
     to true. -->
-    <style name="Theme.DeviceDefault.NoActionBar.Overscan" parent="Theme.Holo.NoActionBar.Overscan" >
-    </style>
+    <style name="Theme.DeviceDefault.NoActionBar.Overscan" parent="Theme.Quantum.NoActionBar.Overscan"  />
 
     <!-- Variant of {@link #Theme_DeviceDefault} that has no title bar and translucent
          system decor.  This theme sets {@link android.R.attr#windowTranslucentStatus} and
          {@link android.R.attr#windowTranslucentNavigation} to true. -->
-    <style name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" parent="Theme.Holo.NoActionBar.TranslucentDecor" >
+    <style name="Theme.DeviceDefault.NoActionBar.TranslucentDecor" parent="Theme.Quantum.NoActionBar.TranslucentDecor"  />
+
+    <!-- DeviceDefault theme for dialog windows and activities. This changes the window to be
+    floating (not fill the entire screen), and puts a frame around its contents. You can set this
+    theme on an activity if you would like to make an activity that looks like a Dialog. -->
+    <style name="Theme.DeviceDefault.Dialog" parent="Theme.Quantum.Dialog" >
+        <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>
+        <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Dialog</item>
+
+        <item name="buttonBarStyle">@style/DeviceDefault.ButtonBar.AlertDialog</item>
+        <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Button.Borderless.Small</item>
+
+        <item name="textAppearance">@style/TextAppearance.DeviceDefault</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item>
     </style>
 
+    <!-- Variant of {@link #Theme_DeviceDefault_Dialog} that has a nice minimum width for a
+    regular dialog. -->
+    <style name="Theme.DeviceDefault.Dialog.MinWidth" parent="Theme.Quantum.Dialog.MinWidth" />
+
+    <!-- Variant of {@link #Theme_DeviceDefault_Dialog} without an action bar -->
+    <style name="Theme.DeviceDefault.Dialog.NoActionBar" parent="Theme.Quantum.Dialog.NoActionBar" />
+
+    <!-- Variant of {@link #Theme_DeviceDefault_Dialog_NoActionBar} that has a nice minimum width
+    for a regular dialog. -->
+    <style name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Dialog.NoActionBar.MinWidth" />
+
+    <!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
+    <style name="Theme.DeviceDefault.Dialog.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
+    </style>
+
+    <!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. -->
+    <style name="Theme.DeviceDefault.Dialog.NoActionBar.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
+    </style>
+
+    <!-- DeviceDefault theme for a window that will be displayed either full-screen on smaller
+    screens (small, normal) or as a dialog on larger screens (large, xlarge). -->
+    <style name="Theme.DeviceDefault.DialogWhenLarge" parent="Theme.Quantum.DialogWhenLarge"  />
+
+    <!-- DeviceDefault theme for a window without an action bar that will be displayed either
+    full-screen on smaller screens (small, normal) or as a dialog on larger screens (large,
+    xlarge). -->
+    <style name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.DialogWhenLarge.NoActionBar"  />
+
+    <!-- DeviceDefault theme for a presentation window on a secondary display. -->
+    <style name="Theme.DeviceDefault.Dialog.Presentation" parent="Theme.Quantum.Dialog.Presentation" />
+
+    <style name="Theme.DeviceDefault.Dialog.TimePicker" parent="Theme.Quantum.Dialog.TimePicker"/>
+
+    <!-- DeviceDefault theme for panel windows. This removes all extraneous window
+    decorations, so you basically have an empty rectangle in which to place your content. It makes
+    the window floating, with a transparent background, and turns off dimming behind the window. -->
+    <style name="Theme.DeviceDefault.Panel" parent="Theme.Quantum.Panel"  />
+
+    <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
+    behind them. -->
+    <style name="Theme.DeviceDefault.Wallpaper" parent="Theme.Quantum.Wallpaper"  />
+
+    <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
+    behind them and without an action bar. -->
+    <style name="Theme.DeviceDefault.Wallpaper.NoTitleBar" parent="Theme.Quantum.Wallpaper.NoTitleBar"  />
+
+    <!-- DeviceDefault style for input methods, which is used by the
+         {@link android.inputmethodservice.InputMethodService} class.-->
+    <style name="Theme.DeviceDefault.InputMethod" parent="Theme.Quantum.InputMethod"  />
+
+    <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Quantum.Dialog.Alert">
+        <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault</item>
+    </style>
+
+    <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Quantum.SearchBar" />
+    <style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Quantum.Dialog.NoFrame" />
+
     <!-- Variant of {@link #Theme_DeviceDefault} with a light-colored style -->
-    <style name="Theme.DeviceDefault.Light" parent="Theme.Holo.Light" >
+    <style name="Theme.DeviceDefault.Light" parent="Theme.Quantum.Light" >
         <!-- Text styles -->
-        <item name="textAppearance">@android:style/TextAppearance.DeviceDefault.Light</item>
-        <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Light.Inverse</item>
+        <item name="textAppearance">@style/TextAppearance.DeviceDefault</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item>
 
-        <item name="textAppearanceLarge">@android:style/TextAppearance.DeviceDefault.Light.Large</item>
-        <item name="textAppearanceMedium">@android:style/TextAppearance.DeviceDefault.Light.Medium</item>
-        <item name="textAppearanceSmall">@android:style/TextAppearance.DeviceDefault.Light.Small</item>
-        <item name="textAppearanceLargeInverse">@android:style/TextAppearance.DeviceDefault.Light.Large.Inverse</item>
-        <item name="textAppearanceMediumInverse">@android:style/TextAppearance.DeviceDefault.Light.Medium.Inverse</item>
-        <item name="textAppearanceSmallInverse">@android:style/TextAppearance.DeviceDefault.Light.Small.Inverse</item>
-        <item name="textAppearanceSearchResultTitle">@android:style/TextAppearance.DeviceDefault.Light.SearchResult.Title</item>
-        <item name="textAppearanceSearchResultSubtitle">@android:style/TextAppearance.DeviceDefault.Light.SearchResult.Subtitle</item>
+        <item name="textAppearanceLarge">@style/TextAppearance.DeviceDefault.Large</item>
+        <item name="textAppearanceMedium">@style/TextAppearance.DeviceDefault.Medium</item>
+        <item name="textAppearanceSmall">@style/TextAppearance.DeviceDefault.Small</item>
+        <item name="textAppearanceLargeInverse">@style/TextAppearance.DeviceDefault.Large.Inverse</item>
+        <item name="textAppearanceMediumInverse">@style/TextAppearance.DeviceDefault.Medium.Inverse</item>
+        <item name="textAppearanceSmallInverse">@style/TextAppearance.DeviceDefault.Small.Inverse</item>
+        <item name="textAppearanceSearchResultTitle">@style/TextAppearance.DeviceDefault.SearchResult.Title</item>
+        <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.DeviceDefault.SearchResult.Subtitle</item>
 
-        <item name="textAppearanceButton">@android:style/TextAppearance.DeviceDefault.Light.Widget.Button</item>
+        <item name="textAppearanceButton">@style/TextAppearance.DeviceDefault.Widget.Button</item>
 
-        <item name="textAppearanceLargePopupMenu">@android:style/TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Large</item>
-        <item name="textAppearanceSmallPopupMenu">@android:style/TextAppearance.DeviceDefault.Light.Widget.PopupMenu.Small</item>
+        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Large</item>
+        <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.DeviceDefault.Widget.PopupMenu.Small</item>
 
         <!-- Button styles -->
-        <item name="buttonStyle">@android:style/Widget.DeviceDefault.Light.Button</item>
+        <item name="buttonStyle">@style/Widget.DeviceDefault.Light.Button</item>
 
-        <item name="buttonStyleSmall">@android:style/Widget.DeviceDefault.Light.Button.Small</item>
-        <item name="buttonStyleInset">@android:style/Widget.DeviceDefault.Light.Button.Inset</item>
+        <item name="buttonStyleSmall">@style/Widget.DeviceDefault.Light.Button.Small</item>
+        <item name="buttonStyleInset">@style/Widget.DeviceDefault.Light.Button.Inset</item>
 
-        <item name="buttonStyleToggle">@android:style/Widget.DeviceDefault.Light.Button.Toggle</item>
+        <item name="buttonStyleToggle">@style/Widget.DeviceDefault.Light.Button.Toggle</item>
 
-        <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Light.Button.Borderless</item>
+        <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Light.Button.Borderless</item>
 
-        <item name="listSeparatorTextViewStyle">@android:style/Widget.DeviceDefault.Light.TextView.ListSeparator</item>
+        <item name="listSeparatorTextViewStyle">@style/Widget.DeviceDefault.Light.TextView.ListSeparator</item>
 
-        <item name="windowTitleStyle">@android:style/WindowTitle.DeviceDefault</item>
-        <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground.DeviceDefault</item>
-        <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Activity</item>
+        <item name="windowTitleStyle">@style/WindowTitle.DeviceDefault</item>
+        <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.DeviceDefault</item>
+        <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Activity</item>
 
         <!-- Dialog attributes -->
-        <item name="dialogTheme">@android:style/Theme.DeviceDefault.Light.Dialog</item>
+        <item name="dialogTheme">@style/Theme.DeviceDefault.Light.Dialog</item>
 
         <!-- AlertDialog attributes -->
-        <item name="alertDialogTheme">@android:style/Theme.DeviceDefault.Light.Dialog.Alert</item>
-        <item name="alertDialogStyle">@android:style/AlertDialog.DeviceDefault.Light</item>
+        <item name="alertDialogTheme">@style/Theme.DeviceDefault.Light.Dialog.Alert</item>
+        <item name="alertDialogStyle">@style/AlertDialog.DeviceDefault.Light</item>
 
         <!-- Presentation attributes -->
-        <item name="presentationTheme">@android:style/Theme.DeviceDefault.Light.Dialog.Presentation</item>
+        <item name="presentationTheme">@style/Theme.DeviceDefault.Light.Dialog.Presentation</item>
 
         <!-- Text selection handle attributes -->
-        <item name="textSelectHandleWindowStyle">@android:style/Widget.DeviceDefault.TextSelectHandle</item>
-        <item name="textSuggestionsWindowStyle">@android:style/Widget.DeviceDefault.Light.TextSuggestionsPopupWindow</item>
+        <item name="textSelectHandleWindowStyle">@style/Widget.DeviceDefault.TextSelectHandle</item>
+        <item name="textSuggestionsWindowStyle">@style/Widget.DeviceDefault.Light.TextSuggestionsPopupWindow</item>
 
         <!-- Widget styles -->
-        <item name="absListViewStyle">@android:style/Widget.DeviceDefault.Light.AbsListView</item>
-        <item name="autoCompleteTextViewStyle">@android:style/Widget.DeviceDefault.Light.AutoCompleteTextView</item>
-        <item name="checkboxStyle">@android:style/Widget.DeviceDefault.Light.CompoundButton.CheckBox</item>
-        <item name="checkedTextViewStyle">@android:style/Widget.DeviceDefault.Light.CheckedTextView</item>
-        <item name="dropDownListViewStyle">@android:style/Widget.DeviceDefault.Light.ListView.DropDown</item>
-        <item name="editTextStyle">@android:style/Widget.DeviceDefault.Light.EditText</item>
-        <item name="expandableListViewStyle">@android:style/Widget.DeviceDefault.Light.ExpandableListView</item>
-        <item name="expandableListViewWhiteStyle">@android:style/Widget.DeviceDefault.Light.ExpandableListView.White</item>
-        <item name="galleryStyle">@android:style/Widget.DeviceDefault.Light.Gallery</item>
-        <item name="gestureOverlayViewStyle">@android:style/Widget.DeviceDefault.Light.GestureOverlayView</item>
-        <item name="gridViewStyle">@android:style/Widget.DeviceDefault.Light.GridView</item>
-        <item name="imageButtonStyle">@android:style/Widget.DeviceDefault.Light.ImageButton</item>
-        <item name="imageWellStyle">@android:style/Widget.DeviceDefault.Light.ImageWell</item>
-        <item name="listViewStyle">@android:style/Widget.DeviceDefault.Light.ListView</item>
-        <item name="listViewWhiteStyle">@android:style/Widget.DeviceDefault.Light.ListView.White</item>
-        <item name="popupWindowStyle">@android:style/Widget.DeviceDefault.Light.PopupWindow</item>
-        <item name="progressBarStyle">@android:style/Widget.DeviceDefault.Light.ProgressBar</item>
-        <item name="progressBarStyleHorizontal">@android:style/Widget.DeviceDefault.Light.ProgressBar.Horizontal</item>
-        <item name="progressBarStyleSmall">@android:style/Widget.DeviceDefault.Light.ProgressBar.Small</item>
-        <item name="progressBarStyleSmallTitle">@android:style/Widget.DeviceDefault.Light.ProgressBar.Small.Title</item>
-        <item name="progressBarStyleLarge">@android:style/Widget.DeviceDefault.Light.ProgressBar.Large</item>
-        <item name="progressBarStyleInverse">@android:style/Widget.DeviceDefault.Light.ProgressBar.Inverse</item>
-        <item name="progressBarStyleSmallInverse">@android:style/Widget.DeviceDefault.Light.ProgressBar.Small.Inverse</item>
-        <item name="progressBarStyleLargeInverse">@android:style/Widget.DeviceDefault.Light.ProgressBar.Large.Inverse</item>
-        <item name="seekBarStyle">@android:style/Widget.DeviceDefault.Light.SeekBar</item>
-        <item name="ratingBarStyle">@android:style/Widget.DeviceDefault.Light.RatingBar</item>
-        <item name="ratingBarStyleIndicator">@android:style/Widget.DeviceDefault.Light.RatingBar.Indicator</item>
-        <item name="ratingBarStyleSmall">@android:style/Widget.DeviceDefault.Light.RatingBar.Small</item>
-        <item name="radioButtonStyle">@android:style/Widget.DeviceDefault.Light.CompoundButton.RadioButton</item>
-        <item name="scrollViewStyle">@android:style/Widget.DeviceDefault.Light.ScrollView</item>
-        <item name="horizontalScrollViewStyle">@android:style/Widget.DeviceDefault.Light.HorizontalScrollView</item>
-        <item name="dropDownSpinnerStyle">@android:style/Widget.DeviceDefault.Light.Spinner.DropDown</item>
-        <item name="starStyle">@android:style/Widget.DeviceDefault.Light.CompoundButton.Star</item>
-        <item name="tabWidgetStyle">@android:style/Widget.DeviceDefault.Light.TabWidget</item>
-        <item name="textViewStyle">@android:style/Widget.DeviceDefault.Light.TextView</item>
-        <item name="webTextViewStyle">@android:style/Widget.DeviceDefault.Light.WebTextView</item>
-        <item name="webViewStyle">@android:style/Widget.DeviceDefault.Light.WebView</item>
-        <item name="dropDownItemStyle">@android:style/Widget.DeviceDefault.Light.DropDownItem</item>
-        <item name="spinnerDropDownItemStyle">@android:style/Widget.DeviceDefault.Light.DropDownItem.Spinner</item>
-        <item name="spinnerItemStyle">@android:style/Widget.DeviceDefault.Light.TextView.SpinnerItem</item>
-        <item name="dropDownHintAppearance">@android:style/TextAppearance.DeviceDefault.Widget.DropDownHint</item>
-        <item name="keyboardViewStyle">@android:style/Widget.DeviceDefault.KeyboardView</item>
-        <item name="quickContactBadgeStyleWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item>
-        <item name="quickContactBadgeStyleWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item>
-        <item name="quickContactBadgeStyleWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item>
-        <item name="quickContactBadgeStyleSmallWindowSmall">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item>
-        <item name="quickContactBadgeStyleSmallWindowMedium">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item>
-        <item name="quickContactBadgeStyleSmallWindowLarge">@android:style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item>
-        <item name="listPopupWindowStyle">@android:style/Widget.DeviceDefault.Light.ListPopupWindow</item>
-        <item name="popupMenuStyle">@android:style/Widget.DeviceDefault.Light.PopupMenu</item>
-        <item name="stackViewStyle">@android:style/Widget.DeviceDefault.StackView</item>
+        <item name="absListViewStyle">@style/Widget.DeviceDefault.Light.AbsListView</item>
+        <item name="autoCompleteTextViewStyle">@style/Widget.DeviceDefault.Light.AutoCompleteTextView</item>
+        <item name="checkboxStyle">@style/Widget.DeviceDefault.Light.CompoundButton.CheckBox</item>
+        <item name="checkedTextViewStyle">@style/Widget.DeviceDefault.Light.CheckedTextView</item>
+        <item name="dropDownListViewStyle">@style/Widget.DeviceDefault.Light.ListView.DropDown</item>
+        <item name="editTextStyle">@style/Widget.DeviceDefault.Light.EditText</item>
+        <item name="expandableListViewStyle">@style/Widget.DeviceDefault.Light.ExpandableListView</item>
+        <item name="expandableListViewWhiteStyle">@style/Widget.DeviceDefault.Light.ExpandableListView.White</item>
+        <item name="galleryStyle">@style/Widget.DeviceDefault.Light.Gallery</item>
+        <item name="gestureOverlayViewStyle">@style/Widget.DeviceDefault.Light.GestureOverlayView</item>
+        <item name="gridViewStyle">@style/Widget.DeviceDefault.Light.GridView</item>
+        <item name="imageButtonStyle">@style/Widget.DeviceDefault.Light.ImageButton</item>
+        <item name="imageWellStyle">@style/Widget.DeviceDefault.Light.ImageWell</item>
+        <item name="listViewStyle">@style/Widget.DeviceDefault.Light.ListView</item>
+        <item name="listViewWhiteStyle">@style/Widget.DeviceDefault.Light.ListView.White</item>
+        <item name="popupWindowStyle">@style/Widget.DeviceDefault.Light.PopupWindow</item>
+        <item name="progressBarStyle">@style/Widget.DeviceDefault.Light.ProgressBar</item>
+        <item name="progressBarStyleHorizontal">@style/Widget.DeviceDefault.Light.ProgressBar.Horizontal</item>
+        <item name="progressBarStyleSmall">@style/Widget.DeviceDefault.Light.ProgressBar.Small</item>
+        <item name="progressBarStyleSmallTitle">@style/Widget.DeviceDefault.Light.ProgressBar.Small.Title</item>
+        <item name="progressBarStyleLarge">@style/Widget.DeviceDefault.Light.ProgressBar.Large</item>
+        <item name="progressBarStyleInverse">@style/Widget.DeviceDefault.Light.ProgressBar.Inverse</item>
+        <item name="progressBarStyleSmallInverse">@style/Widget.DeviceDefault.Light.ProgressBar.Small.Inverse</item>
+        <item name="progressBarStyleLargeInverse">@style/Widget.DeviceDefault.Light.ProgressBar.Large.Inverse</item>
+        <item name="seekBarStyle">@style/Widget.DeviceDefault.Light.SeekBar</item>
+        <item name="ratingBarStyle">@style/Widget.DeviceDefault.Light.RatingBar</item>
+        <item name="ratingBarStyleIndicator">@style/Widget.DeviceDefault.Light.RatingBar.Indicator</item>
+        <item name="ratingBarStyleSmall">@style/Widget.DeviceDefault.Light.RatingBar.Small</item>
+        <item name="radioButtonStyle">@style/Widget.DeviceDefault.Light.CompoundButton.RadioButton</item>
+        <item name="scrollViewStyle">@style/Widget.DeviceDefault.Light.ScrollView</item>
+        <item name="horizontalScrollViewStyle">@style/Widget.DeviceDefault.Light.HorizontalScrollView</item>
+        <item name="dropDownSpinnerStyle">@style/Widget.DeviceDefault.Light.Spinner.DropDown</item>
+        <item name="starStyle">@style/Widget.DeviceDefault.Light.CompoundButton.Star</item>
+        <item name="tabWidgetStyle">@style/Widget.DeviceDefault.Light.TabWidget</item>
+        <item name="textViewStyle">@style/Widget.DeviceDefault.Light.TextView</item>
+        <item name="webTextViewStyle">@style/Widget.DeviceDefault.Light.WebTextView</item>
+        <item name="webViewStyle">@style/Widget.DeviceDefault.Light.WebView</item>
+        <item name="dropDownItemStyle">@style/Widget.DeviceDefault.Light.DropDownItem</item>
+        <item name="spinnerDropDownItemStyle">@style/Widget.DeviceDefault.Light.DropDownItem.Spinner</item>
+        <item name="spinnerItemStyle">@style/Widget.DeviceDefault.Light.TextView.SpinnerItem</item>
+        <item name="dropDownHintAppearance">@style/TextAppearance.DeviceDefault.Widget.DropDownHint</item>
+        <item name="keyboardViewStyle">@style/Widget.DeviceDefault.KeyboardView</item>
+        <item name="quickContactBadgeStyleWindowSmall">@style/Widget.DeviceDefault.QuickContactBadge.WindowSmall</item>
+        <item name="quickContactBadgeStyleWindowMedium">@style/Widget.DeviceDefault.QuickContactBadge.WindowMedium</item>
+        <item name="quickContactBadgeStyleWindowLarge">@style/Widget.DeviceDefault.QuickContactBadge.WindowLarge</item>
+        <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowSmall</item>
+        <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowMedium</item>
+        <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.DeviceDefault.QuickContactBadgeSmall.WindowLarge</item>
+        <item name="listPopupWindowStyle">@style/Widget.DeviceDefault.Light.ListPopupWindow</item>
+        <item name="popupMenuStyle">@style/Widget.DeviceDefault.Light.PopupMenu</item>
+        <item name="stackViewStyle">@style/Widget.DeviceDefault.Light.StackView</item>
 
         <!-- Preference styles -->
-        <item name="preferenceScreenStyle">@android:style/Preference.DeviceDefault.PreferenceScreen</item>
-        <item name="preferenceCategoryStyle">@android:style/Preference.DeviceDefault.Category</item>
-        <item name="preferenceStyle">@android:style/Preference.DeviceDefault</item>
-        <item name="preferenceInformationStyle">@android:style/Preference.DeviceDefault.Information</item>
-        <item name="checkBoxPreferenceStyle">@android:style/Preference.DeviceDefault.CheckBoxPreference</item>
-        <item name="switchPreferenceStyle">@android:style/Preference.DeviceDefault.SwitchPreference</item>
-        <item name="yesNoPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item>
-        <item name="dialogPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference</item>
-        <item name="editTextPreferenceStyle">@android:style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item>
-        <item name="ringtonePreferenceStyle">@android:style/Preference.DeviceDefault.RingtonePreference</item>
+        <item name="preferenceScreenStyle">@style/Preference.DeviceDefault.PreferenceScreen</item>
+        <item name="preferenceCategoryStyle">@style/Preference.DeviceDefault.Category</item>
+        <item name="preferenceStyle">@style/Preference.DeviceDefault</item>
+        <item name="preferenceInformationStyle">@style/Preference.DeviceDefault.Information</item>
+        <item name="checkBoxPreferenceStyle">@style/Preference.DeviceDefault.CheckBoxPreference</item>
+        <item name="switchPreferenceStyle">@style/Preference.DeviceDefault.SwitchPreference</item>
+        <item name="yesNoPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.YesNoPreference</item>
+        <item name="dialogPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference</item>
+        <item name="editTextPreferenceStyle">@style/Preference.DeviceDefault.DialogPreference.EditTextPreference</item>
+        <item name="ringtonePreferenceStyle">@style/Preference.DeviceDefault.RingtonePreference</item>
 
         <!-- Action bar styles -->
-        <item name="actionDropDownStyle">@android:style/Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar</item>
-        <item name="actionButtonStyle">@android:style/Widget.DeviceDefault.Light.ActionButton</item>
-        <item name="actionOverflowButtonStyle">@android:style/Widget.DeviceDefault.Light.ActionButton.Overflow</item>
+        <item name="actionDropDownStyle">@style/Widget.DeviceDefault.Light.Spinner.DropDown.ActionBar</item>
+        <item name="actionButtonStyle">@style/Widget.DeviceDefault.Light.ActionButton</item>
+        <item name="actionOverflowButtonStyle">@style/Widget.DeviceDefault.Light.ActionButton.Overflow</item>
         <item name="actionBarTabStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabView</item>
         <item name="actionBarTabBarStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabBar</item>
         <item name="actionBarTabTextStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabText</item>
         <item name="actionModeStyle">@style/Widget.DeviceDefault.Light.ActionMode</item>
         <item name="actionModeCloseButtonStyle">@style/Widget.DeviceDefault.Light.ActionButton.CloseMode</item>
-        <item name="actionBarStyle">@android:style/Widget.DeviceDefault.Light.ActionBar</item>
-        <item name="actionModePopupWindowStyle">@android:style/Widget.DeviceDefault.Light.PopupWindow.ActionMode</item>
+        <item name="actionBarStyle">@style/Widget.DeviceDefault.Light.ActionBar</item>
+        <item name="actionModePopupWindowStyle">@style/Widget.DeviceDefault.Light.PopupWindow.ActionMode</item>
 
-        <item name="buttonBarStyle">@android:style/DeviceDefault.Light.ButtonBar</item>
-        <item name="segmentedButtonStyle">@android:style/DeviceDefault.Light.SegmentedButton</item>
+        <item name="buttonBarStyle">@style/DeviceDefault.Light.ButtonBar</item>
+        <item name="segmentedButtonStyle">@style/DeviceDefault.Light.SegmentedButton</item>
 
         <item name="searchDialogTheme">@style/Theme.DeviceDefault.Light.SearchBar</item>
 
@@ -363,208 +447,118 @@
         <!-- TimePicker style -->
         <item name="timePickerStyle">@style/Widget.DeviceDefault.Light.TimePicker</item>
 
+        <!-- TimePicker Header time label text appearance -->
+        <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.DeviceDefault.TimePicker.TimeLabel</item>
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.DeviceDefault.TimePicker.AmPmLabel</item>
+
+        <!-- TimePicker dialog theme -->
+        <item name="timePickerDialogTheme">@style/Theme.DeviceDefault.Light.Dialog.TimePicker</item>
+
         <!-- DatePicker style -->
         <item name="datePickerStyle">@style/Widget.DeviceDefault.Light.DatePicker</item>
 
-        <item name="mediaRouteButtonStyle">@android:style/Widget.DeviceDefault.Light.MediaRouteButton</item>
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar -->
-    <style name="Theme.DeviceDefault.Light.NoActionBar" parent="Theme.Holo.Light.NoActionBar" >
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar.
-         This theme sets {@link android.R.attr#windowFullscreen} to true.  -->
-    <style name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" parent="Theme.Holo.Light.NoActionBar.Fullscreen" >
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar
-    and extending in to overscan region.  This theme
-    sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
-    to true. -->
-    <style name="Theme.DeviceDefault.Light.NoActionBar.Overscan"
-           parent="Theme.Holo.Light.NoActionBar.Overscan" >
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Light} that has no title bar and translucent
-         system decor.  This theme sets {@link android.R.attr#windowTranslucentStatus} and
-         {@link android.R.attr#windowTranslucentNavigation} to true. -->
-    <style name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor"
-           parent="Theme.Holo.Light.NoActionBar.TranslucentDecor" >
-    </style>
-    <!-- DeviceDefault theme for dialog windows and activities. This changes the window to be
-    floating (not fill the entire screen), and puts a frame around its contents. You can set this
-    theme on an activity if you would like to make an activity that looks like a Dialog. -->
-    <style name="Theme.DeviceDefault.Dialog" parent="Theme.Holo.Dialog" >
-        <item name="android:windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault</item>
-        <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Dialog</item>
-
-        <item name="android:buttonBarStyle">@android:style/DeviceDefault.ButtonBar.AlertDialog</item>
-        <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Button.Borderless.Small</item>
-
-        <item name="textAppearance">@android:style/TextAppearance.DeviceDefault</item>
-        <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Inverse</item>
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Dialog} that has a nice minimum width for a
-    regular dialog. -->
-    <style name="Theme.DeviceDefault.Dialog.MinWidth" parent="Theme.Holo.Dialog.MinWidth" >
-
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Dialog} without an action bar -->
-    <style name="Theme.DeviceDefault.Dialog.NoActionBar" parent="Theme.Holo.Dialog.NoActionBar" >
-
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Dialog_NoActionBar} that has a nice minimum width
-    for a regular dialog. -->
-    <style name="Theme.DeviceDefault.Dialog.NoActionBar.MinWidth" parent="Theme.Holo.Dialog.NoActionBar.MinWidth" >
-
+        <item name="mediaRouteButtonStyle">@style/Widget.DeviceDefault.Light.MediaRouteButton</item>
     </style>
 
-    <!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
-    <style name="Theme.DeviceDefault.Dialog.FixedSize">
-        <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item>
-        <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item>
-        <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item>
-        <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item>
-    </style>
-
-    <!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. -->
-    <style name="Theme.DeviceDefault.Dialog.NoActionBar.FixedSize">
-        <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item>
-        <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item>
-        <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item>
-        <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item>
-    </style>
-
-    <!-- DeviceDefault light theme for dialog windows and activities. This changes the window to be
-    floating (not fill the entire screen), and puts a frame around its contents. You can set this
-    theme on an activity if you would like to make an activity that looks like a Dialog.-->
-    <style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Holo.Light.Dialog" >
-        <item name="android:windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault.Light</item>
-        <item name="android:windowAnimationStyle">@android:style/Animation.DeviceDefault.Dialog</item>
-
-        <item name="android:buttonBarStyle">@android:style/DeviceDefault.Light.ButtonBar.AlertDialog</item>
-        <item name="borderlessButtonStyle">@android:style/Widget.DeviceDefault.Light.Button.Borderless.Small</item>
-
-        <item name="textAppearance">@android:style/TextAppearance.DeviceDefault.Light</item>
-        <item name="textAppearanceInverse">@android:style/TextAppearance.DeviceDefault.Light.Inverse</item>
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} that has a nice minimum width for a
-    regular dialog. -->
-    <style name="Theme.DeviceDefault.Light.Dialog.MinWidth" parent="Theme.Holo.Light.Dialog.MinWidth" >
-
-    </style>
-     <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} without an action bar -->
-    <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar" parent="Theme.Holo.Light.Dialog.NoActionBar" >
-
-    </style>
-    <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog_NoActionBar} that has a nice minimum
-    width for a regular dialog. -->
-    <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" parent="Theme.Holo.Light.Dialog.NoActionBar.MinWidth" >
-
-    </style>
-
-    <!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
-    <style name="Theme.DeviceDefault.Light.Dialog.FixedSize">
-        <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item>
-        <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item>
-        <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item>
-        <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item>
-    </style>
-
-    <!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. -->
-    <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.FixedSize">
-        <item name="windowFixedWidthMajor">@android:dimen/dialog_fixed_width_major</item>
-        <item name="windowFixedWidthMinor">@android:dimen/dialog_fixed_width_minor</item>
-        <item name="windowFixedHeightMajor">@android:dimen/dialog_fixed_height_major</item>
-        <item name="windowFixedHeightMinor">@android:dimen/dialog_fixed_height_minor</item>
-    </style>
-
-    <!-- DeviceDefault theme for a window that will be displayed either full-screen on smaller
-    screens (small, normal) or as a dialog on larger screens (large, xlarge). -->
-    <style name="Theme.DeviceDefault.DialogWhenLarge" parent="Theme.Holo.DialogWhenLarge" >
-
-    </style>
-    <!-- DeviceDefault theme for a window without an action bar that will be displayed either
-    full-screen on smaller screens (small, normal) or as a dialog on larger screens (large,
-    xlarge). -->
-    <style name="Theme.DeviceDefault.DialogWhenLarge.NoActionBar" parent="Theme.Holo.DialogWhenLarge.NoActionBar" >
-
-    </style>
-    <!-- DeviceDefault light theme for a window that will be displayed either full-screen on smaller
-    screens (small, normal) or as a dialog on larger screens (large, xlarge). -->
-    <style name="Theme.DeviceDefault.Light.DialogWhenLarge" parent="Theme.Holo.Light.DialogWhenLarge" >
-
-    </style>
-    <!-- DeviceDefault light theme for a window without an action bar that will be displayed either
-    full-screen on smaller screens (small, normal) or as a dialog on larger screens (large,
-    xlarge). -->
-    <style name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" parent="Theme.Holo.Light.DialogWhenLarge.NoActionBar" >
-
-    </style>
-
-    <!-- DeviceDefault theme for a presentation window on a secondary display. -->
-    <style name="Theme.DeviceDefault.Dialog.Presentation" parent="Theme.Holo.Dialog.Presentation">
-    </style>
-
-    <!-- DeviceDefault light theme for a presentation window on a secondary display. -->
-    <style name="Theme.DeviceDefault.Light.Dialog.Presentation" parent="Theme.Holo.Light.Dialog.Presentation">
-    </style>
-
-    <!-- DeviceDefault theme for panel windows. This removes all extraneous window
-    decorations, so you basically have an empty rectangle in which to place your content. It makes
-    the window floating, with a transparent background, and turns off dimming behind the window. -->
-    <style name="Theme.DeviceDefault.Panel" parent="Theme.Holo.Panel" >
-
-    </style>
-    <!-- DeviceDefault light theme for panel windows. This removes all extraneous window
-    decorations, so you basically have an empty rectangle in which to place your content. It makes
-    the window floating, with a transparent background, and turns off dimming behind the window. -->
-    <style name="Theme.DeviceDefault.Light.Panel" parent="Theme.Holo.Light.Panel" >
-
-    </style>
-    <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
-    behind them. -->
-    <style name="Theme.DeviceDefault.Wallpaper" parent="Theme.Holo.Wallpaper" >
-
-    </style>
-    <!-- DeviceDefault theme for windows that want to have the user's selected wallpaper appear
-    behind them and without an action bar. -->
-    <style name="Theme.DeviceDefault.Wallpaper.NoTitleBar" parent="Theme.Holo.Wallpaper.NoTitleBar" >
-
-    </style>
-    <!-- DeviceDefault style for input methods, which is used by the
-         {@link android.inputmethodservice.InputMethodService} class.-->
-    <style name="Theme.DeviceDefault.InputMethod" parent="Theme.Holo.InputMethod" >
-
-    </style>
     <!-- Variant of the DeviceDefault (light) theme that has a solid (opaque) action bar with an
     inverse color profile. -->
-    <style name="Theme.DeviceDefault.Light.DarkActionBar" parent="Theme.Holo.Light.DarkActionBar" >
-        <item name="android:actionBarStyle">@android:style/Widget.DeviceDefault.Light.ActionBar.Solid.Inverse</item>
-
-        <item name="actionDropDownStyle">@android:style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item>
-        <item name="actionButtonStyle">@android:style/Widget.DeviceDefault.ActionButton</item>
-        <item name="actionOverflowButtonStyle">@android:style/Widget.DeviceDefault.ActionButton.Overflow</item>
+    <style name="Theme.DeviceDefault.Light.DarkActionBar" parent="Theme.Quantum.Light.DarkActionBar" >
+        <item name="actionBarStyle">@style/Widget.DeviceDefault.Light.ActionBar.Solid.Inverse</item>
+        <item name="actionDropDownStyle">@style/Widget.DeviceDefault.Spinner.DropDown.ActionBar</item>
+        <item name="actionButtonStyle">@style/Widget.DeviceDefault.ActionButton</item>
+        <item name="actionOverflowButtonStyle">@style/Widget.DeviceDefault.ActionButton.Overflow</item>
         <item name="actionBarTabStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabView.Inverse</item>
         <item name="actionBarTabBarStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabBar.Inverse</item>
         <item name="actionBarTabTextStyle">@style/Widget.DeviceDefault.Light.ActionBar.TabText.Inverse</item>
         <item name="actionModeStyle">@style/Widget.DeviceDefault.Light.ActionMode.Inverse</item>
         <item name="actionModeCloseButtonStyle">@style/Widget.DeviceDefault.ActionButton.CloseMode</item>
-        <item name="actionModePopupWindowStyle">@android:style/Widget.DeviceDefault.PopupWindow.ActionMode</item>
-
+        <item name="actionModePopupWindowStyle">@style/Widget.DeviceDefault.PopupWindow.ActionMode</item>
     </style>
 
-    <style name="Theme.DeviceDefault.Dialog.Alert" parent="Theme.Holo.Dialog.Alert">
-        <item name="windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault</item>
-    </style>
-    <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Holo.Light.Dialog.Alert">
-        <item name="windowTitleStyle">@android:style/DialogWindowTitle.DeviceDefault.Light</item>
-    </style>
-    <style name="Theme.DeviceDefault.SearchBar" parent="Theme.Holo.SearchBar">
+    <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar -->
+    <style name="Theme.DeviceDefault.Light.NoActionBar" parent="Theme.Quantum.Light.NoActionBar"  />
 
-    </style>
-    <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.Holo.Light.SearchBar">
+    <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar.
+         This theme sets {@link android.R.attr#windowFullscreen} to true.  -->
+    <style name="Theme.DeviceDefault.Light.NoActionBar.Fullscreen" parent="Theme.Quantum.Light.NoActionBar.Fullscreen"  />
 
+    <!-- Variant of {@link #Theme_DeviceDefault_Light} with no action bar and no status bar
+    and extending in to overscan region.  This theme
+    sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
+    to true. -->
+    <style name="Theme.DeviceDefault.Light.NoActionBar.Overscan" parent="Theme.Quantum.Light.NoActionBar.Overscan" />
+
+    <!-- Variant of {@link #Theme_DeviceDefault_Light} that has no title bar and translucent
+         system decor.  This theme sets {@link android.R.attr#windowTranslucentStatus} and
+         {@link android.R.attr#windowTranslucentNavigation} to true. -->
+    <style name="Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor" parent="Theme.Quantum.Light.NoActionBar.TranslucentDecor" />
+
+    <!-- DeviceDefault light theme for dialog windows and activities. This changes the window to be
+    floating (not fill the entire screen), and puts a frame around its contents. You can set this
+    theme on an activity if you would like to make an activity that looks like a Dialog.-->
+    <style name="Theme.DeviceDefault.Light.Dialog" parent="Theme.Quantum.Light.Dialog" >
+        <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault.Light</item>
+        <item name="windowAnimationStyle">@style/Animation.DeviceDefault.Dialog</item>
+
+        <item name="buttonBarStyle">@style/DeviceDefault.Light.ButtonBar.AlertDialog</item>
+        <item name="borderlessButtonStyle">@style/Widget.DeviceDefault.Light.Button.Borderless.Small</item>
+
+        <item name="textAppearance">@style/TextAppearance.DeviceDefault</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.DeviceDefault.Inverse</item>
     </style>
 
-    <style name="Theme.DeviceDefault.Dialog.NoFrame" parent="Theme.Holo.Dialog.NoFrame">
+    <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} that has a nice minimum width for a
+    regular dialog. -->
+    <style name="Theme.DeviceDefault.Light.Dialog.MinWidth" parent="Theme.Quantum.Light.Dialog.MinWidth" />
+
+     <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog} without an action bar -->
+    <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar" parent="Theme.Quantum.Light.Dialog.NoActionBar" />
+
+    <!-- Variant of {@link #Theme_DeviceDefault_Light_Dialog_NoActionBar} that has a nice minimum
+    width for a regular dialog. -->
+    <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.MinWidth" parent="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth" />
+
+    <!-- Variant of Theme.DeviceDefault.Dialog that has a fixed size. -->
+    <style name="Theme.DeviceDefault.Light.Dialog.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
     </style>
 
+    <!-- Variant of Theme.DeviceDefault.Dialog.NoActionBar that has a fixed size. -->
+    <style name="Theme.DeviceDefault.Light.Dialog.NoActionBar.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
+    </style>
+
+    <!-- DeviceDefault light theme for a window that will be displayed either full-screen on smaller
+    screens (small, normal) or as a dialog on larger screens (large, xlarge). -->
+    <style name="Theme.DeviceDefault.Light.DialogWhenLarge" parent="Theme.Quantum.Light.DialogWhenLarge"  />
+
+    <!-- DeviceDefault light theme for a window without an action bar that will be displayed either
+    full-screen on smaller screens (small, normal) or as a dialog on larger screens (large,
+    xlarge). -->
+    <style name="Theme.DeviceDefault.Light.DialogWhenLarge.NoActionBar" parent="Theme.Quantum.Light.DialogWhenLarge.NoActionBar"  />
+
+    <!-- DeviceDefault light theme for a presentation window on a secondary display. -->
+    <style name="Theme.DeviceDefault.Light.Dialog.Presentation" parent="Theme.Quantum.Light.Dialog.Presentation" />
+
+    <style name="Theme.DeviceDefault.Light.Dialog.TimePicker" parent="Theme.Quantum.Light.Dialog.TimePicker"/>
+
+    <!-- DeviceDefault light theme for panel windows. This removes all extraneous window
+    decorations, so you basically have an empty rectangle in which to place your content. It makes
+    the window floating, with a transparent background, and turns off dimming behind the window. -->
+    <style name="Theme.DeviceDefault.Light.Panel" parent="Theme.Quantum.Light.Panel"  />
+
+    <style name="Theme.DeviceDefault.Light.Dialog.Alert" parent="Theme.Quantum.Light.Dialog.Alert">
+        <item name="windowTitleStyle">@style/DialogWindowTitle.DeviceDefault.Light</item>
+    </style>
+
+    <style name="Theme.DeviceDefault.Light.SearchBar" parent="Theme.Quantum.Light.SearchBar" />
+
 </resources>
diff --git a/core/res/res/values/themes_quantum.xml b/core/res/res/values/themes_quantum.xml
new file mode 100644
index 0000000..e3ac1ad
--- /dev/null
+++ b/core/res/res/values/themes_quantum.xml
@@ -0,0 +1,1131 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!--
+===============================================================
+                        PLEASE READ
+===============================================================
+
+The Quantum themes must not be modified in order to pass CTS.
+Many related themes and styles depend on other values defined in this file.
+If you would like to provide custom themes and styles for your device,
+please see themes_device_defaults.xml.
+
+===============================================================
+                        PLEASE READ
+===============================================================
+ -->
+<resources>
+
+    <!-- Quantum Paper theme (dark version).
+         <p>If you want to ensure that your
+         app consistently uses the Quantum theme at all times, you must explicitly declare it in your
+         manifest. For example, {@code &lt;application android:theme="@style/Theme.Quantum"&gt;}.
+
+         <p>Styles used by the Quantum theme are named using the convention Type.Quantum.Etc
+         (for example, {@code Widget.Quantum.Button} and {@code
+         TextAppearance.Quantum.Widget.PopupMenu.Large}).
+         Specific resources used by Quantum are named using the convention @type/foo_bar_baz_quantum
+         with trailing _dark or _light specifiers if they are not shared between both light and
+         dark versions of the theme. -->
+    <style name="Theme.Quantum">
+        <item name="colorForeground">@color/bright_foreground_quantum_dark</item>
+        <item name="colorForegroundInverse">@color/bright_foreground_quantum_light</item>
+        <item name="colorBackground">@color/background_quantum_dark</item>
+        <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_quantum_dark</item>
+        <item name="disabledAlpha">0.5</item>
+        <item name="backgroundDimAmount">0.6</item>
+
+        <!-- Text styles -->
+        <item name="textAppearance">@style/TextAppearance.Quantum</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
+
+        <item name="textColorPrimary">@color/primary_text_quantum_dark</item>
+        <item name="textColorPrimaryInverse">@color/primary_text_quantum_light</item>
+        <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
+        <item name="textColorSecondary">@color/secondary_text_quantum_dark</item>
+        <item name="textColorSecondaryInverse">@color/secondary_text_quantum_light</item>
+        <item name="textColorTertiary">@color/tertiary_text_quantum_dark</item>
+        <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_light</item>
+        <item name="textColorHint">@color/hint_foreground_quantum_dark</item>
+        <item name="textColorHintInverse">@color/hint_foreground_quantum_light</item>
+        <item name="textColorHighlight">@color/highlighted_text_quantum_dark</item>
+        <item name="textColorHighlightInverse">@color/highlighted_text_quantum_light</item>
+        <item name="textColorLink">@color/quantum_teal_500</item>
+        <item name="textColorLinkInverse">@color/quantum_teal_500</item>
+        <item name="textColorSearchUrl">@color/search_url_text_quantum_dark</item>
+        <item name="textColorAlertDialogListItem">@color/primary_text_quantum_dark</item>
+
+        <item name="textAppearanceLarge">@style/TextAppearance.Quantum.Large</item>
+        <item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Large.Inverse</item>
+        <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Medium</item>
+        <item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Medium.Inverse</item>
+        <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Small</item>
+        <item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Small.Inverse</item>
+        <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.SearchResult.Title</item>
+        <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.SearchResult.Subtitle</item>
+
+        <item name="textAppearanceButton">@style/TextAppearance.Quantum.Widget.Button</item>
+
+        <item name="editTextColor">?attr/textColorPrimary</item>
+        <item name="editTextBackground">@drawable/edit_text_quantum</item>
+
+        <item name="candidatesTextStyleSpans">@string/candidates_style</item>
+
+        <item name="textCheckMark">@drawable/indicator_check_mark_dark</item>
+        <item name="textCheckMarkInverse">@drawable/indicator_check_mark_light</item>
+
+        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Large</item>
+        <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Small</item>
+
+        <!-- Button styles -->
+        <item name="buttonStyle">@style/Widget.Quantum.Button</item>
+        <item name="buttonStyleSmall">@style/Widget.Quantum.Button.Small</item>
+        <item name="buttonStyleInset">@style/Widget.Quantum.Button.Inset</item>
+        <item name="buttonStyleToggle">@style/Widget.Quantum.Button.Toggle</item>
+
+        <item name="switchStyle">@style/Widget.Quantum.CompoundButton.Switch</item>
+        <item name="mediaRouteButtonStyle">@style/Widget.Quantum.MediaRouteButton</item>
+
+        <item name="selectableItemBackground">@drawable/item_background_quantum</item>
+        <item name="borderlessButtonStyle">@style/Widget.Quantum.Button.Borderless</item>
+        <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum</item>
+
+        <!-- List attributes -->
+        <item name="listPreferredItemHeight">64dip</item>
+        <item name="listPreferredItemHeightSmall">48dip</item>
+        <item name="listPreferredItemHeightLarge">80dip</item>
+        <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
+        <item name="textAppearanceListItem">@style/TextAppearance.Quantum.Subhead</item>
+        <item name="textAppearanceListItemSmall">@style/TextAppearance.Quantum.Subhead</item>
+        <item name="textAppearanceListItemSecondary">@style/TextAppearance.Quantum.Body1</item>
+        <item name="listPreferredItemPaddingLeft">16dip</item>
+        <item name="listPreferredItemPaddingRight">16dip</item>
+        <item name="listPreferredItemPaddingStart">16dip</item>
+        <item name="listPreferredItemPaddingEnd">16dip</item>
+
+        <!-- @hide -->
+        <item name="searchResultListItemHeight">58dip</item>
+        <item name="listDivider">@drawable/list_divider_quantum</item>
+        <item name="listSeparatorTextViewStyle">@style/Widget.Quantum.TextView.ListSeparator</item>
+
+        <item name="listChoiceIndicatorSingle">@drawable/btn_radio_quantum</item>
+        <item name="listChoiceIndicatorMultiple">@drawable/btn_check_quantum_anim</item>
+
+        <item name="listChoiceBackgroundIndicator">@drawable/list_selector_quantum</item>
+
+        <item name="activatedBackgroundIndicator">@drawable/activated_background_quantum</item>
+
+        <item name="listDividerAlertDialog">@drawable/list_divider_quantum</item>
+
+        <item name="expandableListPreferredItemPaddingLeft">40dip</item>
+        <item name="expandableListPreferredChildPaddingLeft">?attr/expandableListPreferredItemPaddingLeft</item>
+
+        <item name="expandableListPreferredItemIndicatorLeft">3dip</item>
+        <item name="expandableListPreferredItemIndicatorRight">0dip</item>
+        <item name="expandableListPreferredChildIndicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
+        <item name="expandableListPreferredChildIndicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
+        <item name="findOnPageNextDrawable">@drawable/ic_find_next_quantum</item>
+        <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_quantum</item>
+
+        <!-- Gallery attributes -->
+        <item name="galleryItemBackground">@drawable/gallery_item_background</item>
+
+        <!-- Window attributes -->
+        <item name="windowBackground">@color/background_quantum_dark</item>
+        <item name="windowFrame">@null</item>
+        <item name="windowNoTitle">false</item>
+        <item name="windowFullscreen">false</item>
+        <item name="windowOverscan">false</item>
+        <item name="windowIsFloating">false</item>
+        <item name="windowContentOverlay">@null</item>
+        <item name="windowShowWallpaper">false</item>
+        <item name="windowTitleStyle">@style/WindowTitle.Quantum</item>
+        <item name="windowTitleSize">25dip</item>
+        <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.Quantum</item>
+        <item name="windowContentTransitions">false</item>
+        <item name="windowAnimationStyle">@style/Animation.Quantum.Activity</item>
+        <item name="windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
+        <item name="windowActionBar">true</item>
+        <item name="windowActionModeOverlay">false</item>
+
+        <!-- Dialog attributes -->
+        <item name="dialogTheme">@style/Theme.Quantum.Dialog</item>
+        <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_quantum</item>
+        <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_quantum</item>
+        <item name="dialogTitleDecorLayout">@layout/dialog_title_quantum</item>
+
+        <!-- AlertDialog attributes -->
+        <item name="alertDialogTheme">@style/Theme.Quantum.Dialog.Alert</item>
+        <item name="alertDialogStyle">@style/AlertDialog.Quantum</item>
+        <item name="alertDialogCenterButtons">false</item>
+        <item name="alertDialogIcon">@drawable/ic_dialog_alert_quantum</item>
+
+        <!-- Presentation attributes -->
+        <item name="presentationTheme">@style/Theme.Quantum.Dialog.Presentation</item>
+
+        <!-- Toast attributes -->
+        <item name="toastFrameBackground">@drawable/toast_frame</item>
+
+        <!-- Panel attributes -->
+        <item name="panelBackground">?attr/colorBackground</item>
+        <item name="panelFullBackground">@drawable/menu_background_fill_parent_width</item>
+        <!-- These three attributes do not seems to be used by the framework. Declared public though -->
+        <item name="panelColorBackground">#000</item>
+        <item name="panelColorForeground">?attr/textColorPrimary</item>
+        <item name="panelTextAppearance">?attr/textAppearance</item>
+
+        <item name="panelMenuIsCompact">true</item>
+        <item name="panelMenuListWidth">250dip</item>
+        <item name="panelMenuListTheme">@style/Theme.Quantum.CompactMenu</item>
+
+        <!-- Scrollbar attributes -->
+        <item name="scrollbarFadeDuration">250</item>
+        <item name="scrollbarDefaultDelayBeforeFade">300</item>
+        <item name="scrollbarSize">10dip</item>
+        <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_quantum</item>
+        <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_quantum</item>
+        <item name="scrollbarTrackHorizontal">@null</item>
+        <item name="scrollbarTrackVertical">@null</item>
+
+        <!-- Text selection handle attributes -->
+        <item name="textSelectHandleLeft">@drawable/text_select_handle_left_quantum</item>
+        <item name="textSelectHandleRight">@drawable/text_select_handle_right_quantum</item>
+        <item name="textSelectHandle">@drawable/text_select_handle_middle_quantum</item>
+        <item name="textSelectHandleWindowStyle">@style/Widget.Quantum.TextSelectHandle</item>
+        <item name="textSuggestionsWindowStyle">@style/Widget.Quantum.TextSuggestionsPopupWindow</item>
+        <item name="textCursorDrawable">@drawable/text_cursor_quantum</item>
+
+        <!-- Widget styles -->
+        <item name="absListViewStyle">@style/Widget.Quantum.AbsListView</item>
+        <item name="autoCompleteTextViewStyle">@style/Widget.Quantum.AutoCompleteTextView</item>
+        <item name="checkboxStyle">@style/Widget.Quantum.CompoundButton.CheckBox</item>
+        <item name="checkedTextViewStyle">@style/Widget.Quantum.CheckedTextView</item>
+        <item name="dropDownListViewStyle">@style/Widget.Quantum.ListView.DropDown</item>
+        <item name="editTextStyle">@style/Widget.Quantum.EditText</item>
+        <item name="expandableListViewStyle">@style/Widget.Quantum.ExpandableListView</item>
+        <item name="expandableListViewWhiteStyle">@style/Widget.Quantum.ExpandableListView.White</item>
+        <item name="fastScrollStyle">@style/Widget.Quantum.FastScroll</item>
+        <item name="galleryStyle">@style/Widget.Quantum.Gallery</item>
+        <item name="gestureOverlayViewStyle">@style/Widget.Quantum.GestureOverlayView</item>
+        <item name="gridViewStyle">@style/Widget.Quantum.GridView</item>
+        <item name="imageButtonStyle">@style/Widget.Quantum.ImageButton</item>
+        <item name="imageWellStyle">@style/Widget.Quantum.ImageWell</item>
+        <item name="listViewStyle">@style/Widget.Quantum.ListView</item>
+        <item name="listViewWhiteStyle">@style/Widget.Quantum.ListView.White</item>
+        <item name="popupWindowStyle">@style/Widget.Quantum.PopupWindow</item>
+        <item name="progressBarStyle">@style/Widget.Quantum.ProgressBar</item>
+        <item name="progressBarStyleHorizontal">@style/Widget.Quantum.ProgressBar.Horizontal</item>
+        <item name="progressBarStyleSmall">@style/Widget.Quantum.ProgressBar.Small</item>
+        <item name="progressBarStyleSmallTitle">@style/Widget.Quantum.ProgressBar.Small.Title</item>
+        <item name="progressBarStyleLarge">@style/Widget.Quantum.ProgressBar.Large</item>
+        <item name="progressBarStyleInverse">@style/Widget.Quantum.ProgressBar.Inverse</item>
+        <item name="progressBarStyleSmallInverse">@style/Widget.Quantum.ProgressBar.Small.Inverse</item>
+        <item name="progressBarStyleLargeInverse">@style/Widget.Quantum.ProgressBar.Large.Inverse</item>
+        <item name="seekBarStyle">@style/Widget.Quantum.SeekBar</item>
+        <item name="ratingBarStyle">@style/Widget.Quantum.RatingBar</item>
+        <item name="ratingBarStyleIndicator">@style/Widget.Quantum.RatingBar.Indicator</item>
+        <item name="ratingBarStyleSmall">@style/Widget.Quantum.RatingBar.Small</item>
+        <item name="radioButtonStyle">@style/Widget.Quantum.CompoundButton.RadioButton</item>
+        <item name="scrollViewStyle">@style/Widget.Quantum.ScrollView</item>
+        <item name="horizontalScrollViewStyle">@style/Widget.Quantum.HorizontalScrollView</item>
+        <item name="spinnerStyle">?attr/dropDownSpinnerStyle</item>
+        <item name="dropDownSpinnerStyle">@style/Widget.Quantum.Spinner.DropDown</item>
+        <item name="starStyle">@style/Widget.Quantum.CompoundButton.Star</item>
+        <item name="tabWidgetStyle">@style/Widget.Quantum.TabWidget</item>
+        <item name="textViewStyle">@style/Widget.Quantum.TextView</item>
+        <item name="errorMessageBackground">@drawable/popup_inline_error_holo_dark</item>
+        <item name="errorMessageAboveBackground">@drawable/popup_inline_error_above_holo_dark</item>
+        <item name="webTextViewStyle">@style/Widget.Quantum.WebTextView</item>
+        <item name="webViewStyle">@style/Widget.Quantum.WebView</item>
+        <item name="dropDownItemStyle">@style/Widget.Quantum.DropDownItem</item>
+        <item name="spinnerDropDownItemStyle">@style/Widget.Quantum.DropDownItem.Spinner</item>
+        <item name="spinnerItemStyle">@style/Widget.Quantum.TextView.SpinnerItem</item>
+        <item name="dropDownHintAppearance">@style/TextAppearance.Quantum.Widget.DropDownHint</item>
+        <item name="keyboardViewStyle">@style/Widget.Quantum.KeyboardView</item>
+        <item name="quickContactBadgeStyleWindowSmall">@style/Widget.Quantum.QuickContactBadge.WindowSmall</item>
+        <item name="quickContactBadgeStyleWindowMedium">@style/Widget.Quantum.QuickContactBadge.WindowMedium</item>
+        <item name="quickContactBadgeStyleWindowLarge">@style/Widget.Quantum.QuickContactBadge.WindowLarge</item>
+        <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.Quantum.QuickContactBadgeSmall.WindowSmall</item>
+        <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.Quantum.QuickContactBadgeSmall.WindowMedium</item>
+        <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Quantum.QuickContactBadgeSmall.WindowLarge</item>
+        <item name="listPopupWindowStyle">@style/Widget.Quantum.ListPopupWindow</item>
+        <item name="popupMenuStyle">@style/Widget.Quantum.PopupMenu</item>
+        <item name="stackViewStyle">@style/Widget.Quantum.StackView</item>
+        <item name="activityChooserViewStyle">@style/Widget.Quantum.ActivityChooserView</item>
+        <item name="fragmentBreadCrumbsStyle">@style/Widget.Quantum.FragmentBreadCrumbs</item>
+
+        <!-- Preference styles -->
+        <item name="preferenceScreenStyle">@style/Preference.Quantum.PreferenceScreen</item>
+        <item name="preferenceFragmentStyle">@style/PreferenceFragment.Quantum</item>
+        <item name="preferenceFragmentPaddingSide">0dip</item>
+        <item name="preferenceCategoryStyle">@style/Preference.Quantum.Category</item>
+        <item name="preferenceStyle">@style/Preference.Quantum</item>
+        <item name="preferenceInformationStyle">@style/Preference.Quantum.Information</item>
+        <item name="checkBoxPreferenceStyle">@style/Preference.Quantum.CheckBoxPreference</item>
+        <item name="switchPreferenceStyle">@style/Preference.Quantum.SwitchPreference</item>
+        <item name="yesNoPreferenceStyle">@style/Preference.Quantum.DialogPreference.YesNoPreference</item>
+        <item name="dialogPreferenceStyle">@style/Preference.Quantum.DialogPreference</item>
+        <item name="editTextPreferenceStyle">@style/Preference.Quantum.DialogPreference.EditTextPreference</item>
+        <item name="ringtonePreferenceStyle">@style/Preference.Quantum.RingtonePreference</item>
+        <item name="preferenceLayoutChild">@layout/preference_child_quantum</item>
+        <item name="detailsElementBackground">?attr/colorBackground</item>
+
+        <!-- Search widget styles -->
+        <item name="searchWidgetCorpusItemBackground">@color/search_widget_corpus_item_background</item>
+
+        <!-- Action bar styles -->
+        <item name="actionDropDownStyle">@style/Widget.Quantum.Spinner.DropDown.ActionBar</item>
+        <item name="actionButtonStyle">@style/Widget.Quantum.ActionButton</item>
+        <item name="actionOverflowButtonStyle">@style/Widget.Quantum.ActionButton.Overflow</item>
+        <item name="actionModeBackground">?attr/colorPrimaryDark</item>
+        <item name="actionModeSplitBackground">?attr/colorPrimaryDark</item>
+        <item name="actionModeCloseDrawable">@drawable/ic_cab_done_quantum</item>
+        <item name="actionBarTabStyle">@style/Widget.Quantum.ActionBar.TabView</item>
+        <item name="actionBarTabBarStyle">@style/Widget.Quantum.ActionBar.TabBar</item>
+        <item name="actionBarTabTextStyle">@style/Widget.Quantum.ActionBar.TabText</item>
+        <item name="actionModeStyle">@style/Widget.Quantum.ActionMode</item>
+        <item name="actionModeCloseButtonStyle">@style/Widget.Quantum.ActionButton.CloseMode</item>
+        <item name="actionBarStyle">@style/Widget.Quantum.ActionBar.Solid</item>
+        <item name="actionBarSize">@dimen/action_bar_default_height_quantum</item>
+        <item name="actionModePopupWindowStyle">@style/Widget.Quantum.PopupWindow.ActionMode</item>
+        <item name="actionBarWidgetTheme">@null</item>
+        <item name="actionBarTheme">@style/ThemeOverlay.Quantum.ActionBarWidget</item>
+        <item name="actionBarItemBackground">@drawable/item_background_quantum</item>
+
+        <item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum</item>
+        <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_quantum</item>
+        <item name="actionModePasteDrawable">@drawable/ic_menu_paste_quantum</item>
+        <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_quantum</item>
+        <item name="actionModeShareDrawable">@drawable/ic_menu_share_quantum</item>
+        <item name="actionModeFindDrawable">@drawable/ic_menu_find_quantum</item>
+        <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_quantum</item>
+
+        <item name="dividerVertical">?attr/listDivider</item>
+        <item name="dividerHorizontal">?attr/listDivider</item>
+        <item name="buttonBarStyle">@style/Widget.Quantum.ButtonBar</item>
+        <item name="buttonBarButtonStyle">@style/Widget.Quantum.Button.Borderless.Small</item>
+        <item name="segmentedButtonStyle">@style/Widget.Quantum.SegmentedButton</item>
+
+        <!-- SearchView attributes -->
+        <item name="searchDropdownBackground">?attr/colorBackground</item>
+        <item name="searchViewTextField">@drawable/textfield_search_quantum</item>
+        <item name="searchViewTextFieldRight">@drawable/textfield_search_quantum</item>
+        <item name="searchViewCloseIcon">@android:drawable/ic_clear_quantum</item>
+        <item name="searchViewSearchIcon">@android:drawable/ic_search_api_quantum</item>
+        <item name="searchViewGoIcon">@android:drawable/ic_go_search_api_quantum</item>
+        <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search_api_quantum</item>
+        <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_quantum</item>
+
+        <item name="searchDialogTheme">@style/Theme.Quantum.SearchBar</item>
+
+        <!-- PreferenceFrameLayout attributes -->
+        <item name="preferenceFrameLayoutStyle">@style/Widget.Quantum.PreferenceFrameLayout</item>
+
+        <!-- NumberPicker style-->
+        <item name="numberPickerStyle">@style/Widget.Quantum.NumberPicker</item>
+
+        <!-- CalendarView style-->
+        <item name="calendarViewStyle">@style/Widget.Quantum.CalendarView</item>
+
+        <!-- TimePicker style -->
+        <item name="timePickerStyle">@style/Widget.Quantum.TimePicker</item>
+
+        <!-- TimePicker background color -->
+        <item name="timePickerHeaderBackgroundColor">?colorBackground</item>
+
+        <!-- TimePicker Header time label text appearance -->
+        <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.TimeLabel</item>
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.AmPmLabel</item>
+
+        <!-- TimePicker dialog theme -->
+        <item name="timePickerDialogTheme">@style/Theme.Quantum.Dialog.TimePicker</item>
+
+        <!-- DatePicker style -->
+        <item name="datePickerStyle">@style/Widget.Quantum.DatePicker</item>
+
+        <!-- TODO: This belongs in a FastScroll style -->
+        <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_quantum</item>
+        <item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_dark</item>
+        <item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_dark</item>
+        <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_quantum</item>
+        <item name="fastScrollOverlayPosition">atThumb</item>
+
+        <!-- Color palette -->
+        <item name="colorPrimaryDark">@color/quantum_blue_700</item>
+        <item name="colorPrimary">@color/quantum_blue_500</item>
+        <item name="colorPrimaryLight">@color/quantum_blue_100</item>
+        <item name="colorAccent">@color/quantum_teal_A200</item>
+
+        <item name="colorControlNormal">?attr/textColorSecondary</item>
+        <item name="colorControlActivated">?attr/colorPrimary</item>
+        <item name="colorButtonNormal">@color/quantum_grey_700</item>
+        <item name="colorButtonPressed">@color/quantum_grey_500</item>
+        <!-- TODO: Remove these attrs and move into button style. -->
+        <item name="colorButtonNormalColored">?attr/colorPrimary</item>
+        <item name="colorButtonPressedColored">?attr/colorPrimaryLight</item>
+    </style>
+
+    <!-- Quantum Paper theme (light version). -->
+    <style name="Theme.Quantum.Light" parent="Theme.Light">
+        <item name="colorForeground">@color/bright_foreground_quantum_light</item>
+        <item name="colorForegroundInverse">@color/bright_foreground_quantum_dark</item>
+        <item name="colorBackground">@color/background_quantum_light</item>
+        <item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_quantum_light</item>
+        <item name="disabledAlpha">0.5</item>
+        <item name="backgroundDimAmount">0.6</item>
+
+        <!-- Text styles -->
+        <item name="textAppearance">@style/TextAppearance.Quantum</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
+
+        <item name="textColorPrimary">@color/primary_text_quantum_light</item>
+        <item name="textColorPrimaryInverse">@color/primary_text_quantum_dark</item>
+        <item name="textColorSecondary">@color/secondary_text_quantum_light</item>
+        <item name="textColorSecondaryInverse">@color/secondary_text_quantum_dark</item>
+        <item name="textColorTertiary">@color/tertiary_text_quantum_light</item>
+        <item name="textColorTertiaryInverse">@color/tertiary_text_quantum_dark</item>
+        <item name="textColorPrimaryDisableOnly">@color/primary_text_disable_only_quantum_light</item>
+        <item name="textColorPrimaryInverseDisableOnly">@color/primary_text_disable_only_quantum_dark</item>
+        <item name="textColorHint">@color/hint_foreground_quantum_light</item>
+        <item name="textColorHintInverse">@color/hint_foreground_quantum_dark</item>
+        <item name="textColorHighlight">@color/highlighted_text_quantum_light</item>
+        <item name="textColorHighlightInverse">@color/highlighted_text_quantum_dark</item>
+        <item name="textColorLink">@color/quantum_teal_500</item>
+        <item name="textColorLinkInverse">@color/quantum_teal_500</item>
+        <item name="textColorSearchUrl">@color/search_url_text_quantum_light</item>
+        <item name="textColorAlertDialogListItem">@color/primary_text_quantum_light</item>
+
+        <item name="textAppearanceLarge">@style/TextAppearance.Quantum.Large</item>
+        <item name="textAppearanceLargeInverse">@style/TextAppearance.Quantum.Large.Inverse</item>
+        <item name="textAppearanceMedium">@style/TextAppearance.Quantum.Medium</item>
+        <item name="textAppearanceMediumInverse">@style/TextAppearance.Quantum.Medium.Inverse</item>
+        <item name="textAppearanceSmall">@style/TextAppearance.Quantum.Small</item>
+        <item name="textAppearanceSmallInverse">@style/TextAppearance.Quantum.Small.Inverse</item>
+        <item name="textAppearanceSearchResultTitle">@style/TextAppearance.Quantum.SearchResult.Title</item>
+        <item name="textAppearanceSearchResultSubtitle">@style/TextAppearance.Quantum.SearchResult.Subtitle</item>
+
+        <item name="textAppearanceButton">@style/TextAppearance.Quantum.Widget.Button</item>
+
+        <item name="editTextColor">?attr/textColorPrimary</item>
+        <item name="editTextBackground">@drawable/edit_text_quantum</item>
+
+        <item name="candidatesTextStyleSpans">@string/candidates_style</item>
+
+        <item name="textCheckMark">@drawable/indicator_check_mark_light</item>
+        <item name="textCheckMarkInverse">@drawable/indicator_check_mark_dark</item>
+
+        <item name="textAppearanceLargePopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Large</item>
+        <item name="textAppearanceSmallPopupMenu">@style/TextAppearance.Quantum.Widget.PopupMenu.Small</item>
+
+        <!-- Button styles -->
+        <item name="buttonStyle">@style/Widget.Quantum.Light.Button</item>
+
+        <item name="buttonStyleSmall">@style/Widget.Quantum.Light.Button.Small</item>
+        <item name="buttonStyleInset">@style/Widget.Quantum.Light.Button.Inset</item>
+
+        <item name="buttonStyleToggle">@style/Widget.Quantum.Light.Button.Toggle</item>
+        <item name="switchStyle">@style/Widget.Quantum.Light.CompoundButton.Switch</item>
+        <item name="mediaRouteButtonStyle">@style/Widget.Quantum.Light.MediaRouteButton</item>
+
+        <item name="selectableItemBackground">@drawable/item_background_quantum</item>
+        <item name="borderlessButtonStyle">@style/Widget.Quantum.Light.Button.Borderless</item>
+        <item name="homeAsUpIndicator">@drawable/ic_ab_back_quantum</item>
+
+        <!-- List attributes -->
+        <item name="listPreferredItemHeight">64dip</item>
+        <item name="listPreferredItemHeightSmall">48dip</item>
+        <item name="listPreferredItemHeightLarge">80dip</item>
+        <item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
+        <item name="textAppearanceListItem">@style/TextAppearance.Quantum.Subhead</item>
+        <item name="textAppearanceListItemSmall">@style/TextAppearance.Quantum.Subhead</item>
+        <item name="textAppearanceListItemSecondary">@style/TextAppearance.Quantum.Body1</item>
+        <item name="listPreferredItemPaddingLeft">16dip</item>
+        <item name="listPreferredItemPaddingRight">16dip</item>
+        <item name="listPreferredItemPaddingStart">16dip</item>
+        <item name="listPreferredItemPaddingEnd">16dip</item>
+
+        <!-- @hide -->
+        <item name="searchResultListItemHeight">58dip</item>
+        <item name="listDivider">@drawable/list_divider_quantum</item>
+        <item name="listSeparatorTextViewStyle">@style/Widget.Quantum.Light.TextView.ListSeparator</item>
+
+        <item name="listChoiceIndicatorSingle">@drawable/btn_radio_quantum</item>
+        <item name="listChoiceIndicatorMultiple">@drawable/btn_check_quantum_anim</item>
+
+        <item name="listChoiceBackgroundIndicator">@drawable/list_selector_quantum</item>
+
+        <item name="activatedBackgroundIndicator">@drawable/activated_background_quantum</item>
+
+        <item name="expandableListPreferredItemPaddingLeft">40dip</item>
+        <item name="expandableListPreferredChildPaddingLeft">?attr/expandableListPreferredItemPaddingLeft</item>
+
+        <item name="expandableListPreferredItemIndicatorLeft">3dip</item>
+        <item name="expandableListPreferredItemIndicatorRight">0dip</item>
+        <item name="expandableListPreferredChildIndicatorLeft">?attr/expandableListPreferredItemIndicatorLeft</item>
+        <item name="expandableListPreferredChildIndicatorRight">?attr/expandableListPreferredItemIndicatorRight</item>
+
+        <item name="listDividerAlertDialog">@drawable/list_divider_quantum</item>
+        <item name="findOnPageNextDrawable">@drawable/ic_find_next_quantum</item>
+        <item name="findOnPagePreviousDrawable">@drawable/ic_find_previous_quantum</item>
+
+        <!-- Gallery attributes -->
+        <item name="galleryItemBackground">@drawable/gallery_item_background</item>
+
+        <!-- Window attributes -->
+        <item name="windowBackground">@color/background_quantum_light</item>
+        <item name="windowFrame">@null</item>
+        <item name="windowNoTitle">false</item>
+        <item name="windowFullscreen">false</item>
+        <item name="windowOverscan">false</item>
+        <item name="windowIsFloating">false</item>
+        <item name="windowContentOverlay">@drawable/ab_solid_shadow_quantum</item>
+        <item name="windowShowWallpaper">false</item>
+        <item name="windowTitleStyle">@style/WindowTitle.Quantum</item>
+        <item name="windowTitleSize">25dip</item>
+        <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground.Quantum</item>
+        <item name="windowAnimationStyle">@style/Animation.Quantum.Activity</item>
+        <item name="windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
+        <item name="windowActionBar">true</item>
+        <item name="windowActionModeOverlay">false</item>
+
+        <!-- Dialog attributes -->
+        <item name="dialogTheme">@style/Theme.Quantum.Light.Dialog</item>
+        <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_quantum</item>
+        <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_quantum</item>
+        <item name="dialogTitleDecorLayout">@layout/dialog_title_quantum</item>
+
+        <!-- AlertDialog attributes -->
+        <item name="alertDialogTheme">@style/Theme.Quantum.Light.Dialog.Alert</item>
+        <item name="alertDialogStyle">@style/AlertDialog.Quantum.Light</item>
+        <item name="alertDialogCenterButtons">false</item>
+        <item name="alertDialogIcon">@drawable/ic_dialog_alert_quantum</item>
+
+        <!-- Presentation attributes -->
+        <item name="presentationTheme">@style/Theme.Quantum.Light.Dialog.Presentation</item>
+
+        <!-- Toast attributes -->
+        <item name="toastFrameBackground">@drawable/toast_frame</item>
+
+        <!-- Panel attributes -->
+        <item name="panelBackground">?attr/colorBackground</item>
+        <item name="panelFullBackground">@drawable/menu_background_fill_parent_width</item>
+        <!-- These three attributes do not seems to be used by the framework. Declared public though -->
+        <item name="panelColorBackground">#000</item>
+        <item name="panelColorForeground">?attr/textColorPrimary</item>
+        <item name="panelTextAppearance">?attr/textAppearance</item>
+
+        <item name="panelMenuIsCompact">true</item>
+        <item name="panelMenuListWidth">250dip</item>
+        <item name="panelMenuListTheme">@style/Theme.Quantum.Light.CompactMenu</item>
+
+        <!-- Scrollbar attributes -->
+        <item name="scrollbarFadeDuration">250</item>
+        <item name="scrollbarDefaultDelayBeforeFade">300</item>
+        <item name="scrollbarSize">10dip</item>
+        <item name="scrollbarThumbHorizontal">@drawable/scrollbar_handle_quantum</item>
+        <item name="scrollbarThumbVertical">@drawable/scrollbar_handle_quantum</item>
+        <item name="scrollbarTrackHorizontal">@null</item>
+        <item name="scrollbarTrackVertical">@null</item>
+
+        <!-- Text selection handle attributes -->
+        <item name="textSelectHandleLeft">@drawable/text_select_handle_left_quantum</item>
+        <item name="textSelectHandleRight">@drawable/text_select_handle_right_quantum</item>
+        <item name="textSelectHandle">@drawable/text_select_handle_middle_quantum</item>
+        <item name="textSelectHandleWindowStyle">@style/Widget.Quantum.TextSelectHandle</item>
+        <item name="textSuggestionsWindowStyle">@style/Widget.Quantum.Light.TextSuggestionsPopupWindow</item>
+        <item name="textCursorDrawable">@drawable/text_cursor_quantum</item>
+
+        <!-- Widget styles -->
+        <item name="absListViewStyle">@style/Widget.Quantum.Light.AbsListView</item>
+        <item name="autoCompleteTextViewStyle">@style/Widget.Quantum.Light.AutoCompleteTextView</item>
+        <item name="checkboxStyle">@style/Widget.Quantum.Light.CompoundButton.CheckBox</item>
+        <item name="checkedTextViewStyle">@style/Widget.Quantum.Light.CheckedTextView</item>
+        <item name="dropDownListViewStyle">@style/Widget.Quantum.ListView.DropDown</item>
+        <item name="editTextStyle">@style/Widget.Quantum.Light.EditText</item>
+        <item name="expandableListViewStyle">@style/Widget.Quantum.Light.ExpandableListView</item>
+        <item name="expandableListViewWhiteStyle">@style/Widget.Quantum.Light.ExpandableListView.White</item>
+        <item name="fastScrollStyle">@style/Widget.Quantum.Light.FastScroll</item>
+        <item name="galleryStyle">@style/Widget.Quantum.Light.Gallery</item>
+        <item name="gestureOverlayViewStyle">@style/Widget.Quantum.Light.GestureOverlayView</item>
+        <item name="gridViewStyle">@style/Widget.Quantum.Light.GridView</item>
+        <item name="imageButtonStyle">@style/Widget.Quantum.Light.ImageButton</item>
+        <item name="imageWellStyle">@style/Widget.Quantum.Light.ImageWell</item>
+        <item name="listViewStyle">@style/Widget.Quantum.Light.ListView</item>
+        <item name="listViewWhiteStyle">@style/Widget.Quantum.Light.ListView.White</item>
+        <item name="popupWindowStyle">@style/Widget.Quantum.Light.PopupWindow</item>
+        <item name="progressBarStyle">@style/Widget.Quantum.Light.ProgressBar</item>
+        <item name="progressBarStyleHorizontal">@style/Widget.Quantum.Light.ProgressBar.Horizontal</item>
+        <item name="progressBarStyleSmall">@style/Widget.Quantum.Light.ProgressBar.Small</item>
+        <item name="progressBarStyleSmallTitle">@style/Widget.Quantum.Light.ProgressBar.Small.Title</item>
+        <item name="progressBarStyleLarge">@style/Widget.Quantum.Light.ProgressBar.Large</item>
+        <item name="progressBarStyleInverse">@style/Widget.Quantum.Light.ProgressBar.Inverse</item>
+        <item name="progressBarStyleSmallInverse">@style/Widget.Quantum.Light.ProgressBar.Small.Inverse</item>
+        <item name="progressBarStyleLargeInverse">@style/Widget.Quantum.Light.ProgressBar.Large.Inverse</item>
+        <item name="seekBarStyle">@style/Widget.Quantum.Light.SeekBar</item>
+        <item name="ratingBarStyle">@style/Widget.Quantum.Light.RatingBar</item>
+        <item name="ratingBarStyleIndicator">@style/Widget.Quantum.Light.RatingBar.Indicator</item>
+        <item name="ratingBarStyleSmall">@style/Widget.Quantum.Light.RatingBar.Small</item>
+        <item name="radioButtonStyle">@style/Widget.Quantum.Light.CompoundButton.RadioButton</item>
+        <item name="scrollViewStyle">@style/Widget.Quantum.Light.ScrollView</item>
+        <item name="horizontalScrollViewStyle">@style/Widget.Quantum.Light.HorizontalScrollView</item>
+        <item name="spinnerStyle">?attr/dropDownSpinnerStyle</item>
+        <item name="dropDownSpinnerStyle">@style/Widget.Quantum.Light.Spinner.DropDown</item>
+        <item name="starStyle">@style/Widget.Quantum.Light.CompoundButton.Star</item>
+        <item name="tabWidgetStyle">@style/Widget.Quantum.Light.TabWidget</item>
+        <item name="textViewStyle">@style/Widget.Quantum.Light.TextView</item>
+        <item name="errorMessageBackground">@drawable/popup_inline_error_holo_light</item>
+        <item name="errorMessageAboveBackground">@drawable/popup_inline_error_above_holo_light</item>
+        <item name="webTextViewStyle">@style/Widget.Quantum.Light.WebTextView</item>
+        <item name="webViewStyle">@style/Widget.Quantum.Light.WebView</item>
+        <item name="dropDownItemStyle">@style/Widget.Quantum.Light.DropDownItem</item>
+        <item name="spinnerDropDownItemStyle">@style/Widget.Quantum.Light.DropDownItem.Spinner</item>
+        <item name="spinnerItemStyle">@style/Widget.Quantum.TextView.SpinnerItem</item>
+        <item name="dropDownHintAppearance">@style/TextAppearance.Quantum.Widget.DropDownHint</item>
+        <item name="keyboardViewStyle">@style/Widget.Quantum.KeyboardView</item>
+        <item name="quickContactBadgeStyleWindowSmall">@style/Widget.Quantum.QuickContactBadge.WindowSmall</item>
+        <item name="quickContactBadgeStyleWindowMedium">@style/Widget.Quantum.QuickContactBadge.WindowMedium</item>
+        <item name="quickContactBadgeStyleWindowLarge">@style/Widget.Quantum.QuickContactBadge.WindowLarge</item>
+        <item name="quickContactBadgeStyleSmallWindowSmall">@style/Widget.Quantum.QuickContactBadgeSmall.WindowSmall</item>
+        <item name="quickContactBadgeStyleSmallWindowMedium">@style/Widget.Quantum.QuickContactBadgeSmall.WindowMedium</item>
+        <item name="quickContactBadgeStyleSmallWindowLarge">@style/Widget.Quantum.QuickContactBadgeSmall.WindowLarge</item>
+        <item name="listPopupWindowStyle">@style/Widget.Quantum.Light.ListPopupWindow</item>
+        <item name="popupMenuStyle">@style/Widget.Quantum.Light.PopupMenu</item>
+        <item name="stackViewStyle">@style/Widget.Quantum.Light.StackView</item>
+        <item name="activityChooserViewStyle">@style/Widget.Quantum.Light.ActivityChooserView</item>
+        <item name="fragmentBreadCrumbsStyle">@style/Widget.Quantum.Light.FragmentBreadCrumbs</item>
+
+        <!-- Preference styles -->
+        <item name="preferenceScreenStyle">@style/Preference.Quantum.PreferenceScreen</item>
+        <item name="preferenceFragmentStyle">@style/PreferenceFragment.Quantum</item>
+        <item name="preferenceFragmentPaddingSide">0dip</item>
+        <item name="preferenceCategoryStyle">@style/Preference.Quantum.Category</item>
+        <item name="preferenceStyle">@style/Preference.Quantum</item>
+        <item name="preferenceInformationStyle">@style/Preference.Quantum.Information</item>
+        <item name="checkBoxPreferenceStyle">@style/Preference.Quantum.CheckBoxPreference</item>
+        <item name="switchPreferenceStyle">@style/Preference.Quantum.SwitchPreference</item>
+        <item name="yesNoPreferenceStyle">@style/Preference.Quantum.DialogPreference.YesNoPreference</item>
+        <item name="dialogPreferenceStyle">@style/Preference.Quantum.DialogPreference</item>
+        <item name="editTextPreferenceStyle">@style/Preference.Quantum.DialogPreference.EditTextPreference</item>
+        <item name="ringtonePreferenceStyle">@style/Preference.Quantum.RingtonePreference</item>
+        <item name="preferenceLayoutChild">@layout/preference_child_quantum</item>
+        <item name="detailsElementBackground">?attr/colorBackground</item>
+
+        <!-- PreferenceFrameLayout attributes -->
+        <item name="preferenceFrameLayoutStyle">@style/Widget.Quantum.PreferenceFrameLayout</item>
+
+        <!-- Search widget styles -->
+        <item name="searchWidgetCorpusItemBackground">@color/search_widget_corpus_item_background</item>
+
+        <!-- Action bar styles -->
+        <item name="actionDropDownStyle">@style/Widget.Quantum.Light.Spinner.DropDown.ActionBar</item>
+        <item name="actionButtonStyle">@style/Widget.Quantum.Light.ActionButton</item>
+        <item name="actionOverflowButtonStyle">@style/Widget.Quantum.Light.ActionButton.Overflow</item>
+        <item name="actionModeBackground">@drawable/cab_background_top_holo_light</item>
+        <item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_light</item>
+        <item name="actionModeCloseDrawable">@drawable/ic_cab_done_quantum</item>
+        <item name="actionBarTabStyle">@style/Widget.Quantum.Light.ActionBar.TabView</item>
+        <item name="actionBarTabBarStyle">@style/Widget.Quantum.Light.ActionBar.TabBar</item>
+        <item name="actionBarTabTextStyle">@style/Widget.Quantum.Light.ActionBar.TabText</item>
+        <item name="actionModeStyle">@style/Widget.Quantum.Light.ActionMode</item>
+        <item name="actionModeCloseButtonStyle">@style/Widget.Quantum.Light.ActionButton.CloseMode</item>
+        <item name="actionBarStyle">@style/Widget.Quantum.Light.ActionBar.Solid</item>
+        <item name="actionBarSize">@dimen/action_bar_default_height_quantum</item>
+        <item name="actionModePopupWindowStyle">@style/Widget.Quantum.Light.PopupWindow.ActionMode</item>
+        <item name="actionBarWidgetTheme">@null</item>
+        <item name="actionBarTheme">@style/ThemeOverlay.Quantum.Light.ActionBarWidget</item>
+        <item name="actionBarItemBackground">@drawable/item_background_quantum</item>
+
+        <item name="actionModeCutDrawable">@drawable/ic_menu_cut_quantum</item>
+        <item name="actionModeCopyDrawable">@drawable/ic_menu_copy_quantum</item>
+        <item name="actionModePasteDrawable">@drawable/ic_menu_paste_quantum</item>
+        <item name="actionModeSelectAllDrawable">@drawable/ic_menu_selectall_quantum</item>
+        <item name="actionModeShareDrawable">@drawable/ic_menu_share_quantum</item>
+        <item name="actionModeFindDrawable">@drawable/ic_menu_find_quantum</item>
+        <item name="actionModeWebSearchDrawable">@drawable/ic_menu_search_quantum</item>
+
+        <item name="dividerVertical">?attr/listDivider</item>
+        <item name="dividerHorizontal">?attr/listDivider</item>
+        <item name="buttonBarStyle">@style/Widget.Quantum.Light.ButtonBar</item>
+        <item name="buttonBarButtonStyle">@style/Widget.Quantum.Light.Button.Borderless.Small</item>
+        <item name="segmentedButtonStyle">@style/Widget.Quantum.Light.SegmentedButton</item>
+
+        <!-- SearchView attributes -->
+        <item name="searchDropdownBackground">?attr/colorBackground</item>
+        <item name="searchViewTextField">@drawable/textfield_search_quantum</item>
+        <item name="searchViewTextFieldRight">@drawable/textfield_search_quantum</item>
+        <item name="searchViewCloseIcon">@android:drawable/ic_clear_quantum</item>
+        <item name="searchViewSearchIcon">@android:drawable/ic_search_api_quantum</item>
+        <item name="searchViewGoIcon">@android:drawable/ic_go_search_api_quantum</item>
+        <item name="searchViewVoiceIcon">@android:drawable/ic_voice_search_api_quantum</item>
+        <item name="searchViewEditQuery">@android:drawable/ic_commit_search_api_quantum</item>
+
+        <item name="searchDialogTheme">@style/Theme.Quantum.Light.SearchBar</item>
+
+        <!-- NumberPicker style-->
+        <item name="numberPickerStyle">@style/Widget.Quantum.Light.NumberPicker</item>
+
+        <!-- CalendarView style-->
+        <item name="calendarViewStyle">@style/Widget.Quantum.Light.CalendarView</item>
+
+        <!-- TimePicker style -->
+        <item name="timePickerStyle">@style/Widget.Quantum.Light.TimePicker</item>
+
+        <!-- TimePicker Header background color -->
+        <item name="timePickerHeaderBackgroundColor">?attr/colorBackground</item>
+
+        <!-- TimePicker Header time label text appearance -->
+        <item name="timePickerHeaderTimeLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.TimeLabel</item>
+
+        <!-- TimePicker Header am pm label text appearance -->
+        <item name="timePickerHeaderAmPmLabelTextAppearance">@style/TextAppearance.Quantum.TimePicker.AmPmLabel</item>
+
+        <!-- TimePicker dialog theme -->
+        <item name="timePickerDialogTheme">@style/Theme.Quantum.Light.Dialog.TimePicker</item>
+
+        <!-- DatePicker style -->
+        <item name="datePickerStyle">@style/Widget.Quantum.Light.DatePicker</item>
+
+        <item name="fastScrollThumbDrawable">@drawable/fastscroll_thumb_quantum</item>
+        <item name="fastScrollPreviewBackgroundLeft">@drawable/fastscroll_label_left_holo_light</item>
+        <item name="fastScrollPreviewBackgroundRight">@drawable/fastscroll_label_right_holo_light</item>
+        <item name="fastScrollTrackDrawable">@drawable/fastscroll_track_quantum</item>
+        <item name="fastScrollOverlayPosition">atThumb</item>
+
+        <!-- Color palette -->
+        <item name="colorPrimaryDark">@color/quantum_blue_700</item>
+        <item name="colorPrimary">@color/quantum_blue_500</item>
+        <item name="colorPrimaryLight">@color/quantum_blue_100</item>
+        <item name="colorAccent">@color/quantum_teal_A200</item>
+
+        <item name="colorControlNormal">?attr/textColorSecondary</item>
+        <item name="colorControlActivated">?attr/colorPrimary</item>
+        <item name="colorButtonNormal">@color/quantum_grey_100</item>
+        <item name="colorButtonPressed">@color/quantum_grey_500</item>
+        <!-- TODO: Remove these attrs and move into button style. -->
+        <item name="colorButtonNormalColored">?attr/colorPrimary</item>
+        <item name="colorButtonPressedColored">?attr/colorPrimaryDark</item>
+    </style>
+
+    <style name="ThemeOverlay" />
+    <style name="ThemeOverlay.Quantum" />
+    <style name="ThemeOverlay.Quantum.Light" />
+
+    <!-- Variant of the quantum theme that replaces the activated control color
+         (which by default is identical to the action bar background color) with
+         the normal control color . -->
+    <style name="ThemeOverlay.Quantum.ActionBarWidget">
+        <item name="colorControlActivated">?attr/colorControlNormal</item>
+    </style>
+
+    <!-- Variant of the quantum (light) theme that replaces the activated control
+         color (which by default is identical to the action bar background color)
+         with the normal control color . -->
+    <style name="ThemeOverlay.Quantum.Light.ActionBarWidget">
+        <item name="colorControlActivated">?attr/colorControlNormal</item>
+    </style>
+
+    <!-- Variant of the quantum (light) theme that has a solid (opaque) action bar
+         with an inverse color profile. The dark action bar sharply stands out against
+         the light content. -->
+    <style name="Theme.Quantum.Light.DarkActionBar">
+        <!-- TODO -->
+    </style>
+
+    <!-- Variant of the quantum (dark) theme with no action bar. -->
+    <style name="Theme.Quantum.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <!-- Variant of the quantum (dark) theme that has no title bar and fills
+         the entire screen.  This theme
+         sets {@link android.R.attr#windowFullscreen} to true.  -->
+    <style name="Theme.Quantum.NoActionBar.Fullscreen">
+        <item name="windowFullscreen">true</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
+    <!-- Variant of the quantum (dark) theme that has no title bar and fills
+         the entire screen and extends into the display overscan region.  This theme
+         sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
+         to true. -->
+    <style name="Theme.Quantum.NoActionBar.Overscan">
+        <item name="windowFullscreen">true</item>
+        <item name="windowOverscan">true</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
+    <!-- Variant of the quantum (dark) theme that has no title bar and translucent
+         system decor.  This theme sets {@link android.R.attr#windowTranslucentStatus} and
+         {@link android.R.attr#windowTranslucentNavigation} to true. -->
+    <style name="Theme.Quantum.NoActionBar.TranslucentDecor">
+        <item name="windowTranslucentStatus">true</item>
+        <item name="windowTranslucentNavigation">true</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
+    <!-- Variant of the quantum (light) theme with no action bar. -->
+    <style name="Theme.Quantum.Light.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <!-- Variant of the quantum (light) theme that has no title bar and fills
+         the entire screen.  This theme
+         sets {@link android.R.attr#windowFullscreen} to true.  -->
+    <style name="Theme.Quantum.Light.NoActionBar.Fullscreen">
+        <item name="windowFullscreen">true</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
+    <!-- Variant of the quantum (light) theme that has no title bar and fills
+         the entire screen and extends into the display overscan region.  This theme
+         sets {@link android.R.attr#windowFullscreen} and {@link android.R.attr#windowOverscan}
+         to true. -->
+    <style name="Theme.Quantum.Light.NoActionBar.Overscan">
+        <item name="windowFullscreen">true</item>
+        <item name="windowOverscan">true</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
+    <!-- Variant of the quantum (light) theme that has no title bar and translucent
+         system decor.  This theme sets {@link android.R.attr#windowTranslucentStatus} and
+         {@link android.R.attr#windowTranslucentNavigation} to true. -->
+    <style name="Theme.Quantum.Light.NoActionBar.TranslucentDecor">
+        <item name="windowTranslucentStatus">true</item>
+        <item name="windowTranslucentNavigation">true</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
+    <!-- Default quantum dark theme for panel windows.  This removes all extraneous
+         window decorations, so you basically have an empty rectangle in which
+         to place your content.  It makes the window floating, with a transparent
+         background, and turns off dimming behind the window. -->
+    <style name="Theme.Quantum.Panel">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="colorBackgroundCacheHint">@null</item>
+        <item name="windowFrame">@null</item>
+        <item name="windowContentOverlay">@null</item>
+        <item name="windowAnimationStyle">@null</item>
+        <item name="windowIsFloating">true</item>
+        <item name="backgroundDimEnabled">false</item>
+        <item name="windowIsTranslucent">true</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <!-- Default quantum light theme for panel windows.  This removes all extraneous
+         window decorations, so you basically have an empty rectangle in which
+         to place your content.  It makes the window floating, with a transparent
+         background, and turns off dimming behind the window. -->
+    <style name="Theme.Quantum.Light.Panel">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="colorBackgroundCacheHint">@null</item>
+        <item name="windowFrame">@null</item>
+        <item name="windowContentOverlay">@null</item>
+        <item name="windowAnimationStyle">@null</item>
+        <item name="windowIsFloating">true</item>
+        <item name="backgroundDimEnabled">false</item>
+        <item name="windowIsTranslucent">true</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <!-- Default theme for quantum style input methods, which is used by the
+         {@link android.inputmethodservice.InputMethodService} class.
+         this inherits from Theme.Panel, but sets up IME appropriate animations
+         and a few custom attributes. -->
+    <style name="Theme.Quantum.InputMethod" parent="Theme.Quantum.Light.Panel">
+        <item name="windowAnimationStyle">@style/Animation.InputMethod</item>
+        <item name="imeFullscreenBackground">@drawable/screen_background_selector_light</item>
+        <item name="imeExtractEnterAnimation">@anim/input_method_extract_enter</item>
+        <item name="imeExtractExitAnimation">@anim/input_method_extract_exit</item>
+    </style>
+
+    <!-- Theme for the search input bar. -->
+
+    <style name="Theme.Quantum.SearchBar" parent="Theme.Quantum.Panel">
+        <item name="actionModeBackground">@drawable/cab_background_top_holo_dark</item>
+        <item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_light</item>
+    </style>
+
+    <style name="Theme.Quantum.Light.SearchBar" parent="Theme.Quantum.Light.Panel">
+        <item name="actionModeBackground">@drawable/cab_background_top_holo_light</item>
+        <item name="actionModeSplitBackground">@drawable/cab_background_bottom_holo_light</item>
+    </style>
+
+    <!-- Menu Themes -->
+    <eat-comment />
+
+    <style name="Theme.Quantum.CompactMenu">
+        <!-- Menu/item attributes -->
+        <item name="itemTextAppearance">?attr/textAppearanceMedium</item>
+        <item name="listViewStyle">@style/Widget.Quantum.ListView</item>
+        <item name="windowAnimationStyle">@style/Animation.DropDownUp</item>
+        <item name="background">@null</item>
+    </style>
+
+    <style name="Theme.Quantum.Light.CompactMenu">
+        <!-- Menu/item attributes -->
+        <item name="itemTextAppearance">?attr/textAppearanceMedium</item>
+        <item name="listViewStyle">@style/Widget.Quantum.Light.ListView</item>
+        <item name="windowAnimationStyle">@style/Animation.DropDownUp</item>
+        <item name="background">@null</item>
+    </style>
+
+    <!-- Dialog themes for Quantum -->
+    <eat-comment />
+
+    <!-- Quantum theme for dialog windows and activities, which is used by the
+         {@link android.app.Dialog} class.  This changes the window to be
+         floating (not fill the entire screen), and puts a frame around its
+         contents.  You can set this theme on an activity if you would like to
+         make an activity that looks like a Dialog. -->
+    <style name="Theme.Quantum.Dialog">
+        <item name="windowFrame">@null</item>
+        <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum</item>
+        <item name="windowBackground">@drawable/dialog_background_quantum</item>
+        <item name="windowIsFloating">true</item>
+        <item name="windowContentOverlay">@null</item>
+        <item name="windowAnimationStyle">@style/Animation.Quantum.Dialog</item>
+        <item name="windowSoftInputMode">stateUnspecified|adjustPan</item>
+        <item name="windowActionBar">false</item>
+        <item name="windowActionModeOverlay">true</item>
+        <item name="windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>
+
+        <item name="colorBackgroundCacheHint">@null</item>
+
+        <item name="buttonBarStyle">@style/Widget.Quantum.ButtonBar.AlertDialog</item>
+        <item name="borderlessButtonStyle">@style/Widget.Quantum.Button.Borderless.Small</item>
+
+        <item name="textAppearance">@style/TextAppearance.Quantum</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
+
+        <item name="listPreferredItemPaddingLeft">16dip</item>
+        <item name="listPreferredItemPaddingRight">16dip</item>
+        <item name="listPreferredItemPaddingStart">16dip</item>
+        <item name="listPreferredItemPaddingEnd">16dip</item>
+
+        <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Dialog that has a nice minimum width for
+         a regular dialog. -->
+    <style name="Theme.Quantum.Dialog.MinWidth">
+        <item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
+        <item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Dialog that does not include a title bar. -->
+    <style name="Theme.Quantum.Dialog.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Dialog.NoActionBar that has a nice minimum width for
+         a regular dialog. -->
+    <style name="Theme.Quantum.Dialog.NoActionBar.MinWidth">
+        <item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
+        <item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Dialog that has a fixed size. -->
+    <style name="Theme.Quantum.Dialog.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Dialog.NoActionBar that has a fixed size. -->
+    <style name="Theme.Quantum.Dialog.NoActionBar.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Dialog that does not include a frame (or background).
+         The view hierarchy of the dialog is responsible for drawing all of
+         its pixels. -->
+    <style name="Theme.Quantum.Dialog.NoFrame">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="windowAnimationStyle">@null</item>
+        <item name="backgroundDimEnabled">false</item>
+        <item name="windowIsTranslucent">true</item>
+        <item name="windowNoTitle">true</item>
+        <item name="windowCloseOnTouchOutside">false</item>
+    </style>
+
+    <!-- Quantum theme for alert dialog windows, which is used by the
+         {@link android.app.AlertDialog} class.  This is basically a dialog
+         but sets the background to empty so it can do two-tone backgrounds.
+         For applications targeting Honeycomb or newer, this is the default
+         AlertDialog theme. -->
+    <style name="Theme.Quantum.Dialog.Alert">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum</item>
+        <item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
+        <item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
+    </style>
+
+    <!-- Quantum theme for the TimePicker dialog windows, which is used by the
+         {@link android.app.TimePickerDialog} class. -->
+    <style name="Theme.Quantum.Dialog.TimePicker">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum</item>
+        <item name="windowContentOverlay">@null</item>
+    </style>
+
+    <!-- Theme for a window that will be displayed either full-screen on
+         smaller screens (small, normal) or as a dialog on larger screens
+         (large, xlarge). -->
+    <style name="Theme.Quantum.DialogWhenLarge" parent="@style/Theme.Quantum">
+    </style>
+
+    <!-- Theme for a window without a title bar that will be displayed either
+         full-screen on smaller screens (small, normal) or as a dialog on larger screens
+         (large, xlarge). -->
+    <style name="Theme.Quantum.DialogWhenLarge.NoActionBar" parent="@style/Theme.Quantum.NoActionBar">
+    </style>
+
+    <!-- Theme for a presentation window on a secondary display. -->
+    <style name="Theme.Quantum.Dialog.Presentation" parent="@style/Theme.Quantum.NoActionBar.Fullscreen">
+    </style>
+
+    <!-- Light quantum dialog themes -->
+
+    <!-- Quantum light theme for dialog windows and activities, which is used by the
+         {@link android.app.Dialog} class.  This changes the window to be
+         floating (not fill the entire screen), and puts a frame around its
+         contents.  You can set this theme on an activity if you would like to
+         make an activity that looks like a Dialog. -->
+    <style name="Theme.Quantum.Light.Dialog">
+        <item name="windowFrame">@null</item>
+        <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum.Light</item>
+        <item name="windowBackground">?attr/colorBackground</item>
+        <item name="windowIsFloating">true</item>
+        <item name="windowContentOverlay">@null</item>
+        <item name="windowAnimationStyle">@style/Animation.Quantum.Dialog</item>
+        <item name="windowSoftInputMode">stateUnspecified|adjustPan</item>
+        <item name="windowActionBar">false</item>
+        <item name="windowActionModeOverlay">true</item>
+        <item name="windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>
+
+        <item name="colorBackgroundCacheHint">@null</item>
+
+        <item name="buttonBarStyle">@style/Widget.Quantum.Light.ButtonBar.AlertDialog</item>
+        <item name="borderlessButtonStyle">@style/Widget.Quantum.Light.Button.Borderless.Small</item>
+
+        <item name="textAppearance">@style/TextAppearance.Quantum</item>
+        <item name="textAppearanceInverse">@style/TextAppearance.Quantum.Inverse</item>
+
+        <item name="listPreferredItemPaddingLeft">16dip</item>
+        <item name="listPreferredItemPaddingRight">16dip</item>
+        <item name="listPreferredItemPaddingStart">16dip</item>
+        <item name="listPreferredItemPaddingEnd">16dip</item>
+
+        <item name="preferencePanelStyle">@style/PreferencePanel.Dialog</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Light.Dialog that has a nice minimum width for
+         a regular dialog. -->
+    <style name="Theme.Quantum.Light.Dialog.MinWidth">
+        <item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
+        <item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Light.Dialog that does not include a title bar. -->
+    <style name="Theme.Quantum.Light.Dialog.NoActionBar">
+        <item name="windowActionBar">false</item>
+        <item name="windowNoTitle">true</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Light.Dialog.NoActionBar that has a nice minimum width for
+         a regular dialog. -->
+    <style name="Theme.Quantum.Light.Dialog.NoActionBar.MinWidth">
+        <item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
+        <item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Light.Dialog that has a fixed size. -->
+    <style name="Theme.Quantum.Light.Dialog.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
+    </style>
+
+    <!-- Variant of Theme.Quantum.Light.Dialog.NoActionBar that has a fixed size. -->
+    <style name="Theme.Quantum.Light.Dialog.NoActionBar.FixedSize">
+        <item name="windowFixedWidthMajor">@dimen/dialog_fixed_width_major</item>
+        <item name="windowFixedWidthMinor">@dimen/dialog_fixed_width_minor</item>
+        <item name="windowFixedHeightMajor">@dimen/dialog_fixed_height_major</item>
+        <item name="windowFixedHeightMinor">@dimen/dialog_fixed_height_minor</item>
+    </style>
+
+    <!-- Theme for a window that will be displayed either full-screen on
+         smaller screens (small, normal) or as a dialog on larger screens
+         (large, xlarge). -->
+    <style name="Theme.Quantum.Light.DialogWhenLarge" parent="@style/Theme.Quantum.Light">
+    </style>
+
+    <!-- Theme for a window without an action bar that will be displayed either full-screen
+         on smaller screens (small, normal) or as a dialog on larger screens
+         (large, xlarge). -->
+    <style name="Theme.Quantum.Light.DialogWhenLarge.NoActionBar"
+            parent="@style/Theme.Quantum.Light.NoActionBar">
+    </style>
+
+    <!-- Quantum light theme for alert dialog windows, which is used by the
+         {@link android.app.AlertDialog} class.  This is basically a dialog
+         but sets the background to empty so it can do two-tone backgrounds.
+         For applications targeting Honeycomb or newer, this is the default
+         AlertDialog theme. -->
+    <style name="Theme.Quantum.Light.Dialog.Alert">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum.Light</item>
+        <item name="windowMinWidthMajor">@dimen/dialog_min_width_major</item>
+        <item name="windowMinWidthMinor">@dimen/dialog_min_width_minor</item>
+    </style>
+
+    <!-- Quantum Light theme for the TimePicker dialog windows, which is used by the
+         {@link android.app.TimePickerDialog} class. -->
+    <style name="Theme.Quantum.Light.Dialog.TimePicker">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="windowTitleStyle">@style/DialogWindowTitle.Quantum.Light</item>
+    </style>
+
+    <!-- Theme for a presentation window on a secondary display. -->
+    <style name="Theme.Quantum.Light.Dialog.Presentation" parent="@style/Theme.Quantum.Light.NoActionBar.Fullscreen" >
+    </style>
+
+    <!-- Default quantum (dark) for windows that want to have the user's selected
+         wallpaper appear behind them.  -->
+    <style name="Theme.Quantum.Wallpaper">
+        <item name="windowBackground">@color/transparent</item>
+        <item name="colorBackgroundCacheHint">@null</item>
+        <item name="windowShowWallpaper">true</item>
+    </style>
+
+    <!--Default quantum (dark) for windows that want to have the user's selected
+         wallpaper appear behind them and without an action bar. -->
+    <style name="Theme.Quantum.Wallpaper.NoTitleBar">
+        <item name="windowNoTitle">true</item>
+    </style>
+
+</resources>
diff --git a/core/res/res/xml/default_zen_mode_config.xml b/core/res/res/xml/default_zen_mode_config.xml
new file mode 100644
index 0000000..1bdc1ec
--- /dev/null
+++ b/core/res/res/xml/default_zen_mode_config.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2014, 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.
+*/
+-->
+
+<!-- Default configuration for zen mode.  See android.service.notification.ZenModeConfig. -->
+<zen version="1">
+    <allow calls="false" messages="false" />
+    <sleep startHour="22" startMin="0" endHour="7" endMin="0" />
+</zen>
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
index b942eb6..cad030a 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/AccessPointParserHelper.java
@@ -252,26 +252,26 @@
                 if (!validateEapValue(eapValue)) {
                     throw new SAXException();
                 }
-		if (eapValue.equals("TLS")) {
-		    config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS);
-		} else if (eapValue.equals("TTLS")) {
-		    config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TTLS);
-		} else if (eapValue.equals("PEAP")) {
-		    config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP);
-		}
+                if (eapValue.equals("TLS")) {
+                    config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS);
+                } else if (eapValue.equals("TTLS")) {
+                    config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TTLS);
+                } else if (eapValue.equals("PEAP")) {
+                    config.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.PEAP);
+                }
                 eap = false;
             }
             if (phase2) {
                 String phase2Value = new String(ch, start, length);
-		if (phase2Value.equals("PAP")) {
+                if (phase2Value.equals("PAP")) {
                     config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.PAP);
-		} else if (phase2Value.equals("MSCHAP")) {
+                } else if (phase2Value.equals("MSCHAP")) {
                     config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAP);
-		} else if (phase2Value.equals("MSCHAPV2")) {
+                } else if (phase2Value.equals("MSCHAPV2")) {
                     config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.MSCHAPV2);
-		} else if (phase2Value.equals("GTC")) {
+                } else if (phase2Value.equals("GTC")) {
                     config.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.GTC);
-		}
+                }
                 phase2 = false;
             }
             if (identity) {
diff --git a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
index 04ce4b7..91c3093 100644
--- a/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
+++ b/core/tests/ConnectivityManagerTest/src/com/android/connectivitymanagertest/stress/WifiStressTest.java
@@ -27,6 +27,7 @@
 import android.net.wifi.WifiManager;
 import android.os.Environment;
 import android.os.PowerManager;
+import android.os.SystemClock;
 import android.provider.Settings;
 import android.view.KeyEvent;
 import android.test.suitebuilder.annotation.LargeTest;
@@ -52,6 +53,7 @@
         extends ConnectivityManagerTestBase {
     private final static String TAG = "WifiStressTest";
 
+    private final static long SCREEN_OFF_TIMER = 500; //500ms
     /**
      * Wi-Fi idle time for default sleep policy
      */
@@ -157,11 +159,11 @@
             writeOutput(String.format("average scanning time is %d", averageScanTime));
             writeOutput(String.format("ssid appear %d out of %d scan iterations",
                     ssidAppearInScanResultsCount, i));
-            long startTime = System.currentTimeMillis();
+            long startTime = SystemClock.uptimeMillis();
             scanResultAvailable = false;
             assertTrue("start scan failed", mWifiManager.startScan());
             while (true) {
-                if ((System.currentTimeMillis() - startTime) >
+                if ((SystemClock.uptimeMillis() - startTime) >
                 WIFI_SCAN_TIMEOUT) {
                     fail("Wifi scanning takes more than " + WIFI_SCAN_TIMEOUT + " ms");
                 }
@@ -172,7 +174,7 @@
                         e.printStackTrace();
                     }
                     if (scanResultAvailable) {
-                        long scanTime = (System.currentTimeMillis() - startTime);
+                        long scanTime = (SystemClock.uptimeMillis() - startTime);
                         scanTimeSum += scanTime;
                         break;
                     }
@@ -255,8 +257,13 @@
                     i, mReconnectIterations));
             log("iteration: " + i);
             turnScreenOff();
+            // Use clock time since boot for intervals.
+            long start = SystemClock.uptimeMillis();
             PowerManager pm =
                 (PowerManager)mRunner.getContext().getSystemService(Context.POWER_SERVICE);
+            while (pm.isScreenOn() && ((SystemClock.uptimeMillis() - start) < SCREEN_OFF_TIMER)) {
+                sleep(100, "wait for screen off");
+            }
             assertFalse(pm.isScreenOn());
             sleep(WIFI_IDLE_MS + WIFI_SHUTDOWN_DELAY, "Interruped while wait for wifi to be idle");
             assertTrue("Wait for Wi-Fi to idle timeout",
@@ -287,14 +294,14 @@
             mRunner.sendKeyDownUpSync(KeyEvent.KEYCODE_MENU);
 
             // Measure the time for Wi-Fi to get connected
-            long startTime = System.currentTimeMillis();
+            long startTime = SystemClock.uptimeMillis();
             assertTrue("Wait for Wi-Fi enable timeout after wake up",
                     waitForWifiState(WifiManager.WIFI_STATE_ENABLED,
                     SHORT_TIMEOUT));
             assertTrue("Wait for Wi-Fi connection timeout after wake up",
                     waitForNetworkState(ConnectivityManager.TYPE_WIFI, State.CONNECTED,
                     WIFI_CONNECTION_TIMEOUT));
-            long connectionTime = System.currentTimeMillis() - startTime;
+            long connectionTime = SystemClock.uptimeMillis() - startTime;
             sum += connectionTime;
             log("average reconnection time is: " + sum/(i+1));
 
diff --git a/core/tests/coretests/Android.mk b/core/tests/coretests/Android.mk
index be55444..6bdeaf0 100644
--- a/core/tests/coretests/Android.mk
+++ b/core/tests/coretests/Android.mk
@@ -22,7 +22,8 @@
 	$(call all-java-files-under, EnabledTestApp/src)
 
 LOCAL_DX_FLAGS := --core-library
-LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support android-common frameworks-core-util-lib mockwebserver guava littlemock
+LOCAL_AAPT_FLAGS = -0 dat -0 gld
+LOCAL_STATIC_JAVA_LIBRARIES := core-tests-support android-common frameworks-core-util-lib mockwebserver guava littlemock mockito-target
 LOCAL_JAVA_LIBRARIES := android.test.runner conscrypt telephony-common
 LOCAL_PACKAGE_NAME := FrameworksCoreTests
 
diff --git a/core/tests/coretests/assets/backup_mock.dat b/core/tests/coretests/assets/backup_mock.dat
new file mode 100644
index 0000000..f70b573
--- /dev/null
+++ b/core/tests/coretests/assets/backup_mock.dat
Binary files differ
diff --git a/core/tests/coretests/assets/backup_mock.gld b/core/tests/coretests/assets/backup_mock.gld
new file mode 100644
index 0000000..5197c23
--- /dev/null
+++ b/core/tests/coretests/assets/backup_mock.gld
@@ -0,0 +1,4 @@
+key1:
+key2a:YWJjZGVmZw==
+key3bc:YWJjZGVmZ2g=
+key4dad:
diff --git a/core/tests/coretests/assets/backup_real.dat b/core/tests/coretests/assets/backup_real.dat
new file mode 100644
index 0000000..2262568
--- /dev/null
+++ b/core/tests/coretests/assets/backup_real.dat
Binary files differ
diff --git a/core/tests/coretests/assets/backup_real.gld b/core/tests/coretests/assets/backup_real.gld
new file mode 100644
index 0000000..ef28f9b
--- /dev/null
+++ b/core/tests/coretests/assets/backup_real.gld
@@ -0,0 +1,3 @@
+CAEYLw:CC8QABoIR0VMIFN0dWIgnP//////////ASgBMAJAAUgBapgBI0ludGVudDthY3Rpb249YW5kcm9pZC5pbnRlbnQuYWN0aW9uLk1BSU47Y2F0ZWdvcnk9YW5kcm9pZC5pbnRlbnQuY2F0ZWdvcnkuTEFVTkNIRVI7bGF1bmNoRmxhZ3M9MHgxMDIwMDAwMDtjb21wb25lbnQ9Y29tLmdvb2dsZS5hbmRyb2lkLmdlbC8uU3R1YkFwcDtlbmQ=
+CAEYLQ:
+CAEYLA:
diff --git a/core/tests/coretests/src/android/app/TranslucentFancyActivity.java b/core/tests/coretests/src/android/app/TranslucentFancyActivity.java
index ec5ad7a..35abaaa 100644
--- a/core/tests/coretests/src/android/app/TranslucentFancyActivity.java
+++ b/core/tests/coretests/src/android/app/TranslucentFancyActivity.java
@@ -53,7 +53,7 @@
      * describe what is to be displayed in the screen.
      */
     @Override
-	protected void onCreate(Bundle icicle)
+    protected void onCreate(Bundle icicle)
     {
         // Be sure to call the super class.
         super.onCreate(icicle);
diff --git a/core/tests/coretests/src/android/app/activity/AbortReceiver.java b/core/tests/coretests/src/android/app/activity/AbortReceiver.java
index fef1775..8d5c022 100644
--- a/core/tests/coretests/src/android/app/activity/AbortReceiver.java
+++ b/core/tests/coretests/src/android/app/activity/AbortReceiver.java
@@ -32,7 +32,7 @@
 
     public void onReceive(Context context, Intent intent)
     {
-	//Log.i("AbortReceiver", "onReceiveIntent!");
+        //Log.i("AbortReceiver", "onReceiveIntent!");
         try {
             IBinder caller = intent.getIBinderExtra("caller");
             Parcel data = Parcel.obtain();
diff --git a/core/tests/coretests/src/android/app/activity/RemoteSubActivityScreen.java b/core/tests/coretests/src/android/app/activity/RemoteSubActivityScreen.java
index e969d10..9f402a5 100644
--- a/core/tests/coretests/src/android/app/activity/RemoteSubActivityScreen.java
+++ b/core/tests/coretests/src/android/app/activity/RemoteSubActivityScreen.java
@@ -24,19 +24,19 @@
 import android.util.Log;
 
 public class RemoteSubActivityScreen extends SubActivityScreen {
-	Handler mHandler = new Handler();
-	boolean mFirst = false;
+    Handler mHandler = new Handler();
+    boolean mFirst = false;
 
     public RemoteSubActivityScreen() {
     }
 
     @Override
     public void onCreate(Bundle icicle) {
-    	// We are running in a remote process, so want to have the sub-activity
-    	// sending the result back in the original process.
+        // We are running in a remote process, so want to have the sub-activity
+        // sending the result back in the original process.
         Intent intent = getIntent();
-    	intent.setClass(this, SubActivityScreen.class);
-    	
+        intent.setClass(this, SubActivityScreen.class);
+        
         super.onCreate(icicle);
         
         boolean kill = intent.getBooleanExtra("kill", false);
@@ -44,16 +44,16 @@
         //        + " kill=" + kill);
         
         if (kill) {
-	        // After finishing initialization, kill the process!  But only if
-	        // this is the first time...
-	        if (icicle == null) {
-		        mHandler.post(new Runnable() {
-		        	public void run() {
-		        		handleBeforeStopping();
-		        		Process.killProcess(Process.myPid());
-		        	}
-		        });
-	        }
+            // After finishing initialization, kill the process!  But only if
+            // this is the first time...
+            if (icicle == null) {
+                mHandler.post(new Runnable() {
+                    public void run() {
+                        handleBeforeStopping();
+                        Process.killProcess(Process.myPid());
+                    }
+                });
+            }
         }
     }
 }
diff --git a/core/tests/coretests/src/android/app/activity/SubActivityScreen.java b/core/tests/coretests/src/android/app/activity/SubActivityScreen.java
index 919c591..3caec7a 100644
--- a/core/tests/coretests/src/android/app/activity/SubActivityScreen.java
+++ b/core/tests/coretests/src/android/app/activity/SubActivityScreen.java
@@ -44,24 +44,24 @@
         // Move on to the next thing that will generate a result...  but only
         // if we are being launched for the first time.
         if (icicle == null) {
-	        if (mMode == PENDING_RESULT_MODE) {
-	            PendingIntent apr = createPendingResult(1, null,
-	                    Intent.FILL_IN_ACTION);
-	            Intent res = new Intent();
+            if (mMode == PENDING_RESULT_MODE) {
+                PendingIntent apr = createPendingResult(1, null,
+                        Intent.FILL_IN_ACTION);
+                Intent res = new Intent();
                 res.putExtra("tkey", "tval");
                 res.setAction("test");
-	            try {
-    	            apr.send(this, RESULT_OK, res);
-	            } catch (PendingIntent.CanceledException e) {
-	            }
-	        } else if (mMode < CHILD_OFFSET) {
-	            Intent intent = new Intent();
-	        	intent.setClass(this, SubActivityScreen.class);
-	            intent.putExtra("mode", CHILD_OFFSET+mMode);
-	            //System.out.println("*** Starting from onStart: " + intent);
-	            startActivityForResult(intent, 1);
-	            return;
-	        }
+                try {
+                    apr.send(this, RESULT_OK, res);
+                } catch (PendingIntent.CanceledException e) {
+                }
+            } else if (mMode < CHILD_OFFSET) {
+                Intent intent = new Intent();
+                intent.setClass(this, SubActivityScreen.class);
+                intent.putExtra("mode", CHILD_OFFSET+mMode);
+                //System.out.println("*** Starting from onStart: " + intent);
+                startActivityForResult(intent, 1);
+                return;
+            }
         }
     }
 
@@ -77,15 +77,15 @@
         //Log.i("foo", "SubActivityScreen pid=" + Process.myPid() + " onResume");
         
         if (mMode >= CHILD_OFFSET) {
-        	// Wait a little bit, to give our parent time to kill itself
-        	// if that is something it is into.
-        	try {
-	        	Thread.sleep(500);
-        	} catch (InterruptedException e) {
-        		setResult(RESULT_CANCELED, (new Intent()).setAction("Interrupted!"));
-        		finish();
-        		return;
-        	}
+            // Wait a little bit, to give our parent time to kill itself
+            // if that is something it is into.
+            try {
+                Thread.sleep(500);
+            } catch (InterruptedException e) {
+                setResult(RESULT_CANCELED, (new Intent()).setAction("Interrupted!"));
+                finish();
+                return;
+            }
             //System.out.println("Resuming sub-activity: mode=" + mMode);
             switch (mMode-CHILD_OFFSET) {
             case NO_RESULT_MODE:
diff --git a/core/tests/coretests/src/android/app/backup/BackupDataTest.java b/core/tests/coretests/src/android/app/backup/BackupDataTest.java
new file mode 100644
index 0000000..0c204e0
--- /dev/null
+++ b/core/tests/coretests/src/android/app/backup/BackupDataTest.java
@@ -0,0 +1,291 @@
+/*
+ * Copyright (C) 2013 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 android.app.backup;
+
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.content.res.AssetFileDescriptor;
+import android.content.res.AssetManager;
+import android.os.Bundle;
+import android.os.Environment;
+import android.os.ParcelFileDescriptor;
+import android.test.AndroidTestCase;
+import android.test.InstrumentationTestCase;
+import android.util.Base64;
+import android.util.Log;
+import org.json.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.Exception;
+import java.nio.ByteBuffer;
+
+public class BackupDataTest extends AndroidTestCase {
+    private static final String KEY1 = "key1";
+    private static final String KEY2 = "key2a";
+    private static final String KEY3 = "key3bc";
+    private static final String KEY4 = "key4dad";  // variable key lengths to test padding
+    private static final String[] KEYS = {KEY1, KEY2, KEY3, KEY4};
+
+    private static final String DATA1 = "abcdef";
+    private static final String DATA2 = "abcdefg";
+    private static final String DATA3 = "abcdefgh";
+    private static final String DATA4 = "abcdeffhi"; //variable data lengths to test padding
+    private static final String[] DATA = {DATA1, DATA2, DATA3, DATA4};
+    private static final String TAG = "BackupDataTest";
+
+    private File mFile;
+    private ParcelFileDescriptor mDataFile;
+    private File mDirectory;
+    private Bundle mStatusBundle;
+    private AssetManager mAssets;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mDirectory = new File(Environment.getExternalStorageDirectory(), "test_data");
+        mDirectory.mkdirs();
+        mAssets = mContext.getAssets();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        super.tearDown();
+        if (mDataFile != null) {
+            mDataFile.close();
+        }
+    }
+
+    public void testSingle() throws IOException {
+        mFile = new File(mDirectory, "backup_mixed_sinlge.dat");
+        openForWriting();
+        BackupDataOutput bdo = new BackupDataOutput(mDataFile.getFileDescriptor());
+
+        writeEntity(bdo, KEY1, DATA1.getBytes());
+
+        mDataFile.close();
+        openForReading();
+
+        BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
+        int count = 0;
+        while (bdi.readNextHeader()) {
+            readAndVerifyEntity(bdi, KEY1, DATA1.getBytes());
+            count++;
+        }
+        assertEquals("only one entity in this stream", 1, count);
+    }
+
+    public void testMultiple() throws IOException {
+        mFile = new File(mDirectory, "backup_multiple_test.dat");
+        openForWriting();
+        BackupDataOutput bdo = new BackupDataOutput(mDataFile.getFileDescriptor());
+
+        for(int i = 0; i < KEYS.length; i++) {
+            writeEntity(bdo, KEYS[i], DATA[i].getBytes());
+        }
+
+        mDataFile.close();
+        openForReading();
+
+        BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
+        int count = 0;
+        while (bdi.readNextHeader()) {
+            readAndVerifyEntity(bdi, KEYS[count], DATA[count].getBytes());
+            count++;
+        }
+        assertEquals("four entities in this stream", KEYS.length, count);
+    }
+
+    public void testDelete() throws IOException {
+        mFile = new File(mDirectory, "backup_delete_test.dat");
+        openForWriting();
+        BackupDataOutput bdo = new BackupDataOutput(mDataFile.getFileDescriptor());
+
+        for(int i = 0; i < KEYS.length; i++) {
+            deleteEntity(bdo, KEYS[i]);
+        }
+
+        mDataFile.close();
+        openForReading();
+
+        BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
+        int count = 0;
+        while (bdi.readNextHeader()) {
+            readAndVerifyDeletedEntity(bdi, KEYS[count]);
+            count++;
+        }
+        assertEquals("four deletes in this stream", KEYS.length, count);
+    }
+
+    public void testMixed() throws IOException {
+        mFile = new File(mDirectory, "backup_mixed_test.dat");
+        openForWriting();
+
+        BackupDataOutput bdo = new BackupDataOutput(mDataFile.getFileDescriptor());
+
+        int i = 0;
+        deleteEntity(bdo, KEYS[i]); i++;
+        writeEntity(bdo, KEYS[i], DATA[i].getBytes()); i++;
+        writeEntity(bdo, KEYS[i], DATA[i].getBytes()); i++;
+        deleteEntity(bdo, KEYS[i]); i++;
+
+        mDataFile.close();
+        openForReading();
+
+        BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
+        int out = 0;
+        assertTrue(bdi.readNextHeader());
+        readAndVerifyDeletedEntity(bdi, KEYS[out]); out++;
+        assertTrue(bdi.readNextHeader());
+        readAndVerifyEntity(bdi, KEYS[out], DATA[out].getBytes()); out++;
+        assertTrue(bdi.readNextHeader());
+        readAndVerifyEntity(bdi, KEYS[out], DATA[out].getBytes()); out++;
+        assertTrue(bdi.readNextHeader());
+        readAndVerifyDeletedEntity(bdi, KEYS[out]); out++;
+        assertFalse("four items in this stream",
+                bdi.readNextHeader());
+    }
+
+    public void testReadMockData() throws IOException {
+        copyAssetToFile("backup_mock.dat", "backup_read_mock_test.dat");
+
+        openForReading();
+        BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
+        BufferedReader truth = new BufferedReader(new InputStreamReader(
+                mAssets.openFd("backup_mock.gld").createInputStream()));
+        while( bdi.readNextHeader()) {
+            String[] expected = truth.readLine().split(":");
+            byte[] expectedBytes = null;
+            if (expected.length > 1) {
+                expectedBytes = Base64.decode(expected[1], Base64.DEFAULT);
+            }
+            String key = bdi.getKey();
+            int dataSize = bdi.getDataSize();
+
+            assertEquals("wrong key", expected[0], key);
+            assertEquals("wrong length for key " + key,
+                    (expectedBytes == null ? -1: expectedBytes.length), dataSize);
+            if (dataSize != -1) {
+                byte[] buffer = new byte[dataSize];
+                bdi.readEntityData(buffer, 0, dataSize);
+                assertEquals("wrong data for key " + key, expected[1],
+                        Base64.encodeToString(buffer, 0, dataSize, Base64.NO_WRAP));
+            }
+        }
+        assertNull("there are unused entries in the golden file", truth.readLine());
+    }
+
+    public void testReadRealData() throws IOException {
+        copyAssetToFile("backup_real.dat", "backup_read_real_test.dat");
+
+        openForReading();
+        BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
+        BufferedReader truth = new BufferedReader(new InputStreamReader(
+                mAssets.openFd("backup_real.gld").createInputStream()));
+
+        while(bdi.readNextHeader()) {
+            String[] expected = truth.readLine().split(":");
+            byte[] expectedBytes = null;
+            if (expected.length > 1) {
+                expectedBytes = Base64.decode(expected[1], Base64.DEFAULT);
+            }
+            String key = bdi.getKey();
+            int dataSize = bdi.getDataSize();
+
+            assertEquals("wrong key", expected[0], key);
+            assertEquals("wrong length for key " + key,
+                    (expectedBytes == null ? -1: expectedBytes.length), dataSize);
+            if (dataSize != -1) {
+                byte[] buffer = new byte[dataSize];
+                bdi.readEntityData(buffer, 0, dataSize);
+                assertEquals("wrong data for key " + key, expected[1],
+                        Base64.encodeToString(buffer, 0, dataSize, Base64.NO_WRAP));
+            }
+        }
+        assertNull("there are unused entries in the golden file", truth.readLine());
+    }
+
+    private void copyAssetToFile(String source, String destination) throws IOException {
+        mFile = new File(mDirectory, destination);
+        openForWriting();
+        FileInputStream fileInputStream = mAssets.openFd(source).createInputStream();
+        FileOutputStream fileOutputStream = new FileOutputStream(mDataFile.getFileDescriptor());
+        byte[] copybuffer = new byte[1024];
+        int numBytes = fileInputStream.read(copybuffer);
+        fileOutputStream.write(copybuffer, 0, numBytes);
+        fileOutputStream.close();
+    }
+
+    private void openForWriting() throws FileNotFoundException {
+        mDataFile = ParcelFileDescriptor.open(mFile,
+                ParcelFileDescriptor.MODE_WRITE_ONLY |
+                        ParcelFileDescriptor.MODE_CREATE |
+                        ParcelFileDescriptor.MODE_TRUNCATE);  // Make an empty file if necessary
+    }
+
+    private void openForReading() throws FileNotFoundException {
+        mDataFile = ParcelFileDescriptor.open(mFile,
+                ParcelFileDescriptor.MODE_READ_ONLY |
+                        ParcelFileDescriptor.MODE_CREATE);  // Make an empty file if necessary
+    }
+
+    private void writeEntity(BackupDataOutput bdo, String key, byte[] data) throws IOException {
+        int status = bdo.writeEntityHeader(key, data.length);
+        // documentation says "number of bytes written" but that's not what we get:
+        assertEquals(0, status);
+
+        status = bdo.writeEntityData(data, data.length);
+        // documentation says "number of bytes written" but that's not what we get:
+        assertEquals(0, status);
+    }
+
+    private void deleteEntity(BackupDataOutput bdo, String key) throws IOException {
+        int status = bdo.writeEntityHeader(key, -1);
+        // documentation says "number of bytes written" but that's not what we get:
+        assertEquals(0, status);
+    }
+
+    private void readAndVerifyEntity(BackupDataInput bdi, String expectedKey, byte[] expectedData)
+            throws IOException {
+        assertEquals("Key mismatch",
+                expectedKey, bdi.getKey());
+        assertEquals("data size mismatch",
+                expectedData.length, bdi.getDataSize());
+        byte[] data = new byte[bdi.getDataSize()];
+        bdi.readEntityData(data, 0, bdi.getDataSize());
+        assertEquals("payload size is wrong",
+                expectedData.length, data.length);
+        for (int i = 0; i < data.length; i++) {
+            assertEquals("payload mismatch",
+                    expectedData[i], data[i]);
+        }
+    }
+    private void readAndVerifyDeletedEntity(BackupDataInput bdi, String expectedKey)
+            throws IOException {
+        assertEquals("Key mismatch",
+                expectedKey, bdi.getKey());
+        assertEquals("deletion mis-reported",
+                -1, bdi.getDataSize());
+    }
+}
diff --git a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
index 84b56ce..07a6a10 100644
--- a/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
+++ b/core/tests/coretests/src/android/content/pm/PackageManagerTests.java
@@ -21,6 +21,7 @@
 import com.android.frameworks.coretests.R;
 import com.android.internal.content.PackageHelper;
 
+import android.app.PackageInstallObserver;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -31,6 +32,7 @@
 import android.content.res.Resources;
 import android.content.res.Resources.NotFoundException;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.Environment;
 import android.os.FileUtils;
 import android.os.IBinder;
@@ -116,12 +118,12 @@
         super.tearDown();
     }
 
-    private class PackageInstallObserver extends IPackageInstallObserver.Stub {
+    private class TestInstallObserver extends PackageInstallObserver {
         public int returnCode;
 
         private boolean doneFlag = false;
 
-        public void packageInstalled(String packageName, int returnCode) {
+        public void packageInstalled(String packageName, Bundle extras, int returnCode) {
             synchronized (this) {
                 this.returnCode = returnCode;
                 doneFlag = true;
@@ -202,7 +204,7 @@
 
     public void invokeInstallPackage(Uri packageURI, int flags, GenericReceiver receiver,
             boolean shouldSucceed) {
-        PackageInstallObserver observer = new PackageInstallObserver();
+        TestInstallObserver observer = new TestInstallObserver();
         mContext.registerReceiver(receiver, receiver.filter);
         try {
             // Wait on observer
@@ -260,7 +262,7 @@
     }
 
     public void invokeInstallPackageFail(Uri packageURI, int flags, int expectedResult) {
-        PackageInstallObserver observer = new PackageInstallObserver();
+        TestInstallObserver observer = new TestInstallObserver();
         try {
             // Wait on observer
             synchronized (observer) {
diff --git a/core/tests/coretests/src/android/database/DatabaseCursorTest.java b/core/tests/coretests/src/android/database/DatabaseCursorTest.java
index 36f0f4b..08cd027 100644
--- a/core/tests/coretests/src/android/database/DatabaseCursorTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseCursorTest.java
@@ -51,8 +51,8 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-	File dbDir = getContext().getDir("tests", Context.MODE_PRIVATE);
-	mDatabaseFile = new File(dbDir, "database_test.db");
+        File dbDir = getContext().getDir("tests", Context.MODE_PRIVATE);
+        mDatabaseFile = new File(dbDir, "database_test.db");
 
         if (mDatabaseFile.exists()) {
             mDatabaseFile.delete();
diff --git a/core/tests/coretests/src/android/database/DatabaseStatementTest.java b/core/tests/coretests/src/android/database/DatabaseStatementTest.java
index 512d5cd..895d715 100644
--- a/core/tests/coretests/src/android/database/DatabaseStatementTest.java
+++ b/core/tests/coretests/src/android/database/DatabaseStatementTest.java
@@ -41,8 +41,8 @@
     @Override
     protected void setUp() throws Exception {
         super.setUp();
-	File dbDir = getContext().getDir("tests", Context.MODE_PRIVATE);
-	mDatabaseFile = new File(dbDir, "database_test.db");
+        File dbDir = getContext().getDir("tests", Context.MODE_PRIVATE);
+        mDatabaseFile = new File(dbDir, "database_test.db");
 
         if (mDatabaseFile.exists()) {
             mDatabaseFile.delete();
diff --git a/core/tests/coretests/src/android/net/NetworkKeyTest.java b/core/tests/coretests/src/android/net/NetworkKeyTest.java
new file mode 100644
index 0000000..9005188
--- /dev/null
+++ b/core/tests/coretests/src/android/net/NetworkKeyTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.os.Parcel;
+
+import junit.framework.TestCase;
+
+public class NetworkKeyTest extends TestCase {
+    public void testValidWifiKey_utf8() {
+        new WifiKey("\"quotedSsid\"", "AB:CD:01:EF:23:03");
+        new WifiKey("\"\"", "AB:CD:01:EF:23:03");
+    }
+
+    public void testValidWifiKey_hex() {
+        new WifiKey("0x1234abcd", "AB:CD:01:EF:23:03");
+    }
+
+    public void testInvalidWifiKey_empty() {
+        try {
+            new WifiKey("", "AB:CD:01:EF:23:03");
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - empty SSID
+        }
+    }
+
+    public void testInvalidWifiKey_unquotedUtf8() {
+        try {
+            new WifiKey("unquotedSsid", "AB:CD:01:EF:23:03");
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - empty SSID
+        }
+    }
+
+    public void testInvalidWifiKey_invalidHex() {
+        try {
+            new WifiKey("0x\"nothex\"", "AB:CD:01:EF:23:03");
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - empty SSID
+        }
+    }
+
+    public void testInvalidWifiKey_shortBssid() {
+        try {
+            new WifiKey("\"quotedSsid\"", "AB:CD:01:EF:23");
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - BSSID too short
+        }
+    }
+
+    public void testInvalidWifiKey_longBssid() {
+        try {
+            new WifiKey("\"quotedSsid\"", "AB:CD:01:EF:23:03:11");
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected - BSSID too long
+        }
+    }
+
+    public void testParceling() {
+        WifiKey wifiKey = new WifiKey("\"ssid\"", "00:00:00:00:00:00");
+        NetworkKey networkKey = new NetworkKey(wifiKey);
+        Parcel parcel = null;
+        try {
+            parcel = Parcel.obtain();
+            parcel.writeParcelable(networkKey, 0);
+            parcel.setDataPosition(0);
+            networkKey = parcel.readParcelable(getClass().getClassLoader());
+        } finally {
+            if (parcel != null) {
+                parcel.recycle();
+            }
+        }
+
+        assertEquals(NetworkKey.TYPE_WIFI, networkKey.type);
+        assertEquals("\"ssid\"", networkKey.wifiKey.ssid);
+        assertEquals("00:00:00:00:00:00", networkKey.wifiKey.bssid);
+    }
+}
diff --git a/core/tests/coretests/src/android/net/NetworkScorerAppManagerTest.java b/core/tests/coretests/src/android/net/NetworkScorerAppManagerTest.java
new file mode 100644
index 0000000..cac6b93
--- /dev/null
+++ b/core/tests/coretests/src/android/net/NetworkScorerAppManagerTest.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.Manifest.permission;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.test.InstrumentationTestCase;
+
+import com.google.android.collect.Lists;
+
+import org.mockito.ArgumentMatcher;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Iterator;
+
+public class NetworkScorerAppManagerTest extends InstrumentationTestCase {
+    @Mock private Context mMockContext;
+    @Mock private PackageManager mMockPm;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        // Configuration needed to make mockito/dexcache work.
+        System.setProperty("dexmaker.dexcache",
+                getInstrumentation().getTargetContext().getCacheDir().getPath());
+        ClassLoader newClassLoader = getInstrumentation().getClass().getClassLoader();
+        Thread.currentThread().setContextClassLoader(newClassLoader);
+
+        MockitoAnnotations.initMocks(this);
+        Mockito.when(mMockContext.getPackageManager()).thenReturn(mMockPm);
+    }
+
+    public void testGetAllValidScorers() throws Exception {
+        // Package 1 - Valid scorer.
+        ResolveInfo package1 = buildResolveInfo("package1", true, true);
+
+        // Package 2 - Receiver does not have BROADCAST_SCORE_NETWORKS permission.
+        ResolveInfo package2 = buildResolveInfo("package2", false, true);
+
+        // Package 3 - App does not have SCORE_NETWORKS permission.
+        ResolveInfo package3 = buildResolveInfo("package3", true, false);
+
+        setScorers(package1, package2, package3);
+
+        Iterator<String> result =
+                NetworkScorerAppManager.getAllValidScorers(mMockContext).iterator();
+
+        assertTrue(result.hasNext());
+        assertEquals("package1", result.next());
+
+        assertFalse(result.hasNext());
+    }
+
+    private void setScorers(ResolveInfo... scorers) {
+        Mockito.when(mMockPm.queryBroadcastReceivers(
+                Mockito.argThat(new ArgumentMatcher<Intent>() {
+                    @Override
+                    public boolean matches(Object object) {
+                        Intent intent = (Intent) object;
+                        return NetworkScoreManager.ACTION_SCORE_NETWORKS.equals(intent.getAction());
+                    }
+                }), Mockito.eq(0)))
+                .thenReturn(Lists.newArrayList(scorers));
+    }
+
+    private ResolveInfo buildResolveInfo(String packageName,
+            boolean hasReceiverPermission, boolean hasScorePermission) throws Exception {
+        Mockito.when(mMockPm.checkPermission(permission.SCORE_NETWORKS, packageName))
+                .thenReturn(hasScorePermission ?
+                        PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED);
+
+        ResolveInfo resolveInfo = new ResolveInfo();
+        resolveInfo.activityInfo = new ActivityInfo();
+        resolveInfo.activityInfo.packageName = packageName;
+        if (hasReceiverPermission) {
+            resolveInfo.activityInfo.permission = permission.BROADCAST_SCORE_NETWORKS;
+        }
+        return resolveInfo;
+    }
+}
diff --git a/core/tests/coretests/src/android/net/RssiCurveTest.java b/core/tests/coretests/src/android/net/RssiCurveTest.java
new file mode 100644
index 0000000..d4438df
--- /dev/null
+++ b/core/tests/coretests/src/android/net/RssiCurveTest.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import junit.framework.TestCase;
+
+public class RssiCurveTest extends TestCase {
+    public void testLookupScore_constantCurve() {
+        RssiCurve curve = new RssiCurve(-100, 200, new byte[] { 10 });
+        assertEquals(10, curve.lookupScore(-200));
+        assertEquals(10, curve.lookupScore(-100));
+        assertEquals(10, curve.lookupScore(0));
+        assertEquals(10, curve.lookupScore(100));
+        assertEquals(10, curve.lookupScore(200));
+    }
+
+    public void testLookupScore_changingCurve() {
+        RssiCurve curve = new RssiCurve(-100, 100, new byte[] { -10, 10 });
+        assertEquals(-10, curve.lookupScore(-200));
+        assertEquals(-10, curve.lookupScore(-100));
+        assertEquals(-10, curve.lookupScore(-50));
+        assertEquals(10, curve.lookupScore(0));
+        assertEquals(10, curve.lookupScore(50));
+        assertEquals(10, curve.lookupScore(100));
+        assertEquals(10, curve.lookupScore(200));
+    }
+}
diff --git a/core/tests/coretests/src/android/net/SSLSessionCacheTest.java b/core/tests/coretests/src/android/net/SSLSessionCacheTest.java
new file mode 100644
index 0000000..be19303
--- /dev/null
+++ b/core/tests/coretests/src/android/net/SSLSessionCacheTest.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2013 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 android.net;
+
+import com.android.org.conscrypt.ClientSessionContext;
+import com.android.org.conscrypt.SSLClientSessionCache;
+
+import com.google.testing.littlemock.LittleMock;
+
+import junit.framework.TestCase;
+
+import java.security.KeyManagementException;
+import java.security.SecureRandom;
+
+import javax.net.ssl.KeyManager;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.SSLContextSpi;
+import javax.net.ssl.SSLEngine;
+import javax.net.ssl.SSLServerSocketFactory;
+import javax.net.ssl.SSLSessionContext;
+import javax.net.ssl.SSLSocketFactory;
+import javax.net.ssl.TrustManager;
+
+public class SSLSessionCacheTest extends TestCase {
+
+    public void testInstall_compatibleContext() throws Exception {
+        final SSLContext ctx = SSLContext.getDefault();
+        final SSLClientSessionCache mock = LittleMock.mock(SSLClientSessionCache.class);
+        final ClientSessionContext clientCtx = (ClientSessionContext) ctx.getClientSessionContext();
+
+        try {
+            SSLSessionCache.install(new SSLSessionCache(mock), ctx);
+            clientCtx.getSession("www.foogle.com", 443);
+            LittleMock.verify(mock).getSessionData(LittleMock.anyString(), LittleMock.anyInt());
+        } finally {
+            // Restore cacheless behaviour.
+            SSLSessionCache.install(null, ctx);
+            clientCtx.getSession("www.foogle.com", 443);
+            LittleMock.verifyNoMoreInteractions(mock);
+        }
+    }
+
+    public void testInstall_incompatibleContext() {
+        try {
+            SSLSessionCache.install(
+                    new SSLSessionCache(LittleMock.mock(SSLClientSessionCache.class)),
+                    new FakeSSLContext());
+            fail();
+        } catch (IllegalArgumentException expected) {}
+    }
+
+    static final class FakeSSLContext extends SSLContext {
+        protected FakeSSLContext() {
+            super(new FakeSSLContextSpi(), null, "test");
+        }
+    }
+
+    static final class FakeSSLContextSpi extends SSLContextSpi {
+        @Override
+        protected void engineInit(KeyManager[] keyManagers, TrustManager[] trustManagers,
+                SecureRandom secureRandom) throws KeyManagementException {
+        }
+
+        @Override
+        protected SSLSocketFactory engineGetSocketFactory() {
+            return null;
+        }
+
+        @Override
+        protected SSLServerSocketFactory engineGetServerSocketFactory() {
+            return null;
+        }
+
+        @Override
+        protected SSLEngine engineCreateSSLEngine(String s, int i) {
+            return null;
+        }
+
+        @Override
+        protected SSLEngine engineCreateSSLEngine() {
+            return null;
+        }
+
+        @Override
+        protected SSLSessionContext engineGetServerSessionContext() {
+            return null;
+        }
+
+        @Override
+        protected SSLSessionContext engineGetClientSessionContext() {
+            return LittleMock.mock(SSLSessionContext.class);
+        }
+    }
+}
diff --git a/core/tests/coretests/src/android/net/ScoredNetworkTest.java b/core/tests/coretests/src/android/net/ScoredNetworkTest.java
new file mode 100644
index 0000000..7ab69ad
--- /dev/null
+++ b/core/tests/coretests/src/android/net/ScoredNetworkTest.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2014 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 android.net;
+
+import android.os.Parcel;
+
+import junit.framework.TestCase;
+
+import java.util.Arrays;
+
+public class ScoredNetworkTest extends TestCase {
+    private static final RssiCurve CURVE =
+            new RssiCurve(-110, 10, new byte[] {0, 1, 2, 3, 4, 5, 6, 7});
+
+    public void testInvalidCurve_nullBuckets() {
+        try {
+            new RssiCurve(-110, 10, null);
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+    }
+
+    public void testInvalidCurve_emptyBuckets() {
+        try {
+            new RssiCurve(-110, 10, new byte[] {});
+            fail("Should have thrown IllegalArgumentException");
+        } catch (IllegalArgumentException e) {
+            // expected
+        }
+    }
+
+    public void testParceling() {
+        NetworkKey key = new NetworkKey(new WifiKey("\"ssid\"", "00:00:00:00:00:00"));
+        ScoredNetwork network = new ScoredNetwork(key, CURVE);
+        Parcel parcel = null;
+        try {
+            parcel = Parcel.obtain();
+            parcel.writeParcelable(network, 0);
+            parcel.setDataPosition(0);
+            network = parcel.readParcelable(getClass().getClassLoader());
+        } finally {
+            if (parcel != null) {
+                parcel.recycle();
+            }
+        }
+        assertEquals(CURVE.start, network.rssiCurve.start);
+        assertEquals(CURVE.bucketWidth, network.rssiCurve.bucketWidth);
+        assertTrue(Arrays.equals(CURVE.rssiBuckets, network.rssiCurve.rssiBuckets));
+    }
+}
diff --git a/core/tests/coretests/src/android/net/UriTest.java b/core/tests/coretests/src/android/net/UriTest.java
index 6fb8946..cd45017 100644
--- a/core/tests/coretests/src/android/net/UriTest.java
+++ b/core/tests/coretests/src/android/net/UriTest.java
@@ -19,12 +19,14 @@
 import android.content.ContentUris;
 import android.os.Parcel;
 import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
 import java.io.File;
 import java.util.Arrays;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
-import junit.framework.TestCase;
 
 public class UriTest extends TestCase {
 
@@ -752,4 +754,54 @@
         assertEquals("d e", Uri.parse("http://a/b?c=d%20e").getQueryParameter("c"));
         assertEquals("d e", Uri.parse("http://a/b?c=d+e").getQueryParameter("c"));
     }
+
+    public void testPathPrefixMatch() {
+        // Exact match
+        assertTrue(Uri.parse("content://com.example/path").isPathPrefixMatch(
+                Uri.parse("content://com.example/path/")));
+        assertTrue(Uri.parse("content://com.example/path").isPathPrefixMatch(
+                Uri.parse("content://com.example/path")));
+        assertTrue(Uri.parse("content://com.example///path///").isPathPrefixMatch(
+                Uri.parse("content://com.example/path/")));
+        assertTrue(Uri.parse("content://com.example/path").isPathPrefixMatch(
+                Uri.parse("content://com.example///path///")));
+
+        // Child match
+        assertTrue(Uri.parse("content://com.example/path/to/child").isPathPrefixMatch(
+                Uri.parse("content://com.example/path/")));
+        assertTrue(Uri.parse("content://com.example/path/to/child").isPathPrefixMatch(
+                Uri.parse("content://com.example/path")));
+
+        // Extra parameters
+        assertTrue(Uri.parse("content://com.example/path#fragment").isPathPrefixMatch(
+                Uri.parse("content://com.example/path/")));
+        assertTrue(Uri.parse("content://com.example/path?q=v").isPathPrefixMatch(
+                Uri.parse("content://com.example/path/")));
+        assertTrue(Uri.parse("content://com.example/path/?q=v").isPathPrefixMatch(
+                Uri.parse("content://com.example/path/")));
+
+        // Different path
+        assertFalse(Uri.parse("content://com.example/path").isPathPrefixMatch(
+                Uri.parse("content://com.example/path/deeper/")));
+        assertFalse(Uri.parse("content://com.example/path2").isPathPrefixMatch(
+                Uri.parse("content://com.example/path")));
+
+        // Top-level match
+        assertTrue(Uri.parse("content://com.example/path/").isPathPrefixMatch(
+                Uri.parse("content://com.example/")));
+        assertTrue(Uri.parse("content://com.example/path/").isPathPrefixMatch(
+                Uri.parse("content://com.example")));
+
+        // Different prefixes
+        assertFalse(Uri.parse("content://com.example/path/").isPathPrefixMatch(
+                Uri.parse("file://com.example/path/")));
+        assertFalse(Uri.parse("content://com.example/path/").isPathPrefixMatch(
+                Uri.parse("content://org.example/path/")));
+
+        // Escaping
+        assertTrue(Uri.parse("content://com.example/path path/").isPathPrefixMatch(
+                Uri.parse("content://com.example/path%20path/")));
+        assertFalse(Uri.parse("content://com.example/path/path").isPathPrefixMatch(
+                Uri.parse("content://com.example/path%2Fpath")));
+    }
 }
diff --git a/core/tests/coretests/src/android/os/FileUtilsTest.java b/core/tests/coretests/src/android/os/FileUtilsTest.java
index 0f2b803..93e68eb 100644
--- a/core/tests/coretests/src/android/os/FileUtilsTest.java
+++ b/core/tests/coretests/src/android/os/FileUtilsTest.java
@@ -26,6 +26,8 @@
 
 import com.google.android.collect.Sets;
 
+import libcore.io.IoUtils;
+
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileOutputStream;
@@ -33,8 +35,6 @@
 import java.util.Arrays;
 import java.util.HashSet;
 
-import libcore.io.IoUtils;
-
 @MediumTest
 public class FileUtilsTest extends AndroidTestCase {
     private static final String TEST_DATA =
@@ -112,6 +112,23 @@
         assertEquals("", FileUtils.readTextFile(mTestFile, -10, "<>"));
     }
 
+    public void testContains() throws Exception {
+        assertTrue(FileUtils.contains(new File("/"), new File("/moo.txt")));
+        assertTrue(FileUtils.contains(new File("/"), new File("/")));
+
+        assertTrue(FileUtils.contains(new File("/sdcard"), new File("/sdcard")));
+        assertTrue(FileUtils.contains(new File("/sdcard/"), new File("/sdcard/")));
+
+        assertTrue(FileUtils.contains(new File("/sdcard"), new File("/sdcard/moo.txt")));
+        assertTrue(FileUtils.contains(new File("/sdcard/"), new File("/sdcard/moo.txt")));
+
+        assertFalse(FileUtils.contains(new File("/sdcard"), new File("/moo.txt")));
+        assertFalse(FileUtils.contains(new File("/sdcard/"), new File("/moo.txt")));
+
+        assertFalse(FileUtils.contains(new File("/sdcard"), new File("/sdcard.txt")));
+        assertFalse(FileUtils.contains(new File("/sdcard/"), new File("/sdcard.txt")));
+    }
+
     public void testDeleteOlderEmptyDir() throws Exception {
         FileUtils.deleteOlderFiles(mDir, 10, WEEK_IN_MILLIS);
         assertDirContents();
@@ -123,7 +140,7 @@
         touch("file3", 2 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
         touch("file4", 3 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
         touch("file5", 4 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
-        FileUtils.deleteOlderFiles(mDir, 3, DAY_IN_MILLIS);
+        assertTrue(FileUtils.deleteOlderFiles(mDir, 3, DAY_IN_MILLIS));
         assertDirContents("file1", "file2", "file3");
     }
 
@@ -131,13 +148,13 @@
         touch("file1", -HOUR_IN_MILLIS);
         touch("file2", HOUR_IN_MILLIS);
         touch("file3", WEEK_IN_MILLIS);
-        FileUtils.deleteOlderFiles(mDir, 0, DAY_IN_MILLIS);
+        assertTrue(FileUtils.deleteOlderFiles(mDir, 0, DAY_IN_MILLIS));
         assertDirContents("file1", "file2");
 
         touch("file1", -HOUR_IN_MILLIS);
         touch("file2", HOUR_IN_MILLIS);
         touch("file3", WEEK_IN_MILLIS);
-        FileUtils.deleteOlderFiles(mDir, 0, DAY_IN_MILLIS);
+        assertTrue(FileUtils.deleteOlderFiles(mDir, 0, DAY_IN_MILLIS));
         assertDirContents("file1", "file2");
     }
 
@@ -147,7 +164,8 @@
         touch("file3", 2 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
         touch("file4", 3 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
         touch("file5", 4 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
-        FileUtils.deleteOlderFiles(mDir, 0, DAY_IN_MILLIS);
+        assertTrue(FileUtils.deleteOlderFiles(mDir, 0, DAY_IN_MILLIS));
+        assertFalse(FileUtils.deleteOlderFiles(mDir, 0, DAY_IN_MILLIS));
         assertDirContents("file1");
     }
 
@@ -157,7 +175,8 @@
         touch("file3", 2 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
         touch("file4", 3 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
         touch("file5", 4 * DAY_IN_MILLIS + HOUR_IN_MILLIS);
-        FileUtils.deleteOlderFiles(mDir, 2, 0);
+        assertTrue(FileUtils.deleteOlderFiles(mDir, 2, 0));
+        assertFalse(FileUtils.deleteOlderFiles(mDir, 2, 0));
         assertDirContents("file1", "file2");
     }
 
diff --git a/core/tests/coretests/src/android/text/HtmlTest.java b/core/tests/coretests/src/android/text/HtmlTest.java
deleted file mode 100644
index b2298f7..0000000
--- a/core/tests/coretests/src/android/text/HtmlTest.java
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright (C) 2007 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 android.text;
-
-import android.content.res.ColorStateList;
-import android.content.res.Resources;
-import android.graphics.Typeface;
-import android.test.suitebuilder.annotation.SmallTest;
-import android.text.style.ForegroundColorSpan;
-import android.text.style.QuoteSpan;
-import android.text.style.StrikethroughSpan;
-import android.text.style.StyleSpan;
-import android.text.style.SubscriptSpan;
-import android.text.style.SuperscriptSpan;
-import android.text.style.TextAppearanceSpan;
-import android.text.style.TypefaceSpan;
-import android.text.style.URLSpan;
-import android.text.style.UnderlineSpan;
-
-import junit.framework.TestCase;
-
-public class HtmlTest extends TestCase {
-
-    @SmallTest
-    public void testSingleTagOnWhileString() {
-        Spanned spanned = Html.fromHtml("<b>hello</b>");
-        Object[] spans = spanned.getSpans(-1, 100, Object.class);
-        assertEquals(1, spans.length);
-        Object span = spans[0];
-        assertEquals(0, spanned.getSpanStart(span));
-        assertEquals(5, spanned.getSpanEnd(span));
-    }
-
-    @SmallTest
-    public void testEmptyFontTag() {
-        Spanned spanned = Html.fromHtml("Hello <font color=\"#ff00ff00\"></font>");
-        Object[] spans = spanned.getSpans(0, 100, Object.class);
-        // TODO: figure out what the spans should be after the crashes are fixed and assert them.
-    }
-
-    /** Tests that the parser can handle mal-formed HTML. */
-    @SmallTest
-    public void testBadHtml() {
-        Spanned spanned = Html.fromHtml("Hello <b>b<i>bi</b>i</i>");
-        Object[] spans = spanned.getSpans(0, 100, Object.class);
-        assertEquals(Typeface.ITALIC, ((StyleSpan) spans[0]).getStyle());
-        assertEquals(7, spanned.getSpanStart(spans[0]));
-        assertEquals(9, spanned.getSpanEnd(spans[0]));
-        assertEquals(Typeface.BOLD, ((StyleSpan) spans[1]).getStyle());
-        assertEquals(6, spanned.getSpanStart(spans[1]));
-        assertEquals(9, spanned.getSpanEnd(spans[1]));
-        assertEquals(Typeface.ITALIC, ((StyleSpan) spans[2]).getStyle());
-        assertEquals(9, spanned.getSpanStart(spans[2]));
-        assertEquals(10, spanned.getSpanEnd(spans[2]));
-    }
-
-    @SmallTest
-    public void testSymbols() {
-        String spanned = Html.fromHtml("&copy; &gt; &lt").toString();
-        assertEquals("\u00a9 > <", spanned);
-    }
-    
-    @SmallTest
-    public void testColor() throws Exception {
-        Spanned s;
-        ForegroundColorSpan[] colors;
-
-        s = Html.fromHtml("<font color=\"#00FF00\">something</font>");
-        colors = s.getSpans(0, s.length(), ForegroundColorSpan.class);
-        assertEquals(1, colors.length);
-        assertEquals(0xFF00FF00, colors[0].getForegroundColor());
-
-        s = Html.fromHtml("<font color=\"navy\">something</font>");
-        colors = s.getSpans(0, s.length(), ForegroundColorSpan.class);
-        assertEquals(1, colors.length);
-        assertEquals(0xFF000080, colors[0].getForegroundColor());
-
-        s = Html.fromHtml("<font color=\"gibberish\">something</font>");
-        colors = s.getSpans(0, s.length(), ForegroundColorSpan.class);
-        assertEquals(0, colors.length);
-    }
-
-    @SmallTest
-    public void testResourceColor() throws Exception {
-        ColorStateList c =
-                Resources.getSystem().getColorStateList(android.R.color.primary_text_dark);
-        Spanned s;
-        TextAppearanceSpan[] colors;
-
-        s = Html.fromHtml("<font color=\"@android:color/primary_text_dark\">something</font>");
-        colors = s.getSpans(0, s.length(), TextAppearanceSpan.class);
-        assertEquals(1, colors.length);
-        assertEquals(c.toString(), colors[0].getTextColor().toString());
-
-        s = Html.fromHtml("<font color=\"@android:primary_text_dark\">something</font>");
-        colors = s.getSpans(0, s.length(), TextAppearanceSpan.class);
-        assertEquals(1, colors.length);
-        assertEquals(c.toString(), colors[0].getTextColor().toString());
-
-        s = Html.fromHtml("<font color=\"@color/primary_text_dark\">something</font>");
-        colors = s.getSpans(0, s.length(), TextAppearanceSpan.class);
-        assertEquals(1, colors.length);
-        assertEquals(c.toString(), colors[0].getTextColor().toString());
-
-        s = Html.fromHtml("<font color=\"@primary_text_dark\">something</font>");
-        colors = s.getSpans(0, s.length(), TextAppearanceSpan.class);
-        assertEquals(1, colors.length);
-        assertEquals(c.toString(), colors[0].getTextColor().toString());
-
-        s = Html.fromHtml("<font color=\"@" + android.R.color.primary_text_dark
-                + "\">something</font>");
-        colors = s.getSpans(0, s.length(), TextAppearanceSpan.class);
-        assertEquals(1, colors.length);
-        assertEquals(c.toString(), colors[0].getTextColor().toString());
-
-        s = Html.fromHtml("<font color=\"gibberish\">something</font>");
-        colors = s.getSpans(0, s.length(), TextAppearanceSpan.class);
-        assertEquals(colors.length, 0);
-    }
-
-    @SmallTest
-    public void testParagraphs() throws Exception {
-        SpannableString s;
-
-        s = new SpannableString("Hello world");
-        assertEquals(Html.toHtml(s), "<p>Hello world</p>\n");
-
-        s = new SpannableString("Hello world\nor something");
-        assertEquals(Html.toHtml(s), "<p>Hello world<br>\nor something</p>\n");
-
-        s = new SpannableString("Hello world\n\nor something");
-        assertEquals(Html.toHtml(s), "<p>Hello world</p>\n<p>or something</p>\n");
-
-        s = new SpannableString("Hello world\n\n\nor something");
-        assertEquals(Html.toHtml(s), "<p>Hello world<br></p>\n<p>or something</p>\n");
-
-        assertEquals("foo\nbar", Html.fromHtml("foo<br>bar").toString());
-        assertEquals("foo\nbar", Html.fromHtml("foo<br>\nbar").toString());
-        assertEquals("foo\nbar", Html.fromHtml("foo<br>\n \nbar").toString());
-    }
-
-    @SmallTest
-    public void testBlockquote() throws Exception {
-        SpannableString s;
-
-        s = new SpannableString("Hello world");
-        s.setSpan(new QuoteSpan(), 0, s.length(), Spannable.SPAN_PARAGRAPH);
-        assertEquals(Html.toHtml(s), "<blockquote><p>Hello world</p>\n</blockquote>\n");
-
-        s = new SpannableString("Hello\n\nworld");
-        s.setSpan(new QuoteSpan(), 0, 7, Spannable.SPAN_PARAGRAPH);
-        assertEquals(Html.toHtml(s), "<blockquote><p>Hello</p>\n</blockquote>\n<p>world</p>\n");
-    }
-
-    @SmallTest
-    public void testEntities() throws Exception {
-        SpannableString s;
-
-        s = new SpannableString("Hello <&> world");
-        assertEquals(Html.toHtml(s), "<p>Hello &lt;&amp;&gt; world</p>\n");
-
-        s = new SpannableString("Hello \u03D5 world");
-        assertEquals(Html.toHtml(s), "<p>Hello &#981; world</p>\n");
-
-        s = new SpannableString("Hello  world");
-        assertEquals(Html.toHtml(s), "<p>Hello&nbsp; world</p>\n");
-    }
-
-    @SmallTest
-    public void testMarkup() throws Exception {
-        SpannableString s;
-
-        s = new SpannableString("Hello bold world");
-        s.setSpan(new StyleSpan(Typeface.BOLD), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s), "<p>Hello <b>bold</b> world</p>\n");
-
-        s = new SpannableString("Hello italic world");
-        s.setSpan(new StyleSpan(Typeface.ITALIC), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s), "<p>Hello <i>italic</i> world</p>\n");
-
-        s = new SpannableString("Hello monospace world");
-        s.setSpan(new TypefaceSpan("monospace"), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s), "<p>Hello <tt>monospace</tt> world</p>\n");
-
-        s = new SpannableString("Hello superscript world");
-        s.setSpan(new SuperscriptSpan(), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s), "<p>Hello <sup>superscript</sup> world</p>\n");
-
-        s = new SpannableString("Hello subscript world");
-        s.setSpan(new SubscriptSpan(), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s), "<p>Hello <sub>subscript</sub> world</p>\n");
-
-        s = new SpannableString("Hello underline world");
-        s.setSpan(new UnderlineSpan(), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s), "<p>Hello <u>underline</u> world</p>\n");
-
-        s = new SpannableString("Hello struck world");
-        s.setSpan(new StrikethroughSpan(), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s), "<p>Hello <strike>struck</strike> world</p>\n");
-
-        s = new SpannableString("Hello linky world");
-        s.setSpan(new URLSpan("http://www.google.com"), 6, s.length() - 6,
-                  Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
-        assertEquals(Html.toHtml(s),
-                     "<p>Hello <a href=\"http://www.google.com\">linky</a> world</p>\n");
-    }
-
-    @SmallTest
-    public void testImg() throws Exception {
-        Spanned s;
-
-        s = Html.fromHtml("yes<img src=\"http://example.com/foo.gif\">no");
-
-        assertEquals("<p>yes<img src=\"http://example.com/foo.gif\">no</p>\n",
-                     Html.toHtml(s));
-    }
-
-    @SmallTest
-    public void testUtf8() throws Exception {
-        Spanned s;
-
-        s = Html.fromHtml("<p>\u0124\u00eb\u0142\u0142o, world!</p>");
-        assertEquals("<p>&#292;&#235;&#322;&#322;o, world!</p>\n", Html.toHtml(s));
-    }
-
-}
diff --git a/core/tests/coretests/src/com/android/internal/widget/SizeAdaptiveLayoutTest.java b/core/tests/coretests/src/com/android/internal/widget/SizeAdaptiveLayoutTest.java
index efd06bf..18411b0 100644
--- a/core/tests/coretests/src/com/android/internal/widget/SizeAdaptiveLayoutTest.java
+++ b/core/tests/coretests/src/com/android/internal/widget/SizeAdaptiveLayoutTest.java
@@ -438,17 +438,6 @@
         assertEquals("ModestyPanel color should match the SizeAdaptiveLayout",
                      panelColor.getColor(), Color.RED);
     }
-
-    @SmallTest
-    public void testModestyPanelHasDefault() {
-        inflate(R.layout.size_adaptive);
-        View panel = mSizeAdaptiveLayout.getModestyPanel();
-        assertNull("SizeAdaptiveLayout should have no background for this test",
-                     mSizeAdaptiveLayout.getBackground());
-        assertTrue("ModestyPanel should have a ColorDrawable background",
-                   panel.getBackground() instanceof ColorDrawable);
-    }
-
     @SmallTest
     public void testOpenSmallEvenWhenLargeIsActuallySmall() {
         inflate(R.layout.size_adaptive_lies);
diff --git a/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerBaseTest.java b/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerBaseTest.java
index f493e9a..f4bab43 100644
--- a/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerBaseTest.java
+++ b/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerBaseTest.java
@@ -27,14 +27,14 @@
 import android.net.NetworkInfo;
 import android.net.wifi.WifiManager;
 import android.os.Environment;
+import android.os.Handler;
+import android.os.Looper;
 import android.os.ParcelFileDescriptor;
 import android.os.SystemClock;
 import android.provider.Settings;
 import android.test.InstrumentationTestCase;
 import android.util.Log;
 
-import java.io.File;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 import java.util.concurrent.TimeoutException;
@@ -47,7 +47,6 @@
     protected DownloadManager mDownloadManager = null;
     protected String mFileType = "text/plain";
     protected Context mContext = null;
-    protected MultipleDownloadsCompletedReceiver mReceiver = null;
     protected static final int DEFAULT_FILE_SIZE = 10 * 1024;  // 10kb
     protected static final int FILE_BLOCK_READ_SIZE = 1024 * 1024;
 
@@ -65,70 +64,9 @@
     protected static final int MAX_WAIT_FOR_DOWNLOAD_TIME = 5 * 60 * 1000; // 5 minutes
     protected static final int MAX_WAIT_FOR_LARGE_DOWNLOAD_TIME = 15 * 60 * 1000; // 15 minutes
 
-    public static class MultipleDownloadsCompletedReceiver extends BroadcastReceiver {
-        private volatile int mNumDownloadsCompleted = 0;
-        private Set<Long> downloadIds = Collections.synchronizedSet(new HashSet<Long>());
+    private DownloadFinishedListener mListener;
+    private Thread mListenerThread;
 
-        /**
-         * {@inheritDoc}
-         */
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (intent.getAction().equalsIgnoreCase(DownloadManager.ACTION_DOWNLOAD_COMPLETE)) {
-                synchronized(this) {
-                    long id = intent.getExtras().getLong(DownloadManager.EXTRA_DOWNLOAD_ID);
-                    Log.i(LOG_TAG, "Received Notification for download: " + id);
-                    if (!downloadIds.contains(id)) {
-                        ++mNumDownloadsCompleted;
-                        Log.i(LOG_TAG, "MultipleDownloadsCompletedReceiver got intent: " +
-                                intent.getAction() + " --> total count: " + mNumDownloadsCompleted);
-                        downloadIds.add(id);
-
-                        DownloadManager dm = (DownloadManager)context.getSystemService(
-                                Context.DOWNLOAD_SERVICE);
-
-                        Cursor cursor = dm.query(new Query().setFilterById(id));
-                        try {
-                            if (cursor.moveToFirst()) {
-                                int status = cursor.getInt(cursor.getColumnIndex(
-                                        DownloadManager.COLUMN_STATUS));
-                                Log.i(LOG_TAG, "Download status is: " + status);
-                            } else {
-                                fail("No status found for completed download!");
-                            }
-                        } finally {
-                            cursor.close();
-                        }
-                    } else {
-                        Log.i(LOG_TAG, "Notification for id: " + id + " has already been made.");
-                    }
-                }
-            }
-        }
-
-        /**
-         * Gets the number of times the {@link #onReceive} callback has been called for the
-         * {@link DownloadManager#ACTION_DOWNLOAD_COMPLETE} action, indicating the number of
-         * downloads completed thus far.
-         *
-         * @return the number of downloads completed so far.
-         */
-        public int numDownloadsCompleted() {
-            return mNumDownloadsCompleted;
-        }
-
-        /**
-         * Gets the list of download IDs.
-         * @return A Set<Long> with the ids of the completed downloads.
-         */
-        public Set<Long> getDownloadIds() {
-            synchronized(this) {
-                Set<Long> returnIds = new HashSet<Long>(downloadIds);
-                return returnIds;
-            }
-        }
-
-    }
 
     public static class WiFiChangedReceiver extends BroadcastReceiver {
         private Context mContext = null;
@@ -172,13 +110,138 @@
     }
 
     /**
+     * Broadcast receiver to listen for broadcast from DownloadManager indicating that downloads
+     * are finished.
+     */
+    private class DownloadFinishedListener extends BroadcastReceiver implements Runnable {
+        private Handler mHandler = null;
+        private Looper mLooper;
+        private Set<Long> mFinishedDownloads = new HashSet<Long>();
+
+        /**
+         * Event loop for the thread that listens to broadcasts.
+         */
+        @Override
+        public void run() {
+            Looper.prepare();
+            synchronized (this) {
+                mLooper = Looper.myLooper();
+                mHandler = new Handler();
+                notifyAll();
+            }
+            Looper.loop();
+        }
+
+        /**
+         * Handles the incoming notifications from DownloadManager.
+         */
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(intent.getAction())) {
+                long id = intent.getExtras().getLong(DownloadManager.EXTRA_DOWNLOAD_ID);
+                Log.i(LOG_TAG, "Received Notification for download: " + id);
+                synchronized (this) {
+                    if(!mFinishedDownloads.contains(id)) {
+                        mFinishedDownloads.add(id);
+                        notifyAll();
+                    } else {
+                        Log.i(LOG_TAG,
+                              String.format("Notification for %d was already received", id));
+                    }
+                }
+            }
+        }
+
+        /**
+         * Returns the handler for this thread. Need this to make sure that the events are handled
+         * in it is own thread and don't interfere with the instrumentation thread.
+         * @return Handler for the receiver thread.
+         * @throws InterruptedException
+         */
+        private Handler getHandler() throws InterruptedException {
+            synchronized (this) {
+                if (mHandler != null) return mHandler;
+                while (mHandler == null) {
+                    wait();
+                }
+                return mHandler;
+            }
+        }
+
+        /**
+         * Stops the thread that receives notification from DownloadManager.
+         */
+        public void cancel() {
+            synchronized(this) {
+                if (mLooper != null) {
+                    mLooper.quit();
+                }
+            }
+        }
+
+        /**
+         * Waits for a given download to finish, or until the timeout expires.
+         * @param id id of the download to wait for.
+         * @param timeout maximum time to wait, in milliseconds
+         * @return true if the download finished, false otherwise.
+         * @throws InterruptedException
+         */
+        public boolean waitForDownloadToFinish(long id, long timeout) throws InterruptedException {
+            long startTime = SystemClock.uptimeMillis();
+            synchronized (this) {
+                while (!mFinishedDownloads.contains(id)) {
+                    if (SystemClock.uptimeMillis() - startTime > timeout) {
+                        Log.i(LOG_TAG, String.format("Timeout while waiting for %d to finish", id));
+                        return false;
+                    } else {
+                        wait(timeout);
+                    }
+                }
+                return true;
+            }
+        }
+
+        /**
+         * Waits for multiple downloads to finish, or until timeout expires.
+         * @param ids ids of the downloads to wait for.
+         * @param timeout maximum time to wait, in milliseconds
+         * @return true of all the downloads finished, false otherwise.
+         * @throws InterruptedException
+         */
+        public boolean waitForMultipleDownloadsToFinish(Set<Long> ids, long timeout)
+                throws InterruptedException {
+            long startTime = SystemClock.uptimeMillis();
+            synchronized (this) {
+                while (!mFinishedDownloads.containsAll(ids)) {
+                    if (SystemClock.uptimeMillis() - startTime > timeout) {
+                        Log.i(LOG_TAG, "Timeout waiting for multiple downloads to finish");
+                        return false;
+                    } else {
+                        wait(timeout);
+                    }
+                }
+                return true;
+            }
+        }
+    }
+
+    /**
      * {@inheritDoc}
      */
     @Override
     public void setUp() throws Exception {
+        super.setUp();
         mContext = getInstrumentation().getContext();
         mDownloadManager = (DownloadManager)mContext.getSystemService(Context.DOWNLOAD_SERVICE);
-        mReceiver = registerNewMultipleDownloadsReceiver();
+        mListener = registerDownloadsListener();
+    }
+
+    @Override
+    public void tearDown() throws Exception {
+        mContext.unregisterReceiver(mListener);
+        mListener.cancel();
+        mListenerThread.join();
+        super.tearDown();
     }
 
     /**
@@ -198,12 +261,15 @@
      * that have completed.
      *
      * @return A new receiver that records and can be queried on how many downloads have completed.
+     * @throws InterruptedException
      */
-    protected MultipleDownloadsCompletedReceiver registerNewMultipleDownloadsReceiver() {
-        MultipleDownloadsCompletedReceiver receiver = new MultipleDownloadsCompletedReceiver();
-        mContext.registerReceiver(receiver, new IntentFilter(
-                DownloadManager.ACTION_DOWNLOAD_COMPLETE));
-        return receiver;
+    protected DownloadFinishedListener registerDownloadsListener() throws InterruptedException {
+        DownloadFinishedListener listener = new DownloadFinishedListener();
+        mListenerThread = new Thread(listener);
+        mListenerThread.start();
+        mContext.registerReceiver(listener, new IntentFilter(
+                DownloadManager.ACTION_DOWNLOAD_COMPLETE), null, listener.getHandler());
+        return listener;
     }
 
     /**
@@ -283,76 +349,35 @@
     }
 
     /**
-     * Helper to wait for a particular download to finish, or else a timeout to occur
-     *
-     * Does not wait for a receiver notification of the download.
-     *
-     * @param id The download id to query on (wait for)
-     */
-    protected void waitForDownloadOrTimeout_skipNotification(long id) throws TimeoutException,
-            InterruptedException {
-        doWaitForDownloadsOrTimeout(new Query().setFilterById(id),
-                WAIT_FOR_DOWNLOAD_POLL_TIME, MAX_WAIT_FOR_DOWNLOAD_TIME);
-    }
-
-    /**
-     * Helper to wait for a particular download to finish, or else a timeout to occur
-     *
-     * Also guarantees a notification has been posted for the download.
-     *
-     * @param id The download id to query on (wait for)
-     */
-    protected void waitForDownloadOrTimeout(long id) throws TimeoutException,
-            InterruptedException {
-        waitForDownloadOrTimeout(id, WAIT_FOR_DOWNLOAD_POLL_TIME, MAX_WAIT_FOR_DOWNLOAD_TIME);
-    }
-
-    /**
-     * Helper to wait for a particular download to finish, or else a timeout to occur
-     *
-     * Also guarantees a notification has been posted for the download.
+     * Helper to wait for a particular download to finish, or else a timeout to occur.
      *
      * @param id The download id to query on (wait for)
      * @param poll The amount of time to wait
      * @param timeoutMillis The max time (in ms) to wait for the download(s) to complete
      */
-    protected void waitForDownloadOrTimeout(long id, long poll, long timeoutMillis)
-            throws TimeoutException, InterruptedException {
-        doWaitForDownloadsOrTimeout(new Query().setFilterById(id), poll, timeoutMillis);
-        waitForReceiverNotifications(1);
+    protected boolean waitForDownload(long id, long timeoutMillis)
+            throws InterruptedException {
+        return mListener.waitForDownloadToFinish(id, timeoutMillis);
+    }
+
+    protected boolean waitForMultipleDownloads(Set<Long> ids, long timeout)
+            throws InterruptedException {
+        return mListener.waitForMultipleDownloadsToFinish(ids, timeout);
     }
 
     /**
-     * Helper to wait for all downloads to finish, or else a specified timeout to occur
-     *
-     * Makes no guaranee that notifications have been posted for all downloads.
-     *
-     * @param poll The amount of time to wait
-     * @param timeoutMillis The max time (in ms) to wait for the download(s) to complete
+     * Checks with the download manager if the give download is finished.
+     * @param id id of the download to check
+     * @return true if download is finished, false otherwise.
      */
-    protected void waitForDownloadsOrTimeout(long poll, long timeoutMillis) throws TimeoutException,
-            InterruptedException {
-        doWaitForDownloadsOrTimeout(new Query(), poll, timeoutMillis);
-    }
-
-    /**
-     * Helper to wait for all downloads to finish, or else a timeout to occur, but does not throw
-     *
-     * Also guarantees a notification has been posted for the download.
-     *
-     * @param id The id of the download to query against
-     * @param poll The amount of time to wait
-     * @param timeoutMillis The max time (in ms) to wait for the download(s) to complete
-     * @return true if download completed successfully (didn't timeout), false otherwise
-     */
-    private boolean waitForDownloadOrTimeoutNoThrow(long id, long poll, long timeoutMillis) {
-        try {
-            doWaitForDownloadsOrTimeout(new Query().setFilterById(id), poll, timeoutMillis);
-            waitForReceiverNotifications(1);
-        } catch (TimeoutException e) {
-            return false;
-        }
-        return true;
+    private boolean hasDownloadFinished(long id) {
+        Query q = new Query();
+        q.setFilterById(id);
+        q.setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL);
+        Cursor cursor = mDownloadManager.query(q);
+        boolean finished = cursor.getCount() == 1;
+        cursor.close();
+        return finished;
     }
 
     /**
@@ -389,34 +414,6 @@
     }
 
     /**
-     * Helper to wait for all downloads to finish, or else a timeout to occur
-     *
-     * @param query The query to pass to the download manager
-     * @param poll The poll time to wait between checks
-     * @param timeoutMillis The max amount of time (in ms) to wait for the download(s) to complete
-     */
-    private void doWaitForDownloadsOrTimeout(Query query, long poll, long timeoutMillis)
-            throws TimeoutException {
-        int currentWaitTime = 0;
-        while (true) {
-            query.setFilterByStatus(DownloadManager.STATUS_PENDING | DownloadManager.STATUS_PAUSED
-                    | DownloadManager.STATUS_RUNNING);
-            Cursor cursor = mDownloadManager.query(query);
-
-            try {
-                if (cursor.getCount() == 0) {
-                    Log.i(LOG_TAG, "All downloads should be done...");
-                    break;
-                }
-                currentWaitTime = timeoutWait(currentWaitTime, poll, timeoutMillis,
-                        "Timed out waiting for all downloads to finish");
-            } finally {
-                cursor.close();
-            }
-        }
-    }
-
-    /**
      * Synchronously waits for external store to be mounted (eg: SD Card).
      *
      * @throws InterruptedException if interrupted
@@ -465,53 +462,51 @@
     }
 
     /**
-     * Synchronously waits for our receiver to receive notification for a given number of
-     * downloads.
+     * Synchronously waits for the download manager to start incrementing the number of
+     * bytes downloaded so far.
      *
-     * @param targetNumber The number of notifications for unique downloads to wait for; pass in
-     *         -1 to not wait for notification.
-     * @throws Exception if timed out while waiting
-     */
-    private void waitForReceiverNotifications(int targetNumber) throws TimeoutException {
-        int count = mReceiver.numDownloadsCompleted();
-        int currentWaitTime = 0;
-
-        while (count < targetNumber) {
-            Log.i(LOG_TAG, "Waiting for notification of downloads...");
-            currentWaitTime = timeoutWait(currentWaitTime, WAIT_FOR_DOWNLOAD_POLL_TIME,
-                    MAX_WAIT_FOR_DOWNLOAD_TIME, "Timed out waiting for download notifications!"
-                    + " Received " + count + "notifications.");
-            count = mReceiver.numDownloadsCompleted();
-        }
-    }
-
-    /**
-     * Synchronously waits for a file to increase in size (such as to monitor that a download is
-     * progressing).
-     *
-     * @param file The file whose size to track.
+     * @param id DownloadManager download id that needs to be checked.
+     * @param bytesToReceive how many bytes do we need to wait to receive.
      * @throws Exception if timed out while waiting for the file to grow in size.
      */
-    protected void waitForFileToGrow(File file) throws Exception {
+    protected void waitToReceiveData(long id, long bytesToReceive) throws Exception {
         int currentWaitTime = 0;
-
-        // File may not even exist yet, so wait until it does (or we timeout)
-        while (!file.exists()) {
-            Log.i(LOG_TAG, "Waiting for file to exist...");
-            currentWaitTime = timeoutWait(currentWaitTime, WAIT_FOR_DOWNLOAD_POLL_TIME,
-                    MAX_WAIT_FOR_DOWNLOAD_TIME, "Timed out waiting for file to be created.");
-        }
-
-        // Get original file size...
-        long originalSize = file.length();
-
-        while (file.length() <= originalSize) {
-            Log.i(LOG_TAG, "Waiting for file to be written to...");
+        long expectedSize = getBytesDownloaded(id) + bytesToReceive;
+        long currentSize = 0;
+        while ((currentSize = getBytesDownloaded(id)) <= expectedSize) {
+            Log.i(LOG_TAG, String.format("expect: %d, cur: %d. Waiting for file to be written to...",
+                    expectedSize, currentSize));
             currentWaitTime = timeoutWait(currentWaitTime, WAIT_FOR_DOWNLOAD_POLL_TIME,
                     MAX_WAIT_FOR_DOWNLOAD_TIME, "Timed out waiting for file to be written to.");
         }
     }
 
+    private long getBytesDownloaded(long id) {
+        DownloadManager.Query q = new DownloadManager.Query();
+        q.setFilterById(id);
+        Cursor response = mDownloadManager.query(q);
+        if (response.getCount() < 1) {
+            Log.i(LOG_TAG, String.format("Query to download manager returned nothing for id %d",id));
+            response.close();
+            return -1;
+        }
+        while(response.moveToNext()) {
+            int index = response.getColumnIndex(DownloadManager.COLUMN_ID);
+            if (id == response.getLong(index)) {
+                break;
+            }
+        }
+        int index = response.getColumnIndex(DownloadManager.COLUMN_BYTES_DOWNLOADED_SO_FAR);
+        if (index < 0) {
+            Log.i(LOG_TAG, String.format("No downloaded bytes for id %d", id));
+            response.close();
+            return -1;
+        }
+        long size = response.getLong(index);
+        response.close();
+        return size;
+    }
+
     /**
      * Helper to remove all downloads that are registered with the DL Manager.
      *
@@ -536,19 +531,6 @@
     }
 
     /**
-     * Helper to verify an int value in a Cursor
-     *
-     * @param cursor The cursor containing the query results
-     * @param columnName The name of the column to query
-     * @param expected The expected int value
-     */
-    private void verifyInt(Cursor cursor, String columnName, int expected) {
-        int index = cursor.getColumnIndex(columnName);
-        int actual = cursor.getInt(index);
-        assertEquals(expected, actual);
-    }
-
-    /**
      * Performs a query based on ID and returns a Cursor for the query.
      *
      * @param id The id of the download in DL Manager; pass -1 to query all downloads
diff --git a/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerTestApp.java b/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerTestApp.java
index 0518e64..bcf2e45 100644
--- a/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerTestApp.java
+++ b/core/tests/hosttests/test-apps/DownloadManagerTestApp/src/com/android/frameworks/downloadmanagertests/DownloadManagerTestApp.java
@@ -38,14 +38,11 @@
     protected static String LOG_TAG =
             "com.android.frameworks.downloadmanagertests.DownloadManagerTestApp";
 
-    protected static String DOWNLOAD_500K_FILENAME = "External541kb.apk";
-    protected static long DOWNLOAD_500K_FILESIZE = 570927;
-    protected static String DOWNLOAD_1MB_FILENAME = "External1mb.apk";
-    protected static long DOWNLOAD_1MB_FILESIZE = 1041262;
-    protected static String DOWNLOAD_5MB_FILENAME = "External5mb.apk";
-    protected static long DOWNLOAD_5MB_FILESIZE = 5138700;
-    protected static String DOWNLOAD_10MB_FILENAME = "External10mb.apk";
-    protected static long DOWNLOAD_10MB_FILESIZE = 10258741;
+    protected static final String DOWNLOAD_FILENAME = "External93mb.apk";
+    protected static final long DOWNLOAD_FILESIZE = 95251708;
+    // Wait until download manager actually start downloading something
+    // Will wait for 1 MB to be downloaded.
+    private static final long EXPECTED_PROGRESS = 1024 * 1024;
 
     private static final String FILE_CONCURRENT_DOWNLOAD_FILE_PREFIX = "file";
     private static final String FILE_CONCURRENT_DOWNLOAD_FILE_EXTENSION = ".bin";
@@ -126,7 +123,7 @@
      * @throws Exception if unsuccessful
      */
     public void initiateDownload() throws Exception {
-        String filename = DOWNLOAD_5MB_FILENAME;
+        String filename = DOWNLOAD_FILENAME;
         mContext.deleteFile(DOWNLOAD_STARTED_FLAG);
         FileOutputStream fileOutput = mContext.openFileOutput(DOWNLOAD_STARTED_FLAG, 0);
         DataOutputStream outputFile = null;
@@ -162,8 +159,8 @@
      * @throws Exception if unsuccessful
      */
     public void verifyFileDownloadSucceeded() throws Exception {
-        String filename = DOWNLOAD_5MB_FILENAME;
-        long filesize = DOWNLOAD_5MB_FILESIZE;
+        String filename = DOWNLOAD_FILENAME;
+        long filesize = DOWNLOAD_FILESIZE;
         long dlRequest = -1;
         boolean rebootMarkerValid = false;
         DataInputStream dataInputFile = null;
@@ -196,9 +193,7 @@
             int status = cursor.getInt(columnIndex);
             int currentWaitTime = 0;
 
-            // Wait until the download finishes; don't wait for a notification b/c
-            // the download may well have been completed before the last reboot.
-            waitForDownloadOrTimeout_skipNotification(dlRequest);
+            assertTrue(waitForDownload(dlRequest, 15 * 60 * 1000));
 
             Log.i(LOG_TAG, "Verifying download information...");
             // Verify specific info about the file (size, name, etc)...
@@ -223,8 +218,8 @@
      * @throws Exception if unsuccessful
      */
     public void runLargeDownloadOverWiFi() throws Exception {
-        String filename = DOWNLOAD_10MB_FILENAME;
-        long filesize = DOWNLOAD_10MB_FILESIZE;
+        String filename = DOWNLOAD_FILENAME;
+        long filesize = DOWNLOAD_FILESIZE;
         long dlRequest = -1;
         doCommonDownloadSetup();
 
@@ -238,7 +233,7 @@
         dlRequest = mDownloadManager.enqueue(request);
 
         // Rather large file, so wait up to 15 mins...
-        waitForDownloadOrTimeout(dlRequest, WAIT_FOR_DOWNLOAD_POLL_TIME, 15 * 60 * 1000);
+        assertTrue(waitForDownload(dlRequest, 15 * 60 * 1000));
 
         Cursor cursor = getCursor(dlRequest);
         ParcelFileDescriptor pfd = null;
@@ -265,8 +260,8 @@
      * @throws Exception if unsuccessful
      */
     public void runDownloadMultipleSwitching() throws Exception {
-        String filename = DOWNLOAD_5MB_FILENAME;
-        long filesize = DOWNLOAD_5MB_FILESIZE;
+        String filename = DOWNLOAD_FILENAME;
+        long filesize = DOWNLOAD_FILESIZE;
         doCommonDownloadSetup();
 
         String localDownloadDirectory = Environment.getExternalStorageDirectory().getPath();
@@ -292,7 +287,7 @@
             dlRequest = mDownloadManager.enqueue(request);
             waitForDownloadToStart(dlRequest);
             // make sure we're starting to download some data...
-            waitForFileToGrow(downloadedFile);
+            waitToReceiveData(dlRequest, EXPECTED_PROGRESS);
 
             // download disable
             setWiFiStateOn(false);
@@ -300,27 +295,29 @@
             // download disable
             Log.i(LOG_TAG, "Turning on airplane mode...");
             setAirplaneModeOn(true);
-            Thread.sleep(30 * 1000);  // wait 30 secs
+            Thread.sleep(5 * 1000);  // wait 5 secs
 
             // download disable
             setWiFiStateOn(true);
-            Thread.sleep(30 * 1000);  // wait 30 secs
+            Thread.sleep(5 * 1000);  // wait 5 secs
+            waitToReceiveData(dlRequest, EXPECTED_PROGRESS);
 
             // download enable
             Log.i(LOG_TAG, "Turning off airplane mode...");
             setAirplaneModeOn(false);
             Thread.sleep(5 * 1000);  // wait 5 seconds
+            waitToReceiveData(dlRequest, EXPECTED_PROGRESS);
 
             // download disable
             Log.i(LOG_TAG, "Turning off WiFi...");
             setWiFiStateOn(false);
-            Thread.sleep(30 * 1000);  // wait 30 secs
+            Thread.sleep(5 * 1000);  // wait 5 secs
 
             // finally, turn WiFi back on and finish up the download
             Log.i(LOG_TAG, "Turning on WiFi...");
             setWiFiStateOn(true);
-            Log.i(LOG_TAG, "Waiting up to 3 minutes for download to complete...");
-            waitForDownloadsOrTimeout(dlRequest, 3 * 60 * 1000);
+            Log.i(LOG_TAG, "Waiting up to 10 minutes for download to complete...");
+            assertTrue(waitForDownload(dlRequest, 10 * 60 * 1000));
             ParcelFileDescriptor pfd = mDownloadManager.openDownloadedFile(dlRequest);
             verifyFileSize(pfd, filesize);
         } finally {
@@ -340,8 +337,8 @@
      * @throws Exception if unsuccessful
      */
     public void runDownloadMultipleWiFiEnableDisable() throws Exception {
-        String filename = DOWNLOAD_5MB_FILENAME;
-        long filesize = DOWNLOAD_5MB_FILESIZE;
+        String filename = DOWNLOAD_FILENAME;
+        long filesize = DOWNLOAD_FILESIZE;
         doCommonDownloadSetup();
 
         String localDownloadDirectory = Environment.getExternalStorageDirectory().getPath();
@@ -366,7 +363,7 @@
             dlRequest = mDownloadManager.enqueue(request);
             waitForDownloadToStart(dlRequest);
             // are we making any progress?
-            waitForFileToGrow(downloadedFile);
+            waitToReceiveData(dlRequest, EXPECTED_PROGRESS);
 
             // download disable
             Log.i(LOG_TAG, "Turning off WiFi...");
@@ -376,7 +373,7 @@
             // enable download...
             Log.i(LOG_TAG, "Turning on WiFi again...");
             setWiFiStateOn(true);
-            waitForFileToGrow(downloadedFile);
+            waitToReceiveData(dlRequest, EXPECTED_PROGRESS);
 
             // download disable
             Log.i(LOG_TAG, "Turning off WiFi...");
@@ -387,8 +384,8 @@
             Log.i(LOG_TAG, "Turning on WiFi again...");
             setWiFiStateOn(true);
 
-            Log.i(LOG_TAG, "Waiting up to 3 minutes for download to complete...");
-            waitForDownloadsOrTimeout(dlRequest, 3 * 60 * 1000);
+            Log.i(LOG_TAG, "Waiting up to 10 minutes for download to complete...");
+            assertTrue(waitForDownload(dlRequest, 10 * 60 * 1000));
             ParcelFileDescriptor pfd = mDownloadManager.openDownloadedFile(dlRequest);
             verifyFileSize(pfd, filesize);
         } finally {
@@ -409,8 +406,8 @@
      * @throws Exception if unsuccessful
      */
     public void runDownloadMultipleAirplaneModeEnableDisable() throws Exception {
-        String filename = DOWNLOAD_5MB_FILENAME;
-        long filesize = DOWNLOAD_5MB_FILESIZE;
+        String filename = DOWNLOAD_FILENAME;
+        long filesize = DOWNLOAD_FILESIZE;
         // make sure WiFi is enabled, and airplane mode is not on
         doCommonDownloadSetup();
 
@@ -436,7 +433,7 @@
             dlRequest = mDownloadManager.enqueue(request);
             waitForDownloadToStart(dlRequest);
             // are we making any progress?
-            waitForFileToGrow(downloadedFile);
+            waitToReceiveData(dlRequest, EXPECTED_PROGRESS);
 
             // download disable
             Log.i(LOG_TAG, "Turning on Airplane mode...");
@@ -447,7 +444,7 @@
             Log.i(LOG_TAG, "Turning off Airplane mode...");
             setAirplaneModeOn(false);
             // make sure we're starting to download some data...
-            waitForFileToGrow(downloadedFile);
+            waitToReceiveData(dlRequest, EXPECTED_PROGRESS);
 
             // reenable the connection to start up the download again
             Log.i(LOG_TAG, "Turning on Airplane mode again...");
@@ -458,8 +455,8 @@
             Log.i(LOG_TAG, "Turning off Airplane mode again...");
             setAirplaneModeOn(false);
 
-            Log.i(LOG_TAG, "Waiting up to 3 minutes for donwload to complete...");
-            waitForDownloadsOrTimeout(dlRequest, 180 * 1000);  // wait up to 3 mins before timeout
+            Log.i(LOG_TAG, "Waiting up to 10 minutes for donwload to complete...");
+            assertTrue(waitForDownload(dlRequest, 10 * 60 * 1000)); // wait up to 10 mins
             ParcelFileDescriptor pfd = mDownloadManager.openDownloadedFile(dlRequest);
             verifyFileSize(pfd, filesize);
         } finally {
@@ -479,7 +476,6 @@
     public void runDownloadMultipleSimultaneously() throws Exception {
         final int TOTAL_DOWNLOADS = 15;
         HashSet<Long> downloadIds = new HashSet<Long>(TOTAL_DOWNLOADS);
-        MultipleDownloadsCompletedReceiver receiver = registerNewMultipleDownloadsReceiver();
 
         // Make sure there are no pending downloads currently going on
         removeAllCurrentDownloads();
@@ -497,8 +493,7 @@
                 downloadIds.add(dlRequest);
             }
 
-            waitForDownloadsOrTimeout(DEFAULT_WAIT_POLL_TIME, 15 * 60 * 2000);  // wait 15 mins max
-            assertEquals(TOTAL_DOWNLOADS, receiver.numDownloadsCompleted());
+            assertTrue(waitForMultipleDownloads(downloadIds, 15 * 60 * 2000));  // wait 15 mins max
         } finally {
             removeAllCurrentDownloads();
         }
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
new file mode 100644
index 0000000..6bb8d66
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/Android.mk
@@ -0,0 +1,68 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+
+## The application with a minimal main dex
+include $(CLEAR_VARS)
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_SDK_VERSION := current
+
+LOCAL_PACKAGE_NAME := MultiDexLegacyTestApp
+
+mainDexList:= \
+	$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
+
+LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+
+include $(BUILD_PACKAGE)
+
+$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+	$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+	echo "com/android/multidexlegacytestapp/Test.class" >> $@
+
+$(built_dex_intermediate): $(mainDexList)
+
+
+## The application with a full main dex
+include $(CLEAR_VARS)
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_SDK_VERSION := current
+
+LOCAL_PACKAGE_NAME := MultiDexLegacyTestApp2
+
+mainDexList2:= \
+	$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
+
+LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList2)
+
+include $(BUILD_PACKAGE)
+
+$(mainDexList2): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+	$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+	echo "com/android/multidexlegacytestapp/Test.class" >> $@
+
+$(built_dex_intermediate): $(mainDexList2)
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/AndroidManifest.xml b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/AndroidManifest.xml
new file mode 100644
index 0000000..d69a63b
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.multidexlegacytestapp"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18"/>
+
+    <application
+        android:label="multidexlegacytestapp"
+        >
+        <activity
+            android:name="com.android.multidexlegacytestapp.MainActivity"
+            android:label="multidexlegacytestapp" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+                     android:targetPackage="com.android.multidexlegacytestapp"
+                     android:label="Test for MultiDexLegacyTestApp" />
+</manifest>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/res/layout/activity_main.xml b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/res/layout/activity_main.xml
new file mode 100644
index 0000000..37eb613
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/res/layout/activity_main.xml
@@ -0,0 +1,13 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    tools:context=".MainActivity" >
+
+    <TextView
+        android:id="@+id/label_nb"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/label_nb" />
+
+</RelativeLayout>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/res/values/strings.xml b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/res/values/strings.xml
new file mode 100644
index 0000000..69fd04a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/res/values/strings.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">MultidexLegacyTestApp</string>
+    <string name="action_settings">Settings</string>
+    <string name="label_nb">Here\'s the count: </string>
+
+</resources>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/IntermediateClass.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/IntermediateClass.java
new file mode 100644
index 0000000..889f912
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/IntermediateClass.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp;
+
+public class IntermediateClass {
+
+    public static int get() {
+        return new com.android.multidexlegacytestapp.manymethods.Big045().get45()
+                + new com.android.multidexlegacytestapp.manymethods.Big046().get46()
+                + new com.android.multidexlegacytestapp.manymethods.Big047().get47()
+                + new com.android.multidexlegacytestapp.manymethods.Big048().get48()
+                + new com.android.multidexlegacytestapp.manymethods.Big049().get49()
+                + new com.android.multidexlegacytestapp.manymethods.Big050().get50()
+                + new com.android.multidexlegacytestapp.manymethods.Big051().get51()
+                + new com.android.multidexlegacytestapp.manymethods.Big052().get52()
+                + new com.android.multidexlegacytestapp.manymethods.Big053().get53()
+                + new com.android.multidexlegacytestapp.manymethods.Big054().get54()
+                + new com.android.multidexlegacytestapp.manymethods.Big055().get55()
+                + new com.android.multidexlegacytestapp.manymethods.Big056().get56()
+                + new com.android.multidexlegacytestapp.manymethods.Big057().get57()
+                + new com.android.multidexlegacytestapp.manymethods.Big058().get58()
+                + new com.android.multidexlegacytestapp.manymethods.Big059().get59()
+                + new com.android.multidexlegacytestapp.manymethods.Big060().get60()
+                + new com.android.multidexlegacytestapp.manymethods.Big061().get61()
+                + new com.android.multidexlegacytestapp.manymethods.Big062().get62()
+                + new com.android.multidexlegacytestapp.manymethods.Big063().get63()
+                + new com.android.multidexlegacytestapp.manymethods.Big064().get64()
+                + new com.android.multidexlegacytestapp.manymethods.Big065().get65()
+                + new com.android.multidexlegacytestapp.manymethods.Big066().get66()
+                + new com.android.multidexlegacytestapp.manymethods.Big067().get67()
+                + new com.android.multidexlegacytestapp.manymethods.Big068().get68()
+                + new com.android.multidexlegacytestapp.manymethods.Big069().get69()
+                + new com.android.multidexlegacytestapp.manymethods.Big070().get70()
+                + new com.android.multidexlegacytestapp.manymethods.Big071().get71()
+                + new com.android.multidexlegacytestapp.manymethods.Big072().get72()
+                + new com.android.multidexlegacytestapp.manymethods.Big073().get73()
+                + new com.android.multidexlegacytestapp.manymethods.Big074().get74()
+                + new com.android.multidexlegacytestapp.manymethods.Big075().get75()
+                + new com.android.multidexlegacytestapp.manymethods.Big076().get76()
+                + new com.android.multidexlegacytestapp.manymethods.Big077().get77()
+                + new com.android.multidexlegacytestapp.manymethods.Big078().get78()
+                + new com.android.multidexlegacytestapp.manymethods.Big079().get79()
+                + new com.android.multidexlegacytestapp.manymethods.Big080().get80();
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/MainActivity.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/MainActivity.java
new file mode 100644
index 0000000..3228825
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/MainActivity.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.support.multidex.MultiDex;
+import android.util.Log;
+import android.widget.TextView;
+
+public class MainActivity extends Activity {
+
+    private static final String TAG = "MultidexLegacyTestApp";
+    private int instanceFieldNotInited;
+    private int instanceFieldInited =
+            new com.android.multidexlegacytestapp.manymethods.Big043().get43();
+    private static int staticField =
+            new com.android.multidexlegacytestapp.manymethods.Big044().get44();
+
+    public MainActivity() {
+        instanceFieldNotInited = new com.android.multidexlegacytestapp.manymethods.Big042().get42();
+    }
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        Log.i(TAG, "onCreate");
+        MultiDex.install(getApplicationContext());
+        Log.i(TAG, "Multi dex installation done.");
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+        int value = getValue();
+        ((TextView) findViewById(R.id.label_nb)).setText("Here's the count " + value);
+
+        Log.i(TAG, "Here's the count " + value);
+    }
+
+    public int getValue() {
+        int value = new com.android.multidexlegacytestapp.manymethods.Big001().get1()
+                + new com.android.multidexlegacytestapp.manymethods.Big002().get2()
+                + new com.android.multidexlegacytestapp.manymethods.Big003().get3()
+                + new com.android.multidexlegacytestapp.manymethods.Big004().get4()
+                + new com.android.multidexlegacytestapp.manymethods.Big005().get5()
+                + new com.android.multidexlegacytestapp.manymethods.Big006().get6()
+                + new com.android.multidexlegacytestapp.manymethods.Big007().get7()
+                + new com.android.multidexlegacytestapp.manymethods.Big008().get8()
+                + new com.android.multidexlegacytestapp.manymethods.Big009().get9()
+                + new com.android.multidexlegacytestapp.manymethods.Big010().get10()
+                + new com.android.multidexlegacytestapp.manymethods.Big011().get11()
+                + new com.android.multidexlegacytestapp.manymethods.Big012().get12()
+                + new com.android.multidexlegacytestapp.manymethods.Big013().get13()
+                + new com.android.multidexlegacytestapp.manymethods.Big014().get14()
+                + new com.android.multidexlegacytestapp.manymethods.Big015().get15()
+                + new com.android.multidexlegacytestapp.manymethods.Big016().get16()
+                + new com.android.multidexlegacytestapp.manymethods.Big017().get17()
+                + new com.android.multidexlegacytestapp.manymethods.Big018().get18()
+                + new com.android.multidexlegacytestapp.manymethods.Big019().get19()
+                + new com.android.multidexlegacytestapp.manymethods.Big020().get20()
+                + new com.android.multidexlegacytestapp.manymethods.Big021().get21()
+                + new com.android.multidexlegacytestapp.manymethods.Big022().get22()
+                + new com.android.multidexlegacytestapp.manymethods.Big023().get23()
+                + new com.android.multidexlegacytestapp.manymethods.Big024().get24()
+                + new com.android.multidexlegacytestapp.manymethods.Big025().get25()
+                + new com.android.multidexlegacytestapp.manymethods.Big026().get26()
+                + new com.android.multidexlegacytestapp.manymethods.Big027().get27()
+                + new com.android.multidexlegacytestapp.manymethods.Big028().get28()
+                + new com.android.multidexlegacytestapp.manymethods.Big029().get29()
+                + new com.android.multidexlegacytestapp.manymethods.Big030().get30()
+                + new com.android.multidexlegacytestapp.manymethods.Big031().get31()
+                + new com.android.multidexlegacytestapp.manymethods.Big032().get32()
+                + new com.android.multidexlegacytestapp.manymethods.Big033().get33()
+                + new com.android.multidexlegacytestapp.manymethods.Big034().get34()
+                + new com.android.multidexlegacytestapp.manymethods.Big035().get35()
+                + new com.android.multidexlegacytestapp.manymethods.Big036().get36()
+                + new com.android.multidexlegacytestapp.manymethods.Big037().get37()
+                + new com.android.multidexlegacytestapp.manymethods.Big038().get38()
+                + new com.android.multidexlegacytestapp.manymethods.Big039().get39()
+                + new com.android.multidexlegacytestapp.manymethods.Big040().get40()
+                + new com.android.multidexlegacytestapp.manymethods.Big041().get41()
+                + instanceFieldNotInited + instanceFieldInited + staticField
+                + IntermediateClass.get() + Referenced.get(instanceFieldNotInited);
+        return value;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Referenced.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Referenced.java
new file mode 100644
index 0000000..c2674da
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Referenced.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp;
+
+public class Referenced {
+
+    public static int get(int i) {
+        return i * 3;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Test.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Test.java
new file mode 100644
index 0000000..59cac07
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/Test.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+public class Test extends ActivityInstrumentationTestCase2<MainActivity> {
+    public Test() {
+        super(MainActivity.class);
+    }
+
+    public void testAllClassesAvailable() {
+        assertEquals(3366, getActivity().getValue());
+    }
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big001.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big001.java
new file mode 100644
index 0000000..1ac2d39
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big001.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big001 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big002.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big002.java
new file mode 100644
index 0000000..c449a55
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big002.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big002 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big003.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big003.java
new file mode 100644
index 0000000..0915461
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big003.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big003 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big004.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big004.java
new file mode 100644
index 0000000..84ec8ed
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big004.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big004 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big005.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big005.java
new file mode 100644
index 0000000..ecd83e7
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big005.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big005 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big006.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big006.java
new file mode 100644
index 0000000..748a91e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big006.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big006 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big007.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big007.java
new file mode 100644
index 0000000..ffacdc3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big007.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big007 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big008.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big008.java
new file mode 100644
index 0000000..cad9d73
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big008.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big008 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big009.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big009.java
new file mode 100644
index 0000000..cca8f0c
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big009.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big009 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big010.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big010.java
new file mode 100644
index 0000000..eb0a47e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big010.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big010 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big011.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big011.java
new file mode 100644
index 0000000..ade5fdc
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big011.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big011 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big012.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big012.java
new file mode 100644
index 0000000..7c33dc6
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big012.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big012 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big013.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big013.java
new file mode 100644
index 0000000..9c98599
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big013.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big013 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big014.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big014.java
new file mode 100644
index 0000000..300128d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big014.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big014 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big015.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big015.java
new file mode 100644
index 0000000..a862162
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big015.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big015 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big016.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big016.java
new file mode 100644
index 0000000..b6e1c5e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big016.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big016 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big017.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big017.java
new file mode 100644
index 0000000..8c198aa
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big017.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big017 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big018.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big018.java
new file mode 100644
index 0000000..861842c
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big018.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big018 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big019.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big019.java
new file mode 100644
index 0000000..bcd5495
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big019.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big019 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big020.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big020.java
new file mode 100644
index 0000000..357a2b6
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big020.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big020 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big021.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big021.java
new file mode 100644
index 0000000..fc3b070
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big021.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big021 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big022.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big022.java
new file mode 100644
index 0000000..c9f9c30
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big022.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big022 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big023.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big023.java
new file mode 100644
index 0000000..95eb22f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big023.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big023 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big024.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big024.java
new file mode 100644
index 0000000..a830d9c
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big024.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big024 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big025.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big025.java
new file mode 100644
index 0000000..4797223
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big025.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big025 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big026.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big026.java
new file mode 100644
index 0000000..3e09138
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big026.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big026 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big027.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big027.java
new file mode 100644
index 0000000..989f119
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big027.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big027 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big028.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big028.java
new file mode 100644
index 0000000..82c79a7
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big028.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big028 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big029.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big029.java
new file mode 100644
index 0000000..ef1ec99
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big029.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big029 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big030.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big030.java
new file mode 100644
index 0000000..59220bf
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big030.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big030 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big031.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big031.java
new file mode 100644
index 0000000..06747f8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big031.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big031 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big032.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big032.java
new file mode 100644
index 0000000..026421b0
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big032.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big032 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big033.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big033.java
new file mode 100644
index 0000000..45c932f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big033.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big033 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big034.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big034.java
new file mode 100644
index 0000000..c71bece
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big034.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big034 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big035.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big035.java
new file mode 100644
index 0000000..da121a4
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big035.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big035 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big036.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big036.java
new file mode 100644
index 0000000..19961c6
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big036.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big036 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big037.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big037.java
new file mode 100644
index 0000000..1944dee
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big037.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big037 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big038.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big038.java
new file mode 100644
index 0000000..c50f1ce
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big038.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big038 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big039.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big039.java
new file mode 100644
index 0000000..88eb822
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big039.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big039 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big040.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big040.java
new file mode 100644
index 0000000..8207c4f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big040.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big040 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big041.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big041.java
new file mode 100644
index 0000000..8473520
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big041.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big041 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big042.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big042.java
new file mode 100644
index 0000000..2f47e92
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big042.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big042 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big043.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big043.java
new file mode 100644
index 0000000..2455c7d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big043.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big043 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big044.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big044.java
new file mode 100644
index 0000000..0718bb5
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big044.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big044 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big045.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big045.java
new file mode 100644
index 0000000..639e967
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big045.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big045 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big046.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big046.java
new file mode 100644
index 0000000..c3db495
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big046.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big046 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big047.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big047.java
new file mode 100644
index 0000000..bb5c33a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big047.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big047 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big048.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big048.java
new file mode 100644
index 0000000..afb7bc3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big048.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big048 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big049.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big049.java
new file mode 100644
index 0000000..007a06e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big049.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big049 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big050.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big050.java
new file mode 100644
index 0000000..c675d6d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big050.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big050 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big051.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big051.java
new file mode 100644
index 0000000..902775f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big051.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big051 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big052.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big052.java
new file mode 100644
index 0000000..1f8407f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big052.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big052 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big053.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big053.java
new file mode 100644
index 0000000..31f8bf1
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big053.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big053 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big054.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big054.java
new file mode 100644
index 0000000..5bc0f93
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big054.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big054 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big055.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big055.java
new file mode 100644
index 0000000..18873dc
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big055.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big055 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big056.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big056.java
new file mode 100644
index 0000000..73c494a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big056.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big056 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big057.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big057.java
new file mode 100644
index 0000000..44b1a54
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big057.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big057 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big058.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big058.java
new file mode 100644
index 0000000..57adc69
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big058.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big058 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big059.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big059.java
new file mode 100644
index 0000000..d6d09df
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big059.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big059 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big060.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big060.java
new file mode 100644
index 0000000..f4ab18b
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big060.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big060 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big061.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big061.java
new file mode 100644
index 0000000..40909d8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big061.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big061 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big062.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big062.java
new file mode 100644
index 0000000..d2398ec
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big062.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big062 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big063.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big063.java
new file mode 100644
index 0000000..09d3c1f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big063.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big063 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big064.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big064.java
new file mode 100644
index 0000000..be1aea2
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big064.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big064 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big065.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big065.java
new file mode 100644
index 0000000..1dd0ad7
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big065.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big065 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big066.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big066.java
new file mode 100644
index 0000000..ebc12eb
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big066.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big066 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big067.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big067.java
new file mode 100644
index 0000000..64457c9
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big067.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big067 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big068.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big068.java
new file mode 100644
index 0000000..b4d3aa3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big068.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big068 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big069.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big069.java
new file mode 100644
index 0000000..e877f2c
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big069.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big069 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big070.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big070.java
new file mode 100644
index 0000000..e0fb184
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big070.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big070 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big071.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big071.java
new file mode 100644
index 0000000..23d4470
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big071.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big071 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big072.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big072.java
new file mode 100644
index 0000000..913c585
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big072.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big072 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big073.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big073.java
new file mode 100644
index 0000000..a0195b3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big073.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big073 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big074.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big074.java
new file mode 100644
index 0000000..35e8aa0
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big074.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big074 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big075.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big075.java
new file mode 100644
index 0000000..835c017
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big075.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big075 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big076.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big076.java
new file mode 100644
index 0000000..bdbbd09
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big076.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big076 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big077.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big077.java
new file mode 100644
index 0000000..86a75d1
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big077.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big077 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big078.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big078.java
new file mode 100644
index 0000000..8914978
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big078.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big078 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big079.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big079.java
new file mode 100644
index 0000000..761c2f5
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big079.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big079 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big080.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big080.java
new file mode 100644
index 0000000..f89086e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestApp/src/com/android/multidexlegacytestapp/manymethods/Big080.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.multidexlegacytestapp.manymethods;
+
+public class Big080 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
new file mode 100644
index 0000000..c97df59
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/Android.mk
@@ -0,0 +1,40 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_SDK_VERSION := 9
+
+LOCAL_PACKAGE_NAME := MultiDexLegacyTestServices
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+
+mainDexList:= \
+	$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
+
+LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+
+include $(BUILD_PACKAGE)
+
+$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+	$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+
+$(built_dex_intermediate): $(mainDexList)
+
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/AndroidManifest.xml b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/AndroidManifest.xml
new file mode 100644
index 0000000..e3068920
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/AndroidManifest.xml
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.framework.multidexlegacytestservices"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="9"
+        android:targetSdkVersion="19" />
+
+    <application
+        android:label="MultiDexLegacyTestServices">
+
+        <service android:name=".Service1" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices1">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service1" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service2" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices2">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service2" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service3" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices3">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service3" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service4" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices4">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service4" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service5" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices5">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service5" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service6" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices6">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service6" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service7" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices7">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service7" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service8" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices8">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service8" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service9" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices9">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service9" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service10" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices10">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service10" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service11" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices11">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service11" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service12" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices12">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service12" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service13" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices13">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service13" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service14" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices14">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service14" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service15" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices15">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service15" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service16" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices16">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service16" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service17" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices17">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service17" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service18" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices18">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service18" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".Service19" android:exported="true" android:process=":com.android.framework.multidexlegacytestservices19">
+            <intent-filter>
+                <action android:name="com.android.framework.multidexlegacytestservices.action.Service19" />
+            </intent-filter>
+        </service>
+        </application>
+
+</manifest>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/AbstractService.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/AbstractService.java
new file mode 100644
index 0000000..20fe465
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/AbstractService.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.os.IBinder;
+import android.support.multidex.MultiDex;
+import android.util.Log;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.RandomAccessFile;
+
+/**
+ * Empty service for testing legacy multidex. Access more than 64k methods but some are required at
+ * init, some only at verification and others during execution.
+ */
+public abstract class AbstractService extends Service {
+    private final String TAG = "MultidexLegacyTestService" + getId();
+
+    private int instanceFieldNotInited;
+    private int instanceFieldInited =
+            new com.android.framework.multidexlegacytestservices.manymethods.Big043().get43();
+    private static int staticField =
+            new com.android.framework.multidexlegacytestservices.manymethods.Big044().get44();
+
+    public AbstractService() {
+        instanceFieldNotInited = new com.android.framework.multidexlegacytestservices.manymethods.Big042().get42();
+    }
+
+    @Override
+    public void onCreate() {
+        Log.i(TAG, "onCreate");
+        Context applicationContext = getApplicationContext();
+        File resultFile = new File(applicationContext.getFilesDir(), getId());
+        try {
+            // Append a constant value in result file, if services crashed and is relaunched, size
+            // of the result file will be too big.
+            RandomAccessFile raf = new RandomAccessFile(resultFile, "rw");
+            raf.seek(raf.length());
+            Log.i(TAG, "Writing 0x42434445 at " + raf.length() + " in " + resultFile.getPath());
+            raf.writeInt(0x42434445);
+            raf.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        MultiDex.install(applicationContext);
+        Log.i(TAG, "Multi dex installation done.");
+
+        int value = getValue();
+        Log.i(TAG, "Saving the result (" + value + ") to " + resultFile.getPath());
+        try {
+            // Append the check value in result file, keeping the constant values already written.
+            RandomAccessFile raf = new RandomAccessFile(resultFile, "rw");
+            raf.seek(raf.length());
+            Log.i(TAG, "Writing result at " + raf.length() + " in " + resultFile.getPath());
+            raf.writeInt(value);
+            raf.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        try {
+            // Writing end of processing flags, the existence of the file is the criteria
+            RandomAccessFile raf = new RandomAccessFile(new File(applicationContext.getFilesDir(), getId() + ".complete"), "rw");
+            Log.i(TAG, "creating complete file " + resultFile.getPath());
+            raf.writeInt(0x32333435);
+            raf.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        Log.i("Service" + getId(), "Received start id " + startId + ": " + intent);
+        // We want this service to continue running until it is explicitly
+        // stopped, so return sticky.
+        return START_STICKY;
+    }
+
+    private String getId() {
+        return this.getClass().getSimpleName();
+    }
+
+    @Override
+    public void onDestroy() {
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return null;
+    }
+
+    public int getValue() {
+        int intermediate = -1;
+        try {
+            intermediate = ReflectIntermediateClass.get(45, 80, 20 /* 5 seems enough on a nakasi,
+                using 20 to get some margin */);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        int value = new com.android.framework.multidexlegacytestservices.manymethods.Big001().get1() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big002().get2() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big003().get3() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big004().get4() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big005().get5() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big006().get6() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big007().get7() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big008().get8() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big009().get9() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big010().get10() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big011().get11() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big012().get12() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big013().get13() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big014().get14() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big015().get15() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big016().get16() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big017().get17() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big018().get18() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big019().get19() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big020().get20() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big021().get21() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big022().get22() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big023().get23() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big024().get24() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big025().get25() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big026().get26() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big027().get27() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big028().get28() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big029().get29() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big030().get30() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big031().get31() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big032().get32() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big033().get33() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big034().get34() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big035().get35() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big036().get36() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big037().get37() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big038().get38() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big039().get39() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big040().get40() +
+                new com.android.framework.multidexlegacytestservices.manymethods.Big041().get41() +
+                instanceFieldNotInited +
+                instanceFieldInited +
+                staticField +
+                intermediate;
+        return value;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/ReflectIntermediateClass.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/ReflectIntermediateClass.java
new file mode 100644
index 0000000..9b8e1b8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/ReflectIntermediateClass.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * Offer an indirection to some Big0xx classes and have their initialization
+ * spread along a period of time.
+ */
+public class ReflectIntermediateClass {
+
+    public static int get(int from, int to, int sleepMillis) throws ClassNotFoundException,
+            SecurityException, NoSuchMethodException, IllegalArgumentException,
+            IllegalAccessException, InvocationTargetException, InstantiationException {
+        int value = 0;
+        for (int i = from; i <= to; i++) {
+            Class<?> bigClass = Class.forName(
+                    "com.android.framework.multidexlegacytestservices.manymethods.Big0" + i);
+            Method get = bigClass.getMethod("get" + i);
+            value += ((Integer) get.invoke(bigClass.newInstance())).intValue();
+            try {
+                Thread.sleep(sleepMillis);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        return value;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service1.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service1.java
new file mode 100644
index 0000000..332cdb5
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service1.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service1 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service10.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service10.java
new file mode 100644
index 0000000..aa63ea8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service10.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service10 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service11.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service11.java
new file mode 100644
index 0000000..2472605
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service11.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service11 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service12.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service12.java
new file mode 100644
index 0000000..f27ac2e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service12.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service12 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service13.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service13.java
new file mode 100644
index 0000000..a550764
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service13.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service13 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service14.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service14.java
new file mode 100644
index 0000000..e08ac84
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service14.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service14 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service15.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service15.java
new file mode 100644
index 0000000..0d9be45
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service15.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service15 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service16.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service16.java
new file mode 100644
index 0000000..559ab54
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service16.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service16 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service17.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service17.java
new file mode 100644
index 0000000..3d19e59
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service17.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service17 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service18.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service18.java
new file mode 100644
index 0000000..5c55e9a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service18.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service18 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service19.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service19.java
new file mode 100644
index 0000000..c6b71b3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service19.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service19 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service2.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service2.java
new file mode 100644
index 0000000..292cf95
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service2.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service2 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service3.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service3.java
new file mode 100644
index 0000000..a0e61bb
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service3.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service3 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service4.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service4.java
new file mode 100644
index 0000000..0a38df2
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service4.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service4 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service5.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service5.java
new file mode 100644
index 0000000..12a5bff2
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service5.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service5 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service6.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service6.java
new file mode 100644
index 0000000..5faca6d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service6.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service6 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service7.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service7.java
new file mode 100644
index 0000000..07235c9
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service7.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service7 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service8.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service8.java
new file mode 100644
index 0000000..6472140
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service8.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service8 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service9.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service9.java
new file mode 100644
index 0000000..d07c068
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/Service9.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices;
+
+
+/**
+ * Empty service for testing legacy multidex
+ */
+public class Service9 extends AbstractService {
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big001.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big001.java
new file mode 100644
index 0000000..8813952
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big001.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big001 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big002.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big002.java
new file mode 100644
index 0000000..bc3084f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big002.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big002 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big003.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big003.java
new file mode 100644
index 0000000..d9a3eaa
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big003.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big003 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big004.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big004.java
new file mode 100644
index 0000000..fb6efcc
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big004.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big004 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big005.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big005.java
new file mode 100644
index 0000000..37ed8c8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big005.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big005 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big006.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big006.java
new file mode 100644
index 0000000..eb64e6a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big006.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big006 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big007.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big007.java
new file mode 100644
index 0000000..99e5664
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big007.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big007 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big008.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big008.java
new file mode 100644
index 0000000..34e3c1d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big008.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big008 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big009.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big009.java
new file mode 100644
index 0000000..563d5fb
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big009.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big009 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big010.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big010.java
new file mode 100644
index 0000000..66d0577
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big010.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big010 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big011.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big011.java
new file mode 100644
index 0000000..9b65c3d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big011.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big011 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big012.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big012.java
new file mode 100644
index 0000000..32f6ef0
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big012.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big012 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big013.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big013.java
new file mode 100644
index 0000000..1b50943
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big013.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big013 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big014.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big014.java
new file mode 100644
index 0000000..4c798e8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big014.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big014 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big015.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big015.java
new file mode 100644
index 0000000..e667100
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big015.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big015 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big016.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big016.java
new file mode 100644
index 0000000..6b2445b
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big016.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big016 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big017.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big017.java
new file mode 100644
index 0000000..20a09f3
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big017.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big017 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big018.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big018.java
new file mode 100644
index 0000000..bab138d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big018.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big018 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big019.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big019.java
new file mode 100644
index 0000000..9a2723e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big019.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big019 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big020.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big020.java
new file mode 100644
index 0000000..5fb2973d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big020.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big020 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big021.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big021.java
new file mode 100644
index 0000000..dd78896
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big021.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big021 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big022.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big022.java
new file mode 100644
index 0000000..0a6f051
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big022.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big022 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big023.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big023.java
new file mode 100644
index 0000000..fd262c0
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big023.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big023 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big024.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big024.java
new file mode 100644
index 0000000..d99d2ec
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big024.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big024 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big025.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big025.java
new file mode 100644
index 0000000..82a4e17
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big025.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big025 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big026.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big026.java
new file mode 100644
index 0000000..5999f12
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big026.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big026 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big027.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big027.java
new file mode 100644
index 0000000..492aa35
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big027.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big027 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big028.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big028.java
new file mode 100644
index 0000000..10d0978
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big028.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big028 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big029.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big029.java
new file mode 100644
index 0000000..caaa539
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big029.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big029 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big030.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big030.java
new file mode 100644
index 0000000..fbc60ff
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big030.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big030 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big031.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big031.java
new file mode 100644
index 0000000..7a611b0
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big031.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big031 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big032.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big032.java
new file mode 100644
index 0000000..d21ce2f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big032.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big032 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big033.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big033.java
new file mode 100644
index 0000000..92deb32
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big033.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big033 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big034.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big034.java
new file mode 100644
index 0000000..dbee98f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big034.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big034 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big035.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big035.java
new file mode 100644
index 0000000..6b39e98
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big035.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big035 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big036.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big036.java
new file mode 100644
index 0000000..22fecdd
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big036.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big036 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big037.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big037.java
new file mode 100644
index 0000000..6d57125
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big037.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big037 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big038.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big038.java
new file mode 100644
index 0000000..65c309f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big038.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big038 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big039.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big039.java
new file mode 100644
index 0000000..9093c7c
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big039.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big039 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big040.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big040.java
new file mode 100644
index 0000000..061e866
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big040.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big040 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big041.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big041.java
new file mode 100644
index 0000000..79001b2
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big041.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big041 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big042.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big042.java
new file mode 100644
index 0000000..5886431
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big042.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big042 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big043.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big043.java
new file mode 100644
index 0000000..1bb2cff
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big043.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big043 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big044.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big044.java
new file mode 100644
index 0000000..80e88b8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big044.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big044 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big045.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big045.java
new file mode 100644
index 0000000..e8cd26f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big045.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big045 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big046.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big046.java
new file mode 100644
index 0000000..ff26a2b
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big046.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big046 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big047.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big047.java
new file mode 100644
index 0000000..88cf184
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big047.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big047 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big048.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big048.java
new file mode 100644
index 0000000..d2a37f6
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big048.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big048 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big049.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big049.java
new file mode 100644
index 0000000..54f4cbf
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big049.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big049 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big050.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big050.java
new file mode 100644
index 0000000..91784c98
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big050.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big050 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big051.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big051.java
new file mode 100644
index 0000000..1c048d9
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big051.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big051 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big052.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big052.java
new file mode 100644
index 0000000..8cda487
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big052.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big052 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big053.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big053.java
new file mode 100644
index 0000000..4c78914
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big053.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big053 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big054.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big054.java
new file mode 100644
index 0000000..64521f9
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big054.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big054 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big055.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big055.java
new file mode 100644
index 0000000..6ed736e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big055.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big055 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big056.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big056.java
new file mode 100644
index 0000000..347ea57
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big056.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big056 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big057.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big057.java
new file mode 100644
index 0000000..0e3daa8
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big057.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big057 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big058.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big058.java
new file mode 100644
index 0000000..74b5132
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big058.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big058 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big059.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big059.java
new file mode 100644
index 0000000..599b658
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big059.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big059 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big060.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big060.java
new file mode 100644
index 0000000..551ddb87
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big060.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big060 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big061.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big061.java
new file mode 100644
index 0000000..5ba6c9e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big061.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big061 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big062.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big062.java
new file mode 100644
index 0000000..f50eb81
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big062.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big062 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big063.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big063.java
new file mode 100644
index 0000000..caf3083
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big063.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big063 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big064.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big064.java
new file mode 100644
index 0000000..f4732fb
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big064.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big064 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big065.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big065.java
new file mode 100644
index 0000000..84fcf84
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big065.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big065 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big066.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big066.java
new file mode 100644
index 0000000..a4f2dac
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big066.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big066 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big067.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big067.java
new file mode 100644
index 0000000..befe22d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big067.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big067 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big068.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big068.java
new file mode 100644
index 0000000..5dc7659
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big068.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big068 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big069.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big069.java
new file mode 100644
index 0000000..1a6d8c1
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big069.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big069 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big070.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big070.java
new file mode 100644
index 0000000..6113542
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big070.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big070 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big071.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big071.java
new file mode 100644
index 0000000..816303f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big071.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big071 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big072.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big072.java
new file mode 100644
index 0000000..305ef06
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big072.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big072 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big073.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big073.java
new file mode 100644
index 0000000..80790a1
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big073.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big073 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big074.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big074.java
new file mode 100644
index 0000000..7add74b
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big074.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big074 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big075.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big075.java
new file mode 100644
index 0000000..dbe0306c
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big075.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big075 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big076.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big076.java
new file mode 100644
index 0000000..1cbd204
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big076.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big076 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big077.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big077.java
new file mode 100644
index 0000000..fa11ced
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big077.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big077 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big078.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big078.java
new file mode 100644
index 0000000..756e1eb
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big078.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big078 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big079.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big079.java
new file mode 100644
index 0000000..dfb37ae
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big079.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big079 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big080.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big080.java
new file mode 100644
index 0000000..4a82a87
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServices/src/com/android/framework/multidexlegacytestservices/manymethods/Big080.java
@@ -0,0 +1,4020 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.manymethods;
+
+public class Big080 {
+
+    public int get0() {
+        return 0;
+    }
+
+    public int get1() {
+        return 1;
+    }
+
+    public int get2() {
+        return 2;
+    }
+
+    public int get3() {
+        return 3;
+    }
+
+    public int get4() {
+        return 4;
+    }
+
+    public int get5() {
+        return 5;
+    }
+
+    public int get6() {
+        return 6;
+    }
+
+    public int get7() {
+        return 7;
+    }
+
+    public int get8() {
+        return 8;
+    }
+
+    public int get9() {
+        return 9;
+    }
+
+    public int get10() {
+        return 10;
+    }
+
+    public int get11() {
+        return 11;
+    }
+
+    public int get12() {
+        return 12;
+    }
+
+    public int get13() {
+        return 13;
+    }
+
+    public int get14() {
+        return 14;
+    }
+
+    public int get15() {
+        return 15;
+    }
+
+    public int get16() {
+        return 16;
+    }
+
+    public int get17() {
+        return 17;
+    }
+
+    public int get18() {
+        return 18;
+    }
+
+    public int get19() {
+        return 19;
+    }
+
+    public int get20() {
+        return 20;
+    }
+
+    public int get21() {
+        return 21;
+    }
+
+    public int get22() {
+        return 22;
+    }
+
+    public int get23() {
+        return 23;
+    }
+
+    public int get24() {
+        return 24;
+    }
+
+    public int get25() {
+        return 25;
+    }
+
+    public int get26() {
+        return 26;
+    }
+
+    public int get27() {
+        return 27;
+    }
+
+    public int get28() {
+        return 28;
+    }
+
+    public int get29() {
+        return 29;
+    }
+
+    public int get30() {
+        return 30;
+    }
+
+    public int get31() {
+        return 31;
+    }
+
+    public int get32() {
+        return 32;
+    }
+
+    public int get33() {
+        return 33;
+    }
+
+    public int get34() {
+        return 34;
+    }
+
+    public int get35() {
+        return 35;
+    }
+
+    public int get36() {
+        return 36;
+    }
+
+    public int get37() {
+        return 37;
+    }
+
+    public int get38() {
+        return 38;
+    }
+
+    public int get39() {
+        return 39;
+    }
+
+    public int get40() {
+        return 40;
+    }
+
+    public int get41() {
+        return 41;
+    }
+
+    public int get42() {
+        return 42;
+    }
+
+    public int get43() {
+        return 43;
+    }
+
+    public int get44() {
+        return 44;
+    }
+
+    public int get45() {
+        return 45;
+    }
+
+    public int get46() {
+        return 46;
+    }
+
+    public int get47() {
+        return 47;
+    }
+
+    public int get48() {
+        return 48;
+    }
+
+    public int get49() {
+        return 49;
+    }
+
+    public int get50() {
+        return 50;
+    }
+
+    public int get51() {
+        return 51;
+    }
+
+    public int get52() {
+        return 52;
+    }
+
+    public int get53() {
+        return 53;
+    }
+
+    public int get54() {
+        return 54;
+    }
+
+    public int get55() {
+        return 55;
+    }
+
+    public int get56() {
+        return 56;
+    }
+
+    public int get57() {
+        return 57;
+    }
+
+    public int get58() {
+        return 58;
+    }
+
+    public int get59() {
+        return 59;
+    }
+
+    public int get60() {
+        return 60;
+    }
+
+    public int get61() {
+        return 61;
+    }
+
+    public int get62() {
+        return 62;
+    }
+
+    public int get63() {
+        return 63;
+    }
+
+    public int get64() {
+        return 64;
+    }
+
+    public int get65() {
+        return 65;
+    }
+
+    public int get66() {
+        return 66;
+    }
+
+    public int get67() {
+        return 67;
+    }
+
+    public int get68() {
+        return 68;
+    }
+
+    public int get69() {
+        return 69;
+    }
+
+    public int get70() {
+        return 70;
+    }
+
+    public int get71() {
+        return 71;
+    }
+
+    public int get72() {
+        return 72;
+    }
+
+    public int get73() {
+        return 73;
+    }
+
+    public int get74() {
+        return 74;
+    }
+
+    public int get75() {
+        return 75;
+    }
+
+    public int get76() {
+        return 76;
+    }
+
+    public int get77() {
+        return 77;
+    }
+
+    public int get78() {
+        return 78;
+    }
+
+    public int get79() {
+        return 79;
+    }
+
+    public int get80() {
+        return 80;
+    }
+
+    public int get81() {
+        return 81;
+    }
+
+    public int get82() {
+        return 82;
+    }
+
+    public int get83() {
+        return 83;
+    }
+
+    public int get84() {
+        return 84;
+    }
+
+    public int get85() {
+        return 85;
+    }
+
+    public int get86() {
+        return 86;
+    }
+
+    public int get87() {
+        return 87;
+    }
+
+    public int get88() {
+        return 88;
+    }
+
+    public int get89() {
+        return 89;
+    }
+
+    public int get90() {
+        return 90;
+    }
+
+    public int get91() {
+        return 91;
+    }
+
+    public int get92() {
+        return 92;
+    }
+
+    public int get93() {
+        return 93;
+    }
+
+    public int get94() {
+        return 94;
+    }
+
+    public int get95() {
+        return 95;
+    }
+
+    public int get96() {
+        return 96;
+    }
+
+    public int get97() {
+        return 97;
+    }
+
+    public int get98() {
+        return 98;
+    }
+
+    public int get99() {
+        return 99;
+    }
+
+    public int get100() {
+        return 100;
+    }
+
+    public int get101() {
+        return 101;
+    }
+
+    public int get102() {
+        return 102;
+    }
+
+    public int get103() {
+        return 103;
+    }
+
+    public int get104() {
+        return 104;
+    }
+
+    public int get105() {
+        return 105;
+    }
+
+    public int get106() {
+        return 106;
+    }
+
+    public int get107() {
+        return 107;
+    }
+
+    public int get108() {
+        return 108;
+    }
+
+    public int get109() {
+        return 109;
+    }
+
+    public int get110() {
+        return 110;
+    }
+
+    public int get111() {
+        return 111;
+    }
+
+    public int get112() {
+        return 112;
+    }
+
+    public int get113() {
+        return 113;
+    }
+
+    public int get114() {
+        return 114;
+    }
+
+    public int get115() {
+        return 115;
+    }
+
+    public int get116() {
+        return 116;
+    }
+
+    public int get117() {
+        return 117;
+    }
+
+    public int get118() {
+        return 118;
+    }
+
+    public int get119() {
+        return 119;
+    }
+
+    public int get120() {
+        return 120;
+    }
+
+    public int get121() {
+        return 121;
+    }
+
+    public int get122() {
+        return 122;
+    }
+
+    public int get123() {
+        return 123;
+    }
+
+    public int get124() {
+        return 124;
+    }
+
+    public int get125() {
+        return 125;
+    }
+
+    public int get126() {
+        return 126;
+    }
+
+    public int get127() {
+        return 127;
+    }
+
+    public int get128() {
+        return 128;
+    }
+
+    public int get129() {
+        return 129;
+    }
+
+    public int get130() {
+        return 130;
+    }
+
+    public int get131() {
+        return 131;
+    }
+
+    public int get132() {
+        return 132;
+    }
+
+    public int get133() {
+        return 133;
+    }
+
+    public int get134() {
+        return 134;
+    }
+
+    public int get135() {
+        return 135;
+    }
+
+    public int get136() {
+        return 136;
+    }
+
+    public int get137() {
+        return 137;
+    }
+
+    public int get138() {
+        return 138;
+    }
+
+    public int get139() {
+        return 139;
+    }
+
+    public int get140() {
+        return 140;
+    }
+
+    public int get141() {
+        return 141;
+    }
+
+    public int get142() {
+        return 142;
+    }
+
+    public int get143() {
+        return 143;
+    }
+
+    public int get144() {
+        return 144;
+    }
+
+    public int get145() {
+        return 145;
+    }
+
+    public int get146() {
+        return 146;
+    }
+
+    public int get147() {
+        return 147;
+    }
+
+    public int get148() {
+        return 148;
+    }
+
+    public int get149() {
+        return 149;
+    }
+
+    public int get150() {
+        return 150;
+    }
+
+    public int get151() {
+        return 151;
+    }
+
+    public int get152() {
+        return 152;
+    }
+
+    public int get153() {
+        return 153;
+    }
+
+    public int get154() {
+        return 154;
+    }
+
+    public int get155() {
+        return 155;
+    }
+
+    public int get156() {
+        return 156;
+    }
+
+    public int get157() {
+        return 157;
+    }
+
+    public int get158() {
+        return 158;
+    }
+
+    public int get159() {
+        return 159;
+    }
+
+    public int get160() {
+        return 160;
+    }
+
+    public int get161() {
+        return 161;
+    }
+
+    public int get162() {
+        return 162;
+    }
+
+    public int get163() {
+        return 163;
+    }
+
+    public int get164() {
+        return 164;
+    }
+
+    public int get165() {
+        return 165;
+    }
+
+    public int get166() {
+        return 166;
+    }
+
+    public int get167() {
+        return 167;
+    }
+
+    public int get168() {
+        return 168;
+    }
+
+    public int get169() {
+        return 169;
+    }
+
+    public int get170() {
+        return 170;
+    }
+
+    public int get171() {
+        return 171;
+    }
+
+    public int get172() {
+        return 172;
+    }
+
+    public int get173() {
+        return 173;
+    }
+
+    public int get174() {
+        return 174;
+    }
+
+    public int get175() {
+        return 175;
+    }
+
+    public int get176() {
+        return 176;
+    }
+
+    public int get177() {
+        return 177;
+    }
+
+    public int get178() {
+        return 178;
+    }
+
+    public int get179() {
+        return 179;
+    }
+
+    public int get180() {
+        return 180;
+    }
+
+    public int get181() {
+        return 181;
+    }
+
+    public int get182() {
+        return 182;
+    }
+
+    public int get183() {
+        return 183;
+    }
+
+    public int get184() {
+        return 184;
+    }
+
+    public int get185() {
+        return 185;
+    }
+
+    public int get186() {
+        return 186;
+    }
+
+    public int get187() {
+        return 187;
+    }
+
+    public int get188() {
+        return 188;
+    }
+
+    public int get189() {
+        return 189;
+    }
+
+    public int get190() {
+        return 190;
+    }
+
+    public int get191() {
+        return 191;
+    }
+
+    public int get192() {
+        return 192;
+    }
+
+    public int get193() {
+        return 193;
+    }
+
+    public int get194() {
+        return 194;
+    }
+
+    public int get195() {
+        return 195;
+    }
+
+    public int get196() {
+        return 196;
+    }
+
+    public int get197() {
+        return 197;
+    }
+
+    public int get198() {
+        return 198;
+    }
+
+    public int get199() {
+        return 199;
+    }
+
+    public int get200() {
+        return 200;
+    }
+
+    public int get201() {
+        return 201;
+    }
+
+    public int get202() {
+        return 202;
+    }
+
+    public int get203() {
+        return 203;
+    }
+
+    public int get204() {
+        return 204;
+    }
+
+    public int get205() {
+        return 205;
+    }
+
+    public int get206() {
+        return 206;
+    }
+
+    public int get207() {
+        return 207;
+    }
+
+    public int get208() {
+        return 208;
+    }
+
+    public int get209() {
+        return 209;
+    }
+
+    public int get210() {
+        return 210;
+    }
+
+    public int get211() {
+        return 211;
+    }
+
+    public int get212() {
+        return 212;
+    }
+
+    public int get213() {
+        return 213;
+    }
+
+    public int get214() {
+        return 214;
+    }
+
+    public int get215() {
+        return 215;
+    }
+
+    public int get216() {
+        return 216;
+    }
+
+    public int get217() {
+        return 217;
+    }
+
+    public int get218() {
+        return 218;
+    }
+
+    public int get219() {
+        return 219;
+    }
+
+    public int get220() {
+        return 220;
+    }
+
+    public int get221() {
+        return 221;
+    }
+
+    public int get222() {
+        return 222;
+    }
+
+    public int get223() {
+        return 223;
+    }
+
+    public int get224() {
+        return 224;
+    }
+
+    public int get225() {
+        return 225;
+    }
+
+    public int get226() {
+        return 226;
+    }
+
+    public int get227() {
+        return 227;
+    }
+
+    public int get228() {
+        return 228;
+    }
+
+    public int get229() {
+        return 229;
+    }
+
+    public int get230() {
+        return 230;
+    }
+
+    public int get231() {
+        return 231;
+    }
+
+    public int get232() {
+        return 232;
+    }
+
+    public int get233() {
+        return 233;
+    }
+
+    public int get234() {
+        return 234;
+    }
+
+    public int get235() {
+        return 235;
+    }
+
+    public int get236() {
+        return 236;
+    }
+
+    public int get237() {
+        return 237;
+    }
+
+    public int get238() {
+        return 238;
+    }
+
+    public int get239() {
+        return 239;
+    }
+
+    public int get240() {
+        return 240;
+    }
+
+    public int get241() {
+        return 241;
+    }
+
+    public int get242() {
+        return 242;
+    }
+
+    public int get243() {
+        return 243;
+    }
+
+    public int get244() {
+        return 244;
+    }
+
+    public int get245() {
+        return 245;
+    }
+
+    public int get246() {
+        return 246;
+    }
+
+    public int get247() {
+        return 247;
+    }
+
+    public int get248() {
+        return 248;
+    }
+
+    public int get249() {
+        return 249;
+    }
+
+    public int get250() {
+        return 250;
+    }
+
+    public int get251() {
+        return 251;
+    }
+
+    public int get252() {
+        return 252;
+    }
+
+    public int get253() {
+        return 253;
+    }
+
+    public int get254() {
+        return 254;
+    }
+
+    public int get255() {
+        return 255;
+    }
+
+    public int get256() {
+        return 256;
+    }
+
+    public int get257() {
+        return 257;
+    }
+
+    public int get258() {
+        return 258;
+    }
+
+    public int get259() {
+        return 259;
+    }
+
+    public int get260() {
+        return 260;
+    }
+
+    public int get261() {
+        return 261;
+    }
+
+    public int get262() {
+        return 262;
+    }
+
+    public int get263() {
+        return 263;
+    }
+
+    public int get264() {
+        return 264;
+    }
+
+    public int get265() {
+        return 265;
+    }
+
+    public int get266() {
+        return 266;
+    }
+
+    public int get267() {
+        return 267;
+    }
+
+    public int get268() {
+        return 268;
+    }
+
+    public int get269() {
+        return 269;
+    }
+
+    public int get270() {
+        return 270;
+    }
+
+    public int get271() {
+        return 271;
+    }
+
+    public int get272() {
+        return 272;
+    }
+
+    public int get273() {
+        return 273;
+    }
+
+    public int get274() {
+        return 274;
+    }
+
+    public int get275() {
+        return 275;
+    }
+
+    public int get276() {
+        return 276;
+    }
+
+    public int get277() {
+        return 277;
+    }
+
+    public int get278() {
+        return 278;
+    }
+
+    public int get279() {
+        return 279;
+    }
+
+    public int get280() {
+        return 280;
+    }
+
+    public int get281() {
+        return 281;
+    }
+
+    public int get282() {
+        return 282;
+    }
+
+    public int get283() {
+        return 283;
+    }
+
+    public int get284() {
+        return 284;
+    }
+
+    public int get285() {
+        return 285;
+    }
+
+    public int get286() {
+        return 286;
+    }
+
+    public int get287() {
+        return 287;
+    }
+
+    public int get288() {
+        return 288;
+    }
+
+    public int get289() {
+        return 289;
+    }
+
+    public int get290() {
+        return 290;
+    }
+
+    public int get291() {
+        return 291;
+    }
+
+    public int get292() {
+        return 292;
+    }
+
+    public int get293() {
+        return 293;
+    }
+
+    public int get294() {
+        return 294;
+    }
+
+    public int get295() {
+        return 295;
+    }
+
+    public int get296() {
+        return 296;
+    }
+
+    public int get297() {
+        return 297;
+    }
+
+    public int get298() {
+        return 298;
+    }
+
+    public int get299() {
+        return 299;
+    }
+
+    public int get300() {
+        return 300;
+    }
+
+    public int get301() {
+        return 301;
+    }
+
+    public int get302() {
+        return 302;
+    }
+
+    public int get303() {
+        return 303;
+    }
+
+    public int get304() {
+        return 304;
+    }
+
+    public int get305() {
+        return 305;
+    }
+
+    public int get306() {
+        return 306;
+    }
+
+    public int get307() {
+        return 307;
+    }
+
+    public int get308() {
+        return 308;
+    }
+
+    public int get309() {
+        return 309;
+    }
+
+    public int get310() {
+        return 310;
+    }
+
+    public int get311() {
+        return 311;
+    }
+
+    public int get312() {
+        return 312;
+    }
+
+    public int get313() {
+        return 313;
+    }
+
+    public int get314() {
+        return 314;
+    }
+
+    public int get315() {
+        return 315;
+    }
+
+    public int get316() {
+        return 316;
+    }
+
+    public int get317() {
+        return 317;
+    }
+
+    public int get318() {
+        return 318;
+    }
+
+    public int get319() {
+        return 319;
+    }
+
+    public int get320() {
+        return 320;
+    }
+
+    public int get321() {
+        return 321;
+    }
+
+    public int get322() {
+        return 322;
+    }
+
+    public int get323() {
+        return 323;
+    }
+
+    public int get324() {
+        return 324;
+    }
+
+    public int get325() {
+        return 325;
+    }
+
+    public int get326() {
+        return 326;
+    }
+
+    public int get327() {
+        return 327;
+    }
+
+    public int get328() {
+        return 328;
+    }
+
+    public int get329() {
+        return 329;
+    }
+
+    public int get330() {
+        return 330;
+    }
+
+    public int get331() {
+        return 331;
+    }
+
+    public int get332() {
+        return 332;
+    }
+
+    public int get333() {
+        return 333;
+    }
+
+    public int get334() {
+        return 334;
+    }
+
+    public int get335() {
+        return 335;
+    }
+
+    public int get336() {
+        return 336;
+    }
+
+    public int get337() {
+        return 337;
+    }
+
+    public int get338() {
+        return 338;
+    }
+
+    public int get339() {
+        return 339;
+    }
+
+    public int get340() {
+        return 340;
+    }
+
+    public int get341() {
+        return 341;
+    }
+
+    public int get342() {
+        return 342;
+    }
+
+    public int get343() {
+        return 343;
+    }
+
+    public int get344() {
+        return 344;
+    }
+
+    public int get345() {
+        return 345;
+    }
+
+    public int get346() {
+        return 346;
+    }
+
+    public int get347() {
+        return 347;
+    }
+
+    public int get348() {
+        return 348;
+    }
+
+    public int get349() {
+        return 349;
+    }
+
+    public int get350() {
+        return 350;
+    }
+
+    public int get351() {
+        return 351;
+    }
+
+    public int get352() {
+        return 352;
+    }
+
+    public int get353() {
+        return 353;
+    }
+
+    public int get354() {
+        return 354;
+    }
+
+    public int get355() {
+        return 355;
+    }
+
+    public int get356() {
+        return 356;
+    }
+
+    public int get357() {
+        return 357;
+    }
+
+    public int get358() {
+        return 358;
+    }
+
+    public int get359() {
+        return 359;
+    }
+
+    public int get360() {
+        return 360;
+    }
+
+    public int get361() {
+        return 361;
+    }
+
+    public int get362() {
+        return 362;
+    }
+
+    public int get363() {
+        return 363;
+    }
+
+    public int get364() {
+        return 364;
+    }
+
+    public int get365() {
+        return 365;
+    }
+
+    public int get366() {
+        return 366;
+    }
+
+    public int get367() {
+        return 367;
+    }
+
+    public int get368() {
+        return 368;
+    }
+
+    public int get369() {
+        return 369;
+    }
+
+    public int get370() {
+        return 370;
+    }
+
+    public int get371() {
+        return 371;
+    }
+
+    public int get372() {
+        return 372;
+    }
+
+    public int get373() {
+        return 373;
+    }
+
+    public int get374() {
+        return 374;
+    }
+
+    public int get375() {
+        return 375;
+    }
+
+    public int get376() {
+        return 376;
+    }
+
+    public int get377() {
+        return 377;
+    }
+
+    public int get378() {
+        return 378;
+    }
+
+    public int get379() {
+        return 379;
+    }
+
+    public int get380() {
+        return 380;
+    }
+
+    public int get381() {
+        return 381;
+    }
+
+    public int get382() {
+        return 382;
+    }
+
+    public int get383() {
+        return 383;
+    }
+
+    public int get384() {
+        return 384;
+    }
+
+    public int get385() {
+        return 385;
+    }
+
+    public int get386() {
+        return 386;
+    }
+
+    public int get387() {
+        return 387;
+    }
+
+    public int get388() {
+        return 388;
+    }
+
+    public int get389() {
+        return 389;
+    }
+
+    public int get390() {
+        return 390;
+    }
+
+    public int get391() {
+        return 391;
+    }
+
+    public int get392() {
+        return 392;
+    }
+
+    public int get393() {
+        return 393;
+    }
+
+    public int get394() {
+        return 394;
+    }
+
+    public int get395() {
+        return 395;
+    }
+
+    public int get396() {
+        return 396;
+    }
+
+    public int get397() {
+        return 397;
+    }
+
+    public int get398() {
+        return 398;
+    }
+
+    public int get399() {
+        return 399;
+    }
+
+    public int get400() {
+        return 400;
+    }
+
+    public int get401() {
+        return 401;
+    }
+
+    public int get402() {
+        return 402;
+    }
+
+    public int get403() {
+        return 403;
+    }
+
+    public int get404() {
+        return 404;
+    }
+
+    public int get405() {
+        return 405;
+    }
+
+    public int get406() {
+        return 406;
+    }
+
+    public int get407() {
+        return 407;
+    }
+
+    public int get408() {
+        return 408;
+    }
+
+    public int get409() {
+        return 409;
+    }
+
+    public int get410() {
+        return 410;
+    }
+
+    public int get411() {
+        return 411;
+    }
+
+    public int get412() {
+        return 412;
+    }
+
+    public int get413() {
+        return 413;
+    }
+
+    public int get414() {
+        return 414;
+    }
+
+    public int get415() {
+        return 415;
+    }
+
+    public int get416() {
+        return 416;
+    }
+
+    public int get417() {
+        return 417;
+    }
+
+    public int get418() {
+        return 418;
+    }
+
+    public int get419() {
+        return 419;
+    }
+
+    public int get420() {
+        return 420;
+    }
+
+    public int get421() {
+        return 421;
+    }
+
+    public int get422() {
+        return 422;
+    }
+
+    public int get423() {
+        return 423;
+    }
+
+    public int get424() {
+        return 424;
+    }
+
+    public int get425() {
+        return 425;
+    }
+
+    public int get426() {
+        return 426;
+    }
+
+    public int get427() {
+        return 427;
+    }
+
+    public int get428() {
+        return 428;
+    }
+
+    public int get429() {
+        return 429;
+    }
+
+    public int get430() {
+        return 430;
+    }
+
+    public int get431() {
+        return 431;
+    }
+
+    public int get432() {
+        return 432;
+    }
+
+    public int get433() {
+        return 433;
+    }
+
+    public int get434() {
+        return 434;
+    }
+
+    public int get435() {
+        return 435;
+    }
+
+    public int get436() {
+        return 436;
+    }
+
+    public int get437() {
+        return 437;
+    }
+
+    public int get438() {
+        return 438;
+    }
+
+    public int get439() {
+        return 439;
+    }
+
+    public int get440() {
+        return 440;
+    }
+
+    public int get441() {
+        return 441;
+    }
+
+    public int get442() {
+        return 442;
+    }
+
+    public int get443() {
+        return 443;
+    }
+
+    public int get444() {
+        return 444;
+    }
+
+    public int get445() {
+        return 445;
+    }
+
+    public int get446() {
+        return 446;
+    }
+
+    public int get447() {
+        return 447;
+    }
+
+    public int get448() {
+        return 448;
+    }
+
+    public int get449() {
+        return 449;
+    }
+
+    public int get450() {
+        return 450;
+    }
+
+    public int get451() {
+        return 451;
+    }
+
+    public int get452() {
+        return 452;
+    }
+
+    public int get453() {
+        return 453;
+    }
+
+    public int get454() {
+        return 454;
+    }
+
+    public int get455() {
+        return 455;
+    }
+
+    public int get456() {
+        return 456;
+    }
+
+    public int get457() {
+        return 457;
+    }
+
+    public int get458() {
+        return 458;
+    }
+
+    public int get459() {
+        return 459;
+    }
+
+    public int get460() {
+        return 460;
+    }
+
+    public int get461() {
+        return 461;
+    }
+
+    public int get462() {
+        return 462;
+    }
+
+    public int get463() {
+        return 463;
+    }
+
+    public int get464() {
+        return 464;
+    }
+
+    public int get465() {
+        return 465;
+    }
+
+    public int get466() {
+        return 466;
+    }
+
+    public int get467() {
+        return 467;
+    }
+
+    public int get468() {
+        return 468;
+    }
+
+    public int get469() {
+        return 469;
+    }
+
+    public int get470() {
+        return 470;
+    }
+
+    public int get471() {
+        return 471;
+    }
+
+    public int get472() {
+        return 472;
+    }
+
+    public int get473() {
+        return 473;
+    }
+
+    public int get474() {
+        return 474;
+    }
+
+    public int get475() {
+        return 475;
+    }
+
+    public int get476() {
+        return 476;
+    }
+
+    public int get477() {
+        return 477;
+    }
+
+    public int get478() {
+        return 478;
+    }
+
+    public int get479() {
+        return 479;
+    }
+
+    public int get480() {
+        return 480;
+    }
+
+    public int get481() {
+        return 481;
+    }
+
+    public int get482() {
+        return 482;
+    }
+
+    public int get483() {
+        return 483;
+    }
+
+    public int get484() {
+        return 484;
+    }
+
+    public int get485() {
+        return 485;
+    }
+
+    public int get486() {
+        return 486;
+    }
+
+    public int get487() {
+        return 487;
+    }
+
+    public int get488() {
+        return 488;
+    }
+
+    public int get489() {
+        return 489;
+    }
+
+    public int get490() {
+        return 490;
+    }
+
+    public int get491() {
+        return 491;
+    }
+
+    public int get492() {
+        return 492;
+    }
+
+    public int get493() {
+        return 493;
+    }
+
+    public int get494() {
+        return 494;
+    }
+
+    public int get495() {
+        return 495;
+    }
+
+    public int get496() {
+        return 496;
+    }
+
+    public int get497() {
+        return 497;
+    }
+
+    public int get498() {
+        return 498;
+    }
+
+    public int get499() {
+        return 499;
+    }
+
+    public int get500() {
+        return 500;
+    }
+
+    public int get501() {
+        return 501;
+    }
+
+    public int get502() {
+        return 502;
+    }
+
+    public int get503() {
+        return 503;
+    }
+
+    public int get504() {
+        return 504;
+    }
+
+    public int get505() {
+        return 505;
+    }
+
+    public int get506() {
+        return 506;
+    }
+
+    public int get507() {
+        return 507;
+    }
+
+    public int get508() {
+        return 508;
+    }
+
+    public int get509() {
+        return 509;
+    }
+
+    public int get510() {
+        return 510;
+    }
+
+    public int get511() {
+        return 511;
+    }
+
+    public int get512() {
+        return 512;
+    }
+
+    public int get513() {
+        return 513;
+    }
+
+    public int get514() {
+        return 514;
+    }
+
+    public int get515() {
+        return 515;
+    }
+
+    public int get516() {
+        return 516;
+    }
+
+    public int get517() {
+        return 517;
+    }
+
+    public int get518() {
+        return 518;
+    }
+
+    public int get519() {
+        return 519;
+    }
+
+    public int get520() {
+        return 520;
+    }
+
+    public int get521() {
+        return 521;
+    }
+
+    public int get522() {
+        return 522;
+    }
+
+    public int get523() {
+        return 523;
+    }
+
+    public int get524() {
+        return 524;
+    }
+
+    public int get525() {
+        return 525;
+    }
+
+    public int get526() {
+        return 526;
+    }
+
+    public int get527() {
+        return 527;
+    }
+
+    public int get528() {
+        return 528;
+    }
+
+    public int get529() {
+        return 529;
+    }
+
+    public int get530() {
+        return 530;
+    }
+
+    public int get531() {
+        return 531;
+    }
+
+    public int get532() {
+        return 532;
+    }
+
+    public int get533() {
+        return 533;
+    }
+
+    public int get534() {
+        return 534;
+    }
+
+    public int get535() {
+        return 535;
+    }
+
+    public int get536() {
+        return 536;
+    }
+
+    public int get537() {
+        return 537;
+    }
+
+    public int get538() {
+        return 538;
+    }
+
+    public int get539() {
+        return 539;
+    }
+
+    public int get540() {
+        return 540;
+    }
+
+    public int get541() {
+        return 541;
+    }
+
+    public int get542() {
+        return 542;
+    }
+
+    public int get543() {
+        return 543;
+    }
+
+    public int get544() {
+        return 544;
+    }
+
+    public int get545() {
+        return 545;
+    }
+
+    public int get546() {
+        return 546;
+    }
+
+    public int get547() {
+        return 547;
+    }
+
+    public int get548() {
+        return 548;
+    }
+
+    public int get549() {
+        return 549;
+    }
+
+    public int get550() {
+        return 550;
+    }
+
+    public int get551() {
+        return 551;
+    }
+
+    public int get552() {
+        return 552;
+    }
+
+    public int get553() {
+        return 553;
+    }
+
+    public int get554() {
+        return 554;
+    }
+
+    public int get555() {
+        return 555;
+    }
+
+    public int get556() {
+        return 556;
+    }
+
+    public int get557() {
+        return 557;
+    }
+
+    public int get558() {
+        return 558;
+    }
+
+    public int get559() {
+        return 559;
+    }
+
+    public int get560() {
+        return 560;
+    }
+
+    public int get561() {
+        return 561;
+    }
+
+    public int get562() {
+        return 562;
+    }
+
+    public int get563() {
+        return 563;
+    }
+
+    public int get564() {
+        return 564;
+    }
+
+    public int get565() {
+        return 565;
+    }
+
+    public int get566() {
+        return 566;
+    }
+
+    public int get567() {
+        return 567;
+    }
+
+    public int get568() {
+        return 568;
+    }
+
+    public int get569() {
+        return 569;
+    }
+
+    public int get570() {
+        return 570;
+    }
+
+    public int get571() {
+        return 571;
+    }
+
+    public int get572() {
+        return 572;
+    }
+
+    public int get573() {
+        return 573;
+    }
+
+    public int get574() {
+        return 574;
+    }
+
+    public int get575() {
+        return 575;
+    }
+
+    public int get576() {
+        return 576;
+    }
+
+    public int get577() {
+        return 577;
+    }
+
+    public int get578() {
+        return 578;
+    }
+
+    public int get579() {
+        return 579;
+    }
+
+    public int get580() {
+        return 580;
+    }
+
+    public int get581() {
+        return 581;
+    }
+
+    public int get582() {
+        return 582;
+    }
+
+    public int get583() {
+        return 583;
+    }
+
+    public int get584() {
+        return 584;
+    }
+
+    public int get585() {
+        return 585;
+    }
+
+    public int get586() {
+        return 586;
+    }
+
+    public int get587() {
+        return 587;
+    }
+
+    public int get588() {
+        return 588;
+    }
+
+    public int get589() {
+        return 589;
+    }
+
+    public int get590() {
+        return 590;
+    }
+
+    public int get591() {
+        return 591;
+    }
+
+    public int get592() {
+        return 592;
+    }
+
+    public int get593() {
+        return 593;
+    }
+
+    public int get594() {
+        return 594;
+    }
+
+    public int get595() {
+        return 595;
+    }
+
+    public int get596() {
+        return 596;
+    }
+
+    public int get597() {
+        return 597;
+    }
+
+    public int get598() {
+        return 598;
+    }
+
+    public int get599() {
+        return 599;
+    }
+
+    public int get600() {
+        return 600;
+    }
+
+    public int get601() {
+        return 601;
+    }
+
+    public int get602() {
+        return 602;
+    }
+
+    public int get603() {
+        return 603;
+    }
+
+    public int get604() {
+        return 604;
+    }
+
+    public int get605() {
+        return 605;
+    }
+
+    public int get606() {
+        return 606;
+    }
+
+    public int get607() {
+        return 607;
+    }
+
+    public int get608() {
+        return 608;
+    }
+
+    public int get609() {
+        return 609;
+    }
+
+    public int get610() {
+        return 610;
+    }
+
+    public int get611() {
+        return 611;
+    }
+
+    public int get612() {
+        return 612;
+    }
+
+    public int get613() {
+        return 613;
+    }
+
+    public int get614() {
+        return 614;
+    }
+
+    public int get615() {
+        return 615;
+    }
+
+    public int get616() {
+        return 616;
+    }
+
+    public int get617() {
+        return 617;
+    }
+
+    public int get618() {
+        return 618;
+    }
+
+    public int get619() {
+        return 619;
+    }
+
+    public int get620() {
+        return 620;
+    }
+
+    public int get621() {
+        return 621;
+    }
+
+    public int get622() {
+        return 622;
+    }
+
+    public int get623() {
+        return 623;
+    }
+
+    public int get624() {
+        return 624;
+    }
+
+    public int get625() {
+        return 625;
+    }
+
+    public int get626() {
+        return 626;
+    }
+
+    public int get627() {
+        return 627;
+    }
+
+    public int get628() {
+        return 628;
+    }
+
+    public int get629() {
+        return 629;
+    }
+
+    public int get630() {
+        return 630;
+    }
+
+    public int get631() {
+        return 631;
+    }
+
+    public int get632() {
+        return 632;
+    }
+
+    public int get633() {
+        return 633;
+    }
+
+    public int get634() {
+        return 634;
+    }
+
+    public int get635() {
+        return 635;
+    }
+
+    public int get636() {
+        return 636;
+    }
+
+    public int get637() {
+        return 637;
+    }
+
+    public int get638() {
+        return 638;
+    }
+
+    public int get639() {
+        return 639;
+    }
+
+    public int get640() {
+        return 640;
+    }
+
+    public int get641() {
+        return 641;
+    }
+
+    public int get642() {
+        return 642;
+    }
+
+    public int get643() {
+        return 643;
+    }
+
+    public int get644() {
+        return 644;
+    }
+
+    public int get645() {
+        return 645;
+    }
+
+    public int get646() {
+        return 646;
+    }
+
+    public int get647() {
+        return 647;
+    }
+
+    public int get648() {
+        return 648;
+    }
+
+    public int get649() {
+        return 649;
+    }
+
+    public int get650() {
+        return 650;
+    }
+
+    public int get651() {
+        return 651;
+    }
+
+    public int get652() {
+        return 652;
+    }
+
+    public int get653() {
+        return 653;
+    }
+
+    public int get654() {
+        return 654;
+    }
+
+    public int get655() {
+        return 655;
+    }
+
+    public int get656() {
+        return 656;
+    }
+
+    public int get657() {
+        return 657;
+    }
+
+    public int get658() {
+        return 658;
+    }
+
+    public int get659() {
+        return 659;
+    }
+
+    public int get660() {
+        return 660;
+    }
+
+    public int get661() {
+        return 661;
+    }
+
+    public int get662() {
+        return 662;
+    }
+
+    public int get663() {
+        return 663;
+    }
+
+    public int get664() {
+        return 664;
+    }
+
+    public int get665() {
+        return 665;
+    }
+
+    public int get666() {
+        return 666;
+    }
+
+    public int get667() {
+        return 667;
+    }
+
+    public int get668() {
+        return 668;
+    }
+
+    public int get669() {
+        return 669;
+    }
+
+    public int get670() {
+        return 670;
+    }
+
+    public int get671() {
+        return 671;
+    }
+
+    public int get672() {
+        return 672;
+    }
+
+    public int get673() {
+        return 673;
+    }
+
+    public int get674() {
+        return 674;
+    }
+
+    public int get675() {
+        return 675;
+    }
+
+    public int get676() {
+        return 676;
+    }
+
+    public int get677() {
+        return 677;
+    }
+
+    public int get678() {
+        return 678;
+    }
+
+    public int get679() {
+        return 679;
+    }
+
+    public int get680() {
+        return 680;
+    }
+
+    public int get681() {
+        return 681;
+    }
+
+    public int get682() {
+        return 682;
+    }
+
+    public int get683() {
+        return 683;
+    }
+
+    public int get684() {
+        return 684;
+    }
+
+    public int get685() {
+        return 685;
+    }
+
+    public int get686() {
+        return 686;
+    }
+
+    public int get687() {
+        return 687;
+    }
+
+    public int get688() {
+        return 688;
+    }
+
+    public int get689() {
+        return 689;
+    }
+
+    public int get690() {
+        return 690;
+    }
+
+    public int get691() {
+        return 691;
+    }
+
+    public int get692() {
+        return 692;
+    }
+
+    public int get693() {
+        return 693;
+    }
+
+    public int get694() {
+        return 694;
+    }
+
+    public int get695() {
+        return 695;
+    }
+
+    public int get696() {
+        return 696;
+    }
+
+    public int get697() {
+        return 697;
+    }
+
+    public int get698() {
+        return 698;
+    }
+
+    public int get699() {
+        return 699;
+    }
+
+    public int get700() {
+        return 700;
+    }
+
+    public int get701() {
+        return 701;
+    }
+
+    public int get702() {
+        return 702;
+    }
+
+    public int get703() {
+        return 703;
+    }
+
+    public int get704() {
+        return 704;
+    }
+
+    public int get705() {
+        return 705;
+    }
+
+    public int get706() {
+        return 706;
+    }
+
+    public int get707() {
+        return 707;
+    }
+
+    public int get708() {
+        return 708;
+    }
+
+    public int get709() {
+        return 709;
+    }
+
+    public int get710() {
+        return 710;
+    }
+
+    public int get711() {
+        return 711;
+    }
+
+    public int get712() {
+        return 712;
+    }
+
+    public int get713() {
+        return 713;
+    }
+
+    public int get714() {
+        return 714;
+    }
+
+    public int get715() {
+        return 715;
+    }
+
+    public int get716() {
+        return 716;
+    }
+
+    public int get717() {
+        return 717;
+    }
+
+    public int get718() {
+        return 718;
+    }
+
+    public int get719() {
+        return 719;
+    }
+
+    public int get720() {
+        return 720;
+    }
+
+    public int get721() {
+        return 721;
+    }
+
+    public int get722() {
+        return 722;
+    }
+
+    public int get723() {
+        return 723;
+    }
+
+    public int get724() {
+        return 724;
+    }
+
+    public int get725() {
+        return 725;
+    }
+
+    public int get726() {
+        return 726;
+    }
+
+    public int get727() {
+        return 727;
+    }
+
+    public int get728() {
+        return 728;
+    }
+
+    public int get729() {
+        return 729;
+    }
+
+    public int get730() {
+        return 730;
+    }
+
+    public int get731() {
+        return 731;
+    }
+
+    public int get732() {
+        return 732;
+    }
+
+    public int get733() {
+        return 733;
+    }
+
+    public int get734() {
+        return 734;
+    }
+
+    public int get735() {
+        return 735;
+    }
+
+    public int get736() {
+        return 736;
+    }
+
+    public int get737() {
+        return 737;
+    }
+
+    public int get738() {
+        return 738;
+    }
+
+    public int get739() {
+        return 739;
+    }
+
+    public int get740() {
+        return 740;
+    }
+
+    public int get741() {
+        return 741;
+    }
+
+    public int get742() {
+        return 742;
+    }
+
+    public int get743() {
+        return 743;
+    }
+
+    public int get744() {
+        return 744;
+    }
+
+    public int get745() {
+        return 745;
+    }
+
+    public int get746() {
+        return 746;
+    }
+
+    public int get747() {
+        return 747;
+    }
+
+    public int get748() {
+        return 748;
+    }
+
+    public int get749() {
+        return 749;
+    }
+
+    public int get750() {
+        return 750;
+    }
+
+    public int get751() {
+        return 751;
+    }
+
+    public int get752() {
+        return 752;
+    }
+
+    public int get753() {
+        return 753;
+    }
+
+    public int get754() {
+        return 754;
+    }
+
+    public int get755() {
+        return 755;
+    }
+
+    public int get756() {
+        return 756;
+    }
+
+    public int get757() {
+        return 757;
+    }
+
+    public int get758() {
+        return 758;
+    }
+
+    public int get759() {
+        return 759;
+    }
+
+    public int get760() {
+        return 760;
+    }
+
+    public int get761() {
+        return 761;
+    }
+
+    public int get762() {
+        return 762;
+    }
+
+    public int get763() {
+        return 763;
+    }
+
+    public int get764() {
+        return 764;
+    }
+
+    public int get765() {
+        return 765;
+    }
+
+    public int get766() {
+        return 766;
+    }
+
+    public int get767() {
+        return 767;
+    }
+
+    public int get768() {
+        return 768;
+    }
+
+    public int get769() {
+        return 769;
+    }
+
+    public int get770() {
+        return 770;
+    }
+
+    public int get771() {
+        return 771;
+    }
+
+    public int get772() {
+        return 772;
+    }
+
+    public int get773() {
+        return 773;
+    }
+
+    public int get774() {
+        return 774;
+    }
+
+    public int get775() {
+        return 775;
+    }
+
+    public int get776() {
+        return 776;
+    }
+
+    public int get777() {
+        return 777;
+    }
+
+    public int get778() {
+        return 778;
+    }
+
+    public int get779() {
+        return 779;
+    }
+
+    public int get780() {
+        return 780;
+    }
+
+    public int get781() {
+        return 781;
+    }
+
+    public int get782() {
+        return 782;
+    }
+
+    public int get783() {
+        return 783;
+    }
+
+    public int get784() {
+        return 784;
+    }
+
+    public int get785() {
+        return 785;
+    }
+
+    public int get786() {
+        return 786;
+    }
+
+    public int get787() {
+        return 787;
+    }
+
+    public int get788() {
+        return 788;
+    }
+
+    public int get789() {
+        return 789;
+    }
+
+    public int get790() {
+        return 790;
+    }
+
+    public int get791() {
+        return 791;
+    }
+
+    public int get792() {
+        return 792;
+    }
+
+    public int get793() {
+        return 793;
+    }
+
+    public int get794() {
+        return 794;
+    }
+
+    public int get795() {
+        return 795;
+    }
+
+    public int get796() {
+        return 796;
+    }
+
+    public int get797() {
+        return 797;
+    }
+
+    public int get798() {
+        return 798;
+    }
+
+    public int get799() {
+        return 799;
+    }
+
+    public int get800() {
+        return 800;
+    }
+
+    public int get801() {
+        return 801;
+    }
+
+    public int get802() {
+        return 802;
+    }
+
+    public int get803() {
+        return 803;
+    }
+
+    public int get804() {
+        return 804;
+    }
+
+    public int get805() {
+        return 805;
+    }
+
+    public int get806() {
+        return 806;
+    }
+
+    public int get807() {
+        return 807;
+    }
+
+    public int get808() {
+        return 808;
+    }
+
+    public int get809() {
+        return 809;
+    }
+
+    public int get810() {
+        return 810;
+    }
+
+    public int get811() {
+        return 811;
+    }
+
+    public int get812() {
+        return 812;
+    }
+
+    public int get813() {
+        return 813;
+    }
+
+    public int get814() {
+        return 814;
+    }
+
+    public int get815() {
+        return 815;
+    }
+
+    public int get816() {
+        return 816;
+    }
+
+    public int get817() {
+        return 817;
+    }
+
+    public int get818() {
+        return 818;
+    }
+
+    public int get819() {
+        return 819;
+    }
+
+    public int get820() {
+        return 820;
+    }
+
+    public int get821() {
+        return 821;
+    }
+
+    public int get822() {
+        return 822;
+    }
+
+    public int get823() {
+        return 823;
+    }
+
+    public int get824() {
+        return 824;
+    }
+
+    public int get825() {
+        return 825;
+    }
+
+    public int get826() {
+        return 826;
+    }
+
+    public int get827() {
+        return 827;
+    }
+
+    public int get828() {
+        return 828;
+    }
+
+    public int get829() {
+        return 829;
+    }
+
+    public int get830() {
+        return 830;
+    }
+
+    public int get831() {
+        return 831;
+    }
+
+    public int get832() {
+        return 832;
+    }
+
+    public int get833() {
+        return 833;
+    }
+
+    public int get834() {
+        return 834;
+    }
+
+    public int get835() {
+        return 835;
+    }
+
+    public int get836() {
+        return 836;
+    }
+
+    public int get837() {
+        return 837;
+    }
+
+    public int get838() {
+        return 838;
+    }
+
+    public int get839() {
+        return 839;
+    }
+
+    public int get840() {
+        return 840;
+    }
+
+    public int get841() {
+        return 841;
+    }
+
+    public int get842() {
+        return 842;
+    }
+
+    public int get843() {
+        return 843;
+    }
+
+    public int get844() {
+        return 844;
+    }
+
+    public int get845() {
+        return 845;
+    }
+
+    public int get846() {
+        return 846;
+    }
+
+    public int get847() {
+        return 847;
+    }
+
+    public int get848() {
+        return 848;
+    }
+
+    public int get849() {
+        return 849;
+    }
+
+    public int get850() {
+        return 850;
+    }
+
+    public int get851() {
+        return 851;
+    }
+
+    public int get852() {
+        return 852;
+    }
+
+    public int get853() {
+        return 853;
+    }
+
+    public int get854() {
+        return 854;
+    }
+
+    public int get855() {
+        return 855;
+    }
+
+    public int get856() {
+        return 856;
+    }
+
+    public int get857() {
+        return 857;
+    }
+
+    public int get858() {
+        return 858;
+    }
+
+    public int get859() {
+        return 859;
+    }
+
+    public int get860() {
+        return 860;
+    }
+
+    public int get861() {
+        return 861;
+    }
+
+    public int get862() {
+        return 862;
+    }
+
+    public int get863() {
+        return 863;
+    }
+
+    public int get864() {
+        return 864;
+    }
+
+    public int get865() {
+        return 865;
+    }
+
+    public int get866() {
+        return 866;
+    }
+
+    public int get867() {
+        return 867;
+    }
+
+    public int get868() {
+        return 868;
+    }
+
+    public int get869() {
+        return 869;
+    }
+
+    public int get870() {
+        return 870;
+    }
+
+    public int get871() {
+        return 871;
+    }
+
+    public int get872() {
+        return 872;
+    }
+
+    public int get873() {
+        return 873;
+    }
+
+    public int get874() {
+        return 874;
+    }
+
+    public int get875() {
+        return 875;
+    }
+
+    public int get876() {
+        return 876;
+    }
+
+    public int get877() {
+        return 877;
+    }
+
+    public int get878() {
+        return 878;
+    }
+
+    public int get879() {
+        return 879;
+    }
+
+    public int get880() {
+        return 880;
+    }
+
+    public int get881() {
+        return 881;
+    }
+
+    public int get882() {
+        return 882;
+    }
+
+    public int get883() {
+        return 883;
+    }
+
+    public int get884() {
+        return 884;
+    }
+
+    public int get885() {
+        return 885;
+    }
+
+    public int get886() {
+        return 886;
+    }
+
+    public int get887() {
+        return 887;
+    }
+
+    public int get888() {
+        return 888;
+    }
+
+    public int get889() {
+        return 889;
+    }
+
+    public int get890() {
+        return 890;
+    }
+
+    public int get891() {
+        return 891;
+    }
+
+    public int get892() {
+        return 892;
+    }
+
+    public int get893() {
+        return 893;
+    }
+
+    public int get894() {
+        return 894;
+    }
+
+    public int get895() {
+        return 895;
+    }
+
+    public int get896() {
+        return 896;
+    }
+
+    public int get897() {
+        return 897;
+    }
+
+    public int get898() {
+        return 898;
+    }
+
+    public int get899() {
+        return 899;
+    }
+
+    public int get900() {
+        return 900;
+    }
+
+    public int get901() {
+        return 901;
+    }
+
+    public int get902() {
+        return 902;
+    }
+
+    public int get903() {
+        return 903;
+    }
+
+    public int get904() {
+        return 904;
+    }
+
+    public int get905() {
+        return 905;
+    }
+
+    public int get906() {
+        return 906;
+    }
+
+    public int get907() {
+        return 907;
+    }
+
+    public int get908() {
+        return 908;
+    }
+
+    public int get909() {
+        return 909;
+    }
+
+    public int get910() {
+        return 910;
+    }
+
+    public int get911() {
+        return 911;
+    }
+
+    public int get912() {
+        return 912;
+    }
+
+    public int get913() {
+        return 913;
+    }
+
+    public int get914() {
+        return 914;
+    }
+
+    public int get915() {
+        return 915;
+    }
+
+    public int get916() {
+        return 916;
+    }
+
+    public int get917() {
+        return 917;
+    }
+
+    public int get918() {
+        return 918;
+    }
+
+    public int get919() {
+        return 919;
+    }
+
+    public int get920() {
+        return 920;
+    }
+
+    public int get921() {
+        return 921;
+    }
+
+    public int get922() {
+        return 922;
+    }
+
+    public int get923() {
+        return 923;
+    }
+
+    public int get924() {
+        return 924;
+    }
+
+    public int get925() {
+        return 925;
+    }
+
+    public int get926() {
+        return 926;
+    }
+
+    public int get927() {
+        return 927;
+    }
+
+    public int get928() {
+        return 928;
+    }
+
+    public int get929() {
+        return 929;
+    }
+
+    public int get930() {
+        return 930;
+    }
+
+    public int get931() {
+        return 931;
+    }
+
+    public int get932() {
+        return 932;
+    }
+
+    public int get933() {
+        return 933;
+    }
+
+    public int get934() {
+        return 934;
+    }
+
+    public int get935() {
+        return 935;
+    }
+
+    public int get936() {
+        return 936;
+    }
+
+    public int get937() {
+        return 937;
+    }
+
+    public int get938() {
+        return 938;
+    }
+
+    public int get939() {
+        return 939;
+    }
+
+    public int get940() {
+        return 940;
+    }
+
+    public int get941() {
+        return 941;
+    }
+
+    public int get942() {
+        return 942;
+    }
+
+    public int get943() {
+        return 943;
+    }
+
+    public int get944() {
+        return 944;
+    }
+
+    public int get945() {
+        return 945;
+    }
+
+    public int get946() {
+        return 946;
+    }
+
+    public int get947() {
+        return 947;
+    }
+
+    public int get948() {
+        return 948;
+    }
+
+    public int get949() {
+        return 949;
+    }
+
+    public int get950() {
+        return 950;
+    }
+
+    public int get951() {
+        return 951;
+    }
+
+    public int get952() {
+        return 952;
+    }
+
+    public int get953() {
+        return 953;
+    }
+
+    public int get954() {
+        return 954;
+    }
+
+    public int get955() {
+        return 955;
+    }
+
+    public int get956() {
+        return 956;
+    }
+
+    public int get957() {
+        return 957;
+    }
+
+    public int get958() {
+        return 958;
+    }
+
+    public int get959() {
+        return 959;
+    }
+
+    public int get960() {
+        return 960;
+    }
+
+    public int get961() {
+        return 961;
+    }
+
+    public int get962() {
+        return 962;
+    }
+
+    public int get963() {
+        return 963;
+    }
+
+    public int get964() {
+        return 964;
+    }
+
+    public int get965() {
+        return 965;
+    }
+
+    public int get966() {
+        return 966;
+    }
+
+    public int get967() {
+        return 967;
+    }
+
+    public int get968() {
+        return 968;
+    }
+
+    public int get969() {
+        return 969;
+    }
+
+    public int get970() {
+        return 970;
+    }
+
+    public int get971() {
+        return 971;
+    }
+
+    public int get972() {
+        return 972;
+    }
+
+    public int get973() {
+        return 973;
+    }
+
+    public int get974() {
+        return 974;
+    }
+
+    public int get975() {
+        return 975;
+    }
+
+    public int get976() {
+        return 976;
+    }
+
+    public int get977() {
+        return 977;
+    }
+
+    public int get978() {
+        return 978;
+    }
+
+    public int get979() {
+        return 979;
+    }
+
+    public int get980() {
+        return 980;
+    }
+
+    public int get981() {
+        return 981;
+    }
+
+    public int get982() {
+        return 982;
+    }
+
+    public int get983() {
+        return 983;
+    }
+
+    public int get984() {
+        return 984;
+    }
+
+    public int get985() {
+        return 985;
+    }
+
+    public int get986() {
+        return 986;
+    }
+
+    public int get987() {
+        return 987;
+    }
+
+    public int get988() {
+        return 988;
+    }
+
+    public int get989() {
+        return 989;
+    }
+
+    public int get990() {
+        return 990;
+    }
+
+    public int get991() {
+        return 991;
+    }
+
+    public int get992() {
+        return 992;
+    }
+
+    public int get993() {
+        return 993;
+    }
+
+    public int get994() {
+        return 994;
+    }
+
+    public int get995() {
+        return 995;
+    }
+
+    public int get996() {
+        return 996;
+    }
+
+    public int get997() {
+        return 997;
+    }
+
+    public int get998() {
+        return 998;
+    }
+
+    public int get999() {
+        return 999;
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/Android.mk
new file mode 100644
index 0000000..d78e93a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/Android.mk
@@ -0,0 +1,28 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := MultiDexLegacyTestServicesTests
+
+LOCAL_SDK_VERSION := 9
+
+include $(BUILD_PACKAGE)
+
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/AndroidManifest.xml b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/AndroidManifest.xml
new file mode 100644
index 0000000..e2fba4e
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/AndroidManifest.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.framework.multidexlegacytestservices.test"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="9" />
+    <instrumentation
+        android:name="android.test.InstrumentationTestRunner"
+        android:targetPackage="com.android.framework.multidexlegacytestservices" />
+
+    <application
+        android:label="multidexlegacytestservices.test" >
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/src/com/android/framework/multidexlegacytestservices/test/ServicesTests.java b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/src/com/android/framework/multidexlegacytestservices/test/ServicesTests.java
new file mode 100644
index 0000000..d39ce94
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyTestServicesTests/src/com/android/framework/multidexlegacytestservices/test/ServicesTests.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacytestservices.test;
+
+import android.content.Intent;
+import android.test.InstrumentationTestCase;
+import android.util.Log;
+
+import java.io.File;
+
+/**
+ * Run the tests with: <code>adb shell am instrument -w
+ com.android.framework.multidexlegacytestservices.test/android.test.InstrumentationTestRunner
+</code>
+ */
+public class ServicesTests extends InstrumentationTestCase {
+    private static final String SERVICE_BASE_ACTION =
+            "com.android.framework.multidexlegacytestservices.action.Service";
+    private static final int MIN_SERVICE = 1;
+    private static final int MAX_SERVICE = 19;
+
+
+    public void testStressConcurentFirstLaunch() {
+        File targetFilesDir = getInstrumentation().getTargetContext().getFilesDir();
+        for (int i = MIN_SERVICE; i <= MAX_SERVICE; i++) {
+            File resultFile = new File(targetFilesDir, "Service" + i);
+            resultFile.delete();
+            assertFalse("Failed to delete result file '" + resultFile.getAbsolutePath() + "'.",
+                    resultFile.exists());
+            File completeFile = new File(targetFilesDir, "Service" + i + ".complete");
+            completeFile.delete();
+            assertFalse("Failed to delete completion file '" + completeFile.getAbsolutePath() +
+                    "'.", completeFile.exists());
+       }
+        for (int i = MIN_SERVICE; i <= MAX_SERVICE; i++) {
+            getInstrumentation().getContext().startService(new Intent(SERVICE_BASE_ACTION + i));
+            try {
+                Thread.sleep((i - 1) * (1 << (i / 5)));
+            } catch (InterruptedException e) {
+            }
+       }
+
+
+        Log.i("ServicesTests", "start sleeping");
+        int attempt = 0;
+        int maxAttempt = 50; // 10 is enough for a nexus S
+        do {
+            try {
+                Thread.sleep(5000);
+            } catch (InterruptedException e) {
+            }
+            attempt ++;
+            if (attempt >= maxAttempt) {
+                fail();
+            }
+        } while (!areAllServicesRunning(targetFilesDir));
+
+        for (int i = MIN_SERVICE; i <= MAX_SERVICE; i++) {
+            File resultFile = new File(targetFilesDir, "Service" + i);
+            assertTrue("Service" + i + " never completed.", resultFile.isFile());
+            assertEquals("Service" + i + " was restarted.", 8L, resultFile.length());
+        }
+    }
+
+    private static boolean areAllServicesRunning(File tagetFilesDir) {
+        for (int i = MIN_SERVICE; i <= MAX_SERVICE; i++) {
+            File completeFile = new File(tagetFilesDir, "Service" + i + ".complete");
+            if (!completeFile.exists()) {
+                return false;
+            }
+        }
+        return true;
+
+    }
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
new file mode 100644
index 0000000..9f04228
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/Android.mk
@@ -0,0 +1,41 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_SDK_VERSION := 9
+
+LOCAL_PACKAGE_NAME := MultiDexLegacyVersionedTestApp_v1
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+
+mainDexList:= \
+	$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
+
+LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+
+include $(BUILD_PACKAGE)
+
+$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+	$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+	echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
+
+$(built_dex_intermediate): $(mainDexList)
+
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/AndroidManifest.xml b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/AndroidManifest.xml
new file mode 100644
index 0000000..c7b066d
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.framework.multidexlegacyversionedtestapp"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="9"
+        android:targetSdkVersion="18" />
+
+    <application
+        android:name="android.support.multidex.MultiDexApplication"
+        android:allowBackup="true"
+        android:label="MultiDexLegacyVersionedTestApp_v1">
+        <activity
+            android:name="com.android.framework.multidexlegacyversionedtestapp.MainActivity"
+            android:label="MultiDexLegacyVersionedTestApp_v1" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+                     android:targetPackage="com.android.framework.multidexlegacyversionedtestapp"
+                     android:label="Test for MultiDexLegacyVersionedTestApp_v1" />
+
+</manifest>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/res/layout/activity_main.xml b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/res/layout/activity_main.xml
new file mode 100644
index 0000000..58ae67a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/res/layout/activity_main.xml
@@ -0,0 +1,7 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MainActivity" >
+
+</RelativeLayout>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java
new file mode 100644
index 0000000..8662562
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+/**
+ * Class directly referenced from Activity, will be kept in main dex. The class is not referenced
+ * by <clinit> or <init>, its direct references are not kept in main dex.
+ */
+public class ClassForMainDex {
+
+    public static int getVersion() {
+        return Version.getVersion();
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java
new file mode 100644
index 0000000..351d860
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+    }
+
+    public int getVersion() {
+        return ClassForMainDex.getVersion();
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java
new file mode 100644
index 0000000..24b4d69
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+/**
+ * Run the tests with: <code>adb shell am instrument -w
+ com.android.framework.multidexlegacyversionedtestapp/android.test.InstrumentationTestRunner
+</code>
+ */
+public class MultiDexUpdateTest extends ActivityInstrumentationTestCase2<MainActivity>
+{
+    public MultiDexUpdateTest() {
+        super(MainActivity.class);
+    }
+
+    /**
+     * Tests that all classes of the application can be loaded. Verifies also that we load the
+     * correct version of {@link Version} ie the class is the secondary dex file.
+     */
+    public void testAllClassAvailable()
+    {
+        assertEquals(1, getActivity().getVersion());
+    }
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/Version.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/Version.java
new file mode 100644
index 0000000..eb9827a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v1/src/com/android/framework/multidexlegacyversionedtestapp/Version.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+/* can go in secondary dex */
+public class Version {
+
+    public static int getVersion() {
+        return 1;
+    }
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
new file mode 100644
index 0000000..1b8da41
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/Android.mk
@@ -0,0 +1,41 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_SDK_VERSION := 9
+
+LOCAL_PACKAGE_NAME := MultiDexLegacyVersionedTestApp_v2
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+
+mainDexList:= \
+	$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
+
+LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+
+include $(BUILD_PACKAGE)
+
+$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+	$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+	echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
+
+$(built_dex_intermediate): $(mainDexList)
+
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/AndroidManifest.xml b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/AndroidManifest.xml
new file mode 100644
index 0000000..4d24793
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.framework.multidexlegacyversionedtestapp"
+    android:versionCode="2"
+    android:versionName="2.0" >
+
+    <uses-sdk
+        android:minSdkVersion="9"
+        android:targetSdkVersion="18" />
+
+    <application
+        android:name="android.support.multidex.MultiDexApplication"
+        android:allowBackup="true"
+        android:label="MultiDexLegacyVersionedTestApp_v2">
+        <activity
+            android:name="com.android.framework.multidexlegacyversionedtestapp.MainActivity"
+            android:label="MultiDexLegacyVersionedTestApp_v2" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+                     android:targetPackage="com.android.framework.multidexlegacyversionedtestapp"
+                     android:label="Test for MultiDexLegacyVersionedTestApp_v2" />
+
+</manifest>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/res/layout/activity_main.xml b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/res/layout/activity_main.xml
new file mode 100644
index 0000000..58ae67a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/res/layout/activity_main.xml
@@ -0,0 +1,7 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MainActivity" >
+
+</RelativeLayout>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java
new file mode 100644
index 0000000..8662562
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+/**
+ * Class directly referenced from Activity, will be kept in main dex. The class is not referenced
+ * by <clinit> or <init>, its direct references are not kept in main dex.
+ */
+public class ClassForMainDex {
+
+    public static int getVersion() {
+        return Version.getVersion();
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java
new file mode 100644
index 0000000..351d860
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+    }
+
+    public int getVersion() {
+        return ClassForMainDex.getVersion();
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java
new file mode 100644
index 0000000..f130cb2
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+/**
+ * Run the tests with: <code>adb shell am instrument -w
+ com.android.framework.multidexlegacyversionedtestapp/android.test.InstrumentationTestRunner
+</code>
+ */
+public class MultiDexUpdateTest extends ActivityInstrumentationTestCase2<MainActivity>
+{
+    public MultiDexUpdateTest() {
+        super(MainActivity.class);
+    }
+
+    /**
+     * Tests that all classes of the application can be loaded. Verifies also that we load the
+     * correct version of {@link Version} ie the class is the secondary dex file.
+     */
+    public void testAllClassAvailable()
+    {
+        assertEquals(2, getActivity().getVersion());
+    }
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/Version.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/Version.java
new file mode 100644
index 0000000..1f2305f
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v2/src/com/android/framework/multidexlegacyversionedtestapp/Version.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+/* can go in secondary dex */
+public class Version {
+
+    public static int getVersion() {
+        return 2;
+    }
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
new file mode 100644
index 0000000..945bfcca
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/Android.mk
@@ -0,0 +1,41 @@
+# Copyright (C) 2014 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.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_SDK_VERSION := 9
+
+LOCAL_PACKAGE_NAME := MultiDexLegacyVersionedTestApp_v3
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-multidex
+
+mainDexList:= \
+	$(call intermediates-dir-for,APPS,$(LOCAL_PACKAGE_NAME),$(LOCAL_IS_HOST_MODULE),common)/maindex.list
+
+LOCAL_DX_FLAGS := --multi-dex --main-dex-list=$(mainDexList) --minimal-main-dex
+
+include $(BUILD_PACKAGE)
+
+$(mainDexList): $(full_classes_proguard_jar) | $(HOST_OUT_EXECUTABLES)/mainDexClasses
+	$(HOST_OUT_EXECUTABLES)/mainDexClasses $< 1>$@
+	echo "com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.class" >> $@
+
+$(built_dex_intermediate): $(mainDexList)
+
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/AndroidManifest.xml b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/AndroidManifest.xml
new file mode 100644
index 0000000..76c92dd
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.framework.multidexlegacyversionedtestapp"
+    android:versionCode="3"
+    android:versionName="3.0" >
+
+    <uses-sdk
+        android:minSdkVersion="9"
+        android:targetSdkVersion="18" />
+
+    <application
+        android:name="android.support.multidex.MultiDexApplication"
+        android:allowBackup="true"
+        android:label="MultiDexLegacyVersionedTestApp_v3">
+        <activity
+            android:name="com.android.framework.multidexlegacyversionedtestapp.MainActivity"
+            android:label="MultiDexLegacyVersionedTestApp_v3" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+                     android:targetPackage="com.android.framework.multidexlegacyversionedtestapp"
+                     android:label="Test for MultiDexLegacyVersionedTestApp_v3" />
+
+</manifest>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/res/layout/activity_main.xml b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/res/layout/activity_main.xml
new file mode 100644
index 0000000..58ae67a
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/res/layout/activity_main.xml
@@ -0,0 +1,7 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MainActivity" >
+
+</RelativeLayout>
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java
new file mode 100644
index 0000000..8662562
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/ClassForMainDex.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+/**
+ * Class directly referenced from Activity, will be kept in main dex. The class is not referenced
+ * by <clinit> or <init>, its direct references are not kept in main dex.
+ */
+public class ClassForMainDex {
+
+    public static int getVersion() {
+        return Version.getVersion();
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java
new file mode 100644
index 0000000..351d860
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/MainActivity.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+import android.app.Activity;
+import android.os.Bundle;
+
+public class MainActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+    }
+
+    public int getVersion() {
+        return ClassForMainDex.getVersion();
+    }
+
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java
new file mode 100644
index 0000000..67aa478
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/MultiDexUpdateTest.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+/**
+ * Run the tests with: <code>adb shell am instrument -w
+ com.android.framework.multidexlegacyversionedtestapp/android.test.InstrumentationTestRunner
+</code>
+ */
+public class MultiDexUpdateTest extends ActivityInstrumentationTestCase2<MainActivity>
+{
+    public MultiDexUpdateTest() {
+        super(MainActivity.class);
+    }
+
+    /**
+     * Tests that all classes of the application can be loaded. Verifies also that we load the
+     * correct version of {@link Version} ie the class is the secondary dex file.
+     */
+    public void testAllClassAvailable()
+    {
+        assertEquals(3, getActivity().getVersion());
+    }
+}
diff --git a/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/Version.java b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/Version.java
new file mode 100644
index 0000000..1c8ef3b
--- /dev/null
+++ b/core/tests/hosttests/test-apps/MultiDexLegacyVersionedTestApp_v3/src/com/android/framework/multidexlegacyversionedtestapp/Version.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2014 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.android.framework.multidexlegacyversionedtestapp;
+
+/* can go in secondary dex */
+public class Version {
+
+    public static int getVersion() {
+        return 3;
+    }
+}
diff --git a/core/tests/inputmethodtests/run_core_inputmethod_test.sh b/core/tests/inputmethodtests/run_core_inputmethod_test.sh
index 5e123ec..9029ba5 100755
--- a/core/tests/inputmethodtests/run_core_inputmethod_test.sh
+++ b/core/tests/inputmethodtests/run_core_inputmethod_test.sh
@@ -21,4 +21,4 @@
   $COMMAND
 fi
 
-adb shell am instrument -w -e class android.os.InputMethodTest com.android.frameworks.coretests.inputmethod/android.test.InstrumentationTestRunner
+adb shell am instrument -w -e class android.os.InputMethodTest,android.os.InputMethodSubtypeArrayTest,android.os.InputMethodSubtypeSwitchingControllerTest com.android.frameworks.coretests.inputmethod/android.test.InstrumentationTestRunner
diff --git a/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeArrayTest.java b/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeArrayTest.java
new file mode 100644
index 0000000..1e0a919
--- /dev/null
+++ b/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeArrayTest.java
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2014 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 android.os;
+
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.inputmethod.InputMethodSubtype;
+import android.view.inputmethod.InputMethodSubtypeArray;
+import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
+
+import java.util.ArrayList;
+
+public class InputMethodSubtypeArrayTest extends InstrumentationTestCase {
+    @SmallTest
+    public void testInstanciate() throws Exception {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        subtypes.add(createDummySubtype(0, "en_US"));
+        subtypes.add(createDummySubtype(1, "en_US"));
+        subtypes.add(createDummySubtype(2, "ja_JP"));
+
+        final InputMethodSubtypeArray array = new InputMethodSubtypeArray(subtypes);
+        assertEquals(subtypes.size(), array.getCount());
+        assertEquals(subtypes.get(0), array.get(0));
+        assertEquals(subtypes.get(1), array.get(1));
+        assertEquals(subtypes.get(2), array.get(2));
+
+        final InputMethodSubtypeArray clonedArray = cloneViaParcel(array);
+        assertEquals(subtypes.size(), clonedArray.getCount());
+        assertEquals(subtypes.get(0), clonedArray.get(0));
+        assertEquals(subtypes.get(1), clonedArray.get(1));
+        assertEquals(subtypes.get(2), clonedArray.get(2));
+
+        final InputMethodSubtypeArray clonedClonedArray = cloneViaParcel(clonedArray);
+        assertEquals(clonedArray.getCount(), clonedClonedArray.getCount());
+        assertEquals(clonedArray.get(0), clonedClonedArray.get(0));
+        assertEquals(clonedArray.get(1), clonedClonedArray.get(1));
+        assertEquals(clonedArray.get(2), clonedClonedArray.get(2));
+    }
+
+    InputMethodSubtypeArray cloneViaParcel(final InputMethodSubtypeArray original) {
+        Parcel parcel = null;
+        try {
+            parcel = Parcel.obtain();
+            original.writeToParcel(parcel);
+            parcel.setDataPosition(0);
+            return new InputMethodSubtypeArray(parcel);
+        } finally {
+            if (parcel != null) {
+                parcel.recycle();
+            }
+        }
+    }
+
+    private static InputMethodSubtype createDummySubtype(final int id, final String locale) {
+        final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder();
+        return builder.setSubtypeNameResId(0)
+                .setSubtypeIconResId(0)
+                .setSubtypeId(id)
+                .setSubtypeLocale(locale)
+                .setIsAsciiCapable(true)
+                .build();
+    }
+}
diff --git a/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java b/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java
new file mode 100644
index 0000000..6d33529
--- /dev/null
+++ b/core/tests/inputmethodtests/src/android/os/InputMethodSubtypeSwitchingControllerTest.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2014 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 android.os;
+
+import android.content.pm.ApplicationInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.view.inputmethod.InputMethodInfo;
+import android.view.inputmethod.InputMethodSubtype;
+import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
+
+import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController;
+import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class InputMethodSubtypeSwitchingControllerTest extends InstrumentationTestCase {
+    final private static String DUMMY_PACKAGE_NAME = "dymmy package name";
+    final private static String DUMMY_SETTING_ACTIVITY_NAME = "";
+    final private static boolean DUMMY_IS_AUX_IME = false;
+    final private static boolean DUMMY_FORCE_DEFAULT = false;
+    final private static int DUMMY_IS_DEFAULT_RES_ID = 0;
+    final private static String SYSTEM_LOCALE = "en_US";
+
+    private static InputMethodSubtype createDummySubtype(final String locale) {
+        final InputMethodSubtypeBuilder builder = new InputMethodSubtypeBuilder();
+        return builder.setSubtypeNameResId(0)
+                .setSubtypeIconResId(0)
+                .setSubtypeLocale(locale)
+                .setIsAsciiCapable(true)
+                .build();
+    }
+
+    private static void addDummyImeSubtypeListItems(List<ImeSubtypeListItem> items,
+            String imeName, String imeLabel, List<String> subtypeLocales,
+            boolean supportsSwitchingToNextInputMethod) {
+        final ResolveInfo ri = new ResolveInfo();
+        final ServiceInfo si = new ServiceInfo();
+        final ApplicationInfo ai = new ApplicationInfo();
+        ai.packageName = DUMMY_PACKAGE_NAME;
+        ai.enabled = true;
+        si.applicationInfo = ai;
+        si.enabled = true;
+        si.packageName = DUMMY_PACKAGE_NAME;
+        si.name = imeName;
+        si.exported = true;
+        si.nonLocalizedLabel = imeLabel;
+        ri.serviceInfo = si;
+        final List<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        for (String subtypeLocale : subtypeLocales) {
+            subtypes.add(createDummySubtype(subtypeLocale));
+        }
+        final InputMethodInfo imi = new InputMethodInfo(ri, DUMMY_IS_AUX_IME,
+                DUMMY_SETTING_ACTIVITY_NAME, subtypes, DUMMY_IS_DEFAULT_RES_ID,
+                DUMMY_FORCE_DEFAULT, supportsSwitchingToNextInputMethod);
+        for (int i = 0; i < subtypes.size(); ++i) {
+            final String subtypeLocale = subtypeLocales.get(i);
+            final InputMethodSubtype subtype = subtypes.get(i);
+            items.add(new ImeSubtypeListItem(imeName, subtypeLocale, imi, i, subtypeLocale,
+                    SYSTEM_LOCALE));
+        }
+    }
+
+    private static List<ImeSubtypeListItem> createTestData() {
+        final List<ImeSubtypeListItem> items = new ArrayList<ImeSubtypeListItem>();
+        addDummyImeSubtypeListItems(items, "switchAwareLatinIme", "switchAwareLatinIme",
+                Arrays.asList("en_US", "es_US", "fr"),
+                true /* supportsSwitchingToNextInputMethod*/);
+        addDummyImeSubtypeListItems(items, "nonSwitchAwareLatinIme", "nonSwitchAwareLatinIme",
+                Arrays.asList("en_UK", "hi"),
+                false /* supportsSwitchingToNextInputMethod*/);
+        addDummyImeSubtypeListItems(items, "switchAwareJapaneseIme", "switchAwareJapaneseIme",
+                Arrays.asList("ja_JP"),
+                true /* supportsSwitchingToNextInputMethod*/);
+        addDummyImeSubtypeListItems(items, "nonSwitchAwareJapaneseIme", "nonSwitchAwareJapaneseIme",
+                Arrays.asList("ja_JP"),
+                false /* supportsSwitchingToNextInputMethod*/);
+        return items;
+    }
+
+    @SmallTest
+    public void testGetNextInputMethodImplWithNotOnlyCurrentIme() throws Exception {
+        final List<ImeSubtypeListItem> imList = createTestData();
+
+        final boolean ONLY_CURRENT_IME = false;
+        ImeSubtypeListItem currentIme;
+        ImeSubtypeListItem nextIme;
+
+        // "switchAwareLatinIme/en_US" -> "switchAwareLatinIme/es_US"
+        currentIme = imList.get(0);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(1), nextIme);
+        // "switchAwareLatinIme/es_US" -> "switchAwareLatinIme/fr"
+        currentIme = imList.get(1);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(2), nextIme);
+        // "switchAwareLatinIme/fr" -> "nonSwitchAwareLatinIme/en_UK
+        currentIme = imList.get(2);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(3), nextIme);
+        // "nonSwitchAwareLatinIme/en_UK" -> "nonSwitchAwareLatinIme/hi"
+        currentIme = imList.get(3);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(4), nextIme);
+        // "nonSwitchAwareLatinIme/hi" -> "switchAwareJapaneseIme/ja_JP"
+        currentIme = imList.get(4);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(5), nextIme);
+        // "switchAwareJapaneseIme/ja_JP" -> "nonSwitchAwareJapaneseIme/ja_JP"
+        currentIme = imList.get(5);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(6), nextIme);
+        // "nonSwitchAwareJapaneseIme/ja_JP" -> "switchAwareLatinIme/en_US"
+        currentIme = imList.get(6);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(0), nextIme);
+    }
+
+    @SmallTest
+    public void testGetNextInputMethodImplWithOnlyCurrentIme() throws Exception {
+        final List<ImeSubtypeListItem> imList = createTestData();
+
+        final boolean ONLY_CURRENT_IME = true;
+        ImeSubtypeListItem currentIme;
+        ImeSubtypeListItem nextIme;
+
+        // "switchAwareLatinIme/en_US" -> "switchAwareLatinIme/es_US"
+        currentIme = imList.get(0);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(1), nextIme);
+        // "switchAwareLatinIme/es_US" -> "switchAwareLatinIme/fr"
+        currentIme = imList.get(1);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(2), nextIme);
+        // "switchAwareLatinIme/fr" -> "switchAwareLatinIme/en_US"
+        currentIme = imList.get(2);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(0), nextIme);
+
+        // "nonSwitchAwareLatinIme/en_UK" -> "nonSwitchAwareLatinIme/hi"
+        currentIme = imList.get(3);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(4), nextIme);
+        // "nonSwitchAwareLatinIme/hi" -> "switchAwareLatinIme/en_UK"
+        currentIme = imList.get(4);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertEquals(imList.get(3), nextIme);
+
+        // "switchAwareJapaneseIme/ja_JP" -> null
+        currentIme = imList.get(5);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertNull(nextIme);
+
+        // "nonSwitchAwareJapaneseIme/ja_JP" -> null
+        currentIme = imList.get(6);
+        nextIme = InputMethodSubtypeSwitchingController.getNextInputMethodImpl(
+                imList, ONLY_CURRENT_IME, currentIme.mImi, createDummySubtype(
+                        currentIme.mSubtypeName.toString()));
+        assertNull(nextIme);
+    }
+ }
diff --git a/core/tests/inputmethodtests/src/android/os/InputMethodTest.java b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
index 0a2b50c..fa1bd8f 100644
--- a/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
+++ b/core/tests/inputmethodtests/src/android/os/InputMethodTest.java
@@ -34,6 +34,7 @@
     private static final boolean IS_AUX = true;
     private static final boolean IS_DEFAULT = true;
     private static final boolean IS_AUTO = true;
+    private static final ArrayList<InputMethodSubtype> NO_SUBTYPE = null;
 
     @SmallTest
     public void testDefaultEnabledImesWithDefaultVoiceIme() throws Exception {
@@ -45,6 +46,7 @@
         imis.add(createNonDefaultDummyVoiceIme2());
         imis.add(createDefaultDummyEnUSKeyboardIme());
         imis.add(createNonDefaultDummyJaJPKeyboardIme());
+        imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
         final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes(
                 context, true, imis);
         assertEquals(2, enabledImis.size());
@@ -69,6 +71,7 @@
         imis.add(createNonDefaultDummyVoiceIme2());
         imis.add(createDefaultDummyEnUSKeyboardIme());
         imis.add(createNonDefaultDummyJaJPKeyboardIme());
+        imis.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
         final ArrayList<InputMethodInfo> enabledImis = InputMethodUtils.getDefaultEnabledImes(
                 context, true, imis);
         assertEquals(3, enabledImis.size());
@@ -86,6 +89,55 @@
         }
     }
 
+    @SmallTest
+    public void testParcelable() throws Exception {
+        final ArrayList<InputMethodInfo> originalList = new ArrayList<InputMethodInfo>();
+        originalList.add(createNonDefaultAutoDummyVoiceIme0());
+        originalList.add(createNonDefaultAutoDummyVoiceIme1());
+        originalList.add(createNonDefaultDummyVoiceIme2());
+        originalList.add(createDefaultDummyEnUSKeyboardIme());
+        originalList.add(createNonDefaultDummyJaJPKeyboardIme());
+        originalList.add(createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes());
+
+        final List<InputMethodInfo> clonedList = cloneViaParcel(originalList);
+        assertNotNull(clonedList);
+        final List<InputMethodInfo> clonedClonedList = cloneViaParcel(clonedList);
+        assertNotNull(clonedClonedList);
+        assertEquals(originalList, clonedList);
+        assertEquals(clonedList, clonedClonedList);
+        assertEquals(originalList.size(), clonedList.size());
+        assertEquals(clonedList.size(), clonedClonedList.size());
+        for (int imeIndex = 0; imeIndex < originalList.size(); ++imeIndex) {
+            verifyEquality(originalList.get(imeIndex), clonedList.get(imeIndex));
+            verifyEquality(clonedList.get(imeIndex), clonedClonedList.get(imeIndex));
+        }
+    }
+
+    private static List<InputMethodInfo> cloneViaParcel(final List<InputMethodInfo> list) {
+        Parcel p = null;
+        try {
+            p = Parcel.obtain();
+            p.writeTypedList(list);
+            p.setDataPosition(0);
+            return p.createTypedArrayList(InputMethodInfo.CREATOR);
+        } finally {
+            if (p != null) {
+                p.recycle();
+            }
+        }
+    }
+
+    private static void verifyEquality(InputMethodInfo expected, InputMethodInfo actual) {
+        assertEquals(expected, actual);
+        assertEquals(expected.getSubtypeCount(), actual.getSubtypeCount());
+        for (int subtypeIndex = 0; subtypeIndex < expected.getSubtypeCount(); ++subtypeIndex) {
+            final InputMethodSubtype expectedSubtype = expected.getSubtypeAt(subtypeIndex);
+            final InputMethodSubtype actualSubtype = actual.getSubtypeAt(subtypeIndex);
+            assertEquals(expectedSubtype, actualSubtype);
+            assertEquals(expectedSubtype.hashCode(), actualSubtype.hashCode());
+        }
+    }
+
     private static InputMethodInfo createDummyInputMethodInfo(String packageName, String name,
             CharSequence label, boolean isAuxIme, boolean isDefault,
             List<InputMethodSubtype> subtypes) {
@@ -155,4 +207,12 @@
         return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardIme", "dummy.keyboard1",
                 "DummyKeyboard1", !IS_AUX, !IS_DEFAULT, subtypes);
     }
+
+    // Although IMEs that have no subtype are considered to be deprecated, the Android framework
+    // must still be able to handle such IMEs as well as IMEs that have at least one subtype.
+    private static InputMethodInfo createNonDefaultDummyJaJPKeyboardImeWithoutSubtypes() {
+        final ArrayList<InputMethodSubtype> subtypes = new ArrayList<InputMethodSubtype>();
+        return createDummyInputMethodInfo("DummyNonDefaultJaJPKeyboardImeWithoutSubtypes",
+                "dummy.keyboard2", "DummyKeyboard2", !IS_AUX, !IS_DEFAULT, NO_SUBTYPE);
+    }
 }
diff --git a/data/keyboards/AVRCP.kl b/data/keyboards/AVRCP.kl
index 736b43c..ccd0209 100644
--- a/data/keyboards/AVRCP.kl
+++ b/data/keyboards/AVRCP.kl
@@ -14,10 +14,10 @@
 
 # Key layout used for Bluetooth AVRCP support.
 
-key 200   MEDIA_PLAY          WAKE
-key 201   MEDIA_PAUSE         WAKE
-key 166   MEDIA_STOP          WAKE
-key 163   MEDIA_NEXT          WAKE
-key 165   MEDIA_PREVIOUS      WAKE
-key 168   MEDIA_REWIND        WAKE
-key 208   MEDIA_FAST_FORWARD  WAKE
+key 200   MEDIA_PLAY
+key 201   MEDIA_PAUSE
+key 166   MEDIA_STOP
+key 163   MEDIA_NEXT
+key 165   MEDIA_PREVIOUS
+key 168   MEDIA_REWIND
+key 208   MEDIA_FAST_FORWARD
diff --git a/data/keyboards/Generic.kcm b/data/keyboards/Generic.kcm
index 01d22ee..1ef74ba 100644
--- a/data/keyboards/Generic.kcm
+++ b/data/keyboards/Generic.kcm
@@ -492,11 +492,11 @@
 }
 
 key BUTTON_X {
-    base:                               fallback DPAD_CENTER
+    base:                               fallback DEL
 }
 
 key BUTTON_Y {
-    base:                               fallback BACK
+    base:                               fallback SPACE
 }
 
 key BUTTON_Z {
diff --git a/data/keyboards/Generic.kl b/data/keyboards/Generic.kl
index 0cdcb1c..56423c9 100644
--- a/data/keyboards/Generic.kl
+++ b/data/keyboards/Generic.kl
@@ -135,7 +135,7 @@
 key 113   VOLUME_MUTE
 key 114   VOLUME_DOWN
 key 115   VOLUME_UP
-key 116   POWER             WAKE
+key 116   POWER
 key 117   NUMPAD_EQUALS
 # key 118 "KEY_KPPLUSMINUS"
 key 119   BREAK
@@ -146,7 +146,7 @@
 key 124   YEN
 key 125   META_LEFT
 key 126   META_RIGHT
-key 127   MENU              WAKE_DROPPED
+key 127   MENU
 key 128   MEDIA_STOP
 # key 129 "KEY_AGAIN"
 # key 130 "KEY_PROPS"
@@ -158,11 +158,11 @@
 # key 136 "KEY_FIND"
 # key 137 "KEY_CUT"
 # key 138 "KEY_HELP"
-key 139   MENU              WAKE_DROPPED
+key 139   MENU
 key 140   CALCULATOR
 # key 141 "KEY_SETUP"
-key 142   SLEEP             WAKE
-key 143   WAKEUP            WAKE
+key 142   SLEEP
+key 143   WAKEUP
 # key 144 "KEY_FILE"
 # key 145 "KEY_SENDFILE"
 # key 146 "KEY_DELETEFILE"
@@ -171,13 +171,13 @@
 # key 149 "KEY_PROG2"
 key 150   EXPLORER
 # key 151 "KEY_MSDOS"
-key 152   POWER             WAKE
+key 152   POWER
 # key 153 "KEY_DIRECTION"
 # key 154 "KEY_CYCLEWINDOWS"
 key 155   ENVELOPE
 key 156   BOOKMARK
 # key 157 "KEY_COMPUTER"
-key 158   BACK              WAKE_DROPPED
+key 158   BACK
 key 159   FORWARD
 key 160   MEDIA_CLOSE
 key 161   MEDIA_EJECT
diff --git a/data/keyboards/Vendor_0a5c_Product_8502.kl b/data/keyboards/Vendor_0a5c_Product_8502.kl
new file mode 100644
index 0000000..2f07328
--- /dev/null
+++ b/data/keyboards/Vendor_0a5c_Product_8502.kl
@@ -0,0 +1,42 @@
+# Copyright (C) 2013 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.
+
+# Rhodi
+
+key 304 BUTTON_A
+key 305 BUTTON_B
+key 307 BUTTON_X
+key 308 BUTTON_Y
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 316 BUTTON_MODE
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+key 158 BACK
+key 172 HOME
+
+axis 0x00 X
+axis 0x01 Y
+axis 0x02 Z
+axis 0x05 RZ
+axis 0x09 RTRIGGER
+axis 0x0a LTRIGGER
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+led 0x00 CONTROLLER_1
+led 0x01 CONTROLLER_2
+led 0x02 CONTROLLER_3
+led 0x03 CONTROLLER_4
diff --git a/data/keyboards/Vendor_18d1_Product_2c40.kl b/data/keyboards/Vendor_18d1_Product_2c40.kl
index 903f13b6..6efde4f 100644
--- a/data/keyboards/Vendor_18d1_Product_2c40.kl
+++ b/data/keyboards/Vendor_18d1_Product_2c40.kl
@@ -24,7 +24,7 @@
 key 317 BUTTON_THUMBL
 key 318 BUTTON_THUMBR
 
-key 158 BACK            WAKE_DROPPED
+key 158 BACK
 key 172 HOME
 
 axis 0x00 X
diff --git a/data/keyboards/Vendor_1949_Product_0401.kl b/data/keyboards/Vendor_1949_Product_0401.kl
new file mode 100644
index 0000000..ab24bcd
--- /dev/null
+++ b/data/keyboards/Vendor_1949_Product_0401.kl
@@ -0,0 +1,27 @@
+# Copyright (C) 2014 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.
+
+# Amazon Fire TV remote
+
+key 103 DPAD_UP
+key 108 DPAD_DOWN
+key 105 DPAD_LEFT
+key 106 DPAD_RIGHT
+key 96  DPAD_CENTER
+key 158 BACK
+key 172 HOME
+key 168 MEDIA_REWIND
+key 208 MEDIA_FAST_FORWARD
+key 164 MEDIA_PLAY_PAUSE
+key 217 ASSIST
diff --git a/data/keyboards/qwerty.kl b/data/keyboards/qwerty.kl
index f1caacd..58bf654 100644
--- a/data/keyboards/qwerty.kl
+++ b/data/keyboards/qwerty.kl
@@ -30,29 +30,29 @@
 key 9     8
 key 10    9
 key 11    0
-key 158   BACK              WAKE_DROPPED
-key 230   SOFT_RIGHT        WAKE
-key 60    SOFT_RIGHT        WAKE
-key 107   ENDCALL           WAKE_DROPPED
-key 62    ENDCALL           WAKE_DROPPED
-key 229   MENU              WAKE_DROPPED
-key 139   MENU              WAKE_DROPPED
-key 59    MENU              WAKE_DROPPED
-key 127   SEARCH            WAKE_DROPPED
-key 217   SEARCH            WAKE_DROPPED
+key 158   BACK
+key 230   SOFT_RIGHT
+key 60    SOFT_LEFT
+key 107   ENDCALL
+key 62    ENDCALL
+key 229   MENU
+key 139   MENU
+key 59    MENU
+key 127   SEARCH
+key 217   SEARCH
 key 228   POUND
 key 227   STAR
-key 231   CALL              WAKE_DROPPED
-key 61    CALL              WAKE_DROPPED
-key 232   DPAD_CENTER       WAKE_DROPPED
-key 108   DPAD_DOWN         WAKE_DROPPED
-key 103   DPAD_UP           WAKE_DROPPED
-key 102   HOME              WAKE
-key 105   DPAD_LEFT         WAKE_DROPPED
-key 106   DPAD_RIGHT        WAKE_DROPPED
-key 115   VOLUME_UP         WAKE
-key 114   VOLUME_DOWN       WAKE
-key 116   POWER             WAKE
+key 231   CALL
+key 61    CALL
+key 232   DPAD_CENTER
+key 108   DPAD_DOWN
+key 103   DPAD_UP
+key 102   HOME
+key 105   DPAD_LEFT
+key 106   DPAD_RIGHT
+key 115   VOLUME_UP
+key 114   VOLUME_DOWN
+key 116   POWER
 key 212   CAMERA
 
 key 16    Q
@@ -108,5 +108,5 @@
 key 215   AT
 
 # On an AT keyboard: ESC, F10
-key 1     BACK              WAKE_DROPPED
-key 68    MENU              WAKE_DROPPED
+key 1     BACK
+key 68    MENU
diff --git a/data/sounds/effects/ogg/KeypressInvalid_48k.ogg b/data/sounds/effects/ogg/KeypressInvalid_48k.ogg
index 24935ad..d1843a7 100644
--- a/data/sounds/effects/ogg/KeypressInvalid_48k.ogg
+++ b/data/sounds/effects/ogg/KeypressInvalid_48k.ogg
Binary files differ
diff --git a/docs/html/design/building-blocks/buttons.jd b/docs/html/design/building-blocks/buttons.jd
index 8a65b82..3a34601 100644
--- a/docs/html/design/building-blocks/buttons.jd
+++ b/docs/html/design/building-blocks/buttons.jd
@@ -1,5 +1,5 @@
 page.title=Buttons
-page.tags="button","input"
+page.tags=button,input
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/button.html">
diff --git a/docs/html/design/building-blocks/dialogs.jd b/docs/html/design/building-blocks/dialogs.jd
index 7cd032c..53d99b8 100644
--- a/docs/html/design/building-blocks/dialogs.jd
+++ b/docs/html/design/building-blocks/dialogs.jd
@@ -1,5 +1,5 @@
 page.title=Dialogs
-page.tags="dialog","alert","popup","toast"
+page.tags=dialog,alert,popup,toast
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/dialogs.html">
diff --git a/docs/html/design/building-blocks/grid-lists.jd b/docs/html/design/building-blocks/grid-lists.jd
index 6c9d227..d98637cc 100644
--- a/docs/html/design/building-blocks/grid-lists.jd
+++ b/docs/html/design/building-blocks/grid-lists.jd
@@ -1,5 +1,5 @@
 page.title=Grid Lists
-page.tags="gridview","layout","listview"
+page.tags=gridview,layout,listview
 @jd:body
 
 <img src="{@docRoot}design/media/gridview_overview.png">
diff --git a/docs/html/design/building-blocks/lists.jd b/docs/html/design/building-blocks/lists.jd
index 0bbd08b..4949d00 100644
--- a/docs/html/design/building-blocks/lists.jd
+++ b/docs/html/design/building-blocks/lists.jd
@@ -1,5 +1,5 @@
 page.title=Lists
-page.tags="listview","layout"
+page.tags=listview,layout
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/layout/listview.html">
diff --git a/docs/html/design/building-blocks/pickers.jd b/docs/html/design/building-blocks/pickers.jd
index 9473d11..fb5e287 100644
--- a/docs/html/design/building-blocks/pickers.jd
+++ b/docs/html/design/building-blocks/pickers.jd
@@ -1,5 +1,5 @@
 page.title=Pickers
-page.tags="datepicker","timepicker"
+page.tags=datepicker,timepicker
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/pickers.html">
diff --git a/docs/html/design/building-blocks/progress.jd b/docs/html/design/building-blocks/progress.jd
index 90732f4..6946a75 100644
--- a/docs/html/design/building-blocks/progress.jd
+++ b/docs/html/design/building-blocks/progress.jd
@@ -1,5 +1,5 @@
 page.title=Progress &amp; Activity
-page.tags="progressbar","download","network"
+page.tags=progressbar,download,network
 @jd:body
 
 <p>Progress bars and activity indicators signal to users that something is happening that will take a moment.</p>
diff --git a/docs/html/design/building-blocks/scrolling.jd b/docs/html/design/building-blocks/scrolling.jd
index 13b3b09..41e7cec 100644
--- a/docs/html/design/building-blocks/scrolling.jd
+++ b/docs/html/design/building-blocks/scrolling.jd
@@ -1,5 +1,5 @@
 page.title=Scrolling
-page.tags="scrollview","listview"
+page.tags=scrollview,listview
 @jd:body
 
 <p>Scrolling allows the user to navigate to content in the overflow using a swipe gesture. The
diff --git a/docs/html/design/building-blocks/seek-bars.jd b/docs/html/design/building-blocks/seek-bars.jd
index 9d38e36..1465688 100644
--- a/docs/html/design/building-blocks/seek-bars.jd
+++ b/docs/html/design/building-blocks/seek-bars.jd
@@ -1,5 +1,5 @@
 page.title=Seek Bars and Sliders
-page.tags="seekbar","progressbar"
+page.tags=seekbar,progressbar
 @jd:body
 
 <p>Interactive sliders make it possible to select a value from a continuous or discrete range of values
diff --git a/docs/html/design/building-blocks/spinners.jd b/docs/html/design/building-blocks/spinners.jd
index cdc933b..f7d80e7 100644
--- a/docs/html/design/building-blocks/spinners.jd
+++ b/docs/html/design/building-blocks/spinners.jd
@@ -1,5 +1,5 @@
 page.title=Spinners
-page.tags="spinner","dropdown"
+page.tags=spinner,dropdown
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/spinner.html">
diff --git a/docs/html/design/building-blocks/switches.jd b/docs/html/design/building-blocks/switches.jd
index dff6c73..d435657 100644
--- a/docs/html/design/building-blocks/switches.jd
+++ b/docs/html/design/building-blocks/switches.jd
@@ -1,5 +1,5 @@
 page.title=Switches
-page.tags="switch","checkbox","radiobutton","button"
+page.tags=switch,checkbox,radiobutton,button
 @jd:body
 
 <p>Switches allow the user to select options. There are three kinds of switches: checkboxes, radio
diff --git a/docs/html/design/building-blocks/tabs.jd b/docs/html/design/building-blocks/tabs.jd
index 2186b18..93818c3 100644
--- a/docs/html/design/building-blocks/tabs.jd
+++ b/docs/html/design/building-blocks/tabs.jd
@@ -1,5 +1,5 @@
 page.title=Tabs
-page.tags="tabs","actionbar","navigation","viewpager"
+page.tags=tabs,actionbar,navigation,viewpager
 @jd:body
 
 <img src="{@docRoot}design/media/tabs_overview.png">
diff --git a/docs/html/design/building-blocks/text-fields.jd b/docs/html/design/building-blocks/text-fields.jd
index 3840ca2..e109d5f 100644
--- a/docs/html/design/building-blocks/text-fields.jd
+++ b/docs/html/design/building-blocks/text-fields.jd
@@ -1,5 +1,5 @@
 page.title=Text Fields
-page.tags="text","edittext","input"
+page.tags=text,edittext,input
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/controls/text.html">
diff --git a/docs/html/design/downloads/index.jd b/docs/html/design/downloads/index.jd
index 16f5509..ddeda5c 100644
--- a/docs/html/design/downloads/index.jd
+++ b/docs/html/design/downloads/index.jd
@@ -1,5 +1,5 @@
 page.title=Downloads
-page tags="Icons", "stencils", "color swatches"
+page.tags=Icons,stencils,color swatches
 @jd:body
 
 <div class="layout-content-row">
diff --git a/docs/html/design/patterns/app-structure.jd b/docs/html/design/patterns/app-structure.jd
index 1447d4e..e0a11ed 100644
--- a/docs/html/design/patterns/app-structure.jd
+++ b/docs/html/design/patterns/app-structure.jd
@@ -1,5 +1,5 @@
 page.title=App Structure
-page.tags="navigation","layout","tablet"
+page.tags=navigation,layout,tablet
 @jd:body
 
     <p>Apps come in many varieties that address very different needs. For example:</p>
@@ -307,4 +307,4 @@
 <li>
 <p>Allow for quick navigation between detail items with swipe views.</p>
 </li>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/docs/html/design/patterns/buttons.jd b/docs/html/design/patterns/buttons.jd
index 46e41c8..2d65b2d 100644
--- a/docs/html/design/patterns/buttons.jd
+++ b/docs/html/design/patterns/buttons.jd
@@ -1,5 +1,5 @@
 page.title=Buttons
-page.tags="buttons"
+page.tags=buttons
 @jd:body
 
 <p>
@@ -148,4 +148,4 @@
   Replace previous implementations of Lights Out mode with the Lean Back or
   Immersive approaches. Continue to use Lights Out mode for implementations of
   your app targeted for earlier releases.
-</p>
\ No newline at end of file
+</p>
diff --git a/docs/html/design/patterns/confirming-acknowledging.jd b/docs/html/design/patterns/confirming-acknowledging.jd
index e347231..d39d32d 100644
--- a/docs/html/design/patterns/confirming-acknowledging.jd
+++ b/docs/html/design/patterns/confirming-acknowledging.jd
@@ -1,5 +1,5 @@
 page.title=Confirming &amp; Acknowledging
-page.tags="dialog","toast","notification"
+page.tags=dialog,toast,notification
 @jd:body
 
 <p>In some situations, when a user invokes an action in your app, it's a good idea to <em>confirm</em> or <em>acknowledge</em> that action through text.</p>
@@ -67,4 +67,4 @@
     <p><strong>Acknowledgment is unnecessary</strong>. The user will know the app is gone from the Home Screen because they made it disappear by dragging it away.</p>
 
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/docs/html/design/patterns/fullscreen.jd b/docs/html/design/patterns/fullscreen.jd
index de016fe..624d44c 100644
--- a/docs/html/design/patterns/fullscreen.jd
+++ b/docs/html/design/patterns/fullscreen.jd
@@ -1,5 +1,5 @@
 page.title=Full Screen
-page.tags="full screen","immersive", "leanback"
+page.tags=full screen,immersive,leanback
 @jd:body
 
 <p>
@@ -148,4 +148,4 @@
   Replace previous implementations of Lights Out mode with the Lean Back or
   Immersive approaches. Continue to use Lights Out mode for implementations of
   your app targeted for earlier releases.
-</p>
\ No newline at end of file
+</p>
diff --git a/docs/html/design/patterns/gestures.jd b/docs/html/design/patterns/gestures.jd
index 213902f..1ec7094 100644
--- a/docs/html/design/patterns/gestures.jd
+++ b/docs/html/design/patterns/gestures.jd
@@ -1,5 +1,5 @@
 page.title=Gestures
-page.tags="gesture","input","touch"
+page.tags=gesture,input,touch
 @jd:body
 
 <p>Gestures allow users to interact with your app by manipulating the screen objects you provide. The
diff --git a/docs/html/design/patterns/help.jd b/docs/html/design/patterns/help.jd
index e47bc5a..97949e2 100644
--- a/docs/html/design/patterns/help.jd
+++ b/docs/html/design/patterns/help.jd
@@ -1,5 +1,5 @@
 page.title=Help
-page.tags="settings","preferences"
+page.tags=settings,preferences
 @jd:body
 
 <p>We wish we could guarantee that if you follow every piece of advice on this website, everyone will be able to learn and use your app without a hitch. Sadly, that's not the case.</p>
@@ -110,4 +110,4 @@
 <p>People don't read help from start to finish. They scan around, looking for a piece of information containing the answer they need. Make it less burdensome with friendly formatting and layout choices like bold headings, bulleted and numbered lists, tables, and white space between paragraphs. And if you have a large amount of content, divide it into multiple screens to cut down on scrolling.</p>
 
 <h4>Take me straight to the answer</h4>
-<p>What's better than a screen that's easy to scan? A screen that requires no scanning at all because the answer's right there. Consider having each screen in your app navigate to help that's relevant just to that screen. We call this <em>contextual help</em>, and it's the holy grail of user assistance. If you take this approach, be sure to also provide a way to get to the rest of the help content.</p>
\ No newline at end of file
+<p>What's better than a screen that's easy to scan? A screen that requires no scanning at all because the answer's right there. Consider having each screen in your app navigate to help that's relevant just to that screen. We call this <em>contextual help</em>, and it's the holy grail of user assistance. If you take this approach, be sure to also provide a way to get to the rest of the help content.</p>
diff --git a/docs/html/design/patterns/multi-pane-layouts.jd b/docs/html/design/patterns/multi-pane-layouts.jd
index 6071ef3..c207006 100644
--- a/docs/html/design/patterns/multi-pane-layouts.jd
+++ b/docs/html/design/patterns/multi-pane-layouts.jd
@@ -3,6 +3,7 @@
 page.metaDescription=Android devices come in many different screen sizes and types. Multi-pane layouts help you provide a balanced and aesthetically pleasing layout across the range of Android devices.
 @jd:body
 
+
 <a class="notice-developers" href="{@docRoot}training/basics/fragments/index.html">
   <div>
     <h3>Developer Docs</h3>
diff --git a/docs/html/design/patterns/navigation-drawer.jd b/docs/html/design/patterns/navigation-drawer.jd
index bf6609e..7e63ba6c 100644
--- a/docs/html/design/patterns/navigation-drawer.jd
+++ b/docs/html/design/patterns/navigation-drawer.jd
@@ -1,5 +1,5 @@
 page.title=Navigation Drawer
-page.tags="DrawerLayout","SlidingPaneLayout"
+page.tags=DrawerLayout,SlidingPaneLayout
 @jd:body
 
 
diff --git a/docs/html/design/patterns/navigation.jd b/docs/html/design/patterns/navigation.jd
index 3e60f66..3edf6ba 100644
--- a/docs/html/design/patterns/navigation.jd
+++ b/docs/html/design/patterns/navigation.jd
@@ -1,5 +1,5 @@
 page.title=Navigation with Back and Up
-page.tags="navigation","activity","task","up navigation","back navigation"
+page.tags=navigation,activity,task,up navigation,back navigation
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
diff --git a/docs/html/design/patterns/new.jd b/docs/html/design/patterns/new.jd
index 50cb950..d672e46 100644
--- a/docs/html/design/patterns/new.jd
+++ b/docs/html/design/patterns/new.jd
@@ -1,5 +1,5 @@
 page.title=New in Android
-page.tags="KitKat", "Android 4.4"
+page.tags=KitKat,Android 4.4
 @jd:body
 
 
diff --git a/docs/html/design/patterns/selection.jd b/docs/html/design/patterns/selection.jd
index d0ad837..be31677 100644
--- a/docs/html/design/patterns/selection.jd
+++ b/docs/html/design/patterns/selection.jd
@@ -1,5 +1,5 @@
 page.title=Selection
-page.tags="actionmode","navigation","contextual"
+page.tags=actionmode,navigation,contextual
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/menus.html#context-menu">
diff --git a/docs/html/design/patterns/settings.jd b/docs/html/design/patterns/settings.jd
index 7e0485f..e3a3f05 100644
--- a/docs/html/design/patterns/settings.jd
+++ b/docs/html/design/patterns/settings.jd
@@ -1,5 +1,5 @@
 page.title=Settings
-page.tags="preferences","sharedpreferences"
+page.tags=preferences,sharedpreferences
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/ui/settings.html">
@@ -696,4 +696,4 @@
 <li><p>Use design patterns wherever applicable so users don't face a learning curve.</p></li>
 <li><p>Choose defaults that are safe, neutral, and fit the majority of users.</p></li>
 <li><p>Give each setting a clear, concise label and use secondary text appropriately.</p></li>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/docs/html/design/patterns/swipe-views.jd b/docs/html/design/patterns/swipe-views.jd
index 46d6ffb8..af5c9dc 100644
--- a/docs/html/design/patterns/swipe-views.jd
+++ b/docs/html/design/patterns/swipe-views.jd
@@ -1,5 +1,5 @@
 page.title=Swipe Views
-page.tags="viewpager","navigation","tabs"
+page.tags=viewpager,navigation,tabs
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}training/implementing-navigation/lateral.html">
diff --git a/docs/html/design/patterns/widgets.jd b/docs/html/design/patterns/widgets.jd
index d08f178..654cf37 100644
--- a/docs/html/design/patterns/widgets.jd
+++ b/docs/html/design/patterns/widgets.jd
@@ -1,5 +1,5 @@
 page.title=Widgets
-page.tags="appwidget","home"
+page.tags=appwidget,home
 @jd:body
 
 <a class="notice-developers" href="{@docRoot}guide/topics/appwidgets/index.html">
diff --git a/docs/html/design/style/branding.jd b/docs/html/design/style/branding.jd
index 2ea4d47..2353a93 100644
--- a/docs/html/design/style/branding.jd
+++ b/docs/html/design/style/branding.jd
@@ -1,5 +1,5 @@
 page.title=Your Branding
-page.tags="branding","logo"
+page.tags=branding,logo
 @jd:body
 
 <p>Following Android design patterns doesn't mean that your app has to look the same as
diff --git a/docs/html/design/style/iconography.jd b/docs/html/design/style/iconography.jd
index 4559f00..d8d8c76 100644
--- a/docs/html/design/style/iconography.jd
+++ b/docs/html/design/style/iconography.jd
@@ -10,7 +10,7 @@
 <p>An icon is a graphic that takes up a small portion of screen real estate and provides a quick,
 intuitive representation of an action, a status, or an app.</p>
 
-<p >When you design icons for your app, it's important to keep in mind that your
+<p>When you design icons for your app, it's important to keep in mind that your
 app may be installed on a variety of devices that offer a range of
 pixel densities, as mentioned in
 <a href="{@docRoot}design/style/devices-displays.html">Devices
diff --git a/docs/html/design/style/metrics-grids.jd b/docs/html/design/style/metrics-grids.jd
index c375631..a553475 100644
--- a/docs/html/design/style/metrics-grids.jd
+++ b/docs/html/design/style/metrics-grids.jd
@@ -1,5 +1,5 @@
 page.title=Metrics and Grids
-page.tags="layout","screens"
+page.tags=layout,screens
 @jd:body
 
 <p>Devices vary not only in physical size, but also in screen density (<acronym title="Dots per
diff --git a/docs/html/design/style/touch-feedback.jd b/docs/html/design/style/touch-feedback.jd
index 2017d8e..9f36fed 100644
--- a/docs/html/design/style/touch-feedback.jd
+++ b/docs/html/design/style/touch-feedback.jd
@@ -1,5 +1,5 @@
 page.title=Touch Feedback
-page.tags="input","button"
+page.tags=input,button
 @jd:body
 
     <div class="layout-content-row" style="margin-bottom: -100px">
@@ -83,4 +83,4 @@
   widgets, like lists and grid lists, have support for boundary feedback built
   in. If you’re building custom widgets, keep boundary feedback in mind and
   provide it from within your app.
-</p>
\ No newline at end of file
+</p>
diff --git a/docs/html/design/style/typography.jd b/docs/html/design/style/typography.jd
index 3c201f7..ec6fba2 100644
--- a/docs/html/design/style/typography.jd
+++ b/docs/html/design/style/typography.jd
@@ -1,5 +1,5 @@
 page.title=Typography
-page.tags="textview","font"
+page.tags=textview,font
 @jd:body
 
 <div class="layout-content-row">
diff --git a/docs/html/design/style/writing.jd b/docs/html/design/style/writing.jd
index cda17eb..4f62253 100644
--- a/docs/html/design/style/writing.jd
+++ b/docs/html/design/style/writing.jd
@@ -1,5 +1,5 @@
 page.title=Writing Style
-page.tags="dialog","toast","notification"
+page.tags=dialog,toast,notification
 @jd:body
 
 <h2 id="voa">Android's Voice</h2>
@@ -319,4 +319,4 @@
         ellipsis. </li>
     </ul>
   </li>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/docs/html/distribute/googleplay/edu/index.jd b/docs/html/distribute/googleplay/edu/index.jd
index 487028f..a27f82f 100644
--- a/docs/html/distribute/googleplay/edu/index.jd
+++ b/docs/html/distribute/googleplay/edu/index.jd
@@ -1,5 +1,5 @@
 page.title=Google Play for Education
-page.tags="Google Play","education","schools", "distribution"
+page.tags=Google Play,education,schools,distribution
 header.hide=1
 
 @jd:body
diff --git a/docs/html/distribute/googleplay/publish/localizing.jd b/docs/html/distribute/googleplay/publish/localizing.jd
index 1a5f3c1..30f10b7 100644
--- a/docs/html/distribute/googleplay/publish/localizing.jd
+++ b/docs/html/distribute/googleplay/publish/localizing.jd
@@ -1,5 +1,5 @@
 page.title=Localization Checklist
-page.tags="localize","localization","resources", "formats", "l10n"
+page.tags=localize,localization,resources,formats,l10n
 @jd:body
 
 <div id="qv-wrapper"><div id="qv">
diff --git a/docs/html/distribute/googleplay/publish/preparing.jd b/docs/html/distribute/googleplay/publish/preparing.jd
index b9dd0e0..6af3eea 100644
--- a/docs/html/distribute/googleplay/publish/preparing.jd
+++ b/docs/html/distribute/googleplay/publish/preparing.jd
@@ -1,5 +1,5 @@
 page.title=Launch Checklist
-page.tags="publishing","launch","Google Play", "Developer Console"
+page.tags=publishing,launch,Google Play,Developer Console
 @jd:body
 
 <div id="qv-wrapper"><div id="qv">
diff --git a/docs/html/google/gcm/client.jd b/docs/html/google/gcm/client.jd
index 42cebfc..ac446dc 100644
--- a/docs/html/google/gcm/client.jd
+++ b/docs/html/google/gcm/client.jd
@@ -1,5 +1,5 @@
 page.title=Implementing GCM Client
-page.tags="cloud","push","messaging"
+page.tags=cloud,push,messaging
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/google/gcm/gs.jd b/docs/html/google/gcm/gs.jd
index d937955..4cfe1bc 100644
--- a/docs/html/google/gcm/gs.jd
+++ b/docs/html/google/gcm/gs.jd
@@ -1,5 +1,5 @@
 page.title=Getting Started
-page.tags="cloud","push","messaging"
+page.tags=cloud,push,messaging
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/google/gcm/helper.jd b/docs/html/google/gcm/helper.jd
index e7f2f73..19dcdc5 100644
--- a/docs/html/google/gcm/helper.jd
+++ b/docs/html/google/gcm/helper.jd
@@ -1,5 +1,5 @@
 page.title=Using the GCM Helper Libraries
-page.tags="cloud","push","messaging"
+page.tags=cloud,push,messaging
 @jd:body
 
 <div id="deprecatedSticker">
diff --git a/docs/html/google/gcm/index.jd b/docs/html/google/gcm/index.jd
index 8f325b8..70f7a9c 100644
--- a/docs/html/google/gcm/index.jd
+++ b/docs/html/google/gcm/index.jd
@@ -1,5 +1,5 @@
 page.title=Google Cloud Messaging for Android
-page.tags="gcm"
+page.tags=gcm
 header.hide=1
 @jd:body
 
diff --git a/docs/html/google/play-services/ads.jd b/docs/html/google/play-services/ads.jd
index 18579c7..ed346c6 100644
--- a/docs/html/google/play-services/ads.jd
+++ b/docs/html/google/play-services/ads.jd
@@ -1,5 +1,5 @@
 page.title=Google Mobile Ads
-page.tags="Ads","monetization", "AdMob", "Google Play services"
+page.tags=Ads,monetization,AdMob,Google Play services
 header.hide=1
 
 @jd:body
diff --git a/docs/html/google/play-services/auth.jd b/docs/html/google/play-services/auth.jd
index 7acaf1c..dded5998 100644
--- a/docs/html/google/play-services/auth.jd
+++ b/docs/html/google/play-services/auth.jd
@@ -1,5 +1,5 @@
 page.title=Authorization
-page.tags="AccountManager","oauth2"
+page.tags=AccountManager,oauth2
 @jd:body
 
 <div id="qv-wrapper">
@@ -236,4 +236,4 @@
     case, obtain a new token using <a
 href="{@docRoot}reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String)"
 >{@code GoogleAuthUtil.getToken()}</a>.
-</p>
\ No newline at end of file
+</p>
diff --git a/docs/html/google/play-services/id.jd b/docs/html/google/play-services/id.jd
index 466dfef..db50c7f 100644
--- a/docs/html/google/play-services/id.jd
+++ b/docs/html/google/play-services/id.jd
@@ -1,5 +1,5 @@
 page.title=Advertising ID
-page.tags="Ads","Advertising ID", "ID"
+page.tags=Ads,Advertising ID,ID
 header.hide=1
 
 @jd:body
@@ -195,4 +195,4 @@
   }
   final String id = adInfo.getId();
   final boolean isLAT = adInfo.isLimitAdTrackingEnabled();
-}</pre>
\ No newline at end of file
+}</pre>
diff --git a/docs/html/google/play-services/location.jd b/docs/html/google/play-services/location.jd
index 1cdd247..3fbf00e 100644
--- a/docs/html/google/play-services/location.jd
+++ b/docs/html/google/play-services/location.jd
@@ -1,5 +1,5 @@
 page.title=Location APIs
-page.tags="location","geofence", "geofencing", "gps"
+page.tags=location,geofence,geofencing,gps
 header.hide=1
 @jd:body
 
diff --git a/docs/html/google/play-services/maps.jd b/docs/html/google/play-services/maps.jd
index 1fae770b..c541b08 100644
--- a/docs/html/google/play-services/maps.jd
+++ b/docs/html/google/play-services/maps.jd
@@ -1,5 +1,5 @@
 page.title=Google Maps Android API v2
-page.tags="mapview","location"
+page.tags=mapview,location
 header.hide=1
 
 @jd:body
diff --git a/docs/html/google/play-services/plus.jd b/docs/html/google/play-services/plus.jd
index 95c9e0e..84224e7 100644
--- a/docs/html/google/play-services/plus.jd
+++ b/docs/html/google/play-services/plus.jd
@@ -1,5 +1,5 @@
 page.title=Google+ Platform for Android
-page.tags="authentication","signin","social"
+page.tags=authentication,signin,social
 header.hide=1
 
 @jd:body
@@ -87,4 +87,4 @@
     Google+ developer documents at <a class="external-link"
     href="https://developers.google.com/+/mobile/android/">developers.google.com/+</a>.</p>
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/docs/html/google/play-services/wallet.jd b/docs/html/google/play-services/wallet.jd
index 6c0dd4c..9f2b4dd 100644
--- a/docs/html/google/play-services/wallet.jd
+++ b/docs/html/google/play-services/wallet.jd
@@ -1,5 +1,5 @@
 page.title=Google Wallet Instant Buy for Android
-page.tags="Wallet","payments","Instant Buy"
+page.tags=Wallet,payments,Instant Buy
 header.hide=1
 
 @jd:body
@@ -83,4 +83,4 @@
 
 
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/docs/html/google/play/billing/gp-purchase-status-api.jd b/docs/html/google/play/billing/gp-purchase-status-api.jd
index 4cfacee..d272301 100644
--- a/docs/html/google/play/billing/gp-purchase-status-api.jd
+++ b/docs/html/google/play/billing/gp-purchase-status-api.jd
@@ -1,5 +1,5 @@
 page.title=Purchase Status API
-page.tags="In-app Billing", "Google Play", "inapp billing", "in app billing", "iab", "billing"
+page.tags=In-app Billing,Google Play,inapp billing,in app billing,iab,billing
 
 @jd:body
 
diff --git a/docs/html/guide/appendix/media-formats.jd b/docs/html/guide/appendix/media-formats.jd
index 7c6c145..19f510a 100644
--- a/docs/html/guide/appendix/media-formats.jd
+++ b/docs/html/guide/appendix/media-formats.jd
@@ -1,5 +1,5 @@
 page.title=Supported Media Formats
-page.tags="video","audio","mpeg","mp4","m4a","mp3","3gp","3gpp","flac","wave","wav"
+page.tags=video,audio,mpeg,mp4,m4a,mp3,3gp,3gpp,flac,wave,wav
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/components/activities.jd b/docs/html/guide/components/activities.jd
index 1cbaa79..b4617fb 100644
--- a/docs/html/guide/components/activities.jd
+++ b/docs/html/guide/components/activities.jd
@@ -1,5 +1,5 @@
 page.title=Activities
-page.tags="activity","intent"
+page.tags=activity,intent
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/components/processes-and-threads.jd b/docs/html/guide/components/processes-and-threads.jd
index 1fed712c..c8c3764 100644
--- a/docs/html/guide/components/processes-and-threads.jd
+++ b/docs/html/guide/components/processes-and-threads.jd
@@ -1,5 +1,5 @@
 page.title=Processes and Threads
-page.tags="lifecycle","background"
+page.tags=lifecycle,background
 
 @jd:body
 
diff --git a/docs/html/guide/faq/security.jd b/docs/html/guide/faq/security.jd
index 96fc7f5..8ccf21f 100644
--- a/docs/html/guide/faq/security.jd
+++ b/docs/html/guide/faq/security.jd
@@ -47,8 +47,7 @@
 <a name="issue" id="issue"></a><h2>I think I found a security flaw. How do I
 report it?</h2>
 
-<p>You can reach the Android security team at <a
-href="mailto:security@android.com">security@android.com</a>. If you like, you
+<p>You can reach the Android security team at security@android.com. If you like, you
 can protect your message using our <a
 href="http://code.google.com/android/security_at_android_dot_com.txt">PGP
 key</a>.</p>
@@ -58,6 +57,15 @@
 users are at risk. In return, we will make sure to keep the researcher informed
 of our progress in issuing a fix. </p>
 
+<p>Vulnerabilities specific to Android OEMs should be reported to the relevant
+vendor. An incomplete list of Android vendor security contacts can be found below.
+To be added to this list, please contact security@android.com.</p>
+
+<ul>
+  <li><a href="http://www.htc.com/www/terms/product-security/">HTC</a></li>
+  <li><a href="http://www.motorolasolutions.com/US-EN/About/Security%20Vulnerability">Motorola</a></li>
+  <li><a href="http://developer.samsung.com/notice/How-to-Use-the-Forum">Samsung</a> - m.security@samsung.com</li>
+</ul>
 
 <a name="informed" id="informed"></a><h2>How can I stay informed about Android security?</h2>
 
@@ -91,8 +99,8 @@
 <p>Like any other platform, it will be possible for unethical developers
 to create malicious software, known as <a
 href="http://en.wikipedia.org/wiki/Malware">malware</a>, for Android. If you
-think somebody is trying to spread malware, please let us know at <a
-href="mailto:security@android.com">security@android.com</a>. Please include as
+think somebody is trying to spread malware, please let us know at
+security@android.com. Please include as
 much detail about the application as possible, with the location it is
 being distributed from and why you suspect it of being malicious software.</p>
 
diff --git a/docs/html/guide/topics/admin/device-admin.jd b/docs/html/guide/topics/admin/device-admin.jd
index a474498..ee6b814 100644
--- a/docs/html/guide/topics/admin/device-admin.jd
+++ b/docs/html/guide/topics/admin/device-admin.jd
@@ -1,5 +1,5 @@
 page.title=Device Administration
-page.tags="devicepolicymanager","policy","security"
+page.tags=devicepolicymanager,policy,security
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/appwidgets/host.jd b/docs/html/guide/topics/appwidgets/host.jd
index da7408f..169e388 100644
--- a/docs/html/guide/topics/appwidgets/host.jd
+++ b/docs/html/guide/topics/appwidgets/host.jd
@@ -1,5 +1,5 @@
 page.title=App Widget Host
-page.tags="AppWidgetHost","home screen","launcher"
+page.tags=AppWidgetHost,home screen,launcher
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index d8ad844..a783ad1 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -1,5 +1,5 @@
 page.title=App Widgets
-page.tags="home","AppWidgetProvider"
+page.tags=home,AppWidgetProvider
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/connectivity/bluetooth-le.jd b/docs/html/guide/topics/connectivity/bluetooth-le.jd
index 449c892..5c32e56 100644
--- a/docs/html/guide/topics/connectivity/bluetooth-le.jd
+++ b/docs/html/guide/topics/connectivity/bluetooth-le.jd
@@ -1,5 +1,5 @@
 page.title=Bluetooth Low Energy
-page.tags="wireless","bluetoothadapter","bluetoothdevice","BLE","BTLE"
+page.tags=wireless,bluetoothadapter,bluetoothdevice,BLE,BTLE
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/connectivity/bluetooth.jd b/docs/html/guide/topics/connectivity/bluetooth.jd
index b57f3e2..96008c5 100644
--- a/docs/html/guide/topics/connectivity/bluetooth.jd
+++ b/docs/html/guide/topics/connectivity/bluetooth.jd
@@ -1,5 +1,5 @@
 page.title=Bluetooth
-page.tags="wireless","bluetoothadapter","bluetoothdevice"
+page.tags=wireless,bluetoothadapter,bluetoothdevice
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/connectivity/nfc/hce.jd b/docs/html/guide/topics/connectivity/nfc/hce.jd
index d6efaa7..9ec1a8d 100644
--- a/docs/html/guide/topics/connectivity/nfc/hce.jd
+++ b/docs/html/guide/topics/connectivity/nfc/hce.jd
@@ -1,5 +1,5 @@
 page.title=Host-based Card Emulation
-page.tags="host card emulation", "hce","HostApduService","OffHostApduService","tap and pay"
+page.tags=host card emulation,hce,HostApduService,OffHostApduService,tap and pay
 
 @jd:body
 
diff --git a/docs/html/guide/topics/connectivity/sip.jd b/docs/html/guide/topics/connectivity/sip.jd
index 526eb83..5154767 100644
--- a/docs/html/guide/topics/connectivity/sip.jd
+++ b/docs/html/guide/topics/connectivity/sip.jd
@@ -1,5 +1,5 @@
 page.title=Session Initiation Protocol
-page.tags="sipmanager","sipprofile","sipaudiocall","telephony"
+page.tags=sipmanager,sipprofile,sipaudiocall,telephony
 @jd:body
 <div id="qv-wrapper">
 <div id="qv">
diff --git a/docs/html/guide/topics/connectivity/wifip2p.jd b/docs/html/guide/topics/connectivity/wifip2p.jd
index 7cadde1..d7e1269 100644
--- a/docs/html/guide/topics/connectivity/wifip2p.jd
+++ b/docs/html/guide/topics/connectivity/wifip2p.jd
@@ -1,5 +1,5 @@
 page.title=Wi-Fi Peer-to-Peer
-page.tags="wireless","WifiP2pManager","Wi-Fi Direct","WiFi Direct","P2P","Wi-Fi P2P","WiFi P2P"
+page.tags=wireless,WifiP2pManager,Wi-Fi Direct,WiFi Direct,P2P,Wi-Fi P2P,WiFi P2P
 
 @jd:body
 
diff --git a/docs/html/guide/topics/data/data-storage.jd b/docs/html/guide/topics/data/data-storage.jd
index 4b8a647..24e7f54 100644
--- a/docs/html/guide/topics/data/data-storage.jd
+++ b/docs/html/guide/topics/data/data-storage.jd
@@ -1,5 +1,5 @@
 page.title=Storage Options
-page.tags="database","sharedpreferences","sdcard"
+page.tags=database,sharedpreferences,sdcard
 @jd:body
 
 
diff --git a/docs/html/guide/topics/data/install-location.jd b/docs/html/guide/topics/data/install-location.jd
index 2ec0d5a..cc58b46 100644
--- a/docs/html/guide/topics/data/install-location.jd
+++ b/docs/html/guide/topics/data/install-location.jd
@@ -1,5 +1,5 @@
 page.title=App Install Location
-page.tags="sdcard","external"
+page.tags=sdcard,external
 @jd:body
 
 
diff --git a/docs/html/guide/topics/graphics/hardware-accel.jd b/docs/html/guide/topics/graphics/hardware-accel.jd
index 54ef20c..7c957b8 100644
--- a/docs/html/guide/topics/graphics/hardware-accel.jd
+++ b/docs/html/guide/topics/graphics/hardware-accel.jd
@@ -263,256 +263,153 @@
   <p>The following table describes the support level of various operations across API levels:</p>
 
   <style type="text/css">
-    .tblGenFixed, .tblGeneric{font-size:15px}.tblGenFixed td {padding:0 3px;letter-spacing:0;word-spacing:0;background-color:#fff;z-index:1;border-top:0px none;border-left:0px none;border-bottom:1px solid #CCC;border-right:1px solid #CCC;} .dn {display:none} .tblGenFixed td.s0 {background-color:white;border-top:1px solid #CCC;border-left:1px solid #CCC;} .tblGenFixed td.s1 {background-color:#434343;color:#ffffff;text-align:center;border-top:1px solid #CCC;} .tblGenFixed td.s2 {background-color:#d9d9d9;color:#000000;text-align:center;} .tblGenFixed td.s3 {background-color:white;color:#000000;text-align:center;} .tblGenFixed td.s5 {background-color:#434343;color:#ffffff;text-align:left;border-left:1px solid #CCC;} .tblGenFixed td.s10 {background-color:white;font-family:courier new,monospace;color:#000000;text-align:right;border-left:1px solid #CCC;} .tblGenFixed td.g_pos {background-color:#d9d9d9;color:#6aa84f;text-align:center;} .tblGenFixed td.g_neg {background-color:#d9d9d9;color:#980000;text-align:center;} .tblGenFixed td.w_pos {background-color:white;color:#6aa84f;text-align:center;} .tblGenFixed td.w_neg {background-color:white;color:#980000;text-align:center;}
+    .tblGenFixed, .tblGeneric{font-size:15px}.tblGenFixed td {padding:0 3px;letter-spacing:0;word-spacing:0;background-color:#fff;z-index:1;border-top:0px none;border-left:0px none;border-bottom:1px solid #CCC;border-right:1px solid #CCC;} .dn {display:none} .tblGenFixed td.s0 {background-color:white;border-top:1px solid #CCC;border-left:1px solid #CCC;} .tblGenFixed td.s1 {background-color:#434343;color:#ffffff;text-align:center;border-top:1px solid #CCC;} .tblGenFixed td.s3 {background-color:white;color:#000000;text-align:center;} .tblGenFixed td.s5 {background-color:#434343;color:#ffffff;text-align:left;border-left:1px solid #CCC;} .tblGenFixed td.label_pos {background-color:white;font-family:courier new,monospace;color:#000000;text-align:right;border-left:1px solid #CCC;} .tblGenFixed td.label_neg {background-color:#ececec;font-family:courier new,monospace;color:#000000;text-align:right;border-left:1px solid #CCC;} .tblGenFixed td.value_pos {background-color:white;color:#000000;text-align:center;} .tblGenFixed td.value_neg {background-color:#ececec;color:#980000;text-align:center;}
   </style>
   <table border="0" cellpadding="0" cellspacing="0" class="tblGenFixed" id="tblMain">
     <tbody>
     <tr class="rShim">
         <td class="rShim" style="width:380px;"></td>
-        <td class="rShim" style="width:120px;"></td>
-        <td class="rShim" style="width:120px;"></td>
-        <td class="rShim" style="width:120px;"></td>
-        <td class="rShim" style="width:120px;"></td>
+        <td class="rShim" style="width:240px;"></td>
     </tr>
     <tr>
-        <td rowspan="2" class="s0"></td>
-        <td colspan="4" class="s1">API level</td>
-    </tr>
-    <tr>
-        <td style="display:none;"></td>
-        <td class="s2">&lt; 16</td>
-        <td class="s3">16</td>
-        <td class="s2">17</td>
-        <td class="s3">18</td>
+        <td class="s0"></td>
+        <td class="s1">First supported API level</td>
     </tr>
     <tr>
         <td colspan="5" class="s5">Canvas</td>
     </tr>
     <tr>
-        <td class="s10">drawBitmapMesh() (colors array)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">drawBitmapMesh() (colors array)</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">drawPicture()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">drawPicture()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">drawPosText()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
-        <td class="g_pos">&#10003;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">drawPosText()</td>
+        <td class="value_pos">16</td>
     </tr>
     <tr>
-        <td class="s10">drawTextOnPath()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
-        <td class="g_pos">&#10003;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">drawTextOnPath()</td>
+        <td class="value_pos">16</td>
     </tr>
     <tr>
-        <td class="s10">drawVertices()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">drawVertices()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">setDrawFilter()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
-        <td class="g_pos">&#10003;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">setDrawFilter()</td>
+        <td class="value_pos">16</td>
     </tr>
     <tr>
-        <td class="s10">clipPath()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">clipPath()</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">clipRegion()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">clipRegion()</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">clipRect(Region.Op.XOR)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">clipRect(Region.Op.XOR)</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">clipRect(Region.Op.Difference)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">clipRect(Region.Op.Difference)</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">clipRect(Region.Op.ReverseDifference)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">clipRect(Region.Op.ReverseDifference)</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">clipRect() with rotation/perspective</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">clipRect() with rotation/perspective</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
         <td colspan="5" class="s5">Paint</td>
     </tr>
     <tr>
-        <td class="s10">setAntiAlias() (for text)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">setAntiAlias() (for text)</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">setAntiAlias() (for lines)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
-        <td class="g_pos">&#10003;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">setAntiAlias() (for lines)</td>
+        <td class="value_pos">16</td>
     </tr>
     <tr>
-        <td class="s10">setFilterBitmap()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_pos">&#10003;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">setFilterBitmap()</td>
+        <td class="value_pos">17</td>
     </tr>
     <tr>
-        <td class="s10">setLinearText()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">setLinearText()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">setMaskFilter()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">setMaskFilter()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">setPathEffect() (for lines)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">setPathEffect() (for lines)</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">setRasterizer()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">setRasterizer()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">setShadowLayer() (other than text)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">setShadowLayer() (other than text)</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">setStrokeCap() (for lines)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">setStrokeCap() (for lines)</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td class="s10">setStrokeCap() (for points)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_pos">setStrokeCap() (for points)</td>
+        <td class="value_pos">19</td>
     </tr>
     <tr>
-        <td class="s10">setSubpixelText()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">setSubpixelText()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
         <td colspan="5" class="s5">Xfermode</td>
     </tr>
     <tr>
-        <td class="s10">AvoidXfermode</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">AvoidXfermode</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">PixelXorXfermode</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">PixelXorXfermode</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">PorterDuff.Mode.DARKEN (framebuffer)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">PorterDuff.Mode.DARKEN (framebuffer)</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">PorterDuff.Mode.LIGHTEN (framebuffer)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">PorterDuff.Mode.LIGHTEN (framebuffer)</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">PorterDuff.Mode.OVERLAY (framebuffer)</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">PorterDuff.Mode.OVERLAY (framebuffer)</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
         <td colspan="5" class="s5">Shader</td>
     </tr>
     <tr>
-        <td class="s10">ComposeShader inside ComposeShader</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">ComposeShader inside ComposeShader</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">Same type shaders inside ComposeShader</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
+        <td class="label_neg">Same type shaders inside ComposeShader</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">Local matrix on ComposeShader</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
+        <td class="label_pos">Local matrix on ComposeShader</td>
+        <td class="value_pos">18</td>
     </tr>
     </tbody>
   </table>
@@ -530,64 +427,39 @@
     <tbody>
     <tr class="rShim">
         <td class="rShim" style="width:380px;"></td>
-        <td class="rShim" style="width:120px;"></td>
-        <td class="rShim" style="width:120px;"></td>
-        <td class="rShim" style="width:120px;"></td>
+        <td class="rShim" style="width:240px;"></td>
     </tr>
     <tr>
-        <td rowspan="2" class="s0"></td>
-        <td colspan="4" class="s1">API level</td>
+        <td class="s5">Drawing operation to be scaled</td>
+        <td class="s1">First supported API level</td>
     </tr>
     <tr>
-        <td style="display:none;"></td>
-        <td class="s2">&lt; 17</td>
-        <td class="s3">17</td>
-        <td class="s2">18</td>
+        <td class="label_pos">drawText()</td>
+        <td class="value_pos">18</td>
     </tr>
     <tr>
-        <td colspan="5" class="s5">Support for large scale factors</td>
+        <td class="label_neg">drawPosText()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">drawText()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_pos">&#10003;</td>
+        <td class="label_neg">drawTextOnPath()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">drawPosText()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
+        <td class="label_pos">Simple Shapes*</td>
+        <td class="value_pos">17</td>
     </tr>
     <tr>
-        <td class="s10">drawTextOnPath()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
+        <td class="label_neg">Complex Shapes*</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">Simple Shapes*</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_pos">&#10003;</td>
-        <td class="g_pos">&#10003;</td>
+        <td class="label_neg">drawPath()</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     <tr>
-        <td class="s10">Complex Shapes*</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-    </tr>
-    <tr>
-        <td class="s10">drawPath()</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
-    </tr>
-    <tr>
-        <td class="s10">Shadow layer</td>
-        <td class="g_neg">&#10007;</td>
-        <td class="w_neg">&#10007;</td>
-        <td class="g_neg">&#10007;</td>
+        <td class="label_neg">Shadow layer</td>
+        <td class="value_neg">&#10007;</td>
     </tr>
     </tbody>
   </table>
diff --git a/docs/html/guide/topics/graphics/opengl.jd b/docs/html/guide/topics/graphics/opengl.jd
index f46113d..d194082 100644
--- a/docs/html/guide/topics/graphics/opengl.jd
+++ b/docs/html/guide/topics/graphics/opengl.jd
@@ -1,5 +1,5 @@
 page.title=OpenGL ES
-page.tags="games"
+page.tags=games
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/graphics/prop-animation.jd b/docs/html/guide/topics/graphics/prop-animation.jd
index 22bf7696..e455496 100644
--- a/docs/html/guide/topics/graphics/prop-animation.jd
+++ b/docs/html/guide/topics/graphics/prop-animation.jd
@@ -1,5 +1,5 @@
 page.title=Property Animation
-page.tags="valueanimator","objectanimator","layouttransition","ViewPropertyAnimator"
+page.tags=valueanimator,objectanimator,layouttransition,ViewPropertyAnimator
 @jd:body
 
   <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index d421591..4057736c 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -1,5 +1,5 @@
 page.title=&lt;uses-feature&gt;
-page.tags="filtering","features","google play filters","permissions"
+page.tags=filtering,features,google play filters,permissions
 @jd:body
 
 <div id="qv-wrapper">
@@ -1099,4 +1099,4 @@
   <td><code>android.hardware.wifi</code></td>
 <!--  <td></td> -->
 </tr>
-</table>
\ No newline at end of file
+</table>
diff --git a/docs/html/guide/topics/manifest/uses-sdk-element.jd b/docs/html/guide/topics/manifest/uses-sdk-element.jd
index b372592..79a37f0 100644
--- a/docs/html/guide/topics/manifest/uses-sdk-element.jd
+++ b/docs/html/guide/topics/manifest/uses-sdk-element.jd
@@ -1,5 +1,5 @@
 page.title=&lt;uses-sdk&gt;
-page.tags="api levels","sdk version","minsdkversion","targetsdkversion","maxsdkversion"
+page.tags=api levels,sdk version,minsdkversion,targetsdkversion,maxsdkversion
 @jd:body
 
 
diff --git a/docs/html/guide/topics/media/audio-capture.jd b/docs/html/guide/topics/media/audio-capture.jd
index 44c618f..8e60c8f 100644
--- a/docs/html/guide/topics/media/audio-capture.jd
+++ b/docs/html/guide/topics/media/audio-capture.jd
@@ -1,5 +1,5 @@
 page.title=Audio Capture
-page.tags="mediarecorder"
+page.tags=mediarecorder
 @jd:body
 
     <div id="qv-wrapper">
@@ -249,4 +249,4 @@
         }
     }
 }
-</pre>
\ No newline at end of file
+</pre>
diff --git a/docs/html/guide/topics/media/camera.jd b/docs/html/guide/topics/media/camera.jd
index e48109a..56ef624 100644
--- a/docs/html/guide/topics/media/camera.jd
+++ b/docs/html/guide/topics/media/camera.jd
@@ -1,5 +1,5 @@
 page.title=Camera
-page.tags="photo","video","picture","mediarecorder"
+page.tags=photo,video,picture,mediarecorder
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/media/mediaplayer.jd b/docs/html/guide/topics/media/mediaplayer.jd
index dc789d2..6d03af6 100644
--- a/docs/html/guide/topics/media/mediaplayer.jd
+++ b/docs/html/guide/topics/media/mediaplayer.jd
@@ -1,5 +1,5 @@
 page.title=Media Playback
-page.tags="mediaplayer","soundpool","audiomanager"
+page.tags=mediaplayer,soundpool,audiomanager
 @jd:body
 
     <div id="qv-wrapper">
@@ -743,4 +743,4 @@
 mMediaPlayer.setDataSource(getApplicationContext(), contentUri);
 
 // ...prepare and start...
-</pre>
\ No newline at end of file
+</pre>
diff --git a/docs/html/guide/topics/resources/localization.jd b/docs/html/guide/topics/resources/localization.jd
index 7288aeb..3bb9ab5 100644
--- a/docs/html/guide/topics/resources/localization.jd
+++ b/docs/html/guide/topics/resources/localization.jd
@@ -1,487 +1,485 @@
-page.title=Localizing with Resources
-parent.title=Application Resources
-page.tags="localizing","localization","resources", "formats", "l10n"
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-    <div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-  <li>Use resource sets to create a localized app.</li>
-  <li>Android loads the correct resource set for the user's language and locale.</li>
-  <li>If localized resources are not available, Android loads your default resources.</li>
-</ul>
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#resource-switching">Overview: Resource-Switching in Android</a></li>
-<li><a href="#using-framework">Using Resources for Localization</a></li>
-<li><a href="#strategies">Localization Tips</a></li>
-<li><a href="#testing">Testing Localized Applications</a></li>
-</ol>
-
-<h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}distribute/googleplay/publish/localizing.html">Localization Checklist</a></li>
-    <li><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></li>
-    <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a></li>
-    <li><a href="{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">Activity Lifecycle</a></li>
-</ol>
-</div>
-</div>
-
-<p>Android will run on many  devices in many  regions. To reach the most users,
-your application should handle text, audio files, numbers, currency, and
-graphics in ways appropriate to the locales where your application will be used.
-</p>
-
-<p>This document describes best practices for localizing Android
-applications. The principles apply whether you are developing your application  
-using ADT with Eclipse, Ant-based tools, or any other IDE. </p>
-
-<p>You should already have a working knowledge of Java and be  familiar with
-Android resource loading, the declaration of user interface elements in XML,
-development considerations such as Activity lifecycle, and general principles of
-internationalization and localization. </p>
-
-<p>It is good practice to use the Android resource framework to separate the
-localized aspects of your application as much as possible from the core Java
-functionality:</p>
-
-<ul>
-  <li>You can put most or all of the <em>contents</em> of your application's
-user interface into resource files, as described in this document and in <a
-href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a>.</li>
-  <li>The <em>behavior</em> of the user interface, on the other hand, is driven
-by your Java code. 
-    For example, if users input data that needs to be formatted or sorted
-differently depending on locale, then you would use Java to handle the data
-programmatically. This document does not cover how to  localize your Java code.
-</li>
-</ul>
-
-<p>For a short guide to localizing strings in your app, see the training lesson, <a
-href="{@docRoot}training/basics/supporting-devices/languages.html">Supporting Different Languages</a>. </p>
-
-
-<h2 id="resource-switching">Overview: Resource-Switching in Android</h2>
-
-<p>Resources are text strings, layouts, sounds, graphics, and any other static
-data that your  Android application  needs. An application can include multiple
-sets of resources, each customized for a different device configuration. When a
-user runs the application,  Android    automatically selects and loads the 
-resources that best match the device.</p>
-
-<p>(This document focuses on localization and locale. For a complete description
-of resource-switching and all the types of configurations that you can
-specify &#8212; screen orientation, touchscreen type, and so on &#8212; see <a
-href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing
-Alternative Resources</a>.)</p>
-
-<table border="0" cellspacing="0" cellpadding="0">
-  <tr border="0">
-    <td width="180" style="border: 0pt none ;"><p class="special-note">
-    <strong>When you write your application:</strong>
-    <br><br>
-    You create a set of default resources, plus alternatives to be used in
-    different locales.</p></td>
-    <td style="border: 0pt none; padding:0">
-    <p style="border:0; padding:0"><img src="../../../images/resources/right-arrow.png" alt="right-arrow" 
-    width="51" height="17"></p></td>
-    <td width="180" style="border: 0pt none ;"><p class="special-note">
-    <strong>When a user runs your application:</strong>
-    <br><br>The Android system selects which resources to load, based on the
-    device's locale.</p></td>
-  </tr>
-</table>
-
-<p>When you write your application, you create default and alternative resources
-for your application to use. To create  resources, you place files within
-specially named subdirectories of the project's <code>res/</code> directory.
-</p>
-
-
-
-<h3 id="defaults-r-important">Why Default Resources Are Important</h3>
-
-<p>Whenever the application runs in a locale for which you have not provided
-locale-specific text,  Android will load the default strings from
-<code>res/values/strings.xml</code>. If this default  file is absent, or if it 
-is missing a string that your application needs, then your application will not run 
-and will show an error. 
-The example below illustrates what can happen when the default text file is incomplete. </p>
-
-<p><em>Example:</em>
-<p>An application's Java code refers to just two strings, <code>text_a</code> and 
-	<code>text_b</code>. This application includes a localized resource file 
-	(<code>res/values-en/strings.xml</code>) that defines <code>text_a</code> and 
-	<code>text_b</code> in English. This application also includes a default 
-	resource file (<code>res/values/strings.xml</code>) that includes a
-definition for <code>text_a</code>, but not for <code>text_b</code>:
-<ul>
-  <li>This application might compile without a problem. An IDE such as Eclipse 
-  	will not highlight any errors if a resource is missing.</li>
-  <li>When this application is launched on a device with locale set to English, 
-  	the application  might run without a problem, because 
-  	<code>res/values-en/strings.xml</code> contains both of the needed text 
-  	strings.</li>
-  <li>However, <strong>the user  will see an error message and a Force Close 
-  	button</strong> when this application is launched on a device set to a 
-  	language other than English. The application will not load.</li>
-</ul>
-
-
-<p>To prevent this situation, make sure that a <code>res/values/strings.xml</code> 
-	file exists and that it defines every needed string. The situation applies to 
-	all types of resources, not just strings: You 
-	need to create a  set of default resource files containing all 
-	the resources that your application calls upon &#8212; layouts, drawables, 
-	animations, etc. For information about testing, see <a href="#test-for-default">
-	Testing for Default Resources</a>.</p>
-
-<h2 id="using-framework">Using Resources for Localization</h2>
-
-<h3 id="creating-defaults">How to Create Default Resources</h3>
-
-<p>Put the application's default text in
-a file with the following location and name:</p>
-<p><code>&nbsp;&nbsp;&nbsp;&nbsp;res/values/strings.xml</code> (required directory)</p>
-
-<p>The text strings in <code>res/values/strings.xml</code> should  use the
-default language, which is the language that you expect most of your application's users to
-speak.  </p>
-
-<p>The default resource set must also include any default drawables and layouts, 
-	and can include other types of resources such as animations. 
-<br>
-  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/drawable/</code>(required directory holding at least
-  one graphic file, for the application's icon on Google Play)<br>
-  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/layout/</code> (required directory holding an XML
-  file that defines the default layout)<br>
-  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/anim/</code> (required if you have any 
-  <code>res/anim-<em>&lt;qualifiers&gt;</em></code> folders)<br>
-  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/xml/</code> (required if you have any 
-  <code>res/xml-<em>&lt;qualifiers&gt;</em></code> folders)<br>
-  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/raw/</code> (required if you have any 
-  <code>res/raw-<em>&lt;qualifiers&gt;</em></code> folders)
-</p>
-
-<p class="note"><strong>Tip:</strong> In your code, examine each reference to 
-	an Android resource. Make sure that a default resource is defined for each
-	one. Also make sure that the default string file is complete: A <em>
-	localized</em> string file can contain a subset of the strings, but the 
-	<em>default</em> string file must contain them all. 
-</p>
-
-<h3 id="creating-alternatives">How to Create Alternative Resources</h3>
-
-<p>A large part of localizing an application is providing alternative text for
-different languages. In some cases you will also provide alternative graphics,
-sounds, layouts, and other locale-specific resources. </p>
-
-<p>An application can specify many <code>res/<em>&lt;qualifiers&gt;</em>/</code>
-directories, each with different qualifiers. To create an alternative resource for
-a different locale, you use a qualifier that specifies a language or a 
-language-region combination. (The name of a resource directory must conform 
-to the naming scheme described in 
-<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing
-Alternative Resources</a>,
-or else it will not compile.)</p>
-
-<p><em>Example:</em></p>
-
-<p>Suppose that your application's default language is English. Suppose also
-that you want to localize all the text in your application to French, and most
-of the text in your application (everything except the application's title) to
-Japanese. In this case, you could create three alternative <code>strings.xml</code>
-files, each stored in a locale-specific resource directory:</p>
-
-<ol>
-  <li><code>res/values/strings.xml</code><br>
-    Contains  English text for all  the strings that the application uses,
-including text for a string named <code>title</code>.</li>
-  <li><code>res/values-fr/strings.xml</code><br>
-    Contain French text for all  the strings, including <code>title</code>.</li>
-  <li><code>res/values-ja/strings.xml</code><br>
-    Contain Japanese text for all  the strings <em>except</em>
-<code>title</code>.<br>
-  <code></code></li>
-</ol>
-
-<p>If your Java code refers to <code>R.string.title</code>,  here is what will
-happen at runtime:</p>
-
-<ul>
-  <li>If the device is set to any language other than French, Android will load
-<code>title</code> from the <code>res/values/strings.xml</code> file.</li>
-  <li>If the device is set to French, Android will load <code>title</code> from
-the <code>res/values-fr/strings.xml</code> file.</li>
-</ul>
-
-<p>Notice that if the device is set to Japanese, Android will look for
-<code>title</code> in the <code>res/values-ja/strings.xml</code> file. But
-because no such string is included in that file, Android will fall back to the
-default, and will load  <code>title</code> in English from the
-<code>res/values/strings.xml</code> file.  </p>
-
-<h3 id="resource-precedence">Which Resources Take Precedence?</h3>
-
-<p> If multiple resource files match a device's configuration, Android follows a
-set of rules in deciding which file to use. Among the qualifiers that can be
-specified in a resource directory name, <strong>locale almost always takes
-precedence</strong>. </p>
-<p><em>Example:</em></p>
-
-<p>Assume that an application  includes a default set of graphics and two other
-sets of graphics, each optimized for a different device setup:</p>
-
-<ul>
-  <li><code>res/drawable/</code><br>
-    Contains
-  default graphics.</li>
-  <li><code>res/drawable-small-land-stylus/</code><br>
-  Contains  graphics optimized for use with a device that expects input from a 
-  stylus and has a QVGA low-density screen in landscape orientation.</li>
-  <li><code>res/drawable-ja/</code> <br>
-  Contains  graphics optimized for use with Japanese.</li>
-</ul>
-
-<p>If the application runs on a device that is configured to use Japanese,
-Android will load graphics from  <code>res/drawable-ja/</code>, even if the
-device happens to be one that expects input from a stylus and has a QVGA 
-low-density screen in landscape orientation.</p>
-
-<p class="note"><strong>Exception:</strong> The only qualifiers that take
-precedence over locale in the selection process are MCC and MNC (mobile country
-code and mobile network code). </p>
-
-<p><em>Example:</em></p>
-
-<p>Assume that you have the following situation:</p>
-
-<ul>
-  <li>The application code calls for <code>R.string.text_a</code></li>
-  <li>Two relevant resource files are available:
-    <ul>
-      <li><code>res/values-mcc404/strings.xml</code>, which includes
-<code>text_a</code> in the application's default language, in this case
-English.</li>
-      <li><code>res/values-hi/strings.xml</code>, which includes
-<code>text_a</code> in Hindi.</li>
-    </ul>
-  </li>
-  <li>The application is running on a device that has the following
-configuration:
-    <ul>
-      <li>The SIM card is connected to a mobile network in India (MCC 404).</li>
-      <li>The language is set to Hindi (<code>hi</code>).</li>
-    </ul>
-  </li>
-</ul>
-
-<p>Android will load <code>text_a</code> from
-<code>res/values-mcc404/strings.xml</code> (in English), even if the device is
-configured for Hindi. That is because in the resource-selection process, Android
-will prefer an MCC match over a language match. </p>
-
-<p>The selection process is not always as straightforward as these examples
-suggest. Please read  <a
-href="{@docRoot}guide/topics/resources/providing-resources.html#BestMatch">How Android Finds
-the Best-matching Resource</a> for a more nuanced description of the
-process. All the qualifiers are described and listed in order of
-precedence in <a
-href="{@docRoot}guide/topics/resources/providing-resources.html#table2">Table 2 of Providing
-Alternative Resources</a>.</p>
-
-<h3 id="referring-to-resources">Referring to Resources in Java</h3>
-
-<p>In your application's Java code, you refer to  resources using the syntax
-<code>R.<em>resource_type</em>.<em>resource_name</em></code> or
-<code>android.R.<em>resource_type</em>.<em>resource_name</em></code><em>.</em>
-For more about this, see <a
-href="{@docRoot}guide/topics/resources/accessing-resources.html">Accessing Resources</a>.</p>
-
-<h2 id="checklist">Localization Checklist</h2>
-
-<p>For a complete overview of the process of localizing and distributing an Android application,
-see the <a href="{@docRoot}distribute/googleplay/publish/localizing.html">Localization
-Checklist</a> document.</p>
-
-<h2 id="strategies">Localization Tips</h2>
-
-<h4 id="failing2">Design your application  to work in any locale</h4>
-
-<p>You cannot assume anything about the device on which a user will
-run your application. The device might have hardware that you were not
-anticipating, or it might be set to a locale that you did not plan for or that 
-you cannot test. Design your application so that it will function normally or fail gracefully no 
-matter what device it runs on.</p>
-
-<p class="note"><strong>Important:</strong> Make sure that your application
-includes a full set of default resources.</p> <p>Make sure to include
-<code>res/drawable/</code> and a <code>res/values/</code> folders (without any
-additional modifiers in the folder names) that contain all the images and text
-that your application will need. </p>
-
-<p>If an application is missing even one default resource, it will not run on a 
-	device that is set to an unsupported locale. For example, the 
-	<code>res/values/strings.xml</code> default file might lack one string that 
-	the application needs: When the application runs in an unsupported locale and 
-	attempts to load <code>res/values/strings.xml</code>, the user will see an 
-	error message and a Force Close button. An IDE such as Eclipse will not 
-	highlight this kind of error, and you will not see the problem when you 
-	test the application on a device or emulator that is set to a supported locale.</p>
-
-<p>For more information, see <a href="#test-for-default">Testing for Default Resources</a>.</p>
-
-<h4>Design a flexible layout</h4>
-
-<p> If you need to rearrange your layout to fit a certain language (for example
-German with its long words), you can create an alternative layout for that
-language (for example <code>res/layout-de/main.xml</code>). However, doing this
-can make your application harder to maintain.  It is better to create a single
-layout that is more flexible.</p>
-
-<p>Another typical situation is a language that requires something different in
-its layout. For example, you might have a contact form that should include  two
-name fields when the application runs in Japanese, but three name fields when
-the application  runs in some other language. You could handle this in either of
-two ways:</p>
-
-<ul>
-  <li>Create  one  layout with a field that you can programmatically enable or
-disable, based on the language, or</li>
-  <li>Have the main layout include another layout that  includes the changeable
-field. The second layout can have different configurations for different
-languages.</li>
-</ul>
-
-<h4>Avoid creating more resource files and text strings than you need</h4>
-
-<p>You probably do not need to create a locale-specific
-alternative for every resource in your application. For example, the layout
-defined in the <code>res/layout/main.xml</code> file might work in any locale,
-in which case there would be no need to create any alternative layout files.
-</p>
-
-<p>Also, you might not need to create alternative text for every
-string. For example, assume the following:</p>
-
-<ul>
-  <li>Your application's default language is American
-English. Every string that the application uses is defined, using American
-English spellings, in <code>res/values/strings.xml</code>. </li>
-
-  <li>For  a few important phrases, you want to provide
-British English spelling. You want these alternative strings to be used when your
-application runs on a device in the United Kingdom. </li>
-</ul>
-
-<p>To do this, you could create a small file called
-<code>res/values-en-rGB/strings.xml</code> that includes only the strings that
-should be different when the application  runs in the U.K. For all the rest of
-the strings, the application will fall back to the defaults and use what is
-defined in <code>res/values/strings.xml</code>.</p>
-
-<h4>Use the Android Context object for manual locale lookup</h4>
-
-<p>You can look up the locale using the {@link android.content.Context} object
-that Android makes available:</p>
-
-<pre>String locale = context.getResources().getConfiguration().locale.getDisplayName();</pre>
-
-<h2 id="testing">Testing Localized Applications</h2>
-
-<h3 id="device">Testing on a Device</h3>
-<p>Keep in mind that the device you are testing may be significantly different from 
-	the devices available to consumers in other geographies. The locales available 
-	on your device may differ from those available on other devices. Also, the 
-	resolution and density of the device screen may differ, which could affect 
-	the display of strings and drawables in your UI.</p>
-
-<p>To change the locale on a device, use  the Settings application  (Home &gt;
-Menu &gt; Settings &gt; Locale &amp; text &gt; Select locale). </p>
-
-<h3 id="emulator">Testing on an Emulator</h3>
-
-<p>For details about using the emulator, see See <a
-href="{@docRoot}tools/help/emulator.html">Android Emulator</a>.</p>
-<h4>Creating and using a custom locale</h4>
-
-<p>A &quot;custom&quot; locale is a language/region combination that the Android
-system image does not explicitly support. (For a list of supported locales in
-Android platforms see the Version Notes in the <a
-href="{@docRoot}sdk/index.html">SDK</a> tab). You can test
-how your application will run in a custom locale by creating a custom locale in
-the emulator. There are two ways to do this:</p>
-
-<ul>
-  <li>Use the Custom Locale application, which is accessible from the
-Application tab. (After you create a custom locale, switch to it by 
-pressing and holding the locale name.)</li>
-  <li>Change to a custom locale from the adb shell, as described below.</li>
-</ul>
-
-<p>When you set the emulator to a locale that is not available in the Android
-system image, the system itself will display in its default language. Your
-application, however, should localize properly.</p>
-
-<h4>Changing the emulator locale from the adb shell</h4>
-
-<p>To change the locale in the emulator by using the adb shell. </p>
-
-<ol>
-  <li>Pick the locale you want to test and determine its language and region codes, for
-example <code>fr</code> for French and <code>CA</code> for Canada.<br>
-  </li>
-  <li>Launch an emulator.</li>
-  <li>From a command-line shell on the host computer, run the following
-command:<br>
-    <code>adb shell</code><br>
-  or if you have a device attached, specify that you want the emulator by adding
-the <code>-e</code> option:<br>
-  <code>adb -e shell</code></li>
-  <li>At  the  adb shell prompt (<code>#</code>), run this command: <br>
-    <code>setprop persist.sys.language  [<em>language code</em>];setprop
-persist.sys.country [<em>country  code</em>];stop;sleep 5;start <br>
-    </code>Replace bracketed sections with the  appropriate codes from Step
-1.</li>
-</ol>
-
-<p>For instance, to test in Canadian French:</p>
-
-<p><code>setprop persist.sys.language  fr;setprop persist.sys.country
-CA;stop;sleep 5;start </code></p>
-
-<p>This will cause the emulator  to restart. (It will look like a full reboot,
-but it is not.) Once the Home screen appears again, re-launch your application (for
-example, click the Run icon in Eclipse), and the application will launch with
-the new locale. </p>
-
-<h3 id="test-for-default">Testing for Default Resources</h3>
-<p>Here's how to test whether an application includes every string resource that it needs:  </p>
-<ol><li>Set the emulator or device to a language that your application does not 
-	support. For example, if the application has French strings in 
-	<code>res/values-fr/</code> but does not have any Spanish strings in 
-	<code>res/values-es/</code>, then set the emulator's locale to Spanish. 
-	(You can use the Custom Locale application to set the emulator to an 
-	unsupported locale.)</li>
-	<li>Run the application.</li>  
-<li>If the application shows an error message and a Force Close button, it might 
-	be looking for a string that is not available. Make sure that your 
-	<code>res/values/strings.xml</code> file includes a definition for 
-	every string that the application uses.</li>
-</ol> 
-</p> 
-
-<p>If the test is successful, repeat it for other types of 
-	configurations. For example, if the application has a layout file called 
-	<code>res/layout-land/main.xml</code> but does not contain a file called 
-	<code>res/layout-port/main.xml</code>, then set the emulator or device to 
-	portrait orientation and see if the application will run. 
-
-
-
+page.title=Localizing with Resources
+parent.title=Application Resources
+page.tags=localizing,localization,resources,formats,l10n
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+    <div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+  <li>Use resource sets to create a localized app.</li>
+  <li>Android loads the correct resource set for the user's language and locale.</li>
+  <li>If localized resources are not available, Android loads your default resources.</li>
+</ul>
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#resource-switching">Overview: Resource-Switching in Android</a></li>
+<li><a href="#using-framework">Using Resources for Localization</a></li>
+<li><a href="#strategies">Localization Tips</a></li>
+<li><a href="#testing">Testing Localized Applications</a></li>
+</ol>
+
+<h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/googleplay/publish/localizing.html">Localization Checklist</a></li>
+    <li><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></li>
+    <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a></li>
+    <li><a href="{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">Activity Lifecycle</a></li>
+</ol>
+</div>
+</div>
+
+<p>Android will run on many  devices in many  regions. To reach the most users,
+your application should handle text, audio files, numbers, currency, and
+graphics in ways appropriate to the locales where your application will be used.
+</p>
+
+<p>This document describes best practices for localizing Android
+applications. The principles apply whether you are developing your application
+using ADT with Eclipse, Ant-based tools, or any other IDE. </p>
+
+<p>You should already have a working knowledge of Java and be  familiar with
+Android resource loading, the declaration of user interface elements in XML,
+development considerations such as Activity lifecycle, and general principles of
+internationalization and localization. </p>
+
+<p>It is good practice to use the Android resource framework to separate the
+localized aspects of your application as much as possible from the core Java
+functionality:</p>
+
+<ul>
+  <li>You can put most or all of the <em>contents</em> of your application's
+user interface into resource files, as described in this document and in <a
+href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a>.</li>
+  <li>The <em>behavior</em> of the user interface, on the other hand, is driven
+by your Java code.
+    For example, if users input data that needs to be formatted or sorted
+differently depending on locale, then you would use Java to handle the data
+programmatically. This document does not cover how to  localize your Java code.
+</li>
+</ul>
+
+<p>For a short guide to localizing strings in your app, see the training lesson, <a
+href="{@docRoot}training/basics/supporting-devices/languages.html">Supporting Different Languages</a>. </p>
+
+
+<h2 id="resource-switching">Overview: Resource-Switching in Android</h2>
+
+<p>Resources are text strings, layouts, sounds, graphics, and any other static
+data that your  Android application  needs. An application can include multiple
+sets of resources, each customized for a different device configuration. When a
+user runs the application,  Android    automatically selects and loads the
+resources that best match the device.</p>
+
+<p>(This document focuses on localization and locale. For a complete description
+of resource-switching and all the types of configurations that you can
+specify &#8212; screen orientation, touchscreen type, and so on &#8212; see <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing
+Alternative Resources</a>.)</p>
+
+<table border="0" cellspacing="0" cellpadding="0">
+  <tr border="0">
+    <td width="180" style="border: 0pt none ;"><p class="special-note">
+    <strong>When you write your application:</strong>
+    <br><br>
+    You create a set of default resources, plus alternatives to be used in
+    different locales.</p></td>
+    <td style="border: 0pt none; padding:0">
+    <p style="border:0; padding:0"><img src="../../../images/resources/right-arrow.png" alt="right-arrow"
+    width="51" height="17"></p></td>
+    <td width="180" style="border: 0pt none ;"><p class="special-note">
+    <strong>When a user runs your application:</strong>
+    <br><br>The Android system selects which resources to load, based on the
+    device's locale.</p></td>
+  </tr>
+</table>
+
+<p>When you write your application, you create default and alternative resources
+for your application to use. To create  resources, you place files within
+specially named subdirectories of the project's <code>res/</code> directory.
+</p>
+
+
+
+<h3 id="defaults-r-important">Why Default Resources Are Important</h3>
+
+<p>Whenever the application runs in a locale for which you have not provided
+locale-specific text,  Android will load the default strings from
+<code>res/values/strings.xml</code>. If this default  file is absent, or if it
+is missing a string that your application needs, then your application will not run
+and will show an error.
+The example below illustrates what can happen when the default text file is incomplete. </p>
+
+<p><em>Example:</em>
+<p>An application's Java code refers to just two strings, <code>text_a</code> and
+  <code>text_b</code>. This application includes a localized resource file
+  (<code>res/values-en/strings.xml</code>) that defines <code>text_a</code> and
+  <code>text_b</code> in English. This application also includes a default
+  resource file (<code>res/values/strings.xml</code>) that includes a
+definition for <code>text_a</code>, but not for <code>text_b</code>:
+<ul>
+  <li>This application might compile without a problem. An IDE such as Eclipse
+    will not highlight any errors if a resource is missing.</li>
+  <li>When this application is launched on a device with locale set to English,
+    the application  might run without a problem, because
+    <code>res/values-en/strings.xml</code> contains both of the needed text
+    strings.</li>
+  <li>However, <strong>the user  will see an error message and a Force Close
+    button</strong> when this application is launched on a device set to a
+    language other than English. The application will not load.</li>
+</ul>
+
+
+<p>To prevent this situation, make sure that a <code>res/values/strings.xml</code>
+  file exists and that it defines every needed string. The situation applies to
+  all types of resources, not just strings: You
+  need to create a  set of default resource files containing all
+  the resources that your application calls upon &#8212; layouts, drawables,
+  animations, etc. For information about testing, see <a href="#test-for-default">
+  Testing for Default Resources</a>.</p>
+
+<h2 id="using-framework">Using Resources for Localization</h2>
+
+<h3 id="creating-defaults">How to Create Default Resources</h3>
+
+<p>Put the application's default text in
+a file with the following location and name:</p>
+<p><code>&nbsp;&nbsp;&nbsp;&nbsp;res/values/strings.xml</code> (required directory)</p>
+
+<p>The text strings in <code>res/values/strings.xml</code> should  use the
+default language, which is the language that you expect most of your application's users to
+speak.  </p>
+
+<p>The default resource set must also include any default drawables and layouts,
+  and can include other types of resources such as animations.
+<br>
+  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/drawable/</code>(required directory holding at least
+  one graphic file, for the application's icon on Google Play)<br>
+  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/layout/</code> (required directory holding an XML
+  file that defines the default layout)<br>
+  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/anim/</code> (required if you have any
+  <code>res/anim-<em>&lt;qualifiers&gt;</em></code> folders)<br>
+  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/xml/</code> (required if you have any
+  <code>res/xml-<em>&lt;qualifiers&gt;</em></code> folders)<br>
+  <code>&nbsp;&nbsp;&nbsp;&nbsp;res/raw/</code> (required if you have any
+  <code>res/raw-<em>&lt;qualifiers&gt;</em></code> folders)
+</p>
+
+<p class="note"><strong>Tip:</strong> In your code, examine each reference to
+  an Android resource. Make sure that a default resource is defined for each
+  one. Also make sure that the default string file is complete: A <em>
+  localized</em> string file can contain a subset of the strings, but the
+  <em>default</em> string file must contain them all.
+</p>
+
+<h3 id="creating-alternatives">How to Create Alternative Resources</h3>
+
+<p>A large part of localizing an application is providing alternative text for
+different languages. In some cases you will also provide alternative graphics,
+sounds, layouts, and other locale-specific resources. </p>
+
+<p>An application can specify many <code>res/<em>&lt;qualifiers&gt;</em>/</code>
+directories, each with different qualifiers. To create an alternative resource for
+a different locale, you use a qualifier that specifies a language or a
+language-region combination. (The name of a resource directory must conform
+to the naming scheme described in
+<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing
+Alternative Resources</a>,
+or else it will not compile.)</p>
+
+<p><em>Example:</em></p>
+
+<p>Suppose that your application's default language is English. Suppose also
+that you want to localize all the text in your application to French, and most
+of the text in your application (everything except the application's title) to
+Japanese. In this case, you could create three alternative <code>strings.xml</code>
+files, each stored in a locale-specific resource directory:</p>
+
+<ol>
+  <li><code>res/values/strings.xml</code><br>
+    Contains  English text for all  the strings that the application uses,
+including text for a string named <code>title</code>.</li>
+  <li><code>res/values-fr/strings.xml</code><br>
+    Contain French text for all  the strings, including <code>title</code>.</li>
+  <li><code>res/values-ja/strings.xml</code><br>
+    Contain Japanese text for all  the strings <em>except</em>
+<code>title</code>.<br>
+  <code></code></li>
+</ol>
+
+<p>If your Java code refers to <code>R.string.title</code>,  here is what will
+happen at runtime:</p>
+
+<ul>
+  <li>If the device is set to any language other than French, Android will load
+<code>title</code> from the <code>res/values/strings.xml</code> file.</li>
+  <li>If the device is set to French, Android will load <code>title</code> from
+the <code>res/values-fr/strings.xml</code> file.</li>
+</ul>
+
+<p>Notice that if the device is set to Japanese, Android will look for
+<code>title</code> in the <code>res/values-ja/strings.xml</code> file. But
+because no such string is included in that file, Android will fall back to the
+default, and will load  <code>title</code> in English from the
+<code>res/values/strings.xml</code> file.  </p>
+
+<h3 id="resource-precedence">Which Resources Take Precedence?</h3>
+
+<p> If multiple resource files match a device's configuration, Android follows a
+set of rules in deciding which file to use. Among the qualifiers that can be
+specified in a resource directory name, <strong>locale almost always takes
+precedence</strong>. </p>
+<p><em>Example:</em></p>
+
+<p>Assume that an application  includes a default set of graphics and two other
+sets of graphics, each optimized for a different device setup:</p>
+
+<ul>
+  <li><code>res/drawable/</code><br>
+    Contains
+  default graphics.</li>
+  <li><code>res/drawable-small-land-stylus/</code><br>
+  Contains  graphics optimized for use with a device that expects input from a
+  stylus and has a QVGA low-density screen in landscape orientation.</li>
+  <li><code>res/drawable-ja/</code> <br>
+  Contains  graphics optimized for use with Japanese.</li>
+</ul>
+
+<p>If the application runs on a device that is configured to use Japanese,
+Android will load graphics from  <code>res/drawable-ja/</code>, even if the
+device happens to be one that expects input from a stylus and has a QVGA
+low-density screen in landscape orientation.</p>
+
+<p class="note"><strong>Exception:</strong> The only qualifiers that take
+precedence over locale in the selection process are MCC and MNC (mobile country
+code and mobile network code). </p>
+
+<p><em>Example:</em></p>
+
+<p>Assume that you have the following situation:</p>
+
+<ul>
+  <li>The application code calls for <code>R.string.text_a</code></li>
+  <li>Two relevant resource files are available:
+    <ul>
+      <li><code>res/values-mcc404/strings.xml</code>, which includes
+<code>text_a</code> in the application's default language, in this case
+English.</li>
+      <li><code>res/values-hi/strings.xml</code>, which includes
+<code>text_a</code> in Hindi.</li>
+    </ul>
+  </li>
+  <li>The application is running on a device that has the following
+configuration:
+    <ul>
+      <li>The SIM card is connected to a mobile network in India (MCC 404).</li>
+      <li>The language is set to Hindi (<code>hi</code>).</li>
+    </ul>
+  </li>
+</ul>
+
+<p>Android will load <code>text_a</code> from
+<code>res/values-mcc404/strings.xml</code> (in English), even if the device is
+configured for Hindi. That is because in the resource-selection process, Android
+will prefer an MCC match over a language match. </p>
+
+<p>The selection process is not always as straightforward as these examples
+suggest. Please read  <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#BestMatch">How Android Finds
+the Best-matching Resource</a> for a more nuanced description of the
+process. All the qualifiers are described and listed in order of
+precedence in <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#table2">Table 2 of Providing
+Alternative Resources</a>.</p>
+
+<h3 id="referring-to-resources">Referring to Resources in Java</h3>
+
+<p>In your application's Java code, you refer to  resources using the syntax
+<code>R.<em>resource_type</em>.<em>resource_name</em></code> or
+<code>android.R.<em>resource_type</em>.<em>resource_name</em></code><em>.</em>
+For more about this, see <a
+href="{@docRoot}guide/topics/resources/accessing-resources.html">Accessing Resources</a>.</p>
+
+<h2 id="checklist">Localization Checklist</h2>
+
+<p>For a complete overview of the process of localizing and distributing an Android application,
+see the <a href="{@docRoot}distribute/googleplay/publish/localizing.html">Localization
+Checklist</a> document.</p>
+
+<h2 id="strategies">Localization Tips</h2>
+
+<h4 id="failing2">Design your application  to work in any locale</h4>
+
+<p>You cannot assume anything about the device on which a user will
+run your application. The device might have hardware that you were not
+anticipating, or it might be set to a locale that you did not plan for or that
+you cannot test. Design your application so that it will function normally or fail gracefully no
+matter what device it runs on.</p>
+
+<p class="note"><strong>Important:</strong> Make sure that your application
+includes a full set of default resources.</p> <p>Make sure to include
+<code>res/drawable/</code> and a <code>res/values/</code> folders (without any
+additional modifiers in the folder names) that contain all the images and text
+that your application will need. </p>
+
+<p>If an application is missing even one default resource, it will not run on a
+  device that is set to an unsupported locale. For example, the
+  <code>res/values/strings.xml</code> default file might lack one string that
+  the application needs: When the application runs in an unsupported locale and
+  attempts to load <code>res/values/strings.xml</code>, the user will see an
+  error message and a Force Close button. An IDE such as Eclipse will not
+  highlight this kind of error, and you will not see the problem when you
+  test the application on a device or emulator that is set to a supported locale.</p>
+
+<p>For more information, see <a href="#test-for-default">Testing for Default Resources</a>.</p>
+
+<h4>Design a flexible layout</h4>
+
+<p> If you need to rearrange your layout to fit a certain language (for example
+German with its long words), you can create an alternative layout for that
+language (for example <code>res/layout-de/main.xml</code>). However, doing this
+can make your application harder to maintain.  It is better to create a single
+layout that is more flexible.</p>
+
+<p>Another typical situation is a language that requires something different in
+its layout. For example, you might have a contact form that should include  two
+name fields when the application runs in Japanese, but three name fields when
+the application  runs in some other language. You could handle this in either of
+two ways:</p>
+
+<ul>
+  <li>Create  one  layout with a field that you can programmatically enable or
+disable, based on the language, or</li>
+  <li>Have the main layout include another layout that  includes the changeable
+field. The second layout can have different configurations for different
+languages.</li>
+</ul>
+
+<h4>Avoid creating more resource files and text strings than you need</h4>
+
+<p>You probably do not need to create a locale-specific
+alternative for every resource in your application. For example, the layout
+defined in the <code>res/layout/main.xml</code> file might work in any locale,
+in which case there would be no need to create any alternative layout files.
+</p>
+
+<p>Also, you might not need to create alternative text for every
+string. For example, assume the following:</p>
+
+<ul>
+  <li>Your application's default language is American
+English. Every string that the application uses is defined, using American
+English spellings, in <code>res/values/strings.xml</code>. </li>
+
+  <li>For  a few important phrases, you want to provide
+British English spelling. You want these alternative strings to be used when your
+application runs on a device in the United Kingdom. </li>
+</ul>
+
+<p>To do this, you could create a small file called
+<code>res/values-en-rGB/strings.xml</code> that includes only the strings that
+should be different when the application  runs in the U.K. For all the rest of
+the strings, the application will fall back to the defaults and use what is
+defined in <code>res/values/strings.xml</code>.</p>
+
+<h4>Use the Android Context object for manual locale lookup</h4>
+
+<p>You can look up the locale using the {@link android.content.Context} object
+that Android makes available:</p>
+
+<pre>String locale = context.getResources().getConfiguration().locale.getDisplayName();</pre>
+
+<h2 id="testing">Testing Localized Applications</h2>
+
+<h3 id="device">Testing on a Device</h3>
+<p>Keep in mind that the device you are testing may be significantly different from
+  the devices available to consumers in other geographies. The locales available
+  on your device may differ from those available on other devices. Also, the
+  resolution and density of the device screen may differ, which could affect
+  the display of strings and drawables in your UI.</p>
+
+<p>To change the locale on a device, use  the Settings application  (Home &gt;
+Menu &gt; Settings &gt; Locale &amp; text &gt; Select locale). </p>
+
+<h3 id="emulator">Testing on an Emulator</h3>
+
+<p>For details about using the emulator, see See <a
+href="{@docRoot}tools/help/emulator.html">Android Emulator</a>.</p>
+<h4>Creating and using a custom locale</h4>
+
+<p>A &quot;custom&quot; locale is a language/region combination that the Android
+system image does not explicitly support. (For a list of supported locales in
+Android platforms see the Version Notes in the <a
+href="{@docRoot}sdk/index.html">SDK</a> tab). You can test
+how your application will run in a custom locale by creating a custom locale in
+the emulator. There are two ways to do this:</p>
+
+<ul>
+  <li>Use the Custom Locale application, which is accessible from the
+Application tab. (After you create a custom locale, switch to it by
+pressing and holding the locale name.)</li>
+  <li>Change to a custom locale from the adb shell, as described below.</li>
+</ul>
+
+<p>When you set the emulator to a locale that is not available in the Android
+system image, the system itself will display in its default language. Your
+application, however, should localize properly.</p>
+
+<h4>Changing the emulator locale from the adb shell</h4>
+
+<p>To change the locale in the emulator by using the adb shell. </p>
+
+<ol>
+  <li>Pick the locale you want to test and determine its language and region codes, for
+example <code>fr</code> for French and <code>CA</code> for Canada.<br>
+  </li>
+  <li>Launch an emulator.</li>
+  <li>From a command-line shell on the host computer, run the following
+command:<br>
+    <code>adb shell</code><br>
+  or if you have a device attached, specify that you want the emulator by adding
+the <code>-e</code> option:<br>
+  <code>adb -e shell</code></li>
+  <li>At  the  adb shell prompt (<code>#</code>), run this command: <br>
+    <code>setprop persist.sys.language  [<em>language code</em>];setprop
+persist.sys.country [<em>country  code</em>];stop;sleep 5;start <br>
+    </code>Replace bracketed sections with the  appropriate codes from Step
+1.</li>
+</ol>
+
+<p>For instance, to test in Canadian French:</p>
+
+<p><code>setprop persist.sys.language  fr;setprop persist.sys.country
+CA;stop;sleep 5;start </code></p>
+
+<p>This will cause the emulator  to restart. (It will look like a full reboot,
+but it is not.) Once the Home screen appears again, re-launch your application (for
+example, click the Run icon in Eclipse), and the application will launch with
+the new locale. </p>
+
+<h3 id="test-for-default">Testing for Default Resources</h3>
+<p>Here's how to test whether an application includes every string resource that it needs:  </p>
+<ol><li>Set the emulator or device to a language that your application does not
+  support. For example, if the application has French strings in
+  <code>res/values-fr/</code> but does not have any Spanish strings in
+  <code>res/values-es/</code>, then set the emulator's locale to Spanish.
+  (You can use the Custom Locale application to set the emulator to an
+  unsupported locale.)</li>
+  <li>Run the application.</li>
+<li>If the application shows an error message and a Force Close button, it might
+  be looking for a string that is not available. Make sure that your
+  <code>res/values/strings.xml</code> file includes a definition for
+  every string that the application uses.</li>
+</ol>
+</p>
+
+<p>If the test is successful, repeat it for other types of
+  configurations. For example, if the application has a layout file called
+  <code>res/layout-land/main.xml</code> but does not contain a file called
+  <code>res/layout-port/main.xml</code>, then set the emulator or device to
+  portrait orientation and see if the application will run.
+
diff --git a/docs/html/guide/topics/resources/runtime-changes.jd b/docs/html/guide/topics/resources/runtime-changes.jd
index d074873..0e03fe0 100644
--- a/docs/html/guide/topics/resources/runtime-changes.jd
+++ b/docs/html/guide/topics/resources/runtime-changes.jd
@@ -1,5 +1,5 @@
 page.title=Handling Runtime Changes
-page.tags="activity","lifecycle"
+page.tags=activity,lifecycle
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/search/adding-custom-suggestions.jd b/docs/html/guide/topics/search/adding-custom-suggestions.jd
index 47ad2fe..6ebef08 100644
--- a/docs/html/guide/topics/search/adding-custom-suggestions.jd
+++ b/docs/html/guide/topics/search/adding-custom-suggestions.jd
@@ -1,5 +1,5 @@
 page.title=Adding Custom Suggestions
-page.tags="SearchRecentSuggestionsProvider",
+page.tags=SearchRecentSuggestionsProvider,
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/search/adding-recent-query-suggestions.jd b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
index c1d59d4..e1020dd 100644
--- a/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
+++ b/docs/html/guide/topics/search/adding-recent-query-suggestions.jd
@@ -1,5 +1,5 @@
 page.title=Adding Recent Query Suggestions
-page.tags="SearchRecentSuggestions","SearchRecentSuggestionsProvider"
+page.tags=SearchRecentSuggestions,SearchRecentSuggestionsProvider
 
 @jd:body
 
diff --git a/docs/html/guide/topics/search/search-dialog.jd b/docs/html/guide/topics/search/search-dialog.jd
index fc722b2..fcaaed36 100644
--- a/docs/html/guide/topics/search/search-dialog.jd
+++ b/docs/html/guide/topics/search/search-dialog.jd
@@ -1,5 +1,5 @@
 page.title=Creating a Search Interface
-page.tags="searchview"
+page.tags=searchview
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/sensors/index.jd b/docs/html/guide/topics/sensors/index.jd
index 65560e6..09d27e7 100644
--- a/docs/html/guide/topics/sensors/index.jd
+++ b/docs/html/guide/topics/sensors/index.jd
@@ -1,6 +1,6 @@
 page.title=Location and Sensors APIs
 page.landing=true
-page.tags="location","sensors"
+page.tags=location,sensors
 page.landing.intro=Use sensors on the device to add rich location and motion capabilities to your app, from GPS or network location to accelerometer, gyroscope, temperature, barometer, and more. 
 page.landing.image=
 
@@ -38,4 +38,4 @@
     </a>
   </div>
 
-</div>
\ No newline at end of file
+</div>
diff --git a/docs/html/guide/topics/sensors/sensors_motion.jd b/docs/html/guide/topics/sensors/sensors_motion.jd
index 945f8a6..393c3c5 100644
--- a/docs/html/guide/topics/sensors/sensors_motion.jd
+++ b/docs/html/guide/topics/sensors/sensors_motion.jd
@@ -1,5 +1,6 @@
 page.title=Motion Sensors
-page.tags="sensorevent","accelerometer","gyroscope","gravity","rotation","stepcounter"
+page.tags=sensorevent,accelerometer,gyroscope,gravity,rotation,stepcounter
+
 @jd:body
 
 <div id="qv-wrapper">
@@ -530,7 +531,6 @@
 href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html">
 OS - RotationVectorDemo</a>).</p>
 
-
 <h2 id="sensors-motion-significant">Using the Significant Motion Sensor</h2>
 
 <p>The significant motion sensor triggers an event each time significant motion is detected and
diff --git a/docs/html/guide/topics/sensors/sensors_position.jd b/docs/html/guide/topics/sensors/sensors_position.jd
index f021afe..d0ddead 100644
--- a/docs/html/guide/topics/sensors/sensors_position.jd
+++ b/docs/html/guide/topics/sensors/sensors_position.jd
@@ -1,5 +1,5 @@
 page.title=Position Sensors
-page.tags="sensorevent","orientation","proximity"
+page.tags=sensorevent,orientation,proximity
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/text/copy-paste.jd b/docs/html/guide/topics/text/copy-paste.jd
index b34f0fa..8f898e4 100644
--- a/docs/html/guide/topics/text/copy-paste.jd
+++ b/docs/html/guide/topics/text/copy-paste.jd
@@ -1,5 +1,5 @@
 page.title=Copy and Paste
-page.tags="clipboardmanager","clipdata","input"
+page.tags=clipboardmanager,clipdata,input
 @jd:body
 <div id="qv-wrapper">
     <div id="qv">
diff --git a/docs/html/guide/topics/text/creating-input-method.jd b/docs/html/guide/topics/text/creating-input-method.jd
index 7254594..205fd96 100644
--- a/docs/html/guide/topics/text/creating-input-method.jd
+++ b/docs/html/guide/topics/text/creating-input-method.jd
@@ -1,5 +1,5 @@
 page.title=Creating an Input Method
-page.tags="ime","keyboard","inputmethodservice"
+page.tags=ime,keyboard,inputmethodservice
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/text/spell-checker-framework.jd b/docs/html/guide/topics/text/spell-checker-framework.jd
index 366f9cc..a5d9932 100644
--- a/docs/html/guide/topics/text/spell-checker-framework.jd
+++ b/docs/html/guide/topics/text/spell-checker-framework.jd
@@ -1,5 +1,5 @@
 page.title=Spelling Checker Framework
-page.tags="input","spellcheckerservice"
+page.tags=input,spellcheckerservice
 @jd:body
 <div id="qv-wrapper">
 <div id="qv">
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index f01d4bf..a61696a 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -1,5 +1,5 @@
 page.title=Action Bar
-page.tags="actionbar","menu","tabs"
+page.tags=actionbar,menu,tabs
 
 @jd:body
 
diff --git a/docs/html/guide/topics/ui/controls/button.jd b/docs/html/guide/topics/ui/controls/button.jd
index cb274ae..b52c3e9 100644
--- a/docs/html/guide/topics/ui/controls/button.jd
+++ b/docs/html/guide/topics/ui/controls/button.jd
@@ -1,5 +1,5 @@
 page.title=Buttons
-page.tags="button","imagebutton"
+page.tags=button,imagebutton
 @jd:body
 
 <div id="qv-wrapper">
@@ -241,4 +241,4 @@
   <p>For more information about this XML syntax, including how to define a disabled, hovered, or
 other button states, read about <a
 href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">State List
-Drawable</a>.</p>
\ No newline at end of file
+Drawable</a>.</p>
diff --git a/docs/html/guide/topics/ui/controls/pickers.jd b/docs/html/guide/topics/ui/controls/pickers.jd
index 4c55840..31e4d3f5 100644
--- a/docs/html/guide/topics/ui/controls/pickers.jd
+++ b/docs/html/guide/topics/ui/controls/pickers.jd
@@ -1,5 +1,5 @@
 page.title=Pickers
-page.tags="datepicker","timepicker"
+page.tags=datepicker,timepicker
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/radiobutton.jd b/docs/html/guide/topics/ui/controls/radiobutton.jd
index d0c48ed..b2556e19 100644
--- a/docs/html/guide/topics/ui/controls/radiobutton.jd
+++ b/docs/html/guide/topics/ui/controls/radiobutton.jd
@@ -1,5 +1,5 @@
 page.title=Radio Buttons
-page.tags="radiobutton","radiogroup"
+page.tags=radiobutton,radiogroup
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/spinner.jd b/docs/html/guide/topics/ui/controls/spinner.jd
index 85714b6..d2db7a4 100644
--- a/docs/html/guide/topics/ui/controls/spinner.jd
+++ b/docs/html/guide/topics/ui/controls/spinner.jd
@@ -1,5 +1,5 @@
 page.title=Spinners
-page.tags="adapterview","spinneradapter"
+page.tags=adapterview,spinneradapter
 @jd:body
 
 <div id="qv-wrapper">
@@ -143,4 +143,4 @@
 <p>If you implement the {@link
 android.widget.AdapterView.OnItemSelectedListener} interface with your {@link
 android.app.Activity} or {@link android.app.Fragment} (such as in the example above), you can pass
-<code>this</code> as the interface instance.</p>
\ No newline at end of file
+<code>this</code> as the interface instance.</p>
diff --git a/docs/html/guide/topics/ui/controls/text.jd b/docs/html/guide/topics/ui/controls/text.jd
index c0b9873..9474dee 100644
--- a/docs/html/guide/topics/ui/controls/text.jd
+++ b/docs/html/guide/topics/ui/controls/text.jd
@@ -1,5 +1,5 @@
 page.title=Text Fields
-page.tags="edittext","autocompletetextview"
+page.tags=edittext,autocompletetextview
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/controls/togglebutton.jd b/docs/html/guide/topics/ui/controls/togglebutton.jd
index 5e2a551..09af516 100644
--- a/docs/html/guide/topics/ui/controls/togglebutton.jd
+++ b/docs/html/guide/topics/ui/controls/togglebutton.jd
@@ -1,5 +1,5 @@
 page.title=Toggle Buttons
-page.tags="switch","togglebutton"
+page.tags=switch,togglebutton
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/custom-components.jd b/docs/html/guide/topics/ui/custom-components.jd
index 703a5ce..b146098 100644
--- a/docs/html/guide/topics/ui/custom-components.jd
+++ b/docs/html/guide/topics/ui/custom-components.jd
@@ -1,5 +1,5 @@
 page.title=Custom Components
-page.tags="view","widget"
+page.tags=view,widget
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/declaring-layout.jd b/docs/html/guide/topics/ui/declaring-layout.jd
index 6586c2f..616949b 100644
--- a/docs/html/guide/topics/ui/declaring-layout.jd
+++ b/docs/html/guide/topics/ui/declaring-layout.jd
@@ -1,5 +1,5 @@
 page.title=Layouts
-page.tags="view","viewgroup"
+page.tags=view,viewgroup
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd
index 043879c..0c6ec84 100644
--- a/docs/html/guide/topics/ui/dialogs.jd
+++ b/docs/html/guide/topics/ui/dialogs.jd
@@ -1,5 +1,5 @@
 page.title=Dialogs
-page.tags="alertdialog","dialogfragment"
+page.tags=alertdialog,dialogfragment
 
 @jd:body
 
diff --git a/docs/html/guide/topics/ui/drag-drop.jd b/docs/html/guide/topics/ui/drag-drop.jd
index 9a6b0e9..9d8aa9b 100644
--- a/docs/html/guide/topics/ui/drag-drop.jd
+++ b/docs/html/guide/topics/ui/drag-drop.jd
@@ -1,5 +1,5 @@
 page.title=Drag and Drop
-page.tags="clipdata","dragevent","onlongclicklistener"
+page.tags=clipdata,dragevent,onlongclicklistener
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/layout/gridview.jd b/docs/html/guide/topics/ui/layout/gridview.jd
index bc189c4..b8d24b60 100644
--- a/docs/html/guide/topics/ui/layout/gridview.jd
+++ b/docs/html/guide/topics/ui/layout/gridview.jd
@@ -1,5 +1,5 @@
 page.title=Grid View
-page.tags="gridview"
+page.tags=gridview
 @jd:body
 <div id="qv-wrapper">
 <div id="qv">
diff --git a/docs/html/guide/topics/ui/layout/linear.jd b/docs/html/guide/topics/ui/layout/linear.jd
index 444dc71..902f22f 100644
--- a/docs/html/guide/topics/ui/layout/linear.jd
+++ b/docs/html/guide/topics/ui/layout/linear.jd
@@ -1,5 +1,5 @@
 page.title=Linear Layout
-page.tags="linearlayout"
+page.tags=linearlayout
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/ui/layout/listview.jd b/docs/html/guide/topics/ui/layout/listview.jd
index f8315c5..3c6e32c 100644
--- a/docs/html/guide/topics/ui/layout/listview.jd
+++ b/docs/html/guide/topics/ui/layout/listview.jd
@@ -1,5 +1,5 @@
 page.title=List View
-page.tags="listview"
+page.tags=listview
 @jd:body
 <div id="qv-wrapper">
 <div id="qv">
diff --git a/docs/html/guide/topics/ui/layout/relative.jd b/docs/html/guide/topics/ui/layout/relative.jd
index 65c5617..69f5c0a 100644
--- a/docs/html/guide/topics/ui/layout/relative.jd
+++ b/docs/html/guide/topics/ui/layout/relative.jd
@@ -1,5 +1,5 @@
 page.title=Relative Layout
-page.tags="relativelayout"
+page.tags=relativelayout
 @jd:body
 
 <div id="qv-wrapper">
@@ -114,4 +114,4 @@
 </pre>
 
 <p>For details about all the layout attributes available to each child view of a {@link
-android.widget.RelativeLayout}, see {@link android.widget.RelativeLayout.LayoutParams}.</p>
\ No newline at end of file
+android.widget.RelativeLayout}, see {@link android.widget.RelativeLayout.LayoutParams}.</p>
diff --git a/docs/html/guide/topics/ui/settings.jd b/docs/html/guide/topics/ui/settings.jd
index d96447d..1d36430 100644
--- a/docs/html/guide/topics/ui/settings.jd
+++ b/docs/html/guide/topics/ui/settings.jd
@@ -1,5 +1,5 @@
 page.title=Settings
-page.tags="preference","preferenceactivity","preferencefragment"
+page.tags=preference,preferenceactivity,preferencefragment
 
 @jd:body
 
diff --git a/docs/html/images/camera2/metadata/android.colorCorrection.mode/processing_pipeline.png b/docs/html/images/camera2/metadata/android.colorCorrection.mode/processing_pipeline.png
new file mode 100644
index 0000000..7578b48
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.colorCorrection.mode/processing_pipeline.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/blue_shading.png b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/blue_shading.png
new file mode 100644
index 0000000..7b10f6b
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/blue_shading.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/green_e_shading.png b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/green_e_shading.png
new file mode 100644
index 0000000..41972cf
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/green_e_shading.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/green_o_shading.png b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/green_o_shading.png
new file mode 100644
index 0000000..d26600b
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/green_o_shading.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/inv_shading.png b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/inv_shading.png
new file mode 100644
index 0000000..1e7208e
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/inv_shading.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/red_shading.png b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/red_shading.png
new file mode 100644
index 0000000..ecef3ae
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.statistics.lensShadingMap/red_shading.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.tonemap.curveRed/gamma_tonemap.png b/docs/html/images/camera2/metadata/android.tonemap.curveRed/gamma_tonemap.png
new file mode 100644
index 0000000..ec89e37
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.tonemap.curveRed/gamma_tonemap.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.tonemap.curveRed/inverse_tonemap.png b/docs/html/images/camera2/metadata/android.tonemap.curveRed/inverse_tonemap.png
new file mode 100644
index 0000000..cf0c63d
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.tonemap.curveRed/inverse_tonemap.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.tonemap.curveRed/linear_tonemap.png b/docs/html/images/camera2/metadata/android.tonemap.curveRed/linear_tonemap.png
new file mode 100644
index 0000000..f226a54
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.tonemap.curveRed/linear_tonemap.png
Binary files differ
diff --git a/docs/html/images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png b/docs/html/images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png
new file mode 100644
index 0000000..ded0645
--- /dev/null
+++ b/docs/html/images/camera2/metadata/android.tonemap.curveRed/srgb_tonemap.png
Binary files differ
diff --git a/docs/html/samples/index.jd b/docs/html/samples/index.jd
index c1213b6..ab15e32 100644
--- a/docs/html/samples/index.jd
+++ b/docs/html/samples/index.jd
@@ -1,5 +1,5 @@
 page.title=Samples
-page.tags="samples","examples","code"
+page.tags=samples,examples,code
 
 @jd:body
 
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index 9ee1cca..e7f78e8 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,5 +1,5 @@
 page.title=Android SDK
-page.tags="download"
+page.tags=download
 page.template=sdk
 header.hide=1
 page.metaDescription=Download the official Android SDK to develop apps for Android-powered devices.
diff --git a/docs/html/sdk/installing/studio.jd b/docs/html/sdk/installing/studio.jd
index f9d2b15..8ea5e7e 100644
--- a/docs/html/sdk/installing/studio.jd
+++ b/docs/html/sdk/installing/studio.jd
@@ -1,5 +1,5 @@
 page.title=Getting Started with Android Studio
-page.tags="studio"
+page.tags=studio
 @jd:body
 
 
diff --git a/docs/html/tools/adk/adk.jd b/docs/html/tools/adk/adk.jd
index 1651747..7e75c11 100644
--- a/docs/html/tools/adk/adk.jd
+++ b/docs/html/tools/adk/adk.jd
@@ -1,5 +1,5 @@
 page.title=Accessory Development Kit 2011 Guide
-page.tags="adk"
+page.tags=adk
 @jd:body
 
   <div id="qv-wrapper">
diff --git a/docs/html/tools/adk/adk2.jd b/docs/html/tools/adk/adk2.jd
index c60e9203..d69125a 100644
--- a/docs/html/tools/adk/adk2.jd
+++ b/docs/html/tools/adk/adk2.jd
@@ -1,5 +1,5 @@
 page.title=Accessory Development Kit 2012 Guide
-page.tags="adk"
+page.tags=adk
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/tools/adk/index.jd b/docs/html/tools/adk/index.jd
index e035115..e08748fc 100644
--- a/docs/html/tools/adk/index.jd
+++ b/docs/html/tools/adk/index.jd
@@ -1,5 +1,5 @@
 page.title=Accessory Development Kit
-page.tags="adk"
+page.tags=adk
 @jd:body
 
 <p>The Accessory Development Kit (ADK) is a reference implementation for hardware manufacturers and
diff --git a/docs/html/tools/debugging/debugging-memory.jd b/docs/html/tools/debugging/debugging-memory.jd
index a7f443c..fccb67e 100644
--- a/docs/html/tools/debugging/debugging-memory.jd
+++ b/docs/html/tools/debugging/debugging-memory.jd
@@ -1,5 +1,5 @@
 page.title=Investigating Your RAM Usage
-page.tags="memory","OutOfMemoryError"
+page.tags=memory,OutOfMemoryError
 @jd:body
 
  <div id="qv-wrapper">
@@ -492,4 +492,4 @@
 <p class="note"><strong>Tip:</strong> You can also perform the above steps by using the "monkey"
 test framework. For more information on running the monkey test framework, read the <a href=
 "{@docRoot}tools/help/monkeyrunner_concepts.html">monkeyrunner</a>
-documentation.</p>
\ No newline at end of file
+documentation.</p>
diff --git a/docs/html/tools/help/adb.jd b/docs/html/tools/help/adb.jd
index c339943..f980042 100644
--- a/docs/html/tools/help/adb.jd
+++ b/docs/html/tools/help/adb.jd
@@ -1,7 +1,7 @@
 page.title=Android Debug Bridge
 parent.title=Tools
 parent.link=index.html
-page.tags="adb"
+page.tags=adb
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/tools/help/adt.jd b/docs/html/tools/help/adt.jd
index 4dac574..1bb3015 100644
--- a/docs/html/tools/help/adt.jd
+++ b/docs/html/tools/help/adt.jd
@@ -1,5 +1,5 @@
 page.title=Android Developer Tools
-page.tags="adt"
+page.tags=adt
 @jd:body
 
   <div id="qv-wrapper">
diff --git a/docs/html/tools/help/draw9patch.jd b/docs/html/tools/help/draw9patch.jd
index ebf2c6c..859b1cf 100644
--- a/docs/html/tools/help/draw9patch.jd
+++ b/docs/html/tools/help/draw9patch.jd
@@ -1,5 +1,5 @@
 page.title=Draw 9-patch
-page.tags="NinePatch"
+page.tags=NinePatch
 @jd:body
 
 <p>The Draw 9-patch tool allows you to easily create a 
diff --git a/docs/html/training/accessibility/index.jd b/docs/html/training/accessibility/index.jd
index 0af1d87..ea54dc4 100644
--- a/docs/html/training/accessibility/index.jd
+++ b/docs/html/training/accessibility/index.jd
@@ -1,5 +1,5 @@
 page.title=Implementing Accessibility
-page.tags="navigation","input"
+page.tags=navigation,input
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/activity-testing/index.jd b/docs/html/training/activity-testing/index.jd
index ddede71..b9542b6 100644
--- a/docs/html/training/activity-testing/index.jd
+++ b/docs/html/training/activity-testing/index.jd
@@ -1,5 +1,5 @@
 page.title=Testing Your Android Activity
-page.tags="testing"
+page.tags=testing
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/animation/index.jd b/docs/html/training/animation/index.jd
index b6940f8..4f37788 100644
--- a/docs/html/training/animation/index.jd
+++ b/docs/html/training/animation/index.jd
@@ -1,5 +1,5 @@
 page.title=Adding Animations
-page.tags="Animator","views","layout","user interface"
+page.tags=Animator,views,layout,user interface
 trainingnavtop=true
 startpage=true
 
@@ -84,4 +84,4 @@
       <dd>
         Learn how to enable built-in animations when adding, removing, or updating child views in a layout.
       </dd>
-    </dl>
\ No newline at end of file
+    </dl>
diff --git a/docs/html/training/articles/memory.jd b/docs/html/training/articles/memory.jd
index cdc0cd4..f15af68 100644
--- a/docs/html/training/articles/memory.jd
+++ b/docs/html/training/articles/memory.jd
@@ -1,5 +1,5 @@
 page.title=Managing Your App's Memory
-page.tags="ram","low memory","OutOfMemoryError","onTrimMemory"
+page.tags=ram,low memory,OutOfMemoryError,onTrimMemory
 page.article=true
 @jd:body
 
diff --git a/docs/html/training/articles/perf-anr.jd b/docs/html/training/articles/perf-anr.jd
index 87cfc1c..b32cc4f 100644
--- a/docs/html/training/articles/perf-anr.jd
+++ b/docs/html/training/articles/perf-anr.jd
@@ -1,5 +1,5 @@
 page.title=Keeping Your App Responsive
-page.tags="threads","asynctask"
+page.tags=threads,asynctask
 
 page.article=true
 @jd:body
diff --git a/docs/html/training/articles/perf-jni.jd b/docs/html/training/articles/perf-jni.jd
index 9f880ec..1a40f62 100644
--- a/docs/html/training/articles/perf-jni.jd
+++ b/docs/html/training/articles/perf-jni.jd
@@ -1,5 +1,5 @@
 page.title=JNI Tips
-page.tags="ndk","native"
+page.tags=ndk,native
 
 page.article=true
 @jd:body
@@ -444,7 +444,9 @@
 
 <pre>D Late-enabling CheckJNI</pre>
 
-
+<p>You can also set the <code>android:debuggable</code> attribute in your application's manifest to
+turn on CheckJNI just for your app. Note that the Android build tools will do this automatically for
+certain build types.
 
 
 <a name="native_libraries" id="native_libraries"></a>
diff --git a/docs/html/training/articles/security-ssl.jd b/docs/html/training/articles/security-ssl.jd
index f52865a..0639fb0 100644
--- a/docs/html/training/articles/security-ssl.jd
+++ b/docs/html/training/articles/security-ssl.jd
@@ -1,5 +1,5 @@
 page.title=﻿Security with HTTPS and SSL
-page.tags="network","certificates"
+page.tags=network,certificates
 
 page.article=true
 @jd:body
diff --git a/docs/html/training/articles/smp.jd b/docs/html/training/articles/smp.jd
index 7240eec..0b45987 100644
--- a/docs/html/training/articles/smp.jd
+++ b/docs/html/training/articles/smp.jd
@@ -1,5 +1,5 @@
 page.title=SMP Primer for Android
-page.tags="ndk","native"
+page.tags=ndk,native
 
 page.article=true
 @jd:body
diff --git a/docs/html/training/backward-compatible-ui/index.jd b/docs/html/training/backward-compatible-ui/index.jd
index 4baa55c..c8b6ecc 100644
--- a/docs/html/training/backward-compatible-ui/index.jd
+++ b/docs/html/training/backward-compatible-ui/index.jd
@@ -1,5 +1,5 @@
 page.title=Creating Backward-Compatible UIs
-page.tags="widgets","support"
+page.tags=widgets,support
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/basics/actionbar/index.jd b/docs/html/training/basics/actionbar/index.jd
index f0de7586..0303043 100644
--- a/docs/html/training/basics/actionbar/index.jd
+++ b/docs/html/training/basics/actionbar/index.jd
@@ -1,5 +1,5 @@
 page.title=Adding the Action Bar
-page.tags="actionbar"
+page.tags=actionbar
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/basics/data-storage/index.jd b/docs/html/training/basics/data-storage/index.jd
index 4ccad75..fc0c8b5 100644
--- a/docs/html/training/basics/data-storage/index.jd
+++ b/docs/html/training/basics/data-storage/index.jd
@@ -1,5 +1,5 @@
 page.title=Saving Data
-page.tags="data storage","files","sql","database","preferences"
+page.tags=data storage,files,sql,database,preferences
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/basics/fragments/index.jd b/docs/html/training/basics/fragments/index.jd
index 987decf..e78b694 100644
--- a/docs/html/training/basics/fragments/index.jd
+++ b/docs/html/training/basics/fragments/index.jd
@@ -1,5 +1,5 @@
 page.title=Building a Dynamic UI with Fragments
-page.tags="fragments", "user interface", "support library"
+page.tags=fragments,user interface,support library
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/basics/fragments/support-lib.jd b/docs/html/training/basics/fragments/support-lib.jd
index d949267..1d538af 100644
--- a/docs/html/training/basics/fragments/support-lib.jd
+++ b/docs/html/training/basics/fragments/support-lib.jd
@@ -1,5 +1,5 @@
 page.title=Using the Support Library
-page.tags="support library"
+page.tags=support library
 
 trainingnavtop=true
 
diff --git a/docs/html/training/basics/intents/index.jd b/docs/html/training/basics/intents/index.jd
index 59ba11f..aa0232a 100644
--- a/docs/html/training/basics/intents/index.jd
+++ b/docs/html/training/basics/intents/index.jd
@@ -1,5 +1,5 @@
 page.title=Interacting with Other Apps
-page.tags="intents","activity"
+page.tags=intents,activity
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/basics/network-ops/index.jd b/docs/html/training/basics/network-ops/index.jd
index cb3a390..89ab539 100644
--- a/docs/html/training/basics/network-ops/index.jd
+++ b/docs/html/training/basics/network-ops/index.jd
@@ -1,5 +1,5 @@
 page.title=Performing Network Operations
-page.tags="network","wireless"
+page.tags=network,wireless
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/basics/supporting-devices/index.jd b/docs/html/training/basics/supporting-devices/index.jd
index 1e3eb42..6f339f4 100644
--- a/docs/html/training/basics/supporting-devices/index.jd
+++ b/docs/html/training/basics/supporting-devices/index.jd
@@ -1,5 +1,5 @@
 page.title=Supporting Different Devices
-page.tags="resources","screens","versions","localization"
+page.tags=resources,screens,versions,localization
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/basics/supporting-devices/languages.jd b/docs/html/training/basics/supporting-devices/languages.jd
index 130848e..5a1507c 100644
--- a/docs/html/training/basics/supporting-devices/languages.jd
+++ b/docs/html/training/basics/supporting-devices/languages.jd
@@ -1,6 +1,6 @@
 page.title=Supporting Different Languages
 parent.title=Supporting Different Devices
-page.tags="localizing","localization","resources", "formats", "l10n"
+page.tags=localizing,localization,resources,formats,l10n
 parent.link=index.html
 
 trainingnavtop=true
diff --git a/docs/html/training/beam-files/index.jd b/docs/html/training/beam-files/index.jd
index e4bac2e..910fa38 100644
--- a/docs/html/training/beam-files/index.jd
+++ b/docs/html/training/beam-files/index.jd
@@ -1,5 +1,5 @@
 page.title=Sharing Files with NFC
-page.tags="NfcAdapter","Android Beam","share","file transfer"
+page.tags=NfcAdapter,Android Beam,share,file transfer
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/camera/index.jd b/docs/html/training/camera/index.jd
index c6b49cf..5501ab0 100644
--- a/docs/html/training/camera/index.jd
+++ b/docs/html/training/camera/index.jd
@@ -1,5 +1,5 @@
 page.title=Capturing Photos
-page.tags="camera","video","picture"
+page.tags=camera,video,picture
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/cloudsave/conflict-res.jd b/docs/html/training/cloudsave/conflict-res.jd
index 0ff50e2..73e75db 100644
--- a/docs/html/training/cloudsave/conflict-res.jd
+++ b/docs/html/training/cloudsave/conflict-res.jd
@@ -1,5 +1,5 @@
 page.title=Resolving Cloud Save Conflicts
-page.tags="cloud"
+page.tags=cloud
 
 page.article=true
 @jd:body
@@ -594,4 +594,4 @@
 limited. Depending on your implementation, it might make sense to store the
 timestamp for when each entry in the dictionary was modified. When you detect that a
 given entry has not been modified in the last several weeks or months, it is
-probably safe to transfer the coins into another entry and delete the old entry.</p>
\ No newline at end of file
+probably safe to transfer the coins into another entry and delete the old entry.</p>
diff --git a/docs/html/training/cloudsync/index.jd b/docs/html/training/cloudsync/index.jd
index 55b275b..eb7df3d 100644
--- a/docs/html/training/cloudsync/index.jd
+++ b/docs/html/training/cloudsync/index.jd
@@ -1,5 +1,5 @@
 page.title=Syncing to the Cloud
-page.tags="cloud","sync","backup"
+page.tags=cloud,sync,backup
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/connect-devices-wirelessly/index.jd b/docs/html/training/connect-devices-wirelessly/index.jd
index aada1fd..3206d7f 100644
--- a/docs/html/training/connect-devices-wirelessly/index.jd
+++ b/docs/html/training/connect-devices-wirelessly/index.jd
@@ -1,5 +1,5 @@
 page.title=Connecting Devices Wirelessly
-page.tags="wifi","network","wireless"
+page.tags=wifi,network,wireless
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/custom-views/index.jd b/docs/html/training/custom-views/index.jd
index 1c09e66..87cd0b0 100644
--- a/docs/html/training/custom-views/index.jd
+++ b/docs/html/training/custom-views/index.jd
@@ -1,5 +1,5 @@
 page.title=Creating Custom Views
-page.tags="widgets","ui","layout"
+page.tags=widgets,ui,layout
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/displaying-bitmaps/index.jd b/docs/html/training/displaying-bitmaps/index.jd
index 8c11e52..831c64d 100644
--- a/docs/html/training/displaying-bitmaps/index.jd
+++ b/docs/html/training/displaying-bitmaps/index.jd
@@ -1,5 +1,5 @@
 page.title=Displaying Bitmaps Efficiently
-page.tags="bitmaps","images","graphics"
+page.tags=bitmaps,images,graphics
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/efficient-downloads/index.jd b/docs/html/training/efficient-downloads/index.jd
index 2ab93ae..d9d7ef0 100644
--- a/docs/html/training/efficient-downloads/index.jd
+++ b/docs/html/training/efficient-downloads/index.jd
@@ -1,5 +1,5 @@
 page.title=Transferring Data Without Draining the Battery
-page.tags="battery","network","wireless"
+page.tags=battery,network,wireless
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/enterprise/index.jd b/docs/html/training/enterprise/index.jd
index ac1b565..2926f71 100644
--- a/docs/html/training/enterprise/index.jd
+++ b/docs/html/training/enterprise/index.jd
@@ -1,5 +1,5 @@
 page.title=Developing for Enterprise
-page.tags="policy","privacy"
+page.tags=policy,privacy
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/gestures/index.jd b/docs/html/training/gestures/index.jd
index 9d21b08..260cfff 100644
--- a/docs/html/training/gestures/index.jd
+++ b/docs/html/training/gestures/index.jd
@@ -1,5 +1,5 @@
 page.title=Using Touch Gestures
-page.tags="input","navigation","gesturedetector","scroller"
+page.tags=input,navigation,gesturedetector,scroller
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/graphics/opengl/index.jd b/docs/html/training/graphics/opengl/index.jd
index cf33d80..3549f95 100644
--- a/docs/html/training/graphics/opengl/index.jd
+++ b/docs/html/training/graphics/opengl/index.jd
@@ -1,5 +1,5 @@
 page.title=Displaying Graphics with OpenGL ES
-page=tags="open gl","graphics"
+page.tags=open gl,graphics
 trainingnavtop=true
 
 @jd:body
diff --git a/docs/html/training/id-auth/index.jd b/docs/html/training/id-auth/index.jd
index 2bae9c4..f15ee29 100644
--- a/docs/html/training/id-auth/index.jd
+++ b/docs/html/training/id-auth/index.jd
@@ -1,5 +1,5 @@
 page.title=Remembering Users
-page.tags="privacy","oauth","accounts"
+page.tags=privacy,oauth,accounts
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/implementing-navigation/ancestral.jd b/docs/html/training/implementing-navigation/ancestral.jd
index 12d5005..57251c1 100644
--- a/docs/html/training/implementing-navigation/ancestral.jd
+++ b/docs/html/training/implementing-navigation/ancestral.jd
@@ -1,5 +1,5 @@
 page.title=Providing Up Navigation
-page.tags="up navigation","NavUtils","TaskStackBuilder"
+page.tags=up navigation,NavUtils,TaskStackBuilder
 
 trainingnavtop=true
 
diff --git a/docs/html/training/implementing-navigation/lateral.jd b/docs/html/training/implementing-navigation/lateral.jd
index bb9d78c..9c83479 100644
--- a/docs/html/training/implementing-navigation/lateral.jd
+++ b/docs/html/training/implementing-navigation/lateral.jd
@@ -1,5 +1,5 @@
 page.title=Creating Swipe Views with Tabs
-page.tags="viewpager","horizontal","paging","swipe view","tabs"
+page.tags=viewpager,horizontal,paging,swipe view,tabs
 
 trainingnavtop=true
 
diff --git a/docs/html/training/implementing-navigation/nav-drawer.jd b/docs/html/training/implementing-navigation/nav-drawer.jd
index f7f79166..679c240 100644
--- a/docs/html/training/implementing-navigation/nav-drawer.jd
+++ b/docs/html/training/implementing-navigation/nav-drawer.jd
@@ -1,5 +1,5 @@
 page.title=Creating a Navigation Drawer
-page.tags="DrawerLayout", "navigation"
+page.tags=DrawerLayout,navigation
 
 trainingnavtop=true
 
diff --git a/docs/html/training/implementing-navigation/temporal.jd b/docs/html/training/implementing-navigation/temporal.jd
index 3abab53..e736648 100644
--- a/docs/html/training/implementing-navigation/temporal.jd
+++ b/docs/html/training/implementing-navigation/temporal.jd
@@ -1,5 +1,5 @@
 page.title=Providing Proper Back Navigation
-page.tags="back navigation","NavUtils","TaskStackBuilder"
+page.tags=back navigation,NavUtils,TaskStackBuilder
 
 trainingnavtop=true
 
diff --git a/docs/html/training/improving-layouts/index.jd b/docs/html/training/improving-layouts/index.jd
index 8cb2258..a2ab7a1 100644
--- a/docs/html/training/improving-layouts/index.jd
+++ b/docs/html/training/improving-layouts/index.jd
@@ -1,5 +1,5 @@
 page.title=Improving Layout Performance
-page.tags="include","merge","viewstub","listview"
+page.tags=include,merge,viewstub,listview
 
 trainingnavtop=true
 startpage=true
@@ -63,4 +63,4 @@
     <dd>If you've built an instance of {@link android.widget.ListView} that contains complex or
 data-heavy content in each list item, the scroll performance of the list might suffer. This
 lesson provides some tips about how you can make your scrolling performance more smooth.</dd>
-</dl>
\ No newline at end of file
+</dl>
diff --git a/docs/html/training/in-app-billing/index.jd b/docs/html/training/in-app-billing/index.jd
index 94708b8..4a446f3 100644
--- a/docs/html/training/in-app-billing/index.jd
+++ b/docs/html/training/in-app-billing/index.jd
@@ -1,5 +1,5 @@
 page.title=Selling In-app Products
-page.tags="billing"
+page.tags=billing
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/keyboard-input/index.jd b/docs/html/training/keyboard-input/index.jd
index 7ac79e6..46795c4 100644
--- a/docs/html/training/keyboard-input/index.jd
+++ b/docs/html/training/keyboard-input/index.jd
@@ -1,5 +1,5 @@
 page.title=Handling Keyboard Input
-page.tags="edittext","accessibility"
+page.tags=edittext,accessibility
 
 trainingnavtop=true
 startpage=true
@@ -52,4 +52,4 @@
     <dd>Learn how to respond directly to keyboard input for user actions.
     </dd>
  
-</dl> 
\ No newline at end of file
+</dl> 
diff --git a/docs/html/training/load-data-background/index.jd b/docs/html/training/load-data-background/index.jd
index 29108e8..e991003 100644
--- a/docs/html/training/load-data-background/index.jd
+++ b/docs/html/training/load-data-background/index.jd
@@ -1,5 +1,5 @@
 page.title=Loading Data in the Background
-page.tags="cursorloader"
+page.tags=cursorloader
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/location/index.jd b/docs/html/training/location/index.jd
index e03eac6..249c42d 100644
--- a/docs/html/training/location/index.jd
+++ b/docs/html/training/location/index.jd
@@ -1,5 +1,5 @@
 page.title=Making Your App Location-Aware
-page.tags="location","geofence", "geofencing", "activity recognition", "activity detection", "gps"
+page.tags=location,geofence,geofencing,activity recognition,activity detection,gps
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/managing-audio/index.jd b/docs/html/training/managing-audio/index.jd
index 3e3bcf0..9391449 100644
--- a/docs/html/training/managing-audio/index.jd
+++ b/docs/html/training/managing-audio/index.jd
@@ -1,5 +1,5 @@
 page.title=Managing Audio Playback
-page.tags="audio","media"
+page.tags=audio,media
 
 trainingnavtop=true
 startpage=true
@@ -58,4 +58,4 @@
   <dt><b><a href="audio-output.html">Dealing with Audio Output Hardware</a></b></dt>
   <dd>Audio can be played from a number of sources. Learn how to find out where the audio is being
 played and how to handle a headset being disconnected during playback.</dd> 
- </dl> 
\ No newline at end of file
+ </dl> 
diff --git a/docs/html/training/monitoring-device-state/index.jd b/docs/html/training/monitoring-device-state/index.jd
index c3d700a..949c1da 100644
--- a/docs/html/training/monitoring-device-state/index.jd
+++ b/docs/html/training/monitoring-device-state/index.jd
@@ -1,5 +1,5 @@
 page.title=Optimizing Battery Life
-page.tags="network","internet"
+page.tags=network,internet
 
 trainingnavtop=true
 startpage=true
@@ -59,4 +59,4 @@
 those that aren't necessary due to the current device state. Learn to improve
 efficiency by toggling and cascading state change receivers and delay actions until the device is in
 a specific state.</dd>
-</dl> 
\ No newline at end of file
+</dl> 
diff --git a/docs/html/training/multiple-apks/index.jd b/docs/html/training/multiple-apks/index.jd
index 5754da9..40a26b9 100644
--- a/docs/html/training/multiple-apks/index.jd
+++ b/docs/html/training/multiple-apks/index.jd
@@ -1,5 +1,5 @@
 page.title=Maintaining Multiple APKs
-page.tags="support"
+page.tags=support
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/multiple-threads/index.jd b/docs/html/training/multiple-threads/index.jd
index cbd42b4..136f0af 100644
--- a/docs/html/training/multiple-threads/index.jd
+++ b/docs/html/training/multiple-threads/index.jd
@@ -1,5 +1,5 @@
 page.title=Sending Operations to Multiple Threads
-page.tags="threadpool","runnable"
+page.tags=threadpool,runnable
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/multiscreen/index.jd b/docs/html/training/multiscreen/index.jd
index 2d34b28..45b6161 100644
--- a/docs/html/training/multiscreen/index.jd
+++ b/docs/html/training/multiscreen/index.jd
@@ -1,5 +1,5 @@
 page.title=Designing for Multiple Screens
-page.tags="tablet","tv","fragments","support"
+page.tags=tablet,tv,fragments,support
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/notify-user/index.jd b/docs/html/training/notify-user/index.jd
index 51f058f..f7d0f87 100644
--- a/docs/html/training/notify-user/index.jd
+++ b/docs/html/training/notify-user/index.jd
@@ -1,5 +1,5 @@
 page.title=Notifying the User
-page.tags="notifications"
+page.tags=notifications
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/printing/index.jd b/docs/html/training/printing/index.jd
index 8161b6b..e33e5e8 100644
--- a/docs/html/training/printing/index.jd
+++ b/docs/html/training/printing/index.jd
@@ -1,5 +1,5 @@
 page.title=Printing Content
-page.tags="print","navigation","gesturedetector","scroller"
+page.tags=print,navigation,gesturedetector,scroller
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/run-background-service/index.jd b/docs/html/training/run-background-service/index.jd
index 3360df5..22f3fc8 100644
--- a/docs/html/training/run-background-service/index.jd
+++ b/docs/html/training/run-background-service/index.jd
@@ -1,5 +1,5 @@
 page.title=Running in a Background Service
-page.tags="intentservice"
+page.tags=intentservice
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/scheduling/index.jd b/docs/html/training/scheduling/index.jd
index 9ffbc16..4d2db60 100644
--- a/docs/html/training/scheduling/index.jd
+++ b/docs/html/training/scheduling/index.jd
@@ -1,5 +1,5 @@
 page.title=Managing Device Awake State
-page.tags=""
+page.tags=
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/search/index.jd b/docs/html/training/search/index.jd
index 4070372..612e8e8 100644
--- a/docs/html/training/search/index.jd
+++ b/docs/html/training/search/index.jd
@@ -1,5 +1,5 @@
 page.title=Adding Search Functionality
-page.tags="searchview","database"
+page.tags=searchview,database
 
 trainingnavtop=true
 startpage=true
@@ -50,4 +50,4 @@
     <dt><b><a href="backward-compat.html">Remaining Backward Compatible</a></b></dt>
 
     <dd>Learn how to keep search features backward compatible with older devices by using.</dd>
-  </dl>
\ No newline at end of file
+  </dl>
diff --git a/docs/html/training/secure-file-sharing/index.jd b/docs/html/training/secure-file-sharing/index.jd
index aa009fc..4adc1c0 100644
--- a/docs/html/training/secure-file-sharing/index.jd
+++ b/docs/html/training/secure-file-sharing/index.jd
@@ -1,5 +1,5 @@
 page.title=Sharing Files
-page.tags="FileProvider","share","ContentProvider"
+page.tags=FileProvider,share,ContentProvider
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/sharing/index.jd b/docs/html/training/sharing/index.jd
index 06d42fc..58a69fc 100644
--- a/docs/html/training/sharing/index.jd
+++ b/docs/html/training/sharing/index.jd
@@ -1,5 +1,5 @@
 page.title=Sharing Simple Data
-page.tags="intents","share"
+page.tags=intents,share
 
 trainingnavtop=true
 startpage=true
diff --git a/docs/html/training/system-ui/index.jd b/docs/html/training/system-ui/index.jd
index c45327f..56fa54b 100644
--- a/docs/html/training/system-ui/index.jd
+++ b/docs/html/training/system-ui/index.jd
@@ -1,5 +1,5 @@
 page.title=Managing the System UI
-page.tags=""
+page.tags=
 
 trainingnavtop=true
 startpage=true
@@ -120,4 +120,4 @@
         so that you can adjust your app's UI accordingly.
     </dd>
 
-</dl>
\ No newline at end of file
+</dl>
diff --git a/docs/html/training/tv/index.jd b/docs/html/training/tv/index.jd
index 54f7016..a99e378 100644
--- a/docs/html/training/tv/index.jd
+++ b/docs/html/training/tv/index.jd
@@ -1,5 +1,5 @@
 page.title=Designing for TV
-page.tags="input","screens"
+page.tags=input,screens
 
 trainingnavtop=true
 startpage=true
diff --git a/drm/java/android/drm/DrmOutputStream.java b/drm/java/android/drm/DrmOutputStream.java
index 87677b8..ba1c56f 100644
--- a/drm/java/android/drm/DrmOutputStream.java
+++ b/drm/java/android/drm/DrmOutputStream.java
@@ -18,18 +18,23 @@
 
 import static android.drm.DrmConvertedStatus.STATUS_OK;
 import static android.drm.DrmManagerClient.INVALID_SESSION;
+import static android.system.OsConstants.SEEK_SET;
 
+import android.os.ParcelFileDescriptor;
+import android.system.ErrnoException;
+import android.system.Os;
 import android.util.Log;
 
+import libcore.io.IoBridge;
+import libcore.io.Streams;
+
+import java.io.FileDescriptor;
 import java.io.FilterOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
-import java.io.RandomAccessFile;
 import java.net.UnknownServiceException;
 import java.util.Arrays;
 
-import libcore.io.Streams;
-
 /**
  * Stream that applies a {@link DrmManagerClient} transformation to data before
  * writing to disk, similar to a {@link FilterOutputStream}.
@@ -40,17 +45,19 @@
     private static final String TAG = "DrmOutputStream";
 
     private final DrmManagerClient mClient;
-    private final RandomAccessFile mFile;
+    private final ParcelFileDescriptor mPfd;
+    private final FileDescriptor mFd;
 
     private int mSessionId = INVALID_SESSION;
 
     /**
-     * @param file Opened with "rw" mode.
+     * @param pfd Opened with "rw" mode.
      */
-    public DrmOutputStream(DrmManagerClient client, RandomAccessFile file, String mimeType)
+    public DrmOutputStream(DrmManagerClient client, ParcelFileDescriptor pfd, String mimeType)
             throws IOException {
         mClient = client;
-        mFile = file;
+        mPfd = pfd;
+        mFd = pfd.getFileDescriptor();
 
         mSessionId = mClient.openConvertSession(mimeType);
         if (mSessionId == INVALID_SESSION) {
@@ -61,8 +68,12 @@
     public void finish() throws IOException {
         final DrmConvertedStatus status = mClient.closeConvertSession(mSessionId);
         if (status.statusCode == STATUS_OK) {
-            mFile.seek(status.offset);
-            mFile.write(status.convertedData);
+            try {
+                Os.lseek(mFd, status.offset, SEEK_SET);
+            } catch (ErrnoException e) {
+                e.rethrowAsIOException();
+            }
+            IoBridge.write(mFd, status.convertedData, 0, status.convertedData.length);
             mSessionId = INVALID_SESSION;
         } else {
             throw new IOException("Unexpected DRM status: " + status.statusCode);
@@ -75,7 +86,7 @@
             Log.w(TAG, "Closing stream without finishing");
         }
 
-        mFile.close();
+        mPfd.close();
     }
 
     @Override
@@ -92,7 +103,7 @@
 
         final DrmConvertedStatus status = mClient.convertData(mSessionId, exactBuffer);
         if (status.statusCode == STATUS_OK) {
-            mFile.write(status.convertedData);
+            IoBridge.write(mFd, status.convertedData, 0, status.convertedData.length);
         } else {
             throw new IOException("Unexpected DRM status: " + status.statusCode);
         }
diff --git a/drm/java/android/drm/DrmUtils.java b/drm/java/android/drm/DrmUtils.java
index 4f7cb22..2a86996 100644
--- a/drm/java/android/drm/DrmUtils.java
+++ b/drm/java/android/drm/DrmUtils.java
@@ -19,7 +19,6 @@
 import java.io.BufferedInputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/graphics/java/android/graphics/Bitmap.java b/graphics/java/android/graphics/Bitmap.java
index 9b71d64..06cf253 100644
--- a/graphics/java/android/graphics/Bitmap.java
+++ b/graphics/java/android/graphics/Bitmap.java
@@ -1624,7 +1624,8 @@
 
     private static native void nativePrepareToDraw(long nativeBitmap);
     private static native boolean nativeHasAlpha(long nativeBitmap);
-    private static native void nativeSetAlphaAndPremultiplied(long nBitmap, boolean hasAlpha,
+    private static native void nativeSetAlphaAndPremultiplied(long nativeBitmap,
+                                                              boolean hasAlpha,
                                                               boolean isPremul);
     private static native boolean nativeHasMipMap(long nativeBitmap);
     private static native void nativeSetHasMipMap(long nativeBitmap, boolean hasMipMap);
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java
index 67e8f23..c20502f 100644
--- a/graphics/java/android/graphics/BitmapFactory.java
+++ b/graphics/java/android/graphics/BitmapFactory.java
@@ -307,17 +307,22 @@
         public boolean inPreferQualityOverSpeed;
 
         /**
-         * The resulting width of the bitmap, set independent of the state of
-         * inJustDecodeBounds. However, if there is an error trying to decode,
-         * outWidth will be set to -1.
+         * The resulting width of the bitmap. If {@link #inJustDecodeBounds} is
+         * set to false, this will be width of the output bitmap after any
+         * scaling is applied. If true, it will be the width of the input image
+         * without any accounting for scaling.
+         *
+         * <p>outWidth will be set to -1 if there is an error trying to decode.</p>
          */
-
         public int outWidth;
 
         /**
-         * The resulting height of the bitmap, set independent of the state of
-         * inJustDecodeBounds. However, if there is an error trying to decode,
-         * outHeight will be set to -1. 
+         * The resulting height of the bitmap. If {@link #inJustDecodeBounds} is
+         * set to false, this will be height of the output bitmap after any
+         * scaling is applied. If true, it will be the height of the input image
+         * without any accounting for scaling.
+         *
+         * <p>outHeight will be set to -1 if there is an error trying to decode.</p>
          */
         public int outHeight;
 
diff --git a/graphics/java/android/graphics/Canvas.java b/graphics/java/android/graphics/Canvas.java
index f86840e..ae3eae1 100644
--- a/graphics/java/android/graphics/Canvas.java
+++ b/graphics/java/android/graphics/Canvas.java
@@ -168,21 +168,10 @@
     }
 
     /**
-     * Gets the native canvas pointer.
-     *
-     * @return The native pointer.
-     *
-     * @hide
-     */
-    public long getNativeCanvas() {
-        return mNativeCanvas;
-    }
-
-    /**
      * Returns null.
-     * 
+     *
      * @deprecated This method is not supported and should not be invoked.
-     * 
+     *
      * @hide
      */
     @Deprecated
@@ -233,14 +222,14 @@
 
         mBitmap = bitmap;
     }
-    
+
     /**
      * Set the viewport dimensions if this canvas is GL based. If it is not,
      * this method is ignored and no exception is thrown.
      *
      * @param width The width of the viewport
      * @param height The height of the viewport
-     * 
+     *
      * @hide
      */
     public void setViewport(int width, int height) {
@@ -389,7 +378,14 @@
                 paint != null ? paint.mNativePaint : 0,
                 saveFlags);
     }
-    
+
+    /**
+     * Convenience for saveLayer(bounds, paint, {@link #ALL_SAVE_FLAG})
+     */
+    public int saveLayer(RectF bounds, Paint paint) {
+        return saveLayer(bounds, paint, ALL_SAVE_FLAG);
+    }
+
     /**
      * Helper version of saveLayer() that takes 4 values rather than a RectF.
      */
@@ -401,6 +397,13 @@
     }
 
     /**
+     * Convenience for saveLayer(left, top, right, bottom, paint, {@link #ALL_SAVE_FLAG})
+     */
+    public int saveLayer(float left, float top, float right, float bottom, Paint paint) {
+        return saveLayer(left, top, right, bottom, paint, ALL_SAVE_FLAG);
+    }
+
+    /**
      * This behaves the same as save(), but in addition it allocates an
      * offscreen bitmap. All drawing calls are directed there, and only when
      * the balancing call to restore() is made is that offscreen transfered to
@@ -420,7 +423,14 @@
         alpha = Math.min(255, Math.max(0, alpha));
         return native_saveLayerAlpha(mNativeCanvas, bounds, alpha, saveFlags);
     }
-    
+
+    /**
+     * Convenience for saveLayerAlpha(bounds, alpha, {@link #ALL_SAVE_FLAG})
+     */
+    public int saveLayerAlpha(RectF bounds, int alpha) {
+        return saveLayerAlpha(bounds, alpha, ALL_SAVE_FLAG);
+    }
+
     /**
      * Helper for saveLayerAlpha() that takes 4 values instead of a RectF.
      */
@@ -431,6 +441,13 @@
     }
 
     /**
+     * Helper for saveLayerAlpha(left, top, right, bottom, alpha, {@link #ALL_SAVE_FLAG})
+     */
+    public int saveLayerAlpha(float left, float top, float right, float bottom, int alpha) {
+        return saveLayerAlpha(left, top, right, bottom, alpha, ALL_SAVE_FLAG);
+    }
+
+    /**
      * This call balances a previous call to save(), and is used to remove all
      * modifications to the matrix/clip state since the last save call. It is
      * an error to call restore() more times than save() was called.
@@ -1058,11 +1075,20 @@
      * @param paint The paint used to draw the roundRect
      */
     public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) {
-        if (rect == null) {
-            throw new NullPointerException();
-        }
-        native_drawRoundRect(mNativeCanvas, rect, rx, ry,
-                             paint.mNativePaint);
+        drawRoundRect(rect.left, rect.top, rect.right, rect.bottom, rx, ry, paint);
+    }
+
+    /**
+     * Draw the specified round-rect using the specified paint. The roundrect
+     * will be filled or framed based on the Style in the paint.
+     *
+     * @param rx    The x-radius of the oval used to round the corners
+     * @param ry    The y-radius of the oval used to round the corners
+     * @param paint The paint used to draw the roundRect
+     */
+    public void drawRoundRect(float left, float top, float right, float bottom, float rx, float ry,
+            Paint paint) {
+        native_drawRoundRect(mNativeCanvas, left, top, right, bottom, rx, ry, paint.mNativePaint);
     }
 
     /**
@@ -1221,7 +1247,13 @@
      *                 values. If false, the alpha byte is ignored (assumed to
      *                 be 0xFF for every pixel).
      * @param paint  May be null. The paint used to draw the bitmap
+     *
+     * @deprecated Usage with a {@link #isHardwareAccelerated() hardware accelerated} canvas
+     * requires an internal copy of color buffer contents every time this method is called. Using a
+     * Bitmap avoids this copy, and allows the application to more explicitly control the lifetime
+     * and copies of pixel data.
      */
+    @Deprecated
     public void drawBitmap(int[] colors, int offset, int stride, float x, float y,
             int width, int height, boolean hasAlpha, Paint paint) {
         // check for valid input
@@ -1248,16 +1280,23 @@
         native_drawBitmap(mNativeCanvas, colors, offset, stride, x, y, width, height, hasAlpha,
                 paint != null ? paint.mNativePaint : 0);
     }
-    
-    /** Legacy version of drawBitmap(int[] colors, ...) that took ints for x,y
+
+    /**
+     * Legacy version of drawBitmap(int[] colors, ...) that took ints for x,y
+     *
+     * @deprecated Usage with a {@link #isHardwareAccelerated() hardware accelerated} canvas
+     * requires an internal copy of color buffer contents every time this method is called. Using a
+     * Bitmap avoids this copy, and allows the application to more explicitly control the lifetime
+     * and copies of pixel data.
      */
+    @Deprecated
     public void drawBitmap(int[] colors, int offset, int stride, int x, int y,
             int width, int height, boolean hasAlpha, Paint paint) {
         // call through to the common float version
         drawBitmap(colors, offset, stride, (float)x, (float)y, width, height,
                    hasAlpha, paint);
     }
-        
+
     /**
      * Draw the bitmap using the specified matrix.
      *
@@ -1403,7 +1442,7 @@
             throw new IndexOutOfBoundsException();
         }
         native_drawText(mNativeCanvas, text, index, count, x, y, paint.mBidiFlags,
-                paint.mNativePaint);
+                paint.mNativePaint, paint.mNativeTypeface);
     }
 
     /**
@@ -1417,7 +1456,7 @@
      */
     public void drawText(String text, float x, float y, Paint paint) {
         native_drawText(mNativeCanvas, text, 0, text.length(), x, y, paint.mBidiFlags,
-                paint.mNativePaint);
+                paint.mNativePaint, paint.mNativeTypeface);
     }
 
     /**
@@ -1436,7 +1475,7 @@
             throw new IndexOutOfBoundsException();
         }
         native_drawText(mNativeCanvas, text, start, end, x, y, paint.mBidiFlags,
-                paint.mNativePaint);
+                paint.mNativePaint, paint.mNativeTypeface);
     }
 
     /**
@@ -1456,7 +1495,7 @@
         if (text instanceof String || text instanceof SpannedString ||
             text instanceof SpannableString) {
             native_drawText(mNativeCanvas, text.toString(), start, end, x, y,
-                    paint.mBidiFlags, paint.mNativePaint);
+                    paint.mBidiFlags, paint.mNativePaint, paint.mNativeTypeface);
         } else if (text instanceof GraphicsOperations) {
             ((GraphicsOperations) text).drawText(this, start, end, x, y,
                     paint);
@@ -1464,7 +1503,7 @@
             char[] buf = TemporaryBuffer.obtain(end - start);
             TextUtils.getChars(text, start, end, buf, 0);
             native_drawText(mNativeCanvas, buf, 0, end - start, x, y,
-                    paint.mBidiFlags, paint.mNativePaint);
+                    paint.mBidiFlags, paint.mNativePaint, paint.mNativeTypeface);
             TemporaryBuffer.recycle(buf);
         }
     }
@@ -1507,7 +1546,7 @@
         }
 
         native_drawTextRun(mNativeCanvas, text, index, count,
-                contextIndex, contextCount, x, y, dir, paint.mNativePaint);
+                contextIndex, contextCount, x, y, dir, paint.mNativePaint, paint.mNativeTypeface);
     }
 
     /**
@@ -1545,7 +1584,7 @@
         if (text instanceof String || text instanceof SpannedString ||
                 text instanceof SpannableString) {
             native_drawTextRun(mNativeCanvas, text.toString(), start, end,
-                    contextStart, contextEnd, x, y, flags, paint.mNativePaint);
+                    contextStart, contextEnd, x, y, flags, paint.mNativePaint, paint.mNativeTypeface);
         } else if (text instanceof GraphicsOperations) {
             ((GraphicsOperations) text).drawTextRun(this, start, end,
                     contextStart, contextEnd, x, y, flags, paint);
@@ -1555,7 +1594,7 @@
             char[] buf = TemporaryBuffer.obtain(contextLen);
             TextUtils.getChars(text, contextStart, contextEnd, buf, 0);
             native_drawTextRun(mNativeCanvas, buf, start - contextStart, len,
-                    0, contextLen, x, y, flags, paint.mNativePaint);
+                    0, contextLen, x, y, flags, paint.mNativePaint, paint.mNativeTypeface);
             TemporaryBuffer.recycle(buf);
         }
     }
@@ -1786,8 +1825,8 @@
                                               boolean useCenter,
                                               long nativePaint);
     private static native void native_drawRoundRect(long nativeCanvas,
-                                                    RectF rect, float rx,
-                                                    float ry, long nativePaint);
+            float left, float top, float right, float bottom,
+            float rx, float ry, long nativePaint);
     private static native void native_drawPath(long nativeCanvas,
                                                long nativePath,
                                                long nativePaint);
@@ -1830,20 +1869,20 @@
 
     private static native void native_drawText(long nativeCanvas, char[] text,
                                                int index, int count, float x,
-                                               float y, int flags,
-                                               long nativePaint);
+                                               float y, int flags, long nativePaint,
+                                               long nativeTypeface);
     private static native void native_drawText(long nativeCanvas, String text,
                                                int start, int end, float x,
-                                               float y, int flags,
-                                               long nativePaint);
+                                               float y, int flags, long nativePaint,
+                                               long nativeTypeface);
 
     private static native void native_drawTextRun(long nativeCanvas, String text,
             int start, int end, int contextStart, int contextEnd,
-            float x, float y, int flags, long nativePaint);
+            float x, float y, int flags, long nativePaint, long nativeTypeface);
 
     private static native void native_drawTextRun(long nativeCanvas, char[] text,
             int start, int count, int contextStart, int contextCount,
-            float x, float y, int flags, long nativePaint);
+            float x, float y, int flags, long nativePaint, long nativeTypeface);
 
     private static native void native_drawPosText(long nativeCanvas,
                                                   char[] text, int index,
diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java
index 8e432da..4838aa0 100644
--- a/graphics/java/android/graphics/ColorFilter.java
+++ b/graphics/java/android/graphics/ColorFilter.java
@@ -21,22 +21,27 @@
 
 package android.graphics;
 
-
+/**
+ * A color filter can be used with a {@link Paint} to modify the color of
+ * each pixel drawn with that paint. This is an abstract class that should
+ * never be used directly.
+ */
 public class ColorFilter {
-    long native_instance;
-
     /**
+     * Holds the pointer to the native SkColorFilter instance.
+     *
      * @hide
      */
-    public long nativeColorFilter;
+    public long native_instance;
 
+    @Override
     protected void finalize() throws Throwable {
         try {
             super.finalize();
         } finally {
-            finalizer(native_instance, nativeColorFilter);
+            destroyFilter(native_instance);
         }
     }
 
-    private static native void finalizer(long native_instance, long nativeColorFilter);
+    static native void destroyFilter(long native_instance);
 }
diff --git a/graphics/java/android/graphics/ColorMatrix.java b/graphics/java/android/graphics/ColorMatrix.java
index e3596c8..1242eb5 100644
--- a/graphics/java/android/graphics/ColorMatrix.java
+++ b/graphics/java/android/graphics/ColorMatrix.java
@@ -18,23 +18,29 @@
 
 import android.util.FloatMath;
 
+import java.util.Arrays;
+
 /**
  *  4x5 matrix for transforming the color+alpha components of a Bitmap.
  *  The matrix is stored in a single array, and its treated as follows:
+ * <pre>
  *  [ a, b, c, d, e,
  *    f, g, h, i, j,
  *    k, l, m, n, o,
  *    p, q, r, s, t ]
+ * </pre>
  *
- * When applied to a color [r, g, b, a], the resulting color is computed as
- * (after clamping)
+ * When applied to a color <code>[r, g, b, a]</code>, the resulting color
+ * is computed as (after clamping):
+ * <pre>
  *   R' = a*R + b*G + c*B + d*A + e;
  *   G' = f*R + g*G + h*B + i*A + j;
  *   B' = k*R + l*G + m*B + n*A + o;
  *   A' = p*R + q*G + r*B + s*A + t;
+ * </pre>
  */
+@SuppressWarnings({ "MismatchedReadAndWriteOfArray", "PointlessArithmeticExpression" })
 public class ColorMatrix {
-
     private final float[] mArray = new float[20];
 
     /**
@@ -66,17 +72,16 @@
     
     /**
      * Set this colormatrix to identity:
+     * <pre>
      * [ 1 0 0 0 0   - red vector
      *   0 1 0 0 0   - green vector
      *   0 0 1 0 0   - blue vector
      *   0 0 0 1 0 ] - alpha vector
+     * </pre>
      */
     public void reset() {
         final float[] a = mArray;
-        
-        for (int i = 19; i > 0; --i) {
-            a[i] = 0;
-        }
+        Arrays.fill(a, 0);
         a[0] = a[6] = a[12] = a[18] = 1;
     }
     
@@ -112,9 +117,9 @@
     
     /**
      * Set the rotation on a color axis by the specified values.
-     * axis=0 correspond to a rotation around the RED color
-     * axis=1 correspond to a rotation around the GREEN color
-     * axis=2 correspond to a rotation around the BLUE color
+     * <code>axis=0</code> correspond to a rotation around the RED color
+     * <code>axis=1</code> correspond to a rotation around the GREEN color
+     * <code>axis=2</code> correspond to a rotation around the BLUE color
      */
     public void setRotate(int axis, float degrees) {
         reset();
@@ -144,7 +149,7 @@
             throw new RuntimeException();
         }
     }
-    
+
     /**
      * Set this colormatrix to the concatenation of the two specified
      * colormatrices, such that the resulting colormatrix has the same effect
@@ -152,12 +157,10 @@
      * matB to be the same colormatrix as this.
      */
     public void setConcat(ColorMatrix matA, ColorMatrix matB) {
-        float[] tmp = null;
-        
+        float[] tmp;
         if (matA == this || matB == this) {
             tmp = new float[20];
-        }
-        else {
+        } else {
             tmp = mArray;
         }
         
@@ -178,7 +181,7 @@
             System.arraycopy(tmp, 0, mArray, 0, 20);
         }
     }
-    
+
     /**
      * Concat this colormatrix with the specified prematrix. This is logically
      * the same as calling setConcat(this, prematrix);
@@ -186,7 +189,7 @@
     public void preConcat(ColorMatrix prematrix) {
         setConcat(this, prematrix);
     }
-    
+
     /**
      * Concat this colormatrix with the specified postmatrix. This is logically
      * the same as calling setConcat(postmatrix, this);
@@ -194,7 +197,7 @@
     public void postConcat(ColorMatrix postmatrix) {
         setConcat(postmatrix, this);
     }
-    
+
     ///////////////////////////////////////////////////////////////////////////
     
     /**
diff --git a/graphics/java/android/graphics/ColorMatrixColorFilter.java b/graphics/java/android/graphics/ColorMatrixColorFilter.java
index 21b7721..7822c41 100644
--- a/graphics/java/android/graphics/ColorMatrixColorFilter.java
+++ b/graphics/java/android/graphics/ColorMatrixColorFilter.java
@@ -16,24 +16,31 @@
 
 package android.graphics;
 
+/**
+ * A color filter that transforms colors through a 4x5 color matrix. This filter
+ * can be used to change the saturation of pixels, convert from YUV to RGB, etc.
+ *
+ * @see ColorMatrix
+ */
 public class ColorMatrixColorFilter extends ColorFilter {
+    private final ColorMatrix mMatrix = new ColorMatrix();
+
     /**
-     * Create a colorfilter that transforms colors through a 4x5 color matrix.
+     * Create a color filter that transforms colors through a 4x5 color matrix.
      *
      * @param matrix 4x5 matrix used to transform colors. It is copied into
      *               the filter, so changes made to the matrix after the filter
      *               is constructed will not be reflected in the filter.
      */
     public ColorMatrixColorFilter(ColorMatrix matrix) {
-        final float[] colorMatrix = matrix.getArray();
-        native_instance = nativeColorMatrixFilter(colorMatrix);
-        nativeColorFilter = nColorMatrixFilter(native_instance, colorMatrix);
+        mMatrix.set(matrix);
+        update();
     }
 
     /**
-    * Create a colorfilter that transforms colors through a 4x5 color matrix.
+     * Create a color filter that transforms colors through a 4x5 color matrix.
      *
-     * @param array array of floats used to transform colors, treated as a 4x5
+     * @param array Array of floats used to transform colors, treated as a 4x5
      *              matrix. The first 20 entries of the array are copied into
      *              the filter. See ColorMatrix.
      */
@@ -41,10 +48,75 @@
         if (array.length < 20) {
             throw new ArrayIndexOutOfBoundsException();
         }
-        native_instance = nativeColorMatrixFilter(array);
-        nativeColorFilter = nColorMatrixFilter(native_instance, array);
+        mMatrix.set(array);
+        update();
+    }
+
+    /**
+     * Returns the {@link ColorMatrix} used by this filter. The returned
+     * value is never null. Modifying the returned matrix does not have
+     * any effect until you call {@link #setColorMatrix(ColorMatrix)}.
+     *
+     * @see #setColorMatrix(ColorMatrix)
+     */
+    public ColorMatrix getColorMatrix() {
+        return mMatrix;
+    }
+
+    /**
+     * Specifies the color matrix used by this filter. If the specified
+     * color matrix is null, this filter's color matrix will be reset to
+     * the identity matrix.
+     *
+     * @param matrix A {@link ColorMatrix} or null
+     *
+     * @see #getColorMatrix()
+     * @see android.graphics.ColorMatrix#reset()
+     * @see #setColorMatrix(float[])
+     */
+    public void setColorMatrix(ColorMatrix matrix) {
+        if (matrix == null) {
+            mMatrix.reset();
+        } else if (matrix != mMatrix) {
+            mMatrix.set(matrix);
+        }
+        update();
+    }
+
+    /**
+     * Specifies the color matrix used by this filter. If the specified
+     * color matrix is null, this filter's color matrix will be reset to
+     * the identity matrix.
+     *
+     * @param array Array of floats used to transform colors, treated as a 4x5
+     *              matrix. The first 20 entries of the array are copied into
+     *              the filter. See {@link ColorMatrix}.
+     *
+     * @see #getColorMatrix()
+     * @see android.graphics.ColorMatrix#reset()
+     * @see #setColorMatrix(ColorMatrix)
+     *
+     * @throws ArrayIndexOutOfBoundsException if the specified array's
+     *         length is < 20
+     */
+    public void setColorMatrix(float[] array) {
+        if (array == null) {
+            mMatrix.reset();
+        } else {
+            if (array.length < 20) {
+                throw new ArrayIndexOutOfBoundsException();
+            }
+
+            mMatrix.set(array);
+        }
+        update();
+    }
+
+    private void update() {
+        final float[] colorMatrix = mMatrix.getArray();
+        destroyFilter(native_instance);
+        native_instance = nativeColorMatrixFilter(colorMatrix);
     }
 
     private static native long nativeColorMatrixFilter(float[] array);
-    private static native long nColorMatrixFilter(long nativeFilter, float[] array);
 }
diff --git a/graphics/java/android/graphics/ImageFormat.java b/graphics/java/android/graphics/ImageFormat.java
index 1bcfc18..e08ed50 100644
--- a/graphics/java/android/graphics/ImageFormat.java
+++ b/graphics/java/android/graphics/ImageFormat.java
@@ -187,6 +187,10 @@
      * == {@link android.media.Image.Plane#getPixelStride() vPlane.getPixelStride()};
      * ).</p>
      *
+     * <p>For example, the {@link android.media.Image} object can provide data
+     * in this format from a {@link android.hardware.camera2.CameraDevice}
+     * through a {@link android.media.ImageReader} object.</p>
+     *
      * @see android.media.Image
      * @see android.media.ImageReader
      * @see android.hardware.camera2.CameraDevice
@@ -203,8 +207,6 @@
      * needed information to interpret a raw sensor image must be queried from
      * the {@link android.hardware.camera2.CameraDevice} which produced the
      * image.</p>
-     *
-     * @hide
      */
     public static final int RAW_SENSOR = 0x20;
 
diff --git a/graphics/java/android/graphics/LargeBitmap.java b/graphics/java/android/graphics/LargeBitmap.java
index 238b32a..936c338 100644
--- a/graphics/java/android/graphics/LargeBitmap.java
+++ b/graphics/java/android/graphics/LargeBitmap.java
@@ -16,16 +16,6 @@
 
 package android.graphics;
 
-import android.os.Parcel;
-import android.os.Parcelable;
-import android.util.DisplayMetrics;
-
-import java.io.OutputStream;
-import java.nio.Buffer;
-import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
-import java.nio.ShortBuffer;
-
 /**
  * LargeBitmap can be used to decode a rectangle region from an image.
  * LargeBimap is particularly useful when an original image is large and
diff --git a/graphics/java/android/graphics/LayerRasterizer.java b/graphics/java/android/graphics/LayerRasterizer.java
index dc307c6..5b356089 100644
--- a/graphics/java/android/graphics/LayerRasterizer.java
+++ b/graphics/java/android/graphics/LayerRasterizer.java
@@ -21,11 +21,11 @@
         native_instance = nativeConstructor();
     }
     
-	/**	Add a new layer (above any previous layers) to the rasterizer.
-		The layer will extract those fields that affect the mask from
-		the specified paint, but will not retain a reference to the paint
-		object itself, so it may be reused without danger of side-effects.
-	*/
+    /** Add a new layer (above any previous layers) to the rasterizer.
+        The layer will extract those fields that affect the mask from
+        the specified paint, but will not retain a reference to the paint
+        object itself, so it may be reused without danger of side-effects.
+    */
     public void addLayer(Paint paint, float dx, float dy) {
         nativeAddLayer(native_instance, paint.mNativePaint, dx, dy);
     }
diff --git a/graphics/java/android/graphics/LightingColorFilter.java b/graphics/java/android/graphics/LightingColorFilter.java
index fbd2694..70a3fe8 100644
--- a/graphics/java/android/graphics/LightingColorFilter.java
+++ b/graphics/java/android/graphics/LightingColorFilter.java
@@ -21,18 +21,87 @@
 
 package android.graphics;
 
+/**
+ * A color filter that can be used to simulate simple lighting effects.
+ * A <code>LightingColorFilter</code> is defined by two parameters, one
+ * used to multiply the source color (called <code>colorMultiply</code>)
+ * and one used to add to the source color (called <code>colorAdd</code>).
+ * The alpha channel is left untouched by this color filter.
+ *
+ * Given a source color RGB, the resulting R'G'B' color is computed thusly:
+ * <pre>
+ * R' = R * colorMultiply.R + colorAdd.R
+ * G' = G * colorMultiply.G + colorAdd.G
+ * B' = B * colorMultiply.B + colorAdd.B
+ * </pre>
+ * The result is pinned to the <code>[0..255]</code> range for each channel.
+ */
 public class LightingColorFilter extends ColorFilter {
+    private int mMul;
+    private int mAdd;
 
     /**
-     * Create a colorfilter that multiplies the RGB channels by one color, and then adds a second color,
-     * pinning the result for each component to [0..255]. The alpha components of the mul and add arguments
-     * are ignored.
+     * Create a colorfilter that multiplies the RGB channels by one color,
+     * and then adds a second color. The alpha components of the mul and add
+     * arguments are ignored.
+     *
+     * @see #setColorMultiply(int)
+     * @see #setColorAdd(int)
      */
     public LightingColorFilter(int mul, int add) {
-        native_instance = native_CreateLightingFilter(mul, add);
-        nativeColorFilter = nCreateLightingFilter(native_instance, mul, add);
+        mMul = mul;
+        mAdd = add;
+        update();
+    }
+
+    /**
+     * Returns the RGB color used to multiply the source color when the
+     * color filter is applied.
+     *
+     * @see #setColorMultiply(int)
+     */
+    public int getColorMultiply() {
+        return mMul;
+    }
+
+    /**
+     * Specifies the RGB color used to multiply the source color when the
+     * color filter is applied.
+     * The alpha channel of this color is ignored.
+     *
+     * @see #getColorMultiply()
+     */
+    public void setColorMultiply(int mul) {
+        mMul = mul;
+        update();
+    }
+
+    /**
+     * Returns the RGB color that will be added to the source color
+     * when the color filter is applied.
+     *
+     * @see #setColorAdd(int)
+     */
+    public int getColorAdd() {
+        return mAdd;
+    }
+
+    /**
+     * Specifies the RGB that will be added to the source color when
+     * the color filter is applied.
+     * The alpha channel of this color is ignored.
+     *
+     * @see #getColorAdd()
+     */
+    public void setColorAdd(int add) {
+        mAdd = add;
+        update();
+    }
+
+    private void update() {
+        destroyFilter(native_instance);
+        native_instance = native_CreateLightingFilter(mMul, mAdd);
     }
 
     private static native long native_CreateLightingFilter(int mul, int add);
-    private static native long nCreateLightingFilter(long nativeFilter, int mul, int add);
 }
diff --git a/graphics/java/android/graphics/LinearGradient.java b/graphics/java/android/graphics/LinearGradient.java
index 9ad3e49..0eae67c 100644
--- a/graphics/java/android/graphics/LinearGradient.java
+++ b/graphics/java/android/graphics/LinearGradient.java
@@ -38,7 +38,7 @@
 
     private TileMode mTileMode;
 
-	/**	Create a shader that draws a linear gradient along a line.
+    /** Create a shader that draws a linear gradient along a line.
         @param x0           The x-coordinate for the start of the gradient line
         @param y0           The y-coordinate for the start of the gradient line
         @param x1           The x-coordinate for the end of the gradient line
@@ -48,8 +48,8 @@
                             each corresponding color in the colors array. If this is null,
                             the the colors are distributed evenly along the gradient line.
         @param  tile        The Shader tiling mode
-	*/
-	public LinearGradient(float x0, float y0, float x1, float y1, int colors[], float positions[],
+    */
+    public LinearGradient(float x0, float y0, float x1, float y1, int colors[], float positions[],
             TileMode tile) {
         if (colors.length < 2) {
             throw new IllegalArgumentException("needs >= 2 number of colors");
@@ -70,7 +70,7 @@
                 tile.nativeInt);
     }
 
-	/**	Create a shader that draws a linear gradient along a line.
+    /** Create a shader that draws a linear gradient along a line.
         @param x0       The x-coordinate for the start of the gradient line
         @param y0       The y-coordinate for the start of the gradient line
         @param x1       The x-coordinate for the end of the gradient line
@@ -78,8 +78,8 @@
         @param  color0  The color at the start of the gradient line.
         @param  color1  The color at the end of the gradient line.
         @param  tile    The Shader tiling mode
-	*/
-	public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1,
+    */
+    public LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1,
             TileMode tile) {
         mType = TYPE_COLOR_START_AND_COLOR_END;
         mX0 = x0;
@@ -118,7 +118,7 @@
 
     private native long nativeCreate1(float x0, float y0, float x1, float y1,
             int colors[], float positions[], int tileMode);
-	private native long nativeCreate2(float x0, float y0, float x1, float y1,
+    private native long nativeCreate2(float x0, float y0, float x1, float y1,
             int color0, int color1, int tileMode);
     private native long nativePostCreate1(long native_shader, float x0, float y0, float x1, float y1,
             int colors[], float positions[], int tileMode);
diff --git a/graphics/java/android/graphics/Matrix.java b/graphics/java/android/graphics/Matrix.java
index c8bcf26..66bf75c 100644
--- a/graphics/java/android/graphics/Matrix.java
+++ b/graphics/java/android/graphics/Matrix.java
@@ -352,13 +352,19 @@
     }
 
     /**
-     * Set the matrix to the concatenation of the two specified matrices,
-     * returning true if the the result can be represented. Either of the two
-     * matrices may also be the target matrix. this = a * b
+     * Set the matrix to the concatenation of the two specified matrices and
+     * return true.
+     *
+     * <p>Either of the two matrices may also be the target matrix, that is
+     * <code>matrixA.setConcat(matrixA, matrixB);</code> is valid.</p>
+     *
+     * <p class="note">In {@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1} and below, this
+     * function returns true only if the result can be represented. In
+     * {@link android.os.Build.VERSION_CODES#HONEYCOMB} and above, it always returns true.</p>
      */
     public boolean setConcat(Matrix a, Matrix b) {
-        return native_setConcat(native_instance, a.native_instance,
-                                b.native_instance);
+        native_setConcat(native_instance, a.native_instance, b.native_instance);
+        return true;
     }
 
     /**
@@ -366,7 +372,8 @@
      * M' = M * T(dx, dy)
      */
     public boolean preTranslate(float dx, float dy) {
-        return native_preTranslate(native_instance, dx, dy);
+        native_preTranslate(native_instance, dx, dy);
+        return true;
     }
 
     /**
@@ -374,7 +381,8 @@
      * M' = M * S(sx, sy, px, py)
      */
     public boolean preScale(float sx, float sy, float px, float py) {
-        return native_preScale(native_instance, sx, sy, px, py);
+        native_preScale(native_instance, sx, sy, px, py);
+        return true;
     }
 
     /**
@@ -382,7 +390,8 @@
      * M' = M * S(sx, sy)
      */
     public boolean preScale(float sx, float sy) {
-        return native_preScale(native_instance, sx, sy);
+        native_preScale(native_instance, sx, sy);
+        return true;
     }
 
     /**
@@ -390,7 +399,8 @@
      * M' = M * R(degrees, px, py)
      */
     public boolean preRotate(float degrees, float px, float py) {
-        return native_preRotate(native_instance, degrees, px, py);
+        native_preRotate(native_instance, degrees, px, py);
+        return true;
     }
 
     /**
@@ -398,7 +408,8 @@
      * M' = M * R(degrees)
      */
     public boolean preRotate(float degrees) {
-        return native_preRotate(native_instance, degrees);
+        native_preRotate(native_instance, degrees);
+        return true;
     }
 
     /**
@@ -406,7 +417,8 @@
      * M' = M * K(kx, ky, px, py)
      */
     public boolean preSkew(float kx, float ky, float px, float py) {
-        return native_preSkew(native_instance, kx, ky, px, py);
+        native_preSkew(native_instance, kx, ky, px, py);
+        return true;
     }
 
     /**
@@ -414,7 +426,8 @@
      * M' = M * K(kx, ky)
      */
     public boolean preSkew(float kx, float ky) {
-        return native_preSkew(native_instance, kx, ky);
+        native_preSkew(native_instance, kx, ky);
+        return true;
     }
 
     /**
@@ -422,7 +435,8 @@
      * M' = M * other
      */
     public boolean preConcat(Matrix other) {
-        return native_preConcat(native_instance, other.native_instance);
+        native_preConcat(native_instance, other.native_instance);
+        return true;
     }
 
     /**
@@ -430,7 +444,8 @@
      * M' = T(dx, dy) * M
      */
     public boolean postTranslate(float dx, float dy) {
-        return native_postTranslate(native_instance, dx, dy);
+        native_postTranslate(native_instance, dx, dy);
+        return true;
     }
 
     /**
@@ -438,7 +453,8 @@
      * M' = S(sx, sy, px, py) * M
      */
     public boolean postScale(float sx, float sy, float px, float py) {
-        return native_postScale(native_instance, sx, sy, px, py);
+        native_postScale(native_instance, sx, sy, px, py);
+        return true;
     }
 
     /**
@@ -446,7 +462,8 @@
      * M' = S(sx, sy) * M
      */
     public boolean postScale(float sx, float sy) {
-        return native_postScale(native_instance, sx, sy);
+        native_postScale(native_instance, sx, sy);
+        return true;
     }
 
     /**
@@ -454,7 +471,8 @@
      * M' = R(degrees, px, py) * M
      */
     public boolean postRotate(float degrees, float px, float py) {
-        return native_postRotate(native_instance, degrees, px, py);
+        native_postRotate(native_instance, degrees, px, py);
+        return true;
     }
 
     /**
@@ -462,7 +480,8 @@
      * M' = R(degrees) * M
      */
     public boolean postRotate(float degrees) {
-        return native_postRotate(native_instance, degrees);
+        native_postRotate(native_instance, degrees);
+        return true;
     }
 
     /**
@@ -470,7 +489,8 @@
      * M' = K(kx, ky, px, py) * M
      */
     public boolean postSkew(float kx, float ky, float px, float py) {
-        return native_postSkew(native_instance, kx, ky, px, py);
+        native_postSkew(native_instance, kx, ky, px, py);
+        return true;
     }
 
     /**
@@ -478,7 +498,8 @@
      * M' = K(kx, ky) * M
      */
     public boolean postSkew(float kx, float ky) {
-        return native_postSkew(native_instance, kx, ky);
+        native_postSkew(native_instance, kx, ky);
+        return true;
     }
 
     /**
@@ -486,7 +507,8 @@
      * M' = other * M
      */
     public boolean postConcat(Matrix other) {
-        return native_postConcat(native_instance, other.native_instance);
+        native_postConcat(native_instance, other.native_instance);
+        return true;
     }
 
     /** Controlls how the src rect should align into the dst rect for
@@ -828,41 +850,41 @@
                                         float kx, float ky, float px, float py);
     private static native void native_setSkew(long native_object,
                                               float kx, float ky);
-    private static native boolean native_setConcat(long native_object,
-                                                   long native_a,
-                                                   long native_b);
-    private static native boolean native_preTranslate(long native_object,
-                                                      float dx, float dy);
-    private static native boolean native_preScale(long native_object,
-                                        float sx, float sy, float px, float py);
-    private static native boolean native_preScale(long native_object,
-                                                  float sx, float sy);
-    private static native boolean native_preRotate(long native_object,
-                                            float degrees, float px, float py);
-    private static native boolean native_preRotate(long native_object,
-                                                   float degrees);
-    private static native boolean native_preSkew(long native_object,
-                                        float kx, float ky, float px, float py);
-    private static native boolean native_preSkew(long native_object,
-                                                 float kx, float ky);
-    private static native boolean native_preConcat(long native_object,
-                                                   long native_other_matrix);
-    private static native boolean native_postTranslate(long native_object,
-                                                       float dx, float dy);
-    private static native boolean native_postScale(long native_object,
-                                        float sx, float sy, float px, float py);
-    private static native boolean native_postScale(long native_object,
-                                                   float sx, float sy);
-    private static native boolean native_postRotate(long native_object,
-                                            float degrees, float px, float py);
-    private static native boolean native_postRotate(long native_object,
-                                                    float degrees);
-    private static native boolean native_postSkew(long native_object,
-                                        float kx, float ky, float px, float py);
-    private static native boolean native_postSkew(long native_object,
-                                                  float kx, float ky);
-    private static native boolean native_postConcat(long native_object,
-                                                    long native_other_matrix);
+    private static native void native_setConcat(long native_object,
+                                                long native_a,
+                                                long native_b);
+    private static native void native_preTranslate(long native_object,
+                                                   float dx, float dy);
+    private static native void native_preScale(long native_object,
+                                               float sx, float sy, float px, float py);
+    private static native void native_preScale(long native_object,
+                                               float sx, float sy);
+    private static native void native_preRotate(long native_object,
+                                                float degrees, float px, float py);
+    private static native void native_preRotate(long native_object,
+                                                float degrees);
+    private static native void native_preSkew(long native_object,
+                                              float kx, float ky, float px, float py);
+    private static native void native_preSkew(long native_object,
+                                              float kx, float ky);
+    private static native void native_preConcat(long native_object,
+                                                long native_other_matrix);
+    private static native void native_postTranslate(long native_object,
+                                                    float dx, float dy);
+    private static native void native_postScale(long native_object,
+                                                float sx, float sy, float px, float py);
+    private static native void native_postScale(long native_object,
+                                                float sx, float sy);
+    private static native void native_postRotate(long native_object,
+                                                 float degrees, float px, float py);
+    private static native void native_postRotate(long native_object,
+                                                 float degrees);
+    private static native void native_postSkew(long native_object,
+                                               float kx, float ky, float px, float py);
+    private static native void native_postSkew(long native_object,
+                                               float kx, float ky);
+    private static native void native_postConcat(long native_object,
+                                                 long native_other_matrix);
     private static native boolean native_setRectToRect(long native_object,
                                                 RectF src, RectF dst, int stf);
     private static native boolean native_setPolyToPoly(long native_object,
diff --git a/graphics/java/android/graphics/Outline.java b/graphics/java/android/graphics/Outline.java
new file mode 100644
index 0000000..b5c0801
--- /dev/null
+++ b/graphics/java/android/graphics/Outline.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2014 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 android.graphics;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.graphics.drawable.Drawable;
+import android.view.View;
+
+/**
+ * Defines a simple shape, used for bounding graphical regions.
+ *
+ * Can be used with a View, or computed by a Drawable, to drive the shape of shadows cast by a
+ * View.
+ *
+ * @see View#setOutline(Outline)
+ * @see Drawable#getOutline(Outline)
+ */
+public final class Outline {
+    /** @hide */
+    public Rect mRect;
+
+    /** @hide */
+    public float mRadius;
+
+    /** @hide */
+    public Path mPath;
+
+    /**
+     * Constructs an invalid Outline. Call one of the setter methods to make
+     * the outline valid for use with a View.
+     */
+    public Outline() {}
+
+    /**
+     * Constructs an Outline with a copy of the data in src.
+     */
+    public Outline(@Nullable Outline src) {
+        set(src);
+    }
+
+    /** @hide */
+    public void markInvalid() {
+        mRadius = 0;
+        mRect = null;
+        mPath = null;
+    }
+
+    /**
+     * Returns whether the Outline is valid for use with a View.
+     * <p>
+     * Outlines are invalid when constructed until a setter method is called.
+     */
+    public boolean isValid() {
+        return mRect != null || mPath != null;
+    }
+
+    /**
+     * Replace the contents of this Outline with the contents of src.
+     *
+     * @param src Source outline to copy from.
+     */
+    public void set(@Nullable Outline src) {
+        if (src == null) {
+            mRadius = 0;
+            mRect = null;
+            mPath = null;
+        } else {
+            if (src.mPath != null) {
+                if (mPath == null) {
+                    mPath = new Path();
+                }
+                mPath.set(src.mPath);
+                mRect = null;
+            }
+            if (src.mRect != null) {
+                if (mRect == null) {
+                    mRect = new Rect();
+                }
+                mRect.set(src.mRect);
+            }
+            mRadius = src.mRadius;
+        }
+    }
+
+    /**
+     * Sets the Outline to the rounded rect defined by the input rect, and corner radius.
+     */
+    public void setRect(int left, int top, int right, int bottom) {
+        setRoundRect(left, top, right, bottom, 0.0f);
+    }
+
+    /**
+     * Convenience for {@link #setRect(int, int, int, int)}
+     */
+    public void setRect(@NonNull Rect rect) {
+        setRect(rect.left, rect.top, rect.right, rect.bottom);
+    }
+
+    /**
+     * Sets the Outline to the rounded rect defined by the input rect, and corner radius.
+     *
+     * Passing a zero radius is equivalent to calling {@link #setRect(int, int, int, int)}
+     */
+    public void setRoundRect(int left, int top, int right, int bottom, float radius) {
+        if (mRect == null) mRect = new Rect();
+        mRect.set(left, top, right, bottom);
+        mRadius = radius;
+        mPath = null;
+    }
+
+    /**
+     * Convenience for {@link #setRoundRect(int, int, int, int, float)}
+     */
+    public void setRoundRect(@NonNull Rect rect, float radius) {
+        setRoundRect(rect.left, rect.top, rect.right, rect.bottom, radius);
+    }
+
+    /**
+     * Sets the outline to the oval defined by input rect.
+     */
+    public void setOval(int left, int top, int right, int bottom) {
+        mRect = null;
+        if (mPath == null) mPath = new Path();
+        mPath.reset();
+        mPath.addOval(left, top, right, bottom, Path.Direction.CW);
+    }
+
+    /**
+     * Convenience for {@link #setOval(int, int, int, int)}
+     */
+    public void setOval(@NonNull Rect rect) {
+        setOval(rect.left, rect.top, rect.right, rect.bottom);
+    }
+
+    /**
+     * Sets the Constructs an Outline from a {@link android.graphics.Path#isConvex() convex path}.
+     */
+    public void setConvexPath(@NonNull Path convexPath) {
+        if (!convexPath.isConvex()) {
+            throw new IllegalArgumentException("path must be convex");
+        }
+        if (mPath == null) mPath = new Path();
+
+        mRect = null;
+        mRadius = -1.0f;
+        mPath.set(convexPath);
+    }
+}
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index 33832a7..1e1128e 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -33,6 +33,10 @@
      * @hide
      */
     public long mNativePaint;
+    /**
+     * @hide
+     */
+    public long mNativeTypeface;
 
     private ColorFilter mColorFilter;
     private MaskFilter  mMaskFilter;
@@ -481,6 +485,7 @@
         mRasterizer = null;
         mShader = null;
         mTypeface = null;
+        mNativeTypeface = 0;
         mXfermode = null;
 
         mHasCompatScaling = false;
@@ -495,6 +500,7 @@
 
         mBidiFlags = BIDI_DEFAULT_LTR;
         setTextLocale(Locale.getDefault());
+        setElegantTextHeight(false);
     }
     
     /**
@@ -525,6 +531,7 @@
             mShader = null;
         }
         mTypeface = paint.mTypeface;
+        mNativeTypeface = paint.mNativeTypeface;
         mXfermode = paint.mXfermode;
 
         mHasCompatScaling = paint.mHasCompatScaling;
@@ -1087,6 +1094,7 @@
         }
         native_setTypeface(mNativePaint, typefaceNative);
         mTypeface = typeface;
+        mNativeTypeface = typefaceNative;
         return typeface;
     }
     
@@ -1214,6 +1222,22 @@
     }
 
     /**
+     * Get the elegant metrics flag.
+     *
+     * @return true if elegant metrics are enabled for text drawing.
+     */
+    public native boolean isElegantTextHeight();
+
+    /**
+     * Set the paint's elegant height metrics flag. This setting selects font
+     * variants that have not been compacted to fit Latin-based vertical
+     * metrics, and also increases top and bottom bounds to provide more space.
+     *
+     * @param elegant set the paint's elegant metrics flag for drawing text.
+     */
+    public native void setElegantTextHeight(boolean elegant);
+
+    /**
      * Return the paint's text size.
      *
      * @return the paint's text size.
diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java
index b5a1f64..c600f47 100644
--- a/graphics/java/android/graphics/Path.java
+++ b/graphics/java/android/graphics/Path.java
@@ -16,8 +16,6 @@
 
 package android.graphics;
 
-import android.view.HardwareRenderer;
-
 /**
  * The Path class encapsulates compound (multiple contour) geometric paths
  * consisting of straight line segments, quadratic curves, and cubic curves.
@@ -39,7 +37,6 @@
      * @hide
      */
     public Region rects;
-    private boolean mDetectSimplePaths;
     private Direction mLastDirection = null;
 
     /**
@@ -47,7 +44,6 @@
      */
     public Path() {
         mNativePath = init1();
-        mDetectSimplePaths = HardwareRenderer.isAvailable();
     }
 
     /**
@@ -65,7 +61,6 @@
             }
         }
         mNativePath = init2(valNative);
-        mDetectSimplePaths = HardwareRenderer.isAvailable();
     }
     
     /**
@@ -74,10 +69,8 @@
      */
     public void reset() {
         isSimplePath = true;
-        if (mDetectSimplePaths) {
-            mLastDirection = null;
-            if (rects != null) rects.setEmpty();
-        }
+        mLastDirection = null;
+        if (rects != null) rects.setEmpty();
         // We promised not to change this, so preserve it around the native
         // call, which does now reset fill type.
         final FillType fillType = getFillType();
@@ -91,10 +84,8 @@
      */
     public void rewind() {
         isSimplePath = true;
-        if (mDetectSimplePaths) {
-            mLastDirection = null;
-            if (rects != null) rects.setEmpty();
-        }
+        mLastDirection = null;
+        if (rects != null) rects.setEmpty();
         native_rewind(mNativePath);
     }
 
@@ -177,6 +168,21 @@
     }
 
     /**
+     * Returns the path's convexity, as defined by the content of the path.
+     * <p>
+     * A path is convex if it has a single contour, and only ever curves in a
+     * single direction.
+     * <p>
+     * This function will calculate the convexity of the path from its control
+     * points, and cache the result.
+     *
+     * @return True if the path is convex.
+     */
+    public boolean isConvex() {
+        return native_isConvex(mNativePath);
+    }
+
+    /**
      * Enum for the ways a path may be filled.
      */
     public enum FillType {
@@ -233,7 +239,7 @@
     public void setFillType(FillType ft) {
         native_setFillType(mNativePath, ft.nativeInt);
     }
-    
+
     /**
      * Returns true if the filltype is one of the INVERSE variants
      *
@@ -241,18 +247,18 @@
      */
     public boolean isInverseFillType() {
         final int ft = native_getFillType(mNativePath);
-        return (ft & 2) != 0;
+        return (ft & FillType.INVERSE_WINDING.nativeInt) != 0;
     }
-    
+
     /**
      * Toggles the INVERSE state of the filltype
      */
     public void toggleInverseFillType() {
         int ft = native_getFillType(mNativePath);
-        ft ^= 2;
+        ft ^= FillType.INVERSE_WINDING.nativeInt;
         native_setFillType(mNativePath, ft);
     }
-    
+
     /**
      * Returns true if the path is empty (contains no lines or curves)
      *
@@ -475,16 +481,14 @@
     }
     
     private void detectSimplePath(float left, float top, float right, float bottom, Direction dir) {
-        if (mDetectSimplePaths) {
-            if (mLastDirection == null) {
-                mLastDirection = dir;
-            }
-            if (mLastDirection != dir) {
-                isSimplePath = false;
-            } else {
-                if (rects == null) rects = new Region();
-                rects.op((int) left, (int) top, (int) right, (int) bottom, Region.Op.UNION);
-            }
+        if (mLastDirection == null) {
+            mLastDirection = dir;
+        }
+        if (mLastDirection != dir) {
+            isSimplePath = false;
+        } else {
+            if (rects == null) rects = new Region();
+            rects.op((int) left, (int) top, (int) right, (int) bottom, Region.Op.UNION);
         }
     }
 
@@ -495,11 +499,7 @@
      * @param dir  The direction to wind the rectangle's contour
      */
     public void addRect(RectF rect, Direction dir) {
-        if (rect == null) {
-            throw new NullPointerException("need rect parameter");
-        }
-        detectSimplePath(rect.left, rect.top, rect.right, rect.bottom, dir);
-        native_addRect(mNativePath, rect, dir.nativeInt);
+        addRect(rect.left, rect.top, rect.right, rect.bottom, dir);
     }
 
     /**
@@ -523,11 +523,17 @@
      * @param dir  The direction to wind the oval's contour
      */
     public void addOval(RectF oval, Direction dir) {
-        if (oval == null) {
-            throw new NullPointerException("need oval parameter");
-        }
+        addOval(oval.left, oval.top, oval.right, oval.bottom, dir);
+    }
+
+    /**
+     * Add a closed oval contour to the path
+     *
+     * @param dir The direction to wind the oval's contour
+     */
+    public void addOval(float left, float top, float right, float bottom, Direction dir) {
         isSimplePath = false;
-        native_addOval(mNativePath, oval, dir.nativeInt);
+        native_addOval(mNativePath, left, top, right, bottom, dir.nativeInt);
     }
 
     /**
@@ -703,11 +709,34 @@
         return mNativePath;
     }
 
+    /**
+     * Approximate the <code>Path</code> with a series of line segments.
+     * This returns float[] with the array containing point components.
+     * There are three components for each point, in order:
+     * <ul>
+     *     <li>Fraction along the length of the path that the point resides</li>
+     *     <li>The x coordinate of the point</li>
+     *     <li>The y coordinate of the point</li>
+     * </ul>
+     * <p>Two points may share the same fraction along its length when there is
+     * a move action within the Path.</p>
+     *
+     * @param acceptableError The acceptable error for a line on the
+     *                        Path. Typically this would be 0.5 so that
+     *                        the error is less than half a pixel.
+     * @return An array of components for points approximating the Path.
+     * @hide
+     */
+    public float[] approximate(float acceptableError) {
+        return native_approximate(mNativePath, acceptableError);
+    }
+
     private static native long init1();
     private static native long init2(long nPath);
     private static native void native_reset(long nPath);
     private static native void native_rewind(long nPath);
     private static native void native_set(long native_dst, long native_src);
+    private static native boolean native_isConvex(long nPath);
     private static native int native_getFillType(long nPath);
     private static native void native_setFillType(long nPath, int ft);
     private static native boolean native_isEmpty(long nPath);
@@ -729,10 +758,10 @@
     private static native void native_arcTo(long nPath, RectF oval,
                     float startAngle, float sweepAngle, boolean forceMoveTo);
     private static native void native_close(long nPath);
-    private static native void native_addRect(long nPath, RectF rect, int dir);
     private static native void native_addRect(long nPath, float left, float top,
                                             float right, float bottom, int dir);
-    private static native void native_addOval(long nPath, RectF oval, int dir);
+    private static native void native_addOval(long nPath, float left, float top,
+            float right, float bottom, int dir);
     private static native void native_addCircle(long nPath, float x, float y, float radius, int dir);
     private static native void native_addArc(long nPath, RectF oval,
                                             float startAngle, float sweepAngle);
@@ -749,4 +778,5 @@
     private static native void native_transform(long nPath, long matrix);
     private static native boolean native_op(long path1, long path2, int op, long result);
     private static native void finalizer(long nPath);
+    private static native float[] native_approximate(long nPath, float error);
 }
diff --git a/graphics/java/android/graphics/PathMeasure.java b/graphics/java/android/graphics/PathMeasure.java
index e56716f..ba2228c 100644
--- a/graphics/java/android/graphics/PathMeasure.java
+++ b/graphics/java/android/graphics/PathMeasure.java
@@ -113,9 +113,15 @@
      * segment(s). If the segment is zero-length, return false, else return
      * true. startD and stopD are pinned to legal values (0..getLength()).
      * If startD <= stopD then return false (and leave dst untouched).
-     * Begin the segment with a moveTo if startWithMoveTo is true
+     * Begin the segment with a moveTo if startWithMoveTo is true.
+     *
+     * <p>On {@link android.os.Build.VERSION_CODES#KITKAT} and earlier
+     * releases, the resulting path may not display on a hardware-accelerated
+     * Canvas. A simple workaround is to add a single operation to this path,
+     * such as <code>dst.rLineTo(0, 0)</code>.</p>
      */
     public boolean getSegment(float startD, float stopD, Path dst, boolean startWithMoveTo) {
+        dst.isSimplePath = false;
         return native_getSegment(native_instance, startD, stopD, dst.ni(), startWithMoveTo);
     }
 
diff --git a/graphics/java/android/graphics/PorterDuffColorFilter.java b/graphics/java/android/graphics/PorterDuffColorFilter.java
index 894284f..c078c1c 100644
--- a/graphics/java/android/graphics/PorterDuffColorFilter.java
+++ b/graphics/java/android/graphics/PorterDuffColorFilter.java
@@ -16,20 +16,84 @@
 
 package android.graphics;
 
+/**
+ * A color filter that can be used to tint the source pixels using a single
+ * color and a specific {@link PorterDuff Porter-Duff composite mode}.
+ */
 public class PorterDuffColorFilter extends ColorFilter {
+    private int mColor;
+    private PorterDuff.Mode mMode;
+
     /**
-     * Create a colorfilter that uses the specified color and porter-duff mode.
+     * Create a color filter that uses the specified color and Porter-Duff mode.
      *
-     * @param srcColor       The source color used with the specified
-     *                       porter-duff mode
-     * @param mode           The porter-duff mode that is applied
+     * @param color The ARGB source color used with the specified Porter-Duff mode
+     * @param mode The porter-duff mode that is applied
+     *
+     * @see Color
+     * @see #setColor(int)
+     * @see #setMode(android.graphics.PorterDuff.Mode)
      */
-    public PorterDuffColorFilter(int srcColor, PorterDuff.Mode mode) {
-        native_instance = native_CreatePorterDuffFilter(srcColor, mode.nativeInt);
-        nativeColorFilter = nCreatePorterDuffFilter(native_instance, srcColor, mode.nativeInt);
+    public PorterDuffColorFilter(int color, PorterDuff.Mode mode) {
+        mColor = color;
+        mMode = mode;
+        update();
+    }
+
+    /**
+     * Returns the ARGB color used to tint the source pixels when this filter
+     * is applied.
+     *
+     * @see Color
+     * @see #setColor(int)
+     */
+    public int getColor() {
+        return mColor;
+    }
+
+    /**
+     * Specifies the color to tint the source pixels with when this color
+     * filter is applied.
+     *
+     * @param color An ARGB {@link Color color}
+     *
+     * @see Color
+     * @see #getColor()
+     * @see #getMode()
+     */
+    public void setColor(int color) {
+        mColor = color;
+        update();
+    }
+
+    /**
+     * Returns the Porter-Duff mode used to composite this color filter's
+     * color with the source pixel when this filter is applied.
+     *
+     * @see PorterDuff
+     * @see #setMode(android.graphics.PorterDuff.Mode)
+     */
+    public PorterDuff.Mode getMode() {
+        return mMode;
+    }
+
+    /**
+     * Specifies the Porter-Duff mode to use when compositing this color
+     * filter's color with the source pixel at draw time.
+     *
+     * @see PorterDuff
+     * @see #getMode()
+     * @see #getColor()
+     */
+    public void setMode(PorterDuff.Mode mode) {
+        mMode = mode;
+        update();
+    }
+
+    private void update() {
+        destroyFilter(native_instance);
+        native_instance = native_CreatePorterDuffFilter(mColor, mMode.nativeInt);
     }
 
     private static native long native_CreatePorterDuffFilter(int srcColor, int porterDuffMode);
-    private static native long nCreatePorterDuffFilter(long nativeFilter, int srcColor,
-            int porterDuffMode);
 }
diff --git a/graphics/java/android/graphics/RadialGradient.java b/graphics/java/android/graphics/RadialGradient.java
index f10e5d6..c00c612 100644
--- a/graphics/java/android/graphics/RadialGradient.java
+++ b/graphics/java/android/graphics/RadialGradient.java
@@ -37,17 +37,17 @@
 
     private TileMode mTileMode;
 
-	/**	Create a shader that draws a radial gradient given the center and radius.
+    /** Create a shader that draws a radial gradient given the center and radius.
         @param x        The x-coordinate of the center of the radius
         @param y        The y-coordinate of the center of the radius
-		@param radius   Must be positive. The radius of the circle for this gradient
+        @param radius   Must be positive. The radius of the circle for this gradient
         @param colors   The colors to be distributed between the center and edge of the circle
         @param positions May be NULL. The relative position of
                         each corresponding color in the colors array. If this is NULL,
                         the the colors are distributed evenly between the center and edge of the circle.
         @param  tile    The Shader tiling mode
-	*/
-	public RadialGradient(float x, float y, float radius,
+    */
+    public RadialGradient(float x, float y, float radius,
                           int colors[], float positions[], TileMode tile) {
         if (radius <= 0) {
             throw new IllegalArgumentException("radius must be > 0");
@@ -70,15 +70,15 @@
                 tile.nativeInt);
     }
 
-	/**	Create a shader that draws a radial gradient given the center and radius.
+    /** Create a shader that draws a radial gradient given the center and radius.
         @param x        The x-coordinate of the center of the radius
         @param y        The y-coordinate of the center of the radius
-		@param radius   Must be positive. The radius of the circle for this gradient
+        @param radius   Must be positive. The radius of the circle for this gradient
         @param color0   The color at the center of the circle.
         @param color1   The color at the edge of the circle.
         @param tile     The Shader tiling mode
-	*/
-	public RadialGradient(float x, float y, float radius,
+    */
+    public RadialGradient(float x, float y, float radius,
                           int color0, int color1, TileMode tile) {
         if (radius <= 0) {
             throw new IllegalArgumentException("radius must be > 0");
@@ -119,7 +119,7 @@
 
     private static native long nativeCreate1(float x, float y, float radius,
             int colors[], float positions[], int tileMode);
-	private static native long nativeCreate2(float x, float y, float radius,
+    private static native long nativeCreate2(float x, float y, float radius,
             int color0, int color1, int tileMode);
 
     private static native long nativePostCreate1(long native_shader, float x, float y, float radius,
diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java
index 1f8e223..d877502 100644
--- a/graphics/java/android/graphics/SurfaceTexture.java
+++ b/graphics/java/android/graphics/SurfaceTexture.java
@@ -70,7 +70,7 @@
      * These fields are used by native code, do not access or modify.
      */
     private long mSurfaceTexture;
-    private long mBufferQueue;
+    private long mProducer;
     private long mFrameAvailableListener;
 
     /**
diff --git a/graphics/java/android/graphics/TemporaryBuffer.java b/graphics/java/android/graphics/TemporaryBuffer.java
index c5b8143..36a2275 100644
--- a/graphics/java/android/graphics/TemporaryBuffer.java
+++ b/graphics/java/android/graphics/TemporaryBuffer.java
@@ -31,7 +31,7 @@
         }
 
         if (buf == null || buf.length < len) {
-            buf = new char[ArrayUtils.idealCharArraySize(len)];
+            buf = ArrayUtils.newUnpaddedCharArray(len);
         }
 
         return buf;
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 936ea4f..73e0e8d 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -49,7 +49,10 @@
     private static final LongSparseArray<SparseArray<Typeface>> sTypefaceCache =
             new LongSparseArray<SparseArray<Typeface>>(3);
 
-    long native_instance;
+    /**
+     * @hide
+     */
+    public long native_instance;
 
     // Style
     public static final int NORMAL = 0;
diff --git a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
index 9accbbc..a37ceef 100644
--- a/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedRotateDrawable.java
@@ -21,10 +21,12 @@
 import android.graphics.ColorFilter;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.util.AttributeSet;
 import android.util.TypedValue;
 import android.util.Log;
 import android.os.SystemClock;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -223,7 +225,7 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
 
         final TypedArray a = r.obtainAttributes(attrs, R.styleable.AnimatedRotateDrawable);
@@ -258,7 +260,7 @@
                 continue;
             }
 
-            if ((drawable = Drawable.createFromXmlInner(r, parser, attrs)) == null) {
+            if ((drawable = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme)) == null) {
                 Log.w("drawable", "Bad element under <animated-rotate>: "
                         + parser .getName());
             }
diff --git a/graphics/java/android/graphics/drawable/AnimationDrawable.java b/graphics/java/android/graphics/drawable/AnimationDrawable.java
index bde978d..3f94e26 100644
--- a/graphics/java/android/graphics/drawable/AnimationDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimationDrawable.java
@@ -23,6 +23,7 @@
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.os.SystemClock;
 import android.util.AttributeSet;
 
@@ -81,6 +82,7 @@
 public class AnimationDrawable extends DrawableContainer implements Runnable, Animatable {
     private final AnimationState mAnimationState;
     private int mCurFrame = -1;
+    private boolean mAnimating;
     private boolean mMutated;
 
     public AnimationDrawable() {
@@ -137,7 +139,7 @@
      * @return true if the animation is running, false otherwise
      */
     public boolean isRunning() {
-        return mCurFrame > -1;
+        return mAnimating;
     }
 
     /**
@@ -153,6 +155,7 @@
     @Override
     public void unscheduleSelf(Runnable what) {
         mCurFrame = -1;
+        mAnimating = false;
         super.unscheduleSelf(what);
     }
 
@@ -222,18 +225,19 @@
         }
         mCurFrame = frame;
         selectDrawable(frame);
-        if (unschedule) {
+        if (unschedule || animate) {
             unscheduleSelf(this);
         }
         if (animate) {
-            // Unscheduling may have clobbered this value; restore it to record that we're animating
+            // Unscheduling may have clobbered these values; restore them
             mCurFrame = frame;
+            mAnimating = true;
             scheduleSelf(this, SystemClock.uptimeMillis() + mAnimationState.mDurations[frame]);
         }
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
         
         TypedArray a = r.obtainAttributes(attrs,
@@ -289,7 +293,7 @@
                             ": <item> tag requires a 'drawable' attribute or child tag" +
                             " defining a drawable");
                 }
-                dr = Drawable.createFromXmlInner(r, parser, attrs);
+                dr = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme);
             }
             
             mAnimationState.addFrame(dr, duration);
diff --git a/graphics/java/android/graphics/drawable/BitmapDrawable.java b/graphics/java/android/graphics/drawable/BitmapDrawable.java
index 98e3386..60b4615 100644
--- a/graphics/java/android/graphics/drawable/BitmapDrawable.java
+++ b/graphics/java/android/graphics/drawable/BitmapDrawable.java
@@ -16,7 +16,9 @@
 
 package android.graphics.drawable;
 
+import android.content.res.ColorStateList;
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -26,6 +28,8 @@
 import android.graphics.Matrix;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
 import android.graphics.Shader;
 import android.graphics.Xfermode;
@@ -33,6 +37,9 @@
 import android.util.DisplayMetrics;
 import android.util.LayoutDirection;
 import android.view.Gravity;
+
+import com.android.internal.R;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -46,8 +53,8 @@
  * information, see the guide to <a
  * href="{@docRoot}guide/topics/resources/drawable-resource.html">Drawable Resources</a>.</p>
  * <p>
- * Also see the {@link android.graphics.Bitmap} class, which handles the management and 
- * transformation of raw bitmap graphics, and should be used when drawing to a 
+ * Also see the {@link android.graphics.Bitmap} class, which handles the management and
+ * transformation of raw bitmap graphics, and should be used when drawing to a
  * {@link android.graphics.Canvas}.
  * </p>
  *
@@ -65,13 +72,14 @@
             Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG;
     private BitmapState mBitmapState;
     private Bitmap mBitmap;
+    private PorterDuffColorFilter mTintFilter;
     private int mTargetDensity;
 
     private final Rect mDstRect = new Rect();   // Gravity.apply() sets this
 
     private boolean mApplyGravity;
     private boolean mMutated;
-    
+
      // These are scaled to match the target density.
     private int mBitmapWidth;
     private int mBitmapHeight;
@@ -109,7 +117,7 @@
      */
     @Deprecated
     public BitmapDrawable(Bitmap bitmap) {
-        this(new BitmapState(bitmap), null);
+        this(new BitmapState(bitmap), null, null);
     }
 
     /**
@@ -117,7 +125,7 @@
      * the display metrics of the resources.
      */
     public BitmapDrawable(Resources res, Bitmap bitmap) {
-        this(new BitmapState(bitmap), res);
+        this(new BitmapState(bitmap), res, null);
         mBitmapState.mTargetDensity = mTargetDensity;
     }
 
@@ -128,7 +136,7 @@
      */
     @Deprecated
     public BitmapDrawable(String filepath) {
-        this(new BitmapState(BitmapFactory.decodeFile(filepath)), null);
+        this(new BitmapState(BitmapFactory.decodeFile(filepath)), null, null);
         if (mBitmap == null) {
             android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + filepath);
         }
@@ -139,7 +147,7 @@
      */
     @SuppressWarnings({"UnusedParameters"})
     public BitmapDrawable(Resources res, String filepath) {
-        this(new BitmapState(BitmapFactory.decodeFile(filepath)), null);
+        this(new BitmapState(BitmapFactory.decodeFile(filepath)), null, null);
         mBitmapState.mTargetDensity = mTargetDensity;
         if (mBitmap == null) {
             android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + filepath);
@@ -153,7 +161,7 @@
      */
     @Deprecated
     public BitmapDrawable(java.io.InputStream is) {
-        this(new BitmapState(BitmapFactory.decodeStream(is)), null);
+        this(new BitmapState(BitmapFactory.decodeStream(is)), null, null);
         if (mBitmap == null) {
             android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + is);
         }
@@ -164,7 +172,7 @@
      */
     @SuppressWarnings({"UnusedParameters"})
     public BitmapDrawable(Resources res, java.io.InputStream is) {
-        this(new BitmapState(BitmapFactory.decodeStream(is)), null);
+        this(new BitmapState(BitmapFactory.decodeStream(is)), null, null);
         mBitmapState.mTargetDensity = mTargetDensity;
         if (mBitmap == null) {
             android.util.Log.w("BitmapDrawable", "BitmapDrawable cannot decode " + is);
@@ -189,7 +197,7 @@
         mBitmapWidth = mBitmap.getScaledWidth(mTargetDensity);
         mBitmapHeight = mBitmap.getScaledHeight(mTargetDensity);
     }
-    
+
     private void setBitmap(Bitmap bitmap) {
         if (bitmap != mBitmap) {
             mBitmap = bitmap;
@@ -274,7 +282,7 @@
      *
      * @param mipMap True if the bitmap should use mipmaps, false otherwise.
      *
-     * @see #hasMipMap() 
+     * @see #hasMipMap()
      */
     public void setMipMap(boolean mipMap) {
         if (mBitmapState.mBitmap != null) {
@@ -289,7 +297,7 @@
      * @return True if the mipmap hint is set, false otherwise. If the bitmap
      *         is null, this method always returns false.
      *
-     * @see #setMipMap(boolean) 
+     * @see #setMipMap(boolean)
      * @attr ref android.R.styleable#BitmapDrawable_mipMap
      */
     public boolean hasMipMap() {
@@ -299,10 +307,10 @@
     /**
      * Enables or disables anti-aliasing for this drawable. Anti-aliasing affects
      * the edges of the bitmap only so it applies only when the drawable is rotated.
-     * 
+     *
      * @param aa True if the bitmap should be anti-aliased, false otherwise.
      *
-     * @see #hasAntiAlias() 
+     * @see #hasAntiAlias()
      */
     public void setAntiAlias(boolean aa) {
         mBitmapState.mPaint.setAntiAlias(aa);
@@ -334,7 +342,7 @@
 
     /**
      * Indicates the repeat behavior of this drawable on the X axis.
-     * 
+     *
      * @return {@link Shader.TileMode#CLAMP} if the bitmap does not repeat,
      *         {@link Shader.TileMode#REPEAT} or {@link Shader.TileMode#MIRROR} otherwise.
      */
@@ -344,10 +352,10 @@
 
     /**
      * Indicates the repeat behavior of this drawable on the Y axis.
-     * 
+     *
      * @return {@link Shader.TileMode#CLAMP} if the bitmap does not repeat,
      *         {@link Shader.TileMode#REPEAT} or {@link Shader.TileMode#MIRROR} otherwise.
-     */    
+     */
     public Shader.TileMode getTileModeY() {
         return mBitmapState.mTileModeY;
     }
@@ -357,11 +365,11 @@
      * does not repeat its bitmap. Using {@link Shader.TileMode#REPEAT} or
      * {@link Shader.TileMode#MIRROR} the bitmap can be repeated (or tiled) if the bitmap
      * is smaller than this drawable.
-     * 
+     *
      * @param mode The repeat mode for this drawable.
-     * 
-     * @see #setTileModeY(android.graphics.Shader.TileMode) 
-     * @see #setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode) 
+     *
+     * @see #setTileModeY(android.graphics.Shader.TileMode)
+     * @see #setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode)
      */
     public void setTileModeX(Shader.TileMode mode) {
         setTileModeXY(mode, mBitmapState.mTileModeY);
@@ -372,12 +380,12 @@
      * does not repeat its bitmap. Using {@link Shader.TileMode#REPEAT} or
      * {@link Shader.TileMode#MIRROR} the bitmap can be repeated (or tiled) if the bitmap
      * is smaller than this drawable.
-     * 
+     *
      * @param mode The repeat mode for this drawable.
-     * 
-     * @see #setTileModeX(android.graphics.Shader.TileMode) 
-     * @see #setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode) 
-     */    
+     *
+     * @see #setTileModeX(android.graphics.Shader.TileMode)
+     * @see #setTileModeXY(android.graphics.Shader.TileMode, android.graphics.Shader.TileMode)
+     */
     public final void setTileModeY(Shader.TileMode mode) {
         setTileModeXY(mBitmapState.mTileModeX, mode);
     }
@@ -387,12 +395,12 @@
      * does not repeat its bitmap. Using {@link Shader.TileMode#REPEAT} or
      * {@link Shader.TileMode#MIRROR} the bitmap can be repeated (or tiled) if the bitmap
      * is smaller than this drawable.
-     * 
+     *
      * @param xmode The X repeat mode for this drawable.
      * @param ymode The Y repeat mode for this drawable.
-     * 
+     *
      * @see #setTileModeX(android.graphics.Shader.TileMode)
-     * @see #setTileModeY(android.graphics.Shader.TileMode) 
+     * @see #setTileModeY(android.graphics.Shader.TileMode)
      */
     public void setTileModeXY(Shader.TileMode xmode, Shader.TileMode ymode) {
         final BitmapState state = mBitmapState;
@@ -454,66 +462,99 @@
 
     @Override
     public void draw(Canvas canvas) {
-        Bitmap bitmap = mBitmap;
-        if (bitmap != null) {
-            final BitmapState state = mBitmapState;
-            if (state.mRebuildShader) {
-                Shader.TileMode tmx = state.mTileModeX;
-                Shader.TileMode tmy = state.mTileModeY;
+        final Bitmap bitmap = mBitmap;
+        if (bitmap == null) {
+            return;
+        }
 
-                if (tmx == null && tmy == null) {
-                    state.mPaint.setShader(null);
-                } else {
-                    state.mPaint.setShader(new BitmapShader(bitmap,
-                            tmx == null ? Shader.TileMode.CLAMP : tmx,
-                            tmy == null ? Shader.TileMode.CLAMP : tmy));
-                }
-                state.mRebuildShader = false;
-                copyBounds(mDstRect);
-            }
-
-            Shader shader = state.mPaint.getShader();
-            final boolean needMirroring = needMirroring();
-            if (shader == null) {
-                if (mApplyGravity) {
-                    final int layoutDirection = getLayoutDirection();
-                    Gravity.apply(state.mGravity, mBitmapWidth, mBitmapHeight,
-                            getBounds(), mDstRect, layoutDirection);
-                    mApplyGravity = false;
-                }
-                if (needMirroring) {
-                    canvas.save();
-                    // Mirror the bitmap
-                    canvas.translate(mDstRect.right - mDstRect.left, 0);
-                    canvas.scale(-1.0f, 1.0f);
-                }
-                canvas.drawBitmap(bitmap, null, mDstRect, state.mPaint);
-                if (needMirroring) {
-                    canvas.restore();
-                }
+        final BitmapState state = mBitmapState;
+        final Paint paint = state.mPaint;
+        if (state.mRebuildShader) {
+            final Shader.TileMode tmx = state.mTileModeX;
+            final Shader.TileMode tmy = state.mTileModeY;
+            if (tmx == null && tmy == null) {
+                paint.setShader(null);
             } else {
-                if (mApplyGravity) {
-                    copyBounds(mDstRect);
-                    mApplyGravity = false;
-                }
-                if (needMirroring) {
-                    // Mirror the bitmap
-                    updateMirrorMatrix(mDstRect.right - mDstRect.left);
-                    shader.setLocalMatrix(mMirrorMatrix);
-                } else {
-                    if (mMirrorMatrix != null) {
-                        mMirrorMatrix = null;
-                        shader.setLocalMatrix(Matrix.IDENTITY_MATRIX);
-                    }
-                }
-                canvas.drawRect(mDstRect, state.mPaint);
+                paint.setShader(new BitmapShader(bitmap,
+                        tmx == null ? Shader.TileMode.CLAMP : tmx,
+                        tmy == null ? Shader.TileMode.CLAMP : tmy));
             }
+
+            state.mRebuildShader = false;
+            copyBounds(mDstRect);
+        }
+
+        final int restoreAlpha;
+        if (state.mBaseAlpha != 1.0f) {
+            final Paint p = getPaint();
+            restoreAlpha = p.getAlpha();
+            p.setAlpha((int) (restoreAlpha * state.mBaseAlpha + 0.5f));
+        } else {
+            restoreAlpha = -1;
+        }
+
+        final boolean clearColorFilter;
+        if (mTintFilter != null && paint.getColorFilter() == null) {
+            paint.setColorFilter(mTintFilter);
+            clearColorFilter = true;
+        } else {
+            clearColorFilter = false;
+        }
+
+        final Shader shader = paint.getShader();
+        final boolean needMirroring = needMirroring();
+        if (shader == null) {
+            if (mApplyGravity) {
+                final int layoutDirection = getLayoutDirection();
+                Gravity.apply(state.mGravity, mBitmapWidth, mBitmapHeight,
+                        getBounds(), mDstRect, layoutDirection);
+                mApplyGravity = false;
+            }
+
+            if (needMirroring) {
+                canvas.save();
+                // Mirror the bitmap
+                canvas.translate(mDstRect.right - mDstRect.left, 0);
+                canvas.scale(-1.0f, 1.0f);
+            }
+
+            canvas.drawBitmap(bitmap, null, mDstRect, paint);
+
+            if (needMirroring) {
+                canvas.restore();
+            }
+        } else {
+            if (mApplyGravity) {
+                copyBounds(mDstRect);
+                mApplyGravity = false;
+            }
+
+            if (needMirroring) {
+                // Mirror the bitmap
+                updateMirrorMatrix(mDstRect.right - mDstRect.left);
+                shader.setLocalMatrix(mMirrorMatrix);
+            } else {
+                if (mMirrorMatrix != null) {
+                    mMirrorMatrix = null;
+                    shader.setLocalMatrix(Matrix.IDENTITY_MATRIX);
+                }
+            }
+
+            canvas.drawRect(mDstRect, paint);
+        }
+
+        if (clearColorFilter) {
+            paint.setColorFilter(null);
+        }
+
+        if (restoreAlpha >= 0) {
+            paint.setAlpha(restoreAlpha);
         }
     }
 
     @Override
     public void setAlpha(int alpha) {
-        int oldAlpha = mBitmapState.mPaint.getAlpha();
+        final int oldAlpha = mBitmapState.mPaint.getAlpha();
         if (alpha != oldAlpha) {
             mBitmapState.mPaint.setAlpha(alpha);
             invalidateSelf();
@@ -531,9 +572,80 @@
         invalidateSelf();
     }
 
+    @Override
+    public ColorFilter getColorFilter() {
+        return mBitmapState.mPaint.getColorFilter();
+    }
+
+    /**
+     * Specifies a tint for this drawable.
+     * <p>
+     * Setting a color filter via {@link #setColorFilter(ColorFilter)} overrides
+     * tint.
+     *
+     * @param tint Color state list to use for tinting this drawable, or null to
+     *            clear the tint
+     */
+    public void setTint(ColorStateList tint) {
+        if (mBitmapState.mTint != tint) {
+            mBitmapState.mTint = tint;
+            updateTintFilter();
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * Returns the tint color for this drawable.
+     *
+     * @return Color state list to use for tinting this drawable, or null if
+     *         none set
+     */
+    public ColorStateList getTint() {
+        return mBitmapState.mTint;
+    }
+
+    /**
+     * Specifies the blending mode used to apply tint.
+     *
+     * @param tintMode A Porter-Duff blending mode
+     */
+    public void setTintMode(Mode tintMode) {
+        if (mBitmapState.mTintMode != tintMode) {
+            mBitmapState.mTintMode = tintMode;
+            updateTintFilter();
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * @hide only needed by a hack within ProgressBar
+     */
+    public Mode getTintMode() {
+        return mBitmapState.mTintMode;
+    }
+
+    /**
+     * Ensures the tint filter is consistent with the current tint color and
+     * mode.
+     */
+    private void updateTintFilter() {
+        final ColorStateList tint = mBitmapState.mTint;
+        final Mode tintMode = mBitmapState.mTintMode;
+        if (tint != null && tintMode != null) {
+            if (mTintFilter == null) {
+                mTintFilter = new PorterDuffColorFilter(0, tintMode);
+            } else {
+                mTintFilter.setMode(tintMode);
+            }
+        } else {
+            mTintFilter = null;
+        }
+    }
+
     /**
      * @hide Candidate for future API inclusion
      */
+    @Override
     public void setXfermode(Xfermode xfermode) {
         mBitmapState.mPaint.setXfermode(xfermode);
         invalidateSelf();
@@ -555,56 +667,260 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
-            throws XmlPullParserException, IOException {
-        super.inflate(r, parser, attrs);
-
-        TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.BitmapDrawable);
-
-        final int id = a.getResourceId(com.android.internal.R.styleable.BitmapDrawable_src, 0);
-        if (id == 0) {
-            throw new XmlPullParserException(parser.getPositionDescription() +
-                    ": <bitmap> requires a valid src attribute");
-        }
-        final Bitmap bitmap = BitmapFactory.decodeResource(r, id);
-        if (bitmap == null) {
-            throw new XmlPullParserException(parser.getPositionDescription() +
-                    ": <bitmap> requires a valid src attribute");
-        }
-        mBitmapState.mBitmap = bitmap;
-        setBitmap(bitmap);
-        setTargetDensity(r.getDisplayMetrics());
-        setMipMap(a.getBoolean(com.android.internal.R.styleable.BitmapDrawable_mipMap,
-                bitmap.hasMipMap()));
-        setAutoMirrored(a.getBoolean(com.android.internal.R.styleable.BitmapDrawable_autoMirrored,
-                false));
-
-        final Paint paint = mBitmapState.mPaint;
-        paint.setAntiAlias(a.getBoolean(com.android.internal.R.styleable.BitmapDrawable_antialias,
-                paint.isAntiAlias()));
-        paint.setFilterBitmap(a.getBoolean(com.android.internal.R.styleable.BitmapDrawable_filter,
-                paint.isFilterBitmap()));
-        paint.setDither(a.getBoolean(com.android.internal.R.styleable.BitmapDrawable_dither,
-                paint.isDither()));
-        setGravity(a.getInt(com.android.internal.R.styleable.BitmapDrawable_gravity, Gravity.FILL));
-        int tileMode = a.getInt(com.android.internal.R.styleable.BitmapDrawable_tileMode, -1);
-        if (tileMode != -1) {
-            switch (tileMode) {
-                case 0:
-                    setTileModeXY(Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
-                    break;
-                case 1:
-                    setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
-                    break;
-                case 2:
-                    setTileModeXY(Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);
-                    break;
+    protected boolean onStateChange(int[] stateSet) {
+        final ColorStateList tint = mBitmapState.mTint;
+        if (tint != null) {
+            final int newColor = tint.getColorForState(stateSet, 0);
+            final int oldColor = mTintFilter.getColor();
+            if (oldColor != newColor) {
+                mTintFilter.setColor(newColor);
+                invalidateSelf();
+                return true;
             }
         }
 
+        return false;
+    }
+
+    @Override
+    public boolean isStateful() {
+        final BitmapState s = mBitmapState;
+        return super.isStateful() || (s.mTint != null && s.mTint.isStateful());
+    }
+
+    @Override
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
+            throws XmlPullParserException, IOException {
+        super.inflate(r, parser, attrs, theme);
+
+        final TypedArray a = obtainAttributes(
+                r, theme, attrs, R.styleable.BitmapDrawable);
+        inflateStateFromTypedArray(a);
         a.recycle();
     }
 
+    /**
+     * Initializes the constant state from the values in the typed array.
+     */
+    private void inflateStateFromTypedArray(TypedArray a) throws XmlPullParserException {
+        final Resources r = a.getResources();
+        final BitmapState state = mBitmapState;
+
+        // Extract the theme attributes, if any.
+        final int[] themeAttrs = a.extractThemeAttrs();
+        state.mThemeAttrs = themeAttrs;
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_src] == 0) {
+            final int id = a.getResourceId(R.styleable.BitmapDrawable_src, 0);
+            if (id == 0) {
+                throw new XmlPullParserException(a.getPositionDescription() +
+                        ": <bitmap> requires a valid src attribute");
+            }
+
+            final Bitmap bitmap = BitmapFactory.decodeResource(r, id);
+            if (bitmap == null) {
+                throw new XmlPullParserException(a.getPositionDescription() +
+                        ": <bitmap> requires a valid src attribute");
+            }
+            state.mBitmap = bitmap;
+            setBitmap(bitmap);
+        }
+
+        setTargetDensity(r.getDisplayMetrics());
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_mipMap] == 0) {
+            final boolean defMipMap = state.mBitmap != null ? state.mBitmap.hasMipMap() : false;
+            final boolean mipMap = a.getBoolean(
+                    R.styleable.BitmapDrawable_mipMap, defMipMap);
+            setMipMap(mipMap);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_autoMirrored] == 0) {
+            final boolean autoMirrored = a.getBoolean(
+                    R.styleable.BitmapDrawable_autoMirrored, false);
+            setAutoMirrored(autoMirrored);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_tintMode] == 0) {
+            final int tintModeValue = a.getInt(
+                    R.styleable.BitmapDrawable_tintMode, -1);
+            state.mTintMode = Drawable.parseTintMode(tintModeValue, Mode.SRC_IN);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_tint] == 0) {
+            state.mTint = a.getColorStateList(R.styleable.BitmapDrawable_tint);
+            if (state.mTint != null) {
+                final int color = state.mTint.getColorForState(getState(), 0);
+                mTintFilter = new PorterDuffColorFilter(color, mBitmapState.mTintMode);
+            }
+        }
+
+        final Paint paint = mBitmapState.mPaint;
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_antialias] == 0) {
+            final boolean antiAlias = a.getBoolean(
+                    R.styleable.BitmapDrawable_antialias, paint.isAntiAlias());
+            paint.setAntiAlias(antiAlias);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_filter] == 0) {
+            final boolean filter = a.getBoolean(
+                    R.styleable.BitmapDrawable_filter, paint.isFilterBitmap());
+            paint.setFilterBitmap(filter);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_dither] == 0) {
+            final boolean dither = a.getBoolean(
+                    R.styleable.BitmapDrawable_dither, paint.isDither());
+            paint.setDither(dither);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_alpha] == 0) {
+            state.mBaseAlpha = a.getFloat(R.styleable.BitmapDrawable_alpha, 1.0f);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_gravity] == 0) {
+            final int gravity = a.getInt(
+                    R.styleable.BitmapDrawable_gravity, Gravity.FILL);
+            setGravity(gravity);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.BitmapDrawable_tileMode] == 0) {
+            final int tileMode = a.getInt(
+                    R.styleable.BitmapDrawable_tileMode, -1);
+            setTileModeInternal(tileMode);
+        }
+    }
+
+    @Override
+    public void applyTheme(Theme t) {
+        super.applyTheme(t);
+
+        final BitmapState state = mBitmapState;
+        if (state == null) {
+            throw new RuntimeException("Can't apply theme to <bitmap> with no constant state");
+        }
+
+        final int[] themeAttrs = state.mThemeAttrs;
+        if (themeAttrs != null) {
+            final TypedArray a = t.resolveAttributes(themeAttrs, R.styleable.BitmapDrawable, 0, 0);
+            updateStateFromTypedArray(a);
+            a.recycle();
+        }
+    }
+
+    /**
+     * Updates the constant state from the values in the typed array.
+     */
+    private void updateStateFromTypedArray(TypedArray a) {
+        final Resources r = a.getResources();
+        final BitmapState state = mBitmapState;
+        final Paint paint = mBitmapState.mPaint;
+
+        if (a.hasValue(R.styleable.BitmapDrawable_antialias)) {
+            final boolean antiAlias = a.getBoolean(
+                    R.styleable.BitmapDrawable_antialias, paint.isAntiAlias());
+            paint.setAntiAlias(antiAlias);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_filter)) {
+            final boolean filter = a.getBoolean(
+                    R.styleable.BitmapDrawable_filter, paint.isFilterBitmap());
+            paint.setFilterBitmap(filter);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_dither)) {
+            final boolean dither = a.getBoolean(
+                    R.styleable.BitmapDrawable_dither, paint.isDither());
+            paint.setDither(dither);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_alpha)) {
+            state.mBaseAlpha = a.getFloat(R.styleable.BitmapDrawable_alpha, state.mBaseAlpha);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_gravity)) {
+            final int gravity = a.getInt(
+                    R.styleable.BitmapDrawable_gravity, Gravity.FILL);
+            setGravity(gravity);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_tileMode)) {
+            final int tileMode = a.getInt(
+                    R.styleable.BitmapDrawable_tileMode, -1);
+            setTileModeInternal(tileMode);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_src)) {
+            final int id = a.getResourceId(R.styleable.BitmapDrawable_src, 0);
+            if (id == 0) {
+                throw new RuntimeException(a.getPositionDescription() +
+                        ": <bitmap> requires a valid src attribute");
+            }
+
+            final Bitmap bitmap = BitmapFactory.decodeResource(r, id);
+            if (bitmap == null) {
+                throw new RuntimeException(a.getPositionDescription() +
+                        ": <bitmap> requires a valid src attribute");
+            }
+
+            setBitmap(bitmap);
+        }
+
+        setTargetDensity(r.getDisplayMetrics());
+
+        if (a.hasValue(R.styleable.BitmapDrawable_mipMap)) {
+            final boolean mipMap = a.getBoolean(
+                    R.styleable.BitmapDrawable_mipMap,
+                    state.mBitmap.hasMipMap());
+            setMipMap(mipMap);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_autoMirrored)) {
+            final boolean autoMirrored = a.getBoolean(
+                    R.styleable.BitmapDrawable_autoMirrored, false);
+            setAutoMirrored(autoMirrored);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_tintMode)) {
+            final int modeValue = a.getInt(
+                    R.styleable.BitmapDrawable_tintMode, -1);
+            state.mTintMode = Drawable.parseTintMode(modeValue, Mode.SRC_IN);
+        }
+
+        if (a.hasValue(R.styleable.BitmapDrawable_tint)) {
+            final ColorStateList tint = a.getColorStateList(
+                    R.styleable.BitmapDrawable_tint);
+            if (tint != null) {
+                state.mTint = tint;
+                final int color = tint.getColorForState(getState(), 0);
+                mTintFilter = new PorterDuffColorFilter(color, state.mTintMode);
+            }
+        }
+    }
+
+    private void setTileModeInternal(final int tileMode) {
+        switch (tileMode) {
+            case -1:
+                // Do nothing.
+                break;
+            case 0:
+                setTileModeXY(Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
+                break;
+            case 1:
+                setTileModeXY(Shader.TileMode.REPEAT, Shader.TileMode.REPEAT);
+                break;
+            case 2:
+                setTileModeXY(Shader.TileMode.MIRROR, Shader.TileMode.MIRROR);
+                break;
+        }
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        return mBitmapState != null && mBitmapState.mThemeAttrs != null;
+    }
+
     @Override
     public int getIntrinsicWidth() {
         return mBitmapWidth;
@@ -633,8 +949,12 @@
 
     final static class BitmapState extends ConstantState {
         Bitmap mBitmap;
+        ColorStateList mTint;
+        Mode mTintMode = Mode.SRC_IN;
+        int[] mThemeAttrs;
         int mChangingConfigurations;
         int mGravity = Gravity.FILL;
+        float mBaseAlpha = 1.0f;
         Paint mPaint = new Paint(DEFAULT_PAINT_FLAGS);
         Shader.TileMode mTileModeX = null;
         Shader.TileMode mTileModeY = null;
@@ -647,30 +967,44 @@
         }
 
         BitmapState(BitmapState bitmapState) {
-            this(bitmapState.mBitmap);
+            mBitmap = bitmapState.mBitmap;
+            mTint = bitmapState.mTint;
+            mTintMode = bitmapState.mTintMode;
+            mThemeAttrs = bitmapState.mThemeAttrs;
             mChangingConfigurations = bitmapState.mChangingConfigurations;
             mGravity = bitmapState.mGravity;
             mTileModeX = bitmapState.mTileModeX;
             mTileModeY = bitmapState.mTileModeY;
             mTargetDensity = bitmapState.mTargetDensity;
+            mBaseAlpha = bitmapState.mBaseAlpha;
             mPaint = new Paint(bitmapState.mPaint);
             mRebuildShader = bitmapState.mRebuildShader;
             mAutoMirrored = bitmapState.mAutoMirrored;
         }
 
         @Override
+        public boolean canApplyTheme() {
+            return mThemeAttrs != null;
+        }
+
+        @Override
         public Bitmap getBitmap() {
             return mBitmap;
         }
 
         @Override
         public Drawable newDrawable() {
-            return new BitmapDrawable(this, null);
+            return new BitmapDrawable(this, null, null);
         }
 
         @Override
         public Drawable newDrawable(Resources res) {
-            return new BitmapDrawable(this, res);
+            return new BitmapDrawable(this, res, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new BitmapDrawable(this, res, theme);
         }
 
         @Override
@@ -679,13 +1013,32 @@
         }
     }
 
-    private BitmapDrawable(BitmapState state, Resources res) {
-        mBitmapState = state;
+    private BitmapDrawable(BitmapState state, Resources res, Theme theme) {
+        if (theme != null && state.canApplyTheme()) {
+            mBitmapState = new BitmapState(state);
+            applyTheme(theme);
+        } else {
+            mBitmapState = state;
+        }
+
+        initializeWithState(state, res);
+    }
+
+    /**
+     * Initializes local dynamic properties from state.
+     */
+    private void initializeWithState(BitmapState state, Resources res) {
         if (res != null) {
             mTargetDensity = res.getDisplayMetrics().densityDpi;
         } else {
             mTargetDensity = state.mTargetDensity;
         }
-        setBitmap(state != null ? state.mBitmap : null);
+
+        if (state.mTint != null) {
+            final int color = state.mTint.getColorForState(getState(), 0);
+            mTintFilter = new PorterDuffColorFilter(color, state.mTintMode);
+        }
+
+        setBitmap(state.mBitmap);
     }
 }
diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java
index 2a9a14b..3dbd235 100644
--- a/graphics/java/android/graphics/drawable/ClipDrawable.java
+++ b/graphics/java/android/graphics/drawable/ClipDrawable.java
@@ -21,6 +21,7 @@
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.graphics.*;
 import android.view.Gravity;
 import android.util.AttributeSet;
@@ -72,9 +73,9 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-        super.inflate(r, parser, attrs);
+        super.inflate(r, parser, attrs, theme);
 
         int type;
 
@@ -94,7 +95,7 @@
             if (type != XmlPullParser.START_TAG) {
                 continue;
             }
-            dr = Drawable.createFromXmlInner(r, parser, attrs);
+            dr = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme);
         }
 
         if (dr == null) {
diff --git a/graphics/java/android/graphics/drawable/ColorDrawable.java b/graphics/java/android/graphics/drawable/ColorDrawable.java
index 61dd675..8243b7c 100644
--- a/graphics/java/android/graphics/drawable/ColorDrawable.java
+++ b/graphics/java/android/graphics/drawable/ColorDrawable.java
@@ -18,9 +18,13 @@
 
 import android.graphics.*;
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
 import android.util.AttributeSet;
 import android.view.ViewDebug;
+
+import com.android.internal.R;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -36,7 +40,7 @@
  */
 public class ColorDrawable extends Drawable {
     @ViewDebug.ExportedProperty(deepExport = true, prefix = "state_")
-    private ColorState mState;
+    private ColorState mColorState;
     private final Paint mPaint = new Paint();
     private boolean mMutated;
 
@@ -44,7 +48,7 @@
      * Creates a new black ColorDrawable.
      */
     public ColorDrawable() {
-        this(null);
+        mColorState = new ColorState();
     }
 
     /**
@@ -53,17 +57,14 @@
      * @param color The color to draw.
      */
     public ColorDrawable(int color) {
-        this(null);
-        setColor(color);
-    }
+        mColorState = new ColorState();
 
-    private ColorDrawable(ColorState state) {
-        mState = new ColorState(state);
+        setColor(color);
     }
 
     @Override
     public int getChangingConfigurations() {
-        return super.getChangingConfigurations() | mState.mChangingConfigurations;
+        return super.getChangingConfigurations() | mColorState.mChangingConfigurations;
     }
 
     /**
@@ -75,7 +76,7 @@
     @Override
     public Drawable mutate() {
         if (!mMutated && super.mutate() == this) {
-            mState = new ColorState(mState);
+            mColorState = new ColorState(mColorState);
             mMutated = true;
         }
         return this;
@@ -83,8 +84,8 @@
 
     @Override
     public void draw(Canvas canvas) {
-        if ((mState.mUseColor >>> 24) != 0) {
-            mPaint.setColor(mState.mUseColor);
+        if ((mColorState.mUseColor >>> 24) != 0) {
+            mPaint.setColor(mColorState.mUseColor);
             canvas.drawRect(getBounds(), mPaint);
         }
     }
@@ -95,19 +96,20 @@
      * @return int The color to draw.
      */
     public int getColor() {
-        return mState.mUseColor;
+        return mColorState.mUseColor;
     }
 
     /**
-     * Sets the drawable's color value. This action will clobber the results of prior calls to
-     * {@link #setAlpha(int)} on this object, which side-affected the underlying color.
+     * Sets the drawable's color value. This action will clobber the results of
+     * prior calls to {@link #setAlpha(int)} on this object, which side-affected
+     * the underlying color.
      *
      * @param color The color to draw.
      */
     public void setColor(int color) {
-        if (mState.mBaseColor != color || mState.mUseColor != color) {
+        if (mColorState.mBaseColor != color || mColorState.mUseColor != color) {
+            mColorState.mBaseColor = mColorState.mUseColor = color;
             invalidateSelf();
-            mState.mBaseColor = mState.mUseColor = color;
         }
     }
 
@@ -118,7 +120,7 @@
      */
     @Override
     public int getAlpha() {
-        return mState.mUseColor >>> 24;
+        return mColorState.mUseColor >>> 24;
     }
 
     /**
@@ -126,13 +128,14 @@
      *
      * @param alpha The alpha value to set, between 0 and 255.
      */
+    @Override
     public void setAlpha(int alpha) {
         alpha += alpha >> 7;   // make it 0..256
-        int baseAlpha = mState.mBaseColor >>> 24;
-        int useAlpha = baseAlpha * alpha >> 8;
-        int oldUseColor = mState.mUseColor;
-        mState.mUseColor = (mState.mBaseColor << 8 >>> 8) | (useAlpha << 24);
-        if (oldUseColor != mState.mUseColor) {
+        final int baseAlpha = mColorState.mBaseColor >>> 24;
+        final int useAlpha = baseAlpha * alpha >> 8;
+        final int useColor = (mColorState.mBaseColor << 8 >>> 8) | (useAlpha << 24);
+        if (mColorState.mUseColor != useColor) {
+            mColorState.mUseColor = useColor;
             invalidateSelf();
         }
     }
@@ -142,11 +145,13 @@
      *
      * @param colorFilter Ignore.
      */
+    @Override
     public void setColorFilter(ColorFilter colorFilter) {
     }
 
+    @Override
     public int getOpacity() {
-        switch (mState.mUseColor >>> 24) {
+        switch (mColorState.mUseColor >>> 24) {
             case 255:
                 return PixelFormat.OPAQUE;
             case 0:
@@ -156,23 +161,67 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-        super.inflate(r, parser, attrs);
+        super.inflate(r, parser, attrs, theme);
 
-        TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.ColorDrawable);
-
-        int color = mState.mBaseColor;
-        color = a.getColor(com.android.internal.R.styleable.ColorDrawable_color, color);
-        mState.mBaseColor = mState.mUseColor = color;
-
+        final TypedArray a = obtainAttributes(
+                r, theme, attrs, R.styleable.ColorDrawable);
+        inflateStateFromTypedArray(a);
         a.recycle();
     }
 
+    /**
+     * Initializes the constant state from the values in the typed array.
+     */
+    private void inflateStateFromTypedArray(TypedArray a) {
+        final ColorState state = mColorState;
+
+        // Extract the theme attributes, if any.
+        final int[] themeAttrs = a.extractThemeAttrs();
+        state.mThemeAttrs = themeAttrs;
+
+        if (themeAttrs == null || themeAttrs[R.styleable.ColorDrawable_color] == 0) {
+            final int color = a.getColor(R.styleable.ColorDrawable_color, 0);
+            state.mBaseColor = color;
+            state.mUseColor = color;
+        }
+    }
+
+    @Override
+    public void applyTheme(Theme t) {
+        super.applyTheme(t);
+
+        final ColorState state = mColorState;
+        if (state == null) {
+            throw new RuntimeException("Can't apply theme to <color> with no constant state");
+        }
+
+        final int[] themeAttrs = state.mThemeAttrs;
+        if (themeAttrs != null) {
+            final TypedArray a = t.resolveAttributes(themeAttrs, R.styleable.ColorDrawable, 0, 0);
+            updateStateFromTypedArray(a);
+            a.recycle();
+        }
+    }
+
+    /**
+     * Updates the constant state from the values in the typed array.
+     */
+    private void updateStateFromTypedArray(TypedArray a) {
+        final ColorState state = mColorState;
+
+        if (a.hasValue(R.styleable.ColorDrawable_color)) {
+            final int color = a.getColor(R.styleable.ColorDrawable_color, 0);
+            state.mBaseColor = color;
+            state.mUseColor = color;
+        }
+    }
+
     @Override
     public ConstantState getConstantState() {
-        mState.mChangingConfigurations = getChangingConfigurations();
-        return mState;
+        mColorState.mChangingConfigurations = getChangingConfigurations();
+        return mColorState;
     }
 
     final static class ColorState extends ConstantState {
@@ -180,23 +229,37 @@
         @ViewDebug.ExportedProperty
         int mUseColor;  // basecolor modulated by setAlpha()
         int mChangingConfigurations;
+        int[] mThemeAttrs;
+
+        ColorState() {
+            // Empty constructor.
+        }
 
         ColorState(ColorState state) {
-            if (state != null) {
-                mBaseColor = state.mBaseColor;
-                mUseColor = state.mUseColor;
-                mChangingConfigurations = state.mChangingConfigurations;
-            }
+            mBaseColor = state.mBaseColor;
+            mUseColor = state.mUseColor;
+            mChangingConfigurations = state.mChangingConfigurations;
+            mThemeAttrs = state.mThemeAttrs;
+        }
+
+        @Override
+        public boolean canApplyTheme() {
+            return mThemeAttrs != null;
         }
 
         @Override
         public Drawable newDrawable() {
-            return new ColorDrawable(this);
+            return new ColorDrawable(this, null, null);
         }
 
         @Override
         public Drawable newDrawable(Resources res) {
-            return new ColorDrawable(this);
+            return new ColorDrawable(this, res, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new ColorDrawable(this, res, theme);
         }
 
         @Override
@@ -204,4 +267,15 @@
             return mChangingConfigurations;
         }
     }
+
+    private ColorDrawable(ColorState state, Resources res, Theme theme) {
+        if (theme != null && state.canApplyTheme()) {
+            mColorState = new ColorState(state);
+            applyTheme(theme);
+        } else {
+            mColorState = state;
+        }
+
+        // No local properties to initialize.
+    }
 }
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 93738b0..b9d5e19 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -19,26 +19,31 @@
 import android.graphics.Insets;
 import android.graphics.Xfermode;
 import android.os.Trace;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
 import android.graphics.ColorFilter;
 import android.graphics.NinePatch;
+import android.graphics.Outline;
 import android.graphics.PixelFormat;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
 import android.graphics.Region;
+import android.graphics.PorterDuff.Mode;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.StateSet;
 import android.util.TypedValue;
 import android.util.Xml;
+import android.view.View;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -82,7 +87,7 @@
  *     through the {@link Callback} interface.  All clients should support this
  *     interface (via {@link #setCallback}) so that animations will work.  A
  *     simple way to do this is through the system facilities such as
- *     {@link android.view.View#setBackgroundDrawable(Drawable)} and
+ *     {@link android.view.View#setBackground(Drawable)} and
  *     {@link android.widget.ImageView}.
  * </ul>
  *
@@ -213,6 +218,20 @@
     }
 
     /**
+     * Return the drawable's dirty bounds Rect. Note: for efficiency, the
+     * returned object may be the same object stored in the drawable (though
+     * this is not guaranteed).
+     * <p>
+     * By default, this returns the full drawable bounds. Custom drawables may
+     * override this method to perform more precise invalidation.
+     *
+     * @hide
+     */
+    public Rect getDirtyBounds() {
+        return getBounds();
+    }
+
+    /**
      * Set a mask of the configuration parameters for which this drawable
      * may change, requiring that it be re-created.
      *
@@ -399,7 +418,7 @@
      *
      * @hide
      */
-    public void setLayoutDirection(int layoutDirection) {
+    public void setLayoutDirection(@View.ResolvedLayoutDir int layoutDirection) {
         if (getLayoutDirection() != layoutDirection) {
             mLayoutDirection = layoutDirection;
         }
@@ -423,12 +442,6 @@
     }
 
     /**
-     * Specify an optional colorFilter for the drawable. Pass null to remove
-     * any filters.
-    */
-    public abstract void setColorFilter(ColorFilter cf);
-
-    /**
      * @hide Consider for future API inclusion
      */
     public void setXfermode(Xfermode mode) {
@@ -438,18 +451,94 @@
     }
 
     /**
-     * Specify a color and porterduff mode to be the colorfilter for this
+     * Specify an optional color filter for the drawable. Pass {@code null} to
+     * remove any existing color filter.
+     *
+     * @param cf the color filter to apply, or {@code null} to remove the
+     *            existing color filter
+     */
+    public abstract void setColorFilter(ColorFilter cf);
+
+    /**
+     * Specify a color and Porter-Duff mode to be the color filter for this
      * drawable.
      */
     public void setColorFilter(int color, PorterDuff.Mode mode) {
         setColorFilter(new PorterDuffColorFilter(color, mode));
     }
 
+    /**
+     * Returns the current color filter, or {@code null} if none set.
+     *
+     * @return the current color filter, or {@code null} if none set
+     */
+    public ColorFilter getColorFilter() {
+        return null;
+    }
+
+    /**
+     * Removes the color filter for this drawable.
+     */
     public void clearColorFilter() {
         setColorFilter(null);
     }
 
     /**
+     * Indicates whether the drawable supports hotspots. Hotspots are uniquely
+     * identifiable coordinates the may be added, updated and removed within a
+     * drawable.
+     *
+     * @return true if hotspots are supported
+     * @see #setHotspot(int, float, float)
+     * @see #removeHotspot(int)
+     * @see #clearHotspots()
+     */
+    public boolean supportsHotspots() {
+        return false;
+    }
+
+    /**
+     * Specifies a hotspot's location within the drawable.
+     * <p>
+     * The specified key should be an id declared in the resources of the
+     * application to ensure it is unique (see the <a
+     * href={@docRoot}guide/topics/resources/more-resources.html#Id">ID resource type</a>).
+     *
+     * @param key The key identifying the hotspot
+     * @param x The X coordinate of the center of the hotspot
+     * @param y The Y coordinate of the center of the hotspot
+     */
+    public void setHotspot(int key, float x, float y) {}
+
+    /**
+     * Removes the hotspot with the specified key from the drawable.
+     *
+     * @param key The key identifying the hotspot
+     */
+    public void removeHotspot(int key) {}
+
+    /**
+     * Immediately removes all hotspots from the drawable.
+     */
+    public void clearHotspots() {}
+    
+    /**
+     * Sets the bounds to which hotspots are constrained.
+     *
+     * @hide until we finalize these APIs
+     */
+    public void setHotspotBounds(int left, int top, int right, int bottom) {}
+
+    /**
+     * Whether this drawable requests projection.
+     *
+     * @hide until we finalize these APIs
+     */
+    public boolean isProjected() {
+        return false;
+    }
+
+    /**
      * Indicates whether this view will change its appearance based on state.
      * Clients can use this to determine whether it is necessary to calculate
      * their state and call setState.
@@ -601,6 +690,16 @@
     }
 
     /**
+     * Applies the specified theme to this Drawable and its children.
+     */
+    public void applyTheme(@SuppressWarnings("unused") Theme t) {
+    }
+
+    public boolean canApplyTheme() {
+        return false;
+    }
+
+    /**
      * Return the opacity/transparency of this Drawable.  The returned value is
      * one of the abstract format constants in
      * {@link android.graphics.PixelFormat}:
@@ -765,6 +864,23 @@
     }
 
     /**
+     * Called to get the drawable to populate the Outline.
+     * <p>
+     * This method will be called by a View on its background Drawable after bounds change, or its
+     * Drawable is invalidated, if the View's Outline isn't set explicitly. This allows the
+     * background Drawable to define the shape of the shadow cast by the View.
+     *
+     * The default behavior defines the outline to be the bounding rectangle. Subclasses that wish
+     * to convey a different shape must override this method.
+     *
+     * @see View#setOutline(android.graphics.Outline)
+     */
+    public boolean getOutline(Outline outline) {
+        outline.setRect(getBounds());
+        return true;
+    }
+
+    /**
      * Make this drawable mutable. This operation cannot be reversed. A mutable
      * drawable is guaranteed to not share its state with any other drawable.
      * This is especially useful when you need to modify properties of drawables
@@ -786,9 +902,13 @@
      * Create a drawable from an inputstream
      */
     public static Drawable createFromStream(InputStream is, String srcName) {
+        return createFromStreamThemed(is, srcName, null);
+    }
+
+    public static Drawable createFromStreamThemed(InputStream is, String srcName, Theme theme) {
         Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, srcName != null ? srcName : "Unknown drawable");
         try {
-            return createFromResourceStream(null, null, is, srcName, null);
+            return createFromResourceStreamThemed(null, null, is, srcName, theme);
         } finally {
             Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
         }
@@ -800,9 +920,14 @@
      */
     public static Drawable createFromResourceStream(Resources res, TypedValue value,
             InputStream is, String srcName) {
+        return createFromResourceStreamThemed(res, value, is, srcName, null);
+    }
+
+    public static Drawable createFromResourceStreamThemed(Resources res, TypedValue value,
+            InputStream is, String srcName, Theme theme) {
         Trace.traceBegin(Trace.TRACE_TAG_RESOURCES, srcName != null ? srcName : "Unknown drawable");
         try {
-            return createFromResourceStream(res, value, is, srcName, null);
+            return createFromResourceStreamThemed(res, value, is, srcName, null, theme);
         } finally {
             Trace.traceEnd(Trace.TRACE_TAG_RESOURCES);
         }
@@ -814,7 +939,11 @@
      */
     public static Drawable createFromResourceStream(Resources res, TypedValue value,
             InputStream is, String srcName, BitmapFactory.Options opts) {
+        return createFromResourceStreamThemed(res, value, is, srcName, opts, null);
+    }
 
+    public static Drawable createFromResourceStreamThemed(Resources res, TypedValue value,
+            InputStream is, String srcName, BitmapFactory.Options opts, Theme theme) {
         if (is == null) {
             return null;
         }
@@ -862,6 +991,16 @@
      */
     public static Drawable createFromXml(Resources r, XmlPullParser parser)
             throws XmlPullParserException, IOException {
+        return createFromXmlThemed(r, parser, null);
+    }
+
+    /**
+     * Create a themed drawable from an XML document. For more information on
+     * how to create resources in XML, see
+     * <a href="{@docRoot}guide/topics/resources/drawable-resource.html">Drawable Resources</a>.
+     */
+    public static Drawable createFromXmlThemed(Resources r, XmlPullParser parser, Theme theme)
+            throws XmlPullParserException, IOException {
         AttributeSet attrs = Xml.asAttributeSet(parser);
 
         int type;
@@ -874,7 +1013,7 @@
             throw new XmlPullParserException("No start tag found");
         }
 
-        Drawable drawable = createFromXmlInner(r, parser, attrs);
+        Drawable drawable = createFromXmlInnerThemed(r, parser, attrs, theme);
 
         if (drawable == null) {
             throw new RuntimeException("Unknown initial tag: " + parser.getName());
@@ -889,11 +1028,15 @@
      * Returns null if the tag is not a valid drawable.
      */
     public static Drawable createFromXmlInner(Resources r, XmlPullParser parser, AttributeSet attrs)
-    throws XmlPullParserException, IOException {
-        Drawable drawable;
+            throws XmlPullParserException, IOException {
+        return createFromXmlInnerThemed(r, parser, attrs, null);
+    }
+
+    public static Drawable createFromXmlInnerThemed(Resources r, XmlPullParser parser,
+            AttributeSet attrs, Theme theme) throws XmlPullParserException, IOException {
+        final Drawable drawable;
 
         final String name = parser.getName();
-
         if (name.equals("selector")) {
             drawable = new StateListDrawable();
         } else if (name.equals("level-list")) {
@@ -902,10 +1045,14 @@
             drawable = new LayerDrawable();
         } else if (name.equals("transition")) {
             drawable = new TransitionDrawable();
+        } else if (name.equals("touch-feedback")) {
+            drawable = new TouchFeedbackDrawable();
         } else if (name.equals("color")) {
             drawable = new ColorDrawable();
         } else if (name.equals("shape")) {
             drawable = new GradientDrawable();
+        } else if (name.equals("vector")) {
+            drawable = new VectorDrawable();
         } else if (name.equals("scale")) {
             drawable = new ScaleDrawable();
         } else if (name.equals("clip")) {
@@ -934,7 +1081,7 @@
                     ": invalid drawable tag " + name);
         }
 
-        drawable.inflate(r, parser, attrs);
+        drawable.inflate(r, parser, attrs, theme);
         return drawable;
     }
 
@@ -961,12 +1108,35 @@
     }
 
     /**
-     * Inflate this Drawable from an XML resource.
+     * Inflate this Drawable from an XML resource. Does not apply a theme.
+     *
+     * @see #inflate(Resources, XmlPullParser, AttributeSet, Theme)
      */
     public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
             throws XmlPullParserException, IOException {
+        inflate(r, parser, attrs, null);
+    }
 
-        TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.Drawable);
+    /**
+     * Inflate this Drawable from an XML resource optionally styled by a theme.
+     *
+     * @param r Resources used to resolve attribute values
+     * @param parser XML parser from which to inflate this Drawable
+     * @param attrs Base set of attribute values
+     * @param theme Theme to apply, may be null
+     * @throws XmlPullParserException
+     * @throws IOException
+     */
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
+            throws XmlPullParserException, IOException {
+        final TypedArray a;
+        if (theme != null) {
+            a = theme.obtainStyledAttributes(
+                    attrs, com.android.internal.R.styleable.Drawable, 0, 0);
+        } else {
+            a = r.obtainAttributes(attrs, com.android.internal.R.styleable.Drawable);
+        }
+
         inflateWithAttributes(r, parser, a, com.android.internal.R.styleable.Drawable_visible);
         a.recycle();
     }
@@ -977,10 +1147,8 @@
      * @throws XmlPullParserException
      * @throws IOException
      */
-    void inflateWithAttributes(Resources r, XmlPullParser parser,
-            TypedArray attrs, int visibleAttr)
+    void inflateWithAttributes(Resources r, XmlPullParser parser, TypedArray attrs, int visibleAttr)
             throws XmlPullParserException, IOException {
-
         mVisible = attrs.getBoolean(visibleAttr, mVisible);
     }
 
@@ -1007,6 +1175,7 @@
          * instead to provide a resource.
          */
         public abstract Drawable newDrawable();
+
         /**
          * Create a new Drawable instance from its constant state.  This
          * must be implemented for drawables that change based on the target
@@ -1016,6 +1185,15 @@
         public Drawable newDrawable(Resources res) {
             return newDrawable();
         }
+
+        /**
+         * Create a new Drawable instance from its constant state. This must be
+         * implemented for drawables that can have a theme applied.
+         */
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return newDrawable();
+        }
+
         /**
          * Return a bit mask of configuration changes that will impact
          * this drawable (and thus require completely reloading it).
@@ -1028,11 +1206,18 @@
         public Bitmap getBitmap() {
             return null;
         }
+
+        /**
+         * Return whether this constant state can have a theme applied.
+         */
+        public boolean canApplyTheme() {
+            return false;
+        }
     }
 
     /**
      * Return a {@link ConstantState} instance that holds the shared state of this Drawable.
-     *q
+     *
      * @return The ConstantState associated to that Drawable.
      * @see ConstantState
      * @see Drawable#mutate()
@@ -1050,5 +1235,33 @@
 
         return new BitmapDrawable(res, bm);
     }
+
+    /**
+     * Obtains styled attributes from the theme, if available, or unstyled
+     * resources if the theme is null.
+     */
+    static TypedArray obtainAttributes(
+            Resources res, Theme theme, AttributeSet set, int[] attrs) {
+        if (theme == null) {
+            return res.obtainAttributes(set, attrs);
+        }
+        return theme.obtainStyledAttributes(set, attrs, 0, 0);
+    }
+
+    /**
+     * Parses a {@link android.graphics.PorterDuff.Mode} from a tintMode
+     * attribute's enum value.
+     */
+    static PorterDuff.Mode parseTintMode(int value, Mode defaultMode) {
+        switch (value) {
+            case 3: return Mode.SRC_OVER;
+            case 5: return Mode.SRC_IN;
+            case 9: return Mode.SRC_ATOP;
+            case 14: return Mode.MULTIPLY;
+            case 15: return Mode.SCREEN;
+            case 16: return Mode.ADD;
+            default: return defaultMode;
+        }
+    }
 }
 
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index aac7876..1f8b51d 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -17,6 +17,7 @@
 package android.graphics.drawable;
 
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.graphics.Canvas;
 import android.graphics.ColorFilter;
 import android.graphics.Insets;
@@ -49,7 +50,9 @@
     private DrawableContainerState mDrawableContainerState;
     private Drawable mCurrDrawable;
     private int mAlpha = 0xFF;
-    private ColorFilter mColorFilter;
+
+    /** Whether setAlpha() has been called at least once. */
+    private boolean mHasAlpha;
 
     private int mCurIndex = -1;
     private boolean mMutated;
@@ -118,7 +121,8 @@
 
     @Override
     public void setAlpha(int alpha) {
-        if (mAlpha != alpha) {
+        if (!mHasAlpha || mAlpha != alpha) {
+            mHasAlpha = true;
             mAlpha = alpha;
             if (mCurrDrawable != null) {
                 if (mEnterAnimationEnd == 0) {
@@ -147,8 +151,11 @@
 
     @Override
     public void setColorFilter(ColorFilter cf) {
-        if (mColorFilter != cf) {
-            mColorFilter = cf;
+        mDrawableContainerState.mHasColorFilter = true;
+
+        if (mDrawableContainerState.mColorFilter != cf) {
+            mDrawableContainerState.mColorFilter = cf;
+
             if (mCurrDrawable != null) {
                 mCurrDrawable.mutate().setColorFilter(cf);
             }
@@ -190,9 +197,11 @@
 
     @Override
     public void setAutoMirrored(boolean mirrored) {
-        mDrawableContainerState.mAutoMirrored = mirrored;
-        if (mCurrDrawable != null) {
-            mCurrDrawable.mutate().setAutoMirrored(mDrawableContainerState.mAutoMirrored);
+        if (mDrawableContainerState.mAutoMirrored != mirrored) {
+            mDrawableContainerState.mAutoMirrored = mirrored;
+            if (mCurrDrawable != null) {
+                mCurrDrawable.mutate().setAutoMirrored(mDrawableContainerState.mAutoMirrored);
+            }
         }
     }
 
@@ -211,7 +220,9 @@
         }
         if (mCurrDrawable != null) {
             mCurrDrawable.jumpToCurrentState();
-            mCurrDrawable.mutate().setAlpha(mAlpha);
+            if (mHasAlpha) {
+                mCurrDrawable.mutate().setAlpha(mAlpha);
+            }
         }
         if (mExitAnimationEnd != 0) {
             mExitAnimationEnd = 0;
@@ -227,6 +238,35 @@
     }
 
     @Override
+    public void setHotspot(int key, float x, float y) {
+        if (mCurrDrawable != null) {
+            mCurrDrawable.setHotspot(key, x, y);
+        }
+    }
+
+    @Override
+    public void removeHotspot(int key) {
+        if (mCurrDrawable != null) {
+            mCurrDrawable.removeHotspot(key);
+        }
+    }
+
+    @Override
+    public void clearHotspots() {
+        if (mCurrDrawable != null) {
+            mCurrDrawable.clearHotspots();
+        }
+    }
+
+    @Override
+    public boolean supportsHotspots() {
+        if (mCurrDrawable != null) {
+            return mCurrDrawable.supportsHotspots();
+        }
+        return false;
+    }
+
+    @Override
     protected boolean onStateChange(int[] state) {
         if (mLastDrawable != null) {
             return mLastDrawable.setState(state);
@@ -354,12 +394,14 @@
                 d.mutate();
                 if (mDrawableContainerState.mEnterFadeDuration > 0) {
                     mEnterAnimationEnd = now + mDrawableContainerState.mEnterFadeDuration;
-                } else {
+                } else if (mHasAlpha) {
                     d.setAlpha(mAlpha);
                 }
+                if (mDrawableContainerState.mHasColorFilter) {
+                    d.setColorFilter(mDrawableContainerState.mColorFilter);
+                }
                 d.setVisible(isVisible(), true);
                 d.setDither(mDrawableContainerState.mDither);
-                d.setColorFilter(mColorFilter);
                 d.setState(getState());
                 d.setLevel(getLevel());
                 d.setBounds(getBounds());
@@ -395,6 +437,8 @@
     }
 
     void animate(boolean schedule) {
+        mHasAlpha = true;
+
         final long now = SystemClock.uptimeMillis();
         boolean animating = false;
         if (mCurrDrawable != null) {
@@ -442,6 +486,16 @@
     }
 
     @Override
+    public void applyTheme(Theme theme) {
+        mDrawableContainerState.applyTheme(theme);
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        return mDrawableContainerState.canApplyTheme();
+    }
+
+    @Override
     public ConstantState getConstantState() {
         if (mDrawableContainerState.canConstantState()) {
             mDrawableContainerState.mChangingConfigurations = getChangingConfigurations();
@@ -469,6 +523,8 @@
         final DrawableContainer mOwner;
         final Resources mRes;
 
+        Theme mTheme;
+
         SparseArray<ConstantStateFuture> mDrawableFutures;
 
         int mChangingConfigurations;
@@ -507,6 +563,9 @@
 
         boolean mAutoMirrored;
 
+        ColorFilter mColorFilter;
+        boolean mHasColorFilter;
+
         DrawableContainerState(DrawableContainerState orig, DrawableContainer owner,
                 Resources res) {
             mOwner = owner;
@@ -527,6 +586,8 @@
                 mEnterFadeDuration = orig.mEnterFadeDuration;
                 mExitFadeDuration = orig.mExitFadeDuration;
                 mAutoMirrored = orig.mAutoMirrored;
+                mColorFilter = orig.mColorFilter;
+                mHasColorFilter = orig.mHasColorFilter;
 
                 // Cloning the following values may require creating futures.
                 mConstantPadding = orig.getConstantPadding();
@@ -661,6 +722,41 @@
             mLayoutDirection = layoutDirection;
         }
 
+        final void applyTheme(Theme theme) {
+            // No need to call createAllFutures, since future drawables will
+            // apply the theme when they are prepared.
+            final int N = mNumChildren;
+            final Drawable[] drawables = mDrawables;
+            for (int i = 0; i < N; i++) {
+                if (drawables[i] != null) {
+                    drawables[i].applyTheme(theme);
+                }
+            }
+
+            mTheme = theme;
+        }
+
+        @Override
+        public boolean canApplyTheme() {
+            final int N = mNumChildren;
+            final Drawable[] drawables = mDrawables;
+            for (int i = 0; i < N; i++) {
+                final Drawable d = drawables[i]; 
+                if (d != null) {
+                    if (d.canApplyTheme()) {
+                        return true;
+                    }
+                } else {
+                    final ConstantStateFuture future = mDrawableFutures.get(i);
+                    if (future != null && future.canApplyTheme()) {
+                        return true;
+                    }
+                }
+            }
+
+            return false;
+        }
+
         final void mutate() {
             // No need to call createAllFutures, since future drawables will
             // mutate when they are prepared.
@@ -879,8 +975,14 @@
              * @return a prepared Drawable
              */
             public Drawable get(DrawableContainerState state) {
-                final Drawable result = (state.mRes == null) ?
-                        mConstantState.newDrawable() : mConstantState.newDrawable(state.mRes);
+                final Drawable result;
+                if (state.mRes == null) {
+                    result = mConstantState.newDrawable();
+                } else if (state.mTheme == null) {
+                    result = mConstantState.newDrawable(state.mRes);
+                } else {
+                    result = mConstantState.newDrawable(state.mRes, state.mTheme);
+                }
                 result.setLayoutDirection(state.mLayoutDirection);
                 result.setCallback(state.mOwner);
 
@@ -890,6 +992,14 @@
 
                 return result;
             }
+
+            /**
+             * Whether the constant state wrapped by this future can apply a
+             * theme.
+             */
+            public boolean canApplyTheme() {
+                return mConstantState.canApplyTheme();
+            }
         }
     }
 
diff --git a/graphics/java/android/graphics/drawable/DrawableWrapper.java b/graphics/java/android/graphics/drawable/DrawableWrapper.java
new file mode 100644
index 0000000..6ab33f8
--- /dev/null
+++ b/graphics/java/android/graphics/drawable/DrawableWrapper.java
@@ -0,0 +1,305 @@
+/*
+ * Copyright (C) 2014 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 android.graphics.drawable;
+
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Rect;
+import android.graphics.Xfermode;
+
+/**
+ * A Drawable that wraps another Drawable.
+ */
+public class DrawableWrapper extends Drawable implements Drawable.Callback {
+    private WrapperState mWrapperState;
+
+    /** Local drawable backed by its own constant state. */
+    private Drawable mWrappedDrawable;
+
+    private boolean mMutated;
+
+    /** @hide */
+    @Override
+    public boolean isProjected() {
+        return mWrappedDrawable.isProjected();
+    }
+
+    @Override
+    public void setAutoMirrored(boolean mirrored) {
+        mWrappedDrawable.setAutoMirrored(mirrored);
+    }
+
+    @Override
+    public boolean isAutoMirrored() {
+        return mWrappedDrawable.isAutoMirrored();
+    }
+
+    @Override
+    public int getMinimumWidth() {
+        return mWrappedDrawable.getMinimumWidth();
+    }
+
+    @Override
+    public int getMinimumHeight() {
+        return mWrappedDrawable.getMinimumHeight();
+    }
+
+    @Override
+    public int getIntrinsicWidth() {
+        return mWrappedDrawable.getIntrinsicWidth();
+    }
+
+    @Override
+    public int getIntrinsicHeight() {
+        return mWrappedDrawable.getIntrinsicHeight();
+    }
+
+    @Override
+    public Drawable getCurrent() {
+        return mWrappedDrawable.getCurrent();
+    }
+
+    @Override
+    public void invalidateDrawable(Drawable who) {
+        final Callback callback = getCallback();
+        if (callback != null) {
+            callback.invalidateDrawable(this);
+        }
+    }
+
+    @Override
+    public void scheduleDrawable(Drawable who, Runnable what, long when) {
+        final Callback callback = getCallback();
+        if (callback != null) {
+            callback.scheduleDrawable(this, what, when);
+        }
+    }
+
+    @Override
+    public void unscheduleDrawable(Drawable who, Runnable what) {
+        final Callback callback = getCallback();
+        if (callback != null) {
+            callback.unscheduleDrawable(this, what);
+        }
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        mWrappedDrawable.draw(canvas);
+    }
+
+    @Override
+    public int getChangingConfigurations() {
+        return mWrappedDrawable.getChangingConfigurations();
+    }
+
+    @Override
+    public boolean getPadding(Rect padding) {
+        return mWrappedDrawable.getPadding(padding);
+    }
+
+    @Override
+    public Rect getDirtyBounds() {
+        return mWrappedDrawable.getDirtyBounds();
+    }
+
+    @Override
+    public boolean supportsHotspots() {
+        return mWrappedDrawable.supportsHotspots();
+    }
+
+    @Override
+    public void setHotspot(int id, float x, float y) {
+        mWrappedDrawable.setHotspot(id, x, y);
+    }
+
+    @Override
+    public void removeHotspot(int id) {
+        mWrappedDrawable.removeHotspot(id);
+    }
+
+    @Override
+    public void clearHotspots() {
+        mWrappedDrawable.clearHotspots();
+    }
+
+    @Override
+    public boolean setVisible(boolean visible, boolean restart) {
+        // Must call through to super().
+        super.setVisible(visible, restart);
+        return mWrappedDrawable.setVisible(visible, restart);
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+        mWrappedDrawable.setAlpha(alpha);
+    }
+
+    @Override
+    public int getAlpha() {
+        return mWrappedDrawable.getAlpha();
+    }
+
+    /** {@hide} */
+    @Override
+    public void setLayoutDirection(int layoutDirection) {
+        mWrappedDrawable.setLayoutDirection(layoutDirection);
+    }
+
+    /** {@hide} */
+    @Override
+    public int getLayoutDirection() {
+        return mWrappedDrawable.getLayoutDirection();
+    }
+
+    @Override
+    public void setColorFilter(ColorFilter cf) {
+        mWrappedDrawable.setColorFilter(cf);
+    }
+
+    @Override
+    public ColorFilter getColorFilter() {
+        return mWrappedDrawable.getColorFilter();
+    }
+
+    @Override
+    public void setFilterBitmap(boolean filter) {
+        mWrappedDrawable.setFilterBitmap(filter);
+    }
+
+    @Override
+    public void setXfermode(Xfermode mode) {
+        mWrappedDrawable.setXfermode(mode);
+    }
+
+    @Override
+    public int getOpacity() {
+        return mWrappedDrawable.getOpacity();
+    }
+
+    @Override
+    public boolean isStateful() {
+        return mWrappedDrawable.isStateful();
+    }
+    
+    @Override
+    public final boolean setState(int[] stateSet) {
+        return super.setState(stateSet);
+    }
+
+    @Override
+    public final int[] getState() {
+        return super.getState();
+    }
+
+    @Override
+    protected boolean onStateChange(int[] state) {
+        // Don't override setState(), getState().
+        return mWrappedDrawable.setState(state);
+    }
+
+    @Override
+    protected boolean onLevelChange(int level) {
+        // Don't override setLevel(), getLevel().
+        return mWrappedDrawable.setLevel(level);
+    }
+    
+    @Override
+    public final void setBounds(int left, int top, int right, int bottom) {
+        super.setBounds(left, top, right, bottom);
+    }
+    
+    @Override
+    public final void setBounds(Rect bounds) {
+        super.setBounds(bounds);
+    }
+
+    @Override
+    protected void onBoundsChange(Rect bounds) {
+        // Don't override setBounds(), getBounds().
+        mWrappedDrawable.setBounds(bounds);
+    }
+
+    protected void setConstantState(WrapperState wrapperState, Resources res) {
+        mWrapperState = wrapperState;
+
+        // Load a new drawable from the constant state.
+        if (wrapperState == null || wrapperState.mWrappedConstantState == null) {
+            mWrappedDrawable = null;
+        } else if (res != null) {
+            mWrappedDrawable = wrapperState.mWrappedConstantState.newDrawable(res);
+        } else {
+            mWrappedDrawable = wrapperState.mWrappedConstantState.newDrawable();
+        }
+    }
+
+    @Override
+    public ConstantState getConstantState() {
+        return mWrapperState;
+    }
+
+    @Override
+    public Drawable mutate() {
+        if (!mMutated) {
+            mWrappedDrawable = mWrappedDrawable.mutate();
+            mMutated = true;
+        }
+        return this;
+    }
+
+    /**
+     * Sets the wrapped drawable and update the constant state.
+     *
+     * @param drawable
+     * @param res
+     */
+    protected final void setDrawable(Drawable drawable, Resources res) {
+        if (mWrappedDrawable != null) {
+            mWrappedDrawable.setCallback(null);
+        }
+
+        mWrappedDrawable = drawable;
+
+        if (drawable != null) {
+            drawable.setCallback(this);
+
+            mWrapperState.mWrappedConstantState = drawable.getConstantState();
+        } else {
+            mWrapperState.mWrappedConstantState = null;
+        }
+    }
+
+    protected final Drawable getDrawable() {
+        return mWrappedDrawable;
+    }
+
+    public static abstract class WrapperState extends ConstantState {
+        ConstantState mWrappedConstantState;
+
+        WrapperState(WrapperState orig) {
+            if (orig != null) {
+                mWrappedConstantState = orig.mWrappedConstantState;
+            }
+        }
+
+        @Override
+        public int getChangingConfigurations() {
+            return mWrappedConstantState.getChangingConfigurations();
+        }
+    }
+}
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index b340777..dc06350 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -16,25 +16,30 @@
 
 package android.graphics.drawable;
 
+import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.ColorFilter;
 import android.graphics.DashPathEffect;
 import android.graphics.LinearGradient;
+import android.graphics.Outline;
 import android.graphics.Paint;
+import android.graphics.Path;
 import android.graphics.PixelFormat;
+import android.graphics.RadialGradient;
 import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Shader;
-import android.graphics.Path;
-import android.graphics.RadialGradient;
 import android.graphics.SweepGradient;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.TypedValue;
 
+import com.android.internal.R;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -111,6 +116,18 @@
      */
     public static final int SWEEP_GRADIENT  = 2;
 
+    /** Radius is in pixels. */
+    private static final int RADIUS_TYPE_PIXELS = 0;
+
+    /** Radius is a fraction of the base size. */
+    private static final int RADIUS_TYPE_FRACTION = 1;
+
+    /** Radius is a fraction of the bounds size. */
+    private static final int RADIUS_TYPE_FRACTION_PARENT = 2;
+
+    private static final float DEFAULT_INNER_RADIUS_RATIO = 3.0f;
+    private static final float DEFAULT_THICKNESS_RATIO = 9.0f;
+
     private GradientState mGradientState;
     
     private final Paint mFillPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
@@ -122,13 +139,16 @@
 
     private final Path mPath = new Path();
     private final RectF mRect = new RectF();
-    
+
     private Paint mLayerPaint;    // internal, used if we use saveLayer()
     private boolean mRectIsDirty;   // internal state
     private boolean mMutated;
     private Path mRingPath;
     private boolean mPathIsDirty = true;
 
+    /** Current gradient radius, valid when {@link #mRectIsDirty} is false. */
+    private float mGradientRadius;
+
     /**
      * Controls how the gradient is oriented relative to the drawable's bounds
      */
@@ -152,7 +172,7 @@
     }
 
     public GradientDrawable() {
-        this(new GradientState(Orientation.TOP_BOTTOM, null));
+        this(new GradientState(Orientation.TOP_BOTTOM, null), null);
     }
     
     /**
@@ -160,7 +180,7 @@
      * of colors for the gradient.
      */
     public GradientDrawable(Orientation orientation, int[] colors) {
-        this(new GradientState(orientation, colors));
+        this(new GradientState(orientation, colors), null);
     }
     
     @Override
@@ -233,6 +253,23 @@
     }
 
     /**
+     * <p>Set the stroke width and color state list for the drawable. If width
+     * is zero, then no stroke is drawn.</p>
+     * <p><strong>Note</strong>: changing this property will affect all instances
+     * of a drawable loaded from a resource. It is recommended to invoke
+     * {@link #mutate()} before changing this property.</p>
+     *
+     * @param width The width in pixels of the stroke
+     * @param colorStateList The color state list of the stroke
+     *
+     * @see #mutate()
+     * @see #setStroke(int, ColorStateList, float, float)
+     */
+    public void setStroke(int width, ColorStateList colorStateList) {
+        setStroke(width, colorStateList, 0, 0);
+    }
+
+    /**
      * <p>Set the stroke width and color for the drawable. If width is zero,
      * then no stroke is drawn. This method can also be used to dash the stroke.</p>
      * <p><strong>Note</strong>: changing this property will affect all instances
@@ -248,8 +285,40 @@
      * @see #setStroke(int, int) 
      */
     public void setStroke(int width, int color, float dashWidth, float dashGap) {
-        mGradientState.setStroke(width, color, dashWidth, dashGap);
+        mGradientState.setStroke(width, ColorStateList.valueOf(color), dashWidth, dashGap);
+        setStrokeInternal(width, color, dashWidth, dashGap);
+    }
 
+    /**
+     * <p>Set the stroke width and color state list for the drawable. If width
+     * is zero, then no stroke is drawn. This method can also be used to dash
+     * the stroke.</p>
+     * <p><strong>Note</strong>: changing this property will affect all instances
+     * of a drawable loaded from a resource. It is recommended to invoke
+     * {@link #mutate()} before changing this property.</p>
+     *
+     * @param width The width in pixels of the stroke
+     * @param colorStateList The color state list of the stroke
+     * @param dashWidth The length in pixels of the dashes, set to 0 to disable dashes
+     * @param dashGap The gap in pixels between dashes
+     *
+     * @see #mutate()
+     * @see #setStroke(int, ColorStateList)
+     */
+    public void setStroke(
+            int width, ColorStateList colorStateList, float dashWidth, float dashGap) {
+        mGradientState.setStroke(width, colorStateList, dashWidth, dashGap);
+        final int color;
+        if (colorStateList == null) {
+            color = Color.TRANSPARENT;
+        } else {
+            final int[] stateSet = getState();
+            color = colorStateList.getColorForState(stateSet, 0);
+        }
+        setStrokeInternal(width, color, dashWidth, dashGap);
+    }
+
+    private void setStrokeInternal(int width, int color, float dashWidth, float dashGap) {
         if (mStrokePaint == null)  {
             mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mStrokePaint.setStyle(Paint.Style.STROKE);
@@ -351,12 +420,27 @@
      * @see #setGradientType(int) 
      */
     public void setGradientRadius(float gradientRadius) {
-        mGradientState.setGradientRadius(gradientRadius);
+        mGradientState.setGradientRadius(gradientRadius, TypedValue.COMPLEX_UNIT_PX);
         mRectIsDirty = true;
         invalidateSelf();
     }
 
     /**
+     * Returns the radius of the gradient in pixels. The radius is valid only
+     * when the gradient type is set to {@link #RADIAL_GRADIENT}.
+     *
+     * @return Radius in pixels.
+     */
+    public float getGradientRadius() {
+        if (mGradientState.mGradient != RADIAL_GRADIENT) {
+            return 0;
+        }
+
+        ensureValidRect();
+        return mGradientRadius;
+    }
+
+    /**
      * <p>Sets whether or not this drawable will honor its <code>level</code>
      * property.</p>
      * <p><strong>Note</strong>: changing this property will affect all instances
@@ -479,7 +563,7 @@
             mFillPaint.setAlpha(currFillAlpha);
             mFillPaint.setDither(mDither);
             mFillPaint.setColorFilter(mColorFilter);
-            if (mColorFilter != null && !mGradientState.mHasSolidColor) {
+            if (mColorFilter != null && mGradientState.mColorStateList == null) {
                 mFillPaint.setColor(mAlpha << 24);
             }
             if (haveStroke) {
@@ -488,15 +572,11 @@
                 mStrokePaint.setColorFilter(mColorFilter);
             }
         }
-        
+
         switch (st.mShape) {
             case RECTANGLE:
                 if (st.mRadiusArray != null) {
-                    if (mPathIsDirty || mRectIsDirty) {
-                        mPath.reset();
-                        mPath.addRoundRect(mRect, st.mRadiusArray, Path.Direction.CW);
-                        mPathIsDirty = mRectIsDirty = false;
-                    }
+                    buildPathIfDirty();
                     canvas.drawPath(mPath, mFillPaint);
                     if (haveStroke) {
                         canvas.drawPath(mPath, mStrokePaint);
@@ -507,11 +587,8 @@
                     // to show it. If we did nothing, Skia would clamp the rad
                     // independently along each axis, giving us a thin ellipse
                     // if the rect were very wide but not very tall
-                    float rad = st.mRadius;
-                    float r = Math.min(mRect.width(), mRect.height()) * 0.5f;
-                    if (rad > r) {
-                        rad = r;
-                    }
+                    float rad = Math.min(st.mRadius,
+                            Math.min(mRect.width(), mRect.height()) * 0.5f);
                     canvas.drawRoundRect(mRect, rad, rad, mFillPaint);
                     if (haveStroke) {
                         canvas.drawRoundRect(mRect, rad, rad, mStrokePaint);
@@ -556,7 +633,16 @@
             }
         }
     }
-    
+
+    private void buildPathIfDirty() {
+        final GradientState st = mGradientState;
+        if (mPathIsDirty || mRectIsDirty) {
+            mPath.reset();
+            mPath.addRoundRect(mRect, st.mRadiusArray, Path.Direction.CW);
+            mPathIsDirty = mRectIsDirty = false;
+        }
+    }
+
     private Path buildRing(GradientState st) {
         if (mRingPath != null && (!st.mUseLevelForShape || !mPathIsDirty)) return mRingPath;
         mPathIsDirty = false;
@@ -583,7 +669,7 @@
         if (mRingPath == null) {
             mRingPath = new Path();
         } else {
-            mRingPath.reset();            
+            mRingPath.reset();
         }
 
         final Path ringPath = mRingPath;
@@ -610,7 +696,7 @@
     }
 
     /**
-     * <p>Changes this drawbale to use a single color instead of a gradient.</p>
+     * <p>Changes this drawable to use a single color instead of a gradient.</p>
      * <p><strong>Note</strong>: changing color will affect all instances
      * of a drawable loaded from a resource. It is recommended to invoke
      * {@link #mutate()} before changing the color.</p>
@@ -621,11 +707,81 @@
      * @see #setColors(int[]) 
      */
     public void setColor(int argb) {
-        mGradientState.setSolidColor(argb);
+        mGradientState.setColorStateList(ColorStateList.valueOf(argb));
         mFillPaint.setColor(argb);
         invalidateSelf();
     }
 
+    /**
+     * Changes this drawable to use a single color state list instead of a
+     * gradient. Calling this method with a null argument will clear the color
+     * and is equivalent to calling {@link #setColor(int)} with the argument
+     * {@link Color#TRANSPARENT}.
+     * <p>
+     * <strong>Note</strong>: changing color will affect all instances of a
+     * drawable loaded from a resource. It is recommended to invoke
+     * {@link #mutate()} before changing the color.</p>
+     *
+     * @param colorStateList The color state list used to fill the shape
+     * @see #mutate()
+     */
+    public void setColor(ColorStateList colorStateList) {
+        mGradientState.setColorStateList(colorStateList);
+        final int color;
+        if (colorStateList == null) {
+            color = Color.TRANSPARENT;
+        } else {
+            final int[] stateSet = getState();
+            color = colorStateList.getColorForState(stateSet, 0);
+        }
+        mFillPaint.setColor(color);
+        invalidateSelf();
+    }
+
+    @Override
+    protected boolean onStateChange(int[] stateSet) {
+        boolean invalidateSelf = false;
+
+        final GradientState s = mGradientState;
+        final ColorStateList stateList = s.mColorStateList;
+        if (stateList != null) {
+            final int newColor = stateList.getColorForState(stateSet, 0);
+            final int oldColor = mFillPaint.getColor();
+            if (oldColor != newColor) {
+                mFillPaint.setColor(newColor);
+                invalidateSelf = true;
+            }
+        }
+
+        final Paint strokePaint = mStrokePaint;
+        if (strokePaint != null) {
+            final ColorStateList strokeStateList = s.mStrokeColorStateList;
+            if (strokeStateList != null) {
+                final int newStrokeColor = strokeStateList.getColorForState(stateSet, 0);
+                final int oldStrokeColor = strokePaint.getColor();
+                if (oldStrokeColor != newStrokeColor) {
+                    strokePaint.setColor(newStrokeColor);
+                    invalidateSelf = true;
+                }
+            }
+        }
+
+        if (invalidateSelf) {
+            invalidateSelf();
+            return true;
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean isStateful() {
+        final GradientState s = mGradientState;
+        return super.isStateful()
+                || (s.mColorStateList != null && s.mColorStateList.isStateful())
+                || (s.mStrokeColorStateList != null && s.mStrokeColorStateList.isStateful());
+    }
+
     @Override
     public int getChangingConfigurations() {
         return super.getChangingConfigurations() | mGradientState.mChangingConfigurations;
@@ -710,7 +866,7 @@
                 float x0, x1, y0, y1;
 
                 if (st.mGradient == LINEAR_GRADIENT) {
-                    final float level = st.mUseLevel ? (float) getLevel() / 10000.0f : 1.0f;                    
+                    final float level = st.mUseLevel ? getLevel() / 10000.0f : 1.0f;
                     switch (st.mOrientation) {
                     case TOP_BOTTOM:
                         x0 = r.left;            y0 = r.top;
@@ -752,11 +908,27 @@
                     x0 = r.left + (r.right - r.left) * st.mCenterX;
                     y0 = r.top + (r.bottom - r.top) * st.mCenterY;
 
-                    final float level = st.mUseLevel ? (float) getLevel() / 10000.0f : 1.0f;
+                    float radius = st.mGradientRadius;
+                    if (st.mGradientRadiusType == RADIUS_TYPE_FRACTION) {
+                        radius *= Math.min(st.mWidth, st.mHeight);
+                    } else if (st.mGradientRadiusType == RADIUS_TYPE_FRACTION_PARENT) {
+                        radius *= Math.min(r.width(), r.height());
+                    }
 
-                    mFillPaint.setShader(new RadialGradient(x0, y0,
-                            level * st.mGradientRadius, colors, null,
-                            Shader.TileMode.CLAMP));
+                    if (st.mUseLevel) {
+                        radius *= getLevel() / 10000.0f;
+                    }
+
+                    mGradientRadius = radius;
+
+                    if (radius == 0) {
+                        // We can't have a shader with zero radius, so let's
+                        // have a very, very small radius.
+                        radius = 0.001f;
+                    }
+
+                    mFillPaint.setShader(new RadialGradient(
+                            x0, y0, radius, colors, null, Shader.TileMode.CLAMP));
                 } else if (st.mGradient == SWEEP_GRADIENT) {
                     x0 = r.left + (r.right - r.left) * st.mCenterX;
                     y0 = r.top + (r.bottom - r.top) * st.mCenterY;
@@ -774,12 +946,12 @@
                         tempColors[length] = colors[length - 1];
 
                         tempPositions = st.mTempPositions;
-                        final float fraction = 1.0f / (float) (length - 1);
+                        final float fraction = 1.0f / (length - 1);
                         if (tempPositions == null || tempPositions.length != length + 1) {
                             tempPositions = st.mTempPositions = new float[length + 1];
                         }
 
-                        final float level = (float) getLevel() / 10000.0f;
+                        final float level = getLevel() / 10000.0f;
                         for (int i = 0; i < length; i++) {
                             tempPositions[i] = i * fraction * level;
                         }
@@ -791,7 +963,7 @@
 
                 // If we don't have a solid color, the alpha channel must be
                 // maxed out so that alpha modulation works correctly.
-                if (!st.mHasSolidColor) {
+                if (st.mColorStateList == null) {
                     mFillPaint.setColor(Color.BLACK);
                 }
             }
@@ -800,45 +972,196 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser,
-            AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-        
-        final GradientState st = mGradientState;
-        
-        TypedArray a = r.obtainAttributes(attrs,
-                com.android.internal.R.styleable.GradientDrawable);
+        final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.GradientDrawable);
+        super.inflateWithAttributes(r, parser, a, R.styleable.GradientDrawable_visible);
 
-        super.inflateWithAttributes(r, parser, a,
-                com.android.internal.R.styleable.GradientDrawable_visible);
-        
-        int shapeType = a.getInt(
-                com.android.internal.R.styleable.GradientDrawable_shape, RECTANGLE);
-        boolean dither = a.getBoolean(
-                com.android.internal.R.styleable.GradientDrawable_dither, false);
-        
-        if (shapeType == RING) {
-            st.mInnerRadius = a.getDimensionPixelSize(
-                    com.android.internal.R.styleable.GradientDrawable_innerRadius, -1);
-            if (st.mInnerRadius == -1) {
-                st.mInnerRadiusRatio = a.getFloat(
-                        com.android.internal.R.styleable.GradientDrawable_innerRadiusRatio, 3.0f);
-            }
-            st.mThickness = a.getDimensionPixelSize(
-                    com.android.internal.R.styleable.GradientDrawable_thickness, -1);
-            if (st.mThickness == -1) {
-                st.mThicknessRatio = a.getFloat(
-                        com.android.internal.R.styleable.GradientDrawable_thicknessRatio, 9.0f);
-            }
-            st.mUseLevelForShape = a.getBoolean(
-                    com.android.internal.R.styleable.GradientDrawable_useLevel, true);
-        }
-        
+        inflateStateFromTypedArray(a);
         a.recycle();
-        
-        setShape(shapeType);
-        setDither(dither);
 
+        inflateChildElements(r, parser, attrs, theme);
+
+        mGradientState.computeOpacity();
+    }
+
+    /**
+     * Initializes the constant state from the values in the typed array.
+     */
+    private void inflateStateFromTypedArray(TypedArray a) {
+        final GradientState state = mGradientState;
+
+        // Extract the theme attributes, if any.
+        final int[] themeAttrs = a.extractThemeAttrs();
+        state.mThemeAttrs = themeAttrs;
+
+        final boolean needsRingAttrs;
+        if (themeAttrs == null || themeAttrs[R.styleable.GradientDrawable_shape] == 0) {
+            final int shapeType = a.getInt(R.styleable.GradientDrawable_shape, RECTANGLE);
+            setShape(shapeType);
+            needsRingAttrs = shapeType == RING;
+        } else {
+            needsRingAttrs = true;
+        }
+
+        // We only need to load ring attributes if the shape type is a theme
+        // attribute (e.g. unknown) or defined in XML as RING.
+        if (needsRingAttrs) {
+            if (themeAttrs == null || themeAttrs[R.styleable.GradientDrawable_innerRadius] == 0) {
+                state.mInnerRadius = a.getDimensionPixelSize(
+                        R.styleable.GradientDrawable_innerRadius, -1);
+            }
+
+            if (state.mInnerRadius == -1
+                    && (themeAttrs == null || themeAttrs[R.styleable.GradientDrawable_thicknessRatio] == 0)) {
+                state.mInnerRadiusRatio = a.getFloat(
+                        R.styleable.GradientDrawable_innerRadiusRatio, DEFAULT_INNER_RADIUS_RATIO);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.GradientDrawable_thickness] == 0) {
+                state.mThickness = a.getDimensionPixelSize(
+                        R.styleable.GradientDrawable_thickness, -1);
+            }
+
+            if (state.mThickness == -1
+                    && (themeAttrs == null || themeAttrs[R.styleable.GradientDrawable_thicknessRatio] == 0)) {
+                state.mThicknessRatio = a.getFloat(
+                        R.styleable.GradientDrawable_thicknessRatio, DEFAULT_THICKNESS_RATIO);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.GradientDrawable_useLevel] == 0) {
+                state.mUseLevelForShape = a.getBoolean(
+                        R.styleable.GradientDrawable_useLevel, true);
+            }
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.GradientDrawable_dither] == 0) {
+            final boolean dither = a.getBoolean(R.styleable.GradientDrawable_dither, false);
+            setDither(dither);
+        }
+    }
+
+    @Override
+    public void applyTheme(Theme t) {
+        super.applyTheme(t);
+
+        final GradientState state = mGradientState;
+        if (state == null) {
+            throw new RuntimeException("Can't apply theme to <shape> with no constant state");
+        }
+
+        final int[] themeAttrs = state.mThemeAttrs;
+        if (themeAttrs != null) {
+            final TypedArray a = t.resolveAttributes(
+                    themeAttrs, R.styleable.GradientDrawable, 0, 0);
+            updateStateFromTypedArray(a);
+            a.recycle();
+
+            applyThemeChildElements(t);
+
+            mGradientState.computeOpacity();
+        }
+    }
+
+    /**
+     * Updates the constant state from the values in the typed array.
+     */
+    private void updateStateFromTypedArray(TypedArray a) {
+        final GradientState state = mGradientState;
+
+        if (a.hasValue(R.styleable.GradientDrawable_shape)) {
+            final int shapeType = a.getInt(R.styleable.GradientDrawable_shape, RECTANGLE);
+            setShape(shapeType);
+        }
+
+        if (a.hasValue(R.styleable.GradientDrawable_dither)) {
+            final boolean dither = a.getBoolean(R.styleable.GradientDrawable_dither, false);
+            setDither(dither);
+        }
+
+        if (state.mShape == RING) {
+            if (a.hasValue(R.styleable.GradientDrawable_innerRadius)) {
+                state.mInnerRadius = a.getDimensionPixelSize(
+                        R.styleable.GradientDrawable_innerRadius, -1);
+            }
+
+            if (state.mInnerRadius == -1 && a.hasValue(
+                    R.styleable.GradientDrawable_innerRadiusRatio)) {
+                state.mInnerRadiusRatio = a.getFloat(
+                        R.styleable.GradientDrawable_innerRadiusRatio, DEFAULT_INNER_RADIUS_RATIO);
+            }
+
+            if (a.hasValue(R.styleable.GradientDrawable_thickness)) {
+                state.mThickness = a.getDimensionPixelSize(
+                        R.styleable.GradientDrawable_thickness, -1);
+            }
+
+            if (state.mThickness == -1 && a.hasValue(
+                    R.styleable.GradientDrawable_thicknessRatio)) {
+                state.mThicknessRatio = a.getFloat(
+                        R.styleable.GradientDrawable_thicknessRatio, DEFAULT_THICKNESS_RATIO);
+            }
+
+            if (a.hasValue(R.styleable.GradientDrawable_useLevel)) {
+                state.mUseLevelForShape = a.getBoolean(
+                        R.styleable.GradientDrawable_useLevel, true);
+            }
+        }
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        final GradientState state = mGradientState;
+        return state != null && (state.mThemeAttrs != null || state.mAttrSize != null
+                || state.mAttrGradient != null || state.mAttrSolid != null
+                || state.mAttrStroke != null || state.mAttrCorners != null
+                || state.mAttrPadding != null);
+    }
+
+    private void applyThemeChildElements(Theme t) {
+        final GradientState state = mGradientState;
+        TypedArray a;
+
+        if (state.mAttrSize != null) {
+            a = t.resolveAttributes(state.mAttrSize, R.styleable.GradientDrawableSize, 0, 0);
+            // TODO: updateGradientDrawableSize(a);
+            a.recycle();
+        }
+
+        if (state.mAttrGradient != null) {
+            a = t.resolveAttributes(state.mAttrGradient, R.styleable.GradientDrawableGradient, 0, 0);
+            // TODO: updateGradientDrawableGradient(a);
+            a.recycle();
+        }
+
+        if (state.mAttrSolid != null) {
+            a = t.resolveAttributes(state.mAttrSolid, R.styleable.GradientDrawableSolid, 0, 0);
+            // TODO: updateGradientDrawableSolid(a);
+            a.recycle();
+        }
+
+        if (state.mAttrStroke != null) {
+            a = t.resolveAttributes(state.mAttrStroke, R.styleable.GradientDrawableStroke, 0, 0);
+            // TODO: updateGradientDrawableStroke(a);
+            a.recycle();
+        }
+
+        if (state.mAttrCorners != null) {
+            a = t.resolveAttributes(state.mAttrCorners, R.styleable.DrawableCorners, 0, 0);
+            // TODO: updateDrawableCorners(a);
+            a.recycle();
+        }
+
+        if (state.mAttrPadding != null) {
+            a = t.resolveAttributes(state.mAttrPadding, R.styleable.GradientDrawablePadding, 0, 0);
+            // TODO: updateGradientDrawablePadding(a);
+            a.recycle();
+        }
+    }
+
+    private void inflateChildElements(Resources r, XmlPullParser parser, AttributeSet attrs,
+            Theme theme) throws XmlPullParserException, IOException {
+        TypedArray a;
         int type;
 
         final int innerDepth = parser.getDepth() + 1;
@@ -853,187 +1176,233 @@
             if (depth > innerDepth) {
                 continue;
             }
-            
+
             String name = parser.getName();
             
             if (name.equals("size")) {
-                a = r.obtainAttributes(attrs,
-                        com.android.internal.R.styleable.GradientDrawableSize);
-                int width = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.GradientDrawableSize_width, -1);
-                int height = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.GradientDrawableSize_height, -1);
+                a = obtainAttributes(
+                        r, theme, attrs, R.styleable.GradientDrawableSize);
+                applyGradientDrawableSize(a);
                 a.recycle();
-                setSize(width, height);
             } else if (name.equals("gradient")) {
-                a = r.obtainAttributes(attrs,
-                        com.android.internal.R.styleable.GradientDrawableGradient);
-                int startColor = a.getColor(
-                        com.android.internal.R.styleable.GradientDrawableGradient_startColor, 0);
-                boolean hasCenterColor = a
-                        .hasValue(com.android.internal.R.styleable.GradientDrawableGradient_centerColor);
-                int centerColor = a.getColor(
-                        com.android.internal.R.styleable.GradientDrawableGradient_centerColor, 0);
-                int endColor = a.getColor(
-                        com.android.internal.R.styleable.GradientDrawableGradient_endColor, 0);
-                int gradientType = a.getInt(
-                        com.android.internal.R.styleable.GradientDrawableGradient_type,
-                        LINEAR_GRADIENT);
-
-                st.mCenterX = getFloatOrFraction(
-                        a,
-                        com.android.internal.R.styleable.GradientDrawableGradient_centerX,
-                        0.5f);
-
-                st.mCenterY = getFloatOrFraction(
-                        a,
-                        com.android.internal.R.styleable.GradientDrawableGradient_centerY,
-                        0.5f);
-
-                st.mUseLevel = a.getBoolean(
-                        com.android.internal.R.styleable.GradientDrawableGradient_useLevel, false);
-                st.mGradient = gradientType;
-
-                if (gradientType == LINEAR_GRADIENT) {
-                    int angle = (int)a.getFloat(
-                            com.android.internal.R.styleable.GradientDrawableGradient_angle, 0);
-                    angle %= 360;
-                    if (angle % 45 != 0) {
-                        throw new XmlPullParserException(a.getPositionDescription()
-                                + "<gradient> tag requires 'angle' attribute to "
-                                + "be a multiple of 45");
-                    }
-
-                    switch (angle) {
-                    case 0:
-                        st.mOrientation = Orientation.LEFT_RIGHT;
-                        break;
-                    case 45:
-                        st.mOrientation = Orientation.BL_TR;
-                        break;
-                    case 90:
-                        st.mOrientation = Orientation.BOTTOM_TOP;
-                        break;
-                    case 135:
-                        st.mOrientation = Orientation.BR_TL;
-                        break;
-                    case 180:
-                        st.mOrientation = Orientation.RIGHT_LEFT;
-                        break;
-                    case 225:
-                        st.mOrientation = Orientation.TR_BL;
-                        break;
-                    case 270:
-                        st.mOrientation = Orientation.TOP_BOTTOM;
-                        break;
-                    case 315:
-                        st.mOrientation = Orientation.TL_BR;
-                        break;
-                    }
-                } else {
-                    TypedValue tv = a.peekValue(
-                            com.android.internal.R.styleable.GradientDrawableGradient_gradientRadius);
-                    if (tv != null) {
-                        boolean radiusRel = tv.type == TypedValue.TYPE_FRACTION;
-                        st.mGradientRadius = radiusRel ?
-                                tv.getFraction(1.0f, 1.0f) : tv.getFloat();
-                    } else if (gradientType == RADIAL_GRADIENT) {
-                        throw new XmlPullParserException(
-                                a.getPositionDescription()
-                                + "<gradient> tag requires 'gradientRadius' "
-                                + "attribute with radial type");
-                    }
-                }
-
+                a = obtainAttributes(
+                        r, theme, attrs, R.styleable.GradientDrawableGradient);
+                applyGradientDrawableGradient(r, a);
                 a.recycle();
-
-                if (hasCenterColor) {
-                    st.mColors = new int[3];
-                    st.mColors[0] = startColor;
-                    st.mColors[1] = centerColor;
-                    st.mColors[2] = endColor;
-                    
-                    st.mPositions = new float[3];
-                    st.mPositions[0] = 0.0f;
-                    // Since 0.5f is default value, try to take the one that isn't 0.5f
-                    st.mPositions[1] = st.mCenterX != 0.5f ? st.mCenterX : st.mCenterY;
-                    st.mPositions[2] = 1f;
-                } else {
-                    st.mColors = new int[2];
-                    st.mColors[0] = startColor;
-                    st.mColors[1] = endColor;
-                }
-                
             } else if (name.equals("solid")) {
-                a = r.obtainAttributes(attrs,
-                        com.android.internal.R.styleable.GradientDrawableSolid);
-                int argb = a.getColor(
-                        com.android.internal.R.styleable.GradientDrawableSolid_color, 0);
+                a = obtainAttributes(
+                        r, theme, attrs, R.styleable.GradientDrawableSolid);
+                applyGradientDrawableSolid(a);
                 a.recycle();
-                setColor(argb);
             } else if (name.equals("stroke")) {
-                a = r.obtainAttributes(attrs,
-                        com.android.internal.R.styleable.GradientDrawableStroke);
-                int width = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.GradientDrawableStroke_width, 0);
-                int color = a.getColor(
-                        com.android.internal.R.styleable.GradientDrawableStroke_color, 0);
-                float dashWidth = a.getDimension(
-                        com.android.internal.R.styleable.GradientDrawableStroke_dashWidth, 0);
-                if (dashWidth != 0.0f) {
-                    float dashGap = a.getDimension(
-                            com.android.internal.R.styleable.GradientDrawableStroke_dashGap, 0);
-                    setStroke(width, color, dashWidth, dashGap);
-                } else {
-                    setStroke(width, color);
-                }
+                a = obtainAttributes(
+                        r, theme, attrs, R.styleable.GradientDrawableStroke);
+                applyGradientDrawableStroke(a);
                 a.recycle();
             } else if (name.equals("corners")) {
-                a = r.obtainAttributes(attrs,
-                        com.android.internal.R.styleable.DrawableCorners);
-                int radius = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.DrawableCorners_radius, 0);
-                setCornerRadius(radius);
-                int topLeftRadius = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.DrawableCorners_topLeftRadius, radius);
-                int topRightRadius = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.DrawableCorners_topRightRadius, radius);
-                int bottomLeftRadius = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.DrawableCorners_bottomLeftRadius, radius);
-                int bottomRightRadius = a.getDimensionPixelSize(
-                        com.android.internal.R.styleable.DrawableCorners_bottomRightRadius, radius);
-                if (topLeftRadius != radius || topRightRadius != radius ||
-                        bottomLeftRadius != radius || bottomRightRadius != radius) {
-                    // The corner radii are specified in clockwise order (see Path.addRoundRect())
-                    setCornerRadii(new float[] {
-                            topLeftRadius, topLeftRadius,
-                            topRightRadius, topRightRadius,
-                            bottomRightRadius, bottomRightRadius,
-                            bottomLeftRadius, bottomLeftRadius
-                    });
-                }
+                a = obtainAttributes(r
+                        , theme, attrs, R.styleable.DrawableCorners);
+                applyDrawableCorners(a);
                 a.recycle();
             } else if (name.equals("padding")) {
-                a = r.obtainAttributes(attrs,
-                        com.android.internal.R.styleable.GradientDrawablePadding);
-                mPadding = new Rect(
-                        a.getDimensionPixelOffset(
-                                com.android.internal.R.styleable.GradientDrawablePadding_left, 0),
-                        a.getDimensionPixelOffset(
-                                com.android.internal.R.styleable.GradientDrawablePadding_top, 0),
-                        a.getDimensionPixelOffset(
-                                com.android.internal.R.styleable.GradientDrawablePadding_right, 0),
-                        a.getDimensionPixelOffset(
-                                com.android.internal.R.styleable.GradientDrawablePadding_bottom, 0));
+                a = obtainAttributes(
+                        r, theme, attrs, R.styleable.GradientDrawablePadding);
+                applyGradientDrawablePadding(a);
                 a.recycle();
-                mGradientState.mPadding = mPadding;
             } else {
                 Log.w("drawable", "Bad element under <shape>: " + name);
             }
+        }
+    }
 
+    private void applyGradientDrawablePadding(TypedArray a) {
+        mPadding = new Rect(
+                a.getDimensionPixelOffset(
+                        R.styleable.GradientDrawablePadding_left, 0),
+                a.getDimensionPixelOffset(
+                        R.styleable.GradientDrawablePadding_top, 0),
+                a.getDimensionPixelOffset(
+                        R.styleable.GradientDrawablePadding_right, 0),
+                a.getDimensionPixelOffset(
+                        R.styleable.GradientDrawablePadding_bottom, 0));
+        mGradientState.mPadding = mPadding;
+
+        // Extract the theme attributes, if any.
+        mGradientState.mAttrPadding = a.extractThemeAttrs();
+    }
+
+    private void applyDrawableCorners(TypedArray a) {
+        int radius = a.getDimensionPixelSize(
+                R.styleable.DrawableCorners_radius, 0);
+        setCornerRadius(radius);
+        int topLeftRadius = a.getDimensionPixelSize(
+                R.styleable.DrawableCorners_topLeftRadius, radius);
+        int topRightRadius = a.getDimensionPixelSize(
+                R.styleable.DrawableCorners_topRightRadius, radius);
+        int bottomLeftRadius = a.getDimensionPixelSize(
+                R.styleable.DrawableCorners_bottomLeftRadius, radius);
+        int bottomRightRadius = a.getDimensionPixelSize(
+                R.styleable.DrawableCorners_bottomRightRadius, radius);
+        if (topLeftRadius != radius || topRightRadius != radius ||
+                bottomLeftRadius != radius || bottomRightRadius != radius) {
+            // The corner radii are specified in clockwise order (see Path.addRoundRect())
+            setCornerRadii(new float[] {
+                    topLeftRadius, topLeftRadius,
+                    topRightRadius, topRightRadius,
+                    bottomRightRadius, bottomRightRadius,
+                    bottomLeftRadius, bottomLeftRadius
+            });
         }
 
-        mGradientState.computeOpacity();
+        // Extract the theme attributes, if any.
+        mGradientState.mAttrCorners = a.extractThemeAttrs();
+    }
+
+    private void applyGradientDrawableStroke(TypedArray a) {
+        final int width = a.getDimensionPixelSize(
+                R.styleable.GradientDrawableStroke_width, 0);
+        final ColorStateList colorStateList = a.getColorStateList(
+                R.styleable.GradientDrawableStroke_color);
+        final float dashWidth = a.getDimension(
+                R.styleable.GradientDrawableStroke_dashWidth, 0);
+        if (dashWidth != 0.0f) {
+            final float dashGap = a.getDimension(
+                    R.styleable.GradientDrawableStroke_dashGap, 0);
+            setStroke(width, colorStateList, dashWidth, dashGap);
+        } else {
+            setStroke(width, colorStateList);
+        }
+
+        // Extract the theme attributes, if any.
+        mGradientState.mAttrStroke = a.extractThemeAttrs();
+    }
+
+    private void applyGradientDrawableSolid(TypedArray a) {
+        final ColorStateList colorStateList = a.getColorStateList(
+                R.styleable.GradientDrawableSolid_color);
+        setColor(colorStateList);
+
+        // Extract the theme attributes, if any.
+        mGradientState.mAttrSolid = a.extractThemeAttrs();
+    }
+
+    private void applyGradientDrawableGradient(Resources r, TypedArray a)
+            throws XmlPullParserException {
+        final GradientState st = mGradientState;
+        final int startColor = a.getColor(
+                R.styleable.GradientDrawableGradient_startColor, 0);
+        final boolean hasCenterColor = a.hasValue(
+                R.styleable.GradientDrawableGradient_centerColor);
+        final int centerColor = a.getColor(
+                R.styleable.GradientDrawableGradient_centerColor, 0);
+        final int endColor = a.getColor(
+                R.styleable.GradientDrawableGradient_endColor, 0);
+
+        if (hasCenterColor) {
+            st.mColors = new int[3];
+            st.mColors[0] = startColor;
+            st.mColors[1] = centerColor;
+            st.mColors[2] = endColor;
+            
+            st.mPositions = new float[3];
+            st.mPositions[0] = 0.0f;
+            // Since 0.5f is default value, try to take the one that isn't 0.5f
+            st.mPositions[1] = st.mCenterX != 0.5f ? st.mCenterX : st.mCenterY;
+            st.mPositions[2] = 1f;
+        } else {
+            st.mColors = new int[2];
+            st.mColors[0] = startColor;
+            st.mColors[1] = endColor;
+        }
+
+        st.mCenterX = getFloatOrFraction(
+                a, R.styleable.GradientDrawableGradient_centerX, 0.5f);
+        st.mCenterY = getFloatOrFraction(
+                a, R.styleable.GradientDrawableGradient_centerY, 0.5f);
+        st.mUseLevel = a.getBoolean(
+                R.styleable.GradientDrawableGradient_useLevel, false);
+        st.mGradient = a.getInt(
+                R.styleable.GradientDrawableGradient_type, LINEAR_GRADIENT);
+
+        if (st.mGradient == LINEAR_GRADIENT) {
+            int angle = (int) a.getFloat(
+                    R.styleable.GradientDrawableGradient_angle, 0);
+            angle %= 360;
+
+            if (angle % 45 != 0) {
+                throw new XmlPullParserException(a.getPositionDescription()
+                        + "<gradient> tag requires 'angle' attribute to "
+                        + "be a multiple of 45");
+            }
+
+            switch (angle) {
+                case 0:
+                    st.mOrientation = Orientation.LEFT_RIGHT;
+                    break;
+                case 45:
+                    st.mOrientation = Orientation.BL_TR;
+                    break;
+                case 90:
+                    st.mOrientation = Orientation.BOTTOM_TOP;
+                    break;
+                case 135:
+                    st.mOrientation = Orientation.BR_TL;
+                    break;
+                case 180:
+                    st.mOrientation = Orientation.RIGHT_LEFT;
+                    break;
+                case 225:
+                    st.mOrientation = Orientation.TR_BL;
+                    break;
+                case 270:
+                    st.mOrientation = Orientation.TOP_BOTTOM;
+                    break;
+                case 315:
+                    st.mOrientation = Orientation.TL_BR;
+                    break;
+            }
+        } else {
+            final TypedValue tv = a.peekValue(
+                    R.styleable.GradientDrawableGradient_gradientRadius);
+            if (tv != null) {
+                final float radius;
+                final int radiusType;
+                if (tv.type == TypedValue.TYPE_FRACTION) {
+                    radius = tv.getFraction(1.0f, 1.0f);
+
+                    final int unit = (tv.data >> TypedValue.COMPLEX_UNIT_SHIFT)
+                            & TypedValue.COMPLEX_UNIT_MASK;
+                    if (unit == TypedValue.COMPLEX_UNIT_FRACTION_PARENT) {
+                        radiusType = RADIUS_TYPE_FRACTION_PARENT;
+                    } else {
+                        radiusType = RADIUS_TYPE_FRACTION;
+                    }
+                } else {
+                    radius = tv.getDimension(r.getDisplayMetrics());
+                    radiusType = RADIUS_TYPE_PIXELS;
+                }
+
+                st.mGradientRadius = radius;
+                st.mGradientRadiusType = radiusType;
+            } else if (st.mGradient == RADIAL_GRADIENT) {
+                throw new XmlPullParserException(
+                        a.getPositionDescription()
+                        + "<gradient> tag requires 'gradientRadius' "
+                        + "attribute with radial type");
+            }
+        }
+
+        // Extract the theme attributes, if any.
+        mGradientState.mAttrGradient = a.extractThemeAttrs();
+    }
+
+    private void applyGradientDrawableSize(TypedArray a) {
+        int width = a.getDimensionPixelSize(R.styleable.GradientDrawableSize_width, -1);
+        int height = a.getDimensionPixelSize(R.styleable.GradientDrawableSize_height, -1);
+        setSize(width, height);
+
+        // Extract the theme attributes, if any.
+        mGradientState.mAttrSize = a.extractThemeAttrs();
     }
 
     private static float getFloatOrFraction(TypedArray a, int index, float defaultValue) {
@@ -1063,6 +1432,44 @@
     }
 
     @Override
+    public boolean getOutline(Outline outline) {
+        final GradientState st = mGradientState;
+        final Rect bounds = getBounds();
+
+        switch (st.mShape) {
+            case RECTANGLE:
+                if (st.mRadiusArray != null) {
+                    buildPathIfDirty();
+                    outline.setConvexPath(mPath);
+                    return true;
+                }
+
+                float rad = 0;
+                if (st.mRadius > 0.0f) {
+                    // clamp the radius based on width & height, matching behavior in draw()
+                    rad = Math.min(st.mRadius,
+                            Math.min(bounds.width(), bounds.height()) * 0.5f);
+                }
+                outline.setRoundRect(bounds, rad);
+                return true;
+            case OVAL:
+                outline.setOval(bounds);
+                return true;
+            case LINE:
+                float halfStrokeWidth = mStrokePaint.getStrokeWidth() * 0.5f;
+                float centerY = bounds.centerY();
+                int top = (int) Math.floor(centerY - halfStrokeWidth);
+                int bottom = (int) Math.ceil(centerY + halfStrokeWidth);
+
+                outline.setRect(bounds.left, top, bounds.right, bottom);
+                return true;
+            default:
+                // TODO: investigate
+                return false;
+        }
+    }
+
+    @Override
     public Drawable mutate() {
         if (!mMutated && super.mutate() == this) {
             mGradientState = new GradientState(mGradientState);
@@ -1077,14 +1484,13 @@
         public int mShape = RECTANGLE;
         public int mGradient = LINEAR_GRADIENT;
         public Orientation mOrientation;
+        public ColorStateList mColorStateList;
+        public ColorStateList mStrokeColorStateList;
         public int[] mColors;
         public int[] mTempColors; // no need to copy
         public float[] mTempPositions; // no need to copy
         public float[] mPositions;
-        public boolean mHasSolidColor;
-        public int mSolidColor;
         public int mStrokeWidth = -1;   // if >= 0 use stroking.
-        public int mStrokeColor;
         public float mStrokeDashWidth;
         public float mStrokeDashGap;
         public float mRadius;    // use this if mRadiusArray is null
@@ -1099,10 +1505,19 @@
         private float mCenterX = 0.5f;
         private float mCenterY = 0.5f;
         private float mGradientRadius = 0.5f;
+        private int mGradientRadiusType = RADIUS_TYPE_PIXELS;
         private boolean mUseLevel;
         private boolean mUseLevelForShape;
         private boolean mOpaque;
 
+        int[] mThemeAttrs;
+        int[] mAttrSize;
+        int[] mAttrGradient;
+        int[] mAttrSolid;
+        int[] mAttrStroke;
+        int[] mAttrCorners;
+        int[] mAttrPadding;
+
         GradientState(Orientation orientation, int[] colors) {
             mOrientation = orientation;
             setColors(colors);
@@ -1113,16 +1528,15 @@
             mShape = state.mShape;
             mGradient = state.mGradient;
             mOrientation = state.mOrientation;
+            mColorStateList = state.mColorStateList;
             if (state.mColors != null) {
                 mColors = state.mColors.clone();
             }
             if (state.mPositions != null) {
                 mPositions = state.mPositions.clone();
             }
-            mHasSolidColor = state.mHasSolidColor;
-            mSolidColor = state.mSolidColor;
+            mStrokeColorStateList = state.mStrokeColorStateList;
             mStrokeWidth = state.mStrokeWidth;
-            mStrokeColor = state.mStrokeColor;
             mStrokeDashWidth = state.mStrokeDashWidth;
             mStrokeDashGap = state.mStrokeDashGap;
             mRadius = state.mRadius;
@@ -1141,19 +1555,37 @@
             mCenterX = state.mCenterX;
             mCenterY = state.mCenterY;
             mGradientRadius = state.mGradientRadius;
+            mGradientRadiusType = state.mGradientRadiusType;
             mUseLevel = state.mUseLevel;
             mUseLevelForShape = state.mUseLevelForShape;
             mOpaque = state.mOpaque;
+            mThemeAttrs = state.mThemeAttrs;
+            mAttrSize = state.mAttrSize;
+            mAttrGradient = state.mAttrGradient;
+            mAttrSolid = state.mAttrSolid;
+            mAttrStroke = state.mAttrStroke;
+            mAttrCorners = state.mAttrCorners;
+            mAttrPadding = state.mAttrPadding;
+        }
+
+        @Override
+        public boolean canApplyTheme() {
+            return mThemeAttrs != null;
         }
 
         @Override
         public Drawable newDrawable() {
-            return new GradientDrawable(this);
+            return new GradientDrawable(this, null);
         }
         
         @Override
         public Drawable newDrawable(Resources res) {
-            return new GradientDrawable(this);
+            return new GradientDrawable(this, null);
+        }
+        
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new GradientDrawable(this, theme);
         }
         
         @Override
@@ -1176,15 +1608,14 @@
         }
 
         public void setColors(int[] colors) {
-            mHasSolidColor = false;
             mColors = colors;
+            mColorStateList = null;
             computeOpacity();
         }
-        
-        public void setSolidColor(int argb) {
-            mHasSolidColor = true;
-            mSolidColor = argb;
+
+        public void setColorStateList(ColorStateList colorStateList) {
             mColors = null;
+            mColorStateList = colorStateList;
             computeOpacity();
         }
 
@@ -1199,13 +1630,17 @@
                 return;
             }
 
-            if (mStrokeWidth > 0 && !isOpaque(mStrokeColor)) {
-                mOpaque = false;
-                return;
+            if (mStrokeWidth > 0) {
+                if (mStrokeColorStateList != null) {
+                    if (!mStrokeColorStateList.isOpaque()) {
+                        mOpaque = false;
+                        return;
+                    }
+                }
             }
-            
-            if (mHasSolidColor) {
-                mOpaque = isOpaque(mSolidColor);
+
+            if (mColorStateList != null && !mColorStateList.isOpaque()) {
+                mOpaque = false;
                 return;
             }
 
@@ -1225,15 +1660,10 @@
             return ((color >> 24) & 0xff) == 0xff;
         }
 
-        public void setStroke(int width, int color) {
+        public void setStroke(
+                int width, ColorStateList colorStateList, float dashWidth, float dashGap) {
             mStrokeWidth = width;
-            mStrokeColor = color;
-            computeOpacity();
-        }
-
-        public void setStroke(int width, int color, float dashWidth, float dashGap) {
-            mStrokeWidth = width;
-            mStrokeColor = color;
+            mStrokeColorStateList = colorStateList;
             mStrokeDashWidth = dashWidth;
             mStrokeDashGap = dashGap;
             computeOpacity();
@@ -1259,21 +1689,36 @@
             mHeight = height;
         }
 
-        public void setGradientRadius(float gradientRadius) {
+        public void setGradientRadius(float gradientRadius, int type) {
             mGradientRadius = gradientRadius;
+            mGradientRadiusType = type;
         }
     }
 
-    private GradientDrawable(GradientState state) {
-        mGradientState = state;
+    /**
+     * Creates a new themed GradientDrawable based on the specified constant state.
+     * <p>
+     * The resulting drawable is guaranteed to have a new constant state.
+     *
+     * @param state Constant state from which the drawable inherits
+     * @param theme Theme to apply to the drawable
+     */
+    private GradientDrawable(GradientState state, Theme theme) {
+        mGradientState = new GradientState(state);
+        if (theme != null && state.canApplyTheme()) {
+            applyTheme(theme);
+        }
+
         initializeWithState(state);
         mRectIsDirty = true;
         mMutated = false;
     }
 
     private void initializeWithState(GradientState state) {
-        if (state.mHasSolidColor) {
-            mFillPaint.setColor(state.mSolidColor);
+        if (state.mColorStateList != null) {
+            final int[] currentState = getState();
+            final int stateColor = state.mColorStateList.getColorForState(currentState, 0);
+            mFillPaint.setColor(stateColor);
         } else if (state.mColors == null) {
             // If we don't have a solid color and we don't have a gradient,
             // the app is stroking the shape, set the color to the default
@@ -1288,7 +1733,12 @@
             mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             mStrokePaint.setStyle(Paint.Style.STROKE);
             mStrokePaint.setStrokeWidth(state.mStrokeWidth);
-            mStrokePaint.setColor(state.mStrokeColor);
+            if (state.mStrokeColorStateList != null) {
+                final int[] currentState = getState();
+                final int strokeStateColor = state.mStrokeColorStateList.getColorForState(
+                        currentState, 0);
+                mStrokePaint.setColor(strokeStateColor);
+            }
 
             if (state.mStrokeDashWidth != 0.0f) {
                 DashPathEffect e = new DashPathEffect(
diff --git a/graphics/java/android/graphics/drawable/InsetDrawable.java b/graphics/java/android/graphics/drawable/InsetDrawable.java
index 8188782..9384caf 100644
--- a/graphics/java/android/graphics/drawable/InsetDrawable.java
+++ b/graphics/java/android/graphics/drawable/InsetDrawable.java
@@ -21,6 +21,7 @@
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.graphics.*;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -72,10 +73,10 @@
             drawable.setCallback(this);
         }
     }
-    
-    @Override public void inflate(Resources r, XmlPullParser parser,
-                                  AttributeSet attrs)
-    throws XmlPullParserException, IOException {
+
+    @Override
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
+            throws XmlPullParserException, IOException {
         int type;
         
         TypedArray a = r.obtainAttributes(attrs,
@@ -110,7 +111,7 @@
                         + ": <inset> tag requires a 'drawable' attribute or "
                         + "child tag defining a drawable");
             }
-            dr = Drawable.createFromXmlInner(r, parser, attrs);
+            dr = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme);
         }
 
         if (dr == null) {
@@ -183,6 +184,26 @@
     }
 
     @Override
+    public boolean supportsHotspots() {
+        return mInsetState.mDrawable.supportsHotspots();
+    }
+
+    @Override
+    public void setHotspot(int id, float x, float y) {
+        mInsetState.mDrawable.setHotspot(id, x, y);
+    }
+
+    @Override
+    public void removeHotspot(int id) {
+        mInsetState.mDrawable.removeHotspot(id);
+    }
+
+    @Override
+    public void clearHotspots() {
+        mInsetState.mDrawable.clearHotspots();
+    }
+
+    @Override
     public boolean setVisible(boolean visible, boolean restart) {
         mInsetState.mDrawable.setVisible(visible, restart);
         return super.setVisible(visible, restart);
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index 2ea9b8e..639d719 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -16,10 +16,8 @@
 
 package android.graphics.drawable;
 
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
 import android.graphics.ColorFilter;
@@ -28,9 +26,14 @@
 import android.util.AttributeSet;
 import android.view.View;
 
+import com.android.internal.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
 import java.io.IOException;
 
-/** 
+/**
  * A Drawable that manages an array of other Drawables. These are drawn in array
  * order, so the element with the largest index will be drawn on top.
  * <p>
@@ -47,6 +50,15 @@
  * @attr ref android.R.styleable#LayerDrawableItem_id
 */
 public class LayerDrawable extends Drawable implements Drawable.Callback {
+    /**
+     * Padding mode used to nest each layer inside the padding of the previous
+     * layer.
+     */
+    public static final int PADDING_MODE_NEST = 0;
+
+    /** Padding mode used to stack each layer directly atop the previous layer. */
+    public static final int PADDING_MODE_STACK = 1;
+
     LayerState mLayerState;
 
     private int mOpacityOverride = PixelFormat.UNKNOWN;
@@ -68,14 +80,14 @@
     }
 
     /**
-     * Create a new layer drawable with the specified list of layers and the specified
-     * constant state.
+     * Create a new layer drawable with the specified list of layers and the
+     * specified constant state.
      *
      * @param layers The list of layers to add to this drawable.
      * @param state The constant drawable state.
      */
     LayerDrawable(Drawable[] layers, LayerState state) {
-        this(state, null);
+        this(state, null, null);
         int length = layers.length;
         ChildDrawable[] r = new ChildDrawable[length];
 
@@ -90,17 +102,20 @@
 
         ensurePadding();
     }
-    
+
     LayerDrawable() {
-        this((LayerState) null, null);
+        this((LayerState) null, null, null);
     }
 
-    LayerDrawable(LayerState state, Resources res) {
-        LayerState as = createConstantState(state, res);
+    LayerDrawable(LayerState state, Resources res, Theme theme) {
+        final LayerState as = createConstantState(state, res);
         mLayerState = as;
         if (as.mNum > 0) {
             ensurePadding();
         }
+        if (theme != null && canApplyTheme()) {
+            applyTheme(theme);
+        }
     }
 
     LayerState createConstantState(LayerState state, Resources res) {
@@ -108,23 +123,53 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-        super.inflate(r, parser, attrs);
+        super.inflate(r, parser, attrs, theme);
 
-        int type;
-
-        TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.LayerDrawable);
-
-        mOpacityOverride = a.getInt(com.android.internal.R.styleable.LayerDrawable_opacity,
-                PixelFormat.UNKNOWN);
-
-        setAutoMirrored(a.getBoolean(com.android.internal.R.styleable.LayerDrawable_autoMirrored,
-                false));
-
+        final TypedArray a = obtainAttributes(
+                r, theme, attrs, R.styleable.LayerDrawable);
+        inflateStateFromTypedArray(a);
         a.recycle();
 
+        inflateLayers(r, parser, attrs, theme);
+
+        ensurePadding();
+        onStateChange(getState());
+    }
+
+    /**
+     * Initializes the constant state from the values in the typed array.
+     */
+    private void inflateStateFromTypedArray(TypedArray a) {
+        final LayerState state = mLayerState;
+
+        // Extract the theme attributes, if any.
+        final int[] themeAttrs = a.extractThemeAttrs();
+        state.mThemeAttrs = themeAttrs;
+
+        if (themeAttrs == null || themeAttrs[R.styleable.LayerDrawable_opacity] == 0) {
+            mOpacityOverride = a.getInt(R.styleable.LayerDrawable_opacity, PixelFormat.UNKNOWN);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.LayerDrawable_autoMirrored] == 0) {
+            state.mAutoMirrored = a.getBoolean(R.styleable.LayerDrawable_autoMirrored, false);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.LayerDrawableItem_drawable] == 0) {
+            state.mPaddingMode = a.getInteger(
+                    R.styleable.LayerDrawableItem_drawable, PADDING_MODE_NEST);
+        }
+    }
+
+    /**
+     * Inflates child layers using the specified parser.
+     */
+    private void inflateLayers(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
+            throws XmlPullParserException, IOException {
+        TypedArray a;
         final int innerDepth = parser.getDepth() + 1;
+        int type;
         int depth;
         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
                 && ((depth = parser.getDepth()) >= innerDepth || type != XmlPullParser.END_TAG)) {
@@ -136,27 +181,28 @@
                 continue;
             }
 
-            a = r.obtainAttributes(attrs,
-                    com.android.internal.R.styleable.LayerDrawableItem);
+            a = obtainAttributes(
+                    r, theme, attrs, R.styleable.LayerDrawableItem);
 
-            int left = a.getDimensionPixelOffset(
-                    com.android.internal.R.styleable.LayerDrawableItem_left, 0);
-            int top = a.getDimensionPixelOffset(
-                    com.android.internal.R.styleable.LayerDrawableItem_top, 0);
-            int right = a.getDimensionPixelOffset(
-                    com.android.internal.R.styleable.LayerDrawableItem_right, 0);
-            int bottom = a.getDimensionPixelOffset(
-                    com.android.internal.R.styleable.LayerDrawableItem_bottom, 0);
-            int drawableRes = a.getResourceId(
-                    com.android.internal.R.styleable.LayerDrawableItem_drawable, 0);
-            int id = a.getResourceId(com.android.internal.R.styleable.LayerDrawableItem_id,
-                    View.NO_ID);
+            final int left = a.getDimensionPixelOffset(
+                    R.styleable.LayerDrawableItem_left, 0);
+            final int top = a.getDimensionPixelOffset(
+                    R.styleable.LayerDrawableItem_top, 0);
+            final int right = a.getDimensionPixelOffset(
+                    R.styleable.LayerDrawableItem_right, 0);
+            final int bottom = a.getDimensionPixelOffset(
+                    R.styleable.LayerDrawableItem_bottom, 0);
+            final int drawableRes = a.getResourceId(
+                    R.styleable.LayerDrawableItem_drawable, 0);
+            final int id = a.getResourceId(
+                    R.styleable.LayerDrawableItem_id, View.NO_ID);
 
+            // TODO: Cache typed array, if necessary.
             a.recycle();
 
-            Drawable dr;
+            final Drawable dr;
             if (drawableRes != 0) {
-                dr = r.getDrawable(drawableRes);
+                dr = r.getDrawable(drawableRes, theme);
             } else {
                 while ((type = parser.next()) == XmlPullParser.TEXT) {
                 }
@@ -165,17 +211,107 @@
                             + ": <item> tag requires a 'drawable' attribute or "
                             + "child tag defining a drawable");
                 }
-                dr = Drawable.createFromXmlInner(r, parser, attrs);
+                dr = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme);
             }
 
             addLayer(dr, id, left, top, right, bottom);
         }
+    }
+
+    @Override
+    public void applyTheme(Theme t) {
+        super.applyTheme(t);
+
+        final LayerState state = mLayerState;
+        if (state == null) {
+            throw new RuntimeException("Can't apply theme to <layer-list> with no constant state");
+        }
+
+        final int[] themeAttrs = state.mThemeAttrs;
+        if (themeAttrs != null) {
+            final TypedArray a = t.resolveAttributes(themeAttrs, R.styleable.LayerDrawable, 0, 0);
+            updateStateFromTypedArray(a);
+            a.recycle();
+        }
+
+        // TODO: Update layer positions from cached typed arrays.
+
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            final Drawable layer = array[i].mDrawable;
+            if (layer.canApplyTheme()) {
+                layer.applyTheme(t);
+            }
+        }
 
         ensurePadding();
         onStateChange(getState());
     }
 
     /**
+     * Updates the constant state from the values in the typed array.
+     */
+    private void updateStateFromTypedArray(TypedArray a) {
+        final LayerState state = mLayerState;
+
+        if (a.hasValue(R.styleable.LayerDrawable_opacity)) {
+            mOpacityOverride = a.getInt(R.styleable.LayerDrawable_opacity, PixelFormat.UNKNOWN);
+        }
+
+        if (a.hasValue(R.styleable.LayerDrawable_autoMirrored)) {
+            state.mAutoMirrored = a.getBoolean(R.styleable.LayerDrawable_autoMirrored, false);
+        }
+
+        if (a.hasValue(R.styleable.LayerDrawableItem_drawable)) {
+            state.mPaddingMode = a.getInteger(
+                    R.styleable.LayerDrawableItem_drawable, PADDING_MODE_NEST);
+        }
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        final LayerState state = mLayerState;
+        if (state == null) {
+            return false;
+        }
+
+        if (state.mThemeAttrs != null) {
+            return true;
+        }
+
+        final ChildDrawable[] array = state.mChildren;
+        final int N = state.mNum;
+        for (int i = 0; i < N; i++) {
+            if (array[i].mDrawable.canApplyTheme()) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+    
+    /**
+     * @hide
+     */
+    @Override
+    public boolean isProjected() {
+        if (super.isProjected()) {
+            return true;
+        }
+
+        final ChildDrawable[] layers = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            if (layers[i].mDrawable.isProjected()) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * Add a new layer to this drawable. The new layer is identified by an id.
      *
      * @param layer The drawable to add as a layer.
@@ -187,19 +323,20 @@
      */
     private void addLayer(Drawable layer, int id, int left, int top, int right, int bottom) {
         final LayerState st = mLayerState;
-        int N = st.mChildren != null ? st.mChildren.length : 0;
-        int i = st.mNum;
+        final int N = st.mChildren != null ? st.mChildren.length : 0;
+        final int i = st.mNum;
         if (i >= N) {
-            ChildDrawable[] nu = new ChildDrawable[N + 10];
+            final ChildDrawable[] nu = new ChildDrawable[N + 10];
             if (i > 0) {
                 System.arraycopy(st.mChildren, 0, nu, 0, i);
             }
+
             st.mChildren = nu;
         }
 
         mLayerState.mChildrenChangingConfigurations |= layer.getChangingConfigurations();
-        
-        ChildDrawable childDrawable = new ChildDrawable();
+
+        final ChildDrawable childDrawable = new ChildDrawable();
         st.mChildren[i] = childDrawable;
         childDrawable.mId = id;
         childDrawable.mDrawable = layer;
@@ -209,38 +346,42 @@
         childDrawable.mInsetR = right;
         childDrawable.mInsetB = bottom;
         st.mNum++;
+        st.invalidateCache();
 
         layer.setCallback(this);
     }
 
     /**
-     * Look for a layer with the given id, and returns its {@link Drawable}.
+     * Looks for a layer with the given ID and returns its {@link Drawable}.
+     * <p>
+     * If multiple layers are found for the given ID, returns the
+     * {@link Drawable} for the matching layer at the highest index.
      *
      * @param id The layer ID to search for.
-     * @return The {@link Drawable} of the layer that has the given id in the hierarchy or null.
+     * @return The {@link Drawable} for the highest-indexed layer that has the
+     *         given ID, or null if not found.
      */
     public Drawable findDrawableByLayerId(int id) {
         final ChildDrawable[] layers = mLayerState.mChildren;
-        
         for (int i = mLayerState.mNum - 1; i >= 0; i--) {
             if (layers[i].mId == id) {
                 return layers[i].mDrawable;
             }
         }
-        
+
         return null;
     }
-    
+
     /**
      * Sets the ID of a layer.
-     * 
-     * @param index The index of the layer which will received the ID. 
+     *
+     * @param index The index of the layer which will received the ID.
      * @param id The ID to assign to the layer.
      */
     public void setId(int index, int id) {
         mLayerState.mChildren[index].mId = id;
     }
-    
+
     /**
      * Returns the number of layers contained within this.
      * @return The number of layers.
@@ -265,15 +406,15 @@
      *
      * @param index The index of the layer.
      *
-     * @return The id of the layer or {@link android.view.View#NO_ID} if the layer has no id. 
+     * @return The id of the layer or {@link android.view.View#NO_ID} if the layer has no id.
      */
     public int getId(int index) {
         return mLayerState.mChildren[index].mId;
     }
-    
+
     /**
      * Sets (or replaces) the {@link Drawable} for the layer with the given id.
-     * 
+     *
      * @param id The layer ID to search for.
      * @param drawable The replacement {@link Drawable}.
      * @return Whether the {@link Drawable} was replaced (could return false if
@@ -281,72 +422,92 @@
      */
     public boolean setDrawableByLayerId(int id, Drawable drawable) {
         final ChildDrawable[] layers = mLayerState.mChildren;
-        
-        for (int i = mLayerState.mNum - 1; i >= 0; i--) {
-            if (layers[i].mId == id) {
-                if (layers[i].mDrawable != null) {
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            final ChildDrawable childDrawable = layers[i];
+            if (childDrawable.mId == id) {
+                if (childDrawable.mDrawable != null) {
                     if (drawable != null) {
-                        Rect bounds = layers[i].mDrawable.getBounds();
+                        final Rect bounds = childDrawable.mDrawable.getBounds();
                         drawable.setBounds(bounds);
                     }
-                    layers[i].mDrawable.setCallback(null);
+
+                    childDrawable.mDrawable.setCallback(null);
                 }
+
                 if (drawable != null) {
                     drawable.setCallback(this);
                 }
-                layers[i].mDrawable = drawable;
-                mLayerState.mHaveStateful = false;
+
+                childDrawable.mDrawable = drawable;
+                mLayerState.invalidateCache();
                 return true;
             }
         }
-        
+
         return false;
     }
-    
-    /** Specify modifiers to the bounds for the drawable[index].
-        left += l
-        top += t;
-        right -= r;
-        bottom -= b;
-    */
+
+    /**
+     * Specifies the insets in pixels for the drawable at the specified index.
+     *
+     * @param index the index of the drawable to adjust
+     * @param l number of pixels to add to the left bound
+     * @param t number of pixels to add to the top bound
+     * @param r number of pixels to subtract from the right bound
+     * @param b number of pixels to subtract from the bottom bound
+     */
     public void setLayerInset(int index, int l, int t, int r, int b) {
-        ChildDrawable childDrawable = mLayerState.mChildren[index];
+        final ChildDrawable childDrawable = mLayerState.mChildren[index];
         childDrawable.mInsetL = l;
         childDrawable.mInsetT = t;
         childDrawable.mInsetR = r;
         childDrawable.mInsetB = b;
     }
 
-    // overrides from Drawable.Callback
+    /**
+     * Specifies how layer padding should affect the bounds of subsequent
+     * layers. The default value is {@link #PADDING_MODE_NEST}.
+     *
+     * @param mode padding mode, one of:
+     *            <ul>
+     *            <li>{@link #PADDING_MODE_NEST} <li>{@link #PADDING_MODE_STACK}
+     *            </ul>
+     */
+    public void setPaddingMode(int mode) {
+        if (mLayerState.mPaddingMode != mode) {
+            mLayerState.mPaddingMode = mode;
+        }
+    }
 
+    /**
+     * @return the current padding mode
+     * @see #setPaddingMode(int)
+     */
+    public int getPaddingMode() {
+      return mLayerState.mPaddingMode;
+    }
+
+    @Override
     public void invalidateDrawable(Drawable who) {
-        final Callback callback = getCallback();
-        if (callback != null) {
-            callback.invalidateDrawable(this);
-        }
+        invalidateSelf();
     }
 
+    @Override
     public void scheduleDrawable(Drawable who, Runnable what, long when) {
-        final Callback callback = getCallback();
-        if (callback != null) {
-            callback.scheduleDrawable(this, what, when);
-        }
+        scheduleSelf(what, when);
     }
 
+    @Override
     public void unscheduleDrawable(Drawable who, Runnable what) {
-        final Callback callback = getCallback();
-        if (callback != null) {
-            callback.unscheduleDrawable(this, what);
-        }
+        unscheduleSelf(what);
     }
 
-    // overrides from Drawable
-
     @Override
     public void draw(Canvas canvas) {
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             array[i].mDrawable.draw(canvas);
         }
     }
@@ -357,36 +518,105 @@
                 | mLayerState.mChangingConfigurations
                 | mLayerState.mChildrenChangingConfigurations;
     }
-    
+
     @Override
     public boolean getPadding(Rect padding) {
-        // Arbitrarily get the padding from the first image.
-        // Technically we should maybe do something more intelligent,
-        // like take the max padding of all the images.
+        if (mLayerState.mPaddingMode == PADDING_MODE_NEST) {
+            computeNestedPadding(padding);
+        } else {
+            computeStackedPadding(padding);
+        }
+
+        return padding.left != 0 || padding.top != 0 || padding.right != 0 || padding.bottom != 0;
+    }
+
+    private void computeNestedPadding(Rect padding) {
         padding.left = 0;
         padding.top = 0;
         padding.right = 0;
         padding.bottom = 0;
+
+        // Add all the padding.
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        for (int i=0; i<N; i++) {
-            reapplyPadding(i, array[i]);
+        for (int i = 0; i < N; i++) {
+            refreshChildPadding(i, array[i]);
+
             padding.left += mPaddingL[i];
             padding.top += mPaddingT[i];
             padding.right += mPaddingR[i];
             padding.bottom += mPaddingB[i];
         }
-        return true;
+    }
+
+    private void computeStackedPadding(Rect padding) {
+        padding.left = 0;
+        padding.top = 0;
+        padding.right = 0;
+        padding.bottom = 0;
+
+        // Take the max padding.
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            refreshChildPadding(i, array[i]);
+
+            padding.left = Math.max(padding.left, mPaddingL[i]);
+            padding.top = Math.max(padding.top, mPaddingT[i]);
+            padding.right = Math.max(padding.right, mPaddingR[i]);
+            padding.bottom = Math.max(padding.bottom, mPaddingB[i]);
+        }
+    }
+
+    @Override
+    public boolean supportsHotspots() {
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            if (array[i].mDrawable.supportsHotspots()) {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    public void setHotspot(int id, float x, float y) {
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            array[i].mDrawable.setHotspot(id, x, y);
+        }
+    }
+
+    @Override
+    public void removeHotspot(int id) {
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            array[i].mDrawable.removeHotspot(id);
+        }
+    }
+
+    @Override
+    public void clearHotspots() {
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
+            array[i].mDrawable.clearHotspots();
+        }
     }
 
     @Override
     public boolean setVisible(boolean visible, boolean restart) {
-        boolean changed = super.setVisible(visible, restart);
+        final boolean changed = super.setVisible(visible, restart);
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             array[i].mDrawable.setVisible(visible, restart);
         }
+
         return changed;
     }
 
@@ -394,7 +624,7 @@
     public void setDither(boolean dither) {
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             array[i].mDrawable.setDither(dither);
         }
     }
@@ -403,7 +633,7 @@
     public void setAlpha(int alpha) {
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             array[i].mDrawable.setAlpha(alpha);
         }
     }
@@ -412,7 +642,8 @@
     public int getAlpha() {
         final ChildDrawable[] array = mLayerState.mChildren;
         if (mLayerState.mNum > 0) {
-            // All layers should have the same alpha set on them - just return the first one
+            // All layers should have the same alpha set on them - just return
+            // the first one
             return array[0].mDrawable.getAlpha();
         } else {
             return super.getAlpha();
@@ -423,18 +654,17 @@
     public void setColorFilter(ColorFilter cf) {
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             array[i].mDrawable.setColorFilter(cf);
         }
     }
 
     /**
-     * Sets the opacity of this drawable directly, instead of collecting the states from
-     * the layers
+     * Sets the opacity of this drawable directly, instead of collecting the
+     * states from the layers
      *
-     * @param opacity The opacity to use, or {@link PixelFormat#UNKNOWN PixelFormat.UNKNOWN}
-     * for the default behavior
-     *
+     * @param opacity The opacity to use, or {@link PixelFormat#UNKNOWN
+     *            PixelFormat.UNKNOWN} for the default behavior
      * @see PixelFormat#UNKNOWN
      * @see PixelFormat#TRANSLUCENT
      * @see PixelFormat#TRANSPARENT
@@ -443,7 +673,7 @@
     public void setOpacity(int opacity) {
         mOpacityOverride = opacity;
     }
-    
+
     @Override
     public int getOpacity() {
         if (mOpacityOverride != PixelFormat.UNKNOWN) {
@@ -455,9 +685,10 @@
     @Override
     public void setAutoMirrored(boolean mirrored) {
         mLayerState.mAutoMirrored = mirrored;
+
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             array[i].mDrawable.setAutoMirrored(mirrored);
         }
     }
@@ -471,105 +702,137 @@
     public boolean isStateful() {
         return mLayerState.isStateful();
     }
-    
+
     @Override
     protected boolean onStateChange(int[] state) {
-        final ChildDrawable[] array = mLayerState.mChildren;
-        final int N = mLayerState.mNum;
         boolean paddingChanged = false;
         boolean changed = false;
-        for (int i=0; i<N; i++) {
+
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
             final ChildDrawable r = array[i];
-            if (r.mDrawable.setState(state)) {
+            if (r.mDrawable.isStateful() && r.mDrawable.setState(state)) {
                 changed = true;
             }
-            if (reapplyPadding(i, r)) {
+
+            if (refreshChildPadding(i, r)) {
                 paddingChanged = true;
             }
         }
+
         if (paddingChanged) {
             onBoundsChange(getBounds());
         }
+
         return changed;
     }
-    
+
     @Override
     protected boolean onLevelChange(int level) {
-        final ChildDrawable[] array = mLayerState.mChildren;
-        final int N = mLayerState.mNum;
         boolean paddingChanged = false;
         boolean changed = false;
-        for (int i=0; i<N; i++) {
+
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final int N = mLayerState.mNum;
+        for (int i = 0; i < N; i++) {
             final ChildDrawable r = array[i];
             if (r.mDrawable.setLevel(level)) {
                 changed = true;
             }
-            if (reapplyPadding(i, r)) {
+
+            if (refreshChildPadding(i, r)) {
                 paddingChanged = true;
             }
         }
+
         if (paddingChanged) {
             onBoundsChange(getBounds());
         }
+
         return changed;
     }
 
     @Override
     protected void onBoundsChange(Rect bounds) {
+        int padL = 0;
+        int padT = 0;
+        int padR = 0;
+        int padB = 0;
+
+        final boolean nest = mLayerState.mPaddingMode == PADDING_MODE_NEST;
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        int padL=0, padT=0, padR=0, padB=0;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             final ChildDrawable r = array[i];
-            r.mDrawable.setBounds(bounds.left + r.mInsetL + padL,
-                                  bounds.top + r.mInsetT + padT,
-                                  bounds.right - r.mInsetR - padR,
-                                  bounds.bottom - r.mInsetB - padB);
-            padL += mPaddingL[i];
-            padR += mPaddingR[i];
-            padT += mPaddingT[i];
-            padB += mPaddingB[i];
+            r.mDrawable.setBounds(bounds.left + r.mInsetL + padL, bounds.top + r.mInsetT + padT,
+                    bounds.right - r.mInsetR - padR, bounds.bottom - r.mInsetB - padB);
+
+            if (nest) {
+                padL += mPaddingL[i];
+                padR += mPaddingR[i];
+                padT += mPaddingT[i];
+                padB += mPaddingB[i];
+            }
         }
     }
 
     @Override
     public int getIntrinsicWidth() {
         int width = -1;
+        int padL = 0;
+        int padR = 0;
+
+        final boolean nest = mLayerState.mPaddingMode == PADDING_MODE_NEST;
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        int padL=0, padR=0;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             final ChildDrawable r = array[i];
-            int w = r.mDrawable.getIntrinsicWidth()
-                  + r.mInsetL + r.mInsetR + padL + padR;
+            final int w = r.mDrawable.getIntrinsicWidth() + r.mInsetL + r.mInsetR + padL + padR;
             if (w > width) {
                 width = w;
             }
-            padL += mPaddingL[i];
-            padR += mPaddingR[i];
+
+            if (nest) {
+                padL += mPaddingL[i];
+                padR += mPaddingR[i];
+            }
         }
+
         return width;
     }
 
     @Override
     public int getIntrinsicHeight() {
         int height = -1;
+        int padT = 0;
+        int padB = 0;
+
+        final boolean nest = mLayerState.mPaddingMode == PADDING_MODE_NEST;
         final ChildDrawable[] array = mLayerState.mChildren;
         final int N = mLayerState.mNum;
-        int padT=0, padB=0;
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             final ChildDrawable r = array[i];
-            int h = r.mDrawable.getIntrinsicHeight() + r.mInsetT + r.mInsetB + + padT + padB;
+            int h = r.mDrawable.getIntrinsicHeight() + r.mInsetT + r.mInsetB + padT + padB;
             if (h > height) {
                 height = h;
             }
-            padT += mPaddingT[i];
-            padB += mPaddingB[i];
+
+            if (nest) {
+                padT += mPaddingT[i];
+                padB += mPaddingB[i];
+            }
         }
+
         return height;
     }
 
-    private boolean reapplyPadding(int i, ChildDrawable r) {
+    /**
+     * Refreshes the cached padding values for the specified child.
+     *
+     * @return true if the child's padding has changed
+     */
+    private boolean refreshChildPadding(int i, ChildDrawable r) {
         final Rect rect = mTmpRect;
         r.mDrawable.getPadding(rect);
         if (rect.left != mPaddingL[i] || rect.top != mPaddingT[i] ||
@@ -583,11 +846,15 @@
         return false;
     }
 
-    private void ensurePadding() {
+    /**
+     * Ensures the child padding caches are large enough.
+     */
+    void ensurePadding() {
         final int N = mLayerState.mNum;
         if (mPaddingL != null && mPaddingL.length >= N) {
             return;
         }
+
         mPaddingL = new int[N];
         mPaddingT = new int[N];
         mPaddingR = new int[N];
@@ -630,28 +897,49 @@
 
     static class ChildDrawable {
         public Drawable mDrawable;
+        public int[] mThemeAttrs;
         public int mInsetL, mInsetT, mInsetR, mInsetB;
         public int mId;
+
+        ChildDrawable() {
+            // Default empty constructor.
+        }
+
+        ChildDrawable(ChildDrawable or, LayerDrawable owner, Resources res) {
+            if (res != null) {
+                mDrawable = or.mDrawable.getConstantState().newDrawable(res);
+            } else {
+                mDrawable = or.mDrawable.getConstantState().newDrawable();
+            }
+            mDrawable.setCallback(owner);
+            mDrawable.setLayoutDirection(or.mDrawable.getLayoutDirection());
+            mThemeAttrs = or.mThemeAttrs;
+            mInsetL = or.mInsetL;
+            mInsetT = or.mInsetT;
+            mInsetR = or.mInsetR;
+            mInsetB = or.mInsetB;
+            mId = or.mId;
+        }
     }
 
     static class LayerState extends ConstantState {
         int mNum;
         ChildDrawable[] mChildren;
+        int[] mThemeAttrs;
 
         int mChangingConfigurations;
         int mChildrenChangingConfigurations;
-        
-        private boolean mHaveOpacity = false;
+
+        private boolean mHaveOpacity;
         private int mOpacity;
 
-        private boolean mHaveStateful = false;
-        private boolean mStateful;
-
-        private boolean mCheckedConstantState;
-        private boolean mCanConstantState;
+        private boolean mHaveIsStateful;
+        private boolean mIsStateful;
 
         private boolean mAutoMirrored;
 
+        private int mPaddingMode = PADDING_MODE_NEST;
+
         LayerState(LayerState orig, LayerDrawable owner, Resources res) {
             if (orig != null) {
                 final ChildDrawable[] origChildDrawable = orig.mChildren;
@@ -662,30 +950,19 @@
 
                 mChangingConfigurations = orig.mChangingConfigurations;
                 mChildrenChangingConfigurations = orig.mChildrenChangingConfigurations;
-                
+
                 for (int i = 0; i < N; i++) {
-                    final ChildDrawable r = mChildren[i] = new ChildDrawable();
                     final ChildDrawable or = origChildDrawable[i];
-                    if (res != null) {
-                        r.mDrawable = or.mDrawable.getConstantState().newDrawable(res);
-                    } else {
-                        r.mDrawable = or.mDrawable.getConstantState().newDrawable();
-                    }
-                    r.mDrawable.setCallback(owner);
-                    r.mDrawable.setLayoutDirection(or.mDrawable.getLayoutDirection());
-                    r.mInsetL = or.mInsetL;
-                    r.mInsetT = or.mInsetT;
-                    r.mInsetR = or.mInsetR;
-                    r.mInsetB = or.mInsetB;
-                    r.mId = or.mId;
+                    mChildren[i] = new ChildDrawable(or, owner, res);
                 }
 
                 mHaveOpacity = orig.mHaveOpacity;
                 mOpacity = orig.mOpacity;
-                mHaveStateful = orig.mHaveStateful;
-                mStateful = orig.mStateful;
-                mCheckedConstantState = mCanConstantState = true;
+                mHaveIsStateful = orig.mHaveIsStateful;
+                mIsStateful = orig.mIsStateful;
                 mAutoMirrored = orig.mAutoMirrored;
+                mPaddingMode = orig.mPaddingMode;
+                mThemeAttrs = orig.mThemeAttrs;
             } else {
                 mNum = 0;
                 mChildren = null;
@@ -693,15 +970,25 @@
         }
 
         @Override
-        public Drawable newDrawable() {
-            return new LayerDrawable(this, null);
+        public boolean canApplyTheme() {
+            return mThemeAttrs != null;
         }
-        
+
+        @Override
+        public Drawable newDrawable() {
+            return new LayerDrawable(this, null, null);
+        }
+
         @Override
         public Drawable newDrawable(Resources res) {
-            return new LayerDrawable(this, res);
+            return new LayerDrawable(this, res, null);
         }
-        
+
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new LayerDrawable(this, res, theme);
+        }
+
         @Override
         public int getChangingConfigurations() {
             return mChangingConfigurations;
@@ -712,49 +999,54 @@
                 return mOpacity;
             }
 
+            final ChildDrawable[] array = mChildren;
             final int N = mNum;
-            int op = N > 0 ? mChildren[0].mDrawable.getOpacity() : PixelFormat.TRANSPARENT;
+            int op = N > 0 ? array[0].mDrawable.getOpacity() : PixelFormat.TRANSPARENT;
             for (int i = 1; i < N; i++) {
-                op = Drawable.resolveOpacity(op, mChildren[i].mDrawable.getOpacity());
+                op = Drawable.resolveOpacity(op, array[i].mDrawable.getOpacity());
             }
+
             mOpacity = op;
             mHaveOpacity = true;
             return op;
         }
-        
+
         public final boolean isStateful() {
-            if (mHaveStateful) {
-                return mStateful;
+            if (mHaveIsStateful) {
+                return mIsStateful;
             }
-            
-            boolean stateful = false;
+
+            final ChildDrawable[] array = mChildren;
             final int N = mNum;
+            boolean isStateful = false;
             for (int i = 0; i < N; i++) {
-                if (mChildren[i].mDrawable.isStateful()) {
-                    stateful = true;
+                if (array[i].mDrawable.isStateful()) {
+                    isStateful = true;
                     break;
                 }
             }
-            
-            mStateful = stateful;
-            mHaveStateful = true;
-            return stateful;
+
+            mIsStateful = isStateful;
+            mHaveIsStateful = true;
+            return isStateful;
         }
 
-        public boolean canConstantState() {
-            if (!mCheckedConstantState && mChildren != null) {
-                mCanConstantState = true;
-                final int N = mNum;
-                for (int i=0; i<N; i++) {
-                    if (mChildren[i].mDrawable.getConstantState() == null) {
-                        mCanConstantState = false;
-                        break;
-                    }
+        public final boolean canConstantState() {
+            final ChildDrawable[] array = mChildren;
+            final int N = mNum;
+            for (int i = 0; i < N; i++) {
+                if (array[i].mDrawable.getConstantState() == null) {
+                    return false;
                 }
-                mCheckedConstantState = true;
             }
 
-            return mCanConstantState;
+            // Don't cache the result, this method is not called very often.
+            return true;
+        }
+
+        public void invalidateCache() {
+            mHaveOpacity = false;
+            mHaveIsStateful = false;
         }
     }
 }
diff --git a/graphics/java/android/graphics/drawable/LevelListDrawable.java b/graphics/java/android/graphics/drawable/LevelListDrawable.java
index 872fdce..9f6c0ad 100644
--- a/graphics/java/android/graphics/drawable/LevelListDrawable.java
+++ b/graphics/java/android/graphics/drawable/LevelListDrawable.java
@@ -23,6 +23,7 @@
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.util.AttributeSet;
 
 /**
@@ -83,10 +84,9 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-
-        super.inflate(r, parser, attrs);
+        super.inflate(r, parser, attrs, theme);
 
         int type;
 
@@ -124,7 +124,7 @@
 
             Drawable dr;
             if (drawableRes != 0) {
-                dr = r.getDrawable(drawableRes);
+                dr = r.getDrawable(drawableRes, theme);
             } else {
                 while ((type = parser.next()) == XmlPullParser.TEXT) {
                 }
@@ -134,7 +134,7 @@
                                     + ": <item> tag requires a 'drawable' attribute or "
                                     + "child tag defining a drawable");
                 }
-                dr = Drawable.createFromXmlInner(r, parser, attrs);
+                dr = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme);
             }
 
             mLevelListState.addLevel(low, high, dr);
diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
index 9c57a2c..21992ce 100644
--- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java
+++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java
@@ -16,7 +16,9 @@
 
 package android.graphics.drawable;
 
+import android.content.res.ColorStateList;
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
@@ -26,12 +28,17 @@
 import android.graphics.NinePatch;
 import android.graphics.Paint;
 import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.PorterDuffColorFilter;
 import android.graphics.Rect;
 import android.graphics.Region;
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.LayoutDirection;
 import android.util.TypedValue;
+
+import com.android.internal.R;
+
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -56,6 +63,7 @@
     private static final boolean DEFAULT_DITHER = false;
     private NinePatchState mNinePatchState;
     private NinePatch mNinePatch;
+    private PorterDuffColorFilter mTintFilter;
     private Rect mPadding;
     private Insets mOpticalInsets = Insets.NONE;
     private Paint mPaint;
@@ -68,6 +76,7 @@
     private int mBitmapHeight;
 
     NinePatchDrawable() {
+        mNinePatchState = new NinePatchState();
     }
 
     /**
@@ -77,7 +86,7 @@
      */
     @Deprecated
     public NinePatchDrawable(Bitmap bitmap, byte[] chunk, Rect padding, String srcName) {
-        this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), null);
+        this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), null, null);
     }
 
     /**
@@ -86,7 +95,7 @@
      */
     public NinePatchDrawable(Resources res, Bitmap bitmap, byte[] chunk,
             Rect padding, String srcName) {
-        this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), res);
+        this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), res, null);
         mNinePatchState.mTargetDensity = mTargetDensity;
     }
 
@@ -98,7 +107,8 @@
      */
     public NinePatchDrawable(Resources res, Bitmap bitmap, byte[] chunk,
             Rect padding, Rect opticalInsets, String srcName) {
-        this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding, opticalInsets), res);
+        this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding, opticalInsets),
+                res, null);
         mNinePatchState.mTargetDensity = mTargetDensity;
     }
 
@@ -109,7 +119,7 @@
      */
     @Deprecated
     public NinePatchDrawable(NinePatch patch) {
-        this(new NinePatchState(patch, new Rect()), null);
+        this(new NinePatchState(patch, new Rect()), null, null);
     }
 
     /**
@@ -117,28 +127,10 @@
      * based on the display metrics of the resources.
      */
     public NinePatchDrawable(Resources res, NinePatch patch) {
-        this(new NinePatchState(patch, new Rect()), res);
+        this(new NinePatchState(patch, new Rect()), res, null);
         mNinePatchState.mTargetDensity = mTargetDensity;
     }
 
-    private void setNinePatchState(NinePatchState state, Resources res) {
-        mNinePatchState = state;
-        mNinePatch = state.mNinePatch;
-        mPadding = state.mPadding;
-        mTargetDensity = res != null ? res.getDisplayMetrics().densityDpi
-                : state.mTargetDensity;
-        //noinspection PointlessBooleanExpression
-        if (state.mDither != DEFAULT_DITHER) {
-            // avoid calling the setter unless we need to, since it does a
-            // lazy allocation of a paint
-            setDither(state.mDither);
-        }
-        setAutoMirrored(state.mAutoMirrored);
-        if (mNinePatch != null) {
-            computeBitmapSize();
-        }
-    }
-
     /**
      * Set the density scale at which this drawable will be rendered. This
      * method assumes the drawable will be rendered at the same density as the
@@ -216,9 +208,31 @@
         }
     }
 
+    private void setNinePatch(NinePatch ninePatch) {
+        if (ninePatch != mNinePatch) {
+            mNinePatch = ninePatch;
+            if (ninePatch != null) {
+                computeBitmapSize();
+            } else {
+                mBitmapWidth = mBitmapHeight = -1;
+                mOpticalInsets = Insets.NONE;
+            }
+            invalidateSelf();
+        }
+    }
+
     @Override
     public void draw(Canvas canvas) {
         final Rect bounds = getBounds();
+
+        final boolean clearColorFilter;
+        if (mTintFilter != null && getPaint().getColorFilter() == null) {
+            mPaint.setColorFilter(mTintFilter);
+            clearColorFilter = true;
+        } else {
+            clearColorFilter = false;
+        }
+
         final boolean needsMirroring = needsMirroring();
         if (needsMirroring) {
             canvas.save();
@@ -226,10 +240,29 @@
             canvas.translate(bounds.right - bounds.left, 0);
             canvas.scale(-1.0f, 1.0f);
         }
+
+        final int restoreAlpha;
+        if (mNinePatchState.mBaseAlpha != 1.0f) {
+            final Paint p = getPaint();
+            restoreAlpha = p.getAlpha();
+            p.setAlpha((int) (restoreAlpha * mNinePatchState.mBaseAlpha + 0.5f));
+        } else {
+            restoreAlpha = -1;
+        }
+
         mNinePatch.draw(canvas, bounds, mPaint);
+
         if (needsMirroring) {
             canvas.restore();
         }
+
+        if (clearColorFilter) {
+            mPaint.setColorFilter(null);
+        }
+
+        if (restoreAlpha >= 0) {
+            mPaint.setAlpha(restoreAlpha);
+        }
     }
 
     @Override
@@ -239,12 +272,17 @@
 
     @Override
     public boolean getPadding(Rect padding) {
-        if (needsMirroring()) {
-            padding.set(mPadding.right, mPadding.top, mPadding.left, mPadding.bottom);
-        } else {
-            padding.set(mPadding);
+        final Rect scaledPadding = mPadding;
+        if (scaledPadding != null) {
+            if (needsMirroring()) {
+                padding.set(scaledPadding.right, scaledPadding.top,
+                        scaledPadding.left, scaledPadding.bottom);
+            } else {
+                padding.set(scaledPadding);
+            }
+            return (padding.left | padding.top | padding.right | padding.bottom) != 0;
         }
-        return (padding.left | padding.top | padding.right | padding.bottom) != 0;
+        return false;
     }
 
     /**
@@ -289,6 +327,64 @@
         invalidateSelf();
     }
 
+    /**
+     * Specifies a tint for this drawable.
+     * <p>
+     * Setting a color filter via {@link #setColorFilter(ColorFilter)} overrides
+     * tint.
+     *
+     * @param tint Color state list to use for tinting this drawable, or null to
+     *            clear the tint
+     */
+    public void setTint(ColorStateList tint) {
+        if (mNinePatchState.mTint != tint) {
+            mNinePatchState.mTint = tint;
+            updateTintFilter();
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * Returns the tint color for this drawable.
+     *
+     * @return Color state list to use for tinting this drawable, or null if
+     *         none set
+     */
+    public ColorStateList getTint() {
+        return mNinePatchState.mTint;
+    }
+
+    /**
+     * Specifies the blending mode used to apply tint.
+     *
+     * @param tintMode A Porter-Duff blending mode
+     */
+    public void setTintMode(Mode tintMode) {
+        if (mNinePatchState.mTintMode != tintMode) {
+            mNinePatchState.mTintMode = tintMode;
+            updateTintFilter();
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * Ensures the tint filter is consistent with the current tint color and
+     * mode.
+     */
+    private void updateTintFilter() {
+        final ColorStateList tint = mNinePatchState.mTint;
+        final Mode tintMode = mNinePatchState.mTintMode;
+        if (tint != null && tintMode != null) {
+            if (mTintFilter == null) {
+                mTintFilter = new PorterDuffColorFilter(0, tintMode);
+            } else {
+                mTintFilter.setMode(tintMode);
+            }
+        } else {
+            mTintFilter = null;
+        }
+    }
+
     @Override
     public void setDither(boolean dither) {
         //noinspection PointlessBooleanExpression
@@ -296,6 +392,7 @@
             // Fast common case -- leave at default dither.
             return;
         }
+
         getPaint().setDither(dither);
         invalidateSelf();
     }
@@ -321,59 +418,205 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-        super.inflate(r, parser, attrs);
+        super.inflate(r, parser, attrs, theme);
 
-        TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.NinePatchDrawable);
-
-        final int id = a.getResourceId(com.android.internal.R.styleable.NinePatchDrawable_src, 0);
-        if (id == 0) {
-            throw new XmlPullParserException(parser.getPositionDescription() +
-                    ": <nine-patch> requires a valid src attribute");
-        }
-
-        final boolean dither = a.getBoolean(
-                com.android.internal.R.styleable.NinePatchDrawable_dither, DEFAULT_DITHER);
-        final BitmapFactory.Options options = new BitmapFactory.Options();
-        if (dither) {
-            options.inDither = false;
-        }
-        options.inScreenDensity = r.getDisplayMetrics().noncompatDensityDpi;
-
-        final Rect padding = new Rect();
-        final Rect opticalInsets = new Rect();
-        Bitmap bitmap = null;
-
-        try {
-            final TypedValue value = new TypedValue();
-            final InputStream is = r.openRawResource(id, value);
-
-            bitmap = BitmapFactory.decodeResourceStream(r, value, is, padding, options);
-
-            is.close();
-        } catch (IOException e) {
-            // Ignore
-        }
-
-        if (bitmap == null) {
-            throw new XmlPullParserException(parser.getPositionDescription() +
-                    ": <nine-patch> requires a valid src attribute");
-        } else if (bitmap.getNinePatchChunk() == null) {
-            throw new XmlPullParserException(parser.getPositionDescription() +
-                    ": <nine-patch> requires a valid 9-patch source image");
-        }
-
-        final boolean automirrored = a.getBoolean(
-                com.android.internal.R.styleable.NinePatchDrawable_autoMirrored, false);
-
-        setNinePatchState(new NinePatchState(new NinePatch(bitmap, bitmap.getNinePatchChunk()),
-                padding, opticalInsets, dither, automirrored), r);
-        mNinePatchState.mTargetDensity = mTargetDensity;
-
+        final TypedArray a = obtainAttributes(
+                r, theme, attrs, R.styleable.NinePatchDrawable);
+        inflateStateFromTypedArray(a);
         a.recycle();
     }
 
+    /**
+     * Initializes the constant state from the values in the typed array.
+     */
+    private void inflateStateFromTypedArray(TypedArray a) throws XmlPullParserException {
+        final Resources r = a.getResources();
+        final NinePatchState ninePatchState = mNinePatchState;
+
+        // Extract the theme attributes, if any.
+        final int[] themeAttrs = a.extractThemeAttrs();
+        ninePatchState.mThemeAttrs = themeAttrs;
+
+        if (themeAttrs == null || themeAttrs[R.styleable.NinePatchDrawable_dither] == 0) {
+            final boolean dither = a.getBoolean(
+                    R.styleable.NinePatchDrawable_dither, DEFAULT_DITHER);
+            ninePatchState.mDither = dither;
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.NinePatchDrawable_src] == 0) {
+            final int id = a.getResourceId(R.styleable.NinePatchDrawable_src, 0);
+            if (id == 0) {
+                throw new XmlPullParserException(a.getPositionDescription() +
+                        ": <nine-patch> requires a valid src attribute");
+            }
+
+            final BitmapFactory.Options options = new BitmapFactory.Options();
+            options.inDither = !ninePatchState.mDither;
+            options.inScreenDensity = r.getDisplayMetrics().noncompatDensityDpi;
+
+            final Rect padding = new Rect();
+            final Rect opticalInsets = new Rect();
+            Bitmap bitmap = null;
+
+            try {
+                final TypedValue value = new TypedValue();
+                final InputStream is = r.openRawResource(id, value);
+
+                bitmap = BitmapFactory.decodeResourceStream(r, value, is, padding, options);
+
+                is.close();
+            } catch (IOException e) {
+                // Ignore
+            }
+
+            if (bitmap == null) {
+                throw new XmlPullParserException(a.getPositionDescription() +
+                        ": <nine-patch> requires a valid src attribute");
+            } else if (bitmap.getNinePatchChunk() == null) {
+                throw new XmlPullParserException(a.getPositionDescription() +
+                        ": <nine-patch> requires a valid 9-patch source image");
+            }
+
+            final NinePatch ninePatch = new NinePatch(bitmap, bitmap.getNinePatchChunk());
+            ninePatchState.mNinePatch = ninePatch;
+            ninePatchState.mPadding = padding;
+            ninePatchState.mOpticalInsets = Insets.of(opticalInsets);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.NinePatchDrawable_autoMirrored] == 0) {
+            final boolean autoMirrored = a.getBoolean(
+                    R.styleable.NinePatchDrawable_autoMirrored, false);
+            ninePatchState.mAutoMirrored = autoMirrored;
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.NinePatchDrawable_tintMode] == 0) {
+            final int tintModeValue = a.getInt(R.styleable.NinePatchDrawable_tintMode, -1);
+            ninePatchState.mTintMode = Drawable.parseTintMode(tintModeValue, Mode.SRC_IN);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.NinePatchDrawable_tint] == 0) {
+            ninePatchState.mTint = a.getColorStateList(R.styleable.NinePatchDrawable_tint);
+            if (ninePatchState.mTint != null) {
+                final int color = ninePatchState.mTint.getColorForState(getState(), 0);
+                mTintFilter = new PorterDuffColorFilter(color, ninePatchState.mTintMode);
+            }
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.NinePatchDrawable_alpha] == 0) {
+            ninePatchState.mBaseAlpha = a.getFloat(R.styleable.NinePatchDrawable_alpha, 1.0f);
+        }
+
+        // Apply the constant state to the paint.
+        initializeWithState(ninePatchState, r);
+
+        // Push density applied by setNinePatchState into state.
+        ninePatchState.mTargetDensity = mTargetDensity;
+    }
+
+    @Override
+    public void applyTheme(Theme t) {
+        super.applyTheme(t);
+
+        final NinePatchState state = mNinePatchState;
+        if (state == null) {
+            throw new RuntimeException("Can't apply theme to <nine-patch> with no constant state");
+        }
+
+        final int[] themeAttrs = state.mThemeAttrs;
+        if (themeAttrs != null) {
+            final TypedArray a = t.resolveAttributes(
+                    themeAttrs, R.styleable.NinePatchDrawable, 0, 0);
+            updateStateFromTypedArray(a);
+            a.recycle();
+        }
+    }
+
+    /**
+     * Updates the constant state from the values in the typed array.
+     */
+    private void updateStateFromTypedArray(TypedArray a) {
+        final Resources r = a.getResources();
+        final NinePatchState state = mNinePatchState;
+
+        if (a.hasValue(R.styleable.NinePatchDrawable_dither)) {
+            state.mDither = a.getBoolean(R.styleable.NinePatchDrawable_dither, DEFAULT_DITHER);
+        }
+
+        if (a.hasValue(R.styleable.NinePatchDrawable_autoMirrored)) {
+            state.mAutoMirrored = a.getBoolean(R.styleable.NinePatchDrawable_autoMirrored, false);
+        }
+
+        if (a.hasValue(R.styleable.NinePatchDrawable_src)) {
+            final int id = a.getResourceId(R.styleable.NinePatchDrawable_src, 0);
+            if (id == 0) {
+                throw new RuntimeException(a.getPositionDescription() +
+                        ": <nine-patch> requires a valid src attribute");
+            }
+
+            final BitmapFactory.Options options = new BitmapFactory.Options();
+            options.inDither = !state.mDither;
+            options.inScreenDensity = r.getDisplayMetrics().noncompatDensityDpi;
+
+            final Rect padding = new Rect();
+            final Rect opticalInsets = new Rect();
+            Bitmap bitmap = null;
+
+            try {
+                final TypedValue value = new TypedValue();
+                final InputStream is = r.openRawResource(id, value);
+
+                bitmap = BitmapFactory.decodeResourceStream(r, value, is, padding, options);
+
+                is.close();
+            } catch (IOException e) {
+                // Ignore
+            }
+
+            if (bitmap == null) {
+                throw new RuntimeException(a.getPositionDescription() +
+                        ": <nine-patch> requires a valid src attribute");
+            } else if (bitmap.getNinePatchChunk() == null) {
+                throw new RuntimeException(a.getPositionDescription() +
+                        ": <nine-patch> requires a valid 9-patch source image");
+            }
+
+            state.mNinePatch = new NinePatch(bitmap, bitmap.getNinePatchChunk());
+            state.mPadding = padding;
+            state.mOpticalInsets = Insets.of(opticalInsets);
+        }
+
+        if (a.hasValue(R.styleable.NinePatchDrawable_tintMode)) {
+            final int modeValue = a.getInt(R.styleable.NinePatchDrawable_tintMode, -1);
+            state.mTintMode = Drawable.parseTintMode(modeValue, Mode.SRC_IN);
+        }
+
+        if (a.hasValue(R.styleable.NinePatchDrawable_tint)) {
+            final ColorStateList tint = a.getColorStateList(R.styleable.NinePatchDrawable_tint);
+            if (tint != null) {
+                state.mTint = tint;
+                final int color = tint.getColorForState(getState(), 0);
+                mTintFilter = new PorterDuffColorFilter(color, state.mTintMode);
+            }
+        }
+
+        if (a.hasValue(R.styleable.NinePatchDrawable_alpha)) {
+            state.mBaseAlpha = a.getFloat(R.styleable.NinePatchDrawable_alpha, 1.0f);
+        }
+
+        // Apply the constant state to the paint.
+        initializeWithState(state, r);
+
+        // Push density applied by setNinePatchState into state.
+        state.mTargetDensity = mTargetDensity;
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        return mNinePatchState != null && mNinePatchState.mThemeAttrs != null;
+    }
+
     public Paint getPaint() {
         if (mPaint == null) {
             mPaint = new Paint();
@@ -439,15 +682,45 @@
         return this;
     }
 
+    @Override
+    protected boolean onStateChange(int[] stateSet) {
+        final ColorStateList tint = mNinePatchState.mTint;
+        if (tint != null) {
+            final int newColor = tint.getColorForState(stateSet, 0);
+            final int oldColor = mTintFilter.getColor();
+            if (oldColor != newColor) {
+                mTintFilter.setColor(newColor);
+                invalidateSelf();
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean isStateful() {
+        final NinePatchState s = mNinePatchState;
+        return super.isStateful() || (s.mTint != null && s.mTint.isStateful());
+    }
+
     final static class NinePatchState extends ConstantState {
-        final NinePatch mNinePatch;
-        final Rect mPadding;
-        final Insets mOpticalInsets;
-        final boolean mDither;
+        NinePatch mNinePatch;
+        ColorStateList mTint;
+        Mode mTintMode = Mode.SRC_IN;
+        Rect mPadding;
+        Insets mOpticalInsets;
+        float mBaseAlpha = 1.0f;
+        boolean mDither;
+        int[] mThemeAttrs;
         int mChangingConfigurations;
         int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT;
         boolean mAutoMirrored;
 
+        NinePatchState() {
+            // Empty constructor.
+        }
+
         NinePatchState(NinePatch ninePatch, Rect padding) {
             this(ninePatch, padding, new Rect(), DEFAULT_DITHER, false);
         }
@@ -457,7 +730,7 @@
         }
 
         NinePatchState(NinePatch ninePatch, Rect rect, Rect opticalInsets, boolean dither,
-                       boolean autoMirror) {
+                boolean autoMirror) {
             mNinePatch = ninePatch;
             mPadding = rect;
             mOpticalInsets = Insets.of(opticalInsets);
@@ -468,11 +741,14 @@
         // Copy constructor
 
         NinePatchState(NinePatchState state) {
-            // Note we don't copy the nine patch because it is immutable.
+            // We don't deep-copy any fields because they are all immutable.
             mNinePatch = state.mNinePatch;
-            // Note we don't copy the padding because it is immutable.
+            mTint = state.mTint;
+            mTintMode = state.mTintMode;
+            mThemeAttrs = state.mThemeAttrs;
             mPadding = state.mPadding;
             mOpticalInsets = state.mOpticalInsets;
+            mBaseAlpha = state.mBaseAlpha;
             mDither = state.mDither;
             mChangingConfigurations = state.mChangingConfigurations;
             mTargetDensity = state.mTargetDensity;
@@ -480,18 +756,28 @@
         }
 
         @Override
+        public boolean canApplyTheme() {
+            return mThemeAttrs != null;
+        }
+
+        @Override
         public Bitmap getBitmap() {
             return mNinePatch.getBitmap();
         }
 
         @Override
         public Drawable newDrawable() {
-            return new NinePatchDrawable(this, null);
+            return new NinePatchDrawable(this, null, null);
         }
 
         @Override
         public Drawable newDrawable(Resources res) {
-            return new NinePatchDrawable(this, res);
+            return new NinePatchDrawable(this, res, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new NinePatchDrawable(this, res, theme);
         }
 
         @Override
@@ -500,7 +786,40 @@
         }
     }
 
-    private NinePatchDrawable(NinePatchState state, Resources res) {
-        setNinePatchState(state, res);
+    private NinePatchDrawable(NinePatchState state, Resources res, Theme theme) {
+        if (theme != null && state.canApplyTheme()) {
+            mNinePatchState = new NinePatchState(state);
+            applyTheme(theme);
+        } else {
+            mNinePatchState = state;
+        }
+
+        initializeWithState(state, res);
+    }
+
+    /**
+     * Initializes local dynamic properties from state.
+     */
+    private void initializeWithState(NinePatchState state, Resources res) {
+        if (res != null) {
+            mTargetDensity = res.getDisplayMetrics().densityDpi;
+        } else {
+            mTargetDensity = state.mTargetDensity;
+        }
+
+        // If we can, avoid calling any methods that initialize Paint.
+        if (state.mDither != DEFAULT_DITHER) {
+            setDither(state.mDither);
+        }
+
+        if (state.mTint != null) {
+            final int color = state.mTint.getColorForState(getState(), 0);
+            mTintFilter = new PorterDuffColorFilter(color, state.mTintMode);
+        }
+
+        final Rect statePadding = state.mPadding;
+        mPadding =  statePadding != null ? new Rect(statePadding) : null;
+
+        setNinePatch(state.mNinePatch);
     }
 }
diff --git a/graphics/java/android/graphics/drawable/PictureDrawable.java b/graphics/java/android/graphics/drawable/PictureDrawable.java
index 1f5d4d8..cb2d8f6 100644
--- a/graphics/java/android/graphics/drawable/PictureDrawable.java
+++ b/graphics/java/android/graphics/drawable/PictureDrawable.java
@@ -16,16 +16,12 @@
 
 package android.graphics.drawable;
 
-import android.content.res.Resources;
 import android.graphics.Canvas;
 import android.graphics.ColorFilter;
-import android.graphics.Matrix;
-import android.graphics.Matrix.ScaleToFit;
 import android.graphics.drawable.Drawable;
 import android.graphics.Picture;
 import android.graphics.PixelFormat;
 import android.graphics.Rect;
-import android.view.Gravity;
 
 /**
  * Drawable subclass that wraps a Picture, allowing the picture to be used
diff --git a/graphics/java/android/graphics/drawable/Ripple.java b/graphics/java/android/graphics/drawable/Ripple.java
new file mode 100644
index 0000000..3446000
--- /dev/null
+++ b/graphics/java/android/graphics/drawable/Ripple.java
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2013 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 android.graphics.drawable;
+
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.animation.TimeInterpolator;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Paint.Style;
+import android.graphics.Rect;
+import android.view.animation.DecelerateInterpolator;
+
+/**
+ * Draws a Quantum Paper ripple.
+ */
+class Ripple {
+    private static final TimeInterpolator INTERPOLATOR = new DecelerateInterpolator();
+
+    /** Starting radius for a ripple. */
+    private static final int STARTING_RADIUS_DP = 16;
+
+    /** Radius when finger is outside view bounds. */
+    private static final int OUTSIDE_RADIUS_DP = 16;
+
+    /** Radius when finger is inside view bounds. */
+    private static final int INSIDE_RADIUS_DP = 96;
+
+    /** Margin when constraining outside touches (fraction of outer radius). */
+    private static final float OUTSIDE_MARGIN = 0.8f;
+
+    /** Resistance factor when constraining outside touches. */
+    private static final float OUTSIDE_RESISTANCE = 0.7f;
+
+    /** Minimum alpha value during a pulse animation. */
+    private static final float PULSE_MIN_ALPHA = 0.5f;
+
+    /** Duration for animating the trailing edge of the ripple. */
+    private static final int EXIT_DURATION = 600;
+
+    /** Duration for animating the leading edge of the ripple. */
+    private static final int ENTER_DURATION = 400;
+
+    /** Duration for animating the ripple alpha in and out. */
+    private static final int FADE_DURATION = 50;
+
+    /** Minimum elapsed time between start of enter and exit animations. */
+    private static final int EXIT_MIN_DELAY = 200;
+
+    /** Duration for animating between inside and outside touch. */
+    private static final int OUTSIDE_DURATION = 300;
+
+    /** Duration for animating pulses. */
+    private static final int PULSE_DURATION = 400;
+
+    /** Interval between pulses while inside and fully entered. */
+    private static final int PULSE_INTERVAL = 400;
+
+    /** Delay before pulses start. */
+    private static final int PULSE_DELAY = 500;
+
+    private final Drawable mOwner;
+
+    /** Bounds used for computing max radius and containment. */
+    private final Rect mBounds;
+
+    /** Configured maximum ripple radius when the center is outside the bounds. */
+    private final int mMaxOutsideRadius;
+
+    /** Configured maximum ripple radius. */
+    private final int mMaxInsideRadius;
+
+    private ObjectAnimator mOuter;
+    private ObjectAnimator mInner;
+    private ObjectAnimator mAlpha;
+
+    /** Maximum ripple radius. */
+    private int mMaxRadius;
+
+    private float mOuterRadius;
+    private float mInnerRadius;
+    private float mAlphaMultiplier;
+
+    /** Center x-coordinate. */
+    private float mX;
+
+    /** Center y-coordinate. */
+    private float mY;
+
+    /** Whether the center is within the parent bounds. */
+    private boolean mInsideBounds;
+
+    /** Whether to pulse this ripple. */
+    private boolean mPulseEnabled;
+
+    /** Temporary hack since we can't check finished state of animator. */
+    private boolean mExitFinished;
+
+    /** Whether this ripple has ever moved. */
+    private boolean mHasMoved;
+
+    /**
+     * Creates a new ripple.
+     */
+    public Ripple(Drawable owner, Rect bounds, float density, boolean pulseEnabled) {
+        mOwner = owner;
+        mBounds = bounds;
+        mPulseEnabled = pulseEnabled;
+
+        mOuterRadius = (int) (density * STARTING_RADIUS_DP + 0.5f);
+        mMaxOutsideRadius = (int) (density * OUTSIDE_RADIUS_DP + 0.5f);
+        mMaxInsideRadius = (int) (density * INSIDE_RADIUS_DP + 0.5f);
+        mMaxRadius = Math.min(mMaxInsideRadius, Math.max(bounds.width(), bounds.height()));
+    }
+
+    public void setOuterRadius(float r) {
+        mOuterRadius = r;
+        invalidateSelf();
+    }
+
+    public float getOuterRadius() {
+        return mOuterRadius;
+    }
+
+    public void setInnerRadius(float r) {
+        mInnerRadius = r;
+        invalidateSelf();
+    }
+
+    public float getInnerRadius() {
+        return mInnerRadius;
+    }
+
+    public void setAlphaMultiplier(float a) {
+        mAlphaMultiplier = a;
+        invalidateSelf();
+    }
+
+    public float getAlphaMultiplier() {
+        return mAlphaMultiplier;
+    }
+
+    /**
+     * Returns whether this ripple has finished exiting.
+     */
+    public boolean isFinished() {
+        return mExitFinished;
+    }
+
+    /**
+     * Called when the bounds change.
+     */
+    public void onBoundsChanged() {
+        mMaxRadius = Math.min(mMaxInsideRadius, Math.max(mBounds.width(), mBounds.height()));
+
+        updateInsideBounds();
+    }
+
+    private void updateInsideBounds() {
+        final boolean insideBounds = mBounds.contains((int) (mX + 0.5f), (int) (mY + 0.5f));
+        if (mInsideBounds != insideBounds || !mHasMoved) {
+            mInsideBounds = insideBounds;
+            mHasMoved = true;
+
+            if (insideBounds) {
+                enter();
+            } else {
+                outside();
+            }
+        }
+    }
+
+    /**
+     * Draws the ripple using the specified paint.
+     */
+    public boolean draw(Canvas c, Paint p) {
+        final Rect bounds = mBounds;
+        final float outerRadius = mOuterRadius;
+        final float innerRadius = mInnerRadius;
+        final float alphaMultiplier = mAlphaMultiplier;
+
+        // Cache the paint alpha so we can restore it later.
+        final int paintAlpha = p.getAlpha();
+        final int alpha = (int) (paintAlpha * alphaMultiplier + 0.5f);
+
+        // Apply resistance effect when outside bounds.
+        final float x;
+        final float y;
+        if (mInsideBounds) {
+            x = mX;
+            y = mY;
+        } else {
+            // TODO: We need to do this outside of draw() so that our dirty
+            // bounds accurately reflect resistance.
+            x = looseConstrain(mX, bounds.left, bounds.right,
+                    mOuterRadius * OUTSIDE_MARGIN, OUTSIDE_RESISTANCE);
+            y = looseConstrain(mY, bounds.top, bounds.bottom,
+                    mOuterRadius * OUTSIDE_MARGIN, OUTSIDE_RESISTANCE);
+        }
+
+        final boolean hasContent;
+        if (alphaMultiplier <= 0 || innerRadius >= outerRadius) {
+            // Nothing to draw.
+            hasContent = false;
+        } else if (innerRadius > 0) {
+            // Draw a ring.
+            final float strokeWidth = outerRadius - innerRadius;
+            final float strokeRadius = innerRadius + strokeWidth / 2.0f;
+            p.setAlpha(alpha);
+            p.setStyle(Style.STROKE);
+            p.setStrokeWidth(strokeWidth);
+            c.drawCircle(x, y, strokeRadius, p);
+            hasContent = true;
+        } else if (outerRadius > 0) {
+            // Draw a circle.
+            p.setAlpha(alpha);
+            p.setStyle(Style.FILL);
+            c.drawCircle(x, y, outerRadius, p);
+            hasContent = true;
+        } else {
+            hasContent = false;
+        }
+
+        p.setAlpha(paintAlpha);
+        return hasContent;
+    }
+
+    /**
+     * Returns the maximum bounds for this ripple.
+     */
+    public void getBounds(Rect bounds) {
+        final int x = (int) mX;
+        final int y = (int) mY;
+        final int maxRadius = mMaxRadius;
+        bounds.set(x - maxRadius, y - maxRadius, x + maxRadius, y + maxRadius);
+    }
+
+    /**
+     * Updates the center coordinates.
+     */
+    public void move(float x, float y) {
+        mX = x;
+        mY = y;
+
+        updateInsideBounds();
+        invalidateSelf();
+    }
+
+    /**
+     * Starts the exit animation. If {@link #enter()} was called recently, the
+     * animation may be postponed.
+     */
+    public void exit() {
+        mExitFinished = false;
+
+        final ObjectAnimator inner = ObjectAnimator.ofFloat(this, "innerRadius", 0, mMaxRadius);
+        inner.setAutoCancel(true);
+        inner.setDuration(EXIT_DURATION);
+        inner.setInterpolator(INTERPOLATOR);
+        inner.addListener(mAnimationListener);
+
+        if (mOuter != null && mOuter.isStarted()) {
+            // If we haven't been running the enter animation for long enough,
+            // delay the exit animator.
+            final int elapsed = (int) (mOuter.getAnimatedFraction() * mOuter.getDuration());
+            final int delay = Math.max(0, EXIT_MIN_DELAY - elapsed);
+            inner.setStartDelay(delay);
+        }
+
+        inner.start();
+
+        final ObjectAnimator alpha = ObjectAnimator.ofFloat(this, "alphaMultiplier", 0);
+        alpha.setAutoCancel(true);
+        alpha.setDuration(EXIT_DURATION);
+        alpha.start();
+
+        mInner = inner;
+        mAlpha = alpha;
+    }
+
+    /**
+     * Cancel all animations.
+     */
+    public void cancel() {
+        if (mInner != null) {
+            mInner.end();
+        }
+
+        if (mOuter != null) {
+            mOuter.cancel();
+        }
+
+        if (mAlpha != null) {
+            mAlpha.end();
+        }
+    }
+
+    private void invalidateSelf() {
+        mOwner.invalidateSelf();
+    }
+
+    /**
+     * Starts the enter animation.
+     */
+    private void enter() {
+        final ObjectAnimator outer = ObjectAnimator.ofFloat(this, "outerRadius", mMaxRadius);
+        outer.setAutoCancel(true);
+        outer.setDuration(ENTER_DURATION);
+        outer.setInterpolator(INTERPOLATOR);
+        outer.start();
+
+        final ObjectAnimator alpha = ObjectAnimator.ofFloat(this, "alphaMultiplier", 1);
+        if (mPulseEnabled) {
+            alpha.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    final ObjectAnimator pulse = ObjectAnimator.ofFloat(
+                            this, "alphaMultiplier", 1, PULSE_MIN_ALPHA);
+                    pulse.setAutoCancel(true);
+                    pulse.setDuration(PULSE_DURATION + PULSE_INTERVAL);
+                    pulse.setRepeatCount(ObjectAnimator.INFINITE);
+                    pulse.setRepeatMode(ObjectAnimator.REVERSE);
+                    pulse.setStartDelay(PULSE_DELAY);
+                    pulse.start();
+
+                    mAlpha = pulse;
+                }
+            });
+        }
+        alpha.setAutoCancel(true);
+        alpha.setDuration(FADE_DURATION);
+        alpha.start();
+
+        mOuter = outer;
+        mAlpha = alpha;
+    }
+
+    /**
+     * Starts the outside transition animation.
+     */
+    private void outside() {
+        final ObjectAnimator outer = ObjectAnimator.ofFloat(this, "outerRadius", mMaxOutsideRadius);
+        outer.setAutoCancel(true);
+        outer.setDuration(OUTSIDE_DURATION);
+        outer.setInterpolator(INTERPOLATOR);
+        outer.start();
+
+        final ObjectAnimator alpha = ObjectAnimator.ofFloat(this, "alphaMultiplier", 1);
+        alpha.setAutoCancel(true);
+        alpha.setDuration(FADE_DURATION);
+        alpha.start();
+
+        mOuter = outer;
+        mAlpha = alpha;
+    }
+
+    /**
+     * Constrains a value within a specified asymptotic margin outside a minimum
+     * and maximum.
+     */
+    private static float looseConstrain(float value, float min, float max, float margin,
+            float factor) {
+        // TODO: Can we use actual spring physics here?
+        if (value < min) {
+            return min - Math.min(margin, (float) Math.pow(min - value, factor));
+        } else if (value > max) {
+            return max + Math.min(margin, (float) Math.pow(value - max, factor));
+        } else {
+            return value;
+        }
+    }
+
+    private final AnimatorListener mAnimationListener = new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animator animation) {
+            if (animation == mInner) {
+                mExitFinished = true;
+                mOuterRadius = 0;
+                mInnerRadius = 0;
+                mAlphaMultiplier = 1;
+            }
+        }
+    };
+}
diff --git a/graphics/java/android/graphics/drawable/RotateDrawable.java b/graphics/java/android/graphics/drawable/RotateDrawable.java
index aec3a4b..edf1091 100644
--- a/graphics/java/android/graphics/drawable/RotateDrawable.java
+++ b/graphics/java/android/graphics/drawable/RotateDrawable.java
@@ -24,6 +24,7 @@
 import android.graphics.Rect;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.util.TypedValue;
 import android.util.AttributeSet;
 import android.util.Log;
@@ -31,13 +32,14 @@
 import java.io.IOException;
 
 /**
- * <p>A Drawable that can rotate another Drawable based on the current level
- * value. The start and end angles of rotation can be controlled to map any
- * circular arc to the level values range.</p>
- *
- * <p>It can be defined in an XML file with the <code>&lt;rotate></code> element. For more
- * information, see the guide to <a
- * href="{@docRoot}guide/topics/resources/animation-resource.html">Animation Resources</a>.</p>
+ * <p>
+ * A Drawable that can rotate another Drawable based on the current level value.
+ * The start and end angles of rotation can be controlled to map any circular
+ * arc to the level values range.
+ * <p>
+ * It can be defined in an XML file with the <code>&lt;rotate&gt;</code> element.
+ * For more information, see the guide to
+ * <a href="{@docRoot}guide/topics/resources/animation-resource.html">Animation Resources</a>.
  *
  * @attr ref android.R.styleable#RotateDrawable_visible
  * @attr ref android.R.styleable#RotateDrawable_fromDegrees
@@ -49,20 +51,21 @@
 public class RotateDrawable extends Drawable implements Drawable.Callback {
     private static final float MAX_LEVEL = 10000.0f;
 
-    private RotateState mState;
+    private final RotateState mState;
+
     private boolean mMutated;
 
     /**
-     * <p>Create a new rotating drawable with an empty state.</p>
+     * Create a new rotating drawable with an empty state.
      */
     public RotateDrawable() {
         this(null, null);
     }
 
     /**
-     * <p>Create a new rotating drawable with the specified state. A copy of
+     * Create a new rotating drawable with the specified state. A copy of
      * this state is used as the internal state for the newly created
-     * drawable.</p>
+     * drawable.
      *
      * @param rotateState the state for this drawable
      */
@@ -70,28 +73,42 @@
         mState = new RotateState(rotateState, this, res);
     }
 
+    @Override
     public void draw(Canvas canvas) {
-        int saveCount = canvas.save();
-
-        Rect bounds = mState.mDrawable.getBounds();
-
-        int w = bounds.right - bounds.left;
-        int h = bounds.bottom - bounds.top;
-
         final RotateState st = mState;
-        
-        float px = st.mPivotXRel ? (w * st.mPivotX) : st.mPivotX;
-        float py = st.mPivotYRel ? (h * st.mPivotY) : st.mPivotY;
+        final Drawable d = st.mDrawable;
+        final Rect bounds = d.getBounds();
+        final int w = bounds.right - bounds.left;
+        final int h = bounds.bottom - bounds.top;
+        final float px = st.mPivotXRel ? (w * st.mPivotX) : st.mPivotX;
+        final float py = st.mPivotYRel ? (h * st.mPivotY) : st.mPivotY;
 
+        final int saveCount = canvas.save();
         canvas.rotate(st.mCurrentDegrees, px + bounds.left, py + bounds.top);
-
-        st.mDrawable.draw(canvas);
-
+        d.draw(canvas);
         canvas.restoreToCount(saveCount);
     }
 
     /**
-     * Returns the drawable rotated by this RotateDrawable.
+     * Sets the drawable rotated by this RotateDrawable.
+     *
+     * @param drawable The drawable to rotate
+     */
+    public void setDrawable(Drawable drawable) {
+        final Drawable oldDrawable = mState.mDrawable;
+        if (oldDrawable != drawable) {
+            if (oldDrawable != null) {
+                oldDrawable.setCallback(null);
+            }
+            mState.mDrawable = drawable;
+            if (drawable != null) {
+                drawable.setCallback(this);
+            }
+        }
+    }
+
+    /**
+     * @return The drawable rotated by this RotateDrawable
      */
     public Drawable getDrawable() {
         return mState.mDrawable;
@@ -103,7 +120,8 @@
                 | mState.mChangingConfigurations
                 | mState.mDrawable.getChangingConfigurations();
     }
-    
+
+    @Override
     public void setAlpha(int alpha) {
         mState.mDrawable.setAlpha(alpha);
     }
@@ -113,14 +131,149 @@
         return mState.mDrawable.getAlpha();
     }
 
+    @Override
     public void setColorFilter(ColorFilter cf) {
         mState.mDrawable.setColorFilter(cf);
     }
 
+    @Override
     public int getOpacity() {
         return mState.mDrawable.getOpacity();
     }
 
+    /**
+     * Sets the start angle for rotation.
+     *
+     * @param fromDegrees Starting angle in degrees
+     */
+    public void setFromDegrees(float fromDegrees) {
+        if (mState.mFromDegrees != fromDegrees) {
+            mState.mFromDegrees = fromDegrees;
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * @return The starting angle for rotation in degrees
+     */
+    public float getFromDegrees() {
+        return mState.mFromDegrees;
+    }
+
+    /**
+     * Sets the end angle for rotation.
+     *
+     * @param toDegrees Ending angle in degrees
+     */
+    public void setToDegrees(float toDegrees) {
+        if (mState.mToDegrees != toDegrees) {
+            mState.mToDegrees = toDegrees;
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * @return The ending angle for rotation in degrees
+     */
+    public float getToDegrees() {
+        return mState.mToDegrees;
+    }
+
+    /**
+     * Sets the X position around which the drawable is rotated.
+     *
+     * @param pivotX X position around which to rotate. If the X pivot is
+     *            relative, the position represents a fraction of the drawable
+     *            width. Otherwise, the position represents an absolute value in
+     *            pixels.
+     * @see #setPivotXRelative(boolean)
+     */
+    public void setPivotX(float pivotX) {
+        if (mState.mPivotX == pivotX) {
+            mState.mPivotX = pivotX;
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * @return X position around which to rotate
+     * @see #setPivotX(float)
+     */
+    public float getPivotX() {
+        return mState.mPivotX;
+    }
+
+    /**
+     * Sets whether the X pivot value represents a fraction of the drawable
+     * width or an absolute value in pixels.
+     *
+     * @param relative True if the X pivot represents a fraction of the drawable
+     *            width, or false if it represents an absolute value in pixels
+     */
+    public void setPivotXRelative(boolean relative) {
+        if (mState.mPivotXRel == relative) {
+            mState.mPivotXRel = relative;
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * @return True if the X pivot represents a fraction of the drawable width,
+     *         or false if it represents an absolute value in pixels
+     * @see #setPivotXRelative(boolean)
+     */
+    public boolean isPivotXRelative() {
+        return mState.mPivotXRel;
+    }
+
+    /**
+     * Sets the Y position around which the drawable is rotated.
+     *
+     * @param pivotY Y position around which to rotate. If the Y pivot is
+     *            relative, the position represents a fraction of the drawable
+     *            height. Otherwise, the position represents an absolute value
+     *            in pixels.
+     * @see #setPivotYRelative(boolean)
+     */
+    public void setPivotY(float pivotY) {
+        if (mState.mPivotY == pivotY) {
+            mState.mPivotY = pivotY;
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * @return Y position around which to rotate
+     * @see #setPivotY(float)
+     */
+    public float getPivotY() {
+        return mState.mPivotY;
+    }
+
+    /**
+     * Sets whether the Y pivot value represents a fraction of the drawable
+     * height or an absolute value in pixels.
+     *
+     * @param relative True if the Y pivot represents a fraction of the drawable
+     *            height, or false if it represents an absolute value in pixels
+     */
+    public void setPivotYRelative(boolean relative) {
+        if (mState.mPivotYRel == relative) {
+            mState.mPivotYRel = relative;
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * @return True if the Y pivot represents a fraction of the drawable height,
+     *         or false if it represents an absolute value in pixels
+     * @see #setPivotYRelative(boolean)
+     */
+    public boolean isPivotYRelative() {
+        return mState.mPivotYRel;
+    }
+
+    @Override
     public void invalidateDrawable(Drawable who) {
         final Callback callback = getCallback();
         if (callback != null) {
@@ -128,6 +281,7 @@
         }
     }
 
+    @Override
     public void scheduleDrawable(Drawable who, Runnable what, long when) {
         final Callback callback = getCallback();
         if (callback != null) {
@@ -135,6 +289,7 @@
         }
     }
 
+    @Override
     public void unscheduleDrawable(Drawable who, Runnable what) {
         final Callback callback = getCallback();
         if (callback != null) {
@@ -157,10 +312,10 @@
     public boolean isStateful() {
         return mState.mDrawable.isStateful();
     }
-    
+
     @Override
     protected boolean onStateChange(int[] state) {
-        boolean changed = mState.mDrawable.setState(state);
+        final boolean changed = mState.mDrawable.setState(state);
         onBoundsChange(getBounds());
         return changed;
     }
@@ -172,7 +327,7 @@
 
         mState.mCurrentDegrees = mState.mFromDegrees +
                 (mState.mToDegrees - mState.mFromDegrees) *
-                        ((float) level / MAX_LEVEL);
+                        (level / MAX_LEVEL);
 
         invalidateSelf();
         return true;
@@ -204,18 +359,17 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-
-        TypedArray a = r.obtainAttributes(attrs,
+        final TypedArray a = r.obtainAttributes(attrs,
                 com.android.internal.R.styleable.RotateDrawable);
 
         super.inflateWithAttributes(r, parser, a,
                 com.android.internal.R.styleable.RotateDrawable_visible);
-        
+
         TypedValue tv = a.peekValue(com.android.internal.R.styleable.RotateDrawable_pivotX);
-        boolean pivotXRel;
-        float pivotX;
+        final boolean pivotXRel;
+        final float pivotX;
         if (tv == null) {
             pivotXRel = true;
             pivotX = 0.5f;
@@ -223,10 +377,10 @@
             pivotXRel = tv.type == TypedValue.TYPE_FRACTION;
             pivotX = pivotXRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat();
         }
-        
+
         tv = a.peekValue(com.android.internal.R.styleable.RotateDrawable_pivotY);
-        boolean pivotYRel;
-        float pivotY;
+        final boolean pivotYRel;
+        final float pivotY;
         if (tv == null) {
             pivotYRel = true;
             pivotY = 0.5f;
@@ -235,12 +389,12 @@
             pivotY = pivotYRel ? tv.getFraction(1.0f, 1.0f) : tv.getFloat();
         }
 
-        float fromDegrees = a.getFloat(
+        final float fromDegrees = a.getFloat(
                 com.android.internal.R.styleable.RotateDrawable_fromDegrees, 0.0f);
-        float toDegrees = a.getFloat(
+        final float toDegrees = a.getFloat(
                 com.android.internal.R.styleable.RotateDrawable_toDegrees, 360.0f);
 
-        int res = a.getResourceId(
+        final int res = a.getResourceId(
                 com.android.internal.R.styleable.RotateDrawable_drawable, 0);
         Drawable drawable = null;
         if (res > 0) {
@@ -248,8 +402,8 @@
         }
 
         a.recycle();
-        
-        int outerDepth = parser.getDepth();
+
+        final int outerDepth = parser.getDepth();
         int type;
         while ((type = parser.next()) != XmlPullParser.END_DOCUMENT &&
                (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
@@ -258,7 +412,7 @@
                 continue;
             }
 
-            if ((drawable = Drawable.createFromXmlInner(r, parser, attrs)) == null) {
+            if ((drawable = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme)) == null) {
                 Log.w("drawable", "Bad element under <rotate>: "
                         + parser .getName());
             }
@@ -268,13 +422,15 @@
             Log.w("drawable", "No drawable specified for <rotate>");
         }
 
-        mState.mDrawable = drawable;
-        mState.mPivotXRel = pivotXRel;
-        mState.mPivotX = pivotX;
-        mState.mPivotYRel = pivotYRel;
-        mState.mPivotY = pivotY;
-        mState.mFromDegrees = mState.mCurrentDegrees = fromDegrees;
-        mState.mToDegrees = toDegrees;
+        final RotateState st = mState;
+        st.mDrawable = drawable;
+        st.mPivotXRel = pivotXRel;
+        st.mPivotX = pivotX;
+        st.mPivotYRel = pivotYRel;
+        st.mPivotY = pivotY;
+        st.mFromDegrees = fromDegrees;
+        st.mCurrentDegrees = fromDegrees;
+        st.mToDegrees = toDegrees;
 
         if (drawable != null) {
             drawable.setCallback(this);
@@ -291,15 +447,15 @@
     }
 
     /**
-     * <p>Represents the state of a rotation for a given drawable. The same
+     * Represents the state of a rotation for a given drawable. The same
      * rotate drawable can be invoked with different states to drive several
-     * rotations at the same time.</p>
+     * rotations at the same time.
      */
     final static class RotateState extends Drawable.ConstantState {
         Drawable mDrawable;
 
         int mChangingConfigurations;
-        
+
         boolean mPivotXRel;
         float mPivotX;
         boolean mPivotYRel;
@@ -311,7 +467,7 @@
         float mCurrentDegrees;
 
         private boolean mCanConstantState;
-        private boolean mCheckedConstantState;        
+        private boolean mCheckedConstantState;
 
         public RotateState(RotateState source, RotateDrawable owner, Resources res) {
             if (source != null) {
@@ -336,12 +492,12 @@
         public Drawable newDrawable() {
             return new RotateDrawable(this, null);
         }
-        
+
         @Override
         public Drawable newDrawable(Resources res) {
             return new RotateDrawable(this, res);
         }
-        
+
         @Override
         public int getChangingConfigurations() {
             return mChangingConfigurations;
diff --git a/graphics/java/android/graphics/drawable/ScaleDrawable.java b/graphics/java/android/graphics/drawable/ScaleDrawable.java
index ec6b2c16..4c4d9af 100644
--- a/graphics/java/android/graphics/drawable/ScaleDrawable.java
+++ b/graphics/java/android/graphics/drawable/ScaleDrawable.java
@@ -21,6 +21,7 @@
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.graphics.*;
 import android.view.Gravity;
 import android.util.AttributeSet;
@@ -84,9 +85,9 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
-        super.inflate(r, parser, attrs);
+        super.inflate(r, parser, attrs, theme);
 
         int type;
 
@@ -107,7 +108,7 @@
             if (type != XmlPullParser.START_TAG) {
                 continue;
             }
-            dr = Drawable.createFromXmlInner(r, parser, attrs);
+            dr = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme);
         }
 
         if (dr == null) {
diff --git a/graphics/java/android/graphics/drawable/ShapeDrawable.java b/graphics/java/android/graphics/drawable/ShapeDrawable.java
index 93f2dc60..61b1b85 100644
--- a/graphics/java/android/graphics/drawable/ShapeDrawable.java
+++ b/graphics/java/android/graphics/drawable/ShapeDrawable.java
@@ -16,10 +16,20 @@
 
 package android.graphics.drawable;
 
-import android.graphics.*;
-import android.graphics.drawable.shapes.Shape;
+import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Outline;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.PorterDuffColorFilter;
+import android.graphics.Rect;
+import android.graphics.Shader;
+import android.graphics.drawable.shapes.Shape;
+import android.content.res.Resources.Theme;
 import android.util.AttributeSet;
 
 import org.xmlpull.v1.XmlPullParser;
@@ -28,22 +38,24 @@
 import java.io.IOException;
 
 /**
- * A Drawable object that draws primitive shapes. 
- * A ShapeDrawable takes a {@link android.graphics.drawable.shapes.Shape}
- * object and manages its presence on the screen. If no Shape is given, then
- * the ShapeDrawable will default to a 
- * {@link android.graphics.drawable.shapes.RectShape}.
- *
- * <p>This object can be defined in an XML file with the <code>&lt;shape></code> element.</p>
- *
- * <div class="special reference">
- * <h3>Developer Guides</h3>
- * <p>For more information about how to use ShapeDrawable, read the
- * <a href="{@docRoot}guide/topics/graphics/2d-graphics.html#shape-drawable">
- * Canvas and Drawables</a> document. For more information about defining a ShapeDrawable in
- * XML, read the
- * <a href="{@docRoot}guide/topics/resources/drawable-resource.html#Shape">Drawable Resources</a>
- * document.</p></div>
+ * A Drawable object that draws primitive shapes. A ShapeDrawable takes a
+ * {@link android.graphics.drawable.shapes.Shape} object and manages its
+ * presence on the screen. If no Shape is given, then the ShapeDrawable will
+ * default to a {@link android.graphics.drawable.shapes.RectShape}.
+ * <p>
+ * This object can be defined in an XML file with the <code>&lt;shape></code>
+ * element.
+ * </p>
+ * <div class="special reference"> <h3>Developer Guides</h3>
+ * <p>
+ * For more information about how to use ShapeDrawable, read the <a
+ * href="{@docRoot}guide/topics/graphics/2d-graphics.html#shape-drawable">
+ * Canvas and Drawables</a> document. For more information about defining a
+ * ShapeDrawable in XML, read the <a href="{@docRoot}
+ * guide/topics/resources/drawable-resource.html#Shape">Drawable Resources</a>
+ * document.
+ * </p>
+ * </div>
  *
  * @attr ref android.R.styleable#ShapeDrawablePadding_left
  * @attr ref android.R.styleable#ShapeDrawablePadding_top
@@ -55,6 +67,7 @@
  */
 public class ShapeDrawable extends Drawable {
     private ShapeState mShapeState;
+    private PorterDuffColorFilter mTintFilter;
     private boolean mMutated;
 
     /**
@@ -63,20 +76,25 @@
     public ShapeDrawable() {
         this((ShapeState) null);
     }
-    
+
     /**
      * Creates a ShapeDrawable with a specified Shape.
-     * 
+     *
      * @param s the Shape that this ShapeDrawable should be
      */
     public ShapeDrawable(Shape s) {
         this((ShapeState) null);
-        
+
         mShapeState.mShape = s;
     }
-    
+
     private ShapeDrawable(ShapeState state) {
         mShapeState = new ShapeState(state);
+
+        if (state != null && state.mTint != null) {
+            final int color = state.mTint.getColorForState(getState(), 0);
+            mTintFilter = new PorterDuffColorFilter(color, state.mTintMode);
+        }
     }
 
     /**
@@ -85,7 +103,7 @@
     public Shape getShape() {
         return mShapeState.mShape;
     }
-    
+
     /**
      * Sets the Shape of this ShapeDrawable.
      */
@@ -93,19 +111,19 @@
         mShapeState.mShape = s;
         updateShape();
     }
-    
+
     /**
-     * Sets a ShaderFactory to which requests for a 
+     * Sets a ShaderFactory to which requests for a
      * {@link android.graphics.Shader} object will be made.
-     * 
+     *
      * @param fact an instance of your ShaderFactory implementation
      */
     public void setShaderFactory(ShaderFactory fact) {
         mShapeState.mShaderFactory = fact;
     }
-    
+
     /**
-     * Returns the ShaderFactory used by this ShapeDrawable for requesting a 
+     * Returns the ShaderFactory used by this ShapeDrawable for requesting a
      * {@link android.graphics.Shader}.
      */
     public ShaderFactory getShaderFactory() {
@@ -118,14 +136,14 @@
     public Paint getPaint() {
         return mShapeState.mPaint;
     }
-    
+
     /**
      * Sets padding for the shape.
-     * 
-     * @param left    padding for the left side (in pixels)
-     * @param top     padding for the top (in pixels)
-     * @param right   padding for the right side (in pixels)
-     * @param bottom  padding for the bottom (in pixels)
+     *
+     * @param left padding for the left side (in pixels)
+     * @param top padding for the top (in pixels)
+     * @param right padding for the right side (in pixels)
+     * @param bottom padding for the bottom (in pixels)
      */
     public void setPadding(int left, int top, int right, int bottom) {
         if ((left | top | right | bottom) == 0) {
@@ -138,10 +156,10 @@
         }
         invalidateSelf();
     }
-    
+
     /**
-     * Sets padding for this shape, defined by a Rect object.
-     * Define the padding in the Rect object as: left, top, right, bottom.
+     * Sets padding for this shape, defined by a Rect object. Define the padding
+     * in the Rect object as: left, top, right, bottom.
      */
     public void setPadding(Rect padding) {
         if (padding == null) {
@@ -154,37 +172,37 @@
         }
         invalidateSelf();
     }
-    
+
     /**
      * Sets the intrinsic (default) width for this shape.
-     * 
+     *
      * @param width the intrinsic width (in pixels)
      */
     public void setIntrinsicWidth(int width) {
         mShapeState.mIntrinsicWidth = width;
         invalidateSelf();
     }
-    
+
     /**
      * Sets the intrinsic (default) height for this shape.
-     * 
+     *
      * @param height the intrinsic height (in pixels)
      */
     public void setIntrinsicHeight(int height) {
         mShapeState.mIntrinsicHeight = height;
         invalidateSelf();
     }
-    
+
     @Override
     public int getIntrinsicWidth() {
         return mShapeState.mIntrinsicWidth;
     }
-    
+
     @Override
     public int getIntrinsicHeight() {
         return mShapeState.mIntrinsicHeight;
     }
-    
+
     @Override
     public boolean getPadding(Rect padding) {
         if (mShapeState.mPadding != null) {
@@ -196,14 +214,14 @@
     }
 
     private static int modulateAlpha(int paintAlpha, int alpha) {
-        int scale = alpha + (alpha >>> 7);  // convert to 0..256
+        int scale = alpha + (alpha >>> 7); // convert to 0..256
         return paintAlpha * scale >>> 8;
     }
 
     /**
-     * Called from the drawable's draw() method after the canvas has been set
-     * to draw the shape at (0,0). Subclasses can override for special effects
-     * such as multiple layers, stroking, etc.
+     * Called from the drawable's draw() method after the canvas has been set to
+     * draw the shape at (0,0). Subclasses can override for special effects such
+     * as multiple layers, stroking, etc.
      */
     protected void onDraw(Shape shape, Canvas canvas, Paint paint) {
         shape.draw(canvas, paint);
@@ -211,23 +229,37 @@
 
     @Override
     public void draw(Canvas canvas) {
-        Rect r = getBounds();
-        Paint paint = mShapeState.mPaint;
+        final Rect r = getBounds();
+        final ShapeState state = mShapeState;
+        final Paint paint = state.mPaint;
 
-        int prevAlpha = paint.getAlpha();
-        paint.setAlpha(modulateAlpha(prevAlpha, mShapeState.mAlpha));
+        final int prevAlpha = paint.getAlpha();
+        paint.setAlpha(modulateAlpha(prevAlpha, state.mAlpha));
 
         // only draw shape if it may affect output
         if (paint.getAlpha() != 0 || paint.getXfermode() != null || paint.hasShadow) {
-            if (mShapeState.mShape != null) {
-                // need the save both for the translate, and for the (unknown) Shape
-                int count = canvas.save();
+            final boolean clearColorFilter;
+            if (mTintFilter != null && paint.getColorFilter() == null) {
+                paint.setColorFilter(mTintFilter);
+                clearColorFilter = true;
+            } else {
+                clearColorFilter = false;
+            }
+
+            if (state.mShape != null) {
+                // need the save both for the translate, and for the (unknown)
+                // Shape
+                final int count = canvas.save();
                 canvas.translate(r.left, r.top);
-                onDraw(mShapeState.mShape, canvas, paint);
+                onDraw(state.mShape, canvas, paint);
                 canvas.restoreToCount(count);
             } else {
                 canvas.drawRect(r, paint);
             }
+
+            if (clearColorFilter) {
+                paint.setColorFilter(null);
+            }
         }
 
         // restore
@@ -239,16 +271,17 @@
         return super.getChangingConfigurations()
                 | mShapeState.mChangingConfigurations;
     }
-    
+
     /**
      * Set the alpha level for this drawable [0..255]. Note that this drawable
      * also has a color in its paint, which has an alpha as well. These two
      * values are automatically combined during drawing. Thus if the color's
      * alpha is 75% (i.e. 192) and the drawable's alpha is 50% (i.e. 128), then
-     * the combined alpha that will be used during drawing will be 37.5%
-     * (i.e. 96).
+     * the combined alpha that will be used during drawing will be 37.5% (i.e.
+     * 96).
      */
-    @Override public void setAlpha(int alpha) {
+    @Override
+    public void setAlpha(int alpha) {
         mShapeState.mAlpha = alpha;
         invalidateSelf();
     }
@@ -258,12 +291,81 @@
         return mShapeState.mAlpha;
     }
 
+    /**
+     * Specifies a tint for this drawable.
+     * <p>
+     * Setting a color filter via {@link #setColorFilter(ColorFilter)} overrides
+     * tint.
+     *
+     * @param tint Color state list to use for tinting this drawable, or null to
+     *            clear the tint
+     */
+    public void setTint(ColorStateList tint) {
+        if (mShapeState.mTint != tint) {
+            mShapeState.mTint = tint;
+            updateTintFilter();
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * Returns the tint color for this drawable.
+     *
+     * @return Color state list to use for tinting this drawable, or null if
+     *         none set
+     */
+    public ColorStateList getTint() {
+        return mShapeState.mTint;
+    }
+
+    /**
+     * Specifies the blending mode used to apply tint.
+     *
+     * @param tintMode A Porter-Duff blending mode
+     * @hide Pending finalization of supported Modes
+     */
+    public void setTintMode(Mode tintMode) {
+        if (mShapeState.mTintMode != tintMode) {
+            mShapeState.mTintMode = tintMode;
+            updateTintFilter();
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * Ensures the tint filter is consistent with the current tint color and
+     * mode.
+     */
+    private void updateTintFilter() {
+        final ColorStateList tint = mShapeState.mTint;
+        final Mode tintMode = mShapeState.mTintMode;
+        if (tint != null && tintMode != null) {
+            if (mTintFilter == null) {
+                mTintFilter = new PorterDuffColorFilter(0, tintMode);
+            } else {
+                mTintFilter.setMode(tintMode);
+            }
+        } else {
+            mTintFilter = null;
+        }
+    }
+
+    /**
+     * Returns the blending mode used to apply tint.
+     *
+     * @return The Porter-Duff blending mode used to apply tint.
+     * @hide Pending finalization of supported Modes
+     */
+    public Mode getTintMode() {
+        return mShapeState.mTintMode;
+    }
+
     @Override
     public void setColorFilter(ColorFilter cf) {
         mShapeState.mPaint.setColorFilter(cf);
         invalidateSelf();
     }
-    
+
     @Override
     public int getOpacity() {
         if (mShapeState.mShape == null) {
@@ -294,9 +396,31 @@
         updateShape();
     }
 
+    @Override
+    protected boolean onStateChange(int[] stateSet) {
+        final ColorStateList tint = mShapeState.mTint;
+        if (tint != null) {
+            final int newColor = tint.getColorForState(stateSet, 0);
+            final int oldColor = mTintFilter.getColor();
+            if (oldColor != newColor) {
+                mTintFilter.setColor(newColor);
+                invalidateSelf();
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    public boolean isStateful() {
+        final ShapeState s = mShapeState;
+        return super.isStateful() || (s.mTint != null && s.mTint.isStateful());
+    }
+
     /**
-     * Subclasses override this to parse custom subelements.
-     * If you handle it, return true, else return <em>super.inflateTag(...)</em>.
+     * Subclasses override this to parse custom subelements. If you handle it,
+     * return true, else return <em>super.inflateTag(...)</em>.
      */
     protected boolean inflateTag(String name, Resources r, XmlPullParser parser,
             AttributeSet attrs) {
@@ -321,9 +445,9 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs)
-                        throws XmlPullParserException, IOException {
-        super.inflate(r, parser, attrs);
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
+            throws XmlPullParserException, IOException {
+        super.inflate(r, parser, attrs, theme);
 
         TypedArray a = r.obtainAttributes(attrs, com.android.internal.R.styleable.ShapeDrawable);
 
@@ -343,12 +467,12 @@
 
         int type;
         final int outerDepth = parser.getDepth();
-        while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
-               && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
             if (type != XmlPullParser.START_TAG) {
                 continue;
             }
-            
+
             final String name = parser.getName();
             // call our subclass
             if (!inflateTag(name, r, parser, attrs)) {
@@ -371,7 +495,17 @@
         }
         invalidateSelf();
     }
-    
+
+    @Override
+    public boolean getOutline(Outline outline) {
+        if (mShapeState.mShape == null) {
+            // don't publish outline without a shape
+            return false;
+        }
+
+        return mShapeState.mShape.getOutline(outline);
+    }
+
     @Override
     public ConstantState getConstantState() {
         mShapeState.mChangingConfigurations = getChangingConfigurations();
@@ -408,16 +542,20 @@
         int mChangingConfigurations;
         Paint mPaint;
         Shape mShape;
+        ColorStateList mTint;
+        Mode mTintMode = Mode.SRC_IN;
         Rect mPadding;
         int mIntrinsicWidth;
         int mIntrinsicHeight;
         int mAlpha = 255;
         ShaderFactory mShaderFactory;
-        
+
         ShapeState(ShapeState orig) {
             if (orig != null) {
                 mPaint = orig.mPaint;
                 mShape = orig.mShape;
+                mTint = orig.mTint;
+                mTintMode = orig.mTintMode;
                 mPadding = orig.mPadding;
                 mIntrinsicWidth = orig.mIntrinsicWidth;
                 mIntrinsicHeight = orig.mIntrinsicHeight;
@@ -427,48 +565,45 @@
                 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
             }
         }
-        
+
         @Override
         public Drawable newDrawable() {
             return new ShapeDrawable(this);
         }
-        
+
         @Override
         public Drawable newDrawable(Resources res) {
             return new ShapeDrawable(this);
         }
-        
+
         @Override
         public int getChangingConfigurations() {
             return mChangingConfigurations;
         }
     }
-    
+
     /**
      * Base class defines a factory object that is called each time the drawable
      * is resized (has a new width or height). Its resize() method returns a
-     * corresponding shader, or null.
-     * Implement this class if you'd like your ShapeDrawable to use a special
-     * {@link android.graphics.Shader}, such as a 
-     * {@link android.graphics.LinearGradient}. 
-     * 
+     * corresponding shader, or null. Implement this class if you'd like your
+     * ShapeDrawable to use a special {@link android.graphics.Shader}, such as a
+     * {@link android.graphics.LinearGradient}.
      */
     public static abstract class ShaderFactory {
         /**
-         * Returns the Shader to be drawn when a Drawable is drawn.
-         * The dimensions of the Drawable are passed because they may be needed
-         * to adjust how the Shader is configured for drawing.
-         * This is called by ShapeDrawable.setShape().
-         * 
-         * @param width  the width of the Drawable being drawn
+         * Returns the Shader to be drawn when a Drawable is drawn. The
+         * dimensions of the Drawable are passed because they may be needed to
+         * adjust how the Shader is configured for drawing. This is called by
+         * ShapeDrawable.setShape().
+         *
+         * @param width the width of the Drawable being drawn
          * @param height the heigh of the Drawable being drawn
-         * @return       the Shader to be drawn
+         * @return the Shader to be drawn
          */
         public abstract Shader resize(int width, int height);
     }
-    
+
     // other subclass could wack the Shader's localmatrix based on the
     // resize params (e.g. scaletofit, etc.). This could be used to scale
     // a bitmap to fill the bounds without needing any other special casing.
 }
-
diff --git a/graphics/java/android/graphics/drawable/StateListDrawable.java b/graphics/java/android/graphics/drawable/StateListDrawable.java
index 48d66b7..271af2b 100644
--- a/graphics/java/android/graphics/drawable/StateListDrawable.java
+++ b/graphics/java/android/graphics/drawable/StateListDrawable.java
@@ -24,6 +24,7 @@
 
 import android.content.res.Resources;
 import android.content.res.TypedArray;
+import android.content.res.Resources.Theme;
 import android.util.AttributeSet;
 import android.util.StateSet;
 
@@ -110,8 +111,7 @@
     }
 
     @Override
-    public void inflate(Resources r, XmlPullParser parser,
-            AttributeSet attrs)
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
             throws XmlPullParserException, IOException {
 
         TypedArray a = r.obtainAttributes(attrs,
@@ -183,7 +183,7 @@
                                     + ": <item> tag requires a 'drawable' attribute or "
                                     + "child tag defining a drawable");
                 }
-                dr = Drawable.createFromXmlInner(r, parser, attrs);
+                dr = Drawable.createFromXmlInnerThemed(r, parser, attrs, theme);
             }
 
             mStateListState.addStateSet(states, dr);
diff --git a/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java b/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java
new file mode 100644
index 0000000..0097183
--- /dev/null
+++ b/graphics/java/android/graphics/drawable/TouchFeedbackDrawable.java
@@ -0,0 +1,681 @@
+/*
+ * Copyright (C) 2013 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 android.graphics.drawable;
+
+import android.content.res.ColorStateList;
+import android.content.res.Resources;
+import android.content.res.Resources.Theme;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.PorterDuffXfermode;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.util.SparseArray;
+
+import com.android.internal.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * Documentation pending.
+ */
+public class TouchFeedbackDrawable extends LayerDrawable {
+    private static final String LOG_TAG = TouchFeedbackDrawable.class.getSimpleName();
+    private static final PorterDuffXfermode DST_IN = new PorterDuffXfermode(Mode.DST_IN);
+    private static final PorterDuffXfermode SRC_OVER = new PorterDuffXfermode(Mode.SRC_OVER);
+
+    /** The maximum number of ripples supported. */
+    private static final int MAX_RIPPLES = 10;
+
+    private final Rect mTempRect = new Rect();
+
+    /** Current ripple effect bounds, used to constrain ripple effects. */
+    private final Rect mHotspotBounds = new Rect();
+
+    /** Current drawing bounds, used to compute dirty region. */
+    private final Rect mDrawingBounds = new Rect();
+
+    /** Current dirty bounds, union of current and previous drawing bounds. */
+    private final Rect mDirtyBounds = new Rect();
+
+    private final TouchFeedbackState mState;
+
+    /** Lazily-created map of touch hotspot IDs to ripples. */
+    private SparseArray<Ripple> mRipples;
+
+    /** Lazily-created array of actively animating ripples. */
+    private Ripple[] mAnimatingRipples;
+    private int mAnimatingRipplesCount = 0;
+
+    /** Paint used to control appearance of ripples. */
+    private Paint mRipplePaint;
+
+    /** Paint used to control reveal layer masking. */
+    private Paint mMaskingPaint;
+
+    /** Target density of the display into which ripples are drawn. */
+    private float mDensity = 1.0f;
+
+    /** Whether bounds are being overridden. */
+    private boolean mOverrideBounds;
+
+    TouchFeedbackDrawable() {
+        this(new TouchFeedbackState(null, null, null), null, null);
+    }
+
+    @Override
+    public int getOpacity() {
+        // Worst-case scenario.
+        return PixelFormat.TRANSLUCENT;
+    }
+
+    @Override
+    protected boolean onStateChange(int[] stateSet) {
+        super.onStateChange(stateSet);
+
+        // TODO: Implicitly tie states to ripple IDs. For now, just clear
+        // focused and pressed if they aren't in the state set.
+        boolean hasFocused = false;
+        boolean hasPressed = false;
+        for (int i = 0; i < stateSet.length; i++) {
+            if (stateSet[i] == R.attr.state_pressed) {
+                hasPressed = true;
+            } else if (stateSet[i] == R.attr.state_focused) {
+                hasFocused = true;
+            }
+        }
+
+        if (!hasPressed) {
+            removeHotspot(R.attr.state_pressed);
+        }
+
+        if (!hasFocused) {
+            removeHotspot(R.attr.state_focused);
+        }
+
+        if (mRipplePaint != null && mState.mTint != null) {
+            final ColorStateList stateList = mState.mTint;
+            final int newColor = stateList.getColorForState(stateSet, 0);
+            final int oldColor = mRipplePaint.getColor();
+            if (oldColor != newColor) {
+                mRipplePaint.setColor(newColor);
+                invalidateSelf();
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    @Override
+    protected void onBoundsChange(Rect bounds) {
+        super.onBoundsChange(bounds);
+
+        if (!mOverrideBounds) {
+            mHotspotBounds.set(bounds);
+        }
+
+        onHotspotBoundsChange();
+    }
+
+    private void onHotspotBoundsChange() {
+        final int x = mHotspotBounds.centerX();
+        final int y = mHotspotBounds.centerY();
+        final int N = mAnimatingRipplesCount;
+        for (int i = 0; i < N; i++) {
+            if (mState.mPinned) {
+                mAnimatingRipples[i].move(x, y);
+            }
+            mAnimatingRipples[i].onBoundsChanged();
+        }
+    }
+
+    @Override
+    public boolean setVisible(boolean visible, boolean restart) {
+        if (!visible) {
+            clearHotspots();
+        }
+
+        return super.setVisible(visible, restart);
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public boolean isProjected() {
+        return getNumberOfLayers() == 0;
+    }
+
+    @Override
+    public boolean isStateful() {
+        return super.isStateful() || mState.mTint != null && mState.mTint.isStateful();
+    }
+
+    /**
+     * Specifies a tint for drawing touch feedback ripples.
+     *
+     * @param tint Color state list to use for tinting touch feedback ripples,
+     *        or null to clear the tint
+     */
+    public void setTint(ColorStateList tint) {
+        if (mState.mTint != tint) {
+            mState.mTint = tint;
+            invalidateSelf();
+        }
+    }
+
+    /**
+     * Returns the tint color for touch feedback ripples.
+     *
+     * @return Color state list to use for tinting touch feedback ripples, or
+     *         null if none set
+     */
+    public ColorStateList getTint() {
+        return mState.mTint;
+    }
+
+    /**
+     * Specifies the blending mode used to draw touch feedback ripples.
+     *
+     * @param tintMode A Porter-Duff blending mode
+     */
+    public void setTintMode(Mode tintMode) {
+        mState.setTintMode(tintMode);
+        invalidateSelf();
+    }
+
+    @Override
+    public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme)
+            throws XmlPullParserException, IOException {
+        final TypedArray a = obtainAttributes(
+                r, theme, attrs, R.styleable.TouchFeedbackDrawable);
+        inflateStateFromTypedArray(a);
+        a.recycle();
+
+        super.inflate(r, parser, attrs, theme);
+
+        setTargetDensity(r.getDisplayMetrics());
+
+        // Find the mask
+        final int N = getNumberOfLayers();
+        for (int i = 0; i < N; i++) {
+            if (mLayerState.mChildren[i].mId == R.id.mask) {
+                mState.mMask = mLayerState.mChildren[i].mDrawable;
+            }
+        }
+    }
+
+    @Override
+    public boolean setDrawableByLayerId(int id, Drawable drawable) {
+        if (super.setDrawableByLayerId(id, drawable)) {
+            if (id == R.id.mask) {
+                mState.mMask = drawable;
+            }
+
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Initializes the constant state from the values in the typed array.
+     */
+    private void inflateStateFromTypedArray(TypedArray a) {
+        final TouchFeedbackState state = mState;
+
+        // Extract the theme attributes, if any.
+        final int[] themeAttrs = a.extractThemeAttrs();
+        state.mTouchThemeAttrs = themeAttrs;
+
+        if (themeAttrs == null || themeAttrs[R.styleable.TouchFeedbackDrawable_tint] == 0) {
+            mState.mTint = a.getColorStateList(R.styleable.TouchFeedbackDrawable_tint);
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.TouchFeedbackDrawable_tintMode] == 0) {
+            mState.setTintMode(Drawable.parseTintMode(
+                    a.getInt(R.styleable.TouchFeedbackDrawable_tintMode, -1), Mode.SRC_ATOP));
+        }
+
+        if (themeAttrs == null || themeAttrs[R.styleable.TouchFeedbackDrawable_pinned] == 0) {
+            mState.mPinned = a.getBoolean(R.styleable.TouchFeedbackDrawable_pinned, false);
+        }
+    }
+
+    /**
+     * Set the density at which this drawable will be rendered.
+     *
+     * @param metrics The display metrics for this drawable.
+     */
+    private void setTargetDensity(DisplayMetrics metrics) {
+        if (mDensity != metrics.density) {
+            mDensity = metrics.density;
+            invalidateSelf();
+        }
+    }
+
+    @Override
+    public void applyTheme(Theme t) {
+        super.applyTheme(t);
+
+        final TouchFeedbackState state = mState;
+        if (state == null) {
+            throw new RuntimeException(
+                    "Can't apply theme to <touch-feedback> with no constant state");
+        }
+
+        final int[] themeAttrs = state.mTouchThemeAttrs;
+        if (themeAttrs != null) {
+            final TypedArray a = t.resolveAttributes(
+                    themeAttrs, R.styleable.TouchFeedbackDrawable, 0, 0);
+            updateStateFromTypedArray(a);
+            a.recycle();
+        }
+    }
+
+    /**
+     * Updates the constant state from the values in the typed array.
+     */
+    private void updateStateFromTypedArray(TypedArray a) {
+        final TouchFeedbackState state = mState;
+
+        if (a.hasValue(R.styleable.TouchFeedbackDrawable_tint)) {
+            state.mTint = a.getColorStateList(R.styleable.TouchFeedbackDrawable_tint);
+        }
+
+        if (a.hasValue(R.styleable.TouchFeedbackDrawable_tintMode)) {
+            mState.setTintMode(Drawable.parseTintMode(
+                    a.getInt(R.styleable.TouchFeedbackDrawable_tintMode, -1), Mode.SRC_ATOP));
+        }
+
+        if (a.hasValue(R.styleable.TouchFeedbackDrawable_pinned)) {
+            mState.mPinned = a.getBoolean(R.styleable.TouchFeedbackDrawable_pinned, false);
+        }
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        return super.canApplyTheme() || mState != null && mState.mTouchThemeAttrs != null;
+    }
+
+    @Override
+    public boolean supportsHotspots() {
+        return true;
+    }
+
+    @Override
+    public void setHotspot(int id, float x, float y) {
+        if (mRipples == null) {
+            mRipples = new SparseArray<Ripple>();
+            mAnimatingRipples = new Ripple[MAX_RIPPLES];
+        }
+
+        if (mAnimatingRipplesCount >= MAX_RIPPLES) {
+            Log.e(LOG_TAG, "Max ripple count exceeded", new RuntimeException());
+            return;
+        }
+
+        final Ripple ripple = mRipples.get(id);
+        if (ripple == null) {
+            final Rect bounds = mHotspotBounds;
+            if (mState.mPinned) {
+                x = bounds.exactCenterX();
+                y = bounds.exactCenterY();
+            }
+
+            // TODO: Clean this up in the API.
+            final boolean pulse = (id != R.attr.state_focused);
+            final Ripple newRipple = new Ripple(this, bounds, mDensity, pulse);
+            newRipple.move(x, y);
+
+            mAnimatingRipples[mAnimatingRipplesCount++] = newRipple;
+            mRipples.put(id, newRipple);
+        } else if (mState.mPinned) {
+            final Rect bounds = mHotspotBounds;
+            x = bounds.exactCenterX();
+            y = bounds.exactCenterY();
+            ripple.move(x, y);
+        } else {
+            ripple.move(x, y);
+        }
+    }
+
+    @Override
+    public void removeHotspot(int id) {
+        if (mRipples == null) {
+            return;
+        }
+
+        final Ripple ripple = mRipples.get(id);
+        if (ripple != null) {
+            ripple.exit();
+
+            mRipples.remove(id);
+        }
+    }
+
+    @Override
+    public void clearHotspots() {
+        if (mRipples != null) {
+            mRipples.clear();
+        }
+
+        final int count = mAnimatingRipplesCount;
+        final Ripple[] ripples = mAnimatingRipples;
+        for (int i = 0; i < count; i++) {
+            ripples[i].cancel();
+            ripples[i] = null;
+        }
+
+        mAnimatingRipplesCount = 0;
+        invalidateSelf();
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void setHotspotBounds(int left, int top, int right, int bottom) {
+        mOverrideBounds = true;
+        mHotspotBounds.set(left, top, right, bottom);
+        onHotspotBoundsChange();
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        final int N = mLayerState.mNum;
+        final Rect bounds = getBounds();
+        final ChildDrawable[] array = mLayerState.mChildren;
+        final boolean maskOnly = mState.mMask != null && N == 1;
+
+        int restoreToCount = drawRippleLayer(canvas, bounds, maskOnly);
+
+        if (restoreToCount >= 0) { 
+            // We have a ripple layer that contains ripples. If we also have an
+            // explicit mask drawable, apply it now using DST_IN blending.
+            if (mState.mMask != null) {
+                canvas.saveLayer(bounds.left, bounds.top, bounds.right,
+                        bounds.bottom, getMaskingPaint(DST_IN));
+                mState.mMask.draw(canvas);
+                canvas.restoreToCount(restoreToCount);
+                restoreToCount = -1;
+            }
+
+            // If there's more content, we need an extra masking layer to merge
+            // the ripples over the content.
+            if (!maskOnly) {
+                final PorterDuffXfermode xfermode = mState.getTintXfermodeInverse();
+                final int count = canvas.saveLayer(bounds.left, bounds.top,
+                        bounds.right, bounds.bottom, getMaskingPaint(xfermode));
+                if (restoreToCount < 0) {
+                    restoreToCount = count;
+                }
+            }
+        }
+
+        // Draw everything except the mask.
+        for (int i = 0; i < N; i++) {
+            if (array[i].mId != R.id.mask) {
+                array[i].mDrawable.draw(canvas);
+            }
+        }
+
+        // Composite the layers if needed.
+        if (restoreToCount >= 0) {
+            canvas.restoreToCount(restoreToCount);
+        }
+    }
+
+    private int drawRippleLayer(Canvas canvas, Rect bounds, boolean maskOnly) {
+        final int count = mAnimatingRipplesCount;
+        if (count == 0) {
+            return -1;
+        }
+
+        final Ripple[] ripples = mAnimatingRipples;
+        final boolean projected = isProjected();
+        final Rect layerBounds = projected ? getDirtyBounds() : bounds;
+
+        // Separate the ripple color and alpha channel. The alpha will be
+        // applied when we merge the ripples down to the canvas.
+        final int rippleColor;
+        if (mState.mTint != null) {
+            rippleColor = mState.mTint.getColorForState(getState(), Color.TRANSPARENT);
+        } else {
+            rippleColor = Color.TRANSPARENT;
+        }
+        final int rippleAlpha = Color.alpha(rippleColor);
+
+        if (mRipplePaint == null) {
+            mRipplePaint = new Paint();
+            mRipplePaint.setAntiAlias(true);
+        }
+        final Paint ripplePaint = mRipplePaint;
+        ripplePaint.setColor(rippleColor);
+
+        boolean drewRipples = false;
+        int restoreToCount = -1;
+        int animatingCount = 0;
+
+        // Draw ripples and update the animating ripples array.
+        for (int i = 0; i < count; i++) {
+            final Ripple ripple = ripples[i];
+
+            // Mark and skip finished ripples.
+            if (ripple.isFinished()) {
+                ripples[i] = null;
+                continue;
+            }
+
+            // If we're masking the ripple layer, make sure we have a layer
+            // first. This will merge SRC_OVER (directly) onto the canvas.
+            if (restoreToCount < 0) {
+                // If we're projecting or we only have a mask, we want to treat the
+                // underlying canvas as our content and merge the ripple layer down
+                // using the tint xfermode.
+                final PorterDuffXfermode xfermode;
+                if (projected || maskOnly) {
+                    xfermode = mState.getTintXfermode();
+                } else {
+                    xfermode = SRC_OVER;
+                }
+
+                final Paint layerPaint = getMaskingPaint(xfermode);
+                layerPaint.setAlpha(rippleAlpha);
+                restoreToCount = canvas.saveLayer(layerBounds.left, layerBounds.top,
+                        layerBounds.right, layerBounds.bottom, layerPaint);
+                layerPaint.setAlpha(255);
+            }
+
+            drewRipples |= ripple.draw(canvas, ripplePaint);
+
+            ripples[animatingCount] = ripples[i];
+            animatingCount++;
+        }
+
+        mAnimatingRipplesCount = animatingCount;
+
+        // If we created a layer with no content, merge it immediately.
+        if (restoreToCount >= 0 && !drewRipples) {
+            canvas.restoreToCount(restoreToCount);
+            restoreToCount = -1;
+        }
+
+        return restoreToCount;
+    }
+
+    private Paint getMaskingPaint(PorterDuffXfermode xfermode) {
+        if (mMaskingPaint == null) {
+            mMaskingPaint = new Paint();
+        }
+        mMaskingPaint.setXfermode(xfermode);
+        return mMaskingPaint;
+    }
+
+    @Override
+    public Rect getDirtyBounds() {
+        final Rect drawingBounds = mDrawingBounds;
+        final Rect dirtyBounds = mDirtyBounds;
+        dirtyBounds.set(drawingBounds);
+        drawingBounds.setEmpty();
+
+        final Rect rippleBounds = mTempRect;
+        final Ripple[] activeRipples = mAnimatingRipples;
+        final int N = mAnimatingRipplesCount;
+        for (int i = 0; i < N; i++) {
+            activeRipples[i].getBounds(rippleBounds);
+            drawingBounds.union(rippleBounds);
+        }
+
+        dirtyBounds.union(drawingBounds);
+        dirtyBounds.union(super.getDirtyBounds());
+        return dirtyBounds;
+    }
+
+    @Override
+    public ConstantState getConstantState() {
+        return mState;
+    }
+
+    static class TouchFeedbackState extends LayerState {
+        int[] mTouchThemeAttrs;
+        ColorStateList mTint;
+        PorterDuffXfermode mTintXfermode;
+        PorterDuffXfermode mTintXfermodeInverse;
+        Drawable mMask;
+        boolean mPinned;
+
+        public TouchFeedbackState(
+                TouchFeedbackState orig, TouchFeedbackDrawable owner, Resources res) {
+            super(orig, owner, res);
+
+            if (orig != null) {
+                mTouchThemeAttrs = orig.mTouchThemeAttrs;
+                mTint = orig.mTint;
+                mTintXfermode = orig.mTintXfermode;
+                mTintXfermodeInverse = orig.mTintXfermodeInverse;
+                mPinned = orig.mPinned;
+                mMask = orig.mMask;
+            }
+        }
+
+        public void setTintMode(Mode mode) {
+            final Mode invertedMode = TouchFeedbackState.invertPorterDuffMode(mode);
+            mTintXfermodeInverse = new PorterDuffXfermode(invertedMode);
+            mTintXfermode = new PorterDuffXfermode(mode);
+        }
+
+        public PorterDuffXfermode getTintXfermode() {
+            return mTintXfermode;
+        }
+
+        public PorterDuffXfermode getTintXfermodeInverse() {
+            return mTintXfermodeInverse;
+        }
+
+        @Override
+        public boolean canApplyTheme() {
+            return mTouchThemeAttrs != null || super.canApplyTheme();
+        }
+
+        @Override
+        public Drawable newDrawable() {
+            return new TouchFeedbackDrawable(this, null, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res) {
+            return new TouchFeedbackDrawable(this, res, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new TouchFeedbackDrawable(this, res, theme);
+        }
+
+        /**
+         * Inverts SRC and DST in PorterDuff blending modes.
+         */
+        private static Mode invertPorterDuffMode(Mode src) {
+            switch (src) {
+                case SRC_ATOP:
+                    return Mode.DST_ATOP;
+                case SRC_IN:
+                    return Mode.DST_IN;
+                case SRC_OUT:
+                    return Mode.DST_OUT;
+                case SRC_OVER:
+                    return Mode.DST_OVER;
+                case DST_ATOP:
+                    return Mode.SRC_ATOP;
+                case DST_IN:
+                    return Mode.SRC_IN;
+                case DST_OUT:
+                    return Mode.SRC_OUT;
+                case DST_OVER:
+                    return Mode.SRC_OVER;
+                default:
+                    // Everything else is agnostic to SRC versus DST.
+                    return src;
+            }
+        }
+    }
+
+    private TouchFeedbackDrawable(TouchFeedbackState state, Resources res, Theme theme) {
+        boolean needsTheme = false;
+
+        final TouchFeedbackState ns;
+        if (theme != null && state != null && state.canApplyTheme()) {
+            ns = new TouchFeedbackState(state, this, res);
+            needsTheme = true;
+        } else if (state == null) {
+            ns = new TouchFeedbackState(null, this, res);
+        } else {
+            // We always need a new state since child drawables contain local
+            // state but live within the parent's constant state.
+            // TODO: Move child drawables into local state.
+            ns = new TouchFeedbackState(state, this, res);
+        }
+
+        if (res != null) {
+            mDensity = res.getDisplayMetrics().density;
+        }
+
+        mState = ns;
+        mLayerState = ns;
+
+        if (ns.mNum > 0) {
+            ensurePadding();
+        }
+
+        if (needsTheme) {
+            applyTheme(theme);
+        }
+
+        setPaddingMode(PADDING_MODE_STACK);
+    }
+}
diff --git a/graphics/java/android/graphics/drawable/TransitionDrawable.java b/graphics/java/android/graphics/drawable/TransitionDrawable.java
index 483fa56..622e90b 100644
--- a/graphics/java/android/graphics/drawable/TransitionDrawable.java
+++ b/graphics/java/android/graphics/drawable/TransitionDrawable.java
@@ -17,6 +17,7 @@
 package android.graphics.drawable;
 
 import android.content.res.Resources;
+import android.content.res.Resources.Theme;
 import android.graphics.Canvas;
 import android.os.SystemClock;
 
@@ -85,11 +86,11 @@
      * @see #TransitionDrawable(Drawable[])
      */
     TransitionDrawable() {
-        this(new TransitionState(null, null, null), (Resources)null);
+        this(new TransitionState(null, null, null), null, null);
     }
 
-    private TransitionDrawable(TransitionState state, Resources res) {
-        super(state, res);
+    private TransitionDrawable(TransitionState state, Resources res, Theme theme) {
+        super(state, res, theme);
     }
 
     private TransitionDrawable(TransitionState state, Drawable[] layers) {
@@ -251,12 +252,17 @@
 
         @Override
         public Drawable newDrawable() {
-            return new TransitionDrawable(this, (Resources)null);
+            return new TransitionDrawable(this, null, null);
         }
 
         @Override
         public Drawable newDrawable(Resources res) {
-            return new TransitionDrawable(this, res);
+            return new TransitionDrawable(this, res, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new TransitionDrawable(this, res, theme);
         }
 
         @Override
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
new file mode 100644
index 0000000..0992717
--- /dev/null
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -0,0 +1,2227 @@
+/*
+ * Copyright (C) 2014 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 android.graphics.drawable;
+
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.content.res.Resources;
+import android.content.res.Resources.Theme;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.ColorFilter;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PathMeasure;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.graphics.Region;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Xml;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.LinearInterpolator;
+
+import com.android.internal.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlPullParserFactory;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+
+/**
+ * This lets you create a drawable based on an XML vector graphic It can be
+ * defined in an XML file with the <code>&lt;vector></code> element.
+ * <p/>
+ * The vector drawable has 6 elements:
+ * <p/>
+ * <dl>
+ * <dt><code>&lt;vector></code></dt>
+ * <dd>The attribute <code>android:trigger</code> defines a state change that
+ * will drive the animation</dd>
+ * <dd>The attribute <code>android:versionCode</code> defines the version of
+ * VectorDrawable</dd>
+ * <dt><code>&lt;size></code></dt>
+ * <dd>Used to defined the intrinsic Width Height size of the drawable using
+ * <code>android:width</code> and <code>android:height</code></dd>
+ * <dt><code>&lt;viewport></code></dt>
+ * <dd>Used to defined the size of the virtual canvas the paths are drawn on.
+ * The size is defined using the attributes <code>android:viewportHeight</code>
+ * <code>android:viewportWidth</code></dd>
+ * <dt><code>&lt;group></code></dt>
+ * <dd>Defines a "key frame" in the animation if there is only one group the
+ * drawable is static 2D image that has no animation.</dd>
+ * <dt><code>&lt;path></code></dt>
+ * <dd>Defines paths to be drawn. The path elements must be within a group
+ * <dl>
+ * <dt><code>android:name</code>
+ * <dd>Defines the name of the path.</dd></dt>
+ * <dt><code>android:pathData</code>
+ * <dd>Defines path string.</dd></dt>
+ * <dt><code>android:fill</code>
+ * <dd>Defines the color to fill the path (none if not present).</dd></dt>
+ * <dt><code>android:stroke</code>
+ * <dd>Defines the color to draw the path outline (none if not present).</dd>
+ * </dt>
+ * <dt><code>android:strokeWidth</code>
+ * <dd>The width a path stroke</dd></dt>
+ * <dt><code>android:strokeOpacity</code>
+ * <dd>The opacity of a path stroke</dd></dt>
+ * <dt><code>android:rotation</code>
+ * <dd>The amount to rotation the path stroke.</dd></dt>
+ * <dt><code>android:pivotX</code>
+ * <dd>The X coordinate of the center of rotation of a path</dd></dt>
+ * <dt><code>android:pivotY</code>
+ * <dd>The Y coordinate of the center of rotation of a path</dd></dt>
+ * <dt><code>android:fillOpacity</code>
+ * <dd>The opacity to fill the path with</dd></dt>
+ * <dt><code>android:trimPathStart</code>
+ * <dd>The fraction of the path to trim from the start from 0 to 1</dd></dt>
+ * <dt><code>android:trimPathEnd</code>
+ * <dd>The fraction of the path to trim from the end from 0 to 1</dd></dt>
+ * <dt><code>android:trimPathOffset</code>
+ * <dd>Shift trim region (allows showed region to include the start and end)
+ * from 0 to 1</dd></dt>
+ * <dt><code>android:clipToPath</code>
+ * <dd>Path will set the clip path</dd></dt>
+ * <dt><code>android:strokeLineCap</code>
+ * <dd>Sets the linecap for a stroked path: butt, round, square</dd></dt>
+ * <dt><code>android:strokeLineJoin</code>
+ * <dd>Sets the lineJoin for a stroked path: miter,round,bevel</dd></dt>
+ * <dt><code>android:strokeMiterLimit</code>
+ * <dd>Sets the Miter limit for a stroked path</dd></dt>
+ * <dt><code>android:state_pressed</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_focused</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_selected</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_window_focused</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_enabled</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_activated</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_accelerated</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_hovered</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_checked</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * <dt><code>android:state_checkable</code>
+ * <dd>Sets a condition to be met to draw path</dd></dt>
+ * </dl>
+ * </dd>
+ * <dt><code>&lt;animation></code></dt>
+ * <dd>Used to customize the transition between two paths
+ * <dl>
+ * <dt><code>android:sequence</code>
+ * <dd>Configures this animation sequence between the named paths.</dd></dt>
+ * <dt><code>android:limitTo</code>
+ * <dd>Limits an animation to only interpolate the selected variable unlimited,
+ * path, rotation, trimPathStart, trimPathEnd, trimPathOffset</dd></dt>
+ * <dt><code>android:repeatCount</code>
+ * <dd>Number of times to loop this aspect of the animation</dd></dt>
+ * <dt><code>android:durations</code>
+ * <dd>The duration of each step in the animation in milliseconds Must contain
+ * the number of named paths - 1</dd></dt>
+ * <dt><code>android:startDelay</code>
+ * <dd></dd></dt>
+ * <dt><code>android:repeatStyle</code>
+ * <dd>when repeating how does it repeat back and forth or a to b: forward,
+ * inAndOut</dd></dt>
+ * <dt><code>android:animate</code>
+ * <dd>linear, accelerate, decelerate, easing</dd></dt>
+ * </dl>
+ * </dd>
+ */
+public class VectorDrawable extends Drawable {
+    private static final String LOGTAG = VectorDrawable.class.getSimpleName();
+
+    private static final String SHAPE_SIZE = "size";
+    private static final String SHAPE_VIEWPORT = "viewport";
+    private static final String SHAPE_GROUP = "group";
+    private static final String SHAPE_PATH = "path";
+    private static final String SHAPE_TRANSITION = "transition";
+    private static final String SHAPE_ANIMATION = "animation";
+    private static final String SHAPE_VECTOR = "vector";
+
+    private static final int LINECAP_BUTT = 0;
+    private static final int LINECAP_ROUND = 1;
+    private static final int LINECAP_SQUARE = 2;
+
+    private static final int LINEJOIN_MITER = 0;
+    private static final int LINEJOIN_ROUND = 1;
+    private static final int LINEJOIN_BEVEL = 2;
+
+    private static final int DEFAULT_DURATION = 1000;
+    private static final long DEFAULT_INFINITE_DURATION = 60 * 60 * 1000;
+
+    private final VectorDrawableState mVectorState;
+
+    private int mAlpha = 0xFF;
+
+    public VectorDrawable() {
+        mVectorState = new VectorDrawableState(null);
+        mVectorState.mBasicAnimator = ObjectAnimator.ofFloat(this, "AnimationFraction", 0, 0);
+
+        setDuration(DEFAULT_DURATION);
+    }
+
+    private VectorDrawable(VectorDrawableState state, Resources res, Theme theme) {
+        mVectorState = new VectorDrawableState(state);
+        mVectorState.mBasicAnimator = ObjectAnimator.ofFloat(this, "AnimationFraction", 0, 0);
+
+        if (theme != null && canApplyTheme()) {
+            applyTheme(theme);
+        }
+
+        long duration = mVectorState.mVAnimatedPath.getTotalAnimationDuration();
+        if (duration == -1) {
+            // If duration is infinite, set to 1 hour.
+            // TODO: Define correct approach for infinite.
+            duration = DEFAULT_INFINITE_DURATION;
+            mVectorState.mBasicAnimator.setFloatValues(0, duration / 1000);
+            mVectorState.mBasicAnimator.setInterpolator(new LinearInterpolator());
+        }
+        setDuration(duration);
+    }
+
+    @Override
+    public ConstantState getConstantState() {
+        return mVectorState;
+    }
+
+    @Override
+    public void jumpToCurrentState() {
+        stop();
+    }
+
+    /**
+     * Starts the animation.
+     */
+    public void start() {
+        mVectorState.mBasicAnimator.start();
+    }
+
+    /**
+     * Stops the animation and moves to the end state.
+     */
+    public void stop() {
+        mVectorState.mBasicAnimator.end();
+    }
+
+    /**
+     * Returns the current completion value for the animation.
+     *
+     * @return the current point on the animation, typically between 0 and 1
+     */
+    public float geAnimationFraction() {
+        return mVectorState.mVAnimatedPath.getValue();
+    }
+
+    /**
+     * Set the current completion value for the animation.
+     *
+     * @param value the point along the animation, typically between 0 and 1
+     */
+    public void setAnimationFraction(float value) {
+        mVectorState.mVAnimatedPath.setAnimationFraction(value);
+        invalidateSelf();
+    }
+
+    /**
+     * set the amount of time the animation will take
+     *
+     * @param duration amount of time in milliseconds
+     */
+    public void setDuration(long duration) {
+        mVectorState.mBasicAnimator.setDuration(duration);
+    }
+
+    /**
+     * Defines what this animation should do when it reaches the end. This
+     * setting is applied only when the repeat count is either greater than 0 or
+     * {@link ValueAnimator#INFINITE}.
+     *
+     * @param mode the animation mode, either {@link ValueAnimator#RESTART} or
+     *            {@link ValueAnimator#REVERSE}
+     */
+    public void setRepeatMode(int mode) {
+        mVectorState.mBasicAnimator.setRepeatMode(mode);
+    }
+
+    /**
+     * Sets animation to repeat
+     *
+     * @param repeat True if this drawable repeats its animation
+     */
+    public void setRepeatCount(int repeat) {
+        mVectorState.mBasicAnimator.setRepeatCount(repeat);
+    }
+
+    /**
+     * @return the animation repeat count, either a value greater than 0 or
+     *         {@link ValueAnimator#INFINITE}
+     */
+    public int getRepeatCount() {
+        return mVectorState.mBasicAnimator.getRepeatCount();
+    }
+
+    @Override
+    public boolean isStateful() {
+        return true;
+    }
+
+    @Override
+    protected boolean onStateChange(int[] state) {
+        super.onStateChange(state);
+
+        mVectorState.mVAnimatedPath.setState(state);
+
+        final int direction = mVectorState.mVAnimatedPath.getTrigger(state);
+        if (direction > 0) {
+            animateForward();
+        } else if (direction < 0) {
+            animateBackward();
+        }
+
+        invalidateSelf();
+        return true;
+    }
+
+    private void animateForward() {
+        if (!mVectorState.mBasicAnimator.isStarted()) {
+            mVectorState.mBasicAnimator.setFloatValues(0, 1);
+            start();
+        }
+    }
+
+    private void animateBackward() {
+        if (!mVectorState.mBasicAnimator.isStarted()) {
+            mVectorState.mBasicAnimator.setFloatValues(1, 0);
+            start();
+        }
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        final int saveCount = canvas.save();
+        final Rect bounds = getBounds();
+        canvas.translate(bounds.left, bounds.top);
+        mVectorState.mVAnimatedPath.draw(canvas, bounds.width(), bounds.height());
+        canvas.restoreToCount(saveCount);
+    }
+
+    @Override
+    public void setAlpha(int alpha) {
+        // TODO correct handling of transparent
+        if (mAlpha != alpha) {
+            mAlpha = alpha;
+            invalidateSelf();
+        }
+    }
+
+    @Override
+    public void setColorFilter(ColorFilter colorFilter) {
+        // TODO: support color filter
+    }
+
+    @Override
+    public int getOpacity() {
+        return PixelFormat.TRANSLUCENT;
+    }
+
+    /**
+     * Sets padding for this shape, defined by a Rect object. Define the padding
+     * in the Rect object as: left, top, right, bottom.
+     */
+    public void setPadding(Rect padding) {
+        setPadding(padding.left, padding.top, padding.right, padding.bottom);
+    }
+
+    /**
+     * Sets padding for the shape.
+     *
+     * @param left padding for the left side (in pixels)
+     * @param top padding for the top (in pixels)
+     * @param right padding for the right side (in pixels)
+     * @param bottom padding for the bottom (in pixels)
+     */
+    public void setPadding(int left, int top, int right, int bottom) {
+        if ((left | top | right | bottom) == 0) {
+            mVectorState.mPadding = null;
+        } else {
+            if (mVectorState.mPadding == null) {
+                mVectorState.mPadding = new Rect();
+            }
+            mVectorState.mPadding.set(left, top, right, bottom);
+        }
+        invalidateSelf();
+    }
+
+    @Override
+    public int getIntrinsicWidth() {
+        return (int) mVectorState.mVAnimatedPath.mBaseWidth;
+    }
+
+    @Override
+    public int getIntrinsicHeight() {
+        return (int) mVectorState.mVAnimatedPath.mBaseHeight;
+    }
+
+    @Override
+    public boolean getPadding(Rect padding) {
+        if (mVectorState.mPadding != null) {
+            padding.set(mVectorState.mPadding);
+            return true;
+        } else {
+            return super.getPadding(padding);
+        }
+    }
+
+    @Override
+    public void inflate(Resources res, XmlPullParser parser, AttributeSet attrs, Theme theme)
+            throws XmlPullParserException, IOException {
+        final VAnimatedPath p = inflateInternal(res, parser, attrs, theme);
+        setAnimatedPath(p);
+    }
+
+    @Override
+    public boolean canApplyTheme() {
+        return super.canApplyTheme() || mVectorState != null && mVectorState.canApplyTheme();
+    }
+
+    @Override
+    public void applyTheme(Theme t) {
+        super.applyTheme(t);
+
+        final VectorDrawableState state = mVectorState;
+        final VAnimatedPath path = state.mVAnimatedPath;
+        if (path != null && path.canApplyTheme()) {
+            path.applyTheme(t);
+        }
+    }
+
+    /** @hide */
+    public static VectorDrawable create(Resources resources, int rid) {
+        try {
+            final XmlPullParser xpp = resources.getXml(rid);
+            final AttributeSet attrs = Xml.asAttributeSet(xpp);
+            final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
+            factory.setNamespaceAware(true);
+
+            final VectorDrawable drawable = new VectorDrawable();
+            drawable.inflate(resources, xpp, attrs);
+            drawable.setAnimationFraction(0);
+
+            return drawable;
+        } catch (XmlPullParserException e) {
+            Log.e(LOGTAG, "parser error", e);
+        } catch (IOException e) {
+            Log.e(LOGTAG, "parser error", e);
+        }
+        return null;
+    }
+
+    private VAnimatedPath inflateInternal(Resources res, XmlPullParser parser, AttributeSet attrs,
+            Theme theme) throws XmlPullParserException, IOException {
+        final VAnimatedPath animatedPath = new VAnimatedPath();
+
+        boolean noSizeTag = true;
+        boolean noViewportTag = true;
+        boolean noGroupTag = true;
+        boolean noPathTag = true;
+
+        VGroup currentGroup = null;
+
+        int eventType = parser.getEventType();
+        while (eventType != XmlPullParser.END_DOCUMENT) {
+            if (eventType == XmlPullParser.START_TAG) {
+                final String tagName = parser.getName();
+                if (SHAPE_PATH.equals(tagName)) {
+                    final VPath path = new VPath();
+                    path.inflate(res, attrs, theme);
+                    currentGroup.add(path);
+                    noPathTag = false;
+                } else if (SHAPE_ANIMATION.equals(tagName)) {
+                    final VAnimation anim = new VAnimation();
+                    anim.inflate(animatedPath.mGroupList, res, attrs, theme);
+                    animatedPath.addAnimation(anim);
+                } else if (SHAPE_SIZE.equals(tagName)) {
+                    animatedPath.parseSize(res, attrs);
+                    noSizeTag = false;
+                } else if (SHAPE_VIEWPORT.equals(tagName)) {
+                    animatedPath.parseViewport(res, attrs);
+                    noViewportTag = false;
+                } else if (SHAPE_GROUP.equals(tagName)) {
+                    currentGroup = new VGroup();
+                    animatedPath.mGroupList.add(currentGroup);
+                    noGroupTag = false;
+                } else if (SHAPE_VECTOR.equals(tagName)) {
+                    final TypedArray a = res.obtainAttributes(attrs, R.styleable.VectorDrawable);
+                    animatedPath.setTrigger(a.getInteger(R.styleable.VectorDrawable_trigger, 0));
+
+                    // Parsing the version information.
+                    // Right now, we only support version "1".
+                    // If the xml didn't specify the version number, the default
+                    // version is "1".
+                    final int versionCode = a.getInt(R.styleable.VectorDrawable_versionCode, 1);
+                    if (versionCode != 1) {
+                        throw new IllegalArgumentException(
+                                "So far, VectorDrawable only support version 1");
+                    }
+
+                    a.recycle();
+                }
+            }
+
+            eventType = parser.next();
+        }
+
+        if (noSizeTag || noViewportTag || noGroupTag || noPathTag) {
+            final StringBuffer tag = new StringBuffer();
+
+            if (noSizeTag) {
+                tag.append(SHAPE_SIZE);
+            }
+
+            if (noViewportTag) {
+                if (tag.length() > 0) {
+                    tag.append(" & ");
+                }
+                tag.append(SHAPE_SIZE);
+            }
+
+            if (noGroupTag) {
+                if (tag.length() > 0) {
+                    tag.append(" & ");
+                }
+                tag.append(SHAPE_GROUP);
+            }
+
+            if (noPathTag) {
+                if (tag.length() > 0) {
+                    tag.append(" or ");
+                }
+                tag.append(SHAPE_PATH);
+            }
+
+            throw new XmlPullParserException("no " + tag + " defined");
+        }
+
+        // post parse cleanup
+        animatedPath.parseFinish();
+        return animatedPath;
+    }
+
+    private void setAnimatedPath(VAnimatedPath animatedPath) {
+        mVectorState.mVAnimatedPath = animatedPath;
+
+        long duration = mVectorState.mVAnimatedPath.getTotalAnimationDuration();
+        if (duration == -1) { // if it set to infinite set to 1 hour
+            duration = DEFAULT_INFINITE_DURATION; // TODO define correct
+                                                  // approach for infinite
+            mVectorState.mBasicAnimator.setFloatValues(0, duration / 1000);
+            mVectorState.mBasicAnimator.setInterpolator(new LinearInterpolator());
+        }
+
+        setDuration(duration);
+        setAnimationFraction(0);
+    }
+
+    @Override
+    public boolean setVisible(boolean visible, boolean restart) {
+        boolean changed = super.setVisible(visible, restart);
+        if (visible) {
+            if (changed || restart) {
+                setAnimationFraction(0);
+            }
+        } else {
+            stop();
+        }
+        return changed;
+    }
+
+    private static class VectorDrawableState extends ConstantState {
+        int mChangingConfigurations;
+        ValueAnimator mBasicAnimator;
+        VAnimatedPath mVAnimatedPath;
+        Rect mPadding;
+
+        public VectorDrawableState(VectorDrawableState copy) {
+            if (copy != null) {
+                mChangingConfigurations = copy.mChangingConfigurations;
+                mVAnimatedPath = new VAnimatedPath(copy.mVAnimatedPath);
+                mPadding = new Rect(copy.mPadding);
+            }
+        }
+
+        @Override
+        public Drawable newDrawable() {
+            return new VectorDrawable(this, null, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res) {
+            return new VectorDrawable(this, res, null);
+        }
+
+        @Override
+        public Drawable newDrawable(Resources res, Theme theme) {
+            return new VectorDrawable(this, res, theme);
+        }
+
+        @Override
+        public int getChangingConfigurations() {
+            return mChangingConfigurations;
+        }
+    }
+
+    private static class VAnimatedPath {
+        private static final int [] TRIGGER_MAP = {
+                0,
+                R.attr.state_pressed,
+                R.attr.state_focused,
+                R.attr.state_hovered,
+                R.attr.state_selected,
+                R.attr.state_checkable,
+                R.attr.state_checked,
+                R.attr.state_activated,
+                R.attr.state_focused
+        };
+
+        private final Path mPath = new Path();
+        private final Path mRenderPath = new Path();
+        private final Matrix mMatrix = new Matrix();
+
+        private ArrayList<VAnimation> mCurrentAnimList;
+        private VPath[] mCurrentPaths;
+        private Paint mStrokePaint;
+        private Paint mFillPaint;
+        private PathMeasure mPathMeasure;
+
+        private int[] mCurrentState = new int[0];
+        private float mAnimationValue;
+        private long mTotalDuration;
+        private int mTrigger;
+        private boolean mTriggerState;
+
+        final ArrayList<VGroup> mGroupList = new ArrayList<VGroup>();
+
+        float mBaseWidth = 1;
+        float mBaseHeight = 1;
+        float mViewportWidth;
+        float mViewportHeight;
+
+        public VAnimatedPath() {
+        }
+
+        public VAnimatedPath(VAnimatedPath copy) {
+            mCurrentAnimList = new ArrayList<VAnimation>(copy.mCurrentAnimList);
+            mGroupList.addAll(copy.mGroupList);
+            if (copy.mCurrentPaths != null) {
+                mCurrentPaths = new VPath[copy.mCurrentPaths.length];
+                for (int i = 0; i < mCurrentPaths.length; i++) {
+                    mCurrentPaths[i] = new VPath(copy.mCurrentPaths[i]);
+                }
+            }
+            mAnimationValue = copy.mAnimationValue; // time goes from 0 to 1
+
+            mBaseWidth = copy.mBaseWidth;
+            mBaseHeight = copy.mBaseHeight;
+            mViewportWidth = copy.mViewportHeight;
+            mViewportHeight = copy.mViewportHeight;
+            mTotalDuration = copy.mTotalDuration;
+            mTrigger = copy.mTrigger;
+            mCurrentState = new int[0];
+        }
+
+        public boolean canApplyTheme() {
+            final ArrayList<VGroup> groups = mGroupList;
+            for (int i = groups.size() - 1; i >= 0; i--) {
+                final ArrayList<VPath> paths = groups.get(i).mVGList;
+                for (int j = paths.size() - 1; j >= 0; j--) {
+                    final VPath path = paths.get(j);
+                    if (path.canApplyTheme()) {
+                        return true;
+                    }
+                }
+            }
+
+            final ArrayList<VAnimation> anims = mCurrentAnimList;
+            for (int i = anims.size() - 1; i >= 0; i--) {
+                final VAnimation anim = anims.get(i);
+                if (anim.canApplyTheme()) {
+                    return true;
+                }
+            }
+
+            return false;
+        }
+
+        public void applyTheme(Theme t) {
+            final ArrayList<VGroup> groups = mGroupList;
+            for (int i = groups.size() - 1; i >= 0; i--) {
+                final ArrayList<VPath> paths = groups.get(i).mVGList;
+                for (int j = paths.size() - 1; j >= 0; j--) {
+                    final VPath path = paths.get(j);
+                    if (path.canApplyTheme()) {
+                        path.applyTheme(t);
+                    }
+                }
+            }
+
+            final ArrayList<VAnimation> anims = mCurrentAnimList;
+            for (int i = anims.size() - 1; i >= 0; i--) {
+                final VAnimation anim = anims.get(i);
+                if (anim.canApplyTheme()) {
+                    anim.applyTheme(t);
+                }
+            }
+        }
+
+        public void setTrigger(int trigger){
+            mTrigger = VAnimatedPath.getStateForTrigger(trigger);
+        }
+
+        public long getTotalAnimationDuration() {
+            mTotalDuration = 0;
+            int size = mCurrentAnimList.size();
+            for (int i = 0; i < size; i++) {
+                VAnimation vAnimation = mCurrentAnimList.get(i);
+                long t = vAnimation.getTotalDuration();
+                if (t == -1) {
+                    mTotalDuration = -1;
+                    return -1;
+                }
+                mTotalDuration = Math.max(mTotalDuration, t);
+            }
+
+            return mTotalDuration;
+        }
+
+        public float getValue() {
+            return mAnimationValue;
+        }
+
+        /**
+         * @param value the point along the animations to show typically between 0.0f and 1.0f
+         * @return true if you need to keep repeating
+         */
+        public boolean setAnimationFraction(float value) {
+            getTotalAnimationDuration();
+
+            long animationTime = (long) (value * mTotalDuration);
+
+            final int len = mCurrentPaths.length;
+            for (int i = 0; i < len; i++) {
+                animationTime =
+                        (long) ((mTotalDuration == -1) ? value * 1000 : mTotalDuration * value);
+
+                final VPath path = mCurrentPaths[i];
+                final int size = mCurrentAnimList.size();
+                for (int j = 0; j < size; j++) {
+                    final VAnimation vAnimation = mCurrentAnimList.get(j);
+                    if (vAnimation.doesAdjustPath(path)) {
+                        mCurrentPaths[i] =  vAnimation.getPathAtTime(animationTime, path);
+                    }
+                }
+            }
+
+            mAnimationValue = value;
+
+            if (mTotalDuration == -1) {
+                return true;
+            } else {
+                return animationTime < mTotalDuration;
+            }
+        }
+
+        public void draw(Canvas canvas, int w, int h) {
+            if (mCurrentPaths == null) {
+                Log.e(LOGTAG,"mCurrentPaths == null");
+                return;
+            }
+
+            for (int i = 0; i < mCurrentPaths.length; i++) {
+                if (mCurrentPaths[i] != null && mCurrentPaths[i].isVisible(mCurrentState)) {
+                    drawPath(mCurrentPaths[i], canvas, w, h);
+                }
+            }
+        }
+
+        private void drawPath(VPath vPath, Canvas canvas, int w, int h) {
+            final float scale = Math.min(h / mViewportHeight, w / mViewportWidth);
+
+            vPath.toPath(mPath);
+            final Path path = mPath;
+
+            if (vPath.mTrimPathStart != 0.0f || vPath.mTrimPathEnd != 1.0f) {
+                float start = (vPath.mTrimPathStart + vPath.mTrimPathOffset) % 1.0f;
+                float end = (vPath.mTrimPathEnd + vPath.mTrimPathOffset) % 1.0f;
+
+                if (mPathMeasure == null) {
+                    mPathMeasure = new PathMeasure();
+                }
+                mPathMeasure.setPath(mPath, false);
+
+                float len = mPathMeasure.getLength();
+                start = start * len;
+                end = end * len;
+                path.reset();
+                if (start > end) {
+                    mPathMeasure.getSegment(start, len, path, true);
+                    mPathMeasure.getSegment(0f, end, path, true);
+                } else {
+                    mPathMeasure.getSegment(start, end, path, true);
+                }
+                path.rLineTo(0, 0); // fix bug in measure
+            }
+
+            mRenderPath.reset();
+            mMatrix.reset();
+
+            mMatrix.postRotate(vPath.mRotate, vPath.mPivotX, vPath.mPivotY);
+            mMatrix.postScale(scale, scale, mViewportWidth / 2f, mViewportHeight / 2f);
+            mMatrix.postTranslate(w / 2f - mViewportWidth / 2f, h / 2f - mViewportHeight / 2f);
+
+            mRenderPath.addPath(path, mMatrix);
+
+            if (vPath.mClip) {
+                canvas.clipPath(mRenderPath, Region.Op.REPLACE);
+            }
+
+            if (vPath.mFillColor != 0) {
+                if (mFillPaint == null) {
+                    mFillPaint = new Paint();
+                    mFillPaint.setStyle(Paint.Style.FILL);
+                    mFillPaint.setAntiAlias(true);
+                }
+
+                mFillPaint.setColor(vPath.mFillColor);
+                canvas.drawPath(mRenderPath, mFillPaint);
+            }
+
+            if (vPath.mStrokeColor != 0) {
+                if (mStrokePaint == null) {
+                    mStrokePaint = new Paint();
+                    mStrokePaint.setStyle(Paint.Style.STROKE);
+                    mStrokePaint.setAntiAlias(true);
+                }
+
+                final Paint strokePaint = mStrokePaint;
+                if (vPath.mStrokeLineJoin != null) {
+                    strokePaint.setStrokeJoin(vPath.mStrokeLineJoin);
+                }
+
+                if (vPath.mStrokeLineCap != null) {
+                    strokePaint.setStrokeCap(vPath.mStrokeLineCap);
+                }
+
+                strokePaint.setStrokeMiter(vPath.mStrokeMiterlimit * scale);
+                strokePaint.setColor(vPath.mStrokeColor);
+                strokePaint.setStrokeWidth(vPath.mStrokeWidth * scale);
+                canvas.drawPath(mRenderPath, strokePaint);
+            }
+        }
+
+        /**
+         * Ensure there is at least one animation for every path in group (linking them by names)
+         * Build the "current" path based on the first group
+         * TODO: improve memory use & performance or move to C++
+         */
+        public void parseFinish() {
+            final HashMap<String, VAnimation> newAnimations = new HashMap<String, VAnimation>();
+            for (VGroup group : mGroupList) {
+                for (VPath vPath : group.getPaths()) {
+                    if (!vPath.mAnimated) {
+                        VAnimation ap = null;
+
+                        if (!newAnimations.containsKey(vPath.getID())) {
+                            newAnimations.put(vPath.getID(), ap = new VAnimation());
+                        } else {
+                            ap = newAnimations.get(vPath.getID());
+                        }
+
+                        ap.addPath(vPath);
+                        vPath.mAnimated = true;
+                    }
+                }
+            }
+
+            if (mCurrentAnimList == null) {
+                mCurrentAnimList = new ArrayList<VectorDrawable.VAnimation>();
+            }
+            mCurrentAnimList.addAll(newAnimations.values());
+
+            final Collection<VPath> paths = mGroupList.get(0).getPaths();
+            mCurrentPaths = paths.toArray(new VPath[paths.size()]);
+            for (int i = 0; i < mCurrentPaths.length; i++) {
+                mCurrentPaths[i] = new VPath(mCurrentPaths[i]);
+            }
+        }
+
+        public void setState(int[] state) {
+            mCurrentState = Arrays.copyOf(state, state.length);
+        }
+
+        int getTrigger(int []state){
+            if (mTrigger == 0) return 0;
+            for (int i = 0; i < state.length; i++) {
+                if (state[i] == mTrigger){
+                    if (mTriggerState)
+                        return 0;
+                    mTriggerState = true;
+                    return 1;
+                }
+            }
+            if (mTriggerState) {
+                mTriggerState = false;
+                return -1;
+            }
+            return 0;
+        }
+
+        public void addAnimation(VAnimation anim) {
+            if (mCurrentAnimList == null) {
+                mCurrentAnimList = new ArrayList<VectorDrawable.VAnimation>();
+            }
+            mCurrentAnimList.add(anim);
+        }
+
+        private void parseViewport(Resources r, AttributeSet attrs)
+                throws XmlPullParserException {
+            final TypedArray a = r.obtainAttributes(attrs, R.styleable.VectorDrawableViewport);
+            mViewportWidth = a.getFloat(R.styleable.VectorDrawableViewport_viewportWidth, 0);
+            mViewportHeight = a.getFloat(R.styleable.VectorDrawableViewport_viewportHeight, 0);
+            if (mViewportWidth == 0 || mViewportHeight == 0) {
+                throw new XmlPullParserException(a.getPositionDescription()+
+                        "<viewport> tag requires viewportWidth & viewportHeight to be set");
+            }
+            a.recycle();
+        }
+
+        private void parseSize(Resources r, AttributeSet attrs)
+                throws XmlPullParserException  {
+            final TypedArray a = r.obtainAttributes(attrs, R.styleable.VectorDrawableSize);
+            mBaseWidth = a.getDimension(R.styleable.VectorDrawableSize_width, 0);
+            mBaseHeight = a.getDimension(R.styleable.VectorDrawableSize_height, 0);
+            if (mBaseWidth == 0 || mBaseHeight == 0) {
+                throw new XmlPullParserException(a.getPositionDescription()+
+                        "<size> tag requires width & height to be set");
+            }
+            a.recycle();
+        }
+
+        private static final int getStateForTrigger(int trigger) {
+            return TRIGGER_MAP[trigger];
+        }
+    }
+
+    private static class VAnimation {
+        private static final String SEPARATOR = ",";
+
+        private static final int DIRECTION_FORWARD = 0;
+        private static final int DIRECTION_IN_AND_OUT = 1;
+
+        public enum Style {
+            INTERPOLATE, CROSSFADE, WIPE
+        }
+
+        private final HashSet<String> mSeqMap = new HashSet<String>();
+
+        private Interpolator mAnimInterpolator = new AccelerateDecelerateInterpolator();
+        private VPath[] mPaths = new VPath[0];
+        private long[] mDuration = { DEFAULT_DURATION };
+
+        private int[] mThemeAttrs;
+        private Style mStyle;
+        private int mLimitProperty = 0;
+        private long mStartOffset;
+        private long mRepeat = 1;
+        private long mWipeDirection;
+        private int mMode = DIRECTION_FORWARD;
+        private int mInterpolatorType;
+        private String mId;
+
+        public VAnimation() {
+            // Empty constructor.
+        }
+
+        public void inflate(ArrayList<VGroup> groups, Resources r, AttributeSet attrs, Theme theme)
+                throws XmlPullParserException {
+            String value;
+            String[] sp;
+            int name;
+
+            final TypedArray a = r.obtainAttributes(attrs, R.styleable.VectorDrawableAnimation);
+            final int[] themeAttrs = a.extractThemeAttrs();
+            mThemeAttrs = themeAttrs;
+
+            value = a.getString(R.styleable.VectorDrawableAnimation_sequence);
+            if (value != null) {
+                sp = value.split(SEPARATOR);
+                final VectorDrawable.VPath[] paths = new VectorDrawable.VPath[sp.length];
+
+                for (int j = 0; j < sp.length; j++) {
+                    mSeqMap.add(sp[j].trim());
+
+                    final VectorDrawable.VPath path = groups.get(j).get(sp[j]);
+                    if (path == null) {
+                        throw new XmlPullParserException(a.getPositionDescription()
+                                + " missing path with name: " + sp[j]);
+                    }
+
+                    path.mAnimated = true;
+                    paths[j] = path;
+                }
+
+                setPaths(paths);
+            }
+
+            name = R.styleable.VectorDrawableAnimation_durations;
+            value = a.getString(name);
+            if (value != null) {
+                long totalDuration = 0;
+                sp = value.split(SEPARATOR);
+
+                final long[] dur = new long[sp.length];
+                for (int j = 0; j < dur.length; j++) {
+                    dur[j] = Long.parseLong(sp[j]);
+                    totalDuration +=  dur[j];
+                }
+
+                if (totalDuration == 0){
+                    throw new XmlPullParserException(a.getPositionDescription()
+                            + " total duration must not be zero");
+                }
+
+                setDuration(dur);
+            }
+
+            setLimitProperty(a.getInt(R.styleable.VectorDrawableAnimation_limitTo, 0));
+            setRepeat(a.getInt(R.styleable.VectorDrawableAnimation_repeatCount, 1));
+            setStartOffset(a.getInt(R.styleable.VectorDrawableAnimation_startDelay, 0));
+            setMode(a.getInt(R.styleable.VectorDrawableAnimation_repeatStyle, 0));
+
+            fixMissingParameters();
+
+            a.recycle();
+        }
+
+        public boolean canApplyTheme() {
+            return mThemeAttrs != null;
+        }
+
+        public void applyTheme(Theme t) {
+            // TODO: Apply theme.
+        }
+
+        public boolean doesAdjustPath(VPath path) {
+            return mSeqMap.contains(path.getID());
+        }
+
+        public String getId() {
+            if (mId == null) {
+                mId = mPaths[0].getID();
+                for (int i = 1; i < mPaths.length; i++) {
+                    mId += mPaths[i].getID();
+                }
+            }
+            return mId;
+        }
+
+        public String getPathName() {
+            return mPaths[0].getID();
+        }
+
+        public Style getStyle() {
+            return mStyle;
+        }
+
+        public void setStyle(Style style) {
+            mStyle = style;
+        }
+
+        public int getLimitProperty() {
+            return mLimitProperty;
+        }
+
+        public void setLimitProperty(int limitProperty) {
+            mLimitProperty = limitProperty;
+        }
+
+        public long[] getDuration() {
+            return mDuration;
+        }
+
+        public void setDuration(long[] duration) {
+            mDuration = duration;
+        }
+
+        public long getRepeat() {
+            return mRepeat;
+        }
+
+        public void setRepeat(long repeat) {
+            mRepeat = repeat;
+        }
+
+        public long getStartOffset() {
+            return mStartOffset;
+        }
+
+        public void setStartOffset(long startOffset) {
+            mStartOffset = startOffset;
+        }
+
+        public long getWipeDirection() {
+            return mWipeDirection;
+        }
+
+        public void setWipeDirection(long wipeDirection) {
+            mWipeDirection = wipeDirection;
+        }
+
+        public int getMode() {
+            return mMode;
+        }
+
+        public void setMode(int mode) {
+            mMode = mode;
+        }
+
+        public int getInterpolator() {
+            return mInterpolatorType;
+        }
+
+        public void setInterpolator(int interpolator) {
+            mInterpolatorType = interpolator;
+        }
+
+        /**
+         * compute the total time in milliseconds
+         *
+         * @return the total time in milliseconds the animation will take
+         */
+        public long getTotalDuration() {
+            long total = mStartOffset;
+            if (getRepeat() == -1) {
+                return -1;
+            }
+            for (int i = 0; i < mDuration.length; i++) {
+                if (mRepeat > 1) {
+                    total += mDuration[i] * mRepeat;
+                } else {
+                    total += mDuration[i];
+                }
+            }
+            return total;
+        }
+
+        public void setPaths(VPath[] paths) {
+            mPaths = paths;
+        }
+
+        public void addPath(VPath path) {
+            mPaths = Arrays.copyOf(mPaths, mPaths.length + 1);
+            mPaths[mPaths.length - 1] = path;
+        }
+
+        public boolean containsPath(String pathid) {
+            for (int i = 0; i < mPaths.length; i++) {
+                if (mPaths[i].getID().equals(pathid)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public void interpolate(VPath p1, VPath p2, float time, VPath dest) {
+            VPath.interpolate(time, p1, p2, dest, mLimitProperty);
+        }
+
+        public VPath getPathAtTime(long milliseconds, VPath dest) {
+            if (mPaths.length == 1) {
+                dest.copyFrom(mPaths[0]);
+                return dest;
+            }
+            long point = milliseconds - mStartOffset;
+            if (point < 0) {
+                point = 0;
+            }
+            float time = 0;
+            long sum = mDuration[0];
+            for (int i = 1; i < mDuration.length; i++) {
+                sum += mDuration[i];
+            }
+
+            if (mRepeat > 1) {
+                time = point / (float) (sum * mRepeat);
+                time = mAnimInterpolator.getInterpolation(time);
+
+                if (mMode == DIRECTION_IN_AND_OUT) {
+                    point = ((long) (time * sum * 2 * mRepeat)) % (sum * 2);
+                    if (point > sum) {
+                        point = sum * 2 - point;
+                    }
+                } else {
+                    point = ((long) (time * sum * mRepeat)) % sum;
+                }
+            } else if (mRepeat == 1) {
+                time = point / (float) (sum * mRepeat);
+                time = mAnimInterpolator.getInterpolation(time);
+                if (mMode == DIRECTION_IN_AND_OUT) {
+                    point = ((long) (time * sum * 2 * mRepeat));
+                    if (point > sum) {
+                        point = sum * 2 - point;
+                    }
+                } else {
+                    point = Math.min(((long) (time * sum * mRepeat)), sum);
+                }
+
+            } else { // repeat = -1
+                if (mMode == DIRECTION_IN_AND_OUT) {
+                    point = point % (sum * 2);
+                    if (point > sum) {
+                        point = sum * 2 - point;
+                    }
+                    time = point / (float) sum;
+                } else {
+                    point = point % sum;
+                    time = point / (float) sum;
+                }
+            }
+
+            int transition = 0;
+            while (point > mDuration[transition]) {
+                point -= mDuration[transition++];
+            }
+            if (mPaths.length > (transition + 1)) {
+                if (mPaths[transition].getID() != dest.getID()) {
+                    dest.copyFrom(mPaths[transition]);
+                }
+                interpolate(mPaths[transition], mPaths[transition + 1],
+                        point / (float) mDuration[transition], dest);
+            } else {
+                interpolate(mPaths[transition], mPaths[transition], 0, dest);
+            }
+            return dest;
+        }
+
+        void fixMissingParameters() {
+            // fix missing points
+            float rotation = Float.NaN;
+            float rotationY = Float.NaN;
+            float rotationX = Float.NaN;
+            for (int i = 0; i < mPaths.length; i++) {
+                if (mPaths[i].mPivotX > 0) {
+                    rotationX = mPaths[i].mPivotX;
+                }
+                if (mPaths[i].mPivotY > 0) {
+                    rotationY = mPaths[i].mPivotY;
+                }
+                if (mPaths[i].mRotate > 0) {
+                    rotation = mPaths[i].mRotate;
+                }
+            }
+            if (rotation > 0) {
+                for (int i = 0; i < mPaths.length; i++) {
+                    if (mPaths[i].mPivotX == 0) {
+                        mPaths[i].mPivotX = rotationX;
+                    }
+                    if (mPaths[i].mPivotY == 0) {
+                        mPaths[i].mPivotY = rotationY;
+                    }
+                }
+            }
+        }
+    }
+
+    private static class VGroup {
+        private final HashMap<String, VPath> mVGPathMap = new HashMap<String, VPath>();
+        private final ArrayList<VPath> mVGList = new ArrayList<VPath>();
+
+        public void add(VPath path) {
+            String id = path.getID();
+            mVGPathMap.put(id, path);
+            mVGList.add(path);
+         }
+
+        public VPath get(String name) {
+            return mVGPathMap.get(name);
+        }
+
+        /**
+         * Must return in order of adding
+         * @return ordered list of paths
+         */
+        public Collection<VPath> getPaths() {
+            return mVGList;
+        }
+
+        public int size() {
+            return mVGPathMap.size();
+        }
+    }
+
+    private static class VPath {
+        private static final int LIMIT_ALL = 0;
+        private static final int LIMIT_PATH = 1;
+        private static final int LIMIT_ROTATE = 2;
+        private static final int LIMIT_TRIM_PATH_START = 3;
+        private static final int LIMIT_TRIM_PATH_OFFSET = 5;
+        private static final int LIMIT_TRIM_PATH_END = 4;
+
+        private static final int STATE_UNDEFINED=0;
+        private static final int STATE_TRUE=1;
+        private static final int STATE_FALSE=2;
+
+        private static final int MAX_STATES = 10;
+
+        private int[] mThemeAttrs;
+
+        int mStrokeColor = 0;
+        float mStrokeWidth = 0;
+        float mStrokeOpacity = Float.NaN;
+
+        int mFillColor = 0;
+        int mFillRule;
+        float mFillOpacity = Float.NaN;
+
+        float mRotate = 0;
+        float mPivotX = 0;
+        float mPivotY = 0;
+
+        float mTrimPathStart = 0;
+        float mTrimPathEnd = 1;
+        float mTrimPathOffset = 0;
+
+        boolean mAnimated = false;
+        boolean mClip = false;
+        Paint.Cap mStrokeLineCap = Paint.Cap.BUTT;
+        Paint.Join mStrokeLineJoin = Paint.Join.MITER;
+        float mStrokeMiterlimit = 4;
+
+        private VNode[] mNode = null;
+        private String mId;
+        private int[] mCheckState = new int[MAX_STATES];
+        private boolean[] mCheckValue = new boolean[MAX_STATES];
+        private int mNumberOfStates = 0;
+        private int mNumberOfTrue = 0;
+
+        public VPath() {
+            // Empty constructor.
+        }
+
+        public VPath(VPath p) {
+            copyFrom(p);
+        }
+
+        public void addStateFilter(int state, boolean condition) {
+            int k = 0;
+            while (k < mNumberOfStates) {
+                if (mCheckState[mNumberOfStates] == state)
+                    break;
+                k++;
+            }
+            mCheckState[k] = state;
+            mCheckValue[k] = condition;
+            if (k==mNumberOfStates){
+                mNumberOfStates++;
+            }
+            if (condition) {
+                mNumberOfTrue++;
+            }
+        }
+
+        private int getState(int state){
+            for (int i = 0; i < mNumberOfStates; i++) {
+                if (mCheckState[mNumberOfStates] == state){
+                    return (mCheckValue[i])?STATE_TRUE:STATE_FALSE;
+                }
+            }
+            return STATE_UNDEFINED;
+        }
+        /**
+         * @return the name of the path
+         */
+        public String getName() {
+            return mId;
+        }
+
+        public void toPath(Path path) {
+            path.reset();
+            if (mNode != null) {
+                VNode.createPath(mNode, path);
+            }
+        }
+
+        public String getID() {
+            return mId;
+        }
+
+        private Paint.Cap getStrokeLineCap(int id, Paint.Cap defValue) {
+            switch (id) {
+                case LINECAP_BUTT:
+                    return Paint.Cap.BUTT;
+                case LINECAP_ROUND:
+                    return Paint.Cap.ROUND;
+                case LINECAP_SQUARE:
+                    return Paint.Cap.SQUARE;
+                default:
+                    return defValue;
+            }
+        }
+
+        private Paint.Join getStrokeLineJoin(int id, Paint.Join defValue) {
+            switch (id) {
+                case LINEJOIN_MITER:
+                    return Paint.Join.MITER;
+                case LINEJOIN_ROUND:
+                    return Paint.Join.ROUND;
+                case LINEJOIN_BEVEL:
+                    return Paint.Join.BEVEL;
+                default:
+                    return defValue;
+            }
+        }
+
+        public void inflate(Resources r, AttributeSet attrs, Theme theme) {
+            final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.VectorDrawablePath);
+            final int[] themeAttrs = a.extractThemeAttrs();
+            mThemeAttrs = themeAttrs;
+
+            // NOTE: The set of attributes loaded here MUST match the
+            // set of attributes loaded in applyTheme.
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_clipToPath] == 0) {
+                mClip = a.getBoolean(R.styleable.VectorDrawablePath_clipToPath, mClip);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_name] == 0) {
+                mId = a.getString(R.styleable.VectorDrawablePath_name);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_pathData] == 0) {
+                mNode = parsePath(a.getString(R.styleable.VectorDrawablePath_pathData));
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_fill] == 0) {
+                mFillColor = a.getColor(R.styleable.VectorDrawablePath_fill, mFillColor);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_fillOpacity] == 0) {
+                mFillOpacity = a.getFloat(R.styleable.VectorDrawablePath_fillOpacity, mFillOpacity);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_rotation] == 0) {
+                mRotate = a.getFloat(R.styleable.VectorDrawablePath_rotation, mRotate);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_pivotX] == 0) {
+                mPivotX = a.getFloat(R.styleable.VectorDrawablePath_pivotX, mPivotX);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_pivotY] == 0) {
+                mPivotY = a.getFloat(R.styleable.VectorDrawablePath_pivotY, mPivotY);
+            }
+
+            if (themeAttrs == null
+                    || themeAttrs[R.styleable.VectorDrawablePath_strokeLineCap] == 0) {
+                mStrokeLineCap = getStrokeLineCap(
+                        a.getInt(R.styleable.VectorDrawablePath_strokeLineCap, -1), mStrokeLineCap);
+            }
+
+            if (themeAttrs == null
+                    || themeAttrs[R.styleable.VectorDrawablePath_strokeLineJoin] == 0) {
+                mStrokeLineJoin = getStrokeLineJoin(
+                        a.getInt(R.styleable.VectorDrawablePath_strokeLineJoin, -1), mStrokeLineJoin);
+            }
+
+            if (themeAttrs == null
+                    || themeAttrs[R.styleable.VectorDrawablePath_strokeMiterLimit] == 0) {
+                mStrokeMiterlimit = a.getFloat(
+                        R.styleable.VectorDrawablePath_strokeMiterLimit, mStrokeMiterlimit);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_stroke] == 0) {
+                mStrokeColor = a.getColor(R.styleable.VectorDrawablePath_stroke, mStrokeColor);
+            }
+
+            if (themeAttrs == null
+                    || themeAttrs[R.styleable.VectorDrawablePath_strokeOpacity] == 0) {
+                mStrokeOpacity = a.getFloat(
+                        R.styleable.VectorDrawablePath_strokeOpacity, mStrokeOpacity);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_strokeWidth] == 0) {
+                mStrokeWidth = a.getFloat(R.styleable.VectorDrawablePath_strokeWidth, mStrokeWidth);
+            }
+
+            if (themeAttrs == null || themeAttrs[R.styleable.VectorDrawablePath_trimPathEnd] == 0) {
+                mTrimPathEnd = a.getFloat(R.styleable.VectorDrawablePath_trimPathEnd, mTrimPathEnd);
+            }
+
+            if (themeAttrs == null
+                    || themeAttrs[R.styleable.VectorDrawablePath_trimPathOffset] == 0) {
+                mTrimPathOffset = a.getFloat(
+                        R.styleable.VectorDrawablePath_trimPathOffset, mTrimPathOffset);
+            }
+
+            if (themeAttrs == null
+                    || themeAttrs[R.styleable.VectorDrawablePath_trimPathStart] == 0) {
+                mTrimPathStart = a.getFloat(
+                        R.styleable.VectorDrawablePath_trimPathStart, mTrimPathStart);
+            }
+
+            // TODO: Consider replacing this with existing state attributes.
+            final int[] states = {
+                    R.styleable.VectorDrawablePath_state_activated,
+                    R.styleable.VectorDrawablePath_state_checkable,
+                    R.styleable.VectorDrawablePath_state_checked,
+                    R.styleable.VectorDrawablePath_state_enabled,
+                    R.styleable.VectorDrawablePath_state_focused,
+                    R.styleable.VectorDrawablePath_state_hovered,
+                    R.styleable.VectorDrawablePath_state_pressed,
+                    R.styleable.VectorDrawablePath_state_selected,
+                    R.styleable.VectorDrawablePath_state_window_focused
+            };
+
+            final int N = states.length;
+            for (int i = 0; i < N; i++) {
+                final int state = states[i];
+                if (a.hasValue(state)) {
+                    addStateFilter(state, a.getBoolean(state, false));
+                }
+            }
+
+            updateColorAlphas();
+
+            a.recycle();
+        }
+
+        public boolean canApplyTheme() {
+            return mThemeAttrs != null;
+        }
+
+        public void applyTheme(Theme t) {
+            if (mThemeAttrs == null) {
+                return;
+            }
+
+            final TypedArray a = t.resolveAttributes(
+                    mThemeAttrs, R.styleable.VectorDrawablePath, 0, 0);
+
+            mClip = a.getBoolean(R.styleable.VectorDrawablePath_clipToPath, mClip);
+
+            if (a.hasValue(R.styleable.VectorDrawablePath_name)) {
+                mId = a.getString(R.styleable.VectorDrawablePath_name);
+            }
+
+            if (a.hasValue(R.styleable.VectorDrawablePath_pathData)) {
+                mNode = parsePath(a.getString(R.styleable.VectorDrawablePath_pathData));
+            }
+
+            mFillColor = a.getColor(R.styleable.VectorDrawablePath_fill, mFillColor);
+            mFillOpacity = a.getFloat(R.styleable.VectorDrawablePath_fillOpacity, mFillOpacity);
+
+            mRotate = a.getFloat(R.styleable.VectorDrawablePath_rotation, mRotate);
+            mPivotX = a.getFloat(R.styleable.VectorDrawablePath_pivotX, mPivotX);
+            mPivotY = a.getFloat(R.styleable.VectorDrawablePath_pivotY, mPivotY);
+
+            mStrokeLineCap = getStrokeLineCap(a.getInt(
+                    R.styleable.VectorDrawablePath_strokeLineCap, -1), mStrokeLineCap);
+            mStrokeLineJoin = getStrokeLineJoin(a.getInt(
+                    R.styleable.VectorDrawablePath_strokeLineJoin, -1), mStrokeLineJoin);
+            mStrokeMiterlimit = a.getFloat(
+                    R.styleable.VectorDrawablePath_strokeMiterLimit, mStrokeMiterlimit);
+            mStrokeColor = a.getColor(R.styleable.VectorDrawablePath_stroke, mStrokeColor);
+            mStrokeOpacity = a.getFloat(
+                    R.styleable.VectorDrawablePath_strokeOpacity, mStrokeOpacity);
+            mStrokeWidth = a.getFloat(R.styleable.VectorDrawablePath_strokeWidth, mStrokeWidth);
+
+            mTrimPathEnd = a.getFloat(R.styleable.VectorDrawablePath_trimPathEnd, mTrimPathEnd);
+            mTrimPathOffset = a.getFloat(
+                    R.styleable.VectorDrawablePath_trimPathOffset, mTrimPathOffset);
+            mTrimPathStart = a.getFloat(
+                    R.styleable.VectorDrawablePath_trimPathStart, mTrimPathStart);
+
+            updateColorAlphas();
+        }
+
+        private void updateColorAlphas() {
+            if (!Float.isNaN(mFillOpacity)) {
+                mFillColor &= 0x00FFFFFF;
+                mFillColor |= ((int) (0xFF * mFillOpacity)) << 24;
+            }
+
+            if (!Float.isNaN(mStrokeOpacity)) {
+                mStrokeColor &= 0x00FFFFFF;
+                mStrokeColor |= ((int) (0xFF * mStrokeOpacity)) << 24;
+            }
+        }
+
+        private static int nextStart(String s, int end) {
+            char c;
+
+            while (end < s.length()) {
+                c = s.charAt(end);
+                if (((c - 'A') * (c - 'Z') <= 0) || (((c - 'a') * (c - 'z') <= 0))) {
+                    return end;
+                }
+                end++;
+            }
+            return end;
+        }
+
+        private void addNode(ArrayList<VectorDrawable.VNode> list, char cmd, float[] val) {
+            list.add(new VectorDrawable.VNode(cmd, val));
+        }
+
+        /**
+         * parse the floats in the string
+         * this is an optimized version of
+         * parseFloat(s.split(",|\\s"));
+         *
+         * @param s the string containing a command and list of floats
+         * @return array of floats
+         */
+        private static float[] getFloats(String s) {
+            if (s.charAt(0) == 'z' | s.charAt(0) == 'Z') {
+                return new float[0];
+            }
+            try {
+                float[] tmp = new float[s.length()];
+                int count = 0;
+                int pos = 1, end;
+                while ((end = extract(s, pos)) >= 0) {
+                    if (pos < end) {
+                        tmp[count++] = Float.parseFloat(s.substring(pos, end));
+                    }
+                    pos = end + 1;
+                }
+                // handle the final float if there is one
+                if (pos < s.length()) {
+                    tmp[count++] = Float.parseFloat(s.substring(pos, s.length()));
+                }
+                return Arrays.copyOf(tmp, count);
+            } catch (NumberFormatException e){
+                Log.e(LOGTAG,"error in parsing \""+s+"\"");
+                throw e;
+            }
+        }
+
+        /**
+         * calculate the position of the next comma or space
+         * @param s the string to search
+         * @param start the position to start searching
+         * @return the position of the next comma or space or -1 if none found
+         */
+        private static int extract(String s, int start) {
+            int space = s.indexOf(' ', start);
+            int comma = s.indexOf(',', start);
+            if (space == -1) {
+                return comma;
+            }
+            if (comma == -1) {
+                return space;
+            }
+            return (comma > space) ? space : comma;
+        }
+
+        private VectorDrawable.VNode[] parsePath(String value) {
+            int start = 0;
+            int end = 1;
+
+            ArrayList<VectorDrawable.VNode> list = new ArrayList<VectorDrawable.VNode>();
+            while (end < value.length()) {
+                end = nextStart(value, end);
+                String s = value.substring(start, end);
+                float[] val = getFloats(s);
+                addNode(list, s.charAt(0), val);
+
+                start = end;
+                end++;
+            }
+            if ((end - start) == 1 && start < value.length()) {
+
+                addNode(list, value.charAt(start), new float[0]);
+            }
+            return list.toArray(new VectorDrawable.VNode[list.size()]);
+        }
+
+        public void copyFrom(VPath p1) {
+            mNode = new VNode[p1.mNode.length];
+            for (int i = 0; i < mNode.length; i++) {
+                mNode[i] = new VNode(p1.mNode[i]);
+            }
+            mId = p1.mId;
+            mStrokeColor = p1.mStrokeColor;
+            mFillColor = p1.mFillColor;
+            mStrokeWidth = p1.mStrokeWidth;
+            mRotate = p1.mRotate;
+            mPivotX = p1.mPivotX;
+            mPivotY = p1.mPivotY;
+            mAnimated = p1.mAnimated;
+            mTrimPathStart = p1.mTrimPathStart;
+            mTrimPathEnd = p1.mTrimPathEnd;
+            mTrimPathOffset = p1.mTrimPathOffset;
+            mStrokeLineCap = p1.mStrokeLineCap;
+            mStrokeLineJoin = p1.mStrokeLineJoin;
+            mStrokeMiterlimit = p1.mStrokeMiterlimit;
+            mNumberOfStates = p1.mNumberOfStates;
+            for (int i = 0; i < mNumberOfStates; i++) {
+                mCheckState[i] = p1.mCheckState[i];
+                mCheckValue[i] = p1.mCheckValue[i];
+            }
+
+            mFillRule = p1.mFillRule;
+        }
+
+        public static VPath interpolate(float t, VPath p1, VPath p2, VPath returnPath, int limit) {
+            if (limit == LIMIT_ALL || limit == LIMIT_PATH) {
+                if (returnPath.mNode == null || returnPath.mNode.length != p1.mNode.length) {
+                    returnPath.mNode = new VNode[p1.mNode.length];
+                }
+                for (int i = 0; i < returnPath.mNode.length; i++) {
+                    if (returnPath.mNode[i] == null) {
+                        returnPath.mNode[i] = new VNode(p1.mNode[i], p2.mNode[i], t);
+                    } else {
+                        returnPath.mNode[i].interpolate(p1.mNode[i], p2.mNode[i], t);
+                    }
+                }
+            }
+            float t1 = 1 - t;
+            switch (limit) {
+                case LIMIT_ALL:
+                    returnPath.mRotate = t1 * p1.mRotate + t * p2.mRotate;
+                    returnPath.mPivotX = t1 * p1.mPivotX + t * p2.mPivotX;
+                    returnPath.mPivotY = t1 * p1.mPivotY + t * p2.mPivotY;
+                    returnPath.mClip = p1.mClip | p2.mClip;
+
+                    returnPath.mTrimPathStart = t1 * p1.mTrimPathStart + t * p2.mTrimPathStart;
+                    returnPath.mTrimPathEnd = t1 * p1.mTrimPathEnd + t * p2.mTrimPathEnd;
+                    returnPath.mTrimPathOffset = t1 * p1.mTrimPathOffset + t * p2.mTrimPathOffset;
+                    returnPath.mStrokeMiterlimit =
+                            t1 * p1.mStrokeMiterlimit + t * p2.mStrokeMiterlimit;
+                    returnPath.mStrokeLineCap = p1.mStrokeLineCap;
+                    if (returnPath.mStrokeLineCap == null) {
+                        returnPath.mStrokeLineCap = p2.mStrokeLineCap;
+                    }
+                    returnPath.mStrokeLineJoin = p1.mStrokeLineJoin;
+                    if (returnPath.mStrokeLineJoin == null) {
+                        returnPath.mStrokeLineJoin = p2.mStrokeLineJoin;
+                    }
+                    returnPath.mFillRule = p1.mFillRule;
+
+                    returnPath.mStrokeColor = rgbInterpolate(t, p1.mStrokeColor, p2.mStrokeColor);
+                    returnPath.mFillColor = rgbInterpolate(t, p1.mFillColor, p2.mFillColor);
+                    returnPath.mStrokeWidth = t1 * p1.mStrokeWidth + t * p2.mStrokeWidth;
+                    returnPath.mNumberOfStates = p1.mNumberOfStates;
+                    for (int i = 0; i < returnPath.mNumberOfStates; i++) {
+                        returnPath.mCheckState[i] = p1.mCheckState[i];
+                        returnPath.mCheckValue[i] = p1.mCheckValue[i];
+                    }
+                    for (int i = 0; i < p2.mNumberOfStates; i++) {
+                        returnPath.addStateFilter(p2.mCheckState[i], p2.mCheckValue[i]);
+                    }
+
+                    int count = 0;
+                    for (int i = 0; i < returnPath.mNumberOfStates; i++) {
+                        if (returnPath.mCheckValue[i]) {
+                            count++;
+                        }
+                    }
+                    returnPath.mNumberOfTrue = count;
+                    break;
+                case LIMIT_ROTATE:
+                    returnPath.mRotate = t1 * p1.mRotate + t * p2.mRotate;
+                    break;
+                case LIMIT_TRIM_PATH_END:
+                    returnPath.mTrimPathEnd = t1 * p1.mTrimPathEnd + t * p2.mTrimPathEnd;
+                    break;
+                case LIMIT_TRIM_PATH_OFFSET:
+                    returnPath.mTrimPathOffset = t1 * p1.mTrimPathOffset + t * p2.mTrimPathOffset;
+                    break;
+                case LIMIT_TRIM_PATH_START:
+                    returnPath.mTrimPathStart = t1 * p1.mTrimPathStart + t * p2.mTrimPathStart;
+                    break;
+            }
+            return returnPath;
+        }
+
+        private static int rgbInterpolate(float fraction, int startColor, int endColor) {
+            if (startColor == endColor) {
+                return startColor;
+            } else if (startColor == 0) {
+                return endColor;
+            } else if (endColor == 0) {
+                return startColor;
+            }
+
+            final int startA = (startColor >> 24) & 0xff;
+            final int startR = (startColor >> 16) & 0xff;
+            final int startG = (startColor >> 8) & 0xff;
+            final int startB = startColor & 0xff;
+
+            final int endA = (endColor >> 24) & 0xff;
+            final int endR = (endColor >> 16) & 0xff;
+            final int endG = (endColor >> 8) & 0xff;
+            final int endB = endColor & 0xff;
+
+            return ((startA + (int)(fraction * (endA - startA))) << 24) |
+                    ((startR + (int)(fraction * (endR - startR))) << 16) |
+                    ((startG + (int)(fraction * (endG - startG))) << 8) |
+                    ((startB + (int)(fraction * (endB - startB))));
+        }
+
+        public boolean isVisible(int[] state) {
+            int match = 0;
+            for (int i = 0; i < state.length; i++) {
+                int v = getState(state[i]);
+                if (v != STATE_UNDEFINED) {
+                    if (v==STATE_TRUE) {
+                        match++;
+                    } else {
+                        return false;
+                    }
+                }
+            }
+            return match == mNumberOfTrue;
+        }
+    }
+
+    private static class VNode {
+        private char mType;
+        private float[] mParams;
+
+        public VNode(char type, float[] params) {
+            mType = type;
+            mParams = params;
+        }
+
+        public VNode(VNode n) {
+            mType = n.mType;
+            mParams = Arrays.copyOf(n.mParams, n.mParams.length);
+        }
+
+        public VNode(VNode n1, VNode n2, float t) {
+            mType = n1.mType;
+            mParams = new float[n1.mParams.length];
+            interpolate(n1, n2, t);
+        }
+
+        private boolean match(VNode n) {
+            if (n.mType != mType) {
+                return false;
+            }
+            return (mParams.length == n.mParams.length);
+        }
+
+        public void interpolate(VNode n1, VNode n2, float t) {
+            for (int i = 0; i < n1.mParams.length; i++) {
+                mParams[i] = n1.mParams[i] * (1 - t) + n2.mParams[i] * t;
+            }
+        }
+
+        public static void createPath(VNode[] node, Path path) {
+            float[] current = new float[4];
+            char previousCommand = 'm';
+            for (int i = 0; i < node.length; i++) {
+                addCommand(path, current, previousCommand, node[i].mType, node[i].mParams);
+                previousCommand = node[i].mType;
+            }
+        }
+
+        private static void addCommand(Path path, float[] current,
+                char previousCmd, char cmd, float[] val) {
+
+            int incr = 2;
+            float currentX = current[0];
+            float currentY = current[1];
+            float ctrlPointX = current[2];
+            float ctrlPointY = current[3];
+            float reflectiveCtrlPointX;
+            float reflectiveCtrlPointY;
+
+            switch (cmd) {
+                case 'z':
+                case 'Z':
+                    path.close();
+                    return;
+                case 'm':
+                case 'M':
+                case 'l':
+                case 'L':
+                case 't':
+                case 'T':
+                    incr = 2;
+                    break;
+                case 'h':
+                case 'H':
+                case 'v':
+                case 'V':
+                    incr = 1;
+                    break;
+                case 'c':
+                case 'C':
+                    incr = 6;
+                    break;
+                case 's':
+                case 'S':
+                case 'q':
+                case 'Q':
+                    incr = 4;
+                    break;
+                case 'a':
+                case 'A':
+                    incr = 7;
+                    break;
+            }
+            for (int k = 0; k < val.length; k += incr) {
+                // TODO: build test to prove all permutations work
+                switch (cmd) {
+                    case 'm': // moveto - Start a new sub-path (relative)
+                        path.rMoveTo(val[k + 0], val[k + 1]);
+                        currentX += val[k + 0];
+                        currentY += val[k + 1];
+                        break;
+                    case 'M': // moveto - Start a new sub-path
+                        path.moveTo(val[k + 0], val[k + 1]);
+                        currentX = val[k + 0];
+                        currentY = val[k + 1];
+                        break;
+                    case 'l': // lineto - Draw a line from the current point (relative)
+                        path.rLineTo(val[k + 0], val[k + 1]);
+                        currentX += val[k + 0];
+                        currentY += val[k + 1];
+                        break;
+                    case 'L': // lineto - Draw a line from the current point
+                        path.lineTo(val[k + 0], val[k + 1]);
+                        currentX = val[k + 0];
+                        currentY = val[k + 1];
+                        break;
+                    case 'z': // closepath - Close the current subpath
+                    case 'Z': // closepath - Close the current subpath
+                        path.close();
+                        break;
+                    case 'h': // horizontal lineto - Draws a horizontal line (relative)
+                        path.rLineTo(val[k + 0], 0);
+                        currentX += val[k + 0];
+                        break;
+                    case 'H': // horizontal lineto - Draws a horizontal line
+                        path.lineTo(val[k + 0], currentY);
+                        currentX = val[k + 0];
+                        break;
+                    case 'v': // vertical lineto - Draws a vertical line from the current point (r)
+                        path.rLineTo(0, val[k + 0]);
+                        currentY += val[k + 0];
+                        break;
+                    case 'V': // vertical lineto - Draws a vertical line from the current point
+                        path.lineTo(currentX, val[k + 0]);
+                        currentY = val[k + 0];
+                        break;
+                    case 'c': // curveto - Draws a cubic Bézier curve (relative)
+                        path.rCubicTo(val[k + 0], val[k + 1], val[k + 2], val[k + 3],
+                                val[k + 4], val[k + 5]);
+
+                        ctrlPointX = currentX + val[k + 2];
+                        ctrlPointY = currentY + val[k + 3];
+                        currentX += val[k + 4];
+                        currentY += val[k + 5];
+
+                        break;
+                    case 'C': // curveto - Draws a cubic Bézier curve
+                        path.cubicTo(val[k + 0], val[k + 1], val[k + 2], val[k + 3],
+                                val[k + 4], val[k + 5]);
+                        currentX = val[k + 4];
+                        currentY = val[k + 5];
+                        ctrlPointX = val[k + 2];
+                        ctrlPointY = val[k + 3];
+                        break;
+                    case 's': // smooth curveto - Draws a cubic Bézier curve (reflective cp)
+                        reflectiveCtrlPointX = 0;
+                        reflectiveCtrlPointY = 0;
+                        if (previousCmd == 'c' || previousCmd == 's'
+                                || previousCmd == 'C' || previousCmd == 'S') {
+                            reflectiveCtrlPointX = currentX - ctrlPointX;
+                            reflectiveCtrlPointY = currentY - ctrlPointY;
+                        }
+                        path.rCubicTo(reflectiveCtrlPointX, reflectiveCtrlPointY,
+                                val[k + 0], val[k + 1],
+                                val[k + 2], val[k + 3]);
+
+                        ctrlPointX = currentX + val[k + 0];
+                        ctrlPointY = currentY + val[k + 1];
+                        currentX += val[k + 2];
+                        currentY += val[k + 3];
+                        break;
+                    case 'S': // shorthand/smooth curveto Draws a cubic Bézier curve(reflective cp)
+                        reflectiveCtrlPointX = currentX;
+                        reflectiveCtrlPointY = currentY;
+                        if (previousCmd == 'c' || previousCmd == 's'
+                                || previousCmd == 'C' || previousCmd == 'S') {
+                            reflectiveCtrlPointX = 2 * currentX - ctrlPointX;
+                            reflectiveCtrlPointY = 2 * currentY - ctrlPointY;
+                        }
+                        path.cubicTo(reflectiveCtrlPointX, reflectiveCtrlPointY,
+                                val[k + 0], val[k + 1], val[k + 2], val[k + 3]);
+                        ctrlPointX = val[k + 0];
+                        ctrlPointY = val[k + 1];
+                        currentX = val[k + 2];
+                        currentY = val[k + 3];
+                        break;
+                    case 'q': // Draws a quadratic Bézier (relative)
+                        path.rQuadTo(val[k + 0], val[k + 1], val[k + 2], val[k + 3]);
+                        ctrlPointX = currentX + val[k + 0];
+                        ctrlPointY = currentY + val[k + 1];
+                        currentX += val[k + 2];
+                        currentY += val[k + 3];
+                        break;
+                    case 'Q': // Draws a quadratic Bézier
+                        path.quadTo(val[k + 0], val[k + 1], val[k + 2], val[k + 3]);
+                        ctrlPointX = val[k + 0];
+                        ctrlPointY = val[k + 1];
+                        currentX = val[k + 2];
+                        currentY = val[k + 3];
+                        break;
+                    case 't': // Draws a quadratic Bézier curve(reflective control point)(relative)
+                        reflectiveCtrlPointX = 0;
+                        reflectiveCtrlPointY = 0;
+                        if (previousCmd == 'q' || previousCmd == 't'
+                                || previousCmd == 'Q' || previousCmd == 'T') {
+                            reflectiveCtrlPointX = currentX - ctrlPointX;
+                            reflectiveCtrlPointY = currentY - ctrlPointY;
+                        }
+                        path.rQuadTo(reflectiveCtrlPointX, reflectiveCtrlPointY,
+                                val[k + 0], val[k + 1]);
+                        ctrlPointX = currentX + reflectiveCtrlPointX;
+                        ctrlPointY = currentY + reflectiveCtrlPointY;
+                        currentX += val[k + 0];
+                        currentY += val[k + 1];
+                        break;
+                    case 'T': // Draws a quadratic Bézier curve (reflective control point)
+                        reflectiveCtrlPointX = currentX;
+                        reflectiveCtrlPointY = currentY;
+                        if (previousCmd == 'q' || previousCmd == 't'
+                                || previousCmd == 'Q' || previousCmd == 'T') {
+                            reflectiveCtrlPointX = 2 * currentX - ctrlPointX;
+                            reflectiveCtrlPointY = 2 * currentY - ctrlPointY;
+                        }
+                        path.quadTo(reflectiveCtrlPointX, reflectiveCtrlPointY,
+                                val[k + 0], val[k + 1]);
+                        ctrlPointX = reflectiveCtrlPointX;
+                        ctrlPointY = reflectiveCtrlPointY;
+                        currentX = val[k + 0];
+                        currentY = val[k + 1];
+                        break;
+                    case 'a': // Draws an elliptical arc
+                        // (rx ry x-axis-rotation large-arc-flag sweep-flag x y)
+                        drawArc(path,
+                                currentX,
+                                currentY,
+                                val[k + 5] + currentX,
+                                val[k + 6] + currentY,
+                                val[k + 0],
+                                val[k + 1],
+                                val[k + 2],
+                                val[k + 3] != 0,
+                                val[k + 4] != 0);
+                        currentX += val[k + 5];
+                        currentY += val[k + 6];
+                        ctrlPointX = currentX;
+                        ctrlPointY = currentY;
+                        break;
+                    case 'A': // Draws an elliptical arc
+                        drawArc(path,
+                                currentX,
+                                currentY,
+                                val[k + 5],
+                                val[k + 6],
+                                val[k + 0],
+                                val[k + 1],
+                                val[k + 2],
+                                val[k + 3] != 0,
+                                val[k + 4] != 0);
+                        currentX = val[k + 5];
+                        currentY = val[k + 6];
+                        ctrlPointX = currentX;
+                        ctrlPointY = currentY;
+                        break;
+                }
+                previousCmd = cmd;
+            }
+            current[0] = currentX;
+            current[1] = currentY;
+            current[2] = ctrlPointX;
+            current[3] = ctrlPointY;
+        }
+
+        private static void drawArc(Path p,
+                float x0,
+                float y0,
+                float x1,
+                float y1,
+                float a,
+                float b,
+                float theta,
+                boolean isMoreThanHalf,
+                boolean isPositiveArc) {
+
+            /* Convert rotation angle from degrees to radians */
+            double thetaD = Math.toRadians(theta);
+            /* Pre-compute rotation matrix entries */
+            double cosTheta = Math.cos(thetaD);
+            double sinTheta = Math.sin(thetaD);
+            /* Transform (x0, y0) and (x1, y1) into unit space */
+            /* using (inverse) rotation, followed by (inverse) scale */
+            double x0p = (x0 * cosTheta + y0 * sinTheta) / a;
+            double y0p = (-x0 * sinTheta + y0 * cosTheta) / b;
+            double x1p = (x1 * cosTheta + y1 * sinTheta) / a;
+            double y1p = (-x1 * sinTheta + y1 * cosTheta) / b;
+
+            /* Compute differences and averages */
+            double dx = x0p - x1p;
+            double dy = y0p - y1p;
+            double xm = (x0p + x1p) / 2;
+            double ym = (y0p + y1p) / 2;
+            /* Solve for intersecting unit circles */
+            double dsq = dx * dx + dy * dy;
+            if (dsq == 0.0) {
+                Log.w(LOGTAG, " Points are coincident");
+                return; /* Points are coincident */
+            }
+            double disc = 1.0 / dsq - 1.0 / 4.0;
+            if (disc < 0.0) {
+                Log.w(LOGTAG, "Points are too far apart " + dsq);
+                float adjust = (float) (Math.sqrt(dsq) / 1.99999);
+                drawArc(p, x0, y0, x1, y1, a * adjust,
+                        b * adjust, theta, isMoreThanHalf, isPositiveArc);
+                return; /* Points are too far apart */
+            }
+            double s = Math.sqrt(disc);
+            double sdx = s * dx;
+            double sdy = s * dy;
+            double cx;
+            double cy;
+            if (isMoreThanHalf == isPositiveArc) {
+                cx = xm - sdy;
+                cy = ym + sdx;
+            } else {
+                cx = xm + sdy;
+                cy = ym - sdx;
+            }
+
+            double eta0 = Math.atan2((y0p - cy), (x0p - cx));
+
+            double eta1 = Math.atan2((y1p - cy), (x1p - cx));
+
+            double sweep = (eta1 - eta0);
+            if (isPositiveArc != (sweep >= 0)) {
+                if (sweep > 0) {
+                    sweep -= 2 * Math.PI;
+                } else {
+                    sweep += 2 * Math.PI;
+                }
+            }
+
+            cx *= a;
+            cy *= b;
+            double tcx = cx;
+            cx = cx * cosTheta - cy * sinTheta;
+            cy = tcx * sinTheta + cy * cosTheta;
+
+            arcToBezier(p, cx, cy, a, b, x0, y0, thetaD, eta0, sweep);
+        }
+
+        /**
+         * Converts an arc to cubic Bezier segments and records them in p.
+         *
+         * @param p The target for the cubic Bezier segments
+         * @param cx The x coordinate center of the ellipse
+         * @param cy The y coordinate center of the ellipse
+         * @param a The radius of the ellipse in the horizontal direction
+         * @param b The radius of the ellipse in the vertical direction
+         * @param e1x E(eta1) x coordinate of the starting point of the arc
+         * @param e1y E(eta2) y coordinate of the starting point of the arc
+         * @param theta The angle that the ellipse bounding rectangle makes with horizontal plane
+         * @param start The start angle of the arc on the ellipse
+         * @param sweep The angle (positive or negative) of the sweep of the arc on the ellipse
+         */
+        private static void arcToBezier(Path p,
+                double cx,
+                double cy,
+                double a,
+                double b,
+                double e1x,
+                double e1y,
+                double theta,
+                double start,
+                double sweep) {
+            // Taken from equations at: http://spaceroots.org/documents/ellipse/node8.html
+            // and http://www.spaceroots.org/documents/ellipse/node22.html
+
+            // Maximum of 45 degrees per cubic Bezier segment
+            int numSegments = Math.abs((int) Math.ceil(sweep * 4 / Math.PI));
+
+            double eta1 = start;
+            double cosTheta = Math.cos(theta);
+            double sinTheta = Math.sin(theta);
+            double cosEta1 = Math.cos(eta1);
+            double sinEta1 = Math.sin(eta1);
+            double ep1x = (-a * cosTheta * sinEta1) - (b * sinTheta * cosEta1);
+            double ep1y = (-a * sinTheta * sinEta1) + (b * cosTheta * cosEta1);
+
+            double anglePerSegment = sweep / numSegments;
+            for (int i = 0; i < numSegments; i++) {
+                double eta2 = eta1 + anglePerSegment;
+                double sinEta2 = Math.sin(eta2);
+                double cosEta2 = Math.cos(eta2);
+                double e2x = cx + (a * cosTheta * cosEta2) - (b * sinTheta * sinEta2);
+                double e2y = cy + (a * sinTheta * cosEta2) + (b * cosTheta * sinEta2);
+                double ep2x = -a * cosTheta * sinEta2 - b * sinTheta * cosEta2;
+                double ep2y = -a * sinTheta * sinEta2 + b * cosTheta * cosEta2;
+                double tanDiff2 = Math.tan((eta2 - eta1) / 2);
+                double alpha =
+                        Math.sin(eta2 - eta1) * (Math.sqrt(4 + (3 * tanDiff2 * tanDiff2)) - 1) / 3;
+                double q1x = e1x + alpha * ep1x;
+                double q1y = e1y + alpha * ep1y;
+                double q2x = e2x - alpha * ep2x;
+                double q2y = e2y - alpha * ep2y;
+
+                p.cubicTo((float) q1x,
+                        (float) q1y,
+                        (float) q2x,
+                        (float) q2y,
+                        (float) e2x,
+                        (float) e2y);
+                eta1 = eta2;
+                e1x = e2x;
+                e1y = e2y;
+                ep1x = ep2x;
+                ep1y = ep2y;
+            }
+        }
+
+    }
+}
diff --git a/graphics/java/android/graphics/drawable/shapes/ArcShape.java b/graphics/java/android/graphics/drawable/shapes/ArcShape.java
index b90e853..84731b0 100644
--- a/graphics/java/android/graphics/drawable/shapes/ArcShape.java
+++ b/graphics/java/android/graphics/drawable/shapes/ArcShape.java
@@ -18,7 +18,6 @@
 
 import android.graphics.Canvas;
 import android.graphics.Paint;
-import android.graphics.RectF;
 
 /**
  * Creates an arc shape. The arc shape starts at a specified
diff --git a/graphics/java/android/graphics/drawable/shapes/OvalShape.java b/graphics/java/android/graphics/drawable/shapes/OvalShape.java
index c914999..198dcc1 100644
--- a/graphics/java/android/graphics/drawable/shapes/OvalShape.java
+++ b/graphics/java/android/graphics/drawable/shapes/OvalShape.java
@@ -17,7 +17,9 @@
 package android.graphics.drawable.shapes;
 
 import android.graphics.Canvas;
+import android.graphics.Outline;
 import android.graphics.Paint;
+import android.graphics.RectF;
 
 /**
  * Defines an oval shape. 
@@ -36,5 +38,13 @@
     public void draw(Canvas canvas, Paint paint) {
         canvas.drawOval(rect(), paint);
     }
+
+    @Override
+    public boolean getOutline(Outline outline) {
+        final RectF rect = rect();
+        outline.setOval((int) Math.ceil(rect.left), (int) Math.ceil(rect.top),
+                (int) Math.floor(rect.right), (int) Math.floor(rect.bottom));
+        return true;
+    }
 }
 
diff --git a/graphics/java/android/graphics/drawable/shapes/RectShape.java b/graphics/java/android/graphics/drawable/shapes/RectShape.java
index a3d2654..2a0256c 100644
--- a/graphics/java/android/graphics/drawable/shapes/RectShape.java
+++ b/graphics/java/android/graphics/drawable/shapes/RectShape.java
@@ -17,6 +17,7 @@
 package android.graphics.drawable.shapes;
 
 import android.graphics.Canvas;
+import android.graphics.Outline;
 import android.graphics.Paint;
 import android.graphics.RectF;
 
@@ -40,10 +41,18 @@
     }
 
     @Override
+    public boolean getOutline(Outline outline) {
+        final RectF rect = rect();
+        outline.setRect((int) Math.ceil(rect.left), (int) Math.ceil(rect.top),
+                (int) Math.floor(rect.right), (int) Math.floor(rect.bottom));
+        return true;
+    }
+
+    @Override
     protected void onResize(float width, float height) {
         mRect.set(0, 0, width, height);
     }
-    
+
     /**
      * Returns the RectF that defines this rectangle's bounds.
      */
diff --git a/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java b/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java
index b469d2a..a6bb1bb 100644
--- a/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java
+++ b/graphics/java/android/graphics/drawable/shapes/RoundRectShape.java
@@ -17,6 +17,7 @@
 package android.graphics.drawable.shapes;
 
 import android.graphics.Canvas;
+import android.graphics.Outline;
 import android.graphics.Paint;
 import android.graphics.Path;
 import android.graphics.RectF;
@@ -77,11 +78,34 @@
     public void draw(Canvas canvas, Paint paint) {
         canvas.drawPath(mPath, paint);
     }
-    
+
+    @Override
+    public boolean getOutline(Outline outline) {
+        if (mInnerRect != null) return false; // have a hole, can't produce valid outline
+
+        float radius = 0;
+        if (mOuterRadii != null) {
+            radius = mOuterRadii[0];
+            for (int i = 1; i < 8; i++) {
+                if (mOuterRadii[i] != radius) {
+                    // can't call simple constructors, use path
+                    outline.setConvexPath(mPath);
+                    return true;
+                }
+            }
+        }
+
+        final RectF rect = rect();
+        outline.setRoundRect((int) Math.ceil(rect.left), (int) Math.ceil(rect.top),
+                (int) Math.floor(rect.right), (int) Math.floor(rect.bottom),
+                radius);
+        return true;
+    }
+
     @Override
     protected void onResize(float w, float h) {
         super.onResize(w, h);
-        
+
         RectF r = rect();
         mPath.reset();
 
diff --git a/graphics/java/android/graphics/drawable/shapes/Shape.java b/graphics/java/android/graphics/drawable/shapes/Shape.java
index 4e192f95..1a20e8b 100644
--- a/graphics/java/android/graphics/drawable/shapes/Shape.java
+++ b/graphics/java/android/graphics/drawable/shapes/Shape.java
@@ -17,6 +17,7 @@
 package android.graphics.drawable.shapes;
 
 import android.graphics.Canvas;
+import android.graphics.Outline;
 import android.graphics.Paint;
 
 /**
@@ -43,7 +44,6 @@
         return mHeight;
     }
 
-
     /**
      * Draw this shape into the provided Canvas, with the provided Paint.
      * Before calling this, you must call {@link #resize(float,float)}.
@@ -52,7 +52,6 @@
      * @param paint  the Paint object that defines this shape's characteristics
      */
     public abstract void draw(Canvas canvas, Paint paint);
-    
 
     /**
      * Resizes the dimensions of this shape.
@@ -93,8 +92,20 @@
      */
     protected void onResize(float width, float height) {}
 
+    /**
+     * Compute the Outline of the shape.
+     *
+     * The default implementation does not supply an outline.
+     *
+     * @return True if a valid outline has been computed, false otherwise.
+     */
+    public boolean getOutline(Outline outline) {
+        return false;
+    }
+
     @Override
     public Shape clone() throws CloneNotSupportedException {
         return (Shape) super.clone();
     }
+
 }
diff --git a/graphics/java/android/renderscript/ScriptIntrinsicResize.java b/graphics/java/android/renderscript/ScriptIntrinsicResize.java
deleted file mode 100644
index a42d3be..0000000
--- a/graphics/java/android/renderscript/ScriptIntrinsicResize.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2014 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 android.renderscript;
-
-/**
- * Intrinsic for performing a resize of a 2D allocation.
- */
-public final class ScriptIntrinsicResize extends ScriptIntrinsic {
-    private Allocation mInput;
-
-    private ScriptIntrinsicResize(int id, RenderScript rs) {
-        super(id, rs);
-    }
-
-    /**
-     * Supported elements types are {@link Element#U8}, {@link
-     * Element#U8_2}, {@link Element#U8_3}, {@link Element#U8_4}
-     *
-     * @param rs The RenderScript context
-     *
-     * @return ScriptIntrinsicResize
-     */
-    public static ScriptIntrinsicResize create(RenderScript rs) {
-        int id = rs.nScriptIntrinsicCreate(12, 0);
-        ScriptIntrinsicResize si = new ScriptIntrinsicResize(id, rs);
-        return si;
-
-    }
-
-    /**
-     * Set the input of the resize.
-     * Must match the element type supplied during create.
-     *
-     * @param ain The input allocation.
-     */
-    public void setInput(Allocation ain) {
-        Element e = ain.getElement();
-        if (!e.isCompatible(Element.U8(mRS)) &&
-            !e.isCompatible(Element.U8_2(mRS)) &&
-            !e.isCompatible(Element.U8_3(mRS)) &&
-            !e.isCompatible(Element.U8_4(mRS))) {
-            throw new RSIllegalArgumentException("Unsuported element type.");
-        }
-
-        mInput = ain;
-        setVar(0, ain);
-    }
-
-    /**
-     * Get a FieldID for the input field of this intrinsic.
-     *
-     * @return Script.FieldID The FieldID object.
-     */
-    public Script.FieldID getFieldID_Input() {
-        return createFieldID(0, null);
-    }
-
-
-    /**
-     * Resize copy the input allocation to the output specified. The
-     * Allocation is rescaled if necessary using bi-cubic
-     * interpolation.
-     *
-     * @param aout Output allocation. Element type must match
-     *             current input.  Must not be same as input.
-     */
-    public void forEach_bicubic(Allocation aout) {
-        if (aout == mInput) {
-            throw new RSIllegalArgumentException("Output cannot be same as Input.");
-        }
-        forEach_bicubic(aout, null);
-    }
-
-    /**
-     * Resize copy the input allocation to the output specified. The
-     * Allocation is rescaled if necessary using bi-cubic
-     * interpolation.
-     *
-     * @param aout Output allocation. Element type must match
-     *             current input.
-     * @param opt LaunchOptions for clipping
-     */
-    public void forEach_bicubic(Allocation aout, Script.LaunchOptions opt) {
-        forEach(0, null, aout, null, opt);
-    }
-
-    /**
-     * Get a KernelID for this intrinsic kernel.
-     *
-     * @return Script.KernelID The KernelID object.
-     */
-    public Script.KernelID getKernelID_bicubic() {
-        return createKernelID(0, 2, null, null);
-    }
-
-
-}
-
diff --git a/include/androidfw/AssetManager.h b/include/androidfw/AssetManager.h
index a13dd16..610528c 100644
--- a/include/androidfw/AssetManager.h
+++ b/include/androidfw/AssetManager.h
@@ -161,7 +161,7 @@
      * path hierarchy, and will not be seen by "AssetDir" or included
      * in our filename cache.
      */
-    Asset* openNonAsset(const char* fileName, AccessMode mode);
+    Asset* openNonAsset(const char* fileName, AccessMode mode, int32_t* outCookie = NULL);
 
     /*
      * Explicit non-asset file.  The file explicitly named by the cookie (the
diff --git a/include/androidfw/PowerManager.h b/include/androidfw/PowerManager.h
deleted file mode 100644
index ba98db0..0000000
--- a/include/androidfw/PowerManager.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _ANDROIDFW_POWER_MANAGER_H
-#define _ANDROIDFW_POWER_MANAGER_H
-
-
-namespace android {
-
-enum {
-    USER_ACTIVITY_EVENT_OTHER = 0,
-    USER_ACTIVITY_EVENT_BUTTON = 1,
-    USER_ACTIVITY_EVENT_TOUCH = 2,
-
-    USER_ACTIVITY_EVENT_LAST = USER_ACTIVITY_EVENT_TOUCH, // Last valid event code.
-};
-
-} // namespace android
-
-#endif // _ANDROIDFW_POWER_MANAGER_H
diff --git a/include/androidfw/ResourceTypes.h b/include/androidfw/ResourceTypes.h
index 2306a7a..4d8e512 100644
--- a/include/androidfw/ResourceTypes.h
+++ b/include/androidfw/ResourceTypes.h
@@ -25,6 +25,7 @@
 #include <utils/Errors.h>
 #include <utils/String16.h>
 #include <utils/Vector.h>
+#include <utils/KeyedVector.h>
 
 #include <utils/threads.h>
 
@@ -216,7 +217,8 @@
     // Chunk types in RES_TABLE_TYPE
     RES_TABLE_PACKAGE_TYPE      = 0x0200,
     RES_TABLE_TYPE_TYPE         = 0x0201,
-    RES_TABLE_TYPE_SPEC_TYPE    = 0x0202
+    RES_TABLE_TYPE_SPEC_TYPE    = 0x0202,
+    RES_TABLE_LIBRARY_TYPE      = 0x0203
 };
 
 /**
@@ -268,6 +270,9 @@
         // The 'data' holds a complex number encoding a fraction of a
         // container.
         TYPE_FRACTION = 0x06,
+        // The 'data' holds a dynamic ResTable_ref, which needs to be
+        // resolved before it can be used like a TYPE_REFERENCE.
+        TYPE_DYNAMIC_REFERENCE = 0x07,
 
         // Beginning of integer flavors...
         TYPE_FIRST_INT = 0x10,
@@ -457,6 +462,7 @@
     ResStringPool(const void* data, size_t size, bool copyData=false);
     ~ResStringPool();
 
+    void setToEmpty();
     status_t setTo(const void* data, size_t size, bool copyData=false);
 
     status_t getError() const;
@@ -735,14 +741,16 @@
     const void*                 mCurExt;
 };
 
+class DynamicRefTable;
+
 /**
  * Convenience class for accessing data in a ResXMLTree resource.
  */
 class ResXMLTree : public ResXMLParser
 {
 public:
+    ResXMLTree(const DynamicRefTable* dynamicRefTable);
     ResXMLTree();
-    ResXMLTree(const void* data, size_t size, bool copyData=false);
     ~ResXMLTree();
 
     status_t setTo(const void* data, size_t size, bool copyData=false);
@@ -756,6 +764,8 @@
 
     status_t validateNode(const ResXMLTree_node* node) const;
 
+    const DynamicRefTable* const mDynamicRefTable;
+
     status_t                    mError;
     void*                       mOwnedData;
     const ResXMLTree_header*    mHeader;
@@ -1291,6 +1301,7 @@
 struct ResTable_map_entry : public ResTable_entry
 {
     // Resource identifier of the parent mapping, or 0 if there is none.
+    // This is always treated as a TYPE_DYNAMIC_REFERENCE.
     ResTable_ref parent;
     // Number of name/value pairs that follow for FLAG_COMPLEX.
     uint32_t count;
@@ -1386,6 +1397,68 @@
 };
 
 /**
+ * A package-id to package name mapping for any shared libraries used
+ * in this resource table. The package-id's encoded in this resource
+ * table may be different than the id's assigned at runtime. We must
+ * be able to translate the package-id's based on the package name.
+ */
+struct ResTable_lib_header
+{
+    struct ResChunk_header header;
+
+    // The number of shared libraries linked in this resource table.
+    uint32_t count;
+};
+
+/**
+ * A shared library package-id to package name entry.
+ */
+struct ResTable_lib_entry
+{
+    // The package-id this shared library was assigned at build time.
+    // We use a uint32 to keep the structure aligned on a uint32 boundary.
+    uint32_t packageId;
+
+    // The package name of the shared library. \0 terminated.
+    char16_t packageName[128];
+};
+
+/**
+ * Holds the shared library ID table. Shared libraries are assigned package IDs at
+ * build time, but they may be loaded in a different order, so we need to maintain
+ * a mapping of build-time package ID to run-time assigned package ID.
+ *
+ * Dynamic references are not currently supported in overlays. Only the base package
+ * may have dynamic references.
+ */
+class DynamicRefTable
+{
+public:
+    DynamicRefTable(uint8_t packageId);
+
+    // Loads an unmapped reference table from the package.
+    status_t load(const ResTable_lib_header* const header);
+
+    // Creates a mapping from build-time package ID to run-time package ID for
+    // the given package.
+    status_t addMapping(const String16& packageName, uint8_t packageId);
+
+    // Performs the actual conversion of build-time resource ID to run-time
+    // resource ID.
+    inline status_t lookupResourceId(uint32_t* resId) const;
+    inline status_t lookupResourceValue(Res_value* value) const;
+
+    inline const KeyedVector<String16, uint8_t>& entries() const {
+        return mEntries;
+    }
+
+private:
+    const uint8_t                   mAssignedPackageId;
+    uint8_t                         mLookupTable[256];
+    KeyedVector<String16, uint8_t>  mEntries;
+};
+
+/**
  * Convenience class for accessing data in a ResTable resource.
  */
 class ResTable
@@ -1400,6 +1473,7 @@
                  const void* idmap = NULL);
     status_t add(const void *data, size_t size);
     status_t add(ResTable* src);
+    status_t addEmpty(const int32_t cookie);
 
     status_t getError() const;
 
@@ -1635,7 +1709,7 @@
                               bool append = false);
 
     size_t getBasePackageCount() const;
-    const char16_t* getBasePackageName(size_t idx) const;
+    const String16 getBasePackageName(size_t idx) const;
     uint32_t getBasePackageId(size_t idx) const;
 
     // Return the number of resource tables that the object contains.
@@ -1648,6 +1722,8 @@
     // Return unique cookie identifier for the given resource table.
     int32_t getTableCookie(size_t index) const;
 
+    const DynamicRefTable* getDynamicRefTableForCookie(int32_t cookie) const;
+
     // Return the configurations (ResTable_config) that we know about
     void getConfigurations(Vector<ResTable_config>* configs) const;
 
@@ -1685,7 +1761,7 @@
     struct bag_set;
 
     status_t addInternal(const void* data, size_t size, const int32_t cookie,
-                 Asset* asset, bool copyData, const Asset* idmap);
+                 bool copyData, const Asset* idmap);
 
     ssize_t getResourcePackageIndex(uint32_t resID) const;
     ssize_t getEntry(
@@ -1713,6 +1789,8 @@
     // Mapping from resource package IDs to indices into the internal
     // package array.
     uint8_t                     mPackageMap[256];
+
+    uint8_t                     mNextPackageId;
 };
 
 }   // namespace android
diff --git a/include/private/hwui/DrawGlInfo.h b/include/private/hwui/DrawGlInfo.h
index fc810be..a357a01 100644
--- a/include/private/hwui/DrawGlInfo.h
+++ b/include/private/hwui/DrawGlInfo.h
@@ -55,7 +55,10 @@
         kModeDraw,
         // Indicates the the functor is called only to perform
         // processing and that no draw should be attempted
-        kModeProcess
+        kModeProcess,
+        // Same as kModeProcess, however there is no GL context because it was
+        // lost or destroyed
+        kModeProcessNoContext
     };
 
     /**
@@ -65,14 +68,6 @@
     enum Status {
         // The functor is done
         kStatusDone = 0x0,
-        // The functor is requesting a redraw (the clip rect
-        // used by the redraw is specified by DrawGlInfo.)
-        // The rest of the UI might redraw too.
-        kStatusDraw = 0x1,
-        // The functor needs to be invoked again but will
-        // not redraw. Only the functor is invoked again
-        // (unless another functor requests a redraw.)
-        kStatusInvoke = 0x2,
         // DisplayList actually issued GL drawing commands.
         // This is used to signal the HardwareRenderer that the
         // buffers should be flipped - otherwise, there were no
diff --git a/keystore/java/android/security/AndroidKeyPairGenerator.java b/keystore/java/android/security/AndroidKeyPairGenerator.java
index 1ab0aeb..458a46c 100644
--- a/keystore/java/android/security/AndroidKeyPairGenerator.java
+++ b/keystore/java/android/security/AndroidKeyPairGenerator.java
@@ -35,7 +35,6 @@
 import java.security.cert.X509Certificate;
 import java.security.spec.AlgorithmParameterSpec;
 import java.security.spec.DSAParameterSpec;
-import java.security.spec.ECParameterSpec;
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.RSAKeyGenParameterSpec;
 import java.security.spec.X509EncodedKeySpec;
diff --git a/keystore/java/android/security/Credentials.java b/keystore/java/android/security/Credentials.java
index 767647c..af76d9d 100644
--- a/keystore/java/android/security/Credentials.java
+++ b/keystore/java/android/security/Credentials.java
@@ -27,7 +27,6 @@
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.io.ObjectOutputStream;
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.Writer;
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index 8ad973d..9d6d76e 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -89,11 +89,21 @@
     public static final String ACCOUNT_TYPE = "com.android.keychain";
 
     /**
+     * Package name for KeyChain chooser.
+     */
+    private static final String KEYCHAIN_PACKAGE = "com.android.keychain";
+
+    /**
      * Action to bring up the KeyChainActivity
      */
     private static final String ACTION_CHOOSER = "com.android.keychain.CHOOSER";
 
     /**
+     * Package name for the Certificate Installer.
+     */
+    private static final String CERT_INSTALLER_PACKAGE = "com.android.certinstaller";
+
+    /**
      * Extra for use with {@link #ACTION_CHOOSER}
      * @hide Also used by KeyChainActivity implementation
      */
@@ -201,7 +211,7 @@
      */
     public static Intent createInstallIntent() {
         Intent intent = new Intent(ACTION_INSTALL);
-        intent.setClassName("com.android.certinstaller",
+        intent.setClassName(CERT_INSTALLER_PACKAGE,
                             "com.android.certinstaller.CertInstallerMain");
         return intent;
     }
@@ -267,6 +277,7 @@
             throw new NullPointerException("response == null");
         }
         Intent intent = new Intent(ACTION_CHOOSER);
+        intent.setPackage(KEYCHAIN_PACKAGE);
         intent.putExtra(EXTRA_RESPONSE, new AliasResponse(response));
         intent.putExtra(EXTRA_HOST, host);
         intent.putExtra(EXTRA_PORT, port);
diff --git a/keystore/java/android/security/KeyChainAliasCallback.java b/keystore/java/android/security/KeyChainAliasCallback.java
index fc9e64b..2500863 100644
--- a/keystore/java/android/security/KeyChainAliasCallback.java
+++ b/keystore/java/android/security/KeyChainAliasCallback.java
@@ -15,10 +15,6 @@
  */
 package android.security;
 
-import android.content.Intent;
-import java.security.PrivateKey;
-import java.security.cert.X509Certificate;
-
 /**
  * The KeyChainAliasCallback is the callback for {@link
  * KeyChain#choosePrivateKeyAlias}.
diff --git a/keystore/java/android/security/KeyStoreParameter.java b/keystore/java/android/security/KeyStoreParameter.java
index 621a605..b71efc4 100644
--- a/keystore/java/android/security/KeyStoreParameter.java
+++ b/keystore/java/android/security/KeyStoreParameter.java
@@ -17,12 +17,9 @@
 package android.security;
 
 import android.content.Context;
-import android.security.KeyPairGeneratorSpec.Builder;
 
 import java.security.KeyPairGenerator;
-import java.security.PrivateKey;
 import java.security.KeyStore.ProtectionParameter;
-import java.security.cert.Certificate;
 
 /**
  * This provides the optional parameters that can be specified for
diff --git a/keystore/java/android/security/SystemKeyStore.java b/keystore/java/android/security/SystemKeyStore.java
index bca8f68..e07eaa2 100644
--- a/keystore/java/android/security/SystemKeyStore.java
+++ b/keystore/java/android/security/SystemKeyStore.java
@@ -18,10 +18,8 @@
 
 import android.os.Environment;
 import android.os.FileUtils;
-import android.os.Process;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.security.NoSuchAlgorithmException;
diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp
index b4d482a..91dda75 100644
--- a/libs/androidfw/AssetManager.cpp
+++ b/libs/androidfw/AssetManager.cpp
@@ -74,6 +74,7 @@
 static const char* kAppZipName = NULL; //"classes.jar";
 static const char* kSystemAssets = "framework/framework-res.apk";
 static const char* kResourceCache = "resource-cache";
+static const char* kAndroidManifest = "AndroidManifest.xml";
 
 static const char* kExcludeExtension = ".EXCLUDE";
 
@@ -205,6 +206,16 @@
     ALOGV("In %p Asset %s path: %s", this,
          ap.type == kFileTypeDirectory ? "dir" : "zip", ap.path.string());
 
+    // Check that the path has an AndroidManifest.xml
+    Asset* manifestAsset = const_cast<AssetManager*>(this)->openNonAssetInPathLocked(
+            kAndroidManifest, Asset::ACCESS_BUFFER, ap);
+    if (manifestAsset == NULL) {
+        // This asset path does not contain any resources.
+        delete manifestAsset;
+        return false;
+    }
+    delete manifestAsset;
+
     mAssetPaths.add(ap);
 
     // new paths are always added at the end
@@ -356,7 +367,7 @@
         delete[] mLocale;
     }
     mLocale = strdupNew(locale);
-
+    
     updateResourceParamsLocked();
 }
 
@@ -461,7 +472,7 @@
  * The "fileName" is the partial path starting from the application
  * name.
  */
-Asset* AssetManager::openNonAsset(const char* fileName, AccessMode mode)
+Asset* AssetManager::openNonAsset(const char* fileName, AccessMode mode, int32_t* outCookie)
 {
     AutoMutex _l(mLock);
 
@@ -482,6 +493,7 @@
         Asset* pAsset = openNonAssetInPathLocked(
             fileName, mode, mAssetPaths.itemAt(i));
         if (pAsset != NULL) {
+            if (outCookie != NULL) *outCookie = static_cast<int32_t>(i + 1);
             return pAsset != kExcludedAsset ? pAsset : NULL;
         }
     }
@@ -556,9 +568,14 @@
         LOG_FATAL_IF(mAssetPaths.size() == 0, "No assets added to AssetManager");
     }
 
-    if (mCacheMode != CACHE_OFF && !mCacheValid)
+    if (mCacheMode != CACHE_OFF && !mCacheValid) {
         const_cast<AssetManager*>(this)->loadFileNameCacheLocked();
+    }
 
+    mResources = new ResTable();
+    updateResourceParamsLocked();
+
+    bool onlyEmptyResources = true;
     const size_t N = mAssetPaths.size();
     for (size_t i=0; i<N; i++) {
         Asset* ass = NULL;
@@ -593,7 +610,7 @@
                             mZipSet.setZipResourceTableAsset(ap.path, ass);
                     }
                 }
-
+                
                 if (i == 0 && ass != NULL) {
                     // If this is the first resource table in the asset
                     // manager, then we are going to cache it so that we
@@ -621,35 +638,39 @@
                                          ap);
             shared = false;
         }
+
         if ((ass != NULL || sharedRes != NULL) && ass != kExcludedAsset) {
-            if (rt == NULL) {
-                mResources = rt = new ResTable();
-                updateResourceParamsLocked();
-            }
             ALOGV("Installing resource asset %p in to table %p\n", ass, mResources);
             if (sharedRes != NULL) {
                 ALOGV("Copying existing resources for %s", ap.path.string());
-                rt->add(sharedRes);
+                mResources->add(sharedRes);
             } else {
                 ALOGV("Parsing resources for %s", ap.path.string());
-                rt->add(ass, i + 1, !shared, idmap);
+                mResources->add(ass, i + 1, !shared, idmap);
             }
+            onlyEmptyResources = false;
 
             if (!shared) {
                 delete ass;
             }
+        } else {
+            ALOGW("Installing empty resources in to table %p\n", mResources);
+            mResources->addEmpty(i + 1);
         }
+
         if (idmap != NULL) {
             delete idmap;
         }
         MY_TRACE_END();
     }
 
-    if (required && !rt) ALOGW("Unable to find resources file resources.arsc");
-    if (!rt) {
-        mResources = rt = new ResTable();
+    if (required && onlyEmptyResources) {
+        ALOGW("Unable to find resources file resources.arsc");
+        delete mResources;
+        mResources = NULL;
     }
-    return rt;
+
+    return mResources;
 }
 
 void AssetManager::updateResourceParamsLocked() const
@@ -846,7 +867,7 @@
             /* look at the filesystem on disk */
             String8 path(createPathNameLocked(ap, locale, vendor));
             path.appendPath(fileName);
-
+    
             String8 excludeName(path);
             excludeName.append(kExcludeExtension);
             if (::getFileType(excludeName.string()) != kFileTypeNonexistent) {
@@ -854,28 +875,28 @@
                 //printf("+++ excluding '%s'\n", (const char*) excludeName);
                 return kExcludedAsset;
             }
-
+    
             pAsset = openAssetFromFileLocked(path, mode);
-
+    
             if (pAsset == NULL) {
                 /* try again, this time with ".gz" */
                 path.append(".gz");
                 pAsset = openAssetFromFileLocked(path, mode);
             }
-
+    
             if (pAsset != NULL)
                 pAsset->setAssetSource(path);
         } else {
             /* find in cache */
             String8 path(createPathNameLocked(ap, locale, vendor));
             path.appendPath(fileName);
-
+    
             AssetDir::FileInfo tmpInfo;
             bool found = false;
-
+    
             String8 excludeName(path);
             excludeName.append(kExcludeExtension);
-
+    
             if (mCache.indexOf(excludeName) != NAME_NOT_FOUND) {
                 /* go no farther */
                 //printf("+++ Excluding '%s'\n", (const char*) excludeName);
@@ -1699,7 +1720,7 @@
 
     // XXX This is broken -- the filename cache needs to hold the base
     // asset path separately from its filename.
-
+    
     partialPath = createPathNameLocked(ap, locale, vendor);
     if (dirName[0] != '\0') {
         partialPath.appendPath(dirName);
diff --git a/libs/androidfw/BackupData.cpp b/libs/androidfw/BackupData.cpp
index bd9dc76..d16d5498 100644
--- a/libs/androidfw/BackupData.cpp
+++ b/libs/androidfw/BackupData.cpp
@@ -59,9 +59,10 @@
 BackupDataWriter::BackupDataWriter(int fd)
     :m_fd(fd),
      m_status(NO_ERROR),
-     m_pos(0),
      m_entityCount(0)
 {
+    m_pos = (ssize_t) lseek(fd, 0, SEEK_CUR);
+    if (DEBUG) ALOGI("BackupDataWriter(%d) @ %ld", fd, (long)m_pos);
 }
 
 BackupDataWriter::~BackupDataWriter()
@@ -184,10 +185,11 @@
     :m_fd(fd),
      m_done(false),
      m_status(NO_ERROR),
-     m_pos(0),
      m_entityCount(0)
 {
     memset(&m_header, 0, sizeof(m_header));
+    m_pos = (ssize_t) lseek(fd, 0, SEEK_CUR);
+    if (DEBUG) ALOGI("BackupDataReader(%d) @ %ld", fd, (long)m_pos);
 }
 
 BackupDataReader::~BackupDataReader()
diff --git a/libs/androidfw/ResourceTypes.cpp b/libs/androidfw/ResourceTypes.cpp
index 9e59a13..098753b 100644
--- a/libs/androidfw/ResourceTypes.cpp
+++ b/libs/androidfw/ResourceTypes.cpp
@@ -42,6 +42,7 @@
 #define TABLE_SUPER_NOISY(x) //x
 #define LOAD_TABLE_NOISY(x) //x
 #define TABLE_THEME(x) //x
+#define LIB_NOISY(x) x
 
 namespace android {
 
@@ -66,6 +67,9 @@
 // size measured in sizeof(uint32_t)
 #define IDMAP_HEADER_SIZE (ResTable::IDMAP_HEADER_SIZE_BYTES / sizeof(uint32_t))
 
+#define APP_PACKAGE_ID      0x7f
+#define SYS_PACKAGE_ID      0x01
+
 // Standard C isspace() is only required to look at the low byte of its input, so
 // produces incorrect results for UTF-16 characters.  For safety's sake, assume that
 // any high-byte UTF-16 code point is not whitespace.
@@ -113,7 +117,7 @@
              name, size, headerSize);
         return BAD_TYPE;
     }
-    ALOGW("%s header size 0x%x is too small.",
+    ALOGW("%s header size 0x%04x is too small.",
          name, headerSize);
     return BAD_TYPE;
 }
@@ -264,7 +268,7 @@
     }
     const uint32_t index = typeOffset + 2 + entry - entryOffset;
     if (index > size) {
-        ALOGW("Resource ID map: entry index=%d exceeds size of map=%d\n", index, (int)size);
+        ALOGW("Resource ID map: entry index=%u exceeds size of map=%d\n", index, (int)size);
         *outValue = 0;
         return NO_ERROR;
     }
@@ -279,7 +283,7 @@
         return UNKNOWN_ERROR;
     }
     if (mapSize <= IDMAP_HEADER_SIZE + 1) {
-        ALOGW("corrupt idmap: map size %d too short\n", mapSize);
+        ALOGW("corrupt idmap: map size %d too short\n", (int)mapSize);
         return UNKNOWN_ERROR;
     }
     uint32_t typeCount = *(map + IDMAP_HEADER_SIZE);
@@ -288,7 +292,7 @@
         return UNKNOWN_ERROR;
     }
     if (IDMAP_HEADER_SIZE + 1 + typeCount > mapSize) {
-        ALOGW("corrupt idmap: number of types %d extends past idmap size %d\n", typeCount, mapSize);
+        ALOGW("corrupt idmap: number of types %u extends past idmap size %d\n", typeCount, (int)mapSize);
         return UNKNOWN_ERROR;
     }
     const uint32_t* p = map + IDMAP_HEADER_SIZE + 1;
@@ -304,7 +308,7 @@
     // determine package id from first entry of first type
     const uint32_t offset = *p + IDMAP_HEADER_SIZE + 2;
     if (offset > mapSize) {
-        ALOGW("corrupt idmap: entry offset %d points outside map size %d\n", offset, mapSize);
+        ALOGW("corrupt idmap: entry offset %u points outside map size %d\n", offset, (int)mapSize);
         return UNKNOWN_ERROR;
     }
     *outId = (map[offset] >> 24) & 0x000000ff;
@@ -342,6 +346,22 @@
     uninit();
 }
 
+void ResStringPool::setToEmpty()
+{
+    uninit();
+
+    mOwnedData = calloc(1, sizeof(ResStringPool_header));
+    ResStringPool_header* header = (ResStringPool_header*) mOwnedData;
+    mSize = 0;
+    mEntries = NULL;
+    mStrings = NULL;
+    mStringPoolSize = 0;
+    mEntryStyles = NULL;
+    mStyles = NULL;
+    mStylePoolSize = 0;
+    mHeader = (const ResStringPool_header*) header;
+}
+
 status_t ResStringPool::setTo(const void* data, size_t size, bool copyData)
 {
     if (!data || !size) {
@@ -1111,7 +1131,14 @@
                 (((const uint8_t*)tag)
                  + dtohs(tag->attributeStart)
                  + (dtohs(tag->attributeSize)*idx));
-            return attr->typedValue.dataType;
+            uint8_t type = attr->typedValue.dataType;
+            if (type != Res_value::TYPE_DYNAMIC_REFERENCE) {
+                return type;
+            }
+
+            // This is a dynamic reference. We adjust those references
+            // to regular references at this level, so lie to the caller.
+            return Res_value::TYPE_REFERENCE;
         }
     }
     return Res_value::TYPE_NULL;
@@ -1126,7 +1153,15 @@
                 (((const uint8_t*)tag)
                  + dtohs(tag->attributeStart)
                  + (dtohs(tag->attributeSize)*idx));
-            return dtohl(attr->typedValue.data);
+            if (attr->typedValue.dataType != Res_value::TYPE_DYNAMIC_REFERENCE ||
+                    mTree.mDynamicRefTable == NULL) {
+                return dtohl(attr->typedValue.data);
+            }
+
+            uint32_t data = dtohl(attr->typedValue.data);
+            if (mTree.mDynamicRefTable->lookupResourceId(&data) == NO_ERROR) {
+                return data;
+            }
         }
     }
     return 0;
@@ -1142,6 +1177,10 @@
                  + dtohs(tag->attributeStart)
                  + (dtohs(tag->attributeSize)*idx));
             outValue->copyFrom_dtoh(attr->typedValue);
+            if (mTree.mDynamicRefTable != NULL &&
+                    mTree.mDynamicRefTable->lookupResourceValue(outValue) != NO_ERROR) {
+                return BAD_TYPE;
+            }
             return sizeof(Res_value);
         }
     }
@@ -1333,25 +1372,26 @@
     mCurExt = pos.curExt;
 }
 
-
 // --------------------------------------------------------------------
 
 static volatile int32_t gCount = 0;
 
-ResXMLTree::ResXMLTree()
+ResXMLTree::ResXMLTree(const DynamicRefTable* dynamicRefTable)
     : ResXMLParser(*this)
+    , mDynamicRefTable(dynamicRefTable)
     , mError(NO_INIT), mOwnedData(NULL)
 {
     //ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1);
     restart();
 }
 
-ResXMLTree::ResXMLTree(const void* data, size_t size, bool copyData)
+ResXMLTree::ResXMLTree()
     : ResXMLParser(*this)
+    , mDynamicRefTable(NULL)
     , mError(NO_INIT), mOwnedData(NULL)
 {
     //ALOGI("Creating ResXMLTree %p #%d\n", this, android_atomic_inc(&gCount)+1);
-    setTo(data, size, copyData);
+    restart();
 }
 
 ResXMLTree::~ResXMLTree()
@@ -2740,7 +2780,14 @@
 struct ResTable::PackageGroup
 {
     PackageGroup(ResTable* _owner, const String16& _name, uint32_t _id)
-        : owner(_owner), name(_name), id(_id), typeCount(0), bags(NULL) { }
+        : owner(_owner)
+        , name(_name)
+        , id(_id)
+        , typeCount(0)
+        , bags(NULL)
+        , dynamicRefTable(static_cast<uint8_t>(_id))
+    { }
+
     ~PackageGroup() {
         clearBagCache();
         const size_t N = packages.size();
@@ -2793,6 +2840,13 @@
     // Computed attribute bags, first indexed by the type and second
     // by the entry in that type.
     bag_set***                      bags;
+
+    // The table mapping dynamic references to resolved references for
+    // this package group.
+    // TODO: We may be able to support dynamic references in overlays
+    // by having these tables in a per-package scope rather than
+    // per-package-group.
+    DynamicRefTable                 dynamicRefTable;
 };
 
 struct ResTable::bag_set
@@ -3080,7 +3134,7 @@
 }
 
 ResTable::ResTable()
-    : mError(NO_INIT)
+    : mError(NO_INIT), mNextPackageId(2)
 {
     memset(&mParams, 0, sizeof(mParams));
     memset(mPackageMap, 0, sizeof(mPackageMap));
@@ -3088,11 +3142,11 @@
 }
 
 ResTable::ResTable(const void* data, size_t size, const int32_t cookie, bool copyData)
-    : mError(NO_INIT)
+    : mError(NO_INIT), mNextPackageId(2)
 {
     memset(&mParams, 0, sizeof(mParams));
     memset(mPackageMap, 0, sizeof(mPackageMap));
-    addInternal(data, size, cookie, NULL /* asset */, copyData, NULL /* idMap */);
+    addInternal(data, size, cookie, copyData, NULL /* idMap */);
     LOG_FATAL_IF(mError != NO_ERROR, "Error parsing resource table");
     //ALOGI("Creating ResTable %p\n", this);
 }
@@ -3109,7 +3163,7 @@
 }
 
 status_t ResTable::add(const void* data, size_t size) {
-    return addInternal(data, size, 0 /* cookie */, NULL /* asset */,
+    return addInternal(data, size, 0 /* cookie */,
             false /* copyData */, NULL /* idMap */);
 }
 
@@ -3121,7 +3175,7 @@
         return UNKNOWN_ERROR;
     }
     size_t size = (size_t)asset->getLength();
-    return addInternal(data, size, cookie, asset, copyData,
+    return addInternal(data, size, cookie, copyData,
             reinterpret_cast<const Asset*>(idmap));
 }
 
@@ -3149,8 +3203,25 @@
     return mError;
 }
 
+status_t ResTable::addEmpty(const int32_t cookie) {
+    Header* header = new Header(this);
+    header->index = mHeaders.size();
+    header->cookie = cookie;
+    header->values.setToEmpty();
+    header->ownedData = calloc(1, sizeof(ResTable_header));
+
+    ResTable_header* resHeader = (ResTable_header*) header->ownedData;
+    resHeader->header.type = RES_TABLE_TYPE;
+    resHeader->header.headerSize = sizeof(ResTable_header);
+    resHeader->header.size = sizeof(ResTable_header);
+
+    header->header = (const ResTable_header*) resHeader;
+    mHeaders.add(header);
+    return NO_ERROR;
+}
+
 status_t ResTable::addInternal(const void* data, size_t size, const int32_t cookie,
-                       Asset* /*asset*/, bool copyData, const Asset* idmap)
+                       bool copyData, const Asset* idmap)
 {
     if (!data) return NO_ERROR;
     Header* header = new Header(this);
@@ -3189,8 +3260,6 @@
     //ALOGI("Got size 0x%x, again size 0x%x, raw size 0x%x\n", header->size,
     //     dtohl(header->header->header.size), header->header->header.size);
     LOAD_TABLE_NOISY(ALOGV("Loading ResTable @%p:\n", header->header));
-    LOAD_TABLE_NOISY(printHexData(2, header->header, header->size < 256 ? header->size : 256,
-                                  16, 16, 0, false, printToLogFunc));
     if (dtohs(header->header->header.headerSize) > header->size
             || header->size > size) {
         ALOGW("Bad resource table: header size 0x%x or total size 0x%x is larger than data size 0x%x\n",
@@ -3477,9 +3546,6 @@
             continue;
         }
 
-        TABLE_NOISY(aout << "Resource type data: "
-              << HexDump(type, dtohl(type->header.size)) << endl);
-
         if ((size_t)offset > (dtohl(type->header.size)-sizeof(Res_value))) {
             ALOGW("ResTable_item at %d is beyond type chunk data %d",
                  (int)offset, dtohl(type->header.size));
@@ -3519,6 +3585,18 @@
         outValue->res0 = bestValue->res0;
         outValue->dataType = bestValue->dataType;
         outValue->data = dtohl(bestValue->data);
+
+        // The reference may be pointing to a resource in a shared library. These
+        // references have build-time generated package IDs. These ids may not match
+        // the actual package IDs of the corresponding packages in this ResTable.
+        // We need to fix the package ID based on a mapping.
+        status_t err = grp->dynamicRefTable.lookupResourceValue(outValue);
+        if (err != NO_ERROR) {
+            ALOGW("Failed to resolve referenced package: 0x%08x", outValue->data);
+            rc = BAD_VALUE;
+            goto out;
+        }
+
         if (outConfig != NULL) {
             *outConfig = bestItem;
         }
@@ -3548,8 +3626,8 @@
         ResTable_config* outConfig) const
 {
     int count=0;
-    while (blockIndex >= 0 && value->dataType == value->TYPE_REFERENCE
-           && value->data != 0 && count < 20) {
+    while (blockIndex >= 0 && value->dataType == Res_value::TYPE_REFERENCE
+            && value->data != 0 && count < 20) {
         if (outLastRef) *outLastRef = value->data;
         uint32_t lastRef = value->data;
         uint32_t newFlags = 0;
@@ -3733,7 +3811,7 @@
         const Type* typeClass;
         ALOGV("Getting entry pkg=%p, t=%d, e=%d\n", package, T, E);
         ssize_t offset = getEntry(package, T, E, &mParams, &type, &entry, &typeClass);
-        ALOGV("Resulting offset=%d\n", offset);
+        ALOGV("Resulting offset=%d\n", (int)offset);
         if (offset <= 0) {
             // No {entry, appropriate config} pair found in package. If this
             // package is an overlay package (ip != 0), this simply means the
@@ -3777,9 +3855,21 @@
         TABLE_NOISY(printf("Creating new bag, entrySize=0x%08x, parent=0x%08x\n",
                            entrySize, parent));
         if (parent) {
+            uint32_t resolvedParent = parent;
+
+            // Bags encode a parent reference without using the standard
+            // Res_value structure. That means we must always try to
+            // resolve a parent reference in case it is actually a
+            // TYPE_DYNAMIC_REFERENCE.
+            status_t err = grp->dynamicRefTable.lookupResourceId(&resolvedParent);
+            if (err != NO_ERROR) {
+                ALOGE("Failed resolving bag parent id 0x%08x", parent);
+                return UNKNOWN_ERROR;
+            }
+
             const bag_entry* parentBag;
             uint32_t parentTypeSpecFlags = 0;
-            const ssize_t NP = getBagLocked(parent, &parentBag, &parentTypeSpecFlags);
+            const ssize_t NP = getBagLocked(resolvedParent, &parentBag, &parentTypeSpecFlags);
             const size_t NT = ((NP >= 0) ? NP : 0) + N;
             set = (bag_set*)malloc(sizeof(bag_set)+sizeof(bag_entry)*NT);
             if (set == NULL) {
@@ -3874,6 +3964,12 @@
             cur->stringBlock = package->header->index;
             cur->map.name.ident = newName;
             cur->map.value.copyFrom_dtoh(map->value);
+            status_t err = grp->dynamicRefTable.lookupResourceValue(&cur->map.value);
+            if (err != NO_ERROR) {
+                ALOGE("Reference item(0x%08x) in bag could not be resolved.", cur->map.value.data);
+                return UNKNOWN_ERROR;
+            }
+
             TABLE_NOISY(printf("Setting entry #%d %p: block=%d, name=0x%08x, type=%d, data=0x%08x\n",
                          curEntry, cur, cur->stringBlock, cur->map.name.ident,
                          cur->map.value.dataType, cur->map.value.data));
@@ -4571,16 +4667,20 @@
                         return false;
                     }
                 }
-                if (!accessor) {
-                    outValue->data = rid;
-                    return true;
+
+                if (accessor) {
+                    rid = Res_MAKEID(
+                        accessor->getRemappedPackage(Res_GETPACKAGE(rid)),
+                        Res_GETTYPE(rid), Res_GETENTRY(rid));
+                    TABLE_NOISY(printf("Incl %s:%s/%s: 0x%08x\n",
+                           String8(package).string(), String8(type).string(),
+                           String8(name).string(), rid));
                 }
-                rid = Res_MAKEID(
-                    accessor->getRemappedPackage(Res_GETPACKAGE(rid)),
-                    Res_GETTYPE(rid), Res_GETENTRY(rid));
-                TABLE_NOISY(printf("Incl %s:%s/%s: 0x%08x\n",
-                       String8(package).string(), String8(type).string(),
-                       String8(name).string(), rid));
+
+                uint32_t packageId = Res_GETPACKAGE(rid) + 1;
+                if (packageId != APP_PACKAGE_ID && packageId != SYS_PACKAGE_ID) {
+                    outValue->dataType = Res_value::TYPE_DYNAMIC_REFERENCE;
+                }
                 outValue->data = rid;
                 return true;
             }
@@ -4592,8 +4692,17 @@
                     TABLE_NOISY(printf("Pckg %s:%s/%s: 0x%08x\n",
                            String8(package).string(), String8(type).string(),
                            String8(name).string(), rid));
-                    outValue->data = rid;
-                    return true;
+                    uint32_t packageId = Res_GETPACKAGE(rid) + 1;
+                    if (packageId == 0x00) {
+                        outValue->data = rid;
+                        outValue->dataType = Res_value::TYPE_DYNAMIC_REFERENCE;
+                        return true;
+                    } else if (packageId == APP_PACKAGE_ID || packageId == SYS_PACKAGE_ID) {
+                        // We accept packageId's generated as 0x01 in order to support
+                        // building the android system resources
+                        outValue->data = rid;
+                        return true;
+                    }
                 }
             }
         }
@@ -5125,15 +5234,15 @@
     return mPackageGroups.size();
 }
 
-const char16_t* ResTable::getBasePackageName(size_t idx) const
+const String16 ResTable::getBasePackageName(size_t idx) const
 {
     if (mError != NO_ERROR) {
-        return 0;
+        return String16();
     }
     LOG_FATAL_IF(idx >= mPackageGroups.size(),
                  "Requested package index %d past package count %d",
                  (int)idx, (int)mPackageGroups.size());
-    return mPackageGroups[idx]->name.string();
+    return mPackageGroups[idx]->name;
 }
 
 uint32_t ResTable::getBasePackageId(size_t idx) const
@@ -5162,6 +5271,21 @@
     return mHeaders[index]->cookie;
 }
 
+const DynamicRefTable* ResTable::getDynamicRefTableForCookie(int32_t cookie) const
+{
+    const size_t N = mPackageGroups.size();
+    for (size_t i = 0; i < N; i++) {
+        const PackageGroup* pg = mPackageGroups[i];
+        size_t M = pg->packages.size();
+        for (size_t j = 0; j < M; j++) {
+            if (pg->packages[j]->header->cookie == cookie) {
+                return &pg->dynamicRefTable;
+            }
+        }
+    }
+    return NULL;
+}
+
 void ResTable::getConfigurations(Vector<ResTable_config>* configs) const
 {
     const size_t I = mPackageGroups.size();
@@ -5303,10 +5427,9 @@
     }
 
     offset += dtohl(type->entriesStart);
-    TABLE_NOISY(aout << "Looking in resource table " << package->header->header
-          << ", typeOff="
-          << (void*)(((const char*)type)-((const char*)package->header->header))
-          << ", offset=" << (void*)offset << endl);
+    TABLE_NOISY(ALOGD("Looking in resource table %p, typeOff=%p, offset=%p",
+            package->header->header, (void*)(((const char*)type)-((const char*)package->header->header)),
+            (void*)offset));
 
     if (offset > (dtohl(type->header.size)-sizeof(ResTable_entry))) {
         ALOGW("ResTable_entry at 0x%x is beyond type chunk data 0x%x",
@@ -5380,6 +5503,11 @@
         if (package == NULL) {
             return (mError=NO_MEMORY);
         }
+        
+        if (id == 0) {
+            // This is a library so assign an ID
+            id = mNextPackageId++;
+        }
 
         size_t idx = mPackageMap[id];
         if (idx == 0) {
@@ -5416,6 +5544,13 @@
             group->basePackage = package;
 
             mPackageMap[id] = (uint8_t)idx;
+
+            // Find all packages that reference this package
+            size_t N = mPackageGroups.size();
+            for (size_t i = 0; i < N; i++) {
+                mPackageGroups[i]->dynamicRefTable.addMapping(
+                        group->name, static_cast<uint8_t>(group->id));
+            }
         } else {
             group = mPackageGroups.itemAt(idx-1);
             if (group == NULL) {
@@ -5460,7 +5595,7 @@
                                     (void*)(base-(const uint8_t*)chunk),
                                     dtohs(typeSpec->header.type),
                                     dtohs(typeSpec->header.headerSize),
-                                    (void*)typeSize));
+                                    (void*)typeSpecSize));
             // look for block overrun or int overflow when multiplying by 4
             if ((dtohl(typeSpec->entryCount) > (INT32_MAX/sizeof(uint32_t))
                     || dtohs(typeSpec->header.headerSize)+(sizeof(uint32_t)*dtohl(typeSpec->entryCount))
@@ -5546,6 +5681,21 @@
                 ALOGI("Adding config to type %d: %s\n",
                       type->id, thisConfig.toString().string()));
             t->configs.add(type);
+        } else if (ctype == RES_TABLE_LIBRARY_TYPE) {
+            if (group->dynamicRefTable.entries().size() == 0) {
+                status_t err = group->dynamicRefTable.load((const ResTable_lib_header*) chunk);
+                if (err != NO_ERROR) {
+                    return (mError=err);
+                }
+
+                // Fill in the reference table with the entries we already know about.
+                size_t N = mPackageGroups.size();
+                for (size_t i = 0; i < N; i++) {
+                    group->dynamicRefTable.addMapping(mPackageGroups[i]->name, mPackageGroups[i]->id);
+                }
+            } else {
+                ALOGW("Found multiple library tables, ignoring...");
+            }
         } else {
             status_t err = validate_chunk(chunk, sizeof(ResChunk_header),
                                           endPos, "ResTable_package:unknown");
@@ -5564,6 +5714,103 @@
     return NO_ERROR;
 }
 
+DynamicRefTable::DynamicRefTable(uint8_t packageId)
+    : mAssignedPackageId(packageId)
+{
+    memset(mLookupTable, 0, sizeof(mLookupTable));
+
+    // Reserved package ids
+    mLookupTable[APP_PACKAGE_ID] = APP_PACKAGE_ID;
+    mLookupTable[SYS_PACKAGE_ID] = SYS_PACKAGE_ID;
+}
+
+status_t DynamicRefTable::load(const ResTable_lib_header* const header)
+{
+    const uint32_t entryCount = dtohl(header->count);
+    const uint32_t sizeOfEntries = sizeof(ResTable_lib_entry) * entryCount;
+    const uint32_t expectedSize = dtohl(header->header.size) - dtohl(header->header.headerSize);
+    if (sizeOfEntries > expectedSize) {
+        ALOGE("ResTable_lib_header size %u is too small to fit %u entries (x %u).",
+                expectedSize, entryCount, (uint32_t)sizeof(ResTable_lib_entry));
+        return UNKNOWN_ERROR;
+    }
+
+    const ResTable_lib_entry* entry = (const ResTable_lib_entry*)(((uint8_t*) header) +
+            dtohl(header->header.headerSize));
+    for (uint32_t entryIndex = 0; entryIndex < entryCount; entryIndex++) {
+        uint32_t packageId = dtohl(entry->packageId);
+        char16_t tmpName[sizeof(entry->packageName) / sizeof(char16_t)];
+        strcpy16_dtoh(tmpName, entry->packageName, sizeof(entry->packageName) / sizeof(char16_t));
+        LIB_NOISY(ALOGV("Found lib entry %s with id %d\n", String8(tmpName).string(),
+                dtohl(entry->packageId)));
+        if (packageId >= 256) {
+            ALOGE("Bad package id 0x%08x", packageId);
+            return UNKNOWN_ERROR;
+        }
+        mEntries.replaceValueFor(String16(tmpName), (uint8_t) packageId);
+        entry = entry + 1;
+    }
+    return NO_ERROR;
+}
+
+status_t DynamicRefTable::addMapping(const String16& packageName, uint8_t packageId)
+{
+    ssize_t index = mEntries.indexOfKey(packageName);
+    if (index < 0) {
+        return UNKNOWN_ERROR;
+    }
+    mLookupTable[mEntries.valueAt(index)] = packageId;
+    return NO_ERROR;
+}
+
+status_t DynamicRefTable::lookupResourceId(uint32_t* resId) const {
+    uint32_t res = *resId;
+    size_t packageId = Res_GETPACKAGE(res) + 1;
+
+    if (packageId == APP_PACKAGE_ID) {
+        // No lookup needs to be done, app package IDs are absolute.
+        return NO_ERROR;
+    }
+
+    if (packageId == 0) {
+        // The package ID is 0x00. That means that a shared library is accessing
+        // its own local resource, so we fix up the resource with the calling
+        // package ID.
+        *resId |= ((uint32_t) mAssignedPackageId) << 24;
+        return NO_ERROR;
+    }
+
+    // Do a proper lookup.
+    uint8_t translatedId = mLookupTable[packageId];
+    if (translatedId == 0) {
+        ALOGV("DynamicRefTable(0x%02x): No mapping for build-time package ID 0x%02x.",
+                (uint8_t)mAssignedPackageId, (uint8_t)packageId);
+        for (size_t i = 0; i < 256; i++) {
+            if (mLookupTable[i] != 0) {
+                ALOGV("e[0x%02x] -> 0x%02x", (uint8_t)i, mLookupTable[i]);
+            }
+        }
+        return UNKNOWN_ERROR;
+    }
+
+    *resId = (res & 0x00ffffff) | (((uint32_t) translatedId) << 24);
+    return NO_ERROR;
+}
+
+status_t DynamicRefTable::lookupResourceValue(Res_value* value) const {
+    if (value->dataType != Res_value::TYPE_DYNAMIC_REFERENCE) {
+        return NO_ERROR;
+    }
+
+    status_t err = lookupResourceId(&value->data);
+    if (err != NO_ERROR) {
+        return err;
+    }
+
+    value->dataType = Res_value::TYPE_REFERENCE;
+    return NO_ERROR;
+}
+
 status_t ResTable::createIdmap(const ResTable& overlay,
         uint32_t targetCrc, uint32_t overlayCrc,
         const char* targetPath, const char* overlayPath,
@@ -5704,7 +5951,7 @@
             continue;
         }
         if (N == 1) { // vector expected to hold (offset) + (N > 0 entries)
-            ALOGW("idmap: type %d supposedly has entries, but no entries found\n", i);
+            ALOGW("idmap: type %u supposedly has entries, but no entries found\n", (uint32_t)i);
             return UNKNOWN_ERROR;
         }
         *data++ = htodl(N - 1); // do not count the offset (which is vector's first element)
@@ -5818,6 +6065,8 @@
         printf("(null)\n");
     } else if (value.dataType == Res_value::TYPE_REFERENCE) {
         printf("(reference) 0x%08x\n", value.data);
+    } else if (value.dataType == Res_value::TYPE_DYNAMIC_REFERENCE) {
+        printf("(dynamic reference) 0x%08x\n", value.data);
     } else if (value.dataType == Res_value::TYPE_ATTRIBUTE) {
         printf("(attribute) 0x%08x\n", value.data);
     } else if (value.dataType == Res_value::TYPE_STRING) {
@@ -5900,6 +6149,11 @@
                         uint32_t resID = (0xff000000 & ((pkg->package->id)<<24))
                                     | (0x00ff0000 & ((typeIndex+1)<<16))
                                     | (0x0000ffff & (entryIndex));
+                        // Since we are creating resID without actually
+                        // iterating over them, we have no idea which is a
+                        // dynamic reference. We must check.
+                        pg->dynamicRefTable.lookupResourceId(&resID);
+
                         resource_name resName;
                         if (this->getResourceName(resID, true, &resName)) {
                             String8 type8;
@@ -5959,6 +6213,7 @@
                         uint32_t resID = (0xff000000 & ((pkg->package->id)<<24))
                                     | (0x00ff0000 & ((typeIndex+1)<<16))
                                     | (0x0000ffff & (entryIndex));
+                        pg->dynamicRefTable.lookupResourceId(&resID);
                         resource_name resName;
                         if (this->getResourceName(resID, true, &resName)) {
                             String8 type8;
@@ -6037,8 +6292,14 @@
                                 const uint8_t* baseMapPtr = (const uint8_t*)ent;
                                 size_t mapOffset = esize;
                                 const ResTable_map* mapPtr = (ResTable_map*)(baseMapPtr+mapOffset);
-                                printf("          Parent=0x%08x, Count=%d\n",
-                                    dtohl(bagPtr->parent.ident), N);
+                                const uint32_t parent = dtohl(bagPtr->parent.ident);
+                                uint32_t resolvedParent = parent;
+                                status_t err = pg->dynamicRefTable.lookupResourceId(&resolvedParent);
+                                if (err != NO_ERROR) {
+                                    resolvedParent = 0;
+                                }
+                                printf("          Parent=0x%08x(Resolved=0x%08x), Count=%d\n",
+                                        parent, resolvedParent, N);
                                 for (int i=0; i<N && mapOffset < (typeSize-sizeof(ResTable_map)); i++) {
                                     printf("          #%i (Key=0x%08x): ",
                                         i, dtohl(mapPtr->name.ident));
diff --git a/libs/androidfw/tests/Android.mk b/libs/androidfw/tests/Android.mk
index 977ba80..9e9649c 100644
--- a/libs/androidfw/tests/Android.mk
+++ b/libs/androidfw/tests/Android.mk
@@ -4,6 +4,7 @@
 
 # Build the unit tests.
 test_src_files := \
+    BackupData_test.cpp \
     ObbFile_test.cpp \
     ZipUtils_test.cpp \
     ResourceTypes_test.cpp
diff --git a/libs/androidfw/tests/BackupData_test.cpp b/libs/androidfw/tests/BackupData_test.cpp
new file mode 100644
index 0000000..17f91ca
--- /dev/null
+++ b/libs/androidfw/tests/BackupData_test.cpp
@@ -0,0 +1,438 @@
+/*
+ * Copyright (C) 2010 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.
+ */
+
+#define LOG_TAG "ObbFile_test"
+#include <androidfw/BackupHelpers.h>
+#include <utils/Log.h>
+#include <utils/String8.h>
+
+#include <gtest/gtest.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <string.h>
+
+namespace android {
+
+#define TEST_FILENAME "/test.bd"
+
+// keys of different lengths to test padding
+#define KEY1 "key1"
+#define KEY2 "key2a"
+#define KEY3 "key3bc"
+#define KEY4 "key4def"
+
+// payloads of different lengths to test padding
+#define DATA1 "abcdefg"
+#define DATA2 "hijklmnopq"
+#define DATA3 "rstuvwxyz"
+// KEY4 is only ever deleted
+
+class BackupDataTest : public testing::Test {
+protected:
+    char* m_external_storage;
+    char* m_filename;
+    String8 mKey1;
+    String8 mKey2;
+    String8 mKey3;
+    String8 mKey4;
+
+    virtual void SetUp() {
+        m_external_storage = getenv("EXTERNAL_STORAGE");
+
+        const int totalLen = strlen(m_external_storage) + strlen(TEST_FILENAME) + 1;
+        m_filename = new char[totalLen];
+        snprintf(m_filename, totalLen, "%s%s", m_external_storage, TEST_FILENAME);
+
+        ::unlink(m_filename);
+        int fd = ::open(m_filename, O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
+        if (fd < 0) {
+            FAIL() << "Couldn't create " << m_filename << " for writing";
+        }
+        mKey1 = String8(KEY1);
+        mKey2 = String8(KEY2);
+        mKey3 = String8(KEY3);
+        mKey4 = String8(KEY4);
+   }
+
+    virtual void TearDown() {
+    }
+};
+
+TEST_F(BackupDataTest, WriteAndReadSingle) {
+  int fd = ::open(m_filename, O_WRONLY);
+  BackupDataWriter* writer = new BackupDataWriter(fd);
+
+  EXPECT_EQ(NO_ERROR, writer->WriteEntityHeader(mKey1, sizeof(DATA1)))
+          << "WriteEntityHeader returned an error";
+  EXPECT_EQ(NO_ERROR, writer->WriteEntityData(DATA1, sizeof(DATA1)))
+          << "WriteEntityData returned an error";
+
+  ::close(fd);
+  fd = ::open(m_filename, O_RDONLY);
+  BackupDataReader* reader = new BackupDataReader(fd);
+  EXPECT_EQ(NO_ERROR, reader->Status())
+          << "Reader ctor failed";
+
+  bool done;
+  int type;
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader";
+
+  String8 key;
+  size_t dataSize;
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error";
+  EXPECT_EQ(mKey1, key)
+          << "wrong key from ReadEntityHeader";
+  EXPECT_EQ(sizeof(DATA1), dataSize)
+          << "wrong size from ReadEntityHeader";
+
+  char* dataBytes = new char[dataSize];
+  EXPECT_EQ((int) dataSize, reader->ReadEntityData(dataBytes, dataSize))
+          << "ReadEntityData returned an error";
+  for (unsigned int i = 0; i < sizeof(DATA1); i++) {
+    EXPECT_EQ(DATA1[i], dataBytes[i])
+             << "data character " << i << " should be equal";
+  }
+  delete dataBytes;
+  delete writer;
+  delete reader;
+}
+
+TEST_F(BackupDataTest, WriteAndReadMultiple) {
+  int fd = ::open(m_filename, O_WRONLY);
+  BackupDataWriter* writer = new BackupDataWriter(fd);
+  writer->WriteEntityHeader(mKey1, sizeof(DATA1));
+  writer->WriteEntityData(DATA1, sizeof(DATA1));
+  writer->WriteEntityHeader(mKey2, sizeof(DATA2));
+  writer->WriteEntityData(DATA2, sizeof(DATA2));
+
+  ::close(fd);
+  fd = ::open(m_filename, O_RDONLY);
+  BackupDataReader* reader = new BackupDataReader(fd);
+
+  bool done;
+  int type;
+  String8 key;
+  size_t dataSize;
+  char* dataBytes;
+  // read first entity
+  reader->ReadNextHeader(&done, &type);
+  reader->ReadEntityHeader(&key, &dataSize);
+  dataBytes = new char[dataSize];
+  reader->ReadEntityData(dataBytes, dataSize);
+  delete dataBytes;
+
+  // read and verify second entity
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on second entity";
+  EXPECT_EQ(mKey2, key)
+          << "wrong key from ReadEntityHeader on second entity";
+  EXPECT_EQ(sizeof(DATA2), dataSize)
+          << "wrong size from ReadEntityHeader on second entity";
+
+  dataBytes = new char[dataSize];
+  EXPECT_EQ((int)dataSize, reader->ReadEntityData(dataBytes, dataSize))
+          << "ReadEntityData returned an error on second entity";
+  for (unsigned int i = 0; i < sizeof(DATA2); i++) {
+    EXPECT_EQ(DATA2[i], dataBytes[i])
+             << "data character " << i << " should be equal";
+  }
+  delete dataBytes;
+  delete writer;
+  delete reader;
+}
+
+TEST_F(BackupDataTest, SkipEntity) {
+  int fd = ::open(m_filename, O_WRONLY);
+  BackupDataWriter* writer = new BackupDataWriter(fd);
+  writer->WriteEntityHeader(mKey1, sizeof(DATA1));
+  writer->WriteEntityData(DATA1, sizeof(DATA1));
+  writer->WriteEntityHeader(mKey2, sizeof(DATA2));
+  writer->WriteEntityData(DATA2, sizeof(DATA2));
+  writer->WriteEntityHeader(mKey3, sizeof(DATA3));
+  writer->WriteEntityData(DATA3, sizeof(DATA3));
+
+  ::close(fd);
+  fd = ::open(m_filename, O_RDONLY);
+  BackupDataReader* reader = new BackupDataReader(fd);
+
+  bool done;
+  int type;
+  String8 key;
+  size_t dataSize;
+  char* dataBytes;
+  // read first entity
+  reader->ReadNextHeader(&done, &type);
+  reader->ReadEntityHeader(&key, &dataSize);
+  dataBytes = new char[dataSize];
+  reader->ReadEntityData(dataBytes, dataSize);
+  delete dataBytes;
+
+  // skip second entity
+  reader->ReadNextHeader(&done, &type);
+  reader->ReadEntityHeader(&key, &dataSize);
+  reader->SkipEntityData();
+
+  // read and verify third entity
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader after skip";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on third entity";
+  EXPECT_EQ(mKey3, key)
+          << "wrong key from ReadEntityHeader on third entity";
+  EXPECT_EQ(sizeof(DATA3), dataSize)
+          << "wrong size from ReadEntityHeader on third entity";
+
+  dataBytes = new char[dataSize];
+  EXPECT_EQ((int) dataSize, reader->ReadEntityData(dataBytes, dataSize))
+          << "ReadEntityData returned an error on third entity";
+  for (unsigned int i = 0; i < sizeof(DATA3); i++) {
+    EXPECT_EQ(DATA3[i], dataBytes[i])
+             << "data character " << i << " should be equal";
+  }
+  delete dataBytes;
+  delete writer;
+  delete reader;
+}
+
+TEST_F(BackupDataTest, DeleteEntity) {
+  int fd = ::open(m_filename, O_WRONLY);
+  BackupDataWriter* writer = new BackupDataWriter(fd);
+  writer->WriteEntityHeader(mKey1, sizeof(DATA1));
+  writer->WriteEntityData(DATA1, sizeof(DATA1));
+  writer->WriteEntityHeader(mKey2, -1);
+
+  ::close(fd);
+  fd = ::open(m_filename, O_RDONLY);
+  BackupDataReader* reader = new BackupDataReader(fd);
+
+  bool done;
+  int type;
+  String8 key;
+  size_t dataSize;
+  char* dataBytes;
+  // read first entity
+  reader->ReadNextHeader(&done, &type);
+  reader->ReadEntityHeader(&key, &dataSize);
+  dataBytes = new char[dataSize];
+  reader->ReadEntityData(dataBytes, dataSize);
+  delete dataBytes;
+
+  // read and verify deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader on deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on second entity";
+  EXPECT_EQ(mKey2, key)
+          << "wrong key from ReadEntityHeader on second entity";
+  EXPECT_EQ(-1, (int) dataSize)
+          << "not recognizing deletion on second entity";
+
+  delete writer;
+  delete reader;
+}
+
+TEST_F(BackupDataTest, EneityAfterDelete) {
+  int fd = ::open(m_filename, O_WRONLY);
+  BackupDataWriter* writer = new BackupDataWriter(fd);
+  writer->WriteEntityHeader(mKey1, sizeof(DATA1));
+  writer->WriteEntityData(DATA1, sizeof(DATA1));
+  writer->WriteEntityHeader(mKey2, -1);
+  writer->WriteEntityHeader(mKey3, sizeof(DATA3));
+  writer->WriteEntityData(DATA3, sizeof(DATA3));
+
+  ::close(fd);
+  fd = ::open(m_filename, O_RDONLY);
+  BackupDataReader* reader = new BackupDataReader(fd);
+
+  bool done;
+  int type;
+  String8 key;
+  size_t dataSize;
+  char* dataBytes;
+  // read first entity
+  reader->ReadNextHeader(&done, &type);
+  reader->ReadEntityHeader(&key, &dataSize);
+  dataBytes = new char[dataSize];
+  reader->ReadEntityData(dataBytes, dataSize);
+  delete dataBytes;
+
+  // read and verify deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader on deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on second entity";
+  EXPECT_EQ(mKey2, key)
+          << "wrong key from ReadEntityHeader on second entity";
+  EXPECT_EQ(-1, (int)dataSize)
+          << "not recognizing deletion on second entity";
+
+  // read and verify third entity
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader after deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on third entity";
+  EXPECT_EQ(mKey3, key)
+          << "wrong key from ReadEntityHeader on third entity";
+  EXPECT_EQ(sizeof(DATA3), dataSize)
+          << "wrong size from ReadEntityHeader on third entity";
+
+  dataBytes = new char[dataSize];
+  EXPECT_EQ((int) dataSize, reader->ReadEntityData(dataBytes, dataSize))
+          << "ReadEntityData returned an error on third entity";
+  for (unsigned int i = 0; i < sizeof(DATA3); i++) {
+    EXPECT_EQ(DATA3[i], dataBytes[i])
+             << "data character " << i << " should be equal";
+  }
+  delete dataBytes;
+  delete writer;
+  delete reader;
+}
+
+TEST_F(BackupDataTest, OnlyDeleteEntities) {
+  int fd = ::open(m_filename, O_WRONLY);
+  BackupDataWriter* writer = new BackupDataWriter(fd);
+  writer->WriteEntityHeader(mKey1, -1);
+  writer->WriteEntityHeader(mKey2, -1);
+  writer->WriteEntityHeader(mKey3, -1);
+  writer->WriteEntityHeader(mKey4, -1);
+
+  ::close(fd);
+  fd = ::open(m_filename, O_RDONLY);
+  BackupDataReader* reader = new BackupDataReader(fd);
+
+  bool done;
+  int type;
+  String8 key;
+  size_t dataSize;
+  // read and verify first deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader first deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on first entity";
+  EXPECT_EQ(mKey1, key)
+          << "wrong key from ReadEntityHeader on first entity";
+  EXPECT_EQ(-1, (int) dataSize)
+          << "not recognizing deletion on first entity";
+
+  // read and verify second deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader second deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on second entity";
+  EXPECT_EQ(mKey2, key)
+          << "wrong key from ReadEntityHeader on second entity";
+  EXPECT_EQ(-1, (int) dataSize)
+          << "not recognizing deletion on second entity";
+
+  // read and verify third deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader third deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on third entity";
+  EXPECT_EQ(mKey3, key)
+          << "wrong key from ReadEntityHeader on third entity";
+  EXPECT_EQ(-1, (int) dataSize)
+          << "not recognizing deletion on third entity";
+
+  // read and verify fourth deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader fourth deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on fourth entity";
+  EXPECT_EQ(mKey4, key)
+          << "wrong key from ReadEntityHeader on fourth entity";
+  EXPECT_EQ(-1, (int) dataSize)
+          << "not recognizing deletion on fourth entity";
+
+  delete writer;
+  delete reader;
+}
+
+TEST_F(BackupDataTest, ReadDeletedEntityData) {
+  int fd = ::open(m_filename, O_WRONLY);
+  BackupDataWriter* writer = new BackupDataWriter(fd);
+  writer->WriteEntityHeader(mKey1, -1);
+  writer->WriteEntityHeader(mKey2, -1);
+
+  ::close(fd);
+  fd = ::open(m_filename, O_RDONLY);
+  BackupDataReader* reader = new BackupDataReader(fd);
+
+  bool done;
+  int type;
+  String8 key;
+  size_t dataSize;
+  // read and verify first deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader first deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on first entity";
+  EXPECT_EQ(mKey1, key)
+          << "wrong key from ReadEntityHeader on first entity";
+  EXPECT_EQ(-1, (int) dataSize)
+          << "not recognizing deletion on first entity";
+
+  // erroneously try to read first entity data
+  char* dataBytes = new char[10];
+  dataBytes[0] = 'A';
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityData(dataBytes, dataSize));
+  // expect dataBytes to be unmodofied
+  EXPECT_EQ('A', dataBytes[0]);
+
+  // read and verify second deletion
+  reader->ReadNextHeader(&done, &type);
+  EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
+          << "wrong type from ReadNextHeader second deletion";
+
+  EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
+          << "ReadEntityHeader returned an error on second entity";
+  EXPECT_EQ(mKey2, key)
+          << "wrong key from ReadEntityHeader on second entity";
+  EXPECT_EQ(-1, (int) dataSize)
+          << "not recognizing deletion on second entity";
+
+  delete writer;
+  delete reader;
+}
+
+}
diff --git a/libs/androidfw/tests/ObbFile_test.cpp b/libs/androidfw/tests/ObbFile_test.cpp
index 2c9f650..7a4dd13 100644
--- a/libs/androidfw/tests/ObbFile_test.cpp
+++ b/libs/androidfw/tests/ObbFile_test.cpp
@@ -91,7 +91,7 @@
     EXPECT_EQ(sizeof(salt), saltLen)
             << "salt sizes were not the same";
 
-    for (int i = 0; i < sizeof(salt); i++) {
+    for (size_t i = 0; i < sizeof(salt); i++) {
         EXPECT_EQ(salt[i], newSalt[i])
                 << "salt character " << i << " should be equal";
     }
diff --git a/libs/hwui/AmbientShadow.cpp b/libs/hwui/AmbientShadow.cpp
new file mode 100644
index 0000000..c1af5f5
--- /dev/null
+++ b/libs/hwui/AmbientShadow.cpp
@@ -0,0 +1,326 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#include <math.h>
+#include <utils/Log.h>
+#include <utils/Vector.h>
+
+#include "AmbientShadow.h"
+#include "ShadowTessellator.h"
+#include "Vertex.h"
+
+namespace android {
+namespace uirenderer {
+
+/**
+ * Calculate the shadows as a triangle strips while alpha value as the
+ * shadow values.
+ *
+ * @param isCasterOpaque Whether the caster is opaque.
+ * @param vertices The shadow caster's polygon, which is represented in a Vector3
+ *                  array.
+ * @param vertexCount The length of caster's polygon in terms of number of
+ *                    vertices.
+ * @param centroid3d The centroid of the shadow caster.
+ * @param heightFactor The factor showing the higher the object, the lighter the
+ *                     shadow.
+ * @param geomFactor The factor scaling the geometry expansion along the normal.
+ *
+ * @param shadowVertexBuffer Return an floating point array of (x, y, a)
+ *               triangle strips mode.
+ */
+VertexBufferMode AmbientShadow::createAmbientShadow(bool isCasterOpaque,
+        const Vector3* vertices, int vertexCount, const Vector3& centroid3d,
+        float heightFactor, float geomFactor, VertexBuffer& shadowVertexBuffer) {
+    const int rays = SHADOW_RAY_COUNT;
+    VertexBufferMode mode = kVertexBufferMode_OnePolyRingShadow;
+    // Validate the inputs.
+    if (vertexCount < 3 || heightFactor <= 0 || rays <= 0
+        || geomFactor <= 0) {
+#if DEBUG_SHADOW
+        ALOGW("Invalid input for createAmbientShadow(), early return!");
+#endif
+        return mode; // vertex buffer is empty, so any mode doesn't matter.
+    }
+
+    Vector<Vector2> dir; // TODO: use C++11 unique_ptr
+    dir.setCapacity(rays);
+    float rayDist[rays];
+    float rayHeight[rays];
+    calculateRayDirections(rays, vertices, vertexCount, centroid3d, dir.editArray());
+
+    // Calculate the length and height of the points along the edge.
+    //
+    // The math here is:
+    // Intersect each ray (starting from the centroid) with the polygon.
+    for (int i = 0; i < rays; i++) {
+        int edgeIndex;
+        float edgeFraction;
+        float rayDistance;
+        calculateIntersection(vertices, vertexCount, centroid3d, dir[i], edgeIndex,
+                edgeFraction, rayDistance);
+        rayDist[i] = rayDistance;
+        if (edgeIndex < 0 || edgeIndex >= vertexCount) {
+#if DEBUG_SHADOW
+            ALOGW("Invalid edgeIndex!");
+#endif
+            edgeIndex = 0;
+        }
+        float h1 = vertices[edgeIndex].z;
+        float h2 = vertices[((edgeIndex + 1) % vertexCount)].z;
+        rayHeight[i] = h1 + edgeFraction * (h2 - h1);
+    }
+
+    // The output buffer length basically is roughly rays * layers, but since we
+    // need triangle strips, so we need to duplicate vertices to accomplish that.
+    AlphaVertex* shadowVertices =
+            shadowVertexBuffer.alloc<AlphaVertex>(SHADOW_VERTEX_COUNT);
+
+    // Calculate the vertex of the shadows.
+    //
+    // The math here is:
+    // Along the edges of the polygon, for each intersection point P (generated above),
+    // calculate the normal N, which should be perpendicular to the edge of the
+    // polygon (represented by the neighbor intersection points) .
+    // Shadow's vertices will be generated as : P + N * scale.
+    const Vector2 centroid2d = Vector2(centroid3d.x, centroid3d.y);
+    for (int rayIndex = 0; rayIndex < rays; rayIndex++) {
+        Vector2 normal(1.0f, 0.0f);
+        calculateNormal(rays, rayIndex, dir.array(), rayDist, normal);
+
+        // The vertex should be start from rayDist[i] then scale the
+        // normalizeNormal!
+        Vector2 intersection = dir[rayIndex] * rayDist[rayIndex] +
+                centroid2d;
+
+        // outer ring of points, expanded based upon height of each ray intersection
+        float expansionDist = rayHeight[rayIndex] * heightFactor *
+                geomFactor;
+        AlphaVertex::set(&shadowVertices[rayIndex],
+                intersection.x + normal.x * expansionDist,
+                intersection.y + normal.y * expansionDist,
+                0.0f);
+
+        // inner ring of points
+        float opacity = 1.0 / (1 + rayHeight[rayIndex] * heightFactor);
+        AlphaVertex::set(&shadowVertices[rays + rayIndex],
+                intersection.x,
+                intersection.y,
+                opacity);
+    }
+
+    // If caster isn't opaque, we need to to fill the umbra by storing the umbra's
+    // centroid in the innermost ring of vertices.
+    if (!isCasterOpaque) {
+        mode = kVertexBufferMode_TwoPolyRingShadow;
+        float centroidAlpha = 1.0 / (1 + centroid3d.z * heightFactor);
+        AlphaVertex centroidXYA;
+        AlphaVertex::set(&centroidXYA, centroid2d.x, centroid2d.y, centroidAlpha);
+        for (int rayIndex = 0; rayIndex < rays; rayIndex++) {
+            shadowVertices[2 * rays + rayIndex] = centroidXYA;
+        }
+    }
+
+#if DEBUG_SHADOW
+    for (int i = 0; i < SHADOW_VERTEX_COUNT; i++) {
+        ALOGD("ambient shadow value: i %d, (x:%f, y:%f, a:%f)", i, shadowVertices[i].x,
+                shadowVertices[i].y, shadowVertices[i].alpha);
+    }
+#endif
+    return mode;
+}
+
+/**
+ * Generate an array of rays' direction vectors.
+ * To make sure the vertices generated are clockwise, the directions are from PI
+ * to -PI.
+ *
+ * @param rays The number of rays shooting out from the centroid.
+ * @param vertices Vertices of the polygon.
+ * @param vertexCount The number of vertices.
+ * @param centroid3d The centroid of the polygon.
+ * @param dir Return the array of ray vectors.
+ */
+void AmbientShadow::calculateRayDirections(const int rays, const Vector3* vertices,
+        const int vertexCount, const Vector3& centroid3d, Vector2* dir) {
+    // If we don't have enough rays, then fall back to the uniform distribution.
+    if (vertexCount * 2 > rays) {
+        float deltaAngle = 2 * M_PI / rays;
+        for (int i = 0; i < rays; i++) {
+            dir[i].x = cosf(M_PI - deltaAngle * i);
+            dir[i].y = sinf(M_PI - deltaAngle * i);
+        }
+        return;
+    }
+
+    // If we have enough rays, then we assign each vertices a ray, and distribute
+    // the rest uniformly.
+    float rayThetas[rays];
+
+    const int uniformRayCount = rays - vertexCount;
+    const float deltaAngle = 2 * M_PI / uniformRayCount;
+
+    // We have to generate all the vertices' theta anyway and we also need to
+    // find the minimal, so let's precompute it first.
+    // Since the incoming polygon is clockwise, we can find the dip to identify
+    // the minimal theta.
+    float polyThetas[vertexCount];
+    int maxPolyThetaIndex = 0;
+    for (int i = 0; i < vertexCount; i++) {
+        polyThetas[i] = atan2(vertices[i].y - centroid3d.y,
+                vertices[i].x - centroid3d.x);
+        if (i > 0 && polyThetas[i] > polyThetas[i - 1]) {
+            maxPolyThetaIndex = i;
+        }
+    }
+
+    // Both poly's thetas and uniform thetas are in decrease order(clockwise)
+    // from PI to -PI.
+    int polyThetaIndex = maxPolyThetaIndex;
+    float polyTheta = polyThetas[maxPolyThetaIndex];
+    int uniformThetaIndex = 0;
+    float uniformTheta = M_PI;
+    for (int i = 0; i < rays; i++) {
+        // Compare both thetas and pick the smaller one and move on.
+        bool hasThetaCollision = abs(polyTheta - uniformTheta) < MINIMAL_DELTA_THETA;
+        if (polyTheta > uniformTheta || hasThetaCollision) {
+            if (hasThetaCollision) {
+                // Shift the uniformTheta to middle way between current polyTheta
+                // and next uniform theta. The next uniform theta can wrap around
+                // to exactly PI safely here.
+                // Note that neither polyTheta nor uniformTheta can be FLT_MAX
+                // due to the hasThetaCollision is true.
+                uniformTheta = (polyTheta +  M_PI - deltaAngle * (uniformThetaIndex + 1)) / 2;
+#if DEBUG_SHADOW
+                ALOGD("Shifted uniformTheta to %f", uniformTheta);
+#endif
+            }
+            rayThetas[i] = polyTheta;
+            polyThetaIndex = (polyThetaIndex + 1) % vertexCount;
+            if (polyThetaIndex != maxPolyThetaIndex) {
+                polyTheta = polyThetas[polyThetaIndex];
+            } else {
+                // out of poly points.
+                polyTheta = - FLT_MAX;
+            }
+        } else {
+            rayThetas[i] = uniformTheta;
+            uniformThetaIndex++;
+            if (uniformThetaIndex < uniformRayCount) {
+                uniformTheta = M_PI - deltaAngle * uniformThetaIndex;
+            } else {
+                // out of uniform points.
+                uniformTheta = - FLT_MAX;
+            }
+        }
+    }
+
+    for (int i = 0; i < rays; i++) {
+#if DEBUG_SHADOW
+        ALOGD("No. %d : %f", i, rayThetas[i] * 180 / M_PI);
+#endif
+        // TODO: Fix the intersection precision problem and remvoe the delta added
+        // here.
+        dir[i].x = cosf(rayThetas[i] + MINIMAL_DELTA_THETA);
+        dir[i].y = sinf(rayThetas[i] + MINIMAL_DELTA_THETA);
+    }
+}
+
+/**
+ * Calculate the intersection of a ray hitting the polygon.
+ *
+ * @param vertices The shadow caster's polygon, which is represented in a
+ *                 Vector3 array.
+ * @param vertexCount The length of caster's polygon in terms of number of vertices.
+ * @param start The starting point of the ray.
+ * @param dir The direction vector of the ray.
+ *
+ * @param outEdgeIndex Return the index of the segment (or index of the starting
+ *                     vertex) that ray intersect with.
+ * @param outEdgeFraction Return the fraction offset from the segment starting
+ *                        index.
+ * @param outRayDist Return the ray distance from centroid to the intersection.
+ */
+void AmbientShadow::calculateIntersection(const Vector3* vertices, int vertexCount,
+        const Vector3& start, const Vector2& dir, int& outEdgeIndex,
+        float& outEdgeFraction, float& outRayDist) {
+    float startX = start.x;
+    float startY = start.y;
+    float dirX = dir.x;
+    float dirY = dir.y;
+    // Start the search from the last edge from poly[len-1] to poly[0].
+    int p1 = vertexCount - 1;
+
+    for (int p2 = 0; p2 < vertexCount; p2++) {
+        float p1x = vertices[p1].x;
+        float p1y = vertices[p1].y;
+        float p2x = vertices[p2].x;
+        float p2y = vertices[p2].y;
+
+        // The math here is derived from:
+        // f(t, v) = p1x * (1 - t) + p2x * t - (startX + dirX * v) = 0;
+        // g(t, v) = p1y * (1 - t) + p2y * t - (startY + dirY * v) = 0;
+        float div = (dirX * (p1y - p2y) + dirY * p2x - dirY * p1x);
+        if (div != 0) {
+            float t = (dirX * (p1y - startY) + dirY * startX - dirY * p1x) / (div);
+            if (t > 0 && t <= 1) {
+                float t2 = (p1x * (startY - p2y)
+                            + p2x * (p1y - startY)
+                            + startX * (p2y - p1y)) / div;
+                if (t2 > 0) {
+                    outEdgeIndex = p1;
+                    outRayDist = t2;
+                    outEdgeFraction = t;
+                    return;
+                }
+            }
+        }
+        p1 = p2;
+    }
+    return;
+};
+
+/**
+ * Calculate the normal at the intersection point between a ray and the polygon.
+ *
+ * @param rays The total number of rays.
+ * @param currentRayIndex The index of the ray which the normal is based on.
+ * @param dir The array of the all the rays directions.
+ * @param rayDist The pre-computed ray distances array.
+ *
+ * @param normal Return the normal.
+ */
+void AmbientShadow::calculateNormal(int rays, int currentRayIndex,
+        const Vector2* dir, const float* rayDist, Vector2& normal) {
+    int preIndex = (currentRayIndex - 1 + rays) % rays;
+    int postIndex = (currentRayIndex + 1) % rays;
+    Vector2 p1 = dir[preIndex] * rayDist[preIndex];
+    Vector2 p2 = dir[postIndex] * rayDist[postIndex];
+
+    // Now the rays are going CW around the poly.
+    Vector2 delta = p2 - p1;
+    if (delta.length() != 0) {
+        delta.normalize();
+        // Calculate the normal , which is CCW 90 rotate to the delta.
+        normal.x = - delta.y;
+        normal.y = delta.x;
+    }
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/AmbientShadow.h b/libs/hwui/AmbientShadow.h
new file mode 100644
index 0000000..451bfbe
--- /dev/null
+++ b/libs/hwui/AmbientShadow.h
@@ -0,0 +1,57 @@
+
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#ifndef ANDROID_HWUI_AMBIENT_SHADOW_H
+#define ANDROID_HWUI_AMBIENT_SHADOW_H
+
+#include "Debug.h"
+#include "OpenGLRenderer.h"
+#include "Vector.h"
+#include "VertexBuffer.h"
+
+namespace android {
+namespace uirenderer {
+
+/**
+ * AmbientShadow is used to calculate the ambient shadow value around a polygon.
+ *
+ * TODO: calculateIntersection() now is O(N*M), where N is the number of
+ * polygon's vertics and M is the number of rays. In fact, by staring tracing
+ * the vertex from the previous intersection, the algorithm can be O(N + M);
+ */
+class AmbientShadow {
+public:
+    static VertexBufferMode createAmbientShadow(bool isCasterOpaque, const Vector3* poly,
+            int polyLength, const Vector3& centroid3d, float heightFactor,
+            float geomFactor, VertexBuffer& shadowVertexBuffer);
+
+private:
+    static void calculateRayDirections(const int rays, const Vector3* vertices,
+            const int vertexCount, const Vector3& centroid3d, Vector2* dir);
+
+    static void calculateIntersection(const Vector3* poly, int nbVertices,
+            const Vector3& start, const Vector2& dir, int& outEdgeIndex,
+            float& outEdgeFraction, float& outRayDist);
+
+    static void calculateNormal(int rays, int currentRayIndex, const Vector2* dir,
+            const float* rayDist, Vector2& normal);
+}; // AmbientShadow
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_AMBIENT_SHADOW_H
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 411c133..d324439 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -4,18 +4,21 @@
 # Only build libhwui when USE_OPENGL_RENDERER is
 # defined in the current device/board configuration
 ifeq ($(USE_OPENGL_RENDERER),true)
-	LOCAL_SRC_FILES:= \
+	LOCAL_SRC_FILES := \
 		utils/Blur.cpp \
 		utils/SortedListImpl.cpp \
 		thread/TaskManager.cpp \
 		font/CacheTexture.cpp \
 		font/Font.cpp \
+		AmbientShadow.cpp \
+		Animator.cpp \
 		AssetAtlas.cpp \
 		FontRenderer.cpp \
 		GammaFontRenderer.cpp \
 		Caches.cpp \
 		DisplayList.cpp \
 		DeferredDisplayList.cpp \
+		DeferredLayerUpdater.cpp \
 		DisplayListLogBuffer.cpp \
 		DisplayListRenderer.cpp \
 		Dither.cpp \
@@ -23,6 +26,7 @@
 		FboCache.cpp \
 		GradientCache.cpp \
 		Image.cpp \
+		Interpolator.cpp \
 		Layer.cpp \
 		LayerCache.cpp \
 		LayerRenderer.cpp \
@@ -36,30 +40,40 @@
 		Program.cpp \
 		ProgramCache.cpp \
 		RenderBufferCache.cpp \
+		RenderNode.cpp \
+		RenderProperties.cpp \
 		ResourceCache.cpp \
-		SkiaColorFilter.cpp \
+		ShadowTessellator.cpp \
 		SkiaShader.cpp \
 		Snapshot.cpp \
+		SpotShadow.cpp \
+		StatefulBaseRenderer.cpp \
 		Stencil.cpp \
 		Texture.cpp \
 		TextureCache.cpp \
 		TextDropShadowCache.cpp
 
+	# RenderThread stuff
+	LOCAL_SRC_FILES += \
+		renderthread/CanvasContext.cpp \
+		renderthread/DrawFrameTask.cpp \
+		renderthread/RenderProxy.cpp \
+		renderthread/RenderTask.cpp \
+		renderthread/RenderThread.cpp
+
 	intermediates := $(call intermediates-dir-for,STATIC_LIBRARIES,libRS,TARGET,)
 
 	LOCAL_C_INCLUDES += \
 		$(JNI_H_INCLUDE) \
 		$(LOCAL_PATH)/../../include/utils \
-		external/skia/include/core \
-		external/skia/include/effects \
-		external/skia/include/images \
-		external/skia/src/core \
-		external/skia/src/ports \
-		external/skia/include/utils
+		external/skia/src/core
+
+	include external/stlport/libstlport.mk
 
 	LOCAL_CFLAGS += -DUSE_OPENGL_RENDERER -DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES
+	LOCAL_CFLAGS += -Wno-unused-parameter
 	LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-	LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libEGL libGLESv2 libskia libui
+	LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libEGL libGLESv2 libskia libui libgui
 	LOCAL_MODULE := libhwui
 	LOCAL_MODULE_TAGS := optional
 
diff --git a/libs/hwui/Animator.cpp b/libs/hwui/Animator.cpp
new file mode 100644
index 0000000..ee16586
--- /dev/null
+++ b/libs/hwui/Animator.cpp
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define LOG_TAG "RT-Animator"
+
+#include "Animator.h"
+
+#include <set>
+
+#include "RenderProperties.h"
+
+namespace android {
+namespace uirenderer {
+
+/************************************************************
+ *  Private header
+ ************************************************************/
+
+typedef void (RenderProperties::*SetFloatProperty)(float value);
+typedef float (RenderProperties::*GetFloatProperty)() const;
+
+struct PropertyAccessors {
+    GetFloatProperty getter;
+    SetFloatProperty setter;
+};
+
+// Maps RenderProperty enum to accessors
+static const PropertyAccessors PROPERTY_ACCESSOR_LUT[] = {
+    {&RenderProperties::getTranslationX, &RenderProperties::setTranslationX },
+    {&RenderProperties::getTranslationY, &RenderProperties::setTranslationY },
+    {&RenderProperties::getTranslationZ, &RenderProperties::setTranslationZ },
+    {&RenderProperties::getScaleX, &RenderProperties::setScaleX },
+    {&RenderProperties::getScaleY, &RenderProperties::setScaleY },
+    {&RenderProperties::getRotation, &RenderProperties::setRotation },
+    {&RenderProperties::getRotationX, &RenderProperties::setRotationX },
+    {&RenderProperties::getRotationY, &RenderProperties::setRotationY },
+    {&RenderProperties::getX, &RenderProperties::setX },
+    {&RenderProperties::getY, &RenderProperties::setY },
+    {&RenderProperties::getZ, &RenderProperties::setZ },
+    {&RenderProperties::getAlpha, &RenderProperties::setAlpha },
+};
+
+// Helper class to contain generic animator helpers
+class BaseAnimator {
+public:
+    BaseAnimator();
+    virtual ~BaseAnimator();
+
+    void setInterpolator(Interpolator* interpolator);
+    void setDuration(nsecs_t durationInMs);
+
+    bool isFinished() { return mPlayState == FINISHED; }
+
+protected:
+    // This is the main animation entrypoint that subclasses should call
+    // to generate the onAnimation* lifecycle events
+    // Returns true if the animation has finished, false otherwise
+    bool animateFrame(nsecs_t frameTime);
+
+    // Called when PlayState switches from PENDING to RUNNING
+    virtual void onAnimationStarted() {}
+    virtual void onAnimationUpdated(float fraction) = 0;
+    virtual void onAnimationFinished() {}
+
+private:
+    enum PlayState {
+        PENDING,
+        RUNNING,
+        FINISHED,
+    };
+
+    Interpolator* mInterpolator;
+    PlayState mPlayState;
+    long mStartTime;
+    long mDuration;
+};
+
+// Hide the base classes & private bits from the exported RenderPropertyAnimator
+// in this Impl class so that subclasses of RenderPropertyAnimator don't require
+// knowledge of the inner guts but only the public virtual methods.
+// Animates a single property
+class RenderPropertyAnimatorImpl : public BaseAnimator {
+public:
+    RenderPropertyAnimatorImpl(GetFloatProperty getter, SetFloatProperty setter,
+            RenderPropertyAnimator::DeltaValueType deltaType, float delta);
+    ~RenderPropertyAnimatorImpl();
+
+    bool animate(RenderProperties* target, TreeInfo& info);
+
+protected:
+    virtual void onAnimationStarted();
+    virtual void onAnimationUpdated(float fraction);
+
+private:
+    // mTarget is only valid inside animate()
+    RenderProperties* mTarget;
+    GetFloatProperty mGetter;
+    SetFloatProperty mSetter;
+
+    RenderPropertyAnimator::DeltaValueType mDeltaValueType;
+    float mDeltaValue;
+    float mFromValue;
+};
+
+RenderPropertyAnimator::RenderPropertyAnimator(RenderProperty property,
+        DeltaValueType deltaType, float deltaValue) {
+    PropertyAccessors pa = PROPERTY_ACCESSOR_LUT[property];
+    mImpl = new RenderPropertyAnimatorImpl(pa.getter, pa.setter, deltaType, deltaValue);
+}
+
+RenderPropertyAnimator::~RenderPropertyAnimator() {
+    delete mImpl;
+    mImpl = NULL;
+}
+
+void RenderPropertyAnimator::setInterpolator(Interpolator* interpolator) {
+    mImpl->setInterpolator(interpolator);
+}
+
+void RenderPropertyAnimator::setDuration(nsecs_t durationInMs) {
+    mImpl->setDuration(durationInMs);
+}
+
+bool RenderPropertyAnimator::isFinished() {
+    return mImpl->isFinished();
+}
+
+bool RenderPropertyAnimator::animate(RenderProperties* target, TreeInfo& info) {
+    return mImpl->animate(target, info);
+}
+
+
+/************************************************************
+ *  Base animator
+ ************************************************************/
+
+BaseAnimator::BaseAnimator()
+        : mInterpolator(0)
+        , mPlayState(PENDING)
+        , mStartTime(0)
+        , mDuration(300) {
+
+}
+
+BaseAnimator::~BaseAnimator() {
+    setInterpolator(NULL);
+}
+
+void BaseAnimator::setInterpolator(Interpolator* interpolator) {
+    delete mInterpolator;
+    mInterpolator = interpolator;
+}
+
+void BaseAnimator::setDuration(nsecs_t duration) {
+    mDuration = duration;
+}
+
+bool BaseAnimator::animateFrame(nsecs_t frameTime) {
+    if (mPlayState == PENDING) {
+        mPlayState = RUNNING;
+        mStartTime = frameTime;
+        // No interpolator was set, use the default
+        if (!mInterpolator) {
+            setInterpolator(Interpolator::createDefaultInterpolator());
+        }
+        onAnimationStarted();
+    }
+
+    float fraction = 1.0f;
+    if (mPlayState == RUNNING) {
+        fraction = mDuration > 0 ? (float)(frameTime - mStartTime) / mDuration : 1.0f;
+        if (fraction >= 1.0f) {
+            fraction = 1.0f;
+            mPlayState = FINISHED;
+        }
+    }
+    fraction = mInterpolator->interpolate(fraction);
+    onAnimationUpdated(fraction);
+
+    if (mPlayState == FINISHED) {
+        onAnimationFinished();
+        return true;
+    }
+    return false;
+}
+
+/************************************************************
+ *  RenderPropertyAnimator
+ ************************************************************/
+
+RenderPropertyAnimatorImpl::RenderPropertyAnimatorImpl(
+                GetFloatProperty getter, SetFloatProperty setter,
+                RenderPropertyAnimator::DeltaValueType deltaType, float delta)
+        : mTarget(0)
+        , mGetter(getter)
+        , mSetter(setter)
+        , mDeltaValueType(deltaType)
+        , mDeltaValue(delta)
+        , mFromValue(-1) {
+}
+
+RenderPropertyAnimatorImpl::~RenderPropertyAnimatorImpl() {
+}
+
+bool RenderPropertyAnimatorImpl::animate(RenderProperties* target, TreeInfo& info) {
+    mTarget = target;
+    bool finished = animateFrame(info.frameTimeMs);
+    mTarget = NULL;
+    return finished;
+}
+
+void RenderPropertyAnimatorImpl::onAnimationStarted() {
+    mFromValue = (mTarget->*mGetter)();
+
+    if (mDeltaValueType == RenderPropertyAnimator::ABSOLUTE) {
+        mDeltaValue = (mDeltaValue - mFromValue);
+        mDeltaValueType = RenderPropertyAnimator::DELTA;
+    }
+}
+
+void RenderPropertyAnimatorImpl::onAnimationUpdated(float fraction) {
+    float value = mFromValue + (mDeltaValue * fraction);
+    (mTarget->*mSetter)(value);
+}
+
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/Animator.h b/libs/hwui/Animator.h
new file mode 100644
index 0000000..1c8361b
--- /dev/null
+++ b/libs/hwui/Animator.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef ANIMATOR_H
+#define ANIMATOR_H
+
+#include <cutils/compiler.h>
+
+#include "Interpolator.h"
+#include "TreeInfo.h"
+#include "utils/VirtualLightRefBase.h"
+
+namespace android {
+namespace uirenderer {
+
+class RenderProperties;
+class RenderPropertyAnimatorImpl;
+
+class RenderPropertyAnimator : public VirtualLightRefBase {
+public:
+    // Since the UI thread doesn't necessarily know what the current values
+    // actually are and thus can't do the calculations, this is used to inform
+    // the animator how to lazy-resolve the input value
+    enum DeltaValueType {
+        // The delta value represents an absolute value endpoint
+        // mDeltaValue needs to be recalculated to be mDelta = (mDelta - fromValue)
+        // in onAnimationStarted()
+        ABSOLUTE = 0,
+        // The final value represents an offset from the current value
+        // No recalculation is needed
+        DELTA,
+    };
+
+    enum RenderProperty {
+        TRANSLATION_X = 0,
+        TRANSLATION_Y,
+        TRANSLATION_Z,
+        SCALE_X,
+        SCALE_Y,
+        ROTATION,
+        ROTATION_X,
+        ROTATION_Y,
+        X,
+        Y,
+        Z,
+        ALPHA,
+    };
+
+    ANDROID_API void setInterpolator(Interpolator* interpolator);
+    ANDROID_API void setDuration(nsecs_t durationInMs);
+    ANDROID_API bool isFinished();
+
+    bool animate(RenderProperties* target, TreeInfo& info);
+
+protected:
+    ANDROID_API RenderPropertyAnimator(RenderProperty property, DeltaValueType deltaType,
+            float deltaValue);
+    ANDROID_API virtual ~RenderPropertyAnimator();
+
+private:
+    RenderPropertyAnimatorImpl* mImpl;
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* ANIMATOR_H */
diff --git a/libs/hwui/AssetAtlas.cpp b/libs/hwui/AssetAtlas.cpp
index e8c3d3c..fc86e4f 100644
--- a/libs/hwui/AssetAtlas.cpp
+++ b/libs/hwui/AssetAtlas.cpp
@@ -74,12 +74,12 @@
 // Entries
 ///////////////////////////////////////////////////////////////////////////////
 
-AssetAtlas::Entry* AssetAtlas::getEntry(SkBitmap* const bitmap) const {
+AssetAtlas::Entry* AssetAtlas::getEntry(const SkBitmap* bitmap) const {
     ssize_t index = mEntries.indexOfKey(bitmap);
     return index >= 0 ? mEntries.valueAt(index) : NULL;
 }
 
-Texture* AssetAtlas::getEntryTexture(SkBitmap* const bitmap) const {
+Texture* AssetAtlas::getEntryTexture(const SkBitmap* bitmap) const {
     ssize_t index = mEntries.indexOfKey(bitmap);
     return index >= 0 ? mEntries.valueAt(index)->texture : NULL;
 }
diff --git a/libs/hwui/AssetAtlas.h b/libs/hwui/AssetAtlas.h
index 163bdbc..2ec556e 100644
--- a/libs/hwui/AssetAtlas.h
+++ b/libs/hwui/AssetAtlas.h
@@ -160,13 +160,13 @@
      * Returns the entry in the atlas associated with the specified
      * bitmap. If the bitmap is not in the atlas, return NULL.
      */
-    Entry* getEntry(SkBitmap* const bitmap) const;
+    Entry* getEntry(const SkBitmap* bitmap) const;
 
     /**
      * Returns the texture for the atlas entry associated with the
      * specified bitmap. If the bitmap is not in the atlas, return NULL.
      */
-    Texture* getEntryTexture(SkBitmap* const bitmap) const;
+    Texture* getEntryTexture(const SkBitmap* bitmap) const;
 
     /**
      * Returns the current generation id of the atlas.
@@ -186,7 +186,7 @@
     const bool mBlendKey;
     const bool mOpaqueKey;
 
-    KeyedVector<SkBitmap*, Entry*> mEntries;
+    KeyedVector<const SkBitmap*, Entry*> mEntries;
 }; // class AssetAtlas
 
 }; // namespace uirenderer
diff --git a/libs/hwui/Caches.cpp b/libs/hwui/Caches.cpp
index f8d3589..43223ec 100644
--- a/libs/hwui/Caches.cpp
+++ b/libs/hwui/Caches.cpp
@@ -23,6 +23,7 @@
 #include "DisplayListRenderer.h"
 #include "Properties.h"
 #include "LayerRenderer.h"
+#include "ShadowTessellator.h"
 
 namespace android {
 
@@ -55,6 +56,7 @@
     initProperties();
     initStaticProperties();
     initExtensions();
+    initTempProperties();
 
     mDebugLevel = readDebugLevel();
     ALOGD("Enabling debug mode %d", mDebugLevel);
@@ -85,7 +87,7 @@
 
     mRegionMesh = NULL;
     mMeshIndices = 0;
-
+    mShadowStripsIndices = 0;
     blend = false;
     lastSrcMode = GL_ZERO;
     lastDstMode = GL_ZERO;
@@ -222,6 +224,9 @@
     mMeshIndices = 0;
     mRegionMesh = NULL;
 
+    glDeleteBuffers(1, &mShadowStripsIndices);
+    mShadowStripsIndices = 0;
+
     fboCache.clear();
 
     programCache.clear();
@@ -310,24 +315,15 @@
     pathCache.clearGarbage();
     patchCache.clearGarbage();
 
-    Vector<DisplayList*> displayLists;
     Vector<Layer*> layers;
 
     { // scope for the lock
         Mutex::Autolock _l(mGarbageLock);
-        displayLists = mDisplayListGarbage;
         layers = mLayerGarbage;
-        mDisplayListGarbage.clear();
         mLayerGarbage.clear();
     }
 
-    size_t count = displayLists.size();
-    for (size_t i = 0; i < count; i++) {
-        DisplayList* displayList = displayLists.itemAt(i);
-        delete displayList;
-    }
-
-    count = layers.size();
+    size_t count = layers.size();
     for (size_t i = 0; i < count; i++) {
         Layer* layer = layers.itemAt(i);
         delete layer;
@@ -340,11 +336,6 @@
     mLayerGarbage.push(layer);
 }
 
-void Caches::deleteDisplayListDeferred(DisplayList* displayList) {
-    Mutex::Autolock _l(mGarbageLock);
-    mDisplayListGarbage.push(displayList);
-}
-
 void Caches::flush(FlushMode mode) {
     FLUSH_LOGD("Flushing caches (mode %d)", mode);
 
@@ -403,7 +394,7 @@
     return false;
 }
 
-bool Caches::bindIndicesBuffer(const GLuint buffer) {
+bool Caches::bindIndicesBufferInternal(const GLuint buffer) {
     if (mCurrentIndicesBuffer != buffer) {
         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffer);
         mCurrentIndicesBuffer = buffer;
@@ -412,7 +403,7 @@
     return false;
 }
 
-bool Caches::bindIndicesBuffer() {
+bool Caches::bindQuadIndicesBuffer() {
     if (!mMeshIndices) {
         uint16_t* regionIndices = new uint16_t[gMaxNumberOfQuads * 6];
         for (uint32_t i = 0; i < gMaxNumberOfQuads; i++) {
@@ -427,7 +418,7 @@
         }
 
         glGenBuffers(1, &mMeshIndices);
-        bool force = bindIndicesBuffer(mMeshIndices);
+        bool force = bindIndicesBufferInternal(mMeshIndices);
         glBufferData(GL_ELEMENT_ARRAY_BUFFER, gMaxNumberOfQuads * 6 * sizeof(uint16_t),
                 regionIndices, GL_STATIC_DRAW);
 
@@ -435,7 +426,23 @@
         return force;
     }
 
-    return bindIndicesBuffer(mMeshIndices);
+    return bindIndicesBufferInternal(mMeshIndices);
+}
+
+bool Caches::bindShadowIndicesBuffer() {
+    if (!mShadowStripsIndices) {
+        uint16_t* shadowIndices = new uint16_t[MAX_SHADOW_INDEX_COUNT];
+        ShadowTessellator::generateShadowIndices(shadowIndices);
+        glGenBuffers(1, &mShadowStripsIndices);
+        bool force = bindIndicesBufferInternal(mShadowStripsIndices);
+        glBufferData(GL_ELEMENT_ARRAY_BUFFER, MAX_SHADOW_INDEX_COUNT * sizeof(uint16_t),
+            shadowIndices, GL_STATIC_DRAW);
+
+        delete[] shadowIndices;
+        return force;
+    }
+
+    return bindIndicesBufferInternal(mShadowStripsIndices);
 }
 
 bool Caches::unbindIndicesBuffer() {
@@ -473,7 +480,7 @@
 // Meshes and textures
 ///////////////////////////////////////////////////////////////////////////////
 
-void Caches::bindPositionVertexPointer(bool force, GLvoid* vertices, GLsizei stride) {
+void Caches::bindPositionVertexPointer(bool force, const GLvoid* vertices, GLsizei stride) {
     if (force || vertices != mCurrentPositionPointer || stride != mCurrentPositionStride) {
         GLuint slot = currentProgram->position;
         glVertexAttribPointer(slot, 2, GL_FLOAT, GL_FALSE, stride, vertices);
@@ -482,7 +489,7 @@
     }
 }
 
-void Caches::bindTexCoordsVertexPointer(bool force, GLvoid* vertices, GLsizei stride) {
+void Caches::bindTexCoordsVertexPointer(bool force, const GLvoid* vertices, GLsizei stride) {
     if (force || vertices != mCurrentTexCoordsPointer || stride != mCurrentTexCoordsStride) {
         GLuint slot = currentProgram->texCoords;
         glVertexAttribPointer(slot, 2, GL_FLOAT, GL_FALSE, stride, vertices);
@@ -676,5 +683,49 @@
     return mRegionMesh;
 }
 
+///////////////////////////////////////////////////////////////////////////////
+// Temporary Properties
+///////////////////////////////////////////////////////////////////////////////
+
+void Caches::initTempProperties() {
+    propertyAmbientShadowStrength = 25;
+    propertySpotShadowStrength = 25;
+
+    propertyLightDiameter = -1.0f;
+    propertyLightPosY = -1.0f;
+    propertyLightPosZ = -1.0f;
+    propertyAmbientRatio = -1.0f;
+}
+
+void Caches::setTempProperty(const char* name, const char* value) {
+    ALOGD("setting property %s to %s", name, value);
+    if (!strcmp(name, "ambientShadowStrength")) {
+        propertyAmbientShadowStrength = atoi(value);
+        ALOGD("ambient shadow strength = 0x%x out of 0xff", propertyAmbientShadowStrength);
+        return;
+    } else if (!strcmp(name, "spotShadowStrength")) {
+        propertySpotShadowStrength = atoi(value);
+        ALOGD("spot shadow strength = 0x%x out of 0xff", propertySpotShadowStrength);
+        return;
+    } else if (!strcmp(name, "ambientRatio")) {
+        propertyAmbientRatio = fmin(fmax(atof(value), 0.0), 10.0);
+        ALOGD("ambientRatio = %.2f", propertyAmbientRatio);
+        return;
+    } else if (!strcmp(name, "lightDiameter")) {
+        propertyLightDiameter = fmin(fmax(atof(value), 0.0), 3000.0);
+        ALOGD("lightDiameter = %.2f", propertyLightDiameter);
+        return;
+    }  else if (!strcmp(name, "lightPosY")) {
+        propertyLightPosY = fmin(fmax(atof(value), 0.0), 3000.0);
+        ALOGD("lightPos Y = %.2f", propertyLightPosY);
+        return;
+    }  else if (!strcmp(name, "lightPosZ")) {
+        propertyLightPosZ = fmin(fmax(atof(value), 0.0), 3000.0);
+        ALOGD("lightPos Z = %.2f", propertyLightPosZ);
+        return;
+    }
+    ALOGD("    failed");
+}
+
 }; // namespace uirenderer
 }; // namespace android
diff --git a/libs/hwui/Caches.h b/libs/hwui/Caches.h
index 282aee9..2e2ee15 100644
--- a/libs/hwui/Caches.h
+++ b/libs/hwui/Caches.h
@@ -62,7 +62,7 @@
 static const uint32_t gMaxNumberOfQuads = 2048;
 
 // Generates simple and textured vertices
-#define FV(x, y, u, v) { { x, y }, { u, v } }
+#define FV(x, y, u, v) { x, y, u, v }
 
 // This array is never used directly but used as a memcpy source in the
 // OpenGLRenderer constructor
@@ -102,7 +102,7 @@
 // Caches
 ///////////////////////////////////////////////////////////////////////////////
 
-class DisplayList;
+class RenderNode;
 
 class ANDROID_API Caches: public Singleton<Caches> {
     Caches();
@@ -166,11 +166,6 @@
      */
     void deleteLayerDeferred(Layer* layer);
 
-    /*
-     * Can be used to delete a display list from a non EGL thread.
-     */
-    void deleteDisplayListDeferred(DisplayList* layer);
-
     /**
      * Binds the VBO used to render simple textured quads.
      */
@@ -190,8 +185,8 @@
      * Binds a global indices buffer that can draw up to
      * gMaxNumberOfQuads quads.
      */
-    bool bindIndicesBuffer();
-    bool bindIndicesBuffer(const GLuint buffer);
+    bool bindQuadIndicesBuffer();
+    bool bindShadowIndicesBuffer();
     bool unbindIndicesBuffer();
 
     /**
@@ -208,13 +203,13 @@
      * Binds an attrib to the specified float vertex pointer.
      * Assumes a stride of gMeshStride and a size of 2.
      */
-    void bindPositionVertexPointer(bool force, GLvoid* vertices, GLsizei stride = gMeshStride);
+    void bindPositionVertexPointer(bool force, const GLvoid* vertices, GLsizei stride = gMeshStride);
 
     /**
      * Binds an attrib to the specified float vertex pointer.
      * Assumes a stride of gMeshStride and a size of 2.
      */
-    void bindTexCoordsVertexPointer(bool force, GLvoid* vertices, GLsizei stride = gMeshStride);
+    void bindTexCoordsVertexPointer(bool force, const GLvoid* vertices, GLsizei stride = gMeshStride);
 
     /**
      * Resets the vertex pointers.
@@ -353,6 +348,17 @@
     PFNGLLABELOBJECTEXTPROC setLabel;
     PFNGLGETOBJECTLABELEXTPROC getLabel;
 
+    // TEMPORARY properties
+    void initTempProperties();
+    void setTempProperty(const char* name, const char* value);
+
+    float propertyLightDiameter;
+    float propertyLightPosY;
+    float propertyLightPosZ;
+    float propertyAmbientRatio;
+    int propertyAmbientShadowStrength;
+    int propertySpotShadowStrength;
+
 private:
     enum OverdrawColorSet {
         kColorSet_Default = 0,
@@ -364,6 +370,8 @@
     void initConstraints();
     void initStaticProperties();
 
+    bool bindIndicesBufferInternal(const GLuint buffer);
+
     static void eventMarkNull(GLsizei length, const GLchar* marker) { }
     static void startMarkNull(GLsizei length, const GLchar* marker) { }
     static void endMarkNull() { }
@@ -379,9 +387,9 @@
     GLuint mCurrentBuffer;
     GLuint mCurrentIndicesBuffer;
     GLuint mCurrentPixelBuffer;
-    void* mCurrentPositionPointer;
+    const void* mCurrentPositionPointer;
     GLsizei mCurrentPositionStride;
-    void* mCurrentTexCoordsPointer;
+    const void* mCurrentTexCoordsPointer;
     GLsizei mCurrentTexCoordsStride;
 
     bool mTexCoordsArrayEnabled;
@@ -400,10 +408,10 @@
 
     // Global index buffer
     GLuint mMeshIndices;
+    GLuint mShadowStripsIndices;
 
     mutable Mutex mGarbageLock;
     Vector<Layer*> mLayerGarbage;
-    Vector<DisplayList*> mDisplayListGarbage;
 
     DebugLevel mDebugLevel;
     bool mInitialized;
diff --git a/libs/hwui/Debug.h b/libs/hwui/Debug.h
index 786f12a..d6dc6ad 100644
--- a/libs/hwui/Debug.h
+++ b/libs/hwui/Debug.h
@@ -85,6 +85,9 @@
 // Turn on to highlight drawing batches and merged batches with different colors
 #define DEBUG_MERGE_BEHAVIOR 0
 
+// Turn on to enable debugging shadow
+#define DEBUG_SHADOW 0
+
 #if DEBUG_INIT
     #define INIT_LOGD(...) ALOGD(__VA_ARGS__)
 #else
diff --git a/libs/hwui/DeferredDisplayList.cpp b/libs/hwui/DeferredDisplayList.cpp
index 7eb7028..3d58964 100644
--- a/libs/hwui/DeferredDisplayList.cpp
+++ b/libs/hwui/DeferredDisplayList.cpp
@@ -224,6 +224,11 @@
 
         if (op->getPaintAlpha() != mOps[0].op->getPaintAlpha()) return false;
 
+        if (op->mPaint && mOps[0].op->mPaint &&
+            op->mPaint->getColorFilter() != mOps[0].op->mPaint->getColorFilter()) {
+            return false;
+        }
+
         /* Draw Modifiers compatibility check
          *
          * Shadows are ignored, as only text uses them, and in that case they are drawn
@@ -239,7 +244,6 @@
         const DrawModifiers& lhsMod = lhs->mDrawModifiers;
         const DrawModifiers& rhsMod = rhs->mDrawModifiers;
         if (lhsMod.mShader != rhsMod.mShader) return false;
-        if (lhsMod.mColorFilter != rhsMod.mColorFilter) return false;
 
         // Draw filter testing expects bit fields to be clear if filter not set.
         if (lhsMod.mHasDrawFilter != rhsMod.mHasDrawFilter) return false;
diff --git a/libs/hwui/DeferredDisplayList.h b/libs/hwui/DeferredDisplayList.h
index 3dcbd0b..fca3588 100644
--- a/libs/hwui/DeferredDisplayList.h
+++ b/libs/hwui/DeferredDisplayList.h
@@ -79,13 +79,13 @@
 };
 
 class DeferredDisplayList {
+    friend class DeferStateStruct; // used to give access to allocator
 public:
     DeferredDisplayList(const Rect& bounds, bool avoidOverdraw = true) :
             mBounds(bounds), mAvoidOverdraw(avoidOverdraw) {
         clear();
     }
     ~DeferredDisplayList() { clear(); }
-    void reset(const Rect& bounds) { mBounds.set(bounds); }
 
     enum OpBatchId {
         kOpBatch_None = 0, // Don't batch
@@ -120,6 +120,8 @@
     void addDrawOp(OpenGLRenderer& renderer, DrawOp* op);
 
 private:
+    DeferredDisplayList(const DeferredDisplayList& other); // disallow copy
+
     DeferredDisplayState* createState() {
         return new (mAllocator) DeferredDisplayState();
     }
diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp
new file mode 100644
index 0000000..285c8c3
--- /dev/null
+++ b/libs/hwui/DeferredLayerUpdater.cpp
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#include "DeferredLayerUpdater.h"
+
+#include "OpenGLRenderer.h"
+
+#include "LayerRenderer.h"
+
+namespace android {
+namespace uirenderer {
+
+DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer, OpenGLRenderer* renderer)
+        : mDisplayList(0)
+        , mSurfaceTexture(0)
+        , mTransform(0)
+        , mNeedsGLContextAttach(false)
+        , mUpdateTexImage(false)
+        , mLayer(layer)
+        , mCaches(Caches::getInstance()) {
+    mWidth = mLayer->layer.getWidth();
+    mHeight = mLayer->layer.getHeight();
+    mBlend = mLayer->isBlend();
+    mColorFilter = SkSafeRef(mLayer->getColorFilter());
+    mAlpha = mLayer->getAlpha();
+    mMode = mLayer->getMode();
+    mDirtyRect.setEmpty();
+}
+
+DeferredLayerUpdater::~DeferredLayerUpdater() {
+    SkSafeUnref(mColorFilter);
+    setTransform(0);
+    if (mLayer) {
+        mCaches.resourceCache.decrementRefcount(mLayer);
+    }
+}
+
+void DeferredLayerUpdater::setPaint(const SkPaint* paint) {
+    OpenGLRenderer::getAlphaAndModeDirect(paint, &mAlpha, &mMode);
+    SkColorFilter* colorFilter = (paint) ? paint->getColorFilter() : NULL;
+    SkRefCnt_SafeAssign(mColorFilter, colorFilter);
+}
+
+void DeferredLayerUpdater::setDisplayList(RenderNode* displayList,
+        int left, int top, int right, int bottom) {
+    mDisplayList = displayList;
+    if (mDirtyRect.isEmpty()) {
+        mDirtyRect.set(left, top, right, bottom);
+    } else {
+        mDirtyRect.unionWith(Rect(left, top, right, bottom));
+    }
+}
+
+bool DeferredLayerUpdater::apply(TreeInfo& info) {
+    bool success = true;
+    // These properties are applied the same to both layer types
+    mLayer->setColorFilter(mColorFilter);
+    mLayer->setAlpha(mAlpha, mMode);
+
+    if (mDisplayList.get()) {
+        if (mWidth != mLayer->layer.getWidth() || mHeight != mLayer->layer.getHeight()) {
+            success = LayerRenderer::resizeLayer(mLayer, mWidth, mHeight);
+        }
+        mLayer->setBlend(mBlend);
+        mDisplayList->prepareTree(info);
+        mLayer->updateDeferred(mDisplayList.get(),
+                mDirtyRect.left, mDirtyRect.top, mDirtyRect.right, mDirtyRect.bottom);
+        mDirtyRect.setEmpty();
+        mDisplayList = 0;
+    } else if (mSurfaceTexture.get()) {
+        if (mNeedsGLContextAttach) {
+            mNeedsGLContextAttach = false;
+            mSurfaceTexture->attachToContext(mLayer->getTexture());
+        }
+        if (mUpdateTexImage) {
+            mUpdateTexImage = false;
+            doUpdateTexImage();
+        }
+        if (mTransform) {
+            mLayer->getTransform().load(*mTransform);
+            setTransform(0);
+        }
+    }
+    return success;
+}
+
+void DeferredLayerUpdater::doUpdateTexImage() {
+    if (mSurfaceTexture->updateTexImage() == NO_ERROR) {
+        float transform[16];
+
+        int64_t frameNumber = mSurfaceTexture->getFrameNumber();
+        // If the GLConsumer queue is in synchronous mode, need to discard all
+        // but latest frame, using the frame number to tell when we no longer
+        // have newer frames to target. Since we can't tell which mode it is in,
+        // do this unconditionally.
+        int dropCounter = 0;
+        while (mSurfaceTexture->updateTexImage() == NO_ERROR) {
+            int64_t newFrameNumber = mSurfaceTexture->getFrameNumber();
+            if (newFrameNumber == frameNumber) break;
+            frameNumber = newFrameNumber;
+            dropCounter++;
+        }
+
+        bool forceFilter = false;
+        sp<GraphicBuffer> buffer = mSurfaceTexture->getCurrentBuffer();
+        if (buffer != NULL) {
+            // force filtration if buffer size != layer size
+            forceFilter = mWidth != buffer->getWidth()
+                    || mHeight != buffer->getHeight();
+        }
+
+        #if DEBUG_RENDERER
+        if (dropCounter > 0) {
+            RENDERER_LOGD("Dropped %d frames on texture layer update", dropCounter);
+        }
+        #endif
+        mSurfaceTexture->getTransformMatrix(transform);
+        GLenum renderTarget = mSurfaceTexture->getCurrentTextureTarget();
+
+        LayerRenderer::updateTextureLayer(mLayer, mWidth, mHeight,
+                !mBlend, forceFilter, renderTarget, transform);
+    }
+}
+
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/DeferredLayerUpdater.h b/libs/hwui/DeferredLayerUpdater.h
new file mode 100644
index 0000000..cc62caa
--- /dev/null
+++ b/libs/hwui/DeferredLayerUpdater.h
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef DEFERREDLAYERUPDATE_H_
+#define DEFERREDLAYERUPDATE_H_
+
+#include <cutils/compiler.h>
+#include <gui/GLConsumer.h>
+#include <SkColorFilter.h>
+#include <SkMatrix.h>
+#include <utils/StrongPointer.h>
+
+#include "Layer.h"
+#include "OpenGLRenderer.h"
+#include "Rect.h"
+#include "RenderNode.h"
+
+namespace android {
+namespace uirenderer {
+
+// Container to hold the properties a layer should be set to at the start
+// of a render pass
+class DeferredLayerUpdater {
+public:
+    // Note that DeferredLayerUpdater assumes it is taking ownership of the layer
+    // and will not call incrementRef on it as a result.
+    ANDROID_API DeferredLayerUpdater(Layer* layer, OpenGLRenderer* renderer = 0);
+    ANDROID_API ~DeferredLayerUpdater();
+
+    ANDROID_API bool setSize(uint32_t width, uint32_t height) {
+        if (mWidth != width || mHeight != height) {
+            mWidth = width;
+            mHeight = height;
+            return true;
+        }
+        return false;
+    }
+
+    ANDROID_API bool setBlend(bool blend) {
+        if (blend != mBlend) {
+            mBlend = blend;
+            return true;
+        }
+        return false;
+    }
+
+    ANDROID_API void setSurfaceTexture(const sp<GLConsumer>& texture, bool needsAttach) {
+        if (texture.get() != mSurfaceTexture.get()) {
+            mNeedsGLContextAttach = needsAttach;
+            mSurfaceTexture = texture;
+        }
+    }
+
+    ANDROID_API void updateTexImage() {
+        mUpdateTexImage = true;
+    }
+
+    ANDROID_API void setTransform(const SkMatrix* matrix) {
+        delete mTransform;
+        mTransform = matrix ? new SkMatrix(*matrix) : 0;
+    }
+
+    ANDROID_API void setDisplayList(RenderNode* displayList,
+                int left, int top, int right, int bottom);
+
+    ANDROID_API void setPaint(const SkPaint* paint);
+
+    ANDROID_API bool apply(TreeInfo& info);
+
+    ANDROID_API Layer* backingLayer() {
+        return mLayer;
+    }
+
+    ANDROID_API Layer* detachBackingLayer() {
+        Layer* layer = mLayer;
+        mLayer = 0;
+        return layer;
+    }
+
+private:
+    // Generic properties
+    uint32_t mWidth;
+    uint32_t mHeight;
+    bool mBlend;
+    SkColorFilter* mColorFilter;
+    int mAlpha;
+    SkXfermode::Mode mMode;
+
+    // Layer type specific properties
+    // displayList and surfaceTexture are mutually exclusive, only 1 may be set
+    // dirtyRect is only valid if displayList is set
+    sp<RenderNode> mDisplayList;
+    Rect mDirtyRect;
+    sp<GLConsumer> mSurfaceTexture;
+    SkMatrix* mTransform;
+    bool mNeedsGLContextAttach;
+    bool mUpdateTexImage;
+
+    Layer* mLayer;
+    Caches& mCaches;
+
+    void doUpdateTexImage();
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* DEFERREDLAYERUPDATE_H_ */
diff --git a/libs/hwui/DisplayList.cpp b/libs/hwui/DisplayList.cpp
index bb6526e..dac86cb 100644
--- a/libs/hwui/DisplayList.cpp
+++ b/libs/hwui/DisplayList.cpp
@@ -14,7 +14,12 @@
  * limitations under the License.
  */
 
+#define ATRACE_TAG ATRACE_TAG_VIEW
+
 #include <SkCanvas.h>
+#include <algorithm>
+
+#include <utils/Trace.h>
 
 #include "Debug.h"
 #include "DisplayList.h"
@@ -24,533 +29,83 @@
 namespace android {
 namespace uirenderer {
 
-void DisplayList::outputLogBuffer(int fd) {
-    DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
-    if (logBuffer.isEmpty()) {
-        return;
-    }
-
-    FILE *file = fdopen(fd, "a");
-
-    fprintf(file, "\nRecent DisplayList operations\n");
-    logBuffer.outputCommands(file);
-
-    String8 cachesLog;
-    Caches::getInstance().dumpMemoryUsage(cachesLog);
-    fprintf(file, "\nCaches:\n%s", cachesLog.string());
-    fprintf(file, "\n");
-
-    fflush(file);
+DisplayListData::DisplayListData()
+        : projectionReceiveIndex(-1)
+        , functorCount(0)
+        , hasDrawOps(false) {
 }
 
-DisplayList::DisplayList(const DisplayListRenderer& recorder) :
-    mDestroyed(false), mTransformMatrix(NULL), mTransformCamera(NULL), mTransformMatrix3D(NULL),
-    mStaticMatrix(NULL), mAnimationMatrix(NULL) {
-
-    initFromDisplayListRenderer(recorder);
+DisplayListData::~DisplayListData() {
+    cleanupResources();
 }
 
-DisplayList::~DisplayList() {
-    mDestroyed = true;
-    clearResources();
-}
-
-void DisplayList::destroyDisplayListDeferred(DisplayList* displayList) {
-    if (displayList) {
-        DISPLAY_LIST_LOGD("Deferring display list destruction");
-        Caches::getInstance().deleteDisplayListDeferred(displayList);
-    }
-}
-
-void DisplayList::clearResources() {
-    mDisplayListData = NULL;
-
-    mClipRectOp = NULL;
-    mSaveLayerOp = NULL;
-    mSaveOp = NULL;
-    mRestoreToCountOp = NULL;
-
-    delete mTransformMatrix;
-    delete mTransformCamera;
-    delete mTransformMatrix3D;
-    delete mStaticMatrix;
-    delete mAnimationMatrix;
-
-    mTransformMatrix = NULL;
-    mTransformCamera = NULL;
-    mTransformMatrix3D = NULL;
-    mStaticMatrix = NULL;
-    mAnimationMatrix = NULL;
-
+void DisplayListData::cleanupResources() {
     Caches& caches = Caches::getInstance();
-    caches.unregisterFunctors(mFunctorCount);
+    caches.unregisterFunctors(functorCount);
     caches.resourceCache.lock();
 
-    for (size_t i = 0; i < mBitmapResources.size(); i++) {
-        caches.resourceCache.decrementRefcountLocked(mBitmapResources.itemAt(i));
+    for (size_t i = 0; i < bitmapResources.size(); i++) {
+        caches.resourceCache.decrementRefcountLocked(bitmapResources.itemAt(i));
     }
 
-    for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) {
-        SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i);
+    for (size_t i = 0; i < ownedBitmapResources.size(); i++) {
+        const SkBitmap* bitmap = ownedBitmapResources.itemAt(i);
         caches.resourceCache.decrementRefcountLocked(bitmap);
         caches.resourceCache.destructorLocked(bitmap);
     }
 
-    for (size_t i = 0; i < mFilterResources.size(); i++) {
-        caches.resourceCache.decrementRefcountLocked(mFilterResources.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mPatchResources.size(); i++) {
-        caches.resourceCache.decrementRefcountLocked(mPatchResources.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mShaders.size(); i++) {
-        caches.resourceCache.decrementRefcountLocked(mShaders.itemAt(i));
-        caches.resourceCache.destructorLocked(mShaders.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mSourcePaths.size(); i++) {
-        caches.resourceCache.decrementRefcountLocked(mSourcePaths.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mLayers.size(); i++) {
-        caches.resourceCache.decrementRefcountLocked(mLayers.itemAt(i));
-    }
-
-    caches.resourceCache.unlock();
-
-    for (size_t i = 0; i < mPaints.size(); i++) {
-        delete mPaints.itemAt(i);
-    }
-
-    for (size_t i = 0; i < mRegions.size(); i++) {
-        delete mRegions.itemAt(i);
-    }
-
-    for (size_t i = 0; i < mPaths.size(); i++) {
-        delete mPaths.itemAt(i);
-    }
-
-    for (size_t i = 0; i < mMatrices.size(); i++) {
-        delete mMatrices.itemAt(i);
-    }
-
-    mBitmapResources.clear();
-    mOwnedBitmapResources.clear();
-    mFilterResources.clear();
-    mPatchResources.clear();
-    mShaders.clear();
-    mSourcePaths.clear();
-    mPaints.clear();
-    mRegions.clear();
-    mPaths.clear();
-    mMatrices.clear();
-    mLayers.clear();
-}
-
-void DisplayList::reset() {
-    clearResources();
-    init();
-}
-
-void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing) {
-    if (reusing) {
-        // re-using display list - clear out previous allocations
-        clearResources();
-    }
-
-    init();
-
-    mDisplayListData = recorder.getDisplayListData();
-    mSize = mDisplayListData->allocator.usedSize();
-
-    if (mSize == 0) {
-        return;
-    }
-
-    // allocate reusable ops for state-deferral
-    LinearAllocator& alloc = mDisplayListData->allocator;
-    mClipRectOp = new (alloc) ClipRectOp();
-    mSaveLayerOp = new (alloc) SaveLayerOp();
-    mSaveOp = new (alloc) SaveOp();
-    mRestoreToCountOp = new (alloc) RestoreToCountOp();
-    if (CC_UNLIKELY(!mSaveOp)) { // temporary debug logging
-        ALOGW("Error: %s's SaveOp not allocated, size %d", getName(), mSize);
-        CRASH();
-    }
-
-    mFunctorCount = recorder.getFunctorCount();
-
-    Caches& caches = Caches::getInstance();
-    caches.registerFunctors(mFunctorCount);
-    caches.resourceCache.lock();
-
-    const Vector<SkBitmap*>& bitmapResources = recorder.getBitmapResources();
-    for (size_t i = 0; i < bitmapResources.size(); i++) {
-        SkBitmap* resource = bitmapResources.itemAt(i);
-        mBitmapResources.add(resource);
-        caches.resourceCache.incrementRefcountLocked(resource);
-    }
-
-    const Vector<SkBitmap*> &ownedBitmapResources = recorder.getOwnedBitmapResources();
-    for (size_t i = 0; i < ownedBitmapResources.size(); i++) {
-        SkBitmap* resource = ownedBitmapResources.itemAt(i);
-        mOwnedBitmapResources.add(resource);
-        caches.resourceCache.incrementRefcountLocked(resource);
-    }
-
-    const Vector<SkiaColorFilter*>& filterResources = recorder.getFilterResources();
-    for (size_t i = 0; i < filterResources.size(); i++) {
-        SkiaColorFilter* resource = filterResources.itemAt(i);
-        mFilterResources.add(resource);
-        caches.resourceCache.incrementRefcountLocked(resource);
-    }
-
-    const Vector<Res_png_9patch*>& patchResources = recorder.getPatchResources();
     for (size_t i = 0; i < patchResources.size(); i++) {
-        Res_png_9patch* resource = patchResources.itemAt(i);
-        mPatchResources.add(resource);
-        caches.resourceCache.incrementRefcountLocked(resource);
+        caches.resourceCache.decrementRefcountLocked(patchResources.itemAt(i));
     }
 
-    const Vector<SkiaShader*>& shaders = recorder.getShaders();
     for (size_t i = 0; i < shaders.size(); i++) {
-        SkiaShader* resource = shaders.itemAt(i);
-        mShaders.add(resource);
-        caches.resourceCache.incrementRefcountLocked(resource);
+        caches.resourceCache.decrementRefcountLocked(shaders.itemAt(i));
+        caches.resourceCache.destructorLocked(shaders.itemAt(i));
     }
 
-    const SortedVector<SkPath*>& sourcePaths = recorder.getSourcePaths();
     for (size_t i = 0; i < sourcePaths.size(); i++) {
-        mSourcePaths.add(sourcePaths.itemAt(i));
-        caches.resourceCache.incrementRefcountLocked(sourcePaths.itemAt(i));
+        caches.resourceCache.decrementRefcountLocked(sourcePaths.itemAt(i));
     }
 
-    const Vector<Layer*>& layers = recorder.getLayers();
     for (size_t i = 0; i < layers.size(); i++) {
-        mLayers.add(layers.itemAt(i));
-        caches.resourceCache.incrementRefcountLocked(layers.itemAt(i));
+        caches.resourceCache.decrementRefcountLocked(layers.itemAt(i));
     }
 
     caches.resourceCache.unlock();
 
-    mPaints.appendVector(recorder.getPaints());
-    mRegions.appendVector(recorder.getRegions());
-    mPaths.appendVector(recorder.getPaths());
-    mMatrices.appendVector(recorder.getMatrices());
+    for (size_t i = 0; i < paints.size(); i++) {
+        delete paints.itemAt(i);
+    }
+
+    for (size_t i = 0; i < regions.size(); i++) {
+        delete regions.itemAt(i);
+    }
+
+    for (size_t i = 0; i < paths.size(); i++) {
+        delete paths.itemAt(i);
+    }
+
+    for (size_t i = 0; i < matrices.size(); i++) {
+        delete matrices.itemAt(i);
+    }
+
+    bitmapResources.clear();
+    ownedBitmapResources.clear();
+    patchResources.clear();
+    shaders.clear();
+    sourcePaths.clear();
+    paints.clear();
+    regions.clear();
+    paths.clear();
+    matrices.clear();
+    layers.clear();
 }
 
-void DisplayList::init() {
-    mSize = 0;
-    mIsRenderable = true;
-    mFunctorCount = 0;
-    mLeft = 0;
-    mTop = 0;
-    mRight = 0;
-    mBottom = 0;
-    mClipToBounds = true;
-    mAlpha = 1;
-    mHasOverlappingRendering = true;
-    mTranslationX = 0;
-    mTranslationY = 0;
-    mRotation = 0;
-    mRotationX = 0;
-    mRotationY= 0;
-    mScaleX = 1;
-    mScaleY = 1;
-    mPivotX = 0;
-    mPivotY = 0;
-    mCameraDistance = 0;
-    mMatrixDirty = false;
-    mMatrixFlags = 0;
-    mPrevWidth = -1;
-    mPrevHeight = -1;
-    mWidth = 0;
-    mHeight = 0;
-    mPivotExplicitlySet = false;
-    mCaching = false;
-}
+void DisplayListData::addChild(DrawDisplayListOp* op) {
+    LOG_ALWAYS_FATAL_IF(!op->renderNode(), "DrawDisplayListOp with no render node!");
 
-size_t DisplayList::getSize() {
-    return mSize;
-}
-
-/**
- * This function is a simplified version of replay(), where we simply retrieve and log the
- * display list. This function should remain in sync with the replay() function.
- */
-void DisplayList::output(uint32_t level) {
-    ALOGD("%*sStart display list (%p, %s, render=%d)", (level - 1) * 2, "", this,
-            mName.string(), isRenderable());
-    ALOGD("%*s%s %d", level * 2, "", "Save",
-            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
-
-    outputViewProperties(level);
-    int flags = DisplayListOp::kOpLogFlag_Recurse;
-    for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) {
-        mDisplayListData->displayListOps[i]->output(level, flags);
-    }
-
-    ALOGD("%*sDone (%p, %s)", (level - 1) * 2, "", this, mName.string());
-}
-
-float DisplayList::getPivotX() {
-    updateMatrix();
-    return mPivotX;
-}
-
-float DisplayList::getPivotY() {
-    updateMatrix();
-    return mPivotY;
-}
-
-void DisplayList::updateMatrix() {
-    if (mMatrixDirty) {
-        if (!mTransformMatrix) {
-            mTransformMatrix = new SkMatrix();
-        }
-        if (mMatrixFlags == 0 || mMatrixFlags == TRANSLATION) {
-            mTransformMatrix->reset();
-        } else {
-            if (!mPivotExplicitlySet) {
-                if (mWidth != mPrevWidth || mHeight != mPrevHeight) {
-                    mPrevWidth = mWidth;
-                    mPrevHeight = mHeight;
-                    mPivotX = mPrevWidth / 2.0f;
-                    mPivotY = mPrevHeight / 2.0f;
-                }
-            }
-            if ((mMatrixFlags & ROTATION_3D) == 0) {
-                mTransformMatrix->setTranslate(mTranslationX, mTranslationY);
-                mTransformMatrix->preRotate(mRotation, mPivotX, mPivotY);
-                mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY);
-            } else {
-                if (!mTransformCamera) {
-                    mTransformCamera = new Sk3DView();
-                    mTransformMatrix3D = new SkMatrix();
-                }
-                mTransformMatrix->reset();
-                mTransformCamera->save();
-                mTransformMatrix->preScale(mScaleX, mScaleY, mPivotX, mPivotY);
-                mTransformCamera->rotateX(mRotationX);
-                mTransformCamera->rotateY(mRotationY);
-                mTransformCamera->rotateZ(-mRotation);
-                mTransformCamera->getMatrix(mTransformMatrix3D);
-                mTransformMatrix3D->preTranslate(-mPivotX, -mPivotY);
-                mTransformMatrix3D->postTranslate(mPivotX + mTranslationX,
-                        mPivotY + mTranslationY);
-                mTransformMatrix->postConcat(*mTransformMatrix3D);
-                mTransformCamera->restore();
-            }
-        }
-        mMatrixDirty = false;
-    }
-}
-
-void DisplayList::outputViewProperties(const int level) {
-    updateMatrix();
-    if (mLeft != 0 || mTop != 0) {
-        ALOGD("%*sTranslate (left, top) %d, %d", level * 2, "", mLeft, mTop);
-    }
-    if (mStaticMatrix) {
-        ALOGD("%*sConcatMatrix (static) %p: " MATRIX_STRING,
-                level * 2, "", mStaticMatrix, MATRIX_ARGS(mStaticMatrix));
-    }
-    if (mAnimationMatrix) {
-        ALOGD("%*sConcatMatrix (animation) %p: " MATRIX_STRING,
-                level * 2, "", mAnimationMatrix, MATRIX_ARGS(mAnimationMatrix));
-    }
-    if (mMatrixFlags != 0) {
-        if (mMatrixFlags == TRANSLATION) {
-            ALOGD("%*sTranslate %f, %f", level * 2, "", mTranslationX, mTranslationY);
-        } else {
-            ALOGD("%*sConcatMatrix %p: " MATRIX_STRING,
-                    level * 2, "", mTransformMatrix, MATRIX_ARGS(mTransformMatrix));
-        }
-    }
-
-    bool clipToBoundsNeeded = mCaching ? false : mClipToBounds;
-    if (mAlpha < 1) {
-        if (mCaching) {
-            ALOGD("%*sSetOverrideLayerAlpha %.2f", level * 2, "", mAlpha);
-        } else if (!mHasOverlappingRendering) {
-            ALOGD("%*sScaleAlpha %.2f", level * 2, "", mAlpha);
-        } else {
-            int flags = SkCanvas::kHasAlphaLayer_SaveFlag;
-            if (clipToBoundsNeeded) {
-                flags |= SkCanvas::kClipToLayer_SaveFlag;
-                clipToBoundsNeeded = false; // clipping done by save layer
-            }
-            ALOGD("%*sSaveLayerAlpha %.2f, %.2f, %.2f, %.2f, %d, 0x%x", level * 2, "",
-                    (float) 0, (float) 0, (float) mRight - mLeft, (float) mBottom - mTop,
-                    (int)(mAlpha * 255), flags);
-        }
-    }
-    if (clipToBoundsNeeded) {
-        ALOGD("%*sClipRect %.2f, %.2f, %.2f, %.2f", level * 2, "", 0.0f, 0.0f,
-                (float) mRight - mLeft, (float) mBottom - mTop);
-    }
-}
-
-/*
- * For property operations, we pass a savecount of 0, since the operations aren't part of the
- * displaylist, and thus don't have to compensate for the record-time/playback-time discrepancy in
- * base saveCount (i.e., how RestoreToCount uses saveCount + mCount)
- */
-#define PROPERTY_SAVECOUNT 0
-
-template <class T>
-void DisplayList::setViewProperties(OpenGLRenderer& renderer, T& handler,
-        const int level) {
-#if DEBUG_DISPLAY_LIST
-    outputViewProperties(level);
-#endif
-    updateMatrix();
-    if (mLeft != 0 || mTop != 0) {
-        renderer.translate(mLeft, mTop);
-    }
-    if (mStaticMatrix) {
-        renderer.concatMatrix(mStaticMatrix);
-    } else if (mAnimationMatrix) {
-        renderer.concatMatrix(mAnimationMatrix);
-    }
-    if (mMatrixFlags != 0) {
-        if (mMatrixFlags == TRANSLATION) {
-            renderer.translate(mTranslationX, mTranslationY);
-        } else {
-            renderer.concatMatrix(mTransformMatrix);
-        }
-    }
-    bool clipToBoundsNeeded = mCaching ? false : mClipToBounds;
-    if (mAlpha < 1) {
-        if (mCaching) {
-            renderer.setOverrideLayerAlpha(mAlpha);
-        } else if (!mHasOverlappingRendering) {
-            renderer.scaleAlpha(mAlpha);
-        } else {
-            // TODO: should be able to store the size of a DL at record time and not
-            // have to pass it into this call. In fact, this information might be in the
-            // location/size info that we store with the new native transform data.
-            int saveFlags = SkCanvas::kHasAlphaLayer_SaveFlag;
-            if (clipToBoundsNeeded) {
-                saveFlags |= SkCanvas::kClipToLayer_SaveFlag;
-                clipToBoundsNeeded = false; // clipping done by saveLayer
-            }
-            handler(mSaveLayerOp->reinit(0, 0, mRight - mLeft, mBottom - mTop,
-                    mAlpha * 255, SkXfermode::kSrcOver_Mode, saveFlags), PROPERTY_SAVECOUNT,
-                    mClipToBounds);
-        }
-    }
-    if (clipToBoundsNeeded) {
-        handler(mClipRectOp->reinit(0, 0, mRight - mLeft, mBottom - mTop, SkRegion::kIntersect_Op),
-                PROPERTY_SAVECOUNT, mClipToBounds);
-    }
-}
-
-class DeferOperationHandler {
-public:
-    DeferOperationHandler(DeferStateStruct& deferStruct, int level)
-        : mDeferStruct(deferStruct), mLevel(level) {}
-    inline void operator()(DisplayListOp* operation, int saveCount, bool clipToBounds) {
-        operation->defer(mDeferStruct, saveCount, mLevel, clipToBounds);
-    }
-private:
-    DeferStateStruct& mDeferStruct;
-    const int mLevel;
-};
-
-void DisplayList::defer(DeferStateStruct& deferStruct, const int level) {
-    DeferOperationHandler handler(deferStruct, level);
-    iterate<DeferOperationHandler>(deferStruct.mRenderer, handler, level);
-}
-
-class ReplayOperationHandler {
-public:
-    ReplayOperationHandler(ReplayStateStruct& replayStruct, int level)
-        : mReplayStruct(replayStruct), mLevel(level) {}
-    inline void operator()(DisplayListOp* operation, int saveCount, bool clipToBounds) {
-#if DEBUG_DISPLAY_LIST_OPS_AS_EVENTS
-        mReplayStruct.mRenderer.eventMark(operation->name());
-#endif
-        operation->replay(mReplayStruct, saveCount, mLevel, clipToBounds);
-    }
-private:
-    ReplayStateStruct& mReplayStruct;
-    const int mLevel;
-};
-
-void DisplayList::replay(ReplayStateStruct& replayStruct, const int level) {
-    ReplayOperationHandler handler(replayStruct, level);
-
-    replayStruct.mRenderer.startMark(mName.string());
-    iterate<ReplayOperationHandler>(replayStruct.mRenderer, handler, level);
-    replayStruct.mRenderer.endMark();
-
-    DISPLAY_LIST_LOGD("%*sDone (%p, %s), returning %d", level * 2, "", this, mName.string(),
-            replayStruct.mDrawGlStatus);
-}
-
-/**
- * This function serves both defer and replay modes, and will organize the displayList's component
- * operations for a single frame:
- *
- * Every 'simple' operation that affects just the matrix and alpha (or other factors of
- * DeferredDisplayState) may be issued directly to the renderer, but complex operations (with custom
- * defer logic) and operations in displayListOps are issued through the 'handler' which handles the
- * defer vs replay logic, per operation
- */
-template <class T>
-void DisplayList::iterate(OpenGLRenderer& renderer, T& handler, const int level) {
-    if (CC_UNLIKELY(mDestroyed)) { // temporary debug logging
-        ALOGW("Error: %s is drawing after destruction, size %d", getName(), mSize);
-        CRASH();
-    }
-    if (mSize == 0 || mAlpha <= 0) {
-        DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, mName.string());
-        return;
-    }
-
-#if DEBUG_DISPLAY_LIST
-    Rect* clipRect = renderer.getClipRect();
-    DISPLAY_LIST_LOGD("%*sStart display list (%p, %s), clipRect: %.0f, %.0f, %.0f, %.0f",
-            level * 2, "", this, mName.string(), clipRect->left, clipRect->top,
-            clipRect->right, clipRect->bottom);
-#endif
-
-    int restoreTo = renderer.getSaveCount();
-    handler(mSaveOp->reinit(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag),
-            PROPERTY_SAVECOUNT, mClipToBounds);
-
-    DISPLAY_LIST_LOGD("%*sSave %d %d", (level + 1) * 2, "",
-            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag, restoreTo);
-
-    setViewProperties<T>(renderer, handler, level + 1);
-
-    if (mClipToBounds && renderer.quickRejectNoScissor(0, 0, mWidth, mHeight)) {
-        DISPLAY_LIST_LOGD("%*sRestoreToCount %d", (level + 1) * 2, "", restoreTo);
-        handler(mRestoreToCountOp->reinit(restoreTo), PROPERTY_SAVECOUNT, mClipToBounds);
-        renderer.restoreToCount(restoreTo);
-        renderer.setOverrideLayerAlpha(1.0f);
-        return;
-    }
-
-    DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
-    int saveCount = renderer.getSaveCount() - 1;
-    for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) {
-        DisplayListOp *op = mDisplayListData->displayListOps[i];
-
-#if DEBUG_DISPLAY_LIST
-        op->output(level + 1);
-#endif
-
-        logBuffer.writeCommand(level, op->name());
-        handler(op, saveCount, mClipToBounds);
-    }
-
-    DISPLAY_LIST_LOGD("%*sRestoreToCount %d", (level + 1) * 2, "", restoreTo);
-    handler(mRestoreToCountOp->reinit(restoreTo), PROPERTY_SAVECOUNT, mClipToBounds);
-    renderer.restoreToCount(restoreTo);
-    renderer.setOverrideLayerAlpha(1.0f);
+    mChildren.push(op);
+    mReferenceHolders.push(op->renderNode());
 }
 
 }; // namespace uirenderer
diff --git a/libs/hwui/DisplayList.h b/libs/hwui/DisplayList.h
index 1cd5f1c..fe70d13 100644
--- a/libs/hwui/DisplayList.h
+++ b/libs/hwui/DisplayList.h
@@ -26,6 +26,7 @@
 
 #include <private/hwui/DrawGlInfo.h>
 
+#include <utils/KeyedVector.h>
 #include <utils/LinearAllocator.h>
 #include <utils/RefBase.h>
 #include <utils/SortedVector.h>
@@ -37,12 +38,10 @@
 #include <androidfw/ResourceTypes.h>
 
 #include "Debug.h"
-
-#define TRANSLATION 0x0001
-#define ROTATION    0x0002
-#define ROTATION_3D 0x0004
-#define SCALE       0x0008
-#define PIVOT       0x0010
+#include "Matrix.h"
+#include "DeferredDisplayList.h"
+#include "RenderProperties.h"
+#include "utils/VirtualLightRefBase.h"
 
 class SkBitmap;
 class SkPaint;
@@ -58,492 +57,97 @@
 class OpenGLRenderer;
 class Rect;
 class Layer;
-class SkiaColorFilter;
 class SkiaShader;
 
 class ClipRectOp;
 class SaveLayerOp;
 class SaveOp;
 class RestoreToCountOp;
+class DrawDisplayListOp;
 
-struct DeferStateStruct {
+/**
+ * Holds data used in the playback a tree of DisplayLists.
+ */
+class PlaybackStateStruct {
+protected:
+    PlaybackStateStruct(OpenGLRenderer& renderer, int replayFlags, LinearAllocator* allocator)
+            : mRenderer(renderer), mReplayFlags(replayFlags), mAllocator(allocator){}
+
+public:
+    OpenGLRenderer& mRenderer;
+    const int mReplayFlags;
+
+    // Allocator with the lifetime of a single frame.
+    // replay uses an Allocator owned by the struct, while defer shares the DeferredDisplayList's Allocator
+    LinearAllocator * const mAllocator;
+};
+
+class DeferStateStruct : public PlaybackStateStruct {
+public:
     DeferStateStruct(DeferredDisplayList& deferredList, OpenGLRenderer& renderer, int replayFlags)
-            : mDeferredList(deferredList), mRenderer(renderer), mReplayFlags(replayFlags) {}
+            : PlaybackStateStruct(renderer, replayFlags, &(deferredList.mAllocator)),
+            mDeferredList(deferredList) {}
+
     DeferredDisplayList& mDeferredList;
-    OpenGLRenderer& mRenderer;
-    const int mReplayFlags;
 };
 
-struct ReplayStateStruct {
+class ReplayStateStruct : public PlaybackStateStruct {
+public:
     ReplayStateStruct(OpenGLRenderer& renderer, Rect& dirty, int replayFlags)
-            : mRenderer(renderer), mDirty(dirty), mReplayFlags(replayFlags),
-            mDrawGlStatus(DrawGlInfo::kStatusDone) {}
-    OpenGLRenderer& mRenderer;
+            : PlaybackStateStruct(renderer, replayFlags, &mReplayAllocator),
+            mDirty(dirty), mDrawGlStatus(DrawGlInfo::kStatusDone) {}
+
     Rect& mDirty;
-    const int mReplayFlags;
     status_t mDrawGlStatus;
+    LinearAllocator mReplayAllocator;
 };
 
 /**
- * Refcounted structure that holds data used in display list stream
+ * Data structure that holds the list of commands used in display list stream
  */
-class DisplayListData : public LightRefBase<DisplayListData> {
+class DisplayListData {
 public:
+    DisplayListData();
+    ~DisplayListData();
+
+    // allocator into which all ops were allocated
     LinearAllocator allocator;
+
+    // pointers to all ops within display list, pointing into allocator data
     Vector<DisplayListOp*> displayListOps;
-};
 
-/**
- * Replays recorded drawing commands.
- */
-class DisplayList {
-public:
-    DisplayList(const DisplayListRenderer& recorder);
-    ANDROID_API ~DisplayList();
+    // index of DisplayListOp restore, after which projected descendents should be drawn
+    int projectionReceiveIndex;
 
-    // See flags defined in DisplayList.java
-    enum ReplayFlag {
-        kReplayFlag_ClipChildren = 0x1
-    };
+    Vector<const SkBitmap*> bitmapResources;
+    Vector<const SkBitmap*> ownedBitmapResources;
+    Vector<const Res_png_9patch*> patchResources;
 
+    Vector<const SkPaint*> paints;
+    Vector<const SkPath*> paths;
+    SortedVector<const SkPath*> sourcePaths;
+    Vector<const SkRegion*> regions;
+    Vector<const SkMatrix*> matrices;
+    Vector<SkiaShader*> shaders;
+    Vector<Layer*> layers;
+    uint32_t functorCount;
+    bool hasDrawOps;
 
-    ANDROID_API size_t getSize();
-    ANDROID_API static void destroyDisplayListDeferred(DisplayList* displayList);
-    ANDROID_API static void outputLogBuffer(int fd);
-
-    void initFromDisplayListRenderer(const DisplayListRenderer& recorder, bool reusing = false);
-
-    void defer(DeferStateStruct& deferStruct, const int level);
-    void replay(ReplayStateStruct& replayStruct, const int level);
-
-    void output(uint32_t level = 0);
-
-    ANDROID_API void reset();
-
-    void setRenderable(bool renderable) {
-        mIsRenderable = renderable;
+    bool isEmpty() {
+        return !displayListOps.size();
     }
 
-    bool isRenderable() const {
-        return mIsRenderable;
-    }
-
-    void setName(const char* name) {
-        if (name) {
-            char* lastPeriod = strrchr(name, '.');
-            if (lastPeriod) {
-                mName.setTo(lastPeriod + 1);
-            } else {
-                mName.setTo(name);
-            }
-        }
-    }
-
-    const char* getName() const {
-        return mName.string();
-    }
-
-    void setClipToBounds(bool clipToBounds) {
-        mClipToBounds = clipToBounds;
-    }
-
-    void setStaticMatrix(SkMatrix* matrix) {
-        delete mStaticMatrix;
-        mStaticMatrix = new SkMatrix(*matrix);
-    }
-
-    // Can return NULL
-    SkMatrix* getStaticMatrix() {
-        return mStaticMatrix;
-    }
-
-    void setAnimationMatrix(SkMatrix* matrix) {
-        delete mAnimationMatrix;
-        if (matrix) {
-            mAnimationMatrix = new SkMatrix(*matrix);
-        } else {
-            mAnimationMatrix = NULL;
-        }
-    }
-
-    void setAlpha(float alpha) {
-        alpha = fminf(1.0f, fmaxf(0.0f, alpha));
-        if (alpha != mAlpha) {
-            mAlpha = alpha;
-        }
-    }
-
-    float getAlpha() const {
-        return mAlpha;
-    }
-
-    void setHasOverlappingRendering(bool hasOverlappingRendering) {
-        mHasOverlappingRendering = hasOverlappingRendering;
-    }
-
-    bool hasOverlappingRendering() const {
-        return mHasOverlappingRendering;
-    }
-
-    void setTranslationX(float translationX) {
-        if (translationX != mTranslationX) {
-            mTranslationX = translationX;
-            mMatrixDirty = true;
-            if (mTranslationX == 0.0f && mTranslationY == 0.0f) {
-                mMatrixFlags &= ~TRANSLATION;
-            } else {
-                mMatrixFlags |= TRANSLATION;
-            }
-        }
-    }
-
-    float getTranslationX() const {
-        return mTranslationX;
-    }
-
-    void setTranslationY(float translationY) {
-        if (translationY != mTranslationY) {
-            mTranslationY = translationY;
-            mMatrixDirty = true;
-            if (mTranslationX == 0.0f && mTranslationY == 0.0f) {
-                mMatrixFlags &= ~TRANSLATION;
-            } else {
-                mMatrixFlags |= TRANSLATION;
-            }
-        }
-    }
-
-    float getTranslationY() const {
-        return mTranslationY;
-    }
-
-    void setRotation(float rotation) {
-        if (rotation != mRotation) {
-            mRotation = rotation;
-            mMatrixDirty = true;
-            if (mRotation == 0.0f) {
-                mMatrixFlags &= ~ROTATION;
-            } else {
-                mMatrixFlags |= ROTATION;
-            }
-        }
-    }
-
-    float getRotation() const {
-        return mRotation;
-    }
-
-    void setRotationX(float rotationX) {
-        if (rotationX != mRotationX) {
-            mRotationX = rotationX;
-            mMatrixDirty = true;
-            if (mRotationX == 0.0f && mRotationY == 0.0f) {
-                mMatrixFlags &= ~ROTATION_3D;
-            } else {
-                mMatrixFlags |= ROTATION_3D;
-            }
-        }
-    }
-
-    float getRotationX() const {
-        return mRotationX;
-    }
-
-    void setRotationY(float rotationY) {
-        if (rotationY != mRotationY) {
-            mRotationY = rotationY;
-            mMatrixDirty = true;
-            if (mRotationX == 0.0f && mRotationY == 0.0f) {
-                mMatrixFlags &= ~ROTATION_3D;
-            } else {
-                mMatrixFlags |= ROTATION_3D;
-            }
-        }
-    }
-
-    float getRotationY() const {
-        return mRotationY;
-    }
-
-    void setScaleX(float scaleX) {
-        if (scaleX != mScaleX) {
-            mScaleX = scaleX;
-            mMatrixDirty = true;
-            if (mScaleX == 1.0f && mScaleY == 1.0f) {
-                mMatrixFlags &= ~SCALE;
-            } else {
-                mMatrixFlags |= SCALE;
-            }
-        }
-    }
-
-    float getScaleX() const {
-        return mScaleX;
-    }
-
-    void setScaleY(float scaleY) {
-        if (scaleY != mScaleY) {
-            mScaleY = scaleY;
-            mMatrixDirty = true;
-            if (mScaleX == 1.0f && mScaleY == 1.0f) {
-                mMatrixFlags &= ~SCALE;
-            } else {
-                mMatrixFlags |= SCALE;
-            }
-        }
-    }
-
-    float getScaleY() const {
-        return mScaleY;
-    }
-
-    void setPivotX(float pivotX) {
-        mPivotX = pivotX;
-        mMatrixDirty = true;
-        if (mPivotX == 0.0f && mPivotY == 0.0f) {
-            mMatrixFlags &= ~PIVOT;
-        } else {
-            mMatrixFlags |= PIVOT;
-        }
-        mPivotExplicitlySet = true;
-    }
-
-    ANDROID_API float getPivotX();
-
-    void setPivotY(float pivotY) {
-        mPivotY = pivotY;
-        mMatrixDirty = true;
-        if (mPivotX == 0.0f && mPivotY == 0.0f) {
-            mMatrixFlags &= ~PIVOT;
-        } else {
-            mMatrixFlags |= PIVOT;
-        }
-        mPivotExplicitlySet = true;
-    }
-
-    ANDROID_API float getPivotY();
-
-    void setCameraDistance(float distance) {
-        if (distance != mCameraDistance) {
-            mCameraDistance = distance;
-            mMatrixDirty = true;
-            if (!mTransformCamera) {
-                mTransformCamera = new Sk3DView();
-                mTransformMatrix3D = new SkMatrix();
-            }
-            mTransformCamera->setCameraLocation(0, 0, distance);
-        }
-    }
-
-    float getCameraDistance() const {
-        return mCameraDistance;
-    }
-
-    void setLeft(int left) {
-        if (left != mLeft) {
-            mLeft = left;
-            mWidth = mRight - mLeft;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    float getLeft() const {
-        return mLeft;
-    }
-
-    void setTop(int top) {
-        if (top != mTop) {
-            mTop = top;
-            mHeight = mBottom - mTop;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    float getTop() const {
-        return mTop;
-    }
-
-    void setRight(int right) {
-        if (right != mRight) {
-            mRight = right;
-            mWidth = mRight - mLeft;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    float getRight() const {
-        return mRight;
-    }
-
-    void setBottom(int bottom) {
-        if (bottom != mBottom) {
-            mBottom = bottom;
-            mHeight = mBottom - mTop;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    float getBottom() const {
-        return mBottom;
-    }
-
-    void setLeftTop(int left, int top) {
-        if (left != mLeft || top != mTop) {
-            mLeft = left;
-            mTop = top;
-            mWidth = mRight - mLeft;
-            mHeight = mBottom - mTop;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    void setLeftTopRightBottom(int left, int top, int right, int bottom) {
-        if (left != mLeft || top != mTop || right != mRight || bottom != mBottom) {
-            mLeft = left;
-            mTop = top;
-            mRight = right;
-            mBottom = bottom;
-            mWidth = mRight - mLeft;
-            mHeight = mBottom - mTop;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    void offsetLeftRight(float offset) {
-        if (offset != 0) {
-            mLeft += offset;
-            mRight += offset;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    void offsetTopBottom(float offset) {
-        if (offset != 0) {
-            mTop += offset;
-            mBottom += offset;
-            if (mMatrixFlags > TRANSLATION && !mPivotExplicitlySet) {
-                mMatrixDirty = true;
-            }
-        }
-    }
-
-    void setCaching(bool caching) {
-        mCaching = caching;
-    }
-
-    int getWidth() {
-        return mWidth;
-    }
-
-    int getHeight() {
-        return mHeight;
-    }
+    void addChild(DrawDisplayListOp* childOp);
+    const Vector<DrawDisplayListOp*>& children() { return mChildren; }
 
 private:
-    void outputViewProperties(const int level);
+    Vector< sp<VirtualLightRefBase> > mReferenceHolders;
 
-    template <class T>
-    inline void setViewProperties(OpenGLRenderer& renderer, T& handler, const int level);
+    // list of children display lists for quick, non-drawing traversal
+    Vector<DrawDisplayListOp*> mChildren;
 
-    template <class T>
-    inline void iterate(OpenGLRenderer& renderer, T& handler, const int level);
-
-    void init();
-
-    void clearResources();
-
-    void updateMatrix();
-
-    class TextContainer {
-    public:
-        size_t length() const {
-            return mByteLength;
-        }
-
-        const char* text() const {
-            return (const char*) mText;
-        }
-
-        size_t mByteLength;
-        const char* mText;
-    };
-
-    Vector<SkBitmap*> mBitmapResources;
-    Vector<SkBitmap*> mOwnedBitmapResources;
-    Vector<SkiaColorFilter*> mFilterResources;
-    Vector<Res_png_9patch*> mPatchResources;
-
-    Vector<SkPaint*> mPaints;
-    Vector<SkPath*> mPaths;
-    SortedVector<SkPath*> mSourcePaths;
-    Vector<SkRegion*> mRegions;
-    Vector<SkMatrix*> mMatrices;
-    Vector<SkiaShader*> mShaders;
-    Vector<Layer*> mLayers;
-
-    sp<DisplayListData> mDisplayListData;
-
-    size_t mSize;
-
-    bool mIsRenderable;
-    uint32_t mFunctorCount;
-
-    String8 mName;
-    bool mDestroyed; // used for debugging crash, TODO: remove once invalid state crash fixed
-
-    // View properties
-    bool mClipToBounds;
-    float mAlpha;
-    bool mHasOverlappingRendering;
-    float mTranslationX, mTranslationY;
-    float mRotation, mRotationX, mRotationY;
-    float mScaleX, mScaleY;
-    float mPivotX, mPivotY;
-    float mCameraDistance;
-    int mLeft, mTop, mRight, mBottom;
-    int mWidth, mHeight;
-    int mPrevWidth, mPrevHeight;
-    bool mPivotExplicitlySet;
-    bool mMatrixDirty;
-    bool mMatrixIsIdentity;
-    uint32_t mMatrixFlags;
-    SkMatrix* mTransformMatrix;
-    Sk3DView* mTransformCamera;
-    SkMatrix* mTransformMatrix3D;
-    SkMatrix* mStaticMatrix;
-    SkMatrix* mAnimationMatrix;
-    bool mCaching;
-
-    /**
-     * State operations - needed to defer displayList property operations (for example, when setting
-     * an alpha causes a SaveLayerAlpha to occur). These operations point into mDisplayListData's
-     * allocation, or null if uninitialized.
-     *
-     * These are initialized (via friend re-constructors) when a displayList is issued in either
-     * replay or deferred mode. If replaying, the ops are not used until the next frame. If
-     * deferring, the ops may be stored in the DeferredDisplayList to be played back a second time.
-     *
-     * They should be used at most once per frame (one call to 'iterate') to avoid overwriting data
-     */
-    ClipRectOp* mClipRectOp;
-    SaveLayerOp* mSaveLayerOp;
-    SaveOp* mSaveOp;
-    RestoreToCountOp* mRestoreToCountOp;
-}; // class DisplayList
+    void cleanupResources();
+};
 
 }; // namespace uirenderer
 }; // namespace android
diff --git a/libs/hwui/DisplayListOp.h b/libs/hwui/DisplayListOp.h
index 842e028..6dfb918 100644
--- a/libs/hwui/DisplayListOp.h
+++ b/libs/hwui/DisplayListOp.h
@@ -21,6 +21,8 @@
     #define LOG_TAG "OpenGLRenderer"
 #endif
 
+#include <SkPath.h>
+#include <SkPathOps.h>
 #include <SkXfermode.h>
 
 #include <private/hwui/DrawGlInfo.h>
@@ -111,7 +113,7 @@
 class DrawOp : public DisplayListOp {
 friend class MergingDrawBatch;
 public:
-    DrawOp(SkPaint* paint)
+    DrawOp(const SkPaint* paint)
             : mPaint(paint), mQuickRejected(false) {}
 
     virtual void defer(DeferStateStruct& deferStruct, int saveCount, int level,
@@ -182,13 +184,16 @@
     }
 
     inline float strokeWidthOutset() {
-        float width = mPaint->getStrokeWidth();
-        if (width == 0) return 0.5f; // account for hairline
-        return width * 0.5f;
+        // since anything AA stroke with less than 1.0 pixel width is drawn with an alpha-reduced
+        // 1.0 stroke, treat 1.0 as minimum.
+
+        // TODO: it would be nice if this could take scale into account, but scale isn't stable
+        // since higher levels of the view hierarchy can change scale out from underneath it.
+        return fmaxf(mPaint->getStrokeWidth(), 1) * 0.5f;
     }
 
 protected:
-    SkPaint* getPaint(OpenGLRenderer& renderer) {
+    const SkPaint* getPaint(OpenGLRenderer& renderer) {
         return renderer.filterPaint(mPaint);
     }
 
@@ -209,22 +214,22 @@
 
     }
 
-    SkPaint* mPaint; // should be accessed via getPaint() when applying
+    const SkPaint* mPaint; // should be accessed via getPaint() when applying
     bool mQuickRejected;
 };
 
 class DrawBoundedOp : public DrawOp {
 public:
-    DrawBoundedOp(float left, float top, float right, float bottom, SkPaint* paint)
+    DrawBoundedOp(float left, float top, float right, float bottom, const SkPaint* paint)
             : DrawOp(paint), mLocalBounds(left, top, right, bottom) {}
 
-    DrawBoundedOp(const Rect& localBounds, SkPaint* paint)
+    DrawBoundedOp(const Rect& localBounds, const SkPaint* paint)
             : DrawOp(paint), mLocalBounds(localBounds) {}
 
     // Calculates bounds as smallest rect encompassing all points
     // NOTE: requires at least 1 vertex, and doesn't account for stroke size (should be handled in
     // subclass' constructor)
-    DrawBoundedOp(const float* points, int count, SkPaint* paint)
+    DrawBoundedOp(const float* points, int count, const SkPaint* paint)
             : DrawOp(paint), mLocalBounds(points[0], points[1], points[0], points[1]) {
         for (int i = 2; i < count; i += 2) {
             mLocalBounds.left = fminf(mLocalBounds.left, points[i]);
@@ -235,7 +240,7 @@
     }
 
     // default empty constructor for bounds, to be overridden in child constructor body
-    DrawBoundedOp(SkPaint* paint): DrawOp(paint) { }
+    DrawBoundedOp(const SkPaint* paint): DrawOp(paint) { }
 
     bool getLocalBounds(const DrawModifiers& drawModifiers, Rect& localBounds) {
         localBounds.set(mLocalBounds);
@@ -259,7 +264,6 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 class SaveOp : public StateOp {
-    friend class DisplayList; // give DisplayList private constructor/reinit access
 public:
     SaveOp(int flags)
             : mFlags(flags) {}
@@ -282,17 +286,10 @@
 
     int getFlags() const { return mFlags; }
 private:
-    SaveOp() {}
-    DisplayListOp* reinit(int flags) {
-        mFlags = flags;
-        return this;
-    }
-
     int mFlags;
 };
 
 class RestoreToCountOp : public StateOp {
-    friend class DisplayList; // give DisplayList private constructor/reinit access
 public:
     RestoreToCountOp(int count)
             : mCount(count) {}
@@ -315,21 +312,25 @@
     virtual const char* name() { return "RestoreToCount"; }
 
 private:
-    RestoreToCountOp() {}
-    DisplayListOp* reinit(int count) {
-        mCount = count;
-        return this;
-    }
-
     int mCount;
 };
 
 class SaveLayerOp : public StateOp {
-    friend class DisplayList; // give DisplayList private constructor/reinit access
 public:
-    SaveLayerOp(float left, float top, float right, float bottom,
-            int alpha, SkXfermode::Mode mode, int flags)
-            : mArea(left, top, right, bottom), mAlpha(alpha), mMode(mode), mFlags(flags) {}
+    SaveLayerOp(float left, float top, float right, float bottom, int alpha, int flags)
+            : mArea(left, top, right, bottom)
+            , mPaint(&mCachedPaint)
+            , mFlags(flags)
+            , mConvexMask(NULL) {
+        mCachedPaint.setAlpha(alpha);
+    }
+
+    SaveLayerOp(float left, float top, float right, float bottom, const SkPaint* paint, int flags)
+            : mArea(left, top, right, bottom)
+            , mPaint(paint)
+            , mFlags(flags)
+            , mConvexMask(NULL)
+    {}
 
     virtual void defer(DeferStateStruct& deferStruct, int saveCount, int level,
             bool useQuickReject) {
@@ -340,11 +341,12 @@
         // NOTE: don't issue full saveLayer, since that has side effects/is costly. instead just
         // setup the snapshot for deferral, and re-issue the op at flush time
         deferStruct.mRenderer.saveLayerDeferred(mArea.left, mArea.top, mArea.right, mArea.bottom,
-                mAlpha, mMode, mFlags);
+                mPaint, mFlags);
     }
 
     virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
-        renderer.saveLayer(mArea.left, mArea.top, mArea.right, mArea.bottom, mAlpha, mMode, mFlags);
+        renderer.saveLayer(mArea.left, mArea.top, mArea.right, mArea.bottom,
+                mPaint, mFlags, mConvexMask);
     }
 
     virtual void output(int level, uint32_t logFlags) const {
@@ -356,23 +358,26 @@
 
     int getFlags() { return mFlags; }
 
-private:
-    // Special case, reserved for direct DisplayList usage
-    SaveLayerOp() {}
-    DisplayListOp* reinit(float left, float top, float right, float bottom,
-            int alpha, SkXfermode::Mode mode, int flags) {
-        mArea.set(left, top, right, bottom);
-        mAlpha = alpha;
-        mMode = mode;
-        mFlags = flags;
-        return this;
+    // Called to make SaveLayerOp clip to the provided mask when drawing back/restored
+    void setMask(const SkPath* convexMask) {
+        mConvexMask = convexMask;
     }
 
-    bool isSaveLayerAlpha() const { return mAlpha < 255 && mMode == SkXfermode::kSrcOver_Mode; }
+private:
+    bool isSaveLayerAlpha() const {
+        SkXfermode::Mode mode = OpenGLRenderer::getXfermodeDirect(mPaint);
+        int alpha = OpenGLRenderer::getAlphaDirect(mPaint);
+        return alpha < 255 && mode == SkXfermode::kSrcOver_Mode;
+    }
+
     Rect mArea;
-    int mAlpha;
-    SkXfermode::Mode mMode;
+    const SkPaint* mPaint;
+    SkPaint mCachedPaint;
     int mFlags;
+
+    // Convex path, points at data in RenderNode, valid for the duration of the frame only
+    // Only used for masking the SaveLayer which wraps projected RenderNodes
+    const SkPath* mConvexMask;
 };
 
 class TranslateOp : public StateOp {
@@ -456,7 +461,7 @@
 
 class SetMatrixOp : public StateOp {
 public:
-    SetMatrixOp(SkMatrix* matrix)
+    SetMatrixOp(const SkMatrix* matrix)
             : mMatrix(matrix) {}
 
     virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
@@ -465,7 +470,7 @@
 
     virtual void output(int level, uint32_t logFlags) const {
         if (mMatrix) {
-            OP_LOG("SetMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix));
+            OP_LOG("SetMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(mMatrix));
         } else {
             OP_LOGS("SetMatrix (reset)");
         }
@@ -474,12 +479,12 @@
     virtual const char* name() { return "SetMatrix"; }
 
 private:
-    SkMatrix* mMatrix;
+    const SkMatrix* mMatrix;
 };
 
 class ConcatMatrixOp : public StateOp {
 public:
-    ConcatMatrixOp(SkMatrix* matrix)
+    ConcatMatrixOp(const SkMatrix* matrix)
             : mMatrix(matrix) {}
 
     virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
@@ -487,13 +492,13 @@
     }
 
     virtual void output(int level, uint32_t logFlags) const {
-        OP_LOG("ConcatMatrix " MATRIX_STRING, MATRIX_ARGS(mMatrix));
+        OP_LOG("ConcatMatrix " SK_MATRIX_STRING, SK_MATRIX_ARGS(mMatrix));
     }
 
     virtual const char* name() { return "ConcatMatrix"; }
 
 private:
-    SkMatrix* mMatrix;
+    const SkMatrix* mMatrix;
 };
 
 class ClipOp : public StateOp {
@@ -514,14 +519,12 @@
     }
 
 protected:
-    ClipOp() {}
     virtual bool isRect() { return false; }
 
     SkRegion::Op mOp;
 };
 
 class ClipRectOp : public ClipOp {
-    friend class DisplayList; // give DisplayList private constructor/reinit access
 public:
     ClipRectOp(float left, float top, float right, float bottom, SkRegion::Op op)
             : ClipOp(op), mArea(left, top, right, bottom) {}
@@ -540,19 +543,12 @@
     virtual bool isRect() { return true; }
 
 private:
-    ClipRectOp() {}
-    DisplayListOp* reinit(float left, float top, float right, float bottom, SkRegion::Op op) {
-        mOp = op;
-        mArea.set(left, top, right, bottom);
-        return this;
-    }
-
     Rect mArea;
 };
 
 class ClipPathOp : public ClipOp {
 public:
-    ClipPathOp(SkPath* path, SkRegion::Op op)
+    ClipPathOp(const SkPath* path, SkRegion::Op op)
             : ClipOp(op), mPath(path) {}
 
     virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
@@ -568,12 +564,12 @@
     virtual const char* name() { return "ClipPath"; }
 
 private:
-    SkPath* mPath;
+    const SkPath* mPath;
 };
 
 class ClipRegionOp : public ClipOp {
 public:
-    ClipRegionOp(SkRegion* region, SkRegion::Op op)
+    ClipRegionOp(const SkRegion* region, SkRegion::Op op)
             : ClipOp(op), mRegion(region) {}
 
     virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
@@ -589,7 +585,7 @@
     virtual const char* name() { return "ClipRegion"; }
 
 private:
-    SkRegion* mRegion;
+    const SkRegion* mRegion;
 };
 
 class ResetShaderOp : public StateOp {
@@ -623,38 +619,6 @@
     SkiaShader* mShader;
 };
 
-class ResetColorFilterOp : public StateOp {
-public:
-    virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
-        renderer.resetColorFilter();
-    }
-
-    virtual void output(int level, uint32_t logFlags) const {
-        OP_LOGS("ResetColorFilter");
-    }
-
-    virtual const char* name() { return "ResetColorFilter"; }
-};
-
-class SetupColorFilterOp : public StateOp {
-public:
-    SetupColorFilterOp(SkiaColorFilter* colorFilter)
-            : mColorFilter(colorFilter) {}
-
-    virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
-        renderer.setupColorFilter(mColorFilter);
-    }
-
-    virtual void output(int level, uint32_t logFlags) const {
-        OP_LOG("SetupColorFilter, filter %p", mColorFilter);
-    }
-
-    virtual const char* name() { return "SetupColorFilter"; }
-
-private:
-    SkiaColorFilter* mColorFilter;
-};
-
 class ResetShadowOp : public StateOp {
 public:
     virtual void applyState(OpenGLRenderer& renderer, int saveCount) const {
@@ -729,7 +693,7 @@
 
 class DrawBitmapOp : public DrawBoundedOp {
 public:
-    DrawBitmapOp(SkBitmap* bitmap, float left, float top, SkPaint* paint)
+    DrawBitmapOp(const SkBitmap* bitmap, float left, float top, const SkPaint* paint)
             : DrawBoundedOp(left, top, left + bitmap->width(), top + bitmap->height(), paint),
             mBitmap(bitmap), mAtlas(Caches::getInstance().assetAtlas) {
         mEntry = mAtlas.getEntry(bitmap);
@@ -823,12 +787,12 @@
         deferInfo.mergeable = state.mMatrix.isSimple() && state.mMatrix.positiveScale() &&
                 !state.mClipSideFlags &&
                 OpenGLRenderer::getXfermodeDirect(mPaint) == SkXfermode::kSrcOver_Mode &&
-                (mBitmap->getConfig() != SkBitmap::kA8_Config);
+                (mBitmap->config() != SkBitmap::kA8_Config);
     }
 
     const SkBitmap* bitmap() { return mBitmap; }
 protected:
-    SkBitmap* mBitmap;
+    const SkBitmap* mBitmap;
     const AssetAtlas& mAtlas;
     uint32_t mEntryGenerationId;
     AssetAtlas::Entry* mEntry;
@@ -837,7 +801,7 @@
 
 class DrawBitmapMatrixOp : public DrawBoundedOp {
 public:
-    DrawBitmapMatrixOp(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint)
+    DrawBitmapMatrixOp(const SkBitmap* bitmap, const SkMatrix* matrix, const SkPaint* paint)
             : DrawBoundedOp(paint), mBitmap(bitmap), mMatrix(matrix) {
         mLocalBounds.set(0, 0, bitmap->width(), bitmap->height());
         const mat4 transform(*matrix);
@@ -849,7 +813,7 @@
     }
 
     virtual void output(int level, uint32_t logFlags) const {
-        OP_LOG("Draw bitmap %p matrix " MATRIX_STRING, mBitmap, MATRIX_ARGS(mMatrix));
+        OP_LOG("Draw bitmap %p matrix " SK_MATRIX_STRING, mBitmap, SK_MATRIX_ARGS(mMatrix));
     }
 
     virtual const char* name() { return "DrawBitmapMatrix"; }
@@ -860,14 +824,15 @@
     }
 
 private:
-    SkBitmap* mBitmap;
-    SkMatrix* mMatrix;
+    const SkBitmap* mBitmap;
+    const SkMatrix* mMatrix;
 };
 
 class DrawBitmapRectOp : public DrawBoundedOp {
 public:
-    DrawBitmapRectOp(SkBitmap* bitmap, float srcLeft, float srcTop, float srcRight, float srcBottom,
-            float dstLeft, float dstTop, float dstRight, float dstBottom, SkPaint* paint)
+    DrawBitmapRectOp(const SkBitmap* bitmap,
+            float srcLeft, float srcTop, float srcRight, float srcBottom,
+            float dstLeft, float dstTop, float dstRight, float dstBottom, const SkPaint* paint)
             : DrawBoundedOp(dstLeft, dstTop, dstRight, dstBottom, paint),
             mBitmap(bitmap), mSrc(srcLeft, srcTop, srcRight, srcBottom) {}
 
@@ -890,13 +855,13 @@
     }
 
 private:
-    SkBitmap* mBitmap;
+    const SkBitmap* mBitmap;
     Rect mSrc;
 };
 
 class DrawBitmapDataOp : public DrawBitmapOp {
 public:
-    DrawBitmapDataOp(SkBitmap* bitmap, float left, float top, SkPaint* paint)
+    DrawBitmapDataOp(const SkBitmap* bitmap, float left, float top, const SkPaint* paint)
             : DrawBitmapOp(bitmap, left, top, paint) {}
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
@@ -918,8 +883,8 @@
 
 class DrawBitmapMeshOp : public DrawBoundedOp {
 public:
-    DrawBitmapMeshOp(SkBitmap* bitmap, int meshWidth, int meshHeight,
-            float* vertices, int* colors, SkPaint* paint)
+    DrawBitmapMeshOp(const SkBitmap* bitmap, int meshWidth, int meshHeight,
+            const float* vertices, const int* colors, const SkPaint* paint)
             : DrawBoundedOp(vertices, 2 * (meshWidth + 1) * (meshHeight + 1), paint),
             mBitmap(bitmap), mMeshWidth(meshWidth), mMeshHeight(meshHeight),
             mVertices(vertices), mColors(colors) {}
@@ -941,17 +906,17 @@
     }
 
 private:
-    SkBitmap* mBitmap;
+    const SkBitmap* mBitmap;
     int mMeshWidth;
     int mMeshHeight;
-    float* mVertices;
-    int* mColors;
+    const float* mVertices;
+    const int* mColors;
 };
 
 class DrawPatchOp : public DrawBoundedOp {
 public:
-    DrawPatchOp(SkBitmap* bitmap, Res_png_9patch* patch,
-            float left, float top, float right, float bottom, SkPaint* paint)
+    DrawPatchOp(const SkBitmap* bitmap, const Res_png_9patch* patch,
+            float left, float top, float right, float bottom, const SkPaint* paint)
             : DrawBoundedOp(left, top, right, bottom, paint),
             mBitmap(bitmap), mPatch(patch), mGenerationId(0), mMesh(NULL),
             mAtlas(Caches::getInstance().assetAtlas) {
@@ -1028,8 +993,8 @@
             TextureVertex* opVertices = opMesh->vertices;
             for (uint32_t j = 0; j < vertexCount; j++, opVertices++) {
                 TextureVertex::set(vertex++,
-                        opVertices->position[0] + tx, opVertices->position[1] + ty,
-                        opVertices->texture[0], opVertices->texture[1]);
+                        opVertices->x + tx, opVertices->y + ty,
+                        opVertices->u, opVertices->v);
             }
 
             // Dirty the current layer if possible. When the 9-patch does not
@@ -1083,8 +1048,8 @@
     }
 
 private:
-    SkBitmap* mBitmap;
-    Res_png_9patch* mPatch;
+    const SkBitmap* mBitmap;
+    const Res_png_9patch* mPatch;
 
     uint32_t mGenerationId;
     const Patch* mMesh;
@@ -1097,7 +1062,7 @@
 class DrawColorOp : public DrawOp {
 public:
     DrawColorOp(int color, SkXfermode::Mode mode)
-            : DrawOp(0), mColor(color), mMode(mode) {};
+            : DrawOp(NULL), mColor(color), mMode(mode) {};
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
         return renderer.drawColor(mColor, mMode);
@@ -1116,7 +1081,7 @@
 
 class DrawStrokableOp : public DrawBoundedOp {
 public:
-    DrawStrokableOp(float left, float top, float right, float bottom, SkPaint* paint)
+    DrawStrokableOp(float left, float top, float right, float bottom, const SkPaint* paint)
             : DrawBoundedOp(left, top, right, bottom, paint) {};
 
     bool getLocalBounds(const DrawModifiers& drawModifiers, Rect& localBounds) {
@@ -1141,7 +1106,7 @@
 
 class DrawRectOp : public DrawStrokableOp {
 public:
-    DrawRectOp(float left, float top, float right, float bottom, SkPaint* paint)
+    DrawRectOp(float left, float top, float right, float bottom, const SkPaint* paint)
             : DrawStrokableOp(left, top, right, bottom, paint) {}
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
@@ -1165,7 +1130,7 @@
 
 class DrawRectsOp : public DrawBoundedOp {
 public:
-    DrawRectsOp(const float* rects, int count, SkPaint* paint)
+    DrawRectsOp(const float* rects, int count, const SkPaint* paint)
             : DrawBoundedOp(rects, count, paint),
             mRects(rects), mCount(count) {}
 
@@ -1192,7 +1157,7 @@
 class DrawRoundRectOp : public DrawStrokableOp {
 public:
     DrawRoundRectOp(float left, float top, float right, float bottom,
-            float rx, float ry, SkPaint* paint)
+            float rx, float ry, const SkPaint* paint)
             : DrawStrokableOp(left, top, right, bottom, paint), mRx(rx), mRy(ry) {}
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
@@ -1213,7 +1178,7 @@
 
 class DrawCircleOp : public DrawStrokableOp {
 public:
-    DrawCircleOp(float x, float y, float radius, SkPaint* paint)
+    DrawCircleOp(float x, float y, float radius, const SkPaint* paint)
             : DrawStrokableOp(x - radius, y - radius, x + radius, y + radius, paint),
             mX(x), mY(y), mRadius(radius) {}
 
@@ -1235,7 +1200,7 @@
 
 class DrawOvalOp : public DrawStrokableOp {
 public:
-    DrawOvalOp(float left, float top, float right, float bottom, SkPaint* paint)
+    DrawOvalOp(float left, float top, float right, float bottom, const SkPaint* paint)
             : DrawStrokableOp(left, top, right, bottom, paint) {}
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
@@ -1253,7 +1218,7 @@
 class DrawArcOp : public DrawStrokableOp {
 public:
     DrawArcOp(float left, float top, float right, float bottom,
-            float startAngle, float sweepAngle, bool useCenter, SkPaint* paint)
+            float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint)
             : DrawStrokableOp(left, top, right, bottom, paint),
             mStartAngle(startAngle), mSweepAngle(sweepAngle), mUseCenter(useCenter) {}
 
@@ -1278,7 +1243,7 @@
 
 class DrawPathOp : public DrawBoundedOp {
 public:
-    DrawPathOp(SkPath* path, SkPaint* paint)
+    DrawPathOp(const SkPath* path, const SkPaint* paint)
             : DrawBoundedOp(paint), mPath(path) {
         float left, top, offset;
         uint32_t width, height;
@@ -1294,7 +1259,7 @@
 
     virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo,
             const DeferredDisplayState& state) {
-        SkPaint* paint = getPaint(renderer);
+        const SkPaint* paint = getPaint(renderer);
         renderer.getCaches().pathCache.precache(mPath, paint);
 
         deferInfo.batchId = DeferredDisplayList::kOpBatch_AlphaMaskTexture;
@@ -1307,12 +1272,12 @@
     virtual const char* name() { return "DrawPath"; }
 
 private:
-    SkPath* mPath;
+    const SkPath* mPath;
 };
 
 class DrawLinesOp : public DrawBoundedOp {
 public:
-    DrawLinesOp(float* points, int count, SkPaint* paint)
+    DrawLinesOp(const float* points, int count, const SkPaint* paint)
             : DrawBoundedOp(points, count, paint),
             mPoints(points), mCount(count) {
         mLocalBounds.outset(strokeWidthOutset());
@@ -1336,13 +1301,13 @@
     }
 
 protected:
-    float* mPoints;
+    const float* mPoints;
     int mCount;
 };
 
 class DrawPointsOp : public DrawLinesOp {
 public:
-    DrawPointsOp(float* points, int count, SkPaint* paint)
+    DrawPointsOp(const float* points, int count, const SkPaint* paint)
             : DrawLinesOp(points, count, paint) {}
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
@@ -1358,7 +1323,7 @@
 
 class DrawSomeTextOp : public DrawOp {
 public:
-    DrawSomeTextOp(const char* text, int bytesCount, int count, SkPaint* paint)
+    DrawSomeTextOp(const char* text, int bytesCount, int count, const SkPaint* paint)
             : DrawOp(paint), mText(text), mBytesCount(bytesCount), mCount(count) {};
 
     virtual void output(int level, uint32_t logFlags) const {
@@ -1367,7 +1332,7 @@
 
     virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo,
             const DeferredDisplayState& state) {
-        SkPaint* paint = getPaint(renderer);
+        const SkPaint* paint = getPaint(renderer);
         FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(paint);
         fontRenderer.precache(paint, mText, mCount, mat4::identity());
 
@@ -1385,7 +1350,7 @@
 class DrawTextOnPathOp : public DrawSomeTextOp {
 public:
     DrawTextOnPathOp(const char* text, int bytesCount, int count,
-            SkPath* path, float hOffset, float vOffset, SkPaint* paint)
+            const SkPath* path, float hOffset, float vOffset, const SkPaint* paint)
             : DrawSomeTextOp(text, bytesCount, count, paint),
             mPath(path), mHOffset(hOffset), mVOffset(vOffset) {
         /* TODO: inherit from DrawBounded and init mLocalBounds */
@@ -1399,7 +1364,7 @@
     virtual const char* name() { return "DrawTextOnPath"; }
 
 private:
-    SkPath* mPath;
+    const SkPath* mPath;
     float mHOffset;
     float mVOffset;
 };
@@ -1407,7 +1372,7 @@
 class DrawPosTextOp : public DrawSomeTextOp {
 public:
     DrawPosTextOp(const char* text, int bytesCount, int count,
-            const float* positions, SkPaint* paint)
+            const float* positions, const SkPaint* paint)
             : DrawSomeTextOp(text, bytesCount, count, paint), mPositions(positions) {
         /* TODO: inherit from DrawBounded and init mLocalBounds */
     }
@@ -1425,7 +1390,7 @@
 class DrawTextOp : public DrawBoundedOp {
 public:
     DrawTextOp(const char* text, int bytesCount, int count, float x, float y,
-            const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds)
+            const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds)
             : DrawBoundedOp(bounds, paint), mText(text), mBytesCount(bytesCount), mCount(count),
             mX(x), mY(y), mPositions(positions), mTotalAdvance(totalAdvance) {
         memset(&mPrecacheTransform.data[0], 0xff, 16 * sizeof(float));
@@ -1433,7 +1398,7 @@
 
     virtual void onDefer(OpenGLRenderer& renderer, DeferInfo& deferInfo,
             const DeferredDisplayState& state) {
-        SkPaint* paint = getPaint(renderer);
+        const SkPaint* paint = getPaint(renderer);
         FontRenderer& fontRenderer = renderer.getCaches().fontRenderer->getFontRenderer(paint);
         const mat4& transform = renderer.findBestFontTransform(state.mMatrix);
         if (mPrecacheTransform != transform) {
@@ -1502,7 +1467,7 @@
 class DrawFunctorOp : public DrawOp {
 public:
     DrawFunctorOp(Functor* functor)
-            : DrawOp(0), mFunctor(functor) {}
+            : DrawOp(NULL), mFunctor(functor) {}
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
         renderer.startMark("GL functor");
@@ -1522,21 +1487,22 @@
 };
 
 class DrawDisplayListOp : public DrawBoundedOp {
+    friend class RenderNode; // grant DisplayList access to info of child
 public:
-    DrawDisplayListOp(DisplayList* displayList, int flags)
+    DrawDisplayListOp(RenderNode* displayList, int flags, const mat4& transformFromParent)
             : DrawBoundedOp(0, 0, displayList->getWidth(), displayList->getHeight(), 0),
-            mDisplayList(displayList), mFlags(flags) {}
+            mDisplayList(displayList), mFlags(flags), mTransformFromParent(transformFromParent) {}
 
     virtual void defer(DeferStateStruct& deferStruct, int saveCount, int level,
             bool useQuickReject) {
-        if (mDisplayList && mDisplayList->isRenderable()) {
-            mDisplayList->defer(deferStruct, level + 1);
+        if (mDisplayList && mDisplayList->isRenderable() && !mSkipInOrderDraw) {
+            mDisplayList->deferNodeInParent(deferStruct, level + 1);
         }
     }
     virtual void replay(ReplayStateStruct& replayStruct, int saveCount, int level,
             bool useQuickReject) {
-        if (mDisplayList && mDisplayList->isRenderable()) {
-            mDisplayList->replay(replayStruct, level + 1);
+        if (mDisplayList && mDisplayList->isRenderable() && !mSkipInOrderDraw) {
+            mDisplayList->replayNodeInParent(replayStruct, level + 1);
         }
     }
 
@@ -1554,15 +1520,86 @@
 
     virtual const char* name() { return "DrawDisplayList"; }
 
+    RenderNode* renderNode() { return mDisplayList; }
+
 private:
-    DisplayList* mDisplayList;
-    int mFlags;
+    RenderNode* mDisplayList;
+    const int mFlags;
+
+    ///////////////////////////
+    // Properties below are used by DisplayList::computeOrderingImpl() and iterate()
+    ///////////////////////////
+    /**
+     * Records transform vs parent, used for computing total transform without rerunning DL contents
+     */
+    const mat4 mTransformFromParent;
+
+    /**
+     * Holds the transformation between the projection surface ViewGroup and this DisplayList
+     * drawing instance. Represents any translations / transformations done within the drawing of
+     * the compositing ancestor ViewGroup's draw, before the draw of the View represented by this
+     * DisplayList draw instance.
+     *
+     * Note: doesn't include any transformation recorded within the DisplayList and its properties.
+     */
+    mat4 mTransformFromCompositingAncestor;
+    bool mSkipInOrderDraw;
+};
+
+/**
+ * Not a canvas operation, used only by 3d / z ordering logic in RenderNode::iterate()
+ */
+class DrawShadowOp : public DrawOp {
+public:
+    DrawShadowOp(const mat4& transformXY, const mat4& transformZ,
+            float casterAlpha, bool casterUnclipped,
+            float fallbackWidth, float fallbackHeight,
+            const SkPath* outline, const SkPath* revealClip)
+            : DrawOp(NULL), mTransformXY(transformXY), mTransformZ(transformZ),
+            mCasterAlpha(casterAlpha), mCasterUnclipped(casterUnclipped),
+            mFallbackWidth(fallbackWidth), mFallbackHeight(fallbackHeight),
+            mOutline(outline), mRevealClip(revealClip) {}
+
+    virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
+        SkPath casterPerimeter;
+        if (!mOutline || mOutline->isEmpty()) {
+            casterPerimeter.addRect(0, 0, mFallbackWidth, mFallbackHeight);
+        } else {
+            casterPerimeter = *mOutline;
+        }
+
+        if (mRevealClip) {
+            // intersect the outline with the convex reveal clip
+            Op(casterPerimeter, *mRevealClip, kIntersect_PathOp, &casterPerimeter);
+        }
+
+        return renderer.drawShadow(mTransformXY, mTransformZ,
+                mCasterAlpha, mCasterUnclipped, &casterPerimeter);
+    }
+
+    virtual void output(int level, uint32_t logFlags) const {
+        OP_LOG("DrawShadow of outline %p", mOutline);
+    }
+
+    virtual const char* name() { return "DrawShadow"; }
+
+private:
+    const mat4 mTransformXY;
+    const mat4 mTransformZ;
+    const float mCasterAlpha;
+    const bool mCasterUnclipped;
+    const float mFallbackWidth;
+    const float mFallbackHeight;
+
+    // these point at convex SkPaths owned by RenderProperties, or null
+    const SkPath* mOutline;
+    const SkPath* mRevealClip;
 };
 
 class DrawLayerOp : public DrawOp {
 public:
     DrawLayerOp(Layer* layer, float x, float y)
-            : DrawOp(0), mLayer(layer), mX(x), mY(y) {}
+            : DrawOp(NULL), mLayer(layer), mX(x), mY(y) {}
 
     virtual status_t applyDraw(OpenGLRenderer& renderer, Rect& dirty) {
         return renderer.drawLayer(mLayer, mX, mY);
diff --git a/libs/hwui/DisplayListRenderer.cpp b/libs/hwui/DisplayListRenderer.cpp
index 8866029..e36d975 100644
--- a/libs/hwui/DisplayListRenderer.cpp
+++ b/libs/hwui/DisplayListRenderer.cpp
@@ -21,120 +21,58 @@
 
 #include <private/hwui/DrawGlInfo.h>
 
-#include "DisplayList.h"
+#include "Caches.h"
 #include "DeferredDisplayList.h"
 #include "DisplayListLogBuffer.h"
 #include "DisplayListOp.h"
 #include "DisplayListRenderer.h"
-#include "Caches.h"
+#include "RenderNode.h"
 
 namespace android {
 namespace uirenderer {
 
 DisplayListRenderer::DisplayListRenderer():
-        mCaches(Caches::getInstance()), mDisplayListData(new DisplayListData),
+        mCaches(Caches::getInstance()), mDisplayListData(0),
         mTranslateX(0.0f), mTranslateY(0.0f), mHasTranslate(false),
-        mHasDrawOps(false), mFunctorCount(0) {
+        mRestoreSaveCount(-1) {
 }
 
 DisplayListRenderer::~DisplayListRenderer() {
-    reset();
-}
-
-void DisplayListRenderer::reset() {
-    mDisplayListData = new DisplayListData();
-    mCaches.resourceCache.lock();
-
-    for (size_t i = 0; i < mBitmapResources.size(); i++) {
-        mCaches.resourceCache.decrementRefcountLocked(mBitmapResources.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) {
-        mCaches.resourceCache.decrementRefcountLocked(mOwnedBitmapResources.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mFilterResources.size(); i++) {
-        mCaches.resourceCache.decrementRefcountLocked(mFilterResources.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mPatchResources.size(); i++) {
-        mCaches.resourceCache.decrementRefcountLocked(mPatchResources.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mShaders.size(); i++) {
-        mCaches.resourceCache.decrementRefcountLocked(mShaders.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mSourcePaths.size(); i++) {
-        mCaches.resourceCache.decrementRefcountLocked(mSourcePaths.itemAt(i));
-    }
-
-    for (size_t i = 0; i < mLayers.size(); i++) {
-        mCaches.resourceCache.decrementRefcountLocked(mLayers.itemAt(i));
-    }
-
-    mCaches.resourceCache.unlock();
-
-    mBitmapResources.clear();
-    mOwnedBitmapResources.clear();
-    mFilterResources.clear();
-    mPatchResources.clear();
-    mSourcePaths.clear();
-
-    mShaders.clear();
-    mShaderMap.clear();
-
-    mPaints.clear();
-    mPaintMap.clear();
-
-    mRegions.clear();
-    mRegionMap.clear();
-
-    mPaths.clear();
-    mPathMap.clear();
-
-    mMatrices.clear();
-
-    mLayers.clear();
-
-    mHasDrawOps = false;
-    mFunctorCount = 0;
+    LOG_ALWAYS_FATAL_IF(mDisplayListData,
+            "Destroyed a DisplayListRenderer during a record!");
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // Operations
 ///////////////////////////////////////////////////////////////////////////////
 
-DisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) {
-    if (!displayList) {
-        displayList = new DisplayList(*this);
-    } else {
-        displayList->initFromDisplayListRenderer(*this, true);
-    }
-    displayList->setRenderable(mHasDrawOps);
-    return displayList;
-}
-
-bool DisplayListRenderer::isDeferred() {
-    return true;
+DisplayListData* DisplayListRenderer::finishRecording() {
+    mShaderMap.clear();
+    mPaintMap.clear();
+    mRegionMap.clear();
+    mPathMap.clear();
+    DisplayListData* data = mDisplayListData;
+    mDisplayListData = 0;
+    return data;
 }
 
 void DisplayListRenderer::setViewport(int width, int height) {
-    mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1);
+    // TODO: DisplayListRenderer shouldn't have a projection matrix, as it should never be used
+    mViewProjMatrix.loadOrtho(0, width, height, 0, -1, 1);
 
-    mWidth = width;
-    mHeight = height;
+    initializeViewport(width, height);
 }
 
 status_t DisplayListRenderer::prepareDirty(float left, float top,
         float right, float bottom, bool opaque) {
-    mSnapshot = new Snapshot(mFirstSnapshot,
-            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
-    mSaveCount = 1;
 
-    mSnapshot->setClip(0.0f, 0.0f, mWidth, mHeight);
+    LOG_ALWAYS_FATAL_IF(mDisplayListData,
+            "prepareDirty called a second time during a recording!");
+    mDisplayListData = new DisplayListData();
+
+    initializeSaveStack(0, 0, getWidth(), getHeight());
+
     mDirtyClip = opaque;
-
     mRestoreSaveCount = -1;
 
     return DrawGlInfo::kStatusDone; // No invalidate needed at record-time
@@ -154,13 +92,13 @@
 status_t DisplayListRenderer::callDrawGLFunction(Functor *functor, Rect& dirty) {
     // Ignore dirty during recording, it matters only when we replay
     addDrawOp(new (alloc()) DrawFunctorOp(functor));
-    mFunctorCount++;
+    mDisplayListData->functorCount++;
     return DrawGlInfo::kStatusDone; // No invalidate needed at record-time
 }
 
 int DisplayListRenderer::save(int flags) {
     addStateOp(new (alloc()) SaveOp(flags));
-    return OpenGLRenderer::save(flags);
+    return StatefulBaseRenderer::save(flags);
 }
 
 void DisplayListRenderer::restore() {
@@ -171,84 +109,90 @@
 
     mRestoreSaveCount--;
     insertTranslate();
-    OpenGLRenderer::restore();
+    StatefulBaseRenderer::restore();
 }
 
 void DisplayListRenderer::restoreToCount(int saveCount) {
     mRestoreSaveCount = saveCount;
     insertTranslate();
-    OpenGLRenderer::restoreToCount(saveCount);
+    StatefulBaseRenderer::restoreToCount(saveCount);
 }
 
 int DisplayListRenderer::saveLayer(float left, float top, float right, float bottom,
-        int alpha, SkXfermode::Mode mode, int flags) {
-    addStateOp(new (alloc()) SaveLayerOp(left, top, right, bottom, alpha, mode, flags));
-    return OpenGLRenderer::save(flags);
+        const SkPaint* paint, int flags) {
+    paint = refPaint(paint);
+    addStateOp(new (alloc()) SaveLayerOp(left, top, right, bottom, paint, flags));
+    return StatefulBaseRenderer::save(flags);
 }
 
-void DisplayListRenderer::translate(float dx, float dy) {
+void DisplayListRenderer::translate(float dx, float dy, float dz) {
+    // ignore dz, not used at defer time
     mHasTranslate = true;
     mTranslateX += dx;
     mTranslateY += dy;
     insertRestoreToCount();
-    OpenGLRenderer::translate(dx, dy);
+    StatefulBaseRenderer::translate(dx, dy, dz);
 }
 
 void DisplayListRenderer::rotate(float degrees) {
     addStateOp(new (alloc()) RotateOp(degrees));
-    OpenGLRenderer::rotate(degrees);
+    StatefulBaseRenderer::rotate(degrees);
 }
 
 void DisplayListRenderer::scale(float sx, float sy) {
     addStateOp(new (alloc()) ScaleOp(sx, sy));
-    OpenGLRenderer::scale(sx, sy);
+    StatefulBaseRenderer::scale(sx, sy);
 }
 
 void DisplayListRenderer::skew(float sx, float sy) {
     addStateOp(new (alloc()) SkewOp(sx, sy));
-    OpenGLRenderer::skew(sx, sy);
+    StatefulBaseRenderer::skew(sx, sy);
 }
 
-void DisplayListRenderer::setMatrix(SkMatrix* matrix) {
+void DisplayListRenderer::setMatrix(const SkMatrix* matrix) {
     matrix = refMatrix(matrix);
     addStateOp(new (alloc()) SetMatrixOp(matrix));
-    OpenGLRenderer::setMatrix(matrix);
+    StatefulBaseRenderer::setMatrix(matrix);
 }
 
-void DisplayListRenderer::concatMatrix(SkMatrix* matrix) {
+void DisplayListRenderer::concatMatrix(const SkMatrix* matrix) {
     matrix = refMatrix(matrix);
     addStateOp(new (alloc()) ConcatMatrixOp(matrix));
-    OpenGLRenderer::concatMatrix(matrix);
+    StatefulBaseRenderer::concatMatrix(matrix);
 }
 
 bool DisplayListRenderer::clipRect(float left, float top, float right, float bottom,
         SkRegion::Op op) {
     addStateOp(new (alloc()) ClipRectOp(left, top, right, bottom, op));
-    return OpenGLRenderer::clipRect(left, top, right, bottom, op);
+    return StatefulBaseRenderer::clipRect(left, top, right, bottom, op);
 }
 
-bool DisplayListRenderer::clipPath(SkPath* path, SkRegion::Op op) {
+bool DisplayListRenderer::clipPath(const SkPath* path, SkRegion::Op op) {
     path = refPath(path);
     addStateOp(new (alloc()) ClipPathOp(path, op));
-    return OpenGLRenderer::clipPath(path, op);
+    return StatefulBaseRenderer::clipPath(path, op);
 }
 
-bool DisplayListRenderer::clipRegion(SkRegion* region, SkRegion::Op op) {
+bool DisplayListRenderer::clipRegion(const SkRegion* region, SkRegion::Op op) {
     region = refRegion(region);
     addStateOp(new (alloc()) ClipRegionOp(region, op));
-    return OpenGLRenderer::clipRegion(region, op);
+    return StatefulBaseRenderer::clipRegion(region, op);
 }
 
-status_t DisplayListRenderer::drawDisplayList(DisplayList* displayList,
+status_t DisplayListRenderer::drawDisplayList(RenderNode* displayList,
         Rect& dirty, int32_t flags) {
     // dirty is an out parameter and should not be recorded,
     // it matters only when replaying the display list
 
-    // TODO: To be safe, the display list should be ref-counted in the
-    //       resources cache, but we rely on the caller (UI toolkit) to
-    //       do the right thing for now
+    if (displayList->stagingProperties().isProjectionReceiver()) {
+        // use staging property, since recording on UI thread
+        mDisplayListData->projectionReceiveIndex = mDisplayListData->displayListOps.size();
+    }
 
-    addDrawOp(new (alloc()) DrawDisplayListOp(displayList, flags));
+    DrawDisplayListOp* op = new (alloc()) DrawDisplayListOp(displayList,
+            flags, *currentTransform());
+    addDrawOp(op);
+    mDisplayListData->addChild(op);
     return DrawGlInfo::kStatusDone;
 }
 
@@ -258,7 +202,8 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
+status_t DisplayListRenderer::drawBitmap(const SkBitmap* bitmap, float left, float top,
+        const SkPaint* paint) {
     bitmap = refBitmap(bitmap);
     paint = refPaint(paint);
 
@@ -266,7 +211,8 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) {
+status_t DisplayListRenderer::drawBitmap(const SkBitmap* bitmap, const SkMatrix* matrix,
+        const SkPaint* paint) {
     bitmap = refBitmap(bitmap);
     matrix = refMatrix(matrix);
     paint = refPaint(paint);
@@ -275,9 +221,9 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
+status_t DisplayListRenderer::drawBitmap(const SkBitmap* bitmap, float srcLeft, float srcTop,
         float srcRight, float srcBottom, float dstLeft, float dstTop,
-        float dstRight, float dstBottom, SkPaint* paint) {
+        float dstRight, float dstBottom, const SkPaint* paint) {
     bitmap = refBitmap(bitmap);
     paint = refPaint(paint);
 
@@ -296,8 +242,8 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top,
-        SkPaint* paint) {
+status_t DisplayListRenderer::drawBitmapData(const SkBitmap* bitmap, float left, float top,
+        const SkPaint* paint) {
     bitmap = refBitmapData(bitmap);
     paint = refPaint(paint);
 
@@ -305,21 +251,21 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
-        float* vertices, int* colors, SkPaint* paint) {
-    int count = (meshWidth + 1) * (meshHeight + 1) * 2;
+status_t DisplayListRenderer::drawBitmapMesh(const SkBitmap* bitmap, int meshWidth, int meshHeight,
+        const float* vertices, const int* colors, const SkPaint* paint) {
+    int vertexCount = (meshWidth + 1) * (meshHeight + 1);
     bitmap = refBitmap(bitmap);
-    vertices = refBuffer<float>(vertices, count);
+    vertices = refBuffer<float>(vertices, vertexCount * 2); // 2 floats per vertex
     paint = refPaint(paint);
-    colors = refBuffer<int>(colors, count);
+    colors = refBuffer<int>(colors, vertexCount); // 1 color per vertex
 
     addDrawOp(new (alloc()) DrawBitmapMeshOp(bitmap, meshWidth, meshHeight,
                     vertices, colors, paint));
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawPatch(SkBitmap* bitmap, Res_png_9patch* patch,
-        float left, float top, float right, float bottom, SkPaint* paint) {
+status_t DisplayListRenderer::drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch,
+        float left, float top, float right, float bottom, const SkPaint* paint) {
     bitmap = refBitmap(bitmap);
     patch = refPatch(patch);
     paint = refPaint(paint);
@@ -334,41 +280,41 @@
 }
 
 status_t DisplayListRenderer::drawRect(float left, float top, float right, float bottom,
-        SkPaint* paint) {
+        const SkPaint* paint) {
     paint = refPaint(paint);
     addDrawOp(new (alloc()) DrawRectOp(left, top, right, bottom, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawRoundRect(float left, float top, float right, float bottom,
-        float rx, float ry, SkPaint* paint) {
+        float rx, float ry, const SkPaint* paint) {
     paint = refPaint(paint);
     addDrawOp(new (alloc()) DrawRoundRectOp(left, top, right, bottom, rx, ry, paint));
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawCircle(float x, float y, float radius, SkPaint* paint) {
+status_t DisplayListRenderer::drawCircle(float x, float y, float radius, const SkPaint* paint) {
     paint = refPaint(paint);
     addDrawOp(new (alloc()) DrawCircleOp(x, y, radius, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawOval(float left, float top, float right, float bottom,
-        SkPaint* paint) {
+        const SkPaint* paint) {
     paint = refPaint(paint);
     addDrawOp(new (alloc()) DrawOvalOp(left, top, right, bottom, paint));
     return DrawGlInfo::kStatusDone;
 }
 
 status_t DisplayListRenderer::drawArc(float left, float top, float right, float bottom,
-        float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) {
+        float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint) {
     paint = refPaint(paint);
     addDrawOp(new (alloc()) DrawArcOp(left, top, right, bottom,
                     startAngle, sweepAngle, useCenter, paint));
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawPath(SkPath* path, SkPaint* paint) {
+status_t DisplayListRenderer::drawPath(const SkPath* path, const SkPaint* paint) {
     path = refPath(path);
     paint = refPaint(paint);
 
@@ -376,7 +322,7 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawLines(float* points, int count, SkPaint* paint) {
+status_t DisplayListRenderer::drawLines(const float* points, int count, const SkPaint* paint) {
     points = refBuffer<float>(points, count);
     paint = refPaint(paint);
 
@@ -384,7 +330,7 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawPoints(float* points, int count, SkPaint* paint) {
+status_t DisplayListRenderer::drawPoints(const float* points, int count, const SkPaint* paint) {
     points = refBuffer<float>(points, count);
     paint = refPaint(paint);
 
@@ -393,7 +339,7 @@
 }
 
 status_t DisplayListRenderer::drawTextOnPath(const char* text, int bytesCount, int count,
-        SkPath* path, float hOffset, float vOffset, SkPaint* paint) {
+        const SkPath* path, float hOffset, float vOffset, const SkPaint* paint) {
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
 
     text = refText(text, bytesCount);
@@ -407,7 +353,7 @@
 }
 
 status_t DisplayListRenderer::drawPosText(const char* text, int bytesCount, int count,
-        const float* positions, SkPaint* paint) {
+        const float* positions, const SkPaint* paint) {
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
 
     text = refText(text, bytesCount);
@@ -420,7 +366,7 @@
 }
 
 status_t DisplayListRenderer::drawText(const char* text, int bytesCount, int count,
-        float x, float y, const float* positions, SkPaint* paint,
+        float x, float y, const float* positions, const SkPaint* paint,
         float totalAdvance, const Rect& bounds, DrawOpMode drawOpMode) {
 
     if (!text || count <= 0) return DrawGlInfo::kStatusDone;
@@ -435,7 +381,7 @@
     return DrawGlInfo::kStatusDone;
 }
 
-status_t DisplayListRenderer::drawRects(const float* rects, int count, SkPaint* paint) {
+status_t DisplayListRenderer::drawRects(const float* rects, int count, const SkPaint* paint) {
     if (count <= 0) return DrawGlInfo::kStatusDone;
 
     rects = refBuffer<float>(rects, count);
@@ -453,15 +399,6 @@
     addStateOp(new (alloc()) SetupShaderOp(shader));
 }
 
-void DisplayListRenderer::resetColorFilter() {
-    addStateOp(new (alloc()) ResetColorFilterOp());
-}
-
-void DisplayListRenderer::setupColorFilter(SkiaColorFilter* filter) {
-    filter = refColorFilter(filter);
-    addStateOp(new (alloc()) SetupColorFilterOp(filter));
-}
-
 void DisplayListRenderer::resetShadow() {
     addStateOp(new (alloc()) ResetShadowOp());
     OpenGLRenderer::resetShadow();
@@ -506,12 +443,12 @@
 void DisplayListRenderer::addDrawOp(DrawOp* op) {
     Rect localBounds;
     if (op->getLocalBounds(mDrawModifiers, localBounds)) {
-        bool rejected = quickRejectNoScissor(localBounds.left, localBounds.top,
+        bool rejected = quickRejectConservative(localBounds.left, localBounds.top,
                 localBounds.right, localBounds.bottom);
         op->setQuickRejected(rejected);
     }
 
-    mHasDrawOps = true;
+    mDisplayListData->hasDrawOps = true;
     addOpInternal(op);
 }
 
diff --git a/libs/hwui/DisplayListRenderer.h b/libs/hwui/DisplayListRenderer.h
index d233150..04c5a73 100644
--- a/libs/hwui/DisplayListRenderer.h
+++ b/libs/hwui/DisplayListRenderer.h
@@ -22,9 +22,9 @@
 #include <SkPath.h>
 #include <cutils/compiler.h>
 
-#include "DisplayList.h"
 #include "DisplayListLogBuffer.h"
 #include "OpenGLRenderer.h"
+#include "RenderNode.h"
 
 namespace android {
 namespace uirenderer {
@@ -54,143 +54,113 @@
 class StateOp;
 
 /**
- * Records drawing commands in a display list for latter playback.
+ * Records drawing commands in a display list for later playback into an OpenGLRenderer.
  */
 class DisplayListRenderer: public OpenGLRenderer {
 public:
     ANDROID_API DisplayListRenderer();
     virtual ~DisplayListRenderer();
 
-    ANDROID_API DisplayList* getDisplayList(DisplayList* displayList);
+    ANDROID_API DisplayListData* finishRecording();
 
-    virtual bool isDeferred();
+    virtual bool isRecording() const { return true; }
 
+// ----------------------------------------------------------------------------
+// Frame state operations
+// ----------------------------------------------------------------------------
     virtual void setViewport(int width, int height);
     virtual status_t prepareDirty(float left, float top, float right, float bottom, bool opaque);
     virtual void finish();
-
-    virtual status_t callDrawGLFunction(Functor *functor, Rect& dirty);
-
     virtual void interrupt();
     virtual void resume();
 
+// ----------------------------------------------------------------------------
+// Canvas state operations
+// ----------------------------------------------------------------------------
+    // Save (layer)
     virtual int save(int flags);
     virtual void restore();
     virtual void restoreToCount(int saveCount);
-
     virtual int saveLayer(float left, float top, float right, float bottom,
-            int alpha, SkXfermode::Mode mode, int flags);
+            const SkPaint* paint, int flags);
 
-    virtual void translate(float dx, float dy);
+    // Matrix
+    virtual void translate(float dx, float dy, float dz);
     virtual void rotate(float degrees);
     virtual void scale(float sx, float sy);
     virtual void skew(float sx, float sy);
 
-    virtual void setMatrix(SkMatrix* matrix);
-    virtual void concatMatrix(SkMatrix* matrix);
+    virtual void setMatrix(const SkMatrix* matrix);
+    virtual void concatMatrix(const SkMatrix* matrix);
 
+    // Clip
     virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op);
-    virtual bool clipPath(SkPath* path, SkRegion::Op op);
-    virtual bool clipRegion(SkRegion* region, SkRegion::Op op);
+    virtual bool clipPath(const SkPath* path, SkRegion::Op op);
+    virtual bool clipRegion(const SkRegion* region, SkRegion::Op op);
 
-    virtual status_t drawDisplayList(DisplayList* displayList, Rect& dirty, int32_t flags);
-    virtual status_t drawLayer(Layer* layer, float x, float y);
-    virtual status_t drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
-    virtual status_t drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
-    virtual status_t drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
-            float srcRight, float srcBottom, float dstLeft, float dstTop,
-            float dstRight, float dstBottom, SkPaint* paint);
-    virtual status_t drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint);
-    virtual status_t drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
-            float* vertices, int* colors, SkPaint* paint);
-    virtual status_t drawPatch(SkBitmap* bitmap, Res_png_9patch* patch,
-            float left, float top, float right, float bottom, SkPaint* paint);
-    virtual status_t drawColor(int color, SkXfermode::Mode mode);
-    virtual status_t drawRect(float left, float top, float right, float bottom, SkPaint* paint);
-    virtual status_t drawRoundRect(float left, float top, float right, float bottom,
-            float rx, float ry, SkPaint* paint);
-    virtual status_t drawCircle(float x, float y, float radius, SkPaint* paint);
-    virtual status_t drawOval(float left, float top, float right, float bottom, SkPaint* paint);
-    virtual status_t drawArc(float left, float top, float right, float bottom,
-            float startAngle, float sweepAngle, bool useCenter, SkPaint* paint);
-    virtual status_t drawPath(SkPath* path, SkPaint* paint);
-    virtual status_t drawLines(float* points, int count, SkPaint* paint);
-    virtual status_t drawPoints(float* points, int count, SkPaint* paint);
-    virtual status_t drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
-            float hOffset, float vOffset, SkPaint* paint);
-    virtual status_t drawPosText(const char* text, int bytesCount, int count,
-            const float* positions, SkPaint* paint);
-    virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
-            const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds,
-            DrawOpMode drawOpMode);
-
-    virtual status_t drawRects(const float* rects, int count, SkPaint* paint);
-
+    // Misc - should be implemented with SkPaint inspection
     virtual void resetShader();
     virtual void setupShader(SkiaShader* shader);
 
-    virtual void resetColorFilter();
-    virtual void setupColorFilter(SkiaColorFilter* filter);
-
     virtual void resetShadow();
     virtual void setupShadow(float radius, float dx, float dy, int color);
 
     virtual void resetPaintFilter();
     virtual void setupPaintFilter(int clearBits, int setBits);
 
-    ANDROID_API void reset();
+// ----------------------------------------------------------------------------
+// Canvas draw operations
+// ----------------------------------------------------------------------------
+    virtual status_t drawColor(int color, SkXfermode::Mode mode);
 
-    sp<DisplayListData> getDisplayListData() const {
-        return mDisplayListData;
-    }
+    // Bitmap-based
+    virtual status_t drawBitmap(const SkBitmap* bitmap, float left, float top,
+            const SkPaint* paint);
+    virtual status_t drawBitmap(const SkBitmap* bitmap, const SkMatrix* matrix,
+            const SkPaint* paint);
+    virtual status_t drawBitmap(const SkBitmap* bitmap, float srcLeft, float srcTop,
+            float srcRight, float srcBottom, float dstLeft, float dstTop,
+            float dstRight, float dstBottom, const SkPaint* paint);
+    virtual status_t drawBitmapData(const SkBitmap* bitmap, float left, float top,
+            const SkPaint* paint);
+    virtual status_t drawBitmapMesh(const SkBitmap* bitmap, int meshWidth, int meshHeight,
+            const float* vertices, const int* colors, const SkPaint* paint);
+    virtual status_t drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch,
+            float left, float top, float right, float bottom, const SkPaint* paint);
 
-    const Vector<SkBitmap*>& getBitmapResources() const {
-        return mBitmapResources;
-    }
+    // Shapes
+    virtual status_t drawRect(float left, float top, float right, float bottom,
+            const SkPaint* paint);
+    virtual status_t drawRects(const float* rects, int count, const SkPaint* paint);
+    virtual status_t drawRoundRect(float left, float top, float right, float bottom,
+            float rx, float ry, const SkPaint* paint);
+    virtual status_t drawCircle(float x, float y, float radius, const SkPaint* paint);
+    virtual status_t drawOval(float left, float top, float right, float bottom,
+            const SkPaint* paint);
+    virtual status_t drawArc(float left, float top, float right, float bottom,
+            float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint);
+    virtual status_t drawPath(const SkPath* path, const SkPaint* paint);
+    virtual status_t drawLines(const float* points, int count, const SkPaint* paint);
+    virtual status_t drawPoints(const float* points, int count, const SkPaint* paint);
 
-    const Vector<SkBitmap*>& getOwnedBitmapResources() const {
-        return mOwnedBitmapResources;
-    }
+    // Text
+    virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
+            const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds,
+            DrawOpMode drawOpMode = kDrawOpMode_Immediate);
+    virtual status_t drawTextOnPath(const char* text, int bytesCount, int count, const SkPath* path,
+            float hOffset, float vOffset, const SkPaint* paint);
+    virtual status_t drawPosText(const char* text, int bytesCount, int count,
+            const float* positions, const SkPaint* paint);
 
-    const Vector<SkiaColorFilter*>& getFilterResources() const {
-        return mFilterResources;
-    }
+// ----------------------------------------------------------------------------
+// Canvas draw operations - special
+// ----------------------------------------------------------------------------
+    virtual status_t drawLayer(Layer* layer, float x, float y);
+    virtual status_t drawDisplayList(RenderNode* displayList, Rect& dirty,
+            int32_t replayFlags);
 
-    const Vector<Res_png_9patch*>& getPatchResources() const {
-        return mPatchResources;
-    }
-
-    const Vector<SkiaShader*>& getShaders() const {
-        return mShaders;
-    }
-
-    const Vector<SkPaint*>& getPaints() const {
-        return mPaints;
-    }
-
-    const Vector<SkPath*>& getPaths() const {
-        return mPaths;
-    }
-
-    const SortedVector<SkPath*>& getSourcePaths() const {
-        return mSourcePaths;
-    }
-
-    const Vector<SkRegion*>& getRegions() const {
-        return mRegions;
-    }
-
-    const Vector<Layer*>& getLayers() const {
-        return mLayers;
-    }
-
-    const Vector<SkMatrix*>& getMatrices() const {
-        return mMatrices;
-    }
-
-    uint32_t getFunctorCount() const {
-        return mFunctorCount;
-    }
+    // TODO: rename for consistency
+    virtual status_t callDrawGLFunction(Functor* functor, Rect& dirty);
 
 private:
     void insertRestoreToCount();
@@ -206,8 +176,9 @@
     }
 
     template<class T>
-    inline T* refBuffer(const T* srcBuffer, int32_t count) {
-        if (srcBuffer == NULL) return NULL;
+    inline const T* refBuffer(const T* srcBuffer, int32_t count) {
+        if (!srcBuffer) return NULL;
+
         T* dstBuffer = (T*) mDisplayListData->allocator.alloc(count * sizeof(T));
         memcpy(dstBuffer, srcBuffer, count * sizeof(T));
         return dstBuffer;
@@ -217,86 +188,88 @@
         return (char*) refBuffer<uint8_t>((uint8_t*)text, byteLength);
     }
 
-    inline SkPath* refPath(SkPath* path) {
+    inline const SkPath* refPath(const SkPath* path) {
         if (!path) return NULL;
 
-        SkPath* pathCopy = mPathMap.valueFor(path);
+        const SkPath* pathCopy = mPathMap.valueFor(path);
         if (pathCopy == NULL || pathCopy->getGenerationID() != path->getGenerationID()) {
-            pathCopy = new SkPath(*path);
-            pathCopy->setSourcePath(path);
+            SkPath* newPathCopy = new SkPath(*path);
+            newPathCopy->setSourcePath(path);
+
+            pathCopy = newPathCopy;
             // replaceValueFor() performs an add if the entry doesn't exist
             mPathMap.replaceValueFor(path, pathCopy);
-            mPaths.add(pathCopy);
+            mDisplayListData->paths.add(pathCopy);
         }
-        if (mSourcePaths.indexOf(path) < 0) {
+        if (mDisplayListData->sourcePaths.indexOf(path) < 0) {
             mCaches.resourceCache.incrementRefcount(path);
-            mSourcePaths.add(path);
+            mDisplayListData->sourcePaths.add(path);
         }
         return pathCopy;
     }
 
-    inline SkPaint* refPaint(SkPaint* paint) {
+    inline const SkPaint* refPaint(const SkPaint* paint) {
         if (!paint) {
             return paint;
         }
 
-        SkPaint* paintCopy = mPaintMap.valueFor(paint);
+        const SkPaint* paintCopy = mPaintMap.valueFor(paint);
         if (paintCopy == NULL || paintCopy->getGenerationID() != paint->getGenerationID()) {
             paintCopy = new SkPaint(*paint);
             // replaceValueFor() performs an add if the entry doesn't exist
             mPaintMap.replaceValueFor(paint, paintCopy);
-            mPaints.add(paintCopy);
+            mDisplayListData->paints.add(paintCopy);
         }
 
         return paintCopy;
     }
 
-    inline SkRegion* refRegion(SkRegion* region) {
+    inline const SkRegion* refRegion(const SkRegion* region) {
         if (!region) {
             return region;
         }
 
-        SkRegion* regionCopy = mRegionMap.valueFor(region);
+        const SkRegion* regionCopy = mRegionMap.valueFor(region);
         // TODO: Add generation ID to SkRegion
         if (regionCopy == NULL) {
             regionCopy = new SkRegion(*region);
             // replaceValueFor() performs an add if the entry doesn't exist
             mRegionMap.replaceValueFor(region, regionCopy);
-            mRegions.add(regionCopy);
+            mDisplayListData->regions.add(regionCopy);
         }
 
         return regionCopy;
     }
 
-    inline SkMatrix* refMatrix(SkMatrix* matrix) {
+    inline const SkMatrix* refMatrix(const SkMatrix* matrix) {
         if (matrix) {
             // Copying the matrix is cheap and prevents against the user changing
             // the original matrix before the operation that uses it
-            SkMatrix* copy = new SkMatrix(*matrix);
-            mMatrices.add(copy);
+            const SkMatrix* copy = new SkMatrix(*matrix);
+            mDisplayListData->matrices.add(copy);
             return copy;
         }
         return matrix;
     }
 
     inline Layer* refLayer(Layer* layer) {
-        mLayers.add(layer);
+        mDisplayListData->layers.add(layer);
         mCaches.resourceCache.incrementRefcount(layer);
         return layer;
     }
 
-    inline SkBitmap* refBitmap(SkBitmap* bitmap) {
+    inline const SkBitmap* refBitmap(const SkBitmap* bitmap) {
         // Note that this assumes the bitmap is immutable. There are cases this won't handle
         // correctly, such as creating the bitmap from scratch, drawing with it, changing its
         // contents, and drawing again. The only fix would be to always copy it the first time,
         // which doesn't seem worth the extra cycles for this unlikely case.
-        mBitmapResources.add(bitmap);
+        mDisplayListData->bitmapResources.add(bitmap);
         mCaches.resourceCache.incrementRefcount(bitmap);
         return bitmap;
     }
 
-    inline SkBitmap* refBitmapData(SkBitmap* bitmap) {
-        mOwnedBitmapResources.add(bitmap);
+    inline const SkBitmap* refBitmapData(const SkBitmap* bitmap) {
+        mDisplayListData->ownedBitmapResources.add(bitmap);
         mCaches.resourceCache.incrementRefcount(bitmap);
         return bitmap;
     }
@@ -310,60 +283,33 @@
             shaderCopy = shader->copy();
             // replaceValueFor() performs an add if the entry doesn't exist
             mShaderMap.replaceValueFor(shader, shaderCopy);
-            mShaders.add(shaderCopy);
+            mDisplayListData->shaders.add(shaderCopy);
             mCaches.resourceCache.incrementRefcount(shaderCopy);
         }
         return shaderCopy;
     }
 
-    inline SkiaColorFilter* refColorFilter(SkiaColorFilter* colorFilter) {
-        mFilterResources.add(colorFilter);
-        mCaches.resourceCache.incrementRefcount(colorFilter);
-        return colorFilter;
-    }
-
-    inline Res_png_9patch* refPatch(Res_png_9patch* patch) {
-        mPatchResources.add(patch);
+    inline const Res_png_9patch* refPatch(const Res_png_9patch* patch) {
+        mDisplayListData->patchResources.add(patch);
         mCaches.resourceCache.incrementRefcount(patch);
         return patch;
     }
 
-    Vector<SkBitmap*> mBitmapResources;
-    Vector<SkBitmap*> mOwnedBitmapResources;
-    Vector<SkiaColorFilter*> mFilterResources;
-    Vector<Res_png_9patch*> mPatchResources;
-
-    Vector<SkPaint*> mPaints;
-    DefaultKeyedVector<SkPaint*, SkPaint*> mPaintMap;
-
-    Vector<SkPath*> mPaths;
-    DefaultKeyedVector<SkPath*, SkPath*> mPathMap;
-
-    SortedVector<SkPath*> mSourcePaths;
-
-    Vector<SkRegion*> mRegions;
-    DefaultKeyedVector<SkRegion*, SkRegion*> mRegionMap;
-
-    Vector<SkiaShader*> mShaders;
+    DefaultKeyedVector<const SkPaint*, const SkPaint*> mPaintMap;
+    DefaultKeyedVector<const SkPath*, const SkPath*> mPathMap;
+    DefaultKeyedVector<const SkRegion*, const SkRegion*> mRegionMap;
     DefaultKeyedVector<SkiaShader*, SkiaShader*> mShaderMap;
 
-    Vector<SkMatrix*> mMatrices;
-
-    Vector<Layer*> mLayers;
-
-    int mRestoreSaveCount;
-
     Caches& mCaches;
-    sp<DisplayListData> mDisplayListData;
+    DisplayListData* mDisplayListData;
 
     float mTranslateX;
     float mTranslateY;
     bool mHasTranslate;
-    bool mHasDrawOps;
 
-    uint32_t mFunctorCount;
+    int mRestoreSaveCount;
 
-    friend class DisplayList;
+    friend class RenderNode;
 
 }; // class DisplayListRenderer
 
diff --git a/libs/hwui/FontRenderer.cpp b/libs/hwui/FontRenderer.cpp
index 0be17ff..b52003c 100644
--- a/libs/hwui/FontRenderer.cpp
+++ b/libs/hwui/FontRenderer.cpp
@@ -72,18 +72,19 @@
             break;
         }
     }
-    renderer->setupDrawColorFilter();
+    renderer->setupDrawColorFilter(paint->getColorFilter());
     renderer->setupDrawShader();
-    renderer->setupDrawBlending(true, mode);
+    renderer->setupDrawBlending(paint);
     renderer->setupDrawProgram();
-    renderer->setupDrawModelView(x, y, x, y, pureTranslate, true);
+    renderer->setupDrawModelView(kModelViewMode_Translate, false,
+            0.0f, 0.0f, 0.0f, 0.0f, pureTranslate);
     // Calling setupDrawTexture with the name 0 will enable the
     // uv attributes and increase the texture unit count
     // texture binding will be performed by the font renderer as
     // needed
     renderer->setupDrawTexture(0);
     renderer->setupDrawPureColorUniforms();
-    renderer->setupDrawColorFilterUniforms();
+    renderer->setupDrawColorFilterUniforms(paint->getColorFilter());
     renderer->setupDrawShaderUniforms(pureTranslate);
     renderer->setupDrawTextGammaUniforms();
 
@@ -497,7 +498,7 @@
                 }
 
                 checkTextureUpdate();
-                caches.bindIndicesBuffer();
+                caches.bindQuadIndicesBuffer();
 
                 if (!mDrawn) {
                     // If returns true, a VBO was bound and we must
@@ -514,8 +515,8 @@
             texture->setLinearFiltering(mLinearFiltering, false);
 
             TextureVertex* mesh = texture->mesh();
-            caches.bindPositionVertexPointer(force, &mesh[0].position[0]);
-            caches.bindTexCoordsVertexPointer(force, &mesh[0].texture[0]);
+            caches.bindPositionVertexPointer(force, &mesh[0].x);
+            caches.bindTexCoordsVertexPointer(force, &mesh[0].u);
             force = false;
 
             glDrawElements(GL_TRIANGLES, texture->meshElementCount(),
@@ -586,11 +587,11 @@
     }
 }
 
-void FontRenderer::setFont(SkPaint* paint, const mat4& matrix) {
+void FontRenderer::setFont(const SkPaint* paint, const mat4& matrix) {
     mCurrentFont = Font::create(this, paint, matrix);
 }
 
-FontRenderer::DropShadow FontRenderer::renderDropShadow(SkPaint* paint, const char *text,
+FontRenderer::DropShadow FontRenderer::renderDropShadow(const SkPaint* paint, const char *text,
         uint32_t startIndex, uint32_t len, int numGlyphs, uint32_t radius, const float* positions) {
     checkInit();
 
@@ -675,7 +676,8 @@
     issueDrawCommand();
 }
 
-void FontRenderer::precache(SkPaint* paint, const char* text, int numGlyphs, const mat4& matrix) {
+void FontRenderer::precache(const SkPaint* paint, const char* text, int numGlyphs,
+        const mat4& matrix) {
     Font* font = Font::create(this, paint, matrix);
     font->precache(paint, text, numGlyphs);
 }
@@ -684,7 +686,7 @@
     checkTextureUpdate();
 }
 
-bool FontRenderer::renderPosText(SkPaint* paint, const Rect* clip, const char *text,
+bool FontRenderer::renderPosText(const SkPaint* paint, const Rect* clip, const char *text,
         uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y,
         const float* positions, Rect* bounds, Functor* functor, bool forceFinish) {
     if (!mCurrentFont) {
@@ -702,8 +704,8 @@
     return mDrawn;
 }
 
-bool FontRenderer::renderTextOnPath(SkPaint* paint, const Rect* clip, const char *text,
-        uint32_t startIndex, uint32_t len, int numGlyphs, SkPath* path,
+bool FontRenderer::renderTextOnPath(const SkPaint* paint, const Rect* clip, const char *text,
+        uint32_t startIndex, uint32_t len, int numGlyphs, const SkPath* path,
         float hOffset, float vOffset, Rect* bounds, Functor* functor) {
     if (!mCurrentFont) {
         ALOGE("No font set");
diff --git a/libs/hwui/FontRenderer.h b/libs/hwui/FontRenderer.h
index aa7e776..9259028 100644
--- a/libs/hwui/FontRenderer.h
+++ b/libs/hwui/FontRenderer.h
@@ -44,8 +44,6 @@
 }
 #endif
 
-class Functor;
-
 namespace android {
 namespace uirenderer {
 
@@ -64,7 +62,7 @@
     };
 
     TextSetupFunctor(OpenGLRenderer* renderer, float x, float y, bool pureTranslate,
-            int alpha, SkXfermode::Mode mode, SkPaint* paint): Functor(),
+            int alpha, SkXfermode::Mode mode, const SkPaint* paint): Functor(),
             renderer(renderer), x(x), y(y), pureTranslate(pureTranslate),
             alpha(alpha), mode(mode), paint(paint) {
     }
@@ -78,7 +76,7 @@
     bool pureTranslate;
     int alpha;
     SkXfermode::Mode mode;
-    SkPaint* paint;
+    const SkPaint* paint;
 };
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -97,20 +95,20 @@
         mGammaTable = gammaTable;
     }
 
-    void setFont(SkPaint* paint, const mat4& matrix);
+    void setFont(const SkPaint* paint, const mat4& matrix);
 
-    void precache(SkPaint* paint, const char* text, int numGlyphs, const mat4& matrix);
+    void precache(const SkPaint* paint, const char* text, int numGlyphs, const mat4& matrix);
     void endPrecaching();
 
     // bounds is an out parameter
-    bool renderPosText(SkPaint* paint, const Rect* clip, const char *text, uint32_t startIndex,
-            uint32_t len, int numGlyphs, int x, int y, const float* positions, Rect* bounds,
-            Functor* functor, bool forceFinish = true);
+    bool renderPosText(const SkPaint* paint, const Rect* clip, const char *text,
+            uint32_t startIndex, uint32_t len, int numGlyphs, int x, int y, const float* positions,
+            Rect* bounds, Functor* functor, bool forceFinish = true);
 
     // bounds is an out parameter
-    bool renderTextOnPath(SkPaint* paint, const Rect* clip, const char *text, uint32_t startIndex,
-            uint32_t len, int numGlyphs, SkPath* path, float hOffset, float vOffset, Rect* bounds,
-            Functor* functor);
+    bool renderTextOnPath(const SkPaint* paint, const Rect* clip, const char *text,
+            uint32_t startIndex, uint32_t len, int numGlyphs, const SkPath* path,
+            float hOffset, float vOffset, Rect* bounds, Functor* functor);
 
     struct DropShadow {
         DropShadow() { };
@@ -130,7 +128,7 @@
 
     // After renderDropShadow returns, the called owns the memory in DropShadow.image
     // and is responsible for releasing it when it's done with it
-    DropShadow renderDropShadow(SkPaint* paint, const char *text, uint32_t startIndex,
+    DropShadow renderDropShadow(const SkPaint* paint, const char *text, uint32_t startIndex,
             uint32_t len, int numGlyphs, uint32_t radius, const float* positions);
 
     void setTextureFiltering(bool linearFiltering) {
diff --git a/libs/hwui/GradientCache.cpp b/libs/hwui/GradientCache.cpp
index 0916942..ffd1e8c 100644
--- a/libs/hwui/GradientCache.cpp
+++ b/libs/hwui/GradientCache.cpp
@@ -115,7 +115,7 @@
 // Callbacks
 ///////////////////////////////////////////////////////////////////////////////
 
-void GradientCache::operator()(GradientCacheEntry& shader, Texture*& texture) {
+void GradientCache::operator()(GradientCacheEntry&, Texture*& texture) {
     if (texture) {
         const uint32_t size = texture->width * texture->height * bytesPerPixel();
         mSize -= size;
@@ -185,7 +185,7 @@
         mCache.removeOldest();
     }
 
-    generateTexture(colors, positions, count, texture);
+    generateTexture(colors, positions, texture);
 
     mSize += size;
     mCache.put(gradient, texture);
@@ -238,8 +238,7 @@
     dst += 4 * sizeof(float);
 }
 
-void GradientCache::generateTexture(uint32_t* colors, float* positions,
-        int count, Texture* texture) {
+void GradientCache::generateTexture(uint32_t* colors, float* positions, Texture* texture) {
     const uint32_t width = texture->width;
     const GLsizei rowBytes = width * bytesPerPixel();
     uint8_t pixels[rowBytes * texture->height];
diff --git a/libs/hwui/GradientCache.h b/libs/hwui/GradientCache.h
index 43934d9..6a783b1 100644
--- a/libs/hwui/GradientCache.h
+++ b/libs/hwui/GradientCache.h
@@ -151,7 +151,7 @@
     Texture* addLinearGradient(GradientCacheEntry& gradient,
             uint32_t* colors, float* positions, int count);
 
-    void generateTexture(uint32_t* colors, float* positions, int count, Texture* texture);
+    void generateTexture(uint32_t* colors, float* positions, Texture* texture);
 
     struct GradientInfo {
         uint32_t width;
diff --git a/libs/hwui/Interpolator.cpp b/libs/hwui/Interpolator.cpp
new file mode 100644
index 0000000..004ddf5
--- /dev/null
+++ b/libs/hwui/Interpolator.cpp
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#include "Interpolator.h"
+
+#include <math.h>
+
+namespace android {
+namespace uirenderer {
+
+Interpolator* Interpolator::createDefaultInterpolator() {
+    return new AccelerateDecelerateInterpolator();
+}
+
+float AccelerateDecelerateInterpolator::interpolate(float input) {
+    return (float)(cosf((input + 1) * M_PI) / 2.0f) + 0.5f;
+}
+
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/Interpolator.h b/libs/hwui/Interpolator.h
new file mode 100644
index 0000000..2cfb60c
--- /dev/null
+++ b/libs/hwui/Interpolator.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef INTERPOLATOR_H
+#define INTERPOLATOR_H
+
+namespace android {
+namespace uirenderer {
+
+class Interpolator {
+public:
+    virtual ~Interpolator() {}
+
+    virtual float interpolate(float input) = 0;
+
+    static Interpolator* createDefaultInterpolator();
+
+protected:
+    Interpolator() {}
+};
+
+class AccelerateDecelerateInterpolator : public Interpolator {
+public:
+    AccelerateDecelerateInterpolator() {}
+    virtual ~AccelerateDecelerateInterpolator() {}
+
+    virtual float interpolate(float input);
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* INTERPOLATOR_H */
diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp
index bd371a3..9606e58 100644
--- a/libs/hwui/Layer.cpp
+++ b/libs/hwui/Layer.cpp
@@ -18,12 +18,12 @@
 
 #include <utils/Log.h>
 
-#include "DisplayList.h"
+#include "Caches.h"
 #include "DeferredDisplayList.h"
 #include "Layer.h"
 #include "LayerRenderer.h"
 #include "OpenGLRenderer.h"
-#include "Caches.h"
+#include "RenderNode.h"
 
 namespace android {
 namespace uirenderer {
@@ -46,17 +46,20 @@
     stencil = NULL;
     debugDrawUpdate = false;
     hasDrawnSinceUpdate = false;
+    forceFilter = false;
     deferredList = NULL;
+    convexMask = NULL;
     caches.resourceCache.incrementRefcount(this);
 }
 
 Layer::~Layer() {
-    if (colorFilter) caches.resourceCache.decrementRefcount(colorFilter);
+    SkSafeUnref(colorFilter);
     removeFbo();
     deleteTexture();
 
     delete[] mesh;
     delete deferredList;
+    delete renderer;
 }
 
 uint32_t Layer::computeIdealWidth(uint32_t layerWidth) {
@@ -67,6 +70,13 @@
     return uint32_t(ceilf(layerHeight / float(LAYER_SIZE)) * LAYER_SIZE);
 }
 
+void Layer::requireRenderer() {
+    if (!renderer) {
+        renderer = new LayerRenderer(this);
+        renderer->initProperties();
+    }
+}
+
 bool Layer::resize(const uint32_t width, const uint32_t height) {
     uint32_t desiredWidth = computeIdealWidth(width);
     uint32_t desiredHeight = computeIdealWidth(height);
@@ -131,18 +141,22 @@
     }
 }
 
-void Layer::setPaint(SkPaint* paint) {
-    OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode);
+void Layer::updateDeferred(RenderNode* displayList,
+        int left, int top, int right, int bottom) {
+    requireRenderer();
+    this->displayList = displayList;
+    const Rect r(left, top, right, bottom);
+    dirtyRect.unionWith(r);
+    deferredUpdateScheduled = true;
 }
 
-void Layer::setColorFilter(SkiaColorFilter* filter) {
-    if (colorFilter) {
-        caches.resourceCache.decrementRefcount(colorFilter);
-    }
-    colorFilter = filter;
-    if (colorFilter) {
-        caches.resourceCache.incrementRefcount(colorFilter);
-    }
+void Layer::setPaint(const SkPaint* paint) {
+    OpenGLRenderer::getAlphaAndModeDirect(paint, &alpha, &mode);
+    setColorFilter((paint) ? paint->getColorFilter() : NULL);
+}
+
+void Layer::setColorFilter(SkColorFilter* filter) {
+    SkRefCnt_SafeAssign(colorFilter, filter);
 }
 
 void Layer::bindTexture() const {
@@ -194,25 +208,23 @@
         dirtyRect.set(0, 0, width, height);
     }
 
-    if (deferredList) {
-        deferredList->reset(dirtyRect);
-    } else {
-        deferredList = new DeferredDisplayList(dirtyRect);
-    }
+    delete deferredList;
+    deferredList = new DeferredDisplayList(dirtyRect);
+
     DeferStateStruct deferredState(*deferredList, *renderer,
-            DisplayList::kReplayFlag_ClipChildren);
+            RenderNode::kReplayFlag_ClipChildren);
 
     renderer->initViewport(width, height);
     renderer->setupFrameState(dirtyRect.left, dirtyRect.top,
             dirtyRect.right, dirtyRect.bottom, !isBlend());
 
-    displayList->defer(deferredState, 0);
+    displayList->computeOrdering();
+    displayList->deferNodeTree(deferredState);
 
     deferredUpdateScheduled = false;
 }
 
 void Layer::cancelDefer() {
-    renderer = NULL;
     displayList = NULL;
     deferredUpdateScheduled = false;
     if (deferredList) {
@@ -231,7 +243,6 @@
         deferredList->flush(*renderer, dirtyRect);
 
         renderer->finish();
-        renderer = NULL;
 
         dirtyRect.setEmpty();
         displayList = NULL;
@@ -243,10 +254,9 @@
     renderer->prepareDirty(dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom,
             !isBlend());
 
-    renderer->drawDisplayList(displayList, dirtyRect, DisplayList::kReplayFlag_ClipChildren);
+    renderer->drawDisplayList(displayList.get(), dirtyRect, RenderNode::kReplayFlag_ClipChildren);
 
     renderer->finish();
-    renderer = NULL;
 
     dirtyRect.setEmpty();
 
diff --git a/libs/hwui/Layer.h b/libs/hwui/Layer.h
index b70042f..49610d5 100644
--- a/libs/hwui/Layer.h
+++ b/libs/hwui/Layer.h
@@ -17,7 +17,9 @@
 #ifndef ANDROID_HWUI_LAYER_H
 #define ANDROID_HWUI_LAYER_H
 
+#include <cutils/compiler.h>
 #include <sys/types.h>
+#include <utils/StrongPointer.h>
 
 #include <GLES2/gl2.h>
 
@@ -26,9 +28,9 @@
 #include <SkPaint.h>
 #include <SkXfermode.h>
 
+#include "Matrix.h"
 #include "Rect.h"
 #include "RenderBuffer.h"
-#include "SkiaColorFilter.h"
 #include "Texture.h"
 #include "Vertex.h"
 
@@ -42,14 +44,15 @@
 // Forward declarations
 class Caches;
 class OpenGLRenderer;
-class DisplayList;
+class RenderNode;
 class DeferredDisplayList;
 class DeferStateStruct;
 
 /**
  * A layer has dimensions and is backed by an OpenGL texture or FBO.
  */
-struct Layer {
+class Layer {
+public:
     Layer(const uint32_t layerWidth, const uint32_t layerHeight);
     ~Layer();
 
@@ -82,14 +85,8 @@
         regionRect.translate(layer.left, layer.top);
     }
 
-    void updateDeferred(OpenGLRenderer* renderer, DisplayList* displayList,
-            int left, int top, int right, int bottom) {
-        this->renderer = renderer;
-        this->displayList = displayList;
-        const Rect r(left, top, right, bottom);
-        dirtyRect.unionWith(r);
-        deferredUpdateScheduled = true;
-    }
+    void updateDeferred(RenderNode* displayList,
+            int left, int top, int right, int bottom);
 
     inline uint32_t getWidth() const {
         return texture.width;
@@ -115,7 +112,7 @@
         texture.height = height;
     }
 
-    ANDROID_API void setPaint(SkPaint* paint);
+    ANDROID_API void setPaint(const SkPaint* paint);
 
     inline void setBlend(bool blend) {
         texture.blend = blend;
@@ -125,6 +122,14 @@
         return texture.blend;
     }
 
+    inline void setForceFilter(bool forceFilter) {
+        this->forceFilter = forceFilter;
+    }
+
+    inline bool getForceFilter() const {
+        return forceFilter;
+    }
+
     inline void setAlpha(int alpha) {
         this->alpha = alpha;
     }
@@ -216,11 +221,19 @@
         this->textureLayer = textureLayer;
     }
 
-    inline SkiaColorFilter* getColorFilter() const {
+    inline SkColorFilter* getColorFilter() const {
         return colorFilter;
     }
 
-    ANDROID_API void setColorFilter(SkiaColorFilter* filter);
+    ANDROID_API void setColorFilter(SkColorFilter* filter);
+
+    inline void setConvexMask(const SkPath* convexMask) {
+        this->convexMask = convexMask;
+    }
+
+    inline const SkPath* getConvexMask() {
+        return convexMask;
+    }
 
     void bindStencilRenderBuffer() const;
 
@@ -284,12 +297,14 @@
      */
     bool deferredUpdateScheduled;
     OpenGLRenderer* renderer;
-    DisplayList* displayList;
+    sp<RenderNode> displayList;
     Rect dirtyRect;
     bool debugDrawUpdate;
     bool hasDrawnSinceUpdate;
 
 private:
+    void requireRenderer();
+
     Caches& caches;
 
     /**
@@ -338,12 +353,18 @@
     /**
      * Color filter used to draw this layer. Optional.
      */
-    SkiaColorFilter* colorFilter;
+    SkColorFilter* colorFilter;
+
+    /**
+     * Indicates raster data backing the layer is scaled, requiring filtration.
+     */
+    bool forceFilter;
 
     /**
      * Opacity of the layer.
      */
     int alpha;
+
     /**
      * Blending mode of the layer.
      */
@@ -365,6 +386,13 @@
      */
     DeferredDisplayList* deferredList;
 
+    /**
+     * This convex path should be used to mask the layer's draw to the screen.
+     *
+     * Data not owned/managed by layer object.
+     */
+    const SkPath* convexMask;
+
 }; // struct Layer
 
 }; // namespace uirenderer
diff --git a/libs/hwui/LayerRenderer.cpp b/libs/hwui/LayerRenderer.cpp
index f8076cc..e0ac2ba 100644
--- a/libs/hwui/LayerRenderer.cpp
+++ b/libs/hwui/LayerRenderer.cpp
@@ -92,7 +92,7 @@
     // who will invoke OpenGLRenderer::resume()
 }
 
-GLint LayerRenderer::getTargetFbo() const {
+GLuint LayerRenderer::getTargetFbo() const {
     return mLayer->getFbo();
 }
 
@@ -117,7 +117,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 Region* LayerRenderer::getRegion() const {
-    if (getSnapshot()->flags & Snapshot::kFlagFboTarget) {
+    if (currentSnapshot()->flags & Snapshot::kFlagFboTarget) {
         return OpenGLRenderer::getRegion();
     }
     return &mLayer->region;
@@ -184,7 +184,7 @@
 // Layers management
 ///////////////////////////////////////////////////////////////////////////////
 
-Layer* LayerRenderer::createLayer(uint32_t width, uint32_t height, bool isOpaque) {
+Layer* LayerRenderer::createRenderLayer(uint32_t width, uint32_t height) {
     LAYER_RENDERER_LOGD("Requesting new render layer %dx%d", width, height);
 
     Caches& caches = Caches::getInstance();
@@ -221,7 +221,6 @@
     layer->texCoords.set(0.0f, height / float(layer->getHeight()),
             width / float(layer->getWidth()), 0.0f);
     layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
-    layer->setBlend(!isOpaque);
     layer->setColorFilter(NULL);
     layer->setDirty(true);
     layer->region.clear();
@@ -270,13 +269,12 @@
     return true;
 }
 
-Layer* LayerRenderer::createTextureLayer(bool isOpaque) {
+Layer* LayerRenderer::createTextureLayer() {
     LAYER_RENDERER_LOGD("Creating new texture layer");
 
     Layer* layer = new Layer(0, 0);
     layer->setCacheable(false);
     layer->setTextureLayer(true);
-    layer->setBlend(!isOpaque);
     layer->setEmpty(true);
     layer->setFbo(0);
     layer->setAlpha(255, SkXfermode::kSrcOver_Mode);
@@ -292,14 +290,15 @@
 }
 
 void LayerRenderer::updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
-        bool isOpaque, GLenum renderTarget, float* transform) {
+        bool isOpaque, bool forceFilter, GLenum renderTarget, float* textureTransform) {
     if (layer) {
         layer->setBlend(!isOpaque);
+        layer->setForceFilter(forceFilter);
         layer->setSize(width, height);
         layer->layer.set(0.0f, 0.0f, width, height);
         layer->region.set(width, height);
         layer->regionRect.set(0.0f, 0.0f, width, height);
-        layer->getTexTransform().load(transform);
+        layer->getTexTransform().load(textureTransform);
 
         if (renderTarget != layer->getRenderTarget()) {
             layer->setRenderTarget(renderTarget);
diff --git a/libs/hwui/LayerRenderer.h b/libs/hwui/LayerRenderer.h
index 5f86731..40e461a 100644
--- a/libs/hwui/LayerRenderer.h
+++ b/libs/hwui/LayerRenderer.h
@@ -52,11 +52,11 @@
     virtual status_t clear(float left, float top, float right, float bottom, bool opaque);
     virtual void finish();
 
-    ANDROID_API static Layer* createTextureLayer(bool isOpaque);
-    ANDROID_API static Layer* createLayer(uint32_t width, uint32_t height, bool isOpaque = false);
+    ANDROID_API static Layer* createTextureLayer();
+    ANDROID_API static Layer* createRenderLayer(uint32_t width, uint32_t height);
     ANDROID_API static bool resizeLayer(Layer* layer, uint32_t width, uint32_t height);
     ANDROID_API static void updateTextureLayer(Layer* layer, uint32_t width, uint32_t height,
-            bool isOpaque, GLenum renderTarget, float* transform);
+            bool isOpaque, bool forceFilter, GLenum renderTarget, float* textureTransform);
     ANDROID_API static void destroyLayer(Layer* layer);
     ANDROID_API static void destroyLayerDeferred(Layer* layer);
     ANDROID_API static bool copyLayer(Layer* layer, SkBitmap* bitmap);
@@ -67,7 +67,7 @@
     virtual void ensureStencilBuffer();
     virtual bool hasLayer() const;
     virtual Region* getRegion() const;
-    virtual GLint getTargetFbo() const;
+    virtual GLuint getTargetFbo() const;
     virtual bool suppressErrorChecks() const;
 
 private:
diff --git a/libs/hwui/Matrix.cpp b/libs/hwui/Matrix.cpp
index ba22071..f06106b 100644
--- a/libs/hwui/Matrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -89,8 +89,9 @@
         float m01 = data[kSkewX];
         float m10 = data[kSkewY];
         float m11 = data[kScaleY];
+        float m32 = data[kTranslateZ];
 
-        if (m01 != 0.0f || m10 != 0.0f) {
+        if (m01 != 0.0f || m10 != 0.0f || m32 != 0.0f) {
             mType |= kTypeAffine;
         }
 
@@ -131,11 +132,13 @@
 }
 
 bool Matrix4::isPureTranslate() const {
-    return getGeometryType() <= kTypeTranslate;
+    // NOTE: temporary hack to workaround ignoreTransform behavior with Z values
+    // TODO: separate this into isPure2dTranslate vs isPure3dTranslate
+    return getGeometryType() <= kTypeTranslate && (data[kTranslateZ] == 0.0f);
 }
 
 bool Matrix4::isSimple() const {
-    return getGeometryType() <= (kTypeScale | kTypeTranslate);
+    return getGeometryType() <= (kTypeScale | kTypeTranslate) && (data[kTranslateZ] == 0.0f);
 }
 
 bool Matrix4::isIdentity() const {
@@ -382,6 +385,19 @@
     mType = kTypeTranslate | kTypeScale | kTypeRectToRect;
 }
 
+float Matrix4::mapZ(const Vector3& orig) const {
+    // duplicates logic for mapPoint3d's z coordinate
+    return orig.x * data[2] + orig.y * data[6] + orig.z * data[kScaleZ] + data[kTranslateZ];
+}
+
+void Matrix4::mapPoint3d(Vector3& vec) const {
+    //TODO: optimize simple case
+    const Vector3 orig(vec);
+    vec.x = orig.x * data[kScaleX] + orig.y * data[kSkewX] + orig.z * data[8] + data[kTranslateX];
+    vec.y = orig.x * data[kSkewY] + orig.y * data[kScaleY] + orig.z * data[9] + data[kTranslateY];
+    vec.z = orig.x * data[2] + orig.y * data[6] + orig.z * data[kScaleZ] + data[kTranslateZ];
+}
+
 #define MUL_ADD_STORE(a, b, c) a = (a) * (b) + (c)
 
 void Matrix4::mapPoint(float& x, float& y) const {
diff --git a/libs/hwui/Matrix.h b/libs/hwui/Matrix.h
index b861ba4..26cb05f 100644
--- a/libs/hwui/Matrix.h
+++ b/libs/hwui/Matrix.h
@@ -26,12 +26,20 @@
 namespace android {
 namespace uirenderer {
 
-#define MATRIX_STRING "[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]"
-#define MATRIX_ARGS(m) \
+#define SK_MATRIX_STRING "[%.2f %.2f %.2f] [%.2f %.2f %.2f] [%.2f %.2f %.2f]"
+#define SK_MATRIX_ARGS(m) \
     (m)->get(0), (m)->get(1), (m)->get(2), \
     (m)->get(3), (m)->get(4), (m)->get(5), \
     (m)->get(6), (m)->get(7), (m)->get(8)
 
+#define MATRIX_4_STRING "[%.2f %.2f %.2f %.2f] [%.2f %.2f %.2f %.2f]" \
+    " [%.2f %.2f %.2f %.2f] [%.2f %.2f %.2f %.2f]"
+#define MATRIX_4_ARGS(m) \
+    (m)->data[0], (m)->data[4], (m)->data[8], (m)->data[12], \
+    (m)->data[1], (m)->data[5], (m)->data[9], (m)->data[13], \
+    (m)->data[2], (m)->data[6], (m)->data[10], (m)->data[14], \
+    (m)->data[3], (m)->data[7], (m)->data[11], (m)->data[15] \
+
 ///////////////////////////////////////////////////////////////////////////////
 // Classes
 ///////////////////////////////////////////////////////////////////////////////
@@ -134,17 +142,18 @@
 
     void multiply(float v);
 
-    void translate(float x, float y) {
+    void translate(float x, float y, float z = 0) {
         if ((getType() & sGeometryMask) <= kTypeTranslate) {
             data[kTranslateX] += x;
             data[kTranslateY] += y;
+            data[kTranslateZ] += z;
         } else {
             // Doing a translation will only affect the translate bit of the type
             // Save the type
             uint8_t type = mType;
 
             Matrix4 u;
-            u.loadTranslate(x, y, 0.0f);
+            u.loadTranslate(x, y, z);
             multiply(u);
 
             // Restore the type and fix the translate bit
@@ -190,8 +199,10 @@
     void copyTo(float* v) const;
     void copyTo(SkMatrix& v) const;
 
-    void mapRect(Rect& r) const;
-    void mapPoint(float& x, float& y) const;
+    float mapZ(const Vector3& orig) const;
+    void mapPoint3d(Vector3& vec) const;
+    void mapPoint(float& x, float& y) const; // 2d only
+    void mapRect(Rect& r) const; // 2d only
 
     float getTranslateX() const;
     float getTranslateY() const;
diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
index 4d76bed..95fdb04 100644
--- a/libs/hwui/OpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -36,7 +36,9 @@
 #include "Fence.h"
 #include "PathTessellator.h"
 #include "Properties.h"
+#include "ShadowTessellator.h"
 #include "Vector.h"
+#include "VertexBuffer.h"
 
 namespace android {
 namespace uirenderer {
@@ -50,7 +52,12 @@
 
 #define ALPHA_THRESHOLD 0
 
-#define FILTER(paint) (!paint || paint->isFilterBitmap() ? GL_LINEAR : GL_NEAREST)
+static GLenum getFilter(const SkPaint* paint) {
+    if (!paint || paint->getFilterLevel() != SkPaint::kNone_FilterLevel) {
+        return GL_LINEAR;
+    }
+    return GL_NEAREST;
+}
 
 ///////////////////////////////////////////////////////////////////////////////
 // Globals
@@ -127,7 +134,6 @@
 
     memcpy(mMeshVertices, gMeshVertices, sizeof(gMeshVertices));
 
-    mFirstSnapshot = new Snapshot;
     mFrameStarted = false;
     mCountOverdraw = false;
 
@@ -154,22 +160,6 @@
 // Setup
 ///////////////////////////////////////////////////////////////////////////////
 
-void OpenGLRenderer::setName(const char* name) {
-    if (name) {
-        mName.setTo(name);
-    } else {
-        mName.clear();
-    }
-}
-
-const char* OpenGLRenderer::getName() const {
-    return mName.string();
-}
-
-bool OpenGLRenderer::isDeferred() {
-    return false;
-}
-
 void OpenGLRenderer::setViewport(int width, int height) {
     initViewport(width, height);
 
@@ -180,26 +170,17 @@
 }
 
 void OpenGLRenderer::initViewport(int width, int height) {
-    mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1);
+    mViewProjMatrix.loadOrtho(0, width, height, 0, -1, 1);
 
-    mWidth = width;
-    mHeight = height;
-
-    mFirstSnapshot->height = height;
-    mFirstSnapshot->viewport.set(0, 0, width, height);
+    initializeViewport(width, height);
 }
 
 void OpenGLRenderer::setupFrameState(float left, float top,
         float right, float bottom, bool opaque) {
     mCaches.clearGarbage();
 
+    initializeSaveStack(left, top, right, bottom);
     mOpaque = opaque;
-    mSnapshot = new Snapshot(mFirstSnapshot,
-            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
-    mSnapshot->fbo = getTargetFbo();
-    mSaveCount = 1;
-
-    mSnapshot->setClip(left, top, right, bottom);
     mTilingClip.set(left, top, right, bottom);
 }
 
@@ -211,14 +192,14 @@
 
     discardFramebuffer(mTilingClip.left, mTilingClip.top, mTilingClip.right, mTilingClip.bottom);
 
-    glViewport(0, 0, mWidth, mHeight);
+    glViewport(0, 0, getWidth(), getHeight());
 
     // Functors break the tiling extension in pretty spectacular ways
     // This ensures we don't use tiling when a functor is going to be
     // invoked during the frame
     mSuppressTiling = mCaches.hasRegisteredFunctors();
 
-    startTiling(mSnapshot, true);
+    startTilingCurrentClip(true);
 
     debugOverdraw(true, true);
 
@@ -226,10 +207,6 @@
             mTilingClip.right, mTilingClip.bottom, mOpaque);
 }
 
-status_t OpenGLRenderer::prepare(bool opaque) {
-    return prepareDirty(0.0f, 0.0f, mWidth, mHeight, opaque);
-}
-
 status_t OpenGLRenderer::prepareDirty(float left, float top,
         float right, float bottom, bool opaque) {
 
@@ -239,7 +216,7 @@
     // The framebuffer renderer will first defer the display list
     // for each layer and wait until the first drawing command
     // to start the frame
-    if (mSnapshot->fbo == 0) {
+    if (currentSnapshot()->fbo == 0) {
         syncState();
         updateLayers();
     } else {
@@ -254,7 +231,7 @@
     // perform a discard to let the driver know we don't need to preserve
     // the back buffer for this frame.
     if (mExtensions.hasDiscardFramebuffer() &&
-            left <= 0.0f && top <= 0.0f && right >= mWidth && bottom >= mHeight) {
+            left <= 0.0f && top <= 0.0f && right >= getWidth() && bottom >= getHeight()) {
         const bool isFbo = getTargetFbo() == 0;
         const GLenum attachments[] = {
                 isFbo ? (const GLenum) GL_COLOR_EXT : (const GLenum) GL_COLOR_ATTACHMENT0,
@@ -266,7 +243,7 @@
 status_t OpenGLRenderer::clear(float left, float top, float right, float bottom, bool opaque) {
     if (!opaque || mCountOverdraw) {
         mCaches.enableScissor();
-        mCaches.setScissor(left, mSnapshot->height - bottom, right - left, bottom - top);
+        mCaches.setScissor(left, currentSnapshot()->height - bottom, right - left, bottom - top);
         glClear(GL_COLOR_BUFFER_BIT);
         return DrawGlInfo::kStatusDrew;
     }
@@ -283,14 +260,16 @@
     }
 }
 
-void OpenGLRenderer::startTiling(const sp<Snapshot>& s, bool opaque) {
+void OpenGLRenderer::startTilingCurrentClip(bool opaque) {
     if (!mSuppressTiling) {
-        Rect* clip = &mTilingClip;
-        if (s->flags & Snapshot::kFlagFboTarget) {
-            clip = &(s->layer->clipRect);
+        const Snapshot* snapshot = currentSnapshot();
+
+        const Rect* clip = &mTilingClip;
+        if (snapshot->flags & Snapshot::kFlagFboTarget) {
+            clip = &(snapshot->layer->clipRect);
         }
 
-        startTiling(*clip, s->height, opaque);
+        startTiling(*clip, snapshot->height, opaque);
     }
 }
 
@@ -369,7 +348,7 @@
 }
 
 void OpenGLRenderer::resume() {
-    sp<Snapshot> snapshot = (mSnapshot != NULL) ? mSnapshot : mFirstSnapshot;
+    const Snapshot* snapshot = currentSnapshot();
     glViewport(0, 0, snapshot->viewport.getWidth(), snapshot->viewport.getHeight());
     glBindFramebuffer(GL_FRAMEBUFFER, snapshot->fbo);
     debugOverdraw(true, false);
@@ -391,7 +370,7 @@
 }
 
 void OpenGLRenderer::resumeAfterLayer() {
-    sp<Snapshot> snapshot = (mSnapshot != NULL) ? mSnapshot : mFirstSnapshot;
+    const Snapshot* snapshot = currentSnapshot();
     glViewport(0, 0, snapshot->viewport.getWidth(), snapshot->viewport.getHeight());
     glBindFramebuffer(GL_FRAMEBUFFER, snapshot->fbo);
     debugOverdraw(true, false);
@@ -430,15 +409,6 @@
         for (size_t i = 0; i < count; i++) {
             Functor* f = functors.itemAt(i);
             result |= (*f)(DrawGlInfo::kModeProcess, &info);
-
-            if (result & DrawGlInfo::kStatusDraw) {
-                Rect localDirty(info.dirtyLeft, info.dirtyTop, info.dirtyRight, info.dirtyBottom);
-                dirty.unionWith(localDirty);
-            }
-
-            if (result & DrawGlInfo::kStatusInvoke) {
-                mFunctors.add(f);
-            }
         }
         resume();
     }
@@ -447,16 +417,16 @@
 }
 
 status_t OpenGLRenderer::callDrawGLFunction(Functor* functor, Rect& dirty) {
-    if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
+    if (currentSnapshot()->isIgnored()) return DrawGlInfo::kStatusDone;
 
     detachFunctor(functor);
 
 
-    Rect clip(*mSnapshot->clipRect);
+    Rect clip(*currentClipRect());
     clip.snapToPixelBoundaries();
 
     // Since we don't know what the functor will draw, let's dirty
-    // tne entire clip region
+    // the entire clip region
     if (hasLayer()) {
         dirtyLayerUnchecked(clip, getRegion());
     }
@@ -467,9 +437,9 @@
     info.clipRight = clip.right;
     info.clipBottom = clip.bottom;
     info.isLayer = hasLayer();
-    info.width = getSnapshot()->viewport.getWidth();
-    info.height = getSnapshot()->height;
-    getSnapshot()->transform->copyTo(&info.transform[0]);
+    info.width = currentSnapshot()->viewport.getWidth();
+    info.height = currentSnapshot()->height;
+    currentTransform()->copyTo(&info.transform[0]);
 
     bool dirtyClip = mDirtyClip;
     // setup GL state for functor
@@ -482,19 +452,10 @@
     interrupt();
 
     // call functor immediately after GL state setup
-    status_t result = (*functor)(DrawGlInfo::kModeDraw, &info);
-
-    if (result != DrawGlInfo::kStatusDone) {
-        Rect localDirty(info.dirtyLeft, info.dirtyTop, info.dirtyRight, info.dirtyBottom);
-        dirty.unionWith(localDirty);
-
-        if (result & DrawGlInfo::kStatusInvoke) {
-            mFunctors.add(functor);
-        }
-    }
+    (*functor)(DrawGlInfo::kModeDraw, &info);
 
     resume();
-    return result | DrawGlInfo::kStatusDrew;
+    return DrawGlInfo::kStatusDrew;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -532,7 +493,7 @@
         const Rect* clip = &mTilingClip;
 
         mCaches.enableScissor();
-        mCaches.setScissor(clip->left, mFirstSnapshot->height - clip->bottom,
+        mCaches.setScissor(clip->left, firstSnapshot()->height - clip->bottom,
                 clip->right - clip->left, clip->bottom - clip->top);
 
         // 1x overdraw
@@ -556,9 +517,9 @@
 }
 
 void OpenGLRenderer::countOverdraw() {
-    size_t count = mWidth * mHeight;
+    size_t count = getWidth() * getHeight();
     uint32_t* buffer = new uint32_t[count];
-    glReadPixels(0, 0, mWidth, mHeight, GL_RGBA, GL_UNSIGNED_BYTE, &buffer[0]);
+    glReadPixels(0, 0, getWidth(), getHeight(), GL_RGBA, GL_UNSIGNED_BYTE, &buffer[0]);
 
     size_t total = 0;
     for (size_t i = 0; i < count; i++) {
@@ -576,7 +537,7 @@
 
 bool OpenGLRenderer::updateLayer(Layer* layer, bool inFrame) {
     if (layer->deferredUpdateScheduled && layer->renderer &&
-            layer->displayList && layer->displayList->isRenderable()) {
+            layer->displayList.get() && layer->displayList->isRenderable()) {
         ATRACE_CALL();
 
         Rect& dirty = layer->dirtyRect;
@@ -594,7 +555,7 @@
 
         if (inFrame) {
             resumeAfterLayer();
-            startTiling(mSnapshot);
+            startTilingCurrentClip();
         }
 
         layer->debugDrawUpdate = mCaches.debugLayersUpdates;
@@ -715,50 +676,17 @@
 // State management
 ///////////////////////////////////////////////////////////////////////////////
 
-int OpenGLRenderer::getSaveCount() const {
-    return mSaveCount;
-}
-
-int OpenGLRenderer::save(int flags) {
-    return saveSnapshot(flags);
-}
-
-void OpenGLRenderer::restore() {
-    if (mSaveCount > 1) {
-        restoreSnapshot();
-    }
-}
-
-void OpenGLRenderer::restoreToCount(int saveCount) {
-    if (saveCount < 1) saveCount = 1;
-
-    while (mSaveCount > saveCount) {
-        restoreSnapshot();
-    }
-}
-
-int OpenGLRenderer::saveSnapshot(int flags) {
-    mSnapshot = new Snapshot(mSnapshot, flags);
-    return mSaveCount++;
-}
-
-bool OpenGLRenderer::restoreSnapshot() {
-    bool restoreClip = mSnapshot->flags & Snapshot::kFlagClipSet;
-    bool restoreLayer = mSnapshot->flags & Snapshot::kFlagIsLayer;
-    bool restoreOrtho = mSnapshot->flags & Snapshot::kFlagDirtyOrtho;
-
-    sp<Snapshot> current = mSnapshot;
-    sp<Snapshot> previous = mSnapshot->previous;
+void OpenGLRenderer::onSnapshotRestored(const Snapshot& removed, const Snapshot& restored) {
+    bool restoreOrtho = removed.flags & Snapshot::kFlagDirtyOrtho;
+    bool restoreClip = removed.flags & Snapshot::kFlagClipSet;
+    bool restoreLayer = removed.flags & Snapshot::kFlagIsLayer;
 
     if (restoreOrtho) {
-        Rect& r = previous->viewport;
+        const Rect& r = restored.viewport;
         glViewport(r.left, r.top, r.right, r.bottom);
-        mOrthoMatrix.load(current->orthoMatrix);
+        mViewProjMatrix.load(removed.orthoMatrix); // TODO: should ortho be stored in 'restored'?
     }
 
-    mSaveCount--;
-    mSnapshot = previous;
-
     if (restoreClip) {
         dirtyClip();
     }
@@ -766,11 +694,9 @@
     if (restoreLayer) {
         endMark(); // Savelayer
         startMark("ComposeLayer");
-        composeLayer(current, previous);
+        composeLayer(removed, restored);
         endMark();
     }
-
-    return restoreClip;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -778,12 +704,11 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 int OpenGLRenderer::saveLayer(float left, float top, float right, float bottom,
-        int alpha, SkXfermode::Mode mode, int flags) {
-    const GLuint previousFbo = mSnapshot->fbo;
+        const SkPaint* paint, int flags, const SkPath* convexMask) {
     const int count = saveSnapshot(flags);
 
-    if (!mSnapshot->isIgnored()) {
-        createLayer(left, top, right, bottom, alpha, mode, flags, previousFbo);
+    if (!currentSnapshot()->isIgnored()) {
+        createLayer(left, top, right, bottom, paint, flags, convexMask);
     }
 
     return count;
@@ -792,22 +717,22 @@
 void OpenGLRenderer::calculateLayerBoundsAndClip(Rect& bounds, Rect& clip, bool fboLayer) {
     const Rect untransformedBounds(bounds);
 
-    currentTransform().mapRect(bounds);
+    currentTransform()->mapRect(bounds);
 
     // Layers only make sense if they are in the framebuffer's bounds
-    if (bounds.intersect(*mSnapshot->clipRect)) {
+    if (bounds.intersect(*currentClipRect())) {
         // We cannot work with sub-pixels in this case
         bounds.snapToPixelBoundaries();
 
         // When the layer is not an FBO, we may use glCopyTexImage so we
         // need to make sure the layer does not extend outside the bounds
         // of the framebuffer
-        if (!bounds.intersect(mSnapshot->previous->viewport)) {
+        if (!bounds.intersect(currentSnapshot()->previous->viewport)) {
             bounds.setEmpty();
         } else if (fboLayer) {
             clip.set(bounds);
             mat4 inverse;
-            inverse.loadInverse(currentTransform());
+            inverse.loadInverse(*currentTransform());
             inverse.mapRect(clip);
             clip.snapToPixelBoundaries();
             if (clip.intersect(untransformedBounds)) {
@@ -834,11 +759,10 @@
 }
 
 int OpenGLRenderer::saveLayerDeferred(float left, float top, float right, float bottom,
-        int alpha, SkXfermode::Mode mode, int flags) {
-    const GLuint previousFbo = mSnapshot->fbo;
+        const SkPaint* paint, int flags) {
     const int count = saveSnapshot(flags);
 
-    if (!mSnapshot->isIgnored() && (flags & SkCanvas::kClipToLayer_SaveFlag)) {
+    if (!currentSnapshot()->isIgnored() && (flags & SkCanvas::kClipToLayer_SaveFlag)) {
         // initialize the snapshot as though it almost represents an FBO layer so deferred draw
         // operations will be able to store and restore the current clip and transform info, and
         // quick rejection will be correct (for display lists)
@@ -846,9 +770,9 @@
         Rect bounds(left, top, right, bottom);
         Rect clip;
         calculateLayerBoundsAndClip(bounds, clip, true);
-        updateSnapshotIgnoreForLayer(bounds, clip, true, alpha);
+        updateSnapshotIgnoreForLayer(bounds, clip, true, getAlphaDirect(paint));
 
-        if (!mSnapshot->isIgnored()) {
+        if (!currentSnapshot()->isIgnored()) {
             mSnapshot->resetTransform(-bounds.left, -bounds.top, 0.0f);
             mSnapshot->resetClip(clip.left, clip.top, clip.right, clip.bottom);
             mSnapshot->viewport.set(0.0f, 0.0f, bounds.getWidth(), bounds.getHeight());
@@ -858,7 +782,6 @@
     return count;
 }
 
-
 /**
  * Layers are viewed by Skia are slightly different than layers in image editing
  * programs (for instance.) When a layer is created, previously created layers
@@ -911,7 +834,7 @@
  *     something actually gets drawn are the layers regions cleared.
  */
 bool OpenGLRenderer::createLayer(float left, float top, float right, float bottom,
-        int alpha, SkXfermode::Mode mode, int flags, GLuint previousFbo) {
+        const SkPaint* paint, int flags, const SkPath* convexMask) {
     LAYER_LOGD("Requesting layer %.2fx%.2f", right - left, bottom - top);
     LAYER_LOGD("Layer cache size = %d", mCaches.layerCache.getSize());
 
@@ -921,10 +844,10 @@
     Rect clip;
     Rect bounds(left, top, right, bottom);
     calculateLayerBoundsAndClip(bounds, clip, fboLayer);
-    updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, alpha);
+    updateSnapshotIgnoreForLayer(bounds, clip, fboLayer, getAlphaDirect(paint));
 
     // Bail out if we won't draw in this snapshot
-    if (mSnapshot->isIgnored()) {
+    if (currentSnapshot()->isIgnored()) {
         return false;
     }
 
@@ -934,13 +857,14 @@
         return false;
     }
 
-    layer->setAlpha(alpha, mode);
+    layer->setPaint(paint);
     layer->layer.set(bounds);
     layer->texCoords.set(0.0f, bounds.getHeight() / float(layer->getHeight()),
             bounds.getWidth() / float(layer->getWidth()), 0.0f);
-    layer->setColorFilter(mDrawModifiers.mColorFilter);
+
     layer->setBlend(true);
     layer->setDirty(false);
+    layer->setConvexMask(convexMask); // note: the mask must be cleared before returning to the cache
 
     // Save the layer in the snapshot
     mSnapshot->flags |= Snapshot::kFlagIsLayer;
@@ -948,7 +872,7 @@
 
     startMark("SaveLayer");
     if (fboLayer) {
-        return createFboLayer(layer, bounds, clip, previousFbo);
+        return createFboLayer(layer, bounds, clip);
     } else {
         // Copy the framebuffer into the layer
         layer->bindTexture();
@@ -974,7 +898,7 @@
     return true;
 }
 
-bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip, GLuint previousFbo) {
+bool OpenGLRenderer::createFboLayer(Layer* layer, Rect& bounds, Rect& clip) {
     layer->clipRect.set(clip);
     layer->setFbo(mCaches.fboCache.get());
 
@@ -986,7 +910,7 @@
     mSnapshot->resetClip(clip.left, clip.top, clip.right, clip.bottom);
     mSnapshot->viewport.set(0.0f, 0.0f, bounds.getWidth(), bounds.getHeight());
     mSnapshot->height = bounds.getHeight();
-    mSnapshot->orthoMatrix.load(mOrthoMatrix);
+    mSnapshot->orthoMatrix.load(mViewProjMatrix);
 
     endTiling();
     debugOverdraw(false, false);
@@ -1003,7 +927,7 @@
     glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
             layer->getTexture(), 0);
 
-    startTiling(mSnapshot, true);
+    startTilingCurrentClip(true);
 
     // Clear the FBO, expand the clear region by 1 to get nice bilinear filtering
     mCaches.enableScissor();
@@ -1015,7 +939,9 @@
 
     // Change the ortho projection
     glViewport(0, 0, bounds.getWidth(), bounds.getHeight());
-    mOrthoMatrix.loadOrtho(0.0f, bounds.getWidth(), bounds.getHeight(), 0.0f, -1.0f, 1.0f);
+
+    // TODO: determine best way to support 3d drawing within HW layers
+    mViewProjMatrix.loadOrtho(0.0f, bounds.getWidth(), bounds.getHeight(), 0.0f, -1.0f, 1.0f);
 
     return true;
 }
@@ -1023,18 +949,19 @@
 /**
  * Read the documentation of createLayer() before doing anything in this method.
  */
-void OpenGLRenderer::composeLayer(sp<Snapshot> current, sp<Snapshot> previous) {
-    if (!current->layer) {
+void OpenGLRenderer::composeLayer(const Snapshot& removed, const Snapshot& restored) {
+    if (!removed.layer) {
         ALOGE("Attempting to compose a layer that does not exist");
         return;
     }
 
-    Layer* layer = current->layer;
+    Layer* layer = removed.layer;
     const Rect& rect = layer->layer;
-    const bool fboLayer = current->flags & Snapshot::kFlagIsFboLayer;
+    const bool fboLayer = removed.flags & Snapshot::kFlagIsFboLayer;
 
     bool clipRequired = false;
-    quickRejectNoScissor(rect, &clipRequired); // safely ignore return, should never be rejected
+    calculateQuickRejectForScissor(rect.left, rect.top, rect.right, rect.bottom,
+            &clipRequired, false); // safely ignore return, should never be rejected
     mCaches.setScissorEnabled(mScissorOptimizationDisabled || clipRequired);
 
     if (fboLayer) {
@@ -1046,15 +973,19 @@
         layer->removeFbo(false);
 
         // Unbind current FBO and restore previous one
-        glBindFramebuffer(GL_FRAMEBUFFER, previous->fbo);
+        glBindFramebuffer(GL_FRAMEBUFFER, restored.fbo);
         debugOverdraw(true, false);
 
-        startTiling(previous);
+        startTilingCurrentClip();
     }
 
     if (!fboLayer && layer->getAlpha() < 255) {
-        drawColorRect(rect.left, rect.top, rect.right, rect.bottom,
-                layer->getAlpha() << 24, SkXfermode::kDstIn_Mode, true);
+        SkPaint layerPaint;
+        layerPaint.setAlpha(layer->getAlpha());
+        layerPaint.setXfermodeMode(SkXfermode::kDstIn_Mode);
+        layerPaint.setColorFilter(layer->getColorFilter());
+
+        drawColorRect(rect.left, rect.top, rect.right, rect.bottom, &layerPaint, true);
         // Required below, composeLayerRect() will divide by 255
         layer->setAlpha(255);
     }
@@ -1066,14 +997,8 @@
     // When the layer is stored in an FBO, we can save a bit of fillrate by
     // drawing only the dirty region
     if (fboLayer) {
-        dirtyLayer(rect.left, rect.top, rect.right, rect.bottom, *previous->transform);
-        if (layer->getColorFilter()) {
-            setupColorFilter(layer->getColorFilter());
-        }
+        dirtyLayer(rect.left, rect.top, rect.right, rect.bottom, *restored.transform);
         composeLayerRegion(layer, rect);
-        if (layer->getColorFilter()) {
-            resetColorFilter();
-        }
     } else if (!rect.isEmpty()) {
         dirtyLayer(rect.left, rect.top, rect.right, rect.bottom);
 
@@ -1088,6 +1013,7 @@
     dirtyClip();
 
     // Failing to add the layer to the cache should happen only if the layer is too large
+    layer->setConvexMask(NULL);
     if (!mCaches.layerCache.put(layer)) {
         LAYER_LOGD("Deleting layer");
         Caches::getInstance().resourceCache.decrementRefcount(layer);
@@ -1105,30 +1031,33 @@
     }
     setupDrawTextureTransform();
     setupDrawColor(alpha, alpha, alpha, alpha);
-    setupDrawColorFilter();
-    setupDrawBlending(layer->isBlend() || alpha < 1.0f, layer->getMode());
+    setupDrawColorFilter(layer->getColorFilter());
+    setupDrawBlending(layer);
     setupDrawProgram();
     setupDrawPureColorUniforms();
-    setupDrawColorFilterUniforms();
+    setupDrawColorFilterUniforms(layer->getColorFilter());
     if (layer->getRenderTarget() == GL_TEXTURE_2D) {
         setupDrawTexture(layer->getTexture());
     } else {
         setupDrawExternalTexture(layer->getTexture());
     }
-    if (currentTransform().isPureTranslate() &&
+    if (currentTransform()->isPureTranslate() &&
+            !layer->getForceFilter() &&
             layer->getWidth() == (uint32_t) rect.getWidth() &&
             layer->getHeight() == (uint32_t) rect.getHeight()) {
-        const float x = (int) floorf(rect.left + currentTransform().getTranslateX() + 0.5f);
-        const float y = (int) floorf(rect.top + currentTransform().getTranslateY() + 0.5f);
+        const float x = (int) floorf(rect.left + currentTransform()->getTranslateX() + 0.5f);
+        const float y = (int) floorf(rect.top + currentTransform()->getTranslateY() + 0.5f);
 
         layer->setFilter(GL_NEAREST);
-        setupDrawModelView(x, y, x + rect.getWidth(), y + rect.getHeight(), true);
+        setupDrawModelView(kModelViewMode_TranslateAndScale, false,
+                x, y, x + rect.getWidth(), y + rect.getHeight(), true);
     } else {
         layer->setFilter(GL_LINEAR);
-        setupDrawModelView(rect.left, rect.top, rect.right, rect.bottom);
+        setupDrawModelView(kModelViewMode_TranslateAndScale, false,
+                rect.left, rect.top, rect.right, rect.bottom);
     }
     setupDrawTextureTransformUniforms(layer->getTexTransform());
-    setupDrawMesh(&mMeshVertices[0].position[0], &mMeshVertices[0].texture[0]);
+    setupDrawMesh(&mMeshVertices[0].x, &mMeshVertices[0].u);
 
     glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
 }
@@ -1141,15 +1070,15 @@
 
         float x = rect.left;
         float y = rect.top;
-        bool simpleTransform = currentTransform().isPureTranslate() &&
+        bool simpleTransform = currentTransform()->isPureTranslate() &&
                 layer->getWidth() == (uint32_t) rect.getWidth() &&
                 layer->getHeight() == (uint32_t) rect.getHeight();
 
         if (simpleTransform) {
             // When we're swapping, the layer is already in screen coordinates
             if (!swap) {
-                x = (int) floorf(rect.left + currentTransform().getTranslateX() + 0.5f);
-                y = (int) floorf(rect.top + currentTransform().getTranslateY() + 0.5f);
+                x = (int) floorf(rect.left + currentTransform()->getTranslateX() + 0.5f);
+                y = (int) floorf(rect.top + currentTransform()->getTranslateY() + 0.5f);
             }
 
             layer->setFilter(GL_NEAREST, true);
@@ -1157,11 +1086,15 @@
             layer->setFilter(GL_LINEAR, true);
         }
 
-        float alpha = getLayerAlpha(layer);
-        bool blend = layer->isBlend() || alpha < 1.0f;
+        SkPaint layerPaint;
+        layerPaint.setAlpha(getLayerAlpha(layer) * 255);
+        layerPaint.setXfermodeMode(layer->getMode());
+        layerPaint.setColorFilter(layer->getColorFilter());
+
+        bool blend = layer->isBlend() || getLayerAlpha(layer) < 1.0f;
         drawTextureMesh(x, y, x + rect.getWidth(), y + rect.getHeight(),
-                layer->getTexture(), alpha, layer->getMode(), blend,
-                &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
+                layer->getTexture(), &layerPaint, blend,
+                &mMeshVertices[0].x, &mMeshVertices[0].u,
                 GL_TRIANGLE_STRIP, gMeshCount, swap, swap || simpleTransform);
 
         resetDrawTextureTexCoords(0.0f, 0.0f, 1.0f, 1.0f);
@@ -1190,6 +1123,38 @@
 #define DRAW_DOUBLE_STENCIL(DRAW_COMMAND) DRAW_DOUBLE_STENCIL_IF(true, DRAW_COMMAND)
 
 void OpenGLRenderer::composeLayerRegion(Layer* layer, const Rect& rect) {
+    if (CC_UNLIKELY(layer->region.isEmpty())) return; // nothing to draw
+
+    if (layer->getConvexMask()) {
+        save(SkCanvas::kClip_SaveFlag | SkCanvas::kMatrix_SaveFlag);
+
+        // clip to the area of the layer the mask can be larger
+        clipRect(rect.left, rect.top, rect.right, rect.bottom, SkRegion::kIntersect_Op);
+
+        SkPaint paint;
+        paint.setAntiAlias(true);
+        paint.setColor(SkColorSetARGB(int(getLayerAlpha(layer) * 255), 0, 0, 0));
+
+        SkiaShader* oldShader = mDrawModifiers.mShader;
+
+        // create LayerShader to map SaveLayer content into subsequent draw
+        SkMatrix shaderMatrix;
+        shaderMatrix.setTranslate(rect.left, rect.bottom);
+        shaderMatrix.preScale(1, -1);
+        SkiaLayerShader layerShader(layer, &shaderMatrix);
+        mDrawModifiers.mShader = &layerShader;
+
+        // Since the drawing primitive is defined in local drawing space,
+        // we don't need to modify the draw matrix
+        const SkPath* maskPath = layer->getConvexMask();
+        DRAW_DOUBLE_STENCIL(drawConvexPath(*maskPath, &paint));
+
+        mDrawModifiers.mShader = oldShader;
+        restore();
+
+        return;
+    }
+
     if (layer->region.isRect()) {
         layer->setRegionAsRect();
 
@@ -1199,90 +1164,91 @@
         return;
     }
 
-    if (CC_LIKELY(!layer->region.isEmpty())) {
-        size_t count;
-        const android::Rect* rects;
-        Region safeRegion;
-        if (CC_LIKELY(hasRectToRectTransform())) {
-            rects = layer->region.getArray(&count);
-        } else {
-            safeRegion = Region::createTJunctionFreeRegion(layer->region);
-            rects = safeRegion.getArray(&count);
-        }
+    // standard Region based draw
+    size_t count;
+    const android::Rect* rects;
+    Region safeRegion;
+    if (CC_LIKELY(hasRectToRectTransform())) {
+        rects = layer->region.getArray(&count);
+    } else {
+        safeRegion = Region::createTJunctionFreeRegion(layer->region);
+        rects = safeRegion.getArray(&count);
+    }
 
-        const float alpha = getLayerAlpha(layer);
-        const float texX = 1.0f / float(layer->getWidth());
-        const float texY = 1.0f / float(layer->getHeight());
-        const float height = rect.getHeight();
+    const float alpha = getLayerAlpha(layer);
+    const float texX = 1.0f / float(layer->getWidth());
+    const float texY = 1.0f / float(layer->getHeight());
+    const float height = rect.getHeight();
 
-        setupDraw();
+    setupDraw();
 
-        // We must get (and therefore bind) the region mesh buffer
-        // after we setup drawing in case we need to mess with the
-        // stencil buffer in setupDraw()
-        TextureVertex* mesh = mCaches.getRegionMesh();
-        uint32_t numQuads = 0;
+    // We must get (and therefore bind) the region mesh buffer
+    // after we setup drawing in case we need to mess with the
+    // stencil buffer in setupDraw()
+    TextureVertex* mesh = mCaches.getRegionMesh();
+    uint32_t numQuads = 0;
 
-        setupDrawWithTexture();
-        setupDrawColor(alpha, alpha, alpha, alpha);
-        setupDrawColorFilter();
-        setupDrawBlending(layer->isBlend() || alpha < 1.0f, layer->getMode(), false);
-        setupDrawProgram();
-        setupDrawDirtyRegionsDisabled();
-        setupDrawPureColorUniforms();
-        setupDrawColorFilterUniforms();
-        setupDrawTexture(layer->getTexture());
-        if (currentTransform().isPureTranslate()) {
-            const float x = (int) floorf(rect.left + currentTransform().getTranslateX() + 0.5f);
-            const float y = (int) floorf(rect.top + currentTransform().getTranslateY() + 0.5f);
+    setupDrawWithTexture();
+    setupDrawColor(alpha, alpha, alpha, alpha);
+    setupDrawColorFilter(layer->getColorFilter());
+    setupDrawBlending(layer);
+    setupDrawProgram();
+    setupDrawDirtyRegionsDisabled();
+    setupDrawPureColorUniforms();
+    setupDrawColorFilterUniforms(layer->getColorFilter());
+    setupDrawTexture(layer->getTexture());
+    if (currentTransform()->isPureTranslate()) {
+        const float x = (int) floorf(rect.left + currentTransform()->getTranslateX() + 0.5f);
+        const float y = (int) floorf(rect.top + currentTransform()->getTranslateY() + 0.5f);
 
-            layer->setFilter(GL_NEAREST);
-            setupDrawModelViewTranslate(x, y, x + rect.getWidth(), y + rect.getHeight(), true);
-        } else {
-            layer->setFilter(GL_LINEAR);
-            setupDrawModelViewTranslate(rect.left, rect.top, rect.right, rect.bottom);
-        }
-        setupDrawMeshIndices(&mesh[0].position[0], &mesh[0].texture[0]);
+        layer->setFilter(GL_NEAREST);
+        setupDrawModelView(kModelViewMode_Translate, false,
+                x, y, x + rect.getWidth(), y + rect.getHeight(), true);
+    } else {
+        layer->setFilter(GL_LINEAR);
+        setupDrawModelView(kModelViewMode_Translate, false,
+                rect.left, rect.top, rect.right, rect.bottom);
+    }
+    setupDrawMeshIndices(&mesh[0].x, &mesh[0].u);
 
-        for (size_t i = 0; i < count; i++) {
-            const android::Rect* r = &rects[i];
+    for (size_t i = 0; i < count; i++) {
+        const android::Rect* r = &rects[i];
 
-            const float u1 = r->left * texX;
-            const float v1 = (height - r->top) * texY;
-            const float u2 = r->right * texX;
-            const float v2 = (height - r->bottom) * texY;
+        const float u1 = r->left * texX;
+        const float v1 = (height - r->top) * texY;
+        const float u2 = r->right * texX;
+        const float v2 = (height - r->bottom) * texY;
 
-            // TODO: Reject quads outside of the clip
-            TextureVertex::set(mesh++, r->left, r->top, u1, v1);
-            TextureVertex::set(mesh++, r->right, r->top, u2, v1);
-            TextureVertex::set(mesh++, r->left, r->bottom, u1, v2);
-            TextureVertex::set(mesh++, r->right, r->bottom, u2, v2);
+        // TODO: Reject quads outside of the clip
+        TextureVertex::set(mesh++, r->left, r->top, u1, v1);
+        TextureVertex::set(mesh++, r->right, r->top, u2, v1);
+        TextureVertex::set(mesh++, r->left, r->bottom, u1, v2);
+        TextureVertex::set(mesh++, r->right, r->bottom, u2, v2);
 
-            numQuads++;
+        numQuads++;
 
-            if (numQuads >= gMaxNumberOfQuads) {
-                DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6,
-                                GL_UNSIGNED_SHORT, NULL));
-                numQuads = 0;
-                mesh = mCaches.getRegionMesh();
-            }
-        }
-
-        if (numQuads > 0) {
+        if (numQuads >= gMaxNumberOfQuads) {
             DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6,
                             GL_UNSIGNED_SHORT, NULL));
+            numQuads = 0;
+            mesh = mCaches.getRegionMesh();
         }
+    }
+
+    if (numQuads > 0) {
+        DRAW_DOUBLE_STENCIL(glDrawElements(GL_TRIANGLES, numQuads * 6,
+                        GL_UNSIGNED_SHORT, NULL));
+    }
 
 #if DEBUG_LAYERS_AS_REGIONS
-        drawRegionRects(layer->region);
+    drawRegionRectsDebug(layer->region);
 #endif
 
-        layer->region.clear();
-    }
+    layer->region.clear();
 }
 
-void OpenGLRenderer::drawRegionRects(const Region& region) {
 #if DEBUG_LAYERS_AS_REGIONS
+void OpenGLRenderer::drawRegionRectsDebug(const Region& region) {
     size_t count;
     const android::Rect* rects = region.getArray(&count);
 
@@ -1300,15 +1266,15 @@
             top = rects[i].top;
         }
 
+        SkPaint paint;
+        paint.setColor(colors[offset + (i & 0x1)]);
         Rect r(rects[i].left, rects[i].top, rects[i].right, rects[i].bottom);
-        drawColorRect(r.left, r.top, r.right, r.bottom, colors[offset + (i & 0x1)],
-                SkXfermode::kSrcOver_Mode);
+        drawColorRect(r.left, r.top, r.right, r.bottom, paint);
     }
-#endif
 }
+#endif
 
-void OpenGLRenderer::drawRegionRects(const SkRegion& region, int color,
-        SkXfermode::Mode mode, bool dirty) {
+void OpenGLRenderer::drawRegionRects(const SkRegion& region, const SkPaint& paint, bool dirty) {
     Vector<float> rects;
 
     SkRegion::Iterator it(region);
@@ -1321,7 +1287,7 @@
         it.next();
     }
 
-    drawColorRects(rects.array(), rects.size(), color, mode, true, dirty, false);
+    drawColorRects(rects.array(), rects.size(), &paint, true, dirty, false);
 }
 
 void OpenGLRenderer::dirtyLayer(const float left, const float top,
@@ -1342,7 +1308,7 @@
 }
 
 void OpenGLRenderer::dirtyLayerUnchecked(Rect& bounds, Region* region) {
-    if (bounds.intersect(*mSnapshot->clipRect)) {
+    if (bounds.intersect(*currentClipRect())) {
         bounds.snapToPixelBoundaries();
         android::Rect dirty(bounds.left, bounds.top, bounds.right, bounds.bottom);
         if (!dirty.isEmpty()) {
@@ -1351,12 +1317,12 @@
     }
 }
 
-void OpenGLRenderer::drawIndexedQuads(Vertex* mesh, GLsizei quadsCount) {
+void OpenGLRenderer::issueIndexedQuadDraw(Vertex* mesh, GLsizei quadsCount) {
     GLsizei elementsCount = quadsCount * 6;
     while (elementsCount > 0) {
         GLsizei drawCount = min(elementsCount, (GLsizei) gMaxNumberOfQuads * 6);
 
-        setupDrawIndexedVertices(&mesh[0].position[0]);
+        setupDrawIndexedVertices(&mesh[0].x);
         glDrawElements(GL_TRIANGLES, drawCount, GL_UNSIGNED_SHORT, NULL);
 
         elementsCount -= drawCount;
@@ -1370,7 +1336,7 @@
     const size_t count = mLayers.size();
     if (count == 0) return;
 
-    if (!mSnapshot->isIgnored()) {
+    if (!currentSnapshot()->isIgnored()) {
         // Doing several glScissor/glClear here can negatively impact
         // GPUs with a tiler architecture, instead we draw quads with
         // the Clear blending mode
@@ -1398,14 +1364,18 @@
         // the same thing again
         mLayers.clear();
 
+        SkPaint clearPaint;
+        clearPaint.setXfermodeMode(SkXfermode::kClear_Mode);
+
         setupDraw(false);
         setupDrawColor(0.0f, 0.0f, 0.0f, 1.0f);
-        setupDrawBlending(true, SkXfermode::kClear_Mode);
+        setupDrawBlending(&clearPaint, true);
         setupDrawProgram();
         setupDrawPureColorUniforms();
-        setupDrawModelViewTranslate(0.0f, 0.0f, 0.0f, 0.0f, true);
+        setupDrawModelView(kModelViewMode_Translate, false,
+                0.0f, 0.0f, 0.0f, 0.0f, true);
 
-        drawIndexedQuads(&mesh[0], count);
+        issueIndexedQuadDraw(&mesh[0], count);
 
         if (scissorChanged) mCaches.enableScissor();
     } else {
@@ -1421,58 +1391,58 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 bool OpenGLRenderer::storeDisplayState(DeferredDisplayState& state, int stateDeferFlags) {
-    const Rect& currentClip = *(mSnapshot->clipRect);
-    const mat4& currentMatrix = *(mSnapshot->transform);
+    const Rect* currentClip = currentClipRect();
+    const mat4* currentMatrix = currentTransform();
 
     if (stateDeferFlags & kStateDeferFlag_Draw) {
         // state has bounds initialized in local coordinates
         if (!state.mBounds.isEmpty()) {
-            currentMatrix.mapRect(state.mBounds);
+            currentMatrix->mapRect(state.mBounds);
             Rect clippedBounds(state.mBounds);
             // NOTE: if we ever want to use this clipping info to drive whether the scissor
             // is used, it should more closely duplicate the quickReject logic (in how it uses
             // snapToPixelBoundaries)
 
-            if(!clippedBounds.intersect(currentClip)) {
+            if(!clippedBounds.intersect(*currentClip)) {
                 // quick rejected
                 return true;
             }
 
             state.mClipSideFlags = kClipSide_None;
-            if (!currentClip.contains(state.mBounds)) {
+            if (!currentClip->contains(state.mBounds)) {
                 int& flags = state.mClipSideFlags;
                 // op partially clipped, so record which sides are clipped for clip-aware merging
-                if (currentClip.left > state.mBounds.left) flags |= kClipSide_Left;
-                if (currentClip.top > state.mBounds.top) flags |= kClipSide_Top;
-                if (currentClip.right < state.mBounds.right) flags |= kClipSide_Right;
-                if (currentClip.bottom < state.mBounds.bottom) flags |= kClipSide_Bottom;
+                if (currentClip->left > state.mBounds.left) flags |= kClipSide_Left;
+                if (currentClip->top > state.mBounds.top) flags |= kClipSide_Top;
+                if (currentClip->right < state.mBounds.right) flags |= kClipSide_Right;
+                if (currentClip->bottom < state.mBounds.bottom) flags |= kClipSide_Bottom;
             }
             state.mBounds.set(clippedBounds);
         } else {
             // Empty bounds implies size unknown. Label op as conservatively clipped to disable
             // overdraw avoidance (since we don't know what it overlaps)
             state.mClipSideFlags = kClipSide_ConservativeFull;
-            state.mBounds.set(currentClip);
+            state.mBounds.set(*currentClip);
         }
     }
 
     state.mClipValid = (stateDeferFlags & kStateDeferFlag_Clip);
     if (state.mClipValid) {
-        state.mClip.set(currentClip);
+        state.mClip.set(*currentClip);
     }
 
     // Transform, drawModifiers, and alpha always deferred, since they are used by state operations
     // (Note: saveLayer/restore use colorFilter and alpha, so we just save restore everything)
-    state.mMatrix.load(currentMatrix);
+    state.mMatrix.load(*currentMatrix);
     state.mDrawModifiers = mDrawModifiers;
-    state.mAlpha = mSnapshot->alpha;
+    state.mAlpha = currentSnapshot()->alpha;
     return false;
 }
 
 void OpenGLRenderer::restoreDisplayState(const DeferredDisplayState& state, bool skipClipRestore) {
-    currentTransform().load(state.mMatrix);
-    mDrawModifiers = state.mDrawModifiers;
+    setMatrix(state.mMatrix);
     mSnapshot->alpha = state.mAlpha;
+    mDrawModifiers = state.mDrawModifiers;
 
     if (state.mClipValid && !skipClipRestore) {
         mSnapshot->setClip(state.mClip.left, state.mClip.top,
@@ -1492,64 +1462,21 @@
     if (clipRect != NULL) {
         mSnapshot->setClip(clipRect->left, clipRect->top, clipRect->right, clipRect->bottom);
     } else {
-        mSnapshot->setClip(0, 0, mWidth, mHeight);
+        mSnapshot->setClip(0, 0, getWidth(), getHeight());
     }
     dirtyClip();
     mCaches.setScissorEnabled(clipRect != NULL || mScissorOptimizationDisabled);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-// Transforms
-///////////////////////////////////////////////////////////////////////////////
-
-void OpenGLRenderer::translate(float dx, float dy) {
-    currentTransform().translate(dx, dy);
-}
-
-void OpenGLRenderer::rotate(float degrees) {
-    currentTransform().rotate(degrees, 0.0f, 0.0f, 1.0f);
-}
-
-void OpenGLRenderer::scale(float sx, float sy) {
-    currentTransform().scale(sx, sy, 1.0f);
-}
-
-void OpenGLRenderer::skew(float sx, float sy) {
-    currentTransform().skew(sx, sy);
-}
-
-void OpenGLRenderer::setMatrix(SkMatrix* matrix) {
-    if (matrix) {
-        currentTransform().load(*matrix);
-    } else {
-        currentTransform().loadIdentity();
-    }
-}
-
-bool OpenGLRenderer::hasRectToRectTransform() {
-    return CC_LIKELY(currentTransform().rectToRect());
-}
-
-void OpenGLRenderer::getMatrix(SkMatrix* matrix) {
-    currentTransform().copyTo(*matrix);
-}
-
-void OpenGLRenderer::concatMatrix(SkMatrix* matrix) {
-    SkMatrix transform;
-    currentTransform().copyTo(transform);
-    transform.preConcat(*matrix);
-    currentTransform().load(transform);
-}
-
-///////////////////////////////////////////////////////////////////////////////
 // Clipping
 ///////////////////////////////////////////////////////////////////////////////
 
 void OpenGLRenderer::setScissorFromClip() {
-    Rect clip(*mSnapshot->clipRect);
+    Rect clip(*currentClipRect());
     clip.snapToPixelBoundaries();
 
-    if (mCaches.setScissor(clip.left, mSnapshot->height - clip.bottom,
+    if (mCaches.setScissor(clip.left, currentSnapshot()->height - clip.bottom,
             clip.getWidth(), clip.getHeight())) {
         mDirtyClip = false;
     }
@@ -1560,7 +1487,7 @@
     // cannot attach a stencil buffer to fbo0 dynamically. Let's
     // just hope we have one when hasLayer() returns false.
     if (hasLayer()) {
-        attachStencilBufferToLayer(mSnapshot->layer);
+        attachStencilBufferToLayer(currentSnapshot()->layer);
     }
 }
 
@@ -1582,7 +1509,7 @@
 
 void OpenGLRenderer::setStencilFromClip() {
     if (!mCaches.debugOverdraw) {
-        if (!mSnapshot->clipRegion->isEmpty()) {
+        if (!currentSnapshot()->clipRegion->isEmpty()) {
             // NOTE: The order here is important, we must set dirtyClip to false
             //       before any draw call to avoid calling back into this method
             mDirtyClip = false;
@@ -1601,20 +1528,26 @@
             mCaches.stencil.clear();
             if (resetScissor) mCaches.disableScissor();
 
+            SkPaint paint;
+            paint.setColor(0xff000000);
+            paint.setXfermodeMode(SkXfermode::kSrc_Mode);
+
             // NOTE: We could use the region contour path to generate a smaller mesh
             //       Since we are using the stencil we could use the red book path
             //       drawing technique. It might increase bandwidth usage though.
 
             // The last parameter is important: we are not drawing in the color buffer
             // so we don't want to dirty the current layer, if any
-            drawRegionRects(*mSnapshot->clipRegion, 0xff000000, SkXfermode::kSrc_Mode, false);
+            drawRegionRects(*(currentSnapshot()->clipRegion), paint, false);
 
             mCaches.stencil.enableTest();
 
             // Draw the region used to generate the stencil if the appropriate debug
             // mode is enabled
             if (mCaches.debugStencilClip == Caches::kStencilShowRegion) {
-                drawRegionRects(*mSnapshot->clipRegion, 0x7f0000ff, SkXfermode::kSrcOver_Mode);
+                paint.setColor(0x7f0000ff);
+                paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
+                drawRegionRects(*(currentSnapshot()->clipRegion), paint);
             }
         } else {
             mCaches.stencil.disable();
@@ -1622,50 +1555,31 @@
     }
 }
 
-const Rect& OpenGLRenderer::getClipBounds() {
-    return mSnapshot->getLocalClip();
-}
-
-bool OpenGLRenderer::quickRejectNoScissor(float left, float top, float right, float bottom,
-        bool snapOut, bool* clipRequired) {
-    if (mSnapshot->isIgnored() || bottom <= top || right <= left) {
-        return true;
-    }
-
-    Rect r(left, top, right, bottom);
-    currentTransform().mapRect(r);
-    r.snapGeometryToPixelBoundaries(snapOut);
-
-    Rect clipRect(*mSnapshot->clipRect);
-    clipRect.snapToPixelBoundaries();
-
-    if (!clipRect.intersects(r)) return true;
-
-    if (clipRequired) *clipRequired = !clipRect.contains(r);
-    return false;
-}
-
-bool OpenGLRenderer::quickRejectPreStroke(float left, float top, float right, float bottom,
-        SkPaint* paint) {
-    // AA geometry will likely have a ramp around it (not accounted for in local bounds). Snap out
-    // the final mapped rect to ensure correct clipping behavior for the ramp.
-    bool snapOut = paint->isAntiAlias();
-
-    if (paint->getStyle() != SkPaint::kFill_Style) {
-        float outset = paint->getStrokeWidth() * 0.5f;
-        return quickReject(left - outset, top - outset, right + outset, bottom + outset, snapOut);
-    } else {
-        return quickReject(left, top, right, bottom, snapOut);
-    }
-}
-
-bool OpenGLRenderer::quickReject(float left, float top, float right, float bottom, bool snapOut) {
+/**
+ * Returns false and sets scissor enable based upon bounds if drawing won't be clipped out.
+ *
+ * @param paint if not null, the bounds will be expanded to account for stroke depending on paint
+ *         style, and tessellated AA ramp
+ */
+bool OpenGLRenderer::quickRejectSetupScissor(float left, float top, float right, float bottom,
+        const SkPaint* paint) {
     bool clipRequired = false;
-    if (quickRejectNoScissor(left, top, right, bottom, snapOut, &clipRequired)) {
+    bool snapOut = paint && paint->isAntiAlias();
+
+    if (paint && paint->getStyle() != SkPaint::kFill_Style) {
+        float outset = paint->getStrokeWidth() * 0.5f;
+        left -= outset;
+        top -= outset;
+        right += outset;
+        bottom += outset;
+    }
+
+    if (calculateQuickRejectForScissor(left, top, right, bottom, &clipRequired, snapOut)) {
         return true;
     }
 
-    if (!isDeferred()) {
+    if (!isRecording()) {
+        // not quick rejected, so enable the scissor if clipRequired
         mCaches.setScissorEnabled(mScissorOptimizationDisabled || clipRequired);
     }
     return false;
@@ -1673,74 +1587,21 @@
 
 void OpenGLRenderer::debugClip() {
 #if DEBUG_CLIP_REGIONS
-    if (!isDeferred() && !mSnapshot->clipRegion->isEmpty()) {
-        drawRegionRects(*mSnapshot->clipRegion, 0x7f00ff00, SkXfermode::kSrcOver_Mode);
+    if (!isRecording() && !currentSnapshot()->clipRegion->isEmpty()) {
+        SkPaint paint;
+        paint.setColor(0x7f00ff00);
+        drawRegionRects(*(currentSnapshot()->clipRegion, paint);
+
     }
 #endif
 }
 
-bool OpenGLRenderer::clipRect(float left, float top, float right, float bottom, SkRegion::Op op) {
-    if (CC_LIKELY(currentTransform().rectToRect())) {
-        bool clipped = mSnapshot->clip(left, top, right, bottom, op);
-        if (clipped) {
-            dirtyClip();
-        }
-        return !mSnapshot->clipRect->isEmpty();
-    }
-
-    SkPath path;
-    path.addRect(left, top, right, bottom);
-
-    return OpenGLRenderer::clipPath(&path, op);
-}
-
-bool OpenGLRenderer::clipPath(SkPath* path, SkRegion::Op op) {
-    SkMatrix transform;
-    currentTransform().copyTo(transform);
-
-    SkPath transformed;
-    path->transform(transform, &transformed);
-
-    SkRegion clip;
-    if (!mSnapshot->previous->clipRegion->isEmpty()) {
-        clip.setRegion(*mSnapshot->previous->clipRegion);
-    } else {
-        if (mSnapshot->previous == mFirstSnapshot) {
-            clip.setRect(0, 0, mWidth, mHeight);
-        } else {
-            Rect* bounds = mSnapshot->previous->clipRect;
-            clip.setRect(bounds->left, bounds->top, bounds->right, bounds->bottom);
-        }
-    }
-
-    SkRegion region;
-    region.setPath(transformed, clip);
-
-    bool clipped = mSnapshot->clipRegionTransformed(region, op);
-    if (clipped) {
-        dirtyClip();
-    }
-    return !mSnapshot->clipRect->isEmpty();
-}
-
-bool OpenGLRenderer::clipRegion(SkRegion* region, SkRegion::Op op) {
-    bool clipped = mSnapshot->clipRegionTransformed(*region, op);
-    if (clipped) {
-        dirtyClip();
-    }
-    return !mSnapshot->clipRect->isEmpty();
-}
-
-Rect* OpenGLRenderer::getClipRect() {
-    return mSnapshot->clipRect;
-}
-
 ///////////////////////////////////////////////////////////////////////////////
 // Drawing commands
 ///////////////////////////////////////////////////////////////////////////////
 
 void OpenGLRenderer::setupDraw(bool clear) {
-    // TODO: It would be best if we could do this before quickReject()
+    // TODO: It would be best if we could do this before quickRejectSetupScissor()
     //       changes the scissor test state
     if (clear) clearLayerRegions();
     // Make sure setScissor & setStencil happen at the beginning of
@@ -1798,7 +1659,7 @@
     mColorG = mColorA * ((color >>  8) & 0xFF) / 255.0f;
     mColorB = mColorA * ((color      ) & 0xFF) / 255.0f;
     mColorSet = true;
-    mSetShaderColor = mDescription.setColor(mColorR, mColorG, mColorB, mColorA);
+    mSetShaderColor = mDescription.setColorModulate(mColorA);
 }
 
 void OpenGLRenderer::setupDrawAlpha8Color(int color, int alpha) {
@@ -1807,7 +1668,7 @@
     mColorG = mColorA * ((color >>  8) & 0xFF) / 255.0f;
     mColorB = mColorA * ((color      ) & 0xFF) / 255.0f;
     mColorSet = true;
-    mSetShaderColor = mDescription.setAlpha8Color(mColorR, mColorG, mColorB, mColorA);
+    mSetShaderColor = mDescription.setAlpha8ColorModulate(mColorR, mColorG, mColorB, mColorA);
 }
 
 void OpenGLRenderer::setupDrawTextGamma(const SkPaint* paint) {
@@ -1820,7 +1681,7 @@
     mColorG = g;
     mColorB = b;
     mColorSet = true;
-    mSetShaderColor = mDescription.setColor(r, g, b, a);
+    mSetShaderColor = mDescription.setColorModulate(a);
 }
 
 void OpenGLRenderer::setupDrawShader() {
@@ -1829,9 +1690,17 @@
     }
 }
 
-void OpenGLRenderer::setupDrawColorFilter() {
-    if (mDrawModifiers.mColorFilter) {
-        mDrawModifiers.mColorFilter->describe(mDescription, mExtensions);
+void OpenGLRenderer::setupDrawColorFilter(const SkColorFilter* filter) {
+    if (filter == NULL) {
+        return;
+    }
+
+    SkXfermode::Mode mode;
+    if (filter->asColorMode(NULL, &mode)) {
+        mDescription.colorOp = ProgramDescription::kColorBlend;
+        mDescription.colorMode = mode;
+    } else if (filter->asColorMatrix(NULL)) {
+        mDescription.colorOp = ProgramDescription::kColorMatrix;
     }
 }
 
@@ -1843,22 +1712,26 @@
     }
 }
 
-void OpenGLRenderer::setupDrawBlending(SkXfermode::Mode mode, bool swapSrcDst) {
+void OpenGLRenderer::setupDrawBlending(const Layer* layer, bool swapSrcDst) {
+    SkXfermode::Mode mode = layer->getMode();
     // When the blending mode is kClear_Mode, we need to use a modulate color
     // argb=1,0,0,0
     accountForClear(mode);
-    bool blend = (mColorSet && mColorA < 1.0f) ||
-            (mDrawModifiers.mShader && mDrawModifiers.mShader->blend());
+    bool blend = layer->isBlend() || getLayerAlpha(layer) < 1.0f ||
+            (mColorSet && mColorA < 1.0f) ||
+            (mDrawModifiers.mShader && mDrawModifiers.mShader->blend()) ||
+            layer->getColorFilter();
     chooseBlending(blend, mode, mDescription, swapSrcDst);
 }
 
-void OpenGLRenderer::setupDrawBlending(bool blend, SkXfermode::Mode mode, bool swapSrcDst) {
+void OpenGLRenderer::setupDrawBlending(const SkPaint* paint, bool blend, bool swapSrcDst) {
+    SkXfermode::Mode mode = getXfermodeDirect(paint);
     // When the blending mode is kClear_Mode, we need to use a modulate color
     // argb=1,0,0,0
     accountForClear(mode);
     blend |= (mColorSet && mColorA < 1.0f) ||
             (mDrawModifiers.mShader && mDrawModifiers.mShader->blend()) ||
-            (mDrawModifiers.mColorFilter && mDrawModifiers.mColorFilter->blend());
+            (paint && paint->getColorFilter());
     chooseBlending(blend, mode, mDescription, swapSrcDst);
 }
 
@@ -1870,39 +1743,20 @@
     mTrackDirtyRegions = false;
 }
 
-void OpenGLRenderer::setupDrawModelViewTranslate(float left, float top, float right, float bottom,
-        bool ignoreTransform) {
+void OpenGLRenderer::setupDrawModelView(ModelViewMode mode, bool offset,
+        float left, float top, float right, float bottom, bool ignoreTransform) {
     mModelView.loadTranslate(left, top, 0.0f);
-    if (!ignoreTransform) {
-        mCaches.currentProgram->set(mOrthoMatrix, mModelView, currentTransform());
-        if (mTrackDirtyRegions) dirtyLayer(left, top, right, bottom, currentTransform());
-    } else {
-        mCaches.currentProgram->set(mOrthoMatrix, mModelView, mat4::identity());
-        if (mTrackDirtyRegions) dirtyLayer(left, top, right, bottom);
-    }
-}
-
-void OpenGLRenderer::setupDrawModelViewIdentity(bool offset) {
-    mCaches.currentProgram->set(mOrthoMatrix, mat4::identity(), currentTransform(), offset);
-}
-
-void OpenGLRenderer::setupDrawModelView(float left, float top, float right, float bottom,
-        bool ignoreTransform, bool ignoreModelView) {
-    if (!ignoreModelView) {
-        mModelView.loadTranslate(left, top, 0.0f);
+    if (mode == kModelViewMode_TranslateAndScale) {
         mModelView.scale(right - left, bottom - top, 1.0f);
-    } else {
-        mModelView.loadIdentity();
     }
+
     bool dirty = right - left > 0.0f && bottom - top > 0.0f;
     if (!ignoreTransform) {
-        mCaches.currentProgram->set(mOrthoMatrix, mModelView, currentTransform());
-        if (mTrackDirtyRegions && dirty) {
-            dirtyLayer(left, top, right, bottom, currentTransform());
-        }
+        mCaches.currentProgram->set(mViewProjMatrix, mModelView, *currentTransform(), offset);
+        if (dirty && mTrackDirtyRegions) dirtyLayer(left, top, right, bottom, *currentTransform());
     } else {
-        mCaches.currentProgram->set(mOrthoMatrix, mModelView, mat4::identity());
-        if (mTrackDirtyRegions && dirty) dirtyLayer(left, top, right, bottom);
+        mCaches.currentProgram->set(mViewProjMatrix, mModelView, mat4::identity(), offset);
+        if (dirty && mTrackDirtyRegions) dirtyLayer(left, top, right, bottom);
     }
 }
 
@@ -1921,24 +1775,60 @@
 void OpenGLRenderer::setupDrawShaderUniforms(bool ignoreTransform) {
     if (mDrawModifiers.mShader) {
         if (ignoreTransform) {
-            mModelView.loadInverse(currentTransform());
+            // if ignoreTransform=true was passed to setupDrawModelView, undo currentTransform()
+            // because it was built into modelView / the geometry, and the SkiaShader needs to
+            // compensate.
+            mat4 modelViewWithoutTransform;
+            modelViewWithoutTransform.loadInverse(*currentTransform());
+            modelViewWithoutTransform.multiply(mModelView);
+            mModelView.load(modelViewWithoutTransform);
         }
         mDrawModifiers.mShader->setupProgram(mCaches.currentProgram,
                 mModelView, *mSnapshot, &mTextureUnit);
     }
 }
 
-void OpenGLRenderer::setupDrawShaderIdentityUniforms() {
-    if (mDrawModifiers.mShader) {
-        mDrawModifiers.mShader->setupProgram(mCaches.currentProgram,
-                mat4::identity(), *mSnapshot, &mTextureUnit);
+void OpenGLRenderer::setupDrawColorFilterUniforms(const SkColorFilter* filter) {
+    if (NULL == filter) {
+        return;
     }
-}
 
-void OpenGLRenderer::setupDrawColorFilterUniforms() {
-    if (mDrawModifiers.mColorFilter) {
-        mDrawModifiers.mColorFilter->setupProgram(mCaches.currentProgram);
+    SkColor color;
+    SkXfermode::Mode mode;
+    if (filter->asColorMode(&color, &mode)) {
+        const int alpha = SkColorGetA(color);
+        const GLfloat a = alpha / 255.0f;
+        const GLfloat r = a * SkColorGetR(color) / 255.0f;
+        const GLfloat g = a * SkColorGetG(color) / 255.0f;
+        const GLfloat b = a * SkColorGetB(color) / 255.0f;
+        glUniform4f(mCaches.currentProgram->getUniform("colorBlend"), r, g, b, a);
+        return;
     }
+
+    SkScalar srcColorMatrix[20];
+    if (filter->asColorMatrix(srcColorMatrix)) {
+
+        float colorMatrix[16];
+        memcpy(colorMatrix, srcColorMatrix, 4 * sizeof(float));
+        memcpy(&colorMatrix[4], &srcColorMatrix[5], 4 * sizeof(float));
+        memcpy(&colorMatrix[8], &srcColorMatrix[10], 4 * sizeof(float));
+        memcpy(&colorMatrix[12], &srcColorMatrix[15], 4 * sizeof(float));
+
+        // Skia uses the range [0..255] for the addition vector, but we need
+        // the [0..1] range to apply the vector in GLSL
+        float colorVector[4];
+        colorVector[0] = srcColorMatrix[4] / 255.0f;
+        colorVector[1] = srcColorMatrix[9] / 255.0f;
+        colorVector[2] = srcColorMatrix[14] / 255.0f;
+        colorVector[3] = srcColorMatrix[19] / 255.0f;
+
+        glUniformMatrix4fv(mCaches.currentProgram->getUniform("colorMatrix"), 1,
+                GL_FALSE, colorMatrix);
+        glUniform4fv(mCaches.currentProgram->getUniform("colorMatrixVector"), 1, colorVector);
+        return;
+    }
+
+    // it is an error if we ever get here
 }
 
 void OpenGLRenderer::setupDrawTextGammaUniforms() {
@@ -1972,7 +1862,8 @@
             GL_FALSE, &transform.data[0]);
 }
 
-void OpenGLRenderer::setupDrawMesh(GLvoid* vertices, GLvoid* texCoords, GLuint vbo) {
+void OpenGLRenderer::setupDrawMesh(const GLvoid* vertices,
+        const GLvoid* texCoords, GLuint vbo) {
     bool force = false;
     if (!vertices || vbo) {
         force = mCaches.bindMeshBuffer(vbo == 0 ? mCaches.meshBuffer : vbo);
@@ -1988,7 +1879,8 @@
     mCaches.unbindIndicesBuffer();
 }
 
-void OpenGLRenderer::setupDrawMesh(GLvoid* vertices, GLvoid* texCoords, GLvoid* colors) {
+void OpenGLRenderer::setupDrawMesh(const GLvoid* vertices,
+        const GLvoid* texCoords, const GLvoid* colors) {
     bool force = mCaches.unbindMeshBuffer();
     GLsizei stride = sizeof(ColorTextureVertex);
 
@@ -2005,7 +1897,8 @@
     mCaches.unbindIndicesBuffer();
 }
 
-void OpenGLRenderer::setupDrawMeshIndices(GLvoid* vertices, GLvoid* texCoords, GLuint vbo) {
+void OpenGLRenderer::setupDrawMeshIndices(const GLvoid* vertices,
+        const GLvoid* texCoords, GLuint vbo) {
     bool force = false;
     // If vbo is != 0 we want to treat the vertices parameter as an offset inside
     // a VBO. However, if vertices is set to NULL and vbo == 0 then we want to
@@ -2015,7 +1908,7 @@
     } else {
         force = mCaches.unbindMeshBuffer();
     }
-    mCaches.bindIndicesBuffer();
+    mCaches.bindQuadIndicesBuffer();
 
     mCaches.bindPositionVertexPointer(force, vertices);
     if (mCaches.currentProgram->texCoords >= 0) {
@@ -2025,7 +1918,7 @@
 
 void OpenGLRenderer::setupDrawIndexedVertices(GLvoid* vertices) {
     bool force = mCaches.unbindMeshBuffer();
-    mCaches.bindIndicesBuffer();
+    mCaches.bindQuadIndicesBuffer();
     mCaches.bindPositionVertexPointer(force, vertices, gVertexStride);
 }
 
@@ -2033,44 +1926,36 @@
 // Drawing
 ///////////////////////////////////////////////////////////////////////////////
 
-status_t OpenGLRenderer::drawDisplayList(DisplayList* displayList, Rect& dirty,
+status_t OpenGLRenderer::drawDisplayList(RenderNode* displayList, Rect& dirty,
         int32_t replayFlags) {
     status_t status;
     // All the usual checks and setup operations (quickReject, setupDraw, etc.)
     // will be performed by the display list itself
     if (displayList && displayList->isRenderable()) {
+        // compute 3d ordering
+        displayList->computeOrdering();
         if (CC_UNLIKELY(mCaches.drawDeferDisabled)) {
             status = startFrame();
             ReplayStateStruct replayStruct(*this, dirty, replayFlags);
-            displayList->replay(replayStruct, 0);
+            displayList->replayNodeTree(replayStruct);
             return status | replayStruct.mDrawGlStatus;
         }
 
         bool avoidOverdraw = !mCaches.debugOverdraw && !mCountOverdraw; // shh, don't tell devs!
-        DeferredDisplayList deferredList(*(mSnapshot->clipRect), avoidOverdraw);
+        DeferredDisplayList deferredList(*currentClipRect(), avoidOverdraw);
         DeferStateStruct deferStruct(deferredList, *this, replayFlags);
-        displayList->defer(deferStruct, 0);
+        displayList->deferNodeTree(deferStruct);
 
         flushLayers();
         status = startFrame();
 
-        return status | deferredList.flush(*this, dirty);
+        return deferredList.flush(*this, dirty) | status;
     }
 
     return DrawGlInfo::kStatusDone;
 }
 
-void OpenGLRenderer::outputDisplayList(DisplayList* displayList) {
-    if (displayList) {
-        displayList->output(1);
-    }
-}
-
-void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, SkPaint* paint) {
-    int alpha;
-    SkXfermode::Mode mode;
-    getAlphaAndMode(paint, &alpha, &mode);
-
+void OpenGLRenderer::drawAlphaBitmap(Texture* texture, float left, float top, const SkPaint* paint) {
     int color = paint != NULL ? paint->getColor() : 0;
 
     float x = left;
@@ -2079,20 +1964,20 @@
     texture->setWrap(GL_CLAMP_TO_EDGE, true);
 
     bool ignoreTransform = false;
-    if (currentTransform().isPureTranslate()) {
-        x = (int) floorf(left + currentTransform().getTranslateX() + 0.5f);
-        y = (int) floorf(top + currentTransform().getTranslateY() + 0.5f);
+    if (currentTransform()->isPureTranslate()) {
+        x = (int) floorf(left + currentTransform()->getTranslateX() + 0.5f);
+        y = (int) floorf(top + currentTransform()->getTranslateY() + 0.5f);
         ignoreTransform = true;
 
         texture->setFilter(GL_NEAREST, true);
     } else {
-        texture->setFilter(FILTER(paint), true);
+        texture->setFilter(getFilter(paint), true);
     }
 
     // No need to check for a UV mapper on the texture object, only ARGB_8888
     // bitmaps get packed in the atlas
     drawAlpha8TextureMesh(x, y, x + texture->width, y + texture->height, texture->id,
-            paint != NULL, color, alpha, mode, (GLvoid*) NULL, (GLvoid*) gMeshTextureOffset,
+            paint, (GLvoid*) NULL, (GLvoid*) gMeshTextureOffset,
             GL_TRIANGLE_STRIP, gMeshCount, ignoreTransform);
 }
 
@@ -2101,44 +1986,41 @@
  * will not set the scissor enable or dirty the current layer, if any.
  * The caller is responsible for properly dirtying the current layer.
  */
-status_t OpenGLRenderer::drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry, int bitmapCount,
-        TextureVertex* vertices, bool pureTranslate, const Rect& bounds, SkPaint* paint) {
+status_t OpenGLRenderer::drawBitmaps(const SkBitmap* bitmap, AssetAtlas::Entry* entry,
+        int bitmapCount, TextureVertex* vertices, bool pureTranslate,
+        const Rect& bounds, const SkPaint* paint) {
     mCaches.activeTexture(0);
     Texture* texture = entry ? entry->texture : mCaches.textureCache.get(bitmap);
     if (!texture) return DrawGlInfo::kStatusDone;
 
     const AutoTexture autoCleanup(texture);
 
-    int alpha;
-    SkXfermode::Mode mode;
-    getAlphaAndMode(paint, &alpha, &mode);
-
     texture->setWrap(GL_CLAMP_TO_EDGE, true);
-    texture->setFilter(pureTranslate ? GL_NEAREST : FILTER(paint), true);
+    texture->setFilter(pureTranslate ? GL_NEAREST : getFilter(paint), true);
 
     const float x = (int) floorf(bounds.left + 0.5f);
     const float y = (int) floorf(bounds.top + 0.5f);
-    if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
-        int color = paint != NULL ? paint->getColor() : 0;
+    if (CC_UNLIKELY(bitmap->config() == SkBitmap::kA8_Config)) {
         drawAlpha8TextureMesh(x, y, x + bounds.getWidth(), y + bounds.getHeight(),
-                texture->id, paint != NULL, color, alpha, mode,
-                &vertices[0].position[0], &vertices[0].texture[0],
-                GL_TRIANGLES, bitmapCount * 6, true, true, false);
+                texture->id, paint, &vertices[0].x, &vertices[0].u,
+                GL_TRIANGLES, bitmapCount * 6, true,
+                kModelViewMode_Translate, false);
     } else {
         drawTextureMesh(x, y, x + bounds.getWidth(), y + bounds.getHeight(),
-                texture->id, alpha / 255.0f, mode, texture->blend,
-                &vertices[0].position[0], &vertices[0].texture[0],
-                GL_TRIANGLES, bitmapCount * 6, false, true, 0, true, false);
+                texture->id, paint, texture->blend, &vertices[0].x, &vertices[0].u,
+                GL_TRIANGLES, bitmapCount * 6, false, true, 0,
+                kModelViewMode_Translate, false);
     }
 
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
+status_t OpenGLRenderer::drawBitmap(const SkBitmap* bitmap, float left, float top,
+        const SkPaint* paint) {
     const float right = left + bitmap->width();
     const float bottom = top + bitmap->height();
 
-    if (quickReject(left, top, right, bottom)) {
+    if (quickRejectSetupScissor(left, top, right, bottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2147,7 +2029,7 @@
     if (!texture) return DrawGlInfo::kStatusDone;
     const AutoTexture autoCleanup(texture);
 
-    if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
+    if (CC_UNLIKELY(bitmap->config() == SkBitmap::kA8_Config)) {
         drawAlphaBitmap(texture, left, top, paint);
     } else {
         drawTextureRect(left, top, right, bottom, texture, paint);
@@ -2156,12 +2038,13 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint) {
+status_t OpenGLRenderer::drawBitmap(const SkBitmap* bitmap, const SkMatrix* matrix,
+        const SkPaint* paint) {
     Rect r(0.0f, 0.0f, bitmap->width(), bitmap->height());
     const mat4 transform(*matrix);
     transform.mapRect(r);
 
-    if (quickReject(r.left, r.top, r.right, r.bottom)) {
+    if (quickRejectSetupScissor(r.left, r.top, r.right, r.bottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2174,7 +2057,7 @@
     // to the vertex shader. The save/restore is a bit overkill.
     save(SkCanvas::kMatrix_SaveFlag);
     concatMatrix(matrix);
-    if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
+    if (CC_UNLIKELY(bitmap->config() == SkBitmap::kA8_Config)) {
         drawAlphaBitmap(texture, 0.0f, 0.0f, paint);
     } else {
         drawTextureRect(0.0f, 0.0f, bitmap->width(), bitmap->height(), texture, paint);
@@ -2184,11 +2067,12 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint) {
+status_t OpenGLRenderer::drawBitmapData(const SkBitmap* bitmap, float left, float top,
+        const SkPaint* paint) {
     const float right = left + bitmap->width();
     const float bottom = top + bitmap->height();
 
-    if (quickReject(left, top, right, bottom)) {
+    if (quickRejectSetupScissor(left, top, right, bottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2196,7 +2080,7 @@
     Texture* texture = mCaches.textureCache.getTransient(bitmap);
     const AutoTexture autoCleanup(texture);
 
-    if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
+    if (CC_UNLIKELY(bitmap->config() == SkBitmap::kA8_Config)) {
         drawAlphaBitmap(texture, left, top, paint);
     } else {
         drawTextureRect(left, top, right, bottom, texture, paint);
@@ -2205,9 +2089,9 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
-        float* vertices, int* colors, SkPaint* paint) {
-    if (!vertices || mSnapshot->isIgnored()) {
+status_t OpenGLRenderer::drawBitmapMesh(const SkBitmap* bitmap, int meshWidth, int meshHeight,
+        const float* vertices, const int* colors, const SkPaint* paint) {
+    if (!vertices || currentSnapshot()->isIgnored()) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2221,14 +2105,16 @@
 
     const uint32_t count = meshWidth * meshHeight * 6;
 
-    ColorTextureVertex mesh[count];
-    ColorTextureVertex* vertex = mesh;
+    Vector<ColorTextureVertex> mesh; // TODO: use C++11 unique_ptr
+    mesh.setCapacity(count);
+    ColorTextureVertex* vertex = mesh.editArray();
 
     bool cleanupColors = false;
     if (!colors) {
         uint32_t colorsCount = (meshWidth + 1) * (meshHeight + 1);
-        colors = new int[colorsCount];
-        memset(colors, 0xff, colorsCount * sizeof(int));
+        int* newColors = new int[colorsCount];
+        memset(newColors, 0xff, colorsCount * sizeof(int));
+        colors = newColors;
         cleanupColors = true;
     }
 
@@ -2271,7 +2157,7 @@
         }
     }
 
-    if (quickReject(left, top, right, bottom)) {
+    if (quickRejectSetupScissor(left, top, right, bottom)) {
         if (cleanupColors) delete[] colors;
         return DrawGlInfo::kStatusDone;
     }
@@ -2286,7 +2172,7 @@
     const AutoTexture autoCleanup(texture);
 
     texture->setWrap(GL_CLAMP_TO_EDGE, true);
-    texture->setFilter(FILTER(paint), true);
+    texture->setFilter(getFilter(paint), true);
 
     int alpha;
     SkXfermode::Mode mode;
@@ -2295,21 +2181,21 @@
     float a = alpha / 255.0f;
 
     if (hasLayer()) {
-        dirtyLayer(left, top, right, bottom, currentTransform());
+        dirtyLayer(left, top, right, bottom, *currentTransform());
     }
 
     setupDraw();
     setupDrawWithTextureAndColor();
     setupDrawColor(a, a, a, a);
-    setupDrawColorFilter();
-    setupDrawBlending(true, mode, false);
+    setupDrawColorFilter(getColorFilter(paint));
+    setupDrawBlending(paint, true);
     setupDrawProgram();
     setupDrawDirtyRegionsDisabled();
-    setupDrawModelView(0.0f, 0.0f, 1.0f, 1.0f, false);
+    setupDrawModelView(kModelViewMode_TranslateAndScale, false, 0.0f, 0.0f, 1.0f, 1.0f);
     setupDrawTexture(texture->id);
     setupDrawPureColorUniforms();
-    setupDrawColorFilterUniforms();
-    setupDrawMesh(&mesh[0].position[0], &mesh[0].texture[0], &mesh[0].color[0]);
+    setupDrawColorFilterUniforms(getColorFilter(paint));
+    setupDrawMesh(&mesh[0].x, &mesh[0].u, &mesh[0].r);
 
     glDrawArrays(GL_TRIANGLES, 0, count);
 
@@ -2323,11 +2209,11 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawBitmap(SkBitmap* bitmap,
+status_t OpenGLRenderer::drawBitmap(const SkBitmap* bitmap,
          float srcLeft, float srcTop, float srcRight, float srcBottom,
          float dstLeft, float dstTop, float dstRight, float dstBottom,
-         SkPaint* paint) {
-    if (quickReject(dstLeft, dstTop, dstRight, dstBottom)) {
+         const SkPaint* paint) {
+    if (quickRejectSetupScissor(dstLeft, dstTop, dstRight, dstBottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2349,10 +2235,6 @@
     mCaches.unbindMeshBuffer();
     resetDrawTextureTexCoords(u1, v1, u2, v2);
 
-    int alpha;
-    SkXfermode::Mode mode;
-    getAlphaAndMode(paint, &alpha, &mode);
-
     texture->setWrap(GL_CLAMP_TO_EDGE, true);
 
     float scaleX = (dstRight - dstLeft) / (srcRight - srcLeft);
@@ -2365,9 +2247,9 @@
     bool useScaleTransform = mDrawModifiers.mShader && scaled;
     bool ignoreTransform = false;
 
-    if (CC_LIKELY(currentTransform().isPureTranslate() && !useScaleTransform)) {
-        float x = (int) floorf(dstLeft + currentTransform().getTranslateX() + 0.5f);
-        float y = (int) floorf(dstTop + currentTransform().getTranslateY() + 0.5f);
+    if (CC_LIKELY(currentTransform()->isPureTranslate() && !useScaleTransform)) {
+        float x = (int) floorf(dstLeft + currentTransform()->getTranslateX() + 0.5f);
+        float y = (int) floorf(dstTop + currentTransform()->getTranslateY() + 0.5f);
 
         dstRight = x + (dstRight - dstLeft);
         dstBottom = y + (dstBottom - dstTop);
@@ -2375,10 +2257,10 @@
         dstLeft = x;
         dstTop = y;
 
-        texture->setFilter(scaled ? FILTER(paint) : GL_NEAREST, true);
+        texture->setFilter(scaled ? getFilter(paint) : GL_NEAREST, true);
         ignoreTransform = true;
     } else {
-        texture->setFilter(FILTER(paint), true);
+        texture->setFilter(getFilter(paint), true);
     }
 
     if (CC_UNLIKELY(useScaleTransform)) {
@@ -2393,16 +2275,15 @@
         dstBottom = srcBottom - srcTop;
     }
 
-    if (CC_UNLIKELY(bitmap->getConfig() == SkBitmap::kA8_Config)) {
-        int color = paint ? paint->getColor() : 0;
+    if (CC_UNLIKELY(bitmap->config() == SkBitmap::kA8_Config)) {
         drawAlpha8TextureMesh(dstLeft, dstTop, dstRight, dstBottom,
-                texture->id, paint != NULL, color, alpha, mode,
-                &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
+                texture->id, paint,
+                &mMeshVertices[0].x, &mMeshVertices[0].u,
                 GL_TRIANGLE_STRIP, gMeshCount, ignoreTransform);
     } else {
         drawTextureMesh(dstLeft, dstTop, dstRight, dstBottom,
-                texture->id, alpha / 255.0f, mode, texture->blend,
-                &mMeshVertices[0].position[0], &mMeshVertices[0].texture[0],
+                texture->id, paint, texture->blend,
+                &mMeshVertices[0].x, &mMeshVertices[0].u,
                 GL_TRIANGLE_STRIP, gMeshCount, false, ignoreTransform);
     }
 
@@ -2415,9 +2296,9 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawPatch(SkBitmap* bitmap, Res_png_9patch* patch,
-        float left, float top, float right, float bottom, SkPaint* paint) {
-    if (quickReject(left, top, right, bottom)) {
+status_t OpenGLRenderer::drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch,
+        float left, float top, float right, float bottom, const SkPaint* paint) {
+    if (quickRejectSetupScissor(left, top, right, bottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2428,9 +2309,10 @@
     return drawPatch(bitmap, mesh, entry, left, top, right, bottom, paint);
 }
 
-status_t OpenGLRenderer::drawPatch(SkBitmap* bitmap, const Patch* mesh, AssetAtlas::Entry* entry,
-        float left, float top, float right, float bottom, SkPaint* paint) {
-    if (quickReject(left, top, right, bottom)) {
+status_t OpenGLRenderer::drawPatch(const SkBitmap* bitmap, const Patch* mesh,
+        AssetAtlas::Entry* entry, float left, float top, float right, float bottom,
+        const SkPaint* paint) {
+    if (quickRejectSetupScissor(left, top, right, bottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2443,15 +2325,11 @@
         texture->setWrap(GL_CLAMP_TO_EDGE, true);
         texture->setFilter(GL_LINEAR, true);
 
-        int alpha;
-        SkXfermode::Mode mode;
-        getAlphaAndMode(paint, &alpha, &mode);
-
-        const bool pureTranslate = currentTransform().isPureTranslate();
+        const bool pureTranslate = currentTransform()->isPureTranslate();
         // Mark the current layer dirty where we are going to draw the patch
         if (hasLayer() && mesh->hasEmptyQuads) {
-            const float offsetX = left + currentTransform().getTranslateX();
-            const float offsetY = top + currentTransform().getTranslateY();
+            const float offsetX = left + currentTransform()->getTranslateX();
+            const float offsetY = top + currentTransform()->getTranslateY();
             const size_t count = mesh->quads.size();
             for (size_t i = 0; i < count; i++) {
                 const Rect& bounds = mesh->quads.itemAt(i);
@@ -2461,27 +2339,26 @@
                     dirtyLayer(x, y, x + bounds.getWidth(), y + bounds.getHeight());
                 } else {
                     dirtyLayer(left + bounds.left, top + bounds.top,
-                            left + bounds.right, top + bounds.bottom, currentTransform());
+                            left + bounds.right, top + bounds.bottom, *currentTransform());
                 }
             }
         }
 
+        bool ignoreTransform = false;
         if (CC_LIKELY(pureTranslate)) {
-            const float x = (int) floorf(left + currentTransform().getTranslateX() + 0.5f);
-            const float y = (int) floorf(top + currentTransform().getTranslateY() + 0.5f);
+            const float x = (int) floorf(left + currentTransform()->getTranslateX() + 0.5f);
+            const float y = (int) floorf(top + currentTransform()->getTranslateY() + 0.5f);
 
             right = x + right - left;
             bottom = y + bottom - top;
-            drawIndexedTextureMesh(x, y, right, bottom, texture->id, alpha / 255.0f,
-                    mode, texture->blend, (GLvoid*) mesh->offset, (GLvoid*) mesh->textureOffset,
-                    GL_TRIANGLES, mesh->indexCount, false, true,
-                    mCaches.patchCache.getMeshBuffer(), true, !mesh->hasEmptyQuads);
-        } else {
-            drawIndexedTextureMesh(left, top, right, bottom, texture->id, alpha / 255.0f,
-                    mode, texture->blend, (GLvoid*) mesh->offset, (GLvoid*) mesh->textureOffset,
-                    GL_TRIANGLES, mesh->indexCount, false, false,
-                    mCaches.patchCache.getMeshBuffer(), true, !mesh->hasEmptyQuads);
+            left = x;
+            top = y;
+            ignoreTransform = true;
         }
+        drawIndexedTextureMesh(left, top, right, bottom, texture->id, paint,
+                texture->blend, (GLvoid*) mesh->offset, (GLvoid*) mesh->textureOffset,
+                GL_TRIANGLES, mesh->indexCount, false, ignoreTransform,
+                mCaches.patchCache.getMeshBuffer(), kModelViewMode_Translate, !mesh->hasEmptyQuads);
     }
 
     return DrawGlInfo::kStatusDrew;
@@ -2492,8 +2369,8 @@
  * will not set the scissor enable or dirty the current layer, if any.
  * The caller is responsible for properly dirtying the current layer.
  */
-status_t OpenGLRenderer::drawPatches(SkBitmap* bitmap, AssetAtlas::Entry* entry,
-        TextureVertex* vertices, uint32_t indexCount, SkPaint* paint) {
+status_t OpenGLRenderer::drawPatches(const SkBitmap* bitmap, AssetAtlas::Entry* entry,
+        TextureVertex* vertices, uint32_t indexCount, const SkPaint* paint) {
     mCaches.activeTexture(0);
     Texture* texture = entry ? entry->texture : mCaches.textureCache.get(bitmap);
     if (!texture) return DrawGlInfo::kStatusDone;
@@ -2502,58 +2379,62 @@
     texture->setWrap(GL_CLAMP_TO_EDGE, true);
     texture->setFilter(GL_LINEAR, true);
 
-    int alpha;
-    SkXfermode::Mode mode;
-    getAlphaAndMode(paint, &alpha, &mode);
-
-    drawIndexedTextureMesh(0.0f, 0.0f, 1.0f, 1.0f, texture->id, alpha / 255.0f,
-            mode, texture->blend, &vertices[0].position[0], &vertices[0].texture[0],
-            GL_TRIANGLES, indexCount, false, true, 0, true, false);
+    drawIndexedTextureMesh(0.0f, 0.0f, 1.0f, 1.0f, texture->id, paint,
+            texture->blend, &vertices[0].x, &vertices[0].u,
+            GL_TRIANGLES, indexCount, false, true, 0, kModelViewMode_Translate, false);
 
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawVertexBuffer(const VertexBuffer& vertexBuffer, SkPaint* paint,
-        bool useOffset) {
+status_t OpenGLRenderer::drawVertexBuffer(VertexBufferMode mode,
+        const VertexBuffer& vertexBuffer, const SkPaint* paint, bool useOffset) {
+    // not missing call to quickReject/dirtyLayer, always done at a higher level
     if (!vertexBuffer.getVertexCount()) {
         // no vertices to draw
         return DrawGlInfo::kStatusDone;
     }
 
     int color = paint->getColor();
-    SkXfermode::Mode mode = getXfermode(paint->getXfermode());
     bool isAA = paint->isAntiAlias();
 
     setupDraw();
     setupDrawNoTexture();
     if (isAA) setupDrawAA();
     setupDrawColor(color, ((color >> 24) & 0xFF) * mSnapshot->alpha);
-    setupDrawColorFilter();
+    setupDrawColorFilter(getColorFilter(paint));
     setupDrawShader();
-    setupDrawBlending(isAA, mode);
+    setupDrawBlending(paint, isAA);
     setupDrawProgram();
-    setupDrawModelViewIdentity(useOffset);
+    setupDrawModelView(kModelViewMode_Translate, useOffset, 0, 0, 0, 0);
     setupDrawColorUniforms();
-    setupDrawColorFilterUniforms();
-    setupDrawShaderIdentityUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
+    setupDrawShaderUniforms();
 
-    void* vertices = vertexBuffer.getBuffer();
+    const void* vertices = vertexBuffer.getBuffer();
     bool force = mCaches.unbindMeshBuffer();
     mCaches.bindPositionVertexPointer(true, vertices, isAA ? gAlphaVertexStride : gVertexStride);
     mCaches.resetTexCoordsVertexPointer();
-    mCaches.unbindIndicesBuffer();
+
 
     int alphaSlot = -1;
     if (isAA) {
         void* alphaCoords = ((GLbyte*) vertices) + gVertexAlphaOffset;
         alphaSlot = mCaches.currentProgram->getAttrib("vtxAlpha");
-
         // TODO: avoid enable/disable in back to back uses of the alpha attribute
         glEnableVertexAttribArray(alphaSlot);
         glVertexAttribPointer(alphaSlot, 1, GL_FLOAT, GL_FALSE, gAlphaVertexStride, alphaCoords);
     }
 
-    glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexBuffer.getVertexCount());
+    if (mode == kVertexBufferMode_Standard) {
+        mCaches.unbindIndicesBuffer();
+        glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexBuffer.getVertexCount());
+    } else if (mode == kVertexBufferMode_OnePolyRingShadow) {
+        mCaches.bindShadowIndicesBuffer();
+        glDrawElements(GL_TRIANGLE_STRIP, ONE_POLY_RING_SHADOW_INDEX_COUNT, GL_UNSIGNED_SHORT, 0);
+    } else if (mode == kVertexBufferMode_TwoPolyRingShadow) {
+        mCaches.bindShadowIndicesBuffer();
+        glDrawElements(GL_TRIANGLE_STRIP, TWO_POLY_RING_SHADOW_INDEX_COUNT, GL_UNSIGNED_SHORT, 0);
+    }
 
     if (isAA) {
         glDisableVertexAttribArray(alphaSlot);
@@ -2571,18 +2452,18 @@
  *
  * Doesn't yet support joins, caps, or path effects.
  */
-status_t OpenGLRenderer::drawConvexPath(const SkPath& path, SkPaint* paint) {
+status_t OpenGLRenderer::drawConvexPath(const SkPath& path, const SkPaint* paint) {
     VertexBuffer vertexBuffer;
     // TODO: try clipping large paths to viewport
-    PathTessellator::tessellatePath(path, paint, mSnapshot->transform, vertexBuffer);
+    PathTessellator::tessellatePath(path, paint, *currentTransform(), vertexBuffer);
 
     if (hasLayer()) {
         SkRect bounds = path.getBounds();
-        PathTessellator::expandBoundsForStroke(bounds, paint, false);
-        dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, currentTransform());
+        PathTessellator::expandBoundsForStroke(bounds, paint);
+        dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *currentTransform());
     }
 
-    return drawVertexBuffer(vertexBuffer, paint);
+    return drawVertexBuffer(kVertexBufferMode_Standard, vertexBuffer, paint);
 }
 
 /**
@@ -2596,58 +2477,64 @@
  * TODO: try using a fixed input buffer for non-capped lines as in text rendering. this may reduce
  * memory transfer by removing need for degenerate vertices.
  */
-status_t OpenGLRenderer::drawLines(float* points, int count, SkPaint* paint) {
-    if (mSnapshot->isIgnored() || count < 4) return DrawGlInfo::kStatusDone;
+status_t OpenGLRenderer::drawLines(const float* points, int count, const SkPaint* paint) {
+    if (currentSnapshot()->isIgnored() || count < 4) return DrawGlInfo::kStatusDone;
 
     count &= ~0x3; // round down to nearest four
 
     VertexBuffer buffer;
     SkRect bounds;
-    PathTessellator::tessellateLines(points, count, paint, mSnapshot->transform, bounds, buffer);
+    PathTessellator::tessellateLines(points, count, paint, *currentTransform(), bounds, buffer);
 
-    if (quickReject(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom)) {
+    // can't pass paint, since style would be checked for outset. outset done by tessellation.
+    if (quickRejectSetupScissor(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
-    dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, currentTransform());
+    dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *currentTransform());
 
     bool useOffset = !paint->isAntiAlias();
-    return drawVertexBuffer(buffer, paint, useOffset);
+    return drawVertexBuffer(kVertexBufferMode_Standard, buffer, paint, useOffset);
 }
 
-status_t OpenGLRenderer::drawPoints(float* points, int count, SkPaint* paint) {
-    if (mSnapshot->isIgnored() || count < 2) return DrawGlInfo::kStatusDone;
+status_t OpenGLRenderer::drawPoints(const float* points, int count, const SkPaint* paint) {
+    if (currentSnapshot()->isIgnored() || count < 2) return DrawGlInfo::kStatusDone;
 
     count &= ~0x1; // round down to nearest two
 
     VertexBuffer buffer;
     SkRect bounds;
-    PathTessellator::tessellatePoints(points, count, paint, mSnapshot->transform, bounds, buffer);
+    PathTessellator::tessellatePoints(points, count, paint, *currentTransform(), bounds, buffer);
 
-    if (quickReject(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom)) {
+    // can't pass paint, since style would be checked for outset. outset done by tessellation.
+    if (quickRejectSetupScissor(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
-    dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, currentTransform());
+    dirtyLayer(bounds.fLeft, bounds.fTop, bounds.fRight, bounds.fBottom, *currentTransform());
 
     bool useOffset = !paint->isAntiAlias();
-    return drawVertexBuffer(buffer, paint, useOffset);
+    return drawVertexBuffer(kVertexBufferMode_Standard, buffer, paint, useOffset);
 }
 
 status_t OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
     // No need to check against the clip, we fill the clip region
-    if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
+    if (currentSnapshot()->isIgnored()) return DrawGlInfo::kStatusDone;
 
-    Rect& clip(*mSnapshot->clipRect);
+    Rect clip(*currentClipRect());
     clip.snapToPixelBoundaries();
 
-    drawColorRect(clip.left, clip.top, clip.right, clip.bottom, color, mode, true);
+    SkPaint paint;
+    paint.setColor(color);
+    paint.setXfermodeMode(mode);
+
+    drawColorRect(clip.left, clip.top, clip.right, clip.bottom, &paint, true);
 
     return DrawGlInfo::kStatusDrew;
 }
 
 status_t OpenGLRenderer::drawShape(float left, float top, const PathTexture* texture,
-        SkPaint* paint) {
+        const SkPaint* paint) {
     if (!texture) return DrawGlInfo::kStatusDone;
     const AutoTexture autoCleanup(texture);
 
@@ -2660,8 +2547,8 @@
 }
 
 status_t OpenGLRenderer::drawRoundRect(float left, float top, float right, float bottom,
-        float rx, float ry, SkPaint* p) {
-    if (mSnapshot->isIgnored() || quickRejectPreStroke(left, top, right, bottom, p) ||
+        float rx, float ry, const SkPaint* p) {
+    if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
             (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
         return DrawGlInfo::kStatusDone;
     }
@@ -2685,8 +2572,8 @@
     return drawConvexPath(path, p);
 }
 
-status_t OpenGLRenderer::drawCircle(float x, float y, float radius, SkPaint* p) {
-    if (mSnapshot->isIgnored() || quickRejectPreStroke(x - radius, y - radius,
+status_t OpenGLRenderer::drawCircle(float x, float y, float radius, const SkPaint* p) {
+    if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(x - radius, y - radius,
             x + radius, y + radius, p) ||
             (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
         return DrawGlInfo::kStatusDone;
@@ -2707,8 +2594,8 @@
 }
 
 status_t OpenGLRenderer::drawOval(float left, float top, float right, float bottom,
-        SkPaint* p) {
-    if (mSnapshot->isIgnored() || quickRejectPreStroke(left, top, right, bottom, p) ||
+        const SkPaint* p) {
+    if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
             (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
         return DrawGlInfo::kStatusDone;
     }
@@ -2729,8 +2616,8 @@
 }
 
 status_t OpenGLRenderer::drawArc(float left, float top, float right, float bottom,
-        float startAngle, float sweepAngle, bool useCenter, SkPaint* p) {
-    if (mSnapshot->isIgnored() || quickRejectPreStroke(left, top, right, bottom, p) ||
+        float startAngle, float sweepAngle, bool useCenter, const SkPaint* p) {
+    if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
             (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
         return DrawGlInfo::kStatusDone;
     }
@@ -2766,8 +2653,9 @@
 // See SkPaintDefaults.h
 #define SkPaintDefaults_MiterLimit SkIntToScalar(4)
 
-status_t OpenGLRenderer::drawRect(float left, float top, float right, float bottom, SkPaint* p) {
-    if (mSnapshot->isIgnored() || quickRejectPreStroke(left, top, right, bottom, p) ||
+status_t OpenGLRenderer::drawRect(float left, float top, float right, float bottom,
+        const SkPaint* p) {
+    if (currentSnapshot()->isIgnored() || quickRejectSetupScissor(left, top, right, bottom, p) ||
             (p->getAlpha() == 0 && getXfermode(p->getXfermode()) != SkXfermode::kClear_Mode)) {
         return DrawGlInfo::kStatusDone;
     }
@@ -2791,19 +2679,19 @@
         return drawConvexPath(path, p);
     }
 
-    if (p->isAntiAlias() && !currentTransform().isSimple()) {
+    if (p->isAntiAlias() && !currentTransform()->isSimple()) {
         SkPath path;
         path.addRect(left, top, right, bottom);
         return drawConvexPath(path, p);
     } else {
-        drawColorRect(left, top, right, bottom, p->getColor(), getXfermode(p->getXfermode()));
+        drawColorRect(left, top, right, bottom, p);
         return DrawGlInfo::kStatusDrew;
     }
 }
 
-void OpenGLRenderer::drawTextShadow(SkPaint* paint, const char* text, int bytesCount, int count,
-        const float* positions, FontRenderer& fontRenderer, int alpha, SkXfermode::Mode mode,
-        float x, float y) {
+void OpenGLRenderer::drawTextShadow(const SkPaint* paint, const char* text,
+        int bytesCount, int count, const float* positions,
+        FontRenderer& fontRenderer, int alpha, float x, float y) {
     mCaches.activeTexture(0);
 
     // NOTE: The drop shadow will not perform gamma correction
@@ -2828,14 +2716,15 @@
     setupDraw();
     setupDrawWithTexture(true);
     setupDrawAlpha8Color(shadowColor, shadowAlpha < 255 ? shadowAlpha : alpha);
-    setupDrawColorFilter();
+    setupDrawColorFilter(getColorFilter(paint));
     setupDrawShader();
-    setupDrawBlending(true, mode);
+    setupDrawBlending(paint, true);
     setupDrawProgram();
-    setupDrawModelView(sx, sy, sx + shadow->width, sy + shadow->height);
+    setupDrawModelView(kModelViewMode_TranslateAndScale, false,
+            sx, sy, sx + shadow->width, sy + shadow->height);
     setupDrawTexture(shadow->id);
     setupDrawPureColorUniforms();
-    setupDrawColorFilterUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
     setupDrawShaderUniforms();
     setupDrawMesh(NULL, (GLvoid*) gMeshTextureOffset);
 
@@ -2848,13 +2737,13 @@
 }
 
 status_t OpenGLRenderer::drawPosText(const char* text, int bytesCount, int count,
-        const float* positions, SkPaint* paint) {
-    if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) {
+        const float* positions, const SkPaint* paint) {
+    if (text == NULL || count == 0 || currentSnapshot()->isIgnored() || canSkipText(paint)) {
         return DrawGlInfo::kStatusDone;
     }
 
     // NOTE: Skia does not support perspective transform on drawPosText yet
-    if (!currentTransform().isSimple()) {
+    if (!currentTransform()->isSimple()) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -2862,10 +2751,10 @@
 
     float x = 0.0f;
     float y = 0.0f;
-    const bool pureTranslate = currentTransform().isPureTranslate();
+    const bool pureTranslate = currentTransform()->isPureTranslate();
     if (pureTranslate) {
-        x = (int) floorf(x + currentTransform().getTranslateX() + 0.5f);
-        y = (int) floorf(y + currentTransform().getTranslateY() + 0.5f);
+        x = (int) floorf(x + currentTransform()->getTranslateX() + 0.5f);
+        y = (int) floorf(y + currentTransform()->getTranslateY() + 0.5f);
     }
 
     FontRenderer& fontRenderer = mCaches.fontRenderer->getFontRenderer(paint);
@@ -2877,11 +2766,11 @@
 
     if (CC_UNLIKELY(mDrawModifiers.mHasShadow)) {
         drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer,
-                alpha, mode, 0.0f, 0.0f);
+                alpha, 0.0f, 0.0f);
     }
 
     // Pick the appropriate texture filtering
-    bool linearFilter = currentTransform().changesBounds();
+    bool linearFilter = currentTransform()->changesBounds();
     if (pureTranslate && !linearFilter) {
         linearFilter = fabs(y - (int) y) > 0.0f || fabs(x - (int) x) > 0.0f;
     }
@@ -2897,7 +2786,7 @@
             positions, hasActiveLayer ? &bounds : NULL, &functor)) {
         if (hasActiveLayer) {
             if (!pureTranslate) {
-                currentTransform().mapRect(bounds);
+                currentTransform()->mapRect(bounds);
             }
             dirtyLayerUnchecked(bounds, getRegion());
         }
@@ -2915,7 +2804,7 @@
             fontTransform = mat4::identity();
         } else {
             float sx, sy;
-            currentTransform().decomposeScale(sx, sy);
+            currentTransform()->decomposeScale(sx, sy);
             fontTransform.loadScale(sx, sy, 1.0f);
         }
     }
@@ -2923,14 +2812,14 @@
 }
 
 status_t OpenGLRenderer::drawText(const char* text, int bytesCount, int count, float x, float y,
-        const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds,
+        const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds,
         DrawOpMode drawOpMode) {
 
     if (drawOpMode == kDrawOpMode_Immediate) {
         // The checks for corner-case ignorable text and quick rejection is only done for immediate
         // drawing as ops from DeferredDisplayList are already filtered for these
-        if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint) ||
-                quickReject(bounds)) {
+        if (text == NULL || count == 0 || currentSnapshot()->isIgnored() || canSkipText(paint) ||
+                quickRejectSetupScissor(bounds)) {
             return DrawGlInfo::kStatusDone;
         }
     }
@@ -2938,7 +2827,7 @@
     const float oldX = x;
     const float oldY = y;
 
-    const mat4& transform = currentTransform();
+    const mat4& transform = *currentTransform();
     const bool pureTranslate = transform.isPureTranslate();
 
     if (CC_LIKELY(pureTranslate)) {
@@ -2955,7 +2844,7 @@
     if (CC_UNLIKELY(mDrawModifiers.mHasShadow)) {
         fontRenderer.setFont(paint, mat4::identity());
         drawTextShadow(paint, text, bytesCount, count, positions, fontRenderer,
-                alpha, mode, oldX, oldY);
+                alpha, oldX, oldY);
     }
 
     const bool hasActiveLayer = hasLayer();
@@ -2979,7 +2868,7 @@
     fontRenderer.setTextureFiltering(linearFilter);
 
     // TODO: Implement better clipping for scaled/rotated text
-    const Rect* clip = !pureTranslate ? NULL : mSnapshot->clipRect;
+    const Rect* clip = !pureTranslate ? NULL : currentClipRect();
     Rect layerBounds(FLT_MAX / 2.0f, FLT_MAX / 2.0f, FLT_MIN / 2.0f, FLT_MIN / 2.0f);
 
     bool status;
@@ -3004,14 +2893,14 @@
         dirtyLayerUnchecked(layerBounds, getRegion());
     }
 
-    drawTextDecorations(text, bytesCount, totalAdvance, oldX, oldY, paint);
+    drawTextDecorations(totalAdvance, oldX, oldY, paint);
 
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
-        float hOffset, float vOffset, SkPaint* paint) {
-    if (text == NULL || count == 0 || mSnapshot->isIgnored() || canSkipText(paint)) {
+status_t OpenGLRenderer::drawTextOnPath(const char* text, int bytesCount, int count,
+        const SkPath* path, float hOffset, float vOffset, const SkPaint* paint) {
+    if (text == NULL || count == 0 || currentSnapshot()->isIgnored() || canSkipText(paint)) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -3035,7 +2924,7 @@
     if (fontRenderer.renderTextOnPath(paint, clip, text, 0, bytesCount, count, path,
             hOffset, vOffset, hasActiveLayer ? &bounds : NULL, &functor)) {
         if (hasActiveLayer) {
-            currentTransform().mapRect(bounds);
+            currentTransform()->mapRect(bounds);
             dirtyLayerUnchecked(bounds, getRegion());
         }
     }
@@ -3043,8 +2932,8 @@
     return DrawGlInfo::kStatusDrew;
 }
 
-status_t OpenGLRenderer::drawPath(SkPath* path, SkPaint* paint) {
-    if (mSnapshot->isIgnored()) return DrawGlInfo::kStatusDone;
+status_t OpenGLRenderer::drawPath(const SkPath* path, const SkPaint* paint) {
+    if (currentSnapshot()->isIgnored()) return DrawGlInfo::kStatusDone;
 
     mCaches.activeTexture(0);
 
@@ -3069,14 +2958,14 @@
     if (layer->isTextureLayer()) {
         transform = &layer->getTransform();
         if (!transform->isIdentity()) {
-            save(0);
-            currentTransform().multiply(*transform);
+            save(SkCanvas::kMatrix_SaveFlag);
+            concatMatrix(*transform);
         }
     }
 
     bool clipRequired = false;
-    const bool rejected = quickRejectNoScissor(x, y,
-            x + layer->layer.getWidth(), y + layer->layer.getHeight(), false, &clipRequired);
+    const bool rejected = calculateQuickRejectForScissor(x, y,
+            x + layer->layer.getWidth(), y + layer->layer.getHeight(), &clipRequired, false);
 
     if (rejected) {
         if (transform && !transform->isIdentity()) {
@@ -3091,33 +2980,31 @@
     mCaches.activeTexture(0);
 
     if (CC_LIKELY(!layer->region.isEmpty())) {
-        SkiaColorFilter* oldFilter = mDrawModifiers.mColorFilter;
-        mDrawModifiers.mColorFilter = layer->getColorFilter();
-
         if (layer->region.isRect()) {
             DRAW_DOUBLE_STENCIL_IF(!layer->hasDrawnSinceUpdate,
                     composeLayerRect(layer, layer->regionRect));
         } else if (layer->mesh) {
+
             const float a = getLayerAlpha(layer);
             setupDraw();
             setupDrawWithTexture();
             setupDrawColor(a, a, a, a);
-            setupDrawColorFilter();
-            setupDrawBlending(layer->isBlend() || a < 1.0f, layer->getMode(), false);
+            setupDrawColorFilter(layer->getColorFilter());
+            setupDrawBlending(layer);
             setupDrawProgram();
             setupDrawPureColorUniforms();
-            setupDrawColorFilterUniforms();
+            setupDrawColorFilterUniforms(layer->getColorFilter());
             setupDrawTexture(layer->getTexture());
-            if (CC_LIKELY(currentTransform().isPureTranslate())) {
-                int tx = (int) floorf(x + currentTransform().getTranslateX() + 0.5f);
-                int ty = (int) floorf(y + currentTransform().getTranslateY() + 0.5f);
+            if (CC_LIKELY(currentTransform()->isPureTranslate())) {
+                int tx = (int) floorf(x + currentTransform()->getTranslateX() + 0.5f);
+                int ty = (int) floorf(y + currentTransform()->getTranslateY() + 0.5f);
 
                 layer->setFilter(GL_NEAREST);
-                setupDrawModelViewTranslate(tx, ty,
+                setupDrawModelView(kModelViewMode_Translate, false, tx, ty,
                         tx + layer->layer.getWidth(), ty + layer->layer.getHeight(), true);
             } else {
                 layer->setFilter(GL_LINEAR);
-                setupDrawModelViewTranslate(x, y,
+                setupDrawModelView(kModelViewMode_Translate, false, x, y,
                         x + layer->layer.getWidth(), y + layer->layer.getHeight());
             }
 
@@ -3127,7 +3014,7 @@
             while (elementsCount > 0) {
                 GLsizei drawCount = min(elementsCount, (GLsizei) gMaxNumberOfQuads * 6);
 
-                setupDrawMeshIndices(&mesh[0].position[0], &mesh[0].texture[0]);
+                setupDrawMeshIndices(&mesh[0].x, &mesh[0].u);
                 DRAW_DOUBLE_STENCIL_IF(!layer->hasDrawnSinceUpdate,
                         glDrawElements(GL_TRIANGLES, drawCount, GL_UNSIGNED_SHORT, NULL));
 
@@ -3138,16 +3025,16 @@
             }
 
 #if DEBUG_LAYERS_AS_REGIONS
-            drawRegionRects(layer->region);
+            drawRegionRectsDebug(layer->region);
 #endif
         }
 
-        mDrawModifiers.mColorFilter = oldFilter;
-
         if (layer->debugDrawUpdate) {
             layer->debugDrawUpdate = false;
-            drawColorRect(x, y, x + layer->layer.getWidth(), y + layer->layer.getHeight(),
-                    0x7f00ff00, SkXfermode::kSrcOver_Mode);
+
+            SkPaint paint;
+            paint.setColor(0x7f00ff00);
+            drawColorRect(x, y, x + layer->layer.getWidth(), y + layer->layer.getHeight(), &paint);
         }
     }
     layer->hasDrawnSinceUpdate = true;
@@ -3175,18 +3062,6 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
-// Color filters
-///////////////////////////////////////////////////////////////////////////////
-
-void OpenGLRenderer::resetColorFilter() {
-    mDrawModifiers.mColorFilter = NULL;
-}
-
-void OpenGLRenderer::setupColorFilter(SkiaColorFilter* filter) {
-    mDrawModifiers.mColorFilter = filter;
-}
-
-///////////////////////////////////////////////////////////////////////////////
 // Drop shadow
 ///////////////////////////////////////////////////////////////////////////////
 
@@ -3220,7 +3095,7 @@
     mDrawModifiers.mPaintFilterSetBits = setBits & SkPaint::kAllFlags;
 }
 
-SkPaint* OpenGLRenderer::filterPaint(SkPaint* paint) {
+const SkPaint* OpenGLRenderer::filterPaint(const SkPaint* paint) {
     if (CC_LIKELY(!mDrawModifiers.mHasDrawFilter || !paint)) {
         return paint;
     }
@@ -3238,7 +3113,7 @@
 // Drawing implementation
 ///////////////////////////////////////////////////////////////////////////////
 
-Texture* OpenGLRenderer::getTexture(SkBitmap* bitmap) {
+Texture* OpenGLRenderer::getTexture(const SkBitmap* bitmap) {
     Texture* texture = mCaches.assetAtlas.getEntryTexture(bitmap);
     if (!texture) {
         return mCaches.textureCache.get(bitmap);
@@ -3247,8 +3122,8 @@
 }
 
 void OpenGLRenderer::drawPathTexture(const PathTexture* texture,
-        float x, float y, SkPaint* paint) {
-    if (quickReject(x, y, x + texture->width, y + texture->height)) {
+        float x, float y, const SkPaint* paint) {
+    if (quickRejectSetupScissor(x, y, x + texture->width, y + texture->height)) {
         return;
     }
 
@@ -3259,14 +3134,15 @@
     setupDraw();
     setupDrawWithTexture(true);
     setupDrawAlpha8Color(paint->getColor(), alpha);
-    setupDrawColorFilter();
+    setupDrawColorFilter(getColorFilter(paint));
     setupDrawShader();
-    setupDrawBlending(true, mode);
+    setupDrawBlending(paint, true);
     setupDrawProgram();
-    setupDrawModelView(x, y, x + texture->width, y + texture->height);
+    setupDrawModelView(kModelViewMode_TranslateAndScale, false,
+            x, y, x + texture->width, y + texture->height);
     setupDrawTexture(texture->id);
     setupDrawPureColorUniforms();
-    setupDrawColorFilterUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
     setupDrawShaderUniforms();
     setupDrawMesh(NULL, (GLvoid*) gMeshTextureOffset);
 
@@ -3278,8 +3154,8 @@
 #define kStdUnderline_Offset    (1.0f / 9.0f)
 #define kStdUnderline_Thickness (1.0f / 18.0f)
 
-void OpenGLRenderer::drawTextDecorations(const char* text, int bytesCount, float underlineWidth,
-        float x, float y, SkPaint* paint) {
+void OpenGLRenderer::drawTextDecorations(float underlineWidth, float x, float y,
+        const SkPaint* paint) {
     // Handle underline and strike-through
     uint32_t flags = paint->getFlags();
     if (flags & (SkPaint::kUnderlineText_Flag | SkPaint::kStrikeThruText_Flag)) {
@@ -3323,8 +3199,111 @@
     }
 }
 
-status_t OpenGLRenderer::drawRects(const float* rects, int count, SkPaint* paint) {
-    if (mSnapshot->isIgnored()) {
+status_t OpenGLRenderer::drawRects(const float* rects, int count, const SkPaint* paint) {
+    if (currentSnapshot()->isIgnored()) {
+        return DrawGlInfo::kStatusDone;
+    }
+
+    return drawColorRects(rects, count, paint, false, true, true);
+}
+
+static void mapPointFakeZ(Vector3& point, const mat4& transformXY, const mat4& transformZ) {
+    // map z coordinate with true 3d matrix
+    point.z = transformZ.mapZ(point);
+
+    // map x,y coordinates with draw/Skia matrix
+    transformXY.mapPoint(point.x, point.y);
+}
+
+status_t OpenGLRenderer::drawShadow(const mat4& casterTransformXY, const mat4& casterTransformZ,
+        float casterAlpha, bool casterUnclipped, const SkPath* casterPerimeter) {
+    if (currentSnapshot()->isIgnored()) return DrawGlInfo::kStatusDone;
+
+    // TODO: use quickRejectWithScissor. For now, always force enable scissor.
+    mCaches.enableScissor();
+
+    SkPaint paint;
+    paint.setAntiAlias(true); // want to use AlphaVertex
+
+    // tessellate caster outline into a 2d polygon
+    Vector<Vertex> casterVertices2d;
+    const float casterRefinementThresholdSquared = 20.0f; // TODO: experiment with this value
+    PathTessellator::approximatePathOutlineVertices(*casterPerimeter,
+            casterRefinementThresholdSquared, casterVertices2d);
+    if (!ShadowTessellator::isClockwisePath(*casterPerimeter)) {
+        ShadowTessellator::reverseVertexArray(casterVertices2d.editArray(),
+                casterVertices2d.size());
+    }
+
+    if (casterVertices2d.size() == 0) {
+        // empty caster polygon computed from path
+        return DrawGlInfo::kStatusDone;
+    }
+
+    // map 2d caster poly into 3d
+    const int casterVertexCount = casterVertices2d.size();
+    Vector3 casterPolygon[casterVertexCount];
+    float minZ = FLT_MAX;
+    float maxZ = -FLT_MAX;
+    for (int i = 0; i < casterVertexCount; i++) {
+        const Vertex& point2d = casterVertices2d[i];
+        casterPolygon[i] = Vector3(point2d.x, point2d.y, 0);
+        mapPointFakeZ(casterPolygon[i], casterTransformXY, casterTransformZ);
+        minZ = fmin(minZ, casterPolygon[i].z);
+        maxZ = fmax(maxZ, casterPolygon[i].z);
+    }
+
+    // map the centroid of the caster into 3d
+    Vector2 centroid =  ShadowTessellator::centroid2d(
+            reinterpret_cast<const Vector2*>(casterVertices2d.array()),
+            casterVertexCount);
+    Vector3 centroid3d(centroid.x, centroid.y, 0);
+    mapPointFakeZ(centroid3d, casterTransformXY, casterTransformZ);
+
+    // if the caster intersects the z=0 plane, lift it in Z so it doesn't
+    if (minZ < SHADOW_MIN_CASTER_Z) {
+        float casterLift = SHADOW_MIN_CASTER_Z - minZ;
+        for (int i = 0; i < casterVertexCount; i++) {
+            casterPolygon[i].z += casterLift;
+        }
+        centroid3d.z += casterLift;
+    }
+
+    // Check whether we want to draw the shadow at all by checking the caster's
+    // bounds against clip.
+    // We only have ortho projection, so we can just ignore the Z in caster for
+    // simple rejection calculation.
+    Rect localClip = mSnapshot->getLocalClip();
+    Rect casterBounds(casterPerimeter->getBounds());
+    casterTransformXY.mapRect(casterBounds);
+
+    bool isCasterOpaque = (casterAlpha == 1.0f) && casterUnclipped;
+    // draw caster's shadows
+    if (mCaches.propertyAmbientShadowStrength > 0) {
+        paint.setARGB(casterAlpha * mCaches.propertyAmbientShadowStrength, 0, 0, 0);
+        VertexBuffer ambientShadowVertexBuffer;
+        VertexBufferMode vertexBufferMode = ShadowTessellator::tessellateAmbientShadow(
+                isCasterOpaque, casterPolygon, casterVertexCount, centroid3d,
+                casterBounds, localClip, maxZ, ambientShadowVertexBuffer);
+        drawVertexBuffer(vertexBufferMode, ambientShadowVertexBuffer, &paint);
+    }
+
+    if (mCaches.propertySpotShadowStrength > 0) {
+        paint.setARGB(casterAlpha * mCaches.propertySpotShadowStrength, 0, 0, 0);
+        VertexBuffer spotShadowVertexBuffer;
+        VertexBufferMode vertexBufferMode = ShadowTessellator::tessellateSpotShadow(
+                isCasterOpaque, casterPolygon, casterVertexCount,
+                *currentTransform(), getWidth(), getHeight(), casterBounds, localClip,
+                spotShadowVertexBuffer);
+        drawVertexBuffer(vertexBufferMode, spotShadowVertexBuffer, &paint);
+    }
+
+    return DrawGlInfo::kStatusDrew;
+}
+
+status_t OpenGLRenderer::drawColorRects(const float* rects, int count, const SkPaint* paint,
+        bool ignoreTransform, bool dirty, bool clip) {
+    if (count == 0) {
         return DrawGlInfo::kStatusDone;
     }
 
@@ -3333,16 +3312,6 @@
     if (mDrawModifiers.mShader) {
         color |= 0x00ffffff;
     }
-    SkXfermode::Mode mode = getXfermode(paint->getXfermode());
-
-    return drawColorRects(rects, count, color, mode);
-}
-
-status_t OpenGLRenderer::drawColorRects(const float* rects, int count, int color,
-        SkXfermode::Mode mode, bool ignoreTransform, bool dirty, bool clip) {
-    if (count == 0) {
-        return DrawGlInfo::kStatusDone;
-    }
 
     float left = FLT_MAX;
     float top = FLT_MAX;
@@ -3369,34 +3338,36 @@
         bottom = fmaxf(bottom, b);
     }
 
-    if (clip && quickReject(left, top, right, bottom)) {
+    if (clip && quickRejectSetupScissor(left, top, right, bottom)) {
         return DrawGlInfo::kStatusDone;
     }
 
     setupDraw();
     setupDrawNoTexture();
-    setupDrawColor(color, ((color >> 24) & 0xFF) * mSnapshot->alpha);
+    setupDrawColor(color, ((color >> 24) & 0xFF) * currentSnapshot()->alpha);
     setupDrawShader();
-    setupDrawColorFilter();
-    setupDrawBlending(mode);
+    setupDrawColorFilter(getColorFilter(paint));
+    setupDrawBlending(paint);
     setupDrawProgram();
     setupDrawDirtyRegionsDisabled();
-    setupDrawModelView(0.0f, 0.0f, 1.0f, 1.0f, ignoreTransform, true);
+    setupDrawModelView(kModelViewMode_Translate, false,
+            0.0f, 0.0f, 0.0f, 0.0f, ignoreTransform);
     setupDrawColorUniforms();
     setupDrawShaderUniforms();
-    setupDrawColorFilterUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
 
     if (dirty && hasLayer()) {
-        dirtyLayer(left, top, right, bottom, currentTransform());
+        dirtyLayer(left, top, right, bottom, *currentTransform());
     }
 
-    drawIndexedQuads(&mesh[0], count / 4);
+    issueIndexedQuadDraw(&mesh[0], count / 4);
 
     return DrawGlInfo::kStatusDrew;
 }
 
 void OpenGLRenderer::drawColorRect(float left, float top, float right, float bottom,
-        int color, SkXfermode::Mode mode, bool ignoreTransform) {
+        const SkPaint* paint, bool ignoreTransform) {
+    int color = paint->getColor();
     // If a shader is set, preserve only the alpha
     if (mDrawModifiers.mShader) {
         color |= 0x00ffffff;
@@ -3404,34 +3375,31 @@
 
     setupDraw();
     setupDrawNoTexture();
-    setupDrawColor(color, ((color >> 24) & 0xFF) * mSnapshot->alpha);
+    setupDrawColor(color, ((color >> 24) & 0xFF) * currentSnapshot()->alpha);
     setupDrawShader();
-    setupDrawColorFilter();
-    setupDrawBlending(mode);
+    setupDrawColorFilter(getColorFilter(paint));
+    setupDrawBlending(paint);
     setupDrawProgram();
-    setupDrawModelView(left, top, right, bottom, ignoreTransform);
+    setupDrawModelView(kModelViewMode_TranslateAndScale, false,
+            left, top, right, bottom, ignoreTransform);
     setupDrawColorUniforms();
     setupDrawShaderUniforms(ignoreTransform);
-    setupDrawColorFilterUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
     setupDrawSimpleMesh();
 
     glDrawArrays(GL_TRIANGLE_STRIP, 0, gMeshCount);
 }
 
 void OpenGLRenderer::drawTextureRect(float left, float top, float right, float bottom,
-        Texture* texture, SkPaint* paint) {
-    int alpha;
-    SkXfermode::Mode mode;
-    getAlphaAndMode(paint, &alpha, &mode);
-
+        Texture* texture, const SkPaint* paint) {
     texture->setWrap(GL_CLAMP_TO_EDGE, true);
 
     GLvoid* vertices = (GLvoid*) NULL;
     GLvoid* texCoords = (GLvoid*) gMeshTextureOffset;
 
     if (texture->uvMapper) {
-        vertices = &mMeshVertices[0].position[0];
-        texCoords = &mMeshVertices[0].texture[0];
+        vertices = &mMeshVertices[0].x;
+        texCoords = &mMeshVertices[0].u;
 
         Rect uvs(0.0f, 0.0f, 1.0f, 1.0f);
         texture->uvMapper->map(uvs);
@@ -3439,17 +3407,17 @@
         resetDrawTextureTexCoords(uvs.left, uvs.top, uvs.right, uvs.bottom);
     }
 
-    if (CC_LIKELY(currentTransform().isPureTranslate())) {
-        const float x = (int) floorf(left + currentTransform().getTranslateX() + 0.5f);
-        const float y = (int) floorf(top + currentTransform().getTranslateY() + 0.5f);
+    if (CC_LIKELY(currentTransform()->isPureTranslate())) {
+        const float x = (int) floorf(left + currentTransform()->getTranslateX() + 0.5f);
+        const float y = (int) floorf(top + currentTransform()->getTranslateY() + 0.5f);
 
         texture->setFilter(GL_NEAREST, true);
         drawTextureMesh(x, y, x + texture->width, y + texture->height, texture->id,
-                alpha / 255.0f, mode, texture->blend, vertices, texCoords,
+                paint, texture->blend, vertices, texCoords,
                 GL_TRIANGLE_STRIP, gMeshCount, false, true);
     } else {
-        texture->setFilter(FILTER(paint), true);
-        drawTextureMesh(left, top, right, bottom, texture->id, alpha / 255.0f, mode,
+        texture->setFilter(getFilter(paint), true);
+        drawTextureMesh(left, top, right, bottom, texture->id, paint,
                 texture->blend, vertices, texCoords, GL_TRIANGLE_STRIP, gMeshCount);
     }
 
@@ -3458,86 +3426,85 @@
     }
 }
 
-void OpenGLRenderer::drawTextureRect(float left, float top, float right, float bottom,
-        GLuint texture, float alpha, SkXfermode::Mode mode, bool blend) {
-    drawTextureMesh(left, top, right, bottom, texture, alpha, mode, blend,
-            (GLvoid*) NULL, (GLvoid*) gMeshTextureOffset, GL_TRIANGLE_STRIP, gMeshCount);
-}
-
 void OpenGLRenderer::drawTextureMesh(float left, float top, float right, float bottom,
-        GLuint texture, float alpha, SkXfermode::Mode mode, bool blend,
+        GLuint texture, const SkPaint* paint, bool blend,
         GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
-        bool swapSrcDst, bool ignoreTransform, GLuint vbo, bool ignoreScale, bool dirty) {
+        bool swapSrcDst, bool ignoreTransform, GLuint vbo,
+        ModelViewMode modelViewMode, bool dirty) {
+
+    int a;
+    SkXfermode::Mode mode;
+    getAlphaAndMode(paint, &a, &mode);
+    const float alpha = a / 255.0f;
 
     setupDraw();
     setupDrawWithTexture();
     setupDrawColor(alpha, alpha, alpha, alpha);
-    setupDrawColorFilter();
-    setupDrawBlending(blend, mode, swapSrcDst);
+    setupDrawColorFilter(getColorFilter(paint));
+    setupDrawBlending(paint, blend, swapSrcDst);
     setupDrawProgram();
     if (!dirty) setupDrawDirtyRegionsDisabled();
-    if (!ignoreScale) {
-        setupDrawModelView(left, top, right, bottom, ignoreTransform);
-    } else {
-        setupDrawModelViewTranslate(left, top, right, bottom, ignoreTransform);
-    }
+    setupDrawModelView(modelViewMode, false, left, top, right, bottom, ignoreTransform);
     setupDrawTexture(texture);
     setupDrawPureColorUniforms();
-    setupDrawColorFilterUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
     setupDrawMesh(vertices, texCoords, vbo);
 
     glDrawArrays(drawMode, 0, elementsCount);
 }
 
 void OpenGLRenderer::drawIndexedTextureMesh(float left, float top, float right, float bottom,
-        GLuint texture, float alpha, SkXfermode::Mode mode, bool blend,
+        GLuint texture, const SkPaint* paint, bool blend,
         GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
-        bool swapSrcDst, bool ignoreTransform, GLuint vbo, bool ignoreScale, bool dirty) {
+        bool swapSrcDst, bool ignoreTransform, GLuint vbo,
+        ModelViewMode modelViewMode, bool dirty) {
+
+    int a;
+    SkXfermode::Mode mode;
+    getAlphaAndMode(paint, &a, &mode);
+    const float alpha = a / 255.0f;
 
     setupDraw();
     setupDrawWithTexture();
     setupDrawColor(alpha, alpha, alpha, alpha);
-    setupDrawColorFilter();
-    setupDrawBlending(blend, mode, swapSrcDst);
+    setupDrawColorFilter(getColorFilter(paint));
+    setupDrawBlending(paint, blend, swapSrcDst);
     setupDrawProgram();
     if (!dirty) setupDrawDirtyRegionsDisabled();
-    if (!ignoreScale) {
-        setupDrawModelView(left, top, right, bottom, ignoreTransform);
-    } else {
-        setupDrawModelViewTranslate(left, top, right, bottom, ignoreTransform);
-    }
+    setupDrawModelView(modelViewMode, false, left, top, right, bottom, ignoreTransform);
     setupDrawTexture(texture);
     setupDrawPureColorUniforms();
-    setupDrawColorFilterUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
     setupDrawMeshIndices(vertices, texCoords, vbo);
 
     glDrawElements(drawMode, elementsCount, GL_UNSIGNED_SHORT, NULL);
 }
 
 void OpenGLRenderer::drawAlpha8TextureMesh(float left, float top, float right, float bottom,
-        GLuint texture, bool hasColor, int color, int alpha, SkXfermode::Mode mode,
+        GLuint texture, const SkPaint* paint,
         GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
-        bool ignoreTransform, bool ignoreScale, bool dirty) {
+        bool ignoreTransform, ModelViewMode modelViewMode, bool dirty) {
+
+    int color = paint != NULL ? paint->getColor() : 0;
+    int alpha;
+    SkXfermode::Mode mode;
+    getAlphaAndMode(paint, &alpha, &mode);
 
     setupDraw();
     setupDrawWithTexture(true);
-    if (hasColor) {
+    if (paint != NULL) {
         setupDrawAlpha8Color(color, alpha);
     }
-    setupDrawColorFilter();
+    setupDrawColorFilter(getColorFilter(paint));
     setupDrawShader();
-    setupDrawBlending(true, mode);
+    setupDrawBlending(paint, true);
     setupDrawProgram();
     if (!dirty) setupDrawDirtyRegionsDisabled();
-    if (!ignoreScale) {
-        setupDrawModelView(left, top, right, bottom, ignoreTransform);
-    } else {
-        setupDrawModelViewTranslate(left, top, right, bottom, ignoreTransform);
-    }
+    setupDrawModelView(modelViewMode, false, left, top, right, bottom, ignoreTransform);
     setupDrawTexture(texture);
     setupDrawPureColorUniforms();
-    setupDrawColorFilterUniforms();
-    setupDrawShaderUniforms();
+    setupDrawColorFilterUniforms(getColorFilter(paint));
+    setupDrawShaderUniforms(ignoreTransform);
     setupDrawMesh(vertices, texCoords);
 
     glDrawArrays(drawMode, 0, elementsCount);
@@ -3618,23 +3585,23 @@
     TextureVertex::setUV(v++, u2, v2);
 }
 
-void OpenGLRenderer::getAlphaAndMode(SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const {
+void OpenGLRenderer::getAlphaAndMode(const SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const {
     getAlphaAndModeDirect(paint, alpha,  mode);
     if (mDrawModifiers.mOverrideLayerAlpha < 1.0f) {
         // if drawing a layer, ignore the paint's alpha
         *alpha = mDrawModifiers.mOverrideLayerAlpha * 255;
     }
-    *alpha *= mSnapshot->alpha;
+    *alpha *= currentSnapshot()->alpha;
 }
 
-float OpenGLRenderer::getLayerAlpha(Layer* layer) const {
+float OpenGLRenderer::getLayerAlpha(const Layer* layer) const {
     float alpha;
     if (mDrawModifiers.mOverrideLayerAlpha < 1.0f) {
         alpha = mDrawModifiers.mOverrideLayerAlpha;
     } else {
         alpha = layer->getAlpha() / 255.0f;
     }
-    return alpha * mSnapshot->alpha;
+    return alpha * currentSnapshot()->alpha;
 }
 
 }; // namespace uirenderer
diff --git a/libs/hwui/OpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
index 9afb7ad..b49d1e1 100644
--- a/libs/hwui/OpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -21,6 +21,8 @@
 #include <GLES2/gl2ext.h>
 
 #include <SkBitmap.h>
+#include <SkCanvas.h>
+#include <SkColorFilter.h>
 #include <SkMatrix.h>
 #include <SkPaint.h>
 #include <SkRegion.h>
@@ -41,16 +43,22 @@
 #include "Matrix.h"
 #include "Program.h"
 #include "Rect.h"
+#include "Renderer.h"
+#include "StatefulBaseRenderer.h"
 #include "Snapshot.h"
-#include "Vertex.h"
-#include "SkiaShader.h"
-#include "SkiaColorFilter.h"
 #include "UvMapper.h"
+#include "Vertex.h"
 #include "Caches.h"
 
 namespace android {
 namespace uirenderer {
 
+class DeferredDisplayState;
+class RenderNode;
+class TextSetupFunctor;
+class VertexBuffer;
+class SkiaShader;
+
 struct DrawModifiers {
     DrawModifiers() {
         reset();
@@ -61,7 +69,6 @@
     }
 
     SkiaShader* mShader;
-    SkiaColorFilter* mColorFilter;
     float mOverrideLayerAlpha;
 
     // Drop shadow
@@ -82,12 +89,6 @@
     kStateDeferFlag_Clip = 0x2
 };
 
-enum DrawOpMode {
-    kDrawOpMode_Immediate,
-    kDrawOpMode_Defer,
-    kDrawOpMode_Flush
-};
-
 enum ClipSideFlags {
     kClipSide_None = 0x0,
     kClipSide_Left = 0x1,
@@ -98,105 +99,47 @@
     kClipSide_ConservativeFull = 0x1F
 };
 
+/**
+ * Defines additional transformation that should be applied by the model view matrix, beyond that of
+ * the currentTransform()
+ */
+enum ModelViewMode {
+    /**
+     * Used when the model view should simply translate geometry passed to the shader. The resulting
+     * matrix will be a simple translation.
+     */
+    kModelViewMode_Translate = 0,
+
+    /**
+     * Used when the model view should translate and scale geometry. The resulting matrix will be a
+     * translation + scale. This is frequently used together with VBO 0, the (0,0,1,1) rect.
+     */
+    kModelViewMode_TranslateAndScale = 1,
+};
+
+enum VertexBufferMode {
+    kVertexBufferMode_Standard = 0,
+    kVertexBufferMode_OnePolyRingShadow = 1,
+    kVertexBufferMode_TwoPolyRingShadow = 2
+};
+
 ///////////////////////////////////////////////////////////////////////////////
 // Renderer
 ///////////////////////////////////////////////////////////////////////////////
-
-class DeferredDisplayState;
-class DisplayList;
-class TextSetupFunctor;
-class VertexBuffer;
-
 /**
- * OpenGL renderer used to draw accelerated 2D graphics. The API is a
- * simplified version of Skia's Canvas API.
+ * OpenGL Renderer implementation.
  */
-class OpenGLRenderer {
+class OpenGLRenderer : public StatefulBaseRenderer {
 public:
     ANDROID_API OpenGLRenderer();
     virtual ~OpenGLRenderer();
 
-    /**
-     * Sets the name of this renderer. The name is optional and
-     * empty by default. If the pointer is null the name is set
-     * to the empty string.
-     */
-    ANDROID_API void setName(const char* name);
-
-    /**
-     * Returns the name of this renderer as UTF8 string.
-     * The returned pointer is never null.
-     */
-    ANDROID_API const char* getName() const;
-
-    /**
-     * Read externally defined properties to control the behavior
-     * of the renderer.
-     */
     ANDROID_API void initProperties();
 
-    /**
-     * Indicates whether this renderer executes drawing commands immediately.
-     * If this method returns true, the drawing commands will be executed
-     * later.
-     */
-    virtual bool isDeferred();
-
-    /**
-     * Sets the dimension of the underlying drawing surface. This method must
-     * be called at least once every time the drawing surface changes size.
-     *
-     * @param width The width in pixels of the underlysing surface
-     * @param height The height in pixels of the underlysing surface
-     */
     virtual void setViewport(int width, int height);
-
-    /**
-     * Prepares the renderer to draw a frame. This method must be invoked
-     * at the beginning of each frame. When this method is invoked, the
-     * entire drawing surface is assumed to be redrawn.
-     *
-     * @param opaque If true, the target surface is considered opaque
-     *               and will not be cleared. If false, the target surface
-     *               will be cleared
-     */
-    ANDROID_API status_t prepare(bool opaque);
-
-    /**
-     * Prepares the renderer to draw a frame. This method must be invoked
-     * at the beginning of each frame. Only the specified rectangle of the
-     * frame is assumed to be dirty. A clip will automatically be set to
-     * the specified rectangle.
-     *
-     * @param left The left coordinate of the dirty rectangle
-     * @param top The top coordinate of the dirty rectangle
-     * @param right The right coordinate of the dirty rectangle
-     * @param bottom The bottom coordinate of the dirty rectangle
-     * @param opaque If true, the target surface is considered opaque
-     *               and will not be cleared. If false, the target surface
-     *               will be cleared in the specified dirty rectangle
-     */
     virtual status_t prepareDirty(float left, float top, float right, float bottom, bool opaque);
-
-    /**
-     * Indicates the end of a frame. This method must be invoked whenever
-     * the caller is done rendering a frame.
-     */
     virtual void finish();
-
-    /**
-     * This method must be invoked before handing control over to a draw functor.
-     * See callDrawGLFunction() for instance.
-     *
-     * This command must not be recorded inside display lists.
-     */
     virtual void interrupt();
-
-    /**
-     * This method must be invoked after getting control back from a draw functor.
-     *
-     * This command must not be recorded inside display lists.
-     */
     virtual void resume();
 
     ANDROID_API void setCountOverdrawEnabled(bool enabled) {
@@ -217,114 +160,68 @@
     ANDROID_API void clearLayerUpdates();
     ANDROID_API void flushLayerUpdates();
 
-    ANDROID_API int getSaveCount() const;
-    virtual int save(int flags);
-    virtual void restore();
-    virtual void restoreToCount(int saveCount);
+    ANDROID_API virtual int saveLayer(float left, float top, float right, float bottom,
+            const SkPaint* paint, int flags) {
+        return saveLayer(left, top, right, bottom, paint, flags, NULL);
+    }
 
-    ANDROID_API int saveLayer(float left, float top, float right, float bottom,
-            SkPaint* paint, int flags) {
-        SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode;
-        if (paint) mode = getXfermode(paint->getXfermode());
-        return saveLayer(left, top, right, bottom, paint ? paint->getAlpha() : 255, mode, flags);
-    }
-    ANDROID_API int saveLayerAlpha(float left, float top, float right, float bottom,
-            int alpha, int flags) {
-        return saveLayer(left, top, right, bottom, alpha, SkXfermode::kSrcOver_Mode, flags);
-    }
-    virtual int saveLayer(float left, float top, float right, float bottom,
-            int alpha, SkXfermode::Mode mode, int flags);
+    // Specialized saveLayer implementation, which will pass the convexMask to an FBO layer, if
+    // created, which will in turn clip to that mask when drawn back/restored.
+    int saveLayer(float left, float top, float right, float bottom,
+            const SkPaint* paint, int flags, const SkPath* convexMask);
 
     int saveLayerDeferred(float left, float top, float right, float bottom,
-            int alpha, SkXfermode::Mode mode, int flags);
+            const SkPaint* paint, int flags);
 
-    virtual void translate(float dx, float dy);
-    virtual void rotate(float degrees);
-    virtual void scale(float sx, float sy);
-    virtual void skew(float sx, float sy);
-
-    bool hasRectToRectTransform();
-    ANDROID_API void getMatrix(SkMatrix* matrix);
-    virtual void setMatrix(SkMatrix* matrix);
-    virtual void concatMatrix(SkMatrix* matrix);
-
-    ANDROID_API const Rect& getClipBounds();
-
-    /**
-     * Performs a quick reject but adjust the bounds to account for stroke width if necessary,
-     * and handling snapOut for AA geometry.
-     */
-    bool quickRejectPreStroke(float left, float top, float right, float bottom, SkPaint* paint);
-
-    /**
-     * Returns false and sets scissor based upon bounds if drawing won't be clipped out
-     */
-    bool quickReject(float left, float top, float right, float bottom, bool snapOut = false);
-    bool quickReject(const Rect& bounds) {
-        return quickReject(bounds.left, bounds.top, bounds.right, bounds.bottom);
-    }
-
-    /**
-     * Same as quickReject, without the scissor, instead returning clipRequired through pointer.
-     * clipRequired will be only set if not rejected
-     */
-    ANDROID_API bool quickRejectNoScissor(float left, float top, float right, float bottom,
-            bool snapOut = false, bool* clipRequired = NULL);
-    bool quickRejectNoScissor(const Rect& bounds, bool* clipRequired = NULL) {
-        return quickRejectNoScissor(bounds.left, bounds.top, bounds.right, bounds.bottom,
-                clipRequired);
-    }
-
-    virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op);
-    virtual bool clipPath(SkPath* path, SkRegion::Op op);
-    virtual bool clipRegion(SkRegion* region, SkRegion::Op op);
-    virtual Rect* getClipRect();
-
-    virtual status_t drawDisplayList(DisplayList* displayList, Rect& dirty, int32_t replayFlags);
-    virtual void outputDisplayList(DisplayList* displayList);
+    virtual status_t drawDisplayList(RenderNode* displayList, Rect& dirty, int32_t replayFlags = 1);
     virtual status_t drawLayer(Layer* layer, float x, float y);
-    virtual status_t drawBitmap(SkBitmap* bitmap, float left, float top, SkPaint* paint);
-    status_t drawBitmaps(SkBitmap* bitmap, AssetAtlas::Entry* entry, int bitmapCount,
-            TextureVertex* vertices, bool pureTranslate, const Rect& bounds, SkPaint* paint);
-    virtual status_t drawBitmap(SkBitmap* bitmap, SkMatrix* matrix, SkPaint* paint);
-    virtual status_t drawBitmap(SkBitmap* bitmap, float srcLeft, float srcTop,
+    virtual status_t drawBitmap(const SkBitmap* bitmap, float left, float top,
+            const SkPaint* paint);
+    status_t drawBitmaps(const SkBitmap* bitmap, AssetAtlas::Entry* entry, int bitmapCount,
+            TextureVertex* vertices, bool pureTranslate, const Rect& bounds, const SkPaint* paint);
+    virtual status_t drawBitmap(const SkBitmap* bitmap, const SkMatrix* matrix,
+            const SkPaint* paint);
+    virtual status_t drawBitmap(const SkBitmap* bitmap, float srcLeft, float srcTop,
             float srcRight, float srcBottom, float dstLeft, float dstTop,
-            float dstRight, float dstBottom, SkPaint* paint);
-    virtual status_t drawBitmapData(SkBitmap* bitmap, float left, float top, SkPaint* paint);
-    virtual status_t drawBitmapMesh(SkBitmap* bitmap, int meshWidth, int meshHeight,
-            float* vertices, int* colors, SkPaint* paint);
-    status_t drawPatches(SkBitmap* bitmap, AssetAtlas::Entry* entry,
-            TextureVertex* vertices, uint32_t indexCount, SkPaint* paint);
-    virtual status_t drawPatch(SkBitmap* bitmap, Res_png_9patch* patch,
-            float left, float top, float right, float bottom, SkPaint* paint);
-    status_t drawPatch(SkBitmap* bitmap, const Patch* mesh, AssetAtlas::Entry* entry,
-            float left, float top, float right, float bottom, SkPaint* paint);
+            float dstRight, float dstBottom, const SkPaint* paint);
+    virtual status_t drawBitmapData(const SkBitmap* bitmap, float left, float top,
+            const SkPaint* paint);
+    virtual status_t drawBitmapMesh(const SkBitmap* bitmap, int meshWidth, int meshHeight,
+            const float* vertices, const int* colors, const SkPaint* paint);
+    status_t drawPatches(const SkBitmap* bitmap, AssetAtlas::Entry* entry,
+            TextureVertex* vertices, uint32_t indexCount, const SkPaint* paint);
+    virtual status_t drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch,
+            float left, float top, float right, float bottom, const SkPaint* paint);
+    status_t drawPatch(const SkBitmap* bitmap, const Patch* mesh, AssetAtlas::Entry* entry,
+            float left, float top, float right, float bottom, const SkPaint* paint);
     virtual status_t drawColor(int color, SkXfermode::Mode mode);
-    virtual status_t drawRect(float left, float top, float right, float bottom, SkPaint* paint);
+    virtual status_t drawRect(float left, float top, float right, float bottom,
+            const SkPaint* paint);
     virtual status_t drawRoundRect(float left, float top, float right, float bottom,
-            float rx, float ry, SkPaint* paint);
-    virtual status_t drawCircle(float x, float y, float radius, SkPaint* paint);
-    virtual status_t drawOval(float left, float top, float right, float bottom, SkPaint* paint);
+            float rx, float ry, const SkPaint* paint);
+    virtual status_t drawCircle(float x, float y, float radius, const SkPaint* paint);
+    virtual status_t drawOval(float left, float top, float right, float bottom,
+            const SkPaint* paint);
     virtual status_t drawArc(float left, float top, float right, float bottom,
-            float startAngle, float sweepAngle, bool useCenter, SkPaint* paint);
-    virtual status_t drawPath(SkPath* path, SkPaint* paint);
-    virtual status_t drawLines(float* points, int count, SkPaint* paint);
-    virtual status_t drawPoints(float* points, int count, SkPaint* paint);
-    virtual status_t drawTextOnPath(const char* text, int bytesCount, int count, SkPath* path,
-            float hOffset, float vOffset, SkPaint* paint);
+            float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint);
+    virtual status_t drawPath(const SkPath* path, const SkPaint* paint);
+    virtual status_t drawLines(const float* points, int count, const SkPaint* paint);
+    virtual status_t drawPoints(const float* points, int count, const SkPaint* paint);
+    virtual status_t drawTextOnPath(const char* text, int bytesCount, int count, const SkPath* path,
+            float hOffset, float vOffset, const SkPaint* paint);
     virtual status_t drawPosText(const char* text, int bytesCount, int count,
-            const float* positions, SkPaint* paint);
+            const float* positions, const SkPaint* paint);
     virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
-            const float* positions, SkPaint* paint, float totalAdvance, const Rect& bounds,
+            const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds,
             DrawOpMode drawOpMode = kDrawOpMode_Immediate);
-    virtual status_t drawRects(const float* rects, int count, SkPaint* paint);
+    virtual status_t drawRects(const float* rects, int count, const SkPaint* paint);
+
+    status_t drawShadow(const mat4& casterTransformXY, const mat4& casterTransformZ,
+            float casterAlpha, bool casterUnclipped, const SkPath* casterPerimeter);
 
     virtual void resetShader();
     virtual void setupShader(SkiaShader* shader);
 
-    virtual void resetColorFilter();
-    virtual void setupColorFilter(SkiaColorFilter* filter);
-
     virtual void resetShadow();
     virtual void setupShadow(float radius, float dx, float dy, int color);
 
@@ -334,7 +231,7 @@
     // If this value is set to < 1.0, it overrides alpha set on layer (see drawBitmap, drawLayer)
     void setOverrideLayerAlpha(float alpha) { mDrawModifiers.mOverrideLayerAlpha = alpha; }
 
-    SkPaint* filterPaint(SkPaint* paint);
+    const SkPaint* filterPaint(const SkPaint* paint);
 
     /**
      * Store the current display state (most importantly, the current clip and transform), and
@@ -350,7 +247,7 @@
     void setDrawModifiers(const DrawModifiers& drawModifiers) { mDrawModifiers = drawModifiers; }
 
     ANDROID_API bool isCurrentTransformSimple() {
-        return mSnapshot->transform->isSimple();
+        return currentTransform()->isSimple();
     }
 
     Caches& getCaches() {
@@ -362,8 +259,8 @@
         return mSnapshot->clipRegion->isEmpty();
     }
 
-    int getViewportWidth() { return getSnapshot()->viewport.getWidth(); }
-    int getViewportHeight() { return getSnapshot()->viewport.getHeight(); }
+    int getViewportWidth() { return currentSnapshot()->viewport.getWidth(); }
+    int getViewportHeight() { return currentSnapshot()->viewport.getHeight(); }
 
     /**
      * Scales the alpha on the current snapshot. This alpha value will be modulated
@@ -400,12 +297,12 @@
      * @param alpha Where to store the resulting alpha
      * @param mode Where to store the resulting xfermode
      */
-    static inline void getAlphaAndModeDirect(SkPaint* paint, int* alpha, SkXfermode::Mode* mode) {
+    static inline void getAlphaAndModeDirect(const SkPaint* paint, int* alpha, SkXfermode::Mode* mode) {
         *mode = getXfermodeDirect(paint);
         *alpha = getAlphaDirect(paint);
     }
 
-    static inline SkXfermode::Mode getXfermodeDirect(SkPaint* paint) {
+    static inline SkXfermode::Mode getXfermodeDirect(const SkPaint* paint) {
         if (!paint) return SkXfermode::kSrcOver_Mode;
         return getXfermode(paint->getXfermode());
     }
@@ -477,6 +374,13 @@
      */
     void attachStencilBufferToLayer(Layer* layer);
 
+    bool quickRejectSetupScissor(float left, float top, float right, float bottom,
+            const SkPaint* paint = NULL);
+    bool quickRejectSetupScissor(const Rect& bounds, const SkPaint* paint = NULL) {
+        return quickRejectSetupScissor(bounds.left, bounds.top,
+                bounds.right, bounds.bottom, paint);
+    }
+
     /**
      * Compose the layer defined in the current snapshot with the layer
      * defined by the previous snapshot.
@@ -486,7 +390,7 @@
      * @param curent The current snapshot containing the layer to compose
      * @param previous The previous snapshot to compose the current layer with
      */
-    virtual void composeLayer(sp<Snapshot> current, sp<Snapshot> previous);
+    virtual void composeLayer(const Snapshot& current, const Snapshot& previous);
 
     /**
      * Marks the specified region as dirty at the specified bounds.
@@ -494,13 +398,6 @@
     void dirtyLayerUnchecked(Rect& bounds, Region* region);
 
     /**
-     * Returns the current snapshot.
-     */
-    sp<Snapshot> getSnapshot() const {
-        return mSnapshot;
-    }
-
-    /**
      * Returns the region of the current layer.
      */
     virtual Region* getRegion() const {
@@ -517,7 +414,7 @@
     /**
      * Returns the name of the FBO this renderer is rendering into.
      */
-    virtual GLint getTargetFbo() const {
+    virtual GLuint getTargetFbo() const {
         return 0;
     }
 
@@ -538,25 +435,21 @@
      * @param alpha Where to store the resulting alpha
      * @param mode Where to store the resulting xfermode
      */
-    inline void getAlphaAndMode(SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const;
+    inline void getAlphaAndMode(const SkPaint* paint, int* alpha, SkXfermode::Mode* mode) const;
 
     /**
      * Gets the alpha from a layer, accounting for snapshot alpha and overrideLayerAlpha
      *
      * @param layer The layer from which the alpha is extracted
      */
-    inline float getLayerAlpha(Layer* layer) const;
+    inline float getLayerAlpha(const Layer* layer) const;
 
     /**
-     * Safely retrieves the mode from the specified xfermode. If the specified
-     * xfermode is null, the mode is assumed to be SkXfermode::kSrcOver_Mode.
+     * Safely retrieves the ColorFilter from the given Paint. If the paint is
+     * null then null is returned.
      */
-    static inline SkXfermode::Mode getXfermode(SkXfermode* mode) {
-        SkXfermode::Mode resultMode;
-        if (!SkXfermode::AsMode(mode, &resultMode)) {
-            resultMode = SkXfermode::kSrcOver_Mode;
-        }
-        return resultMode;
+    static inline SkColorFilter* getColorFilter(const SkPaint* paint) {
+        return paint ? paint->getColorFilter() : NULL;
     }
 
     /**
@@ -582,12 +475,11 @@
 
     /**
      * Tells the GPU what part of the screen is about to be redrawn.
-     * This method will use the clip rect that we started drawing the
-     * frame with.
+     * This method will use the current layer space clip rect.
      * This method needs to be invoked every time getTargetFbo() is
      * bound again.
      */
-    void startTiling(const sp<Snapshot>& snapshot, bool opaque = false);
+    void startTilingCurrentClip(bool opaque = false);
 
     /**
      * Tells the GPU what part of the screen is about to be redrawn.
@@ -602,23 +494,7 @@
      */
     void endTiling();
 
-    /**
-     * Saves the current state of the renderer as a new snapshot.
-     * The new snapshot is saved in mSnapshot and the previous snapshot
-     * is linked from mSnapshot->previous.
-     *
-     * @param flags The save flags; see SkCanvas for more information
-     *
-     * @return The new save count. This value can be passed to #restoreToCount()
-     */
-    int saveSnapshot(int flags);
-
-    /**
-     * Restores the current snapshot; mSnapshot becomes mSnapshot->previous.
-     *
-     * @return True if the clip was modified.
-     */
-    bool restoreSnapshot();
+    void onSnapshotRestored(const Snapshot& removed, const Snapshot& restored);
 
     /**
      * Sets the clipping rectangle using glScissor. The clip is defined by
@@ -654,12 +530,12 @@
      * @param alpha The translucency of the layer
      * @param mode The blending mode of the layer
      * @param flags The layer save flags
-     * @param previousFbo The name of the current framebuffer
+     * @param mask A mask to use when drawing the layer back, may be empty
      *
      * @return True if the layer was successfully created, false otherwise
      */
     bool createLayer(float left, float top, float right, float bottom,
-            int alpha, SkXfermode::Mode mode, int flags, GLuint previousFbo);
+            const SkPaint* paint, int flags, const SkPath* convexMask);
 
     /**
      * Creates a new layer stored in the specified snapshot as an FBO.
@@ -667,9 +543,8 @@
      * @param layer The layer to store as an FBO
      * @param snapshot The snapshot associated with the new layer
      * @param bounds The bounds of the layer
-     * @param previousFbo The name of the current framebuffer
      */
-    bool createFboLayer(Layer* layer, Rect& bounds, Rect& clip, GLuint previousFbo);
+    bool createFboLayer(Layer* layer, Rect& bounds, Rect& clip);
 
     /**
      * Compose the specified layer as a region.
@@ -716,12 +591,11 @@
      * @param top The top coordinate of the rectangle
      * @param right The right coordinate of the rectangle
      * @param bottom The bottom coordinate of the rectangle
-     * @param color The rectangle's ARGB color, defined as a packed 32 bits word
-     * @param mode The Skia xfermode to use
+     * @param paint The paint containing the color, blending mode, etc.
      * @param ignoreTransform True if the current transform should be ignored
      */
     void drawColorRect(float left, float top, float right, float bottom,
-            int color, SkXfermode::Mode mode, bool ignoreTransform = false);
+            const SkPaint* paint, bool ignoreTransform = false);
 
     /**
      * Draws a series of colored rectangles with the specified color. The specified
@@ -730,15 +604,13 @@
      *
      * @param rects A list of rectangles, 4 floats (left, top, right, bottom)
      *              per rectangle
-     * @param color The rectangles' ARGB color, defined as a packed 32 bits word
-     * @param mode The Skia xfermode to use
+     * @param paint The paint containing the color, blending mode, etc.
      * @param ignoreTransform True if the current transform should be ignored
      * @param dirty True if calling this method should dirty the current layer
      * @param clip True if the rects should be clipped, false otherwise
      */
-    status_t drawColorRects(const float* rects, int count, int color,
-            SkXfermode::Mode mode, bool ignoreTransform = false,
-            bool dirty = true, bool clip = true);
+    status_t drawColorRects(const float* rects, int count, const SkPaint* paint,
+            bool ignoreTransform = false, bool dirty = true, bool clip = true);
 
     /**
      * Draws the shape represented by the specified path texture.
@@ -751,7 +623,7 @@
      * @param texture The texture reprsenting the shape
      * @param paint The paint to draw the shape with
      */
-    status_t drawShape(float left, float top, const PathTexture* texture, SkPaint* paint);
+    status_t drawShape(float left, float top, const PathTexture* texture, const SkPaint* paint);
 
     /**
      * Draws the specified texture as an alpha bitmap. Alpha bitmaps obey
@@ -762,7 +634,7 @@
      * @param top The y coordinate of the bitmap
      * @param paint The paint to render with
      */
-    void drawAlphaBitmap(Texture* texture, float left, float top, SkPaint* paint);
+    void drawAlphaBitmap(Texture* texture, float left, float top, const SkPaint* paint);
 
     /**
      * Renders a strip of polygons with the specified paint, used for tessellated geometry.
@@ -771,8 +643,8 @@
      * @param paint The paint to render with
      * @param useOffset Offset the vertexBuffer (used in drawing non-AA lines)
      */
-    status_t drawVertexBuffer(const VertexBuffer& vertexBuffer, SkPaint* paint,
-            bool useOffset = false);
+    status_t drawVertexBuffer(VertexBufferMode mode, const VertexBuffer& vertexBuffer,
+            const SkPaint* paint, bool useOffset = false);
 
     /**
      * Renders the convex hull defined by the specified path as a strip of polygons.
@@ -780,23 +652,7 @@
      * @param path The hull of the path to draw
      * @param paint The paint to render with
      */
-    status_t drawConvexPath(const SkPath& path, SkPaint* paint);
-
-    /**
-     * Draws a textured rectangle with the specified texture. The specified coordinates
-     * are transformed by the current snapshot's transform matrix.
-     *
-     * @param left The left coordinate of the rectangle
-     * @param top The top coordinate of the rectangle
-     * @param right The right coordinate of the rectangle
-     * @param bottom The bottom coordinate of the rectangle
-     * @param texture The texture name to map onto the rectangle
-     * @param alpha An additional translucency parameter, between 0.0f and 1.0f
-     * @param mode The blending mode
-     * @param blend True if the texture contains an alpha channel
-     */
-    void drawTextureRect(float left, float top, float right, float bottom, GLuint texture,
-            float alpha, SkXfermode::Mode mode, bool blend);
+    status_t drawConvexPath(const SkPath& path, const SkPaint* paint);
 
     /**
      * Draws a textured rectangle with the specified texture. The specified coordinates
@@ -810,7 +666,7 @@
      * @param paint The paint containing the alpha, blending mode, etc.
      */
     void drawTextureRect(float left, float top, float right, float bottom,
-            Texture* texture, SkPaint* paint);
+            Texture* texture, const SkPaint* paint);
 
     /**
      * Draws a textured mesh with the specified texture. If the indices are omitted,
@@ -822,8 +678,7 @@
      * @param right The right coordinate of the rectangle
      * @param bottom The bottom coordinate of the rectangle
      * @param texture The texture name to map onto the rectangle
-     * @param alpha An additional translucency parameter, between 0.0f and 1.0f
-     * @param mode The blending mode
+     * @param paint The paint containing the alpha, blending mode, colorFilter, etc.
      * @param blend True if the texture contains an alpha channel
      * @param vertices The vertices that define the mesh
      * @param texCoords The texture coordinates of each vertex
@@ -831,32 +686,33 @@
      * @param swapSrcDst Whether or not the src and dst blending operations should be swapped
      * @param ignoreTransform True if the current transform should be ignored
      * @param vbo The VBO used to draw the mesh
-     * @param ignoreScale True if the model view matrix should not be scaled
+     * @param modelViewMode Defines whether the model view matrix should be scaled
      * @param dirty True if calling this method should dirty the current layer
      */
     void drawTextureMesh(float left, float top, float right, float bottom, GLuint texture,
-            float alpha, SkXfermode::Mode mode, bool blend,
+            const SkPaint* paint, bool blend,
             GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
             bool swapSrcDst = false, bool ignoreTransform = false, GLuint vbo = 0,
-            bool ignoreScale = false, bool dirty = true);
+            ModelViewMode modelViewMode = kModelViewMode_TranslateAndScale, bool dirty = true);
 
     void drawIndexedTextureMesh(float left, float top, float right, float bottom, GLuint texture,
-            float alpha, SkXfermode::Mode mode, bool blend,
+            const SkPaint* paint, bool blend,
             GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
             bool swapSrcDst = false, bool ignoreTransform = false, GLuint vbo = 0,
-            bool ignoreScale = false, bool dirty = true);
+            ModelViewMode modelViewMode = kModelViewMode_TranslateAndScale, bool dirty = true);
 
     void drawAlpha8TextureMesh(float left, float top, float right, float bottom,
-            GLuint texture, bool hasColor, int color, int alpha, SkXfermode::Mode mode,
+            GLuint texture, const SkPaint* paint,
             GLvoid* vertices, GLvoid* texCoords, GLenum drawMode, GLsizei elementsCount,
-            bool ignoreTransform, bool ignoreScale = false, bool dirty = true);
+            bool ignoreTransform, ModelViewMode modelViewMode = kModelViewMode_TranslateAndScale,
+            bool dirty = true);
 
     /**
      * Draws the specified list of vertices as quads using indexed GL_TRIANGLES.
      * If the number of vertices to draw exceeds the number of indices we have
      * pre-allocated, this method will generate several glDrawElements() calls.
      */
-    void drawIndexedQuads(Vertex* mesh, GLsizei quadsCount);
+    void issueIndexedQuadDraw(Vertex* mesh, GLsizei quadsCount);
 
     /**
      * Draws text underline and strike-through if needed.
@@ -868,8 +724,7 @@
      * @param y The y coordinate where the text will be drawn
      * @param paint The paint to draw the text with
      */
-    void drawTextDecorations(const char* text, int bytesCount, float totalAdvance,
-            float x, float y, SkPaint* paint);
+    void drawTextDecorations(float totalAdvance, float x, float y, const SkPaint* paint);
 
    /**
      * Draws shadow layer on text (with optional positions).
@@ -881,12 +736,11 @@
      * @param positions The x, y positions of individual glyphs (or NULL)
      * @param fontRenderer The font renderer object
      * @param alpha The alpha value for drawing the shadow
-     * @param mode The xfermode for drawing the shadow
      * @param x The x coordinate where the shadow will be drawn
      * @param y The y coordinate where the shadow will be drawn
      */
-    void drawTextShadow(SkPaint* paint, const char* text, int bytesCount, int count,
-            const float* positions, FontRenderer& fontRenderer, int alpha, SkXfermode::Mode mode,
+    void drawTextShadow(const SkPaint* paint, const char* text, int bytesCount, int count,
+            const float* positions, FontRenderer& fontRenderer, int alpha,
             float x, float y);
 
     /**
@@ -898,7 +752,7 @@
      * @param y The y coordinate where the texture will be drawn
      * @param paint The paint to draw the texture with
      */
-     void drawPathTexture(const PathTexture* texture, float x, float y, SkPaint* paint);
+     void drawPathTexture(const PathTexture* texture, float x, float y, const SkPaint* paint);
 
     /**
      * Resets the texture coordinates stored in mMeshVertices. Setting the values
@@ -971,32 +825,42 @@
     void setupDrawAlpha8Color(int color, int alpha);
     void setupDrawTextGamma(const SkPaint* paint);
     void setupDrawShader();
-    void setupDrawColorFilter();
-    void setupDrawBlending(SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode,
-            bool swapSrcDst = false);
-    void setupDrawBlending(bool blend = true, SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode,
-            bool swapSrcDst = false);
+    void setupDrawColorFilter(const SkColorFilter* filter);
+    void setupDrawBlending(const Layer* layer, bool swapSrcDst = false);
+    void setupDrawBlending(const SkPaint* paint, bool blend = true, bool swapSrcDst = false);
     void setupDrawProgram();
     void setupDrawDirtyRegionsDisabled();
-    void setupDrawModelViewIdentity(bool offset = false);
-    void setupDrawModelView(float left, float top, float right, float bottom,
-            bool ignoreTransform = false, bool ignoreModelView = false);
-    void setupDrawModelViewTranslate(float left, float top, float right, float bottom,
-            bool ignoreTransform = false);
+
+    /**
+     * Setup the current program matrices based upon the nature of the geometry.
+     *
+     * @param mode If kModelViewMode_Translate, the geometry must be translated by the left and top
+     * parameters. If kModelViewMode_TranslateAndScale, the geometry that exists in the (0,0, 1,1)
+     * space must be scaled up and translated to fill the quad provided in (l,t,r,b). These
+     * transformations are stored in the modelView matrix and uploaded to the shader.
+     *
+     * @param offset Set to true if the the matrix should be fudged (translated) slightly to disambiguate
+     * geometry pixel positioning. See Vertex::GeometryFudgeFactor().
+     *
+     * @param ignoreTransform Set to true if l,t,r,b coordinates already in layer space,
+     * currentTransform() will be ignored. (e.g. when drawing clip in layer coordinates to stencil,
+     * or when simple translation has been extracted)
+     */
+    void setupDrawModelView(ModelViewMode mode, bool offset,
+            float left, float top, float right, float bottom, bool ignoreTransform = false);
     void setupDrawColorUniforms();
     void setupDrawPureColorUniforms();
-    void setupDrawShaderIdentityUniforms();
     void setupDrawShaderUniforms(bool ignoreTransform = false);
-    void setupDrawColorFilterUniforms();
+    void setupDrawColorFilterUniforms(const SkColorFilter* paint);
     void setupDrawSimpleMesh();
     void setupDrawTexture(GLuint texture);
     void setupDrawExternalTexture(GLuint texture);
     void setupDrawTextureTransform();
     void setupDrawTextureTransformUniforms(mat4& transform);
     void setupDrawTextGammaUniforms();
-    void setupDrawMesh(GLvoid* vertices, GLvoid* texCoords = NULL, GLuint vbo = 0);
-    void setupDrawMesh(GLvoid* vertices, GLvoid* texCoords, GLvoid* colors);
-    void setupDrawMeshIndices(GLvoid* vertices, GLvoid* texCoords, GLuint vbo = 0);
+    void setupDrawMesh(const GLvoid* vertices, const GLvoid* texCoords = NULL, GLuint vbo = 0);
+    void setupDrawMesh(const GLvoid* vertices, const GLvoid* texCoords, const GLvoid* colors);
+    void setupDrawMeshIndices(const GLvoid* vertices, const GLvoid* texCoords, GLuint vbo = 0);
     void setupDrawIndexedVertices(GLvoid* vertices);
     void accountForClear(SkXfermode::Mode mode);
 
@@ -1004,18 +868,19 @@
     void updateLayers();
     void flushLayers();
 
+#if DEBUG_LAYERS_AS_REGIONS
     /**
      * Renders the specified region as a series of rectangles. This method
      * is used for debugging only.
      */
-    void drawRegionRects(const Region& region);
+    void drawRegionRectsDebug(const Region& region);
+#endif
 
     /**
      * Renders the specified region as a series of rectangles. The region
      * must be in screen-space coordinates.
      */
-    void drawRegionRects(const SkRegion& region, int color, SkXfermode::Mode mode,
-            bool dirty = false);
+    void drawRegionRects(const SkRegion& region, const SkPaint& paint, bool dirty = false);
 
     /**
      * Draws the current clip region if any. Only when DEBUG_CLIP_REGIONS
@@ -1034,10 +899,6 @@
         mDirtyClip = true;
     }
 
-    inline mat4& currentTransform() const {
-        return *mSnapshot->transform;
-    }
-
     inline const UvMapper& getMapper(const Texture* texture) {
         return texture && texture->uvMapper ? *texture->uvMapper : mUvMapper;
     }
@@ -1047,23 +908,27 @@
      * come from the texture cache or an atlas. If this method returns
      * NULL, the texture could not be found and/or allocated.
      */
-    Texture* getTexture(SkBitmap* bitmap);
+    Texture* getTexture(const SkBitmap* bitmap);
 
-    // Dimensions of the drawing surface
-    int mWidth, mHeight;
+    // Matrix used for view/projection in shaders
+    mat4 mViewProjMatrix;
 
-    // Matrix used for ortho projection in shaders
-    mat4 mOrthoMatrix;
-
-    // Model-view matrix used to position/size objects
+    /**
+     * Model-view matrix used to position/size objects
+     *
+     * Stores operation-local modifications to the draw matrix that aren't incorporated into the
+     * currentTransform().
+     *
+     * If generated with kModelViewMode_Translate, the mModelView will reflect an x/y offset,
+     * e.g. the offset in drawLayer(). If generated with kModelViewMode_TranslateAndScale,
+     * mModelView will reflect a translation and scale, e.g. the translation and scale required to
+     * make VBO 0 (a rect of (0,0,1,1)) scaled to match the x,y offset, and width/height of a
+     * bitmap.
+     *
+     * Used as input to SkiaShader transformation.
+     */
     mat4 mModelView;
 
-    // Number of saved states
-    int mSaveCount;
-    // Base state
-    sp<Snapshot> mFirstSnapshot;
-    // Current state
-    sp<Snapshot> mSnapshot;
     // State used to define the clipping region
     Rect mTilingClip;
     // Is the target render surface opaque
@@ -1092,9 +957,6 @@
     // List of layers to update at the beginning of a frame
     Vector<Layer*> mLayerUpdates;
 
-    // Indicates whether the clip must be restored
-    bool mDirtyClip;
-
     // The following fields are used to setup drawing
     // Used to describe the shaders to generate
     ProgramDescription mDescription;
@@ -1122,9 +984,6 @@
     bool mCountOverdraw;
     float mOverdraw;
 
-    // Optional name of the renderer
-    String8 mName;
-
     friend class DisplayListRenderer;
     friend class Layer;
     friend class TextSetupFunctor;
diff --git a/libs/hwui/Outline.h b/libs/hwui/Outline.h
new file mode 100644
index 0000000..530be30
--- /dev/null
+++ b/libs/hwui/Outline.h
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef OUTLINE_H
+#define OUTLINE_H
+
+#include <SkPath.h>
+
+#include "Rect.h"
+
+namespace android {
+namespace uirenderer {
+
+class Outline {
+public:
+    Outline()
+            : mShouldClip(false)
+            , mType(kOutlineType_None)
+            , mRadius(0) {}
+
+    void setRoundRect(int left, int top, int right, int bottom, int radius) {
+        mType = kOutlineType_RoundRect;
+        mBounds.set(left, top, right, bottom);
+        mRadius = radius;
+        mPath.reset();
+        mPath.addRoundRect(SkRect::MakeLTRB(left, top, right, bottom),
+                radius, radius);
+    }
+
+    void setConvexPath(const SkPath* outline) {
+        if (!outline) {
+            setEmpty();
+            return;
+        }
+        mType = kOutlineType_ConvexPath;
+        mPath = *outline;
+        mBounds.set(outline->getBounds());
+    }
+
+    void setEmpty() {
+        mType = kOutlineType_None;
+        mPath.reset();
+    }
+
+    void setShouldClip(bool clip) {
+        mShouldClip = clip;
+    }
+
+    bool willClip() const {
+        // only round rect outlines can be used for clipping
+        return mShouldClip && (mType == kOutlineType_RoundRect);
+    }
+
+    const SkPath* getPath() const {
+        if (mType == kOutlineType_None) return NULL;
+
+        return &mPath;
+    }
+
+private:
+    enum OutlineType {
+        kOutlineType_None = 0,
+        kOutlineType_ConvexPath = 1,
+        kOutlineType_RoundRect = 2
+    };
+
+    bool mShouldClip;
+    OutlineType mType;
+    Rect mBounds;
+    float mRadius;
+    SkPath mPath;
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* OUTLINE_H */
diff --git a/libs/hwui/Patch.h b/libs/hwui/Patch.h
index b5e8838..1ba045d 100644
--- a/libs/hwui/Patch.h
+++ b/libs/hwui/Patch.h
@@ -36,7 +36,8 @@
 // 9-patch structures
 ///////////////////////////////////////////////////////////////////////////////
 
-struct Patch {
+class Patch {
+public:
     Patch();
     ~Patch();
 
diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp
index cf8adf8..5a49f38 100644
--- a/libs/hwui/PathCache.cpp
+++ b/libs/hwui/PathCache.cpp
@@ -51,7 +51,7 @@
     memset(&shape, 0, sizeof(Shape));
 }
 
-PathDescription::PathDescription(ShapeType type, SkPaint* paint):
+PathDescription::PathDescription(ShapeType type, const SkPaint* paint):
         type(type),
         join(paint->getStrokeJoin()),
         cap(paint->getStrokeCap()),
@@ -82,7 +82,7 @@
 // Utilities
 ///////////////////////////////////////////////////////////////////////////////
 
-bool PathCache::canDrawAsConvexPath(SkPath* path, SkPaint* paint) {
+bool PathCache::canDrawAsConvexPath(SkPath* path, const SkPaint* paint) {
     // NOTE: This should only be used after PathTessellator handles joins properly
     return paint->getPathEffect() == NULL && path->getConvexity() == SkPath::kConvex_Convexity;
 }
@@ -415,7 +415,7 @@
  * in the cache. The source path is also used to reclaim garbage when a
  * Dalvik Path object is collected.
  */
-static SkPath* getSourcePath(SkPath* path) {
+static const SkPath* getSourcePath(const SkPath* path) {
     const SkPath* sourcePath = path->getSourcePath();
     if (sourcePath && sourcePath->getGenerationID() == path->getGenerationID()) {
         return const_cast<SkPath*>(sourcePath);
@@ -423,7 +423,7 @@
     return path;
 }
 
-PathTexture* PathCache::get(SkPath* path, SkPaint* paint) {
+PathTexture* PathCache::get(const SkPath* path, const SkPaint* paint) {
     path = getSourcePath(path);
 
     PathDescription entry(kShapePath, paint);
@@ -461,7 +461,7 @@
     return texture;
 }
 
-void PathCache::precache(SkPath* path, SkPaint* paint) {
+void PathCache::precache(const SkPath* path, const SkPaint* paint) {
     if (!Caches::getInstance().tasks.canRunTasks()) {
         return;
     }
@@ -509,7 +509,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 PathTexture* PathCache::getRoundRect(float width, float height,
-        float rx, float ry, SkPaint* paint) {
+        float rx, float ry, const SkPaint* paint) {
     PathDescription entry(kShapeRoundRect, paint);
     entry.shape.roundRect.mWidth = width;
     entry.shape.roundRect.mHeight = height;
@@ -534,7 +534,7 @@
 // Circles
 ///////////////////////////////////////////////////////////////////////////////
 
-PathTexture* PathCache::getCircle(float radius, SkPaint* paint) {
+PathTexture* PathCache::getCircle(float radius, const SkPaint* paint) {
     PathDescription entry(kShapeCircle, paint);
     entry.shape.circle.mRadius = radius;
 
@@ -554,7 +554,7 @@
 // Ovals
 ///////////////////////////////////////////////////////////////////////////////
 
-PathTexture* PathCache::getOval(float width, float height, SkPaint* paint) {
+PathTexture* PathCache::getOval(float width, float height, const SkPaint* paint) {
     PathDescription entry(kShapeOval, paint);
     entry.shape.oval.mWidth = width;
     entry.shape.oval.mHeight = height;
@@ -577,7 +577,7 @@
 // Rects
 ///////////////////////////////////////////////////////////////////////////////
 
-PathTexture* PathCache::getRect(float width, float height, SkPaint* paint) {
+PathTexture* PathCache::getRect(float width, float height, const SkPaint* paint) {
     PathDescription entry(kShapeRect, paint);
     entry.shape.rect.mWidth = width;
     entry.shape.rect.mHeight = height;
@@ -601,7 +601,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 PathTexture* PathCache::getArc(float width, float height,
-        float startAngle, float sweepAngle, bool useCenter, SkPaint* paint) {
+        float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint) {
     PathDescription entry(kShapeArc, paint);
     entry.shape.arc.mWidth = width;
     entry.shape.arc.mHeight = height;
diff --git a/libs/hwui/PathCache.h b/libs/hwui/PathCache.h
index 16d20a8..847853a 100644
--- a/libs/hwui/PathCache.h
+++ b/libs/hwui/PathCache.h
@@ -32,7 +32,7 @@
 class SkCanvas;
 class SkPaint;
 class SkPath;
-class SkRect;
+struct SkRect;
 
 namespace android {
 namespace uirenderer {
@@ -116,7 +116,7 @@
     SkPathEffect* pathEffect;
     union Shape {
         struct Path {
-            SkPath* mPath;
+            const SkPath* mPath;
         } path;
         struct RoundRect {
             float mWidth;
@@ -145,7 +145,7 @@
     } shape;
 
     PathDescription();
-    PathDescription(ShapeType shapeType, SkPaint* paint);
+    PathDescription(ShapeType shapeType, const SkPaint* paint);
 
     hash_t hash() const;
 
@@ -207,13 +207,13 @@
      */
     uint32_t getSize();
 
-    PathTexture* getRoundRect(float width, float height, float rx, float ry, SkPaint* paint);
-    PathTexture* getCircle(float radius, SkPaint* paint);
-    PathTexture* getOval(float width, float height, SkPaint* paint);
-    PathTexture* getRect(float width, float height, SkPaint* paint);
+    PathTexture* getRoundRect(float width, float height, float rx, float ry, const SkPaint* paint);
+    PathTexture* getCircle(float radius, const SkPaint* paint);
+    PathTexture* getOval(float width, float height, const SkPaint* paint);
+    PathTexture* getRect(float width, float height, const SkPaint* paint);
     PathTexture* getArc(float width, float height, float startAngle, float sweepAngle,
-            bool useCenter, SkPaint* paint);
-    PathTexture* get(SkPath* path, SkPaint* paint);
+            bool useCenter, const SkPaint* paint);
+    PathTexture* get(const SkPath* path, const SkPaint* paint);
 
     /**
      * Removes the specified path. This is meant to be called from threads
@@ -239,9 +239,9 @@
     /**
      * Precaches the specified path using background threads.
      */
-    void precache(SkPath* path, SkPaint* paint);
+    void precache(const SkPath* path, const SkPaint* paint);
 
-    static bool canDrawAsConvexPath(SkPath* path, SkPaint* paint);
+    static bool canDrawAsConvexPath(SkPath* path, const SkPaint* paint);
     static void computePathBounds(const SkPath* path, const SkPaint* paint,
             float& left, float& top, float& offset, uint32_t& width, uint32_t& height);
     static void computeBounds(const SkRect& bounds, const SkPaint* paint,
@@ -292,7 +292,7 @@
 
     class PathTask: public Task<SkBitmap*> {
     public:
-        PathTask(SkPath* path, SkPaint* paint, PathTexture* texture):
+        PathTask(const SkPath* path, const SkPaint* paint, PathTexture* texture):
             path(path), paint(paint), texture(texture) {
         }
 
@@ -300,8 +300,8 @@
             delete future()->get();
         }
 
-        SkPath* path;
-        SkPaint* paint;
+        const SkPath* path;
+        const SkPaint* paint;
         PathTexture* texture;
     };
 
diff --git a/libs/hwui/PathTessellator.cpp b/libs/hwui/PathTessellator.cpp
index 3970913..4ef2158 100644
--- a/libs/hwui/PathTessellator.cpp
+++ b/libs/hwui/PathTessellator.cpp
@@ -14,9 +14,9 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "PathTessellator"
+#define LOG_TAG "OpenGLRenderer"
 #define LOG_NDEBUG 1
-#define ATRACE_TAG ATRACE_TAG_GRAPHICS
+#define ATRACE_TAG ATRACE_TAG_VIEW
 
 #define VERTEX_DEBUG 0
 
@@ -24,11 +24,11 @@
 #define DEBUG_DUMP_ALPHA_BUFFER() \
     for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) { \
         ALOGD("point %d at %f %f, alpha %f", \
-        i, buffer[i].position[0], buffer[i].position[1], buffer[i].alpha); \
+        i, buffer[i].x, buffer[i].y, buffer[i].alpha); \
     }
 #define DEBUG_DUMP_BUFFER() \
     for (unsigned int i = 0; i < vertexBuffer.getSize(); i++) { \
-        ALOGD("point %d at %f %f", i, buffer[i].position[0], buffer[i].position[1]); \
+        ALOGD("point %d at %f %f", i, buffer[i].x, buffer[i].y); \
     }
 #else
 #define DEBUG_DUMP_ALPHA_BUFFER()
@@ -53,27 +53,22 @@
 namespace android {
 namespace uirenderer {
 
-#define THRESHOLD 0.5f
+#define OUTLINE_REFINE_THRESHOLD_SQUARED (0.5f * 0.5f)
 #define ROUND_CAP_THRESH 0.25f
 #define PI 3.1415926535897932f
 
-void PathTessellator::expandBoundsForStroke(SkRect& bounds, const SkPaint* paint,
-        bool forceExpand) {
-    if (forceExpand || paint->getStyle() != SkPaint::kFill_Style) {
+/**
+ * Note: this function doesn't account for the AA case with sub-pixel line thickness (not just 0 <
+ * width < 1.0, canvas scale factors in as well) so this can't be used for points/lines
+ */
+void PathTessellator::expandBoundsForStroke(SkRect& bounds, const SkPaint* paint) {
+    if (paint->getStyle() != SkPaint::kFill_Style) {
         float outset = paint->getStrokeWidth() * 0.5f;
         if (outset == 0) outset = 0.5f; // account for hairline
         bounds.outset(outset, outset);
     }
 }
 
-inline static void copyVertex(Vertex* destPtr, const Vertex* srcPtr) {
-    Vertex::set(destPtr, srcPtr->position[0], srcPtr->position[1]);
-}
-
-inline static void copyAlphaVertex(AlphaVertex* destPtr, const AlphaVertex* srcPtr) {
-    AlphaVertex::set(destPtr, srcPtr->position[0], srcPtr->position[1], srcPtr->alpha);
-}
-
 /**
  * Produces a pseudo-normal for a vertex, given the normals of the two incoming lines. If the offset
  * from each vertex in a perimeter is calculated, the resultant lines connecting the offset vertices
@@ -93,16 +88,16 @@
  */
 struct PaintInfo {
 public:
-    PaintInfo(const SkPaint* paint, const mat4 *transform) :
+    PaintInfo(const SkPaint* paint, const mat4& transform) :
             style(paint->getStyle()), cap(paint->getStrokeCap()), isAA(paint->isAntiAlias()),
             inverseScaleX(1.0f), inverseScaleY(1.0f),
             halfStrokeWidth(paint->getStrokeWidth() * 0.5f), maxAlpha(1.0f) {
         // compute inverse scales
-        if (CC_UNLIKELY(!transform->isPureTranslate())) {
-            float m00 = transform->data[Matrix4::kScaleX];
-            float m01 = transform->data[Matrix4::kSkewY];
-            float m10 = transform->data[Matrix4::kSkewX];
-            float m11 = transform->data[Matrix4::kScaleY];
+        if (CC_UNLIKELY(!transform.isPureTranslate())) {
+            float m00 = transform.data[Matrix4::kScaleX];
+            float m01 = transform.data[Matrix4::kSkewY];
+            float m10 = transform.data[Matrix4::kSkewX];
+            float m11 = transform.data[Matrix4::kScaleY];
             float scaleX = sqrt(m00 * m00 + m01 * m01);
             float scaleY = sqrt(m10 * m10 + m11 * m11);
             inverseScaleX = (scaleX != 0) ? (1.0f / scaleX) : 1.0f;
@@ -159,6 +154,17 @@
         }
         return 0;
     }
+
+    /**
+     * Outset the bounds of point data (for line endpoints or points) to account for AA stroke
+     * geometry.
+     */
+    void expandBoundsForStrokeAA(SkRect& bounds) const {
+        float outset = halfStrokeWidth;
+        if (outset == 0) outset = 0.5f;
+        bounds.outset(outset * inverseScaleX + Vertex::GeometryFudgeFactor(),
+                outset * inverseScaleY + Vertex::GeometryFudgeFactor());
+    }
 };
 
 void getFillVerticesFromPerimeter(const Vector<Vertex>& perimeter, VertexBuffer& vertexBuffer) {
@@ -170,9 +176,9 @@
     int srcAindex = 0;
     int srcBindex = perimeter.size() - 1;
     while (srcAindex <= srcBindex) {
-        copyVertex(&buffer[currentIndex++], &perimeter[srcAindex]);
+        buffer[currentIndex++] = perimeter[srcAindex];
         if (srcAindex == srcBindex) break;
-        copyVertex(&buffer[currentIndex++], &perimeter[srcBindex]);
+        buffer[currentIndex++] = perimeter[srcBindex];
         srcAindex++;
         srcBindex--;
     }
@@ -192,25 +198,25 @@
     int currentIndex = 0;
     const Vertex* last = &(perimeter[perimeter.size() - 1]);
     const Vertex* current = &(perimeter[0]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
+    vec2 lastNormal(current->y - last->y,
+            last->x - current->x);
     lastNormal.normalize();
     for (unsigned int i = 0; i < perimeter.size(); i++) {
         const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
+        vec2 nextNormal(next->y - current->y,
+                current->x - next->x);
         nextNormal.normalize();
 
         vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
         paintInfo.scaleOffsetForStrokeWidth(totalOffset);
 
         Vertex::set(&buffer[currentIndex++],
-                current->position[0] + totalOffset.x,
-                current->position[1] + totalOffset.y);
+                current->x + totalOffset.x,
+                current->y + totalOffset.y);
 
         Vertex::set(&buffer[currentIndex++],
-                current->position[0] - totalOffset.x,
-                current->position[1] - totalOffset.y);
+                current->x - totalOffset.x,
+                current->y - totalOffset.y);
 
         last = current;
         current = next;
@@ -218,8 +224,8 @@
     }
 
     // wrap around to beginning
-    copyVertex(&buffer[currentIndex++], &buffer[0]);
-    copyVertex(&buffer[currentIndex++], &buffer[1]);
+    buffer[currentIndex++] = buffer[0];
+    buffer[currentIndex++] = buffer[1];
 
     DEBUG_DUMP_BUFFER();
 }
@@ -229,7 +235,7 @@
     vec2 strokeOffset = normal;
     paintInfo.scaleOffsetForStrokeWidth(strokeOffset);
 
-    vec2 referencePoint(center.position[0], center.position[1]);
+    vec2 referencePoint(center.x, center.y);
     if (paintInfo.cap == SkPaint::kSquare_Cap) {
         referencePoint += vec2(-strokeOffset.y, strokeOffset.x) * (begin ? -1 : 1);
     }
@@ -255,11 +261,11 @@
     if (extra > 0) {
         // tessellate both round caps
         float beginTheta = atan2(
-                    - (vertices[0].position[0] - vertices[1].position[0]),
-                    vertices[0].position[1] - vertices[1].position[1]);
+                    - (vertices[0].x - vertices[1].x),
+                    vertices[0].y - vertices[1].y);
         float endTheta = atan2(
-                    - (vertices[lastIndex].position[0] - vertices[lastIndex - 1].position[0]),
-                    vertices[lastIndex].position[1] - vertices[lastIndex - 1].position[1]);
+                    - (vertices[lastIndex].x - vertices[lastIndex - 1].x),
+                    vertices[lastIndex].y - vertices[lastIndex - 1].y);
         const float dTheta = PI / (extra + 1);
         const float radialScale = 2.0f / (1 + cos(dTheta));
 
@@ -275,37 +281,37 @@
             vec2 beginRadialOffset(cos(beginTheta), sin(beginTheta));
             paintInfo.scaleOffsetForStrokeWidth(beginRadialOffset);
             Vertex::set(&buffer[capOffset],
-                    vertices[0].position[0] + beginRadialOffset.x,
-                    vertices[0].position[1] + beginRadialOffset.y);
+                    vertices[0].x + beginRadialOffset.x,
+                    vertices[0].y + beginRadialOffset.y);
 
             endTheta += dTheta;
             vec2 endRadialOffset(cos(endTheta), sin(endTheta));
             paintInfo.scaleOffsetForStrokeWidth(endRadialOffset);
             Vertex::set(&buffer[allocSize - 1 - capOffset],
-                    vertices[lastIndex].position[0] + endRadialOffset.x,
-                    vertices[lastIndex].position[1] + endRadialOffset.y);
+                    vertices[lastIndex].x + endRadialOffset.x,
+                    vertices[lastIndex].y + endRadialOffset.y);
         }
     }
 
     int currentIndex = extra;
     const Vertex* last = &(vertices[0]);
     const Vertex* current = &(vertices[1]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-                last->position[0] - current->position[0]);
+    vec2 lastNormal(current->y - last->y,
+                last->x - current->x);
     lastNormal.normalize();
 
     storeBeginEnd(paintInfo, vertices[0], lastNormal, buffer, currentIndex, true);
 
     for (unsigned int i = 1; i < vertices.size() - 1; i++) {
         const Vertex* next = &(vertices[i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
+        vec2 nextNormal(next->y - current->y,
+                current->x - next->x);
         nextNormal.normalize();
 
         vec2 strokeOffset  = totalOffsetFromNormals(lastNormal, nextNormal);
         paintInfo.scaleOffsetForStrokeWidth(strokeOffset);
 
-        vec2 center(current->position[0], current->position[1]);
+        vec2 center(current->x, current->y);
         Vertex::set(&buffer[currentIndex++], center + strokeOffset);
         Vertex::set(&buffer[currentIndex++], center - strokeOffset);
 
@@ -329,7 +335,7 @@
  * 3 - zig zag back and forth inside the shape to fill it (using perimeter.size() vertices)
  */
 void getFillVerticesFromPerimeterAA(const PaintInfo& paintInfo, const Vector<Vertex>& perimeter,
-        VertexBuffer& vertexBuffer) {
+        VertexBuffer& vertexBuffer, float maxAlpha = 1.0f) {
     AlphaVertex* buffer = vertexBuffer.alloc<AlphaVertex>(perimeter.size() * 3 + 2);
 
     // generate alpha points - fill Alpha vertex gaps in between each point with
@@ -337,13 +343,13 @@
     int currentIndex = 0;
     const Vertex* last = &(perimeter[perimeter.size() - 1]);
     const Vertex* current = &(perimeter[0]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
+    vec2 lastNormal(current->y - last->y,
+            last->x - current->x);
     lastNormal.normalize();
     for (unsigned int i = 0; i < perimeter.size(); i++) {
         const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
+        vec2 nextNormal(next->y - current->y,
+                current->x - next->x);
         nextNormal.normalize();
 
         // AA point offset from original point is that point's normal, such that each side is offset
@@ -351,13 +357,13 @@
         vec2 totalOffset = paintInfo.deriveAAOffset(totalOffsetFromNormals(lastNormal, nextNormal));
 
         AlphaVertex::set(&buffer[currentIndex++],
-                current->position[0] + totalOffset.x,
-                current->position[1] + totalOffset.y,
+                current->x + totalOffset.x,
+                current->y + totalOffset.y,
                 0.0f);
         AlphaVertex::set(&buffer[currentIndex++],
-                current->position[0] - totalOffset.x,
-                current->position[1] - totalOffset.y,
-                1.0f);
+                current->x - totalOffset.x,
+                current->y - totalOffset.y,
+                maxAlpha);
 
         last = current;
         current = next;
@@ -365,8 +371,8 @@
     }
 
     // wrap around to beginning
-    copyAlphaVertex(&buffer[currentIndex++], &buffer[0]);
-    copyAlphaVertex(&buffer[currentIndex++], &buffer[1]);
+    buffer[currentIndex++] = buffer[0];
+    buffer[currentIndex++] = buffer[1];
 
     // zig zag between all previous points on the inside of the hull to create a
     // triangle strip that fills the hull, repeating the first inner point to
@@ -374,9 +380,9 @@
     int srcAindex = 0;
     int srcBindex = perimeter.size() - 1;
     while (srcAindex <= srcBindex) {
-        copyAlphaVertex(&buffer[currentIndex++], &buffer[srcAindex * 2 + 1]);
+        buffer[currentIndex++] = buffer[srcAindex * 2 + 1];
         if (srcAindex == srcBindex) break;
-        copyAlphaVertex(&buffer[currentIndex++], &buffer[srcBindex * 2 + 1]);
+        buffer[currentIndex++] = buffer[srcBindex * 2 + 1];
         srcAindex++;
         srcBindex--;
     }
@@ -416,7 +422,7 @@
 
     // determine referencePoint, the center point for the 4 primary cap vertices
     const Vertex* point = isFirst ? vertices.begin() : (vertices.end() - 1);
-    vec2 referencePoint(point->position[0], point->position[1]);
+    vec2 referencePoint(point->x, point->y);
     if (paintInfo.cap == SkPaint::kSquare_Cap) {
         // To account for square cap, move the primary cap vertices (that create the AA edge) by the
         // stroke offset vector (rotated to be parallel to the stroke)
@@ -471,8 +477,8 @@
 
             if (isFirst && i == extra - extraOffset) {
                 //copy most recent two points to first two points
-                copyAlphaVertex(&buffer[0], &buffer[capPerimIndex - 2]);
-                copyAlphaVertex(&buffer[1], &buffer[capPerimIndex - 1]);
+                buffer[0] = buffer[capPerimIndex - 2];
+                buffer[1] = buffer[capPerimIndex - 1];
 
                 capPerimIndex = 2; // start writing the rest of the round cap at index 2
             }
@@ -482,28 +488,28 @@
             const int startCapFillIndex = capIndex + 2 * (extra - extraOffset) + 4;
             int capFillIndex = startCapFillIndex;
             for (int i = 0; i < extra + 2; i += 2) {
-                copyAlphaVertex(&buffer[capFillIndex++], &buffer[1 + i]);
+                buffer[capFillIndex++] = buffer[1 + i];
                 // TODO: to support odd numbers of divisions, break here on the last iteration
-                copyAlphaVertex(&buffer[capFillIndex++], &buffer[startCapFillIndex - 3 - i]);
+                buffer[capFillIndex++] = buffer[startCapFillIndex - 3 - i];
             }
         } else {
             int capFillIndex = 6 * vertices.size() + 2 + 6 * extra - (extra + 2);
             for (int i = 0; i < extra + 2; i += 2) {
-                copyAlphaVertex(&buffer[capFillIndex++], &buffer[capIndex + 1 + i]);
+                buffer[capFillIndex++] = buffer[capIndex + 1 + i];
                 // TODO: to support odd numbers of divisions, break here on the last iteration
-                copyAlphaVertex(&buffer[capFillIndex++], &buffer[capIndex + 3 + 2 * extra - i]);
+                buffer[capFillIndex++] = buffer[capIndex + 3 + 2 * extra - i];
             }
         }
         return;
     }
     if (isFirst) {
-        copyAlphaVertex(&buffer[0], &buffer[postCapIndex + 2]);
-        copyAlphaVertex(&buffer[1], &buffer[postCapIndex + 3]);
-        copyAlphaVertex(&buffer[postCapIndex + 4], &buffer[1]); // degenerate tris (the only two!)
-        copyAlphaVertex(&buffer[postCapIndex + 5], &buffer[postCapIndex + 1]);
+        buffer[0] = buffer[postCapIndex + 2];
+        buffer[1] = buffer[postCapIndex + 3];
+        buffer[postCapIndex + 4] = buffer[1]; // degenerate tris (the only two!)
+        buffer[postCapIndex + 5] = buffer[postCapIndex + 1];
     } else {
-        copyAlphaVertex(&buffer[6 * vertices.size()], &buffer[postCapIndex + 1]);
-        copyAlphaVertex(&buffer[6 * vertices.size() + 1], &buffer[postCapIndex + 3]);
+        buffer[6 * vertices.size()] = buffer[postCapIndex + 1];
+        buffer[6 * vertices.size() + 1] = buffer[postCapIndex + 3];
     }
 }
 
@@ -576,8 +582,8 @@
 
     const Vertex* last = &(vertices[0]);
     const Vertex* current = &(vertices[1]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
+    vec2 lastNormal(current->y - last->y,
+            last->x - current->x);
     lastNormal.normalize();
 
     // TODO: use normal from bezier traversal for cap, instead of from vertices
@@ -585,8 +591,8 @@
 
     for (unsigned int i = 1; i < vertices.size() - 1; i++) {
         const Vertex* next = &(vertices[i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
+        vec2 nextNormal(next->y - current->y,
+                current->x - next->x);
         nextNormal.normalize();
 
         vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
@@ -598,30 +604,30 @@
         innerOffset -= AAOffset;
 
         AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + outerOffset.x,
-                current->position[1] + outerOffset.y,
+                current->x + outerOffset.x,
+                current->y + outerOffset.y,
                 0.0f);
         AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
+                current->x + innerOffset.x,
+                current->y + innerOffset.y,
                 paintInfo.maxAlpha);
 
         AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
+                current->x + innerOffset.x,
+                current->y + innerOffset.y,
                 paintInfo.maxAlpha);
         AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
+                current->x - innerOffset.x,
+                current->y - innerOffset.y,
                 paintInfo.maxAlpha);
 
         AlphaVertex::set(&buffer[currentAAInnerIndex--],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
+                current->x - innerOffset.x,
+                current->y - innerOffset.y,
                 paintInfo.maxAlpha);
         AlphaVertex::set(&buffer[currentAAInnerIndex--],
-                current->position[0] - outerOffset.x,
-                current->position[1] - outerOffset.y,
+                current->x - outerOffset.x,
+                current->y - outerOffset.y,
                 0.0f);
 
         current = next;
@@ -646,13 +652,13 @@
 
     const Vertex* last = &(perimeter[perimeter.size() - 1]);
     const Vertex* current = &(perimeter[0]);
-    vec2 lastNormal(current->position[1] - last->position[1],
-            last->position[0] - current->position[0]);
+    vec2 lastNormal(current->y - last->y,
+            last->x - current->x);
     lastNormal.normalize();
     for (unsigned int i = 0; i < perimeter.size(); i++) {
         const Vertex* next = &(perimeter[i + 1 >= perimeter.size() ? 0 : i + 1]);
-        vec2 nextNormal(next->position[1] - current->position[1],
-                current->position[0] - next->position[0]);
+        vec2 nextNormal(next->y - current->y,
+                current->x - next->x);
         nextNormal.normalize();
 
         vec2 totalOffset = totalOffsetFromNormals(lastNormal, nextNormal);
@@ -664,30 +670,30 @@
         innerOffset -= AAOffset;
 
         AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + outerOffset.x,
-                current->position[1] + outerOffset.y,
+                current->x + outerOffset.x,
+                current->y + outerOffset.y,
                 0.0f);
         AlphaVertex::set(&buffer[currentAAOuterIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
+                current->x + innerOffset.x,
+                current->y + innerOffset.y,
                 paintInfo.maxAlpha);
 
         AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] + innerOffset.x,
-                current->position[1] + innerOffset.y,
+                current->x + innerOffset.x,
+                current->y + innerOffset.y,
                 paintInfo.maxAlpha);
         AlphaVertex::set(&buffer[currentStrokeIndex++],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
+                current->x - innerOffset.x,
+                current->y - innerOffset.y,
                 paintInfo.maxAlpha);
 
         AlphaVertex::set(&buffer[currentAAInnerIndex++],
-                current->position[0] - innerOffset.x,
-                current->position[1] - innerOffset.y,
+                current->x - innerOffset.x,
+                current->y - innerOffset.y,
                 paintInfo.maxAlpha);
         AlphaVertex::set(&buffer[currentAAInnerIndex++],
-                current->position[0] - outerOffset.x,
-                current->position[1] - outerOffset.y,
+                current->x - outerOffset.x,
+                current->y - outerOffset.y,
                 0.0f);
 
         last = current;
@@ -696,23 +702,23 @@
     }
 
     // wrap each strip around to beginning, creating degenerate tris to bridge strips
-    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[0]);
-    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[1]);
-    copyAlphaVertex(&buffer[currentAAOuterIndex++], &buffer[1]);
+    buffer[currentAAOuterIndex++] = buffer[0];
+    buffer[currentAAOuterIndex++] = buffer[1];
+    buffer[currentAAOuterIndex++] = buffer[1];
 
-    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset]);
-    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset + 1]);
-    copyAlphaVertex(&buffer[currentStrokeIndex++], &buffer[offset + 1]);
+    buffer[currentStrokeIndex++] = buffer[offset];
+    buffer[currentStrokeIndex++] = buffer[offset + 1];
+    buffer[currentStrokeIndex++] = buffer[offset + 1];
 
-    copyAlphaVertex(&buffer[currentAAInnerIndex++], &buffer[2 * offset]);
-    copyAlphaVertex(&buffer[currentAAInnerIndex++], &buffer[2 * offset + 1]);
+    buffer[currentAAInnerIndex++] = buffer[2 * offset];
+    buffer[currentAAInnerIndex++] = buffer[2 * offset + 1];
     // don't need to create last degenerate tri
 
     DEBUG_DUMP_ALPHA_BUFFER();
 }
 
 void PathTessellator::tessellatePath(const SkPath &path, const SkPaint* paint,
-        const mat4 *transform, VertexBuffer& vertexBuffer) {
+        const mat4& transform, VertexBuffer& vertexBuffer) {
     ATRACE_CALL();
 
     const PaintInfo paintInfo(paint, transform);
@@ -733,7 +739,8 @@
     // force close if we're filling the path, since fill path expects closed perimeter.
     bool forceClose = paintInfo.style != SkPaint::kStroke_Style;
     bool wasClosed = approximatePathOutlineVertices(path, forceClose,
-            threshInvScaleX * threshInvScaleX, threshInvScaleY * threshInvScaleY, tempVertices);
+            threshInvScaleX * threshInvScaleX, threshInvScaleY * threshInvScaleY,
+            OUTLINE_REFINE_THRESHOLD_SQUARED, tempVertices);
 
     if (!tempVertices.size()) {
         // path was empty, return without allocating vertex buffer
@@ -743,7 +750,7 @@
 #if VERTEX_DEBUG
     for (unsigned int i = 0; i < tempVertices.size(); i++) {
         ALOGD("orig path: point at %f %f",
-                tempVertices[i].position[0], tempVertices[i].position[1]);
+                tempVertices[i].x, tempVertices[i].y);
     }
 #endif
 
@@ -780,7 +787,7 @@
     rect.fBottom = fmaxf(rect.fBottom, y);
 }
 static void expandRectToCoverVertex(SkRect& rect, const Vertex& vertex) {
-    expandRectToCoverVertex(rect, vertex.position[0], vertex.position[1]);
+    expandRectToCoverVertex(rect, vertex.x, vertex.y);
 }
 
 template <class TYPE>
@@ -799,8 +806,8 @@
     dstBuffer.createDegenerateSeparators<TYPE>(verticesPerPoint);
 }
 
-void PathTessellator::tessellatePoints(const float* points, int count, SkPaint* paint,
-        const mat4* transform, SkRect& bounds, VertexBuffer& vertexBuffer) {
+void PathTessellator::tessellatePoints(const float* points, int count, const SkPaint* paint,
+        const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer) {
     const PaintInfo paintInfo(paint, transform);
 
     // determine point shape
@@ -818,7 +825,8 @@
     Vector<Vertex> outlineVertices;
     approximatePathOutlineVertices(path, true,
             paintInfo.inverseScaleX * paintInfo.inverseScaleX,
-            paintInfo.inverseScaleY * paintInfo.inverseScaleY, outlineVertices);
+            paintInfo.inverseScaleY * paintInfo.inverseScaleY,
+            OUTLINE_REFINE_THRESHOLD_SQUARED, outlineVertices);
 
     if (!outlineVertices.size()) return;
 
@@ -829,15 +837,18 @@
         getFillVerticesFromPerimeter(outlineVertices, tempBuffer);
         instanceVertices<Vertex>(tempBuffer, vertexBuffer, points, count, bounds);
     } else {
-        getFillVerticesFromPerimeterAA(paintInfo, outlineVertices, tempBuffer);
+        // note: pass maxAlpha directly, since we want fill to be alpha modulated
+        getFillVerticesFromPerimeterAA(paintInfo, outlineVertices, tempBuffer, paintInfo.maxAlpha);
         instanceVertices<AlphaVertex>(tempBuffer, vertexBuffer, points, count, bounds);
     }
 
-    expandBoundsForStroke(bounds, paint, true); // force-expand bounds to incorporate stroke
+    // expand bounds from vertex coords to pixel data
+    paintInfo.expandBoundsForStrokeAA(bounds);
+
 }
 
-void PathTessellator::tessellateLines(const float* points, int count, SkPaint* paint,
-        const mat4* transform, SkRect& bounds, VertexBuffer& vertexBuffer) {
+void PathTessellator::tessellateLines(const float* points, int count, const SkPaint* paint,
+        const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer) {
     ATRACE_CALL();
     const PaintInfo paintInfo(paint, transform);
 
@@ -873,20 +884,26 @@
         expandRectToCoverVertex(bounds, tempVerticesData[1]);
     }
 
-    expandBoundsForStroke(bounds, paint, true); // force-expand bounds to incorporate stroke
-
     // since multiple objects tessellated into buffer, separate them with degen tris
     if (paintInfo.isAA) {
         vertexBuffer.createDegenerateSeparators<AlphaVertex>(lineAllocSize);
     } else {
         vertexBuffer.createDegenerateSeparators<Vertex>(lineAllocSize);
     }
+
+    // expand bounds from vertex coords to pixel data
+    paintInfo.expandBoundsForStrokeAA(bounds);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
 // Simple path line approximation
 ///////////////////////////////////////////////////////////////////////////////
 
+bool PathTessellator::approximatePathOutlineVertices(const SkPath& path, float thresholdSquared,
+        Vector<Vertex>& outputVertices) {
+    return approximatePathOutlineVertices(path, true, 1.0f, 1.0f, thresholdSquared, outputVertices);
+}
+
 void pushToVector(Vector<Vertex>& vertices, float x, float y) {
     // TODO: make this not yuck
     vertices.push();
@@ -895,7 +912,8 @@
 }
 
 bool PathTessellator::approximatePathOutlineVertices(const SkPath& path, bool forceClose,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
+        float sqrInvScaleX, float sqrInvScaleY, float thresholdSquared,
+        Vector<Vertex>& outputVertices) {
     ATRACE_CALL();
 
     // TODO: to support joins other than sharp miter, join vertices should be labelled in the
@@ -922,7 +940,7 @@
                         pts[0].x(), pts[0].y(),
                         pts[2].x(), pts[2].y(),
                         pts[1].x(), pts[1].y(),
-                        sqrInvScaleX, sqrInvScaleY, outputVertices);
+                        sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
                 break;
             case SkPath::kCubic_Verb:
                 ALOGV("kCubic_Verb");
@@ -931,7 +949,7 @@
                         pts[1].x(), pts[1].y(),
                         pts[3].x(), pts[3].y(),
                         pts[2].x(), pts[2].y(),
-                        sqrInvScaleX, sqrInvScaleY, outputVertices);
+                        sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
                 break;
             default:
                 break;
@@ -939,8 +957,8 @@
     }
 
     int size = outputVertices.size();
-    if (size >= 2 && outputVertices[0].position[0] == outputVertices[size - 1].position[0] &&
-            outputVertices[0].position[1] == outputVertices[size - 1].position[1]) {
+    if (size >= 2 && outputVertices[0].x == outputVertices[size - 1].x &&
+            outputVertices[0].y == outputVertices[size - 1].y) {
         outputVertices.pop();
         return true;
     }
@@ -954,7 +972,8 @@
 void PathTessellator::recursiveCubicBezierVertices(
         float p1x, float p1y, float c1x, float c1y,
         float p2x, float p2y, float c2x, float c2y,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
+        float sqrInvScaleX, float sqrInvScaleY, float thresholdSquared,
+        Vector<Vertex>& outputVertices) {
     float dx = p2x - p1x;
     float dy = p2y - p1y;
     float d1 = fabs((c1x - p2x) * dy - (c1y - p2y) * dx);
@@ -963,7 +982,7 @@
 
     // multiplying by sqrInvScaleY/X equivalent to multiplying in dimensional scale factors
 
-    if (d * d < THRESHOLD * THRESHOLD * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
+    if (d * d < thresholdSquared * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
         // below thresh, draw line by adding endpoint
         pushToVector(outputVertices, p2x, p2y);
     } else {
@@ -987,11 +1006,11 @@
         recursiveCubicBezierVertices(
                 p1x, p1y, p1c1x, p1c1y,
                 mx, my, p1c1c2x, p1c1c2y,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
+                sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
         recursiveCubicBezierVertices(
                 mx, my, p2c1c2x, p2c1c2y,
                 p2x, p2y, p2c2x, p2c2y,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
+                sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
     }
 }
 
@@ -999,12 +1018,13 @@
         float ax, float ay,
         float bx, float by,
         float cx, float cy,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex>& outputVertices) {
+        float sqrInvScaleX, float sqrInvScaleY, float thresholdSquared,
+        Vector<Vertex>& outputVertices) {
     float dx = bx - ax;
     float dy = by - ay;
     float d = (cx - bx) * dy - (cy - by) * dx;
 
-    if (d * d < THRESHOLD * THRESHOLD * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
+    if (d * d < thresholdSquared * (dx * dx * sqrInvScaleY + dy * dy * sqrInvScaleX)) {
         // below thresh, draw line by adding endpoint
         pushToVector(outputVertices, bx, by);
     } else {
@@ -1018,9 +1038,9 @@
         float my = (acy + bcy) * 0.5f;
 
         recursiveQuadraticBezierVertices(ax, ay, mx, my, acx, acy,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
+                sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
         recursiveQuadraticBezierVertices(mx, my, bx, by, bcx, bcy,
-                sqrInvScaleX, sqrInvScaleY, outputVertices);
+                sqrInvScaleX, sqrInvScaleY, thresholdSquared, outputVertices);
     }
 }
 
diff --git a/libs/hwui/PathTessellator.h b/libs/hwui/PathTessellator.h
index 85797fc..a215b7a 100644
--- a/libs/hwui/PathTessellator.h
+++ b/libs/hwui/PathTessellator.h
@@ -22,100 +22,73 @@
 #include "Matrix.h"
 #include "Rect.h"
 #include "Vertex.h"
+#include "VertexBuffer.h"
 
 namespace android {
 namespace uirenderer {
 
-class VertexBuffer {
-public:
-    VertexBuffer():
-        mBuffer(0),
-        mVertexCount(0),
-        mCleanupMethod(NULL)
-    {}
-
-    ~VertexBuffer() {
-        if (mCleanupMethod) mCleanupMethod(mBuffer);
-    }
-
-    /**
-       This should be the only method used by the PathTessellator. Subsequent calls to alloc will
-       allocate space within the first allocation (useful if you want to eventually allocate
-       multiple regions within a single VertexBuffer, such as with PathTessellator::tesselateLines()
-     */
-    template <class TYPE>
-    TYPE* alloc(int vertexCount) {
-        if (mVertexCount) {
-            TYPE* reallocBuffer = (TYPE*)mReallocBuffer;
-            // already have allocated the buffer, re-allocate space within
-            if (mReallocBuffer != mBuffer) {
-                // not first re-allocation, leave space for degenerate triangles to separate strips
-                reallocBuffer += 2;
-            }
-            mReallocBuffer = reallocBuffer + vertexCount;
-            return reallocBuffer;
-        }
-        mVertexCount = vertexCount;
-        mReallocBuffer = mBuffer = (void*)new TYPE[vertexCount];
-        mCleanupMethod = &(cleanup<TYPE>);
-
-        return (TYPE*)mBuffer;
-    }
-
-    template <class TYPE>
-    void copyInto(const VertexBuffer& srcBuffer, float xOffset, float yOffset) {
-        int verticesToCopy = srcBuffer.getVertexCount();
-
-        TYPE* dst = alloc<TYPE>(verticesToCopy);
-        TYPE* src = (TYPE*)srcBuffer.getBuffer();
-
-        for (int i = 0; i < verticesToCopy; i++) {
-            TYPE::copyWithOffset(&dst[i], src[i], xOffset, yOffset);
-        }
-    }
-
-    void* getBuffer() const { return mBuffer; } // shouldn't be const, since not a const ptr?
-    unsigned int getVertexCount() const { return mVertexCount; }
-
-    template <class TYPE>
-    void createDegenerateSeparators(int allocSize) {
-        TYPE* end = (TYPE*)mBuffer + mVertexCount;
-        for (TYPE* degen = (TYPE*)mBuffer + allocSize; degen < end; degen += 2 + allocSize) {
-            memcpy(degen, degen - 1, sizeof(TYPE));
-            memcpy(degen + 1, degen + 2, sizeof(TYPE));
-        }
-    }
-
-private:
-    template <class TYPE>
-    static void cleanup(void* buffer) {
-        delete[] (TYPE*)buffer;
-    }
-
-    void* mBuffer;
-    unsigned int mVertexCount;
-
-    void* mReallocBuffer; // used for multi-allocation
-
-    void (*mCleanupMethod)(void*);
-};
-
 class PathTessellator {
 public:
-    static void expandBoundsForStroke(SkRect& bounds, const SkPaint* paint, bool forceExpand);
+    static void expandBoundsForStroke(SkRect& bounds, const SkPaint* paint);
 
+    /**
+     * Populates a VertexBuffer with a tessellated approximation of the input convex path, as a single
+     * triangle strip. Note: joins are not currently supported.
+     *
+     * @param path The path to be approximated
+     * @param paint The paint the path will be drawn with, indicating AA, painting style
+     *        (stroke vs fill), stroke width, stroke cap & join style, etc.
+     * @param transform The transform the path is to be drawn with, used to drive stretch-aware path
+     *        vertex approximation, and correct AA ramp offsetting.
+     * @param vertexBuffer The output buffer
+     */
     static void tessellatePath(const SkPath& path, const SkPaint* paint,
-            const mat4 *transform, VertexBuffer& vertexBuffer);
+            const mat4& transform, VertexBuffer& vertexBuffer);
 
-    static void tessellatePoints(const float* points, int count, SkPaint* paint,
-            const mat4* transform, SkRect& bounds, VertexBuffer& vertexBuffer);
+    /**
+     * Populates a VertexBuffer with a tessellated approximation of points as a single triangle
+     * strip (with degenerate tris separating), respecting the shape defined by the paint cap.
+     *
+     * @param points The center vertices of the points to be drawn
+     * @param count The number of floats making up the point vertices
+     * @param paint The paint the points will be drawn with indicating AA, stroke width & cap
+     * @param transform The transform the points will be drawn with, used to drive stretch-aware path
+     *        vertex approximation, and correct AA ramp offsetting
+     * @param bounds An output rectangle, which returns the total area covered by the output buffer
+     * @param vertexBuffer The output buffer
+     */
+    static void tessellatePoints(const float* points, int count, const SkPaint* paint,
+            const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer);
 
-    static void tessellateLines(const float* points, int count, SkPaint* paint,
-            const mat4* transform, SkRect& bounds, VertexBuffer& vertexBuffer);
+    /**
+     * Populates a VertexBuffer with a tessellated approximation of lines as a single triangle
+     * strip (with degenerate tris separating).
+     *
+     * @param points Pairs of endpoints defining the lines to be drawn
+     * @param count The number of floats making up the line vertices
+     * @param paint The paint the lines will be drawn with indicating AA, stroke width & cap
+     * @param transform The transform the points will be drawn with, used to drive stretch-aware path
+     *        vertex approximation, and correct AA ramp offsetting
+     * @param bounds An output rectangle, which returns the total area covered by the output buffer
+     * @param vertexBuffer The output buffer
+     */
+    static void tessellateLines(const float* points, int count, const SkPaint* paint,
+            const mat4& transform, SkRect& bounds, VertexBuffer& vertexBuffer);
+
+    /**
+     * Approximates a convex, CW outline into a Vector of 2d vertices.
+     *
+     * @param path The outline to be approximated
+     * @param thresholdSquared The threshold of acceptable error (in pixels) when approximating
+     * @param outputVertices An empty Vector which will be populated with the output
+     */
+    static bool approximatePathOutlineVertices(const SkPath &path, float thresholdSquared,
+            Vector<Vertex> &outputVertices);
 
 private:
     static bool approximatePathOutlineVertices(const SkPath &path, bool forceClose,
-        float sqrInvScaleX, float sqrInvScaleY, Vector<Vertex> &outputVertices);
+            float sqrInvScaleX, float sqrInvScaleY, float thresholdSquared,
+            Vector<Vertex> &outputVertices);
 
 /*
   endpoints a & b,
@@ -125,7 +98,7 @@
             float ax, float ay,
             float bx, float by,
             float cx, float cy,
-            float sqrInvScaleX, float sqrInvScaleY,
+            float sqrInvScaleX, float sqrInvScaleY, float thresholdSquared,
             Vector<Vertex> &outputVertices);
 
 /*
@@ -137,7 +110,7 @@
             float c1x, float c1y,
             float p2x, float p2y,
             float c2x, float c2y,
-            float sqrInvScaleX, float sqrInvScaleY,
+            float sqrInvScaleX, float sqrInvScaleY, float thresholdSquared,
             Vector<Vertex> &outputVertices);
 };
 
diff --git a/libs/hwui/Program.cpp b/libs/hwui/Program.cpp
index 58f5325..ee77897 100644
--- a/libs/hwui/Program.cpp
+++ b/libs/hwui/Program.cpp
@@ -173,7 +173,7 @@
             // up and to the left.
             // This offset value is based on an assumption that some hardware may use as
             // little as 12.4 precision, so we offset by slightly more than 1/16.
-            p.translate(Vertex::gGeometryFudgeFactor, Vertex::gGeometryFudgeFactor);
+            p.translate(Vertex::GeometryFudgeFactor(), Vertex::GeometryFudgeFactor());
             glUniformMatrix4fv(projection, 1, GL_FALSE, &p.data[0]);
         }
         mProjection = projectionMatrix;
diff --git a/libs/hwui/Program.h b/libs/hwui/Program.h
index f6ac8ec..33c91b3 100644
--- a/libs/hwui/Program.h
+++ b/libs/hwui/Program.h
@@ -51,9 +51,8 @@
 #define PROGRAM_KEY_GRADIENT 0x8
 #define PROGRAM_KEY_BITMAP_FIRST 0x10
 #define PROGRAM_KEY_COLOR_MATRIX 0x20
-#define PROGRAM_KEY_COLOR_LIGHTING 0x40
-#define PROGRAM_KEY_COLOR_BLEND 0x80
-#define PROGRAM_KEY_BITMAP_NPOT 0x100
+#define PROGRAM_KEY_COLOR_BLEND 0x40
+#define PROGRAM_KEY_BITMAP_NPOT 0x80
 #define PROGRAM_KEY_SWAP_SRC_DST 0x2000
 
 #define PROGRAM_KEY_BITMAP_WRAPS_MASK 0x600
@@ -104,7 +103,6 @@
     enum ColorModifier {
         kColorNone = 0,
         kColorMatrix,
-        kColorLighting,
         kColorBlend
     };
 
@@ -207,7 +205,7 @@
      * the fragment shader. When this method returns true, the program should
      * be provided with a modulation color.
      */
-    bool setColor(const float r, const float g, const float b, const float a) {
+    bool setColorModulate(const float a) {
         modulate = a < COLOR_COMPONENT_THRESHOLD;
         return modulate;
     }
@@ -217,7 +215,7 @@
      * the fragment shader. When this method returns true, the program should
      * be provided with a modulation color.
      */
-    bool setAlpha8Color(const float r, const float g, const float b, const float a) {
+    bool setAlpha8ColorModulate(const float r, const float g, const float b, const float a) {
         modulate = a < COLOR_COMPONENT_THRESHOLD || r > COLOR_COMPONENT_INV_THRESHOLD ||
                 g > COLOR_COMPONENT_INV_THRESHOLD || b > COLOR_COMPONENT_INV_THRESHOLD;
         return modulate;
@@ -248,9 +246,6 @@
             case kColorMatrix:
                 key |= PROGRAM_KEY_COLOR_MATRIX;
                 break;
-            case kColorLighting:
-                key |= PROGRAM_KEY_COLOR_LIGHTING;
-                break;
             case kColorBlend:
                 key |= PROGRAM_KEY_COLOR_BLEND;
                 key |= (colorMode & PROGRAM_MAX_XFERMODE) << PROGRAM_XFERMODE_COLOR_OP_SHIFT;
diff --git a/libs/hwui/ProgramCache.cpp b/libs/hwui/ProgramCache.cpp
index a5ce6f6..6d50410 100644
--- a/libs/hwui/ProgramCache.cpp
+++ b/libs/hwui/ProgramCache.cpp
@@ -148,15 +148,12 @@
 };
 const char* gFS_Uniforms_BitmapSampler =
         "uniform sampler2D bitmapSampler;\n";
-const char* gFS_Uniforms_ColorOp[4] = {
+const char* gFS_Uniforms_ColorOp[3] = {
         // None
         "",
         // Matrix
         "uniform mat4 colorMatrix;\n"
         "uniform vec4 colorMatrixVector;\n",
-        // Lighting
-        "uniform vec4 lightingMul;\n"
-        "uniform vec4 lightingAdd;\n",
         // PorterDuff
         "uniform vec4 colorBlend;\n"
 };
@@ -311,17 +308,13 @@
         "    gl_FragColor = blendFramebuffer(fragColor, gl_LastFragColor);\n";
 const char* gFS_Main_FragColor_Blend_Swap =
         "    gl_FragColor = blendFramebuffer(gl_LastFragColor, fragColor);\n";
-const char* gFS_Main_ApplyColorOp[4] = {
+const char* gFS_Main_ApplyColorOp[3] = {
         // None
         "",
         // Matrix
         "    fragColor *= colorMatrix;\n"
         "    fragColor += colorMatrixVector;\n"
         "    fragColor.rgb *= fragColor.a;\n",
-        // Lighting
-        "    float lightingAlpha = fragColor.a;\n"
-        "    fragColor = min(fragColor * lightingMul + (lightingAdd * lightingAlpha), lightingAlpha);\n"
-        "    fragColor.a = lightingAlpha;\n",
         // PorterDuff
         "    fragColor = blendColors(colorBlend, fragColor);\n"
 };
diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h
index dabd8d4..92964a8 100644
--- a/libs/hwui/Rect.h
+++ b/libs/hwui/Rect.h
@@ -18,6 +18,7 @@
 #define ANDROID_HWUI_RECT_H
 
 #include <cmath>
+#include <SkRect.h>
 
 #include <utils/Log.h>
 
@@ -29,6 +30,8 @@
 #define RECT_STRING "%7.2f %7.2f %7.2f %7.2f"
 #define RECT_ARGS(r) \
     (r).left, (r).top, (r).right, (r).bottom
+#define SK_RECT_ARGS(r) \
+    (r).left(), (r).top(), (r).right(), (r).bottom()
 
 ///////////////////////////////////////////////////////////////////////////////
 // Structs
@@ -68,6 +71,13 @@
             bottom(height) {
     }
 
+    inline Rect(const SkRect& rect):
+            left(rect.fLeft),
+            top(rect.fTop),
+            right(rect.fRight),
+            bottom(rect.fBottom) {
+    }
+
     friend int operator==(const Rect& a, const Rect& b) {
         return !memcmp(&a, &b, sizeof(a));
     }
@@ -190,19 +200,19 @@
              * from this inset will only incur similarly small errors in output, due to transparency
              * in extreme outside of the geometry.
              */
-            left = floorf(left + Vertex::gGeometryFudgeFactor);
-            top = floorf(top + Vertex::gGeometryFudgeFactor);
-            right = ceilf(right - Vertex::gGeometryFudgeFactor);
-            bottom = ceilf(bottom - Vertex::gGeometryFudgeFactor);
+            left = floorf(left + Vertex::GeometryFudgeFactor());
+            top = floorf(top + Vertex::GeometryFudgeFactor());
+            right = ceilf(right - Vertex::GeometryFudgeFactor());
+            bottom = ceilf(bottom - Vertex::GeometryFudgeFactor());
         } else {
             /* For other geometry, we do the regular rounding in order to snap, but also outset the
              * bounds by a fudge factor. This ensures that ambiguous geometry (e.g. a non-AA Rect
              * with top left at (0.5, 0.5)) will err on the side of a larger damage rect.
              */
-            left = floorf(left + 0.5f - Vertex::gGeometryFudgeFactor);
-            top = floorf(top + 0.5f - Vertex::gGeometryFudgeFactor);
-            right = floorf(right + 0.5f + Vertex::gGeometryFudgeFactor);
-            bottom = floorf(bottom + 0.5f + Vertex::gGeometryFudgeFactor);
+            left = floorf(left + 0.5f - Vertex::GeometryFudgeFactor());
+            top = floorf(top + 0.5f - Vertex::GeometryFudgeFactor());
+            right = floorf(right + 0.5f + Vertex::GeometryFudgeFactor());
+            bottom = floorf(bottom + 0.5f + Vertex::GeometryFudgeFactor());
         }
     }
 
@@ -213,6 +223,13 @@
         bottom = floorf(bottom + 0.5f);
     }
 
+    void roundOut() {
+        left = floorf(left);
+        top = floorf(top);
+        right = ceilf(right);
+        bottom = ceilf(bottom);
+    }
+
     void dump() const {
         ALOGD("Rect[l=%f t=%f r=%f b=%f]", left, top, right, bottom);
     }
diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp
new file mode 100644
index 0000000..7a9c181
--- /dev/null
+++ b/libs/hwui/RenderNode.cpp
@@ -0,0 +1,698 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define ATRACE_TAG ATRACE_TAG_VIEW
+
+#include "RenderNode.h"
+
+#include <algorithm>
+
+#include <SkCanvas.h>
+#include <algorithm>
+
+#include <utils/Trace.h>
+
+#include "Debug.h"
+#include "DisplayListOp.h"
+#include "DisplayListLogBuffer.h"
+#include "utils/MathUtils.h"
+
+namespace android {
+namespace uirenderer {
+
+void RenderNode::outputLogBuffer(int fd) {
+    DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
+    if (logBuffer.isEmpty()) {
+        return;
+    }
+
+    FILE *file = fdopen(fd, "a");
+
+    fprintf(file, "\nRecent DisplayList operations\n");
+    logBuffer.outputCommands(file);
+
+    String8 cachesLog;
+    Caches::getInstance().dumpMemoryUsage(cachesLog);
+    fprintf(file, "\nCaches:\n%s", cachesLog.string());
+    fprintf(file, "\n");
+
+    fflush(file);
+}
+
+RenderNode::RenderNode()
+        : mNeedsPropertiesSync(false)
+        , mNeedsDisplayListDataSync(false)
+        , mDisplayListData(0)
+        , mStagingDisplayListData(0)
+        , mNeedsAnimatorsSync(false) {
+}
+
+RenderNode::~RenderNode() {
+    delete mDisplayListData;
+    delete mStagingDisplayListData;
+}
+
+void RenderNode::setStagingDisplayList(DisplayListData* data) {
+    mNeedsDisplayListDataSync = true;
+    delete mStagingDisplayListData;
+    mStagingDisplayListData = data;
+    if (mStagingDisplayListData) {
+        Caches::getInstance().registerFunctors(mStagingDisplayListData->functorCount);
+    }
+}
+
+/**
+ * This function is a simplified version of replay(), where we simply retrieve and log the
+ * display list. This function should remain in sync with the replay() function.
+ */
+void RenderNode::output(uint32_t level) {
+    ALOGD("%*sStart display list (%p, %s, render=%d)", (level - 1) * 2, "", this,
+            getName(), isRenderable());
+    ALOGD("%*s%s %d", level * 2, "", "Save",
+            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
+
+    properties().debugOutputProperties(level);
+    int flags = DisplayListOp::kOpLogFlag_Recurse;
+    for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) {
+        mDisplayListData->displayListOps[i]->output(level, flags);
+    }
+
+    ALOGD("%*sDone (%p, %s)", (level - 1) * 2, "", this, getName());
+}
+
+void RenderNode::prepareTree(TreeInfo& info) {
+    ATRACE_CALL();
+
+    prepareTreeImpl(info);
+}
+
+void RenderNode::prepareTreeImpl(TreeInfo& info) {
+    if (info.performStagingPush) {
+        pushStagingChanges(info);
+    }
+    if (info.evaluateAnimations) {
+        evaluateAnimations(info);
+    }
+    prepareSubTree(info, mDisplayListData);
+}
+
+static bool is_finished(const sp<RenderPropertyAnimator>& animator) {
+    return animator->isFinished();
+}
+
+void RenderNode::pushStagingChanges(TreeInfo& info) {
+    if (mNeedsPropertiesSync) {
+        mNeedsPropertiesSync = false;
+        mProperties = mStagingProperties;
+    }
+    if (mNeedsAnimatorsSync) {
+        mAnimators.resize(mStagingAnimators.size());
+        std::vector< sp<RenderPropertyAnimator> >::iterator it;
+        // hint: this means copy_if_not()
+        it = std::remove_copy_if(mStagingAnimators.begin(), mStagingAnimators.end(),
+                mAnimators.begin(), is_finished);
+        mAnimators.resize(std::distance(mAnimators.begin(), it));
+    }
+    if (mNeedsDisplayListDataSync) {
+        mNeedsDisplayListDataSync = false;
+        // Do a push pass on the old tree to handle freeing DisplayListData
+        // that are no longer used
+        TreeInfo oldTreeInfo;
+        prepareSubTree(oldTreeInfo, mDisplayListData);
+        // TODO: The damage for the old tree should be accounted for
+        delete mDisplayListData;
+        mDisplayListData = mStagingDisplayListData;
+        mStagingDisplayListData = 0;
+    }
+}
+
+class AnimateFunctor {
+public:
+    AnimateFunctor(RenderProperties* target, TreeInfo& info)
+            : mTarget(target), mInfo(info) {}
+
+    bool operator() (sp<RenderPropertyAnimator>& animator) {
+        bool finished = animator->animate(mTarget, mInfo);
+        if (finished && mInfo.animationListener) {
+            mInfo.animationListener->onAnimationFinished(animator);
+        }
+        return finished;
+    }
+private:
+    RenderProperties* mTarget;
+    TreeInfo& mInfo;
+};
+
+void RenderNode::evaluateAnimations(TreeInfo& info) {
+    if (!mAnimators.size()) return;
+
+    AnimateFunctor functor(&mProperties, info);
+    std::vector< sp<RenderPropertyAnimator> >::iterator newEnd;
+    newEnd = std::remove_if(mAnimators.begin(), mAnimators.end(), functor);
+    mAnimators.erase(newEnd, mAnimators.end());
+    mProperties.updateMatrix();
+    info.hasAnimations |= mAnimators.size();
+}
+
+void RenderNode::prepareSubTree(TreeInfo& info, DisplayListData* subtree) {
+    if (subtree) {
+        TextureCache& cache = Caches::getInstance().textureCache;
+        info.hasFunctors |= subtree->functorCount;
+        // TODO: Fix ownedBitmapResources to not require disabling prepareTextures
+        // and thus falling out of async drawing path.
+        if (subtree->ownedBitmapResources.size()) {
+            info.prepareTextures = false;
+        }
+        for (size_t i = 0; info.prepareTextures && i < subtree->bitmapResources.size(); i++) {
+            info.prepareTextures = cache.prefetchAndMarkInUse(subtree->bitmapResources[i]);
+        }
+        for (size_t i = 0; i < subtree->children().size(); i++) {
+            RenderNode* childNode = subtree->children()[i]->mDisplayList;
+            childNode->prepareTreeImpl(info);
+        }
+    }
+}
+
+/*
+ * For property operations, we pass a savecount of 0, since the operations aren't part of the
+ * displaylist, and thus don't have to compensate for the record-time/playback-time discrepancy in
+ * base saveCount (i.e., how RestoreToCount uses saveCount + properties().getCount())
+ */
+#define PROPERTY_SAVECOUNT 0
+
+template <class T>
+void RenderNode::setViewProperties(OpenGLRenderer& renderer, T& handler) {
+#if DEBUG_DISPLAY_LIST
+    properties().debugOutputProperties(handler.level() + 1);
+#endif
+    if (properties().getLeft() != 0 || properties().getTop() != 0) {
+        renderer.translate(properties().getLeft(), properties().getTop());
+    }
+    if (properties().getStaticMatrix()) {
+        renderer.concatMatrix(properties().getStaticMatrix());
+    } else if (properties().getAnimationMatrix()) {
+        renderer.concatMatrix(properties().getAnimationMatrix());
+    }
+    if (properties().hasTransformMatrix()) {
+        if (properties().isTransformTranslateOnly()) {
+            renderer.translate(properties().getTranslationX(), properties().getTranslationY());
+        } else {
+            renderer.concatMatrix(*properties().getTransformMatrix());
+        }
+    }
+    bool clipToBoundsNeeded = properties().getCaching() ? false : properties().getClipToBounds();
+    if (properties().getAlpha() < 1) {
+        if (properties().getCaching()) {
+            renderer.setOverrideLayerAlpha(properties().getAlpha());
+        } else if (!properties().getHasOverlappingRendering()) {
+            renderer.scaleAlpha(properties().getAlpha());
+        } else {
+            // TODO: should be able to store the size of a DL at record time and not
+            // have to pass it into this call. In fact, this information might be in the
+            // location/size info that we store with the new native transform data.
+            int saveFlags = SkCanvas::kHasAlphaLayer_SaveFlag;
+            if (clipToBoundsNeeded) {
+                saveFlags |= SkCanvas::kClipToLayer_SaveFlag;
+                clipToBoundsNeeded = false; // clipping done by saveLayer
+            }
+
+            SaveLayerOp* op = new (handler.allocator()) SaveLayerOp(
+                    0, 0, properties().getWidth(), properties().getHeight(),
+                    properties().getAlpha() * 255, saveFlags);
+            handler(op, PROPERTY_SAVECOUNT, properties().getClipToBounds());
+        }
+    }
+    if (clipToBoundsNeeded) {
+        ClipRectOp* op = new (handler.allocator()) ClipRectOp(
+                0, 0, properties().getWidth(), properties().getHeight(), SkRegion::kIntersect_Op);
+        handler(op, PROPERTY_SAVECOUNT, properties().getClipToBounds());
+    }
+
+    if (CC_UNLIKELY(properties().hasClippingPath())) {
+        // TODO: optimize for round rect/circle clipping
+        const SkPath* path = properties().getClippingPath();
+        ClipPathOp* op = new (handler.allocator()) ClipPathOp(path, SkRegion::kIntersect_Op);
+        handler(op, PROPERTY_SAVECOUNT, properties().getClipToBounds());
+    }
+}
+
+/**
+ * Apply property-based transformations to input matrix
+ *
+ * If true3dTransform is set to true, the transform applied to the input matrix will use true 4x4
+ * matrix computation instead of the Skia 3x3 matrix + camera hackery.
+ */
+void RenderNode::applyViewPropertyTransforms(mat4& matrix, bool true3dTransform) {
+    if (properties().getLeft() != 0 || properties().getTop() != 0) {
+        matrix.translate(properties().getLeft(), properties().getTop());
+    }
+    if (properties().getStaticMatrix()) {
+        mat4 stat(*properties().getStaticMatrix());
+        matrix.multiply(stat);
+    } else if (properties().getAnimationMatrix()) {
+        mat4 anim(*properties().getAnimationMatrix());
+        matrix.multiply(anim);
+    }
+
+    bool applyTranslationZ = true3dTransform && !MathUtils::isZero(properties().getZ());
+    if (properties().hasTransformMatrix() || applyTranslationZ) {
+        if (properties().isTransformTranslateOnly()) {
+            matrix.translate(properties().getTranslationX(), properties().getTranslationY(),
+                    true3dTransform ? properties().getZ() : 0.0f);
+        } else {
+            if (!true3dTransform) {
+                matrix.multiply(*properties().getTransformMatrix());
+            } else {
+                mat4 true3dMat;
+                true3dMat.loadTranslate(
+                        properties().getPivotX() + properties().getTranslationX(),
+                        properties().getPivotY() + properties().getTranslationY(),
+                        properties().getZ());
+                true3dMat.rotate(properties().getRotationX(), 1, 0, 0);
+                true3dMat.rotate(properties().getRotationY(), 0, 1, 0);
+                true3dMat.rotate(properties().getRotation(), 0, 0, 1);
+                true3dMat.scale(properties().getScaleX(), properties().getScaleY(), 1);
+                true3dMat.translate(-properties().getPivotX(), -properties().getPivotY());
+
+                matrix.multiply(true3dMat);
+            }
+        }
+    }
+}
+
+/**
+ * Organizes the DisplayList hierarchy to prepare for background projection reordering.
+ *
+ * This should be called before a call to defer() or drawDisplayList()
+ *
+ * Each DisplayList that serves as a 3d root builds its list of composited children,
+ * which are flagged to not draw in the standard draw loop.
+ */
+void RenderNode::computeOrdering() {
+    ATRACE_CALL();
+    mProjectedNodes.clear();
+
+    // TODO: create temporary DDLOp and call computeOrderingImpl on top DisplayList so that
+    // transform properties are applied correctly to top level children
+    if (mDisplayListData == NULL) return;
+    for (unsigned int i = 0; i < mDisplayListData->children().size(); i++) {
+        DrawDisplayListOp* childOp = mDisplayListData->children()[i];
+        childOp->mDisplayList->computeOrderingImpl(childOp,
+                properties().getOutline().getPath(), &mProjectedNodes, &mat4::identity());
+    }
+}
+
+void RenderNode::computeOrderingImpl(
+        DrawDisplayListOp* opState,
+        const SkPath* outlineOfProjectionSurface,
+        Vector<DrawDisplayListOp*>* compositedChildrenOfProjectionSurface,
+        const mat4* transformFromProjectionSurface) {
+    mProjectedNodes.clear();
+    if (mDisplayListData == NULL || mDisplayListData->isEmpty()) return;
+
+    // TODO: should avoid this calculation in most cases
+    // TODO: just calculate single matrix, down to all leaf composited elements
+    Matrix4 localTransformFromProjectionSurface(*transformFromProjectionSurface);
+    localTransformFromProjectionSurface.multiply(opState->mTransformFromParent);
+
+    if (properties().getProjectBackwards()) {
+        // composited projectee, flag for out of order draw, save matrix, and store in proj surface
+        opState->mSkipInOrderDraw = true;
+        opState->mTransformFromCompositingAncestor.load(localTransformFromProjectionSurface);
+        compositedChildrenOfProjectionSurface->add(opState);
+    } else {
+        // standard in order draw
+        opState->mSkipInOrderDraw = false;
+    }
+
+    if (mDisplayListData->children().size() > 0) {
+        const bool isProjectionReceiver = mDisplayListData->projectionReceiveIndex >= 0;
+        bool haveAppliedPropertiesToProjection = false;
+        for (unsigned int i = 0; i < mDisplayListData->children().size(); i++) {
+            DrawDisplayListOp* childOp = mDisplayListData->children()[i];
+            RenderNode* child = childOp->mDisplayList;
+
+            const SkPath* projectionOutline = NULL;
+            Vector<DrawDisplayListOp*>* projectionChildren = NULL;
+            const mat4* projectionTransform = NULL;
+            if (isProjectionReceiver && !child->properties().getProjectBackwards()) {
+                // if receiving projections, collect projecting descendent
+
+                // Note that if a direct descendent is projecting backwards, we pass it's
+                // grandparent projection collection, since it shouldn't project onto it's
+                // parent, where it will already be drawing.
+                projectionOutline = properties().getOutline().getPath();
+                projectionChildren = &mProjectedNodes;
+                projectionTransform = &mat4::identity();
+            } else {
+                if (!haveAppliedPropertiesToProjection) {
+                    applyViewPropertyTransforms(localTransformFromProjectionSurface);
+                    haveAppliedPropertiesToProjection = true;
+                }
+                projectionOutline = outlineOfProjectionSurface;
+                projectionChildren = compositedChildrenOfProjectionSurface;
+                projectionTransform = &localTransformFromProjectionSurface;
+            }
+            child->computeOrderingImpl(childOp,
+                    projectionOutline, projectionChildren, projectionTransform);
+        }
+    }
+}
+
+class DeferOperationHandler {
+public:
+    DeferOperationHandler(DeferStateStruct& deferStruct, int level)
+        : mDeferStruct(deferStruct), mLevel(level) {}
+    inline void operator()(DisplayListOp* operation, int saveCount, bool clipToBounds) {
+        operation->defer(mDeferStruct, saveCount, mLevel, clipToBounds);
+    }
+    inline LinearAllocator& allocator() { return *(mDeferStruct.mAllocator); }
+    inline void startMark(const char* name) {} // do nothing
+    inline void endMark() {}
+    inline int level() { return mLevel; }
+    inline int replayFlags() { return mDeferStruct.mReplayFlags; }
+
+private:
+    DeferStateStruct& mDeferStruct;
+    const int mLevel;
+};
+
+void RenderNode::deferNodeTree(DeferStateStruct& deferStruct) {
+    DeferOperationHandler handler(deferStruct, 0);
+    if (MathUtils::isPositive(properties().getZ())) {
+        issueDrawShadowOperation(Matrix4::identity(), handler);
+    }
+    issueOperations<DeferOperationHandler>(deferStruct.mRenderer, handler);
+}
+
+void RenderNode::deferNodeInParent(DeferStateStruct& deferStruct, const int level) {
+    DeferOperationHandler handler(deferStruct, level);
+    issueOperations<DeferOperationHandler>(deferStruct.mRenderer, handler);
+}
+
+class ReplayOperationHandler {
+public:
+    ReplayOperationHandler(ReplayStateStruct& replayStruct, int level)
+        : mReplayStruct(replayStruct), mLevel(level) {}
+    inline void operator()(DisplayListOp* operation, int saveCount, bool clipToBounds) {
+#if DEBUG_DISPLAY_LIST_OPS_AS_EVENTS
+        mReplayStruct.mRenderer.eventMark(operation->name());
+#endif
+        operation->replay(mReplayStruct, saveCount, mLevel, clipToBounds);
+    }
+    inline LinearAllocator& allocator() { return *(mReplayStruct.mAllocator); }
+    inline void startMark(const char* name) {
+        mReplayStruct.mRenderer.startMark(name);
+    }
+    inline void endMark() {
+        mReplayStruct.mRenderer.endMark();
+    }
+    inline int level() { return mLevel; }
+    inline int replayFlags() { return mReplayStruct.mReplayFlags; }
+
+private:
+    ReplayStateStruct& mReplayStruct;
+    const int mLevel;
+};
+
+void RenderNode::replayNodeTree(ReplayStateStruct& replayStruct) {
+    ReplayOperationHandler handler(replayStruct, 0);
+    if (MathUtils::isPositive(properties().getZ())) {
+        issueDrawShadowOperation(Matrix4::identity(), handler);
+    }
+    issueOperations<ReplayOperationHandler>(replayStruct.mRenderer, handler);
+}
+
+void RenderNode::replayNodeInParent(ReplayStateStruct& replayStruct, const int level) {
+    ReplayOperationHandler handler(replayStruct, level);
+    issueOperations<ReplayOperationHandler>(replayStruct.mRenderer, handler);
+}
+
+void RenderNode::buildZSortedChildList(Vector<ZDrawDisplayListOpPair>& zTranslatedNodes) {
+    if (mDisplayListData == NULL || mDisplayListData->children().size() == 0) return;
+
+    for (unsigned int i = 0; i < mDisplayListData->children().size(); i++) {
+        DrawDisplayListOp* childOp = mDisplayListData->children()[i];
+        RenderNode* child = childOp->mDisplayList;
+        float childZ = child->properties().getZ();
+
+        if (!MathUtils::isZero(childZ)) {
+            zTranslatedNodes.add(ZDrawDisplayListOpPair(childZ, childOp));
+            childOp->mSkipInOrderDraw = true;
+        } else if (!child->properties().getProjectBackwards()) {
+            // regular, in order drawing DisplayList
+            childOp->mSkipInOrderDraw = false;
+        }
+    }
+
+    // Z sort 3d children (stable-ness makes z compare fall back to standard drawing order)
+    std::stable_sort(zTranslatedNodes.begin(), zTranslatedNodes.end());
+}
+
+template <class T>
+void RenderNode::issueDrawShadowOperation(const Matrix4& transformFromParent, T& handler) {
+    if (properties().getAlpha() <= 0.0f) return;
+
+    mat4 shadowMatrixXY(transformFromParent);
+    applyViewPropertyTransforms(shadowMatrixXY);
+
+    // Z matrix needs actual 3d transformation, so mapped z values will be correct
+    mat4 shadowMatrixZ(transformFromParent);
+    applyViewPropertyTransforms(shadowMatrixZ, true);
+
+    const SkPath* outlinePath = properties().getOutline().getPath();
+    const RevealClip& revealClip = properties().getRevealClip();
+    const SkPath* revealClipPath = revealClip.hasConvexClip()
+            ?  revealClip.getPath() : NULL; // only pass the reveal clip's path if it's convex
+
+    /**
+     * The drawing area of the caster is always the same as the its perimeter (which
+     * the shadow system uses) *except* in the inverse clip case. Inform the shadow
+     * system that the caster's drawing area (as opposed to its perimeter) has been
+     * clipped, so that it knows the caster can't be opaque.
+     */
+    bool casterUnclipped = !revealClip.willClip() || revealClip.hasConvexClip();
+
+    DisplayListOp* shadowOp  = new (handler.allocator()) DrawShadowOp(
+            shadowMatrixXY, shadowMatrixZ,
+            properties().getAlpha(), casterUnclipped,
+            properties().getWidth(), properties().getHeight(),
+            outlinePath, revealClipPath);
+    handler(shadowOp, PROPERTY_SAVECOUNT, properties().getClipToBounds());
+}
+
+#define SHADOW_DELTA 0.1f
+
+template <class T>
+void RenderNode::issueOperationsOf3dChildren(const Vector<ZDrawDisplayListOpPair>& zTranslatedNodes,
+        ChildrenSelectMode mode, OpenGLRenderer& renderer, T& handler) {
+    const int size = zTranslatedNodes.size();
+    if (size == 0
+            || (mode == kNegativeZChildren && zTranslatedNodes[0].key > 0.0f)
+            || (mode == kPositiveZChildren && zTranslatedNodes[size - 1].key < 0.0f)) {
+        // no 3d children to draw
+        return;
+    }
+
+    /**
+     * Draw shadows and (potential) casters mostly in order, but allow the shadows of casters
+     * with very similar Z heights to draw together.
+     *
+     * This way, if Views A & B have the same Z height and are both casting shadows, the shadows are
+     * underneath both, and neither's shadow is drawn on top of the other.
+     */
+    const size_t nonNegativeIndex = findNonNegativeIndex(zTranslatedNodes);
+    size_t drawIndex, shadowIndex, endIndex;
+    if (mode == kNegativeZChildren) {
+        drawIndex = 0;
+        endIndex = nonNegativeIndex;
+        shadowIndex = endIndex; // draw no shadows
+    } else {
+        drawIndex = nonNegativeIndex;
+        endIndex = size;
+        shadowIndex = drawIndex; // potentially draw shadow for each pos Z child
+    }
+
+    DISPLAY_LIST_LOGD("%*s%d %s 3d children:", (handler.level() + 1) * 2, "",
+            endIndex - drawIndex, mode == kNegativeZChildren ? "negative" : "positive");
+
+    float lastCasterZ = 0.0f;
+    while (shadowIndex < endIndex || drawIndex < endIndex) {
+        if (shadowIndex < endIndex) {
+            DrawDisplayListOp* casterOp = zTranslatedNodes[shadowIndex].value;
+            RenderNode* caster = casterOp->mDisplayList;
+            const float casterZ = zTranslatedNodes[shadowIndex].key;
+            // attempt to render the shadow if the caster about to be drawn is its caster,
+            // OR if its caster's Z value is similar to the previous potential caster
+            if (shadowIndex == drawIndex || casterZ - lastCasterZ < SHADOW_DELTA) {
+                caster->issueDrawShadowOperation(casterOp->mTransformFromParent, handler);
+
+                lastCasterZ = casterZ; // must do this even if current caster not casting a shadow
+                shadowIndex++;
+                continue;
+            }
+        }
+
+        // only the actual child DL draw needs to be in save/restore,
+        // since it modifies the renderer's matrix
+        int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag);
+
+        DrawDisplayListOp* childOp = zTranslatedNodes[drawIndex].value;
+        RenderNode* child = childOp->mDisplayList;
+
+        renderer.concatMatrix(childOp->mTransformFromParent);
+        childOp->mSkipInOrderDraw = false; // this is horrible, I'm so sorry everyone
+        handler(childOp, renderer.getSaveCount() - 1, properties().getClipToBounds());
+        childOp->mSkipInOrderDraw = true;
+
+        renderer.restoreToCount(restoreTo);
+        drawIndex++;
+    }
+}
+
+template <class T>
+void RenderNode::issueOperationsOfProjectedChildren(OpenGLRenderer& renderer, T& handler) {
+    DISPLAY_LIST_LOGD("%*s%d projected children:", (handler.level() + 1) * 2, "", mProjectedNodes.size());
+    const SkPath* projectionReceiverOutline = properties().getOutline().getPath();
+    bool maskProjecteesWithPath = projectionReceiverOutline != NULL
+            && !projectionReceiverOutline->isRect(NULL);
+    int restoreTo = renderer.getSaveCount();
+
+    // If the projection reciever has an outline, we mask each of the projected rendernodes to it
+    // Either with clipRect, or special saveLayer masking
+    LinearAllocator& alloc = handler.allocator();
+    if (projectionReceiverOutline != NULL) {
+        const SkRect& outlineBounds = projectionReceiverOutline->getBounds();
+        if (projectionReceiverOutline->isRect(NULL)) {
+            // mask to the rect outline simply with clipRect
+            handler(new (alloc) SaveOp(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag),
+                    PROPERTY_SAVECOUNT, properties().getClipToBounds());
+            ClipRectOp* clipOp = new (alloc) ClipRectOp(
+                    outlineBounds.left(), outlineBounds.top(),
+                    outlineBounds.right(), outlineBounds.bottom(), SkRegion::kIntersect_Op);
+            handler(clipOp, PROPERTY_SAVECOUNT, properties().getClipToBounds());
+        } else {
+            // wrap the projected RenderNodes with a SaveLayer that will mask to the outline
+            SaveLayerOp* op = new (alloc) SaveLayerOp(
+                    outlineBounds.left(), outlineBounds.top(),
+                    outlineBounds.right(), outlineBounds.bottom(),
+                    255, SkCanvas::kARGB_ClipLayer_SaveFlag);
+            op->setMask(projectionReceiverOutline);
+            handler(op, PROPERTY_SAVECOUNT, properties().getClipToBounds());
+
+            /* TODO: add optimizations here to take advantage of placement/size of projected
+             * children (which may shrink saveLayer area significantly). This is dependent on
+             * passing actual drawing/dirtying bounds of projected content down to native.
+             */
+        }
+    }
+
+    // draw projected nodes
+    for (size_t i = 0; i < mProjectedNodes.size(); i++) {
+        DrawDisplayListOp* childOp = mProjectedNodes[i];
+
+        // matrix save, concat, and restore can be done safely without allocating operations
+        int restoreTo = renderer.save(SkCanvas::kMatrix_SaveFlag);
+        renderer.concatMatrix(childOp->mTransformFromCompositingAncestor);
+        childOp->mSkipInOrderDraw = false; // this is horrible, I'm so sorry everyone
+        handler(childOp, renderer.getSaveCount() - 1, properties().getClipToBounds());
+        childOp->mSkipInOrderDraw = true;
+        renderer.restoreToCount(restoreTo);
+    }
+
+    if (projectionReceiverOutline != NULL) {
+        handler(new (alloc) RestoreToCountOp(restoreTo),
+                PROPERTY_SAVECOUNT, properties().getClipToBounds());
+    }
+}
+
+/**
+ * This function serves both defer and replay modes, and will organize the displayList's component
+ * operations for a single frame:
+ *
+ * Every 'simple' state operation that affects just the matrix and alpha (or other factors of
+ * DeferredDisplayState) may be issued directly to the renderer, but complex operations (with custom
+ * defer logic) and operations in displayListOps are issued through the 'handler' which handles the
+ * defer vs replay logic, per operation
+ */
+template <class T>
+void RenderNode::issueOperations(OpenGLRenderer& renderer, T& handler) {
+    const int level = handler.level();
+    if (mDisplayListData->isEmpty() || properties().getAlpha() <= 0) {
+        DISPLAY_LIST_LOGD("%*sEmpty display list (%p, %s)", level * 2, "", this, getName());
+        return;
+    }
+
+    handler.startMark(getName());
+
+#if DEBUG_DISPLAY_LIST
+    const Rect& clipRect = renderer.getLocalClipBounds();
+    DISPLAY_LIST_LOGD("%*sStart display list (%p, %s), localClipBounds: %.0f, %.0f, %.0f, %.0f",
+            level * 2, "", this, getName(),
+            clipRect.left, clipRect.top, clipRect.right, clipRect.bottom);
+#endif
+
+    LinearAllocator& alloc = handler.allocator();
+    int restoreTo = renderer.getSaveCount();
+    handler(new (alloc) SaveOp(SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag),
+            PROPERTY_SAVECOUNT, properties().getClipToBounds());
+
+    DISPLAY_LIST_LOGD("%*sSave %d %d", (level + 1) * 2, "",
+            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag, restoreTo);
+
+    setViewProperties<T>(renderer, handler);
+
+    bool quickRejected = properties().getClipToBounds()
+            && renderer.quickRejectConservative(0, 0, properties().getWidth(), properties().getHeight());
+    if (!quickRejected) {
+        Vector<ZDrawDisplayListOpPair> zTranslatedNodes;
+        buildZSortedChildList(zTranslatedNodes);
+
+        // for 3d root, draw children with negative z values
+        issueOperationsOf3dChildren(zTranslatedNodes, kNegativeZChildren, renderer, handler);
+
+        DisplayListLogBuffer& logBuffer = DisplayListLogBuffer::getInstance();
+        const int saveCountOffset = renderer.getSaveCount() - 1;
+        const int projectionReceiveIndex = mDisplayListData->projectionReceiveIndex;
+        for (unsigned int i = 0; i < mDisplayListData->displayListOps.size(); i++) {
+            DisplayListOp *op = mDisplayListData->displayListOps[i];
+
+#if DEBUG_DISPLAY_LIST
+            op->output(level + 1);
+#endif
+            logBuffer.writeCommand(level, op->name());
+            handler(op, saveCountOffset, properties().getClipToBounds());
+
+            if (CC_UNLIKELY(i == projectionReceiveIndex && mProjectedNodes.size() > 0)) {
+                issueOperationsOfProjectedChildren(renderer, handler);
+            }
+        }
+
+        // for 3d root, draw children with positive z values
+        issueOperationsOf3dChildren(zTranslatedNodes, kPositiveZChildren, renderer, handler);
+    }
+
+    DISPLAY_LIST_LOGD("%*sRestoreToCount %d", (level + 1) * 2, "", restoreTo);
+    handler(new (alloc) RestoreToCountOp(restoreTo),
+            PROPERTY_SAVECOUNT, properties().getClipToBounds());
+    renderer.setOverrideLayerAlpha(1.0f);
+
+    DISPLAY_LIST_LOGD("%*sDone (%p, %s)", level * 2, "", this, getName());
+    handler.endMark();
+}
+
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h
new file mode 100644
index 0000000..294f436
--- /dev/null
+++ b/libs/hwui/RenderNode.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef RENDERNODE_H
+#define RENDERNODE_H
+
+#ifndef LOG_TAG
+    #define LOG_TAG "OpenGLRenderer"
+#endif
+
+#include <set>
+#include <vector>
+
+#include <SkCamera.h>
+#include <SkMatrix.h>
+
+#include <private/hwui/DrawGlInfo.h>
+
+#include <utils/KeyedVector.h>
+#include <utils/LinearAllocator.h>
+#include <utils/RefBase.h>
+#include <utils/SortedVector.h>
+#include <utils/String8.h>
+#include <utils/Vector.h>
+
+#include <cutils/compiler.h>
+
+#include <androidfw/ResourceTypes.h>
+
+#include "Debug.h"
+#include "Matrix.h"
+#include "DeferredDisplayList.h"
+#include "DisplayList.h"
+#include "RenderProperties.h"
+#include "TreeInfo.h"
+#include "utils/VirtualLightRefBase.h"
+
+class SkBitmap;
+class SkPaint;
+class SkPath;
+class SkRegion;
+
+namespace android {
+namespace uirenderer {
+
+class DeferredDisplayList;
+class DisplayListOp;
+class DisplayListRenderer;
+class OpenGLRenderer;
+class Rect;
+class Layer;
+class SkiaShader;
+
+class ClipRectOp;
+class SaveLayerOp;
+class SaveOp;
+class RestoreToCountOp;
+class DrawDisplayListOp;
+
+/**
+ * Primary class for storing recorded canvas commands, as well as per-View/ViewGroup display properties.
+ *
+ * Recording of canvas commands is somewhat similar to SkPicture, except the canvas-recording
+ * functionality is split between DisplayListRenderer (which manages the recording), DisplayListData
+ * (which holds the actual data), and DisplayList (which holds properties and performs playback onto
+ * a renderer).
+ *
+ * Note that DisplayListData is swapped out from beneath an individual DisplayList when a view's
+ * recorded stream of canvas operations is refreshed. The DisplayList (and its properties) stay
+ * attached.
+ */
+class RenderNode : public VirtualLightRefBase {
+public:
+    ANDROID_API RenderNode();
+    ANDROID_API virtual ~RenderNode();
+
+    // See flags defined in DisplayList.java
+    enum ReplayFlag {
+        kReplayFlag_ClipChildren = 0x1
+    };
+
+    ANDROID_API static void outputLogBuffer(int fd);
+
+    ANDROID_API void setStagingDisplayList(DisplayListData* newData);
+
+    void computeOrdering();
+
+    void deferNodeTree(DeferStateStruct& deferStruct);
+    void deferNodeInParent(DeferStateStruct& deferStruct, const int level);
+
+    void replayNodeTree(ReplayStateStruct& replayStruct);
+    void replayNodeInParent(ReplayStateStruct& replayStruct, const int level);
+
+    ANDROID_API void output(uint32_t level = 1);
+
+    bool isRenderable() const {
+        return mDisplayListData && mDisplayListData->hasDrawOps;
+    }
+
+    const char* getName() const {
+        return mName.string();
+    }
+
+    void setName(const char* name) {
+        if (name) {
+            char* lastPeriod = strrchr(name, '.');
+            if (lastPeriod) {
+                mName.setTo(lastPeriod + 1);
+            } else {
+                mName.setTo(name);
+            }
+        }
+    }
+
+    const RenderProperties& properties() {
+        return mProperties;
+    }
+
+    const RenderProperties& stagingProperties() {
+        return mStagingProperties;
+    }
+
+    RenderProperties& mutateStagingProperties() {
+        mNeedsPropertiesSync = true;
+        return mStagingProperties;
+    }
+
+    int getWidth() {
+        return properties().getWidth();
+    }
+
+    int getHeight() {
+        return properties().getHeight();
+    }
+
+    ANDROID_API virtual void prepareTree(TreeInfo& info);
+
+    // UI thread only!
+    ANDROID_API void addAnimator(const sp<RenderPropertyAnimator>& animator) {
+        mStagingAnimators.insert(animator);
+        mNeedsAnimatorsSync = true;
+    }
+
+    // UI thread only!
+    ANDROID_API void removeAnimator(const sp<RenderPropertyAnimator>& animator) {
+        mStagingAnimators.erase(animator);
+        mNeedsAnimatorsSync = true;
+    }
+
+private:
+    typedef key_value_pair_t<float, DrawDisplayListOp*> ZDrawDisplayListOpPair;
+
+    static size_t findNonNegativeIndex(const Vector<ZDrawDisplayListOpPair>& nodes) {
+        for (size_t i = 0; i < nodes.size(); i++) {
+            if (nodes[i].key >= 0.0f) return i;
+        }
+        return nodes.size();
+    }
+
+    enum ChildrenSelectMode {
+        kNegativeZChildren,
+        kPositiveZChildren
+    };
+
+    void applyViewPropertyTransforms(mat4& matrix, bool true3dTransform = false);
+
+    void computeOrderingImpl(DrawDisplayListOp* opState,
+            const SkPath* outlineOfProjectionSurface,
+            Vector<DrawDisplayListOp*>* compositedChildrenOfProjectionSurface,
+            const mat4* transformFromProjectionSurface);
+
+    template <class T>
+    inline void setViewProperties(OpenGLRenderer& renderer, T& handler);
+
+    void buildZSortedChildList(Vector<ZDrawDisplayListOpPair>& zTranslatedNodes);
+
+    template<class T>
+    inline void issueDrawShadowOperation(const Matrix4& transformFromParent, T& handler);
+
+    template <class T>
+    inline void issueOperationsOf3dChildren(const Vector<ZDrawDisplayListOpPair>& zTranslatedNodes,
+            ChildrenSelectMode mode, OpenGLRenderer& renderer, T& handler);
+
+    template <class T>
+    inline void issueOperationsOfProjectedChildren(OpenGLRenderer& renderer, T& handler);
+
+    /**
+     * Issue the RenderNode's operations into a handler, recursing for subtrees through
+     * DrawDisplayListOp's defer() or replay() methods
+     */
+    template <class T>
+    inline void issueOperations(OpenGLRenderer& renderer, T& handler);
+
+    class TextContainer {
+    public:
+        size_t length() const {
+            return mByteLength;
+        }
+
+        const char* text() const {
+            return (const char*) mText;
+        }
+
+        size_t mByteLength;
+        const char* mText;
+    };
+
+    void prepareTreeImpl(TreeInfo& info);
+    void pushStagingChanges(TreeInfo& info);
+    void evaluateAnimations(TreeInfo& info);
+    void prepareSubTree(TreeInfo& info, DisplayListData* subtree);
+
+    String8 mName;
+
+    bool mNeedsPropertiesSync;
+    RenderProperties mProperties;
+    RenderProperties mStagingProperties;
+
+    bool mNeedsDisplayListDataSync;
+    DisplayListData* mDisplayListData;
+    DisplayListData* mStagingDisplayListData;
+
+    bool mNeedsAnimatorsSync;
+    std::set< sp<RenderPropertyAnimator> > mStagingAnimators;
+    std::vector< sp<RenderPropertyAnimator> > mAnimators;
+
+    /**
+     * Draw time state - these properties are only set and used during rendering
+     */
+
+    // for projection surfaces, contains a list of all children items
+    Vector<DrawDisplayListOp*> mProjectedNodes;
+}; // class RenderNode
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* RENDERNODE_H */
diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp
new file mode 100644
index 0000000..99de1fc
--- /dev/null
+++ b/libs/hwui/RenderProperties.cpp
@@ -0,0 +1,204 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you mPrimitiveFields.may not use this file except in compliance with the License.
+ * You mPrimitiveFields.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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#include "RenderProperties.h"
+
+#include <utils/Trace.h>
+
+#include <SkCanvas.h>
+#include <SkMatrix.h>
+#include <SkPath.h>
+#include <SkPathOps.h>
+
+#include "Matrix.h"
+#include "utils/MathUtils.h"
+
+namespace android {
+namespace uirenderer {
+
+RenderProperties::PrimitiveFields::PrimitiveFields()
+        : mClipToBounds(true)
+        , mProjectBackwards(false)
+        , mProjectionReceiver(false)
+        , mAlpha(1)
+        , mHasOverlappingRendering(true)
+        , mElevation(0)
+        , mTranslationX(0), mTranslationY(0), mTranslationZ(0)
+        , mRotation(0), mRotationX(0), mRotationY(0)
+        , mScaleX(1), mScaleY(1)
+        , mPivotX(0), mPivotY(0)
+        , mLeft(0), mTop(0), mRight(0), mBottom(0)
+        , mWidth(0), mHeight(0)
+        , mPivotExplicitlySet(false)
+        , mMatrixOrPivotDirty(false)
+        , mCaching(false) {
+}
+
+RenderProperties::ComputedFields::ComputedFields()
+        : mTransformMatrix(NULL)
+        , mClipPath(NULL)
+        , mClipPathOp(SkRegion::kIntersect_Op) {
+}
+
+RenderProperties::ComputedFields::~ComputedFields() {
+    delete mTransformMatrix;
+    delete mClipPath;
+}
+
+RenderProperties::RenderProperties()
+        : mStaticMatrix(NULL)
+        , mAnimationMatrix(NULL) {
+}
+
+RenderProperties::~RenderProperties() {
+    delete mStaticMatrix;
+    delete mAnimationMatrix;
+}
+
+RenderProperties& RenderProperties::operator=(const RenderProperties& other) {
+    if (this != &other) {
+        mPrimitiveFields = other.mPrimitiveFields;
+        setStaticMatrix(other.getStaticMatrix());
+        setAnimationMatrix(other.getAnimationMatrix());
+        setCameraDistance(other.getCameraDistance());
+
+        // Update the computed clip path
+        updateClipPath();
+
+        // Force recalculation of the matrix, since other's dirty bit may be clear
+        mPrimitiveFields.mMatrixOrPivotDirty = true;
+        updateMatrix();
+    }
+    return *this;
+}
+
+void RenderProperties::debugOutputProperties(const int level) const {
+    if (mPrimitiveFields.mLeft != 0 || mPrimitiveFields.mTop != 0) {
+        ALOGD("%*sTranslate (left, top) %d, %d", level * 2, "", mPrimitiveFields.mLeft, mPrimitiveFields.mTop);
+    }
+    if (mStaticMatrix) {
+        ALOGD("%*sConcatMatrix (static) %p: " SK_MATRIX_STRING,
+                level * 2, "", mStaticMatrix, SK_MATRIX_ARGS(mStaticMatrix));
+    }
+    if (mAnimationMatrix) {
+        ALOGD("%*sConcatMatrix (animation) %p: " SK_MATRIX_STRING,
+                level * 2, "", mAnimationMatrix, SK_MATRIX_ARGS(mAnimationMatrix));
+    }
+    if (hasTransformMatrix()) {
+        if (isTransformTranslateOnly()) {
+            ALOGD("%*sTranslate %.2f, %.2f, %.2f",
+                    level * 2, "", getTranslationX(), getTranslationY(), getZ());
+        } else {
+            ALOGD("%*sConcatMatrix %p: " SK_MATRIX_STRING,
+                    level * 2, "", mComputedFields.mTransformMatrix, SK_MATRIX_ARGS(mComputedFields.mTransformMatrix));
+        }
+    }
+
+    bool clipToBoundsNeeded = mPrimitiveFields.mCaching ? false : mPrimitiveFields.mClipToBounds;
+    if (mPrimitiveFields.mAlpha < 1) {
+        if (mPrimitiveFields.mCaching) {
+            ALOGD("%*sSetOverrideLayerAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha);
+        } else if (!mPrimitiveFields.mHasOverlappingRendering) {
+            ALOGD("%*sScaleAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha);
+        } else {
+            int flags = SkCanvas::kHasAlphaLayer_SaveFlag;
+            if (clipToBoundsNeeded) {
+                flags |= SkCanvas::kClipToLayer_SaveFlag;
+                clipToBoundsNeeded = false; // clipping done by save layer
+            }
+            ALOGD("%*sSaveLayerAlpha %d, %d, %d, %d, %d, 0x%x", level * 2, "",
+                    0, 0, getWidth(), getHeight(),
+                    (int)(mPrimitiveFields.mAlpha * 255), flags);
+        }
+    }
+    if (clipToBoundsNeeded) {
+        ALOGD("%*sClipRect %d, %d, %d, %d", level * 2, "",
+                0, 0, getWidth(), getHeight());
+    }
+}
+
+void RenderProperties::updateMatrix() {
+    if (mPrimitiveFields.mMatrixOrPivotDirty) {
+        if (!mComputedFields.mTransformMatrix) {
+            // only allocate a mPrimitiveFields.matrix if we have a complex transform
+            mComputedFields.mTransformMatrix = new SkMatrix();
+        }
+        if (!mPrimitiveFields.mPivotExplicitlySet) {
+            mPrimitiveFields.mPivotX = mPrimitiveFields.mWidth / 2.0f;
+            mPrimitiveFields.mPivotY = mPrimitiveFields.mHeight / 2.0f;
+        }
+        SkMatrix* transform = mComputedFields.mTransformMatrix;
+        transform->reset();
+        if (MathUtils::isZero(getRotationX()) && MathUtils::isZero(getRotationY())) {
+            transform->setTranslate(getTranslationX(), getTranslationY());
+            transform->preRotate(getRotation(), getPivotX(), getPivotY());
+            transform->preScale(getScaleX(), getScaleY(), getPivotX(), getPivotY());
+        } else {
+            SkMatrix transform3D;
+            mComputedFields.mTransformCamera.save();
+            transform->preScale(getScaleX(), getScaleY(), getPivotX(), getPivotY());
+            mComputedFields.mTransformCamera.rotateX(mPrimitiveFields.mRotationX);
+            mComputedFields.mTransformCamera.rotateY(mPrimitiveFields.mRotationY);
+            mComputedFields.mTransformCamera.rotateZ(-mPrimitiveFields.mRotation);
+            mComputedFields.mTransformCamera.getMatrix(&transform3D);
+            transform3D.preTranslate(-getPivotX(), -getPivotY());
+            transform3D.postTranslate(getPivotX() + getTranslationX(),
+                    getPivotY() + getTranslationY());
+            transform->postConcat(transform3D);
+            mComputedFields.mTransformCamera.restore();
+        }
+        mPrimitiveFields.mMatrixOrPivotDirty = false;
+    }
+}
+
+void RenderProperties::updateClipPath() {
+    const SkPath* outlineClipPath = mPrimitiveFields.mOutline.willClip()
+            ? mPrimitiveFields.mOutline.getPath() : NULL;
+    const SkPath* revealClipPath = mPrimitiveFields.mRevealClip.getPath();
+
+    if (!outlineClipPath && !revealClipPath) {
+        // mComputedFields.mClipPath doesn't need to be updated, since it won't be used
+        return;
+    }
+
+    if (mComputedFields.mClipPath == NULL) {
+        mComputedFields.mClipPath = new SkPath();
+    }
+    SkPath* clipPath = mComputedFields.mClipPath;
+    mComputedFields.mClipPathOp = SkRegion::kIntersect_Op;
+
+    if (outlineClipPath && revealClipPath) {
+        SkPathOp op = kIntersect_PathOp;
+        if (mPrimitiveFields.mRevealClip.isInverseClip()) {
+            op = kDifference_PathOp; // apply difference step in the Op below, instead of draw time
+        }
+
+        Op(*outlineClipPath, *revealClipPath, op, clipPath);
+    } else if (outlineClipPath) {
+        *clipPath = *outlineClipPath;
+    } else {
+        *clipPath = *revealClipPath;
+        if (mPrimitiveFields.mRevealClip.isInverseClip()) {
+            // apply difference step at draw time
+            mComputedFields.mClipPathOp = SkRegion::kDifference_Op;
+        }
+    }
+}
+
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/RenderProperties.h b/libs/hwui/RenderProperties.h
new file mode 100644
index 0000000..6fc8bce
--- /dev/null
+++ b/libs/hwui/RenderProperties.h
@@ -0,0 +1,516 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef RENDERNODEPROPERTIES_H
+#define RENDERNODEPROPERTIES_H
+
+#include <algorithm>
+#include <stddef.h>
+#include <vector>
+#include <cutils/compiler.h>
+#include <androidfw/ResourceTypes.h>
+
+#include <SkCamera.h>
+#include <SkMatrix.h>
+#include <SkRegion.h>
+
+#include "Animator.h"
+#include "Rect.h"
+#include "RevealClip.h"
+#include "Outline.h"
+
+class SkBitmap;
+class SkPaint;
+
+namespace android {
+namespace uirenderer {
+
+class Matrix4;
+class RenderNode;
+
+/*
+ * Data structure that holds the properties for a RenderNode
+ */
+class RenderProperties {
+public:
+    RenderProperties();
+    virtual ~RenderProperties();
+
+    RenderProperties& operator=(const RenderProperties& other);
+
+    void setClipToBounds(bool clipToBounds) {
+        mPrimitiveFields.mClipToBounds = clipToBounds;
+    }
+
+    void setProjectBackwards(bool shouldProject) {
+        mPrimitiveFields.mProjectBackwards = shouldProject;
+    }
+
+    void setProjectionReceiver(bool shouldRecieve) {
+        mPrimitiveFields.mProjectionReceiver = shouldRecieve;
+    }
+
+    bool isProjectionReceiver() const {
+        return mPrimitiveFields.mProjectionReceiver;
+    }
+
+    void setStaticMatrix(const SkMatrix* matrix) {
+        delete mStaticMatrix;
+        if (matrix) {
+            mStaticMatrix = new SkMatrix(*matrix);
+        } else {
+            mStaticMatrix = NULL;
+        }
+    }
+
+    // Can return NULL
+    const SkMatrix* getStaticMatrix() const {
+        return mStaticMatrix;
+    }
+
+    void setAnimationMatrix(const SkMatrix* matrix) {
+        delete mAnimationMatrix;
+        if (matrix) {
+            mAnimationMatrix = new SkMatrix(*matrix);
+        } else {
+            mAnimationMatrix = NULL;
+        }
+    }
+
+    void setAlpha(float alpha) {
+        alpha = fminf(1.0f, fmaxf(0.0f, alpha));
+        if (alpha != mPrimitiveFields.mAlpha) {
+            mPrimitiveFields.mAlpha = alpha;
+        }
+    }
+
+    float getAlpha() const {
+        return mPrimitiveFields.mAlpha;
+    }
+
+    void setHasOverlappingRendering(bool hasOverlappingRendering) {
+        mPrimitiveFields.mHasOverlappingRendering = hasOverlappingRendering;
+    }
+
+    bool hasOverlappingRendering() const {
+        return mPrimitiveFields.mHasOverlappingRendering;
+    }
+
+    void setElevation(float elevation) {
+        if (elevation != mPrimitiveFields.mElevation) {
+            mPrimitiveFields.mElevation = elevation;
+            // mMatrixOrPivotDirty not set, since matrix doesn't respect Z
+        }
+    }
+
+    float getElevation() const {
+        return mPrimitiveFields.mElevation;
+    }
+
+    void setTranslationX(float translationX) {
+        if (translationX != mPrimitiveFields.mTranslationX) {
+            mPrimitiveFields.mTranslationX = translationX;
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+        }
+    }
+
+    float getTranslationX() const {
+        return mPrimitiveFields.mTranslationX;
+    }
+
+    void setTranslationY(float translationY) {
+        if (translationY != mPrimitiveFields.mTranslationY) {
+            mPrimitiveFields.mTranslationY = translationY;
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+        }
+    }
+
+    float getTranslationY() const {
+        return mPrimitiveFields.mTranslationY;
+    }
+
+    void setTranslationZ(float translationZ) {
+        if (translationZ != mPrimitiveFields.mTranslationZ) {
+            mPrimitiveFields.mTranslationZ = translationZ;
+            // mMatrixOrPivotDirty not set, since matrix doesn't respect Z
+        }
+    }
+
+    float getTranslationZ() const {
+        return mPrimitiveFields.mTranslationZ;
+    }
+
+    // Animation helper
+    void setX(float value) {
+        setTranslationX(value - getLeft());
+    }
+
+    // Animation helper
+    float getX() const {
+        return getLeft() + getTranslationX();
+    }
+
+    // Animation helper
+    void setY(float value) {
+        setTranslationY(value - getTop());
+    }
+
+    // Animation helper
+    float getY() const {
+        return getTop() + getTranslationY();
+    }
+
+    // Animation helper
+    void setZ(float value) {
+        setTranslationZ(value - getElevation());
+    }
+
+    float getZ() const {
+        return getElevation() + getTranslationZ();
+    }
+
+    void setRotation(float rotation) {
+        if (rotation != mPrimitiveFields.mRotation) {
+            mPrimitiveFields.mRotation = rotation;
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+        }
+    }
+
+    float getRotation() const {
+        return mPrimitiveFields.mRotation;
+    }
+
+    void setRotationX(float rotationX) {
+        if (rotationX != mPrimitiveFields.mRotationX) {
+            mPrimitiveFields.mRotationX = rotationX;
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+        }
+    }
+
+    float getRotationX() const {
+        return mPrimitiveFields.mRotationX;
+    }
+
+    void setRotationY(float rotationY) {
+        if (rotationY != mPrimitiveFields.mRotationY) {
+            mPrimitiveFields.mRotationY = rotationY;
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+        }
+    }
+
+    float getRotationY() const {
+        return mPrimitiveFields.mRotationY;
+    }
+
+    void setScaleX(float scaleX) {
+        if (scaleX != mPrimitiveFields.mScaleX) {
+            mPrimitiveFields.mScaleX = scaleX;
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+        }
+    }
+
+    float getScaleX() const {
+        return mPrimitiveFields.mScaleX;
+    }
+
+    void setScaleY(float scaleY) {
+        if (scaleY != mPrimitiveFields.mScaleY) {
+            mPrimitiveFields.mScaleY = scaleY;
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+        }
+    }
+
+    float getScaleY() const {
+        return mPrimitiveFields.mScaleY;
+    }
+
+    void setPivotX(float pivotX) {
+        mPrimitiveFields.mPivotX = pivotX;
+        mPrimitiveFields.mMatrixOrPivotDirty = true;
+        mPrimitiveFields.mPivotExplicitlySet = true;
+    }
+
+    /* Note that getPivotX and getPivotY are adjusted by updateMatrix(),
+     * so the value returned mPrimitiveFields.may be stale if the RenderProperties has been
+     * mPrimitiveFields.modified since the last call to updateMatrix()
+     */
+    float getPivotX() const {
+        return mPrimitiveFields.mPivotX;
+    }
+
+    void setPivotY(float pivotY) {
+        mPrimitiveFields.mPivotY = pivotY;
+        mPrimitiveFields.mMatrixOrPivotDirty = true;
+        mPrimitiveFields.mPivotExplicitlySet = true;
+    }
+
+    float getPivotY() const {
+        return mPrimitiveFields.mPivotY;
+    }
+
+    bool isPivotExplicitlySet() const {
+        return mPrimitiveFields.mPivotExplicitlySet;
+    }
+
+    void setCameraDistance(float distance) {
+        if (distance != getCameraDistance()) {
+            mPrimitiveFields.mMatrixOrPivotDirty = true;
+            mComputedFields.mTransformCamera.setCameraLocation(0, 0, distance);
+        }
+    }
+
+    float getCameraDistance() const {
+        // TODO: update getCameraLocationZ() to be const
+        return const_cast<Sk3DView*>(&mComputedFields.mTransformCamera)->getCameraLocationZ();
+    }
+
+    void setLeft(int left) {
+        if (left != mPrimitiveFields.mLeft) {
+            mPrimitiveFields.mLeft = left;
+            mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    float getLeft() const {
+        return mPrimitiveFields.mLeft;
+    }
+
+    void setTop(int top) {
+        if (top != mPrimitiveFields.mTop) {
+            mPrimitiveFields.mTop = top;
+            mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    float getTop() const {
+        return mPrimitiveFields.mTop;
+    }
+
+    void setRight(int right) {
+        if (right != mPrimitiveFields.mRight) {
+            mPrimitiveFields.mRight = right;
+            mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    float getRight() const {
+        return mPrimitiveFields.mRight;
+    }
+
+    void setBottom(int bottom) {
+        if (bottom != mPrimitiveFields.mBottom) {
+            mPrimitiveFields.mBottom = bottom;
+            mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    float getBottom() const {
+        return mPrimitiveFields.mBottom;
+    }
+
+    void setLeftTop(int left, int top) {
+        if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop) {
+            mPrimitiveFields.mLeft = left;
+            mPrimitiveFields.mTop = top;
+            mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft;
+            mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    void setLeftTopRightBottom(int left, int top, int right, int bottom) {
+        if (left != mPrimitiveFields.mLeft || top != mPrimitiveFields.mTop
+                || right != mPrimitiveFields.mRight || bottom != mPrimitiveFields.mBottom) {
+            mPrimitiveFields.mLeft = left;
+            mPrimitiveFields.mTop = top;
+            mPrimitiveFields.mRight = right;
+            mPrimitiveFields.mBottom = bottom;
+            mPrimitiveFields.mWidth = mPrimitiveFields.mRight - mPrimitiveFields.mLeft;
+            mPrimitiveFields.mHeight = mPrimitiveFields.mBottom - mPrimitiveFields.mTop;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    void offsetLeftRight(float offset) {
+        if (offset != 0) {
+            mPrimitiveFields.mLeft += offset;
+            mPrimitiveFields.mRight += offset;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    void offsetTopBottom(float offset) {
+        if (offset != 0) {
+            mPrimitiveFields.mTop += offset;
+            mPrimitiveFields.mBottom += offset;
+            if (!mPrimitiveFields.mPivotExplicitlySet) {
+                mPrimitiveFields.mMatrixOrPivotDirty = true;
+            }
+        }
+    }
+
+    void setCaching(bool caching) {
+        mPrimitiveFields.mCaching = caching;
+    }
+
+    int getWidth() const {
+        return mPrimitiveFields.mWidth;
+    }
+
+    int getHeight() const {
+        return mPrimitiveFields.mHeight;
+    }
+
+    const SkMatrix* getAnimationMatrix() const {
+        return mAnimationMatrix;
+    }
+
+    bool hasTransformMatrix() const {
+        return getTransformMatrix() && !getTransformMatrix()->isIdentity();
+    }
+
+    // May only call this if hasTransformMatrix() is true
+    bool isTransformTranslateOnly() const {
+        return getTransformMatrix()->getType() == SkMatrix::kTranslate_Mask;
+    }
+
+    const SkMatrix* getTransformMatrix() const {
+        LOG_ALWAYS_FATAL_IF(mPrimitiveFields.mMatrixOrPivotDirty, "Cannot get a dirty matrix!");
+        return mComputedFields.mTransformMatrix;
+    }
+
+    bool getCaching() const {
+        return mPrimitiveFields.mCaching;
+    }
+
+    bool getClipToBounds() const {
+        return mPrimitiveFields.mClipToBounds;
+    }
+
+    bool getHasOverlappingRendering() const {
+        return mPrimitiveFields.mHasOverlappingRendering;
+    }
+
+    const Outline& getOutline() const {
+        return mPrimitiveFields.mOutline;
+    }
+
+    const RevealClip& getRevealClip() const {
+        return mPrimitiveFields.mRevealClip;
+    }
+
+    bool getProjectBackwards() const {
+        return mPrimitiveFields.mProjectBackwards;
+    }
+
+    void debugOutputProperties(const int level) const;
+
+    ANDROID_API void updateMatrix();
+
+    ANDROID_API void updateClipPath();
+
+    // signals that mComputedFields.mClipPath is up to date, and should be used for clipping
+    bool hasClippingPath() const {
+        return mPrimitiveFields.mOutline.willClip() || mPrimitiveFields.mRevealClip.willClip();
+    }
+
+    const SkPath* getClippingPath() const {
+        return hasClippingPath() ? mComputedFields.mClipPath : NULL;
+    }
+
+    SkRegion::Op getClippingPathOp() const {
+        return mComputedFields.mClipPathOp;
+    }
+
+    Outline& mutableOutline() {
+        return mPrimitiveFields.mOutline;
+    }
+
+    RevealClip& mutableRevealClip() {
+        return mPrimitiveFields.mRevealClip;
+    }
+
+private:
+
+    // Rendering properties
+    struct PrimitiveFields {
+        PrimitiveFields();
+
+        Outline mOutline;
+        RevealClip mRevealClip;
+        bool mClipToBounds;
+        bool mProjectBackwards;
+        bool mProjectionReceiver;
+        float mAlpha;
+        bool mHasOverlappingRendering;
+        float mElevation;
+        float mTranslationX, mTranslationY, mTranslationZ;
+        float mRotation, mRotationX, mRotationY;
+        float mScaleX, mScaleY;
+        float mPivotX, mPivotY;
+        int mLeft, mTop, mRight, mBottom;
+        int mWidth, mHeight;
+        bool mPivotExplicitlySet;
+        bool mMatrixOrPivotDirty;
+        bool mCaching;
+    } mPrimitiveFields;
+
+    SkMatrix* mStaticMatrix;
+    SkMatrix* mAnimationMatrix;
+
+    /**
+     * These fields are all generated from other properties and are not set directly.
+     */
+    struct ComputedFields {
+        ComputedFields();
+        ~ComputedFields();
+
+        /**
+         * Stores the total transformation of the DisplayList based upon its scalar
+         * translate/rotate/scale properties.
+         *
+         * In the common translation-only case, the matrix isn't necessarily allocated,
+         * and the mTranslation properties are used directly.
+         */
+        SkMatrix* mTransformMatrix;
+
+        Sk3DView mTransformCamera;
+        SkPath* mClipPath; // TODO: remove this, create new ops for efficient/special case clipping
+        SkRegion::Op mClipPathOp;
+    } mComputedFields;
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* RENDERNODEPROPERTIES_H */
diff --git a/libs/hwui/Renderer.h b/libs/hwui/Renderer.h
new file mode 100644
index 0000000..3209a53
--- /dev/null
+++ b/libs/hwui/Renderer.h
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#ifndef ANDROID_HWUI_RENDERER_H
+#define ANDROID_HWUI_RENDERER_H
+
+#include <SkRegion.h>
+
+#include <utils/String8.h>
+
+#include "AssetAtlas.h"
+#include "SkPaint.h"
+
+namespace android {
+
+class Functor;
+struct Res_png_9patch;
+
+namespace uirenderer {
+
+class RenderNode;
+class Layer;
+class Matrix4;
+class SkiaColorFilter;
+class SkiaShader;
+class Patch;
+
+enum DrawOpMode {
+    kDrawOpMode_Immediate,
+    kDrawOpMode_Defer,
+    kDrawOpMode_Flush
+};
+
+/**
+ * Hwui's abstract version of Canvas.
+ *
+ * Provides methods for frame state operations, as well as the SkCanvas style transform/clip state,
+ * and varied drawing operations.
+ *
+ * Should at some point interact with native SkCanvas.
+ */
+class ANDROID_API Renderer {
+public:
+    virtual ~Renderer() {}
+
+    /**
+     * Indicates whether this renderer is recording drawing commands for later playback.
+     * If this method returns true, the drawing commands are deferred.
+     */
+    virtual bool isRecording() const {
+        return false;
+    }
+
+    /**
+     * Safely retrieves the mode from the specified xfermode. If the specified
+     * xfermode is null, the mode is assumed to be SkXfermode::kSrcOver_Mode.
+     */
+    static inline SkXfermode::Mode getXfermode(SkXfermode* mode) {
+        SkXfermode::Mode resultMode;
+        if (!SkXfermode::AsMode(mode, &resultMode)) {
+            resultMode = SkXfermode::kSrcOver_Mode;
+        }
+        return resultMode;
+    }
+
+// ----------------------------------------------------------------------------
+// Frame state operations
+// ----------------------------------------------------------------------------
+    /**
+     * Sets the dimension of the underlying drawing surface. This method must
+     * be called at least once every time the drawing surface changes size.
+     *
+     * @param width The width in pixels of the underlysing surface
+     * @param height The height in pixels of the underlysing surface
+     */
+    virtual void setViewport(int width, int height) = 0;
+
+    /**
+     * Prepares the renderer to draw a frame. This method must be invoked
+     * at the beginning of each frame. When this method is invoked, the
+     * entire drawing surface is assumed to be redrawn.
+     *
+     * @param opaque If true, the target surface is considered opaque
+     *               and will not be cleared. If false, the target surface
+     *               will be cleared
+     */
+    virtual status_t prepare(bool opaque) = 0;
+
+    /**
+     * Prepares the renderer to draw a frame. This method must be invoked
+     * at the beginning of each frame. Only the specified rectangle of the
+     * frame is assumed to be dirty. A clip will automatically be set to
+     * the specified rectangle.
+     *
+     * @param left The left coordinate of the dirty rectangle
+     * @param top The top coordinate of the dirty rectangle
+     * @param right The right coordinate of the dirty rectangle
+     * @param bottom The bottom coordinate of the dirty rectangle
+     * @param opaque If true, the target surface is considered opaque
+     *               and will not be cleared. If false, the target surface
+     *               will be cleared in the specified dirty rectangle
+     */
+    virtual status_t prepareDirty(float left, float top, float right, float bottom,
+            bool opaque) = 0;
+
+    /**
+     * Indicates the end of a frame. This method must be invoked whenever
+     * the caller is done rendering a frame.
+     */
+    virtual void finish() = 0;
+
+    /**
+     * This method must be invoked before handing control over to a draw functor.
+     * See callDrawGLFunction() for instance.
+     *
+     * This command must not be recorded inside display lists.
+     */
+    virtual void interrupt() = 0;
+
+    /**
+     * This method must be invoked after getting control back from a draw functor.
+     *
+     * This command must not be recorded inside display lists.
+     */
+    virtual void resume() = 0;
+
+// ----------------------------------------------------------------------------
+// Canvas state operations
+// ----------------------------------------------------------------------------
+    // Save (layer)
+    virtual int getSaveCount() const = 0;
+    virtual int save(int flags) = 0;
+    virtual void restore() = 0;
+    virtual void restoreToCount(int saveCount) = 0;
+
+    virtual int saveLayer(float left, float top, float right, float bottom,
+            const SkPaint* paint, int flags) = 0;
+
+    int saveLayerAlpha(float left, float top, float right, float bottom,
+            int alpha, int flags) {
+        SkPaint paint;
+        paint.setAlpha(alpha);
+        return saveLayer(left, top, right, bottom, &paint, flags);
+    }
+
+    // Matrix
+    virtual void getMatrix(SkMatrix* outMatrix) const = 0;
+    virtual void translate(float dx, float dy, float dz = 0.0f) = 0;
+    virtual void rotate(float degrees) = 0;
+    virtual void scale(float sx, float sy) = 0;
+    virtual void skew(float sx, float sy) = 0;
+
+    virtual void setMatrix(const SkMatrix* matrix) = 0;
+    virtual void concatMatrix(const SkMatrix* matrix) = 0;
+
+    // clip
+    virtual const Rect& getLocalClipBounds() const = 0;
+    virtual bool quickRejectConservative(float left, float top,
+            float right, float bottom) const = 0;
+    virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op) = 0;
+    virtual bool clipPath(const SkPath* path, SkRegion::Op op) = 0;
+    virtual bool clipRegion(const SkRegion* region, SkRegion::Op op) = 0;
+
+    // Misc - should be implemented with SkPaint inspection
+    virtual void resetShader() = 0;
+    virtual void setupShader(SkiaShader* shader) = 0;
+
+    virtual void resetShadow() = 0;
+    virtual void setupShadow(float radius, float dx, float dy, int color) = 0;
+
+    virtual void resetPaintFilter() = 0;
+    virtual void setupPaintFilter(int clearBits, int setBits) = 0;
+
+// ----------------------------------------------------------------------------
+// Canvas draw operations
+// ----------------------------------------------------------------------------
+    virtual status_t drawColor(int color, SkXfermode::Mode mode) = 0;
+
+    // Bitmap-based
+    virtual status_t drawBitmap(const SkBitmap* bitmap, float left, float top,
+            const SkPaint* paint) = 0;
+    virtual status_t drawBitmap(const SkBitmap* bitmap, const SkMatrix* matrix,
+            const SkPaint* paint) = 0;
+    virtual status_t drawBitmap(const SkBitmap* bitmap, float srcLeft, float srcTop,
+            float srcRight, float srcBottom, float dstLeft, float dstTop,
+            float dstRight, float dstBottom, const SkPaint* paint) = 0;
+    virtual status_t drawBitmapData(const SkBitmap* bitmap, float left, float top,
+            const SkPaint* paint) = 0;
+    virtual status_t drawBitmapMesh(const SkBitmap* bitmap, int meshWidth, int meshHeight,
+            const float* vertices, const int* colors, const SkPaint* paint) = 0;
+    virtual status_t drawPatch(const SkBitmap* bitmap, const Res_png_9patch* patch,
+            float left, float top, float right, float bottom, const SkPaint* paint) = 0;
+
+    // Shapes
+    virtual status_t drawRect(float left, float top, float right, float bottom,
+            const SkPaint* paint) = 0;
+    virtual status_t drawRects(const float* rects, int count, const SkPaint* paint) = 0;
+    virtual status_t drawRoundRect(float left, float top, float right, float bottom,
+            float rx, float ry, const SkPaint* paint) = 0;
+    virtual status_t drawCircle(float x, float y, float radius, const SkPaint* paint) = 0;
+    virtual status_t drawOval(float left, float top, float right, float bottom,
+            const SkPaint* paint) = 0;
+    virtual status_t drawArc(float left, float top, float right, float bottom,
+            float startAngle, float sweepAngle, bool useCenter, const SkPaint* paint) = 0;
+    virtual status_t drawPath(const SkPath* path, const SkPaint* paint) = 0;
+    virtual status_t drawLines(const float* points, int count, const SkPaint* paint) = 0;
+    virtual status_t drawPoints(const float* points, int count, const SkPaint* paint) = 0;
+
+    // Text
+    virtual status_t drawText(const char* text, int bytesCount, int count, float x, float y,
+            const float* positions, const SkPaint* paint, float totalAdvance, const Rect& bounds,
+            DrawOpMode drawOpMode = kDrawOpMode_Immediate) = 0;
+    virtual status_t drawTextOnPath(const char* text, int bytesCount, int count, const SkPath* path,
+            float hOffset, float vOffset, const SkPaint* paint) = 0;
+    virtual status_t drawPosText(const char* text, int bytesCount, int count,
+            const float* positions, const SkPaint* paint) = 0;
+
+// ----------------------------------------------------------------------------
+// Canvas draw operations - special
+// ----------------------------------------------------------------------------
+    virtual status_t drawLayer(Layer* layer, float x, float y) = 0;
+    virtual status_t drawDisplayList(RenderNode* displayList, Rect& dirty,
+            int32_t replayFlags) = 0;
+
+    // TODO: rename for consistency
+    virtual status_t callDrawGLFunction(Functor* functor, Rect& dirty) = 0;
+}; // class Renderer
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_RENDERER_H
diff --git a/libs/hwui/ResourceCache.cpp b/libs/hwui/ResourceCache.cpp
index 77292bf..13a3e8e 100644
--- a/libs/hwui/ResourceCache.cpp
+++ b/libs/hwui/ResourceCache.cpp
@@ -40,7 +40,7 @@
 
 ResourceCache::ResourceCache() {
     Mutex::Autolock _l(mLock);
-    mCache = new KeyedVector<void*, ResourceReference*>();
+    mCache = new KeyedVector<const void*, ResourceReference*>();
 }
 
 ResourceCache::~ResourceCache() {
@@ -61,13 +61,13 @@
     incrementRefcountLocked(resource, resourceType);
 }
 
-void ResourceCache::incrementRefcount(SkBitmap* bitmapResource) {
+void ResourceCache::incrementRefcount(const SkBitmap* bitmapResource) {
     bitmapResource->pixelRef()->globalRef();
     SkSafeRef(bitmapResource->getColorTable());
     incrementRefcount((void*) bitmapResource, kBitmap);
 }
 
-void ResourceCache::incrementRefcount(SkPath* pathResource) {
+void ResourceCache::incrementRefcount(const SkPath* pathResource) {
     incrementRefcount((void*) pathResource, kPath);
 }
 
@@ -76,12 +76,7 @@
     incrementRefcount((void*) shaderResource, kShader);
 }
 
-void ResourceCache::incrementRefcount(SkiaColorFilter* filterResource) {
-    SkSafeRef(filterResource->getSkColorFilter());
-    incrementRefcount((void*) filterResource, kColorFilter);
-}
-
-void ResourceCache::incrementRefcount(Res_png_9patch* patchResource) {
+void ResourceCache::incrementRefcount(const Res_png_9patch* patchResource) {
     incrementRefcount((void*) patchResource, kNinePatch);
 }
 
@@ -99,13 +94,13 @@
     ref->refCount++;
 }
 
-void ResourceCache::incrementRefcountLocked(SkBitmap* bitmapResource) {
+void ResourceCache::incrementRefcountLocked(const SkBitmap* bitmapResource) {
     bitmapResource->pixelRef()->globalRef();
     SkSafeRef(bitmapResource->getColorTable());
     incrementRefcountLocked((void*) bitmapResource, kBitmap);
 }
 
-void ResourceCache::incrementRefcountLocked(SkPath* pathResource) {
+void ResourceCache::incrementRefcountLocked(const SkPath* pathResource) {
     incrementRefcountLocked((void*) pathResource, kPath);
 }
 
@@ -114,12 +109,7 @@
     incrementRefcountLocked((void*) shaderResource, kShader);
 }
 
-void ResourceCache::incrementRefcountLocked(SkiaColorFilter* filterResource) {
-    SkSafeRef(filterResource->getSkColorFilter());
-    incrementRefcountLocked((void*) filterResource, kColorFilter);
-}
-
-void ResourceCache::incrementRefcountLocked(Res_png_9patch* patchResource) {
+void ResourceCache::incrementRefcountLocked(const Res_png_9patch* patchResource) {
     incrementRefcountLocked((void*) patchResource, kNinePatch);
 }
 
@@ -132,13 +122,13 @@
     decrementRefcountLocked(resource);
 }
 
-void ResourceCache::decrementRefcount(SkBitmap* bitmapResource) {
+void ResourceCache::decrementRefcount(const SkBitmap* bitmapResource) {
     bitmapResource->pixelRef()->globalUnref();
     SkSafeUnref(bitmapResource->getColorTable());
     decrementRefcount((void*) bitmapResource);
 }
 
-void ResourceCache::decrementRefcount(SkPath* pathResource) {
+void ResourceCache::decrementRefcount(const SkPath* pathResource) {
     decrementRefcount((void*) pathResource);
 }
 
@@ -147,12 +137,7 @@
     decrementRefcount((void*) shaderResource);
 }
 
-void ResourceCache::decrementRefcount(SkiaColorFilter* filterResource) {
-    SkSafeUnref(filterResource->getSkColorFilter());
-    decrementRefcount((void*) filterResource);
-}
-
-void ResourceCache::decrementRefcount(Res_png_9patch* patchResource) {
+void ResourceCache::decrementRefcount(const Res_png_9patch* patchResource) {
     decrementRefcount((void*) patchResource);
 }
 
@@ -173,13 +158,13 @@
     }
 }
 
-void ResourceCache::decrementRefcountLocked(SkBitmap* bitmapResource) {
+void ResourceCache::decrementRefcountLocked(const SkBitmap* bitmapResource) {
     bitmapResource->pixelRef()->globalUnref();
     SkSafeUnref(bitmapResource->getColorTable());
     decrementRefcountLocked((void*) bitmapResource);
 }
 
-void ResourceCache::decrementRefcountLocked(SkPath* pathResource) {
+void ResourceCache::decrementRefcountLocked(const SkPath* pathResource) {
     decrementRefcountLocked((void*) pathResource);
 }
 
@@ -188,12 +173,7 @@
     decrementRefcountLocked((void*) shaderResource);
 }
 
-void ResourceCache::decrementRefcountLocked(SkiaColorFilter* filterResource) {
-    SkSafeUnref(filterResource->getSkColorFilter());
-    decrementRefcountLocked((void*) filterResource);
-}
-
-void ResourceCache::decrementRefcountLocked(Res_png_9patch* patchResource) {
+void ResourceCache::decrementRefcountLocked(const Res_png_9patch* patchResource) {
     decrementRefcountLocked((void*) patchResource);
 }
 
@@ -224,12 +204,12 @@
     }
 }
 
-void ResourceCache::destructor(SkBitmap* resource) {
+void ResourceCache::destructor(const SkBitmap* resource) {
     Mutex::Autolock _l(mLock);
     destructorLocked(resource);
 }
 
-void ResourceCache::destructorLocked(SkBitmap* resource) {
+void ResourceCache::destructorLocked(const SkBitmap* resource) {
     ssize_t index = mCache->indexOfKey(resource);
     ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL;
     if (ref == NULL) {
@@ -266,25 +246,6 @@
     }
 }
 
-void ResourceCache::destructor(SkiaColorFilter* resource) {
-    Mutex::Autolock _l(mLock);
-    destructorLocked(resource);
-}
-
-void ResourceCache::destructorLocked(SkiaColorFilter* resource) {
-    ssize_t index = mCache->indexOfKey(resource);
-    ResourceReference* ref = index >= 0 ? mCache->valueAt(index) : NULL;
-    if (ref == NULL) {
-        // If we're not tracking this resource, just delete it
-        delete resource;
-        return;
-    }
-    ref->destroyed = true;
-    if (ref->refCount == 0) {
-        deleteResourceReferenceLocked(resource, ref);
-    }
-}
-
 void ResourceCache::destructor(Res_png_9patch* resource) {
     Mutex::Autolock _l(mLock);
     destructorLocked(resource);
@@ -348,7 +309,7 @@
  * This method should only be called while the mLock mutex is held (that mutex is grabbed
  * by the various destructor() and recycle() methods which call this method).
  */
-void ResourceCache::deleteResourceReferenceLocked(void* resource, ResourceReference* ref) {
+void ResourceCache::deleteResourceReferenceLocked(const void* resource, ResourceReference* ref) {
     if (ref->recycled && ref->resourceType == kBitmap) {
         ((SkBitmap*) resource)->setPixels(NULL, NULL);
     }
@@ -377,11 +338,6 @@
                 delete shader;
             }
             break;
-            case kColorFilter: {
-                SkiaColorFilter* filter = (SkiaColorFilter*) resource;
-                delete filter;
-            }
-            break;
             case kNinePatch: {
                 if (Caches::hasInstance()) {
                     Caches::getInstance().patchCache.removeDeferred((Res_png_9patch*) resource);
diff --git a/libs/hwui/ResourceCache.h b/libs/hwui/ResourceCache.h
index ea0c1b5..4097ba4 100644
--- a/libs/hwui/ResourceCache.h
+++ b/libs/hwui/ResourceCache.h
@@ -20,7 +20,6 @@
 #include <cutils/compiler.h>
 
 #include <SkBitmap.h>
-#include <SkiaColorFilter.h>
 #include <SkiaShader.h>
 
 #include <utils/KeyedVector.h>
@@ -38,7 +37,6 @@
 enum ResourceType {
     kBitmap,
     kShader,
-    kColorFilter,
     kNinePatch,
     kPath,
     kLayer
@@ -70,51 +68,45 @@
     void lock();
     void unlock();
 
-    void incrementRefcount(SkPath* resource);
-    void incrementRefcount(SkBitmap* resource);
+    void incrementRefcount(const SkPath* resource);
+    void incrementRefcount(const SkBitmap* resource);
     void incrementRefcount(SkiaShader* resource);
-    void incrementRefcount(SkiaColorFilter* resource);
-    void incrementRefcount(Res_png_9patch* resource);
+    void incrementRefcount(const Res_png_9patch* resource);
     void incrementRefcount(Layer* resource);
 
-    void incrementRefcountLocked(SkPath* resource);
-    void incrementRefcountLocked(SkBitmap* resource);
+    void incrementRefcountLocked(const SkPath* resource);
+    void incrementRefcountLocked(const SkBitmap* resource);
     void incrementRefcountLocked(SkiaShader* resource);
-    void incrementRefcountLocked(SkiaColorFilter* resource);
-    void incrementRefcountLocked(Res_png_9patch* resource);
+    void incrementRefcountLocked(const Res_png_9patch* resource);
     void incrementRefcountLocked(Layer* resource);
 
-    void decrementRefcount(SkBitmap* resource);
-    void decrementRefcount(SkPath* resource);
+    void decrementRefcount(const SkBitmap* resource);
+    void decrementRefcount(const SkPath* resource);
     void decrementRefcount(SkiaShader* resource);
-    void decrementRefcount(SkiaColorFilter* resource);
-    void decrementRefcount(Res_png_9patch* resource);
+    void decrementRefcount(const Res_png_9patch* resource);
     void decrementRefcount(Layer* resource);
 
-    void decrementRefcountLocked(SkBitmap* resource);
-    void decrementRefcountLocked(SkPath* resource);
+    void decrementRefcountLocked(const SkBitmap* resource);
+    void decrementRefcountLocked(const SkPath* resource);
     void decrementRefcountLocked(SkiaShader* resource);
-    void decrementRefcountLocked(SkiaColorFilter* resource);
-    void decrementRefcountLocked(Res_png_9patch* resource);
+    void decrementRefcountLocked(const Res_png_9patch* resource);
     void decrementRefcountLocked(Layer* resource);
 
     void destructor(SkPath* resource);
-    void destructor(SkBitmap* resource);
+    void destructor(const SkBitmap* resource);
     void destructor(SkiaShader* resource);
-    void destructor(SkiaColorFilter* resource);
     void destructor(Res_png_9patch* resource);
 
     void destructorLocked(SkPath* resource);
-    void destructorLocked(SkBitmap* resource);
+    void destructorLocked(const SkBitmap* resource);
     void destructorLocked(SkiaShader* resource);
-    void destructorLocked(SkiaColorFilter* resource);
     void destructorLocked(Res_png_9patch* resource);
 
     bool recycle(SkBitmap* resource);
     bool recycleLocked(SkBitmap* resource);
 
 private:
-    void deleteResourceReferenceLocked(void* resource, ResourceReference* ref);
+    void deleteResourceReferenceLocked(const void* resource, ResourceReference* ref);
 
     void incrementRefcount(void* resource, ResourceType resourceType);
     void incrementRefcountLocked(void* resource, ResourceType resourceType);
@@ -131,7 +123,7 @@
      */
     mutable Mutex mLock;
 
-    KeyedVector<void*, ResourceReference*>* mCache;
+    KeyedVector<const void*, ResourceReference*>* mCache;
 };
 
 }; // namespace uirenderer
diff --git a/libs/hwui/RevealClip.h b/libs/hwui/RevealClip.h
new file mode 100644
index 0000000..ece8498
--- /dev/null
+++ b/libs/hwui/RevealClip.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef REVEALCLIP_H
+#define REVEALCLIP_H
+
+#include <SkPath.h>
+
+#include "Rect.h"
+
+namespace android {
+namespace uirenderer {
+
+class RevealClip {
+public:
+    RevealClip()
+            : mShouldClip(false)
+            , mInverseClip(false)
+            , mX(0)
+            , mY(0)
+            , mRadius(0) {}
+
+    void set(bool shouldClip, bool inverseClip, float x, float y, float radius) {
+        mShouldClip = shouldClip;
+        mInverseClip = inverseClip;
+        mX = x;
+        mY = y;
+        mRadius = radius;
+
+        mPath.rewind();
+        if (mShouldClip) {
+            mPath.addCircle(x, y, radius);
+        }
+    }
+
+    bool hasConvexClip() const {
+        return mShouldClip && !mInverseClip;
+    }
+
+    bool isInverseClip() const {
+        return mInverseClip;
+    }
+
+    bool willClip() const {
+        return mShouldClip;
+    }
+
+    const SkPath* getPath() const {
+        if (!mShouldClip) return NULL;
+
+        return &mPath;
+    }
+
+private:
+    bool mShouldClip;
+    bool mInverseClip;
+    float mX;
+    float mY;
+    float mRadius;
+    SkPath mPath;
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* REVEALCLIP_H */
diff --git a/libs/hwui/ShadowTessellator.cpp b/libs/hwui/ShadowTessellator.cpp
new file mode 100644
index 0000000..be49aed
--- /dev/null
+++ b/libs/hwui/ShadowTessellator.cpp
@@ -0,0 +1,255 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+#define ATRACE_TAG ATRACE_TAG_VIEW
+
+#include <math.h>
+#include <utils/Log.h>
+#include <utils/Trace.h>
+
+#include "AmbientShadow.h"
+#include "Caches.h"
+#include "ShadowTessellator.h"
+#include "SpotShadow.h"
+
+namespace android {
+namespace uirenderer {
+
+template<typename T>
+static inline T max(T a, T b) {
+    return a > b ? a : b;
+}
+
+VertexBufferMode ShadowTessellator::tessellateAmbientShadow(bool isCasterOpaque,
+        const Vector3* casterPolygon, int casterVertexCount,
+        const Vector3& centroid3d, const Rect& casterBounds,
+        const Rect& localClip, float maxZ, VertexBuffer& shadowVertexBuffer) {
+    ATRACE_CALL();
+
+    // A bunch of parameters to tweak the shadow.
+    // TODO: Allow some of these changable by debug settings or APIs.
+    float heightFactor = 1.0f / 128;
+    const float geomFactor = 64;
+
+    Caches& caches = Caches::getInstance();
+    if (CC_UNLIKELY(caches.propertyAmbientRatio > 0.0f)) {
+        heightFactor *= caches.propertyAmbientRatio;
+    }
+
+    Rect ambientShadowBounds(casterBounds);
+    ambientShadowBounds.outset(maxZ * geomFactor * heightFactor);
+
+    if (!localClip.intersects(ambientShadowBounds)) {
+#if DEBUG_SHADOW
+        ALOGD("Ambient shadow is out of clip rect!");
+#endif
+        return kVertexBufferMode_OnePolyRingShadow;
+    }
+
+    return AmbientShadow::createAmbientShadow(isCasterOpaque, casterPolygon,
+            casterVertexCount, centroid3d, heightFactor, geomFactor,
+            shadowVertexBuffer);
+
+}
+
+VertexBufferMode ShadowTessellator::tessellateSpotShadow(bool isCasterOpaque,
+        const Vector3* casterPolygon, int casterVertexCount,
+        const mat4& receiverTransform,
+        int screenWidth, int screenHeight, const Rect& casterBounds,
+        const Rect& localClip, VertexBuffer& shadowVertexBuffer) {
+    ATRACE_CALL();
+
+    Caches& caches = Caches::getInstance();
+
+    // A bunch of parameters to tweak the shadow.
+    // TODO: Allow some of these changable by debug settings or APIs.
+    int maximal = max(screenWidth, screenHeight);
+    Vector3 lightCenter(screenWidth * 0.5f, 0, maximal);
+
+    if (CC_UNLIKELY(caches.propertyLightPosY > 0)) {
+        lightCenter.y = - caches.propertyLightPosY; // negated since this shifts up
+    }
+    if (CC_UNLIKELY(caches.propertyLightPosZ > 0)) {
+        lightCenter.z = caches.propertyLightPosZ;
+    }
+
+
+#if DEBUG_SHADOW
+    ALOGD("light center %f %f %f", lightCenter.x, lightCenter.y, lightCenter.z);
+#endif
+
+    // light position (because it's in local space) needs to compensate for receiver transform
+    // TODO: should apply to light orientation, not just position
+    Matrix4 reverseReceiverTransform;
+    reverseReceiverTransform.loadInverse(receiverTransform);
+    reverseReceiverTransform.mapPoint3d(lightCenter);
+
+    float lightSize = maximal / 4;
+    const int lightVertexCount = 8;
+
+    if (CC_UNLIKELY(caches.propertyLightDiameter > 0)) {
+        lightSize = caches.propertyLightDiameter;
+    }
+
+    // Now light and caster are both in local space, we will check whether
+    // the shadow is within the clip area.
+    Rect lightRect = Rect(lightCenter.x - lightSize, lightCenter.y - lightSize,
+            lightCenter.x + lightSize, lightCenter.y + lightSize);
+    lightRect.unionWith(localClip);
+    if (!lightRect.intersects(casterBounds)) {
+#if DEBUG_SHADOW
+        ALOGD("Spot shadow is out of clip rect!");
+#endif
+        return kVertexBufferMode_OnePolyRingShadow;
+    }
+
+    VertexBufferMode mode = SpotShadow::createSpotShadow(isCasterOpaque,
+            casterPolygon, casterVertexCount, lightCenter, lightSize,
+            lightVertexCount, shadowVertexBuffer);
+
+#if DEBUG_SHADOW
+     if(shadowVertexBuffer.getVertexCount() <= 0) {
+        ALOGD("Spot shadow generation failed %d", shadowVertexBuffer.getVertexCount());
+     }
+#endif
+     return mode;
+}
+
+void ShadowTessellator::generateShadowIndices(uint16_t* shadowIndices) {
+    int currentIndex = 0;
+    const int rays = SHADOW_RAY_COUNT;
+    // For the penumbra area.
+    for (int layer = 0; layer < 2; layer ++) {
+        int baseIndex = layer * rays;
+        for (int i = 0; i < rays; i++) {
+            shadowIndices[currentIndex++] = i + baseIndex;
+            shadowIndices[currentIndex++] = rays + i + baseIndex;
+        }
+        // To close the loop, back to the ray 0.
+        shadowIndices[currentIndex++] = 0 + baseIndex;
+         // Note this is the same as the first index of next layer loop.
+        shadowIndices[currentIndex++] = rays + baseIndex;
+    }
+
+#if DEBUG_SHADOW
+    if (currentIndex != MAX_SHADOW_INDEX_COUNT) {
+        ALOGW("vertex index count is wrong. current %d, expected %d",
+                currentIndex, MAX_SHADOW_INDEX_COUNT);
+    }
+    for (int i = 0; i < MAX_SHADOW_INDEX_COUNT; i++) {
+        ALOGD("vertex index is (%d, %d)", i, shadowIndices[i]);
+    }
+#endif
+}
+
+/**
+ * Calculate the centroid of a 2d polygon.
+ *
+ * @param poly The polygon, which is represented in a Vector2 array.
+ * @param polyLength The length of the polygon in terms of number of vertices.
+ * @return the centroid of the polygon.
+ */
+Vector2 ShadowTessellator::centroid2d(const Vector2* poly, int polyLength) {
+    double sumx = 0;
+    double sumy = 0;
+    int p1 = polyLength - 1;
+    double area = 0;
+    for (int p2 = 0; p2 < polyLength; p2++) {
+        double x1 = poly[p1].x;
+        double y1 = poly[p1].y;
+        double x2 = poly[p2].x;
+        double y2 = poly[p2].y;
+        double a = (x1 * y2 - x2 * y1);
+        sumx += (x1 + x2) * a;
+        sumy += (y1 + y2) * a;
+        area += a;
+        p1 = p2;
+    }
+
+    Vector2 centroid = poly[0];
+    if (area != 0) {
+        centroid = Vector2(sumx / (3 * area), sumy / (3 * area));
+    } else {
+        ALOGW("Area is 0 while computing centroid!");
+    }
+    return centroid;
+}
+
+/**
+ * Test whether the polygon is order in clockwise.
+ *
+ * @param polygon the polygon as a Vector2 array
+ * @param len the number of points of the polygon
+ */
+bool ShadowTessellator::isClockwise(const Vector2* polygon, int len) {
+    double sum = 0;
+    double p1x = polygon[len - 1].x;
+    double p1y = polygon[len - 1].y;
+    for (int i = 0; i < len; i++) {
+
+        double p2x = polygon[i].x;
+        double p2y = polygon[i].y;
+        sum += p1x * p2y - p2x * p1y;
+        p1x = p2x;
+        p1y = p2y;
+    }
+    return sum < 0;
+}
+
+bool ShadowTessellator::isClockwisePath(const SkPath& path) {
+    SkPath::Iter iter(path, false);
+    SkPoint pts[4];
+    SkPath::Verb v;
+
+    Vector<Vector2> arrayForDirection;
+    while (SkPath::kDone_Verb != (v = iter.next(pts))) {
+            switch (v) {
+            case SkPath::kMove_Verb:
+                arrayForDirection.add(Vector2(pts[0].x(), pts[0].y()));
+                break;
+            case SkPath::kLine_Verb:
+                arrayForDirection.add(Vector2(pts[1].x(), pts[1].y()));
+                break;
+            case SkPath::kQuad_Verb:
+                arrayForDirection.add(Vector2(pts[1].x(), pts[1].y()));
+                arrayForDirection.add(Vector2(pts[2].x(), pts[2].y()));
+                break;
+            case SkPath::kCubic_Verb:
+                arrayForDirection.add(Vector2(pts[1].x(), pts[1].y()));
+                arrayForDirection.add(Vector2(pts[2].x(), pts[2].y()));
+                arrayForDirection.add(Vector2(pts[3].x(), pts[3].y()));
+                break;
+            default:
+                break;
+            }
+    }
+
+    return isClockwise(arrayForDirection.array(), arrayForDirection.size());
+}
+
+void ShadowTessellator::reverseVertexArray(Vertex* polygon, int len) {
+    int n = len / 2;
+    for (int i = 0; i < n; i++) {
+        Vertex tmp = polygon[i];
+        int k = len - 1 - i;
+        polygon[i] = polygon[k];
+        polygon[k] = tmp;
+    }
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/ShadowTessellator.h b/libs/hwui/ShadowTessellator.h
new file mode 100644
index 0000000..e5a3da1
--- /dev/null
+++ b/libs/hwui/ShadowTessellator.h
@@ -0,0 +1,109 @@
+
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#ifndef ANDROID_HWUI_SHADOW_TESSELLATOR_H
+#define ANDROID_HWUI_SHADOW_TESSELLATOR_H
+
+#include "Debug.h"
+#include "Matrix.h"
+#include "OpenGLRenderer.h"
+#include "VertexBuffer.h"
+
+namespace android {
+namespace uirenderer {
+
+// All SHADOW_* are used to define all the geometry property of shadows.
+// Use a simplified example to illustrate the geometry setup here.
+// Assuming we use 6 rays and only 1 layer, Then we will have 2 hexagons, which
+// are 0 to 5 and 6 to 11. The area between them will be the penumbra area, and
+// the area inside the 2nd hexagon is the umbra.
+// Ambient shadow is using only 1 layer for opaque caster, otherwise, spot
+// shadow and ambient shadow are using 2 layers.
+// Triange strip indices for penumbra area: (0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11, 0, 6)
+//                 0
+//
+//      5          6         1
+//           11         7
+//
+//           10         8
+//      4          9         2
+//
+//                 3
+
+// The total number of rays starting from the centroid of shadow area, in order
+// to generate the shadow geometry.
+#define SHADOW_RAY_COUNT 128
+
+// The total number of all the vertices representing the shadow.
+// For the case we only have 1 layer, then we will just fill only 2/3 of it.
+#define SHADOW_VERTEX_COUNT (3 * SHADOW_RAY_COUNT)
+
+// The total number of indices used for drawing the shadow geometry as triangle strips.
+// Depending on the mode we are drawing, we can have 1 layer or 2 layers.
+// Therefore, we only build the longer index buffer.
+#define TWO_POLY_RING_SHADOW_INDEX_COUNT (4 * (SHADOW_RAY_COUNT + 1))
+#define ONE_POLY_RING_SHADOW_INDEX_COUNT (2 * (SHADOW_RAY_COUNT + 1))
+
+#define MAX_SHADOW_INDEX_COUNT TWO_POLY_RING_SHADOW_INDEX_COUNT
+
+#define SHADOW_MIN_CASTER_Z 0.001f
+
+#define MINIMAL_DELTA_THETA (M_PI / 180 / 1000)
+
+class ShadowTessellator {
+public:
+    static VertexBufferMode tessellateAmbientShadow(bool isCasterOpaque,
+            const Vector3* casterPolygon, int casterVertexCount,
+            const Vector3& centroid3d,  const Rect& casterBounds,
+            const Rect& localClip, float maxZ, VertexBuffer& shadowVertexBuffer);
+
+    static VertexBufferMode tessellateSpotShadow(bool isCasterOpaque,
+            const Vector3* casterPolygon, int casterVertexCount,
+            const mat4& receiverTransform,
+            int screenWidth, int screenHeight, const Rect& casterBounds,
+            const Rect& localClip, VertexBuffer& shadowVertexBuffer);
+
+    static void generateShadowIndices(uint16_t*  shadowIndices);
+
+    static Vector2 centroid2d(const Vector2* poly, int polyLength);
+
+    static bool isClockwise(const Vector2* polygon, int len);
+
+    /**
+     * Determine whether the path is clockwise, using the control points.
+     *
+     * TODO: Given the skia is using inverted Y coordinate, shadow system needs
+     * to convert to the same coordinate to avoid the extra reverse.
+     *
+     * @param path The path to be examined.
+     */
+    static bool isClockwisePath(const SkPath &path);
+
+    /**
+     * Reverse the vertex array.
+     *
+     * @param polygon The vertex array to be reversed.
+     * @param len The length of the vertex array.
+     */
+    static void reverseVertexArray(Vertex* polygon, int len);
+
+}; // ShadowTessellator
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_SHADOW_TESSELLATOR_H
diff --git a/libs/hwui/SkiaColorFilter.cpp b/libs/hwui/SkiaColorFilter.cpp
deleted file mode 100644
index df918be..0000000
--- a/libs/hwui/SkiaColorFilter.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#include "SkiaColorFilter.h"
-
-namespace android {
-namespace uirenderer {
-
-///////////////////////////////////////////////////////////////////////////////
-// Base color filter
-///////////////////////////////////////////////////////////////////////////////
-
-SkiaColorFilter::SkiaColorFilter(SkColorFilter *skFilter, Type type, bool blend):
-        mType(type), mBlend(blend), mSkFilter(skFilter) {
-}
-
-SkiaColorFilter::~SkiaColorFilter() {
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Color matrix filter
-///////////////////////////////////////////////////////////////////////////////
-
-SkiaColorMatrixFilter::SkiaColorMatrixFilter(SkColorFilter* skFilter, float* matrix, float* vector):
-        SkiaColorFilter(skFilter, kColorMatrix, true), mMatrix(matrix), mVector(vector) {
-    // Skia uses the range [0..255] for the addition vector, but we need
-    // the [0..1] range to apply the vector in GLSL
-    for (int i = 0; i < 4; i++) {
-        mVector[i] /= 255.0f;
-    }
-
-    // TODO: We should be smarter about this
-    mBlend = true;
-}
-
-SkiaColorMatrixFilter::~SkiaColorMatrixFilter() {
-    delete[] mMatrix;
-    delete[] mVector;
-}
-
-void SkiaColorMatrixFilter::describe(ProgramDescription& description,
-        const Extensions& extensions) {
-    description.colorOp = ProgramDescription::kColorMatrix;
-}
-
-void SkiaColorMatrixFilter::setupProgram(Program* program) {
-    glUniformMatrix4fv(program->getUniform("colorMatrix"), 1, GL_FALSE, &mMatrix[0]);
-    glUniform4fv(program->getUniform("colorMatrixVector"), 1, mVector);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Lighting color filter
-///////////////////////////////////////////////////////////////////////////////
-
-SkiaLightingFilter::SkiaLightingFilter(SkColorFilter* skFilter, int multiply, int add):
-        SkiaColorFilter(skFilter, kLighting, true) {
-    mMulR = ((multiply >> 16) & 0xFF) / 255.0f;
-    mMulG = ((multiply >>  8) & 0xFF) / 255.0f;
-    mMulB = ((multiply      ) & 0xFF) / 255.0f;
-
-    mAddR = ((add >> 16) & 0xFF) / 255.0f;
-    mAddG = ((add >>  8) & 0xFF) / 255.0f;
-    mAddB = ((add      ) & 0xFF) / 255.0f;
-
-    // A lighting filter always ignores alpha
-    mBlend = false;
-}
-
-void SkiaLightingFilter::describe(ProgramDescription& description, const Extensions& extensions) {
-    description.colorOp = ProgramDescription::kColorLighting;
-}
-
-void SkiaLightingFilter::setupProgram(Program* program) {
-    glUniform4f(program->getUniform("lightingMul"), mMulR, mMulG, mMulB, 1.0f);
-    glUniform4f(program->getUniform("lightingAdd"), mAddR, mAddG, mAddB, 0.0f);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-// Blend color filter
-///////////////////////////////////////////////////////////////////////////////
-
-SkiaBlendFilter::SkiaBlendFilter(SkColorFilter* skFilter, int color, SkXfermode::Mode mode):
-        SkiaColorFilter(skFilter, kBlend, true), mMode(mode) {
-    const int alpha = (color >> 24) & 0xFF;
-    mA = alpha / 255.0f;
-    mR = mA * ((color >> 16) & 0xFF) / 255.0f;
-    mG = mA * ((color >>  8) & 0xFF) / 255.0f;
-    mB = mA * ((color      ) & 0xFF) / 255.0f;
-
-    // TODO: We should do something smarter here
-    mBlend = true;
-}
-
-void SkiaBlendFilter::describe(ProgramDescription& description, const Extensions& extensions) {
-    description.colorOp = ProgramDescription::kColorBlend;
-    description.colorMode = mMode;
-}
-
-void SkiaBlendFilter::setupProgram(Program* program) {
-    glUniform4f(program->getUniform("colorBlend"), mR, mG, mB, mA);
-}
-
-}; // namespace uirenderer
-}; // namespace android
diff --git a/libs/hwui/SkiaColorFilter.h b/libs/hwui/SkiaColorFilter.h
deleted file mode 100644
index 2feb834..0000000
--- a/libs/hwui/SkiaColorFilter.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef ANDROID_HWUI_SKIA_COLOR_FILTER_H
-#define ANDROID_HWUI_SKIA_COLOR_FILTER_H
-
-#include <GLES2/gl2.h>
-#include <SkColorFilter.h>
-
-#include <cutils/compiler.h>
-
-#include "ProgramCache.h"
-#include "Extensions.h"
-
-namespace android {
-namespace uirenderer {
-
-///////////////////////////////////////////////////////////////////////////////
-// Base color filter
-///////////////////////////////////////////////////////////////////////////////
-
-/**
- * Represents a Skia color filter. A color filter modifies a ProgramDescription
- * and sets uniforms on the resulting shaders.
- */
-struct SkiaColorFilter {
-    /**
-     * Type of Skia color filter in use.
-     */
-    enum Type {
-        kNone,
-        kColorMatrix,
-        kLighting,
-        kBlend,
-    };
-
-    ANDROID_API SkiaColorFilter(SkColorFilter *skFilter, Type type, bool blend);
-    virtual ~SkiaColorFilter();
-
-    virtual void describe(ProgramDescription& description, const Extensions& extensions) = 0;
-    virtual void setupProgram(Program* program) = 0;
-
-    inline bool blend() const {
-        return mBlend;
-    }
-
-    Type type() const {
-        return mType;
-    }
-
-    SkColorFilter* getSkColorFilter() {
-        return mSkFilter;
-    }
-
-protected:
-    Type mType;
-    bool mBlend;
-
-private:
-    SkColorFilter *mSkFilter;
-}; // struct SkiaColorFilter
-
-///////////////////////////////////////////////////////////////////////////////
-// Implementations
-///////////////////////////////////////////////////////////////////////////////
-
-/**
- * A color filter that multiplies the source color with a matrix and adds a vector.
- */
-struct SkiaColorMatrixFilter: public SkiaColorFilter {
-    ANDROID_API SkiaColorMatrixFilter(SkColorFilter *skFilter, float* matrix, float* vector);
-    ~SkiaColorMatrixFilter();
-
-    void describe(ProgramDescription& description, const Extensions& extensions);
-    void setupProgram(Program* program);
-
-private:
-    float* mMatrix;
-    float* mVector;
-}; // struct SkiaColorMatrixFilter
-
-/**
- * A color filters that multiplies the source color with a fixed value and adds
- * another fixed value. Ignores the alpha channel of both arguments.
- */
-struct SkiaLightingFilter: public SkiaColorFilter {
-    ANDROID_API SkiaLightingFilter(SkColorFilter *skFilter, int multiply, int add);
-
-    void describe(ProgramDescription& description, const Extensions& extensions);
-    void setupProgram(Program* program);
-
-private:
-    GLfloat mMulR, mMulG, mMulB;
-    GLfloat mAddR, mAddG, mAddB;
-}; // struct SkiaLightingFilter
-
-/**
- * A color filters that blends the source color with a specified destination color
- * and PorterDuff blending mode.
- */
-struct SkiaBlendFilter: public SkiaColorFilter {
-    ANDROID_API SkiaBlendFilter(SkColorFilter *skFilter, int color, SkXfermode::Mode mode);
-
-    void describe(ProgramDescription& description, const Extensions& extensions);
-    void setupProgram(Program* program);
-
-private:
-    SkXfermode::Mode mMode;
-    GLfloat mR, mG, mB, mA;
-}; // struct SkiaBlendFilter
-
-}; // namespace uirenderer
-}; // namespace android
-
-#endif // ANDROID_HWUI_SKIA_COLOR_FILTER_H
diff --git a/libs/hwui/SkiaShader.cpp b/libs/hwui/SkiaShader.cpp
index 797ed10..6a4a0c8 100644
--- a/libs/hwui/SkiaShader.cpp
+++ b/libs/hwui/SkiaShader.cpp
@@ -73,7 +73,7 @@
 }
 
 SkiaShader::SkiaShader(Type type, SkShader* key, SkShader::TileMode tileX,
-        SkShader::TileMode tileY, SkMatrix* matrix, bool blend):
+        SkShader::TileMode tileY, const SkMatrix* matrix, bool blend):
         mType(type), mKey(key), mTileX(tileX), mTileY(tileY), mBlend(blend),
         mCaches(NULL) {
     setMatrix(matrix);
@@ -101,6 +101,49 @@
 }
 
 ///////////////////////////////////////////////////////////////////////////////
+// Layer shader
+///////////////////////////////////////////////////////////////////////////////
+
+SkiaLayerShader::SkiaLayerShader(Layer* layer, const SkMatrix* matrix):
+        SkiaShader(kBitmap, NULL, SkShader::kClamp_TileMode, SkShader::kClamp_TileMode,
+                matrix, layer->isBlend()), mLayer(layer) {
+    updateLocalMatrix(matrix);
+}
+
+SkiaShader* SkiaLayerShader::copy() {
+    SkiaLayerShader* copy = new SkiaLayerShader();
+    copy->copyFrom(*this);
+    copy->mLayer = mLayer;
+    return copy;
+}
+
+void SkiaLayerShader::describe(ProgramDescription& description, const Extensions& extensions) {
+    description.hasBitmap = true;
+}
+
+void SkiaLayerShader::setupProgram(Program* program, const mat4& modelView,
+        const Snapshot& snapshot, GLuint* textureUnit) {
+    GLuint textureSlot = (*textureUnit)++;
+    Caches::getInstance().activeTexture(textureSlot);
+
+    const float width = mLayer->getWidth();
+    const float height = mLayer->getHeight();
+
+    mat4 textureTransform;
+    computeScreenSpaceMatrix(textureTransform, modelView);
+
+    // Uniforms
+    mLayer->bindTexture();
+    mLayer->setWrap(GL_CLAMP_TO_EDGE);
+    mLayer->setFilter(GL_LINEAR);
+
+    glUniform1i(program->getUniform("bitmapSampler"), textureSlot);
+    glUniformMatrix4fv(program->getUniform("textureTransform"), 1,
+            GL_FALSE, &textureTransform.data[0]);
+    glUniform2f(program->getUniform("textureDimension"), 1.0f / width, 1.0f / height);
+}
+
+///////////////////////////////////////////////////////////////////////////////
 // Bitmap shader
 ///////////////////////////////////////////////////////////////////////////////
 
@@ -142,7 +185,7 @@
 }
 
 void SkiaBitmapShader::setupProgram(Program* program, const mat4& modelView,
-        const Snapshot& snapshot, GLuint* textureUnit) {
+        const Snapshot&, GLuint* textureUnit) {
     GLuint textureSlot = (*textureUnit)++;
     Caches::getInstance().activeTexture(textureSlot);
 
@@ -228,7 +271,7 @@
 }
 
 void SkiaLinearGradientShader::setupProgram(Program* program, const mat4& modelView,
-        const Snapshot& snapshot, GLuint* textureUnit) {
+        const Snapshot&, GLuint* textureUnit) {
     if (CC_UNLIKELY(!mIsSimple)) {
         GLuint textureSlot = (*textureUnit)++;
         Caches::getInstance().activeTexture(textureSlot);
@@ -264,7 +307,7 @@
 SkiaCircularGradientShader::SkiaCircularGradientShader(float x, float y, float radius,
         uint32_t* colors, float* positions, int count, SkShader* key, SkShader::TileMode tileMode,
         SkMatrix* matrix, bool blend):
-        SkiaSweepGradientShader(kCircularGradient, x, y, colors, positions, count, key,
+        SkiaSweepGradientShader(kCircularGradient, colors, positions, count, key,
                 tileMode, matrix, blend) {
     SkMatrix unitMatrix;
     toCircularUnitMatrix(x, y, radius, &unitMatrix);
@@ -314,11 +357,12 @@
     mIsSimple = count == 2;
 }
 
-SkiaSweepGradientShader::SkiaSweepGradientShader(Type type, float x, float y, uint32_t* colors,
+SkiaSweepGradientShader::SkiaSweepGradientShader(Type type, uint32_t* colors,
         float* positions, int count, SkShader* key, SkShader::TileMode tileMode,
         SkMatrix* matrix, bool blend):
         SkiaShader(type, key, tileMode, tileMode, matrix, blend),
         mColors(colors), mPositions(positions), mCount(count) {
+    // protected method, that doesn't setup mUnitMatrix - should be handled by subclass
 
     mIsSimple = count == 2 && tileMode == SkShader::kClamp_TileMode;
 }
diff --git a/libs/hwui/SkiaShader.h b/libs/hwui/SkiaShader.h
index cc56c50..9f30257 100644
--- a/libs/hwui/SkiaShader.h
+++ b/libs/hwui/SkiaShader.h
@@ -43,7 +43,8 @@
  * Represents a Skia shader. A shader will modify the GL context and active
  * program to recreate the original effect.
  */
-struct SkiaShader {
+class SkiaShader {
+public:
     /**
      * Type of Skia shader in use.
      */
@@ -57,7 +58,7 @@
     };
 
     ANDROID_API SkiaShader(Type type, SkShader* key, SkShader::TileMode tileX,
-            SkShader::TileMode tileY, SkMatrix* matrix, bool blend);
+            SkShader::TileMode tileY, const SkMatrix* matrix, bool blend);
     virtual ~SkiaShader();
 
     virtual SkiaShader* copy() = 0;
@@ -87,7 +88,7 @@
         return mGenerationId;
     }
 
-    void setMatrix(SkMatrix* matrix) {
+    void setMatrix(const SkMatrix* matrix) {
         updateLocalMatrix(matrix);
         mGenerationId++;
     }
@@ -133,6 +134,24 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 /**
+ * A shader that draws a layer.
+ */
+struct SkiaLayerShader: public SkiaShader {
+    SkiaLayerShader(Layer* layer, const SkMatrix* matrix);
+    SkiaShader* copy();
+
+    void describe(ProgramDescription& description, const Extensions& extensions);
+    void setupProgram(Program* program, const mat4& modelView, const Snapshot& snapshot,
+            GLuint* textureUnit);
+
+private:
+    SkiaLayerShader() {
+    }
+
+    Layer* mLayer;
+}; // struct SkiaLayerShader
+
+/**
  * A shader that draws a bitmap.
  */
 struct SkiaBitmapShader: public SkiaShader {
@@ -192,7 +211,7 @@
             GLuint* textureUnit);
 
 protected:
-    SkiaSweepGradientShader(Type type, float x, float y, uint32_t* colors, float* positions,
+    SkiaSweepGradientShader(Type type, uint32_t* colors, float* positions,
             int count, SkShader* key, SkShader::TileMode tileMode, SkMatrix* matrix, bool blend);
     SkiaSweepGradientShader() {
     }
diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h
index 5bdb18a..038aea8 100644
--- a/libs/hwui/Snapshot.h
+++ b/libs/hwui/Snapshot.h
@@ -108,7 +108,12 @@
      * Returns the current clip in local coordinates. The clip rect is
      * transformed by the inverse transform matrix.
      */
-    ANDROID_API const Rect& getLocalClip();
+    const Rect& getLocalClip();
+
+    /**
+     * Returns the current clip in render target coordinates.
+     */
+    const Rect& getRenderTargetClip() { return *clipRect; }
 
     /**
      * Resets the clip to the specified rect.
@@ -238,7 +243,7 @@
 
     mat4 mTransformRoot;
     Rect mClipRectRoot;
-    Rect mLocalClip;
+    Rect mLocalClip; // don't use directly, call getLocalClip() which initializes this
 
     SkRegion mClipRegionRoot;
 
diff --git a/libs/hwui/SpotShadow.cpp b/libs/hwui/SpotShadow.cpp
new file mode 100644
index 0000000..3ebe7b4
--- /dev/null
+++ b/libs/hwui/SpotShadow.cpp
@@ -0,0 +1,931 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define LOG_TAG "OpenGLRenderer"
+
+#define SHADOW_SHRINK_SCALE 0.1f
+
+#include <math.h>
+#include <stdlib.h>
+#include <utils/Log.h>
+
+#include "ShadowTessellator.h"
+#include "SpotShadow.h"
+#include "Vertex.h"
+
+namespace android {
+namespace uirenderer {
+
+static const double EPSILON = 1e-7;
+
+/**
+ * Calculate the angle between and x and a y coordinate.
+ * The atan2 range from -PI to PI.
+ */
+static float angle(const Vector2& point, const Vector2& center) {
+    return atan2(point.y - center.y, point.x - center.x);
+}
+
+/**
+ * Calculate the intersection of a ray with the line segment defined by two points.
+ *
+ * Returns a negative value in error conditions.
+
+ * @param rayOrigin The start of the ray
+ * @param dx The x vector of the ray
+ * @param dy The y vector of the ray
+ * @param p1 The first point defining the line segment
+ * @param p2 The second point defining the line segment
+ * @return The distance along the ray if it intersects with the line segment, negative if otherwise
+ */
+static float rayIntersectPoints(const Vector2& rayOrigin, float dx, float dy,
+        const Vector2& p1, const Vector2& p2) {
+    // The math below is derived from solving this formula, basically the
+    // intersection point should stay on both the ray and the edge of (p1, p2).
+    // solve([p1x+t*(p2x-p1x)=dx*t2+px,p1y+t*(p2y-p1y)=dy*t2+py],[t,t2]);
+
+    double divisor = (dx * (p1.y - p2.y) + dy * p2.x - dy * p1.x);
+    if (divisor == 0) return -1.0f; // error, invalid divisor
+
+#if DEBUG_SHADOW
+    double interpVal = (dx * (p1.y - rayOrigin.y) + dy * rayOrigin.x - dy * p1.x) / divisor;
+    if (interpVal < 0 || interpVal > 1) {
+        ALOGW("rayIntersectPoints is hitting outside the segment %f", interpVal);
+    }
+#endif
+
+    double distance = (p1.x * (rayOrigin.y - p2.y) + p2.x * (p1.y - rayOrigin.y) +
+            rayOrigin.x * (p2.y - p1.y)) / divisor;
+
+    return distance; // may be negative in error cases
+}
+
+/**
+ * Sort points by their X coordinates
+ *
+ * @param points the points as a Vector2 array.
+ * @param pointsLength the number of vertices of the polygon.
+ */
+void SpotShadow::xsort(Vector2* points, int pointsLength) {
+    quicksortX(points, 0, pointsLength - 1);
+}
+
+/**
+ * compute the convex hull of a collection of Points
+ *
+ * @param points the points as a Vector2 array.
+ * @param pointsLength the number of vertices of the polygon.
+ * @param retPoly pre allocated array of floats to put the vertices
+ * @return the number of points in the polygon 0 if no intersection
+ */
+int SpotShadow::hull(Vector2* points, int pointsLength, Vector2* retPoly) {
+    xsort(points, pointsLength);
+    int n = pointsLength;
+    Vector2 lUpper[n];
+    lUpper[0] = points[0];
+    lUpper[1] = points[1];
+
+    int lUpperSize = 2;
+
+    for (int i = 2; i < n; i++) {
+        lUpper[lUpperSize] = points[i];
+        lUpperSize++;
+
+        while (lUpperSize > 2 && !ccw(
+                lUpper[lUpperSize - 3].x, lUpper[lUpperSize - 3].y,
+                lUpper[lUpperSize - 2].x, lUpper[lUpperSize - 2].y,
+                lUpper[lUpperSize - 1].x, lUpper[lUpperSize - 1].y)) {
+            // Remove the middle point of the three last
+            lUpper[lUpperSize - 2].x = lUpper[lUpperSize - 1].x;
+            lUpper[lUpperSize - 2].y = lUpper[lUpperSize - 1].y;
+            lUpperSize--;
+        }
+    }
+
+    Vector2 lLower[n];
+    lLower[0] = points[n - 1];
+    lLower[1] = points[n - 2];
+
+    int lLowerSize = 2;
+
+    for (int i = n - 3; i >= 0; i--) {
+        lLower[lLowerSize] = points[i];
+        lLowerSize++;
+
+        while (lLowerSize > 2 && !ccw(
+                lLower[lLowerSize - 3].x, lLower[lLowerSize - 3].y,
+                lLower[lLowerSize - 2].x, lLower[lLowerSize - 2].y,
+                lLower[lLowerSize - 1].x, lLower[lLowerSize - 1].y)) {
+            // Remove the middle point of the three last
+            lLower[lLowerSize - 2] = lLower[lLowerSize - 1];
+            lLowerSize--;
+        }
+    }
+
+    // output points in CW ordering
+    const int total = lUpperSize + lLowerSize - 2;
+    int outIndex = total - 1;
+    for (int i = 0; i < lUpperSize; i++) {
+        retPoly[outIndex] = lUpper[i];
+        outIndex--;
+    }
+
+    for (int i = 1; i < lLowerSize - 1; i++) {
+        retPoly[outIndex] = lLower[i];
+        outIndex--;
+    }
+    // TODO: Add test harness which verify that all the points are inside the hull.
+    return total;
+}
+
+/**
+ * Test whether the 3 points form a counter clockwise turn.
+ *
+ * @return true if a right hand turn
+ */
+bool SpotShadow::ccw(double ax, double ay, double bx, double by,
+        double cx, double cy) {
+    return (bx - ax) * (cy - ay) - (by - ay) * (cx - ax) > EPSILON;
+}
+
+/**
+ * Calculates the intersection of poly1 with poly2 and put in poly2.
+ * Note that both poly1 and poly2 must be in CW order already!
+ *
+ * @param poly1 The 1st polygon, as a Vector2 array.
+ * @param poly1Length The number of vertices of 1st polygon.
+ * @param poly2 The 2nd and output polygon, as a Vector2 array.
+ * @param poly2Length The number of vertices of 2nd polygon.
+ * @return number of vertices in output polygon as poly2.
+ */
+int SpotShadow::intersection(const Vector2* poly1, int poly1Length,
+        Vector2* poly2, int poly2Length) {
+#if DEBUG_SHADOW
+    if (!ShadowTessellator::isClockwise(poly1, poly1Length)) {
+        ALOGW("Poly1 is not clockwise! Intersection is wrong!");
+    }
+    if (!ShadowTessellator::isClockwise(poly2, poly2Length)) {
+        ALOGW("Poly2 is not clockwise! Intersection is wrong!");
+    }
+#endif
+    Vector2 poly[poly1Length * poly2Length + 2];
+    int count = 0;
+    int pcount = 0;
+
+    // If one vertex from one polygon sits inside another polygon, add it and
+    // count them.
+    for (int i = 0; i < poly1Length; i++) {
+        if (testPointInsidePolygon(poly1[i], poly2, poly2Length)) {
+            poly[count] = poly1[i];
+            count++;
+            pcount++;
+
+        }
+    }
+
+    int insidePoly2 = pcount;
+    for (int i = 0; i < poly2Length; i++) {
+        if (testPointInsidePolygon(poly2[i], poly1, poly1Length)) {
+            poly[count] = poly2[i];
+            count++;
+        }
+    }
+
+    int insidePoly1 = count - insidePoly2;
+    // If all vertices from poly1 are inside poly2, then just return poly1.
+    if (insidePoly2 == poly1Length) {
+        memcpy(poly2, poly1, poly1Length * sizeof(Vector2));
+        return poly1Length;
+    }
+
+    // If all vertices from poly2 are inside poly1, then just return poly2.
+    if (insidePoly1 == poly2Length) {
+        return poly2Length;
+    }
+
+    // Since neither polygon fully contain the other one, we need to add all the
+    // intersection points.
+    Vector2 intersection;
+    for (int i = 0; i < poly2Length; i++) {
+        for (int j = 0; j < poly1Length; j++) {
+            int poly2LineStart = i;
+            int poly2LineEnd = ((i + 1) % poly2Length);
+            int poly1LineStart = j;
+            int poly1LineEnd = ((j + 1) % poly1Length);
+            bool found = lineIntersection(
+                    poly2[poly2LineStart].x, poly2[poly2LineStart].y,
+                    poly2[poly2LineEnd].x, poly2[poly2LineEnd].y,
+                    poly1[poly1LineStart].x, poly1[poly1LineStart].y,
+                    poly1[poly1LineEnd].x, poly1[poly1LineEnd].y,
+                    intersection);
+            if (found) {
+                poly[count].x = intersection.x;
+                poly[count].y = intersection.y;
+                count++;
+            } else {
+                Vector2 delta = poly2[i] - poly1[j];
+                if (delta.lengthSquared() < EPSILON) {
+                    poly[count] = poly2[i];
+                    count++;
+                }
+            }
+        }
+    }
+
+    if (count == 0) {
+        return 0;
+    }
+
+    // Sort the result polygon around the center.
+    Vector2 center(0.0f, 0.0f);
+    for (int i = 0; i < count; i++) {
+        center += poly[i];
+    }
+    center /= count;
+    sort(poly, count, center);
+
+#if DEBUG_SHADOW
+    // Since poly2 is overwritten as the result, we need to save a copy to do
+    // our verification.
+    Vector2 oldPoly2[poly2Length];
+    int oldPoly2Length = poly2Length;
+    memcpy(oldPoly2, poly2, sizeof(Vector2) * poly2Length);
+#endif
+
+    // Filter the result out from poly and put it into poly2.
+    poly2[0] = poly[0];
+    int lastOutputIndex = 0;
+    for (int i = 1; i < count; i++) {
+        Vector2 delta = poly[i] - poly2[lastOutputIndex];
+        if (delta.lengthSquared() >= EPSILON) {
+            poly2[++lastOutputIndex] = poly[i];
+        } else {
+            // If the vertices are too close, pick the inner one, because the
+            // inner one is more likely to be an intersection point.
+            Vector2 delta1 = poly[i] - center;
+            Vector2 delta2 = poly2[lastOutputIndex] - center;
+            if (delta1.lengthSquared() < delta2.lengthSquared()) {
+                poly2[lastOutputIndex] = poly[i];
+            }
+        }
+    }
+    int resultLength = lastOutputIndex + 1;
+
+#if DEBUG_SHADOW
+    testConvex(poly2, resultLength, "intersection");
+    testConvex(poly1, poly1Length, "input poly1");
+    testConvex(oldPoly2, oldPoly2Length, "input poly2");
+
+    testIntersection(poly1, poly1Length, oldPoly2, oldPoly2Length, poly2, resultLength);
+#endif
+
+    return resultLength;
+}
+
+/**
+ * Sort points about a center point
+ *
+ * @param poly The in and out polyogon as a Vector2 array.
+ * @param polyLength The number of vertices of the polygon.
+ * @param center the center ctr[0] = x , ctr[1] = y to sort around.
+ */
+void SpotShadow::sort(Vector2* poly, int polyLength, const Vector2& center) {
+    quicksortCirc(poly, 0, polyLength - 1, center);
+}
+
+/**
+ * Swap points pointed to by i and j
+ */
+void SpotShadow::swap(Vector2* points, int i, int j) {
+    Vector2 temp = points[i];
+    points[i] = points[j];
+    points[j] = temp;
+}
+
+/**
+ * quick sort implementation about the center.
+ */
+void SpotShadow::quicksortCirc(Vector2* points, int low, int high,
+        const Vector2& center) {
+    int i = low, j = high;
+    int p = low + (high - low) / 2;
+    float pivot = angle(points[p], center);
+    while (i <= j) {
+        while (angle(points[i], center) > pivot) {
+            i++;
+        }
+        while (angle(points[j], center) < pivot) {
+            j--;
+        }
+
+        if (i <= j) {
+            swap(points, i, j);
+            i++;
+            j--;
+        }
+    }
+    if (low < j) quicksortCirc(points, low, j, center);
+    if (i < high) quicksortCirc(points, i, high, center);
+}
+
+/**
+ * Sort points by x axis
+ *
+ * @param points points to sort
+ * @param low start index
+ * @param high end index
+ */
+void SpotShadow::quicksortX(Vector2* points, int low, int high) {
+    int i = low, j = high;
+    int p = low + (high - low) / 2;
+    float pivot = points[p].x;
+    while (i <= j) {
+        while (points[i].x < pivot) {
+            i++;
+        }
+        while (points[j].x > pivot) {
+            j--;
+        }
+
+        if (i <= j) {
+            swap(points, i, j);
+            i++;
+            j--;
+        }
+    }
+    if (low < j) quicksortX(points, low, j);
+    if (i < high) quicksortX(points, i, high);
+}
+
+/**
+ * Test whether a point is inside the polygon.
+ *
+ * @param testPoint the point to test
+ * @param poly the polygon
+ * @return true if the testPoint is inside the poly.
+ */
+bool SpotShadow::testPointInsidePolygon(const Vector2 testPoint,
+        const Vector2* poly, int len) {
+    bool c = false;
+    double testx = testPoint.x;
+    double testy = testPoint.y;
+    for (int i = 0, j = len - 1; i < len; j = i++) {
+        double startX = poly[j].x;
+        double startY = poly[j].y;
+        double endX = poly[i].x;
+        double endY = poly[i].y;
+
+        if (((endY > testy) != (startY > testy)) &&
+            (testx < (startX - endX) * (testy - endY)
+             / (startY - endY) + endX)) {
+            c = !c;
+        }
+    }
+    return c;
+}
+
+/**
+ * Make the polygon turn clockwise.
+ *
+ * @param polygon the polygon as a Vector2 array.
+ * @param len the number of points of the polygon
+ */
+void SpotShadow::makeClockwise(Vector2* polygon, int len) {
+    if (polygon == 0  || len == 0) {
+        return;
+    }
+    if (!ShadowTessellator::isClockwise(polygon, len)) {
+        reverse(polygon, len);
+    }
+}
+
+/**
+ * Reverse the polygon
+ *
+ * @param polygon the polygon as a Vector2 array
+ * @param len the number of points of the polygon
+ */
+void SpotShadow::reverse(Vector2* polygon, int len) {
+    int n = len / 2;
+    for (int i = 0; i < n; i++) {
+        Vector2 tmp = polygon[i];
+        int k = len - 1 - i;
+        polygon[i] = polygon[k];
+        polygon[k] = tmp;
+    }
+}
+
+/**
+ * Intersects two lines in parametric form. This function is called in a tight
+ * loop, and we need double precision to get things right.
+ *
+ * @param x1 the x coordinate point 1 of line 1
+ * @param y1 the y coordinate point 1 of line 1
+ * @param x2 the x coordinate point 2 of line 1
+ * @param y2 the y coordinate point 2 of line 1
+ * @param x3 the x coordinate point 1 of line 2
+ * @param y3 the y coordinate point 1 of line 2
+ * @param x4 the x coordinate point 2 of line 2
+ * @param y4 the y coordinate point 2 of line 2
+ * @param ret the x,y location of the intersection
+ * @return true if it found an intersection
+ */
+inline bool SpotShadow::lineIntersection(double x1, double y1, double x2, double y2,
+        double x3, double y3, double x4, double y4, Vector2& ret) {
+    double d = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
+    if (d == 0.0) return false;
+
+    double dx = (x1 * y2 - y1 * x2);
+    double dy = (x3 * y4 - y3 * x4);
+    double x = (dx * (x3 - x4) - (x1 - x2) * dy) / d;
+    double y = (dx * (y3 - y4) - (y1 - y2) * dy) / d;
+
+    // The intersection should be in the middle of the point 1 and point 2,
+    // likewise point 3 and point 4.
+    if (((x - x1) * (x - x2) > EPSILON)
+        || ((x - x3) * (x - x4) > EPSILON)
+        || ((y - y1) * (y - y2) > EPSILON)
+        || ((y - y3) * (y - y4) > EPSILON)) {
+        // Not interesected
+        return false;
+    }
+    ret.x = x;
+    ret.y = y;
+    return true;
+
+}
+
+/**
+ * Compute a horizontal circular polygon about point (x , y , height) of radius
+ * (size)
+ *
+ * @param points number of the points of the output polygon.
+ * @param lightCenter the center of the light.
+ * @param size the light size.
+ * @param ret result polygon.
+ */
+void SpotShadow::computeLightPolygon(int points, const Vector3& lightCenter,
+        float size, Vector3* ret) {
+    // TODO: Caching all the sin / cos values and store them in a look up table.
+    for (int i = 0; i < points; i++) {
+        double angle = 2 * i * M_PI / points;
+        ret[i].x = cosf(angle) * size + lightCenter.x;
+        ret[i].y = sinf(angle) * size + lightCenter.y;
+        ret[i].z = lightCenter.z;
+    }
+}
+
+/**
+* Generate the shadow from a spot light.
+*
+* @param poly x,y,z vertexes of a convex polygon that occludes the light source
+* @param polyLength number of vertexes of the occluding polygon
+* @param lightCenter the center of the light
+* @param lightSize the radius of the light source
+* @param lightVertexCount the vertex counter for the light polygon
+* @param shadowTriangleStrip return an (x,y,alpha) triangle strip representing the shadow. Return
+*                            empty strip if error.
+*
+*/
+VertexBufferMode SpotShadow::createSpotShadow(bool isCasterOpaque, const Vector3* poly,
+        int polyLength, const Vector3& lightCenter, float lightSize,
+        int lightVertexCount, VertexBuffer& retStrips) {
+    Vector3 light[lightVertexCount * 3];
+    computeLightPolygon(lightVertexCount, lightCenter, lightSize, light);
+    computeSpotShadow(isCasterOpaque, light, lightVertexCount, lightCenter, poly,
+            polyLength, retStrips);
+    return kVertexBufferMode_TwoPolyRingShadow;
+}
+
+/**
+ * Generate the shadow spot light of shape lightPoly and a object poly
+ *
+ * @param lightPoly x,y,z vertex of a convex polygon that is the light source
+ * @param lightPolyLength number of vertexes of the light source polygon
+ * @param poly x,y,z vertexes of a convex polygon that occludes the light source
+ * @param polyLength number of vertexes of the occluding polygon
+ * @param shadowTriangleStrip return an (x,y,alpha) triangle strip representing the shadow. Return
+ *                            empty strip if error.
+ */
+void SpotShadow::computeSpotShadow(bool isCasterOpaque, const Vector3* lightPoly,
+        int lightPolyLength, const Vector3& lightCenter, const Vector3* poly,
+        int polyLength, VertexBuffer& shadowTriangleStrip) {
+    // Point clouds for all the shadowed vertices
+    Vector2 shadowRegion[lightPolyLength * polyLength];
+    // Shadow polygon from one point light.
+    Vector2 outline[polyLength];
+    Vector2 umbraMem[polyLength * lightPolyLength];
+    Vector2* umbra = umbraMem;
+
+    int umbraLength = 0;
+
+    // Validate input, receiver is always at z = 0 plane.
+    bool inputPolyPositionValid = true;
+    for (int i = 0; i < polyLength; i++) {
+        if (poly[i].z >= lightPoly[0].z) {
+            inputPolyPositionValid = false;
+            ALOGW("polygon above the light");
+            break;
+        }
+    }
+
+    // If the caster's position is invalid, don't draw anything.
+    if (!inputPolyPositionValid) {
+        return;
+    }
+
+    // Calculate the umbra polygon based on intersections of all outlines
+    int k = 0;
+    for (int j = 0; j < lightPolyLength; j++) {
+        int m = 0;
+        for (int i = 0; i < polyLength; i++) {
+            // After validating the input, deltaZ is guaranteed to be positive.
+            float deltaZ = lightPoly[j].z - poly[i].z;
+            float ratioZ = lightPoly[j].z / deltaZ;
+            float x = lightPoly[j].x - ratioZ * (lightPoly[j].x - poly[i].x);
+            float y = lightPoly[j].y - ratioZ * (lightPoly[j].y - poly[i].y);
+
+            Vector2 newPoint = Vector2(x, y);
+            shadowRegion[k] = newPoint;
+            outline[m] = newPoint;
+
+            k++;
+            m++;
+        }
+
+        // For the first light polygon's vertex, use the outline as the umbra.
+        // Later on, use the intersection of the outline and existing umbra.
+        if (umbraLength == 0) {
+            for (int i = 0; i < polyLength; i++) {
+                umbra[i] = outline[i];
+            }
+            umbraLength = polyLength;
+        } else {
+            int col = ((j * 255) / lightPolyLength);
+            umbraLength = intersection(outline, polyLength, umbra, umbraLength);
+            if (umbraLength == 0) {
+                break;
+            }
+        }
+    }
+
+    // Generate the penumbra area using the hull of all shadow regions.
+    int shadowRegionLength = k;
+    Vector2 penumbra[k];
+    int penumbraLength = hull(shadowRegion, shadowRegionLength, penumbra);
+
+    Vector2 fakeUmbra[polyLength];
+    if (umbraLength < 3) {
+        // If there is no real umbra, make a fake one.
+        for (int i = 0; i < polyLength; i++) {
+            float deltaZ = lightCenter.z - poly[i].z;
+            float ratioZ = lightCenter.z / deltaZ;
+            float x = lightCenter.x - ratioZ * (lightCenter.x - poly[i].x);
+            float y = lightCenter.y - ratioZ * (lightCenter.y - poly[i].y);
+
+            fakeUmbra[i].x = x;
+            fakeUmbra[i].y = y;
+        }
+
+        // Shrink the centroid's shadow by 10%.
+        // TODO: Study the magic number of 10%.
+        Vector2 shadowCentroid =
+                ShadowTessellator::centroid2d(fakeUmbra, polyLength);
+        for (int i = 0; i < polyLength; i++) {
+            fakeUmbra[i] = shadowCentroid * (1.0f - SHADOW_SHRINK_SCALE) +
+                    fakeUmbra[i] * SHADOW_SHRINK_SCALE;
+        }
+#if DEBUG_SHADOW
+        ALOGD("No real umbra make a fake one, centroid2d =  %f , %f",
+                shadowCentroid.x, shadowCentroid.y);
+#endif
+        // Set the fake umbra, whose size is the same as the original polygon.
+        umbra = fakeUmbra;
+        umbraLength = polyLength;
+    }
+
+    generateTriangleStrip(isCasterOpaque, penumbra, penumbraLength, umbra,
+            umbraLength, poly, polyLength, shadowTriangleStrip);
+}
+
+/**
+ * Converts a polygon specified with CW vertices into an array of distance-from-centroid values.
+ *
+ * Returns false in error conditions
+ *
+ * @param poly Array of vertices. Note that these *must* be CW.
+ * @param polyLength The number of vertices in the polygon.
+ * @param polyCentroid The centroid of the polygon, from which rays will be cast
+ * @param rayDist The output array for the calculated distances, must be SHADOW_RAY_COUNT in size
+ */
+bool convertPolyToRayDist(const Vector2* poly, int polyLength, const Vector2& polyCentroid,
+        float* rayDist) {
+    const int rays = SHADOW_RAY_COUNT;
+    const float step = M_PI * 2 / rays;
+
+    const Vector2* lastVertex = &(poly[polyLength - 1]);
+    float startAngle = angle(*lastVertex, polyCentroid);
+
+    // Start with the ray that's closest to and less than startAngle
+    int rayIndex = floor((startAngle - EPSILON) / step);
+    rayIndex = (rayIndex + rays) % rays; // ensure positive
+
+    for (int polyIndex = 0; polyIndex < polyLength; polyIndex++) {
+        /*
+         * For a given pair of vertices on the polygon, poly[i-1] and poly[i], the rays that
+         * intersect these will be those that are between the two angles from the centroid that the
+         * vertices define.
+         *
+         * Because the polygon vertices are stored clockwise, the closest ray with an angle
+         * *smaller* than that defined by angle(poly[i], centroid) will be the first ray that does
+         * not intersect with poly[i-1], poly[i].
+         */
+        float currentAngle = angle(poly[polyIndex], polyCentroid);
+
+        // find first ray that will not intersect the line segment poly[i-1] & poly[i]
+        int firstRayIndexOnNextSegment = floor((currentAngle - EPSILON) / step);
+        firstRayIndexOnNextSegment = (firstRayIndexOnNextSegment + rays) % rays; // ensure positive
+
+        // Iterate through all rays that intersect with poly[i-1], poly[i] line segment.
+        // This may be 0 rays.
+        while (rayIndex != firstRayIndexOnNextSegment) {
+            float distanceToIntersect = rayIntersectPoints(polyCentroid,
+                    cos(rayIndex * step),
+                    sin(rayIndex * step),
+                    *lastVertex, poly[polyIndex]);
+            if (distanceToIntersect < 0) {
+#if DEBUG_SHADOW
+                ALOGW("ERROR: convertPolyToRayDist failed");
+#endif
+                return false; // error case, abort
+            }
+
+            rayDist[rayIndex] = distanceToIntersect;
+
+            rayIndex = (rayIndex - 1 + rays) % rays;
+        }
+        lastVertex = &poly[polyIndex];
+    }
+
+   return true;
+}
+
+int SpotShadow::calculateOccludedUmbra(const Vector2* umbra, int umbraLength,
+        const Vector3* poly, int polyLength, Vector2* occludedUmbra) {
+    // Occluded umbra area is computed as the intersection of the projected 2D
+    // poly and umbra.
+    for (int i = 0; i < polyLength; i++) {
+        occludedUmbra[i].x = poly[i].x;
+        occludedUmbra[i].y = poly[i].y;
+    }
+
+    // Both umbra and incoming polygon are guaranteed to be CW, so we can call
+    // intersection() directly.
+    return intersection(umbra, umbraLength,
+            occludedUmbra, polyLength);
+}
+
+#define OCLLUDED_UMBRA_SHRINK_FACTOR 0.95f
+/**
+ * Generate a triangle strip given two convex polygons
+ *
+ * @param penumbra The outer polygon x,y vertexes
+ * @param penumbraLength The number of vertexes in the outer polygon
+ * @param umbra The inner outer polygon x,y vertexes
+ * @param umbraLength The number of vertexes in the inner polygon
+ * @param shadowTriangleStrip return an (x,y,alpha) triangle strip representing the shadow. Return
+ *                            empty strip if error.
+**/
+void SpotShadow::generateTriangleStrip(bool isCasterOpaque, const Vector2* penumbra,
+        int penumbraLength, const Vector2* umbra, int umbraLength,
+        const Vector3* poly, int polyLength, VertexBuffer& shadowTriangleStrip) {
+    const int rays = SHADOW_RAY_COUNT;
+    const int size = 2 * rays;
+    const float step = M_PI * 2 / rays;
+    // Centroid of the umbra.
+    Vector2 centroid = ShadowTessellator::centroid2d(umbra, umbraLength);
+#if DEBUG_SHADOW
+    ALOGD("centroid2d =  %f , %f", centroid.x, centroid.y);
+#endif
+    // Intersection to the penumbra.
+    float penumbraDistPerRay[rays];
+    // Intersection to the umbra.
+    float umbraDistPerRay[rays];
+    // Intersection to the occluded umbra area.
+    float occludedUmbraDistPerRay[rays];
+
+    // convert CW polygons to ray distance encoding, aborting on conversion failure
+    if (!convertPolyToRayDist(umbra, umbraLength, centroid, umbraDistPerRay)) return;
+    if (!convertPolyToRayDist(penumbra, penumbraLength, centroid, penumbraDistPerRay)) return;
+
+    bool hasOccludedUmbraArea = false;
+    if (isCasterOpaque) {
+        Vector2 occludedUmbra[polyLength + umbraLength];
+        int occludedUmbraLength = calculateOccludedUmbra(umbra, umbraLength, poly, polyLength,
+                occludedUmbra);
+        // Make sure the centroid is inside the umbra, otherwise, fall back to the
+        // approach as if there is no occluded umbra area.
+        if (testPointInsidePolygon(centroid, occludedUmbra, occludedUmbraLength)) {
+            hasOccludedUmbraArea = true;
+            // Shrink the occluded umbra area to avoid pixel level artifacts.
+            for (int i = 0; i < occludedUmbraLength; i ++) {
+                occludedUmbra[i] = centroid + (occludedUmbra[i] - centroid) *
+                        OCLLUDED_UMBRA_SHRINK_FACTOR;
+            }
+            if (!convertPolyToRayDist(occludedUmbra, occludedUmbraLength, centroid,
+                    occludedUmbraDistPerRay)) {
+                return;
+            }
+        }
+    }
+
+    AlphaVertex* shadowVertices =
+            shadowTriangleStrip.alloc<AlphaVertex>(SHADOW_VERTEX_COUNT);
+
+    // Calculate the vertices (x, y, alpha) in the shadow area.
+    AlphaVertex centroidXYA;
+    AlphaVertex::set(&centroidXYA, centroid.x, centroid.y, 1.0f);
+    for (int rayIndex = 0; rayIndex < rays; rayIndex++) {
+        float dx = cosf(step * rayIndex);
+        float dy = sinf(step * rayIndex);
+
+        // penumbra ring
+        float penumbraDistance = penumbraDistPerRay[rayIndex];
+        AlphaVertex::set(&shadowVertices[rayIndex],
+                dx * penumbraDistance + centroid.x,
+                dy * penumbraDistance + centroid.y, 0.0f);
+
+        // umbra ring
+        float umbraDistance = umbraDistPerRay[rayIndex];
+        AlphaVertex::set(&shadowVertices[rays + rayIndex],
+                dx * umbraDistance + centroid.x, dy * umbraDistance + centroid.y, 1.0f);
+
+        // occluded umbra ring
+        if (hasOccludedUmbraArea) {
+            float occludedUmbraDistance = occludedUmbraDistPerRay[rayIndex];
+            AlphaVertex::set(&shadowVertices[2 * rays + rayIndex],
+                    dx * occludedUmbraDistance + centroid.x,
+                    dy * occludedUmbraDistance + centroid.y, 1.0f);
+        } else {
+            // Put all vertices of the occluded umbra ring at the centroid.
+            shadowVertices[2 * rays + rayIndex] = centroidXYA;
+        }
+    }
+}
+
+/**
+ * This is only for experimental purpose.
+ * After intersections are calculated, we could smooth the polygon if needed.
+ * So far, we don't think it is more appealing yet.
+ *
+ * @param level The level of smoothness.
+ * @param rays The total number of rays.
+ * @param rayDist (In and Out) The distance for each ray.
+ *
+ */
+void SpotShadow::smoothPolygon(int level, int rays, float* rayDist) {
+    for (int k = 0; k < level; k++) {
+        for (int i = 0; i < rays; i++) {
+            float p1 = rayDist[(rays - 1 + i) % rays];
+            float p2 = rayDist[i];
+            float p3 = rayDist[(i + 1) % rays];
+            rayDist[i] = (p1 + p2 * 2 + p3) / 4;
+        }
+    }
+}
+
+#if DEBUG_SHADOW
+
+#define TEST_POINT_NUMBER 128
+
+/**
+ * Calculate the bounds for generating random test points.
+ */
+void SpotShadow::updateBound(const Vector2 inVector, Vector2& lowerBound,
+        Vector2& upperBound ) {
+    if (inVector.x < lowerBound.x) {
+        lowerBound.x = inVector.x;
+    }
+
+    if (inVector.y < lowerBound.y) {
+        lowerBound.y = inVector.y;
+    }
+
+    if (inVector.x > upperBound.x) {
+        upperBound.x = inVector.x;
+    }
+
+    if (inVector.y > upperBound.y) {
+        upperBound.y = inVector.y;
+    }
+}
+
+/**
+ * For debug purpose, when things go wrong, dump the whole polygon data.
+ */
+static void dumpPolygon(const Vector2* poly, int polyLength, const char* polyName) {
+    for (int i = 0; i < polyLength; i++) {
+        ALOGD("polygon %s i %d x %f y %f", polyName, i, poly[i].x, poly[i].y);
+    }
+}
+
+/**
+ * Test whether the polygon is convex.
+ */
+bool SpotShadow::testConvex(const Vector2* polygon, int polygonLength,
+        const char* name) {
+    bool isConvex = true;
+    for (int i = 0; i < polygonLength; i++) {
+        Vector2 start = polygon[i];
+        Vector2 middle = polygon[(i + 1) % polygonLength];
+        Vector2 end = polygon[(i + 2) % polygonLength];
+
+        double delta = (double(middle.x) - start.x) * (double(end.y) - start.y) -
+                (double(middle.y) - start.y) * (double(end.x) - start.x);
+        bool isCCWOrCoLinear = (delta >= EPSILON);
+
+        if (isCCWOrCoLinear) {
+            ALOGW("(Error Type 2): polygon (%s) is not a convex b/c start (x %f, y %f),"
+                    "middle (x %f, y %f) and end (x %f, y %f) , delta is %f !!!",
+                    name, start.x, start.y, middle.x, middle.y, end.x, end.y, delta);
+            isConvex = false;
+            break;
+        }
+    }
+    return isConvex;
+}
+
+/**
+ * Test whether or not the polygon (intersection) is within the 2 input polygons.
+ * Using Marte Carlo method, we generate a random point, and if it is inside the
+ * intersection, then it must be inside both source polygons.
+ */
+void SpotShadow::testIntersection(const Vector2* poly1, int poly1Length,
+        const Vector2* poly2, int poly2Length,
+        const Vector2* intersection, int intersectionLength) {
+    // Find the min and max of x and y.
+    Vector2 lowerBound(FLT_MAX, FLT_MAX);
+    Vector2 upperBound(-FLT_MAX, -FLT_MAX);
+    for (int i = 0; i < poly1Length; i++) {
+        updateBound(poly1[i], lowerBound, upperBound);
+    }
+    for (int i = 0; i < poly2Length; i++) {
+        updateBound(poly2[i], lowerBound, upperBound);
+    }
+
+    bool dumpPoly = false;
+    for (int k = 0; k < TEST_POINT_NUMBER; k++) {
+        // Generate a random point between minX, minY and maxX, maxY.
+        double randomX = rand() / double(RAND_MAX);
+        double randomY = rand() / double(RAND_MAX);
+
+        Vector2 testPoint;
+        testPoint.x = lowerBound.x + randomX * (upperBound.x - lowerBound.x);
+        testPoint.y = lowerBound.y + randomY * (upperBound.y - lowerBound.y);
+
+        // If the random point is in both poly 1 and 2, then it must be intersection.
+        if (testPointInsidePolygon(testPoint, intersection, intersectionLength)) {
+            if (!testPointInsidePolygon(testPoint, poly1, poly1Length)) {
+                dumpPoly = true;
+                ALOGW("(Error Type 1): one point (%f, %f) in the intersection is"
+                      " not in the poly1",
+                        testPoint.x, testPoint.y);
+            }
+
+            if (!testPointInsidePolygon(testPoint, poly2, poly2Length)) {
+                dumpPoly = true;
+                ALOGW("(Error Type 1): one point (%f, %f) in the intersection is"
+                      " not in the poly2",
+                        testPoint.x, testPoint.y);
+            }
+        }
+    }
+
+    if (dumpPoly) {
+        dumpPolygon(intersection, intersectionLength, "intersection");
+        for (int i = 1; i < intersectionLength; i++) {
+            Vector2 delta = intersection[i] - intersection[i - 1];
+            ALOGD("Intersetion i, %d Vs i-1 is delta %f", i, delta.lengthSquared());
+        }
+
+        dumpPolygon(poly1, poly1Length, "poly 1");
+        dumpPolygon(poly2, poly2Length, "poly 2");
+    }
+}
+#endif
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/SpotShadow.h b/libs/hwui/SpotShadow.h
new file mode 100644
index 0000000..fb3e6d5
--- /dev/null
+++ b/libs/hwui/SpotShadow.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef ANDROID_HWUI_SPOT_SHADOW_H
+#define ANDROID_HWUI_SPOT_SHADOW_H
+
+#include "Debug.h"
+#include "Vector.h"
+#include "VertexBuffer.h"
+
+namespace android {
+namespace uirenderer {
+
+class SpotShadow {
+public:
+    static VertexBufferMode createSpotShadow(bool isCasterOpaque, const Vector3* poly,
+            int polyLength, const Vector3& lightCenter, float lightSize,
+            int lightVertexCount, VertexBuffer& retStrips);
+
+private:
+    static int calculateOccludedUmbra(const Vector2* umbra, int umbraLength,
+            const Vector3* poly, int polyLength, Vector2* occludedUmbra);
+    static void computeSpotShadow(bool isCasterOpaque, const Vector3* lightPoly,
+            int lightPolyLength, const Vector3& lightCenter, const Vector3* poly,
+            int polyLength, VertexBuffer& retstrips);
+
+    static void computeLightPolygon(int points, const Vector3& lightCenter,
+            float size, Vector3* ret);
+
+    static void smoothPolygon(int level, int rays, float* rayDist);
+    static float rayIntersectPoly(const Vector2* poly, int polyLength,
+            const Vector2& point, float dx, float dy);
+
+    static void xsort(Vector2* points, int pointsLength);
+    static int hull(Vector2* points, int pointsLength, Vector2* retPoly);
+    static bool ccw(double ax, double ay, double bx, double by, double cx, double cy);
+    static int intersection(const Vector2* poly1, int poly1length, Vector2* poly2, int poly2length);
+    static void sort(Vector2* poly, int polyLength, const Vector2& center);
+
+    static void swap(Vector2* points, int i, int j);
+    static void quicksortCirc(Vector2* points, int low, int high, const Vector2& center);
+    static void quicksortX(Vector2* points, int low, int high);
+
+    static bool testPointInsidePolygon(const Vector2 testPoint, const Vector2* poly, int len);
+    static void makeClockwise(Vector2* polygon, int len);
+    static void reverse(Vector2* polygon, int len);
+    static inline bool lineIntersection(double x1, double y1, double x2, double y2,
+            double x3, double y3, double x4, double y4, Vector2& ret);
+
+    static void generateTriangleStrip(bool isCasterOpaque, const Vector2* penumbra,
+            int penumbraLength, const Vector2* umbra, int umbraLength,
+            const Vector3* poly, int polyLength, VertexBuffer& retstrips);
+
+#if DEBUG_SHADOW
+    // Verification utility function.
+    static bool testConvex(const Vector2* polygon, int polygonLength,
+            const char* name);
+    static void testIntersection(const Vector2* poly1, int poly1Length,
+        const Vector2* poly2, int poly2Length,
+        const Vector2* intersection, int intersectionLength);
+    static void updateBound(const Vector2 inVector, Vector2& lowerBound, Vector2& upperBound );
+#endif
+
+}; // SpotShadow
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_SPOT_SHADOW_H
diff --git a/libs/hwui/StatefulBaseRenderer.cpp b/libs/hwui/StatefulBaseRenderer.cpp
new file mode 100644
index 0000000..05f6cf8
--- /dev/null
+++ b/libs/hwui/StatefulBaseRenderer.cpp
@@ -0,0 +1,249 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#include <SkCanvas.h>
+
+#include "StatefulBaseRenderer.h"
+
+namespace android {
+namespace uirenderer {
+
+StatefulBaseRenderer::StatefulBaseRenderer() :
+        mDirtyClip(false), mWidth(-1), mHeight(-1),
+        mSaveCount(1), mFirstSnapshot(new Snapshot), mSnapshot(mFirstSnapshot) {
+}
+
+void StatefulBaseRenderer::initializeSaveStack(float clipLeft, float clipTop,
+        float clipRight, float clipBottom) {
+    mSnapshot = new Snapshot(mFirstSnapshot,
+            SkCanvas::kMatrix_SaveFlag | SkCanvas::kClip_SaveFlag);
+    mSnapshot->setClip(clipLeft, clipTop, clipRight, clipBottom);
+    mSnapshot->fbo = getTargetFbo();
+    mSaveCount = 1;
+}
+
+void StatefulBaseRenderer::initializeViewport(int width, int height) {
+    mWidth = width;
+    mHeight = height;
+
+    mFirstSnapshot->height = height;
+    mFirstSnapshot->viewport.set(0, 0, width, height);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Save (layer)
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Non-virtual implementation of save, guaranteed to save without side-effects
+ *
+ * The approach here and in restoreSnapshot(), allows subclasses to directly manipulate the save
+ * stack, and ensures restoreToCount() doesn't call back into subclass overrides.
+ */
+int StatefulBaseRenderer::saveSnapshot(int flags) {
+    mSnapshot = new Snapshot(mSnapshot, flags);
+    return mSaveCount++;
+}
+
+int StatefulBaseRenderer::save(int flags) {
+    return saveSnapshot(flags);
+}
+
+/**
+ * Non-virtual implementation of restore, guaranteed to restore without side-effects.
+ */
+void StatefulBaseRenderer::restoreSnapshot() {
+    sp<Snapshot> toRemove = mSnapshot;
+    sp<Snapshot> toRestore = mSnapshot->previous;
+
+    mSaveCount--;
+    mSnapshot = toRestore;
+
+    // subclass handles restore implementation
+    onSnapshotRestored(*toRemove, *toRestore);
+}
+
+void StatefulBaseRenderer::restore() {
+    if (mSaveCount > 1) {
+        restoreSnapshot();
+    }
+}
+
+void StatefulBaseRenderer::restoreToCount(int saveCount) {
+    if (saveCount < 1) saveCount = 1;
+
+    while (mSaveCount > saveCount) {
+        restoreSnapshot();
+    }
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Matrix
+///////////////////////////////////////////////////////////////////////////////
+
+void StatefulBaseRenderer::getMatrix(SkMatrix* matrix) const {
+    mSnapshot->transform->copyTo(*matrix);
+}
+
+void StatefulBaseRenderer::translate(float dx, float dy, float dz) {
+    mSnapshot->transform->translate(dx, dy, dz);
+}
+
+void StatefulBaseRenderer::rotate(float degrees) {
+    mSnapshot->transform->rotate(degrees, 0.0f, 0.0f, 1.0f);
+}
+
+void StatefulBaseRenderer::scale(float sx, float sy) {
+    mSnapshot->transform->scale(sx, sy, 1.0f);
+}
+
+void StatefulBaseRenderer::skew(float sx, float sy) {
+    mSnapshot->transform->skew(sx, sy);
+}
+
+void StatefulBaseRenderer::setMatrix(const SkMatrix* matrix) {
+    if (matrix) {
+        mSnapshot->transform->load(*matrix);
+    } else {
+        mSnapshot->transform->loadIdentity();
+    }
+}
+
+void StatefulBaseRenderer::setMatrix(const Matrix4& matrix) {
+    mSnapshot->transform->load(matrix);
+}
+
+void StatefulBaseRenderer::concatMatrix(const SkMatrix* matrix) {
+    mat4 transform(*matrix);
+    mSnapshot->transform->multiply(transform);
+}
+
+void StatefulBaseRenderer::concatMatrix(const Matrix4& matrix) {
+    mSnapshot->transform->multiply(matrix);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Clip
+///////////////////////////////////////////////////////////////////////////////
+
+bool StatefulBaseRenderer::clipRect(float left, float top, float right, float bottom, SkRegion::Op op) {
+    if (CC_LIKELY(currentTransform()->rectToRect())) {
+        mDirtyClip |= mSnapshot->clip(left, top, right, bottom, op);
+        return !mSnapshot->clipRect->isEmpty();
+    }
+
+    SkPath path;
+    path.addRect(left, top, right, bottom);
+
+    return StatefulBaseRenderer::clipPath(&path, op);
+}
+
+bool StatefulBaseRenderer::clipPath(const SkPath* path, SkRegion::Op op) {
+    SkMatrix transform;
+    currentTransform()->copyTo(transform);
+
+    SkPath transformed;
+    path->transform(transform, &transformed);
+
+    SkRegion clip;
+    if (!mSnapshot->previous->clipRegion->isEmpty()) {
+        clip.setRegion(*mSnapshot->previous->clipRegion);
+    } else {
+        if (mSnapshot->previous == firstSnapshot()) {
+            clip.setRect(0, 0, getWidth(), getHeight());
+        } else {
+            Rect* bounds = mSnapshot->previous->clipRect;
+            clip.setRect(bounds->left, bounds->top, bounds->right, bounds->bottom);
+        }
+    }
+
+    SkRegion region;
+    region.setPath(transformed, clip);
+
+    mDirtyClip |= mSnapshot->clipRegionTransformed(region, op);
+    return !mSnapshot->clipRect->isEmpty();
+}
+
+bool StatefulBaseRenderer::clipRegion(const SkRegion* region, SkRegion::Op op) {
+    mDirtyClip |= mSnapshot->clipRegionTransformed(*region, op);
+    return !mSnapshot->clipRect->isEmpty();
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Quick Rejection
+///////////////////////////////////////////////////////////////////////////////
+
+/**
+ * Calculates whether content drawn within the passed bounds would be outside of, or intersect with
+ * the clipRect. Does not modify the scissor.
+ *
+ * @param clipRequired if not null, will be set to true if element intersects clip
+ *         (and wasn't rejected)
+ *
+ * @param snapOut if set, the geometry will be treated as having an AA ramp.
+ *         See Rect::snapGeometryToPixelBoundaries()
+ */
+bool StatefulBaseRenderer::calculateQuickRejectForScissor(float left, float top,
+        float right, float bottom, bool* clipRequired, bool snapOut) const {
+    if (mSnapshot->isIgnored() || bottom <= top || right <= left) {
+        return true;
+    }
+
+    Rect r(left, top, right, bottom);
+    currentTransform()->mapRect(r);
+    r.snapGeometryToPixelBoundaries(snapOut);
+
+    Rect clipRect(*currentClipRect());
+    clipRect.snapToPixelBoundaries();
+
+    if (!clipRect.intersects(r)) return true;
+
+    // clip is required if geometry intersects clip rect
+    if (clipRequired) *clipRequired = !clipRect.contains(r);
+    return false;
+}
+
+/**
+ * Returns false if drawing won't be clipped out.
+ *
+ * Makes the decision conservatively, by rounding out the mapped rect before comparing with the
+ * clipRect. To be used when perfect, pixel accuracy is not possible (esp. with tessellation) but
+ * rejection is still desired.
+ *
+ * This function, unlike quickRejectSetupScissor, should be used where precise geometry information
+ * isn't known (esp. when geometry adjusts based on scale). Generally, this will be first pass
+ * rejection where precise rejection isn't important, or precise information isn't available.
+ */
+bool StatefulBaseRenderer::quickRejectConservative(float left, float top,
+        float right, float bottom) const {
+    if (mSnapshot->isIgnored() || bottom <= top || right <= left) {
+        return true;
+    }
+
+    Rect r(left, top, right, bottom);
+    currentTransform()->mapRect(r);
+    r.roundOut(); // rounded out to be conservative
+
+    Rect clipRect(*currentClipRect());
+    clipRect.snapToPixelBoundaries();
+
+    if (!clipRect.intersects(r)) return true;
+
+    return false;
+}
+
+}; // namespace uirenderer
+}; // namespace android
diff --git a/libs/hwui/StatefulBaseRenderer.h b/libs/hwui/StatefulBaseRenderer.h
new file mode 100644
index 0000000..64354ac
--- /dev/null
+++ b/libs/hwui/StatefulBaseRenderer.h
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef ANDROID_HWUI_STATEFUL_BASE_RENDERER_H
+#define ANDROID_HWUI_STATEFUL_BASE_RENDERER_H
+
+#include <utils/RefBase.h>
+
+#include "Renderer.h"
+#include "Snapshot.h"
+
+namespace android {
+namespace uirenderer {
+
+/**
+ * Abstract Renderer subclass, which implements Canvas state methods.
+ *
+ * Manages the Snapshot stack, implementing matrix, save/restore, and clipping methods in the
+ * Renderer interface. Drawing and recording classes that extend StatefulBaseRenderer will have
+ * different use cases:
+ *
+ * Drawing subclasses (i.e. OpenGLRenderer) can query attributes (such as transform) or hook into
+ * changes (e.g. save/restore) with minimal surface area for manipulating the stack itself.
+ *
+ * Recording subclasses (i.e. DisplayListRenderer) can both record and pass through state operations
+ * to StatefulBaseRenderer, so that not only will querying operations work (getClip/Matrix), but so
+ * that quickRejection can also be used.
+ */
+class StatefulBaseRenderer : public Renderer {
+public:
+    StatefulBaseRenderer();
+
+    virtual status_t prepare(bool opaque) {
+        return prepareDirty(0.0f, 0.0f, mWidth, mHeight, opaque);
+    }
+    void initializeViewport(int width, int height);
+    void initializeSaveStack(float clipLeft, float clipTop, float clipRight, float clipBottom);
+
+    // getters
+    bool hasRectToRectTransform() const {
+        return CC_LIKELY(currentTransform()->rectToRect());
+    }
+
+    // Save (layer)
+    virtual int getSaveCount() const { return mSaveCount; }
+    virtual int save(int flags);
+    virtual void restore();
+    virtual void restoreToCount(int saveCount);
+    //virtual int saveLayer(float left, float top, float right, float bottom,
+    //        int alpha, SkXfermode::Mode mode, int flags);
+
+    // Matrix
+    virtual void getMatrix(SkMatrix* outMatrix) const;
+    virtual void translate(float dx, float dy, float dz = 0.0f);
+    virtual void rotate(float degrees);
+    virtual void scale(float sx, float sy);
+    virtual void skew(float sx, float sy);
+
+    virtual void setMatrix(const SkMatrix* matrix);
+    void setMatrix(const Matrix4& matrix); // internal only convenience method
+    virtual void concatMatrix(const SkMatrix* matrix);
+    void concatMatrix(const Matrix4& matrix); // internal only convenience method
+
+    // Clip
+    virtual const Rect& getLocalClipBounds() const { return mSnapshot->getLocalClip(); }
+
+    virtual bool quickRejectConservative(float left, float top, float right, float bottom) const;
+
+    virtual bool clipRect(float left, float top, float right, float bottom, SkRegion::Op op);
+    virtual bool clipPath(const SkPath* path, SkRegion::Op op);
+    virtual bool clipRegion(const SkRegion* region, SkRegion::Op op);
+
+protected:
+    const Rect& getRenderTargetClipBounds() const { return mSnapshot->getRenderTargetClip(); }
+
+    int getWidth() { return mWidth; }
+    int getHeight() { return mHeight; }
+
+    // Save
+    int saveSnapshot(int flags);
+    void restoreSnapshot();
+
+    // allows subclasses to control what value is stored in snapshot's fbo field in
+    // initializeSaveStack
+    virtual GLuint getTargetFbo() const {
+        return -1;
+    }
+
+    // Clip
+    bool calculateQuickRejectForScissor(float left, float top, float right, float bottom,
+            bool* clipRequired, bool snapOut) const;
+
+    /**
+     * Called just after a restore has occurred. The 'removed' snapshot popped from the stack,
+     * 'restored' snapshot has become the top/current.
+     *
+     * Subclasses can override this method to handle layer restoration
+     */
+    virtual void onSnapshotRestored(const Snapshot& removed, const Snapshot& restored) {};
+
+    inline const Rect* currentClipRect() const {
+        return mSnapshot->clipRect;
+    }
+
+    inline const mat4* currentTransform() const {
+        return mSnapshot->transform;
+    }
+
+    inline const Snapshot* currentSnapshot() const {
+        return mSnapshot != NULL ? mSnapshot.get() : mFirstSnapshot.get();
+    }
+
+    inline const Snapshot* firstSnapshot() const {
+        return mFirstSnapshot.get();
+    }
+
+    // indicites that the clip has been changed since the last time it was consumed
+    bool mDirtyClip;
+
+private:
+    // Dimensions of the drawing surface
+    int mWidth, mHeight;
+
+    // Number of saved states
+    int mSaveCount;
+
+    // Base state
+    sp<Snapshot> mFirstSnapshot;
+
+protected:
+    // Current state
+    // TODO: should become private, once hooks needed by OpenGLRenderer are added
+    sp<Snapshot> mSnapshot;
+
+}; // class StatefulBaseRenderer
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_STATEFUL_BASE_RENDERER_H
diff --git a/libs/hwui/Stencil.cpp b/libs/hwui/Stencil.cpp
index 2764523..8ce57db 100644
--- a/libs/hwui/Stencil.cpp
+++ b/libs/hwui/Stencil.cpp
@@ -35,7 +35,7 @@
 Stencil::Stencil(): mState(kDisabled) {
 }
 
-uint32_t Stencil::getStencilSize() {
+uint8_t Stencil::getStencilSize() {
     return STENCIL_BUFFER_SIZE;
 }
 
diff --git a/libs/hwui/Stencil.h b/libs/hwui/Stencil.h
index 83ad668..c5e5186 100644
--- a/libs/hwui/Stencil.h
+++ b/libs/hwui/Stencil.h
@@ -40,7 +40,7 @@
      * Returns the desired size for the stencil buffer. If the returned value
      * is 0, then no stencil buffer is required.
      */
-    ANDROID_API static uint32_t getStencilSize();
+    ANDROID_API static uint8_t getStencilSize();
 
     /**
      * Returns the smallest stencil format accepted by render buffers.
diff --git a/libs/hwui/TextDropShadowCache.cpp b/libs/hwui/TextDropShadowCache.cpp
index 0b2c130..4eec462 100644
--- a/libs/hwui/TextDropShadowCache.cpp
+++ b/libs/hwui/TextDropShadowCache.cpp
@@ -147,7 +147,7 @@
 // Callbacks
 ///////////////////////////////////////////////////////////////////////////////
 
-void TextDropShadowCache::operator()(ShadowText& text, ShadowTexture*& texture) {
+void TextDropShadowCache::operator()(ShadowText&, ShadowTexture*& texture) {
     if (texture) {
         mSize -= texture->bitmapSize;
 
@@ -168,7 +168,7 @@
     mCache.clear();
 }
 
-ShadowTexture* TextDropShadowCache::get(SkPaint* paint, const char* text, uint32_t len,
+ShadowTexture* TextDropShadowCache::get(const SkPaint* paint, const char* text, uint32_t len,
         int numGlyphs, float radius, const float* positions) {
     ShadowText entry(paint, radius, len, text, positions);
     ShadowTexture* texture = mCache.get(entry);
diff --git a/libs/hwui/TextDropShadowCache.h b/libs/hwui/TextDropShadowCache.h
index 04d7357..54b930b 100644
--- a/libs/hwui/TextDropShadowCache.h
+++ b/libs/hwui/TextDropShadowCache.h
@@ -38,7 +38,7 @@
     }
 
     // len is the number of bytes in text
-    ShadowText(SkPaint* paint, float radius, uint32_t len, const char* srcText,
+    ShadowText(const SkPaint* paint, float radius, uint32_t len, const char* srcText,
             const float* positions):
             len(len), radius(radius), positions(positions) {
         // TODO: Propagate this through the API, we should not cast here
@@ -135,7 +135,7 @@
      */
     void operator()(ShadowText& text, ShadowTexture*& texture);
 
-    ShadowTexture* get(SkPaint* paint, const char* text, uint32_t len,
+    ShadowTexture* get(const SkPaint* paint, const char* text, uint32_t len,
             int numGlyphs, float radius, const float* positions);
 
     /**
diff --git a/libs/hwui/Texture.cpp b/libs/hwui/Texture.cpp
index 7923ce7..e783905 100644
--- a/libs/hwui/Texture.cpp
+++ b/libs/hwui/Texture.cpp
@@ -25,14 +25,14 @@
 namespace uirenderer {
 
 Texture::Texture(): id(0), generation(0), blend(false), width(0), height(0),
-        cleanup(false), bitmapSize(0), mipMap(false), uvMapper(NULL),
+        cleanup(false), bitmapSize(0), mipMap(false), uvMapper(NULL), isInUse(false),
         mWrapS(GL_CLAMP_TO_EDGE), mWrapT(GL_CLAMP_TO_EDGE),
         mMinFilter(GL_NEAREST), mMagFilter(GL_NEAREST),
         mFirstFilter(true), mFirstWrap(true), mCaches(Caches::getInstance()) {
 }
 
 Texture::Texture(Caches& caches): id(0), generation(0), blend(false), width(0), height(0),
-        cleanup(false), bitmapSize(0), mipMap(false), uvMapper(NULL),
+        cleanup(false), bitmapSize(0), mipMap(false), uvMapper(NULL), isInUse(false),
         mWrapS(GL_CLAMP_TO_EDGE), mWrapT(GL_CLAMP_TO_EDGE),
         mMinFilter(GL_NEAREST), mMagFilter(GL_NEAREST),
         mFirstFilter(true), mFirstWrap(true), mCaches(caches) {
diff --git a/libs/hwui/Texture.h b/libs/hwui/Texture.h
index d48ec59..d5601f8 100644
--- a/libs/hwui/Texture.h
+++ b/libs/hwui/Texture.h
@@ -94,6 +94,12 @@
      */
     const UvMapper* uvMapper;
 
+    /**
+     * Whether or not the Texture is marked in use and thus not evictable for
+     * the current frame. This is reset at the start of a new frame.
+     */
+    bool isInUse;
+
 private:
     /**
      * Last wrap modes set on this texture. Defaults to GL_CLAMP_TO_EDGE.
diff --git a/libs/hwui/TextureCache.cpp b/libs/hwui/TextureCache.cpp
index a9ab2c6..34e2265 100644
--- a/libs/hwui/TextureCache.cpp
+++ b/libs/hwui/TextureCache.cpp
@@ -34,7 +34,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 TextureCache::TextureCache():
-        mCache(LruCache<SkBitmap*, Texture*>::kUnlimitedCapacity),
+        mCache(LruCache<const SkBitmap*, Texture*>::kUnlimitedCapacity),
         mSize(0), mMaxSize(MB(DEFAULT_TEXTURE_CACHE_SIZE)),
         mFlushRate(DEFAULT_TEXTURE_CACHE_FLUSH_RATE) {
     char property[PROPERTY_VALUE_MAX];
@@ -58,7 +58,7 @@
 }
 
 TextureCache::TextureCache(uint32_t maxByteSize):
-        mCache(LruCache<SkBitmap*, Texture*>::kUnlimitedCapacity),
+        mCache(LruCache<const SkBitmap*, Texture*>::kUnlimitedCapacity),
         mSize(0), mMaxSize(maxByteSize) {
     init();
 }
@@ -103,7 +103,7 @@
 // Callbacks
 ///////////////////////////////////////////////////////////////////////////////
 
-void TextureCache::operator()(SkBitmap*& bitmap, Texture*& texture) {
+void TextureCache::operator()(const SkBitmap*&, Texture*& texture) {
     // This will be called already locked
     if (texture) {
         mSize -= texture->bitmapSize;
@@ -121,29 +121,49 @@
 // Caching
 ///////////////////////////////////////////////////////////////////////////////
 
-Texture* TextureCache::get(SkBitmap* bitmap) {
+void TextureCache::resetMarkInUse() {
+    LruCache<const SkBitmap*, Texture*>::Iterator iter(mCache);
+    while (iter.next()) {
+        iter.value()->isInUse = false;
+    }
+}
+
+bool TextureCache::canMakeTextureFromBitmap(const SkBitmap* bitmap) {
+    if (bitmap->width() > mMaxTextureSize || bitmap->height() > mMaxTextureSize) {
+        ALOGW("Bitmap too large to be uploaded into a texture (%dx%d, max=%dx%d)",
+                bitmap->width(), bitmap->height(), mMaxTextureSize, mMaxTextureSize);
+        return false;
+    }
+    return true;
+}
+
+// Returns a prepared Texture* that either is already in the cache or can fit
+// in the cache (and is thus added to the cache)
+Texture* TextureCache::getCachedTexture(const SkBitmap* bitmap) {
     Texture* texture = mCache.get(bitmap);
 
     if (!texture) {
-        if (bitmap->width() > mMaxTextureSize || bitmap->height() > mMaxTextureSize) {
-            ALOGW("Bitmap too large to be uploaded into a texture (%dx%d, max=%dx%d)",
-                    bitmap->width(), bitmap->height(), mMaxTextureSize, mMaxTextureSize);
+        if (!canMakeTextureFromBitmap(bitmap)) {
             return NULL;
         }
 
         const uint32_t size = bitmap->rowBytes() * bitmap->height();
+        bool canCache = size < mMaxSize;
         // Don't even try to cache a bitmap that's bigger than the cache
-        if (size < mMaxSize) {
-            while (mSize + size > mMaxSize) {
+        while (canCache && mSize + size > mMaxSize) {
+            Texture* oldest = mCache.peekOldestValue();
+            if (oldest && !oldest->isInUse) {
                 mCache.removeOldest();
+            } else {
+                canCache = false;
             }
         }
 
-        texture = new Texture();
-        texture->bitmapSize = size;
-        generateTexture(bitmap, texture, false);
+        if (canCache) {
+            texture = new Texture();
+            texture->bitmapSize = size;
+            generateTexture(bitmap, texture, false);
 
-        if (size < mMaxSize) {
             mSize += size;
             TEXTURE_LOGD("TextureCache::get: create texture(%p): name, size, mSize = %d, %d, %d",
                      bitmap, texture->id, size, mSize);
@@ -151,17 +171,43 @@
                 ALOGD("Texture created, size = %d", size);
             }
             mCache.put(bitmap, texture);
-        } else {
-            texture->cleanup = true;
         }
-    } else if (bitmap->getGenerationID() != texture->generation) {
+    } else if (!texture->isInUse && bitmap->getGenerationID() != texture->generation) {
+        // Texture was in the cache but is dirty, re-upload
+        // TODO: Re-adjust the cache size if the bitmap's dimensions have changed
         generateTexture(bitmap, texture, true);
     }
 
     return texture;
 }
 
-Texture* TextureCache::getTransient(SkBitmap* bitmap) {
+bool TextureCache::prefetchAndMarkInUse(const SkBitmap* bitmap) {
+    Texture* texture = getCachedTexture(bitmap);
+    if (texture) {
+        texture->isInUse = true;
+    }
+    return texture;
+}
+
+Texture* TextureCache::get(const SkBitmap* bitmap) {
+    Texture* texture = getCachedTexture(bitmap);
+
+    if (!texture) {
+        if (!canMakeTextureFromBitmap(bitmap)) {
+            return NULL;
+        }
+
+        const uint32_t size = bitmap->rowBytes() * bitmap->height();
+        texture = new Texture();
+        texture->bitmapSize = size;
+        generateTexture(bitmap, texture, false);
+        texture->cleanup = true;
+    }
+
+    return texture;
+}
+
+Texture* TextureCache::getTransient(const SkBitmap* bitmap) {
     Texture* texture = new Texture();
     texture->bitmapSize = bitmap->rowBytes() * bitmap->height();
     texture->cleanup = true;
@@ -171,11 +217,11 @@
     return texture;
 }
 
-void TextureCache::remove(SkBitmap* bitmap) {
+void TextureCache::remove(const SkBitmap* bitmap) {
     mCache.remove(bitmap);
 }
 
-void TextureCache::removeDeferred(SkBitmap* bitmap) {
+void TextureCache::removeDeferred(const SkBitmap* bitmap) {
     Mutex::Autolock _l(mLock);
     mGarbage.push(bitmap);
 }
@@ -211,7 +257,7 @@
     }
 }
 
-void TextureCache::generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate) {
+void TextureCache::generateTexture(const SkBitmap* bitmap, Texture* texture, bool regenerate) {
     SkAutoLockPixels alp(*bitmap);
 
     if (!bitmap->readyToDraw()) {
@@ -239,7 +285,7 @@
 
     Caches::getInstance().bindTexture(texture->id);
 
-    switch (bitmap->getConfig()) {
+    switch (bitmap->config()) {
     case SkBitmap::kA8_Config:
         glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
         uploadToTexture(resize, GL_ALPHA, bitmap->rowBytesAsPixels(),
@@ -267,7 +313,7 @@
         texture->blend = !bitmap->isOpaque();
         break;
     default:
-        ALOGW("Unsupported bitmap config: %d", bitmap->getConfig());
+        ALOGW("Unsupported bitmap config: %d", bitmap->config());
         break;
     }
 
@@ -284,7 +330,7 @@
     }
 }
 
-void TextureCache::uploadLoFiTexture(bool resize, SkBitmap* bitmap,
+void TextureCache::uploadLoFiTexture(bool resize, const SkBitmap* bitmap,
         uint32_t width, uint32_t height) {
     SkBitmap rgbaBitmap;
     rgbaBitmap.setConfig(SkBitmap::kARGB_8888_Config, width, height, 0, bitmap->alphaType());
diff --git a/libs/hwui/TextureCache.h b/libs/hwui/TextureCache.h
index 57fc19a..48a10c2 100644
--- a/libs/hwui/TextureCache.h
+++ b/libs/hwui/TextureCache.h
@@ -49,7 +49,7 @@
  * Any texture added to the cache causing the cache to grow beyond the maximum
  * allowed size will also cause the oldest texture to be kicked out.
  */
-class TextureCache: public OnEntryRemoved<SkBitmap*, Texture*> {
+class TextureCache: public OnEntryRemoved<const SkBitmap*, Texture*> {
 public:
     TextureCache();
     TextureCache(uint32_t maxByteSize);
@@ -59,28 +59,40 @@
      * Used as a callback when an entry is removed from the cache.
      * Do not invoke directly.
      */
-    void operator()(SkBitmap*& bitmap, Texture*& texture);
+    void operator()(const SkBitmap*& bitmap, Texture*& texture);
+
+    /**
+     * Resets all Textures to not be marked as in use
+     */
+    void resetMarkInUse();
+
+    /**
+     * Attempts to precache the SkBitmap. Returns true if a Texture was successfully
+     * acquired for the bitmap, false otherwise. If a Texture was acquired it is
+     * marked as in use.
+     */
+    bool prefetchAndMarkInUse(const SkBitmap* bitmap);
 
     /**
      * Returns the texture associated with the specified bitmap. If the texture
      * cannot be found in the cache, a new texture is generated.
      */
-    Texture* get(SkBitmap* bitmap);
+    Texture* get(const SkBitmap* bitmap);
     /**
      * Returns the texture associated with the specified bitmap. The generated
      * texture is not kept in the cache. The caller must destroy the texture.
      */
-    Texture* getTransient(SkBitmap* bitmap);
+    Texture* getTransient(const SkBitmap* bitmap);
     /**
      * Removes the texture associated with the specified bitmap.
      * Upon remove the texture is freed.
      */
-    void remove(SkBitmap* bitmap);
+    void remove(const SkBitmap* bitmap);
     /**
      * Removes the texture associated with the specified bitmap. This is meant
      * to be called from threads that are not the EGL context thread.
      */
-    void removeDeferred(SkBitmap* bitmap);
+    void removeDeferred(const SkBitmap* bitmap);
     /**
      * Process deferred removals.
      */
@@ -116,21 +128,26 @@
     void setFlushRate(float flushRate);
 
 private:
+
+    bool canMakeTextureFromBitmap(const SkBitmap* bitmap);
+
+    Texture* getCachedTexture(const SkBitmap* bitmap);
+
     /**
      * Generates the texture from a bitmap into the specified texture structure.
      *
      * @param regenerate If true, the bitmap data is reuploaded into the texture, but
      *        no new texture is generated.
      */
-    void generateTexture(SkBitmap* bitmap, Texture* texture, bool regenerate = false);
+    void generateTexture(const SkBitmap* bitmap, Texture* texture, bool regenerate = false);
 
-    void uploadLoFiTexture(bool resize, SkBitmap* bitmap, uint32_t width, uint32_t height);
+    void uploadLoFiTexture(bool resize, const SkBitmap* bitmap, uint32_t width, uint32_t height);
     void uploadToTexture(bool resize, GLenum format, GLsizei stride,
             GLsizei width, GLsizei height, GLenum type, const GLvoid * data);
 
     void init();
 
-    LruCache<SkBitmap*, Texture*> mCache;
+    LruCache<const SkBitmap*, Texture*> mCache;
 
     uint32_t mSize;
     uint32_t mMaxSize;
@@ -140,7 +157,7 @@
 
     bool mDebugEnabled;
 
-    Vector<SkBitmap*> mGarbage;
+    Vector<const SkBitmap*> mGarbage;
     mutable Mutex mLock;
 }; // class TextureCache
 
diff --git a/libs/hwui/TreeInfo.h b/libs/hwui/TreeInfo.h
new file mode 100644
index 0000000..8957607
--- /dev/null
+++ b/libs/hwui/TreeInfo.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef TREEINFO_H
+#define TREEINFO_H
+
+#include <cutils/compiler.h>
+#include <utils/Timers.h>
+#include <utils/StrongPointer.h>
+
+namespace android {
+namespace uirenderer {
+
+class RenderPropertyAnimator;
+
+class AnimationListener {
+public:
+    ANDROID_API virtual void onAnimationFinished(const sp<RenderPropertyAnimator>&) = 0;
+protected:
+    ANDROID_API virtual ~AnimationListener() {}
+};
+
+struct TreeInfo {
+    // The defaults here should be safe for everyone but DrawFrameTask to use as-is.
+    TreeInfo()
+            : hasFunctors(false)
+            , prepareTextures(false)
+            , performStagingPush(true)
+            , frameTimeMs(0)
+            , evaluateAnimations(false)
+            , hasAnimations(false)
+            , animationListener(0)
+    {}
+
+    bool hasFunctors;
+    bool prepareTextures;
+    bool performStagingPush;
+
+    // Animations
+    nsecs_t frameTimeMs;
+    bool evaluateAnimations;
+    // This is only updated if evaluateAnimations is true
+    bool hasAnimations;
+    AnimationListener* animationListener;
+
+    // TODO: Damage calculations
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* TREEINFO_H */
diff --git a/libs/hwui/Vector.h b/libs/hwui/Vector.h
index 497924e..c61cb61 100644
--- a/libs/hwui/Vector.h
+++ b/libs/hwui/Vector.h
@@ -36,6 +36,10 @@
         x(px), y(py) {
     }
 
+    float lengthSquared() const {
+        return x * x + y * y;
+    }
+
     float length() const {
         return sqrt(x * x + y * y);
     }
@@ -107,6 +111,25 @@
     }
 }; // class Vector2
 
+class Vector3 {
+public:
+    float x;
+    float y;
+    float z;
+
+    Vector3() :
+        x(0.0f), y(0.0f), z(0.0f) {
+    }
+
+    Vector3(float px, float py, float pz) :
+        x(px), y(py), z(pz) {
+    }
+
+    void dump() {
+        ALOGD("Vector3[%.2f, %.2f, %.2f]", x, y, z);
+    }
+};
+
 ///////////////////////////////////////////////////////////////////////////////
 // Types
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/libs/hwui/Vertex.h b/libs/hwui/Vertex.h
index 790d4fc..5d7a199 100644
--- a/libs/hwui/Vertex.h
+++ b/libs/hwui/Vertex.h
@@ -33,13 +33,14 @@
      * Program::set()), and used to make geometry damage rect calculation conservative (see
      * Rect::snapGeometryToPixelBoundaries())
      */
-    static const float gGeometryFudgeFactor = 0.0656f;
+    static float GeometryFudgeFactor() { return 0.0656f; }
 
-    float position[2];
+
+    float x, y;
 
     static inline void set(Vertex* vertex, float x, float y) {
-        vertex[0].position[0] = x;
-        vertex[0].position[1] = y;
+        vertex[0].x = x;
+        vertex[0].y = y;
     }
 
     static inline void set(Vertex* vertex, vec2 val) {
@@ -47,7 +48,7 @@
     }
 
     static inline void copyWithOffset(Vertex* vertex, const Vertex& src, float x, float y) {
-        set(vertex, src.position[0] + x, src.position[1] + y);
+        set(vertex, src.x + x, src.y + y);
     }
 
 }; // struct Vertex
@@ -56,19 +57,19 @@
  * Simple structure to describe a vertex with a position and texture UV.
  */
 struct TextureVertex {
-    float position[2];
-    float texture[2];
+    float x, y;
+    float u, v;
 
     static inline void set(TextureVertex* vertex, float x, float y, float u, float v) {
-        vertex[0].position[0] = x;
-        vertex[0].position[1] = y;
-        vertex[0].texture[0] = u;
-        vertex[0].texture[1] = v;
+        vertex[0].x = x;
+        vertex[0].y = y;
+        vertex[0].u = u;
+        vertex[0].v = v;
     }
 
     static inline void setUV(TextureVertex* vertex, float u, float v) {
-        vertex[0].texture[0] = u;
-        vertex[0].texture[1] = v;
+        vertex[0].u = u;
+        vertex[0].v = v;
     }
 }; // struct TextureVertex
 
@@ -76,17 +77,17 @@
  * Simple structure to describe a vertex with a position, texture UV and ARGB color.
  */
 struct ColorTextureVertex : TextureVertex {
-    float color[4];
+    float r, g, b, a;
 
     static inline void set(ColorTextureVertex* vertex, float x, float y,
             float u, float v, int color) {
         TextureVertex::set(vertex, x, y, u, v);
 
         const float a = ((color >> 24) & 0xff) / 255.0f;
-        vertex[0].color[0] = a * ((color >> 16) & 0xff) / 255.0f;
-        vertex[0].color[1] = a * ((color >>  8) & 0xff) / 255.0f;
-        vertex[0].color[2] = a * ((color      ) & 0xff) / 255.0f;
-        vertex[0].color[3] = a;
+        vertex[0].r = a * ((color >> 16) & 0xff) / 255.0f;
+        vertex[0].g = a * ((color >>  8) & 0xff) / 255.0f;
+        vertex[0].b = a * ((color      ) & 0xff) / 255.0f;
+        vertex[0].a = a;
     }
 }; // struct ColorTextureVertex
 
@@ -103,7 +104,7 @@
 
     static inline void copyWithOffset(AlphaVertex* vertex, const AlphaVertex& src,
             float x, float y) {
-        Vertex::set(vertex, src.position[0] + x, src.position[1] + y);
+        Vertex::set(vertex, src.x + x, src.y + y);
         vertex[0].alpha = src.alpha;
     }
 
diff --git a/libs/hwui/VertexBuffer.h b/libs/hwui/VertexBuffer.h
new file mode 100644
index 0000000..8b6872e
--- /dev/null
+++ b/libs/hwui/VertexBuffer.h
@@ -0,0 +1,102 @@
+/*
+ * 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.
+ */
+
+#ifndef ANDROID_HWUI_VERTEX_BUFFER_H
+#define ANDROID_HWUI_VERTEX_BUFFER_H
+
+
+namespace android {
+namespace uirenderer {
+
+class VertexBuffer {
+public:
+    VertexBuffer():
+        mBuffer(0),
+        mVertexCount(0),
+        mCleanupMethod(NULL)
+    {}
+
+    ~VertexBuffer() {
+        if (mCleanupMethod) mCleanupMethod(mBuffer);
+    }
+
+    /**
+       This should be the only method used by the Tessellator. Subsequent calls to
+       alloc will allocate space within the first allocation (useful if you want to
+       eventually allocate multiple regions within a single VertexBuffer, such as
+       with PathTessellator::tesselateLines())
+     */
+    template <class TYPE>
+    TYPE* alloc(int vertexCount) {
+        if (mVertexCount) {
+            TYPE* reallocBuffer = (TYPE*)mReallocBuffer;
+            // already have allocated the buffer, re-allocate space within
+            if (mReallocBuffer != mBuffer) {
+                // not first re-allocation, leave space for degenerate triangles to separate strips
+                reallocBuffer += 2;
+            }
+            mReallocBuffer = reallocBuffer + vertexCount;
+            return reallocBuffer;
+        }
+        mVertexCount = vertexCount;
+        mReallocBuffer = mBuffer = (void*)new TYPE[vertexCount];
+        mCleanupMethod = &(cleanup<TYPE>);
+
+        return (TYPE*)mBuffer;
+    }
+
+    template <class TYPE>
+    void copyInto(const VertexBuffer& srcBuffer, float xOffset, float yOffset) {
+        int verticesToCopy = srcBuffer.getVertexCount();
+
+        TYPE* dst = alloc<TYPE>(verticesToCopy);
+        TYPE* src = (TYPE*)srcBuffer.getBuffer();
+
+        for (int i = 0; i < verticesToCopy; i++) {
+            TYPE::copyWithOffset(&dst[i], src[i], xOffset, yOffset);
+        }
+    }
+
+    const void* getBuffer() const { return mBuffer; }
+    unsigned int getVertexCount() const { return mVertexCount; }
+
+    template <class TYPE>
+    void createDegenerateSeparators(int allocSize) {
+        TYPE* end = (TYPE*)mBuffer + mVertexCount;
+        for (TYPE* degen = (TYPE*)mBuffer + allocSize; degen < end; degen += 2 + allocSize) {
+            memcpy(degen, degen - 1, sizeof(TYPE));
+            memcpy(degen + 1, degen + 2, sizeof(TYPE));
+        }
+    }
+
+private:
+    template <class TYPE>
+    static void cleanup(void* buffer) {
+        delete[] (TYPE*)buffer;
+    }
+
+    void* mBuffer;
+    unsigned int mVertexCount;
+
+    void* mReallocBuffer; // used for multi-allocation
+
+    void (*mCleanupMethod)(void*);
+};
+
+}; // namespace uirenderer
+}; // namespace android
+
+#endif // ANDROID_HWUI_VERTEX_BUFFER_H
diff --git a/libs/hwui/font/CacheTexture.cpp b/libs/hwui/font/CacheTexture.cpp
index d5f38b5..24ffb80 100644
--- a/libs/hwui/font/CacheTexture.cpp
+++ b/libs/hwui/font/CacheTexture.cpp
@@ -114,7 +114,7 @@
             mMesh(NULL), mCurrentQuad(0), mMaxQuadCount(maxQuadCount),
             mCaches(Caches::getInstance()) {
     mCacheBlocks = new CacheBlock(TEXTURE_BORDER_SIZE, TEXTURE_BORDER_SIZE,
-            mWidth - TEXTURE_BORDER_SIZE, mHeight - TEXTURE_BORDER_SIZE, true);
+            mWidth - TEXTURE_BORDER_SIZE, mHeight - TEXTURE_BORDER_SIZE);
 
     // OpenGL ES 3.0+ lets us specify the row length for unpack operations such
     // as glTexSubImage2D(). This allows us to upload a sub-rectangle of a texture.
@@ -143,7 +143,7 @@
     // reset, then create a new remainder space to start again
     reset();
     mCacheBlocks = new CacheBlock(TEXTURE_BORDER_SIZE, TEXTURE_BORDER_SIZE,
-            mWidth - TEXTURE_BORDER_SIZE, mHeight - TEXTURE_BORDER_SIZE, true);
+            mWidth - TEXTURE_BORDER_SIZE, mHeight - TEXTURE_BORDER_SIZE);
 }
 
 void CacheTexture::releaseMesh() {
diff --git a/libs/hwui/font/CacheTexture.h b/libs/hwui/font/CacheTexture.h
index 61b38f8..4cc4f22 100644
--- a/libs/hwui/font/CacheTexture.h
+++ b/libs/hwui/font/CacheTexture.h
@@ -54,7 +54,7 @@
     CacheBlock* mNext;
     CacheBlock* mPrev;
 
-    CacheBlock(uint16_t x, uint16_t y, uint16_t width, uint16_t height, bool empty = false):
+    CacheBlock(uint16_t x, uint16_t y, uint16_t width, uint16_t height):
             mX(x), mY(y), mWidth(width), mHeight(height), mNext(NULL), mPrev(NULL) {
     }
 
diff --git a/libs/hwui/font/Font.cpp b/libs/hwui/font/Font.cpp
index 0a6e6ef..d22cb8a 100644
--- a/libs/hwui/font/Font.cpp
+++ b/libs/hwui/font/Font.cpp
@@ -268,7 +268,7 @@
             glyph->mCacheTexture);
 }
 
-CachedGlyphInfo* Font::getCachedGlyph(SkPaint* paint, glyph_t textUnit, bool precaching) {
+CachedGlyphInfo* Font::getCachedGlyph(const SkPaint* paint, glyph_t textUnit, bool precaching) {
     CachedGlyphInfo* cachedGlyph = mCachedGlyphs.valueFor(textUnit);
     if (cachedGlyph) {
         // Is the glyph still in texture cache?
@@ -284,14 +284,14 @@
     return cachedGlyph;
 }
 
-void Font::render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len,
             int numGlyphs, int x, int y, const float* positions) {
     render(paint, text, start, len, numGlyphs, x, y, FRAMEBUFFER, NULL,
             0, 0, NULL, positions);
 }
 
-void Font::render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
-        int numGlyphs, SkPath* path, float hOffset, float vOffset) {
+void Font::render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+        int numGlyphs, const SkPath* path, float hOffset, float vOffset) {
     if (numGlyphs == 0 || text == NULL || len == 0) {
         return;
     }
@@ -340,7 +340,7 @@
     }
 }
 
-void Font::measure(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+void Font::measure(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
         int numGlyphs, Rect *bounds, const float* positions) {
     if (bounds == NULL) {
         ALOGE("No return rectangle provided to measure text");
@@ -350,7 +350,7 @@
     render(paint, text, start, len, numGlyphs, 0, 0, MEASURE, NULL, 0, 0, bounds, positions);
 }
 
-void Font::precache(SkPaint* paint, const char* text, int numGlyphs) {
+void Font::precache(const SkPaint* paint, const char* text, int numGlyphs) {
     ATRACE_NAME("precacheText");
 
     if (numGlyphs == 0 || text == NULL) {
@@ -371,7 +371,7 @@
     }
 }
 
-void Font::render(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+void Font::render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
         int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap,
         uint32_t bitmapW, uint32_t bitmapH, Rect* bounds, const float* positions) {
     if (numGlyphs == 0 || text == NULL || len == 0) {
@@ -417,8 +417,8 @@
     }
 }
 
-void Font::updateGlyphCache(SkPaint* paint, const SkGlyph& skiaGlyph, SkGlyphCache* skiaGlyphCache,
-        CachedGlyphInfo* glyph, bool precaching) {
+void Font::updateGlyphCache(const SkPaint* paint, const SkGlyph& skiaGlyph,
+        SkGlyphCache* skiaGlyphCache, CachedGlyphInfo* glyph, bool precaching) {
     glyph->mAdvanceX = skiaGlyph.fAdvanceX;
     glyph->mAdvanceY = skiaGlyph.fAdvanceY;
     glyph->mBitmapLeft = skiaGlyph.fLeft;
@@ -461,7 +461,7 @@
     }
 }
 
-CachedGlyphInfo* Font::cacheGlyph(SkPaint* paint, glyph_t glyph, bool precaching) {
+CachedGlyphInfo* Font::cacheGlyph(const SkPaint* paint, glyph_t glyph, bool precaching) {
     CachedGlyphInfo* newGlyph = new CachedGlyphInfo();
     mCachedGlyphs.add(glyph, newGlyph);
 
diff --git a/libs/hwui/font/Font.h b/libs/hwui/font/Font.h
index 1e0e0c8..6ddd4f2 100644
--- a/libs/hwui/font/Font.h
+++ b/libs/hwui/font/Font.h
@@ -79,11 +79,11 @@
 
     ~Font();
 
-    void render(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+    void render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
             int numGlyphs, int x, int y, const float* positions);
 
-    void render(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
-            int numGlyphs, SkPath* path, float hOffset, float vOffset);
+    void render(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+            int numGlyphs, const SkPath* path, float hOffset, float vOffset);
 
     const Font::FontDescription& getDescription() const {
         return mDescription;
@@ -108,20 +108,20 @@
         MEASURE,
     };
 
-    void precache(SkPaint* paint, const char* text, int numGlyphs);
+    void precache(const SkPaint* paint, const char* text, int numGlyphs);
 
-    void render(SkPaint* paint, const char *text, uint32_t start, uint32_t len,
+    void render(const SkPaint* paint, const char *text, uint32_t start, uint32_t len,
             int numGlyphs, int x, int y, RenderMode mode, uint8_t *bitmap,
             uint32_t bitmapW, uint32_t bitmapH, Rect *bounds, const float* positions);
 
-    void measure(SkPaint* paint, const char* text, uint32_t start, uint32_t len,
+    void measure(const SkPaint* paint, const char* text, uint32_t start, uint32_t len,
             int numGlyphs, Rect *bounds, const float* positions);
 
     void invalidateTextureCache(CacheTexture* cacheTexture = NULL);
 
-    CachedGlyphInfo* cacheGlyph(SkPaint* paint, glyph_t glyph, bool precaching);
-    void updateGlyphCache(SkPaint* paint, const SkGlyph& skiaGlyph, SkGlyphCache* skiaGlyphCache,
-            CachedGlyphInfo* glyph, bool precaching);
+    CachedGlyphInfo* cacheGlyph(const SkPaint* paint, glyph_t glyph, bool precaching);
+    void updateGlyphCache(const SkPaint* paint, const SkGlyph& skiaGlyph,
+            SkGlyphCache* skiaGlyphCache, CachedGlyphInfo* glyph, bool precaching);
 
     void measureCachedGlyph(CachedGlyphInfo* glyph, int x, int y,
             uint8_t *bitmap, uint32_t bitmapW, uint32_t bitmapH,
@@ -138,7 +138,8 @@
     void drawCachedGlyph(CachedGlyphInfo* glyph, float x, float hOffset, float vOffset,
             SkPathMeasure& measure, SkPoint* position, SkVector* tangent);
 
-    CachedGlyphInfo* getCachedGlyph(SkPaint* paint, glyph_t textUnit, bool precaching = false);
+    CachedGlyphInfo* getCachedGlyph(const SkPaint* paint, glyph_t textUnit,
+            bool precaching = false);
 
     FontRenderer* mState;
     FontDescription mDescription;
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
new file mode 100644
index 0000000..63f4b95
--- /dev/null
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -0,0 +1,514 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define LOG_TAG "CanvasContext"
+
+#include "CanvasContext.h"
+
+#include <cutils/properties.h>
+#include <private/hwui/DrawGlInfo.h>
+#include <strings.h>
+
+#include "RenderThread.h"
+#include "../Caches.h"
+#include "../DeferredLayerUpdater.h"
+#include "../LayerRenderer.h"
+#include "../OpenGLRenderer.h"
+#include "../Stencil.h"
+
+#define PROPERTY_RENDER_DIRTY_REGIONS "debug.hwui.render_dirty_regions"
+#define GLES_VERSION 2
+
+#ifdef USE_OPENGL_RENDERER
+// Android-specific addition that is used to show when frames began in systrace
+EGLAPI void EGLAPIENTRY eglBeginFrame(EGLDisplay dpy, EGLSurface surface);
+#endif
+
+namespace android {
+namespace uirenderer {
+namespace renderthread {
+
+#define ERROR_CASE(x) case x: return #x;
+static const char* egl_error_str(EGLint error) {
+    switch (error) {
+        ERROR_CASE(EGL_SUCCESS)
+        ERROR_CASE(EGL_NOT_INITIALIZED)
+        ERROR_CASE(EGL_BAD_ACCESS)
+        ERROR_CASE(EGL_BAD_ALLOC)
+        ERROR_CASE(EGL_BAD_ATTRIBUTE)
+        ERROR_CASE(EGL_BAD_CONFIG)
+        ERROR_CASE(EGL_BAD_CONTEXT)
+        ERROR_CASE(EGL_BAD_CURRENT_SURFACE)
+        ERROR_CASE(EGL_BAD_DISPLAY)
+        ERROR_CASE(EGL_BAD_MATCH)
+        ERROR_CASE(EGL_BAD_NATIVE_PIXMAP)
+        ERROR_CASE(EGL_BAD_NATIVE_WINDOW)
+        ERROR_CASE(EGL_BAD_PARAMETER)
+        ERROR_CASE(EGL_BAD_SURFACE)
+        ERROR_CASE(EGL_CONTEXT_LOST)
+    default:
+        return "Unknown error";
+    }
+}
+static const char* egl_error_str() {
+    return egl_error_str(eglGetError());
+}
+
+static bool load_dirty_regions_property() {
+    char buf[PROPERTY_VALUE_MAX];
+    int len = property_get(PROPERTY_RENDER_DIRTY_REGIONS, buf, "true");
+    return !strncasecmp("true", buf, len);
+}
+
+// This class contains the shared global EGL objects, such as EGLDisplay
+// and EGLConfig, which are re-used by CanvasContext
+class GlobalContext {
+public:
+    static GlobalContext* get();
+
+    // Returns true on success, false on failure
+    void initialize();
+
+    bool hasContext();
+
+    void usePBufferSurface();
+    EGLSurface createSurface(EGLNativeWindowType window);
+    void destroySurface(EGLSurface surface);
+
+    void destroy();
+
+    bool isCurrent(EGLSurface surface) { return mCurrentSurface == surface; }
+    // Returns true if the current surface changed, false if it was already current
+    bool makeCurrent(EGLSurface surface);
+    void beginFrame(EGLSurface surface, EGLint* width, EGLint* height);
+    void swapBuffers(EGLSurface surface);
+
+    bool enableDirtyRegions(EGLSurface surface);
+
+private:
+    GlobalContext();
+    // GlobalContext is never destroyed, method is purposely not implemented
+    ~GlobalContext();
+
+    void loadConfig();
+    void createContext();
+    void initAtlas();
+
+    static GlobalContext* sContext;
+
+    EGLDisplay mEglDisplay;
+    EGLConfig mEglConfig;
+    EGLContext mEglContext;
+    EGLSurface mPBufferSurface;
+
+    const bool mRequestDirtyRegions;
+    bool mCanSetDirtyRegions;
+
+    EGLSurface mCurrentSurface;
+};
+
+GlobalContext* GlobalContext::sContext = 0;
+
+GlobalContext* GlobalContext::get() {
+    if (!sContext) {
+        sContext = new GlobalContext();
+    }
+    return sContext;
+}
+
+GlobalContext::GlobalContext()
+        : mEglDisplay(EGL_NO_DISPLAY)
+        , mEglConfig(0)
+        , mEglContext(EGL_NO_CONTEXT)
+        , mPBufferSurface(EGL_NO_SURFACE)
+        , mRequestDirtyRegions(load_dirty_regions_property())
+        , mCurrentSurface(EGL_NO_SURFACE) {
+    mCanSetDirtyRegions = mRequestDirtyRegions;
+    ALOGD("Render dirty regions requested: %s", mRequestDirtyRegions ? "true" : "false");
+}
+
+void GlobalContext::initialize() {
+    if (hasContext()) return;
+
+    mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+    LOG_ALWAYS_FATAL_IF(mEglDisplay == EGL_NO_DISPLAY,
+            "Failed to get EGL_DEFAULT_DISPLAY! err=%s", egl_error_str());
+
+    EGLint major, minor;
+    LOG_ALWAYS_FATAL_IF(eglInitialize(mEglDisplay, &major, &minor) == EGL_FALSE,
+            "Failed to initialize display %p! err=%s", mEglDisplay, egl_error_str());
+
+    ALOGI("Initialized EGL, version %d.%d", (int)major, (int)minor);
+
+    loadConfig();
+    createContext();
+    usePBufferSurface();
+    Caches::getInstance().init();
+    initAtlas();
+}
+
+bool GlobalContext::hasContext() {
+    return mEglDisplay != EGL_NO_DISPLAY;
+}
+
+void GlobalContext::loadConfig() {
+    EGLint swapBehavior = mCanSetDirtyRegions ? EGL_SWAP_BEHAVIOR_PRESERVED_BIT : 0;
+    EGLint attribs[] = {
+            EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
+            EGL_RED_SIZE, 8,
+            EGL_GREEN_SIZE, 8,
+            EGL_BLUE_SIZE, 8,
+            EGL_ALPHA_SIZE, 8,
+            EGL_DEPTH_SIZE, 0,
+            EGL_CONFIG_CAVEAT, EGL_NONE,
+            EGL_STENCIL_SIZE, Stencil::getStencilSize(),
+            EGL_SURFACE_TYPE, EGL_WINDOW_BIT | swapBehavior,
+            EGL_NONE
+    };
+
+    EGLint num_configs = 1;
+    if (!eglChooseConfig(mEglDisplay, attribs, &mEglConfig, num_configs, &num_configs)
+            || num_configs != 1) {
+        // Failed to get a valid config
+        if (mCanSetDirtyRegions) {
+            ALOGW("Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...");
+            // Try again without dirty regions enabled
+            mCanSetDirtyRegions = false;
+            loadConfig();
+        } else {
+            LOG_ALWAYS_FATAL("Failed to choose config, error = %s", egl_error_str());
+        }
+    }
+}
+
+void GlobalContext::createContext() {
+    EGLint attribs[] = { EGL_CONTEXT_CLIENT_VERSION, GLES_VERSION, EGL_NONE };
+    mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT, attribs);
+    LOG_ALWAYS_FATAL_IF(mEglContext == EGL_NO_CONTEXT,
+        "Failed to create context, error = %s", egl_error_str());
+}
+
+void GlobalContext::initAtlas() {
+    // TODO implement
+    // For now just run without an atlas
+}
+
+void GlobalContext::usePBufferSurface() {
+    LOG_ALWAYS_FATAL_IF(mEglDisplay == EGL_NO_DISPLAY,
+            "usePBufferSurface() called on uninitialized GlobalContext!");
+
+    if (mPBufferSurface == EGL_NO_SURFACE) {
+        EGLint attribs[] = { EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE };
+        mPBufferSurface = eglCreatePbufferSurface(mEglDisplay, mEglConfig, attribs);
+    }
+    makeCurrent(mPBufferSurface);
+}
+
+EGLSurface GlobalContext::createSurface(EGLNativeWindowType window) {
+    initialize();
+    return eglCreateWindowSurface(mEglDisplay, mEglConfig, window, NULL);
+}
+
+void GlobalContext::destroySurface(EGLSurface surface) {
+    if (isCurrent(surface)) {
+        makeCurrent(EGL_NO_SURFACE);
+    }
+    if (!eglDestroySurface(mEglDisplay, surface)) {
+        ALOGW("Failed to destroy surface %p, error=%s", (void*)surface, egl_error_str());
+    }
+}
+
+void GlobalContext::destroy() {
+    if (mEglDisplay == EGL_NO_DISPLAY) return;
+
+    usePBufferSurface();
+    if (Caches::hasInstance()) {
+        Caches::getInstance().terminate();
+    }
+
+    eglDestroyContext(mEglDisplay, mEglContext);
+    eglDestroySurface(mEglDisplay, mPBufferSurface);
+    eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    eglTerminate(mEglDisplay);
+    eglReleaseThread();
+
+    mEglDisplay = EGL_NO_DISPLAY;
+    mEglContext = EGL_NO_CONTEXT;
+    mPBufferSurface = EGL_NO_SURFACE;
+    mCurrentSurface = EGL_NO_SURFACE;
+}
+
+bool GlobalContext::makeCurrent(EGLSurface surface) {
+    if (isCurrent(surface)) return false;
+
+    if (surface == EGL_NO_SURFACE) {
+        // If we are setting EGL_NO_SURFACE we don't care about any of the potential
+        // return errors, which would only happen if mEglDisplay had already been
+        // destroyed in which case the current context is already NO_CONTEXT
+        eglMakeCurrent(mEglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
+    } else if (!eglMakeCurrent(mEglDisplay, surface, surface, mEglContext)) {
+        LOG_ALWAYS_FATAL("Failed to make current on surface %p, error=%s",
+                (void*)surface, egl_error_str());
+    }
+    mCurrentSurface = surface;
+    return true;
+}
+
+void GlobalContext::beginFrame(EGLSurface surface, EGLint* width, EGLint* height) {
+    LOG_ALWAYS_FATAL_IF(surface == EGL_NO_SURFACE,
+            "Tried to beginFrame on EGL_NO_SURFACE!");
+    makeCurrent(surface);
+    if (width) {
+        eglQuerySurface(mEglDisplay, surface, EGL_WIDTH, width);
+    }
+    if (height) {
+        eglQuerySurface(mEglDisplay, surface, EGL_HEIGHT, height);
+    }
+    eglBeginFrame(mEglDisplay, surface);
+}
+
+void GlobalContext::swapBuffers(EGLSurface surface) {
+    eglSwapBuffers(mEglDisplay, surface);
+    EGLint err = eglGetError();
+    LOG_ALWAYS_FATAL_IF(err != EGL_SUCCESS,
+            "Encountered EGL error %d %s during rendering", err, egl_error_str(err));
+}
+
+bool GlobalContext::enableDirtyRegions(EGLSurface surface) {
+    if (!mRequestDirtyRegions) return false;
+
+    if (mCanSetDirtyRegions) {
+        if (!eglSurfaceAttrib(mEglDisplay, surface, EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED)) {
+            ALOGW("Failed to set EGL_SWAP_BEHAVIOR on surface %p, error=%s",
+                    (void*) surface, egl_error_str());
+            return false;
+        }
+        return true;
+    }
+    // Perhaps it is already enabled?
+    EGLint value;
+    if (!eglQuerySurface(mEglDisplay, surface, EGL_SWAP_BEHAVIOR, &value)) {
+        ALOGW("Failed to query EGL_SWAP_BEHAVIOR on surface %p, error=%p",
+                (void*) surface, egl_error_str());
+        return false;
+    }
+    return value == EGL_BUFFER_PRESERVED;
+}
+
+CanvasContext::CanvasContext(bool translucent, RenderNode* rootRenderNode)
+        : mRenderThread(RenderThread::getInstance())
+        , mEglSurface(EGL_NO_SURFACE)
+        , mDirtyRegionsEnabled(false)
+        , mOpaque(!translucent)
+        , mCanvas(0)
+        , mHaveNewSurface(false)
+        , mRootRenderNode(rootRenderNode) {
+    mGlobalContext = GlobalContext::get();
+}
+
+CanvasContext::~CanvasContext() {
+    destroyCanvasAndSurface();
+    mRenderThread.removeFrameCallback(this);
+}
+
+void CanvasContext::destroyCanvasAndSurface() {
+    if (mCanvas) {
+        delete mCanvas;
+        mCanvas = 0;
+    }
+    setSurface(NULL);
+}
+
+void CanvasContext::setSurface(EGLNativeWindowType window) {
+    if (mEglSurface != EGL_NO_SURFACE) {
+        mGlobalContext->destroySurface(mEglSurface);
+        mEglSurface = EGL_NO_SURFACE;
+    }
+
+    if (window) {
+        mEglSurface = mGlobalContext->createSurface(window);
+        LOG_ALWAYS_FATAL_IF(mEglSurface == EGL_NO_SURFACE,
+                "Failed to create EGLSurface for window %p, eglErr = %s",
+                (void*) window, egl_error_str());
+    }
+
+    if (mEglSurface != EGL_NO_SURFACE) {
+        mDirtyRegionsEnabled = mGlobalContext->enableDirtyRegions(mEglSurface);
+        mHaveNewSurface = true;
+        makeCurrent();
+    }
+}
+
+void CanvasContext::swapBuffers() {
+    mGlobalContext->swapBuffers(mEglSurface);
+    mHaveNewSurface = false;
+}
+
+void CanvasContext::requireSurface() {
+    LOG_ALWAYS_FATAL_IF(mEglSurface == EGL_NO_SURFACE,
+            "requireSurface() called but no surface set!");
+    makeCurrent();
+}
+
+bool CanvasContext::initialize(EGLNativeWindowType window) {
+    if (mCanvas) return false;
+    setSurface(window);
+    mCanvas = new OpenGLRenderer();
+    mCanvas->initProperties();
+    return true;
+}
+
+void CanvasContext::updateSurface(EGLNativeWindowType window) {
+    setSurface(window);
+}
+
+void CanvasContext::pauseSurface(EGLNativeWindowType window) {
+    // TODO: For now we just need a fence, in the future suspend any animations
+    // and such to prevent from trying to render into this surface
+}
+
+void CanvasContext::setup(int width, int height) {
+    if (!mCanvas) return;
+    mCanvas->setViewport(width, height);
+}
+
+void CanvasContext::makeCurrent() {
+    // TODO: Figure out why this workaround is needed, see b/13913604
+    // In the meantime this matches the behavior of GLRenderer, so it is not a regression
+    mHaveNewSurface |= mGlobalContext->makeCurrent(mEglSurface);
+}
+
+void CanvasContext::processLayerUpdates(const Vector<DeferredLayerUpdater*>* layerUpdaters,
+        TreeInfo& info) {
+    LOG_ALWAYS_FATAL_IF(!mCanvas, "Cannot process layer updates without a canvas!");
+    makeCurrent();
+    for (size_t i = 0; i < layerUpdaters->size(); i++) {
+        DeferredLayerUpdater* update = layerUpdaters->itemAt(i);
+        bool success = update->apply(info);
+        LOG_ALWAYS_FATAL_IF(!success, "Failed to update layer!");
+        if (update->backingLayer()->deferredUpdateScheduled) {
+            mCanvas->pushLayerUpdate(update->backingLayer());
+        }
+    }
+}
+
+void CanvasContext::prepareTree(TreeInfo& info) {
+    mRootRenderNode->prepareTree(info);
+
+    if (info.hasAnimations && !info.hasFunctors) {
+        // TODO: Functors
+        mRenderThread.postFrameCallback(this);
+    }
+}
+
+void CanvasContext::draw(Rect* dirty) {
+    LOG_ALWAYS_FATAL_IF(!mCanvas || mEglSurface == EGL_NO_SURFACE,
+            "drawDisplayList called on a context with no canvas or surface!");
+
+    EGLint width, height;
+    mGlobalContext->beginFrame(mEglSurface, &width, &height);
+    if (width != mCanvas->getViewportWidth() || height != mCanvas->getViewportHeight()) {
+        mCanvas->setViewport(width, height);
+        dirty = NULL;
+    } else if (!mDirtyRegionsEnabled || mHaveNewSurface) {
+        dirty = NULL;
+    }
+
+    status_t status;
+    if (dirty && !dirty->isEmpty()) {
+        status = mCanvas->prepareDirty(dirty->left, dirty->top,
+                dirty->right, dirty->bottom, mOpaque);
+    } else {
+        status = mCanvas->prepare(mOpaque);
+    }
+
+    Rect outBounds;
+    status |= mCanvas->drawDisplayList(mRootRenderNode.get(), outBounds);
+
+    // TODO: Draw debug info
+    // TODO: Performance tracking
+
+    mCanvas->finish();
+
+    if (status & DrawGlInfo::kStatusDrew) {
+        swapBuffers();
+    }
+}
+
+// Called by choreographer to do an RT-driven animation
+void CanvasContext::doFrame(nsecs_t frameTimeNanos) {
+    ATRACE_CALL();
+
+    TreeInfo info;
+    info.evaluateAnimations = true;
+    info.frameTimeMs = nanoseconds_to_milliseconds(frameTimeNanos);
+    info.performStagingPush = false;
+    info.prepareTextures = false;
+
+    prepareTree(info);
+    draw(NULL);
+}
+
+void CanvasContext::invokeFunctor(Functor* functor) {
+    ATRACE_CALL();
+    DrawGlInfo::Mode mode = DrawGlInfo::kModeProcessNoContext;
+    if (mGlobalContext->hasContext()) {
+        requireGlContext();
+        mode = DrawGlInfo::kModeProcess;
+    }
+    // TODO: Remove the dummy info in the future
+    DrawGlInfo dummyInfo;
+    memset(&dummyInfo, 0, sizeof(DrawGlInfo));
+    (*functor)(mode, &dummyInfo);
+
+    if (mCanvas) {
+        mCanvas->resume();
+    }
+}
+
+bool CanvasContext::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) {
+    requireGlContext();
+    TreeInfo info;
+    layer->apply(info);
+    return LayerRenderer::copyLayer(layer->backingLayer(), bitmap);
+}
+
+void CanvasContext::runWithGlContext(RenderTask* task) {
+    requireGlContext();
+    task->run();
+}
+
+Layer* CanvasContext::createRenderLayer(int width, int height) {
+    requireSurface();
+    return LayerRenderer::createRenderLayer(width, height);
+}
+
+Layer* CanvasContext::createTextureLayer() {
+    requireSurface();
+    return LayerRenderer::createTextureLayer();
+}
+
+void CanvasContext::requireGlContext() {
+    if (mEglSurface != EGL_NO_SURFACE) {
+        makeCurrent();
+    } else {
+        mGlobalContext->usePBufferSurface();
+    }
+}
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
new file mode 100644
index 0000000..0873ad4
--- /dev/null
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef CANVASCONTEXT_H_
+#define CANVASCONTEXT_H_
+
+#include <cutils/compiler.h>
+#include <EGL/egl.h>
+#include <SkBitmap.h>
+#include <utils/Functor.h>
+#include <utils/Vector.h>
+
+#include "../RenderNode.h"
+#include "RenderTask.h"
+#include "RenderThread.h"
+
+#define FUNCTOR_PROCESS_DELAY 4
+
+namespace android {
+namespace uirenderer {
+
+class DeferredLayerUpdater;
+class OpenGLRenderer;
+class Rect;
+class Layer;
+
+namespace renderthread {
+
+class GlobalContext;
+
+// This per-renderer class manages the bridge between the global EGL context
+// and the render surface.
+class CanvasContext : public IFrameCallback {
+public:
+    CanvasContext(bool translucent, RenderNode* rootRenderNode);
+    virtual ~CanvasContext();
+
+    bool initialize(EGLNativeWindowType window);
+    void updateSurface(EGLNativeWindowType window);
+    void pauseSurface(EGLNativeWindowType window);
+    void setup(int width, int height);
+    void makeCurrent();
+    void processLayerUpdates(const Vector<DeferredLayerUpdater*>* layerUpdaters, TreeInfo& info);
+    void prepareTree(TreeInfo& info);
+    void draw(Rect* dirty);
+    void destroyCanvasAndSurface();
+
+    // IFrameCallback, Chroreographer-driven frame callback entry point
+    virtual void doFrame(nsecs_t frameTimeNanos);
+
+    bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap);
+
+    void invokeFunctor(Functor* functor);
+
+    void runWithGlContext(RenderTask* task);
+
+    Layer* createRenderLayer(int width, int height);
+    Layer* createTextureLayer();
+
+private:
+    void setSurface(EGLNativeWindowType window);
+    void swapBuffers();
+    void requireSurface();
+
+    void requireGlContext();
+
+    GlobalContext* mGlobalContext;
+    RenderThread& mRenderThread;
+    EGLSurface mEglSurface;
+    bool mDirtyRegionsEnabled;
+
+    bool mOpaque;
+    OpenGLRenderer* mCanvas;
+    bool mHaveNewSurface;
+
+    const sp<RenderNode> mRootRenderNode;
+};
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
+#endif /* CANVASCONTEXT_H_ */
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
new file mode 100644
index 0000000..ff4be71
--- /dev/null
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -0,0 +1,126 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define ATRACE_TAG ATRACE_TAG_VIEW
+
+#include "DrawFrameTask.h"
+
+#include <utils/Log.h>
+#include <utils/Trace.h>
+
+#include "../DisplayList.h"
+#include "../RenderNode.h"
+#include "CanvasContext.h"
+#include "RenderThread.h"
+
+namespace android {
+namespace uirenderer {
+namespace renderthread {
+
+DrawFrameTask::DrawFrameTask() : mContext(0) {
+}
+
+DrawFrameTask::~DrawFrameTask() {
+}
+
+void DrawFrameTask::setContext(CanvasContext* context) {
+    mContext = context;
+}
+
+void DrawFrameTask::addLayer(DeferredLayerUpdater* layer) {
+    LOG_ALWAYS_FATAL_IF(!mContext, "Lifecycle violation, there's no context to addLayer with!");
+
+    mLayers.push(layer);
+}
+
+void DrawFrameTask::removeLayer(DeferredLayerUpdater* layer) {
+    for (size_t i = 0; i < mLayers.size(); i++) {
+        if (mLayers[i] == layer) {
+            mLayers.removeAt(i);
+            break;
+        }
+    }
+}
+
+void DrawFrameTask::setDirty(int left, int top, int right, int bottom) {
+    mDirty.set(left, top, right, bottom);
+}
+
+void DrawFrameTask::drawFrame(RenderThread* renderThread) {
+    LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!");
+
+    postAndWait(renderThread);
+
+    // Reset the single-frame data
+    mDirty.setEmpty();
+}
+
+void DrawFrameTask::postAndWait(RenderThread* renderThread) {
+    AutoMutex _lock(mLock);
+    renderThread->queue(this);
+    mSignal.wait(mLock);
+}
+
+void DrawFrameTask::run() {
+    ATRACE_NAME("DrawFrame");
+
+    bool canUnblockUiThread = syncFrameState();
+
+    // Grab a copy of everything we need
+    Rect dirty(mDirty);
+    CanvasContext* context = mContext;
+
+    // From this point on anything in "this" is *UNSAFE TO ACCESS*
+    if (canUnblockUiThread) {
+        unblockUiThread();
+    }
+
+    context->draw(&dirty);
+
+    if (!canUnblockUiThread) {
+        unblockUiThread();
+    }
+}
+
+static void initTreeInfo(TreeInfo& info) {
+    info.prepareTextures = true;
+    info.performStagingPush = true;
+    info.evaluateAnimations = true;
+    // TODO: Get this from Choreographer
+    nsecs_t frameTimeNs = systemTime(CLOCK_MONOTONIC);
+    info.frameTimeMs = nanoseconds_to_milliseconds(frameTimeNs);
+}
+
+bool DrawFrameTask::syncFrameState() {
+    ATRACE_CALL();
+    mContext->makeCurrent();
+    Caches::getInstance().textureCache.resetMarkInUse();
+    TreeInfo info;
+    initTreeInfo(info);
+    mContext->processLayerUpdates(&mLayers, info);
+    mContext->prepareTree(info);
+    // If prepareTextures is false, we ran out of texture cache space
+    return !info.hasFunctors && info.prepareTextures;
+}
+
+void DrawFrameTask::unblockUiThread() {
+    AutoMutex _lock(mLock);
+    mSignal.signal();
+}
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/renderthread/DrawFrameTask.h b/libs/hwui/renderthread/DrawFrameTask.h
new file mode 100644
index 0000000..c280868
--- /dev/null
+++ b/libs/hwui/renderthread/DrawFrameTask.h
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef DRAWFRAMETASK_H
+#define DRAWFRAMETASK_H
+
+#include <utils/Condition.h>
+#include <utils/Mutex.h>
+#include <utils/StrongPointer.h>
+#include <utils/Vector.h>
+
+#include "RenderTask.h"
+
+#include "../Rect.h"
+
+namespace android {
+namespace uirenderer {
+
+class DeferredLayerUpdater;
+class DisplayListData;
+class RenderNode;
+
+namespace renderthread {
+
+class CanvasContext;
+class RenderThread;
+
+/*
+ * This is a special Super Task. It is re-used multiple times by RenderProxy,
+ * and contains state (such as layer updaters & new DisplayListDatas) that is
+ * tracked across many frames not just a single frame.
+ * It is the sync-state task, and will kick off the post-sync draw
+ */
+class DrawFrameTask : public RenderTask {
+public:
+    DrawFrameTask();
+    virtual ~DrawFrameTask();
+
+    void setContext(CanvasContext* context);
+
+    void addLayer(DeferredLayerUpdater* layer);
+    void removeLayer(DeferredLayerUpdater* layer);
+
+    void setDirty(int left, int top, int right, int bottom);
+    void drawFrame(RenderThread* renderThread);
+
+    virtual void run();
+
+private:
+    void postAndWait(RenderThread* renderThread);
+    bool syncFrameState();
+    void unblockUiThread();
+
+    Mutex mLock;
+    Condition mSignal;
+
+    CanvasContext* mContext;
+
+    /*********************************************
+     *  Single frame data
+     *********************************************/
+    Rect mDirty;
+
+    /*********************************************
+     *  Multi frame data
+     *********************************************/
+    Vector<DeferredLayerUpdater*> mLayers;
+};
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* DRAWFRAMETASK_H */
diff --git a/libs/hwui/renderthread/RenderProxy.cpp b/libs/hwui/renderthread/RenderProxy.cpp
new file mode 100644
index 0000000..87886e6
--- /dev/null
+++ b/libs/hwui/renderthread/RenderProxy.cpp
@@ -0,0 +1,270 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#define LOG_TAG "RenderProxy"
+
+#include "RenderProxy.h"
+
+#include "CanvasContext.h"
+#include "RenderTask.h"
+#include "RenderThread.h"
+
+#include "../DeferredLayerUpdater.h"
+#include "../DisplayList.h"
+#include "../LayerRenderer.h"
+#include "../Rect.h"
+
+namespace android {
+namespace uirenderer {
+namespace renderthread {
+
+#define ARGS(method) method ## Args
+
+#define CREATE_BRIDGE0(name) CREATE_BRIDGE(name,,,,,,,,)
+#define CREATE_BRIDGE1(name, a1) CREATE_BRIDGE(name, a1,,,,,,,)
+#define CREATE_BRIDGE2(name, a1, a2) CREATE_BRIDGE(name, a1,a2,,,,,,)
+#define CREATE_BRIDGE3(name, a1, a2, a3) CREATE_BRIDGE(name, a1,a2,a3,,,,,)
+#define CREATE_BRIDGE4(name, a1, a2, a3, a4) CREATE_BRIDGE(name, a1,a2,a3,a4,,,,)
+#define CREATE_BRIDGE(name, a1, a2, a3, a4, a5, a6, a7, a8) \
+    typedef struct { \
+        a1; a2; a3; a4; a5; a6; a7; a8; \
+    } ARGS(name); \
+    static void* Bridge_ ## name(ARGS(name)* args)
+
+#define SETUP_TASK(method) \
+    LOG_ALWAYS_FATAL_IF( METHOD_INVOKE_PAYLOAD_SIZE < sizeof(ARGS(method)), \
+        "METHOD_INVOKE_PAYLOAD_SIZE %d is smaller than sizeof(" #method "Args) %d", \
+                METHOD_INVOKE_PAYLOAD_SIZE, sizeof(ARGS(method))); \
+    MethodInvokeRenderTask* task = new MethodInvokeRenderTask((RunnableMethod) Bridge_ ## method); \
+    ARGS(method) *args = (ARGS(method) *) task->payload()
+
+CREATE_BRIDGE2(createContext, bool translucent, RenderNode* rootRenderNode) {
+    return new CanvasContext(args->translucent, args->rootRenderNode);
+}
+
+RenderProxy::RenderProxy(bool translucent, RenderNode* rootRenderNode)
+        : mRenderThread(RenderThread::getInstance())
+        , mContext(0) {
+    SETUP_TASK(createContext);
+    args->translucent = translucent;
+    args->rootRenderNode = rootRenderNode;
+    mContext = (CanvasContext*) postAndWait(task);
+    mDrawFrameTask.setContext(mContext);
+}
+
+RenderProxy::~RenderProxy() {
+    destroyContext();
+}
+
+CREATE_BRIDGE1(destroyContext, CanvasContext* context) {
+    delete args->context;
+    return NULL;
+}
+
+void RenderProxy::destroyContext() {
+    if (mContext) {
+        SETUP_TASK(destroyContext);
+        args->context = mContext;
+        mContext = 0;
+        mDrawFrameTask.setContext(0);
+        // This is also a fence as we need to be certain that there are no
+        // outstanding mDrawFrame tasks posted before it is destroyed
+        postAndWait(task);
+    }
+}
+
+CREATE_BRIDGE2(initialize, CanvasContext* context, EGLNativeWindowType window) {
+    return (void*) args->context->initialize(args->window);
+}
+
+bool RenderProxy::initialize(const sp<ANativeWindow>& window) {
+    SETUP_TASK(initialize);
+    args->context = mContext;
+    args->window = window.get();
+    return (bool) postAndWait(task);
+}
+
+CREATE_BRIDGE2(updateSurface, CanvasContext* context, EGLNativeWindowType window) {
+    args->context->updateSurface(args->window);
+    return NULL;
+}
+
+void RenderProxy::updateSurface(const sp<ANativeWindow>& window) {
+    SETUP_TASK(updateSurface);
+    args->context = mContext;
+    args->window = window.get();
+    postAndWait(task);
+}
+
+CREATE_BRIDGE2(pauseSurface, CanvasContext* context, EGLNativeWindowType window) {
+    args->context->pauseSurface(args->window);
+    return NULL;
+}
+
+void RenderProxy::pauseSurface(const sp<ANativeWindow>& window) {
+    SETUP_TASK(pauseSurface);
+    args->context = mContext;
+    args->window = window.get();
+    postAndWait(task);
+}
+
+CREATE_BRIDGE3(setup, CanvasContext* context, int width, int height) {
+    args->context->setup(args->width, args->height);
+    return NULL;
+}
+
+void RenderProxy::setup(int width, int height) {
+    SETUP_TASK(setup);
+    args->context = mContext;
+    args->width = width;
+    args->height = height;
+    post(task);
+}
+
+void RenderProxy::syncAndDrawFrame(
+        int dirtyLeft, int dirtyTop, int dirtyRight, int dirtyBottom) {
+    mDrawFrameTask.setDirty(dirtyLeft, dirtyTop, dirtyRight, dirtyBottom);
+    mDrawFrameTask.drawFrame(&mRenderThread);
+}
+
+CREATE_BRIDGE1(destroyCanvasAndSurface, CanvasContext* context) {
+    args->context->destroyCanvasAndSurface();
+    return NULL;
+}
+
+void RenderProxy::destroyCanvasAndSurface() {
+    SETUP_TASK(destroyCanvasAndSurface);
+    args->context = mContext;
+    // destroyCanvasAndSurface() needs a fence as when it returns the
+    // underlying BufferQueue is going to be released from under
+    // the render thread.
+    postAndWait(task);
+}
+
+CREATE_BRIDGE2(invokeFunctor, CanvasContext* context, Functor* functor) {
+    args->context->invokeFunctor(args->functor);
+    return NULL;
+}
+
+void RenderProxy::invokeFunctor(Functor* functor, bool waitForCompletion) {
+    ATRACE_CALL();
+    SETUP_TASK(invokeFunctor);
+    args->context = mContext;
+    args->functor = functor;
+    if (waitForCompletion) {
+        postAndWait(task);
+    } else {
+        post(task);
+    }
+}
+
+CREATE_BRIDGE2(runWithGlContext, CanvasContext* context, RenderTask* task) {
+    args->context->runWithGlContext(args->task);
+    return NULL;
+}
+
+void RenderProxy::runWithGlContext(RenderTask* gltask) {
+    SETUP_TASK(runWithGlContext);
+    args->context = mContext;
+    args->task = gltask;
+    postAndWait(task);
+}
+
+CREATE_BRIDGE3(createDisplayListLayer, CanvasContext* context, int width, int height) {
+    Layer* layer = args->context->createRenderLayer(args->width, args->height);
+    if (!layer) return 0;
+    return new DeferredLayerUpdater(layer);
+}
+
+DeferredLayerUpdater* RenderProxy::createDisplayListLayer(int width, int height) {
+    SETUP_TASK(createDisplayListLayer);
+    args->width = width;
+    args->height = height;
+    args->context = mContext;
+    void* retval = postAndWait(task);
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(retval);
+    mDrawFrameTask.addLayer(layer);
+    return layer;
+}
+
+CREATE_BRIDGE1(createTextureLayer, CanvasContext* context) {
+    Layer* layer = args->context->createTextureLayer();
+    if (!layer) return 0;
+    return new DeferredLayerUpdater(layer);
+}
+
+DeferredLayerUpdater* RenderProxy::createTextureLayer() {
+    SETUP_TASK(createTextureLayer);
+    args->context = mContext;
+    void* retval = postAndWait(task);
+    DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(retval);
+    mDrawFrameTask.addLayer(layer);
+    return layer;
+}
+
+CREATE_BRIDGE1(destroyLayer, Layer* layer) {
+    LayerRenderer::destroyLayer(args->layer);
+    return NULL;
+}
+
+CREATE_BRIDGE3(copyLayerInto, CanvasContext* context, DeferredLayerUpdater* layer,
+        SkBitmap* bitmap) {
+    bool success = args->context->copyLayerInto(args->layer, args->bitmap);
+    return (void*) success;
+}
+
+bool RenderProxy::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) {
+    SETUP_TASK(copyLayerInto);
+    args->context = mContext;
+    args->layer = layer;
+    args->bitmap = bitmap;
+    return (bool) postAndWait(task);
+}
+
+void RenderProxy::destroyLayer(DeferredLayerUpdater* layer) {
+    mDrawFrameTask.removeLayer(layer);
+    SETUP_TASK(destroyLayer);
+    args->layer = layer->detachBackingLayer();
+    post(task);
+}
+
+CREATE_BRIDGE0(fence) {
+    // Intentionally empty
+    return NULL;
+}
+
+void RenderProxy::fence() {
+    SETUP_TASK(fence);
+    postAndWait(task);
+}
+
+void RenderProxy::post(RenderTask* task) {
+    mRenderThread.queue(task);
+}
+
+void* RenderProxy::postAndWait(MethodInvokeRenderTask* task) {
+    void* retval;
+    task->setReturnPtr(&retval);
+    SignalingRenderTask syncTask(task, &mSyncMutex, &mSyncCondition);
+    AutoMutex _lock(mSyncMutex);
+    mRenderThread.queue(&syncTask);
+    mSyncCondition.wait(mSyncMutex);
+    return retval;
+}
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/renderthread/RenderProxy.h b/libs/hwui/renderthread/RenderProxy.h
new file mode 100644
index 0000000..eab1395
--- /dev/null
+++ b/libs/hwui/renderthread/RenderProxy.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#ifndef RENDERPROXY_H_
+#define RENDERPROXY_H_
+
+#include "RenderTask.h"
+
+#include <cutils/compiler.h>
+#include <EGL/egl.h>
+#include <SkBitmap.h>
+#include <utils/Condition.h>
+#include <utils/Functor.h>
+#include <utils/Mutex.h>
+#include <utils/StrongPointer.h>
+#include <utils/Vector.h>
+
+#include "DrawFrameTask.h"
+
+namespace android {
+namespace uirenderer {
+
+class DeferredLayerUpdater;
+class RenderNode;
+class DisplayListData;
+class Layer;
+class Rect;
+
+namespace renderthread {
+
+class CanvasContext;
+class ErrorChannel;
+class RenderThread;
+class RenderProxyBridge;
+
+/*
+ * RenderProxy is strictly single threaded. All methods must be invoked on the owning
+ * thread. It is important to note that RenderProxy may be deleted while it has
+ * tasks post()'d as a result. Therefore any RenderTask that is post()'d must not
+ * reference RenderProxy or any of its fields. The exception here is that postAndWait()
+ * references RenderProxy fields. This is safe as RenderProxy cannot
+ * be deleted if it is blocked inside a call.
+ */
+class ANDROID_API RenderProxy {
+public:
+    ANDROID_API RenderProxy(bool translucent, RenderNode* rootNode);
+    ANDROID_API virtual ~RenderProxy();
+
+    ANDROID_API bool initialize(const sp<ANativeWindow>& window);
+    ANDROID_API void updateSurface(const sp<ANativeWindow>& window);
+    ANDROID_API void pauseSurface(const sp<ANativeWindow>& window);
+    ANDROID_API void setup(int width, int height);
+    ANDROID_API void syncAndDrawFrame(
+            int dirtyLeft, int dirtyTop, int dirtyRight, int dirtyBottom);
+    ANDROID_API void destroyCanvasAndSurface();
+
+    ANDROID_API void invokeFunctor(Functor* functor, bool waitForCompletion);
+
+    ANDROID_API void runWithGlContext(RenderTask* task);
+
+    ANDROID_API DeferredLayerUpdater* createDisplayListLayer(int width, int height);
+    ANDROID_API DeferredLayerUpdater* createTextureLayer();
+    ANDROID_API bool copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap);
+    ANDROID_API void destroyLayer(DeferredLayerUpdater* layer);
+
+    ANDROID_API void fence();
+
+private:
+    RenderThread& mRenderThread;
+    CanvasContext* mContext;
+
+    DrawFrameTask mDrawFrameTask;
+
+    Mutex mSyncMutex;
+    Condition mSyncCondition;
+
+    void destroyContext();
+
+    void post(RenderTask* task);
+    void* postAndWait(MethodInvokeRenderTask* task);
+
+    // Friend class to help with bridging
+    friend class RenderProxyBridge;
+};
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
+#endif /* RENDERPROXY_H_ */
diff --git a/libs/hwui/renderthread/RenderTask.cpp b/libs/hwui/renderthread/RenderTask.cpp
new file mode 100644
index 0000000..7ca61e4
--- /dev/null
+++ b/libs/hwui/renderthread/RenderTask.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#define LOG_TAG "RenderTask"
+
+#include "RenderTask.h"
+
+#include <utils/Log.h>
+#include <utils/Condition.h>
+#include <utils/Mutex.h>
+
+namespace android {
+namespace uirenderer {
+namespace renderthread {
+
+void SignalingRenderTask::run() {
+    mTask->run();
+    mLock->lock();
+    mSignal->signal();
+    mLock->unlock();
+}
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/renderthread/RenderTask.h b/libs/hwui/renderthread/RenderTask.h
new file mode 100644
index 0000000..1554a16
--- /dev/null
+++ b/libs/hwui/renderthread/RenderTask.h
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#ifndef RENDERTASK_H_
+#define RENDERTASK_H_
+
+#include <cutils/compiler.h>
+#include <utils/Timers.h>
+
+namespace android {
+class Mutex;
+class Condition;
+namespace uirenderer {
+namespace renderthread {
+
+#define METHOD_INVOKE_PAYLOAD_SIZE (8 * sizeof(void*))
+
+/*
+ * Notes about memory management
+ *
+ * RenderThread will only invoke RenderTask::run(). It is the responsibility
+ * of the RenderTask to know if it needs to suicide at the end of run() or
+ * if some other lifecycle is being used. As such, it is not valid to reference
+ * anything on RenderTask after the first call to run().
+ *
+ * For example SignalingRenderTask
+ * is expected to be stack allocated by the calling thread, so it does not
+ * suicide in run() but instead relies on the caller to destroy it.
+ *
+ * MethodInvokeRenderTask however is currently allocated with new, so it will
+ * suicide at the end of run(). TODO: Replace this with a small pool to avoid
+ * malloc/free churn of small objects?
+ */
+
+class ANDROID_API RenderTask {
+public:
+    ANDROID_API RenderTask() : mNext(0), mRunAt(0) {}
+    ANDROID_API virtual ~RenderTask() {}
+
+    ANDROID_API virtual void run() = 0;
+
+    RenderTask* mNext;
+    nsecs_t mRunAt; // nano-seconds on the SYSTEM_TIME_MONOTONIC clock
+};
+
+class SignalingRenderTask : public RenderTask {
+public:
+    // Takes ownership of task, caller owns lock and signal
+    SignalingRenderTask(RenderTask* task, Mutex* lock, Condition* signal)
+            : mTask(task), mLock(lock), mSignal(signal) {}
+    virtual void run();
+
+private:
+    RenderTask* mTask;
+    Mutex* mLock;
+    Condition* mSignal;
+};
+
+typedef void* (*RunnableMethod)(void* data);
+
+class MethodInvokeRenderTask : public RenderTask {
+public:
+    MethodInvokeRenderTask(RunnableMethod method)
+        : mMethod(method), mReturnPtr(0) {}
+
+    void* payload() { return mData; }
+    void setReturnPtr(void** retptr) { mReturnPtr = retptr; }
+
+    virtual void run() {
+        void* retval = mMethod(mData);
+        if (mReturnPtr) {
+            *mReturnPtr = retval;
+        }
+        // Commit suicide
+        delete this;
+    }
+private:
+    RunnableMethod mMethod;
+    char mData[METHOD_INVOKE_PAYLOAD_SIZE];
+    void** mReturnPtr;
+};
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
+#endif /* RENDERTASK_H_ */
diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp
new file mode 100644
index 0000000..e95707a
--- /dev/null
+++ b/libs/hwui/renderthread/RenderThread.cpp
@@ -0,0 +1,299 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#define LOG_TAG "RenderThread"
+
+#include "RenderThread.h"
+
+#include <gui/DisplayEventReceiver.h>
+#include <utils/Log.h>
+
+#include "CanvasContext.h"
+#include "RenderProxy.h"
+
+namespace android {
+using namespace uirenderer::renderthread;
+ANDROID_SINGLETON_STATIC_INSTANCE(RenderThread);
+
+namespace uirenderer {
+namespace renderthread {
+
+// Number of events to read at a time from the DisplayEventReceiver pipe.
+// The value should be large enough that we can quickly drain the pipe
+// using just a few large reads.
+static const size_t EVENT_BUFFER_SIZE = 100;
+
+// Slight delay to give the UI time to push us a new frame before we replay
+static const int DISPATCH_FRAME_CALLBACKS_DELAY = 0;
+
+TaskQueue::TaskQueue() : mHead(0), mTail(0) {}
+
+RenderTask* TaskQueue::next() {
+    RenderTask* ret = mHead;
+    if (ret) {
+        mHead = ret->mNext;
+        if (!mHead) {
+            mTail = 0;
+        }
+        ret->mNext = 0;
+    }
+    return ret;
+}
+
+RenderTask* TaskQueue::peek() {
+    return mHead;
+}
+
+void TaskQueue::queue(RenderTask* task) {
+    // Since the RenderTask itself forms the linked list it is not allowed
+    // to have the same task queued twice
+    LOG_ALWAYS_FATAL_IF(task->mNext || mTail == task, "Task is already in the queue!");
+    if (mTail) {
+        // Fast path if we can just append
+        if (mTail->mRunAt <= task->mRunAt) {
+            mTail->mNext = task;
+            mTail = task;
+        } else {
+            // Need to find the proper insertion point
+            RenderTask* previous = 0;
+            RenderTask* next = mHead;
+            while (next && next->mRunAt <= task->mRunAt) {
+                previous = next;
+                next = next->mNext;
+            }
+            if (!previous) {
+                task->mNext = mHead;
+                mHead = task;
+            } else {
+                previous->mNext = task;
+                if (next) {
+                    task->mNext = next;
+                } else {
+                    mTail = task;
+                }
+            }
+        }
+    } else {
+        mTail = mHead = task;
+    }
+}
+
+void TaskQueue::remove(RenderTask* task) {
+    // TaskQueue is strict here to enforce that users are keeping track of
+    // their RenderTasks due to how their memory is managed
+    LOG_ALWAYS_FATAL_IF(!task->mNext && mTail != task,
+            "Cannot remove a task that isn't in the queue!");
+
+    // If task is the head we can just call next() to pop it off
+    // Otherwise we need to scan through to find the task before it
+    if (peek() == task) {
+        next();
+    } else {
+        RenderTask* previous = mHead;
+        while (previous->mNext != task) {
+            previous = previous->mNext;
+        }
+        previous->mNext = task->mNext;
+        if (mTail == task) {
+            mTail = previous;
+        }
+    }
+}
+
+class DispatchFrameCallbacks : public RenderTask {
+private:
+    RenderThread* mRenderThread;
+public:
+    DispatchFrameCallbacks(RenderThread* rt) : mRenderThread(rt) {}
+
+    virtual void run() {
+        mRenderThread->dispatchFrameCallbacks();
+    }
+};
+
+RenderThread::RenderThread() : Thread(true), Singleton<RenderThread>()
+        , mNextWakeup(LLONG_MAX)
+        , mDisplayEventReceiver(0)
+        , mVsyncRequested(false)
+        , mFrameCallbackTaskPending(false)
+        , mFrameCallbackTask(0)
+        , mFrameTime(0) {
+    mFrameCallbackTask = new DispatchFrameCallbacks(this);
+    mLooper = new Looper(false);
+    run("RenderThread");
+}
+
+RenderThread::~RenderThread() {
+}
+
+void RenderThread::initializeDisplayEventReceiver() {
+    LOG_ALWAYS_FATAL_IF(mDisplayEventReceiver, "Initializing a second DisplayEventReceiver?");
+    mDisplayEventReceiver = new DisplayEventReceiver();
+    status_t status = mDisplayEventReceiver->initCheck();
+    LOG_ALWAYS_FATAL_IF(status != NO_ERROR, "Initialization of DisplayEventReceiver "
+            "failed with status: %d", status);
+
+    // Register the FD
+    mLooper->addFd(mDisplayEventReceiver->getFd(), 0,
+            Looper::EVENT_INPUT, RenderThread::displayEventReceiverCallback, this);
+}
+
+int RenderThread::displayEventReceiverCallback(int fd, int events, void* data) {
+    if (events & (Looper::EVENT_ERROR | Looper::EVENT_HANGUP)) {
+        ALOGE("Display event receiver pipe was closed or an error occurred.  "
+                "events=0x%x", events);
+        return 0; // remove the callback
+    }
+
+    if (!(events & Looper::EVENT_INPUT)) {
+        ALOGW("Received spurious callback for unhandled poll event.  "
+                "events=0x%x", events);
+        return 1; // keep the callback
+    }
+
+    reinterpret_cast<RenderThread*>(data)->drainDisplayEventQueue();
+
+    return 1; // keep the callback
+}
+
+static nsecs_t latestVsyncEvent(DisplayEventReceiver* receiver) {
+    DisplayEventReceiver::Event buf[EVENT_BUFFER_SIZE];
+    nsecs_t latest = 0;
+    ssize_t n;
+    while ((n = receiver->getEvents(buf, EVENT_BUFFER_SIZE)) > 0) {
+        for (ssize_t i = 0; i < n; i++) {
+            const DisplayEventReceiver::Event& ev = buf[i];
+            switch (ev.header.type) {
+            case DisplayEventReceiver::DISPLAY_EVENT_VSYNC:
+                latest = ev.header.timestamp;
+                break;
+            }
+        }
+    }
+    if (n < 0) {
+        ALOGW("Failed to get events from display event receiver, status=%d", status_t(n));
+    }
+    return latest;
+}
+
+void RenderThread::drainDisplayEventQueue() {
+    nsecs_t vsyncEvent = latestVsyncEvent(mDisplayEventReceiver);
+    if (vsyncEvent > 0) {
+        mVsyncRequested = false;
+        mFrameTime = vsyncEvent;
+        if (!mFrameCallbackTaskPending) {
+            mFrameCallbackTaskPending = true;
+            //queueDelayed(mFrameCallbackTask, DISPATCH_FRAME_CALLBACKS_DELAY);
+            queue(mFrameCallbackTask);
+        }
+    }
+}
+
+void RenderThread::dispatchFrameCallbacks() {
+    mFrameCallbackTaskPending = false;
+
+    std::set<IFrameCallback*> callbacks;
+    mFrameCallbacks.swap(callbacks);
+
+    for (std::set<IFrameCallback*>::iterator it = callbacks.begin(); it != callbacks.end(); it++) {
+        (*it)->doFrame(mFrameTime);
+    }
+}
+
+bool RenderThread::threadLoop() {
+    initializeDisplayEventReceiver();
+
+    int timeoutMillis = -1;
+    for (;;) {
+        int result = mLooper->pollOnce(timeoutMillis);
+        LOG_ALWAYS_FATAL_IF(result == Looper::POLL_ERROR,
+                "RenderThread Looper POLL_ERROR!");
+
+        nsecs_t nextWakeup;
+        // Process our queue, if we have anything
+        while (RenderTask* task = nextTask(&nextWakeup)) {
+            task->run();
+            // task may have deleted itself, do not reference it again
+        }
+        if (nextWakeup == LLONG_MAX) {
+            timeoutMillis = -1;
+        } else {
+            nsecs_t timeoutNanos = nextWakeup - systemTime(SYSTEM_TIME_MONOTONIC);
+            timeoutMillis = nanoseconds_to_milliseconds(timeoutNanos);
+            if (timeoutMillis < 0) {
+                timeoutMillis = 0;
+            }
+        }
+    }
+
+    return false;
+}
+
+void RenderThread::queue(RenderTask* task) {
+    AutoMutex _lock(mLock);
+    mQueue.queue(task);
+    if (mNextWakeup && task->mRunAt < mNextWakeup) {
+        mNextWakeup = 0;
+        mLooper->wake();
+    }
+}
+
+void RenderThread::queueDelayed(RenderTask* task, int delayMs) {
+    nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
+    task->mRunAt = now + milliseconds_to_nanoseconds(delayMs);
+    queue(task);
+}
+
+void RenderThread::remove(RenderTask* task) {
+    AutoMutex _lock(mLock);
+    mQueue.remove(task);
+}
+
+void RenderThread::postFrameCallback(IFrameCallback* callback) {
+    mFrameCallbacks.insert(callback);
+    if (!mVsyncRequested) {
+        mVsyncRequested = true;
+        status_t status = mDisplayEventReceiver->requestNextVsync();
+        LOG_ALWAYS_FATAL_IF(status != NO_ERROR,
+                "requestNextVsync failed with status: %d", status);
+    }
+}
+
+void RenderThread::removeFrameCallback(IFrameCallback* callback) {
+    mFrameCallbacks.erase(callback);
+}
+
+RenderTask* RenderThread::nextTask(nsecs_t* nextWakeup) {
+    AutoMutex _lock(mLock);
+    RenderTask* next = mQueue.peek();
+    if (!next) {
+        mNextWakeup = LLONG_MAX;
+    } else {
+        // Most tasks won't be delayed, so avoid unnecessary systemTime() calls
+        if (next->mRunAt <= 0 || next->mRunAt <= systemTime(SYSTEM_TIME_MONOTONIC)) {
+            next = mQueue.next();
+        }
+        mNextWakeup = next->mRunAt;
+    }
+    if (nextWakeup) {
+        *nextWakeup = mNextWakeup;
+    }
+    return next;
+}
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h
new file mode 100644
index 0000000..b93dfd6
--- /dev/null
+++ b/libs/hwui/renderthread/RenderThread.h
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+#ifndef RENDERTHREAD_H_
+#define RENDERTHREAD_H_
+
+#include "RenderTask.h"
+
+#include <memory>
+#include <set>
+
+#include <cutils/compiler.h>
+#include <utils/Looper.h>
+#include <utils/Mutex.h>
+#include <utils/Singleton.h>
+#include <utils/Thread.h>
+
+namespace android {
+class DisplayEventReceiver;
+
+namespace uirenderer {
+namespace renderthread {
+
+class DispatchFrameCallbacks;
+
+class TaskQueue {
+public:
+    TaskQueue();
+
+    RenderTask* next();
+    void queue(RenderTask* task);
+    RenderTask* peek();
+    void remove(RenderTask* task);
+
+private:
+    RenderTask* mHead;
+    RenderTask* mTail;
+};
+
+// Mimics android.view.Choreographer.FrameCallback
+class IFrameCallback {
+public:
+    virtual void doFrame(nsecs_t frameTimeNanos) = 0;
+
+protected:
+    ~IFrameCallback() {}
+};
+
+class ANDROID_API RenderThread : public Thread, public Singleton<RenderThread> {
+public:
+    // RenderThread takes complete ownership of tasks that are queued
+    // and will delete them after they are run
+    ANDROID_API void queue(RenderTask* task);
+    void queueDelayed(RenderTask* task, int delayMs);
+    void remove(RenderTask* task);
+
+    // Mimics android.view.Choreographer
+    void postFrameCallback(IFrameCallback* callback);
+    void removeFrameCallback(IFrameCallback* callback);
+
+protected:
+    virtual bool threadLoop();
+
+private:
+    friend class Singleton<RenderThread>;
+    friend class DispatchFrameCallbacks;
+
+    RenderThread();
+    virtual ~RenderThread();
+
+    void initializeDisplayEventReceiver();
+    static int displayEventReceiverCallback(int fd, int events, void* data);
+    void drainDisplayEventQueue();
+    void dispatchFrameCallbacks();
+
+    // Returns the next task to be run. If this returns NULL nextWakeup is set
+    // to the time to requery for the nextTask to run. mNextWakeup is also
+    // set to this time
+    RenderTask* nextTask(nsecs_t* nextWakeup);
+
+    sp<Looper> mLooper;
+    Mutex mLock;
+
+    nsecs_t mNextWakeup;
+    TaskQueue mQueue;
+
+    DisplayEventReceiver* mDisplayEventReceiver;
+    bool mVsyncRequested;
+    std::set<IFrameCallback*> mFrameCallbacks;
+    bool mFrameCallbackTaskPending;
+    DispatchFrameCallbacks* mFrameCallbackTask;
+    nsecs_t mFrameTime;
+};
+
+} /* namespace renderthread */
+} /* namespace uirenderer */
+} /* namespace android */
+#endif /* RENDERTHREAD_H_ */
diff --git a/libs/hwui/utils/MathUtils.h b/libs/hwui/utils/MathUtils.h
new file mode 100644
index 0000000..7deabe9
--- /dev/null
+++ b/libs/hwui/utils/MathUtils.h
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef MATHUTILS_H
+#define MATHUTILS_H
+
+namespace android {
+namespace uirenderer {
+
+class MathUtils {
+private:
+    static const float gNonZeroEpsilon = 0.001f;
+public:
+    /**
+     * Check for floats that are close enough to zero.
+     */
+    inline static bool isZero(float value) {
+        return (value >= -gNonZeroEpsilon) && (value <= gNonZeroEpsilon);
+    }
+
+    inline static bool isPositive(float value) {
+        return value >= gNonZeroEpsilon;
+    }
+}; // class MathUtils
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* RENDERNODE_H */
diff --git a/libs/hwui/utils/VirtualLightRefBase.h b/libs/hwui/utils/VirtualLightRefBase.h
new file mode 100644
index 0000000..b545aab
--- /dev/null
+++ b/libs/hwui/utils/VirtualLightRefBase.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+#ifndef VIRTUALLIGHTREFBASE_H
+#define VIRTUALLIGHTREFBASE_H
+
+#include <utils/RefBase.h>
+
+namespace android {
+namespace uirenderer {
+
+// This is a wrapper around LightRefBase that simply enforces a virtual
+// destructor to eliminate the template requirement of LightRefBase
+class VirtualLightRefBase : public LightRefBase<VirtualLightRefBase> {
+public:
+    virtual ~VirtualLightRefBase() {}
+};
+
+} /* namespace uirenderer */
+} /* namespace android */
+
+#endif /* VIRTUALLIGHTREFBASE_H */
diff --git a/libs/input/Android.mk b/libs/input/Android.mk
index 6e944ef..a7fb0e2 100644
--- a/libs/input/Android.mk
+++ b/libs/input/Android.mk
@@ -17,30 +17,24 @@
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES:= \
-    EventHub.cpp \
-    InputApplication.cpp \
-    InputDispatcher.cpp \
-    InputListener.cpp \
-    InputManager.cpp \
-    InputReader.cpp \
-    InputWindow.cpp \
     PointerController.cpp \
     SpriteController.cpp
 
 LOCAL_SHARED_LIBRARIES := \
     libcutils \
     liblog \
-    libandroidfw \
     libutils \
-    libhardware \
-    libhardware_legacy \
     libskia \
     libgui \
     libui \
-    libinput
+	libinput \
+	libinputflinger
 
 LOCAL_C_INCLUDES := \
-    external/skia/include/core
+    frameworks/native/services
+
+
+LOCAL_CFLAGS += -Wno-unused-parameter
 
 LOCAL_MODULE:= libinputservice
 
diff --git a/libs/input/EventHub.cpp b/libs/input/EventHub.cpp
deleted file mode 100644
index e30a772..0000000
--- a/libs/input/EventHub.cpp
+++ /dev/null
@@ -1,1675 +0,0 @@
-/*
- * Copyright (C) 2005 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.
- */
-
-#define LOG_TAG "EventHub"
-
-// #define LOG_NDEBUG 0
-
-#include "EventHub.h"
-
-#include <hardware_legacy/power.h>
-
-#include <cutils/properties.h>
-#include <utils/Log.h>
-#include <utils/Timers.h>
-#include <utils/threads.h>
-#include <utils/Errors.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <memory.h>
-#include <errno.h>
-#include <assert.h>
-
-#include <input/KeyLayoutMap.h>
-#include <input/KeyCharacterMap.h>
-#include <input/VirtualKeyMap.h>
-
-#include <string.h>
-#include <stdint.h>
-#include <dirent.h>
-
-#include <sys/inotify.h>
-#include <sys/epoll.h>
-#include <sys/ioctl.h>
-#include <sys/limits.h>
-#include <sys/sha1.h>
-
-/* this macro is used to tell if "bit" is set in "array"
- * it selects a byte from the array, and does a boolean AND
- * operation with a byte that only has the relevant bit set.
- * eg. to check for the 12th bit, we do (array[1] & 1<<4)
- */
-#define test_bit(bit, array)    (array[bit/8] & (1<<(bit%8)))
-
-/* this macro computes the number of bytes needed to represent a bit array of the specified size */
-#define sizeof_bit_array(bits)  ((bits + 7) / 8)
-
-#define INDENT "  "
-#define INDENT2 "    "
-#define INDENT3 "      "
-
-namespace android {
-
-static const char *WAKE_LOCK_ID = "KeyEvents";
-static const char *DEVICE_PATH = "/dev/input";
-
-/* return the larger integer */
-static inline int max(int v1, int v2)
-{
-    return (v1 > v2) ? v1 : v2;
-}
-
-static inline const char* toString(bool value) {
-    return value ? "true" : "false";
-}
-
-static String8 sha1(const String8& in) {
-    SHA1_CTX ctx;
-    SHA1Init(&ctx);
-    SHA1Update(&ctx, reinterpret_cast<const u_char*>(in.string()), in.size());
-    u_char digest[SHA1_DIGEST_LENGTH];
-    SHA1Final(digest, &ctx);
-
-    String8 out;
-    for (size_t i = 0; i < SHA1_DIGEST_LENGTH; i++) {
-        out.appendFormat("%02x", digest[i]);
-    }
-    return out;
-}
-
-static void setDescriptor(InputDeviceIdentifier& identifier) {
-    // Compute a device descriptor that uniquely identifies the device.
-    // The descriptor is assumed to be a stable identifier.  Its value should not
-    // change between reboots, reconnections, firmware updates or new releases of Android.
-    // Ideally, we also want the descriptor to be short and relatively opaque.
-    String8 rawDescriptor;
-    rawDescriptor.appendFormat(":%04x:%04x:", identifier.vendor, identifier.product);
-    if (!identifier.uniqueId.isEmpty()) {
-        rawDescriptor.append("uniqueId:");
-        rawDescriptor.append(identifier.uniqueId);
-    } if (identifier.vendor == 0 && identifier.product == 0) {
-        // If we don't know the vendor and product id, then the device is probably
-        // built-in so we need to rely on other information to uniquely identify
-        // the input device.  Usually we try to avoid relying on the device name or
-        // location but for built-in input device, they are unlikely to ever change.
-        if (!identifier.name.isEmpty()) {
-            rawDescriptor.append("name:");
-            rawDescriptor.append(identifier.name);
-        } else if (!identifier.location.isEmpty()) {
-            rawDescriptor.append("location:");
-            rawDescriptor.append(identifier.location);
-        }
-    }
-    identifier.descriptor = sha1(rawDescriptor);
-    ALOGV("Created descriptor: raw=%s, cooked=%s", rawDescriptor.string(),
-            identifier.descriptor.string());
-}
-
-// --- Global Functions ---
-
-uint32_t getAbsAxisUsage(int32_t axis, uint32_t deviceClasses) {
-    // Touch devices get dibs on touch-related axes.
-    if (deviceClasses & INPUT_DEVICE_CLASS_TOUCH) {
-        switch (axis) {
-        case ABS_X:
-        case ABS_Y:
-        case ABS_PRESSURE:
-        case ABS_TOOL_WIDTH:
-        case ABS_DISTANCE:
-        case ABS_TILT_X:
-        case ABS_TILT_Y:
-        case ABS_MT_SLOT:
-        case ABS_MT_TOUCH_MAJOR:
-        case ABS_MT_TOUCH_MINOR:
-        case ABS_MT_WIDTH_MAJOR:
-        case ABS_MT_WIDTH_MINOR:
-        case ABS_MT_ORIENTATION:
-        case ABS_MT_POSITION_X:
-        case ABS_MT_POSITION_Y:
-        case ABS_MT_TOOL_TYPE:
-        case ABS_MT_BLOB_ID:
-        case ABS_MT_TRACKING_ID:
-        case ABS_MT_PRESSURE:
-        case ABS_MT_DISTANCE:
-            return INPUT_DEVICE_CLASS_TOUCH;
-        }
-    }
-
-    // Joystick devices get the rest.
-    return deviceClasses & INPUT_DEVICE_CLASS_JOYSTICK;
-}
-
-// --- EventHub::Device ---
-
-EventHub::Device::Device(int fd, int32_t id, const String8& path,
-        const InputDeviceIdentifier& identifier) :
-        next(NULL),
-        fd(fd), id(id), path(path), identifier(identifier),
-        classes(0), configuration(NULL), virtualKeyMap(NULL),
-        ffEffectPlaying(false), ffEffectId(-1), controllerNumber(0),
-        timestampOverrideSec(0), timestampOverrideUsec(0) {
-    memset(keyBitmask, 0, sizeof(keyBitmask));
-    memset(absBitmask, 0, sizeof(absBitmask));
-    memset(relBitmask, 0, sizeof(relBitmask));
-    memset(swBitmask, 0, sizeof(swBitmask));
-    memset(ledBitmask, 0, sizeof(ledBitmask));
-    memset(ffBitmask, 0, sizeof(ffBitmask));
-    memset(propBitmask, 0, sizeof(propBitmask));
-}
-
-EventHub::Device::~Device() {
-    close();
-    delete configuration;
-    delete virtualKeyMap;
-}
-
-void EventHub::Device::close() {
-    if (fd >= 0) {
-        ::close(fd);
-        fd = -1;
-    }
-}
-
-
-// --- EventHub ---
-
-const uint32_t EventHub::EPOLL_ID_INOTIFY;
-const uint32_t EventHub::EPOLL_ID_WAKE;
-const int EventHub::EPOLL_SIZE_HINT;
-const int EventHub::EPOLL_MAX_EVENTS;
-
-EventHub::EventHub(void) :
-        mBuiltInKeyboardId(NO_BUILT_IN_KEYBOARD), mNextDeviceId(1), mControllerNumbers(),
-        mOpeningDevices(0), mClosingDevices(0),
-        mNeedToSendFinishedDeviceScan(false),
-        mNeedToReopenDevices(false), mNeedToScanDevices(true),
-        mPendingEventCount(0), mPendingEventIndex(0), mPendingINotify(false) {
-    acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_ID);
-
-    mEpollFd = epoll_create(EPOLL_SIZE_HINT);
-    LOG_ALWAYS_FATAL_IF(mEpollFd < 0, "Could not create epoll instance.  errno=%d", errno);
-
-    mINotifyFd = inotify_init();
-    int result = inotify_add_watch(mINotifyFd, DEVICE_PATH, IN_DELETE | IN_CREATE);
-    LOG_ALWAYS_FATAL_IF(result < 0, "Could not register INotify for %s.  errno=%d",
-            DEVICE_PATH, errno);
-
-    struct epoll_event eventItem;
-    memset(&eventItem, 0, sizeof(eventItem));
-    eventItem.events = EPOLLIN;
-    eventItem.data.u32 = EPOLL_ID_INOTIFY;
-    result = epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mINotifyFd, &eventItem);
-    LOG_ALWAYS_FATAL_IF(result != 0, "Could not add INotify to epoll instance.  errno=%d", errno);
-
-    int wakeFds[2];
-    result = pipe(wakeFds);
-    LOG_ALWAYS_FATAL_IF(result != 0, "Could not create wake pipe.  errno=%d", errno);
-
-    mWakeReadPipeFd = wakeFds[0];
-    mWakeWritePipeFd = wakeFds[1];
-
-    result = fcntl(mWakeReadPipeFd, F_SETFL, O_NONBLOCK);
-    LOG_ALWAYS_FATAL_IF(result != 0, "Could not make wake read pipe non-blocking.  errno=%d",
-            errno);
-
-    result = fcntl(mWakeWritePipeFd, F_SETFL, O_NONBLOCK);
-    LOG_ALWAYS_FATAL_IF(result != 0, "Could not make wake write pipe non-blocking.  errno=%d",
-            errno);
-
-    eventItem.data.u32 = EPOLL_ID_WAKE;
-    result = epoll_ctl(mEpollFd, EPOLL_CTL_ADD, mWakeReadPipeFd, &eventItem);
-    LOG_ALWAYS_FATAL_IF(result != 0, "Could not add wake read pipe to epoll instance.  errno=%d",
-            errno);
-}
-
-EventHub::~EventHub(void) {
-    closeAllDevicesLocked();
-
-    while (mClosingDevices) {
-        Device* device = mClosingDevices;
-        mClosingDevices = device->next;
-        delete device;
-    }
-
-    ::close(mEpollFd);
-    ::close(mINotifyFd);
-    ::close(mWakeReadPipeFd);
-    ::close(mWakeWritePipeFd);
-
-    release_wake_lock(WAKE_LOCK_ID);
-}
-
-InputDeviceIdentifier EventHub::getDeviceIdentifier(int32_t deviceId) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device == NULL) return InputDeviceIdentifier();
-    return device->identifier;
-}
-
-uint32_t EventHub::getDeviceClasses(int32_t deviceId) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device == NULL) return 0;
-    return device->classes;
-}
-
-int32_t EventHub::getDeviceControllerNumber(int32_t deviceId) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device == NULL) return 0;
-    return device->controllerNumber;
-}
-
-void EventHub::getConfiguration(int32_t deviceId, PropertyMap* outConfiguration) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device && device->configuration) {
-        *outConfiguration = *device->configuration;
-    } else {
-        outConfiguration->clear();
-    }
-}
-
-status_t EventHub::getAbsoluteAxisInfo(int32_t deviceId, int axis,
-        RawAbsoluteAxisInfo* outAxisInfo) const {
-    outAxisInfo->clear();
-
-    if (axis >= 0 && axis <= ABS_MAX) {
-        AutoMutex _l(mLock);
-
-        Device* device = getDeviceLocked(deviceId);
-        if (device && !device->isVirtual() && test_bit(axis, device->absBitmask)) {
-            struct input_absinfo info;
-            if(ioctl(device->fd, EVIOCGABS(axis), &info)) {
-                ALOGW("Error reading absolute controller %d for device %s fd %d, errno=%d",
-                     axis, device->identifier.name.string(), device->fd, errno);
-                return -errno;
-            }
-
-            if (info.minimum != info.maximum) {
-                outAxisInfo->valid = true;
-                outAxisInfo->minValue = info.minimum;
-                outAxisInfo->maxValue = info.maximum;
-                outAxisInfo->flat = info.flat;
-                outAxisInfo->fuzz = info.fuzz;
-                outAxisInfo->resolution = info.resolution;
-            }
-            return OK;
-        }
-    }
-    return -1;
-}
-
-bool EventHub::hasRelativeAxis(int32_t deviceId, int axis) const {
-    if (axis >= 0 && axis <= REL_MAX) {
-        AutoMutex _l(mLock);
-
-        Device* device = getDeviceLocked(deviceId);
-        if (device) {
-            return test_bit(axis, device->relBitmask);
-        }
-    }
-    return false;
-}
-
-bool EventHub::hasInputProperty(int32_t deviceId, int property) const {
-    if (property >= 0 && property <= INPUT_PROP_MAX) {
-        AutoMutex _l(mLock);
-
-        Device* device = getDeviceLocked(deviceId);
-        if (device) {
-            return test_bit(property, device->propBitmask);
-        }
-    }
-    return false;
-}
-
-int32_t EventHub::getScanCodeState(int32_t deviceId, int32_t scanCode) const {
-    if (scanCode >= 0 && scanCode <= KEY_MAX) {
-        AutoMutex _l(mLock);
-
-        Device* device = getDeviceLocked(deviceId);
-        if (device && !device->isVirtual() && test_bit(scanCode, device->keyBitmask)) {
-            uint8_t keyState[sizeof_bit_array(KEY_MAX + 1)];
-            memset(keyState, 0, sizeof(keyState));
-            if (ioctl(device->fd, EVIOCGKEY(sizeof(keyState)), keyState) >= 0) {
-                return test_bit(scanCode, keyState) ? AKEY_STATE_DOWN : AKEY_STATE_UP;
-            }
-        }
-    }
-    return AKEY_STATE_UNKNOWN;
-}
-
-int32_t EventHub::getKeyCodeState(int32_t deviceId, int32_t keyCode) const {
-    AutoMutex _l(mLock);
-
-    Device* device = getDeviceLocked(deviceId);
-    if (device && !device->isVirtual() && device->keyMap.haveKeyLayout()) {
-        Vector<int32_t> scanCodes;
-        device->keyMap.keyLayoutMap->findScanCodesForKey(keyCode, &scanCodes);
-        if (scanCodes.size() != 0) {
-            uint8_t keyState[sizeof_bit_array(KEY_MAX + 1)];
-            memset(keyState, 0, sizeof(keyState));
-            if (ioctl(device->fd, EVIOCGKEY(sizeof(keyState)), keyState) >= 0) {
-                for (size_t i = 0; i < scanCodes.size(); i++) {
-                    int32_t sc = scanCodes.itemAt(i);
-                    if (sc >= 0 && sc <= KEY_MAX && test_bit(sc, keyState)) {
-                        return AKEY_STATE_DOWN;
-                    }
-                }
-                return AKEY_STATE_UP;
-            }
-        }
-    }
-    return AKEY_STATE_UNKNOWN;
-}
-
-int32_t EventHub::getSwitchState(int32_t deviceId, int32_t sw) const {
-    if (sw >= 0 && sw <= SW_MAX) {
-        AutoMutex _l(mLock);
-
-        Device* device = getDeviceLocked(deviceId);
-        if (device && !device->isVirtual() && test_bit(sw, device->swBitmask)) {
-            uint8_t swState[sizeof_bit_array(SW_MAX + 1)];
-            memset(swState, 0, sizeof(swState));
-            if (ioctl(device->fd, EVIOCGSW(sizeof(swState)), swState) >= 0) {
-                return test_bit(sw, swState) ? AKEY_STATE_DOWN : AKEY_STATE_UP;
-            }
-        }
-    }
-    return AKEY_STATE_UNKNOWN;
-}
-
-status_t EventHub::getAbsoluteAxisValue(int32_t deviceId, int32_t axis, int32_t* outValue) const {
-    *outValue = 0;
-
-    if (axis >= 0 && axis <= ABS_MAX) {
-        AutoMutex _l(mLock);
-
-        Device* device = getDeviceLocked(deviceId);
-        if (device && !device->isVirtual() && test_bit(axis, device->absBitmask)) {
-            struct input_absinfo info;
-            if(ioctl(device->fd, EVIOCGABS(axis), &info)) {
-                ALOGW("Error reading absolute controller %d for device %s fd %d, errno=%d",
-                     axis, device->identifier.name.string(), device->fd, errno);
-                return -errno;
-            }
-
-            *outValue = info.value;
-            return OK;
-        }
-    }
-    return -1;
-}
-
-bool EventHub::markSupportedKeyCodes(int32_t deviceId, size_t numCodes,
-        const int32_t* keyCodes, uint8_t* outFlags) const {
-    AutoMutex _l(mLock);
-
-    Device* device = getDeviceLocked(deviceId);
-    if (device && device->keyMap.haveKeyLayout()) {
-        Vector<int32_t> scanCodes;
-        for (size_t codeIndex = 0; codeIndex < numCodes; codeIndex++) {
-            scanCodes.clear();
-
-            status_t err = device->keyMap.keyLayoutMap->findScanCodesForKey(
-                    keyCodes[codeIndex], &scanCodes);
-            if (! err) {
-                // check the possible scan codes identified by the layout map against the
-                // map of codes actually emitted by the driver
-                for (size_t sc = 0; sc < scanCodes.size(); sc++) {
-                    if (test_bit(scanCodes[sc], device->keyBitmask)) {
-                        outFlags[codeIndex] = 1;
-                        break;
-                    }
-                }
-            }
-        }
-        return true;
-    }
-    return false;
-}
-
-status_t EventHub::mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
-        int32_t* outKeycode, uint32_t* outFlags) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-
-    if (device) {
-        // Check the key character map first.
-        sp<KeyCharacterMap> kcm = device->getKeyCharacterMap();
-        if (kcm != NULL) {
-            if (!kcm->mapKey(scanCode, usageCode, outKeycode)) {
-                *outFlags = 0;
-                return NO_ERROR;
-            }
-        }
-
-        // Check the key layout next.
-        if (device->keyMap.haveKeyLayout()) {
-            if (!device->keyMap.keyLayoutMap->mapKey(
-                    scanCode, usageCode, outKeycode, outFlags)) {
-                return NO_ERROR;
-            }
-        }
-    }
-
-    *outKeycode = 0;
-    *outFlags = 0;
-    return NAME_NOT_FOUND;
-}
-
-status_t EventHub::mapAxis(int32_t deviceId, int32_t scanCode, AxisInfo* outAxisInfo) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-
-    if (device && device->keyMap.haveKeyLayout()) {
-        status_t err = device->keyMap.keyLayoutMap->mapAxis(scanCode, outAxisInfo);
-        if (err == NO_ERROR) {
-            return NO_ERROR;
-        }
-    }
-
-    return NAME_NOT_FOUND;
-}
-
-void EventHub::setExcludedDevices(const Vector<String8>& devices) {
-    AutoMutex _l(mLock);
-
-    mExcludedDevices = devices;
-}
-
-bool EventHub::hasScanCode(int32_t deviceId, int32_t scanCode) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device && scanCode >= 0 && scanCode <= KEY_MAX) {
-        if (test_bit(scanCode, device->keyBitmask)) {
-            return true;
-        }
-    }
-    return false;
-}
-
-bool EventHub::hasLed(int32_t deviceId, int32_t led) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    int32_t sc;
-    if (device && mapLed(device, led, &sc) == NO_ERROR) {
-        if (test_bit(sc, device->ledBitmask)) {
-            return true;
-        }
-    }
-    return false;
-}
-
-void EventHub::setLedState(int32_t deviceId, int32_t led, bool on) {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    setLedStateLocked(device, led, on);
-}
-
-void EventHub::setLedStateLocked(Device* device, int32_t led, bool on) {
-    int32_t sc;
-    if (device && !device->isVirtual() && mapLed(device, led, &sc) != NAME_NOT_FOUND) {
-        struct input_event ev;
-        ev.time.tv_sec = 0;
-        ev.time.tv_usec = 0;
-        ev.type = EV_LED;
-        ev.code = sc;
-        ev.value = on ? 1 : 0;
-
-        ssize_t nWrite;
-        do {
-            nWrite = write(device->fd, &ev, sizeof(struct input_event));
-        } while (nWrite == -1 && errno == EINTR);
-    }
-}
-
-void EventHub::getVirtualKeyDefinitions(int32_t deviceId,
-        Vector<VirtualKeyDefinition>& outVirtualKeys) const {
-    outVirtualKeys.clear();
-
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device && device->virtualKeyMap) {
-        outVirtualKeys.appendVector(device->virtualKeyMap->getVirtualKeys());
-    }
-}
-
-sp<KeyCharacterMap> EventHub::getKeyCharacterMap(int32_t deviceId) const {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device) {
-        return device->getKeyCharacterMap();
-    }
-    return NULL;
-}
-
-bool EventHub::setKeyboardLayoutOverlay(int32_t deviceId,
-        const sp<KeyCharacterMap>& map) {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device) {
-        if (map != device->overlayKeyMap) {
-            device->overlayKeyMap = map;
-            device->combinedKeyMap = KeyCharacterMap::combine(
-                    device->keyMap.keyCharacterMap, map);
-            return true;
-        }
-    }
-    return false;
-}
-
-static String8 generateDescriptor(InputDeviceIdentifier& identifier) {
-    String8 rawDescriptor;
-    rawDescriptor.appendFormat(":%04x:%04x:", identifier.vendor,
-            identifier.product);
-    // TODO add handling for USB devices to not uniqueify kbs that show up twice
-    if (!identifier.uniqueId.isEmpty()) {
-        rawDescriptor.append("uniqueId:");
-        rawDescriptor.append(identifier.uniqueId);
-    } else if (identifier.nonce != 0) {
-        rawDescriptor.appendFormat("nonce:%04x", identifier.nonce);
-    }
-
-    if (identifier.vendor == 0 && identifier.product == 0) {
-        // If we don't know the vendor and product id, then the device is probably
-        // built-in so we need to rely on other information to uniquely identify
-        // the input device.  Usually we try to avoid relying on the device name or
-        // location but for built-in input device, they are unlikely to ever change.
-        if (!identifier.name.isEmpty()) {
-            rawDescriptor.append("name:");
-            rawDescriptor.append(identifier.name);
-        } else if (!identifier.location.isEmpty()) {
-            rawDescriptor.append("location:");
-            rawDescriptor.append(identifier.location);
-        }
-    }
-    identifier.descriptor = sha1(rawDescriptor);
-    return rawDescriptor;
-}
-
-void EventHub::assignDescriptorLocked(InputDeviceIdentifier& identifier) {
-    // Compute a device descriptor that uniquely identifies the device.
-    // The descriptor is assumed to be a stable identifier.  Its value should not
-    // change between reboots, reconnections, firmware updates or new releases
-    // of Android. In practice we sometimes get devices that cannot be uniquely
-    // identified. In this case we enforce uniqueness between connected devices.
-    // Ideally, we also want the descriptor to be short and relatively opaque.
-
-    identifier.nonce = 0;
-    String8 rawDescriptor = generateDescriptor(identifier);
-    if (identifier.uniqueId.isEmpty()) {
-        // If it didn't have a unique id check for conflicts and enforce
-        // uniqueness if necessary.
-        while(getDeviceByDescriptorLocked(identifier.descriptor) != NULL) {
-            identifier.nonce++;
-            rawDescriptor = generateDescriptor(identifier);
-        }
-    }
-    ALOGV("Created descriptor: raw=%s, cooked=%s", rawDescriptor.string(),
-            identifier.descriptor.string());
-}
-
-void EventHub::vibrate(int32_t deviceId, nsecs_t duration) {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device && !device->isVirtual()) {
-        ff_effect effect;
-        memset(&effect, 0, sizeof(effect));
-        effect.type = FF_RUMBLE;
-        effect.id = device->ffEffectId;
-        effect.u.rumble.strong_magnitude = 0xc000;
-        effect.u.rumble.weak_magnitude = 0xc000;
-        effect.replay.length = (duration + 999999LL) / 1000000LL;
-        effect.replay.delay = 0;
-        if (ioctl(device->fd, EVIOCSFF, &effect)) {
-            ALOGW("Could not upload force feedback effect to device %s due to error %d.",
-                    device->identifier.name.string(), errno);
-            return;
-        }
-        device->ffEffectId = effect.id;
-
-        struct input_event ev;
-        ev.time.tv_sec = 0;
-        ev.time.tv_usec = 0;
-        ev.type = EV_FF;
-        ev.code = device->ffEffectId;
-        ev.value = 1;
-        if (write(device->fd, &ev, sizeof(ev)) != sizeof(ev)) {
-            ALOGW("Could not start force feedback effect on device %s due to error %d.",
-                    device->identifier.name.string(), errno);
-            return;
-        }
-        device->ffEffectPlaying = true;
-    }
-}
-
-void EventHub::cancelVibrate(int32_t deviceId) {
-    AutoMutex _l(mLock);
-    Device* device = getDeviceLocked(deviceId);
-    if (device && !device->isVirtual()) {
-        if (device->ffEffectPlaying) {
-            device->ffEffectPlaying = false;
-
-            struct input_event ev;
-            ev.time.tv_sec = 0;
-            ev.time.tv_usec = 0;
-            ev.type = EV_FF;
-            ev.code = device->ffEffectId;
-            ev.value = 0;
-            if (write(device->fd, &ev, sizeof(ev)) != sizeof(ev)) {
-                ALOGW("Could not stop force feedback effect on device %s due to error %d.",
-                        device->identifier.name.string(), errno);
-                return;
-            }
-        }
-    }
-}
-
-EventHub::Device* EventHub::getDeviceByDescriptorLocked(String8& descriptor) const {
-    size_t size = mDevices.size();
-    for (size_t i = 0; i < size; i++) {
-        Device* device = mDevices.valueAt(i);
-        if (descriptor.compare(device->identifier.descriptor) == 0) {
-            return device;
-        }
-    }
-    return NULL;
-}
-
-EventHub::Device* EventHub::getDeviceLocked(int32_t deviceId) const {
-    if (deviceId == BUILT_IN_KEYBOARD_ID) {
-        deviceId = mBuiltInKeyboardId;
-    }
-    ssize_t index = mDevices.indexOfKey(deviceId);
-    return index >= 0 ? mDevices.valueAt(index) : NULL;
-}
-
-EventHub::Device* EventHub::getDeviceByPathLocked(const char* devicePath) const {
-    for (size_t i = 0; i < mDevices.size(); i++) {
-        Device* device = mDevices.valueAt(i);
-        if (device->path == devicePath) {
-            return device;
-        }
-    }
-    return NULL;
-}
-
-size_t EventHub::getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize) {
-    ALOG_ASSERT(bufferSize >= 1);
-
-    AutoMutex _l(mLock);
-
-    struct input_event readBuffer[bufferSize];
-
-    RawEvent* event = buffer;
-    size_t capacity = bufferSize;
-    bool awoken = false;
-    for (;;) {
-        nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
-
-        // Reopen input devices if needed.
-        if (mNeedToReopenDevices) {
-            mNeedToReopenDevices = false;
-
-            ALOGI("Reopening all input devices due to a configuration change.");
-
-            closeAllDevicesLocked();
-            mNeedToScanDevices = true;
-            break; // return to the caller before we actually rescan
-        }
-
-        // Report any devices that had last been added/removed.
-        while (mClosingDevices) {
-            Device* device = mClosingDevices;
-            ALOGV("Reporting device closed: id=%d, name=%s\n",
-                 device->id, device->path.string());
-            mClosingDevices = device->next;
-            event->when = now;
-            event->deviceId = device->id == mBuiltInKeyboardId ? BUILT_IN_KEYBOARD_ID : device->id;
-            event->type = DEVICE_REMOVED;
-            event += 1;
-            delete device;
-            mNeedToSendFinishedDeviceScan = true;
-            if (--capacity == 0) {
-                break;
-            }
-        }
-
-        if (mNeedToScanDevices) {
-            mNeedToScanDevices = false;
-            scanDevicesLocked();
-            mNeedToSendFinishedDeviceScan = true;
-        }
-
-        while (mOpeningDevices != NULL) {
-            Device* device = mOpeningDevices;
-            ALOGV("Reporting device opened: id=%d, name=%s\n",
-                 device->id, device->path.string());
-            mOpeningDevices = device->next;
-            event->when = now;
-            event->deviceId = device->id == mBuiltInKeyboardId ? 0 : device->id;
-            event->type = DEVICE_ADDED;
-            event += 1;
-            mNeedToSendFinishedDeviceScan = true;
-            if (--capacity == 0) {
-                break;
-            }
-        }
-
-        if (mNeedToSendFinishedDeviceScan) {
-            mNeedToSendFinishedDeviceScan = false;
-            event->when = now;
-            event->type = FINISHED_DEVICE_SCAN;
-            event += 1;
-            if (--capacity == 0) {
-                break;
-            }
-        }
-
-        // Grab the next input event.
-        bool deviceChanged = false;
-        while (mPendingEventIndex < mPendingEventCount) {
-            const struct epoll_event& eventItem = mPendingEventItems[mPendingEventIndex++];
-            if (eventItem.data.u32 == EPOLL_ID_INOTIFY) {
-                if (eventItem.events & EPOLLIN) {
-                    mPendingINotify = true;
-                } else {
-                    ALOGW("Received unexpected epoll event 0x%08x for INotify.", eventItem.events);
-                }
-                continue;
-            }
-
-            if (eventItem.data.u32 == EPOLL_ID_WAKE) {
-                if (eventItem.events & EPOLLIN) {
-                    ALOGV("awoken after wake()");
-                    awoken = true;
-                    char buffer[16];
-                    ssize_t nRead;
-                    do {
-                        nRead = read(mWakeReadPipeFd, buffer, sizeof(buffer));
-                    } while ((nRead == -1 && errno == EINTR) || nRead == sizeof(buffer));
-                } else {
-                    ALOGW("Received unexpected epoll event 0x%08x for wake read pipe.",
-                            eventItem.events);
-                }
-                continue;
-            }
-
-            ssize_t deviceIndex = mDevices.indexOfKey(eventItem.data.u32);
-            if (deviceIndex < 0) {
-                ALOGW("Received unexpected epoll event 0x%08x for unknown device id %d.",
-                        eventItem.events, eventItem.data.u32);
-                continue;
-            }
-
-            Device* device = mDevices.valueAt(deviceIndex);
-            if (eventItem.events & EPOLLIN) {
-                int32_t readSize = read(device->fd, readBuffer,
-                        sizeof(struct input_event) * capacity);
-                if (readSize == 0 || (readSize < 0 && errno == ENODEV)) {
-                    // Device was removed before INotify noticed.
-                    ALOGW("could not get event, removed? (fd: %d size: %d bufferSize: %d "
-                            "capacity: %zu errno: %d)\n",
-                            device->fd, readSize, bufferSize, capacity, errno);
-                    deviceChanged = true;
-                    closeDeviceLocked(device);
-                } else if (readSize < 0) {
-                    if (errno != EAGAIN && errno != EINTR) {
-                        ALOGW("could not get event (errno=%d)", errno);
-                    }
-                } else if ((readSize % sizeof(struct input_event)) != 0) {
-                    ALOGE("could not get event (wrong size: %d)", readSize);
-                } else {
-                    int32_t deviceId = device->id == mBuiltInKeyboardId ? 0 : device->id;
-
-                    size_t count = size_t(readSize) / sizeof(struct input_event);
-                    for (size_t i = 0; i < count; i++) {
-                        struct input_event& iev = readBuffer[i];
-                        ALOGV("%s got: time=%d.%06d, type=%d, code=%d, value=%d",
-                                device->path.string(),
-                                (int) iev.time.tv_sec, (int) iev.time.tv_usec,
-                                iev.type, iev.code, iev.value);
-
-                        // Some input devices may have a better concept of the time
-                        // when an input event was actually generated than the kernel
-                        // which simply timestamps all events on entry to evdev.
-                        // This is a custom Android extension of the input protocol
-                        // mainly intended for use with uinput based device drivers.
-                        if (iev.type == EV_MSC) {
-                            if (iev.code == MSC_ANDROID_TIME_SEC) {
-                                device->timestampOverrideSec = iev.value;
-                                continue;
-                            } else if (iev.code == MSC_ANDROID_TIME_USEC) {
-                                device->timestampOverrideUsec = iev.value;
-                                continue;
-                            }
-                        }
-                        if (device->timestampOverrideSec || device->timestampOverrideUsec) {
-                            iev.time.tv_sec = device->timestampOverrideSec;
-                            iev.time.tv_usec = device->timestampOverrideUsec;
-                            if (iev.type == EV_SYN && iev.code == SYN_REPORT) {
-                                device->timestampOverrideSec = 0;
-                                device->timestampOverrideUsec = 0;
-                            }
-                            ALOGV("applied override time %d.%06d",
-                                    int(iev.time.tv_sec), int(iev.time.tv_usec));
-                        }
-
-#ifdef HAVE_POSIX_CLOCKS
-                        // Use the time specified in the event instead of the current time
-                        // so that downstream code can get more accurate estimates of
-                        // event dispatch latency from the time the event is enqueued onto
-                        // the evdev client buffer.
-                        //
-                        // The event's timestamp fortuitously uses the same monotonic clock
-                        // time base as the rest of Android.  The kernel event device driver
-                        // (drivers/input/evdev.c) obtains timestamps using ktime_get_ts().
-                        // The systemTime(SYSTEM_TIME_MONOTONIC) function we use everywhere
-                        // calls clock_gettime(CLOCK_MONOTONIC) which is implemented as a
-                        // system call that also queries ktime_get_ts().
-                        event->when = nsecs_t(iev.time.tv_sec) * 1000000000LL
-                                + nsecs_t(iev.time.tv_usec) * 1000LL;
-                        ALOGV("event time %lld, now %lld", event->when, now);
-
-                        // Bug 7291243: Add a guard in case the kernel generates timestamps
-                        // that appear to be far into the future because they were generated
-                        // using the wrong clock source.
-                        //
-                        // This can happen because when the input device is initially opened
-                        // it has a default clock source of CLOCK_REALTIME.  Any input events
-                        // enqueued right after the device is opened will have timestamps
-                        // generated using CLOCK_REALTIME.  We later set the clock source
-                        // to CLOCK_MONOTONIC but it is already too late.
-                        //
-                        // Invalid input event timestamps can result in ANRs, crashes and
-                        // and other issues that are hard to track down.  We must not let them
-                        // propagate through the system.
-                        //
-                        // Log a warning so that we notice the problem and recover gracefully.
-                        if (event->when >= now + 10 * 1000000000LL) {
-                            // Double-check.  Time may have moved on.
-                            nsecs_t time = systemTime(SYSTEM_TIME_MONOTONIC);
-                            if (event->when > time) {
-                                ALOGW("An input event from %s has a timestamp that appears to "
-                                        "have been generated using the wrong clock source "
-                                        "(expected CLOCK_MONOTONIC): "
-                                        "event time %lld, current time %lld, call time %lld.  "
-                                        "Using current time instead.",
-                                        device->path.string(), event->when, time, now);
-                                event->when = time;
-                            } else {
-                                ALOGV("Event time is ok but failed the fast path and required "
-                                        "an extra call to systemTime: "
-                                        "event time %lld, current time %lld, call time %lld.",
-                                        event->when, time, now);
-                            }
-                        }
-#else
-                        event->when = now;
-#endif
-                        event->deviceId = deviceId;
-                        event->type = iev.type;
-                        event->code = iev.code;
-                        event->value = iev.value;
-                        event += 1;
-                        capacity -= 1;
-                    }
-                    if (capacity == 0) {
-                        // The result buffer is full.  Reset the pending event index
-                        // so we will try to read the device again on the next iteration.
-                        mPendingEventIndex -= 1;
-                        break;
-                    }
-                }
-            } else if (eventItem.events & EPOLLHUP) {
-                ALOGI("Removing device %s due to epoll hang-up event.",
-                        device->identifier.name.string());
-                deviceChanged = true;
-                closeDeviceLocked(device);
-            } else {
-                ALOGW("Received unexpected epoll event 0x%08x for device %s.",
-                        eventItem.events, device->identifier.name.string());
-            }
-        }
-
-        // readNotify() will modify the list of devices so this must be done after
-        // processing all other events to ensure that we read all remaining events
-        // before closing the devices.
-        if (mPendingINotify && mPendingEventIndex >= mPendingEventCount) {
-            mPendingINotify = false;
-            readNotifyLocked();
-            deviceChanged = true;
-        }
-
-        // Report added or removed devices immediately.
-        if (deviceChanged) {
-            continue;
-        }
-
-        // Return now if we have collected any events or if we were explicitly awoken.
-        if (event != buffer || awoken) {
-            break;
-        }
-
-        // Poll for events.  Mind the wake lock dance!
-        // We hold a wake lock at all times except during epoll_wait().  This works due to some
-        // subtle choreography.  When a device driver has pending (unread) events, it acquires
-        // a kernel wake lock.  However, once the last pending event has been read, the device
-        // driver will release the kernel wake lock.  To prevent the system from going to sleep
-        // when this happens, the EventHub holds onto its own user wake lock while the client
-        // is processing events.  Thus the system can only sleep if there are no events
-        // pending or currently being processed.
-        //
-        // The timeout is advisory only.  If the device is asleep, it will not wake just to
-        // service the timeout.
-        mPendingEventIndex = 0;
-
-        mLock.unlock(); // release lock before poll, must be before release_wake_lock
-        release_wake_lock(WAKE_LOCK_ID);
-
-        int pollResult = epoll_wait(mEpollFd, mPendingEventItems, EPOLL_MAX_EVENTS, timeoutMillis);
-
-        acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_ID);
-        mLock.lock(); // reacquire lock after poll, must be after acquire_wake_lock
-
-        if (pollResult == 0) {
-            // Timed out.
-            mPendingEventCount = 0;
-            break;
-        }
-
-        if (pollResult < 0) {
-            // An error occurred.
-            mPendingEventCount = 0;
-
-            // Sleep after errors to avoid locking up the system.
-            // Hopefully the error is transient.
-            if (errno != EINTR) {
-                ALOGW("poll failed (errno=%d)\n", errno);
-                usleep(100000);
-            }
-        } else {
-            // Some events occurred.
-            mPendingEventCount = size_t(pollResult);
-        }
-    }
-
-    // All done, return the number of events we read.
-    return event - buffer;
-}
-
-void EventHub::wake() {
-    ALOGV("wake() called");
-
-    ssize_t nWrite;
-    do {
-        nWrite = write(mWakeWritePipeFd, "W", 1);
-    } while (nWrite == -1 && errno == EINTR);
-
-    if (nWrite != 1 && errno != EAGAIN) {
-        ALOGW("Could not write wake signal, errno=%d", errno);
-    }
-}
-
-void EventHub::scanDevicesLocked() {
-    status_t res = scanDirLocked(DEVICE_PATH);
-    if(res < 0) {
-        ALOGE("scan dir failed for %s\n", DEVICE_PATH);
-    }
-    if (mDevices.indexOfKey(VIRTUAL_KEYBOARD_ID) < 0) {
-        createVirtualKeyboardLocked();
-    }
-}
-
-// ----------------------------------------------------------------------------
-
-static bool containsNonZeroByte(const uint8_t* array, uint32_t startIndex, uint32_t endIndex) {
-    const uint8_t* end = array + endIndex;
-    array += startIndex;
-    while (array != end) {
-        if (*(array++) != 0) {
-            return true;
-        }
-    }
-    return false;
-}
-
-static const int32_t GAMEPAD_KEYCODES[] = {
-        AKEYCODE_BUTTON_A, AKEYCODE_BUTTON_B, AKEYCODE_BUTTON_C,
-        AKEYCODE_BUTTON_X, AKEYCODE_BUTTON_Y, AKEYCODE_BUTTON_Z,
-        AKEYCODE_BUTTON_L1, AKEYCODE_BUTTON_R1,
-        AKEYCODE_BUTTON_L2, AKEYCODE_BUTTON_R2,
-        AKEYCODE_BUTTON_THUMBL, AKEYCODE_BUTTON_THUMBR,
-        AKEYCODE_BUTTON_START, AKEYCODE_BUTTON_SELECT, AKEYCODE_BUTTON_MODE,
-};
-
-status_t EventHub::openDeviceLocked(const char *devicePath) {
-    char buffer[80];
-
-    ALOGV("Opening device: %s", devicePath);
-
-    int fd = open(devicePath, O_RDWR | O_CLOEXEC);
-    if(fd < 0) {
-        ALOGE("could not open %s, %s\n", devicePath, strerror(errno));
-        return -1;
-    }
-
-    InputDeviceIdentifier identifier;
-
-    // Get device name.
-    if(ioctl(fd, EVIOCGNAME(sizeof(buffer) - 1), &buffer) < 1) {
-        //fprintf(stderr, "could not get device name for %s, %s\n", devicePath, strerror(errno));
-    } else {
-        buffer[sizeof(buffer) - 1] = '\0';
-        identifier.name.setTo(buffer);
-    }
-
-    // Check to see if the device is on our excluded list
-    for (size_t i = 0; i < mExcludedDevices.size(); i++) {
-        const String8& item = mExcludedDevices.itemAt(i);
-        if (identifier.name == item) {
-            ALOGI("ignoring event id %s driver %s\n", devicePath, item.string());
-            close(fd);
-            return -1;
-        }
-    }
-
-    // Get device driver version.
-    int driverVersion;
-    if(ioctl(fd, EVIOCGVERSION, &driverVersion)) {
-        ALOGE("could not get driver version for %s, %s\n", devicePath, strerror(errno));
-        close(fd);
-        return -1;
-    }
-
-    // Get device identifier.
-    struct input_id inputId;
-    if(ioctl(fd, EVIOCGID, &inputId)) {
-        ALOGE("could not get device input id for %s, %s\n", devicePath, strerror(errno));
-        close(fd);
-        return -1;
-    }
-    identifier.bus = inputId.bustype;
-    identifier.product = inputId.product;
-    identifier.vendor = inputId.vendor;
-    identifier.version = inputId.version;
-
-    // Get device physical location.
-    if(ioctl(fd, EVIOCGPHYS(sizeof(buffer) - 1), &buffer) < 1) {
-        //fprintf(stderr, "could not get location for %s, %s\n", devicePath, strerror(errno));
-    } else {
-        buffer[sizeof(buffer) - 1] = '\0';
-        identifier.location.setTo(buffer);
-    }
-
-    // Get device unique id.
-    if(ioctl(fd, EVIOCGUNIQ(sizeof(buffer) - 1), &buffer) < 1) {
-        //fprintf(stderr, "could not get idstring for %s, %s\n", devicePath, strerror(errno));
-    } else {
-        buffer[sizeof(buffer) - 1] = '\0';
-        identifier.uniqueId.setTo(buffer);
-    }
-
-    // Fill in the descriptor.
-    assignDescriptorLocked(identifier);
-
-    // Make file descriptor non-blocking for use with poll().
-    if (fcntl(fd, F_SETFL, O_NONBLOCK)) {
-        ALOGE("Error %d making device file descriptor non-blocking.", errno);
-        close(fd);
-        return -1;
-    }
-
-    // Allocate device.  (The device object takes ownership of the fd at this point.)
-    int32_t deviceId = mNextDeviceId++;
-    Device* device = new Device(fd, deviceId, String8(devicePath), identifier);
-
-    ALOGV("add device %d: %s\n", deviceId, devicePath);
-    ALOGV("  bus:        %04x\n"
-         "  vendor      %04x\n"
-         "  product     %04x\n"
-         "  version     %04x\n",
-        identifier.bus, identifier.vendor, identifier.product, identifier.version);
-    ALOGV("  name:       \"%s\"\n", identifier.name.string());
-    ALOGV("  location:   \"%s\"\n", identifier.location.string());
-    ALOGV("  unique id:  \"%s\"\n", identifier.uniqueId.string());
-    ALOGV("  descriptor: \"%s\"\n", identifier.descriptor.string());
-    ALOGV("  driver:     v%d.%d.%d\n",
-        driverVersion >> 16, (driverVersion >> 8) & 0xff, driverVersion & 0xff);
-
-    // Load the configuration file for the device.
-    loadConfigurationLocked(device);
-
-    // Figure out the kinds of events the device reports.
-    ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(device->keyBitmask)), device->keyBitmask);
-    ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(device->absBitmask)), device->absBitmask);
-    ioctl(fd, EVIOCGBIT(EV_REL, sizeof(device->relBitmask)), device->relBitmask);
-    ioctl(fd, EVIOCGBIT(EV_SW, sizeof(device->swBitmask)), device->swBitmask);
-    ioctl(fd, EVIOCGBIT(EV_LED, sizeof(device->ledBitmask)), device->ledBitmask);
-    ioctl(fd, EVIOCGBIT(EV_FF, sizeof(device->ffBitmask)), device->ffBitmask);
-    ioctl(fd, EVIOCGPROP(sizeof(device->propBitmask)), device->propBitmask);
-
-    // See if this is a keyboard.  Ignore everything in the button range except for
-    // joystick and gamepad buttons which are handled like keyboards for the most part.
-    bool haveKeyboardKeys = containsNonZeroByte(device->keyBitmask, 0, sizeof_bit_array(BTN_MISC))
-            || containsNonZeroByte(device->keyBitmask, sizeof_bit_array(KEY_OK),
-                    sizeof_bit_array(KEY_MAX + 1));
-    bool haveGamepadButtons = containsNonZeroByte(device->keyBitmask, sizeof_bit_array(BTN_MISC),
-                    sizeof_bit_array(BTN_MOUSE))
-            || containsNonZeroByte(device->keyBitmask, sizeof_bit_array(BTN_JOYSTICK),
-                    sizeof_bit_array(BTN_DIGI));
-    if (haveKeyboardKeys || haveGamepadButtons) {
-        device->classes |= INPUT_DEVICE_CLASS_KEYBOARD;
-    }
-
-    // See if this is a cursor device such as a trackball or mouse.
-    if (test_bit(BTN_MOUSE, device->keyBitmask)
-            && test_bit(REL_X, device->relBitmask)
-            && test_bit(REL_Y, device->relBitmask)) {
-        device->classes |= INPUT_DEVICE_CLASS_CURSOR;
-    }
-
-    // See if this is a touch pad.
-    // Is this a new modern multi-touch driver?
-    if (test_bit(ABS_MT_POSITION_X, device->absBitmask)
-            && test_bit(ABS_MT_POSITION_Y, device->absBitmask)) {
-        // Some joysticks such as the PS3 controller report axes that conflict
-        // with the ABS_MT range.  Try to confirm that the device really is
-        // a touch screen.
-        if (test_bit(BTN_TOUCH, device->keyBitmask) || !haveGamepadButtons) {
-            device->classes |= INPUT_DEVICE_CLASS_TOUCH | INPUT_DEVICE_CLASS_TOUCH_MT;
-        }
-    // Is this an old style single-touch driver?
-    } else if (test_bit(BTN_TOUCH, device->keyBitmask)
-            && test_bit(ABS_X, device->absBitmask)
-            && test_bit(ABS_Y, device->absBitmask)) {
-        device->classes |= INPUT_DEVICE_CLASS_TOUCH;
-    }
-
-    // See if this device is a joystick.
-    // Assumes that joysticks always have gamepad buttons in order to distinguish them
-    // from other devices such as accelerometers that also have absolute axes.
-    if (haveGamepadButtons) {
-        uint32_t assumedClasses = device->classes | INPUT_DEVICE_CLASS_JOYSTICK;
-        for (int i = 0; i <= ABS_MAX; i++) {
-            if (test_bit(i, device->absBitmask)
-                    && (getAbsAxisUsage(i, assumedClasses) & INPUT_DEVICE_CLASS_JOYSTICK)) {
-                device->classes = assumedClasses;
-                break;
-            }
-        }
-    }
-
-    // Check whether this device has switches.
-    for (int i = 0; i <= SW_MAX; i++) {
-        if (test_bit(i, device->swBitmask)) {
-            device->classes |= INPUT_DEVICE_CLASS_SWITCH;
-            break;
-        }
-    }
-
-    // Check whether this device supports the vibrator.
-    if (test_bit(FF_RUMBLE, device->ffBitmask)) {
-        device->classes |= INPUT_DEVICE_CLASS_VIBRATOR;
-    }
-
-    // Configure virtual keys.
-    if ((device->classes & INPUT_DEVICE_CLASS_TOUCH)) {
-        // Load the virtual keys for the touch screen, if any.
-        // We do this now so that we can make sure to load the keymap if necessary.
-        status_t status = loadVirtualKeyMapLocked(device);
-        if (!status) {
-            device->classes |= INPUT_DEVICE_CLASS_KEYBOARD;
-        }
-    }
-
-    // Load the key map.
-    // We need to do this for joysticks too because the key layout may specify axes.
-    status_t keyMapStatus = NAME_NOT_FOUND;
-    if (device->classes & (INPUT_DEVICE_CLASS_KEYBOARD | INPUT_DEVICE_CLASS_JOYSTICK)) {
-        // Load the keymap for the device.
-        keyMapStatus = loadKeyMapLocked(device);
-    }
-
-    // Configure the keyboard, gamepad or virtual keyboard.
-    if (device->classes & INPUT_DEVICE_CLASS_KEYBOARD) {
-        // Register the keyboard as a built-in keyboard if it is eligible.
-        if (!keyMapStatus
-                && mBuiltInKeyboardId == NO_BUILT_IN_KEYBOARD
-                && isEligibleBuiltInKeyboard(device->identifier,
-                        device->configuration, &device->keyMap)) {
-            mBuiltInKeyboardId = device->id;
-        }
-
-        // 'Q' key support = cheap test of whether this is an alpha-capable kbd
-        if (hasKeycodeLocked(device, AKEYCODE_Q)) {
-            device->classes |= INPUT_DEVICE_CLASS_ALPHAKEY;
-        }
-
-        // See if this device has a DPAD.
-        if (hasKeycodeLocked(device, AKEYCODE_DPAD_UP) &&
-                hasKeycodeLocked(device, AKEYCODE_DPAD_DOWN) &&
-                hasKeycodeLocked(device, AKEYCODE_DPAD_LEFT) &&
-                hasKeycodeLocked(device, AKEYCODE_DPAD_RIGHT) &&
-                hasKeycodeLocked(device, AKEYCODE_DPAD_CENTER)) {
-            device->classes |= INPUT_DEVICE_CLASS_DPAD;
-        }
-
-        // See if this device has a gamepad.
-        for (size_t i = 0; i < sizeof(GAMEPAD_KEYCODES)/sizeof(GAMEPAD_KEYCODES[0]); i++) {
-            if (hasKeycodeLocked(device, GAMEPAD_KEYCODES[i])) {
-                device->classes |= INPUT_DEVICE_CLASS_GAMEPAD;
-                break;
-            }
-        }
-
-        // Disable kernel key repeat since we handle it ourselves
-        unsigned int repeatRate[] = {0,0};
-        if (ioctl(fd, EVIOCSREP, repeatRate)) {
-            ALOGW("Unable to disable kernel key repeat for %s: %s", devicePath, strerror(errno));
-        }
-    }
-
-    // If the device isn't recognized as something we handle, don't monitor it.
-    if (device->classes == 0) {
-        ALOGV("Dropping device: id=%d, path='%s', name='%s'",
-                deviceId, devicePath, device->identifier.name.string());
-        delete device;
-        return -1;
-    }
-
-    // Determine whether the device is external or internal.
-    if (isExternalDeviceLocked(device)) {
-        device->classes |= INPUT_DEVICE_CLASS_EXTERNAL;
-    }
-
-    if (device->classes & (INPUT_DEVICE_CLASS_JOYSTICK | INPUT_DEVICE_CLASS_DPAD)
-            && device->classes & INPUT_DEVICE_CLASS_GAMEPAD) {
-        device->controllerNumber = getNextControllerNumberLocked(device);
-        setLedForController(device);
-    }
-
-    // Register with epoll.
-    struct epoll_event eventItem;
-    memset(&eventItem, 0, sizeof(eventItem));
-    eventItem.events = EPOLLIN;
-    eventItem.data.u32 = deviceId;
-    if (epoll_ctl(mEpollFd, EPOLL_CTL_ADD, fd, &eventItem)) {
-        ALOGE("Could not add device fd to epoll instance.  errno=%d", errno);
-        delete device;
-        return -1;
-    }
-
-    // Enable wake-lock behavior on kernels that support it.
-    // TODO: Only need this for devices that can really wake the system.
-#ifndef EVIOCSSUSPENDBLOCK
-    // uapi headers don't include EVIOCSSUSPENDBLOCK, and future kernels
-    // will use an epoll flag instead, so as long as we want to support
-    // this feature, we need to be prepared to define the ioctl ourselves.
-#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int)
-#endif
-    bool usingSuspendBlockIoctl = !ioctl(fd, EVIOCSSUSPENDBLOCK, 1);
-
-    // Tell the kernel that we want to use the monotonic clock for reporting timestamps
-    // associated with input events.  This is important because the input system
-    // uses the timestamps extensively and assumes they were recorded using the monotonic
-    // clock.
-    //
-    // In older kernel, before Linux 3.4, there was no way to tell the kernel which
-    // clock to use to input event timestamps.  The standard kernel behavior was to
-    // record a real time timestamp, which isn't what we want.  Android kernels therefore
-    // contained a patch to the evdev_event() function in drivers/input/evdev.c to
-    // replace the call to do_gettimeofday() with ktime_get_ts() to cause the monotonic
-    // clock to be used instead of the real time clock.
-    //
-    // As of Linux 3.4, there is a new EVIOCSCLOCKID ioctl to set the desired clock.
-    // Therefore, we no longer require the Android-specific kernel patch described above
-    // as long as we make sure to set select the monotonic clock.  We do that here.
-    int clockId = CLOCK_MONOTONIC;
-    bool usingClockIoctl = !ioctl(fd, EVIOCSCLOCKID, &clockId);
-
-    ALOGI("New device: id=%d, fd=%d, path='%s', name='%s', classes=0x%x, "
-            "configuration='%s', keyLayout='%s', keyCharacterMap='%s', builtinKeyboard=%s, "
-            "usingSuspendBlockIoctl=%s, usingClockIoctl=%s",
-         deviceId, fd, devicePath, device->identifier.name.string(),
-         device->classes,
-         device->configurationFile.string(),
-         device->keyMap.keyLayoutFile.string(),
-         device->keyMap.keyCharacterMapFile.string(),
-         toString(mBuiltInKeyboardId == deviceId),
-         toString(usingSuspendBlockIoctl), toString(usingClockIoctl));
-
-    addDeviceLocked(device);
-    return 0;
-}
-
-void EventHub::createVirtualKeyboardLocked() {
-    InputDeviceIdentifier identifier;
-    identifier.name = "Virtual";
-    identifier.uniqueId = "<virtual>";
-    assignDescriptorLocked(identifier);
-
-    Device* device = new Device(-1, VIRTUAL_KEYBOARD_ID, String8("<virtual>"), identifier);
-    device->classes = INPUT_DEVICE_CLASS_KEYBOARD
-            | INPUT_DEVICE_CLASS_ALPHAKEY
-            | INPUT_DEVICE_CLASS_DPAD
-            | INPUT_DEVICE_CLASS_VIRTUAL;
-    loadKeyMapLocked(device);
-    addDeviceLocked(device);
-}
-
-void EventHub::addDeviceLocked(Device* device) {
-    mDevices.add(device->id, device);
-    device->next = mOpeningDevices;
-    mOpeningDevices = device;
-}
-
-void EventHub::loadConfigurationLocked(Device* device) {
-    device->configurationFile = getInputDeviceConfigurationFilePathByDeviceIdentifier(
-            device->identifier, INPUT_DEVICE_CONFIGURATION_FILE_TYPE_CONFIGURATION);
-    if (device->configurationFile.isEmpty()) {
-        ALOGD("No input device configuration file found for device '%s'.",
-                device->identifier.name.string());
-    } else {
-        status_t status = PropertyMap::load(device->configurationFile,
-                &device->configuration);
-        if (status) {
-            ALOGE("Error loading input device configuration file for device '%s'.  "
-                    "Using default configuration.",
-                    device->identifier.name.string());
-        }
-    }
-}
-
-status_t EventHub::loadVirtualKeyMapLocked(Device* device) {
-    // The virtual key map is supplied by the kernel as a system board property file.
-    String8 path;
-    path.append("/sys/board_properties/virtualkeys.");
-    path.append(device->identifier.name);
-    if (access(path.string(), R_OK)) {
-        return NAME_NOT_FOUND;
-    }
-    return VirtualKeyMap::load(path, &device->virtualKeyMap);
-}
-
-status_t EventHub::loadKeyMapLocked(Device* device) {
-    return device->keyMap.load(device->identifier, device->configuration);
-}
-
-bool EventHub::isExternalDeviceLocked(Device* device) {
-    if (device->configuration) {
-        bool value;
-        if (device->configuration->tryGetProperty(String8("device.internal"), value)) {
-            return !value;
-        }
-    }
-    return device->identifier.bus == BUS_USB || device->identifier.bus == BUS_BLUETOOTH;
-}
-
-int32_t EventHub::getNextControllerNumberLocked(Device* device) {
-    if (mControllerNumbers.isFull()) {
-        ALOGI("Maximum number of controllers reached, assigning controller number 0 to device %s",
-                device->identifier.name.string());
-        return 0;
-    }
-    // Since the controller number 0 is reserved for non-controllers, translate all numbers up by
-    // one
-    return static_cast<int32_t>(mControllerNumbers.markFirstUnmarkedBit() + 1);
-}
-
-void EventHub::releaseControllerNumberLocked(Device* device) {
-    int32_t num = device->controllerNumber;
-    device->controllerNumber= 0;
-    if (num == 0) {
-        return;
-    }
-    mControllerNumbers.clearBit(static_cast<uint32_t>(num - 1));
-}
-
-void EventHub::setLedForController(Device* device) {
-    for (int i = 0; i < MAX_CONTROLLER_LEDS; i++) {
-        setLedStateLocked(device, ALED_CONTROLLER_1 + i, device->controllerNumber == i + 1);
-    }
-}
-
-bool EventHub::hasKeycodeLocked(Device* device, int keycode) const {
-    if (!device->keyMap.haveKeyLayout() || !device->keyBitmask) {
-        return false;
-    }
-    
-    Vector<int32_t> scanCodes;
-    device->keyMap.keyLayoutMap->findScanCodesForKey(keycode, &scanCodes);
-    const size_t N = scanCodes.size();
-    for (size_t i=0; i<N && i<=KEY_MAX; i++) {
-        int32_t sc = scanCodes.itemAt(i);
-        if (sc >= 0 && sc <= KEY_MAX && test_bit(sc, device->keyBitmask)) {
-            return true;
-        }
-    }
-    
-    return false;
-}
-
-status_t EventHub::mapLed(Device* device, int32_t led, int32_t* outScanCode) const {
-    if (!device->keyMap.haveKeyLayout() || !device->ledBitmask) {
-        return NAME_NOT_FOUND;
-    }
-
-    int32_t scanCode;
-    if(device->keyMap.keyLayoutMap->findScanCodeForLed(led, &scanCode) != NAME_NOT_FOUND) {
-        if(scanCode >= 0 && scanCode <= LED_MAX && test_bit(scanCode, device->ledBitmask)) {
-            *outScanCode = scanCode;
-            return NO_ERROR;
-        }
-    }
-    return NAME_NOT_FOUND;
-}
-
-status_t EventHub::closeDeviceByPathLocked(const char *devicePath) {
-    Device* device = getDeviceByPathLocked(devicePath);
-    if (device) {
-        closeDeviceLocked(device);
-        return 0;
-    }
-    ALOGV("Remove device: %s not found, device may already have been removed.", devicePath);
-    return -1;
-}
-
-void EventHub::closeAllDevicesLocked() {
-    while (mDevices.size() > 0) {
-        closeDeviceLocked(mDevices.valueAt(mDevices.size() - 1));
-    }
-}
-
-void EventHub::closeDeviceLocked(Device* device) {
-    ALOGI("Removed device: path=%s name=%s id=%d fd=%d classes=0x%x\n",
-         device->path.string(), device->identifier.name.string(), device->id,
-         device->fd, device->classes);
-
-    if (device->id == mBuiltInKeyboardId) {
-        ALOGW("built-in keyboard device %s (id=%d) is closing! the apps will not like this",
-                device->path.string(), mBuiltInKeyboardId);
-        mBuiltInKeyboardId = NO_BUILT_IN_KEYBOARD;
-    }
-
-    if (!device->isVirtual()) {
-        if (epoll_ctl(mEpollFd, EPOLL_CTL_DEL, device->fd, NULL)) {
-            ALOGW("Could not remove device fd from epoll instance.  errno=%d", errno);
-        }
-    }
-
-    releaseControllerNumberLocked(device);
-
-    mDevices.removeItem(device->id);
-    device->close();
-
-    // Unlink for opening devices list if it is present.
-    Device* pred = NULL;
-    bool found = false;
-    for (Device* entry = mOpeningDevices; entry != NULL; ) {
-        if (entry == device) {
-            found = true;
-            break;
-        }
-        pred = entry;
-        entry = entry->next;
-    }
-    if (found) {
-        // Unlink the device from the opening devices list then delete it.
-        // We don't need to tell the client that the device was closed because
-        // it does not even know it was opened in the first place.
-        ALOGI("Device %s was immediately closed after opening.", device->path.string());
-        if (pred) {
-            pred->next = device->next;
-        } else {
-            mOpeningDevices = device->next;
-        }
-        delete device;
-    } else {
-        // Link into closing devices list.
-        // The device will be deleted later after we have informed the client.
-        device->next = mClosingDevices;
-        mClosingDevices = device;
-    }
-}
-
-status_t EventHub::readNotifyLocked() {
-    int res;
-    char devname[PATH_MAX];
-    char *filename;
-    char event_buf[512];
-    int event_size;
-    int event_pos = 0;
-    struct inotify_event *event;
-
-    ALOGV("EventHub::readNotify nfd: %d\n", mINotifyFd);
-    res = read(mINotifyFd, event_buf, sizeof(event_buf));
-    if(res < (int)sizeof(*event)) {
-        if(errno == EINTR)
-            return 0;
-        ALOGW("could not get event, %s\n", strerror(errno));
-        return -1;
-    }
-    //printf("got %d bytes of event information\n", res);
-
-    strcpy(devname, DEVICE_PATH);
-    filename = devname + strlen(devname);
-    *filename++ = '/';
-
-    while(res >= (int)sizeof(*event)) {
-        event = (struct inotify_event *)(event_buf + event_pos);
-        //printf("%d: %08x \"%s\"\n", event->wd, event->mask, event->len ? event->name : "");
-        if(event->len) {
-            strcpy(filename, event->name);
-            if(event->mask & IN_CREATE) {
-                openDeviceLocked(devname);
-            } else {
-                ALOGI("Removing device '%s' due to inotify event\n", devname);
-                closeDeviceByPathLocked(devname);
-            }
-        }
-        event_size = sizeof(*event) + event->len;
-        res -= event_size;
-        event_pos += event_size;
-    }
-    return 0;
-}
-
-status_t EventHub::scanDirLocked(const char *dirname)
-{
-    char devname[PATH_MAX];
-    char *filename;
-    DIR *dir;
-    struct dirent *de;
-    dir = opendir(dirname);
-    if(dir == NULL)
-        return -1;
-    strcpy(devname, dirname);
-    filename = devname + strlen(devname);
-    *filename++ = '/';
-    while((de = readdir(dir))) {
-        if(de->d_name[0] == '.' &&
-           (de->d_name[1] == '\0' ||
-            (de->d_name[1] == '.' && de->d_name[2] == '\0')))
-            continue;
-        strcpy(filename, de->d_name);
-        openDeviceLocked(devname);
-    }
-    closedir(dir);
-    return 0;
-}
-
-void EventHub::requestReopenDevices() {
-    ALOGV("requestReopenDevices() called");
-
-    AutoMutex _l(mLock);
-    mNeedToReopenDevices = true;
-}
-
-void EventHub::dump(String8& dump) {
-    dump.append("Event Hub State:\n");
-
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        dump.appendFormat(INDENT "BuiltInKeyboardId: %d\n", mBuiltInKeyboardId);
-
-        dump.append(INDENT "Devices:\n");
-
-        for (size_t i = 0; i < mDevices.size(); i++) {
-            const Device* device = mDevices.valueAt(i);
-            if (mBuiltInKeyboardId == device->id) {
-                dump.appendFormat(INDENT2 "%d: %s (aka device 0 - built-in keyboard)\n",
-                        device->id, device->identifier.name.string());
-            } else {
-                dump.appendFormat(INDENT2 "%d: %s\n", device->id,
-                        device->identifier.name.string());
-            }
-            dump.appendFormat(INDENT3 "Classes: 0x%08x\n", device->classes);
-            dump.appendFormat(INDENT3 "Path: %s\n", device->path.string());
-            dump.appendFormat(INDENT3 "Descriptor: %s\n", device->identifier.descriptor.string());
-            dump.appendFormat(INDENT3 "Location: %s\n", device->identifier.location.string());
-            dump.appendFormat(INDENT3 "ControllerNumber: %d\n", device->controllerNumber);
-            dump.appendFormat(INDENT3 "UniqueId: %s\n", device->identifier.uniqueId.string());
-            dump.appendFormat(INDENT3 "Identifier: bus=0x%04x, vendor=0x%04x, "
-                    "product=0x%04x, version=0x%04x\n",
-                    device->identifier.bus, device->identifier.vendor,
-                    device->identifier.product, device->identifier.version);
-            dump.appendFormat(INDENT3 "KeyLayoutFile: %s\n",
-                    device->keyMap.keyLayoutFile.string());
-            dump.appendFormat(INDENT3 "KeyCharacterMapFile: %s\n",
-                    device->keyMap.keyCharacterMapFile.string());
-            dump.appendFormat(INDENT3 "ConfigurationFile: %s\n",
-                    device->configurationFile.string());
-            dump.appendFormat(INDENT3 "HaveKeyboardLayoutOverlay: %s\n",
-                    toString(device->overlayKeyMap != NULL));
-        }
-    } // release lock
-}
-
-void EventHub::monitor() {
-    // Acquire and release the lock to ensure that the event hub has not deadlocked.
-    mLock.lock();
-    mLock.unlock();
-}
-
-
-}; // namespace android
diff --git a/libs/input/EventHub.h b/libs/input/EventHub.h
deleted file mode 100644
index 86c05af..0000000
--- a/libs/input/EventHub.h
+++ /dev/null
@@ -1,455 +0,0 @@
-/*
- * Copyright (C) 2005 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.
- */
-
-//
-#ifndef _RUNTIME_EVENT_HUB_H
-#define _RUNTIME_EVENT_HUB_H
-
-#include <input/Input.h>
-#include <input/InputDevice.h>
-#include <input/Keyboard.h>
-#include <input/KeyLayoutMap.h>
-#include <input/KeyCharacterMap.h>
-#include <input/VirtualKeyMap.h>
-#include <utils/String8.h>
-#include <utils/threads.h>
-#include <utils/Log.h>
-#include <utils/threads.h>
-#include <utils/List.h>
-#include <utils/Errors.h>
-#include <utils/PropertyMap.h>
-#include <utils/Vector.h>
-#include <utils/KeyedVector.h>
-#include <utils/BitSet.h>
-
-#include <linux/input.h>
-#include <sys/epoll.h>
-
-/* Convenience constants. */
-
-#define BTN_FIRST 0x100  // first button code
-#define BTN_LAST 0x15f   // last button code
-
-/*
- * These constants are used privately in Android to pass raw timestamps
- * through evdev from uinput device drivers because there is currently no
- * other way to transfer this information.  The evdev driver automatically
- * timestamps all input events with the time they were posted and clobbers
- * whatever information was passed in.
- *
- * For the purposes of this hack, the timestamp is specified in the
- * CLOCK_MONOTONIC timebase and is split into two EV_MSC events specifying
- * seconds and microseconds.
- */
-#define MSC_ANDROID_TIME_SEC 0x6
-#define MSC_ANDROID_TIME_USEC 0x7
-
-namespace android {
-
-enum {
-    // Device id of a special "virtual" keyboard that is always present.
-    VIRTUAL_KEYBOARD_ID = -1,
-    // Device id of the "built-in" keyboard if there is one.
-    BUILT_IN_KEYBOARD_ID = 0,
-};
-
-/*
- * A raw event as retrieved from the EventHub.
- */
-struct RawEvent {
-    nsecs_t when;
-    int32_t deviceId;
-    int32_t type;
-    int32_t code;
-    int32_t value;
-};
-
-/* Describes an absolute axis. */
-struct RawAbsoluteAxisInfo {
-    bool valid; // true if the information is valid, false otherwise
-
-    int32_t minValue;  // minimum value
-    int32_t maxValue;  // maximum value
-    int32_t flat;      // center flat position, eg. flat == 8 means center is between -8 and 8
-    int32_t fuzz;      // error tolerance, eg. fuzz == 4 means value is +/- 4 due to noise
-    int32_t resolution; // resolution in units per mm or radians per mm
-
-    inline void clear() {
-        valid = false;
-        minValue = 0;
-        maxValue = 0;
-        flat = 0;
-        fuzz = 0;
-        resolution = 0;
-    }
-};
-
-/*
- * Input device classes.
- */
-enum {
-    /* The input device is a keyboard or has buttons. */
-    INPUT_DEVICE_CLASS_KEYBOARD      = 0x00000001,
-
-    /* The input device is an alpha-numeric keyboard (not just a dial pad). */
-    INPUT_DEVICE_CLASS_ALPHAKEY      = 0x00000002,
-
-    /* The input device is a touchscreen or a touchpad (either single-touch or multi-touch). */
-    INPUT_DEVICE_CLASS_TOUCH         = 0x00000004,
-
-    /* The input device is a cursor device such as a trackball or mouse. */
-    INPUT_DEVICE_CLASS_CURSOR        = 0x00000008,
-
-    /* The input device is a multi-touch touchscreen. */
-    INPUT_DEVICE_CLASS_TOUCH_MT      = 0x00000010,
-
-    /* The input device is a directional pad (implies keyboard, has DPAD keys). */
-    INPUT_DEVICE_CLASS_DPAD          = 0x00000020,
-
-    /* The input device is a gamepad (implies keyboard, has BUTTON keys). */
-    INPUT_DEVICE_CLASS_GAMEPAD       = 0x00000040,
-
-    /* The input device has switches. */
-    INPUT_DEVICE_CLASS_SWITCH        = 0x00000080,
-
-    /* The input device is a joystick (implies gamepad, has joystick absolute axes). */
-    INPUT_DEVICE_CLASS_JOYSTICK      = 0x00000100,
-
-    /* The input device has a vibrator (supports FF_RUMBLE). */
-    INPUT_DEVICE_CLASS_VIBRATOR      = 0x00000200,
-
-    /* The input device is virtual (not a real device, not part of UI configuration). */
-    INPUT_DEVICE_CLASS_VIRTUAL       = 0x40000000,
-
-    /* The input device is external (not built-in). */
-    INPUT_DEVICE_CLASS_EXTERNAL      = 0x80000000,
-};
-
-/*
- * Gets the class that owns an axis, in cases where multiple classes might claim
- * the same axis for different purposes.
- */
-extern uint32_t getAbsAxisUsage(int32_t axis, uint32_t deviceClasses);
-
-/*
- * Grand Central Station for events.
- *
- * The event hub aggregates input events received across all known input
- * devices on the system, including devices that may be emulated by the simulator
- * environment.  In addition, the event hub generates fake input events to indicate
- * when devices are added or removed.
- *
- * The event hub provides a stream of input events (via the getEvent function).
- * It also supports querying the current actual state of input devices such as identifying
- * which keys are currently down.  Finally, the event hub keeps track of the capabilities of
- * individual input devices, such as their class and the set of key codes that they support.
- */
-class EventHubInterface : public virtual RefBase {
-protected:
-    EventHubInterface() { }
-    virtual ~EventHubInterface() { }
-
-public:
-    // Synthetic raw event type codes produced when devices are added or removed.
-    enum {
-        // Sent when a device is added.
-        DEVICE_ADDED = 0x10000000,
-        // Sent when a device is removed.
-        DEVICE_REMOVED = 0x20000000,
-        // Sent when all added/removed devices from the most recent scan have been reported.
-        // This event is always sent at least once.
-        FINISHED_DEVICE_SCAN = 0x30000000,
-
-        FIRST_SYNTHETIC_EVENT = DEVICE_ADDED,
-    };
-
-    virtual uint32_t getDeviceClasses(int32_t deviceId) const = 0;
-
-    virtual InputDeviceIdentifier getDeviceIdentifier(int32_t deviceId) const = 0;
-
-    virtual int32_t getDeviceControllerNumber(int32_t deviceId) const = 0;
-
-    virtual void getConfiguration(int32_t deviceId, PropertyMap* outConfiguration) const = 0;
-
-    virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis,
-            RawAbsoluteAxisInfo* outAxisInfo) const = 0;
-
-    virtual bool hasRelativeAxis(int32_t deviceId, int axis) const = 0;
-
-    virtual bool hasInputProperty(int32_t deviceId, int property) const = 0;
-
-    virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
-            int32_t* outKeycode, uint32_t* outFlags) const = 0;
-
-    virtual status_t mapAxis(int32_t deviceId, int32_t scanCode,
-            AxisInfo* outAxisInfo) const = 0;
-
-    // Sets devices that are excluded from opening.
-    // This can be used to ignore input devices for sensors.
-    virtual void setExcludedDevices(const Vector<String8>& devices) = 0;
-
-    /*
-     * Wait for events to become available and returns them.
-     * After returning, the EventHub holds onto a wake lock until the next call to getEvent.
-     * This ensures that the device will not go to sleep while the event is being processed.
-     * If the device needs to remain awake longer than that, then the caller is responsible
-     * for taking care of it (say, by poking the power manager user activity timer).
-     *
-     * The timeout is advisory only.  If the device is asleep, it will not wake just to
-     * service the timeout.
-     *
-     * Returns the number of events obtained, or 0 if the timeout expired.
-     */
-    virtual size_t getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize) = 0;
-
-    /*
-     * Query current input state.
-     */
-    virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const = 0;
-    virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const = 0;
-    virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const = 0;
-    virtual status_t getAbsoluteAxisValue(int32_t deviceId, int32_t axis,
-            int32_t* outValue) const = 0;
-
-    /*
-     * Examine key input devices for specific framework keycode support
-     */
-    virtual bool markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes,
-            uint8_t* outFlags) const = 0;
-
-    virtual bool hasScanCode(int32_t deviceId, int32_t scanCode) const = 0;
-
-    /* LED related functions expect Android LED constants, not scan codes or HID usages */
-    virtual bool hasLed(int32_t deviceId, int32_t led) const = 0;
-    virtual void setLedState(int32_t deviceId, int32_t led, bool on) = 0;
-
-    virtual void getVirtualKeyDefinitions(int32_t deviceId,
-            Vector<VirtualKeyDefinition>& outVirtualKeys) const = 0;
-
-    virtual sp<KeyCharacterMap> getKeyCharacterMap(int32_t deviceId) const = 0;
-    virtual bool setKeyboardLayoutOverlay(int32_t deviceId, const sp<KeyCharacterMap>& map) = 0;
-
-    /* Control the vibrator. */
-    virtual void vibrate(int32_t deviceId, nsecs_t duration) = 0;
-    virtual void cancelVibrate(int32_t deviceId) = 0;
-
-    /* Requests the EventHub to reopen all input devices on the next call to getEvents(). */
-    virtual void requestReopenDevices() = 0;
-
-    /* Wakes up getEvents() if it is blocked on a read. */
-    virtual void wake() = 0;
-
-    /* Dump EventHub state to a string. */
-    virtual void dump(String8& dump) = 0;
-
-    /* Called by the heatbeat to ensures that the reader has not deadlocked. */
-    virtual void monitor() = 0;
-};
-
-class EventHub : public EventHubInterface
-{
-public:
-    EventHub();
-
-    virtual uint32_t getDeviceClasses(int32_t deviceId) const;
-
-    virtual InputDeviceIdentifier getDeviceIdentifier(int32_t deviceId) const;
-
-    virtual int32_t getDeviceControllerNumber(int32_t deviceId) const;
-
-    virtual void getConfiguration(int32_t deviceId, PropertyMap* outConfiguration) const;
-
-    virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis,
-            RawAbsoluteAxisInfo* outAxisInfo) const;
-
-    virtual bool hasRelativeAxis(int32_t deviceId, int axis) const;
-
-    virtual bool hasInputProperty(int32_t deviceId, int property) const;
-
-    virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
-            int32_t* outKeycode, uint32_t* outFlags) const;
-
-    virtual status_t mapAxis(int32_t deviceId, int32_t scanCode,
-            AxisInfo* outAxisInfo) const;
-
-    virtual void setExcludedDevices(const Vector<String8>& devices);
-
-    virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const;
-    virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const;
-    virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const;
-    virtual status_t getAbsoluteAxisValue(int32_t deviceId, int32_t axis, int32_t* outValue) const;
-
-    virtual bool markSupportedKeyCodes(int32_t deviceId, size_t numCodes,
-            const int32_t* keyCodes, uint8_t* outFlags) const;
-
-    virtual size_t getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize);
-
-    virtual bool hasScanCode(int32_t deviceId, int32_t scanCode) const;
-    virtual bool hasLed(int32_t deviceId, int32_t led) const;
-    virtual void setLedState(int32_t deviceId, int32_t led, bool on);
-
-    virtual void getVirtualKeyDefinitions(int32_t deviceId,
-            Vector<VirtualKeyDefinition>& outVirtualKeys) const;
-
-    virtual sp<KeyCharacterMap> getKeyCharacterMap(int32_t deviceId) const;
-    virtual bool setKeyboardLayoutOverlay(int32_t deviceId, const sp<KeyCharacterMap>& map);
-
-    virtual void vibrate(int32_t deviceId, nsecs_t duration);
-    virtual void cancelVibrate(int32_t deviceId);
-
-    virtual void requestReopenDevices();
-
-    virtual void wake();
-
-    virtual void dump(String8& dump);
-    virtual void monitor();
-
-protected:
-    virtual ~EventHub();
-
-private:
-    struct Device {
-        Device* next;
-
-        int fd; // may be -1 if device is virtual
-        const int32_t id;
-        const String8 path;
-        const InputDeviceIdentifier identifier;
-
-        uint32_t classes;
-
-        uint8_t keyBitmask[(KEY_MAX + 1) / 8];
-        uint8_t absBitmask[(ABS_MAX + 1) / 8];
-        uint8_t relBitmask[(REL_MAX + 1) / 8];
-        uint8_t swBitmask[(SW_MAX + 1) / 8];
-        uint8_t ledBitmask[(LED_MAX + 1) / 8];
-        uint8_t ffBitmask[(FF_MAX + 1) / 8];
-        uint8_t propBitmask[(INPUT_PROP_MAX + 1) / 8];
-
-        String8 configurationFile;
-        PropertyMap* configuration;
-        VirtualKeyMap* virtualKeyMap;
-        KeyMap keyMap;
-
-        sp<KeyCharacterMap> overlayKeyMap;
-        sp<KeyCharacterMap> combinedKeyMap;
-
-        bool ffEffectPlaying;
-        int16_t ffEffectId; // initially -1
-
-        int32_t controllerNumber;
-
-        int32_t timestampOverrideSec;
-        int32_t timestampOverrideUsec;
-
-        Device(int fd, int32_t id, const String8& path, const InputDeviceIdentifier& identifier);
-        ~Device();
-
-        void close();
-
-        inline bool isVirtual() const { return fd < 0; }
-
-        const sp<KeyCharacterMap>& getKeyCharacterMap() const {
-            if (combinedKeyMap != NULL) {
-                return combinedKeyMap;
-            }
-            return keyMap.keyCharacterMap;
-        }
-    };
-
-    status_t openDeviceLocked(const char *devicePath);
-    void createVirtualKeyboardLocked();
-    void addDeviceLocked(Device* device);
-    void assignDescriptorLocked(InputDeviceIdentifier& identifier);
-
-    status_t closeDeviceByPathLocked(const char *devicePath);
-    void closeDeviceLocked(Device* device);
-    void closeAllDevicesLocked();
-
-    status_t scanDirLocked(const char *dirname);
-    void scanDevicesLocked();
-    status_t readNotifyLocked();
-
-    Device* getDeviceByDescriptorLocked(String8& descriptor) const;
-    Device* getDeviceLocked(int32_t deviceId) const;
-    Device* getDeviceByPathLocked(const char* devicePath) const;
-
-    bool hasKeycodeLocked(Device* device, int keycode) const;
-
-    void loadConfigurationLocked(Device* device);
-    status_t loadVirtualKeyMapLocked(Device* device);
-    status_t loadKeyMapLocked(Device* device);
-
-    bool isExternalDeviceLocked(Device* device);
-
-    int32_t getNextControllerNumberLocked(Device* device);
-    void releaseControllerNumberLocked(Device* device);
-    void setLedForController(Device* device);
-
-    status_t mapLed(Device* device, int32_t led, int32_t* outScanCode) const;
-    void setLedStateLocked(Device* device, int32_t led, bool on);
-
-    // Protect all internal state.
-    mutable Mutex mLock;
-
-    // The actual id of the built-in keyboard, or NO_BUILT_IN_KEYBOARD if none.
-    // EventHub remaps the built-in keyboard to id 0 externally as required by the API.
-    enum {
-        // Must not conflict with any other assigned device ids, including
-        // the virtual keyboard id (-1).
-        NO_BUILT_IN_KEYBOARD = -2,
-    };
-    int32_t mBuiltInKeyboardId;
-
-    int32_t mNextDeviceId;
-
-    BitSet32 mControllerNumbers;
-
-    KeyedVector<int32_t, Device*> mDevices;
-
-    Device *mOpeningDevices;
-    Device *mClosingDevices;
-
-    bool mNeedToSendFinishedDeviceScan;
-    bool mNeedToReopenDevices;
-    bool mNeedToScanDevices;
-    Vector<String8> mExcludedDevices;
-
-    int mEpollFd;
-    int mINotifyFd;
-    int mWakeReadPipeFd;
-    int mWakeWritePipeFd;
-
-    // Ids used for epoll notifications not associated with devices.
-    static const uint32_t EPOLL_ID_INOTIFY = 0x80000001;
-    static const uint32_t EPOLL_ID_WAKE = 0x80000002;
-
-    // Epoll FD list size hint.
-    static const int EPOLL_SIZE_HINT = 8;
-
-    // Maximum number of signalled FDs to handle at a time.
-    static const int EPOLL_MAX_EVENTS = 16;
-
-    // The array of pending epoll events and the index of the next event to be handled.
-    struct epoll_event mPendingEventItems[EPOLL_MAX_EVENTS];
-    size_t mPendingEventCount;
-    size_t mPendingEventIndex;
-    bool mPendingINotify;
-};
-
-}; // namespace android
-
-#endif // _RUNTIME_EVENT_HUB_H
diff --git a/libs/input/InputApplication.cpp b/libs/input/InputApplication.cpp
deleted file mode 100644
index a99e637..0000000
--- a/libs/input/InputApplication.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#define LOG_TAG "InputApplication"
-
-#include "InputApplication.h"
-
-#include <cutils/log.h>
-
-namespace android {
-
-// --- InputApplicationHandle ---
-
-InputApplicationHandle::InputApplicationHandle() :
-    mInfo(NULL) {
-}
-
-InputApplicationHandle::~InputApplicationHandle() {
-    delete mInfo;
-}
-
-void InputApplicationHandle::releaseInfo() {
-    if (mInfo) {
-        delete mInfo;
-        mInfo = NULL;
-    }
-}
-
-} // namespace android
diff --git a/libs/input/InputApplication.h b/libs/input/InputApplication.h
deleted file mode 100644
index 1f5504c..0000000
--- a/libs/input/InputApplication.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef _UI_INPUT_APPLICATION_H
-#define _UI_INPUT_APPLICATION_H
-
-#include <input/Input.h>
-
-#include <utils/RefBase.h>
-#include <utils/Timers.h>
-#include <utils/String8.h>
-
-namespace android {
-
-/*
- * Describes the properties of an application that can receive input.
- */
-struct InputApplicationInfo {
-    String8 name;
-    nsecs_t dispatchingTimeout;
-};
-
-
-/*
- * Handle for an application that can receive input.
- *
- * Used by the native input dispatcher as a handle for the window manager objects
- * that describe an application.
- */
-class InputApplicationHandle : public RefBase {
-public:
-    inline const InputApplicationInfo* getInfo() const {
-        return mInfo;
-    }
-
-    inline String8 getName() const {
-        return mInfo ? mInfo->name : String8("<invalid>");
-    }
-
-    inline nsecs_t getDispatchingTimeout(nsecs_t defaultValue) const {
-        return mInfo ? mInfo->dispatchingTimeout : defaultValue;
-    }
-
-    /**
-     * Requests that the state of this object be updated to reflect
-     * the most current available information about the application.
-     *
-     * This method should only be called from within the input dispatcher's
-     * critical section.
-     *
-     * Returns true on success, or false if the handle is no longer valid.
-     */
-    virtual bool updateInfo() = 0;
-
-    /**
-     * Releases the storage used by the associated information when it is
-     * no longer needed.
-     */
-    void releaseInfo();
-
-protected:
-    InputApplicationHandle();
-    virtual ~InputApplicationHandle();
-
-    InputApplicationInfo* mInfo;
-};
-
-} // namespace android
-
-#endif // _UI_INPUT_APPLICATION_H
diff --git a/libs/input/InputDispatcher.cpp b/libs/input/InputDispatcher.cpp
deleted file mode 100644
index 22d1871..0000000
--- a/libs/input/InputDispatcher.cpp
+++ /dev/null
@@ -1,4496 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#define LOG_TAG "InputDispatcher"
-#define ATRACE_TAG ATRACE_TAG_INPUT
-
-//#define LOG_NDEBUG 0
-
-// Log detailed debug messages about each inbound event notification to the dispatcher.
-#define DEBUG_INBOUND_EVENT_DETAILS 0
-
-// Log detailed debug messages about each outbound event processed by the dispatcher.
-#define DEBUG_OUTBOUND_EVENT_DETAILS 0
-
-// Log debug messages about the dispatch cycle.
-#define DEBUG_DISPATCH_CYCLE 0
-
-// Log debug messages about registrations.
-#define DEBUG_REGISTRATION 0
-
-// Log debug messages about input event injection.
-#define DEBUG_INJECTION 0
-
-// Log debug messages about input focus tracking.
-#define DEBUG_FOCUS 0
-
-// Log debug messages about the app switch latency optimization.
-#define DEBUG_APP_SWITCH 0
-
-// Log debug messages about hover events.
-#define DEBUG_HOVER 0
-
-#include "InputDispatcher.h"
-
-#include <utils/Trace.h>
-#include <cutils/log.h>
-#include <androidfw/PowerManager.h>
-
-#include <stddef.h>
-#include <unistd.h>
-#include <errno.h>
-#include <limits.h>
-#include <time.h>
-
-#define INDENT "  "
-#define INDENT2 "    "
-#define INDENT3 "      "
-#define INDENT4 "        "
-
-namespace android {
-
-// Default input dispatching timeout if there is no focused application or paused window
-// from which to determine an appropriate dispatching timeout.
-const nsecs_t DEFAULT_INPUT_DISPATCHING_TIMEOUT = 5000 * 1000000LL; // 5 sec
-
-// Amount of time to allow for all pending events to be processed when an app switch
-// key is on the way.  This is used to preempt input dispatch and drop input events
-// when an application takes too long to respond and the user has pressed an app switch key.
-const nsecs_t APP_SWITCH_TIMEOUT = 500 * 1000000LL; // 0.5sec
-
-// Amount of time to allow for an event to be dispatched (measured since its eventTime)
-// before considering it stale and dropping it.
-const nsecs_t STALE_EVENT_TIMEOUT = 10000 * 1000000LL; // 10sec
-
-// Amount of time to allow touch events to be streamed out to a connection before requiring
-// that the first event be finished.  This value extends the ANR timeout by the specified
-// amount.  For example, if streaming is allowed to get ahead by one second relative to the
-// queue of waiting unfinished events, then ANRs will similarly be delayed by one second.
-const nsecs_t STREAM_AHEAD_EVENT_TIMEOUT = 500 * 1000000LL; // 0.5sec
-
-// Log a warning when an event takes longer than this to process, even if an ANR does not occur.
-const nsecs_t SLOW_EVENT_PROCESSING_WARNING_TIMEOUT = 2000 * 1000000LL; // 2sec
-
-// Number of recent events to keep for debugging purposes.
-const size_t RECENT_QUEUE_MAX_SIZE = 10;
-
-static inline nsecs_t now() {
-    return systemTime(SYSTEM_TIME_MONOTONIC);
-}
-
-static inline const char* toString(bool value) {
-    return value ? "true" : "false";
-}
-
-static inline int32_t getMotionEventActionPointerIndex(int32_t action) {
-    return (action & AMOTION_EVENT_ACTION_POINTER_INDEX_MASK)
-            >> AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
-}
-
-static bool isValidKeyAction(int32_t action) {
-    switch (action) {
-    case AKEY_EVENT_ACTION_DOWN:
-    case AKEY_EVENT_ACTION_UP:
-        return true;
-    default:
-        return false;
-    }
-}
-
-static bool validateKeyEvent(int32_t action) {
-    if (! isValidKeyAction(action)) {
-        ALOGE("Key event has invalid action code 0x%x", action);
-        return false;
-    }
-    return true;
-}
-
-static bool isValidMotionAction(int32_t action, size_t pointerCount) {
-    switch (action & AMOTION_EVENT_ACTION_MASK) {
-    case AMOTION_EVENT_ACTION_DOWN:
-    case AMOTION_EVENT_ACTION_UP:
-    case AMOTION_EVENT_ACTION_CANCEL:
-    case AMOTION_EVENT_ACTION_MOVE:
-    case AMOTION_EVENT_ACTION_OUTSIDE:
-    case AMOTION_EVENT_ACTION_HOVER_ENTER:
-    case AMOTION_EVENT_ACTION_HOVER_MOVE:
-    case AMOTION_EVENT_ACTION_HOVER_EXIT:
-    case AMOTION_EVENT_ACTION_SCROLL:
-        return true;
-    case AMOTION_EVENT_ACTION_POINTER_DOWN:
-    case AMOTION_EVENT_ACTION_POINTER_UP: {
-        int32_t index = getMotionEventActionPointerIndex(action);
-        return index >= 0 && size_t(index) < pointerCount;
-    }
-    default:
-        return false;
-    }
-}
-
-static bool validateMotionEvent(int32_t action, size_t pointerCount,
-        const PointerProperties* pointerProperties) {
-    if (! isValidMotionAction(action, pointerCount)) {
-        ALOGE("Motion event has invalid action code 0x%x", action);
-        return false;
-    }
-    if (pointerCount < 1 || pointerCount > MAX_POINTERS) {
-        ALOGE("Motion event has invalid pointer count %zu; value must be between 1 and %d.",
-                pointerCount, MAX_POINTERS);
-        return false;
-    }
-    BitSet32 pointerIdBits;
-    for (size_t i = 0; i < pointerCount; i++) {
-        int32_t id = pointerProperties[i].id;
-        if (id < 0 || id > MAX_POINTER_ID) {
-            ALOGE("Motion event has invalid pointer id %d; value must be between 0 and %d",
-                    id, MAX_POINTER_ID);
-            return false;
-        }
-        if (pointerIdBits.hasBit(id)) {
-            ALOGE("Motion event has duplicate pointer id %d", id);
-            return false;
-        }
-        pointerIdBits.markBit(id);
-    }
-    return true;
-}
-
-static bool isMainDisplay(int32_t displayId) {
-    return displayId == ADISPLAY_ID_DEFAULT || displayId == ADISPLAY_ID_NONE;
-}
-
-static void dumpRegion(String8& dump, const SkRegion& region) {
-    if (region.isEmpty()) {
-        dump.append("<empty>");
-        return;
-    }
-
-    bool first = true;
-    for (SkRegion::Iterator it(region); !it.done(); it.next()) {
-        if (first) {
-            first = false;
-        } else {
-            dump.append("|");
-        }
-        const SkIRect& rect = it.rect();
-        dump.appendFormat("[%d,%d][%d,%d]", rect.fLeft, rect.fTop, rect.fRight, rect.fBottom);
-    }
-}
-
-
-// --- InputDispatcher ---
-
-InputDispatcher::InputDispatcher(const sp<InputDispatcherPolicyInterface>& policy) :
-    mPolicy(policy),
-    mPendingEvent(NULL), mAppSwitchSawKeyDown(false), mAppSwitchDueTime(LONG_LONG_MAX),
-    mNextUnblockedEvent(NULL),
-    mDispatchEnabled(false), mDispatchFrozen(false), mInputFilterEnabled(false),
-    mInputTargetWaitCause(INPUT_TARGET_WAIT_CAUSE_NONE) {
-    mLooper = new Looper(false);
-
-    mKeyRepeatState.lastKeyEntry = NULL;
-
-    policy->getDispatcherConfiguration(&mConfig);
-}
-
-InputDispatcher::~InputDispatcher() {
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        resetKeyRepeatLocked();
-        releasePendingEventLocked();
-        drainInboundQueueLocked();
-    }
-
-    while (mConnectionsByFd.size() != 0) {
-        unregisterInputChannel(mConnectionsByFd.valueAt(0)->inputChannel);
-    }
-}
-
-void InputDispatcher::dispatchOnce() {
-    nsecs_t nextWakeupTime = LONG_LONG_MAX;
-    { // acquire lock
-        AutoMutex _l(mLock);
-        mDispatcherIsAliveCondition.broadcast();
-
-        // Run a dispatch loop if there are no pending commands.
-        // The dispatch loop might enqueue commands to run afterwards.
-        if (!haveCommandsLocked()) {
-            dispatchOnceInnerLocked(&nextWakeupTime);
-        }
-
-        // Run all pending commands if there are any.
-        // If any commands were run then force the next poll to wake up immediately.
-        if (runCommandsLockedInterruptible()) {
-            nextWakeupTime = LONG_LONG_MIN;
-        }
-    } // release lock
-
-    // Wait for callback or timeout or wake.  (make sure we round up, not down)
-    nsecs_t currentTime = now();
-    int timeoutMillis = toMillisecondTimeoutDelay(currentTime, nextWakeupTime);
-    mLooper->pollOnce(timeoutMillis);
-}
-
-void InputDispatcher::dispatchOnceInnerLocked(nsecs_t* nextWakeupTime) {
-    nsecs_t currentTime = now();
-
-    // Reset the key repeat timer whenever normal dispatch is suspended while the
-    // device is in a non-interactive state.  This is to ensure that we abort a key
-    // repeat if the device is just coming out of sleep.
-    if (!mDispatchEnabled) {
-        resetKeyRepeatLocked();
-    }
-
-    // If dispatching is frozen, do not process timeouts or try to deliver any new events.
-    if (mDispatchFrozen) {
-#if DEBUG_FOCUS
-        ALOGD("Dispatch frozen.  Waiting some more.");
-#endif
-        return;
-    }
-
-    // Optimize latency of app switches.
-    // Essentially we start a short timeout when an app switch key (HOME / ENDCALL) has
-    // been pressed.  When it expires, we preempt dispatch and drop all other pending events.
-    bool isAppSwitchDue = mAppSwitchDueTime <= currentTime;
-    if (mAppSwitchDueTime < *nextWakeupTime) {
-        *nextWakeupTime = mAppSwitchDueTime;
-    }
-
-    // Ready to start a new event.
-    // If we don't already have a pending event, go grab one.
-    if (! mPendingEvent) {
-        if (mInboundQueue.isEmpty()) {
-            if (isAppSwitchDue) {
-                // The inbound queue is empty so the app switch key we were waiting
-                // for will never arrive.  Stop waiting for it.
-                resetPendingAppSwitchLocked(false);
-                isAppSwitchDue = false;
-            }
-
-            // Synthesize a key repeat if appropriate.
-            if (mKeyRepeatState.lastKeyEntry) {
-                if (currentTime >= mKeyRepeatState.nextRepeatTime) {
-                    mPendingEvent = synthesizeKeyRepeatLocked(currentTime);
-                } else {
-                    if (mKeyRepeatState.nextRepeatTime < *nextWakeupTime) {
-                        *nextWakeupTime = mKeyRepeatState.nextRepeatTime;
-                    }
-                }
-            }
-
-            // Nothing to do if there is no pending event.
-            if (!mPendingEvent) {
-                return;
-            }
-        } else {
-            // Inbound queue has at least one entry.
-            mPendingEvent = mInboundQueue.dequeueAtHead();
-            traceInboundQueueLengthLocked();
-        }
-
-        // Poke user activity for this event.
-        if (mPendingEvent->policyFlags & POLICY_FLAG_PASS_TO_USER) {
-            pokeUserActivityLocked(mPendingEvent);
-        }
-
-        // Get ready to dispatch the event.
-        resetANRTimeoutsLocked();
-    }
-
-    // Now we have an event to dispatch.
-    // All events are eventually dequeued and processed this way, even if we intend to drop them.
-    ALOG_ASSERT(mPendingEvent != NULL);
-    bool done = false;
-    DropReason dropReason = DROP_REASON_NOT_DROPPED;
-    if (!(mPendingEvent->policyFlags & POLICY_FLAG_PASS_TO_USER)) {
-        dropReason = DROP_REASON_POLICY;
-    } else if (!mDispatchEnabled) {
-        dropReason = DROP_REASON_DISABLED;
-    }
-
-    if (mNextUnblockedEvent == mPendingEvent) {
-        mNextUnblockedEvent = NULL;
-    }
-
-    switch (mPendingEvent->type) {
-    case EventEntry::TYPE_CONFIGURATION_CHANGED: {
-        ConfigurationChangedEntry* typedEntry =
-                static_cast<ConfigurationChangedEntry*>(mPendingEvent);
-        done = dispatchConfigurationChangedLocked(currentTime, typedEntry);
-        dropReason = DROP_REASON_NOT_DROPPED; // configuration changes are never dropped
-        break;
-    }
-
-    case EventEntry::TYPE_DEVICE_RESET: {
-        DeviceResetEntry* typedEntry =
-                static_cast<DeviceResetEntry*>(mPendingEvent);
-        done = dispatchDeviceResetLocked(currentTime, typedEntry);
-        dropReason = DROP_REASON_NOT_DROPPED; // device resets are never dropped
-        break;
-    }
-
-    case EventEntry::TYPE_KEY: {
-        KeyEntry* typedEntry = static_cast<KeyEntry*>(mPendingEvent);
-        if (isAppSwitchDue) {
-            if (isAppSwitchKeyEventLocked(typedEntry)) {
-                resetPendingAppSwitchLocked(true);
-                isAppSwitchDue = false;
-            } else if (dropReason == DROP_REASON_NOT_DROPPED) {
-                dropReason = DROP_REASON_APP_SWITCH;
-            }
-        }
-        if (dropReason == DROP_REASON_NOT_DROPPED
-                && isStaleEventLocked(currentTime, typedEntry)) {
-            dropReason = DROP_REASON_STALE;
-        }
-        if (dropReason == DROP_REASON_NOT_DROPPED && mNextUnblockedEvent) {
-            dropReason = DROP_REASON_BLOCKED;
-        }
-        done = dispatchKeyLocked(currentTime, typedEntry, &dropReason, nextWakeupTime);
-        break;
-    }
-
-    case EventEntry::TYPE_MOTION: {
-        MotionEntry* typedEntry = static_cast<MotionEntry*>(mPendingEvent);
-        if (dropReason == DROP_REASON_NOT_DROPPED && isAppSwitchDue) {
-            dropReason = DROP_REASON_APP_SWITCH;
-        }
-        if (dropReason == DROP_REASON_NOT_DROPPED
-                && isStaleEventLocked(currentTime, typedEntry)) {
-            dropReason = DROP_REASON_STALE;
-        }
-        if (dropReason == DROP_REASON_NOT_DROPPED && mNextUnblockedEvent) {
-            dropReason = DROP_REASON_BLOCKED;
-        }
-        done = dispatchMotionLocked(currentTime, typedEntry,
-                &dropReason, nextWakeupTime);
-        break;
-    }
-
-    default:
-        ALOG_ASSERT(false);
-        break;
-    }
-
-    if (done) {
-        if (dropReason != DROP_REASON_NOT_DROPPED) {
-            dropInboundEventLocked(mPendingEvent, dropReason);
-        }
-
-        releasePendingEventLocked();
-        *nextWakeupTime = LONG_LONG_MIN;  // force next poll to wake up immediately
-    }
-}
-
-bool InputDispatcher::enqueueInboundEventLocked(EventEntry* entry) {
-    bool needWake = mInboundQueue.isEmpty();
-    mInboundQueue.enqueueAtTail(entry);
-    traceInboundQueueLengthLocked();
-
-    switch (entry->type) {
-    case EventEntry::TYPE_KEY: {
-        // Optimize app switch latency.
-        // If the application takes too long to catch up then we drop all events preceding
-        // the app switch key.
-        KeyEntry* keyEntry = static_cast<KeyEntry*>(entry);
-        if (isAppSwitchKeyEventLocked(keyEntry)) {
-            if (keyEntry->action == AKEY_EVENT_ACTION_DOWN) {
-                mAppSwitchSawKeyDown = true;
-            } else if (keyEntry->action == AKEY_EVENT_ACTION_UP) {
-                if (mAppSwitchSawKeyDown) {
-#if DEBUG_APP_SWITCH
-                    ALOGD("App switch is pending!");
-#endif
-                    mAppSwitchDueTime = keyEntry->eventTime + APP_SWITCH_TIMEOUT;
-                    mAppSwitchSawKeyDown = false;
-                    needWake = true;
-                }
-            }
-        }
-        break;
-    }
-
-    case EventEntry::TYPE_MOTION: {
-        // Optimize case where the current application is unresponsive and the user
-        // decides to touch a window in a different application.
-        // If the application takes too long to catch up then we drop all events preceding
-        // the touch into the other window.
-        MotionEntry* motionEntry = static_cast<MotionEntry*>(entry);
-        if (motionEntry->action == AMOTION_EVENT_ACTION_DOWN
-                && (motionEntry->source & AINPUT_SOURCE_CLASS_POINTER)
-                && mInputTargetWaitCause == INPUT_TARGET_WAIT_CAUSE_APPLICATION_NOT_READY
-                && mInputTargetWaitApplicationHandle != NULL) {
-            int32_t displayId = motionEntry->displayId;
-            int32_t x = int32_t(motionEntry->pointerCoords[0].
-                    getAxisValue(AMOTION_EVENT_AXIS_X));
-            int32_t y = int32_t(motionEntry->pointerCoords[0].
-                    getAxisValue(AMOTION_EVENT_AXIS_Y));
-            sp<InputWindowHandle> touchedWindowHandle = findTouchedWindowAtLocked(displayId, x, y);
-            if (touchedWindowHandle != NULL
-                    && touchedWindowHandle->inputApplicationHandle
-                            != mInputTargetWaitApplicationHandle) {
-                // User touched a different application than the one we are waiting on.
-                // Flag the event, and start pruning the input queue.
-                mNextUnblockedEvent = motionEntry;
-                needWake = true;
-            }
-        }
-        break;
-    }
-    }
-
-    return needWake;
-}
-
-void InputDispatcher::addRecentEventLocked(EventEntry* entry) {
-    entry->refCount += 1;
-    mRecentQueue.enqueueAtTail(entry);
-    if (mRecentQueue.count() > RECENT_QUEUE_MAX_SIZE) {
-        mRecentQueue.dequeueAtHead()->release();
-    }
-}
-
-sp<InputWindowHandle> InputDispatcher::findTouchedWindowAtLocked(int32_t displayId,
-        int32_t x, int32_t y) {
-    // Traverse windows from front to back to find touched window.
-    size_t numWindows = mWindowHandles.size();
-    for (size_t i = 0; i < numWindows; i++) {
-        sp<InputWindowHandle> windowHandle = mWindowHandles.itemAt(i);
-        const InputWindowInfo* windowInfo = windowHandle->getInfo();
-        if (windowInfo->displayId == displayId) {
-            int32_t flags = windowInfo->layoutParamsFlags;
-            int32_t privateFlags = windowInfo->layoutParamsPrivateFlags;
-
-            if (windowInfo->visible) {
-                if (!(flags & InputWindowInfo::FLAG_NOT_TOUCHABLE)) {
-                    bool isTouchModal = (flags & (InputWindowInfo::FLAG_NOT_FOCUSABLE
-                            | InputWindowInfo::FLAG_NOT_TOUCH_MODAL)) == 0;
-                    if (isTouchModal || windowInfo->touchableRegionContainsPoint(x, y)) {
-                        // Found window.
-                        return windowHandle;
-                    }
-                }
-            }
-
-            if (privateFlags & InputWindowInfo::PRIVATE_FLAG_SYSTEM_ERROR) {
-                // Error window is on top but not visible, so touch is dropped.
-                return NULL;
-            }
-        }
-    }
-    return NULL;
-}
-
-void InputDispatcher::dropInboundEventLocked(EventEntry* entry, DropReason dropReason) {
-    const char* reason;
-    switch (dropReason) {
-    case DROP_REASON_POLICY:
-#if DEBUG_INBOUND_EVENT_DETAILS
-        ALOGD("Dropped event because policy consumed it.");
-#endif
-        reason = "inbound event was dropped because the policy consumed it";
-        break;
-    case DROP_REASON_DISABLED:
-        ALOGI("Dropped event because input dispatch is disabled.");
-        reason = "inbound event was dropped because input dispatch is disabled";
-        break;
-    case DROP_REASON_APP_SWITCH:
-        ALOGI("Dropped event because of pending overdue app switch.");
-        reason = "inbound event was dropped because of pending overdue app switch";
-        break;
-    case DROP_REASON_BLOCKED:
-        ALOGI("Dropped event because the current application is not responding and the user "
-                "has started interacting with a different application.");
-        reason = "inbound event was dropped because the current application is not responding "
-                "and the user has started interacting with a different application";
-        break;
-    case DROP_REASON_STALE:
-        ALOGI("Dropped event because it is stale.");
-        reason = "inbound event was dropped because it is stale";
-        break;
-    default:
-        ALOG_ASSERT(false);
-        return;
-    }
-
-    switch (entry->type) {
-    case EventEntry::TYPE_KEY: {
-        CancelationOptions options(CancelationOptions::CANCEL_NON_POINTER_EVENTS, reason);
-        synthesizeCancelationEventsForAllConnectionsLocked(options);
-        break;
-    }
-    case EventEntry::TYPE_MOTION: {
-        MotionEntry* motionEntry = static_cast<MotionEntry*>(entry);
-        if (motionEntry->source & AINPUT_SOURCE_CLASS_POINTER) {
-            CancelationOptions options(CancelationOptions::CANCEL_POINTER_EVENTS, reason);
-            synthesizeCancelationEventsForAllConnectionsLocked(options);
-        } else {
-            CancelationOptions options(CancelationOptions::CANCEL_NON_POINTER_EVENTS, reason);
-            synthesizeCancelationEventsForAllConnectionsLocked(options);
-        }
-        break;
-    }
-    }
-}
-
-bool InputDispatcher::isAppSwitchKeyCode(int32_t keyCode) {
-    return keyCode == AKEYCODE_HOME
-            || keyCode == AKEYCODE_ENDCALL
-            || keyCode == AKEYCODE_APP_SWITCH;
-}
-
-bool InputDispatcher::isAppSwitchKeyEventLocked(KeyEntry* keyEntry) {
-    return ! (keyEntry->flags & AKEY_EVENT_FLAG_CANCELED)
-            && isAppSwitchKeyCode(keyEntry->keyCode)
-            && (keyEntry->policyFlags & POLICY_FLAG_TRUSTED)
-            && (keyEntry->policyFlags & POLICY_FLAG_PASS_TO_USER);
-}
-
-bool InputDispatcher::isAppSwitchPendingLocked() {
-    return mAppSwitchDueTime != LONG_LONG_MAX;
-}
-
-void InputDispatcher::resetPendingAppSwitchLocked(bool handled) {
-    mAppSwitchDueTime = LONG_LONG_MAX;
-
-#if DEBUG_APP_SWITCH
-    if (handled) {
-        ALOGD("App switch has arrived.");
-    } else {
-        ALOGD("App switch was abandoned.");
-    }
-#endif
-}
-
-bool InputDispatcher::isStaleEventLocked(nsecs_t currentTime, EventEntry* entry) {
-    return currentTime - entry->eventTime >= STALE_EVENT_TIMEOUT;
-}
-
-bool InputDispatcher::haveCommandsLocked() const {
-    return !mCommandQueue.isEmpty();
-}
-
-bool InputDispatcher::runCommandsLockedInterruptible() {
-    if (mCommandQueue.isEmpty()) {
-        return false;
-    }
-
-    do {
-        CommandEntry* commandEntry = mCommandQueue.dequeueAtHead();
-
-        Command command = commandEntry->command;
-        (this->*command)(commandEntry); // commands are implicitly 'LockedInterruptible'
-
-        commandEntry->connection.clear();
-        delete commandEntry;
-    } while (! mCommandQueue.isEmpty());
-    return true;
-}
-
-InputDispatcher::CommandEntry* InputDispatcher::postCommandLocked(Command command) {
-    CommandEntry* commandEntry = new CommandEntry(command);
-    mCommandQueue.enqueueAtTail(commandEntry);
-    return commandEntry;
-}
-
-void InputDispatcher::drainInboundQueueLocked() {
-    while (! mInboundQueue.isEmpty()) {
-        EventEntry* entry = mInboundQueue.dequeueAtHead();
-        releaseInboundEventLocked(entry);
-    }
-    traceInboundQueueLengthLocked();
-}
-
-void InputDispatcher::releasePendingEventLocked() {
-    if (mPendingEvent) {
-        resetANRTimeoutsLocked();
-        releaseInboundEventLocked(mPendingEvent);
-        mPendingEvent = NULL;
-    }
-}
-
-void InputDispatcher::releaseInboundEventLocked(EventEntry* entry) {
-    InjectionState* injectionState = entry->injectionState;
-    if (injectionState && injectionState->injectionResult == INPUT_EVENT_INJECTION_PENDING) {
-#if DEBUG_DISPATCH_CYCLE
-        ALOGD("Injected inbound event was dropped.");
-#endif
-        setInjectionResultLocked(entry, INPUT_EVENT_INJECTION_FAILED);
-    }
-    if (entry == mNextUnblockedEvent) {
-        mNextUnblockedEvent = NULL;
-    }
-    addRecentEventLocked(entry);
-    entry->release();
-}
-
-void InputDispatcher::resetKeyRepeatLocked() {
-    if (mKeyRepeatState.lastKeyEntry) {
-        mKeyRepeatState.lastKeyEntry->release();
-        mKeyRepeatState.lastKeyEntry = NULL;
-    }
-}
-
-InputDispatcher::KeyEntry* InputDispatcher::synthesizeKeyRepeatLocked(nsecs_t currentTime) {
-    KeyEntry* entry = mKeyRepeatState.lastKeyEntry;
-
-    // Reuse the repeated key entry if it is otherwise unreferenced.
-    uint32_t policyFlags = (entry->policyFlags & POLICY_FLAG_RAW_MASK)
-            | POLICY_FLAG_PASS_TO_USER | POLICY_FLAG_TRUSTED;
-    if (entry->refCount == 1) {
-        entry->recycle();
-        entry->eventTime = currentTime;
-        entry->policyFlags = policyFlags;
-        entry->repeatCount += 1;
-    } else {
-        KeyEntry* newEntry = new KeyEntry(currentTime,
-                entry->deviceId, entry->source, policyFlags,
-                entry->action, entry->flags, entry->keyCode, entry->scanCode,
-                entry->metaState, entry->repeatCount + 1, entry->downTime);
-
-        mKeyRepeatState.lastKeyEntry = newEntry;
-        entry->release();
-
-        entry = newEntry;
-    }
-    entry->syntheticRepeat = true;
-
-    // Increment reference count since we keep a reference to the event in
-    // mKeyRepeatState.lastKeyEntry in addition to the one we return.
-    entry->refCount += 1;
-
-    mKeyRepeatState.nextRepeatTime = currentTime + mConfig.keyRepeatDelay;
-    return entry;
-}
-
-bool InputDispatcher::dispatchConfigurationChangedLocked(
-        nsecs_t currentTime, ConfigurationChangedEntry* entry) {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-    ALOGD("dispatchConfigurationChanged - eventTime=%lld", entry->eventTime);
-#endif
-
-    // Reset key repeating in case a keyboard device was added or removed or something.
-    resetKeyRepeatLocked();
-
-    // Enqueue a command to run outside the lock to tell the policy that the configuration changed.
-    CommandEntry* commandEntry = postCommandLocked(
-            & InputDispatcher::doNotifyConfigurationChangedInterruptible);
-    commandEntry->eventTime = entry->eventTime;
-    return true;
-}
-
-bool InputDispatcher::dispatchDeviceResetLocked(
-        nsecs_t currentTime, DeviceResetEntry* entry) {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-    ALOGD("dispatchDeviceReset - eventTime=%lld, deviceId=%d", entry->eventTime, entry->deviceId);
-#endif
-
-    CancelationOptions options(CancelationOptions::CANCEL_ALL_EVENTS,
-            "device was reset");
-    options.deviceId = entry->deviceId;
-    synthesizeCancelationEventsForAllConnectionsLocked(options);
-    return true;
-}
-
-bool InputDispatcher::dispatchKeyLocked(nsecs_t currentTime, KeyEntry* entry,
-        DropReason* dropReason, nsecs_t* nextWakeupTime) {
-    // Preprocessing.
-    if (! entry->dispatchInProgress) {
-        if (entry->repeatCount == 0
-                && entry->action == AKEY_EVENT_ACTION_DOWN
-                && (entry->policyFlags & POLICY_FLAG_TRUSTED)
-                && (!(entry->policyFlags & POLICY_FLAG_DISABLE_KEY_REPEAT))) {
-            if (mKeyRepeatState.lastKeyEntry
-                    && mKeyRepeatState.lastKeyEntry->keyCode == entry->keyCode) {
-                // We have seen two identical key downs in a row which indicates that the device
-                // driver is automatically generating key repeats itself.  We take note of the
-                // repeat here, but we disable our own next key repeat timer since it is clear that
-                // we will not need to synthesize key repeats ourselves.
-                entry->repeatCount = mKeyRepeatState.lastKeyEntry->repeatCount + 1;
-                resetKeyRepeatLocked();
-                mKeyRepeatState.nextRepeatTime = LONG_LONG_MAX; // don't generate repeats ourselves
-            } else {
-                // Not a repeat.  Save key down state in case we do see a repeat later.
-                resetKeyRepeatLocked();
-                mKeyRepeatState.nextRepeatTime = entry->eventTime + mConfig.keyRepeatTimeout;
-            }
-            mKeyRepeatState.lastKeyEntry = entry;
-            entry->refCount += 1;
-        } else if (! entry->syntheticRepeat) {
-            resetKeyRepeatLocked();
-        }
-
-        if (entry->repeatCount == 1) {
-            entry->flags |= AKEY_EVENT_FLAG_LONG_PRESS;
-        } else {
-            entry->flags &= ~AKEY_EVENT_FLAG_LONG_PRESS;
-        }
-
-        entry->dispatchInProgress = true;
-
-        logOutboundKeyDetailsLocked("dispatchKey - ", entry);
-    }
-
-    // Handle case where the policy asked us to try again later last time.
-    if (entry->interceptKeyResult == KeyEntry::INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER) {
-        if (currentTime < entry->interceptKeyWakeupTime) {
-            if (entry->interceptKeyWakeupTime < *nextWakeupTime) {
-                *nextWakeupTime = entry->interceptKeyWakeupTime;
-            }
-            return false; // wait until next wakeup
-        }
-        entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN;
-        entry->interceptKeyWakeupTime = 0;
-    }
-
-    // Give the policy a chance to intercept the key.
-    if (entry->interceptKeyResult == KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN) {
-        if (entry->policyFlags & POLICY_FLAG_PASS_TO_USER) {
-            CommandEntry* commandEntry = postCommandLocked(
-                    & InputDispatcher::doInterceptKeyBeforeDispatchingLockedInterruptible);
-            if (mFocusedWindowHandle != NULL) {
-                commandEntry->inputWindowHandle = mFocusedWindowHandle;
-            }
-            commandEntry->keyEntry = entry;
-            entry->refCount += 1;
-            return false; // wait for the command to run
-        } else {
-            entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_CONTINUE;
-        }
-    } else if (entry->interceptKeyResult == KeyEntry::INTERCEPT_KEY_RESULT_SKIP) {
-        if (*dropReason == DROP_REASON_NOT_DROPPED) {
-            *dropReason = DROP_REASON_POLICY;
-        }
-    }
-
-    // Clean up if dropping the event.
-    if (*dropReason != DROP_REASON_NOT_DROPPED) {
-        setInjectionResultLocked(entry, *dropReason == DROP_REASON_POLICY
-                ? INPUT_EVENT_INJECTION_SUCCEEDED : INPUT_EVENT_INJECTION_FAILED);
-        return true;
-    }
-
-    // Identify targets.
-    Vector<InputTarget> inputTargets;
-    int32_t injectionResult = findFocusedWindowTargetsLocked(currentTime,
-            entry, inputTargets, nextWakeupTime);
-    if (injectionResult == INPUT_EVENT_INJECTION_PENDING) {
-        return false;
-    }
-
-    setInjectionResultLocked(entry, injectionResult);
-    if (injectionResult != INPUT_EVENT_INJECTION_SUCCEEDED) {
-        return true;
-    }
-
-    addMonitoringTargetsLocked(inputTargets);
-
-    // Dispatch the key.
-    dispatchEventLocked(currentTime, entry, inputTargets);
-    return true;
-}
-
-void InputDispatcher::logOutboundKeyDetailsLocked(const char* prefix, const KeyEntry* entry) {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-    ALOGD("%seventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, "
-            "action=0x%x, flags=0x%x, keyCode=0x%x, scanCode=0x%x, metaState=0x%x, "
-            "repeatCount=%d, downTime=%lld",
-            prefix,
-            entry->eventTime, entry->deviceId, entry->source, entry->policyFlags,
-            entry->action, entry->flags, entry->keyCode, entry->scanCode, entry->metaState,
-            entry->repeatCount, entry->downTime);
-#endif
-}
-
-bool InputDispatcher::dispatchMotionLocked(
-        nsecs_t currentTime, MotionEntry* entry, DropReason* dropReason, nsecs_t* nextWakeupTime) {
-    // Preprocessing.
-    if (! entry->dispatchInProgress) {
-        entry->dispatchInProgress = true;
-
-        logOutboundMotionDetailsLocked("dispatchMotion - ", entry);
-    }
-
-    // Clean up if dropping the event.
-    if (*dropReason != DROP_REASON_NOT_DROPPED) {
-        setInjectionResultLocked(entry, *dropReason == DROP_REASON_POLICY
-                ? INPUT_EVENT_INJECTION_SUCCEEDED : INPUT_EVENT_INJECTION_FAILED);
-        return true;
-    }
-
-    bool isPointerEvent = entry->source & AINPUT_SOURCE_CLASS_POINTER;
-
-    // Identify targets.
-    Vector<InputTarget> inputTargets;
-
-    bool conflictingPointerActions = false;
-    int32_t injectionResult;
-    if (isPointerEvent) {
-        // Pointer event.  (eg. touchscreen)
-        injectionResult = findTouchedWindowTargetsLocked(currentTime,
-                entry, inputTargets, nextWakeupTime, &conflictingPointerActions);
-    } else {
-        // Non touch event.  (eg. trackball)
-        injectionResult = findFocusedWindowTargetsLocked(currentTime,
-                entry, inputTargets, nextWakeupTime);
-    }
-    if (injectionResult == INPUT_EVENT_INJECTION_PENDING) {
-        return false;
-    }
-
-    setInjectionResultLocked(entry, injectionResult);
-    if (injectionResult != INPUT_EVENT_INJECTION_SUCCEEDED) {
-        return true;
-    }
-
-    // TODO: support sending secondary display events to input monitors
-    if (isMainDisplay(entry->displayId)) {
-        addMonitoringTargetsLocked(inputTargets);
-    }
-
-    // Dispatch the motion.
-    if (conflictingPointerActions) {
-        CancelationOptions options(CancelationOptions::CANCEL_POINTER_EVENTS,
-                "conflicting pointer actions");
-        synthesizeCancelationEventsForAllConnectionsLocked(options);
-    }
-    dispatchEventLocked(currentTime, entry, inputTargets);
-    return true;
-}
-
-
-void InputDispatcher::logOutboundMotionDetailsLocked(const char* prefix, const MotionEntry* entry) {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-    ALOGD("%seventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, "
-            "action=0x%x, flags=0x%x, "
-            "metaState=0x%x, buttonState=0x%x, "
-            "edgeFlags=0x%x, xPrecision=%f, yPrecision=%f, downTime=%lld",
-            prefix,
-            entry->eventTime, entry->deviceId, entry->source, entry->policyFlags,
-            entry->action, entry->flags,
-            entry->metaState, entry->buttonState,
-            entry->edgeFlags, entry->xPrecision, entry->yPrecision,
-            entry->downTime);
-
-    for (uint32_t i = 0; i < entry->pointerCount; i++) {
-        ALOGD("  Pointer %d: id=%d, toolType=%d, "
-                "x=%f, y=%f, pressure=%f, size=%f, "
-                "touchMajor=%f, touchMinor=%f, toolMajor=%f, toolMinor=%f, "
-                "orientation=%f",
-                i, entry->pointerProperties[i].id,
-                entry->pointerProperties[i].toolType,
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
-                entry->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION));
-    }
-#endif
-}
-
-void InputDispatcher::dispatchEventLocked(nsecs_t currentTime,
-        EventEntry* eventEntry, const Vector<InputTarget>& inputTargets) {
-#if DEBUG_DISPATCH_CYCLE
-    ALOGD("dispatchEventToCurrentInputTargets");
-#endif
-
-    ALOG_ASSERT(eventEntry->dispatchInProgress); // should already have been set to true
-
-    pokeUserActivityLocked(eventEntry);
-
-    for (size_t i = 0; i < inputTargets.size(); i++) {
-        const InputTarget& inputTarget = inputTargets.itemAt(i);
-
-        ssize_t connectionIndex = getConnectionIndexLocked(inputTarget.inputChannel);
-        if (connectionIndex >= 0) {
-            sp<Connection> connection = mConnectionsByFd.valueAt(connectionIndex);
-            prepareDispatchCycleLocked(currentTime, connection, eventEntry, &inputTarget);
-        } else {
-#if DEBUG_FOCUS
-            ALOGD("Dropping event delivery to target with channel '%s' because it "
-                    "is no longer registered with the input dispatcher.",
-                    inputTarget.inputChannel->getName().string());
-#endif
-        }
-    }
-}
-
-int32_t InputDispatcher::handleTargetsNotReadyLocked(nsecs_t currentTime,
-        const EventEntry* entry,
-        const sp<InputApplicationHandle>& applicationHandle,
-        const sp<InputWindowHandle>& windowHandle,
-        nsecs_t* nextWakeupTime, const char* reason) {
-    if (applicationHandle == NULL && windowHandle == NULL) {
-        if (mInputTargetWaitCause != INPUT_TARGET_WAIT_CAUSE_SYSTEM_NOT_READY) {
-#if DEBUG_FOCUS
-            ALOGD("Waiting for system to become ready for input.  Reason: %s", reason);
-#endif
-            mInputTargetWaitCause = INPUT_TARGET_WAIT_CAUSE_SYSTEM_NOT_READY;
-            mInputTargetWaitStartTime = currentTime;
-            mInputTargetWaitTimeoutTime = LONG_LONG_MAX;
-            mInputTargetWaitTimeoutExpired = false;
-            mInputTargetWaitApplicationHandle.clear();
-        }
-    } else {
-        if (mInputTargetWaitCause != INPUT_TARGET_WAIT_CAUSE_APPLICATION_NOT_READY) {
-#if DEBUG_FOCUS
-            ALOGD("Waiting for application to become ready for input: %s.  Reason: %s",
-                    getApplicationWindowLabelLocked(applicationHandle, windowHandle).string(),
-                    reason);
-#endif
-            nsecs_t timeout;
-            if (windowHandle != NULL) {
-                timeout = windowHandle->getDispatchingTimeout(DEFAULT_INPUT_DISPATCHING_TIMEOUT);
-            } else if (applicationHandle != NULL) {
-                timeout = applicationHandle->getDispatchingTimeout(
-                        DEFAULT_INPUT_DISPATCHING_TIMEOUT);
-            } else {
-                timeout = DEFAULT_INPUT_DISPATCHING_TIMEOUT;
-            }
-
-            mInputTargetWaitCause = INPUT_TARGET_WAIT_CAUSE_APPLICATION_NOT_READY;
-            mInputTargetWaitStartTime = currentTime;
-            mInputTargetWaitTimeoutTime = currentTime + timeout;
-            mInputTargetWaitTimeoutExpired = false;
-            mInputTargetWaitApplicationHandle.clear();
-
-            if (windowHandle != NULL) {
-                mInputTargetWaitApplicationHandle = windowHandle->inputApplicationHandle;
-            }
-            if (mInputTargetWaitApplicationHandle == NULL && applicationHandle != NULL) {
-                mInputTargetWaitApplicationHandle = applicationHandle;
-            }
-        }
-    }
-
-    if (mInputTargetWaitTimeoutExpired) {
-        return INPUT_EVENT_INJECTION_TIMED_OUT;
-    }
-
-    if (currentTime >= mInputTargetWaitTimeoutTime) {
-        onANRLocked(currentTime, applicationHandle, windowHandle,
-                entry->eventTime, mInputTargetWaitStartTime, reason);
-
-        // Force poll loop to wake up immediately on next iteration once we get the
-        // ANR response back from the policy.
-        *nextWakeupTime = LONG_LONG_MIN;
-        return INPUT_EVENT_INJECTION_PENDING;
-    } else {
-        // Force poll loop to wake up when timeout is due.
-        if (mInputTargetWaitTimeoutTime < *nextWakeupTime) {
-            *nextWakeupTime = mInputTargetWaitTimeoutTime;
-        }
-        return INPUT_EVENT_INJECTION_PENDING;
-    }
-}
-
-void InputDispatcher::resumeAfterTargetsNotReadyTimeoutLocked(nsecs_t newTimeout,
-        const sp<InputChannel>& inputChannel) {
-    if (newTimeout > 0) {
-        // Extend the timeout.
-        mInputTargetWaitTimeoutTime = now() + newTimeout;
-    } else {
-        // Give up.
-        mInputTargetWaitTimeoutExpired = true;
-
-        // Input state will not be realistic.  Mark it out of sync.
-        if (inputChannel.get()) {
-            ssize_t connectionIndex = getConnectionIndexLocked(inputChannel);
-            if (connectionIndex >= 0) {
-                sp<Connection> connection = mConnectionsByFd.valueAt(connectionIndex);
-                sp<InputWindowHandle> windowHandle = connection->inputWindowHandle;
-
-                if (windowHandle != NULL) {
-                    const InputWindowInfo* info = windowHandle->getInfo();
-                    if (info) {
-                        ssize_t stateIndex = mTouchStatesByDisplay.indexOfKey(info->displayId);
-                        if (stateIndex >= 0) {
-                            mTouchStatesByDisplay.editValueAt(stateIndex).removeWindow(
-                                    windowHandle);
-                        }
-                    }
-                }
-
-                if (connection->status == Connection::STATUS_NORMAL) {
-                    CancelationOptions options(CancelationOptions::CANCEL_ALL_EVENTS,
-                            "application not responding");
-                    synthesizeCancelationEventsForConnectionLocked(connection, options);
-                }
-            }
-        }
-    }
-}
-
-nsecs_t InputDispatcher::getTimeSpentWaitingForApplicationLocked(
-        nsecs_t currentTime) {
-    if (mInputTargetWaitCause == INPUT_TARGET_WAIT_CAUSE_APPLICATION_NOT_READY) {
-        return currentTime - mInputTargetWaitStartTime;
-    }
-    return 0;
-}
-
-void InputDispatcher::resetANRTimeoutsLocked() {
-#if DEBUG_FOCUS
-        ALOGD("Resetting ANR timeouts.");
-#endif
-
-    // Reset input target wait timeout.
-    mInputTargetWaitCause = INPUT_TARGET_WAIT_CAUSE_NONE;
-    mInputTargetWaitApplicationHandle.clear();
-}
-
-int32_t InputDispatcher::findFocusedWindowTargetsLocked(nsecs_t currentTime,
-        const EventEntry* entry, Vector<InputTarget>& inputTargets, nsecs_t* nextWakeupTime) {
-    int32_t injectionResult;
-
-    // If there is no currently focused window and no focused application
-    // then drop the event.
-    if (mFocusedWindowHandle == NULL) {
-        if (mFocusedApplicationHandle != NULL) {
-            injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
-                    mFocusedApplicationHandle, NULL, nextWakeupTime,
-                    "Waiting because no window has focus but there is a "
-                    "focused application that may eventually add a window "
-                    "when it finishes starting up.");
-            goto Unresponsive;
-        }
-
-        ALOGI("Dropping event because there is no focused window or focused application.");
-        injectionResult = INPUT_EVENT_INJECTION_FAILED;
-        goto Failed;
-    }
-
-    // Check permissions.
-    if (! checkInjectionPermission(mFocusedWindowHandle, entry->injectionState)) {
-        injectionResult = INPUT_EVENT_INJECTION_PERMISSION_DENIED;
-        goto Failed;
-    }
-
-    // If the currently focused window is paused then keep waiting.
-    if (mFocusedWindowHandle->getInfo()->paused) {
-        injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
-                mFocusedApplicationHandle, mFocusedWindowHandle, nextWakeupTime,
-                "Waiting because the focused window is paused.");
-        goto Unresponsive;
-    }
-
-    // If the currently focused window is still working on previous events then keep waiting.
-    if (!isWindowReadyForMoreInputLocked(currentTime, mFocusedWindowHandle, entry)) {
-        injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
-                mFocusedApplicationHandle, mFocusedWindowHandle, nextWakeupTime,
-                "Waiting because the focused window has not finished "
-                "processing the input events that were previously delivered to it.");
-        goto Unresponsive;
-    }
-
-    // Success!  Output targets.
-    injectionResult = INPUT_EVENT_INJECTION_SUCCEEDED;
-    addWindowTargetLocked(mFocusedWindowHandle,
-            InputTarget::FLAG_FOREGROUND | InputTarget::FLAG_DISPATCH_AS_IS, BitSet32(0),
-            inputTargets);
-
-    // Done.
-Failed:
-Unresponsive:
-    nsecs_t timeSpentWaitingForApplication = getTimeSpentWaitingForApplicationLocked(currentTime);
-    updateDispatchStatisticsLocked(currentTime, entry,
-            injectionResult, timeSpentWaitingForApplication);
-#if DEBUG_FOCUS
-    ALOGD("findFocusedWindow finished: injectionResult=%d, "
-            "timeSpentWaitingForApplication=%0.1fms",
-            injectionResult, timeSpentWaitingForApplication / 1000000.0);
-#endif
-    return injectionResult;
-}
-
-int32_t InputDispatcher::findTouchedWindowTargetsLocked(nsecs_t currentTime,
-        const MotionEntry* entry, Vector<InputTarget>& inputTargets, nsecs_t* nextWakeupTime,
-        bool* outConflictingPointerActions) {
-    enum InjectionPermission {
-        INJECTION_PERMISSION_UNKNOWN,
-        INJECTION_PERMISSION_GRANTED,
-        INJECTION_PERMISSION_DENIED
-    };
-
-    nsecs_t startTime = now();
-
-    // For security reasons, we defer updating the touch state until we are sure that
-    // event injection will be allowed.
-    int32_t displayId = entry->displayId;
-    int32_t action = entry->action;
-    int32_t maskedAction = action & AMOTION_EVENT_ACTION_MASK;
-
-    // Update the touch state as needed based on the properties of the touch event.
-    int32_t injectionResult = INPUT_EVENT_INJECTION_PENDING;
-    InjectionPermission injectionPermission = INJECTION_PERMISSION_UNKNOWN;
-    sp<InputWindowHandle> newHoverWindowHandle;
-
-    // Copy current touch state into mTempTouchState.
-    // This state is always reset at the end of this function, so if we don't find state
-    // for the specified display then our initial state will be empty.
-    const TouchState* oldState = NULL;
-    ssize_t oldStateIndex = mTouchStatesByDisplay.indexOfKey(displayId);
-    if (oldStateIndex >= 0) {
-        oldState = &mTouchStatesByDisplay.valueAt(oldStateIndex);
-        mTempTouchState.copyFrom(*oldState);
-    }
-
-    bool isSplit = mTempTouchState.split;
-    bool switchedDevice = mTempTouchState.deviceId >= 0 && mTempTouchState.displayId >= 0
-            && (mTempTouchState.deviceId != entry->deviceId
-                    || mTempTouchState.source != entry->source
-                    || mTempTouchState.displayId != displayId);
-    bool isHoverAction = (maskedAction == AMOTION_EVENT_ACTION_HOVER_MOVE
-            || maskedAction == AMOTION_EVENT_ACTION_HOVER_ENTER
-            || maskedAction == AMOTION_EVENT_ACTION_HOVER_EXIT);
-    bool newGesture = (maskedAction == AMOTION_EVENT_ACTION_DOWN
-            || maskedAction == AMOTION_EVENT_ACTION_SCROLL
-            || isHoverAction);
-    bool wrongDevice = false;
-    if (newGesture) {
-        bool down = maskedAction == AMOTION_EVENT_ACTION_DOWN;
-        if (switchedDevice && mTempTouchState.down && !down) {
-#if DEBUG_FOCUS
-            ALOGD("Dropping event because a pointer for a different device is already down.");
-#endif
-            injectionResult = INPUT_EVENT_INJECTION_FAILED;
-            switchedDevice = false;
-            wrongDevice = true;
-            goto Failed;
-        }
-        mTempTouchState.reset();
-        mTempTouchState.down = down;
-        mTempTouchState.deviceId = entry->deviceId;
-        mTempTouchState.source = entry->source;
-        mTempTouchState.displayId = displayId;
-        isSplit = false;
-    }
-
-    if (newGesture || (isSplit && maskedAction == AMOTION_EVENT_ACTION_POINTER_DOWN)) {
-        /* Case 1: New splittable pointer going down, or need target for hover or scroll. */
-
-        int32_t pointerIndex = getMotionEventActionPointerIndex(action);
-        int32_t x = int32_t(entry->pointerCoords[pointerIndex].
-                getAxisValue(AMOTION_EVENT_AXIS_X));
-        int32_t y = int32_t(entry->pointerCoords[pointerIndex].
-                getAxisValue(AMOTION_EVENT_AXIS_Y));
-        sp<InputWindowHandle> newTouchedWindowHandle;
-        sp<InputWindowHandle> topErrorWindowHandle;
-        bool isTouchModal = false;
-
-        // Traverse windows from front to back to find touched window and outside targets.
-        size_t numWindows = mWindowHandles.size();
-        for (size_t i = 0; i < numWindows; i++) {
-            sp<InputWindowHandle> windowHandle = mWindowHandles.itemAt(i);
-            const InputWindowInfo* windowInfo = windowHandle->getInfo();
-            if (windowInfo->displayId != displayId) {
-                continue; // wrong display
-            }
-
-            int32_t privateFlags = windowInfo->layoutParamsPrivateFlags;
-            if (privateFlags & InputWindowInfo::PRIVATE_FLAG_SYSTEM_ERROR) {
-                if (topErrorWindowHandle == NULL) {
-                    topErrorWindowHandle = windowHandle;
-                }
-            }
-
-            int32_t flags = windowInfo->layoutParamsFlags;
-            if (windowInfo->visible) {
-                if (! (flags & InputWindowInfo::FLAG_NOT_TOUCHABLE)) {
-                    isTouchModal = (flags & (InputWindowInfo::FLAG_NOT_FOCUSABLE
-                            | InputWindowInfo::FLAG_NOT_TOUCH_MODAL)) == 0;
-                    if (isTouchModal || windowInfo->touchableRegionContainsPoint(x, y)) {
-                        newTouchedWindowHandle = windowHandle;
-                        break; // found touched window, exit window loop
-                    }
-                }
-
-                if (maskedAction == AMOTION_EVENT_ACTION_DOWN
-                        && (flags & InputWindowInfo::FLAG_WATCH_OUTSIDE_TOUCH)) {
-                    int32_t outsideTargetFlags = InputTarget::FLAG_DISPATCH_AS_OUTSIDE;
-                    if (isWindowObscuredAtPointLocked(windowHandle, x, y)) {
-                        outsideTargetFlags |= InputTarget::FLAG_WINDOW_IS_OBSCURED;
-                    }
-
-                    mTempTouchState.addOrUpdateWindow(
-                            windowHandle, outsideTargetFlags, BitSet32(0));
-                }
-            }
-        }
-
-        // If there is an error window but it is not taking focus (typically because
-        // it is invisible) then wait for it.  Any other focused window may in
-        // fact be in ANR state.
-        if (topErrorWindowHandle != NULL && newTouchedWindowHandle != topErrorWindowHandle) {
-            injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
-                    NULL, NULL, nextWakeupTime,
-                    "Waiting because a system error window is about to be displayed.");
-            injectionPermission = INJECTION_PERMISSION_UNKNOWN;
-            goto Unresponsive;
-        }
-
-        // Figure out whether splitting will be allowed for this window.
-        if (newTouchedWindowHandle != NULL
-                && newTouchedWindowHandle->getInfo()->supportsSplitTouch()) {
-            // New window supports splitting.
-            isSplit = true;
-        } else if (isSplit) {
-            // New window does not support splitting but we have already split events.
-            // Ignore the new window.
-            newTouchedWindowHandle = NULL;
-        }
-
-        // Handle the case where we did not find a window.
-        if (newTouchedWindowHandle == NULL) {
-            // Try to assign the pointer to the first foreground window we find, if there is one.
-            newTouchedWindowHandle = mTempTouchState.getFirstForegroundWindowHandle();
-            if (newTouchedWindowHandle == NULL) {
-                ALOGI("Dropping event because there is no touchable window at (%d, %d).", x, y);
-                injectionResult = INPUT_EVENT_INJECTION_FAILED;
-                goto Failed;
-            }
-        }
-
-        // Set target flags.
-        int32_t targetFlags = InputTarget::FLAG_FOREGROUND | InputTarget::FLAG_DISPATCH_AS_IS;
-        if (isSplit) {
-            targetFlags |= InputTarget::FLAG_SPLIT;
-        }
-        if (isWindowObscuredAtPointLocked(newTouchedWindowHandle, x, y)) {
-            targetFlags |= InputTarget::FLAG_WINDOW_IS_OBSCURED;
-        }
-
-        // Update hover state.
-        if (isHoverAction) {
-            newHoverWindowHandle = newTouchedWindowHandle;
-        } else if (maskedAction == AMOTION_EVENT_ACTION_SCROLL) {
-            newHoverWindowHandle = mLastHoverWindowHandle;
-        }
-
-        // Update the temporary touch state.
-        BitSet32 pointerIds;
-        if (isSplit) {
-            uint32_t pointerId = entry->pointerProperties[pointerIndex].id;
-            pointerIds.markBit(pointerId);
-        }
-        mTempTouchState.addOrUpdateWindow(newTouchedWindowHandle, targetFlags, pointerIds);
-    } else {
-        /* Case 2: Pointer move, up, cancel or non-splittable pointer down. */
-
-        // If the pointer is not currently down, then ignore the event.
-        if (! mTempTouchState.down) {
-#if DEBUG_FOCUS
-            ALOGD("Dropping event because the pointer is not down or we previously "
-                    "dropped the pointer down event.");
-#endif
-            injectionResult = INPUT_EVENT_INJECTION_FAILED;
-            goto Failed;
-        }
-
-        // Check whether touches should slip outside of the current foreground window.
-        if (maskedAction == AMOTION_EVENT_ACTION_MOVE
-                && entry->pointerCount == 1
-                && mTempTouchState.isSlippery()) {
-            int32_t x = int32_t(entry->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X));
-            int32_t y = int32_t(entry->pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y));
-
-            sp<InputWindowHandle> oldTouchedWindowHandle =
-                    mTempTouchState.getFirstForegroundWindowHandle();
-            sp<InputWindowHandle> newTouchedWindowHandle =
-                    findTouchedWindowAtLocked(displayId, x, y);
-            if (oldTouchedWindowHandle != newTouchedWindowHandle
-                    && newTouchedWindowHandle != NULL) {
-#if DEBUG_FOCUS
-                ALOGD("Touch is slipping out of window %s into window %s.",
-                        oldTouchedWindowHandle->getName().string(),
-                        newTouchedWindowHandle->getName().string());
-#endif
-                // Make a slippery exit from the old window.
-                mTempTouchState.addOrUpdateWindow(oldTouchedWindowHandle,
-                        InputTarget::FLAG_DISPATCH_AS_SLIPPERY_EXIT, BitSet32(0));
-
-                // Make a slippery entrance into the new window.
-                if (newTouchedWindowHandle->getInfo()->supportsSplitTouch()) {
-                    isSplit = true;
-                }
-
-                int32_t targetFlags = InputTarget::FLAG_FOREGROUND
-                        | InputTarget::FLAG_DISPATCH_AS_SLIPPERY_ENTER;
-                if (isSplit) {
-                    targetFlags |= InputTarget::FLAG_SPLIT;
-                }
-                if (isWindowObscuredAtPointLocked(newTouchedWindowHandle, x, y)) {
-                    targetFlags |= InputTarget::FLAG_WINDOW_IS_OBSCURED;
-                }
-
-                BitSet32 pointerIds;
-                if (isSplit) {
-                    pointerIds.markBit(entry->pointerProperties[0].id);
-                }
-                mTempTouchState.addOrUpdateWindow(newTouchedWindowHandle, targetFlags, pointerIds);
-            }
-        }
-    }
-
-    if (newHoverWindowHandle != mLastHoverWindowHandle) {
-        // Let the previous window know that the hover sequence is over.
-        if (mLastHoverWindowHandle != NULL) {
-#if DEBUG_HOVER
-            ALOGD("Sending hover exit event to window %s.",
-                    mLastHoverWindowHandle->getName().string());
-#endif
-            mTempTouchState.addOrUpdateWindow(mLastHoverWindowHandle,
-                    InputTarget::FLAG_DISPATCH_AS_HOVER_EXIT, BitSet32(0));
-        }
-
-        // Let the new window know that the hover sequence is starting.
-        if (newHoverWindowHandle != NULL) {
-#if DEBUG_HOVER
-            ALOGD("Sending hover enter event to window %s.",
-                    newHoverWindowHandle->getName().string());
-#endif
-            mTempTouchState.addOrUpdateWindow(newHoverWindowHandle,
-                    InputTarget::FLAG_DISPATCH_AS_HOVER_ENTER, BitSet32(0));
-        }
-    }
-
-    // Check permission to inject into all touched foreground windows and ensure there
-    // is at least one touched foreground window.
-    {
-        bool haveForegroundWindow = false;
-        for (size_t i = 0; i < mTempTouchState.windows.size(); i++) {
-            const TouchedWindow& touchedWindow = mTempTouchState.windows[i];
-            if (touchedWindow.targetFlags & InputTarget::FLAG_FOREGROUND) {
-                haveForegroundWindow = true;
-                if (! checkInjectionPermission(touchedWindow.windowHandle,
-                        entry->injectionState)) {
-                    injectionResult = INPUT_EVENT_INJECTION_PERMISSION_DENIED;
-                    injectionPermission = INJECTION_PERMISSION_DENIED;
-                    goto Failed;
-                }
-            }
-        }
-        if (! haveForegroundWindow) {
-#if DEBUG_FOCUS
-            ALOGD("Dropping event because there is no touched foreground window to receive it.");
-#endif
-            injectionResult = INPUT_EVENT_INJECTION_FAILED;
-            goto Failed;
-        }
-
-        // Permission granted to injection into all touched foreground windows.
-        injectionPermission = INJECTION_PERMISSION_GRANTED;
-    }
-
-    // Check whether windows listening for outside touches are owned by the same UID. If it is
-    // set the policy flag that we will not reveal coordinate information to this window.
-    if (maskedAction == AMOTION_EVENT_ACTION_DOWN) {
-        sp<InputWindowHandle> foregroundWindowHandle =
-                mTempTouchState.getFirstForegroundWindowHandle();
-        const int32_t foregroundWindowUid = foregroundWindowHandle->getInfo()->ownerUid;
-        for (size_t i = 0; i < mTempTouchState.windows.size(); i++) {
-            const TouchedWindow& touchedWindow = mTempTouchState.windows[i];
-            if (touchedWindow.targetFlags & InputTarget::FLAG_DISPATCH_AS_OUTSIDE) {
-                sp<InputWindowHandle> inputWindowHandle = touchedWindow.windowHandle;
-                if (inputWindowHandle->getInfo()->ownerUid != foregroundWindowUid) {
-                    mTempTouchState.addOrUpdateWindow(inputWindowHandle,
-                            InputTarget::FLAG_ZERO_COORDS, BitSet32(0));
-                }
-            }
-        }
-    }
-
-    // Ensure all touched foreground windows are ready for new input.
-    for (size_t i = 0; i < mTempTouchState.windows.size(); i++) {
-        const TouchedWindow& touchedWindow = mTempTouchState.windows[i];
-        if (touchedWindow.targetFlags & InputTarget::FLAG_FOREGROUND) {
-            // If the touched window is paused then keep waiting.
-            if (touchedWindow.windowHandle->getInfo()->paused) {
-                injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
-                        NULL, touchedWindow.windowHandle, nextWakeupTime,
-                        "Waiting because the touched window is paused.");
-                goto Unresponsive;
-            }
-
-            // If the touched window is still working on previous events then keep waiting.
-            if (!isWindowReadyForMoreInputLocked(currentTime, touchedWindow.windowHandle, entry)) {
-                injectionResult = handleTargetsNotReadyLocked(currentTime, entry,
-                        NULL, touchedWindow.windowHandle, nextWakeupTime,
-                        "Waiting because the touched window has not finished "
-                        "processing the input events that were previously delivered to it.");
-                goto Unresponsive;
-            }
-        }
-    }
-
-    // If this is the first pointer going down and the touched window has a wallpaper
-    // then also add the touched wallpaper windows so they are locked in for the duration
-    // of the touch gesture.
-    // We do not collect wallpapers during HOVER_MOVE or SCROLL because the wallpaper
-    // engine only supports touch events.  We would need to add a mechanism similar
-    // to View.onGenericMotionEvent to enable wallpapers to handle these events.
-    if (maskedAction == AMOTION_EVENT_ACTION_DOWN) {
-        sp<InputWindowHandle> foregroundWindowHandle =
-                mTempTouchState.getFirstForegroundWindowHandle();
-        if (foregroundWindowHandle->getInfo()->hasWallpaper) {
-            for (size_t i = 0; i < mWindowHandles.size(); i++) {
-                sp<InputWindowHandle> windowHandle = mWindowHandles.itemAt(i);
-                const InputWindowInfo* info = windowHandle->getInfo();
-                if (info->displayId == displayId
-                        && windowHandle->getInfo()->layoutParamsType
-                                == InputWindowInfo::TYPE_WALLPAPER) {
-                    mTempTouchState.addOrUpdateWindow(windowHandle,
-                            InputTarget::FLAG_WINDOW_IS_OBSCURED
-                                    | InputTarget::FLAG_DISPATCH_AS_IS,
-                            BitSet32(0));
-                }
-            }
-        }
-    }
-
-    // Success!  Output targets.
-    injectionResult = INPUT_EVENT_INJECTION_SUCCEEDED;
-
-    for (size_t i = 0; i < mTempTouchState.windows.size(); i++) {
-        const TouchedWindow& touchedWindow = mTempTouchState.windows.itemAt(i);
-        addWindowTargetLocked(touchedWindow.windowHandle, touchedWindow.targetFlags,
-                touchedWindow.pointerIds, inputTargets);
-    }
-
-    // Drop the outside or hover touch windows since we will not care about them
-    // in the next iteration.
-    mTempTouchState.filterNonAsIsTouchWindows();
-
-Failed:
-    // Check injection permission once and for all.
-    if (injectionPermission == INJECTION_PERMISSION_UNKNOWN) {
-        if (checkInjectionPermission(NULL, entry->injectionState)) {
-            injectionPermission = INJECTION_PERMISSION_GRANTED;
-        } else {
-            injectionPermission = INJECTION_PERMISSION_DENIED;
-        }
-    }
-
-    // Update final pieces of touch state if the injector had permission.
-    if (injectionPermission == INJECTION_PERMISSION_GRANTED) {
-        if (!wrongDevice) {
-            if (switchedDevice) {
-#if DEBUG_FOCUS
-                ALOGD("Conflicting pointer actions: Switched to a different device.");
-#endif
-                *outConflictingPointerActions = true;
-            }
-
-            if (isHoverAction) {
-                // Started hovering, therefore no longer down.
-                if (oldState && oldState->down) {
-#if DEBUG_FOCUS
-                    ALOGD("Conflicting pointer actions: Hover received while pointer was down.");
-#endif
-                    *outConflictingPointerActions = true;
-                }
-                mTempTouchState.reset();
-                if (maskedAction == AMOTION_EVENT_ACTION_HOVER_ENTER
-                        || maskedAction == AMOTION_EVENT_ACTION_HOVER_MOVE) {
-                    mTempTouchState.deviceId = entry->deviceId;
-                    mTempTouchState.source = entry->source;
-                    mTempTouchState.displayId = displayId;
-                }
-            } else if (maskedAction == AMOTION_EVENT_ACTION_UP
-                    || maskedAction == AMOTION_EVENT_ACTION_CANCEL) {
-                // All pointers up or canceled.
-                mTempTouchState.reset();
-            } else if (maskedAction == AMOTION_EVENT_ACTION_DOWN) {
-                // First pointer went down.
-                if (oldState && oldState->down) {
-#if DEBUG_FOCUS
-                    ALOGD("Conflicting pointer actions: Down received while already down.");
-#endif
-                    *outConflictingPointerActions = true;
-                }
-            } else if (maskedAction == AMOTION_EVENT_ACTION_POINTER_UP) {
-                // One pointer went up.
-                if (isSplit) {
-                    int32_t pointerIndex = getMotionEventActionPointerIndex(action);
-                    uint32_t pointerId = entry->pointerProperties[pointerIndex].id;
-
-                    for (size_t i = 0; i < mTempTouchState.windows.size(); ) {
-                        TouchedWindow& touchedWindow = mTempTouchState.windows.editItemAt(i);
-                        if (touchedWindow.targetFlags & InputTarget::FLAG_SPLIT) {
-                            touchedWindow.pointerIds.clearBit(pointerId);
-                            if (touchedWindow.pointerIds.isEmpty()) {
-                                mTempTouchState.windows.removeAt(i);
-                                continue;
-                            }
-                        }
-                        i += 1;
-                    }
-                }
-            }
-
-            // Save changes unless the action was scroll in which case the temporary touch
-            // state was only valid for this one action.
-            if (maskedAction != AMOTION_EVENT_ACTION_SCROLL) {
-                if (mTempTouchState.displayId >= 0) {
-                    if (oldStateIndex >= 0) {
-                        mTouchStatesByDisplay.editValueAt(oldStateIndex).copyFrom(mTempTouchState);
-                    } else {
-                        mTouchStatesByDisplay.add(displayId, mTempTouchState);
-                    }
-                } else if (oldStateIndex >= 0) {
-                    mTouchStatesByDisplay.removeItemsAt(oldStateIndex);
-                }
-            }
-
-            // Update hover state.
-            mLastHoverWindowHandle = newHoverWindowHandle;
-        }
-    } else {
-#if DEBUG_FOCUS
-        ALOGD("Not updating touch focus because injection was denied.");
-#endif
-    }
-
-Unresponsive:
-    // Reset temporary touch state to ensure we release unnecessary references to input channels.
-    mTempTouchState.reset();
-
-    nsecs_t timeSpentWaitingForApplication = getTimeSpentWaitingForApplicationLocked(currentTime);
-    updateDispatchStatisticsLocked(currentTime, entry,
-            injectionResult, timeSpentWaitingForApplication);
-#if DEBUG_FOCUS
-    ALOGD("findTouchedWindow finished: injectionResult=%d, injectionPermission=%d, "
-            "timeSpentWaitingForApplication=%0.1fms",
-            injectionResult, injectionPermission, timeSpentWaitingForApplication / 1000000.0);
-#endif
-    return injectionResult;
-}
-
-void InputDispatcher::addWindowTargetLocked(const sp<InputWindowHandle>& windowHandle,
-        int32_t targetFlags, BitSet32 pointerIds, Vector<InputTarget>& inputTargets) {
-    inputTargets.push();
-
-    const InputWindowInfo* windowInfo = windowHandle->getInfo();
-    InputTarget& target = inputTargets.editTop();
-    target.inputChannel = windowInfo->inputChannel;
-    target.flags = targetFlags;
-    target.xOffset = - windowInfo->frameLeft;
-    target.yOffset = - windowInfo->frameTop;
-    target.scaleFactor = windowInfo->scaleFactor;
-    target.pointerIds = pointerIds;
-}
-
-void InputDispatcher::addMonitoringTargetsLocked(Vector<InputTarget>& inputTargets) {
-    for (size_t i = 0; i < mMonitoringChannels.size(); i++) {
-        inputTargets.push();
-
-        InputTarget& target = inputTargets.editTop();
-        target.inputChannel = mMonitoringChannels[i];
-        target.flags = InputTarget::FLAG_DISPATCH_AS_IS;
-        target.xOffset = 0;
-        target.yOffset = 0;
-        target.pointerIds.clear();
-        target.scaleFactor = 1.0f;
-    }
-}
-
-bool InputDispatcher::checkInjectionPermission(const sp<InputWindowHandle>& windowHandle,
-        const InjectionState* injectionState) {
-    if (injectionState
-            && (windowHandle == NULL
-                    || windowHandle->getInfo()->ownerUid != injectionState->injectorUid)
-            && !hasInjectionPermission(injectionState->injectorPid, injectionState->injectorUid)) {
-        if (windowHandle != NULL) {
-            ALOGW("Permission denied: injecting event from pid %d uid %d to window %s "
-                    "owned by uid %d",
-                    injectionState->injectorPid, injectionState->injectorUid,
-                    windowHandle->getName().string(),
-                    windowHandle->getInfo()->ownerUid);
-        } else {
-            ALOGW("Permission denied: injecting event from pid %d uid %d",
-                    injectionState->injectorPid, injectionState->injectorUid);
-        }
-        return false;
-    }
-    return true;
-}
-
-bool InputDispatcher::isWindowObscuredAtPointLocked(
-        const sp<InputWindowHandle>& windowHandle, int32_t x, int32_t y) const {
-    int32_t displayId = windowHandle->getInfo()->displayId;
-    size_t numWindows = mWindowHandles.size();
-    for (size_t i = 0; i < numWindows; i++) {
-        sp<InputWindowHandle> otherHandle = mWindowHandles.itemAt(i);
-        if (otherHandle == windowHandle) {
-            break;
-        }
-
-        const InputWindowInfo* otherInfo = otherHandle->getInfo();
-        if (otherInfo->displayId == displayId
-                && otherInfo->visible && !otherInfo->isTrustedOverlay()
-                && otherInfo->frameContainsPoint(x, y)) {
-            return true;
-        }
-    }
-    return false;
-}
-
-bool InputDispatcher::isWindowReadyForMoreInputLocked(nsecs_t currentTime,
-        const sp<InputWindowHandle>& windowHandle, const EventEntry* eventEntry) {
-    ssize_t connectionIndex = getConnectionIndexLocked(windowHandle->getInputChannel());
-    if (connectionIndex >= 0) {
-        sp<Connection> connection = mConnectionsByFd.valueAt(connectionIndex);
-        if (connection->inputPublisherBlocked) {
-            return false;
-        }
-        if (eventEntry->type == EventEntry::TYPE_KEY) {
-            // If the event is a key event, then we must wait for all previous events to
-            // complete before delivering it because previous events may have the
-            // side-effect of transferring focus to a different window and we want to
-            // ensure that the following keys are sent to the new window.
-            //
-            // Suppose the user touches a button in a window then immediately presses "A".
-            // If the button causes a pop-up window to appear then we want to ensure that
-            // the "A" key is delivered to the new pop-up window.  This is because users
-            // often anticipate pending UI changes when typing on a keyboard.
-            // To obtain this behavior, we must serialize key events with respect to all
-            // prior input events.
-            return connection->outboundQueue.isEmpty()
-                    && connection->waitQueue.isEmpty();
-        }
-        // Touch events can always be sent to a window immediately because the user intended
-        // to touch whatever was visible at the time.  Even if focus changes or a new
-        // window appears moments later, the touch event was meant to be delivered to
-        // whatever window happened to be on screen at the time.
-        //
-        // Generic motion events, such as trackball or joystick events are a little trickier.
-        // Like key events, generic motion events are delivered to the focused window.
-        // Unlike key events, generic motion events don't tend to transfer focus to other
-        // windows and it is not important for them to be serialized.  So we prefer to deliver
-        // generic motion events as soon as possible to improve efficiency and reduce lag
-        // through batching.
-        //
-        // The one case where we pause input event delivery is when the wait queue is piling
-        // up with lots of events because the application is not responding.
-        // This condition ensures that ANRs are detected reliably.
-        if (!connection->waitQueue.isEmpty()
-                && currentTime >= connection->waitQueue.head->deliveryTime
-                        + STREAM_AHEAD_EVENT_TIMEOUT) {
-            return false;
-        }
-    }
-    return true;
-}
-
-String8 InputDispatcher::getApplicationWindowLabelLocked(
-        const sp<InputApplicationHandle>& applicationHandle,
-        const sp<InputWindowHandle>& windowHandle) {
-    if (applicationHandle != NULL) {
-        if (windowHandle != NULL) {
-            String8 label(applicationHandle->getName());
-            label.append(" - ");
-            label.append(windowHandle->getName());
-            return label;
-        } else {
-            return applicationHandle->getName();
-        }
-    } else if (windowHandle != NULL) {
-        return windowHandle->getName();
-    } else {
-        return String8("<unknown application or window>");
-    }
-}
-
-void InputDispatcher::pokeUserActivityLocked(const EventEntry* eventEntry) {
-    if (mFocusedWindowHandle != NULL) {
-        const InputWindowInfo* info = mFocusedWindowHandle->getInfo();
-        if (info->inputFeatures & InputWindowInfo::INPUT_FEATURE_DISABLE_USER_ACTIVITY) {
-#if DEBUG_DISPATCH_CYCLE
-            ALOGD("Not poking user activity: disabled by window '%s'.", info->name.string());
-#endif
-            return;
-        }
-    }
-
-    int32_t eventType = USER_ACTIVITY_EVENT_OTHER;
-    switch (eventEntry->type) {
-    case EventEntry::TYPE_MOTION: {
-        const MotionEntry* motionEntry = static_cast<const MotionEntry*>(eventEntry);
-        if (motionEntry->action == AMOTION_EVENT_ACTION_CANCEL) {
-            return;
-        }
-
-        if (MotionEvent::isTouchEvent(motionEntry->source, motionEntry->action)) {
-            eventType = USER_ACTIVITY_EVENT_TOUCH;
-        }
-        break;
-    }
-    case EventEntry::TYPE_KEY: {
-        const KeyEntry* keyEntry = static_cast<const KeyEntry*>(eventEntry);
-        if (keyEntry->flags & AKEY_EVENT_FLAG_CANCELED) {
-            return;
-        }
-        eventType = USER_ACTIVITY_EVENT_BUTTON;
-        break;
-    }
-    }
-
-    CommandEntry* commandEntry = postCommandLocked(
-            & InputDispatcher::doPokeUserActivityLockedInterruptible);
-    commandEntry->eventTime = eventEntry->eventTime;
-    commandEntry->userActivityEventType = eventType;
-}
-
-void InputDispatcher::prepareDispatchCycleLocked(nsecs_t currentTime,
-        const sp<Connection>& connection, EventEntry* eventEntry, const InputTarget* inputTarget) {
-#if DEBUG_DISPATCH_CYCLE
-    ALOGD("channel '%s' ~ prepareDispatchCycle - flags=0x%08x, "
-            "xOffset=%f, yOffset=%f, scaleFactor=%f, "
-            "pointerIds=0x%x",
-            connection->getInputChannelName(), inputTarget->flags,
-            inputTarget->xOffset, inputTarget->yOffset,
-            inputTarget->scaleFactor, inputTarget->pointerIds.value);
-#endif
-
-    // Skip this event if the connection status is not normal.
-    // We don't want to enqueue additional outbound events if the connection is broken.
-    if (connection->status != Connection::STATUS_NORMAL) {
-#if DEBUG_DISPATCH_CYCLE
-        ALOGD("channel '%s' ~ Dropping event because the channel status is %s",
-                connection->getInputChannelName(), connection->getStatusLabel());
-#endif
-        return;
-    }
-
-    // Split a motion event if needed.
-    if (inputTarget->flags & InputTarget::FLAG_SPLIT) {
-        ALOG_ASSERT(eventEntry->type == EventEntry::TYPE_MOTION);
-
-        MotionEntry* originalMotionEntry = static_cast<MotionEntry*>(eventEntry);
-        if (inputTarget->pointerIds.count() != originalMotionEntry->pointerCount) {
-            MotionEntry* splitMotionEntry = splitMotionEvent(
-                    originalMotionEntry, inputTarget->pointerIds);
-            if (!splitMotionEntry) {
-                return; // split event was dropped
-            }
-#if DEBUG_FOCUS
-            ALOGD("channel '%s' ~ Split motion event.",
-                    connection->getInputChannelName());
-            logOutboundMotionDetailsLocked("  ", splitMotionEntry);
-#endif
-            enqueueDispatchEntriesLocked(currentTime, connection,
-                    splitMotionEntry, inputTarget);
-            splitMotionEntry->release();
-            return;
-        }
-    }
-
-    // Not splitting.  Enqueue dispatch entries for the event as is.
-    enqueueDispatchEntriesLocked(currentTime, connection, eventEntry, inputTarget);
-}
-
-void InputDispatcher::enqueueDispatchEntriesLocked(nsecs_t currentTime,
-        const sp<Connection>& connection, EventEntry* eventEntry, const InputTarget* inputTarget) {
-    bool wasEmpty = connection->outboundQueue.isEmpty();
-
-    // Enqueue dispatch entries for the requested modes.
-    enqueueDispatchEntryLocked(connection, eventEntry, inputTarget,
-            InputTarget::FLAG_DISPATCH_AS_HOVER_EXIT);
-    enqueueDispatchEntryLocked(connection, eventEntry, inputTarget,
-            InputTarget::FLAG_DISPATCH_AS_OUTSIDE);
-    enqueueDispatchEntryLocked(connection, eventEntry, inputTarget,
-            InputTarget::FLAG_DISPATCH_AS_HOVER_ENTER);
-    enqueueDispatchEntryLocked(connection, eventEntry, inputTarget,
-            InputTarget::FLAG_DISPATCH_AS_IS);
-    enqueueDispatchEntryLocked(connection, eventEntry, inputTarget,
-            InputTarget::FLAG_DISPATCH_AS_SLIPPERY_EXIT);
-    enqueueDispatchEntryLocked(connection, eventEntry, inputTarget,
-            InputTarget::FLAG_DISPATCH_AS_SLIPPERY_ENTER);
-
-    // If the outbound queue was previously empty, start the dispatch cycle going.
-    if (wasEmpty && !connection->outboundQueue.isEmpty()) {
-        startDispatchCycleLocked(currentTime, connection);
-    }
-}
-
-void InputDispatcher::enqueueDispatchEntryLocked(
-        const sp<Connection>& connection, EventEntry* eventEntry, const InputTarget* inputTarget,
-        int32_t dispatchMode) {
-    int32_t inputTargetFlags = inputTarget->flags;
-    if (!(inputTargetFlags & dispatchMode)) {
-        return;
-    }
-    inputTargetFlags = (inputTargetFlags & ~InputTarget::FLAG_DISPATCH_MASK) | dispatchMode;
-
-    // This is a new event.
-    // Enqueue a new dispatch entry onto the outbound queue for this connection.
-    DispatchEntry* dispatchEntry = new DispatchEntry(eventEntry, // increments ref
-            inputTargetFlags, inputTarget->xOffset, inputTarget->yOffset,
-            inputTarget->scaleFactor);
-
-    // Apply target flags and update the connection's input state.
-    switch (eventEntry->type) {
-    case EventEntry::TYPE_KEY: {
-        KeyEntry* keyEntry = static_cast<KeyEntry*>(eventEntry);
-        dispatchEntry->resolvedAction = keyEntry->action;
-        dispatchEntry->resolvedFlags = keyEntry->flags;
-
-        if (!connection->inputState.trackKey(keyEntry,
-                dispatchEntry->resolvedAction, dispatchEntry->resolvedFlags)) {
-#if DEBUG_DISPATCH_CYCLE
-            ALOGD("channel '%s' ~ enqueueDispatchEntryLocked: skipping inconsistent key event",
-                    connection->getInputChannelName());
-#endif
-            delete dispatchEntry;
-            return; // skip the inconsistent event
-        }
-        break;
-    }
-
-    case EventEntry::TYPE_MOTION: {
-        MotionEntry* motionEntry = static_cast<MotionEntry*>(eventEntry);
-        if (dispatchMode & InputTarget::FLAG_DISPATCH_AS_OUTSIDE) {
-            dispatchEntry->resolvedAction = AMOTION_EVENT_ACTION_OUTSIDE;
-        } else if (dispatchMode & InputTarget::FLAG_DISPATCH_AS_HOVER_EXIT) {
-            dispatchEntry->resolvedAction = AMOTION_EVENT_ACTION_HOVER_EXIT;
-        } else if (dispatchMode & InputTarget::FLAG_DISPATCH_AS_HOVER_ENTER) {
-            dispatchEntry->resolvedAction = AMOTION_EVENT_ACTION_HOVER_ENTER;
-        } else if (dispatchMode & InputTarget::FLAG_DISPATCH_AS_SLIPPERY_EXIT) {
-            dispatchEntry->resolvedAction = AMOTION_EVENT_ACTION_CANCEL;
-        } else if (dispatchMode & InputTarget::FLAG_DISPATCH_AS_SLIPPERY_ENTER) {
-            dispatchEntry->resolvedAction = AMOTION_EVENT_ACTION_DOWN;
-        } else {
-            dispatchEntry->resolvedAction = motionEntry->action;
-        }
-        if (dispatchEntry->resolvedAction == AMOTION_EVENT_ACTION_HOVER_MOVE
-                && !connection->inputState.isHovering(
-                        motionEntry->deviceId, motionEntry->source, motionEntry->displayId)) {
-#if DEBUG_DISPATCH_CYCLE
-        ALOGD("channel '%s' ~ enqueueDispatchEntryLocked: filling in missing hover enter event",
-                connection->getInputChannelName());
-#endif
-            dispatchEntry->resolvedAction = AMOTION_EVENT_ACTION_HOVER_ENTER;
-        }
-
-        dispatchEntry->resolvedFlags = motionEntry->flags;
-        if (dispatchEntry->targetFlags & InputTarget::FLAG_WINDOW_IS_OBSCURED) {
-            dispatchEntry->resolvedFlags |= AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED;
-        }
-
-        if (!connection->inputState.trackMotion(motionEntry,
-                dispatchEntry->resolvedAction, dispatchEntry->resolvedFlags)) {
-#if DEBUG_DISPATCH_CYCLE
-            ALOGD("channel '%s' ~ enqueueDispatchEntryLocked: skipping inconsistent motion event",
-                    connection->getInputChannelName());
-#endif
-            delete dispatchEntry;
-            return; // skip the inconsistent event
-        }
-        break;
-    }
-    }
-
-    // Remember that we are waiting for this dispatch to complete.
-    if (dispatchEntry->hasForegroundTarget()) {
-        incrementPendingForegroundDispatchesLocked(eventEntry);
-    }
-
-    // Enqueue the dispatch entry.
-    connection->outboundQueue.enqueueAtTail(dispatchEntry);
-    traceOutboundQueueLengthLocked(connection);
-}
-
-void InputDispatcher::startDispatchCycleLocked(nsecs_t currentTime,
-        const sp<Connection>& connection) {
-#if DEBUG_DISPATCH_CYCLE
-    ALOGD("channel '%s' ~ startDispatchCycle",
-            connection->getInputChannelName());
-#endif
-
-    while (connection->status == Connection::STATUS_NORMAL
-            && !connection->outboundQueue.isEmpty()) {
-        DispatchEntry* dispatchEntry = connection->outboundQueue.head;
-        dispatchEntry->deliveryTime = currentTime;
-
-        // Publish the event.
-        status_t status;
-        EventEntry* eventEntry = dispatchEntry->eventEntry;
-        switch (eventEntry->type) {
-        case EventEntry::TYPE_KEY: {
-            KeyEntry* keyEntry = static_cast<KeyEntry*>(eventEntry);
-
-            // Publish the key event.
-            status = connection->inputPublisher.publishKeyEvent(dispatchEntry->seq,
-                    keyEntry->deviceId, keyEntry->source,
-                    dispatchEntry->resolvedAction, dispatchEntry->resolvedFlags,
-                    keyEntry->keyCode, keyEntry->scanCode,
-                    keyEntry->metaState, keyEntry->repeatCount, keyEntry->downTime,
-                    keyEntry->eventTime);
-            break;
-        }
-
-        case EventEntry::TYPE_MOTION: {
-            MotionEntry* motionEntry = static_cast<MotionEntry*>(eventEntry);
-
-            PointerCoords scaledCoords[MAX_POINTERS];
-            const PointerCoords* usingCoords = motionEntry->pointerCoords;
-
-            // Set the X and Y offset depending on the input source.
-            float xOffset, yOffset, scaleFactor;
-            if ((motionEntry->source & AINPUT_SOURCE_CLASS_POINTER)
-                    && !(dispatchEntry->targetFlags & InputTarget::FLAG_ZERO_COORDS)) {
-                scaleFactor = dispatchEntry->scaleFactor;
-                xOffset = dispatchEntry->xOffset * scaleFactor;
-                yOffset = dispatchEntry->yOffset * scaleFactor;
-                if (scaleFactor != 1.0f) {
-                    for (size_t i = 0; i < motionEntry->pointerCount; i++) {
-                        scaledCoords[i] = motionEntry->pointerCoords[i];
-                        scaledCoords[i].scale(scaleFactor);
-                    }
-                    usingCoords = scaledCoords;
-                }
-            } else {
-                xOffset = 0.0f;
-                yOffset = 0.0f;
-                scaleFactor = 1.0f;
-
-                // We don't want the dispatch target to know.
-                if (dispatchEntry->targetFlags & InputTarget::FLAG_ZERO_COORDS) {
-                    for (size_t i = 0; i < motionEntry->pointerCount; i++) {
-                        scaledCoords[i].clear();
-                    }
-                    usingCoords = scaledCoords;
-                }
-            }
-
-            // Publish the motion event.
-            status = connection->inputPublisher.publishMotionEvent(dispatchEntry->seq,
-                    motionEntry->deviceId, motionEntry->source,
-                    dispatchEntry->resolvedAction, dispatchEntry->resolvedFlags,
-                    motionEntry->edgeFlags, motionEntry->metaState, motionEntry->buttonState,
-                    xOffset, yOffset,
-                    motionEntry->xPrecision, motionEntry->yPrecision,
-                    motionEntry->downTime, motionEntry->eventTime,
-                    motionEntry->pointerCount, motionEntry->pointerProperties,
-                    usingCoords);
-            break;
-        }
-
-        default:
-            ALOG_ASSERT(false);
-            return;
-        }
-
-        // Check the result.
-        if (status) {
-            if (status == WOULD_BLOCK) {
-                if (connection->waitQueue.isEmpty()) {
-                    ALOGE("channel '%s' ~ Could not publish event because the pipe is full. "
-                            "This is unexpected because the wait queue is empty, so the pipe "
-                            "should be empty and we shouldn't have any problems writing an "
-                            "event to it, status=%d", connection->getInputChannelName(), status);
-                    abortBrokenDispatchCycleLocked(currentTime, connection, true /*notify*/);
-                } else {
-                    // Pipe is full and we are waiting for the app to finish process some events
-                    // before sending more events to it.
-#if DEBUG_DISPATCH_CYCLE
-                    ALOGD("channel '%s' ~ Could not publish event because the pipe is full, "
-                            "waiting for the application to catch up",
-                            connection->getInputChannelName());
-#endif
-                    connection->inputPublisherBlocked = true;
-                }
-            } else {
-                ALOGE("channel '%s' ~ Could not publish event due to an unexpected error, "
-                        "status=%d", connection->getInputChannelName(), status);
-                abortBrokenDispatchCycleLocked(currentTime, connection, true /*notify*/);
-            }
-            return;
-        }
-
-        // Re-enqueue the event on the wait queue.
-        connection->outboundQueue.dequeue(dispatchEntry);
-        traceOutboundQueueLengthLocked(connection);
-        connection->waitQueue.enqueueAtTail(dispatchEntry);
-        traceWaitQueueLengthLocked(connection);
-    }
-}
-
-void InputDispatcher::finishDispatchCycleLocked(nsecs_t currentTime,
-        const sp<Connection>& connection, uint32_t seq, bool handled) {
-#if DEBUG_DISPATCH_CYCLE
-    ALOGD("channel '%s' ~ finishDispatchCycle - seq=%u, handled=%s",
-            connection->getInputChannelName(), seq, toString(handled));
-#endif
-
-    connection->inputPublisherBlocked = false;
-
-    if (connection->status == Connection::STATUS_BROKEN
-            || connection->status == Connection::STATUS_ZOMBIE) {
-        return;
-    }
-
-    // Notify other system components and prepare to start the next dispatch cycle.
-    onDispatchCycleFinishedLocked(currentTime, connection, seq, handled);
-}
-
-void InputDispatcher::abortBrokenDispatchCycleLocked(nsecs_t currentTime,
-        const sp<Connection>& connection, bool notify) {
-#if DEBUG_DISPATCH_CYCLE
-    ALOGD("channel '%s' ~ abortBrokenDispatchCycle - notify=%s",
-            connection->getInputChannelName(), toString(notify));
-#endif
-
-    // Clear the dispatch queues.
-    drainDispatchQueueLocked(&connection->outboundQueue);
-    traceOutboundQueueLengthLocked(connection);
-    drainDispatchQueueLocked(&connection->waitQueue);
-    traceWaitQueueLengthLocked(connection);
-
-    // The connection appears to be unrecoverably broken.
-    // Ignore already broken or zombie connections.
-    if (connection->status == Connection::STATUS_NORMAL) {
-        connection->status = Connection::STATUS_BROKEN;
-
-        if (notify) {
-            // Notify other system components.
-            onDispatchCycleBrokenLocked(currentTime, connection);
-        }
-    }
-}
-
-void InputDispatcher::drainDispatchQueueLocked(Queue<DispatchEntry>* queue) {
-    while (!queue->isEmpty()) {
-        DispatchEntry* dispatchEntry = queue->dequeueAtHead();
-        releaseDispatchEntryLocked(dispatchEntry);
-    }
-}
-
-void InputDispatcher::releaseDispatchEntryLocked(DispatchEntry* dispatchEntry) {
-    if (dispatchEntry->hasForegroundTarget()) {
-        decrementPendingForegroundDispatchesLocked(dispatchEntry->eventEntry);
-    }
-    delete dispatchEntry;
-}
-
-int InputDispatcher::handleReceiveCallback(int fd, int events, void* data) {
-    InputDispatcher* d = static_cast<InputDispatcher*>(data);
-
-    { // acquire lock
-        AutoMutex _l(d->mLock);
-
-        ssize_t connectionIndex = d->mConnectionsByFd.indexOfKey(fd);
-        if (connectionIndex < 0) {
-            ALOGE("Received spurious receive callback for unknown input channel.  "
-                    "fd=%d, events=0x%x", fd, events);
-            return 0; // remove the callback
-        }
-
-        bool notify;
-        sp<Connection> connection = d->mConnectionsByFd.valueAt(connectionIndex);
-        if (!(events & (ALOOPER_EVENT_ERROR | ALOOPER_EVENT_HANGUP))) {
-            if (!(events & ALOOPER_EVENT_INPUT)) {
-                ALOGW("channel '%s' ~ Received spurious callback for unhandled poll event.  "
-                        "events=0x%x", connection->getInputChannelName(), events);
-                return 1;
-            }
-
-            nsecs_t currentTime = now();
-            bool gotOne = false;
-            status_t status;
-            for (;;) {
-                uint32_t seq;
-                bool handled;
-                status = connection->inputPublisher.receiveFinishedSignal(&seq, &handled);
-                if (status) {
-                    break;
-                }
-                d->finishDispatchCycleLocked(currentTime, connection, seq, handled);
-                gotOne = true;
-            }
-            if (gotOne) {
-                d->runCommandsLockedInterruptible();
-                if (status == WOULD_BLOCK) {
-                    return 1;
-                }
-            }
-
-            notify = status != DEAD_OBJECT || !connection->monitor;
-            if (notify) {
-                ALOGE("channel '%s' ~ Failed to receive finished signal.  status=%d",
-                        connection->getInputChannelName(), status);
-            }
-        } else {
-            // Monitor channels are never explicitly unregistered.
-            // We do it automatically when the remote endpoint is closed so don't warn
-            // about them.
-            notify = !connection->monitor;
-            if (notify) {
-                ALOGW("channel '%s' ~ Consumer closed input channel or an error occurred.  "
-                        "events=0x%x", connection->getInputChannelName(), events);
-            }
-        }
-
-        // Unregister the channel.
-        d->unregisterInputChannelLocked(connection->inputChannel, notify);
-        return 0; // remove the callback
-    } // release lock
-}
-
-void InputDispatcher::synthesizeCancelationEventsForAllConnectionsLocked(
-        const CancelationOptions& options) {
-    for (size_t i = 0; i < mConnectionsByFd.size(); i++) {
-        synthesizeCancelationEventsForConnectionLocked(
-                mConnectionsByFd.valueAt(i), options);
-    }
-}
-
-void InputDispatcher::synthesizeCancelationEventsForInputChannelLocked(
-        const sp<InputChannel>& channel, const CancelationOptions& options) {
-    ssize_t index = getConnectionIndexLocked(channel);
-    if (index >= 0) {
-        synthesizeCancelationEventsForConnectionLocked(
-                mConnectionsByFd.valueAt(index), options);
-    }
-}
-
-void InputDispatcher::synthesizeCancelationEventsForConnectionLocked(
-        const sp<Connection>& connection, const CancelationOptions& options) {
-    if (connection->status == Connection::STATUS_BROKEN) {
-        return;
-    }
-
-    nsecs_t currentTime = now();
-
-    Vector<EventEntry*> cancelationEvents;
-    connection->inputState.synthesizeCancelationEvents(currentTime,
-            cancelationEvents, options);
-
-    if (!cancelationEvents.isEmpty()) {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-        ALOGD("channel '%s' ~ Synthesized %d cancelation events to bring channel back in sync "
-                "with reality: %s, mode=%d.",
-                connection->getInputChannelName(), cancelationEvents.size(),
-                options.reason, options.mode);
-#endif
-        for (size_t i = 0; i < cancelationEvents.size(); i++) {
-            EventEntry* cancelationEventEntry = cancelationEvents.itemAt(i);
-            switch (cancelationEventEntry->type) {
-            case EventEntry::TYPE_KEY:
-                logOutboundKeyDetailsLocked("cancel - ",
-                        static_cast<KeyEntry*>(cancelationEventEntry));
-                break;
-            case EventEntry::TYPE_MOTION:
-                logOutboundMotionDetailsLocked("cancel - ",
-                        static_cast<MotionEntry*>(cancelationEventEntry));
-                break;
-            }
-
-            InputTarget target;
-            sp<InputWindowHandle> windowHandle = getWindowHandleLocked(connection->inputChannel);
-            if (windowHandle != NULL) {
-                const InputWindowInfo* windowInfo = windowHandle->getInfo();
-                target.xOffset = -windowInfo->frameLeft;
-                target.yOffset = -windowInfo->frameTop;
-                target.scaleFactor = windowInfo->scaleFactor;
-            } else {
-                target.xOffset = 0;
-                target.yOffset = 0;
-                target.scaleFactor = 1.0f;
-            }
-            target.inputChannel = connection->inputChannel;
-            target.flags = InputTarget::FLAG_DISPATCH_AS_IS;
-
-            enqueueDispatchEntryLocked(connection, cancelationEventEntry, // increments ref
-                    &target, InputTarget::FLAG_DISPATCH_AS_IS);
-
-            cancelationEventEntry->release();
-        }
-
-        startDispatchCycleLocked(currentTime, connection);
-    }
-}
-
-InputDispatcher::MotionEntry*
-InputDispatcher::splitMotionEvent(const MotionEntry* originalMotionEntry, BitSet32 pointerIds) {
-    ALOG_ASSERT(pointerIds.value != 0);
-
-    uint32_t splitPointerIndexMap[MAX_POINTERS];
-    PointerProperties splitPointerProperties[MAX_POINTERS];
-    PointerCoords splitPointerCoords[MAX_POINTERS];
-
-    uint32_t originalPointerCount = originalMotionEntry->pointerCount;
-    uint32_t splitPointerCount = 0;
-
-    for (uint32_t originalPointerIndex = 0; originalPointerIndex < originalPointerCount;
-            originalPointerIndex++) {
-        const PointerProperties& pointerProperties =
-                originalMotionEntry->pointerProperties[originalPointerIndex];
-        uint32_t pointerId = uint32_t(pointerProperties.id);
-        if (pointerIds.hasBit(pointerId)) {
-            splitPointerIndexMap[splitPointerCount] = originalPointerIndex;
-            splitPointerProperties[splitPointerCount].copyFrom(pointerProperties);
-            splitPointerCoords[splitPointerCount].copyFrom(
-                    originalMotionEntry->pointerCoords[originalPointerIndex]);
-            splitPointerCount += 1;
-        }
-    }
-
-    if (splitPointerCount != pointerIds.count()) {
-        // This is bad.  We are missing some of the pointers that we expected to deliver.
-        // Most likely this indicates that we received an ACTION_MOVE events that has
-        // different pointer ids than we expected based on the previous ACTION_DOWN
-        // or ACTION_POINTER_DOWN events that caused us to decide to split the pointers
-        // in this way.
-        ALOGW("Dropping split motion event because the pointer count is %d but "
-                "we expected there to be %d pointers.  This probably means we received "
-                "a broken sequence of pointer ids from the input device.",
-                splitPointerCount, pointerIds.count());
-        return NULL;
-    }
-
-    int32_t action = originalMotionEntry->action;
-    int32_t maskedAction = action & AMOTION_EVENT_ACTION_MASK;
-    if (maskedAction == AMOTION_EVENT_ACTION_POINTER_DOWN
-            || maskedAction == AMOTION_EVENT_ACTION_POINTER_UP) {
-        int32_t originalPointerIndex = getMotionEventActionPointerIndex(action);
-        const PointerProperties& pointerProperties =
-                originalMotionEntry->pointerProperties[originalPointerIndex];
-        uint32_t pointerId = uint32_t(pointerProperties.id);
-        if (pointerIds.hasBit(pointerId)) {
-            if (pointerIds.count() == 1) {
-                // The first/last pointer went down/up.
-                action = maskedAction == AMOTION_EVENT_ACTION_POINTER_DOWN
-                        ? AMOTION_EVENT_ACTION_DOWN : AMOTION_EVENT_ACTION_UP;
-            } else {
-                // A secondary pointer went down/up.
-                uint32_t splitPointerIndex = 0;
-                while (pointerId != uint32_t(splitPointerProperties[splitPointerIndex].id)) {
-                    splitPointerIndex += 1;
-                }
-                action = maskedAction | (splitPointerIndex
-                        << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT);
-            }
-        } else {
-            // An unrelated pointer changed.
-            action = AMOTION_EVENT_ACTION_MOVE;
-        }
-    }
-
-    MotionEntry* splitMotionEntry = new MotionEntry(
-            originalMotionEntry->eventTime,
-            originalMotionEntry->deviceId,
-            originalMotionEntry->source,
-            originalMotionEntry->policyFlags,
-            action,
-            originalMotionEntry->flags,
-            originalMotionEntry->metaState,
-            originalMotionEntry->buttonState,
-            originalMotionEntry->edgeFlags,
-            originalMotionEntry->xPrecision,
-            originalMotionEntry->yPrecision,
-            originalMotionEntry->downTime,
-            originalMotionEntry->displayId,
-            splitPointerCount, splitPointerProperties, splitPointerCoords, 0, 0);
-
-    if (originalMotionEntry->injectionState) {
-        splitMotionEntry->injectionState = originalMotionEntry->injectionState;
-        splitMotionEntry->injectionState->refCount += 1;
-    }
-
-    return splitMotionEntry;
-}
-
-void InputDispatcher::notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) {
-#if DEBUG_INBOUND_EVENT_DETAILS
-    ALOGD("notifyConfigurationChanged - eventTime=%lld", args->eventTime);
-#endif
-
-    bool needWake;
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        ConfigurationChangedEntry* newEntry = new ConfigurationChangedEntry(args->eventTime);
-        needWake = enqueueInboundEventLocked(newEntry);
-    } // release lock
-
-    if (needWake) {
-        mLooper->wake();
-    }
-}
-
-void InputDispatcher::notifyKey(const NotifyKeyArgs* args) {
-#if DEBUG_INBOUND_EVENT_DETAILS
-    ALOGD("notifyKey - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, action=0x%x, "
-            "flags=0x%x, keyCode=0x%x, scanCode=0x%x, metaState=0x%x, downTime=%lld",
-            args->eventTime, args->deviceId, args->source, args->policyFlags,
-            args->action, args->flags, args->keyCode, args->scanCode,
-            args->metaState, args->downTime);
-#endif
-    if (!validateKeyEvent(args->action)) {
-        return;
-    }
-
-    uint32_t policyFlags = args->policyFlags;
-    int32_t flags = args->flags;
-    int32_t metaState = args->metaState;
-    if ((policyFlags & POLICY_FLAG_VIRTUAL) || (flags & AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY)) {
-        policyFlags |= POLICY_FLAG_VIRTUAL;
-        flags |= AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY;
-    }
-    if (policyFlags & POLICY_FLAG_ALT) {
-        metaState |= AMETA_ALT_ON | AMETA_ALT_LEFT_ON;
-    }
-    if (policyFlags & POLICY_FLAG_ALT_GR) {
-        metaState |= AMETA_ALT_ON | AMETA_ALT_RIGHT_ON;
-    }
-    if (policyFlags & POLICY_FLAG_SHIFT) {
-        metaState |= AMETA_SHIFT_ON | AMETA_SHIFT_LEFT_ON;
-    }
-    if (policyFlags & POLICY_FLAG_CAPS_LOCK) {
-        metaState |= AMETA_CAPS_LOCK_ON;
-    }
-    if (policyFlags & POLICY_FLAG_FUNCTION) {
-        metaState |= AMETA_FUNCTION_ON;
-    }
-
-    policyFlags |= POLICY_FLAG_TRUSTED;
-
-    KeyEvent event;
-    event.initialize(args->deviceId, args->source, args->action,
-            flags, args->keyCode, args->scanCode, metaState, 0,
-            args->downTime, args->eventTime);
-
-    mPolicy->interceptKeyBeforeQueueing(&event, /*byref*/ policyFlags);
-
-    bool needWake;
-    { // acquire lock
-        mLock.lock();
-
-        if (shouldSendKeyToInputFilterLocked(args)) {
-            mLock.unlock();
-
-            policyFlags |= POLICY_FLAG_FILTERED;
-            if (!mPolicy->filterInputEvent(&event, policyFlags)) {
-                return; // event was consumed by the filter
-            }
-
-            mLock.lock();
-        }
-
-        int32_t repeatCount = 0;
-        KeyEntry* newEntry = new KeyEntry(args->eventTime,
-                args->deviceId, args->source, policyFlags,
-                args->action, flags, args->keyCode, args->scanCode,
-                metaState, repeatCount, args->downTime);
-
-        needWake = enqueueInboundEventLocked(newEntry);
-        mLock.unlock();
-    } // release lock
-
-    if (needWake) {
-        mLooper->wake();
-    }
-}
-
-bool InputDispatcher::shouldSendKeyToInputFilterLocked(const NotifyKeyArgs* args) {
-    return mInputFilterEnabled;
-}
-
-void InputDispatcher::notifyMotion(const NotifyMotionArgs* args) {
-#if DEBUG_INBOUND_EVENT_DETAILS
-    ALOGD("notifyMotion - eventTime=%lld, deviceId=%d, source=0x%x, policyFlags=0x%x, "
-            "action=0x%x, flags=0x%x, metaState=0x%x, buttonState=0x%x, edgeFlags=0x%x, "
-            "xPrecision=%f, yPrecision=%f, downTime=%lld",
-            args->eventTime, args->deviceId, args->source, args->policyFlags,
-            args->action, args->flags, args->metaState, args->buttonState,
-            args->edgeFlags, args->xPrecision, args->yPrecision, args->downTime);
-    for (uint32_t i = 0; i < args->pointerCount; i++) {
-        ALOGD("  Pointer %d: id=%d, toolType=%d, "
-                "x=%f, y=%f, pressure=%f, size=%f, "
-                "touchMajor=%f, touchMinor=%f, toolMajor=%f, toolMinor=%f, "
-                "orientation=%f",
-                i, args->pointerProperties[i].id,
-                args->pointerProperties[i].toolType,
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_X),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_Y),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_SIZE),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
-                args->pointerCoords[i].getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION));
-    }
-#endif
-    if (!validateMotionEvent(args->action, args->pointerCount, args->pointerProperties)) {
-        return;
-    }
-
-    uint32_t policyFlags = args->policyFlags;
-    policyFlags |= POLICY_FLAG_TRUSTED;
-    mPolicy->interceptMotionBeforeQueueing(args->eventTime, /*byref*/ policyFlags);
-
-    bool needWake;
-    { // acquire lock
-        mLock.lock();
-
-        if (shouldSendMotionToInputFilterLocked(args)) {
-            mLock.unlock();
-
-            MotionEvent event;
-            event.initialize(args->deviceId, args->source, args->action, args->flags,
-                    args->edgeFlags, args->metaState, args->buttonState, 0, 0,
-                    args->xPrecision, args->yPrecision,
-                    args->downTime, args->eventTime,
-                    args->pointerCount, args->pointerProperties, args->pointerCoords);
-
-            policyFlags |= POLICY_FLAG_FILTERED;
-            if (!mPolicy->filterInputEvent(&event, policyFlags)) {
-                return; // event was consumed by the filter
-            }
-
-            mLock.lock();
-        }
-
-        // Just enqueue a new motion event.
-        MotionEntry* newEntry = new MotionEntry(args->eventTime,
-                args->deviceId, args->source, policyFlags,
-                args->action, args->flags, args->metaState, args->buttonState,
-                args->edgeFlags, args->xPrecision, args->yPrecision, args->downTime,
-                args->displayId,
-                args->pointerCount, args->pointerProperties, args->pointerCoords, 0, 0);
-
-        needWake = enqueueInboundEventLocked(newEntry);
-        mLock.unlock();
-    } // release lock
-
-    if (needWake) {
-        mLooper->wake();
-    }
-}
-
-bool InputDispatcher::shouldSendMotionToInputFilterLocked(const NotifyMotionArgs* args) {
-    // TODO: support sending secondary display events to input filter
-    return mInputFilterEnabled && isMainDisplay(args->displayId);
-}
-
-void InputDispatcher::notifySwitch(const NotifySwitchArgs* args) {
-#if DEBUG_INBOUND_EVENT_DETAILS
-    ALOGD("notifySwitch - eventTime=%lld, policyFlags=0x%x, switchValues=0x%08x, switchMask=0x%08x",
-            args->eventTime, args->policyFlags,
-            args->switchValues, args->switchMask);
-#endif
-
-    uint32_t policyFlags = args->policyFlags;
-    policyFlags |= POLICY_FLAG_TRUSTED;
-    mPolicy->notifySwitch(args->eventTime,
-            args->switchValues, args->switchMask, policyFlags);
-}
-
-void InputDispatcher::notifyDeviceReset(const NotifyDeviceResetArgs* args) {
-#if DEBUG_INBOUND_EVENT_DETAILS
-    ALOGD("notifyDeviceReset - eventTime=%lld, deviceId=%d",
-            args->eventTime, args->deviceId);
-#endif
-
-    bool needWake;
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        DeviceResetEntry* newEntry = new DeviceResetEntry(args->eventTime, args->deviceId);
-        needWake = enqueueInboundEventLocked(newEntry);
-    } // release lock
-
-    if (needWake) {
-        mLooper->wake();
-    }
-}
-
-int32_t InputDispatcher::injectInputEvent(const InputEvent* event, int32_t displayId,
-        int32_t injectorPid, int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis,
-        uint32_t policyFlags) {
-#if DEBUG_INBOUND_EVENT_DETAILS
-    ALOGD("injectInputEvent - eventType=%d, injectorPid=%d, injectorUid=%d, "
-            "syncMode=%d, timeoutMillis=%d, policyFlags=0x%08x",
-            event->getType(), injectorPid, injectorUid, syncMode, timeoutMillis, policyFlags);
-#endif
-
-    nsecs_t endTime = now() + milliseconds_to_nanoseconds(timeoutMillis);
-
-    policyFlags |= POLICY_FLAG_INJECTED;
-    if (hasInjectionPermission(injectorPid, injectorUid)) {
-        policyFlags |= POLICY_FLAG_TRUSTED;
-    }
-
-    EventEntry* firstInjectedEntry;
-    EventEntry* lastInjectedEntry;
-    switch (event->getType()) {
-    case AINPUT_EVENT_TYPE_KEY: {
-        const KeyEvent* keyEvent = static_cast<const KeyEvent*>(event);
-        int32_t action = keyEvent->getAction();
-        if (! validateKeyEvent(action)) {
-            return INPUT_EVENT_INJECTION_FAILED;
-        }
-
-        int32_t flags = keyEvent->getFlags();
-        if (flags & AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY) {
-            policyFlags |= POLICY_FLAG_VIRTUAL;
-        }
-
-        if (!(policyFlags & POLICY_FLAG_FILTERED)) {
-            mPolicy->interceptKeyBeforeQueueing(keyEvent, /*byref*/ policyFlags);
-        }
-
-        mLock.lock();
-        firstInjectedEntry = new KeyEntry(keyEvent->getEventTime(),
-                keyEvent->getDeviceId(), keyEvent->getSource(),
-                policyFlags, action, flags,
-                keyEvent->getKeyCode(), keyEvent->getScanCode(), keyEvent->getMetaState(),
-                keyEvent->getRepeatCount(), keyEvent->getDownTime());
-        lastInjectedEntry = firstInjectedEntry;
-        break;
-    }
-
-    case AINPUT_EVENT_TYPE_MOTION: {
-        const MotionEvent* motionEvent = static_cast<const MotionEvent*>(event);
-        int32_t action = motionEvent->getAction();
-        size_t pointerCount = motionEvent->getPointerCount();
-        const PointerProperties* pointerProperties = motionEvent->getPointerProperties();
-        if (! validateMotionEvent(action, pointerCount, pointerProperties)) {
-            return INPUT_EVENT_INJECTION_FAILED;
-        }
-
-        if (!(policyFlags & POLICY_FLAG_FILTERED)) {
-            nsecs_t eventTime = motionEvent->getEventTime();
-            mPolicy->interceptMotionBeforeQueueing(eventTime, /*byref*/ policyFlags);
-        }
-
-        mLock.lock();
-        const nsecs_t* sampleEventTimes = motionEvent->getSampleEventTimes();
-        const PointerCoords* samplePointerCoords = motionEvent->getSamplePointerCoords();
-        firstInjectedEntry = new MotionEntry(*sampleEventTimes,
-                motionEvent->getDeviceId(), motionEvent->getSource(), policyFlags,
-                action, motionEvent->getFlags(),
-                motionEvent->getMetaState(), motionEvent->getButtonState(),
-                motionEvent->getEdgeFlags(),
-                motionEvent->getXPrecision(), motionEvent->getYPrecision(),
-                motionEvent->getDownTime(), displayId,
-                uint32_t(pointerCount), pointerProperties, samplePointerCoords,
-                motionEvent->getXOffset(), motionEvent->getYOffset());
-        lastInjectedEntry = firstInjectedEntry;
-        for (size_t i = motionEvent->getHistorySize(); i > 0; i--) {
-            sampleEventTimes += 1;
-            samplePointerCoords += pointerCount;
-            MotionEntry* nextInjectedEntry = new MotionEntry(*sampleEventTimes,
-                    motionEvent->getDeviceId(), motionEvent->getSource(), policyFlags,
-                    action, motionEvent->getFlags(),
-                    motionEvent->getMetaState(), motionEvent->getButtonState(),
-                    motionEvent->getEdgeFlags(),
-                    motionEvent->getXPrecision(), motionEvent->getYPrecision(),
-                    motionEvent->getDownTime(), displayId,
-                    uint32_t(pointerCount), pointerProperties, samplePointerCoords,
-                    motionEvent->getXOffset(), motionEvent->getYOffset());
-            lastInjectedEntry->next = nextInjectedEntry;
-            lastInjectedEntry = nextInjectedEntry;
-        }
-        break;
-    }
-
-    default:
-        ALOGW("Cannot inject event of type %d", event->getType());
-        return INPUT_EVENT_INJECTION_FAILED;
-    }
-
-    InjectionState* injectionState = new InjectionState(injectorPid, injectorUid);
-    if (syncMode == INPUT_EVENT_INJECTION_SYNC_NONE) {
-        injectionState->injectionIsAsync = true;
-    }
-
-    injectionState->refCount += 1;
-    lastInjectedEntry->injectionState = injectionState;
-
-    bool needWake = false;
-    for (EventEntry* entry = firstInjectedEntry; entry != NULL; ) {
-        EventEntry* nextEntry = entry->next;
-        needWake |= enqueueInboundEventLocked(entry);
-        entry = nextEntry;
-    }
-
-    mLock.unlock();
-
-    if (needWake) {
-        mLooper->wake();
-    }
-
-    int32_t injectionResult;
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        if (syncMode == INPUT_EVENT_INJECTION_SYNC_NONE) {
-            injectionResult = INPUT_EVENT_INJECTION_SUCCEEDED;
-        } else {
-            for (;;) {
-                injectionResult = injectionState->injectionResult;
-                if (injectionResult != INPUT_EVENT_INJECTION_PENDING) {
-                    break;
-                }
-
-                nsecs_t remainingTimeout = endTime - now();
-                if (remainingTimeout <= 0) {
-#if DEBUG_INJECTION
-                    ALOGD("injectInputEvent - Timed out waiting for injection result "
-                            "to become available.");
-#endif
-                    injectionResult = INPUT_EVENT_INJECTION_TIMED_OUT;
-                    break;
-                }
-
-                mInjectionResultAvailableCondition.waitRelative(mLock, remainingTimeout);
-            }
-
-            if (injectionResult == INPUT_EVENT_INJECTION_SUCCEEDED
-                    && syncMode == INPUT_EVENT_INJECTION_SYNC_WAIT_FOR_FINISHED) {
-                while (injectionState->pendingForegroundDispatches != 0) {
-#if DEBUG_INJECTION
-                    ALOGD("injectInputEvent - Waiting for %d pending foreground dispatches.",
-                            injectionState->pendingForegroundDispatches);
-#endif
-                    nsecs_t remainingTimeout = endTime - now();
-                    if (remainingTimeout <= 0) {
-#if DEBUG_INJECTION
-                    ALOGD("injectInputEvent - Timed out waiting for pending foreground "
-                            "dispatches to finish.");
-#endif
-                        injectionResult = INPUT_EVENT_INJECTION_TIMED_OUT;
-                        break;
-                    }
-
-                    mInjectionSyncFinishedCondition.waitRelative(mLock, remainingTimeout);
-                }
-            }
-        }
-
-        injectionState->release();
-    } // release lock
-
-#if DEBUG_INJECTION
-    ALOGD("injectInputEvent - Finished with result %d.  "
-            "injectorPid=%d, injectorUid=%d",
-            injectionResult, injectorPid, injectorUid);
-#endif
-
-    return injectionResult;
-}
-
-bool InputDispatcher::hasInjectionPermission(int32_t injectorPid, int32_t injectorUid) {
-    return injectorUid == 0
-            || mPolicy->checkInjectEventsPermissionNonReentrant(injectorPid, injectorUid);
-}
-
-void InputDispatcher::setInjectionResultLocked(EventEntry* entry, int32_t injectionResult) {
-    InjectionState* injectionState = entry->injectionState;
-    if (injectionState) {
-#if DEBUG_INJECTION
-        ALOGD("Setting input event injection result to %d.  "
-                "injectorPid=%d, injectorUid=%d",
-                 injectionResult, injectionState->injectorPid, injectionState->injectorUid);
-#endif
-
-        if (injectionState->injectionIsAsync
-                && !(entry->policyFlags & POLICY_FLAG_FILTERED)) {
-            // Log the outcome since the injector did not wait for the injection result.
-            switch (injectionResult) {
-            case INPUT_EVENT_INJECTION_SUCCEEDED:
-                ALOGV("Asynchronous input event injection succeeded.");
-                break;
-            case INPUT_EVENT_INJECTION_FAILED:
-                ALOGW("Asynchronous input event injection failed.");
-                break;
-            case INPUT_EVENT_INJECTION_PERMISSION_DENIED:
-                ALOGW("Asynchronous input event injection permission denied.");
-                break;
-            case INPUT_EVENT_INJECTION_TIMED_OUT:
-                ALOGW("Asynchronous input event injection timed out.");
-                break;
-            }
-        }
-
-        injectionState->injectionResult = injectionResult;
-        mInjectionResultAvailableCondition.broadcast();
-    }
-}
-
-void InputDispatcher::incrementPendingForegroundDispatchesLocked(EventEntry* entry) {
-    InjectionState* injectionState = entry->injectionState;
-    if (injectionState) {
-        injectionState->pendingForegroundDispatches += 1;
-    }
-}
-
-void InputDispatcher::decrementPendingForegroundDispatchesLocked(EventEntry* entry) {
-    InjectionState* injectionState = entry->injectionState;
-    if (injectionState) {
-        injectionState->pendingForegroundDispatches -= 1;
-
-        if (injectionState->pendingForegroundDispatches == 0) {
-            mInjectionSyncFinishedCondition.broadcast();
-        }
-    }
-}
-
-sp<InputWindowHandle> InputDispatcher::getWindowHandleLocked(
-        const sp<InputChannel>& inputChannel) const {
-    size_t numWindows = mWindowHandles.size();
-    for (size_t i = 0; i < numWindows; i++) {
-        const sp<InputWindowHandle>& windowHandle = mWindowHandles.itemAt(i);
-        if (windowHandle->getInputChannel() == inputChannel) {
-            return windowHandle;
-        }
-    }
-    return NULL;
-}
-
-bool InputDispatcher::hasWindowHandleLocked(
-        const sp<InputWindowHandle>& windowHandle) const {
-    size_t numWindows = mWindowHandles.size();
-    for (size_t i = 0; i < numWindows; i++) {
-        if (mWindowHandles.itemAt(i) == windowHandle) {
-            return true;
-        }
-    }
-    return false;
-}
-
-void InputDispatcher::setInputWindows(const Vector<sp<InputWindowHandle> >& inputWindowHandles) {
-#if DEBUG_FOCUS
-    ALOGD("setInputWindows");
-#endif
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        Vector<sp<InputWindowHandle> > oldWindowHandles = mWindowHandles;
-        mWindowHandles = inputWindowHandles;
-
-        sp<InputWindowHandle> newFocusedWindowHandle;
-        bool foundHoveredWindow = false;
-        for (size_t i = 0; i < mWindowHandles.size(); i++) {
-            const sp<InputWindowHandle>& windowHandle = mWindowHandles.itemAt(i);
-            if (!windowHandle->updateInfo() || windowHandle->getInputChannel() == NULL) {
-                mWindowHandles.removeAt(i--);
-                continue;
-            }
-            if (windowHandle->getInfo()->hasFocus) {
-                newFocusedWindowHandle = windowHandle;
-            }
-            if (windowHandle == mLastHoverWindowHandle) {
-                foundHoveredWindow = true;
-            }
-        }
-
-        if (!foundHoveredWindow) {
-            mLastHoverWindowHandle = NULL;
-        }
-
-        if (mFocusedWindowHandle != newFocusedWindowHandle) {
-            if (mFocusedWindowHandle != NULL) {
-#if DEBUG_FOCUS
-                ALOGD("Focus left window: %s",
-                        mFocusedWindowHandle->getName().string());
-#endif
-                sp<InputChannel> focusedInputChannel = mFocusedWindowHandle->getInputChannel();
-                if (focusedInputChannel != NULL) {
-                    CancelationOptions options(CancelationOptions::CANCEL_NON_POINTER_EVENTS,
-                            "focus left window");
-                    synthesizeCancelationEventsForInputChannelLocked(
-                            focusedInputChannel, options);
-                }
-            }
-            if (newFocusedWindowHandle != NULL) {
-#if DEBUG_FOCUS
-                ALOGD("Focus entered window: %s",
-                        newFocusedWindowHandle->getName().string());
-#endif
-            }
-            mFocusedWindowHandle = newFocusedWindowHandle;
-        }
-
-        for (size_t d = 0; d < mTouchStatesByDisplay.size(); d++) {
-            TouchState& state = mTouchStatesByDisplay.editValueAt(d);
-            for (size_t i = 0; i < state.windows.size(); i++) {
-                TouchedWindow& touchedWindow = state.windows.editItemAt(i);
-                if (!hasWindowHandleLocked(touchedWindow.windowHandle)) {
-#if DEBUG_FOCUS
-                    ALOGD("Touched window was removed: %s",
-                            touchedWindow.windowHandle->getName().string());
-#endif
-                    sp<InputChannel> touchedInputChannel =
-                            touchedWindow.windowHandle->getInputChannel();
-                    if (touchedInputChannel != NULL) {
-                        CancelationOptions options(CancelationOptions::CANCEL_POINTER_EVENTS,
-                                "touched window was removed");
-                        synthesizeCancelationEventsForInputChannelLocked(
-                                touchedInputChannel, options);
-                    }
-                    state.windows.removeAt(i--);
-                }
-            }
-        }
-
-        // Release information for windows that are no longer present.
-        // This ensures that unused input channels are released promptly.
-        // Otherwise, they might stick around until the window handle is destroyed
-        // which might not happen until the next GC.
-        for (size_t i = 0; i < oldWindowHandles.size(); i++) {
-            const sp<InputWindowHandle>& oldWindowHandle = oldWindowHandles.itemAt(i);
-            if (!hasWindowHandleLocked(oldWindowHandle)) {
-#if DEBUG_FOCUS
-                ALOGD("Window went away: %s", oldWindowHandle->getName().string());
-#endif
-                oldWindowHandle->releaseInfo();
-            }
-        }
-    } // release lock
-
-    // Wake up poll loop since it may need to make new input dispatching choices.
-    mLooper->wake();
-}
-
-void InputDispatcher::setFocusedApplication(
-        const sp<InputApplicationHandle>& inputApplicationHandle) {
-#if DEBUG_FOCUS
-    ALOGD("setFocusedApplication");
-#endif
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        if (inputApplicationHandle != NULL && inputApplicationHandle->updateInfo()) {
-            if (mFocusedApplicationHandle != inputApplicationHandle) {
-                if (mFocusedApplicationHandle != NULL) {
-                    resetANRTimeoutsLocked();
-                    mFocusedApplicationHandle->releaseInfo();
-                }
-                mFocusedApplicationHandle = inputApplicationHandle;
-            }
-        } else if (mFocusedApplicationHandle != NULL) {
-            resetANRTimeoutsLocked();
-            mFocusedApplicationHandle->releaseInfo();
-            mFocusedApplicationHandle.clear();
-        }
-
-#if DEBUG_FOCUS
-        //logDispatchStateLocked();
-#endif
-    } // release lock
-
-    // Wake up poll loop since it may need to make new input dispatching choices.
-    mLooper->wake();
-}
-
-void InputDispatcher::setInputDispatchMode(bool enabled, bool frozen) {
-#if DEBUG_FOCUS
-    ALOGD("setInputDispatchMode: enabled=%d, frozen=%d", enabled, frozen);
-#endif
-
-    bool changed;
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        if (mDispatchEnabled != enabled || mDispatchFrozen != frozen) {
-            if (mDispatchFrozen && !frozen) {
-                resetANRTimeoutsLocked();
-            }
-
-            if (mDispatchEnabled && !enabled) {
-                resetAndDropEverythingLocked("dispatcher is being disabled");
-            }
-
-            mDispatchEnabled = enabled;
-            mDispatchFrozen = frozen;
-            changed = true;
-        } else {
-            changed = false;
-        }
-
-#if DEBUG_FOCUS
-        //logDispatchStateLocked();
-#endif
-    } // release lock
-
-    if (changed) {
-        // Wake up poll loop since it may need to make new input dispatching choices.
-        mLooper->wake();
-    }
-}
-
-void InputDispatcher::setInputFilterEnabled(bool enabled) {
-#if DEBUG_FOCUS
-    ALOGD("setInputFilterEnabled: enabled=%d", enabled);
-#endif
-
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        if (mInputFilterEnabled == enabled) {
-            return;
-        }
-
-        mInputFilterEnabled = enabled;
-        resetAndDropEverythingLocked("input filter is being enabled or disabled");
-    } // release lock
-
-    // Wake up poll loop since there might be work to do to drop everything.
-    mLooper->wake();
-}
-
-bool InputDispatcher::transferTouchFocus(const sp<InputChannel>& fromChannel,
-        const sp<InputChannel>& toChannel) {
-#if DEBUG_FOCUS
-    ALOGD("transferTouchFocus: fromChannel=%s, toChannel=%s",
-            fromChannel->getName().string(), toChannel->getName().string());
-#endif
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        sp<InputWindowHandle> fromWindowHandle = getWindowHandleLocked(fromChannel);
-        sp<InputWindowHandle> toWindowHandle = getWindowHandleLocked(toChannel);
-        if (fromWindowHandle == NULL || toWindowHandle == NULL) {
-#if DEBUG_FOCUS
-            ALOGD("Cannot transfer focus because from or to window not found.");
-#endif
-            return false;
-        }
-        if (fromWindowHandle == toWindowHandle) {
-#if DEBUG_FOCUS
-            ALOGD("Trivial transfer to same window.");
-#endif
-            return true;
-        }
-        if (fromWindowHandle->getInfo()->displayId != toWindowHandle->getInfo()->displayId) {
-#if DEBUG_FOCUS
-            ALOGD("Cannot transfer focus because windows are on different displays.");
-#endif
-            return false;
-        }
-
-        bool found = false;
-        for (size_t d = 0; d < mTouchStatesByDisplay.size(); d++) {
-            TouchState& state = mTouchStatesByDisplay.editValueAt(d);
-            for (size_t i = 0; i < state.windows.size(); i++) {
-                const TouchedWindow& touchedWindow = state.windows[i];
-                if (touchedWindow.windowHandle == fromWindowHandle) {
-                    int32_t oldTargetFlags = touchedWindow.targetFlags;
-                    BitSet32 pointerIds = touchedWindow.pointerIds;
-
-                    state.windows.removeAt(i);
-
-                    int32_t newTargetFlags = oldTargetFlags
-                            & (InputTarget::FLAG_FOREGROUND
-                                    | InputTarget::FLAG_SPLIT | InputTarget::FLAG_DISPATCH_AS_IS);
-                    state.addOrUpdateWindow(toWindowHandle, newTargetFlags, pointerIds);
-
-                    found = true;
-                    goto Found;
-                }
-            }
-        }
-Found:
-
-        if (! found) {
-#if DEBUG_FOCUS
-            ALOGD("Focus transfer failed because from window did not have focus.");
-#endif
-            return false;
-        }
-
-        ssize_t fromConnectionIndex = getConnectionIndexLocked(fromChannel);
-        ssize_t toConnectionIndex = getConnectionIndexLocked(toChannel);
-        if (fromConnectionIndex >= 0 && toConnectionIndex >= 0) {
-            sp<Connection> fromConnection = mConnectionsByFd.valueAt(fromConnectionIndex);
-            sp<Connection> toConnection = mConnectionsByFd.valueAt(toConnectionIndex);
-
-            fromConnection->inputState.copyPointerStateTo(toConnection->inputState);
-            CancelationOptions options(CancelationOptions::CANCEL_POINTER_EVENTS,
-                    "transferring touch focus from this window to another window");
-            synthesizeCancelationEventsForConnectionLocked(fromConnection, options);
-        }
-
-#if DEBUG_FOCUS
-        logDispatchStateLocked();
-#endif
-    } // release lock
-
-    // Wake up poll loop since it may need to make new input dispatching choices.
-    mLooper->wake();
-    return true;
-}
-
-void InputDispatcher::resetAndDropEverythingLocked(const char* reason) {
-#if DEBUG_FOCUS
-    ALOGD("Resetting and dropping all events (%s).", reason);
-#endif
-
-    CancelationOptions options(CancelationOptions::CANCEL_ALL_EVENTS, reason);
-    synthesizeCancelationEventsForAllConnectionsLocked(options);
-
-    resetKeyRepeatLocked();
-    releasePendingEventLocked();
-    drainInboundQueueLocked();
-    resetANRTimeoutsLocked();
-
-    mTouchStatesByDisplay.clear();
-    mLastHoverWindowHandle.clear();
-}
-
-void InputDispatcher::logDispatchStateLocked() {
-    String8 dump;
-    dumpDispatchStateLocked(dump);
-
-    char* text = dump.lockBuffer(dump.size());
-    char* start = text;
-    while (*start != '\0') {
-        char* end = strchr(start, '\n');
-        if (*end == '\n') {
-            *(end++) = '\0';
-        }
-        ALOGD("%s", start);
-        start = end;
-    }
-}
-
-void InputDispatcher::dumpDispatchStateLocked(String8& dump) {
-    dump.appendFormat(INDENT "DispatchEnabled: %d\n", mDispatchEnabled);
-    dump.appendFormat(INDENT "DispatchFrozen: %d\n", mDispatchFrozen);
-
-    if (mFocusedApplicationHandle != NULL) {
-        dump.appendFormat(INDENT "FocusedApplication: name='%s', dispatchingTimeout=%0.3fms\n",
-                mFocusedApplicationHandle->getName().string(),
-                mFocusedApplicationHandle->getDispatchingTimeout(
-                        DEFAULT_INPUT_DISPATCHING_TIMEOUT) / 1000000.0);
-    } else {
-        dump.append(INDENT "FocusedApplication: <null>\n");
-    }
-    dump.appendFormat(INDENT "FocusedWindow: name='%s'\n",
-            mFocusedWindowHandle != NULL ? mFocusedWindowHandle->getName().string() : "<null>");
-
-    if (!mTouchStatesByDisplay.isEmpty()) {
-        dump.appendFormat(INDENT "TouchStatesByDisplay:\n");
-        for (size_t i = 0; i < mTouchStatesByDisplay.size(); i++) {
-            const TouchState& state = mTouchStatesByDisplay.valueAt(i);
-            dump.appendFormat(INDENT2 "%zu: down=%s, split=%s, deviceId=%d, source=0x%08x\n",
-                    state.displayId, toString(state.down), toString(state.split),
-                    state.deviceId, state.source);
-            if (!state.windows.isEmpty()) {
-                dump.append(INDENT3 "Windows:\n");
-                for (size_t i = 0; i < state.windows.size(); i++) {
-                    const TouchedWindow& touchedWindow = state.windows[i];
-                    dump.appendFormat(INDENT4 "%zu: name='%s', pointerIds=0x%0x, targetFlags=0x%x\n",
-                            i, touchedWindow.windowHandle->getName().string(),
-                            touchedWindow.pointerIds.value,
-                            touchedWindow.targetFlags);
-                }
-            } else {
-                dump.append(INDENT3 "Windows: <none>\n");
-            }
-        }
-    } else {
-        dump.append(INDENT "TouchStates: <no displays touched>\n");
-    }
-
-    if (!mWindowHandles.isEmpty()) {
-        dump.append(INDENT "Windows:\n");
-        for (size_t i = 0; i < mWindowHandles.size(); i++) {
-            const sp<InputWindowHandle>& windowHandle = mWindowHandles.itemAt(i);
-            const InputWindowInfo* windowInfo = windowHandle->getInfo();
-
-            dump.appendFormat(INDENT2 "%zu: name='%s', displayId=%d, "
-                    "paused=%s, hasFocus=%s, hasWallpaper=%s, "
-                    "visible=%s, canReceiveKeys=%s, flags=0x%08x, type=0x%08x, layer=%d, "
-                    "frame=[%d,%d][%d,%d], scale=%f, "
-                    "touchableRegion=",
-                    i, windowInfo->name.string(), windowInfo->displayId,
-                    toString(windowInfo->paused),
-                    toString(windowInfo->hasFocus),
-                    toString(windowInfo->hasWallpaper),
-                    toString(windowInfo->visible),
-                    toString(windowInfo->canReceiveKeys),
-                    windowInfo->layoutParamsFlags, windowInfo->layoutParamsType,
-                    windowInfo->layer,
-                    windowInfo->frameLeft, windowInfo->frameTop,
-                    windowInfo->frameRight, windowInfo->frameBottom,
-                    windowInfo->scaleFactor);
-            dumpRegion(dump, windowInfo->touchableRegion);
-            dump.appendFormat(", inputFeatures=0x%08x", windowInfo->inputFeatures);
-            dump.appendFormat(", ownerPid=%d, ownerUid=%d, dispatchingTimeout=%0.3fms\n",
-                    windowInfo->ownerPid, windowInfo->ownerUid,
-                    windowInfo->dispatchingTimeout / 1000000.0);
-        }
-    } else {
-        dump.append(INDENT "Windows: <none>\n");
-    }
-
-    if (!mMonitoringChannels.isEmpty()) {
-        dump.append(INDENT "MonitoringChannels:\n");
-        for (size_t i = 0; i < mMonitoringChannels.size(); i++) {
-            const sp<InputChannel>& channel = mMonitoringChannels[i];
-            dump.appendFormat(INDENT2 "%zu: '%s'\n", i, channel->getName().string());
-        }
-    } else {
-        dump.append(INDENT "MonitoringChannels: <none>\n");
-    }
-
-    nsecs_t currentTime = now();
-
-    // Dump recently dispatched or dropped events from oldest to newest.
-    if (!mRecentQueue.isEmpty()) {
-        dump.appendFormat(INDENT "RecentQueue: length=%u\n", mRecentQueue.count());
-        for (EventEntry* entry = mRecentQueue.head; entry; entry = entry->next) {
-            dump.append(INDENT2);
-            entry->appendDescription(dump);
-            dump.appendFormat(", age=%0.1fms\n",
-                    (currentTime - entry->eventTime) * 0.000001f);
-        }
-    } else {
-        dump.append(INDENT "RecentQueue: <empty>\n");
-    }
-
-    // Dump event currently being dispatched.
-    if (mPendingEvent) {
-        dump.append(INDENT "PendingEvent:\n");
-        dump.append(INDENT2);
-        mPendingEvent->appendDescription(dump);
-        dump.appendFormat(", age=%0.1fms\n",
-                (currentTime - mPendingEvent->eventTime) * 0.000001f);
-    } else {
-        dump.append(INDENT "PendingEvent: <none>\n");
-    }
-
-    // Dump inbound events from oldest to newest.
-    if (!mInboundQueue.isEmpty()) {
-        dump.appendFormat(INDENT "InboundQueue: length=%u\n", mInboundQueue.count());
-        for (EventEntry* entry = mInboundQueue.head; entry; entry = entry->next) {
-            dump.append(INDENT2);
-            entry->appendDescription(dump);
-            dump.appendFormat(", age=%0.1fms\n",
-                    (currentTime - entry->eventTime) * 0.000001f);
-        }
-    } else {
-        dump.append(INDENT "InboundQueue: <empty>\n");
-    }
-
-    if (!mConnectionsByFd.isEmpty()) {
-        dump.append(INDENT "Connections:\n");
-        for (size_t i = 0; i < mConnectionsByFd.size(); i++) {
-            const sp<Connection>& connection = mConnectionsByFd.valueAt(i);
-            dump.appendFormat(INDENT2 "%zu: channelName='%s', windowName='%s', "
-                    "status=%s, monitor=%s, inputPublisherBlocked=%s\n",
-                    i, connection->getInputChannelName(), connection->getWindowName(),
-                    connection->getStatusLabel(), toString(connection->monitor),
-                    toString(connection->inputPublisherBlocked));
-
-            if (!connection->outboundQueue.isEmpty()) {
-                dump.appendFormat(INDENT3 "OutboundQueue: length=%u\n",
-                        connection->outboundQueue.count());
-                for (DispatchEntry* entry = connection->outboundQueue.head; entry;
-                        entry = entry->next) {
-                    dump.append(INDENT4);
-                    entry->eventEntry->appendDescription(dump);
-                    dump.appendFormat(", targetFlags=0x%08x, resolvedAction=%d, age=%0.1fms\n",
-                            entry->targetFlags, entry->resolvedAction,
-                            (currentTime - entry->eventEntry->eventTime) * 0.000001f);
-                }
-            } else {
-                dump.append(INDENT3 "OutboundQueue: <empty>\n");
-            }
-
-            if (!connection->waitQueue.isEmpty()) {
-                dump.appendFormat(INDENT3 "WaitQueue: length=%u\n",
-                        connection->waitQueue.count());
-                for (DispatchEntry* entry = connection->waitQueue.head; entry;
-                        entry = entry->next) {
-                    dump.append(INDENT4);
-                    entry->eventEntry->appendDescription(dump);
-                    dump.appendFormat(", targetFlags=0x%08x, resolvedAction=%d, "
-                            "age=%0.1fms, wait=%0.1fms\n",
-                            entry->targetFlags, entry->resolvedAction,
-                            (currentTime - entry->eventEntry->eventTime) * 0.000001f,
-                            (currentTime - entry->deliveryTime) * 0.000001f);
-                }
-            } else {
-                dump.append(INDENT3 "WaitQueue: <empty>\n");
-            }
-        }
-    } else {
-        dump.append(INDENT "Connections: <none>\n");
-    }
-
-    if (isAppSwitchPendingLocked()) {
-        dump.appendFormat(INDENT "AppSwitch: pending, due in %0.1fms\n",
-                (mAppSwitchDueTime - now()) / 1000000.0);
-    } else {
-        dump.append(INDENT "AppSwitch: not pending\n");
-    }
-
-    dump.append(INDENT "Configuration:\n");
-    dump.appendFormat(INDENT2 "KeyRepeatDelay: %0.1fms\n",
-            mConfig.keyRepeatDelay * 0.000001f);
-    dump.appendFormat(INDENT2 "KeyRepeatTimeout: %0.1fms\n",
-            mConfig.keyRepeatTimeout * 0.000001f);
-}
-
-status_t InputDispatcher::registerInputChannel(const sp<InputChannel>& inputChannel,
-        const sp<InputWindowHandle>& inputWindowHandle, bool monitor) {
-#if DEBUG_REGISTRATION
-    ALOGD("channel '%s' ~ registerInputChannel - monitor=%s", inputChannel->getName().string(),
-            toString(monitor));
-#endif
-
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        if (getConnectionIndexLocked(inputChannel) >= 0) {
-            ALOGW("Attempted to register already registered input channel '%s'",
-                    inputChannel->getName().string());
-            return BAD_VALUE;
-        }
-
-        sp<Connection> connection = new Connection(inputChannel, inputWindowHandle, monitor);
-
-        int fd = inputChannel->getFd();
-        mConnectionsByFd.add(fd, connection);
-
-        if (monitor) {
-            mMonitoringChannels.push(inputChannel);
-        }
-
-        mLooper->addFd(fd, 0, ALOOPER_EVENT_INPUT, handleReceiveCallback, this);
-    } // release lock
-
-    // Wake the looper because some connections have changed.
-    mLooper->wake();
-    return OK;
-}
-
-status_t InputDispatcher::unregisterInputChannel(const sp<InputChannel>& inputChannel) {
-#if DEBUG_REGISTRATION
-    ALOGD("channel '%s' ~ unregisterInputChannel", inputChannel->getName().string());
-#endif
-
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        status_t status = unregisterInputChannelLocked(inputChannel, false /*notify*/);
-        if (status) {
-            return status;
-        }
-    } // release lock
-
-    // Wake the poll loop because removing the connection may have changed the current
-    // synchronization state.
-    mLooper->wake();
-    return OK;
-}
-
-status_t InputDispatcher::unregisterInputChannelLocked(const sp<InputChannel>& inputChannel,
-        bool notify) {
-    ssize_t connectionIndex = getConnectionIndexLocked(inputChannel);
-    if (connectionIndex < 0) {
-        ALOGW("Attempted to unregister already unregistered input channel '%s'",
-                inputChannel->getName().string());
-        return BAD_VALUE;
-    }
-
-    sp<Connection> connection = mConnectionsByFd.valueAt(connectionIndex);
-    mConnectionsByFd.removeItemsAt(connectionIndex);
-
-    if (connection->monitor) {
-        removeMonitorChannelLocked(inputChannel);
-    }
-
-    mLooper->removeFd(inputChannel->getFd());
-
-    nsecs_t currentTime = now();
-    abortBrokenDispatchCycleLocked(currentTime, connection, notify);
-
-    connection->status = Connection::STATUS_ZOMBIE;
-    return OK;
-}
-
-void InputDispatcher::removeMonitorChannelLocked(const sp<InputChannel>& inputChannel) {
-    for (size_t i = 0; i < mMonitoringChannels.size(); i++) {
-         if (mMonitoringChannels[i] == inputChannel) {
-             mMonitoringChannels.removeAt(i);
-             break;
-         }
-    }
-}
-
-ssize_t InputDispatcher::getConnectionIndexLocked(const sp<InputChannel>& inputChannel) {
-    ssize_t connectionIndex = mConnectionsByFd.indexOfKey(inputChannel->getFd());
-    if (connectionIndex >= 0) {
-        sp<Connection> connection = mConnectionsByFd.valueAt(connectionIndex);
-        if (connection->inputChannel.get() == inputChannel.get()) {
-            return connectionIndex;
-        }
-    }
-
-    return -1;
-}
-
-void InputDispatcher::onDispatchCycleFinishedLocked(
-        nsecs_t currentTime, const sp<Connection>& connection, uint32_t seq, bool handled) {
-    CommandEntry* commandEntry = postCommandLocked(
-            & InputDispatcher::doDispatchCycleFinishedLockedInterruptible);
-    commandEntry->connection = connection;
-    commandEntry->eventTime = currentTime;
-    commandEntry->seq = seq;
-    commandEntry->handled = handled;
-}
-
-void InputDispatcher::onDispatchCycleBrokenLocked(
-        nsecs_t currentTime, const sp<Connection>& connection) {
-    ALOGE("channel '%s' ~ Channel is unrecoverably broken and will be disposed!",
-            connection->getInputChannelName());
-
-    CommandEntry* commandEntry = postCommandLocked(
-            & InputDispatcher::doNotifyInputChannelBrokenLockedInterruptible);
-    commandEntry->connection = connection;
-}
-
-void InputDispatcher::onANRLocked(
-        nsecs_t currentTime, const sp<InputApplicationHandle>& applicationHandle,
-        const sp<InputWindowHandle>& windowHandle,
-        nsecs_t eventTime, nsecs_t waitStartTime, const char* reason) {
-    float dispatchLatency = (currentTime - eventTime) * 0.000001f;
-    float waitDuration = (currentTime - waitStartTime) * 0.000001f;
-    ALOGI("Application is not responding: %s.  "
-            "It has been %0.1fms since event, %0.1fms since wait started.  Reason: %s",
-            getApplicationWindowLabelLocked(applicationHandle, windowHandle).string(),
-            dispatchLatency, waitDuration, reason);
-
-    // Capture a record of the InputDispatcher state at the time of the ANR.
-    time_t t = time(NULL);
-    struct tm tm;
-    localtime_r(&t, &tm);
-    char timestr[64];
-    strftime(timestr, sizeof(timestr), "%F %T", &tm);
-    mLastANRState.clear();
-    mLastANRState.append(INDENT "ANR:\n");
-    mLastANRState.appendFormat(INDENT2 "Time: %s\n", timestr);
-    mLastANRState.appendFormat(INDENT2 "Window: %s\n",
-            getApplicationWindowLabelLocked(applicationHandle, windowHandle).string());
-    mLastANRState.appendFormat(INDENT2 "DispatchLatency: %0.1fms\n", dispatchLatency);
-    mLastANRState.appendFormat(INDENT2 "WaitDuration: %0.1fms\n", waitDuration);
-    mLastANRState.appendFormat(INDENT2 "Reason: %s\n", reason);
-    dumpDispatchStateLocked(mLastANRState);
-
-    CommandEntry* commandEntry = postCommandLocked(
-            & InputDispatcher::doNotifyANRLockedInterruptible);
-    commandEntry->inputApplicationHandle = applicationHandle;
-    commandEntry->inputWindowHandle = windowHandle;
-    commandEntry->reason = reason;
-}
-
-void InputDispatcher::doNotifyConfigurationChangedInterruptible(
-        CommandEntry* commandEntry) {
-    mLock.unlock();
-
-    mPolicy->notifyConfigurationChanged(commandEntry->eventTime);
-
-    mLock.lock();
-}
-
-void InputDispatcher::doNotifyInputChannelBrokenLockedInterruptible(
-        CommandEntry* commandEntry) {
-    sp<Connection> connection = commandEntry->connection;
-
-    if (connection->status != Connection::STATUS_ZOMBIE) {
-        mLock.unlock();
-
-        mPolicy->notifyInputChannelBroken(connection->inputWindowHandle);
-
-        mLock.lock();
-    }
-}
-
-void InputDispatcher::doNotifyANRLockedInterruptible(
-        CommandEntry* commandEntry) {
-    mLock.unlock();
-
-    nsecs_t newTimeout = mPolicy->notifyANR(
-            commandEntry->inputApplicationHandle, commandEntry->inputWindowHandle,
-            commandEntry->reason);
-
-    mLock.lock();
-
-    resumeAfterTargetsNotReadyTimeoutLocked(newTimeout,
-            commandEntry->inputWindowHandle != NULL
-                    ? commandEntry->inputWindowHandle->getInputChannel() : NULL);
-}
-
-void InputDispatcher::doInterceptKeyBeforeDispatchingLockedInterruptible(
-        CommandEntry* commandEntry) {
-    KeyEntry* entry = commandEntry->keyEntry;
-
-    KeyEvent event;
-    initializeKeyEvent(&event, entry);
-
-    mLock.unlock();
-
-    nsecs_t delay = mPolicy->interceptKeyBeforeDispatching(commandEntry->inputWindowHandle,
-            &event, entry->policyFlags);
-
-    mLock.lock();
-
-    if (delay < 0) {
-        entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_SKIP;
-    } else if (!delay) {
-        entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_CONTINUE;
-    } else {
-        entry->interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER;
-        entry->interceptKeyWakeupTime = now() + delay;
-    }
-    entry->release();
-}
-
-void InputDispatcher::doDispatchCycleFinishedLockedInterruptible(
-        CommandEntry* commandEntry) {
-    sp<Connection> connection = commandEntry->connection;
-    nsecs_t finishTime = commandEntry->eventTime;
-    uint32_t seq = commandEntry->seq;
-    bool handled = commandEntry->handled;
-
-    // Handle post-event policy actions.
-    DispatchEntry* dispatchEntry = connection->findWaitQueueEntry(seq);
-    if (dispatchEntry) {
-        nsecs_t eventDuration = finishTime - dispatchEntry->deliveryTime;
-        if (eventDuration > SLOW_EVENT_PROCESSING_WARNING_TIMEOUT) {
-            String8 msg;
-            msg.appendFormat("Window '%s' spent %0.1fms processing the last input event: ",
-                    connection->getWindowName(), eventDuration * 0.000001f);
-            dispatchEntry->eventEntry->appendDescription(msg);
-            ALOGI("%s", msg.string());
-        }
-
-        bool restartEvent;
-        if (dispatchEntry->eventEntry->type == EventEntry::TYPE_KEY) {
-            KeyEntry* keyEntry = static_cast<KeyEntry*>(dispatchEntry->eventEntry);
-            restartEvent = afterKeyEventLockedInterruptible(connection,
-                    dispatchEntry, keyEntry, handled);
-        } else if (dispatchEntry->eventEntry->type == EventEntry::TYPE_MOTION) {
-            MotionEntry* motionEntry = static_cast<MotionEntry*>(dispatchEntry->eventEntry);
-            restartEvent = afterMotionEventLockedInterruptible(connection,
-                    dispatchEntry, motionEntry, handled);
-        } else {
-            restartEvent = false;
-        }
-
-        // Dequeue the event and start the next cycle.
-        // Note that because the lock might have been released, it is possible that the
-        // contents of the wait queue to have been drained, so we need to double-check
-        // a few things.
-        if (dispatchEntry == connection->findWaitQueueEntry(seq)) {
-            connection->waitQueue.dequeue(dispatchEntry);
-            traceWaitQueueLengthLocked(connection);
-            if (restartEvent && connection->status == Connection::STATUS_NORMAL) {
-                connection->outboundQueue.enqueueAtHead(dispatchEntry);
-                traceOutboundQueueLengthLocked(connection);
-            } else {
-                releaseDispatchEntryLocked(dispatchEntry);
-            }
-        }
-
-        // Start the next dispatch cycle for this connection.
-        startDispatchCycleLocked(now(), connection);
-    }
-}
-
-bool InputDispatcher::afterKeyEventLockedInterruptible(const sp<Connection>& connection,
-        DispatchEntry* dispatchEntry, KeyEntry* keyEntry, bool handled) {
-    if (!(keyEntry->flags & AKEY_EVENT_FLAG_FALLBACK)) {
-        // Get the fallback key state.
-        // Clear it out after dispatching the UP.
-        int32_t originalKeyCode = keyEntry->keyCode;
-        int32_t fallbackKeyCode = connection->inputState.getFallbackKey(originalKeyCode);
-        if (keyEntry->action == AKEY_EVENT_ACTION_UP) {
-            connection->inputState.removeFallbackKey(originalKeyCode);
-        }
-
-        if (handled || !dispatchEntry->hasForegroundTarget()) {
-            // If the application handles the original key for which we previously
-            // generated a fallback or if the window is not a foreground window,
-            // then cancel the associated fallback key, if any.
-            if (fallbackKeyCode != -1) {
-                // Dispatch the unhandled key to the policy with the cancel flag.
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-                ALOGD("Unhandled key event: Asking policy to cancel fallback action.  "
-                        "keyCode=%d, action=%d, repeatCount=%d, policyFlags=0x%08x",
-                        keyEntry->keyCode, keyEntry->action, keyEntry->repeatCount,
-                        keyEntry->policyFlags);
-#endif
-                KeyEvent event;
-                initializeKeyEvent(&event, keyEntry);
-                event.setFlags(event.getFlags() | AKEY_EVENT_FLAG_CANCELED);
-
-                mLock.unlock();
-
-                mPolicy->dispatchUnhandledKey(connection->inputWindowHandle,
-                        &event, keyEntry->policyFlags, &event);
-
-                mLock.lock();
-
-                // Cancel the fallback key.
-                if (fallbackKeyCode != AKEYCODE_UNKNOWN) {
-                    CancelationOptions options(CancelationOptions::CANCEL_FALLBACK_EVENTS,
-                            "application handled the original non-fallback key "
-                            "or is no longer a foreground target, "
-                            "canceling previously dispatched fallback key");
-                    options.keyCode = fallbackKeyCode;
-                    synthesizeCancelationEventsForConnectionLocked(connection, options);
-                }
-                connection->inputState.removeFallbackKey(originalKeyCode);
-            }
-        } else {
-            // If the application did not handle a non-fallback key, first check
-            // that we are in a good state to perform unhandled key event processing
-            // Then ask the policy what to do with it.
-            bool initialDown = keyEntry->action == AKEY_EVENT_ACTION_DOWN
-                    && keyEntry->repeatCount == 0;
-            if (fallbackKeyCode == -1 && !initialDown) {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-                ALOGD("Unhandled key event: Skipping unhandled key event processing "
-                        "since this is not an initial down.  "
-                        "keyCode=%d, action=%d, repeatCount=%d, policyFlags=0x%08x",
-                        originalKeyCode, keyEntry->action, keyEntry->repeatCount,
-                        keyEntry->policyFlags);
-#endif
-                return false;
-            }
-
-            // Dispatch the unhandled key to the policy.
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-            ALOGD("Unhandled key event: Asking policy to perform fallback action.  "
-                    "keyCode=%d, action=%d, repeatCount=%d, policyFlags=0x%08x",
-                    keyEntry->keyCode, keyEntry->action, keyEntry->repeatCount,
-                    keyEntry->policyFlags);
-#endif
-            KeyEvent event;
-            initializeKeyEvent(&event, keyEntry);
-
-            mLock.unlock();
-
-            bool fallback = mPolicy->dispatchUnhandledKey(connection->inputWindowHandle,
-                    &event, keyEntry->policyFlags, &event);
-
-            mLock.lock();
-
-            if (connection->status != Connection::STATUS_NORMAL) {
-                connection->inputState.removeFallbackKey(originalKeyCode);
-                return false;
-            }
-
-            // Latch the fallback keycode for this key on an initial down.
-            // The fallback keycode cannot change at any other point in the lifecycle.
-            if (initialDown) {
-                if (fallback) {
-                    fallbackKeyCode = event.getKeyCode();
-                } else {
-                    fallbackKeyCode = AKEYCODE_UNKNOWN;
-                }
-                connection->inputState.setFallbackKey(originalKeyCode, fallbackKeyCode);
-            }
-
-            ALOG_ASSERT(fallbackKeyCode != -1);
-
-            // Cancel the fallback key if the policy decides not to send it anymore.
-            // We will continue to dispatch the key to the policy but we will no
-            // longer dispatch a fallback key to the application.
-            if (fallbackKeyCode != AKEYCODE_UNKNOWN
-                    && (!fallback || fallbackKeyCode != event.getKeyCode())) {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-                if (fallback) {
-                    ALOGD("Unhandled key event: Policy requested to send key %d"
-                            "as a fallback for %d, but on the DOWN it had requested "
-                            "to send %d instead.  Fallback canceled.",
-                            event.getKeyCode(), originalKeyCode, fallbackKeyCode);
-                } else {
-                    ALOGD("Unhandled key event: Policy did not request fallback for %d, "
-                            "but on the DOWN it had requested to send %d.  "
-                            "Fallback canceled.",
-                            originalKeyCode, fallbackKeyCode);
-                }
-#endif
-
-                CancelationOptions options(CancelationOptions::CANCEL_FALLBACK_EVENTS,
-                        "canceling fallback, policy no longer desires it");
-                options.keyCode = fallbackKeyCode;
-                synthesizeCancelationEventsForConnectionLocked(connection, options);
-
-                fallback = false;
-                fallbackKeyCode = AKEYCODE_UNKNOWN;
-                if (keyEntry->action != AKEY_EVENT_ACTION_UP) {
-                    connection->inputState.setFallbackKey(originalKeyCode,
-                            fallbackKeyCode);
-                }
-            }
-
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-            {
-                String8 msg;
-                const KeyedVector<int32_t, int32_t>& fallbackKeys =
-                        connection->inputState.getFallbackKeys();
-                for (size_t i = 0; i < fallbackKeys.size(); i++) {
-                    msg.appendFormat(", %d->%d", fallbackKeys.keyAt(i),
-                            fallbackKeys.valueAt(i));
-                }
-                ALOGD("Unhandled key event: %d currently tracked fallback keys%s.",
-                        fallbackKeys.size(), msg.string());
-            }
-#endif
-
-            if (fallback) {
-                // Restart the dispatch cycle using the fallback key.
-                keyEntry->eventTime = event.getEventTime();
-                keyEntry->deviceId = event.getDeviceId();
-                keyEntry->source = event.getSource();
-                keyEntry->flags = event.getFlags() | AKEY_EVENT_FLAG_FALLBACK;
-                keyEntry->keyCode = fallbackKeyCode;
-                keyEntry->scanCode = event.getScanCode();
-                keyEntry->metaState = event.getMetaState();
-                keyEntry->repeatCount = event.getRepeatCount();
-                keyEntry->downTime = event.getDownTime();
-                keyEntry->syntheticRepeat = false;
-
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-                ALOGD("Unhandled key event: Dispatching fallback key.  "
-                        "originalKeyCode=%d, fallbackKeyCode=%d, fallbackMetaState=%08x",
-                        originalKeyCode, fallbackKeyCode, keyEntry->metaState);
-#endif
-                return true; // restart the event
-            } else {
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-                ALOGD("Unhandled key event: No fallback key.");
-#endif
-            }
-        }
-    }
-    return false;
-}
-
-bool InputDispatcher::afterMotionEventLockedInterruptible(const sp<Connection>& connection,
-        DispatchEntry* dispatchEntry, MotionEntry* motionEntry, bool handled) {
-    return false;
-}
-
-void InputDispatcher::doPokeUserActivityLockedInterruptible(CommandEntry* commandEntry) {
-    mLock.unlock();
-
-    mPolicy->pokeUserActivity(commandEntry->eventTime, commandEntry->userActivityEventType);
-
-    mLock.lock();
-}
-
-void InputDispatcher::initializeKeyEvent(KeyEvent* event, const KeyEntry* entry) {
-    event->initialize(entry->deviceId, entry->source, entry->action, entry->flags,
-            entry->keyCode, entry->scanCode, entry->metaState, entry->repeatCount,
-            entry->downTime, entry->eventTime);
-}
-
-void InputDispatcher::updateDispatchStatisticsLocked(nsecs_t currentTime, const EventEntry* entry,
-        int32_t injectionResult, nsecs_t timeSpentWaitingForApplication) {
-    // TODO Write some statistics about how long we spend waiting.
-}
-
-void InputDispatcher::traceInboundQueueLengthLocked() {
-    if (ATRACE_ENABLED()) {
-        ATRACE_INT("iq", mInboundQueue.count());
-    }
-}
-
-void InputDispatcher::traceOutboundQueueLengthLocked(const sp<Connection>& connection) {
-    if (ATRACE_ENABLED()) {
-        char counterName[40];
-        snprintf(counterName, sizeof(counterName), "oq:%s", connection->getWindowName());
-        ATRACE_INT(counterName, connection->outboundQueue.count());
-    }
-}
-
-void InputDispatcher::traceWaitQueueLengthLocked(const sp<Connection>& connection) {
-    if (ATRACE_ENABLED()) {
-        char counterName[40];
-        snprintf(counterName, sizeof(counterName), "wq:%s", connection->getWindowName());
-        ATRACE_INT(counterName, connection->waitQueue.count());
-    }
-}
-
-void InputDispatcher::dump(String8& dump) {
-    AutoMutex _l(mLock);
-
-    dump.append("Input Dispatcher State:\n");
-    dumpDispatchStateLocked(dump);
-
-    if (!mLastANRState.isEmpty()) {
-        dump.append("\nInput Dispatcher State at time of last ANR:\n");
-        dump.append(mLastANRState);
-    }
-}
-
-void InputDispatcher::monitor() {
-    // Acquire and release the lock to ensure that the dispatcher has not deadlocked.
-    mLock.lock();
-    mLooper->wake();
-    mDispatcherIsAliveCondition.wait(mLock);
-    mLock.unlock();
-}
-
-
-// --- InputDispatcher::Queue ---
-
-template <typename T>
-uint32_t InputDispatcher::Queue<T>::count() const {
-    uint32_t result = 0;
-    for (const T* entry = head; entry; entry = entry->next) {
-        result += 1;
-    }
-    return result;
-}
-
-
-// --- InputDispatcher::InjectionState ---
-
-InputDispatcher::InjectionState::InjectionState(int32_t injectorPid, int32_t injectorUid) :
-        refCount(1),
-        injectorPid(injectorPid), injectorUid(injectorUid),
-        injectionResult(INPUT_EVENT_INJECTION_PENDING), injectionIsAsync(false),
-        pendingForegroundDispatches(0) {
-}
-
-InputDispatcher::InjectionState::~InjectionState() {
-}
-
-void InputDispatcher::InjectionState::release() {
-    refCount -= 1;
-    if (refCount == 0) {
-        delete this;
-    } else {
-        ALOG_ASSERT(refCount > 0);
-    }
-}
-
-
-// --- InputDispatcher::EventEntry ---
-
-InputDispatcher::EventEntry::EventEntry(int32_t type, nsecs_t eventTime, uint32_t policyFlags) :
-        refCount(1), type(type), eventTime(eventTime), policyFlags(policyFlags),
-        injectionState(NULL), dispatchInProgress(false) {
-}
-
-InputDispatcher::EventEntry::~EventEntry() {
-    releaseInjectionState();
-}
-
-void InputDispatcher::EventEntry::release() {
-    refCount -= 1;
-    if (refCount == 0) {
-        delete this;
-    } else {
-        ALOG_ASSERT(refCount > 0);
-    }
-}
-
-void InputDispatcher::EventEntry::releaseInjectionState() {
-    if (injectionState) {
-        injectionState->release();
-        injectionState = NULL;
-    }
-}
-
-
-// --- InputDispatcher::ConfigurationChangedEntry ---
-
-InputDispatcher::ConfigurationChangedEntry::ConfigurationChangedEntry(nsecs_t eventTime) :
-        EventEntry(TYPE_CONFIGURATION_CHANGED, eventTime, 0) {
-}
-
-InputDispatcher::ConfigurationChangedEntry::~ConfigurationChangedEntry() {
-}
-
-void InputDispatcher::ConfigurationChangedEntry::appendDescription(String8& msg) const {
-    msg.append("ConfigurationChangedEvent(), policyFlags=0x%08x",
-            policyFlags);
-}
-
-
-// --- InputDispatcher::DeviceResetEntry ---
-
-InputDispatcher::DeviceResetEntry::DeviceResetEntry(nsecs_t eventTime, int32_t deviceId) :
-        EventEntry(TYPE_DEVICE_RESET, eventTime, 0),
-        deviceId(deviceId) {
-}
-
-InputDispatcher::DeviceResetEntry::~DeviceResetEntry() {
-}
-
-void InputDispatcher::DeviceResetEntry::appendDescription(String8& msg) const {
-    msg.appendFormat("DeviceResetEvent(deviceId=%d), policyFlags=0x%08x",
-            deviceId, policyFlags);
-}
-
-
-// --- InputDispatcher::KeyEntry ---
-
-InputDispatcher::KeyEntry::KeyEntry(nsecs_t eventTime,
-        int32_t deviceId, uint32_t source, uint32_t policyFlags, int32_t action,
-        int32_t flags, int32_t keyCode, int32_t scanCode, int32_t metaState,
-        int32_t repeatCount, nsecs_t downTime) :
-        EventEntry(TYPE_KEY, eventTime, policyFlags),
-        deviceId(deviceId), source(source), action(action), flags(flags),
-        keyCode(keyCode), scanCode(scanCode), metaState(metaState),
-        repeatCount(repeatCount), downTime(downTime),
-        syntheticRepeat(false), interceptKeyResult(KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN),
-        interceptKeyWakeupTime(0) {
-}
-
-InputDispatcher::KeyEntry::~KeyEntry() {
-}
-
-void InputDispatcher::KeyEntry::appendDescription(String8& msg) const {
-    msg.appendFormat("KeyEvent(deviceId=%d, source=0x%08x, action=%d, "
-            "flags=0x%08x, keyCode=%d, scanCode=%d, metaState=0x%08x, "
-            "repeatCount=%d), policyFlags=0x%08x",
-            deviceId, source, action, flags, keyCode, scanCode, metaState,
-            repeatCount, policyFlags);
-}
-
-void InputDispatcher::KeyEntry::recycle() {
-    releaseInjectionState();
-
-    dispatchInProgress = false;
-    syntheticRepeat = false;
-    interceptKeyResult = KeyEntry::INTERCEPT_KEY_RESULT_UNKNOWN;
-    interceptKeyWakeupTime = 0;
-}
-
-
-// --- InputDispatcher::MotionEntry ---
-
-InputDispatcher::MotionEntry::MotionEntry(nsecs_t eventTime,
-        int32_t deviceId, uint32_t source, uint32_t policyFlags, int32_t action, int32_t flags,
-        int32_t metaState, int32_t buttonState,
-        int32_t edgeFlags, float xPrecision, float yPrecision,
-        nsecs_t downTime, int32_t displayId, uint32_t pointerCount,
-        const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
-        float xOffset, float yOffset) :
-        EventEntry(TYPE_MOTION, eventTime, policyFlags),
-        eventTime(eventTime),
-        deviceId(deviceId), source(source), action(action), flags(flags),
-        metaState(metaState), buttonState(buttonState), edgeFlags(edgeFlags),
-        xPrecision(xPrecision), yPrecision(yPrecision),
-        downTime(downTime), displayId(displayId), pointerCount(pointerCount) {
-    for (uint32_t i = 0; i < pointerCount; i++) {
-        this->pointerProperties[i].copyFrom(pointerProperties[i]);
-        this->pointerCoords[i].copyFrom(pointerCoords[i]);
-        if (xOffset || yOffset) {
-            this->pointerCoords[i].applyOffset(xOffset, yOffset);
-        }
-    }
-}
-
-InputDispatcher::MotionEntry::~MotionEntry() {
-}
-
-void InputDispatcher::MotionEntry::appendDescription(String8& msg) const {
-    msg.appendFormat("MotionEvent(deviceId=%d, source=0x%08x, action=%d, "
-            "flags=0x%08x, metaState=0x%08x, buttonState=0x%08x, edgeFlags=0x%08x, "
-            "xPrecision=%.1f, yPrecision=%.1f, displayId=%d, pointers=[",
-            deviceId, source, action, flags, metaState, buttonState, edgeFlags,
-            xPrecision, yPrecision, displayId);
-    for (uint32_t i = 0; i < pointerCount; i++) {
-        if (i) {
-            msg.append(", ");
-        }
-        msg.appendFormat("%d: (%.1f, %.1f)", pointerProperties[i].id,
-                pointerCoords[i].getX(), pointerCoords[i].getY());
-    }
-    msg.appendFormat("]), policyFlags=0x%08x", policyFlags);
-}
-
-
-// --- InputDispatcher::DispatchEntry ---
-
-volatile int32_t InputDispatcher::DispatchEntry::sNextSeqAtomic;
-
-InputDispatcher::DispatchEntry::DispatchEntry(EventEntry* eventEntry,
-        int32_t targetFlags, float xOffset, float yOffset, float scaleFactor) :
-        seq(nextSeq()),
-        eventEntry(eventEntry), targetFlags(targetFlags),
-        xOffset(xOffset), yOffset(yOffset), scaleFactor(scaleFactor),
-        deliveryTime(0), resolvedAction(0), resolvedFlags(0) {
-    eventEntry->refCount += 1;
-}
-
-InputDispatcher::DispatchEntry::~DispatchEntry() {
-    eventEntry->release();
-}
-
-uint32_t InputDispatcher::DispatchEntry::nextSeq() {
-    // Sequence number 0 is reserved and will never be returned.
-    uint32_t seq;
-    do {
-        seq = android_atomic_inc(&sNextSeqAtomic);
-    } while (!seq);
-    return seq;
-}
-
-
-// --- InputDispatcher::InputState ---
-
-InputDispatcher::InputState::InputState() {
-}
-
-InputDispatcher::InputState::~InputState() {
-}
-
-bool InputDispatcher::InputState::isNeutral() const {
-    return mKeyMementos.isEmpty() && mMotionMementos.isEmpty();
-}
-
-bool InputDispatcher::InputState::isHovering(int32_t deviceId, uint32_t source,
-        int32_t displayId) const {
-    for (size_t i = 0; i < mMotionMementos.size(); i++) {
-        const MotionMemento& memento = mMotionMementos.itemAt(i);
-        if (memento.deviceId == deviceId
-                && memento.source == source
-                && memento.displayId == displayId
-                && memento.hovering) {
-            return true;
-        }
-    }
-    return false;
-}
-
-bool InputDispatcher::InputState::trackKey(const KeyEntry* entry,
-        int32_t action, int32_t flags) {
-    switch (action) {
-    case AKEY_EVENT_ACTION_UP: {
-        if (entry->flags & AKEY_EVENT_FLAG_FALLBACK) {
-            for (size_t i = 0; i < mFallbackKeys.size(); ) {
-                if (mFallbackKeys.valueAt(i) == entry->keyCode) {
-                    mFallbackKeys.removeItemsAt(i);
-                } else {
-                    i += 1;
-                }
-            }
-        }
-        ssize_t index = findKeyMemento(entry);
-        if (index >= 0) {
-            mKeyMementos.removeAt(index);
-            return true;
-        }
-        /* FIXME: We can't just drop the key up event because that prevents creating
-         * popup windows that are automatically shown when a key is held and then
-         * dismissed when the key is released.  The problem is that the popup will
-         * not have received the original key down, so the key up will be considered
-         * to be inconsistent with its observed state.  We could perhaps handle this
-         * by synthesizing a key down but that will cause other problems.
-         *
-         * So for now, allow inconsistent key up events to be dispatched.
-         *
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-        ALOGD("Dropping inconsistent key up event: deviceId=%d, source=%08x, "
-                "keyCode=%d, scanCode=%d",
-                entry->deviceId, entry->source, entry->keyCode, entry->scanCode);
-#endif
-        return false;
-        */
-        return true;
-    }
-
-    case AKEY_EVENT_ACTION_DOWN: {
-        ssize_t index = findKeyMemento(entry);
-        if (index >= 0) {
-            mKeyMementos.removeAt(index);
-        }
-        addKeyMemento(entry, flags);
-        return true;
-    }
-
-    default:
-        return true;
-    }
-}
-
-bool InputDispatcher::InputState::trackMotion(const MotionEntry* entry,
-        int32_t action, int32_t flags) {
-    int32_t actionMasked = action & AMOTION_EVENT_ACTION_MASK;
-    switch (actionMasked) {
-    case AMOTION_EVENT_ACTION_UP:
-    case AMOTION_EVENT_ACTION_CANCEL: {
-        ssize_t index = findMotionMemento(entry, false /*hovering*/);
-        if (index >= 0) {
-            mMotionMementos.removeAt(index);
-            return true;
-        }
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-        ALOGD("Dropping inconsistent motion up or cancel event: deviceId=%d, source=%08x, "
-                "actionMasked=%d",
-                entry->deviceId, entry->source, actionMasked);
-#endif
-        return false;
-    }
-
-    case AMOTION_EVENT_ACTION_DOWN: {
-        ssize_t index = findMotionMemento(entry, false /*hovering*/);
-        if (index >= 0) {
-            mMotionMementos.removeAt(index);
-        }
-        addMotionMemento(entry, flags, false /*hovering*/);
-        return true;
-    }
-
-    case AMOTION_EVENT_ACTION_POINTER_UP:
-    case AMOTION_EVENT_ACTION_POINTER_DOWN:
-    case AMOTION_EVENT_ACTION_MOVE: {
-        if (entry->source & AINPUT_SOURCE_CLASS_NAVIGATION) {
-            // Trackballs can send MOVE events with a corresponding DOWN or UP. There's no need to
-            // generate cancellation events for these since they're based in relative rather than
-            // absolute units.
-            return true;
-        }
-
-        ssize_t index = findMotionMemento(entry, false /*hovering*/);
-
-        if (entry->source & AINPUT_SOURCE_CLASS_JOYSTICK) {
-            // Joysticks can send MOVE events without a corresponding DOWN or UP. Since all
-            // joystick axes are normalized to [-1, 1] we can trust that 0 means it's neutral. Any
-            // other value and we need to track the motion so we can send cancellation events for
-            // anything generating fallback events (e.g. DPad keys for joystick movements).
-            if (index >= 0) {
-                if (entry->pointerCoords[0].isEmpty()) {
-                    mMotionMementos.removeAt(index);
-                } else {
-                    MotionMemento& memento = mMotionMementos.editItemAt(index);
-                    memento.setPointers(entry);
-                }
-            } else if (!entry->pointerCoords[0].isEmpty()) {
-                addMotionMemento(entry, flags, false /*hovering*/);
-            }
-
-            // Joysticks and trackballs can send MOVE events without corresponding DOWN or UP.
-            return true;
-        }
-        if (index >= 0) {
-            MotionMemento& memento = mMotionMementos.editItemAt(index);
-            memento.setPointers(entry);
-            return true;
-        }
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-        ALOGD("Dropping inconsistent motion pointer up/down or move event: "
-                "deviceId=%d, source=%08x, actionMasked=%d",
-                entry->deviceId, entry->source, actionMasked);
-#endif
-        return false;
-    }
-
-    case AMOTION_EVENT_ACTION_HOVER_EXIT: {
-        ssize_t index = findMotionMemento(entry, true /*hovering*/);
-        if (index >= 0) {
-            mMotionMementos.removeAt(index);
-            return true;
-        }
-#if DEBUG_OUTBOUND_EVENT_DETAILS
-        ALOGD("Dropping inconsistent motion hover exit event: deviceId=%d, source=%08x",
-                entry->deviceId, entry->source);
-#endif
-        return false;
-    }
-
-    case AMOTION_EVENT_ACTION_HOVER_ENTER:
-    case AMOTION_EVENT_ACTION_HOVER_MOVE: {
-        ssize_t index = findMotionMemento(entry, true /*hovering*/);
-        if (index >= 0) {
-            mMotionMementos.removeAt(index);
-        }
-        addMotionMemento(entry, flags, true /*hovering*/);
-        return true;
-    }
-
-    default:
-        return true;
-    }
-}
-
-ssize_t InputDispatcher::InputState::findKeyMemento(const KeyEntry* entry) const {
-    for (size_t i = 0; i < mKeyMementos.size(); i++) {
-        const KeyMemento& memento = mKeyMementos.itemAt(i);
-        if (memento.deviceId == entry->deviceId
-                && memento.source == entry->source
-                && memento.keyCode == entry->keyCode
-                && memento.scanCode == entry->scanCode) {
-            return i;
-        }
-    }
-    return -1;
-}
-
-ssize_t InputDispatcher::InputState::findMotionMemento(const MotionEntry* entry,
-        bool hovering) const {
-    for (size_t i = 0; i < mMotionMementos.size(); i++) {
-        const MotionMemento& memento = mMotionMementos.itemAt(i);
-        if (memento.deviceId == entry->deviceId
-                && memento.source == entry->source
-                && memento.displayId == entry->displayId
-                && memento.hovering == hovering) {
-            return i;
-        }
-    }
-    return -1;
-}
-
-void InputDispatcher::InputState::addKeyMemento(const KeyEntry* entry, int32_t flags) {
-    mKeyMementos.push();
-    KeyMemento& memento = mKeyMementos.editTop();
-    memento.deviceId = entry->deviceId;
-    memento.source = entry->source;
-    memento.keyCode = entry->keyCode;
-    memento.scanCode = entry->scanCode;
-    memento.metaState = entry->metaState;
-    memento.flags = flags;
-    memento.downTime = entry->downTime;
-    memento.policyFlags = entry->policyFlags;
-}
-
-void InputDispatcher::InputState::addMotionMemento(const MotionEntry* entry,
-        int32_t flags, bool hovering) {
-    mMotionMementos.push();
-    MotionMemento& memento = mMotionMementos.editTop();
-    memento.deviceId = entry->deviceId;
-    memento.source = entry->source;
-    memento.flags = flags;
-    memento.xPrecision = entry->xPrecision;
-    memento.yPrecision = entry->yPrecision;
-    memento.downTime = entry->downTime;
-    memento.displayId = entry->displayId;
-    memento.setPointers(entry);
-    memento.hovering = hovering;
-    memento.policyFlags = entry->policyFlags;
-}
-
-void InputDispatcher::InputState::MotionMemento::setPointers(const MotionEntry* entry) {
-    pointerCount = entry->pointerCount;
-    for (uint32_t i = 0; i < entry->pointerCount; i++) {
-        pointerProperties[i].copyFrom(entry->pointerProperties[i]);
-        pointerCoords[i].copyFrom(entry->pointerCoords[i]);
-    }
-}
-
-void InputDispatcher::InputState::synthesizeCancelationEvents(nsecs_t currentTime,
-        Vector<EventEntry*>& outEvents, const CancelationOptions& options) {
-    for (size_t i = 0; i < mKeyMementos.size(); i++) {
-        const KeyMemento& memento = mKeyMementos.itemAt(i);
-        if (shouldCancelKey(memento, options)) {
-            outEvents.push(new KeyEntry(currentTime,
-                    memento.deviceId, memento.source, memento.policyFlags,
-                    AKEY_EVENT_ACTION_UP, memento.flags | AKEY_EVENT_FLAG_CANCELED,
-                    memento.keyCode, memento.scanCode, memento.metaState, 0, memento.downTime));
-        }
-    }
-
-    for (size_t i = 0; i < mMotionMementos.size(); i++) {
-        const MotionMemento& memento = mMotionMementos.itemAt(i);
-        if (shouldCancelMotion(memento, options)) {
-            outEvents.push(new MotionEntry(currentTime,
-                    memento.deviceId, memento.source, memento.policyFlags,
-                    memento.hovering
-                            ? AMOTION_EVENT_ACTION_HOVER_EXIT
-                            : AMOTION_EVENT_ACTION_CANCEL,
-                    memento.flags, 0, 0, 0,
-                    memento.xPrecision, memento.yPrecision, memento.downTime,
-                    memento.displayId,
-                    memento.pointerCount, memento.pointerProperties, memento.pointerCoords,
-                    0, 0));
-        }
-    }
-}
-
-void InputDispatcher::InputState::clear() {
-    mKeyMementos.clear();
-    mMotionMementos.clear();
-    mFallbackKeys.clear();
-}
-
-void InputDispatcher::InputState::copyPointerStateTo(InputState& other) const {
-    for (size_t i = 0; i < mMotionMementos.size(); i++) {
-        const MotionMemento& memento = mMotionMementos.itemAt(i);
-        if (memento.source & AINPUT_SOURCE_CLASS_POINTER) {
-            for (size_t j = 0; j < other.mMotionMementos.size(); ) {
-                const MotionMemento& otherMemento = other.mMotionMementos.itemAt(j);
-                if (memento.deviceId == otherMemento.deviceId
-                        && memento.source == otherMemento.source
-                        && memento.displayId == otherMemento.displayId) {
-                    other.mMotionMementos.removeAt(j);
-                } else {
-                    j += 1;
-                }
-            }
-            other.mMotionMementos.push(memento);
-        }
-    }
-}
-
-int32_t InputDispatcher::InputState::getFallbackKey(int32_t originalKeyCode) {
-    ssize_t index = mFallbackKeys.indexOfKey(originalKeyCode);
-    return index >= 0 ? mFallbackKeys.valueAt(index) : -1;
-}
-
-void InputDispatcher::InputState::setFallbackKey(int32_t originalKeyCode,
-        int32_t fallbackKeyCode) {
-    ssize_t index = mFallbackKeys.indexOfKey(originalKeyCode);
-    if (index >= 0) {
-        mFallbackKeys.replaceValueAt(index, fallbackKeyCode);
-    } else {
-        mFallbackKeys.add(originalKeyCode, fallbackKeyCode);
-    }
-}
-
-void InputDispatcher::InputState::removeFallbackKey(int32_t originalKeyCode) {
-    mFallbackKeys.removeItem(originalKeyCode);
-}
-
-bool InputDispatcher::InputState::shouldCancelKey(const KeyMemento& memento,
-        const CancelationOptions& options) {
-    if (options.keyCode != -1 && memento.keyCode != options.keyCode) {
-        return false;
-    }
-
-    if (options.deviceId != -1 && memento.deviceId != options.deviceId) {
-        return false;
-    }
-
-    switch (options.mode) {
-    case CancelationOptions::CANCEL_ALL_EVENTS:
-    case CancelationOptions::CANCEL_NON_POINTER_EVENTS:
-        return true;
-    case CancelationOptions::CANCEL_FALLBACK_EVENTS:
-        return memento.flags & AKEY_EVENT_FLAG_FALLBACK;
-    default:
-        return false;
-    }
-}
-
-bool InputDispatcher::InputState::shouldCancelMotion(const MotionMemento& memento,
-        const CancelationOptions& options) {
-    if (options.deviceId != -1 && memento.deviceId != options.deviceId) {
-        return false;
-    }
-
-    switch (options.mode) {
-    case CancelationOptions::CANCEL_ALL_EVENTS:
-        return true;
-    case CancelationOptions::CANCEL_POINTER_EVENTS:
-        return memento.source & AINPUT_SOURCE_CLASS_POINTER;
-    case CancelationOptions::CANCEL_NON_POINTER_EVENTS:
-        return !(memento.source & AINPUT_SOURCE_CLASS_POINTER);
-    default:
-        return false;
-    }
-}
-
-
-// --- InputDispatcher::Connection ---
-
-InputDispatcher::Connection::Connection(const sp<InputChannel>& inputChannel,
-        const sp<InputWindowHandle>& inputWindowHandle, bool monitor) :
-        status(STATUS_NORMAL), inputChannel(inputChannel), inputWindowHandle(inputWindowHandle),
-        monitor(monitor),
-        inputPublisher(inputChannel), inputPublisherBlocked(false) {
-}
-
-InputDispatcher::Connection::~Connection() {
-}
-
-const char* InputDispatcher::Connection::getWindowName() const {
-    if (inputWindowHandle != NULL) {
-        return inputWindowHandle->getName().string();
-    }
-    if (monitor) {
-        return "monitor";
-    }
-    return "?";
-}
-
-const char* InputDispatcher::Connection::getStatusLabel() const {
-    switch (status) {
-    case STATUS_NORMAL:
-        return "NORMAL";
-
-    case STATUS_BROKEN:
-        return "BROKEN";
-
-    case STATUS_ZOMBIE:
-        return "ZOMBIE";
-
-    default:
-        return "UNKNOWN";
-    }
-}
-
-InputDispatcher::DispatchEntry* InputDispatcher::Connection::findWaitQueueEntry(uint32_t seq) {
-    for (DispatchEntry* entry = waitQueue.head; entry != NULL; entry = entry->next) {
-        if (entry->seq == seq) {
-            return entry;
-        }
-    }
-    return NULL;
-}
-
-
-// --- InputDispatcher::CommandEntry ---
-
-InputDispatcher::CommandEntry::CommandEntry(Command command) :
-    command(command), eventTime(0), keyEntry(NULL), userActivityEventType(0),
-    seq(0), handled(false) {
-}
-
-InputDispatcher::CommandEntry::~CommandEntry() {
-}
-
-
-// --- InputDispatcher::TouchState ---
-
-InputDispatcher::TouchState::TouchState() :
-    down(false), split(false), deviceId(-1), source(0), displayId(-1) {
-}
-
-InputDispatcher::TouchState::~TouchState() {
-}
-
-void InputDispatcher::TouchState::reset() {
-    down = false;
-    split = false;
-    deviceId = -1;
-    source = 0;
-    displayId = -1;
-    windows.clear();
-}
-
-void InputDispatcher::TouchState::copyFrom(const TouchState& other) {
-    down = other.down;
-    split = other.split;
-    deviceId = other.deviceId;
-    source = other.source;
-    displayId = other.displayId;
-    windows = other.windows;
-}
-
-void InputDispatcher::TouchState::addOrUpdateWindow(const sp<InputWindowHandle>& windowHandle,
-        int32_t targetFlags, BitSet32 pointerIds) {
-    if (targetFlags & InputTarget::FLAG_SPLIT) {
-        split = true;
-    }
-
-    for (size_t i = 0; i < windows.size(); i++) {
-        TouchedWindow& touchedWindow = windows.editItemAt(i);
-        if (touchedWindow.windowHandle == windowHandle) {
-            touchedWindow.targetFlags |= targetFlags;
-            if (targetFlags & InputTarget::FLAG_DISPATCH_AS_SLIPPERY_EXIT) {
-                touchedWindow.targetFlags &= ~InputTarget::FLAG_DISPATCH_AS_IS;
-            }
-            touchedWindow.pointerIds.value |= pointerIds.value;
-            return;
-        }
-    }
-
-    windows.push();
-
-    TouchedWindow& touchedWindow = windows.editTop();
-    touchedWindow.windowHandle = windowHandle;
-    touchedWindow.targetFlags = targetFlags;
-    touchedWindow.pointerIds = pointerIds;
-}
-
-void InputDispatcher::TouchState::removeWindow(const sp<InputWindowHandle>& windowHandle) {
-    for (size_t i = 0; i < windows.size(); i++) {
-        if (windows.itemAt(i).windowHandle == windowHandle) {
-            windows.removeAt(i);
-            return;
-        }
-    }
-}
-
-void InputDispatcher::TouchState::filterNonAsIsTouchWindows() {
-    for (size_t i = 0 ; i < windows.size(); ) {
-        TouchedWindow& window = windows.editItemAt(i);
-        if (window.targetFlags & (InputTarget::FLAG_DISPATCH_AS_IS
-                | InputTarget::FLAG_DISPATCH_AS_SLIPPERY_ENTER)) {
-            window.targetFlags &= ~InputTarget::FLAG_DISPATCH_MASK;
-            window.targetFlags |= InputTarget::FLAG_DISPATCH_AS_IS;
-            i += 1;
-        } else {
-            windows.removeAt(i);
-        }
-    }
-}
-
-sp<InputWindowHandle> InputDispatcher::TouchState::getFirstForegroundWindowHandle() const {
-    for (size_t i = 0; i < windows.size(); i++) {
-        const TouchedWindow& window = windows.itemAt(i);
-        if (window.targetFlags & InputTarget::FLAG_FOREGROUND) {
-            return window.windowHandle;
-        }
-    }
-    return NULL;
-}
-
-bool InputDispatcher::TouchState::isSlippery() const {
-    // Must have exactly one foreground window.
-    bool haveSlipperyForegroundWindow = false;
-    for (size_t i = 0; i < windows.size(); i++) {
-        const TouchedWindow& window = windows.itemAt(i);
-        if (window.targetFlags & InputTarget::FLAG_FOREGROUND) {
-            if (haveSlipperyForegroundWindow
-                    || !(window.windowHandle->getInfo()->layoutParamsFlags
-                            & InputWindowInfo::FLAG_SLIPPERY)) {
-                return false;
-            }
-            haveSlipperyForegroundWindow = true;
-        }
-    }
-    return haveSlipperyForegroundWindow;
-}
-
-
-// --- InputDispatcherThread ---
-
-InputDispatcherThread::InputDispatcherThread(const sp<InputDispatcherInterface>& dispatcher) :
-        Thread(/*canCallJava*/ true), mDispatcher(dispatcher) {
-}
-
-InputDispatcherThread::~InputDispatcherThread() {
-}
-
-bool InputDispatcherThread::threadLoop() {
-    mDispatcher->dispatchOnce();
-    return true;
-}
-
-} // namespace android
diff --git a/libs/input/InputDispatcher.h b/libs/input/InputDispatcher.h
deleted file mode 100644
index 9439124..0000000
--- a/libs/input/InputDispatcher.h
+++ /dev/null
@@ -1,1121 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_INPUT_DISPATCHER_H
-#define _UI_INPUT_DISPATCHER_H
-
-#include <input/Input.h>
-#include <input/InputTransport.h>
-#include <utils/KeyedVector.h>
-#include <utils/Vector.h>
-#include <utils/threads.h>
-#include <utils/Timers.h>
-#include <utils/RefBase.h>
-#include <utils/String8.h>
-#include <utils/Looper.h>
-#include <utils/BitSet.h>
-#include <cutils/atomic.h>
-
-#include <stddef.h>
-#include <unistd.h>
-#include <limits.h>
-
-#include "InputWindow.h"
-#include "InputApplication.h"
-#include "InputListener.h"
-
-
-namespace android {
-
-/*
- * Constants used to report the outcome of input event injection.
- */
-enum {
-    /* (INTERNAL USE ONLY) Specifies that injection is pending and its outcome is unknown. */
-    INPUT_EVENT_INJECTION_PENDING = -1,
-
-    /* Injection succeeded. */
-    INPUT_EVENT_INJECTION_SUCCEEDED = 0,
-
-    /* Injection failed because the injector did not have permission to inject
-     * into the application with input focus. */
-    INPUT_EVENT_INJECTION_PERMISSION_DENIED = 1,
-
-    /* Injection failed because there were no available input targets. */
-    INPUT_EVENT_INJECTION_FAILED = 2,
-
-    /* Injection failed due to a timeout. */
-    INPUT_EVENT_INJECTION_TIMED_OUT = 3
-};
-
-/*
- * Constants used to determine the input event injection synchronization mode.
- */
-enum {
-    /* Injection is asynchronous and is assumed always to be successful. */
-    INPUT_EVENT_INJECTION_SYNC_NONE = 0,
-
-    /* Waits for previous events to be dispatched so that the input dispatcher can determine
-     * whether input event injection willbe permitted based on the current input focus.
-     * Does not wait for the input event to finish processing. */
-    INPUT_EVENT_INJECTION_SYNC_WAIT_FOR_RESULT = 1,
-
-    /* Waits for the input event to be completely processed. */
-    INPUT_EVENT_INJECTION_SYNC_WAIT_FOR_FINISHED = 2,
-};
-
-
-/*
- * An input target specifies how an input event is to be dispatched to a particular window
- * including the window's input channel, control flags, a timeout, and an X / Y offset to
- * be added to input event coordinates to compensate for the absolute position of the
- * window area.
- */
-struct InputTarget {
-    enum {
-        /* This flag indicates that the event is being delivered to a foreground application. */
-        FLAG_FOREGROUND = 1 << 0,
-
-        /* This flag indicates that the target of a MotionEvent is partly or wholly
-         * obscured by another visible window above it.  The motion event should be
-         * delivered with flag AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED. */
-        FLAG_WINDOW_IS_OBSCURED = 1 << 1,
-
-        /* This flag indicates that a motion event is being split across multiple windows. */
-        FLAG_SPLIT = 1 << 2,
-
-        /* This flag indicates that the pointer coordinates dispatched to the application
-         * will be zeroed out to avoid revealing information to an application. This is
-         * used in conjunction with FLAG_DISPATCH_AS_OUTSIDE to prevent apps not sharing
-         * the same UID from watching all touches. */
-        FLAG_ZERO_COORDS = 1 << 3,
-
-        /* This flag indicates that the event should be sent as is.
-         * Should always be set unless the event is to be transmuted. */
-        FLAG_DISPATCH_AS_IS = 1 << 8,
-
-        /* This flag indicates that a MotionEvent with AMOTION_EVENT_ACTION_DOWN falls outside
-         * of the area of this target and so should instead be delivered as an
-         * AMOTION_EVENT_ACTION_OUTSIDE to this target. */
-        FLAG_DISPATCH_AS_OUTSIDE = 1 << 9,
-
-        /* This flag indicates that a hover sequence is starting in the given window.
-         * The event is transmuted into ACTION_HOVER_ENTER. */
-        FLAG_DISPATCH_AS_HOVER_ENTER = 1 << 10,
-
-        /* This flag indicates that a hover event happened outside of a window which handled
-         * previous hover events, signifying the end of the current hover sequence for that
-         * window.
-         * The event is transmuted into ACTION_HOVER_ENTER. */
-        FLAG_DISPATCH_AS_HOVER_EXIT = 1 << 11,
-
-        /* This flag indicates that the event should be canceled.
-         * It is used to transmute ACTION_MOVE into ACTION_CANCEL when a touch slips
-         * outside of a window. */
-        FLAG_DISPATCH_AS_SLIPPERY_EXIT = 1 << 12,
-
-        /* This flag indicates that the event should be dispatched as an initial down.
-         * It is used to transmute ACTION_MOVE into ACTION_DOWN when a touch slips
-         * into a new window. */
-        FLAG_DISPATCH_AS_SLIPPERY_ENTER = 1 << 13,
-
-        /* Mask for all dispatch modes. */
-        FLAG_DISPATCH_MASK = FLAG_DISPATCH_AS_IS
-                | FLAG_DISPATCH_AS_OUTSIDE
-                | FLAG_DISPATCH_AS_HOVER_ENTER
-                | FLAG_DISPATCH_AS_HOVER_EXIT
-                | FLAG_DISPATCH_AS_SLIPPERY_EXIT
-                | FLAG_DISPATCH_AS_SLIPPERY_ENTER,
-    };
-
-    // The input channel to be targeted.
-    sp<InputChannel> inputChannel;
-
-    // Flags for the input target.
-    int32_t flags;
-
-    // The x and y offset to add to a MotionEvent as it is delivered.
-    // (ignored for KeyEvents)
-    float xOffset, yOffset;
-
-    // Scaling factor to apply to MotionEvent as it is delivered.
-    // (ignored for KeyEvents)
-    float scaleFactor;
-
-    // The subset of pointer ids to include in motion events dispatched to this input target
-    // if FLAG_SPLIT is set.
-    BitSet32 pointerIds;
-};
-
-
-/*
- * Input dispatcher configuration.
- *
- * Specifies various options that modify the behavior of the input dispatcher.
- * The values provided here are merely defaults. The actual values will come from ViewConfiguration
- * and are passed into the dispatcher during initialization.
- */
-struct InputDispatcherConfiguration {
-    // The key repeat initial timeout.
-    nsecs_t keyRepeatTimeout;
-
-    // The key repeat inter-key delay.
-    nsecs_t keyRepeatDelay;
-
-    InputDispatcherConfiguration() :
-            keyRepeatTimeout(500 * 1000000LL),
-            keyRepeatDelay(50 * 1000000LL) { }
-};
-
-
-/*
- * Input dispatcher policy interface.
- *
- * The input reader policy is used by the input reader to interact with the Window Manager
- * and other system components.
- *
- * The actual implementation is partially supported by callbacks into the DVM
- * via JNI.  This interface is also mocked in the unit tests.
- */
-class InputDispatcherPolicyInterface : public virtual RefBase {
-protected:
-    InputDispatcherPolicyInterface() { }
-    virtual ~InputDispatcherPolicyInterface() { }
-
-public:
-    /* Notifies the system that a configuration change has occurred. */
-    virtual void notifyConfigurationChanged(nsecs_t when) = 0;
-
-    /* Notifies the system that an application is not responding.
-     * Returns a new timeout to continue waiting, or 0 to abort dispatch. */
-    virtual nsecs_t notifyANR(const sp<InputApplicationHandle>& inputApplicationHandle,
-            const sp<InputWindowHandle>& inputWindowHandle,
-            const String8& reason) = 0;
-
-    /* Notifies the system that an input channel is unrecoverably broken. */
-    virtual void notifyInputChannelBroken(const sp<InputWindowHandle>& inputWindowHandle) = 0;
-
-    /* Gets the input dispatcher configuration. */
-    virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) = 0;
-
-    /* Filters an input event.
-     * Return true to dispatch the event unmodified, false to consume the event.
-     * A filter can also transform and inject events later by passing POLICY_FLAG_FILTERED
-     * to injectInputEvent.
-     */
-    virtual bool filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags) = 0;
-
-    /* Intercepts a key event immediately before queueing it.
-     * The policy can use this method as an opportunity to perform power management functions
-     * and early event preprocessing such as updating policy flags.
-     *
-     * This method is expected to set the POLICY_FLAG_PASS_TO_USER policy flag if the event
-     * should be dispatched to applications.
-     */
-    virtual void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags) = 0;
-
-    /* Intercepts a touch, trackball or other motion event before queueing it.
-     * The policy can use this method as an opportunity to perform power management functions
-     * and early event preprocessing such as updating policy flags.
-     *
-     * This method is expected to set the POLICY_FLAG_PASS_TO_USER policy flag if the event
-     * should be dispatched to applications.
-     */
-    virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags) = 0;
-
-    /* Allows the policy a chance to intercept a key before dispatching. */
-    virtual nsecs_t interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle,
-            const KeyEvent* keyEvent, uint32_t policyFlags) = 0;
-
-    /* Allows the policy a chance to perform default processing for an unhandled key.
-     * Returns an alternate keycode to redispatch as a fallback, or 0 to give up. */
-    virtual bool dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle,
-            const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent) = 0;
-
-    /* Notifies the policy about switch events.
-     */
-    virtual void notifySwitch(nsecs_t when,
-            uint32_t switchValues, uint32_t switchMask, uint32_t policyFlags) = 0;
-
-    /* Poke user activity for an event dispatched to a window. */
-    virtual void pokeUserActivity(nsecs_t eventTime, int32_t eventType) = 0;
-
-    /* Checks whether a given application pid/uid has permission to inject input events
-     * into other applications.
-     *
-     * This method is special in that its implementation promises to be non-reentrant and
-     * is safe to call while holding other locks.  (Most other methods make no such guarantees!)
-     */
-    virtual bool checkInjectEventsPermissionNonReentrant(
-            int32_t injectorPid, int32_t injectorUid) = 0;
-};
-
-
-/* Notifies the system about input events generated by the input reader.
- * The dispatcher is expected to be mostly asynchronous. */
-class InputDispatcherInterface : public virtual RefBase, public InputListenerInterface {
-protected:
-    InputDispatcherInterface() { }
-    virtual ~InputDispatcherInterface() { }
-
-public:
-    /* Dumps the state of the input dispatcher.
-     *
-     * This method may be called on any thread (usually by the input manager). */
-    virtual void dump(String8& dump) = 0;
-
-    /* Called by the heatbeat to ensures that the dispatcher has not deadlocked. */
-    virtual void monitor() = 0;
-
-    /* Runs a single iteration of the dispatch loop.
-     * Nominally processes one queued event, a timeout, or a response from an input consumer.
-     *
-     * This method should only be called on the input dispatcher thread.
-     */
-    virtual void dispatchOnce() = 0;
-
-    /* Injects an input event and optionally waits for sync.
-     * The synchronization mode determines whether the method blocks while waiting for
-     * input injection to proceed.
-     * Returns one of the INPUT_EVENT_INJECTION_XXX constants.
-     *
-     * This method may be called on any thread (usually by the input manager).
-     */
-    virtual int32_t injectInputEvent(const InputEvent* event, int32_t displayId,
-            int32_t injectorPid, int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis,
-            uint32_t policyFlags) = 0;
-
-    /* Sets the list of input windows.
-     *
-     * This method may be called on any thread (usually by the input manager).
-     */
-    virtual void setInputWindows(const Vector<sp<InputWindowHandle> >& inputWindowHandles) = 0;
-
-    /* Sets the focused application.
-     *
-     * This method may be called on any thread (usually by the input manager).
-     */
-    virtual void setFocusedApplication(
-            const sp<InputApplicationHandle>& inputApplicationHandle) = 0;
-
-    /* Sets the input dispatching mode.
-     *
-     * This method may be called on any thread (usually by the input manager).
-     */
-    virtual void setInputDispatchMode(bool enabled, bool frozen) = 0;
-
-    /* Sets whether input event filtering is enabled.
-     * When enabled, incoming input events are sent to the policy's filterInputEvent
-     * method instead of being dispatched.  The filter is expected to use
-     * injectInputEvent to inject the events it would like to have dispatched.
-     * It should include POLICY_FLAG_FILTERED in the policy flags during injection.
-     */
-    virtual void setInputFilterEnabled(bool enabled) = 0;
-
-    /* Transfers touch focus from the window associated with one channel to the
-     * window associated with the other channel.
-     *
-     * Returns true on success.  False if the window did not actually have touch focus.
-     */
-    virtual bool transferTouchFocus(const sp<InputChannel>& fromChannel,
-            const sp<InputChannel>& toChannel) = 0;
-
-    /* Registers or unregister input channels that may be used as targets for input events.
-     * If monitor is true, the channel will receive a copy of all input events.
-     *
-     * These methods may be called on any thread (usually by the input manager).
-     */
-    virtual status_t registerInputChannel(const sp<InputChannel>& inputChannel,
-            const sp<InputWindowHandle>& inputWindowHandle, bool monitor) = 0;
-    virtual status_t unregisterInputChannel(const sp<InputChannel>& inputChannel) = 0;
-};
-
-/* Dispatches events to input targets.  Some functions of the input dispatcher, such as
- * identifying input targets, are controlled by a separate policy object.
- *
- * IMPORTANT INVARIANT:
- *     Because the policy can potentially block or cause re-entrance into the input dispatcher,
- *     the input dispatcher never calls into the policy while holding its internal locks.
- *     The implementation is also carefully designed to recover from scenarios such as an
- *     input channel becoming unregistered while identifying input targets or processing timeouts.
- *
- *     Methods marked 'Locked' must be called with the lock acquired.
- *
- *     Methods marked 'LockedInterruptible' must be called with the lock acquired but
- *     may during the course of their execution release the lock, call into the policy, and
- *     then reacquire the lock.  The caller is responsible for recovering gracefully.
- *
- *     A 'LockedInterruptible' method may called a 'Locked' method, but NOT vice-versa.
- */
-class InputDispatcher : public InputDispatcherInterface {
-protected:
-    virtual ~InputDispatcher();
-
-public:
-    explicit InputDispatcher(const sp<InputDispatcherPolicyInterface>& policy);
-
-    virtual void dump(String8& dump);
-    virtual void monitor();
-
-    virtual void dispatchOnce();
-
-    virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args);
-    virtual void notifyKey(const NotifyKeyArgs* args);
-    virtual void notifyMotion(const NotifyMotionArgs* args);
-    virtual void notifySwitch(const NotifySwitchArgs* args);
-    virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args);
-
-    virtual int32_t injectInputEvent(const InputEvent* event, int32_t displayId,
-            int32_t injectorPid, int32_t injectorUid, int32_t syncMode, int32_t timeoutMillis,
-            uint32_t policyFlags);
-
-    virtual void setInputWindows(const Vector<sp<InputWindowHandle> >& inputWindowHandles);
-    virtual void setFocusedApplication(const sp<InputApplicationHandle>& inputApplicationHandle);
-    virtual void setInputDispatchMode(bool enabled, bool frozen);
-    virtual void setInputFilterEnabled(bool enabled);
-
-    virtual bool transferTouchFocus(const sp<InputChannel>& fromChannel,
-            const sp<InputChannel>& toChannel);
-
-    virtual status_t registerInputChannel(const sp<InputChannel>& inputChannel,
-            const sp<InputWindowHandle>& inputWindowHandle, bool monitor);
-    virtual status_t unregisterInputChannel(const sp<InputChannel>& inputChannel);
-
-private:
-    template <typename T>
-    struct Link {
-        T* next;
-        T* prev;
-
-    protected:
-        inline Link() : next(NULL), prev(NULL) { }
-    };
-
-    struct InjectionState {
-        mutable int32_t refCount;
-
-        int32_t injectorPid;
-        int32_t injectorUid;
-        int32_t injectionResult;  // initially INPUT_EVENT_INJECTION_PENDING
-        bool injectionIsAsync; // set to true if injection is not waiting for the result
-        int32_t pendingForegroundDispatches; // the number of foreground dispatches in progress
-
-        InjectionState(int32_t injectorPid, int32_t injectorUid);
-        void release();
-
-    private:
-        ~InjectionState();
-    };
-
-    struct EventEntry : Link<EventEntry> {
-        enum {
-            TYPE_CONFIGURATION_CHANGED,
-            TYPE_DEVICE_RESET,
-            TYPE_KEY,
-            TYPE_MOTION
-        };
-
-        mutable int32_t refCount;
-        int32_t type;
-        nsecs_t eventTime;
-        uint32_t policyFlags;
-        InjectionState* injectionState;
-
-        bool dispatchInProgress; // initially false, set to true while dispatching
-
-        inline bool isInjected() const { return injectionState != NULL; }
-
-        void release();
-
-        virtual void appendDescription(String8& msg) const = 0;
-
-    protected:
-        EventEntry(int32_t type, nsecs_t eventTime, uint32_t policyFlags);
-        virtual ~EventEntry();
-        void releaseInjectionState();
-    };
-
-    struct ConfigurationChangedEntry : EventEntry {
-        ConfigurationChangedEntry(nsecs_t eventTime);
-        virtual void appendDescription(String8& msg) const;
-
-    protected:
-        virtual ~ConfigurationChangedEntry();
-    };
-
-    struct DeviceResetEntry : EventEntry {
-        int32_t deviceId;
-
-        DeviceResetEntry(nsecs_t eventTime, int32_t deviceId);
-        virtual void appendDescription(String8& msg) const;
-
-    protected:
-        virtual ~DeviceResetEntry();
-    };
-
-    struct KeyEntry : EventEntry {
-        int32_t deviceId;
-        uint32_t source;
-        int32_t action;
-        int32_t flags;
-        int32_t keyCode;
-        int32_t scanCode;
-        int32_t metaState;
-        int32_t repeatCount;
-        nsecs_t downTime;
-
-        bool syntheticRepeat; // set to true for synthetic key repeats
-
-        enum InterceptKeyResult {
-            INTERCEPT_KEY_RESULT_UNKNOWN,
-            INTERCEPT_KEY_RESULT_SKIP,
-            INTERCEPT_KEY_RESULT_CONTINUE,
-            INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER,
-        };
-        InterceptKeyResult interceptKeyResult; // set based on the interception result
-        nsecs_t interceptKeyWakeupTime; // used with INTERCEPT_KEY_RESULT_TRY_AGAIN_LATER
-
-        KeyEntry(nsecs_t eventTime,
-                int32_t deviceId, uint32_t source, uint32_t policyFlags, int32_t action,
-                int32_t flags, int32_t keyCode, int32_t scanCode, int32_t metaState,
-                int32_t repeatCount, nsecs_t downTime);
-        virtual void appendDescription(String8& msg) const;
-        void recycle();
-
-    protected:
-        virtual ~KeyEntry();
-    };
-
-    struct MotionEntry : EventEntry {
-        nsecs_t eventTime;
-        int32_t deviceId;
-        uint32_t source;
-        int32_t action;
-        int32_t flags;
-        int32_t metaState;
-        int32_t buttonState;
-        int32_t edgeFlags;
-        float xPrecision;
-        float yPrecision;
-        nsecs_t downTime;
-        int32_t displayId;
-        uint32_t pointerCount;
-        PointerProperties pointerProperties[MAX_POINTERS];
-        PointerCoords pointerCoords[MAX_POINTERS];
-
-        MotionEntry(nsecs_t eventTime,
-                int32_t deviceId, uint32_t source, uint32_t policyFlags,
-                int32_t action, int32_t flags,
-                int32_t metaState, int32_t buttonState, int32_t edgeFlags,
-                float xPrecision, float yPrecision,
-                nsecs_t downTime, int32_t displayId, uint32_t pointerCount,
-                const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
-                float xOffset, float yOffset);
-        virtual void appendDescription(String8& msg) const;
-
-    protected:
-        virtual ~MotionEntry();
-    };
-
-    // Tracks the progress of dispatching a particular event to a particular connection.
-    struct DispatchEntry : Link<DispatchEntry> {
-        const uint32_t seq; // unique sequence number, never 0
-
-        EventEntry* eventEntry; // the event to dispatch
-        int32_t targetFlags;
-        float xOffset;
-        float yOffset;
-        float scaleFactor;
-        nsecs_t deliveryTime; // time when the event was actually delivered
-
-        // Set to the resolved action and flags when the event is enqueued.
-        int32_t resolvedAction;
-        int32_t resolvedFlags;
-
-        DispatchEntry(EventEntry* eventEntry,
-                int32_t targetFlags, float xOffset, float yOffset, float scaleFactor);
-        ~DispatchEntry();
-
-        inline bool hasForegroundTarget() const {
-            return targetFlags & InputTarget::FLAG_FOREGROUND;
-        }
-
-        inline bool isSplit() const {
-            return targetFlags & InputTarget::FLAG_SPLIT;
-        }
-
-    private:
-        static volatile int32_t sNextSeqAtomic;
-
-        static uint32_t nextSeq();
-    };
-
-    // A command entry captures state and behavior for an action to be performed in the
-    // dispatch loop after the initial processing has taken place.  It is essentially
-    // a kind of continuation used to postpone sensitive policy interactions to a point
-    // in the dispatch loop where it is safe to release the lock (generally after finishing
-    // the critical parts of the dispatch cycle).
-    //
-    // The special thing about commands is that they can voluntarily release and reacquire
-    // the dispatcher lock at will.  Initially when the command starts running, the
-    // dispatcher lock is held.  However, if the command needs to call into the policy to
-    // do some work, it can release the lock, do the work, then reacquire the lock again
-    // before returning.
-    //
-    // This mechanism is a bit clunky but it helps to preserve the invariant that the dispatch
-    // never calls into the policy while holding its lock.
-    //
-    // Commands are implicitly 'LockedInterruptible'.
-    struct CommandEntry;
-    typedef void (InputDispatcher::*Command)(CommandEntry* commandEntry);
-
-    class Connection;
-    struct CommandEntry : Link<CommandEntry> {
-        CommandEntry(Command command);
-        ~CommandEntry();
-
-        Command command;
-
-        // parameters for the command (usage varies by command)
-        sp<Connection> connection;
-        nsecs_t eventTime;
-        KeyEntry* keyEntry;
-        sp<InputApplicationHandle> inputApplicationHandle;
-        sp<InputWindowHandle> inputWindowHandle;
-        String8 reason;
-        int32_t userActivityEventType;
-        uint32_t seq;
-        bool handled;
-    };
-
-    // Generic queue implementation.
-    template <typename T>
-    struct Queue {
-        T* head;
-        T* tail;
-
-        inline Queue() : head(NULL), tail(NULL) {
-        }
-
-        inline bool isEmpty() const {
-            return !head;
-        }
-
-        inline void enqueueAtTail(T* entry) {
-            entry->prev = tail;
-            if (tail) {
-                tail->next = entry;
-            } else {
-                head = entry;
-            }
-            entry->next = NULL;
-            tail = entry;
-        }
-
-        inline void enqueueAtHead(T* entry) {
-            entry->next = head;
-            if (head) {
-                head->prev = entry;
-            } else {
-                tail = entry;
-            }
-            entry->prev = NULL;
-            head = entry;
-        }
-
-        inline void dequeue(T* entry) {
-            if (entry->prev) {
-                entry->prev->next = entry->next;
-            } else {
-                head = entry->next;
-            }
-            if (entry->next) {
-                entry->next->prev = entry->prev;
-            } else {
-                tail = entry->prev;
-            }
-        }
-
-        inline T* dequeueAtHead() {
-            T* entry = head;
-            head = entry->next;
-            if (head) {
-                head->prev = NULL;
-            } else {
-                tail = NULL;
-            }
-            return entry;
-        }
-
-        uint32_t count() const;
-    };
-
-    /* Specifies which events are to be canceled and why. */
-    struct CancelationOptions {
-        enum Mode {
-            CANCEL_ALL_EVENTS = 0,
-            CANCEL_POINTER_EVENTS = 1,
-            CANCEL_NON_POINTER_EVENTS = 2,
-            CANCEL_FALLBACK_EVENTS = 3,
-        };
-
-        // The criterion to use to determine which events should be canceled.
-        Mode mode;
-
-        // Descriptive reason for the cancelation.
-        const char* reason;
-
-        // The specific keycode of the key event to cancel, or -1 to cancel any key event.
-        int32_t keyCode;
-
-        // The specific device id of events to cancel, or -1 to cancel events from any device.
-        int32_t deviceId;
-
-        CancelationOptions(Mode mode, const char* reason) :
-                mode(mode), reason(reason), keyCode(-1), deviceId(-1) { }
-    };
-
-    /* Tracks dispatched key and motion event state so that cancelation events can be
-     * synthesized when events are dropped. */
-    class InputState {
-    public:
-        InputState();
-        ~InputState();
-
-        // Returns true if there is no state to be canceled.
-        bool isNeutral() const;
-
-        // Returns true if the specified source is known to have received a hover enter
-        // motion event.
-        bool isHovering(int32_t deviceId, uint32_t source, int32_t displayId) const;
-
-        // Records tracking information for a key event that has just been published.
-        // Returns true if the event should be delivered, false if it is inconsistent
-        // and should be skipped.
-        bool trackKey(const KeyEntry* entry, int32_t action, int32_t flags);
-
-        // Records tracking information for a motion event that has just been published.
-        // Returns true if the event should be delivered, false if it is inconsistent
-        // and should be skipped.
-        bool trackMotion(const MotionEntry* entry, int32_t action, int32_t flags);
-
-        // Synthesizes cancelation events for the current state and resets the tracked state.
-        void synthesizeCancelationEvents(nsecs_t currentTime,
-                Vector<EventEntry*>& outEvents, const CancelationOptions& options);
-
-        // Clears the current state.
-        void clear();
-
-        // Copies pointer-related parts of the input state to another instance.
-        void copyPointerStateTo(InputState& other) const;
-
-        // Gets the fallback key associated with a keycode.
-        // Returns -1 if none.
-        // Returns AKEYCODE_UNKNOWN if we are only dispatching the unhandled key to the policy.
-        int32_t getFallbackKey(int32_t originalKeyCode);
-
-        // Sets the fallback key for a particular keycode.
-        void setFallbackKey(int32_t originalKeyCode, int32_t fallbackKeyCode);
-
-        // Removes the fallback key for a particular keycode.
-        void removeFallbackKey(int32_t originalKeyCode);
-
-        inline const KeyedVector<int32_t, int32_t>& getFallbackKeys() const {
-            return mFallbackKeys;
-        }
-
-    private:
-        struct KeyMemento {
-            int32_t deviceId;
-            uint32_t source;
-            int32_t keyCode;
-            int32_t scanCode;
-            int32_t metaState;
-            int32_t flags;
-            nsecs_t downTime;
-            uint32_t policyFlags;
-        };
-
-        struct MotionMemento {
-            int32_t deviceId;
-            uint32_t source;
-            int32_t flags;
-            float xPrecision;
-            float yPrecision;
-            nsecs_t downTime;
-            int32_t displayId;
-            uint32_t pointerCount;
-            PointerProperties pointerProperties[MAX_POINTERS];
-            PointerCoords pointerCoords[MAX_POINTERS];
-            bool hovering;
-            uint32_t policyFlags;
-
-            void setPointers(const MotionEntry* entry);
-        };
-
-        Vector<KeyMemento> mKeyMementos;
-        Vector<MotionMemento> mMotionMementos;
-        KeyedVector<int32_t, int32_t> mFallbackKeys;
-
-        ssize_t findKeyMemento(const KeyEntry* entry) const;
-        ssize_t findMotionMemento(const MotionEntry* entry, bool hovering) const;
-
-        void addKeyMemento(const KeyEntry* entry, int32_t flags);
-        void addMotionMemento(const MotionEntry* entry, int32_t flags, bool hovering);
-
-        static bool shouldCancelKey(const KeyMemento& memento,
-                const CancelationOptions& options);
-        static bool shouldCancelMotion(const MotionMemento& memento,
-                const CancelationOptions& options);
-    };
-
-    /* Manages the dispatch state associated with a single input channel. */
-    class Connection : public RefBase {
-    protected:
-        virtual ~Connection();
-
-    public:
-        enum Status {
-            // Everything is peachy.
-            STATUS_NORMAL,
-            // An unrecoverable communication error has occurred.
-            STATUS_BROKEN,
-            // The input channel has been unregistered.
-            STATUS_ZOMBIE
-        };
-
-        Status status;
-        sp<InputChannel> inputChannel; // never null
-        sp<InputWindowHandle> inputWindowHandle; // may be null
-        bool monitor;
-        InputPublisher inputPublisher;
-        InputState inputState;
-
-        // True if the socket is full and no further events can be published until
-        // the application consumes some of the input.
-        bool inputPublisherBlocked;
-
-        // Queue of events that need to be published to the connection.
-        Queue<DispatchEntry> outboundQueue;
-
-        // Queue of events that have been published to the connection but that have not
-        // yet received a "finished" response from the application.
-        Queue<DispatchEntry> waitQueue;
-
-        explicit Connection(const sp<InputChannel>& inputChannel,
-                const sp<InputWindowHandle>& inputWindowHandle, bool monitor);
-
-        inline const char* getInputChannelName() const { return inputChannel->getName().string(); }
-
-        const char* getWindowName() const;
-        const char* getStatusLabel() const;
-
-        DispatchEntry* findWaitQueueEntry(uint32_t seq);
-    };
-
-    enum DropReason {
-        DROP_REASON_NOT_DROPPED = 0,
-        DROP_REASON_POLICY = 1,
-        DROP_REASON_APP_SWITCH = 2,
-        DROP_REASON_DISABLED = 3,
-        DROP_REASON_BLOCKED = 4,
-        DROP_REASON_STALE = 5,
-    };
-
-    sp<InputDispatcherPolicyInterface> mPolicy;
-    InputDispatcherConfiguration mConfig;
-
-    Mutex mLock;
-
-    Condition mDispatcherIsAliveCondition;
-
-    sp<Looper> mLooper;
-
-    EventEntry* mPendingEvent;
-    Queue<EventEntry> mInboundQueue;
-    Queue<EventEntry> mRecentQueue;
-    Queue<CommandEntry> mCommandQueue;
-
-    void dispatchOnceInnerLocked(nsecs_t* nextWakeupTime);
-
-    // Enqueues an inbound event.  Returns true if mLooper->wake() should be called.
-    bool enqueueInboundEventLocked(EventEntry* entry);
-
-    // Cleans up input state when dropping an inbound event.
-    void dropInboundEventLocked(EventEntry* entry, DropReason dropReason);
-
-    // Adds an event to a queue of recent events for debugging purposes.
-    void addRecentEventLocked(EventEntry* entry);
-
-    // App switch latency optimization.
-    bool mAppSwitchSawKeyDown;
-    nsecs_t mAppSwitchDueTime;
-
-    static bool isAppSwitchKeyCode(int32_t keyCode);
-    bool isAppSwitchKeyEventLocked(KeyEntry* keyEntry);
-    bool isAppSwitchPendingLocked();
-    void resetPendingAppSwitchLocked(bool handled);
-
-    // Stale event latency optimization.
-    static bool isStaleEventLocked(nsecs_t currentTime, EventEntry* entry);
-
-    // Blocked event latency optimization.  Drops old events when the user intends
-    // to transfer focus to a new application.
-    EventEntry* mNextUnblockedEvent;
-
-    sp<InputWindowHandle> findTouchedWindowAtLocked(int32_t displayId, int32_t x, int32_t y);
-
-    // All registered connections mapped by channel file descriptor.
-    KeyedVector<int, sp<Connection> > mConnectionsByFd;
-
-    ssize_t getConnectionIndexLocked(const sp<InputChannel>& inputChannel);
-
-    // Input channels that will receive a copy of all input events.
-    Vector<sp<InputChannel> > mMonitoringChannels;
-
-    // Event injection and synchronization.
-    Condition mInjectionResultAvailableCondition;
-    bool hasInjectionPermission(int32_t injectorPid, int32_t injectorUid);
-    void setInjectionResultLocked(EventEntry* entry, int32_t injectionResult);
-
-    Condition mInjectionSyncFinishedCondition;
-    void incrementPendingForegroundDispatchesLocked(EventEntry* entry);
-    void decrementPendingForegroundDispatchesLocked(EventEntry* entry);
-
-    // Key repeat tracking.
-    struct KeyRepeatState {
-        KeyEntry* lastKeyEntry; // or null if no repeat
-        nsecs_t nextRepeatTime;
-    } mKeyRepeatState;
-
-    void resetKeyRepeatLocked();
-    KeyEntry* synthesizeKeyRepeatLocked(nsecs_t currentTime);
-
-    // Deferred command processing.
-    bool haveCommandsLocked() const;
-    bool runCommandsLockedInterruptible();
-    CommandEntry* postCommandLocked(Command command);
-
-    // Input filter processing.
-    bool shouldSendKeyToInputFilterLocked(const NotifyKeyArgs* args);
-    bool shouldSendMotionToInputFilterLocked(const NotifyMotionArgs* args);
-
-    // Inbound event processing.
-    void drainInboundQueueLocked();
-    void releasePendingEventLocked();
-    void releaseInboundEventLocked(EventEntry* entry);
-
-    // Dispatch state.
-    bool mDispatchEnabled;
-    bool mDispatchFrozen;
-    bool mInputFilterEnabled;
-
-    Vector<sp<InputWindowHandle> > mWindowHandles;
-
-    sp<InputWindowHandle> getWindowHandleLocked(const sp<InputChannel>& inputChannel) const;
-    bool hasWindowHandleLocked(const sp<InputWindowHandle>& windowHandle) const;
-
-    // Focus tracking for keys, trackball, etc.
-    sp<InputWindowHandle> mFocusedWindowHandle;
-
-    // Focus tracking for touch.
-    struct TouchedWindow {
-        sp<InputWindowHandle> windowHandle;
-        int32_t targetFlags;
-        BitSet32 pointerIds;        // zero unless target flag FLAG_SPLIT is set
-    };
-    struct TouchState {
-        bool down;
-        bool split;
-        int32_t deviceId; // id of the device that is currently down, others are rejected
-        uint32_t source;  // source of the device that is current down, others are rejected
-        int32_t displayId; // id to the display that currently has a touch, others are rejected
-        Vector<TouchedWindow> windows;
-
-        TouchState();
-        ~TouchState();
-        void reset();
-        void copyFrom(const TouchState& other);
-        void addOrUpdateWindow(const sp<InputWindowHandle>& windowHandle,
-                int32_t targetFlags, BitSet32 pointerIds);
-        void removeWindow(const sp<InputWindowHandle>& windowHandle);
-        void filterNonAsIsTouchWindows();
-        sp<InputWindowHandle> getFirstForegroundWindowHandle() const;
-        bool isSlippery() const;
-    };
-
-    KeyedVector<int32_t, TouchState> mTouchStatesByDisplay;
-    TouchState mTempTouchState;
-
-    // Focused application.
-    sp<InputApplicationHandle> mFocusedApplicationHandle;
-
-    // Dispatcher state at time of last ANR.
-    String8 mLastANRState;
-
-    // Dispatch inbound events.
-    bool dispatchConfigurationChangedLocked(
-            nsecs_t currentTime, ConfigurationChangedEntry* entry);
-    bool dispatchDeviceResetLocked(
-            nsecs_t currentTime, DeviceResetEntry* entry);
-    bool dispatchKeyLocked(
-            nsecs_t currentTime, KeyEntry* entry,
-            DropReason* dropReason, nsecs_t* nextWakeupTime);
-    bool dispatchMotionLocked(
-            nsecs_t currentTime, MotionEntry* entry,
-            DropReason* dropReason, nsecs_t* nextWakeupTime);
-    void dispatchEventLocked(nsecs_t currentTime, EventEntry* entry,
-            const Vector<InputTarget>& inputTargets);
-
-    void logOutboundKeyDetailsLocked(const char* prefix, const KeyEntry* entry);
-    void logOutboundMotionDetailsLocked(const char* prefix, const MotionEntry* entry);
-
-    // Keeping track of ANR timeouts.
-    enum InputTargetWaitCause {
-        INPUT_TARGET_WAIT_CAUSE_NONE,
-        INPUT_TARGET_WAIT_CAUSE_SYSTEM_NOT_READY,
-        INPUT_TARGET_WAIT_CAUSE_APPLICATION_NOT_READY,
-    };
-
-    InputTargetWaitCause mInputTargetWaitCause;
-    nsecs_t mInputTargetWaitStartTime;
-    nsecs_t mInputTargetWaitTimeoutTime;
-    bool mInputTargetWaitTimeoutExpired;
-    sp<InputApplicationHandle> mInputTargetWaitApplicationHandle;
-
-    // Contains the last window which received a hover event.
-    sp<InputWindowHandle> mLastHoverWindowHandle;
-
-    // Finding targets for input events.
-    int32_t handleTargetsNotReadyLocked(nsecs_t currentTime, const EventEntry* entry,
-            const sp<InputApplicationHandle>& applicationHandle,
-            const sp<InputWindowHandle>& windowHandle,
-            nsecs_t* nextWakeupTime, const char* reason);
-    void resumeAfterTargetsNotReadyTimeoutLocked(nsecs_t newTimeout,
-            const sp<InputChannel>& inputChannel);
-    nsecs_t getTimeSpentWaitingForApplicationLocked(nsecs_t currentTime);
-    void resetANRTimeoutsLocked();
-
-    int32_t findFocusedWindowTargetsLocked(nsecs_t currentTime, const EventEntry* entry,
-            Vector<InputTarget>& inputTargets, nsecs_t* nextWakeupTime);
-    int32_t findTouchedWindowTargetsLocked(nsecs_t currentTime, const MotionEntry* entry,
-            Vector<InputTarget>& inputTargets, nsecs_t* nextWakeupTime,
-            bool* outConflictingPointerActions);
-
-    void addWindowTargetLocked(const sp<InputWindowHandle>& windowHandle,
-            int32_t targetFlags, BitSet32 pointerIds, Vector<InputTarget>& inputTargets);
-    void addMonitoringTargetsLocked(Vector<InputTarget>& inputTargets);
-
-    void pokeUserActivityLocked(const EventEntry* eventEntry);
-    bool checkInjectionPermission(const sp<InputWindowHandle>& windowHandle,
-            const InjectionState* injectionState);
-    bool isWindowObscuredAtPointLocked(const sp<InputWindowHandle>& windowHandle,
-            int32_t x, int32_t y) const;
-    bool isWindowReadyForMoreInputLocked(nsecs_t currentTime,
-            const sp<InputWindowHandle>& windowHandle, const EventEntry* eventEntry);
-    String8 getApplicationWindowLabelLocked(const sp<InputApplicationHandle>& applicationHandle,
-            const sp<InputWindowHandle>& windowHandle);
-
-    // Manage the dispatch cycle for a single connection.
-    // These methods are deliberately not Interruptible because doing all of the work
-    // with the mutex held makes it easier to ensure that connection invariants are maintained.
-    // If needed, the methods post commands to run later once the critical bits are done.
-    void prepareDispatchCycleLocked(nsecs_t currentTime, const sp<Connection>& connection,
-            EventEntry* eventEntry, const InputTarget* inputTarget);
-    void enqueueDispatchEntriesLocked(nsecs_t currentTime, const sp<Connection>& connection,
-            EventEntry* eventEntry, const InputTarget* inputTarget);
-    void enqueueDispatchEntryLocked(const sp<Connection>& connection,
-            EventEntry* eventEntry, const InputTarget* inputTarget, int32_t dispatchMode);
-    void startDispatchCycleLocked(nsecs_t currentTime, const sp<Connection>& connection);
-    void finishDispatchCycleLocked(nsecs_t currentTime, const sp<Connection>& connection,
-            uint32_t seq, bool handled);
-    void abortBrokenDispatchCycleLocked(nsecs_t currentTime, const sp<Connection>& connection,
-            bool notify);
-    void drainDispatchQueueLocked(Queue<DispatchEntry>* queue);
-    void releaseDispatchEntryLocked(DispatchEntry* dispatchEntry);
-    static int handleReceiveCallback(int fd, int events, void* data);
-
-    void synthesizeCancelationEventsForAllConnectionsLocked(
-            const CancelationOptions& options);
-    void synthesizeCancelationEventsForInputChannelLocked(const sp<InputChannel>& channel,
-            const CancelationOptions& options);
-    void synthesizeCancelationEventsForConnectionLocked(const sp<Connection>& connection,
-            const CancelationOptions& options);
-
-    // Splitting motion events across windows.
-    MotionEntry* splitMotionEvent(const MotionEntry* originalMotionEntry, BitSet32 pointerIds);
-
-    // Reset and drop everything the dispatcher is doing.
-    void resetAndDropEverythingLocked(const char* reason);
-
-    // Dump state.
-    void dumpDispatchStateLocked(String8& dump);
-    void logDispatchStateLocked();
-
-    // Registration.
-    void removeMonitorChannelLocked(const sp<InputChannel>& inputChannel);
-    status_t unregisterInputChannelLocked(const sp<InputChannel>& inputChannel, bool notify);
-
-    // Add or remove a connection to the mActiveConnections vector.
-    void activateConnectionLocked(Connection* connection);
-    void deactivateConnectionLocked(Connection* connection);
-
-    // Interesting events that we might like to log or tell the framework about.
-    void onDispatchCycleFinishedLocked(
-            nsecs_t currentTime, const sp<Connection>& connection, uint32_t seq, bool handled);
-    void onDispatchCycleBrokenLocked(
-            nsecs_t currentTime, const sp<Connection>& connection);
-    void onANRLocked(
-            nsecs_t currentTime, const sp<InputApplicationHandle>& applicationHandle,
-            const sp<InputWindowHandle>& windowHandle,
-            nsecs_t eventTime, nsecs_t waitStartTime, const char* reason);
-
-    // Outbound policy interactions.
-    void doNotifyConfigurationChangedInterruptible(CommandEntry* commandEntry);
-    void doNotifyInputChannelBrokenLockedInterruptible(CommandEntry* commandEntry);
-    void doNotifyANRLockedInterruptible(CommandEntry* commandEntry);
-    void doInterceptKeyBeforeDispatchingLockedInterruptible(CommandEntry* commandEntry);
-    void doDispatchCycleFinishedLockedInterruptible(CommandEntry* commandEntry);
-    bool afterKeyEventLockedInterruptible(const sp<Connection>& connection,
-            DispatchEntry* dispatchEntry, KeyEntry* keyEntry, bool handled);
-    bool afterMotionEventLockedInterruptible(const sp<Connection>& connection,
-            DispatchEntry* dispatchEntry, MotionEntry* motionEntry, bool handled);
-    void doPokeUserActivityLockedInterruptible(CommandEntry* commandEntry);
-    void initializeKeyEvent(KeyEvent* event, const KeyEntry* entry);
-
-    // Statistics gathering.
-    void updateDispatchStatisticsLocked(nsecs_t currentTime, const EventEntry* entry,
-            int32_t injectionResult, nsecs_t timeSpentWaitingForApplication);
-    void traceInboundQueueLengthLocked();
-    void traceOutboundQueueLengthLocked(const sp<Connection>& connection);
-    void traceWaitQueueLengthLocked(const sp<Connection>& connection);
-};
-
-/* Enqueues and dispatches input events, endlessly. */
-class InputDispatcherThread : public Thread {
-public:
-    explicit InputDispatcherThread(const sp<InputDispatcherInterface>& dispatcher);
-    ~InputDispatcherThread();
-
-private:
-    virtual bool threadLoop();
-
-    sp<InputDispatcherInterface> mDispatcher;
-};
-
-} // namespace android
-
-#endif // _UI_INPUT_DISPATCHER_H
diff --git a/libs/input/InputListener.cpp b/libs/input/InputListener.cpp
deleted file mode 100644
index 85bb0ed..0000000
--- a/libs/input/InputListener.cpp
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#define LOG_TAG "InputListener"
-
-//#define LOG_NDEBUG 0
-
-#include "InputListener.h"
-
-#include <cutils/log.h>
-
-namespace android {
-
-// --- NotifyConfigurationChangedArgs ---
-
-NotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(nsecs_t eventTime) :
-        eventTime(eventTime) {
-}
-
-NotifyConfigurationChangedArgs::NotifyConfigurationChangedArgs(
-        const NotifyConfigurationChangedArgs& other) :
-        eventTime(other.eventTime) {
-}
-
-void NotifyConfigurationChangedArgs::notify(const sp<InputListenerInterface>& listener) const {
-    listener->notifyConfigurationChanged(this);
-}
-
-
-// --- NotifyKeyArgs ---
-
-NotifyKeyArgs::NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source,
-        uint32_t policyFlags,
-        int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
-        int32_t metaState, nsecs_t downTime) :
-        eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags),
-        action(action), flags(flags), keyCode(keyCode), scanCode(scanCode),
-        metaState(metaState), downTime(downTime) {
-}
-
-NotifyKeyArgs::NotifyKeyArgs(const NotifyKeyArgs& other) :
-        eventTime(other.eventTime), deviceId(other.deviceId), source(other.source),
-        policyFlags(other.policyFlags),
-        action(other.action), flags(other.flags),
-        keyCode(other.keyCode), scanCode(other.scanCode),
-        metaState(other.metaState), downTime(other.downTime) {
-}
-
-void NotifyKeyArgs::notify(const sp<InputListenerInterface>& listener) const {
-    listener->notifyKey(this);
-}
-
-
-// --- NotifyMotionArgs ---
-
-NotifyMotionArgs::NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source,
-        uint32_t policyFlags,
-        int32_t action, int32_t flags, int32_t metaState, int32_t buttonState,
-        int32_t edgeFlags, int32_t displayId, uint32_t pointerCount,
-        const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
-        float xPrecision, float yPrecision, nsecs_t downTime) :
-        eventTime(eventTime), deviceId(deviceId), source(source), policyFlags(policyFlags),
-        action(action), flags(flags), metaState(metaState), buttonState(buttonState),
-        edgeFlags(edgeFlags), displayId(displayId), pointerCount(pointerCount),
-        xPrecision(xPrecision), yPrecision(yPrecision), downTime(downTime) {
-    for (uint32_t i = 0; i < pointerCount; i++) {
-        this->pointerProperties[i].copyFrom(pointerProperties[i]);
-        this->pointerCoords[i].copyFrom(pointerCoords[i]);
-    }
-}
-
-NotifyMotionArgs::NotifyMotionArgs(const NotifyMotionArgs& other) :
-        eventTime(other.eventTime), deviceId(other.deviceId), source(other.source),
-        policyFlags(other.policyFlags),
-        action(other.action), flags(other.flags),
-        metaState(other.metaState), buttonState(other.buttonState),
-        edgeFlags(other.edgeFlags), displayId(other.displayId),
-        pointerCount(other.pointerCount),
-        xPrecision(other.xPrecision), yPrecision(other.yPrecision), downTime(other.downTime) {
-    for (uint32_t i = 0; i < pointerCount; i++) {
-        pointerProperties[i].copyFrom(other.pointerProperties[i]);
-        pointerCoords[i].copyFrom(other.pointerCoords[i]);
-    }
-}
-
-void NotifyMotionArgs::notify(const sp<InputListenerInterface>& listener) const {
-    listener->notifyMotion(this);
-}
-
-
-// --- NotifySwitchArgs ---
-
-NotifySwitchArgs::NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags,
-        uint32_t switchValues, uint32_t switchMask) :
-        eventTime(eventTime), policyFlags(policyFlags),
-        switchValues(switchValues), switchMask(switchMask) {
-}
-
-NotifySwitchArgs::NotifySwitchArgs(const NotifySwitchArgs& other) :
-        eventTime(other.eventTime), policyFlags(other.policyFlags),
-        switchValues(other.switchValues), switchMask(other.switchMask) {
-}
-
-void NotifySwitchArgs::notify(const sp<InputListenerInterface>& listener) const {
-    listener->notifySwitch(this);
-}
-
-
-// --- NotifyDeviceResetArgs ---
-
-NotifyDeviceResetArgs::NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId) :
-        eventTime(eventTime), deviceId(deviceId) {
-}
-
-NotifyDeviceResetArgs::NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other) :
-        eventTime(other.eventTime), deviceId(other.deviceId) {
-}
-
-void NotifyDeviceResetArgs::notify(const sp<InputListenerInterface>& listener) const {
-    listener->notifyDeviceReset(this);
-}
-
-
-// --- QueuedInputListener ---
-
-QueuedInputListener::QueuedInputListener(const sp<InputListenerInterface>& innerListener) :
-        mInnerListener(innerListener) {
-}
-
-QueuedInputListener::~QueuedInputListener() {
-    size_t count = mArgsQueue.size();
-    for (size_t i = 0; i < count; i++) {
-        delete mArgsQueue[i];
-    }
-}
-
-void QueuedInputListener::notifyConfigurationChanged(
-        const NotifyConfigurationChangedArgs* args) {
-    mArgsQueue.push(new NotifyConfigurationChangedArgs(*args));
-}
-
-void QueuedInputListener::notifyKey(const NotifyKeyArgs* args) {
-    mArgsQueue.push(new NotifyKeyArgs(*args));
-}
-
-void QueuedInputListener::notifyMotion(const NotifyMotionArgs* args) {
-    mArgsQueue.push(new NotifyMotionArgs(*args));
-}
-
-void QueuedInputListener::notifySwitch(const NotifySwitchArgs* args) {
-    mArgsQueue.push(new NotifySwitchArgs(*args));
-}
-
-void QueuedInputListener::notifyDeviceReset(const NotifyDeviceResetArgs* args) {
-    mArgsQueue.push(new NotifyDeviceResetArgs(*args));
-}
-
-void QueuedInputListener::flush() {
-    size_t count = mArgsQueue.size();
-    for (size_t i = 0; i < count; i++) {
-        NotifyArgs* args = mArgsQueue[i];
-        args->notify(mInnerListener);
-        delete args;
-    }
-    mArgsQueue.clear();
-}
-
-
-} // namespace android
diff --git a/libs/input/InputListener.h b/libs/input/InputListener.h
deleted file mode 100644
index 78ae10f..0000000
--- a/libs/input/InputListener.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef _UI_INPUT_LISTENER_H
-#define _UI_INPUT_LISTENER_H
-
-#include <input/Input.h>
-#include <utils/RefBase.h>
-#include <utils/Vector.h>
-
-namespace android {
-
-class InputListenerInterface;
-
-
-/* Superclass of all input event argument objects */
-struct NotifyArgs {
-    virtual ~NotifyArgs() { }
-
-    virtual void notify(const sp<InputListenerInterface>& listener) const = 0;
-};
-
-
-/* Describes a configuration change event. */
-struct NotifyConfigurationChangedArgs : public NotifyArgs {
-    nsecs_t eventTime;
-
-    inline NotifyConfigurationChangedArgs() { }
-
-    NotifyConfigurationChangedArgs(nsecs_t eventTime);
-
-    NotifyConfigurationChangedArgs(const NotifyConfigurationChangedArgs& other);
-
-    virtual ~NotifyConfigurationChangedArgs() { }
-
-    virtual void notify(const sp<InputListenerInterface>& listener) const;
-};
-
-
-/* Describes a key event. */
-struct NotifyKeyArgs : public NotifyArgs {
-    nsecs_t eventTime;
-    int32_t deviceId;
-    uint32_t source;
-    uint32_t policyFlags;
-    int32_t action;
-    int32_t flags;
-    int32_t keyCode;
-    int32_t scanCode;
-    int32_t metaState;
-    nsecs_t downTime;
-
-    inline NotifyKeyArgs() { }
-
-    NotifyKeyArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags,
-            int32_t action, int32_t flags, int32_t keyCode, int32_t scanCode,
-            int32_t metaState, nsecs_t downTime);
-
-    NotifyKeyArgs(const NotifyKeyArgs& other);
-
-    virtual ~NotifyKeyArgs() { }
-
-    virtual void notify(const sp<InputListenerInterface>& listener) const;
-};
-
-
-/* Describes a motion event. */
-struct NotifyMotionArgs : public NotifyArgs {
-    nsecs_t eventTime;
-    int32_t deviceId;
-    uint32_t source;
-    uint32_t policyFlags;
-    int32_t action;
-    int32_t flags;
-    int32_t metaState;
-    int32_t buttonState;
-    int32_t edgeFlags;
-    int32_t displayId;
-    uint32_t pointerCount;
-    PointerProperties pointerProperties[MAX_POINTERS];
-    PointerCoords pointerCoords[MAX_POINTERS];
-    float xPrecision;
-    float yPrecision;
-    nsecs_t downTime;
-
-    inline NotifyMotionArgs() { }
-
-    NotifyMotionArgs(nsecs_t eventTime, int32_t deviceId, uint32_t source, uint32_t policyFlags,
-            int32_t action, int32_t flags, int32_t metaState, int32_t buttonState,
-            int32_t edgeFlags, int32_t displayId, uint32_t pointerCount,
-            const PointerProperties* pointerProperties, const PointerCoords* pointerCoords,
-            float xPrecision, float yPrecision, nsecs_t downTime);
-
-    NotifyMotionArgs(const NotifyMotionArgs& other);
-
-    virtual ~NotifyMotionArgs() { }
-
-    virtual void notify(const sp<InputListenerInterface>& listener) const;
-};
-
-
-/* Describes a switch event. */
-struct NotifySwitchArgs : public NotifyArgs {
-    nsecs_t eventTime;
-    uint32_t policyFlags;
-    uint32_t switchValues;
-    uint32_t switchMask;
-
-    inline NotifySwitchArgs() { }
-
-    NotifySwitchArgs(nsecs_t eventTime, uint32_t policyFlags,
-            uint32_t switchValues, uint32_t switchMask);
-
-    NotifySwitchArgs(const NotifySwitchArgs& other);
-
-    virtual ~NotifySwitchArgs() { }
-
-    virtual void notify(const sp<InputListenerInterface>& listener) const;
-};
-
-
-/* Describes a device reset event, such as when a device is added,
- * reconfigured, or removed. */
-struct NotifyDeviceResetArgs : public NotifyArgs {
-    nsecs_t eventTime;
-    int32_t deviceId;
-
-    inline NotifyDeviceResetArgs() { }
-
-    NotifyDeviceResetArgs(nsecs_t eventTime, int32_t deviceId);
-
-    NotifyDeviceResetArgs(const NotifyDeviceResetArgs& other);
-
-    virtual ~NotifyDeviceResetArgs() { }
-
-    virtual void notify(const sp<InputListenerInterface>& listener) const;
-};
-
-
-/*
- * The interface used by the InputReader to notify the InputListener about input events.
- */
-class InputListenerInterface : public virtual RefBase {
-protected:
-    InputListenerInterface() { }
-    virtual ~InputListenerInterface() { }
-
-public:
-    virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) = 0;
-    virtual void notifyKey(const NotifyKeyArgs* args) = 0;
-    virtual void notifyMotion(const NotifyMotionArgs* args) = 0;
-    virtual void notifySwitch(const NotifySwitchArgs* args) = 0;
-    virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) = 0;
-};
-
-
-/*
- * An implementation of the listener interface that queues up and defers dispatch
- * of decoded events until flushed.
- */
-class QueuedInputListener : public InputListenerInterface {
-protected:
-    virtual ~QueuedInputListener();
-
-public:
-    QueuedInputListener(const sp<InputListenerInterface>& innerListener);
-
-    virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args);
-    virtual void notifyKey(const NotifyKeyArgs* args);
-    virtual void notifyMotion(const NotifyMotionArgs* args);
-    virtual void notifySwitch(const NotifySwitchArgs* args);
-    virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args);
-
-    void flush();
-
-private:
-    sp<InputListenerInterface> mInnerListener;
-    Vector<NotifyArgs*> mArgsQueue;
-};
-
-} // namespace android
-
-#endif // _UI_INPUT_LISTENER_H
diff --git a/libs/input/InputManager.cpp b/libs/input/InputManager.cpp
deleted file mode 100644
index 6a6547b..0000000
--- a/libs/input/InputManager.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#define LOG_TAG "InputManager"
-
-//#define LOG_NDEBUG 0
-
-#include "InputManager.h"
-
-#include <cutils/log.h>
-
-namespace android {
-
-InputManager::InputManager(
-        const sp<EventHubInterface>& eventHub,
-        const sp<InputReaderPolicyInterface>& readerPolicy,
-        const sp<InputDispatcherPolicyInterface>& dispatcherPolicy) {
-    mDispatcher = new InputDispatcher(dispatcherPolicy);
-    mReader = new InputReader(eventHub, readerPolicy, mDispatcher);
-    initialize();
-}
-
-InputManager::InputManager(
-        const sp<InputReaderInterface>& reader,
-        const sp<InputDispatcherInterface>& dispatcher) :
-        mReader(reader),
-        mDispatcher(dispatcher) {
-    initialize();
-}
-
-InputManager::~InputManager() {
-    stop();
-}
-
-void InputManager::initialize() {
-    mReaderThread = new InputReaderThread(mReader);
-    mDispatcherThread = new InputDispatcherThread(mDispatcher);
-}
-
-status_t InputManager::start() {
-    status_t result = mDispatcherThread->run("InputDispatcher", PRIORITY_URGENT_DISPLAY);
-    if (result) {
-        ALOGE("Could not start InputDispatcher thread due to error %d.", result);
-        return result;
-    }
-
-    result = mReaderThread->run("InputReader", PRIORITY_URGENT_DISPLAY);
-    if (result) {
-        ALOGE("Could not start InputReader thread due to error %d.", result);
-
-        mDispatcherThread->requestExit();
-        return result;
-    }
-
-    return OK;
-}
-
-status_t InputManager::stop() {
-    status_t result = mReaderThread->requestExitAndWait();
-    if (result) {
-        ALOGW("Could not stop InputReader thread due to error %d.", result);
-    }
-
-    result = mDispatcherThread->requestExitAndWait();
-    if (result) {
-        ALOGW("Could not stop InputDispatcher thread due to error %d.", result);
-    }
-
-    return OK;
-}
-
-sp<InputReaderInterface> InputManager::getReader() {
-    return mReader;
-}
-
-sp<InputDispatcherInterface> InputManager::getDispatcher() {
-    return mDispatcher;
-}
-
-} // namespace android
diff --git a/libs/input/InputManager.h b/libs/input/InputManager.h
deleted file mode 100644
index a213b2d..0000000
--- a/libs/input/InputManager.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_INPUT_MANAGER_H
-#define _UI_INPUT_MANAGER_H
-
-/**
- * Native input manager.
- */
-
-#include "EventHub.h"
-#include "InputReader.h"
-#include "InputDispatcher.h"
-
-#include <input/Input.h>
-#include <input/InputTransport.h>
-#include <utils/Errors.h>
-#include <utils/Vector.h>
-#include <utils/Timers.h>
-#include <utils/RefBase.h>
-#include <utils/String8.h>
-
-namespace android {
-
-/*
- * The input manager is the core of the system event processing.
- *
- * The input manager uses two threads.
- *
- * 1. The InputReaderThread (called "InputReader") reads and preprocesses raw input events,
- *    applies policy, and posts messages to a queue managed by the DispatcherThread.
- * 2. The InputDispatcherThread (called "InputDispatcher") thread waits for new events on the
- *    queue and asynchronously dispatches them to applications.
- *
- * By design, the InputReaderThread class and InputDispatcherThread class do not share any
- * internal state.  Moreover, all communication is done one way from the InputReaderThread
- * into the InputDispatcherThread and never the reverse.  Both classes may interact with the
- * InputDispatchPolicy, however.
- *
- * The InputManager class never makes any calls into Java itself.  Instead, the
- * InputDispatchPolicy is responsible for performing all external interactions with the
- * system, including calling DVM services.
- */
-class InputManagerInterface : public virtual RefBase {
-protected:
-    InputManagerInterface() { }
-    virtual ~InputManagerInterface() { }
-
-public:
-    /* Starts the input manager threads. */
-    virtual status_t start() = 0;
-
-    /* Stops the input manager threads and waits for them to exit. */
-    virtual status_t stop() = 0;
-
-    /* Gets the input reader. */
-    virtual sp<InputReaderInterface> getReader() = 0;
-
-    /* Gets the input dispatcher. */
-    virtual sp<InputDispatcherInterface> getDispatcher() = 0;
-};
-
-class InputManager : public InputManagerInterface {
-protected:
-    virtual ~InputManager();
-
-public:
-    InputManager(
-            const sp<EventHubInterface>& eventHub,
-            const sp<InputReaderPolicyInterface>& readerPolicy,
-            const sp<InputDispatcherPolicyInterface>& dispatcherPolicy);
-
-    // (used for testing purposes)
-    InputManager(
-            const sp<InputReaderInterface>& reader,
-            const sp<InputDispatcherInterface>& dispatcher);
-
-    virtual status_t start();
-    virtual status_t stop();
-
-    virtual sp<InputReaderInterface> getReader();
-    virtual sp<InputDispatcherInterface> getDispatcher();
-
-private:
-    sp<InputReaderInterface> mReader;
-    sp<InputReaderThread> mReaderThread;
-
-    sp<InputDispatcherInterface> mDispatcher;
-    sp<InputDispatcherThread> mDispatcherThread;
-
-    void initialize();
-};
-
-} // namespace android
-
-#endif // _UI_INPUT_MANAGER_H
diff --git a/libs/input/InputReader.cpp b/libs/input/InputReader.cpp
deleted file mode 100644
index a4093e9..0000000
--- a/libs/input/InputReader.cpp
+++ /dev/null
@@ -1,6543 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#define LOG_TAG "InputReader"
-
-//#define LOG_NDEBUG 0
-
-// Log debug messages for each raw event received from the EventHub.
-#define DEBUG_RAW_EVENTS 0
-
-// Log debug messages about touch screen filtering hacks.
-#define DEBUG_HACKS 0
-
-// Log debug messages about virtual key processing.
-#define DEBUG_VIRTUAL_KEYS 0
-
-// Log debug messages about pointers.
-#define DEBUG_POINTERS 0
-
-// Log debug messages about pointer assignment calculations.
-#define DEBUG_POINTER_ASSIGNMENT 0
-
-// Log debug messages about gesture detection.
-#define DEBUG_GESTURES 0
-
-// Log debug messages about the vibrator.
-#define DEBUG_VIBRATOR 0
-
-#include "InputReader.h"
-
-#include <cutils/log.h>
-#include <input/Keyboard.h>
-#include <input/VirtualKeyMap.h>
-
-#include <stddef.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include <limits.h>
-#include <math.h>
-
-#define INDENT "  "
-#define INDENT2 "    "
-#define INDENT3 "      "
-#define INDENT4 "        "
-#define INDENT5 "          "
-
-namespace android {
-
-// --- Constants ---
-
-// Maximum number of slots supported when using the slot-based Multitouch Protocol B.
-static const size_t MAX_SLOTS = 32;
-
-// --- Static Functions ---
-
-template<typename T>
-inline static T abs(const T& value) {
-    return value < 0 ? - value : value;
-}
-
-template<typename T>
-inline static T min(const T& a, const T& b) {
-    return a < b ? a : b;
-}
-
-template<typename T>
-inline static void swap(T& a, T& b) {
-    T temp = a;
-    a = b;
-    b = temp;
-}
-
-inline static float avg(float x, float y) {
-    return (x + y) / 2;
-}
-
-inline static float distance(float x1, float y1, float x2, float y2) {
-    return hypotf(x1 - x2, y1 - y2);
-}
-
-inline static int32_t signExtendNybble(int32_t value) {
-    return value >= 8 ? value - 16 : value;
-}
-
-static inline const char* toString(bool value) {
-    return value ? "true" : "false";
-}
-
-static int32_t rotateValueUsingRotationMap(int32_t value, int32_t orientation,
-        const int32_t map[][4], size_t mapSize) {
-    if (orientation != DISPLAY_ORIENTATION_0) {
-        for (size_t i = 0; i < mapSize; i++) {
-            if (value == map[i][0]) {
-                return map[i][orientation];
-            }
-        }
-    }
-    return value;
-}
-
-static const int32_t keyCodeRotationMap[][4] = {
-        // key codes enumerated counter-clockwise with the original (unrotated) key first
-        // no rotation,        90 degree rotation,  180 degree rotation, 270 degree rotation
-        { AKEYCODE_DPAD_DOWN,   AKEYCODE_DPAD_RIGHT,  AKEYCODE_DPAD_UP,     AKEYCODE_DPAD_LEFT },
-        { AKEYCODE_DPAD_RIGHT,  AKEYCODE_DPAD_UP,     AKEYCODE_DPAD_LEFT,   AKEYCODE_DPAD_DOWN },
-        { AKEYCODE_DPAD_UP,     AKEYCODE_DPAD_LEFT,   AKEYCODE_DPAD_DOWN,   AKEYCODE_DPAD_RIGHT },
-        { AKEYCODE_DPAD_LEFT,   AKEYCODE_DPAD_DOWN,   AKEYCODE_DPAD_RIGHT,  AKEYCODE_DPAD_UP },
-};
-static const size_t keyCodeRotationMapSize =
-        sizeof(keyCodeRotationMap) / sizeof(keyCodeRotationMap[0]);
-
-static int32_t rotateKeyCode(int32_t keyCode, int32_t orientation) {
-    return rotateValueUsingRotationMap(keyCode, orientation,
-            keyCodeRotationMap, keyCodeRotationMapSize);
-}
-
-static void rotateDelta(int32_t orientation, float* deltaX, float* deltaY) {
-    float temp;
-    switch (orientation) {
-    case DISPLAY_ORIENTATION_90:
-        temp = *deltaX;
-        *deltaX = *deltaY;
-        *deltaY = -temp;
-        break;
-
-    case DISPLAY_ORIENTATION_180:
-        *deltaX = -*deltaX;
-        *deltaY = -*deltaY;
-        break;
-
-    case DISPLAY_ORIENTATION_270:
-        temp = *deltaX;
-        *deltaX = -*deltaY;
-        *deltaY = temp;
-        break;
-    }
-}
-
-static inline bool sourcesMatchMask(uint32_t sources, uint32_t sourceMask) {
-    return (sources & sourceMask & ~ AINPUT_SOURCE_CLASS_MASK) != 0;
-}
-
-// Returns true if the pointer should be reported as being down given the specified
-// button states.  This determines whether the event is reported as a touch event.
-static bool isPointerDown(int32_t buttonState) {
-    return buttonState &
-            (AMOTION_EVENT_BUTTON_PRIMARY | AMOTION_EVENT_BUTTON_SECONDARY
-                    | AMOTION_EVENT_BUTTON_TERTIARY);
-}
-
-static float calculateCommonVector(float a, float b) {
-    if (a > 0 && b > 0) {
-        return a < b ? a : b;
-    } else if (a < 0 && b < 0) {
-        return a > b ? a : b;
-    } else {
-        return 0;
-    }
-}
-
-static void synthesizeButtonKey(InputReaderContext* context, int32_t action,
-        nsecs_t when, int32_t deviceId, uint32_t source,
-        uint32_t policyFlags, int32_t lastButtonState, int32_t currentButtonState,
-        int32_t buttonState, int32_t keyCode) {
-    if (
-            (action == AKEY_EVENT_ACTION_DOWN
-                    && !(lastButtonState & buttonState)
-                    && (currentButtonState & buttonState))
-            || (action == AKEY_EVENT_ACTION_UP
-                    && (lastButtonState & buttonState)
-                    && !(currentButtonState & buttonState))) {
-        NotifyKeyArgs args(when, deviceId, source, policyFlags,
-                action, 0, keyCode, 0, context->getGlobalMetaState(), when);
-        context->getListener()->notifyKey(&args);
-    }
-}
-
-static void synthesizeButtonKeys(InputReaderContext* context, int32_t action,
-        nsecs_t when, int32_t deviceId, uint32_t source,
-        uint32_t policyFlags, int32_t lastButtonState, int32_t currentButtonState) {
-    synthesizeButtonKey(context, action, when, deviceId, source, policyFlags,
-            lastButtonState, currentButtonState,
-            AMOTION_EVENT_BUTTON_BACK, AKEYCODE_BACK);
-    synthesizeButtonKey(context, action, when, deviceId, source, policyFlags,
-            lastButtonState, currentButtonState,
-            AMOTION_EVENT_BUTTON_FORWARD, AKEYCODE_FORWARD);
-}
-
-
-// --- InputReaderConfiguration ---
-
-bool InputReaderConfiguration::getDisplayInfo(bool external, DisplayViewport* outViewport) const {
-    const DisplayViewport& viewport = external ? mExternalDisplay : mInternalDisplay;
-    if (viewport.displayId >= 0) {
-        *outViewport = viewport;
-        return true;
-    }
-    return false;
-}
-
-void InputReaderConfiguration::setDisplayInfo(bool external, const DisplayViewport& viewport) {
-    DisplayViewport& v = external ? mExternalDisplay : mInternalDisplay;
-    v = viewport;
-}
-
-
-// --- InputReader ---
-
-InputReader::InputReader(const sp<EventHubInterface>& eventHub,
-        const sp<InputReaderPolicyInterface>& policy,
-        const sp<InputListenerInterface>& listener) :
-        mContext(this), mEventHub(eventHub), mPolicy(policy),
-        mGlobalMetaState(0), mGeneration(1),
-        mDisableVirtualKeysTimeout(LLONG_MIN), mNextTimeout(LLONG_MAX),
-        mConfigurationChangesToRefresh(0) {
-    mQueuedListener = new QueuedInputListener(listener);
-
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        refreshConfigurationLocked(0);
-        updateGlobalMetaStateLocked();
-    } // release lock
-}
-
-InputReader::~InputReader() {
-    for (size_t i = 0; i < mDevices.size(); i++) {
-        delete mDevices.valueAt(i);
-    }
-}
-
-void InputReader::loopOnce() {
-    int32_t oldGeneration;
-    int32_t timeoutMillis;
-    bool inputDevicesChanged = false;
-    Vector<InputDeviceInfo> inputDevices;
-    { // acquire lock
-        AutoMutex _l(mLock);
-
-        oldGeneration = mGeneration;
-        timeoutMillis = -1;
-
-        uint32_t changes = mConfigurationChangesToRefresh;
-        if (changes) {
-            mConfigurationChangesToRefresh = 0;
-            timeoutMillis = 0;
-            refreshConfigurationLocked(changes);
-        } else if (mNextTimeout != LLONG_MAX) {
-            nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
-            timeoutMillis = toMillisecondTimeoutDelay(now, mNextTimeout);
-        }
-    } // release lock
-
-    size_t count = mEventHub->getEvents(timeoutMillis, mEventBuffer, EVENT_BUFFER_SIZE);
-
-    { // acquire lock
-        AutoMutex _l(mLock);
-        mReaderIsAliveCondition.broadcast();
-
-        if (count) {
-            processEventsLocked(mEventBuffer, count);
-        }
-
-        if (mNextTimeout != LLONG_MAX) {
-            nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
-            if (now >= mNextTimeout) {
-#if DEBUG_RAW_EVENTS
-                ALOGD("Timeout expired, latency=%0.3fms", (now - mNextTimeout) * 0.000001f);
-#endif
-                mNextTimeout = LLONG_MAX;
-                timeoutExpiredLocked(now);
-            }
-        }
-
-        if (oldGeneration != mGeneration) {
-            inputDevicesChanged = true;
-            getInputDevicesLocked(inputDevices);
-        }
-    } // release lock
-
-    // Send out a message that the describes the changed input devices.
-    if (inputDevicesChanged) {
-        mPolicy->notifyInputDevicesChanged(inputDevices);
-    }
-
-    // Flush queued events out to the listener.
-    // This must happen outside of the lock because the listener could potentially call
-    // back into the InputReader's methods, such as getScanCodeState, or become blocked
-    // on another thread similarly waiting to acquire the InputReader lock thereby
-    // resulting in a deadlock.  This situation is actually quite plausible because the
-    // listener is actually the input dispatcher, which calls into the window manager,
-    // which occasionally calls into the input reader.
-    mQueuedListener->flush();
-}
-
-void InputReader::processEventsLocked(const RawEvent* rawEvents, size_t count) {
-    for (const RawEvent* rawEvent = rawEvents; count;) {
-        int32_t type = rawEvent->type;
-        size_t batchSize = 1;
-        if (type < EventHubInterface::FIRST_SYNTHETIC_EVENT) {
-            int32_t deviceId = rawEvent->deviceId;
-            while (batchSize < count) {
-                if (rawEvent[batchSize].type >= EventHubInterface::FIRST_SYNTHETIC_EVENT
-                        || rawEvent[batchSize].deviceId != deviceId) {
-                    break;
-                }
-                batchSize += 1;
-            }
-#if DEBUG_RAW_EVENTS
-            ALOGD("BatchSize: %d Count: %d", batchSize, count);
-#endif
-            processEventsForDeviceLocked(deviceId, rawEvent, batchSize);
-        } else {
-            switch (rawEvent->type) {
-            case EventHubInterface::DEVICE_ADDED:
-                addDeviceLocked(rawEvent->when, rawEvent->deviceId);
-                break;
-            case EventHubInterface::DEVICE_REMOVED:
-                removeDeviceLocked(rawEvent->when, rawEvent->deviceId);
-                break;
-            case EventHubInterface::FINISHED_DEVICE_SCAN:
-                handleConfigurationChangedLocked(rawEvent->when);
-                break;
-            default:
-                ALOG_ASSERT(false); // can't happen
-                break;
-            }
-        }
-        count -= batchSize;
-        rawEvent += batchSize;
-    }
-}
-
-void InputReader::addDeviceLocked(nsecs_t when, int32_t deviceId) {
-    ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
-    if (deviceIndex >= 0) {
-        ALOGW("Ignoring spurious device added event for deviceId %d.", deviceId);
-        return;
-    }
-
-    InputDeviceIdentifier identifier = mEventHub->getDeviceIdentifier(deviceId);
-    uint32_t classes = mEventHub->getDeviceClasses(deviceId);
-    int32_t controllerNumber = mEventHub->getDeviceControllerNumber(deviceId);
-
-    InputDevice* device = createDeviceLocked(deviceId, controllerNumber, identifier, classes);
-    device->configure(when, &mConfig, 0);
-    device->reset(when);
-
-    if (device->isIgnored()) {
-        ALOGI("Device added: id=%d, name='%s' (ignored non-input device)", deviceId,
-                identifier.name.string());
-    } else {
-        ALOGI("Device added: id=%d, name='%s', sources=0x%08x", deviceId,
-                identifier.name.string(), device->getSources());
-    }
-
-    mDevices.add(deviceId, device);
-    bumpGenerationLocked();
-}
-
-void InputReader::removeDeviceLocked(nsecs_t when, int32_t deviceId) {
-    InputDevice* device = NULL;
-    ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
-    if (deviceIndex < 0) {
-        ALOGW("Ignoring spurious device removed event for deviceId %d.", deviceId);
-        return;
-    }
-
-    device = mDevices.valueAt(deviceIndex);
-    mDevices.removeItemsAt(deviceIndex, 1);
-    bumpGenerationLocked();
-
-    if (device->isIgnored()) {
-        ALOGI("Device removed: id=%d, name='%s' (ignored non-input device)",
-                device->getId(), device->getName().string());
-    } else {
-        ALOGI("Device removed: id=%d, name='%s', sources=0x%08x",
-                device->getId(), device->getName().string(), device->getSources());
-    }
-
-    device->reset(when);
-    delete device;
-}
-
-InputDevice* InputReader::createDeviceLocked(int32_t deviceId, int32_t controllerNumber,
-        const InputDeviceIdentifier& identifier, uint32_t classes) {
-    InputDevice* device = new InputDevice(&mContext, deviceId, bumpGenerationLocked(),
-            controllerNumber, identifier, classes);
-
-    // External devices.
-    if (classes & INPUT_DEVICE_CLASS_EXTERNAL) {
-        device->setExternal(true);
-    }
-
-    // Switch-like devices.
-    if (classes & INPUT_DEVICE_CLASS_SWITCH) {
-        device->addMapper(new SwitchInputMapper(device));
-    }
-
-    // Vibrator-like devices.
-    if (classes & INPUT_DEVICE_CLASS_VIBRATOR) {
-        device->addMapper(new VibratorInputMapper(device));
-    }
-
-    // Keyboard-like devices.
-    uint32_t keyboardSource = 0;
-    int32_t keyboardType = AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC;
-    if (classes & INPUT_DEVICE_CLASS_KEYBOARD) {
-        keyboardSource |= AINPUT_SOURCE_KEYBOARD;
-    }
-    if (classes & INPUT_DEVICE_CLASS_ALPHAKEY) {
-        keyboardType = AINPUT_KEYBOARD_TYPE_ALPHABETIC;
-    }
-    if (classes & INPUT_DEVICE_CLASS_DPAD) {
-        keyboardSource |= AINPUT_SOURCE_DPAD;
-    }
-    if (classes & INPUT_DEVICE_CLASS_GAMEPAD) {
-        keyboardSource |= AINPUT_SOURCE_GAMEPAD;
-    }
-
-    if (keyboardSource != 0) {
-        device->addMapper(new KeyboardInputMapper(device, keyboardSource, keyboardType));
-    }
-
-    // Cursor-like devices.
-    if (classes & INPUT_DEVICE_CLASS_CURSOR) {
-        device->addMapper(new CursorInputMapper(device));
-    }
-
-    // Touchscreens and touchpad devices.
-    if (classes & INPUT_DEVICE_CLASS_TOUCH_MT) {
-        device->addMapper(new MultiTouchInputMapper(device));
-    } else if (classes & INPUT_DEVICE_CLASS_TOUCH) {
-        device->addMapper(new SingleTouchInputMapper(device));
-    }
-
-    // Joystick-like devices.
-    if (classes & INPUT_DEVICE_CLASS_JOYSTICK) {
-        device->addMapper(new JoystickInputMapper(device));
-    }
-
-    return device;
-}
-
-void InputReader::processEventsForDeviceLocked(int32_t deviceId,
-        const RawEvent* rawEvents, size_t count) {
-    ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
-    if (deviceIndex < 0) {
-        ALOGW("Discarding event for unknown deviceId %d.", deviceId);
-        return;
-    }
-
-    InputDevice* device = mDevices.valueAt(deviceIndex);
-    if (device->isIgnored()) {
-        //ALOGD("Discarding event for ignored deviceId %d.", deviceId);
-        return;
-    }
-
-    device->process(rawEvents, count);
-}
-
-void InputReader::timeoutExpiredLocked(nsecs_t when) {
-    for (size_t i = 0; i < mDevices.size(); i++) {
-        InputDevice* device = mDevices.valueAt(i);
-        if (!device->isIgnored()) {
-            device->timeoutExpired(when);
-        }
-    }
-}
-
-void InputReader::handleConfigurationChangedLocked(nsecs_t when) {
-    // Reset global meta state because it depends on the list of all configured devices.
-    updateGlobalMetaStateLocked();
-
-    // Enqueue configuration changed.
-    NotifyConfigurationChangedArgs args(when);
-    mQueuedListener->notifyConfigurationChanged(&args);
-}
-
-void InputReader::refreshConfigurationLocked(uint32_t changes) {
-    mPolicy->getReaderConfiguration(&mConfig);
-    mEventHub->setExcludedDevices(mConfig.excludedDeviceNames);
-
-    if (changes) {
-        ALOGI("Reconfiguring input devices.  changes=0x%08x", changes);
-        nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
-
-        if (changes & InputReaderConfiguration::CHANGE_MUST_REOPEN) {
-            mEventHub->requestReopenDevices();
-        } else {
-            for (size_t i = 0; i < mDevices.size(); i++) {
-                InputDevice* device = mDevices.valueAt(i);
-                device->configure(now, &mConfig, changes);
-            }
-        }
-    }
-}
-
-void InputReader::updateGlobalMetaStateLocked() {
-    mGlobalMetaState = 0;
-
-    for (size_t i = 0; i < mDevices.size(); i++) {
-        InputDevice* device = mDevices.valueAt(i);
-        mGlobalMetaState |= device->getMetaState();
-    }
-}
-
-int32_t InputReader::getGlobalMetaStateLocked() {
-    return mGlobalMetaState;
-}
-
-void InputReader::disableVirtualKeysUntilLocked(nsecs_t time) {
-    mDisableVirtualKeysTimeout = time;
-}
-
-bool InputReader::shouldDropVirtualKeyLocked(nsecs_t now,
-        InputDevice* device, int32_t keyCode, int32_t scanCode) {
-    if (now < mDisableVirtualKeysTimeout) {
-        ALOGI("Dropping virtual key from device %s because virtual keys are "
-                "temporarily disabled for the next %0.3fms.  keyCode=%d, scanCode=%d",
-                device->getName().string(),
-                (mDisableVirtualKeysTimeout - now) * 0.000001,
-                keyCode, scanCode);
-        return true;
-    } else {
-        return false;
-    }
-}
-
-void InputReader::fadePointerLocked() {
-    for (size_t i = 0; i < mDevices.size(); i++) {
-        InputDevice* device = mDevices.valueAt(i);
-        device->fadePointer();
-    }
-}
-
-void InputReader::requestTimeoutAtTimeLocked(nsecs_t when) {
-    if (when < mNextTimeout) {
-        mNextTimeout = when;
-        mEventHub->wake();
-    }
-}
-
-int32_t InputReader::bumpGenerationLocked() {
-    return ++mGeneration;
-}
-
-void InputReader::getInputDevices(Vector<InputDeviceInfo>& outInputDevices) {
-    AutoMutex _l(mLock);
-    getInputDevicesLocked(outInputDevices);
-}
-
-void InputReader::getInputDevicesLocked(Vector<InputDeviceInfo>& outInputDevices) {
-    outInputDevices.clear();
-
-    size_t numDevices = mDevices.size();
-    for (size_t i = 0; i < numDevices; i++) {
-        InputDevice* device = mDevices.valueAt(i);
-        if (!device->isIgnored()) {
-            outInputDevices.push();
-            device->getDeviceInfo(&outInputDevices.editTop());
-        }
-    }
-}
-
-int32_t InputReader::getKeyCodeState(int32_t deviceId, uint32_t sourceMask,
-        int32_t keyCode) {
-    AutoMutex _l(mLock);
-
-    return getStateLocked(deviceId, sourceMask, keyCode, &InputDevice::getKeyCodeState);
-}
-
-int32_t InputReader::getScanCodeState(int32_t deviceId, uint32_t sourceMask,
-        int32_t scanCode) {
-    AutoMutex _l(mLock);
-
-    return getStateLocked(deviceId, sourceMask, scanCode, &InputDevice::getScanCodeState);
-}
-
-int32_t InputReader::getSwitchState(int32_t deviceId, uint32_t sourceMask, int32_t switchCode) {
-    AutoMutex _l(mLock);
-
-    return getStateLocked(deviceId, sourceMask, switchCode, &InputDevice::getSwitchState);
-}
-
-int32_t InputReader::getStateLocked(int32_t deviceId, uint32_t sourceMask, int32_t code,
-        GetStateFunc getStateFunc) {
-    int32_t result = AKEY_STATE_UNKNOWN;
-    if (deviceId >= 0) {
-        ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
-        if (deviceIndex >= 0) {
-            InputDevice* device = mDevices.valueAt(deviceIndex);
-            if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
-                result = (device->*getStateFunc)(sourceMask, code);
-            }
-        }
-    } else {
-        size_t numDevices = mDevices.size();
-        for (size_t i = 0; i < numDevices; i++) {
-            InputDevice* device = mDevices.valueAt(i);
-            if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
-                // If any device reports AKEY_STATE_DOWN or AKEY_STATE_VIRTUAL, return that
-                // value.  Otherwise, return AKEY_STATE_UP as long as one device reports it.
-                int32_t currentResult = (device->*getStateFunc)(sourceMask, code);
-                if (currentResult >= AKEY_STATE_DOWN) {
-                    return currentResult;
-                } else if (currentResult == AKEY_STATE_UP) {
-                    result = currentResult;
-                }
-            }
-        }
-    }
-    return result;
-}
-
-bool InputReader::hasKeys(int32_t deviceId, uint32_t sourceMask,
-        size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) {
-    AutoMutex _l(mLock);
-
-    memset(outFlags, 0, numCodes);
-    return markSupportedKeyCodesLocked(deviceId, sourceMask, numCodes, keyCodes, outFlags);
-}
-
-bool InputReader::markSupportedKeyCodesLocked(int32_t deviceId, uint32_t sourceMask,
-        size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) {
-    bool result = false;
-    if (deviceId >= 0) {
-        ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
-        if (deviceIndex >= 0) {
-            InputDevice* device = mDevices.valueAt(deviceIndex);
-            if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
-                result = device->markSupportedKeyCodes(sourceMask,
-                        numCodes, keyCodes, outFlags);
-            }
-        }
-    } else {
-        size_t numDevices = mDevices.size();
-        for (size_t i = 0; i < numDevices; i++) {
-            InputDevice* device = mDevices.valueAt(i);
-            if (! device->isIgnored() && sourcesMatchMask(device->getSources(), sourceMask)) {
-                result |= device->markSupportedKeyCodes(sourceMask,
-                        numCodes, keyCodes, outFlags);
-            }
-        }
-    }
-    return result;
-}
-
-void InputReader::requestRefreshConfiguration(uint32_t changes) {
-    AutoMutex _l(mLock);
-
-    if (changes) {
-        bool needWake = !mConfigurationChangesToRefresh;
-        mConfigurationChangesToRefresh |= changes;
-
-        if (needWake) {
-            mEventHub->wake();
-        }
-    }
-}
-
-void InputReader::vibrate(int32_t deviceId, const nsecs_t* pattern, size_t patternSize,
-        ssize_t repeat, int32_t token) {
-    AutoMutex _l(mLock);
-
-    ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
-    if (deviceIndex >= 0) {
-        InputDevice* device = mDevices.valueAt(deviceIndex);
-        device->vibrate(pattern, patternSize, repeat, token);
-    }
-}
-
-void InputReader::cancelVibrate(int32_t deviceId, int32_t token) {
-    AutoMutex _l(mLock);
-
-    ssize_t deviceIndex = mDevices.indexOfKey(deviceId);
-    if (deviceIndex >= 0) {
-        InputDevice* device = mDevices.valueAt(deviceIndex);
-        device->cancelVibrate(token);
-    }
-}
-
-void InputReader::dump(String8& dump) {
-    AutoMutex _l(mLock);
-
-    mEventHub->dump(dump);
-    dump.append("\n");
-
-    dump.append("Input Reader State:\n");
-
-    for (size_t i = 0; i < mDevices.size(); i++) {
-        mDevices.valueAt(i)->dump(dump);
-    }
-
-    dump.append(INDENT "Configuration:\n");
-    dump.append(INDENT2 "ExcludedDeviceNames: [");
-    for (size_t i = 0; i < mConfig.excludedDeviceNames.size(); i++) {
-        if (i != 0) {
-            dump.append(", ");
-        }
-        dump.append(mConfig.excludedDeviceNames.itemAt(i).string());
-    }
-    dump.append("]\n");
-    dump.appendFormat(INDENT2 "VirtualKeyQuietTime: %0.1fms\n",
-            mConfig.virtualKeyQuietTime * 0.000001f);
-
-    dump.appendFormat(INDENT2 "PointerVelocityControlParameters: "
-            "scale=%0.3f, lowThreshold=%0.3f, highThreshold=%0.3f, acceleration=%0.3f\n",
-            mConfig.pointerVelocityControlParameters.scale,
-            mConfig.pointerVelocityControlParameters.lowThreshold,
-            mConfig.pointerVelocityControlParameters.highThreshold,
-            mConfig.pointerVelocityControlParameters.acceleration);
-
-    dump.appendFormat(INDENT2 "WheelVelocityControlParameters: "
-            "scale=%0.3f, lowThreshold=%0.3f, highThreshold=%0.3f, acceleration=%0.3f\n",
-            mConfig.wheelVelocityControlParameters.scale,
-            mConfig.wheelVelocityControlParameters.lowThreshold,
-            mConfig.wheelVelocityControlParameters.highThreshold,
-            mConfig.wheelVelocityControlParameters.acceleration);
-
-    dump.appendFormat(INDENT2 "PointerGesture:\n");
-    dump.appendFormat(INDENT3 "Enabled: %s\n",
-            toString(mConfig.pointerGesturesEnabled));
-    dump.appendFormat(INDENT3 "QuietInterval: %0.1fms\n",
-            mConfig.pointerGestureQuietInterval * 0.000001f);
-    dump.appendFormat(INDENT3 "DragMinSwitchSpeed: %0.1fpx/s\n",
-            mConfig.pointerGestureDragMinSwitchSpeed);
-    dump.appendFormat(INDENT3 "TapInterval: %0.1fms\n",
-            mConfig.pointerGestureTapInterval * 0.000001f);
-    dump.appendFormat(INDENT3 "TapDragInterval: %0.1fms\n",
-            mConfig.pointerGestureTapDragInterval * 0.000001f);
-    dump.appendFormat(INDENT3 "TapSlop: %0.1fpx\n",
-            mConfig.pointerGestureTapSlop);
-    dump.appendFormat(INDENT3 "MultitouchSettleInterval: %0.1fms\n",
-            mConfig.pointerGestureMultitouchSettleInterval * 0.000001f);
-    dump.appendFormat(INDENT3 "MultitouchMinDistance: %0.1fpx\n",
-            mConfig.pointerGestureMultitouchMinDistance);
-    dump.appendFormat(INDENT3 "SwipeTransitionAngleCosine: %0.1f\n",
-            mConfig.pointerGestureSwipeTransitionAngleCosine);
-    dump.appendFormat(INDENT3 "SwipeMaxWidthRatio: %0.1f\n",
-            mConfig.pointerGestureSwipeMaxWidthRatio);
-    dump.appendFormat(INDENT3 "MovementSpeedRatio: %0.1f\n",
-            mConfig.pointerGestureMovementSpeedRatio);
-    dump.appendFormat(INDENT3 "ZoomSpeedRatio: %0.1f\n",
-            mConfig.pointerGestureZoomSpeedRatio);
-}
-
-void InputReader::monitor() {
-    // Acquire and release the lock to ensure that the reader has not deadlocked.
-    mLock.lock();
-    mEventHub->wake();
-    mReaderIsAliveCondition.wait(mLock);
-    mLock.unlock();
-
-    // Check the EventHub
-    mEventHub->monitor();
-}
-
-
-// --- InputReader::ContextImpl ---
-
-InputReader::ContextImpl::ContextImpl(InputReader* reader) :
-        mReader(reader) {
-}
-
-void InputReader::ContextImpl::updateGlobalMetaState() {
-    // lock is already held by the input loop
-    mReader->updateGlobalMetaStateLocked();
-}
-
-int32_t InputReader::ContextImpl::getGlobalMetaState() {
-    // lock is already held by the input loop
-    return mReader->getGlobalMetaStateLocked();
-}
-
-void InputReader::ContextImpl::disableVirtualKeysUntil(nsecs_t time) {
-    // lock is already held by the input loop
-    mReader->disableVirtualKeysUntilLocked(time);
-}
-
-bool InputReader::ContextImpl::shouldDropVirtualKey(nsecs_t now,
-        InputDevice* device, int32_t keyCode, int32_t scanCode) {
-    // lock is already held by the input loop
-    return mReader->shouldDropVirtualKeyLocked(now, device, keyCode, scanCode);
-}
-
-void InputReader::ContextImpl::fadePointer() {
-    // lock is already held by the input loop
-    mReader->fadePointerLocked();
-}
-
-void InputReader::ContextImpl::requestTimeoutAtTime(nsecs_t when) {
-    // lock is already held by the input loop
-    mReader->requestTimeoutAtTimeLocked(when);
-}
-
-int32_t InputReader::ContextImpl::bumpGeneration() {
-    // lock is already held by the input loop
-    return mReader->bumpGenerationLocked();
-}
-
-InputReaderPolicyInterface* InputReader::ContextImpl::getPolicy() {
-    return mReader->mPolicy.get();
-}
-
-InputListenerInterface* InputReader::ContextImpl::getListener() {
-    return mReader->mQueuedListener.get();
-}
-
-EventHubInterface* InputReader::ContextImpl::getEventHub() {
-    return mReader->mEventHub.get();
-}
-
-
-// --- InputReaderThread ---
-
-InputReaderThread::InputReaderThread(const sp<InputReaderInterface>& reader) :
-        Thread(/*canCallJava*/ true), mReader(reader) {
-}
-
-InputReaderThread::~InputReaderThread() {
-}
-
-bool InputReaderThread::threadLoop() {
-    mReader->loopOnce();
-    return true;
-}
-
-
-// --- InputDevice ---
-
-InputDevice::InputDevice(InputReaderContext* context, int32_t id, int32_t generation,
-        int32_t controllerNumber, const InputDeviceIdentifier& identifier, uint32_t classes) :
-        mContext(context), mId(id), mGeneration(generation), mControllerNumber(controllerNumber),
-        mIdentifier(identifier), mClasses(classes),
-        mSources(0), mIsExternal(false), mDropUntilNextSync(false) {
-}
-
-InputDevice::~InputDevice() {
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        delete mMappers[i];
-    }
-    mMappers.clear();
-}
-
-void InputDevice::dump(String8& dump) {
-    InputDeviceInfo deviceInfo;
-    getDeviceInfo(& deviceInfo);
-
-    dump.appendFormat(INDENT "Device %d: %s\n", deviceInfo.getId(),
-            deviceInfo.getDisplayName().string());
-    dump.appendFormat(INDENT2 "Generation: %d\n", mGeneration);
-    dump.appendFormat(INDENT2 "IsExternal: %s\n", toString(mIsExternal));
-    dump.appendFormat(INDENT2 "Sources: 0x%08x\n", deviceInfo.getSources());
-    dump.appendFormat(INDENT2 "KeyboardType: %d\n", deviceInfo.getKeyboardType());
-
-    const Vector<InputDeviceInfo::MotionRange>& ranges = deviceInfo.getMotionRanges();
-    if (!ranges.isEmpty()) {
-        dump.append(INDENT2 "Motion Ranges:\n");
-        for (size_t i = 0; i < ranges.size(); i++) {
-            const InputDeviceInfo::MotionRange& range = ranges.itemAt(i);
-            const char* label = getAxisLabel(range.axis);
-            char name[32];
-            if (label) {
-                strncpy(name, label, sizeof(name));
-                name[sizeof(name) - 1] = '\0';
-            } else {
-                snprintf(name, sizeof(name), "%d", range.axis);
-            }
-            dump.appendFormat(INDENT3 "%s: source=0x%08x, "
-                    "min=%0.3f, max=%0.3f, flat=%0.3f, fuzz=%0.3f, resolution=%0.3f\n",
-                    name, range.source, range.min, range.max, range.flat, range.fuzz,
-                    range.resolution);
-        }
-    }
-
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        mapper->dump(dump);
-    }
-}
-
-void InputDevice::addMapper(InputMapper* mapper) {
-    mMappers.add(mapper);
-}
-
-void InputDevice::configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes) {
-    mSources = 0;
-
-    if (!isIgnored()) {
-        if (!changes) { // first time only
-            mContext->getEventHub()->getConfiguration(mId, &mConfiguration);
-        }
-
-        if (!changes || (changes & InputReaderConfiguration::CHANGE_KEYBOARD_LAYOUTS)) {
-            if (!(mClasses & INPUT_DEVICE_CLASS_VIRTUAL)) {
-                sp<KeyCharacterMap> keyboardLayout =
-                        mContext->getPolicy()->getKeyboardLayoutOverlay(mIdentifier);
-                if (mContext->getEventHub()->setKeyboardLayoutOverlay(mId, keyboardLayout)) {
-                    bumpGeneration();
-                }
-            }
-        }
-
-        if (!changes || (changes & InputReaderConfiguration::CHANGE_DEVICE_ALIAS)) {
-            if (!(mClasses & INPUT_DEVICE_CLASS_VIRTUAL)) {
-                String8 alias = mContext->getPolicy()->getDeviceAlias(mIdentifier);
-                if (mAlias != alias) {
-                    mAlias = alias;
-                    bumpGeneration();
-                }
-            }
-        }
-
-        size_t numMappers = mMappers.size();
-        for (size_t i = 0; i < numMappers; i++) {
-            InputMapper* mapper = mMappers[i];
-            mapper->configure(when, config, changes);
-            mSources |= mapper->getSources();
-        }
-    }
-}
-
-void InputDevice::reset(nsecs_t when) {
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        mapper->reset(when);
-    }
-
-    mContext->updateGlobalMetaState();
-
-    notifyReset(when);
-}
-
-void InputDevice::process(const RawEvent* rawEvents, size_t count) {
-    // Process all of the events in order for each mapper.
-    // We cannot simply ask each mapper to process them in bulk because mappers may
-    // have side-effects that must be interleaved.  For example, joystick movement events and
-    // gamepad button presses are handled by different mappers but they should be dispatched
-    // in the order received.
-    size_t numMappers = mMappers.size();
-    for (const RawEvent* rawEvent = rawEvents; count--; rawEvent++) {
-#if DEBUG_RAW_EVENTS
-        ALOGD("Input event: device=%d type=0x%04x code=0x%04x value=0x%08x when=%lld",
-                rawEvent->deviceId, rawEvent->type, rawEvent->code, rawEvent->value,
-                rawEvent->when);
-#endif
-
-        if (mDropUntilNextSync) {
-            if (rawEvent->type == EV_SYN && rawEvent->code == SYN_REPORT) {
-                mDropUntilNextSync = false;
-#if DEBUG_RAW_EVENTS
-                ALOGD("Recovered from input event buffer overrun.");
-#endif
-            } else {
-#if DEBUG_RAW_EVENTS
-                ALOGD("Dropped input event while waiting for next input sync.");
-#endif
-            }
-        } else if (rawEvent->type == EV_SYN && rawEvent->code == SYN_DROPPED) {
-            ALOGI("Detected input event buffer overrun for device %s.", getName().string());
-            mDropUntilNextSync = true;
-            reset(rawEvent->when);
-        } else {
-            for (size_t i = 0; i < numMappers; i++) {
-                InputMapper* mapper = mMappers[i];
-                mapper->process(rawEvent);
-            }
-        }
-    }
-}
-
-void InputDevice::timeoutExpired(nsecs_t when) {
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        mapper->timeoutExpired(when);
-    }
-}
-
-void InputDevice::getDeviceInfo(InputDeviceInfo* outDeviceInfo) {
-    outDeviceInfo->initialize(mId, mGeneration, mControllerNumber, mIdentifier, mAlias,
-            mIsExternal);
-
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        mapper->populateDeviceInfo(outDeviceInfo);
-    }
-}
-
-int32_t InputDevice::getKeyCodeState(uint32_t sourceMask, int32_t keyCode) {
-    return getState(sourceMask, keyCode, & InputMapper::getKeyCodeState);
-}
-
-int32_t InputDevice::getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
-    return getState(sourceMask, scanCode, & InputMapper::getScanCodeState);
-}
-
-int32_t InputDevice::getSwitchState(uint32_t sourceMask, int32_t switchCode) {
-    return getState(sourceMask, switchCode, & InputMapper::getSwitchState);
-}
-
-int32_t InputDevice::getState(uint32_t sourceMask, int32_t code, GetStateFunc getStateFunc) {
-    int32_t result = AKEY_STATE_UNKNOWN;
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        if (sourcesMatchMask(mapper->getSources(), sourceMask)) {
-            // If any mapper reports AKEY_STATE_DOWN or AKEY_STATE_VIRTUAL, return that
-            // value.  Otherwise, return AKEY_STATE_UP as long as one mapper reports it.
-            int32_t currentResult = (mapper->*getStateFunc)(sourceMask, code);
-            if (currentResult >= AKEY_STATE_DOWN) {
-                return currentResult;
-            } else if (currentResult == AKEY_STATE_UP) {
-                result = currentResult;
-            }
-        }
-    }
-    return result;
-}
-
-bool InputDevice::markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-        const int32_t* keyCodes, uint8_t* outFlags) {
-    bool result = false;
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        if (sourcesMatchMask(mapper->getSources(), sourceMask)) {
-            result |= mapper->markSupportedKeyCodes(sourceMask, numCodes, keyCodes, outFlags);
-        }
-    }
-    return result;
-}
-
-void InputDevice::vibrate(const nsecs_t* pattern, size_t patternSize, ssize_t repeat,
-        int32_t token) {
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        mapper->vibrate(pattern, patternSize, repeat, token);
-    }
-}
-
-void InputDevice::cancelVibrate(int32_t token) {
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        mapper->cancelVibrate(token);
-    }
-}
-
-int32_t InputDevice::getMetaState() {
-    int32_t result = 0;
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        result |= mapper->getMetaState();
-    }
-    return result;
-}
-
-void InputDevice::fadePointer() {
-    size_t numMappers = mMappers.size();
-    for (size_t i = 0; i < numMappers; i++) {
-        InputMapper* mapper = mMappers[i];
-        mapper->fadePointer();
-    }
-}
-
-void InputDevice::bumpGeneration() {
-    mGeneration = mContext->bumpGeneration();
-}
-
-void InputDevice::notifyReset(nsecs_t when) {
-    NotifyDeviceResetArgs args(when, mId);
-    mContext->getListener()->notifyDeviceReset(&args);
-}
-
-
-// --- CursorButtonAccumulator ---
-
-CursorButtonAccumulator::CursorButtonAccumulator() {
-    clearButtons();
-}
-
-void CursorButtonAccumulator::reset(InputDevice* device) {
-    mBtnLeft = device->isKeyPressed(BTN_LEFT);
-    mBtnRight = device->isKeyPressed(BTN_RIGHT);
-    mBtnMiddle = device->isKeyPressed(BTN_MIDDLE);
-    mBtnBack = device->isKeyPressed(BTN_BACK);
-    mBtnSide = device->isKeyPressed(BTN_SIDE);
-    mBtnForward = device->isKeyPressed(BTN_FORWARD);
-    mBtnExtra = device->isKeyPressed(BTN_EXTRA);
-    mBtnTask = device->isKeyPressed(BTN_TASK);
-}
-
-void CursorButtonAccumulator::clearButtons() {
-    mBtnLeft = 0;
-    mBtnRight = 0;
-    mBtnMiddle = 0;
-    mBtnBack = 0;
-    mBtnSide = 0;
-    mBtnForward = 0;
-    mBtnExtra = 0;
-    mBtnTask = 0;
-}
-
-void CursorButtonAccumulator::process(const RawEvent* rawEvent) {
-    if (rawEvent->type == EV_KEY) {
-        switch (rawEvent->code) {
-        case BTN_LEFT:
-            mBtnLeft = rawEvent->value;
-            break;
-        case BTN_RIGHT:
-            mBtnRight = rawEvent->value;
-            break;
-        case BTN_MIDDLE:
-            mBtnMiddle = rawEvent->value;
-            break;
-        case BTN_BACK:
-            mBtnBack = rawEvent->value;
-            break;
-        case BTN_SIDE:
-            mBtnSide = rawEvent->value;
-            break;
-        case BTN_FORWARD:
-            mBtnForward = rawEvent->value;
-            break;
-        case BTN_EXTRA:
-            mBtnExtra = rawEvent->value;
-            break;
-        case BTN_TASK:
-            mBtnTask = rawEvent->value;
-            break;
-        }
-    }
-}
-
-uint32_t CursorButtonAccumulator::getButtonState() const {
-    uint32_t result = 0;
-    if (mBtnLeft) {
-        result |= AMOTION_EVENT_BUTTON_PRIMARY;
-    }
-    if (mBtnRight) {
-        result |= AMOTION_EVENT_BUTTON_SECONDARY;
-    }
-    if (mBtnMiddle) {
-        result |= AMOTION_EVENT_BUTTON_TERTIARY;
-    }
-    if (mBtnBack || mBtnSide) {
-        result |= AMOTION_EVENT_BUTTON_BACK;
-    }
-    if (mBtnForward || mBtnExtra) {
-        result |= AMOTION_EVENT_BUTTON_FORWARD;
-    }
-    return result;
-}
-
-
-// --- CursorMotionAccumulator ---
-
-CursorMotionAccumulator::CursorMotionAccumulator() {
-    clearRelativeAxes();
-}
-
-void CursorMotionAccumulator::reset(InputDevice* device) {
-    clearRelativeAxes();
-}
-
-void CursorMotionAccumulator::clearRelativeAxes() {
-    mRelX = 0;
-    mRelY = 0;
-}
-
-void CursorMotionAccumulator::process(const RawEvent* rawEvent) {
-    if (rawEvent->type == EV_REL) {
-        switch (rawEvent->code) {
-        case REL_X:
-            mRelX = rawEvent->value;
-            break;
-        case REL_Y:
-            mRelY = rawEvent->value;
-            break;
-        }
-    }
-}
-
-void CursorMotionAccumulator::finishSync() {
-    clearRelativeAxes();
-}
-
-
-// --- CursorScrollAccumulator ---
-
-CursorScrollAccumulator::CursorScrollAccumulator() :
-        mHaveRelWheel(false), mHaveRelHWheel(false) {
-    clearRelativeAxes();
-}
-
-void CursorScrollAccumulator::configure(InputDevice* device) {
-    mHaveRelWheel = device->getEventHub()->hasRelativeAxis(device->getId(), REL_WHEEL);
-    mHaveRelHWheel = device->getEventHub()->hasRelativeAxis(device->getId(), REL_HWHEEL);
-}
-
-void CursorScrollAccumulator::reset(InputDevice* device) {
-    clearRelativeAxes();
-}
-
-void CursorScrollAccumulator::clearRelativeAxes() {
-    mRelWheel = 0;
-    mRelHWheel = 0;
-}
-
-void CursorScrollAccumulator::process(const RawEvent* rawEvent) {
-    if (rawEvent->type == EV_REL) {
-        switch (rawEvent->code) {
-        case REL_WHEEL:
-            mRelWheel = rawEvent->value;
-            break;
-        case REL_HWHEEL:
-            mRelHWheel = rawEvent->value;
-            break;
-        }
-    }
-}
-
-void CursorScrollAccumulator::finishSync() {
-    clearRelativeAxes();
-}
-
-
-// --- TouchButtonAccumulator ---
-
-TouchButtonAccumulator::TouchButtonAccumulator() :
-        mHaveBtnTouch(false), mHaveStylus(false) {
-    clearButtons();
-}
-
-void TouchButtonAccumulator::configure(InputDevice* device) {
-    mHaveBtnTouch = device->hasKey(BTN_TOUCH);
-    mHaveStylus = device->hasKey(BTN_TOOL_PEN)
-            || device->hasKey(BTN_TOOL_RUBBER)
-            || device->hasKey(BTN_TOOL_BRUSH)
-            || device->hasKey(BTN_TOOL_PENCIL)
-            || device->hasKey(BTN_TOOL_AIRBRUSH);
-}
-
-void TouchButtonAccumulator::reset(InputDevice* device) {
-    mBtnTouch = device->isKeyPressed(BTN_TOUCH);
-    mBtnStylus = device->isKeyPressed(BTN_STYLUS);
-    mBtnStylus2 = device->isKeyPressed(BTN_STYLUS);
-    mBtnToolFinger = device->isKeyPressed(BTN_TOOL_FINGER);
-    mBtnToolPen = device->isKeyPressed(BTN_TOOL_PEN);
-    mBtnToolRubber = device->isKeyPressed(BTN_TOOL_RUBBER);
-    mBtnToolBrush = device->isKeyPressed(BTN_TOOL_BRUSH);
-    mBtnToolPencil = device->isKeyPressed(BTN_TOOL_PENCIL);
-    mBtnToolAirbrush = device->isKeyPressed(BTN_TOOL_AIRBRUSH);
-    mBtnToolMouse = device->isKeyPressed(BTN_TOOL_MOUSE);
-    mBtnToolLens = device->isKeyPressed(BTN_TOOL_LENS);
-    mBtnToolDoubleTap = device->isKeyPressed(BTN_TOOL_DOUBLETAP);
-    mBtnToolTripleTap = device->isKeyPressed(BTN_TOOL_TRIPLETAP);
-    mBtnToolQuadTap = device->isKeyPressed(BTN_TOOL_QUADTAP);
-}
-
-void TouchButtonAccumulator::clearButtons() {
-    mBtnTouch = 0;
-    mBtnStylus = 0;
-    mBtnStylus2 = 0;
-    mBtnToolFinger = 0;
-    mBtnToolPen = 0;
-    mBtnToolRubber = 0;
-    mBtnToolBrush = 0;
-    mBtnToolPencil = 0;
-    mBtnToolAirbrush = 0;
-    mBtnToolMouse = 0;
-    mBtnToolLens = 0;
-    mBtnToolDoubleTap = 0;
-    mBtnToolTripleTap = 0;
-    mBtnToolQuadTap = 0;
-}
-
-void TouchButtonAccumulator::process(const RawEvent* rawEvent) {
-    if (rawEvent->type == EV_KEY) {
-        switch (rawEvent->code) {
-        case BTN_TOUCH:
-            mBtnTouch = rawEvent->value;
-            break;
-        case BTN_STYLUS:
-            mBtnStylus = rawEvent->value;
-            break;
-        case BTN_STYLUS2:
-            mBtnStylus2 = rawEvent->value;
-            break;
-        case BTN_TOOL_FINGER:
-            mBtnToolFinger = rawEvent->value;
-            break;
-        case BTN_TOOL_PEN:
-            mBtnToolPen = rawEvent->value;
-            break;
-        case BTN_TOOL_RUBBER:
-            mBtnToolRubber = rawEvent->value;
-            break;
-        case BTN_TOOL_BRUSH:
-            mBtnToolBrush = rawEvent->value;
-            break;
-        case BTN_TOOL_PENCIL:
-            mBtnToolPencil = rawEvent->value;
-            break;
-        case BTN_TOOL_AIRBRUSH:
-            mBtnToolAirbrush = rawEvent->value;
-            break;
-        case BTN_TOOL_MOUSE:
-            mBtnToolMouse = rawEvent->value;
-            break;
-        case BTN_TOOL_LENS:
-            mBtnToolLens = rawEvent->value;
-            break;
-        case BTN_TOOL_DOUBLETAP:
-            mBtnToolDoubleTap = rawEvent->value;
-            break;
-        case BTN_TOOL_TRIPLETAP:
-            mBtnToolTripleTap = rawEvent->value;
-            break;
-        case BTN_TOOL_QUADTAP:
-            mBtnToolQuadTap = rawEvent->value;
-            break;
-        }
-    }
-}
-
-uint32_t TouchButtonAccumulator::getButtonState() const {
-    uint32_t result = 0;
-    if (mBtnStylus) {
-        result |= AMOTION_EVENT_BUTTON_SECONDARY;
-    }
-    if (mBtnStylus2) {
-        result |= AMOTION_EVENT_BUTTON_TERTIARY;
-    }
-    return result;
-}
-
-int32_t TouchButtonAccumulator::getToolType() const {
-    if (mBtnToolMouse || mBtnToolLens) {
-        return AMOTION_EVENT_TOOL_TYPE_MOUSE;
-    }
-    if (mBtnToolRubber) {
-        return AMOTION_EVENT_TOOL_TYPE_ERASER;
-    }
-    if (mBtnToolPen || mBtnToolBrush || mBtnToolPencil || mBtnToolAirbrush) {
-        return AMOTION_EVENT_TOOL_TYPE_STYLUS;
-    }
-    if (mBtnToolFinger || mBtnToolDoubleTap || mBtnToolTripleTap || mBtnToolQuadTap) {
-        return AMOTION_EVENT_TOOL_TYPE_FINGER;
-    }
-    return AMOTION_EVENT_TOOL_TYPE_UNKNOWN;
-}
-
-bool TouchButtonAccumulator::isToolActive() const {
-    return mBtnTouch || mBtnToolFinger || mBtnToolPen || mBtnToolRubber
-            || mBtnToolBrush || mBtnToolPencil || mBtnToolAirbrush
-            || mBtnToolMouse || mBtnToolLens
-            || mBtnToolDoubleTap || mBtnToolTripleTap || mBtnToolQuadTap;
-}
-
-bool TouchButtonAccumulator::isHovering() const {
-    return mHaveBtnTouch && !mBtnTouch;
-}
-
-bool TouchButtonAccumulator::hasStylus() const {
-    return mHaveStylus;
-}
-
-
-// --- RawPointerAxes ---
-
-RawPointerAxes::RawPointerAxes() {
-    clear();
-}
-
-void RawPointerAxes::clear() {
-    x.clear();
-    y.clear();
-    pressure.clear();
-    touchMajor.clear();
-    touchMinor.clear();
-    toolMajor.clear();
-    toolMinor.clear();
-    orientation.clear();
-    distance.clear();
-    tiltX.clear();
-    tiltY.clear();
-    trackingId.clear();
-    slot.clear();
-}
-
-
-// --- RawPointerData ---
-
-RawPointerData::RawPointerData() {
-    clear();
-}
-
-void RawPointerData::clear() {
-    pointerCount = 0;
-    clearIdBits();
-}
-
-void RawPointerData::copyFrom(const RawPointerData& other) {
-    pointerCount = other.pointerCount;
-    hoveringIdBits = other.hoveringIdBits;
-    touchingIdBits = other.touchingIdBits;
-
-    for (uint32_t i = 0; i < pointerCount; i++) {
-        pointers[i] = other.pointers[i];
-
-        int id = pointers[i].id;
-        idToIndex[id] = other.idToIndex[id];
-    }
-}
-
-void RawPointerData::getCentroidOfTouchingPointers(float* outX, float* outY) const {
-    float x = 0, y = 0;
-    uint32_t count = touchingIdBits.count();
-    if (count) {
-        for (BitSet32 idBits(touchingIdBits); !idBits.isEmpty(); ) {
-            uint32_t id = idBits.clearFirstMarkedBit();
-            const Pointer& pointer = pointerForId(id);
-            x += pointer.x;
-            y += pointer.y;
-        }
-        x /= count;
-        y /= count;
-    }
-    *outX = x;
-    *outY = y;
-}
-
-
-// --- CookedPointerData ---
-
-CookedPointerData::CookedPointerData() {
-    clear();
-}
-
-void CookedPointerData::clear() {
-    pointerCount = 0;
-    hoveringIdBits.clear();
-    touchingIdBits.clear();
-}
-
-void CookedPointerData::copyFrom(const CookedPointerData& other) {
-    pointerCount = other.pointerCount;
-    hoveringIdBits = other.hoveringIdBits;
-    touchingIdBits = other.touchingIdBits;
-
-    for (uint32_t i = 0; i < pointerCount; i++) {
-        pointerProperties[i].copyFrom(other.pointerProperties[i]);
-        pointerCoords[i].copyFrom(other.pointerCoords[i]);
-
-        int id = pointerProperties[i].id;
-        idToIndex[id] = other.idToIndex[id];
-    }
-}
-
-
-// --- SingleTouchMotionAccumulator ---
-
-SingleTouchMotionAccumulator::SingleTouchMotionAccumulator() {
-    clearAbsoluteAxes();
-}
-
-void SingleTouchMotionAccumulator::reset(InputDevice* device) {
-    mAbsX = device->getAbsoluteAxisValue(ABS_X);
-    mAbsY = device->getAbsoluteAxisValue(ABS_Y);
-    mAbsPressure = device->getAbsoluteAxisValue(ABS_PRESSURE);
-    mAbsToolWidth = device->getAbsoluteAxisValue(ABS_TOOL_WIDTH);
-    mAbsDistance = device->getAbsoluteAxisValue(ABS_DISTANCE);
-    mAbsTiltX = device->getAbsoluteAxisValue(ABS_TILT_X);
-    mAbsTiltY = device->getAbsoluteAxisValue(ABS_TILT_Y);
-}
-
-void SingleTouchMotionAccumulator::clearAbsoluteAxes() {
-    mAbsX = 0;
-    mAbsY = 0;
-    mAbsPressure = 0;
-    mAbsToolWidth = 0;
-    mAbsDistance = 0;
-    mAbsTiltX = 0;
-    mAbsTiltY = 0;
-}
-
-void SingleTouchMotionAccumulator::process(const RawEvent* rawEvent) {
-    if (rawEvent->type == EV_ABS) {
-        switch (rawEvent->code) {
-        case ABS_X:
-            mAbsX = rawEvent->value;
-            break;
-        case ABS_Y:
-            mAbsY = rawEvent->value;
-            break;
-        case ABS_PRESSURE:
-            mAbsPressure = rawEvent->value;
-            break;
-        case ABS_TOOL_WIDTH:
-            mAbsToolWidth = rawEvent->value;
-            break;
-        case ABS_DISTANCE:
-            mAbsDistance = rawEvent->value;
-            break;
-        case ABS_TILT_X:
-            mAbsTiltX = rawEvent->value;
-            break;
-        case ABS_TILT_Y:
-            mAbsTiltY = rawEvent->value;
-            break;
-        }
-    }
-}
-
-
-// --- MultiTouchMotionAccumulator ---
-
-MultiTouchMotionAccumulator::MultiTouchMotionAccumulator() :
-        mCurrentSlot(-1), mSlots(NULL), mSlotCount(0), mUsingSlotsProtocol(false),
-        mHaveStylus(false) {
-}
-
-MultiTouchMotionAccumulator::~MultiTouchMotionAccumulator() {
-    delete[] mSlots;
-}
-
-void MultiTouchMotionAccumulator::configure(InputDevice* device,
-        size_t slotCount, bool usingSlotsProtocol) {
-    mSlotCount = slotCount;
-    mUsingSlotsProtocol = usingSlotsProtocol;
-    mHaveStylus = device->hasAbsoluteAxis(ABS_MT_TOOL_TYPE);
-
-    delete[] mSlots;
-    mSlots = new Slot[slotCount];
-}
-
-void MultiTouchMotionAccumulator::reset(InputDevice* device) {
-    // Unfortunately there is no way to read the initial contents of the slots.
-    // So when we reset the accumulator, we must assume they are all zeroes.
-    if (mUsingSlotsProtocol) {
-        // Query the driver for the current slot index and use it as the initial slot
-        // before we start reading events from the device.  It is possible that the
-        // current slot index will not be the same as it was when the first event was
-        // written into the evdev buffer, which means the input mapper could start
-        // out of sync with the initial state of the events in the evdev buffer.
-        // In the extremely unlikely case that this happens, the data from
-        // two slots will be confused until the next ABS_MT_SLOT event is received.
-        // This can cause the touch point to "jump", but at least there will be
-        // no stuck touches.
-        int32_t initialSlot;
-        status_t status = device->getEventHub()->getAbsoluteAxisValue(device->getId(),
-                ABS_MT_SLOT, &initialSlot);
-        if (status) {
-            ALOGD("Could not retrieve current multitouch slot index.  status=%d", status);
-            initialSlot = -1;
-        }
-        clearSlots(initialSlot);
-    } else {
-        clearSlots(-1);
-    }
-}
-
-void MultiTouchMotionAccumulator::clearSlots(int32_t initialSlot) {
-    if (mSlots) {
-        for (size_t i = 0; i < mSlotCount; i++) {
-            mSlots[i].clear();
-        }
-    }
-    mCurrentSlot = initialSlot;
-}
-
-void MultiTouchMotionAccumulator::process(const RawEvent* rawEvent) {
-    if (rawEvent->type == EV_ABS) {
-        bool newSlot = false;
-        if (mUsingSlotsProtocol) {
-            if (rawEvent->code == ABS_MT_SLOT) {
-                mCurrentSlot = rawEvent->value;
-                newSlot = true;
-            }
-        } else if (mCurrentSlot < 0) {
-            mCurrentSlot = 0;
-        }
-
-        if (mCurrentSlot < 0 || size_t(mCurrentSlot) >= mSlotCount) {
-#if DEBUG_POINTERS
-            if (newSlot) {
-                ALOGW("MultiTouch device emitted invalid slot index %d but it "
-                        "should be between 0 and %d; ignoring this slot.",
-                        mCurrentSlot, mSlotCount - 1);
-            }
-#endif
-        } else {
-            Slot* slot = &mSlots[mCurrentSlot];
-
-            switch (rawEvent->code) {
-            case ABS_MT_POSITION_X:
-                slot->mInUse = true;
-                slot->mAbsMTPositionX = rawEvent->value;
-                break;
-            case ABS_MT_POSITION_Y:
-                slot->mInUse = true;
-                slot->mAbsMTPositionY = rawEvent->value;
-                break;
-            case ABS_MT_TOUCH_MAJOR:
-                slot->mInUse = true;
-                slot->mAbsMTTouchMajor = rawEvent->value;
-                break;
-            case ABS_MT_TOUCH_MINOR:
-                slot->mInUse = true;
-                slot->mAbsMTTouchMinor = rawEvent->value;
-                slot->mHaveAbsMTTouchMinor = true;
-                break;
-            case ABS_MT_WIDTH_MAJOR:
-                slot->mInUse = true;
-                slot->mAbsMTWidthMajor = rawEvent->value;
-                break;
-            case ABS_MT_WIDTH_MINOR:
-                slot->mInUse = true;
-                slot->mAbsMTWidthMinor = rawEvent->value;
-                slot->mHaveAbsMTWidthMinor = true;
-                break;
-            case ABS_MT_ORIENTATION:
-                slot->mInUse = true;
-                slot->mAbsMTOrientation = rawEvent->value;
-                break;
-            case ABS_MT_TRACKING_ID:
-                if (mUsingSlotsProtocol && rawEvent->value < 0) {
-                    // The slot is no longer in use but it retains its previous contents,
-                    // which may be reused for subsequent touches.
-                    slot->mInUse = false;
-                } else {
-                    slot->mInUse = true;
-                    slot->mAbsMTTrackingId = rawEvent->value;
-                }
-                break;
-            case ABS_MT_PRESSURE:
-                slot->mInUse = true;
-                slot->mAbsMTPressure = rawEvent->value;
-                break;
-            case ABS_MT_DISTANCE:
-                slot->mInUse = true;
-                slot->mAbsMTDistance = rawEvent->value;
-                break;
-            case ABS_MT_TOOL_TYPE:
-                slot->mInUse = true;
-                slot->mAbsMTToolType = rawEvent->value;
-                slot->mHaveAbsMTToolType = true;
-                break;
-            }
-        }
-    } else if (rawEvent->type == EV_SYN && rawEvent->code == SYN_MT_REPORT) {
-        // MultiTouch Sync: The driver has returned all data for *one* of the pointers.
-        mCurrentSlot += 1;
-    }
-}
-
-void MultiTouchMotionAccumulator::finishSync() {
-    if (!mUsingSlotsProtocol) {
-        clearSlots(-1);
-    }
-}
-
-bool MultiTouchMotionAccumulator::hasStylus() const {
-    return mHaveStylus;
-}
-
-
-// --- MultiTouchMotionAccumulator::Slot ---
-
-MultiTouchMotionAccumulator::Slot::Slot() {
-    clear();
-}
-
-void MultiTouchMotionAccumulator::Slot::clear() {
-    mInUse = false;
-    mHaveAbsMTTouchMinor = false;
-    mHaveAbsMTWidthMinor = false;
-    mHaveAbsMTToolType = false;
-    mAbsMTPositionX = 0;
-    mAbsMTPositionY = 0;
-    mAbsMTTouchMajor = 0;
-    mAbsMTTouchMinor = 0;
-    mAbsMTWidthMajor = 0;
-    mAbsMTWidthMinor = 0;
-    mAbsMTOrientation = 0;
-    mAbsMTTrackingId = -1;
-    mAbsMTPressure = 0;
-    mAbsMTDistance = 0;
-    mAbsMTToolType = 0;
-}
-
-int32_t MultiTouchMotionAccumulator::Slot::getToolType() const {
-    if (mHaveAbsMTToolType) {
-        switch (mAbsMTToolType) {
-        case MT_TOOL_FINGER:
-            return AMOTION_EVENT_TOOL_TYPE_FINGER;
-        case MT_TOOL_PEN:
-            return AMOTION_EVENT_TOOL_TYPE_STYLUS;
-        }
-    }
-    return AMOTION_EVENT_TOOL_TYPE_UNKNOWN;
-}
-
-
-// --- InputMapper ---
-
-InputMapper::InputMapper(InputDevice* device) :
-        mDevice(device), mContext(device->getContext()) {
-}
-
-InputMapper::~InputMapper() {
-}
-
-void InputMapper::populateDeviceInfo(InputDeviceInfo* info) {
-    info->addSource(getSources());
-}
-
-void InputMapper::dump(String8& dump) {
-}
-
-void InputMapper::configure(nsecs_t when,
-        const InputReaderConfiguration* config, uint32_t changes) {
-}
-
-void InputMapper::reset(nsecs_t when) {
-}
-
-void InputMapper::timeoutExpired(nsecs_t when) {
-}
-
-int32_t InputMapper::getKeyCodeState(uint32_t sourceMask, int32_t keyCode) {
-    return AKEY_STATE_UNKNOWN;
-}
-
-int32_t InputMapper::getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
-    return AKEY_STATE_UNKNOWN;
-}
-
-int32_t InputMapper::getSwitchState(uint32_t sourceMask, int32_t switchCode) {
-    return AKEY_STATE_UNKNOWN;
-}
-
-bool InputMapper::markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-        const int32_t* keyCodes, uint8_t* outFlags) {
-    return false;
-}
-
-void InputMapper::vibrate(const nsecs_t* pattern, size_t patternSize, ssize_t repeat,
-        int32_t token) {
-}
-
-void InputMapper::cancelVibrate(int32_t token) {
-}
-
-int32_t InputMapper::getMetaState() {
-    return 0;
-}
-
-void InputMapper::fadePointer() {
-}
-
-status_t InputMapper::getAbsoluteAxisInfo(int32_t axis, RawAbsoluteAxisInfo* axisInfo) {
-    return getEventHub()->getAbsoluteAxisInfo(getDeviceId(), axis, axisInfo);
-}
-
-void InputMapper::bumpGeneration() {
-    mDevice->bumpGeneration();
-}
-
-void InputMapper::dumpRawAbsoluteAxisInfo(String8& dump,
-        const RawAbsoluteAxisInfo& axis, const char* name) {
-    if (axis.valid) {
-        dump.appendFormat(INDENT4 "%s: min=%d, max=%d, flat=%d, fuzz=%d, resolution=%d\n",
-                name, axis.minValue, axis.maxValue, axis.flat, axis.fuzz, axis.resolution);
-    } else {
-        dump.appendFormat(INDENT4 "%s: unknown range\n", name);
-    }
-}
-
-
-// --- SwitchInputMapper ---
-
-SwitchInputMapper::SwitchInputMapper(InputDevice* device) :
-        InputMapper(device), mUpdatedSwitchValues(0), mUpdatedSwitchMask(0) {
-}
-
-SwitchInputMapper::~SwitchInputMapper() {
-}
-
-uint32_t SwitchInputMapper::getSources() {
-    return AINPUT_SOURCE_SWITCH;
-}
-
-void SwitchInputMapper::process(const RawEvent* rawEvent) {
-    switch (rawEvent->type) {
-    case EV_SW:
-        processSwitch(rawEvent->code, rawEvent->value);
-        break;
-
-    case EV_SYN:
-        if (rawEvent->code == SYN_REPORT) {
-            sync(rawEvent->when);
-        }
-    }
-}
-
-void SwitchInputMapper::processSwitch(int32_t switchCode, int32_t switchValue) {
-    if (switchCode >= 0 && switchCode < 32) {
-        if (switchValue) {
-            mUpdatedSwitchValues |= 1 << switchCode;
-        }
-        mUpdatedSwitchMask |= 1 << switchCode;
-    }
-}
-
-void SwitchInputMapper::sync(nsecs_t when) {
-    if (mUpdatedSwitchMask) {
-        NotifySwitchArgs args(when, 0, mUpdatedSwitchValues, mUpdatedSwitchMask);
-        getListener()->notifySwitch(&args);
-
-        mUpdatedSwitchValues = 0;
-        mUpdatedSwitchMask = 0;
-    }
-}
-
-int32_t SwitchInputMapper::getSwitchState(uint32_t sourceMask, int32_t switchCode) {
-    return getEventHub()->getSwitchState(getDeviceId(), switchCode);
-}
-
-
-// --- VibratorInputMapper ---
-
-VibratorInputMapper::VibratorInputMapper(InputDevice* device) :
-        InputMapper(device), mVibrating(false) {
-}
-
-VibratorInputMapper::~VibratorInputMapper() {
-}
-
-uint32_t VibratorInputMapper::getSources() {
-    return 0;
-}
-
-void VibratorInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
-    InputMapper::populateDeviceInfo(info);
-
-    info->setVibrator(true);
-}
-
-void VibratorInputMapper::process(const RawEvent* rawEvent) {
-    // TODO: Handle FF_STATUS, although it does not seem to be widely supported.
-}
-
-void VibratorInputMapper::vibrate(const nsecs_t* pattern, size_t patternSize, ssize_t repeat,
-        int32_t token) {
-#if DEBUG_VIBRATOR
-    String8 patternStr;
-    for (size_t i = 0; i < patternSize; i++) {
-        if (i != 0) {
-            patternStr.append(", ");
-        }
-        patternStr.appendFormat("%lld", pattern[i]);
-    }
-    ALOGD("vibrate: deviceId=%d, pattern=[%s], repeat=%ld, token=%d",
-            getDeviceId(), patternStr.string(), repeat, token);
-#endif
-
-    mVibrating = true;
-    memcpy(mPattern, pattern, patternSize * sizeof(nsecs_t));
-    mPatternSize = patternSize;
-    mRepeat = repeat;
-    mToken = token;
-    mIndex = -1;
-
-    nextStep();
-}
-
-void VibratorInputMapper::cancelVibrate(int32_t token) {
-#if DEBUG_VIBRATOR
-    ALOGD("cancelVibrate: deviceId=%d, token=%d", getDeviceId(), token);
-#endif
-
-    if (mVibrating && mToken == token) {
-        stopVibrating();
-    }
-}
-
-void VibratorInputMapper::timeoutExpired(nsecs_t when) {
-    if (mVibrating) {
-        if (when >= mNextStepTime) {
-            nextStep();
-        } else {
-            getContext()->requestTimeoutAtTime(mNextStepTime);
-        }
-    }
-}
-
-void VibratorInputMapper::nextStep() {
-    mIndex += 1;
-    if (size_t(mIndex) >= mPatternSize) {
-        if (mRepeat < 0) {
-            // We are done.
-            stopVibrating();
-            return;
-        }
-        mIndex = mRepeat;
-    }
-
-    bool vibratorOn = mIndex & 1;
-    nsecs_t duration = mPattern[mIndex];
-    if (vibratorOn) {
-#if DEBUG_VIBRATOR
-        ALOGD("nextStep: sending vibrate deviceId=%d, duration=%lld",
-                getDeviceId(), duration);
-#endif
-        getEventHub()->vibrate(getDeviceId(), duration);
-    } else {
-#if DEBUG_VIBRATOR
-        ALOGD("nextStep: sending cancel vibrate deviceId=%d", getDeviceId());
-#endif
-        getEventHub()->cancelVibrate(getDeviceId());
-    }
-    nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
-    mNextStepTime = now + duration;
-    getContext()->requestTimeoutAtTime(mNextStepTime);
-#if DEBUG_VIBRATOR
-    ALOGD("nextStep: scheduled timeout in %0.3fms", duration * 0.000001f);
-#endif
-}
-
-void VibratorInputMapper::stopVibrating() {
-    mVibrating = false;
-#if DEBUG_VIBRATOR
-    ALOGD("stopVibrating: sending cancel vibrate deviceId=%d", getDeviceId());
-#endif
-    getEventHub()->cancelVibrate(getDeviceId());
-}
-
-void VibratorInputMapper::dump(String8& dump) {
-    dump.append(INDENT2 "Vibrator Input Mapper:\n");
-    dump.appendFormat(INDENT3 "Vibrating: %s\n", toString(mVibrating));
-}
-
-
-// --- KeyboardInputMapper ---
-
-KeyboardInputMapper::KeyboardInputMapper(InputDevice* device,
-        uint32_t source, int32_t keyboardType) :
-        InputMapper(device), mSource(source),
-        mKeyboardType(keyboardType) {
-}
-
-KeyboardInputMapper::~KeyboardInputMapper() {
-}
-
-uint32_t KeyboardInputMapper::getSources() {
-    return mSource;
-}
-
-void KeyboardInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
-    InputMapper::populateDeviceInfo(info);
-
-    info->setKeyboardType(mKeyboardType);
-    info->setKeyCharacterMap(getEventHub()->getKeyCharacterMap(getDeviceId()));
-}
-
-void KeyboardInputMapper::dump(String8& dump) {
-    dump.append(INDENT2 "Keyboard Input Mapper:\n");
-    dumpParameters(dump);
-    dump.appendFormat(INDENT3 "KeyboardType: %d\n", mKeyboardType);
-    dump.appendFormat(INDENT3 "Orientation: %d\n", mOrientation);
-    dump.appendFormat(INDENT3 "KeyDowns: %zu keys currently down\n", mKeyDowns.size());
-    dump.appendFormat(INDENT3 "MetaState: 0x%0x\n", mMetaState);
-    dump.appendFormat(INDENT3 "DownTime: %lld\n", mDownTime);
-}
-
-
-void KeyboardInputMapper::configure(nsecs_t when,
-        const InputReaderConfiguration* config, uint32_t changes) {
-    InputMapper::configure(when, config, changes);
-
-    if (!changes) { // first time only
-        // Configure basic parameters.
-        configureParameters();
-    }
-
-    if (!changes || (changes & InputReaderConfiguration::CHANGE_DISPLAY_INFO)) {
-        if (mParameters.orientationAware && mParameters.hasAssociatedDisplay) {
-            DisplayViewport v;
-            if (config->getDisplayInfo(false /*external*/, &v)) {
-                mOrientation = v.orientation;
-            } else {
-                mOrientation = DISPLAY_ORIENTATION_0;
-            }
-        } else {
-            mOrientation = DISPLAY_ORIENTATION_0;
-        }
-    }
-}
-
-void KeyboardInputMapper::configureParameters() {
-    mParameters.orientationAware = false;
-    getDevice()->getConfiguration().tryGetProperty(String8("keyboard.orientationAware"),
-            mParameters.orientationAware);
-
-    mParameters.hasAssociatedDisplay = false;
-    if (mParameters.orientationAware) {
-        mParameters.hasAssociatedDisplay = true;
-    }
-
-    mParameters.handlesKeyRepeat = false;
-    getDevice()->getConfiguration().tryGetProperty(String8("keyboard.handlesKeyRepeat"),
-            mParameters.handlesKeyRepeat);
-}
-
-void KeyboardInputMapper::dumpParameters(String8& dump) {
-    dump.append(INDENT3 "Parameters:\n");
-    dump.appendFormat(INDENT4 "HasAssociatedDisplay: %s\n",
-            toString(mParameters.hasAssociatedDisplay));
-    dump.appendFormat(INDENT4 "OrientationAware: %s\n",
-            toString(mParameters.orientationAware));
-    dump.appendFormat(INDENT4 "HandlesKeyRepeat: %s\n",
-            toString(mParameters.handlesKeyRepeat));
-}
-
-void KeyboardInputMapper::reset(nsecs_t when) {
-    mMetaState = AMETA_NONE;
-    mDownTime = 0;
-    mKeyDowns.clear();
-    mCurrentHidUsage = 0;
-
-    resetLedState();
-
-    InputMapper::reset(when);
-}
-
-void KeyboardInputMapper::process(const RawEvent* rawEvent) {
-    switch (rawEvent->type) {
-    case EV_KEY: {
-        int32_t scanCode = rawEvent->code;
-        int32_t usageCode = mCurrentHidUsage;
-        mCurrentHidUsage = 0;
-
-        if (isKeyboardOrGamepadKey(scanCode)) {
-            int32_t keyCode;
-            uint32_t flags;
-            if (getEventHub()->mapKey(getDeviceId(), scanCode, usageCode, &keyCode, &flags)) {
-                keyCode = AKEYCODE_UNKNOWN;
-                flags = 0;
-            }
-            processKey(rawEvent->when, rawEvent->value != 0, keyCode, scanCode, flags);
-        }
-        break;
-    }
-    case EV_MSC: {
-        if (rawEvent->code == MSC_SCAN) {
-            mCurrentHidUsage = rawEvent->value;
-        }
-        break;
-    }
-    case EV_SYN: {
-        if (rawEvent->code == SYN_REPORT) {
-            mCurrentHidUsage = 0;
-        }
-    }
-    }
-}
-
-bool KeyboardInputMapper::isKeyboardOrGamepadKey(int32_t scanCode) {
-    return scanCode < BTN_MOUSE
-        || scanCode >= KEY_OK
-        || (scanCode >= BTN_MISC && scanCode < BTN_MOUSE)
-        || (scanCode >= BTN_JOYSTICK && scanCode < BTN_DIGI);
-}
-
-void KeyboardInputMapper::processKey(nsecs_t when, bool down, int32_t keyCode,
-        int32_t scanCode, uint32_t policyFlags) {
-
-    if (down) {
-        // Rotate key codes according to orientation if needed.
-        if (mParameters.orientationAware && mParameters.hasAssociatedDisplay) {
-            keyCode = rotateKeyCode(keyCode, mOrientation);
-        }
-
-        // Add key down.
-        ssize_t keyDownIndex = findKeyDown(scanCode);
-        if (keyDownIndex >= 0) {
-            // key repeat, be sure to use same keycode as before in case of rotation
-            keyCode = mKeyDowns.itemAt(keyDownIndex).keyCode;
-        } else {
-            // key down
-            if ((policyFlags & POLICY_FLAG_VIRTUAL)
-                    && mContext->shouldDropVirtualKey(when,
-                            getDevice(), keyCode, scanCode)) {
-                return;
-            }
-
-            mKeyDowns.push();
-            KeyDown& keyDown = mKeyDowns.editTop();
-            keyDown.keyCode = keyCode;
-            keyDown.scanCode = scanCode;
-        }
-
-        mDownTime = when;
-    } else {
-        // Remove key down.
-        ssize_t keyDownIndex = findKeyDown(scanCode);
-        if (keyDownIndex >= 0) {
-            // key up, be sure to use same keycode as before in case of rotation
-            keyCode = mKeyDowns.itemAt(keyDownIndex).keyCode;
-            mKeyDowns.removeAt(size_t(keyDownIndex));
-        } else {
-            // key was not actually down
-            ALOGI("Dropping key up from device %s because the key was not down.  "
-                    "keyCode=%d, scanCode=%d",
-                    getDeviceName().string(), keyCode, scanCode);
-            return;
-        }
-    }
-
-    int32_t oldMetaState = mMetaState;
-    int32_t newMetaState = updateMetaState(keyCode, down, oldMetaState);
-    bool metaStateChanged = oldMetaState != newMetaState;
-    if (metaStateChanged) {
-        mMetaState = newMetaState;
-        updateLedState(false);
-    }
-
-    nsecs_t downTime = mDownTime;
-
-    // Key down on external an keyboard should wake the device.
-    // We don't do this for internal keyboards to prevent them from waking up in your pocket.
-    // For internal keyboards, the key layout file should specify the policy flags for
-    // each wake key individually.
-    // TODO: Use the input device configuration to control this behavior more finely.
-    if (down && getDevice()->isExternal()
-            && !(policyFlags & (POLICY_FLAG_WAKE | POLICY_FLAG_WAKE_DROPPED))) {
-        policyFlags |= POLICY_FLAG_WAKE_DROPPED;
-    }
-
-    if (mParameters.handlesKeyRepeat) {
-        policyFlags |= POLICY_FLAG_DISABLE_KEY_REPEAT;
-    }
-
-    if (metaStateChanged) {
-        getContext()->updateGlobalMetaState();
-    }
-
-    if (down && !isMetaKey(keyCode)) {
-        getContext()->fadePointer();
-    }
-
-    NotifyKeyArgs args(when, getDeviceId(), mSource, policyFlags,
-            down ? AKEY_EVENT_ACTION_DOWN : AKEY_EVENT_ACTION_UP,
-            AKEY_EVENT_FLAG_FROM_SYSTEM, keyCode, scanCode, newMetaState, downTime);
-    getListener()->notifyKey(&args);
-}
-
-ssize_t KeyboardInputMapper::findKeyDown(int32_t scanCode) {
-    size_t n = mKeyDowns.size();
-    for (size_t i = 0; i < n; i++) {
-        if (mKeyDowns[i].scanCode == scanCode) {
-            return i;
-        }
-    }
-    return -1;
-}
-
-int32_t KeyboardInputMapper::getKeyCodeState(uint32_t sourceMask, int32_t keyCode) {
-    return getEventHub()->getKeyCodeState(getDeviceId(), keyCode);
-}
-
-int32_t KeyboardInputMapper::getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
-    return getEventHub()->getScanCodeState(getDeviceId(), scanCode);
-}
-
-bool KeyboardInputMapper::markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-        const int32_t* keyCodes, uint8_t* outFlags) {
-    return getEventHub()->markSupportedKeyCodes(getDeviceId(), numCodes, keyCodes, outFlags);
-}
-
-int32_t KeyboardInputMapper::getMetaState() {
-    return mMetaState;
-}
-
-void KeyboardInputMapper::resetLedState() {
-    initializeLedState(mCapsLockLedState, ALED_CAPS_LOCK);
-    initializeLedState(mNumLockLedState, ALED_NUM_LOCK);
-    initializeLedState(mScrollLockLedState, ALED_SCROLL_LOCK);
-
-    updateLedState(true);
-}
-
-void KeyboardInputMapper::initializeLedState(LedState& ledState, int32_t led) {
-    ledState.avail = getEventHub()->hasLed(getDeviceId(), led);
-    ledState.on = false;
-}
-
-void KeyboardInputMapper::updateLedState(bool reset) {
-    updateLedStateForModifier(mCapsLockLedState, ALED_CAPS_LOCK,
-            AMETA_CAPS_LOCK_ON, reset);
-    updateLedStateForModifier(mNumLockLedState, ALED_NUM_LOCK,
-            AMETA_NUM_LOCK_ON, reset);
-    updateLedStateForModifier(mScrollLockLedState, ALED_SCROLL_LOCK,
-            AMETA_SCROLL_LOCK_ON, reset);
-}
-
-void KeyboardInputMapper::updateLedStateForModifier(LedState& ledState,
-        int32_t led, int32_t modifier, bool reset) {
-    if (ledState.avail) {
-        bool desiredState = (mMetaState & modifier) != 0;
-        if (reset || ledState.on != desiredState) {
-            getEventHub()->setLedState(getDeviceId(), led, desiredState);
-            ledState.on = desiredState;
-        }
-    }
-}
-
-
-// --- CursorInputMapper ---
-
-CursorInputMapper::CursorInputMapper(InputDevice* device) :
-        InputMapper(device) {
-}
-
-CursorInputMapper::~CursorInputMapper() {
-}
-
-uint32_t CursorInputMapper::getSources() {
-    return mSource;
-}
-
-void CursorInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
-    InputMapper::populateDeviceInfo(info);
-
-    if (mParameters.mode == Parameters::MODE_POINTER) {
-        float minX, minY, maxX, maxY;
-        if (mPointerController->getBounds(&minX, &minY, &maxX, &maxY)) {
-            info->addMotionRange(AMOTION_EVENT_AXIS_X, mSource, minX, maxX, 0.0f, 0.0f, 0.0f);
-            info->addMotionRange(AMOTION_EVENT_AXIS_Y, mSource, minY, maxY, 0.0f, 0.0f, 0.0f);
-        }
-    } else {
-        info->addMotionRange(AMOTION_EVENT_AXIS_X, mSource, -1.0f, 1.0f, 0.0f, mXScale, 0.0f);
-        info->addMotionRange(AMOTION_EVENT_AXIS_Y, mSource, -1.0f, 1.0f, 0.0f, mYScale, 0.0f);
-    }
-    info->addMotionRange(AMOTION_EVENT_AXIS_PRESSURE, mSource, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f);
-
-    if (mCursorScrollAccumulator.haveRelativeVWheel()) {
-        info->addMotionRange(AMOTION_EVENT_AXIS_VSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
-    }
-    if (mCursorScrollAccumulator.haveRelativeHWheel()) {
-        info->addMotionRange(AMOTION_EVENT_AXIS_HSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f, 0.0f);
-    }
-}
-
-void CursorInputMapper::dump(String8& dump) {
-    dump.append(INDENT2 "Cursor Input Mapper:\n");
-    dumpParameters(dump);
-    dump.appendFormat(INDENT3 "XScale: %0.3f\n", mXScale);
-    dump.appendFormat(INDENT3 "YScale: %0.3f\n", mYScale);
-    dump.appendFormat(INDENT3 "XPrecision: %0.3f\n", mXPrecision);
-    dump.appendFormat(INDENT3 "YPrecision: %0.3f\n", mYPrecision);
-    dump.appendFormat(INDENT3 "HaveVWheel: %s\n",
-            toString(mCursorScrollAccumulator.haveRelativeVWheel()));
-    dump.appendFormat(INDENT3 "HaveHWheel: %s\n",
-            toString(mCursorScrollAccumulator.haveRelativeHWheel()));
-    dump.appendFormat(INDENT3 "VWheelScale: %0.3f\n", mVWheelScale);
-    dump.appendFormat(INDENT3 "HWheelScale: %0.3f\n", mHWheelScale);
-    dump.appendFormat(INDENT3 "Orientation: %d\n", mOrientation);
-    dump.appendFormat(INDENT3 "ButtonState: 0x%08x\n", mButtonState);
-    dump.appendFormat(INDENT3 "Down: %s\n", toString(isPointerDown(mButtonState)));
-    dump.appendFormat(INDENT3 "DownTime: %lld\n", mDownTime);
-}
-
-void CursorInputMapper::configure(nsecs_t when,
-        const InputReaderConfiguration* config, uint32_t changes) {
-    InputMapper::configure(when, config, changes);
-
-    if (!changes) { // first time only
-        mCursorScrollAccumulator.configure(getDevice());
-
-        // Configure basic parameters.
-        configureParameters();
-
-        // Configure device mode.
-        switch (mParameters.mode) {
-        case Parameters::MODE_POINTER:
-            mSource = AINPUT_SOURCE_MOUSE;
-            mXPrecision = 1.0f;
-            mYPrecision = 1.0f;
-            mXScale = 1.0f;
-            mYScale = 1.0f;
-            mPointerController = getPolicy()->obtainPointerController(getDeviceId());
-            break;
-        case Parameters::MODE_NAVIGATION:
-            mSource = AINPUT_SOURCE_TRACKBALL;
-            mXPrecision = TRACKBALL_MOVEMENT_THRESHOLD;
-            mYPrecision = TRACKBALL_MOVEMENT_THRESHOLD;
-            mXScale = 1.0f / TRACKBALL_MOVEMENT_THRESHOLD;
-            mYScale = 1.0f / TRACKBALL_MOVEMENT_THRESHOLD;
-            break;
-        }
-
-        mVWheelScale = 1.0f;
-        mHWheelScale = 1.0f;
-    }
-
-    if (!changes || (changes & InputReaderConfiguration::CHANGE_POINTER_SPEED)) {
-        mPointerVelocityControl.setParameters(config->pointerVelocityControlParameters);
-        mWheelXVelocityControl.setParameters(config->wheelVelocityControlParameters);
-        mWheelYVelocityControl.setParameters(config->wheelVelocityControlParameters);
-    }
-
-    if (!changes || (changes & InputReaderConfiguration::CHANGE_DISPLAY_INFO)) {
-        if (mParameters.orientationAware && mParameters.hasAssociatedDisplay) {
-            DisplayViewport v;
-            if (config->getDisplayInfo(false /*external*/, &v)) {
-                mOrientation = v.orientation;
-            } else {
-                mOrientation = DISPLAY_ORIENTATION_0;
-            }
-        } else {
-            mOrientation = DISPLAY_ORIENTATION_0;
-        }
-        bumpGeneration();
-    }
-}
-
-void CursorInputMapper::configureParameters() {
-    mParameters.mode = Parameters::MODE_POINTER;
-    String8 cursorModeString;
-    if (getDevice()->getConfiguration().tryGetProperty(String8("cursor.mode"), cursorModeString)) {
-        if (cursorModeString == "navigation") {
-            mParameters.mode = Parameters::MODE_NAVIGATION;
-        } else if (cursorModeString != "pointer" && cursorModeString != "default") {
-            ALOGW("Invalid value for cursor.mode: '%s'", cursorModeString.string());
-        }
-    }
-
-    mParameters.orientationAware = false;
-    getDevice()->getConfiguration().tryGetProperty(String8("cursor.orientationAware"),
-            mParameters.orientationAware);
-
-    mParameters.hasAssociatedDisplay = false;
-    if (mParameters.mode == Parameters::MODE_POINTER || mParameters.orientationAware) {
-        mParameters.hasAssociatedDisplay = true;
-    }
-}
-
-void CursorInputMapper::dumpParameters(String8& dump) {
-    dump.append(INDENT3 "Parameters:\n");
-    dump.appendFormat(INDENT4 "HasAssociatedDisplay: %s\n",
-            toString(mParameters.hasAssociatedDisplay));
-
-    switch (mParameters.mode) {
-    case Parameters::MODE_POINTER:
-        dump.append(INDENT4 "Mode: pointer\n");
-        break;
-    case Parameters::MODE_NAVIGATION:
-        dump.append(INDENT4 "Mode: navigation\n");
-        break;
-    default:
-        ALOG_ASSERT(false);
-    }
-
-    dump.appendFormat(INDENT4 "OrientationAware: %s\n",
-            toString(mParameters.orientationAware));
-}
-
-void CursorInputMapper::reset(nsecs_t when) {
-    mButtonState = 0;
-    mDownTime = 0;
-
-    mPointerVelocityControl.reset();
-    mWheelXVelocityControl.reset();
-    mWheelYVelocityControl.reset();
-
-    mCursorButtonAccumulator.reset(getDevice());
-    mCursorMotionAccumulator.reset(getDevice());
-    mCursorScrollAccumulator.reset(getDevice());
-
-    InputMapper::reset(when);
-}
-
-void CursorInputMapper::process(const RawEvent* rawEvent) {
-    mCursorButtonAccumulator.process(rawEvent);
-    mCursorMotionAccumulator.process(rawEvent);
-    mCursorScrollAccumulator.process(rawEvent);
-
-    if (rawEvent->type == EV_SYN && rawEvent->code == SYN_REPORT) {
-        sync(rawEvent->when);
-    }
-}
-
-void CursorInputMapper::sync(nsecs_t when) {
-    int32_t lastButtonState = mButtonState;
-    int32_t currentButtonState = mCursorButtonAccumulator.getButtonState();
-    mButtonState = currentButtonState;
-
-    bool wasDown = isPointerDown(lastButtonState);
-    bool down = isPointerDown(currentButtonState);
-    bool downChanged;
-    if (!wasDown && down) {
-        mDownTime = when;
-        downChanged = true;
-    } else if (wasDown && !down) {
-        downChanged = true;
-    } else {
-        downChanged = false;
-    }
-    nsecs_t downTime = mDownTime;
-    bool buttonsChanged = currentButtonState != lastButtonState;
-    bool buttonsPressed = currentButtonState & ~lastButtonState;
-
-    float deltaX = mCursorMotionAccumulator.getRelativeX() * mXScale;
-    float deltaY = mCursorMotionAccumulator.getRelativeY() * mYScale;
-    bool moved = deltaX != 0 || deltaY != 0;
-
-    // Rotate delta according to orientation if needed.
-    if (mParameters.orientationAware && mParameters.hasAssociatedDisplay
-            && (deltaX != 0.0f || deltaY != 0.0f)) {
-        rotateDelta(mOrientation, &deltaX, &deltaY);
-    }
-
-    // Move the pointer.
-    PointerProperties pointerProperties;
-    pointerProperties.clear();
-    pointerProperties.id = 0;
-    pointerProperties.toolType = AMOTION_EVENT_TOOL_TYPE_MOUSE;
-
-    PointerCoords pointerCoords;
-    pointerCoords.clear();
-
-    float vscroll = mCursorScrollAccumulator.getRelativeVWheel();
-    float hscroll = mCursorScrollAccumulator.getRelativeHWheel();
-    bool scrolled = vscroll != 0 || hscroll != 0;
-
-    mWheelYVelocityControl.move(when, NULL, &vscroll);
-    mWheelXVelocityControl.move(when, &hscroll, NULL);
-
-    mPointerVelocityControl.move(when, &deltaX, &deltaY);
-
-    int32_t displayId;
-    if (mPointerController != NULL) {
-        if (moved || scrolled || buttonsChanged) {
-            mPointerController->setPresentation(
-                    PointerControllerInterface::PRESENTATION_POINTER);
-
-            if (moved) {
-                mPointerController->move(deltaX, deltaY);
-            }
-
-            if (buttonsChanged) {
-                mPointerController->setButtonState(currentButtonState);
-            }
-
-            mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
-        }
-
-        float x, y;
-        mPointerController->getPosition(&x, &y);
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
-        displayId = ADISPLAY_ID_DEFAULT;
-    } else {
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, deltaX);
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, deltaY);
-        displayId = ADISPLAY_ID_NONE;
-    }
-
-    pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, down ? 1.0f : 0.0f);
-
-    // Moving an external trackball or mouse should wake the device.
-    // We don't do this for internal cursor devices to prevent them from waking up
-    // the device in your pocket.
-    // TODO: Use the input device configuration to control this behavior more finely.
-    uint32_t policyFlags = 0;
-    if ((buttonsPressed || moved || scrolled) && getDevice()->isExternal()) {
-        policyFlags |= POLICY_FLAG_WAKE_DROPPED;
-    }
-
-    // Synthesize key down from buttons if needed.
-    synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_DOWN, when, getDeviceId(), mSource,
-            policyFlags, lastButtonState, currentButtonState);
-
-    // Send motion event.
-    if (downChanged || moved || scrolled || buttonsChanged) {
-        int32_t metaState = mContext->getGlobalMetaState();
-        int32_t motionEventAction;
-        if (downChanged) {
-            motionEventAction = down ? AMOTION_EVENT_ACTION_DOWN : AMOTION_EVENT_ACTION_UP;
-        } else if (down || mPointerController == NULL) {
-            motionEventAction = AMOTION_EVENT_ACTION_MOVE;
-        } else {
-            motionEventAction = AMOTION_EVENT_ACTION_HOVER_MOVE;
-        }
-
-        NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                motionEventAction, 0, metaState, currentButtonState, 0,
-                displayId, 1, &pointerProperties, &pointerCoords,
-                mXPrecision, mYPrecision, downTime);
-        getListener()->notifyMotion(&args);
-
-        // Send hover move after UP to tell the application that the mouse is hovering now.
-        if (motionEventAction == AMOTION_EVENT_ACTION_UP
-                && mPointerController != NULL) {
-            NotifyMotionArgs hoverArgs(when, getDeviceId(), mSource, policyFlags,
-                    AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
-                    metaState, currentButtonState, AMOTION_EVENT_EDGE_FLAG_NONE,
-                    displayId, 1, &pointerProperties, &pointerCoords,
-                    mXPrecision, mYPrecision, downTime);
-            getListener()->notifyMotion(&hoverArgs);
-        }
-
-        // Send scroll events.
-        if (scrolled) {
-            pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_VSCROLL, vscroll);
-            pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_HSCROLL, hscroll);
-
-            NotifyMotionArgs scrollArgs(when, getDeviceId(), mSource, policyFlags,
-                    AMOTION_EVENT_ACTION_SCROLL, 0, metaState, currentButtonState,
-                    AMOTION_EVENT_EDGE_FLAG_NONE,
-                    displayId, 1, &pointerProperties, &pointerCoords,
-                    mXPrecision, mYPrecision, downTime);
-            getListener()->notifyMotion(&scrollArgs);
-        }
-    }
-
-    // Synthesize key up from buttons if needed.
-    synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_UP, when, getDeviceId(), mSource,
-            policyFlags, lastButtonState, currentButtonState);
-
-    mCursorMotionAccumulator.finishSync();
-    mCursorScrollAccumulator.finishSync();
-}
-
-int32_t CursorInputMapper::getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
-    if (scanCode >= BTN_MOUSE && scanCode < BTN_JOYSTICK) {
-        return getEventHub()->getScanCodeState(getDeviceId(), scanCode);
-    } else {
-        return AKEY_STATE_UNKNOWN;
-    }
-}
-
-void CursorInputMapper::fadePointer() {
-    if (mPointerController != NULL) {
-        mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
-    }
-}
-
-
-// --- TouchInputMapper ---
-
-TouchInputMapper::TouchInputMapper(InputDevice* device) :
-        InputMapper(device),
-        mSource(0), mDeviceMode(DEVICE_MODE_DISABLED),
-        mSurfaceWidth(-1), mSurfaceHeight(-1), mSurfaceLeft(0), mSurfaceTop(0),
-        mSurfaceOrientation(DISPLAY_ORIENTATION_0) {
-}
-
-TouchInputMapper::~TouchInputMapper() {
-}
-
-uint32_t TouchInputMapper::getSources() {
-    return mSource;
-}
-
-void TouchInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
-    InputMapper::populateDeviceInfo(info);
-
-    if (mDeviceMode != DEVICE_MODE_DISABLED) {
-        info->addMotionRange(mOrientedRanges.x);
-        info->addMotionRange(mOrientedRanges.y);
-        info->addMotionRange(mOrientedRanges.pressure);
-
-        if (mOrientedRanges.haveSize) {
-            info->addMotionRange(mOrientedRanges.size);
-        }
-
-        if (mOrientedRanges.haveTouchSize) {
-            info->addMotionRange(mOrientedRanges.touchMajor);
-            info->addMotionRange(mOrientedRanges.touchMinor);
-        }
-
-        if (mOrientedRanges.haveToolSize) {
-            info->addMotionRange(mOrientedRanges.toolMajor);
-            info->addMotionRange(mOrientedRanges.toolMinor);
-        }
-
-        if (mOrientedRanges.haveOrientation) {
-            info->addMotionRange(mOrientedRanges.orientation);
-        }
-
-        if (mOrientedRanges.haveDistance) {
-            info->addMotionRange(mOrientedRanges.distance);
-        }
-
-        if (mOrientedRanges.haveTilt) {
-            info->addMotionRange(mOrientedRanges.tilt);
-        }
-
-        if (mCursorScrollAccumulator.haveRelativeVWheel()) {
-            info->addMotionRange(AMOTION_EVENT_AXIS_VSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f,
-                    0.0f);
-        }
-        if (mCursorScrollAccumulator.haveRelativeHWheel()) {
-            info->addMotionRange(AMOTION_EVENT_AXIS_HSCROLL, mSource, -1.0f, 1.0f, 0.0f, 0.0f,
-                    0.0f);
-        }
-        if (mCalibration.coverageCalibration == Calibration::COVERAGE_CALIBRATION_BOX) {
-            const InputDeviceInfo::MotionRange& x = mOrientedRanges.x;
-            const InputDeviceInfo::MotionRange& y = mOrientedRanges.y;
-            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_1, mSource, x.min, x.max, x.flat,
-                    x.fuzz, x.resolution);
-            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_2, mSource, y.min, y.max, y.flat,
-                    y.fuzz, y.resolution);
-            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_3, mSource, x.min, x.max, x.flat,
-                    x.fuzz, x.resolution);
-            info->addMotionRange(AMOTION_EVENT_AXIS_GENERIC_4, mSource, y.min, y.max, y.flat,
-                    y.fuzz, y.resolution);
-        }
-        info->setButtonUnderPad(mParameters.hasButtonUnderPad);
-    }
-}
-
-void TouchInputMapper::dump(String8& dump) {
-    dump.append(INDENT2 "Touch Input Mapper:\n");
-    dumpParameters(dump);
-    dumpVirtualKeys(dump);
-    dumpRawPointerAxes(dump);
-    dumpCalibration(dump);
-    dumpSurface(dump);
-
-    dump.appendFormat(INDENT3 "Translation and Scaling Factors:\n");
-    dump.appendFormat(INDENT4 "XTranslate: %0.3f\n", mXTranslate);
-    dump.appendFormat(INDENT4 "YTranslate: %0.3f\n", mYTranslate);
-    dump.appendFormat(INDENT4 "XScale: %0.3f\n", mXScale);
-    dump.appendFormat(INDENT4 "YScale: %0.3f\n", mYScale);
-    dump.appendFormat(INDENT4 "XPrecision: %0.3f\n", mXPrecision);
-    dump.appendFormat(INDENT4 "YPrecision: %0.3f\n", mYPrecision);
-    dump.appendFormat(INDENT4 "GeometricScale: %0.3f\n", mGeometricScale);
-    dump.appendFormat(INDENT4 "PressureScale: %0.3f\n", mPressureScale);
-    dump.appendFormat(INDENT4 "SizeScale: %0.3f\n", mSizeScale);
-    dump.appendFormat(INDENT4 "OrientationScale: %0.3f\n", mOrientationScale);
-    dump.appendFormat(INDENT4 "DistanceScale: %0.3f\n", mDistanceScale);
-    dump.appendFormat(INDENT4 "HaveTilt: %s\n", toString(mHaveTilt));
-    dump.appendFormat(INDENT4 "TiltXCenter: %0.3f\n", mTiltXCenter);
-    dump.appendFormat(INDENT4 "TiltXScale: %0.3f\n", mTiltXScale);
-    dump.appendFormat(INDENT4 "TiltYCenter: %0.3f\n", mTiltYCenter);
-    dump.appendFormat(INDENT4 "TiltYScale: %0.3f\n", mTiltYScale);
-
-    dump.appendFormat(INDENT3 "Last Button State: 0x%08x\n", mLastButtonState);
-
-    dump.appendFormat(INDENT3 "Last Raw Touch: pointerCount=%d\n",
-            mLastRawPointerData.pointerCount);
-    for (uint32_t i = 0; i < mLastRawPointerData.pointerCount; i++) {
-        const RawPointerData::Pointer& pointer = mLastRawPointerData.pointers[i];
-        dump.appendFormat(INDENT4 "[%d]: id=%d, x=%d, y=%d, pressure=%d, "
-                "touchMajor=%d, touchMinor=%d, toolMajor=%d, toolMinor=%d, "
-                "orientation=%d, tiltX=%d, tiltY=%d, distance=%d, "
-                "toolType=%d, isHovering=%s\n", i,
-                pointer.id, pointer.x, pointer.y, pointer.pressure,
-                pointer.touchMajor, pointer.touchMinor,
-                pointer.toolMajor, pointer.toolMinor,
-                pointer.orientation, pointer.tiltX, pointer.tiltY, pointer.distance,
-                pointer.toolType, toString(pointer.isHovering));
-    }
-
-    dump.appendFormat(INDENT3 "Last Cooked Touch: pointerCount=%d\n",
-            mLastCookedPointerData.pointerCount);
-    for (uint32_t i = 0; i < mLastCookedPointerData.pointerCount; i++) {
-        const PointerProperties& pointerProperties = mLastCookedPointerData.pointerProperties[i];
-        const PointerCoords& pointerCoords = mLastCookedPointerData.pointerCoords[i];
-        dump.appendFormat(INDENT4 "[%d]: id=%d, x=%0.3f, y=%0.3f, pressure=%0.3f, "
-                "touchMajor=%0.3f, touchMinor=%0.3f, toolMajor=%0.3f, toolMinor=%0.3f, "
-                "orientation=%0.3f, tilt=%0.3f, distance=%0.3f, "
-                "toolType=%d, isHovering=%s\n", i,
-                pointerProperties.id,
-                pointerCoords.getX(),
-                pointerCoords.getY(),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_TILT),
-                pointerCoords.getAxisValue(AMOTION_EVENT_AXIS_DISTANCE),
-                pointerProperties.toolType,
-                toString(mLastCookedPointerData.isHovering(i)));
-    }
-
-    if (mDeviceMode == DEVICE_MODE_POINTER) {
-        dump.appendFormat(INDENT3 "Pointer Gesture Detector:\n");
-        dump.appendFormat(INDENT4 "XMovementScale: %0.3f\n",
-                mPointerXMovementScale);
-        dump.appendFormat(INDENT4 "YMovementScale: %0.3f\n",
-                mPointerYMovementScale);
-        dump.appendFormat(INDENT4 "XZoomScale: %0.3f\n",
-                mPointerXZoomScale);
-        dump.appendFormat(INDENT4 "YZoomScale: %0.3f\n",
-                mPointerYZoomScale);
-        dump.appendFormat(INDENT4 "MaxSwipeWidth: %f\n",
-                mPointerGestureMaxSwipeWidth);
-    }
-}
-
-void TouchInputMapper::configure(nsecs_t when,
-        const InputReaderConfiguration* config, uint32_t changes) {
-    InputMapper::configure(when, config, changes);
-
-    mConfig = *config;
-
-    if (!changes) { // first time only
-        // Configure basic parameters.
-        configureParameters();
-
-        // Configure common accumulators.
-        mCursorScrollAccumulator.configure(getDevice());
-        mTouchButtonAccumulator.configure(getDevice());
-
-        // Configure absolute axis information.
-        configureRawPointerAxes();
-
-        // Prepare input device calibration.
-        parseCalibration();
-        resolveCalibration();
-    }
-
-    if (!changes || (changes & InputReaderConfiguration::CHANGE_POINTER_SPEED)) {
-        // Update pointer speed.
-        mPointerVelocityControl.setParameters(mConfig.pointerVelocityControlParameters);
-        mWheelXVelocityControl.setParameters(mConfig.wheelVelocityControlParameters);
-        mWheelYVelocityControl.setParameters(mConfig.wheelVelocityControlParameters);
-    }
-
-    bool resetNeeded = false;
-    if (!changes || (changes & (InputReaderConfiguration::CHANGE_DISPLAY_INFO
-            | InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT
-            | InputReaderConfiguration::CHANGE_SHOW_TOUCHES))) {
-        // Configure device sources, surface dimensions, orientation and
-        // scaling factors.
-        configureSurface(when, &resetNeeded);
-    }
-
-    if (changes && resetNeeded) {
-        // Send reset, unless this is the first time the device has been configured,
-        // in which case the reader will call reset itself after all mappers are ready.
-        getDevice()->notifyReset(when);
-    }
-}
-
-void TouchInputMapper::configureParameters() {
-    // Use the pointer presentation mode for devices that do not support distinct
-    // multitouch.  The spot-based presentation relies on being able to accurately
-    // locate two or more fingers on the touch pad.
-    mParameters.gestureMode = getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_SEMI_MT)
-            ? Parameters::GESTURE_MODE_POINTER : Parameters::GESTURE_MODE_SPOTS;
-
-    String8 gestureModeString;
-    if (getDevice()->getConfiguration().tryGetProperty(String8("touch.gestureMode"),
-            gestureModeString)) {
-        if (gestureModeString == "pointer") {
-            mParameters.gestureMode = Parameters::GESTURE_MODE_POINTER;
-        } else if (gestureModeString == "spots") {
-            mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS;
-        } else if (gestureModeString != "default") {
-            ALOGW("Invalid value for touch.gestureMode: '%s'", gestureModeString.string());
-        }
-    }
-
-    if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_DIRECT)) {
-        // The device is a touch screen.
-        mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN;
-    } else if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_POINTER)) {
-        // The device is a pointing device like a track pad.
-        mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
-    } else if (getEventHub()->hasRelativeAxis(getDeviceId(), REL_X)
-            || getEventHub()->hasRelativeAxis(getDeviceId(), REL_Y)) {
-        // The device is a cursor device with a touch pad attached.
-        // By default don't use the touch pad to move the pointer.
-        mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD;
-    } else {
-        // The device is a touch pad of unknown purpose.
-        mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
-    }
-
-    mParameters.hasButtonUnderPad=
-            getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_BUTTONPAD);
-
-    String8 deviceTypeString;
-    if (getDevice()->getConfiguration().tryGetProperty(String8("touch.deviceType"),
-            deviceTypeString)) {
-        if (deviceTypeString == "touchScreen") {
-            mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN;
-        } else if (deviceTypeString == "touchPad") {
-            mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD;
-        } else if (deviceTypeString == "touchNavigation") {
-            mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_NAVIGATION;
-        } else if (deviceTypeString == "pointer") {
-            mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER;
-        } else if (deviceTypeString != "default") {
-            ALOGW("Invalid value for touch.deviceType: '%s'", deviceTypeString.string());
-        }
-    }
-
-    mParameters.orientationAware = mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN;
-    getDevice()->getConfiguration().tryGetProperty(String8("touch.orientationAware"),
-            mParameters.orientationAware);
-
-    mParameters.hasAssociatedDisplay = false;
-    mParameters.associatedDisplayIsExternal = false;
-    if (mParameters.orientationAware
-            || mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN
-            || mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) {
-        mParameters.hasAssociatedDisplay = true;
-        mParameters.associatedDisplayIsExternal =
-                mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN
-                        && getDevice()->isExternal();
-    }
-
-    // Initial downs on external touch devices should wake the device.
-    // Normally we don't do this for internal touch screens to prevent them from waking
-    // up in your pocket but you can enable it using the input device configuration.
-    mParameters.wake = getDevice()->isExternal();
-    getDevice()->getConfiguration().tryGetProperty(String8("touch.wake"),
-            mParameters.wake);
-}
-
-void TouchInputMapper::dumpParameters(String8& dump) {
-    dump.append(INDENT3 "Parameters:\n");
-
-    switch (mParameters.gestureMode) {
-    case Parameters::GESTURE_MODE_POINTER:
-        dump.append(INDENT4 "GestureMode: pointer\n");
-        break;
-    case Parameters::GESTURE_MODE_SPOTS:
-        dump.append(INDENT4 "GestureMode: spots\n");
-        break;
-    default:
-        assert(false);
-    }
-
-    switch (mParameters.deviceType) {
-    case Parameters::DEVICE_TYPE_TOUCH_SCREEN:
-        dump.append(INDENT4 "DeviceType: touchScreen\n");
-        break;
-    case Parameters::DEVICE_TYPE_TOUCH_PAD:
-        dump.append(INDENT4 "DeviceType: touchPad\n");
-        break;
-    case Parameters::DEVICE_TYPE_TOUCH_NAVIGATION:
-        dump.append(INDENT4 "DeviceType: touchNavigation\n");
-        break;
-    case Parameters::DEVICE_TYPE_POINTER:
-        dump.append(INDENT4 "DeviceType: pointer\n");
-        break;
-    default:
-        ALOG_ASSERT(false);
-    }
-
-    dump.appendFormat(INDENT4 "AssociatedDisplay: hasAssociatedDisplay=%s, isExternal=%s\n",
-            toString(mParameters.hasAssociatedDisplay),
-            toString(mParameters.associatedDisplayIsExternal));
-    dump.appendFormat(INDENT4 "OrientationAware: %s\n",
-            toString(mParameters.orientationAware));
-}
-
-void TouchInputMapper::configureRawPointerAxes() {
-    mRawPointerAxes.clear();
-}
-
-void TouchInputMapper::dumpRawPointerAxes(String8& dump) {
-    dump.append(INDENT3 "Raw Touch Axes:\n");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.x, "X");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.y, "Y");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.pressure, "Pressure");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.touchMajor, "TouchMajor");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.touchMinor, "TouchMinor");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.toolMajor, "ToolMajor");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.toolMinor, "ToolMinor");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.orientation, "Orientation");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.distance, "Distance");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.tiltX, "TiltX");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.tiltY, "TiltY");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.trackingId, "TrackingId");
-    dumpRawAbsoluteAxisInfo(dump, mRawPointerAxes.slot, "Slot");
-}
-
-void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {
-    int32_t oldDeviceMode = mDeviceMode;
-
-    // Determine device mode.
-    if (mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER
-            && mConfig.pointerGesturesEnabled) {
-        mSource = AINPUT_SOURCE_MOUSE;
-        mDeviceMode = DEVICE_MODE_POINTER;
-        if (hasStylus()) {
-            mSource |= AINPUT_SOURCE_STYLUS;
-        }
-    } else if (mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN
-            && mParameters.hasAssociatedDisplay) {
-        mSource = AINPUT_SOURCE_TOUCHSCREEN;
-        mDeviceMode = DEVICE_MODE_DIRECT;
-        if (hasStylus()) {
-            mSource |= AINPUT_SOURCE_STYLUS;
-        }
-    } else if (mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_NAVIGATION) {
-        mSource = AINPUT_SOURCE_TOUCH_NAVIGATION;
-        mDeviceMode = DEVICE_MODE_NAVIGATION;
-    } else {
-        mSource = AINPUT_SOURCE_TOUCHPAD;
-        mDeviceMode = DEVICE_MODE_UNSCALED;
-    }
-
-    // Ensure we have valid X and Y axes.
-    if (!mRawPointerAxes.x.valid || !mRawPointerAxes.y.valid) {
-        ALOGW(INDENT "Touch device '%s' did not report support for X or Y axis!  "
-                "The device will be inoperable.", getDeviceName().string());
-        mDeviceMode = DEVICE_MODE_DISABLED;
-        return;
-    }
-
-    // Raw width and height in the natural orientation.
-    int32_t rawWidth = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
-    int32_t rawHeight = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
-
-    // Get associated display dimensions.
-    DisplayViewport newViewport;
-    if (mParameters.hasAssociatedDisplay) {
-        if (!mConfig.getDisplayInfo(mParameters.associatedDisplayIsExternal, &newViewport)) {
-            ALOGI(INDENT "Touch device '%s' could not query the properties of its associated "
-                    "display.  The device will be inoperable until the display size "
-                    "becomes available.",
-                    getDeviceName().string());
-            mDeviceMode = DEVICE_MODE_DISABLED;
-            return;
-        }
-    } else {
-        newViewport.setNonDisplayViewport(rawWidth, rawHeight);
-    }
-    bool viewportChanged = mViewport != newViewport;
-    if (viewportChanged) {
-        mViewport = newViewport;
-
-        if (mDeviceMode == DEVICE_MODE_DIRECT || mDeviceMode == DEVICE_MODE_POINTER) {
-            // Convert rotated viewport to natural surface coordinates.
-            int32_t naturalLogicalWidth, naturalLogicalHeight;
-            int32_t naturalPhysicalWidth, naturalPhysicalHeight;
-            int32_t naturalPhysicalLeft, naturalPhysicalTop;
-            int32_t naturalDeviceWidth, naturalDeviceHeight;
-            switch (mViewport.orientation) {
-            case DISPLAY_ORIENTATION_90:
-                naturalLogicalWidth = mViewport.logicalBottom - mViewport.logicalTop;
-                naturalLogicalHeight = mViewport.logicalRight - mViewport.logicalLeft;
-                naturalPhysicalWidth = mViewport.physicalBottom - mViewport.physicalTop;
-                naturalPhysicalHeight = mViewport.physicalRight - mViewport.physicalLeft;
-                naturalPhysicalLeft = mViewport.deviceHeight - mViewport.physicalBottom;
-                naturalPhysicalTop = mViewport.physicalLeft;
-                naturalDeviceWidth = mViewport.deviceHeight;
-                naturalDeviceHeight = mViewport.deviceWidth;
-                break;
-            case DISPLAY_ORIENTATION_180:
-                naturalLogicalWidth = mViewport.logicalRight - mViewport.logicalLeft;
-                naturalLogicalHeight = mViewport.logicalBottom - mViewport.logicalTop;
-                naturalPhysicalWidth = mViewport.physicalRight - mViewport.physicalLeft;
-                naturalPhysicalHeight = mViewport.physicalBottom - mViewport.physicalTop;
-                naturalPhysicalLeft = mViewport.deviceWidth - mViewport.physicalRight;
-                naturalPhysicalTop = mViewport.deviceHeight - mViewport.physicalBottom;
-                naturalDeviceWidth = mViewport.deviceWidth;
-                naturalDeviceHeight = mViewport.deviceHeight;
-                break;
-            case DISPLAY_ORIENTATION_270:
-                naturalLogicalWidth = mViewport.logicalBottom - mViewport.logicalTop;
-                naturalLogicalHeight = mViewport.logicalRight - mViewport.logicalLeft;
-                naturalPhysicalWidth = mViewport.physicalBottom - mViewport.physicalTop;
-                naturalPhysicalHeight = mViewport.physicalRight - mViewport.physicalLeft;
-                naturalPhysicalLeft = mViewport.physicalTop;
-                naturalPhysicalTop = mViewport.deviceWidth - mViewport.physicalRight;
-                naturalDeviceWidth = mViewport.deviceHeight;
-                naturalDeviceHeight = mViewport.deviceWidth;
-                break;
-            case DISPLAY_ORIENTATION_0:
-            default:
-                naturalLogicalWidth = mViewport.logicalRight - mViewport.logicalLeft;
-                naturalLogicalHeight = mViewport.logicalBottom - mViewport.logicalTop;
-                naturalPhysicalWidth = mViewport.physicalRight - mViewport.physicalLeft;
-                naturalPhysicalHeight = mViewport.physicalBottom - mViewport.physicalTop;
-                naturalPhysicalLeft = mViewport.physicalLeft;
-                naturalPhysicalTop = mViewport.physicalTop;
-                naturalDeviceWidth = mViewport.deviceWidth;
-                naturalDeviceHeight = mViewport.deviceHeight;
-                break;
-            }
-
-            mSurfaceWidth = naturalLogicalWidth * naturalDeviceWidth / naturalPhysicalWidth;
-            mSurfaceHeight = naturalLogicalHeight * naturalDeviceHeight / naturalPhysicalHeight;
-            mSurfaceLeft = naturalPhysicalLeft * naturalLogicalWidth / naturalPhysicalWidth;
-            mSurfaceTop = naturalPhysicalTop * naturalLogicalHeight / naturalPhysicalHeight;
-
-            mSurfaceOrientation = mParameters.orientationAware ?
-                    mViewport.orientation : DISPLAY_ORIENTATION_0;
-        } else {
-            mSurfaceWidth = rawWidth;
-            mSurfaceHeight = rawHeight;
-            mSurfaceLeft = 0;
-            mSurfaceTop = 0;
-            mSurfaceOrientation = DISPLAY_ORIENTATION_0;
-        }
-    }
-
-    // If moving between pointer modes, need to reset some state.
-    bool deviceModeChanged = mDeviceMode != oldDeviceMode;
-    if (deviceModeChanged) {
-        mOrientedRanges.clear();
-    }
-
-    // Create pointer controller if needed.
-    if (mDeviceMode == DEVICE_MODE_POINTER ||
-            (mDeviceMode == DEVICE_MODE_DIRECT && mConfig.showTouches)) {
-        if (mPointerController == NULL) {
-            mPointerController = getPolicy()->obtainPointerController(getDeviceId());
-        }
-    } else {
-        mPointerController.clear();
-    }
-
-    if (viewportChanged || deviceModeChanged) {
-        ALOGI("Device reconfigured: id=%d, name='%s', size %dx%d, orientation %d, mode %d, "
-                "display id %d",
-                getDeviceId(), getDeviceName().string(), mSurfaceWidth, mSurfaceHeight,
-                mSurfaceOrientation, mDeviceMode, mViewport.displayId);
-
-        // Configure X and Y factors.
-        mXScale = float(mSurfaceWidth) / rawWidth;
-        mYScale = float(mSurfaceHeight) / rawHeight;
-        mXTranslate = -mSurfaceLeft;
-        mYTranslate = -mSurfaceTop;
-        mXPrecision = 1.0f / mXScale;
-        mYPrecision = 1.0f / mYScale;
-
-        mOrientedRanges.x.axis = AMOTION_EVENT_AXIS_X;
-        mOrientedRanges.x.source = mSource;
-        mOrientedRanges.y.axis = AMOTION_EVENT_AXIS_Y;
-        mOrientedRanges.y.source = mSource;
-
-        configureVirtualKeys();
-
-        // Scale factor for terms that are not oriented in a particular axis.
-        // If the pixels are square then xScale == yScale otherwise we fake it
-        // by choosing an average.
-        mGeometricScale = avg(mXScale, mYScale);
-
-        // Size of diagonal axis.
-        float diagonalSize = hypotf(mSurfaceWidth, mSurfaceHeight);
-
-        // Size factors.
-        if (mCalibration.sizeCalibration != Calibration::SIZE_CALIBRATION_NONE) {
-            if (mRawPointerAxes.touchMajor.valid
-                    && mRawPointerAxes.touchMajor.maxValue != 0) {
-                mSizeScale = 1.0f / mRawPointerAxes.touchMajor.maxValue;
-            } else if (mRawPointerAxes.toolMajor.valid
-                    && mRawPointerAxes.toolMajor.maxValue != 0) {
-                mSizeScale = 1.0f / mRawPointerAxes.toolMajor.maxValue;
-            } else {
-                mSizeScale = 0.0f;
-            }
-
-            mOrientedRanges.haveTouchSize = true;
-            mOrientedRanges.haveToolSize = true;
-            mOrientedRanges.haveSize = true;
-
-            mOrientedRanges.touchMajor.axis = AMOTION_EVENT_AXIS_TOUCH_MAJOR;
-            mOrientedRanges.touchMajor.source = mSource;
-            mOrientedRanges.touchMajor.min = 0;
-            mOrientedRanges.touchMajor.max = diagonalSize;
-            mOrientedRanges.touchMajor.flat = 0;
-            mOrientedRanges.touchMajor.fuzz = 0;
-            mOrientedRanges.touchMajor.resolution = 0;
-
-            mOrientedRanges.touchMinor = mOrientedRanges.touchMajor;
-            mOrientedRanges.touchMinor.axis = AMOTION_EVENT_AXIS_TOUCH_MINOR;
-
-            mOrientedRanges.toolMajor.axis = AMOTION_EVENT_AXIS_TOOL_MAJOR;
-            mOrientedRanges.toolMajor.source = mSource;
-            mOrientedRanges.toolMajor.min = 0;
-            mOrientedRanges.toolMajor.max = diagonalSize;
-            mOrientedRanges.toolMajor.flat = 0;
-            mOrientedRanges.toolMajor.fuzz = 0;
-            mOrientedRanges.toolMajor.resolution = 0;
-
-            mOrientedRanges.toolMinor = mOrientedRanges.toolMajor;
-            mOrientedRanges.toolMinor.axis = AMOTION_EVENT_AXIS_TOOL_MINOR;
-
-            mOrientedRanges.size.axis = AMOTION_EVENT_AXIS_SIZE;
-            mOrientedRanges.size.source = mSource;
-            mOrientedRanges.size.min = 0;
-            mOrientedRanges.size.max = 1.0;
-            mOrientedRanges.size.flat = 0;
-            mOrientedRanges.size.fuzz = 0;
-            mOrientedRanges.size.resolution = 0;
-        } else {
-            mSizeScale = 0.0f;
-        }
-
-        // Pressure factors.
-        mPressureScale = 0;
-        if (mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_PHYSICAL
-                || mCalibration.pressureCalibration
-                        == Calibration::PRESSURE_CALIBRATION_AMPLITUDE) {
-            if (mCalibration.havePressureScale) {
-                mPressureScale = mCalibration.pressureScale;
-            } else if (mRawPointerAxes.pressure.valid
-                    && mRawPointerAxes.pressure.maxValue != 0) {
-                mPressureScale = 1.0f / mRawPointerAxes.pressure.maxValue;
-            }
-        }
-
-        mOrientedRanges.pressure.axis = AMOTION_EVENT_AXIS_PRESSURE;
-        mOrientedRanges.pressure.source = mSource;
-        mOrientedRanges.pressure.min = 0;
-        mOrientedRanges.pressure.max = 1.0;
-        mOrientedRanges.pressure.flat = 0;
-        mOrientedRanges.pressure.fuzz = 0;
-        mOrientedRanges.pressure.resolution = 0;
-
-        // Tilt
-        mTiltXCenter = 0;
-        mTiltXScale = 0;
-        mTiltYCenter = 0;
-        mTiltYScale = 0;
-        mHaveTilt = mRawPointerAxes.tiltX.valid && mRawPointerAxes.tiltY.valid;
-        if (mHaveTilt) {
-            mTiltXCenter = avg(mRawPointerAxes.tiltX.minValue,
-                    mRawPointerAxes.tiltX.maxValue);
-            mTiltYCenter = avg(mRawPointerAxes.tiltY.minValue,
-                    mRawPointerAxes.tiltY.maxValue);
-            mTiltXScale = M_PI / 180;
-            mTiltYScale = M_PI / 180;
-
-            mOrientedRanges.haveTilt = true;
-
-            mOrientedRanges.tilt.axis = AMOTION_EVENT_AXIS_TILT;
-            mOrientedRanges.tilt.source = mSource;
-            mOrientedRanges.tilt.min = 0;
-            mOrientedRanges.tilt.max = M_PI_2;
-            mOrientedRanges.tilt.flat = 0;
-            mOrientedRanges.tilt.fuzz = 0;
-            mOrientedRanges.tilt.resolution = 0;
-        }
-
-        // Orientation
-        mOrientationScale = 0;
-        if (mHaveTilt) {
-            mOrientedRanges.haveOrientation = true;
-
-            mOrientedRanges.orientation.axis = AMOTION_EVENT_AXIS_ORIENTATION;
-            mOrientedRanges.orientation.source = mSource;
-            mOrientedRanges.orientation.min = -M_PI;
-            mOrientedRanges.orientation.max = M_PI;
-            mOrientedRanges.orientation.flat = 0;
-            mOrientedRanges.orientation.fuzz = 0;
-            mOrientedRanges.orientation.resolution = 0;
-        } else if (mCalibration.orientationCalibration !=
-                Calibration::ORIENTATION_CALIBRATION_NONE) {
-            if (mCalibration.orientationCalibration
-                    == Calibration::ORIENTATION_CALIBRATION_INTERPOLATED) {
-                if (mRawPointerAxes.orientation.valid) {
-                    if (mRawPointerAxes.orientation.maxValue > 0) {
-                        mOrientationScale = M_PI_2 / mRawPointerAxes.orientation.maxValue;
-                    } else if (mRawPointerAxes.orientation.minValue < 0) {
-                        mOrientationScale = -M_PI_2 / mRawPointerAxes.orientation.minValue;
-                    } else {
-                        mOrientationScale = 0;
-                    }
-                }
-            }
-
-            mOrientedRanges.haveOrientation = true;
-
-            mOrientedRanges.orientation.axis = AMOTION_EVENT_AXIS_ORIENTATION;
-            mOrientedRanges.orientation.source = mSource;
-            mOrientedRanges.orientation.min = -M_PI_2;
-            mOrientedRanges.orientation.max = M_PI_2;
-            mOrientedRanges.orientation.flat = 0;
-            mOrientedRanges.orientation.fuzz = 0;
-            mOrientedRanges.orientation.resolution = 0;
-        }
-
-        // Distance
-        mDistanceScale = 0;
-        if (mCalibration.distanceCalibration != Calibration::DISTANCE_CALIBRATION_NONE) {
-            if (mCalibration.distanceCalibration
-                    == Calibration::DISTANCE_CALIBRATION_SCALED) {
-                if (mCalibration.haveDistanceScale) {
-                    mDistanceScale = mCalibration.distanceScale;
-                } else {
-                    mDistanceScale = 1.0f;
-                }
-            }
-
-            mOrientedRanges.haveDistance = true;
-
-            mOrientedRanges.distance.axis = AMOTION_EVENT_AXIS_DISTANCE;
-            mOrientedRanges.distance.source = mSource;
-            mOrientedRanges.distance.min =
-                    mRawPointerAxes.distance.minValue * mDistanceScale;
-            mOrientedRanges.distance.max =
-                    mRawPointerAxes.distance.maxValue * mDistanceScale;
-            mOrientedRanges.distance.flat = 0;
-            mOrientedRanges.distance.fuzz =
-                    mRawPointerAxes.distance.fuzz * mDistanceScale;
-            mOrientedRanges.distance.resolution = 0;
-        }
-
-        // Compute oriented precision, scales and ranges.
-        // Note that the maximum value reported is an inclusive maximum value so it is one
-        // unit less than the total width or height of surface.
-        switch (mSurfaceOrientation) {
-        case DISPLAY_ORIENTATION_90:
-        case DISPLAY_ORIENTATION_270:
-            mOrientedXPrecision = mYPrecision;
-            mOrientedYPrecision = mXPrecision;
-
-            mOrientedRanges.x.min = mYTranslate;
-            mOrientedRanges.x.max = mSurfaceHeight + mYTranslate - 1;
-            mOrientedRanges.x.flat = 0;
-            mOrientedRanges.x.fuzz = 0;
-            mOrientedRanges.x.resolution = mRawPointerAxes.y.resolution * mYScale;
-
-            mOrientedRanges.y.min = mXTranslate;
-            mOrientedRanges.y.max = mSurfaceWidth + mXTranslate - 1;
-            mOrientedRanges.y.flat = 0;
-            mOrientedRanges.y.fuzz = 0;
-            mOrientedRanges.y.resolution = mRawPointerAxes.x.resolution * mXScale;
-            break;
-
-        default:
-            mOrientedXPrecision = mXPrecision;
-            mOrientedYPrecision = mYPrecision;
-
-            mOrientedRanges.x.min = mXTranslate;
-            mOrientedRanges.x.max = mSurfaceWidth + mXTranslate - 1;
-            mOrientedRanges.x.flat = 0;
-            mOrientedRanges.x.fuzz = 0;
-            mOrientedRanges.x.resolution = mRawPointerAxes.x.resolution * mXScale;
-
-            mOrientedRanges.y.min = mYTranslate;
-            mOrientedRanges.y.max = mSurfaceHeight + mYTranslate - 1;
-            mOrientedRanges.y.flat = 0;
-            mOrientedRanges.y.fuzz = 0;
-            mOrientedRanges.y.resolution = mRawPointerAxes.y.resolution * mYScale;
-            break;
-        }
-
-        if (mDeviceMode == DEVICE_MODE_POINTER) {
-            // Compute pointer gesture detection parameters.
-            float rawDiagonal = hypotf(rawWidth, rawHeight);
-            float displayDiagonal = hypotf(mSurfaceWidth, mSurfaceHeight);
-
-            // Scale movements such that one whole swipe of the touch pad covers a
-            // given area relative to the diagonal size of the display when no acceleration
-            // is applied.
-            // Assume that the touch pad has a square aspect ratio such that movements in
-            // X and Y of the same number of raw units cover the same physical distance.
-            mPointerXMovementScale = mConfig.pointerGestureMovementSpeedRatio
-                    * displayDiagonal / rawDiagonal;
-            mPointerYMovementScale = mPointerXMovementScale;
-
-            // Scale zooms to cover a smaller range of the display than movements do.
-            // This value determines the area around the pointer that is affected by freeform
-            // pointer gestures.
-            mPointerXZoomScale = mConfig.pointerGestureZoomSpeedRatio
-                    * displayDiagonal / rawDiagonal;
-            mPointerYZoomScale = mPointerXZoomScale;
-
-            // Max width between pointers to detect a swipe gesture is more than some fraction
-            // of the diagonal axis of the touch pad.  Touches that are wider than this are
-            // translated into freeform gestures.
-            mPointerGestureMaxSwipeWidth =
-                    mConfig.pointerGestureSwipeMaxWidthRatio * rawDiagonal;
-
-            // Abort current pointer usages because the state has changed.
-            abortPointerUsage(when, 0 /*policyFlags*/);
-        }
-
-        // Inform the dispatcher about the changes.
-        *outResetNeeded = true;
-        bumpGeneration();
-    }
-}
-
-void TouchInputMapper::dumpSurface(String8& dump) {
-    dump.appendFormat(INDENT3 "Viewport: displayId=%d, orientation=%d, "
-            "logicalFrame=[%d, %d, %d, %d], "
-            "physicalFrame=[%d, %d, %d, %d], "
-            "deviceSize=[%d, %d]\n",
-            mViewport.displayId, mViewport.orientation,
-            mViewport.logicalLeft, mViewport.logicalTop,
-            mViewport.logicalRight, mViewport.logicalBottom,
-            mViewport.physicalLeft, mViewport.physicalTop,
-            mViewport.physicalRight, mViewport.physicalBottom,
-            mViewport.deviceWidth, mViewport.deviceHeight);
-
-    dump.appendFormat(INDENT3 "SurfaceWidth: %dpx\n", mSurfaceWidth);
-    dump.appendFormat(INDENT3 "SurfaceHeight: %dpx\n", mSurfaceHeight);
-    dump.appendFormat(INDENT3 "SurfaceLeft: %d\n", mSurfaceLeft);
-    dump.appendFormat(INDENT3 "SurfaceTop: %d\n", mSurfaceTop);
-    dump.appendFormat(INDENT3 "SurfaceOrientation: %d\n", mSurfaceOrientation);
-}
-
-void TouchInputMapper::configureVirtualKeys() {
-    Vector<VirtualKeyDefinition> virtualKeyDefinitions;
-    getEventHub()->getVirtualKeyDefinitions(getDeviceId(), virtualKeyDefinitions);
-
-    mVirtualKeys.clear();
-
-    if (virtualKeyDefinitions.size() == 0) {
-        return;
-    }
-
-    mVirtualKeys.setCapacity(virtualKeyDefinitions.size());
-
-    int32_t touchScreenLeft = mRawPointerAxes.x.minValue;
-    int32_t touchScreenTop = mRawPointerAxes.y.minValue;
-    int32_t touchScreenWidth = mRawPointerAxes.x.maxValue - mRawPointerAxes.x.minValue + 1;
-    int32_t touchScreenHeight = mRawPointerAxes.y.maxValue - mRawPointerAxes.y.minValue + 1;
-
-    for (size_t i = 0; i < virtualKeyDefinitions.size(); i++) {
-        const VirtualKeyDefinition& virtualKeyDefinition =
-                virtualKeyDefinitions[i];
-
-        mVirtualKeys.add();
-        VirtualKey& virtualKey = mVirtualKeys.editTop();
-
-        virtualKey.scanCode = virtualKeyDefinition.scanCode;
-        int32_t keyCode;
-        uint32_t flags;
-        if (getEventHub()->mapKey(getDeviceId(), virtualKey.scanCode, 0, &keyCode, &flags)) {
-            ALOGW(INDENT "VirtualKey %d: could not obtain key code, ignoring",
-                    virtualKey.scanCode);
-            mVirtualKeys.pop(); // drop the key
-            continue;
-        }
-
-        virtualKey.keyCode = keyCode;
-        virtualKey.flags = flags;
-
-        // convert the key definition's display coordinates into touch coordinates for a hit box
-        int32_t halfWidth = virtualKeyDefinition.width / 2;
-        int32_t halfHeight = virtualKeyDefinition.height / 2;
-
-        virtualKey.hitLeft = (virtualKeyDefinition.centerX - halfWidth)
-                * touchScreenWidth / mSurfaceWidth + touchScreenLeft;
-        virtualKey.hitRight= (virtualKeyDefinition.centerX + halfWidth)
-                * touchScreenWidth / mSurfaceWidth + touchScreenLeft;
-        virtualKey.hitTop = (virtualKeyDefinition.centerY - halfHeight)
-                * touchScreenHeight / mSurfaceHeight + touchScreenTop;
-        virtualKey.hitBottom = (virtualKeyDefinition.centerY + halfHeight)
-                * touchScreenHeight / mSurfaceHeight + touchScreenTop;
-    }
-}
-
-void TouchInputMapper::dumpVirtualKeys(String8& dump) {
-    if (!mVirtualKeys.isEmpty()) {
-        dump.append(INDENT3 "Virtual Keys:\n");
-
-        for (size_t i = 0; i < mVirtualKeys.size(); i++) {
-            const VirtualKey& virtualKey = mVirtualKeys.itemAt(i);
-            dump.appendFormat(INDENT4 "%zu: scanCode=%d, keyCode=%d, "
-                    "hitLeft=%d, hitRight=%d, hitTop=%d, hitBottom=%d\n",
-                    i, virtualKey.scanCode, virtualKey.keyCode,
-                    virtualKey.hitLeft, virtualKey.hitRight,
-                    virtualKey.hitTop, virtualKey.hitBottom);
-        }
-    }
-}
-
-void TouchInputMapper::parseCalibration() {
-    const PropertyMap& in = getDevice()->getConfiguration();
-    Calibration& out = mCalibration;
-
-    // Size
-    out.sizeCalibration = Calibration::SIZE_CALIBRATION_DEFAULT;
-    String8 sizeCalibrationString;
-    if (in.tryGetProperty(String8("touch.size.calibration"), sizeCalibrationString)) {
-        if (sizeCalibrationString == "none") {
-            out.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE;
-        } else if (sizeCalibrationString == "geometric") {
-            out.sizeCalibration = Calibration::SIZE_CALIBRATION_GEOMETRIC;
-        } else if (sizeCalibrationString == "diameter") {
-            out.sizeCalibration = Calibration::SIZE_CALIBRATION_DIAMETER;
-        } else if (sizeCalibrationString == "box") {
-            out.sizeCalibration = Calibration::SIZE_CALIBRATION_BOX;
-        } else if (sizeCalibrationString == "area") {
-            out.sizeCalibration = Calibration::SIZE_CALIBRATION_AREA;
-        } else if (sizeCalibrationString != "default") {
-            ALOGW("Invalid value for touch.size.calibration: '%s'",
-                    sizeCalibrationString.string());
-        }
-    }
-
-    out.haveSizeScale = in.tryGetProperty(String8("touch.size.scale"),
-            out.sizeScale);
-    out.haveSizeBias = in.tryGetProperty(String8("touch.size.bias"),
-            out.sizeBias);
-    out.haveSizeIsSummed = in.tryGetProperty(String8("touch.size.isSummed"),
-            out.sizeIsSummed);
-
-    // Pressure
-    out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_DEFAULT;
-    String8 pressureCalibrationString;
-    if (in.tryGetProperty(String8("touch.pressure.calibration"), pressureCalibrationString)) {
-        if (pressureCalibrationString == "none") {
-            out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_NONE;
-        } else if (pressureCalibrationString == "physical") {
-            out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_PHYSICAL;
-        } else if (pressureCalibrationString == "amplitude") {
-            out.pressureCalibration = Calibration::PRESSURE_CALIBRATION_AMPLITUDE;
-        } else if (pressureCalibrationString != "default") {
-            ALOGW("Invalid value for touch.pressure.calibration: '%s'",
-                    pressureCalibrationString.string());
-        }
-    }
-
-    out.havePressureScale = in.tryGetProperty(String8("touch.pressure.scale"),
-            out.pressureScale);
-
-    // Orientation
-    out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_DEFAULT;
-    String8 orientationCalibrationString;
-    if (in.tryGetProperty(String8("touch.orientation.calibration"), orientationCalibrationString)) {
-        if (orientationCalibrationString == "none") {
-            out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_NONE;
-        } else if (orientationCalibrationString == "interpolated") {
-            out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_INTERPOLATED;
-        } else if (orientationCalibrationString == "vector") {
-            out.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_VECTOR;
-        } else if (orientationCalibrationString != "default") {
-            ALOGW("Invalid value for touch.orientation.calibration: '%s'",
-                    orientationCalibrationString.string());
-        }
-    }
-
-    // Distance
-    out.distanceCalibration = Calibration::DISTANCE_CALIBRATION_DEFAULT;
-    String8 distanceCalibrationString;
-    if (in.tryGetProperty(String8("touch.distance.calibration"), distanceCalibrationString)) {
-        if (distanceCalibrationString == "none") {
-            out.distanceCalibration = Calibration::DISTANCE_CALIBRATION_NONE;
-        } else if (distanceCalibrationString == "scaled") {
-            out.distanceCalibration = Calibration::DISTANCE_CALIBRATION_SCALED;
-        } else if (distanceCalibrationString != "default") {
-            ALOGW("Invalid value for touch.distance.calibration: '%s'",
-                    distanceCalibrationString.string());
-        }
-    }
-
-    out.haveDistanceScale = in.tryGetProperty(String8("touch.distance.scale"),
-            out.distanceScale);
-
-    out.coverageCalibration = Calibration::COVERAGE_CALIBRATION_DEFAULT;
-    String8 coverageCalibrationString;
-    if (in.tryGetProperty(String8("touch.coverage.calibration"), coverageCalibrationString)) {
-        if (coverageCalibrationString == "none") {
-            out.coverageCalibration = Calibration::COVERAGE_CALIBRATION_NONE;
-        } else if (coverageCalibrationString == "box") {
-            out.coverageCalibration = Calibration::COVERAGE_CALIBRATION_BOX;
-        } else if (coverageCalibrationString != "default") {
-            ALOGW("Invalid value for touch.coverage.calibration: '%s'",
-                    coverageCalibrationString.string());
-        }
-    }
-}
-
-void TouchInputMapper::resolveCalibration() {
-    // Size
-    if (mRawPointerAxes.touchMajor.valid || mRawPointerAxes.toolMajor.valid) {
-        if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_DEFAULT) {
-            mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_GEOMETRIC;
-        }
-    } else {
-        mCalibration.sizeCalibration = Calibration::SIZE_CALIBRATION_NONE;
-    }
-
-    // Pressure
-    if (mRawPointerAxes.pressure.valid) {
-        if (mCalibration.pressureCalibration == Calibration::PRESSURE_CALIBRATION_DEFAULT) {
-            mCalibration.pressureCalibration = Calibration::PRESSURE_CALIBRATION_PHYSICAL;
-        }
-    } else {
-        mCalibration.pressureCalibration = Calibration::PRESSURE_CALIBRATION_NONE;
-    }
-
-    // Orientation
-    if (mRawPointerAxes.orientation.valid) {
-        if (mCalibration.orientationCalibration == Calibration::ORIENTATION_CALIBRATION_DEFAULT) {
-            mCalibration.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_INTERPOLATED;
-        }
-    } else {
-        mCalibration.orientationCalibration = Calibration::ORIENTATION_CALIBRATION_NONE;
-    }
-
-    // Distance
-    if (mRawPointerAxes.distance.valid) {
-        if (mCalibration.distanceCalibration == Calibration::DISTANCE_CALIBRATION_DEFAULT) {
-            mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_SCALED;
-        }
-    } else {
-        mCalibration.distanceCalibration = Calibration::DISTANCE_CALIBRATION_NONE;
-    }
-
-    // Coverage
-    if (mCalibration.coverageCalibration == Calibration::COVERAGE_CALIBRATION_DEFAULT) {
-        mCalibration.coverageCalibration = Calibration::COVERAGE_CALIBRATION_NONE;
-    }
-}
-
-void TouchInputMapper::dumpCalibration(String8& dump) {
-    dump.append(INDENT3 "Calibration:\n");
-
-    // Size
-    switch (mCalibration.sizeCalibration) {
-    case Calibration::SIZE_CALIBRATION_NONE:
-        dump.append(INDENT4 "touch.size.calibration: none\n");
-        break;
-    case Calibration::SIZE_CALIBRATION_GEOMETRIC:
-        dump.append(INDENT4 "touch.size.calibration: geometric\n");
-        break;
-    case Calibration::SIZE_CALIBRATION_DIAMETER:
-        dump.append(INDENT4 "touch.size.calibration: diameter\n");
-        break;
-    case Calibration::SIZE_CALIBRATION_BOX:
-        dump.append(INDENT4 "touch.size.calibration: box\n");
-        break;
-    case Calibration::SIZE_CALIBRATION_AREA:
-        dump.append(INDENT4 "touch.size.calibration: area\n");
-        break;
-    default:
-        ALOG_ASSERT(false);
-    }
-
-    if (mCalibration.haveSizeScale) {
-        dump.appendFormat(INDENT4 "touch.size.scale: %0.3f\n",
-                mCalibration.sizeScale);
-    }
-
-    if (mCalibration.haveSizeBias) {
-        dump.appendFormat(INDENT4 "touch.size.bias: %0.3f\n",
-                mCalibration.sizeBias);
-    }
-
-    if (mCalibration.haveSizeIsSummed) {
-        dump.appendFormat(INDENT4 "touch.size.isSummed: %s\n",
-                toString(mCalibration.sizeIsSummed));
-    }
-
-    // Pressure
-    switch (mCalibration.pressureCalibration) {
-    case Calibration::PRESSURE_CALIBRATION_NONE:
-        dump.append(INDENT4 "touch.pressure.calibration: none\n");
-        break;
-    case Calibration::PRESSURE_CALIBRATION_PHYSICAL:
-        dump.append(INDENT4 "touch.pressure.calibration: physical\n");
-        break;
-    case Calibration::PRESSURE_CALIBRATION_AMPLITUDE:
-        dump.append(INDENT4 "touch.pressure.calibration: amplitude\n");
-        break;
-    default:
-        ALOG_ASSERT(false);
-    }
-
-    if (mCalibration.havePressureScale) {
-        dump.appendFormat(INDENT4 "touch.pressure.scale: %0.3f\n",
-                mCalibration.pressureScale);
-    }
-
-    // Orientation
-    switch (mCalibration.orientationCalibration) {
-    case Calibration::ORIENTATION_CALIBRATION_NONE:
-        dump.append(INDENT4 "touch.orientation.calibration: none\n");
-        break;
-    case Calibration::ORIENTATION_CALIBRATION_INTERPOLATED:
-        dump.append(INDENT4 "touch.orientation.calibration: interpolated\n");
-        break;
-    case Calibration::ORIENTATION_CALIBRATION_VECTOR:
-        dump.append(INDENT4 "touch.orientation.calibration: vector\n");
-        break;
-    default:
-        ALOG_ASSERT(false);
-    }
-
-    // Distance
-    switch (mCalibration.distanceCalibration) {
-    case Calibration::DISTANCE_CALIBRATION_NONE:
-        dump.append(INDENT4 "touch.distance.calibration: none\n");
-        break;
-    case Calibration::DISTANCE_CALIBRATION_SCALED:
-        dump.append(INDENT4 "touch.distance.calibration: scaled\n");
-        break;
-    default:
-        ALOG_ASSERT(false);
-    }
-
-    if (mCalibration.haveDistanceScale) {
-        dump.appendFormat(INDENT4 "touch.distance.scale: %0.3f\n",
-                mCalibration.distanceScale);
-    }
-
-    switch (mCalibration.coverageCalibration) {
-    case Calibration::COVERAGE_CALIBRATION_NONE:
-        dump.append(INDENT4 "touch.coverage.calibration: none\n");
-        break;
-    case Calibration::COVERAGE_CALIBRATION_BOX:
-        dump.append(INDENT4 "touch.coverage.calibration: box\n");
-        break;
-    default:
-        ALOG_ASSERT(false);
-    }
-}
-
-void TouchInputMapper::reset(nsecs_t when) {
-    mCursorButtonAccumulator.reset(getDevice());
-    mCursorScrollAccumulator.reset(getDevice());
-    mTouchButtonAccumulator.reset(getDevice());
-
-    mPointerVelocityControl.reset();
-    mWheelXVelocityControl.reset();
-    mWheelYVelocityControl.reset();
-
-    mCurrentRawPointerData.clear();
-    mLastRawPointerData.clear();
-    mCurrentCookedPointerData.clear();
-    mLastCookedPointerData.clear();
-    mCurrentButtonState = 0;
-    mLastButtonState = 0;
-    mCurrentRawVScroll = 0;
-    mCurrentRawHScroll = 0;
-    mCurrentFingerIdBits.clear();
-    mLastFingerIdBits.clear();
-    mCurrentStylusIdBits.clear();
-    mLastStylusIdBits.clear();
-    mCurrentMouseIdBits.clear();
-    mLastMouseIdBits.clear();
-    mPointerUsage = POINTER_USAGE_NONE;
-    mSentHoverEnter = false;
-    mDownTime = 0;
-
-    mCurrentVirtualKey.down = false;
-
-    mPointerGesture.reset();
-    mPointerSimple.reset();
-
-    if (mPointerController != NULL) {
-        mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
-        mPointerController->clearSpots();
-    }
-
-    InputMapper::reset(when);
-}
-
-void TouchInputMapper::process(const RawEvent* rawEvent) {
-    mCursorButtonAccumulator.process(rawEvent);
-    mCursorScrollAccumulator.process(rawEvent);
-    mTouchButtonAccumulator.process(rawEvent);
-
-    if (rawEvent->type == EV_SYN && rawEvent->code == SYN_REPORT) {
-        sync(rawEvent->when);
-    }
-}
-
-void TouchInputMapper::sync(nsecs_t when) {
-    // Sync button state.
-    mCurrentButtonState = mTouchButtonAccumulator.getButtonState()
-            | mCursorButtonAccumulator.getButtonState();
-
-    // Sync scroll state.
-    mCurrentRawVScroll = mCursorScrollAccumulator.getRelativeVWheel();
-    mCurrentRawHScroll = mCursorScrollAccumulator.getRelativeHWheel();
-    mCursorScrollAccumulator.finishSync();
-
-    // Sync touch state.
-    bool havePointerIds = true;
-    mCurrentRawPointerData.clear();
-    syncTouch(when, &havePointerIds);
-
-#if DEBUG_RAW_EVENTS
-    if (!havePointerIds) {
-        ALOGD("syncTouch: pointerCount %d -> %d, no pointer ids",
-                mLastRawPointerData.pointerCount,
-                mCurrentRawPointerData.pointerCount);
-    } else {
-        ALOGD("syncTouch: pointerCount %d -> %d, touching ids 0x%08x -> 0x%08x, "
-                "hovering ids 0x%08x -> 0x%08x",
-                mLastRawPointerData.pointerCount,
-                mCurrentRawPointerData.pointerCount,
-                mLastRawPointerData.touchingIdBits.value,
-                mCurrentRawPointerData.touchingIdBits.value,
-                mLastRawPointerData.hoveringIdBits.value,
-                mCurrentRawPointerData.hoveringIdBits.value);
-    }
-#endif
-
-    // Reset state that we will compute below.
-    mCurrentFingerIdBits.clear();
-    mCurrentStylusIdBits.clear();
-    mCurrentMouseIdBits.clear();
-    mCurrentCookedPointerData.clear();
-
-    if (mDeviceMode == DEVICE_MODE_DISABLED) {
-        // Drop all input if the device is disabled.
-        mCurrentRawPointerData.clear();
-        mCurrentButtonState = 0;
-    } else {
-        // Preprocess pointer data.
-        if (!havePointerIds) {
-            assignPointerIds();
-        }
-
-        // Handle policy on initial down or hover events.
-        uint32_t policyFlags = 0;
-        bool initialDown = mLastRawPointerData.pointerCount == 0
-                && mCurrentRawPointerData.pointerCount != 0;
-        bool buttonsPressed = mCurrentButtonState & ~mLastButtonState;
-        if (initialDown || buttonsPressed) {
-            // If this is a touch screen, hide the pointer on an initial down.
-            if (mDeviceMode == DEVICE_MODE_DIRECT) {
-                getContext()->fadePointer();
-            }
-
-            if (mParameters.wake) {
-                policyFlags |= POLICY_FLAG_WAKE_DROPPED;
-            }
-        }
-
-        // Synthesize key down from raw buttons if needed.
-        synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_DOWN, when, getDeviceId(), mSource,
-                policyFlags, mLastButtonState, mCurrentButtonState);
-
-        // Consume raw off-screen touches before cooking pointer data.
-        // If touches are consumed, subsequent code will not receive any pointer data.
-        if (consumeRawTouches(when, policyFlags)) {
-            mCurrentRawPointerData.clear();
-        }
-
-        // Cook pointer data.  This call populates the mCurrentCookedPointerData structure
-        // with cooked pointer data that has the same ids and indices as the raw data.
-        // The following code can use either the raw or cooked data, as needed.
-        cookPointerData();
-
-        // Dispatch the touches either directly or by translation through a pointer on screen.
-        if (mDeviceMode == DEVICE_MODE_POINTER) {
-            for (BitSet32 idBits(mCurrentRawPointerData.touchingIdBits); !idBits.isEmpty(); ) {
-                uint32_t id = idBits.clearFirstMarkedBit();
-                const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
-                if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_STYLUS
-                        || pointer.toolType == AMOTION_EVENT_TOOL_TYPE_ERASER) {
-                    mCurrentStylusIdBits.markBit(id);
-                } else if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_FINGER
-                        || pointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
-                    mCurrentFingerIdBits.markBit(id);
-                } else if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_MOUSE) {
-                    mCurrentMouseIdBits.markBit(id);
-                }
-            }
-            for (BitSet32 idBits(mCurrentRawPointerData.hoveringIdBits); !idBits.isEmpty(); ) {
-                uint32_t id = idBits.clearFirstMarkedBit();
-                const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
-                if (pointer.toolType == AMOTION_EVENT_TOOL_TYPE_STYLUS
-                        || pointer.toolType == AMOTION_EVENT_TOOL_TYPE_ERASER) {
-                    mCurrentStylusIdBits.markBit(id);
-                }
-            }
-
-            // Stylus takes precedence over all tools, then mouse, then finger.
-            PointerUsage pointerUsage = mPointerUsage;
-            if (!mCurrentStylusIdBits.isEmpty()) {
-                mCurrentMouseIdBits.clear();
-                mCurrentFingerIdBits.clear();
-                pointerUsage = POINTER_USAGE_STYLUS;
-            } else if (!mCurrentMouseIdBits.isEmpty()) {
-                mCurrentFingerIdBits.clear();
-                pointerUsage = POINTER_USAGE_MOUSE;
-            } else if (!mCurrentFingerIdBits.isEmpty() || isPointerDown(mCurrentButtonState)) {
-                pointerUsage = POINTER_USAGE_GESTURES;
-            }
-
-            dispatchPointerUsage(when, policyFlags, pointerUsage);
-        } else {
-            if (mDeviceMode == DEVICE_MODE_DIRECT
-                    && mConfig.showTouches && mPointerController != NULL) {
-                mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_SPOT);
-                mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
-
-                mPointerController->setButtonState(mCurrentButtonState);
-                mPointerController->setSpots(mCurrentCookedPointerData.pointerCoords,
-                        mCurrentCookedPointerData.idToIndex,
-                        mCurrentCookedPointerData.touchingIdBits);
-            }
-
-            dispatchHoverExit(when, policyFlags);
-            dispatchTouches(when, policyFlags);
-            dispatchHoverEnterAndMove(when, policyFlags);
-        }
-
-        // Synthesize key up from raw buttons if needed.
-        synthesizeButtonKeys(getContext(), AKEY_EVENT_ACTION_UP, when, getDeviceId(), mSource,
-                policyFlags, mLastButtonState, mCurrentButtonState);
-    }
-
-    // Copy current touch to last touch in preparation for the next cycle.
-    mLastRawPointerData.copyFrom(mCurrentRawPointerData);
-    mLastCookedPointerData.copyFrom(mCurrentCookedPointerData);
-    mLastButtonState = mCurrentButtonState;
-    mLastFingerIdBits = mCurrentFingerIdBits;
-    mLastStylusIdBits = mCurrentStylusIdBits;
-    mLastMouseIdBits = mCurrentMouseIdBits;
-
-    // Clear some transient state.
-    mCurrentRawVScroll = 0;
-    mCurrentRawHScroll = 0;
-}
-
-void TouchInputMapper::timeoutExpired(nsecs_t when) {
-    if (mDeviceMode == DEVICE_MODE_POINTER) {
-        if (mPointerUsage == POINTER_USAGE_GESTURES) {
-            dispatchPointerGestures(when, 0 /*policyFlags*/, true /*isTimeout*/);
-        }
-    }
-}
-
-bool TouchInputMapper::consumeRawTouches(nsecs_t when, uint32_t policyFlags) {
-    // Check for release of a virtual key.
-    if (mCurrentVirtualKey.down) {
-        if (mCurrentRawPointerData.touchingIdBits.isEmpty()) {
-            // Pointer went up while virtual key was down.
-            mCurrentVirtualKey.down = false;
-            if (!mCurrentVirtualKey.ignored) {
-#if DEBUG_VIRTUAL_KEYS
-                ALOGD("VirtualKeys: Generating key up: keyCode=%d, scanCode=%d",
-                        mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
-#endif
-                dispatchVirtualKey(when, policyFlags,
-                        AKEY_EVENT_ACTION_UP,
-                        AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
-            }
-            return true;
-        }
-
-        if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
-            uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
-            const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
-            const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
-            if (virtualKey && virtualKey->keyCode == mCurrentVirtualKey.keyCode) {
-                // Pointer is still within the space of the virtual key.
-                return true;
-            }
-        }
-
-        // Pointer left virtual key area or another pointer also went down.
-        // Send key cancellation but do not consume the touch yet.
-        // This is useful when the user swipes through from the virtual key area
-        // into the main display surface.
-        mCurrentVirtualKey.down = false;
-        if (!mCurrentVirtualKey.ignored) {
-#if DEBUG_VIRTUAL_KEYS
-            ALOGD("VirtualKeys: Canceling key: keyCode=%d, scanCode=%d",
-                    mCurrentVirtualKey.keyCode, mCurrentVirtualKey.scanCode);
-#endif
-            dispatchVirtualKey(when, policyFlags,
-                    AKEY_EVENT_ACTION_UP,
-                    AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY
-                            | AKEY_EVENT_FLAG_CANCELED);
-        }
-    }
-
-    if (mLastRawPointerData.touchingIdBits.isEmpty()
-            && !mCurrentRawPointerData.touchingIdBits.isEmpty()) {
-        // Pointer just went down.  Check for virtual key press or off-screen touches.
-        uint32_t id = mCurrentRawPointerData.touchingIdBits.firstMarkedBit();
-        const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
-        if (!isPointInsideSurface(pointer.x, pointer.y)) {
-            // If exactly one pointer went down, check for virtual key hit.
-            // Otherwise we will drop the entire stroke.
-            if (mCurrentRawPointerData.touchingIdBits.count() == 1) {
-                const VirtualKey* virtualKey = findVirtualKeyHit(pointer.x, pointer.y);
-                if (virtualKey) {
-                    mCurrentVirtualKey.down = true;
-                    mCurrentVirtualKey.downTime = when;
-                    mCurrentVirtualKey.keyCode = virtualKey->keyCode;
-                    mCurrentVirtualKey.scanCode = virtualKey->scanCode;
-                    mCurrentVirtualKey.ignored = mContext->shouldDropVirtualKey(
-                            when, getDevice(), virtualKey->keyCode, virtualKey->scanCode);
-
-                    if (!mCurrentVirtualKey.ignored) {
-#if DEBUG_VIRTUAL_KEYS
-                        ALOGD("VirtualKeys: Generating key down: keyCode=%d, scanCode=%d",
-                                mCurrentVirtualKey.keyCode,
-                                mCurrentVirtualKey.scanCode);
-#endif
-                        dispatchVirtualKey(when, policyFlags,
-                                AKEY_EVENT_ACTION_DOWN,
-                                AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY);
-                    }
-                }
-            }
-            return true;
-        }
-    }
-
-    // Disable all virtual key touches that happen within a short time interval of the
-    // most recent touch within the screen area.  The idea is to filter out stray
-    // virtual key presses when interacting with the touch screen.
-    //
-    // Problems we're trying to solve:
-    //
-    // 1. While scrolling a list or dragging the window shade, the user swipes down into a
-    //    virtual key area that is implemented by a separate touch panel and accidentally
-    //    triggers a virtual key.
-    //
-    // 2. While typing in the on screen keyboard, the user taps slightly outside the screen
-    //    area and accidentally triggers a virtual key.  This often happens when virtual keys
-    //    are layed out below the screen near to where the on screen keyboard's space bar
-    //    is displayed.
-    if (mConfig.virtualKeyQuietTime > 0 && !mCurrentRawPointerData.touchingIdBits.isEmpty()) {
-        mContext->disableVirtualKeysUntil(when + mConfig.virtualKeyQuietTime);
-    }
-    return false;
-}
-
-void TouchInputMapper::dispatchVirtualKey(nsecs_t when, uint32_t policyFlags,
-        int32_t keyEventAction, int32_t keyEventFlags) {
-    int32_t keyCode = mCurrentVirtualKey.keyCode;
-    int32_t scanCode = mCurrentVirtualKey.scanCode;
-    nsecs_t downTime = mCurrentVirtualKey.downTime;
-    int32_t metaState = mContext->getGlobalMetaState();
-    policyFlags |= POLICY_FLAG_VIRTUAL;
-
-    NotifyKeyArgs args(when, getDeviceId(), AINPUT_SOURCE_KEYBOARD, policyFlags,
-            keyEventAction, keyEventFlags, keyCode, scanCode, metaState, downTime);
-    getListener()->notifyKey(&args);
-}
-
-void TouchInputMapper::dispatchTouches(nsecs_t when, uint32_t policyFlags) {
-    BitSet32 currentIdBits = mCurrentCookedPointerData.touchingIdBits;
-    BitSet32 lastIdBits = mLastCookedPointerData.touchingIdBits;
-    int32_t metaState = getContext()->getGlobalMetaState();
-    int32_t buttonState = mCurrentButtonState;
-
-    if (currentIdBits == lastIdBits) {
-        if (!currentIdBits.isEmpty()) {
-            // No pointer id changes so this is a move event.
-            // The listener takes care of batching moves so we don't have to deal with that here.
-            dispatchMotion(when, policyFlags, mSource,
-                    AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState,
-                    AMOTION_EVENT_EDGE_FLAG_NONE,
-                    mCurrentCookedPointerData.pointerProperties,
-                    mCurrentCookedPointerData.pointerCoords,
-                    mCurrentCookedPointerData.idToIndex,
-                    currentIdBits, -1,
-                    mOrientedXPrecision, mOrientedYPrecision, mDownTime);
-        }
-    } else {
-        // There may be pointers going up and pointers going down and pointers moving
-        // all at the same time.
-        BitSet32 upIdBits(lastIdBits.value & ~currentIdBits.value);
-        BitSet32 downIdBits(currentIdBits.value & ~lastIdBits.value);
-        BitSet32 moveIdBits(lastIdBits.value & currentIdBits.value);
-        BitSet32 dispatchedIdBits(lastIdBits.value);
-
-        // Update last coordinates of pointers that have moved so that we observe the new
-        // pointer positions at the same time as other pointers that have just gone up.
-        bool moveNeeded = updateMovedPointers(
-                mCurrentCookedPointerData.pointerProperties,
-                mCurrentCookedPointerData.pointerCoords,
-                mCurrentCookedPointerData.idToIndex,
-                mLastCookedPointerData.pointerProperties,
-                mLastCookedPointerData.pointerCoords,
-                mLastCookedPointerData.idToIndex,
-                moveIdBits);
-        if (buttonState != mLastButtonState) {
-            moveNeeded = true;
-        }
-
-        // Dispatch pointer up events.
-        while (!upIdBits.isEmpty()) {
-            uint32_t upId = upIdBits.clearFirstMarkedBit();
-
-            dispatchMotion(when, policyFlags, mSource,
-                    AMOTION_EVENT_ACTION_POINTER_UP, 0, metaState, buttonState, 0,
-                    mLastCookedPointerData.pointerProperties,
-                    mLastCookedPointerData.pointerCoords,
-                    mLastCookedPointerData.idToIndex,
-                    dispatchedIdBits, upId,
-                    mOrientedXPrecision, mOrientedYPrecision, mDownTime);
-            dispatchedIdBits.clearBit(upId);
-        }
-
-        // Dispatch move events if any of the remaining pointers moved from their old locations.
-        // Although applications receive new locations as part of individual pointer up
-        // events, they do not generally handle them except when presented in a move event.
-        if (moveNeeded) {
-            ALOG_ASSERT(moveIdBits.value == dispatchedIdBits.value);
-            dispatchMotion(when, policyFlags, mSource,
-                    AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, 0,
-                    mCurrentCookedPointerData.pointerProperties,
-                    mCurrentCookedPointerData.pointerCoords,
-                    mCurrentCookedPointerData.idToIndex,
-                    dispatchedIdBits, -1,
-                    mOrientedXPrecision, mOrientedYPrecision, mDownTime);
-        }
-
-        // Dispatch pointer down events using the new pointer locations.
-        while (!downIdBits.isEmpty()) {
-            uint32_t downId = downIdBits.clearFirstMarkedBit();
-            dispatchedIdBits.markBit(downId);
-
-            if (dispatchedIdBits.count() == 1) {
-                // First pointer is going down.  Set down time.
-                mDownTime = when;
-            }
-
-            dispatchMotion(when, policyFlags, mSource,
-                    AMOTION_EVENT_ACTION_POINTER_DOWN, 0, metaState, buttonState, 0,
-                    mCurrentCookedPointerData.pointerProperties,
-                    mCurrentCookedPointerData.pointerCoords,
-                    mCurrentCookedPointerData.idToIndex,
-                    dispatchedIdBits, downId,
-                    mOrientedXPrecision, mOrientedYPrecision, mDownTime);
-        }
-    }
-}
-
-void TouchInputMapper::dispatchHoverExit(nsecs_t when, uint32_t policyFlags) {
-    if (mSentHoverEnter &&
-            (mCurrentCookedPointerData.hoveringIdBits.isEmpty()
-                    || !mCurrentCookedPointerData.touchingIdBits.isEmpty())) {
-        int32_t metaState = getContext()->getGlobalMetaState();
-        dispatchMotion(when, policyFlags, mSource,
-                AMOTION_EVENT_ACTION_HOVER_EXIT, 0, metaState, mLastButtonState, 0,
-                mLastCookedPointerData.pointerProperties,
-                mLastCookedPointerData.pointerCoords,
-                mLastCookedPointerData.idToIndex,
-                mLastCookedPointerData.hoveringIdBits, -1,
-                mOrientedXPrecision, mOrientedYPrecision, mDownTime);
-        mSentHoverEnter = false;
-    }
-}
-
-void TouchInputMapper::dispatchHoverEnterAndMove(nsecs_t when, uint32_t policyFlags) {
-    if (mCurrentCookedPointerData.touchingIdBits.isEmpty()
-            && !mCurrentCookedPointerData.hoveringIdBits.isEmpty()) {
-        int32_t metaState = getContext()->getGlobalMetaState();
-        if (!mSentHoverEnter) {
-            dispatchMotion(when, policyFlags, mSource,
-                    AMOTION_EVENT_ACTION_HOVER_ENTER, 0, metaState, mCurrentButtonState, 0,
-                    mCurrentCookedPointerData.pointerProperties,
-                    mCurrentCookedPointerData.pointerCoords,
-                    mCurrentCookedPointerData.idToIndex,
-                    mCurrentCookedPointerData.hoveringIdBits, -1,
-                    mOrientedXPrecision, mOrientedYPrecision, mDownTime);
-            mSentHoverEnter = true;
-        }
-
-        dispatchMotion(when, policyFlags, mSource,
-                AMOTION_EVENT_ACTION_HOVER_MOVE, 0, metaState, mCurrentButtonState, 0,
-                mCurrentCookedPointerData.pointerProperties,
-                mCurrentCookedPointerData.pointerCoords,
-                mCurrentCookedPointerData.idToIndex,
-                mCurrentCookedPointerData.hoveringIdBits, -1,
-                mOrientedXPrecision, mOrientedYPrecision, mDownTime);
-    }
-}
-
-void TouchInputMapper::cookPointerData() {
-    uint32_t currentPointerCount = mCurrentRawPointerData.pointerCount;
-
-    mCurrentCookedPointerData.clear();
-    mCurrentCookedPointerData.pointerCount = currentPointerCount;
-    mCurrentCookedPointerData.hoveringIdBits = mCurrentRawPointerData.hoveringIdBits;
-    mCurrentCookedPointerData.touchingIdBits = mCurrentRawPointerData.touchingIdBits;
-
-    // Walk through the the active pointers and map device coordinates onto
-    // surface coordinates and adjust for display orientation.
-    for (uint32_t i = 0; i < currentPointerCount; i++) {
-        const RawPointerData::Pointer& in = mCurrentRawPointerData.pointers[i];
-
-        // Size
-        float touchMajor, touchMinor, toolMajor, toolMinor, size;
-        switch (mCalibration.sizeCalibration) {
-        case Calibration::SIZE_CALIBRATION_GEOMETRIC:
-        case Calibration::SIZE_CALIBRATION_DIAMETER:
-        case Calibration::SIZE_CALIBRATION_BOX:
-        case Calibration::SIZE_CALIBRATION_AREA:
-            if (mRawPointerAxes.touchMajor.valid && mRawPointerAxes.toolMajor.valid) {
-                touchMajor = in.touchMajor;
-                touchMinor = mRawPointerAxes.touchMinor.valid ? in.touchMinor : in.touchMajor;
-                toolMajor = in.toolMajor;
-                toolMinor = mRawPointerAxes.toolMinor.valid ? in.toolMinor : in.toolMajor;
-                size = mRawPointerAxes.touchMinor.valid
-                        ? avg(in.touchMajor, in.touchMinor) : in.touchMajor;
-            } else if (mRawPointerAxes.touchMajor.valid) {
-                toolMajor = touchMajor = in.touchMajor;
-                toolMinor = touchMinor = mRawPointerAxes.touchMinor.valid
-                        ? in.touchMinor : in.touchMajor;
-                size = mRawPointerAxes.touchMinor.valid
-                        ? avg(in.touchMajor, in.touchMinor) : in.touchMajor;
-            } else if (mRawPointerAxes.toolMajor.valid) {
-                touchMajor = toolMajor = in.toolMajor;
-                touchMinor = toolMinor = mRawPointerAxes.toolMinor.valid
-                        ? in.toolMinor : in.toolMajor;
-                size = mRawPointerAxes.toolMinor.valid
-                        ? avg(in.toolMajor, in.toolMinor) : in.toolMajor;
-            } else {
-                ALOG_ASSERT(false, "No touch or tool axes.  "
-                        "Size calibration should have been resolved to NONE.");
-                touchMajor = 0;
-                touchMinor = 0;
-                toolMajor = 0;
-                toolMinor = 0;
-                size = 0;
-            }
-
-            if (mCalibration.haveSizeIsSummed && mCalibration.sizeIsSummed) {
-                uint32_t touchingCount = mCurrentRawPointerData.touchingIdBits.count();
-                if (touchingCount > 1) {
-                    touchMajor /= touchingCount;
-                    touchMinor /= touchingCount;
-                    toolMajor /= touchingCount;
-                    toolMinor /= touchingCount;
-                    size /= touchingCount;
-                }
-            }
-
-            if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_GEOMETRIC) {
-                touchMajor *= mGeometricScale;
-                touchMinor *= mGeometricScale;
-                toolMajor *= mGeometricScale;
-                toolMinor *= mGeometricScale;
-            } else if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_AREA) {
-                touchMajor = touchMajor > 0 ? sqrtf(touchMajor) : 0;
-                touchMinor = touchMajor;
-                toolMajor = toolMajor > 0 ? sqrtf(toolMajor) : 0;
-                toolMinor = toolMajor;
-            } else if (mCalibration.sizeCalibration == Calibration::SIZE_CALIBRATION_DIAMETER) {
-                touchMinor = touchMajor;
-                toolMinor = toolMajor;
-            }
-
-            mCalibration.applySizeScaleAndBias(&touchMajor);
-            mCalibration.applySizeScaleAndBias(&touchMinor);
-            mCalibration.applySizeScaleAndBias(&toolMajor);
-            mCalibration.applySizeScaleAndBias(&toolMinor);
-            size *= mSizeScale;
-            break;
-        default:
-            touchMajor = 0;
-            touchMinor = 0;
-            toolMajor = 0;
-            toolMinor = 0;
-            size = 0;
-            break;
-        }
-
-        // Pressure
-        float pressure;
-        switch (mCalibration.pressureCalibration) {
-        case Calibration::PRESSURE_CALIBRATION_PHYSICAL:
-        case Calibration::PRESSURE_CALIBRATION_AMPLITUDE:
-            pressure = in.pressure * mPressureScale;
-            break;
-        default:
-            pressure = in.isHovering ? 0 : 1;
-            break;
-        }
-
-        // Tilt and Orientation
-        float tilt;
-        float orientation;
-        if (mHaveTilt) {
-            float tiltXAngle = (in.tiltX - mTiltXCenter) * mTiltXScale;
-            float tiltYAngle = (in.tiltY - mTiltYCenter) * mTiltYScale;
-            orientation = atan2f(-sinf(tiltXAngle), sinf(tiltYAngle));
-            tilt = acosf(cosf(tiltXAngle) * cosf(tiltYAngle));
-        } else {
-            tilt = 0;
-
-            switch (mCalibration.orientationCalibration) {
-            case Calibration::ORIENTATION_CALIBRATION_INTERPOLATED:
-                orientation = in.orientation * mOrientationScale;
-                break;
-            case Calibration::ORIENTATION_CALIBRATION_VECTOR: {
-                int32_t c1 = signExtendNybble((in.orientation & 0xf0) >> 4);
-                int32_t c2 = signExtendNybble(in.orientation & 0x0f);
-                if (c1 != 0 || c2 != 0) {
-                    orientation = atan2f(c1, c2) * 0.5f;
-                    float confidence = hypotf(c1, c2);
-                    float scale = 1.0f + confidence / 16.0f;
-                    touchMajor *= scale;
-                    touchMinor /= scale;
-                    toolMajor *= scale;
-                    toolMinor /= scale;
-                } else {
-                    orientation = 0;
-                }
-                break;
-            }
-            default:
-                orientation = 0;
-            }
-        }
-
-        // Distance
-        float distance;
-        switch (mCalibration.distanceCalibration) {
-        case Calibration::DISTANCE_CALIBRATION_SCALED:
-            distance = in.distance * mDistanceScale;
-            break;
-        default:
-            distance = 0;
-        }
-
-        // Coverage
-        int32_t rawLeft, rawTop, rawRight, rawBottom;
-        switch (mCalibration.coverageCalibration) {
-        case Calibration::COVERAGE_CALIBRATION_BOX:
-            rawLeft = (in.toolMinor & 0xffff0000) >> 16;
-            rawRight = in.toolMinor & 0x0000ffff;
-            rawBottom = in.toolMajor & 0x0000ffff;
-            rawTop = (in.toolMajor & 0xffff0000) >> 16;
-            break;
-        default:
-            rawLeft = rawTop = rawRight = rawBottom = 0;
-            break;
-        }
-
-        // X, Y, and the bounding box for coverage information
-        // Adjust coords for surface orientation.
-        float x, y, left, top, right, bottom;
-        switch (mSurfaceOrientation) {
-        case DISPLAY_ORIENTATION_90:
-            x = float(in.y - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
-            y = float(mRawPointerAxes.x.maxValue - in.x) * mXScale + mXTranslate;
-            left = float(rawTop - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
-            right = float(rawBottom- mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
-            bottom = float(mRawPointerAxes.x.maxValue - rawLeft) * mXScale + mXTranslate;
-            top = float(mRawPointerAxes.x.maxValue - rawRight) * mXScale + mXTranslate;
-            orientation -= M_PI_2;
-            if (orientation < mOrientedRanges.orientation.min) {
-                orientation += (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
-            }
-            break;
-        case DISPLAY_ORIENTATION_180:
-            x = float(mRawPointerAxes.x.maxValue - in.x) * mXScale + mXTranslate;
-            y = float(mRawPointerAxes.y.maxValue - in.y) * mYScale + mYTranslate;
-            left = float(mRawPointerAxes.x.maxValue - rawRight) * mXScale + mXTranslate;
-            right = float(mRawPointerAxes.x.maxValue - rawLeft) * mXScale + mXTranslate;
-            bottom = float(mRawPointerAxes.y.maxValue - rawTop) * mYScale + mYTranslate;
-            top = float(mRawPointerAxes.y.maxValue - rawBottom) * mYScale + mYTranslate;
-            orientation -= M_PI;
-            if (orientation < mOrientedRanges.orientation.min) {
-                orientation += (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
-            }
-            break;
-        case DISPLAY_ORIENTATION_270:
-            x = float(mRawPointerAxes.y.maxValue - in.y) * mYScale + mYTranslate;
-            y = float(in.x - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
-            left = float(mRawPointerAxes.y.maxValue - rawBottom) * mYScale + mYTranslate;
-            right = float(mRawPointerAxes.y.maxValue - rawTop) * mYScale + mYTranslate;
-            bottom = float(rawRight - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
-            top = float(rawLeft - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
-            orientation += M_PI_2;
-            if (orientation > mOrientedRanges.orientation.max) {
-                orientation -= (mOrientedRanges.orientation.max - mOrientedRanges.orientation.min);
-            }
-            break;
-        default:
-            x = float(in.x - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
-            y = float(in.y - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
-            left = float(rawLeft - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
-            right = float(rawRight - mRawPointerAxes.x.minValue) * mXScale + mXTranslate;
-            bottom = float(rawBottom - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
-            top = float(rawTop - mRawPointerAxes.y.minValue) * mYScale + mYTranslate;
-            break;
-        }
-
-        // Write output coords.
-        PointerCoords& out = mCurrentCookedPointerData.pointerCoords[i];
-        out.clear();
-        out.setAxisValue(AMOTION_EVENT_AXIS_X, x);
-        out.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
-        out.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, pressure);
-        out.setAxisValue(AMOTION_EVENT_AXIS_SIZE, size);
-        out.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR, touchMajor);
-        out.setAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR, touchMinor);
-        out.setAxisValue(AMOTION_EVENT_AXIS_ORIENTATION, orientation);
-        out.setAxisValue(AMOTION_EVENT_AXIS_TILT, tilt);
-        out.setAxisValue(AMOTION_EVENT_AXIS_DISTANCE, distance);
-        if (mCalibration.coverageCalibration == Calibration::COVERAGE_CALIBRATION_BOX) {
-            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_1, left);
-            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_2, top);
-            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_3, right);
-            out.setAxisValue(AMOTION_EVENT_AXIS_GENERIC_4, bottom);
-        } else {
-            out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR, toolMajor);
-            out.setAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR, toolMinor);
-        }
-
-        // Write output properties.
-        PointerProperties& properties = mCurrentCookedPointerData.pointerProperties[i];
-        uint32_t id = in.id;
-        properties.clear();
-        properties.id = id;
-        properties.toolType = in.toolType;
-
-        // Write id index.
-        mCurrentCookedPointerData.idToIndex[id] = i;
-    }
-}
-
-void TouchInputMapper::dispatchPointerUsage(nsecs_t when, uint32_t policyFlags,
-        PointerUsage pointerUsage) {
-    if (pointerUsage != mPointerUsage) {
-        abortPointerUsage(when, policyFlags);
-        mPointerUsage = pointerUsage;
-    }
-
-    switch (mPointerUsage) {
-    case POINTER_USAGE_GESTURES:
-        dispatchPointerGestures(when, policyFlags, false /*isTimeout*/);
-        break;
-    case POINTER_USAGE_STYLUS:
-        dispatchPointerStylus(when, policyFlags);
-        break;
-    case POINTER_USAGE_MOUSE:
-        dispatchPointerMouse(when, policyFlags);
-        break;
-    default:
-        break;
-    }
-}
-
-void TouchInputMapper::abortPointerUsage(nsecs_t when, uint32_t policyFlags) {
-    switch (mPointerUsage) {
-    case POINTER_USAGE_GESTURES:
-        abortPointerGestures(when, policyFlags);
-        break;
-    case POINTER_USAGE_STYLUS:
-        abortPointerStylus(when, policyFlags);
-        break;
-    case POINTER_USAGE_MOUSE:
-        abortPointerMouse(when, policyFlags);
-        break;
-    default:
-        break;
-    }
-
-    mPointerUsage = POINTER_USAGE_NONE;
-}
-
-void TouchInputMapper::dispatchPointerGestures(nsecs_t when, uint32_t policyFlags,
-        bool isTimeout) {
-    // Update current gesture coordinates.
-    bool cancelPreviousGesture, finishPreviousGesture;
-    bool sendEvents = preparePointerGestures(when,
-            &cancelPreviousGesture, &finishPreviousGesture, isTimeout);
-    if (!sendEvents) {
-        return;
-    }
-    if (finishPreviousGesture) {
-        cancelPreviousGesture = false;
-    }
-
-    // Update the pointer presentation and spots.
-    if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
-        mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_SPOT);
-        if (finishPreviousGesture || cancelPreviousGesture) {
-            mPointerController->clearSpots();
-        }
-        mPointerController->setSpots(mPointerGesture.currentGestureCoords,
-                mPointerGesture.currentGestureIdToIndex,
-                mPointerGesture.currentGestureIdBits);
-    } else {
-        mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_POINTER);
-    }
-
-    // Show or hide the pointer if needed.
-    switch (mPointerGesture.currentGestureMode) {
-    case PointerGesture::NEUTRAL:
-    case PointerGesture::QUIET:
-        if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS
-                && (mPointerGesture.lastGestureMode == PointerGesture::SWIPE
-                        || mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)) {
-            // Remind the user of where the pointer is after finishing a gesture with spots.
-            mPointerController->unfade(PointerControllerInterface::TRANSITION_GRADUAL);
-        }
-        break;
-    case PointerGesture::TAP:
-    case PointerGesture::TAP_DRAG:
-    case PointerGesture::BUTTON_CLICK_OR_DRAG:
-    case PointerGesture::HOVER:
-    case PointerGesture::PRESS:
-        // Unfade the pointer when the current gesture manipulates the
-        // area directly under the pointer.
-        mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
-        break;
-    case PointerGesture::SWIPE:
-    case PointerGesture::FREEFORM:
-        // Fade the pointer when the current gesture manipulates a different
-        // area and there are spots to guide the user experience.
-        if (mParameters.gestureMode == Parameters::GESTURE_MODE_SPOTS) {
-            mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
-        } else {
-            mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
-        }
-        break;
-    }
-
-    // Send events!
-    int32_t metaState = getContext()->getGlobalMetaState();
-    int32_t buttonState = mCurrentButtonState;
-
-    // Update last coordinates of pointers that have moved so that we observe the new
-    // pointer positions at the same time as other pointers that have just gone up.
-    bool down = mPointerGesture.currentGestureMode == PointerGesture::TAP
-            || mPointerGesture.currentGestureMode == PointerGesture::TAP_DRAG
-            || mPointerGesture.currentGestureMode == PointerGesture::BUTTON_CLICK_OR_DRAG
-            || mPointerGesture.currentGestureMode == PointerGesture::PRESS
-            || mPointerGesture.currentGestureMode == PointerGesture::SWIPE
-            || mPointerGesture.currentGestureMode == PointerGesture::FREEFORM;
-    bool moveNeeded = false;
-    if (down && !cancelPreviousGesture && !finishPreviousGesture
-            && !mPointerGesture.lastGestureIdBits.isEmpty()
-            && !mPointerGesture.currentGestureIdBits.isEmpty()) {
-        BitSet32 movedGestureIdBits(mPointerGesture.currentGestureIdBits.value
-                & mPointerGesture.lastGestureIdBits.value);
-        moveNeeded = updateMovedPointers(mPointerGesture.currentGestureProperties,
-                mPointerGesture.currentGestureCoords, mPointerGesture.currentGestureIdToIndex,
-                mPointerGesture.lastGestureProperties,
-                mPointerGesture.lastGestureCoords, mPointerGesture.lastGestureIdToIndex,
-                movedGestureIdBits);
-        if (buttonState != mLastButtonState) {
-            moveNeeded = true;
-        }
-    }
-
-    // Send motion events for all pointers that went up or were canceled.
-    BitSet32 dispatchedGestureIdBits(mPointerGesture.lastGestureIdBits);
-    if (!dispatchedGestureIdBits.isEmpty()) {
-        if (cancelPreviousGesture) {
-            dispatchMotion(when, policyFlags, mSource,
-                    AMOTION_EVENT_ACTION_CANCEL, 0, metaState, buttonState,
-                    AMOTION_EVENT_EDGE_FLAG_NONE,
-                    mPointerGesture.lastGestureProperties,
-                    mPointerGesture.lastGestureCoords, mPointerGesture.lastGestureIdToIndex,
-                    dispatchedGestureIdBits, -1,
-                    0, 0, mPointerGesture.downTime);
-
-            dispatchedGestureIdBits.clear();
-        } else {
-            BitSet32 upGestureIdBits;
-            if (finishPreviousGesture) {
-                upGestureIdBits = dispatchedGestureIdBits;
-            } else {
-                upGestureIdBits.value = dispatchedGestureIdBits.value
-                        & ~mPointerGesture.currentGestureIdBits.value;
-            }
-            while (!upGestureIdBits.isEmpty()) {
-                uint32_t id = upGestureIdBits.clearFirstMarkedBit();
-
-                dispatchMotion(when, policyFlags, mSource,
-                        AMOTION_EVENT_ACTION_POINTER_UP, 0,
-                        metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
-                        mPointerGesture.lastGestureProperties,
-                        mPointerGesture.lastGestureCoords, mPointerGesture.lastGestureIdToIndex,
-                        dispatchedGestureIdBits, id,
-                        0, 0, mPointerGesture.downTime);
-
-                dispatchedGestureIdBits.clearBit(id);
-            }
-        }
-    }
-
-    // Send motion events for all pointers that moved.
-    if (moveNeeded) {
-        dispatchMotion(when, policyFlags, mSource,
-                AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
-                mPointerGesture.currentGestureProperties,
-                mPointerGesture.currentGestureCoords, mPointerGesture.currentGestureIdToIndex,
-                dispatchedGestureIdBits, -1,
-                0, 0, mPointerGesture.downTime);
-    }
-
-    // Send motion events for all pointers that went down.
-    if (down) {
-        BitSet32 downGestureIdBits(mPointerGesture.currentGestureIdBits.value
-                & ~dispatchedGestureIdBits.value);
-        while (!downGestureIdBits.isEmpty()) {
-            uint32_t id = downGestureIdBits.clearFirstMarkedBit();
-            dispatchedGestureIdBits.markBit(id);
-
-            if (dispatchedGestureIdBits.count() == 1) {
-                mPointerGesture.downTime = when;
-            }
-
-            dispatchMotion(when, policyFlags, mSource,
-                    AMOTION_EVENT_ACTION_POINTER_DOWN, 0, metaState, buttonState, 0,
-                    mPointerGesture.currentGestureProperties,
-                    mPointerGesture.currentGestureCoords, mPointerGesture.currentGestureIdToIndex,
-                    dispatchedGestureIdBits, id,
-                    0, 0, mPointerGesture.downTime);
-        }
-    }
-
-    // Send motion events for hover.
-    if (mPointerGesture.currentGestureMode == PointerGesture::HOVER) {
-        dispatchMotion(when, policyFlags, mSource,
-                AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
-                metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
-                mPointerGesture.currentGestureProperties,
-                mPointerGesture.currentGestureCoords, mPointerGesture.currentGestureIdToIndex,
-                mPointerGesture.currentGestureIdBits, -1,
-                0, 0, mPointerGesture.downTime);
-    } else if (dispatchedGestureIdBits.isEmpty()
-            && !mPointerGesture.lastGestureIdBits.isEmpty()) {
-        // Synthesize a hover move event after all pointers go up to indicate that
-        // the pointer is hovering again even if the user is not currently touching
-        // the touch pad.  This ensures that a view will receive a fresh hover enter
-        // event after a tap.
-        float x, y;
-        mPointerController->getPosition(&x, &y);
-
-        PointerProperties pointerProperties;
-        pointerProperties.clear();
-        pointerProperties.id = 0;
-        pointerProperties.toolType = AMOTION_EVENT_TOOL_TYPE_FINGER;
-
-        PointerCoords pointerCoords;
-        pointerCoords.clear();
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
-
-        NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                AMOTION_EVENT_ACTION_HOVER_MOVE, 0,
-                metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
-                mViewport.displayId, 1, &pointerProperties, &pointerCoords,
-                0, 0, mPointerGesture.downTime);
-        getListener()->notifyMotion(&args);
-    }
-
-    // Update state.
-    mPointerGesture.lastGestureMode = mPointerGesture.currentGestureMode;
-    if (!down) {
-        mPointerGesture.lastGestureIdBits.clear();
-    } else {
-        mPointerGesture.lastGestureIdBits = mPointerGesture.currentGestureIdBits;
-        for (BitSet32 idBits(mPointerGesture.currentGestureIdBits); !idBits.isEmpty(); ) {
-            uint32_t id = idBits.clearFirstMarkedBit();
-            uint32_t index = mPointerGesture.currentGestureIdToIndex[id];
-            mPointerGesture.lastGestureProperties[index].copyFrom(
-                    mPointerGesture.currentGestureProperties[index]);
-            mPointerGesture.lastGestureCoords[index].copyFrom(
-                    mPointerGesture.currentGestureCoords[index]);
-            mPointerGesture.lastGestureIdToIndex[id] = index;
-        }
-    }
-}
-
-void TouchInputMapper::abortPointerGestures(nsecs_t when, uint32_t policyFlags) {
-    // Cancel previously dispatches pointers.
-    if (!mPointerGesture.lastGestureIdBits.isEmpty()) {
-        int32_t metaState = getContext()->getGlobalMetaState();
-        int32_t buttonState = mCurrentButtonState;
-        dispatchMotion(when, policyFlags, mSource,
-                AMOTION_EVENT_ACTION_CANCEL, 0, metaState, buttonState,
-                AMOTION_EVENT_EDGE_FLAG_NONE,
-                mPointerGesture.lastGestureProperties,
-                mPointerGesture.lastGestureCoords, mPointerGesture.lastGestureIdToIndex,
-                mPointerGesture.lastGestureIdBits, -1,
-                0, 0, mPointerGesture.downTime);
-    }
-
-    // Reset the current pointer gesture.
-    mPointerGesture.reset();
-    mPointerVelocityControl.reset();
-
-    // Remove any current spots.
-    if (mPointerController != NULL) {
-        mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
-        mPointerController->clearSpots();
-    }
-}
-
-bool TouchInputMapper::preparePointerGestures(nsecs_t when,
-        bool* outCancelPreviousGesture, bool* outFinishPreviousGesture, bool isTimeout) {
-    *outCancelPreviousGesture = false;
-    *outFinishPreviousGesture = false;
-
-    // Handle TAP timeout.
-    if (isTimeout) {
-#if DEBUG_GESTURES
-        ALOGD("Gestures: Processing timeout");
-#endif
-
-        if (mPointerGesture.lastGestureMode == PointerGesture::TAP) {
-            if (when <= mPointerGesture.tapUpTime + mConfig.pointerGestureTapDragInterval) {
-                // The tap/drag timeout has not yet expired.
-                getContext()->requestTimeoutAtTime(mPointerGesture.tapUpTime
-                        + mConfig.pointerGestureTapDragInterval);
-            } else {
-                // The tap is finished.
-#if DEBUG_GESTURES
-                ALOGD("Gestures: TAP finished");
-#endif
-                *outFinishPreviousGesture = true;
-
-                mPointerGesture.activeGestureId = -1;
-                mPointerGesture.currentGestureMode = PointerGesture::NEUTRAL;
-                mPointerGesture.currentGestureIdBits.clear();
-
-                mPointerVelocityControl.reset();
-                return true;
-            }
-        }
-
-        // We did not handle this timeout.
-        return false;
-    }
-
-    const uint32_t currentFingerCount = mCurrentFingerIdBits.count();
-    const uint32_t lastFingerCount = mLastFingerIdBits.count();
-
-    // Update the velocity tracker.
-    {
-        VelocityTracker::Position positions[MAX_POINTERS];
-        uint32_t count = 0;
-        for (BitSet32 idBits(mCurrentFingerIdBits); !idBits.isEmpty(); count++) {
-            uint32_t id = idBits.clearFirstMarkedBit();
-            const RawPointerData::Pointer& pointer = mCurrentRawPointerData.pointerForId(id);
-            positions[count].x = pointer.x * mPointerXMovementScale;
-            positions[count].y = pointer.y * mPointerYMovementScale;
-        }
-        mPointerGesture.velocityTracker.addMovement(when,
-                mCurrentFingerIdBits, positions);
-    }
-
-    // If the gesture ever enters a mode other than TAP, HOVER or TAP_DRAG, without first returning
-    // to NEUTRAL, then we should not generate tap event.
-    if (mPointerGesture.lastGestureMode != PointerGesture::HOVER
-            && mPointerGesture.lastGestureMode != PointerGesture::TAP
-            && mPointerGesture.lastGestureMode != PointerGesture::TAP_DRAG) {
-        mPointerGesture.resetTap();
-    }
-
-    // Pick a new active touch id if needed.
-    // Choose an arbitrary pointer that just went down, if there is one.
-    // Otherwise choose an arbitrary remaining pointer.
-    // This guarantees we always have an active touch id when there is at least one pointer.
-    // We keep the same active touch id for as long as possible.
-    bool activeTouchChanged = false;
-    int32_t lastActiveTouchId = mPointerGesture.activeTouchId;
-    int32_t activeTouchId = lastActiveTouchId;
-    if (activeTouchId < 0) {
-        if (!mCurrentFingerIdBits.isEmpty()) {
-            activeTouchChanged = true;
-            activeTouchId = mPointerGesture.activeTouchId =
-                    mCurrentFingerIdBits.firstMarkedBit();
-            mPointerGesture.firstTouchTime = when;
-        }
-    } else if (!mCurrentFingerIdBits.hasBit(activeTouchId)) {
-        activeTouchChanged = true;
-        if (!mCurrentFingerIdBits.isEmpty()) {
-            activeTouchId = mPointerGesture.activeTouchId =
-                    mCurrentFingerIdBits.firstMarkedBit();
-        } else {
-            activeTouchId = mPointerGesture.activeTouchId = -1;
-        }
-    }
-
-    // Determine whether we are in quiet time.
-    bool isQuietTime = false;
-    if (activeTouchId < 0) {
-        mPointerGesture.resetQuietTime();
-    } else {
-        isQuietTime = when < mPointerGesture.quietTime + mConfig.pointerGestureQuietInterval;
-        if (!isQuietTime) {
-            if ((mPointerGesture.lastGestureMode == PointerGesture::PRESS
-                    || mPointerGesture.lastGestureMode == PointerGesture::SWIPE
-                    || mPointerGesture.lastGestureMode == PointerGesture::FREEFORM)
-                    && currentFingerCount < 2) {
-                // Enter quiet time when exiting swipe or freeform state.
-                // This is to prevent accidentally entering the hover state and flinging the
-                // pointer when finishing a swipe and there is still one pointer left onscreen.
-                isQuietTime = true;
-            } else if (mPointerGesture.lastGestureMode == PointerGesture::BUTTON_CLICK_OR_DRAG
-                    && currentFingerCount >= 2
-                    && !isPointerDown(mCurrentButtonState)) {
-                // Enter quiet time when releasing the button and there are still two or more
-                // fingers down.  This may indicate that one finger was used to press the button
-                // but it has not gone up yet.
-                isQuietTime = true;
-            }
-            if (isQuietTime) {
-                mPointerGesture.quietTime = when;
-            }
-        }
-    }
-
-    // Switch states based on button and pointer state.
-    if (isQuietTime) {
-        // Case 1: Quiet time. (QUIET)
-#if DEBUG_GESTURES
-        ALOGD("Gestures: QUIET for next %0.3fms", (mPointerGesture.quietTime
-                + mConfig.pointerGestureQuietInterval - when) * 0.000001f);
-#endif
-        if (mPointerGesture.lastGestureMode != PointerGesture::QUIET) {
-            *outFinishPreviousGesture = true;
-        }
-
-        mPointerGesture.activeGestureId = -1;
-        mPointerGesture.currentGestureMode = PointerGesture::QUIET;
-        mPointerGesture.currentGestureIdBits.clear();
-
-        mPointerVelocityControl.reset();
-    } else if (isPointerDown(mCurrentButtonState)) {
-        // Case 2: Button is pressed. (BUTTON_CLICK_OR_DRAG)
-        // The pointer follows the active touch point.
-        // Emit DOWN, MOVE, UP events at the pointer location.
-        //
-        // Only the active touch matters; other fingers are ignored.  This policy helps
-        // to handle the case where the user places a second finger on the touch pad
-        // to apply the necessary force to depress an integrated button below the surface.
-        // We don't want the second finger to be delivered to applications.
-        //
-        // For this to work well, we need to make sure to track the pointer that is really
-        // active.  If the user first puts one finger down to click then adds another
-        // finger to drag then the active pointer should switch to the finger that is
-        // being dragged.
-#if DEBUG_GESTURES
-        ALOGD("Gestures: BUTTON_CLICK_OR_DRAG activeTouchId=%d, "
-                "currentFingerCount=%d", activeTouchId, currentFingerCount);
-#endif
-        // Reset state when just starting.
-        if (mPointerGesture.lastGestureMode != PointerGesture::BUTTON_CLICK_OR_DRAG) {
-            *outFinishPreviousGesture = true;
-            mPointerGesture.activeGestureId = 0;
-        }
-
-        // Switch pointers if needed.
-        // Find the fastest pointer and follow it.
-        if (activeTouchId >= 0 && currentFingerCount > 1) {
-            int32_t bestId = -1;
-            float bestSpeed = mConfig.pointerGestureDragMinSwitchSpeed;
-            for (BitSet32 idBits(mCurrentFingerIdBits); !idBits.isEmpty(); ) {
-                uint32_t id = idBits.clearFirstMarkedBit();
-                float vx, vy;
-                if (mPointerGesture.velocityTracker.getVelocity(id, &vx, &vy)) {
-                    float speed = hypotf(vx, vy);
-                    if (speed > bestSpeed) {
-                        bestId = id;
-                        bestSpeed = speed;
-                    }
-                }
-            }
-            if (bestId >= 0 && bestId != activeTouchId) {
-                mPointerGesture.activeTouchId = activeTouchId = bestId;
-                activeTouchChanged = true;
-#if DEBUG_GESTURES
-                ALOGD("Gestures: BUTTON_CLICK_OR_DRAG switched pointers, "
-                        "bestId=%d, bestSpeed=%0.3f", bestId, bestSpeed);
-#endif
-            }
-        }
-
-        if (activeTouchId >= 0 && mLastFingerIdBits.hasBit(activeTouchId)) {
-            const RawPointerData::Pointer& currentPointer =
-                    mCurrentRawPointerData.pointerForId(activeTouchId);
-            const RawPointerData::Pointer& lastPointer =
-                    mLastRawPointerData.pointerForId(activeTouchId);
-            float deltaX = (currentPointer.x - lastPointer.x) * mPointerXMovementScale;
-            float deltaY = (currentPointer.y - lastPointer.y) * mPointerYMovementScale;
-
-            rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
-            mPointerVelocityControl.move(when, &deltaX, &deltaY);
-
-            // Move the pointer using a relative motion.
-            // When using spots, the click will occur at the position of the anchor
-            // spot and all other spots will move there.
-            mPointerController->move(deltaX, deltaY);
-        } else {
-            mPointerVelocityControl.reset();
-        }
-
-        float x, y;
-        mPointerController->getPosition(&x, &y);
-
-        mPointerGesture.currentGestureMode = PointerGesture::BUTTON_CLICK_OR_DRAG;
-        mPointerGesture.currentGestureIdBits.clear();
-        mPointerGesture.currentGestureIdBits.markBit(mPointerGesture.activeGestureId);
-        mPointerGesture.currentGestureIdToIndex[mPointerGesture.activeGestureId] = 0;
-        mPointerGesture.currentGestureProperties[0].clear();
-        mPointerGesture.currentGestureProperties[0].id = mPointerGesture.activeGestureId;
-        mPointerGesture.currentGestureProperties[0].toolType = AMOTION_EVENT_TOOL_TYPE_FINGER;
-        mPointerGesture.currentGestureCoords[0].clear();
-        mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, x);
-        mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, y);
-        mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
-    } else if (currentFingerCount == 0) {
-        // Case 3. No fingers down and button is not pressed. (NEUTRAL)
-        if (mPointerGesture.lastGestureMode != PointerGesture::NEUTRAL) {
-            *outFinishPreviousGesture = true;
-        }
-
-        // Watch for taps coming out of HOVER or TAP_DRAG mode.
-        // Checking for taps after TAP_DRAG allows us to detect double-taps.
-        bool tapped = false;
-        if ((mPointerGesture.lastGestureMode == PointerGesture::HOVER
-                || mPointerGesture.lastGestureMode == PointerGesture::TAP_DRAG)
-                && lastFingerCount == 1) {
-            if (when <= mPointerGesture.tapDownTime + mConfig.pointerGestureTapInterval) {
-                float x, y;
-                mPointerController->getPosition(&x, &y);
-                if (fabs(x - mPointerGesture.tapX) <= mConfig.pointerGestureTapSlop
-                        && fabs(y - mPointerGesture.tapY) <= mConfig.pointerGestureTapSlop) {
-#if DEBUG_GESTURES
-                    ALOGD("Gestures: TAP");
-#endif
-
-                    mPointerGesture.tapUpTime = when;
-                    getContext()->requestTimeoutAtTime(when
-                            + mConfig.pointerGestureTapDragInterval);
-
-                    mPointerGesture.activeGestureId = 0;
-                    mPointerGesture.currentGestureMode = PointerGesture::TAP;
-                    mPointerGesture.currentGestureIdBits.clear();
-                    mPointerGesture.currentGestureIdBits.markBit(
-                            mPointerGesture.activeGestureId);
-                    mPointerGesture.currentGestureIdToIndex[
-                            mPointerGesture.activeGestureId] = 0;
-                    mPointerGesture.currentGestureProperties[0].clear();
-                    mPointerGesture.currentGestureProperties[0].id =
-                            mPointerGesture.activeGestureId;
-                    mPointerGesture.currentGestureProperties[0].toolType =
-                            AMOTION_EVENT_TOOL_TYPE_FINGER;
-                    mPointerGesture.currentGestureCoords[0].clear();
-                    mPointerGesture.currentGestureCoords[0].setAxisValue(
-                            AMOTION_EVENT_AXIS_X, mPointerGesture.tapX);
-                    mPointerGesture.currentGestureCoords[0].setAxisValue(
-                            AMOTION_EVENT_AXIS_Y, mPointerGesture.tapY);
-                    mPointerGesture.currentGestureCoords[0].setAxisValue(
-                            AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
-
-                    tapped = true;
-                } else {
-#if DEBUG_GESTURES
-                    ALOGD("Gestures: Not a TAP, deltaX=%f, deltaY=%f",
-                            x - mPointerGesture.tapX,
-                            y - mPointerGesture.tapY);
-#endif
-                }
-            } else {
-#if DEBUG_GESTURES
-                if (mPointerGesture.tapDownTime != LLONG_MIN) {
-                    ALOGD("Gestures: Not a TAP, %0.3fms since down",
-                            (when - mPointerGesture.tapDownTime) * 0.000001f);
-                } else {
-                    ALOGD("Gestures: Not a TAP, incompatible mode transitions");
-                }
-#endif
-            }
-        }
-
-        mPointerVelocityControl.reset();
-
-        if (!tapped) {
-#if DEBUG_GESTURES
-            ALOGD("Gestures: NEUTRAL");
-#endif
-            mPointerGesture.activeGestureId = -1;
-            mPointerGesture.currentGestureMode = PointerGesture::NEUTRAL;
-            mPointerGesture.currentGestureIdBits.clear();
-        }
-    } else if (currentFingerCount == 1) {
-        // Case 4. Exactly one finger down, button is not pressed. (HOVER or TAP_DRAG)
-        // The pointer follows the active touch point.
-        // When in HOVER, emit HOVER_MOVE events at the pointer location.
-        // When in TAP_DRAG, emit MOVE events at the pointer location.
-        ALOG_ASSERT(activeTouchId >= 0);
-
-        mPointerGesture.currentGestureMode = PointerGesture::HOVER;
-        if (mPointerGesture.lastGestureMode == PointerGesture::TAP) {
-            if (when <= mPointerGesture.tapUpTime + mConfig.pointerGestureTapDragInterval) {
-                float x, y;
-                mPointerController->getPosition(&x, &y);
-                if (fabs(x - mPointerGesture.tapX) <= mConfig.pointerGestureTapSlop
-                        && fabs(y - mPointerGesture.tapY) <= mConfig.pointerGestureTapSlop) {
-                    mPointerGesture.currentGestureMode = PointerGesture::TAP_DRAG;
-                } else {
-#if DEBUG_GESTURES
-                    ALOGD("Gestures: Not a TAP_DRAG, deltaX=%f, deltaY=%f",
-                            x - mPointerGesture.tapX,
-                            y - mPointerGesture.tapY);
-#endif
-                }
-            } else {
-#if DEBUG_GESTURES
-                ALOGD("Gestures: Not a TAP_DRAG, %0.3fms time since up",
-                        (when - mPointerGesture.tapUpTime) * 0.000001f);
-#endif
-            }
-        } else if (mPointerGesture.lastGestureMode == PointerGesture::TAP_DRAG) {
-            mPointerGesture.currentGestureMode = PointerGesture::TAP_DRAG;
-        }
-
-        if (mLastFingerIdBits.hasBit(activeTouchId)) {
-            const RawPointerData::Pointer& currentPointer =
-                    mCurrentRawPointerData.pointerForId(activeTouchId);
-            const RawPointerData::Pointer& lastPointer =
-                    mLastRawPointerData.pointerForId(activeTouchId);
-            float deltaX = (currentPointer.x - lastPointer.x)
-                    * mPointerXMovementScale;
-            float deltaY = (currentPointer.y - lastPointer.y)
-                    * mPointerYMovementScale;
-
-            rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
-            mPointerVelocityControl.move(when, &deltaX, &deltaY);
-
-            // Move the pointer using a relative motion.
-            // When using spots, the hover or drag will occur at the position of the anchor spot.
-            mPointerController->move(deltaX, deltaY);
-        } else {
-            mPointerVelocityControl.reset();
-        }
-
-        bool down;
-        if (mPointerGesture.currentGestureMode == PointerGesture::TAP_DRAG) {
-#if DEBUG_GESTURES
-            ALOGD("Gestures: TAP_DRAG");
-#endif
-            down = true;
-        } else {
-#if DEBUG_GESTURES
-            ALOGD("Gestures: HOVER");
-#endif
-            if (mPointerGesture.lastGestureMode != PointerGesture::HOVER) {
-                *outFinishPreviousGesture = true;
-            }
-            mPointerGesture.activeGestureId = 0;
-            down = false;
-        }
-
-        float x, y;
-        mPointerController->getPosition(&x, &y);
-
-        mPointerGesture.currentGestureIdBits.clear();
-        mPointerGesture.currentGestureIdBits.markBit(mPointerGesture.activeGestureId);
-        mPointerGesture.currentGestureIdToIndex[mPointerGesture.activeGestureId] = 0;
-        mPointerGesture.currentGestureProperties[0].clear();
-        mPointerGesture.currentGestureProperties[0].id = mPointerGesture.activeGestureId;
-        mPointerGesture.currentGestureProperties[0].toolType =
-                AMOTION_EVENT_TOOL_TYPE_FINGER;
-        mPointerGesture.currentGestureCoords[0].clear();
-        mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X, x);
-        mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y, y);
-        mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE,
-                down ? 1.0f : 0.0f);
-
-        if (lastFingerCount == 0 && currentFingerCount != 0) {
-            mPointerGesture.resetTap();
-            mPointerGesture.tapDownTime = when;
-            mPointerGesture.tapX = x;
-            mPointerGesture.tapY = y;
-        }
-    } else {
-        // Case 5. At least two fingers down, button is not pressed. (PRESS, SWIPE or FREEFORM)
-        // We need to provide feedback for each finger that goes down so we cannot wait
-        // for the fingers to move before deciding what to do.
-        //
-        // The ambiguous case is deciding what to do when there are two fingers down but they
-        // have not moved enough to determine whether they are part of a drag or part of a
-        // freeform gesture, or just a press or long-press at the pointer location.
-        //
-        // When there are two fingers we start with the PRESS hypothesis and we generate a
-        // down at the pointer location.
-        //
-        // When the two fingers move enough or when additional fingers are added, we make
-        // a decision to transition into SWIPE or FREEFORM mode accordingly.
-        ALOG_ASSERT(activeTouchId >= 0);
-
-        bool settled = when >= mPointerGesture.firstTouchTime
-                + mConfig.pointerGestureMultitouchSettleInterval;
-        if (mPointerGesture.lastGestureMode != PointerGesture::PRESS
-                && mPointerGesture.lastGestureMode != PointerGesture::SWIPE
-                && mPointerGesture.lastGestureMode != PointerGesture::FREEFORM) {
-            *outFinishPreviousGesture = true;
-        } else if (!settled && currentFingerCount > lastFingerCount) {
-            // Additional pointers have gone down but not yet settled.
-            // Reset the gesture.
-#if DEBUG_GESTURES
-            ALOGD("Gestures: Resetting gesture since additional pointers went down for MULTITOUCH, "
-                    "settle time remaining %0.3fms", (mPointerGesture.firstTouchTime
-                            + mConfig.pointerGestureMultitouchSettleInterval - when)
-                            * 0.000001f);
-#endif
-            *outCancelPreviousGesture = true;
-        } else {
-            // Continue previous gesture.
-            mPointerGesture.currentGestureMode = mPointerGesture.lastGestureMode;
-        }
-
-        if (*outFinishPreviousGesture || *outCancelPreviousGesture) {
-            mPointerGesture.currentGestureMode = PointerGesture::PRESS;
-            mPointerGesture.activeGestureId = 0;
-            mPointerGesture.referenceIdBits.clear();
-            mPointerVelocityControl.reset();
-
-            // Use the centroid and pointer location as the reference points for the gesture.
-#if DEBUG_GESTURES
-            ALOGD("Gestures: Using centroid as reference for MULTITOUCH, "
-                    "settle time remaining %0.3fms", (mPointerGesture.firstTouchTime
-                            + mConfig.pointerGestureMultitouchSettleInterval - when)
-                            * 0.000001f);
-#endif
-            mCurrentRawPointerData.getCentroidOfTouchingPointers(
-                    &mPointerGesture.referenceTouchX,
-                    &mPointerGesture.referenceTouchY);
-            mPointerController->getPosition(&mPointerGesture.referenceGestureX,
-                    &mPointerGesture.referenceGestureY);
-        }
-
-        // Clear the reference deltas for fingers not yet included in the reference calculation.
-        for (BitSet32 idBits(mCurrentFingerIdBits.value
-                & ~mPointerGesture.referenceIdBits.value); !idBits.isEmpty(); ) {
-            uint32_t id = idBits.clearFirstMarkedBit();
-            mPointerGesture.referenceDeltas[id].dx = 0;
-            mPointerGesture.referenceDeltas[id].dy = 0;
-        }
-        mPointerGesture.referenceIdBits = mCurrentFingerIdBits;
-
-        // Add delta for all fingers and calculate a common movement delta.
-        float commonDeltaX = 0, commonDeltaY = 0;
-        BitSet32 commonIdBits(mLastFingerIdBits.value
-                & mCurrentFingerIdBits.value);
-        for (BitSet32 idBits(commonIdBits); !idBits.isEmpty(); ) {
-            bool first = (idBits == commonIdBits);
-            uint32_t id = idBits.clearFirstMarkedBit();
-            const RawPointerData::Pointer& cpd = mCurrentRawPointerData.pointerForId(id);
-            const RawPointerData::Pointer& lpd = mLastRawPointerData.pointerForId(id);
-            PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
-            delta.dx += cpd.x - lpd.x;
-            delta.dy += cpd.y - lpd.y;
-
-            if (first) {
-                commonDeltaX = delta.dx;
-                commonDeltaY = delta.dy;
-            } else {
-                commonDeltaX = calculateCommonVector(commonDeltaX, delta.dx);
-                commonDeltaY = calculateCommonVector(commonDeltaY, delta.dy);
-            }
-        }
-
-        // Consider transitions from PRESS to SWIPE or MULTITOUCH.
-        if (mPointerGesture.currentGestureMode == PointerGesture::PRESS) {
-            float dist[MAX_POINTER_ID + 1];
-            int32_t distOverThreshold = 0;
-            for (BitSet32 idBits(mPointerGesture.referenceIdBits); !idBits.isEmpty(); ) {
-                uint32_t id = idBits.clearFirstMarkedBit();
-                PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
-                dist[id] = hypotf(delta.dx * mPointerXZoomScale,
-                        delta.dy * mPointerYZoomScale);
-                if (dist[id] > mConfig.pointerGestureMultitouchMinDistance) {
-                    distOverThreshold += 1;
-                }
-            }
-
-            // Only transition when at least two pointers have moved further than
-            // the minimum distance threshold.
-            if (distOverThreshold >= 2) {
-                if (currentFingerCount > 2) {
-                    // There are more than two pointers, switch to FREEFORM.
-#if DEBUG_GESTURES
-                    ALOGD("Gestures: PRESS transitioned to FREEFORM, number of pointers %d > 2",
-                            currentFingerCount);
-#endif
-                    *outCancelPreviousGesture = true;
-                    mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
-                } else {
-                    // There are exactly two pointers.
-                    BitSet32 idBits(mCurrentFingerIdBits);
-                    uint32_t id1 = idBits.clearFirstMarkedBit();
-                    uint32_t id2 = idBits.firstMarkedBit();
-                    const RawPointerData::Pointer& p1 = mCurrentRawPointerData.pointerForId(id1);
-                    const RawPointerData::Pointer& p2 = mCurrentRawPointerData.pointerForId(id2);
-                    float mutualDistance = distance(p1.x, p1.y, p2.x, p2.y);
-                    if (mutualDistance > mPointerGestureMaxSwipeWidth) {
-                        // There are two pointers but they are too far apart for a SWIPE,
-                        // switch to FREEFORM.
-#if DEBUG_GESTURES
-                        ALOGD("Gestures: PRESS transitioned to FREEFORM, distance %0.3f > %0.3f",
-                                mutualDistance, mPointerGestureMaxSwipeWidth);
-#endif
-                        *outCancelPreviousGesture = true;
-                        mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
-                    } else {
-                        // There are two pointers.  Wait for both pointers to start moving
-                        // before deciding whether this is a SWIPE or FREEFORM gesture.
-                        float dist1 = dist[id1];
-                        float dist2 = dist[id2];
-                        if (dist1 >= mConfig.pointerGestureMultitouchMinDistance
-                                && dist2 >= mConfig.pointerGestureMultitouchMinDistance) {
-                            // Calculate the dot product of the displacement vectors.
-                            // When the vectors are oriented in approximately the same direction,
-                            // the angle betweeen them is near zero and the cosine of the angle
-                            // approches 1.0.  Recall that dot(v1, v2) = cos(angle) * mag(v1) * mag(v2).
-                            PointerGesture::Delta& delta1 = mPointerGesture.referenceDeltas[id1];
-                            PointerGesture::Delta& delta2 = mPointerGesture.referenceDeltas[id2];
-                            float dx1 = delta1.dx * mPointerXZoomScale;
-                            float dy1 = delta1.dy * mPointerYZoomScale;
-                            float dx2 = delta2.dx * mPointerXZoomScale;
-                            float dy2 = delta2.dy * mPointerYZoomScale;
-                            float dot = dx1 * dx2 + dy1 * dy2;
-                            float cosine = dot / (dist1 * dist2); // denominator always > 0
-                            if (cosine >= mConfig.pointerGestureSwipeTransitionAngleCosine) {
-                                // Pointers are moving in the same direction.  Switch to SWIPE.
-#if DEBUG_GESTURES
-                                ALOGD("Gestures: PRESS transitioned to SWIPE, "
-                                        "dist1 %0.3f >= %0.3f, dist2 %0.3f >= %0.3f, "
-                                        "cosine %0.3f >= %0.3f",
-                                        dist1, mConfig.pointerGestureMultitouchMinDistance,
-                                        dist2, mConfig.pointerGestureMultitouchMinDistance,
-                                        cosine, mConfig.pointerGestureSwipeTransitionAngleCosine);
-#endif
-                                mPointerGesture.currentGestureMode = PointerGesture::SWIPE;
-                            } else {
-                                // Pointers are moving in different directions.  Switch to FREEFORM.
-#if DEBUG_GESTURES
-                                ALOGD("Gestures: PRESS transitioned to FREEFORM, "
-                                        "dist1 %0.3f >= %0.3f, dist2 %0.3f >= %0.3f, "
-                                        "cosine %0.3f < %0.3f",
-                                        dist1, mConfig.pointerGestureMultitouchMinDistance,
-                                        dist2, mConfig.pointerGestureMultitouchMinDistance,
-                                        cosine, mConfig.pointerGestureSwipeTransitionAngleCosine);
-#endif
-                                *outCancelPreviousGesture = true;
-                                mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
-                            }
-                        }
-                    }
-                }
-            }
-        } else if (mPointerGesture.currentGestureMode == PointerGesture::SWIPE) {
-            // Switch from SWIPE to FREEFORM if additional pointers go down.
-            // Cancel previous gesture.
-            if (currentFingerCount > 2) {
-#if DEBUG_GESTURES
-                ALOGD("Gestures: SWIPE transitioned to FREEFORM, number of pointers %d > 2",
-                        currentFingerCount);
-#endif
-                *outCancelPreviousGesture = true;
-                mPointerGesture.currentGestureMode = PointerGesture::FREEFORM;
-            }
-        }
-
-        // Move the reference points based on the overall group motion of the fingers
-        // except in PRESS mode while waiting for a transition to occur.
-        if (mPointerGesture.currentGestureMode != PointerGesture::PRESS
-                && (commonDeltaX || commonDeltaY)) {
-            for (BitSet32 idBits(mPointerGesture.referenceIdBits); !idBits.isEmpty(); ) {
-                uint32_t id = idBits.clearFirstMarkedBit();
-                PointerGesture::Delta& delta = mPointerGesture.referenceDeltas[id];
-                delta.dx = 0;
-                delta.dy = 0;
-            }
-
-            mPointerGesture.referenceTouchX += commonDeltaX;
-            mPointerGesture.referenceTouchY += commonDeltaY;
-
-            commonDeltaX *= mPointerXMovementScale;
-            commonDeltaY *= mPointerYMovementScale;
-
-            rotateDelta(mSurfaceOrientation, &commonDeltaX, &commonDeltaY);
-            mPointerVelocityControl.move(when, &commonDeltaX, &commonDeltaY);
-
-            mPointerGesture.referenceGestureX += commonDeltaX;
-            mPointerGesture.referenceGestureY += commonDeltaY;
-        }
-
-        // Report gestures.
-        if (mPointerGesture.currentGestureMode == PointerGesture::PRESS
-                || mPointerGesture.currentGestureMode == PointerGesture::SWIPE) {
-            // PRESS or SWIPE mode.
-#if DEBUG_GESTURES
-            ALOGD("Gestures: PRESS or SWIPE activeTouchId=%d,"
-                    "activeGestureId=%d, currentTouchPointerCount=%d",
-                    activeTouchId, mPointerGesture.activeGestureId, currentFingerCount);
-#endif
-            ALOG_ASSERT(mPointerGesture.activeGestureId >= 0);
-
-            mPointerGesture.currentGestureIdBits.clear();
-            mPointerGesture.currentGestureIdBits.markBit(mPointerGesture.activeGestureId);
-            mPointerGesture.currentGestureIdToIndex[mPointerGesture.activeGestureId] = 0;
-            mPointerGesture.currentGestureProperties[0].clear();
-            mPointerGesture.currentGestureProperties[0].id = mPointerGesture.activeGestureId;
-            mPointerGesture.currentGestureProperties[0].toolType =
-                    AMOTION_EVENT_TOOL_TYPE_FINGER;
-            mPointerGesture.currentGestureCoords[0].clear();
-            mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_X,
-                    mPointerGesture.referenceGestureX);
-            mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_Y,
-                    mPointerGesture.referenceGestureY);
-            mPointerGesture.currentGestureCoords[0].setAxisValue(AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
-        } else if (mPointerGesture.currentGestureMode == PointerGesture::FREEFORM) {
-            // FREEFORM mode.
-#if DEBUG_GESTURES
-            ALOGD("Gestures: FREEFORM activeTouchId=%d,"
-                    "activeGestureId=%d, currentTouchPointerCount=%d",
-                    activeTouchId, mPointerGesture.activeGestureId, currentFingerCount);
-#endif
-            ALOG_ASSERT(mPointerGesture.activeGestureId >= 0);
-
-            mPointerGesture.currentGestureIdBits.clear();
-
-            BitSet32 mappedTouchIdBits;
-            BitSet32 usedGestureIdBits;
-            if (mPointerGesture.lastGestureMode != PointerGesture::FREEFORM) {
-                // Initially, assign the active gesture id to the active touch point
-                // if there is one.  No other touch id bits are mapped yet.
-                if (!*outCancelPreviousGesture) {
-                    mappedTouchIdBits.markBit(activeTouchId);
-                    usedGestureIdBits.markBit(mPointerGesture.activeGestureId);
-                    mPointerGesture.freeformTouchToGestureIdMap[activeTouchId] =
-                            mPointerGesture.activeGestureId;
-                } else {
-                    mPointerGesture.activeGestureId = -1;
-                }
-            } else {
-                // Otherwise, assume we mapped all touches from the previous frame.
-                // Reuse all mappings that are still applicable.
-                mappedTouchIdBits.value = mLastFingerIdBits.value
-                        & mCurrentFingerIdBits.value;
-                usedGestureIdBits = mPointerGesture.lastGestureIdBits;
-
-                // Check whether we need to choose a new active gesture id because the
-                // current went went up.
-                for (BitSet32 upTouchIdBits(mLastFingerIdBits.value
-                        & ~mCurrentFingerIdBits.value);
-                        !upTouchIdBits.isEmpty(); ) {
-                    uint32_t upTouchId = upTouchIdBits.clearFirstMarkedBit();
-                    uint32_t upGestureId = mPointerGesture.freeformTouchToGestureIdMap[upTouchId];
-                    if (upGestureId == uint32_t(mPointerGesture.activeGestureId)) {
-                        mPointerGesture.activeGestureId = -1;
-                        break;
-                    }
-                }
-            }
-
-#if DEBUG_GESTURES
-            ALOGD("Gestures: FREEFORM follow up "
-                    "mappedTouchIdBits=0x%08x, usedGestureIdBits=0x%08x, "
-                    "activeGestureId=%d",
-                    mappedTouchIdBits.value, usedGestureIdBits.value,
-                    mPointerGesture.activeGestureId);
-#endif
-
-            BitSet32 idBits(mCurrentFingerIdBits);
-            for (uint32_t i = 0; i < currentFingerCount; i++) {
-                uint32_t touchId = idBits.clearFirstMarkedBit();
-                uint32_t gestureId;
-                if (!mappedTouchIdBits.hasBit(touchId)) {
-                    gestureId = usedGestureIdBits.markFirstUnmarkedBit();
-                    mPointerGesture.freeformTouchToGestureIdMap[touchId] = gestureId;
-#if DEBUG_GESTURES
-                    ALOGD("Gestures: FREEFORM "
-                            "new mapping for touch id %d -> gesture id %d",
-                            touchId, gestureId);
-#endif
-                } else {
-                    gestureId = mPointerGesture.freeformTouchToGestureIdMap[touchId];
-#if DEBUG_GESTURES
-                    ALOGD("Gestures: FREEFORM "
-                            "existing mapping for touch id %d -> gesture id %d",
-                            touchId, gestureId);
-#endif
-                }
-                mPointerGesture.currentGestureIdBits.markBit(gestureId);
-                mPointerGesture.currentGestureIdToIndex[gestureId] = i;
-
-                const RawPointerData::Pointer& pointer =
-                        mCurrentRawPointerData.pointerForId(touchId);
-                float deltaX = (pointer.x - mPointerGesture.referenceTouchX)
-                        * mPointerXZoomScale;
-                float deltaY = (pointer.y - mPointerGesture.referenceTouchY)
-                        * mPointerYZoomScale;
-                rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
-
-                mPointerGesture.currentGestureProperties[i].clear();
-                mPointerGesture.currentGestureProperties[i].id = gestureId;
-                mPointerGesture.currentGestureProperties[i].toolType =
-                        AMOTION_EVENT_TOOL_TYPE_FINGER;
-                mPointerGesture.currentGestureCoords[i].clear();
-                mPointerGesture.currentGestureCoords[i].setAxisValue(
-                        AMOTION_EVENT_AXIS_X, mPointerGesture.referenceGestureX + deltaX);
-                mPointerGesture.currentGestureCoords[i].setAxisValue(
-                        AMOTION_EVENT_AXIS_Y, mPointerGesture.referenceGestureY + deltaY);
-                mPointerGesture.currentGestureCoords[i].setAxisValue(
-                        AMOTION_EVENT_AXIS_PRESSURE, 1.0f);
-            }
-
-            if (mPointerGesture.activeGestureId < 0) {
-                mPointerGesture.activeGestureId =
-                        mPointerGesture.currentGestureIdBits.firstMarkedBit();
-#if DEBUG_GESTURES
-                ALOGD("Gestures: FREEFORM new "
-                        "activeGestureId=%d", mPointerGesture.activeGestureId);
-#endif
-            }
-        }
-    }
-
-    mPointerController->setButtonState(mCurrentButtonState);
-
-#if DEBUG_GESTURES
-    ALOGD("Gestures: finishPreviousGesture=%s, cancelPreviousGesture=%s, "
-            "currentGestureMode=%d, currentGestureIdBits=0x%08x, "
-            "lastGestureMode=%d, lastGestureIdBits=0x%08x",
-            toString(*outFinishPreviousGesture), toString(*outCancelPreviousGesture),
-            mPointerGesture.currentGestureMode, mPointerGesture.currentGestureIdBits.value,
-            mPointerGesture.lastGestureMode, mPointerGesture.lastGestureIdBits.value);
-    for (BitSet32 idBits = mPointerGesture.currentGestureIdBits; !idBits.isEmpty(); ) {
-        uint32_t id = idBits.clearFirstMarkedBit();
-        uint32_t index = mPointerGesture.currentGestureIdToIndex[id];
-        const PointerProperties& properties = mPointerGesture.currentGestureProperties[index];
-        const PointerCoords& coords = mPointerGesture.currentGestureCoords[index];
-        ALOGD("  currentGesture[%d]: index=%d, toolType=%d, "
-                "x=%0.3f, y=%0.3f, pressure=%0.3f",
-                id, index, properties.toolType,
-                coords.getAxisValue(AMOTION_EVENT_AXIS_X),
-                coords.getAxisValue(AMOTION_EVENT_AXIS_Y),
-                coords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE));
-    }
-    for (BitSet32 idBits = mPointerGesture.lastGestureIdBits; !idBits.isEmpty(); ) {
-        uint32_t id = idBits.clearFirstMarkedBit();
-        uint32_t index = mPointerGesture.lastGestureIdToIndex[id];
-        const PointerProperties& properties = mPointerGesture.lastGestureProperties[index];
-        const PointerCoords& coords = mPointerGesture.lastGestureCoords[index];
-        ALOGD("  lastGesture[%d]: index=%d, toolType=%d, "
-                "x=%0.3f, y=%0.3f, pressure=%0.3f",
-                id, index, properties.toolType,
-                coords.getAxisValue(AMOTION_EVENT_AXIS_X),
-                coords.getAxisValue(AMOTION_EVENT_AXIS_Y),
-                coords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE));
-    }
-#endif
-    return true;
-}
-
-void TouchInputMapper::dispatchPointerStylus(nsecs_t when, uint32_t policyFlags) {
-    mPointerSimple.currentCoords.clear();
-    mPointerSimple.currentProperties.clear();
-
-    bool down, hovering;
-    if (!mCurrentStylusIdBits.isEmpty()) {
-        uint32_t id = mCurrentStylusIdBits.firstMarkedBit();
-        uint32_t index = mCurrentCookedPointerData.idToIndex[id];
-        float x = mCurrentCookedPointerData.pointerCoords[index].getX();
-        float y = mCurrentCookedPointerData.pointerCoords[index].getY();
-        mPointerController->setPosition(x, y);
-
-        hovering = mCurrentCookedPointerData.hoveringIdBits.hasBit(id);
-        down = !hovering;
-
-        mPointerController->getPosition(&x, &y);
-        mPointerSimple.currentCoords.copyFrom(mCurrentCookedPointerData.pointerCoords[index]);
-        mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
-        mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
-        mPointerSimple.currentProperties.id = 0;
-        mPointerSimple.currentProperties.toolType =
-                mCurrentCookedPointerData.pointerProperties[index].toolType;
-    } else {
-        down = false;
-        hovering = false;
-    }
-
-    dispatchPointerSimple(when, policyFlags, down, hovering);
-}
-
-void TouchInputMapper::abortPointerStylus(nsecs_t when, uint32_t policyFlags) {
-    abortPointerSimple(when, policyFlags);
-}
-
-void TouchInputMapper::dispatchPointerMouse(nsecs_t when, uint32_t policyFlags) {
-    mPointerSimple.currentCoords.clear();
-    mPointerSimple.currentProperties.clear();
-
-    bool down, hovering;
-    if (!mCurrentMouseIdBits.isEmpty()) {
-        uint32_t id = mCurrentMouseIdBits.firstMarkedBit();
-        uint32_t currentIndex = mCurrentRawPointerData.idToIndex[id];
-        if (mLastMouseIdBits.hasBit(id)) {
-            uint32_t lastIndex = mCurrentRawPointerData.idToIndex[id];
-            float deltaX = (mCurrentRawPointerData.pointers[currentIndex].x
-                    - mLastRawPointerData.pointers[lastIndex].x)
-                    * mPointerXMovementScale;
-            float deltaY = (mCurrentRawPointerData.pointers[currentIndex].y
-                    - mLastRawPointerData.pointers[lastIndex].y)
-                    * mPointerYMovementScale;
-
-            rotateDelta(mSurfaceOrientation, &deltaX, &deltaY);
-            mPointerVelocityControl.move(when, &deltaX, &deltaY);
-
-            mPointerController->move(deltaX, deltaY);
-        } else {
-            mPointerVelocityControl.reset();
-        }
-
-        down = isPointerDown(mCurrentButtonState);
-        hovering = !down;
-
-        float x, y;
-        mPointerController->getPosition(&x, &y);
-        mPointerSimple.currentCoords.copyFrom(
-                mCurrentCookedPointerData.pointerCoords[currentIndex]);
-        mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_X, x);
-        mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_Y, y);
-        mPointerSimple.currentCoords.setAxisValue(AMOTION_EVENT_AXIS_PRESSURE,
-                hovering ? 0.0f : 1.0f);
-        mPointerSimple.currentProperties.id = 0;
-        mPointerSimple.currentProperties.toolType =
-                mCurrentCookedPointerData.pointerProperties[currentIndex].toolType;
-    } else {
-        mPointerVelocityControl.reset();
-
-        down = false;
-        hovering = false;
-    }
-
-    dispatchPointerSimple(when, policyFlags, down, hovering);
-}
-
-void TouchInputMapper::abortPointerMouse(nsecs_t when, uint32_t policyFlags) {
-    abortPointerSimple(when, policyFlags);
-
-    mPointerVelocityControl.reset();
-}
-
-void TouchInputMapper::dispatchPointerSimple(nsecs_t when, uint32_t policyFlags,
-        bool down, bool hovering) {
-    int32_t metaState = getContext()->getGlobalMetaState();
-
-    if (mPointerController != NULL) {
-        if (down || hovering) {
-            mPointerController->setPresentation(PointerControllerInterface::PRESENTATION_POINTER);
-            mPointerController->clearSpots();
-            mPointerController->setButtonState(mCurrentButtonState);
-            mPointerController->unfade(PointerControllerInterface::TRANSITION_IMMEDIATE);
-        } else if (!down && !hovering && (mPointerSimple.down || mPointerSimple.hovering)) {
-            mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
-        }
-    }
-
-    if (mPointerSimple.down && !down) {
-        mPointerSimple.down = false;
-
-        // Send up.
-        NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                 AMOTION_EVENT_ACTION_UP, 0, metaState, mLastButtonState, 0,
-                 mViewport.displayId,
-                 1, &mPointerSimple.lastProperties, &mPointerSimple.lastCoords,
-                 mOrientedXPrecision, mOrientedYPrecision,
-                 mPointerSimple.downTime);
-        getListener()->notifyMotion(&args);
-    }
-
-    if (mPointerSimple.hovering && !hovering) {
-        mPointerSimple.hovering = false;
-
-        // Send hover exit.
-        NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                AMOTION_EVENT_ACTION_HOVER_EXIT, 0, metaState, mLastButtonState, 0,
-                mViewport.displayId,
-                1, &mPointerSimple.lastProperties, &mPointerSimple.lastCoords,
-                mOrientedXPrecision, mOrientedYPrecision,
-                mPointerSimple.downTime);
-        getListener()->notifyMotion(&args);
-    }
-
-    if (down) {
-        if (!mPointerSimple.down) {
-            mPointerSimple.down = true;
-            mPointerSimple.downTime = when;
-
-            // Send down.
-            NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                    AMOTION_EVENT_ACTION_DOWN, 0, metaState, mCurrentButtonState, 0,
-                    mViewport.displayId,
-                    1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
-                    mOrientedXPrecision, mOrientedYPrecision,
-                    mPointerSimple.downTime);
-            getListener()->notifyMotion(&args);
-        }
-
-        // Send move.
-        NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                AMOTION_EVENT_ACTION_MOVE, 0, metaState, mCurrentButtonState, 0,
-                mViewport.displayId,
-                1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
-                mOrientedXPrecision, mOrientedYPrecision,
-                mPointerSimple.downTime);
-        getListener()->notifyMotion(&args);
-    }
-
-    if (hovering) {
-        if (!mPointerSimple.hovering) {
-            mPointerSimple.hovering = true;
-
-            // Send hover enter.
-            NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                    AMOTION_EVENT_ACTION_HOVER_ENTER, 0, metaState, mCurrentButtonState, 0,
-                    mViewport.displayId,
-                    1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
-                    mOrientedXPrecision, mOrientedYPrecision,
-                    mPointerSimple.downTime);
-            getListener()->notifyMotion(&args);
-        }
-
-        // Send hover move.
-        NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                AMOTION_EVENT_ACTION_HOVER_MOVE, 0, metaState, mCurrentButtonState, 0,
-                mViewport.displayId,
-                1, &mPointerSimple.currentProperties, &mPointerSimple.currentCoords,
-                mOrientedXPrecision, mOrientedYPrecision,
-                mPointerSimple.downTime);
-        getListener()->notifyMotion(&args);
-    }
-
-    if (mCurrentRawVScroll || mCurrentRawHScroll) {
-        float vscroll = mCurrentRawVScroll;
-        float hscroll = mCurrentRawHScroll;
-        mWheelYVelocityControl.move(when, NULL, &vscroll);
-        mWheelXVelocityControl.move(when, &hscroll, NULL);
-
-        // Send scroll.
-        PointerCoords pointerCoords;
-        pointerCoords.copyFrom(mPointerSimple.currentCoords);
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_VSCROLL, vscroll);
-        pointerCoords.setAxisValue(AMOTION_EVENT_AXIS_HSCROLL, hscroll);
-
-        NotifyMotionArgs args(when, getDeviceId(), mSource, policyFlags,
-                AMOTION_EVENT_ACTION_SCROLL, 0, metaState, mCurrentButtonState, 0,
-                mViewport.displayId,
-                1, &mPointerSimple.currentProperties, &pointerCoords,
-                mOrientedXPrecision, mOrientedYPrecision,
-                mPointerSimple.downTime);
-        getListener()->notifyMotion(&args);
-    }
-
-    // Save state.
-    if (down || hovering) {
-        mPointerSimple.lastCoords.copyFrom(mPointerSimple.currentCoords);
-        mPointerSimple.lastProperties.copyFrom(mPointerSimple.currentProperties);
-    } else {
-        mPointerSimple.reset();
-    }
-}
-
-void TouchInputMapper::abortPointerSimple(nsecs_t when, uint32_t policyFlags) {
-    mPointerSimple.currentCoords.clear();
-    mPointerSimple.currentProperties.clear();
-
-    dispatchPointerSimple(when, policyFlags, false, false);
-}
-
-void TouchInputMapper::dispatchMotion(nsecs_t when, uint32_t policyFlags, uint32_t source,
-        int32_t action, int32_t flags, int32_t metaState, int32_t buttonState, int32_t edgeFlags,
-        const PointerProperties* properties, const PointerCoords* coords,
-        const uint32_t* idToIndex, BitSet32 idBits,
-        int32_t changedId, float xPrecision, float yPrecision, nsecs_t downTime) {
-    PointerCoords pointerCoords[MAX_POINTERS];
-    PointerProperties pointerProperties[MAX_POINTERS];
-    uint32_t pointerCount = 0;
-    while (!idBits.isEmpty()) {
-        uint32_t id = idBits.clearFirstMarkedBit();
-        uint32_t index = idToIndex[id];
-        pointerProperties[pointerCount].copyFrom(properties[index]);
-        pointerCoords[pointerCount].copyFrom(coords[index]);
-
-        if (changedId >= 0 && id == uint32_t(changedId)) {
-            action |= pointerCount << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT;
-        }
-
-        pointerCount += 1;
-    }
-
-    ALOG_ASSERT(pointerCount != 0);
-
-    if (changedId >= 0 && pointerCount == 1) {
-        // Replace initial down and final up action.
-        // We can compare the action without masking off the changed pointer index
-        // because we know the index is 0.
-        if (action == AMOTION_EVENT_ACTION_POINTER_DOWN) {
-            action = AMOTION_EVENT_ACTION_DOWN;
-        } else if (action == AMOTION_EVENT_ACTION_POINTER_UP) {
-            action = AMOTION_EVENT_ACTION_UP;
-        } else {
-            // Can't happen.
-            ALOG_ASSERT(false);
-        }
-    }
-
-    NotifyMotionArgs args(when, getDeviceId(), source, policyFlags,
-            action, flags, metaState, buttonState, edgeFlags,
-            mViewport.displayId, pointerCount, pointerProperties, pointerCoords,
-            xPrecision, yPrecision, downTime);
-    getListener()->notifyMotion(&args);
-}
-
-bool TouchInputMapper::updateMovedPointers(const PointerProperties* inProperties,
-        const PointerCoords* inCoords, const uint32_t* inIdToIndex,
-        PointerProperties* outProperties, PointerCoords* outCoords, const uint32_t* outIdToIndex,
-        BitSet32 idBits) const {
-    bool changed = false;
-    while (!idBits.isEmpty()) {
-        uint32_t id = idBits.clearFirstMarkedBit();
-        uint32_t inIndex = inIdToIndex[id];
-        uint32_t outIndex = outIdToIndex[id];
-
-        const PointerProperties& curInProperties = inProperties[inIndex];
-        const PointerCoords& curInCoords = inCoords[inIndex];
-        PointerProperties& curOutProperties = outProperties[outIndex];
-        PointerCoords& curOutCoords = outCoords[outIndex];
-
-        if (curInProperties != curOutProperties) {
-            curOutProperties.copyFrom(curInProperties);
-            changed = true;
-        }
-
-        if (curInCoords != curOutCoords) {
-            curOutCoords.copyFrom(curInCoords);
-            changed = true;
-        }
-    }
-    return changed;
-}
-
-void TouchInputMapper::fadePointer() {
-    if (mPointerController != NULL) {
-        mPointerController->fade(PointerControllerInterface::TRANSITION_GRADUAL);
-    }
-}
-
-bool TouchInputMapper::isPointInsideSurface(int32_t x, int32_t y) {
-    return x >= mRawPointerAxes.x.minValue && x <= mRawPointerAxes.x.maxValue
-            && y >= mRawPointerAxes.y.minValue && y <= mRawPointerAxes.y.maxValue;
-}
-
-const TouchInputMapper::VirtualKey* TouchInputMapper::findVirtualKeyHit(
-        int32_t x, int32_t y) {
-    size_t numVirtualKeys = mVirtualKeys.size();
-    for (size_t i = 0; i < numVirtualKeys; i++) {
-        const VirtualKey& virtualKey = mVirtualKeys[i];
-
-#if DEBUG_VIRTUAL_KEYS
-        ALOGD("VirtualKeys: Hit test (%d, %d): keyCode=%d, scanCode=%d, "
-                "left=%d, top=%d, right=%d, bottom=%d",
-                x, y,
-                virtualKey.keyCode, virtualKey.scanCode,
-                virtualKey.hitLeft, virtualKey.hitTop,
-                virtualKey.hitRight, virtualKey.hitBottom);
-#endif
-
-        if (virtualKey.isHit(x, y)) {
-            return & virtualKey;
-        }
-    }
-
-    return NULL;
-}
-
-void TouchInputMapper::assignPointerIds() {
-    uint32_t currentPointerCount = mCurrentRawPointerData.pointerCount;
-    uint32_t lastPointerCount = mLastRawPointerData.pointerCount;
-
-    mCurrentRawPointerData.clearIdBits();
-
-    if (currentPointerCount == 0) {
-        // No pointers to assign.
-        return;
-    }
-
-    if (lastPointerCount == 0) {
-        // All pointers are new.
-        for (uint32_t i = 0; i < currentPointerCount; i++) {
-            uint32_t id = i;
-            mCurrentRawPointerData.pointers[i].id = id;
-            mCurrentRawPointerData.idToIndex[id] = i;
-            mCurrentRawPointerData.markIdBit(id, mCurrentRawPointerData.isHovering(i));
-        }
-        return;
-    }
-
-    if (currentPointerCount == 1 && lastPointerCount == 1
-            && mCurrentRawPointerData.pointers[0].toolType
-                    == mLastRawPointerData.pointers[0].toolType) {
-        // Only one pointer and no change in count so it must have the same id as before.
-        uint32_t id = mLastRawPointerData.pointers[0].id;
-        mCurrentRawPointerData.pointers[0].id = id;
-        mCurrentRawPointerData.idToIndex[id] = 0;
-        mCurrentRawPointerData.markIdBit(id, mCurrentRawPointerData.isHovering(0));
-        return;
-    }
-
-    // General case.
-    // We build a heap of squared euclidean distances between current and last pointers
-    // associated with the current and last pointer indices.  Then, we find the best
-    // match (by distance) for each current pointer.
-    // The pointers must have the same tool type but it is possible for them to
-    // transition from hovering to touching or vice-versa while retaining the same id.
-    PointerDistanceHeapElement heap[MAX_POINTERS * MAX_POINTERS];
-
-    uint32_t heapSize = 0;
-    for (uint32_t currentPointerIndex = 0; currentPointerIndex < currentPointerCount;
-            currentPointerIndex++) {
-        for (uint32_t lastPointerIndex = 0; lastPointerIndex < lastPointerCount;
-                lastPointerIndex++) {
-            const RawPointerData::Pointer& currentPointer =
-                    mCurrentRawPointerData.pointers[currentPointerIndex];
-            const RawPointerData::Pointer& lastPointer =
-                    mLastRawPointerData.pointers[lastPointerIndex];
-            if (currentPointer.toolType == lastPointer.toolType) {
-                int64_t deltaX = currentPointer.x - lastPointer.x;
-                int64_t deltaY = currentPointer.y - lastPointer.y;
-
-                uint64_t distance = uint64_t(deltaX * deltaX + deltaY * deltaY);
-
-                // Insert new element into the heap (sift up).
-                heap[heapSize].currentPointerIndex = currentPointerIndex;
-                heap[heapSize].lastPointerIndex = lastPointerIndex;
-                heap[heapSize].distance = distance;
-                heapSize += 1;
-            }
-        }
-    }
-
-    // Heapify
-    for (uint32_t startIndex = heapSize / 2; startIndex != 0; ) {
-        startIndex -= 1;
-        for (uint32_t parentIndex = startIndex; ;) {
-            uint32_t childIndex = parentIndex * 2 + 1;
-            if (childIndex >= heapSize) {
-                break;
-            }
-
-            if (childIndex + 1 < heapSize
-                    && heap[childIndex + 1].distance < heap[childIndex].distance) {
-                childIndex += 1;
-            }
-
-            if (heap[parentIndex].distance <= heap[childIndex].distance) {
-                break;
-            }
-
-            swap(heap[parentIndex], heap[childIndex]);
-            parentIndex = childIndex;
-        }
-    }
-
-#if DEBUG_POINTER_ASSIGNMENT
-    ALOGD("assignPointerIds - initial distance min-heap: size=%d", heapSize);
-    for (size_t i = 0; i < heapSize; i++) {
-        ALOGD("  heap[%d]: cur=%d, last=%d, distance=%lld",
-                i, heap[i].currentPointerIndex, heap[i].lastPointerIndex,
-                heap[i].distance);
-    }
-#endif
-
-    // Pull matches out by increasing order of distance.
-    // To avoid reassigning pointers that have already been matched, the loop keeps track
-    // of which last and current pointers have been matched using the matchedXXXBits variables.
-    // It also tracks the used pointer id bits.
-    BitSet32 matchedLastBits(0);
-    BitSet32 matchedCurrentBits(0);
-    BitSet32 usedIdBits(0);
-    bool first = true;
-    for (uint32_t i = min(currentPointerCount, lastPointerCount); heapSize > 0 && i > 0; i--) {
-        while (heapSize > 0) {
-            if (first) {
-                // The first time through the loop, we just consume the root element of
-                // the heap (the one with smallest distance).
-                first = false;
-            } else {
-                // Previous iterations consumed the root element of the heap.
-                // Pop root element off of the heap (sift down).
-                heap[0] = heap[heapSize];
-                for (uint32_t parentIndex = 0; ;) {
-                    uint32_t childIndex = parentIndex * 2 + 1;
-                    if (childIndex >= heapSize) {
-                        break;
-                    }
-
-                    if (childIndex + 1 < heapSize
-                            && heap[childIndex + 1].distance < heap[childIndex].distance) {
-                        childIndex += 1;
-                    }
-
-                    if (heap[parentIndex].distance <= heap[childIndex].distance) {
-                        break;
-                    }
-
-                    swap(heap[parentIndex], heap[childIndex]);
-                    parentIndex = childIndex;
-                }
-
-#if DEBUG_POINTER_ASSIGNMENT
-                ALOGD("assignPointerIds - reduced distance min-heap: size=%d", heapSize);
-                for (size_t i = 0; i < heapSize; i++) {
-                    ALOGD("  heap[%d]: cur=%d, last=%d, distance=%lld",
-                            i, heap[i].currentPointerIndex, heap[i].lastPointerIndex,
-                            heap[i].distance);
-                }
-#endif
-            }
-
-            heapSize -= 1;
-
-            uint32_t currentPointerIndex = heap[0].currentPointerIndex;
-            if (matchedCurrentBits.hasBit(currentPointerIndex)) continue; // already matched
-
-            uint32_t lastPointerIndex = heap[0].lastPointerIndex;
-            if (matchedLastBits.hasBit(lastPointerIndex)) continue; // already matched
-
-            matchedCurrentBits.markBit(currentPointerIndex);
-            matchedLastBits.markBit(lastPointerIndex);
-
-            uint32_t id = mLastRawPointerData.pointers[lastPointerIndex].id;
-            mCurrentRawPointerData.pointers[currentPointerIndex].id = id;
-            mCurrentRawPointerData.idToIndex[id] = currentPointerIndex;
-            mCurrentRawPointerData.markIdBit(id,
-                    mCurrentRawPointerData.isHovering(currentPointerIndex));
-            usedIdBits.markBit(id);
-
-#if DEBUG_POINTER_ASSIGNMENT
-            ALOGD("assignPointerIds - matched: cur=%d, last=%d, id=%d, distance=%lld",
-                    lastPointerIndex, currentPointerIndex, id, heap[0].distance);
-#endif
-            break;
-        }
-    }
-
-    // Assign fresh ids to pointers that were not matched in the process.
-    for (uint32_t i = currentPointerCount - matchedCurrentBits.count(); i != 0; i--) {
-        uint32_t currentPointerIndex = matchedCurrentBits.markFirstUnmarkedBit();
-        uint32_t id = usedIdBits.markFirstUnmarkedBit();
-
-        mCurrentRawPointerData.pointers[currentPointerIndex].id = id;
-        mCurrentRawPointerData.idToIndex[id] = currentPointerIndex;
-        mCurrentRawPointerData.markIdBit(id,
-                mCurrentRawPointerData.isHovering(currentPointerIndex));
-
-#if DEBUG_POINTER_ASSIGNMENT
-        ALOGD("assignPointerIds - assigned: cur=%d, id=%d",
-                currentPointerIndex, id);
-#endif
-    }
-}
-
-int32_t TouchInputMapper::getKeyCodeState(uint32_t sourceMask, int32_t keyCode) {
-    if (mCurrentVirtualKey.down && mCurrentVirtualKey.keyCode == keyCode) {
-        return AKEY_STATE_VIRTUAL;
-    }
-
-    size_t numVirtualKeys = mVirtualKeys.size();
-    for (size_t i = 0; i < numVirtualKeys; i++) {
-        const VirtualKey& virtualKey = mVirtualKeys[i];
-        if (virtualKey.keyCode == keyCode) {
-            return AKEY_STATE_UP;
-        }
-    }
-
-    return AKEY_STATE_UNKNOWN;
-}
-
-int32_t TouchInputMapper::getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
-    if (mCurrentVirtualKey.down && mCurrentVirtualKey.scanCode == scanCode) {
-        return AKEY_STATE_VIRTUAL;
-    }
-
-    size_t numVirtualKeys = mVirtualKeys.size();
-    for (size_t i = 0; i < numVirtualKeys; i++) {
-        const VirtualKey& virtualKey = mVirtualKeys[i];
-        if (virtualKey.scanCode == scanCode) {
-            return AKEY_STATE_UP;
-        }
-    }
-
-    return AKEY_STATE_UNKNOWN;
-}
-
-bool TouchInputMapper::markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-        const int32_t* keyCodes, uint8_t* outFlags) {
-    size_t numVirtualKeys = mVirtualKeys.size();
-    for (size_t i = 0; i < numVirtualKeys; i++) {
-        const VirtualKey& virtualKey = mVirtualKeys[i];
-
-        for (size_t i = 0; i < numCodes; i++) {
-            if (virtualKey.keyCode == keyCodes[i]) {
-                outFlags[i] = 1;
-            }
-        }
-    }
-
-    return true;
-}
-
-
-// --- SingleTouchInputMapper ---
-
-SingleTouchInputMapper::SingleTouchInputMapper(InputDevice* device) :
-        TouchInputMapper(device) {
-}
-
-SingleTouchInputMapper::~SingleTouchInputMapper() {
-}
-
-void SingleTouchInputMapper::reset(nsecs_t when) {
-    mSingleTouchMotionAccumulator.reset(getDevice());
-
-    TouchInputMapper::reset(when);
-}
-
-void SingleTouchInputMapper::process(const RawEvent* rawEvent) {
-    TouchInputMapper::process(rawEvent);
-
-    mSingleTouchMotionAccumulator.process(rawEvent);
-}
-
-void SingleTouchInputMapper::syncTouch(nsecs_t when, bool* outHavePointerIds) {
-    if (mTouchButtonAccumulator.isToolActive()) {
-        mCurrentRawPointerData.pointerCount = 1;
-        mCurrentRawPointerData.idToIndex[0] = 0;
-
-        bool isHovering = mTouchButtonAccumulator.getToolType() != AMOTION_EVENT_TOOL_TYPE_MOUSE
-                && (mTouchButtonAccumulator.isHovering()
-                        || (mRawPointerAxes.pressure.valid
-                                && mSingleTouchMotionAccumulator.getAbsolutePressure() <= 0));
-        mCurrentRawPointerData.markIdBit(0, isHovering);
-
-        RawPointerData::Pointer& outPointer = mCurrentRawPointerData.pointers[0];
-        outPointer.id = 0;
-        outPointer.x = mSingleTouchMotionAccumulator.getAbsoluteX();
-        outPointer.y = mSingleTouchMotionAccumulator.getAbsoluteY();
-        outPointer.pressure = mSingleTouchMotionAccumulator.getAbsolutePressure();
-        outPointer.touchMajor = 0;
-        outPointer.touchMinor = 0;
-        outPointer.toolMajor = mSingleTouchMotionAccumulator.getAbsoluteToolWidth();
-        outPointer.toolMinor = mSingleTouchMotionAccumulator.getAbsoluteToolWidth();
-        outPointer.orientation = 0;
-        outPointer.distance = mSingleTouchMotionAccumulator.getAbsoluteDistance();
-        outPointer.tiltX = mSingleTouchMotionAccumulator.getAbsoluteTiltX();
-        outPointer.tiltY = mSingleTouchMotionAccumulator.getAbsoluteTiltY();
-        outPointer.toolType = mTouchButtonAccumulator.getToolType();
-        if (outPointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
-            outPointer.toolType = AMOTION_EVENT_TOOL_TYPE_FINGER;
-        }
-        outPointer.isHovering = isHovering;
-    }
-}
-
-void SingleTouchInputMapper::configureRawPointerAxes() {
-    TouchInputMapper::configureRawPointerAxes();
-
-    getAbsoluteAxisInfo(ABS_X, &mRawPointerAxes.x);
-    getAbsoluteAxisInfo(ABS_Y, &mRawPointerAxes.y);
-    getAbsoluteAxisInfo(ABS_PRESSURE, &mRawPointerAxes.pressure);
-    getAbsoluteAxisInfo(ABS_TOOL_WIDTH, &mRawPointerAxes.toolMajor);
-    getAbsoluteAxisInfo(ABS_DISTANCE, &mRawPointerAxes.distance);
-    getAbsoluteAxisInfo(ABS_TILT_X, &mRawPointerAxes.tiltX);
-    getAbsoluteAxisInfo(ABS_TILT_Y, &mRawPointerAxes.tiltY);
-}
-
-bool SingleTouchInputMapper::hasStylus() const {
-    return mTouchButtonAccumulator.hasStylus();
-}
-
-
-// --- MultiTouchInputMapper ---
-
-MultiTouchInputMapper::MultiTouchInputMapper(InputDevice* device) :
-        TouchInputMapper(device) {
-}
-
-MultiTouchInputMapper::~MultiTouchInputMapper() {
-}
-
-void MultiTouchInputMapper::reset(nsecs_t when) {
-    mMultiTouchMotionAccumulator.reset(getDevice());
-
-    mPointerIdBits.clear();
-
-    TouchInputMapper::reset(when);
-}
-
-void MultiTouchInputMapper::process(const RawEvent* rawEvent) {
-    TouchInputMapper::process(rawEvent);
-
-    mMultiTouchMotionAccumulator.process(rawEvent);
-}
-
-void MultiTouchInputMapper::syncTouch(nsecs_t when, bool* outHavePointerIds) {
-    size_t inCount = mMultiTouchMotionAccumulator.getSlotCount();
-    size_t outCount = 0;
-    BitSet32 newPointerIdBits;
-
-    for (size_t inIndex = 0; inIndex < inCount; inIndex++) {
-        const MultiTouchMotionAccumulator::Slot* inSlot =
-                mMultiTouchMotionAccumulator.getSlot(inIndex);
-        if (!inSlot->isInUse()) {
-            continue;
-        }
-
-        if (outCount >= MAX_POINTERS) {
-#if DEBUG_POINTERS
-            ALOGD("MultiTouch device %s emitted more than maximum of %d pointers; "
-                    "ignoring the rest.",
-                    getDeviceName().string(), MAX_POINTERS);
-#endif
-            break; // too many fingers!
-        }
-
-        RawPointerData::Pointer& outPointer = mCurrentRawPointerData.pointers[outCount];
-        outPointer.x = inSlot->getX();
-        outPointer.y = inSlot->getY();
-        outPointer.pressure = inSlot->getPressure();
-        outPointer.touchMajor = inSlot->getTouchMajor();
-        outPointer.touchMinor = inSlot->getTouchMinor();
-        outPointer.toolMajor = inSlot->getToolMajor();
-        outPointer.toolMinor = inSlot->getToolMinor();
-        outPointer.orientation = inSlot->getOrientation();
-        outPointer.distance = inSlot->getDistance();
-        outPointer.tiltX = 0;
-        outPointer.tiltY = 0;
-
-        outPointer.toolType = inSlot->getToolType();
-        if (outPointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
-            outPointer.toolType = mTouchButtonAccumulator.getToolType();
-            if (outPointer.toolType == AMOTION_EVENT_TOOL_TYPE_UNKNOWN) {
-                outPointer.toolType = AMOTION_EVENT_TOOL_TYPE_FINGER;
-            }
-        }
-
-        bool isHovering = mTouchButtonAccumulator.getToolType() != AMOTION_EVENT_TOOL_TYPE_MOUSE
-                && (mTouchButtonAccumulator.isHovering()
-                        || (mRawPointerAxes.pressure.valid && inSlot->getPressure() <= 0));
-        outPointer.isHovering = isHovering;
-
-        // Assign pointer id using tracking id if available.
-        if (*outHavePointerIds) {
-            int32_t trackingId = inSlot->getTrackingId();
-            int32_t id = -1;
-            if (trackingId >= 0) {
-                for (BitSet32 idBits(mPointerIdBits); !idBits.isEmpty(); ) {
-                    uint32_t n = idBits.clearFirstMarkedBit();
-                    if (mPointerTrackingIdMap[n] == trackingId) {
-                        id = n;
-                    }
-                }
-
-                if (id < 0 && !mPointerIdBits.isFull()) {
-                    id = mPointerIdBits.markFirstUnmarkedBit();
-                    mPointerTrackingIdMap[id] = trackingId;
-                }
-            }
-            if (id < 0) {
-                *outHavePointerIds = false;
-                mCurrentRawPointerData.clearIdBits();
-                newPointerIdBits.clear();
-            } else {
-                outPointer.id = id;
-                mCurrentRawPointerData.idToIndex[id] = outCount;
-                mCurrentRawPointerData.markIdBit(id, isHovering);
-                newPointerIdBits.markBit(id);
-            }
-        }
-
-        outCount += 1;
-    }
-
-    mCurrentRawPointerData.pointerCount = outCount;
-    mPointerIdBits = newPointerIdBits;
-
-    mMultiTouchMotionAccumulator.finishSync();
-}
-
-void MultiTouchInputMapper::configureRawPointerAxes() {
-    TouchInputMapper::configureRawPointerAxes();
-
-    getAbsoluteAxisInfo(ABS_MT_POSITION_X, &mRawPointerAxes.x);
-    getAbsoluteAxisInfo(ABS_MT_POSITION_Y, &mRawPointerAxes.y);
-    getAbsoluteAxisInfo(ABS_MT_TOUCH_MAJOR, &mRawPointerAxes.touchMajor);
-    getAbsoluteAxisInfo(ABS_MT_TOUCH_MINOR, &mRawPointerAxes.touchMinor);
-    getAbsoluteAxisInfo(ABS_MT_WIDTH_MAJOR, &mRawPointerAxes.toolMajor);
-    getAbsoluteAxisInfo(ABS_MT_WIDTH_MINOR, &mRawPointerAxes.toolMinor);
-    getAbsoluteAxisInfo(ABS_MT_ORIENTATION, &mRawPointerAxes.orientation);
-    getAbsoluteAxisInfo(ABS_MT_PRESSURE, &mRawPointerAxes.pressure);
-    getAbsoluteAxisInfo(ABS_MT_DISTANCE, &mRawPointerAxes.distance);
-    getAbsoluteAxisInfo(ABS_MT_TRACKING_ID, &mRawPointerAxes.trackingId);
-    getAbsoluteAxisInfo(ABS_MT_SLOT, &mRawPointerAxes.slot);
-
-    if (mRawPointerAxes.trackingId.valid
-            && mRawPointerAxes.slot.valid
-            && mRawPointerAxes.slot.minValue == 0 && mRawPointerAxes.slot.maxValue > 0) {
-        size_t slotCount = mRawPointerAxes.slot.maxValue + 1;
-        if (slotCount > MAX_SLOTS) {
-            ALOGW("MultiTouch Device %s reported %zu slots but the framework "
-                    "only supports a maximum of %zu slots at this time.",
-                    getDeviceName().string(), slotCount, MAX_SLOTS);
-            slotCount = MAX_SLOTS;
-        }
-        mMultiTouchMotionAccumulator.configure(getDevice(),
-                slotCount, true /*usingSlotsProtocol*/);
-    } else {
-        mMultiTouchMotionAccumulator.configure(getDevice(),
-                MAX_POINTERS, false /*usingSlotsProtocol*/);
-    }
-}
-
-bool MultiTouchInputMapper::hasStylus() const {
-    return mMultiTouchMotionAccumulator.hasStylus()
-            || mTouchButtonAccumulator.hasStylus();
-}
-
-
-// --- JoystickInputMapper ---
-
-JoystickInputMapper::JoystickInputMapper(InputDevice* device) :
-        InputMapper(device) {
-}
-
-JoystickInputMapper::~JoystickInputMapper() {
-}
-
-uint32_t JoystickInputMapper::getSources() {
-    return AINPUT_SOURCE_JOYSTICK;
-}
-
-void JoystickInputMapper::populateDeviceInfo(InputDeviceInfo* info) {
-    InputMapper::populateDeviceInfo(info);
-
-    for (size_t i = 0; i < mAxes.size(); i++) {
-        const Axis& axis = mAxes.valueAt(i);
-        addMotionRange(axis.axisInfo.axis, axis, info);
-
-        if (axis.axisInfo.mode == AxisInfo::MODE_SPLIT) {
-            addMotionRange(axis.axisInfo.highAxis, axis, info);
-
-        }
-    }
-}
-
-void JoystickInputMapper::addMotionRange(int32_t axisId, const Axis& axis,
-        InputDeviceInfo* info) {
-    info->addMotionRange(axisId, AINPUT_SOURCE_JOYSTICK,
-            axis.min, axis.max, axis.flat, axis.fuzz, axis.resolution);
-    /* In order to ease the transition for developers from using the old axes
-     * to the newer, more semantically correct axes, we'll continue to register
-     * the old axes as duplicates of their corresponding new ones.  */
-    int32_t compatAxis = getCompatAxis(axisId);
-    if (compatAxis >= 0) {
-        info->addMotionRange(compatAxis, AINPUT_SOURCE_JOYSTICK,
-                axis.min, axis.max, axis.flat, axis.fuzz, axis.resolution);
-    }
-}
-
-/* A mapping from axes the joystick actually has to the axes that should be
- * artificially created for compatibility purposes.
- * Returns -1 if no compatibility axis is needed. */
-int32_t JoystickInputMapper::getCompatAxis(int32_t axis) {
-    switch(axis) {
-    case AMOTION_EVENT_AXIS_LTRIGGER:
-        return AMOTION_EVENT_AXIS_BRAKE;
-    case AMOTION_EVENT_AXIS_RTRIGGER:
-        return AMOTION_EVENT_AXIS_GAS;
-    }
-    return -1;
-}
-
-void JoystickInputMapper::dump(String8& dump) {
-    dump.append(INDENT2 "Joystick Input Mapper:\n");
-
-    dump.append(INDENT3 "Axes:\n");
-    size_t numAxes = mAxes.size();
-    for (size_t i = 0; i < numAxes; i++) {
-        const Axis& axis = mAxes.valueAt(i);
-        const char* label = getAxisLabel(axis.axisInfo.axis);
-        if (label) {
-            dump.appendFormat(INDENT4 "%s", label);
-        } else {
-            dump.appendFormat(INDENT4 "%d", axis.axisInfo.axis);
-        }
-        if (axis.axisInfo.mode == AxisInfo::MODE_SPLIT) {
-            label = getAxisLabel(axis.axisInfo.highAxis);
-            if (label) {
-                dump.appendFormat(" / %s (split at %d)", label, axis.axisInfo.splitValue);
-            } else {
-                dump.appendFormat(" / %d (split at %d)", axis.axisInfo.highAxis,
-                        axis.axisInfo.splitValue);
-            }
-        } else if (axis.axisInfo.mode == AxisInfo::MODE_INVERT) {
-            dump.append(" (invert)");
-        }
-
-        dump.appendFormat(": min=%0.5f, max=%0.5f, flat=%0.5f, fuzz=%0.5f, resolution=%0.5f\n",
-                axis.min, axis.max, axis.flat, axis.fuzz, axis.resolution);
-        dump.appendFormat(INDENT4 "  scale=%0.5f, offset=%0.5f, "
-                "highScale=%0.5f, highOffset=%0.5f\n",
-                axis.scale, axis.offset, axis.highScale, axis.highOffset);
-        dump.appendFormat(INDENT4 "  rawAxis=%d, rawMin=%d, rawMax=%d, "
-                "rawFlat=%d, rawFuzz=%d, rawResolution=%d\n",
-                mAxes.keyAt(i), axis.rawAxisInfo.minValue, axis.rawAxisInfo.maxValue,
-                axis.rawAxisInfo.flat, axis.rawAxisInfo.fuzz, axis.rawAxisInfo.resolution);
-    }
-}
-
-void JoystickInputMapper::configure(nsecs_t when,
-        const InputReaderConfiguration* config, uint32_t changes) {
-    InputMapper::configure(when, config, changes);
-
-    if (!changes) { // first time only
-        // Collect all axes.
-        for (int32_t abs = 0; abs <= ABS_MAX; abs++) {
-            if (!(getAbsAxisUsage(abs, getDevice()->getClasses())
-                    & INPUT_DEVICE_CLASS_JOYSTICK)) {
-                continue; // axis must be claimed by a different device
-            }
-
-            RawAbsoluteAxisInfo rawAxisInfo;
-            getAbsoluteAxisInfo(abs, &rawAxisInfo);
-            if (rawAxisInfo.valid) {
-                // Map axis.
-                AxisInfo axisInfo;
-                bool explicitlyMapped = !getEventHub()->mapAxis(getDeviceId(), abs, &axisInfo);
-                if (!explicitlyMapped) {
-                    // Axis is not explicitly mapped, will choose a generic axis later.
-                    axisInfo.mode = AxisInfo::MODE_NORMAL;
-                    axisInfo.axis = -1;
-                }
-
-                // Apply flat override.
-                int32_t rawFlat = axisInfo.flatOverride < 0
-                        ? rawAxisInfo.flat : axisInfo.flatOverride;
-
-                // Calculate scaling factors and limits.
-                Axis axis;
-                if (axisInfo.mode == AxisInfo::MODE_SPLIT) {
-                    float scale = 1.0f / (axisInfo.splitValue - rawAxisInfo.minValue);
-                    float highScale = 1.0f / (rawAxisInfo.maxValue - axisInfo.splitValue);
-                    axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped,
-                            scale, 0.0f, highScale, 0.0f,
-                            0.0f, 1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
-                            rawAxisInfo.resolution * scale);
-                } else if (isCenteredAxis(axisInfo.axis)) {
-                    float scale = 2.0f / (rawAxisInfo.maxValue - rawAxisInfo.minValue);
-                    float offset = avg(rawAxisInfo.minValue, rawAxisInfo.maxValue) * -scale;
-                    axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped,
-                            scale, offset, scale, offset,
-                            -1.0f, 1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
-                            rawAxisInfo.resolution * scale);
-                } else {
-                    float scale = 1.0f / (rawAxisInfo.maxValue - rawAxisInfo.minValue);
-                    axis.initialize(rawAxisInfo, axisInfo, explicitlyMapped,
-                            scale, 0.0f, scale, 0.0f,
-                            0.0f, 1.0f, rawFlat * scale, rawAxisInfo.fuzz * scale,
-                            rawAxisInfo.resolution * scale);
-                }
-
-                // To eliminate noise while the joystick is at rest, filter out small variations
-                // in axis values up front.
-                axis.filter = axis.flat * 0.25f;
-
-                mAxes.add(abs, axis);
-            }
-        }
-
-        // If there are too many axes, start dropping them.
-        // Prefer to keep explicitly mapped axes.
-        if (mAxes.size() > PointerCoords::MAX_AXES) {
-            ALOGI("Joystick '%s' has %zu axes but the framework only supports a maximum of %d.",
-                    getDeviceName().string(), mAxes.size(), PointerCoords::MAX_AXES);
-            pruneAxes(true);
-            pruneAxes(false);
-        }
-
-        // Assign generic axis ids to remaining axes.
-        int32_t nextGenericAxisId = AMOTION_EVENT_AXIS_GENERIC_1;
-        size_t numAxes = mAxes.size();
-        for (size_t i = 0; i < numAxes; i++) {
-            Axis& axis = mAxes.editValueAt(i);
-            if (axis.axisInfo.axis < 0) {
-                while (nextGenericAxisId <= AMOTION_EVENT_AXIS_GENERIC_16
-                        && haveAxis(nextGenericAxisId)) {
-                    nextGenericAxisId += 1;
-                }
-
-                if (nextGenericAxisId <= AMOTION_EVENT_AXIS_GENERIC_16) {
-                    axis.axisInfo.axis = nextGenericAxisId;
-                    nextGenericAxisId += 1;
-                } else {
-                    ALOGI("Ignoring joystick '%s' axis %d because all of the generic axis ids "
-                            "have already been assigned to other axes.",
-                            getDeviceName().string(), mAxes.keyAt(i));
-                    mAxes.removeItemsAt(i--);
-                    numAxes -= 1;
-                }
-            }
-        }
-    }
-}
-
-bool JoystickInputMapper::haveAxis(int32_t axisId) {
-    size_t numAxes = mAxes.size();
-    for (size_t i = 0; i < numAxes; i++) {
-        const Axis& axis = mAxes.valueAt(i);
-        if (axis.axisInfo.axis == axisId
-                || (axis.axisInfo.mode == AxisInfo::MODE_SPLIT
-                        && axis.axisInfo.highAxis == axisId)) {
-            return true;
-        }
-    }
-    return false;
-}
-
-void JoystickInputMapper::pruneAxes(bool ignoreExplicitlyMappedAxes) {
-    size_t i = mAxes.size();
-    while (mAxes.size() > PointerCoords::MAX_AXES && i-- > 0) {
-        if (ignoreExplicitlyMappedAxes && mAxes.valueAt(i).explicitlyMapped) {
-            continue;
-        }
-        ALOGI("Discarding joystick '%s' axis %d because there are too many axes.",
-                getDeviceName().string(), mAxes.keyAt(i));
-        mAxes.removeItemsAt(i);
-    }
-}
-
-bool JoystickInputMapper::isCenteredAxis(int32_t axis) {
-    switch (axis) {
-    case AMOTION_EVENT_AXIS_X:
-    case AMOTION_EVENT_AXIS_Y:
-    case AMOTION_EVENT_AXIS_Z:
-    case AMOTION_EVENT_AXIS_RX:
-    case AMOTION_EVENT_AXIS_RY:
-    case AMOTION_EVENT_AXIS_RZ:
-    case AMOTION_EVENT_AXIS_HAT_X:
-    case AMOTION_EVENT_AXIS_HAT_Y:
-    case AMOTION_EVENT_AXIS_ORIENTATION:
-    case AMOTION_EVENT_AXIS_RUDDER:
-    case AMOTION_EVENT_AXIS_WHEEL:
-        return true;
-    default:
-        return false;
-    }
-}
-
-void JoystickInputMapper::reset(nsecs_t when) {
-    // Recenter all axes.
-    size_t numAxes = mAxes.size();
-    for (size_t i = 0; i < numAxes; i++) {
-        Axis& axis = mAxes.editValueAt(i);
-        axis.resetValue();
-    }
-
-    InputMapper::reset(when);
-}
-
-void JoystickInputMapper::process(const RawEvent* rawEvent) {
-    switch (rawEvent->type) {
-    case EV_ABS: {
-        ssize_t index = mAxes.indexOfKey(rawEvent->code);
-        if (index >= 0) {
-            Axis& axis = mAxes.editValueAt(index);
-            float newValue, highNewValue;
-            switch (axis.axisInfo.mode) {
-            case AxisInfo::MODE_INVERT:
-                newValue = (axis.rawAxisInfo.maxValue - rawEvent->value)
-                        * axis.scale + axis.offset;
-                highNewValue = 0.0f;
-                break;
-            case AxisInfo::MODE_SPLIT:
-                if (rawEvent->value < axis.axisInfo.splitValue) {
-                    newValue = (axis.axisInfo.splitValue - rawEvent->value)
-                            * axis.scale + axis.offset;
-                    highNewValue = 0.0f;
-                } else if (rawEvent->value > axis.axisInfo.splitValue) {
-                    newValue = 0.0f;
-                    highNewValue = (rawEvent->value - axis.axisInfo.splitValue)
-                            * axis.highScale + axis.highOffset;
-                } else {
-                    newValue = 0.0f;
-                    highNewValue = 0.0f;
-                }
-                break;
-            default:
-                newValue = rawEvent->value * axis.scale + axis.offset;
-                highNewValue = 0.0f;
-                break;
-            }
-            axis.newValue = newValue;
-            axis.highNewValue = highNewValue;
-        }
-        break;
-    }
-
-    case EV_SYN:
-        switch (rawEvent->code) {
-        case SYN_REPORT:
-            sync(rawEvent->when, false /*force*/);
-            break;
-        }
-        break;
-    }
-}
-
-void JoystickInputMapper::sync(nsecs_t when, bool force) {
-    if (!filterAxes(force)) {
-        return;
-    }
-
-    int32_t metaState = mContext->getGlobalMetaState();
-    int32_t buttonState = 0;
-
-    PointerProperties pointerProperties;
-    pointerProperties.clear();
-    pointerProperties.id = 0;
-    pointerProperties.toolType = AMOTION_EVENT_TOOL_TYPE_UNKNOWN;
-
-    PointerCoords pointerCoords;
-    pointerCoords.clear();
-
-    size_t numAxes = mAxes.size();
-    for (size_t i = 0; i < numAxes; i++) {
-        const Axis& axis = mAxes.valueAt(i);
-        setPointerCoordsAxisValue(&pointerCoords, axis.axisInfo.axis, axis.currentValue);
-        if (axis.axisInfo.mode == AxisInfo::MODE_SPLIT) {
-            setPointerCoordsAxisValue(&pointerCoords, axis.axisInfo.highAxis,
-                    axis.highCurrentValue);
-        }
-    }
-
-    // Moving a joystick axis should not wake the device because joysticks can
-    // be fairly noisy even when not in use.  On the other hand, pushing a gamepad
-    // button will likely wake the device.
-    // TODO: Use the input device configuration to control this behavior more finely.
-    uint32_t policyFlags = 0;
-
-    NotifyMotionArgs args(when, getDeviceId(), AINPUT_SOURCE_JOYSTICK, policyFlags,
-            AMOTION_EVENT_ACTION_MOVE, 0, metaState, buttonState, AMOTION_EVENT_EDGE_FLAG_NONE,
-            ADISPLAY_ID_NONE, 1, &pointerProperties, &pointerCoords, 0, 0, 0);
-    getListener()->notifyMotion(&args);
-}
-
-void JoystickInputMapper::setPointerCoordsAxisValue(PointerCoords* pointerCoords,
-        int32_t axis, float value) {
-    pointerCoords->setAxisValue(axis, value);
-    /* In order to ease the transition for developers from using the old axes
-     * to the newer, more semantically correct axes, we'll continue to produce
-     * values for the old axes as mirrors of the value of their corresponding
-     * new axes. */
-    int32_t compatAxis = getCompatAxis(axis);
-    if (compatAxis >= 0) {
-        pointerCoords->setAxisValue(compatAxis, value);
-    }
-}
-
-bool JoystickInputMapper::filterAxes(bool force) {
-    bool atLeastOneSignificantChange = force;
-    size_t numAxes = mAxes.size();
-    for (size_t i = 0; i < numAxes; i++) {
-        Axis& axis = mAxes.editValueAt(i);
-        if (force || hasValueChangedSignificantly(axis.filter,
-                axis.newValue, axis.currentValue, axis.min, axis.max)) {
-            axis.currentValue = axis.newValue;
-            atLeastOneSignificantChange = true;
-        }
-        if (axis.axisInfo.mode == AxisInfo::MODE_SPLIT) {
-            if (force || hasValueChangedSignificantly(axis.filter,
-                    axis.highNewValue, axis.highCurrentValue, axis.min, axis.max)) {
-                axis.highCurrentValue = axis.highNewValue;
-                atLeastOneSignificantChange = true;
-            }
-        }
-    }
-    return atLeastOneSignificantChange;
-}
-
-bool JoystickInputMapper::hasValueChangedSignificantly(
-        float filter, float newValue, float currentValue, float min, float max) {
-    if (newValue != currentValue) {
-        // Filter out small changes in value unless the value is converging on the axis
-        // bounds or center point.  This is intended to reduce the amount of information
-        // sent to applications by particularly noisy joysticks (such as PS3).
-        if (fabs(newValue - currentValue) > filter
-                || hasMovedNearerToValueWithinFilteredRange(filter, newValue, currentValue, min)
-                || hasMovedNearerToValueWithinFilteredRange(filter, newValue, currentValue, max)
-                || hasMovedNearerToValueWithinFilteredRange(filter, newValue, currentValue, 0)) {
-            return true;
-        }
-    }
-    return false;
-}
-
-bool JoystickInputMapper::hasMovedNearerToValueWithinFilteredRange(
-        float filter, float newValue, float currentValue, float thresholdValue) {
-    float newDistance = fabs(newValue - thresholdValue);
-    if (newDistance < filter) {
-        float oldDistance = fabs(currentValue - thresholdValue);
-        if (newDistance < oldDistance) {
-            return true;
-        }
-    }
-    return false;
-}
-
-} // namespace android
diff --git a/libs/input/InputReader.h b/libs/input/InputReader.h
deleted file mode 100644
index c90d483..0000000
--- a/libs/input/InputReader.h
+++ /dev/null
@@ -1,1820 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#ifndef _UI_INPUT_READER_H
-#define _UI_INPUT_READER_H
-
-#include "EventHub.h"
-#include "PointerController.h"
-#include "InputListener.h"
-
-#include <input/Input.h>
-#include <input/VelocityControl.h>
-#include <input/VelocityTracker.h>
-#include <utils/KeyedVector.h>
-#include <utils/threads.h>
-#include <utils/Timers.h>
-#include <utils/RefBase.h>
-#include <utils/String8.h>
-#include <utils/BitSet.h>
-
-#include <stddef.h>
-#include <unistd.h>
-
-// Maximum supported size of a vibration pattern.
-// Must be at least 2.
-#define MAX_VIBRATE_PATTERN_SIZE 100
-
-// Maximum allowable delay value in a vibration pattern before
-// which the delay will be truncated.
-#define MAX_VIBRATE_PATTERN_DELAY_NSECS (1000000 * 1000000000LL)
-
-namespace android {
-
-class InputDevice;
-class InputMapper;
-
-/*
- * Describes how coordinates are mapped on a physical display.
- * See com.android.server.display.DisplayViewport.
- */
-struct DisplayViewport {
-    int32_t displayId; // -1 if invalid
-    int32_t orientation;
-    int32_t logicalLeft;
-    int32_t logicalTop;
-    int32_t logicalRight;
-    int32_t logicalBottom;
-    int32_t physicalLeft;
-    int32_t physicalTop;
-    int32_t physicalRight;
-    int32_t physicalBottom;
-    int32_t deviceWidth;
-    int32_t deviceHeight;
-
-    DisplayViewport() :
-            displayId(ADISPLAY_ID_NONE), orientation(DISPLAY_ORIENTATION_0),
-            logicalLeft(0), logicalTop(0), logicalRight(0), logicalBottom(0),
-            physicalLeft(0), physicalTop(0), physicalRight(0), physicalBottom(0),
-            deviceWidth(0), deviceHeight(0) {
-    }
-
-    bool operator==(const DisplayViewport& other) const {
-        return displayId == other.displayId
-                && orientation == other.orientation
-                && logicalLeft == other.logicalLeft
-                && logicalTop == other.logicalTop
-                && logicalRight == other.logicalRight
-                && logicalBottom == other.logicalBottom
-                && physicalLeft == other.physicalLeft
-                && physicalTop == other.physicalTop
-                && physicalRight == other.physicalRight
-                && physicalBottom == other.physicalBottom
-                && deviceWidth == other.deviceWidth
-                && deviceHeight == other.deviceHeight;
-    }
-
-    bool operator!=(const DisplayViewport& other) const {
-        return !(*this == other);
-    }
-
-    inline bool isValid() const {
-        return displayId >= 0;
-    }
-
-    void setNonDisplayViewport(int32_t width, int32_t height) {
-        displayId = ADISPLAY_ID_NONE;
-        orientation = DISPLAY_ORIENTATION_0;
-        logicalLeft = 0;
-        logicalTop = 0;
-        logicalRight = width;
-        logicalBottom = height;
-        physicalLeft = 0;
-        physicalTop = 0;
-        physicalRight = width;
-        physicalBottom = height;
-        deviceWidth = width;
-        deviceHeight = height;
-    }
-};
-
-/*
- * Input reader configuration.
- *
- * Specifies various options that modify the behavior of the input reader.
- */
-struct InputReaderConfiguration {
-    // Describes changes that have occurred.
-    enum {
-        // The pointer speed changed.
-        CHANGE_POINTER_SPEED = 1 << 0,
-
-        // The pointer gesture control changed.
-        CHANGE_POINTER_GESTURE_ENABLEMENT = 1 << 1,
-
-        // The display size or orientation changed.
-        CHANGE_DISPLAY_INFO = 1 << 2,
-
-        // The visible touches option changed.
-        CHANGE_SHOW_TOUCHES = 1 << 3,
-
-        // The keyboard layouts must be reloaded.
-        CHANGE_KEYBOARD_LAYOUTS = 1 << 4,
-
-        // The device name alias supplied by the may have changed for some devices.
-        CHANGE_DEVICE_ALIAS = 1 << 5,
-
-        // All devices must be reopened.
-        CHANGE_MUST_REOPEN = 1 << 31,
-    };
-
-    // Gets the amount of time to disable virtual keys after the screen is touched
-    // in order to filter out accidental virtual key presses due to swiping gestures
-    // or taps near the edge of the display.  May be 0 to disable the feature.
-    nsecs_t virtualKeyQuietTime;
-
-    // The excluded device names for the platform.
-    // Devices with these names will be ignored.
-    Vector<String8> excludedDeviceNames;
-
-    // Velocity control parameters for mouse pointer movements.
-    VelocityControlParameters pointerVelocityControlParameters;
-
-    // Velocity control parameters for mouse wheel movements.
-    VelocityControlParameters wheelVelocityControlParameters;
-
-    // True if pointer gestures are enabled.
-    bool pointerGesturesEnabled;
-
-    // Quiet time between certain pointer gesture transitions.
-    // Time to allow for all fingers or buttons to settle into a stable state before
-    // starting a new gesture.
-    nsecs_t pointerGestureQuietInterval;
-
-    // The minimum speed that a pointer must travel for us to consider switching the active
-    // touch pointer to it during a drag.  This threshold is set to avoid switching due
-    // to noise from a finger resting on the touch pad (perhaps just pressing it down).
-    float pointerGestureDragMinSwitchSpeed; // in pixels per second
-
-    // Tap gesture delay time.
-    // The time between down and up must be less than this to be considered a tap.
-    nsecs_t pointerGestureTapInterval;
-
-    // Tap drag gesture delay time.
-    // The time between the previous tap's up and the next down must be less than
-    // this to be considered a drag.  Otherwise, the previous tap is finished and a
-    // new tap begins.
-    //
-    // Note that the previous tap will be held down for this entire duration so this
-    // interval must be shorter than the long press timeout.
-    nsecs_t pointerGestureTapDragInterval;
-
-    // The distance in pixels that the pointer is allowed to move from initial down
-    // to up and still be called a tap.
-    float pointerGestureTapSlop; // in pixels
-
-    // Time after the first touch points go down to settle on an initial centroid.
-    // This is intended to be enough time to handle cases where the user puts down two
-    // fingers at almost but not quite exactly the same time.
-    nsecs_t pointerGestureMultitouchSettleInterval;
-
-    // The transition from PRESS to SWIPE or FREEFORM gesture mode is made when
-    // at least two pointers have moved at least this far from their starting place.
-    float pointerGestureMultitouchMinDistance; // in pixels
-
-    // The transition from PRESS to SWIPE gesture mode can only occur when the
-    // cosine of the angle between the two vectors is greater than or equal to than this value
-    // which indicates that the vectors are oriented in the same direction.
-    // When the vectors are oriented in the exactly same direction, the cosine is 1.0.
-    // (In exactly opposite directions, the cosine is -1.0.)
-    float pointerGestureSwipeTransitionAngleCosine;
-
-    // The transition from PRESS to SWIPE gesture mode can only occur when the
-    // fingers are no more than this far apart relative to the diagonal size of
-    // the touch pad.  For example, a ratio of 0.5 means that the fingers must be
-    // no more than half the diagonal size of the touch pad apart.
-    float pointerGestureSwipeMaxWidthRatio;
-
-    // The gesture movement speed factor relative to the size of the display.
-    // Movement speed applies when the fingers are moving in the same direction.
-    // Without acceleration, a full swipe of the touch pad diagonal in movement mode
-    // will cover this portion of the display diagonal.
-    float pointerGestureMovementSpeedRatio;
-
-    // The gesture zoom speed factor relative to the size of the display.
-    // Zoom speed applies when the fingers are mostly moving relative to each other
-    // to execute a scale gesture or similar.
-    // Without acceleration, a full swipe of the touch pad diagonal in zoom mode
-    // will cover this portion of the display diagonal.
-    float pointerGestureZoomSpeedRatio;
-
-    // True to show the location of touches on the touch screen as spots.
-    bool showTouches;
-
-    InputReaderConfiguration() :
-            virtualKeyQuietTime(0),
-            pointerVelocityControlParameters(1.0f, 500.0f, 3000.0f, 3.0f),
-            wheelVelocityControlParameters(1.0f, 15.0f, 50.0f, 4.0f),
-            pointerGesturesEnabled(true),
-            pointerGestureQuietInterval(100 * 1000000LL), // 100 ms
-            pointerGestureDragMinSwitchSpeed(50), // 50 pixels per second
-            pointerGestureTapInterval(150 * 1000000LL), // 150 ms
-            pointerGestureTapDragInterval(150 * 1000000LL), // 150 ms
-            pointerGestureTapSlop(10.0f), // 10 pixels
-            pointerGestureMultitouchSettleInterval(100 * 1000000LL), // 100 ms
-            pointerGestureMultitouchMinDistance(15), // 15 pixels
-            pointerGestureSwipeTransitionAngleCosine(0.2588f), // cosine of 75 degrees
-            pointerGestureSwipeMaxWidthRatio(0.25f),
-            pointerGestureMovementSpeedRatio(0.8f),
-            pointerGestureZoomSpeedRatio(0.3f),
-            showTouches(false) { }
-
-    bool getDisplayInfo(bool external, DisplayViewport* outViewport) const;
-    void setDisplayInfo(bool external, const DisplayViewport& viewport);
-
-private:
-    DisplayViewport mInternalDisplay;
-    DisplayViewport mExternalDisplay;
-};
-
-
-/*
- * Input reader policy interface.
- *
- * The input reader policy is used by the input reader to interact with the Window Manager
- * and other system components.
- *
- * The actual implementation is partially supported by callbacks into the DVM
- * via JNI.  This interface is also mocked in the unit tests.
- *
- * These methods must NOT re-enter the input reader since they may be called while
- * holding the input reader lock.
- */
-class InputReaderPolicyInterface : public virtual RefBase {
-protected:
-    InputReaderPolicyInterface() { }
-    virtual ~InputReaderPolicyInterface() { }
-
-public:
-    /* Gets the input reader configuration. */
-    virtual void getReaderConfiguration(InputReaderConfiguration* outConfig) = 0;
-
-    /* Gets a pointer controller associated with the specified cursor device (ie. a mouse). */
-    virtual sp<PointerControllerInterface> obtainPointerController(int32_t deviceId) = 0;
-
-    /* Notifies the input reader policy that some input devices have changed
-     * and provides information about all current input devices.
-     */
-    virtual void notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices) = 0;
-
-    /* Gets the keyboard layout for a particular input device. */
-    virtual sp<KeyCharacterMap> getKeyboardLayoutOverlay(
-            const InputDeviceIdentifier& identifier) = 0;
-
-    /* Gets a user-supplied alias for a particular input device, or an empty string if none. */
-    virtual String8 getDeviceAlias(const InputDeviceIdentifier& identifier) = 0;
-};
-
-
-/* Processes raw input events and sends cooked event data to an input listener. */
-class InputReaderInterface : public virtual RefBase {
-protected:
-    InputReaderInterface() { }
-    virtual ~InputReaderInterface() { }
-
-public:
-    /* Dumps the state of the input reader.
-     *
-     * This method may be called on any thread (usually by the input manager). */
-    virtual void dump(String8& dump) = 0;
-
-    /* Called by the heatbeat to ensures that the reader has not deadlocked. */
-    virtual void monitor() = 0;
-
-    /* Runs a single iteration of the processing loop.
-     * Nominally reads and processes one incoming message from the EventHub.
-     *
-     * This method should be called on the input reader thread.
-     */
-    virtual void loopOnce() = 0;
-
-    /* Gets information about all input devices.
-     *
-     * This method may be called on any thread (usually by the input manager).
-     */
-    virtual void getInputDevices(Vector<InputDeviceInfo>& outInputDevices) = 0;
-
-    /* Query current input state. */
-    virtual int32_t getScanCodeState(int32_t deviceId, uint32_t sourceMask,
-            int32_t scanCode) = 0;
-    virtual int32_t getKeyCodeState(int32_t deviceId, uint32_t sourceMask,
-            int32_t keyCode) = 0;
-    virtual int32_t getSwitchState(int32_t deviceId, uint32_t sourceMask,
-            int32_t sw) = 0;
-
-    /* Determine whether physical keys exist for the given framework-domain key codes. */
-    virtual bool hasKeys(int32_t deviceId, uint32_t sourceMask,
-            size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags) = 0;
-
-    /* Requests that a reconfiguration of all input devices.
-     * The changes flag is a bitfield that indicates what has changed and whether
-     * the input devices must all be reopened. */
-    virtual void requestRefreshConfiguration(uint32_t changes) = 0;
-
-    /* Controls the vibrator of a particular input device. */
-    virtual void vibrate(int32_t deviceId, const nsecs_t* pattern, size_t patternSize,
-            ssize_t repeat, int32_t token) = 0;
-    virtual void cancelVibrate(int32_t deviceId, int32_t token) = 0;
-};
-
-
-/* Internal interface used by individual input devices to access global input device state
- * and parameters maintained by the input reader.
- */
-class InputReaderContext {
-public:
-    InputReaderContext() { }
-    virtual ~InputReaderContext() { }
-
-    virtual void updateGlobalMetaState() = 0;
-    virtual int32_t getGlobalMetaState() = 0;
-
-    virtual void disableVirtualKeysUntil(nsecs_t time) = 0;
-    virtual bool shouldDropVirtualKey(nsecs_t now,
-            InputDevice* device, int32_t keyCode, int32_t scanCode) = 0;
-
-    virtual void fadePointer() = 0;
-
-    virtual void requestTimeoutAtTime(nsecs_t when) = 0;
-    virtual int32_t bumpGeneration() = 0;
-
-    virtual InputReaderPolicyInterface* getPolicy() = 0;
-    virtual InputListenerInterface* getListener() = 0;
-    virtual EventHubInterface* getEventHub() = 0;
-};
-
-
-/* The input reader reads raw event data from the event hub and processes it into input events
- * that it sends to the input listener.  Some functions of the input reader, such as early
- * event filtering in low power states, are controlled by a separate policy object.
- *
- * The InputReader owns a collection of InputMappers.  Most of the work it does happens
- * on the input reader thread but the InputReader can receive queries from other system
- * components running on arbitrary threads.  To keep things manageable, the InputReader
- * uses a single Mutex to guard its state.  The Mutex may be held while calling into the
- * EventHub or the InputReaderPolicy but it is never held while calling into the
- * InputListener.
- */
-class InputReader : public InputReaderInterface {
-public:
-    InputReader(const sp<EventHubInterface>& eventHub,
-            const sp<InputReaderPolicyInterface>& policy,
-            const sp<InputListenerInterface>& listener);
-    virtual ~InputReader();
-
-    virtual void dump(String8& dump);
-    virtual void monitor();
-
-    virtual void loopOnce();
-
-    virtual void getInputDevices(Vector<InputDeviceInfo>& outInputDevices);
-
-    virtual int32_t getScanCodeState(int32_t deviceId, uint32_t sourceMask,
-            int32_t scanCode);
-    virtual int32_t getKeyCodeState(int32_t deviceId, uint32_t sourceMask,
-            int32_t keyCode);
-    virtual int32_t getSwitchState(int32_t deviceId, uint32_t sourceMask,
-            int32_t sw);
-
-    virtual bool hasKeys(int32_t deviceId, uint32_t sourceMask,
-            size_t numCodes, const int32_t* keyCodes, uint8_t* outFlags);
-
-    virtual void requestRefreshConfiguration(uint32_t changes);
-
-    virtual void vibrate(int32_t deviceId, const nsecs_t* pattern, size_t patternSize,
-            ssize_t repeat, int32_t token);
-    virtual void cancelVibrate(int32_t deviceId, int32_t token);
-
-protected:
-    // These members are protected so they can be instrumented by test cases.
-    virtual InputDevice* createDeviceLocked(int32_t deviceId, int32_t controllerNumber,
-            const InputDeviceIdentifier& identifier, uint32_t classes);
-
-    class ContextImpl : public InputReaderContext {
-        InputReader* mReader;
-
-    public:
-        ContextImpl(InputReader* reader);
-
-        virtual void updateGlobalMetaState();
-        virtual int32_t getGlobalMetaState();
-        virtual void disableVirtualKeysUntil(nsecs_t time);
-        virtual bool shouldDropVirtualKey(nsecs_t now,
-                InputDevice* device, int32_t keyCode, int32_t scanCode);
-        virtual void fadePointer();
-        virtual void requestTimeoutAtTime(nsecs_t when);
-        virtual int32_t bumpGeneration();
-        virtual InputReaderPolicyInterface* getPolicy();
-        virtual InputListenerInterface* getListener();
-        virtual EventHubInterface* getEventHub();
-    } mContext;
-
-    friend class ContextImpl;
-
-private:
-    Mutex mLock;
-
-    Condition mReaderIsAliveCondition;
-
-    sp<EventHubInterface> mEventHub;
-    sp<InputReaderPolicyInterface> mPolicy;
-    sp<QueuedInputListener> mQueuedListener;
-
-    InputReaderConfiguration mConfig;
-
-    // The event queue.
-    static const int EVENT_BUFFER_SIZE = 256;
-    RawEvent mEventBuffer[EVENT_BUFFER_SIZE];
-
-    KeyedVector<int32_t, InputDevice*> mDevices;
-
-    // low-level input event decoding and device management
-    void processEventsLocked(const RawEvent* rawEvents, size_t count);
-
-    void addDeviceLocked(nsecs_t when, int32_t deviceId);
-    void removeDeviceLocked(nsecs_t when, int32_t deviceId);
-    void processEventsForDeviceLocked(int32_t deviceId, const RawEvent* rawEvents, size_t count);
-    void timeoutExpiredLocked(nsecs_t when);
-
-    void handleConfigurationChangedLocked(nsecs_t when);
-
-    int32_t mGlobalMetaState;
-    void updateGlobalMetaStateLocked();
-    int32_t getGlobalMetaStateLocked();
-
-    void fadePointerLocked();
-
-    int32_t mGeneration;
-    int32_t bumpGenerationLocked();
-
-    void getInputDevicesLocked(Vector<InputDeviceInfo>& outInputDevices);
-
-    nsecs_t mDisableVirtualKeysTimeout;
-    void disableVirtualKeysUntilLocked(nsecs_t time);
-    bool shouldDropVirtualKeyLocked(nsecs_t now,
-            InputDevice* device, int32_t keyCode, int32_t scanCode);
-
-    nsecs_t mNextTimeout;
-    void requestTimeoutAtTimeLocked(nsecs_t when);
-
-    uint32_t mConfigurationChangesToRefresh;
-    void refreshConfigurationLocked(uint32_t changes);
-
-    // state queries
-    typedef int32_t (InputDevice::*GetStateFunc)(uint32_t sourceMask, int32_t code);
-    int32_t getStateLocked(int32_t deviceId, uint32_t sourceMask, int32_t code,
-            GetStateFunc getStateFunc);
-    bool markSupportedKeyCodesLocked(int32_t deviceId, uint32_t sourceMask, size_t numCodes,
-            const int32_t* keyCodes, uint8_t* outFlags);
-};
-
-
-/* Reads raw events from the event hub and processes them, endlessly. */
-class InputReaderThread : public Thread {
-public:
-    InputReaderThread(const sp<InputReaderInterface>& reader);
-    virtual ~InputReaderThread();
-
-private:
-    sp<InputReaderInterface> mReader;
-
-    virtual bool threadLoop();
-};
-
-
-/* Represents the state of a single input device. */
-class InputDevice {
-public:
-    InputDevice(InputReaderContext* context, int32_t id, int32_t generation, int32_t
-            controllerNumber, const InputDeviceIdentifier& identifier, uint32_t classes);
-    ~InputDevice();
-
-    inline InputReaderContext* getContext() { return mContext; }
-    inline int32_t getId() const { return mId; }
-    inline int32_t getControllerNumber() const { return mControllerNumber; }
-    inline int32_t getGeneration() const { return mGeneration; }
-    inline const String8& getName() const { return mIdentifier.name; }
-    inline uint32_t getClasses() const { return mClasses; }
-    inline uint32_t getSources() const { return mSources; }
-
-    inline bool isExternal() { return mIsExternal; }
-    inline void setExternal(bool external) { mIsExternal = external; }
-
-    inline bool isIgnored() { return mMappers.isEmpty(); }
-
-    void dump(String8& dump);
-    void addMapper(InputMapper* mapper);
-    void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
-    void reset(nsecs_t when);
-    void process(const RawEvent* rawEvents, size_t count);
-    void timeoutExpired(nsecs_t when);
-
-    void getDeviceInfo(InputDeviceInfo* outDeviceInfo);
-    int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode);
-    int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
-    int32_t getSwitchState(uint32_t sourceMask, int32_t switchCode);
-    bool markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-            const int32_t* keyCodes, uint8_t* outFlags);
-    void vibrate(const nsecs_t* pattern, size_t patternSize, ssize_t repeat, int32_t token);
-    void cancelVibrate(int32_t token);
-
-    int32_t getMetaState();
-
-    void fadePointer();
-
-    void bumpGeneration();
-
-    void notifyReset(nsecs_t when);
-
-    inline const PropertyMap& getConfiguration() { return mConfiguration; }
-    inline EventHubInterface* getEventHub() { return mContext->getEventHub(); }
-
-    bool hasKey(int32_t code) {
-        return getEventHub()->hasScanCode(mId, code);
-    }
-
-    bool hasAbsoluteAxis(int32_t code) {
-        RawAbsoluteAxisInfo info;
-        getEventHub()->getAbsoluteAxisInfo(mId, code, &info);
-        return info.valid;
-    }
-
-    bool isKeyPressed(int32_t code) {
-        return getEventHub()->getScanCodeState(mId, code) == AKEY_STATE_DOWN;
-    }
-
-    int32_t getAbsoluteAxisValue(int32_t code) {
-        int32_t value;
-        getEventHub()->getAbsoluteAxisValue(mId, code, &value);
-        return value;
-    }
-
-private:
-    InputReaderContext* mContext;
-    int32_t mId;
-    int32_t mControllerNumber;
-    int32_t mGeneration;
-    InputDeviceIdentifier mIdentifier;
-    String8 mAlias;
-    uint32_t mClasses;
-
-    Vector<InputMapper*> mMappers;
-
-    uint32_t mSources;
-    bool mIsExternal;
-    bool mDropUntilNextSync;
-
-    typedef int32_t (InputMapper::*GetStateFunc)(uint32_t sourceMask, int32_t code);
-    int32_t getState(uint32_t sourceMask, int32_t code, GetStateFunc getStateFunc);
-
-    PropertyMap mConfiguration;
-};
-
-
-/* Keeps track of the state of mouse or touch pad buttons. */
-class CursorButtonAccumulator {
-public:
-    CursorButtonAccumulator();
-    void reset(InputDevice* device);
-
-    void process(const RawEvent* rawEvent);
-
-    uint32_t getButtonState() const;
-
-private:
-    bool mBtnLeft;
-    bool mBtnRight;
-    bool mBtnMiddle;
-    bool mBtnBack;
-    bool mBtnSide;
-    bool mBtnForward;
-    bool mBtnExtra;
-    bool mBtnTask;
-
-    void clearButtons();
-};
-
-
-/* Keeps track of cursor movements. */
-
-class CursorMotionAccumulator {
-public:
-    CursorMotionAccumulator();
-    void reset(InputDevice* device);
-
-    void process(const RawEvent* rawEvent);
-    void finishSync();
-
-    inline int32_t getRelativeX() const { return mRelX; }
-    inline int32_t getRelativeY() const { return mRelY; }
-
-private:
-    int32_t mRelX;
-    int32_t mRelY;
-
-    void clearRelativeAxes();
-};
-
-
-/* Keeps track of cursor scrolling motions. */
-
-class CursorScrollAccumulator {
-public:
-    CursorScrollAccumulator();
-    void configure(InputDevice* device);
-    void reset(InputDevice* device);
-
-    void process(const RawEvent* rawEvent);
-    void finishSync();
-
-    inline bool haveRelativeVWheel() const { return mHaveRelWheel; }
-    inline bool haveRelativeHWheel() const { return mHaveRelHWheel; }
-
-    inline int32_t getRelativeX() const { return mRelX; }
-    inline int32_t getRelativeY() const { return mRelY; }
-    inline int32_t getRelativeVWheel() const { return mRelWheel; }
-    inline int32_t getRelativeHWheel() const { return mRelHWheel; }
-
-private:
-    bool mHaveRelWheel;
-    bool mHaveRelHWheel;
-
-    int32_t mRelX;
-    int32_t mRelY;
-    int32_t mRelWheel;
-    int32_t mRelHWheel;
-
-    void clearRelativeAxes();
-};
-
-
-/* Keeps track of the state of touch, stylus and tool buttons. */
-class TouchButtonAccumulator {
-public:
-    TouchButtonAccumulator();
-    void configure(InputDevice* device);
-    void reset(InputDevice* device);
-
-    void process(const RawEvent* rawEvent);
-
-    uint32_t getButtonState() const;
-    int32_t getToolType() const;
-    bool isToolActive() const;
-    bool isHovering() const;
-    bool hasStylus() const;
-
-private:
-    bool mHaveBtnTouch;
-    bool mHaveStylus;
-
-    bool mBtnTouch;
-    bool mBtnStylus;
-    bool mBtnStylus2;
-    bool mBtnToolFinger;
-    bool mBtnToolPen;
-    bool mBtnToolRubber;
-    bool mBtnToolBrush;
-    bool mBtnToolPencil;
-    bool mBtnToolAirbrush;
-    bool mBtnToolMouse;
-    bool mBtnToolLens;
-    bool mBtnToolDoubleTap;
-    bool mBtnToolTripleTap;
-    bool mBtnToolQuadTap;
-
-    void clearButtons();
-};
-
-
-/* Raw axis information from the driver. */
-struct RawPointerAxes {
-    RawAbsoluteAxisInfo x;
-    RawAbsoluteAxisInfo y;
-    RawAbsoluteAxisInfo pressure;
-    RawAbsoluteAxisInfo touchMajor;
-    RawAbsoluteAxisInfo touchMinor;
-    RawAbsoluteAxisInfo toolMajor;
-    RawAbsoluteAxisInfo toolMinor;
-    RawAbsoluteAxisInfo orientation;
-    RawAbsoluteAxisInfo distance;
-    RawAbsoluteAxisInfo tiltX;
-    RawAbsoluteAxisInfo tiltY;
-    RawAbsoluteAxisInfo trackingId;
-    RawAbsoluteAxisInfo slot;
-
-    RawPointerAxes();
-    void clear();
-};
-
-
-/* Raw data for a collection of pointers including a pointer id mapping table. */
-struct RawPointerData {
-    struct Pointer {
-        uint32_t id;
-        int32_t x;
-        int32_t y;
-        int32_t pressure;
-        int32_t touchMajor;
-        int32_t touchMinor;
-        int32_t toolMajor;
-        int32_t toolMinor;
-        int32_t orientation;
-        int32_t distance;
-        int32_t tiltX;
-        int32_t tiltY;
-        int32_t toolType; // a fully decoded AMOTION_EVENT_TOOL_TYPE constant
-        bool isHovering;
-    };
-
-    uint32_t pointerCount;
-    Pointer pointers[MAX_POINTERS];
-    BitSet32 hoveringIdBits, touchingIdBits;
-    uint32_t idToIndex[MAX_POINTER_ID + 1];
-
-    RawPointerData();
-    void clear();
-    void copyFrom(const RawPointerData& other);
-    void getCentroidOfTouchingPointers(float* outX, float* outY) const;
-
-    inline void markIdBit(uint32_t id, bool isHovering) {
-        if (isHovering) {
-            hoveringIdBits.markBit(id);
-        } else {
-            touchingIdBits.markBit(id);
-        }
-    }
-
-    inline void clearIdBits() {
-        hoveringIdBits.clear();
-        touchingIdBits.clear();
-    }
-
-    inline const Pointer& pointerForId(uint32_t id) const {
-        return pointers[idToIndex[id]];
-    }
-
-    inline bool isHovering(uint32_t pointerIndex) {
-        return pointers[pointerIndex].isHovering;
-    }
-};
-
-
-/* Cooked data for a collection of pointers including a pointer id mapping table. */
-struct CookedPointerData {
-    uint32_t pointerCount;
-    PointerProperties pointerProperties[MAX_POINTERS];
-    PointerCoords pointerCoords[MAX_POINTERS];
-    BitSet32 hoveringIdBits, touchingIdBits;
-    uint32_t idToIndex[MAX_POINTER_ID + 1];
-
-    CookedPointerData();
-    void clear();
-    void copyFrom(const CookedPointerData& other);
-
-    inline const PointerCoords& pointerCoordsForId(uint32_t id) const {
-        return pointerCoords[idToIndex[id]];
-    }
-
-    inline bool isHovering(uint32_t pointerIndex) {
-        return hoveringIdBits.hasBit(pointerProperties[pointerIndex].id);
-    }
-};
-
-
-/* Keeps track of the state of single-touch protocol. */
-class SingleTouchMotionAccumulator {
-public:
-    SingleTouchMotionAccumulator();
-
-    void process(const RawEvent* rawEvent);
-    void reset(InputDevice* device);
-
-    inline int32_t getAbsoluteX() const { return mAbsX; }
-    inline int32_t getAbsoluteY() const { return mAbsY; }
-    inline int32_t getAbsolutePressure() const { return mAbsPressure; }
-    inline int32_t getAbsoluteToolWidth() const { return mAbsToolWidth; }
-    inline int32_t getAbsoluteDistance() const { return mAbsDistance; }
-    inline int32_t getAbsoluteTiltX() const { return mAbsTiltX; }
-    inline int32_t getAbsoluteTiltY() const { return mAbsTiltY; }
-
-private:
-    int32_t mAbsX;
-    int32_t mAbsY;
-    int32_t mAbsPressure;
-    int32_t mAbsToolWidth;
-    int32_t mAbsDistance;
-    int32_t mAbsTiltX;
-    int32_t mAbsTiltY;
-
-    void clearAbsoluteAxes();
-};
-
-
-/* Keeps track of the state of multi-touch protocol. */
-class MultiTouchMotionAccumulator {
-public:
-    class Slot {
-    public:
-        inline bool isInUse() const { return mInUse; }
-        inline int32_t getX() const { return mAbsMTPositionX; }
-        inline int32_t getY() const { return mAbsMTPositionY; }
-        inline int32_t getTouchMajor() const { return mAbsMTTouchMajor; }
-        inline int32_t getTouchMinor() const {
-            return mHaveAbsMTTouchMinor ? mAbsMTTouchMinor : mAbsMTTouchMajor; }
-        inline int32_t getToolMajor() const { return mAbsMTWidthMajor; }
-        inline int32_t getToolMinor() const {
-            return mHaveAbsMTWidthMinor ? mAbsMTWidthMinor : mAbsMTWidthMajor; }
-        inline int32_t getOrientation() const { return mAbsMTOrientation; }
-        inline int32_t getTrackingId() const { return mAbsMTTrackingId; }
-        inline int32_t getPressure() const { return mAbsMTPressure; }
-        inline int32_t getDistance() const { return mAbsMTDistance; }
-        inline int32_t getToolType() const;
-
-    private:
-        friend class MultiTouchMotionAccumulator;
-
-        bool mInUse;
-        bool mHaveAbsMTTouchMinor;
-        bool mHaveAbsMTWidthMinor;
-        bool mHaveAbsMTToolType;
-
-        int32_t mAbsMTPositionX;
-        int32_t mAbsMTPositionY;
-        int32_t mAbsMTTouchMajor;
-        int32_t mAbsMTTouchMinor;
-        int32_t mAbsMTWidthMajor;
-        int32_t mAbsMTWidthMinor;
-        int32_t mAbsMTOrientation;
-        int32_t mAbsMTTrackingId;
-        int32_t mAbsMTPressure;
-        int32_t mAbsMTDistance;
-        int32_t mAbsMTToolType;
-
-        Slot();
-        void clear();
-    };
-
-    MultiTouchMotionAccumulator();
-    ~MultiTouchMotionAccumulator();
-
-    void configure(InputDevice* device, size_t slotCount, bool usingSlotsProtocol);
-    void reset(InputDevice* device);
-    void process(const RawEvent* rawEvent);
-    void finishSync();
-    bool hasStylus() const;
-
-    inline size_t getSlotCount() const { return mSlotCount; }
-    inline const Slot* getSlot(size_t index) const { return &mSlots[index]; }
-
-private:
-    int32_t mCurrentSlot;
-    Slot* mSlots;
-    size_t mSlotCount;
-    bool mUsingSlotsProtocol;
-    bool mHaveStylus;
-
-    void clearSlots(int32_t initialSlot);
-};
-
-
-/* An input mapper transforms raw input events into cooked event data.
- * A single input device can have multiple associated input mappers in order to interpret
- * different classes of events.
- *
- * InputMapper lifecycle:
- * - create
- * - configure with 0 changes
- * - reset
- * - process, process, process (may occasionally reconfigure with non-zero changes or reset)
- * - reset
- * - destroy
- */
-class InputMapper {
-public:
-    InputMapper(InputDevice* device);
-    virtual ~InputMapper();
-
-    inline InputDevice* getDevice() { return mDevice; }
-    inline int32_t getDeviceId() { return mDevice->getId(); }
-    inline const String8 getDeviceName() { return mDevice->getName(); }
-    inline InputReaderContext* getContext() { return mContext; }
-    inline InputReaderPolicyInterface* getPolicy() { return mContext->getPolicy(); }
-    inline InputListenerInterface* getListener() { return mContext->getListener(); }
-    inline EventHubInterface* getEventHub() { return mContext->getEventHub(); }
-
-    virtual uint32_t getSources() = 0;
-    virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
-    virtual void dump(String8& dump);
-    virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
-    virtual void reset(nsecs_t when);
-    virtual void process(const RawEvent* rawEvent) = 0;
-    virtual void timeoutExpired(nsecs_t when);
-
-    virtual int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode);
-    virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
-    virtual int32_t getSwitchState(uint32_t sourceMask, int32_t switchCode);
-    virtual bool markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-            const int32_t* keyCodes, uint8_t* outFlags);
-    virtual void vibrate(const nsecs_t* pattern, size_t patternSize, ssize_t repeat,
-            int32_t token);
-    virtual void cancelVibrate(int32_t token);
-
-    virtual int32_t getMetaState();
-
-    virtual void fadePointer();
-
-protected:
-    InputDevice* mDevice;
-    InputReaderContext* mContext;
-
-    status_t getAbsoluteAxisInfo(int32_t axis, RawAbsoluteAxisInfo* axisInfo);
-    void bumpGeneration();
-
-    static void dumpRawAbsoluteAxisInfo(String8& dump,
-            const RawAbsoluteAxisInfo& axis, const char* name);
-};
-
-
-class SwitchInputMapper : public InputMapper {
-public:
-    SwitchInputMapper(InputDevice* device);
-    virtual ~SwitchInputMapper();
-
-    virtual uint32_t getSources();
-    virtual void process(const RawEvent* rawEvent);
-
-    virtual int32_t getSwitchState(uint32_t sourceMask, int32_t switchCode);
-
-private:
-    uint32_t mUpdatedSwitchValues;
-    uint32_t mUpdatedSwitchMask;
-
-    void processSwitch(int32_t switchCode, int32_t switchValue);
-    void sync(nsecs_t when);
-};
-
-
-class VibratorInputMapper : public InputMapper {
-public:
-    VibratorInputMapper(InputDevice* device);
-    virtual ~VibratorInputMapper();
-
-    virtual uint32_t getSources();
-    virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
-    virtual void process(const RawEvent* rawEvent);
-
-    virtual void vibrate(const nsecs_t* pattern, size_t patternSize, ssize_t repeat,
-            int32_t token);
-    virtual void cancelVibrate(int32_t token);
-    virtual void timeoutExpired(nsecs_t when);
-    virtual void dump(String8& dump);
-
-private:
-    bool mVibrating;
-    nsecs_t mPattern[MAX_VIBRATE_PATTERN_SIZE];
-    size_t mPatternSize;
-    ssize_t mRepeat;
-    int32_t mToken;
-    ssize_t mIndex;
-    nsecs_t mNextStepTime;
-
-    void nextStep();
-    void stopVibrating();
-};
-
-
-class KeyboardInputMapper : public InputMapper {
-public:
-    KeyboardInputMapper(InputDevice* device, uint32_t source, int32_t keyboardType);
-    virtual ~KeyboardInputMapper();
-
-    virtual uint32_t getSources();
-    virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
-    virtual void dump(String8& dump);
-    virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
-    virtual void reset(nsecs_t when);
-    virtual void process(const RawEvent* rawEvent);
-
-    virtual int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode);
-    virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
-    virtual bool markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-            const int32_t* keyCodes, uint8_t* outFlags);
-
-    virtual int32_t getMetaState();
-
-private:
-    struct KeyDown {
-        int32_t keyCode;
-        int32_t scanCode;
-    };
-
-    uint32_t mSource;
-    int32_t mKeyboardType;
-
-    int32_t mOrientation; // orientation for dpad keys
-
-    Vector<KeyDown> mKeyDowns; // keys that are down
-    int32_t mMetaState;
-    nsecs_t mDownTime; // time of most recent key down
-
-    int32_t mCurrentHidUsage; // most recent HID usage seen this packet, or 0 if none
-
-    struct LedState {
-        bool avail; // led is available
-        bool on;    // we think the led is currently on
-    };
-    LedState mCapsLockLedState;
-    LedState mNumLockLedState;
-    LedState mScrollLockLedState;
-
-    // Immutable configuration parameters.
-    struct Parameters {
-        bool hasAssociatedDisplay;
-        bool orientationAware;
-        bool handlesKeyRepeat;
-    } mParameters;
-
-    void configureParameters();
-    void dumpParameters(String8& dump);
-
-    bool isKeyboardOrGamepadKey(int32_t scanCode);
-
-    void processKey(nsecs_t when, bool down, int32_t keyCode, int32_t scanCode,
-            uint32_t policyFlags);
-
-    ssize_t findKeyDown(int32_t scanCode);
-
-    void resetLedState();
-    void initializeLedState(LedState& ledState, int32_t led);
-    void updateLedState(bool reset);
-    void updateLedStateForModifier(LedState& ledState, int32_t led,
-            int32_t modifier, bool reset);
-};
-
-
-class CursorInputMapper : public InputMapper {
-public:
-    CursorInputMapper(InputDevice* device);
-    virtual ~CursorInputMapper();
-
-    virtual uint32_t getSources();
-    virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
-    virtual void dump(String8& dump);
-    virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
-    virtual void reset(nsecs_t when);
-    virtual void process(const RawEvent* rawEvent);
-
-    virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
-
-    virtual void fadePointer();
-
-private:
-    // Amount that trackball needs to move in order to generate a key event.
-    static const int32_t TRACKBALL_MOVEMENT_THRESHOLD = 6;
-
-    // Immutable configuration parameters.
-    struct Parameters {
-        enum Mode {
-            MODE_POINTER,
-            MODE_NAVIGATION,
-        };
-
-        Mode mode;
-        bool hasAssociatedDisplay;
-        bool orientationAware;
-    } mParameters;
-
-    CursorButtonAccumulator mCursorButtonAccumulator;
-    CursorMotionAccumulator mCursorMotionAccumulator;
-    CursorScrollAccumulator mCursorScrollAccumulator;
-
-    int32_t mSource;
-    float mXScale;
-    float mYScale;
-    float mXPrecision;
-    float mYPrecision;
-
-    float mVWheelScale;
-    float mHWheelScale;
-
-    // Velocity controls for mouse pointer and wheel movements.
-    // The controls for X and Y wheel movements are separate to keep them decoupled.
-    VelocityControl mPointerVelocityControl;
-    VelocityControl mWheelXVelocityControl;
-    VelocityControl mWheelYVelocityControl;
-
-    int32_t mOrientation;
-
-    sp<PointerControllerInterface> mPointerController;
-
-    int32_t mButtonState;
-    nsecs_t mDownTime;
-
-    void configureParameters();
-    void dumpParameters(String8& dump);
-
-    void sync(nsecs_t when);
-};
-
-
-class TouchInputMapper : public InputMapper {
-public:
-    TouchInputMapper(InputDevice* device);
-    virtual ~TouchInputMapper();
-
-    virtual uint32_t getSources();
-    virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
-    virtual void dump(String8& dump);
-    virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
-    virtual void reset(nsecs_t when);
-    virtual void process(const RawEvent* rawEvent);
-
-    virtual int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode);
-    virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode);
-    virtual bool markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-            const int32_t* keyCodes, uint8_t* outFlags);
-
-    virtual void fadePointer();
-    virtual void timeoutExpired(nsecs_t when);
-
-protected:
-    CursorButtonAccumulator mCursorButtonAccumulator;
-    CursorScrollAccumulator mCursorScrollAccumulator;
-    TouchButtonAccumulator mTouchButtonAccumulator;
-
-    struct VirtualKey {
-        int32_t keyCode;
-        int32_t scanCode;
-        uint32_t flags;
-
-        // computed hit box, specified in touch screen coords based on known display size
-        int32_t hitLeft;
-        int32_t hitTop;
-        int32_t hitRight;
-        int32_t hitBottom;
-
-        inline bool isHit(int32_t x, int32_t y) const {
-            return x >= hitLeft && x <= hitRight && y >= hitTop && y <= hitBottom;
-        }
-    };
-
-    // Input sources and device mode.
-    uint32_t mSource;
-
-    enum DeviceMode {
-        DEVICE_MODE_DISABLED, // input is disabled
-        DEVICE_MODE_DIRECT, // direct mapping (touchscreen)
-        DEVICE_MODE_UNSCALED, // unscaled mapping (touchpad)
-        DEVICE_MODE_NAVIGATION, // unscaled mapping with assist gesture (touch navigation)
-        DEVICE_MODE_POINTER, // pointer mapping (pointer)
-    };
-    DeviceMode mDeviceMode;
-
-    // The reader's configuration.
-    InputReaderConfiguration mConfig;
-
-    // Immutable configuration parameters.
-    struct Parameters {
-        enum DeviceType {
-            DEVICE_TYPE_TOUCH_SCREEN,
-            DEVICE_TYPE_TOUCH_PAD,
-            DEVICE_TYPE_TOUCH_NAVIGATION,
-            DEVICE_TYPE_POINTER,
-        };
-
-        DeviceType deviceType;
-        bool hasAssociatedDisplay;
-        bool associatedDisplayIsExternal;
-        bool orientationAware;
-        bool hasButtonUnderPad;
-
-        enum GestureMode {
-            GESTURE_MODE_POINTER,
-            GESTURE_MODE_SPOTS,
-        };
-        GestureMode gestureMode;
-
-        bool wake;
-    } mParameters;
-
-    // Immutable calibration parameters in parsed form.
-    struct Calibration {
-        // Size
-        enum SizeCalibration {
-            SIZE_CALIBRATION_DEFAULT,
-            SIZE_CALIBRATION_NONE,
-            SIZE_CALIBRATION_GEOMETRIC,
-            SIZE_CALIBRATION_DIAMETER,
-            SIZE_CALIBRATION_BOX,
-            SIZE_CALIBRATION_AREA,
-        };
-
-        SizeCalibration sizeCalibration;
-
-        bool haveSizeScale;
-        float sizeScale;
-        bool haveSizeBias;
-        float sizeBias;
-        bool haveSizeIsSummed;
-        bool sizeIsSummed;
-
-        // Pressure
-        enum PressureCalibration {
-            PRESSURE_CALIBRATION_DEFAULT,
-            PRESSURE_CALIBRATION_NONE,
-            PRESSURE_CALIBRATION_PHYSICAL,
-            PRESSURE_CALIBRATION_AMPLITUDE,
-        };
-
-        PressureCalibration pressureCalibration;
-        bool havePressureScale;
-        float pressureScale;
-
-        // Orientation
-        enum OrientationCalibration {
-            ORIENTATION_CALIBRATION_DEFAULT,
-            ORIENTATION_CALIBRATION_NONE,
-            ORIENTATION_CALIBRATION_INTERPOLATED,
-            ORIENTATION_CALIBRATION_VECTOR,
-        };
-
-        OrientationCalibration orientationCalibration;
-
-        // Distance
-        enum DistanceCalibration {
-            DISTANCE_CALIBRATION_DEFAULT,
-            DISTANCE_CALIBRATION_NONE,
-            DISTANCE_CALIBRATION_SCALED,
-        };
-
-        DistanceCalibration distanceCalibration;
-        bool haveDistanceScale;
-        float distanceScale;
-
-        enum CoverageCalibration {
-            COVERAGE_CALIBRATION_DEFAULT,
-            COVERAGE_CALIBRATION_NONE,
-            COVERAGE_CALIBRATION_BOX,
-        };
-
-        CoverageCalibration coverageCalibration;
-
-        inline void applySizeScaleAndBias(float* outSize) const {
-            if (haveSizeScale) {
-                *outSize *= sizeScale;
-            }
-            if (haveSizeBias) {
-                *outSize += sizeBias;
-            }
-            if (*outSize < 0) {
-                *outSize = 0;
-            }
-        }
-    } mCalibration;
-
-    // Raw pointer axis information from the driver.
-    RawPointerAxes mRawPointerAxes;
-
-    // Raw pointer sample data.
-    RawPointerData mCurrentRawPointerData;
-    RawPointerData mLastRawPointerData;
-
-    // Cooked pointer sample data.
-    CookedPointerData mCurrentCookedPointerData;
-    CookedPointerData mLastCookedPointerData;
-
-    // Button state.
-    int32_t mCurrentButtonState;
-    int32_t mLastButtonState;
-
-    // Scroll state.
-    int32_t mCurrentRawVScroll;
-    int32_t mCurrentRawHScroll;
-
-    // Id bits used to differentiate fingers, stylus and mouse tools.
-    BitSet32 mCurrentFingerIdBits; // finger or unknown
-    BitSet32 mLastFingerIdBits;
-    BitSet32 mCurrentStylusIdBits; // stylus or eraser
-    BitSet32 mLastStylusIdBits;
-    BitSet32 mCurrentMouseIdBits; // mouse or lens
-    BitSet32 mLastMouseIdBits;
-
-    // True if we sent a HOVER_ENTER event.
-    bool mSentHoverEnter;
-
-    // The time the primary pointer last went down.
-    nsecs_t mDownTime;
-
-    // The pointer controller, or null if the device is not a pointer.
-    sp<PointerControllerInterface> mPointerController;
-
-    Vector<VirtualKey> mVirtualKeys;
-
-    virtual void configureParameters();
-    virtual void dumpParameters(String8& dump);
-    virtual void configureRawPointerAxes();
-    virtual void dumpRawPointerAxes(String8& dump);
-    virtual void configureSurface(nsecs_t when, bool* outResetNeeded);
-    virtual void dumpSurface(String8& dump);
-    virtual void configureVirtualKeys();
-    virtual void dumpVirtualKeys(String8& dump);
-    virtual void parseCalibration();
-    virtual void resolveCalibration();
-    virtual void dumpCalibration(String8& dump);
-    virtual bool hasStylus() const = 0;
-
-    virtual void syncTouch(nsecs_t when, bool* outHavePointerIds) = 0;
-
-private:
-    // The current viewport.
-    // The components of the viewport are specified in the display's rotated orientation.
-    DisplayViewport mViewport;
-
-    // The surface orientation, width and height set by configureSurface().
-    // The width and height are derived from the viewport but are specified
-    // in the natural orientation.
-    // The surface origin specifies how the surface coordinates should be translated
-    // to align with the logical display coordinate space.
-    // The orientation may be different from the viewport orientation as it specifies
-    // the rotation of the surface coordinates required to produce the viewport's
-    // requested orientation, so it will depend on whether the device is orientation aware.
-    int32_t mSurfaceWidth;
-    int32_t mSurfaceHeight;
-    int32_t mSurfaceLeft;
-    int32_t mSurfaceTop;
-    int32_t mSurfaceOrientation;
-
-    // Translation and scaling factors, orientation-independent.
-    float mXTranslate;
-    float mXScale;
-    float mXPrecision;
-
-    float mYTranslate;
-    float mYScale;
-    float mYPrecision;
-
-    float mGeometricScale;
-
-    float mPressureScale;
-
-    float mSizeScale;
-
-    float mOrientationScale;
-
-    float mDistanceScale;
-
-    bool mHaveTilt;
-    float mTiltXCenter;
-    float mTiltXScale;
-    float mTiltYCenter;
-    float mTiltYScale;
-
-    // Oriented motion ranges for input device info.
-    struct OrientedRanges {
-        InputDeviceInfo::MotionRange x;
-        InputDeviceInfo::MotionRange y;
-        InputDeviceInfo::MotionRange pressure;
-
-        bool haveSize;
-        InputDeviceInfo::MotionRange size;
-
-        bool haveTouchSize;
-        InputDeviceInfo::MotionRange touchMajor;
-        InputDeviceInfo::MotionRange touchMinor;
-
-        bool haveToolSize;
-        InputDeviceInfo::MotionRange toolMajor;
-        InputDeviceInfo::MotionRange toolMinor;
-
-        bool haveOrientation;
-        InputDeviceInfo::MotionRange orientation;
-
-        bool haveDistance;
-        InputDeviceInfo::MotionRange distance;
-
-        bool haveTilt;
-        InputDeviceInfo::MotionRange tilt;
-
-        OrientedRanges() {
-            clear();
-        }
-
-        void clear() {
-            haveSize = false;
-            haveTouchSize = false;
-            haveToolSize = false;
-            haveOrientation = false;
-            haveDistance = false;
-            haveTilt = false;
-        }
-    } mOrientedRanges;
-
-    // Oriented dimensions and precision.
-    float mOrientedXPrecision;
-    float mOrientedYPrecision;
-
-    struct CurrentVirtualKeyState {
-        bool down;
-        bool ignored;
-        nsecs_t downTime;
-        int32_t keyCode;
-        int32_t scanCode;
-    } mCurrentVirtualKey;
-
-    // Scale factor for gesture or mouse based pointer movements.
-    float mPointerXMovementScale;
-    float mPointerYMovementScale;
-
-    // Scale factor for gesture based zooming and other freeform motions.
-    float mPointerXZoomScale;
-    float mPointerYZoomScale;
-
-    // The maximum swipe width.
-    float mPointerGestureMaxSwipeWidth;
-
-    struct PointerDistanceHeapElement {
-        uint32_t currentPointerIndex : 8;
-        uint32_t lastPointerIndex : 8;
-        uint64_t distance : 48; // squared distance
-    };
-
-    enum PointerUsage {
-        POINTER_USAGE_NONE,
-        POINTER_USAGE_GESTURES,
-        POINTER_USAGE_STYLUS,
-        POINTER_USAGE_MOUSE,
-    };
-    PointerUsage mPointerUsage;
-
-    struct PointerGesture {
-        enum Mode {
-            // No fingers, button is not pressed.
-            // Nothing happening.
-            NEUTRAL,
-
-            // No fingers, button is not pressed.
-            // Tap detected.
-            // Emits DOWN and UP events at the pointer location.
-            TAP,
-
-            // Exactly one finger dragging following a tap.
-            // Pointer follows the active finger.
-            // Emits DOWN, MOVE and UP events at the pointer location.
-            //
-            // Detect double-taps when the finger goes up while in TAP_DRAG mode.
-            TAP_DRAG,
-
-            // Button is pressed.
-            // Pointer follows the active finger if there is one.  Other fingers are ignored.
-            // Emits DOWN, MOVE and UP events at the pointer location.
-            BUTTON_CLICK_OR_DRAG,
-
-            // Exactly one finger, button is not pressed.
-            // Pointer follows the active finger.
-            // Emits HOVER_MOVE events at the pointer location.
-            //
-            // Detect taps when the finger goes up while in HOVER mode.
-            HOVER,
-
-            // Exactly two fingers but neither have moved enough to clearly indicate
-            // whether a swipe or freeform gesture was intended.  We consider the
-            // pointer to be pressed so this enables clicking or long-pressing on buttons.
-            // Pointer does not move.
-            // Emits DOWN, MOVE and UP events with a single stationary pointer coordinate.
-            PRESS,
-
-            // Exactly two fingers moving in the same direction, button is not pressed.
-            // Pointer does not move.
-            // Emits DOWN, MOVE and UP events with a single pointer coordinate that
-            // follows the midpoint between both fingers.
-            SWIPE,
-
-            // Two or more fingers moving in arbitrary directions, button is not pressed.
-            // Pointer does not move.
-            // Emits DOWN, POINTER_DOWN, MOVE, POINTER_UP and UP events that follow
-            // each finger individually relative to the initial centroid of the finger.
-            FREEFORM,
-
-            // Waiting for quiet time to end before starting the next gesture.
-            QUIET,
-        };
-
-        // Time the first finger went down.
-        nsecs_t firstTouchTime;
-
-        // The active pointer id from the raw touch data.
-        int32_t activeTouchId; // -1 if none
-
-        // The active pointer id from the gesture last delivered to the application.
-        int32_t activeGestureId; // -1 if none
-
-        // Pointer coords and ids for the current and previous pointer gesture.
-        Mode currentGestureMode;
-        BitSet32 currentGestureIdBits;
-        uint32_t currentGestureIdToIndex[MAX_POINTER_ID + 1];
-        PointerProperties currentGestureProperties[MAX_POINTERS];
-        PointerCoords currentGestureCoords[MAX_POINTERS];
-
-        Mode lastGestureMode;
-        BitSet32 lastGestureIdBits;
-        uint32_t lastGestureIdToIndex[MAX_POINTER_ID + 1];
-        PointerProperties lastGestureProperties[MAX_POINTERS];
-        PointerCoords lastGestureCoords[MAX_POINTERS];
-
-        // Time the pointer gesture last went down.
-        nsecs_t downTime;
-
-        // Time when the pointer went down for a TAP.
-        nsecs_t tapDownTime;
-
-        // Time when the pointer went up for a TAP.
-        nsecs_t tapUpTime;
-
-        // Location of initial tap.
-        float tapX, tapY;
-
-        // Time we started waiting for quiescence.
-        nsecs_t quietTime;
-
-        // Reference points for multitouch gestures.
-        float referenceTouchX;    // reference touch X/Y coordinates in surface units
-        float referenceTouchY;
-        float referenceGestureX;  // reference gesture X/Y coordinates in pixels
-        float referenceGestureY;
-
-        // Distance that each pointer has traveled which has not yet been
-        // subsumed into the reference gesture position.
-        BitSet32 referenceIdBits;
-        struct Delta {
-            float dx, dy;
-        };
-        Delta referenceDeltas[MAX_POINTER_ID + 1];
-
-        // Describes how touch ids are mapped to gesture ids for freeform gestures.
-        uint32_t freeformTouchToGestureIdMap[MAX_POINTER_ID + 1];
-
-        // A velocity tracker for determining whether to switch active pointers during drags.
-        VelocityTracker velocityTracker;
-
-        void reset() {
-            firstTouchTime = LLONG_MIN;
-            activeTouchId = -1;
-            activeGestureId = -1;
-            currentGestureMode = NEUTRAL;
-            currentGestureIdBits.clear();
-            lastGestureMode = NEUTRAL;
-            lastGestureIdBits.clear();
-            downTime = 0;
-            velocityTracker.clear();
-            resetTap();
-            resetQuietTime();
-        }
-
-        void resetTap() {
-            tapDownTime = LLONG_MIN;
-            tapUpTime = LLONG_MIN;
-        }
-
-        void resetQuietTime() {
-            quietTime = LLONG_MIN;
-        }
-    } mPointerGesture;
-
-    struct PointerSimple {
-        PointerCoords currentCoords;
-        PointerProperties currentProperties;
-        PointerCoords lastCoords;
-        PointerProperties lastProperties;
-
-        // True if the pointer is down.
-        bool down;
-
-        // True if the pointer is hovering.
-        bool hovering;
-
-        // Time the pointer last went down.
-        nsecs_t downTime;
-
-        void reset() {
-            currentCoords.clear();
-            currentProperties.clear();
-            lastCoords.clear();
-            lastProperties.clear();
-            down = false;
-            hovering = false;
-            downTime = 0;
-        }
-    } mPointerSimple;
-
-    // The pointer and scroll velocity controls.
-    VelocityControl mPointerVelocityControl;
-    VelocityControl mWheelXVelocityControl;
-    VelocityControl mWheelYVelocityControl;
-
-    void sync(nsecs_t when);
-
-    bool consumeRawTouches(nsecs_t when, uint32_t policyFlags);
-    void dispatchVirtualKey(nsecs_t when, uint32_t policyFlags,
-            int32_t keyEventAction, int32_t keyEventFlags);
-
-    void dispatchTouches(nsecs_t when, uint32_t policyFlags);
-    void dispatchHoverExit(nsecs_t when, uint32_t policyFlags);
-    void dispatchHoverEnterAndMove(nsecs_t when, uint32_t policyFlags);
-    void cookPointerData();
-
-    void dispatchPointerUsage(nsecs_t when, uint32_t policyFlags, PointerUsage pointerUsage);
-    void abortPointerUsage(nsecs_t when, uint32_t policyFlags);
-
-    void dispatchPointerGestures(nsecs_t when, uint32_t policyFlags, bool isTimeout);
-    void abortPointerGestures(nsecs_t when, uint32_t policyFlags);
-    bool preparePointerGestures(nsecs_t when,
-            bool* outCancelPreviousGesture, bool* outFinishPreviousGesture,
-            bool isTimeout);
-
-    void dispatchPointerStylus(nsecs_t when, uint32_t policyFlags);
-    void abortPointerStylus(nsecs_t when, uint32_t policyFlags);
-
-    void dispatchPointerMouse(nsecs_t when, uint32_t policyFlags);
-    void abortPointerMouse(nsecs_t when, uint32_t policyFlags);
-
-    void dispatchPointerSimple(nsecs_t when, uint32_t policyFlags,
-            bool down, bool hovering);
-    void abortPointerSimple(nsecs_t when, uint32_t policyFlags);
-
-    // Dispatches a motion event.
-    // If the changedId is >= 0 and the action is POINTER_DOWN or POINTER_UP, the
-    // method will take care of setting the index and transmuting the action to DOWN or UP
-    // it is the first / last pointer to go down / up.
-    void dispatchMotion(nsecs_t when, uint32_t policyFlags, uint32_t source,
-            int32_t action, int32_t flags, int32_t metaState, int32_t buttonState,
-            int32_t edgeFlags,
-            const PointerProperties* properties, const PointerCoords* coords,
-            const uint32_t* idToIndex, BitSet32 idBits,
-            int32_t changedId, float xPrecision, float yPrecision, nsecs_t downTime);
-
-    // Updates pointer coords and properties for pointers with specified ids that have moved.
-    // Returns true if any of them changed.
-    bool updateMovedPointers(const PointerProperties* inProperties,
-            const PointerCoords* inCoords, const uint32_t* inIdToIndex,
-            PointerProperties* outProperties, PointerCoords* outCoords,
-            const uint32_t* outIdToIndex, BitSet32 idBits) const;
-
-    bool isPointInsideSurface(int32_t x, int32_t y);
-    const VirtualKey* findVirtualKeyHit(int32_t x, int32_t y);
-
-    void assignPointerIds();
-};
-
-
-class SingleTouchInputMapper : public TouchInputMapper {
-public:
-    SingleTouchInputMapper(InputDevice* device);
-    virtual ~SingleTouchInputMapper();
-
-    virtual void reset(nsecs_t when);
-    virtual void process(const RawEvent* rawEvent);
-
-protected:
-    virtual void syncTouch(nsecs_t when, bool* outHavePointerIds);
-    virtual void configureRawPointerAxes();
-    virtual bool hasStylus() const;
-
-private:
-    SingleTouchMotionAccumulator mSingleTouchMotionAccumulator;
-};
-
-
-class MultiTouchInputMapper : public TouchInputMapper {
-public:
-    MultiTouchInputMapper(InputDevice* device);
-    virtual ~MultiTouchInputMapper();
-
-    virtual void reset(nsecs_t when);
-    virtual void process(const RawEvent* rawEvent);
-
-protected:
-    virtual void syncTouch(nsecs_t when, bool* outHavePointerIds);
-    virtual void configureRawPointerAxes();
-    virtual bool hasStylus() const;
-
-private:
-    MultiTouchMotionAccumulator mMultiTouchMotionAccumulator;
-
-    // Specifies the pointer id bits that are in use, and their associated tracking id.
-    BitSet32 mPointerIdBits;
-    int32_t mPointerTrackingIdMap[MAX_POINTER_ID + 1];
-};
-
-
-class JoystickInputMapper : public InputMapper {
-public:
-    JoystickInputMapper(InputDevice* device);
-    virtual ~JoystickInputMapper();
-
-    virtual uint32_t getSources();
-    virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo);
-    virtual void dump(String8& dump);
-    virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes);
-    virtual void reset(nsecs_t when);
-    virtual void process(const RawEvent* rawEvent);
-
-private:
-    struct Axis {
-        RawAbsoluteAxisInfo rawAxisInfo;
-        AxisInfo axisInfo;
-
-        bool explicitlyMapped; // true if the axis was explicitly assigned an axis id
-
-        float scale;   // scale factor from raw to normalized values
-        float offset;  // offset to add after scaling for normalization
-        float highScale;  // scale factor from raw to normalized values of high split
-        float highOffset; // offset to add after scaling for normalization of high split
-
-        float min;        // normalized inclusive minimum
-        float max;        // normalized inclusive maximum
-        float flat;       // normalized flat region size
-        float fuzz;       // normalized error tolerance
-        float resolution; // normalized resolution in units/mm
-
-        float filter;  // filter out small variations of this size
-        float currentValue; // current value
-        float newValue; // most recent value
-        float highCurrentValue; // current value of high split
-        float highNewValue; // most recent value of high split
-
-        void initialize(const RawAbsoluteAxisInfo& rawAxisInfo, const AxisInfo& axisInfo,
-                bool explicitlyMapped, float scale, float offset,
-                float highScale, float highOffset,
-                float min, float max, float flat, float fuzz, float resolution) {
-            this->rawAxisInfo = rawAxisInfo;
-            this->axisInfo = axisInfo;
-            this->explicitlyMapped = explicitlyMapped;
-            this->scale = scale;
-            this->offset = offset;
-            this->highScale = highScale;
-            this->highOffset = highOffset;
-            this->min = min;
-            this->max = max;
-            this->flat = flat;
-            this->fuzz = fuzz;
-            this->resolution = resolution;
-            this->filter = 0;
-            resetValue();
-        }
-
-        void resetValue() {
-            this->currentValue = 0;
-            this->newValue = 0;
-            this->highCurrentValue = 0;
-            this->highNewValue = 0;
-        }
-    };
-
-    // Axes indexed by raw ABS_* axis index.
-    KeyedVector<int32_t, Axis> mAxes;
-
-    void sync(nsecs_t when, bool force);
-
-    bool haveAxis(int32_t axisId);
-    void pruneAxes(bool ignoreExplicitlyMappedAxes);
-    bool filterAxes(bool force);
-
-    static bool hasValueChangedSignificantly(float filter,
-            float newValue, float currentValue, float min, float max);
-    static bool hasMovedNearerToValueWithinFilteredRange(float filter,
-            float newValue, float currentValue, float thresholdValue);
-
-    static bool isCenteredAxis(int32_t axis);
-    static int32_t getCompatAxis(int32_t axis);
-
-    static void addMotionRange(int32_t axisId, const Axis& axis, InputDeviceInfo* info);
-    static void setPointerCoordsAxisValue(PointerCoords* pointerCoords, int32_t axis,
-            float value);
-};
-
-} // namespace android
-
-#endif // _UI_INPUT_READER_H
diff --git a/libs/input/InputWindow.cpp b/libs/input/InputWindow.cpp
deleted file mode 100644
index 18cd8eb..0000000
--- a/libs/input/InputWindow.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#define LOG_TAG "InputWindow"
-
-#include "InputWindow.h"
-
-#include <cutils/log.h>
-
-namespace android {
-
-// --- InputWindowInfo ---
-
-bool InputWindowInfo::touchableRegionContainsPoint(int32_t x, int32_t y) const {
-    return touchableRegion.contains(x, y);
-}
-
-bool InputWindowInfo::frameContainsPoint(int32_t x, int32_t y) const {
-    return x >= frameLeft && x <= frameRight
-            && y >= frameTop && y <= frameBottom;
-}
-
-bool InputWindowInfo::isTrustedOverlay() const {
-    return layoutParamsType == TYPE_INPUT_METHOD
-            || layoutParamsType == TYPE_INPUT_METHOD_DIALOG
-            || layoutParamsType == TYPE_MAGNIFICATION_OVERLAY
-            || layoutParamsType == TYPE_SECURE_SYSTEM_OVERLAY;
-}
-
-bool InputWindowInfo::supportsSplitTouch() const {
-    return layoutParamsFlags & FLAG_SPLIT_TOUCH;
-}
-
-
-// --- InputWindowHandle ---
-
-InputWindowHandle::InputWindowHandle(const sp<InputApplicationHandle>& inputApplicationHandle) :
-    inputApplicationHandle(inputApplicationHandle), mInfo(NULL) {
-}
-
-InputWindowHandle::~InputWindowHandle() {
-    delete mInfo;
-}
-
-void InputWindowHandle::releaseInfo() {
-    if (mInfo) {
-        delete mInfo;
-        mInfo = NULL;
-    }
-}
-
-} // namespace android
diff --git a/libs/input/InputWindow.h b/libs/input/InputWindow.h
deleted file mode 100644
index bd325b5..0000000
--- a/libs/input/InputWindow.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef _UI_INPUT_WINDOW_H
-#define _UI_INPUT_WINDOW_H
-
-#include <input/Input.h>
-#include <input/InputTransport.h>
-#include <utils/RefBase.h>
-#include <utils/Timers.h>
-#include <utils/String8.h>
-
-#include <SkRegion.h>
-
-#include "InputApplication.h"
-
-namespace android {
-
-/*
- * Describes the properties of a window that can receive input.
- */
-struct InputWindowInfo {
-    // Window flags from WindowManager.LayoutParams
-    enum {
-        FLAG_ALLOW_LOCK_WHILE_SCREEN_ON     = 0x00000001,
-        FLAG_DIM_BEHIND        = 0x00000002,
-        FLAG_BLUR_BEHIND        = 0x00000004,
-        FLAG_NOT_FOCUSABLE      = 0x00000008,
-        FLAG_NOT_TOUCHABLE      = 0x00000010,
-        FLAG_NOT_TOUCH_MODAL    = 0x00000020,
-        FLAG_TOUCHABLE_WHEN_WAKING = 0x00000040,
-        FLAG_KEEP_SCREEN_ON     = 0x00000080,
-        FLAG_LAYOUT_IN_SCREEN   = 0x00000100,
-        FLAG_LAYOUT_NO_LIMITS   = 0x00000200,
-        FLAG_FULLSCREEN      = 0x00000400,
-        FLAG_FORCE_NOT_FULLSCREEN   = 0x00000800,
-        FLAG_DITHER             = 0x00001000,
-        FLAG_SECURE             = 0x00002000,
-        FLAG_SCALED             = 0x00004000,
-        FLAG_IGNORE_CHEEK_PRESSES    = 0x00008000,
-        FLAG_LAYOUT_INSET_DECOR = 0x00010000,
-        FLAG_ALT_FOCUSABLE_IM = 0x00020000,
-        FLAG_WATCH_OUTSIDE_TOUCH = 0x00040000,
-        FLAG_SHOW_WHEN_LOCKED = 0x00080000,
-        FLAG_SHOW_WALLPAPER = 0x00100000,
-        FLAG_TURN_SCREEN_ON = 0x00200000,
-        FLAG_DISMISS_KEYGUARD = 0x00400000,
-        FLAG_SPLIT_TOUCH = 0x00800000,
-        FLAG_SLIPPERY = 0x20000000,
-        FLAG_NEEDS_MENU_KEY = 0x40000000,
-    };
-
-    // Private Window flags from WindowManager.LayoutParams
-    enum {
-        PRIVATE_FLAG_SYSTEM_ERROR = 0x00000100,
-    };
-
-    // Window types from WindowManager.LayoutParams
-    enum {
-        FIRST_APPLICATION_WINDOW = 1,
-        TYPE_BASE_APPLICATION   = 1,
-        TYPE_APPLICATION        = 2,
-        TYPE_APPLICATION_STARTING = 3,
-        LAST_APPLICATION_WINDOW = 99,
-        FIRST_SUB_WINDOW        = 1000,
-        TYPE_APPLICATION_PANEL  = FIRST_SUB_WINDOW,
-        TYPE_APPLICATION_MEDIA  = FIRST_SUB_WINDOW+1,
-        TYPE_APPLICATION_SUB_PANEL = FIRST_SUB_WINDOW+2,
-        TYPE_APPLICATION_ATTACHED_DIALOG = FIRST_SUB_WINDOW+3,
-        TYPE_APPLICATION_MEDIA_OVERLAY  = FIRST_SUB_WINDOW+4,
-        LAST_SUB_WINDOW         = 1999,
-        FIRST_SYSTEM_WINDOW     = 2000,
-        TYPE_STATUS_BAR         = FIRST_SYSTEM_WINDOW,
-        TYPE_SEARCH_BAR         = FIRST_SYSTEM_WINDOW+1,
-        TYPE_PHONE              = FIRST_SYSTEM_WINDOW+2,
-        TYPE_SYSTEM_ALERT       = FIRST_SYSTEM_WINDOW+3,
-        TYPE_KEYGUARD           = FIRST_SYSTEM_WINDOW+4,
-        TYPE_TOAST              = FIRST_SYSTEM_WINDOW+5,
-        TYPE_SYSTEM_OVERLAY     = FIRST_SYSTEM_WINDOW+6,
-        TYPE_PRIORITY_PHONE     = FIRST_SYSTEM_WINDOW+7,
-        TYPE_SYSTEM_DIALOG      = FIRST_SYSTEM_WINDOW+8,
-        TYPE_KEYGUARD_DIALOG    = FIRST_SYSTEM_WINDOW+9,
-        TYPE_SYSTEM_ERROR       = FIRST_SYSTEM_WINDOW+10,
-        TYPE_INPUT_METHOD       = FIRST_SYSTEM_WINDOW+11,
-        TYPE_INPUT_METHOD_DIALOG= FIRST_SYSTEM_WINDOW+12,
-        TYPE_WALLPAPER          = FIRST_SYSTEM_WINDOW+13,
-        TYPE_STATUS_BAR_PANEL   = FIRST_SYSTEM_WINDOW+14,
-        TYPE_SECURE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+15,
-        TYPE_DRAG               = FIRST_SYSTEM_WINDOW+16,
-        TYPE_STATUS_BAR_SUB_PANEL  = FIRST_SYSTEM_WINDOW+17,
-        TYPE_POINTER            = FIRST_SYSTEM_WINDOW+18,
-        TYPE_NAVIGATION_BAR     = FIRST_SYSTEM_WINDOW+19,
-        TYPE_VOLUME_OVERLAY = FIRST_SYSTEM_WINDOW+20,
-        TYPE_BOOT_PROGRESS = FIRST_SYSTEM_WINDOW+21,
-        TYPE_MAGNIFICATION_OVERLAY = FIRST_SYSTEM_WINDOW+27,
-        LAST_SYSTEM_WINDOW      = 2999,
-    };
-
-    enum {
-        INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES = 0x00000001,
-        INPUT_FEATURE_NO_INPUT_CHANNEL = 0x00000002,
-        INPUT_FEATURE_DISABLE_USER_ACTIVITY = 0x00000004,
-    };
-
-    sp<InputChannel> inputChannel;
-    String8 name;
-    int32_t layoutParamsFlags;
-    int32_t layoutParamsPrivateFlags;
-    int32_t layoutParamsType;
-    nsecs_t dispatchingTimeout;
-    int32_t frameLeft;
-    int32_t frameTop;
-    int32_t frameRight;
-    int32_t frameBottom;
-    float scaleFactor;
-    SkRegion touchableRegion;
-    bool visible;
-    bool canReceiveKeys;
-    bool hasFocus;
-    bool hasWallpaper;
-    bool paused;
-    int32_t layer;
-    int32_t ownerPid;
-    int32_t ownerUid;
-    int32_t inputFeatures;
-    int32_t displayId;
-
-    bool touchableRegionContainsPoint(int32_t x, int32_t y) const;
-    bool frameContainsPoint(int32_t x, int32_t y) const;
-
-    /* Returns true if the window is of a trusted type that is allowed to silently
-     * overlay other windows for the purpose of implementing the secure views feature.
-     * Trusted overlays, such as IME windows, can partly obscure other windows without causing
-     * motion events to be delivered to them with AMOTION_EVENT_FLAG_WINDOW_IS_OBSCURED.
-     */
-    bool isTrustedOverlay() const;
-
-    bool supportsSplitTouch() const;
-};
-
-
-/*
- * Handle for a window that can receive input.
- *
- * Used by the native input dispatcher to indirectly refer to the window manager objects
- * that describe a window.
- */
-class InputWindowHandle : public RefBase {
-public:
-    const sp<InputApplicationHandle> inputApplicationHandle;
-
-    inline const InputWindowInfo* getInfo() const {
-        return mInfo;
-    }
-
-    inline sp<InputChannel> getInputChannel() const {
-        return mInfo ? mInfo->inputChannel : NULL;
-    }
-
-    inline String8 getName() const {
-        return mInfo ? mInfo->name : String8("<invalid>");
-    }
-
-    inline nsecs_t getDispatchingTimeout(nsecs_t defaultValue) const {
-        return mInfo ? mInfo->dispatchingTimeout : defaultValue;
-    }
-
-    /**
-     * Requests that the state of this object be updated to reflect
-     * the most current available information about the application.
-     *
-     * This method should only be called from within the input dispatcher's
-     * critical section.
-     *
-     * Returns true on success, or false if the handle is no longer valid.
-     */
-    virtual bool updateInfo() = 0;
-
-    /**
-     * Releases the storage used by the associated information when it is
-     * no longer needed.
-     */
-    void releaseInfo();
-
-protected:
-    InputWindowHandle(const sp<InputApplicationHandle>& inputApplicationHandle);
-    virtual ~InputWindowHandle();
-
-    InputWindowInfo* mInfo;
-};
-
-} // namespace android
-
-#endif // _UI_INPUT_WINDOW_H
diff --git a/libs/input/PointerController.h b/libs/input/PointerController.h
index 790c0bb..b9e4ce7 100644
--- a/libs/input/PointerController.h
+++ b/libs/input/PointerController.h
@@ -21,6 +21,7 @@
 
 #include <ui/DisplayInfo.h>
 #include <input/Input.h>
+#include <inputflinger/PointerControllerInterface.h>
 #include <utils/BitSet.h>
 #include <utils/RefBase.h>
 #include <utils/Looper.h>
@@ -30,84 +31,6 @@
 
 namespace android {
 
-/**
- * Interface for tracking a mouse / touch pad pointer and touch pad spots.
- *
- * The spots are sprites on screen that visually represent the positions of
- * fingers
- *
- * The pointer controller is responsible for providing synchronization and for tracking
- * display orientation changes if needed.
- */
-class PointerControllerInterface : public virtual RefBase {
-protected:
-    PointerControllerInterface() { }
-    virtual ~PointerControllerInterface() { }
-
-public:
-    /* Gets the bounds of the region that the pointer can traverse.
-     * Returns true if the bounds are available. */
-    virtual bool getBounds(float* outMinX, float* outMinY,
-            float* outMaxX, float* outMaxY) const = 0;
-
-    /* Move the pointer. */
-    virtual void move(float deltaX, float deltaY) = 0;
-
-    /* Sets a mask that indicates which buttons are pressed. */
-    virtual void setButtonState(int32_t buttonState) = 0;
-
-    /* Gets a mask that indicates which buttons are pressed. */
-    virtual int32_t getButtonState() const = 0;
-
-    /* Sets the absolute location of the pointer. */
-    virtual void setPosition(float x, float y) = 0;
-
-    /* Gets the absolute location of the pointer. */
-    virtual void getPosition(float* outX, float* outY) const = 0;
-
-    enum Transition {
-        // Fade/unfade immediately.
-        TRANSITION_IMMEDIATE,
-        // Fade/unfade gradually.
-        TRANSITION_GRADUAL,
-    };
-
-    /* Fades the pointer out now. */
-    virtual void fade(Transition transition) = 0;
-
-    /* Makes the pointer visible if it has faded out.
-     * The pointer never unfades itself automatically.  This method must be called
-     * by the client whenever the pointer is moved or a button is pressed and it
-     * wants to ensure that the pointer becomes visible again. */
-    virtual void unfade(Transition transition) = 0;
-
-    enum Presentation {
-        // Show the mouse pointer.
-        PRESENTATION_POINTER,
-        // Show spots and a spot anchor in place of the mouse pointer.
-        PRESENTATION_SPOT,
-    };
-
-    /* Sets the mode of the pointer controller. */
-    virtual void setPresentation(Presentation presentation) = 0;
-
-    /* Sets the spots for the current gesture.
-     * The spots are not subject to the inactivity timeout like the pointer
-     * itself it since they are expected to remain visible for so long as
-     * the fingers are on the touch pad.
-     *
-     * The values of the AMOTION_EVENT_AXIS_PRESSURE axis is significant.
-     * For spotCoords, pressure != 0 indicates that the spot's location is being
-     * pressed (not hovering).
-     */
-    virtual void setSpots(const PointerCoords* spotCoords, const uint32_t* spotIdToIndex,
-            BitSet32 spotIdBits) = 0;
-
-    /* Removes all spots. */
-    virtual void clearSpots() = 0;
-};
-
-
 /*
  * Pointer resources.
  */
diff --git a/libs/input/SpriteController.cpp b/libs/input/SpriteController.cpp
index fd9c66b..3f6ccc9 100644
--- a/libs/input/SpriteController.cpp
+++ b/libs/input/SpriteController.cpp
@@ -216,12 +216,12 @@
                 paint.setXfermodeMode(SkXfermode::kSrc_Mode);
                 surfaceCanvas.drawBitmap(update.state.icon.bitmap, 0, 0, &paint);
 
-                if (outBuffer.width > uint32_t(update.state.icon.bitmap.width())) {
+                if (outBuffer.width > update.state.icon.bitmap.width()) {
                     paint.setColor(0); // transparent fill color
                     surfaceCanvas.drawRectCoords(update.state.icon.bitmap.width(), 0,
                             outBuffer.width, update.state.icon.bitmap.height(), paint);
                 }
-                if (outBuffer.height > uint32_t(update.state.icon.bitmap.height())) {
+                if (outBuffer.height > update.state.icon.bitmap.height()) {
                     paint.setColor(0); // transparent fill color
                     surfaceCanvas.drawRectCoords(0, update.state.icon.bitmap.height(),
                             outBuffer.width, outBuffer.height, paint);
@@ -402,7 +402,7 @@
 
     uint32_t dirty;
     if (icon.isValid()) {
-        icon.bitmap.copyTo(&mLocked.state.icon.bitmap, SkBitmap::kARGB_8888_Config);
+        icon.bitmap.copyTo(&mLocked.state.icon.bitmap, kNative_8888_SkColorType);
 
         if (!mLocked.state.icon.isValid()
                 || mLocked.state.icon.hotSpotX != icon.hotSpotX
diff --git a/libs/input/SpriteController.h b/libs/input/SpriteController.h
index 75e4843..797efd7 100644
--- a/libs/input/SpriteController.h
+++ b/libs/input/SpriteController.h
@@ -65,7 +65,7 @@
 
     inline SpriteIcon copy() const {
         SkBitmap bitmapCopy;
-        bitmap.copyTo(&bitmapCopy, SkBitmap::kARGB_8888_Config);
+        bitmap.copyTo(&bitmapCopy, kNative_8888_SkColorType);
         return SpriteIcon(bitmapCopy, hotSpotX, hotSpotY);
     }
 
diff --git a/libs/input/tests/Android.mk b/libs/input/tests/Android.mk
deleted file mode 100644
index 9278f41..0000000
--- a/libs/input/tests/Android.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-# Build the unit tests.
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-# Build the unit tests.
-test_src_files := \
-    InputReader_test.cpp \
-    InputDispatcher_test.cpp
-
-shared_libraries := \
-    libcutils \
-    liblog \
-    libandroidfw \
-    libutils \
-    libhardware \
-    libhardware_legacy \
-    libui \
-    libskia \
-    libstlport \
-    libinput \
-    libinputservice
-
-static_libraries := \
-    libgtest \
-    libgtest_main
-
-c_includes := \
-    bionic \
-    bionic/libstdc++/include \
-    external/gtest/include \
-    external/stlport/stlport \
-    external/skia/include/core
-
-module_tags := eng tests
-
-$(foreach file,$(test_src_files), \
-    $(eval include $(CLEAR_VARS)) \
-    $(eval LOCAL_SHARED_LIBRARIES := $(shared_libraries)) \
-    $(eval LOCAL_STATIC_LIBRARIES := $(static_libraries)) \
-    $(eval LOCAL_C_INCLUDES := $(c_includes)) \
-    $(eval LOCAL_SRC_FILES := $(file)) \
-    $(eval LOCAL_MODULE := $(notdir $(file:%.cpp=%))) \
-    $(eval LOCAL_MODULE_TAGS := $(module_tags)) \
-    $(eval include $(BUILD_NATIVE_TEST)) \
-)
-
-# Build the manual test programs.
-include $(call all-makefiles-under, $(LOCAL_PATH))
diff --git a/libs/input/tests/InputDispatcher_test.cpp b/libs/input/tests/InputDispatcher_test.cpp
deleted file mode 100644
index 7aac6ed..0000000
--- a/libs/input/tests/InputDispatcher_test.cpp
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#include "../InputDispatcher.h"
-
-#include <gtest/gtest.h>
-#include <linux/input.h>
-
-namespace android {
-
-// An arbitrary time value.
-static const nsecs_t ARBITRARY_TIME = 1234;
-
-// An arbitrary device id.
-static const int32_t DEVICE_ID = 1;
-
-// An arbitrary display id.
-static const int32_t DISPLAY_ID = 0;
-
-// An arbitrary injector pid / uid pair that has permission to inject events.
-static const int32_t INJECTOR_PID = 999;
-static const int32_t INJECTOR_UID = 1001;
-
-
-// --- FakeInputDispatcherPolicy ---
-
-class FakeInputDispatcherPolicy : public InputDispatcherPolicyInterface {
-    InputDispatcherConfiguration mConfig;
-
-protected:
-    virtual ~FakeInputDispatcherPolicy() {
-    }
-
-public:
-    FakeInputDispatcherPolicy() {
-    }
-
-private:
-    virtual void notifyConfigurationChanged(nsecs_t when) {
-    }
-
-    virtual nsecs_t notifyANR(const sp<InputApplicationHandle>& inputApplicationHandle,
-            const sp<InputWindowHandle>& inputWindowHandle,
-            const String8& reason) {
-        return 0;
-    }
-
-    virtual void notifyInputChannelBroken(const sp<InputWindowHandle>& inputWindowHandle) {
-    }
-
-    virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) {
-        *outConfig = mConfig;
-    }
-
-    virtual bool filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags) {
-        return true;
-    }
-
-    virtual void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags) {
-    }
-
-    virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags) {
-    }
-
-    virtual nsecs_t interceptKeyBeforeDispatching(const sp<InputWindowHandle>& inputWindowHandle,
-            const KeyEvent* keyEvent, uint32_t policyFlags) {
-        return 0;
-    }
-
-    virtual bool dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle,
-            const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent) {
-        return false;
-    }
-
-    virtual void notifySwitch(nsecs_t when,
-            uint32_t switchValues, uint32_t switchMask, uint32_t policyFlags) {
-    }
-
-    virtual void pokeUserActivity(nsecs_t eventTime, int32_t eventType) {
-    }
-
-    virtual bool checkInjectEventsPermissionNonReentrant(
-            int32_t injectorPid, int32_t injectorUid) {
-        return false;
-    }
-};
-
-
-// --- InputDispatcherTest ---
-
-class InputDispatcherTest : public testing::Test {
-protected:
-    sp<FakeInputDispatcherPolicy> mFakePolicy;
-    sp<InputDispatcher> mDispatcher;
-
-    virtual void SetUp() {
-        mFakePolicy = new FakeInputDispatcherPolicy();
-        mDispatcher = new InputDispatcher(mFakePolicy);
-    }
-
-    virtual void TearDown() {
-        mFakePolicy.clear();
-        mDispatcher.clear();
-    }
-};
-
-
-TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents) {
-    KeyEvent event;
-
-    // Rejects undefined key actions.
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_KEYBOARD,
-            /*action*/ -1, 0,
-            AKEYCODE_A, KEY_A, AMETA_NONE, 0, ARBITRARY_TIME, ARBITRARY_TIME);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject key events with undefined action.";
-
-    // Rejects ACTION_MULTIPLE since it is not supported despite being defined in the API.
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_KEYBOARD,
-            AKEY_EVENT_ACTION_MULTIPLE, 0,
-            AKEYCODE_A, KEY_A, AMETA_NONE, 0, ARBITRARY_TIME, ARBITRARY_TIME);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject key events with ACTION_MULTIPLE.";
-}
-
-TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesMotionEvents) {
-    MotionEvent event;
-    PointerProperties pointerProperties[MAX_POINTERS + 1];
-    PointerCoords pointerCoords[MAX_POINTERS + 1];
-    for (int i = 0; i <= MAX_POINTERS; i++) {
-        pointerProperties[i].clear();
-        pointerProperties[i].id = i;
-        pointerCoords[i].clear();
-    }
-
-    // Rejects undefined motion actions.
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            /*action*/ -1, 0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with undefined action.";
-
-    // Rejects pointer down with invalid index.
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with pointer down index too large.";
-
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_POINTER_DOWN | (-1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with pointer down index too small.";
-
-    // Rejects pointer up with invalid index.
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_POINTER_UP | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with pointer up index too large.";
-
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_POINTER_UP | (-1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with pointer up index too small.";
-
-    // Rejects motion events with invalid number of pointers.
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 0, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with 0 pointers.";
-
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ MAX_POINTERS + 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with more than MAX_POINTERS pointers.";
-
-    // Rejects motion events with invalid pointer ids.
-    pointerProperties[0].id = -1;
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with pointer ids less than 0.";
-
-    pointerProperties[0].id = MAX_POINTER_ID + 1;
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 1, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with pointer ids greater than MAX_POINTER_ID.";
-
-    // Rejects motion events with duplicate pointer ids.
-    pointerProperties[0].id = 1;
-    pointerProperties[1].id = 1;
-    event.initialize(DEVICE_ID, AINPUT_SOURCE_TOUCHSCREEN,
-            AMOTION_EVENT_ACTION_DOWN, 0, 0, AMETA_NONE, 0, 0, 0, 0, 0,
-            ARBITRARY_TIME, ARBITRARY_TIME,
-            /*pointerCount*/ 2, pointerProperties, pointerCoords);
-    ASSERT_EQ(INPUT_EVENT_INJECTION_FAILED, mDispatcher->injectInputEvent(
-            &event, DISPLAY_ID,
-            INJECTOR_PID, INJECTOR_UID, INPUT_EVENT_INJECTION_SYNC_NONE, 0, 0))
-            << "Should reject motion events with duplicate pointer ids.";
-}
-
-} // namespace android
diff --git a/libs/input/tests/InputReader_test.cpp b/libs/input/tests/InputReader_test.cpp
deleted file mode 100644
index aaa973d..0000000
--- a/libs/input/tests/InputReader_test.cpp
+++ /dev/null
@@ -1,5099 +0,0 @@
-/*
- * Copyright (C) 2010 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.
- */
-
-#include "../InputReader.h"
-
-#include <utils/List.h>
-#include <gtest/gtest.h>
-#include <math.h>
-
-namespace android {
-
-// An arbitrary time value.
-static const nsecs_t ARBITRARY_TIME = 1234;
-
-// Arbitrary display properties.
-static const int32_t DISPLAY_ID = 0;
-static const int32_t DISPLAY_WIDTH = 480;
-static const int32_t DISPLAY_HEIGHT = 800;
-
-// Error tolerance for floating point assertions.
-static const float EPSILON = 0.001f;
-
-template<typename T>
-static inline T min(T a, T b) {
-    return a < b ? a : b;
-}
-
-static inline float avg(float x, float y) {
-    return (x + y) / 2;
-}
-
-
-// --- FakePointerController ---
-
-class FakePointerController : public PointerControllerInterface {
-    bool mHaveBounds;
-    float mMinX, mMinY, mMaxX, mMaxY;
-    float mX, mY;
-    int32_t mButtonState;
-
-protected:
-    virtual ~FakePointerController() { }
-
-public:
-    FakePointerController() :
-        mHaveBounds(false), mMinX(0), mMinY(0), mMaxX(0), mMaxY(0), mX(0), mY(0),
-        mButtonState(0) {
-    }
-
-    void setBounds(float minX, float minY, float maxX, float maxY) {
-        mHaveBounds = true;
-        mMinX = minX;
-        mMinY = minY;
-        mMaxX = maxX;
-        mMaxY = maxY;
-    }
-
-    virtual void setPosition(float x, float y) {
-        mX = x;
-        mY = y;
-    }
-
-    virtual void setButtonState(int32_t buttonState) {
-        mButtonState = buttonState;
-    }
-
-    virtual int32_t getButtonState() const {
-        return mButtonState;
-    }
-
-    virtual void getPosition(float* outX, float* outY) const {
-        *outX = mX;
-        *outY = mY;
-    }
-
-private:
-    virtual bool getBounds(float* outMinX, float* outMinY, float* outMaxX, float* outMaxY) const {
-        *outMinX = mMinX;
-        *outMinY = mMinY;
-        *outMaxX = mMaxX;
-        *outMaxY = mMaxY;
-        return mHaveBounds;
-    }
-
-    virtual void move(float deltaX, float deltaY) {
-        mX += deltaX;
-        if (mX < mMinX) mX = mMinX;
-        if (mX > mMaxX) mX = mMaxX;
-        mY += deltaY;
-        if (mY < mMinY) mY = mMinY;
-        if (mY > mMaxY) mY = mMaxY;
-    }
-
-    virtual void fade(Transition transition) {
-    }
-
-    virtual void unfade(Transition transition) {
-    }
-
-    virtual void setPresentation(Presentation presentation) {
-    }
-
-    virtual void setSpots(const PointerCoords* spotCoords,
-            const uint32_t* spotIdToIndex, BitSet32 spotIdBits) {
-    }
-
-    virtual void clearSpots() {
-    }
-};
-
-
-// --- FakeInputReaderPolicy ---
-
-class FakeInputReaderPolicy : public InputReaderPolicyInterface {
-    InputReaderConfiguration mConfig;
-    KeyedVector<int32_t, sp<FakePointerController> > mPointerControllers;
-    Vector<InputDeviceInfo> mInputDevices;
-
-protected:
-    virtual ~FakeInputReaderPolicy() { }
-
-public:
-    FakeInputReaderPolicy() {
-    }
-
-    void setDisplayInfo(int32_t displayId, int32_t width, int32_t height, int32_t orientation) {
-        // Set the size of both the internal and external display at the same time.
-        bool isRotated = (orientation == DISPLAY_ORIENTATION_90
-                || orientation == DISPLAY_ORIENTATION_270);
-        DisplayViewport v;
-        v.displayId = displayId;
-        v.orientation = orientation;
-        v.logicalLeft = 0;
-        v.logicalTop = 0;
-        v.logicalRight = isRotated ? height : width;
-        v.logicalBottom = isRotated ? width : height;
-        v.physicalLeft = 0;
-        v.physicalTop = 0;
-        v.physicalRight = isRotated ? height : width;
-        v.physicalBottom = isRotated ? width : height;
-        v.deviceWidth = isRotated ? height : width;
-        v.deviceHeight = isRotated ? width : height;
-        mConfig.setDisplayInfo(false /*external*/, v);
-        mConfig.setDisplayInfo(true /*external*/, v);
-    }
-
-    void addExcludedDeviceName(const String8& deviceName) {
-        mConfig.excludedDeviceNames.push(deviceName);
-    }
-
-    void setPointerController(int32_t deviceId, const sp<FakePointerController>& controller) {
-        mPointerControllers.add(deviceId, controller);
-    }
-
-    const InputReaderConfiguration* getReaderConfiguration() const {
-        return &mConfig;
-    }
-
-    const Vector<InputDeviceInfo>& getInputDevices() const {
-        return mInputDevices;
-    }
-
-private:
-    virtual void getReaderConfiguration(InputReaderConfiguration* outConfig) {
-        *outConfig = mConfig;
-    }
-
-    virtual sp<PointerControllerInterface> obtainPointerController(int32_t deviceId) {
-        return mPointerControllers.valueFor(deviceId);
-    }
-
-    virtual void notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices) {
-        mInputDevices = inputDevices;
-    }
-
-    virtual sp<KeyCharacterMap> getKeyboardLayoutOverlay(const InputDeviceIdentifier& identifier) {
-        return NULL;
-    }
-
-    virtual String8 getDeviceAlias(const InputDeviceIdentifier& identifier) {
-        return String8::empty();
-    }
-};
-
-
-// --- FakeInputListener ---
-
-class FakeInputListener : public InputListenerInterface {
-private:
-    List<NotifyConfigurationChangedArgs> mNotifyConfigurationChangedArgsQueue;
-    List<NotifyDeviceResetArgs> mNotifyDeviceResetArgsQueue;
-    List<NotifyKeyArgs> mNotifyKeyArgsQueue;
-    List<NotifyMotionArgs> mNotifyMotionArgsQueue;
-    List<NotifySwitchArgs> mNotifySwitchArgsQueue;
-
-protected:
-    virtual ~FakeInputListener() { }
-
-public:
-    FakeInputListener() {
-    }
-
-    void assertNotifyConfigurationChangedWasCalled(
-            NotifyConfigurationChangedArgs* outEventArgs = NULL) {
-        ASSERT_FALSE(mNotifyConfigurationChangedArgsQueue.empty())
-                << "Expected notifyConfigurationChanged() to have been called.";
-        if (outEventArgs) {
-            *outEventArgs = *mNotifyConfigurationChangedArgsQueue.begin();
-        }
-        mNotifyConfigurationChangedArgsQueue.erase(mNotifyConfigurationChangedArgsQueue.begin());
-    }
-
-    void assertNotifyDeviceResetWasCalled(
-            NotifyDeviceResetArgs* outEventArgs = NULL) {
-        ASSERT_FALSE(mNotifyDeviceResetArgsQueue.empty())
-                << "Expected notifyDeviceReset() to have been called.";
-        if (outEventArgs) {
-            *outEventArgs = *mNotifyDeviceResetArgsQueue.begin();
-        }
-        mNotifyDeviceResetArgsQueue.erase(mNotifyDeviceResetArgsQueue.begin());
-    }
-
-    void assertNotifyKeyWasCalled(NotifyKeyArgs* outEventArgs = NULL) {
-        ASSERT_FALSE(mNotifyKeyArgsQueue.empty())
-                << "Expected notifyKey() to have been called.";
-        if (outEventArgs) {
-            *outEventArgs = *mNotifyKeyArgsQueue.begin();
-        }
-        mNotifyKeyArgsQueue.erase(mNotifyKeyArgsQueue.begin());
-    }
-
-    void assertNotifyKeyWasNotCalled() {
-        ASSERT_TRUE(mNotifyKeyArgsQueue.empty())
-                << "Expected notifyKey() to not have been called.";
-    }
-
-    void assertNotifyMotionWasCalled(NotifyMotionArgs* outEventArgs = NULL) {
-        ASSERT_FALSE(mNotifyMotionArgsQueue.empty())
-                << "Expected notifyMotion() to have been called.";
-        if (outEventArgs) {
-            *outEventArgs = *mNotifyMotionArgsQueue.begin();
-        }
-        mNotifyMotionArgsQueue.erase(mNotifyMotionArgsQueue.begin());
-    }
-
-    void assertNotifyMotionWasNotCalled() {
-        ASSERT_TRUE(mNotifyMotionArgsQueue.empty())
-                << "Expected notifyMotion() to not have been called.";
-    }
-
-    void assertNotifySwitchWasCalled(NotifySwitchArgs* outEventArgs = NULL) {
-        ASSERT_FALSE(mNotifySwitchArgsQueue.empty())
-                << "Expected notifySwitch() to have been called.";
-        if (outEventArgs) {
-            *outEventArgs = *mNotifySwitchArgsQueue.begin();
-        }
-        mNotifySwitchArgsQueue.erase(mNotifySwitchArgsQueue.begin());
-    }
-
-private:
-    virtual void notifyConfigurationChanged(const NotifyConfigurationChangedArgs* args) {
-        mNotifyConfigurationChangedArgsQueue.push_back(*args);
-    }
-
-    virtual void notifyDeviceReset(const NotifyDeviceResetArgs* args) {
-        mNotifyDeviceResetArgsQueue.push_back(*args);
-    }
-
-    virtual void notifyKey(const NotifyKeyArgs* args) {
-        mNotifyKeyArgsQueue.push_back(*args);
-    }
-
-    virtual void notifyMotion(const NotifyMotionArgs* args) {
-        mNotifyMotionArgsQueue.push_back(*args);
-    }
-
-    virtual void notifySwitch(const NotifySwitchArgs* args) {
-        mNotifySwitchArgsQueue.push_back(*args);
-    }
-};
-
-
-// --- FakeEventHub ---
-
-class FakeEventHub : public EventHubInterface {
-    struct KeyInfo {
-        int32_t keyCode;
-        uint32_t flags;
-    };
-
-    struct Device {
-        InputDeviceIdentifier identifier;
-        uint32_t classes;
-        PropertyMap configuration;
-        KeyedVector<int, RawAbsoluteAxisInfo> absoluteAxes;
-        KeyedVector<int, bool> relativeAxes;
-        KeyedVector<int32_t, int32_t> keyCodeStates;
-        KeyedVector<int32_t, int32_t> scanCodeStates;
-        KeyedVector<int32_t, int32_t> switchStates;
-        KeyedVector<int32_t, int32_t> absoluteAxisValue;
-        KeyedVector<int32_t, KeyInfo> keysByScanCode;
-        KeyedVector<int32_t, KeyInfo> keysByUsageCode;
-        KeyedVector<int32_t, bool> leds;
-        Vector<VirtualKeyDefinition> virtualKeys;
-
-        Device(uint32_t classes) :
-                classes(classes) {
-        }
-    };
-
-    KeyedVector<int32_t, Device*> mDevices;
-    Vector<String8> mExcludedDevices;
-    List<RawEvent> mEvents;
-
-protected:
-    virtual ~FakeEventHub() {
-        for (size_t i = 0; i < mDevices.size(); i++) {
-            delete mDevices.valueAt(i);
-        }
-    }
-
-public:
-    FakeEventHub() { }
-
-    void addDevice(int32_t deviceId, const String8& name, uint32_t classes) {
-        Device* device = new Device(classes);
-        device->identifier.name = name;
-        mDevices.add(deviceId, device);
-
-        enqueueEvent(ARBITRARY_TIME, deviceId, EventHubInterface::DEVICE_ADDED, 0, 0);
-    }
-
-    void removeDevice(int32_t deviceId) {
-        delete mDevices.valueFor(deviceId);
-        mDevices.removeItem(deviceId);
-
-        enqueueEvent(ARBITRARY_TIME, deviceId, EventHubInterface::DEVICE_REMOVED, 0, 0);
-    }
-
-    void finishDeviceScan() {
-        enqueueEvent(ARBITRARY_TIME, 0, EventHubInterface::FINISHED_DEVICE_SCAN, 0, 0);
-    }
-
-    void addConfigurationProperty(int32_t deviceId, const String8& key, const String8& value) {
-        Device* device = getDevice(deviceId);
-        device->configuration.addProperty(key, value);
-    }
-
-    void addConfigurationMap(int32_t deviceId, const PropertyMap* configuration) {
-        Device* device = getDevice(deviceId);
-        device->configuration.addAll(configuration);
-    }
-
-    void addAbsoluteAxis(int32_t deviceId, int axis,
-            int32_t minValue, int32_t maxValue, int flat, int fuzz, int resolution = 0) {
-        Device* device = getDevice(deviceId);
-
-        RawAbsoluteAxisInfo info;
-        info.valid = true;
-        info.minValue = minValue;
-        info.maxValue = maxValue;
-        info.flat = flat;
-        info.fuzz = fuzz;
-        info.resolution = resolution;
-        device->absoluteAxes.add(axis, info);
-    }
-
-    void addRelativeAxis(int32_t deviceId, int32_t axis) {
-        Device* device = getDevice(deviceId);
-        device->relativeAxes.add(axis, true);
-    }
-
-    void setKeyCodeState(int32_t deviceId, int32_t keyCode, int32_t state) {
-        Device* device = getDevice(deviceId);
-        device->keyCodeStates.replaceValueFor(keyCode, state);
-    }
-
-    void setScanCodeState(int32_t deviceId, int32_t scanCode, int32_t state) {
-        Device* device = getDevice(deviceId);
-        device->scanCodeStates.replaceValueFor(scanCode, state);
-    }
-
-    void setSwitchState(int32_t deviceId, int32_t switchCode, int32_t state) {
-        Device* device = getDevice(deviceId);
-        device->switchStates.replaceValueFor(switchCode, state);
-    }
-
-    void setAbsoluteAxisValue(int32_t deviceId, int32_t axis, int32_t value) {
-        Device* device = getDevice(deviceId);
-        device->absoluteAxisValue.replaceValueFor(axis, value);
-    }
-
-    void addKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
-            int32_t keyCode, uint32_t flags) {
-        Device* device = getDevice(deviceId);
-        KeyInfo info;
-        info.keyCode = keyCode;
-        info.flags = flags;
-        if (scanCode) {
-            device->keysByScanCode.add(scanCode, info);
-        }
-        if (usageCode) {
-            device->keysByUsageCode.add(usageCode, info);
-        }
-    }
-
-    void addLed(int32_t deviceId, int32_t led, bool initialState) {
-        Device* device = getDevice(deviceId);
-        device->leds.add(led, initialState);
-    }
-
-    bool getLedState(int32_t deviceId, int32_t led) {
-        Device* device = getDevice(deviceId);
-        return device->leds.valueFor(led);
-    }
-
-    Vector<String8>& getExcludedDevices() {
-        return mExcludedDevices;
-    }
-
-    void addVirtualKeyDefinition(int32_t deviceId, const VirtualKeyDefinition& definition) {
-        Device* device = getDevice(deviceId);
-        device->virtualKeys.push(definition);
-    }
-
-    void enqueueEvent(nsecs_t when, int32_t deviceId, int32_t type,
-            int32_t code, int32_t value) {
-        RawEvent event;
-        event.when = when;
-        event.deviceId = deviceId;
-        event.type = type;
-        event.code = code;
-        event.value = value;
-        mEvents.push_back(event);
-
-        if (type == EV_ABS) {
-            setAbsoluteAxisValue(deviceId, code, value);
-        }
-    }
-
-    void assertQueueIsEmpty() {
-        ASSERT_EQ(size_t(0), mEvents.size())
-                << "Expected the event queue to be empty (fully consumed).";
-    }
-
-private:
-    Device* getDevice(int32_t deviceId) const {
-        ssize_t index = mDevices.indexOfKey(deviceId);
-        return index >= 0 ? mDevices.valueAt(index) : NULL;
-    }
-
-    virtual uint32_t getDeviceClasses(int32_t deviceId) const {
-        Device* device = getDevice(deviceId);
-        return device ? device->classes : 0;
-    }
-
-    virtual InputDeviceIdentifier getDeviceIdentifier(int32_t deviceId) const {
-        Device* device = getDevice(deviceId);
-        return device ? device->identifier : InputDeviceIdentifier();
-    }
-
-    virtual int32_t getDeviceControllerNumber(int32_t deviceId) const {
-        return 0;
-    }
-
-    virtual void getConfiguration(int32_t deviceId, PropertyMap* outConfiguration) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            *outConfiguration = device->configuration;
-        }
-    }
-
-    virtual status_t getAbsoluteAxisInfo(int32_t deviceId, int axis,
-            RawAbsoluteAxisInfo* outAxisInfo) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            ssize_t index = device->absoluteAxes.indexOfKey(axis);
-            if (index >= 0) {
-                *outAxisInfo = device->absoluteAxes.valueAt(index);
-                return OK;
-            }
-        }
-        outAxisInfo->clear();
-        return -1;
-    }
-
-    virtual bool hasRelativeAxis(int32_t deviceId, int axis) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            return device->relativeAxes.indexOfKey(axis) >= 0;
-        }
-        return false;
-    }
-
-    virtual bool hasInputProperty(int32_t deviceId, int property) const {
-        return false;
-    }
-
-    virtual status_t mapKey(int32_t deviceId, int32_t scanCode, int32_t usageCode,
-            int32_t* outKeycode, uint32_t* outFlags) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            const KeyInfo* key = getKey(device, scanCode, usageCode);
-            if (key) {
-                if (outKeycode) {
-                    *outKeycode = key->keyCode;
-                }
-                if (outFlags) {
-                    *outFlags = key->flags;
-                }
-                return OK;
-            }
-        }
-        return NAME_NOT_FOUND;
-    }
-
-    const KeyInfo* getKey(Device* device, int32_t scanCode, int32_t usageCode) const {
-        if (usageCode) {
-            ssize_t index = device->keysByUsageCode.indexOfKey(usageCode);
-            if (index >= 0) {
-                return &device->keysByUsageCode.valueAt(index);
-            }
-        }
-        if (scanCode) {
-            ssize_t index = device->keysByScanCode.indexOfKey(scanCode);
-            if (index >= 0) {
-                return &device->keysByScanCode.valueAt(index);
-            }
-        }
-        return NULL;
-    }
-
-    virtual status_t mapAxis(int32_t deviceId, int32_t scanCode,
-            AxisInfo* outAxisInfo) const {
-        return NAME_NOT_FOUND;
-    }
-
-    virtual void setExcludedDevices(const Vector<String8>& devices) {
-        mExcludedDevices = devices;
-    }
-
-    virtual size_t getEvents(int timeoutMillis, RawEvent* buffer, size_t bufferSize) {
-        if (mEvents.empty()) {
-            return 0;
-        }
-
-        *buffer = *mEvents.begin();
-        mEvents.erase(mEvents.begin());
-        return 1;
-    }
-
-    virtual int32_t getScanCodeState(int32_t deviceId, int32_t scanCode) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            ssize_t index = device->scanCodeStates.indexOfKey(scanCode);
-            if (index >= 0) {
-                return device->scanCodeStates.valueAt(index);
-            }
-        }
-        return AKEY_STATE_UNKNOWN;
-    }
-
-    virtual int32_t getKeyCodeState(int32_t deviceId, int32_t keyCode) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            ssize_t index = device->keyCodeStates.indexOfKey(keyCode);
-            if (index >= 0) {
-                return device->keyCodeStates.valueAt(index);
-            }
-        }
-        return AKEY_STATE_UNKNOWN;
-    }
-
-    virtual int32_t getSwitchState(int32_t deviceId, int32_t sw) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            ssize_t index = device->switchStates.indexOfKey(sw);
-            if (index >= 0) {
-                return device->switchStates.valueAt(index);
-            }
-        }
-        return AKEY_STATE_UNKNOWN;
-    }
-
-    virtual status_t getAbsoluteAxisValue(int32_t deviceId, int32_t axis,
-            int32_t* outValue) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            ssize_t index = device->absoluteAxisValue.indexOfKey(axis);
-            if (index >= 0) {
-                *outValue = device->absoluteAxisValue.valueAt(index);
-                return OK;
-            }
-        }
-        *outValue = 0;
-        return -1;
-    }
-
-    virtual bool markSupportedKeyCodes(int32_t deviceId, size_t numCodes, const int32_t* keyCodes,
-            uint8_t* outFlags) const {
-        bool result = false;
-        Device* device = getDevice(deviceId);
-        if (device) {
-            for (size_t i = 0; i < numCodes; i++) {
-                for (size_t j = 0; j < device->keysByScanCode.size(); j++) {
-                    if (keyCodes[i] == device->keysByScanCode.valueAt(j).keyCode) {
-                        outFlags[i] = 1;
-                        result = true;
-                    }
-                }
-                for (size_t j = 0; j < device->keysByUsageCode.size(); j++) {
-                    if (keyCodes[i] == device->keysByUsageCode.valueAt(j).keyCode) {
-                        outFlags[i] = 1;
-                        result = true;
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    virtual bool hasScanCode(int32_t deviceId, int32_t scanCode) const {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            ssize_t index = device->keysByScanCode.indexOfKey(scanCode);
-            return index >= 0;
-        }
-        return false;
-    }
-
-    virtual bool hasLed(int32_t deviceId, int32_t led) const {
-        Device* device = getDevice(deviceId);
-        return device && device->leds.indexOfKey(led) >= 0;
-    }
-
-    virtual void setLedState(int32_t deviceId, int32_t led, bool on) {
-        Device* device = getDevice(deviceId);
-        if (device) {
-            ssize_t index = device->leds.indexOfKey(led);
-            if (index >= 0) {
-                device->leds.replaceValueAt(led, on);
-            } else {
-                ADD_FAILURE()
-                        << "Attempted to set the state of an LED that the EventHub declared "
-                        "was not present.  led=" << led;
-            }
-        }
-    }
-
-    virtual void getVirtualKeyDefinitions(int32_t deviceId,
-            Vector<VirtualKeyDefinition>& outVirtualKeys) const {
-        outVirtualKeys.clear();
-
-        Device* device = getDevice(deviceId);
-        if (device) {
-            outVirtualKeys.appendVector(device->virtualKeys);
-        }
-    }
-
-    virtual sp<KeyCharacterMap> getKeyCharacterMap(int32_t deviceId) const {
-        return NULL;
-    }
-
-    virtual bool setKeyboardLayoutOverlay(int32_t deviceId, const sp<KeyCharacterMap>& map) {
-        return false;
-    }
-
-    virtual void vibrate(int32_t deviceId, nsecs_t duration) {
-    }
-
-    virtual void cancelVibrate(int32_t deviceId) {
-    }
-
-    virtual bool isExternal(int32_t deviceId) const {
-        return false;
-    }
-
-    virtual void dump(String8& dump) {
-    }
-
-    virtual void monitor() {
-    }
-
-    virtual void requestReopenDevices() {
-    }
-
-    virtual void wake() {
-    }
-};
-
-
-// --- FakeInputReaderContext ---
-
-class FakeInputReaderContext : public InputReaderContext {
-    sp<EventHubInterface> mEventHub;
-    sp<InputReaderPolicyInterface> mPolicy;
-    sp<InputListenerInterface> mListener;
-    int32_t mGlobalMetaState;
-    bool mUpdateGlobalMetaStateWasCalled;
-    int32_t mGeneration;
-
-public:
-    FakeInputReaderContext(const sp<EventHubInterface>& eventHub,
-            const sp<InputReaderPolicyInterface>& policy,
-            const sp<InputListenerInterface>& listener) :
-            mEventHub(eventHub), mPolicy(policy), mListener(listener),
-            mGlobalMetaState(0) {
-    }
-
-    virtual ~FakeInputReaderContext() { }
-
-    void assertUpdateGlobalMetaStateWasCalled() {
-        ASSERT_TRUE(mUpdateGlobalMetaStateWasCalled)
-                << "Expected updateGlobalMetaState() to have been called.";
-        mUpdateGlobalMetaStateWasCalled = false;
-    }
-
-    void setGlobalMetaState(int32_t state) {
-        mGlobalMetaState = state;
-    }
-
-private:
-    virtual void updateGlobalMetaState() {
-        mUpdateGlobalMetaStateWasCalled = true;
-    }
-
-    virtual int32_t getGlobalMetaState() {
-        return mGlobalMetaState;
-    }
-
-    virtual EventHubInterface* getEventHub() {
-        return mEventHub.get();
-    }
-
-    virtual InputReaderPolicyInterface* getPolicy() {
-        return mPolicy.get();
-    }
-
-    virtual InputListenerInterface* getListener() {
-        return mListener.get();
-    }
-
-    virtual void disableVirtualKeysUntil(nsecs_t time) {
-    }
-
-    virtual bool shouldDropVirtualKey(nsecs_t now,
-            InputDevice* device, int32_t keyCode, int32_t scanCode) {
-        return false;
-    }
-
-    virtual void fadePointer() {
-    }
-
-    virtual void requestTimeoutAtTime(nsecs_t when) {
-    }
-
-    virtual int32_t bumpGeneration() {
-        return ++mGeneration;
-    }
-};
-
-
-// --- FakeInputMapper ---
-
-class FakeInputMapper : public InputMapper {
-    uint32_t mSources;
-    int32_t mKeyboardType;
-    int32_t mMetaState;
-    KeyedVector<int32_t, int32_t> mKeyCodeStates;
-    KeyedVector<int32_t, int32_t> mScanCodeStates;
-    KeyedVector<int32_t, int32_t> mSwitchStates;
-    Vector<int32_t> mSupportedKeyCodes;
-    RawEvent mLastEvent;
-
-    bool mConfigureWasCalled;
-    bool mResetWasCalled;
-    bool mProcessWasCalled;
-
-public:
-    FakeInputMapper(InputDevice* device, uint32_t sources) :
-            InputMapper(device),
-            mSources(sources), mKeyboardType(AINPUT_KEYBOARD_TYPE_NONE),
-            mMetaState(0),
-            mConfigureWasCalled(false), mResetWasCalled(false), mProcessWasCalled(false) {
-    }
-
-    virtual ~FakeInputMapper() { }
-
-    void setKeyboardType(int32_t keyboardType) {
-        mKeyboardType = keyboardType;
-    }
-
-    void setMetaState(int32_t metaState) {
-        mMetaState = metaState;
-    }
-
-    void assertConfigureWasCalled() {
-        ASSERT_TRUE(mConfigureWasCalled)
-                << "Expected configure() to have been called.";
-        mConfigureWasCalled = false;
-    }
-
-    void assertResetWasCalled() {
-        ASSERT_TRUE(mResetWasCalled)
-                << "Expected reset() to have been called.";
-        mResetWasCalled = false;
-    }
-
-    void assertProcessWasCalled(RawEvent* outLastEvent = NULL) {
-        ASSERT_TRUE(mProcessWasCalled)
-                << "Expected process() to have been called.";
-        if (outLastEvent) {
-            *outLastEvent = mLastEvent;
-        }
-        mProcessWasCalled = false;
-    }
-
-    void setKeyCodeState(int32_t keyCode, int32_t state) {
-        mKeyCodeStates.replaceValueFor(keyCode, state);
-    }
-
-    void setScanCodeState(int32_t scanCode, int32_t state) {
-        mScanCodeStates.replaceValueFor(scanCode, state);
-    }
-
-    void setSwitchState(int32_t switchCode, int32_t state) {
-        mSwitchStates.replaceValueFor(switchCode, state);
-    }
-
-    void addSupportedKeyCode(int32_t keyCode) {
-        mSupportedKeyCodes.add(keyCode);
-    }
-
-private:
-    virtual uint32_t getSources() {
-        return mSources;
-    }
-
-    virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo) {
-        InputMapper::populateDeviceInfo(deviceInfo);
-
-        if (mKeyboardType != AINPUT_KEYBOARD_TYPE_NONE) {
-            deviceInfo->setKeyboardType(mKeyboardType);
-        }
-    }
-
-    virtual void configure(nsecs_t when,
-            const InputReaderConfiguration* config, uint32_t changes) {
-        mConfigureWasCalled = true;
-    }
-
-    virtual void reset(nsecs_t when) {
-        mResetWasCalled = true;
-    }
-
-    virtual void process(const RawEvent* rawEvent) {
-        mLastEvent = *rawEvent;
-        mProcessWasCalled = true;
-    }
-
-    virtual int32_t getKeyCodeState(uint32_t sourceMask, int32_t keyCode) {
-        ssize_t index = mKeyCodeStates.indexOfKey(keyCode);
-        return index >= 0 ? mKeyCodeStates.valueAt(index) : AKEY_STATE_UNKNOWN;
-    }
-
-    virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode) {
-        ssize_t index = mScanCodeStates.indexOfKey(scanCode);
-        return index >= 0 ? mScanCodeStates.valueAt(index) : AKEY_STATE_UNKNOWN;
-    }
-
-    virtual int32_t getSwitchState(uint32_t sourceMask, int32_t switchCode) {
-        ssize_t index = mSwitchStates.indexOfKey(switchCode);
-        return index >= 0 ? mSwitchStates.valueAt(index) : AKEY_STATE_UNKNOWN;
-    }
-
-    virtual bool markSupportedKeyCodes(uint32_t sourceMask, size_t numCodes,
-            const int32_t* keyCodes, uint8_t* outFlags) {
-        bool result = false;
-        for (size_t i = 0; i < numCodes; i++) {
-            for (size_t j = 0; j < mSupportedKeyCodes.size(); j++) {
-                if (keyCodes[i] == mSupportedKeyCodes[j]) {
-                    outFlags[i] = 1;
-                    result = true;
-                }
-            }
-        }
-        return result;
-    }
-
-    virtual int32_t getMetaState() {
-        return mMetaState;
-    }
-
-    virtual void fadePointer() {
-    }
-};
-
-
-// --- InstrumentedInputReader ---
-
-class InstrumentedInputReader : public InputReader {
-    InputDevice* mNextDevice;
-
-public:
-    InstrumentedInputReader(const sp<EventHubInterface>& eventHub,
-            const sp<InputReaderPolicyInterface>& policy,
-            const sp<InputListenerInterface>& listener) :
-            InputReader(eventHub, policy, listener),
-            mNextDevice(NULL) {
-    }
-
-    virtual ~InstrumentedInputReader() {
-        if (mNextDevice) {
-            delete mNextDevice;
-        }
-    }
-
-    void setNextDevice(InputDevice* device) {
-        mNextDevice = device;
-    }
-
-    InputDevice* newDevice(int32_t deviceId, int32_t controllerNumber, const String8& name,
-            uint32_t classes) {
-        InputDeviceIdentifier identifier;
-        identifier.name = name;
-        int32_t generation = deviceId + 1;
-        return new InputDevice(&mContext, deviceId, generation, controllerNumber, identifier,
-                classes);
-    }
-
-protected:
-    virtual InputDevice* createDeviceLocked(int32_t deviceId, int32_t controllerNumber,
-            const InputDeviceIdentifier& identifier, uint32_t classes) {
-        if (mNextDevice) {
-            InputDevice* device = mNextDevice;
-            mNextDevice = NULL;
-            return device;
-        }
-        return InputReader::createDeviceLocked(deviceId, controllerNumber, identifier, classes);
-    }
-
-    friend class InputReaderTest;
-};
-
-
-// --- InputReaderTest ---
-
-class InputReaderTest : public testing::Test {
-protected:
-    sp<FakeInputListener> mFakeListener;
-    sp<FakeInputReaderPolicy> mFakePolicy;
-    sp<FakeEventHub> mFakeEventHub;
-    sp<InstrumentedInputReader> mReader;
-
-    virtual void SetUp() {
-        mFakeEventHub = new FakeEventHub();
-        mFakePolicy = new FakeInputReaderPolicy();
-        mFakeListener = new FakeInputListener();
-
-        mReader = new InstrumentedInputReader(mFakeEventHub, mFakePolicy, mFakeListener);
-    }
-
-    virtual void TearDown() {
-        mReader.clear();
-
-        mFakeListener.clear();
-        mFakePolicy.clear();
-        mFakeEventHub.clear();
-    }
-
-    void addDevice(int32_t deviceId, const String8& name, uint32_t classes,
-            const PropertyMap* configuration) {
-        mFakeEventHub->addDevice(deviceId, name, classes);
-
-        if (configuration) {
-            mFakeEventHub->addConfigurationMap(deviceId, configuration);
-        }
-        mFakeEventHub->finishDeviceScan();
-        mReader->loopOnce();
-        mReader->loopOnce();
-        mFakeEventHub->assertQueueIsEmpty();
-    }
-
-    FakeInputMapper* addDeviceWithFakeInputMapper(int32_t deviceId, int32_t controllerNumber,
-            const String8& name, uint32_t classes, uint32_t sources,
-            const PropertyMap* configuration) {
-        InputDevice* device = mReader->newDevice(deviceId, controllerNumber, name, classes);
-        FakeInputMapper* mapper = new FakeInputMapper(device, sources);
-        device->addMapper(mapper);
-        mReader->setNextDevice(device);
-        addDevice(deviceId, name, classes, configuration);
-        return mapper;
-    }
-};
-
-TEST_F(InputReaderTest, GetInputDevices) {
-    ASSERT_NO_FATAL_FAILURE(addDevice(1, String8("keyboard"),
-            INPUT_DEVICE_CLASS_KEYBOARD, NULL));
-    ASSERT_NO_FATAL_FAILURE(addDevice(2, String8("ignored"),
-            0, NULL)); // no classes so device will be ignored
-
-    Vector<InputDeviceInfo> inputDevices;
-    mReader->getInputDevices(inputDevices);
-
-    ASSERT_EQ(1U, inputDevices.size());
-    ASSERT_EQ(1, inputDevices[0].getId());
-    ASSERT_STREQ("keyboard", inputDevices[0].getIdentifier().name.string());
-    ASSERT_EQ(AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC, inputDevices[0].getKeyboardType());
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, inputDevices[0].getSources());
-    ASSERT_EQ(size_t(0), inputDevices[0].getMotionRanges().size());
-
-    // Should also have received a notification describing the new input devices.
-    inputDevices = mFakePolicy->getInputDevices();
-    ASSERT_EQ(1U, inputDevices.size());
-    ASSERT_EQ(1, inputDevices[0].getId());
-    ASSERT_STREQ("keyboard", inputDevices[0].getIdentifier().name.string());
-    ASSERT_EQ(AINPUT_KEYBOARD_TYPE_NON_ALPHABETIC, inputDevices[0].getKeyboardType());
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, inputDevices[0].getSources());
-    ASSERT_EQ(size_t(0), inputDevices[0].getMotionRanges().size());
-}
-
-TEST_F(InputReaderTest, GetKeyCodeState_ForwardsRequestsToMappers) {
-    FakeInputMapper* mapper = NULL;
-    ASSERT_NO_FATAL_FAILURE(mapper = addDeviceWithFakeInputMapper(1, 0, String8("fake"),
-            INPUT_DEVICE_CLASS_KEYBOARD, AINPUT_SOURCE_KEYBOARD, NULL));
-    mapper->setKeyCodeState(AKEYCODE_A, AKEY_STATE_DOWN);
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getKeyCodeState(0,
-            AINPUT_SOURCE_ANY, AKEYCODE_A))
-            << "Should return unknown when the device id is >= 0 but unknown.";
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getKeyCodeState(1,
-            AINPUT_SOURCE_TRACKBALL, AKEYCODE_A))
-            << "Should return unknown when the device id is valid but the sources are not supported by the device.";
-
-    ASSERT_EQ(AKEY_STATE_DOWN, mReader->getKeyCodeState(1,
-            AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, AKEYCODE_A))
-            << "Should return value provided by mapper when device id is valid and the device supports some of the sources.";
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getKeyCodeState(-1,
-            AINPUT_SOURCE_TRACKBALL, AKEYCODE_A))
-            << "Should return unknown when the device id is < 0 but the sources are not supported by any device.";
-
-    ASSERT_EQ(AKEY_STATE_DOWN, mReader->getKeyCodeState(-1,
-            AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, AKEYCODE_A))
-            << "Should return value provided by mapper when device id is < 0 and one of the devices supports some of the sources.";
-}
-
-TEST_F(InputReaderTest, GetScanCodeState_ForwardsRequestsToMappers) {
-    FakeInputMapper* mapper = NULL;
-    ASSERT_NO_FATAL_FAILURE(mapper = addDeviceWithFakeInputMapper(1, 0, String8("fake"),
-            INPUT_DEVICE_CLASS_KEYBOARD, AINPUT_SOURCE_KEYBOARD, NULL));
-    mapper->setScanCodeState(KEY_A, AKEY_STATE_DOWN);
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getScanCodeState(0,
-            AINPUT_SOURCE_ANY, KEY_A))
-            << "Should return unknown when the device id is >= 0 but unknown.";
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getScanCodeState(1,
-            AINPUT_SOURCE_TRACKBALL, KEY_A))
-            << "Should return unknown when the device id is valid but the sources are not supported by the device.";
-
-    ASSERT_EQ(AKEY_STATE_DOWN, mReader->getScanCodeState(1,
-            AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, KEY_A))
-            << "Should return value provided by mapper when device id is valid and the device supports some of the sources.";
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getScanCodeState(-1,
-            AINPUT_SOURCE_TRACKBALL, KEY_A))
-            << "Should return unknown when the device id is < 0 but the sources are not supported by any device.";
-
-    ASSERT_EQ(AKEY_STATE_DOWN, mReader->getScanCodeState(-1,
-            AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, KEY_A))
-            << "Should return value provided by mapper when device id is < 0 and one of the devices supports some of the sources.";
-}
-
-TEST_F(InputReaderTest, GetSwitchState_ForwardsRequestsToMappers) {
-    FakeInputMapper* mapper = NULL;
-    ASSERT_NO_FATAL_FAILURE(mapper = addDeviceWithFakeInputMapper(1, 0, String8("fake"),
-            INPUT_DEVICE_CLASS_KEYBOARD, AINPUT_SOURCE_KEYBOARD, NULL));
-    mapper->setSwitchState(SW_LID, AKEY_STATE_DOWN);
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getSwitchState(0,
-            AINPUT_SOURCE_ANY, SW_LID))
-            << "Should return unknown when the device id is >= 0 but unknown.";
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getSwitchState(1,
-            AINPUT_SOURCE_TRACKBALL, SW_LID))
-            << "Should return unknown when the device id is valid but the sources are not supported by the device.";
-
-    ASSERT_EQ(AKEY_STATE_DOWN, mReader->getSwitchState(1,
-            AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, SW_LID))
-            << "Should return value provided by mapper when device id is valid and the device supports some of the sources.";
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mReader->getSwitchState(-1,
-            AINPUT_SOURCE_TRACKBALL, SW_LID))
-            << "Should return unknown when the device id is < 0 but the sources are not supported by any device.";
-
-    ASSERT_EQ(AKEY_STATE_DOWN, mReader->getSwitchState(-1,
-            AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, SW_LID))
-            << "Should return value provided by mapper when device id is < 0 and one of the devices supports some of the sources.";
-}
-
-TEST_F(InputReaderTest, MarkSupportedKeyCodes_ForwardsRequestsToMappers) {
-    FakeInputMapper* mapper = NULL;
-    ASSERT_NO_FATAL_FAILURE(mapper = addDeviceWithFakeInputMapper(1, 0, String8("fake"),
-            INPUT_DEVICE_CLASS_KEYBOARD, AINPUT_SOURCE_KEYBOARD, NULL));
-    mapper->addSupportedKeyCode(AKEYCODE_A);
-    mapper->addSupportedKeyCode(AKEYCODE_B);
-
-    const int32_t keyCodes[4] = { AKEYCODE_A, AKEYCODE_B, AKEYCODE_1, AKEYCODE_2 };
-    uint8_t flags[4] = { 0, 0, 0, 1 };
-
-    ASSERT_FALSE(mReader->hasKeys(0, AINPUT_SOURCE_ANY, 4, keyCodes, flags))
-            << "Should return false when device id is >= 0 but unknown.";
-    ASSERT_TRUE(!flags[0] && !flags[1] && !flags[2] && !flags[3]);
-
-    flags[3] = 1;
-    ASSERT_FALSE(mReader->hasKeys(1, AINPUT_SOURCE_TRACKBALL, 4, keyCodes, flags))
-            << "Should return false when device id is valid but the sources are not supported by the device.";
-    ASSERT_TRUE(!flags[0] && !flags[1] && !flags[2] && !flags[3]);
-
-    flags[3] = 1;
-    ASSERT_TRUE(mReader->hasKeys(1, AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, 4, keyCodes, flags))
-            << "Should return value provided by mapper when device id is valid and the device supports some of the sources.";
-    ASSERT_TRUE(flags[0] && flags[1] && !flags[2] && !flags[3]);
-
-    flags[3] = 1;
-    ASSERT_FALSE(mReader->hasKeys(-1, AINPUT_SOURCE_TRACKBALL, 4, keyCodes, flags))
-            << "Should return false when the device id is < 0 but the sources are not supported by any device.";
-    ASSERT_TRUE(!flags[0] && !flags[1] && !flags[2] && !flags[3]);
-
-    flags[3] = 1;
-    ASSERT_TRUE(mReader->hasKeys(-1, AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TRACKBALL, 4, keyCodes, flags))
-            << "Should return value provided by mapper when device id is < 0 and one of the devices supports some of the sources.";
-    ASSERT_TRUE(flags[0] && flags[1] && !flags[2] && !flags[3]);
-}
-
-TEST_F(InputReaderTest, LoopOnce_WhenDeviceScanFinished_SendsConfigurationChanged) {
-    addDevice(1, String8("ignored"), INPUT_DEVICE_CLASS_KEYBOARD, NULL);
-
-    NotifyConfigurationChangedArgs args;
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyConfigurationChangedWasCalled(&args));
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-}
-
-TEST_F(InputReaderTest, LoopOnce_ForwardsRawEventsToMappers) {
-    FakeInputMapper* mapper = NULL;
-    ASSERT_NO_FATAL_FAILURE(mapper = addDeviceWithFakeInputMapper(1, 0, String8("fake"),
-            INPUT_DEVICE_CLASS_KEYBOARD, AINPUT_SOURCE_KEYBOARD, NULL));
-
-    mFakeEventHub->enqueueEvent(0, 1, EV_KEY, KEY_A, 1);
-    mReader->loopOnce();
-    ASSERT_NO_FATAL_FAILURE(mFakeEventHub->assertQueueIsEmpty());
-
-    RawEvent event;
-    ASSERT_NO_FATAL_FAILURE(mapper->assertProcessWasCalled(&event));
-    ASSERT_EQ(0, event.when);
-    ASSERT_EQ(1, event.deviceId);
-    ASSERT_EQ(EV_KEY, event.type);
-    ASSERT_EQ(KEY_A, event.code);
-    ASSERT_EQ(1, event.value);
-}
-
-
-// --- InputDeviceTest ---
-
-class InputDeviceTest : public testing::Test {
-protected:
-    static const char* DEVICE_NAME;
-    static const int32_t DEVICE_ID;
-    static const int32_t DEVICE_GENERATION;
-    static const int32_t DEVICE_CONTROLLER_NUMBER;
-    static const uint32_t DEVICE_CLASSES;
-
-    sp<FakeEventHub> mFakeEventHub;
-    sp<FakeInputReaderPolicy> mFakePolicy;
-    sp<FakeInputListener> mFakeListener;
-    FakeInputReaderContext* mFakeContext;
-
-    InputDevice* mDevice;
-
-    virtual void SetUp() {
-        mFakeEventHub = new FakeEventHub();
-        mFakePolicy = new FakeInputReaderPolicy();
-        mFakeListener = new FakeInputListener();
-        mFakeContext = new FakeInputReaderContext(mFakeEventHub, mFakePolicy, mFakeListener);
-
-        mFakeEventHub->addDevice(DEVICE_ID, String8(DEVICE_NAME), 0);
-        InputDeviceIdentifier identifier;
-        identifier.name = DEVICE_NAME;
-        mDevice = new InputDevice(mFakeContext, DEVICE_ID, DEVICE_GENERATION,
-                DEVICE_CONTROLLER_NUMBER, identifier, DEVICE_CLASSES);
-    }
-
-    virtual void TearDown() {
-        delete mDevice;
-
-        delete mFakeContext;
-        mFakeListener.clear();
-        mFakePolicy.clear();
-        mFakeEventHub.clear();
-    }
-};
-
-const char* InputDeviceTest::DEVICE_NAME = "device";
-const int32_t InputDeviceTest::DEVICE_ID = 1;
-const int32_t InputDeviceTest::DEVICE_GENERATION = 2;
-const int32_t InputDeviceTest::DEVICE_CONTROLLER_NUMBER = 0;
-const uint32_t InputDeviceTest::DEVICE_CLASSES = INPUT_DEVICE_CLASS_KEYBOARD
-        | INPUT_DEVICE_CLASS_TOUCH | INPUT_DEVICE_CLASS_JOYSTICK;
-
-TEST_F(InputDeviceTest, ImmutableProperties) {
-    ASSERT_EQ(DEVICE_ID, mDevice->getId());
-    ASSERT_STREQ(DEVICE_NAME, mDevice->getName());
-    ASSERT_EQ(DEVICE_CLASSES, mDevice->getClasses());
-}
-
-TEST_F(InputDeviceTest, WhenNoMappersAreRegistered_DeviceIsIgnored) {
-    // Configuration.
-    InputReaderConfiguration config;
-    mDevice->configure(ARBITRARY_TIME, &config, 0);
-
-    // Reset.
-    mDevice->reset(ARBITRARY_TIME);
-
-    NotifyDeviceResetArgs resetArgs;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyDeviceResetWasCalled(&resetArgs));
-    ASSERT_EQ(ARBITRARY_TIME, resetArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, resetArgs.deviceId);
-
-    // Metadata.
-    ASSERT_TRUE(mDevice->isIgnored());
-    ASSERT_EQ(AINPUT_SOURCE_UNKNOWN, mDevice->getSources());
-
-    InputDeviceInfo info;
-    mDevice->getDeviceInfo(&info);
-    ASSERT_EQ(DEVICE_ID, info.getId());
-    ASSERT_STREQ(DEVICE_NAME, info.getIdentifier().name.string());
-    ASSERT_EQ(AINPUT_KEYBOARD_TYPE_NONE, info.getKeyboardType());
-    ASSERT_EQ(AINPUT_SOURCE_UNKNOWN, info.getSources());
-
-    // State queries.
-    ASSERT_EQ(0, mDevice->getMetaState());
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mDevice->getKeyCodeState(AINPUT_SOURCE_KEYBOARD, 0))
-            << "Ignored device should return unknown key code state.";
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mDevice->getScanCodeState(AINPUT_SOURCE_KEYBOARD, 0))
-            << "Ignored device should return unknown scan code state.";
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mDevice->getSwitchState(AINPUT_SOURCE_KEYBOARD, 0))
-            << "Ignored device should return unknown switch state.";
-
-    const int32_t keyCodes[2] = { AKEYCODE_A, AKEYCODE_B };
-    uint8_t flags[2] = { 0, 1 };
-    ASSERT_FALSE(mDevice->markSupportedKeyCodes(AINPUT_SOURCE_KEYBOARD, 2, keyCodes, flags))
-            << "Ignored device should never mark any key codes.";
-    ASSERT_EQ(0, flags[0]) << "Flag for unsupported key should be unchanged.";
-    ASSERT_EQ(1, flags[1]) << "Flag for unsupported key should be unchanged.";
-}
-
-TEST_F(InputDeviceTest, WhenMappersAreRegistered_DeviceIsNotIgnoredAndForwardsRequestsToMappers) {
-    // Configuration.
-    mFakeEventHub->addConfigurationProperty(DEVICE_ID, String8("key"), String8("value"));
-
-    FakeInputMapper* mapper1 = new FakeInputMapper(mDevice, AINPUT_SOURCE_KEYBOARD);
-    mapper1->setKeyboardType(AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    mapper1->setMetaState(AMETA_ALT_ON);
-    mapper1->addSupportedKeyCode(AKEYCODE_A);
-    mapper1->addSupportedKeyCode(AKEYCODE_B);
-    mapper1->setKeyCodeState(AKEYCODE_A, AKEY_STATE_DOWN);
-    mapper1->setKeyCodeState(AKEYCODE_B, AKEY_STATE_UP);
-    mapper1->setScanCodeState(2, AKEY_STATE_DOWN);
-    mapper1->setScanCodeState(3, AKEY_STATE_UP);
-    mapper1->setSwitchState(4, AKEY_STATE_DOWN);
-    mDevice->addMapper(mapper1);
-
-    FakeInputMapper* mapper2 = new FakeInputMapper(mDevice, AINPUT_SOURCE_TOUCHSCREEN);
-    mapper2->setMetaState(AMETA_SHIFT_ON);
-    mDevice->addMapper(mapper2);
-
-    InputReaderConfiguration config;
-    mDevice->configure(ARBITRARY_TIME, &config, 0);
-
-    String8 propertyValue;
-    ASSERT_TRUE(mDevice->getConfiguration().tryGetProperty(String8("key"), propertyValue))
-            << "Device should have read configuration during configuration phase.";
-    ASSERT_STREQ("value", propertyValue.string());
-
-    ASSERT_NO_FATAL_FAILURE(mapper1->assertConfigureWasCalled());
-    ASSERT_NO_FATAL_FAILURE(mapper2->assertConfigureWasCalled());
-
-    // Reset
-    mDevice->reset(ARBITRARY_TIME);
-    ASSERT_NO_FATAL_FAILURE(mapper1->assertResetWasCalled());
-    ASSERT_NO_FATAL_FAILURE(mapper2->assertResetWasCalled());
-
-    NotifyDeviceResetArgs resetArgs;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyDeviceResetWasCalled(&resetArgs));
-    ASSERT_EQ(ARBITRARY_TIME, resetArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, resetArgs.deviceId);
-
-    // Metadata.
-    ASSERT_FALSE(mDevice->isIgnored());
-    ASSERT_EQ(uint32_t(AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TOUCHSCREEN), mDevice->getSources());
-
-    InputDeviceInfo info;
-    mDevice->getDeviceInfo(&info);
-    ASSERT_EQ(DEVICE_ID, info.getId());
-    ASSERT_STREQ(DEVICE_NAME, info.getIdentifier().name.string());
-    ASSERT_EQ(AINPUT_KEYBOARD_TYPE_ALPHABETIC, info.getKeyboardType());
-    ASSERT_EQ(uint32_t(AINPUT_SOURCE_KEYBOARD | AINPUT_SOURCE_TOUCHSCREEN), info.getSources());
-
-    // State queries.
-    ASSERT_EQ(AMETA_ALT_ON | AMETA_SHIFT_ON, mDevice->getMetaState())
-            << "Should query mappers and combine meta states.";
-
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mDevice->getKeyCodeState(AINPUT_SOURCE_TRACKBALL, AKEYCODE_A))
-            << "Should return unknown key code state when source not supported.";
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mDevice->getScanCodeState(AINPUT_SOURCE_TRACKBALL, AKEYCODE_A))
-            << "Should return unknown scan code state when source not supported.";
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mDevice->getSwitchState(AINPUT_SOURCE_TRACKBALL, AKEYCODE_A))
-            << "Should return unknown switch state when source not supported.";
-
-    ASSERT_EQ(AKEY_STATE_DOWN, mDevice->getKeyCodeState(AINPUT_SOURCE_KEYBOARD, AKEYCODE_A))
-            << "Should query mapper when source is supported.";
-    ASSERT_EQ(AKEY_STATE_UP, mDevice->getScanCodeState(AINPUT_SOURCE_KEYBOARD, 3))
-            << "Should query mapper when source is supported.";
-    ASSERT_EQ(AKEY_STATE_DOWN, mDevice->getSwitchState(AINPUT_SOURCE_KEYBOARD, 4))
-            << "Should query mapper when source is supported.";
-
-    const int32_t keyCodes[4] = { AKEYCODE_A, AKEYCODE_B, AKEYCODE_1, AKEYCODE_2 };
-    uint8_t flags[4] = { 0, 0, 0, 1 };
-    ASSERT_FALSE(mDevice->markSupportedKeyCodes(AINPUT_SOURCE_TRACKBALL, 4, keyCodes, flags))
-            << "Should do nothing when source is unsupported.";
-    ASSERT_EQ(0, flags[0]) << "Flag should be unchanged when source is unsupported.";
-    ASSERT_EQ(0, flags[1]) << "Flag should be unchanged when source is unsupported.";
-    ASSERT_EQ(0, flags[2]) << "Flag should be unchanged when source is unsupported.";
-    ASSERT_EQ(1, flags[3]) << "Flag should be unchanged when source is unsupported.";
-
-    ASSERT_TRUE(mDevice->markSupportedKeyCodes(AINPUT_SOURCE_KEYBOARD, 4, keyCodes, flags))
-            << "Should query mapper when source is supported.";
-    ASSERT_EQ(1, flags[0]) << "Flag for supported key should be set.";
-    ASSERT_EQ(1, flags[1]) << "Flag for supported key should be set.";
-    ASSERT_EQ(0, flags[2]) << "Flag for unsupported key should be unchanged.";
-    ASSERT_EQ(1, flags[3]) << "Flag for unsupported key should be unchanged.";
-
-    // Event handling.
-    RawEvent event;
-    mDevice->process(&event, 1);
-
-    ASSERT_NO_FATAL_FAILURE(mapper1->assertProcessWasCalled());
-    ASSERT_NO_FATAL_FAILURE(mapper2->assertProcessWasCalled());
-}
-
-
-// --- InputMapperTest ---
-
-class InputMapperTest : public testing::Test {
-protected:
-    static const char* DEVICE_NAME;
-    static const int32_t DEVICE_ID;
-    static const int32_t DEVICE_GENERATION;
-    static const int32_t DEVICE_CONTROLLER_NUMBER;
-    static const uint32_t DEVICE_CLASSES;
-
-    sp<FakeEventHub> mFakeEventHub;
-    sp<FakeInputReaderPolicy> mFakePolicy;
-    sp<FakeInputListener> mFakeListener;
-    FakeInputReaderContext* mFakeContext;
-    InputDevice* mDevice;
-
-    virtual void SetUp() {
-        mFakeEventHub = new FakeEventHub();
-        mFakePolicy = new FakeInputReaderPolicy();
-        mFakeListener = new FakeInputListener();
-        mFakeContext = new FakeInputReaderContext(mFakeEventHub, mFakePolicy, mFakeListener);
-        InputDeviceIdentifier identifier;
-        identifier.name = DEVICE_NAME;
-        mDevice = new InputDevice(mFakeContext, DEVICE_ID, DEVICE_GENERATION,
-                DEVICE_CONTROLLER_NUMBER, identifier, DEVICE_CLASSES);
-
-        mFakeEventHub->addDevice(DEVICE_ID, String8(DEVICE_NAME), 0);
-    }
-
-    virtual void TearDown() {
-        delete mDevice;
-        delete mFakeContext;
-        mFakeListener.clear();
-        mFakePolicy.clear();
-        mFakeEventHub.clear();
-    }
-
-    void addConfigurationProperty(const char* key, const char* value) {
-        mFakeEventHub->addConfigurationProperty(DEVICE_ID, String8(key), String8(value));
-    }
-
-    void addMapperAndConfigure(InputMapper* mapper) {
-        mDevice->addMapper(mapper);
-        mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(), 0);
-        mDevice->reset(ARBITRARY_TIME);
-    }
-
-    void setDisplayInfoAndReconfigure(int32_t displayId, int32_t width, int32_t height,
-            int32_t orientation) {
-        mFakePolicy->setDisplayInfo(displayId, width, height, orientation);
-        mDevice->configure(ARBITRARY_TIME, mFakePolicy->getReaderConfiguration(),
-                InputReaderConfiguration::CHANGE_DISPLAY_INFO);
-    }
-
-    static void process(InputMapper* mapper, nsecs_t when, int32_t deviceId, int32_t type,
-            int32_t code, int32_t value) {
-        RawEvent event;
-        event.when = when;
-        event.deviceId = deviceId;
-        event.type = type;
-        event.code = code;
-        event.value = value;
-        mapper->process(&event);
-    }
-
-    static void assertMotionRange(const InputDeviceInfo& info,
-            int32_t axis, uint32_t source, float min, float max, float flat, float fuzz) {
-        const InputDeviceInfo::MotionRange* range = info.getMotionRange(axis, source);
-        ASSERT_TRUE(range != NULL) << "Axis: " << axis << " Source: " << source;
-        ASSERT_EQ(axis, range->axis) << "Axis: " << axis << " Source: " << source;
-        ASSERT_EQ(source, range->source) << "Axis: " << axis << " Source: " << source;
-        ASSERT_NEAR(min, range->min, EPSILON) << "Axis: " << axis << " Source: " << source;
-        ASSERT_NEAR(max, range->max, EPSILON) << "Axis: " << axis << " Source: " << source;
-        ASSERT_NEAR(flat, range->flat, EPSILON) << "Axis: " << axis << " Source: " << source;
-        ASSERT_NEAR(fuzz, range->fuzz, EPSILON) << "Axis: " << axis << " Source: " << source;
-    }
-
-    static void assertPointerCoords(const PointerCoords& coords,
-            float x, float y, float pressure, float size,
-            float touchMajor, float touchMinor, float toolMajor, float toolMinor,
-            float orientation, float distance) {
-        ASSERT_NEAR(x, coords.getAxisValue(AMOTION_EVENT_AXIS_X), 1);
-        ASSERT_NEAR(y, coords.getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
-        ASSERT_NEAR(pressure, coords.getAxisValue(AMOTION_EVENT_AXIS_PRESSURE), EPSILON);
-        ASSERT_NEAR(size, coords.getAxisValue(AMOTION_EVENT_AXIS_SIZE), EPSILON);
-        ASSERT_NEAR(touchMajor, coords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MAJOR), 1);
-        ASSERT_NEAR(touchMinor, coords.getAxisValue(AMOTION_EVENT_AXIS_TOUCH_MINOR), 1);
-        ASSERT_NEAR(toolMajor, coords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MAJOR), 1);
-        ASSERT_NEAR(toolMinor, coords.getAxisValue(AMOTION_EVENT_AXIS_TOOL_MINOR), 1);
-        ASSERT_NEAR(orientation, coords.getAxisValue(AMOTION_EVENT_AXIS_ORIENTATION), EPSILON);
-        ASSERT_NEAR(distance, coords.getAxisValue(AMOTION_EVENT_AXIS_DISTANCE), EPSILON);
-    }
-
-    static void assertPosition(const sp<FakePointerController>& controller, float x, float y) {
-        float actualX, actualY;
-        controller->getPosition(&actualX, &actualY);
-        ASSERT_NEAR(x, actualX, 1);
-        ASSERT_NEAR(y, actualY, 1);
-    }
-};
-
-const char* InputMapperTest::DEVICE_NAME = "device";
-const int32_t InputMapperTest::DEVICE_ID = 1;
-const int32_t InputMapperTest::DEVICE_GENERATION = 2;
-const int32_t InputMapperTest::DEVICE_CONTROLLER_NUMBER = 0;
-const uint32_t InputMapperTest::DEVICE_CLASSES = 0; // not needed for current tests
-
-
-// --- SwitchInputMapperTest ---
-
-class SwitchInputMapperTest : public InputMapperTest {
-protected:
-};
-
-TEST_F(SwitchInputMapperTest, GetSources) {
-    SwitchInputMapper* mapper = new SwitchInputMapper(mDevice);
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(uint32_t(AINPUT_SOURCE_SWITCH), mapper->getSources());
-}
-
-TEST_F(SwitchInputMapperTest, GetSwitchState) {
-    SwitchInputMapper* mapper = new SwitchInputMapper(mDevice);
-    addMapperAndConfigure(mapper);
-
-    mFakeEventHub->setSwitchState(DEVICE_ID, SW_LID, 1);
-    ASSERT_EQ(1, mapper->getSwitchState(AINPUT_SOURCE_ANY, SW_LID));
-
-    mFakeEventHub->setSwitchState(DEVICE_ID, SW_LID, 0);
-    ASSERT_EQ(0, mapper->getSwitchState(AINPUT_SOURCE_ANY, SW_LID));
-}
-
-TEST_F(SwitchInputMapperTest, Process) {
-    SwitchInputMapper* mapper = new SwitchInputMapper(mDevice);
-    addMapperAndConfigure(mapper);
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SW, SW_LID, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SW, SW_JACK_PHYSICAL_INSERT, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SW, SW_HEADPHONE_INSERT, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-
-    NotifySwitchArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifySwitchWasCalled(&args));
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-    ASSERT_EQ((1 << SW_LID) | (1 << SW_JACK_PHYSICAL_INSERT), args.switchValues);
-    ASSERT_EQ((1 << SW_LID) | (1 << SW_JACK_PHYSICAL_INSERT) | (1 << SW_HEADPHONE_INSERT),
-            args.switchMask);
-    ASSERT_EQ(uint32_t(0), args.policyFlags);
-}
-
-
-// --- KeyboardInputMapperTest ---
-
-class KeyboardInputMapperTest : public InputMapperTest {
-protected:
-    void testDPadKeyRotation(KeyboardInputMapper* mapper,
-            int32_t originalScanCode, int32_t originalKeyCode, int32_t rotatedKeyCode);
-};
-
-void KeyboardInputMapperTest::testDPadKeyRotation(KeyboardInputMapper* mapper,
-        int32_t originalScanCode, int32_t originalKeyCode, int32_t rotatedKeyCode) {
-    NotifyKeyArgs args;
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, originalScanCode, 1);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
-    ASSERT_EQ(originalScanCode, args.scanCode);
-    ASSERT_EQ(rotatedKeyCode, args.keyCode);
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, originalScanCode, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
-    ASSERT_EQ(originalScanCode, args.scanCode);
-    ASSERT_EQ(rotatedKeyCode, args.keyCode);
-}
-
-
-TEST_F(KeyboardInputMapperTest, GetSources) {
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, mapper->getSources());
-}
-
-TEST_F(KeyboardInputMapperTest, Process_SimpleKeyPress) {
-    const int32_t USAGE_A = 0x070004;
-    const int32_t USAGE_UNKNOWN = 0x07ffff;
-    mFakeEventHub->addKey(DEVICE_ID, KEY_HOME, 0, AKEYCODE_HOME, POLICY_FLAG_WAKE);
-    mFakeEventHub->addKey(DEVICE_ID, 0, USAGE_A, AKEYCODE_A, POLICY_FLAG_WAKE);
-
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    // Key down by scan code.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_HOME, 1);
-    NotifyKeyArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
-    ASSERT_EQ(AKEYCODE_HOME, args.keyCode);
-    ASSERT_EQ(KEY_HOME, args.scanCode);
-    ASSERT_EQ(AMETA_NONE, args.metaState);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
-    ASSERT_EQ(POLICY_FLAG_WAKE, args.policyFlags);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Key up by scan code.
-    process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
-            EV_KEY, KEY_HOME, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(ARBITRARY_TIME + 1, args.eventTime);
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
-    ASSERT_EQ(AKEYCODE_HOME, args.keyCode);
-    ASSERT_EQ(KEY_HOME, args.scanCode);
-    ASSERT_EQ(AMETA_NONE, args.metaState);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
-    ASSERT_EQ(POLICY_FLAG_WAKE, args.policyFlags);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Key down by usage code.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_MSC, MSC_SCAN, USAGE_A);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, 0, 1);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
-    ASSERT_EQ(AKEYCODE_A, args.keyCode);
-    ASSERT_EQ(0, args.scanCode);
-    ASSERT_EQ(AMETA_NONE, args.metaState);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
-    ASSERT_EQ(POLICY_FLAG_WAKE, args.policyFlags);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Key up by usage code.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_MSC, MSC_SCAN, USAGE_A);
-    process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
-            EV_KEY, 0, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(ARBITRARY_TIME + 1, args.eventTime);
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
-    ASSERT_EQ(AKEYCODE_A, args.keyCode);
-    ASSERT_EQ(0, args.scanCode);
-    ASSERT_EQ(AMETA_NONE, args.metaState);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
-    ASSERT_EQ(POLICY_FLAG_WAKE, args.policyFlags);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Key down with unknown scan code or usage code.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_MSC, MSC_SCAN, USAGE_UNKNOWN);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_UNKNOWN, 1);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
-    ASSERT_EQ(0, args.keyCode);
-    ASSERT_EQ(KEY_UNKNOWN, args.scanCode);
-    ASSERT_EQ(AMETA_NONE, args.metaState);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
-    ASSERT_EQ(0U, args.policyFlags);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Key up with unknown scan code or usage code.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_MSC, MSC_SCAN, USAGE_UNKNOWN);
-    process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
-            EV_KEY, KEY_UNKNOWN, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(ARBITRARY_TIME + 1, args.eventTime);
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
-    ASSERT_EQ(0, args.keyCode);
-    ASSERT_EQ(KEY_UNKNOWN, args.scanCode);
-    ASSERT_EQ(AMETA_NONE, args.metaState);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM, args.flags);
-    ASSERT_EQ(0U, args.policyFlags);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-}
-
-TEST_F(KeyboardInputMapperTest, Process_ShouldUpdateMetaState) {
-    mFakeEventHub->addKey(DEVICE_ID, KEY_LEFTSHIFT, 0, AKEYCODE_SHIFT_LEFT, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_A, 0, AKEYCODE_A, 0);
-
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    // Initial metastate.
-    ASSERT_EQ(AMETA_NONE, mapper->getMetaState());
-
-    // Metakey down.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_LEFTSHIFT, 1);
-    NotifyKeyArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, mapper->getMetaState());
-    ASSERT_NO_FATAL_FAILURE(mFakeContext->assertUpdateGlobalMetaStateWasCalled());
-
-    // Key down.
-    process(mapper, ARBITRARY_TIME + 1, DEVICE_ID,
-            EV_KEY, KEY_A, 1);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, mapper->getMetaState());
-
-    // Key up.
-    process(mapper, ARBITRARY_TIME + 2, DEVICE_ID,
-            EV_KEY, KEY_A, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, mapper->getMetaState());
-
-    // Metakey up.
-    process(mapper, ARBITRARY_TIME + 3, DEVICE_ID,
-            EV_KEY, KEY_LEFTSHIFT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AMETA_NONE, args.metaState);
-    ASSERT_EQ(AMETA_NONE, mapper->getMetaState());
-    ASSERT_NO_FATAL_FAILURE(mFakeContext->assertUpdateGlobalMetaStateWasCalled());
-}
-
-TEST_F(KeyboardInputMapperTest, Process_WhenNotOrientationAware_ShouldNotRotateDPad) {
-    mFakeEventHub->addKey(DEVICE_ID, KEY_UP, 0, AKEYCODE_DPAD_UP, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_RIGHT, 0, AKEYCODE_DPAD_RIGHT, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_DOWN, 0, AKEYCODE_DPAD_DOWN, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_LEFT, 0, AKEYCODE_DPAD_LEFT, 0);
-
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_90);
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_UP, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_UP));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_RIGHT, AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_RIGHT));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_DOWN, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_DOWN));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_LEFT));
-}
-
-TEST_F(KeyboardInputMapperTest, Process_WhenOrientationAware_ShouldRotateDPad) {
-    mFakeEventHub->addKey(DEVICE_ID, KEY_UP, 0, AKEYCODE_DPAD_UP, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_RIGHT, 0, AKEYCODE_DPAD_RIGHT, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_DOWN, 0, AKEYCODE_DPAD_DOWN, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_LEFT, 0, AKEYCODE_DPAD_LEFT, 0);
-
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addConfigurationProperty("keyboard.orientationAware", "1");
-    addMapperAndConfigure(mapper);
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_0);
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_UP, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_UP));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_RIGHT, AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_RIGHT));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_DOWN, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_DOWN));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_LEFT));
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_90);
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_UP, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_LEFT));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_RIGHT, AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_UP));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_DOWN, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_RIGHT));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_DOWN));
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_180);
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_UP, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_DOWN));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_RIGHT, AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_LEFT));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_DOWN, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_UP));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_RIGHT));
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_270);
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_UP, AKEYCODE_DPAD_UP, AKEYCODE_DPAD_RIGHT));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_RIGHT, AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_DOWN));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_DOWN, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_LEFT));
-    ASSERT_NO_FATAL_FAILURE(testDPadKeyRotation(mapper,
-            KEY_LEFT, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_UP));
-
-    // Special case: if orientation changes while key is down, we still emit the same keycode
-    // in the key up as we did in the key down.
-    NotifyKeyArgs args;
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_270);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_UP, 1);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
-    ASSERT_EQ(KEY_UP, args.scanCode);
-    ASSERT_EQ(AKEYCODE_DPAD_RIGHT, args.keyCode);
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_180);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, KEY_UP, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
-    ASSERT_EQ(KEY_UP, args.scanCode);
-    ASSERT_EQ(AKEYCODE_DPAD_RIGHT, args.keyCode);
-}
-
-TEST_F(KeyboardInputMapperTest, GetKeyCodeState) {
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    mFakeEventHub->setKeyCodeState(DEVICE_ID, AKEYCODE_A, 1);
-    ASSERT_EQ(1, mapper->getKeyCodeState(AINPUT_SOURCE_ANY, AKEYCODE_A));
-
-    mFakeEventHub->setKeyCodeState(DEVICE_ID, AKEYCODE_A, 0);
-    ASSERT_EQ(0, mapper->getKeyCodeState(AINPUT_SOURCE_ANY, AKEYCODE_A));
-}
-
-TEST_F(KeyboardInputMapperTest, GetScanCodeState) {
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    mFakeEventHub->setScanCodeState(DEVICE_ID, KEY_A, 1);
-    ASSERT_EQ(1, mapper->getScanCodeState(AINPUT_SOURCE_ANY, KEY_A));
-
-    mFakeEventHub->setScanCodeState(DEVICE_ID, KEY_A, 0);
-    ASSERT_EQ(0, mapper->getScanCodeState(AINPUT_SOURCE_ANY, KEY_A));
-}
-
-TEST_F(KeyboardInputMapperTest, MarkSupportedKeyCodes) {
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    mFakeEventHub->addKey(DEVICE_ID, KEY_A, 0, AKEYCODE_A, 0);
-
-    const int32_t keyCodes[2] = { AKEYCODE_A, AKEYCODE_B };
-    uint8_t flags[2] = { 0, 0 };
-    ASSERT_TRUE(mapper->markSupportedKeyCodes(AINPUT_SOURCE_ANY, 1, keyCodes, flags));
-    ASSERT_TRUE(flags[0]);
-    ASSERT_FALSE(flags[1]);
-}
-
-TEST_F(KeyboardInputMapperTest, Process_LockedKeysShouldToggleMetaStateAndLeds) {
-    mFakeEventHub->addLed(DEVICE_ID, LED_CAPSL, true /*initially on*/);
-    mFakeEventHub->addLed(DEVICE_ID, LED_NUML, false /*initially off*/);
-    mFakeEventHub->addLed(DEVICE_ID, LED_SCROLLL, false /*initially off*/);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_CAPSLOCK, 0, AKEYCODE_CAPS_LOCK, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_NUMLOCK, 0, AKEYCODE_NUM_LOCK, 0);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_SCROLLLOCK, 0, AKEYCODE_SCROLL_LOCK, 0);
-
-    KeyboardInputMapper* mapper = new KeyboardInputMapper(mDevice,
-            AINPUT_SOURCE_KEYBOARD, AINPUT_KEYBOARD_TYPE_ALPHABETIC);
-    addMapperAndConfigure(mapper);
-
-    // Initialization should have turned all of the lights off.
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL));
-
-    // Toggle caps lock on.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_CAPSLOCK, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_CAPSLOCK, 0);
-    ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL));
-    ASSERT_EQ(AMETA_CAPS_LOCK_ON, mapper->getMetaState());
-
-    // Toggle num lock on.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_NUMLOCK, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_NUMLOCK, 0);
-    ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL));
-    ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL));
-    ASSERT_EQ(AMETA_CAPS_LOCK_ON | AMETA_NUM_LOCK_ON, mapper->getMetaState());
-
-    // Toggle caps lock off.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_CAPSLOCK, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_CAPSLOCK, 0);
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL));
-    ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL));
-    ASSERT_EQ(AMETA_NUM_LOCK_ON, mapper->getMetaState());
-
-    // Toggle scroll lock on.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_SCROLLLOCK, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_SCROLLLOCK, 0);
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL));
-    ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML));
-    ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL));
-    ASSERT_EQ(AMETA_NUM_LOCK_ON | AMETA_SCROLL_LOCK_ON, mapper->getMetaState());
-
-    // Toggle num lock off.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_NUMLOCK, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_NUMLOCK, 0);
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML));
-    ASSERT_TRUE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL));
-    ASSERT_EQ(AMETA_SCROLL_LOCK_ON, mapper->getMetaState());
-
-    // Toggle scroll lock off.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_SCROLLLOCK, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID,
-            EV_KEY, KEY_SCROLLLOCK, 0);
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_CAPSL));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_NUML));
-    ASSERT_FALSE(mFakeEventHub->getLedState(DEVICE_ID, LED_SCROLLL));
-    ASSERT_EQ(AMETA_NONE, mapper->getMetaState());
-}
-
-
-// --- CursorInputMapperTest ---
-
-class CursorInputMapperTest : public InputMapperTest {
-protected:
-    static const int32_t TRACKBALL_MOVEMENT_THRESHOLD;
-
-    sp<FakePointerController> mFakePointerController;
-
-    virtual void SetUp() {
-        InputMapperTest::SetUp();
-
-        mFakePointerController = new FakePointerController();
-        mFakePolicy->setPointerController(DEVICE_ID, mFakePointerController);
-    }
-
-    void testMotionRotation(CursorInputMapper* mapper,
-            int32_t originalX, int32_t originalY, int32_t rotatedX, int32_t rotatedY);
-};
-
-const int32_t CursorInputMapperTest::TRACKBALL_MOVEMENT_THRESHOLD = 6;
-
-void CursorInputMapperTest::testMotionRotation(CursorInputMapper* mapper,
-        int32_t originalX, int32_t originalY, int32_t rotatedX, int32_t rotatedY) {
-    NotifyMotionArgs args;
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, originalX);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, originalY);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            float(rotatedX) / TRACKBALL_MOVEMENT_THRESHOLD,
-            float(rotatedY) / TRACKBALL_MOVEMENT_THRESHOLD,
-            0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-}
-
-TEST_F(CursorInputMapperTest, WhenModeIsPointer_GetSources_ReturnsMouse) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "pointer");
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(AINPUT_SOURCE_MOUSE, mapper->getSources());
-}
-
-TEST_F(CursorInputMapperTest, WhenModeIsNavigation_GetSources_ReturnsTrackball) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(AINPUT_SOURCE_TRACKBALL, mapper->getSources());
-}
-
-TEST_F(CursorInputMapperTest, WhenModeIsPointer_PopulateDeviceInfo_ReturnsRangeFromPointerController) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "pointer");
-    addMapperAndConfigure(mapper);
-
-    InputDeviceInfo info;
-    mapper->populateDeviceInfo(&info);
-
-    // Initially there may not be a valid motion range.
-    ASSERT_EQ(NULL, info.getMotionRange(AINPUT_MOTION_RANGE_X, AINPUT_SOURCE_MOUSE));
-    ASSERT_EQ(NULL, info.getMotionRange(AINPUT_MOTION_RANGE_Y, AINPUT_SOURCE_MOUSE));
-    ASSERT_NO_FATAL_FAILURE(assertMotionRange(info,
-            AINPUT_MOTION_RANGE_PRESSURE, AINPUT_SOURCE_MOUSE, 0.0f, 1.0f, 0.0f, 0.0f));
-
-    // When the bounds are set, then there should be a valid motion range.
-    mFakePointerController->setBounds(1, 2, 800 - 1, 480 - 1);
-
-    InputDeviceInfo info2;
-    mapper->populateDeviceInfo(&info2);
-
-    ASSERT_NO_FATAL_FAILURE(assertMotionRange(info2,
-            AINPUT_MOTION_RANGE_X, AINPUT_SOURCE_MOUSE,
-            1, 800 - 1, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(assertMotionRange(info2,
-            AINPUT_MOTION_RANGE_Y, AINPUT_SOURCE_MOUSE,
-            2, 480 - 1, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(assertMotionRange(info2,
-            AINPUT_MOTION_RANGE_PRESSURE, AINPUT_SOURCE_MOUSE,
-            0.0f, 1.0f, 0.0f, 0.0f));
-}
-
-TEST_F(CursorInputMapperTest, WhenModeIsNavigation_PopulateDeviceInfo_ReturnsScaledRange) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addMapperAndConfigure(mapper);
-
-    InputDeviceInfo info;
-    mapper->populateDeviceInfo(&info);
-
-    ASSERT_NO_FATAL_FAILURE(assertMotionRange(info,
-            AINPUT_MOTION_RANGE_X, AINPUT_SOURCE_TRACKBALL,
-            -1.0f, 1.0f, 0.0f, 1.0f / TRACKBALL_MOVEMENT_THRESHOLD));
-    ASSERT_NO_FATAL_FAILURE(assertMotionRange(info,
-            AINPUT_MOTION_RANGE_Y, AINPUT_SOURCE_TRACKBALL,
-            -1.0f, 1.0f, 0.0f, 1.0f / TRACKBALL_MOVEMENT_THRESHOLD));
-    ASSERT_NO_FATAL_FAILURE(assertMotionRange(info,
-            AINPUT_MOTION_RANGE_PRESSURE, AINPUT_SOURCE_TRACKBALL,
-            0.0f, 1.0f, 0.0f, 0.0f));
-}
-
-TEST_F(CursorInputMapperTest, Process_ShouldSetAllFieldsAndIncludeGlobalMetaState) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyMotionArgs args;
-
-    // Button press.
-    // Mostly testing non x/y behavior here so we don't need to check again elsewhere.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TRACKBALL, args.source);
-    ASSERT_EQ(uint32_t(0), args.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
-    ASSERT_EQ(0, args.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, args.buttonState);
-    ASSERT_EQ(0, args.edgeFlags);
-    ASSERT_EQ(uint32_t(1), args.pointerCount);
-    ASSERT_EQ(0, args.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, args.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.xPrecision);
-    ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.yPrecision);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Button release.  Should have same down time.
-    process(mapper, ARBITRARY_TIME + 1, DEVICE_ID, EV_KEY, BTN_MOUSE, 0);
-    process(mapper, ARBITRARY_TIME + 1, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(ARBITRARY_TIME + 1, args.eventTime);
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TRACKBALL, args.source);
-    ASSERT_EQ(uint32_t(0), args.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
-    ASSERT_EQ(0, args.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
-    ASSERT_EQ(0, args.buttonState);
-    ASSERT_EQ(0, args.edgeFlags);
-    ASSERT_EQ(uint32_t(1), args.pointerCount);
-    ASSERT_EQ(0, args.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, args.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.xPrecision);
-    ASSERT_EQ(TRACKBALL_MOVEMENT_THRESHOLD, args.yPrecision);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-}
-
-TEST_F(CursorInputMapperTest, Process_ShouldHandleIndependentXYUpdates) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs args;
-
-    // Motion in X but not Y.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            1.0f / TRACKBALL_MOVEMENT_THRESHOLD, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    // Motion in Y but not X.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, -2);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            0.0f, -2.0f / TRACKBALL_MOVEMENT_THRESHOLD, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-}
-
-TEST_F(CursorInputMapperTest, Process_ShouldHandleIndependentButtonUpdates) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs args;
-
-    // Button press.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    // Button release.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-}
-
-TEST_F(CursorInputMapperTest, Process_ShouldHandleCombinedXYAndButtonUpdates) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs args;
-
-    // Combined X, Y and Button.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, -2);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            1.0f / TRACKBALL_MOVEMENT_THRESHOLD, -2.0f / TRACKBALL_MOVEMENT_THRESHOLD,
-            1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    // Move X, Y a bit while pressed.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 2);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            2.0f / TRACKBALL_MOVEMENT_THRESHOLD, 1.0f / TRACKBALL_MOVEMENT_THRESHOLD,
-            1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    // Release Button.
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MOUSE, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-}
-
-TEST_F(CursorInputMapperTest, Process_WhenNotOrientationAware_ShouldNotRotateMotions) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addMapperAndConfigure(mapper);
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT,
-            DISPLAY_ORIENTATION_90);
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0,  1,  0,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  1,  1,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  0,  1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1, -1,  1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0, -1,  0, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, -1, -1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  0, -1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  1, -1,  1));
-}
-
-TEST_F(CursorInputMapperTest, Process_WhenOrientationAware_ShouldRotateMotions) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "navigation");
-    addConfigurationProperty("cursor.orientationAware", "1");
-    addMapperAndConfigure(mapper);
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_0);
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0,  1,  0,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  1,  1,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  0,  1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1, -1,  1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0, -1,  0, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, -1, -1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  0, -1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  1, -1,  1));
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_90);
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0,  1,  1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  1,  1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  0,  0, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1, -1, -1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0, -1, -1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, -1, -1,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  0,  0,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  1,  1,  1));
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_180);
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0,  1,  0, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  1, -1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  0, -1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1, -1, -1,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0, -1,  0,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, -1,  1,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  0,  1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  1,  1, -1));
-
-    setDisplayInfoAndReconfigure(DISPLAY_ID,
-            DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_ORIENTATION_270);
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0,  1, -1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  1, -1,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1,  0,  0,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  1, -1,  1,  1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper,  0, -1,  1,  0));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1, -1,  1, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  0,  0, -1));
-    ASSERT_NO_FATAL_FAILURE(testMotionRotation(mapper, -1,  1, -1, -1));
-}
-
-TEST_F(CursorInputMapperTest, Process_ShouldHandleAllButtons) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "pointer");
-    addMapperAndConfigure(mapper);
-
-    mFakePointerController->setBounds(0, 0, 800 - 1, 480 - 1);
-    mFakePointerController->setPosition(100, 200);
-    mFakePointerController->setButtonState(0);
-
-    NotifyMotionArgs motionArgs;
-    NotifyKeyArgs keyArgs;
-
-    // press BTN_LEFT, release BTN_LEFT
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_LEFT, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, mFakePointerController->getButtonState());
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_LEFT, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    // press BTN_RIGHT + BTN_MIDDLE, release BTN_RIGHT, release BTN_MIDDLE
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_RIGHT, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MIDDLE, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
-            motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
-            mFakePointerController->getButtonState());
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_RIGHT, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_MIDDLE, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    // press BTN_BACK, release BTN_BACK
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_BACK, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_BACK, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-
-    // press BTN_SIDE, release BTN_SIDE
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_SIDE, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_SIDE, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-
-    // press BTN_FORWARD, release BTN_FORWARD
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_FORWARD, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_FORWARD, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-
-    // press BTN_EXTRA, release BTN_EXTRA
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_EXTRA, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_EXTRA, 0);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, mFakePointerController->getButtonState());
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            100.0f, 200.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-}
-
-TEST_F(CursorInputMapperTest, Process_WhenModeIsPointer_ShouldMoveThePointerAround) {
-    CursorInputMapper* mapper = new CursorInputMapper(mDevice);
-    addConfigurationProperty("cursor.mode", "pointer");
-    addMapperAndConfigure(mapper);
-
-    mFakePointerController->setBounds(0, 0, 800 - 1, 480 - 1);
-    mFakePointerController->setPosition(100, 200);
-    mFakePointerController->setButtonState(0);
-
-    NotifyMotionArgs args;
-
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_X, 10);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_REL, REL_Y, 20);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, args.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            110.0f, 220.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f));
-    ASSERT_NO_FATAL_FAILURE(assertPosition(mFakePointerController, 110.0f, 220.0f));
-}
-
-
-// --- TouchInputMapperTest ---
-
-class TouchInputMapperTest : public InputMapperTest {
-protected:
-    static const int32_t RAW_X_MIN;
-    static const int32_t RAW_X_MAX;
-    static const int32_t RAW_Y_MIN;
-    static const int32_t RAW_Y_MAX;
-    static const int32_t RAW_TOUCH_MIN;
-    static const int32_t RAW_TOUCH_MAX;
-    static const int32_t RAW_TOOL_MIN;
-    static const int32_t RAW_TOOL_MAX;
-    static const int32_t RAW_PRESSURE_MIN;
-    static const int32_t RAW_PRESSURE_MAX;
-    static const int32_t RAW_ORIENTATION_MIN;
-    static const int32_t RAW_ORIENTATION_MAX;
-    static const int32_t RAW_DISTANCE_MIN;
-    static const int32_t RAW_DISTANCE_MAX;
-    static const int32_t RAW_TILT_MIN;
-    static const int32_t RAW_TILT_MAX;
-    static const int32_t RAW_ID_MIN;
-    static const int32_t RAW_ID_MAX;
-    static const int32_t RAW_SLOT_MIN;
-    static const int32_t RAW_SLOT_MAX;
-    static const float X_PRECISION;
-    static const float Y_PRECISION;
-
-    static const float GEOMETRIC_SCALE;
-
-    static const VirtualKeyDefinition VIRTUAL_KEYS[2];
-
-    enum Axes {
-        POSITION = 1 << 0,
-        TOUCH = 1 << 1,
-        TOOL = 1 << 2,
-        PRESSURE = 1 << 3,
-        ORIENTATION = 1 << 4,
-        MINOR = 1 << 5,
-        ID = 1 << 6,
-        DISTANCE = 1 << 7,
-        TILT = 1 << 8,
-        SLOT = 1 << 9,
-        TOOL_TYPE = 1 << 10,
-    };
-
-    void prepareDisplay(int32_t orientation);
-    void prepareVirtualKeys();
-    int32_t toRawX(float displayX);
-    int32_t toRawY(float displayY);
-    float toDisplayX(int32_t rawX);
-    float toDisplayY(int32_t rawY);
-};
-
-const int32_t TouchInputMapperTest::RAW_X_MIN = 25;
-const int32_t TouchInputMapperTest::RAW_X_MAX = 1019;
-const int32_t TouchInputMapperTest::RAW_Y_MIN = 30;
-const int32_t TouchInputMapperTest::RAW_Y_MAX = 1009;
-const int32_t TouchInputMapperTest::RAW_TOUCH_MIN = 0;
-const int32_t TouchInputMapperTest::RAW_TOUCH_MAX = 31;
-const int32_t TouchInputMapperTest::RAW_TOOL_MIN = 0;
-const int32_t TouchInputMapperTest::RAW_TOOL_MAX = 15;
-const int32_t TouchInputMapperTest::RAW_PRESSURE_MIN = RAW_TOUCH_MIN;
-const int32_t TouchInputMapperTest::RAW_PRESSURE_MAX = RAW_TOUCH_MAX;
-const int32_t TouchInputMapperTest::RAW_ORIENTATION_MIN = -7;
-const int32_t TouchInputMapperTest::RAW_ORIENTATION_MAX = 7;
-const int32_t TouchInputMapperTest::RAW_DISTANCE_MIN = 0;
-const int32_t TouchInputMapperTest::RAW_DISTANCE_MAX = 7;
-const int32_t TouchInputMapperTest::RAW_TILT_MIN = 0;
-const int32_t TouchInputMapperTest::RAW_TILT_MAX = 150;
-const int32_t TouchInputMapperTest::RAW_ID_MIN = 0;
-const int32_t TouchInputMapperTest::RAW_ID_MAX = 9;
-const int32_t TouchInputMapperTest::RAW_SLOT_MIN = 0;
-const int32_t TouchInputMapperTest::RAW_SLOT_MAX = 9;
-const float TouchInputMapperTest::X_PRECISION = float(RAW_X_MAX - RAW_X_MIN + 1) / DISPLAY_WIDTH;
-const float TouchInputMapperTest::Y_PRECISION = float(RAW_Y_MAX - RAW_Y_MIN + 1) / DISPLAY_HEIGHT;
-
-const float TouchInputMapperTest::GEOMETRIC_SCALE =
-        avg(float(DISPLAY_WIDTH) / (RAW_X_MAX - RAW_X_MIN + 1),
-                float(DISPLAY_HEIGHT) / (RAW_Y_MAX - RAW_Y_MIN + 1));
-
-const VirtualKeyDefinition TouchInputMapperTest::VIRTUAL_KEYS[2] = {
-        { KEY_HOME, 60, DISPLAY_HEIGHT + 15, 20, 20 },
-        { KEY_MENU, DISPLAY_HEIGHT - 60, DISPLAY_WIDTH + 15, 20, 20 },
-};
-
-void TouchInputMapperTest::prepareDisplay(int32_t orientation) {
-    setDisplayInfoAndReconfigure(DISPLAY_ID, DISPLAY_WIDTH, DISPLAY_HEIGHT, orientation);
-}
-
-void TouchInputMapperTest::prepareVirtualKeys() {
-    mFakeEventHub->addVirtualKeyDefinition(DEVICE_ID, VIRTUAL_KEYS[0]);
-    mFakeEventHub->addVirtualKeyDefinition(DEVICE_ID, VIRTUAL_KEYS[1]);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_HOME, 0, AKEYCODE_HOME, POLICY_FLAG_WAKE);
-    mFakeEventHub->addKey(DEVICE_ID, KEY_MENU, 0, AKEYCODE_MENU, POLICY_FLAG_WAKE);
-}
-
-int32_t TouchInputMapperTest::toRawX(float displayX) {
-    return int32_t(displayX * (RAW_X_MAX - RAW_X_MIN + 1) / DISPLAY_WIDTH + RAW_X_MIN);
-}
-
-int32_t TouchInputMapperTest::toRawY(float displayY) {
-    return int32_t(displayY * (RAW_Y_MAX - RAW_Y_MIN + 1) / DISPLAY_HEIGHT + RAW_Y_MIN);
-}
-
-float TouchInputMapperTest::toDisplayX(int32_t rawX) {
-    return float(rawX - RAW_X_MIN) * DISPLAY_WIDTH / (RAW_X_MAX - RAW_X_MIN + 1);
-}
-
-float TouchInputMapperTest::toDisplayY(int32_t rawY) {
-    return float(rawY - RAW_Y_MIN) * DISPLAY_HEIGHT / (RAW_Y_MAX - RAW_Y_MIN + 1);
-}
-
-
-// --- SingleTouchInputMapperTest ---
-
-class SingleTouchInputMapperTest : public TouchInputMapperTest {
-protected:
-    void prepareButtons();
-    void prepareAxes(int axes);
-
-    void processDown(SingleTouchInputMapper* mapper, int32_t x, int32_t y);
-    void processMove(SingleTouchInputMapper* mapper, int32_t x, int32_t y);
-    void processUp(SingleTouchInputMapper* mappery);
-    void processPressure(SingleTouchInputMapper* mapper, int32_t pressure);
-    void processToolMajor(SingleTouchInputMapper* mapper, int32_t toolMajor);
-    void processDistance(SingleTouchInputMapper* mapper, int32_t distance);
-    void processTilt(SingleTouchInputMapper* mapper, int32_t tiltX, int32_t tiltY);
-    void processKey(SingleTouchInputMapper* mapper, int32_t code, int32_t value);
-    void processSync(SingleTouchInputMapper* mapper);
-};
-
-void SingleTouchInputMapperTest::prepareButtons() {
-    mFakeEventHub->addKey(DEVICE_ID, BTN_TOUCH, 0, AKEYCODE_UNKNOWN, 0);
-}
-
-void SingleTouchInputMapperTest::prepareAxes(int axes) {
-    if (axes & POSITION) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_X,
-                RAW_X_MIN, RAW_X_MAX, 0, 0);
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_Y,
-                RAW_Y_MIN, RAW_Y_MAX, 0, 0);
-    }
-    if (axes & PRESSURE) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_PRESSURE,
-                RAW_PRESSURE_MIN, RAW_PRESSURE_MAX, 0, 0);
-    }
-    if (axes & TOOL) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_TOOL_WIDTH,
-                RAW_TOOL_MIN, RAW_TOOL_MAX, 0, 0);
-    }
-    if (axes & DISTANCE) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_DISTANCE,
-                RAW_DISTANCE_MIN, RAW_DISTANCE_MAX, 0, 0);
-    }
-    if (axes & TILT) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_TILT_X,
-                RAW_TILT_MIN, RAW_TILT_MAX, 0, 0);
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_TILT_Y,
-                RAW_TILT_MIN, RAW_TILT_MAX, 0, 0);
-    }
-}
-
-void SingleTouchInputMapperTest::processDown(SingleTouchInputMapper* mapper, int32_t x, int32_t y) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_TOUCH, 1);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_X, x);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_Y, y);
-}
-
-void SingleTouchInputMapperTest::processMove(SingleTouchInputMapper* mapper, int32_t x, int32_t y) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_X, x);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_Y, y);
-}
-
-void SingleTouchInputMapperTest::processUp(SingleTouchInputMapper* mapper) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, BTN_TOUCH, 0);
-}
-
-void SingleTouchInputMapperTest::processPressure(
-        SingleTouchInputMapper* mapper, int32_t pressure) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_PRESSURE, pressure);
-}
-
-void SingleTouchInputMapperTest::processToolMajor(
-        SingleTouchInputMapper* mapper, int32_t toolMajor) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_TOOL_WIDTH, toolMajor);
-}
-
-void SingleTouchInputMapperTest::processDistance(
-        SingleTouchInputMapper* mapper, int32_t distance) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_DISTANCE, distance);
-}
-
-void SingleTouchInputMapperTest::processTilt(
-        SingleTouchInputMapper* mapper, int32_t tiltX, int32_t tiltY) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_TILT_X, tiltX);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_TILT_Y, tiltY);
-}
-
-void SingleTouchInputMapperTest::processKey(
-        SingleTouchInputMapper* mapper, int32_t code, int32_t value) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, code, value);
-}
-
-void SingleTouchInputMapperTest::processSync(SingleTouchInputMapper* mapper) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-}
-
-
-TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsNotSpecifiedAndNotACursor_ReturnsPointer) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    prepareButtons();
-    prepareAxes(POSITION);
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(AINPUT_SOURCE_MOUSE, mapper->getSources());
-}
-
-TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsNotSpecifiedAndIsACursor_ReturnsTouchPad) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    mFakeEventHub->addRelativeAxis(DEVICE_ID, REL_X);
-    mFakeEventHub->addRelativeAxis(DEVICE_ID, REL_Y);
-    prepareButtons();
-    prepareAxes(POSITION);
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHPAD, mapper->getSources());
-}
-
-TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsTouchPad_ReturnsTouchPad) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    prepareButtons();
-    prepareAxes(POSITION);
-    addConfigurationProperty("touch.deviceType", "touchPad");
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHPAD, mapper->getSources());
-}
-
-TEST_F(SingleTouchInputMapperTest, GetSources_WhenDeviceTypeIsTouchScreen_ReturnsTouchScreen) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    prepareButtons();
-    prepareAxes(POSITION);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    addMapperAndConfigure(mapper);
-
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, mapper->getSources());
-}
-
-TEST_F(SingleTouchInputMapperTest, GetKeyCodeState) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    // Unknown key.
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mapper->getKeyCodeState(AINPUT_SOURCE_ANY, AKEYCODE_A));
-
-    // Virtual key is down.
-    int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
-    int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
-    processDown(mapper, x, y);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
-    ASSERT_EQ(AKEY_STATE_VIRTUAL, mapper->getKeyCodeState(AINPUT_SOURCE_ANY, AKEYCODE_HOME));
-
-    // Virtual key is up.
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
-    ASSERT_EQ(AKEY_STATE_UP, mapper->getKeyCodeState(AINPUT_SOURCE_ANY, AKEYCODE_HOME));
-}
-
-TEST_F(SingleTouchInputMapperTest, GetScanCodeState) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    // Unknown key.
-    ASSERT_EQ(AKEY_STATE_UNKNOWN, mapper->getScanCodeState(AINPUT_SOURCE_ANY, KEY_A));
-
-    // Virtual key is down.
-    int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
-    int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
-    processDown(mapper, x, y);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
-    ASSERT_EQ(AKEY_STATE_VIRTUAL, mapper->getScanCodeState(AINPUT_SOURCE_ANY, KEY_HOME));
-
-    // Virtual key is up.
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled());
-
-    ASSERT_EQ(AKEY_STATE_UP, mapper->getScanCodeState(AINPUT_SOURCE_ANY, KEY_HOME));
-}
-
-TEST_F(SingleTouchInputMapperTest, MarkSupportedKeyCodes) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    const int32_t keys[2] = { AKEYCODE_HOME, AKEYCODE_A };
-    uint8_t flags[2] = { 0, 0 };
-    ASSERT_TRUE(mapper->markSupportedKeyCodes(AINPUT_SOURCE_ANY, 2, keys, flags));
-    ASSERT_TRUE(flags[0]);
-    ASSERT_FALSE(flags[1]);
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_WhenVirtualKeyIsPressedAndReleasedNormally_SendsKeyDownAndKeyUp) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyKeyArgs args;
-
-    // Press virtual key.
-    int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
-    int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
-    processDown(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(POLICY_FLAG_VIRTUAL, args.policyFlags);
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, args.action);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY, args.flags);
-    ASSERT_EQ(AKEYCODE_HOME, args.keyCode);
-    ASSERT_EQ(KEY_HOME, args.scanCode);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Release virtual key.
-    processUp(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&args));
-    ASSERT_EQ(ARBITRARY_TIME, args.eventTime);
-    ASSERT_EQ(DEVICE_ID, args.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, args.source);
-    ASSERT_EQ(POLICY_FLAG_VIRTUAL, args.policyFlags);
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, args.action);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY, args.flags);
-    ASSERT_EQ(AKEYCODE_HOME, args.keyCode);
-    ASSERT_EQ(KEY_HOME, args.scanCode);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, args.metaState);
-    ASSERT_EQ(ARBITRARY_TIME, args.downTime);
-
-    // Should not have sent any motions.
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_WhenVirtualKeyIsPressedAndMovedOutOfBounds_SendsKeyDownAndKeyCancel) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyKeyArgs keyArgs;
-
-    // Press virtual key.
-    int32_t x = toRawX(VIRTUAL_KEYS[0].centerX);
-    int32_t y = toRawY(VIRTUAL_KEYS[0].centerY);
-    processDown(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(ARBITRARY_TIME, keyArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, keyArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, keyArgs.source);
-    ASSERT_EQ(POLICY_FLAG_VIRTUAL, keyArgs.policyFlags);
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY, keyArgs.flags);
-    ASSERT_EQ(AKEYCODE_HOME, keyArgs.keyCode);
-    ASSERT_EQ(KEY_HOME, keyArgs.scanCode);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, keyArgs.metaState);
-    ASSERT_EQ(ARBITRARY_TIME, keyArgs.downTime);
-
-    // Move out of bounds.  This should generate a cancel and a pointer down since we moved
-    // into the display area.
-    y -= 100;
-    processMove(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(ARBITRARY_TIME, keyArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, keyArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_KEYBOARD, keyArgs.source);
-    ASSERT_EQ(POLICY_FLAG_VIRTUAL, keyArgs.policyFlags);
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEY_EVENT_FLAG_FROM_SYSTEM | AKEY_EVENT_FLAG_VIRTUAL_HARD_KEY
-            | AKEY_EVENT_FLAG_CANCELED, keyArgs.flags);
-    ASSERT_EQ(AKEYCODE_HOME, keyArgs.keyCode);
-    ASSERT_EQ(KEY_HOME, keyArgs.scanCode);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, keyArgs.metaState);
-    ASSERT_EQ(ARBITRARY_TIME, keyArgs.downTime);
-
-    NotifyMotionArgs motionArgs;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Keep moving out of bounds.  Should generate a pointer move.
-    y -= 50;
-    processMove(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Release out of bounds.  Should generate a pointer up.
-    processUp(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Should not have sent any more keys or motions.
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_WhenTouchStartsOutsideDisplayAndMovesIn_SendsDownAsTouchEntersDisplay) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyMotionArgs motionArgs;
-
-    // Initially go down out of bounds.
-    int32_t x = -10;
-    int32_t y = -10;
-    processDown(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-
-    // Move into the display area.  Should generate a pointer down.
-    x = 50;
-    y = 75;
-    processMove(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Release.  Should generate a pointer up.
-    processUp(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Should not have sent any more keys or motions.
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_NormalSingleTouchGesture) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyMotionArgs motionArgs;
-
-    // Down.
-    int32_t x = 100;
-    int32_t y = 125;
-    processDown(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Move.
-    x += 50;
-    y += 75;
-    processMove(mapper, x, y);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Up.
-    processUp(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x), toDisplayY(y), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Should not have sent any more keys or motions.
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_WhenNotOrientationAware_DoesNotRotateMotions) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareButtons();
-    prepareAxes(POSITION);
-    addConfigurationProperty("touch.orientationAware", "0");
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs args;
-
-    // Rotation 90.
-    prepareDisplay(DISPLAY_ORIENTATION_90);
-    processDown(mapper, toRawX(50), toRawY(75));
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
-    ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
-
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_WhenOrientationAware_RotatesMotions) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareButtons();
-    prepareAxes(POSITION);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs args;
-
-    // Rotation 0.
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    processDown(mapper, toRawX(50), toRawY(75));
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
-    ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
-
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
-
-    // Rotation 90.
-    prepareDisplay(DISPLAY_ORIENTATION_90);
-    processDown(mapper, RAW_X_MAX - toRawX(75) + RAW_X_MIN, toRawY(50));
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
-    ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
-
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
-
-    // Rotation 180.
-    prepareDisplay(DISPLAY_ORIENTATION_180);
-    processDown(mapper, RAW_X_MAX - toRawX(50) + RAW_X_MIN, RAW_Y_MAX - toRawY(75) + RAW_Y_MIN);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
-    ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
-
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
-
-    // Rotation 270.
-    prepareDisplay(DISPLAY_ORIENTATION_270);
-    processDown(mapper, toRawX(75), RAW_Y_MAX - toRawY(50) + RAW_Y_MIN);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NEAR(50, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_X), 1);
-    ASSERT_NEAR(75, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_Y), 1);
-
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled());
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_AllAxes_DefaultCalibration) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION | PRESSURE | TOOL | DISTANCE | TILT);
-    addMapperAndConfigure(mapper);
-
-    // These calculations are based on the input device calibration documentation.
-    int32_t rawX = 100;
-    int32_t rawY = 200;
-    int32_t rawPressure = 10;
-    int32_t rawToolMajor = 12;
-    int32_t rawDistance = 2;
-    int32_t rawTiltX = 30;
-    int32_t rawTiltY = 110;
-
-    float x = toDisplayX(rawX);
-    float y = toDisplayY(rawY);
-    float pressure = float(rawPressure) / RAW_PRESSURE_MAX;
-    float size = float(rawToolMajor) / RAW_TOOL_MAX;
-    float tool = float(rawToolMajor) * GEOMETRIC_SCALE;
-    float distance = float(rawDistance);
-
-    float tiltCenter = (RAW_TILT_MAX + RAW_TILT_MIN) * 0.5f;
-    float tiltScale = M_PI / 180;
-    float tiltXAngle = (rawTiltX - tiltCenter) * tiltScale;
-    float tiltYAngle = (rawTiltY - tiltCenter) * tiltScale;
-    float orientation = atan2f(-sinf(tiltXAngle), sinf(tiltYAngle));
-    float tilt = acosf(cosf(tiltXAngle) * cosf(tiltYAngle));
-
-    processDown(mapper, rawX, rawY);
-    processPressure(mapper, rawPressure);
-    processToolMajor(mapper, rawToolMajor);
-    processDistance(mapper, rawDistance);
-    processTilt(mapper, rawTiltX, rawTiltY);
-    processSync(mapper);
-
-    NotifyMotionArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            x, y, pressure, size, tool, tool, tool, tool, orientation, distance));
-    ASSERT_EQ(tilt, args.pointerCoords[0].getAxisValue(AMOTION_EVENT_AXIS_TILT));
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllButtons) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-    NotifyKeyArgs keyArgs;
-
-    processDown(mapper, 100, 200);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.buttonState);
-
-    // press BTN_LEFT, release BTN_LEFT
-    processKey(mapper, BTN_LEFT, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, motionArgs.buttonState);
-
-    processKey(mapper, BTN_LEFT, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // press BTN_RIGHT + BTN_MIDDLE, release BTN_RIGHT, release BTN_MIDDLE
-    processKey(mapper, BTN_RIGHT, 1);
-    processKey(mapper, BTN_MIDDLE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
-            motionArgs.buttonState);
-
-    processKey(mapper, BTN_RIGHT, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_MIDDLE, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // press BTN_BACK, release BTN_BACK
-    processKey(mapper, BTN_BACK, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_BACK, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-
-    // press BTN_SIDE, release BTN_SIDE
-    processKey(mapper, BTN_SIDE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_SIDE, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-
-    // press BTN_FORWARD, release BTN_FORWARD
-    processKey(mapper, BTN_FORWARD, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_FORWARD, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-
-    // press BTN_EXTRA, release BTN_EXTRA
-    processKey(mapper, BTN_EXTRA, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_EXTRA, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-
-    // press BTN_STYLUS, release BTN_STYLUS
-    processKey(mapper, BTN_STYLUS, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY, motionArgs.buttonState);
-
-    processKey(mapper, BTN_STYLUS, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // press BTN_STYLUS2, release BTN_STYLUS2
-    processKey(mapper, BTN_STYLUS2, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
-
-    processKey(mapper, BTN_STYLUS2, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // release touch
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.buttonState);
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-
-    // default tool type is finger
-    processDown(mapper, 100, 200);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // eraser
-    processKey(mapper, BTN_TOOL_RUBBER, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
-
-    // stylus
-    processKey(mapper, BTN_TOOL_RUBBER, 0);
-    processKey(mapper, BTN_TOOL_PEN, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // brush
-    processKey(mapper, BTN_TOOL_PEN, 0);
-    processKey(mapper, BTN_TOOL_BRUSH, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // pencil
-    processKey(mapper, BTN_TOOL_BRUSH, 0);
-    processKey(mapper, BTN_TOOL_PENCIL, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // airbrush
-    processKey(mapper, BTN_TOOL_PENCIL, 0);
-    processKey(mapper, BTN_TOOL_AIRBRUSH, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // mouse
-    processKey(mapper, BTN_TOOL_AIRBRUSH, 0);
-    processKey(mapper, BTN_TOOL_MOUSE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
-
-    // lens
-    processKey(mapper, BTN_TOOL_MOUSE, 0);
-    processKey(mapper, BTN_TOOL_LENS, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
-
-    // double-tap
-    processKey(mapper, BTN_TOOL_LENS, 0);
-    processKey(mapper, BTN_TOOL_DOUBLETAP, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // triple-tap
-    processKey(mapper, BTN_TOOL_DOUBLETAP, 0);
-    processKey(mapper, BTN_TOOL_TRIPLETAP, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // quad-tap
-    processKey(mapper, BTN_TOOL_TRIPLETAP, 0);
-    processKey(mapper, BTN_TOOL_QUADTAP, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // finger
-    processKey(mapper, BTN_TOOL_QUADTAP, 0);
-    processKey(mapper, BTN_TOOL_FINGER, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // stylus trumps finger
-    processKey(mapper, BTN_TOOL_PEN, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // eraser trumps stylus
-    processKey(mapper, BTN_TOOL_RUBBER, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
-
-    // mouse trumps eraser
-    processKey(mapper, BTN_TOOL_MOUSE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
-
-    // back to default tool type
-    processKey(mapper, BTN_TOOL_MOUSE, 0);
-    processKey(mapper, BTN_TOOL_RUBBER, 0);
-    processKey(mapper, BTN_TOOL_PEN, 0);
-    processKey(mapper, BTN_TOOL_FINGER, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_WhenBtnTouchPresent_HoversIfItsValueIsZero) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION);
-    mFakeEventHub->addKey(DEVICE_ID, BTN_TOOL_FINGER, 0, AKEYCODE_UNKNOWN, 0);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-
-    // initially hovering because BTN_TOUCH not sent yet, pressure defaults to 0
-    processKey(mapper, BTN_TOOL_FINGER, 1);
-    processMove(mapper, 100, 200);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // move a little
-    processMove(mapper, 150, 250);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // down when BTN_TOUCH is pressed, pressure defaults to 1
-    processKey(mapper, BTN_TOUCH, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // up when BTN_TOUCH is released, hover restored
-    processKey(mapper, BTN_TOUCH, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // exit hover when pointer goes away
-    processKey(mapper, BTN_TOOL_FINGER, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-}
-
-TEST_F(SingleTouchInputMapperTest, Process_WhenAbsPressureIsPresent_HoversIfItsValueIsZero) {
-    SingleTouchInputMapper* mapper = new SingleTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareButtons();
-    prepareAxes(POSITION | PRESSURE);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-
-    // initially hovering because pressure is 0
-    processDown(mapper, 100, 200);
-    processPressure(mapper, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // move a little
-    processMove(mapper, 150, 250);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // down when pressure is non-zero
-    processPressure(mapper, RAW_PRESSURE_MAX);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // up when pressure becomes 0, hover restored
-    processPressure(mapper, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // exit hover when pointer goes away
-    processUp(mapper);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-}
-
-
-// --- MultiTouchInputMapperTest ---
-
-class MultiTouchInputMapperTest : public TouchInputMapperTest {
-protected:
-    void prepareAxes(int axes);
-
-    void processPosition(MultiTouchInputMapper* mapper, int32_t x, int32_t y);
-    void processTouchMajor(MultiTouchInputMapper* mapper, int32_t touchMajor);
-    void processTouchMinor(MultiTouchInputMapper* mapper, int32_t touchMinor);
-    void processToolMajor(MultiTouchInputMapper* mapper, int32_t toolMajor);
-    void processToolMinor(MultiTouchInputMapper* mapper, int32_t toolMinor);
-    void processOrientation(MultiTouchInputMapper* mapper, int32_t orientation);
-    void processPressure(MultiTouchInputMapper* mapper, int32_t pressure);
-    void processDistance(MultiTouchInputMapper* mapper, int32_t distance);
-    void processId(MultiTouchInputMapper* mapper, int32_t id);
-    void processSlot(MultiTouchInputMapper* mapper, int32_t slot);
-    void processToolType(MultiTouchInputMapper* mapper, int32_t toolType);
-    void processKey(MultiTouchInputMapper* mapper, int32_t code, int32_t value);
-    void processMTSync(MultiTouchInputMapper* mapper);
-    void processSync(MultiTouchInputMapper* mapper);
-};
-
-void MultiTouchInputMapperTest::prepareAxes(int axes) {
-    if (axes & POSITION) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_POSITION_X,
-                RAW_X_MIN, RAW_X_MAX, 0, 0);
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_POSITION_Y,
-                RAW_Y_MIN, RAW_Y_MAX, 0, 0);
-    }
-    if (axes & TOUCH) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_TOUCH_MAJOR,
-                RAW_TOUCH_MIN, RAW_TOUCH_MAX, 0, 0);
-        if (axes & MINOR) {
-            mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_TOUCH_MINOR,
-                    RAW_TOUCH_MIN, RAW_TOUCH_MAX, 0, 0);
-        }
-    }
-    if (axes & TOOL) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_WIDTH_MAJOR,
-                RAW_TOOL_MIN, RAW_TOOL_MAX, 0, 0);
-        if (axes & MINOR) {
-            mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_WIDTH_MINOR,
-                    RAW_TOOL_MAX, RAW_TOOL_MAX, 0, 0);
-        }
-    }
-    if (axes & ORIENTATION) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_ORIENTATION,
-                RAW_ORIENTATION_MIN, RAW_ORIENTATION_MAX, 0, 0);
-    }
-    if (axes & PRESSURE) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_PRESSURE,
-                RAW_PRESSURE_MIN, RAW_PRESSURE_MAX, 0, 0);
-    }
-    if (axes & DISTANCE) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_DISTANCE,
-                RAW_DISTANCE_MIN, RAW_DISTANCE_MAX, 0, 0);
-    }
-    if (axes & ID) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_TRACKING_ID,
-                RAW_ID_MIN, RAW_ID_MAX, 0, 0);
-    }
-    if (axes & SLOT) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_SLOT,
-                RAW_SLOT_MIN, RAW_SLOT_MAX, 0, 0);
-        mFakeEventHub->setAbsoluteAxisValue(DEVICE_ID, ABS_MT_SLOT, 0);
-    }
-    if (axes & TOOL_TYPE) {
-        mFakeEventHub->addAbsoluteAxis(DEVICE_ID, ABS_MT_TOOL_TYPE,
-                0, MT_TOOL_MAX, 0, 0);
-    }
-}
-
-void MultiTouchInputMapperTest::processPosition(
-        MultiTouchInputMapper* mapper, int32_t x, int32_t y) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_POSITION_X, x);
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_POSITION_Y, y);
-}
-
-void MultiTouchInputMapperTest::processTouchMajor(
-        MultiTouchInputMapper* mapper, int32_t touchMajor) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_TOUCH_MAJOR, touchMajor);
-}
-
-void MultiTouchInputMapperTest::processTouchMinor(
-        MultiTouchInputMapper* mapper, int32_t touchMinor) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_TOUCH_MINOR, touchMinor);
-}
-
-void MultiTouchInputMapperTest::processToolMajor(
-        MultiTouchInputMapper* mapper, int32_t toolMajor) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_WIDTH_MAJOR, toolMajor);
-}
-
-void MultiTouchInputMapperTest::processToolMinor(
-        MultiTouchInputMapper* mapper, int32_t toolMinor) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_WIDTH_MINOR, toolMinor);
-}
-
-void MultiTouchInputMapperTest::processOrientation(
-        MultiTouchInputMapper* mapper, int32_t orientation) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_ORIENTATION, orientation);
-}
-
-void MultiTouchInputMapperTest::processPressure(
-        MultiTouchInputMapper* mapper, int32_t pressure) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_PRESSURE, pressure);
-}
-
-void MultiTouchInputMapperTest::processDistance(
-        MultiTouchInputMapper* mapper, int32_t distance) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_DISTANCE, distance);
-}
-
-void MultiTouchInputMapperTest::processId(
-        MultiTouchInputMapper* mapper, int32_t id) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_TRACKING_ID, id);
-}
-
-void MultiTouchInputMapperTest::processSlot(
-        MultiTouchInputMapper* mapper, int32_t slot) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_SLOT, slot);
-}
-
-void MultiTouchInputMapperTest::processToolType(
-        MultiTouchInputMapper* mapper, int32_t toolType) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_ABS, ABS_MT_TOOL_TYPE, toolType);
-}
-
-void MultiTouchInputMapperTest::processKey(
-        MultiTouchInputMapper* mapper, int32_t code, int32_t value) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_KEY, code, value);
-}
-
-void MultiTouchInputMapperTest::processMTSync(MultiTouchInputMapper* mapper) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_MT_REPORT, 0);
-}
-
-void MultiTouchInputMapperTest::processSync(MultiTouchInputMapper* mapper) {
-    process(mapper, ARBITRARY_TIME, DEVICE_ID, EV_SYN, SYN_REPORT, 0);
-}
-
-
-TEST_F(MultiTouchInputMapperTest, Process_NormalMultiTouchGesture_WithoutTrackingIds) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyMotionArgs motionArgs;
-
-    // Two fingers down at once.
-    int32_t x1 = 100, y1 = 125, x2 = 300, y2 = 500;
-    processPosition(mapper, x1, y1);
-    processMTSync(mapper);
-    processPosition(mapper, x2, y2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Move.
-    x1 += 10; y1 += 15; x2 += 5; y2 -= 10;
-    processPosition(mapper, x1, y1);
-    processMTSync(mapper);
-    processPosition(mapper, x2, y2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // First finger up.
-    x2 += 15; y2 -= 20;
-    processPosition(mapper, x2, y2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Move.
-    x2 += 20; y2 -= 25;
-    processPosition(mapper, x2, y2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // New finger down.
-    int32_t x3 = 700, y3 = 300;
-    processPosition(mapper, x2, y2);
-    processMTSync(mapper);
-    processPosition(mapper, x3, y3);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Second finger up.
-    x3 += 30; y3 -= 20;
-    processPosition(mapper, x3, y3);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Last finger up.
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.eventTime);
-    ASSERT_EQ(DEVICE_ID, motionArgs.deviceId);
-    ASSERT_EQ(AINPUT_SOURCE_TOUCHSCREEN, motionArgs.source);
-    ASSERT_EQ(uint32_t(0), motionArgs.policyFlags);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.flags);
-    ASSERT_EQ(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON, motionArgs.metaState);
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(0, motionArgs.edgeFlags);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NEAR(X_PRECISION, motionArgs.xPrecision, EPSILON);
-    ASSERT_NEAR(Y_PRECISION, motionArgs.yPrecision, EPSILON);
-    ASSERT_EQ(ARBITRARY_TIME, motionArgs.downTime);
-
-    // Should not have sent any more keys or motions.
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_NormalMultiTouchGesture_WithTrackingIds) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | ID);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyMotionArgs motionArgs;
-
-    // Two fingers down at once.
-    int32_t x1 = 100, y1 = 125, x2 = 300, y2 = 500;
-    processPosition(mapper, x1, y1);
-    processId(mapper, 1);
-    processMTSync(mapper);
-    processPosition(mapper, x2, y2);
-    processId(mapper, 2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Move.
-    x1 += 10; y1 += 15; x2 += 5; y2 -= 10;
-    processPosition(mapper, x1, y1);
-    processId(mapper, 1);
-    processMTSync(mapper);
-    processPosition(mapper, x2, y2);
-    processId(mapper, 2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // First finger up.
-    x2 += 15; y2 -= 20;
-    processPosition(mapper, x2, y2);
-    processId(mapper, 2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Move.
-    x2 += 20; y2 -= 25;
-    processPosition(mapper, x2, y2);
-    processId(mapper, 2);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // New finger down.
-    int32_t x3 = 700, y3 = 300;
-    processPosition(mapper, x2, y2);
-    processId(mapper, 2);
-    processMTSync(mapper);
-    processPosition(mapper, x3, y3);
-    processId(mapper, 3);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Second finger up.
-    x3 += 30; y3 -= 20;
-    processPosition(mapper, x3, y3);
-    processId(mapper, 3);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Last finger up.
-    processMTSync(mapper);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Should not have sent any more keys or motions.
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_NormalMultiTouchGesture_WithSlots) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | ID | SLOT);
-    prepareVirtualKeys();
-    addMapperAndConfigure(mapper);
-
-    mFakeContext->setGlobalMetaState(AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_ON);
-
-    NotifyMotionArgs motionArgs;
-
-    // Two fingers down at once.
-    int32_t x1 = 100, y1 = 125, x2 = 300, y2 = 500;
-    processPosition(mapper, x1, y1);
-    processId(mapper, 1);
-    processSlot(mapper, 1);
-    processPosition(mapper, x2, y2);
-    processId(mapper, 2);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Move.
-    x1 += 10; y1 += 15; x2 += 5; y2 -= 10;
-    processSlot(mapper, 0);
-    processPosition(mapper, x1, y1);
-    processSlot(mapper, 1);
-    processPosition(mapper, x2, y2);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // First finger up.
-    x2 += 15; y2 -= 20;
-    processSlot(mapper, 0);
-    processId(mapper, -1);
-    processSlot(mapper, 1);
-    processPosition(mapper, x2, y2);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x1), toDisplayY(y1), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Move.
-    x2 += 20; y2 -= 25;
-    processPosition(mapper, x2, y2);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(1, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // New finger down.
-    int32_t x3 = 700, y3 = 300;
-    processPosition(mapper, x2, y2);
-    processSlot(mapper, 0);
-    processId(mapper, 3);
-    processPosition(mapper, x3, y3);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (0 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Second finger up.
-    x3 += 30; y3 -= 20;
-    processSlot(mapper, 1);
-    processId(mapper, -1);
-    processSlot(mapper, 0);
-    processPosition(mapper, x3, y3);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_UP | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            motionArgs.action);
-    ASSERT_EQ(size_t(2), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_EQ(1, motionArgs.pointerProperties[1].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[1].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[1],
-            toDisplayX(x2), toDisplayY(y2), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Last finger up.
-    processId(mapper, -1);
-    processSync(mapper);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(size_t(1), motionArgs.pointerCount);
-    ASSERT_EQ(0, motionArgs.pointerProperties[0].id);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(x3), toDisplayY(y3), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // Should not have sent any more keys or motions.
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasNotCalled());
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasNotCalled());
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_AllAxes_WithDefaultCalibration) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | TOUCH | TOOL | PRESSURE | ORIENTATION | ID | MINOR | DISTANCE);
-    addMapperAndConfigure(mapper);
-
-    // These calculations are based on the input device calibration documentation.
-    int32_t rawX = 100;
-    int32_t rawY = 200;
-    int32_t rawTouchMajor = 7;
-    int32_t rawTouchMinor = 6;
-    int32_t rawToolMajor = 9;
-    int32_t rawToolMinor = 8;
-    int32_t rawPressure = 11;
-    int32_t rawDistance = 0;
-    int32_t rawOrientation = 3;
-    int32_t id = 5;
-
-    float x = toDisplayX(rawX);
-    float y = toDisplayY(rawY);
-    float pressure = float(rawPressure) / RAW_PRESSURE_MAX;
-    float size = avg(rawTouchMajor, rawTouchMinor) / RAW_TOUCH_MAX;
-    float toolMajor = float(rawToolMajor) * GEOMETRIC_SCALE;
-    float toolMinor = float(rawToolMinor) * GEOMETRIC_SCALE;
-    float touchMajor = float(rawTouchMajor) * GEOMETRIC_SCALE;
-    float touchMinor = float(rawTouchMinor) * GEOMETRIC_SCALE;
-    float orientation = float(rawOrientation) / RAW_ORIENTATION_MAX * M_PI_2;
-    float distance = float(rawDistance);
-
-    processPosition(mapper, rawX, rawY);
-    processTouchMajor(mapper, rawTouchMajor);
-    processTouchMinor(mapper, rawTouchMinor);
-    processToolMajor(mapper, rawToolMajor);
-    processToolMinor(mapper, rawToolMinor);
-    processPressure(mapper, rawPressure);
-    processOrientation(mapper, rawOrientation);
-    processDistance(mapper, rawDistance);
-    processId(mapper, id);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    NotifyMotionArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(0, args.pointerProperties[0].id);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            x, y, pressure, size, touchMajor, touchMinor, toolMajor, toolMinor,
-            orientation, distance));
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_GeometricCalibration) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | TOUCH | TOOL | MINOR);
-    addConfigurationProperty("touch.size.calibration", "geometric");
-    addMapperAndConfigure(mapper);
-
-    // These calculations are based on the input device calibration documentation.
-    int32_t rawX = 100;
-    int32_t rawY = 200;
-    int32_t rawTouchMajor = 140;
-    int32_t rawTouchMinor = 120;
-    int32_t rawToolMajor = 180;
-    int32_t rawToolMinor = 160;
-
-    float x = toDisplayX(rawX);
-    float y = toDisplayY(rawY);
-    float size = avg(rawTouchMajor, rawTouchMinor) / RAW_TOUCH_MAX;
-    float toolMajor = float(rawToolMajor) * GEOMETRIC_SCALE;
-    float toolMinor = float(rawToolMinor) * GEOMETRIC_SCALE;
-    float touchMajor = float(rawTouchMajor) * GEOMETRIC_SCALE;
-    float touchMinor = float(rawTouchMinor) * GEOMETRIC_SCALE;
-
-    processPosition(mapper, rawX, rawY);
-    processTouchMajor(mapper, rawTouchMajor);
-    processTouchMinor(mapper, rawTouchMinor);
-    processToolMajor(mapper, rawToolMajor);
-    processToolMinor(mapper, rawToolMinor);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    NotifyMotionArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            x, y, 1.0f, size, touchMajor, touchMinor, toolMajor, toolMinor, 0, 0));
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_SummedLinearCalibration) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | TOUCH | TOOL);
-    addConfigurationProperty("touch.size.calibration", "diameter");
-    addConfigurationProperty("touch.size.scale", "10");
-    addConfigurationProperty("touch.size.bias", "160");
-    addConfigurationProperty("touch.size.isSummed", "1");
-    addMapperAndConfigure(mapper);
-
-    // These calculations are based on the input device calibration documentation.
-    // Note: We only provide a single common touch/tool value because the device is assumed
-    //       not to emit separate values for each pointer (isSummed = 1).
-    int32_t rawX = 100;
-    int32_t rawY = 200;
-    int32_t rawX2 = 150;
-    int32_t rawY2 = 250;
-    int32_t rawTouchMajor = 5;
-    int32_t rawToolMajor = 8;
-
-    float x = toDisplayX(rawX);
-    float y = toDisplayY(rawY);
-    float x2 = toDisplayX(rawX2);
-    float y2 = toDisplayY(rawY2);
-    float size = float(rawTouchMajor) / 2 / RAW_TOUCH_MAX;
-    float touch = float(rawTouchMajor) / 2 * 10.0f + 160.0f;
-    float tool = float(rawToolMajor) / 2 * 10.0f + 160.0f;
-
-    processPosition(mapper, rawX, rawY);
-    processTouchMajor(mapper, rawTouchMajor);
-    processToolMajor(mapper, rawToolMajor);
-    processMTSync(mapper);
-    processPosition(mapper, rawX2, rawY2);
-    processTouchMajor(mapper, rawTouchMajor);
-    processToolMajor(mapper, rawToolMajor);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    NotifyMotionArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, args.action);
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_POINTER_DOWN | (1 << AMOTION_EVENT_ACTION_POINTER_INDEX_SHIFT),
-            args.action);
-    ASSERT_EQ(size_t(2), args.pointerCount);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            x, y, 1.0f, size, touch, touch, tool, tool, 0, 0));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[1],
-            x2, y2, 1.0f, size, touch, touch, tool, tool, 0, 0));
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_TouchAndToolAxes_AreaCalibration) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | TOUCH | TOOL);
-    addConfigurationProperty("touch.size.calibration", "area");
-    addConfigurationProperty("touch.size.scale", "43");
-    addConfigurationProperty("touch.size.bias", "3");
-    addMapperAndConfigure(mapper);
-
-    // These calculations are based on the input device calibration documentation.
-    int32_t rawX = 100;
-    int32_t rawY = 200;
-    int32_t rawTouchMajor = 5;
-    int32_t rawToolMajor = 8;
-
-    float x = toDisplayX(rawX);
-    float y = toDisplayY(rawY);
-    float size = float(rawTouchMajor) / RAW_TOUCH_MAX;
-    float touch = sqrtf(rawTouchMajor) * 43.0f + 3.0f;
-    float tool = sqrtf(rawToolMajor) * 43.0f + 3.0f;
-
-    processPosition(mapper, rawX, rawY);
-    processTouchMajor(mapper, rawTouchMajor);
-    processToolMajor(mapper, rawToolMajor);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    NotifyMotionArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            x, y, 1.0f, size, touch, touch, tool, tool, 0, 0));
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_PressureAxis_AmplitudeCalibration) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | PRESSURE);
-    addConfigurationProperty("touch.pressure.calibration", "amplitude");
-    addConfigurationProperty("touch.pressure.scale", "0.01");
-    addMapperAndConfigure(mapper);
-
-    // These calculations are based on the input device calibration documentation.
-    int32_t rawX = 100;
-    int32_t rawY = 200;
-    int32_t rawPressure = 60;
-
-    float x = toDisplayX(rawX);
-    float y = toDisplayY(rawY);
-    float pressure = float(rawPressure) * 0.01f;
-
-    processPosition(mapper, rawX, rawY);
-    processPressure(mapper, rawPressure);
-    processMTSync(mapper);
-    processSync(mapper);
-
-    NotifyMotionArgs args;
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&args));
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(args.pointerCoords[0],
-            x, y, pressure, 0, 0, 0, 0, 0, 0, 0));
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllButtons) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | ID | SLOT);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-    NotifyKeyArgs keyArgs;
-
-    processId(mapper, 1);
-    processPosition(mapper, 100, 200);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.buttonState);
-
-    // press BTN_LEFT, release BTN_LEFT
-    processKey(mapper, BTN_LEFT, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_PRIMARY, motionArgs.buttonState);
-
-    processKey(mapper, BTN_LEFT, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // press BTN_RIGHT + BTN_MIDDLE, release BTN_RIGHT, release BTN_MIDDLE
-    processKey(mapper, BTN_RIGHT, 1);
-    processKey(mapper, BTN_MIDDLE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY | AMOTION_EVENT_BUTTON_TERTIARY,
-            motionArgs.buttonState);
-
-    processKey(mapper, BTN_RIGHT, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_MIDDLE, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // press BTN_BACK, release BTN_BACK
-    processKey(mapper, BTN_BACK, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_BACK, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-
-    // press BTN_SIDE, release BTN_SIDE
-    processKey(mapper, BTN_SIDE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_BACK, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_SIDE, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_BACK, keyArgs.keyCode);
-
-    // press BTN_FORWARD, release BTN_FORWARD
-    processKey(mapper, BTN_FORWARD, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_FORWARD, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-
-    // press BTN_EXTRA, release BTN_EXTRA
-    processKey(mapper, BTN_EXTRA, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_DOWN, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_FORWARD, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    processKey(mapper, BTN_EXTRA, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyKeyWasCalled(&keyArgs));
-    ASSERT_EQ(AKEY_EVENT_ACTION_UP, keyArgs.action);
-    ASSERT_EQ(AKEYCODE_FORWARD, keyArgs.keyCode);
-
-    // press BTN_STYLUS, release BTN_STYLUS
-    processKey(mapper, BTN_STYLUS, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_SECONDARY, motionArgs.buttonState);
-
-    processKey(mapper, BTN_STYLUS, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // press BTN_STYLUS2, release BTN_STYLUS2
-    processKey(mapper, BTN_STYLUS2, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_BUTTON_TERTIARY, motionArgs.buttonState);
-
-    processKey(mapper, BTN_STYLUS2, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(0, motionArgs.buttonState);
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-
-    // release touch
-    processId(mapper, -1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_EQ(0, motionArgs.buttonState);
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_ShouldHandleAllToolTypes) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | ID | SLOT | TOOL_TYPE);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-
-    // default tool type is finger
-    processId(mapper, 1);
-    processPosition(mapper, 100, 200);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // eraser
-    processKey(mapper, BTN_TOOL_RUBBER, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
-
-    // stylus
-    processKey(mapper, BTN_TOOL_RUBBER, 0);
-    processKey(mapper, BTN_TOOL_PEN, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // brush
-    processKey(mapper, BTN_TOOL_PEN, 0);
-    processKey(mapper, BTN_TOOL_BRUSH, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // pencil
-    processKey(mapper, BTN_TOOL_BRUSH, 0);
-    processKey(mapper, BTN_TOOL_PENCIL, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // airbrush
-    processKey(mapper, BTN_TOOL_PENCIL, 0);
-    processKey(mapper, BTN_TOOL_AIRBRUSH, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // mouse
-    processKey(mapper, BTN_TOOL_AIRBRUSH, 0);
-    processKey(mapper, BTN_TOOL_MOUSE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
-
-    // lens
-    processKey(mapper, BTN_TOOL_MOUSE, 0);
-    processKey(mapper, BTN_TOOL_LENS, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
-
-    // double-tap
-    processKey(mapper, BTN_TOOL_LENS, 0);
-    processKey(mapper, BTN_TOOL_DOUBLETAP, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // triple-tap
-    processKey(mapper, BTN_TOOL_DOUBLETAP, 0);
-    processKey(mapper, BTN_TOOL_TRIPLETAP, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // quad-tap
-    processKey(mapper, BTN_TOOL_TRIPLETAP, 0);
-    processKey(mapper, BTN_TOOL_QUADTAP, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // finger
-    processKey(mapper, BTN_TOOL_QUADTAP, 0);
-    processKey(mapper, BTN_TOOL_FINGER, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // stylus trumps finger
-    processKey(mapper, BTN_TOOL_PEN, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // eraser trumps stylus
-    processKey(mapper, BTN_TOOL_RUBBER, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_ERASER, motionArgs.pointerProperties[0].toolType);
-
-    // mouse trumps eraser
-    processKey(mapper, BTN_TOOL_MOUSE, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_MOUSE, motionArgs.pointerProperties[0].toolType);
-
-    // MT tool type trumps BTN tool types: MT_TOOL_FINGER
-    processToolType(mapper, MT_TOOL_FINGER); // this is the first time we send MT_TOOL_TYPE
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-
-    // MT tool type trumps BTN tool types: MT_TOOL_PEN
-    processToolType(mapper, MT_TOOL_PEN);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_STYLUS, motionArgs.pointerProperties[0].toolType);
-
-    // back to default tool type
-    processToolType(mapper, -1); // use a deliberately undefined tool type, for testing
-    processKey(mapper, BTN_TOOL_MOUSE, 0);
-    processKey(mapper, BTN_TOOL_RUBBER, 0);
-    processKey(mapper, BTN_TOOL_PEN, 0);
-    processKey(mapper, BTN_TOOL_FINGER, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_MOVE, motionArgs.action);
-    ASSERT_EQ(AMOTION_EVENT_TOOL_TYPE_FINGER, motionArgs.pointerProperties[0].toolType);
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_WhenBtnTouchPresent_HoversIfItsValueIsZero) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | ID | SLOT);
-    mFakeEventHub->addKey(DEVICE_ID, BTN_TOUCH, 0, AKEYCODE_UNKNOWN, 0);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-
-    // initially hovering because BTN_TOUCH not sent yet, pressure defaults to 0
-    processId(mapper, 1);
-    processPosition(mapper, 100, 200);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // move a little
-    processPosition(mapper, 150, 250);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // down when BTN_TOUCH is pressed, pressure defaults to 1
-    processKey(mapper, BTN_TOUCH, 1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // up when BTN_TOUCH is released, hover restored
-    processKey(mapper, BTN_TOUCH, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // exit hover when pointer goes away
-    processId(mapper, -1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-}
-
-TEST_F(MultiTouchInputMapperTest, Process_WhenAbsMTPressureIsPresent_HoversIfItsValueIsZero) {
-    MultiTouchInputMapper* mapper = new MultiTouchInputMapper(mDevice);
-    addConfigurationProperty("touch.deviceType", "touchScreen");
-    prepareDisplay(DISPLAY_ORIENTATION_0);
-    prepareAxes(POSITION | ID | SLOT | PRESSURE);
-    addMapperAndConfigure(mapper);
-
-    NotifyMotionArgs motionArgs;
-
-    // initially hovering because pressure is 0
-    processId(mapper, 1);
-    processPosition(mapper, 100, 200);
-    processPressure(mapper, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(100), toDisplayY(200), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // move a little
-    processPosition(mapper, 150, 250);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // down when pressure becomes non-zero
-    processPressure(mapper, RAW_PRESSURE_MAX);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_DOWN, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    // up when pressure becomes 0, hover restored
-    processPressure(mapper, 0);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_UP, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 1, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_ENTER, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_MOVE, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-
-    // exit hover when pointer goes away
-    processId(mapper, -1);
-    processSync(mapper);
-    ASSERT_NO_FATAL_FAILURE(mFakeListener->assertNotifyMotionWasCalled(&motionArgs));
-    ASSERT_EQ(AMOTION_EVENT_ACTION_HOVER_EXIT, motionArgs.action);
-    ASSERT_NO_FATAL_FAILURE(assertPointerCoords(motionArgs.pointerCoords[0],
-            toDisplayX(150), toDisplayY(250), 0, 0, 0, 0, 0, 0, 0, 0));
-}
-
-
-} // namespace android
diff --git a/libs/usb/tests/AccessoryChat/accessorychat/Android.mk b/libs/usb/tests/AccessoryChat/accessorychat/Android.mk
index 300224a..3e07155 100644
--- a/libs/usb/tests/AccessoryChat/accessorychat/Android.mk
+++ b/libs/usb/tests/AccessoryChat/accessorychat/Android.mk
@@ -11,7 +11,6 @@
 
 LOCAL_MODULE := accessorychat
 
-LOCAL_C_INCLUDES += bionic/libc/kernel/common
 LOCAL_STATIC_LIBRARIES := libusbhost libcutils
 LOCAL_LDLIBS += -lpthread
 LOCAL_CFLAGS := -g -O0
diff --git a/libs/usb/tests/AccessoryChat/accessorychat/linux/usb/f_accessory.h b/libs/usb/tests/AccessoryChat/accessorychat/linux/usb/f_accessory.h
new file mode 100644
index 0000000..75e017c
--- /dev/null
+++ b/libs/usb/tests/AccessoryChat/accessorychat/linux/usb/f_accessory.h
@@ -0,0 +1,53 @@
+/****************************************************************************
+ ****************************************************************************
+ ***
+ ***   This header was automatically generated from a Linux kernel header
+ ***   of the same name, to make information necessary for userspace to
+ ***   call into the kernel available to libc.  It contains only constants,
+ ***   structures, and macros generated from the original header, and thus,
+ ***   contains no copyrightable information.
+ ***
+ ***   To edit the content of this header, modify the corresponding
+ ***   source file (e.g. under external/kernel-headers/original/) then
+ ***   run bionic/libc/kernel/tools/update_all.py
+ ***
+ ***   Any manual change here will be lost the next time this script will
+ ***   be run. You've been warned!
+ ***
+ ****************************************************************************
+ ****************************************************************************/
+#ifndef _UAPI_LINUX_USB_F_ACCESSORY_H
+#define _UAPI_LINUX_USB_F_ACCESSORY_H
+#define USB_ACCESSORY_VENDOR_ID 0x18D1
+#define USB_ACCESSORY_PRODUCT_ID 0x2D00
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define USB_ACCESSORY_ADB_PRODUCT_ID 0x2D01
+#define ACCESSORY_STRING_MANUFACTURER 0
+#define ACCESSORY_STRING_MODEL 1
+#define ACCESSORY_STRING_DESCRIPTION 2
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define ACCESSORY_STRING_VERSION 3
+#define ACCESSORY_STRING_URI 4
+#define ACCESSORY_STRING_SERIAL 5
+#define ACCESSORY_GET_PROTOCOL 51
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define ACCESSORY_SEND_STRING 52
+#define ACCESSORY_START 53
+#define ACCESSORY_REGISTER_HID 54
+#define ACCESSORY_UNREGISTER_HID 55
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define ACCESSORY_SET_HID_REPORT_DESC 56
+#define ACCESSORY_SEND_HID_EVENT 57
+#define ACCESSORY_SET_AUDIO_MODE 58
+#define ACCESSORY_GET_STRING_MANUFACTURER _IOW('M', 1, char[256])
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define ACCESSORY_GET_STRING_MODEL _IOW('M', 2, char[256])
+#define ACCESSORY_GET_STRING_DESCRIPTION _IOW('M', 3, char[256])
+#define ACCESSORY_GET_STRING_VERSION _IOW('M', 4, char[256])
+#define ACCESSORY_GET_STRING_URI _IOW('M', 5, char[256])
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
+#define ACCESSORY_GET_STRING_SERIAL _IOW('M', 6, char[256])
+#define ACCESSORY_IS_START_REQUESTED _IO('M', 7)
+#define ACCESSORY_GET_AUDIO_MODE _IO('M', 8)
+#endif
+/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */
diff --git a/location/java/android/location/FusedBatchOptions.java b/location/java/android/location/FusedBatchOptions.java
index 623d707..5600aeb 100644
--- a/location/java/android/location/FusedBatchOptions.java
+++ b/location/java/android/location/FusedBatchOptions.java
@@ -95,8 +95,9 @@
     }
 
     public static final class BatchFlags {
-        public static int WAKEUP_ON_FIFO_FULL = 1<<0;
-        public static int CALLBACK_ON_LOCATION_FIX = 1<<1;
+        // follow the definitions to the letter in fused_location.h
+        public static int WAKEUP_ON_FIFO_FULL = 0x0000001;
+        public static int CALLBACK_ON_LOCATION_FIX =0x0000002;
     }
 
     /*
diff --git a/location/java/android/location/LocationManager.java b/location/java/android/location/LocationManager.java
index ccb4304..36778aa 100644
--- a/location/java/android/location/LocationManager.java
+++ b/location/java/android/location/LocationManager.java
@@ -28,6 +28,7 @@
 import android.util.Log;
 
 
+import java.lang.SecurityException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -1104,13 +1105,18 @@
      * unless they depend on provider-specific APIs such as
      * {@link #requestLocationUpdates(String, long, float, LocationListener)}.
      *
+     * <p>
+     * Before API version 20, this method would throw {@link SecurityException}
+     * if the location permissions were not sufficient to use the specified
+     * provider.
+     *
      * @param provider the name of the provider
      * @return true if the provider exists and is enabled
      *
      * @throws IllegalArgumentException if provider is null
-     * @throws SecurityException if no suitable permission is present
      */
     public boolean isProviderEnabled(String provider) {
+        // STOPSHIP: finalize API version number in javadoc
         checkProvider(provider);
 
         try {
@@ -1610,7 +1616,7 @@
      * @hide
      */
     public boolean sendNiResponse(int notifId, int userResponse) {
-    	try {
+        try {
             return mService.sendNiResponse(notifId, userResponse);
         } catch (RemoteException e) {
             Log.e(TAG, "RemoteException in sendNiResponse: ", e);
diff --git a/location/java/android/location/SettingInjectorService.java b/location/java/android/location/SettingInjectorService.java
index 9f321f3..98c7864 100644
--- a/location/java/android/location/SettingInjectorService.java
+++ b/location/java/android/location/SettingInjectorService.java
@@ -26,7 +26,7 @@
 import android.util.Log;
 
 /**
- * Dynamically specifies the summary (subtitle) and enabled status of a preference injected into
+ * Dynamically specifies the enabled status of a preference injected into
  * the list of app settings displayed by the system settings app
  * <p/>
  * For use only by apps that are included in the system image, for preferences that affect multiple
@@ -71,13 +71,12 @@
  * </ul>
  *
  * To ensure a good user experience, your {@link android.app.Application#onCreate()},
- * {@link #onGetSummary()}, and {@link #onGetEnabled()} methods must all be fast. If any are slow,
- * it can delay the display of settings values for other apps as well. Note further that all are
- * called on your app's UI thread.
+ * and {@link #onGetEnabled()} methods must all be fast. If either is slow,
+ * it can delay the display of settings values for other apps as well. Note further that these
+ * methods are called on your app's UI thread.
  * <p/>
  * For compactness, only one copy of a given setting should be injected. If each account has a
- * distinct value for the setting, then the {@link #onGetSummary()} value should represent a summary
- * of the state across all of the accounts and {@code settingsActivity} should display the value for
+ * distinct value for the setting, then only {@code settingsActivity} should display the value for
  * each account.
  */
 public abstract class SettingInjectorService extends Service {
@@ -109,14 +108,6 @@
             "android.location.InjectedSettingChanged";
 
     /**
-     * Name of the bundle key for the string specifying the summary for the setting (e.g., "ON" or
-     * "OFF").
-     *
-     * @hide
-     */
-    public static final String SUMMARY_KEY = "summary";
-
-    /**
      * Name of the bundle key for the string specifying whether the setting is currently enabled.
      *
      * @hide
@@ -160,42 +151,31 @@
 
     private void onHandleIntent(Intent intent) {
 
-        String summary;
-        try {
-            summary = onGetSummary();
-        } catch (RuntimeException e) {
-            // Exception. Send status anyway, so that settings injector can immediately start
-            // loading the status of the next setting.
-            sendStatus(intent, null, true);
-            throw e;
-        }
-
         boolean enabled;
         try {
             enabled = onGetEnabled();
         } catch (RuntimeException e) {
             // Exception. Send status anyway, so that settings injector can immediately start
             // loading the status of the next setting.
-            sendStatus(intent, summary, true);
+            sendStatus(intent, true);
             throw e;
         }
 
-        sendStatus(intent, summary, enabled);
+        sendStatus(intent, enabled);
     }
 
     /**
-     * Send the summary and enabled values back to the caller via the messenger encoded in the
+     * Send the enabled values back to the caller via the messenger encoded in the
      * intent.
      */
-    private void sendStatus(Intent intent, String summary, boolean enabled) {
+    private void sendStatus(Intent intent, boolean enabled) {
         Message message = Message.obtain();
         Bundle bundle = new Bundle();
-        bundle.putString(SUMMARY_KEY, summary);
         bundle.putBoolean(ENABLED_KEY, enabled);
         message.setData(bundle);
 
         if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, mName + ": received " + intent + ", summary=" + summary
+            Log.d(TAG, mName + ": received " + intent
                     + ", enabled=" + enabled + ", sending message: " + message);
         }
 
@@ -208,13 +188,18 @@
     }
 
     /**
-     * Returns the {@link android.preference.Preference#getSummary()} value (allowed to be null or
-     * empty). Should not perform unpredictably-long operations such as network access--see the
-     * running-time comments in the class-level javadoc.
+     * This method is no longer called, because status values are no longer shown for any injected
+     * setting.
      *
-     * @return the {@link android.preference.Preference#getSummary()} value
+     * @return ignored
+     *
+     * @deprecated not called any more
      */
-    protected abstract String onGetSummary();
+    @Deprecated
+    protected String onGetSummary() {
+        // Do not delete until no callers have @Override annotations for this method
+        return null;
+    }
 
     /**
      * Returns the {@link android.preference.Preference#isEnabled()} value. Should not perform
diff --git a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
index 57e2786..b33ba00 100644
--- a/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
+++ b/location/java/com/android/internal/location/GpsNetInitiatedHandler.java
@@ -25,7 +25,6 @@
 import android.content.Intent;
 import android.location.LocationManager;
 import android.os.Bundle;
-import android.os.RemoteException;
 import android.os.UserHandle;
 import android.util.Log;
 
diff --git a/location/lib/java/com/android/location/provider/GeofenceProvider.java b/location/lib/java/com/android/location/provider/GeofenceProvider.java
index 2618f34..fafaa84 100644
--- a/location/lib/java/com/android/location/provider/GeofenceProvider.java
+++ b/location/lib/java/com/android/location/provider/GeofenceProvider.java
@@ -21,9 +21,6 @@
 import android.os.IBinder;
 
 import android.location.IGeofenceProvider;
-import android.util.Log;
-
-import java.lang.Long;
 
 /**
  * Base class for geofence providers implemented as unbundled services.
diff --git a/location/lib/java/com/android/location/provider/LocationProviderBase.java b/location/lib/java/com/android/location/provider/LocationProviderBase.java
index 150c289..d717f40 100644
--- a/location/lib/java/com/android/location/provider/LocationProviderBase.java
+++ b/location/lib/java/com/android/location/provider/LocationProviderBase.java
@@ -24,7 +24,6 @@
 import android.location.ILocationManager;
 import android.location.Location;
 import android.location.LocationManager;
-import android.location.LocationRequest;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
diff --git a/media/java/android/media/AmrInputStream.java b/media/java/android/media/AmrInputStream.java
index e2115e4..f90f1e2 100644
--- a/media/java/android/media/AmrInputStream.java
+++ b/media/java/android/media/AmrInputStream.java
@@ -16,8 +16,6 @@
 
 package android.media;
 
-import android.util.Log;
-
 import java.io.InputStream;
 import java.io.IOException;
 
diff --git a/media/java/android/media/AsyncPlayer.java b/media/java/android/media/AsyncPlayer.java
index 804528e..14b199e 100644
--- a/media/java/android/media/AsyncPlayer.java
+++ b/media/java/android/media/AsyncPlayer.java
@@ -22,8 +22,6 @@
 import android.os.SystemClock;
 import android.util.Log;
 
-import java.io.IOException;
-import java.lang.IllegalStateException;
 import java.util.LinkedList;
 
 /**
diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java
index 49f498e..ad0d459 100644
--- a/media/java/android/media/AudioFormat.java
+++ b/media/java/android/media/AudioFormat.java
@@ -31,7 +31,8 @@
     public static final int ENCODING_INVALID = 0;
     /** Default audio data format */
     public static final int ENCODING_DEFAULT = 1;
-    // These two values must be kept in sync with JNI code for AudioTrack, AudioRecord
+
+    // These two values must be kept in sync with core/jni/android_media_AudioFormat.h
     /** Audio data format: PCM 16 bit per sample. Guaranteed to be supported by devices. */
     public static final int ENCODING_PCM_16BIT = 2;
     /** Audio data format: PCM 8 bit per sample. Not guaranteed to be supported by devices. */
@@ -55,7 +56,7 @@
     /** Default audio channel mask */
     public static final int CHANNEL_OUT_DEFAULT = 1;
 
-    // Channel mask definitions below are translated to the native values defined in
+    // Output channel mask definitions below are translated to the native values defined in
     //  in /system/core/include/system/audio.h in the JNI code of AudioTrack
     public static final int CHANNEL_OUT_FRONT_LEFT = 0x4;
     public static final int CHANNEL_OUT_FRONT_RIGHT = 0x8;
@@ -87,23 +88,37 @@
 
     public static final int CHANNEL_OUT_MONO = CHANNEL_OUT_FRONT_LEFT;
     public static final int CHANNEL_OUT_STEREO = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT);
+    // aka QUAD_BACK
     public static final int CHANNEL_OUT_QUAD = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
             CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT);
+    /** @hide */
+    public static final int CHANNEL_OUT_QUAD_SIDE = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
+            CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT);
     public static final int CHANNEL_OUT_SURROUND = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
             CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_BACK_CENTER);
+    // aka 5POINT1_BACK
     public static final int CHANNEL_OUT_5POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
             CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT);
+    /** @hide */
+    public static final int CHANNEL_OUT_5POINT1_SIDE = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
+            CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY |
+            CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT);
+    // TODO does this need an @deprecated ?
+    // different from AUDIO_CHANNEL_OUT_7POINT1
     public static final int CHANNEL_OUT_7POINT1 = (CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_RIGHT |
             CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_LOW_FREQUENCY | CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
             CHANNEL_OUT_FRONT_LEFT_OF_CENTER | CHANNEL_OUT_FRONT_RIGHT_OF_CENTER);
     /** @hide */
+    // matches AUDIO_CHANNEL_OUT_7POINT1
     public static final int CHANNEL_OUT_7POINT1_SURROUND = (
             CHANNEL_OUT_FRONT_LEFT | CHANNEL_OUT_FRONT_CENTER | CHANNEL_OUT_FRONT_RIGHT |
             CHANNEL_OUT_SIDE_LEFT | CHANNEL_OUT_SIDE_RIGHT |
             CHANNEL_OUT_BACK_LEFT | CHANNEL_OUT_BACK_RIGHT |
             CHANNEL_OUT_LOW_FREQUENCY);
+    // CHANNEL_OUT_ALL is not yet defined; if added then it should match AUDIO_CHANNEL_OUT_ALL
 
     public static final int CHANNEL_IN_DEFAULT = 1;
+    // These directly match native
     public static final int CHANNEL_IN_LEFT = 0x4;
     public static final int CHANNEL_IN_RIGHT = 0x8;
     public static final int CHANNEL_IN_FRONT = 0x10;
@@ -120,5 +135,8 @@
     public static final int CHANNEL_IN_VOICE_DNLINK = 0x8000;
     public static final int CHANNEL_IN_MONO = CHANNEL_IN_FRONT;
     public static final int CHANNEL_IN_STEREO = (CHANNEL_IN_LEFT | CHANNEL_IN_RIGHT);
+    /** @hide */
+    public static final int CHANNEL_IN_FRONT_BACK = CHANNEL_IN_FRONT | CHANNEL_IN_BACK;
+    // CHANNEL_IN_ALL is not yet defined; if added then it should match AUDIO_CHANNEL_IN_ALL
 
 }
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index d652cae..1dcfcb8 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -25,8 +25,8 @@
 import android.content.Context;
 import android.content.Intent;
 import android.media.RemoteController.OnClientUpdateListener;
+import android.media.session.MediaSessionLegacyHelper;
 import android.os.Binder;
-import android.os.Build;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
@@ -49,6 +49,12 @@
  */
 public class AudioManager {
 
+    // If we should use the new sessions APIs.
+    private final static boolean USE_SESSIONS = true;
+    // If we should use the legacy APIs. If both are true information will be
+    // duplicated through both paths. Currently this flag isn't used.
+    private final static boolean USE_LEGACY = true;
+
     private final Context mContext;
     private long mVolumeKeyUpTime;
     private final boolean mUseMasterVolume;
@@ -422,6 +428,7 @@
     public static final int USE_DEFAULT_STREAM_TYPE = Integer.MIN_VALUE;
 
     private static IAudioService sService;
+    private MediaSessionLegacyHelper mSessionHelper;
 
     /**
      * @hide
@@ -432,6 +439,9 @@
                 com.android.internal.R.bool.config_useMasterVolume);
         mUseVolumeKeySounds = mContext.getResources().getBoolean(
                 com.android.internal.R.bool.config_useVolumeKeySounds);
+        if (USE_SESSIONS) {
+            mSessionHelper = MediaSessionLegacyHelper.getHelper(context);
+        }
     }
 
     private static IAudioService getService()
@@ -2167,6 +2177,9 @@
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in registerMediaButtonIntent"+e);
         }
+        if (USE_SESSIONS) {
+            mSessionHelper.addMediaButtonListener(pi, mContext);
+        }
     }
 
     /**
@@ -2240,6 +2253,9 @@
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in unregisterMediaButtonIntent"+e);
         }
+        if (USE_SESSIONS) {
+            mSessionHelper.removeMediaButtonListener(pi);
+        }
     }
 
     /**
@@ -2264,6 +2280,9 @@
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in registerRemoteControlClient"+e);
         }
+        if (USE_SESSIONS) {
+            rcClient.registerWithSession(mSessionHelper);
+        }
     }
 
     /**
@@ -2283,6 +2302,9 @@
         } catch (RemoteException e) {
             Log.e(TAG, "Dead object in unregisterRemoteControlClient"+e);
         }
+        if (USE_SESSIONS) {
+            rcClient.unregisterWithSession(mSessionHelper);
+        }
     }
 
     /**
diff --git a/media/java/android/media/AudioRecord.java b/media/java/android/media/AudioRecord.java
index 461b52f..a4891f8 100644
--- a/media/java/android/media/AudioRecord.java
+++ b/media/java/android/media/AudioRecord.java
@@ -179,13 +179,16 @@
     /**
      * Audio session ID
      */
-    private int mSessionId = 0;
+    private int mSessionId = AudioSystem.AUDIO_SESSION_ALLOCATE;
 
     //---------------------------------------------------------
     // Constructor, Finalize
     //--------------------
     /**
      * Class constructor.
+     * Though some invalid parameters will result in an {@link IllegalArgumentException} exception,
+     * other errors do not.  Thus you should call {@link #getState()} immediately after construction
+     * to confirm that the object is usable.
      * @param audioSource the recording source. See {@link MediaRecorder.AudioSource} for
      *    recording source definitions.
      * @param sampleRateInHz the sample rate expressed in Hertz. 44100Hz is currently the only
@@ -221,7 +224,7 @@
 
         // native initialization
         int[] session = new int[1];
-        session[0] = 0;
+        session[0] = AudioSystem.AUDIO_SESSION_ALLOCATE;
         //TODO: update native initialization when information about hardware init failure
         //      due to capture device already open is available.
         int initResult = native_setup( new WeakReference<AudioRecord>(this),
@@ -239,7 +242,7 @@
 
 
     // Convenience method for the constructor's parameter checks.
-    // This is where constructor IllegalArgumentException-s are thrown
+    // This and audioBuffSizeCheck are where constructor IllegalArgumentException-s are thrown
     // postconditions:
     //    mRecordSource is valid
     //    mChannelCount is valid
@@ -247,7 +250,8 @@
     //    mAudioFormat is valid
     //    mSampleRate is valid
     private void audioParamCheck(int audioSource, int sampleRateInHz,
-                                 int channelConfig, int audioFormat) {
+                                 int channelConfig, int audioFormat)
+            throws IllegalArgumentException {
 
         //--------------
         // audio source
@@ -311,7 +315,7 @@
     //    mAudioFormat is AudioFormat.ENCODING_PCM_8BIT OR AudioFormat.ENCODING_PCM_16BIT
     // postcondition:
     //    mNativeBufferSizeInBytes is valid (multiple of frame size, positive)
-    private void audioBuffSizeCheck(int audioBufferSize) {
+    private void audioBuffSizeCheck(int audioBufferSize) throws IllegalArgumentException {
         // NB: this section is only valid with PCM data.
         // To update when supporting compressed formats
         int frameSizeInBytes = mChannelCount
@@ -800,7 +804,7 @@
     //--------------------
 
     private native final int native_setup(Object audiorecord_this,
-            int recordSource, int sampleRate, int nbChannels, int audioFormat,
+            int recordSource, int sampleRate, int channelMask, int audioFormat,
             int buffSizeInBytes, int[] sessionId);
 
     private native final void native_finalize();
diff --git a/media/java/android/media/AudioService.java b/media/java/android/media/AudioService.java
index 92474df..0c8a823 100644
--- a/media/java/android/media/AudioService.java
+++ b/media/java/android/media/AudioService.java
@@ -21,20 +21,17 @@
 import static android.media.AudioManager.RINGER_MODE_SILENT;
 import static android.media.AudioManager.RINGER_MODE_VIBRATE;
 
-import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.ActivityManagerNative;
 import android.app.AppOpsManager;
 import android.app.KeyguardManager;
 import android.app.PendingIntent;
-import android.app.PendingIntent.CanceledException;
 import android.bluetooth.BluetoothA2dp;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothClass;
 import android.bluetooth.BluetoothDevice;
 import android.bluetooth.BluetoothHeadset;
 import android.bluetooth.BluetoothProfile;
-import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
@@ -46,14 +43,11 @@
 import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
 import android.database.ContentObserver;
+import android.hardware.usb.UsbManager;
 import android.media.MediaPlayer.OnCompletionListener;
 import android.media.MediaPlayer.OnErrorListener;
-import android.net.Uri;
-import android.net.http.CertificateChainValidator;
-import android.net.http.SslError;
 import android.os.Binder;
 import android.os.Build;
-import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
 import android.os.IBinder;
@@ -68,9 +62,6 @@
 import android.os.Vibrator;
 import android.provider.Settings;
 import android.provider.Settings.System;
-import android.speech.RecognizerIntent;
-import android.telephony.PhoneStateListener;
-import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.KeyEvent;
@@ -83,22 +74,18 @@
 
 import org.xmlpull.v1.XmlPullParserException;
 
-import java.io.ByteArrayInputStream;
 import java.io.FileDescriptor;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.lang.reflect.Field;
-import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.Set;
-import java.util.Stack;
 
 /**
  * The implementation of the volume manager service.
@@ -120,8 +107,6 @@
     protected static final boolean DEBUG_RC = false;
     /** Debug volumes */
     protected static final boolean DEBUG_VOL = false;
-    /** Debug cert verification */
-    private static final boolean DEBUG_CERTS = false;
 
     /** How long to delay before persisting a change in volume/ringer mode. */
     private static final int PERSIST_DELAY = 500;
@@ -274,7 +259,7 @@
     private final boolean mUseFixedVolume;
 
     // stream names used by dumpStreamStates()
-    private final String[] STREAM_NAMES = new String[] {
+    private static final String[] STREAM_NAMES = new String[] {
             "STREAM_VOICE_CALL",
             "STREAM_SYSTEM",
             "STREAM_RING",
@@ -544,6 +529,7 @@
         intentFilter.addAction(Intent.ACTION_SCREEN_ON);
         intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
         intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
+        intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
 
         intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
         // TODO merge orientation and rotation
@@ -630,6 +616,12 @@
         pw.println(Integer.toHexString(mMuteAffectedStreams));
     }
 
+    /** @hide */
+    public static String streamToString(int stream) {
+        if (stream >= 0 && stream < STREAM_NAMES.length) return STREAM_NAMES[stream];
+        if (stream == AudioManager.USE_DEFAULT_STREAM_TYPE) return "USE_DEFAULT_STREAM_TYPE";
+        return "UNKNOWN_STREAM_" + stream;
+    }
 
     private void updateStreamVolumeAlias(boolean updateVolumes) {
         int dtmfStreamAlias;
@@ -1699,7 +1691,7 @@
     private static final String ASSET_FILE_VERSION = "1.0";
     private static final String GROUP_TOUCH_SOUNDS = "touch_sounds";
 
-    private static final int SOUND_EFECTS_LOAD_TIMEOUT_MS = 5000;
+    private static final int SOUND_EFFECTS_LOAD_TIMEOUT_MS = 5000;
 
     class LoadSoundEffectReply {
         public int mStatus = 1;
@@ -1795,6 +1787,11 @@
 
     /** @see AudioManager#playSoundEffect(int, float) */
     public void playSoundEffectVolume(int effectType, float volume) {
+        if (effectType >= AudioManager.NUM_SOUND_EFFECTS || effectType < 0) {
+            Log.w(TAG, "AudioService effectType value " + effectType + " out of range");
+            return;
+        }
+
         sendMsg(mAudioHandler, MSG_PLAY_SOUND_EFFECT, SENDMSG_QUEUE,
                 effectType, (int) (volume * 1000), null, 0);
     }
@@ -1811,7 +1808,7 @@
             sendMsg(mAudioHandler, MSG_LOAD_SOUND_EFFECTS, SENDMSG_QUEUE, 0, 0, reply, 0);
             while ((reply.mStatus == 1) && (attempts-- > 0)) {
                 try {
-                    reply.wait(SOUND_EFECTS_LOAD_TIMEOUT_MS);
+                    reply.wait(SOUND_EFFECTS_LOAD_TIMEOUT_MS);
                 } catch (InterruptedException e) {
                     Log.w(TAG, "loadSoundEffects Interrupted while waiting sound pool loaded.");
                 }
@@ -3299,7 +3296,7 @@
                 while ((mSoundPoolCallBack == null) && (attempts-- > 0)) {
                     try {
                         // Wait for mSoundPoolCallBack to be set by the other thread
-                        mSoundEffectsLock.wait(SOUND_EFECTS_LOAD_TIMEOUT_MS);
+                        mSoundEffectsLock.wait(SOUND_EFFECTS_LOAD_TIMEOUT_MS);
                     } catch (InterruptedException e) {
                         Log.w(TAG, "Interrupted while waiting sound pool listener thread.");
                     }
@@ -3363,7 +3360,7 @@
                     status = 1;
                     while ((status == 1) && (attempts-- > 0)) {
                         try {
-                            mSoundEffectsLock.wait(SOUND_EFECTS_LOAD_TIMEOUT_MS);
+                            mSoundEffectsLock.wait(SOUND_EFFECTS_LOAD_TIMEOUT_MS);
                             status = mSoundPoolCallBack.status();
                         } catch (InterruptedException e) {
                             Log.w(TAG, "Interrupted while waiting sound pool callback.");
@@ -3985,7 +3982,8 @@
                     (device == AudioSystem.DEVICE_OUT_WIRED_HEADPHONE))) {
                 setBluetoothA2dpOnInt(true);
             }
-            boolean isUsb = ((device & AudioSystem.DEVICE_OUT_ALL_USB) != 0);
+            boolean isUsb = ((device & AudioSystem.DEVICE_OUT_ALL_USB) != 0) ||
+                            ((device & AudioSystem.DEVICE_IN_ALL_USB) != 0);
             handleDeviceConnection((state == 1), device, (isUsb ? name : ""));
             if (state != 0) {
                 if ((device == AudioSystem.DEVICE_OUT_WIRED_HEADSET) ||
@@ -4090,20 +4088,41 @@
                         }
                     }
                 }
-            } else if (action.equals(Intent.ACTION_USB_AUDIO_ACCESSORY_PLUG) ||
-                           action.equals(Intent.ACTION_USB_AUDIO_DEVICE_PLUG)) {
+            } else if (action.equals(Intent.ACTION_USB_AUDIO_ACCESSORY_PLUG)) {
                 state = intent.getIntExtra("state", 0);
+
                 int alsaCard = intent.getIntExtra("card", -1);
                 int alsaDevice = intent.getIntExtra("device", -1);
+
                 String params = (alsaCard == -1 && alsaDevice == -1 ? ""
                                     : "card=" + alsaCard + ";device=" + alsaDevice);
-                device = action.equals(Intent.ACTION_USB_AUDIO_ACCESSORY_PLUG) ?
-                        AudioSystem.DEVICE_OUT_USB_ACCESSORY : AudioSystem.DEVICE_OUT_USB_DEVICE;
-                Log.v(TAG, "Broadcast Receiver: Got "
-                        + (action.equals(Intent.ACTION_USB_AUDIO_ACCESSORY_PLUG) ?
-                              "ACTION_USB_AUDIO_ACCESSORY_PLUG" : "ACTION_USB_AUDIO_DEVICE_PLUG")
-                        + ", state = " + state + ", card: " + alsaCard + ", device: " + alsaDevice);
+
+                // Playback Device
+                device = AudioSystem.DEVICE_OUT_USB_ACCESSORY;
                 setWiredDeviceConnectionState(device, state, params);
+            } else if (action.equals(Intent.ACTION_USB_AUDIO_DEVICE_PLUG)) {
+                state = intent.getIntExtra("state", 0);
+
+                int alsaCard = intent.getIntExtra("card", -1);
+                int alsaDevice = intent.getIntExtra("device", -1);
+                boolean hasPlayback = intent.getBooleanExtra("hasPlayback", false);
+                boolean hasCapture = intent.getBooleanExtra("hasCapture", false);
+                boolean hasMIDI = intent.getBooleanExtra("hasMIDI", false);
+
+                String params = (alsaCard == -1 && alsaDevice == -1 ? ""
+                                    : "card=" + alsaCard + ";device=" + alsaDevice);
+
+                // Playback Device
+                if (hasPlayback) {
+                    device = AudioSystem.DEVICE_OUT_USB_DEVICE;
+                    setWiredDeviceConnectionState(device, state, params);
+                }
+
+                // Capture Device
+                if (hasCapture) {
+                    device = AudioSystem.DEVICE_IN_USB_DEVICE;
+                    setWiredDeviceConnectionState(device, state, params);
+                }
             } else if (action.equals(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED)) {
                 boolean broadcast = false;
                 int scoAudioState = AudioManager.SCO_AUDIO_STATE_ERROR;
@@ -4209,7 +4228,7 @@
                         mStreamStates[AudioSystem.STREAM_MUSIC], 0);
             }
         }
-    }
+    } // end class AudioServiceBroadcastReceiver
 
     //==========================================================================================
     // RemoteControlDisplay / RemoteControlClient / Remote info
@@ -4587,43 +4606,6 @@
         }
     }
 
-    public int verifyX509CertChain(int numcerts, byte [] chain, String domain, String authType) {
-
-        if (DEBUG_CERTS) {
-            Log.v(TAG, "java side verify for "
-                    + numcerts + " certificates (" + chain.length + " bytes"
-                            + ")for "+ domain + "/" + authType);
-        }
-
-        byte[][] certChain = new byte[numcerts][];
-
-        ByteBuffer buf = ByteBuffer.wrap(chain);
-        for (int i = 0; i < numcerts; i++) {
-            int certlen = buf.getInt();
-            if (DEBUG_CERTS) {
-                Log.i(TAG, "cert " + i +": " + certlen);
-            }
-            certChain[i] = new byte[certlen];
-            buf.get(certChain[i]);
-        }
-
-        try {
-            SslError err = CertificateChainValidator.verifyServerCertificates(certChain,
-                    domain, authType);
-            if (DEBUG_CERTS) {
-                Log.i(TAG, "verified: " + err);
-            }
-            if (err == null) {
-                return -1;
-            } else {
-                return err.getPrimaryError();
-            }
-        } catch (Exception e) {
-            Log.e(TAG, "failed to verify chain: " + e);
-        }
-        return SslError.SSL_INVALID;
-    }
-
 
     //==========================================================================================
     // Camera shutter sound policy.
diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java
index 661b0fd..327c10c 100644
--- a/media/java/android/media/AudioSystem.java
+++ b/media/java/android/media/AudioSystem.java
@@ -103,6 +103,9 @@
     /** @deprecated */
     @Deprecated public static final int ROUTE_ALL               = 0xFFFFFFFF;
 
+    // Keep in sync with system/core/include/system/audio.h
+    public static final int AUDIO_SESSION_ALLOCATE = 0;
+
     /*
      * Checks whether the specified stream type is active.
      *
@@ -285,6 +288,8 @@
                                              DEVICE_IN_USB_DEVICE |
                                              DEVICE_IN_DEFAULT);
     public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET;
+    public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY |
+                                                 DEVICE_IN_USB_DEVICE);
 
     // device states, must match AudioSystem::device_connection_state
     public static final int DEVICE_STATE_UNAVAILABLE = 0;
diff --git a/media/java/android/media/AudioTrack.java b/media/java/android/media/AudioTrack.java
index 01a6fc2..17840f2 100644
--- a/media/java/android/media/AudioTrack.java
+++ b/media/java/android/media/AudioTrack.java
@@ -16,13 +16,27 @@
 
 package android.media;
 
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
 import java.lang.ref.WeakReference;
+import java.nio.ByteBuffer;
+import java.nio.NioUtils;
 
+import android.annotation.IntDef;
+import android.app.ActivityThread;
+import android.app.AppOpsManager;
+import android.content.Context;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.util.Log;
 
+import com.android.internal.app.IAppOpsService;
+
 
 /**
  * The AudioTrack class manages and plays a single audio resource for Java applications.
@@ -63,10 +77,14 @@
     //---------------------------------------------------------
     // Constants
     //--------------------
-    /** Minimum value for a channel volume */
-    private static final float VOLUME_MIN = 0.0f;
-    /** Maximum value for a channel volume */
-    private static final float VOLUME_MAX = 1.0f;
+    /** Minimum value for a linear gain or auxiliary effect level.
+     *  This value must be exactly equal to 0.0f; do not change it.
+     */
+    private static final float GAIN_MIN = 0.0f;
+    /** Maximum value for a linear gain or auxiliary effect level.
+     *  This value must be greater than or equal to 1.0f.
+     */
+    private static final float GAIN_MAX = 1.0f;
 
     /** Minimum value for sample rate */
     private static final int SAMPLE_RATE_HZ_MIN = 4000;
@@ -145,6 +163,28 @@
     private final static String TAG = "android.media.AudioTrack";
 
 
+    /** @hide */
+    @IntDef({
+        WRITE_BLOCKING,
+        WRITE_NON_BLOCKING
+    })
+    @Retention(RetentionPolicy.SOURCE)
+    public @interface WriteMode {}
+
+    /**
+     * @hide CANDIDATE FOR PUBLIC API
+     * The write mode indicating the write operation will block until all data has been written,
+     * to be used in {@link #write(ByteBuffer, int, int, int)}.
+     */
+    public final static int WRITE_BLOCKING = 0;
+    /**
+     * @hide CANDIDATE FOR PUBLIC API
+     * The write mode indicating the write operation will return immediately after
+     * queuing as much audio data for playback as possible without blocking, to be used in
+     * {@link #write(ByteBuffer, int, int, int)}.
+     */
+    public final static int WRITE_NON_BLOCKING = 1;
+
     //--------------------------------------------------------------------------
     // Member variables
     //--------------------
@@ -211,8 +251,11 @@
     /**
      * Audio session ID
      */
-    private int mSessionId = 0;
-
+    private int mSessionId = AudioSystem.AUDIO_SESSION_ALLOCATE;
+    /**
+     * Reference to the app-ops service.
+     */
+    private final IAppOpsService mAppOps;
 
     //--------------------------------
     // Used exclusively by native code
@@ -263,7 +306,7 @@
             int bufferSizeInBytes, int mode)
     throws IllegalArgumentException {
         this(streamType, sampleRateInHz, channelConfig, audioFormat,
-                bufferSizeInBytes, mode, 0 /*session*/);
+                bufferSizeInBytes, mode, AudioSystem.AUDIO_SESSION_ALLOCATE);
     }
 
     /**
@@ -316,6 +359,9 @@
 
         audioBuffSizeCheck(bufferSizeInBytes);
 
+        IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE);
+        mAppOps = IAppOpsService.Stub.asInterface(b);
+
         if (sessionId < 0) {
             throw new IllegalArgumentException("Invalid audio session ID: "+sessionId);
         }
@@ -506,21 +552,25 @@
     // Getters
     //--------------------
     /**
-     * Returns the minimum valid volume value. Volume values set under this one will
-     * be clamped at this value.
-     * @return the minimum volume expressed as a linear attenuation.
+     * Returns the minimum gain value, which is the constant 0.0.
+     * Gain values less than 0.0 will be clamped to 0.0.
+     * <p>The word "volume" in the API name is historical; this is actually a linear gain.
+     * @return the minimum value, which is the constant 0.0.
      */
     static public float getMinVolume() {
-        return VOLUME_MIN;
+        return GAIN_MIN;
     }
 
     /**
-     * Returns the maximum valid volume value. Volume values set above this one will
-     * be clamped at this value.
-     * @return the maximum volume expressed as a linear attenuation.
+     * Returns the maximum gain value, which is greater than or equal to 1.0.
+     * Gain values greater than the maximum will be clamped to the maximum.
+     * <p>The word "volume" in the API name is historical; this is actually a gain.
+     * expressed as a linear multiplier on sample values, where a maximum value of 1.0
+     * corresponds to a gain of 0 dB (sample values left unmodified).
+     * @return the maximum value, which is greater than or equal to 1.0.
      */
     static public float getMaxVolume() {
-        return VOLUME_MAX;
+        return GAIN_MAX;
     }
 
     /**
@@ -803,47 +853,67 @@
     }
 
 
+    private static float clampGainOrLevel(float gainOrLevel) {
+        if (Float.isNaN(gainOrLevel)) {
+            throw new IllegalArgumentException();
+        }
+        if (gainOrLevel < GAIN_MIN) {
+            gainOrLevel = GAIN_MIN;
+        } else if (gainOrLevel > GAIN_MAX) {
+            gainOrLevel = GAIN_MAX;
+        }
+        return gainOrLevel;
+    }
+
 
      /**
-     * Sets the specified left/right output volume values on the AudioTrack. Values are clamped
-     * to the ({@link #getMinVolume()}, {@link #getMaxVolume()}) interval if outside this range.
-     * @param leftVolume output attenuation for the left channel. A value of 0.0f is silence,
-     *      a value of 1.0f is no attenuation.
-     * @param rightVolume output attenuation for the right channel
+     * Sets the specified left and right output gain values on the AudioTrack.
+     * <p>Gain values are clamped to the closed interval [0.0, max] where
+     * max is the value of {@link #getMaxVolume}.
+     * A value of 0.0 results in zero gain (silence), and
+     * a value of 1.0 means unity gain (signal unchanged).
+     * The default value is 1.0 meaning unity gain.
+     * <p>The word "volume" in the API name is historical; this is actually a linear gain.
+     * @param leftGain output gain for the left channel.
+     * @param rightGain output gain for the right channel
      * @return error code or success, see {@link #SUCCESS},
      *    {@link #ERROR_INVALID_OPERATION}
+     * @deprecated Applications should use {@link #setVolume} instead, as it
+     * more gracefully scales down to mono, and up to multi-channel content beyond stereo.
      */
-    public int setStereoVolume(float leftVolume, float rightVolume) {
+    public int setStereoVolume(float leftGain, float rightGain) {
+        if (isRestricted()) {
+            return SUCCESS;
+        }
         if (mState == STATE_UNINITIALIZED) {
             return ERROR_INVALID_OPERATION;
         }
 
-        // clamp the volumes
-        if (leftVolume < getMinVolume()) {
-            leftVolume = getMinVolume();
-        }
-        if (leftVolume > getMaxVolume()) {
-            leftVolume = getMaxVolume();
-        }
-        if (rightVolume < getMinVolume()) {
-            rightVolume = getMinVolume();
-        }
-        if (rightVolume > getMaxVolume()) {
-            rightVolume = getMaxVolume();
-        }
+        leftGain = clampGainOrLevel(leftGain);
+        rightGain = clampGainOrLevel(rightGain);
 
-        native_setVolume(leftVolume, rightVolume);
+        native_setVolume(leftGain, rightGain);
 
         return SUCCESS;
     }
 
 
     /**
-     * Similar, except set volume of all channels to same value.
-     * @hide
+     * Sets the specified output gain value on all channels of this track.
+     * <p>Gain values are clamped to the closed interval [0.0, max] where
+     * max is the value of {@link #getMaxVolume}.
+     * A value of 0.0 results in zero gain (silence), and
+     * a value of 1.0 means unity gain (signal unchanged).
+     * The default value is 1.0 meaning unity gain.
+     * <p>This API is preferred over {@link #setStereoVolume}, as it
+     * more gracefully scales down to mono, and up to multi-channel content beyond stereo.
+     * <p>The word "volume" in the API name is historical; this is actually a linear gain.
+     * @param gain output gain for all channels.
+     * @return error code or success, see {@link #SUCCESS},
+     *    {@link #ERROR_INVALID_OPERATION}
      */
-    public int setVolume(float volume) {
-        return setStereoVolume(volume, volume);
+    public int setVolume(float gain) {
+        return setStereoVolume(gain, gain);
     }
 
 
@@ -983,13 +1053,25 @@
         if (mState != STATE_INITIALIZED) {
             throw new IllegalStateException("play() called on uninitialized AudioTrack.");
         }
-
+        if (isRestricted()) {
+            setVolume(0);
+        }
         synchronized(mPlayStateLock) {
             native_start();
             mPlayState = PLAYSTATE_PLAYING;
         }
     }
 
+    private boolean isRestricted() {
+        try {
+            final int mode = mAppOps.checkAudioOperation(AppOpsManager.OP_PLAY_AUDIO, mStreamType,
+                    Process.myUid(), ActivityThread.currentPackageName());
+            return mode != AppOpsManager.MODE_ALLOWED;
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+
     /**
      * Stops playing the audio data.
      * When used on an instance created in {@link #MODE_STREAM} mode, audio will stop playing
@@ -1080,7 +1162,8 @@
             return ERROR_BAD_VALUE;
         }
 
-        int ret = native_write_byte(audioData, offsetInBytes, sizeInBytes, mAudioFormat);
+        int ret = native_write_byte(audioData, offsetInBytes, sizeInBytes, mAudioFormat,
+                true /*isBlocking*/);
 
         if ((mDataLoadMode == MODE_STATIC)
                 && (mState == STATE_NO_STATIC_DATA)
@@ -1137,6 +1220,73 @@
 
 
     /**
+     * @hide CANDIDATE FOR PUBLIC API
+     * Writes the audio data to the audio sink for playback (streaming mode),
+     * or copies audio data for later playback (static buffer mode).
+     * In static buffer mode, copies the data to the buffer starting at its 0 offset, and the write
+     * mode is ignored.
+     * In streaming mode, the blocking behavior will depend on the write mode.
+     * @param audioData the buffer that holds the data to play, starting at the position reported
+     *     by <code>audioData.position()</code>.
+     *     <BR>Note that upon return, the buffer position (<code>audioData.position()</code>) will
+     *     have been advanced to reflect the amount of data that was successfully written to
+     *     the AudioTrack.
+     * @param sizeInBytes number of bytes to write.
+     *     <BR>Note this may differ from <code>audioData.remaining()</code>, but cannot exceed it.
+     * @param writeMode one of {@link #WRITE_BLOCKING}, {@link #WRITE_NON_BLOCKING}. It has no
+     *     effect in static mode.
+     *     <BR>With {@link #WRITE_BLOCKING}, the write will block until all data has been written
+     *         to the audio sink.
+     *     <BR>With {@link #WRITE_NON_BLOCKING}, the write will return immediately after
+     *     queuing as much audio data for playback as possible without blocking.
+     * @return 0 or a positive number of bytes that were written, or
+     *     {@link #ERROR_BAD_VALUE}, {@link #ERROR_INVALID_OPERATION}
+     */
+    public int write(ByteBuffer audioData, int sizeInBytes,
+            @WriteMode int writeMode) {
+
+        if (mState == STATE_UNINITIALIZED) {
+            Log.e(TAG, "AudioTrack.write() called in invalid state STATE_UNINITIALIZED");
+            return ERROR_INVALID_OPERATION;
+        }
+
+        if ((writeMode != WRITE_BLOCKING) && (writeMode != WRITE_NON_BLOCKING)) {
+            Log.e(TAG, "AudioTrack.write() called with invalid blocking mode");
+            return ERROR_BAD_VALUE;
+        }
+
+        if ( (audioData == null) || (sizeInBytes < 0) || (sizeInBytes > audioData.remaining())) {
+            Log.e(TAG, "AudioTrack.write() called with invalid size (" + sizeInBytes + ") value");
+            return ERROR_BAD_VALUE;
+        }
+
+        int ret = 0;
+        if (audioData.isDirect()) {
+            ret = native_write_native_bytes(audioData,
+                    audioData.position(), sizeInBytes, mAudioFormat,
+                    writeMode == WRITE_BLOCKING);
+        } else {
+            ret = native_write_byte(NioUtils.unsafeArray(audioData),
+                    NioUtils.unsafeArrayOffset(audioData) + audioData.position(),
+                    sizeInBytes, mAudioFormat,
+                    writeMode == WRITE_BLOCKING);
+        }
+
+        if ((mDataLoadMode == MODE_STATIC)
+                && (mState == STATE_NO_STATIC_DATA)
+                && (ret > 0)) {
+            // benign race with respect to other APIs that read mState
+            mState = STATE_INITIALIZED;
+        }
+
+        if (ret > 0) {
+            audioData.position(audioData.position() + ret);
+        }
+
+        return ret;
+    }
+
+    /**
      * Notifies the native resource to reuse the audio data already loaded in the native
      * layer, that is to rewind to start of buffer.
      * The track's creation mode must be {@link #MODE_STATIC}.
@@ -1180,33 +1330,32 @@
 
     /**
      * Sets the send level of the audio track to the attached auxiliary effect
-     * {@link #attachAuxEffect(int)}.  The level value range is 0.0f to 1.0f.
-     * Values are clamped to the (0.0f, 1.0f) interval if outside this range.
+     * {@link #attachAuxEffect(int)}.  Effect levels
+     * are clamped to the closed interval [0.0, max] where
+     * max is the value of {@link #getMaxVolume}.
+     * A value of 0.0 results in no effect, and a value of 1.0 is full send.
      * <p>By default the send level is 0.0f, so even if an effect is attached to the player
      * this method must be called for the effect to be applied.
-     * <p>Note that the passed level value is a raw scalar. UI controls should be scaled
-     * logarithmically: the gain applied by audio framework ranges from -72dB to 0dB,
+     * <p>Note that the passed level value is a linear scalar. UI controls should be scaled
+     * logarithmically: the gain applied by audio framework ranges from -72dB to at least 0dB,
      * so an appropriate conversion from linear UI input x to level is:
      * x == 0 -&gt; level = 0
      * 0 &lt; x &lt;= R -&gt; level = 10^(72*(x-R)/20/R)
      *
-     * @param level send level scalar
+     * @param level linear send level
      * @return error code or success, see {@link #SUCCESS},
-     *    {@link #ERROR_INVALID_OPERATION}
+     *    {@link #ERROR_INVALID_OPERATION}, {@link #ERROR}
      */
     public int setAuxEffectSendLevel(float level) {
+        if (isRestricted()) {
+            return SUCCESS;
+        }
         if (mState == STATE_UNINITIALIZED) {
             return ERROR_INVALID_OPERATION;
         }
-        // clamp the level
-        if (level < getMinVolume()) {
-            level = getMinVolume();
-        }
-        if (level > getMaxVolume()) {
-            level = getMaxVolume();
-        }
-        native_setAuxEffectSendLevel(level);
-        return SUCCESS;
+        level = clampGainOrLevel(level);
+        int err = native_setAuxEffectSendLevel(level);
+        return err == 0 ? SUCCESS : ERROR;
     }
 
     //---------------------------------------------------------
@@ -1319,7 +1468,7 @@
     //--------------------
 
     private native final int native_setup(Object audiotrack_this,
-            int streamType, int sampleRate, int nbChannels, int audioFormat,
+            int streamType, int sampleRate, int channelMask, int audioFormat,
             int buffSizeInBytes, int mode, int[] sessionId);
 
     private native final void native_finalize();
@@ -1335,11 +1484,15 @@
     private native final void native_flush();
 
     private native final int native_write_byte(byte[] audioData,
-                                               int offsetInBytes, int sizeInBytes, int format);
+                                               int offsetInBytes, int sizeInBytes, int format,
+                                               boolean isBlocking);
 
     private native final int native_write_short(short[] audioData,
                                                 int offsetInShorts, int sizeInShorts, int format);
 
+    private native final int native_write_native_bytes(Object audioData,
+            int positionInBytes, int sizeInBytes, int format, boolean blocking);
+
     private native final int native_reload_static();
 
     private native final int native_get_native_frame_count();
@@ -1372,7 +1525,7 @@
             int sampleRateInHz, int channelConfig, int audioFormat);
 
     private native final int native_attachAuxEffect(int effectId);
-    private native final void native_setAuxEffectSendLevel(float level);
+    private native final int native_setAuxEffectSendLevel(float level);
 
     //---------------------------------------------------------
     // Utility methods
diff --git a/media/java/android/media/DngCreator.java b/media/java/android/media/DngCreator.java
new file mode 100644
index 0000000..b2a38ab
--- /dev/null
+++ b/media/java/android/media/DngCreator.java
@@ -0,0 +1,254 @@
+/*
+ * Copyright 2014 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 android.media;
+
+import android.graphics.Bitmap;
+import android.hardware.camera2.CameraCharacteristics;
+import android.hardware.camera2.CaptureResult;
+import android.location.Location;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.ByteBuffer;
+
+/**
+ * The {@link DngCreator} class provides functions to write raw pixel data as a DNG file.
+ *
+ * <p>
+ * This class is designed to be used with the {@link android.graphics.ImageFormat#RAW_SENSOR}
+ * buffers available from {@link android.hardware.camera2.CameraDevice}, or with Bayer-type raw
+ * pixel data that is otherwise generated by an application.  The DNG metadata tags will be
+ * generated from a {@link android.hardware.camera2.CaptureResult} object or set directly.
+ * </p>
+ *
+ * <p>
+ * The DNG file format is a cross-platform file format that is used to store pixel data from
+ * camera sensors with minimal pre-processing applied.  DNG files allow for pixel data to be
+ * defined in a user-defined colorspace, and have associated metadata that allow for this
+ * pixel data to be converted to the standard CIE XYZ colorspace during post-processing.
+ * </p>
+ *
+ * <p>
+ * For more information on the DNG file format and associated metadata, please refer to the
+ * <a href=
+ * "https://wwwimages2.adobe.com/content/dam/Adobe/en/products/photoshop/pdfs/dng_spec_1.4.0.0.pdf">
+ * Adobe DNG 1.4.0.0 specification</a>.
+ * </p>
+ */
+public final class DngCreator {
+
+    /**
+     * Create a new DNG object.
+     *
+     * <p>
+     * It is not necessary to call any set methods to write a well-formatted DNG file.
+     * </p>
+     * <p>
+     * DNG metadata tags will be generated from the corresponding parameters in the
+     * {@link android.hardware.camera2.CaptureResult} object.  This removes or overrides
+     * all previous tags set.
+     * </p>
+     *
+     * @param characteristics an object containing the static
+     *          {@link android.hardware.camera2.CameraCharacteristics}.
+     * @param metadata a metadata object to generate tags from.
+     */
+    public DngCreator(CameraCharacteristics characteristics, CaptureResult metadata) {/*TODO*/}
+
+    /**
+     * Set the orientation value to write.
+     *
+     * <p>
+     * This will be written as the TIFF "Orientation" tag {@code (0x0112)}.
+     * Calling this will override any prior settings for this tag.
+     * </p>
+     *
+     * @param orientation the orientation value to set, one of:
+     *                    <ul>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_NORMAL}</li>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_FLIP_HORIZONTAL}</li>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_ROTATE_180}</li>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_FLIP_VERTICAL}</li>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_TRANSPOSE}</li>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_ROTATE_90}</li>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_TRANSVERSE}</li>
+     *                      <li>{@link android.media.ExifInterface#ORIENTATION_ROTATE_270}</li>
+     *                    </ul>
+     * @return this {@link #DngCreator} object.
+     */
+    public DngCreator setOrientation(int orientation) {
+        return this;
+    }
+
+    /**
+     * Set the thumbnail image.
+     *
+     * <p>
+     * Pixel data will be converted to a Baseline TIFF RGB image, with 8 bits per color channel.
+     * The alpha channel will be discarded.
+     * </p>
+     *
+     * <p>
+     * The given bitmap should not be altered while this object is in use.
+     * </p>
+     *
+     * @param pixels a {@link android.graphics.Bitmap} of pixel data.
+     * @return this {@link #DngCreator} object.
+     */
+    public DngCreator setThumbnail(Bitmap pixels) {
+        return this;
+    }
+
+    /**
+     * Set the thumbnail image.
+     *
+     * <p>
+     * Pixel data is interpreted as a {@link android.graphics.ImageFormat#YUV_420_888} image.
+     * </p>
+     *
+     * <p>
+     * The given image should not be altered while this object is in use.
+     * </p>
+     *
+     * @param pixels an {@link android.media.Image} object with the format
+     *               {@link android.graphics.ImageFormat#YUV_420_888}.
+     * @return this {@link #DngCreator} object.
+     */
+    public DngCreator setThumbnail(Image pixels) {
+        return this;
+    }
+
+
+    /**
+     * Set image location metadata.
+     *
+     * <p>
+     * The given location object must contain at least a valid time, latitude, and longitude
+     * (equivalent to the values returned by {@link android.location.Location#getTime()},
+     * {@link android.location.Location#getLatitude()}, and
+     * {@link android.location.Location#getLongitude()} methods).
+     * </p>
+     *
+     * @param location an {@link android.location.Location} object to set.
+     * @return this {@link #DngCreator} object.
+     *
+     * @throws java.lang.IllegalArgumentException if the given location object doesn't
+     *          contain enough information to set location metadata.
+     */
+    public DngCreator setLocation(Location location) { return this; }
+
+    /**
+     * Set the user description string to write.
+     *
+     * <p>
+     * This is equivalent to setting the TIFF "ImageDescription" tag {@code (0x010E)}.
+     * </p>
+     *
+     * @param description the user description string.
+     * @return this {@link #DngCreator} object.
+     */
+    public DngCreator setDescription(String description) {
+        return this;
+    }
+
+    /**
+     * Write the {@link android.graphics.ImageFormat#RAW_SENSOR} pixel data to a DNG file with
+     * the currently configured metadata.
+     *
+     * <p>
+     * Raw pixel data must have 16 bits per pixel, and the input must contain at least
+     * {@code offset + 2 * (stride * (height - 1) + width * height)} bytes.  The width and height of
+     * the input are taken from the width and height set in the {@link DngCreator} metadata tags,
+     * and will typically be equal to the width and height of
+     * {@link android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE}.
+     * If insufficient metadata is set to write a well-formatted DNG file, and
+     * {@link java.lang.IllegalStateException} will be thrown.
+     * </p>
+     *
+     * <p>
+     * When reading from the pixel input, {@code stride} pixels will be skipped
+     * after each row (excluding the last).
+     * </p>
+     *
+     * @param dngOutput an {@link java.io.OutputStream} to write the DNG file to.
+     * @param pixels an {@link java.io.InputStream} of pixel data to write.
+     * @param stride the stride of the raw image in pixels.
+     * @param offset the offset of the raw image in bytes.  This indicates how many bytes will
+     *               be skipped in the input before any pixel data is read.
+     *
+     * @throws IOException if an error was encountered in the input or output stream.
+     * @throws java.lang.IllegalStateException if not enough metadata information has been
+     *          set to write a well-formatted DNG file.
+     */
+    public void writeInputStream(OutputStream dngOutput, InputStream pixels, int stride,
+                                 long offset) throws IOException {
+        /*TODO*/
+    }
+
+    /**
+     * Write the {@link android.graphics.ImageFormat#RAW_SENSOR} pixel data to a DNG file with
+     * the currently configured metadata.
+     *
+     * <p>
+     * Raw pixel data must have 16 bits per pixel, and the input must contain at least
+     * {@code offset + 2 * (stride * (height - 1) + width * height)} bytes.  The width and height of
+     * the input are taken from the width and height set in the {@link DngCreator} metadata tags,
+     * and will typically be equal to the width and height of
+     * {@link android.hardware.camera2.CameraCharacteristics#SENSOR_INFO_ACTIVE_ARRAY_SIZE}.
+     * If insufficient metadata is set to write a well-formatted DNG file, and
+     * {@link java.lang.IllegalStateException} will be thrown.
+     * </p>
+     *
+     * <p>
+     * When reading from the pixel input, {@code stride} pixels will be skipped
+     * after each row (excluding the last).
+     * </p>
+     *
+     * @param dngOutput an {@link java.io.OutputStream} to write the DNG file to.
+     * @param pixels an {@link java.nio.ByteBuffer} of pixel data to write.
+     * @param stride the stride of the raw image in pixels.
+     * @param offset the offset of the raw image in bytes.  This indicates how many bytes will
+     *               be skipped in the input before any pixel data is read.
+     *
+     * @throws IOException if an error was encountered in the input or output stream.
+     * @throws java.lang.IllegalStateException if not enough metadata information has been
+     *          set to write a well-formatted DNG file.
+     */
+    public void writeByteBuffer(OutputStream dngOutput, ByteBuffer pixels, int stride,
+                                long offset) throws IOException {/*TODO*/}
+
+    /**
+     * Write the pixel data to a DNG file with the currently configured metadata.
+     *
+     * <p>
+     * For this method to succeed, the {@link android.media.Image} input must contain
+     * {@link android.graphics.ImageFormat#RAW_SENSOR} pixel data, otherwise an
+     * {@link java.lang.IllegalArgumentException} will be thrown.
+     * </p>
+     *
+     * @param dngOutput an {@link java.io.OutputStream} to write the DNG file to.
+     * @param pixels an {@link android.media.Image} to write.
+     *
+     * @throws java.io.IOException if an error was encountered in the output stream.
+     * @throws java.lang.IllegalArgumentException if an image with an unsupported format was used.
+     * @throws java.lang.IllegalStateException if not enough metadata information has been
+     *          set to write a well-formatted DNG file.
+     */
+    public void writeImage(OutputStream dngOutput, Image pixels) throws IOException {/*TODO*/}
+
+}
diff --git a/media/java/android/media/EncoderCapabilities.java b/media/java/android/media/EncoderCapabilities.java
index 71cb1b3..332e360 100644
--- a/media/java/android/media/EncoderCapabilities.java
+++ b/media/java/android/media/EncoderCapabilities.java
@@ -18,7 +18,6 @@
 
 import java.util.List;
 import java.util.ArrayList;
-import android.util.Log;
 
 /**
  * The EncoderCapabilities class is used to retrieve the
diff --git a/media/java/android/media/IAudioService.aidl b/media/java/android/media/IAudioService.aidl
index b5c3631..2f08325 100644
--- a/media/java/android/media/IAudioService.aidl
+++ b/media/java/android/media/IAudioService.aidl
@@ -35,8 +35,6 @@
  */
 interface IAudioService {
 
-    int verifyX509CertChain(int chainsize, in byte[] chain, String host, String authtype);
-
     void adjustVolume(int direction, int flags, String callingPackage);
 
     boolean isLocalOrRemoteMusicActive();
@@ -238,5 +236,4 @@
     AudioRoutesInfo startWatchingRoutes(in IAudioRoutesObserver observer);
 
     boolean isCameraSoundForced();
-
 }
diff --git a/media/java/android/media/IMediaHTTPConnection.aidl b/media/java/android/media/IMediaHTTPConnection.aidl
new file mode 100644
index 0000000..55ffc2e
--- /dev/null
+++ b/media/java/android/media/IMediaHTTPConnection.aidl
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2013 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 android.media;
+
+import android.os.IBinder;
+
+/** MUST STAY IN SYNC WITH NATIVE CODE at libmedia/IMediaHTTPConnection.{cpp,h} */
+
+/** @hide */
+interface IMediaHTTPConnection
+{
+    IBinder connect(in String uri, in String headers);
+    void disconnect();
+
+    int readAt(long offset, int size);
+    long getSize();
+    String getMIMEType();
+    String getUri();
+}
+
diff --git a/media/java/android/media/IMediaHTTPService.aidl b/media/java/android/media/IMediaHTTPService.aidl
new file mode 100644
index 0000000..8aaf6b3
--- /dev/null
+++ b/media/java/android/media/IMediaHTTPService.aidl
@@ -0,0 +1,27 @@
+/*
+ * Copyright (C) 2013 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 android.media;
+
+import android.media.IMediaHTTPConnection;
+
+/** MUST STAY IN SYNC WITH NATIVE CODE at libmedia/IMediaHTTPService.{cpp,h} */
+
+/** @hide */
+interface IMediaHTTPService
+{
+    IMediaHTTPConnection makeHTTPConnection();
+}
diff --git a/media/java/android/media/Image.java b/media/java/android/media/Image.java
index 23abce7..a346e17 100644
--- a/media/java/android/media/Image.java
+++ b/media/java/android/media/Image.java
@@ -21,7 +21,8 @@
 
 /**
  * <p>A single complete image buffer to use with a media source such as a
- * {@link MediaCodec}.</p>
+ * {@link MediaCodec} or a
+ * {@link android.hardware.camera2.CameraDevice CameraDevice}.</p>
  *
  * <p>This class allows for efficient direct application access to the pixel
  * data of the Image through one or more
@@ -82,6 +83,15 @@
      *     plane (4:2:0 subsampling). Each pixel sample in each plane has 8 bits.
      *     Each plane has its own row stride and pixel stride.</td>
      * </tr>
+     * <tr>
+     *   <td>{@link android.graphics.ImageFormat#RAW_SENSOR RAW_SENSOR}</td>
+     *   <td>1</td>
+     *   <td>A single plane of raw sensor image data, with 16 bits per color
+     *     sample. The details of the layout need to be queried from the source of
+     *     the raw sensor data, such as
+     *     {@link android.hardware.camera2.CameraDevice CameraDevice}.
+     *   </td>
+     * </tr>
      * </table>
      *
      * @see android.graphics.ImageFormat
diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java
index d454c42..1bd32c4 100644
--- a/media/java/android/media/ImageReader.java
+++ b/media/java/android/media/ImageReader.java
@@ -32,7 +32,8 @@
  * rendered into a {@link android.view.Surface}</p>
  *
  * <p>Several Android media API classes accept Surface objects as targets to
- * render to, including {@link MediaPlayer}, {@link MediaCodec}, and
+ * render to, including {@link MediaPlayer}, {@link MediaCodec},
+ * {@link android.hardware.camera2.CameraDevice}, and
  * {@link android.renderscript.Allocation RenderScript Allocations}. The image
  * sizes and formats that can be used with each source vary, and should be
  * checked in the documentation for the specific API.</p>
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index ddf88df..115786c 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -21,8 +21,12 @@
 import android.media.MediaCrypto;
 import android.media.MediaFormat;
 import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
 import android.view.Surface;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.Map;
@@ -66,8 +70,8 @@
  *
  * Each codec maintains a number of input and output buffers that are
  * referred to by index in API calls.
- * The contents of these buffers is represented by the ByteBuffer[] arrays
- * accessible through getInputBuffers() and getOutputBuffers().
+ * The contents of these buffers are represented by the ByteBuffer[] arrays
+ * accessible through {@link #getInputBuffers} and {@link #getOutputBuffers}.
  *
  * After a successful call to {@link #start} the client "owns" neither
  * input nor output buffers, subsequent calls to {@link #dequeueInputBuffer}
@@ -117,7 +121,18 @@
  * own any buffers anymore.
  * Note that the format of the data submitted after a flush must not change,
  * flush does not support format discontinuities,
- * for this a full stop(), configure(), start() cycle is necessary.
+ * for this a full {@link #stop}, {@link #configure}, {@link #start}
+ * cycle is necessary.
+ *
+ * <p> The factory methods
+ * {@link #createByCodecName},
+ * {@link #createDecoderByType},
+ * and {@link #createEncoderByType}
+ * throw {@link java.io.IOException} on failure which
+ * the caller must catch or declare to pass up.
+ * Other methods will throw {@link java.lang.IllegalStateException}
+ * if the codec is in an Uninitialized, Invalid, or Error state (e.g. not
+ * initialized properly).  Exceptions are thrown elsewhere as noted. </p>
  *
  */
 final public class MediaCodec {
@@ -161,6 +176,34 @@
      */
     public static final int BUFFER_FLAG_END_OF_STREAM         = 4;
 
+    private EventHandler mEventHandler;
+    private volatile NotificationCallback mNotificationCallback;
+
+    static final int EVENT_NOTIFY = 1;
+
+    private class EventHandler extends Handler {
+        private MediaCodec mCodec;
+
+        public EventHandler(MediaCodec codec, Looper looper) {
+            super(looper);
+            mCodec = codec;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case EVENT_NOTIFY:
+                {
+                    NotificationCallback cb = mNotificationCallback;
+                    if (cb != null) {
+                        cb.onCodecNotify(mCodec);
+                    }
+                    break;
+                }
+            }
+        }
+    }
+
     /**
      * Instantiate a decoder supporting input data of the given mime type.
      *
@@ -181,16 +224,22 @@
      * </ul>
      *
      * @param type The mime type of the input data.
+     * @throws IOException if the codec cannot be created.
+     * @throws IllegalArgumentException if type is null.
      */
-    public static MediaCodec createDecoderByType(String type) {
+    public static MediaCodec createDecoderByType(String type)
+            throws IOException {
         return new MediaCodec(type, true /* nameIsType */, false /* encoder */);
     }
 
     /**
      * Instantiate an encoder supporting output data of the given mime type.
      * @param type The desired mime type of the output data.
+     * @throws IOException if the codec cannot be created.
+     * @throws IllegalArgumentException if type is null.
      */
-    public static MediaCodec createEncoderByType(String type) {
+    public static MediaCodec createEncoderByType(String type)
+            throws IOException {
         return new MediaCodec(type, true /* nameIsType */, true /* encoder */);
     }
 
@@ -199,14 +248,26 @@
      * use this method to instantiate it. Use with caution.
      * Likely to be used with information obtained from {@link android.media.MediaCodecList}
      * @param name The name of the codec to be instantiated.
+     * @throws IOException if the codec cannot be created.
+     * @throws IllegalArgumentException if name is null.
      */
-    public static MediaCodec createByCodecName(String name) {
+    public static MediaCodec createByCodecName(String name)
+            throws IOException {
         return new MediaCodec(
                 name, false /* nameIsType */, false /* unused */);
     }
 
     private MediaCodec(
             String name, boolean nameIsType, boolean encoder) {
+        Looper looper;
+        if ((looper = Looper.myLooper()) != null) {
+            mEventHandler = new EventHandler(this, looper);
+        } else if ((looper = Looper.getMainLooper()) != null) {
+            mEventHandler = new EventHandler(this, looper);
+        } else {
+            mEventHandler = null;
+        }
+
         native_setup(name, nameIsType, encoder);
     }
 
@@ -272,6 +333,10 @@
      * <p>
      * The application is responsible for calling release() on the Surface when
      * done.
+     * <p>
+     * The Surface must be rendered with a hardware-accelerated API, such as OpenGL ES.
+     * {@link android.view.Surface#lockCanvas(android.graphics.Rect)} may fail or produce
+     * unexpected results.
      */
     public native final Surface createInputSurface();
 
@@ -287,7 +352,15 @@
      * To ensure that it is available to other client call {@link #release}
      * and don't just rely on garbage collection to eventually do this for you.
      */
-    public native final void stop();
+    public final void stop() {
+        native_stop();
+
+        if (mEventHandler != null) {
+            mEventHandler.removeMessages(EVENT_NOTIFY);
+        }
+    }
+
+    private native final void native_stop();
 
     /**
      * Flush both input and output ports of the component, all indices
@@ -618,6 +691,22 @@
         setParameters(keys, values);
     }
 
+    public void setNotificationCallback(NotificationCallback cb) {
+        mNotificationCallback = cb;
+    }
+
+    public interface NotificationCallback {
+        void onCodecNotify(MediaCodec codec);
+    }
+
+    private void postEventFromNative(
+            int what, int arg1, int arg2, Object obj) {
+        if (mEventHandler != null) {
+            Message msg = mEventHandler.obtainMessage(what, arg1, arg2, obj);
+            mEventHandler.sendMessage(msg);
+        }
+    }
+
     private native final void setParameters(String[] keys, Object[] values);
 
     /**
diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java
index 532e39a..440653a 100644
--- a/media/java/android/media/MediaDrm.java
+++ b/media/java/android/media/MediaDrm.java
@@ -16,7 +16,6 @@
 
 package android.media;
 
-import android.media.MediaDrmException;
 import java.lang.ref.WeakReference;
 import java.util.UUID;
 import java.util.HashMap;
@@ -26,7 +25,6 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.os.Bundle;
 import android.os.Parcel;
 import android.util.Log;
 
diff --git a/media/java/android/media/MediaExtractor.java b/media/java/android/media/MediaExtractor.java
index c3e5035..f2753ee 100644
--- a/media/java/android/media/MediaExtractor.java
+++ b/media/java/android/media/MediaExtractor.java
@@ -21,7 +21,9 @@
 import android.content.res.AssetFileDescriptor;
 import android.media.MediaCodec;
 import android.media.MediaFormat;
+import android.media.MediaHTTPService;
 import android.net.Uri;
+import android.os.IBinder;
 
 import java.io.FileDescriptor;
 import java.io.IOException;
@@ -137,11 +139,19 @@
                 ++i;
             }
         }
-        setDataSource(path, keys, values);
+
+        nativeSetDataSource(
+                MediaHTTPService.createHttpServiceBinderIfNecessary(path),
+                path,
+                keys,
+                values);
     }
 
-    private native final void setDataSource(
-            String path, String[] keys, String[] values) throws IOException;
+    private native final void nativeSetDataSource(
+            IBinder httpServiceBinder,
+            String path,
+            String[] keys,
+            String[] values) throws IOException;
 
     /**
      * Sets the data source (file-path or http URL) to use.
@@ -156,7 +166,11 @@
      * and then use the file descriptor form {@link #setDataSource(FileDescriptor)}.
      */
     public final void setDataSource(String path) throws IOException {
-        setDataSource(path, null, null);
+        nativeSetDataSource(
+                MediaHTTPService.createHttpServiceBinderIfNecessary(path),
+                path,
+                null,
+                null);
     }
 
     /**
diff --git a/media/java/android/media/MediaFile.java b/media/java/android/media/MediaFile.java
index 761ecca..526656a 100644
--- a/media/java/android/media/MediaFile.java
+++ b/media/java/android/media/MediaFile.java
@@ -16,17 +16,12 @@
 
 package android.media;
 
-import android.content.ContentValues;
-import android.provider.MediaStore.Audio;
-import android.provider.MediaStore.Images;
-import android.provider.MediaStore.Video;
 import android.media.DecoderCapabilities;
 import android.media.DecoderCapabilities.VideoDecoder;
 import android.media.DecoderCapabilities.AudioDecoder;
 import android.mtp.MtpConstants;
 
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 
diff --git a/media/java/android/media/MediaFocusControl.java b/media/java/android/media/MediaFocusControl.java
index 34008bb..1c73c05 100644
--- a/media/java/android/media/MediaFocusControl.java
+++ b/media/java/android/media/MediaFocusControl.java
@@ -32,6 +32,7 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.database.ContentObserver;
+import android.media.PlayerRecord.RemotePlaybackState;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.Bundle;
@@ -51,7 +52,6 @@
 import android.util.Slog;
 import android.view.KeyEvent;
 
-import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -120,6 +120,9 @@
 
         mHasRemotePlayback = false;
         mMainRemoteIsActive = false;
+
+        PlayerRecord.setMediaFocusControl(this);
+
         postReevaluateRemote();
     }
 
@@ -251,7 +254,7 @@
                 currentUser);
         if (DEBUG_RC) { Log.d(TAG, " > enabled list: " + enabledNotifListeners); }
         synchronized(mAudioFocusLock) {
-            synchronized(mRCStack) {
+            synchronized(mPRStack) {
                 // check whether the "enable" status of each RCD with a notification listener
                 // has changed
                 final String[] enabledComponents;
@@ -263,7 +266,7 @@
                 final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
                 while (displayIterator.hasNext()) {
                     final DisplayInfoForServer di =
-                            (DisplayInfoForServer) displayIterator.next();
+                            displayIterator.next();
                     if (di.mClientNotifListComp != null) {
                         boolean wasEnabled = di.mEnabled;
                         di.mEnabled = isComponentInStringArray(di.mClientNotifListComp,
@@ -324,12 +327,12 @@
     private static final int MSG_REEVALUATE_REMOTE = 3;
     private static final int MSG_RCC_NEW_PLAYBACK_INFO = 4;
     private static final int MSG_RCC_NEW_VOLUME_OBS = 5;
-    private static final int MSG_PROMOTE_RCC = 6;
-    private static final int MSG_RCC_NEW_PLAYBACK_STATE = 7;
-    private static final int MSG_RCC_SEEK_REQUEST = 8;
-    private static final int MSG_RCC_UPDATE_METADATA = 9;
-    private static final int MSG_RCDISPLAY_INIT_INFO = 10;
-    private static final int MSG_REEVALUATE_RCD = 11;
+    private static final int MSG_RCC_NEW_PLAYBACK_STATE = 6;
+    private static final int MSG_RCC_SEEK_REQUEST = 7;
+    private static final int MSG_RCC_UPDATE_METADATA = 8;
+    private static final int MSG_RCDISPLAY_INIT_INFO = 9;
+    private static final int MSG_REEVALUATE_RCD = 10;
+    private static final int MSG_UNREGISTER_MEDIABUTTONINTENT = 11;
 
     // sendMsg() flags
     /** If the msg is already queued, replace it with this one. */
@@ -369,7 +372,7 @@
 
                 case MSG_RCDISPLAY_UPDATE:
                     // msg.obj is guaranteed to be non null
-                    onRcDisplayUpdate( (RemoteControlStackEntry) msg.obj, msg.arg1);
+                    onRcDisplayUpdate( (PlayerRecord) msg.obj, msg.arg1);
                     break;
 
                 case MSG_REEVALUATE_REMOTE:
@@ -389,7 +392,7 @@
                 case MSG_RCC_NEW_PLAYBACK_STATE:
                     onNewPlaybackStateForRcc(msg.arg1 /* rccId */,
                             msg.arg2 /* state */,
-                            (RccPlaybackState)msg.obj /* newState */);
+                            (PlayerRecord.RccPlaybackState)msg.obj /* newState */);
                     break;
 
                 case MSG_RCC_SEEK_REQUEST:
@@ -402,10 +405,6 @@
                             (Rating) msg.obj /* value */);
                     break;
 
-                case MSG_PROMOTE_RCC:
-                    onPromoteRcc(msg.arg1);
-                    break;
-
                 case MSG_RCDISPLAY_INIT_INFO:
                     // msg.obj is guaranteed to be non null
                     onRcDisplayInitInfo((IRemoteControlDisplay)msg.obj /*newRcd*/,
@@ -415,6 +414,10 @@
                 case MSG_REEVALUATE_RCD:
                     onReevaluateRemoteControlDisplays();
                     break;
+
+                case MSG_UNREGISTER_MEDIABUTTONINTENT:
+                    unregisterMediaButtonIntent( (PendingIntent) msg.obj );
+                    break;
             }
         }
     }
@@ -463,10 +466,6 @@
                 final FocusRequester exFocusOwner = mFocusStack.pop();
                 exFocusOwner.handleFocusLoss(AudioManager.AUDIOFOCUS_LOSS);
                 exFocusOwner.release();
-                // clear RCD
-                synchronized(mRCStack) {
-                    clearRemoteControlDisplay_syncAfRcs();
-                }
             }
         }
     }
@@ -527,10 +526,6 @@
             if (signal) {
                 // notify the new top of the stack it gained focus
                 notifyTopOfAudioFocusStack();
-                // there's a new top of the stack, let the remote control know
-                synchronized(mRCStack) {
-                    checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-                }
             }
         } else {
             // focus is abandoned by a client that's not at the top of the stack,
@@ -539,7 +534,7 @@
             //  evaluated it, traversal order doesn't matter here)
             Iterator<FocusRequester> stackIterator = mFocusStack.iterator();
             while(stackIterator.hasNext()) {
-                FocusRequester fr = (FocusRequester)stackIterator.next();
+                FocusRequester fr = stackIterator.next();
                 if(fr.hasSameClient(clientToRemove)) {
                     Log.i(TAG, "AudioFocus  removeFocusStackEntry(): removing entry for "
                             + clientToRemove);
@@ -563,7 +558,7 @@
         //  evaluated it, traversal order doesn't matter here)
         Iterator<FocusRequester> stackIterator = mFocusStack.iterator();
         while(stackIterator.hasNext()) {
-            FocusRequester fr = (FocusRequester)stackIterator.next();
+            FocusRequester fr = stackIterator.next();
             if(fr.hasSameBinder(cb)) {
                 Log.i(TAG, "AudioFocus  removeFocusStackEntry(): removing entry for " + cb);
                 stackIterator.remove();
@@ -574,10 +569,6 @@
             // we removed an entry at the top of the stack:
             //  notify the new top of the stack it gained focus.
             notifyTopOfAudioFocusStack();
-            // there's a new top of the stack, let the remote control know
-            synchronized(mRCStack) {
-                checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-            }
         }
     }
 
@@ -686,10 +677,6 @@
             mFocusStack.push(new FocusRequester(mainStreamType, focusChangeHint, fd, cb,
                     clientId, afdh, callingPackageName, Binder.getCallingUid()));
 
-            // there's a new top of the stack, let the remote control know
-            synchronized(mRCStack) {
-                checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-            }
         }//synchronized(mAudioFocusLock)
 
         return AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
@@ -751,7 +738,7 @@
         }
         // event filtering for telephony
         synchronized(mRingingLock) {
-            synchronized(mRCStack) {
+            synchronized(mPRStack) {
                 if ((mMediaReceiverForCalls != null) &&
                         (mIsRinging || (mAudioService.getMode() == AudioSystem.MODE_IN_CALL))) {
                     dispatchMediaKeyEventForCalls(keyEvent, needWakeLock);
@@ -804,15 +791,15 @@
         }
         Intent keyIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
         keyIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
-        synchronized(mRCStack) {
-            if (!mRCStack.empty()) {
+        synchronized(mPRStack) {
+            if (!mPRStack.empty()) {
                 // send the intent that was registered by the client
                 try {
-                    mRCStack.peek().mMediaIntent.send(mContext,
+                    mPRStack.peek().getMediaButtonIntent().send(mContext,
                             needWakeLock ? WAKELOCK_RELEASE_ON_FINISHED : 0 /*code*/,
                             keyIntent, this, mEventHandler);
                 } catch (CanceledException e) {
-                    Log.e(TAG, "Error sending pending intent " + mRCStack.peek());
+                    Log.e(TAG, "Error sending pending intent " + mPRStack.peek());
                     e.printStackTrace();
                 }
             } else {
@@ -931,33 +918,11 @@
         }
     }
 
-    protected static boolean isMediaKeyCode(int keyCode) {
-        switch (keyCode) {
-            case KeyEvent.KEYCODE_MUTE:
-            case KeyEvent.KEYCODE_HEADSETHOOK:
-            case KeyEvent.KEYCODE_MEDIA_PLAY:
-            case KeyEvent.KEYCODE_MEDIA_PAUSE:
-            case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
-            case KeyEvent.KEYCODE_MEDIA_STOP:
-            case KeyEvent.KEYCODE_MEDIA_NEXT:
-            case KeyEvent.KEYCODE_MEDIA_PREVIOUS:
-            case KeyEvent.KEYCODE_MEDIA_REWIND:
-            case KeyEvent.KEYCODE_MEDIA_RECORD:
-            case KeyEvent.KEYCODE_MEDIA_FAST_FORWARD:
-            case KeyEvent.KEYCODE_MEDIA_CLOSE:
-            case KeyEvent.KEYCODE_MEDIA_EJECT:
-            case KeyEvent.KEYCODE_MEDIA_AUDIO_TRACK:
-                return true;
-            default:
-                return false;
-        }
-    }
-
     private static boolean isValidMediaKeyEvent(KeyEvent keyEvent) {
         if (keyEvent == null) {
             return false;
         }
-        return MediaFocusControl.isMediaKeyCode(keyEvent.getKeyCode());
+        return KeyEvent.isMediaKey(keyEvent.getKeyCode());
     }
 
     /**
@@ -1044,7 +1009,7 @@
     };
 
     /**
-     * Synchronization on mCurrentRcLock always inside a block synchronized on mRCStack
+     * Synchronization on mCurrentRcLock always inside a block synchronized on mPRStack
      */
     private final Object mCurrentRcLock = new Object();
     /**
@@ -1073,51 +1038,6 @@
      */
     private int mCurrentRcClientGen = 0;
 
-    /**
-     * Inner class to monitor remote control client deaths, and remove the client for the
-     * remote control stack if necessary.
-     */
-    private class RcClientDeathHandler implements IBinder.DeathRecipient {
-        final private IBinder mCb; // To be notified of client's death
-        final private PendingIntent mMediaIntent;
-
-        RcClientDeathHandler(IBinder cb, PendingIntent pi) {
-            mCb = cb;
-            mMediaIntent = pi;
-        }
-
-        public void binderDied() {
-            Log.w(TAG, "  RemoteControlClient died");
-            // remote control client died, make sure the displays don't use it anymore
-            //  by setting its remote control client to null
-            registerRemoteControlClient(mMediaIntent, null/*rcClient*/, null/*ignored*/);
-            // the dead client was maybe handling remote playback, reevaluate
-            postReevaluateRemote();
-        }
-
-        public IBinder getBinder() {
-            return mCb;
-        }
-    }
-
-    /**
-     * A global counter for RemoteControlClient identifiers
-     */
-    private static int sLastRccId = 0;
-
-    private class RemotePlaybackState {
-        int mRccId;
-        int mVolume;
-        int mVolumeMax;
-        int mVolumeHandling;
-
-        private RemotePlaybackState(int id, int vol, int volMax) {
-            mRccId = id;
-            mVolume = vol;
-            mVolumeMax = volMax;
-            mVolumeHandling = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME_HANDLING;
-        }
-    }
 
     /**
      * Internal cache for the playback information of the RemoteControlClient whose volume gets to
@@ -1138,178 +1058,11 @@
      */
     private boolean mHasRemotePlayback;
 
-    private static class RccPlaybackState {
-        public int mState;
-        public long mPositionMs;
-        public float mSpeed;
-
-        public RccPlaybackState(int state, long positionMs, float speed) {
-            mState = state;
-            mPositionMs = positionMs;
-            mSpeed = speed;
-        }
-
-        public void reset() {
-            mState = RemoteControlClient.PLAYSTATE_STOPPED;
-            mPositionMs = RemoteControlClient.PLAYBACK_POSITION_INVALID;
-            mSpeed = RemoteControlClient.PLAYBACK_SPEED_1X;
-        }
-
-        @Override
-        public String toString() {
-            return stateToString() + ", " + posToString() + ", " + mSpeed + "X";
-        }
-
-        private String posToString() {
-            if (mPositionMs == RemoteControlClient.PLAYBACK_POSITION_INVALID) {
-                return "PLAYBACK_POSITION_INVALID";
-            } else if (mPositionMs == RemoteControlClient.PLAYBACK_POSITION_ALWAYS_UNKNOWN) {
-                return "PLAYBACK_POSITION_ALWAYS_UNKNOWN";
-            } else {
-                return (String.valueOf(mPositionMs) + "ms");
-            }
-        }
-
-        private String stateToString() {
-            switch (mState) {
-                case RemoteControlClient.PLAYSTATE_NONE:
-                    return "PLAYSTATE_NONE";
-                case RemoteControlClient.PLAYSTATE_STOPPED:
-                    return "PLAYSTATE_STOPPED";
-                case RemoteControlClient.PLAYSTATE_PAUSED:
-                    return "PLAYSTATE_PAUSED";
-                case RemoteControlClient.PLAYSTATE_PLAYING:
-                    return "PLAYSTATE_PLAYING";
-                case RemoteControlClient.PLAYSTATE_FAST_FORWARDING:
-                    return "PLAYSTATE_FAST_FORWARDING";
-                case RemoteControlClient.PLAYSTATE_REWINDING:
-                    return "PLAYSTATE_REWINDING";
-                case RemoteControlClient.PLAYSTATE_SKIPPING_FORWARDS:
-                    return "PLAYSTATE_SKIPPING_FORWARDS";
-                case RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS:
-                    return "PLAYSTATE_SKIPPING_BACKWARDS";
-                case RemoteControlClient.PLAYSTATE_BUFFERING:
-                    return "PLAYSTATE_BUFFERING";
-                case RemoteControlClient.PLAYSTATE_ERROR:
-                    return "PLAYSTATE_ERROR";
-                default:
-                    return "[invalid playstate]";
-            }
-        }
-    }
-
-    protected static class RemoteControlStackEntry implements DeathRecipient {
-        public int mRccId = RemoteControlClient.RCSE_ID_UNREGISTERED;
-        final public MediaFocusControl mController;
-        /**
-         * The target for the ACTION_MEDIA_BUTTON events.
-         * Always non null.
-         */
-        final public PendingIntent mMediaIntent;
-        /**
-         * The registered media button event receiver.
-         * Always non null.
-         */
-        final public ComponentName mReceiverComponent;
-        public IBinder mToken;
-        public String mCallingPackageName;
-        public int mCallingUid;
-        /**
-         * Provides access to the information to display on the remote control.
-         * May be null (when a media button event receiver is registered,
-         *     but no remote control client has been registered) */
-        public IRemoteControlClient mRcClient;
-        public RcClientDeathHandler mRcClientDeathHandler;
-        /**
-         * Information only used for non-local playback
-         */
-        public int mPlaybackType;
-        public int mPlaybackVolume;
-        public int mPlaybackVolumeMax;
-        public int mPlaybackVolumeHandling;
-        public int mPlaybackStream;
-        public RccPlaybackState mPlaybackState;
-        public IRemoteVolumeObserver mRemoteVolumeObs;
-
-        public void resetPlaybackInfo() {
-            mPlaybackType = RemoteControlClient.PLAYBACK_TYPE_LOCAL;
-            mPlaybackVolume = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME;
-            mPlaybackVolumeMax = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME;
-            mPlaybackVolumeHandling = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME_HANDLING;
-            mPlaybackStream = AudioManager.STREAM_MUSIC;
-            mPlaybackState.reset();
-            mRemoteVolumeObs = null;
-        }
-
-        /** precondition: mediaIntent != null */
-        public RemoteControlStackEntry(MediaFocusControl controller, PendingIntent mediaIntent,
-                ComponentName eventReceiver, IBinder token) {
-            mController = controller;
-            mMediaIntent = mediaIntent;
-            mReceiverComponent = eventReceiver;
-            mToken = token;
-            mCallingUid = -1;
-            mRcClient = null;
-            mRccId = ++sLastRccId;
-            mPlaybackState = new RccPlaybackState(
-                    RemoteControlClient.PLAYSTATE_STOPPED,
-                    RemoteControlClient.PLAYBACK_POSITION_INVALID,
-                    RemoteControlClient.PLAYBACK_SPEED_1X);
-
-            resetPlaybackInfo();
-            if (mToken != null) {
-                try {
-                    mToken.linkToDeath(this, 0);
-                } catch (RemoteException e) {
-                    mController.mEventHandler.post(new Runnable() {
-                        @Override public void run() {
-                            mController.unregisterMediaButtonIntent(mMediaIntent);
-                        }
-                    });
-                }
-            }
-        }
-
-        public void unlinkToRcClientDeath() {
-            if ((mRcClientDeathHandler != null) && (mRcClientDeathHandler.mCb != null)) {
-                try {
-                    mRcClientDeathHandler.mCb.unlinkToDeath(mRcClientDeathHandler, 0);
-                    mRcClientDeathHandler = null;
-                } catch (java.util.NoSuchElementException e) {
-                    // not much we can do here
-                    Log.e(TAG, "Encountered " + e + " in unlinkToRcClientDeath()");
-                    e.printStackTrace();
-                }
-            }
-        }
-
-        public void destroy() {
-            unlinkToRcClientDeath();
-            if (mToken != null) {
-                mToken.unlinkToDeath(this, 0);
-                mToken = null;
-            }
-        }
-
-        @Override
-        public void binderDied() {
-            mController.unregisterMediaButtonIntent(mMediaIntent);
-        }
-
-        @Override
-        protected void finalize() throws Throwable {
-            destroy(); // unlink exception handled inside method
-            super.finalize();
-        }
-    }
-
     /**
-     *  The stack of remote control event receivers.
-     *  Code sections and methods that modify the remote control event receiver stack are
-     *  synchronized on mRCStack, but also BEFORE on mFocusLock as any change in either
-     *  stack, audio focus or RC, can lead to a change in the remote control display
+     * The stack of remote control event receivers.
+     * All read and write operations on mPRStack are synchronized.
      */
-    private final Stack<RemoteControlStackEntry> mRCStack = new Stack<RemoteControlStackEntry>();
+    private final Stack<PlayerRecord> mPRStack = new Stack<PlayerRecord>();
 
     /**
      * The component the telephony package can register so telephony calls have priority to
@@ -1323,17 +1076,10 @@
      */
     private void dumpRCStack(PrintWriter pw) {
         pw.println("\nRemote Control stack entries (last is top of stack):");
-        synchronized(mRCStack) {
-            Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+        synchronized(mPRStack) {
+            Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
             while(stackIterator.hasNext()) {
-                RemoteControlStackEntry rcse = stackIterator.next();
-                pw.println("  pi: " + rcse.mMediaIntent +
-                        " -- pack: " + rcse.mCallingPackageName +
-                        "  -- ercvr: " + rcse.mReceiverComponent +
-                        "  -- client: " + rcse.mRcClient +
-                        "  -- uid: " + rcse.mCallingUid +
-                        "  -- type: " + rcse.mPlaybackType +
-                        "  state: " + rcse.mPlaybackState);
+                stackIterator.next().dump(pw, true);
             }
         }
     }
@@ -1345,18 +1091,10 @@
      */
     private void dumpRCCStack(PrintWriter pw) {
         pw.println("\nRemote Control Client stack entries (last is top of stack):");
-        synchronized(mRCStack) {
-            Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+        synchronized(mPRStack) {
+            Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
             while(stackIterator.hasNext()) {
-                RemoteControlStackEntry rcse = stackIterator.next();
-                pw.println("  uid: " + rcse.mCallingUid +
-                        "  -- id: " + rcse.mRccId +
-                        "  -- type: " + rcse.mPlaybackType +
-                        "  -- state: " + rcse.mPlaybackState +
-                        "  -- vol handling: " + rcse.mPlaybackVolumeHandling +
-                        "  -- vol: " + rcse.mPlaybackVolume +
-                        "  -- volMax: " + rcse.mPlaybackVolumeMax +
-                        "  -- volObs: " + rcse.mRemoteVolumeObs);
+                stackIterator.next().dump(pw, false);
             }
             synchronized(mCurrentRcLock) {
                 pw.println("\nCurrent remote control generation ID = " + mCurrentRcClientGen);
@@ -1381,10 +1119,10 @@
      */
     private void dumpRCDList(PrintWriter pw) {
         pw.println("\nRemote Control Display list entries:");
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForServer di = (DisplayInfoForServer) displayIterator.next();
+                final DisplayInfoForServer di = displayIterator.next();
                 pw.println("  IRCD: " + di.mRcDisplay +
                         "  -- w:" + di.mArtworkExpectedWidth +
                         "  -- h:" + di.mArtworkExpectedHeight +
@@ -1400,47 +1138,49 @@
      * Pre-condition: packageName != null
      */
     private void cleanupMediaButtonReceiverForPackage(String packageName, boolean removeAll) {
-        synchronized(mRCStack) {
-            if (mRCStack.empty()) {
+        synchronized(mPRStack) {
+            if (mPRStack.empty()) {
                 return;
             } else {
                 final PackageManager pm = mContext.getPackageManager();
-                RemoteControlStackEntry oldTop = mRCStack.peek();
-                Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+                PlayerRecord oldTop = mPRStack.peek();
+                Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
                 // iterate over the stack entries
                 // (using an iterator on the stack so we can safely remove an entry after having
                 //  evaluated it, traversal order doesn't matter here)
                 while(stackIterator.hasNext()) {
-                    RemoteControlStackEntry rcse = (RemoteControlStackEntry)stackIterator.next();
-                    if (removeAll && packageName.equals(rcse.mMediaIntent.getCreatorPackage())) {
+                    PlayerRecord prse = stackIterator.next();
+                    if (removeAll
+                            && packageName.equals(prse.getMediaButtonIntent().getCreatorPackage()))
+                    {
                         // a stack entry is from the package being removed, remove it from the stack
                         stackIterator.remove();
-                        rcse.destroy();
-                    } else if (rcse.mReceiverComponent != null) {
+                        prse.destroy();
+                    } else if (prse.getMediaButtonReceiver() != null) {
                         try {
                             // Check to see if this receiver still exists.
-                            pm.getReceiverInfo(rcse.mReceiverComponent, 0);
+                            pm.getReceiverInfo(prse.getMediaButtonReceiver(), 0);
                         } catch (PackageManager.NameNotFoundException e) {
                             // Not found -- remove it!
                             stackIterator.remove();
-                            rcse.destroy();
+                            prse.destroy();
                         }
                     }
                 }
-                if (mRCStack.empty()) {
+                if (mPRStack.empty()) {
                     // no saved media button receiver
                     mEventHandler.sendMessage(
                             mEventHandler.obtainMessage(MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0,
                                     null));
-                } else if (oldTop != mRCStack.peek()) {
+                } else if (oldTop != mPRStack.peek()) {
                     // the top of the stack has changed, save it in the system settings
                     // by posting a message to persist it; only do this however if it has
                     // a concrete component name (is not a transient registration)
-                    RemoteControlStackEntry rcse = mRCStack.peek();
-                    if (rcse.mReceiverComponent != null) {
+                    PlayerRecord prse = mPRStack.peek();
+                    if (prse.getMediaButtonReceiver() != null) {
                         mEventHandler.sendMessage(
                                 mEventHandler.obtainMessage(MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0,
-                                        rcse.mReceiverComponent));
+                                        prse.getMediaButtonReceiver()));
                     }
                 }
             }
@@ -1467,72 +1207,109 @@
             mediaButtonIntent.setComponent(eventReceiver);
             PendingIntent pi = PendingIntent.getBroadcast(mContext,
                     0/*requestCode, ignored*/, mediaButtonIntent, 0/*flags*/);
-            registerMediaButtonIntent(pi, eventReceiver, null);
+            registerMediaButtonIntent(pi, eventReceiver, null /*token*/);
         }
     }
 
     /**
      * Helper function:
-     * Set the new remote control receiver at the top of the RC focus stack.
-     * Called synchronized on mAudioFocusLock, then mRCStack
+     * Push the new media button receiver "near" the top of the PlayerRecord stack.
+     * "Near the top" is defined as:
+     *   - at the top if the current PlayerRecord at the top is not playing
+     *   - below the entries at the top of the stack that correspond to the playing PlayerRecord
+     *     otherwise
+     * Called synchronized on mPRStack
      * precondition: mediaIntent != null
-     * @return true if mRCStack was changed, false otherwise
+     * @return true if the top of mPRStack was changed, false otherwise
      */
-    private boolean pushMediaButtonReceiver_syncAfRcs(PendingIntent mediaIntent,
+    private boolean pushMediaButtonReceiver_syncPrs(PendingIntent mediaIntent,
             ComponentName target, IBinder token) {
-        // already at top of stack?
-        if (!mRCStack.empty() && mRCStack.peek().mMediaIntent.equals(mediaIntent)) {
+        if (mPRStack.empty()) {
+            mPRStack.push(new PlayerRecord(mediaIntent, target, token));
+            return true;
+        } else if (mPRStack.peek().hasMatchingMediaButtonIntent(mediaIntent)) {
+            // already at top of stack
             return false;
         }
         if (mAppOps.noteOp(AppOpsManager.OP_TAKE_MEDIA_BUTTONS, Binder.getCallingUid(),
                 mediaIntent.getCreatorPackage()) != AppOpsManager.MODE_ALLOWED) {
             return false;
         }
-        RemoteControlStackEntry rcse = null;
-        boolean wasInsideStack = false;
+        PlayerRecord oldTopPrse = mPRStack.lastElement(); // top of the stack before any changes
+        boolean topChanged = false;
+        PlayerRecord prse = null;
+        int lastPlayingIndex = mPRStack.size();
+        int inStackIndex = -1;
         try {
-            for (int index = mRCStack.size()-1; index >= 0; index--) {
-                rcse = mRCStack.elementAt(index);
-                if(rcse.mMediaIntent.equals(mediaIntent)) {
-                    // ok to remove element while traversing the stack since we're leaving the loop
-                    mRCStack.removeElementAt(index);
-                    wasInsideStack = true;
-                    break;
+            // go through the stack from the top to figure out who's playing, and the position
+            // of this media button receiver (note that it may not be in the stack)
+            for (int index = mPRStack.size()-1; index >= 0; index--) {
+                prse = mPRStack.elementAt(index);
+                if (prse.isPlaybackActive()) {
+                    lastPlayingIndex = index;
+                }
+                if (prse.hasMatchingMediaButtonIntent(mediaIntent)) {
+                    inStackIndex = index;
                 }
             }
+
+            if (inStackIndex == -1) {
+                // is not in stack
+                prse = new PlayerRecord(mediaIntent, target, token);
+                // it's new so it's not playing (no RemoteControlClient to give a playstate),
+                // therefore it goes after the ones with active playback
+                mPRStack.add(lastPlayingIndex, prse);
+            } else {
+                // is in the stack
+                if (mPRStack.size() > 1) { // no need to remove and add if stack contains only 1
+                    prse = mPRStack.elementAt(inStackIndex);
+                    // remove it from its old location in the stack
+                    mPRStack.removeElementAt(inStackIndex);
+                    if (prse.isPlaybackActive()) {
+                        // and put it at the top
+                        mPRStack.push(prse);
+                    } else {
+                        // and put it after the ones with active playback
+                        if (inStackIndex > lastPlayingIndex) {
+                            mPRStack.add(lastPlayingIndex, prse);
+                        } else {
+                            mPRStack.add(lastPlayingIndex - 1, prse);
+                        }
+                    }
+                }
+            }
+
+            topChanged = (oldTopPrse != mPRStack.lastElement());
+            // post message to persist the default media button receiver
+            if (topChanged && (target != null)) {
+                mEventHandler.sendMessage( mEventHandler.obtainMessage(
+                        MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, target/*obj*/) );
+            }
+
         } catch (ArrayIndexOutOfBoundsException e) {
-            // not expected to happen, indicates improper concurrent modification
-            Log.e(TAG, "Wrong index accessing media button stack, lock error? ", e);
-        }
-        if (!wasInsideStack) {
-            rcse = new RemoteControlStackEntry(this, mediaIntent, target, token);
-        }
-        mRCStack.push(rcse); // rcse is never null
-
-        // post message to persist the default media button receiver
-        if (target != null) {
-            mEventHandler.sendMessage( mEventHandler.obtainMessage(
-                    MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, target/*obj*/) );
+            // not expected to happen, indicates improper concurrent modification or bad index
+            Log.e(TAG, "Wrong index (inStack=" + inStackIndex + " lastPlaying=" + lastPlayingIndex
+                    + " size=" + mPRStack.size()
+                    + " accessing media button stack", e);
         }
 
-        // RC stack was modified
-        return true;
+        return (topChanged);
     }
 
     /**
      * Helper function:
      * Remove the remote control receiver from the RC focus stack.
-     * Called synchronized on mAudioFocusLock, then mRCStack
+     * Called synchronized on mPRStack
      * precondition: pi != null
      */
-    private void removeMediaButtonReceiver_syncAfRcs(PendingIntent pi) {
+    private void removeMediaButtonReceiver_syncPrs(PendingIntent pi) {
         try {
-            for (int index = mRCStack.size()-1; index >= 0; index--) {
-                final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                if (rcse.mMediaIntent.equals(pi)) {
-                    rcse.destroy();
+            for (int index = mPRStack.size()-1; index >= 0; index--) {
+                final PlayerRecord prse = mPRStack.elementAt(index);
+                if (prse.hasMatchingMediaButtonIntent(pi)) {
+                    prse.destroy();
                     // ok to remove element while traversing the stack since we're leaving the loop
-                    mRCStack.removeElementAt(index);
+                    mPRStack.removeElementAt(index);
                     break;
                 }
             }
@@ -1544,10 +1321,10 @@
 
     /**
      * Helper function:
-     * Called synchronized on mRCStack
+     * Called synchronized on mPRStack
      */
     private boolean isCurrentRcController(PendingIntent pi) {
-        if (!mRCStack.empty() && mRCStack.peek().mMediaIntent.equals(pi)) {
+        if (!mPRStack.empty() && mPRStack.peek().hasMatchingMediaButtonIntent(pi)) {
             return true;
         }
         return false;
@@ -1568,7 +1345,7 @@
      */
     private void setNewRcClientOnDisplays_syncRcsCurrc(int newClientGeneration,
             PendingIntent newMediaIntent, boolean clearing) {
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             if (mRcDisplays.size() > 0) {
                 final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
                 while (displayIterator.hasNext()) {
@@ -1592,12 +1369,12 @@
     private void setNewRcClientGenerationOnClients_syncRcsCurrc(int newClientGeneration) {
         // (using an iterator on the stack so we can safely remove an entry if needed,
         //  traversal order doesn't matter here as we update all entries)
-        Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+        Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
         while(stackIterator.hasNext()) {
-            RemoteControlStackEntry se = stackIterator.next();
-            if ((se != null) && (se.mRcClient != null)) {
+            PlayerRecord se = stackIterator.next();
+            if ((se != null) && (se.getRcc() != null)) {
                 try {
-                    se.mRcClient.setCurrentClientGenerationId(newClientGeneration);
+                    se.getRcc().setCurrentClientGenerationId(newClientGeneration);
                 } catch (RemoteException e) {
                     Log.w(TAG, "Dead client in setNewRcClientGenerationOnClients_syncRcsCurrc()",e);
                     stackIterator.remove();
@@ -1629,7 +1406,7 @@
     private void onRcDisplayClear() {
         if (DEBUG_RC) Log.i(TAG, "Clear remote control display");
 
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             synchronized(mCurrentRcLock) {
                 mCurrentRcClientGen++;
                 // synchronously update the displays and clients with the new client generation
@@ -1642,17 +1419,17 @@
     /**
      * Called when processing MSG_RCDISPLAY_UPDATE event
      */
-    private void onRcDisplayUpdate(RemoteControlStackEntry rcse, int flags /* USED ?*/) {
-        synchronized(mRCStack) {
+    private void onRcDisplayUpdate(PlayerRecord prse, int flags /* USED ?*/) {
+        synchronized(mPRStack) {
             synchronized(mCurrentRcLock) {
-                if ((mCurrentRcClient != null) && (mCurrentRcClient.equals(rcse.mRcClient))) {
+                if ((mCurrentRcClient != null) && (mCurrentRcClient.equals(prse.getRcc()))) {
                     if (DEBUG_RC) Log.i(TAG, "Display/update remote control ");
 
                     mCurrentRcClientGen++;
                     // synchronously update the displays and clients with
                     //      the new client generation
                     setNewRcClient_syncRcsCurrc(mCurrentRcClientGen,
-                            rcse.mMediaIntent /*newMediaIntent*/,
+                            prse.getMediaButtonIntent() /*newMediaIntent*/,
                             false /*clearing*/);
 
                     // tell the current client that it needs to send info
@@ -1678,7 +1455,7 @@
      *   a single RemoteControlDisplay, NOT all of them, as with MSG_RCDISPLAY_UPDATE.
      */
     private void onRcDisplayInitInfo(IRemoteControlDisplay newRcd, int w, int h) {
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             synchronized(mCurrentRcLock) {
                 if (mCurrentRcClient != null) {
                     if (DEBUG_RC) { Log.i(TAG, "Init RCD with current info"); }
@@ -1705,9 +1482,9 @@
 
     /**
      * Helper function:
-     * Called synchronized on mRCStack
+     * Called synchronized on mPRStack
      */
-    private void clearRemoteControlDisplay_syncAfRcs() {
+    private void clearRemoteControlDisplay_syncPrs() {
         synchronized(mCurrentRcLock) {
             mCurrentRcClient = null;
         }
@@ -1717,137 +1494,56 @@
 
     /**
      * Helper function for code readability: only to be called from
-     *    checkUpdateRemoteControlDisplay_syncAfRcs() which checks the preconditions for
+     *    checkUpdateRemoteControlDisplay_syncPrs() which checks the preconditions for
      *    this method.
      * Preconditions:
-     *    - called synchronized mAudioFocusLock then on mRCStack
-     *    - mRCStack.isEmpty() is false
+     *    - called synchronized on mPRStack
+     *    - mPRStack.isEmpty() is false
      */
-    private void updateRemoteControlDisplay_syncAfRcs(int infoChangedFlags) {
-        RemoteControlStackEntry rcse = mRCStack.peek();
+    private void updateRemoteControlDisplay_syncPrs(int infoChangedFlags) {
+        PlayerRecord prse = mPRStack.peek();
         int infoFlagsAboutToBeUsed = infoChangedFlags;
         // this is where we enforce opt-in for information display on the remote controls
         //   with the new AudioManager.registerRemoteControlClient() API
-        if (rcse.mRcClient == null) {
+        if (prse.getRcc() == null) {
             //Log.w(TAG, "Can't update remote control display with null remote control client");
-            clearRemoteControlDisplay_syncAfRcs();
+            clearRemoteControlDisplay_syncPrs();
             return;
         }
         synchronized(mCurrentRcLock) {
-            if (!rcse.mRcClient.equals(mCurrentRcClient)) {
+            if (!prse.getRcc().equals(mCurrentRcClient)) {
                 // new RC client, assume every type of information shall be queried
                 infoFlagsAboutToBeUsed = RC_INFO_ALL;
             }
-            mCurrentRcClient = rcse.mRcClient;
-            mCurrentRcClientIntent = rcse.mMediaIntent;
+            mCurrentRcClient = prse.getRcc();
+            mCurrentRcClientIntent = prse.getMediaButtonIntent();
         }
         // will cause onRcDisplayUpdate() to be called in AudioService's handler thread
         mEventHandler.sendMessage( mEventHandler.obtainMessage(MSG_RCDISPLAY_UPDATE,
-                infoFlagsAboutToBeUsed /* arg1 */, 0, rcse /* obj, != null */) );
+                infoFlagsAboutToBeUsed /* arg1 */, 0, prse /* obj, != null */) );
     }
 
     /**
      * Helper function:
-     * Called synchronized on mAudioFocusLock, then mRCStack
+     * Called synchronized on mPRStack
      * Check whether the remote control display should be updated, triggers the update if required
      * @param infoChangedFlags the flags corresponding to the remote control client information
      *     that has changed, if applicable (checking for the update conditions might trigger a
      *     clear, rather than an update event).
      */
-    private void checkUpdateRemoteControlDisplay_syncAfRcs(int infoChangedFlags) {
+    private void checkUpdateRemoteControlDisplay_syncPrs(int infoChangedFlags) {
         // determine whether the remote control display should be refreshed
-        // if either stack is empty, there is a mismatch, so clear the RC display
-        if (mRCStack.isEmpty() || mFocusStack.isEmpty()) {
-            clearRemoteControlDisplay_syncAfRcs();
+        // if the player record stack is empty, there is nothing to display, so clear the RC display
+        if (mPRStack.isEmpty()) {
+            clearRemoteControlDisplay_syncPrs();
             return;
         }
 
-        // determine which entry in the AudioFocus stack to consider, and compare against the
-        // top of the stack for the media button event receivers : simply using the top of the
-        // stack would make the entry disappear from the RemoteControlDisplay in conditions such as
-        // notifications playing during music playback.
-        // Crawl the AudioFocus stack from the top until an entry is found with the following
-        // characteristics:
-        // - focus gain on STREAM_MUSIC stream
-        // - non-transient focus gain on a stream other than music
-        FocusRequester af = null;
-        try {
-            for (int index = mFocusStack.size()-1; index >= 0; index--) {
-                FocusRequester fr = mFocusStack.elementAt(index);
-                if ((fr.getStreamType() == AudioManager.STREAM_MUSIC)
-                        || (fr.getGainRequest() == AudioManager.AUDIOFOCUS_GAIN)) {
-                    af = fr;
-                    break;
-                }
-            }
-        } catch (ArrayIndexOutOfBoundsException e) {
-            Log.e(TAG, "Wrong index accessing audio focus stack when updating RCD: " + e);
-            af = null;
-        }
-        if (af == null) {
-            clearRemoteControlDisplay_syncAfRcs();
-            return;
-        }
-
-        // if the audio focus and RC owners belong to different packages, there is a mismatch, clear
-        if (!af.hasSamePackage(mRCStack.peek().mCallingPackageName)) {
-            clearRemoteControlDisplay_syncAfRcs();
-            return;
-        }
-        // if the audio focus didn't originate from the same Uid as the one in which the remote
-        //   control information will be retrieved, clear
-        if (!af.hasSameUid(mRCStack.peek().mCallingUid)) {
-            clearRemoteControlDisplay_syncAfRcs();
-            return;
-        }
+        // this is where more rules for refresh go
 
         // refresh conditions were verified: update the remote controls
-        // ok to call: synchronized mAudioFocusLock then on mRCStack, mRCStack is not empty
-        updateRemoteControlDisplay_syncAfRcs(infoChangedFlags);
-    }
-
-    /**
-     * Helper function:
-     * Post a message to asynchronously move the media button event receiver associated with the
-     * given remote control client ID to the top of the remote control stack
-     * @param rccId
-     */
-    private void postPromoteRcc(int rccId) {
-        sendMsg(mEventHandler, MSG_PROMOTE_RCC, SENDMSG_REPLACE,
-                rccId /*arg1*/, 0, null, 0/*delay*/);
-    }
-
-    private void onPromoteRcc(int rccId) {
-        if (DEBUG_RC) { Log.d(TAG, "Promoting RCC " + rccId); }
-        synchronized(mAudioFocusLock) {
-            synchronized(mRCStack) {
-                // ignore if given RCC ID is already at top of remote control stack
-                if (!mRCStack.isEmpty() && (mRCStack.peek().mRccId == rccId)) {
-                    return;
-                }
-                int indexToPromote = -1;
-                try {
-                    for (int index = mRCStack.size()-1; index >= 0; index--) {
-                        final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                        if (rcse.mRccId == rccId) {
-                            indexToPromote = index;
-                            break;
-                        }
-                    }
-                    if (indexToPromote >= 0) {
-                        if (DEBUG_RC) { Log.d(TAG, "  moving RCC from index " + indexToPromote
-                                + " to " + (mRCStack.size()-1)); }
-                        final RemoteControlStackEntry rcse = mRCStack.remove(indexToPromote);
-                        mRCStack.push(rcse);
-                        // the RC stack changed, reevaluate the display
-                        checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-                    }
-                } catch (ArrayIndexOutOfBoundsException e) {
-                    // not expected to happen, indicates improper concurrent modification
-                    Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
-                }
-            }//synchronized(mRCStack)
-        }//synchronized(mAudioFocusLock)
+        // ok to call: synchronized on mPRStack, mPRStack is not empty
+        updateRemoteControlDisplay_syncPrs(infoChangedFlags);
     }
 
     /**
@@ -1858,12 +1554,10 @@
             IBinder token) {
         Log.i(TAG, "  Remote Control   registerMediaButtonIntent() for " + mediaIntent);
 
-        synchronized(mAudioFocusLock) {
-            synchronized(mRCStack) {
-                if (pushMediaButtonReceiver_syncAfRcs(mediaIntent, eventReceiver, token)) {
-                    // new RC client, assume every type of information shall be queried
-                    checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-                }
+        synchronized(mPRStack) {
+            if (pushMediaButtonReceiver_syncPrs(mediaIntent, eventReceiver, token)) {
+                // new RC client, assume every type of information shall be queried
+                checkUpdateRemoteControlDisplay_syncPrs(RC_INFO_ALL);
             }
         }
     }
@@ -1876,18 +1570,22 @@
     {
         Log.i(TAG, "  Remote Control   unregisterMediaButtonIntent() for " + mediaIntent);
 
-        synchronized(mAudioFocusLock) {
-            synchronized(mRCStack) {
-                boolean topOfStackWillChange = isCurrentRcController(mediaIntent);
-                removeMediaButtonReceiver_syncAfRcs(mediaIntent);
-                if (topOfStackWillChange) {
-                    // current RC client will change, assume every type of info needs to be queried
-                    checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-                }
+        synchronized(mPRStack) {
+            boolean topOfStackWillChange = isCurrentRcController(mediaIntent);
+            removeMediaButtonReceiver_syncPrs(mediaIntent);
+            if (topOfStackWillChange) {
+                // current RC client will change, assume every type of info needs to be queried
+                checkUpdateRemoteControlDisplay_syncPrs(RC_INFO_ALL);
             }
         }
     }
 
+    protected void unregisterMediaButtonIntentAsync(final PendingIntent mediaIntent) {
+        mEventHandler.sendMessage(
+                mEventHandler.obtainMessage(MSG_UNREGISTER_MEDIABUTTONINTENT, 0, 0,
+                        mediaIntent));
+    }
+
     /**
      * see AudioManager.registerMediaButtonEventReceiverForCalls(ComponentName c)
      * precondition: c != null
@@ -1898,7 +1596,7 @@
             Log.e(TAG, "Invalid permissions to register media button receiver for calls");
             return;
         }
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             mMediaReceiverForCalls = c;
         }
     }
@@ -1912,14 +1610,14 @@
             Log.e(TAG, "Invalid permissions to unregister media button receiver for calls");
             return;
         }
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             mMediaReceiverForCalls = null;
         }
     }
 
     /**
      * see AudioManager.registerRemoteControlClient(ComponentName eventReceiver, ...)
-     * @return the unique ID of the RemoteControlStackEntry associated with the RemoteControlClient
+     * @return the unique ID of the PlayerRecord associated with the RemoteControlClient
      * Note: using this method with rcClient == null is a way to "disable" the IRemoteControlClient
      *     without modifying the RC stack, but while still causing the display to refresh (will
      *     become blank as a result of this)
@@ -1928,61 +1626,40 @@
             IRemoteControlClient rcClient, String callingPackageName) {
         if (DEBUG_RC) Log.i(TAG, "Register remote control client rcClient="+rcClient);
         int rccId = RemoteControlClient.RCSE_ID_UNREGISTERED;
-        synchronized(mAudioFocusLock) {
-            synchronized(mRCStack) {
-                // store the new display information
-                try {
-                    for (int index = mRCStack.size()-1; index >= 0; index--) {
-                        final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                        if(rcse.mMediaIntent.equals(mediaIntent)) {
-                            // already had a remote control client?
-                            if (rcse.mRcClientDeathHandler != null) {
-                                // stop monitoring the old client's death
-                                rcse.unlinkToRcClientDeath();
-                            }
-                            // save the new remote control client
-                            rcse.mRcClient = rcClient;
-                            rcse.mCallingPackageName = callingPackageName;
-                            rcse.mCallingUid = Binder.getCallingUid();
-                            if (rcClient == null) {
-                                // here rcse.mRcClientDeathHandler is null;
-                                rcse.resetPlaybackInfo();
-                                break;
-                            }
-                            rccId = rcse.mRccId;
+        synchronized(mPRStack) {
+            // store the new display information
+            try {
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    final PlayerRecord prse = mPRStack.elementAt(index);
+                    if(prse.hasMatchingMediaButtonIntent(mediaIntent)) {
+                        prse.resetControllerInfoForRcc(rcClient, callingPackageName,
+                                Binder.getCallingUid());
 
-                            // there is a new (non-null) client:
-                            // 1/ give the new client the displays (if any)
-                            if (mRcDisplays.size() > 0) {
-                                plugRemoteControlDisplaysIntoClient_syncRcStack(rcse.mRcClient);
-                            }
-                            // 2/ monitor the new client's death
-                            IBinder b = rcse.mRcClient.asBinder();
-                            RcClientDeathHandler rcdh =
-                                    new RcClientDeathHandler(b, rcse.mMediaIntent);
-                            try {
-                                b.linkToDeath(rcdh, 0);
-                            } catch (RemoteException e) {
-                                // remote control client is DOA, disqualify it
-                                Log.w(TAG, "registerRemoteControlClient() has a dead client " + b);
-                                rcse.mRcClient = null;
-                            }
-                            rcse.mRcClientDeathHandler = rcdh;
+                        if (rcClient == null) {
                             break;
                         }
-                    }//for
-                } catch (ArrayIndexOutOfBoundsException e) {
-                    // not expected to happen, indicates improper concurrent modification
-                    Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
-                }
 
-                // if the eventReceiver is at the top of the stack
-                // then check for potential refresh of the remote controls
-                if (isCurrentRcController(mediaIntent)) {
-                    checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-                }
-            }//synchronized(mRCStack)
-        }//synchronized(mAudioFocusLock)
+                        rccId = prse.getRccId();
+
+                        // there is a new (non-null) client:
+                        //     give the new client the displays (if any)
+                        if (mRcDisplays.size() > 0) {
+                            plugRemoteControlDisplaysIntoClient_syncPrs(prse.getRcc());
+                        }
+                        break;
+                    }
+                }//for
+            } catch (ArrayIndexOutOfBoundsException e) {
+                // not expected to happen, indicates improper concurrent modification
+                Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
+            }
+
+            // if the eventReceiver is at the top of the stack
+            // then check for potential refresh of the remote controls
+            if (isCurrentRcController(mediaIntent)) {
+                checkUpdateRemoteControlDisplay_syncPrs(RC_INFO_ALL);
+            }
+        }//synchronized(mPRStack)
         return rccId;
     }
 
@@ -1993,33 +1670,27 @@
     protected void unregisterRemoteControlClient(PendingIntent mediaIntent,
             IRemoteControlClient rcClient) {
         if (DEBUG_RC) Log.i(TAG, "Unregister remote control client rcClient="+rcClient);
-        synchronized(mAudioFocusLock) {
-            synchronized(mRCStack) {
-                boolean topRccChange = false;
-                try {
-                    for (int index = mRCStack.size()-1; index >= 0; index--) {
-                        final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                        if ((rcse.mMediaIntent.equals(mediaIntent))
-                                && rcClient.equals(rcse.mRcClient)) {
-                            // we found the IRemoteControlClient to unregister
-                            // stop monitoring its death
-                            rcse.unlinkToRcClientDeath();
-                            // reset the client-related fields
-                            rcse.mRcClient = null;
-                            rcse.mCallingPackageName = null;
-                            topRccChange = (index == mRCStack.size()-1);
-                            // there can only be one matching RCC in the RC stack, we're done
-                            break;
-                        }
+        synchronized(mPRStack) {
+            boolean topRccChange = false;
+            try {
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    final PlayerRecord prse = mPRStack.elementAt(index);
+                    if ((prse.hasMatchingMediaButtonIntent(mediaIntent))
+                            && rcClient.equals(prse.getRcc())) {
+                        // we found the IRemoteControlClient to unregister
+                        prse.resetControllerInfoForNoRcc();
+                        topRccChange = (index == mPRStack.size()-1);
+                        // there can only be one matching RCC in the RC stack, we're done
+                        break;
                     }
-                } catch (ArrayIndexOutOfBoundsException e) {
-                    // not expected to happen, indicates improper concurrent modification
-                    Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
                 }
-                if (topRccChange) {
-                    // no more RCC for the RCD, check for potential refresh of the remote controls
-                    checkUpdateRemoteControlDisplay_syncAfRcs(RC_INFO_ALL);
-                }
+            } catch (ArrayIndexOutOfBoundsException e) {
+                // not expected to happen, indicates improper concurrent modification
+                Log.e(TAG, "Wrong index accessing RC stack, lock error? ", e);
+            }
+            if (topRccChange) {
+                // no more RCC for the RCD, check for potential refresh of the remote controls
+                checkUpdateRemoteControlDisplay_syncPrs(RC_INFO_ALL);
             }
         }
     }
@@ -2071,12 +1742,12 @@
         }
 
         public void binderDied() {
-            synchronized(mRCStack) {
+            synchronized(mPRStack) {
                 Log.w(TAG, "RemoteControl: display " + mRcDisplay + " died");
                 // remove the display from the list
                 final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
                 while (displayIterator.hasNext()) {
-                    final DisplayInfoForServer di = (DisplayInfoForServer) displayIterator.next();
+                    final DisplayInfoForServer di = displayIterator.next();
                     if (di.mRcDisplay == mRcDisplay) {
                         if (DEBUG_RC) Log.w(TAG, " RCD removed from list");
                         displayIterator.remove();
@@ -2089,7 +1760,7 @@
 
     /**
      * The remote control displays.
-     * Access synchronized on mRCStack
+     * Access synchronized on mPRStack
      */
     private ArrayList<DisplayInfoForServer> mRcDisplays = new ArrayList<DisplayInfoForServer>(1);
 
@@ -2097,10 +1768,10 @@
      * Plug each registered display into the specified client
      * @param rcc, guaranteed non null
      */
-    private void plugRemoteControlDisplaysIntoClient_syncRcStack(IRemoteControlClient rcc) {
+    private void plugRemoteControlDisplaysIntoClient_syncPrs(IRemoteControlClient rcc) {
         final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
         while (displayIterator.hasNext()) {
-            final DisplayInfoForServer di = (DisplayInfoForServer) displayIterator.next();
+            final DisplayInfoForServer di = displayIterator.next();
             try {
                 rcc.plugRemoteControlDisplay(di.mRcDisplay, di.mArtworkExpectedWidth,
                         di.mArtworkExpectedHeight);
@@ -2117,12 +1788,12 @@
             boolean enabled) {
         // let all the remote control clients know whether the given display is enabled
         //   (so the remote control stack traversal order doesn't matter).
-        final Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+        final Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
         while(stackIterator.hasNext()) {
-            RemoteControlStackEntry rcse = stackIterator.next();
-            if(rcse.mRcClient != null) {
+            PlayerRecord prse = stackIterator.next();
+            if(prse.getRcc() != null) {
                 try {
-                    rcse.mRcClient.enableRemoteControlDisplay(rcd, enabled);
+                    prse.getRcc().enableRemoteControlDisplay(rcd, enabled);
                 } catch (RemoteException e) {
                     Log.e(TAG, "Error connecting RCD to client: ", e);
                 }
@@ -2138,7 +1809,7 @@
     private boolean rcDisplayIsPluggedIn_syncRcStack(IRemoteControlDisplay rcd) {
         final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
         while (displayIterator.hasNext()) {
-            final DisplayInfoForServer di = (DisplayInfoForServer) displayIterator.next();
+            final DisplayInfoForServer di = displayIterator.next();
             if (di.mRcDisplay.asBinder().equals(rcd.asBinder())) {
                 return true;
             }
@@ -2163,7 +1834,7 @@
             ComponentName listenerComp) {
         if (DEBUG_RC) Log.d(TAG, ">>> registerRemoteControlDisplay("+rcd+")");
         synchronized(mAudioFocusLock) {
-            synchronized(mRCStack) {
+            synchronized(mPRStack) {
                 if ((rcd == null) || rcDisplayIsPluggedIn_syncRcStack(rcd)) {
                     return;
                 }
@@ -2179,12 +1850,12 @@
 
                 // let all the remote control clients know there is a new display (so the remote
                 //   control stack traversal order doesn't matter).
-                Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+                Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
                 while(stackIterator.hasNext()) {
-                    RemoteControlStackEntry rcse = stackIterator.next();
-                    if(rcse.mRcClient != null) {
+                    PlayerRecord prse = stackIterator.next();
+                    if(prse.getRcc() != null) {
                         try {
-                            rcse.mRcClient.plugRemoteControlDisplay(rcd, w, h);
+                            prse.getRcc().plugRemoteControlDisplay(rcd, w, h);
                         } catch (RemoteException e) {
                             Log.e(TAG, "Error connecting RCD to client: ", e);
                         }
@@ -2209,7 +1880,7 @@
      */
     protected void unregisterRemoteControlDisplay(IRemoteControlDisplay rcd) {
         if (DEBUG_RC) Log.d(TAG, "<<< unregisterRemoteControlDisplay("+rcd+")");
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             if (rcd == null) {
                 return;
             }
@@ -2217,7 +1888,7 @@
             boolean displayWasPluggedIn = false;
             final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext() && !displayWasPluggedIn) {
-                final DisplayInfoForServer di = (DisplayInfoForServer) displayIterator.next();
+                final DisplayInfoForServer di = displayIterator.next();
                 if (di.mRcDisplay.asBinder().equals(rcd.asBinder())) {
                     displayWasPluggedIn = true;
                     di.release();
@@ -2228,12 +1899,12 @@
             if (displayWasPluggedIn) {
                 // disconnect this remote control display from all the clients, so the remote
                 //   control stack traversal order doesn't matter
-                final Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+                final Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
                 while(stackIterator.hasNext()) {
-                    final RemoteControlStackEntry rcse = stackIterator.next();
-                    if(rcse.mRcClient != null) {
+                    final PlayerRecord prse = stackIterator.next();
+                    if(prse.getRcc() != null) {
                         try {
-                            rcse.mRcClient.unplugRemoteControlDisplay(rcd);
+                            prse.getRcc().unplugRemoteControlDisplay(rcd);
                         } catch (RemoteException e) {
                             Log.e(TAG, "Error disconnecting remote control display to client: ", e);
                         }
@@ -2255,11 +1926,11 @@
      *   display doesn't need to receive artwork.
      */
     protected void remoteControlDisplayUsesBitmapSize(IRemoteControlDisplay rcd, int w, int h) {
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
             boolean artworkSizeUpdate = false;
             while (displayIterator.hasNext() && !artworkSizeUpdate) {
-                final DisplayInfoForServer di = (DisplayInfoForServer) displayIterator.next();
+                final DisplayInfoForServer di = displayIterator.next();
                 if (di.mRcDisplay.asBinder().equals(rcd.asBinder())) {
                     if ((di.mArtworkExpectedWidth != w) || (di.mArtworkExpectedHeight != h)) {
                         di.mArtworkExpectedWidth = w;
@@ -2271,12 +1942,12 @@
             if (artworkSizeUpdate) {
                 // RCD is currently plugged in and its artwork size has changed, notify all RCCs,
                 // stack traversal order doesn't matter
-                final Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+                final Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
                 while(stackIterator.hasNext()) {
-                    final RemoteControlStackEntry rcse = stackIterator.next();
-                    if(rcse.mRcClient != null) {
+                    final PlayerRecord prse = stackIterator.next();
+                    if(prse.getRcc() != null) {
                         try {
-                            rcse.mRcClient.setBitmapSizeForDisplay(rcd, w, h);
+                            prse.getRcc().setBitmapSizeForDisplay(rcd, w, h);
                         } catch (RemoteException e) {
                             Log.e(TAG, "Error setting bitmap size for RCD on RCC: ", e);
                         }
@@ -2300,13 +1971,13 @@
      */
     protected void remoteControlDisplayWantsPlaybackPositionSync(IRemoteControlDisplay rcd,
             boolean wantsSync) {
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             boolean rcdRegistered = false;
             // store the information about this display
             // (display stack traversal order doesn't matter).
             final Iterator<DisplayInfoForServer> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForServer di = (DisplayInfoForServer) displayIterator.next();
+                final DisplayInfoForServer di = displayIterator.next();
                 if (di.mRcDisplay.asBinder().equals(rcd.asBinder())) {
                     di.mWantsPositionSync = wantsSync;
                     rcdRegistered = true;
@@ -2318,12 +1989,12 @@
             }
             // notify all current RemoteControlClients
             // (stack traversal order doesn't matter as we notify all RCCs)
-            final Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+            final Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
             while (stackIterator.hasNext()) {
-                final RemoteControlStackEntry rcse = stackIterator.next();
-                if (rcse.mRcClient != null) {
+                final PlayerRecord prse = stackIterator.next();
+                if (prse.getRcc() != null) {
                     try {
-                        rcse.mRcClient.setWantsSyncForDisplay(rcd, wantsSync);
+                        prse.getRcc().setWantsSyncForDisplay(rcd, wantsSync);
                     } catch (RemoteException e) {
                         Log.e(TAG, "Error setting position sync flag for RCD on RCC: ", e);
                     }
@@ -2334,7 +2005,7 @@
 
     protected void setRemoteControlClientPlaybackPosition(int generationId, long timeMs) {
         // ignore position change requests if invalid generation ID
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             synchronized(mCurrentRcLock) {
                 if (mCurrentRcClientGen != generationId) {
                     return;
@@ -2349,7 +2020,7 @@
     private void onSetRemoteControlClientPlaybackPosition(int generationId, long timeMs) {
         if(DEBUG_RC) Log.d(TAG, "onSetRemoteControlClientPlaybackPosition(genId=" + generationId +
                 ", timeMs=" + timeMs + ")");
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             synchronized(mCurrentRcLock) {
                 if ((mCurrentRcClient != null) && (mCurrentRcClientGen == generationId)) {
                     // tell the current client to seek to the requested location
@@ -2372,7 +2043,7 @@
     private void onUpdateRemoteControlClientMetadata(int genId, int key, Rating value) {
         if(DEBUG_RC) Log.d(TAG, "onUpdateRemoteControlClientMetadata(genId=" + genId +
                 ", what=" + key + ",rating=" + value + ")");
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             synchronized(mCurrentRcLock) {
                 if ((mCurrentRcClient != null) && (mCurrentRcClientGen == genId)) {
                     try {
@@ -2403,20 +2074,20 @@
     private void onNewPlaybackInfoForRcc(int rccId, int key, int value) {
         if(DEBUG_RC) Log.d(TAG, "onNewPlaybackInfoForRcc(id=" + rccId +
                 ", what=" + key + ",val=" + value + ")");
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             // iterating from top of stack as playback information changes are more likely
             //   on entries at the top of the remote control stack
             try {
-                for (int index = mRCStack.size()-1; index >= 0; index--) {
-                    final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                    if (rcse.mRccId == rccId) {
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    final PlayerRecord prse = mPRStack.elementAt(index);
+                    if (prse.getRccId() == rccId) {
                         switch (key) {
                             case RemoteControlClient.PLAYBACKINFO_PLAYBACK_TYPE:
-                                rcse.mPlaybackType = value;
+                                prse.mPlaybackType = value;
                                 postReevaluateRemote();
                                 break;
                             case RemoteControlClient.PLAYBACKINFO_VOLUME:
-                                rcse.mPlaybackVolume = value;
+                                prse.mPlaybackVolume = value;
                                 synchronized (mMainRemote) {
                                     if (rccId == mMainRemote.mRccId) {
                                         mMainRemote.mVolume = value;
@@ -2425,7 +2096,7 @@
                                 }
                                 break;
                             case RemoteControlClient.PLAYBACKINFO_VOLUME_MAX:
-                                rcse.mPlaybackVolumeMax = value;
+                                prse.mPlaybackVolumeMax = value;
                                 synchronized (mMainRemote) {
                                     if (rccId == mMainRemote.mRccId) {
                                         mMainRemote.mVolumeMax = value;
@@ -2434,7 +2105,7 @@
                                 }
                                 break;
                             case RemoteControlClient.PLAYBACKINFO_VOLUME_HANDLING:
-                                rcse.mPlaybackVolumeHandling = value;
+                                prse.mPlaybackVolumeHandling = value;
                                 synchronized (mMainRemote) {
                                     if (rccId == mMainRemote.mRccId) {
                                         mMainRemote.mVolumeHandling = value;
@@ -2443,7 +2114,7 @@
                                 }
                                 break;
                             case RemoteControlClient.PLAYBACKINFO_USES_STREAM:
-                                rcse.mPlaybackStream = value;
+                                prse.mPlaybackStream = value;
                                 break;
                             default:
                                 Log.e(TAG, "unhandled key " + key + " for RCC " + rccId);
@@ -2454,7 +2125,7 @@
                 }//for
             } catch (ArrayIndexOutOfBoundsException e) {
                 // not expected to happen, indicates improper concurrent modification
-                Log.e(TAG, "Wrong index mRCStack on onNewPlaybackInfoForRcc, lock error? ", e);
+                Log.e(TAG, "Wrong index mPRStack on onNewPlaybackInfoForRcc, lock error? ", e);
             }
         }
     }
@@ -2462,37 +2133,78 @@
     protected void setPlaybackStateForRcc(int rccId, int state, long timeMs, float speed) {
         sendMsg(mEventHandler, MSG_RCC_NEW_PLAYBACK_STATE, SENDMSG_QUEUE,
                 rccId /* arg1 */, state /* arg2 */,
-                new RccPlaybackState(state, timeMs, speed) /* obj */, 0 /* delay */);
+                new PlayerRecord.RccPlaybackState(state, timeMs, speed) /* obj */, 0 /* delay */);
     }
 
-    private void onNewPlaybackStateForRcc(int rccId, int state, RccPlaybackState newState) {
+    private void onNewPlaybackStateForRcc(int rccId, int state,
+            PlayerRecord.RccPlaybackState newState) {
         if(DEBUG_RC) Log.d(TAG, "onNewPlaybackStateForRcc(id=" + rccId + ", state=" + state
                 + ", time=" + newState.mPositionMs + ", speed=" + newState.mSpeed + ")");
-        synchronized(mRCStack) {
-            // iterating from top of stack as playback information changes are more likely
-            //   on entries at the top of the remote control stack
+        synchronized(mPRStack) {
+            if (mPRStack.empty()) {
+                return;
+            }
+            PlayerRecord oldTopPrse = mPRStack.lastElement(); // top of the stack before any changes
+            PlayerRecord prse = null;
+            int lastPlayingIndex = mPRStack.size();
+            int inStackIndex = -1;
             try {
-                for (int index = mRCStack.size()-1; index >= 0; index--) {
-                    final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                    if (rcse.mRccId == rccId) {
-                        rcse.mPlaybackState = newState;
-                        synchronized (mMainRemote) {
-                            if (rccId == mMainRemote.mRccId) {
-                                mMainRemoteIsActive = isPlaystateActive(state);
-                                postReevaluateRemote();
-                            }
-                        }
-                        // an RCC moving to a "playing" state should become the media button
-                        //   event receiver so it can be controlled, without requiring the
-                        //   app to re-register its receiver
-                        if (isPlaystateActive(state)) {
-                            postPromoteRcc(rccId);
+                // go through the stack from the top to figure out who's playing, and the position
+                // of this RemoteControlClient (note that it may not be in the stack)
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    prse = mPRStack.elementAt(index);
+                    if (prse.getRccId() == rccId) {
+                        inStackIndex = index;
+                        prse.mPlaybackState = newState;
+                    }
+                    if (prse.isPlaybackActive()) {
+                        lastPlayingIndex = index;
+                    }
+                }
+
+                if (inStackIndex != -1) {
+                    // is in the stack
+                    prse = mPRStack.elementAt(inStackIndex);
+                    synchronized (mMainRemote) {
+                        if (rccId == mMainRemote.mRccId) {
+                            mMainRemoteIsActive = isPlaystateActive(state);
+                            postReevaluateRemote();
                         }
                     }
-                }//for
+                    if (mPRStack.size() > 1) { // no need to remove and add if stack contains only 1
+                        // remove it from its old location in the stack
+                        mPRStack.removeElementAt(inStackIndex);
+                        if (prse.isPlaybackActive()) {
+                            // and put it at the top
+                            mPRStack.push(prse);
+                        } else {
+                            // and put it after the ones with active playback
+                            if (inStackIndex > lastPlayingIndex) {
+                                mPRStack.add(lastPlayingIndex, prse);
+                            } else {
+                                mPRStack.add(lastPlayingIndex - 1, prse);
+                            }
+                        }
+                    }
+
+                    if (oldTopPrse != mPRStack.lastElement()) {
+                        // the top of the stack changed:
+                        final ComponentName target =
+                                mPRStack.lastElement().getMediaButtonReceiver();
+                        if (target != null) {
+                            // post message to persist the default media button receiver
+                            mEventHandler.sendMessage( mEventHandler.obtainMessage(
+                                    MSG_PERSIST_MEDIABUTTONRECEIVER, 0, 0, target/*obj*/) );
+                        }
+                        // reevaluate the display
+                        checkUpdateRemoteControlDisplay_syncPrs(RC_INFO_ALL);
+                    }
+                }
             } catch (ArrayIndexOutOfBoundsException e) {
-                // not expected to happen, indicates improper concurrent modification
-                Log.e(TAG, "Wrong index on mRCStack in onNewPlaybackStateForRcc, lock error? ", e);
+                // not expected to happen, indicates improper concurrent modification or bad index
+                Log.e(TAG, "Wrong index (inStack=" + inStackIndex + " lastPlaying=" + lastPlayingIndex
+                        + " size=" + mPRStack.size()
+                        + "accessing PlayerRecord stack in onNewPlaybackStateForRcc", e);
             }
         }
     }
@@ -2504,15 +2216,15 @@
 
     // handler for MSG_RCC_NEW_VOLUME_OBS
     private void onRegisterVolumeObserverForRcc(int rccId, IRemoteVolumeObserver rvo) {
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             // The stack traversal order doesn't matter because there is only one stack entry
             //  with this RCC ID, but the matching ID is more likely at the top of the stack, so
             //  start iterating from the top.
             try {
-                for (int index = mRCStack.size()-1; index >= 0; index--) {
-                    final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                    if (rcse.mRccId == rccId) {
-                        rcse.mRemoteVolumeObs = rvo;
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    final PlayerRecord prse = mPRStack.elementAt(index);
+                    if (prse.getRccId() == rccId) {
+                        prse.mRemoteVolumeObs = rvo;
                         break;
                     }
                 }
@@ -2530,21 +2242,21 @@
      * @return false if no remote playing is currently playing
      */
     protected boolean checkUpdateRemoteStateIfActive(int streamType) {
-        synchronized(mRCStack) {
+        synchronized(mPRStack) {
             // iterating from top of stack as active playback is more likely on entries at the top
             try {
-                for (int index = mRCStack.size()-1; index >= 0; index--) {
-                    final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
-                    if ((rcse.mPlaybackType == RemoteControlClient.PLAYBACK_TYPE_REMOTE)
-                            && isPlaystateActive(rcse.mPlaybackState.mState)
-                            && (rcse.mPlaybackStream == streamType)) {
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    final PlayerRecord prse = mPRStack.elementAt(index);
+                    if ((prse.mPlaybackType == RemoteControlClient.PLAYBACK_TYPE_REMOTE)
+                            && isPlaystateActive(prse.mPlaybackState.mState)
+                            && (prse.mPlaybackStream == streamType)) {
                         if (DEBUG_RC) Log.d(TAG, "remote playback active on stream " + streamType
-                                + ", vol =" + rcse.mPlaybackVolume);
+                                + ", vol =" + prse.mPlaybackVolume);
                         synchronized (mMainRemote) {
-                            mMainRemote.mRccId = rcse.mRccId;
-                            mMainRemote.mVolume = rcse.mPlaybackVolume;
-                            mMainRemote.mVolumeMax = rcse.mPlaybackVolumeMax;
-                            mMainRemote.mVolumeHandling = rcse.mPlaybackVolumeHandling;
+                            mMainRemote.mRccId = prse.getRccId();
+                            mMainRemote.mVolume = prse.mPlaybackVolume;
+                            mMainRemote.mVolumeMax = prse.mPlaybackVolumeMax;
+                            mMainRemote.mVolumeHandling = prse.mPlaybackVolumeHandling;
                             mMainRemoteIsActive = true;
                         }
                         return true;
@@ -2567,7 +2279,7 @@
      * @param playState the playback state to evaluate
      * @return true if active, false otherwise (inactive or unknown)
      */
-    private static boolean isPlaystateActive(int playState) {
+    protected static boolean isPlaystateActive(int playState) {
         switch (playState) {
             case RemoteControlClient.PLAYSTATE_PLAYING:
             case RemoteControlClient.PLAYSTATE_BUFFERING:
@@ -2611,16 +2323,16 @@
             return;
         }
         IRemoteVolumeObserver rvo = null;
-        synchronized (mRCStack) {
+        synchronized (mPRStack) {
             // The stack traversal order doesn't matter because there is only one stack entry
             //  with this RCC ID, but the matching ID is more likely at the top of the stack, so
             //  start iterating from the top.
             try {
-                for (int index = mRCStack.size()-1; index >= 0; index--) {
-                    final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    final PlayerRecord prse = mPRStack.elementAt(index);
                     //FIXME OPTIMIZE store this info in mMainRemote so we don't have to iterate?
-                    if (rcse.mRccId == rccId) {
-                        rvo = rcse.mRemoteVolumeObs;
+                    if (prse.getRccId() == rccId) {
+                        rvo = prse.mRemoteVolumeObs;
                         break;
                     }
                 }
@@ -2666,16 +2378,16 @@
             rccId = mMainRemote.mRccId;
         }
         IRemoteVolumeObserver rvo = null;
-        synchronized (mRCStack) {
+        synchronized (mPRStack) {
             // The stack traversal order doesn't matter because there is only one stack entry
             //  with this RCC ID, but the matching ID is more likely at the top of the stack, so
             //  start iterating from the top.
             try {
-                for (int index = mRCStack.size()-1; index >= 0; index--) {
-                    final RemoteControlStackEntry rcse = mRCStack.elementAt(index);
+                for (int index = mPRStack.size()-1; index >= 0; index--) {
+                    final PlayerRecord prse = mPRStack.elementAt(index);
                     //FIXME OPTIMIZE store this info in mMainRemote so we don't have to iterate?
-                    if (rcse.mRccId == rccId) {
-                        rvo = rcse.mRemoteVolumeObs;
+                    if (prse.getRccId() == rccId) {
+                        rvo = prse.mRemoteVolumeObs;
                         break;
                     }
                 }
@@ -2698,7 +2410,7 @@
      * have their volume controlled. In this implementation this is only to reset whether
      * VolumePanel should display remote volumes
      */
-    private void postReevaluateRemote() {
+    protected void postReevaluateRemote() {
         sendMsg(mEventHandler, MSG_REEVALUATE_REMOTE, SENDMSG_QUEUE, 0, 0, null, 0);
     }
 
@@ -2706,13 +2418,13 @@
         if (DEBUG_VOL) { Log.w(TAG, "onReevaluateRemote()"); }
         // is there a registered RemoteControlClient that is handling remote playback
         boolean hasRemotePlayback = false;
-        synchronized (mRCStack) {
+        synchronized (mPRStack) {
             // iteration stops when PLAYBACK_TYPE_REMOTE is found, so remote control stack
             //   traversal order doesn't matter
-            Iterator<RemoteControlStackEntry> stackIterator = mRCStack.iterator();
+            Iterator<PlayerRecord> stackIterator = mPRStack.iterator();
             while(stackIterator.hasNext()) {
-                RemoteControlStackEntry rcse = stackIterator.next();
-                if (rcse.mPlaybackType == RemoteControlClient.PLAYBACK_TYPE_REMOTE) {
+                PlayerRecord prse = stackIterator.next();
+                if (prse.mPlaybackType == RemoteControlClient.PLAYBACK_TYPE_REMOTE) {
                     hasRemotePlayback = true;
                     break;
                 }
diff --git a/media/java/android/media/MediaHTTPConnection.java b/media/java/android/media/MediaHTTPConnection.java
new file mode 100644
index 0000000..d3b1520
--- /dev/null
+++ b/media/java/android/media/MediaHTTPConnection.java
@@ -0,0 +1,359 @@
+/*
+ * Copyright (C) 2013 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 android.media;
+
+import android.os.IBinder;
+import android.os.StrictMode;
+import android.util.Log;
+
+import java.io.BufferedInputStream;
+import java.io.InputStream;
+import java.io.IOException;
+import java.net.CookieHandler;
+import java.net.CookieManager;
+import java.net.URL;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.NoRouteToHostException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static android.media.MediaPlayer.MEDIA_ERROR_UNSUPPORTED;
+
+/** @hide */
+public class MediaHTTPConnection extends IMediaHTTPConnection.Stub {
+    private static final String TAG = "MediaHTTPConnection";
+    private static final boolean VERBOSE = false;
+
+    private long mCurrentOffset = -1;
+    private URL mURL = null;
+    private Map<String, String> mHeaders = null;
+    private HttpURLConnection mConnection = null;
+    private long mTotalSize = -1;
+    private InputStream mInputStream = null;
+
+    private boolean mAllowCrossDomainRedirect = true;
+
+    // from com.squareup.okhttp.internal.http
+    private final static int HTTP_TEMP_REDIRECT = 307;
+    private final static int MAX_REDIRECTS = 20;
+
+    public MediaHTTPConnection() {
+        if (CookieHandler.getDefault() == null) {
+            CookieHandler.setDefault(new CookieManager());
+        }
+
+        native_setup();
+    }
+
+    @Override
+    public IBinder connect(String uri, String headers) {
+        if (VERBOSE) {
+            Log.d(TAG, "connect: uri=" + uri + ", headers=" + headers);
+        }
+
+        try {
+            disconnect();
+            mAllowCrossDomainRedirect = true;
+            mURL = new URL(uri);
+            mHeaders = convertHeaderStringToMap(headers);
+        } catch (MalformedURLException e) {
+            return null;
+        }
+
+        return native_getIMemory();
+    }
+
+    private boolean parseBoolean(String val) {
+        try {
+            return Long.parseLong(val) != 0;
+        } catch (NumberFormatException e) {
+            return "true".equalsIgnoreCase(val) ||
+                "yes".equalsIgnoreCase(val);
+        }
+    }
+
+    /* returns true iff header is internal */
+    private boolean filterOutInternalHeaders(String key, String val) {
+        if ("android-allow-cross-domain-redirect".equalsIgnoreCase(key)) {
+            mAllowCrossDomainRedirect = parseBoolean(val);
+        } else {
+            return false;
+        }
+        return true;
+    }
+
+    private Map<String, String> convertHeaderStringToMap(String headers) {
+        HashMap<String, String> map = new HashMap<String, String>();
+
+        String[] pairs = headers.split("\r\n");
+        for (String pair : pairs) {
+            int colonPos = pair.indexOf(":");
+            if (colonPos >= 0) {
+                String key = pair.substring(0, colonPos);
+                String val = pair.substring(colonPos + 1);
+
+                if (!filterOutInternalHeaders(key, val)) {
+                    map.put(key, val);
+                }
+            }
+        }
+
+        return map;
+    }
+
+    @Override
+    public void disconnect() {
+        teardownConnection();
+        mHeaders = null;
+        mURL = null;
+    }
+
+    private void teardownConnection() {
+        if (mConnection != null) {
+            mInputStream = null;
+
+            mConnection.disconnect();
+            mConnection = null;
+
+            mCurrentOffset = -1;
+        }
+    }
+
+    private void seekTo(long offset) throws IOException {
+        teardownConnection();
+
+        try {
+            int response;
+            int redirectCount = 0;
+
+            URL url = mURL;
+            while (true) {
+                mConnection = (HttpURLConnection)url.openConnection();
+                // handle redirects ourselves if we do not allow cross-domain redirect
+                mConnection.setInstanceFollowRedirects(mAllowCrossDomainRedirect);
+
+                if (mHeaders != null) {
+                    for (Map.Entry<String, String> entry : mHeaders.entrySet()) {
+                        mConnection.setRequestProperty(
+                                entry.getKey(), entry.getValue());
+                    }
+                }
+
+                if (offset > 0) {
+                    mConnection.setRequestProperty(
+                            "Range", "bytes=" + offset + "-");
+                }
+
+                response = mConnection.getResponseCode();
+                if (response != HttpURLConnection.HTTP_MULT_CHOICE &&
+                        response != HttpURLConnection.HTTP_MOVED_PERM &&
+                        response != HttpURLConnection.HTTP_MOVED_TEMP &&
+                        response != HttpURLConnection.HTTP_SEE_OTHER &&
+                        response != HTTP_TEMP_REDIRECT) {
+                    // not a redirect, or redirect handled by HttpURLConnection
+                    break;
+                }
+
+                if (++redirectCount > MAX_REDIRECTS) {
+                    throw new NoRouteToHostException("Too many redirects: " + redirectCount);
+                }
+
+                String method = mConnection.getRequestMethod();
+                if (response == HTTP_TEMP_REDIRECT &&
+                        !method.equals("GET") && !method.equals("HEAD")) {
+                    // "If the 307 status code is received in response to a
+                    // request other than GET or HEAD, the user agent MUST NOT
+                    // automatically redirect the request"
+                    throw new NoRouteToHostException("Invalid redirect");
+                }
+                String location = mConnection.getHeaderField("Location");
+                if (location == null) {
+                    throw new NoRouteToHostException("Invalid redirect");
+                }
+                url = new URL(mURL /* TRICKY: don't use url! */, location);
+                if (!url.getProtocol().equals("https") &&
+                        !url.getProtocol().equals("http")) {
+                    throw new NoRouteToHostException("Unsupported protocol redirect");
+                }
+                boolean sameHost = mURL.getHost().equals(url.getHost());
+                if (!sameHost) {
+                    throw new NoRouteToHostException("Cross-domain redirects are disallowed");
+                }
+
+                if (response != HTTP_TEMP_REDIRECT) {
+                    // update effective URL, unless it is a Temporary Redirect
+                    mURL = url;
+                }
+            }
+
+            if (mAllowCrossDomainRedirect) {
+                // remember the current, potentially redirected URL if redirects
+                // were handled by HttpURLConnection
+                mURL = mConnection.getURL();
+            }
+
+            if (response == HttpURLConnection.HTTP_PARTIAL) {
+                // Partial content, we cannot just use getContentLength
+                // because what we want is not just the length of the range
+                // returned but the size of the full content if available.
+
+                String contentRange =
+                    mConnection.getHeaderField("Content-Range");
+
+                mTotalSize = -1;
+                if (contentRange != null) {
+                    // format is "bytes xxx-yyy/zzz
+                    // where "zzz" is the total number of bytes of the
+                    // content or '*' if unknown.
+
+                    int lastSlashPos = contentRange.lastIndexOf('/');
+                    if (lastSlashPos >= 0) {
+                        String total =
+                            contentRange.substring(lastSlashPos + 1);
+
+                        try {
+                            mTotalSize = Long.parseLong(total);
+                        } catch (NumberFormatException e) {
+                        }
+                    }
+                }
+            } else if (response != HttpURLConnection.HTTP_OK) {
+                throw new IOException();
+            } else {
+                mTotalSize = mConnection.getContentLength();
+            }
+
+            if (offset > 0 && response != HttpURLConnection.HTTP_PARTIAL) {
+                // Some servers simply ignore "Range" requests and serve
+                // data from the start of the content.
+                throw new IOException();
+            }
+
+            mInputStream =
+                new BufferedInputStream(mConnection.getInputStream());
+
+            mCurrentOffset = offset;
+        } catch (IOException e) {
+            mTotalSize = -1;
+            mInputStream = null;
+            mConnection = null;
+            mCurrentOffset = -1;
+
+            throw e;
+        }
+    }
+
+    @Override
+    public int readAt(long offset, int size) {
+        return native_readAt(offset, size);
+    }
+
+    private int readAt(long offset, byte[] data, int size) {
+        StrictMode.ThreadPolicy policy =
+            new StrictMode.ThreadPolicy.Builder().permitAll().build();
+
+        StrictMode.setThreadPolicy(policy);
+
+        try {
+            if (offset != mCurrentOffset) {
+                seekTo(offset);
+            }
+
+            int n = mInputStream.read(data, 0, size);
+
+            if (n == -1) {
+                // InputStream signals EOS using a -1 result, our semantics
+                // are to return a 0-length read.
+                n = 0;
+            }
+
+            mCurrentOffset += n;
+
+            if (VERBOSE) {
+                Log.d(TAG, "readAt " + offset + " / " + size + " => " + n);
+            }
+
+            return n;
+        } catch (NoRouteToHostException e) {
+            Log.w(TAG, "readAt " + offset + " / " + size + " => " + e);
+            return MEDIA_ERROR_UNSUPPORTED;
+        } catch (IOException e) {
+            if (VERBOSE) {
+                Log.d(TAG, "readAt " + offset + " / " + size + " => -1");
+            }
+            return -1;
+        } catch (Exception e) {
+            if (VERBOSE) {
+                Log.d(TAG, "unknown exception " + e);
+                Log.d(TAG, "readAt " + offset + " / " + size + " => -1");
+            }
+            return -1;
+        }
+    }
+
+    @Override
+    public long getSize() {
+        if (mConnection == null) {
+            try {
+                seekTo(0);
+            } catch (IOException e) {
+                return -1;
+            }
+        }
+
+        return mTotalSize;
+    }
+
+    @Override
+    public String getMIMEType() {
+        if (mConnection == null) {
+            try {
+                seekTo(0);
+            } catch (IOException e) {
+                return "application/octet-stream";
+            }
+        }
+
+        return mConnection.getContentType();
+    }
+
+    @Override
+    public String getUri() {
+        return mURL.toString();
+    }
+
+    @Override
+    protected void finalize() {
+        native_finalize();
+    }
+
+    private static native final void native_init();
+    private native final void native_setup();
+    private native final void native_finalize();
+
+    private native final IBinder native_getIMemory();
+    private native final int native_readAt(long offset, int size);
+
+    static {
+        System.loadLibrary("media_jni");
+        native_init();
+    }
+
+    private long mNativeContext;
+
+}
diff --git a/media/java/android/media/MediaHTTPService.java b/media/java/android/media/MediaHTTPService.java
new file mode 100644
index 0000000..3b4703d
--- /dev/null
+++ b/media/java/android/media/MediaHTTPService.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2013 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 android.media;
+
+import android.os.Binder;
+import android.os.IBinder;
+import android.util.Log;
+
+/** @hide */
+public class MediaHTTPService extends IMediaHTTPService.Stub {
+    private static final String TAG = "MediaHTTPService";
+
+    public MediaHTTPService() {
+    }
+
+    public IMediaHTTPConnection makeHTTPConnection() {
+        return new MediaHTTPConnection();
+    }
+
+    /* package private */static IBinder createHttpServiceBinderIfNecessary(
+            String path) {
+        if (path.startsWith("http://")
+                || path.startsWith("https://")
+                || path.startsWith("widevine://")) {
+            return (new MediaHTTPService()).asBinder();
+        }
+
+        return null;
+    }
+}
diff --git a/media/java/android/media/MediaMetadataEditor.java b/media/java/android/media/MediaMetadataEditor.java
index 373ba11..1a4e8da 100644
--- a/media/java/android/media/MediaMetadataEditor.java
+++ b/media/java/android/media/MediaMetadataEditor.java
@@ -17,8 +17,8 @@
 package android.media;
 
 import android.graphics.Bitmap;
+import android.media.session.MediaMetadata;
 import android.os.Bundle;
-import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Log;
 import android.util.SparseIntArray;
@@ -107,6 +107,10 @@
      */
     protected Bundle mEditorMetadata;
 
+    /**
+     * @hide
+     */
+    protected MediaMetadata.Builder mMetadataBuilder;
 
     /**
      * Clears all the pending metadata changes set since the MediaMetadataEditor instance was
@@ -121,6 +125,7 @@
         }
         mEditorMetadata.clear();
         mEditorArtwork = null;
+        mMetadataBuilder = new MediaMetadata.Builder();
     }
 
     /**
diff --git a/media/java/android/media/MediaMetadataRetriever.java b/media/java/android/media/MediaMetadataRetriever.java
index db27d09..9a69c06 100644
--- a/media/java/android/media/MediaMetadataRetriever.java
+++ b/media/java/android/media/MediaMetadataRetriever.java
@@ -21,6 +21,7 @@
 import android.content.res.AssetFileDescriptor;
 import android.graphics.Bitmap;
 import android.net.Uri;
+import android.os.IBinder;
 
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
@@ -100,11 +101,16 @@
             values[i] = entry.getValue();
             ++i;
         }
-        _setDataSource(uri, keys, values);
+
+        _setDataSource(
+                MediaHTTPService.createHttpServiceBinderIfNecessary(uri),
+                uri,
+                keys,
+                values);
     }
 
     private native void _setDataSource(
-        String uri, String[] keys, String[] values)
+        IBinder httpServiceBinder, String uri, String[] keys, String[] values)
         throws IllegalArgumentException;
 
     /**
diff --git a/media/java/android/media/MediaMuxer.java b/media/java/android/media/MediaMuxer.java
index e5c97e7..f518ab2 100644
--- a/media/java/android/media/MediaMuxer.java
+++ b/media/java/android/media/MediaMuxer.java
@@ -17,13 +17,11 @@
 package android.media;
 
 import android.media.MediaCodec.BufferInfo;
-
 import dalvik.system.CloseGuard;
 
-import java.io.File;
 import java.io.FileDescriptor;
-import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.RandomAccessFile;
 import java.nio.ByteBuffer;
 import java.util.Map;
 
@@ -79,6 +77,7 @@
         private OutputFormat() {}
         /** MPEG4 media file format*/
         public static final int MUXER_OUTPUT_MPEG_4 = 0;
+        public static final int MUXER_OUTPUT_WEBM   = 1;
     };
 
     // All the native functions are listed here.
@@ -120,20 +119,22 @@
         if (path == null) {
             throw new IllegalArgumentException("path must not be null");
         }
-        if (format != OutputFormat.MUXER_OUTPUT_MPEG_4) {
+        if (format != OutputFormat.MUXER_OUTPUT_MPEG_4 &&
+                format != OutputFormat.MUXER_OUTPUT_WEBM) {
             throw new IllegalArgumentException("format is invalid");
         }
-        FileOutputStream fos = null;
+        // Use RandomAccessFile so we can open the file with RW access;
+        // RW access allows the native writer to memory map the output file.
+        RandomAccessFile file = null;
         try {
-            File file = new File(path);
-            fos = new FileOutputStream(file);
-            FileDescriptor fd = fos.getFD();
+            file = new RandomAccessFile(path, "rws");
+            FileDescriptor fd = file.getFD();
             mNativeObject = nativeSetup(fd, format);
             mState = MUXER_STATE_INITIALIZED;
             mCloseGuard.open("release");
         } finally {
-            if (fos != null) {
-                fos.close();
+            if (file != null) {
+                file.close();
             }
         }
     }
diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java
index 41ba5d6..1b92410 100644
--- a/media/java/android/media/MediaPlayer.java
+++ b/media/java/android/media/MediaPlayer.java
@@ -16,36 +16,38 @@
 
 package android.media;
 
+import android.app.ActivityThread;
+import android.app.AppOpsManager;
 import android.content.BroadcastReceiver;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.res.AssetFileDescriptor;
-import android.net.Proxy;
-import android.net.ProxyProperties;
 import android.net.Uri;
 import android.os.Handler;
 import android.os.HandlerThread;
+import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.ParcelFileDescriptor;
 import android.os.Process;
 import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.util.Log;
 import android.view.Surface;
 import android.view.SurfaceHolder;
-import android.graphics.Bitmap;
 import android.graphics.SurfaceTexture;
 import android.media.AudioManager;
 import android.media.MediaFormat;
 import android.media.MediaTimeProvider;
-import android.media.MediaTimeProvider.OnMediaTimeListener;
 import android.media.SubtitleController;
 import android.media.SubtitleData;
 
+import com.android.internal.app.IAppOpsService;
+
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
@@ -580,6 +582,8 @@
     private PowerManager.WakeLock mWakeLock = null;
     private boolean mScreenOnWhilePlaying;
     private boolean mStayAwake;
+    private final IAppOpsService mAppOps;
+    private int mStreamType = AudioManager.USE_DEFAULT_STREAM_TYPE;
 
     /**
      * Default constructor. Consider using one of the create() methods for
@@ -603,6 +607,8 @@
         mOutOfBandSubtitleTracks = new Vector<SubtitleTrack>();
         mOpenSubtitleSources = new Vector<InputStream>();
         mInbandSubtitleTracks = new SubtitleTrack[0];
+        IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE);
+        mAppOps = IAppOpsService.Stub.asInterface(b);
 
         /* Native setup requires a weak reference to our object.
          * It's easier to create it here than in C++.
@@ -884,8 +890,6 @@
      */
     public void setDataSource(Context context, Uri uri, Map<String, String> headers)
         throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
-        disableProxyListener();
-
         String scheme = uri.getScheme();
         if(scheme == null || scheme.equals("file")) {
             setDataSource(uri.getPath());
@@ -919,11 +923,6 @@
         Log.d(TAG, "Couldn't open file on client side, trying server side");
 
         setDataSource(uri.toString(), headers);
-
-        if (scheme.equalsIgnoreCase("http")
-                || scheme.equalsIgnoreCase("https")) {
-            setupProxyListener(context);
-        }
     }
 
     /**
@@ -974,8 +973,6 @@
 
     private void setDataSource(String path, String[] keys, String[] values)
             throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
-        disableProxyListener();
-
         final Uri uri = Uri.parse(path);
         if ("file".equals(uri.getScheme())) {
             path = uri.getPath();
@@ -992,8 +989,18 @@
         }
     }
 
-    private native void _setDataSource(
+    private void _setDataSource(
         String path, String[] keys, String[] values)
+        throws IOException, IllegalArgumentException, SecurityException, IllegalStateException {
+        nativeSetDataSource(
+                MediaHTTPService.createHttpServiceBinderIfNecessary(path),
+                path,
+                keys,
+                values);
+    }
+
+    private native void nativeSetDataSource(
+        IBinder httpServiceBinder, String path, String[] keys, String[] values)
         throws IOException, IllegalArgumentException, SecurityException, IllegalStateException;
 
     /**
@@ -1021,7 +1028,6 @@
      */
     public void setDataSource(FileDescriptor fd, long offset, long length)
             throws IOException, IllegalArgumentException, IllegalStateException {
-        disableProxyListener();
         _setDataSource(fd, offset, length);
     }
 
@@ -1059,13 +1065,35 @@
      *
      * @throws IllegalStateException if it is called in an invalid state
      */
-    public  void start() throws IllegalStateException {
+    public void start() throws IllegalStateException {
+        if (isRestricted()) {
+            _setVolume(0, 0);
+        }
         stayAwake(true);
         _start();
     }
 
     private native void _start() throws IllegalStateException;
 
+    private boolean isRestricted() {
+        try {
+            final int mode = mAppOps.checkAudioOperation(AppOpsManager.OP_PLAY_AUDIO,
+                    getAudioStreamType(), Process.myUid(), ActivityThread.currentPackageName());
+            return mode != AppOpsManager.MODE_ALLOWED;
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+
+    private int getAudioStreamType() {
+        if (mStreamType == AudioManager.USE_DEFAULT_STREAM_TYPE) {
+            mStreamType = _getAudioStreamType();
+        }
+        return mStreamType;
+    }
+
+    private native int _getAudioStreamType() throws IllegalStateException;
+
     /**
      * Stops playback after playback has been stopped or paused.
      *
@@ -1393,8 +1421,6 @@
         if (mEventHandler != null) {
             mEventHandler.removeCallbacksAndMessages(null);
         }
-
-        disableProxyListener();
     }
 
     private native void _reset();
@@ -1408,7 +1434,12 @@
      * @param streamtype the audio stream type
      * @see android.media.AudioManager
      */
-    public native void setAudioStreamType(int streamtype);
+    public void setAudioStreamType(int streamtype) {
+        _setAudioStreamType(streamtype);
+        mStreamType = streamtype;
+    }
+
+    private native void _setAudioStreamType(int streamtype);
 
     /**
      * Sets the player to be looping or non-looping.
@@ -1441,7 +1472,14 @@
      * The single parameter form below is preferred if the channel volumes don't need
      * to be set independently.
      */
-    public native void setVolume(float leftVolume, float rightVolume);
+    public void setVolume(float leftVolume, float rightVolume) {
+        if (isRestricted()) {
+            return;
+        }
+        _setVolume(leftVolume, rightVolume);
+    }
+
+    private native void _setVolume(float leftVolume, float rightVolume);
 
     /**
      * Similar, excepts sets volume of all channels to same value.
@@ -1506,7 +1544,14 @@
      * 0 < x <= R -> level = 10^(72*(x-R)/20/R)
      * @param level send level scalar
      */
-    public native void setAuxEffectSendLevel(float level);
+    public void setAuxEffectSendLevel(float level) {
+        if (isRestricted()) {
+            return;
+        }
+        _setAuxEffectSendLevel(level);
+    }
+
+    private native void _setAuxEffectSendLevel(float level);
 
     /*
      * @param request Parcel destinated to the media player. The
@@ -2742,59 +2787,6 @@
                 mode == VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
     }
 
-    private Context mProxyContext = null;
-    private ProxyReceiver mProxyReceiver = null;
-
-    private void setupProxyListener(Context context) {
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(Proxy.PROXY_CHANGE_ACTION);
-        mProxyReceiver = new ProxyReceiver();
-        mProxyContext = context;
-
-        Intent currentProxy =
-            context.getApplicationContext().registerReceiver(mProxyReceiver, filter);
-
-        if (currentProxy != null) {
-            handleProxyBroadcast(currentProxy);
-        }
-    }
-
-    private void disableProxyListener() {
-        if (mProxyReceiver == null) {
-            return;
-        }
-
-        Context appContext = mProxyContext.getApplicationContext();
-        if (appContext != null) {
-            appContext.unregisterReceiver(mProxyReceiver);
-        }
-
-        mProxyReceiver = null;
-        mProxyContext = null;
-    }
-
-    private void handleProxyBroadcast(Intent intent) {
-        ProxyProperties props =
-            (ProxyProperties)intent.getExtra(Proxy.EXTRA_PROXY_INFO);
-
-        if (props == null || props.getHost() == null) {
-            updateProxyConfig(null);
-        } else {
-            updateProxyConfig(props);
-        }
-    }
-
-    private class ProxyReceiver extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (intent.getAction().equals(Proxy.PROXY_CHANGE_ACTION)) {
-                handleProxyBroadcast(intent);
-            }
-        }
-    }
-
-    private native void updateProxyConfig(ProxyProperties props);
-
     /** @hide */
     static class TimeProvider implements MediaPlayer.OnSeekCompleteListener,
             MediaTimeProvider {
diff --git a/media/java/android/media/MediaRecorder.java b/media/java/android/media/MediaRecorder.java
index 5a9d577..21e2f4b 100644
--- a/media/java/android/media/MediaRecorder.java
+++ b/media/java/android/media/MediaRecorder.java
@@ -124,6 +124,18 @@
     public native void setCamera(Camera c);
 
     /**
+     * Gets the surface to record from when using SURFACE video source.
+     * <p>
+     * Should only be called after prepare(). Frames rendered before start()
+     * will be discarded.
+     * </p>
+     * @throws IllegalStateException if it is called before prepare(), after
+     * stop() or is called when VideoSource is not set to SURFACE.
+     * @see android.media.MediaRecorder.VideoSource
+     */
+    public native Surface getSurface();
+
+    /**
      * Sets a Surface to show a preview of recorded media (video). Calls this
      * before prepare() to make sure that the desirable preview display is
      * set. If {@link #setCamera(Camera)} is used and the surface has been
@@ -225,10 +237,23 @@
        */
         private VideoSource() {}
         public static final int DEFAULT = 0;
-        /** Camera video source */
+        /** Camera video source
+         * <p>
+         * Using android.hardware.Camera as video source.
+         * </p>
+         */
         public static final int CAMERA = 1;
-        /** @hide */
-        public static final int GRALLOC_BUFFER = 2;
+        /** Surface video source
+         * <p>
+         * Using a Surface as video source.
+         * </p><p>
+         * This flag must be used when recording from an
+         * android.hardware.camera2.CameraDevice source.
+         * </p><p>
+         * When using this video source type, use {@link MediaRecorder#getSurface()}
+         * to retrieve the surface created by MediaRecorder.
+         */
+        public static final int SURFACE = 2;
     }
 
     /**
@@ -392,8 +417,8 @@
         setParameter("time-lapse-enable=1");
 
         double timeBetweenFrameCapture = 1 / fps;
-        int timeBetweenFrameCaptureMs = (int) (1000 * timeBetweenFrameCapture);
-        setParameter("time-between-time-lapse-frame-capture=" + timeBetweenFrameCaptureMs);
+        long timeBetweenFrameCaptureUs = (long) (1000000 * timeBetweenFrameCapture);
+        setParameter("time-between-time-lapse-frame-capture=" + timeBetweenFrameCaptureUs);
     }
 
     /**
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index 06a8f4c..9516bf8 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -57,6 +57,7 @@
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Locale;
@@ -1411,27 +1412,60 @@
         return false;
     }
 
-    public static boolean isNoMediaPath(String path) {
-        if (path == null) return false;
+    private static HashMap<String,String> mNoMediaPaths = new HashMap<String,String>();
+    private static HashMap<String,String> mMediaPaths = new HashMap<String,String>();
 
-        // return true if file or any parent directory has name starting with a dot
-        if (path.indexOf("/.") >= 0) return true;
-
-        // now check to see if any parent directories have a ".nomedia" file
-        // start from 1 so we don't bother checking in the root directory
-        int offset = 1;
-        while (offset >= 0) {
-            int slashIndex = path.indexOf('/', offset);
-            if (slashIndex > offset) {
-                slashIndex++; // move past slash
-                File file = new File(path.substring(0, slashIndex) + ".nomedia");
-                if (file.exists()) {
-                    // we have a .nomedia in one of the parent directories
-                    return true;
-                }
+    /* MediaProvider calls this when a .nomedia file is added or removed */
+    public static void clearMediaPathCache(boolean clearMediaPaths, boolean clearNoMediaPaths) {
+        synchronized (MediaScanner.class) {
+            if (clearMediaPaths) {
+                mMediaPaths.clear();
             }
-            offset = slashIndex;
+            if (clearNoMediaPaths) {
+                mNoMediaPaths.clear();
+            }
         }
+    }
+
+    public static boolean isNoMediaPath(String path) {
+        if (path == null) {
+            return false;
+        }
+        // return true if file or any parent directory has name starting with a dot
+        if (path.indexOf("/.") >= 0) {
+            return true;
+        }
+
+        int firstSlash = path.lastIndexOf('/');
+        if (firstSlash <= 0) {
+            return false;
+        }
+        String parent = path.substring(0,  firstSlash);
+
+        synchronized (MediaScanner.class) {
+            if (mNoMediaPaths.containsKey(parent)) {
+                return true;
+            } else if (!mMediaPaths.containsKey(parent)) {
+                // check to see if any parent directories have a ".nomedia" file
+                // start from 1 so we don't bother checking in the root directory
+                int offset = 1;
+                while (offset >= 0) {
+                    int slashIndex = path.indexOf('/', offset);
+                    if (slashIndex > offset) {
+                        slashIndex++; // move past slash
+                        File file = new File(path.substring(0, slashIndex) + ".nomedia");
+                        if (file.exists()) {
+                            // we have a .nomedia in one of the parent directories
+                            mNoMediaPaths.put(parent, "");
+                            return true;
+                        }
+                    }
+                    offset = slashIndex;
+                }
+                mMediaPaths.put(parent, "");
+            }
+        }
+
         return isNoMediaFile(path);
     }
 
diff --git a/media/java/android/media/Metadata.java b/media/java/android/media/Metadata.java
index b566653..eb543b4 100644
--- a/media/java/android/media/Metadata.java
+++ b/media/java/android/media/Metadata.java
@@ -16,7 +16,6 @@
 
 package android.media;
 
-import android.graphics.Bitmap;
 import android.os.Parcel;
 import android.util.Log;
 
diff --git a/media/java/android/media/MiniThumbFile.java b/media/java/android/media/MiniThumbFile.java
index 63b149c..23c3652 100644
--- a/media/java/android/media/MiniThumbFile.java
+++ b/media/java/android/media/MiniThumbFile.java
@@ -16,7 +16,6 @@
 
 package android.media;
 
-import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Environment;
 import android.util.Log;
diff --git a/media/java/android/media/PlayerRecord.java b/media/java/android/media/PlayerRecord.java
new file mode 100644
index 0000000..f9708c3
--- /dev/null
+++ b/media/java/android/media/PlayerRecord.java
@@ -0,0 +1,357 @@
+/*
+ * Copyright (C) 2014 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 android.media;
+
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.IBinder.DeathRecipient;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.io.PrintWriter;
+
+/**
+ * @hide
+ * Class to handle all the information about a media player, encapsulating information
+ * about its use RemoteControlClient, playback type and volume... The lifecycle of each
+ * instance is managed by android.media.MediaFocusControl, from its addition to the player stack
+ * stack to its release.
+ */
+class PlayerRecord implements DeathRecipient {
+
+    // on purpose not using this classe's name, as it will only be used from MediaFocusControl
+    private static final String TAG = "MediaFocusControl";
+    private static final boolean DEBUG = false;
+
+    /**
+     * A global counter for RemoteControlClient identifiers
+     */
+    private static int sLastRccId = 0;
+
+    public static MediaFocusControl sController;
+
+    /**
+     * The target for the ACTION_MEDIA_BUTTON events.
+     * Always non null. //FIXME verify
+     */
+    final private PendingIntent mMediaIntent;
+    /**
+     * The registered media button event receiver.
+     */
+    final private ComponentName mReceiverComponent;
+
+    private int mRccId = RemoteControlClient.RCSE_ID_UNREGISTERED;
+
+    /**
+     * A non-null token implies this record tracks a "live" player whose death is being monitored.
+     */
+    private IBinder mToken;
+    private String mCallingPackageName;
+    private int mCallingUid;
+    /**
+     * Provides access to the information to display on the remote control.
+     * May be null (when a media button event receiver is registered,
+     *     but no remote control client has been registered) */
+    private IRemoteControlClient mRcClient;
+    private RcClientDeathHandler mRcClientDeathHandler;
+    /**
+     * Information only used for non-local playback
+     */
+    //FIXME private?
+    public int mPlaybackType;
+    public int mPlaybackVolume;
+    public int mPlaybackVolumeMax;
+    public int mPlaybackVolumeHandling;
+    public int mPlaybackStream;
+    public RccPlaybackState mPlaybackState;
+    public IRemoteVolumeObserver mRemoteVolumeObs;
+
+
+    protected static class RccPlaybackState {
+        public int mState;
+        public long mPositionMs;
+        public float mSpeed;
+
+        public RccPlaybackState(int state, long positionMs, float speed) {
+            mState = state;
+            mPositionMs = positionMs;
+            mSpeed = speed;
+        }
+
+        public void reset() {
+            mState = RemoteControlClient.PLAYSTATE_STOPPED;
+            mPositionMs = RemoteControlClient.PLAYBACK_POSITION_INVALID;
+            mSpeed = RemoteControlClient.PLAYBACK_SPEED_1X;
+        }
+
+        @Override
+        public String toString() {
+            return stateToString() + ", " + posToString() + ", " + mSpeed + "X";
+        }
+
+        private String posToString() {
+            if (mPositionMs == RemoteControlClient.PLAYBACK_POSITION_INVALID) {
+                return "PLAYBACK_POSITION_INVALID";
+            } else if (mPositionMs == RemoteControlClient.PLAYBACK_POSITION_ALWAYS_UNKNOWN) {
+                return "PLAYBACK_POSITION_ALWAYS_UNKNOWN";
+            } else {
+                return (String.valueOf(mPositionMs) + "ms");
+            }
+        }
+
+        private String stateToString() {
+            switch (mState) {
+                case RemoteControlClient.PLAYSTATE_NONE:
+                    return "PLAYSTATE_NONE";
+                case RemoteControlClient.PLAYSTATE_STOPPED:
+                    return "PLAYSTATE_STOPPED";
+                case RemoteControlClient.PLAYSTATE_PAUSED:
+                    return "PLAYSTATE_PAUSED";
+                case RemoteControlClient.PLAYSTATE_PLAYING:
+                    return "PLAYSTATE_PLAYING";
+                case RemoteControlClient.PLAYSTATE_FAST_FORWARDING:
+                    return "PLAYSTATE_FAST_FORWARDING";
+                case RemoteControlClient.PLAYSTATE_REWINDING:
+                    return "PLAYSTATE_REWINDING";
+                case RemoteControlClient.PLAYSTATE_SKIPPING_FORWARDS:
+                    return "PLAYSTATE_SKIPPING_FORWARDS";
+                case RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS:
+                    return "PLAYSTATE_SKIPPING_BACKWARDS";
+                case RemoteControlClient.PLAYSTATE_BUFFERING:
+                    return "PLAYSTATE_BUFFERING";
+                case RemoteControlClient.PLAYSTATE_ERROR:
+                    return "PLAYSTATE_ERROR";
+                default:
+                    return "[invalid playstate]";
+            }
+        }
+    }
+
+
+    /**
+     * Inner class to monitor remote control client deaths, and remove the client for the
+     * remote control stack if necessary.
+     */
+    private class RcClientDeathHandler implements IBinder.DeathRecipient {
+        final private IBinder mCb; // To be notified of client's death
+        //FIXME needed?
+        final private PendingIntent mMediaIntent;
+
+        RcClientDeathHandler(IBinder cb, PendingIntent pi) {
+            mCb = cb;
+            mMediaIntent = pi;
+        }
+
+        public void binderDied() {
+            Log.w(TAG, "  RemoteControlClient died");
+            // remote control client died, make sure the displays don't use it anymore
+            //  by setting its remote control client to null
+            sController.registerRemoteControlClient(mMediaIntent, null/*rcClient*/, null/*ignored*/);
+            // the dead client was maybe handling remote playback, the controller should reevaluate
+            sController.postReevaluateRemote();
+        }
+
+        public IBinder getBinder() {
+            return mCb;
+        }
+    }
+
+
+    protected static class RemotePlaybackState {
+        int mRccId;
+        int mVolume;
+        int mVolumeMax;
+        int mVolumeHandling;
+
+        protected RemotePlaybackState(int id, int vol, int volMax) {
+            mRccId = id;
+            mVolume = vol;
+            mVolumeMax = volMax;
+            mVolumeHandling = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME_HANDLING;
+        }
+    }
+
+
+    void dump(PrintWriter pw, boolean registrationInfo) {
+        if (registrationInfo) {
+            pw.println("  pi: " + mMediaIntent +
+                    " -- pack: " + mCallingPackageName +
+                    "  -- ercvr: " + mReceiverComponent +
+                    "  -- client: " + mRcClient +
+                    "  -- uid: " + mCallingUid +
+                    "  -- type: " + mPlaybackType +
+                    "  state: " + mPlaybackState);
+        } else {
+            // emphasis on state
+            pw.println("  uid: " + mCallingUid +
+                    "  -- id: " + mRccId +
+                    "  -- type: " + mPlaybackType +
+                    "  -- state: " + mPlaybackState +
+                    "  -- vol handling: " + mPlaybackVolumeHandling +
+                    "  -- vol: " + mPlaybackVolume +
+                    "  -- volMax: " + mPlaybackVolumeMax +
+                    "  -- volObs: " + mRemoteVolumeObs);
+        }
+    }
+
+
+    static protected void setMediaFocusControl(MediaFocusControl mfc) {
+        sController = mfc;
+    }
+
+    /** precondition: mediaIntent != null */
+    protected PlayerRecord(PendingIntent mediaIntent, ComponentName eventReceiver, IBinder token)
+    {
+        mMediaIntent = mediaIntent;
+        mReceiverComponent = eventReceiver;
+        mToken = token;
+        mCallingUid = -1;
+        mRcClient = null;
+        mRccId = ++sLastRccId;
+        mPlaybackState = new RccPlaybackState(
+                RemoteControlClient.PLAYSTATE_STOPPED,
+                RemoteControlClient.PLAYBACK_POSITION_INVALID,
+                RemoteControlClient.PLAYBACK_SPEED_1X);
+
+        resetPlaybackInfo();
+        if (mToken != null) {
+            try {
+                mToken.linkToDeath(this, 0);
+            } catch (RemoteException e) {
+                sController.unregisterMediaButtonIntentAsync(mMediaIntent);
+            }
+        }
+    }
+
+    //---------------------------------------------
+    // Accessors
+    protected int getRccId() {
+        return mRccId;
+    }
+
+    protected IRemoteControlClient getRcc() {
+        return mRcClient;
+    }
+
+    protected ComponentName getMediaButtonReceiver() {
+        return mReceiverComponent;
+    }
+
+    protected PendingIntent getMediaButtonIntent() {
+        return mMediaIntent;
+    }
+
+    protected boolean hasMatchingMediaButtonIntent(PendingIntent pi) {
+        if (mToken != null) {
+            return mMediaIntent.equals(pi);
+        } else {
+            if (mReceiverComponent != null) {
+                return mReceiverComponent.equals(pi.getIntent().getComponent());
+            } else {
+                return false;
+            }
+        }
+    }
+
+    protected boolean isPlaybackActive() {
+        return MediaFocusControl.isPlaystateActive(mPlaybackState.mState);
+    }
+
+    //---------------------------------------------
+    // Modify the records stored in the instance
+    protected void resetControllerInfoForRcc(IRemoteControlClient rcClient,
+            String callingPackageName, int uid) {
+        // already had a remote control client?
+        if (mRcClientDeathHandler != null) {
+            // stop monitoring the old client's death
+            unlinkToRcClientDeath();
+        }
+        // save the new remote control client
+        mRcClient = rcClient;
+        mCallingPackageName = callingPackageName;
+        mCallingUid = uid;
+        if (rcClient == null) {
+            // here mcse.mRcClientDeathHandler is null;
+            resetPlaybackInfo();
+        } else {
+            IBinder b = mRcClient.asBinder();
+            RcClientDeathHandler rcdh =
+                    new RcClientDeathHandler(b, mMediaIntent);
+            try {
+                b.linkToDeath(rcdh, 0);
+            } catch (RemoteException e) {
+                // remote control client is DOA, disqualify it
+                Log.w(TAG, "registerRemoteControlClient() has a dead client " + b);
+                mRcClient = null;
+            }
+            mRcClientDeathHandler = rcdh;
+        }
+    }
+
+    protected void resetControllerInfoForNoRcc() {
+        // stop monitoring the RCC death
+        unlinkToRcClientDeath();
+        // reset the RCC-related fields
+        mRcClient = null;
+        mCallingPackageName = null;
+    }
+
+    public void resetPlaybackInfo() {
+        mPlaybackType = RemoteControlClient.PLAYBACK_TYPE_LOCAL;
+        mPlaybackVolume = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME;
+        mPlaybackVolumeMax = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME;
+        mPlaybackVolumeHandling = RemoteControlClient.DEFAULT_PLAYBACK_VOLUME_HANDLING;
+        mPlaybackStream = AudioManager.STREAM_MUSIC;
+        mPlaybackState.reset();
+        mRemoteVolumeObs = null;
+    }
+
+    //---------------------------------------------
+    public void unlinkToRcClientDeath() {
+        if ((mRcClientDeathHandler != null) && (mRcClientDeathHandler.mCb != null)) {
+            try {
+                mRcClientDeathHandler.mCb.unlinkToDeath(mRcClientDeathHandler, 0);
+                mRcClientDeathHandler = null;
+            } catch (java.util.NoSuchElementException e) {
+                // not much we can do here
+                Log.e(TAG, "Error in unlinkToRcClientDeath()", e);
+            }
+        }
+    }
+
+    // FIXME rename to "release"? (as in FocusRequester class)
+    public void destroy() {
+        unlinkToRcClientDeath();
+        if (mToken != null) {
+            mToken.unlinkToDeath(this, 0);
+            mToken = null;
+        }
+    }
+
+    @Override
+    public void binderDied() {
+        sController.unregisterMediaButtonIntentAsync(mMediaIntent);
+    }
+
+    @Override
+    protected void finalize() throws Throwable {
+        destroy(); // unlink exception handled inside method
+        super.finalize();
+    }
+}
diff --git a/media/java/android/media/Rating.java b/media/java/android/media/Rating.java
index 82c0392..f4fbe2c 100644
--- a/media/java/android/media/Rating.java
+++ b/media/java/android/media/Rating.java
@@ -16,7 +16,6 @@
 
 package android.media;
 
-import android.graphics.Bitmap;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.util.Log;
@@ -30,8 +29,13 @@
  * through one of the factory methods.
  */
 public final class Rating implements Parcelable {
-
     private final static String TAG = "Rating";
+    /**
+     * Indicates a rating style is not supported. A Rating will never have this
+     * type, but can be used by other classes to indicate they do not support
+     * Rating.
+     */
+    public final static int RATING_NONE = 0;
 
     /**
      * A rating style with a single degree of rating, "heart" vs "no heart". Can be used to
diff --git a/media/java/android/media/RemoteControlClient.java b/media/java/android/media/RemoteControlClient.java
index 0c00aba..8368df94 100644
--- a/media/java/android/media/RemoteControlClient.java
+++ b/media/java/android/media/RemoteControlClient.java
@@ -24,13 +24,16 @@
 import android.graphics.Canvas;
 import android.graphics.Paint;
 import android.graphics.RectF;
-import android.media.MediaMetadataRetriever;
+import android.media.session.MediaMetadata;
+import android.media.session.MediaSessionLegacyHelper;
+import android.media.session.PlaybackState;
+import android.media.session.Session;
+import android.media.session.TransportPerformer;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
-import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
@@ -338,6 +341,8 @@
      */
     public final static int FLAG_INFORMATION_REQUEST_ALBUM_ART = 1 << 3;
 
+    private Session mSession;
+
     /**
      * Class constructor.
      * @param mediaButtonIntent The intent that will be sent for the media button events sent
@@ -387,6 +392,22 @@
     }
 
     /**
+     * @hide
+     */
+    public void registerWithSession(MediaSessionLegacyHelper helper) {
+        helper.addRccListener(mRcMediaIntent, mTransportListener);
+        mSession = helper.getSession(mRcMediaIntent);
+    }
+
+    /**
+     * @hide
+     */
+    public void unregisterWithSession(MediaSessionLegacyHelper helper) {
+        helper.removeRccListener(mRcMediaIntent);
+        mSession = null;
+    }
+
+    /**
      * Class used to modify metadata in a {@link RemoteControlClient} object.
      * Use {@link RemoteControlClient#editMetadata(boolean)} to create an instance of an editor,
      * on which you set the metadata for the RemoteControlClient instance. Once all the information
@@ -440,6 +461,15 @@
         public synchronized MetadataEditor putString(int key, String value)
                 throws IllegalArgumentException {
             super.putString(key, value);
+            if (mMetadataBuilder != null) {
+                // MediaMetadata supports all the same fields as MetadataEditor
+                String metadataKey = MediaMetadata.getKeyFromMetadataEditorKey(key);
+                // But just in case, don't add things we don't understand
+                if (metadataKey != null) {
+                    mMetadataBuilder.putString(metadataKey, value);
+                }
+            }
+
             return this;
         }
 
@@ -461,6 +491,14 @@
         public synchronized MetadataEditor putLong(int key, long value)
                 throws IllegalArgumentException {
             super.putLong(key, value);
+            if (mMetadataBuilder != null) {
+                // MediaMetadata supports all the same fields as MetadataEditor
+                String metadataKey = MediaMetadata.getKeyFromMetadataEditorKey(key);
+                // But just in case, don't add things we don't understand
+                if (metadataKey != null) {
+                    mMetadataBuilder.putLong(metadataKey, value);
+                }
+            }
             return this;
         }
 
@@ -478,6 +516,14 @@
         public synchronized MetadataEditor putBitmap(int key, Bitmap bitmap)
                 throws IllegalArgumentException {
             super.putBitmap(key, bitmap);
+            if (mMetadataBuilder != null) {
+                // MediaMetadata supports all the same fields as MetadataEditor
+                String metadataKey = MediaMetadata.getKeyFromMetadataEditorKey(key);
+                // But just in case, don't add things we don't understand
+                if (metadataKey != null) {
+                    mMetadataBuilder.putBitmap(metadataKey, bitmap);
+                }
+            }
             return this;
         }
 
@@ -503,7 +549,7 @@
                 Log.e(TAG, "Can't apply a previously applied MetadataEditor");
                 return;
             }
-            synchronized(mCacheLock) {
+            synchronized (mCacheLock) {
                 // assign the edited data
                 mMetadata = new Bundle(mEditorMetadata);
                 // add the information about editable keys
@@ -523,6 +569,11 @@
                     // send to remote control display if conditions are met
                     sendArtwork_syncCacheLock(null, 0, 0);
                 }
+
+                // USE_SESSIONS
+                if (mSession != null && mMetadataBuilder != null) {
+                    mSession.getTransportPerformer().setMetadata(mMetadataBuilder.build());
+                }
                 mApplied = true;
             }
         }
@@ -548,6 +599,12 @@
             editor.mMetadataChanged = false;
             editor.mArtworkChanged = false;
         }
+        // USE_SESSIONS
+        if (startEmpty || mMediaMetadata == null) {
+            editor.mMetadataBuilder = new MediaMetadata.Builder();
+        } else {
+            editor.mMetadataBuilder = new MediaMetadata.Builder(mMediaMetadata);
+        }
         return editor;
     }
 
@@ -626,6 +683,15 @@
 
                 // handle automatic playback position refreshes
                 initiateCheckForDrift_syncCacheLock();
+
+                // USE_SESSIONS
+                if (mSession != null) {
+                    int pbState = PlaybackState.getStateFromRccState(state);
+                    mSessionPlaybackState.setState(pbState, hasPosition ?
+                            mPlaybackPositionMs : PlaybackState.PLAYBACK_POSITION_UNKNOWN,
+                            playbackSpeed);
+                    mSession.getTransportPerformer().setPlaybackState(mSessionPlaybackState);
+                }
             }
         }
     }
@@ -706,6 +772,13 @@
 
             // send to remote control display if conditions are met
             sendTransportControlInfo_syncCacheLock(null);
+
+            // USE_SESSIONS
+            if (mSession != null) {
+                mSessionPlaybackState.setActions(PlaybackState
+                        .getActionsFromRccControlFlags(transportControlFlags));
+                mSession.getTransportPerformer().setPlaybackState(mSessionPlaybackState);
+            }
         }
     }
 
@@ -1040,6 +1113,16 @@
     private boolean mNeedsPositionSync = false;
 
     /**
+     * Cache for the current playback state using Session APIs.
+     */
+    private final PlaybackState mSessionPlaybackState = new PlaybackState();
+
+    /**
+     * Cache for metadata using Session APIs. This is re-initialized in apply().
+     */
+    private MediaMetadata mMediaMetadata;
+
+    /**
      * A class to encapsulate all the information about a remote control display.
      * A RemoteControlClient's metadata and state may be displayed on multiple IRemoteControlDisplay
      */
@@ -1221,6 +1304,26 @@
         return mRcseId;
     }
 
+    // USE_SESSIONS
+    private TransportPerformer.Listener mTransportListener = new TransportPerformer.Listener() {
+
+        @Override
+        public void onSeekTo(long pos) {
+            RemoteControlClient.this.onSeekTo(mCurrentClientGenId, pos);
+        }
+
+        @Override
+        public void onRate(Rating rating) {
+            if ((mTransportControlFlags & FLAG_KEY_MEDIA_RATING) != 0) {
+                if (mEventHandler != null) {
+                    mEventHandler.sendMessage(mEventHandler.obtainMessage(
+                            MSG_UPDATE_METADATA, mCurrentClientGenId,
+                            MetadataEditor.RATING_KEY_BY_USER, rating));
+                }
+            }
+        }
+    };
+
     private EventHandler mEventHandler;
     private final static int MSG_REQUEST_PLAYBACK_STATE = 1;
     private final static int MSG_REQUEST_METADATA = 2;
@@ -1327,7 +1430,7 @@
             // target == null implies all displays must be updated
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mEnabled) {
                     try {
                         di.mRcDisplay.setPlaybackState(mInternalClientGenId,
@@ -1355,7 +1458,7 @@
             // target == null implies all displays must be updated
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mEnabled) {
                     try {
                         di.mRcDisplay.setMetadata(mInternalClientGenId, mMetadata);
@@ -1383,7 +1486,7 @@
             // target == null implies all displays must be updated
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mEnabled) {
                     try {
                         di.mRcDisplay.setTransportControlInfo(mInternalClientGenId,
@@ -1409,7 +1512,7 @@
             // target == null implies all displays must be updated
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                if (!sendArtworkToDisplay((DisplayInfoForClient) displayIterator.next())) {
+                if (!sendArtworkToDisplay(displayIterator.next())) {
                     displayIterator.remove();
                 }
             }
@@ -1455,7 +1558,7 @@
             // target == null implies all displays must be updated
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 try {
                     if (di.mEnabled) {
                         if ((di.mArtworkExpectedWidth > 0) && (di.mArtworkExpectedHeight > 0)) {
@@ -1539,7 +1642,7 @@
             boolean displayKnown = false;
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext() && !displayKnown) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 displayKnown = di.mRcDisplay.asBinder().equals(rcd.asBinder());
                 if (displayKnown) {
                     // this display was known but the change in artwork size will cause the
@@ -1564,7 +1667,7 @@
         synchronized(mCacheLock) {
             Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mRcDisplay.asBinder().equals(rcd.asBinder())) {
                     displayIterator.remove();
                     break;
@@ -1575,7 +1678,7 @@
             boolean newNeedsPositionSync = false;
             displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mWantsPositionSync) {
                     newNeedsPositionSync = true;
                     break;
@@ -1594,7 +1697,7 @@
         synchronized(mCacheLock) {
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mRcDisplay.asBinder().equals(rcd.asBinder()) &&
                         ((di.mArtworkExpectedWidth != w) || (di.mArtworkExpectedHeight != h))) {
                     di.mArtworkExpectedWidth = w;
@@ -1619,7 +1722,7 @@
             // go through the list of RCDs and for each entry, check both whether this is the RCD
             //  that gets upated, and whether the list has one entry that wants position sync
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mEnabled) {
                     if (di.mRcDisplay.asBinder().equals(rcd.asBinder())) {
                         di.mWantsPositionSync = wantsSync;
@@ -1642,7 +1745,7 @@
         synchronized(mCacheLock) {
             final Iterator<DisplayInfoForClient> displayIterator = mRcDisplays.iterator();
             while (displayIterator.hasNext()) {
-                final DisplayInfoForClient di = (DisplayInfoForClient) displayIterator.next();
+                final DisplayInfoForClient di = displayIterator.next();
                 if (di.mRcDisplay.asBinder().equals(rcd.asBinder())) {
                     di.mEnabled = enable;
                 }
diff --git a/media/java/android/media/RemoteController.java b/media/java/android/media/RemoteController.java
index 910b24c..3711585 100644
--- a/media/java/android/media/RemoteController.java
+++ b/media/java/android/media/RemoteController.java
@@ -16,7 +16,6 @@
 
 package android.media;
 
-import android.Manifest;
 import android.app.ActivityManager;
 import android.app.PendingIntent;
 import android.app.PendingIntent.CanceledException;
@@ -29,8 +28,6 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.util.DisplayMetrics;
 import android.util.Log;
@@ -267,7 +264,7 @@
      * @throws IllegalArgumentException
      */
     public boolean sendMediaKeyEvent(KeyEvent keyEvent) throws IllegalArgumentException {
-        if (!MediaFocusControl.isMediaKeyCode(keyEvent.getKeyCode())) {
+        if (!KeyEvent.isMediaKey(keyEvent.getKeyCode())) {
             throw new IllegalArgumentException("not a media key event");
         }
         final PendingIntent pi;
diff --git a/media/java/android/media/ResampleInputStream.java b/media/java/android/media/ResampleInputStream.java
index b025e25..80919f7 100644
--- a/media/java/android/media/ResampleInputStream.java
+++ b/media/java/android/media/ResampleInputStream.java
@@ -16,8 +16,6 @@
 
 package android.media;
 
-import android.util.Log;
-
 import java.io.InputStream;
 import java.io.IOException;
 
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index 8e4004b..e211b99 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -23,7 +23,6 @@
 import android.app.Activity;
 import android.content.ContentUris;
 import android.content.Context;
-import android.content.res.AssetFileDescriptor;
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.Environment;
diff --git a/media/java/android/media/SoundPool.java b/media/java/android/media/SoundPool.java
index fbfc574..14f0c69 100644
--- a/media/java/android/media/SoundPool.java
+++ b/media/java/android/media/SoundPool.java
@@ -18,19 +18,26 @@
 
 import java.io.File;
 import java.io.FileDescriptor;
-import java.io.IOException;
 import java.lang.ref.WeakReference;
 
+import android.app.ActivityThread;
+import android.app.AppOpsManager;
 import android.content.Context;
 import android.content.res.AssetFileDescriptor;
 import android.os.Handler;
+import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
 import android.os.ParcelFileDescriptor;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.SystemProperties;
 import android.util.AndroidRuntimeException;
 import android.util.Log;
 
+import com.android.internal.app.IAppOpsService;
+
 
 /**
  * The SoundPool class manages and plays audio resources for applications.
@@ -450,6 +457,8 @@
         private SoundPool mProxy;
 
         private final Object mLock;
+        private final int mStreamType;
+        private final IAppOpsService mAppOps;
 
         // SoundPool messages
         //
@@ -464,6 +473,9 @@
             }
             mLock = new Object();
             mProxy = proxy;
+            mStreamType = streamType;
+            IBinder b = ServiceManager.getService(Context.APP_OPS_SERVICE);
+            mAppOps = IAppOpsService.Stub.asInterface(b);
         }
 
         public int load(String path, int priority)
@@ -523,9 +535,27 @@
 
         public native final boolean unload(int soundID);
 
-        public native final int play(int soundID, float leftVolume, float rightVolume,
+        public final int play(int soundID, float leftVolume, float rightVolume,
+                int priority, int loop, float rate) {
+            if (isRestricted()) {
+                leftVolume = rightVolume = 0;
+            }
+            return _play(soundID, leftVolume, rightVolume, priority, loop, rate);
+        }
+
+        public native final int _play(int soundID, float leftVolume, float rightVolume,
                 int priority, int loop, float rate);
 
+        private boolean isRestricted() {
+            try {
+                final int mode = mAppOps.checkAudioOperation(AppOpsManager.OP_PLAY_AUDIO,
+                        mStreamType, Process.myUid(), ActivityThread.currentPackageName());
+                return mode != AppOpsManager.MODE_ALLOWED;
+            } catch (RemoteException e) {
+                return false;
+            }
+        }
+
         public native final void pause(int streamID);
 
         public native final void resume(int streamID);
@@ -536,8 +566,14 @@
 
         public native final void stop(int streamID);
 
-        public native final void setVolume(int streamID,
-                float leftVolume, float rightVolume);
+        public final void setVolume(int streamID, float leftVolume, float rightVolume) {
+            if (isRestricted()) {
+                return;
+            }
+            _setVolume(streamID, leftVolume, rightVolume);
+        }
+
+        private native final void _setVolume(int streamID, float leftVolume, float rightVolume);
 
         public void setVolume(int streamID, float volume) {
             setVolume(streamID, volume, volume);
diff --git a/media/java/android/media/SubtitleData.java b/media/java/android/media/SubtitleData.java
index f552e82..3e6f6f9 100644
--- a/media/java/android/media/SubtitleData.java
+++ b/media/java/android/media/SubtitleData.java
@@ -17,7 +17,6 @@
 package android.media;
 
 import android.os.Parcel;
-import android.util.Log;
 
 /**
  * @hide
diff --git a/media/java/android/media/ThumbnailUtils.java b/media/java/android/media/ThumbnailUtils.java
index 756638c..daa5fa5 100644
--- a/media/java/android/media/ThumbnailUtils.java
+++ b/media/java/android/media/ThumbnailUtils.java
@@ -17,9 +17,6 @@
 package android.media;
 
 import android.content.ContentResolver;
-import android.content.ContentUris;
-import android.content.ContentValues;
-import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.graphics.Canvas;
@@ -29,15 +26,12 @@
 import android.media.MediaFile.MediaFileType;
 import android.net.Uri;
 import android.os.ParcelFileDescriptor;
-import android.provider.BaseColumns;
 import android.provider.MediaStore.Images;
-import android.provider.MediaStore.Images.Thumbnails;
 import android.util.Log;
 
 import java.io.FileInputStream;
 import java.io.FileDescriptor;
 import java.io.IOException;
-import java.io.OutputStream;
 
 /**
  * Thumbnail generation routines for media provider.
diff --git a/media/java/android/media/WebVttRenderer.java b/media/java/android/media/WebVttRenderer.java
index 4dec081..1c9730f 100644
--- a/media/java/android/media/WebVttRenderer.java
+++ b/media/java/android/media/WebVttRenderer.java
@@ -558,7 +558,11 @@
     }
 }
 
-/** @hide */
+/**
+ *  Supporting July 10 2013 draft version
+ *
+ *  @hide
+ */
 class WebVttParser {
     private static final String TAG = "WebVttParser";
     private Phase mPhase;
@@ -726,15 +730,15 @@
                                 "has invalid value", e.getMessage(), value);
                     }
                 } else if (name.equals("lines")) {
-                    try {
-                        int lines = Integer.parseInt(value);
-                        if (lines >= 0) {
-                            region.mLines = lines;
-                        } else {
-                            log_warning("region setting", name, "is negative", value);
+                    if (value.matches(".*[^0-9].*")) {
+                        log_warning("lines", name, "contains an invalid character", value);
+                    } else {
+                        try {
+                            region.mLines = Integer.parseInt(value);
+                            assert(region.mLines >= 0); // lines contains only digits
+                        } catch (NumberFormatException e) {
+                            log_warning("region setting", name, "is not numeric", value);
                         }
-                    } catch (NumberFormatException e) {
-                        log_warning("region setting", name, "is not numeric", value);
                     }
                 } else if (name.equals("regionanchor") ||
                            name.equals("viewportanchor")) {
@@ -872,26 +876,23 @@
                     }
                 } else if (name.equals("line")) {
                     try {
-                        int linePosition;
                         /* TRICKY: we know that there are no spaces in value */
                         assert(value.indexOf(' ') < 0);
                         if (value.endsWith("%")) {
-                            linePosition = Integer.parseInt(
-                                    value.substring(0, value.length() - 1));
-                            if (linePosition < 0 || linePosition > 100) {
-                                log_warning("cue setting", name, "is out of range", value);
-                                continue;
-                            }
                             mCue.mSnapToLines = false;
-                            mCue.mLinePosition = linePosition;
+                            mCue.mLinePosition = parseIntPercentage(value);
+                        } else if (value.matches(".*[^0-9].*")) {
+                            log_warning("cue setting", name,
+                                    "contains an invalid character", value);
                         } else {
                             mCue.mSnapToLines = true;
                             mCue.mLinePosition = Integer.parseInt(value);
                         }
                     } catch (NumberFormatException e) {
                         log_warning("cue setting", name,
-                               "is not numeric or percentage", value);
+                                "is not numeric or percentage", value);
                     }
+                    // TODO: add support for optional alignment value [,start|middle|end]
                 } else if (name.equals("position")) {
                     try {
                         mCue.mTextPosition = parseIntPercentage(value);
@@ -1136,11 +1137,15 @@
     }
 
     public WebVttRenderingWidget(Context context, AttributeSet attrs) {
-        this(context, null, 0);
+        this(context, attrs, 0);
     }
 
-    public WebVttRenderingWidget(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+    public WebVttRenderingWidget(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public WebVttRenderingWidget(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
 
         // Cannot render text over video when layer type is hardware.
         setLayerType(View.LAYER_TYPE_SOFTWARE, null);
@@ -1521,6 +1526,8 @@
 
             if (DEBUG) {
                 setBackgroundColor(DEBUG_REGION_BACKGROUND);
+            } else {
+                setBackgroundColor(captionStyle.windowColor);
             }
         }
 
@@ -1533,6 +1540,8 @@
                 final CueLayout cueBox = mRegionCueBoxes.get(i);
                 cueBox.setCaptionStyle(captionStyle, fontSize);
             }
+
+            setBackgroundColor(captionStyle.windowColor);
         }
 
         /**
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index cc121a3..9b381cc 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -22,7 +22,6 @@
 import android.os.Looper;
 import android.os.Message;
 import android.util.Log;
-import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.nio.ByteOrder;
 import java.nio.ByteBuffer;
diff --git a/media/java/android/media/audiofx/BassBoost.java b/media/java/android/media/audiofx/BassBoost.java
index 91459ed..a46cc22 100644
--- a/media/java/android/media/audiofx/BassBoost.java
+++ b/media/java/android/media/audiofx/BassBoost.java
@@ -16,16 +16,9 @@
 
 package android.media.audiofx;
 
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
 import android.media.audiofx.AudioEffect;
-import android.os.Bundle;
 import android.util.Log;
 
-import java.nio.ByteOrder;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
 import java.util.StringTokenizer;
 
 
diff --git a/media/java/android/media/audiofx/EnvironmentalReverb.java b/media/java/android/media/audiofx/EnvironmentalReverb.java
index f1f582e..ef1c4c3 100644
--- a/media/java/android/media/audiofx/EnvironmentalReverb.java
+++ b/media/java/android/media/audiofx/EnvironmentalReverb.java
@@ -16,15 +16,7 @@
 
 package android.media.audiofx;
 
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
 import android.media.audiofx.AudioEffect;
-import android.os.Bundle;
-import android.util.Log;
-
-import java.nio.ByteOrder;
-import java.nio.ByteBuffer;
 import java.util.StringTokenizer;
 
 /**
diff --git a/media/java/android/media/audiofx/Equalizer.java b/media/java/android/media/audiofx/Equalizer.java
index 7f38955..7abada0 100644
--- a/media/java/android/media/audiofx/Equalizer.java
+++ b/media/java/android/media/audiofx/Equalizer.java
@@ -16,16 +16,9 @@
 
 package android.media.audiofx;
 
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
 import android.media.audiofx.AudioEffect;
-import android.os.Bundle;
 import android.util.Log;
 
-import java.nio.ByteOrder;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
 import java.util.StringTokenizer;
 
 
diff --git a/media/java/android/media/audiofx/PresetReverb.java b/media/java/android/media/audiofx/PresetReverb.java
index 7a89ae7..ef91667 100644
--- a/media/java/android/media/audiofx/PresetReverb.java
+++ b/media/java/android/media/audiofx/PresetReverb.java
@@ -16,15 +16,7 @@
 
 package android.media.audiofx;
 
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
 import android.media.audiofx.AudioEffect;
-import android.os.Bundle;
-import android.util.Log;
-
-import java.nio.ByteOrder;
-import java.nio.ByteBuffer;
 import java.util.StringTokenizer;
 
 
diff --git a/media/java/android/media/audiofx/Virtualizer.java b/media/java/android/media/audiofx/Virtualizer.java
index 68a7b88..6b20006 100644
--- a/media/java/android/media/audiofx/Virtualizer.java
+++ b/media/java/android/media/audiofx/Virtualizer.java
@@ -16,16 +16,9 @@
 
 package android.media.audiofx;
 
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
 import android.media.audiofx.AudioEffect;
-import android.os.Bundle;
 import android.util.Log;
 
-import java.nio.ByteOrder;
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
 import java.util.StringTokenizer;
 
 
diff --git a/media/java/android/media/audiofx/Visualizer.java b/media/java/android/media/audiofx/Visualizer.java
index ff04201..24c74ac 100644
--- a/media/java/android/media/audiofx/Visualizer.java
+++ b/media/java/android/media/audiofx/Visualizer.java
@@ -18,7 +18,6 @@
 
 import android.util.Log;
 import java.lang.ref.WeakReference;
-import java.io.IOException;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
diff --git a/media/java/android/media/routeprovider/IRouteConnection.aidl b/media/java/android/media/routeprovider/IRouteConnection.aidl
new file mode 100644
index 0000000..15c8039
--- /dev/null
+++ b/media/java/android/media/routeprovider/IRouteConnection.aidl
@@ -0,0 +1,28 @@
+/* Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.media.session.RouteCommand;
+import android.os.ResultReceiver;
+
+/**
+ * Interface for a specific connected route.
+ * @hide
+ */
+oneway interface IRouteConnection {
+    void onCommand(in RouteCommand command, in ResultReceiver cb);
+    void disconnect();
+}
\ No newline at end of file
diff --git a/media/java/android/media/routeprovider/IRouteProvider.aidl b/media/java/android/media/routeprovider/IRouteProvider.aidl
new file mode 100644
index 0000000..c36f6a7
--- /dev/null
+++ b/media/java/android/media/routeprovider/IRouteProvider.aidl
@@ -0,0 +1,36 @@
+/* Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.media.routeprovider.IRouteConnection;
+import android.media.routeprovider.IRouteProviderCallback;
+import android.media.routeprovider.RouteRequest;
+import android.media.session.RouteInfo;
+import android.os.Bundle;
+import android.os.ResultReceiver;
+
+/**
+ * Interface to an app's RouteProviderService.
+ * @hide
+ */
+oneway interface IRouteProvider {
+    void registerCallback(in IRouteProviderCallback cb);
+    void unregisterCallback(in IRouteProviderCallback cb);
+    void updateDiscoveryRequests(in List<RouteRequest> requests);
+
+    void getAvailableRoutes(in List<RouteRequest> requests, in ResultReceiver cb);
+    void connect(in RouteInfo route, in RouteRequest request, in ResultReceiver cb);
+}
\ No newline at end of file
diff --git a/media/java/android/media/routeprovider/IRouteProviderCallback.aidl b/media/java/android/media/routeprovider/IRouteProviderCallback.aidl
new file mode 100644
index 0000000..9185347
--- /dev/null
+++ b/media/java/android/media/routeprovider/IRouteProviderCallback.aidl
@@ -0,0 +1,32 @@
+/* Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.media.routeprovider.IRouteConnection;
+import android.media.session.RouteEvent;
+import android.os.Bundle;
+import android.os.ResultReceiver;
+
+/**
+ * System's provider callback interface.
+ * @hide
+ */
+oneway interface IRouteProviderCallback {
+    void onRoutesChanged();
+    void onConnectionStateChanged(in IRouteConnection connection, int state);
+    void onConnectionTerminated(in IRouteConnection connection);
+    void onRouteEvent(in RouteEvent event);
+}
\ No newline at end of file
diff --git a/media/java/android/media/routeprovider/RouteConnection.java b/media/java/android/media/routeprovider/RouteConnection.java
new file mode 100644
index 0000000..9214ff8
--- /dev/null
+++ b/media/java/android/media/routeprovider/RouteConnection.java
@@ -0,0 +1,164 @@
+/*
+ * Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.media.routeprovider.IRouteConnection;
+import android.media.session.RouteCommand;
+import android.media.session.RouteEvent;
+import android.media.session.RouteInfo;
+import android.media.session.RouteInterface;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents an ongoing connection between an application and a media route
+ * offered by a media route provider.
+ * <p>
+ * The media route provider should add interfaces to the connection before
+ * returning it to the system in order to receive commands from clients on those
+ * interfaces. Use {@link #addRouteInterface(String)} to add an interface and
+ * {@link #getRouteInterface(String)} to retrieve the interface's handle anytime
+ * after it has been added.
+ */
+public final class RouteConnection {
+    private static final String TAG = "RouteConnection";
+    private final ConnectionStub mBinder;
+    private final ArrayList<String> mIfaceNames = new ArrayList<String>();
+    private final ArrayMap<String, RouteInterfaceHandler> mIfaces
+            = new ArrayMap<String, RouteInterfaceHandler>();
+    private final RouteProviderService mProvider;
+    private final RouteInfo mRoute;
+
+    private boolean mPublished;
+
+    /**
+     * Create a new connection for the given Provider and Route.
+     *
+     * @param provider The provider this route is associated with.
+     * @param route The route this is a connection to.
+     */
+    public RouteConnection(RouteProviderService provider, RouteInfo route) {
+        if (provider == null) {
+            throw new IllegalArgumentException("provider may not be null.");
+        }
+        if (route == null) {
+            throw new IllegalArgumentException("route may not be null.");
+        }
+        mBinder = new ConnectionStub(this);
+        mProvider = provider;
+        mRoute = route;
+    }
+
+    /**
+     * Add an interface to this route connection. All interfaces must be added
+     * to the connection before the connection is returned to the system.
+     *
+     * @param ifaceName The name of the interface to add
+     * @return The route interface that was registered
+     */
+    public RouteInterfaceHandler addRouteInterface(String ifaceName) {
+        if (TextUtils.isEmpty(ifaceName)) {
+            throw new IllegalArgumentException("The interface's name may not be empty");
+        }
+        if (mPublished) {
+            throw new IllegalStateException(
+                    "Connection has already been published to the system.");
+        }
+        RouteInterfaceHandler iface = mIfaces.get(ifaceName);
+        if (iface == null) {
+            iface = new RouteInterfaceHandler(this, ifaceName);
+            mIfaceNames.add(ifaceName);
+            mIfaces.put(ifaceName, iface);
+        } else {
+            Log.w(TAG, "Attempted to add an interface that already exists");
+        }
+        return iface;
+    }
+
+    /**
+     * Get the interface instance for the specified interface name. If the
+     * interface was not added to this connection null will be returned.
+     *
+     * @param ifaceName The name of the interface to get.
+     * @return The route interface with that name or null.
+     */
+    public RouteInterfaceHandler getRouteInterface(String ifaceName) {
+        return mIfaces.get(ifaceName);
+    }
+
+    /**
+     * Close the connection and inform the system that it may no longer be used.
+     */
+    public void shutDown() {
+        mProvider.disconnect(this);
+    }
+
+    /**
+     * @hide
+     */
+    public void sendEvent(String iface, String event, Bundle extras) {
+        RouteEvent e = new RouteEvent(mBinder, iface, event, extras);
+        mProvider.sendRouteEvent(e);
+    }
+
+    /**
+     * @hide
+     */
+    IRouteConnection.Stub getBinder() {
+        return mBinder;
+    }
+
+    /**
+     * @hide
+     */
+    void publish() {
+        mPublished = true;
+    }
+
+    private static class ConnectionStub extends IRouteConnection.Stub {
+        private final WeakReference<RouteConnection> mConnection;
+
+        public ConnectionStub(RouteConnection connection) {
+            mConnection = new WeakReference<RouteConnection>(connection);
+        }
+
+        @Override
+        public void onCommand(RouteCommand command, ResultReceiver cb) {
+            RouteConnection connection = mConnection.get();
+            if (connection != null) {
+                RouteInterfaceHandler iface = connection.mIfaces.get(command.getIface());
+                if (iface != null) {
+                    iface.onCommand(command.getEvent(), command.getExtras(), cb);
+                } else if (cb != null) {
+                    cb.send(RouteInterface.RESULT_INTERFACE_NOT_SUPPORTED, null);
+                }
+            }
+        }
+
+        @Override
+        public void disconnect() {
+            // TODO
+        }
+    }
+}
diff --git a/media/java/android/media/routeprovider/RouteInterfaceHandler.java b/media/java/android/media/routeprovider/RouteInterfaceHandler.java
new file mode 100644
index 0000000..9693dc6
--- /dev/null
+++ b/media/java/android/media/routeprovider/RouteInterfaceHandler.java
@@ -0,0 +1,245 @@
+/*
+ * Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.media.session.Route;
+import android.media.session.Session;
+import android.media.session.RouteInterface;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.ResultReceiver;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+/**
+ * Represents an interface that an application may use to send requests to a
+ * connected media route.
+ * <p>
+ * A {@link RouteProviderService} may expose multiple interfaces on a
+ * {@link RouteConnection} for a {@link Session} to interact with. A
+ * provider creates an interface with
+ * {@link RouteConnection#addRouteInterface(String)} to allow messages to be
+ * routed appropriately. Events are then sent through a specific interface and
+ * all commands being sent on the interface will be sent to any registered
+ * {@link CommandListener}s.
+ * <p>
+ * An interface instance can only be registered on one {@link RouteConnection}.
+ * To use the same interface on multiple connections a new instance must be
+ * created for each connection.
+ * <p>
+ * It is recommended you wrap this interface with a standard implementation to
+ * avoid errors, but for simple interfaces this class may be used directly. TODO
+ * add link to sample code.
+ */
+public final class RouteInterfaceHandler {
+    private static final String TAG = "RouteInterfaceHandler";
+
+    private final Object mLock = new Object();
+    private final RouteConnection mConnection;
+    private final String mName;
+
+    private ArrayList<MessageHandler> mListeners = new ArrayList<MessageHandler>();
+
+    /**
+     * Create a new RouteInterface for a given connection. This can be used to
+     * send events on the given interface and register listeners for commands
+     * from the connected session.
+     *
+     * @param connection The connection this interface sends events on
+     * @param ifaceName The name of this interface
+     * @hide
+     */
+    public RouteInterfaceHandler(RouteConnection connection, String ifaceName) {
+        if (connection == null) {
+            throw new IllegalArgumentException("connection may not be null");
+        }
+        if (TextUtils.isEmpty(ifaceName)) {
+            throw new IllegalArgumentException("ifaceName can not be empty");
+        }
+        mConnection = connection;
+        mName = ifaceName;
+    }
+
+    /**
+     * Send an event on this interface to the connected session.
+     *
+     * @param event The event to send
+     * @param extras Any extras for the event
+     */
+    public void sendEvent(String event, Bundle extras) {
+        mConnection.sendEvent(mName, event, extras);
+    }
+
+    /**
+     * Send a result from a command to the specified callback. The result codes
+     * in {@link RouteInterface} must be used. More information
+     * about the result, whether successful or an error, should be included in
+     * the extras.
+     *
+     * @param cb The callback to send the result to
+     * @param resultCode The result code for the call
+     * @param extras Any extras to include
+     */
+    public static void sendResult(ResultReceiver cb, int resultCode, Bundle extras) {
+        if (cb != null) {
+            cb.send(resultCode, extras);
+        }
+    }
+
+    /**
+     * Add a listener for this interface. If a handler is specified callbacks
+     * will be performed on the handler's thread, otherwise the callers thread
+     * will be used.
+     *
+     * @param listener The listener to receive calls on.
+     * @param handler The handler whose thread to post calls on or null.
+     */
+    public void addListener(CommandListener listener, Handler handler) {
+        if (listener == null) {
+            throw new IllegalArgumentException("listener may not be null");
+        }
+        Looper looper = handler != null ? handler.getLooper() : Looper.myLooper();
+        synchronized (mLock) {
+            if (findIndexOfListenerLocked(listener) != -1) {
+                Log.d(TAG, "Listener is already added, ignoring");
+                return;
+            }
+            mListeners.add(new MessageHandler(looper, listener));
+        }
+    }
+
+    /**
+     * Remove a listener from this interface.
+     *
+     * @param listener The listener to stop receiving commands on.
+     */
+    public void removeListener(CommandListener listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("listener may not be null");
+        }
+        synchronized (mLock) {
+            int index = findIndexOfListenerLocked(listener);
+            if (index != -1) {
+                mListeners.remove(index);
+            }
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public void onCommand(String command, Bundle args, ResultReceiver cb) {
+        synchronized (mLock) {
+            Command cmd = new Command(command, args, cb);
+            for (int i = mListeners.size() - 1; i >= 0; i--) {
+                mListeners.get(i).post(MessageHandler.MSG_COMMAND, cmd);
+            }
+        }
+    }
+
+    /**
+     * Get the interface name.
+     *
+     * @return The name of this interface
+     */
+    public String getName() {
+        return mName;
+    }
+
+    private int findIndexOfListenerLocked(CommandListener listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        for (int i = mListeners.size() - 1; i >= 0; i--) {
+            MessageHandler handler = mListeners.get(i);
+            if (listener == handler.mListener) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Handles commands sent to the interface.
+     * <p>
+     * Register an InterfaceListener using {@link #addListener}.
+     */
+    public abstract static class CommandListener {
+        /**
+         * This is called when a command is received that matches this
+         * interface. Commands are sent by a {@link Session} that is
+         * connected to the route this interface is registered with.
+         *
+         * @param iface The interface the command was received on.
+         * @param command The command or method to invoke.
+         * @param args Any args that were included with the command. May be
+         *            null.
+         * @param cb The callback provided to send a response on. May be null.
+         * @return true if the command was handled, false otherwise. If the
+         *         command was not handled an error will be sent automatically.
+         *         true may be returned if the command will be handled
+         *         asynchronously.
+         * @see Route
+         * @see Session
+         */
+        public abstract boolean onCommand(RouteInterfaceHandler iface, String command, Bundle args,
+                ResultReceiver cb);
+    }
+
+    private class MessageHandler extends Handler {
+        private static final int MSG_COMMAND = 1;
+
+        private final CommandListener mListener;
+
+        public MessageHandler(Looper looper, CommandListener listener) {
+            super(looper, null, true /* async */);
+            mListener = listener;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_COMMAND:
+                    Command cmd = (Command) msg.obj;
+                    if (!mListener.onCommand(RouteInterfaceHandler.this, cmd.command, cmd.args, cmd.cb)) {
+                        sendResult(cmd.cb, RouteInterface.RESULT_COMMAND_NOT_SUPPORTED,
+                                null);
+                    }
+                    break;
+            }
+        }
+
+        public void post(int what, Object obj) {
+            obtainMessage(what, obj).sendToTarget();
+        }
+    }
+
+    private final static class Command {
+        public final String command;
+        public final Bundle args;
+        public final ResultReceiver cb;
+
+        public Command(String command, Bundle args, ResultReceiver cb) {
+            this.command = command;
+            this.args = args;
+            this.cb = cb;
+        }
+    }
+}
diff --git a/media/java/android/media/routeprovider/RoutePlaybackControlsHandler.java b/media/java/android/media/routeprovider/RoutePlaybackControlsHandler.java
new file mode 100644
index 0000000..dcef79a
--- /dev/null
+++ b/media/java/android/media/routeprovider/RoutePlaybackControlsHandler.java
@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.media.session.RoutePlaybackControls;
+import android.media.session.RouteInterface;
+import android.media.session.PlaybackState;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
+import android.text.TextUtils;
+import android.util.Log;
+
+/**
+ * Standard wrapper for using playback controls over a {@link RouteInterfaceHandler}.
+ * This is the provider half of the interface. Sessions should use
+ * {@link RoutePlaybackControls} to interact with this interface.
+ */
+public final class RoutePlaybackControlsHandler {
+    private static final String TAG = "RoutePlaybackControls";
+
+    private final RouteInterfaceHandler mIface;
+
+    private RoutePlaybackControlsHandler(RouteInterfaceHandler iface) {
+        mIface = iface;
+    }
+
+    /**
+     * Add this interface to the specified route and return a handle for
+     * communicating on the interface.
+     *
+     * @param connection The connection to register this interface on.
+     * @return A handle for communicating on this interface.
+     */
+    public static RoutePlaybackControlsHandler addTo(RouteConnection connection) {
+        if (connection == null) {
+            throw new IllegalArgumentException("connection may not be null");
+        }
+        RouteInterfaceHandler iface = connection
+                .addRouteInterface(RoutePlaybackControls.NAME);
+
+        return new RoutePlaybackControlsHandler(iface);
+    }
+
+    /**
+     * Add a {@link Listener} to this interface. The listener will receive
+     * commands on the caller's thread.
+     *
+     * @param listener The listener to send commands to.
+     */
+    public void addListener(Listener listener) {
+        addListener(listener, null);
+    }
+
+    /**
+     * Add a {@link Listener} to this interface. The listener will receive
+     * updates on the handler's thread. If no handler is specified the caller's
+     * thread will be used instead.
+     *
+     * @param listener The listener to send commands to.
+     * @param handler The handler whose thread calls should be posted on. May be
+     *            null.
+     */
+    public void addListener(Listener listener, Handler handler) {
+        mIface.addListener(listener, handler);
+    }
+
+    /**
+     * Remove a {@link Listener} from this interface.
+     *
+     * @param listener The Listener to remove.
+     */
+    public void removeListener(Listener listener) {
+        mIface.removeListener(listener);
+    }
+
+    /**
+     * Publish the current playback state to the system and any controllers.
+     * Valid values are defined in {@link PlaybackState}. TODO create
+     * RoutePlaybackState.
+     *
+     * @param state
+     */
+    public void sendPlaybackChangeEvent(int state) {
+        Bundle extras = new Bundle();
+        extras.putInt(RoutePlaybackControls.KEY_VALUE1, state);
+        mIface.sendEvent(RoutePlaybackControls.EVENT_PLAYSTATE_CHANGE, extras);
+    }
+
+    /**
+     * Command handler for the RoutePlaybackControls interface. You can add a
+     * Listener to the interface using {@link #addListener}.
+     */
+    public static abstract class Listener extends RouteInterfaceHandler.CommandListener {
+
+        @Override
+        public final boolean onCommand(RouteInterfaceHandler iface, String method, Bundle extras,
+                ResultReceiver cb) {
+            if (RoutePlaybackControls.CMD_FAST_FORWARD.equals(method)) {
+                boolean success = fastForward();
+                // TODO specify type of error
+                RouteInterfaceHandler.sendResult(cb, success
+                        ? RouteInterface.RESULT_SUCCESS
+                        : RouteInterface.RESULT_ERROR, null);
+                return true;
+            } else if (RoutePlaybackControls.CMD_GET_CURRENT_POSITION.equals(method)) {
+                Bundle result = new Bundle();
+                result.putLong(RoutePlaybackControls.KEY_VALUE1, getCurrentPosition());
+                RouteInterfaceHandler.sendResult(cb, RouteInterface.RESULT_SUCCESS,
+                        result);
+                return true;
+            } else if (RoutePlaybackControls.CMD_GET_CAPABILITIES.equals(method)) {
+                Bundle result = new Bundle();
+                result.putLong(RoutePlaybackControls.KEY_VALUE1, getCapabilities());
+                RouteInterfaceHandler.sendResult(cb, RouteInterface.RESULT_SUCCESS,
+                        result);
+                return true;
+            } else if (RoutePlaybackControls.CMD_PLAY_NOW.equals(method)) {
+                playNow(extras.getString(RoutePlaybackControls.KEY_VALUE1, null), cb);
+                return true;
+            } else if (RoutePlaybackControls.CMD_RESUME.equals(method)) {
+                boolean success = resume();
+                RouteInterfaceHandler.sendResult(cb, success
+                        ? RouteInterface.RESULT_SUCCESS
+                        : RouteInterface.RESULT_ERROR, null);
+                return true;
+            } else if (RoutePlaybackControls.CMD_PAUSE.equals(method)) {
+                boolean success = pause();
+                RouteInterfaceHandler.sendResult(cb, success
+                        ? RouteInterface.RESULT_SUCCESS
+                        : RouteInterface.RESULT_ERROR, null);
+                return true;
+            } else {
+                // The command wasn't recognized
+            }
+            return false;
+        }
+
+        /**
+         * Override to handle fast forwarding.
+         *
+         * @return true if the request succeeded, false otherwise
+         */
+        public boolean fastForward() {
+            Log.w(TAG, "fastForward is not supported.");
+            return false;
+        }
+
+        /**
+         * Override to handle getting the current position of playback in
+         * millis.
+         *
+         * @return The current position in millis or -1
+         */
+        public long getCurrentPosition() {
+            Log.w(TAG, "getCurrentPosition is not supported");
+            return -1;
+        }
+
+        /**
+         * Override to handle getting the set of capabilities currently
+         * available.
+         *
+         * @return A bit mask of the supported capabilities
+         */
+        public long getCapabilities() {
+            Log.w(TAG, "getCapabilities is not supported");
+            return 0;
+        }
+
+        /**
+         * Override to handle play now requests.
+         *
+         * @param content The uri of the item to play.
+         * @param cb The callback to send the result to.
+         */
+        public void playNow(String content, ResultReceiver cb) {
+            Log.w(TAG, "playNow is not supported");
+            if (cb != null) {
+                // We do this directly since we don't have a reference to the
+                // iface
+                cb.send(RouteInterface.RESULT_COMMAND_NOT_SUPPORTED, null);
+            }
+        }
+
+        /**
+         * Override to handle resume requests. Return true if the call was
+         * handled, even if it was a no-op.
+         *
+         * @return true if the call was handled.
+         */
+        public boolean resume() {
+            Log.w(TAG, "resume is not supported");
+            return false;
+        }
+
+        /**
+         * Override to handle pause requests. Return true if the call was
+         * handled, even if it was a no-op.
+         *
+         * @return true if the call was handled.
+         */
+        public boolean pause() {
+            Log.w(TAG, "pause is not supported");
+            return false;
+        }
+    }
+}
diff --git a/media/java/android/media/routeprovider/RouteProviderService.java b/media/java/android/media/routeprovider/RouteProviderService.java
new file mode 100644
index 0000000..6ebfb5b
--- /dev/null
+++ b/media/java/android/media/routeprovider/RouteProviderService.java
@@ -0,0 +1,227 @@
+/*
+ * Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.app.Service;
+import android.content.Intent;
+import android.media.routeprovider.IRouteProvider;
+import android.media.routeprovider.IRouteProviderCallback;
+import android.media.session.RouteEvent;
+import android.media.session.RouteInfo;
+import android.media.session.RouteOptions;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Base class for defining a route provider service.
+ * <p>
+ * A route provider offers media routes which represent destinations to which
+ * applications may connect, control, and send content. This provides a means
+ * for Android applications to interact with a variety of media streaming
+ * devices such as speakers or television sets.
+ * <p>
+ * The system will bind to your provider when an active app is interested in
+ * routes that may be discovered through your provider. After binding, the
+ * system will send updates on which routes to discover through
+ * {@link #updateDiscoveryRequests(List)}. The system will call
+ * {@link #getMatchingRoutes(List)} with a subset of filters when a route is
+ * needed for a specific app.
+ * <p>
+ * TODO add documentation for how the sytem knows an app is interested. Maybe
+ * interface declarations in the manifest.
+ * <p>
+ * The system will only start a provider when an app may discover routes through
+ * it. If your service needs to run at other times you are responsible for
+ * managing its lifecycle.
+ * <p>
+ * Declare your route provider service in your application manifest like this:
+ * <p>
+ *
+ * <pre>
+ *   &lt;service android:name=".MyRouteProviderService"
+ *           android:label="@string/my_route_provider_service">
+ *       &lt;intent-filter>
+ *           &lt;action android:name="com.android.media.session.MediaRouteProvider" />
+ *       &lt;/intent-filter>
+ *   &lt;/service>
+ * </pre>
+ */
+public abstract class RouteProviderService extends Service {
+    private static final String TAG = "RouteProvider";
+    /**
+     * A service that implements a RouteProvider must declare that it handles
+     * this action in its AndroidManifest.
+     */
+    public static final String SERVICE_INTERFACE =
+            "com.android.media.session.MediaRouteProvider";
+
+    /**
+     * @hide
+     */
+    public static final String KEY_ROUTES = "routes";
+    /**
+     * @hide
+     */
+    public static final String KEY_CONNECTION = "connection";
+    /**
+     * @hide
+     */
+    public static final int RESULT_FAILURE = -1;
+    /**
+     * @hide
+     */
+    public static final int RESULT_SUCCESS = 0;
+
+    // The system's callback once it has bound to the service
+    private IRouteProviderCallback mCb;
+
+    /**
+     * If your service overrides onBind it must return super.onBind() in
+     * response to the {@link #SERVICE_INTERFACE} action.
+     */
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (intent != null && RouteProviderService.SERVICE_INTERFACE.equals(intent.getAction())) {
+            return mBinder;
+        }
+        return null;
+    }
+
+    /**
+     * Disconnect the specified RouteConnection. The system will stop sending
+     * commands to this connection.
+     *
+     * @param connection The connection to disconnect.
+     * @hide
+     */
+    public final void disconnect(RouteConnection connection) {
+        if (mCb != null) {
+            try {
+                mCb.onConnectionTerminated(connection.getBinder());
+            } catch (RemoteException e) {
+                Log.wtf(TAG, "Error in disconnect.", e);
+            }
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public final void sendRouteEvent(RouteEvent event) {
+        if (mCb != null) {
+            try {
+                mCb.onRouteEvent(event);
+            } catch (RemoteException e) {
+                Log.wtf(TAG, "Unable to send MediaRouteEvent to system", e);
+            }
+        }
+    }
+
+    /**
+     * Override to handle updates to the routes that are of interest. Each
+     * {@link RouteRequest} will specify if it is an active or passive request.
+     * Route discovery may perform more aggressive discovery on behalf of active
+     * requests but should use low power discovery methods otherwise.
+     * <p>
+     * A single app may have more than one request. Your provider is responsible
+     * for deciding the set of features that are important for discovery given
+     * the set of requests. If your provider only has one method of discovery it
+     * may simply verify that one or more requests are valid before starting
+     * discovery.
+     *
+     * @param requests The route requests that are currently relevant.
+     */
+    public void updateDiscoveryRequests(List<RouteRequest> requests) {
+    }
+
+    /**
+     * Return a list of matching routes for the given set of requests. Returning
+     * null or an empty list indicates there are no matches. A route is
+     * considered matching if it supports one or more of the
+     * {@link RouteOptions} specified. Each returned {@link RouteInfo}
+     * should include all the requested connections that it supports.
+     *
+     * @param options The set of requests for routes
+     * @return The routes that this caller may connect to using one or more of
+     *         the route options.
+     */
+    public abstract List<RouteInfo> getMatchingRoutes(List<RouteRequest> options);
+
+    /**
+     * Handle a request to connect to a specific route with a specific request.
+     * The {@link RouteConnection} must be fully defined before being returned,
+     * though the actual connection to the route may be performed in the
+     * background.
+     *
+     * @param route The route to connect to
+     * @param request The connection request parameters
+     * @return A MediaRouteConnection representing the connection to the route
+     */
+    public abstract RouteConnection connect(RouteInfo route, RouteRequest request);
+
+    private IRouteProvider.Stub mBinder = new IRouteProvider.Stub() {
+
+        @Override
+        public void registerCallback(IRouteProviderCallback cb) throws RemoteException {
+            mCb = cb;
+        }
+
+        @Override
+        public void unregisterCallback(IRouteProviderCallback cb) throws RemoteException {
+            mCb = null;
+        }
+
+        @Override
+        public void updateDiscoveryRequests(List<RouteRequest> requests)
+                throws RemoteException {
+            RouteProviderService.this.updateDiscoveryRequests(requests);
+        }
+
+        @Override
+        public void getAvailableRoutes(List<RouteRequest> requests, ResultReceiver cb)
+                throws RemoteException {
+            List<RouteInfo> routes = RouteProviderService.this.getMatchingRoutes(requests);
+            ArrayList<RouteInfo> routesArray;
+            if (routes instanceof ArrayList) {
+                routesArray = (ArrayList<RouteInfo>) routes;
+            } else {
+                routesArray = new ArrayList<RouteInfo>(routes);
+            }
+            Bundle resultData = new Bundle();
+            resultData.putParcelableArrayList(KEY_ROUTES, routesArray);
+            cb.send(routes == null ? RESULT_FAILURE : RESULT_SUCCESS, resultData);
+        }
+
+        @Override
+        public void connect(RouteInfo route, RouteRequest request, ResultReceiver cb)
+                throws RemoteException {
+            RouteConnection connection = RouteProviderService.this.connect(route, request);
+            Bundle resultData = new Bundle();
+            if (connection != null) {
+                connection.publish();
+                resultData.putBinder(KEY_CONNECTION, connection.getBinder());
+            }
+
+            cb.send(connection == null ? RESULT_FAILURE : RESULT_SUCCESS, resultData);
+        }
+    };
+}
diff --git a/media/java/android/media/routeprovider/RouteRequest.aidl b/media/java/android/media/routeprovider/RouteRequest.aidl
new file mode 100644
index 0000000..7bc5722
--- /dev/null
+++ b/media/java/android/media/routeprovider/RouteRequest.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.routeprovider;
+
+parcelable RouteRequest;
diff --git a/media/java/android/media/routeprovider/RouteRequest.java b/media/java/android/media/routeprovider/RouteRequest.java
new file mode 100644
index 0000000..68475c0
--- /dev/null
+++ b/media/java/android/media/routeprovider/RouteRequest.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2014 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 android.media.routeprovider;
+
+import android.media.session.RouteOptions;
+import android.media.session.SessionInfo;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.io.PrintWriter;
+
+/**
+ * A request to connect or discover routes with certain capabilities.
+ * <p>
+ * Passed to a {@link RouteProviderService} when a request for discovery or to
+ * connect to a route is made. This identifies the app making the request and
+ * provides the full set of connection parameters they would like to use for a
+ * connection. An app that can connect in multiple ways will be represented by
+ * multiple requests.
+ */
+public final class RouteRequest implements Parcelable {
+    private final SessionInfo mSessionInfo;
+    private final RouteOptions mOptions;
+    private final boolean mActive;
+
+    /**
+     * @hide
+     */
+    public RouteRequest(SessionInfo info, RouteOptions connRequest,
+            boolean active) {
+        mSessionInfo = info;
+        mOptions = connRequest;
+        mActive = active;
+    }
+
+    private RouteRequest(Parcel in) {
+        mSessionInfo = SessionInfo.CREATOR.createFromParcel(in);
+        mOptions = RouteOptions.CREATOR.createFromParcel(in);
+        mActive = in.readInt() != 0;
+    }
+
+    /**
+     * Get information about the session making the request.
+     *
+     * @return Info on the session making the request
+     */
+    public SessionInfo getSessionInfo() {
+        return mSessionInfo;
+    }
+
+    /**
+     * Get the connection options, which includes the interfaces and other
+     * connection params the session wants to use with a route.
+     *
+     * @return The connection options
+     */
+    public RouteOptions getConnectionOptions() {
+        return mOptions;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder bob = new StringBuilder();
+        bob.append("RouteRequest {");
+        bob.append("active=").append(mActive);
+        bob.append(", info=").append(mSessionInfo.toString());
+        bob.append(", options=").append(mOptions.toString());
+        bob.append("}");
+        return bob.toString();
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        mSessionInfo.writeToParcel(dest, flags);
+        mOptions.writeToParcel(dest, flags);
+        dest.writeInt(mActive ? 1 : 0);
+    }
+
+    public static final Parcelable.Creator<RouteRequest> CREATOR
+            = new Parcelable.Creator<RouteRequest>() {
+        @Override
+        public RouteRequest createFromParcel(Parcel in) {
+            return new RouteRequest(in);
+        }
+
+        @Override
+        public RouteRequest[] newArray(int size) {
+            return new RouteRequest[size];
+        }
+    };
+}
diff --git a/media/java/android/media/session/ISession.aidl b/media/java/android/media/session/ISession.aidl
new file mode 100644
index 0000000..ca77f04
--- /dev/null
+++ b/media/java/android/media/session/ISession.aidl
@@ -0,0 +1,49 @@
+/* Copyright (C) 2014 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 android.media.session;
+
+import android.media.session.ISessionController;
+import android.media.session.MediaMetadata;
+import android.media.session.RouteOptions;
+import android.media.session.RouteCommand;
+import android.media.session.RouteInfo;
+import android.media.session.PlaybackState;
+import android.os.Bundle;
+import android.os.ResultReceiver;
+
+/**
+ * Interface to a MediaSession in the system.
+ * @hide
+ */
+interface ISession {
+    void sendEvent(String event, in Bundle data);
+    ISessionController getController();
+    void setTransportPerformerEnabled();
+    void publish();
+    void destroy();
+
+    // These commands are for setting up and communicating with routes
+    // Returns true if the route was set for this session
+    boolean setRoute(in RouteInfo route);
+    void setRouteOptions(in List<RouteOptions> options);
+    void connectToRoute(in RouteInfo route, in RouteOptions options);
+    void sendRouteCommand(in RouteCommand event, in ResultReceiver cb);
+
+    // These commands are for the TransportPerformer
+    void setMetadata(in MediaMetadata metadata);
+    void setPlaybackState(in PlaybackState state);
+    void setRatingType(int type);
+}
\ No newline at end of file
diff --git a/media/java/android/media/session/ISessionCallback.aidl b/media/java/android/media/session/ISessionCallback.aidl
new file mode 100644
index 0000000..f04cbcc
--- /dev/null
+++ b/media/java/android/media/session/ISessionCallback.aidl
@@ -0,0 +1,47 @@
+/* Copyright (C) 2014 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 android.media.session;
+
+import android.media.Rating;
+import android.media.session.RouteEvent;
+import android.media.session.RouteInfo;
+import android.media.session.RouteOptions;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.ResultReceiver;
+
+/**
+ * @hide
+ */
+oneway interface ISessionCallback {
+    void onCommand(String command, in Bundle extras, in ResultReceiver cb);
+    void onMediaButton(in Intent mediaButtonIntent);
+    void onRequestRouteChange(in RouteInfo route);
+    void onRouteConnected(in RouteInfo route, in RouteOptions options);
+    void onRouteStateChange(int state);
+    void onRouteEvent(in RouteEvent event);
+
+    // These callbacks are for the TransportPerformer
+    void onPlay();
+    void onPause();
+    void onStop();
+    void onNext();
+    void onPrevious();
+    void onFastForward();
+    void onRewind();
+    void onSeekTo(long pos);
+    void onRate(in Rating rating);
+}
\ No newline at end of file
diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl
new file mode 100644
index 0000000..e2e046f
--- /dev/null
+++ b/media/java/android/media/session/ISessionController.aidl
@@ -0,0 +1,52 @@
+/* Copyright (C) 2014 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 android.media.session;
+
+import android.content.Intent;
+import android.media.Rating;
+import android.media.session.ISessionControllerCallback;
+import android.media.session.MediaMetadata;
+import android.media.session.PlaybackState;
+import android.os.Bundle;
+import android.os.ResultReceiver;
+import android.view.KeyEvent;
+
+/**
+ * Interface to a MediaSession in the system.
+ * @hide
+ */
+interface ISessionController {
+    void sendCommand(String command, in Bundle extras, in ResultReceiver cb);
+    void sendMediaButton(in KeyEvent mediaButton);
+    void registerCallbackListener(in ISessionControllerCallback cb);
+    void unregisterCallbackListener(in ISessionControllerCallback cb);
+    boolean isTransportControlEnabled();
+    void showRoutePicker();
+
+    // These commands are for the TransportController
+    void play();
+    void pause();
+    void stop();
+    void next();
+    void previous();
+    void fastForward();
+    void rewind();
+    void seekTo(long pos);
+    void rate(in Rating rating);
+    MediaMetadata getMetadata();
+    PlaybackState getPlaybackState();
+    int getRatingType();
+}
\ No newline at end of file
diff --git a/media/java/android/media/session/ISessionControllerCallback.aidl b/media/java/android/media/session/ISessionControllerCallback.aidl
new file mode 100644
index 0000000..bc1ae05
--- /dev/null
+++ b/media/java/android/media/session/ISessionControllerCallback.aidl
@@ -0,0 +1,33 @@
+/* Copyright (C) 2014 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 android.media.session;
+
+import android.media.session.MediaMetadata;
+import android.media.session.RouteInfo;
+import android.media.session.PlaybackState;
+import android.os.Bundle;
+
+/**
+ * @hide
+ */
+oneway interface ISessionControllerCallback {
+    void onEvent(String event, in Bundle extras);
+    void onRouteChanged(in RouteInfo route);
+
+    // These callbacks are for the TransportController
+    void onPlaybackStateChanged(in PlaybackState state);
+    void onMetadataChanged(in MediaMetadata metadata);
+}
\ No newline at end of file
diff --git a/media/java/android/media/session/ISessionManager.aidl b/media/java/android/media/session/ISessionManager.aidl
new file mode 100644
index 0000000..84b9a0f
--- /dev/null
+++ b/media/java/android/media/session/ISessionManager.aidl
@@ -0,0 +1,28 @@
+/* Copyright (C) 2014 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 android.media.session;
+
+import android.media.session.ISession;
+import android.media.session.ISessionCallback;
+import android.os.Bundle;
+
+/**
+ * Interface to the MediaSessionManagerService
+ * @hide
+ */
+interface ISessionManager {
+    ISession createSession(String packageName, in ISessionCallback cb, String tag);
+}
\ No newline at end of file
diff --git a/media/java/android/media/session/MediaMetadata.aidl b/media/java/android/media/session/MediaMetadata.aidl
new file mode 100644
index 0000000..4431d9d
--- /dev/null
+++ b/media/java/android/media/session/MediaMetadata.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.session;
+
+parcelable MediaMetadata;
diff --git a/media/java/android/media/session/MediaMetadata.java b/media/java/android/media/session/MediaMetadata.java
new file mode 100644
index 0000000..56bdf68
--- /dev/null
+++ b/media/java/android/media/session/MediaMetadata.java
@@ -0,0 +1,466 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.graphics.Bitmap;
+import android.media.MediaMetadataEditor;
+import android.media.MediaMetadataRetriever;
+import android.media.Rating;
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.ArrayMap;
+import android.util.Log;
+import android.util.SparseArray;
+
+/**
+ * Contains metadata about an item, such as the title, artist, etc.
+ */
+public final class MediaMetadata implements Parcelable {
+    private static final String TAG = "MediaMetadata";
+
+    /**
+     * The title of the media.
+     */
+    public static final String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
+
+    /**
+     * The artist of the media.
+     */
+    public static final String METADATA_KEY_ARTIST = "android.media.metadata.ARTIST";
+
+    /**
+     * The duration of the media in ms. A negative duration indicates that the
+     * duration is unknown (or infinite).
+     */
+    public static final String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
+
+    /**
+     * The album title for the media.
+     */
+    public static final String METADATA_KEY_ALBUM = "android.media.metadata.ALBUM";
+
+    /**
+     * The author of the media.
+     */
+    public static final String METADATA_KEY_AUTHOR = "android.media.metadata.AUTHOR";
+
+    /**
+     * The writer of the media.
+     */
+    public static final String METADATA_KEY_WRITER = "android.media.metadata.WRITER";
+
+    /**
+     * The composer of the media.
+     */
+    public static final String METADATA_KEY_COMPOSER = "android.media.metadata.COMPOSER";
+
+    /**
+     * The compilation status of the media.
+     */
+    public static final String METADATA_KEY_COMPILATION = "android.media.metadata.COMPILATION";
+
+    /**
+     * The date the media was created or published as TODO determine format.
+     */
+    public static final String METADATA_KEY_DATE = "android.media.metadata.DATE";
+
+    /**
+     * The year the media was created or published as a long.
+     */
+    public static final String METADATA_KEY_YEAR = "android.media.metadata.YEAR";
+
+    /**
+     * The genre of the media.
+     */
+    public static final String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
+
+    /**
+     * The track number for the media.
+     */
+    public static final String METADATA_KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
+
+    /**
+     * The number of tracks in the media's original source.
+     */
+    public static final String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
+
+    /**
+     * The disc number for the media's original source.
+     */
+    public static final String METADATA_KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
+
+    /**
+     * The artist for the album of the media's original source.
+     */
+    public static final String METADATA_KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
+
+    /**
+     * The artwork for the media as a {@link Bitmap}.
+     */
+    public static final String METADATA_KEY_ART = "android.media.metadata.ART";
+
+    /**
+     * The artwork for the media as a Uri style String.
+     */
+    public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";
+
+    /**
+     * The artwork for the album of the media's original source as a
+     * {@link Bitmap}.
+     */
+    public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";
+
+    /**
+     * The artwork for the album of the media's original source as a Uri style
+     * String.
+     */
+    public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";
+
+    /**
+     * The user's rating for the media.
+     *
+     * @see Rating
+     */
+    public static final String METADATA_KEY_USER_RATING = "android.media.metadata.USER_RATING";
+
+    /**
+     * The overall rating for the media.
+     *
+     * @see Rating
+     */
+    public static final String METADATA_KEY_RATING = "android.media.metadata.RATING";
+
+    private static final int METADATA_TYPE_INVALID = -1;
+    private static final int METADATA_TYPE_LONG = 0;
+    private static final int METADATA_TYPE_STRING = 1;
+    private static final int METADATA_TYPE_BITMAP = 2;
+    private static final int METADATA_TYPE_RATING = 3;
+    private static final ArrayMap<String, Integer> METADATA_KEYS_TYPE;
+
+    static {
+        METADATA_KEYS_TYPE = new ArrayMap<String, Integer>();
+        METADATA_KEYS_TYPE.put(METADATA_KEY_TITLE, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_ARTIST, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_DURATION, METADATA_TYPE_LONG);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_ALBUM, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_AUTHOR, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_WRITER, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_COMPOSER, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_COMPILATION, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_DATE, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_YEAR, METADATA_TYPE_LONG);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_GENRE, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_TRACK_NUMBER, METADATA_TYPE_LONG);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_NUM_TRACKS, METADATA_TYPE_LONG);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_DISC_NUMBER, METADATA_TYPE_LONG);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_ALBUM_ARTIST, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_ART, METADATA_TYPE_BITMAP);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_ART_URI, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_ALBUM_ART, METADATA_TYPE_BITMAP);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_ALBUM_ART_URI, METADATA_TYPE_STRING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_USER_RATING, METADATA_TYPE_RATING);
+        METADATA_KEYS_TYPE.put(METADATA_KEY_RATING, METADATA_TYPE_RATING);
+    }
+
+    private static final SparseArray<String> EDITOR_KEY_MAPPING;
+
+    static {
+        EDITOR_KEY_MAPPING = new SparseArray<String>();
+        EDITOR_KEY_MAPPING.put(MediaMetadataEditor.BITMAP_KEY_ARTWORK, METADATA_KEY_ART);
+        EDITOR_KEY_MAPPING.put(MediaMetadataEditor.RATING_KEY_BY_OTHERS, METADATA_KEY_RATING);
+        EDITOR_KEY_MAPPING.put(MediaMetadataEditor.RATING_KEY_BY_USER, METADATA_KEY_USER_RATING);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_ALBUM, METADATA_KEY_ALBUM);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_ALBUMARTIST,
+                METADATA_KEY_ALBUM_ARTIST);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_ARTIST, METADATA_KEY_ARTIST);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_AUTHOR, METADATA_KEY_AUTHOR);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_CD_TRACK_NUMBER,
+                METADATA_KEY_TRACK_NUMBER);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_COMPOSER, METADATA_KEY_COMPOSER);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_COMPILATION,
+                METADATA_KEY_COMPILATION);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_DATE, METADATA_KEY_DATE);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_DISC_NUMBER,
+                METADATA_KEY_DISC_NUMBER);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_DURATION, METADATA_KEY_DURATION);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_GENRE, METADATA_KEY_GENRE);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_NUM_TRACKS,
+                METADATA_KEY_NUM_TRACKS);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_TITLE, METADATA_KEY_TITLE);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_WRITER, METADATA_KEY_WRITER);
+        EDITOR_KEY_MAPPING.put(MediaMetadataRetriever.METADATA_KEY_YEAR, METADATA_KEY_YEAR);
+    }
+
+    private final Bundle mBundle;
+
+    private MediaMetadata(Bundle bundle) {
+        mBundle = new Bundle(bundle);
+    }
+
+    private MediaMetadata(Parcel in) {
+        mBundle = in.readBundle();
+    }
+
+    /**
+     * Returns true if the given key is contained in the metadata
+     *
+     * @param key a String key
+     * @return true if the key exists in this metadata, false otherwise
+     */
+    public boolean containsKey(String key) {
+        return mBundle.containsKey(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or null if no mapping of
+     * the desired type exists for the given key or a null value is explicitly
+     * associated with the key.
+     *
+     * @param key The key the value is stored under
+     * @return a String value, or null
+     */
+    public String getString(String key) {
+        return mBundle.getString(key);
+    }
+
+    /**
+     * Returns the value associated with the given key, or 0L if no long exists
+     * for the given key.
+     *
+     * @param key The key the value is stored under
+     * @return a long value
+     */
+    public long getLong(String key) {
+        return mBundle.getLong(key, 0);
+    }
+
+    /**
+     * Return a {@link Rating} for the given key or null if no rating exists for
+     * the given key.
+     *
+     * @param key The key the value is stored under
+     * @return A {@link Rating} or null
+     */
+    public Rating getRating(String key) {
+        Rating rating = null;
+        try {
+            rating = mBundle.getParcelable(key);
+        } catch (Exception e) {
+            // ignore, value was not a bitmap
+            Log.d(TAG, "Failed to retrieve a key as Rating.", e);
+        }
+        return rating;
+    }
+
+    /**
+     * Return a {@link Bitmap} for the given key or null if no bitmap exists for
+     * the given key.
+     *
+     * @param key The key the value is stored under
+     * @return A {@link Bitmap} or null
+     */
+    public Bitmap getBitmap(String key) {
+        Bitmap bmp = null;
+        try {
+            bmp = mBundle.getParcelable(key);
+        } catch (Exception e) {
+            // ignore, value was not a bitmap
+            Log.d(TAG, "Failed to retrieve a key as Bitmap.", e);
+        }
+        return bmp;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeBundle(mBundle);
+    }
+
+    /**
+     * Helper for getting the String key used by {@link MediaMetadata} from the
+     * integer key that {@link MediaMetadataEditor} uses.
+     *
+     * @param editorKey The key used by the editor
+     * @return The key used by this class or null if no mapping exists
+     * @hide
+     */
+    public static String getKeyFromMetadataEditorKey(int editorKey) {
+        return EDITOR_KEY_MAPPING.get(editorKey, null);
+    }
+
+    public static final Parcelable.Creator<MediaMetadata> CREATOR
+            = new Parcelable.Creator<MediaMetadata>() {
+                @Override
+                public MediaMetadata createFromParcel(Parcel in) {
+                    return new MediaMetadata(in);
+                }
+
+                @Override
+                public MediaMetadata[] newArray(int size) {
+                    return new MediaMetadata[size];
+                }
+            };
+
+    /**
+     * Use to build MediaMetadata objects. The system defined metadata keys must
+     * use the appropriate data type.
+     */
+    public static final class Builder {
+        private final Bundle mBundle;
+
+        /**
+         * Create an empty Builder. Any field that should be included in the
+         * {@link MediaMetadata} must be added.
+         */
+        public Builder() {
+            mBundle = new Bundle();
+        }
+
+        /**
+         * Create a Builder using a {@link MediaMetadata} instance to set the
+         * initial values. All fields in the source metadata will be included in
+         * the new metadata. Fields can be overwritten by adding the same key.
+         *
+         * @param source
+         */
+        public Builder(MediaMetadata source) {
+            mBundle = new Bundle(source.mBundle);
+        }
+
+        /**
+         * Put a String value into the metadata. Custom keys may be used, but if
+         * the METADATA_KEYs defined in this class are used they may only be one
+         * of the following:
+         * <ul>
+         * <li>{@link #METADATA_KEY_TITLE}</li>
+         * <li>{@link #METADATA_KEY_ARTIST}</li>
+         * <li>{@link #METADATA_KEY_ALBUM}</li>
+         * <li>{@link #METADATA_KEY_AUTHOR}</li>
+         * <li>{@link #METADATA_KEY_WRITER}</li>
+         * <li>{@link #METADATA_KEY_COMPOSER}</li>
+         * <li>{@link #METADATA_KEY_DATE}</li>
+         * <li>{@link #METADATA_KEY_GENRE}</li>
+         * <li>{@link #METADATA_KEY_ALBUM_ARTIST}</li>
+         * <li>{@link #METADATA_KEY_ART_URI}</li>
+         * <li>{@link #METADATA_KEY_ALBUM_ART_URI}</li>
+         * </ul>
+         *
+         * @param key The key for referencing this value
+         * @param value The String value to store
+         * @return The Builder to allow chaining
+         */
+        public Builder putString(String key, String value) {
+            if (METADATA_KEYS_TYPE.containsKey(key)) {
+                if (METADATA_KEYS_TYPE.get(key) != METADATA_TYPE_STRING) {
+                    throw new IllegalArgumentException("The " + key
+                            + " key cannot be used to put a String");
+                }
+            }
+            mBundle.putString(key, value);
+            return this;
+        }
+
+        /**
+         * Put a long value into the metadata. Custom keys may be used, but if
+         * the METADATA_KEYs defined in this class are used they may only be one
+         * of the following:
+         * <ul>
+         * <li>{@link #METADATA_KEY_DURATION}</li>
+         * <li>{@link #METADATA_KEY_TRACK_NUMBER}</li>
+         * <li>{@link #METADATA_KEY_NUM_TRACKS}</li>
+         * <li>{@link #METADATA_KEY_DISC_NUMBER}</li>
+         * <li>{@link #METADATA_KEY_YEAR}</li>
+         * </ul>
+         *
+         * @param key The key for referencing this value
+         * @param value The String value to store
+         * @return The Builder to allow chaining
+         */
+        public Builder putLong(String key, long value) {
+            if (METADATA_KEYS_TYPE.containsKey(key)) {
+                if (METADATA_KEYS_TYPE.get(key) != METADATA_TYPE_LONG) {
+                    throw new IllegalArgumentException("The " + key
+                            + " key cannot be used to put a long");
+                }
+            }
+            mBundle.putLong(key, value);
+            return this;
+        }
+
+        /**
+         * Put a {@link Rating} into the metadata. Custom keys may be used, but
+         * if the METADATA_KEYs defined in this class are used they may only be
+         * one of the following:
+         * <ul>
+         * <li>{@link #METADATA_KEY_RATING}</li>
+         * <li>{@link #METADATA_KEY_USER_RATING}</li>
+         * </ul>
+         *
+         * @param key The key for referencing this value
+         * @param value The String value to store
+         * @return The Builder to allow chaining
+         */
+        public Builder putRating(String key, Rating value) {
+            if (METADATA_KEYS_TYPE.containsKey(key)) {
+                if (METADATA_KEYS_TYPE.get(key) != METADATA_TYPE_RATING) {
+                    throw new IllegalArgumentException("The " + key
+                            + " key cannot be used to put a Rating");
+                }
+            }
+            mBundle.putParcelable(key, value);
+            return this;
+        }
+
+        /**
+         * Put a {@link Bitmap} into the metadata. Custom keys may be used, but
+         * if the METADATA_KEYs defined in this class are used they may only be
+         * one of the following:
+         * <ul>
+         * <li>{@link #METADATA_KEY_ART}</li>
+         * <li>{@link #METADATA_KEY_ALBUM_ART}</li>
+         * </ul>
+         *
+         * @param key The key for referencing this value
+         * @param value The Bitmap to store
+         * @return The Builder to allow chaining
+         */
+        public Builder putBitmap(String key, Bitmap value) {
+            if (METADATA_KEYS_TYPE.containsKey(key)) {
+                if (METADATA_KEYS_TYPE.get(key) != METADATA_TYPE_BITMAP) {
+                    throw new IllegalArgumentException("The " + key
+                            + " key cannot be used to put a Bitmap");
+                }
+            }
+            mBundle.putParcelable(key, value);
+            return this;
+        }
+
+        /**
+         * Creates a {@link MediaMetadata} instance with the specified fields.
+         *
+         * @return The new MediaMetadata instance
+         */
+        public MediaMetadata build() {
+            return new MediaMetadata(mBundle);
+        }
+    }
+
+}
diff --git a/media/java/android/media/session/MediaSessionLegacyHelper.java b/media/java/android/media/session/MediaSessionLegacyHelper.java
new file mode 100644
index 0000000..4ee67d1
--- /dev/null
+++ b/media/java/android/media/session/MediaSessionLegacyHelper.java
@@ -0,0 +1,213 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.app.PendingIntent;
+import android.app.PendingIntent.CanceledException;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Handler;
+import android.os.Looper;
+import android.util.ArrayMap;
+import android.util.Log;
+import android.view.KeyEvent;
+
+/**
+ * Helper for connecting existing APIs up to the new session APIs. This can be
+ * used by RCC, AudioFocus, etc. to create a single session that translates to
+ * all those components.
+ *
+ * @hide
+ */
+public class MediaSessionLegacyHelper {
+    private static final String TAG = "MediaSessionHelper";
+
+    private static final Object sLock = new Object();
+    private static MediaSessionLegacyHelper sInstance;
+
+    private SessionManager mSessionManager;
+    private Handler mHandler = new Handler(Looper.getMainLooper());
+    // The legacy APIs use PendingIntents to register/unregister media button
+    // receivers and these are associated with RCC.
+    private ArrayMap<PendingIntent, SessionHolder> mSessions = new ArrayMap<PendingIntent, SessionHolder>();
+
+    private MediaSessionLegacyHelper(Context context) {
+        mSessionManager = (SessionManager) context
+                .getSystemService(Context.MEDIA_SESSION_SERVICE);
+    }
+
+    public static MediaSessionLegacyHelper getHelper(Context context) {
+        synchronized (sLock) {
+            if (sInstance == null) {
+                sInstance = new MediaSessionLegacyHelper(context);
+            }
+        }
+        return sInstance;
+    }
+
+    public Session getSession(PendingIntent pi) {
+        SessionHolder holder = mSessions.get(pi);
+        return holder == null ? null : holder.mSession;
+    }
+
+    public void addRccListener(PendingIntent pi, TransportPerformer.Listener listener) {
+
+        SessionHolder holder = getHolder(pi, true);
+        TransportPerformer performer = holder.mSession.getTransportPerformer();
+        if (holder.mRccListener != null) {
+            if (holder.mRccListener == listener) {
+                // This is already the registered listener, ignore
+                return;
+            }
+            // Otherwise it changed so we need to switch to the new one
+            performer.removeListener(holder.mRccListener);
+        }
+        performer.addListener(listener, mHandler);
+        holder.mRccListener = listener;
+        holder.update();
+    }
+
+    public void removeRccListener(PendingIntent pi) {
+        SessionHolder holder = getHolder(pi, false);
+        if (holder != null && holder.mRccListener != null) {
+            holder.mSession.getTransportPerformer().removeListener(holder.mRccListener);
+            holder.mRccListener = null;
+            holder.update();
+        }
+    }
+
+    public void addMediaButtonListener(PendingIntent pi,
+            Context context) {
+        SessionHolder holder = getHolder(pi, true);
+        if (holder.mMediaButtonListener != null) {
+            // Already have this listener registered
+            return;
+        }
+        holder.mMediaButtonListener = new MediaButtonListener(pi, context);
+        holder.mSession.getTransportPerformer().addListener(holder.mMediaButtonListener, mHandler);
+    }
+
+    public void removeMediaButtonListener(PendingIntent pi) {
+        SessionHolder holder = getHolder(pi, false);
+        if (holder != null && holder.mMediaButtonListener != null) {
+            holder.mSession.getTransportPerformer().removeListener(holder.mMediaButtonListener);
+            holder.update();
+        }
+    }
+
+    private SessionHolder getHolder(PendingIntent pi, boolean createIfMissing) {
+        SessionHolder holder = mSessions.get(pi);
+        if (holder == null && createIfMissing) {
+            Session session = mSessionManager.createSession(TAG);
+            session.setTransportPerformerEnabled();
+            session.publish();
+            holder = new SessionHolder(session, pi);
+            mSessions.put(pi, holder);
+        }
+        return holder;
+    }
+
+    public static class MediaButtonListener extends TransportPerformer.Listener {
+        private final PendingIntent mPendingIntent;
+        private final Context mContext;
+
+        public MediaButtonListener(PendingIntent pi, Context context) {
+            mPendingIntent = pi;
+            mContext = context;
+        }
+
+        @Override
+        public void onPlay() {
+            sendKeyEvent(KeyEvent.KEYCODE_MEDIA_PLAY);
+        }
+
+        @Override
+        public void onPause() {
+            sendKeyEvent(KeyEvent.KEYCODE_MEDIA_PAUSE);
+        }
+
+        @Override
+        public void onNext() {
+            sendKeyEvent(KeyEvent.KEYCODE_MEDIA_NEXT);
+        }
+
+        @Override
+        public void onPrevious() {
+            sendKeyEvent(KeyEvent.KEYCODE_MEDIA_PREVIOUS);
+        }
+
+        @Override
+        public void onFastForward() {
+            sendKeyEvent(KeyEvent.KEYCODE_MEDIA_FAST_FORWARD);
+        }
+
+        @Override
+        public void onRewind() {
+            sendKeyEvent(KeyEvent.KEYCODE_MEDIA_REWIND);
+        }
+
+        @Override
+        public void onStop() {
+            sendKeyEvent(KeyEvent.KEYCODE_MEDIA_STOP);
+        }
+
+        private void sendKeyEvent(int keyCode) {
+            KeyEvent ke = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
+            Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+
+            intent.putExtra(Intent.EXTRA_KEY_EVENT, ke);
+            try {
+                mPendingIntent.send(mContext, 0, intent);
+            } catch (CanceledException e) {
+                Log.e(TAG, "Error sending media key down event:", e);
+                // Don't bother sending up if down failed
+                return;
+            }
+
+            ke = new KeyEvent(KeyEvent.ACTION_UP, keyCode);
+            intent.putExtra(Intent.EXTRA_KEY_EVENT, ke);
+            try {
+                mPendingIntent.send(mContext, 0, intent);
+            } catch (CanceledException e) {
+                Log.e(TAG, "Error sending media key up event:", e);
+            }
+        }
+    }
+
+    private class SessionHolder {
+        public final Session mSession;
+        public final PendingIntent mPi;
+        public MediaButtonListener mMediaButtonListener;
+        public TransportPerformer.Listener mRccListener;
+
+        public SessionHolder(Session session, PendingIntent pi) {
+            mSession = session;
+            mPi = pi;
+        }
+
+        public void update() {
+            if (mMediaButtonListener == null && mRccListener == null) {
+                mSession.release();
+                mSessions.remove(mPi);
+            } else if (mMediaButtonListener != null && mRccListener != null) {
+                // TODO set session to active
+            } else {
+                // TODO set session to inactive
+            }
+        }
+    }
+}
diff --git a/media/java/android/media/session/PlaybackState.aidl b/media/java/android/media/session/PlaybackState.aidl
new file mode 100644
index 0000000..0876ebd
--- /dev/null
+++ b/media/java/android/media/session/PlaybackState.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.session;
+
+parcelable PlaybackState;
diff --git a/media/java/android/media/session/PlaybackState.java b/media/java/android/media/session/PlaybackState.java
new file mode 100644
index 0000000..26eb9c4
--- /dev/null
+++ b/media/java/android/media/session/PlaybackState.java
@@ -0,0 +1,480 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.media.RemoteControlClient;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.SystemClock;
+
+/**
+ * Playback state for a {@link Session}. This includes a state like
+ * {@link PlaybackState#PLAYSTATE_PLAYING}, the current playback position,
+ * and the current control capabilities.
+ */
+public final class PlaybackState implements Parcelable {
+    /**
+     * Indicates this performer supports the stop command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_STOP = 1 << 0;
+
+    /**
+     * Indicates this performer supports the pause command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_PAUSE = 1 << 1;
+
+    /**
+     * Indicates this performer supports the play command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_PLAY = 1 << 2;
+
+    /**
+     * Indicates this performer supports the rewind command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_REWIND = 1 << 3;
+
+    /**
+     * Indicates this performer supports the previous command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_PREVIOUS_ITEM = 1 << 4;
+
+    /**
+     * Indicates this performer supports the next command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_NEXT_ITEM = 1 << 5;
+
+    /**
+     * Indicates this performer supports the fast forward command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_FASTFORWARD = 1 << 6;
+
+    /**
+     * Indicates this performer supports the set rating command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_RATING = 1 << 7;
+
+    /**
+     * Indicates this performer supports the seek to command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_SEEK_TO = 1 << 8;
+
+    /**
+     * Indicates this performer supports the play/pause toggle command.
+     *
+     * @see #setActions
+     */
+    public static final long ACTION_PLAY_PAUSE = 1 << 9;
+
+    /**
+     * This is the default playback state and indicates that no media has been
+     * added yet, or the performer has been reset and has no content to play.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_NONE = 0;
+
+    /**
+     * State indicating this item is currently stopped.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_STOPPED = 1;
+
+    /**
+     * State indicating this item is currently paused.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_PAUSED = 2;
+
+    /**
+     * State indicating this item is currently playing.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_PLAYING = 3;
+
+    /**
+     * State indicating this item is currently fast forwarding.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_FAST_FORWARDING = 4;
+
+    /**
+     * State indicating this item is currently rewinding.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_REWINDING = 5;
+
+    /**
+     * State indicating this item is currently buffering and will begin playing
+     * when enough data has buffered.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_BUFFERING = 6;
+
+    /**
+     * State indicating this item is currently in an error state. The error
+     * message should also be set when entering this state.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_ERROR = 7;
+
+    /**
+     * State indicating the class doing playback is currently connecting to a
+     * route. Depending on the implementation you may return to the previous
+     * state when the connection finishes or enter {@link #PLAYSTATE_NONE}. If
+     * the connection failed {@link #PLAYSTATE_ERROR} should be used.
+     */
+    public final static int PLAYSTATE_CONNECTING = 8;
+
+    /**
+     * State indicating the player is currently skipping to the previous item.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_SKIPPING_BACKWARDS = 9;
+
+    /**
+     * State indicating the player is currently skipping to the next item.
+     *
+     * @see #setState
+     */
+    public final static int PLAYSTATE_SKIPPING_FORWARDS = 10;
+
+    /**
+     * Use this value for the position to indicate the position is not known.
+     */
+    public final static long PLAYBACK_POSITION_UNKNOWN = -1;
+
+    private int mState;
+    private long mPosition;
+    private long mBufferPosition;
+    private float mRate;
+    private long mActions;
+    private String mErrorMessage;
+    private long mUpdateTime;
+
+    /**
+     * Create an empty PlaybackState. At minimum a state and actions should be
+     * set before publishing a PlaybackState.
+     */
+    public PlaybackState() {
+    }
+
+    /**
+     * Create a new PlaybackState from an existing PlaybackState. All fields
+     * will be copied to the new state.
+     *
+     * @param from The PlaybackState to duplicate
+     */
+    public PlaybackState(PlaybackState from) {
+        mState = from.mState;
+        mPosition = from.mPosition;
+        mRate = from.mRate;
+        mUpdateTime = from.mUpdateTime;
+        mBufferPosition = from.mBufferPosition;
+        mActions = from.mActions;
+        mErrorMessage = from.mErrorMessage;
+    }
+
+    private PlaybackState(Parcel in) {
+        mState = in.readInt();
+        mPosition = in.readLong();
+        mRate = in.readFloat();
+        mUpdateTime = in.readLong();
+        mBufferPosition = in.readLong();
+        mActions = in.readLong();
+        mErrorMessage = in.readString();
+
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeInt(mState);
+        dest.writeLong(mPosition);
+        dest.writeFloat(mRate);
+        dest.writeLong(mUpdateTime);
+        dest.writeLong(mBufferPosition);
+        dest.writeLong(mActions);
+        dest.writeString(mErrorMessage);
+    }
+
+    /**
+     * Get the current state of playback. One of the following:
+     * <ul>
+     * <li> {@link PlaybackState#PLAYSTATE_NONE}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_STOPPED}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_PLAYING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_PAUSED}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_FAST_FORWARDING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_REWINDING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_BUFFERING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_ERROR}</li>
+     */
+    public int getState() {
+        return mState;
+    }
+
+    /**
+     * Set the current state of playback.
+     * <p>
+     * The position must be in ms and indicates the current playback position
+     * within the track. If the position is unknown use
+     * {@link #PLAYBACK_POSITION_UNKNOWN}.
+     * <p>
+     * The rate is a multiple of normal playback and should be 0 when paused and
+     * negative when rewinding. Normal playback rate is 1.0.
+     * <p>
+     * The state must be one of the following:
+     * <ul>
+     * <li> {@link PlaybackState#PLAYSTATE_NONE}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_STOPPED}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_PLAYING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_PAUSED}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_FAST_FORWARDING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_REWINDING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_BUFFERING}</li>
+     * <li> {@link PlaybackState#PLAYSTATE_ERROR}</li>
+     * </ul>
+     *
+     * @param state The current state of playback.
+     * @param position The position in the current track in ms.
+     * @param rate The current rate of playback as a multiple of normal
+     *            playback.
+     */
+    public void setState(int state, long position, float rate) {
+        this.mState = state;
+        this.mPosition = position;
+        this.mRate = rate;
+        mUpdateTime = SystemClock.elapsedRealtime();
+    }
+
+    /**
+     * Get the current playback position in ms.
+     */
+    public long getPosition() {
+        return mPosition;
+    }
+
+    /**
+     * Get the current buffer position in ms. This is the farthest playback
+     * point that can be reached from the current position using only buffered
+     * content.
+     */
+    public long getBufferPosition() {
+        return mBufferPosition;
+    }
+
+    /**
+     * Set the current buffer position in ms. This is the farthest playback
+     * point that can be reached from the current position using only buffered
+     * content.
+     */
+    public void setBufferPosition(long bufferPosition) {
+        mBufferPosition = bufferPosition;
+    }
+
+    /**
+     * Get the current playback rate as a multiple of normal playback. This
+     * should be negative when rewinding. A value of 1 means normal playback and
+     * 0 means paused.
+     *
+     * @return The current rate of playback.
+     */
+    public float getRate() {
+        return mRate;
+    }
+
+    /**
+     * Get the current actions available on this session. This should use a
+     * bitmask of the available actions.
+     * <ul>
+     * <li> {@link PlaybackState#ACTION_PREVIOUS_ITEM}</li>
+     * <li> {@link PlaybackState#ACTION_REWIND}</li>
+     * <li> {@link PlaybackState#ACTION_PLAY}</li>
+     * <li> {@link PlaybackState#ACTION_PAUSE}</li>
+     * <li> {@link PlaybackState#ACTION_STOP}</li>
+     * <li> {@link PlaybackState#ACTION_FASTFORWARD}</li>
+     * <li> {@link PlaybackState#ACTION_NEXT_ITEM}</li>
+     * <li> {@link PlaybackState#ACTION_SEEK_TO}</li>
+     * <li> {@link PlaybackState#ACTION_RATING}</li>
+     * </ul>
+     */
+    public long getActions() {
+        return mActions;
+    }
+
+    /**
+     * Set the current capabilities available on this session. This should use a
+     * bitmask of the available capabilities.
+     * <ul>
+     * <li> {@link PlaybackState#ACTION_PREVIOUS_ITEM}</li>
+     * <li> {@link PlaybackState#ACTION_REWIND}</li>
+     * <li> {@link PlaybackState#ACTION_PLAY}</li>
+     * <li> {@link PlaybackState#ACTION_PAUSE}</li>
+     * <li> {@link PlaybackState#ACTION_STOP}</li>
+     * <li> {@link PlaybackState#ACTION_FASTFORWARD}</li>
+     * <li> {@link PlaybackState#ACTION_NEXT_ITEM}</li>
+     * <li> {@link PlaybackState#ACTION_SEEK_TO}</li>
+     * <li> {@link PlaybackState#ACTION_RATING}</li>
+     * </ul>
+     */
+    public void setActions(long capabilities) {
+        mActions = capabilities;
+    }
+
+    /**
+     * Get a user readable error message. This should be set when the state is
+     * {@link PlaybackState#PLAYSTATE_ERROR}.
+     */
+    public String getErrorMessage() {
+        return mErrorMessage;
+    }
+
+    /**
+     * Get the elapsed real time at which position was last updated. If the
+     * position has never been set this will return 0;
+     *
+     * @return The last time the position was updated.
+     * @hide
+     */
+    public long getLastPositionUpdateTime() {
+        return mUpdateTime;
+    }
+
+    /**
+     * Set a user readable error message. This should be set when the state is
+     * {@link PlaybackState#PLAYSTATE_ERROR}.
+     */
+    public void setErrorMessage(String errorMessage) {
+        mErrorMessage = errorMessage;
+    }
+
+    /**
+     * Get the {@link PlaybackState} state for the given
+     * {@link RemoteControlClient} state.
+     *
+     * @param rccState The state used by {@link RemoteControlClient}.
+     * @return The equivalent state used by {@link PlaybackState}.
+     * @hide
+     */
+    public static int getStateFromRccState(int rccState) {
+        switch (rccState) {
+            case RemoteControlClient.PLAYSTATE_BUFFERING:
+                return PLAYSTATE_BUFFERING;
+            case RemoteControlClient.PLAYSTATE_ERROR:
+                return PLAYSTATE_ERROR;
+            case RemoteControlClient.PLAYSTATE_FAST_FORWARDING:
+                return PLAYSTATE_FAST_FORWARDING;
+            case RemoteControlClient.PLAYSTATE_NONE:
+                return PLAYSTATE_NONE;
+            case RemoteControlClient.PLAYSTATE_PAUSED:
+                return PLAYSTATE_PAUSED;
+            case RemoteControlClient.PLAYSTATE_PLAYING:
+                return PLAYSTATE_PLAYING;
+            case RemoteControlClient.PLAYSTATE_REWINDING:
+                return PLAYSTATE_REWINDING;
+            case RemoteControlClient.PLAYSTATE_SKIPPING_BACKWARDS:
+                return PLAYSTATE_SKIPPING_BACKWARDS;
+            case RemoteControlClient.PLAYSTATE_STOPPED:
+                return PLAYSTATE_STOPPED;
+            default:
+                return -1;
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public static long getActionsFromRccControlFlags(int rccFlags) {
+        long actions = 0;
+        long flag = 1;
+        while (flag <= rccFlags) {
+            if ((flag & rccFlags) != 0) {
+                actions |= getActionForRccFlag((int) flag);
+            }
+            flag = flag << 1;
+        }
+        return actions;
+    }
+
+    private static long getActionForRccFlag(int flag) {
+        switch (flag) {
+            case RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS:
+                return ACTION_PREVIOUS_ITEM;
+            case RemoteControlClient.FLAG_KEY_MEDIA_REWIND:
+                return ACTION_REWIND;
+            case RemoteControlClient.FLAG_KEY_MEDIA_PLAY:
+                return ACTION_PLAY;
+            case RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE:
+                return ACTION_PLAY_PAUSE;
+            case RemoteControlClient.FLAG_KEY_MEDIA_PAUSE:
+                return ACTION_PAUSE;
+            case RemoteControlClient.FLAG_KEY_MEDIA_STOP:
+                return ACTION_STOP;
+            case RemoteControlClient.FLAG_KEY_MEDIA_FAST_FORWARD:
+                return ACTION_FASTFORWARD;
+            case RemoteControlClient.FLAG_KEY_MEDIA_NEXT:
+                return ACTION_NEXT_ITEM;
+            case RemoteControlClient.FLAG_KEY_MEDIA_POSITION_UPDATE:
+                return ACTION_SEEK_TO;
+            case RemoteControlClient.FLAG_KEY_MEDIA_RATING:
+                return ACTION_RATING;
+        }
+        return 0;
+    }
+
+    public static final Parcelable.Creator<PlaybackState> CREATOR
+            = new Parcelable.Creator<PlaybackState>() {
+        @Override
+        public PlaybackState createFromParcel(Parcel in) {
+            return new PlaybackState(in);
+        }
+
+        @Override
+        public PlaybackState[] newArray(int size) {
+            return new PlaybackState[size];
+        }
+    };
+}
diff --git a/media/java/android/media/session/Route.java b/media/java/android/media/session/Route.java
new file mode 100644
index 0000000..c9530a6
--- /dev/null
+++ b/media/java/android/media/session/Route.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.List;
+
+/**
+ * Represents a destination which an application has connected to and may send
+ * media content.
+ * <p>
+ * This allows a session owner to interact with a route it has been connected
+ * to. The MediaRoute must be used to get {@link RouteInterface}
+ * instances which can be used to communicate over a specific interface on the
+ * route.
+ */
+public final class Route {
+    private static final String TAG = "Route";
+    private final RouteInfo mInfo;
+    private final Session mSession;
+    private final RouteOptions mOptions;
+
+    /**
+     * @hide
+     */
+    public Route(RouteInfo info, RouteOptions options, Session session) {
+        if (info == null || options == null) {
+            throw new IllegalStateException("Route info was not valid!");
+        }
+        mInfo = info;
+        mOptions = options;
+        mSession = session;
+    }
+
+    /**
+     * Get the {@link RouteInfo} for this route.
+     *
+     * @return The info for this route.
+     */
+    public RouteInfo getRouteInfo() {
+        return mInfo;
+    }
+
+    /**
+     * Get the {@link RouteOptions} that were used to connect this route.
+     *
+     * @return The options used to connect to this route.
+     */
+    public RouteOptions getOptions() {
+        return mOptions;
+    }
+
+    /**
+     * Gets an interface provided by this route. If the interface is not
+     * supported by the route, returns null.
+     *
+     * @see RouteInterface
+     * @param iface The name of the interface to create
+     * @return A {@link RouteInterface} or null if the interface is
+     *         not supported.
+     */
+    public RouteInterface getInterface(String iface) {
+        if (TextUtils.isEmpty(iface)) {
+            throw new IllegalArgumentException("iface may not be empty.");
+        }
+        List<String> ifaces = mOptions.getInterfaceNames();
+        if (ifaces != null) {
+            for (int i = ifaces.size() - 1; i >= 0; i--) {
+                if (iface.equals(ifaces.get(i))) {
+                    return new RouteInterface(this, iface, mSession);
+                }
+            }
+        }
+        Log.e(TAG, "Interface not supported by route");
+        return null;
+    }
+
+    /**
+     * @hide
+     */
+    Session getSession() {
+        return mSession;
+    }
+}
diff --git a/media/java/android/media/session/RouteCommand.aidl b/media/java/android/media/session/RouteCommand.aidl
new file mode 100644
index 0000000..725b308
--- /dev/null
+++ b/media/java/android/media/session/RouteCommand.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.session;
+
+parcelable RouteCommand;
diff --git a/media/java/android/media/session/RouteCommand.java b/media/java/android/media/session/RouteCommand.java
new file mode 100644
index 0000000..358bc0a
--- /dev/null
+++ b/media/java/android/media/session/RouteCommand.java
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Represents a command that an application may send to a route.
+ * <p>
+ * Commands are associated with a specific route and interface supported by that
+ * route and sent through the session. This class isn't used directly by apps.
+ *
+ * @hide
+ */
+public final class RouteCommand implements Parcelable {
+    private final String mRoute;
+    private final String mIface;
+    private final String mEvent;
+    private final Bundle mExtras;
+
+    /**
+     * @param route The id of the route this event is being sent on
+     * @param iface The interface the sender used
+     * @param event The event or command
+     * @param extras Any extras included with the event
+     */
+    public RouteCommand(String route, String iface, String event, Bundle extras) {
+        mRoute = route;
+        mIface = iface;
+        mEvent = event;
+        mExtras = extras;
+    }
+
+    private RouteCommand(Parcel in) {
+        mRoute = in.readString();
+        mIface = in.readString();
+        mEvent = in.readString();
+        mExtras = in.readBundle();
+    }
+
+    /**
+     * Get the id for the route this event was sent on.
+     *
+     * @return The route id this event is using
+     */
+    public String getRouteInfo() {
+        return mRoute;
+    }
+
+    /**
+     * Get the interface this event was sent from
+     *
+     * @return The interface for this event
+     */
+    public String getIface() {
+        return mIface;
+    }
+
+    /**
+     * Get the action/name of the event.
+     *
+     * @return The name of event/command.
+     */
+    public String getEvent() {
+        return mEvent;
+    }
+
+    /**
+     * Get any extras included with the event.
+     *
+     * @return The bundle included with the event or null
+     */
+    public Bundle getExtras() {
+        return mExtras;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mRoute);
+        dest.writeString(mIface);
+        dest.writeString(mEvent);
+        dest.writeBundle(mExtras);
+    }
+
+    public static final Parcelable.Creator<RouteCommand> CREATOR
+            = new Parcelable.Creator<RouteCommand>() {
+        @Override
+        public RouteCommand createFromParcel(Parcel in) {
+            return new RouteCommand(in);
+        }
+
+        @Override
+        public RouteCommand[] newArray(int size) {
+            return new RouteCommand[size];
+        }
+    };
+}
diff --git a/media/java/android/media/session/RouteEvent.aidl b/media/java/android/media/session/RouteEvent.aidl
new file mode 100644
index 0000000..6966207
--- /dev/null
+++ b/media/java/android/media/session/RouteEvent.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.session;
+
+parcelable RouteEvent;
diff --git a/media/java/android/media/session/RouteEvent.java b/media/java/android/media/session/RouteEvent.java
new file mode 100644
index 0000000..918e410
--- /dev/null
+++ b/media/java/android/media/session/RouteEvent.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.media.routeprovider.RouteConnection;
+import android.media.routeprovider.RouteProviderService;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Represents an event that a route provider is sending to a particular
+ * {@link RouteConnection}. Events are associated with a specific interface
+ * supported by the connection and sent through the {@link RouteProviderService}.
+ * This class isn't used directly by apps.
+ *
+ * @hide
+ */
+public class RouteEvent implements Parcelable {
+    private final IBinder mConnection;
+    private final String mIface;
+    private final String mEvent;
+    private final Bundle mExtras;
+
+    /**
+     * @param connection The connection that this event is for
+     * @param iface The interface the sender used
+     * @param event The event or command
+     * @param extras Any extras included with the event
+     */
+    public RouteEvent(IBinder connection, String iface, String event, Bundle extras) {
+        mConnection = connection;
+        mIface = iface;
+        mEvent = event;
+        mExtras = extras;
+    }
+
+    private RouteEvent(Parcel in) {
+        mConnection = in.readStrongBinder();
+        mIface = in.readString();
+        mEvent = in.readString();
+        mExtras = in.readBundle();
+    }
+
+    /**
+     * Get the connection this event was sent on.
+     *
+     * @return The connection this event is using
+     */
+    public IBinder getConnection() {
+        return mConnection;
+    }
+
+    /**
+     * Get the interface this event was sent from
+     *
+     * @return The interface for this event
+     */
+    public String getIface() {
+        return mIface;
+    }
+
+    /**
+     * Get the action/name of the event.
+     *
+     * @return The name of event/command.
+     */
+    public String getEvent() {
+        return mEvent;
+    }
+
+    /**
+     * Get any extras included with the event.
+     *
+     * @return The bundle included with the event or null
+     */
+    public Bundle getExtras() {
+        return mExtras;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeStrongBinder(mConnection);
+        dest.writeString(mIface);
+        dest.writeString(mEvent);
+        dest.writeBundle(mExtras);
+    }
+
+    public static final Parcelable.Creator<RouteEvent> CREATOR
+            = new Parcelable.Creator<RouteEvent>() {
+        @Override
+        public RouteEvent createFromParcel(Parcel in) {
+            return new RouteEvent(in);
+        }
+
+        @Override
+        public RouteEvent[] newArray(int size) {
+            return new RouteEvent[size];
+        }
+    };
+}
diff --git a/media/java/android/media/session/RouteInfo.aidl b/media/java/android/media/session/RouteInfo.aidl
new file mode 100644
index 0000000..c5f50c8
--- /dev/null
+++ b/media/java/android/media/session/RouteInfo.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.session;
+
+parcelable RouteInfo;
diff --git a/media/java/android/media/session/RouteInfo.java b/media/java/android/media/session/RouteInfo.java
new file mode 100644
index 0000000..17df969
--- /dev/null
+++ b/media/java/android/media/session/RouteInfo.java
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Information about a route, including its display name, a way to identify it,
+ * and the ways it can be connected to.
+ */
+public final class RouteInfo implements Parcelable {
+    private final String mName;
+    private final String mId;
+    private final String mProviderId;
+    private final List<RouteOptions> mOptions;
+
+    private RouteInfo(String id, String name, String providerId,
+            List<RouteOptions> connRequests) {
+        mId = id;
+        mName = name;
+        mProviderId = providerId;
+        mOptions = connRequests;
+    }
+
+    private RouteInfo(Parcel in) {
+        mId = in.readString();
+        mName = in.readString();
+        mProviderId = in.readString();
+        mOptions = new ArrayList<RouteOptions>();
+        in.readTypedList(mOptions, RouteOptions.CREATOR);
+    }
+
+    /**
+     * Get the displayable name of this route.
+     *
+     * @return A short, user readable name for this route
+     */
+    public String getName() {
+        return mName;
+    }
+
+    /**
+     * Get the unique id for this route.
+     *
+     * @return A unique route id.
+     */
+    public String getId() {
+        return mId;
+    }
+
+    /**
+     * Get the package name of this route's provider.
+     *
+     * @return The package name of this route's provider.
+     */
+    public String getProvider() {
+        return mProviderId;
+    }
+
+    /**
+     * Get the set of connections that may be used with this route.
+     *
+     * @return An array of connection requests that may be used to connect
+     */
+    public List<RouteOptions> getConnectionMethods() {
+        return mOptions;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mId);
+        dest.writeString(mName);
+        dest.writeString(mProviderId);
+        dest.writeTypedList(mOptions);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder bob = new StringBuilder();
+        bob.append("RouteInfo: id=").append(mId).append(", name=").append(mName)
+                .append(", provider=").append(mProviderId).append(", options={");
+        for (int i = 0; i < mOptions.size(); i++) {
+            if (i != 0) {
+                bob.append(", ");
+            }
+            bob.append(mOptions.get(i).toString());
+        }
+        bob.append("}");
+        return bob.toString();
+    }
+
+    public static final Parcelable.Creator<RouteInfo> CREATOR
+            = new Parcelable.Creator<RouteInfo>() {
+        @Override
+        public RouteInfo createFromParcel(Parcel in) {
+            return new RouteInfo(in);
+        }
+
+        @Override
+        public RouteInfo[] newArray(int size) {
+            return new RouteInfo[size];
+        }
+    };
+
+    /**
+     * Helper for creating MediaRouteInfos. A route must have a name and an id.
+     * While options are not strictly required the route cannot be connected to
+     * without at least one set of options.
+     */
+    public static final class Builder {
+        private String mName;
+        private String mId;
+        private String mProviderPackage;
+        private ArrayList<RouteOptions> mOptions;
+
+        /**
+         * Copies an existing route info object. TODO Remove once we have
+         * helpers for creating route infos.
+         *
+         * @param from The existing info to copy.
+         */
+        public Builder(RouteInfo from) {
+            mOptions = new ArrayList<RouteOptions>(from.getConnectionMethods());
+            mName = from.mName;
+            mId = from.mId;
+            mProviderPackage = from.mProviderId;
+        }
+
+        public Builder() {
+            mOptions = new ArrayList<RouteOptions>();
+        }
+
+        /**
+         * Set the user visible name for this route.
+         *
+         * @param name The name of the route
+         * @return The builder for easy chaining.
+         */
+        public Builder setName(String name) {
+            mName = name;
+            return this;
+        }
+
+        /**
+         * Set the id of the route. This should be unique to the provider.
+         *
+         * @param id The unique id of the route.
+         * @return The builder for easy chaining.
+         */
+        public Builder setId(String id) {
+            mId = id;
+            return this;
+        }
+
+        /**
+         * @hide
+         */
+        public Builder setProviderId(String packageName) {
+            mProviderPackage = packageName;
+            return this;
+        }
+
+        /**
+         * Add a set of {@link RouteOptions} to the route. Multiple options
+         * may be added to the same route.
+         *
+         * @param options The options to add to this route.
+         * @return The builder for easy chaining.
+         */
+        public Builder addRouteOptions(RouteOptions options) {
+            mOptions.add(options);
+            return this;
+        }
+
+        /**
+         * Clear the set of {@link RouteOptions} on the route.
+         *
+         * @return The builder for easy chaining
+         */
+        public Builder clearRouteOptions() {
+            mOptions.clear();
+            return this;
+        }
+
+        /**
+         * Build a new MediaRouteInfo.
+         *
+         * @return A new MediaRouteInfo with the values that were set.
+         */
+        public RouteInfo build() {
+            if (TextUtils.isEmpty(mName)) {
+                throw new IllegalArgumentException("Must set a name before building");
+            }
+            if (TextUtils.isEmpty(mId)) {
+                throw new IllegalArgumentException("Must set an id before building");
+            }
+            return new RouteInfo(mId, mName, mProviderPackage, mOptions);
+        }
+
+        /**
+         * Get the current number of options that have been added to this
+         * builder.
+         *
+         * @return The number of options that have been added.
+         */
+        public int getOptionsSize() {
+            return mOptions.size();
+        }
+    }
+}
diff --git a/media/java/android/media/session/RouteInterface.java b/media/java/android/media/session/RouteInterface.java
new file mode 100644
index 0000000..e9c9fd3
--- /dev/null
+++ b/media/java/android/media/session/RouteInterface.java
@@ -0,0 +1,212 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.ResultReceiver;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+/**
+ * A route can support multiple interfaces for a {@link Session} to
+ * interact with. To use a specific interface with a route a
+ * MediaSessionRouteInterface needs to be retrieved from the route. An
+ * implementation of the specific interface, like
+ * {@link RoutePlaybackControls}, should be used to simplify communication
+ * and reduce errors on that interface.
+ *
+ * @see RoutePlaybackControls for an example
+ */
+public final class RouteInterface {
+    private static final String TAG = "RouteInterface";
+
+    /**
+     * Error indicating the route is currently not connected.
+     */
+    public static final int RESULT_NOT_CONNECTED = -5;
+    /**
+     * Error indicating the session is no longer using the route this command
+     * was sent to.
+     */
+    public static final int RESULT_ROUTE_IS_STALE = -4;
+    /**
+     * Error indicating that the interface does not support the command.
+     */
+    public static final int RESULT_COMMAND_NOT_SUPPORTED = -3;
+    /**
+     * Error indicating that the route does not support the interface.
+     */
+    public static final int RESULT_INTERFACE_NOT_SUPPORTED = -2;
+    /**
+     * Generic error. Extra information about the error may be included in the
+     * result bundle.
+     */
+    public static final int RESULT_ERROR = -1;
+    /**
+     * The command was successful. Extra information may be included in the
+     * result bundle.
+     */
+    public static final int RESULT_SUCCESS = 1;
+
+    private final Route mRoute;
+    private final String mIface;
+    private final Session mSession;
+
+    private final Object mLock = new Object();
+    private final ArrayList<EventHandler> mListeners = new ArrayList<EventHandler>();
+
+    /**
+     * @hide
+     */
+    RouteInterface(Route route, String iface, Session session) {
+        mRoute = route;
+        mIface = iface;
+        mSession = session;
+        mSession.addInterfaceListener(iface, mEventListener);
+    }
+
+    /**
+     * Send a command using this interface.
+     *
+     * @param command The command to send.
+     * @param extras Any extras to include with the command.
+     * @param cb The callback to receive the result on.
+     * @return true if the command was sent, false otherwise.
+     */
+    public boolean sendCommand(String command, Bundle extras, ResultReceiver cb) {
+        RouteCommand cmd = new RouteCommand(mRoute.getRouteInfo().getId(), mIface,
+                command, extras);
+        return mSession.sendRouteCommand(cmd, cb);
+    }
+
+    /**
+     * Add a listener to this interface. Events will be sent on the caller's
+     * thread.
+     *
+     * @param listener The listener to receive events on.
+     */
+    public void addListener(EventListener listener) {
+        addListener(listener, null);
+    }
+
+    /**
+     * Add a listener for this interface. If a handler is specified events will
+     * be performed on the handler's thread, otherwise the caller's thread will
+     * be used.
+     *
+     * @param listener The listener to receive events on
+     * @param handler The handler whose thread to post calls on
+     */
+    public void addListener(EventListener listener, Handler handler) {
+        if (listener == null) {
+            throw new IllegalArgumentException("listener may not be null");
+        }
+        if (handler == null) {
+            handler = new Handler();
+        }
+        synchronized (mLock) {
+            if (findIndexOfListenerLocked(listener) != -1) {
+                Log.d(TAG, "Listener is already added, ignoring");
+                return;
+            }
+            mListeners.add(new EventHandler(handler.getLooper(), listener));
+        }
+    }
+
+    /**
+     * Remove a listener from this interface.
+     *
+     * @param listener The listener to stop receiving events on.
+     */
+    public void removeListener(EventListener listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("listener may not be null");
+        }
+        synchronized (mLock) {
+            int index = findIndexOfListenerLocked(listener);
+            if (index != -1) {
+                mListeners.remove(index);
+            }
+        }
+    }
+
+    private int findIndexOfListenerLocked(EventListener listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        for (int i = mListeners.size() - 1; i >= 0; i--) {
+            EventHandler handler = mListeners.get(i);
+            if (listener == handler.mListener) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    private EventListener mEventListener = new EventListener() {
+            @Override
+        public void onEvent(String event, Bundle args) {
+            synchronized (mLock) {
+                for (int i = mListeners.size() - 1; i >= 0; i--) {
+                    mListeners.get(i).postEvent(event, args);
+                }
+            }
+        }
+
+    };
+
+    /**
+     * An EventListener can be registered by an app with TODO to handle events
+     * sent by the session on a specific interface.
+     */
+    public static abstract class EventListener {
+        /**
+         * This is called when an event is received from the interface. Events
+         * are sent by the session owner and will be delivered to all
+         * controllers that are listening to the interface.
+         *
+         * @param event The event that occurred.
+         * @param args Any extras that were included with the event. May be
+         *            null.
+         */
+        public abstract void onEvent(String event, Bundle args);
+    }
+
+    private static final class EventHandler extends Handler {
+
+        private final EventListener mListener;
+
+        public EventHandler(Looper looper, EventListener cb) {
+            super(looper, null, true);
+            mListener = cb;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            mListener.onEvent((String) msg.obj, msg.getData());
+        }
+
+        public void postEvent(String event, Bundle args) {
+            Message msg = obtainMessage(0, event);
+            msg.setData(args);
+            msg.sendToTarget();
+        }
+    }
+}
diff --git a/media/java/android/media/session/RouteOptions.aidl b/media/java/android/media/session/RouteOptions.aidl
new file mode 100644
index 0000000..feaf517
--- /dev/null
+++ b/media/java/android/media/session/RouteOptions.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.session;
+
+parcelable RouteOptions;
diff --git a/media/java/android/media/session/RouteOptions.java b/media/java/android/media/session/RouteOptions.java
new file mode 100644
index 0000000..5105867
--- /dev/null
+++ b/media/java/android/media/session/RouteOptions.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Specifies options that an application might use when connecting to a route.
+ * This includes things like interfaces, connection parameters, and required
+ * features.
+ * <p>
+ * An application may create several different route options that describe
+ * alternative sets of capabilities that it can use and choose the most
+ * appropriate route options when it is ready to connect to the route. Each
+ * route options instance must specify a complete set of capabilities to request
+ * when the connection is established.
+ */
+public final class RouteOptions implements Parcelable {
+    private static final String TAG = "RouteOptions";
+
+    private final ArrayList<String> mIfaces;
+    private final Bundle mConnectionParams;
+
+    private RouteOptions(List<String> ifaces, Bundle params) {
+        mIfaces = new ArrayList<String>(ifaces);
+        mConnectionParams = params;
+    }
+
+    private RouteOptions(Parcel in) {
+        mIfaces = new ArrayList<String>();
+        in.readStringList(mIfaces);
+        mConnectionParams = in.readBundle();
+    }
+
+    /**
+     * Get the interfaces this connection wants to use.
+     *
+     * @return The interfaces for this connection
+     */
+    public List<String> getInterfaceNames() {
+        return mIfaces;
+    }
+
+    /**
+     * Get the parameters that will be used for connecting.
+     *
+     * @return The set of connection parameters this connections uses
+     */
+    public Bundle getConnectionParams() {
+        return mConnectionParams;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeStringList(mIfaces);
+        dest.writeBundle(mConnectionParams);
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder bob = new StringBuilder();
+        bob.append("Options: interfaces={");
+        for (int i = 0; i < mIfaces.size(); i++) {
+            if (i != 0) {
+                bob.append(", ");
+            }
+            bob.append(mIfaces.get(i));
+        }
+        bob.append("}");
+        bob.append(", parameters=");
+        bob.append(mConnectionParams == null ? "null" : mConnectionParams.toString());
+        return bob.toString();
+    }
+
+    public static final Parcelable.Creator<RouteOptions> CREATOR
+            = new Parcelable.Creator<RouteOptions>() {
+        @Override
+        public RouteOptions createFromParcel(Parcel in) {
+            return new RouteOptions(in);
+        }
+
+        @Override
+        public RouteOptions[] newArray(int size) {
+            return new RouteOptions[size];
+        }
+    };
+
+    /**
+     * Builder for creating {@link RouteOptions}.
+     */
+    public final static class Builder {
+        private ArrayList<String> mIfaces = new ArrayList<String>();
+        private Bundle mConnectionParams;
+
+        public Builder() {
+        }
+
+        /**
+         * Add a required interface to the options.
+         *
+         * @param interfaceName The name of the interface to add.
+         * @return The builder to allow chaining commands.
+         */
+        public Builder addInterface(String interfaceName) {
+            if (TextUtils.isEmpty(interfaceName)) {
+                throw new IllegalArgumentException("interfaceName cannot be empty");
+            }
+            if (!mIfaces.contains(interfaceName)) {
+                mIfaces.add(interfaceName);
+            } else {
+                Log.w(TAG, "Attempted to add interface that is already added");
+            }
+            return this;
+        }
+
+        /**
+         * Set the connection parameters to use with the options. TODO replace
+         * with more specific calls once we decide on the standard way to
+         * express parameters.
+         *
+         * @param parameters The parameters to use.
+         * @return The builder to allow chaining commands.
+         */
+        public Builder setParameters(Bundle parameters) {
+            mConnectionParams = parameters;
+            return this;
+        }
+
+        /**
+         * Generate a set of options.
+         *
+         * @return The options with the specified components.
+         */
+        public RouteOptions build() {
+            return new RouteOptions(mIfaces, mConnectionParams);
+        }
+    }
+}
diff --git a/media/java/android/media/session/RoutePlaybackControls.java b/media/java/android/media/session/RoutePlaybackControls.java
new file mode 100644
index 0000000..a3ffb58
--- /dev/null
+++ b/media/java/android/media/session/RoutePlaybackControls.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
+
+/**
+ * A standard media control interface for Routes that support queueing and
+ * transport controls. Routes may support multiple interfaces for MediaSessions
+ * to interact with.
+ */
+public final class RoutePlaybackControls {
+    private static final String TAG = "RoutePlaybackControls";
+    public static final String NAME = "android.media.session.RoutePlaybackControls";
+
+    /** @hide */
+    public static final String KEY_VALUE1 = "value1";
+
+    /** @hide */
+    public static final String CMD_FAST_FORWARD = "fastForward";
+    /** @hide */
+    public static final String CMD_GET_CURRENT_POSITION = "getCurrentPosition";
+    /** @hide */
+    public static final String CMD_GET_CAPABILITIES = "getCapabilities";
+    /** @hide */
+    public static final String CMD_PLAY_NOW = "playNow";
+    /** @hide */
+    public static final String CMD_RESUME = "resume";
+    /** @hide */
+    public static final String CMD_PAUSE = "pause";
+
+    /** @hide */
+    public static final String EVENT_PLAYSTATE_CHANGE = "playstateChange";
+    /** @hide */
+    public static final String EVENT_METADATA_CHANGE = "metadataChange";
+
+    private final RouteInterface mIface;
+
+    private RoutePlaybackControls(RouteInterface iface) {
+        mIface = iface;
+    }
+
+    /**
+     * Get a new MediaRoutePlaybackControls instance for sending commands using
+     * this interface. If the provided route doesn't support this interface null
+     * will be returned.
+     *
+     * @param route The route to send commands to.
+     * @return A MediaRoutePlaybackControls instance or null if not supported.
+     */
+    public static RoutePlaybackControls from(Route route) {
+        RouteInterface iface = route.getInterface(NAME);
+        if (iface != null) {
+            return new RoutePlaybackControls(iface);
+        }
+        return null;
+    }
+
+    /**
+     * Send a resume command to the route.
+     */
+    public void resume() {
+        mIface.sendCommand(CMD_RESUME, null, null);
+    }
+
+    /**
+     * Send a pause command to the route.
+     */
+    public void pause() {
+        mIface.sendCommand(CMD_PAUSE, null, null);
+    }
+
+    /**
+     * Send a fast forward command.
+     */
+    public void fastForward() {
+        Bundle b = new Bundle();
+        mIface.sendCommand(CMD_FAST_FORWARD, b, null);
+    }
+
+    /**
+     * Retrieves the current playback position.
+     *
+     * @param cb The callback to receive the result on.
+     */
+    public void getCurrentPosition(ResultReceiver cb) {
+        mIface.sendCommand(CMD_GET_CURRENT_POSITION, null, cb);
+    }
+
+    public void getCapabilities(ResultReceiver cb) {
+        mIface.sendCommand(CMD_GET_CAPABILITIES, null, cb);
+    }
+
+    public void addListener(Listener listener) {
+        mIface.addListener(listener);
+    }
+
+    public void addListener(Listener listener, Handler handler) {
+        mIface.addListener(listener, handler);
+    }
+
+    public void removeListener(Listener listener) {
+        mIface.removeListener(listener);
+    }
+
+    public void playNow(String content) {
+        Bundle bundle = new Bundle();
+        bundle.putString(KEY_VALUE1, content);
+        mIface.sendCommand(CMD_PLAY_NOW, bundle, null);
+    }
+
+    /**
+     * Register this event listener using {@link #addListener} to receive
+     * RoutePlaybackControl events from a session.
+     */
+    public static abstract class Listener extends RouteInterface.EventListener {
+        @Override
+        public final void onEvent(String event, Bundle args) {
+            if (EVENT_PLAYSTATE_CHANGE.equals(event)) {
+                onPlaybackStateChange(args.getInt(KEY_VALUE1, 0));
+            } else if (EVENT_METADATA_CHANGE.equals(event)) {
+                onMetadataUpdate((MediaMetadata) args.getParcelable(KEY_VALUE1));
+            }
+        }
+
+        /**
+         * Override to handle updates to the playback state. Valid values are in
+         * {@link TransportPerformer}. TODO put playstate values somewhere more
+         * generic.
+         *
+         * @param state
+         */
+        public void onPlaybackStateChange(int state) {
+        }
+
+        /**
+         * Override to handle metadata changes for this session's media. The
+         * default supported fields are those in {@link MediaMetadata}.
+         *
+         * @param metadata
+         */
+        public void onMetadataUpdate(MediaMetadata metadata) {
+        }
+    }
+
+}
diff --git a/media/java/android/media/session/Session.java b/media/java/android/media/session/Session.java
new file mode 100644
index 0000000..8ccd788
--- /dev/null
+++ b/media/java/android/media/session/Session.java
@@ -0,0 +1,666 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.content.Intent;
+import android.media.Rating;
+import android.media.session.ISessionController;
+import android.media.session.ISession;
+import android.media.session.ISessionCallback;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Allows interaction with media controllers, media routes, volume keys, media
+ * buttons, and transport controls.
+ * <p>
+ * A MediaSession should be created when an app wants to publish media playback
+ * information or negotiate with a media route. In general an app only needs one
+ * session for all playback, though multiple sessions can be created for sending
+ * media to multiple routes or to provide finer grain controls of media.
+ * <p>
+ * A MediaSession is created by calling
+ * {@link SessionManager#createSession(String)}. Once a session is created
+ * apps that have the MEDIA_CONTENT_CONTROL permission can interact with the
+ * session through {@link SessionManager#getActiveSessions()}. The owner of
+ * the session may also use {@link #getSessionToken()} to allow apps without
+ * this permission to create a {@link SessionController} to interact with this
+ * session.
+ * <p>
+ * To receive commands, media keys, and other events a Callback must be set with
+ * {@link #addCallback(Callback)}.
+ * <p>
+ * When an app is finished performing playback it must call {@link #release()}
+ * to clean up the session and notify any controllers.
+ * <p>
+ * MediaSession objects are thread safe
+ */
+public final class Session {
+    private static final String TAG = "Session";
+
+    private static final int MSG_MEDIA_BUTTON = 1;
+    private static final int MSG_COMMAND = 2;
+    private static final int MSG_ROUTE_CHANGE = 3;
+    private static final int MSG_ROUTE_CONNECTED = 4;
+
+    private static final String KEY_COMMAND = "command";
+    private static final String KEY_EXTRAS = "extras";
+    private static final String KEY_CALLBACK = "callback";
+
+    private final Object mLock = new Object();
+
+    private final SessionToken mSessionToken;
+    private final ISession mBinder;
+    private final CallbackStub mCbStub;
+
+    private final ArrayList<MessageHandler> mCallbacks = new ArrayList<MessageHandler>();
+    // TODO route interfaces
+    private final ArrayMap<String, RouteInterface.EventListener> mInterfaceListeners
+            = new ArrayMap<String, RouteInterface.EventListener>();
+
+    private TransportPerformer mPerformer;
+    private Route mRoute;
+
+    private boolean mPublished = false;;
+
+    /**
+     * @hide
+     */
+    public Session(ISession binder, CallbackStub cbStub) {
+        mBinder = binder;
+        mCbStub = cbStub;
+        ISessionController controllerBinder = null;
+        try {
+            controllerBinder = mBinder.getController();
+        } catch (RemoteException e) {
+            throw new RuntimeException("Dead object in MediaSessionController constructor: ", e);
+        }
+        mSessionToken = new SessionToken(controllerBinder);
+    }
+
+    /**
+     * Set the callback to receive updates on.
+     *
+     * @param callback The callback object
+     */
+    public void addCallback(Callback callback) {
+        addCallback(callback, null);
+    }
+
+    /**
+     * Add a callback to receive updates for the MediaSession. This includes
+     * events like route updates, media buttons, and focus changes.
+     *
+     * @param callback The callback to receive updates on.
+     * @param handler The handler that events should be posted on.
+     */
+    public void addCallback(Callback callback, Handler handler) {
+        if (callback == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        synchronized (mLock) {
+            if (getHandlerForCallbackLocked(callback) != null) {
+                Log.w(TAG, "Callback is already added, ignoring");
+                return;
+            }
+            if (handler == null) {
+                handler = new Handler();
+            }
+            MessageHandler msgHandler = new MessageHandler(handler.getLooper(), callback);
+            mCallbacks.add(msgHandler);
+        }
+    }
+
+    /**
+     * Remove a callback. It will no longer receive updates.
+     *
+     * @param callback The callback to remove.
+     */
+    public void removeCallback(Callback callback) {
+        synchronized (mLock) {
+            removeCallbackLocked(callback);
+        }
+    }
+
+    /**
+     * Start using a TransportPerformer with this media session. This must be
+     * called before calling publish and cannot be called more than once.
+     * Calling this will allow MediaControllers to retrieve a
+     * TransportController.
+     *
+     * @see TransportController
+     * @return The TransportPerformer created for this session
+     */
+    public TransportPerformer setTransportPerformerEnabled() {
+        if (mPerformer != null) {
+            throw new IllegalStateException("setTransportPerformer can only be called once.");
+        }
+        if (mPublished) {
+            throw new IllegalStateException("setTransportPerformer cannot be called after publish");
+        }
+
+        mPerformer = new TransportPerformer(mBinder);
+        try {
+            mBinder.setTransportPerformerEnabled();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Failure in setTransportPerformerEnabled.", e);
+        }
+        return mPerformer;
+    }
+
+    /**
+     * Retrieves the TransportPerformer used by this session. If called before
+     * {@link #setTransportPerformerEnabled} null will be returned.
+     *
+     * @return The TransportPerformer associated with this session or null
+     */
+    public TransportPerformer getTransportPerformer() {
+        return mPerformer;
+    }
+
+    /**
+     * Call after you have finished setting up the session. This will make it
+     * available to listeners and begin pushing updates to MediaControllers.
+     * This can only be called once.
+     */
+    public void publish() {
+        if (mPublished) {
+            throw new RuntimeException("publish() may only be called once.");
+        }
+        try {
+            mBinder.publish();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Failure in publish.", e);
+        }
+        mPublished = true;
+    }
+
+    /**
+     * Send a proprietary event to all MediaControllers listening to this
+     * Session. It's up to the Controller/Session owner to determine the meaning
+     * of any events.
+     *
+     * @param event The name of the event to send
+     * @param extras Any extras included with the event
+     */
+    public void sendEvent(String event, Bundle extras) {
+        if (TextUtils.isEmpty(event)) {
+            throw new IllegalArgumentException("event cannot be null or empty");
+        }
+        try {
+            mBinder.sendEvent(event, extras);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error sending event", e);
+        }
+    }
+
+    /**
+     * This must be called when an app has finished performing playback. If
+     * playback is expected to start again shortly the session can be left open,
+     * but it must be released if your activity or service is being destroyed.
+     */
+    public void release() {
+        try {
+            mBinder.destroy();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error releasing session: ", e);
+        }
+    }
+
+    /**
+     * Retrieve a token object that can be used by apps to create a
+     * {@link SessionController} for interacting with this session. The owner of
+     * the session is responsible for deciding how to distribute these tokens.
+     *
+     * @return A token that can be used to create a MediaController for this
+     *         session
+     */
+    public SessionToken getSessionToken() {
+        return mSessionToken;
+    }
+
+    /**
+     * Connect to the current route using the specified request.
+     * <p>
+     * Connection updates will be sent to the callback's
+     * {@link Callback#onRouteConnected(Route)} and
+     * {@link Callback#onRouteDisconnected(Route, int)} methods. If the
+     * connection fails {@link Callback#onRouteDisconnected(Route, int)}
+     * will be called.
+     * <p>
+     * If you already have a connection to this route it will be disconnected
+     * before the new connection is established. TODO add an easy way to compare
+     * MediaRouteOptions.
+     *
+     * @param route The route the app is trying to connect to.
+     * @param request The connection request to use.
+     */
+    public void connect(RouteInfo route, RouteOptions request) {
+        if (route == null) {
+            throw new IllegalArgumentException("Must specify the route");
+        }
+        if (request == null) {
+            throw new IllegalArgumentException("Must specify the connection request");
+        }
+        try {
+            mBinder.connectToRoute(route, request);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error starting connection to route", e);
+        }
+    }
+
+    /**
+     * Disconnect from the current route. After calling you will be switched
+     * back to the default route.
+     *
+     * @param route The route to disconnect from.
+     */
+    public void disconnect(RouteInfo route) {
+        // TODO
+    }
+
+    /**
+     * Set the list of route options your app is interested in connecting to. It
+     * will be used for picking valid routes.
+     *
+     * @param options The set of route options your app may use to connect.
+     */
+    public void setRouteOptions(List<RouteOptions> options) {
+        try {
+            mBinder.setRouteOptions(options);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error setting route options.", e);
+        }
+    }
+
+    /**
+     * @hide
+     * TODO allow multiple listeners for the same interface, allow removal
+     */
+    public void addInterfaceListener(String iface,
+            RouteInterface.EventListener listener) {
+        mInterfaceListeners.put(iface, listener);
+    }
+
+    /**
+     * @hide
+     */
+    public boolean sendRouteCommand(RouteCommand command, ResultReceiver cb) {
+        try {
+            mBinder.sendRouteCommand(command, cb);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error sending command to route.", e);
+            return false;
+        }
+        return true;
+    }
+
+    private MessageHandler getHandlerForCallbackLocked(Callback cb) {
+        if (cb == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+            MessageHandler handler = mCallbacks.get(i);
+            if (cb == handler.mCallback) {
+                return handler;
+            }
+        }
+        return null;
+    }
+
+    private boolean removeCallbackLocked(Callback cb) {
+        if (cb == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+            MessageHandler handler = mCallbacks.get(i);
+            if (cb == handler.mCallback) {
+                mCallbacks.remove(i);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void postCommand(String command, Bundle extras, ResultReceiver resultCb) {
+        Command cmd = new Command(command, extras, resultCb);
+        synchronized (mLock) {
+            for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+                mCallbacks.get(i).post(MSG_COMMAND, cmd);
+            }
+        }
+    }
+
+    private void postMediaButton(Intent mediaButtonIntent) {
+        synchronized (mLock) {
+            for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+                mCallbacks.get(i).post(MSG_MEDIA_BUTTON, mediaButtonIntent);
+            }
+        }
+    }
+
+    private void postRequestRouteChange(RouteInfo route) {
+        synchronized (mLock) {
+            for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+                mCallbacks.get(i).post(MSG_ROUTE_CHANGE, route);
+            }
+        }
+    }
+
+    private void postRouteConnected(RouteInfo route, RouteOptions options) {
+        synchronized (mLock) {
+            mRoute = new Route(route, options, this);
+            for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+                mCallbacks.get(i).post(MSG_ROUTE_CONNECTED, mRoute);
+            }
+        }
+    }
+
+    /**
+     * Receives commands or updates from controllers and routes. An app can
+     * specify what commands and buttons it supports by setting them on the
+     * MediaSession (TODO).
+     */
+    public abstract static class Callback {
+
+        public Callback() {
+        }
+
+        /**
+         * Called when a media button is pressed and this session has the
+         * highest priority or a controller sends a media button event to the
+         * session. TODO determine if using Intents identical to the ones
+         * RemoteControlClient receives is useful
+         * <p>
+         * The intent will be of type {@link Intent#ACTION_MEDIA_BUTTON} with a
+         * KeyEvent in {@link Intent#EXTRA_KEY_EVENT}
+         *
+         * @param mediaButtonIntent an intent containing the KeyEvent as an
+         *            extra
+         */
+        public void onMediaButton(Intent mediaButtonIntent) {
+        }
+
+        /**
+         * Called when a controller has sent a custom command to this session.
+         * The owner of the session may handle custom commands but is not
+         * required to.
+         *
+         * @param command
+         * @param extras optional
+         */
+        public void onCommand(String command, Bundle extras, ResultReceiver cb) {
+        }
+
+        /**
+         * Called when the user has selected a different route to connect to.
+         * The app is responsible for connecting to the new route and migrating
+         * ongoing playback if necessary.
+         *
+         * @param route
+         */
+        public void onRequestRouteChange(RouteInfo route) {
+        }
+
+        /**
+         * Called when a route has successfully connected. Calls to the route
+         * are now valid.
+         *
+         * @param route The route that was connected
+         */
+        public void onRouteConnected(Route route) {
+        }
+
+        /**
+         * Called when a route was disconnected. Further calls to the route will
+         * fail. If available a reason for being disconnected will be provided.
+         * <p>
+         * Valid reasons are:
+         * <ul>
+         * </ul>
+         *
+         * @param route The route that disconnected
+         * @param reason The reason for the disconnect
+         */
+        public void onRouteDisconnected(Route route, int reason) {
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public static class CallbackStub extends ISessionCallback.Stub {
+        private WeakReference<Session> mMediaSession;
+
+        public void setMediaSession(Session session) {
+            mMediaSession = new WeakReference<Session>(session);
+        }
+
+        @Override
+        public void onCommand(String command, Bundle extras, ResultReceiver cb)
+                throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                session.postCommand(command, extras, cb);
+            }
+        }
+
+        @Override
+        public void onMediaButton(Intent mediaButtonIntent) throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                session.postMediaButton(mediaButtonIntent);
+            }
+        }
+
+        @Override
+        public void onRequestRouteChange(RouteInfo route) throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                session.postRequestRouteChange(route);
+            }
+        }
+
+        @Override
+        public void onRouteConnected(RouteInfo route, RouteOptions options) {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                session.postRouteConnected(route, options);
+            }
+        }
+
+        @Override
+        public void onPlay() throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onPlay();
+                }
+            }
+        }
+
+        @Override
+        public void onPause() throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onPause();
+                }
+            }
+        }
+
+        @Override
+        public void onStop() throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onStop();
+                }
+            }
+        }
+
+        @Override
+        public void onNext() throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onNext();
+                }
+            }
+        }
+
+        @Override
+        public void onPrevious() throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onPrevious();
+                }
+            }
+        }
+
+        @Override
+        public void onFastForward() throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onFastForward();
+                }
+            }
+        }
+
+        @Override
+        public void onRewind() throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onRewind();
+                }
+            }
+        }
+
+        @Override
+        public void onSeekTo(long pos) throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onSeekTo(pos);
+                }
+            }
+        }
+
+        @Override
+        public void onRate(Rating rating) throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                TransportPerformer tp = session.getTransportPerformer();
+                if (tp != null) {
+                    tp.onRate(rating);
+                }
+            }
+        }
+
+        @Override
+        public void onRouteEvent(RouteEvent event) throws RemoteException {
+            Session session = mMediaSession.get();
+            if (session != null) {
+                RouteInterface.EventListener iface
+                        = session.mInterfaceListeners.get(event.getIface());
+                Log.d(TAG, "Received route event on iface " + event.getIface() + ". Listener is "
+                        + iface);
+                if (iface != null) {
+                    iface.onEvent(event.getEvent(), event.getExtras());
+                }
+            }
+        }
+
+        @Override
+        public void onRouteStateChange(int state) throws RemoteException {
+            // TODO
+
+        }
+
+    }
+
+    private class MessageHandler extends Handler {
+        private Session.Callback mCallback;
+
+        public MessageHandler(Looper looper, Session.Callback callback) {
+            super(looper, null, true);
+            mCallback = callback;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            synchronized (mLock) {
+                if (mCallback == null) {
+                    return;
+                }
+                switch (msg.what) {
+                    case MSG_MEDIA_BUTTON:
+                        mCallback.onMediaButton((Intent) msg.obj);
+                        break;
+                    case MSG_COMMAND:
+                        Command cmd = (Command) msg.obj;
+                        mCallback.onCommand(cmd.command, cmd.extras, cmd.stub);
+                        break;
+                    case MSG_ROUTE_CHANGE:
+                        mCallback.onRequestRouteChange((RouteInfo) msg.obj);
+                        break;
+                    case MSG_ROUTE_CONNECTED:
+                        mCallback.onRouteConnected((Route) msg.obj);
+                        break;
+                }
+            }
+        }
+
+        public void post(int what, Object obj) {
+            obtainMessage(what, obj).sendToTarget();
+        }
+    }
+
+    private static final class Command {
+        public final String command;
+        public final Bundle extras;
+        public final ResultReceiver stub;
+
+        public Command(String command, Bundle extras, ResultReceiver stub) {
+            this.command = command;
+            this.extras = extras;
+            this.stub = stub;
+        }
+    }
+}
diff --git a/media/java/android/media/session/SessionController.java b/media/java/android/media/session/SessionController.java
new file mode 100644
index 0000000..dc4f7d9
--- /dev/null
+++ b/media/java/android/media/session/SessionController.java
@@ -0,0 +1,365 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+
+/**
+ * Allows an app to interact with an ongoing media session. Media buttons and
+ * other commands can be sent to the session. A callback may be registered to
+ * receive updates from the session, such as metadata and play state changes.
+ * <p>
+ * A MediaController can be created through {@link SessionManager} if you
+ * hold the "android.permission.MEDIA_CONTENT_CONTROL" permission or directly if
+ * you have a {@link SessionToken} from the session owner.
+ * <p>
+ * MediaController objects are thread-safe.
+ */
+public final class SessionController {
+    private static final String TAG = "SessionController";
+
+    private static final int MSG_EVENT = 1;
+    private static final int MESSAGE_PLAYBACK_STATE = 2;
+    private static final int MESSAGE_METADATA = 3;
+    private static final int MSG_ROUTE = 4;
+
+    private final ISessionController mSessionBinder;
+
+    private final CallbackStub mCbStub = new CallbackStub(this);
+    private final ArrayList<MessageHandler> mCallbacks = new ArrayList<MessageHandler>();
+    private final Object mLock = new Object();
+
+    private boolean mCbRegistered = false;
+
+    private TransportController mTransportController;
+
+    private SessionController(ISessionController sessionBinder) {
+        mSessionBinder = sessionBinder;
+    }
+
+    /**
+     * @hide
+     */
+    public static SessionController fromBinder(ISessionController sessionBinder) {
+        SessionController controller = new SessionController(sessionBinder);
+        try {
+            controller.mSessionBinder.registerCallbackListener(controller.mCbStub);
+            if (controller.mSessionBinder.isTransportControlEnabled()) {
+                controller.mTransportController = new TransportController(sessionBinder);
+            }
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "MediaController created with expired token", e);
+            controller = null;
+        }
+        return controller;
+    }
+
+    /**
+     * Get a new MediaController for a MediaSessionToken. If successful the
+     * controller returned will be connected to the session that generated the
+     * token.
+     *
+     * @param token The session token to use
+     * @return A controller for the session or null
+     */
+    public static SessionController fromToken(SessionToken token) {
+        return fromBinder(token.getBinder());
+    }
+
+    /**
+     * Get a TransportController if the session supports it. If it is not
+     * supported null will be returned.
+     *
+     * @return A TransportController or null
+     */
+    public TransportController getTransportController() {
+        return mTransportController;
+    }
+
+    /**
+     * Send the specified media button to the session. Only media keys can be
+     * sent using this method.
+     *
+     * @param keycode The media button keycode, such as
+     *            {@link KeyEvent#KEYCODE_MEDIA_PLAY}.
+     */
+    public void sendMediaButton(int keycode) {
+        if (!KeyEvent.isMediaKey(keycode)) {
+            throw new IllegalArgumentException("May only send media buttons through "
+                    + "sendMediaButton");
+        }
+        // TODO do something better than key down/up events
+        KeyEvent event = new KeyEvent(KeyEvent.ACTION_UP, keycode);
+        try {
+            mSessionBinder.sendMediaButton(event);
+        } catch (RemoteException e) {
+            Log.d(TAG, "Dead object in sendMediaButton", e);
+        }
+    }
+
+    /**
+     * Adds a callback to receive updates from the Session. Updates will be
+     * posted on the caller's thread.
+     *
+     * @param cb The callback object, must not be null
+     */
+    public void addCallback(Callback cb) {
+        addCallback(cb, null);
+    }
+
+    /**
+     * Adds a callback to receive updates from the session. Updates will be
+     * posted on the specified handler's thread.
+     *
+     * @param cb Cannot be null.
+     * @param handler The handler to post updates on. If null the callers thread
+     *            will be used
+     */
+    public void addCallback(Callback cb, Handler handler) {
+        if (handler == null) {
+            handler = new Handler();
+        }
+        synchronized (mLock) {
+            addCallbackLocked(cb, handler);
+        }
+    }
+
+    /**
+     * Stop receiving updates on the specified callback. If an update has
+     * already been posted you may still receive it after calling this method.
+     *
+     * @param cb The callback to remove
+     */
+    public void removeCallback(Callback cb) {
+        synchronized (mLock) {
+            removeCallbackLocked(cb);
+        }
+    }
+
+    /**
+     * Sends a generic command to the session. It is up to the session creator
+     * to decide what commands and parameters they will support. As such,
+     * commands should only be sent to sessions that the controller owns.
+     *
+     * @param command The command to send
+     * @param params Any parameters to include with the command
+     * @param cb The callback to receive the result on
+     */
+    public void sendCommand(String command, Bundle params, ResultReceiver cb) {
+        if (TextUtils.isEmpty(command)) {
+            throw new IllegalArgumentException("command cannot be null or empty");
+        }
+        try {
+            mSessionBinder.sendCommand(command, params, cb);
+        } catch (RemoteException e) {
+            Log.d(TAG, "Dead object in sendCommand.", e);
+        }
+    }
+
+    /**
+     * Request that the route picker be shown for this session. This should
+     * generally be called in response to a user action.
+     */
+    public void showRoutePicker() {
+        try {
+            mSessionBinder.showRoutePicker();
+        } catch (RemoteException e) {
+            Log.d(TAG, "Dead object in showRoutePicker", e);
+        }
+    }
+
+    /*
+     * @hide
+     */
+    ISessionController getSessionBinder() {
+        return mSessionBinder;
+    }
+
+    private void addCallbackLocked(Callback cb, Handler handler) {
+        if (cb == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        if (handler == null) {
+            throw new IllegalArgumentException("Handler cannot be null");
+        }
+        if (getHandlerForCallbackLocked(cb) != null) {
+            Log.w(TAG, "Callback is already added, ignoring");
+            return;
+        }
+        MessageHandler holder = new MessageHandler(handler.getLooper(), cb);
+        mCallbacks.add(holder);
+
+        if (!mCbRegistered) {
+            try {
+                mSessionBinder.registerCallbackListener(mCbStub);
+                mCbRegistered = true;
+            } catch (RemoteException e) {
+                Log.d(TAG, "Dead object in registerCallback", e);
+            }
+        }
+    }
+
+    private boolean removeCallbackLocked(Callback cb) {
+        if (cb == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+            MessageHandler handler = mCallbacks.get(i);
+            if (cb == handler.mCallback) {
+                mCallbacks.remove(i);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private MessageHandler getHandlerForCallbackLocked(Callback cb) {
+        if (cb == null) {
+            throw new IllegalArgumentException("Callback cannot be null");
+        }
+        for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+            MessageHandler handler = mCallbacks.get(i);
+            if (cb == handler.mCallback) {
+                return handler;
+            }
+        }
+        return null;
+    }
+
+    private void postEvent(String event, Bundle extras) {
+        synchronized (mLock) {
+            for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+                mCallbacks.get(i).post(MSG_EVENT, event, extras);
+            }
+        }
+    }
+
+    private void postRouteChanged(RouteInfo route) {
+        synchronized (mLock) {
+            for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+                mCallbacks.get(i).post(MSG_ROUTE, route, null);
+            }
+        }
+    }
+
+    /**
+     * Callback for receiving updates on from the session. A Callback can be
+     * registered using {@link #addCallback}
+     */
+    public static abstract class Callback {
+        /**
+         * Override to handle custom events sent by the session owner without a
+         * specified interface. Controllers should only handle these for
+         * sessions they own.
+         *
+         * @param event
+         */
+        public void onEvent(String event, Bundle extras) {
+        }
+
+        /**
+         * Override to handle route changes for this session.
+         *
+         * @param route
+         */
+        public void onRouteChanged(RouteInfo route) {
+        }
+    }
+
+    private final static class CallbackStub extends ISessionControllerCallback.Stub {
+        private final WeakReference<SessionController> mController;
+
+        public CallbackStub(SessionController controller) {
+            mController = new WeakReference<SessionController>(controller);
+        }
+
+        @Override
+        public void onEvent(String event, Bundle extras) {
+            SessionController controller = mController.get();
+            if (controller != null) {
+                controller.postEvent(event, extras);
+            }
+        }
+
+        @Override
+        public void onRouteChanged(RouteInfo route) {
+            SessionController controller = mController.get();
+            if (controller != null) {
+                controller.postRouteChanged(route);
+            }
+        }
+
+        @Override
+        public void onPlaybackStateChanged(PlaybackState state) {
+            SessionController controller = mController.get();
+            if (controller != null) {
+                TransportController tc = controller.getTransportController();
+                if (tc != null) {
+                    tc.postPlaybackStateChanged(state);
+                }
+            }
+        }
+
+        @Override
+        public void onMetadataChanged(MediaMetadata metadata) {
+            SessionController controller = mController.get();
+            if (controller != null) {
+                TransportController tc = controller.getTransportController();
+                if (tc != null) {
+                    tc.postMetadataChanged(metadata);
+                }
+            }
+        }
+
+    }
+
+    private final static class MessageHandler extends Handler {
+        private final SessionController.Callback mCallback;
+
+        public MessageHandler(Looper looper, SessionController.Callback cb) {
+            super(looper, null, true);
+            mCallback = cb;
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_EVENT:
+                    mCallback.onEvent((String) msg.obj, msg.getData());
+                    break;
+                case MSG_ROUTE:
+                    mCallback.onRouteChanged((RouteInfo) msg.obj);
+            }
+        }
+
+        public void post(int what, Object obj, Bundle data) {
+            obtainMessage(what, obj).sendToTarget();
+        }
+    }
+
+}
diff --git a/media/java/android/media/session/SessionInfo.java b/media/java/android/media/session/SessionInfo.java
new file mode 100644
index 0000000..2b65528
--- /dev/null
+++ b/media/java/android/media/session/SessionInfo.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Information about a media session, including the owner's package name.
+ */
+public final class SessionInfo implements Parcelable {
+    private final String mId;
+    private final String mPackageName;
+
+    /**
+     * @hide
+     */
+    public SessionInfo(String id, String packageName) {
+        mId = id;
+        mPackageName = packageName;
+    }
+
+    private SessionInfo(Parcel in) {
+        mId = in.readString();
+        mPackageName = in.readString();
+    }
+
+    /**
+     * Get the package name of the owner of this session.
+     *
+     * @return The owner's package name
+     */
+    public String getPackageName() {
+        return mPackageName;
+    }
+
+    /**
+     * Get the unique id for this session.
+     *
+     * @return The id for the session.
+     */
+    public String getId() {
+        return mId;
+    }
+
+    @Override
+    public String toString() {
+        return "SessionInfo {id=" + mId + ", pkg=" + mPackageName + "}";
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeString(mId);
+        dest.writeString(mPackageName);
+    }
+
+    public static final Parcelable.Creator<SessionInfo> CREATOR
+            = new Parcelable.Creator<SessionInfo>() {
+        @Override
+        public SessionInfo createFromParcel(Parcel in) {
+            return new SessionInfo(in);
+        }
+
+        @Override
+        public SessionInfo[] newArray(int size) {
+            return new SessionInfo[size];
+        }
+    };
+}
diff --git a/media/java/android/media/session/SessionManager.java b/media/java/android/media/session/SessionManager.java
new file mode 100644
index 0000000..15bf0e3
--- /dev/null
+++ b/media/java/android/media/session/SessionManager.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.content.Context;
+import android.media.session.ISessionManager;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * MediaSessionManager allows the creation and control of MediaSessions in the
+ * system. A MediaSession enables publishing information about ongoing media and
+ * interacting with MediaControllers and MediaRoutes.
+ * <p>
+ * Use <code>Context.getSystemService(Context.MEDIA_SESSION_SERVICE)</code> to
+ * get an instance of this class.
+ * <p>
+ *
+ * @see Session
+ * @see SessionController
+ */
+public final class SessionManager {
+    private static final String TAG = "SessionManager";
+
+    private final ISessionManager mService;
+
+    private Context mContext;
+
+    /**
+     * @hide
+     */
+    public SessionManager(Context context) {
+        // Consider rewriting like DisplayManagerGlobal
+        // Decide if we need context
+        mContext = context;
+        IBinder b = ServiceManager.getService(Context.MEDIA_SESSION_SERVICE);
+        mService = ISessionManager.Stub.asInterface(b);
+    }
+
+    /**
+     * Creates a new session.
+     *
+     * @param tag A short name for debugging purposes
+     * @return a {@link Session} for the new session
+     */
+    public Session createSession(String tag) {
+        try {
+            Session.CallbackStub cbStub = new Session.CallbackStub();
+            Session session = new Session(mService
+                    .createSession(mContext.getPackageName(), cbStub, tag), cbStub);
+            cbStub.setMediaSession(session);
+
+            return session;
+        } catch (RemoteException e) {
+            Log.e(TAG, "Failed to create session: ", e);
+            return null;
+        }
+    }
+
+    /**
+     * Get a list of controllers for all ongoing sessions. This requires the
+     * android.Manifest.permission.MEDIA_CONTENT_CONTROL permission be held by
+     * the calling app.
+     *
+     * @return a list of controllers for ongoing sessions
+     */
+    public List<SessionController> getActiveSessions() {
+        // TODO
+        return new ArrayList<SessionController>();
+    }
+}
diff --git a/media/java/android/media/session/SessionToken.aidl b/media/java/android/media/session/SessionToken.aidl
new file mode 100644
index 0000000..db35f85
--- /dev/null
+++ b/media/java/android/media/session/SessionToken.aidl
@@ -0,0 +1,18 @@
+/* Copyright 2014, 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 android.media.session;
+
+parcelable SessionToken;
diff --git a/media/java/android/media/session/SessionToken.java b/media/java/android/media/session/SessionToken.java
new file mode 100644
index 0000000..59486f6
--- /dev/null
+++ b/media/java/android/media/session/SessionToken.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.media.session.ISessionController;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class SessionToken implements Parcelable {
+    private ISessionController mBinder;
+
+    /**
+     * @hide
+     */
+    SessionToken(ISessionController binder) {
+        mBinder = binder;
+    }
+
+    private SessionToken(Parcel in) {
+        mBinder = ISessionController.Stub.asInterface(in.readStrongBinder());
+    }
+
+    /**
+     * @hide
+     */
+    ISessionController getBinder() {
+        return mBinder;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeStrongBinder(mBinder.asBinder());
+    }
+
+    public static final Parcelable.Creator<SessionToken> CREATOR
+            = new Parcelable.Creator<SessionToken>() {
+        @Override
+        public SessionToken createFromParcel(Parcel in) {
+            return new SessionToken(in);
+        }
+
+        @Override
+        public SessionToken[] newArray(int size) {
+            return new SessionToken[size];
+        }
+    };
+}
diff --git a/media/java/android/media/session/TransportController.java b/media/java/android/media/session/TransportController.java
new file mode 100644
index 0000000..9574df6
--- /dev/null
+++ b/media/java/android/media/session/TransportController.java
@@ -0,0 +1,342 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.media.Rating;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.util.ArrayList;
+
+/**
+ * Interface for controlling media playback on a session. This allows an app to
+ * request changes in playback, retrieve the current playback state and
+ * metadata, and listen for changes to the playback state and metadata.
+ */
+public final class TransportController {
+    private static final String TAG = "TransportController";
+
+    private final Object mLock = new Object();
+    private final ArrayList<MessageHandler> mListeners = new ArrayList<MessageHandler>();
+    private final ISessionController mBinder;
+
+    /**
+     * @hide
+     */
+    public TransportController(ISessionController binder) {
+        mBinder = binder;
+    }
+
+    /**
+     * Start listening to changes in playback state.
+     */
+    public void addStateListener(TransportStateListener listener) {
+        addStateListener(listener, null);
+    }
+
+    public void addStateListener(TransportStateListener listener, Handler handler) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener cannot be null");
+        }
+        synchronized (mLock) {
+            if (getHandlerForListenerLocked(listener) != null) {
+                Log.w(TAG, "Listener is already added, ignoring");
+                return;
+            }
+            if (handler == null) {
+                handler = new Handler();
+            }
+
+            MessageHandler msgHandler = new MessageHandler(handler.getLooper(), listener);
+            mListeners.add(msgHandler);
+        }
+    }
+
+    /**
+     * Stop listening to changes in playback state.
+     */
+    public void removeStateListener(TransportStateListener listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener cannot be null");
+        }
+        synchronized (mLock) {
+            removeStateListenerLocked(listener);
+        }
+    }
+
+    /**
+     * Request that the player start its playback at its current position.
+     */
+    public void play() {
+        try {
+            mBinder.play();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling play.", e);
+        }
+    }
+
+    /**
+     * Request that the player pause its playback and stay at its current
+     * position.
+     */
+    public void pause() {
+        try {
+            mBinder.pause();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling pause.", e);
+        }
+    }
+
+    /**
+     * Request that the player stop its playback; it may clear its state in
+     * whatever way is appropriate.
+     */
+    public void stop() {
+        try {
+            mBinder.stop();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling stop.", e);
+        }
+    }
+
+    /**
+     * Move to a new location in the media stream.
+     *
+     * @param pos Position to move to, in milliseconds.
+     */
+    public void seekTo(long pos) {
+        try {
+            mBinder.seekTo(pos);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling seekTo.", e);
+        }
+    }
+
+    /**
+     * Start fast forwarding. If playback is already fast forwarding this may
+     * increase the rate.
+     */
+    public void fastForward() {
+        try {
+            mBinder.fastForward();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling fastForward.", e);
+        }
+    }
+
+    /**
+     * Skip to the next item.
+     */
+    public void next() {
+        try {
+            mBinder.next();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling next.", e);
+        }
+    }
+
+    /**
+     * Start rewinding. If playback is already rewinding this may increase the
+     * rate.
+     */
+    public void rewind() {
+        try {
+            mBinder.rewind();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling rewind.", e);
+        }
+    }
+
+    /**
+     * Skip to the previous item.
+     */
+    public void previous() {
+        try {
+            mBinder.previous();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling previous.", e);
+        }
+    }
+
+    /**
+     * Rate the current content. This will cause the rating to be set for the
+     * current user. The Rating type must match the type returned by
+     * {@link #getRatingType()}.
+     *
+     * @param rating The rating to set for the current content
+     */
+    public void rate(Rating rating) {
+        try {
+            mBinder.rate(rating);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling rate.", e);
+        }
+    }
+
+    /**
+     * Get the rating type supported by the session. One of:
+     * <ul>
+     * <li>{@link Rating#RATING_NONE}</li>
+     * <li>{@link Rating#RATING_HEART}</li>
+     * <li>{@link Rating#RATING_THUMB_UP_DOWN}</li>
+     * <li>{@link Rating#RATING_3_STARS}</li>
+     * <li>{@link Rating#RATING_4_STARS}</li>
+     * <li>{@link Rating#RATING_5_STARS}</li>
+     * <li>{@link Rating#RATING_PERCENTAGE}</li>
+     * </ul>
+     *
+     * @return The supported rating type
+     */
+    public int getRatingType() {
+        try {
+            return mBinder.getRatingType();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling getRatingType.", e);
+            return Rating.RATING_NONE;
+        }
+    }
+
+    /**
+     * Get the current playback state for this session.
+     *
+     * @return The current PlaybackState or null
+     */
+    public PlaybackState getPlaybackState() {
+        try {
+            return mBinder.getPlaybackState();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling getPlaybackState.", e);
+            return null;
+        }
+    }
+
+    /**
+     * Get the current metadata for this session.
+     *
+     * @return The current MediaMetadata or null.
+     */
+    public MediaMetadata getMetadata() {
+        try {
+            return mBinder.getMetadata();
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Error calling getMetadata.", e);
+            return null;
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public final void postPlaybackStateChanged(PlaybackState state) {
+        synchronized (mLock) {
+            for (int i = mListeners.size() - 1; i >= 0; i--) {
+                mListeners.get(i).post(MessageHandler.MSG_UPDATE_PLAYBACK_STATE, state);
+            }
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public final void postMetadataChanged(MediaMetadata metadata) {
+        synchronized (mLock) {
+            for (int i = mListeners.size() - 1; i >= 0; i--) {
+                mListeners.get(i).post(MessageHandler.MSG_UPDATE_METADATA,
+                        metadata);
+            }
+        }
+    }
+
+    private MessageHandler getHandlerForListenerLocked(TransportStateListener listener) {
+        for (int i = mListeners.size() - 1; i >= 0; i--) {
+            MessageHandler handler = mListeners.get(i);
+            if (listener == handler.mListener) {
+                return handler;
+            }
+        }
+        return null;
+    }
+
+    private boolean removeStateListenerLocked(TransportStateListener listener) {
+        for (int i = mListeners.size() - 1; i >= 0; i--) {
+            if (listener == mListeners.get(i).mListener) {
+                mListeners.remove(i);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Register using {@link #addStateListener} to receive updates when there
+     * are playback changes on the session.
+     */
+    public static abstract class TransportStateListener {
+        private MessageHandler mHandler;
+        /**
+         * Override to handle changes in playback state.
+         *
+         * @param state The new playback state of the session
+         */
+        public void onPlaybackStateChanged(PlaybackState state) {
+        }
+
+        /**
+         * Override to handle changes to the current metadata.
+         *
+         * @see MediaMetadata
+         * @param metadata The current metadata for the session or null
+         */
+        public void onMetadataChanged(MediaMetadata metadata) {
+        }
+
+        private void setHandler(Handler handler) {
+            mHandler = new MessageHandler(handler.getLooper(), this);
+        }
+    }
+
+    private static class MessageHandler extends Handler {
+        private static final int MSG_UPDATE_PLAYBACK_STATE = 1;
+        private static final int MSG_UPDATE_METADATA = 2;
+
+        private TransportStateListener mListener;
+
+        public MessageHandler(Looper looper, TransportStateListener cb) {
+            super(looper, null, true);
+            mListener = cb;
+        }
+
+        public void post(int msg, Object obj) {
+            obtainMessage(msg, obj).sendToTarget();
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_UPDATE_PLAYBACK_STATE:
+                    mListener.onPlaybackStateChanged((PlaybackState) msg.obj);
+                    break;
+                case MSG_UPDATE_METADATA:
+                    mListener.onMetadataChanged((MediaMetadata) msg.obj);
+                    break;
+            }
+        }
+    }
+
+}
diff --git a/media/java/android/media/session/TransportPerformer.java b/media/java/android/media/session/TransportPerformer.java
new file mode 100644
index 0000000..187f48d
--- /dev/null
+++ b/media/java/android/media/session/TransportPerformer.java
@@ -0,0 +1,350 @@
+/*
+ * Copyright (C) 2014 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 android.media.session;
+
+import android.media.AudioManager;
+import android.media.Rating;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.util.Log;
+
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+
+/**
+ * Allows broadcasting of playback changes.
+ */
+public final class TransportPerformer {
+    private static final String TAG = "TransportPerformer";
+    private final Object mLock = new Object();
+    private final ArrayList<MessageHandler> mListeners = new ArrayList<MessageHandler>();
+
+    private ISession mBinder;
+
+    /**
+     * @hide
+     */
+    public TransportPerformer(ISession binder) {
+        mBinder = binder;
+    }
+
+    /**
+     * Add a listener to receive updates on.
+     *
+     * @param listener The callback object
+     */
+    public void addListener(Listener listener) {
+        addListener(listener, null);
+    }
+
+    /**
+     * Add a listener to receive updates on. The updates will be posted to the
+     * specified handler. If no handler is provided they will be posted to the
+     * caller's thread.
+     *
+     * @param listener The listener to receive updates on
+     * @param handler The handler to post the updates on
+     */
+    public void addListener(Listener listener, Handler handler) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener cannot be null");
+        }
+        synchronized (mLock) {
+            if (getHandlerForListenerLocked(listener) != null) {
+                Log.w(TAG, "Listener is already added, ignoring");
+            }
+            if (handler == null) {
+                handler = new Handler();
+            }
+            MessageHandler msgHandler = new MessageHandler(handler.getLooper(), listener);
+            mListeners.add(msgHandler);
+        }
+    }
+
+    /**
+     * Stop receiving updates on the specified handler. If an update has already
+     * been posted you may still receive it after this call returns.
+     *
+     * @param listener The listener to stop receiving updates on
+     */
+    public void removeListener(Listener listener) {
+        if (listener == null) {
+            throw new IllegalArgumentException("Listener cannot be null");
+        }
+        synchronized (mLock) {
+            removeListenerLocked(listener);
+        }
+    }
+
+    /**
+     * Update the current playback state.
+     *
+     * @param state The current state of playback
+     */
+    public final void setPlaybackState(PlaybackState state) {
+        try {
+            mBinder.setPlaybackState(state);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Dead object in setPlaybackState.", e);
+        }
+    }
+
+    /**
+     * Update the current metadata. New metadata can be created using
+     * {@link MediaMetadata.Builder}.
+     *
+     * @param metadata The new metadata
+     */
+    public final void setMetadata(MediaMetadata metadata) {
+        try {
+            mBinder.setMetadata(metadata);
+        } catch (RemoteException e) {
+            Log.wtf(TAG, "Dead object in setPlaybackState.", e);
+        }
+    }
+
+    /**
+     * @hide
+     */
+    public final void onPlay() {
+        post(MessageHandler.MESSAGE_PLAY);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onPause() {
+        post(MessageHandler.MESSAGE_PAUSE);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onStop() {
+        post(MessageHandler.MESSAGE_STOP);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onNext() {
+        post(MessageHandler.MESSAGE_NEXT);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onPrevious() {
+        post(MessageHandler.MESSAGE_PREVIOUS);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onFastForward() {
+        post(MessageHandler.MESSAGE_FAST_FORWARD);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onRewind() {
+        post(MessageHandler.MESSAGE_REWIND);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onSeekTo(long pos) {
+        post(MessageHandler.MESSAGE_SEEK_TO, pos);
+    }
+
+    /**
+     * @hide
+     */
+    public final void onRate(Rating rating) {
+        post(MessageHandler.MESSAGE_RATE, rating);
+    }
+
+    private MessageHandler getHandlerForListenerLocked(Listener listener) {
+        for (int i = mListeners.size() - 1; i >= 0; i--) {
+            MessageHandler handler = mListeners.get(i);
+            if (listener == handler.mListener) {
+                return handler;
+            }
+        }
+        return null;
+    }
+
+    private boolean removeListenerLocked(Listener listener) {
+        for (int i = mListeners.size() - 1; i >= 0; i--) {
+            if (listener == mListeners.get(i).mListener) {
+                mListeners.remove(i);
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void post(int what, Object obj) {
+        synchronized (mLock) {
+            for (int i = mListeners.size() - 1; i >= 0; i--) {
+                mListeners.get(i).post(what, obj);
+            }
+        }
+    }
+
+    private void post(int what) {
+        post(what, null);
+    }
+
+    /**
+     * Extend Listener to handle transport controls. Listeners can be registered
+     * using {@link #addListener}.
+     */
+    public static abstract class Listener {
+
+        /**
+         * Override to handle requests to begin playback.
+         */
+        public void onPlay() {
+        }
+
+        /**
+         * Override to handle requests to pause playback.
+         */
+        public void onPause() {
+        }
+
+        /**
+         * Override to handle requests to skip to the next media item.
+         */
+        public void onNext() {
+        }
+
+        /**
+         * Override to handle requests to skip to the previous media item.
+         */
+        public void onPrevious() {
+        }
+
+        /**
+         * Override to handle requests to fast forward.
+         */
+        public void onFastForward() {
+        }
+
+        /**
+         * Override to handle requests to rewind.
+         */
+        public void onRewind() {
+        }
+
+        /**
+         * Override to handle requests to stop playback.
+         */
+        public void onStop() {
+        }
+
+        /**
+         * Override to handle requests to seek to a specific position in ms.
+         *
+         * @param pos New position to move to, in milliseconds.
+         */
+        public void onSeekTo(long pos) {
+        }
+
+        /**
+         * Override to handle the item being rated.
+         *
+         * @param rating
+         */
+        public void onRate(Rating rating) {
+        }
+
+        /**
+         * Report that audio focus has changed on the app. This only happens if
+         * you have indicated you have started playing with
+         * {@link #setPlaybackState}.
+         *
+         * @param focusChange The type of focus change, TBD.
+         */
+        public void onRouteFocusChange(int focusChange) {
+        }
+    }
+
+    private class MessageHandler extends Handler {
+        private static final int MESSAGE_PLAY = 1;
+        private static final int MESSAGE_PAUSE = 2;
+        private static final int MESSAGE_STOP = 3;
+        private static final int MESSAGE_NEXT = 4;
+        private static final int MESSAGE_PREVIOUS = 5;
+        private static final int MESSAGE_FAST_FORWARD = 6;
+        private static final int MESSAGE_REWIND = 7;
+        private static final int MESSAGE_SEEK_TO = 8;
+        private static final int MESSAGE_RATE = 9;
+
+        private Listener mListener;
+
+        public MessageHandler(Looper looper, Listener cb) {
+            super(looper);
+            mListener = cb;
+        }
+
+        public void post(int what, Object obj) {
+            obtainMessage(what, obj).sendToTarget();
+        }
+
+        public void post(int what) {
+            post(what, null);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MESSAGE_PLAY:
+                    mListener.onPlay();
+                    break;
+                case MESSAGE_PAUSE:
+                    mListener.onPause();
+                    break;
+                case MESSAGE_STOP:
+                    mListener.onStop();
+                    break;
+                case MESSAGE_NEXT:
+                    mListener.onNext();
+                    break;
+                case MESSAGE_PREVIOUS:
+                    mListener.onPrevious();
+                    break;
+                case MESSAGE_FAST_FORWARD:
+                    mListener.onFastForward();
+                    break;
+                case MESSAGE_REWIND:
+                    mListener.onRewind();
+                    break;
+                case MESSAGE_SEEK_TO:
+                    mListener.onSeekTo((Long) msg.obj);
+                    break;
+                case MESSAGE_RATE:
+                    mListener.onRate((Rating) msg.obj);
+                    break;
+            }
+        }
+    }
+}
diff --git a/media/java/android/media/videoeditor/AudioTrack.java b/media/java/android/media/videoeditor/AudioTrack.java
deleted file mode 100644
index c5cc2ca..0000000
--- a/media/java/android/media/videoeditor/AudioTrack.java
+++ /dev/null
@@ -1,658 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.ref.SoftReference;
-
-import android.media.videoeditor.MediaArtistNativeHelper.Properties;
-
-/**
- * This class allows to handle an audio track. This audio file is mixed with the
- * audio samples of the media items.
- * {@hide}
- */
-public class AudioTrack {
-
-    /**
-     *  Instance variables
-     *  Private object for calling native methods via MediaArtistNativeHelper
-     */
-    private final MediaArtistNativeHelper mMANativeHelper;
-    private final String mUniqueId;
-    private final String mFilename;
-    private long mStartTimeMs;
-    private long mTimelineDurationMs;
-    private int mVolumePercent;
-    private long mBeginBoundaryTimeMs;
-    private long mEndBoundaryTimeMs;
-    private boolean mLoop;
-    private boolean mMuted;
-    private final long mDurationMs;
-    private final int mAudioChannels;
-    private final int mAudioType;
-    private final int mAudioBitrate;
-    private final int mAudioSamplingFrequency;
-    /**
-     *  Ducking variables
-     */
-    private int mDuckingThreshold;
-    private int mDuckedTrackVolume;
-    private boolean mIsDuckingEnabled;
-
-    /**
-     *  The audio waveform filename
-     */
-    private String mAudioWaveformFilename;
-
-    /**
-     *  The audio waveform data
-     */
-    private SoftReference<WaveformData> mWaveformData;
-
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private AudioTrack() throws IOException {
-        this(null, null, null);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param editor The video editor reference
-     * @param audioTrackId The audio track id
-     * @param filename The absolute file name
-     *
-     * @throws IOException if file is not found
-     * @throws IllegalArgumentException if file format is not supported or if
-     *         the codec is not supported or if editor is not of type
-     *         VideoEditorImpl.
-     */
-    public AudioTrack(VideoEditor editor, String audioTrackId, String filename) throws IOException {
-        this(editor, audioTrackId, filename, 0, 0, MediaItem.END_OF_FILE, false, 100, false, false,
-                0, 0, null);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param editor The video editor reference
-     * @param audioTrackId The audio track id
-     * @param filename The audio filename. In case file contains Audio and Video,
-     *         only the Audio stream will be used as Audio Track.
-     * @param startTimeMs the start time in milliseconds (relative to the
-     *         timeline)
-     * @param beginMs start time in the audio track in milliseconds (relative to
-     *         the beginning of the audio track)
-     * @param endMs end time in the audio track in milliseconds (relative to the
-     *         beginning of the audio track)
-     * @param loop true to loop the audio track
-     * @param volume The volume in percentage
-     * @param muted true if the audio track is muted
-     * @param threshold Ducking will be activated when the relative energy in
-     *         the media items audio signal goes above this value. The valid
-     *         range of values is 0 to 90.
-     * @param duckedTrackVolume The relative volume of the audio track when
-     *         ducking is active. The valid range of values is 0 to 100.
-     * @param audioWaveformFilename The name of the waveform file
-     *
-     * @throws IOException if file is not found
-     * @throws IllegalArgumentException if file format is not supported or if
-     *             the codec is not supported or if editor is not of type
-     *             VideoEditorImpl.
-     */
-    AudioTrack(VideoEditor editor, String audioTrackId, String filename,
-               long startTimeMs,long beginMs, long endMs, boolean loop,
-               int volume, boolean muted,boolean duckingEnabled,
-               int duckThreshold, int duckedTrackVolume,
-            String audioWaveformFilename) throws IOException {
-        Properties properties = null;
-
-        File file = new File(filename);
-        if (!file.exists()) {
-            throw new IOException(filename + " not found ! ");
-        }
-
-        /*Compare file_size with 2GB*/
-        if (VideoEditor.MAX_SUPPORTED_FILE_SIZE <= file.length()) {
-            throw new IllegalArgumentException("File size is more than 2GB");
-        }
-
-        if (editor instanceof VideoEditorImpl) {
-            mMANativeHelper = ((VideoEditorImpl)editor).getNativeContext();
-        } else {
-            throw new IllegalArgumentException("editor is not of type VideoEditorImpl");
-        }
-        try {
-          properties = mMANativeHelper.getMediaProperties(filename);
-        } catch (Exception e) {
-            throw new IllegalArgumentException(e.getMessage() + " : " + filename);
-        }
-        int fileType = mMANativeHelper.getFileType(properties.fileType);
-        switch (fileType) {
-            case MediaProperties.FILE_3GP:
-            case MediaProperties.FILE_MP4:
-            case MediaProperties.FILE_MP3:
-            case MediaProperties.FILE_AMR:
-                break;
-
-            default: {
-                throw new IllegalArgumentException("Unsupported input file type: " + fileType);
-            }
-        }
-        switch (mMANativeHelper.getAudioCodecType(properties.audioFormat)) {
-            case MediaProperties.ACODEC_AMRNB:
-            case MediaProperties.ACODEC_AMRWB:
-            case MediaProperties.ACODEC_AAC_LC:
-            case MediaProperties.ACODEC_MP3:
-                break;
-            default:
-                throw new IllegalArgumentException("Unsupported Audio Codec Format in Input File");
-        }
-
-        if (endMs == MediaItem.END_OF_FILE) {
-            endMs = properties.audioDuration;
-        }
-
-        mUniqueId = audioTrackId;
-        mFilename = filename;
-        mStartTimeMs = startTimeMs;
-        mDurationMs = properties.audioDuration;
-        mAudioChannels = properties.audioChannels;
-        mAudioBitrate = properties.audioBitrate;
-        mAudioSamplingFrequency = properties.audioSamplingFrequency;
-        mAudioType = properties.audioFormat;
-        mTimelineDurationMs = endMs - beginMs;
-        mVolumePercent = volume;
-
-        mBeginBoundaryTimeMs = beginMs;
-        mEndBoundaryTimeMs = endMs;
-
-        mLoop = loop;
-        mMuted = muted;
-        mIsDuckingEnabled = duckingEnabled;
-        mDuckingThreshold = duckThreshold;
-        mDuckedTrackVolume = duckedTrackVolume;
-
-        mAudioWaveformFilename = audioWaveformFilename;
-        if (audioWaveformFilename != null) {
-            mWaveformData =
-                new SoftReference<WaveformData>(new WaveformData(audioWaveformFilename));
-        } else {
-            mWaveformData = null;
-        }
-    }
-
-    /**
-     * Get the id of the audio track
-     *
-     * @return The id of the audio track
-     */
-    public String getId() {
-        return mUniqueId;
-    }
-
-    /**
-     * Get the filename for this audio track source.
-     *
-     * @return The filename as an absolute file name
-     */
-    public String getFilename() {
-        return mFilename;
-    }
-
-    /**
-     * Get the number of audio channels in the source of this audio track
-     *
-     * @return The number of audio channels in the source of this audio track
-     */
-    public int getAudioChannels() {
-        return mAudioChannels;
-    }
-
-    /**
-     * Get the audio codec of the source of this audio track
-     *
-     * @return The audio codec of the source of this audio track
-     * {@link android.media.videoeditor.MediaProperties}
-     */
-    public int getAudioType() {
-        return mAudioType;
-    }
-
-    /**
-     * Get the audio sample frequency of the audio track
-     *
-     * @return The audio sample frequency of the audio track
-     */
-    public int getAudioSamplingFrequency() {
-        return mAudioSamplingFrequency;
-    }
-
-    /**
-     * Get the audio bitrate of the audio track
-     *
-     * @return The audio bitrate of the audio track
-     */
-    public int getAudioBitrate() {
-        return mAudioBitrate;
-    }
-
-    /**
-     * Set the volume of this audio track as percentage of the volume in the
-     * original audio source file.
-     *
-     * @param volumePercent Percentage of the volume to apply. If it is set to
-     *         0, then volume becomes mute. It it is set to 100, then volume
-     *         is same as original volume. It it is set to 200, then volume
-     *         is doubled (provided that volume amplification is supported)
-     *
-     * @throws UnsupportedOperationException if volume amplification is
-     *         requested and is not supported.
-     */
-    public void setVolume(int volumePercent) {
-        if (volumePercent > MediaProperties.AUDIO_MAX_VOLUME_PERCENT) {
-            throw new IllegalArgumentException("Volume set exceeds maximum allowed value");
-        }
-
-        if (volumePercent < 0) {
-            throw new IllegalArgumentException("Invalid Volume ");
-        }
-
-        /**
-         *  Force update of preview settings
-         */
-        mMANativeHelper.setGeneratePreview(true);
-
-        mVolumePercent = volumePercent;
-    }
-
-    /**
-     * Get the volume of the audio track as percentage of the volume in the
-     * original audio source file.
-     *
-     * @return The volume in percentage
-     */
-    public int getVolume() {
-        return mVolumePercent;
-    }
-
-    /**
-     * Mute/Unmute the audio track
-     *
-     * @param muted true to mute the audio track. SetMute(true) will make
-     *         the volume of this Audio Track to 0.
-     */
-    public void setMute(boolean muted) {
-        /**
-         *  Force update of preview settings
-         */
-        mMANativeHelper.setGeneratePreview(true);
-        mMuted = muted;
-    }
-
-    /**
-     * Check if the audio track is muted
-     *
-     * @return true if the audio track is muted
-     */
-    public boolean isMuted() {
-        return mMuted;
-    }
-
-    /**
-     * Get the start time of this audio track relative to the storyboard
-     * timeline.
-     *
-     * @return The start time in milliseconds
-     */
-
-    public long getStartTime() {
-        return mStartTimeMs;
-    }
-
-    /**
-     * Get the audio track duration
-     *
-     * @return The duration in milliseconds. This value represents actual audio
-     *         track duration. This value is not effected by 'enableLoop' or
-     *         'setExtractBoundaries'.
-     */
-    public long getDuration() {
-        return mDurationMs;
-    }
-
-    /**
-     * Get the audio track timeline duration
-     *
-     * @return The timeline duration as defined by the begin and end boundaries
-     */
-    public long getTimelineDuration() {
-        return mTimelineDurationMs;
-    }
-
-    /**
-     * Sets the start and end marks for trimming an audio track
-     *
-     * @param beginMs start time in the audio track in milliseconds (relative to
-     *         the beginning of the audio track)
-     * @param endMs end time in the audio track in milliseconds (relative to the
-     *         beginning of the audio track)
-     */
-    public void setExtractBoundaries(long beginMs, long endMs) {
-        if (beginMs > mDurationMs) {
-            throw new IllegalArgumentException("Invalid start time");
-        }
-        if (endMs > mDurationMs) {
-            throw new IllegalArgumentException("Invalid end time");
-        }
-        if (beginMs < 0) {
-            throw new IllegalArgumentException("Invalid start time; is < 0");
-        }
-        if (endMs < 0) {
-            throw new IllegalArgumentException("Invalid end time; is < 0");
-        }
-
-        /**
-         *  Force update of preview settings
-         */
-        mMANativeHelper.setGeneratePreview(true);
-
-        mBeginBoundaryTimeMs = beginMs;
-        mEndBoundaryTimeMs = endMs;
-
-        mTimelineDurationMs = mEndBoundaryTimeMs - mBeginBoundaryTimeMs;
-    }
-
-    /**
-     * Get the boundary begin time
-     *
-     * @return The boundary begin time
-     */
-    public long getBoundaryBeginTime() {
-        return mBeginBoundaryTimeMs;
-    }
-
-    /**
-     * Get the boundary end time
-     *
-     * @return The boundary end time
-     */
-    public long getBoundaryEndTime() {
-        return mEndBoundaryTimeMs;
-    }
-
-    /**
-     * Enable the loop mode for this audio track. Note that only one of the
-     * audio tracks in the timeline can have the loop mode enabled. When looping
-     * is enabled the samples between mBeginBoundaryTimeMs and
-     * mEndBoundaryTimeMs are looped.
-     */
-    public void enableLoop() {
-        if (!mLoop) {
-            /**
-             *  Force update of preview settings
-             */
-            mMANativeHelper.setGeneratePreview(true);
-            mLoop = true;
-        }
-    }
-
-    /**
-     * Disable the loop mode
-     */
-    public void disableLoop() {
-        if (mLoop) {
-            /**
-             *  Force update of preview settings
-             */
-            mMANativeHelper.setGeneratePreview(true);
-            mLoop = false;
-        }
-    }
-
-    /**
-     * Check if looping is enabled
-     *
-     * @return true if looping is enabled
-     */
-    public boolean isLooping() {
-        return mLoop;
-    }
-
-    /**
-     * Disable the audio duck effect
-     */
-    public void disableDucking() {
-        if (mIsDuckingEnabled) {
-            /**
-             *  Force update of preview settings
-             */
-            mMANativeHelper.setGeneratePreview(true);
-            mIsDuckingEnabled = false;
-        }
-    }
-
-    /**
-     * Enable ducking by specifying the required parameters
-     *
-     * @param threshold Ducking will be activated when the energy in
-     *         the media items audio signal goes above this value. The valid
-     *         range of values is 0db to 90dB. 0dB is equivalent to disabling
-     *         ducking.
-     * @param duckedTrackVolume The relative volume of the audio track when ducking
-     *         is active. The valid range of values is 0 to 100.
-     */
-    public void enableDucking(int threshold, int duckedTrackVolume) {
-        if (threshold < 0 || threshold > 90) {
-            throw new IllegalArgumentException("Invalid threshold value: " + threshold);
-        }
-
-        if (duckedTrackVolume < 0 || duckedTrackVolume > 100) {
-            throw new IllegalArgumentException("Invalid duckedTrackVolume value: "
-                    + duckedTrackVolume);
-        }
-
-        /**
-         *  Force update of preview settings
-         */
-        mMANativeHelper.setGeneratePreview(true);
-
-        mDuckingThreshold = threshold;
-        mDuckedTrackVolume = duckedTrackVolume;
-        mIsDuckingEnabled = true;
-    }
-
-    /**
-     * Check if ducking is enabled
-     *
-     * @return true if ducking is enabled
-     */
-    public boolean isDuckingEnabled() {
-        return mIsDuckingEnabled;
-    }
-
-    /**
-     * Get the ducking threshold.
-     *
-     * @return The ducking threshold
-     */
-    public int getDuckingThreshhold() {
-        return mDuckingThreshold;
-    }
-
-    /**
-     * Get the ducked track volume.
-     *
-     * @return The ducked track volume
-     */
-    public int getDuckedTrackVolume() {
-        return mDuckedTrackVolume;
-    }
-
-    /**
-     * This API allows to generate a file containing the sample volume levels of
-     * this audio track object. This function may take significant time and is
-     * blocking. The filename can be retrieved using getAudioWaveformFilename().
-     *
-     * @param listener The progress listener
-     *
-     * @throws IOException if the output file cannot be created
-     * @throws IllegalArgumentException if the audio file does not have a valid
-     *         audio track
-     * @throws IllegalStateException if the codec type is unsupported
-     */
-    public void extractAudioWaveform(ExtractAudioWaveformProgressListener listener)
-    throws IOException {
-        if (mAudioWaveformFilename == null) {
-            /**
-             *  AudioWaveformFilename is generated
-             */
-            final String projectPath = mMANativeHelper.getProjectPath();
-            final String audioWaveFilename = String.format(projectPath + "/audioWaveformFile-"
-                    + getId() + ".dat");
-
-            /**
-             * Logic to get frame duration = (no. of frames per sample * 1000)/
-             * sampling frequency
-             */
-            final int frameDuration;
-            final int sampleCount;
-            final int codecType = mMANativeHelper.getAudioCodecType(mAudioType);
-            switch (codecType) {
-                case MediaProperties.ACODEC_AMRNB: {
-                    frameDuration = (MediaProperties.SAMPLES_PER_FRAME_AMRNB * 1000)
-                    / MediaProperties.DEFAULT_SAMPLING_FREQUENCY;
-                    sampleCount = MediaProperties.SAMPLES_PER_FRAME_AMRNB;
-                    break;
-                }
-
-                case MediaProperties.ACODEC_AMRWB: {
-                    frameDuration = (MediaProperties.SAMPLES_PER_FRAME_AMRWB * 1000)
-                    / MediaProperties.DEFAULT_SAMPLING_FREQUENCY;
-                    sampleCount = MediaProperties.SAMPLES_PER_FRAME_AMRWB;
-                    break;
-                }
-
-                case MediaProperties.ACODEC_AAC_LC: {
-                    frameDuration = (MediaProperties.SAMPLES_PER_FRAME_AAC * 1000)
-                    / MediaProperties.DEFAULT_SAMPLING_FREQUENCY;
-                    sampleCount = MediaProperties.SAMPLES_PER_FRAME_AAC;
-                    break;
-                }
-
-                case MediaProperties.ACODEC_MP3: {
-                    frameDuration = (MediaProperties.SAMPLES_PER_FRAME_MP3 * 1000)
-                    / MediaProperties.DEFAULT_SAMPLING_FREQUENCY;
-                    sampleCount = MediaProperties.SAMPLES_PER_FRAME_MP3;
-                    break;
-                }
-
-                default: {
-                    throw new IllegalStateException("Unsupported codec type: "
-                                                                   + codecType);
-                }
-            }
-
-            mMANativeHelper.generateAudioGraph( mUniqueId,
-                    mFilename,
-                    audioWaveFilename,
-                    frameDuration,
-                    MediaProperties.DEFAULT_CHANNEL_COUNT,
-                    sampleCount,
-                    listener,
-                    false);
-            /**
-             *  Record the generated file name
-             */
-            mAudioWaveformFilename = audioWaveFilename;
-        }
-        mWaveformData = new SoftReference<WaveformData>(new WaveformData(mAudioWaveformFilename));
-    }
-
-    /**
-     * Get the audio waveform file name if extractAudioWaveform was successful.
-     *
-     * @return the name of the file, null if the file does not exist
-     */
-    String getAudioWaveformFilename() {
-        return mAudioWaveformFilename;
-    }
-
-    /**
-     * Delete the waveform file
-     */
-    void invalidate() {
-        if (mAudioWaveformFilename != null) {
-            new File(mAudioWaveformFilename).delete();
-            mAudioWaveformFilename = null;
-            mWaveformData = null;
-        }
-    }
-
-    /**
-     * Get the audio waveform data.
-     *
-     * @return The waveform data
-     *
-     * @throws IOException if the waveform file cannot be found
-     */
-    public WaveformData getWaveformData() throws IOException {
-        if (mWaveformData == null) {
-            return null;
-        }
-
-        WaveformData waveformData = mWaveformData.get();
-        if (waveformData != null) {
-            return waveformData;
-        } else if (mAudioWaveformFilename != null) {
-            try {
-                waveformData = new WaveformData(mAudioWaveformFilename);
-            } catch (IOException e) {
-                throw e;
-            }
-            mWaveformData = new SoftReference<WaveformData>(waveformData);
-            return waveformData;
-        } else {
-            return null;
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object object) {
-        if (!(object instanceof AudioTrack)) {
-            return false;
-        }
-        return mUniqueId.equals(((AudioTrack)object).mUniqueId);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        return mUniqueId.hashCode();
-    }
-}
diff --git a/media/java/android/media/videoeditor/Effect.java b/media/java/android/media/videoeditor/Effect.java
deleted file mode 100644
index 2f7ae03..0000000
--- a/media/java/android/media/videoeditor/Effect.java
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-/**
- * This is the super class for all effects. An effect can only be applied to a
- * single media item.
- * {@hide}
- */
-public abstract class Effect {
-    /**
-     *  Instance variables
-     */
-    private final String mUniqueId;
-    /**
-     *  The effect owner
-     */
-    private final MediaItem mMediaItem;
-
-    protected long mDurationMs;
-    /**
-     *  The start time of the effect relative to the beginning
-     *  of the media item
-     */
-    protected long mStartTimeMs;
-
-    /**
-     * Default constructor
-     */
-    @SuppressWarnings("unused")
-    private Effect() {
-        mMediaItem = null;
-        mUniqueId = null;
-        mStartTimeMs = 0;
-        mDurationMs = 0;
-    }
-
-    /**
-     * Constructor
-     *
-     * @param mediaItem The media item owner
-     * @param effectId The effect id
-     * @param startTimeMs The start time relative to the media item to which it
-     *            is applied
-     * @param durationMs The effect duration in milliseconds
-     */
-    public Effect(MediaItem mediaItem, String effectId, long startTimeMs,
-                  long durationMs) {
-        if (mediaItem == null) {
-            throw new IllegalArgumentException("Media item cannot be null");
-        }
-
-        if ((startTimeMs < 0) || (durationMs < 0)) {
-             throw new IllegalArgumentException("Invalid start time Or/And Duration");
-        }
-        if (startTimeMs + durationMs > mediaItem.getDuration()) {
-            throw new IllegalArgumentException("Invalid start time and duration");
-        }
-
-        mMediaItem = mediaItem;
-        mUniqueId = effectId;
-        mStartTimeMs = startTimeMs;
-        mDurationMs = durationMs;
-    }
-
-    /**
-     * Get the id of the effect.
-     *
-     * @return The id of the effect
-     */
-    public String getId() {
-        return mUniqueId;
-    }
-
-    /**
-     * Set the duration of the effect. If a preview or export is in progress,
-     * then this change is effective for next preview or export session.
-     *
-     * @param durationMs of the effect in milliseconds
-     */
-    public void setDuration(long durationMs) {
-        if (durationMs <0) {
-            throw new IllegalArgumentException("Invalid duration");
-        }
-
-        if (mStartTimeMs + durationMs > mMediaItem.getDuration()) {
-            throw new IllegalArgumentException("Duration is too large");
-        }
-
-        getMediaItem().getNativeContext().setGeneratePreview(true);
-
-        final long oldDurationMs = mDurationMs;
-        mDurationMs = durationMs;
-
-        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
-    }
-
-    /**
-     * Get the duration of the effect
-     *
-     * @return The duration of the effect in milliseconds
-     */
-    public long getDuration() {
-        return mDurationMs;
-    }
-
-    /**
-     * Set start time of the effect. If a preview or export is in progress, then
-     * this change is effective for next preview or export session.
-     *
-     * @param startTimeMs The start time of the effect relative to the beginning
-     *            of the media item in milliseconds
-     */
-    public void setStartTime(long startTimeMs) {
-        if (startTimeMs + mDurationMs > mMediaItem.getDuration()) {
-            throw new IllegalArgumentException("Start time is too large");
-        }
-
-        getMediaItem().getNativeContext().setGeneratePreview(true);
-        final long oldStartTimeMs = mStartTimeMs;
-        mStartTimeMs = startTimeMs;
-
-        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
-    }
-
-    /**
-     * Get the start time of the effect
-     *
-     * @return The start time in milliseconds
-     */
-    public long getStartTime() {
-        return mStartTimeMs;
-    }
-
-    /**
-     * Set the start time and duration
-     *
-     * @param startTimeMs start time in milliseconds
-     * @param durationMs The duration in milliseconds
-     */
-    public void setStartTimeAndDuration(long startTimeMs, long durationMs) {
-        if (startTimeMs + durationMs > mMediaItem.getDuration()) {
-            throw new IllegalArgumentException("Invalid start time or duration");
-        }
-
-        getMediaItem().getNativeContext().setGeneratePreview(true);
-        final long oldStartTimeMs = mStartTimeMs;
-        final long oldDurationMs = mDurationMs;
-
-        mStartTimeMs = startTimeMs;
-        mDurationMs = durationMs;
-
-        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
-    }
-
-    /**
-     * Get the media item owner.
-     *
-     * @return The media item owner
-     */
-    public MediaItem getMediaItem() {
-        return mMediaItem;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object object) {
-        if (!(object instanceof Effect)) {
-            return false;
-        }
-        return mUniqueId.equals(((Effect)object).mUniqueId);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        return mUniqueId.hashCode();
-    }
-}
diff --git a/media/java/android/media/videoeditor/EffectColor.java b/media/java/android/media/videoeditor/EffectColor.java
deleted file mode 100644
index 6c5ac2d..0000000
--- a/media/java/android/media/videoeditor/EffectColor.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-/**
- * This class allows to apply color effect on a media item.
- * {@hide}
- */
-public class EffectColor extends Effect {
-
-    /**
-     * Change the video frame color to the RGB color value provided
-     */
-    public static final int TYPE_COLOR = 1;
-    /**
-     * Change the video frame color to a gradation from RGB color (at the top of
-     * the frame) to black (at the bottom of the frame).
-     */
-    public static final int TYPE_GRADIENT = 2;
-    /**
-     * Change the video frame color to sepia
-     */
-    public static final int TYPE_SEPIA = 3;
-    /**
-     * Invert the video frame color
-     */
-    public static final int TYPE_NEGATIVE = 4;
-    /**
-     * Make the video look like as if it was recorded in 50's
-     */
-    public static final int TYPE_FIFTIES = 5;
-    /**
-     * Change the video frame color to the RGB color value GREEN
-     */
-    public static final int GREEN = 0x0000ff00;
-    /**
-     * Change the video frame color to the RGB color value PINK
-     */
-    public static final int PINK = 0x00ff66cc;
-    /**
-     * Change the video frame color to the RGB color value GRAY
-     */
-    public static final int GRAY = 0x007f7f7f;
-
-    /**
-     *  The effect type
-     */
-    private final int mType;
-
-    /**
-     *  The effect color
-     */
-    private final int mColor;
-
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private EffectColor() {
-        this(null, null, 0, 0, 0, 0);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param mediaItem The media item owner
-     * @param effectId The effect id
-     * @param startTimeMs The start time relative to the media item to which it
-     *            is applied
-     * @param durationMs The duration of this effect in milliseconds
-     * @param type type of the effect. type is one of: TYPE_COLOR,
-     *            TYPE_GRADIENT, TYPE_SEPIA, TYPE_NEGATIVE, TYPE_FIFTIES.
-     * @param color If type is TYPE_COLOR, color is the RGB color as 888.
-     *              If type is TYPE_GRADIENT, color is the RGB color at the
-     *              top of the frame. Otherwise, color is ignored
-     */
-    public EffectColor(MediaItem mediaItem, String effectId, long startTimeMs,
-                      long durationMs, int type, int color) {
-        super(mediaItem, effectId, startTimeMs, durationMs);
-        switch (type) {
-            case TYPE_COLOR:
-            case TYPE_GRADIENT: {
-                switch (color) {
-                    case GREEN:
-                    case PINK:
-                    case GRAY:
-                        mColor = color;
-                        break;
-
-                    default:
-                        throw new IllegalArgumentException("Invalid Color: " + color);
-                    }
-                    break;
-            }
-            case TYPE_SEPIA:
-            case TYPE_NEGATIVE:
-            case TYPE_FIFTIES: {
-                mColor = -1;
-                break;
-            }
-
-            default: {
-                throw new IllegalArgumentException("Invalid type: " + type);
-            }
-        }
-        mType = type;
-    }
-
-    /**
-     * Get the effect type.
-     *
-     * @return The effect type
-     */
-    public int getType() {
-        return mType;
-    }
-
-    /**
-     * Get the color if effect type is TYPE_COLOR or TYPE_GRADIENT.
-     *
-     * @return the color as RGB 888 if type is TYPE_COLOR or TYPE_GRADIENT.
-     */
-    public int getColor() {
-        return mColor;
-    }
-}
diff --git a/media/java/android/media/videoeditor/EffectKenBurns.java b/media/java/android/media/videoeditor/EffectKenBurns.java
deleted file mode 100644
index 64be6b8..0000000
--- a/media/java/android/media/videoeditor/EffectKenBurns.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import android.graphics.Rect;
-
-/**
- * This class represents a Ken Burns effect.
- * {@hide}
- */
-public class EffectKenBurns extends Effect {
-    /**
-     *  Instance variables
-     */
-    private Rect mStartRect;
-    private Rect mEndRect;
-
-    /**
-     * Objects of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private EffectKenBurns() {
-        this(null, null, null, null, 0, 0);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param mediaItem The media item owner
-     * @param effectId The effect id
-     * @param startRect The start rectangle
-     * @param endRect The end rectangle
-     * @param startTimeMs The start time
-     * @param durationMs The duration of the Ken Burns effect in milliseconds
-     */
-    public EffectKenBurns(MediaItem mediaItem, String effectId, Rect startRect,
-                         Rect endRect, long startTimeMs, long durationMs) {
-        super(mediaItem, effectId, startTimeMs, durationMs);
-
-        if ( (startRect.width() <= 0) || (startRect.height() <= 0) ) {
-            throw new IllegalArgumentException("Invalid Start rectangle");
-        }
-        if ( (endRect.width() <= 0) || (endRect.height() <= 0) ) {
-            throw new IllegalArgumentException("Invalid End rectangle");
-        }
-
-        mStartRect = startRect;
-        mEndRect = endRect;
-    }
-
-
-    /**
-     * Get the start rectangle.
-     *
-     * @return The start rectangle
-     */
-    public Rect getStartRect() {
-        return mStartRect;
-    }
-
-
-    /**
-     * Get the end rectangle.
-     *
-     * @return The end rectangle
-     */
-    public Rect getEndRect() {
-        return mEndRect;
-    }
-
-    /**
-     * Get the KenBurn effect start and end rectangle coordinates
-     * @param start The rect object to be populated with start
-     * rectangle coordinates
-     *
-     * @param end The rect object to be populated with end
-     * rectangle coordinates
-     */
-    void getKenBurnsSettings(Rect start, Rect end) {
-        start.left = getStartRect().left;
-        start.top = getStartRect().top;
-        start.right = getStartRect().right;
-        start.bottom = getStartRect().bottom;
-        end.left = getEndRect().left;
-        end.top = getEndRect().top;
-        end.right = getEndRect().right;
-        end.bottom = getEndRect().bottom;
-    }
-}
diff --git a/media/java/android/media/videoeditor/ExtractAudioWaveformProgressListener.java b/media/java/android/media/videoeditor/ExtractAudioWaveformProgressListener.java
deleted file mode 100644
index 7ba7de3..0000000
--- a/media/java/android/media/videoeditor/ExtractAudioWaveformProgressListener.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-/**
- * This listener interface is used by
- * {@link MediaVideoItem#extractAudioWaveform(ExtractAudioWaveformProgressListener listener)}
- * or
- * {@link AudioTrack#extractAudioWaveform(ExtractAudioWaveformProgressListener listener)}
- * {@hide}
- */
-public interface ExtractAudioWaveformProgressListener {
-    /**
-     * This method notifies the listener of the progress status of
-     * an extractAudioWaveform operation.
-     * This method may be called maximum 100 times for one operation.
-     *
-     * @param progress The progress in %. At the beginning of the operation,
-     *          this value is set to 0; at the end, the value is set to 100.
-     */
-    public void onProgress(int progress);
-}
-
diff --git a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java b/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
deleted file mode 100644
index 2b0b3e2..0000000
--- a/media/java/android/media/videoeditor/MediaArtistNativeHelper.java
+++ /dev/null
@@ -1,4035 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.nio.IntBuffer;
-import java.util.Iterator;
-import java.util.List;
-import java.util.concurrent.Semaphore;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.Matrix;
-import android.media.videoeditor.VideoEditor.ExportProgressListener;
-import android.media.videoeditor.VideoEditor.PreviewProgressListener;
-import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
-import android.util.Log;
-import android.util.Pair;
-import android.view.Surface;
-
-/**
- *This class provide Native methods to be used by MediaArtist {@hide}
- */
-class MediaArtistNativeHelper {
-    private static final String TAG = "MediaArtistNativeHelper";
-
-    static {
-        System.loadLibrary("videoeditor_jni");
-    }
-
-    private static final int MAX_THUMBNAIL_PERMITTED = 8;
-
-    public static final int TASK_LOADING_SETTINGS = 1;
-    public static final int TASK_ENCODING = 2;
-
-    /**
-     *  The resize paint
-     */
-    private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
-
-    private final VideoEditor mVideoEditor;
-    /*
-     *  Semaphore to control preview calls
-     */
-    private final Semaphore mLock;
-
-    private EditSettings mStoryBoardSettings;
-
-    private String mOutputFilename;
-
-    private PreviewClipProperties mClipProperties = null;
-
-    private EditSettings mPreviewEditSettings;
-
-    private AudioSettings mAudioSettings = null;
-
-    private AudioTrack mAudioTrack = null;
-
-    private boolean mInvalidatePreviewArray = true;
-
-    private boolean mRegenerateAudio = true;
-
-    private String mExportFilename = null;
-    private int mExportVideoCodec = 0;
-    private int mExportAudioCodec = 0;
-    private int mProgressToApp;
-
-    private String mRenderPreviewOverlayFile;
-    private int mRenderPreviewRenderingMode;
-
-    private boolean mIsFirstProgress;
-
-    private static final String AUDIO_TRACK_PCM_FILE = "AudioPcm.pcm";
-
-    // Processing indication
-    public static final int PROCESSING_NONE          = 0;
-    public static final int PROCESSING_AUDIO_PCM     = 1;
-    public static final int PROCESSING_TRANSITION    = 2;
-    public static final int PROCESSING_KENBURNS      = 3;
-    public static final int PROCESSING_INTERMEDIATE1 = 11;
-    public static final int PROCESSING_INTERMEDIATE2 = 12;
-    public static final int PROCESSING_INTERMEDIATE3 = 13;
-    public static final int PROCESSING_EXPORT        = 20;
-
-    private int mProcessingState;
-    private Object mProcessingObject;
-    private PreviewProgressListener mPreviewProgressListener;
-    private ExportProgressListener mExportProgressListener;
-    private ExtractAudioWaveformProgressListener mExtractAudioWaveformProgressListener;
-    private MediaProcessingProgressListener mMediaProcessingProgressListener;
-    private final String mProjectPath;
-
-    private long mPreviewProgress;
-
-    private String mAudioTrackPCMFilePath;
-
-    private int mTotalClips = 0;
-
-    private boolean mErrorFlagSet = false;
-
-    @SuppressWarnings("unused")
-    private long mManualEditContext;
-
-    /* Listeners */
-
-    /**
-     * Interface definition for a listener to be invoked when there is an update
-     * in a running task.
-     */
-    public interface OnProgressUpdateListener {
-        /**
-         * Called when there is an update.
-         *
-         * @param taskId id of the task reporting an update.
-         * @param progress progress of the task [0..100].
-         * @see BasicEdit#TASK_ENCODING
-         */
-        public void OnProgressUpdate(int taskId, int progress);
-    }
-
-    /** Defines the version. */
-    public final class Version {
-
-        /** Major version number */
-        public int major;
-
-        /** Minor version number */
-        public int minor;
-
-        /** Revision number */
-        public int revision;
-
-        /** VIDEOEDITOR major version number */
-        private static final int VIDEOEDITOR_MAJOR_VERSION = 0;
-
-        /** VIDEOEDITOR minor version number */
-        private static final int VIDEOEDITOR_MINOR_VERSION = 0;
-
-        /** VIDEOEDITOR revision number */
-        private static final int VIDEOEDITOR_REVISION_VERSION = 1;
-
-        /** Method which returns the current VIDEOEDITOR version */
-        public Version getVersion() {
-            Version version = new Version();
-
-            version.major = Version.VIDEOEDITOR_MAJOR_VERSION;
-            version.minor = Version.VIDEOEDITOR_MINOR_VERSION;
-            version.revision = Version.VIDEOEDITOR_REVISION_VERSION;
-
-            return version;
-        }
-    }
-
-    /**
-     * Defines output audio formats.
-     */
-    public final class AudioFormat {
-        /** No audio present in output clip. Used to generate video only clip */
-        public static final int NO_AUDIO = 0;
-
-        /** AMR Narrow Band. */
-        public static final int AMR_NB = 1;
-
-        /** Advanced Audio Coding (AAC). */
-        public static final int AAC = 2;
-
-        /** Advanced Audio Codec Plus (HE-AAC v1). */
-        public static final int AAC_PLUS = 3;
-
-        /** Advanced Audio Codec Plus (HE-AAC v2). */
-        public static final int ENHANCED_AAC_PLUS = 4;
-
-        /** MPEG layer 3 (MP3). */
-        public static final int MP3 = 5;
-
-        /** Enhanced Variable RateCodec (EVRC). */
-        public static final int EVRC = 6;
-
-        /** PCM (PCM). */
-        public static final int PCM = 7;
-
-        /** No transcoding. Output audio format is same as input audio format */
-        public static final int NULL_AUDIO = 254;
-
-        /** Unsupported audio format. */
-        public static final int UNSUPPORTED_AUDIO = 255;
-    }
-
-    /**
-     * Defines audio sampling frequencies.
-     */
-    public final class AudioSamplingFrequency {
-        /**
-         * Default sampling frequency. Uses the default frequency for a specific
-         * audio format. For AAC the only supported (and thus default) sampling
-         * frequency is 16 kHz. For this audio format the sampling frequency in
-         * the OutputParams.
-         **/
-        public static final int FREQ_DEFAULT = 0;
-
-        /** Audio sampling frequency of 8000 Hz. */
-        public static final int FREQ_8000 = 8000;
-
-        /** Audio sampling frequency of 11025 Hz. */
-        public static final int FREQ_11025 = 11025;
-
-        /** Audio sampling frequency of 12000 Hz. */
-        public static final int FREQ_12000 = 12000;
-
-        /** Audio sampling frequency of 16000 Hz. */
-        public static final int FREQ_16000 = 16000;
-
-        /** Audio sampling frequency of 22050 Hz. */
-        public static final int FREQ_22050 = 22050;
-
-        /** Audio sampling frequency of 24000 Hz. */
-        public static final int FREQ_24000 = 24000;
-
-        /** Audio sampling frequency of 32000 Hz. */
-        public static final int FREQ_32000 = 32000;
-
-        /** Audio sampling frequency of 44100 Hz. */
-        public static final int FREQ_44100 = 44100;
-
-        /** Audio sampling frequency of 48000 Hz. Not available for output file. */
-        public static final int FREQ_48000 = 48000;
-    }
-
-    /**
-     * Defines the supported fixed audio and video bitrates. These values are
-     * for output audio video only.
-     */
-    public final class Bitrate {
-        /** Variable bitrate. Means no bitrate regulation */
-        public static final int VARIABLE = -1;
-
-        /** An undefined bitrate. */
-        public static final int UNDEFINED = 0;
-
-        /** A bitrate of 9.2 kbits/s. */
-        public static final int BR_9_2_KBPS = 9200;
-
-        /** A bitrate of 12.2 kbits/s. */
-        public static final int BR_12_2_KBPS = 12200;
-
-        /** A bitrate of 16 kbits/s. */
-        public static final int BR_16_KBPS = 16000;
-
-        /** A bitrate of 24 kbits/s. */
-        public static final int BR_24_KBPS = 24000;
-
-        /** A bitrate of 32 kbits/s. */
-        public static final int BR_32_KBPS = 32000;
-
-        /** A bitrate of 48 kbits/s. */
-        public static final int BR_48_KBPS = 48000;
-
-        /** A bitrate of 64 kbits/s. */
-        public static final int BR_64_KBPS = 64000;
-
-        /** A bitrate of 96 kbits/s. */
-        public static final int BR_96_KBPS = 96000;
-
-        /** A bitrate of 128 kbits/s. */
-        public static final int BR_128_KBPS = 128000;
-
-        /** A bitrate of 192 kbits/s. */
-        public static final int BR_192_KBPS = 192000;
-
-        /** A bitrate of 256 kbits/s. */
-        public static final int BR_256_KBPS = 256000;
-
-        /** A bitrate of 288 kbits/s. */
-        public static final int BR_288_KBPS = 288000;
-
-        /** A bitrate of 384 kbits/s. */
-        public static final int BR_384_KBPS = 384000;
-
-        /** A bitrate of 512 kbits/s. */
-        public static final int BR_512_KBPS = 512000;
-
-        /** A bitrate of 800 kbits/s. */
-        public static final int BR_800_KBPS = 800000;
-
-        /** A bitrate of 2 Mbits/s. */
-        public static final int BR_2_MBPS = 2000000;
-
-        /** A bitrate of 5 Mbits/s. */
-        public static final int BR_5_MBPS = 5000000;
-
-        /** A bitrate of 8 Mbits/s. */
-        public static final int BR_8_MBPS = 8000000;
-    }
-
-    /**
-     * Defines all supported file types.
-     */
-    public final class FileType {
-        /** 3GPP file type. */
-        public static final int THREE_GPP = 0;
-
-        /** MP4 file type. */
-        public static final int MP4 = 1;
-
-        /** AMR file type. */
-        public static final int AMR = 2;
-
-        /** MP3 audio file type. */
-        public static final int MP3 = 3;
-
-        /** PCM audio file type. */
-        public static final int PCM = 4;
-
-        /** JPEG image file type. */
-        public static final int JPG = 5;
-
-        /** GIF image file type. */
-        public static final int GIF = 7;
-
-        /** PNG image file type. */
-        public static final int PNG = 8;
-
-        /** M4V file type. */
-        public static final int M4V = 10;
-
-        /** Unsupported file type. */
-        public static final int UNSUPPORTED = 255;
-    }
-
-    /**
-     * Defines rendering types. Rendering can only be applied to files
-     * containing video streams.
-     **/
-    public final class MediaRendering {
-        /**
-         * Resize to fit the output video with changing the aspect ratio if
-         * needed.
-         */
-        public static final int RESIZING = 0;
-
-        /**
-         * Crop the input video to fit it with the output video resolution.
-         **/
-        public static final int CROPPING = 1;
-
-        /**
-         * Resize to fit the output video resolution but maintain the aspect
-         * ratio. This framing type adds black borders if needed.
-         */
-        public static final int BLACK_BORDERS = 2;
-    }
-
-    /**
-     * Defines the results.
-     */
-    public final class Result {
-        /** No error. result OK */
-        public static final int NO_ERROR = 0;
-
-        /** File not found */
-        public static final int ERR_FILE_NOT_FOUND = 1;
-
-        /**
-         * In case of UTF8 conversion, the size of the converted path will be
-         * more than the corresponding allocated buffer.
-         */
-        public static final int ERR_BUFFER_OUT_TOO_SMALL = 2;
-
-        /** Invalid file type. */
-        public static final int ERR_INVALID_FILE_TYPE = 3;
-
-        /** Invalid effect kind. */
-        public static final int ERR_INVALID_EFFECT_KIND = 4;
-
-        /** Invalid video effect. */
-        public static final int ERR_INVALID_VIDEO_EFFECT_TYPE = 5;
-
-        /** Invalid audio effect. */
-        public static final int ERR_INVALID_AUDIO_EFFECT_TYPE = 6;
-
-        /** Invalid video transition. */
-        public static final int ERR_INVALID_VIDEO_TRANSITION_TYPE = 7;
-
-        /** Invalid audio transition. */
-        public static final int ERR_INVALID_AUDIO_TRANSITION_TYPE = 8;
-
-        /** Invalid encoding frame rate. */
-        public static final int ERR_INVALID_VIDEO_ENCODING_FRAME_RATE = 9;
-
-        /** External effect is called but this function is not set. */
-        public static final int ERR_EXTERNAL_EFFECT_NULL = 10;
-
-        /** External transition is called but this function is not set. */
-        public static final int ERR_EXTERNAL_TRANSITION_NULL = 11;
-
-        /** Begin time cut is larger than the video clip duration. */
-        public static final int ERR_BEGIN_CUT_LARGER_THAN_DURATION = 12;
-
-        /** Begin cut time is larger or equal than end cut. */
-        public static final int ERR_BEGIN_CUT_LARGER_THAN_END_CUT = 13;
-
-        /** Two consecutive transitions are overlapping on one clip. */
-        public static final int ERR_OVERLAPPING_TRANSITIONS = 14;
-
-        /** Internal error, type size mismatch. */
-        public static final int ERR_ANALYSIS_DATA_SIZE_TOO_SMALL = 15;
-
-        /** An input 3GPP file is invalid/corrupted. */
-        public static final int ERR_INVALID_3GPP_FILE = 16;
-
-        /** A file contains an unsupported video format. */
-        public static final int ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT = 17;
-
-        /** A file contains an unsupported audio format. */
-        public static final int ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT = 18;
-
-        /** A file format is not supported. */
-        public static final int ERR_AMR_EDITING_UNSUPPORTED = 19;
-
-        /** An input clip has an unexpectedly large Video AU. */
-        public static final int ERR_INPUT_VIDEO_AU_TOO_LARGE = 20;
-
-        /** An input clip has an unexpectedly large Audio AU. */
-        public static final int ERR_INPUT_AUDIO_AU_TOO_LARGE = 21;
-
-        /** An input clip has a corrupted Audio AU. */
-        public static final int ERR_INPUT_AUDIO_CORRUPTED_AU = 22;
-
-        /** The video encoder encountered an Access Unit error. */
-        public static final int ERR_ENCODER_ACCES_UNIT_ERROR = 23;
-
-        /** Unsupported video format for Video Editing. */
-        public static final int ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT = 24;
-
-        /** Unsupported H263 profile for Video Editing. */
-        public static final int ERR_EDITING_UNSUPPORTED_H263_PROFILE = 25;
-
-        /** Unsupported MPEG-4 profile for Video Editing. */
-        public static final int ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE = 26;
-
-        /** Unsupported MPEG-4 RVLC tool for Video Editing. */
-        public static final int ERR_EDITING_UNSUPPORTED_MPEG4_RVLC = 27;
-
-        /** Unsupported audio format for Video Editing. */
-        public static final int ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT = 28;
-
-        /** File contains no supported stream. */
-        public static final int ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE = 29;
-
-        /** File contains no video stream or an unsupported video stream. */
-        public static final int ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE = 30;
-
-        /** Internal error, clip analysis version mismatch. */
-        public static final int ERR_INVALID_CLIP_ANALYSIS_VERSION = 31;
-
-        /**
-         * At least one of the clip analysis has been generated on another
-         * platform (WIN32, ARM, etc.).
-         */
-        public static final int ERR_INVALID_CLIP_ANALYSIS_PLATFORM = 32;
-
-        /** Clips don't have the same video format (H263 or MPEG4). */
-        public static final int ERR_INCOMPATIBLE_VIDEO_FORMAT = 33;
-
-        /** Clips don't have the same frame size. */
-        public static final int ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE = 34;
-
-        /** Clips don't have the same MPEG-4 time scale. */
-        public static final int ERR_INCOMPATIBLE_VIDEO_TIME_SCALE = 35;
-
-        /** Clips don't have the same use of MPEG-4 data partitioning. */
-        public static final int ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING = 36;
-
-        /** MP3 clips can't be assembled. */
-        public static final int ERR_UNSUPPORTED_MP3_ASSEMBLY = 37;
-
-        /**
-         * The input 3GPP file does not contain any supported audio or video
-         * track.
-         */
-        public static final int ERR_NO_SUPPORTED_STREAM_IN_FILE = 38;
-
-        /**
-         * The Volume of the added audio track (AddVolume) must be strictly
-         * superior than zero.
-         */
-        public static final int ERR_ADDVOLUME_EQUALS_ZERO = 39;
-
-        /**
-         * The time at which an audio track is added can't be higher than the
-         * input video track duration..
-         */
-        public static final int ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION = 40;
-
-        /** The audio track file format setting is undefined. */
-        public static final int ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT = 41;
-
-        /** The added audio track stream has an unsupported format. */
-        public static final int ERR_UNSUPPORTED_ADDED_AUDIO_STREAM = 42;
-
-        /** The audio mixing feature doesn't support the audio track type. */
-        public static final int ERR_AUDIO_MIXING_UNSUPPORTED = 43;
-
-        /** The audio mixing feature doesn't support MP3 audio tracks. */
-        public static final int ERR_AUDIO_MIXING_MP3_UNSUPPORTED = 44;
-
-        /**
-         * An added audio track limits the available features: uiAddCts must be
-         * 0 and bRemoveOriginal must be true.
-         */
-        public static final int ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK = 45;
-
-        /**
-         * An added audio track limits the available features: uiAddCts must be
-         * 0 and bRemoveOriginal must be true.
-         */
-        public static final int ERR_FEATURE_UNSUPPORTED_WITH_AAC = 46;
-
-        /** Input audio track is not of a type that can be mixed with output. */
-        public static final int ERR_AUDIO_CANNOT_BE_MIXED = 47;
-
-        /** Input audio track is not AMR-NB, so it can't be mixed with output. */
-        public static final int ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED = 48;
-
-        /**
-         * An added EVRC audio track limit the available features: uiAddCts must
-         * be 0 and bRemoveOriginal must be true.
-         */
-        public static final int ERR_FEATURE_UNSUPPORTED_WITH_EVRC = 49;
-
-        /** H263 profiles other than 0 are not supported. */
-        public static final int ERR_H263_PROFILE_NOT_SUPPORTED = 51;
-
-        /** File contains no video stream or an unsupported video stream. */
-        public static final int ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE = 52;
-
-        /** Transcoding of the input file(s) is necessary. */
-        public static final int WAR_TRANSCODING_NECESSARY = 53;
-
-        /**
-         * The size of the output file will exceed the maximum configured value.
-         */
-        public static final int WAR_MAX_OUTPUT_SIZE_EXCEEDED = 54;
-
-        /** The time scale is too big. */
-        public static final int WAR_TIMESCALE_TOO_BIG = 55;
-
-        /** The year is out of range */
-        public static final int ERR_CLOCK_BAD_REF_YEAR = 56;
-
-        /** The directory could not be opened */
-        public static final int ERR_DIR_OPEN_FAILED = 57;
-
-        /** The directory could not be read */
-        public static final int ERR_DIR_READ_FAILED = 58;
-
-        /** There are no more entries in the current directory */
-        public static final int ERR_DIR_NO_MORE_ENTRY = 59;
-
-        /** The input parameter/s has error */
-        public static final int ERR_PARAMETER = 60;
-
-        /** There is a state machine error */
-        public static final int ERR_STATE = 61;
-
-        /** Memory allocation failed */
-        public static final int ERR_ALLOC = 62;
-
-        /** Context is invalid */
-        public static final int ERR_BAD_CONTEXT = 63;
-
-        /** Context creation failed */
-        public static final int ERR_CONTEXT_FAILED = 64;
-
-        /** Invalid stream ID */
-        public static final int ERR_BAD_STREAM_ID = 65;
-
-        /** Invalid option ID */
-        public static final int ERR_BAD_OPTION_ID = 66;
-
-        /** The option is write only */
-        public static final int ERR_WRITE_ONLY = 67;
-
-        /** The option is read only */
-        public static final int ERR_READ_ONLY = 68;
-
-        /** The feature is not implemented in this version */
-        public static final int ERR_NOT_IMPLEMENTED = 69;
-
-        /** The media type is not supported */
-        public static final int ERR_UNSUPPORTED_MEDIA_TYPE = 70;
-
-        /** No data to be encoded */
-        public static final int WAR_NO_DATA_YET = 71;
-
-        /** No data to be decoded */
-        public static final int WAR_NO_MORE_STREAM = 72;
-
-        /** Time stamp is invalid */
-        public static final int WAR_INVALID_TIME = 73;
-
-        /** No more data to be decoded */
-        public static final int WAR_NO_MORE_AU = 74;
-
-        /** Semaphore timed out */
-        public static final int WAR_TIME_OUT = 75;
-
-        /** Memory buffer is full */
-        public static final int WAR_BUFFER_FULL = 76;
-
-        /** Server has asked for redirection */
-        public static final int WAR_REDIRECT = 77;
-
-        /** Too many streams in input */
-        public static final int WAR_TOO_MUCH_STREAMS = 78;
-
-        /** The file cannot be opened/ written into as it is locked */
-        public static final int ERR_FILE_LOCKED = 79;
-
-        /** The file access mode is invalid */
-        public static final int ERR_FILE_BAD_MODE_ACCESS = 80;
-
-        /** The file pointer points to an invalid location */
-        public static final int ERR_FILE_INVALID_POSITION = 81;
-
-        /** Invalid string */
-        public static final int ERR_STR_BAD_STRING = 94;
-
-        /** The input string cannot be converted */
-        public static final int ERR_STR_CONV_FAILED = 95;
-
-        /** The string size is too large */
-        public static final int ERR_STR_OVERFLOW = 96;
-
-        /** Bad string arguments */
-        public static final int ERR_STR_BAD_ARGS = 97;
-
-        /** The string value is larger than maximum size allowed */
-        public static final int WAR_STR_OVERFLOW = 98;
-
-        /** The string value is not present in this comparison operation */
-        public static final int WAR_STR_NOT_FOUND = 99;
-
-        /** The thread is not started */
-        public static final int ERR_THREAD_NOT_STARTED = 100;
-
-        /** Trancoding done warning */
-        public static final int WAR_TRANSCODING_DONE = 101;
-
-        /** Unsupported mediatype */
-        public static final int WAR_MEDIATYPE_NOT_SUPPORTED = 102;
-
-        /** Input file contains invalid/unsupported streams */
-        public static final int ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM = 103;
-
-        /** Invalid input file */
-        public static final int ERR_INVALID_INPUT_FILE = 104;
-
-        /** Invalid output video format */
-        public static final int ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT = 105;
-
-        /** Invalid output video frame size */
-        public static final int ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE = 106;
-
-        /** Invalid output video frame rate */
-        public static final int ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE = 107;
-
-        /** Invalid output audio format */
-        public static final int ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT = 108;
-
-        /** Invalid video frame size for H.263 */
-        public static final int ERR_INVALID_VIDEO_FRAME_SIZE_FOR_H263 = 109;
-
-        /** Invalid video frame rate for H.263 */
-        public static final int ERR_INVALID_VIDEO_FRAME_RATE_FOR_H263 = 110;
-
-        /** invalid playback duration */
-        public static final int ERR_DURATION_IS_NULL = 111;
-
-        /** Invalid H.263 profile in file */
-        public static final int ERR_H263_FORBIDDEN_IN_MP4_FILE = 112;
-
-        /** Invalid AAC sampling frequency */
-        public static final int ERR_INVALID_AAC_SAMPLING_FREQUENCY = 113;
-
-        /** Audio conversion failure */
-        public static final int ERR_AUDIO_CONVERSION_FAILED = 114;
-
-        /** Invalid trim start and end times */
-        public static final int ERR_BEGIN_CUT_EQUALS_END_CUT = 115;
-
-        /** End time smaller than start time for trim */
-        public static final int ERR_END_CUT_SMALLER_THAN_BEGIN_CUT = 116;
-
-        /** Output file size is small */
-        public static final int ERR_MAXFILESIZE_TOO_SMALL = 117;
-
-        /** Output video bitrate is too low */
-        public static final int ERR_VIDEOBITRATE_TOO_LOW = 118;
-
-        /** Output audio bitrate is too low */
-        public static final int ERR_AUDIOBITRATE_TOO_LOW = 119;
-
-        /** Output video bitrate is too high */
-        public static final int ERR_VIDEOBITRATE_TOO_HIGH = 120;
-
-        /** Output audio bitrate is too high */
-        public static final int ERR_AUDIOBITRATE_TOO_HIGH = 121;
-
-        /** Output file size is too small */
-        public static final int ERR_OUTPUT_FILE_SIZE_TOO_SMALL = 122;
-
-        /** Unknown stream type */
-        public static final int ERR_READER_UNKNOWN_STREAM_TYPE = 123;
-
-        /** Invalid metadata in input stream */
-        public static final int WAR_READER_NO_METADATA = 124;
-
-        /** Invalid file reader info warning */
-        public static final int WAR_READER_INFORMATION_NOT_PRESENT = 125;
-
-        /** Warning to indicate the the writer is being stopped */
-        public static final int WAR_WRITER_STOP_REQ = 131;
-
-        /** Video decoder failed to provide frame for transcoding */
-        public static final int WAR_VIDEORENDERER_NO_NEW_FRAME = 132;
-
-        /** Video deblocking filter is not implemented */
-        public static final int WAR_DEBLOCKING_FILTER_NOT_IMPLEMENTED = 133;
-
-        /** H.263 decoder profile not supported */
-        public static final int ERR_DECODER_H263_PROFILE_NOT_SUPPORTED = 134;
-
-        /** The input file contains unsupported H.263 profile */
-        public static final int ERR_DECODER_H263_NOT_BASELINE = 135;
-
-        /** There is no more space to store the output file */
-        public static final int ERR_NOMORE_SPACE_FOR_FILE = 136;
-
-        /** Internal error. */
-        public static final int ERR_INTERNAL = 255;
-    }
-
-    /**
-     * Defines output video formats.
-     */
-    public final class VideoFormat {
-        /** No video present in output clip. Used to generate audio only clip */
-        public static final int NO_VIDEO = 0;
-
-        /** H263 video format. */
-        public static final int H263 = 1;
-
-        /** H264 video */
-        public static final int H264 = 2;
-
-        /** MPEG4 video format. */
-        public static final int MPEG4 = 3;
-
-        /** No transcoding. Output video format is same as input video format */
-        public static final int NULL_VIDEO = 254;
-
-        /** Unsupported video format. */
-        public static final int UNSUPPORTED = 255;
-    }
-
-    /** Defines video frame sizes. */
-    public final class VideoFrameSize {
-
-        public static final int SIZE_UNDEFINED = -1;
-
-        /** SQCIF 128 x 96 pixels. */
-        public static final int SQCIF = 0;
-
-        /** QQVGA 160 x 120 pixels. */
-        public static final int QQVGA = 1;
-
-        /** QCIF 176 x 144 pixels. */
-        public static final int QCIF = 2;
-
-        /** QVGA 320 x 240 pixels. */
-        public static final int QVGA = 3;
-
-        /** CIF 352 x 288 pixels. */
-        public static final int CIF = 4;
-
-        /** VGA 640 x 480 pixels. */
-        public static final int VGA = 5;
-
-        /** WVGA 800 X 480 pixels */
-        public static final int WVGA = 6;
-
-        /** NTSC 720 X 480 pixels */
-        public static final int NTSC = 7;
-
-        /** 640 x 360 */
-        public static final int nHD = 8;
-
-        /** 854 x 480 */
-        public static final int WVGA16x9 = 9;
-
-        /** 720p 1280 X 720 */
-        public static final int V720p = 10;
-
-        /** W720p 1080 x 720 */
-        public static final int W720p = 11;
-
-        /** S720p 960 x 720 */
-        public static final int S720p = 12;
-
-        /** 1080p 1920 x 1080 */
-        public static final int V1080p = 13;
-    }
-
-    /**
-     * Defines output video frame rates.
-     */
-    public final class VideoFrameRate {
-        /** Frame rate of 5 frames per second. */
-        public static final int FR_5_FPS = 0;
-
-        /** Frame rate of 7.5 frames per second. */
-        public static final int FR_7_5_FPS = 1;
-
-        /** Frame rate of 10 frames per second. */
-        public static final int FR_10_FPS = 2;
-
-        /** Frame rate of 12.5 frames per second. */
-        public static final int FR_12_5_FPS = 3;
-
-        /** Frame rate of 15 frames per second. */
-        public static final int FR_15_FPS = 4;
-
-        /** Frame rate of 20 frames per second. */
-        public static final int FR_20_FPS = 5;
-
-        /** Frame rate of 25 frames per second. */
-        public static final int FR_25_FPS = 6;
-
-        /** Frame rate of 30 frames per second. */
-        public static final int FR_30_FPS = 7;
-    }
-
-    /**
-     * Defines Video Effect Types.
-     */
-    public static class VideoEffect {
-
-        public static final int NONE = 0;
-
-        public static final int FADE_FROM_BLACK = 8;
-
-        public static final int FADE_TO_BLACK = 16;
-
-        public static final int EXTERNAL = 256;
-
-        public static final int BLACK_AND_WHITE = 257;
-
-        public static final int PINK = 258;
-
-        public static final int GREEN = 259;
-
-        public static final int SEPIA = 260;
-
-        public static final int NEGATIVE = 261;
-
-        public static final int FRAMING = 262;
-
-        public static final int TEXT = 263;
-
-        public static final int ZOOM_IN = 264;
-
-        public static final int ZOOM_OUT = 265;
-
-        public static final int FIFTIES = 266;
-
-        public static final int COLORRGB16 = 267;
-
-        public static final int GRADIENT = 268;
-    }
-
-    /**
-     * Defines the video transitions.
-     */
-    public static class VideoTransition {
-        /** No transition */
-        public static final int NONE = 0;
-
-        /** Cross fade transition */
-        public static final int CROSS_FADE = 1;
-
-        /** External transition. Currently not available. */
-        public static final int EXTERNAL = 256;
-
-        /** AlphaMagic transition. */
-        public static final int ALPHA_MAGIC = 257;
-
-        /** Slide transition. */
-        public static final int SLIDE_TRANSITION = 258;
-
-        /** Fade to black transition. */
-        public static final int FADE_BLACK = 259;
-    }
-
-    /**
-     * Defines settings for the AlphaMagic transition
-     */
-    public static class AlphaMagicSettings {
-        /** Name of the alpha file (JPEG file). */
-        public String file;
-
-        /** Blending percentage [0..100] 0 = no blending. */
-        public int blendingPercent;
-
-        /** Invert the default rotation direction of the AlphaMagic effect. */
-        public boolean invertRotation;
-
-        public int rgbWidth;
-        public int rgbHeight;
-    }
-
-    /** Defines the direction of the Slide transition. */
-    public static final class SlideDirection {
-
-        /** Right out left in. */
-        public static final int RIGHT_OUT_LEFT_IN = 0;
-
-        /** Left out right in. */
-        public static final int LEFT_OUT_RIGTH_IN = 1;
-
-        /** Top out bottom in. */
-        public static final int TOP_OUT_BOTTOM_IN = 2;
-
-        /** Bottom out top in */
-        public static final int BOTTOM_OUT_TOP_IN = 3;
-    }
-
-    /** Defines the Slide transition settings. */
-    public static class SlideTransitionSettings {
-        /**
-         * Direction of the slide transition. See {@link SlideDirection
-         * SlideDirection} for valid values.
-         */
-        public int direction;
-    }
-
-    /**
-     * Defines the settings of a single clip.
-     */
-    public static class ClipSettings {
-
-        /**
-         * The path to the clip file.
-         * <p>
-         * File format of the clip, it can be:
-         * <ul>
-         * <li>3GP file containing MPEG4/H263/H264 video and AAC/AMR audio
-         * <li>JPG file
-         * </ul>
-         */
-
-        public String clipPath;
-
-        /**
-         * The path of the decoded file. This is used only for image files.
-         */
-        public String clipDecodedPath;
-
-        /**
-         * The path of the Original file. This is used only for image files.
-         */
-        public String clipOriginalPath;
-
-        /**
-         * File type of the clip. See {@link FileType FileType} for valid
-         * values.
-         */
-        public int fileType;
-
-        /** Begin of the cut in the clip in milliseconds. */
-        public int beginCutTime;
-
-        /**
-         * End of the cut in the clip in milliseconds. Set both
-         * <code>beginCutTime</code> and <code>endCutTime</code> to
-         * <code>0</code> to get the full length of the clip without a cut. In
-         * case of JPG clip, this is the duration of the JPEG file.
-         */
-        public int endCutTime;
-
-        /**
-         * Begin of the cut in the clip in percentage of the file duration.
-         */
-        public int beginCutPercent;
-
-        /**
-         * End of the cut in the clip in percentage of the file duration. Set
-         * both <code>beginCutPercent</code> and <code>endCutPercent</code> to
-         * <code>0</code> to get the full length of the clip without a cut.
-         */
-        public int endCutPercent;
-
-        /** Enable panning and zooming. */
-        public boolean panZoomEnabled;
-
-        /** Zoom percentage at start of clip. 0 = no zoom, 100 = full zoom */
-        public int panZoomPercentStart;
-
-        /** Top left X coordinate at start of clip. */
-        public int panZoomTopLeftXStart;
-
-        /** Top left Y coordinate at start of clip. */
-        public int panZoomTopLeftYStart;
-
-        /** Zoom percentage at start of clip. 0 = no zoom, 100 = full zoom */
-        public int panZoomPercentEnd;
-
-        /** Top left X coordinate at end of clip. */
-        public int panZoomTopLeftXEnd;
-
-        /** Top left Y coordinate at end of clip. */
-        public int panZoomTopLeftYEnd;
-
-        /**
-         * Set The media rendering. See {@link MediaRendering MediaRendering}
-         * for valid values.
-         */
-        public int mediaRendering;
-
-        /**
-         * RGB width and Height
-         */
-         public int rgbWidth;
-         public int rgbHeight;
-         /**
-         * Video rotation degree.
-         */
-         public int rotationDegree;
-    }
-
-    /**
-     * Defines settings for a transition.
-     */
-    public static class TransitionSettings {
-
-        /** Duration of the transition in msec. */
-        public int duration;
-
-        /**
-         * Transition type for video. See {@link VideoTransition
-         * VideoTransition} for valid values.
-         */
-        public int videoTransitionType;
-
-        /**
-         * Transition type for audio. See {@link AudioTransition
-         * AudioTransition} for valid values.
-         */
-        public int audioTransitionType;
-
-        /**
-         * Transition behaviour. See {@link TransitionBehaviour
-         * TransitionBehaviour} for valid values.
-         */
-        public int transitionBehaviour;
-
-        /**
-         * Settings for AlphaMagic transition. Only needs to be set if
-         * <code>videoTransitionType</code> is set to
-         * <code>VideoTransition.ALPHA_MAGIC</code>. See
-         * {@link AlphaMagicSettings AlphaMagicSettings}.
-         */
-        public AlphaMagicSettings alphaSettings;
-
-        /**
-         * Settings for the Slide transition. See
-         * {@link SlideTransitionSettings SlideTransitionSettings}.
-         */
-        public SlideTransitionSettings slideSettings;
-    }
-
-    public static final class AudioTransition {
-        /** No audio transition. */
-        public static final int NONE = 0;
-
-        /** Cross-fade audio transition. */
-        public static final int CROSS_FADE = 1;
-    }
-
-    /**
-     * Defines transition behaviors.
-     */
-    public static final class TransitionBehaviour {
-
-        /** The transition uses an increasing speed. */
-        public static final int SPEED_UP = 0;
-
-        /** The transition uses a linear (constant) speed. */
-        public static final int LINEAR = 1;
-
-        /** The transition uses a decreasing speed. */
-        public static final int SPEED_DOWN = 2;
-
-        /**
-         * The transition uses a constant speed, but slows down in the middle
-         * section.
-         */
-        public static final int SLOW_MIDDLE = 3;
-
-        /**
-         * The transition uses a constant speed, but increases speed in the
-         * middle section.
-         */
-        public static final int FAST_MIDDLE = 4;
-    }
-
-    /**
-     * Defines settings for the background music.
-     */
-    public static class BackgroundMusicSettings {
-
-        /** Background music file. */
-        public String file;
-
-        /** File type. See {@link FileType FileType} for valid values. */
-        public int fileType;
-
-        /**
-         * Insertion time in milliseconds, in the output video where the
-         * background music must be inserted.
-         */
-        public long insertionTime;
-
-        /**
-         * Volume, as a percentage of the background music track, to use. If
-         * this field is set to 100, the background music will replace the audio
-         * from the video input file(s).
-         */
-        public int volumePercent;
-
-        /**
-         * Start time in milliseconds in the background muisc file from where
-         * the background music should loop. Set both <code>beginLoop</code> and
-         * <code>endLoop</code> to <code>0</code> to disable looping.
-         */
-        public long beginLoop;
-
-        /**
-         * End time in milliseconds in the background music file to where the
-         * background music should loop. Set both <code>beginLoop</code> and
-         * <code>endLoop</code> to <code>0</code> to disable looping.
-         */
-        public long endLoop;
-
-        public boolean enableDucking;
-
-        public int duckingThreshold;
-
-        public int lowVolume;
-
-        public boolean isLooping;
-    }
-
-    /** Defines settings for an effect. */
-    public static class AudioEffect {
-        /** No audio effect. */
-        public static final int NONE = 0;
-
-        /** Fade-in effect. */
-        public static final int FADE_IN = 8;
-
-        /** Fade-out effect. */
-        public static final int FADE_OUT = 16;
-    }
-
-    /** Defines the effect settings. */
-    public static class EffectSettings {
-
-        /** Start time of the effect in milliseconds. */
-        public int startTime;
-
-        /** Duration of the effect in milliseconds. */
-        public int duration;
-
-        /**
-         * Video effect type. See {@link VideoEffect VideoEffect} for valid
-         * values.
-         */
-        public int videoEffectType;
-
-        /**
-         * Audio effect type. See {@link AudioEffect AudioEffect} for valid
-         * values.
-         */
-        public int audioEffectType;
-
-        /**
-         * Start time of the effect in percents of the duration of the clip. A
-         * value of 0 percent means start time is from the beginning of the
-         * clip.
-         */
-        public int startPercent;
-
-        /**
-         * Duration of the effect in percents of the duration of the clip.
-         */
-        public int durationPercent;
-
-        /**
-         * Framing file.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise
-         * this field is ignored.
-         */
-        public String framingFile;
-
-        /**
-         * Framing buffer.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise
-         * this field is ignored.
-         */
-        public int[] framingBuffer;
-
-        /**
-         * Bitmap type Can be from RGB_565 (4), ARGB_4444 (5), ARGB_8888 (6);
-         **/
-
-        public int bitmapType;
-
-        public int width;
-
-        public int height;
-
-        /**
-         * Top left x coordinate. This coordinate is used to set the x
-         * coordinate of the picture in the framing file when the framing file
-         * is selected. The x coordinate is also used to set the location of the
-         * text in the text effect.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING} or
-         * {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this field is
-         * ignored.
-         */
-        public int topLeftX;
-
-        /**
-         * Top left y coordinate. This coordinate is used to set the y
-         * coordinate of the picture in the framing file when the framing file
-         * is selected. The y coordinate is also used to set the location of the
-         * text in the text effect.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING} or
-         * {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this field is
-         * ignored.
-         */
-        public int topLeftY;
-
-        /**
-         * Should the frame be resized or not. If this field is set to
-         * <link>true</code> then the frame size is matched with the output
-         * video size.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise
-         * this field is ignored.
-         */
-        public boolean framingResize;
-
-        /**
-         * Size to which the framing buffer needs to be resized to
-         * This is valid only if framingResize is true
-         */
-        public int framingScaledSize;
-        /**
-         * Text to insert in the video.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this
-         * field is ignored.
-         */
-        public String text;
-
-        /**
-         * Text attributes for the text to insert in the video.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT}. Otherwise this
-         * field is ignored. For more details about this field see the
-         * integration guide.
-         */
-        public String textRenderingData;
-
-        /** Width of the text buffer in pixels. */
-        public int textBufferWidth;
-
-        /** Height of the text buffer in pixels. */
-        public int textBufferHeight;
-
-        /**
-         * Processing rate for the fifties effect. A high value (e.g. 30)
-         * results in high effect strength.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#FIFTIES VideoEffect.FIFTIES}. Otherwise
-         * this field is ignored.
-         */
-        public int fiftiesFrameRate;
-
-        /**
-         * RGB 16 color of the RGB16 and gradient color effect.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#COLORRGB16 VideoEffect.COLORRGB16} or
-         * {@link VideoEffect#GRADIENT VideoEffect.GRADIENT}. Otherwise this
-         * field is ignored.
-         */
-        public int rgb16InputColor;
-
-        /**
-         * Start alpha blending percentage.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
-         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
-         * is ignored.
-         */
-        public int alphaBlendingStartPercent;
-
-        /**
-         * Middle alpha blending percentage.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
-         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
-         * is ignored.
-         */
-        public int alphaBlendingMiddlePercent;
-
-        /**
-         * End alpha blending percentage.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
-         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
-         * is ignored.
-         */
-        public int alphaBlendingEndPercent;
-
-        /**
-         * Duration, in percentage of effect duration of the fade-in phase.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
-         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
-         * is ignored.
-         */
-        public int alphaBlendingFadeInTimePercent;
-
-        /**
-         * Duration, in percentage of effect duration of the fade-out phase.
-         * <p>
-         * This field is only used when the field <code>videoEffectType</code>
-         * is set to {@link VideoEffect#TEXT VideoEffect.TEXT} or
-         * {@link VideoEffect#FRAMING VideoEffect.FRAMING}. Otherwise this field
-         * is ignored.
-         */
-        public int alphaBlendingFadeOutTimePercent;
-    }
-
-    /** Defines the clip properties for preview */
-    public static class PreviewClips {
-
-        /**
-         * The path to the clip file.
-         * <p>
-         * File format of the clip, it can be:
-         * <ul>
-         * <li>3GP file containing MPEG4/H263 video and AAC/AMR audio
-         * <li>JPG file
-         * </ul>
-         */
-
-        public String clipPath;
-
-        /**
-         * File type of the clip. See {@link FileType FileType} for valid
-         * values.
-         */
-        public int fileType;
-
-        /** Begin of the cut in the clip in milliseconds. */
-        public long beginPlayTime;
-
-        public long endPlayTime;
-
-        /**
-         * Set The media rendering. See {@link MediaRendering MediaRendering}
-         * for valid values.
-         */
-        public int mediaRendering;
-
-    }
-
-    /** Defines the audio settings. */
-    public static class AudioSettings {
-
-        String pFile;
-
-        /** < PCM file path */
-        String Id;
-
-        boolean bRemoveOriginal;
-
-        /** < If true, the original audio track is not taken into account */
-        int channels;
-
-        /** < Number of channels (1=mono, 2=stereo) of BGM clip */
-        int Fs;
-
-        /**
-         * < Sampling audio frequency (8000 for amr, 16000 or more for aac) of
-         * BGM clip
-         */
-        int ExtendedFs;
-
-        /** < Extended frequency for AAC+, eAAC+ streams of BGM clip */
-        long startMs;
-
-        /** < Time, in milliseconds, at which the added audio track is inserted */
-        long beginCutTime;
-
-        long endCutTime;
-
-        int fileType;
-
-        int volume;
-
-        /** < Volume, in percentage, of the added audio track */
-        boolean loop;
-
-        /** < Looping on/off > **/
-
-        /** Audio mix and Duck **/
-        int ducking_threshold;
-
-        int ducking_lowVolume;
-
-        boolean bInDucking_enable;
-
-        String pcmFilePath;
-    }
-
-    /** Encapsulates preview clips and effect settings */
-    public static class PreviewSettings {
-
-        public PreviewClips[] previewClipsArray;
-
-        /** The effect settings. */
-        public EffectSettings[] effectSettingsArray;
-
-    }
-
-    /** Encapsulates clip properties */
-    public static class PreviewClipProperties {
-
-        public Properties[] clipProperties;
-
-    }
-
-    /** Defines the editing settings. */
-    public static class EditSettings {
-
-        /**
-         * Array of clip settings. There is one <code>clipSetting</code> for
-         * each clip.
-         */
-        public ClipSettings[] clipSettingsArray;
-
-        /**
-         * Array of transition settings. If there are n clips (and thus n
-         * <code>clipSettings</code>) then there are (n-1) transitions and (n-1)
-         * <code>transistionSettings</code> in
-         * <code>transistionSettingsArray</code>.
-         */
-        public TransitionSettings[] transitionSettingsArray;
-
-        /** The effect settings. */
-        public EffectSettings[] effectSettingsArray;
-
-        /**
-         * Video frame rate of the output clip. See {@link VideoFrameRate
-         * VideoFrameRate} for valid values.
-         */
-        public int videoFrameRate;
-
-        /** Output file name. Must be an absolute path. */
-        public String outputFile;
-
-        /**
-         * Size of the video frames in the output clip. See
-         * {@link VideoFrameSize VideoFrameSize} for valid values.
-         */
-        public int videoFrameSize;
-
-        /**
-         * Format of the video stream in the output clip. See
-         * {@link VideoFormat VideoFormat} for valid values.
-         */
-        public int videoFormat;
-
-        /**
-         * Profile of the video stream in the output clip.
-         */
-        public int videoProfile;
-
-        /**
-         * Level of the video stream in the output clip.
-         */
-        public int videoLevel;
-
-        /**
-         * Format of the audio stream in the output clip. See
-         * {@link AudioFormat AudioFormat} for valid values.
-         */
-        public int audioFormat;
-
-        /**
-         * Sampling frequency of the audio stream in the output clip. See
-         * {@link AudioSamplingFrequency AudioSamplingFrequency} for valid
-         * values.
-         */
-        public int audioSamplingFreq;
-
-        /**
-         * Maximum file size. By setting this you can set the maximum size of
-         * the output clip. Set it to <code>0</code> to let the class ignore
-         * this filed.
-         */
-        public int maxFileSize;
-
-        /**
-         * Number of audio channels in output clip. Use <code>0</code> for none,
-         * <code>1</code> for mono or <code>2</code> for stereo. None is only
-         * allowed when the <code>audioFormat</code> field is set to
-         * {@link AudioFormat#NO_AUDIO AudioFormat.NO_AUDIO} or
-         * {@link AudioFormat#NULL_AUDIO AudioFormat.NULL_AUDIO} Mono is only
-         * allowed when the <code>audioFormat</code> field is set to
-         * {@link AudioFormat#AAC AudioFormat.AAC}
-         */
-        public int audioChannels;
-
-        /** Video bitrate. See {@link Bitrate Bitrate} for valid values. */
-        public int videoBitrate;
-
-        /** Audio bitrate. See {@link Bitrate Bitrate} for valid values. */
-        public int audioBitrate;
-
-        /**
-         * Background music settings. See {@link BackgroundMusicSettings
-         * BackgroundMusicSettings} for valid values.
-         */
-        public BackgroundMusicSettings backgroundMusicSettings;
-
-        public int primaryTrackVolume;
-
-    }
-
-    /**
-     * Defines the media properties.
-     **/
-
-    public static class Properties {
-
-        /**
-         * Duration of the media in milliseconds.
-         */
-
-        public int duration;
-
-        /**
-         * File type.
-         */
-
-        public int fileType;
-
-        /**
-         * Video format.
-         */
-
-        public int videoFormat;
-
-        /**
-         * Duration of the video stream of the media in milliseconds.
-         */
-
-        public int videoDuration;
-
-        /**
-         * Bitrate of the video stream of the media.
-         */
-
-        public int videoBitrate;
-
-        /**
-         * Width of the video frames or the width of the still picture in
-         * pixels.
-         */
-
-        public int width;
-
-        /**
-         * Height of the video frames or the height of the still picture in
-         * pixels.
-         */
-
-        public int height;
-
-        /**
-         * Average frame rate of video in the media in frames per second.
-         */
-
-        public float averageFrameRate;
-
-        /**
-         * Profile of the video in the media.
-         */
-
-        public int profile;
-
-        /**
-         * Level of the video in the media.
-         */
-
-        public int level;
-
-        /**
-         * Is Video Profile supported.
-         */
-
-        public boolean profileSupported;
-
-        /**
-         * Is Video Level supported.
-         */
-
-        public boolean levelSupported;
-
-        /**
-         * Audio format.
-         */
-
-        public int audioFormat;
-
-        /**
-         * Duration of the audio stream of the media in milliseconds.
-         */
-
-        public int audioDuration;
-
-        /**
-         * Bitrate of the audio stream of the media.
-         */
-
-        public int audioBitrate;
-
-        /**
-         * Number of audio channels in the media.
-         */
-
-        public int audioChannels;
-
-        /**
-         * Sampling frequency of the audio stream in the media in samples per
-         * second.
-         */
-
-        public int audioSamplingFrequency;
-
-        /**
-         * Volume value of the audio track as percentage.
-         */
-        public int audioVolumeValue;
-
-        /**
-         * Video rotation degree.
-         */
-        public int videoRotation;
-
-        public String Id;
-    }
-
-    /**
-     * Constructor
-     *
-     * @param projectPath The path where the VideoEditor stores all files
-     *        related to the project
-     * @param lock The semaphore
-     * @param veObj The video editor reference
-     */
-    public MediaArtistNativeHelper(String projectPath, Semaphore lock, VideoEditor veObj) {
-        mProjectPath = projectPath;
-        if (veObj != null) {
-            mVideoEditor = veObj;
-        } else {
-            mVideoEditor = null;
-            throw new IllegalArgumentException("video editor object is null");
-        }
-        if (mStoryBoardSettings == null) {
-            mStoryBoardSettings = new EditSettings();
-        }
-
-        mLock = lock;
-
-        _init(mProjectPath, "null");
-        mAudioTrackPCMFilePath = null;
-    }
-
-    /**
-     * @return The project path
-     */
-    String getProjectPath() {
-        return mProjectPath;
-    }
-
-    /**
-     * @return The Audio Track PCM file path
-     */
-    String getProjectAudioTrackPCMFilePath() {
-        return mAudioTrackPCMFilePath;
-    }
-
-    /**
-     * Invalidates the PCM file
-     */
-    void invalidatePcmFile() {
-        if (mAudioTrackPCMFilePath != null) {
-            new File(mAudioTrackPCMFilePath).delete();
-            mAudioTrackPCMFilePath = null;
-        }
-    }
-
-    @SuppressWarnings("unused")
-    private void onProgressUpdate(int taskId, int progress) {
-        if (mProcessingState == PROCESSING_EXPORT) {
-            if (mExportProgressListener != null) {
-                if (mProgressToApp < progress) {
-                    mExportProgressListener.onProgress(mVideoEditor, mOutputFilename, progress);
-                    /* record previous progress */
-                    mProgressToApp = progress;
-                }
-            }
-        }
-        else {
-            // Adapt progress depending on current state
-            int actualProgress = 0;
-            int action = 0;
-
-            if (mProcessingState == PROCESSING_AUDIO_PCM) {
-                action = MediaProcessingProgressListener.ACTION_DECODE;
-            } else {
-                action = MediaProcessingProgressListener.ACTION_ENCODE;
-            }
-
-            switch (mProcessingState) {
-                case PROCESSING_AUDIO_PCM:
-                    actualProgress = progress;
-                    break;
-                case PROCESSING_TRANSITION:
-                    actualProgress = progress;
-                    break;
-                case PROCESSING_KENBURNS:
-                    actualProgress = progress;
-                    break;
-                case PROCESSING_INTERMEDIATE1:
-                    if ((progress == 0) && (mProgressToApp != 0)) {
-                        mProgressToApp = 0;
-                    }
-                    if ((progress != 0) || (mProgressToApp != 0)) {
-                        actualProgress = progress/4;
-                    }
-                    break;
-                case PROCESSING_INTERMEDIATE2:
-                    if ((progress != 0) || (mProgressToApp != 0)) {
-                        actualProgress = 25 + progress/4;
-                    }
-                    break;
-                case PROCESSING_INTERMEDIATE3:
-                    if ((progress != 0) || (mProgressToApp != 0)) {
-                        actualProgress = 50 + progress/2;
-                    }
-                    break;
-                case PROCESSING_NONE:
-
-                default:
-                    Log.e(TAG, "ERROR unexpected State=" + mProcessingState);
-                    return;
-            }
-            if ((mProgressToApp != actualProgress) && (actualProgress != 0)) {
-
-                mProgressToApp = actualProgress;
-
-                if (mMediaProcessingProgressListener != null) {
-                    // Send the progress indication
-                    mMediaProcessingProgressListener.onProgress(mProcessingObject, action,
-                                                                actualProgress);
-                }
-            }
-            /* avoid 0 in next intermediate call */
-            if (mProgressToApp == 0) {
-                if (mMediaProcessingProgressListener != null) {
-                    /*
-                     *  Send the progress indication
-                     */
-                    mMediaProcessingProgressListener.onProgress(mProcessingObject, action,
-                                                                actualProgress);
-                }
-                mProgressToApp = 1;
-            }
-        }
-    }
-
-    @SuppressWarnings("unused")
-    private void onPreviewProgressUpdate(int progress, boolean isFinished,
-                  boolean updateOverlay, String filename, int renderingMode, int error) {
-        if (mPreviewProgressListener != null) {
-            if (mIsFirstProgress) {
-                mPreviewProgressListener.onStart(mVideoEditor);
-                mIsFirstProgress = false;
-            }
-
-            final VideoEditor.OverlayData overlayData;
-            if (updateOverlay) {
-                overlayData = new VideoEditor.OverlayData();
-                if (filename != null) {
-                    overlayData.set(BitmapFactory.decodeFile(filename), renderingMode);
-                } else {
-                    overlayData.setClear();
-                }
-            } else {
-                overlayData = null;
-            }
-
-            if (progress != 0) {
-                mPreviewProgress = progress;
-            }
-
-            if (isFinished) {
-                mPreviewProgressListener.onStop(mVideoEditor);
-            } else if (error != 0) {
-                mPreviewProgressListener.onError(mVideoEditor, error);
-            } else {
-                mPreviewProgressListener.onProgress(mVideoEditor, progress, overlayData);
-            }
-        }
-    }
-
-    /**
-     * Release the native helper object
-     */
-    void releaseNativeHelper() throws InterruptedException {
-        release();
-    }
-
-    /**
-     * Release the native helper to end the Audio Graph process
-     */
-    @SuppressWarnings("unused")
-    private void onAudioGraphExtractProgressUpdate(int progress, boolean isVideo) {
-        if ((mExtractAudioWaveformProgressListener != null) && (progress > 0)) {
-            mExtractAudioWaveformProgressListener.onProgress(progress);
-        }
-    }
-
-    /**
-     * Populates the Effect Settings in EffectSettings
-     *
-     * @param effects The reference of EffectColor
-     *
-     * @return The populated effect settings in EffectSettings reference
-     */
-    EffectSettings getEffectSettings(EffectColor effects) {
-        EffectSettings effectSettings = new EffectSettings();
-        effectSettings.startTime = (int)effects.getStartTime();
-        effectSettings.duration = (int)effects.getDuration();
-        effectSettings.videoEffectType = getEffectColorType(effects);
-        effectSettings.audioEffectType = 0;
-        effectSettings.startPercent = 0;
-        effectSettings.durationPercent = 0;
-        effectSettings.framingFile = null;
-        effectSettings.topLeftX = 0;
-        effectSettings.topLeftY = 0;
-        effectSettings.framingResize = false;
-        effectSettings.text = null;
-        effectSettings.textRenderingData = null;
-        effectSettings.textBufferWidth = 0;
-        effectSettings.textBufferHeight = 0;
-        if (effects.getType() == EffectColor.TYPE_FIFTIES) {
-            effectSettings.fiftiesFrameRate = 15;
-        } else {
-            effectSettings.fiftiesFrameRate = 0;
-        }
-
-        if ((effectSettings.videoEffectType == VideoEffect.COLORRGB16)
-                || (effectSettings.videoEffectType == VideoEffect.GRADIENT)) {
-            effectSettings.rgb16InputColor = effects.getColor();
-        }
-
-        effectSettings.alphaBlendingStartPercent = 0;
-        effectSettings.alphaBlendingMiddlePercent = 0;
-        effectSettings.alphaBlendingEndPercent = 0;
-        effectSettings.alphaBlendingFadeInTimePercent = 0;
-        effectSettings.alphaBlendingFadeOutTimePercent = 0;
-        return effectSettings;
-    }
-
-    /**
-     * Populates the Overlay Settings in EffectSettings
-     *
-     * @param overlay The reference of OverlayFrame
-     *
-     * @return The populated overlay settings in EffectSettings reference
-     */
-    EffectSettings getOverlaySettings(OverlayFrame overlay) {
-        EffectSettings effectSettings = new EffectSettings();
-        Bitmap bitmap = null;
-
-        effectSettings.startTime = (int)overlay.getStartTime();
-        effectSettings.duration = (int)overlay.getDuration();
-        effectSettings.videoEffectType = VideoEffect.FRAMING;
-        effectSettings.audioEffectType = 0;
-        effectSettings.startPercent = 0;
-        effectSettings.durationPercent = 0;
-        effectSettings.framingFile = null;
-
-        if ((bitmap = overlay.getBitmap()) != null) {
-            effectSettings.framingFile = overlay.getFilename();
-
-            if (effectSettings.framingFile == null) {
-                try {
-                    (overlay).save(mProjectPath);
-                } catch (IOException e) {
-                    Log.e(TAG, "getOverlaySettings : File not found");
-                }
-                effectSettings.framingFile = overlay.getFilename();
-            }
-            if (bitmap.getConfig() == Bitmap.Config.ARGB_8888)
-                effectSettings.bitmapType = 6;
-            else if (bitmap.getConfig() == Bitmap.Config.ARGB_4444)
-                effectSettings.bitmapType = 5;
-            else if (bitmap.getConfig() == Bitmap.Config.RGB_565)
-                effectSettings.bitmapType = 4;
-            else if (bitmap.getConfig() == Bitmap.Config.ALPHA_8)
-                throw new RuntimeException("Bitmap config not supported");
-
-            effectSettings.width = bitmap.getWidth();
-            effectSettings.height = bitmap.getHeight();
-            effectSettings.framingBuffer = new int[effectSettings.width];
-            int tmp = 0;
-            short maxAlpha = 0;
-            short minAlpha = (short)0xFF;
-            short alpha = 0;
-            while (tmp < effectSettings.height) {
-                bitmap.getPixels(effectSettings.framingBuffer, 0,
-                                 effectSettings.width, 0, tmp,
-                                 effectSettings.width, 1);
-                for (int i = 0; i < effectSettings.width; i++) {
-                    alpha = (short)((effectSettings.framingBuffer[i] >> 24) & 0xFF);
-                    if (alpha > maxAlpha) {
-                        maxAlpha = alpha;
-                    }
-                    if (alpha < minAlpha) {
-                        minAlpha = alpha;
-                    }
-                }
-                tmp += 1;
-            }
-            alpha = (short)((maxAlpha + minAlpha) / 2);
-            alpha = (short)((alpha * 100) / 256);
-            effectSettings.alphaBlendingEndPercent = alpha;
-            effectSettings.alphaBlendingMiddlePercent = alpha;
-            effectSettings.alphaBlendingStartPercent = alpha;
-            effectSettings.alphaBlendingFadeInTimePercent = 100;
-            effectSettings.alphaBlendingFadeOutTimePercent = 100;
-            effectSettings.framingBuffer = null;
-
-            /*
-             * Set the resized RGB file dimensions
-             */
-            effectSettings.width = overlay.getResizedRGBSizeWidth();
-            if(effectSettings.width == 0) {
-                effectSettings.width = bitmap.getWidth();
-            }
-
-            effectSettings.height = overlay.getResizedRGBSizeHeight();
-            if(effectSettings.height == 0) {
-                effectSettings.height = bitmap.getHeight();
-            }
-
-        }
-
-        effectSettings.topLeftX = 0;
-        effectSettings.topLeftY = 0;
-
-        effectSettings.framingResize = true;
-        effectSettings.text = null;
-        effectSettings.textRenderingData = null;
-        effectSettings.textBufferWidth = 0;
-        effectSettings.textBufferHeight = 0;
-        effectSettings.fiftiesFrameRate = 0;
-        effectSettings.rgb16InputColor = 0;
-        int mediaItemHeight;
-        int aspectRatio;
-        if (overlay.getMediaItem() instanceof MediaImageItem) {
-            if (((MediaImageItem)overlay.getMediaItem()).getGeneratedImageClip() != null) {
-                // Ken Burns was applied
-                mediaItemHeight = ((MediaImageItem)overlay.getMediaItem()).getGeneratedClipHeight();
-                aspectRatio = getAspectRatio(
-                    ((MediaImageItem)overlay.getMediaItem()).getGeneratedClipWidth()
-                    , mediaItemHeight);
-            } else {
-                //For image get the scaled height. Aspect ratio would remain the same
-                mediaItemHeight = ((MediaImageItem)overlay.getMediaItem()).getScaledHeight();
-                aspectRatio = overlay.getMediaItem().getAspectRatio();
-            }
-        } else {
-            aspectRatio = overlay.getMediaItem().getAspectRatio();
-            mediaItemHeight = overlay.getMediaItem().getHeight();
-        }
-        effectSettings.framingScaledSize = findVideoResolution(aspectRatio, mediaItemHeight);
-        return effectSettings;
-    }
-
-     /* get Video Editor aspect ratio */
-    int nativeHelperGetAspectRatio() {
-        return mVideoEditor.getAspectRatio();
-    }
-
-    /**
-     * Sets the export audio codec
-     *
-     * @param export audio codec
-     *
-     */
-    void setAudioCodec(int codec) {
-        mExportAudioCodec = codec;
-    }
-    /**
-     * Sets the export video codec
-     *
-     * @param export video codec
-     *
-     */
-    void setVideoCodec(int codec) {
-        mExportVideoCodec = codec;
-    }
-
-    /**
-     * Sets the audio regenerate flag
-     *
-     * @param flag The boolean to set the audio regenerate flag
-     *
-     */
-    void setAudioflag(boolean flag) {
-        //check if the file exists.
-        if (!(new File(String.format(mProjectPath + "/" + AUDIO_TRACK_PCM_FILE)).exists())) {
-            flag = true;
-        }
-        mRegenerateAudio = flag;
-    }
-
-    /**
-     * Gets the audio regenerate flag
-     *
-     * @param return The boolean to get the audio regenerate flag
-     *
-     */
-    boolean getAudioflag() {
-        return mRegenerateAudio;
-    }
-
-    /**
-     * Maps the average frame rate to one of the defined enum values
-     *
-     * @param averageFrameRate The average frame rate of video item
-     *
-     * @return The frame rate from one of the defined enum values
-     */
-    int GetClosestVideoFrameRate(int averageFrameRate) {
-        if (averageFrameRate >= 25) {
-            return VideoFrameRate.FR_30_FPS;
-        } else if (averageFrameRate >= 20) {
-            return VideoFrameRate.FR_25_FPS;
-        } else if (averageFrameRate >= 15) {
-            return VideoFrameRate.FR_20_FPS;
-        } else if (averageFrameRate >= 12) {
-            return VideoFrameRate.FR_15_FPS;
-        } else if (averageFrameRate >= 10) {
-            return VideoFrameRate.FR_12_5_FPS;
-        } else if (averageFrameRate >= 7) {
-            return VideoFrameRate.FR_10_FPS;
-        } else if (averageFrameRate >= 5) {
-            return VideoFrameRate.FR_7_5_FPS;
-        } else {
-            return -1;
-        }
-    }
-
-    /**
-     * Helper function to adjust the effect or overlay start time
-     * depending on the begin and end boundary time of meddia item
-     */
-    public void adjustEffectsStartTimeAndDuration(EffectSettings lEffect, int beginCutTime,
-                                                  int endCutTime) {
-
-        int effectStartTime = 0;
-        int effectDuration = 0;
-
-        /**
-         * cbct -> clip begin cut time
-         * cect -> clip end cut time
-         ****************************************
-         *  |                                 |
-         *  |         cbct        cect        |
-         *  | <-1-->   |           |          |
-         *  |       <--|-2->       |          |
-         *  |          | <---3---> |          |
-         *  |          |        <--|-4--->    |
-         *  |          |           | <--5-->  |
-         *  |      <---|------6----|---->     |
-         *  |                                 |
-         *  < : effectStart
-         *  > : effectStart + effectDuration
-         ****************************************
-         **/
-
-        /** 1 & 5 */
-        /**
-         * Effect falls out side the trim duration. In such a case effects shall
-         * not be applied.
-         */
-        if ((lEffect.startTime > endCutTime)
-                || ((lEffect.startTime + lEffect.duration) <= beginCutTime)) {
-
-            effectStartTime = 0;
-            effectDuration = 0;
-
-            lEffect.startTime = effectStartTime;
-            lEffect.duration = effectDuration;
-            return;
-        }
-
-        /** 2 */
-        if ((lEffect.startTime < beginCutTime)
-                && ((lEffect.startTime + lEffect.duration) > beginCutTime)
-                && ((lEffect.startTime + lEffect.duration) <= endCutTime)) {
-            effectStartTime = 0;
-            effectDuration = lEffect.duration;
-
-            effectDuration -= (beginCutTime - lEffect.startTime);
-            lEffect.startTime = effectStartTime;
-            lEffect.duration = effectDuration;
-            return;
-        }
-
-        /** 3 */
-        if ((lEffect.startTime >= beginCutTime)
-                && ((lEffect.startTime + lEffect.duration) <= endCutTime)) {
-            effectStartTime = lEffect.startTime - beginCutTime;
-            lEffect.startTime = effectStartTime;
-            lEffect.duration = lEffect.duration;
-            return;
-        }
-
-        /** 4 */
-        if ((lEffect.startTime >= beginCutTime)
-                && ((lEffect.startTime + lEffect.duration) > endCutTime)) {
-            effectStartTime = lEffect.startTime - beginCutTime;
-            effectDuration = endCutTime - lEffect.startTime;
-            lEffect.startTime = effectStartTime;
-            lEffect.duration = effectDuration;
-            return;
-        }
-
-        /** 6 */
-        if ((lEffect.startTime < beginCutTime)
-                && ((lEffect.startTime + lEffect.duration) > endCutTime)) {
-            effectStartTime = 0;
-            effectDuration = endCutTime - beginCutTime;
-            lEffect.startTime = effectStartTime;
-            lEffect.duration = effectDuration;
-            return;
-        }
-
-    }
-
-    /**
-     * Generates the clip for preview or export
-     *
-     * @param editSettings The EditSettings reference for generating
-     * a clip for preview or export
-     *
-     * @return error value
-     */
-    public int generateClip(EditSettings editSettings) {
-        int err = 0;
-
-        try {
-            err = nativeGenerateClip(editSettings);
-        } catch (IllegalArgumentException ex) {
-            Log.e(TAG, "Illegal Argument exception in load settings");
-            return -1;
-        } catch (IllegalStateException ex) {
-            Log.e(TAG, "Illegal state exception in load settings");
-            return -1;
-        } catch (RuntimeException ex) {
-            Log.e(TAG, "Runtime exception in load settings");
-            return -1;
-        }
-        return err;
-    }
-
-    /**
-     * Init function to initialiZe the  ClipSettings reference to
-     * default values
-     *
-     * @param lclipSettings The ClipSettings reference
-     */
-    void initClipSettings(ClipSettings lclipSettings) {
-        lclipSettings.clipPath = null;
-        lclipSettings.clipDecodedPath = null;
-        lclipSettings.clipOriginalPath = null;
-        lclipSettings.fileType = 0;
-        lclipSettings.endCutTime = 0;
-        lclipSettings.beginCutTime = 0;
-        lclipSettings.beginCutPercent = 0;
-        lclipSettings.endCutPercent = 0;
-        lclipSettings.panZoomEnabled = false;
-        lclipSettings.panZoomPercentStart = 0;
-        lclipSettings.panZoomTopLeftXStart = 0;
-        lclipSettings.panZoomTopLeftYStart = 0;
-        lclipSettings.panZoomPercentEnd = 0;
-        lclipSettings.panZoomTopLeftXEnd = 0;
-        lclipSettings.panZoomTopLeftYEnd = 0;
-        lclipSettings.mediaRendering = 0;
-        lclipSettings.rotationDegree = 0;
-    }
-
-
-    /**
-     * Populates the settings for generating an effect clip
-     *
-     * @param lMediaItem The media item for which the effect clip
-     * needs to be generated
-     * @param lclipSettings The ClipSettings reference containing
-     * clips data
-     * @param e The EditSettings reference containing effect specific data
-     * @param uniqueId The unique id used in the name of the output clip
-     * @param clipNo Used for internal purpose
-     *
-     * @return The name and path of generated clip
-     */
-    String generateEffectClip(MediaItem lMediaItem, ClipSettings lclipSettings,
-            EditSettings e,String uniqueId,int clipNo) {
-        int err = 0;
-        EditSettings editSettings = null;
-        String EffectClipPath = null;
-        int outVideoProfile = 0;
-        int outVideoLevel = 0;
-        editSettings = new EditSettings();
-
-        editSettings.clipSettingsArray = new ClipSettings[1];
-        editSettings.clipSettingsArray[0] = lclipSettings;
-
-        editSettings.backgroundMusicSettings = null;
-        editSettings.transitionSettingsArray = null;
-        editSettings.effectSettingsArray = e.effectSettingsArray;
-
-        EffectClipPath = String.format(mProjectPath + "/" + "ClipEffectIntermediate" + "_"
-                + lMediaItem.getId() + uniqueId + ".3gp");
-
-        File tmpFile = new File(EffectClipPath);
-        if (tmpFile.exists()) {
-            tmpFile.delete();
-        }
-
-        outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
-        outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
-        editSettings.videoProfile = outVideoProfile;
-        editSettings.videoLevel= outVideoLevel;
-
-        if (lMediaItem instanceof MediaVideoItem) {
-            MediaVideoItem m = (MediaVideoItem)lMediaItem;
-
-            editSettings.audioFormat = AudioFormat.AAC;
-            editSettings.audioChannels = 2;
-            editSettings.audioBitrate = Bitrate.BR_64_KBPS;
-            editSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
-
-            editSettings.videoFormat = VideoFormat.H264;
-            editSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
-            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
-                    m.getHeight());
-            editSettings.videoBitrate = findVideoBitrate(editSettings.videoFrameSize);
-        } else {
-            MediaImageItem m = (MediaImageItem)lMediaItem;
-            editSettings.audioBitrate = Bitrate.BR_64_KBPS;
-            editSettings.audioChannels = 2;
-            editSettings.audioFormat = AudioFormat.AAC;
-            editSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
-
-            editSettings.videoFormat = VideoFormat.H264;
-            editSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
-            editSettings.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
-                    m.getScaledHeight());
-            editSettings.videoBitrate = findVideoBitrate(editSettings.videoFrameSize);
-        }
-
-        editSettings.outputFile = EffectClipPath;
-
-        if (clipNo == 1) {
-            mProcessingState  = PROCESSING_INTERMEDIATE1;
-        } else if (clipNo == 2) {
-            mProcessingState  = PROCESSING_INTERMEDIATE2;
-        }
-        mProcessingObject = lMediaItem;
-        err = generateClip(editSettings);
-        mProcessingState  = PROCESSING_NONE;
-
-        if (err == 0) {
-            lclipSettings.clipPath = EffectClipPath;
-            lclipSettings.fileType = FileType.THREE_GPP;
-            return EffectClipPath;
-        } else {
-            throw new RuntimeException("preview generation cannot be completed");
-        }
-    }
-
-
-    /**
-     * Populates the settings for generating a Ken Burn effect clip
-     *
-     * @param m The media image item for which the Ken Burn effect clip
-     * needs to be generated
-     * @param e The EditSettings reference clip specific data
-     *
-     * @return The name and path of generated clip
-     */
-    String generateKenBurnsClip(EditSettings e, MediaImageItem m) {
-        String output = null;
-        int err = 0;
-        int outVideoProfile = 0;
-        int outVideoLevel = 0;
-
-        e.backgroundMusicSettings = null;
-        e.transitionSettingsArray = null;
-        e.effectSettingsArray = null;
-        output = String.format(mProjectPath + "/" + "ImageClip-" + m.getId() + ".3gp");
-
-        File tmpFile = new File(output);
-        if (tmpFile.exists()) {
-            tmpFile.delete();
-        }
-
-        outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
-        outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
-        e.videoProfile = outVideoProfile;
-        e.videoLevel = outVideoLevel;
-
-        e.outputFile = output;
-        e.audioBitrate = Bitrate.BR_64_KBPS;
-        e.audioChannels = 2;
-        e.audioFormat = AudioFormat.AAC;
-        e.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
-
-        e.videoFormat = VideoFormat.H264;
-        e.videoFrameRate = VideoFrameRate.FR_30_FPS;
-        e.videoFrameSize = findVideoResolution(mVideoEditor.getAspectRatio(),
-                                                           m.getScaledHeight());
-        e.videoBitrate = findVideoBitrate(e.videoFrameSize);
-
-        mProcessingState  = PROCESSING_KENBURNS;
-        mProcessingObject = m;
-        err = generateClip(e);
-        // Reset the processing state and check for errors
-        mProcessingState  = PROCESSING_NONE;
-        if (err != 0) {
-            throw new RuntimeException("preview generation cannot be completed");
-        }
-        return output;
-    }
-
-
-    /**
-     * Calculates the output resolution for transition clip
-     *
-     * @param m1 First media item associated with transition
-     * @param m2 Second media item associated with transition
-     *
-     * @return The transition resolution
-     */
-    private int getTransitionResolution(MediaItem m1, MediaItem m2) {
-        int clip1Height = 0;
-        int clip2Height = 0;
-        int videoSize = 0;
-
-        if (m1 != null && m2 != null) {
-            if (m1 instanceof MediaVideoItem) {
-                clip1Height = m1.getHeight();
-            } else if (m1 instanceof MediaImageItem) {
-                clip1Height = ((MediaImageItem)m1).getScaledHeight();
-            }
-            if (m2 instanceof MediaVideoItem) {
-                clip2Height = m2.getHeight();
-            } else if (m2 instanceof MediaImageItem) {
-                clip2Height = ((MediaImageItem)m2).getScaledHeight();
-            }
-            if (clip1Height > clip2Height) {
-                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip1Height);
-            } else {
-                videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip2Height);
-            }
-        } else if (m1 == null && m2 != null) {
-            if (m2 instanceof MediaVideoItem) {
-                clip2Height = m2.getHeight();
-            } else if (m2 instanceof MediaImageItem) {
-                clip2Height = ((MediaImageItem)m2).getScaledHeight();
-            }
-            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip2Height);
-        } else if (m1 != null && m2 == null) {
-            if (m1 instanceof MediaVideoItem) {
-                clip1Height = m1.getHeight();
-            } else if (m1 instanceof MediaImageItem) {
-                clip1Height = ((MediaImageItem)m1).getScaledHeight();
-            }
-            videoSize = findVideoResolution(mVideoEditor.getAspectRatio(), clip1Height);
-        }
-        return videoSize;
-    }
-
-    /**
-     * Populates the settings for generating an transition clip
-     *
-     * @param m1 First media item associated with transition
-     * @param m2 Second media item associated with transition
-     * @param e The EditSettings reference containing
-     * clip specific data
-     * @param uniqueId The unique id used in the name of the output clip
-     * @param t The Transition specific data
-     *
-     * @return The name and path of generated clip
-     */
-    String generateTransitionClip(EditSettings e, String uniqueId,
-            MediaItem m1, MediaItem m2,Transition t) {
-        String outputFilename = null;
-        int err = 0;
-        int outVideoProfile = 0;
-        int outVideoLevel = 0;
-        outputFilename = String.format(mProjectPath + "/" + uniqueId + ".3gp");
-
-        outVideoProfile = VideoEditorProfile.getExportProfile(VideoFormat.H264);
-        outVideoLevel = VideoEditorProfile.getExportLevel(VideoFormat.H264);
-        e.videoProfile = outVideoProfile;
-        e.videoLevel = outVideoLevel;
-
-        e.outputFile = outputFilename;
-        e.audioBitrate = Bitrate.BR_64_KBPS;
-        e.audioChannels = 2;
-        e.audioFormat = AudioFormat.AAC;
-        e.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
-
-        e.videoFormat = VideoFormat.H264;
-        e.videoFrameRate = VideoFrameRate.FR_30_FPS;
-        e.videoFrameSize = getTransitionResolution(m1, m2);
-        e.videoBitrate = findVideoBitrate(e.videoFrameSize);
-
-        if (new File(outputFilename).exists()) {
-            new File(outputFilename).delete();
-        }
-        mProcessingState  = PROCESSING_INTERMEDIATE3;
-        mProcessingObject = t;
-        err = generateClip(e);
-        // Reset the processing state and check for errors
-        mProcessingState  = PROCESSING_NONE;
-        if (err != 0) {
-            throw new RuntimeException("preview generation cannot be completed");
-        }
-        return outputFilename;
-    }
-
-    /**
-     * Populates effects and overlays in EffectSettings structure
-     * and also adjust the start time and duration of effects and overlays
-     * w.r.t to total story board time
-     *
-     * @param m1 Media item associated with effect
-     * @param effectSettings The EffectSettings reference containing
-     *      effect specific data
-     * @param beginCutTime The begin cut time of the clip associated with effect
-     * @param endCutTime The end cut time of the clip associated with effect
-     * @param storyBoardTime The current story board time
-     *
-     * @return The updated index
-     */
-    private int populateEffects(MediaItem m, EffectSettings[] effectSettings, int i,
-            int beginCutTime, int endCutTime, int storyBoardTime) {
-
-        if (m.getBeginTransition() != null && m.getBeginTransition().getDuration() > 0
-                && m.getEndTransition() != null && m.getEndTransition().getDuration() > 0) {
-            beginCutTime += m.getBeginTransition().getDuration();
-            endCutTime -= m.getEndTransition().getDuration();
-        } else if (m.getBeginTransition() == null && m.getEndTransition() != null
-                && m.getEndTransition().getDuration() > 0) {
-            endCutTime -= m.getEndTransition().getDuration();
-        } else if (m.getEndTransition() == null && m.getBeginTransition() != null
-                && m.getBeginTransition().getDuration() > 0) {
-            beginCutTime += m.getBeginTransition().getDuration();
-        }
-
-        final List<Effect> effects = m.getAllEffects();
-        final List<Overlay> overlays = m.getAllOverlays();
-
-        for (Overlay overlay : overlays) {
-            effectSettings[i] = getOverlaySettings((OverlayFrame)overlay);
-            adjustEffectsStartTimeAndDuration(effectSettings[i], beginCutTime, endCutTime);
-            effectSettings[i].startTime += storyBoardTime;
-            i++;
-        }
-
-        for (Effect effect : effects) {
-            if (effect instanceof EffectColor) {
-                effectSettings[i] = getEffectSettings((EffectColor)effect);
-                adjustEffectsStartTimeAndDuration(effectSettings[i], beginCutTime, endCutTime);
-                effectSettings[i].startTime += storyBoardTime;
-                i++;
-            }
-        }
-
-        return i;
-    }
-
-    /**
-     * Adjusts the media item boundaries for use in export or preview
-     *
-     * @param clipSettings The ClipSettings reference
-     * @param clipProperties The Properties reference
-     * @param m The media item
-     */
-    private void adjustMediaItemBoundary(ClipSettings clipSettings,
-                                         Properties clipProperties, MediaItem m) {
-        if (m.getBeginTransition() != null && m.getBeginTransition().getDuration() > 0
-                && m.getEndTransition() != null && m.getEndTransition().getDuration() > 0) {
-            clipSettings.beginCutTime += m.getBeginTransition().getDuration();
-            clipSettings.endCutTime -= m.getEndTransition().getDuration();
-        } else if (m.getBeginTransition() == null && m.getEndTransition() != null
-                && m.getEndTransition().getDuration() > 0) {
-            clipSettings.endCutTime -= m.getEndTransition().getDuration();
-        } else if (m.getEndTransition() == null && m.getBeginTransition() != null
-                && m.getBeginTransition().getDuration() > 0) {
-            clipSettings.beginCutTime += m.getBeginTransition().getDuration();
-        }
-
-        clipProperties.duration = clipSettings.endCutTime - clipSettings.beginCutTime;
-
-        if (clipProperties.videoDuration != 0) {
-            clipProperties.videoDuration = clipSettings.endCutTime - clipSettings.beginCutTime;
-        }
-
-        if (clipProperties.audioDuration != 0) {
-            clipProperties.audioDuration = clipSettings.endCutTime - clipSettings.beginCutTime;
-        }
-    }
-
-    /**
-     * Generates the transition if transition is present
-     * and is in invalidated state
-     *
-     * @param transition The Transition reference
-     * @param editSettings The EditSettings reference
-     * @param clipPropertiesArray The clip Properties array
-     * @param i The index in clip Properties array for current clip
-     */
-    private void generateTransition(Transition transition, EditSettings editSettings,
-            PreviewClipProperties clipPropertiesArray, int index) {
-        if (!(transition.isGenerated())) {
-            transition.generate();
-        }
-        editSettings.clipSettingsArray[index] = new ClipSettings();
-        editSettings.clipSettingsArray[index].clipPath = transition.getFilename();
-        editSettings.clipSettingsArray[index].fileType = FileType.THREE_GPP;
-        editSettings.clipSettingsArray[index].beginCutTime = 0;
-        editSettings.clipSettingsArray[index].endCutTime = (int)transition.getDuration();
-        editSettings.clipSettingsArray[index].mediaRendering = MediaRendering.BLACK_BORDERS;
-
-        try {
-            clipPropertiesArray.clipProperties[index] =
-                getMediaProperties(transition.getFilename());
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Unsupported file or file not found");
-        }
-
-        clipPropertiesArray.clipProperties[index].Id = null;
-        clipPropertiesArray.clipProperties[index].audioVolumeValue = 100;
-        clipPropertiesArray.clipProperties[index].duration = (int)transition.getDuration();
-        if (clipPropertiesArray.clipProperties[index].videoDuration != 0) {
-            clipPropertiesArray.clipProperties[index].videoDuration = (int)transition.getDuration();
-        }
-
-        if (clipPropertiesArray.clipProperties[index].audioDuration != 0) {
-            clipPropertiesArray.clipProperties[index].audioDuration = (int)transition.getDuration();
-        }
-    }
-
-    /**
-     * Sets the volume for current media item in clip properties array
-     *
-     * @param m The media item
-     * @param clipProperties The clip properties array reference
-     * @param i The index in clip Properties array for current clip
-     */
-    private void adjustVolume(MediaItem m, PreviewClipProperties clipProperties,
-                              int index) {
-        if (m instanceof MediaVideoItem) {
-            final boolean videoMuted = ((MediaVideoItem)m).isMuted();
-            if (videoMuted == false) {
-                mClipProperties.clipProperties[index].audioVolumeValue =
-                    ((MediaVideoItem)m).getVolume();
-            } else {
-                mClipProperties.clipProperties[index].audioVolumeValue = 0;
-            }
-        } else if (m instanceof MediaImageItem) {
-            mClipProperties.clipProperties[index].audioVolumeValue = 0;
-        }
-    }
-
-    /**
-     * Checks for odd size image width and height
-     *
-     * @param m The media item
-     * @param clipProperties The clip properties array reference
-     * @param i The index in clip Properties array for current clip
-     */
-    private void checkOddSizeImage(MediaItem m, PreviewClipProperties clipProperties, int index) {
-        if (m instanceof MediaImageItem) {
-            int width = mClipProperties.clipProperties[index].width;
-            int height = mClipProperties.clipProperties[index].height;
-
-            if ((width % 2) != 0) {
-                width -= 1;
-            }
-            if ((height % 2) != 0) {
-                height -= 1;
-            }
-            mClipProperties.clipProperties[index].width = width;
-            mClipProperties.clipProperties[index].height = height;
-        }
-    }
-
-    /**
-     * Populates the media item properties and calculates the maximum
-     * height among all the clips
-     *
-     * @param m The media item
-     * @param i The index in clip Properties array for current clip
-     * @param maxHeight The max height from the clip properties
-     *
-     * @return Updates the max height if current clip's height is greater
-     * than all previous clips height
-     */
-    private int populateMediaItemProperties(MediaItem m, int index, int maxHeight) {
-        mPreviewEditSettings.clipSettingsArray[index] = new ClipSettings();
-        if (m instanceof MediaVideoItem) {
-            mPreviewEditSettings.clipSettingsArray[index] =
-                ((MediaVideoItem)m).getVideoClipProperties();
-            if (((MediaVideoItem)m).getHeight() > maxHeight) {
-                maxHeight = ((MediaVideoItem)m).getHeight();
-            }
-        } else if (m instanceof MediaImageItem) {
-            mPreviewEditSettings.clipSettingsArray[index] =
-                ((MediaImageItem)m).getImageClipProperties();
-            if (((MediaImageItem)m).getScaledHeight() > maxHeight) {
-                maxHeight = ((MediaImageItem)m).getScaledHeight();
-            }
-        }
-        /** + Handle the image files here */
-        if (mPreviewEditSettings.clipSettingsArray[index].fileType == FileType.JPG) {
-            mPreviewEditSettings.clipSettingsArray[index].clipDecodedPath =
-                ((MediaImageItem)m).getDecodedImageFileName();
-
-            mPreviewEditSettings.clipSettingsArray[index].clipOriginalPath =
-                         mPreviewEditSettings.clipSettingsArray[index].clipPath;
-        }
-        return maxHeight;
-    }
-
-    /**
-     * Populates the background music track properties
-     *
-     * @param mediaBGMList The background music list
-     *
-     */
-    private void populateBackgroundMusicProperties(List<AudioTrack> mediaBGMList) {
-
-        if (mediaBGMList.size() == 1) {
-            mAudioTrack = mediaBGMList.get(0);
-        } else {
-            mAudioTrack = null;
-        }
-
-        if (mAudioTrack != null) {
-            mAudioSettings = new AudioSettings();
-            Properties mAudioProperties = new Properties();
-            mAudioSettings.pFile = null;
-            mAudioSettings.Id = mAudioTrack.getId();
-            try {
-                mAudioProperties = getMediaProperties(mAudioTrack.getFilename());
-            } catch (Exception e) {
-               throw new IllegalArgumentException("Unsupported file or file not found");
-            }
-            mAudioSettings.bRemoveOriginal = false;
-            mAudioSettings.channels = mAudioProperties.audioChannels;
-            mAudioSettings.Fs = mAudioProperties.audioSamplingFrequency;
-            mAudioSettings.loop = mAudioTrack.isLooping();
-            mAudioSettings.ExtendedFs = 0;
-            mAudioSettings.pFile = mAudioTrack.getFilename();
-            mAudioSettings.startMs = mAudioTrack.getStartTime();
-            mAudioSettings.beginCutTime = mAudioTrack.getBoundaryBeginTime();
-            mAudioSettings.endCutTime = mAudioTrack.getBoundaryEndTime();
-            if (mAudioTrack.isMuted()) {
-                mAudioSettings.volume = 0;
-            } else {
-                mAudioSettings.volume = mAudioTrack.getVolume();
-            }
-            mAudioSettings.fileType = mAudioProperties.fileType;
-            mAudioSettings.ducking_lowVolume = mAudioTrack.getDuckedTrackVolume();
-            mAudioSettings.ducking_threshold = mAudioTrack.getDuckingThreshhold();
-            mAudioSettings.bInDucking_enable = mAudioTrack.isDuckingEnabled();
-            mAudioTrackPCMFilePath = String.format(mProjectPath + "/" + AUDIO_TRACK_PCM_FILE);
-            mAudioSettings.pcmFilePath = mAudioTrackPCMFilePath;
-
-            mPreviewEditSettings.backgroundMusicSettings = new BackgroundMusicSettings();
-            mPreviewEditSettings.backgroundMusicSettings.file = mAudioTrackPCMFilePath;
-            mPreviewEditSettings.backgroundMusicSettings.fileType = mAudioProperties.fileType;
-            mPreviewEditSettings.backgroundMusicSettings.insertionTime =
-                mAudioTrack.getStartTime();
-            mPreviewEditSettings.backgroundMusicSettings.volumePercent = mAudioTrack.getVolume();
-            mPreviewEditSettings.backgroundMusicSettings.beginLoop =
-                mAudioTrack.getBoundaryBeginTime();
-            mPreviewEditSettings.backgroundMusicSettings.endLoop =
-                                               mAudioTrack.getBoundaryEndTime();
-            mPreviewEditSettings.backgroundMusicSettings.enableDucking =
-                mAudioTrack.isDuckingEnabled();
-            mPreviewEditSettings.backgroundMusicSettings.duckingThreshold =
-                mAudioTrack.getDuckingThreshhold();
-            mPreviewEditSettings.backgroundMusicSettings.lowVolume =
-                mAudioTrack.getDuckedTrackVolume();
-            mPreviewEditSettings.backgroundMusicSettings.isLooping = mAudioTrack.isLooping();
-            mPreviewEditSettings.primaryTrackVolume = 100;
-            mProcessingState  = PROCESSING_AUDIO_PCM;
-            mProcessingObject = mAudioTrack;
-        } else {
-            mAudioSettings = null;
-            mPreviewEditSettings.backgroundMusicSettings = null;
-            mAudioTrackPCMFilePath = null;
-        }
-    }
-
-    /**
-     * Calculates all the effects in all the media items
-     * in media items list
-     *
-     * @param mediaItemsList The media item list
-     *
-     * @return The total number of effects
-     *
-     */
-    private int getTotalEffects(List<MediaItem> mediaItemsList) {
-        int totalEffects = 0;
-        final Iterator<MediaItem> it = mediaItemsList.iterator();
-        while (it.hasNext()) {
-            final MediaItem t = it.next();
-            totalEffects += t.getAllEffects().size();
-            totalEffects += t.getAllOverlays().size();
-            final Iterator<Effect> ef = t.getAllEffects().iterator();
-            while (ef.hasNext()) {
-                final Effect e = ef.next();
-                if (e instanceof EffectKenBurns) {
-                    totalEffects--;
-                }
-            }
-        }
-        return totalEffects;
-    }
-
-    /**
-     * This function is responsible for forming clip settings
-     * array and clip properties array including transition clips
-     * and effect settings for preview purpose or export.
-     *
-     *
-     * @param mediaItemsList The media item list
-     * @param mediaTransitionList The transitions list
-     * @param mediaBGMList The background music list
-     * @param listener The MediaProcessingProgressListener
-     *
-     */
-    void previewStoryBoard(List<MediaItem> mediaItemsList,
-            List<Transition> mediaTransitionList, List<AudioTrack> mediaBGMList,
-            MediaProcessingProgressListener listener) {
-        if (mInvalidatePreviewArray) {
-            int previewIndex = 0;
-            int totalEffects = 0;
-            int storyBoardTime = 0;
-            int maxHeight = 0;
-            int beginCutTime = 0;
-            int endCutTime = 0;
-            int effectIndex = 0;
-            Transition lTransition = null;
-            MediaItem lMediaItem = null;
-            mPreviewEditSettings = new EditSettings();
-            mClipProperties = new PreviewClipProperties();
-            mTotalClips = 0;
-
-            mTotalClips = mediaItemsList.size();
-            for (Transition transition : mediaTransitionList) {
-                if (transition.getDuration() > 0) {
-                    mTotalClips++;
-                }
-            }
-
-            totalEffects = getTotalEffects(mediaItemsList);
-
-            mPreviewEditSettings.clipSettingsArray = new ClipSettings[mTotalClips];
-            mPreviewEditSettings.effectSettingsArray = new EffectSettings[totalEffects];
-            mClipProperties.clipProperties = new Properties[mTotalClips];
-
-            /** record the call back progress listener */
-            mMediaProcessingProgressListener = listener;
-            mProgressToApp = 0;
-
-            if (mediaItemsList.size() > 0) {
-                for (int i = 0; i < mediaItemsList.size(); i++) {
-                    /* Get the Media Item from the list */
-                    lMediaItem = mediaItemsList.get(i);
-                    if (lMediaItem instanceof MediaVideoItem) {
-                        beginCutTime = (int)((MediaVideoItem)lMediaItem).getBoundaryBeginTime();
-                        endCutTime = (int)((MediaVideoItem)lMediaItem).getBoundaryEndTime();
-                    } else if (lMediaItem instanceof MediaImageItem) {
-                        beginCutTime = 0;
-                        endCutTime = (int)((MediaImageItem)lMediaItem).getTimelineDuration();
-                    }
-                    /* Get the transition associated with Media Item */
-                    lTransition = lMediaItem.getBeginTransition();
-                    if (lTransition != null && (lTransition.getDuration() > 0)) {
-                        /* generate transition clip */
-                        generateTransition(lTransition, mPreviewEditSettings,
-                                           mClipProperties, previewIndex);
-                        storyBoardTime += mClipProperties.clipProperties[previewIndex].duration;
-                        previewIndex++;
-                    }
-                    /* Populate media item properties */
-                    maxHeight = populateMediaItemProperties(lMediaItem, previewIndex, maxHeight);
-                    /* Get the clip properties of the media item. */
-                    if (lMediaItem instanceof MediaImageItem) {
-                        int tmpCnt = 0;
-                        boolean bEffectKbPresent = false;
-                        final List<Effect> effectList = lMediaItem.getAllEffects();
-                        /**
-                         * Check if Ken Burns effect is present
-                         */
-                        while (tmpCnt < effectList.size()) {
-                            if (effectList.get(tmpCnt) instanceof EffectKenBurns) {
-                                bEffectKbPresent = true;
-                                break;
-                            }
-                            tmpCnt++;
-                        }
-
-                        if (bEffectKbPresent) {
-                            try {
-                                  if(((MediaImageItem)lMediaItem).getGeneratedImageClip() != null) {
-                                     mClipProperties.clipProperties[previewIndex]
-                                        = getMediaProperties(((MediaImageItem)lMediaItem).
-                                                             getGeneratedImageClip());
-                                  }
-                                  else {
-                                   mClipProperties.clipProperties[previewIndex]
-                                      = getMediaProperties(((MediaImageItem)lMediaItem).
-                                                             getScaledImageFileName());
-                                   mClipProperties.clipProperties[previewIndex].width =
-                                             ((MediaImageItem)lMediaItem).getScaledWidth();
-                                   mClipProperties.clipProperties[previewIndex].height =
-                                             ((MediaImageItem)lMediaItem).getScaledHeight();
-                                  }
-                                } catch (Exception e) {
-                                   throw new IllegalArgumentException("Unsupported file or file not found");
-                                }
-                         } else {
-                              try {
-                                  mClipProperties.clipProperties[previewIndex]
-                                      = getMediaProperties(((MediaImageItem)lMediaItem).
-                                                               getScaledImageFileName());
-                              } catch (Exception e) {
-                                throw new IllegalArgumentException("Unsupported file or file not found");
-                              }
-                            mClipProperties.clipProperties[previewIndex].width =
-                                        ((MediaImageItem)lMediaItem).getScaledWidth();
-                            mClipProperties.clipProperties[previewIndex].height =
-                                        ((MediaImageItem)lMediaItem).getScaledHeight();
-                        }
-                    } else {
-                        try {
-                            mClipProperties.clipProperties[previewIndex]
-                                 = getMediaProperties(lMediaItem.getFilename());
-                            } catch (Exception e) {
-                              throw new IllegalArgumentException("Unsupported file or file not found");
-                          }
-                    }
-                    mClipProperties.clipProperties[previewIndex].Id = lMediaItem.getId();
-                    checkOddSizeImage(lMediaItem, mClipProperties, previewIndex);
-                    adjustVolume(lMediaItem, mClipProperties, previewIndex);
-
-                    /*
-                     * Adjust media item start time and end time w.r.t to begin
-                     * and end transitions associated with media item
-                     */
-
-                    adjustMediaItemBoundary(mPreviewEditSettings.clipSettingsArray[previewIndex],
-                            mClipProperties.clipProperties[previewIndex], lMediaItem);
-
-                    /*
-                     * Get all the effects and overlays for that media item and
-                     * adjust start time and duration of effects
-                     */
-
-                    effectIndex = populateEffects(lMediaItem,
-                            mPreviewEditSettings.effectSettingsArray, effectIndex, beginCutTime,
-                            endCutTime, storyBoardTime);
-                    storyBoardTime += mClipProperties.clipProperties[previewIndex].duration;
-                    previewIndex++;
-
-                    /* Check if there is any end transition at last media item */
-
-                    if (i == (mediaItemsList.size() - 1)) {
-                        lTransition = lMediaItem.getEndTransition();
-                        if (lTransition != null && (lTransition.getDuration() > 0)) {
-                            generateTransition(lTransition, mPreviewEditSettings, mClipProperties,
-                                    previewIndex);
-                            break;
-                        }
-                    }
-                }
-
-                if (!mErrorFlagSet) {
-                    mPreviewEditSettings.videoFrameSize = findVideoResolution(mVideoEditor
-                            .getAspectRatio(), maxHeight);
-                    populateBackgroundMusicProperties(mediaBGMList);
-
-                    /** call to native populate settings */
-                    try {
-                        nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
-                    } catch (IllegalArgumentException ex) {
-                        Log.e(TAG, "Illegal argument exception in nativePopulateSettings");
-                        throw ex;
-                    } catch (IllegalStateException ex) {
-                        Log.e(TAG, "Illegal state exception in nativePopulateSettings");
-                        throw ex;
-                    } catch (RuntimeException ex) {
-                        Log.e(TAG, "Runtime exception in nativePopulateSettings");
-                        throw ex;
-                    }
-                    mInvalidatePreviewArray = false;
-                    mProcessingState  = PROCESSING_NONE;
-                }
-            }
-            if (mErrorFlagSet) {
-                mErrorFlagSet = false;
-                throw new RuntimeException("preview generation cannot be completed");
-            }
-        }
-    } /* END of previewStoryBoard */
-
-    /**
-     * This function is responsible for starting the preview
-     *
-     *
-     * @param surface The surface on which preview has to be displayed
-     * @param fromMs The time in ms from which preview has to be started
-     * @param toMs The time in ms till preview has to be played
-     * @param loop To loop the preview or not
-     * @param callbackAfterFrameCount INdicated after how many frames
-     * the callback is needed
-     * @param listener The PreviewProgressListener
-     */
-    void doPreview(Surface surface, long fromMs, long toMs, boolean loop,
-            int callbackAfterFrameCount, PreviewProgressListener listener) {
-        mPreviewProgress = fromMs;
-        mIsFirstProgress = true;
-        mPreviewProgressListener = listener;
-
-        if (!mInvalidatePreviewArray) {
-            try {
-                /** Modify the image files names to rgb image files. */
-                for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length;
-                    clipCnt++) {
-                    if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
-                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
-                            mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
-                    }
-                }
-                nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
-                nativeStartPreview(surface, fromMs, toMs, callbackAfterFrameCount, loop);
-            } catch (IllegalArgumentException ex) {
-                Log.e(TAG, "Illegal argument exception in nativeStartPreview");
-                throw ex;
-            } catch (IllegalStateException ex) {
-                Log.e(TAG, "Illegal state exception in nativeStartPreview");
-                throw ex;
-            } catch (RuntimeException ex) {
-                Log.e(TAG, "Runtime exception in nativeStartPreview");
-                throw ex;
-            }
-        } else {
-            throw new IllegalStateException("generatePreview is in progress");
-        }
-    }
-
-    /**
-     * This function is responsible for stopping the preview
-     */
-    long stopPreview() {
-        return nativeStopPreview();
-    }
-
-    /**
-     * This function is responsible for rendering a single frame
-     * from the complete story board on the surface
-     *
-     * @param surface The surface on which frame has to be rendered
-     * @param time The time in ms at which the frame has to be rendered
-     * @param surfaceWidth The surface width
-     * @param surfaceHeight The surface height
-     * @param overlayData The overlay data
-     *
-     * @return The actual time from the story board at which the  frame was extracted
-     * and rendered
-     */
-    long renderPreviewFrame(Surface surface, long time, int surfaceWidth,
-            int surfaceHeight, VideoEditor.OverlayData overlayData) {
-        if (mInvalidatePreviewArray) {
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Call generate preview first");
-            }
-            throw new IllegalStateException("Call generate preview first");
-        }
-
-        long timeMs = 0;
-        try {
-            for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length;
-                  clipCnt++) {
-                if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
-                    mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
-                        mPreviewEditSettings.clipSettingsArray[clipCnt].clipDecodedPath;
-                }
-            }
-
-            // Reset the render preview frame params that shall be set by native.
-            mRenderPreviewOverlayFile = null;
-            mRenderPreviewRenderingMode = MediaRendering.RESIZING;
-
-            nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
-
-            timeMs = (long)nativeRenderPreviewFrame(surface, time, surfaceWidth, surfaceHeight);
-
-            if (mRenderPreviewOverlayFile != null) {
-                overlayData.set(BitmapFactory.decodeFile(mRenderPreviewOverlayFile),
-                        mRenderPreviewRenderingMode);
-            } else {
-                overlayData.setClear();
-            }
-        } catch (IllegalArgumentException ex) {
-            Log.e(TAG, "Illegal Argument exception in nativeRenderPreviewFrame");
-            throw ex;
-        } catch (IllegalStateException ex) {
-            Log.e(TAG, "Illegal state exception in nativeRenderPreviewFrame");
-            throw ex;
-        } catch (RuntimeException ex) {
-            Log.e(TAG, "Runtime exception in nativeRenderPreviewFrame");
-            throw ex;
-        }
-
-        return timeMs;
-    }
-
-    private void previewFrameEditInfo(String filename, int renderingMode) {
-        mRenderPreviewOverlayFile = filename;
-        mRenderPreviewRenderingMode = renderingMode;
-    }
-
-
-    /**
-     * This function is responsible for rendering a single frame
-     * from a single media item on the surface
-     *
-     * @param surface The surface on which frame has to be rendered
-     * @param filepath The file path for which the frame needs to be displayed
-     * @param time The time in ms at which the frame has to be rendered
-     * @param framewidth The frame width
-     * @param framewidth The frame height
-     *
-     * @return The actual time from media item at which the  frame was extracted
-     * and rendered
-     */
-    long renderMediaItemPreviewFrame(Surface surface, String filepath,
-                                            long time, int framewidth, int frameheight) {
-        long timeMs = 0;
-        try {
-            timeMs = (long)nativeRenderMediaItemPreviewFrame(surface, filepath, framewidth,
-                    frameheight, 0, 0, time);
-        } catch (IllegalArgumentException ex) {
-            Log.e(TAG, "Illegal Argument exception in renderMediaItemPreviewFrame");
-            throw ex;
-        } catch (IllegalStateException ex) {
-            Log.e(TAG, "Illegal state exception in renderMediaItemPreviewFrame");
-            throw ex;
-        } catch (RuntimeException ex) {
-            Log.e(TAG, "Runtime exception in renderMediaItemPreviewFrame");
-            throw ex;
-        }
-
-        return timeMs;
-    }
-
-    /**
-     * This function sets the flag to invalidate the preview array
-     * and for generating the preview again
-     */
-    void setGeneratePreview(boolean isRequired) {
-        boolean semAcquiredDone = false;
-        try {
-            lock();
-            semAcquiredDone = true;
-            mInvalidatePreviewArray = isRequired;
-        } catch (InterruptedException ex) {
-            Log.e(TAG, "Runtime exception in renderMediaItemPreviewFrame");
-        } finally {
-            if (semAcquiredDone) {
-                unlock();
-            }
-        }
-    }
-
-    /**
-     * @return Returns the current status of preview invalidation
-     * flag
-     */
-    boolean getGeneratePreview() {
-        return mInvalidatePreviewArray;
-    }
-
-    /**
-     * Calculates the aspect ratio from widht and height
-     *
-     * @param w The width of media item
-     * @param h The height of media item
-     *
-     * @return The calculated aspect ratio
-     */
-    int getAspectRatio(int w, int h) {
-        double apRatio = (double)(w) / (double)(h);
-        BigDecimal bd = new BigDecimal(apRatio);
-        bd = bd.setScale(3, BigDecimal.ROUND_HALF_UP);
-        apRatio = bd.doubleValue();
-        int var = MediaProperties.ASPECT_RATIO_16_9;
-        if (apRatio >= 1.7) {
-            var = MediaProperties.ASPECT_RATIO_16_9;
-        } else if (apRatio >= 1.6) {
-            var = MediaProperties.ASPECT_RATIO_5_3;
-        } else if (apRatio >= 1.5) {
-            var = MediaProperties.ASPECT_RATIO_3_2;
-        } else if (apRatio > 1.3) {
-            var = MediaProperties.ASPECT_RATIO_4_3;
-        } else if (apRatio >= 1.2) {
-            var = MediaProperties.ASPECT_RATIO_11_9;
-        }
-        return var;
-    }
-
-    /**
-     * Maps the file type used in native layer
-     * to file type used in JAVA layer
-     *
-     * @param fileType The file type in native layer
-     *
-     * @return The File type in JAVA layer
-     */
-    int getFileType(int fileType) {
-        int retValue = -1;
-        switch (fileType) {
-            case FileType.UNSUPPORTED:
-                retValue = MediaProperties.FILE_UNSUPPORTED;
-                break;
-            case FileType.THREE_GPP:
-                retValue = MediaProperties.FILE_3GP;
-                break;
-            case FileType.MP4:
-                retValue = MediaProperties.FILE_MP4;
-                break;
-            case FileType.JPG:
-                retValue = MediaProperties.FILE_JPEG;
-                break;
-            case FileType.PNG:
-                retValue = MediaProperties.FILE_PNG;
-                break;
-            case FileType.MP3:
-                retValue = MediaProperties.FILE_MP3;
-                break;
-            case FileType.M4V:
-                retValue = MediaProperties.FILE_M4V;
-                break;
-            case FileType.AMR:
-                retValue = MediaProperties.FILE_AMR;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Maps the video codec type used in native layer
-     * to video codec type used in JAVA layer
-     *
-     * @param codecType The video codec type in native layer
-     *
-     * @return The video codec type in JAVA layer
-     */
-    int getVideoCodecType(int codecType) {
-        int retValue = -1;
-        switch (codecType) {
-            case VideoFormat.H263:
-                retValue = MediaProperties.VCODEC_H263;
-                break;
-            case VideoFormat.H264:
-                retValue = MediaProperties.VCODEC_H264;
-                break;
-            case VideoFormat.MPEG4:
-                retValue = MediaProperties.VCODEC_MPEG4;
-                break;
-            case VideoFormat.UNSUPPORTED:
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Maps the audio codec type used in native layer
-     * to audio codec type used in JAVA layer
-     *
-     * @param audioType The audio codec type in native layer
-     *
-     * @return The audio codec type in JAVA layer
-     */
-    int getAudioCodecType(int codecType) {
-        int retValue = -1;
-        switch (codecType) {
-            case AudioFormat.AMR_NB:
-                retValue = MediaProperties.ACODEC_AMRNB;
-                break;
-            case AudioFormat.AAC:
-                retValue = MediaProperties.ACODEC_AAC_LC;
-                break;
-            case AudioFormat.MP3:
-                retValue = MediaProperties.ACODEC_MP3;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Returns the frame rate as integer
-     *
-     * @param fps The fps as enum
-     *
-     * @return The frame rate as integer
-     */
-    int getFrameRate(int fps) {
-        int retValue = -1;
-        switch (fps) {
-            case VideoFrameRate.FR_5_FPS:
-                retValue = 5;
-                break;
-            case VideoFrameRate.FR_7_5_FPS:
-                retValue = 8;
-                break;
-            case VideoFrameRate.FR_10_FPS:
-                retValue = 10;
-                break;
-            case VideoFrameRate.FR_12_5_FPS:
-                retValue = 13;
-                break;
-            case VideoFrameRate.FR_15_FPS:
-                retValue = 15;
-                break;
-            case VideoFrameRate.FR_20_FPS:
-                retValue = 20;
-                break;
-            case VideoFrameRate.FR_25_FPS:
-                retValue = 25;
-                break;
-            case VideoFrameRate.FR_30_FPS:
-                retValue = 30;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Maps the file type used in JAVA layer
-     * to file type used in native layer
-     *
-     * @param fileType The file type in JAVA layer
-     *
-     * @return The File type in native layer
-     */
-    int getMediaItemFileType(int fileType) {
-        int retValue = -1;
-
-        switch (fileType) {
-            case MediaProperties.FILE_UNSUPPORTED:
-                retValue = FileType.UNSUPPORTED;
-                break;
-            case MediaProperties.FILE_3GP:
-                retValue = FileType.THREE_GPP;
-                break;
-            case MediaProperties.FILE_MP4:
-                retValue = FileType.MP4;
-                break;
-            case MediaProperties.FILE_JPEG:
-                retValue = FileType.JPG;
-                break;
-            case MediaProperties.FILE_PNG:
-                retValue = FileType.PNG;
-                break;
-            case MediaProperties.FILE_M4V:
-                retValue = FileType.M4V;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-
-    }
-
-    /**
-     * Maps the rendering mode used in native layer
-     * to rendering mode used in JAVA layer
-     *
-     * @param renderingMode The rendering mode in JAVA layer
-     *
-     * @return The rendering mode in native layer
-     */
-    int getMediaItemRenderingMode(int renderingMode) {
-        int retValue = -1;
-        switch (renderingMode) {
-            case MediaItem.RENDERING_MODE_BLACK_BORDER:
-                retValue = MediaRendering.BLACK_BORDERS;
-                break;
-            case MediaItem.RENDERING_MODE_STRETCH:
-                retValue = MediaRendering.RESIZING;
-                break;
-            case MediaItem.RENDERING_MODE_CROPPING:
-                retValue = MediaRendering.CROPPING;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Maps the transition behavior used in JAVA layer
-     * to transition behavior used in native layer
-     *
-     * @param transitionType The transition behavior in JAVA layer
-     *
-     * @return The transition behavior in native layer
-     */
-    int getVideoTransitionBehaviour(int transitionType) {
-        int retValue = -1;
-        switch (transitionType) {
-            case Transition.BEHAVIOR_SPEED_UP:
-                retValue = TransitionBehaviour.SPEED_UP;
-                break;
-            case Transition.BEHAVIOR_SPEED_DOWN:
-                retValue = TransitionBehaviour.SPEED_DOWN;
-                break;
-            case Transition.BEHAVIOR_LINEAR:
-                retValue = TransitionBehaviour.LINEAR;
-                break;
-            case Transition.BEHAVIOR_MIDDLE_SLOW:
-                retValue = TransitionBehaviour.SLOW_MIDDLE;
-                break;
-            case Transition.BEHAVIOR_MIDDLE_FAST:
-                retValue = TransitionBehaviour.FAST_MIDDLE;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Maps the transition slide direction used in JAVA layer
-     * to transition slide direction used in native layer
-     *
-     * @param slideDirection The transition slide direction
-     * in JAVA layer
-     *
-     * @return The transition slide direction in native layer
-     */
-    int getSlideSettingsDirection(int slideDirection) {
-        int retValue = -1;
-        switch (slideDirection) {
-            case TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN:
-                retValue = SlideDirection.RIGHT_OUT_LEFT_IN;
-                break;
-            case TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN:
-                retValue = SlideDirection.LEFT_OUT_RIGTH_IN;
-                break;
-            case TransitionSliding.DIRECTION_TOP_OUT_BOTTOM_IN:
-                retValue = SlideDirection.TOP_OUT_BOTTOM_IN;
-                break;
-            case TransitionSliding.DIRECTION_BOTTOM_OUT_TOP_IN:
-                retValue = SlideDirection.BOTTOM_OUT_TOP_IN;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Maps the effect color type used in JAVA layer
-     * to effect color type used in native layer
-     *
-     * @param effect The EffectColor reference
-     *
-     * @return The color effect value from native layer
-     */
-    private int getEffectColorType(EffectColor effect) {
-        int retValue = -1;
-        switch (effect.getType()) {
-            case EffectColor.TYPE_COLOR:
-                if (effect.getColor() == EffectColor.GREEN) {
-                    retValue = VideoEffect.GREEN;
-                } else if (effect.getColor() == EffectColor.PINK) {
-                    retValue = VideoEffect.PINK;
-                } else if (effect.getColor() == EffectColor.GRAY) {
-                    retValue = VideoEffect.BLACK_AND_WHITE;
-                } else {
-                    retValue = VideoEffect.COLORRGB16;
-                }
-                break;
-            case EffectColor.TYPE_GRADIENT:
-                retValue = VideoEffect.GRADIENT;
-                break;
-            case EffectColor.TYPE_SEPIA:
-                retValue = VideoEffect.SEPIA;
-                break;
-            case EffectColor.TYPE_NEGATIVE:
-                retValue = VideoEffect.NEGATIVE;
-                break;
-            case EffectColor.TYPE_FIFTIES:
-                retValue = VideoEffect.FIFTIES;
-                break;
-
-            default:
-                retValue = -1;
-        }
-        return retValue;
-    }
-
-    /**
-     * Calculates video resolution for output clip
-     * based on clip's height and aspect ratio of storyboard
-     *
-     * @param aspectRatio The aspect ratio of story board
-     * @param height The height of clip
-     *
-     * @return The video resolution
-     */
-    private int findVideoResolution(int aspectRatio, int height) {
-        final Pair<Integer, Integer>[] resolutions;
-        final Pair<Integer, Integer> maxResolution;
-        int retValue = VideoFrameSize.SIZE_UNDEFINED;
-        switch (aspectRatio) {
-            case MediaProperties.ASPECT_RATIO_3_2:
-                if (height == MediaProperties.HEIGHT_480)
-                    retValue = VideoFrameSize.NTSC;
-                else if (height == MediaProperties.HEIGHT_720)
-                    retValue = VideoFrameSize.W720p;
-                break;
-            case MediaProperties.ASPECT_RATIO_16_9:
-                if (height == MediaProperties.HEIGHT_480)
-                    retValue = VideoFrameSize.WVGA16x9;
-                else if (height == MediaProperties.HEIGHT_720)
-                    retValue = VideoFrameSize.V720p;
-                else if (height == MediaProperties.HEIGHT_1080)
-                    retValue = VideoFrameSize.V1080p;
-                break;
-            case MediaProperties.ASPECT_RATIO_4_3:
-                if (height == MediaProperties.HEIGHT_480)
-                    retValue = VideoFrameSize.VGA;
-                else if (height == MediaProperties.HEIGHT_720)
-                    retValue = VideoFrameSize.S720p;
-                break;
-            case MediaProperties.ASPECT_RATIO_5_3:
-                if (height == MediaProperties.HEIGHT_480)
-                    retValue = VideoFrameSize.WVGA;
-                break;
-            case MediaProperties.ASPECT_RATIO_11_9:
-                if (height == MediaProperties.HEIGHT_144)
-                    retValue = VideoFrameSize.QCIF;
-                else if (height == MediaProperties.HEIGHT_288)
-                    retValue = VideoFrameSize.CIF;
-                break;
-        }
-        if (retValue == VideoFrameSize.SIZE_UNDEFINED) {
-            resolutions = MediaProperties.getSupportedResolutions(mVideoEditor.getAspectRatio());
-            // Get the highest resolution
-            maxResolution = resolutions[resolutions.length - 1];
-            retValue = findVideoResolution(mVideoEditor.getAspectRatio(), maxResolution.second);
-        }
-
-        return retValue;
-    }
-
-    /**
-     *  Calculate a reasonable bitrate for generating intermediate clips.
-     */
-    private int findVideoBitrate(int videoFrameSize) {
-        switch (videoFrameSize) {
-            case VideoFrameSize.SQCIF:
-            case VideoFrameSize.QQVGA:
-            case VideoFrameSize.QCIF:
-                return Bitrate.BR_128_KBPS;
-            case VideoFrameSize.QVGA:
-            case VideoFrameSize.CIF:
-                return Bitrate.BR_384_KBPS;
-            case VideoFrameSize.VGA:
-            case VideoFrameSize.WVGA:
-            case VideoFrameSize.NTSC:
-            case VideoFrameSize.nHD:
-            case VideoFrameSize.WVGA16x9:
-                return Bitrate.BR_2_MBPS;
-            case VideoFrameSize.V720p:
-            case VideoFrameSize.W720p:
-            case VideoFrameSize.S720p:
-                return Bitrate.BR_5_MBPS;
-            case VideoFrameSize.V1080p:
-            default:
-                return Bitrate.BR_8_MBPS;
-        }
-    }
-
-    /**
-     * This method is responsible for exporting a movie
-     *
-     * @param filePath The output file path
-     * @param projectDir The output project directory
-     * @param height The height of clip
-     * @param bitrate The bitrate at which the movie should be exported
-     * @param mediaItemsList The media items list
-     * @param mediaTransitionList The transitions list
-     * @param mediaBGMList The background track list
-     * @param listener The ExportProgressListener
-     *
-     */
-    void export(String filePath, String projectDir, int height, int bitrate,
-            List<MediaItem> mediaItemsList, List<Transition> mediaTransitionList,
-            List<AudioTrack> mediaBGMList, ExportProgressListener listener) {
-
-        int outBitrate = 0;
-        mExportFilename = filePath;
-        previewStoryBoard(mediaItemsList, mediaTransitionList, mediaBGMList,null);
-        mExportProgressListener = listener;
-        int outVideoProfile = 0;
-        int outVideoLevel = 0;
-
-        /** Check the platform specific maximum export resolution */
-        VideoEditorProfile veProfile = VideoEditorProfile.get();
-        if (veProfile == null) {
-            throw new RuntimeException("Can't get the video editor profile");
-        }
-        final int maxOutputHeight = veProfile.maxOutputVideoFrameHeight;
-        final int maxOutputWidth = veProfile.maxOutputVideoFrameWidth;
-        if (height > maxOutputHeight) {
-            throw new IllegalArgumentException(
-                    "Unsupported export resolution. Supported maximum width:" +
-                    maxOutputWidth + " height:" + maxOutputHeight +
-                    " current height:" + height);
-        }
-        outVideoProfile = VideoEditorProfile.getExportProfile(mExportVideoCodec);
-        outVideoLevel = VideoEditorProfile.getExportLevel(mExportVideoCodec);
-
-        mProgressToApp = 0;
-
-        switch (bitrate) {
-            case MediaProperties.BITRATE_28K:
-                outBitrate = Bitrate.BR_32_KBPS;
-                break;
-            case MediaProperties.BITRATE_40K:
-                outBitrate = Bitrate.BR_48_KBPS;
-                break;
-            case MediaProperties.BITRATE_64K:
-                outBitrate = Bitrate.BR_64_KBPS;
-                break;
-            case MediaProperties.BITRATE_96K:
-                outBitrate = Bitrate.BR_96_KBPS;
-                break;
-            case MediaProperties.BITRATE_128K:
-                outBitrate = Bitrate.BR_128_KBPS;
-                break;
-            case MediaProperties.BITRATE_192K:
-                outBitrate = Bitrate.BR_192_KBPS;
-                break;
-            case MediaProperties.BITRATE_256K:
-                outBitrate = Bitrate.BR_256_KBPS;
-                break;
-            case MediaProperties.BITRATE_384K:
-                outBitrate = Bitrate.BR_384_KBPS;
-                break;
-            case MediaProperties.BITRATE_512K:
-                outBitrate = Bitrate.BR_512_KBPS;
-                break;
-            case MediaProperties.BITRATE_800K:
-                outBitrate = Bitrate.BR_800_KBPS;
-                break;
-            case MediaProperties.BITRATE_2M:
-                outBitrate = Bitrate.BR_2_MBPS;
-                break;
-            case MediaProperties.BITRATE_5M:
-                outBitrate = Bitrate.BR_5_MBPS;
-                break;
-            case MediaProperties.BITRATE_8M:
-                outBitrate = Bitrate.BR_8_MBPS;
-                break;
-
-            default:
-                throw new IllegalArgumentException("Argument Bitrate incorrect");
-        }
-        mPreviewEditSettings.videoFrameRate = VideoFrameRate.FR_30_FPS;
-        mPreviewEditSettings.outputFile = mOutputFilename = filePath;
-
-        int aspectRatio = mVideoEditor.getAspectRatio();
-        mPreviewEditSettings.videoFrameSize = findVideoResolution(aspectRatio, height);
-        mPreviewEditSettings.videoFormat = mExportVideoCodec;
-        mPreviewEditSettings.audioFormat = mExportAudioCodec;
-        mPreviewEditSettings.videoProfile = outVideoProfile;
-        mPreviewEditSettings.videoLevel = outVideoLevel;
-        mPreviewEditSettings.audioSamplingFreq = AudioSamplingFrequency.FREQ_32000;
-        mPreviewEditSettings.maxFileSize = 0;
-        mPreviewEditSettings.audioChannels = 2;
-        mPreviewEditSettings.videoBitrate = outBitrate;
-        mPreviewEditSettings.audioBitrate = Bitrate.BR_96_KBPS;
-
-        mPreviewEditSettings.transitionSettingsArray = new TransitionSettings[mTotalClips - 1];
-        for (int index = 0; index < mTotalClips - 1; index++) {
-            mPreviewEditSettings.transitionSettingsArray[index] = new TransitionSettings();
-            mPreviewEditSettings.transitionSettingsArray[index].videoTransitionType =
-                VideoTransition.NONE;
-            mPreviewEditSettings.transitionSettingsArray[index].audioTransitionType =
-                AudioTransition.NONE;
-        }
-
-        for (int clipCnt = 0; clipCnt < mPreviewEditSettings.clipSettingsArray.length; clipCnt++) {
-            if (mPreviewEditSettings.clipSettingsArray[clipCnt].fileType == FileType.JPG) {
-                mPreviewEditSettings.clipSettingsArray[clipCnt].clipPath =
-                mPreviewEditSettings.clipSettingsArray[clipCnt].clipOriginalPath;
-            }
-        }
-        nativePopulateSettings(mPreviewEditSettings, mClipProperties, mAudioSettings);
-
-        int err = 0;
-        try {
-            mProcessingState  = PROCESSING_EXPORT;
-            mProcessingObject = null;
-            err = generateClip(mPreviewEditSettings);
-            mProcessingState  = PROCESSING_NONE;
-        } catch (IllegalArgumentException ex) {
-            Log.e(TAG, "IllegalArgument for generateClip");
-            throw ex;
-        } catch (IllegalStateException ex) {
-            Log.e(TAG, "IllegalStateExceptiont for generateClip");
-            throw ex;
-        } catch (RuntimeException ex) {
-            Log.e(TAG, "RuntimeException for generateClip");
-            throw ex;
-        }
-
-        if (err != 0) {
-            Log.e(TAG, "RuntimeException for generateClip");
-            throw new RuntimeException("generateClip failed with error=" + err);
-        }
-
-        mExportProgressListener = null;
-    }
-
-    /**
-     * This methods takes care of stopping the Export process
-     *
-     * @param The input file name for which export has to be stopped
-     */
-    void stop(String filename) {
-        try {
-            stopEncoding();
-            new File(mExportFilename).delete();
-        } catch (IllegalStateException ex) {
-            Log.e(TAG, "Illegal state exception in unload settings");
-            throw ex;
-        } catch (RuntimeException ex) {
-            Log.e(TAG, "Runtime exception in unload settings");
-            throw ex;
-        }
-    }
-
-    /**
-     * This method extracts a frame from the input file
-     * and returns the frame as a bitmap. See getPixelsList() for more information.
-     */
-    Bitmap getPixels(String filename, int width, int height, long timeMs,
-            int videoRotation) {
-        final Bitmap result[] = new Bitmap[1];
-        getPixelsList(filename, width, height, timeMs, timeMs, 1, new int[] {0},
-                new MediaItem.GetThumbnailListCallback() {
-            public void onThumbnail(Bitmap bitmap, int index) {
-                result[0] = bitmap;
-            }
-        }, videoRotation);
-        return result[0];
-    }
-
-    /**
-     * This method extracts a list of frame from the
-     * input file and returns the frame in bitmap array
-     *
-     * @param filename The input file name
-     * @param width The width of the output frame, before rotation
-     * @param height The height of the output frame, before rotation
-     * @param startMs The starting time in ms
-     * @param endMs The end time in ms
-     * @param thumbnailCount The number of frames to be extracted
-     * @param indices The indices of thumbnails wanted
-     * @param callback The callback used to pass back the bitmaps
-     * @param videoRotation The rotation degree need to be done for the bitmap
-     *
-     * @return The frames as bitmaps in bitmap array
-     **/
-    void getPixelsList(String filename, final int width, final int height,
-            long startMs, long endMs, int thumbnailCount, int[] indices,
-            final MediaItem.GetThumbnailListCallback callback,
-            final int videoRotation) {
-
-        // The decoder needs output width and height as even
-        final int decWidth = (width + 1) & 0xFFFFFFFE;
-        final int decHeight = (height + 1) & 0xFFFFFFFE;
-        final int thumbnailSize = decWidth * decHeight;
-
-        // We convert the decoder output (in int[]) to a bitmap by first
-        // copy it into an IntBuffer, then use Bitmap.copyPixelsFromBuffer to
-        // copy it to the bitmap.
-        final int[] decArray = new int[thumbnailSize];
-        final IntBuffer decBuffer = IntBuffer.allocate(thumbnailSize);
-
-        // If we need to resize and/or rotate the decoder output, we need a
-        // temporary bitmap to hold the decoded output.
-        final boolean needToMassage =
-                (decWidth != width || decHeight != height || videoRotation != 0);
-        final Bitmap tmpBitmap = needToMassage
-                ? Bitmap.createBitmap(decWidth, decHeight, Bitmap.Config.ARGB_8888)
-                : null;
-
-        // The final output bitmap width/height may swap because of rotation.
-        final boolean needToSwapWH = (videoRotation == 90 || videoRotation == 270);
-        final int outWidth = needToSwapWH ? height : width;
-        final int outHeight = needToSwapWH ? width : height;
-
-        nativeGetPixelsList(filename, decArray, decWidth, decHeight,
-                thumbnailCount, startMs, endMs, indices,
-                new NativeGetPixelsListCallback() {
-            public void onThumbnail(int index) {
-                // This is the bitmap we will output to the client
-                Bitmap outBitmap = Bitmap.createBitmap(
-                        outWidth, outHeight, Bitmap.Config.ARGB_8888);
-
-                // Copy int[] to IntBuffer
-                decBuffer.rewind();
-                decBuffer.put(decArray, 0, thumbnailSize);
-                decBuffer.rewind();
-
-                if (!needToMassage) {
-                    // We can directly read the decoded result to output bitmap
-                    outBitmap.copyPixelsFromBuffer(decBuffer);
-                } else {
-                    // Copy the decoded result to an intermediate bitmap first
-                    tmpBitmap.copyPixelsFromBuffer(decBuffer);
-
-                    // Create a canvas to resize/rotate the bitmap
-                    // First scale the decoded bitmap to (0,0)-(1,1), rotate it
-                    // with (0.5, 0.5) as center, then scale it to
-                    // (outWidth, outHeight).
-                    final Canvas canvas = new Canvas(outBitmap);
-                    Matrix m = new Matrix();
-                    float sx = 1f / decWidth;
-                    float sy = 1f / decHeight;
-                    m.postScale(sx, sy);
-                    m.postRotate(videoRotation, 0.5f, 0.5f);
-                    m.postScale(outWidth, outHeight);
-                    canvas.drawBitmap(tmpBitmap, m, sResizePaint);
-                }
-                callback.onThumbnail(outBitmap, index);
-            }
-        });
-
-        if (tmpBitmap != null) {
-            tmpBitmap.recycle();
-        }
-    }
-
-    interface NativeGetPixelsListCallback {
-        public void onThumbnail(int index);
-    }
-
-    /**
-     * This method generates the audio graph
-     *
-     * @param uniqueId The unique id
-     * @param inFileName The inputFile
-     * @param OutAudiGraphFileName output filename
-     * @param frameDuration The each frame duration
-     * @param audioChannels The number of audio channels
-     * @param samplesCount Total number of samples count
-     * @param listener ExtractAudioWaveformProgressListener reference
-     * @param isVideo The flag to indicate if the file is video file or not
-     *
-     **/
-    void generateAudioGraph(String uniqueId, String inFileName, String OutAudiGraphFileName,
-            int frameDuration, int audioChannels, int samplesCount,
-            ExtractAudioWaveformProgressListener listener, boolean isVideo) {
-        String tempPCMFileName;
-
-        mExtractAudioWaveformProgressListener = listener;
-
-        /**
-         * In case of Video, first call will generate the PCM file to make the
-         * audio graph
-         */
-        if (isVideo) {
-            tempPCMFileName = String.format(mProjectPath + "/" + uniqueId + ".pcm");
-        } else {
-            tempPCMFileName = mAudioTrackPCMFilePath;
-        }
-
-        /**
-         * For Video item, generate the PCM
-         */
-        if (isVideo) {
-            nativeGenerateRawAudio(inFileName, tempPCMFileName);
-        }
-
-        nativeGenerateAudioGraph(tempPCMFileName, OutAudiGraphFileName, frameDuration,
-                audioChannels, samplesCount);
-
-        /**
-         * Once the audio graph file is generated, delete the pcm file
-         */
-        if (isVideo) {
-            new File(tempPCMFileName).delete();
-        }
-    }
-
-    void clearPreviewSurface(Surface surface) {
-        nativeClearSurface(surface);
-    }
-
-    /**
-     * Grab the semaphore which arbitrates access to the editor
-     *
-     * @throws InterruptedException
-     */
-    private void lock() throws InterruptedException {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "lock: grabbing semaphore", new Throwable());
-        }
-        mLock.acquire();
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "lock: grabbed semaphore");
-        }
-    }
-
-    /**
-     * Release the semaphore which arbitrates access to the editor
-     */
-    private void unlock() {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "unlock: releasing semaphore");
-        }
-        mLock.release();
-    }
-
-    /**     Native Methods        */
-    native Properties getMediaProperties(String file) throws IllegalArgumentException,
-            IllegalStateException, RuntimeException, Exception;
-
-    /**
-     * Get the version of ManualEdit.
-     *
-     * @return version of ManualEdit
-     * @throws RuntimeException if an error occurred
-     * @see Version
-     */
-    private static native Version getVersion() throws RuntimeException;
-
-    /**
-     * Returns the video thumbnail in an array of integers. Output format is
-     * ARGB8888.
-     *
-     * @param pixelArray the array that receives the pixel values
-     * @param width width of the video thumbnail
-     * @param height height of the video thumbnail
-     * @param timeMS desired time of the thumbnail in ms
-     * @return actual time in ms of the thumbnail generated
-     * @throws IllegalStateException if the class has not been initialized
-     * @throws IllegalArgumentException if the pixelArray is not available or
-     *             one of the dimensions is negative or zero or the time is
-     *             negative
-     * @throws RuntimeException on runtime errors in native code
-     */
-    private native int nativeGetPixels(String fileName, int[] pixelArray, int width, int height,
-            long timeMS);
-
-    private native int nativeGetPixelsList(String fileName, int[] pixelArray,
-            int width, int height, int nosofTN, long startTimeMs,
-            long endTimeMs, int[] indices, NativeGetPixelsListCallback callback);
-
-    /**
-     * Releases the JNI and cleans up the core native module.. Should be called
-     * only after init( )
-     *
-     * @throws IllegalStateException if the method could not be called
-     */
-    private native void release() throws IllegalStateException, RuntimeException;
-
-    /*
-     * Clear the preview surface
-     */
-    private native void nativeClearSurface(Surface surface);
-
-    /**
-     * Stops the encoding. This method should only be called after encoding has
-     * started using method <code> startEncoding</code>
-     *
-     * @throws IllegalStateException if the method could not be called
-     */
-    private native void stopEncoding() throws IllegalStateException, RuntimeException;
-
-
-    private native void _init(String tempPath, String libraryPath)
-            throws IllegalArgumentException, IllegalStateException, RuntimeException;
-
-    private native void nativeStartPreview(Surface mSurface, long fromMs, long toMs,
-            int callbackAfterFrameCount, boolean loop) throws IllegalArgumentException,
-            IllegalStateException, RuntimeException;
-
-    private native void nativePopulateSettings(EditSettings editSettings,
-            PreviewClipProperties mProperties, AudioSettings mAudioSettings)
-    throws IllegalArgumentException, IllegalStateException, RuntimeException;
-
-    private native int nativeRenderPreviewFrame(Surface mSurface, long timeMs,
-                                                 int surfaceWidth, int surfaceHeight)
-                                                 throws IllegalArgumentException,
-                                                 IllegalStateException, RuntimeException;
-
-    private native int nativeRenderMediaItemPreviewFrame(Surface mSurface, String filepath,
-            int framewidth, int frameheight, int surfacewidth, int surfaceheight, long timeMs)
-    throws IllegalArgumentException, IllegalStateException, RuntimeException;
-
-    private native int nativeStopPreview();
-
-    private native int nativeGenerateAudioGraph(String pcmFilePath, String outGraphPath,
-            int frameDuration, int channels, int sampleCount);
-
-    private native int nativeGenerateRawAudio(String InFileName, String PCMFileName);
-
-    private native int nativeGenerateClip(EditSettings editSettings)
-    throws IllegalArgumentException, IllegalStateException, RuntimeException;
-
-}
diff --git a/media/java/android/media/videoeditor/MediaImageItem.java b/media/java/android/media/videoeditor/MediaImageItem.java
deleted file mode 100644
index 590b4ae..0000000
--- a/media/java/android/media/videoeditor/MediaImageItem.java
+++ /dev/null
@@ -1,1021 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.media.videoeditor;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import java.util.ArrayList;
-import android.media.videoeditor.MediaArtistNativeHelper.ClipSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.EditSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.FileType;
-import android.media.videoeditor.MediaArtistNativeHelper.Properties;
-import android.util.Log;
-import android.util.Pair;
-
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
-import java.lang.Math;
-import java.util.List;
-
-/**
- * This class represents an image item on the storyboard. Note that images are
- * scaled down to the maximum supported resolution by preserving the native
- * aspect ratio. To learn the scaled image dimensions use
- * {@link #getScaledWidth()} and {@link #getScaledHeight()} respectively.
- *
- * {@hide}
- */
-public class MediaImageItem extends MediaItem {
-    /**
-     *  Logging
-     */
-    private static final String TAG = "MediaImageItem";
-
-    /**
-     *  The resize paint
-     */
-    private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
-
-    /**
-     *  Instance variables
-     */
-    private final int mWidth;
-    private final int mHeight;
-    private final int mAspectRatio;
-    private long mDurationMs;
-    private int mScaledWidth, mScaledHeight;
-    private String mScaledFilename;
-    private final VideoEditorImpl mVideoEditor;
-    private String mDecodedFilename;
-    private int mGeneratedClipHeight;
-    private int mGeneratedClipWidth;
-    private String mFileName;
-
-    private final MediaArtistNativeHelper mMANativeHelper;
-
-    /**
-     * This class cannot be instantiated by using the default constructor
-     */
-    @SuppressWarnings("unused")
-    private MediaImageItem() throws IOException {
-        this(null, null, null, 0, RENDERING_MODE_BLACK_BORDER);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param editor The video editor reference
-     * @param mediaItemId The media item id
-     * @param filename The image file name
-     * @param durationMs The duration of the image on the storyboard
-     * @param renderingMode The rendering mode
-     *
-     * @throws IOException
-     */
-    public MediaImageItem(VideoEditor editor, String mediaItemId, String filename, long durationMs,
-        int renderingMode) throws IOException {
-
-        super(editor, mediaItemId, filename, renderingMode);
-
-        mMANativeHelper = ((VideoEditorImpl)editor).getNativeContext();
-        mVideoEditor = ((VideoEditorImpl)editor);
-        try {
-            final Properties properties = mMANativeHelper.getMediaProperties(filename);
-
-            switch (mMANativeHelper.getFileType(properties.fileType)) {
-                case MediaProperties.FILE_JPEG:
-                case MediaProperties.FILE_PNG: {
-                    break;
-                }
-
-                default: {
-                    throw new IllegalArgumentException("Unsupported Input File Type");
-                }
-            }
-        } catch (Exception e) {
-            throw new IllegalArgumentException("Unsupported file or file not found: " + filename);
-        }
-        mFileName = filename;
-        /**
-         *  Determine the dimensions of the image
-         */
-        final BitmapFactory.Options dbo = new BitmapFactory.Options();
-        dbo.inJustDecodeBounds = true;
-        BitmapFactory.decodeFile(filename, dbo);
-
-        mWidth = dbo.outWidth;
-        mHeight = dbo.outHeight;
-        mDurationMs = durationMs;
-        mDecodedFilename = String.format(mMANativeHelper.getProjectPath() +
-                "/" + "decoded" + getId()+ ".rgb");
-
-        try {
-            mAspectRatio = mMANativeHelper.getAspectRatio(mWidth, mHeight);
-        } catch(IllegalArgumentException e) {
-            throw new IllegalArgumentException ("Null width and height");
-        }
-
-        mGeneratedClipHeight = 0;
-        mGeneratedClipWidth = 0;
-
-        /**
-         *  Images are stored in memory scaled to the maximum resolution to
-         *  save memory.
-         */
-        final Pair<Integer, Integer>[] resolutions =
-            MediaProperties.getSupportedResolutions(mAspectRatio);
-
-        /**
-         *  Get the highest resolution
-         */
-        final Pair<Integer, Integer> maxResolution = resolutions[resolutions.length - 1];
-
-        final Bitmap imageBitmap;
-
-        if (mWidth > maxResolution.first || mHeight > maxResolution.second) {
-            /**
-             *  We need to scale the image
-             */
-            imageBitmap = scaleImage(filename, maxResolution.first,
-                                                         maxResolution.second);
-            mScaledFilename = String.format(mMANativeHelper.getProjectPath() +
-                    "/" + "scaled" + getId()+ ".JPG");
-            if (!((new File(mScaledFilename)).exists())) {
-                super.mRegenerateClip = true;
-                final FileOutputStream f1 = new FileOutputStream(mScaledFilename);
-                imageBitmap.compress(Bitmap.CompressFormat.JPEG, 50,f1);
-                f1.close();
-            }
-            mScaledWidth =  (imageBitmap.getWidth() >> 1) << 1;
-            mScaledHeight = (imageBitmap.getHeight() >> 1) << 1;
-        } else {
-            mScaledFilename = filename;
-            mScaledWidth =  (mWidth >> 1) << 1;
-            mScaledHeight = (mHeight >> 1) << 1;
-            imageBitmap = BitmapFactory.decodeFile(mScaledFilename);
-        }
-        int newWidth = mScaledWidth;
-        int newHeight = mScaledHeight;
-        if (!((new File(mDecodedFilename)).exists())) {
-            final FileOutputStream fl = new FileOutputStream(mDecodedFilename);
-            final DataOutputStream dos = new DataOutputStream(fl);
-            final int [] framingBuffer = new int[newWidth];
-            final ByteBuffer byteBuffer = ByteBuffer.allocate(framingBuffer.length * 4);
-            IntBuffer intBuffer;
-            final byte[] array = byteBuffer.array();
-            int tmp = 0;
-            while (tmp < newHeight) {
-                imageBitmap.getPixels(framingBuffer, 0, mScaledWidth, 0,
-                                                        tmp, newWidth, 1);
-                intBuffer = byteBuffer.asIntBuffer();
-                intBuffer.put(framingBuffer, 0, newWidth);
-                dos.write(array);
-                tmp += 1;
-            }
-            fl.close();
-        }
-        imageBitmap.recycle();
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getFileType() {
-        if (mFilename.endsWith(".jpg") || mFilename.endsWith(".jpeg")
-                || mFilename.endsWith(".JPG") || mFilename.endsWith(".JPEG")) {
-            return MediaProperties.FILE_JPEG;
-        } else if (mFilename.endsWith(".png") || mFilename.endsWith(".PNG")) {
-            return MediaProperties.FILE_PNG;
-        } else {
-            return MediaProperties.FILE_UNSUPPORTED;
-        }
-    }
-
-    /**
-     * @return The scaled image file name
-     */
-    String getScaledImageFileName() {
-        return mScaledFilename;
-    }
-
-    /**
-     * @return The generated Kenburns clip height.
-     */
-    int getGeneratedClipHeight() {
-        return mGeneratedClipHeight;
-    }
-
-    /**
-     * @return The generated Kenburns clip width.
-     */
-    int getGeneratedClipWidth() {
-        return mGeneratedClipWidth;
-    }
-
-    /**
-     * @return The file name of image which is decoded and stored
-     * in RGB format
-     */
-    String getDecodedImageFileName() {
-        return mDecodedFilename;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getWidth() {
-        return mWidth;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getHeight() {
-        return mHeight;
-    }
-
-    /**
-     * @return The scaled width of the image.
-     */
-    public int getScaledWidth() {
-        return mScaledWidth;
-    }
-
-    /**
-     * @return The scaled height of the image.
-     */
-    public int getScaledHeight() {
-        return mScaledHeight;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getAspectRatio() {
-        return mAspectRatio;
-    }
-
-    /**
-     * This method will adjust the duration of bounding transitions, effects
-     * and overlays if the current duration of the transactions become greater
-     * than the maximum allowable duration.
-     *
-     * @param durationMs The duration of the image in the storyboard timeline
-     */
-    public void setDuration(long durationMs) {
-        if (durationMs == mDurationMs) {
-            return;
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        /**
-         * Invalidate the end transitions if necessary.
-         * This invalidation is necessary for the case in which an effect or
-         * an overlay is overlapping with the end transition
-         * (before the duration is changed) and it no longer overlaps with the
-         * transition after the duration is increased.
-         *
-         * The beginning transition does not need to be invalidated at this time
-         * because an effect or an overlay overlaps with the beginning
-         * transition, the begin transition is unaffected by a media item
-         * duration change.
-         */
-        invalidateEndTransition();
-
-        mDurationMs = durationMs;
-
-        adjustTransitions();
-        final List<Overlay> adjustedOverlays = adjustOverlays();
-        final List<Effect> adjustedEffects = adjustEffects();
-
-        /**
-         * Invalidate the beginning and end transitions after adjustments.
-         * This invalidation is necessary for the case in which an effect or
-         * an overlay was not overlapping with the beginning or end transitions
-         * before the setDuration reduces the duration of the media item and
-         * causes an overlap of the beginning and/or end transition with the
-         * effect.
-         */
-        invalidateBeginTransition(adjustedEffects, adjustedOverlays);
-        invalidateEndTransition();
-        if (getGeneratedImageClip() != null) {
-            /*
-             *  Delete the file
-             */
-            new File(getGeneratedImageClip()).delete();
-            /*
-             *  Invalidate the filename
-             */
-            setGeneratedImageClip(null);
-            super.setRegenerateClip(true);
-        }
-        mVideoEditor.updateTimelineDuration();
-    }
-
-    /**
-     * Invalidate the begin transition if any effects and overlays overlap
-     * with the begin transition.
-     *
-     * @param effects List of effects to check for transition overlap
-     * @param overlays List of overlays to check for transition overlap
-     */
-    private void invalidateBeginTransition(List<Effect> effects, List<Overlay> overlays) {
-        if (mBeginTransition != null && mBeginTransition.isGenerated()) {
-            final long transitionDurationMs = mBeginTransition.getDuration();
-
-            /**
-             *  The begin transition must be invalidated if it overlaps with
-             *  an effect.
-             */
-            for (Effect effect : effects) {
-                /**
-                 *  Check if the effect overlaps with the begin transition
-                 */
-                if (effect.getStartTime() < transitionDurationMs) {
-                    mBeginTransition.invalidate();
-                    break;
-                }
-            }
-
-            if (mBeginTransition.isGenerated()) {
-                /**
-                 *  The end transition must be invalidated if it overlaps with
-                 *  an overlay.
-                 */
-                for (Overlay overlay : overlays) {
-                    /**
-                     *  Check if the overlay overlaps with the end transition
-                     */
-                    if (overlay.getStartTime() < transitionDurationMs) {
-                        mBeginTransition.invalidate();
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Invalidate the end transition if any effects and overlays overlap
-     * with the end transition.
-     */
-    private void invalidateEndTransition() {
-        if (mEndTransition != null && mEndTransition.isGenerated()) {
-            final long transitionDurationMs = mEndTransition.getDuration();
-
-            /**
-             *  The end transition must be invalidated if it overlaps with
-             *  an effect.
-             */
-            final List<Effect> effects = getAllEffects();
-            for (Effect effect : effects) {
-                /**
-                 *  Check if the effect overlaps with the end transition
-                 */
-                if (effect.getStartTime() + effect.getDuration() >
-                    mDurationMs - transitionDurationMs) {
-                    mEndTransition.invalidate();
-                    break;
-                }
-            }
-
-            if (mEndTransition.isGenerated()) {
-                /**
-                 *  The end transition must be invalidated if it overlaps with
-                 *  an overlay.
-                 */
-                final List<Overlay> overlays = getAllOverlays();
-                for (Overlay overlay : overlays) {
-                    /**
-                     *  Check if the overlay overlaps with the end transition
-                     */
-                    if (overlay.getStartTime() + overlay.getDuration() >
-                        mDurationMs - transitionDurationMs) {
-                        mEndTransition.invalidate();
-                        break;
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * Adjust the start time and/or duration of effects.
-     *
-     * @return The list of effects which were adjusted
-     */
-    private List<Effect> adjustEffects() {
-        final List<Effect> adjustedEffects = new ArrayList<Effect>();
-        final List<Effect> effects = getAllEffects();
-        for (Effect effect : effects) {
-            /**
-             *  Adjust the start time if necessary
-             */
-            final long effectStartTimeMs;
-            if (effect.getStartTime() > getDuration()) {
-                effectStartTimeMs = 0;
-            } else {
-                effectStartTimeMs = effect.getStartTime();
-            }
-
-            /**
-             *  Adjust the duration if necessary
-             */
-            final long effectDurationMs;
-            if (effectStartTimeMs + effect.getDuration() > getDuration()) {
-                effectDurationMs = getDuration() - effectStartTimeMs;
-            } else {
-                effectDurationMs = effect.getDuration();
-            }
-
-            if (effectStartTimeMs != effect.getStartTime() ||
-                    effectDurationMs != effect.getDuration()) {
-                effect.setStartTimeAndDuration(effectStartTimeMs, effectDurationMs);
-                adjustedEffects.add(effect);
-            }
-        }
-
-        return adjustedEffects;
-    }
-
-    /**
-     * Adjust the start time and/or duration of overlays.
-     *
-     * @return The list of overlays which were adjusted
-     */
-    private List<Overlay> adjustOverlays() {
-        final List<Overlay> adjustedOverlays = new ArrayList<Overlay>();
-        final List<Overlay> overlays = getAllOverlays();
-        for (Overlay overlay : overlays) {
-            /**
-             *  Adjust the start time if necessary
-             */
-            final long overlayStartTimeMs;
-            if (overlay.getStartTime() > getDuration()) {
-                overlayStartTimeMs = 0;
-            } else {
-                overlayStartTimeMs = overlay.getStartTime();
-            }
-
-            /**
-             *  Adjust the duration if necessary
-             */
-            final long overlayDurationMs;
-            if (overlayStartTimeMs + overlay.getDuration() > getDuration()) {
-                overlayDurationMs = getDuration() - overlayStartTimeMs;
-            } else {
-                overlayDurationMs = overlay.getDuration();
-            }
-
-            if (overlayStartTimeMs != overlay.getStartTime() ||
-                    overlayDurationMs != overlay.getDuration()) {
-                overlay.setStartTimeAndDuration(overlayStartTimeMs, overlayDurationMs);
-                adjustedOverlays.add(overlay);
-            }
-        }
-
-        return adjustedOverlays;
-    }
-    /**
-     * This function get the proper width by given aspect ratio
-     * and height.
-     *
-     * @param aspectRatio  Given aspect ratio
-     * @param height  Given height
-     */
-    private int getWidthByAspectRatioAndHeight(int aspectRatio, int height) {
-        int width = 0;
-
-        switch (aspectRatio) {
-            case MediaProperties.ASPECT_RATIO_3_2:
-                if (height == MediaProperties.HEIGHT_480)
-                    width = 720;
-                else if (height == MediaProperties.HEIGHT_720)
-                    width = 1080;
-                break;
-
-            case MediaProperties.ASPECT_RATIO_16_9:
-                if (height == MediaProperties.HEIGHT_360)
-                    width = 640;
-                else if (height == MediaProperties.HEIGHT_480)
-                    width = 854;
-                else if (height == MediaProperties.HEIGHT_720)
-                    width = 1280;
-                else if (height == MediaProperties.HEIGHT_1080)
-                    width = 1920;
-                break;
-
-            case MediaProperties.ASPECT_RATIO_4_3:
-                if (height == MediaProperties.HEIGHT_480)
-                    width = 640;
-                if (height == MediaProperties.HEIGHT_720)
-                    width = 960;
-                break;
-
-            case MediaProperties.ASPECT_RATIO_5_3:
-                if (height == MediaProperties.HEIGHT_480)
-                    width = 800;
-                break;
-
-            case MediaProperties.ASPECT_RATIO_11_9:
-                if (height == MediaProperties.HEIGHT_144)
-                    width = 176;
-                break;
-
-            default : {
-                throw new IllegalArgumentException(
-                    "Illegal arguments for aspectRatio");
-            }
-        }
-
-        return width;
-    }
-
-    /**
-     * This function sets the Ken Burn effect generated clip
-     * name.
-     *
-     * @param generatedFilePath The name of the generated clip
-     */
-    @Override
-    void setGeneratedImageClip(String generatedFilePath) {
-        super.setGeneratedImageClip(generatedFilePath);
-
-        // set the Kenburns clip width and height
-        mGeneratedClipHeight = getScaledHeight();
-        mGeneratedClipWidth = getWidthByAspectRatioAndHeight(
-                mVideoEditor.getAspectRatio(), mGeneratedClipHeight);
-    }
-
-    /**
-     * @return The name of the image clip
-     * generated with ken burns effect.
-     */
-    @Override
-    String getGeneratedImageClip() {
-        return super.getGeneratedImageClip();
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public long getDuration() {
-        return mDurationMs;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public long getTimelineDuration() {
-        return mDurationMs;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public Bitmap getThumbnail(int width, int height, long timeMs) throws IOException {
-        if (getGeneratedImageClip() != null) {
-            return mMANativeHelper.getPixels(getGeneratedImageClip(),
-                width, height, timeMs, 0);
-        } else {
-            return scaleImage(mFilename, width, height);
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public void getThumbnailList(int width, int height,
-                                 long startMs, long endMs,
-                                 int thumbnailCount,
-                                 int[] indices,
-                                 GetThumbnailListCallback callback)
-                                 throws IOException {
-        //KenBurns was not applied on this.
-        if (getGeneratedImageClip() == null) {
-            final Bitmap thumbnail = scaleImage(mFilename, width, height);
-            for (int i = 0; i < indices.length; i++) {
-                callback.onThumbnail(thumbnail, indices[i]);
-            }
-        } else {
-            if (startMs > endMs) {
-                throw new IllegalArgumentException("Start time is greater than end time");
-            }
-
-            if (endMs > mDurationMs) {
-                throw new IllegalArgumentException("End time is greater than file duration");
-            }
-
-            mMANativeHelper.getPixelsList(getGeneratedImageClip(), width,
-                height, startMs, endMs, thumbnailCount, indices, callback, 0);
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    void invalidateTransitions(long startTimeMs, long durationMs) {
-        /**
-         *  Check if the item overlaps with the beginning and end transitions
-         */
-        if (mBeginTransition != null) {
-            if (isOverlapping(startTimeMs, durationMs, 0, mBeginTransition.getDuration())) {
-                mBeginTransition.invalidate();
-            }
-        }
-
-        if (mEndTransition != null) {
-            final long transitionDurationMs = mEndTransition.getDuration();
-            if (isOverlapping(startTimeMs, durationMs,
-                    getDuration() - transitionDurationMs, transitionDurationMs)) {
-                mEndTransition.invalidate();
-            }
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    void invalidateTransitions(long oldStartTimeMs, long oldDurationMs, long newStartTimeMs,
-            long newDurationMs) {
-        /**
-         *  Check if the item overlaps with the beginning and end transitions
-         */
-        if (mBeginTransition != null) {
-            final long transitionDurationMs = mBeginTransition.getDuration();
-            final boolean oldOverlap = isOverlapping(oldStartTimeMs, oldDurationMs, 0,
-                    transitionDurationMs);
-            final boolean newOverlap = isOverlapping(newStartTimeMs, newDurationMs, 0,
-                    transitionDurationMs);
-            /**
-             * Invalidate transition if:
-             *
-             * 1. New item overlaps the transition, the old one did not
-             * 2. New item does not overlap the transition, the old one did
-             * 3. New and old item overlap the transition if begin or end
-             * time changed
-             */
-            if (newOverlap != oldOverlap) { // Overlap has changed
-                mBeginTransition.invalidate();
-            } else if (newOverlap) { // Both old and new overlap
-                if ((oldStartTimeMs != newStartTimeMs) ||
-                        !(oldStartTimeMs + oldDurationMs > transitionDurationMs &&
-                        newStartTimeMs + newDurationMs > transitionDurationMs)) {
-                    mBeginTransition.invalidate();
-                }
-            }
-        }
-
-        if (mEndTransition != null) {
-            final long transitionDurationMs = mEndTransition.getDuration();
-            final boolean oldOverlap = isOverlapping(oldStartTimeMs, oldDurationMs,
-                    mDurationMs - transitionDurationMs, transitionDurationMs);
-            final boolean newOverlap = isOverlapping(newStartTimeMs, newDurationMs,
-                    mDurationMs - transitionDurationMs, transitionDurationMs);
-            /**
-             * Invalidate transition if:
-             *
-             * 1. New item overlaps the transition, the old one did not
-             * 2. New item does not overlap the transition, the old one did
-             * 3. New and old item overlap the transition if begin or end
-             * time changed
-             */
-            if (newOverlap != oldOverlap) { // Overlap has changed
-                mEndTransition.invalidate();
-            } else if (newOverlap) { // Both old and new overlap
-                if ((oldStartTimeMs + oldDurationMs != newStartTimeMs + newDurationMs) ||
-                        ((oldStartTimeMs > mDurationMs - transitionDurationMs) ||
-                        newStartTimeMs > mDurationMs - transitionDurationMs)) {
-                    mEndTransition.invalidate();
-                }
-            }
-        }
-    }
-
-    /**
-     * This function invalidates the rgb image clip,ken burns effect clip,
-     * and scaled image clip
-     */
-    void invalidate() {
-        if (getGeneratedImageClip() != null) {
-            new File(getGeneratedImageClip()).delete();
-            setGeneratedImageClip(null);
-            setRegenerateClip(true);
-        }
-
-        if (mScaledFilename != null) {
-            if(mFileName != mScaledFilename) {
-                new File(mScaledFilename).delete();
-            }
-            mScaledFilename = null;
-        }
-
-        if (mDecodedFilename != null) {
-            new File(mDecodedFilename).delete();
-            mDecodedFilename = null;
-        }
-    }
-
-    /**
-     * @param KenBurnEffect object.
-     * @return an Object of {@link ClipSettings} with Ken Burn settings
-     * needed to generate the clip
-     */
-    private ClipSettings getKenBurns(EffectKenBurns effectKB) {
-        int PanZoomXa;
-        int PanZoomXb;
-        int width = 0, height = 0;
-        Rect start = new Rect();
-        Rect end = new Rect();
-        ClipSettings clipSettings = null;
-        clipSettings = new ClipSettings();
-        /**
-         *  image:
-        ---------------------------------------
-       |    Xa                                  |
-       | Ya ---------------                     |
-       |    |                |                  |
-       |    |                |                  |
-       |     ---------------    Xb       ratioB |
-       |        ratioA           -------        |
-       |                  Yb    |        |      |
-       |                        |        |      |
-       |                         -------        |
-        ---------------------------------------
-         */
-
-        effectKB.getKenBurnsSettings(start, end);
-        width = getWidth();
-        height = getHeight();
-        if ((start.left < 0) || (start.left > width) || (start.right < 0) || (start.right > width)
-                || (start.top < 0) || (start.top > height) || (start.bottom < 0)
-                || (start.bottom > height) || (end.left < 0) || (end.left > width)
-                || (end.right < 0) || (end.right > width) || (end.top < 0) || (end.top > height)
-                || (end.bottom < 0) || (end.bottom > height)) {
-            throw new IllegalArgumentException("Illegal arguments for KebBurns");
-        }
-
-        if (((width - (start.right - start.left) == 0) || (height - (start.bottom - start.top) == 0))
-                && ((width - (end.right - end.left) == 0) || (height - (end.bottom - end.top) == 0))) {
-            setRegenerateClip(false);
-            clipSettings.clipPath = getDecodedImageFileName();
-            clipSettings.fileType = FileType.JPG;
-            clipSettings.beginCutTime = 0;
-            clipSettings.endCutTime = (int)getTimelineDuration();
-            clipSettings.beginCutPercent = 0;
-            clipSettings.endCutPercent = 0;
-            clipSettings.panZoomEnabled = false;
-            clipSettings.panZoomPercentStart = 0;
-            clipSettings.panZoomTopLeftXStart = 0;
-            clipSettings.panZoomTopLeftYStart = 0;
-            clipSettings.panZoomPercentEnd = 0;
-            clipSettings.panZoomTopLeftXEnd = 0;
-            clipSettings.panZoomTopLeftYEnd = 0;
-            clipSettings.mediaRendering = mMANativeHelper
-            .getMediaItemRenderingMode(getRenderingMode());
-
-            clipSettings.rgbWidth = getScaledWidth();
-            clipSettings.rgbHeight = getScaledHeight();
-
-            return clipSettings;
-        }
-
-        PanZoomXa = (1000 * start.width()) / width;
-        PanZoomXb = (1000 * end.width()) / width;
-
-        clipSettings.clipPath = getDecodedImageFileName();
-        clipSettings.fileType = mMANativeHelper.getMediaItemFileType(getFileType());
-        clipSettings.beginCutTime = 0;
-        clipSettings.endCutTime = (int)getTimelineDuration();
-        clipSettings.beginCutPercent = 0;
-        clipSettings.endCutPercent = 0;
-        clipSettings.panZoomEnabled = true;
-        clipSettings.panZoomPercentStart = PanZoomXa;
-        clipSettings.panZoomTopLeftXStart = (start.left * 1000) / width;
-        clipSettings.panZoomTopLeftYStart = (start.top * 1000) / height;
-        clipSettings.panZoomPercentEnd = PanZoomXb;
-        clipSettings.panZoomTopLeftXEnd = (end.left * 1000) / width;
-        clipSettings.panZoomTopLeftYEnd = (end.top * 1000) / height;
-        clipSettings.mediaRendering
-            = mMANativeHelper.getMediaItemRenderingMode(getRenderingMode());
-
-        clipSettings.rgbWidth = getScaledWidth();
-        clipSettings.rgbHeight = getScaledHeight();
-
-        return clipSettings;
-    }
-
-
-    /**
-     * @param KenBurnEffect object.
-     * @return an Object of {@link ClipSettings} with Ken Burns
-     * generated clip name
-     */
-    ClipSettings generateKenburnsClip(EffectKenBurns effectKB) {
-        EditSettings editSettings = new EditSettings();
-        editSettings.clipSettingsArray = new ClipSettings[1];
-        String output = null;
-        ClipSettings clipSettings = new ClipSettings();
-        initClipSettings(clipSettings);
-        editSettings.clipSettingsArray[0] = getKenBurns(effectKB);
-        if ((getGeneratedImageClip() == null) && (getRegenerateClip())) {
-            output = mMANativeHelper.generateKenBurnsClip(editSettings, this);
-            setGeneratedImageClip(output);
-            setRegenerateClip(false);
-            clipSettings.clipPath = output;
-            clipSettings.fileType = FileType.THREE_GPP;
-
-            mGeneratedClipHeight = getScaledHeight();
-            mGeneratedClipWidth = getWidthByAspectRatioAndHeight(
-                    mVideoEditor.getAspectRatio(), mGeneratedClipHeight);
-        } else {
-            if (getGeneratedImageClip() == null) {
-                clipSettings.clipPath = getDecodedImageFileName();
-                clipSettings.fileType = FileType.JPG;
-
-                clipSettings.rgbWidth = getScaledWidth();
-                clipSettings.rgbHeight = getScaledHeight();
-
-            } else {
-                clipSettings.clipPath = getGeneratedImageClip();
-                clipSettings.fileType = FileType.THREE_GPP;
-            }
-        }
-        clipSettings.mediaRendering = mMANativeHelper.getMediaItemRenderingMode(getRenderingMode());
-        clipSettings.beginCutTime = 0;
-        clipSettings.endCutTime = (int)getTimelineDuration();
-
-        return clipSettings;
-    }
-
-    /**
-     * @return an Object of {@link ClipSettings} with Image Clip
-     * properties data populated.If the image has Ken Burns effect applied,
-     * then file path contains generated image clip name with Ken Burns effect
-     */
-    ClipSettings getImageClipProperties() {
-        ClipSettings clipSettings = new ClipSettings();
-        List<Effect> effects = null;
-        EffectKenBurns effectKB = null;
-        boolean effectKBPresent = false;
-
-        effects = getAllEffects();
-        for (Effect effect : effects) {
-            if (effect instanceof EffectKenBurns) {
-                effectKB = (EffectKenBurns)effect;
-                effectKBPresent = true;
-                break;
-            }
-        }
-
-        if (effectKBPresent) {
-            clipSettings = generateKenburnsClip(effectKB);
-        } else {
-            /**
-             * Init the clip settings object
-             */
-            initClipSettings(clipSettings);
-            clipSettings.clipPath = getDecodedImageFileName();
-            clipSettings.fileType = FileType.JPG;
-            clipSettings.beginCutTime = 0;
-            clipSettings.endCutTime = (int)getTimelineDuration();
-            clipSettings.mediaRendering = mMANativeHelper
-                .getMediaItemRenderingMode(getRenderingMode());
-            clipSettings.rgbWidth = getScaledWidth();
-            clipSettings.rgbHeight = getScaledHeight();
-
-        }
-        return clipSettings;
-    }
-
-    /**
-     * Resize a bitmap to the specified width and height
-     *
-     * @param filename The filename
-     * @param width The thumbnail width
-     * @param height The thumbnail height
-     *
-     * @return The resized bitmap
-     */
-    private Bitmap scaleImage(String filename, int width, int height)
-    throws IOException {
-        final BitmapFactory.Options dbo = new BitmapFactory.Options();
-        dbo.inJustDecodeBounds = true;
-        BitmapFactory.decodeFile(filename, dbo);
-
-        final int nativeWidth = dbo.outWidth;
-        final int nativeHeight = dbo.outHeight;
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "generateThumbnail: Input: " + nativeWidth + "x" + nativeHeight
-                    + ", resize to: " + width + "x" + height);
-        }
-
-        final Bitmap srcBitmap;
-        float bitmapWidth, bitmapHeight;
-        if (nativeWidth > width || nativeHeight > height) {
-            float dx = ((float)nativeWidth) / ((float)width);
-            float dy = ((float)nativeHeight) / ((float)height);
-
-            if (dx > dy) {
-                bitmapWidth = width;
-
-                if (((float)nativeHeight / dx) < (float)height) {
-                    bitmapHeight = (float)Math.ceil(nativeHeight / dx);
-                } else { // value equals the requested height
-                    bitmapHeight = (float)Math.floor(nativeHeight / dx);
-                }
-
-            } else {
-                if (((float)nativeWidth / dy) > (float)width) {
-                    bitmapWidth = (float)Math.floor(nativeWidth / dy);
-                } else { // value equals the requested width
-                    bitmapWidth = (float)Math.ceil(nativeWidth / dy);
-                }
-
-                bitmapHeight = height;
-            }
-
-            /**
-             *  Create the bitmap from file
-             */
-            int sampleSize = (int) Math.ceil(Math.max(
-                    (float) nativeWidth / bitmapWidth,
-                    (float) nativeHeight / bitmapHeight));
-            sampleSize = nextPowerOf2(sampleSize);
-            final BitmapFactory.Options options = new BitmapFactory.Options();
-            options.inSampleSize = sampleSize;
-            srcBitmap = BitmapFactory.decodeFile(filename, options);
-        } else {
-            bitmapWidth = width;
-            bitmapHeight = height;
-            srcBitmap = BitmapFactory.decodeFile(filename);
-
-        }
-
-        if (srcBitmap == null) {
-            Log.e(TAG, "generateThumbnail: Cannot decode image bytes");
-            throw new IOException("Cannot decode file: " + mFilename);
-        }
-
-        /**
-         *  Create the canvas bitmap
-         */
-        final Bitmap bitmap = Bitmap.createBitmap((int)bitmapWidth,
-                                                  (int)bitmapHeight,
-                                                  Bitmap.Config.ARGB_8888);
-        final Canvas canvas = new Canvas(bitmap);
-        canvas.drawBitmap(srcBitmap, new Rect(0, 0, srcBitmap.getWidth(),
-                                              srcBitmap.getHeight()),
-                                              new Rect(0, 0, (int)bitmapWidth,
-                                              (int)bitmapHeight), sResizePaint);
-        canvas.setBitmap(null);
-        /**
-         *  Release the source bitmap
-         */
-        srcBitmap.recycle();
-        return bitmap;
-    }
-
-    public static int nextPowerOf2(int n) {
-        n -= 1;
-        n |= n >>> 16;
-        n |= n >>> 8;
-        n |= n >>> 4;
-        n |= n >>> 2;
-        n |= n >>> 1;
-        return n + 1;
-    }
-}
diff --git a/media/java/android/media/videoeditor/MediaItem.java b/media/java/android/media/videoeditor/MediaItem.java
deleted file mode 100644
index 4e9ea75..0000000
--- a/media/java/android/media/videoeditor/MediaItem.java
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import java.io.DataOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
-
-import android.graphics.Bitmap;
-import android.media.videoeditor.MediaArtistNativeHelper.ClipSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.FileType;
-import android.media.videoeditor.MediaArtistNativeHelper.MediaRendering;
-
-/**
- * This abstract class describes the base class for any MediaItem. Objects are
- * defined with a file path as a source data.
- * {@hide}
- */
-public abstract class MediaItem {
-    /**
-     *  A constant which can be used to specify the end of the file (instead of
-     *  providing the actual duration of the media item).
-     */
-    public final static int END_OF_FILE = -1;
-
-    /**
-     *  Rendering modes
-     */
-    /**
-     * When using the RENDERING_MODE_BLACK_BORDER rendering mode video frames
-     * are resized by preserving the aspect ratio until the movie matches one of
-     * the dimensions of the output movie. The areas outside the resized video
-     * clip are rendered black.
-     */
-    public static final int RENDERING_MODE_BLACK_BORDER = 0;
-
-    /**
-     * When using the RENDERING_MODE_STRETCH rendering mode video frames are
-     * stretched horizontally or vertically to match the current aspect ratio of
-     * the video editor.
-     */
-    public static final int RENDERING_MODE_STRETCH = 1;
-
-    /**
-     * When using the RENDERING_MODE_CROPPING rendering mode video frames are
-     * scaled horizontally or vertically by preserving the original aspect ratio
-     * of the media item.
-     */
-    public static final int RENDERING_MODE_CROPPING = 2;
-
-    /**
-     *  The unique id of the MediaItem
-     */
-    private final String mUniqueId;
-
-    /**
-     *  The name of the file associated with the MediaItem
-     */
-    protected final String mFilename;
-
-    /**
-     *  List of effects
-     */
-    private final List<Effect> mEffects;
-
-    /**
-     *  List of overlays
-     */
-    private final List<Overlay> mOverlays;
-
-    /**
-     *  The rendering mode
-     */
-    private int mRenderingMode;
-
-    private final MediaArtistNativeHelper mMANativeHelper;
-
-    private final String mProjectPath;
-
-    /**
-     *  Beginning and end transitions
-     */
-    protected Transition mBeginTransition;
-
-    protected Transition mEndTransition;
-
-    protected String mGeneratedImageClip;
-
-    protected boolean mRegenerateClip;
-
-    private boolean mBlankFrameGenerated = false;
-
-    private String mBlankFrameFilename = null;
-
-    /**
-     * Constructor
-     *
-     * @param editor The video editor reference
-     * @param mediaItemId The MediaItem id
-     * @param filename name of the media file.
-     * @param renderingMode The rendering mode
-     * @throws IOException if file is not found
-     * @throws IllegalArgumentException if a capability such as file format is
-     *             not supported the exception object contains the unsupported
-     *             capability
-     */
-    protected MediaItem(VideoEditor editor, String mediaItemId, String filename,
-                        int renderingMode) throws IOException {
-        if (filename == null) {
-            throw new IllegalArgumentException("MediaItem : filename is null");
-        }
-        File file = new File(filename);
-        if (!file.exists()) {
-            throw new IOException(filename + " not found ! ");
-        }
-
-        /*Compare file_size with 2GB*/
-        if (VideoEditor.MAX_SUPPORTED_FILE_SIZE <= file.length()) {
-            throw new IllegalArgumentException("File size is more than 2GB");
-        }
-        mUniqueId = mediaItemId;
-        mFilename = filename;
-        mRenderingMode = renderingMode;
-        mEffects = new ArrayList<Effect>();
-        mOverlays = new ArrayList<Overlay>();
-        mBeginTransition = null;
-        mEndTransition = null;
-        mMANativeHelper = ((VideoEditorImpl)editor).getNativeContext();
-        mProjectPath = editor.getPath();
-        mRegenerateClip = false;
-        mGeneratedImageClip = null;
-    }
-
-    /**
-     * @return The id of the media item
-     */
-    public String getId() {
-        return mUniqueId;
-    }
-
-    /**
-     * @return The media source file name
-     */
-    public String getFilename() {
-        return mFilename;
-    }
-
-    /**
-     * If aspect ratio of the MediaItem is different from the aspect ratio of
-     * the editor then this API controls the rendering mode.
-     *
-     * @param renderingMode rendering mode. It is one of:
-     *            {@link #RENDERING_MODE_BLACK_BORDER},
-     *            {@link #RENDERING_MODE_STRETCH}
-     */
-    public void setRenderingMode(int renderingMode) {
-        switch (renderingMode) {
-            case RENDERING_MODE_BLACK_BORDER:
-            case RENDERING_MODE_STRETCH:
-            case RENDERING_MODE_CROPPING:
-                break;
-
-            default:
-                throw new IllegalArgumentException("Invalid Rendering Mode");
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        mRenderingMode = renderingMode;
-        if (mBeginTransition != null) {
-            mBeginTransition.invalidate();
-        }
-
-        if (mEndTransition != null) {
-            mEndTransition.invalidate();
-        }
-
-        for (Overlay overlay : mOverlays) {
-            ((OverlayFrame)overlay).invalidateGeneratedFiles();
-        }
-    }
-
-    /**
-     * @return The rendering mode
-     */
-    public int getRenderingMode() {
-        return mRenderingMode;
-    }
-
-    /**
-     * @param transition The beginning transition
-     */
-    void setBeginTransition(Transition transition) {
-        mBeginTransition = transition;
-    }
-
-    /**
-     * @return The begin transition
-     */
-    public Transition getBeginTransition() {
-        return mBeginTransition;
-    }
-
-    /**
-     * @param transition The end transition
-     */
-    void setEndTransition(Transition transition) {
-        mEndTransition = transition;
-    }
-
-    /**
-     * @return The end transition
-     */
-    public Transition getEndTransition() {
-        return mEndTransition;
-    }
-
-    /**
-     * @return The timeline duration. This is the actual duration in the
-     *         timeline (trimmed duration)
-     */
-    public abstract long getTimelineDuration();
-
-    /**
-     * @return The is the full duration of the media item (not trimmed)
-     */
-    public abstract long getDuration();
-
-    /**
-     * @return The source file type
-     */
-    public abstract int getFileType();
-
-    /**
-     * @return Get the native width of the media item
-     */
-    public abstract int getWidth();
-
-    /**
-     * @return Get the native height of the media item
-     */
-    public abstract int getHeight();
-
-    /**
-     * Get aspect ratio of the source media item.
-     *
-     * @return the aspect ratio as described in MediaProperties.
-     *         MediaProperties.ASPECT_RATIO_UNDEFINED if aspect ratio is not
-     *         supported as in MediaProperties
-     */
-    public abstract int getAspectRatio();
-
-    /**
-     * Add the specified effect to this media item.
-     *
-     * Note that certain types of effects cannot be applied to video and to
-     * image media items. For example in certain implementation a Ken Burns
-     * implementation cannot be applied to video media item.
-     *
-     * This method invalidates transition video clips if the
-     * effect overlaps with the beginning and/or the end transition.
-     *
-     * @param effect The effect to apply
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if the effect start and/or duration are
-     *      invalid or if the effect cannot be applied to this type of media
-     *      item or if the effect id is not unique across all the Effects
-     *      added.
-     */
-    public void addEffect(Effect effect) {
-
-        if (effect == null) {
-            throw new IllegalArgumentException("NULL effect cannot be applied");
-        }
-
-        if (effect.getMediaItem() != this) {
-            throw new IllegalArgumentException("Media item mismatch");
-        }
-
-        if (mEffects.contains(effect)) {
-            throw new IllegalArgumentException("Effect already exists: " + effect.getId());
-        }
-
-        if (effect.getStartTime() + effect.getDuration() > getDuration()) {
-            throw new IllegalArgumentException(
-            "Effect start time + effect duration > media clip duration");
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        mEffects.add(effect);
-
-        invalidateTransitions(effect.getStartTime(), effect.getDuration());
-
-        if (effect instanceof EffectKenBurns) {
-            mRegenerateClip = true;
-        }
-    }
-
-    /**
-     * Remove the effect with the specified id.
-     *
-     * This method invalidates a transition video clip if the effect overlaps
-     * with a transition.
-     *
-     * @param effectId The id of the effect to be removed
-     *
-     * @return The effect that was removed
-     * @throws IllegalStateException if a preview or an export is in progress
-     */
-    public Effect removeEffect(String effectId) {
-        for (Effect effect : mEffects) {
-            if (effect.getId().equals(effectId)) {
-                mMANativeHelper.setGeneratePreview(true);
-
-                mEffects.remove(effect);
-
-                invalidateTransitions(effect.getStartTime(), effect.getDuration());
-                if (effect instanceof EffectKenBurns) {
-                    if (mGeneratedImageClip != null) {
-                        /**
-                         *  Delete the file
-                         */
-                        new File(mGeneratedImageClip).delete();
-                        /**
-                         *  Invalidate the filename
-                         */
-                        mGeneratedImageClip = null;
-                    }
-                    mRegenerateClip = false;
-                }
-                return effect;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Set the filepath of the generated image clip when the effect is added.
-     *
-     * @param The filepath of the generated image clip.
-     */
-    void setGeneratedImageClip(String generatedFilePath) {
-        mGeneratedImageClip = generatedFilePath;
-    }
-
-    /**
-     * Get the filepath of the generated image clip when the effect is added.
-     *
-     * @return The filepath of the generated image clip (null if it does not
-     *         exist)
-     */
-    String getGeneratedImageClip() {
-        return mGeneratedImageClip;
-    }
-
-    /**
-     * Find the effect with the specified id
-     *
-     * @param effectId The effect id
-     * @return The effect with the specified id (null if it does not exist)
-     */
-    public Effect getEffect(String effectId) {
-        for (Effect effect : mEffects) {
-            if (effect.getId().equals(effectId)) {
-                return effect;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Get the list of effects.
-     *
-     * @return the effects list. If no effects exist an empty list will be
-     *         returned.
-     */
-    public List<Effect> getAllEffects() {
-        return mEffects;
-    }
-
-    /**
-     * Add an overlay to the storyboard. This method invalidates a transition
-     * video clip if the overlay overlaps with a transition.
-     *
-     * @param overlay The overlay to add
-     * @throws IllegalStateException if a preview or an export is in progress or
-     *             if the overlay id is not unique across all the overlays added
-     *             or if the bitmap is not specified or if the dimensions of the
-     *             bitmap do not match the dimensions of the media item
-     * @throws FileNotFoundException, IOException if overlay could not be saved
-     *             to project path
-     */
-    public void addOverlay(Overlay overlay) throws FileNotFoundException, IOException {
-        if (overlay == null) {
-            throw new IllegalArgumentException("NULL Overlay cannot be applied");
-        }
-
-        if (overlay.getMediaItem() != this) {
-            throw new IllegalArgumentException("Media item mismatch");
-        }
-
-        if (mOverlays.contains(overlay)) {
-            throw new IllegalArgumentException("Overlay already exists: " + overlay.getId());
-        }
-
-        if (overlay.getStartTime() + overlay.getDuration() > getDuration()) {
-            throw new IllegalArgumentException(
-            "Overlay start time + overlay duration > media clip duration");
-        }
-
-        if (overlay instanceof OverlayFrame) {
-            final OverlayFrame frame = (OverlayFrame)overlay;
-            final Bitmap bitmap = frame.getBitmap();
-            if (bitmap == null) {
-                throw new IllegalArgumentException("Overlay bitmap not specified");
-            }
-
-            final int scaledWidth, scaledHeight;
-            if (this instanceof MediaVideoItem) {
-                scaledWidth = getWidth();
-                scaledHeight = getHeight();
-            } else {
-                scaledWidth = ((MediaImageItem)this).getScaledWidth();
-                scaledHeight = ((MediaImageItem)this).getScaledHeight();
-            }
-
-            /**
-             * The dimensions of the overlay bitmap must be the same as the
-             * media item dimensions
-             */
-            if (bitmap.getWidth() != scaledWidth || bitmap.getHeight() != scaledHeight) {
-                throw new IllegalArgumentException(
-                "Bitmap dimensions must match media item dimensions");
-            }
-
-            mMANativeHelper.setGeneratePreview(true);
-            ((OverlayFrame)overlay).save(mProjectPath);
-
-            mOverlays.add(overlay);
-            invalidateTransitions(overlay.getStartTime(), overlay.getDuration());
-
-        } else {
-            throw new IllegalArgumentException("Overlay not supported");
-        }
-    }
-
-    /**
-     * @param flag The flag to indicate if regeneration of clip is true or
-     *            false.
-     */
-    void setRegenerateClip(boolean flag) {
-        mRegenerateClip = flag;
-    }
-
-    /**
-     * @return flag The flag to indicate if regeneration of clip is true or
-     *         false.
-     */
-    boolean getRegenerateClip() {
-        return mRegenerateClip;
-    }
-
-    /**
-     * Remove the overlay with the specified id.
-     *
-     * This method invalidates a transition video clip if the overlay overlaps
-     * with a transition.
-     *
-     * @param overlayId The id of the overlay to be removed
-     *
-     * @return The overlay that was removed
-     * @throws IllegalStateException if a preview or an export is in progress
-     */
-    public Overlay removeOverlay(String overlayId) {
-        for (Overlay overlay : mOverlays) {
-            if (overlay.getId().equals(overlayId)) {
-                mMANativeHelper.setGeneratePreview(true);
-
-                mOverlays.remove(overlay);
-                if (overlay instanceof OverlayFrame) {
-                    ((OverlayFrame)overlay).invalidate();
-                }
-                invalidateTransitions(overlay.getStartTime(), overlay.getDuration());
-                return overlay;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Find the overlay with the specified id
-     *
-     * @param overlayId The overlay id
-     *
-     * @return The overlay with the specified id (null if it does not exist)
-     */
-    public Overlay getOverlay(String overlayId) {
-        for (Overlay overlay : mOverlays) {
-            if (overlay.getId().equals(overlayId)) {
-                return overlay;
-            }
-        }
-
-        return null;
-    }
-
-    /**
-     * Get the list of overlays associated with this media item
-     *
-     * Note that if any overlay source files are not accessible anymore,
-     * this method will still provide the full list of overlays.
-     *
-     * @return The list of overlays. If no overlays exist an empty list will
-     *         be returned.
-     */
-    public List<Overlay> getAllOverlays() {
-        return mOverlays;
-    }
-
-    /**
-     * Create a thumbnail at specified time in a video stream in Bitmap format
-     *
-     * @param width width of the thumbnail in pixels
-     * @param height height of the thumbnail in pixels
-     * @param timeMs The time in the source video file at which the thumbnail is
-     *            requested (even if trimmed).
-     *
-     * @return The thumbnail as a Bitmap.
-     *
-     * @throws IOException if a file error occurs
-     * @throws IllegalArgumentException if time is out of video duration
-     */
-    public abstract Bitmap getThumbnail(int width, int height, long timeMs)
-                                        throws IOException;
-
-    /**
-     * Get the array of Bitmap thumbnails between start and end.
-     *
-     * @param width width of the thumbnail in pixels
-     * @param height height of the thumbnail in pixels
-     * @param startMs The start of time range in milliseconds
-     * @param endMs The end of the time range in milliseconds
-     * @param thumbnailCount The thumbnail count
-     * @param indices The indices of the thumbnails wanted
-     * @param callback The callback used to pass back the bitmaps
-     *
-     * @throws IOException if a file error occurs
-     */
-    public abstract void getThumbnailList(int width, int height,
-                                          long startMs, long endMs,
-                                          int thumbnailCount,
-                                          int[] indices,
-                                          GetThumbnailListCallback callback)
-                                          throws IOException;
-
-    public interface GetThumbnailListCallback {
-        public void onThumbnail(Bitmap bitmap, int index);
-    }
-
-    // This is for compatibility, only used in tests.
-    public Bitmap[] getThumbnailList(int width, int height,
-                                     long startMs, long endMs,
-                                     int thumbnailCount)
-                                     throws IOException {
-        final Bitmap[] bitmaps = new Bitmap[thumbnailCount];
-        int[] indices = new int[thumbnailCount];
-        for (int i = 0; i < thumbnailCount; i++) {
-            indices[i] = i;
-        }
-        getThumbnailList(width, height, startMs, endMs,
-                thumbnailCount, indices, new GetThumbnailListCallback() {
-            public void onThumbnail(Bitmap bitmap, int index) {
-                bitmaps[index] = bitmap;
-            }
-        });
-
-        return bitmaps;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object object) {
-        if (!(object instanceof MediaItem)) {
-            return false;
-        }
-        return mUniqueId.equals(((MediaItem)object).mUniqueId);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        return mUniqueId.hashCode();
-    }
-
-    /**
-     * Invalidate the start and end transitions if necessary
-     *
-     * @param startTimeMs The start time of the effect or overlay
-     * @param durationMs The duration of the effect or overlay
-     */
-    abstract void invalidateTransitions(long startTimeMs, long durationMs);
-
-    /**
-     * Invalidate the start and end transitions if necessary. This method is
-     * typically called when the start time and/or duration of an overlay or
-     * effect is changing.
-     *
-     * @param oldStartTimeMs The old start time of the effect or overlay
-     * @param oldDurationMs The old duration of the effect or overlay
-     * @param newStartTimeMs The new start time of the effect or overlay
-     * @param newDurationMs The new duration of the effect or overlay
-     */
-    abstract void invalidateTransitions(long oldStartTimeMs, long oldDurationMs,
-            long newStartTimeMs, long newDurationMs);
-
-    /**
-     * Check if two items overlap in time
-     *
-     * @param startTimeMs1 Item 1 start time
-     * @param durationMs1 Item 1 duration
-     * @param startTimeMs2 Item 2 start time
-     * @param durationMs2 Item 2 end time
-     * @return true if the two items overlap
-     */
-    protected boolean isOverlapping(long startTimeMs1, long durationMs1,
-                                    long startTimeMs2, long durationMs2) {
-        if (startTimeMs1 + durationMs1 <= startTimeMs2) {
-            return false;
-        } else if (startTimeMs1 >= startTimeMs2 + durationMs2) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Adjust the duration transitions.
-     */
-    protected void adjustTransitions() {
-        /**
-         *  Check if the duration of transitions need to be adjusted
-         */
-        if (mBeginTransition != null) {
-            final long maxDurationMs = mBeginTransition.getMaximumDuration();
-            if (mBeginTransition.getDuration() > maxDurationMs) {
-                mBeginTransition.setDuration(maxDurationMs);
-            }
-        }
-
-        if (mEndTransition != null) {
-            final long maxDurationMs = mEndTransition.getMaximumDuration();
-            if (mEndTransition.getDuration() > maxDurationMs) {
-                mEndTransition.setDuration(maxDurationMs);
-            }
-        }
-    }
-
-    /**
-     * @return MediaArtistNativeHleper context
-     */
-    MediaArtistNativeHelper getNativeContext() {
-        return mMANativeHelper;
-    }
-
-    /**
-     * Initialises ClipSettings fields to default value
-     *
-     * @param ClipSettings object
-     *{@link android.media.videoeditor.MediaArtistNativeHelper.ClipSettings}
-     */
-    void initClipSettings(ClipSettings clipSettings) {
-        clipSettings.clipPath = null;
-        clipSettings.clipDecodedPath = null;
-        clipSettings.clipOriginalPath = null;
-        clipSettings.fileType = 0;
-        clipSettings.endCutTime = 0;
-        clipSettings.beginCutTime = 0;
-        clipSettings.beginCutPercent = 0;
-        clipSettings.endCutPercent = 0;
-        clipSettings.panZoomEnabled = false;
-        clipSettings.panZoomPercentStart = 0;
-        clipSettings.panZoomTopLeftXStart = 0;
-        clipSettings.panZoomTopLeftYStart = 0;
-        clipSettings.panZoomPercentEnd = 0;
-        clipSettings.panZoomTopLeftXEnd = 0;
-        clipSettings.panZoomTopLeftYEnd = 0;
-        clipSettings.mediaRendering = 0;
-        clipSettings.rgbWidth = 0;
-        clipSettings.rgbHeight = 0;
-    }
-
-    /**
-     * @return ClipSettings object with populated data
-     *{@link android.media.videoeditor.MediaArtistNativeHelper.ClipSettings}
-     */
-    ClipSettings getClipSettings() {
-        MediaVideoItem mVI = null;
-        MediaImageItem mII = null;
-        ClipSettings clipSettings = new ClipSettings();
-        initClipSettings(clipSettings);
-        if (this instanceof MediaVideoItem) {
-            mVI = (MediaVideoItem)this;
-            clipSettings.clipPath = mVI.getFilename();
-            clipSettings.fileType = mMANativeHelper.getMediaItemFileType(mVI.
-                                                                 getFileType());
-            clipSettings.beginCutTime = (int)mVI.getBoundaryBeginTime();
-            clipSettings.endCutTime = (int)mVI.getBoundaryEndTime();
-            clipSettings.mediaRendering = mMANativeHelper.
-                                          getMediaItemRenderingMode(mVI
-                                          .getRenderingMode());
-        } else if (this instanceof MediaImageItem) {
-            mII = (MediaImageItem)this;
-            clipSettings = mII.getImageClipProperties();
-        }
-        return clipSettings;
-    }
-
-    /**
-     * Generates a black frame to be used for generating
-     * begin transition at first media item in storyboard
-     * or end transition at last media item in storyboard
-     *
-     * @param ClipSettings object
-     *{@link android.media.videoeditor.MediaArtistNativeHelper.ClipSettings}
-     */
-    void generateBlankFrame(ClipSettings clipSettings) {
-        if (!mBlankFrameGenerated) {
-            int mWidth = 64;
-            int mHeight = 64;
-            mBlankFrameFilename = String.format(mProjectPath + "/" + "ghost.rgb");
-            FileOutputStream fl = null;
-            try {
-                 fl = new FileOutputStream(mBlankFrameFilename);
-            } catch (IOException e) {
-                /* catch IO exception */
-            }
-            final DataOutputStream dos = new DataOutputStream(fl);
-
-            final int [] framingBuffer = new int[mWidth];
-
-            ByteBuffer byteBuffer = ByteBuffer.allocate(framingBuffer.length * 4);
-            IntBuffer intBuffer;
-
-            byte[] array = byteBuffer.array();
-            int tmp = 0;
-            while(tmp < mHeight) {
-                intBuffer = byteBuffer.asIntBuffer();
-                intBuffer.put(framingBuffer,0,mWidth);
-                try {
-                    dos.write(array);
-                } catch (IOException e) {
-                    /* catch file write error */
-                }
-                tmp += 1;
-            }
-
-            try {
-                fl.close();
-            } catch (IOException e) {
-                /* file close error */
-            }
-            mBlankFrameGenerated = true;
-        }
-
-        clipSettings.clipPath = mBlankFrameFilename;
-        clipSettings.fileType = FileType.JPG;
-        clipSettings.beginCutTime = 0;
-        clipSettings.endCutTime = 0;
-        clipSettings.mediaRendering = MediaRendering.RESIZING;
-
-        clipSettings.rgbWidth = 64;
-        clipSettings.rgbHeight = 64;
-    }
-
-    /**
-     * Invalidates the blank frame generated
-     */
-    void invalidateBlankFrame() {
-        if (mBlankFrameFilename != null) {
-            if (new File(mBlankFrameFilename).exists()) {
-                new File(mBlankFrameFilename).delete();
-                mBlankFrameFilename = null;
-            }
-        }
-    }
-
-}
diff --git a/media/java/android/media/videoeditor/MediaProperties.java b/media/java/android/media/videoeditor/MediaProperties.java
deleted file mode 100644
index cf518a5..0000000
--- a/media/java/android/media/videoeditor/MediaProperties.java
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.media.videoeditor;
-
-import android.media.videoeditor.VideoEditorProfile;
-import android.util.Pair;
-import java.lang.System;
-/**
- * This class defines all properties of a media file such as supported height,
- * aspect ratio, bitrate for export function.
- * {@hide}
- */
-public class MediaProperties {
-    /**
-     *  Supported heights
-     */
-    public static final int HEIGHT_144 = 144;
-    public static final int HEIGHT_288 = 288;
-    public static final int HEIGHT_360 = 360;
-    public static final int HEIGHT_480 = 480;
-    public static final int HEIGHT_720 = 720;
-    public static final int HEIGHT_1080 = 1080;
-
-    /**
-     *  Supported aspect ratios
-     */
-    public static final int ASPECT_RATIO_UNDEFINED = 0;
-    public static final int ASPECT_RATIO_3_2 = 1;
-    public static final int ASPECT_RATIO_16_9 = 2;
-    public static final int ASPECT_RATIO_4_3 = 3;
-    public static final int ASPECT_RATIO_5_3 = 4;
-    public static final int ASPECT_RATIO_11_9 = 5;
-
-    /**
-     *  The array of supported aspect ratios
-     */
-    private static final int[] ASPECT_RATIOS = new int[] {
-        ASPECT_RATIO_3_2,
-        ASPECT_RATIO_16_9,
-        ASPECT_RATIO_4_3,
-        ASPECT_RATIO_5_3,
-        ASPECT_RATIO_11_9
-    };
-
-    /**
-     *  Supported resolutions for specific aspect ratios
-     */
-    @SuppressWarnings({"unchecked"})
-    private static final Pair<Integer, Integer>[] ASPECT_RATIO_3_2_RESOLUTIONS =
-        new Pair[] {
-        new Pair<Integer, Integer>(720, HEIGHT_480),
-        new Pair<Integer, Integer>(1080, HEIGHT_720)
-    };
-
-    @SuppressWarnings({"unchecked"})
-    private static final Pair<Integer, Integer>[] ASPECT_RATIO_4_3_RESOLUTIONS =
-        new Pair[] {
-        new Pair<Integer, Integer>(640, HEIGHT_480),
-        new Pair<Integer, Integer>(960, HEIGHT_720)
-    };
-
-    @SuppressWarnings({"unchecked"})
-    private static final Pair<Integer, Integer>[] ASPECT_RATIO_5_3_RESOLUTIONS =
-        new Pair[] {
-        new Pair<Integer, Integer>(800, HEIGHT_480)
-    };
-
-    @SuppressWarnings({"unchecked"})
-    private static final Pair<Integer, Integer>[] ASPECT_RATIO_11_9_RESOLUTIONS =
-        new Pair[] {
-        new Pair<Integer, Integer>(176, HEIGHT_144),
-        new Pair<Integer, Integer>(352, HEIGHT_288)
-    };
-
-    @SuppressWarnings({"unchecked"})
-    private static final Pair<Integer, Integer>[] ASPECT_RATIO_16_9_RESOLUTIONS =
-        new Pair[] {
-        new Pair<Integer, Integer>(848, HEIGHT_480),
-        new Pair<Integer, Integer>(1280, HEIGHT_720),
-        new Pair<Integer, Integer>(1920, HEIGHT_1080),
-    };
-
-    /**
-     *  Bitrate values (in bits per second)
-     */
-    public static final int BITRATE_28K = 28000;
-    public static final int BITRATE_40K = 40000;
-    public static final int BITRATE_64K = 64000;
-    public static final int BITRATE_96K = 96000;
-    public static final int BITRATE_128K = 128000;
-    public static final int BITRATE_192K = 192000;
-    public static final int BITRATE_256K = 256000;
-    public static final int BITRATE_384K = 384000;
-    public static final int BITRATE_512K = 512000;
-    public static final int BITRATE_800K = 800000;
-    public static final int BITRATE_2M = 2000000;
-    public static final int BITRATE_5M = 5000000;
-    public static final int BITRATE_8M = 8000000;
-
-    /**
-     *  The array of supported bitrates
-     */
-    private static final int[] SUPPORTED_BITRATES = new int[] {
-        BITRATE_28K,
-        BITRATE_40K,
-        BITRATE_64K,
-        BITRATE_96K,
-        BITRATE_128K,
-        BITRATE_192K,
-        BITRATE_256K,
-        BITRATE_384K,
-        BITRATE_512K,
-        BITRATE_800K,
-        BITRATE_2M,
-        BITRATE_5M,
-        BITRATE_8M
-    };
-
-    /**
-     *  Video codec types
-     */
-    public static final int VCODEC_H263 = 1;
-    public static final int VCODEC_H264 = 2;
-    public static final int VCODEC_MPEG4 = 3;
-
-    /**
-     *  The array of supported video codecs
-     */
-    private static final int[] SUPPORTED_VCODECS = new int[] {
-        VCODEC_H264,
-        VCODEC_H263,
-        VCODEC_MPEG4,
-    };
-
-    /**
-     *  The H264 profile, the values are same as the one in OMX_Video.h
-     */
-    public final class H264Profile {
-        public static final int H264ProfileBaseline = 0x01; /**< Baseline profile */
-        public static final int H264ProfileMain     = 0x02; /**< Main profile */
-        public static final int H264ProfileExtended = 0x04; /**< Extended profile */
-        public static final int H264ProfileHigh     = 0x08; /**< High profile */
-        public static final int H264ProfileHigh10   = 0x10; /**< High 10 profile */
-        public static final int H264ProfileHigh422  = 0x20; /**< High 4:2:2 profile */
-        public static final int H264ProfileHigh444  = 0x40; /**< High 4:4:4 profile */
-        public static final int H264ProfileUnknown  = 0x7FFFFFFF;
-   }
-    /**
-     *  The H264 level, the values are same as the one in OMX_Video.h
-     */
-    public final class H264Level {
-        public static final int H264Level1   = 0x01; /**< Level 1 */
-        public static final int H264Level1b  = 0x02; /**< Level 1b */
-        public static final int H264Level11  = 0x04; /**< Level 1.1 */
-        public static final int H264Level12  = 0x08; /**< Level 1.2 */
-        public static final int H264Level13  = 0x10; /**< Level 1.3 */
-        public static final int H264Level2   = 0x20; /**< Level 2 */
-        public static final int H264Level21  = 0x40; /**< Level 2.1 */
-        public static final int H264Level22  = 0x80; /**< Level 2.2 */
-        public static final int H264Level3   = 0x100; /**< Level 3 */
-        public static final int H264Level31  = 0x200; /**< Level 3.1 */
-        public static final int H264Level32  = 0x400; /**< Level 3.2 */
-        public static final int H264Level4   = 0x800; /**< Level 4 */
-        public static final int H264Level41  = 0x1000; /**< Level 4.1 */
-        public static final int H264Level42  = 0x2000; /**< Level 4.2 */
-        public static final int H264Level5   = 0x4000; /**< Level 5 */
-        public static final int H264Level51  = 0x8000; /**< Level 5.1 */
-        public static final int H264LevelUnknown = 0x7FFFFFFF;
-    }
-    /**
-     *  The H263 profile, the values are same as the one in OMX_Video.h
-     */
-    public final class H263Profile {
-        public static final int H263ProfileBaseline            = 0x01;
-        public static final int H263ProfileH320Coding          = 0x02;
-        public static final int H263ProfileBackwardCompatible  = 0x04;
-        public static final int H263ProfileISWV2               = 0x08;
-        public static final int H263ProfileISWV3               = 0x10;
-        public static final int H263ProfileHighCompression     = 0x20;
-        public static final int H263ProfileInternet            = 0x40;
-        public static final int H263ProfileInterlace           = 0x80;
-        public static final int H263ProfileHighLatency       = 0x100;
-        public static final int H263ProfileUnknown          = 0x7FFFFFFF;
-    }
-    /**
-     *  The H263 level, the values are same as the one in OMX_Video.h
-     */
-    public final class H263Level {
-        public static final int H263Level10  = 0x01;
-        public static final int H263Level20  = 0x02;
-        public static final int H263Level30  = 0x04;
-        public static final int H263Level40  = 0x08;
-        public static final int H263Level45  = 0x10;
-        public static final int H263Level50  = 0x20;
-        public static final int H263Level60  = 0x40;
-        public static final int H263Level70  = 0x80;
-        public static final int H263LevelUnknown = 0x7FFFFFFF;
-    }
-    /**
-     *  The mpeg4 profile, the values are same as the one in OMX_Video.h
-     */
-    public final class MPEG4Profile {
-        public static final int MPEG4ProfileSimple           = 0x01;
-        public static final int MPEG4ProfileSimpleScalable   = 0x02;
-        public static final int MPEG4ProfileCore             = 0x04;
-        public static final int MPEG4ProfileMain             = 0x08;
-        public static final int MPEG4ProfileNbit             = 0x10;
-        public static final int MPEG4ProfileScalableTexture  = 0x20;
-        public static final int MPEG4ProfileSimpleFace       = 0x40;
-        public static final int MPEG4ProfileSimpleFBA        = 0x80;
-        public static final int MPEG4ProfileBasicAnimated    = 0x100;
-        public static final int MPEG4ProfileHybrid           = 0x200;
-        public static final int MPEG4ProfileAdvancedRealTime = 0x400;
-        public static final int MPEG4ProfileCoreScalable     = 0x800;
-        public static final int MPEG4ProfileAdvancedCoding   = 0x1000;
-        public static final int MPEG4ProfileAdvancedCore     = 0x2000;
-        public static final int MPEG4ProfileAdvancedScalable = 0x4000;
-        public static final int MPEG4ProfileAdvancedSimple   = 0x8000;
-        public static final int MPEG4ProfileUnknown          = 0x7FFFFFFF;
-    }
-    /**
-     *  The mpeg4 level, the values are same as the one in OMX_Video.h
-     */
-    public final class MPEG4Level {
-        public static final int MPEG4Level0  = 0x01; /**< Level 0 */
-        public static final int MPEG4Level0b = 0x02; /**< Level 0b */
-        public static final int MPEG4Level1  = 0x04; /**< Level 1 */
-        public static final int MPEG4Level2  = 0x08; /**< Level 2 */
-        public static final int MPEG4Level3  = 0x10; /**< Level 3 */
-        public static final int MPEG4Level4  = 0x20; /**< Level 4 */
-        public static final int MPEG4Level4a = 0x40; /**< Level 4a */
-        public static final int MPEG4Level5  = 0x80; /**< Level 5 */
-        public static final int MPEG4LevelUnknown = 0x7FFFFFFF;
-    }
-    /**
-     *  Audio codec types
-     */
-    public static final int ACODEC_NO_AUDIO = 0;
-    public static final int ACODEC_AMRNB = 1;
-    public static final int ACODEC_AAC_LC = 2;
-    public static final int ACODEC_AAC_PLUS = 3;
-    public static final int ACODEC_ENHANCED_AAC_PLUS = 4;
-    public static final int ACODEC_MP3 = 5;
-    public static final int ACODEC_EVRC = 6;
-    // 7 value is used for PCM
-    public static final int ACODEC_AMRWB = 8;
-    public static final int ACODEC_OGG = 9;
-
-    /**
-     *  The array of supported audio codecs
-     */
-    private static final int[] SUPPORTED_ACODECS = new int[] {
-        ACODEC_AAC_LC,
-        ACODEC_AMRNB,
-        ACODEC_AMRWB
-    };
-
-    /**
-     *  Samples per frame for each audio codec
-     */
-    public static final int SAMPLES_PER_FRAME_AAC = 1024;
-    public static final int SAMPLES_PER_FRAME_MP3 = 1152;
-    public static final int SAMPLES_PER_FRAME_AMRNB = 160;
-    public static final int SAMPLES_PER_FRAME_AMRWB = 320;
-
-    public static final int DEFAULT_SAMPLING_FREQUENCY = 32000;
-    public static final int DEFAULT_CHANNEL_COUNT = 2;
-
-    /**
-     *  File format types
-     */
-    public static final int FILE_3GP = 0;
-    public static final int FILE_MP4 = 1;
-    public static final int FILE_AMR = 2;
-    public static final int FILE_MP3 = 3;
-    // 4 is for PCM
-    public static final int FILE_JPEG = 5;
-    // 6 is for BMP
-    // 7 is for GIF
-    public static final int FILE_PNG = 8;
-    // 9 is for ARGB8888
-    public static final int FILE_M4V = 10;
-    public static final int FILE_UNSUPPORTED = 255;
-
-    /**
-     * Undefined video codec profiles
-     */
-    public static final int UNDEFINED_VIDEO_PROFILE = 255;
-
-    /**
-     * The array of the supported file formats
-     */
-    private static final int[] SUPPORTED_VIDEO_FILE_FORMATS = new int[] {
-        FILE_3GP,
-        FILE_MP4,
-        FILE_M4V
-    };
-
-    /**
-     * The maximum count of audio tracks supported
-     */
-    public static final int AUDIO_MAX_TRACK_COUNT = 1;
-
-    /** The maximum volume supported (100 means that no amplification is
-     * supported, i.e. attenuation only)
-     */
-    public static final int AUDIO_MAX_VOLUME_PERCENT = 100;
-
-    /**
-     * This class cannot be instantiated
-     */
-    private MediaProperties() {
-    }
-
-    /**
-     * @return The array of supported aspect ratios
-     */
-    public static int[] getAllSupportedAspectRatios() {
-        return ASPECT_RATIOS;
-    }
-
-    /**
-     * Get the supported resolutions for the specified aspect ratio.
-     *
-     * @param aspectRatio The aspect ratio for which the resolutions are
-     *        requested
-     * @return The array of width and height pairs
-     */
-    public static Pair<Integer, Integer>[] getSupportedResolutions(int aspectRatio) {
-        final Pair<Integer, Integer>[] resolutions;
-        switch (aspectRatio) {
-            case ASPECT_RATIO_3_2: {
-                resolutions = ASPECT_RATIO_3_2_RESOLUTIONS;
-                break;
-            }
-
-            case ASPECT_RATIO_4_3: {
-                resolutions = ASPECT_RATIO_4_3_RESOLUTIONS;
-                break;
-            }
-
-            case ASPECT_RATIO_5_3: {
-                resolutions = ASPECT_RATIO_5_3_RESOLUTIONS;
-                break;
-            }
-
-            case ASPECT_RATIO_11_9: {
-                resolutions = ASPECT_RATIO_11_9_RESOLUTIONS;
-                break;
-            }
-
-            case ASPECT_RATIO_16_9: {
-                resolutions = ASPECT_RATIO_16_9_RESOLUTIONS;
-                break;
-            }
-
-            default: {
-                throw new IllegalArgumentException("Unknown aspect ratio: " + aspectRatio);
-            }
-        }
-
-        /** Check the platform specific maximum export resolution */
-        VideoEditorProfile veProfile = VideoEditorProfile.get();
-        if (veProfile == null) {
-            throw new RuntimeException("Can't get the video editor profile");
-        }
-        final int maxWidth = veProfile.maxOutputVideoFrameWidth;
-        final int maxHeight = veProfile.maxOutputVideoFrameHeight;
-        Pair<Integer, Integer>[] tmpResolutions = new Pair[resolutions.length];
-        int numSupportedResolution = 0;
-        int i = 0;
-
-        /** Get supported resolution list */
-        for (i = 0; i < resolutions.length; i++) {
-            if ((resolutions[i].first <= maxWidth) &&
-                (resolutions[i].second <= maxHeight)) {
-                tmpResolutions[numSupportedResolution] = resolutions[i];
-                numSupportedResolution++;
-            }
-        }
-        final Pair<Integer, Integer>[] supportedResolutions =
-            new Pair[numSupportedResolution];
-        System.arraycopy(tmpResolutions, 0,
-            supportedResolutions, 0, numSupportedResolution);
-
-        return supportedResolutions;
-    }
-
-    /**
-     * @return The array of supported video codecs
-     */
-    public static int[] getSupportedVideoCodecs() {
-        return SUPPORTED_VCODECS;
-    }
-
-    /**
-     * @return The array of supported audio codecs
-     */
-    public static int[] getSupportedAudioCodecs() {
-        return SUPPORTED_ACODECS;
-    }
-
-    /**
-     * @return The array of supported file formats
-     */
-    public static int[] getSupportedVideoFileFormat() {
-        return SUPPORTED_VIDEO_FILE_FORMATS;
-    }
-
-    /**
-     * @return The array of supported video bitrates
-     */
-    public static int[] getSupportedVideoBitrates() {
-        return SUPPORTED_BITRATES;
-    }
-
-    /**
-     * @return The maximum value for the audio volume
-     */
-    public static int getSupportedMaxVolume() {
-        return MediaProperties.AUDIO_MAX_VOLUME_PERCENT;
-    }
-
-    /**
-     * @return The maximum number of audio tracks supported
-     */
-    public static int getSupportedAudioTrackCount() {
-        return MediaProperties.AUDIO_MAX_TRACK_COUNT;
-    }
-}
diff --git a/media/java/android/media/videoeditor/MediaVideoItem.java b/media/java/android/media/videoeditor/MediaVideoItem.java
deleted file mode 100644
index bbcdf57..0000000
--- a/media/java/android/media/videoeditor/MediaVideoItem.java
+++ /dev/null
@@ -1,758 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.IOException;
-import java.lang.ref.SoftReference;
-import android.graphics.Bitmap;
-import android.media.videoeditor.MediaArtistNativeHelper.ClipSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.Properties;
-import android.media.videoeditor.VideoEditorProfile;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-
-/**
- * This class represents a video clip item on the storyboard
- * {@hide}
- */
-public class MediaVideoItem extends MediaItem {
-
-    /**
-     *  Instance variables
-     */
-    private final int mWidth;
-    private final int mHeight;
-    private final int mAspectRatio;
-    private final int mFileType;
-    private final int mVideoType;
-    private final int mVideoProfile;
-    private final int mVideoLevel;
-    private final int mVideoBitrate;
-    private final long mDurationMs;
-    private final int mAudioBitrate;
-    private final int mFps;
-    private final int mAudioType;
-    private final int mAudioChannels;
-    private final int mAudioSamplingFrequency;
-    private long mBeginBoundaryTimeMs;
-    private long mEndBoundaryTimeMs;
-    private int mVolumePercentage;
-    private boolean mMuted;
-    private String mAudioWaveformFilename;
-    private MediaArtistNativeHelper mMANativeHelper;
-    private VideoEditorImpl mVideoEditor;
-    private final int mVideoRotationDegree;
-    /**
-     *  The audio waveform data
-     */
-    private SoftReference<WaveformData> mWaveformData;
-
-    /**
-     * An object of this type cannot be instantiated with a default constructor
-     */
-    @SuppressWarnings("unused")
-    private MediaVideoItem() throws IOException {
-        this(null, null, null, RENDERING_MODE_BLACK_BORDER);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param editor The video editor reference
-     * @param mediaItemId The MediaItem id
-     * @param filename The image file name
-     * @param renderingMode The rendering mode
-     *
-     * @throws IOException if the file cannot be opened for reading
-     */
-    public MediaVideoItem(VideoEditor editor, String mediaItemId, String filename,
-            int renderingMode) throws IOException {
-        this(editor, mediaItemId, filename, renderingMode, 0, END_OF_FILE, 100, false, null);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param editor The video editor reference
-     * @param mediaItemId The MediaItem id
-     * @param filename The image file name
-     * @param renderingMode The rendering mode
-     * @param beginMs Start time in milliseconds. Set to 0 to extract from the
-     *           beginning
-     * @param endMs End time in milliseconds. Set to {@link #END_OF_FILE} to
-     *           extract until the end
-     * @param volumePercent in %/. 100% means no change; 50% means half value, 200%
-     *            means double, 0% means silent.
-     * @param muted true if the audio is muted
-     * @param audioWaveformFilename The name of the audio waveform file
-     *
-     * @throws IOException if the file cannot be opened for reading
-     */
-    MediaVideoItem(VideoEditor editor, String mediaItemId, String filename,
-            int renderingMode, long beginMs, long endMs, int volumePercent, boolean muted,
-            String audioWaveformFilename)  throws IOException {
-        super(editor, mediaItemId, filename, renderingMode);
-
-        if (editor instanceof VideoEditorImpl) {
-            mMANativeHelper = ((VideoEditorImpl)editor).getNativeContext();
-            mVideoEditor = ((VideoEditorImpl)editor);
-        }
-
-        final Properties properties;
-        try {
-             properties = mMANativeHelper.getMediaProperties(filename);
-        } catch ( Exception e) {
-            throw new IllegalArgumentException(e.getMessage() + " : " + filename);
-        }
-
-        /** Check the platform specific maximum import resolution */
-        VideoEditorProfile veProfile = VideoEditorProfile.get();
-        if (veProfile == null) {
-            throw new RuntimeException("Can't get the video editor profile");
-        }
-        final int maxInputWidth = veProfile.maxInputVideoFrameWidth;
-        final int maxInputHeight = veProfile.maxInputVideoFrameHeight;
-        if ((properties.width > maxInputWidth) ||
-            (properties.height > maxInputHeight)) {
-            throw new IllegalArgumentException(
-                "Unsupported import resolution. Supported maximum width:" +
-                maxInputWidth + " height:" + maxInputHeight +
-                ", current width:" + properties.width +
-                " height:" + properties.height);
-        }
-        /** Check the platform specific maximum video profile and level */
-        if (!properties.profileSupported) {
-            throw new IllegalArgumentException(
-                "Unsupported video profile " + properties.profile);
-        }
-        if (!properties.levelSupported) {
-            throw new IllegalArgumentException(
-                "Unsupported video level " + properties.level);
-        }
-        switch (mMANativeHelper.getFileType(properties.fileType)) {
-            case MediaProperties.FILE_3GP:
-            case MediaProperties.FILE_MP4:
-            case MediaProperties.FILE_M4V:
-                break;
-
-            default:
-                throw new IllegalArgumentException("Unsupported Input File Type");
-        }
-
-        switch (mMANativeHelper.getVideoCodecType(properties.videoFormat)) {
-            case MediaProperties.VCODEC_H263:
-            case MediaProperties.VCODEC_H264:
-            case MediaProperties.VCODEC_MPEG4:
-                break;
-
-            default:
-                throw new IllegalArgumentException("Unsupported Video Codec Format in Input File");
-        }
-
-        mWidth = properties.width;
-        mHeight = properties.height;
-        mAspectRatio = mMANativeHelper.getAspectRatio(properties.width,
-                properties.height);
-        mFileType = mMANativeHelper.getFileType(properties.fileType);
-        mVideoType = mMANativeHelper.getVideoCodecType(properties.videoFormat);
-        mVideoProfile = properties.profile;
-        mVideoLevel = properties.level;
-        mDurationMs = properties.videoDuration;
-        mVideoBitrate = properties.videoBitrate;
-        mAudioBitrate = properties.audioBitrate;
-        mFps = (int)properties.averageFrameRate;
-        mAudioType = mMANativeHelper.getAudioCodecType(properties.audioFormat);
-        mAudioChannels = properties.audioChannels;
-        mAudioSamplingFrequency =  properties.audioSamplingFrequency;
-        mBeginBoundaryTimeMs = beginMs;
-        mEndBoundaryTimeMs = endMs == END_OF_FILE ? mDurationMs : endMs;
-        mVolumePercentage = volumePercent;
-        mMuted = muted;
-        mAudioWaveformFilename = audioWaveformFilename;
-        if (audioWaveformFilename != null) {
-            mWaveformData = new SoftReference<WaveformData>(
-                        new WaveformData(audioWaveformFilename));
-        } else {
-            mWaveformData = null;
-        }
-        mVideoRotationDegree = properties.videoRotation;
-    }
-
-    /**
-     * Sets the start and end marks for trimming a video media item.
-     * This method will adjust the duration of bounding transitions, effects
-     * and overlays if the current duration of the transactions become greater
-     * than the maximum allowable duration.
-     *
-     * @param beginMs Start time in milliseconds. Set to 0 to extract from the
-     *           beginning
-     * @param endMs End time in milliseconds. Set to {@link #END_OF_FILE} to
-     *           extract until the end
-     *
-     * @throws IllegalArgumentException if the start time is greater or equal than
-     *           end time, the end time is beyond the file duration, the start time
-     *           is negative
-     */
-    public void setExtractBoundaries(long beginMs, long endMs) {
-        if (beginMs > mDurationMs) {
-            throw new IllegalArgumentException("setExtractBoundaries: Invalid start time");
-        }
-
-        if (endMs > mDurationMs) {
-            throw new IllegalArgumentException("setExtractBoundaries: Invalid end time");
-        }
-
-        if ((endMs != -1) && (beginMs >= endMs) ) {
-            throw new IllegalArgumentException("setExtractBoundaries: Start time is greater than end time");
-        }
-
-        if ((beginMs < 0) || ((endMs != -1) && (endMs < 0))) {
-            throw new IllegalArgumentException("setExtractBoundaries: Start time or end time is negative");
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        if (beginMs != mBeginBoundaryTimeMs) {
-            if (mBeginTransition != null) {
-                mBeginTransition.invalidate();
-            }
-        }
-
-        if (endMs != mEndBoundaryTimeMs) {
-            if (mEndTransition != null) {
-                mEndTransition.invalidate();
-            }
-        }
-
-        mBeginBoundaryTimeMs = beginMs;
-        mEndBoundaryTimeMs = endMs;
-        adjustTransitions();
-        mVideoEditor.updateTimelineDuration();
-        /**
-         *  Note that the start and duration of any effects and overlays are
-         *  not adjusted nor are they automatically removed if they fall
-         *  outside the new boundaries.
-         */
-    }
-
-    /**
-     * @return The boundary begin time
-     */
-    public long getBoundaryBeginTime() {
-        return mBeginBoundaryTimeMs;
-    }
-
-    /**
-     * @return The boundary end time
-     */
-    public long getBoundaryEndTime() {
-        return mEndBoundaryTimeMs;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public void addEffect(Effect effect) {
-        if (effect instanceof EffectKenBurns) {
-            throw new IllegalArgumentException("Ken Burns effects cannot be applied to MediaVideoItem");
-        }
-        super.addEffect(effect);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public Bitmap getThumbnail(int width, int height, long timeMs) {
-        if (timeMs > mDurationMs) {
-            throw new IllegalArgumentException("Time Exceeds duration");
-        }
-
-        if (timeMs < 0) {
-            throw new IllegalArgumentException("Invalid Time duration");
-        }
-
-        if ((width <= 0) || (height <= 0)) {
-            throw new IllegalArgumentException("Invalid Dimensions");
-        }
-
-        if (mVideoRotationDegree == 90 || mVideoRotationDegree == 270) {
-            int temp = width;
-            width = height;
-            height = temp;
-        }
-
-        return mMANativeHelper.getPixels(
-                getFilename(), width, height, timeMs, mVideoRotationDegree);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public void getThumbnailList(int width, int height,
-                                 long startMs, long endMs,
-                                 int thumbnailCount,
-                                 int[] indices,
-                                 GetThumbnailListCallback callback)
-                                 throws IOException {
-        if (startMs > endMs) {
-            throw new IllegalArgumentException("Start time is greater than end time");
-        }
-
-        if (endMs > mDurationMs) {
-            throw new IllegalArgumentException("End time is greater than file duration");
-        }
-
-        if ((height <= 0) || (width <= 0)) {
-            throw new IllegalArgumentException("Invalid dimension");
-        }
-
-        if (mVideoRotationDegree == 90 || mVideoRotationDegree == 270) {
-            int temp = width;
-            width = height;
-            height = temp;
-        }
-
-        mMANativeHelper.getPixelsList(getFilename(), width, height,
-                startMs, endMs, thumbnailCount, indices, callback,
-                mVideoRotationDegree);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    void invalidateTransitions(long startTimeMs, long durationMs) {
-        /**
-         *  Check if the item overlaps with the beginning and end transitions
-         */
-        if (mBeginTransition != null) {
-            if (isOverlapping(startTimeMs, durationMs,
-                    mBeginBoundaryTimeMs, mBeginTransition.getDuration())) {
-                mBeginTransition.invalidate();
-            }
-        }
-
-        if (mEndTransition != null) {
-            final long transitionDurationMs = mEndTransition.getDuration();
-            if (isOverlapping(startTimeMs, durationMs,
-                    mEndBoundaryTimeMs - transitionDurationMs, transitionDurationMs)) {
-                mEndTransition.invalidate();
-            }
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    void invalidateTransitions(long oldStartTimeMs, long oldDurationMs, long newStartTimeMs,
-            long newDurationMs) {
-        /**
-         *  Check if the item overlaps with the beginning and end transitions
-         */
-        if (mBeginTransition != null) {
-            final long transitionDurationMs = mBeginTransition.getDuration();
-            final boolean oldOverlap = isOverlapping(oldStartTimeMs, oldDurationMs,
-                    mBeginBoundaryTimeMs, transitionDurationMs);
-            final boolean newOverlap = isOverlapping(newStartTimeMs, newDurationMs,
-                    mBeginBoundaryTimeMs, transitionDurationMs);
-            /**
-             * Invalidate transition if:
-             *
-             * 1. New item overlaps the transition, the old one did not
-             * 2. New item does not overlap the transition, the old one did
-             * 3. New and old item overlap the transition if begin or end
-             * time changed
-             */
-            if (newOverlap != oldOverlap) { // Overlap has changed
-                mBeginTransition.invalidate();
-            } else if (newOverlap) { // Both old and new overlap
-                if ((oldStartTimeMs != newStartTimeMs) ||
-                        !(oldStartTimeMs + oldDurationMs > transitionDurationMs &&
-                        newStartTimeMs + newDurationMs > transitionDurationMs)) {
-                    mBeginTransition.invalidate();
-                }
-            }
-        }
-
-        if (mEndTransition != null) {
-            final long transitionDurationMs = mEndTransition.getDuration();
-            final boolean oldOverlap = isOverlapping(oldStartTimeMs, oldDurationMs,
-                    mEndBoundaryTimeMs - transitionDurationMs, transitionDurationMs);
-            final boolean newOverlap = isOverlapping(newStartTimeMs, newDurationMs,
-                    mEndBoundaryTimeMs - transitionDurationMs, transitionDurationMs);
-            /**
-             * Invalidate transition if:
-             *
-             * 1. New item overlaps the transition, the old one did not
-             * 2. New item does not overlap the transition, the old one did
-             * 3. New and old item overlap the transition if begin or end
-             * time changed
-             */
-            if (newOverlap != oldOverlap) { // Overlap has changed
-                mEndTransition.invalidate();
-            } else if (newOverlap) { // Both old and new overlap
-                if ((oldStartTimeMs + oldDurationMs != newStartTimeMs + newDurationMs) ||
-                        ((oldStartTimeMs > mEndBoundaryTimeMs - transitionDurationMs) ||
-                        newStartTimeMs > mEndBoundaryTimeMs - transitionDurationMs)) {
-                    mEndTransition.invalidate();
-                }
-            }
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getAspectRatio() {
-        return mAspectRatio;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getFileType() {
-        return mFileType;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getWidth() {
-        if (mVideoRotationDegree == 90 ||
-             mVideoRotationDegree == 270) {
-            return mHeight;
-        } else {
-            return mWidth;
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int getHeight() {
-        if (mVideoRotationDegree == 90 ||
-             mVideoRotationDegree == 270) {
-            return mWidth;
-        } else {
-            return mHeight;
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public long getDuration() {
-        return mDurationMs;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public long getTimelineDuration() {
-        return mEndBoundaryTimeMs - mBeginBoundaryTimeMs;
-    }
-
-    /**
-     * Render a frame according to the playback (in the native aspect ratio) for
-     * the specified media item. All effects and overlays applied to the media
-     * item are ignored. The extract boundaries are also ignored. This method
-     * can be used to playback frames when implementing trimming functionality.
-     *
-     * @param surfaceHolder SurfaceHolder used by the application
-     * @param timeMs time corresponding to the frame to display (relative to the
-     *            the beginning of the media item).
-     * @return The accurate time stamp of the frame that is rendered .
-     * @throws IllegalStateException if a playback, preview or an export is
-     *             already in progress
-     * @throws IllegalArgumentException if time is negative or greater than the
-     *             media item duration
-     */
-    public long renderFrame(SurfaceHolder surfaceHolder, long timeMs) {
-        if (surfaceHolder == null) {
-            throw new IllegalArgumentException("Surface Holder is null");
-        }
-
-        if (timeMs > mDurationMs || timeMs < 0) {
-            throw new IllegalArgumentException("requested time not correct");
-        }
-
-        final Surface surface = surfaceHolder.getSurface();
-        if (surface == null) {
-            throw new RuntimeException("Surface could not be retrieved from Surface holder");
-        }
-
-        if (mFilename != null) {
-            return mMANativeHelper.renderMediaItemPreviewFrame(surface,
-                    mFilename,timeMs,mWidth,mHeight);
-        } else {
-            return 0;
-        }
-    }
-
-
-    /**
-     * This API allows to generate a file containing the sample volume levels of
-     * the Audio track of this media item. This function may take significant
-     * time and is blocking. The file can be retrieved using
-     * getAudioWaveformFilename().
-     *
-     * @param listener The progress listener
-     *
-     * @throws IOException if the output file cannot be created
-     * @throws IllegalArgumentException if the mediaItem does not have a valid
-     *             Audio track
-     */
-    public void extractAudioWaveform(ExtractAudioWaveformProgressListener listener)
-        throws IOException {
-        int frameDuration = 0;
-        int sampleCount = 0;
-        final String projectPath = mMANativeHelper.getProjectPath();
-        /**
-         *  Waveform file does not exist
-         */
-        if (mAudioWaveformFilename == null ) {
-            /**
-             * Since audioWaveformFilename will not be supplied,it is  generated
-             */
-            String mAudioWaveFileName = null;
-
-            mAudioWaveFileName =
-                String.format(projectPath + "/" + "audioWaveformFile-"+ getId() + ".dat");
-            /**
-             * Logic to get frame duration = (no. of frames per sample * 1000)/
-             * sampling frequency
-             */
-            if (mMANativeHelper.getAudioCodecType(mAudioType) ==
-                MediaProperties.ACODEC_AMRNB ) {
-                frameDuration = (MediaProperties.SAMPLES_PER_FRAME_AMRNB*1000)/
-                MediaProperties.DEFAULT_SAMPLING_FREQUENCY;
-                sampleCount = MediaProperties.SAMPLES_PER_FRAME_AMRNB;
-            } else if (mMANativeHelper.getAudioCodecType(mAudioType) ==
-                MediaProperties.ACODEC_AMRWB ) {
-                frameDuration = (MediaProperties.SAMPLES_PER_FRAME_AMRWB * 1000)/
-                MediaProperties.DEFAULT_SAMPLING_FREQUENCY;
-                sampleCount = MediaProperties.SAMPLES_PER_FRAME_AMRWB;
-            } else if (mMANativeHelper.getAudioCodecType(mAudioType) ==
-                MediaProperties.ACODEC_AAC_LC ) {
-                frameDuration = (MediaProperties.SAMPLES_PER_FRAME_AAC * 1000)/
-                MediaProperties.DEFAULT_SAMPLING_FREQUENCY;
-                sampleCount = MediaProperties.SAMPLES_PER_FRAME_AAC;
-            }
-
-            mMANativeHelper.generateAudioGraph( getId(),
-                    mFilename,
-                    mAudioWaveFileName,
-                    frameDuration,
-                    MediaProperties.DEFAULT_CHANNEL_COUNT,
-                    sampleCount,
-                    listener,
-                    true);
-            /**
-             * Record the generated file name
-             */
-            mAudioWaveformFilename = mAudioWaveFileName;
-        }
-        mWaveformData =
-            new SoftReference<WaveformData>(new WaveformData(mAudioWaveformFilename));
-    }
-
-    /**
-     * Get the audio waveform file name if {@link #extractAudioWaveform()} was
-     * successful. The file format is as following:
-     * <ul>
-     *  <li>first 4 bytes provide the number of samples for each value, as big-endian signed</li>
-     *  <li>4 following bytes is the total number of values in the file, as big-endian signed</li>
-     *  <li>all values follow as bytes Name is unique.</li>
-     *</ul>
-     * @return the name of the file, null if the file has not been computed or
-     *         if there is no Audio track in the mediaItem
-     */
-    String getAudioWaveformFilename() {
-        return mAudioWaveformFilename;
-    }
-
-    /**
-     * Invalidate the AudioWaveform File
-     */
-    void invalidate() {
-        if (mAudioWaveformFilename != null) {
-            new File(mAudioWaveformFilename).delete();
-            mAudioWaveformFilename = null;
-        }
-    }
-
-    /**
-     * @return The waveform data
-     */
-    public WaveformData getWaveformData() throws IOException {
-        if (mWaveformData == null) {
-            return null;
-        }
-
-        WaveformData waveformData = mWaveformData.get();
-        if (waveformData != null) {
-            return waveformData;
-        } else if (mAudioWaveformFilename != null) {
-            try {
-                waveformData = new WaveformData(mAudioWaveformFilename);
-            } catch(IOException e) {
-                throw e;
-            }
-            mWaveformData = new SoftReference<WaveformData>(waveformData);
-            return waveformData;
-        } else {
-            return null;
-        }
-    }
-
-    /**
-     * Set volume of the Audio track of this mediaItem
-     *
-     * @param volumePercent in %/. 100% means no change; 50% means half value, 200%
-     *            means double, 0% means silent.
-     * @throws UsupportedOperationException if volume value is not supported
-     */
-    public void setVolume(int volumePercent) {
-        if ((volumePercent <0) || (volumePercent >100)) {
-            throw new IllegalArgumentException("Invalid volume");
-        }
-
-        mVolumePercentage = volumePercent;
-    }
-
-    /**
-     * Get the volume value of the audio track as percentage. Call of this
-     * method before calling setVolume will always return 100%
-     *
-     * @return the volume in percentage
-     */
-    public int getVolume() {
-        return mVolumePercentage;
-    }
-
-    /**
-     * @param muted true to mute the media item
-     */
-    public void setMute(boolean muted) {
-        mMANativeHelper.setGeneratePreview(true);
-        mMuted = muted;
-        if (mBeginTransition != null) {
-            mBeginTransition.invalidate();
-        }
-        if (mEndTransition != null) {
-            mEndTransition.invalidate();
-        }
-    }
-
-    /**
-     * @return true if the media item is muted
-     */
-    public boolean isMuted() {
-        return mMuted;
-    }
-
-    /**
-     * @return The video type
-     */
-    public int getVideoType() {
-        return mVideoType;
-    }
-
-    /**
-     * @return The video profile
-     */
-    public int getVideoProfile() {
-        return mVideoProfile;
-    }
-
-    /**
-     * @return The video profile
-     */
-    public int getVideoLevel() {
-        return mVideoLevel;
-    }
-
-    /**
-     * @return The video bitrate
-     */
-    public int getVideoBitrate() {
-        return mVideoBitrate;
-    }
-
-    /**
-     * @return The audio bitrate
-     */
-    public int getAudioBitrate() {
-        return mAudioBitrate;
-    }
-
-    /**
-     * @return The number of frames per second
-     */
-    public int getFps() {
-        return mFps;
-    }
-
-    /**
-     * @return The audio codec
-     */
-    public int getAudioType() {
-        return mAudioType;
-    }
-
-    /**
-     * @return The number of audio channels
-     */
-    public int getAudioChannels() {
-        return mAudioChannels;
-    }
-
-    /**
-     * @return The audio sample frequency
-     */
-    public int getAudioSamplingFrequency() {
-        return mAudioSamplingFrequency;
-    }
-
-    /**
-     * @return The Video media item properties in ClipSettings class object
-     * {@link android.media.videoeditor.MediaArtistNativeHelper.ClipSettings}
-     */
-    ClipSettings getVideoClipProperties() {
-        ClipSettings clipSettings = new ClipSettings();
-        clipSettings.clipPath = getFilename();
-        clipSettings.fileType = mMANativeHelper.getMediaItemFileType(getFileType());
-        clipSettings.beginCutTime = (int)getBoundaryBeginTime();
-        clipSettings.endCutTime = (int)getBoundaryEndTime();
-        clipSettings.mediaRendering = mMANativeHelper.getMediaItemRenderingMode(getRenderingMode());
-        clipSettings.rotationDegree = mVideoRotationDegree;
-
-        return clipSettings;
-    }
-}
diff --git a/media/java/android/media/videoeditor/Overlay.java b/media/java/android/media/videoeditor/Overlay.java
deleted file mode 100644
index a070eb4..0000000
--- a/media/java/android/media/videoeditor/Overlay.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * This is the super class for all Overlay classes.
- * {@hide}
- */
-public abstract class Overlay {
-    /**
-     *  Instance variables
-     */
-    private final String mUniqueId;
-    /**
-     *  The overlay owner
-     */
-    private final MediaItem mMediaItem;
-    /**
-     *  user attributes
-     */
-    private final Map<String, String> mUserAttributes;
-
-    protected long mStartTimeMs;
-    protected long mDurationMs;
-
-    /**
-     * Default constructor
-     */
-    @SuppressWarnings("unused")
-    private Overlay() {
-        this(null, null, 0, 0);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param mediaItem The media item owner
-     * @param overlayId The overlay id
-     * @param startTimeMs The start time relative to the media item start time
-     * @param durationMs The duration
-     *
-     * @throws IllegalArgumentException if the file type is not PNG or the
-     *      startTimeMs and durationMs are incorrect.
-     */
-    public Overlay(MediaItem mediaItem, String overlayId, long startTimeMs,
-           long durationMs) {
-        if (mediaItem == null) {
-            throw new IllegalArgumentException("Media item cannot be null");
-        }
-
-        if ((startTimeMs<0) || (durationMs<0) ) {
-            throw new IllegalArgumentException("Invalid start time and/OR duration");
-        }
-
-        if (startTimeMs + durationMs > mediaItem.getDuration()) {
-            throw new IllegalArgumentException("Invalid start time and duration");
-        }
-
-        mMediaItem = mediaItem;
-        mUniqueId = overlayId;
-        mStartTimeMs = startTimeMs;
-        mDurationMs = durationMs;
-        mUserAttributes = new HashMap<String, String>();
-    }
-
-    /**
-     * Get the overlay ID.
-     *
-     * @return The of the overlay
-     */
-    public String getId() {
-        return mUniqueId;
-    }
-
-    /**
-     * Get the duration of overlay.
-     *
-     * @return The duration of the overlay effect
-     */
-    public long getDuration() {
-        return mDurationMs;
-    }
-
-    /**
-     * If a preview or export is in progress, then this change is effective for
-     * next preview or export session.
-     *
-     * @param durationMs The duration in milliseconds
-     */
-    public void setDuration(long durationMs) {
-        if (durationMs < 0) {
-            throw new IllegalArgumentException("Invalid duration");
-        }
-
-        if (mStartTimeMs + durationMs > mMediaItem.getDuration()) {
-            throw new IllegalArgumentException("Duration is too large");
-        }
-
-        getMediaItem().getNativeContext().setGeneratePreview(true);
-
-        final long oldDurationMs = mDurationMs;
-        mDurationMs = durationMs;
-
-        mMediaItem.invalidateTransitions(mStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
-    }
-
-    /**
-     * Get the start time of overlay.
-     *
-     * @return the start time of the overlay
-     */
-    public long getStartTime() {
-        return mStartTimeMs;
-    }
-
-    /**
-     * Set the start time for the overlay. If a preview or export is in
-     * progress, then this change is effective for next preview or export
-     * session.
-     *
-     * @param startTimeMs start time in milliseconds
-     */
-    public void setStartTime(long startTimeMs) {
-        if (startTimeMs + mDurationMs > mMediaItem.getDuration()) {
-            throw new IllegalArgumentException("Start time is too large");
-        }
-
-        getMediaItem().getNativeContext().setGeneratePreview(true);
-
-        final long oldStartTimeMs = mStartTimeMs;
-        mStartTimeMs = startTimeMs;
-
-        mMediaItem.invalidateTransitions(oldStartTimeMs, mDurationMs, mStartTimeMs, mDurationMs);
-    }
-
-    /**
-     * Set the start time and duration
-     *
-     * @param startTimeMs start time in milliseconds
-     * @param durationMs The duration in milliseconds
-     */
-    public void setStartTimeAndDuration(long startTimeMs, long durationMs) {
-        if (startTimeMs + durationMs > mMediaItem.getDuration()) {
-            throw new IllegalArgumentException("Invalid start time or duration");
-        }
-
-        getMediaItem().getNativeContext().setGeneratePreview(true);
-
-        final long oldStartTimeMs = mStartTimeMs;
-        final long oldDurationMs = mDurationMs;
-
-        mStartTimeMs = startTimeMs;
-        mDurationMs = durationMs;
-
-        mMediaItem.invalidateTransitions(oldStartTimeMs, oldDurationMs, mStartTimeMs, mDurationMs);
-    }
-
-    /**
-     * Get the media item owner.
-     *
-     * @return The media item owner.
-     */
-    public MediaItem getMediaItem() {
-        return mMediaItem;
-    }
-
-    /**
-     * Set a user attribute
-     *
-     * @param name The attribute name
-     * @param value The attribute value
-     */
-    public void setUserAttribute(String name, String value) {
-        mUserAttributes.put(name, value);
-    }
-
-    /**
-     * Get the current user attributes set.
-     *
-     * @return The user attributes
-     */
-    public Map<String, String> getUserAttributes() {
-        return mUserAttributes;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object object) {
-        if (!(object instanceof Overlay)) {
-            return false;
-        }
-        return mUniqueId.equals(((Overlay)object).mUniqueId);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        return mUniqueId.hashCode();
-    }
-}
diff --git a/media/java/android/media/videoeditor/OverlayFrame.java b/media/java/android/media/videoeditor/OverlayFrame.java
deleted file mode 100644
index d159df2..0000000
--- a/media/java/android/media/videoeditor/OverlayFrame.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.DataOutputStream;
-import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
-
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.graphics.Bitmap.CompressFormat;
-import android.util.Pair;
-
-
-/**
- * This class is used to overlay an image on top of a media item.
- * {@hide}
- */
-public class OverlayFrame extends Overlay {
-    /**
-     *  Instance variables
-     */
-    private Bitmap mBitmap;
-    private String mFilename;
-    private String mBitmapFileName;
-
-    private int mOFWidth;
-    private int mOFHeight;
-
-    /**
-     * resized RGB Image dimensions
-     */
-    private int mResizedRGBWidth;
-    private int mResizedRGBHeight;
-
-    /**
-     *  The resize paint
-     */
-    private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
-
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private OverlayFrame() {
-        this(null, null, (String)null, 0, 0);
-    }
-
-    /**
-     * Constructor for an OverlayFrame
-     *
-     * @param mediaItem The media item owner
-     * @param overlayId The overlay id
-     * @param bitmap The bitmap to be used as an overlay. The size of the
-     *      bitmap must equal to the size of the media item to which it is
-     *      added. The bitmap is typically a decoded PNG file.
-     * @param startTimeMs The overlay start time in milliseconds
-     * @param durationMs The overlay duration in milliseconds
-     *
-     * @throws IllegalArgumentException if the file type is not PNG or the
-     *      startTimeMs and durationMs are incorrect.
-     */
-    public OverlayFrame(MediaItem mediaItem, String overlayId, Bitmap bitmap,
-                        long startTimeMs,long durationMs) {
-        super(mediaItem, overlayId, startTimeMs, durationMs);
-        mBitmap = bitmap;
-        mFilename = null;
-        mBitmapFileName = null;
-        mResizedRGBWidth = 0;
-        mResizedRGBHeight = 0;
-    }
-
-    /**
-     * Constructor for an OverlayFrame. This constructor can be used to
-     * restore the overlay after it was saved internally by the video editor.
-     *
-     * @param mediaItem The media item owner
-     * @param overlayId The overlay id
-     * @param filename The file name that contains the overlay.
-     * @param startTimeMs The overlay start time in milliseconds
-     * @param durationMs The overlay duration in milliseconds
-     *
-     * @throws IllegalArgumentException if the file type is not PNG or the
-     *      startTimeMs and durationMs are incorrect.
-     */
-    OverlayFrame(MediaItem mediaItem, String overlayId, String filename,
-                 long startTimeMs,long durationMs) {
-        super(mediaItem, overlayId, startTimeMs, durationMs);
-        mBitmapFileName = filename;
-        mBitmap = BitmapFactory.decodeFile(mBitmapFileName);
-        mFilename = null;
-        mResizedRGBWidth = 0;
-        mResizedRGBHeight = 0;
-    }
-
-    /**
-     * Get the overlay bitmap.
-     *
-     * @return Get the overlay bitmap
-     */
-    public Bitmap getBitmap() {
-        return mBitmap;
-    }
-
-    /**
-     * Get the overlay bitmap.
-     *
-     * @return Get the overlay bitmap as png file.
-     */
-    String getBitmapImageFileName() {
-        return mBitmapFileName;
-    }
-    /**
-     * Set the overlay bitmap.
-     *
-     * @param bitmap The overlay bitmap.
-     */
-    public void setBitmap(Bitmap bitmap) {
-        getMediaItem().getNativeContext().setGeneratePreview(true);
-
-        invalidate();
-
-        mBitmap = bitmap;
-        if (mFilename != null) {
-            /**
-             *  Delete the file
-             */
-            new File(mFilename).delete();
-            /**
-             *  Invalidate the filename
-             */
-            mFilename = null;
-        }
-
-        /**
-         *  Invalidate the transitions if necessary
-         */
-        getMediaItem().invalidateTransitions(mStartTimeMs, mDurationMs);
-    }
-
-    /**
-     * Get the file name of this overlay
-     */
-    String getFilename() {
-        return mFilename;
-    }
-
-    /*
-     * Set the file name of this overlay
-     */
-    void setFilename(String filename) {
-        mFilename = filename;
-    }
-    /**
-     * Save the overlay to the project folder
-     *
-     * @param path The path where the overlay will be saved
-     *
-     * @return The filename
-     * @throws FileNotFoundException if the bitmap cannot be saved
-     * @throws IOException if the bitmap file cannot be saved
-     */
-    String save(String path) throws FileNotFoundException, IOException {
-        if (mFilename != null) {
-            return mFilename;
-        }
-
-        // Create the compressed PNG file
-        mBitmapFileName = path + "/" + "Overlay" + getId() + ".png";
-        if (!(new File(mBitmapFileName).exists())) {
-            final FileOutputStream out = new FileOutputStream (mBitmapFileName);
-            mBitmap.compress(CompressFormat.PNG, 100, out);
-            out.flush();
-            out.close();
-        }
-
-        mOFWidth = mBitmap.getWidth();
-        mOFHeight = mBitmap.getHeight();
-
-        mFilename = path + "/" + "Overlay" + getId() + ".rgb";
-
-        /* resize and save rgb as per project aspect ratio */
-        MediaArtistNativeHelper nativeHelper = (super.getMediaItem()).getNativeContext();
-
-        /* get height and width for story board aspect ratio */
-        final Pair<Integer, Integer> maxResolution;
-        final Pair<Integer, Integer>[] resolutions;
-        resolutions = MediaProperties.getSupportedResolutions(nativeHelper.nativeHelperGetAspectRatio());
-
-        // Get the highest resolution
-        maxResolution = resolutions[resolutions.length - 1];
-
-        /* Generate the rgb file with rendering mode */
-        generateOverlayWithRenderingMode (super.getMediaItem(), this,
-                maxResolution.second /* max Height */ ,
-                maxResolution.first /* max Width */);
-
-        return mFilename;
-    }
-
-    /**
-     * Get the OverlayFrame Height
-     */
-     int getOverlayFrameHeight() {
-         return mOFHeight;
-     }
-
-     /**
-     * Get the OverlayFrame Width
-     */
-     int getOverlayFrameWidth() {
-         return mOFWidth;
-     }
-
-    /*
-     * Set the OverlayFrame Height
-     */
-     void setOverlayFrameHeight(int height) {
-         mOFHeight = height;
-     }
-
-    /*
-     * Set the OverlayFrame Width
-     */
-     void setOverlayFrameWidth(int width) {
-         mOFWidth = width;
-     }
-
-    /*
-     * Set the resized RGB widht and height
-     */
-     void setResizedRGBSize(int width, int height) {
-        mResizedRGBWidth = width;
-        mResizedRGBHeight = height;
-     }
-
-    /*
-     * Get the resized RGB Height
-     */
-     int getResizedRGBSizeHeight() {
-         return mResizedRGBHeight;
-     }
-
-    /*
-     * Get the resized RGB Width
-     */
-     int getResizedRGBSizeWidth() {
-         return mResizedRGBWidth;
-     }
-
-
-    /**
-     * Delete the overlay files
-     */
-    void invalidate() {
-        if (mBitmap != null) {
-            mBitmap.recycle();
-            mBitmap = null;
-        }
-
-        if (mFilename != null) {
-            new File(mFilename).delete();
-            mFilename = null;
-        }
-
-        if (mBitmapFileName != null) {
-            new File(mBitmapFileName).delete();
-            mBitmapFileName = null;
-        }
-    }
-
-     /**
-     * Delete the overlay related files
-     */
-    void invalidateGeneratedFiles() {
-        if (mFilename != null) {
-            new File(mFilename).delete();
-            mFilename = null;
-        }
-
-        if (mBitmapFileName != null) {
-            new File(mBitmapFileName).delete();
-            mBitmapFileName = null;
-        }
-    }
-
-    void generateOverlayWithRenderingMode (MediaItem mediaItemsList, OverlayFrame overlay, int height , int width)
-        throws FileNotFoundException, IOException {
-
-        final MediaItem t = mediaItemsList;
-
-        /* get the rendering mode */
-        int renderMode = t.getRenderingMode();
-
-        Bitmap overlayBitmap = ((OverlayFrame)overlay).getBitmap();
-
-        /*
-         * Check if the resize of Overlay is needed with rendering mode applied
-         * because of change in export dimensions
-         */
-        int resizedRGBFileHeight = ((OverlayFrame)overlay).getResizedRGBSizeHeight();
-        int resizedRGBFileWidth = ((OverlayFrame)overlay).getResizedRGBSizeWidth();
-
-        /* Get original bitmap width if it is not resized */
-        if(resizedRGBFileWidth == 0) {
-            resizedRGBFileWidth = overlayBitmap.getWidth();
-        }
-        /* Get original bitmap height if it is not resized */
-        if(resizedRGBFileHeight == 0) {
-            resizedRGBFileHeight = overlayBitmap.getHeight();
-        }
-
-        if (resizedRGBFileWidth != width || resizedRGBFileHeight != height
-            || (!(new File(((OverlayFrame)overlay).getFilename()).exists()))) {
-            /*
-             *  Create the canvas bitmap
-             */
-            final Bitmap destBitmap = Bitmap.createBitmap((int)width,
-                                                      (int)height,
-                                                      Bitmap.Config.ARGB_8888);
-            final Canvas overlayCanvas = new Canvas(destBitmap);
-            final Rect destRect;
-            final Rect srcRect;
-
-            switch (renderMode) {
-                case MediaItem.RENDERING_MODE_STRETCH: {
-                    destRect = new Rect(0, 0, overlayCanvas.getWidth(),
-                                             overlayCanvas.getHeight());
-                    srcRect = new Rect(0, 0, overlayBitmap.getWidth(),
-                                             overlayBitmap.getHeight());
-                    break;
-                }
-
-                case MediaItem.RENDERING_MODE_BLACK_BORDER: {
-                    int left, right, top, bottom;
-                    float aROverlayImage, aRCanvas;
-                    aROverlayImage = (float)(overlayBitmap.getWidth()) /
-                                     (float)(overlayBitmap.getHeight());
-
-                    aRCanvas = (float)(overlayCanvas.getWidth()) /
-                                     (float)(overlayCanvas.getHeight());
-
-                    if (aROverlayImage > aRCanvas) {
-                        int newHeight = ((overlayCanvas.getWidth() * overlayBitmap.getHeight())
-                                         / overlayBitmap.getWidth());
-                        left = 0;
-                        top  = (overlayCanvas.getHeight() - newHeight) / 2;
-                        right = overlayCanvas.getWidth();
-                        bottom = top + newHeight;
-                    } else {
-                        int newWidth = ((overlayCanvas.getHeight() * overlayBitmap.getWidth())
-                                            / overlayBitmap.getHeight());
-                        left = (overlayCanvas.getWidth() - newWidth) / 2;
-                        top  = 0;
-                        right = left + newWidth;
-                        bottom = overlayCanvas.getHeight();
-                    }
-
-                    destRect = new Rect(left, top, right, bottom);
-                    srcRect = new Rect(0, 0, overlayBitmap.getWidth(), overlayBitmap.getHeight());
-                    break;
-                }
-
-                case MediaItem.RENDERING_MODE_CROPPING: {
-                    // Calculate the source rect
-                    int left, right, top, bottom;
-                    float aROverlayImage, aRCanvas;
-                    aROverlayImage = (float)(overlayBitmap.getWidth()) /
-                                     (float)(overlayBitmap.getHeight());
-                    aRCanvas = (float)(overlayCanvas.getWidth()) /
-                                    (float)(overlayCanvas.getHeight());
-                    if (aROverlayImage < aRCanvas) {
-                        int newHeight = ((overlayBitmap.getWidth() * overlayCanvas.getHeight())
-                                   / overlayCanvas.getWidth());
-
-                        left = 0;
-                        top  = (overlayBitmap.getHeight() - newHeight) / 2;
-                        right = overlayBitmap.getWidth();
-                        bottom = top + newHeight;
-                    } else {
-                        int newWidth = ((overlayBitmap.getHeight() * overlayCanvas.getWidth())
-                                    / overlayCanvas.getHeight());
-                        left = (overlayBitmap.getWidth() - newWidth) / 2;
-                        top  = 0;
-                        right = left + newWidth;
-                        bottom = overlayBitmap.getHeight();
-                    }
-
-                    srcRect = new Rect(left, top, right, bottom);
-                    destRect = new Rect(0, 0, overlayCanvas.getWidth(), overlayCanvas.getHeight());
-                    break;
-                }
-
-                default: {
-                    throw new IllegalStateException("Rendering mode: " + renderMode);
-                }
-            }
-
-            overlayCanvas.drawBitmap(overlayBitmap, srcRect, destRect, sResizePaint);
-            overlayCanvas.setBitmap(null);
-
-            /*
-             * Write to the dest file
-             */
-            String outFileName = ((OverlayFrame)overlay).getFilename();
-
-            /*
-             * Save the image to same rgb file
-             */
-            if (outFileName != null) {
-                new File(outFileName).delete();
-            }
-
-            final FileOutputStream fl = new FileOutputStream(outFileName);
-            final DataOutputStream dos = new DataOutputStream(fl);
-
-            /*
-             * Populate the rgb file with bitmap data
-             */
-            final int [] framingBuffer = new int[width];
-            ByteBuffer byteBuffer = ByteBuffer.allocate(framingBuffer.length * 4);
-            IntBuffer intBuffer;
-
-            byte[] array = byteBuffer.array();
-            int tmp = 0;
-            while(tmp < height) {
-                destBitmap.getPixels(framingBuffer,0,width,0,tmp,width,1);
-                intBuffer = byteBuffer.asIntBuffer();
-                intBuffer.put(framingBuffer,0,width);
-                dos.write(array);
-                tmp += 1;
-            }
-            fl.flush();
-            fl.close();
-
-            /*
-             * Set the resized RGB width and height
-             */
-            ((OverlayFrame)overlay).setResizedRGBSize(width, height);
-        }
-    }
-}
diff --git a/media/java/android/media/videoeditor/Transition.java b/media/java/android/media/videoeditor/Transition.java
deleted file mode 100644
index fa9d26d..0000000
--- a/media/java/android/media/videoeditor/Transition.java
+++ /dev/null
@@ -1,489 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import android.media.videoeditor.MediaArtistNativeHelper.AlphaMagicSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.AudioTransition;
-import android.media.videoeditor.MediaArtistNativeHelper.ClipSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.EditSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.EffectSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.SlideTransitionSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.TransitionSettings;
-import android.media.videoeditor.MediaArtistNativeHelper.VideoTransition;
-
-/**
- * This class is super class for all transitions. Transitions (with the
- * exception of TransitionAtStart and TransitioAtEnd) can only be inserted
- * between media items.
- *
- * Adding a transition between MediaItems makes the
- * duration of the storyboard shorter by the duration of the Transition itself.
- * As a result, if the duration of the transition is larger than the smaller
- * duration of the two MediaItems associated with the Transition, an exception
- * will be thrown.
- *
- * During a transition, the audio track are cross-fading
- * automatically. {@hide}
- */
-public abstract class Transition {
-    /**
-     *  The transition behavior
-     */
-    private static final int BEHAVIOR_MIN_VALUE = 0;
-
-    /** The transition starts slowly and speed up */
-    public static final int BEHAVIOR_SPEED_UP = 0;
-    /** The transition start fast and speed down */
-    public static final int BEHAVIOR_SPEED_DOWN = 1;
-    /** The transition speed is constant */
-    public static final int BEHAVIOR_LINEAR = 2;
-    /** The transition starts fast and ends fast with a slow middle */
-    public static final int BEHAVIOR_MIDDLE_SLOW = 3;
-    /** The transition starts slowly and ends slowly with a fast middle */
-    public static final int BEHAVIOR_MIDDLE_FAST = 4;
-
-    private static final int BEHAVIOR_MAX_VALUE = 4;
-
-    /**
-     *  The unique id of the transition
-     */
-    private final String mUniqueId;
-
-    /**
-     *  The transition is applied at the end of this media item
-     */
-    private final MediaItem mAfterMediaItem;
-    /**
-     *  The transition is applied at the beginning of this media item
-     */
-    private final MediaItem mBeforeMediaItem;
-
-    /**
-     *  The transition behavior
-     */
-    protected final int mBehavior;
-
-    /**
-     *  The transition duration
-     */
-    protected long mDurationMs;
-
-    /**
-     *  The transition filename
-     */
-    protected String mFilename;
-
-    protected MediaArtistNativeHelper mNativeHelper;
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private Transition() {
-        this(null, null, null, 0, 0);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param transitionId The transition id
-     * @param afterMediaItem The transition is applied to the end of this
-     *      media item
-     * @param beforeMediaItem The transition is applied to the beginning of
-     *      this media item
-     * @param durationMs The duration of the transition in milliseconds
-     * @param behavior The transition behavior
-     */
-    protected Transition(String transitionId, MediaItem afterMediaItem,
-                         MediaItem beforeMediaItem,long durationMs,
-                         int behavior) {
-        if (behavior < BEHAVIOR_MIN_VALUE || behavior > BEHAVIOR_MAX_VALUE) {
-            throw new IllegalArgumentException("Invalid behavior: " + behavior);
-        }
-        if ((afterMediaItem == null) && (beforeMediaItem == null)) {
-            throw new IllegalArgumentException("Null media items");
-        }
-        mUniqueId = transitionId;
-        mAfterMediaItem = afterMediaItem;
-        mBeforeMediaItem = beforeMediaItem;
-        mDurationMs = durationMs;
-        mBehavior = behavior;
-        mNativeHelper = null;
-        if (durationMs > getMaximumDuration()) {
-            throw new IllegalArgumentException("The duration is too large");
-        }
-        if (afterMediaItem != null) {
-            mNativeHelper = afterMediaItem.getNativeContext();
-        }else {
-            mNativeHelper = beforeMediaItem.getNativeContext();
-        }
-    }
-
-    /**
-     * Get the ID of the transition.
-     *
-     * @return The ID of the transition
-     */
-    public String getId() {
-        return mUniqueId;
-    }
-
-    /**
-     * Get the media item at the end of which the transition is applied.
-     *
-     * @return The media item at the end of which the transition is applied
-     */
-    public MediaItem getAfterMediaItem() {
-        return mAfterMediaItem;
-    }
-
-    /**
-     * Get the media item at the beginning of which the transition is applied.
-     *
-     * @return The media item at the beginning of which the transition is
-     *      applied
-     */
-    public MediaItem getBeforeMediaItem() {
-        return mBeforeMediaItem;
-    }
-
-    /**
-     * Set the duration of the transition.
-     *
-     * @param durationMs the duration of the transition in milliseconds
-     */
-    public void setDuration(long durationMs) {
-        if (durationMs > getMaximumDuration()) {
-            throw new IllegalArgumentException("The duration is too large");
-        }
-
-        mDurationMs = durationMs;
-        invalidate();
-        mNativeHelper.setGeneratePreview(true);
-    }
-
-    /**
-     * Get the duration of the transition.
-     *
-     * @return the duration of the transition in milliseconds
-     */
-    public long getDuration() {
-        return mDurationMs;
-    }
-
-    /**
-     * The duration of a transition cannot be greater than half of the minimum
-     * duration of the bounding media items.
-     *
-     * @return The maximum duration of this transition
-     */
-    public long getMaximumDuration() {
-        if (mAfterMediaItem == null) {
-            return mBeforeMediaItem.getTimelineDuration() / 2;
-        } else if (mBeforeMediaItem == null) {
-            return mAfterMediaItem.getTimelineDuration() / 2;
-        } else {
-            return (Math.min(mAfterMediaItem.getTimelineDuration(),
-                    mBeforeMediaItem.getTimelineDuration()) / 2);
-        }
-    }
-
-    /**
-     * Get the behavior of the transition.
-     *
-     * @return The behavior
-     */
-    public int getBehavior() {
-        return mBehavior;
-    }
-
-    /**
-     * Get the transition data.
-     *
-     * @return The transition data in TransitionSettings object
-     * {@link android.media.videoeditor.MediaArtistNativeHelper.TransitionSettings}
-     */
-    TransitionSettings getTransitionSettings() {
-        TransitionAlpha transitionAlpha = null;
-        TransitionSliding transitionSliding = null;
-        TransitionCrossfade transitionCrossfade = null;
-        TransitionFadeBlack transitionFadeBlack = null;
-        TransitionSettings transitionSetting = null;
-        transitionSetting = new TransitionSettings();
-        transitionSetting.duration = (int)getDuration();
-        if (this instanceof TransitionAlpha) {
-            transitionAlpha = (TransitionAlpha)this;
-            transitionSetting.videoTransitionType = VideoTransition.ALPHA_MAGIC;
-            transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE;
-            transitionSetting.transitionBehaviour = mNativeHelper
-            .getVideoTransitionBehaviour(transitionAlpha.getBehavior());
-            transitionSetting.alphaSettings = new AlphaMagicSettings();
-            transitionSetting.slideSettings = null;
-            transitionSetting.alphaSettings.file = transitionAlpha.getPNGMaskFilename();
-            transitionSetting.alphaSettings.blendingPercent = transitionAlpha.getBlendingPercent();
-            transitionSetting.alphaSettings.invertRotation = transitionAlpha.isInvert();
-            transitionSetting.alphaSettings.rgbWidth = transitionAlpha.getRGBFileWidth();
-            transitionSetting.alphaSettings.rgbHeight = transitionAlpha.getRGBFileHeight();
-
-        } else if (this instanceof TransitionSliding) {
-            transitionSliding = (TransitionSliding)this;
-            transitionSetting.videoTransitionType = VideoTransition.SLIDE_TRANSITION;
-            transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE;
-            transitionSetting.transitionBehaviour = mNativeHelper
-            .getVideoTransitionBehaviour(transitionSliding.getBehavior());
-            transitionSetting.alphaSettings = null;
-            transitionSetting.slideSettings = new SlideTransitionSettings();
-            transitionSetting.slideSettings.direction = mNativeHelper
-            .getSlideSettingsDirection(transitionSliding.getDirection());
-        } else if (this instanceof TransitionCrossfade) {
-            transitionCrossfade = (TransitionCrossfade)this;
-            transitionSetting.videoTransitionType = VideoTransition.CROSS_FADE;
-            transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE;
-            transitionSetting.transitionBehaviour = mNativeHelper
-            .getVideoTransitionBehaviour(transitionCrossfade.getBehavior());
-            transitionSetting.alphaSettings = null;
-            transitionSetting.slideSettings = null;
-        } else if (this instanceof TransitionFadeBlack) {
-            transitionFadeBlack = (TransitionFadeBlack)this;
-            transitionSetting.videoTransitionType = VideoTransition.FADE_BLACK;
-            transitionSetting.audioTransitionType = AudioTransition.CROSS_FADE;
-            transitionSetting.transitionBehaviour = mNativeHelper
-            .getVideoTransitionBehaviour(transitionFadeBlack.getBehavior());
-            transitionSetting.alphaSettings = null;
-            transitionSetting.slideSettings = null;
-        }
-
-        return transitionSetting;
-    }
-
-    /**
-     * Checks if the effect and overlay applied on a media item
-     * overlaps with the transition on media item.
-     *
-     * @param m The media item
-     * @param clipSettings The ClipSettings object
-     * @param clipNo The clip no.(out of the two media items
-     * associated with current transition)for which the effect
-     * clip should be generated
-     * @return List of effects that overlap with the transition
-     */
-
-    List<EffectSettings>  isEffectandOverlayOverlapping(MediaItem m, ClipSettings clipSettings,
-                                         int clipNo) {
-        List<Effect> effects;
-        List<Overlay> overlays;
-        List<EffectSettings> effectSettings = new ArrayList<EffectSettings>();
-        EffectSettings tmpEffectSettings;
-
-        overlays = m.getAllOverlays();
-        for (Overlay overlay : overlays) {
-            tmpEffectSettings = mNativeHelper.getOverlaySettings((OverlayFrame)overlay);
-            mNativeHelper.adjustEffectsStartTimeAndDuration(tmpEffectSettings,
-                    clipSettings.beginCutTime, clipSettings.endCutTime);
-            if (tmpEffectSettings.duration != 0) {
-                effectSettings.add(tmpEffectSettings);
-            }
-        }
-
-        effects = m.getAllEffects();
-        for (Effect effect : effects) {
-            if (effect instanceof EffectColor) {
-                tmpEffectSettings = mNativeHelper.getEffectSettings((EffectColor)effect);
-                mNativeHelper.adjustEffectsStartTimeAndDuration(tmpEffectSettings,
-                        clipSettings.beginCutTime, clipSettings.endCutTime);
-                if (tmpEffectSettings.duration != 0) {
-                    if (m instanceof MediaVideoItem) {
-                        tmpEffectSettings.fiftiesFrameRate = mNativeHelper
-                        .GetClosestVideoFrameRate(((MediaVideoItem)m).getFps());
-                    }
-                    effectSettings.add(tmpEffectSettings);
-                }
-            }
-        }
-
-         return effectSettings;
-    }
-
-    /**
-     * Generate the video clip for the specified transition. This method may
-     * block for a significant amount of time. Before the method completes
-     * execution it sets the mFilename to the name of the newly generated
-     * transition video clip file.
-     */
-    void generate() {
-        MediaItem m1 = this.getAfterMediaItem();
-        MediaItem m2 = this.getBeforeMediaItem();
-        ClipSettings clipSettings1 = new ClipSettings();
-        ClipSettings clipSettings2 = new ClipSettings();
-        TransitionSettings transitionSetting = null;
-        EditSettings editSettings = new EditSettings();
-        List<EffectSettings> effectSettings_clip1;
-        List<EffectSettings> effectSettings_clip2;
-
-        String output = null;
-
-        if (mNativeHelper == null) {
-            if (m1 != null)
-                mNativeHelper = m1.getNativeContext();
-            else if (m2 != null)
-                mNativeHelper = m2.getNativeContext();
-        }
-        transitionSetting = getTransitionSettings();
-        if (m1 != null && m2 != null) {
-            /* transition between media items */
-            clipSettings1 = m1.getClipSettings();
-            clipSettings2 = m2.getClipSettings();
-            clipSettings1.beginCutTime = (int)(clipSettings1.endCutTime -
-                                                              this.mDurationMs);
-            clipSettings2.endCutTime = (int)(clipSettings2.beginCutTime +
-                                                              this.mDurationMs);
-            /*
-             * Check how many effects and overlays overlap with transition and
-             * generate effect clip first if there is any overlap
-             */
-            effectSettings_clip1 = isEffectandOverlayOverlapping(m1, clipSettings1,1);
-            effectSettings_clip2 = isEffectandOverlayOverlapping(m2, clipSettings2,2);
-            for (int index = 0; index < effectSettings_clip2.size(); index++ ) {
-                effectSettings_clip2.get(index).startTime += this.mDurationMs;
-            }
-            editSettings.effectSettingsArray =
-                                              new EffectSettings[effectSettings_clip1.size()
-                                                 + effectSettings_clip2.size()];
-            int i=0,j=0;
-            while (i < effectSettings_clip1.size()) {
-                editSettings.effectSettingsArray[j] = effectSettings_clip1.get(i);
-                i++;
-                j++;
-            }
-            i=0;
-            while (i < effectSettings_clip2.size()) {
-                editSettings.effectSettingsArray[j] = effectSettings_clip2.get(i);
-                i++;
-                j++;
-            }
-        } else if (m1 == null && m2 != null) {
-            /* begin transition at first media item */
-            m2.generateBlankFrame(clipSettings1);
-            clipSettings2 = m2.getClipSettings();
-            clipSettings1.endCutTime = (int)(this.mDurationMs + 50);
-            clipSettings2.endCutTime = (int)(clipSettings2.beginCutTime +
-                                                              this.mDurationMs);
-            /*
-             * Check how many effects and overlays overlap with transition and
-             * generate effect clip first if there is any overlap
-             */
-            effectSettings_clip2 = isEffectandOverlayOverlapping(m2, clipSettings2,2);
-            for (int index = 0; index < effectSettings_clip2.size(); index++ ) {
-                effectSettings_clip2.get(index).startTime += this.mDurationMs;
-            }
-            editSettings.effectSettingsArray = new EffectSettings[effectSettings_clip2.size()];
-            int i=0, j=0;
-            while (i < effectSettings_clip2.size()) {
-                editSettings.effectSettingsArray[j] = effectSettings_clip2.get(i);
-                i++;
-                j++;
-            }
-        } else if (m1 != null && m2 == null) {
-            /* end transition at last media item */
-            clipSettings1 = m1.getClipSettings();
-            m1.generateBlankFrame(clipSettings2);
-            clipSettings1.beginCutTime = (int)(clipSettings1.endCutTime -
-                                                              this.mDurationMs);
-            clipSettings2.endCutTime = (int)(this.mDurationMs + 50);
-            /*
-             * Check how many effects and overlays overlap with transition and
-             * generate effect clip first if there is any overlap
-             */
-            effectSettings_clip1 = isEffectandOverlayOverlapping(m1, clipSettings1,1);
-            editSettings.effectSettingsArray = new EffectSettings[effectSettings_clip1.size()];
-            int i=0,j=0;
-            while (i < effectSettings_clip1.size()) {
-                editSettings.effectSettingsArray[j] = effectSettings_clip1.get(i);
-                i++;
-                j++;
-            }
-        }
-
-        editSettings.clipSettingsArray = new ClipSettings[2];
-        editSettings.clipSettingsArray[0] = clipSettings1;
-        editSettings.clipSettingsArray[1] = clipSettings2;
-        editSettings.backgroundMusicSettings = null;
-        editSettings.transitionSettingsArray = new TransitionSettings[1];
-        editSettings.transitionSettingsArray[0] = transitionSetting;
-        output = mNativeHelper.generateTransitionClip(editSettings, mUniqueId,
-                                                      m1, m2,this);
-        setFilename(output);
-    }
-
-
-    /**
-     * Set the transition filename.
-     */
-    void setFilename(String filename) {
-        mFilename = filename;
-    }
-
-    /**
-     * Get the transition filename.
-     */
-    String getFilename() {
-        return mFilename;
-    }
-
-    /**
-     * Remove any resources associated with this transition
-     */
-    void invalidate() {
-        if (mFilename != null) {
-            new File(mFilename).delete();
-            mFilename = null;
-        }
-    }
-
-    /**
-     * Check if the transition is generated.
-     *
-     * @return true if the transition is generated
-     */
-    boolean isGenerated() {
-        return (mFilename != null);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public boolean equals(Object object) {
-        if (!(object instanceof Transition)) {
-            return false;
-        }
-        return mUniqueId.equals(((Transition)object).mUniqueId);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public int hashCode() {
-        return mUniqueId.hashCode();
-    }
-}
diff --git a/media/java/android/media/videoeditor/TransitionAlpha.java b/media/java/android/media/videoeditor/TransitionAlpha.java
deleted file mode 100644
index 22788d4..0000000
--- a/media/java/android/media/videoeditor/TransitionAlpha.java
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import java.io.DataOutputStream;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.IntBuffer;
-
-/**
- * This class allows to render an "alpha blending" transition according to a
- * bitmap mask. The mask shows the shape of the transition all along the
- * duration of the transition: just before the transition, video 1 is fully
- * displayed. When the transition starts, as the time goes on, pixels of video 2
- * replace pixels of video 1 according to the gray scale pixel value of the
- * mask.
- * {@hide}
- */
-public class TransitionAlpha extends Transition {
-    /** This is the input JPEG file for the mask */
-    private final String mMaskFilename;
-
-    /**
-     * This is percentage (between 0 and 100) of blending between video 1 and
-     * video 2 if this value equals 0, then the mask is strictly applied if this
-     * value equals 100, then the mask is not at all applied (no transition
-     * effect)
-     */
-    private final int mBlendingPercent;
-
-    /**
-     * If true, this value inverts the direction of the mask: white pixels of
-     * the mask show video 2 pixels first black pixels of the mask show video 2
-     * pixels last.
-     */
-    private final boolean mIsInvert;
-
-
-    private int mWidth;
-    private int mHeight;
-    private String mRGBMaskFile;
-
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private TransitionAlpha() {
-        this(null, null, null, 0, 0, null, 0, false);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param transitionId The transition id
-     * @param afterMediaItem The transition is applied to the end of this media
-     *            item
-     * @param beforeMediaItem The transition is applied to the beginning of this
-     *            media item
-     * @param durationMs duration of the transition in milliseconds
-     * @param behavior behavior is one of the behavior defined in Transition
-     *            class
-     * @param maskFilename JPEG file name. The dimension of the image
-     *           corresponds to 720p (16:9 aspect ratio). Mask files are
-     *           shared between video editors and can be created in the
-     *           projects folder (the parent folder for all projects).
-     * @param blendingPercent The blending percent applied
-     * @param invert true to invert the direction of the alpha blending
-     * @throws IllegalArgumentException if behavior is not supported, or if
-     *             direction are not supported.
-     */
-    public TransitionAlpha(String transitionId, MediaItem afterMediaItem,
-            MediaItem beforeMediaItem, long durationMs, int behavior,
-            String maskFilename, int blendingPercent, boolean invert) {
-        super(transitionId, afterMediaItem, beforeMediaItem, durationMs, behavior);
-
-        /**
-         * Generate a RGB file for the supplied mask file
-         */
-        final BitmapFactory.Options dbo = new BitmapFactory.Options();
-        dbo.inJustDecodeBounds = true;
-        if (!new File(maskFilename).exists())
-            throw new IllegalArgumentException("File not Found " + maskFilename);
-        BitmapFactory.decodeFile(maskFilename, dbo);
-
-        mWidth = dbo.outWidth;
-        mHeight = dbo.outHeight;
-
-        mRGBMaskFile = String.format(mNativeHelper.getProjectPath() +
-                "/" + "mask" + transitionId+ ".rgb");
-
-
-        FileOutputStream fl = null;
-
-        try{
-             fl = new FileOutputStream(mRGBMaskFile);
-        } catch (IOException e) {
-            /* catch IO exception */
-        }
-        final DataOutputStream dos = new DataOutputStream(fl);
-
-        if (fl != null) {
-            /**
-             * Write to rgb file
-             */
-            Bitmap imageBitmap = BitmapFactory.decodeFile(maskFilename);
-            final int [] framingBuffer = new int[mWidth];
-            ByteBuffer byteBuffer = ByteBuffer.allocate(framingBuffer.length * 4);
-            IntBuffer intBuffer;
-
-            byte[] array = byteBuffer.array();
-            int tmp = 0;
-            while (tmp < mHeight) {
-                imageBitmap.getPixels(framingBuffer, 0, mWidth, 0, tmp,mWidth, 1);
-                intBuffer = byteBuffer.asIntBuffer();
-                intBuffer.put(framingBuffer,0,mWidth);
-                try {
-                    dos.write(array);
-                } catch (IOException e) {
-                    /* catch file write error */
-                }
-                tmp += 1;
-            }
-
-            imageBitmap.recycle();
-            try{
-                fl.close();
-            }catch (IOException e) {
-                /* file close error */
-            }
-        }
-
-        /**
-         * Capture the details
-         */
-        mMaskFilename = maskFilename;
-        mBlendingPercent = blendingPercent;
-        mIsInvert = invert;
-    }
-
-    public int getRGBFileWidth() {
-        return mWidth;
-    }
-
-    public int getRGBFileHeight() {
-        return mHeight;
-    }
-
-    public String getPNGMaskFilename() {
-        return mRGBMaskFile;
-    }
-
-    /**
-     * Get the blending percentage
-     *
-     * @return The blending percentage
-     */
-    public int getBlendingPercent() {
-        return mBlendingPercent;
-    }
-
-    /**
-     * Get the filename of the mask.
-     *
-     * @return The mask filename
-     */
-    public String getMaskFilename() {
-        return mMaskFilename;
-    }
-
-    /**
-     * Check if the alpha blending direction is inverted.
-     *
-     * @return true if the direction of the alpha blending is inverted
-     */
-    public boolean isInvert() {
-        return mIsInvert;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    public void generate() {
-        super.generate();
-    }
-}
diff --git a/media/java/android/media/videoeditor/TransitionCrossfade.java b/media/java/android/media/videoeditor/TransitionCrossfade.java
deleted file mode 100644
index 417c64e..0000000
--- a/media/java/android/media/videoeditor/TransitionCrossfade.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-
-/**
- * This class allows to render a crossfade (dissolve) effect transition between
- * two videos
- * {@hide}
- */
-public class TransitionCrossfade extends Transition {
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private TransitionCrossfade() {
-        this(null, null, null, 0, 0);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param transitionId The transition id
-     * @param afterMediaItem The transition is applied to the end of this
-     *      media item
-     * @param beforeMediaItem The transition is applied to the beginning of
-     *      this media item
-     * @param durationMs duration of the transition in milliseconds
-     * @param behavior behavior is one of the behavior defined in Transition
-     *      class
-     *
-     * @throws IllegalArgumentException if behavior is not supported.
-     */
-    public TransitionCrossfade(String transitionId, MediaItem afterMediaItem,
-            MediaItem beforeMediaItem, long durationMs, int behavior) {
-        super(transitionId, afterMediaItem, beforeMediaItem, durationMs, behavior);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    void generate() {
-        super.generate();
-    }
-}
diff --git a/media/java/android/media/videoeditor/TransitionFadeBlack.java b/media/java/android/media/videoeditor/TransitionFadeBlack.java
deleted file mode 100644
index da07cf0..0000000
--- a/media/java/android/media/videoeditor/TransitionFadeBlack.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-
-/**
- * This class is used to render a fade to black and fade from black transition
- * between two media items.
- * {@hide}
- */
-public class TransitionFadeBlack extends Transition {
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private TransitionFadeBlack() {
-        this(null, null, null, 0, 0);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param transitionId The transition id
-     * @param afterMediaItem The transition is applied to the end of this
-     *      media item
-     * @param beforeMediaItem The transition is applied to the beginning of
-     *      this media item
-     * @param durationMs duration of the transition
-     * @param behavior behavior is one of the behavior defined in Transition
-     *      class
-     *
-     * @throws IllegalArgumentException if behavior is not supported.
-     */
-    public TransitionFadeBlack(String transitionId, MediaItem afterMediaItem,
-            MediaItem beforeMediaItem, long durationMs, int behavior) {
-        super(transitionId, afterMediaItem, beforeMediaItem, durationMs, behavior);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    void generate() {
-        super.generate();
-    }
-}
diff --git a/media/java/android/media/videoeditor/TransitionSliding.java b/media/java/android/media/videoeditor/TransitionSliding.java
deleted file mode 100644
index 57610ab..0000000
--- a/media/java/android/media/videoeditor/TransitionSliding.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-/**
- * This class allows to create sliding transitions
- * {@hide}
- */
-public class TransitionSliding extends Transition {
-
-    /** Video 1 is pushed to the right while video 2 is coming from left */
-    public final static int DIRECTION_RIGHT_OUT_LEFT_IN = 0;
-    /** Video 1 is pushed to the left while video 2 is coming from right */
-    public static final int DIRECTION_LEFT_OUT_RIGHT_IN = 1;
-    /** Video 1 is pushed to the top while video 2 is coming from bottom */
-    public static final int DIRECTION_TOP_OUT_BOTTOM_IN = 2;
-    /** Video 1 is pushed to the bottom while video 2 is coming from top */
-    public static final int DIRECTION_BOTTOM_OUT_TOP_IN = 3;
-
-    // The sliding transitions
-    private final int mSlidingDirection;
-
-    /**
-     * An object of this type cannot be instantiated by using the default
-     * constructor
-     */
-    @SuppressWarnings("unused")
-    private TransitionSliding() {
-        this(null, null, null, 0, 0, 0);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param transitionId The transition id
-     * @param afterMediaItem The transition is applied to the end of this
-     *      media item
-     * @param beforeMediaItem The transition is applied to the beginning of
-     *      this media item
-     * @param durationMs duration of the transition in milliseconds
-     * @param behavior behavior is one of the behavior defined in Transition
-     *            class
-     * @param direction direction shall be one of the supported directions like
-     *            RIGHT_OUT_LEFT_IN
-     *
-     * @throws IllegalArgumentException if behavior is not supported.
-     */
-    public TransitionSliding(String transitionId, MediaItem afterMediaItem,
-            MediaItem beforeMediaItem, long durationMs, int behavior,
-            int direction) {
-        super(transitionId, afterMediaItem, beforeMediaItem, durationMs, behavior);
-        switch (direction) {
-            case DIRECTION_RIGHT_OUT_LEFT_IN:
-            case DIRECTION_LEFT_OUT_RIGHT_IN:
-            case DIRECTION_TOP_OUT_BOTTOM_IN:
-            case DIRECTION_BOTTOM_OUT_TOP_IN:
-                break;
-
-            default:
-                throw new IllegalArgumentException("Invalid direction");
-        }
-        mSlidingDirection = direction;
-    }
-
-    /**
-     * Get the sliding direction.
-     *
-     * @return The sliding direction
-     */
-    public int getDirection() {
-        return mSlidingDirection;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    @Override
-    void generate() {
-        super.generate();
-    }
-}
diff --git a/media/java/android/media/videoeditor/VideoEditor.java b/media/java/android/media/videoeditor/VideoEditor.java
deleted file mode 100644
index 08d27d4..0000000
--- a/media/java/android/media/videoeditor/VideoEditor.java
+++ /dev/null
@@ -1,774 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.IOException;
-import java.util.List;
-import java.util.concurrent.CancellationException;
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.graphics.Canvas;
-import android.graphics.Paint;
-import android.graphics.Rect;
-import android.view.SurfaceHolder;
-
-/**
- * This is the interface implemented by classes which provide video editing
- * functionality. The VideoEditor implementation class manages all input and
- * output files. Unless specifically mentioned, methods are blocking. A typical
- * editing session may consist of the following sequence of operations:
- *
- * <ul>
- *  <li>Add a set of MediaItems</li>
- *  <li>Apply a set of Transitions between MediaItems</li>
- *  <li>Add Effects and Overlays to media items</li>
- *  <li>Preview the movie at any time</li>
- *  <li>Save the VideoEditor implementation class internal state</li>
- *  <li>Release the VideoEditor implementation class instance by invoking
- * {@link #release()}
- * </ul>
- * The internal VideoEditor state consists of the following elements:
- * <ul>
- *  <li>Ordered & trimmed MediaItems</li>
- *  <li>Transition video clips</li>
- *  <li>Overlays</li>
- *  <li>Effects</li>
- *  <li>Audio waveform for the background audio and MediaItems</li>
- *  <li>Project thumbnail</li>
- *  <li>Last exported movie.</li>
- *  <li>Other project specific data such as the current aspect ratio.</li>
- * </ul>
- * {@hide}
- */
-public interface VideoEditor {
-    /**
-     *  The file name of the project thumbnail
-     */
-    public static final String THUMBNAIL_FILENAME = "thumbnail.jpg";
-
-    /**
-     *  Use this value instead of the specific end of the storyboard timeline
-     *  value.
-     */
-    public final static int DURATION_OF_STORYBOARD = -1;
-
-    /**
-     *  Maximum supported file size
-     */
-    public static final long MAX_SUPPORTED_FILE_SIZE = 2147483648L;
-
-    /**
-     * This listener interface is used by the VideoEditor to emit preview
-     * progress notifications. This callback should be invoked after the number
-     * of frames specified by
-     * {@link #startPreview(SurfaceHolder surfaceHolder, long fromMs,
-     *           int callbackAfterFrameCount, PreviewProgressListener listener)}
-     */
-    public interface PreviewProgressListener {
-        /**
-         * This method notifies the listener of the current time position while
-         * previewing a project.
-         *
-         * @param videoEditor The VideoEditor instance
-         * @param timeMs The current preview position (expressed in milliseconds
-         *        since the beginning of the storyboard timeline).
-         * @param overlayData The overlay data (null if the overlay data
-         *      is unchanged)
-         */
-        public void onProgress(VideoEditor videoEditor, long timeMs,
-                               OverlayData overlayData);
-        /**
-         * This method notifies the listener when the preview is started
-         * previewing a project.
-         *
-         * @param videoEditor The VideoEditor instance
-         */
-        public void onStart(VideoEditor videoEditor);
-
-        /**
-         * This method notifies the listener when the preview is stopped
-         * previewing a project.
-         *
-         * @param videoEditor The VideoEditor instance
-         */
-        public void onStop(VideoEditor videoEditor);
-
-        /**
-         * This method notifies the listener when error has occurred during
-         * previewing a project.
-         *
-         * @param videoEditor The VideoEditor instance
-         * @param error The error that has occurred
-         * FIXME: We should pass well-defined error code to the application;
-         * but for now, we just pass whatever error code reported by the native layer.
-         */
-        public void onError(VideoEditor videoEditor, int error);
-    }
-
-    /**
-     * This listener interface is used by the VideoEditor to emit export status
-     * notifications.
-     * {@link #export(String filename, ExportProgressListener listener,
-     *                int height, int bitrate)}
-     */
-    public interface ExportProgressListener {
-        /**
-         * This method notifies the listener of the progress status of a export
-         * operation.
-         *
-         * @param videoEditor The VideoEditor instance
-         * @param filename The name of the file which is in the process of being
-         *        exported.
-         * @param progress The progress in %. At the beginning of the export,
-         *        this value is set to 0; at the end, the value is set to 100.
-         */
-        public void onProgress(VideoEditor videoEditor, String filename,
-                              int progress);
-    }
-
-    public interface MediaProcessingProgressListener {
-        /**
-         *  Values used for the action parameter
-         */
-        public static final int ACTION_ENCODE = 1;
-        public static final int ACTION_DECODE = 2;
-
-        /**
-         * This method notifies the listener of the progress status of
-         * processing a media object such as a Transition, AudioTrack & Kenburns
-         * This method may be called maximum 100 times for one operation.
-         *
-         * @param object The object that is being processed such as a Transition
-         *               or AudioTrack
-         * @param action The type of processing being performed
-         * @param progress The progress in %. At the beginning of the operation,
-         *          this value is set to 0; at the end, the value is set to 100.
-         */
-        public void onProgress(Object item, int action, int progress);
-    }
-
-    /**
-     * The overlay data
-     */
-    public static final class OverlayData {
-        // Instance variables
-        private Bitmap mOverlayBitmap;
-        private int mRenderingMode;
-        private boolean mClear;
-        private static final Paint sResizePaint = new Paint(Paint.FILTER_BITMAP_FLAG);
-
-        /**
-         * Default constructor
-         */
-        public OverlayData() {
-            mOverlayBitmap = null;
-            mRenderingMode = MediaArtistNativeHelper.MediaRendering.BLACK_BORDERS;
-            mClear = false;
-        }
-
-        /**
-         * Releases the bitmap
-         */
-        public void release() {
-            if (mOverlayBitmap != null) {
-                mOverlayBitmap.recycle();
-                mOverlayBitmap = null;
-            }
-        }
-
-        /**
-         * Check if the overlay needs to be rendered
-         *
-         * @return true if rendering is needed
-         */
-        public boolean needsRendering() {
-            return (mClear || mOverlayBitmap != null);
-        }
-
-        /**
-         * Store the overlay data
-         *
-         * @param overlayBitmap The overlay bitmap
-         * @param renderingMode The rendering mode
-         */
-        void set(Bitmap overlayBitmap, int renderingMode) {
-            mOverlayBitmap = overlayBitmap;
-            mRenderingMode = renderingMode;
-            mClear = false;
-        }
-
-        /**
-         * Clear the overlay
-         */
-        void setClear() {
-            mClear = true;
-        }
-
-        /**
-        * Render the overlay by either clearing it or by
-        * rendering the overlay bitmap with the specified
-        * rendering mode
-        *
-        * @param destBitmap The destination bitmap
-        */
-        public void renderOverlay(Bitmap destBitmap) {
-            if (mClear) {
-                destBitmap.eraseColor(Color.TRANSPARENT);
-            } else if (mOverlayBitmap != null) {
-                final Canvas overlayCanvas = new Canvas(destBitmap);
-                final Rect destRect;
-                final Rect srcRect;
-                switch (mRenderingMode) {
-                    case MediaArtistNativeHelper.MediaRendering.RESIZING: {
-                        destRect = new Rect(0, 0, overlayCanvas.getWidth(),
-                                                 overlayCanvas.getHeight());
-                        srcRect = new Rect(0, 0, mOverlayBitmap.getWidth(),
-                                                 mOverlayBitmap.getHeight());
-                        break;
-                    }
-
-                    case MediaArtistNativeHelper.MediaRendering.BLACK_BORDERS: {
-                        int left, right, top, bottom;
-                        float aROverlayImage, aRCanvas;
-                        aROverlayImage = (float)(mOverlayBitmap.getWidth()) /
-                                         (float)(mOverlayBitmap.getHeight());
-
-                        aRCanvas = (float)(overlayCanvas.getWidth()) /
-                                         (float)(overlayCanvas.getHeight());
-
-                        if (aROverlayImage > aRCanvas) {
-                            int newHeight = ((overlayCanvas.getWidth() * mOverlayBitmap.getHeight())
-                                             / mOverlayBitmap.getWidth());
-                            left = 0;
-                            top  = (overlayCanvas.getHeight() - newHeight) / 2;
-                            right = overlayCanvas.getWidth();
-                            bottom = top + newHeight;
-                        } else {
-                            int newWidth = ((overlayCanvas.getHeight() * mOverlayBitmap.getWidth())
-                                                / mOverlayBitmap.getHeight());
-                            left = (overlayCanvas.getWidth() - newWidth) / 2;
-                            top  = 0;
-                            right = left + newWidth;
-                            bottom = overlayCanvas.getHeight();
-                        }
-
-                        destRect = new Rect(left, top, right, bottom);
-                        srcRect = new Rect(0, 0, mOverlayBitmap.getWidth(), mOverlayBitmap.getHeight());
-                        break;
-                    }
-
-                    case MediaArtistNativeHelper.MediaRendering.CROPPING: {
-                        // Calculate the source rect
-                        int left, right, top, bottom;
-                        float aROverlayImage, aRCanvas;
-                        aROverlayImage = (float)(mOverlayBitmap.getWidth()) /
-                                         (float)(mOverlayBitmap.getHeight());
-                        aRCanvas = (float)(overlayCanvas.getWidth()) /
-                                        (float)(overlayCanvas.getHeight());
-                        if (aROverlayImage < aRCanvas) {
-                            int newHeight = ((mOverlayBitmap.getWidth() * overlayCanvas.getHeight())
-                                       / overlayCanvas.getWidth());
-
-                            left = 0;
-                            top  = (mOverlayBitmap.getHeight() - newHeight) / 2;
-                            right = mOverlayBitmap.getWidth();
-                            bottom = top + newHeight;
-                        } else {
-                            int newWidth = ((mOverlayBitmap.getHeight() * overlayCanvas.getWidth())
-                                        / overlayCanvas.getHeight());
-                            left = (mOverlayBitmap.getWidth() - newWidth) / 2;
-                            top  = 0;
-                            right = left + newWidth;
-                            bottom = mOverlayBitmap.getHeight();
-                        }
-
-                        srcRect = new Rect(left, top, right, bottom);
-                        destRect = new Rect(0, 0, overlayCanvas.getWidth(), overlayCanvas.getHeight());
-                        break;
-                    }
-
-                    default: {
-                        throw new IllegalStateException("Rendering mode: " + mRenderingMode);
-                    }
-                }
-
-                destBitmap.eraseColor(Color.TRANSPARENT);
-                overlayCanvas.drawBitmap(mOverlayBitmap, srcRect, destRect, sResizePaint);
-
-                mOverlayBitmap.recycle();
-            }
-        }
-    }
-
-    /**
-     * @return The path where the VideoEditor stores all files related to the
-     *         project
-     */
-    public String getPath();
-
-    /**
-     * This method releases all in-memory resources used by the VideoEditor
-     * instance. All pending operations such as preview, export and extract
-     * audio waveform must be canceled.
-     */
-    public void release();
-
-    /**
-     * Persist the current internal state of VideoEditor to the project path.
-     * The VideoEditor state may be restored by invoking the
-     * {@link VideoEditorFactory#load(String)} method. This method does not
-     * release the internal in-memory state of the VideoEditor. To release
-     * the in-memory state of the VideoEditor the {@link #release()} method
-     * must be invoked.
-     *
-     * Pending transition generations must be allowed to complete before the
-     * state is saved.
-     * Pending audio waveform generations must be allowed to complete.
-     * Pending export operations must be allowed to continue.
-     *
-     * @throws IOException if the internal state cannot be saved to project file
-     */
-    public void save() throws IOException;
-
-    /**
-     * Create the output movie based on all media items added and the applied
-     * storyboard items. This method can take a long time to execute and is
-     * blocking. The application will receive progress notifications via the
-     * ExportProgressListener. Specific implementations may not support multiple
-     * simultaneous export operations. Note that invoking methods which would
-     * change the contents of the output movie throw an IllegalStateException
-     * while an export operation is pending.
-     *
-     * The audio and video codecs are automatically selected by the underlying
-     * implementation.
-     *
-     * @param filename The output file name (including the full path)
-     * @param height The height of the output video file. The supported values
-     *        for height are described in the MediaProperties class, for
-     *        example: HEIGHT_480. The width will be automatically computed
-     *        according to the aspect ratio provided by
-     *        {@link #setAspectRatio(int)}
-     * @param bitrate The bitrate of the output video file. This is approximate
-     *        value for the output movie. Supported bitrate values are
-     *        described in the MediaProperties class for example: BITRATE_384K
-     * @param listener The listener for progress notifications. Use null if
-     *        export progress notifications are not needed.
-     *
-     * @throws IllegalArgumentException if height or bitrate are not supported
-     *        or if the audio or video codecs are not supported
-     * @throws IOException if output file cannot be created
-     * @throws IllegalStateException if a preview or an export is in progress or
-     *        if no MediaItem has been added
-     * @throws CancellationException if export is canceled by calling
-     *        {@link #cancelExport()}
-     * @throws UnsupportOperationException if multiple simultaneous export() are
-     *        not allowed
-     */
-    public void export(String filename, int height, int bitrate,
-                       ExportProgressListener listener)
-                       throws IOException;
-
-    /**
-     * Create the output movie based on all media items added and the applied
-     * storyboard items. This method can take a long time to execute and is
-     * blocking. The application will receive progress notifications via the
-     * ExportProgressListener. Specific implementations may not support multiple
-     * simultaneous export operations. Note that invoking methods which would
-     * change the contents of the output movie throw an IllegalStateException
-     * while an export operation is pending.
-     *
-     * @param filename The output file name (including the full path)
-     * @param height The height of the output video file. The supported values
-     *        for height are described in the MediaProperties class, for
-     *        example: HEIGHT_480. The width will be automatically computed
-     *        according to the aspect ratio provided by
-     *        {@link #setAspectRatio(int)}
-     * @param bitrate The bitrate of the output video file. This is approximate
-     *        value for the output movie. Supported bitrate values are
-     *        described in the MediaProperties class for example: BITRATE_384K
-     * @param audioCodec The audio codec to be used for the export. The audio
-     *        codec values are defined in the MediaProperties class (e.g.
-     *        ACODEC_AAC_LC). Note that not all audio codec types are
-     *        supported for export purposes.
-     * @param videoCodec The video codec to be used for the export. The video
-     *        codec values are defined in the MediaProperties class (e.g.
-     *        VCODEC_H264). Note that not all video codec types are
-     *        supported for export purposes.
-     * @param listener The listener for progress notifications. Use null if
-     *        export progress notifications are not needed.
-     *
-     * @throws IllegalArgumentException if height or bitrate are not supported
-     *        or if the audio or video codecs are not supported
-     * @throws IOException if output file cannot be created
-     * @throws IllegalStateException if a preview or an export is in progress or
-     *        if no MediaItem has been added
-     * @throws CancellationException if export is cancelled by calling
-     *        {@link #cancelExport()}
-     * @throws UnsupportOperationException if multiple simultaneous export() are
-     *        not allowed
-     */
-    public void export(String filename, int height, int bitrate, int audioCodec,
-                       int videoCodec, ExportProgressListener listener)
-                       throws IOException;
-
-    /**
-     * Cancel the running export operation. This method blocks until the export
-     * is cancelled and the exported file (if any) is deleted. If the export
-     * completed by the time this method is invoked, the export file will be
-     * deleted.
-     *
-     * @param filename The filename which identifies the export operation to be
-     *            canceled.
-     **/
-    public void cancelExport(String filename);
-
-    /**
-     * Add a media item at the end of the storyboard.
-     *
-     * @param mediaItem The media item object to add
-     *
-     * @throws IllegalStateException if a preview or an export is in progress or
-     *        if the media item id is not unique across all the media items
-     *        added.
-     */
-    public void addMediaItem(MediaItem mediaItem);
-
-    /**
-     * Insert a media item after the media item with the specified id.
-     *
-     * @param mediaItem The media item object to insert
-     * @param afterMediaItemId Insert the mediaItem after the media item
-     *        identified by this id. If this parameter is null, the media
-     *        item is inserted at the beginning of the timeline.
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if media item with the specified id does
-     *        not exist (null is a valid value) or if the media item id is
-     *        not unique across all the media items added.
-     */
-    public void insertMediaItem(MediaItem mediaItem, String afterMediaItemId);
-
-    /**
-     * Move a media item after the media item with the specified id.
-     *
-     * Note: The project thumbnail is regenerated if the media item is or
-     * becomes the first media item in the storyboard timeline.
-     *
-     * @param mediaItemId The id of the media item to move
-     * @param afterMediaItemId Move the media item identified by mediaItemId
-     *        after the media item identified by this parameter. If this
-     *        parameter is null, the media item is moved at the beginning of
-     *        the timeline.
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if one of media item ids is invalid
-     *        (null is a valid value)
-     */
-    public void moveMediaItem(String mediaItemId, String afterMediaItemId);
-
-    /**
-     * Remove the media item with the specified id. If there are transitions
-     * before or after this media item, then this/these transition(s) are
-     * removed from the storyboard. If the extraction of the audio waveform is
-     * in progress, the extraction is canceled and the file is deleted.
-     *
-     * Effects and overlays associated with the media item will also be removed.
-     *
-     * Note: The project thumbnail is regenerated if the media item which is
-     * removed is the first media item in the storyboard or if the media item is
-     * the only one in the storyboard. If the media item is the only one in the
-     * storyboard, the project thumbnail will be set to a black frame and the
-     * aspect ratio will revert to the default aspect ratio and this method is
-     * equivalent to removeAllMediaItems() in this case.
-     *
-     * @param mediaItemId The unique id of the media item to be removed
-     *
-     * @return The media item that was removed
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if media item with the specified id does
-     *        not exist
-     */
-    public MediaItem removeMediaItem(String mediaItemId);
-
-    /**
-     * Remove all media items in the storyboard. All effects, overlays and all
-     * transitions are also removed.
-     *
-     * Note: The project thumbnail will be set to a black frame and the aspect
-     * ratio will revert to the default aspect ratio.
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     */
-    public void removeAllMediaItems();
-
-    /**
-     * Get the list of media items in the order in which it they appear in the
-     * storyboard timeline.
-     *
-     * Note that if any media item source files are no longer
-     * accessible, this method will still provide the full list of media items.
-     *
-     * @return The list of media items. If no media item exist an empty list
-     *        will be returned.
-     */
-    public List<MediaItem> getAllMediaItems();
-
-    /**
-     * Find the media item with the specified id
-     *
-     * @param mediaItemId The media item id
-     *
-     * @return The media item with the specified id (null if it does not exist)
-     */
-    public MediaItem getMediaItem(String mediaItemId);
-
-    /**
-     * Add a transition between the media items specified by the transition.
-     * If a transition existed at the same position it is invalidated and then
-     * the transition is replaced. Note that the new transition video clip is
-     * not automatically generated by this method. The
-     * {@link Transition#generate()} method must be invoked to generate
-     * the transition video clip.
-     *
-     * Note that the TransitionAtEnd and TransitionAtStart are special kinds
-     * that can not be applied between two media items.
-     *
-     * A crossfade audio transition will be automatically applied regardless of
-     * the video transition.
-     *
-     * @param transition The transition to apply
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if the transition duration is larger
-     *        than the smallest duration of the two media item files or if
-     *        the two media items specified in the transition are not
-     *        adjacent
-     */
-    public void addTransition(Transition transition);
-
-    /**
-     * Remove the transition with the specified id.
-     *
-     * @param transitionId The id of the transition to be removed
-     *
-     * @return The transition that was removed
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if transition with the specified id does
-     *        not exist
-     */
-    public Transition removeTransition(String transitionId);
-
-    /**
-     * Get the list of transitions
-     *
-     * @return The list of transitions. If no transitions exist an empty list
-     *        will be returned.
-     */
-    public List<Transition> getAllTransitions();
-
-    /**
-     * Find the transition with the specified transition id.
-     *
-     * @param transitionId The transition id
-     *
-     * @return The transition
-     */
-    public Transition getTransition(String transitionId);
-
-    /**
-     * Add the specified AudioTrack to the storyboard. Note: Specific
-     * implementations may support a limited number of audio tracks (e.g. only
-     * one audio track)
-     *
-     * @param audioTrack The AudioTrack to add
-     *
-     * @throws UnsupportedOperationException if the implementation supports a
-     *        limited number of audio tracks.
-     * @throws IllegalArgumentException if media item is not unique across all
-     *        the audio tracks already added.
-     */
-    public void addAudioTrack(AudioTrack audioTrack);
-
-    /**
-     * Insert an audio track after the audio track with the specified id. Use
-     * addAudioTrack to add an audio track at the end of the storyboard
-     * timeline.
-     *
-     * @param audioTrack The audio track object to insert
-     * @param afterAudioTrackId Insert the audio track after the audio track
-     *        identified by this parameter. If this parameter is null the
-     *        audio track is added at the beginning of the timeline.
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if media item with the specified id does
-     *        not exist (null is a valid value). if media item is not unique
-     *        across all the audio tracks already added.
-     * @throws UnsupportedOperationException if the implementation supports a
-     *        limited number of audio tracks
-     */
-    public void insertAudioTrack(AudioTrack audioTrack, String afterAudioTrackId);
-
-    /**
-     * Move an AudioTrack after the AudioTrack with the specified id.
-     *
-     * @param audioTrackId The id of the AudioTrack to move
-     * @param afterAudioTrackId Move the AudioTrack identified by audioTrackId
-     *        after the AudioTrack identified by this parameter. If this
-     *        parameter is null the audio track is added at the beginning of
-     *        the timeline.
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if one of media item ids is invalid
-     *        (null is a valid value)
-     */
-    public void moveAudioTrack(String audioTrackId, String afterAudioTrackId);
-
-    /**
-     * Remove the audio track with the specified id. If the extraction of the
-     * audio waveform is in progress, the extraction is canceled and the file is
-     * deleted.
-     *
-     * @param audioTrackId The id of the audio track to be removed
-     *
-     * @return The audio track that was removed
-     * @throws IllegalStateException if a preview or an export is in progress
-     */
-    public AudioTrack removeAudioTrack(String audioTrackId);
-
-    /**
-     * Get the list of AudioTracks in order in which they appear in the
-     * storyboard.
-     *
-     * Note that if any AudioTrack source files are not accessible anymore,
-     * this method will still provide the full list of audio tracks.
-     *
-     * @return The list of AudioTracks. If no audio tracks exist an empty list
-     *        will be returned.
-     */
-    public List<AudioTrack> getAllAudioTracks();
-
-    /**
-     * Find the AudioTrack with the specified id
-     *
-     * @param audioTrackId The AudioTrack id
-     *
-     * @return The AudioTrack with the specified id (null if it does not exist)
-     */
-    public AudioTrack getAudioTrack(String audioTrackId);
-
-    /**
-     * Set the aspect ratio used in the preview and the export movie.
-     *
-     * The default aspect ratio is ASPECTRATIO_16_9 (16:9).
-     *
-     * @param aspectRatio to apply. If aspectRatio is the same as the current
-     *        aspect ratio, then this function just returns. The supported
-     *        aspect ratio are defined in the MediaProperties class for
-     *        example: ASPECTRATIO_16_9
-     *
-     * @throws IllegalStateException if a preview or an export is in progress
-     * @throws IllegalArgumentException if aspect ratio is not supported
-     */
-    public void setAspectRatio(int aspectRatio);
-
-    /**
-     * Get current aspect ratio.
-     *
-     * @return The aspect ratio as described in MediaProperties
-     */
-    public int getAspectRatio();
-
-    /**
-     * Get the preview (and output movie) duration.
-     *
-     * @return The duration of the preview (and output movie)
-     */
-    public long getDuration();
-
-    /**
-     * Render a frame according to the preview aspect ratio and activating all
-     * storyboard items relative to the specified time.
-     *
-     * @param surfaceHolder SurfaceHolder used by the application
-     * @param timeMs time corresponding to the frame to display
-     * @param overlayData The overlay data
-     *
-     * @return The accurate time stamp of the frame that is rendered.
-     *
-     * @throws IllegalStateException if a preview or an export is already in
-     *        progress
-     * @throws IllegalArgumentException if time is negative or beyond the
-     *        preview duration
-     */
-    public long renderPreviewFrame(SurfaceHolder surfaceHolder, long timeMs,
-            OverlayData overlayData);
-
-    /**
-     * This method must be called after any changes made to the storyboard
-     * and before startPreview is called. Note that this method may block for an
-     * extensive period of time.
-     */
-    public void generatePreview(MediaProcessingProgressListener listener);
-
-    /**
-     * Start the preview of all the storyboard items applied on all MediaItems
-     * This method does not block (does not wait for the preview to complete).
-     * The PreviewProgressListener allows to track the progress at the time
-     * interval determined by the callbackAfterFrameCount parameter. The
-     * SurfaceHolder has to be created and ready for use before calling this
-     * method. The method is a no-op if there are no MediaItems in the
-     * storyboard.
-     *
-     * @param surfaceHolder SurfaceHolder where the preview is rendered.
-     * @param fromMs The time (relative to the timeline) at which the preview
-     *        will start
-     * @param toMs The time (relative to the timeline) at which the preview will
-     *        stop. Use -1 to play to the end of the timeline
-     * @param loop true if the preview should be looped once it reaches the end
-     * @param callbackAfterFrameCount The listener interface should be invoked
-     *        after the number of frames specified by this parameter.
-     * @param listener The listener which will be notified of the preview
-     *        progress
-     *
-     * @throws IllegalArgumentException if fromMs is beyond the preview duration
-     * @throws IllegalStateException if a preview or an export is already in
-     *        progress
-     */
-    public void startPreview(SurfaceHolder surfaceHolder, long fromMs, long toMs,
-                             boolean loop,int callbackAfterFrameCount,
-                             PreviewProgressListener listener);
-
-    /**
-     * Stop the current preview. This method blocks until ongoing preview is
-     * stopped. Ignored if there is no preview running.
-     *
-     * @return The accurate current time when stop is effective expressed in
-     *        milliseconds
-     */
-    public long stopPreview();
-
-    /**
-     * Clears the preview surface
-     *
-     * @param surfaceHolder SurfaceHolder where the preview is rendered
-     * and needs to be cleared.
-     */
-    public void clearSurface(SurfaceHolder surfaceHolder);
-}
diff --git a/media/java/android/media/videoeditor/VideoEditorFactory.java b/media/java/android/media/videoeditor/VideoEditorFactory.java
deleted file mode 100644
index 85c329f..0000000
--- a/media/java/android/media/videoeditor/VideoEditorFactory.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-
-import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
-
-/**
- * The VideoEditorFactory class must be used to instantiate VideoEditor objects
- * by creating a new project {@link #create(String)} or by loading an
- * existing project {@link #load(String)}.
- * {@hide}
- */
-public class VideoEditorFactory {
-    /**
-     * This is the factory method for creating a new VideoEditor instance.
-     *
-     * @param projectPath The path where all VideoEditor internal
-     *            files are stored. When a project is deleted the application is
-     *            responsible for deleting the path and its contents.
-     *
-     * @return The VideoEditor instance
-     *
-     * @throws IOException if path does not exist or if the path can
-     *             not be accessed in read/write mode
-     */
-    public static VideoEditor create(String projectPath) throws IOException {
-        /*
-         *  If the project path does not exist create it
-         */
-        final File dir = new File(projectPath);
-        if (!dir.exists()) {
-            if (!dir.mkdirs()) {
-                throw new FileNotFoundException("Cannot create project path: "
-                                                                 + projectPath);
-            } else {
-                /*
-                 * Create the file which hides the media files
-                 * from the media scanner
-                 */
-                if (!new File(dir, ".nomedia").createNewFile()) {
-                    throw new FileNotFoundException("Cannot create file .nomedia");
-                }
-            }
-        }
-
-        return new VideoEditorImpl(projectPath);
-    }
-
-    /**
-     * This is the factory method for instantiating a VideoEditor from the
-     * internal state previously saved with the
-     * {@link VideoEditor#save(String)} method.
-     *
-     * @param projectPath The path where all VideoEditor internal files
-     *            are stored. When a project is deleted the application is
-     *            responsible for deleting the path and its contents.
-     * @param generatePreview if set to true the
-     *      {@link MediaEditor#generatePreview(MediaProcessingProgressListener
-     *             listener)}
-     *      will be called internally to generate any needed transitions.
-     *
-     * @return The VideoEditor instance
-     *
-     * @throws IOException if path does not exist or if the path can
-     *             not be accessed in read/write mode or if one of the resource
-     *             media files cannot be retrieved
-     */
-    public static VideoEditor load(String projectPath, boolean generatePreview)
-        throws IOException {
-        final VideoEditor videoEditor = new VideoEditorImpl(projectPath);
-        if (generatePreview) {
-            videoEditor.generatePreview(null);
-        }
-        return videoEditor;
-    }
-}
diff --git a/media/java/android/media/videoeditor/VideoEditorImpl.java b/media/java/android/media/videoeditor/VideoEditorImpl.java
deleted file mode 100644
index fbf2eab..0000000
--- a/media/java/android/media/videoeditor/VideoEditorImpl.java
+++ /dev/null
@@ -1,1978 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Semaphore;
-import java.util.concurrent.TimeUnit;
-
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
-
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.MediaMetadataRetriever;
-import android.util.Log;
-import android.util.Xml;
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.os.Debug;
-import android.os.SystemProperties;
-import android.os.Environment;
-
-import libcore.io.IoUtils;
-
-/**
- * The VideoEditor implementation {@hide}
- */
-public class VideoEditorImpl implements VideoEditor {
-    /*
-     *  Logging
-     */
-    private static final String TAG = "VideoEditorImpl";
-
-    /*
-     *  The project filename
-     */
-    private static final String PROJECT_FILENAME = "videoeditor.xml";
-
-    /*
-     *  XML tags
-     */
-    private static final String TAG_PROJECT = "project";
-    private static final String TAG_MEDIA_ITEMS = "media_items";
-    private static final String TAG_MEDIA_ITEM = "media_item";
-    private static final String TAG_TRANSITIONS = "transitions";
-    private static final String TAG_TRANSITION = "transition";
-    private static final String TAG_OVERLAYS = "overlays";
-    private static final String TAG_OVERLAY = "overlay";
-    private static final String TAG_OVERLAY_USER_ATTRIBUTES = "overlay_user_attributes";
-    private static final String TAG_EFFECTS = "effects";
-    private static final String TAG_EFFECT = "effect";
-    private static final String TAG_AUDIO_TRACKS = "audio_tracks";
-    private static final String TAG_AUDIO_TRACK = "audio_track";
-
-    private static final String ATTR_ID = "id";
-    private static final String ATTR_FILENAME = "filename";
-    private static final String ATTR_AUDIO_WAVEFORM_FILENAME = "waveform";
-    private static final String ATTR_RENDERING_MODE = "rendering_mode";
-    private static final String ATTR_ASPECT_RATIO = "aspect_ratio";
-    private static final String ATTR_REGENERATE_PCM = "regeneratePCMFlag";
-    private static final String ATTR_TYPE = "type";
-    private static final String ATTR_DURATION = "duration";
-    private static final String ATTR_START_TIME = "start_time";
-    private static final String ATTR_BEGIN_TIME = "begin_time";
-    private static final String ATTR_END_TIME = "end_time";
-    private static final String ATTR_VOLUME = "volume";
-    private static final String ATTR_BEHAVIOR = "behavior";
-    private static final String ATTR_DIRECTION = "direction";
-    private static final String ATTR_BLENDING = "blending";
-    private static final String ATTR_INVERT = "invert";
-    private static final String ATTR_MASK = "mask";
-    private static final String ATTR_BEFORE_MEDIA_ITEM_ID = "before_media_item";
-    private static final String ATTR_AFTER_MEDIA_ITEM_ID = "after_media_item";
-    private static final String ATTR_COLOR_EFFECT_TYPE = "color_type";
-    private static final String ATTR_COLOR_EFFECT_VALUE = "color_value";
-    private static final String ATTR_START_RECT_LEFT = "start_l";
-    private static final String ATTR_START_RECT_TOP = "start_t";
-    private static final String ATTR_START_RECT_RIGHT = "start_r";
-    private static final String ATTR_START_RECT_BOTTOM = "start_b";
-    private static final String ATTR_END_RECT_LEFT = "end_l";
-    private static final String ATTR_END_RECT_TOP = "end_t";
-    private static final String ATTR_END_RECT_RIGHT = "end_r";
-    private static final String ATTR_END_RECT_BOTTOM = "end_b";
-    private static final String ATTR_LOOP = "loop";
-    private static final String ATTR_MUTED = "muted";
-    private static final String ATTR_DUCK_ENABLED = "ducking_enabled";
-    private static final String ATTR_DUCK_THRESHOLD = "ducking_threshold";
-    private static final String ATTR_DUCKED_TRACK_VOLUME = "ducking_volume";
-    private static final String ATTR_GENERATED_IMAGE_CLIP = "generated_image_clip";
-    private static final String ATTR_IS_IMAGE_CLIP_GENERATED = "is_image_clip_generated";
-    private static final String ATTR_GENERATED_TRANSITION_CLIP = "generated_transition_clip";
-    private static final String ATTR_IS_TRANSITION_GENERATED = "is_transition_generated";
-    private static final String ATTR_OVERLAY_RGB_FILENAME = "overlay_rgb_filename";
-    private static final String ATTR_OVERLAY_FRAME_WIDTH = "overlay_frame_width";
-    private static final String ATTR_OVERLAY_FRAME_HEIGHT = "overlay_frame_height";
-    private static final String ATTR_OVERLAY_RESIZED_RGB_FRAME_WIDTH = "resized_RGBframe_width";
-    private static final String ATTR_OVERLAY_RESIZED_RGB_FRAME_HEIGHT = "resized_RGBframe_height";
-    private static final int ENGINE_ACCESS_MAX_TIMEOUT_MS = 500;
-    /*
-     *  Instance variables
-     */
-    private final Semaphore mLock;
-    private final String mProjectPath;
-    private final List<MediaItem> mMediaItems = new ArrayList<MediaItem>();
-    private final List<AudioTrack> mAudioTracks = new ArrayList<AudioTrack>();
-    private final List<Transition> mTransitions = new ArrayList<Transition>();
-    private long mDurationMs;
-    private int mAspectRatio;
-
-    /*
-     * Private Object for calling native Methods via MediaArtistNativeHelper
-     */
-    private MediaArtistNativeHelper mMANativeHelper;
-    private boolean mPreviewInProgress = false;
-    private final boolean mMallocDebug;
-
-    /**
-     * Constructor
-     *
-     * @param projectPath - The path where the VideoEditor stores all files
-     *        related to the project
-     */
-    public VideoEditorImpl(String projectPath) throws IOException {
-        String s;
-        s = SystemProperties.get("libc.debug.malloc");
-        if (s.equals("1")) {
-            mMallocDebug = true;
-            try {
-                dumpHeap("HeapAtStart");
-            } catch (Exception ex) {
-                Log.e(TAG, "dumpHeap returned error in constructor");
-            }
-        } else {
-            mMallocDebug = false;
-        }
-        mLock = new Semaphore(1, true);
-        mMANativeHelper = new MediaArtistNativeHelper(projectPath, mLock, this);
-        mProjectPath = projectPath;
-        final File projectXml = new File(projectPath, PROJECT_FILENAME);
-        if (projectXml.exists()) {
-            try {
-                load();
-            } catch (Exception ex) {
-                ex.printStackTrace();
-                throw new IOException(ex.toString());
-            }
-        } else {
-            mAspectRatio = MediaProperties.ASPECT_RATIO_16_9;
-            mDurationMs = 0;
-        }
-    }
-
-    /*
-     * @return The MediaArtistNativeHelper object
-     */
-    MediaArtistNativeHelper getNativeContext() {
-        return mMANativeHelper;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void addAudioTrack(AudioTrack audioTrack) {
-        if (audioTrack == null) {
-            throw new IllegalArgumentException("Audio Track is null");
-        }
-
-        if (mAudioTracks.size() == 1) {
-            throw new IllegalArgumentException("No more tracks can be added");
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        /*
-         * Add the audio track to AudioTrack list
-         */
-        mAudioTracks.add(audioTrack);
-
-        /*
-         * Form the audio PCM file path
-         */
-        final String audioTrackPCMFilePath = String.format(mProjectPath + "/"
-                    + "AudioPcm" + audioTrack.getId() + ".pcm");
-
-        /*
-         * Create PCM only if not generated in previous session
-         */
-        if (new File(audioTrackPCMFilePath).exists()) {
-            mMANativeHelper.setAudioflag(false);
-        }
-
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void addMediaItem(MediaItem mediaItem) {
-        /*
-         * Validate Media Item
-         */
-        if (mediaItem == null) {
-            throw new IllegalArgumentException("Media item is null");
-        }
-        /*
-         * Add the Media item to MediaItem list
-         */
-        if (mMediaItems.contains(mediaItem)) {
-            throw new IllegalArgumentException("Media item already exists: " + mediaItem.getId());
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        /*
-         *  Invalidate the end transition if necessary
-         */
-        final int mediaItemsCount = mMediaItems.size();
-        if (mediaItemsCount > 0) {
-            removeTransitionAfter(mediaItemsCount - 1);
-        }
-
-        /*
-         *  Add the new media item
-         */
-        mMediaItems.add(mediaItem);
-
-        computeTimelineDuration();
-
-        /*
-         *  Generate project thumbnail only from first media Item on storyboard
-         */
-        if (mMediaItems.size() == 1) {
-            generateProjectThumbnail();
-        }
-    }
-
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void addTransition(Transition transition) {
-        if (transition == null) {
-            throw new IllegalArgumentException("Null Transition");
-        }
-
-        final MediaItem beforeMediaItem = transition.getBeforeMediaItem();
-        final MediaItem afterMediaItem = transition.getAfterMediaItem();
-        /*
-         * Check if the MediaItems are in sequence
-         */
-        if (mMediaItems == null) {
-            throw new IllegalArgumentException("No media items are added");
-        }
-
-        if ((afterMediaItem != null) &&  (beforeMediaItem != null)) {
-            final int afterMediaItemIndex = mMediaItems.indexOf(afterMediaItem);
-            final int beforeMediaItemIndex = mMediaItems.indexOf(beforeMediaItem);
-
-            if ((afterMediaItemIndex == -1) || (beforeMediaItemIndex == -1)) {
-                throw new IllegalArgumentException
-                    ("Either of the mediaItem is not found in the list");
-            }
-
-            if (afterMediaItemIndex != (beforeMediaItemIndex - 1) ) {
-                throw new IllegalArgumentException("MediaItems are not in sequence");
-            }
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        mTransitions.add(transition);
-        /*
-         *  Cross reference the transitions
-         */
-        if (afterMediaItem != null) {
-            /*
-             *  If a transition already exists at the specified position then
-             *  invalidate it.
-             */
-            if (afterMediaItem.getEndTransition() != null) {
-                afterMediaItem.getEndTransition().invalidate();
-                mTransitions.remove(afterMediaItem.getEndTransition());
-            }
-            afterMediaItem.setEndTransition(transition);
-        }
-
-        if (beforeMediaItem != null) {
-            /*
-             *  If a transition already exists at the specified position then
-             *  invalidate it.
-             */
-            if (beforeMediaItem.getBeginTransition() != null) {
-                beforeMediaItem.getBeginTransition().invalidate();
-                mTransitions.remove(beforeMediaItem.getBeginTransition());
-            }
-            beforeMediaItem.setBeginTransition(transition);
-        }
-
-        computeTimelineDuration();
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void cancelExport(String filename) {
-        if (mMANativeHelper != null && filename != null) {
-            mMANativeHelper.stop(filename);
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void export(String filename, int height, int bitrate,
-                       int audioCodec, int videoCodec,
-                       ExportProgressListener listener)
-                       throws IOException {
-        int audcodec = 0;
-        int vidcodec = 0;
-        if (filename == null) {
-            throw new IllegalArgumentException("export: filename is null");
-        }
-
-        final File tempPathFile = new File(filename);
-        if (tempPathFile == null) {
-            throw new IOException(filename + "can not be created");
-        }
-
-        if (mMediaItems.size() == 0) {
-            throw new IllegalStateException("No MediaItems added");
-        }
-
-        switch (height) {
-            case MediaProperties.HEIGHT_144:
-                break;
-            case MediaProperties.HEIGHT_288:
-                break;
-            case MediaProperties.HEIGHT_360:
-                break;
-            case MediaProperties.HEIGHT_480:
-                break;
-            case MediaProperties.HEIGHT_720:
-                break;
-            case MediaProperties.HEIGHT_1080:
-                break;
-
-            default: {
-                String message = "Unsupported height value " + height;
-                throw new IllegalArgumentException(message);
-            }
-        }
-
-        switch (bitrate) {
-            case MediaProperties.BITRATE_28K:
-                break;
-            case MediaProperties.BITRATE_40K:
-                break;
-            case MediaProperties.BITRATE_64K:
-                break;
-            case MediaProperties.BITRATE_96K:
-                break;
-            case MediaProperties.BITRATE_128K:
-                break;
-            case MediaProperties.BITRATE_192K:
-                break;
-            case MediaProperties.BITRATE_256K:
-                break;
-            case MediaProperties.BITRATE_384K:
-                break;
-            case MediaProperties.BITRATE_512K:
-                break;
-            case MediaProperties.BITRATE_800K:
-                break;
-            case MediaProperties.BITRATE_2M:
-                break;
-            case MediaProperties.BITRATE_5M:
-                break;
-            case MediaProperties.BITRATE_8M:
-                break;
-
-            default: {
-                final String message = "Unsupported bitrate value " + bitrate;
-                throw new IllegalArgumentException(message);
-            }
-        }
-        computeTimelineDuration();
-        final long audioBitrate = MediaArtistNativeHelper.Bitrate.BR_96_KBPS;
-        final long fileSize = (mDurationMs * (bitrate + audioBitrate)) / 8000;
-        if (MAX_SUPPORTED_FILE_SIZE <= fileSize) {
-            throw new IllegalStateException("Export Size is more than 2GB");
-        }
-        switch (audioCodec) {
-            case MediaProperties.ACODEC_AAC_LC:
-                audcodec = MediaArtistNativeHelper.AudioFormat.AAC;
-                break;
-            case MediaProperties.ACODEC_AMRNB:
-                audcodec = MediaArtistNativeHelper.AudioFormat.AMR_NB;
-                break;
-
-            default: {
-                String message = "Unsupported audio codec type " + audioCodec;
-                throw new IllegalArgumentException(message);
-            }
-        }
-
-        switch (videoCodec) {
-            case MediaProperties.VCODEC_H263:
-                vidcodec = MediaArtistNativeHelper.VideoFormat.H263;
-                break;
-            case MediaProperties.VCODEC_H264:
-                vidcodec = MediaArtistNativeHelper.VideoFormat.H264;
-                break;
-            case MediaProperties.VCODEC_MPEG4:
-                vidcodec = MediaArtistNativeHelper.VideoFormat.MPEG4;
-                break;
-
-            default: {
-                String message = "Unsupported video codec type " + videoCodec;
-                throw new IllegalArgumentException(message);
-            }
-        }
-
-        boolean semAcquireDone = false;
-        try {
-            lock();
-            semAcquireDone = true;
-
-            if (mMANativeHelper == null) {
-                throw new IllegalStateException("The video editor is not initialized");
-            }
-            mMANativeHelper.setAudioCodec(audcodec);
-            mMANativeHelper.setVideoCodec(vidcodec);
-            mMANativeHelper.export(filename, mProjectPath, height,bitrate,
-                               mMediaItems, mTransitions, mAudioTracks, listener);
-        } catch (InterruptedException  ex) {
-            Log.e(TAG, "Sem acquire NOT successful in export");
-        } finally {
-            if (semAcquireDone) {
-                unlock();
-            }
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void export(String filename, int height, int bitrate,
-                       ExportProgressListener listener)
-                       throws IOException {
-        int defaultAudiocodec = MediaArtistNativeHelper.AudioFormat.AAC;
-        int defaultVideocodec = MediaArtistNativeHelper.VideoFormat.H264;
-
-        export(filename, height, bitrate, defaultAudiocodec,
-                defaultVideocodec, listener);
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void generatePreview(MediaProcessingProgressListener listener) {
-        boolean semAcquireDone = false;
-        try {
-            lock();
-            semAcquireDone = true;
-
-            if (mMANativeHelper == null) {
-                throw new IllegalStateException("The video editor is not initialized");
-            }
-
-            if ((mMediaItems.size() > 0) || (mAudioTracks.size() > 0)) {
-                mMANativeHelper.previewStoryBoard(mMediaItems, mTransitions, mAudioTracks,
-                        listener);
-            }
-        } catch (InterruptedException  ex) {
-            Log.e(TAG, "Sem acquire NOT successful in previewStoryBoard");
-        } finally {
-            if (semAcquireDone) {
-                unlock();
-            }
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public List<AudioTrack> getAllAudioTracks() {
-        return mAudioTracks;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public List<MediaItem> getAllMediaItems() {
-        return mMediaItems;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public List<Transition> getAllTransitions() {
-        return mTransitions;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public int getAspectRatio() {
-        return mAspectRatio;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public AudioTrack getAudioTrack(String audioTrackId) {
-        for (AudioTrack at : mAudioTracks) {
-            if (at.getId().equals(audioTrackId)) {
-                return at;
-            }
-        }
-        return null;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public long getDuration() {
-        /**
-         *  Since MediaImageItem can change duration we need to compute the
-         *  duration here
-         */
-        computeTimelineDuration();
-        return mDurationMs;
-    }
-
-    /*
-     * Force updates the timeline duration
-     */
-    void updateTimelineDuration() {
-        computeTimelineDuration();
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized MediaItem getMediaItem(String mediaItemId) {
-        for (MediaItem mediaItem : mMediaItems) {
-            if (mediaItem.getId().equals(mediaItemId)) {
-                return mediaItem;
-            }
-        }
-        return null;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public String getPath() {
-        return mProjectPath;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public Transition getTransition(String transitionId) {
-        for (Transition transition : mTransitions) {
-            if (transition.getId().equals(transitionId)) {
-                return transition;
-            }
-        }
-        return null;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void insertAudioTrack(AudioTrack audioTrack,
-                                              String afterAudioTrackId) {
-        if (mAudioTracks.size() == 1) {
-            throw new IllegalArgumentException("No more tracks can be added");
-        }
-
-        if (afterAudioTrackId == null) {
-            mMANativeHelper.setGeneratePreview(true);
-            mAudioTracks.add(0, audioTrack);
-        } else {
-            final int audioTrackCount = mAudioTracks.size();
-            for (int i = 0; i < audioTrackCount; i++) {
-                AudioTrack at = mAudioTracks.get(i);
-                if (at.getId().equals(afterAudioTrackId)) {
-                    mMANativeHelper.setGeneratePreview(true);
-                    mAudioTracks.add(i + 1, audioTrack);
-                    return;
-                }
-            }
-
-            throw new IllegalArgumentException("AudioTrack not found: " + afterAudioTrackId);
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void insertMediaItem(MediaItem mediaItem, String afterMediaItemId) {
-        if (mMediaItems.contains(mediaItem)) {
-            throw new IllegalArgumentException("Media item already exists: " + mediaItem.getId());
-        }
-
-        if (afterMediaItemId == null) {
-            mMANativeHelper.setGeneratePreview(true);
-            if (mMediaItems.size() > 0) {
-                /**
-                 *  Invalidate the transition at the beginning of the timeline
-                 */
-                removeTransitionBefore(0);
-            }
-
-            mMediaItems.add(0, mediaItem);
-            computeTimelineDuration();
-            generateProjectThumbnail();
-        } else {
-            final int mediaItemCount = mMediaItems.size();
-            for (int i = 0; i < mediaItemCount; i++) {
-                final MediaItem mi = mMediaItems.get(i);
-                if (mi.getId().equals(afterMediaItemId)) {
-                    mMANativeHelper.setGeneratePreview(true);
-                    /**
-                     *  Invalidate the transition at this position
-                     */
-                    removeTransitionAfter(i);
-                    /**
-                     *  Insert the new media item
-                     */
-                    mMediaItems.add(i + 1, mediaItem);
-                    computeTimelineDuration();
-                    return;
-                }
-            }
-
-            throw new IllegalArgumentException("MediaItem not found: " + afterMediaItemId);
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void moveAudioTrack(String audioTrackId, String afterAudioTrackId) {
-        throw new IllegalStateException("Not supported");
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void moveMediaItem(String mediaItemId, String afterMediaItemId) {
-        final MediaItem moveMediaItem = removeMediaItem(mediaItemId,true);
-        if (moveMediaItem == null) {
-            throw new IllegalArgumentException("Target MediaItem not found: " + mediaItemId);
-        }
-
-        if (afterMediaItemId == null) {
-            if (mMediaItems.size() > 0) {
-                mMANativeHelper.setGeneratePreview(true);
-
-                /**
-                 *  Invalidate adjacent transitions at the insertion point
-                 */
-                removeTransitionBefore(0);
-
-                /**
-                 *  Insert the media item at the new position
-                 */
-                mMediaItems.add(0, moveMediaItem);
-                computeTimelineDuration();
-
-                generateProjectThumbnail();
-            } else {
-                throw new IllegalStateException("Cannot move media item (it is the only item)");
-            }
-        } else {
-            final int mediaItemCount = mMediaItems.size();
-            for (int i = 0; i < mediaItemCount; i++) {
-                final MediaItem mi = mMediaItems.get(i);
-                if (mi.getId().equals(afterMediaItemId)) {
-                    mMANativeHelper.setGeneratePreview(true);
-                    /**
-                     *  Invalidate adjacent transitions at the insertion point
-                     */
-                    removeTransitionAfter(i);
-                    /**
-                     *  Insert the media item at the new position
-                     */
-                    mMediaItems.add(i + 1, moveMediaItem);
-                    computeTimelineDuration();
-                    return;
-                }
-            }
-
-            throw new IllegalArgumentException("MediaItem not found: " + afterMediaItemId);
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void release() {
-        stopPreview();
-
-        boolean semAcquireDone = false;
-        try {
-            lock();
-            semAcquireDone = true;
-
-            if (mMANativeHelper != null) {
-                mMediaItems.clear();
-                mAudioTracks.clear();
-                mTransitions.clear();
-                mMANativeHelper.releaseNativeHelper();
-                mMANativeHelper = null;
-            }
-        } catch (Exception  ex) {
-            Log.e(TAG, "Sem acquire NOT successful in export", ex);
-        } finally {
-            if (semAcquireDone) {
-                unlock();
-            }
-        }
-        if (mMallocDebug) {
-            try {
-                dumpHeap("HeapAtEnd");
-            } catch (Exception ex) {
-                Log.e(TAG, "dumpHeap returned error in release");
-            }
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized void removeAllMediaItems() {
-        mMANativeHelper.setGeneratePreview(true);
-
-        mMediaItems.clear();
-
-        /**
-         *  Invalidate all transitions
-         */
-        for (Transition transition : mTransitions) {
-            transition.invalidate();
-        }
-        mTransitions.clear();
-
-        mDurationMs = 0;
-        /**
-         * If a thumbnail already exists, then delete it
-         */
-        if ((new File(mProjectPath + "/" + THUMBNAIL_FILENAME)).exists()) {
-            (new File(mProjectPath + "/" + THUMBNAIL_FILENAME)).delete();
-        }
-
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized AudioTrack removeAudioTrack(String audioTrackId) {
-        final AudioTrack audioTrack = getAudioTrack(audioTrackId);
-        if (audioTrack != null) {
-            mMANativeHelper.setGeneratePreview(true);
-            mAudioTracks.remove(audioTrack);
-            audioTrack.invalidate();
-            mMANativeHelper.invalidatePcmFile();
-            mMANativeHelper.setAudioflag(true);
-        } else {
-            throw new IllegalArgumentException(" No more audio tracks");
-        }
-        return audioTrack;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized MediaItem removeMediaItem(String mediaItemId) {
-        final String firstItemString = mMediaItems.get(0).getId();
-        final MediaItem mediaItem = getMediaItem(mediaItemId);
-        if (mediaItem != null) {
-            mMANativeHelper.setGeneratePreview(true);
-            /**
-             *  Remove the media item
-             */
-            mMediaItems.remove(mediaItem);
-            if (mediaItem instanceof MediaImageItem) {
-                ((MediaImageItem)mediaItem).invalidate();
-            }
-            final List<Overlay> overlays = mediaItem.getAllOverlays();
-            if (overlays.size() > 0) {
-                for (Overlay overlay : overlays) {
-                    if (overlay instanceof OverlayFrame) {
-                        final OverlayFrame overlayFrame = (OverlayFrame)overlay;
-                        overlayFrame.invalidate();
-                    }
-                }
-            }
-
-            /**
-             *  Remove the adjacent transitions
-             */
-            removeAdjacentTransitions(mediaItem);
-            computeTimelineDuration();
-        }
-
-        /**
-         * If string equals first mediaItem, then
-         * generate Project thumbnail
-         */
-        if (firstItemString.equals(mediaItemId)) {
-            generateProjectThumbnail();
-        }
-
-        if (mediaItem instanceof MediaVideoItem) {
-            /**
-             * Delete the graph file
-             */
-            ((MediaVideoItem)mediaItem).invalidate();
-        }
-        return mediaItem;
-    }
-
-    private synchronized MediaItem removeMediaItem(String mediaItemId, boolean flag) {
-        final String firstItemString = mMediaItems.get(0).getId();
-
-        final MediaItem mediaItem = getMediaItem(mediaItemId);
-        if (mediaItem != null) {
-            mMANativeHelper.setGeneratePreview(true);
-            /**
-             *  Remove the media item
-             */
-            mMediaItems.remove(mediaItem);
-            /**
-             *  Remove the adjacent transitions
-             */
-            removeAdjacentTransitions(mediaItem);
-            computeTimelineDuration();
-        }
-
-        /**
-         * If string equals first mediaItem, then
-         * generate Project thumbail
-         */
-        if (firstItemString.equals(mediaItemId)) {
-            generateProjectThumbnail();
-        }
-        return mediaItem;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public synchronized Transition removeTransition(String transitionId) {
-        final Transition transition = getTransition(transitionId);
-        if (transition == null) {
-            throw new IllegalStateException("Transition not found: " + transitionId);
-        }
-
-        mMANativeHelper.setGeneratePreview(true);
-
-        /**
-         *  Remove the transition references
-         */
-        final MediaItem afterMediaItem = transition.getAfterMediaItem();
-        if (afterMediaItem != null) {
-            afterMediaItem.setEndTransition(null);
-        }
-
-        final MediaItem beforeMediaItem = transition.getBeforeMediaItem();
-        if (beforeMediaItem != null) {
-            beforeMediaItem.setBeginTransition(null);
-        }
-
-        mTransitions.remove(transition);
-        transition.invalidate();
-        computeTimelineDuration();
-        return transition;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public long renderPreviewFrame(SurfaceHolder surfaceHolder, long timeMs,
-                                    OverlayData overlayData) {
-        if (surfaceHolder == null) {
-            throw new IllegalArgumentException("Surface Holder is null");
-        }
-
-        final Surface surface = surfaceHolder.getSurface();
-        if (surface == null) {
-            throw new IllegalArgumentException("Surface could not be retrieved from Surface holder");
-        }
-
-        if (surface.isValid() == false) {
-            throw new IllegalStateException("Surface is not valid");
-        }
-
-        if (timeMs < 0) {
-            throw new IllegalArgumentException("requested time not correct");
-        } else if (timeMs > mDurationMs) {
-            throw new IllegalArgumentException("requested time more than duration");
-        }
-        long result = 0;
-
-        boolean semAcquireDone = false;
-        try {
-            semAcquireDone = lock(ENGINE_ACCESS_MAX_TIMEOUT_MS);
-            if (semAcquireDone == false) {
-                throw new IllegalStateException("Timeout waiting for semaphore");
-            }
-
-            if (mMANativeHelper == null) {
-                throw new IllegalStateException("The video editor is not initialized");
-            }
-
-            if (mMediaItems.size() > 0) {
-                final Rect frame = surfaceHolder.getSurfaceFrame();
-                result = mMANativeHelper.renderPreviewFrame(surface,
-                        timeMs, frame.width(), frame.height(), overlayData);
-            } else {
-                result = 0;
-            }
-        } catch (InterruptedException ex) {
-            Log.w(TAG, "The thread was interrupted", new Throwable());
-            throw new IllegalStateException("The thread was interrupted");
-        } finally {
-            if (semAcquireDone) {
-                unlock();
-            }
-        }
-        return result;
-    }
-
-    /**
-     *  the project form XML
-     */
-    private void load() throws FileNotFoundException, XmlPullParserException, IOException {
-        final File file = new File(mProjectPath, PROJECT_FILENAME);
-        /**
-         *  Load the metadata
-         */
-        final FileInputStream fis = new FileInputStream(file);
-        try {
-            final List<String> ignoredMediaItems = new ArrayList<String>();
-
-            final XmlPullParser parser = Xml.newPullParser();
-            parser.setInput(fis, "UTF-8");
-            int eventType = parser.getEventType();
-            String name;
-            MediaItem currentMediaItem = null;
-            Overlay currentOverlay = null;
-            boolean regenerateProjectThumbnail = false;
-            while (eventType != XmlPullParser.END_DOCUMENT) {
-                switch (eventType) {
-                    case XmlPullParser.START_TAG: {
-                        name = parser.getName();
-                        if (TAG_PROJECT.equals(name)) {
-                            mAspectRatio = Integer.parseInt(parser.getAttributeValue("",
-                                   ATTR_ASPECT_RATIO));
-
-                            final boolean mRegenPCM =
-                                Boolean.parseBoolean(parser.getAttributeValue("",
-                                    ATTR_REGENERATE_PCM));
-                            mMANativeHelper.setAudioflag(mRegenPCM);
-                        } else if (TAG_MEDIA_ITEM.equals(name)) {
-                            final String mediaItemId = parser.getAttributeValue("", ATTR_ID);
-                            try {
-                                currentMediaItem = parseMediaItem(parser);
-                                mMediaItems.add(currentMediaItem);
-                            } catch (Exception ex) {
-                                Log.w(TAG, "Cannot load media item: " + mediaItemId, ex);
-                                currentMediaItem = null;
-
-                                // First media item is invalid, mark for project thumbnail removal
-                                if (mMediaItems.size() == 0) {
-                                    regenerateProjectThumbnail = true;
-                                }
-                                // Ignore the media item
-                                ignoredMediaItems.add(mediaItemId);
-                            }
-                        } else if (TAG_TRANSITION.equals(name)) {
-                            try {
-                                final Transition transition = parseTransition(parser,
-                                        ignoredMediaItems);
-                                // The transition will be null if the bounding
-                                // media items are ignored
-                                if (transition != null) {
-                                    mTransitions.add(transition);
-                                }
-                            } catch (Exception ex) {
-                                Log.w(TAG, "Cannot load transition", ex);
-                            }
-                        } else if (TAG_OVERLAY.equals(name)) {
-                            if (currentMediaItem != null) {
-                                try {
-                                    currentOverlay = parseOverlay(parser, currentMediaItem);
-                                    currentMediaItem.addOverlay(currentOverlay);
-                                } catch (Exception ex) {
-                                    Log.w(TAG, "Cannot load overlay", ex);
-                                }
-                            }
-                        } else if (TAG_OVERLAY_USER_ATTRIBUTES.equals(name)) {
-                            if (currentOverlay != null) {
-                                final int attributesCount = parser.getAttributeCount();
-                                for (int i = 0; i < attributesCount; i++) {
-                                    currentOverlay.setUserAttribute(parser.getAttributeName(i),
-                                            parser.getAttributeValue(i));
-                                }
-                            }
-                        } else if (TAG_EFFECT.equals(name)) {
-                            if (currentMediaItem != null) {
-                                try {
-                                    final Effect effect = parseEffect(parser, currentMediaItem);
-                                    currentMediaItem.addEffect(effect);
-
-                                    if (effect instanceof EffectKenBurns) {
-                                        final boolean isImageClipGenerated =
-                                               Boolean.parseBoolean(parser.getAttributeValue("",
-                                                                  ATTR_IS_IMAGE_CLIP_GENERATED));
-                                        if(isImageClipGenerated) {
-                                            final String filename = parser.getAttributeValue("",
-                                                                  ATTR_GENERATED_IMAGE_CLIP);
-                                            if (new File(filename).exists() == true) {
-                                                ((MediaImageItem)currentMediaItem).
-                                                            setGeneratedImageClip(filename);
-                                                ((MediaImageItem)currentMediaItem).
-                                                             setRegenerateClip(false);
-                                             } else {
-                                               ((MediaImageItem)currentMediaItem).
-                                                             setGeneratedImageClip(null);
-                                               ((MediaImageItem)currentMediaItem).
-                                                             setRegenerateClip(true);
-                                             }
-                                        } else {
-                                            ((MediaImageItem)currentMediaItem).
-                                                             setGeneratedImageClip(null);
-                                            ((MediaImageItem)currentMediaItem).
-                                                            setRegenerateClip(true);
-                                        }
-                                    }
-                                } catch (Exception ex) {
-                                    Log.w(TAG, "Cannot load effect", ex);
-                                }
-                            }
-                        } else if (TAG_AUDIO_TRACK.equals(name)) {
-                            try {
-                                final AudioTrack audioTrack = parseAudioTrack(parser);
-                                addAudioTrack(audioTrack);
-                            } catch (Exception ex) {
-                                Log.w(TAG, "Cannot load audio track", ex);
-                            }
-                        }
-                        break;
-                    }
-
-                    case XmlPullParser.END_TAG: {
-                        name = parser.getName();
-                        if (TAG_MEDIA_ITEM.equals(name)) {
-                            currentMediaItem = null;
-                        } else if (TAG_OVERLAY.equals(name)) {
-                            currentOverlay = null;
-                        }
-                        break;
-                    }
-
-                    default: {
-                        break;
-                    }
-                }
-                eventType = parser.next();
-            }
-            computeTimelineDuration();
-            // Regenerate project thumbnail
-            if (regenerateProjectThumbnail) {
-                generateProjectThumbnail();
-                regenerateProjectThumbnail = false;
-            }
-        } finally {
-            if (fis != null) {
-                fis.close();
-            }
-        }
-    }
-
-    /**
-     * Parse the media item
-     *
-     * @param parser The parser
-     * @return The media item
-     */
-    private MediaItem parseMediaItem(XmlPullParser parser) throws IOException {
-        final String mediaItemId = parser.getAttributeValue("", ATTR_ID);
-        final String type = parser.getAttributeValue("", ATTR_TYPE);
-        final String filename = parser.getAttributeValue("", ATTR_FILENAME);
-        final int renderingMode = Integer.parseInt(parser.getAttributeValue("",
-                ATTR_RENDERING_MODE));
-
-        final MediaItem currentMediaItem;
-        if (MediaImageItem.class.getSimpleName().equals(type)) {
-            final long durationMs = Long.parseLong(parser.getAttributeValue("", ATTR_DURATION));
-            currentMediaItem = new MediaImageItem(this, mediaItemId, filename,
-                    durationMs, renderingMode);
-        } else if (MediaVideoItem.class.getSimpleName().equals(type)) {
-            final long beginMs = Long.parseLong(parser.getAttributeValue("", ATTR_BEGIN_TIME));
-            final long endMs = Long.parseLong(parser.getAttributeValue("", ATTR_END_TIME));
-            final int volume = Integer.parseInt(parser.getAttributeValue("", ATTR_VOLUME));
-            final boolean muted = Boolean.parseBoolean(parser.getAttributeValue("", ATTR_MUTED));
-            final String audioWaveformFilename = parser.getAttributeValue("",
-                    ATTR_AUDIO_WAVEFORM_FILENAME);
-            currentMediaItem = new MediaVideoItem(this, mediaItemId, filename,
-                    renderingMode, beginMs, endMs, volume, muted, audioWaveformFilename);
-
-            final long beginTimeMs = Long.parseLong(parser.getAttributeValue("", ATTR_BEGIN_TIME));
-            final long endTimeMs = Long.parseLong(parser.getAttributeValue("", ATTR_END_TIME));
-            ((MediaVideoItem)currentMediaItem).setExtractBoundaries(beginTimeMs, endTimeMs);
-
-            final int volumePercent = Integer.parseInt(parser.getAttributeValue("", ATTR_VOLUME));
-            ((MediaVideoItem)currentMediaItem).setVolume(volumePercent);
-        } else {
-            throw new IllegalArgumentException("Unknown media item type: " + type);
-        }
-
-        return currentMediaItem;
-    }
-
-    /**
-     * Parse the transition
-     *
-     * @param parser The parser
-     * @param ignoredMediaItems The list of ignored media items
-     *
-     * @return The transition
-     */
-    private Transition parseTransition(XmlPullParser parser, List<String> ignoredMediaItems) {
-        final String transitionId = parser.getAttributeValue("", ATTR_ID);
-        final String type = parser.getAttributeValue("", ATTR_TYPE);
-        final long durationMs = Long.parseLong(parser.getAttributeValue("", ATTR_DURATION));
-        final int behavior = Integer.parseInt(parser.getAttributeValue("", ATTR_BEHAVIOR));
-
-        final String beforeMediaItemId = parser.getAttributeValue("", ATTR_BEFORE_MEDIA_ITEM_ID);
-        final MediaItem beforeMediaItem;
-        if (beforeMediaItemId != null) {
-            if (ignoredMediaItems.contains(beforeMediaItemId)) {
-                // This transition is ignored
-                return null;
-            }
-
-            beforeMediaItem = getMediaItem(beforeMediaItemId);
-        } else {
-            beforeMediaItem = null;
-        }
-
-        final String afterMediaItemId = parser.getAttributeValue("", ATTR_AFTER_MEDIA_ITEM_ID);
-        final MediaItem afterMediaItem;
-        if (afterMediaItemId != null) {
-            if (ignoredMediaItems.contains(afterMediaItemId)) {
-                // This transition is ignored
-                return null;
-            }
-
-            afterMediaItem = getMediaItem(afterMediaItemId);
-        } else {
-            afterMediaItem = null;
-        }
-
-        final Transition transition;
-        if (TransitionAlpha.class.getSimpleName().equals(type)) {
-            final int blending = Integer.parseInt(parser.getAttributeValue("", ATTR_BLENDING));
-            final String maskFilename = parser.getAttributeValue("", ATTR_MASK);
-            final boolean invert = Boolean.getBoolean(parser.getAttributeValue("", ATTR_INVERT));
-            transition = new TransitionAlpha(transitionId, afterMediaItem, beforeMediaItem,
-                    durationMs, behavior, maskFilename, blending, invert);
-        } else if (TransitionCrossfade.class.getSimpleName().equals(type)) {
-            transition = new TransitionCrossfade(transitionId, afterMediaItem, beforeMediaItem,
-                    durationMs, behavior);
-        } else if (TransitionSliding.class.getSimpleName().equals(type)) {
-            final int direction = Integer.parseInt(parser.getAttributeValue("", ATTR_DIRECTION));
-            transition = new TransitionSliding(transitionId, afterMediaItem, beforeMediaItem,
-                    durationMs, behavior, direction);
-        } else if (TransitionFadeBlack.class.getSimpleName().equals(type)) {
-            transition = new TransitionFadeBlack(transitionId, afterMediaItem, beforeMediaItem,
-                    durationMs, behavior);
-        } else {
-            throw new IllegalArgumentException("Invalid transition type: " + type);
-        }
-
-        final boolean isTransitionGenerated = Boolean.parseBoolean(parser.getAttributeValue("",
-                                                 ATTR_IS_TRANSITION_GENERATED));
-        if (isTransitionGenerated == true) {
-            final String transitionFile = parser.getAttributeValue("",
-                                                ATTR_GENERATED_TRANSITION_CLIP);
-
-            if (new File(transitionFile).exists()) {
-                transition.setFilename(transitionFile);
-            } else {
-                transition.setFilename(null);
-            }
-        }
-
-        // Use the transition
-        if (beforeMediaItem != null) {
-            beforeMediaItem.setBeginTransition(transition);
-        }
-
-        if (afterMediaItem != null) {
-            afterMediaItem.setEndTransition(transition);
-        }
-
-        return transition;
-    }
-
-    /**
-     * Parse the overlay
-     *
-     * @param parser The parser
-     * @param mediaItem The media item owner
-     *
-     * @return The overlay
-     */
-    private Overlay parseOverlay(XmlPullParser parser, MediaItem mediaItem) {
-        final String overlayId = parser.getAttributeValue("", ATTR_ID);
-        final String type = parser.getAttributeValue("", ATTR_TYPE);
-        final long durationMs = Long.parseLong(parser.getAttributeValue("", ATTR_DURATION));
-        final long startTimeMs = Long.parseLong(parser.getAttributeValue("", ATTR_BEGIN_TIME));
-
-        final Overlay overlay;
-        if (OverlayFrame.class.getSimpleName().equals(type)) {
-            final String filename = parser.getAttributeValue("", ATTR_FILENAME);
-            overlay = new OverlayFrame(mediaItem, overlayId, filename, startTimeMs, durationMs);
-        } else {
-            throw new IllegalArgumentException("Invalid overlay type: " + type);
-        }
-
-        final String overlayRgbFileName = parser.getAttributeValue("", ATTR_OVERLAY_RGB_FILENAME);
-        if (overlayRgbFileName != null) {
-            ((OverlayFrame)overlay).setFilename(overlayRgbFileName);
-
-            final int overlayFrameWidth = Integer.parseInt(parser.getAttributeValue("",
-                                   ATTR_OVERLAY_FRAME_WIDTH));
-            final int overlayFrameHeight = Integer.parseInt(parser.getAttributeValue("",
-                                   ATTR_OVERLAY_FRAME_HEIGHT));
-
-            ((OverlayFrame)overlay).setOverlayFrameWidth(overlayFrameWidth);
-            ((OverlayFrame)overlay).setOverlayFrameHeight(overlayFrameHeight);
-
-            final int resizedRGBFrameWidth = Integer.parseInt(parser.getAttributeValue("",
-                                   ATTR_OVERLAY_RESIZED_RGB_FRAME_WIDTH));
-            final int resizedRGBFrameHeight = Integer.parseInt(parser.getAttributeValue("",
-                                   ATTR_OVERLAY_RESIZED_RGB_FRAME_HEIGHT));
-
-            ((OverlayFrame)overlay).setResizedRGBSize(resizedRGBFrameWidth, resizedRGBFrameHeight);
-        }
-
-        return overlay;
-    }
-
-    /**
-     * Parse the effect
-     *
-     * @param parser The parser
-     * @param mediaItem The media item owner
-     *
-     * @return The effect
-     */
-    private Effect parseEffect(XmlPullParser parser, MediaItem mediaItem) {
-        final String effectId = parser.getAttributeValue("", ATTR_ID);
-        final String type = parser.getAttributeValue("", ATTR_TYPE);
-        final long durationMs = Long.parseLong(parser.getAttributeValue("", ATTR_DURATION));
-        final long startTimeMs = Long.parseLong(parser.getAttributeValue("", ATTR_BEGIN_TIME));
-
-        final Effect effect;
-        if (EffectColor.class.getSimpleName().equals(type)) {
-            final int colorEffectType = Integer.parseInt(parser.getAttributeValue("",
-                                                       ATTR_COLOR_EFFECT_TYPE));
-            final int color;
-            if (colorEffectType == EffectColor.TYPE_COLOR
-                    || colorEffectType == EffectColor.TYPE_GRADIENT) {
-                color = Integer.parseInt(parser.getAttributeValue("", ATTR_COLOR_EFFECT_VALUE));
-            } else {
-                color = 0;
-            }
-            effect = new EffectColor(mediaItem, effectId, startTimeMs,
-                    durationMs, colorEffectType, color);
-        } else if (EffectKenBurns.class.getSimpleName().equals(type)) {
-            final Rect startRect = new Rect(
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_START_RECT_LEFT)),
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_START_RECT_TOP)),
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_START_RECT_RIGHT)),
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_START_RECT_BOTTOM)));
-            final Rect endRect = new Rect(
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_END_RECT_LEFT)),
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_END_RECT_TOP)),
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_END_RECT_RIGHT)),
-                    Integer.parseInt(parser.getAttributeValue("", ATTR_END_RECT_BOTTOM)));
-            effect = new EffectKenBurns(mediaItem, effectId, startRect, endRect,
-                                        startTimeMs, durationMs);
-        } else {
-            throw new IllegalArgumentException("Invalid effect type: " + type);
-        }
-
-        return effect;
-    }
-
-    /**
-     * Parse the audio track
-     *
-     * @param parser The parser
-     *
-     * @return The audio track
-     */
-    private AudioTrack parseAudioTrack(XmlPullParser parser) throws IOException {
-        final String audioTrackId = parser.getAttributeValue("", ATTR_ID);
-        final String filename = parser.getAttributeValue("", ATTR_FILENAME);
-        final long startTimeMs = Long.parseLong(parser.getAttributeValue("", ATTR_START_TIME));
-        final long beginMs = Long.parseLong(parser.getAttributeValue("", ATTR_BEGIN_TIME));
-        final long endMs = Long.parseLong(parser.getAttributeValue("", ATTR_END_TIME));
-        final int volume = Integer.parseInt(parser.getAttributeValue("", ATTR_VOLUME));
-        final boolean muted = Boolean.parseBoolean(parser.getAttributeValue("", ATTR_MUTED));
-        final boolean loop = Boolean.parseBoolean(parser.getAttributeValue("", ATTR_LOOP));
-        final boolean duckingEnabled = Boolean.parseBoolean(
-                parser.getAttributeValue("", ATTR_DUCK_ENABLED));
-        final int duckThreshold = Integer.parseInt(
-                parser.getAttributeValue("", ATTR_DUCK_THRESHOLD));
-        final int duckedTrackVolume = Integer.parseInt(parser.getAttributeValue("",
-                                                     ATTR_DUCKED_TRACK_VOLUME));
-
-        final String waveformFilename = parser.getAttributeValue("", ATTR_AUDIO_WAVEFORM_FILENAME);
-        final AudioTrack audioTrack = new AudioTrack(this, audioTrackId,
-                                                     filename, startTimeMs,
-                                                     beginMs, endMs, loop,
-                                                     volume, muted,
-                                                     duckingEnabled,
-                                                     duckThreshold,
-                                                     duckedTrackVolume,
-                                                     waveformFilename);
-
-        return audioTrack;
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void save() throws IOException {
-        final XmlSerializer serializer = Xml.newSerializer();
-        final StringWriter writer = new StringWriter();
-        serializer.setOutput(writer);
-        serializer.startDocument("UTF-8", true);
-        serializer.startTag("", TAG_PROJECT);
-        serializer.attribute("",
-                             ATTR_ASPECT_RATIO, Integer.toString(mAspectRatio));
-
-        serializer.attribute("", ATTR_REGENERATE_PCM,
-                        Boolean.toString(mMANativeHelper.getAudioflag()));
-
-        serializer.startTag("", TAG_MEDIA_ITEMS);
-        for (MediaItem mediaItem : mMediaItems) {
-            serializer.startTag("", TAG_MEDIA_ITEM);
-            serializer.attribute("", ATTR_ID, mediaItem.getId());
-            serializer.attribute("", ATTR_TYPE,
-                                          mediaItem.getClass().getSimpleName());
-            serializer.attribute("", ATTR_FILENAME, mediaItem.getFilename());
-            serializer.attribute("", ATTR_RENDERING_MODE, Integer.toString(
-                    mediaItem.getRenderingMode()));
-            if (mediaItem instanceof MediaVideoItem) {
-                final MediaVideoItem mvi = (MediaVideoItem)mediaItem;
-                serializer
-                .attribute("", ATTR_BEGIN_TIME,
-                                     Long.toString(mvi.getBoundaryBeginTime()));
-                serializer.attribute("", ATTR_END_TIME,
-                                       Long.toString(mvi.getBoundaryEndTime()));
-                serializer.attribute("", ATTR_VOLUME,
-                                             Integer.toString(mvi.getVolume()));
-                serializer.attribute("", ATTR_MUTED,
-                                               Boolean.toString(mvi.isMuted()));
-                if (mvi.getAudioWaveformFilename() != null) {
-                    serializer.attribute("", ATTR_AUDIO_WAVEFORM_FILENAME,
-                            mvi.getAudioWaveformFilename());
-                }
-            } else if (mediaItem instanceof MediaImageItem) {
-                serializer.attribute("", ATTR_DURATION,
-                        Long.toString(mediaItem.getTimelineDuration()));
-            }
-
-            final List<Overlay> overlays = mediaItem.getAllOverlays();
-            if (overlays.size() > 0) {
-                serializer.startTag("", TAG_OVERLAYS);
-                for (Overlay overlay : overlays) {
-                    serializer.startTag("", TAG_OVERLAY);
-                    serializer.attribute("", ATTR_ID, overlay.getId());
-                    serializer.attribute("",
-                                 ATTR_TYPE, overlay.getClass().getSimpleName());
-                    serializer.attribute("", ATTR_BEGIN_TIME,
-                                         Long.toString(overlay.getStartTime()));
-                    serializer.attribute("", ATTR_DURATION,
-                                          Long.toString(overlay.getDuration()));
-                    if (overlay instanceof OverlayFrame) {
-                        final OverlayFrame overlayFrame = (OverlayFrame)overlay;
-                        overlayFrame.save(getPath());
-                        if (overlayFrame.getBitmapImageFileName() != null) {
-                            serializer.attribute("", ATTR_FILENAME,
-                                         overlayFrame.getBitmapImageFileName());
-                        }
-
-                        if (overlayFrame.getFilename() != null) {
-                            serializer.attribute("",
-                                                 ATTR_OVERLAY_RGB_FILENAME,
-                                                 overlayFrame.getFilename());
-                            serializer.attribute("", ATTR_OVERLAY_FRAME_WIDTH,
-                                                 Integer.toString(overlayFrame.getOverlayFrameWidth()));
-                            serializer.attribute("", ATTR_OVERLAY_FRAME_HEIGHT,
-                                                 Integer.toString(overlayFrame.getOverlayFrameHeight()));
-                            serializer.attribute("", ATTR_OVERLAY_RESIZED_RGB_FRAME_WIDTH,
-                                                 Integer.toString(overlayFrame.getResizedRGBSizeWidth()));
-                            serializer.attribute("", ATTR_OVERLAY_RESIZED_RGB_FRAME_HEIGHT,
-                                                 Integer.toString(overlayFrame.getResizedRGBSizeHeight()));
-
-                        }
-
-                    }
-
-                    /**
-                     *  Save the user attributes
-                     */
-                    serializer.startTag("", TAG_OVERLAY_USER_ATTRIBUTES);
-                    final Map<String, String> userAttributes = overlay.getUserAttributes();
-                    for (String name : userAttributes.keySet()) {
-                        final String value = userAttributes.get(name);
-                        if (value != null) {
-                            serializer.attribute("", name, value);
-                        }
-                    }
-                    serializer.endTag("", TAG_OVERLAY_USER_ATTRIBUTES);
-
-                    serializer.endTag("", TAG_OVERLAY);
-                }
-                serializer.endTag("", TAG_OVERLAYS);
-            }
-
-            final List<Effect> effects = mediaItem.getAllEffects();
-            if (effects.size() > 0) {
-                serializer.startTag("", TAG_EFFECTS);
-                for (Effect effect : effects) {
-                    serializer.startTag("", TAG_EFFECT);
-                    serializer.attribute("", ATTR_ID, effect.getId());
-                    serializer.attribute("",
-                                  ATTR_TYPE, effect.getClass().getSimpleName());
-                    serializer.attribute("", ATTR_BEGIN_TIME,
-                            Long.toString(effect.getStartTime()));
-                    serializer.attribute("", ATTR_DURATION,
-                                           Long.toString(effect.getDuration()));
-                    if (effect instanceof EffectColor) {
-                        final EffectColor colorEffect = (EffectColor)effect;
-                        serializer.attribute("", ATTR_COLOR_EFFECT_TYPE,
-                                Integer.toString(colorEffect.getType()));
-                        if (colorEffect.getType() == EffectColor.TYPE_COLOR ||
-                                colorEffect.getType() == EffectColor.TYPE_GRADIENT) {
-                            serializer.attribute("", ATTR_COLOR_EFFECT_VALUE,
-                                    Integer.toString(colorEffect.getColor()));
-                        }
-                    } else if (effect instanceof EffectKenBurns) {
-                        final Rect startRect = ((EffectKenBurns)effect).getStartRect();
-                        serializer.attribute("", ATTR_START_RECT_LEFT,
-                                Integer.toString(startRect.left));
-                        serializer.attribute("", ATTR_START_RECT_TOP,
-                                Integer.toString(startRect.top));
-                        serializer.attribute("", ATTR_START_RECT_RIGHT,
-                                Integer.toString(startRect.right));
-                        serializer.attribute("", ATTR_START_RECT_BOTTOM,
-                                Integer.toString(startRect.bottom));
-
-                        final Rect endRect = ((EffectKenBurns)effect).getEndRect();
-                        serializer.attribute("", ATTR_END_RECT_LEFT,
-                                                Integer.toString(endRect.left));
-                        serializer.attribute("", ATTR_END_RECT_TOP,
-                                                 Integer.toString(endRect.top));
-                        serializer.attribute("", ATTR_END_RECT_RIGHT,
-                                               Integer.toString(endRect.right));
-                        serializer.attribute("", ATTR_END_RECT_BOTTOM,
-                                Integer.toString(endRect.bottom));
-                        final MediaItem mItem = effect.getMediaItem();
-                           if(((MediaImageItem)mItem).getGeneratedImageClip() != null) {
-                               serializer.attribute("", ATTR_IS_IMAGE_CLIP_GENERATED,
-                                       Boolean.toString(true));
-                               serializer.attribute("", ATTR_GENERATED_IMAGE_CLIP,
-                                     ((MediaImageItem)mItem).getGeneratedImageClip());
-                            } else {
-                                serializer.attribute("", ATTR_IS_IMAGE_CLIP_GENERATED,
-                                     Boolean.toString(false));
-                         }
-                    }
-
-                    serializer.endTag("", TAG_EFFECT);
-                }
-                serializer.endTag("", TAG_EFFECTS);
-            }
-
-            serializer.endTag("", TAG_MEDIA_ITEM);
-        }
-        serializer.endTag("", TAG_MEDIA_ITEMS);
-
-        serializer.startTag("", TAG_TRANSITIONS);
-
-        for (Transition transition : mTransitions) {
-            serializer.startTag("", TAG_TRANSITION);
-            serializer.attribute("", ATTR_ID, transition.getId());
-            serializer.attribute("", ATTR_TYPE, transition.getClass().getSimpleName());
-            serializer.attribute("", ATTR_DURATION, Long.toString(transition.getDuration()));
-            serializer.attribute("", ATTR_BEHAVIOR, Integer.toString(transition.getBehavior()));
-            serializer.attribute("", ATTR_IS_TRANSITION_GENERATED,
-                                    Boolean.toString(transition.isGenerated()));
-            if (transition.isGenerated() == true) {
-                serializer.attribute("", ATTR_GENERATED_TRANSITION_CLIP, transition.mFilename);
-            }
-            final MediaItem afterMediaItem = transition.getAfterMediaItem();
-            if (afterMediaItem != null) {
-                serializer.attribute("", ATTR_AFTER_MEDIA_ITEM_ID, afterMediaItem.getId());
-            }
-
-            final MediaItem beforeMediaItem = transition.getBeforeMediaItem();
-            if (beforeMediaItem != null) {
-                serializer.attribute("", ATTR_BEFORE_MEDIA_ITEM_ID, beforeMediaItem.getId());
-            }
-
-            if (transition instanceof TransitionSliding) {
-                serializer.attribute("", ATTR_DIRECTION,
-                        Integer.toString(((TransitionSliding)transition).getDirection()));
-            } else if (transition instanceof TransitionAlpha) {
-                TransitionAlpha ta = (TransitionAlpha)transition;
-                serializer.attribute("", ATTR_BLENDING,
-                                     Integer.toString(ta.getBlendingPercent()));
-                serializer.attribute("", ATTR_INVERT,
-                                               Boolean.toString(ta.isInvert()));
-                if (ta.getMaskFilename() != null) {
-                    serializer.attribute("", ATTR_MASK, ta.getMaskFilename());
-                }
-            }
-            serializer.endTag("", TAG_TRANSITION);
-        }
-        serializer.endTag("", TAG_TRANSITIONS);
-        serializer.startTag("", TAG_AUDIO_TRACKS);
-        for (AudioTrack at : mAudioTracks) {
-            serializer.startTag("", TAG_AUDIO_TRACK);
-            serializer.attribute("", ATTR_ID, at.getId());
-            serializer.attribute("", ATTR_FILENAME, at.getFilename());
-            serializer.attribute("", ATTR_START_TIME, Long.toString(at.getStartTime()));
-            serializer.attribute("", ATTR_BEGIN_TIME, Long.toString(at.getBoundaryBeginTime()));
-            serializer.attribute("", ATTR_END_TIME, Long.toString(at.getBoundaryEndTime()));
-            serializer.attribute("", ATTR_VOLUME, Integer.toString(at.getVolume()));
-            serializer.attribute("", ATTR_DUCK_ENABLED,
-                                       Boolean.toString(at.isDuckingEnabled()));
-            serializer.attribute("", ATTR_DUCKED_TRACK_VOLUME,
-                                   Integer.toString(at.getDuckedTrackVolume()));
-            serializer.attribute("", ATTR_DUCK_THRESHOLD,
-                                   Integer.toString(at.getDuckingThreshhold()));
-            serializer.attribute("", ATTR_MUTED, Boolean.toString(at.isMuted()));
-            serializer.attribute("", ATTR_LOOP, Boolean.toString(at.isLooping()));
-            if (at.getAudioWaveformFilename() != null) {
-                serializer.attribute("", ATTR_AUDIO_WAVEFORM_FILENAME,
-                        at.getAudioWaveformFilename());
-            }
-
-            serializer.endTag("", TAG_AUDIO_TRACK);
-        }
-        serializer.endTag("", TAG_AUDIO_TRACKS);
-
-        serializer.endTag("", TAG_PROJECT);
-        serializer.endDocument();
-
-        /**
-         *  Save the metadata XML file
-         */
-        final FileOutputStream out = new FileOutputStream(new File(getPath(),
-                                                          PROJECT_FILENAME));
-        out.write(writer.toString().getBytes());
-        out.flush();
-        out.close();
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void setAspectRatio(int aspectRatio) {
-        mAspectRatio = aspectRatio;
-        /**
-         *  Invalidate all transitions
-         */
-        mMANativeHelper.setGeneratePreview(true);
-
-        for (Transition transition : mTransitions) {
-            transition.invalidate();
-        }
-
-        final Iterator<MediaItem> it = mMediaItems.iterator();
-
-        while (it.hasNext()) {
-            final MediaItem t = it.next();
-            List<Overlay> overlayList = t.getAllOverlays();
-            for (Overlay overlay : overlayList) {
-
-                ((OverlayFrame)overlay).invalidateGeneratedFiles();
-            }
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public void startPreview(SurfaceHolder surfaceHolder, long fromMs, long toMs,
-                             boolean loop, int callbackAfterFrameCount,
-                             PreviewProgressListener listener) {
-
-        if (surfaceHolder == null) {
-            throw new IllegalArgumentException();
-        }
-
-        final Surface surface = surfaceHolder.getSurface();
-        if (surface == null) {
-            throw new IllegalArgumentException("Surface could not be retrieved from surface holder");
-        }
-
-        if (surface.isValid() == false) {
-            throw new IllegalStateException("Surface is not valid");
-        }
-
-        if (listener == null) {
-            throw new IllegalArgumentException();
-        }
-
-        if (fromMs >= mDurationMs) {
-            throw new IllegalArgumentException("Requested time not correct");
-        }
-
-        if (fromMs < 0) {
-            throw new IllegalArgumentException("Requested time not correct");
-        }
-
-        boolean semAcquireDone = false;
-        if (!mPreviewInProgress) {
-            try{
-                semAcquireDone = lock(ENGINE_ACCESS_MAX_TIMEOUT_MS);
-                if (semAcquireDone == false) {
-                    throw new IllegalStateException("Timeout waiting for semaphore");
-                }
-
-                if (mMANativeHelper == null) {
-                    throw new IllegalStateException("The video editor is not initialized");
-                }
-
-                if (mMediaItems.size() > 0) {
-                    mPreviewInProgress = true;
-                    mMANativeHelper.previewStoryBoard(mMediaItems, mTransitions,
-                                                      mAudioTracks, null);
-                    mMANativeHelper.doPreview(surface, fromMs, toMs, loop,
-                                     callbackAfterFrameCount, listener);
-                }
-                /**
-                 *  Release The lock on complete by calling stopPreview
-                 */
-            } catch (InterruptedException ex) {
-                Log.w(TAG, "The thread was interrupted", new Throwable());
-                throw new IllegalStateException("The thread was interrupted");
-            }
-         } else {
-            throw new IllegalStateException("Preview already in progress");
-        }
-    }
-
-    /*
-     * {@inheritDoc}
-     */
-    public long stopPreview() {
-        long result = 0;
-        if (mPreviewInProgress) {
-            try {
-                result = mMANativeHelper.stopPreview();
-                /**
-                 *  release on complete by calling stopPreview
-                 */
-                } finally {
-                    mPreviewInProgress = false;
-                    unlock();
-                }
-            return result;
-        }
-        else {
-            return 0;
-        }
-    }
-
-    /*
-     * Remove transitions associated with the specified media item
-     *
-     * @param mediaItem The media item
-     */
-    private void removeAdjacentTransitions(MediaItem mediaItem) {
-        final Transition beginTransition = mediaItem.getBeginTransition();
-        if (beginTransition != null) {
-            if (beginTransition.getAfterMediaItem() != null) {
-                beginTransition.getAfterMediaItem().setEndTransition(null);
-            }
-            beginTransition.invalidate();
-            mTransitions.remove(beginTransition);
-        }
-
-        final Transition endTransition = mediaItem.getEndTransition();
-        if (endTransition != null) {
-            if (endTransition.getBeforeMediaItem() != null) {
-                endTransition.getBeforeMediaItem().setBeginTransition(null);
-            }
-            endTransition.invalidate();
-            mTransitions.remove(endTransition);
-        }
-
-        mediaItem.setBeginTransition(null);
-        mediaItem.setEndTransition(null);
-    }
-
-    /**
-     * Remove the transition before this media item
-     *
-     * @param index The media item index
-     */
-    private void removeTransitionBefore(int index) {
-        final MediaItem mediaItem = mMediaItems.get(index);
-        final Iterator<Transition> it = mTransitions.iterator();
-        while (it.hasNext()) {
-            Transition t = it.next();
-            if (t.getBeforeMediaItem() == mediaItem) {
-                mMANativeHelper.setGeneratePreview(true);
-                it.remove();
-                t.invalidate();
-                mediaItem.setBeginTransition(null);
-                if (index > 0) {
-                    mMediaItems.get(index - 1).setEndTransition(null);
-                }
-                break;
-            }
-        }
-    }
-
-    /**
-     * Remove the transition after this media item
-     *
-     * @param mediaItem The media item
-     */
-    private void removeTransitionAfter(int index) {
-        final MediaItem mediaItem = mMediaItems.get(index);
-        final Iterator<Transition> it = mTransitions.iterator();
-        while (it.hasNext()) {
-            Transition t = it.next();
-            if (t.getAfterMediaItem() == mediaItem) {
-                mMANativeHelper.setGeneratePreview(true);
-                it.remove();
-                t.invalidate();
-                mediaItem.setEndTransition(null);
-                /**
-                 *  Invalidate the reference in the next media item
-                 */
-                if (index < mMediaItems.size() - 1) {
-                    mMediaItems.get(index + 1).setBeginTransition(null);
-                }
-                break;
-            }
-        }
-    }
-
-    /**
-     * Compute the duration
-     */
-    private void computeTimelineDuration() {
-        mDurationMs = 0;
-        final int mediaItemsCount = mMediaItems.size();
-        for (int i = 0; i < mediaItemsCount; i++) {
-            final MediaItem mediaItem = mMediaItems.get(i);
-            mDurationMs += mediaItem.getTimelineDuration();
-            if (mediaItem.getEndTransition() != null) {
-                if (i < mediaItemsCount - 1) {
-                    mDurationMs -= mediaItem.getEndTransition().getDuration();
-                }
-            }
-        }
-    }
-
-    /*
-     * Generate the project thumbnail
-     */
-    private void generateProjectThumbnail() {
-        /*
-         * If a thumbnail already exists, then delete it first
-         */
-        if ((new File(mProjectPath + "/" + THUMBNAIL_FILENAME)).exists()) {
-            (new File(mProjectPath + "/" + THUMBNAIL_FILENAME)).delete();
-        }
-        /*
-         * Generate a new thumbnail for the project from first media Item
-         */
-        if (mMediaItems.size() > 0) {
-            MediaItem mI = mMediaItems.get(0);
-            /*
-             * Keep aspect ratio of the image
-             */
-            int height = 480;
-            int width = mI.getWidth() * height / mI.getHeight();
-
-            Bitmap projectBitmap = null;
-            String filename = mI.getFilename();
-            if (mI instanceof MediaVideoItem) {
-                MediaMetadataRetriever retriever = new MediaMetadataRetriever();
-                retriever.setDataSource(filename);
-                Bitmap bitmap = retriever.getFrameAtTime();
-                retriever.release();
-                retriever = null;
-                if (bitmap == null) {
-                    String msg = "Thumbnail extraction from " +
-                                    filename + " failed";
-                    throw new IllegalArgumentException(msg);
-                }
-                // Resize the thumbnail to the target size
-                projectBitmap =
-                    Bitmap.createScaledBitmap(bitmap, width, height, true);
-            } else {
-                try {
-                    projectBitmap = mI.getThumbnail(width, height, 500);
-                } catch (IllegalArgumentException e) {
-                    String msg = "Project thumbnail extraction from " +
-                                    filename + " failed";
-                    throw new IllegalArgumentException(msg);
-                } catch (IOException e) {
-                    String msg = "IO Error creating project thumbnail";
-                    throw new IllegalArgumentException(msg);
-                }
-            }
-
-            FileOutputStream stream = null;
-            try {
-                stream = new FileOutputStream(mProjectPath + "/" + THUMBNAIL_FILENAME);
-                projectBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
-                stream.flush();
-            } catch (IOException e) {
-                throw new IllegalArgumentException ("Error creating project thumbnail");
-            } finally {
-                IoUtils.closeQuietly(stream);
-                projectBitmap.recycle();
-            }
-        }
-    }
-
-    /**
-     * Clears the preview surface
-     *
-     * @param surfaceHolder SurfaceHolder where the preview is rendered
-     * and needs to be cleared.
-     */
-    public void clearSurface(SurfaceHolder surfaceHolder) {
-        if (surfaceHolder == null) {
-            throw new IllegalArgumentException("Invalid surface holder");
-        }
-
-        final Surface surface = surfaceHolder.getSurface();
-        if (surface == null) {
-            throw new IllegalArgumentException("Surface could not be retrieved from surface holder");
-        }
-
-        if (surface.isValid() == false) {
-            throw new IllegalStateException("Surface is not valid");
-        }
-
-        if (mMANativeHelper != null) {
-            mMANativeHelper.clearPreviewSurface(surface);
-        } else {
-            Log.w(TAG, "Native helper was not ready!");
-        }
-    }
-
-    /**
-     * Grab the semaphore which arbitrates access to the editor
-     *
-     * @throws InterruptedException
-     */
-    private void lock() throws InterruptedException {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "lock: grabbing semaphore", new Throwable());
-        }
-        mLock.acquire();
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "lock: grabbed semaphore");
-        }
-    }
-
-    /**
-     * Tries to grab the semaphore with a specified time out which arbitrates access to the editor
-     *
-     * @param timeoutMs time out in ms.
-     *
-     * @return true if the semaphore is acquired, false otherwise
-     * @throws InterruptedException
-     */
-    private boolean lock(long timeoutMs) throws InterruptedException {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "lock: grabbing semaphore with timeout " + timeoutMs, new Throwable());
-        }
-
-        boolean acquireSem = mLock.tryAcquire(timeoutMs, TimeUnit.MILLISECONDS);
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "lock: grabbed semaphore status " + acquireSem);
-        }
-
-        return acquireSem;
-    }
-
-    /**
-     * Release the semaphore which arbitrates access to the editor
-     */
-    private void unlock() {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "unlock: releasing semaphore");
-        }
-        mLock.release();
-    }
-
-    /**
-     * Dumps the heap memory usage information to file
-     */
-    private static void dumpHeap (String filename) throws Exception {
-        /* Cleanup as much as possible before dump
-         */
-        System.gc();
-        System.runFinalization();
-        Thread.sleep(1000);
-        String state = Environment.getExternalStorageState();
-        if (Environment.MEDIA_MOUNTED.equals(state)) {
-            String extDir =
-             Environment.getExternalStorageDirectory().toString();
-
-            /* If dump file already exists, then delete it first
-            */
-            if ((new File(extDir + "/" + filename + ".dump")).exists()) {
-                (new File(extDir + "/" + filename + ".dump")).delete();
-            }
-            /* Dump native heap
-            */
-            FileOutputStream ost =
-             new FileOutputStream(extDir + "/" + filename + ".dump");
-            Debug.dumpNativeHeap(ost.getFD());
-            ost.close();
-        }
-    }
-}
diff --git a/media/java/android/media/videoeditor/VideoEditorProfile.java b/media/java/android/media/videoeditor/VideoEditorProfile.java
deleted file mode 100644
index 202a2df..0000000
--- a/media/java/android/media/videoeditor/VideoEditorProfile.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.media.videoeditor;
-
-/**
- * The VideoEditorProfile class is used to retrieve the
- * predefined videoeditor profile settings for videoeditor applications.
- * These settings are read-only.
- *
- * <p>The videoeditor profile specifies the following set of parameters:
- * <ul>
- * <li> max input video frame width
- * <li> max input video frame height
- * <li> max output video frame width
- * <li> max output video frame height
- * </ul>
- * {@hide}
- */
-public class VideoEditorProfile
-{
-    static {
-        System.loadLibrary("media_jni");
-        native_init();
-    }
-    /**
-     * The max input video frame width
-     */
-    public int maxInputVideoFrameWidth;
-
-    /**
-     * The max input video frame height
-     */
-    public int maxInputVideoFrameHeight;
-
-    /**
-     * The max ouput video frame width
-     */
-    public int maxOutputVideoFrameWidth;
-
-    /**
-     * The max ouput video frame height
-     */
-    public int maxOutputVideoFrameHeight;
-
-    /**
-     * Returns the videoeditor profile
-     */
-    public static VideoEditorProfile get() {
-        return native_get_videoeditor_profile();
-    }
-
-    /**
-     * Returns the supported profile by given video codec
-     */
-    public static int getExportProfile(int vidCodec) {
-        int profile = -1;
-
-        switch (vidCodec) {
-            case MediaProperties.VCODEC_H263:
-            case MediaProperties.VCODEC_H264:
-            case MediaProperties.VCODEC_MPEG4:
-                 profile = native_get_videoeditor_export_profile(vidCodec);
-                 break;
-            default :
-               throw new IllegalArgumentException("Unsupported video codec" + vidCodec);
-        }
-
-        return profile;
-    }
-
-    /**
-     * Returns the supported level by given video codec
-     */
-    public static int getExportLevel(int vidCodec) {
-        int level = -1;
-
-        switch (vidCodec) {
-            case MediaProperties.VCODEC_H263:
-            case MediaProperties.VCODEC_H264:
-            case MediaProperties.VCODEC_MPEG4:
-                 level = native_get_videoeditor_export_level(vidCodec);
-                 break;
-            default :
-               throw new IllegalArgumentException("Unsupported video codec" + vidCodec);
-        }
-
-        return level;
-    }
-
-    // Private constructor called by JNI
-    private VideoEditorProfile(int inputWidth,
-                             int inputHeight,
-                             int outputWidth,
-                             int outputHeight) {
-
-        this.maxInputVideoFrameWidth = inputWidth;
-        this.maxInputVideoFrameHeight = inputHeight;
-        this.maxOutputVideoFrameWidth = outputWidth;
-        this.maxOutputVideoFrameHeight = outputHeight;
-    }
-
-    // Methods implemented by JNI
-    private static native final void native_init();
-    private static native final VideoEditorProfile
-        native_get_videoeditor_profile();
-    private static native final int native_get_videoeditor_export_profile(int codec);
-    private static native final int native_get_videoeditor_export_level(int level);
-
-}
diff --git a/media/java/android/media/videoeditor/WaveformData.java b/media/java/android/media/videoeditor/WaveformData.java
deleted file mode 100644
index 6c10e3c..0000000
--- a/media/java/android/media/videoeditor/WaveformData.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.media.videoeditor;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-
-/**
- * Class which describes the waveform data of an audio track. The gain values
- * represent the average gain for an audio frame. For audio codecs which do not
- * operate on a per frame bases (eg. ALAW, ULAW) a reasonable audio frame
- * duration will be assumed (eg. 50ms).
- * {@hide}
- */
-public class WaveformData {
-    /*
-     *  Instance variables
-     */
-    private final int mFrameDurationMs;
-    private final int mFramesCount;
-    private final short[] mGains;
-
-    /*
-     * This constructor shall not be used
-     */
-    @SuppressWarnings("unused")
-    private WaveformData() throws IOException {
-        mFrameDurationMs = 0;
-        mFramesCount = 0;
-        mGains = null;
-    }
-
-    /*
-     * Constructor
-     *
-     * @param audioWaveformFilename The name of the audio waveform file
-     *
-     * The file format is as following:
-     * <ul>
-     *  <li>first 4 bytes provide the number of samples for each value, as
-     *  big-endian signed</li>
-     *  <li>4 following bytes is the total number of values in the file, as
-     *  big-endian signed</li>
-     *  <li>then, all values follow as bytes</li>
-     * </ul>
-     *
-     * @throws IOException on failure of file input stream operations
-     * @throws IllegalArgumentException if audioWaveformFilename is null
-     */
-    WaveformData(String audioWaveformFilename) throws IOException {
-
-        if (audioWaveformFilename == null) {
-            throw new IllegalArgumentException("WaveformData : filename is null");
-        }
-
-        FileInputStream audioGraphFileReadHandle = null;
-
-        try {
-            final File audioGraphFileContext = new File(audioWaveformFilename);
-
-            audioGraphFileReadHandle = new FileInputStream(audioGraphFileContext);
-            /*
-             * Read frame duration
-             */
-            final byte tempFrameDuration[] = new byte[4];
-
-            audioGraphFileReadHandle.read(tempFrameDuration, 0, 4);
-
-            int tempFrameDurationMs = 0;
-            int tempFramesCounter = 0;
-            for (int i = 0; i < 4; i++) {
-                tempFrameDurationMs = (tempFrameDurationMs << 8);
-                tempFrameDurationMs = (tempFrameDurationMs | (tempFrameDuration[i] & 0xff));
-            }
-            mFrameDurationMs = tempFrameDurationMs;
-
-            /*
-             * Read count
-             */
-            final byte tempFramesCount[] = new byte[4];
-
-            audioGraphFileReadHandle.read(tempFramesCount, 0, 4);
-            for (int i = 0; i < 4; i++) {
-                tempFramesCounter = (tempFramesCounter << 8);
-                tempFramesCounter = (tempFramesCounter | (tempFramesCount[i] & 0xff));
-            }
-            mFramesCount = tempFramesCounter;
-
-            /*
-             *  Capture the graph values
-             */
-            mGains = new short[mFramesCount];
-
-            for (int i = 0; i < mFramesCount; i++) {
-                mGains[i] = (short)audioGraphFileReadHandle.read();
-            }
-        } finally {
-            if (audioGraphFileReadHandle != null) {
-                audioGraphFileReadHandle.close();
-            }
-        }
-    }
-
-    /**
-     * @return The duration of a frame in milliseconds
-     */
-    public int getFrameDuration() {
-        return mFrameDurationMs;
-    }
-
-    /**
-     * @return The number of frames within the waveform data
-     */
-    public int getFramesCount() {
-        return mFramesCount;
-    }
-
-    /**
-     * @return The array of frame gains. The size of the array is the frames
-     *         count. The values of the frame gains range from 0 to 255.
-     */
-    public short[] getFrameGains() {
-        return mGains;
-    }
-}
diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java
index 9ceefc3..fce3fd0 100755
--- a/media/java/android/mtp/MtpDatabase.java
+++ b/media/java/android/mtp/MtpDatabase.java
@@ -16,21 +16,23 @@
 
 package android.mtp;
 
+import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.ContentValues;
 import android.content.IContentProvider;
 import android.content.Intent;
+import android.content.IntentFilter;
 import android.content.SharedPreferences;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.media.MediaScanner;
 import android.net.Uri;
-import android.os.Environment;
+import android.os.BatteryManager;
+import android.os.BatteryStats;
 import android.os.RemoteException;
 import android.provider.MediaStore;
 import android.provider.MediaStore.Audio;
 import android.provider.MediaStore.Files;
-import android.provider.MediaStore.Images;
 import android.provider.MediaStore.MediaColumns;
 import android.util.Log;
 import android.view.Display;
@@ -115,11 +117,35 @@
                                             + Files.FileColumns.PARENT + "=?";
 
     private final MediaScanner mMediaScanner;
+    private MtpServer mServer;
+
+    // read from native code
+    private int mBatteryLevel;
+    private int mBatteryScale;
 
     static {
         System.loadLibrary("media_jni");
     }
 
+    private BroadcastReceiver mBatteryReceiver = new BroadcastReceiver() {
+          @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
+                mBatteryScale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 0);
+                int newLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
+                if (newLevel != mBatteryLevel) {
+                    mBatteryLevel = newLevel;
+                    if (mServer != null) {
+                        // send device property changed event
+                        mServer.sendDevicePropertyChanged(
+                                MtpConstants.DEVICE_PROPERTY_BATTERY_LEVEL);
+                    }
+                }
+            }
+        }
+    };
+
     public MtpDatabase(Context context, String volumeName, String storagePath,
             String[] subDirectories) {
         native_setup();
@@ -173,6 +199,23 @@
         initDeviceProperties(context);
     }
 
+    public void setServer(MtpServer server) {
+        mServer = server;
+
+        // always unregister before registering
+        try {
+            mContext.unregisterReceiver(mBatteryReceiver);
+        } catch (IllegalArgumentException e) {
+            // wasn't previously registered, ignore
+        }
+
+        // register for battery notifications when we are connected
+        if (server != null) {
+            mContext.registerReceiver(mBatteryReceiver,
+                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+        }
+    }
+
     @Override
     protected void finalize() throws Throwable {
         try {
@@ -558,6 +601,11 @@
             MtpConstants.PROPERTY_DURATION,
             MtpConstants.PROPERTY_GENRE,
             MtpConstants.PROPERTY_COMPOSER,
+            MtpConstants.PROPERTY_AUDIO_WAVE_CODEC,
+            MtpConstants.PROPERTY_BITRATE_TYPE,
+            MtpConstants.PROPERTY_AUDIO_BITRATE,
+            MtpConstants.PROPERTY_NUMBER_OF_CHANNELS,
+            MtpConstants.PROPERTY_SAMPLE_RATE,
     };
 
     static final int[] VIDEO_PROPERTIES = {
@@ -665,6 +713,7 @@
             MtpConstants.DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER,
             MtpConstants.DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME,
             MtpConstants.DEVICE_PROPERTY_IMAGE_SIZE,
+            MtpConstants.DEVICE_PROPERTY_BATTERY_LEVEL,
         };
     }
 
@@ -821,6 +870,8 @@
                 outStringValue[imageSize.length()] = 0;
                 return MtpConstants.RESPONSE_OK;
 
+            // DEVICE_PROPERTY_BATTERY_LEVEL is implemented in the JNI code
+
             default:
                 return MtpConstants.RESPONSE_DEVICE_PROP_NOT_SUPPORTED;
         }
diff --git a/media/java/android/mtp/MtpDevice.java b/media/java/android/mtp/MtpDevice.java
index 8310579..72dcaa8 100644
--- a/media/java/android/mtp/MtpDevice.java
+++ b/media/java/android/mtp/MtpDevice.java
@@ -18,8 +18,6 @@
 
 import android.hardware.usb.UsbDevice;
 import android.hardware.usb.UsbDeviceConnection;
-import android.os.ParcelFileDescriptor;
-import android.util.Log;
 
 /**
  * This class represents an MTP or PTP device connected on the USB host bus. An application can
diff --git a/media/java/android/mtp/MtpPropertyGroup.java b/media/java/android/mtp/MtpPropertyGroup.java
index 48da40f..781988d 100644
--- a/media/java/android/mtp/MtpPropertyGroup.java
+++ b/media/java/android/mtp/MtpPropertyGroup.java
@@ -20,7 +20,6 @@
 import android.database.Cursor;
 import android.net.Uri;
 import android.os.RemoteException;
-import android.provider.MediaStore;
 import android.provider.MediaStore.Audio;
 import android.provider.MediaStore.Files;
 import android.provider.MediaStore.Images;
diff --git a/media/java/android/mtp/MtpServer.java b/media/java/android/mtp/MtpServer.java
index 266f78e..3814630 100644
--- a/media/java/android/mtp/MtpServer.java
+++ b/media/java/android/mtp/MtpServer.java
@@ -30,6 +30,7 @@
 
     public MtpServer(MtpDatabase database, boolean usePtp) {
         native_setup(database, usePtp);
+        database.setServer(this);
     }
 
     public void start() {
@@ -51,6 +52,10 @@
         native_send_object_removed(handle);
     }
 
+    public void sendDevicePropertyChanged(int property) {
+        native_send_device_property_changed(property);
+    }
+
     public void addStorage(MtpStorage storage) {
         native_add_storage(storage);
     }
@@ -64,6 +69,7 @@
     private native final void native_cleanup();
     private native final void native_send_object_added(int handle);
     private native final void native_send_object_removed(int handle);
+    private native final void native_send_device_property_changed(int property);
     private native final void native_add_storage(MtpStorage storage);
     private native final void native_remove_storage(int storageId);
 }
diff --git a/media/jni/Android.mk b/media/jni/Android.mk
index dea971e..ed98b96 100644
--- a/media/jni/Android.mk
+++ b/media/jni/Android.mk
@@ -8,6 +8,7 @@
     android_media_MediaCodecList.cpp \
     android_media_MediaDrm.cpp \
     android_media_MediaExtractor.cpp \
+    android_media_MediaHTTPConnection.cpp \
     android_media_MediaMuxer.cpp \
     android_media_MediaPlayer.cpp \
     android_media_MediaRecorder.cpp \
@@ -37,6 +38,7 @@
     libcamera_client \
     libmtp \
     libusbhost \
+    libjhead \
     libexif \
     libstagefright_amrnb_common \
 
@@ -60,8 +62,7 @@
     $(call include-path-for, libhardware)/hardware \
     system/media/camera/include \
     $(PV_INCLUDES) \
-    $(JNI_H_INCLUDE) \
-    $(call include-path-for, corecg graphics)
+    $(JNI_H_INCLUDE)
 
 LOCAL_CFLAGS +=
 
diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp
index d475eee..7a86811 100644
--- a/media/jni/android_media_ImageReader.cpp
+++ b/media/jni/android_media_ImageReader.cpp
@@ -86,8 +86,8 @@
     void setCpuConsumer(const sp<CpuConsumer>& consumer) { mConsumer = consumer; }
     CpuConsumer* getCpuConsumer() { return mConsumer.get(); }
 
-    void setBufferQueue(const sp<BufferQueue>& bq) { mBufferQueue = bq; }
-    BufferQueue* getBufferQueue() { return mBufferQueue.get(); }
+    void setProducer(const sp<IGraphicBufferProducer>& producer) { mProducer = producer; }
+    IGraphicBufferProducer* getProducer() { return mProducer.get(); }
 
     void setBufferFormat(int format) { mFormat = format; }
     int getBufferFormat() { return mFormat; }
@@ -104,7 +104,7 @@
 
     List<CpuConsumer::LockedBuffer*> mBuffers;
     sp<CpuConsumer> mConsumer;
-    sp<BufferQueue> mBufferQueue;
+    sp<IGraphicBufferProducer> mProducer;
     jobject mWeakThiz;
     jclass mClazz;
     int mFormat;
@@ -222,7 +222,7 @@
     return ctx->getCpuConsumer();
 }
 
-static BufferQueue* ImageReader_getBufferQueue(JNIEnv* env, jobject thiz)
+static IGraphicBufferProducer* ImageReader_getProducer(JNIEnv* env, jobject thiz)
 {
     ALOGV("%s:", __FUNCTION__);
     JNIImageReaderContext* const ctx = ImageReader_getContext(env, thiz);
@@ -230,7 +230,7 @@
         jniThrowRuntimeException(env, "ImageReaderContext is not initialized");
         return NULL;
     }
-    return ctx->getBufferQueue();
+    return ctx->getProducer();
 }
 
 static void ImageReader_setNativeContext(JNIEnv* env,
@@ -274,17 +274,11 @@
 
     fid = env->GetStaticFieldID(imageFormatClazz, "JPEG", "I");
     jpegFormat = env->GetStaticIntField(imageFormatClazz, fid);
-    fid = env->GetStaticFieldID(imageFormatClazz, "RAW_SENSOR", "I");
-    rawSensorFormat = env->GetStaticIntField(imageFormatClazz, fid);
 
-    // Translate the JPEG to BLOB for camera purpose, an add more if more mismatch is found.
+    // Translate the JPEG to BLOB for camera purpose.
     if (format == jpegFormat) {
         format = HAL_PIXEL_FORMAT_BLOB;
     }
-    // Same thing for RAW_SENSOR format
-    if (format == rawSensorFormat) {
-        format = HAL_PIXEL_FORMAT_RAW_SENSOR;
-    }
 
     return format;
 }
@@ -386,11 +380,12 @@
             dataSize = buffer->stride * buffer->height;
             break;
         case HAL_PIXEL_FORMAT_Y16:
+            bytesPerPixel = 2;
             // Single plane, 16bpp, strides are specified in pixels, not in bytes
             ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
 
             pData = buffer->data;
-            dataSize = buffer->stride * buffer->height * 2;
+            dataSize = buffer->stride * buffer->height * bytesPerPixel;
             break;
         case HAL_PIXEL_FORMAT_BLOB:
             // Used for JPEG data, height must be 1, width == size, single plane.
@@ -402,9 +397,10 @@
             break;
         case HAL_PIXEL_FORMAT_RAW_SENSOR:
             // Single plane 16bpp bayer data.
+            bytesPerPixel = 2;
             ALOG_ASSERT(idx == 0, "Wrong index: %d", idx);
             pData = buffer->data;
-            dataSize = buffer->width * 2 * buffer->height;
+            dataSize = buffer->stride * buffer->height * bytesPerPixel;
             break;
         case HAL_PIXEL_FORMAT_RGBA_8888:
         case HAL_PIXEL_FORMAT_RGBX_8888:
@@ -613,8 +609,10 @@
 
     nativeFormat = Image_getPixelFormat(env, format);
 
-    sp<BufferQueue> bq = new BufferQueue();
-    sp<CpuConsumer> consumer = new CpuConsumer(bq, maxImages,
+    sp<IGraphicBufferProducer> gbProducer;
+    sp<IGraphicBufferConsumer> gbConsumer;
+    BufferQueue::createBufferQueue(&gbProducer, &gbConsumer);
+    sp<CpuConsumer> consumer = new CpuConsumer(gbConsumer, maxImages,
                                                /*controlledByApp*/true);
     // TODO: throw dvm exOutOfMemoryError?
     if (consumer == NULL) {
@@ -629,7 +627,7 @@
     }
     sp<JNIImageReaderContext> ctx(new JNIImageReaderContext(env, weakThiz, clazz, maxImages));
     ctx->setCpuConsumer(consumer);
-    ctx->setBufferQueue(bq);
+    ctx->setProducer(gbProducer);
     consumer->setFrameAvailableListener(ctx);
     ImageReader_setNativeContext(env, thiz, ctx);
     ctx->setBufferFormat(nativeFormat);
@@ -794,14 +792,14 @@
 {
     ALOGV("%s: ", __FUNCTION__);
 
-    BufferQueue* bq = ImageReader_getBufferQueue(env, thiz);
-    if (bq == NULL) {
+    IGraphicBufferProducer* gbp = ImageReader_getProducer(env, thiz);
+    if (gbp == NULL) {
         jniThrowRuntimeException(env, "CpuConsumer is uninitialized");
         return NULL;
     }
 
     // Wrap the IGBP in a Java-language Surface.
-    return android_view_Surface_createFromIGraphicBufferProducer(env, bq);
+    return android_view_Surface_createFromIGraphicBufferProducer(env, gbp);
 }
 
 static jobject Image_createSurfacePlane(JNIEnv* env, jobject thiz, int idx)
diff --git a/media/jni/android_media_MediaCodec.cpp b/media/jni/android_media_MediaCodec.cpp
index 5fd5dee..a710c03 100644
--- a/media/jni/android_media_MediaCodec.cpp
+++ b/media/jni/android_media_MediaCodec.cpp
@@ -27,6 +27,8 @@
 #include "jni.h"
 #include "JNIHelp.h"
 
+#include <cutils/compiler.h>
+
 #include <gui/Surface.h>
 
 #include <media/ICrypto.h>
@@ -51,6 +53,10 @@
     DEQUEUE_INFO_OUTPUT_BUFFERS_CHANGED     = -3,
 };
 
+enum {
+    EVENT_NOTIFY = 1,
+};
+
 struct CryptoErrorCodes {
     jint cryptoErrorNoKey;
     jint cryptoErrorKeyExpired;
@@ -59,6 +65,7 @@
 
 struct fields_t {
     jfieldID context;
+    jmethodID postEventFromNativeID;
     jfieldID cryptoInfoNumSubSamplesID;
     jfieldID cryptoInfoNumBytesOfClearDataID;
     jfieldID cryptoInfoNumBytesOfEncryptedDataID;
@@ -75,7 +82,9 @@
         JNIEnv *env, jobject thiz,
         const char *name, bool nameIsType, bool encoder)
     : mClass(NULL),
-      mObject(NULL) {
+      mObject(NULL),
+      mGeneration(1),
+      mRequestedActivityNotification(false) {
     jclass clazz = env->GetObjectClass(thiz);
     CHECK(clazz != NULL);
 
@@ -87,7 +96,7 @@
 
     mLooper->start(
             false,      // runOnCallingThread
-            false,       // canCallJava
+            true,       // canCallJava
             PRIORITY_FOREGROUND);
 
     if (nameIsType) {
@@ -101,12 +110,39 @@
     return mCodec != NULL ? OK : NO_INIT;
 }
 
-JMediaCodec::~JMediaCodec() {
+void JMediaCodec::registerSelf() {
+    mLooper->registerHandler(this);
+}
+
+void JMediaCodec::release() {
     if (mCodec != NULL) {
         mCodec->release();
         mCodec.clear();
     }
 
+    if (mLooper != NULL) {
+        mLooper->unregisterHandler(id());
+        mLooper->stop();
+        mLooper.clear();
+    }
+}
+
+JMediaCodec::~JMediaCodec() {
+    if (mCodec != NULL || mLooper != NULL) {
+        /* MediaCodec and looper should have been released explicitly already
+         * in setMediaCodec() (see comments in setMediaCodec()).
+         *
+         * Otherwise JMediaCodec::~JMediaCodec() might be called from within the
+         * message handler, doing release() there risks deadlock as MediaCodec::
+         * release() post synchronous message to the same looper.
+         *
+         * Print a warning and try to proceed with releasing.
+         */
+        ALOGW("try to release MediaCodec from JMediaCodec::~JMediaCodec()...");
+        release();
+        ALOGW("done releasing MediaCodec from JMediaCodec::~JMediaCodec().");
+    }
+
     JNIEnv *env = AndroidRuntime::getJNIEnv();
 
     env->DeleteWeakGlobalRef(mObject);
@@ -122,7 +158,8 @@
         int flags) {
     sp<Surface> client;
     if (bufferProducer != NULL) {
-        mSurfaceTextureClient = new Surface(bufferProducer, true /* controlledByApp */);
+        mSurfaceTextureClient =
+            new Surface(bufferProducer, true /* controlledByApp */);
     } else {
         mSurfaceTextureClient.clear();
     }
@@ -136,13 +173,32 @@
 }
 
 status_t JMediaCodec::start() {
-    return mCodec->start();
+    status_t err = mCodec->start();
+
+    if (err != OK) {
+        return err;
+    }
+
+    mActivityNotification = new AMessage(kWhatActivityNotify, id());
+    mActivityNotification->setInt32("generation", mGeneration);
+
+    requestActivityNotification();
+
+    return err;
 }
 
 status_t JMediaCodec::stop() {
     mSurfaceTextureClient.clear();
 
-    return mCodec->stop();
+    status_t err = mCodec->stop();
+
+    sp<AMessage> msg = new AMessage(kWhatStopActivityNotifications, id());
+    sp<AMessage> response;
+    msg->postAndAwaitResponse(&response);
+
+    mActivityNotification.clear();
+
+    return err;
 }
 
 status_t JMediaCodec::flush() {
@@ -174,7 +230,11 @@
 }
 
 status_t JMediaCodec::dequeueInputBuffer(size_t *index, int64_t timeoutUs) {
-    return mCodec->dequeueInputBuffer(index, timeoutUs);
+    status_t err = mCodec->dequeueInputBuffer(index, timeoutUs);
+
+    requestActivityNotification();
+
+    return err;
 }
 
 status_t JMediaCodec::dequeueOutputBuffer(
@@ -182,9 +242,12 @@
     size_t size, offset;
     int64_t timeUs;
     uint32_t flags;
-    status_t err;
-    if ((err = mCodec->dequeueOutputBuffer(
-                    index, &offset, &size, &timeUs, &flags, timeoutUs)) != OK) {
+    status_t err = mCodec->dequeueOutputBuffer(
+            index, &offset, &size, &timeUs, &flags, timeoutUs);
+
+    requestActivityNotification();
+
+    if (err != OK) {
         return err;
     }
 
@@ -320,6 +383,67 @@
     }
 }
 
+void JMediaCodec::onMessageReceived(const sp<AMessage> &msg) {
+    switch (msg->what()) {
+        case kWhatRequestActivityNotifications:
+        {
+            if (mRequestedActivityNotification) {
+                break;
+            }
+
+            mCodec->requestActivityNotification(mActivityNotification);
+            mRequestedActivityNotification = true;
+            break;
+        }
+
+        case kWhatActivityNotify:
+        {
+            {
+                int32_t generation;
+                CHECK(msg->findInt32("generation", &generation));
+
+                if (generation != mGeneration) {
+                    // stale
+                    break;
+                }
+
+                mRequestedActivityNotification = false;
+            }
+
+            JNIEnv *env = AndroidRuntime::getJNIEnv();
+            env->CallVoidMethod(
+                    mObject,
+                    gFields.postEventFromNativeID,
+                    EVENT_NOTIFY,
+                    0 /* arg1 */,
+                    0 /* arg2 */,
+                    NULL /* obj */);
+
+            break;
+        }
+
+        case kWhatStopActivityNotifications:
+        {
+            uint32_t replyID;
+            CHECK(msg->senderAwaitsResponse(&replyID));
+
+            ++mGeneration;
+            mRequestedActivityNotification = false;
+
+            sp<AMessage> response = new AMessage;
+            response->postReply(replyID);
+            break;
+        }
+
+        default:
+            TRESPASS();
+    }
+}
+
+void JMediaCodec::requestActivityNotification() {
+    (new AMessage(kWhatRequestActivityNotifications, id()))->post();
+}
+
 }  // namespace android
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -333,6 +457,12 @@
         codec->incStrong(thiz);
     }
     if (old != NULL) {
+        /* release MediaCodec and stop the looper now before decStrong.
+         * otherwise JMediaCodec::~JMediaCodec() could be called from within
+         * its message handler, doing release() from there will deadlock
+         * (as MediaCodec::release() post synchronous message to the same looper)
+         */
+        old->release();
         old->decStrong(thiz);
     }
     env->SetLongField(thiz, gFields.context, (jlong)codec.get());
@@ -610,6 +740,10 @@
     } else if (numBytesOfClearDataObj != NULL
             && env->GetArrayLength(numBytesOfClearDataObj) < numSubSamples) {
         err = -ERANGE;
+    // subSamples array may silently overflow if number of samples are too large.  Use
+    // INT32_MAX as maximum allocation size may be less than SIZE_MAX on some platforms
+    } else if ( CC_UNLIKELY(numSubSamples >= INT32_MAX / sizeof(*subSamples)) ) {
+        err = -EINVAL;
     } else {
         jboolean isCopy;
 
@@ -888,6 +1022,12 @@
     gFields.context = env->GetFieldID(clazz.get(), "mNativeContext", "J");
     CHECK(gFields.context != NULL);
 
+    gFields.postEventFromNativeID =
+        env->GetMethodID(
+                clazz.get(), "postEventFromNative", "(IIILjava/lang/Object;)V");
+
+    CHECK(gFields.postEventFromNativeID != NULL);
+
     clazz.reset(env->FindClass("android/media/MediaCodec$CryptoInfo"));
     CHECK(clazz.get() != NULL);
 
@@ -961,6 +1101,8 @@
         return;
     }
 
+    codec->registerSelf();
+
     setMediaCodec(env,thiz, codec);
 }
 
@@ -981,7 +1123,7 @@
       (void *)android_media_MediaCodec_createInputSurface },
 
     { "start", "()V", (void *)android_media_MediaCodec_start },
-    { "stop", "()V", (void *)android_media_MediaCodec_stop },
+    { "native_stop", "()V", (void *)android_media_MediaCodec_stop },
     { "flush", "()V", (void *)android_media_MediaCodec_flush },
 
     { "queueInputBuffer", "(IIIJI)V",
diff --git a/media/jni/android_media_MediaCodec.h b/media/jni/android_media_MediaCodec.h
index 2fbbd72..2f2ea96 100644
--- a/media/jni/android_media_MediaCodec.h
+++ b/media/jni/android_media_MediaCodec.h
@@ -21,8 +21,8 @@
 
 #include <media/hardware/CryptoAPI.h>
 #include <media/stagefright/foundation/ABase.h>
+#include <media/stagefright/foundation/AHandler.h>
 #include <utils/Errors.h>
-#include <utils/RefBase.h>
 
 namespace android {
 
@@ -34,13 +34,16 @@
 struct MediaCodec;
 class Surface;
 
-struct JMediaCodec : public RefBase {
+struct JMediaCodec : public AHandler {
     JMediaCodec(
             JNIEnv *env, jobject thiz,
             const char *name, bool nameIsType, bool encoder);
 
     status_t initCheck() const;
 
+    void registerSelf();
+    void release();
+
     status_t configure(
             const sp<AMessage> &format,
             const sp<IGraphicBufferProducer> &bufferProducer,
@@ -94,7 +97,15 @@
 protected:
     virtual ~JMediaCodec();
 
+    virtual void onMessageReceived(const sp<AMessage> &msg);
+
 private:
+    enum {
+        kWhatActivityNotify,
+        kWhatRequestActivityNotifications,
+        kWhatStopActivityNotifications,
+    };
+
     jclass mClass;
     jweak mObject;
     sp<Surface> mSurfaceTextureClient;
@@ -102,6 +113,12 @@
     sp<ALooper> mLooper;
     sp<MediaCodec> mCodec;
 
+    sp<AMessage> mActivityNotification;
+    int32_t mGeneration;
+    bool mRequestedActivityNotification;
+
+    void requestActivityNotification();
+
     DISALLOW_EVIL_CONSTRUCTORS(JMediaCodec);
 };
 
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp
index 854ee79..3dbf77b 100644
--- a/media/jni/android_media_MediaExtractor.cpp
+++ b/media/jni/android_media_MediaExtractor.cpp
@@ -26,6 +26,7 @@
 #include "jni.h"
 #include "JNIHelp.h"
 
+#include <media/IMediaHTTPService.h>
 #include <media/hardware/CryptoAPI.h>
 #include <media/stagefright/foundation/ABuffer.h>
 #include <media/stagefright/foundation/ADebug.h>
@@ -35,6 +36,8 @@
 #include <media/stagefright/MetaData.h>
 #include <media/stagefright/NuMediaExtractor.h>
 
+#include "android_util_Binder.h"
+
 namespace android {
 
 struct fields_t {
@@ -135,8 +138,10 @@
 }
 
 status_t JMediaExtractor::setDataSource(
-        const char *path, const KeyedVector<String8, String8> *headers) {
-    return mImpl->setDataSource(path, headers);
+        const sp<IMediaHTTPService> &httpService,
+        const char *path,
+        const KeyedVector<String8, String8> *headers) {
+    return mImpl->setDataSource(httpService, path, headers);
 }
 
 status_t JMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
@@ -661,7 +666,10 @@
 
 static void android_media_MediaExtractor_setDataSource(
         JNIEnv *env, jobject thiz,
-        jstring pathObj, jobjectArray keysArray, jobjectArray valuesArray) {
+        jobject httpServiceBinderObj,
+        jstring pathObj,
+        jobjectArray keysArray,
+        jobjectArray valuesArray) {
     sp<JMediaExtractor> extractor = getMediaExtractor(env, thiz);
 
     if (extractor == NULL) {
@@ -686,7 +694,13 @@
         return;
     }
 
-    status_t err = extractor->setDataSource(path, &headers);
+    sp<IMediaHTTPService> httpService;
+    if (httpServiceBinderObj != NULL) {
+        sp<IBinder> binder = ibinderForJavaObject(env, httpServiceBinderObj);
+        httpService = interface_cast<IMediaHTTPService>(binder);
+    }
+
+    status_t err = extractor->setDataSource(httpService, path, &headers);
 
     env->ReleaseStringUTFChars(pathObj, path);
     path = NULL;
@@ -839,8 +853,9 @@
     { "native_finalize", "()V",
       (void *)android_media_MediaExtractor_native_finalize },
 
-    { "setDataSource", "(Ljava/lang/String;[Ljava/lang/String;"
-                       "[Ljava/lang/String;)V",
+    { "nativeSetDataSource",
+        "(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;"
+        "[Ljava/lang/String;)V",
       (void *)android_media_MediaExtractor_setDataSource },
 
     { "setDataSource", "(Ljava/io/FileDescriptor;JJ)V",
diff --git a/media/jni/android_media_MediaExtractor.h b/media/jni/android_media_MediaExtractor.h
index ccbad8c..e5a0c16e 100644
--- a/media/jni/android_media_MediaExtractor.h
+++ b/media/jni/android_media_MediaExtractor.h
@@ -29,6 +29,7 @@
 
 namespace android {
 
+struct IMediaHTTPService;
 struct MetaData;
 struct NuMediaExtractor;
 
@@ -36,6 +37,7 @@
     JMediaExtractor(JNIEnv *env, jobject thiz);
 
     status_t setDataSource(
+            const sp<IMediaHTTPService> &httpService,
             const char *path,
             const KeyedVector<String8, String8> *headers);
 
diff --git a/media/jni/android_media_MediaHTTPConnection.cpp b/media/jni/android_media_MediaHTTPConnection.cpp
new file mode 100644
index 0000000..0e7d83e
--- /dev/null
+++ b/media/jni/android_media_MediaHTTPConnection.cpp
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2013, 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.
+ */
+
+//#define LOG_NDEBUG 0
+#define LOG_TAG "MediaHTTPConnection-JNI"
+#include <utils/Log.h>
+
+#include <binder/MemoryDealer.h>
+#include <media/stagefright/foundation/ADebug.h>
+#include <nativehelper/ScopedLocalRef.h>
+
+#include "android_media_MediaHTTPConnection.h"
+#include "android_util_Binder.h"
+
+#include "android_runtime/AndroidRuntime.h"
+#include "jni.h"
+#include "JNIHelp.h"
+
+namespace android {
+
+JMediaHTTPConnection::JMediaHTTPConnection(JNIEnv *env, jobject thiz)
+    : mClass(NULL),
+      mObject(NULL),
+      mByteArrayObj(NULL) {
+    jclass clazz = env->GetObjectClass(thiz);
+    CHECK(clazz != NULL);
+
+    mClass = (jclass)env->NewGlobalRef(clazz);
+    mObject = env->NewWeakGlobalRef(thiz);
+
+    mDealer = new MemoryDealer(kBufferSize, "MediaHTTPConnection");
+    mMemory = mDealer->allocate(kBufferSize);
+
+    ScopedLocalRef<jbyteArray> tmp(
+            env, env->NewByteArray(JMediaHTTPConnection::kBufferSize));
+
+    mByteArrayObj = (jbyteArray)env->NewGlobalRef(tmp.get());
+}
+
+JMediaHTTPConnection::~JMediaHTTPConnection() {
+    JNIEnv *env = AndroidRuntime::getJNIEnv();
+
+    env->DeleteGlobalRef(mByteArrayObj);
+    mByteArrayObj = NULL;
+    env->DeleteWeakGlobalRef(mObject);
+    mObject = NULL;
+    env->DeleteGlobalRef(mClass);
+    mClass = NULL;
+}
+
+sp<IMemory> JMediaHTTPConnection::getIMemory() {
+    return mMemory;
+}
+
+jbyteArray JMediaHTTPConnection::getByteArrayObj() {
+    return mByteArrayObj;
+}
+
+}  // namespace android
+
+using namespace android;
+
+struct fields_t {
+    jfieldID context;
+
+    jmethodID readAtMethodID;
+};
+
+static fields_t gFields;
+
+static sp<JMediaHTTPConnection> setObject(
+        JNIEnv *env, jobject thiz, const sp<JMediaHTTPConnection> &conn) {
+    sp<JMediaHTTPConnection> old =
+        (JMediaHTTPConnection *)env->GetLongField(thiz, gFields.context);
+
+    if (conn != NULL) {
+        conn->incStrong(thiz);
+    }
+    if (old != NULL) {
+        old->decStrong(thiz);
+    }
+    env->SetLongField(thiz, gFields.context, (jlong)conn.get());
+
+    return old;
+}
+
+static sp<JMediaHTTPConnection> getObject(JNIEnv *env, jobject thiz) {
+    return (JMediaHTTPConnection *)env->GetLongField(thiz, gFields.context);
+}
+
+static void android_media_MediaHTTPConnection_native_init(JNIEnv *env) {
+    ScopedLocalRef<jclass> clazz(
+            env, env->FindClass("android/media/MediaHTTPConnection"));
+    CHECK(clazz.get() != NULL);
+
+    gFields.context = env->GetFieldID(clazz.get(), "mNativeContext", "J");
+    CHECK(gFields.context != NULL);
+
+    gFields.readAtMethodID = env->GetMethodID(clazz.get(), "readAt", "(J[BI)I");
+}
+
+static void android_media_MediaHTTPConnection_native_setup(
+        JNIEnv *env, jobject thiz) {
+    sp<JMediaHTTPConnection> conn = new JMediaHTTPConnection(env, thiz);
+
+    setObject(env, thiz, conn);
+}
+
+static void android_media_MediaHTTPConnection_native_finalize(
+        JNIEnv *env, jobject thiz) {
+    setObject(env, thiz, NULL);
+}
+
+static jobject android_media_MediaHTTPConnection_native_getIMemory(
+        JNIEnv *env, jobject thiz) {
+    sp<JMediaHTTPConnection> conn = getObject(env, thiz);
+
+    return javaObjectForIBinder(env, conn->getIMemory()->asBinder());
+}
+
+static jint android_media_MediaHTTPConnection_native_readAt(
+        JNIEnv *env, jobject thiz, jlong offset, jint size) {
+    sp<JMediaHTTPConnection> conn = getObject(env, thiz);
+
+    if (size > JMediaHTTPConnection::kBufferSize) {
+        size = JMediaHTTPConnection::kBufferSize;
+    }
+
+    jbyteArray byteArrayObj = conn->getByteArrayObj();
+
+    jint n = env->CallIntMethod(
+            thiz, gFields.readAtMethodID, offset, byteArrayObj, size);
+
+    if (n > 0) {
+        env->GetByteArrayRegion(
+                byteArrayObj,
+                0,
+                n,
+                (jbyte *)conn->getIMemory()->pointer());
+    }
+
+    return n;
+}
+
+static JNINativeMethod gMethods[] = {
+    { "native_getIMemory", "()Landroid/os/IBinder;",
+      (void *)android_media_MediaHTTPConnection_native_getIMemory },
+
+    { "native_readAt", "(JI)I",
+      (void *)android_media_MediaHTTPConnection_native_readAt },
+
+    { "native_init", "()V",
+      (void *)android_media_MediaHTTPConnection_native_init },
+
+    { "native_setup", "()V",
+      (void *)android_media_MediaHTTPConnection_native_setup },
+
+    { "native_finalize", "()V",
+      (void *)android_media_MediaHTTPConnection_native_finalize },
+};
+
+int register_android_media_MediaHTTPConnection(JNIEnv *env) {
+    return AndroidRuntime::registerNativeMethods(env,
+                "android/media/MediaHTTPConnection", gMethods, NELEM(gMethods));
+}
+
diff --git a/media/jni/android_media_MediaHTTPConnection.h b/media/jni/android_media_MediaHTTPConnection.h
new file mode 100644
index 0000000..62ff678
--- /dev/null
+++ b/media/jni/android_media_MediaHTTPConnection.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2013, 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.
+ */
+
+#ifndef _ANDROID_MEDIA_MEDIAHTTPCONNECTION_H_
+#define _ANDROID_MEDIA_MEDIAHTTPCONNECTION_H_
+
+#include "jni.h"
+
+#include <media/stagefright/foundation/ABase.h>
+#include <utils/RefBase.h>
+
+namespace android {
+
+struct IMemory;
+struct MemoryDealer;
+
+struct JMediaHTTPConnection : public RefBase {
+    enum {
+        kBufferSize = 32768,
+    };
+
+    JMediaHTTPConnection(JNIEnv *env, jobject thiz);
+
+    sp<IMemory> getIMemory();
+
+    jbyteArray getByteArrayObj();
+
+protected:
+    virtual ~JMediaHTTPConnection();
+
+private:
+    jclass mClass;
+    jweak mObject;
+    jbyteArray mByteArrayObj;
+
+    sp<MemoryDealer> mDealer;
+    sp<IMemory> mMemory;
+
+    DISALLOW_EVIL_CONSTRUCTORS(JMediaHTTPConnection);
+};
+
+}  // namespace android
+
+#endif  // _ANDROID_MEDIA_MEDIAHTTPCONNECTION_H_
diff --git a/media/jni/android_media_MediaMetadataRetriever.cpp b/media/jni/android_media_MediaMetadataRetriever.cpp
index c2694f1..157dd49 100644
--- a/media/jni/android_media_MediaMetadataRetriever.cpp
+++ b/media/jni/android_media_MediaMetadataRetriever.cpp
@@ -21,7 +21,8 @@
 #include <assert.h>
 #include <utils/Log.h>
 #include <utils/threads.h>
-#include <core/SkBitmap.h>
+#include <SkBitmap.h>
+#include <media/IMediaHTTPService.h>
 #include <media/mediametadataretriever.h>
 #include <private/media/VideoFrame.h>
 
@@ -29,6 +30,7 @@
 #include "JNIHelp.h"
 #include "android_runtime/AndroidRuntime.h"
 #include "android_media_Utils.h"
+#include "android_util_Binder.h"
 
 
 using namespace android;
@@ -80,7 +82,7 @@
 
 static void
 android_media_MediaMetadataRetriever_setDataSourceAndHeaders(
-        JNIEnv *env, jobject thiz, jstring path,
+        JNIEnv *env, jobject thiz, jobject httpServiceBinderObj, jstring path,
         jobjectArray keys, jobjectArray values) {
 
     ALOGV("setDataSource");
@@ -122,10 +124,19 @@
             env, keys, values, &headersVector)) {
         return;
     }
+
+    sp<IMediaHTTPService> httpService;
+    if (httpServiceBinderObj != NULL) {
+        sp<IBinder> binder = ibinderForJavaObject(env, httpServiceBinderObj);
+        httpService = interface_cast<IMediaHTTPService>(binder);
+    }
+
     process_media_retriever_call(
             env,
             retriever->setDataSource(
-                pathStr.string(), headersVector.size() > 0 ? &headersVector : NULL),
+                httpService,
+                pathStr.string(),
+                headersVector.size() > 0 ? &headersVector : NULL),
 
             "java/lang/RuntimeException",
             "setDataSource failed");
@@ -449,7 +460,7 @@
 static JNINativeMethod nativeMethods[] = {
         {
             "_setDataSource",
-            "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V",
+            "(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V",
             (void *)android_media_MediaMetadataRetriever_setDataSourceAndHeaders
         },
 
diff --git a/media/jni/android_media_MediaMuxer.cpp b/media/jni/android_media_MediaMuxer.cpp
index 3561b06..3fef446f 100644
--- a/media/jni/android_media_MediaMuxer.cpp
+++ b/media/jni/android_media_MediaMuxer.cpp
@@ -164,7 +164,7 @@
 }
 
 static void android_media_MediaMuxer_setLocation(
-        JNIEnv *env, jclass clazz, jint nativeObject, jint latitude, jint longitude) {
+        JNIEnv *env, jclass clazz, jlong nativeObject, jint latitude, jint longitude) {
     MediaMuxer* muxer = reinterpret_cast<MediaMuxer *>(nativeObject);
 
     status_t res = muxer->setLocation(latitude, longitude);
diff --git a/media/jni/android_media_MediaPlayer.cpp b/media/jni/android_media_MediaPlayer.cpp
index 9d0d5a6..abebd48 100644
--- a/media/jni/android_media_MediaPlayer.cpp
+++ b/media/jni/android_media_MediaPlayer.cpp
@@ -20,6 +20,7 @@
 #include "utils/Log.h"
 
 #include <media/mediaplayer.h>
+#include <media/IMediaHTTPService.h>
 #include <media/MediaPlayerInterface.h>
 #include <stdio.h>
 #include <assert.h>
@@ -45,6 +46,7 @@
 #include <binder/IPCThreadState.h>
 #include <binder/IServiceManager.h>
 
+#include "android_util_Binder.h"
 // ----------------------------------------------------------------------------
 
 using namespace android;
@@ -183,7 +185,7 @@
 
 static void
 android_media_MediaPlayer_setDataSourceAndHeaders(
-        JNIEnv *env, jobject thiz, jstring path,
+        JNIEnv *env, jobject thiz, jobject httpServiceBinderObj, jstring path,
         jobjectArray keys, jobjectArray values) {
 
     sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
@@ -214,8 +216,15 @@
         return;
     }
 
+    sp<IMediaHTTPService> httpService;
+    if (httpServiceBinderObj != NULL) {
+        sp<IBinder> binder = ibinderForJavaObject(env, httpServiceBinderObj);
+        httpService = interface_cast<IMediaHTTPService>(binder);
+    }
+
     status_t opStatus =
         mp->setDataSource(
+                httpService,
                 pathStr,
                 headersVector.size() > 0? &headersVector : NULL);
 
@@ -491,6 +500,20 @@
     process_media_player_call( env, thiz, mp->setAudioStreamType((audio_stream_type_t) streamtype) , NULL, NULL );
 }
 
+static jint
+android_media_MediaPlayer_getAudioStreamType(JNIEnv *env, jobject thiz)
+{
+    sp<MediaPlayer> mp = getMediaPlayer(env, thiz);
+    if (mp == NULL ) {
+        jniThrowException(env, "java/lang/IllegalStateException", NULL);
+        return 0;
+    }
+    audio_stream_type_t streamtype;
+    process_media_player_call( env, thiz, mp->getAudioStreamType(&streamtype), NULL, NULL );
+    ALOGV("getAudioStreamType: %d (streamtype)", streamtype);
+    return (jint) streamtype;
+}
+
 static void
 android_media_MediaPlayer_setLooping(JNIEnv *env, jobject thiz, jboolean looping)
 {
@@ -726,7 +749,8 @@
 }
 
 static jint
-android_media_MediaPlayer_pullBatteryData(JNIEnv *env, jobject thiz, jobject java_reply)
+android_media_MediaPlayer_pullBatteryData(
+        JNIEnv *env, jobject /* thiz */, jobject java_reply)
 {
     sp<IBinder> binder = defaultServiceManager()->getService(String16("media.player"));
     sp<IMediaPlayerService> service = interface_cast<IMediaPlayerService>(binder);
@@ -806,58 +830,13 @@
     ;
 }
 
-static void
-android_media_MediaPlayer_updateProxyConfig(
-        JNIEnv *env, jobject thiz, jobject proxyProps)
-{
-    ALOGV("updateProxyConfig");
-    sp<MediaPlayer> thisplayer = getMediaPlayer(env, thiz);
-    if (thisplayer == NULL) {
-        return;
-    }
-
-    if (proxyProps == NULL) {
-        thisplayer->updateProxyConfig(
-                NULL /* host */, 0 /* port */, NULL /* exclusionList */);
-    } else {
-        jstring hostObj = (jstring)env->CallObjectMethod(
-                proxyProps, fields.proxyConfigGetHost);
-
-        const char *host = env->GetStringUTFChars(hostObj, NULL);
-
-        int port = env->CallIntMethod(proxyProps, fields.proxyConfigGetPort);
-
-        jstring exclusionListObj = (jstring)env->CallObjectMethod(
-                proxyProps, fields.proxyConfigGetExclusionList);
-
-        if (host != NULL && exclusionListObj != NULL) {
-            const char *exclusionList = env->GetStringUTFChars(exclusionListObj, NULL);
-
-            if (exclusionList != NULL) {
-                thisplayer->updateProxyConfig(host, port, exclusionList);
-
-                env->ReleaseStringUTFChars(exclusionListObj, exclusionList);
-                exclusionList = NULL;
-            } else {
-                thisplayer->updateProxyConfig(host, port, "");
-            }
-        } else if (host != NULL) {
-            thisplayer->updateProxyConfig(host, port, "");
-        }
-
-        if (host != NULL) {
-            env->ReleaseStringUTFChars(hostObj, host);
-            host = NULL;
-        }
-    }
-}
-
 // ----------------------------------------------------------------------------
 
 static JNINativeMethod gMethods[] = {
     {
-        "_setDataSource",
-        "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;)V",
+        "nativeSetDataSource",
+        "(Landroid/os/IBinder;Ljava/lang/String;[Ljava/lang/String;"
+        "[Ljava/lang/String;)V",
         (void *)android_media_MediaPlayer_setDataSourceAndHeaders
     },
 
@@ -876,10 +855,11 @@
     {"getDuration",         "()I",                              (void *)android_media_MediaPlayer_getDuration},
     {"_release",            "()V",                              (void *)android_media_MediaPlayer_release},
     {"_reset",              "()V",                              (void *)android_media_MediaPlayer_reset},
-    {"setAudioStreamType",  "(I)V",                             (void *)android_media_MediaPlayer_setAudioStreamType},
+    {"_setAudioStreamType", "(I)V",                             (void *)android_media_MediaPlayer_setAudioStreamType},
+    {"_getAudioStreamType", "()I",                              (void *)android_media_MediaPlayer_getAudioStreamType},
     {"setLooping",          "(Z)V",                             (void *)android_media_MediaPlayer_setLooping},
     {"isLooping",           "()Z",                              (void *)android_media_MediaPlayer_isLooping},
-    {"setVolume",           "(FF)V",                            (void *)android_media_MediaPlayer_setVolume},
+    {"_setVolume",          "(FF)V",                            (void *)android_media_MediaPlayer_setVolume},
     {"native_invoke",       "(Landroid/os/Parcel;Landroid/os/Parcel;)I",(void *)android_media_MediaPlayer_invoke},
     {"native_setMetadataFilter", "(Landroid/os/Parcel;)I",      (void *)android_media_MediaPlayer_setMetadataFilter},
     {"native_getMetadata", "(ZZLandroid/os/Parcel;)Z",          (void *)android_media_MediaPlayer_getMetadata},
@@ -888,12 +868,11 @@
     {"native_finalize",     "()V",                              (void *)android_media_MediaPlayer_native_finalize},
     {"getAudioSessionId",   "()I",                              (void *)android_media_MediaPlayer_get_audio_session_id},
     {"setAudioSessionId",   "(I)V",                             (void *)android_media_MediaPlayer_set_audio_session_id},
-    {"setAuxEffectSendLevel", "(F)V",                           (void *)android_media_MediaPlayer_setAuxEffectSendLevel},
+    {"_setAuxEffectSendLevel", "(F)V",                          (void *)android_media_MediaPlayer_setAuxEffectSendLevel},
     {"attachAuxEffect",     "(I)V",                             (void *)android_media_MediaPlayer_attachAuxEffect},
     {"native_pullBatteryData", "(Landroid/os/Parcel;)I",        (void *)android_media_MediaPlayer_pullBatteryData},
     {"native_setRetransmitEndpoint", "(Ljava/lang/String;I)I",  (void *)android_media_MediaPlayer_setRetransmitEndpoint},
     {"setNextMediaPlayer",  "(Landroid/media/MediaPlayer;)V",   (void *)android_media_MediaPlayer_setNextMediaPlayer},
-    {"updateProxyConfig", "(Landroid/net/ProxyProperties;)V", (void *)android_media_MediaPlayer_updateProxyConfig},
 };
 
 static const char* const kClassPathName = "android/media/MediaPlayer";
@@ -911,6 +890,7 @@
 extern int register_android_media_MediaCodec(JNIEnv *env);
 extern int register_android_media_MediaExtractor(JNIEnv *env);
 extern int register_android_media_MediaCodecList(JNIEnv *env);
+extern int register_android_media_MediaHTTPConnection(JNIEnv *env);
 extern int register_android_media_MediaMetadataRetriever(JNIEnv *env);
 extern int register_android_media_MediaMuxer(JNIEnv *env);
 extern int register_android_media_MediaRecorder(JNIEnv *env);
@@ -922,7 +902,7 @@
 extern int register_android_mtp_MtpDevice(JNIEnv *env);
 extern int register_android_mtp_MtpServer(JNIEnv *env);
 
-jint JNI_OnLoad(JavaVM* vm, void* reserved)
+jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
 {
     JNIEnv* env = NULL;
     jint result = -1;
@@ -1018,6 +998,11 @@
         goto bail;
     }
 
+    if (register_android_media_MediaHTTPConnection(env) < 0) {
+        ALOGE("ERROR: MediaHTTPConnection native registration failed");
+        goto bail;
+    }
+
     /* success -- return valid version number */
     result = JNI_VERSION_1_4;
 
diff --git a/media/jni/android_media_MediaProfiles.cpp b/media/jni/android_media_MediaProfiles.cpp
index 48a9132..1e5c700 100644
--- a/media/jni/android_media_MediaProfiles.cpp
+++ b/media/jni/android_media_MediaProfiles.cpp
@@ -290,75 +290,6 @@
     }
     return static_cast<jint>(levels[index]);
 }
-static jobject
-android_media_MediaProfiles_native_get_videoeditor_profile(JNIEnv *env, jobject thiz)
-{
-    ALOGV("native_get_videoeditor_profile");
-
-    int maxInputFrameWidth =
-            sProfiles->getVideoEditorCapParamByName("videoeditor.input.width.max");
-    int maxInputFrameHeight =
-            sProfiles->getVideoEditorCapParamByName("videoeditor.input.height.max");
-    int maxOutputFrameWidth =
-            sProfiles->getVideoEditorCapParamByName("videoeditor.output.width.max");
-    int maxOutputFrameHeight =
-            sProfiles->getVideoEditorCapParamByName("videoeditor.output.height.max");
-
-    // Check on the values retrieved
-    if (maxInputFrameWidth == -1 || maxInputFrameHeight == -1 ||
-        maxOutputFrameWidth == -1 || maxOutputFrameHeight == -1) {
-
-        jniThrowException(env, "java/lang/RuntimeException",\
-            "Error retrieving videoeditor profile params");
-        return NULL;
-    }
-    ALOGV("native_get_videoeditor_profile \
-        inWidth:%d inHeight:%d,outWidth:%d, outHeight:%d",\
-        maxInputFrameWidth,maxInputFrameHeight,\
-        maxOutputFrameWidth,maxOutputFrameHeight);
-
-    jclass VideoEditorProfileClazz =
-        env->FindClass("android/media/videoeditor/VideoEditorProfile");
-    jmethodID VideoEditorProfileConstructorMethodID =
-        env->GetMethodID(VideoEditorProfileClazz, "<init>", "(IIII)V");
-    return env->NewObject(VideoEditorProfileClazz,
-                          VideoEditorProfileConstructorMethodID,
-                          maxInputFrameWidth,
-                          maxInputFrameHeight,
-                          maxOutputFrameWidth,
-                          maxOutputFrameHeight);
-}
-static jint
-android_media_MediaProfiles_native_get_videoeditor_export_profile(
-    JNIEnv *env, jobject thiz, jint codec)
-{
-    ALOGV("android_media_MediaProfiles_native_get_export_profile index ");
-    int profile =0;
-    profile = sProfiles->getVideoEditorExportParamByName("videoeditor.export.profile", codec);
-    // Check the values retrieved
-    if (profile == -1) {
-        jniThrowException(env, "java/lang/RuntimeException",\
-            "Error retrieving videoeditor export profile params");
-        return -1;
-    }
-    return static_cast<jint>(profile);
-}
-
-static jint
-android_media_MediaProfiles_native_get_videoeditor_export_level(
-    JNIEnv *env, jobject thiz, jint codec)
-{
-    ALOGV("android_media_MediaProfiles_native_get_export_level");
-    int level =0;
-    level = sProfiles->getVideoEditorExportParamByName("videoeditor.export.level", codec);
-    // Check the values retrieved
-    if (level == -1) {
-        jniThrowException(env, "java/lang/RuntimeException",\
-            "Error retrieving videoeditor export level params");
-        return -1;
-    }
-    return static_cast<jint>(level);
-}
 static JNINativeMethod gMethodsForEncoderCapabilitiesClass[] = {
     {"native_init",                            "()V",                    (void *)android_media_MediaProfiles_native_init},
     {"native_get_num_file_formats",            "()I",                    (void *)android_media_MediaProfiles_native_get_num_file_formats},
@@ -396,19 +327,10 @@
     {"native_get_image_encoding_quality_level","(II)I",                   (void *)android_media_MediaProfiles_native_get_image_encoding_quality_level},
 };
 
-static JNINativeMethod gMethodsForVideoEditorProfileClass[] = {
-    {"native_init",                            "()V",         (void *)android_media_MediaProfiles_native_init},
-    {"native_get_videoeditor_profile", "()Landroid/media/videoeditor/VideoEditorProfile;", (void *)android_media_MediaProfiles_native_get_videoeditor_profile},
-    {"native_get_videoeditor_export_profile", "(I)I", (void *)android_media_MediaProfiles_native_get_videoeditor_export_profile},
-    {"native_get_videoeditor_export_level", "(I)I", (void *)android_media_MediaProfiles_native_get_videoeditor_export_level},
-};
-
 static const char* const kEncoderCapabilitiesClassPathName = "android/media/EncoderCapabilities";
 static const char* const kDecoderCapabilitiesClassPathName = "android/media/DecoderCapabilities";
 static const char* const kCamcorderProfileClassPathName = "android/media/CamcorderProfile";
 static const char* const kCameraProfileClassPathName = "android/media/CameraProfile";
-static const char* const kVideoEditorProfileClassPathName =
-    "android/media/videoeditor/VideoEditorProfile";
 
 // This function only registers the native methods, and is called from
 // JNI_OnLoad in android_media_MediaPlayer.cpp
@@ -434,11 +356,6 @@
                gMethodsForCameraProfileClass,
                NELEM(gMethodsForCameraProfileClass));
 
-    int ret5 = AndroidRuntime::registerNativeMethods(env,
-               kVideoEditorProfileClassPathName,
-               gMethodsForVideoEditorProfileClass,
-               NELEM(gMethodsForVideoEditorProfileClass));
-
     // Success if all return values from above are 0
-    return (ret1 || ret2 || ret3 || ret4 || ret5);
+    return (ret1 || ret2 || ret3 || ret4);
 }
diff --git a/media/jni/android_media_MediaRecorder.cpp b/media/jni/android_media_MediaRecorder.cpp
index b74d0fb3..1685a44 100644
--- a/media/jni/android_media_MediaRecorder.cpp
+++ b/media/jni/android_media_MediaRecorder.cpp
@@ -346,6 +346,26 @@
     return (jint) result;
 }
 
+static jobject
+android_media_MediaRecorder_getSurface(JNIEnv *env, jobject thiz)
+{
+    ALOGV("getSurface");
+    sp<MediaRecorder> mr = getMediaRecorder(env, thiz);
+
+    sp<IGraphicBufferProducer> bufferProducer = mr->querySurfaceMediaSourceFromMediaServer();
+    if (bufferProducer == NULL) {
+        jniThrowException(
+                env,
+                "java/lang/IllegalStateException",
+                "failed to get surface");
+        return NULL;
+    }
+
+    // Wrap the IGBP in a Java-language Surface.
+    return android_view_Surface_createFromIGraphicBufferProducer(env,
+            bufferProducer);
+}
+
 static void
 android_media_MediaRecorder_start(JNIEnv *env, jobject thiz)
 {
@@ -472,6 +492,7 @@
     {"setMaxDuration",       "(I)V",                            (void *)android_media_MediaRecorder_setMaxDuration},
     {"setMaxFileSize",       "(J)V",                            (void *)android_media_MediaRecorder_setMaxFileSize},
     {"_prepare",             "()V",                             (void *)android_media_MediaRecorder_prepare},
+    {"getSurface",           "()Landroid/view/Surface;",        (void *)android_media_MediaRecorder_getSurface},
     {"getMaxAmplitude",      "()I",                             (void *)android_media_MediaRecorder_native_getMaxAmplitude},
     {"start",                "()V",                             (void *)android_media_MediaRecorder_start},
     {"stop",                 "()V",                             (void *)android_media_MediaRecorder_stop},
diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp
index f1949c0..d781336 100644
--- a/media/jni/android_mtp_MtpDatabase.cpp
+++ b/media/jni/android_mtp_MtpDatabase.cpp
@@ -69,6 +69,8 @@
 static jmethodID method_sessionEnded;
 
 static jfieldID field_context;
+static jfieldID field_batteryLevel;
+static jfieldID field_batteryScale;
 
 // MtpPropertyList fields
 static jfieldID field_mCount;
@@ -528,68 +530,75 @@
 
 MtpResponseCode MyMtpDatabase::getDevicePropertyValue(MtpDeviceProperty property,
                                             MtpDataPacket& packet) {
-    int         type;
-
-    if (!getDevicePropertyInfo(property, type))
-        return MTP_RESPONSE_DEVICE_PROP_NOT_SUPPORTED;
-
     JNIEnv* env = AndroidRuntime::getJNIEnv();
-    jint result = env->CallIntMethod(mDatabase, method_getDeviceProperty,
-                (jint)property, mLongBuffer, mStringBuffer);
-    if (result != MTP_RESPONSE_OK) {
+
+    if (property == MTP_DEVICE_PROPERTY_BATTERY_LEVEL) {
+        // special case - implemented here instead of Java
+        packet.putUInt8((uint8_t)env->GetIntField(mDatabase, field_batteryLevel));
+        return MTP_RESPONSE_OK;
+    } else {
+        int type;
+
+        if (!getDevicePropertyInfo(property, type))
+            return MTP_RESPONSE_DEVICE_PROP_NOT_SUPPORTED;
+
+        jint result = env->CallIntMethod(mDatabase, method_getDeviceProperty,
+                    (jint)property, mLongBuffer, mStringBuffer);
+        if (result != MTP_RESPONSE_OK) {
+            checkAndClearExceptionFromCallback(env, __FUNCTION__);
+            return result;
+        }
+
+        jlong* longValues = env->GetLongArrayElements(mLongBuffer, 0);
+        jlong longValue = longValues[0];
+        env->ReleaseLongArrayElements(mLongBuffer, longValues, 0);
+
+        switch (type) {
+            case MTP_TYPE_INT8:
+                packet.putInt8(longValue);
+                break;
+            case MTP_TYPE_UINT8:
+                packet.putUInt8(longValue);
+                break;
+            case MTP_TYPE_INT16:
+                packet.putInt16(longValue);
+                break;
+            case MTP_TYPE_UINT16:
+                packet.putUInt16(longValue);
+                break;
+            case MTP_TYPE_INT32:
+                packet.putInt32(longValue);
+                break;
+            case MTP_TYPE_UINT32:
+                packet.putUInt32(longValue);
+                break;
+            case MTP_TYPE_INT64:
+                packet.putInt64(longValue);
+                break;
+            case MTP_TYPE_UINT64:
+                packet.putUInt64(longValue);
+                break;
+            case MTP_TYPE_INT128:
+                packet.putInt128(longValue);
+                break;
+            case MTP_TYPE_UINT128:
+                packet.putInt128(longValue);
+                break;
+            case MTP_TYPE_STR:
+            {
+                jchar* str = env->GetCharArrayElements(mStringBuffer, 0);
+                packet.putString(str);
+                env->ReleaseCharArrayElements(mStringBuffer, str, 0);
+                break;
+             }
+            default:
+                ALOGE("unsupported type in getDevicePropertyValue\n");
+                return MTP_RESPONSE_INVALID_DEVICE_PROP_FORMAT;
+        }
+
         checkAndClearExceptionFromCallback(env, __FUNCTION__);
-        return result;
+        return MTP_RESPONSE_OK;
     }
-
-    jlong* longValues = env->GetLongArrayElements(mLongBuffer, 0);
-    jlong longValue = longValues[0];
-    env->ReleaseLongArrayElements(mLongBuffer, longValues, 0);
-
-    switch (type) {
-        case MTP_TYPE_INT8:
-            packet.putInt8(longValue);
-            break;
-        case MTP_TYPE_UINT8:
-            packet.putUInt8(longValue);
-            break;
-        case MTP_TYPE_INT16:
-            packet.putInt16(longValue);
-            break;
-        case MTP_TYPE_UINT16:
-            packet.putUInt16(longValue);
-            break;
-        case MTP_TYPE_INT32:
-            packet.putInt32(longValue);
-            break;
-        case MTP_TYPE_UINT32:
-            packet.putUInt32(longValue);
-            break;
-        case MTP_TYPE_INT64:
-            packet.putInt64(longValue);
-            break;
-        case MTP_TYPE_UINT64:
-            packet.putUInt64(longValue);
-            break;
-        case MTP_TYPE_INT128:
-            packet.putInt128(longValue);
-            break;
-        case MTP_TYPE_UINT128:
-            packet.putInt128(longValue);
-            break;
-        case MTP_TYPE_STR:
-        {
-            jchar* str = env->GetCharArrayElements(mStringBuffer, 0);
-            packet.putString(str);
-            env->ReleaseCharArrayElements(mStringBuffer, str, 0);
-            break;
-         }
-        default:
-            ALOGE("unsupported type in getDevicePropertyValue\n");
-            return MTP_RESPONSE_INVALID_DEVICE_PROP_FORMAT;
-    }
-
-    checkAndClearExceptionFromCallback(env, __FUNCTION__);
-    return MTP_RESPONSE_OK;
 }
 
 MtpResponseCode MyMtpDatabase::setDevicePropertyValue(MtpDeviceProperty property,
@@ -925,6 +934,7 @@
     {   MTP_DEVICE_PROPERTY_SYNCHRONIZATION_PARTNER,    MTP_TYPE_STR },
     {   MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME,       MTP_TYPE_STR },
     {   MTP_DEVICE_PROPERTY_IMAGE_SIZE,                 MTP_TYPE_STR },
+    {   MTP_DEVICE_PROPERTY_BATTERY_LEVEL,              MTP_TYPE_UINT8 },
 };
 
 bool MyMtpDatabase::getObjectPropertyInfo(MtpObjectProperty property, int& type) {
@@ -992,6 +1002,22 @@
 
 MtpProperty* MyMtpDatabase::getObjectPropertyDesc(MtpObjectProperty property,
                                             MtpObjectFormat format) {
+    static const int channelEnum[] = {
+                                        1,  // mono
+                                        2,  // stereo
+                                        3,  // 2.1
+                                        4,  // 3
+                                        5,  // 3.1
+                                        6,  // 4
+                                        7,  // 4.1
+                                        8,  // 5
+                                        9,  // 5.1
+                                    };
+    static const int bitrateEnum[] = {
+                                        1,  // fixed rate
+                                        2,  // variable rate
+                                     };
+
     MtpProperty* result = NULL;
     switch (property) {
         case MTP_PROPERTY_OBJECT_FORMAT:
@@ -1005,6 +1031,7 @@
         case MTP_PROPERTY_STORAGE_ID:
         case MTP_PROPERTY_PARENT_OBJECT:
         case MTP_PROPERTY_DURATION:
+        case MTP_PROPERTY_AUDIO_WAVE_CODEC:
             result = new MtpProperty(property, MTP_TYPE_UINT32);
             break;
         case MTP_PROPERTY_OBJECT_SIZE:
@@ -1033,6 +1060,22 @@
             // We allow renaming files and folders
             result = new MtpProperty(property, MTP_TYPE_STR, true);
             break;
+        case MTP_PROPERTY_BITRATE_TYPE:
+             result = new MtpProperty(property, MTP_TYPE_UINT16);
+            result->setFormEnum(bitrateEnum, sizeof(bitrateEnum)/sizeof(bitrateEnum[0]));
+            break;
+        case MTP_PROPERTY_AUDIO_BITRATE:
+            result = new MtpProperty(property, MTP_TYPE_UINT32);
+            result->setFormRange(1, 1536000, 1);
+            break;
+        case MTP_PROPERTY_NUMBER_OF_CHANNELS:
+            result = new MtpProperty(property, MTP_TYPE_UINT16);
+            result->setFormEnum(channelEnum, sizeof(channelEnum)/sizeof(channelEnum[0]));
+            break;
+        case MTP_PROPERTY_SAMPLE_RATE:
+            result = new MtpProperty(property, MTP_TYPE_UINT32);
+            result->setFormRange(8000, 48000, 1);
+            break;
     }
 
     return result;
@@ -1048,7 +1091,7 @@
         case MTP_DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME:
             writable = true;
             // fall through
-        case MTP_DEVICE_PROPERTY_IMAGE_SIZE:
+        case MTP_DEVICE_PROPERTY_IMAGE_SIZE: {
             result = new MtpProperty(property, MTP_TYPE_STR, writable);
 
             // get current value
@@ -1065,6 +1108,12 @@
                 ALOGE("unable to read device property, response: %04X", ret);
             }
             break;
+        }
+        case MTP_DEVICE_PROPERTY_BATTERY_LEVEL:
+            result = new MtpProperty(property, MTP_TYPE_UINT8);
+            result->setFormRange(0, env->GetIntField(mDatabase, field_batteryScale), 1);
+            result->mCurrentValue.u.u8 = (uint8_t)env->GetIntField(mDatabase, field_batteryLevel);
+            break;
     }
 
     checkAndClearExceptionFromCallback(env, __FUNCTION__);
@@ -1236,6 +1285,16 @@
         ALOGE("Can't find MtpDatabase.mNativeContext");
         return -1;
     }
+    field_batteryLevel = env->GetFieldID(clazz, "mBatteryLevel", "I");
+    if (field_batteryLevel == NULL) {
+        ALOGE("Can't find MtpDatabase.mBatteryLevel");
+        return -1;
+    }
+    field_batteryScale = env->GetFieldID(clazz, "mBatteryScale", "I");
+    if (field_batteryScale == NULL) {
+        ALOGE("Can't find MtpDatabase.mBatteryScale");
+        return -1;
+    }
 
     // now set up fields for MtpPropertyList class
     clazz = env->FindClass("android/mtp/MtpPropertyList");
diff --git a/media/jni/android_mtp_MtpServer.cpp b/media/jni/android_mtp_MtpServer.cpp
index 9d7f1c2..2f90dfe 100644
--- a/media/jni/android_mtp_MtpServer.cpp
+++ b/media/jni/android_mtp_MtpServer.cpp
@@ -118,6 +118,18 @@
 }
 
 static void
+android_mtp_MtpServer_send_device_property_changed(JNIEnv *env, jobject thiz, jint property)
+{
+    Mutex::Autolock autoLock(sMutex);
+
+    MtpServer* server = getMtpServer(env, thiz);
+    if (server)
+        server->sendDevicePropertyChanged(property);
+    else
+        ALOGE("server is null in send_object_removed");
+}
+
+static void
 android_mtp_MtpServer_add_storage(JNIEnv *env, jobject thiz, jobject jstorage)
 {
     Mutex::Autolock autoLock(sMutex);
@@ -174,6 +186,8 @@
     {"native_cleanup",              "()V",  (void *)android_mtp_MtpServer_cleanup},
     {"native_send_object_added",    "(I)V", (void *)android_mtp_MtpServer_send_object_added},
     {"native_send_object_removed",  "(I)V", (void *)android_mtp_MtpServer_send_object_removed},
+    {"native_send_device_property_changed",  "(I)V",
+                                    (void *)android_mtp_MtpServer_send_device_property_changed},
     {"native_add_storage",          "(Landroid/mtp/MtpStorage;)V",
                                             (void *)android_mtp_MtpServer_add_storage},
     {"native_remove_storage",       "(I)V", (void *)android_mtp_MtpServer_remove_storage},
diff --git a/media/jni/mediaeditor/Android.mk b/media/jni/mediaeditor/Android.mk
deleted file mode 100644
index 5d2378d..0000000
--- a/media/jni/mediaeditor/Android.mk
+++ /dev/null
@@ -1,82 +0,0 @@
-#
-# Copyright (C) 2011 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.
-#
-
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
-    VideoEditorMain.cpp \
-    VideoEditorClasses.cpp \
-    VideoEditorOsal.cpp \
-    VideoEditorJava.cpp \
-    VideoEditorPropertiesMain.cpp \
-    VideoEditorThumbnailMain.cpp  \
-    VideoBrowserMain.c
-
-LOCAL_C_INCLUDES += \
-    $(TOP)/frameworks/base/core/jni \
-    $(TOP)/frameworks/base/include \
-    $(TOP)/frameworks/base/include/media \
-    $(TOP)/frameworks/base/media/libmediaplayerservice \
-    $(TOP)/frameworks/base/media/libstagefright \
-    $(TOP)/frameworks/base/media/libstagefright/include \
-    $(TOP)/frameworks/base/media/libstagefright/rtsp \
-    $(JNI_H_INCLUDE) \
-    $(call include-path-for, corecg graphics) \
-    $(TOP)/frameworks/native/include/media/editor \
-    $(TOP)/frameworks/base/core/jni/mediaeditor \
-    $(TOP)/frameworks/av/libvideoeditor/vss/inc \
-    $(TOP)/frameworks/av/libvideoeditor/vss/common/inc \
-    $(TOP)/frameworks/av/libvideoeditor/vss/mcs/inc \
-    $(TOP)/frameworks/av/libvideoeditor/vss/stagefrightshells/inc \
-    $(TOP)/frameworks/av/libvideoeditor/lvpp \
-    $(TOP)/frameworks/av/libvideoeditor/osal/inc \
-    $(TOP)/frameworks/native/include/media/openmax
-
-LOCAL_SHARED_LIBRARIES := \
-    libandroid_runtime \
-    libaudioutils \
-    libbinder \
-    libcutils \
-    liblog \
-    libdl \
-    libgui \
-    libmedia \
-    libnativehelper \
-    libstagefright \
-    libstagefright_foundation \
-    libstagefright_omx \
-    libutils \
-    libvideoeditor_core \
-    libvideoeditor_osal \
-    libvideoeditor_videofilters \
-    libvideoeditorplayer \
-
-
-LOCAL_CFLAGS += \
-    -DUSE_STAGEFRIGHT_CODECS \
-    -DUSE_STAGEFRIGHT_AUDIODEC \
-    -DUSE_STAGEFRIGHT_VIDEODEC \
-    -DUSE_STAGEFRIGHT_AUDIOENC \
-    -DUSE_STAGEFRIGHT_VIDEOENC \
-    -DUSE_STAGEFRIGHT_READERS \
-    -DUSE_STAGEFRIGHT_3GPP_READER
-
-LOCAL_MODULE:= libvideoeditor_jni
-
-LOCAL_MODULE_TAGS := optional
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/media/jni/mediaeditor/NOTICE b/media/jni/mediaeditor/NOTICE
deleted file mode 100644
index c5b1efa..0000000
--- a/media/jni/mediaeditor/NOTICE
+++ /dev/null
@@ -1,190 +0,0 @@
-
-   Copyright (c) 2005-2008, 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.
-
-   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.
-
-
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
-
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
diff --git a/media/jni/mediaeditor/VideoBrowserInternal.h b/media/jni/mediaeditor/VideoBrowserInternal.h
deleted file mode 100644
index f4eaab8..0000000
--- a/media/jni/mediaeditor/VideoBrowserInternal.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-
-#ifndef VIDEO_BROWSER_INTERNAL_H
-#define VIDEO_BROWSER_INTERNAL_H
-
-#include "VideoBrowserMain.h"
-
-#include "M4READER_Common.h"
-#include "M4DECODER_Common.h"
-
-
-#define VIDEO_BROWSER_BGR565
-
-/*---------------------------- MACROS ----------------------------*/
-#define CHECK_PTR(fct, p, err, errValue) \
-{ \
-    if (M4OSA_NULL == p) \
-    { \
-        err = errValue ; \
-        M4OSA_TRACE1_1("" #fct "(L%d): " #p " is NULL, returning " #errValue "", __LINE__) ; \
-        goto fct##_cleanUp; \
-    } \
-}
-
-#define CHECK_ERR(fct, err) \
-{ \
-    if (M4OSA_ERR_IS_ERROR(err)) \
-    { \
-        M4OSA_TRACE1_2("" #fct "(L%d): ERROR 0x%.8x returned", __LINE__,err) ; \
-        goto fct##_cleanUp; \
-    } \
-    else if (M4OSA_ERR_IS_WARNING(err)) \
-    { \
-        M4OSA_TRACE2_2("" #fct "(L%d): WARNING 0x%.8x returned", __LINE__,err) ; \
-    } \
-}
-
-#define CHECK_STATE(fct, state, pC) \
-{ \
-    if (state != pC->m_state) \
-    { \
-        M4OSA_TRACE1_1("" #fct " called in bad state %d", pC->m_state) ; \
-        err = M4ERR_STATE ; \
-        goto fct##_cleanUp; \
-    } \
-}
-
-#define SAFE_FREE(p) \
-{ \
-    if (M4OSA_NULL != p) \
-    { \
-        free(p) ; \
-        p = M4OSA_NULL ; \
-    } \
-}
-
-/*--- Video Browser state ---*/
-typedef enum
-{
-    VideoBrowser_kVBCreating,
-    VideoBrowser_kVBOpened,
-    VideoBrowser_kVBBrowsing
-} VideoBrowser_videoBrowerState;
-
-
-/*--- Video Browser execution context. ---*/
-typedef struct
-{
-    VideoBrowser_videoBrowerState       m_state ;
-    VideoBrowser_videoBrowerDrawMode    m_drawmode;
-
-    M4OSA_Context                       g_hbmp2;
-    M4OSA_Context                       dc;
-    M4OSA_Int16*                        g_bmPixels2;
-
-    /*--- Reader parameters ---*/
-    M4OSA_FileReadPointer               m_fileReadPtr;
-    M4READER_GlobalInterface*           m_3gpReader ;
-    M4READER_DataInterface*             m_3gpData ;
-    M4READER_MediaType                  m_mediaType ;
-    M4OSA_Context                       m_pReaderCtx ;
-
-    M4_StreamHandler*                   m_pStreamHandler ;
-    M4_AccessUnit                       m_accessUnit ;
-
-    /*--- Decoder parameters ---*/
-    M4DECODER_VideoInterface*           m_pDecoder ;
-    M4OSA_Context                       m_pDecoderCtx ;
-
-    /*--- Common display parameters ---*/
-    M4OSA_UInt32                        m_x ;
-    M4OSA_UInt32                        m_y ;
-    M4VIFI_ImagePlane                   m_outputPlane[3] ;
-
-    /*--- Current browsing time ---*/
-    M4OSA_UInt32                        m_currentCTS ;
-
-    /*--- Platform dependent display parameters ---*/
-    M4OSA_Context                       m_pCoreContext ;
-
-    /*--- Callback function settings ---*/
-    videoBrowser_Callback               m_pfCallback;
-    M4OSA_Void*                         m_pCallbackUserData;
-
-    /*--- Codec Loader core context ---*/
-    M4OSA_Context                       m_pCodecLoaderContext;
-
-    /*--- Required color type ---*/
-    VideoBrowser_VideoColorType         m_frameColorType;
-
-} VideoBrowserContext;
-
-#endif /* VIDEO_BROWSER_INTERNAL_H */
diff --git a/media/jni/mediaeditor/VideoBrowserMain.c b/media/jni/mediaeditor/VideoBrowserMain.c
deleted file mode 100644
index c6c6000..0000000
--- a/media/jni/mediaeditor/VideoBrowserMain.c
+++ /dev/null
@@ -1,562 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-#include "VideoEditorVideoDecoder.h"
-#include "VideoEditor3gpReader.h"
-
-#include <utils/Log.h>
-#include "VideoBrowserInternal.h"
-#include "LVOSA_FileReader_optim.h"
-
-//#define M4OSA_TRACE_LEVEL 1
-#if (M4OSA_TRACE_LEVEL >= 1)
-#undef M4OSA_TRACE1_0
-#undef M4OSA_TRACE1_1
-#undef M4OSA_TRACE1_2
-#undef M4OSA_TRACE1_3
-
-#define M4OSA_TRACE1_0(a)       __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a);
-#define M4OSA_TRACE1_1(a,b)     __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b);
-#define M4OSA_TRACE1_2(a,b,c)   __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b,c);
-#define M4OSA_TRACE1_3(a,b,c,d) __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b,c,d);
-#endif
-
-/******************************************************************************
- * M4OSA_ERR     videoBrowserSetWindow(
- *          M4OSA_Context pContext, M4OSA_UInt32 x,
- *          M4OSA_UInt32 y, M4OSA_UInt32 dx, M4OSA_UInt32 dy);
- * @brief        This function sets the size and the position of the display.
- * @param        pContext       (IN) : Video Browser context
- * @param        pPixelArray    (IN) : Array to hold the video frame.
- * @param        x              (IN) : Horizontal position of the top left
- *                                     corner
- * @param        y              (IN) : Vertical position of the top left corner
- * @param        dx             (IN) : Width of the display window
- * @param        dy             (IN) : Height of the video window
- * @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
- ******************************************************************************/
-M4OSA_ERR videoBrowserSetWindow(
-        M4OSA_Context pContext,
-        M4OSA_Int32 *pPixelArray,
-        M4OSA_UInt32 x, M4OSA_UInt32 y,
-        M4OSA_UInt32 dx, M4OSA_UInt32 dy)
-{
-    VideoBrowserContext* pC = (VideoBrowserContext*)pContext;
-    M4OSA_ERR err = M4NO_ERROR;
-
-    M4OSA_TRACE2_5("videoBrowserSetWindow: entering with 0x%x %d %d %d %d ",
-            pContext, x, y, dx, dy);
-
-    /*--- Sanity checks ---*/
-    CHECK_PTR(videoBrowserSetWindow, pContext, err, M4ERR_PARAMETER);
-    CHECK_PTR(videoBrowserSetWindow, pPixelArray, err, M4ERR_PARAMETER);
-    CHECK_STATE(videoBrowserSetWindow, VideoBrowser_kVBOpened, pC);
-
-    pC->m_outputPlane[0].u_topleft = 0;
-
-    pC->m_outputPlane[0].u_height = dy;
-    pC->m_outputPlane[0].u_width = dx;
-    pC->m_x = x;
-    pC->m_y = y;
-
-    if (pC->m_frameColorType == VideoBrowser_kGB565) {
-        pC->m_outputPlane[0].u_stride = pC->m_outputPlane[0].u_width << 1;
-        pC->m_outputPlane[0].pac_data = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc(
-            pC->m_outputPlane[0].u_stride * pC->m_outputPlane[0].u_height,
-            VIDEOBROWSER, (M4OSA_Char *)"output plane");
-
-        CHECK_PTR(videoBrowserSetWindow,
-            pC->m_outputPlane[0].pac_data, err, M4ERR_ALLOC);
-    }
-    else if (pC->m_frameColorType == VideoBrowser_kYUV420) {
-        pC->m_outputPlane[0].u_stride = pC->m_outputPlane[0].u_width;
-        pC->m_outputPlane[1].u_height = pC->m_outputPlane[0].u_height >> 1;
-        pC->m_outputPlane[1].u_width = pC->m_outputPlane[0].u_width >> 1;
-        pC->m_outputPlane[1].u_topleft = 0;
-        pC->m_outputPlane[1].u_stride = pC->m_outputPlane[1].u_width;
-
-        pC->m_outputPlane[2].u_height = pC->m_outputPlane[0].u_height >> 1;
-        pC->m_outputPlane[2].u_width = pC->m_outputPlane[0].u_width >> 1;
-        pC->m_outputPlane[2].u_topleft = 0;
-        pC->m_outputPlane[2].u_stride = pC->m_outputPlane[2].u_width;
-
-        pC->m_outputPlane[0].pac_data = (M4OSA_UInt8*)pPixelArray;
-
-        CHECK_PTR(videoBrowserSetWindow,
-            pC->m_outputPlane[0].pac_data, err, M4ERR_ALLOC);
-
-        pC->m_outputPlane[1].pac_data =
-            pC->m_outputPlane[0].pac_data +
-            (pC->m_outputPlane[0].u_stride * pC->m_outputPlane[0].u_height);
-
-        pC->m_outputPlane[2].pac_data =
-            pC->m_outputPlane[1].pac_data +
-            (pC->m_outputPlane[1].u_stride * pC->m_outputPlane[1].u_height);
-    }
-
-
-    M4OSA_TRACE2_0("videoBrowserSetWindow returned NO ERROR");
-    return M4NO_ERROR;
-
-videoBrowserSetWindow_cleanUp:
-
-    M4OSA_TRACE2_1("videoBrowserSetWindow returned 0x%x", err);
-    return err;
-}
-
-/******************************************************************************
-* @brief  This function allocates the resources needed for browsing a video file
-* @param   ppContext     (OUT): Pointer on a context filled by this function.
-* @param   pURL          (IN) : Path of File to browse
-* @param   DrawMode      (IN) : Indicate which method is used to draw (Direct draw etc...)
-* @param   pfCallback    (IN) : Callback function to be called when a frame must be displayed
-* @param   pCallbackData (IN) : User defined data that will be passed as parameter of the callback
-* @param   clrType       (IN) : Required color type.
-* @return  M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
-******************************************************************************/
-M4OSA_ERR videoBrowserCreate(
-        M4OSA_Context* ppContext,
-        M4OSA_Char* pURL,
-        M4OSA_UInt32 DrawMode,
-        M4OSA_FileReadPointer* ptrF,
-        videoBrowser_Callback pfCallback,
-        M4OSA_Void* pCallbackData,
-        VideoBrowser_VideoColorType clrType)
-{
-    VideoBrowserContext* pContext = M4OSA_NULL;
-    M4READER_MediaFamily mediaFamily = M4READER_kMediaFamilyUnknown;
-    M4_StreamHandler* pStreamHandler = M4OSA_NULL;
-    M4_VideoStreamHandler* pVideoStreamHandler = M4OSA_NULL;
-    M4DECODER_VideoType decoderType;
-    M4DECODER_OutputFilter FilterOption;
-
-    M4OSA_Bool deb = M4OSA_TRUE;
-    M4OSA_ERR err = M4NO_ERROR;
-
-    M4OSA_TRACE1_2(
-        "videoBrowserCreate: entering with 0x%x 0x%x", ppContext, pURL);
-
-    /*--- Sanity checks ---*/
-    CHECK_PTR(videoBrowserCreate, ppContext, err, M4ERR_PARAMETER);
-    *ppContext = M4OSA_NULL ;
-    CHECK_PTR(videoBrowserCreate, pURL,  err, M4ERR_PARAMETER);
-
-    /*--- Create context ---*/
-    pContext = (VideoBrowserContext*)M4OSA_32bitAlignedMalloc(
-            sizeof(VideoBrowserContext),
-            VIDEOBROWSER, (M4OSA_Char*)"Video browser context");
-
-    CHECK_PTR(videoBrowserCreate, pContext,err, M4ERR_ALLOC);
-    memset((void *)pContext, 0,sizeof(VideoBrowserContext));
-
-    /*--- Initialize the context parameters ---*/
-    pContext->m_state = VideoBrowser_kVBCreating ;
-    pContext->m_frameColorType = clrType;
-
-    /*--- Copy the file reader functions ---*/
-    memcpy((void *)&pContext->m_fileReadPtr,
-                 (void *)ptrF,
-                 sizeof(M4OSA_FileReadPointer)) ;
-
-    /* PR#SP00013 DGR bug 13 : first frame is not visible */
-    pContext->m_drawmode = DrawMode;
-
-
-    /* Retrieve the 3gp reader interface */
-    VideoEditor3gpReader_getInterface(&pContext->m_mediaType,
-        &pContext->m_3gpReader, &pContext->m_3gpData);
-
-    CHECK_PTR(videoBrowserCreate, pContext->m_3gpReader,  err, M4ERR_ALLOC);
-    CHECK_PTR(videoBrowserCreate, pContext->m_3gpData,    err, M4ERR_ALLOC);
-
-    /*--- Create the file reader ---*/
-    err = pContext->m_3gpReader->m_pFctCreate(&pContext->m_pReaderCtx);
-    CHECK_ERR(videoBrowserCreate, err);
-    CHECK_PTR(videoBrowserCreate, pContext->m_pReaderCtx, err, M4ERR_ALLOC);
-    pContext->m_3gpData->m_readerContext = pContext->m_pReaderCtx;
-
-    /*--- Set the OSAL file reader functions ---*/
-    err = pContext->m_3gpReader->m_pFctSetOption(
-            pContext->m_pReaderCtx,
-            M4READER_kOptionID_SetOsaFileReaderFctsPtr,
-            (M4OSA_DataOption)(&pContext->m_fileReadPtr));
-
-    CHECK_ERR(videoBrowserCreate, err) ;
-
-    /*--- Open the file ---*/
-    err = pContext->m_3gpReader->m_pFctOpen(pContext->m_pReaderCtx, pURL);
-    CHECK_ERR(videoBrowserCreate, err) ;
-
-    /*--- Try to find a video stream ---*/
-    while (err == M4NO_ERROR)
-    {
-        err = pContext->m_3gpReader->m_pFctGetNextStream(
-                pContext->m_pReaderCtx, &mediaFamily, &pStreamHandler);
-
-        /*in case we found a bifs stream or something else...*/
-        if ((err == (M4OSA_UInt32)M4ERR_READER_UNKNOWN_STREAM_TYPE) ||
-            (err == (M4OSA_UInt32)M4WAR_TOO_MUCH_STREAMS))
-        {
-            err = M4NO_ERROR;
-            continue;
-        }
-
-        if (err != M4WAR_NO_MORE_STREAM)
-        {
-            if (M4READER_kMediaFamilyVideo != mediaFamily)
-            {
-                err = M4NO_ERROR;
-                continue;
-            }
-
-            pContext->m_pStreamHandler = pStreamHandler;
-
-            err = pContext->m_3gpReader->m_pFctReset(
-                    pContext->m_pReaderCtx, pContext->m_pStreamHandler);
-
-            CHECK_ERR(videoBrowserCreate, err);
-
-            err = pContext->m_3gpReader->m_pFctFillAuStruct(
-                    pContext->m_pReaderCtx,
-                    pContext->m_pStreamHandler,
-                    &pContext->m_accessUnit);
-
-            CHECK_ERR(videoBrowserCreate, err);
-
-            pVideoStreamHandler =
-                (M4_VideoStreamHandler*)pContext->m_pStreamHandler;
-
-            switch (pContext->m_pStreamHandler->m_streamType)
-            {
-                case M4DA_StreamTypeVideoMpeg4:
-                case M4DA_StreamTypeVideoH263:
-                {
-                    pContext->m_pCodecLoaderContext = M4OSA_NULL;
-                    decoderType = M4DECODER_kVideoTypeMPEG4;
-
-#ifdef USE_SOFTWARE_DECODER
-                        err = VideoEditorVideoDecoder_getSoftwareInterface_MPEG4(
-                            &decoderType, &pContext->m_pDecoder);
-#else
-                        err = VideoEditorVideoDecoder_getInterface_MPEG4(
-                            &decoderType, (void **)&pContext->m_pDecoder);
-#endif
-                    CHECK_ERR(videoBrowserCreate, err) ;
-
-                    err = pContext->m_pDecoder->m_pFctCreate(
-                            &pContext->m_pDecoderCtx,
-                            pContext->m_pStreamHandler,
-                            pContext->m_3gpReader,
-                            pContext->m_3gpData,
-                            &pContext->m_accessUnit,
-                            pContext->m_pCodecLoaderContext) ;
-
-                    CHECK_ERR(videoBrowserCreate, err) ;
-                }
-                break;
-
-                case M4DA_StreamTypeVideoMpeg4Avc:
-                {
-                    pContext->m_pCodecLoaderContext = M4OSA_NULL;
-
-                    decoderType = M4DECODER_kVideoTypeAVC;
-
-#ifdef USE_SOFTWARE_DECODER
-                        err = VideoEditorVideoDecoder_getSoftwareInterface_H264(
-                            &decoderType, &pContext->m_pDecoder);
-#else
-                        err = VideoEditorVideoDecoder_getInterface_H264(
-                            &decoderType, (void **)&pContext->m_pDecoder);
-#endif
-                   CHECK_ERR(videoBrowserCreate, err) ;
-
-                    err = pContext->m_pDecoder->m_pFctCreate(
-                            &pContext->m_pDecoderCtx,
-                            pContext->m_pStreamHandler,
-                            pContext->m_3gpReader,
-                            pContext->m_3gpData,
-                            &pContext->m_accessUnit,
-                            pContext->m_pCodecLoaderContext) ;
-
-                    CHECK_ERR(videoBrowserCreate, err) ;
-                }
-                break;
-
-                default:
-                    err = M4ERR_VB_MEDIATYPE_NOT_SUPPORTED;
-                    goto videoBrowserCreate_cleanUp;
-            }
-        }
-    }
-
-    if (err == M4WAR_NO_MORE_STREAM)
-    {
-        err = M4NO_ERROR ;
-    }
-
-    if (M4OSA_NULL == pContext->m_pStreamHandler)
-    {
-        err = M4ERR_VB_NO_VIDEO ;
-        goto videoBrowserCreate_cleanUp ;
-    }
-
-    err = pContext->m_pDecoder->m_pFctSetOption(
-            pContext->m_pDecoderCtx,
-            M4DECODER_kOptionID_DeblockingFilter,
-            (M4OSA_DataOption)&deb);
-
-    if (err == M4WAR_DEBLOCKING_FILTER_NOT_IMPLEMENTED)
-    {
-        err = M4NO_ERROR;
-    }
-    CHECK_ERR(videoBrowserCreate, err);
-
-    FilterOption.m_pFilterUserData = M4OSA_NULL;
-
-
-    if (pContext->m_frameColorType == VideoBrowser_kGB565) {
-        FilterOption.m_pFilterFunction =
-            (M4OSA_Void*)M4VIFI_ResizeBilinearYUV420toBGR565;
-    }
-    else if (pContext->m_frameColorType == VideoBrowser_kYUV420) {
-        FilterOption.m_pFilterFunction =
-            (M4OSA_Void*)M4VIFI_ResizeBilinearYUV420toYUV420;
-    }
-    else {
-        err = M4ERR_PARAMETER;
-        goto videoBrowserCreate_cleanUp;
-    }
-
-    err = pContext->m_pDecoder->m_pFctSetOption(
-            pContext->m_pDecoderCtx,
-            M4DECODER_kOptionID_OutputFilter,
-            (M4OSA_DataOption)&FilterOption);
-
-    CHECK_ERR(videoBrowserCreate, err);
-
-    /* store the callback details */
-    pContext->m_pfCallback = pfCallback;
-    pContext->m_pCallbackUserData = pCallbackData;
-    /* store the callback details */
-
-    pContext->m_state = VideoBrowser_kVBOpened;
-    *ppContext = pContext;
-
-    M4OSA_TRACE1_0("videoBrowserCreate returned NO ERROR");
-    return M4NO_ERROR;
-
-videoBrowserCreate_cleanUp:
-
-    if (M4OSA_NULL != pContext)
-    {
-        if (M4OSA_NULL != pContext->m_pDecoderCtx)
-        {
-            pContext->m_pDecoder->m_pFctDestroy(pContext->m_pDecoderCtx);
-            pContext->m_pDecoderCtx = M4OSA_NULL;
-        }
-
-        if (M4OSA_NULL != pContext->m_pReaderCtx)
-        {
-            pContext->m_3gpReader->m_pFctClose(pContext->m_pReaderCtx);
-            pContext->m_3gpReader->m_pFctDestroy(pContext->m_pReaderCtx);
-            pContext->m_pReaderCtx = M4OSA_NULL;
-        }
-        SAFE_FREE(pContext->m_pDecoder);
-        SAFE_FREE(pContext->m_3gpReader);
-        SAFE_FREE(pContext->m_3gpData);
-        SAFE_FREE(pContext);
-    }
-
-    M4OSA_TRACE2_1("videoBrowserCreate returned 0x%x", err);
-    return err;
-}
-
-/******************************************************************************
-* M4OSA_ERR     videoBrowserCleanUp(M4OSA_Context pContext);
-* @brief        This function frees the resources needed for browsing a
-*               video file.
-* @param        pContext     (IN) : Video browser context
-* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE
-******************************************************************************/
-M4OSA_ERR videoBrowserCleanUp(M4OSA_Context pContext)
-{
-    VideoBrowserContext* pC = (VideoBrowserContext*)pContext;
-    M4OSA_ERR err = M4NO_ERROR;
-
-    M4OSA_TRACE2_1("videoBrowserCleanUp: entering with 0x%x", pContext);
-
-    /*--- Sanity checks ---*/
-    CHECK_PTR(videoBrowserCleanUp, pContext, err, M4ERR_PARAMETER);
-
-    if (M4OSA_NULL != pC->m_pDecoderCtx)
-    {
-        pC->m_pDecoder->m_pFctDestroy(pC->m_pDecoderCtx);
-        pC->m_pDecoderCtx = M4OSA_NULL ;
-    }
-
-    if (M4OSA_NULL != pC->m_pReaderCtx)
-    {
-        pC->m_3gpReader->m_pFctClose(pC->m_pReaderCtx) ;
-        pC->m_3gpReader->m_pFctDestroy(pC->m_pReaderCtx);
-        pC->m_pReaderCtx = M4OSA_NULL;
-    }
-
-    SAFE_FREE(pC->m_pDecoder);
-    SAFE_FREE(pC->m_3gpReader);
-    SAFE_FREE(pC->m_3gpData);
-
-    if (pC->m_frameColorType != VideoBrowser_kYUV420) {
-        SAFE_FREE(pC->m_outputPlane[0].pac_data);
-    }
-    SAFE_FREE(pC);
-
-    M4OSA_TRACE2_0("videoBrowserCleanUp returned NO ERROR");
-    return M4NO_ERROR;
-
-videoBrowserCleanUp_cleanUp:
-
-    M4OSA_TRACE2_1("videoBrowserCleanUp returned 0x%x", err);
-    return err;
-}
-/******************************************************************************
-* M4OSA_ERR     videoBrowserPrepareFrame(
-*       M4OSA_Context pContext, M4OSA_UInt32* pTime);
-* @brief        This function prepares the frame.
-* @param        pContext     (IN) : Video browser context
-* @param        pTime        (IN/OUT) : Pointer on the time to reach. Updated
-*                                       by this function with the reached time
-* @param        tolerance    (IN) :  We may decode an earlier frame within the tolerance.
-*                                    The time difference is specified in milliseconds.
-* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
-******************************************************************************/
-M4OSA_ERR videoBrowserPrepareFrame(M4OSA_Context pContext, M4OSA_UInt32* pTime,
-    M4OSA_UInt32 tolerance)
-{
-    VideoBrowserContext* pC = (VideoBrowserContext*)pContext;
-    M4OSA_ERR err = M4NO_ERROR;
-    M4OSA_UInt32 targetTime = 0;
-    M4_MediaTime timeMS = 0;
-    M4OSA_Bool bJumpNeeded = M4OSA_FALSE;
-
-    /*--- Sanity checks ---*/
-    CHECK_PTR(videoBrowserPrepareFrame, pContext, err, M4ERR_PARAMETER);
-    CHECK_PTR(videoBrowserPrepareFrame, pTime,  err, M4ERR_PARAMETER);
-
-    targetTime = *pTime ;
-
-    /*--- Check the state, if this is the first call to this function
-          we move to the state "browsing" ---*/
-    if (VideoBrowser_kVBOpened == pC->m_state)
-    {
-        pC->m_state = VideoBrowser_kVBBrowsing;
-    }
-    else if (VideoBrowser_kVBBrowsing != pC->m_state)
-    {
-        err = M4ERR_STATE ;
-        goto videoBrowserPrepareFrame_cleanUp;
-    }
-
-    // If we jump backward or forward to a time greater than current position by
-    // 85ms (~ 2 frames), we want to jump.
-    if (pC->m_currentCTS == 0 ||
-        targetTime < pC->m_currentCTS ||
-        targetTime > (pC->m_currentCTS + 85))
-    {
-        bJumpNeeded = M4OSA_TRUE;
-    }
-
-    timeMS = (M4_MediaTime)targetTime;
-    err = pC->m_pDecoder->m_pFctDecode(
-        pC->m_pDecoderCtx, &timeMS, bJumpNeeded, tolerance);
-
-    if ((err != M4NO_ERROR) && (err != M4WAR_NO_MORE_AU))
-    {
-        return err;
-    }
-
-    err = pC->m_pDecoder->m_pFctRender(
-        pC->m_pDecoderCtx, &timeMS, pC->m_outputPlane, M4OSA_TRUE);
-
-    if (M4WAR_VIDEORENDERER_NO_NEW_FRAME == err)
-    {
-        return err;
-    }
-    CHECK_ERR(videoBrowserPrepareFrame, err) ;
-
-    pC->m_currentCTS = (M4OSA_UInt32)timeMS;
-
-    *pTime = pC->m_currentCTS;
-
-    return M4NO_ERROR;
-
-videoBrowserPrepareFrame_cleanUp:
-
-    if ((M4WAR_INVALID_TIME == err) || (M4WAR_NO_MORE_AU == err))
-    {
-        err = M4NO_ERROR;
-    }
-    else if (M4OSA_NULL != pC)
-    {
-        pC->m_currentCTS = 0;
-    }
-
-    M4OSA_TRACE2_1("videoBrowserPrepareFrame returned 0x%x", err);
-    return err;
-}
-
-/******************************************************************************
-* M4OSA_ERR     videoBrowserDisplayCurrentFrame(M4OSA_Context pContext);
-* @brief        This function displays the current frame.
-* @param        pContext     (IN) : Video browser context
-* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
-******************************************************************************/
-M4OSA_ERR videoBrowserDisplayCurrentFrame(M4OSA_Context pContext)
-{
-    VideoBrowserContext* pC = (VideoBrowserContext*)pContext ;
-    M4OSA_ERR err = M4NO_ERROR ;
-
-    /*--- Sanity checks ---*/
-    CHECK_PTR(videoBrowserDisplayCurrentFrame, pContext, err, M4ERR_PARAMETER);
-
-    // Request display of the frame
-    pC->m_pfCallback((M4OSA_Context) pC,             // VB context
-        VIDEOBROWSER_DISPLAY_FRAME,                  // action requested
-        M4NO_ERROR,                                  // error code
-        (M4OSA_Void*) &(pC->m_outputPlane[0]),       // image to be displayed
-        (M4OSA_Void*) pC->m_pCallbackUserData);      // user-provided data
-
-#ifdef DUMPTOFILE
-    {
-        M4OSA_Context fileContext;
-        M4OSA_Char* fileName = "/sdcard/textBuffer_RGB565.rgb";
-        M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,
-            M4OSA_kFileWrite | M4OSA_kFileCreate);
-
-        M4OSA_fileWriteData(fileContext,
-            (M4OSA_MemAddr8) pC->m_outputPlane[0].pac_data,
-            pC->m_outputPlane[0].u_height*pC->m_outputPlane[0].u_width*2);
-
-        M4OSA_fileWriteClose(fileContext);
-    }
-#endif
-
-    M4OSA_TRACE2_0("videoBrowserDisplayCurrentFrame returned NO ERROR") ;
-    return M4NO_ERROR;
-
-videoBrowserDisplayCurrentFrame_cleanUp:
-
-    M4OSA_TRACE2_1("videoBrowserDisplayCurrentFrame returned 0x%x", err) ;
-    return err;
-}
diff --git a/media/jni/mediaeditor/VideoBrowserMain.h b/media/jni/mediaeditor/VideoBrowserMain.h
deleted file mode 100644
index 00b5e05..0000000
--- a/media/jni/mediaeditor/VideoBrowserMain.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-
-#ifndef VIDEO_BROWSER_MAIN_H
-#define VIDEO_BROWSER_MAIN_H
-
-/**
- ************************************************************************
- * @file    VideoBrowserMain.h
- * @brief   Video browser Interface functions
- ************************************************************************
-*/
-
-#define VIDEOBROWSER    0x423
-
-#include "M4OSA_Memory.h"
-#include "M4OSA_CharStar.h"
-#include "M4OSA_OptionID.h"
-#include "M4OSA_Debug.h"
-#include "M4VIFI_FiltersAPI.h"
-#include "M4OSA_FileReader.h"
-
-
-/**
- ************************************************************************
- * @brief    Error codes definition.
- * @note    These value are the Browser engine specific error codes.
- ************************************************************************
-*/
-#define M4ERR_VB_MEDIATYPE_NOT_SUPPORTED    M4OSA_ERR_CREATE(M4_ERR, VIDEOBROWSER, 0x01)
-#define M4ERR_VB_NO_VIDEO                   M4OSA_ERR_CREATE(M4_ERR, VIDEOBROWSER, 0x02)
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/*
- *  Video Browser draw mode, extension for angle based bliting can be done
- */
-typedef enum
-{
-    VideoBrowser_kVBNormalBliting
-} VideoBrowser_videoBrowerDrawMode;
-
-
-/*--- Video Browser output frame color type ---*/
-typedef enum
-{
-    VideoBrowser_kYUV420,
-    VideoBrowser_kGB565
-} VideoBrowser_VideoColorType;
-
-/**
- ************************************************************************
- * enumeration  VideoBrowser_Notification
- * @brief       Video Browser notification type.
- * @note        This callback mechanism must be used to wait the completion of an asynchronous
- * operation, before calling another API function.
- ************************************************************************
-*/
-typedef enum
-{
-    /**
-     * A frame is ready to be displayed, it should be displayed in the callback function
-     * pCbData type = M4VIFI_ImagePlane*
-     */
-    VIDEOBROWSER_DISPLAY_FRAME            = 0x00000001,
-    VIDEOBROWSER_NOTIFICATION_NONE        = 0xffffffff
-}VideoBrowser_Notification;
-
-
-/**
- ************************************************************************
- * @brief    videoBrowser_Callback type definition
- * @param    pInstance          (IN) Video Browser context.
- * @param    notificationID     (IN) Id of the callback which generated the error
- * @param    errCode            (IN) Error code from the core
- * @param    pCbData            (IN) pointer to data associated wit the callback.
- * @param    pCbUserData        (IN) pointer to application user data passed in init.
- * @note    This callback mechanism is used to request display of an image
- ************************************************************************
-*/
-typedef M4OSA_Void (*videoBrowser_Callback) (M4OSA_Context pInstance,
-                                        VideoBrowser_Notification notificationID,
-                                        M4OSA_ERR errCode,
-                                        M4OSA_Void* pCbData,
-                                        M4OSA_Void* pCallbackUserData);
-
-
-/******************************************************************************
-* @brief   This function allocates the resources needed for browsing a video file.
-* @param   ppContext     (OUT): Pointer on a context filled by this function.
-* @param   pURL          (IN) : Path of File to browse
-* @param   DrawMode      (IN) : Indicate which method is used to draw (Direct draw etc...)
-* @param   pfCallback    (IN) : Callback function to be called when a frame must be displayed
-* @param   pCallbackData (IN)  : User defined data that will be passed as parameter of the callback
-* @param   clrType       (IN) : Required color type.
-* @return  M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
-******************************************************************************/
-M4OSA_ERR videoBrowserCreate(M4OSA_Context* ppContext, M4OSA_Char* pURL,
-                                        M4OSA_UInt32 DrawMode,
-                                        M4OSA_FileReadPointer* ptrF,
-                                        videoBrowser_Callback pfCallback,
-                                        M4OSA_Void* pCallbackData,
-                                        VideoBrowser_VideoColorType clrType);
-
-/******************************************************************************
-* @brief        This function frees the resources needed for browsing a video file.
-* @param        pContext     (IN) : Video browser context
-* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE
-******************************************************************************/
-M4OSA_ERR videoBrowserCleanUp(M4OSA_Context pContext) ;
-
-
-/******************************************************************************
-* @brief        This function allocates the resources needed for browsing a video file.
-* @param        pContext  (IN)      : Video browser context
-* @param        pTime     (IN/OUT)  : Pointer on the time to reach. Updated by
-*                                     this function with the reached time
-* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
-******************************************************************************/
-M4OSA_ERR videoBrowserPrepareFrame(M4OSA_Context pContext, M4OSA_UInt32* pTime,
-        M4OSA_UInt32 tolerance);
-
-/******************************************************************************
-* @brief        This function sets the size and the position of the display.
-* @param        pContext     (IN) : Video Browser context
-* @param        pixelArray   (IN) : Array to hold the video frame.
-* @param        x            (IN) : Horizontal position of the top left corner
-* @param        y            (IN) : Vertical position of the top left corner
-* @param        dx           (IN) : Width of the display window
-* @param        dy           (IN) : Height of the video window
-* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
-******************************************************************************/
-M4OSA_ERR videoBrowserSetWindow(M4OSA_Context pContext, M4OSA_Int32* pixelArray,
-                                M4OSA_UInt32 x, M4OSA_UInt32 y,
-                                M4OSA_UInt32 dx, M4OSA_UInt32 dy);
-
-/******************************************************************************
-* @brief        This function displays the current frame.
-* @param        pContext     (IN) : Video browser context
-* @return       M4NO_ERROR / M4ERR_PARAMETER / M4ERR_STATE / M4ERR_ALLOC
-******************************************************************************/
-M4OSA_ERR videoBrowserDisplayCurrentFrame(M4OSA_Context pContext);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* VIDEO_BROWSER_MAIN_H */
diff --git a/media/jni/mediaeditor/VideoEditorClasses.cpp b/media/jni/mediaeditor/VideoEditorClasses.cpp
deleted file mode 100644
index d29fad3..0000000
--- a/media/jni/mediaeditor/VideoEditorClasses.cpp
+++ /dev/null
@@ -1,3146 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#define LOG_TAG "VideoEditorClasses"
-
-#include <VideoEditorClasses.h>
-#include <VideoEditorJava.h>
-#include <VideoEditorLogging.h>
-#include <VideoEditorOsal.h>
-
-extern "C" {
-#include <M4OSA_Clock.h>
-#include <M4OSA_CharStar.h>
-#include <M4OSA_FileCommon.h>
-#include <M4OSA_FileReader.h>
-#include <M4OSA_FileWriter.h>
-#include <M4OSA_Memory.h>
-#include <M4OSA_Debug.h>
-#include <M4OSA_Thread.h>
-#include <M4VSS3GPP_API.h>
-#include <M4xVSS_API.h>
-#include <M4VSS3GPP_ErrorCodes.h>
-#include <M4MCS_ErrorCodes.h>
-#include <M4READER_Common.h>
-#include <M4WRITER_common.h>
-#include <M4DECODER_Common.h>
-};
-
-#define VIDEOEDIT_PROP_JAVA_RESULT_STRING_MAX                     (128)
-
-#define VIDEOEDIT_JAVA__RESULT_STRING_MAX                     (128)
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioEffect)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NONE",     M4VSS3GPP_kAudioEffectType_None),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_IN",  M4VSS3GPP_kAudioEffectType_FadeIn),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_OUT", M4VSS3GPP_kAudioEffectType_FadeOut)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioEffect, AUDIO_EFFECT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioFormat)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NO_AUDIO",          M4VIDEOEDITING_kNoneAudio),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("AMR_NB",            M4VIDEOEDITING_kAMR_NB),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("AAC",               M4VIDEOEDITING_kAAC),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("AAC_PLUS",          M4VIDEOEDITING_kAACplus),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ENHANCED_AAC_PLUS", M4VIDEOEDITING_keAACplus),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("MP3",               M4VIDEOEDITING_kMP3),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("EVRC",              M4VIDEOEDITING_kEVRC),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("PCM",               M4VIDEOEDITING_kPCM),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_AUDIO",        M4VIDEOEDITING_kNullAudio),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED_AUDIO", M4VIDEOEDITING_kUnsupportedAudio)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioFormat, AUDIO_FORMAT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioSamplingFrequency)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_DEFAULT", M4VIDEOEDITING_kDefault_ASF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_8000",    M4VIDEOEDITING_k8000_ASF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_16000",   M4VIDEOEDITING_k16000_ASF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_22050",   M4VIDEOEDITING_k22050_ASF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_24000",   M4VIDEOEDITING_k24000_ASF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_32000",   M4VIDEOEDITING_k32000_ASF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_44100",   M4VIDEOEDITING_k44100_ASF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FREQ_48000",   M4VIDEOEDITING_k48000_ASF)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioSamplingFrequency,AUDIO_SAMPLING_FREQUENCY_CLASS_NAME,
-                                     M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(AudioTransition)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NONE",       M4VSS3GPP_kAudioTransitionType_None),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("CROSS_FADE", M4VSS3GPP_kAudioTransitionType_CrossFade)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(AudioTransition, AUDIO_TRANSITION_CLASS_NAME, M4OSA_NULL,
-                                     M4OSA_NULL)
-
-
-static const char*
-videoEditClasses_getUnknownBitrateString(int bitrate)
-{
-    static char string[VIDEOEDIT_JAVA__RESULT_STRING_MAX] = "";
-
-    M4OSA_chrSPrintf((M4OSA_Char *)string, sizeof(string) - 1, (M4OSA_Char*)"%d", bitrate);
-
-    // Return the bitrate string.
-    return(string);
-}
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Bitrate)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("VARIABLE",     M4VIDEOEDITING_kVARIABLE_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("UNDEFINED",    M4VIDEOEDITING_kUndefinedBitrate),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_9_2_KBPS",  M4VIDEOEDITING_k9_2_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_12_2_KBPS", M4VIDEOEDITING_k12_2_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_16_KBPS",   M4VIDEOEDITING_k16_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_24_KBPS",   M4VIDEOEDITING_k24_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_32_KBPS",   M4VIDEOEDITING_k32_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_48_KBPS",   M4VIDEOEDITING_k48_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_64_KBPS",   M4VIDEOEDITING_k64_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_96_KBPS",   M4VIDEOEDITING_k96_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_128_KBPS",  M4VIDEOEDITING_k128_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_192_KBPS",  M4VIDEOEDITING_k192_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_256_KBPS",  M4VIDEOEDITING_k256_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_288_KBPS",  M4VIDEOEDITING_k288_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_384_KBPS",  M4VIDEOEDITING_k384_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_512_KBPS",  M4VIDEOEDITING_k512_KBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_800_KBPS",  M4VIDEOEDITING_k800_KBPS),
-/*+ New Encoder bitrates */
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_2_MBPS",  M4VIDEOEDITING_k2_MBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_5_MBPS",  M4VIDEOEDITING_k5_MBPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BR_8_MBPS",  M4VIDEOEDITING_k8_MBPS)
-/*- New Encoder bitrates */
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Bitrate, BITRATE_CLASS_NAME,
- videoEditClasses_getUnknownBitrateString, videoEditClasses_getUnknownBitrateString)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(ClipType)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("THREE_GPP",   M4VIDEOEDITING_kFileType_3GPP),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("MP4",         M4VIDEOEDITING_kFileType_MP4),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("AMR",         M4VIDEOEDITING_kFileType_AMR),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("MP3",         M4VIDEOEDITING_kFileType_MP3),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("PCM",         M4VIDEOEDITING_kFileType_PCM),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("JPG",         M4VIDEOEDITING_kFileType_JPG),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("PNG",         M4VIDEOEDITING_kFileType_PNG),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("M4V",         M4VIDEOEDITING_kFileType_M4V),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kFileType_Unsupported)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(ClipType, FILE_TYPE_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Engine)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("TASK_LOADING_SETTINGS",    TASK_LOADING_SETTINGS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("TASK_ENCODING",            TASK_ENCODING)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME, M4OSA_NULL,
-                                     M4OSA_NULL)
-
-
-static const char*
-videoEditClasses_getUnknownErrorName(int error)
-{
-    static char string[VIDEOEDIT_JAVA__RESULT_STRING_MAX] = "ERR_INTERNAL";
-
-    // Format the unknown error string.
-    M4OSA_chrSPrintf((M4OSA_Char *)string, sizeof(string) - 1, (M4OSA_Char*)"ERR_INTERNAL(%s)",
-                    videoEditOsal_getResultString(error));
-
-    // Return the error string.
-    return(string);
-}
-
-static const char*
-videoEditClasses_getUnknownErrorString(int error)
-{
-    // Return the result string.
-    return(videoEditOsal_getResultString(error));
-}
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(Error)
-{
-    // M4OSA_Clock.h
-    VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_TIMESCALE_TOO_BIG",                   \
-          M4WAR_TIMESCALE_TOO_BIG                               ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_CLOCK_BAD_REF_YEAR",                  \
-          M4ERR_CLOCK_BAD_REF_YEAR                              ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FILE_NOT_FOUND",                      \
-          M4ERR_FILE_NOT_FOUND                                  ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_TRANSCODING_NECESSARY",               \
-          M4VSS3GPP_WAR_TRANSCODING_NECESSARY                   ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("WAR_MAX_OUTPUT_SIZE_EXCEEDED",            \
-          M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED                   ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BUFFER_OUT_TOO_SMALL",                \
-          M4xVSSWAR_BUFFER_OUT_TOO_SMALL                        ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NOMORE_SPACE_FOR_FILE",               \
-          M4xVSSERR_NO_MORE_SPACE                               ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_FILE_TYPE",                   \
-          M4VSS3GPP_ERR_INVALID_FILE_TYPE                       ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_EFFECT_KIND",                 \
-          M4VSS3GPP_ERR_INVALID_EFFECT_KIND                     ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_EFFECT_TYPE",           \
-          M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE               ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_AUDIO_EFFECT_TYPE",           \
-          M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE               ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_TRANSITION_TYPE",       \
-          M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE           ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_AUDIO_TRANSITION_TYPE",       \
-          M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE           ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_VIDEO_ENCODING_FRAME_RATE",   \
-          M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE       ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EXTERNAL_EFFECT_NULL",                \
-          M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL                    ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EXTERNAL_TRANSITION_NULL",            \
-          M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL                ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BEGIN_CUT_LARGER_THAN_DURATION",      \
-          M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION          ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_BEGIN_CUT_LARGER_THAN_END_CUT",       \
-          M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT           ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_OVERLAPPING_TRANSITIONS",             \
-         M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS                  ),
-#ifdef M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ANALYSIS_DATA_SIZE_TOO_SMALL",        \
-          M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL            ),
-#endif
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_3GPP_FILE",                     \
-        M4VSS3GPP_ERR_INVALID_3GPP_FILE                         ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT",        \
-        M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT            ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT",        \
-        M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT            ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AMR_EDITING_UNSUPPORTED",               \
-        M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED                   ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_VIDEO_AU_TOO_LARGE",              \
-        M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE                  ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_AU_TOO_LARGE",              \
-        M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE                  ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_CORRUPTED_AU",              \
-        M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU                  ),
-#ifdef M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INPUT_AUDIO_CORRUPTED_AU",              \
-        M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU              ),
-#endif
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ENCODER_ACCES_UNIT_ERROR",              \
-        M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR                  ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT",      \
-        M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT          ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_H263_PROFILE",      \
-        M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE          ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE",     \
-        M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE         ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_MPEG4_RVLC",        \
-        M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC            ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT",      \
-        M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT          ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE",   \
-        M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE       ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE",\
-     M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_CLIP_ANALYSIS_VERSION",        \
-         M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION            ),
-#ifdef M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INVALID_CLIP_ANALYSIS_PLATFORM",       \
-        M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM            ),
-#endif
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_FORMAT",            \
-         M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT                ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE",        \
-         M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE            ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_TIME_SCALE",        \
-         M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE            ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING", \
-         M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING     ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_MP3_ASSEMBLY",             \
-         M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY                 ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NO_SUPPORTED_STREAM_IN_FILE",          \
-         M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE              ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ADDVOLUME_EQUALS_ZERO",                \
-         M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO                    ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION",    \
-         M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION        ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT",    \
-         M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT        ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_UNSUPPORTED_ADDED_AUDIO_STREAM",       \
-         M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM           ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_MIXING_UNSUPPORTED",             \
-         M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED                 ),
-#ifdef M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_MIXING_MP3_UNSUPPORTED",         \
-          M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED            ),
-#endif
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK", \
-      M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK        ),
-#ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_AAC",         \
-       M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC               ),
-#endif
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_AUDIO_CANNOT_BE_MIXED",                \
-        M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED                     ),
-#ifdef M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED",        \
-         M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED            ),
-#endif
-#ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_FEATURE_UNSUPPORTED_WITH_EVRC",        \
-          M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC           ),
-#endif
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_H263_PROFILE_NOT_SUPPORTED",           \
-          M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED              ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE",    \
-          M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE       ),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ERR_INTERNAL",                             \
-          M4NO_ERROR                                            ),
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(Error, ERROR_CLASS_NAME,
- videoEditClasses_getUnknownErrorName, videoEditClasses_getUnknownErrorString)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(FileType)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("THREE_GPP",   VideoEditClasses_kFileType_3GPP),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("MP4",         VideoEditClasses_kFileType_MP4),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("AMR",         VideoEditClasses_kFileType_AMR),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("MP3",         VideoEditClasses_kFileType_MP3),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("PCM",         VideoEditClasses_kFileType_PCM),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("JPG",         VideoEditClasses_kFileType_JPG),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("GIF",         VideoEditClasses_kFileType_GIF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("PNG",         VideoEditClasses_kFileType_PNG),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("M4V",         VideoEditClasses_kFileType_M4V),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", VideoEditClasses_kFileType_Unsupported)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(FileType, FILE_TYPE_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(MediaRendering)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("RESIZING",      M4xVSS_kResizing),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("CROPPING",      M4xVSS_kCropping),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BLACK_BORDERS", M4xVSS_kBlackBorders)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(MediaRendering, MEDIA_RENDERING_CLASS_NAME,
- M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(SlideDirection)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("RIGHT_OUT_LEFT_IN", M4xVSS_SlideTransition_RightOutLeftIn),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("LEFT_OUT_RIGTH_IN", M4xVSS_SlideTransition_LeftOutRightIn),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("TOP_OUT_BOTTOM_IN", M4xVSS_SlideTransition_TopOutBottomIn),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BOTTOM_OUT_TOP_IN", M4xVSS_SlideTransition_BottomOutTopIn)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(SlideDirection, SLIDE_DIRECTION_CLASS_NAME,
- M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(TransitionBehaviour)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("SPEED_UP",    M4VSS3GPP_TransitionBehaviour_SpeedUp),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("LINEAR",      M4VSS3GPP_TransitionBehaviour_Linear),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("SPEED_DOWN",  M4VSS3GPP_TransitionBehaviour_SpeedDown),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("SLOW_MIDDLE", M4VSS3GPP_TransitionBehaviour_SlowMiddle),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FAST_MIDDLE", M4VSS3GPP_TransitionBehaviour_FastMiddle)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(TransitionBehaviour, TRANSITION_BEHAVIOUR_CLASS_NAME,
- M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoEffect)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NONE",            M4VSS3GPP_kVideoEffectType_None),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_FROM_BLACK", M4VSS3GPP_kVideoEffectType_FadeFromBlack),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_TO_BLACK",   M4VSS3GPP_kVideoEffectType_FadeToBlack),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("EXTERNAL",        M4VSS3GPP_kVideoEffectType_External),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("BLACK_AND_WHITE", M4xVSS_kVideoEffectType_BlackAndWhite),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("PINK",            M4xVSS_kVideoEffectType_Pink),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("GREEN",           M4xVSS_kVideoEffectType_Green),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("SEPIA",           M4xVSS_kVideoEffectType_Sepia),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NEGATIVE",        M4xVSS_kVideoEffectType_Negative),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FRAMING",         M4xVSS_kVideoEffectType_Framing),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("TEXT",            M4xVSS_kVideoEffectType_Text),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ZOOM_IN",         M4xVSS_kVideoEffectType_ZoomIn),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ZOOM_OUT",        M4xVSS_kVideoEffectType_ZoomOut),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FIFTIES",         M4xVSS_kVideoEffectType_Fifties),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("COLORRGB16",      M4xVSS_kVideoEffectType_ColorRGB16),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("GRADIENT",        M4xVSS_kVideoEffectType_Gradient),
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoEffect, VIDEO_EFFECT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFormat)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NO_VIDEO",    M4VIDEOEDITING_kNoneVideo),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("H263",        M4VIDEOEDITING_kH263),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("MPEG4",       M4VIDEOEDITING_kMPEG4),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("H264",        M4VIDEOEDITING_kH264),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NULL_VIDEO",  M4VIDEOEDITING_kNullVideo),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("UNSUPPORTED", M4VIDEOEDITING_kUnsupportedVideo),
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFormat, VIDEO_FORMAT_CLASS_NAME, M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameRate)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_5_FPS",    M4VIDEOEDITING_k5_FPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_7_5_FPS",  M4VIDEOEDITING_k7_5_FPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_10_FPS",   M4VIDEOEDITING_k10_FPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_12_5_FPS", M4VIDEOEDITING_k12_5_FPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_15_FPS",   M4VIDEOEDITING_k15_FPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_20_FPS",   M4VIDEOEDITING_k20_FPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_25_FPS",   M4VIDEOEDITING_k25_FPS),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FR_30_FPS",   M4VIDEOEDITING_k30_FPS)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameRate, VIDEO_FRAME_RATE_CLASS_NAME,
- M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoFrameSize)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("SQCIF", M4VIDEOEDITING_kSQCIF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("QQVGA", M4VIDEOEDITING_kQQVGA),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("QCIF",  M4VIDEOEDITING_kQCIF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("QVGA",  M4VIDEOEDITING_kQVGA),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("CIF",   M4VIDEOEDITING_kCIF),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("VGA",   M4VIDEOEDITING_kVGA),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("WVGA", M4VIDEOEDITING_kWVGA),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NTSC", M4VIDEOEDITING_kNTSC),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("nHD", M4VIDEOEDITING_k640_360),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("WVGA16x9", M4VIDEOEDITING_k854_480),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("V720p", M4VIDEOEDITING_k1280_720),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("W720p", M4VIDEOEDITING_k1080_720),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("S720p", M4VIDEOEDITING_k960_720),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("V1080p", M4VIDEOEDITING_k1920_1080)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoFrameSize, VIDEO_FRAME_SIZE_CLASS_NAME,
- M4OSA_NULL, M4OSA_NULL)
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANTS(VideoTransition)
-{
-    VIDEOEDIT_JAVA_CONSTANT_INIT("NONE",             M4VSS3GPP_kVideoTransitionType_None),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("CROSS_FADE",       M4VSS3GPP_kVideoTransitionType_CrossFade),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("EXTERNAL",         M4VSS3GPP_kVideoTransitionType_External),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("ALPHA_MAGIC",      M4xVSS_kVideoTransitionType_AlphaMagic),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("SLIDE_TRANSITION", M4xVSS_kVideoTransitionType_SlideTransition),
-    VIDEOEDIT_JAVA_CONSTANT_INIT("FADE_BLACK",       M4xVSS_kVideoTransitionType_FadeBlack)
-};
-
-VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(VideoTransition, VIDEO_TRANSITION_CLASS_NAME,
-                                     M4OSA_NULL, M4OSA_NULL)
-
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(AlphaMagic)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("file",            "Ljava/lang/String;"),
-    VIDEOEDIT_JAVA_FIELD_INIT("blendingPercent", "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("invertRotation",  "Z"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("rgbWidth",  "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("rgbHeight",  "I"                 )
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(AlphaMagic, ALPHA_MAGIC_SETTINGS_CLASS_NAME)
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(Properties)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("duration",               "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("fileType",               "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoFormat",            "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoDuration",          "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoBitrate",           "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("width",                  "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("height",                 "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("averageFrameRate",       "F"),
-    VIDEOEDIT_JAVA_FIELD_INIT("profile",                "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("level",                  "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("profileSupported",       "Z"),
-    VIDEOEDIT_JAVA_FIELD_INIT("levelSupported",         "Z"),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioFormat",            "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioDuration",          "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioBitrate",           "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioChannels",          "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioSamplingFrequency", "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoRotation",          "I")
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Properties, PROPERTIES_CLASS_NAME)
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(BackgroundMusic)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("file",          "Ljava/lang/String;"),
-    VIDEOEDIT_JAVA_FIELD_INIT("fileType",      "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("insertionTime", "J"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("volumePercent", "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("beginLoop",     "J"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("endLoop",       "J"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("enableDucking",   "Z"               ),
-    VIDEOEDIT_JAVA_FIELD_INIT("duckingThreshold","I"               ),
-    VIDEOEDIT_JAVA_FIELD_INIT("lowVolume",         "I"             ),
-    VIDEOEDIT_JAVA_FIELD_INIT("isLooping",         "Z"             )
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(BackgroundMusic, BACKGROUND_MUSIC_SETTINGS_CLASS_NAME)
-
-/*
-VIDEOEDIT_JAVA_DEFINE_FIELDS(BestEditSettings)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("videoFormat",    "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoFrameSize", "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioFormat",    "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioChannels",  "I")
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(BestEditSettings, BEST_EDIT_SETTINGS_CLASS_NAME)
-*/
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(ClipSettings)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("clipPath",             "Ljava/lang/String;"),
-    VIDEOEDIT_JAVA_FIELD_INIT("fileType",             "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("beginCutTime",         "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("endCutTime",           "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("beginCutPercent",      "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("endCutPercent",        "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("panZoomEnabled",       "Z"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("panZoomPercentStart",  "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftXStart", "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftYStart", "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("panZoomPercentEnd",    "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftXEnd",   "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("panZoomTopLeftYEnd",   "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("mediaRendering",       "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("rgbWidth",           "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("rgbHeight",          "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("rotationDegree",     "I"                 )
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(ClipSettings, CLIP_SETTINGS_CLASS_NAME)
-
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(EditSettings)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("clipSettingsArray",       "[L"CLIP_SETTINGS_CLASS_NAME";"         ),
-    VIDEOEDIT_JAVA_FIELD_INIT("transitionSettingsArray", "[L"TRANSITION_SETTINGS_CLASS_NAME";"   ),
-    VIDEOEDIT_JAVA_FIELD_INIT("effectSettingsArray",     "[L"EFFECT_SETTINGS_CLASS_NAME";"       ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoFrameRate",          "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("outputFile",              "Ljava/lang/String;"                    ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoFrameSize",          "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoFormat",             "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoProfile",            "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoLevel",              "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioFormat",             "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioSamplingFreq",       "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("maxFileSize",             "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioChannels",           "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoBitrate",            "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioBitrate",            "I"                                     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("backgroundMusicSettings",\
-    "L"BACKGROUND_MUSIC_SETTINGS_CLASS_NAME";"),
-    VIDEOEDIT_JAVA_FIELD_INIT("primaryTrackVolume",            "I"                               )
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(EditSettings, EDIT_SETTINGS_CLASS_NAME)
-
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(EffectSettings)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("startTime",                       "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("duration",                        "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoEffectType",                 "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioEffectType",                 "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("startPercent",                    "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("durationPercent",                 "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("framingFile",                     "Ljava/lang/String;"),
-    VIDEOEDIT_JAVA_FIELD_INIT("framingBuffer",                   "[I"                ),
-    VIDEOEDIT_JAVA_FIELD_INIT("bitmapType",                      "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("width",                           "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("height",                          "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("topLeftX",                        "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("topLeftY",                        "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("framingResize",                   "Z"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("framingScaledSize",               "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("text",                            "Ljava/lang/String;"),
-    VIDEOEDIT_JAVA_FIELD_INIT("textRenderingData",               "Ljava/lang/String;"),
-    VIDEOEDIT_JAVA_FIELD_INIT("textBufferWidth",                 "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("textBufferHeight",                "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("fiftiesFrameRate",                "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("rgb16InputColor",                 "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingStartPercent",       "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingMiddlePercent",      "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingEndPercent",         "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingFadeInTimePercent",  "I"                 ),
-    VIDEOEDIT_JAVA_FIELD_INIT("alphaBlendingFadeOutTimePercent", "I"                 )
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(EffectSettings, EFFECT_SETTINGS_CLASS_NAME)
-
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(Engine)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("mManualEditContext", "J")
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME)
-
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(SlideTransitionSettings)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("direction", "I")
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(SlideTransitionSettings, SLIDE_TRANSITION_SETTINGS_CLASS_NAME)
-
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(TransitionSettings)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("duration",            "I"                                       ),
-    VIDEOEDIT_JAVA_FIELD_INIT("videoTransitionType", "I"                                       ),
-    VIDEOEDIT_JAVA_FIELD_INIT("audioTransitionType", "I"                                       ),
-    VIDEOEDIT_JAVA_FIELD_INIT("transitionBehaviour", "I"                                       ),
-    VIDEOEDIT_JAVA_FIELD_INIT("alphaSettings",       "L"ALPHA_MAGIC_SETTINGS_CLASS_NAME";"     ),
-    VIDEOEDIT_JAVA_FIELD_INIT("slideSettings",       "L"SLIDE_TRANSITION_SETTINGS_CLASS_NAME";")
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(TransitionSettings, TRANSITION_SETTINGS_CLASS_NAME)
-
-
-VIDEOEDIT_JAVA_DEFINE_FIELDS(Version)
-{
-    VIDEOEDIT_JAVA_FIELD_INIT("major",    "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("minor",    "I"),
-    VIDEOEDIT_JAVA_FIELD_INIT("revision", "I")
-};
-
-VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(Version, VERSION_CLASS_NAME)
-
-
-VIDEOEDIT_JAVA_DEFINE_METHODS(Engine)
-{
-    VIDEOEDIT_JAVA_METHOD_INIT("onProgressUpdate", "(II)V")
-};
-
-VIDEOEDIT_JAVA_DEFINE_METHOD_CLASS(Engine, MANUAL_EDIT_ENGINE_CLASS_NAME)
-
-
-static const char*
-videoEditClasses_getBrandString(M4OSA_UInt32 brand)
-{
-    static char         brandString[11] = "0x00000000";
-           const char*  pBrandString    = M4OSA_NULL;
-           M4OSA_UInt8* pBrand          = (M4OSA_UInt8*)&brand;
-           M4OSA_UInt32 brandHost       = 0;
-
-    // Convert the brand from big endian to host.
-    brandHost =  pBrand[0];
-    brandHost =  brandHost << 8;
-    brandHost += pBrand[1];
-    brandHost =  brandHost << 8;
-    brandHost += pBrand[2];
-    brandHost =  brandHost << 8;
-    brandHost += pBrand[3];
-
-    switch (brandHost)
-    {
-    case M4VIDEOEDITING_BRAND_0000:
-        pBrandString = "0000";
-        break;
-    case M4VIDEOEDITING_BRAND_3G2A:
-        pBrandString = "3G2A";
-        break;
-    case M4VIDEOEDITING_BRAND_3GP4:
-        pBrandString = "3GP4";
-        break;
-    case M4VIDEOEDITING_BRAND_3GP5:
-        pBrandString = "3GP5";
-        break;
-    case M4VIDEOEDITING_BRAND_3GP6:
-        pBrandString = "3GP6";
-        break;
-    case M4VIDEOEDITING_BRAND_AVC1:
-        pBrandString = "AVC1";
-        break;
-    case M4VIDEOEDITING_BRAND_EMP:
-        pBrandString = "EMP";
-        break;
-    case M4VIDEOEDITING_BRAND_ISOM:
-        pBrandString = "ISOM";
-        break;
-    case M4VIDEOEDITING_BRAND_MP41:
-        pBrandString = "MP41";
-        break;
-    case M4VIDEOEDITING_BRAND_MP42:
-        pBrandString = "MP42";
-        break;
-    case M4VIDEOEDITING_BRAND_VFJ1:
-        pBrandString = "VFJ1";
-        break;
-    default:
-        M4OSA_chrSPrintf((M4OSA_Char *)brandString,
-                         sizeof(brandString) - 1,
-                         (M4OSA_Char*)"0x%08X", brandHost);
-        pBrandString = brandString;
-        break;
-    }
-
-    // Return the brand string.
-    return(pBrandString);
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-static void
-videoEditClasses_logFtypBox(
-                M4VIDEOEDITING_FtypBox*             pBox,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the FtypBox.
-    if (M4OSA_NULL != pBox)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "%*c major_brand:        %s",    indentation, ' ',
-                 videoEditClasses_getBrandString(pBox->major_brand));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "%*c minor_version:      %08X",  indentation, ' ',
-                (unsigned int)pBox->minor_version);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "%*c nbCompatibleBrands: %u",    indentation, ' ',
-                (unsigned int)pBox->nbCompatibleBrands);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "%*c compatible_brands:", indentation, ' ');
-                indentation += VIDEOEDIT_LOG_INDENTATION;
-        for (int i = 0; (i < (int)pBox->nbCompatibleBrands) &&\
-         (i < M4VIDEOEDITING_MAX_COMPATIBLE_BRANDS); i++)
-        {
-            VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "%*c compatible_brand[%d]: %s",    indentation, ' ',
-                    i, videoEditClasses_getBrandString(pBox->compatible_brands[i]));
-        }
-        indentation -= VIDEOEDIT_LOG_INDENTATION;
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>",
-                 indentation, ' ');
-    }
-}
-#endif
-
-
-void
-videoEditClasses_init(
-                bool*                               pResult,
-                JNIEnv*                             pEnv)
-{
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",\
-        "videoEditClasses_init()");
-
-        // Initialize the constants.
-        videoEditJava_initAudioEffectConstants(pResult, pEnv);
-        videoEditJava_initAudioFormatConstants(pResult, pEnv);
-        videoEditJava_initAudioSamplingFrequencyConstants(pResult, pEnv);
-        videoEditJava_initAudioTransitionConstants(pResult, pEnv);
-        videoEditJava_initBitrateConstants(pResult, pEnv);
-        videoEditJava_initClipTypeConstants(pResult, pEnv);
-        videoEditJava_initEngineConstants(pResult, pEnv);
-        videoEditJava_initErrorConstants(pResult, pEnv);
-        videoEditJava_initFileTypeConstants(pResult, pEnv);
-        videoEditJava_initMediaRenderingConstants(pResult, pEnv);
-        videoEditJava_initSlideDirectionConstants(pResult, pEnv);
-        videoEditJava_initTransitionBehaviourConstants(pResult, pEnv);
-        videoEditJava_initVideoEffectConstants(pResult, pEnv);
-        videoEditJava_initVideoFormatConstants(pResult, pEnv);
-        videoEditJava_initVideoFrameRateConstants(pResult, pEnv);
-        videoEditJava_initVideoFrameSizeConstants(pResult, pEnv);
-        videoEditJava_initVideoTransitionConstants(pResult, pEnv);
-
-        // Initialize the fields.
-        videoEditJava_initAlphaMagicFields(pResult, pEnv);
-        videoEditJava_initBackgroundMusicFields(pResult, pEnv);
-        videoEditJava_initClipSettingsFields(pResult, pEnv);
-        videoEditJava_initEditSettingsFields(pResult, pEnv);
-        videoEditJava_initEffectSettingsFields(pResult, pEnv);
-        videoEditJava_initEngineFields(pResult, pEnv);
-        videoEditJava_initSlideTransitionSettingsFields(pResult, pEnv);
-        videoEditJava_initTransitionSettingsFields(pResult, pEnv);
-        videoEditJava_initVersionFields(pResult, pEnv);
-        // Initialize the methods.
-        videoEditJava_initEngineMethods(pResult, pEnv);
-    }
-}
-
-void
-videoEditPropClass_init(
-                bool*                               pResult,
-                JNIEnv*                             pEnv)
-{
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",\
-            "videoEditPropClass_init()");
-
-        // Initialize the constants.
-        videoEditJava_initAudioFormatConstants(pResult, pEnv);
-        videoEditJava_initErrorConstants(pResult, pEnv);
-        videoEditJava_initFileTypeConstants(pResult, pEnv);
-        videoEditJava_initVideoFormatConstants(pResult, pEnv);
-
-        // Initialize the fields.
-        videoEditJava_initPropertiesFields(pResult, pEnv);
-    }
-}
-
-void
-videoEditClasses_getAlphaMagicSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4xVSS_AlphaMagicSettings**         ppSettings)
-{
-    VideoEditJava_AlphaMagicFieldIds fieldIds;
-    M4xVSS_AlphaMagicSettings* pSettings = M4OSA_NULL;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_AlphaMagicFieldIds));
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                   "videoEditClasses_getAlphaMagicSettings()");
-
-        // Retrieve the field ids.
-        videoEditJava_getAlphaMagicFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only validate the AlphaMagicSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if the clip is set.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                                                    (NULL == object),
-                                                    "alphaSettings is null");
-    }
-
-    // Only retrieve the AlphaMagicSettings if the fields could be located and validated.
-    if (*pResult)
-    {
-        // Allocate memory for the AlphaMagicSettings.
-        pSettings = (M4xVSS_AlphaMagicSettings*)videoEditOsal_alloc(pResult, pEnv,
-                sizeof(M4xVSS_AlphaMagicSettings), "AlphaMagicSettings");
-
-        // Check if memory could be allocated for the AlphaMagicSettings.
-        if (*pResult)
-        {
-            // Set the alpha magic file path (JPG file).
-            pSettings->pAlphaFilePath = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
-                    fieldIds.file, M4OSA_NULL);
-
-            // Check if the alpha magic file path is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                    (M4OSA_NULL == pSettings->pAlphaFilePath), "alphaSettings.file is null");
-        }
-
-        // Check if the alpha file path could be retrieved.
-        if (*pResult)
-        {
-            // Set the blending percentage between 0 and 100.
-            pSettings->blendingPercent = (M4OSA_UInt8)pEnv->GetIntField(object,
-                    fieldIds.blendingPercent);
-
-            // Set the direct effect or reverse.
-            pSettings->isreverse = (M4OSA_Bool)pEnv->GetBooleanField(object,
-                    fieldIds.invertRotation);
-
-            // Get the rgb width
-            pSettings->width = (M4OSA_UInt32) pEnv->GetIntField(object, fieldIds.rgbWidth );
-
-            pSettings->height = (M4OSA_UInt32) pEnv->GetIntField(object, fieldIds.rgbHeight );
-
-             VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "((((((((((path %s", pSettings->pAlphaFilePath);
-
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "------- getAlphaMagicSettings width %d", pEnv->GetIntField(object,
-                    fieldIds.rgbWidth ));
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                   "-------- getAlphaMagicSettings Height %d",
-                   pEnv->GetIntField(object, fieldIds.rgbHeight ));
-        }
-
-        // Check if settings could be set.
-        if (*pResult)
-        {
-            // Return the settings.
-            (*ppSettings) = pSettings;
-        }
-        else
-        {
-            // Free the settings.
-            videoEditClasses_freeAlphaMagicSettings(&pSettings);
-        }
-    }
-}
-
-void
-videoEditClasses_freeAlphaMagicSettings(
-                M4xVSS_AlphaMagicSettings**         ppSettings)
-{
-    // Check if memory was allocated for the AlphaMagicSettings.
-    if (M4OSA_NULL != (*ppSettings))
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                  "videoEditClasses_freeAlphaMagicSettings()");
-
-        // Free the alpha file path.
-        videoEditOsal_free((*ppSettings)->pAlphaFilePath);
-        (*ppSettings)->pAlphaFilePath = M4OSA_NULL;
-
-        // Free the settings structure.
-        videoEditOsal_free((*ppSettings));
-        (*ppSettings) = M4OSA_NULL;
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logAlphaMagicSettings(
-                M4xVSS_AlphaMagicSettings*          pSettings,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the AlphaMagicSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-             "%*c pAlphaFilePath:  %s",    indentation, ' ',
-            (M4OSA_NULL != pSettings->pAlphaFilePath) ? \
-            (char *)pSettings->pAlphaFilePath : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-             "%*c blendingPercent: %u %%", indentation, ' ',
-            (unsigned int)pSettings->blendingPercent);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c isreverse:       %s",    indentation, ' ',
-            pSettings->isreverse ? "true" : "false");
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-
-
-void
-videoEditClasses_getBackgroundMusicSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4xVSS_BGMSettings**                ppSettings)
-{
-    VideoEditJava_BackgroundMusicFieldIds fieldIds;
-    M4xVSS_BGMSettings*           pSettings = M4OSA_NULL;
-    bool                          converted = true;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_BackgroundMusicFieldIds));
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-               "videoEditClasses_getBackgroundMusicSettings()");
-
-        // Retrieve the field ids.
-        videoEditJava_getBackgroundMusicFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only retrieve the BackgroundMusicSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if the object is valid.
-        if (NULL != object)
-        {
-            // Allocate memory for the BackgroundMusicSettings.
-            pSettings = (M4xVSS_BGMSettings*)videoEditOsal_alloc(pResult, pEnv,
-                sizeof(M4xVSS_BGMSettings), "BackgroundMusicSettings");
-
-            // Check if memory could be allocated for the BackgroundMusicSettings.
-            if (*pResult)
-            {
-                // Set the input file path.
-                pSettings->pFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
-                        fieldIds.file, M4OSA_NULL);
-
-                // Check if the input file path is valid.
-                videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                        (M4OSA_NULL == pSettings->pFile), "backgroundMusicSettings.file is null");
-            }
-
-            // Check if the input file path could be retrieved.
-            if (*pResult)
-            {
-                // Set the file type .3gp, .amr, .mp3.
-                pSettings->FileType = M4VIDEOEDITING_kFileType_PCM;
-                /*(M4VIDEOEDITING_FileType)videoEditJava_getClipTypeJavaToC(
-                 &converted, pEnv->GetIntField(object, fieldIds.fileType));*/
-
-                // Check if the file type is valid.
-                videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                        !converted, "backgroundMusicSettings.fileType is invalid");
-            }
-
-            // Check if the file type could be retrieved.
-            if (*pResult)
-            {
-                // Set the time, in milliseconds, at which the added audio track is inserted.
-                pSettings->uiAddCts = (M4OSA_UInt32)pEnv->GetLongField(object,
-                        fieldIds.insertionTime);
-
-                // Set the volume, in percentage (0..100), of the added audio track.
-                pSettings->uiAddVolume = (M4OSA_UInt32)pEnv->GetIntField(object,
-                        fieldIds.volumePercent);
-
-                // Set the start time of the loop in milli seconds.
-                pSettings->uiBeginLoop = (M4OSA_UInt32)pEnv->GetLongField(object,
-                        fieldIds.beginLoop);
-
-                // Set the end time of the loop in milli seconds.
-                pSettings->uiEndLoop = (M4OSA_UInt32)pEnv->GetLongField(object,
-                        fieldIds.endLoop);
-                // Set the end time of the loop in milli seconds.
-                pSettings->b_DuckingNeedeed =
-                        (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.enableDucking);
-
-                // Set the end time of the loop in milli seconds.
-                pSettings->InDucking_threshold =
-                        (M4OSA_Int32)pEnv->GetIntField(object, fieldIds.duckingThreshold);
-
-                // Set the end time of the loop in milli seconds.
-                pSettings->lowVolume =
-                        (M4OSA_Float)(((M4OSA_Float)pEnv->GetIntField(object, fieldIds.lowVolume)));
-
-                // Set the end time of the loop in milli seconds.
-                pSettings->bLoop = (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.isLooping);
-
-                // Set sampling freq and channels
-                pSettings->uiSamplingFrequency = M4VIDEOEDITING_k32000_ASF;
-                pSettings->uiNumChannels = 2;
-            }
-
-            // Check if settings could be set.
-            if (*pResult)
-            {
-                // Return the settings.
-                (*ppSettings) = pSettings;
-            }
-            else
-            {
-                // Free the settings.
-                videoEditClasses_freeBackgroundMusicSettings(&pSettings);
-            }
-        }
-    }
-}
-
-void
-videoEditClasses_freeBackgroundMusicSettings(
-                M4xVSS_BGMSettings**                ppSettings)
-{
-    // Check if memory was allocated for the BackgroundMusicSettings.
-    if (M4OSA_NULL != (*ppSettings))
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-         "videoEditClasses_freeBackgroundMusicSettings()");
-
-        // Free the input file path.
-        videoEditOsal_free((*ppSettings)->pFile);
-        (*ppSettings)->pFile = M4OSA_NULL;
-
-        // Free the settings structure.
-        videoEditOsal_free((*ppSettings));
-        (*ppSettings) = M4OSA_NULL;
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logBackgroundMusicSettings(
-                M4xVSS_BGMSettings*                 pSettings,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the BackgroundMusicSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c pFile:       %s",
-            indentation, ' ',
-            (M4OSA_NULL != pSettings->pFile) ? (char *)pSettings->pFile : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c FileType:    %s",    indentation, ' ',
-            videoEditJava_getClipTypeString(pSettings->FileType));
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiAddCts:    %u ms",
-            indentation, ' ', (unsigned int)pSettings->uiAddCts);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiAddVolume: %u %%",
-            indentation, ' ', (unsigned int)pSettings->uiAddVolume);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiBeginLoop: %u ms",
-            indentation, ' ', (unsigned int)pSettings->uiBeginLoop);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c uiEndLoop:   %u ms",
-            indentation, ' ', (unsigned int)pSettings->uiEndLoop);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c b_DuckingNeedeed:\
-            %u ", indentation, ' ', (bool)pSettings->b_DuckingNeedeed);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c InDucking_threshold: \
-            %u ms", indentation, ' ', (unsigned int)pSettings->InDucking_threshold);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c lowVolume:   %2.2f ",\
-            indentation, ' ', (float)pSettings->lowVolume);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c bLoop:   %u ms",\
-            indentation, ' ', (bool)pSettings->bLoop);
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>",
-            indentation, ' ');
-    }
-}
-#endif
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logClipProperties(
-                M4VIDEOEDITING_ClipProperties*      pProperties,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the ClipProperties.
-    if (M4OSA_NULL != pProperties)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bAnalysed:                        %s",       indentation, ' ',
-            pProperties->bAnalysed ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c Version:                          %d.%d.%d", indentation, ' ',
-            pProperties->Version[0], pProperties->Version[1], pProperties->Version[2]);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiClipDuration:                   %u",       indentation, ' ',
-            (unsigned int)pProperties->uiClipDuration);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c FileType:                         %s",       indentation, ' ',
-            videoEditJava_getClipTypeString(pProperties->FileType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c ftyp:",
-                                              indentation, ' ');
-        videoEditClasses_logFtypBox(&pProperties->ftyp, indentation + VIDEOEDIT_LOG_INDENTATION);
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c VideoStreamType:                  %s",       indentation, ' ',
-            videoEditJava_getVideoFormatString(pProperties->VideoStreamType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiClipVideoDuration:              %u",       indentation, ' ',
-            (unsigned int)pProperties->uiClipVideoDuration);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiVideoBitrate:                   %s",       indentation, ' ',
-            videoEditJava_getBitrateString(pProperties->uiVideoBitrate));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiVideoMaxAuSize:                 %u",       indentation, ' ',
-            (unsigned int)pProperties->uiVideoMaxAuSize);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiVideoWidth:                     %u",       indentation, ' ',
-            (unsigned int)pProperties->uiVideoWidth);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiVideoHeight:                    %u",       indentation, ' ',
-            (unsigned int)(unsigned int)pProperties->uiVideoHeight);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiVideoTimeScale:                 %u",       indentation, ' ',
-            (unsigned int)pProperties->uiVideoTimeScale);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c fAverageFrameRate:                %.3f",     indentation, ' ',
-            pProperties->fAverageFrameRate);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bMPEG4dataPartition:              %s",       indentation, ' ',
-            pProperties->bMPEG4dataPartition ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bMPEG4rvlc:                       %s",       indentation, ' ',
-            pProperties->bMPEG4rvlc ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bMPEG4resynchMarker:              %s",       indentation, ' ',
-            pProperties->bMPEG4resynchMarker ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c AudioStreamType:                  %s",       indentation, ' ',
-            videoEditJava_getAudioFormatString(pProperties->AudioStreamType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiClipAudioDuration:              %u",       indentation, ' ',
-            (unsigned int)pProperties->uiClipAudioDuration);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiAudioBitrate:                   %s",       indentation, ' ',
-            videoEditJava_getBitrateString(pProperties->uiAudioBitrate));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiAudioMaxAuSize:                 %u",       indentation, ' ',
-            (unsigned int)pProperties->uiAudioMaxAuSize);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiNbChannels:                     %u",       indentation, ' ',
-            (unsigned int)pProperties->uiNbChannels);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiSamplingFrequency:              %u",       indentation, ' ',
-            (unsigned int)pProperties->uiSamplingFrequency);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiExtendedSamplingFrequency:      %u",       indentation, ' ',
-            (unsigned int)pProperties->uiExtendedSamplingFrequency);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiDecodedPcmSize:                 %u",       indentation, ' ',
-            (unsigned int)pProperties->uiDecodedPcmSize);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bVideoIsEditable:                 %s",       indentation, ' ',
-            pProperties->bVideoIsEditable ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bAudioIsEditable:                 %s",       indentation, ' ',
-            pProperties->bAudioIsEditable ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bVideoIsCompatibleWithMasterClip: %s",       indentation, ' ',
-            pProperties->bVideoIsCompatibleWithMasterClip ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bAudioIsCompatibleWithMasterClip: %s",       indentation, ' ',
-            pProperties->bAudioIsCompatibleWithMasterClip ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiClipAudioVolumePercentage:      %d",       indentation, ' ',
-                        pProperties->uiClipAudioVolumePercentage);
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES", "%*c <null>",
-            indentation, ' ');
-    }
-}
-#endif
-
-void
-videoEditClasses_getClipSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_ClipSettings**            ppSettings)
-{
-
-    VideoEditJava_ClipSettingsFieldIds fieldIds;
-    M4VSS3GPP_ClipSettings*    pSettings = M4OSA_NULL;
-    M4OSA_ERR                  result    = M4NO_ERROR;
-    bool                       converted = true;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_ClipSettingsFieldIds));
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "videoEditClasses_getClipSettings()");
-
-        // Retrieve the field ids.
-        videoEditJava_getClipSettingsFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only validate the ClipSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if the clip is set.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                                                    (NULL == object),
-                                                    "clip is null");
-    }
-
-    // Only retrieve the ClipSettings if the fields could be located and validated.
-    if (*pResult)
-    {
-        // Allocate memory for the ClipSettings.
-        pSettings = (M4VSS3GPP_ClipSettings *)videoEditOsal_alloc(pResult, pEnv,
-            sizeof(M4VSS3GPP_ClipSettings), "ClipSettings");
-
-        // Check if memory could be allocated for the ClipSettings.
-        if (*pResult)
-        {
-            // Log the API call.
-            VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4xVSS_CreateClipSettings()");
-
-            // Initialize the ClipSettings.
-            result = M4xVSS_CreateClipSettings(pSettings, NULL, 0, 0);
-
-            // Log the result.
-            VIDEOEDIT_LOG_RESULT(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                videoEditOsal_getResultString(result));
-
-            // Check if the initialization succeeded.
-            videoEditJava_checkAndThrowRuntimeException(pResult, pEnv,
-                (M4NO_ERROR != result), result);
-        }
-
-        // Check if the allocation and initialization succeeded
-        //(required because pSettings is dereferenced).
-        if (*pResult)
-        {
-            // Set the input file path.
-            pSettings->pFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
-                fieldIds.clipPath, &pSettings->filePathSize);
-
-            // Check if the file path is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                    (M4OSA_NULL == pSettings->pFile), "clip.clipPath is null");
-        }
-
-        // Check if the input file could be retrieved.
-        if (*pResult)
-        {
-            // Set the file type .3gp, .amr, .mp3.
-            pSettings->FileType = (M4VIDEOEDITING_FileType)videoEditJava_getClipTypeJavaToC(
-                                        &converted, pEnv->GetIntField(object, fieldIds.fileType));
-
-            if (( pSettings->FileType == M4VIDEOEDITING_kFileType_JPG) ||
-                 ( pSettings->FileType == M4VIDEOEDITING_kFileType_PNG)) {
-                 pSettings->FileType = M4VIDEOEDITING_kFileType_ARGB8888;
-            }
-
-            // Check if the file type is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                    !converted, "clip.fileType is invalid");
-        }
-
-        // Check if the file type could be retrieved.
-        if (*pResult)
-        {
-            // Set the begin cut time, in milliseconds.
-            pSettings->uiBeginCutTime =
-                (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.beginCutTime);
-
-            // Set the end cut time, in milliseconds.
-            pSettings->uiEndCutTime = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.endCutTime);
-
-            // Set the begin cut time, in percent of clip duration (only for 3GPP clip !).
-            pSettings->xVSS.uiBeginCutPercent =
-                (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.beginCutPercent);
-
-            // Set the end cut time, in percent of clip duration (only for 3GPP clip !).
-            pSettings->xVSS.uiEndCutPercent =
-                (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.endCutPercent);
-
-            // Set the duration of the clip, if different from 0,
-            // has priority on uiEndCutTime or uiEndCutPercent.
-            pSettings->xVSS.uiDuration = 0;
-
-            // Set whether or not the pan and zoom mode is enabled.
-            pSettings->xVSS.isPanZoom =
-                (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.panZoomEnabled);
-
-            // Set the pan and zoom start zoom percentage.
-            pSettings->xVSS.PanZoomXa        =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomPercentStart);
-
-            // Set the pan and zoom start x.
-            pSettings->xVSS.PanZoomTopleftXa =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftXStart);
-
-            // Set the pan and zoom start y.
-            pSettings->xVSS.PanZoomTopleftYa =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftYStart);
-
-            // Set the pan and zoom end zoom percentage.
-            pSettings->xVSS.PanZoomXb        =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomPercentEnd);
-
-            // Set the pan and zoom end x.
-            pSettings->xVSS.PanZoomTopleftXb =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftXEnd);
-
-            // Set the pan and zoom end y.
-            pSettings->xVSS.PanZoomTopleftYb =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.panZoomTopLeftYEnd);
-
-            // Set the media rendering mode, only used with JPEG to crop, resize,
-            // or render black borders.
-            pSettings->xVSS.MediaRendering =
-                (M4xVSS_MediaRendering)videoEditJava_getMediaRenderingJavaToC(
-                    &converted, pEnv->GetIntField(object,fieldIds.mediaRendering));
-
-            // Check if the media rendering is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
-                "clip.mediaRendering is invalid");
-
-             // Capture the rgb file width and height
-            pSettings->ClipProperties.uiStillPicWidth =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.rgbFileWidth);
-            pSettings->ClipProperties.uiStillPicHeight  =
-                (M4OSA_UInt16)pEnv->GetIntField(object, fieldIds.rgbFileHeight);
-
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", \
-                "getClipSettings-- rgbFileWidth %d ",
-                pSettings->ClipProperties.uiStillPicWidth);
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", \
-                "getClipSettings-- rgbFileHeight %d ",
-                pSettings->ClipProperties.uiStillPicHeight);
-
-            // Set the video rotation degree
-            pSettings->ClipProperties.videoRotationDegrees =
-                (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.rotationDegree);
-        }
-
-        // Check if settings could be set.
-        if (*pResult)
-        {
-            // Return the settings.
-            (*ppSettings) = pSettings;
-        }
-        else
-        {
-            // Free the settings.
-            videoEditClasses_freeClipSettings(&pSettings);
-        }
-    }
-}
-
-void
-videoEditClasses_createClipSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                M4VSS3GPP_ClipSettings*             pSettings,
-                jobject*                            pObject)
-{
-    VideoEditJava_ClipSettingsFieldIds fieldIds;
-    jclass                     clazz    = NULL;
-    jobject                    object   = NULL;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_ClipSettingsFieldIds));
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "videoEditClasses_createClipSettings()");
-
-        // Retrieve the class.
-        videoEditJava_getClipSettingsClass(pResult, pEnv, &clazz);
-
-        // Retrieve the field ids.
-        videoEditJava_getClipSettingsFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only create an object if the class and fields could be located.
-    if (*pResult)
-    {
-        // Allocate a new object.
-        object = pEnv->AllocObject(clazz);
-        if (NULL != object)
-        {
-            // Set the clipPath field.
-            pEnv->SetObjectField(object, fieldIds.clipPath, NULL);
-
-            // Set the fileType field.
-            pEnv->SetIntField(object, fieldIds.fileType, videoEditJava_getClipTypeCToJava(
-                                                                    pSettings->FileType));
-
-            // Set the beginCutTime field.
-            pEnv->SetIntField(object, fieldIds.beginCutTime, pSettings->uiBeginCutTime);
-
-            // Set the endCutTime field.
-            pEnv->SetIntField(object, fieldIds.endCutTime, pSettings->uiEndCutTime);
-
-            // Set the beginCutPercent field.
-            pEnv->SetIntField(object, fieldIds.beginCutPercent, pSettings->xVSS.uiBeginCutPercent);
-
-            // Set the endCutPercent field.
-            pEnv->SetIntField(object, fieldIds.endCutPercent, pSettings->xVSS.uiEndCutPercent);
-
-            // Set the panZoomEnabled field.
-            pEnv->SetBooleanField(object, fieldIds.panZoomEnabled, pSettings->xVSS.isPanZoom);
-
-            // Set the panZoomPercentStart field.
-            pEnv->SetIntField(object, fieldIds.panZoomPercentStart,
-                (1000 - pSettings->xVSS.PanZoomXa));
-
-            // Set the panZoomTopLeftXStart field.
-            pEnv->SetIntField(object, fieldIds.panZoomTopLeftXStart,
-                pSettings->xVSS.PanZoomTopleftXa);
-
-            // Set the panZoomTopLeftYStart field.
-            pEnv->SetIntField(object, fieldIds.panZoomTopLeftYStart,
-                pSettings->xVSS.PanZoomTopleftYa);
-
-            // Set the panZoomPercentEnd field.
-            pEnv->SetIntField(object, fieldIds.panZoomPercentEnd,
-                (1000 - pSettings->xVSS.PanZoomXb));
-
-            // Set the panZoomTopLeftXEnd field.
-            pEnv->SetIntField(object, fieldIds.panZoomTopLeftXEnd,
-                pSettings->xVSS.PanZoomTopleftXb);
-
-            // Set the panZoomTopLeftYEnd field.
-            pEnv->SetIntField(object, fieldIds.panZoomTopLeftYEnd,
-                pSettings->xVSS.PanZoomTopleftYb);
-
-            // Set the mediaRendering field.
-            pEnv->SetIntField(object, fieldIds.mediaRendering,
-                videoEditJava_getMediaRenderingCToJava(pSettings->xVSS.MediaRendering));
-
-            // Set the rgb file width and height
-            pEnv->SetIntField(object, fieldIds.rgbFileWidth,
-                pSettings->ClipProperties.uiStillPicWidth );
-
-            pEnv->SetIntField(object, fieldIds.rgbFileHeight,
-                pSettings->ClipProperties.uiStillPicHeight );
-
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "rgbFileWeight %d rgbFileHeight %d ",
-                pSettings->ClipProperties.uiStillPicWidth ,
-                pSettings->ClipProperties.uiStillPicHeight);
-
-            // Set the video rotation
-            pEnv->SetIntField(object, fieldIds.rotationDegree,
-                pSettings->ClipProperties.videoRotationDegrees);
-
-            // Return the object.
-            (*pObject) = object;
-        }
-    }
-}
-void
-videoEditPropClass_createProperties(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditPropClass_Properties*      pProperties,
-                jobject*                            pObject)
-{
-    VideoEditJava_PropertiesFieldIds fieldIds;
-    jclass                   clazz    = NULL;
-    jobject                  object   = NULL;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_PropertiesFieldIds));
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-                "videoEditPropClass_createProperties()");
-
-        // Retrieve the class.
-        videoEditJava_getPropertiesClass(pResult, pEnv, &clazz);
-
-        // Retrieve the field ids.
-        videoEditJava_getPropertiesFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only create an object if the class and fields could be located.
-    if (*pResult)
-    {
-        // Allocate a new object.
-        object = pEnv->AllocObject(clazz);
-        if (NULL != object)
-        {
-            // Set the duration field.
-            pEnv->SetIntField(object, fieldIds.duration, pProperties->uiClipDuration);
-
-            // Set the fileType field.
-            pEnv->SetIntField(object, fieldIds.fileType,
-                videoEditJava_getFileTypeCToJava(pProperties->FileType));
-
-            // Set the videoFormat field.
-            pEnv->SetIntField(object, fieldIds.videoFormat,
-                videoEditJava_getVideoFormatCToJava(pProperties->VideoStreamType));
-
-            // Set the videoDuration field.
-            pEnv->SetIntField(object, fieldIds.videoDuration, pProperties->uiClipVideoDuration);
-
-            // Set the videoBitrate field.
-            pEnv->SetIntField(object, fieldIds.videoBitrate, pProperties->uiVideoBitrate);
-
-            // Set the width field.
-            pEnv->SetIntField(object, fieldIds.width, pProperties->uiVideoWidth);
-
-            // Set the height field.
-            pEnv->SetIntField(object, fieldIds.height, pProperties->uiVideoHeight);
-
-            // Set the averageFrameRate field.
-            pEnv->SetFloatField(object, fieldIds.averageFrameRate, pProperties->fAverageFrameRate);
-
-            // Set the profile field.
-            pEnv->SetIntField(object, fieldIds.profile,
-                pProperties->uiVideoProfile);
-
-            // Set the level field.
-            pEnv->SetIntField(object, fieldIds.level,
-                pProperties->uiVideoLevel);
-
-            // Set whether profile supported
-            pEnv->SetBooleanField(object, fieldIds.profileSupported,
-                pProperties->bProfileSupported);
-
-            // Set whether level supported
-            pEnv->SetBooleanField(object, fieldIds.levelSupported,
-                pProperties->bLevelSupported);
-
-            // Set the audioFormat field.
-            pEnv->SetIntField(object, fieldIds.audioFormat,
-                videoEditJava_getAudioFormatCToJava(pProperties->AudioStreamType));
-
-            // Set the audioDuration field.
-            pEnv->SetIntField(object, fieldIds.audioDuration, pProperties->uiClipAudioDuration);
-
-            // Set the audioBitrate field.
-            pEnv->SetIntField(object, fieldIds.audioBitrate, pProperties->uiAudioBitrate);
-
-            // Set the audioChannels field.
-            pEnv->SetIntField(object, fieldIds.audioChannels, pProperties->uiNbChannels);
-
-            // Set the audioSamplingFrequency field.
-            pEnv->SetIntField(object, fieldIds.audioSamplingFrequency,
-                pProperties->uiSamplingFrequency);
-
-            // Set the video rotation field.
-            pEnv->SetIntField(object, fieldIds.videoRotation, pProperties->uiRotation);
-
-            // Return the object.
-            (*pObject) = object;
-        }
-    }
-}
-
-void
-videoEditClasses_freeClipSettings(
-                M4VSS3GPP_ClipSettings**            ppSettings)
-{
-    // Check if memory was allocated for the ClipSettings.
-    if (M4OSA_NULL != (*ppSettings))
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "videoEditClasses_freeClipSettings()");
-
-        // Free the input file path.
-        videoEditOsal_free((*ppSettings)->pFile);
-        (*ppSettings)->pFile = M4OSA_NULL;
-        (*ppSettings)->filePathSize = 0;
-
-        // Free the clip settings.
-        M4xVSS_FreeClipSettings((*ppSettings));
-
-        // Free the settings structure.
-        videoEditOsal_free((*ppSettings));
-        (*ppSettings) = M4OSA_NULL;
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logClipSettings(
-                M4VSS3GPP_ClipSettings*             pSettings,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the ClipSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pFile:           %s", indentation, ' ',
-            (M4OSA_NULL != pSettings->pFile) ? (char*)pSettings->pFile : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c FileType:        %s", indentation, ' ',
-            videoEditJava_getClipTypeString(pSettings->FileType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c filePathSize:    %u", indentation, ' ',
-            (unsigned int)pSettings->filePathSize);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c ClipProperties:",  indentation, ' ');
-        videoEditClasses_logClipProperties(&pSettings->ClipProperties,
-            indentation + VIDEOEDIT_LOG_INDENTATION);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiBeginCutTime:    %u ms", indentation, ' ',
-            (unsigned int)pSettings->uiBeginCutTime);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiEndCutTime:      %u ms", indentation, ' ',
-            (unsigned int)pSettings->uiEndCutTime);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiBeginCutPercent: %u %%", indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiBeginCutPercent);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiEndCutPercent:   %u %%", indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiEndCutPercent);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiDuration:        %u ms", indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiDuration);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c isPanZoom:         %s",    indentation, ' ',
-            pSettings->xVSS.isPanZoom ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c PanZoomXa:         %d ms", indentation, ' ',
-            pSettings->xVSS.PanZoomXa);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c PanZoomTopleftXa:  %d ms", indentation, ' ',
-            pSettings->xVSS.PanZoomTopleftXa);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c PanZoomTopleftYa:  %d ms", indentation, ' ',
-            pSettings->xVSS.PanZoomTopleftYa);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c PanZoomXb:         %d ms", indentation, ' ',
-            pSettings->xVSS.PanZoomXb);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c PanZoomTopleftXb:  %d ms", indentation, ' ',
-            pSettings->xVSS.PanZoomTopleftXb);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c PanZoomTopleftYb:  %d ms", indentation, ' ',
-            pSettings->xVSS.PanZoomTopleftYb);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c MediaRendering:    %s",    indentation, ' ',
-            videoEditJava_getMediaRenderingString(pSettings->xVSS.MediaRendering));
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-
-
-void
-videoEditClasses_getEditSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_EditSettings**            ppSettings,
-                bool                                flag)
-{
-    VideoEditJava_EditSettingsFieldIds fieldIds;
-    jobjectArray               clipSettingsArray           = NULL;
-    jsize                      clipSettingsArraySize       = 0;
-    jobject                    clipSettings                = NULL;
-    jobjectArray               transitionSettingsArray     = NULL;
-    jsize                      transitionSettingsArraySize = 0;
-    jobject                    transitionSettings          = NULL;
-    jobjectArray               effectSettingsArray         = NULL;
-    jsize                      effectSettingsArraySize     = 0;
-    jobject                    effectSettings              = NULL;
-    jobject                    backgroundMusicSettings     = NULL;
-    int                        audioChannels               = 0;
-    M4VSS3GPP_EditSettings*    pSettings                   = M4OSA_NULL;
-    bool                       converted                   = true;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_EditSettingsFieldIds));
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "videoEditClasses_getEditSettings()");
-
-        // Retrieve the field ids.
-        videoEditJava_getEditSettingsFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only retrieve the EditSettings if the previous action succeeded.
-    if (*pResult)
-    {
-        // Check if the object is valid.
-        if (NULL != object)
-        {
-            // Retrieve the clipSettingsArray.
-            videoEditJava_getArray(pResult, pEnv, object,
-                           fieldIds.clipSettingsArray,
-                           &clipSettingsArray,
-                           &clipSettingsArraySize);
-
-            // Retrieve the transitionSettingsArray.
-            videoEditJava_getArray(pResult, pEnv, object,
-                           fieldIds.transitionSettingsArray,
-                           &transitionSettingsArray,
-                           &transitionSettingsArraySize);
-
-            // Retrieve the effectSettingsArray.
-            videoEditJava_getArray(pResult, pEnv, object,
-                           fieldIds.effectSettingsArray,
-                           &effectSettingsArray,
-                           &effectSettingsArraySize);
-
-            // Retrieve the backgroundMusicSettings.
-            videoEditJava_getObject(pResult, pEnv, object, fieldIds.backgroundMusicSettings,
-                    &backgroundMusicSettings);
-
-            // Check if the arrays and background music settings object could be retrieved.
-            if (*pResult)
-            {
-                // Retrieve the number of channels.
-                audioChannels = pEnv->GetIntField(object, fieldIds.audioChannels);
-            }
-        }
-    }
-
-    // Only validate the EditSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if there is at least one clip.
-        //videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-         //                                          (clipSettingsArraySize < 1),
-         //                                          "there should be at least one clip");
-        if(clipSettingsArraySize < 1) {
-            return;
-        }
-        if(flag)
-        {
-            // Check if there are clips.
-            if ((clipSettingsArraySize != 0) || (transitionSettingsArraySize != 0))
-            {
-                // The number of transitions must be equal to the number of clips - 1.
-                videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                         (clipSettingsArraySize != (transitionSettingsArraySize + 1)),
-                         "the number of transitions should be equal to the number of clips - 1");
-            }
-        }
-    }
-
-    // Only retrieve the EditSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if the object is valid.
-        if (NULL != object)
-        {
-            // Allocate memory for the EditSettings.
-            pSettings = (M4VSS3GPP_EditSettings*)videoEditOsal_alloc(pResult, pEnv,
-                    sizeof(M4VSS3GPP_EditSettings), "EditSettings");
-
-            // Check if memory could be allocated for the EditSettings.
-            if (*pResult)
-            {
-                // Set the number of clips that will be edited.
-                pSettings->uiClipNumber = clipSettingsArraySize;
-
-                // Check if the clip settings array contains items.
-                if (clipSettingsArraySize > 0)
-                {
-                    // Allocate memory for the clip settings array.
-                    pSettings->pClipList = (M4VSS3GPP_ClipSettings **)videoEditOsal_alloc(pResult,
-                                pEnv,
-                                clipSettingsArraySize * sizeof(M4VSS3GPP_ClipSettings *),
-                                "ClipSettingsArray");
-                    if (*pResult)
-                    {
-                        // Loop over all clip settings objects.
-                        for (int i = 0; ((*pResult) && (i < clipSettingsArraySize)); i++)
-                        {
-                            // Get the clip settings object.
-                            clipSettings = pEnv->GetObjectArrayElement(clipSettingsArray, i);
-
-                            // Get the clip settings.
-                            videoEditClasses_getClipSettings(pResult, pEnv, clipSettings,
-                                &pSettings->pClipList[i]);
-
-                            // Free the local references to avoid memory leaks
-                            pEnv->DeleteLocalRef(clipSettings);
-                        }
-                    }
-                }
-
-                // Check if the transition settings array contains items.
-                if (transitionSettingsArraySize > 0)
-                {
-                    // Allocate memory for the transition settings array.
-                    pSettings->pTransitionList =
-                            (M4VSS3GPP_TransitionSettings **)videoEditOsal_alloc(pResult,
-                                pEnv, transitionSettingsArraySize * sizeof(M4VSS3GPP_TransitionSettings *),
-                                "TransitionSettingsArray");
-                    if (*pResult)
-                    {
-                        // Loop over all transition settings objects.
-                        for (int i = 0; ((*pResult) && (i < transitionSettingsArraySize)); i++)
-                        {
-                            // Get the transition settings object.
-                            transitionSettings =
-                                    pEnv->GetObjectArrayElement(transitionSettingsArray, i);
-
-                            // Get the transition settings.
-                            videoEditClasses_getTransitionSettings(pResult, pEnv,
-                                    transitionSettings, &pSettings->pTransitionList[i]);
-
-                            // Free the local references to avoid memory leaks
-                            pEnv->DeleteLocalRef(transitionSettings);
-                        }
-                    }
-                }
-
-                // Check if the effect settings array contains items.
-                if (effectSettingsArraySize > 0)
-                {
-                    // Allocate memory for the effect settings array.
-                    pSettings->Effects = (M4VSS3GPP_EffectSettings*)videoEditOsal_alloc(pResult,
-                                pEnv,
-                                effectSettingsArraySize * sizeof(M4VSS3GPP_EffectSettings),
-                                "EffectSettingsArray");
-                    if (*pResult)
-                    {
-                        // Loop over all effect settings objects.
-                        for (int i = 0; ((*pResult) && (i < effectSettingsArraySize)); i++)
-                        {
-                            // Get the effect settings object.
-                            effectSettings = pEnv->GetObjectArrayElement(effectSettingsArray, i);
-
-                            // Get the effect settings.
-                            videoEditClasses_getEffectSettings(pResult, pEnv, effectSettings,
-                                    &pSettings->Effects[i]);
-
-                            // Free the local references to avoid memory leaks
-                            pEnv->DeleteLocalRef(effectSettings);
-                        }
-                    }
-                }
-
-                // Check if the clips, transitions and effects could be set.
-                if (*pResult)
-                {
-                    // Set the number of effects in the clip.
-                    pSettings->nbEffects = (M4OSA_UInt8)effectSettingsArraySize;
-
-                    // Set the frame rate of the output video.
-                    pSettings->videoFrameRate =
-                        (M4VIDEOEDITING_VideoFramerate)videoEditJava_getVideoFrameRateJavaToC(
-                             &converted, pEnv->GetIntField(object, fieldIds.videoFrameRate));
-
-                    // Check if the frame rate is valid.
-                    videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                        !converted, "editSettings.videoFrameRate is invalid");
-                }
-
-                // Check if the frame rate could be set.
-                if (*pResult)
-                {
-                    // Set the path of the output file.
-                    pSettings->pOutputFile = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv,
-                        object, fieldIds.outputFile, &pSettings->uiOutputPathSize);
-                }
-
-                // Check if path of the output file could be set.
-                if (*pResult)
-                {
-                    // Set the path of the temporary file produced when using
-                    // the constant memory 3gp writer.
-                    pSettings->pTemporaryFile = M4OSA_NULL;
-
-                    // Set the output video size.
-                    pSettings->xVSS.outputVideoSize =
-                        (M4VIDEOEDITING_VideoFrameSize)videoEditJava_getVideoFrameSizeJavaToC(
-                                &converted, pEnv->GetIntField(object, fieldIds.videoFrameSize));
-
-                    // Check if the output video size is valid.
-                    videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                        !converted, "editSettings.videoFrameSize is invalid");
-                }
-
-                // Check if the output video size could be set.
-                if (*pResult)
-                {
-                    // Set the output video format.
-                    pSettings->xVSS.outputVideoFormat =
-                        (M4VIDEOEDITING_VideoFormat)videoEditJava_getVideoFormatJavaToC(
-                               &converted, pEnv->GetIntField(object, fieldIds.videoFormat));
-
-                    // Check if the output video format is valid.
-                    videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                        !converted, "editSettings.videoFormat is invalid");
-                }
-
-                // Check if the output video format could be set.
-                if (*pResult)
-                {
-                    // Set the output audio format.
-                    pSettings->xVSS.outputAudioFormat =
-                            (M4VIDEOEDITING_AudioFormat)videoEditJava_getAudioFormatJavaToC(
-                                  &converted, pEnv->GetIntField(object, fieldIds.audioFormat));
-
-                    // Check if the output audio format is valid.
-                    videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                            !converted, "editSettings.audioFormat is invalid");
-                }
-
-                // Check if the output audio format could be set.
-                if (*pResult)
-                {
-                    // Set the output audio sampling frequency when not replacing the audio,
-                    // or replacing it with MP3 audio.
-                    pSettings->xVSS.outputAudioSamplFreq =
-                        (M4VIDEOEDITING_AudioSamplingFrequency)\
-                            videoEditJava_getAudioSamplingFrequencyJavaToC(
-                                &converted, pEnv->GetIntField(object, fieldIds.audioSamplingFreq));
-
-                    // Check if the output audio sampling frequency is valid.
-                    videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                            !converted, "editSettings.audioSamplingFreq is invalid");
-                }
-
-                // Check if the output audio sampling frequency could be set.
-                if (*pResult)
-                {
-                    // Check if the number of audio channels is valid.
-                    videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                        ((0 != audioChannels ) ||
-                        ((M4VIDEOEDITING_kNoneAudio != pSettings->xVSS.outputAudioFormat) &&
-                        (M4VIDEOEDITING_kNullAudio != pSettings->xVSS.outputAudioFormat) ) ) &&
-                        (1 != audioChannels ) &&
-                        (2 != audioChannels ),
-                        "editSettings.audioChannels must be set to 0, 1 or 2");
-                }
-
-                // Check if the number of audio channels is valid.
-                if (*pResult)
-                {
-                    // Set the maximum output file size (MMS usecase).
-                    pSettings->xVSS.outputFileSize = (M4OSA_UInt32)pEnv->GetIntField(object,
-                            fieldIds.maxFileSize);
-
-                    // Whether or not the audio is mono, only valid for AAC.
-                    pSettings->xVSS.bAudioMono = (M4OSA_Bool)(1 == audioChannels);
-
-                    // Set the output video bitrate.
-                    pSettings->xVSS.outputVideoBitrate = (M4OSA_UInt32)pEnv->GetIntField(object,
-                            fieldIds.videoBitrate);
-
-                    // Set the output video profile.
-                    pSettings->xVSS.outputVideoProfile = (M4OSA_UInt32)pEnv->GetIntField(object,
-                            fieldIds.videoProfile);
-
-                    // Set the output video level.
-                    pSettings->xVSS.outputVideoLevel = (M4OSA_UInt32)pEnv->GetIntField(object,
-                            fieldIds.videoLevel);
-
-                    // Set the output audio bitrate.
-                    pSettings->xVSS.outputAudioBitrate = (M4OSA_UInt32)pEnv->GetIntField(object,
-                            fieldIds.audioBitrate);
-
-                    // Set the background music settings.
-                    videoEditClasses_getBackgroundMusicSettings(pResult, pEnv,
-                            backgroundMusicSettings, &pSettings->xVSS.pBGMtrack);
-
-                    // Set the text rendering function (will be set elsewhere).
-                    pSettings->xVSS.pTextRenderingFct = M4OSA_NULL;
-                    pSettings->PTVolLevel =
-                            (M4OSA_Float)pEnv->GetIntField(object, fieldIds.primaryTrackVolume);
-                }
-            }
-
-            // Check if settings could be set.
-            if (*pResult)
-            {
-                // Return the settings.
-                (*ppSettings) = pSettings;
-            }
-            else
-            {
-                // Free the settings.
-                videoEditClasses_freeEditSettings(&pSettings);
-            }
-        }
-    }
-}
-
-void
-videoEditClasses_freeEditSettings(
-                M4VSS3GPP_EditSettings**            ppSettings)
-{
-    // Check if memory was allocated for the EditSettings.
-    if (M4OSA_NULL != (*ppSettings))
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "videoEditClasses_freeEditSettings()");
-
-        // Free the background music settings.
-        videoEditClasses_freeBackgroundMusicSettings(&(*ppSettings)->xVSS.pBGMtrack);
-
-        // Free the path of the output file.
-        videoEditOsal_free((*ppSettings)->pOutputFile);
-        (*ppSettings)->pOutputFile = M4OSA_NULL;
-        (*ppSettings)->uiOutputPathSize = 0;
-
-        // Check if the EffectSettings should be freed.
-        if (M4OSA_NULL != (*ppSettings)->Effects)
-        {
-            // Loop over all effect settings.
-            for (int i = 0; i < (*ppSettings)->nbEffects; i++)
-            {
-                // Free the effect settings.
-                videoEditClasses_freeEffectSettings(&(*ppSettings)->Effects[i]);
-            }
-
-            // Free the memory for the effect settings array.
-            videoEditOsal_free((*ppSettings)->Effects);
-            (*ppSettings)->Effects = M4OSA_NULL;
-        }
-
-        // Reset the number of effects in the clip.
-        (*ppSettings)->nbEffects = 0;
-
-        // Check if there are clips.
-        if (0 < (*ppSettings)->uiClipNumber)
-        {
-            // Check if the TransitionSettings should be freed.
-            if (M4OSA_NULL != (*ppSettings)->pTransitionList)
-            {
-                // Loop over all transition settings.
-                for (int i = 0; i < ((*ppSettings)->uiClipNumber - 1); i++)
-                {
-                    // Free the transition settings.
-                    videoEditClasses_freeTransitionSettings(&(*ppSettings)->pTransitionList[i]);
-                }
-
-                // Free the memory for the transition settings array.
-                videoEditOsal_free((*ppSettings)->pTransitionList);
-                (*ppSettings)->pTransitionList = M4OSA_NULL;
-            }
-
-            // Check if the ClipSettings should be freed.
-            if (M4OSA_NULL != (*ppSettings)->pClipList)
-            {
-                // Loop over all clip settings.
-                for (int i = 0; i < (*ppSettings)->uiClipNumber; i++)
-                {
-                    // Free the clip settings.
-                    videoEditClasses_freeClipSettings(&(*ppSettings)->pClipList[i]);
-                }
-
-                // Free the memory for the clip settings array.
-                videoEditOsal_free((*ppSettings)->pClipList);
-                (*ppSettings)->pClipList = M4OSA_NULL;
-            }
-        }
-
-        // Reset the number of clips.
-        (*ppSettings)->uiClipNumber = 0;
-
-        // Free the settings structure.
-        videoEditOsal_free((*ppSettings));
-        (*ppSettings) = M4OSA_NULL;
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logEditSettings(
-                M4VSS3GPP_EditSettings*             pSettings,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the EditSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiClipNumber:         %d", indentation, ' ',
-            pSettings->uiClipNumber);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiMasterClip:         %d", indentation, ' ',
-            pSettings->uiMasterClip);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pClipList:            %s", indentation, ' ',
-            (M4OSA_NULL != pSettings->pClipList) ? " " : "<null>");
-        if (M4OSA_NULL != pSettings->pClipList)
-        {
-            indentation += VIDEOEDIT_LOG_INDENTATION;
-            for (int i = 0; i < pSettings->uiClipNumber; i++)
-            {
-                VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "%*c pClipList[%d]:", indentation, ' ',
-                    i);
-                videoEditClasses_logClipSettings(pSettings->pClipList[i],
-                    indentation + VIDEOEDIT_LOG_INDENTATION);
-            }
-            indentation -= VIDEOEDIT_LOG_INDENTATION;
-        }
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pTransitionList:      %s", indentation, ' ',
-            (M4OSA_NULL != pSettings->pTransitionList) ? " " : "<null>");
-        if (M4OSA_NULL != pSettings->pTransitionList)
-        {
-            indentation += VIDEOEDIT_LOG_INDENTATION;
-            for (int i = 0; i < (pSettings->uiClipNumber - 1); i++)
-            {
-                VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "%*c pTransitionList[%d]:", indentation, ' ', i);
-                videoEditClasses_logTransitionSettings(pSettings->pTransitionList[i],
-                    indentation + VIDEOEDIT_LOG_INDENTATION);
-            }
-            indentation -= VIDEOEDIT_LOG_INDENTATION;
-        }
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c Effects:              %s", indentation, ' ',
-            (M4OSA_NULL != pSettings->Effects)   ? " " : "<null>");
-        if (M4OSA_NULL != pSettings->Effects)
-        {
-            indentation += VIDEOEDIT_LOG_INDENTATION;
-            for (int i = 0; i < pSettings->nbEffects; i++)
-            {
-                VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "%*c Effects[%d]:", indentation, ' ',  i);
-                videoEditClasses_logEffectSettings(&pSettings->Effects[i],
-                    indentation + VIDEOEDIT_LOG_INDENTATION);
-            }
-            indentation -= VIDEOEDIT_LOG_INDENTATION;
-        }
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c nbEffects:            %d", indentation, ' ',
-            pSettings->nbEffects);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c videoFrameRate:       %s", indentation, ' ',
-            videoEditJava_getVideoFrameRateString(pSettings->videoFrameRate));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pOutputFile:          %s", indentation, ' ',
-            (M4OSA_NULL != pSettings->pOutputFile) ? (char*)pSettings->pOutputFile : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiOutputPathSize:     %u", indentation, ' ',
-            (unsigned int)pSettings->uiOutputPathSize);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pTemporaryFile:       %s", indentation, ' ',
-            (M4OSA_NULL != pSettings->pTemporaryFile) ?\
-             (char*)pSettings->pTemporaryFile : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputVideoSize:      %s", indentation, ' ',
-            videoEditJava_getVideoFrameSizeString(pSettings->xVSS.outputVideoSize));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputVideoFormat:    %s", indentation, ' ',
-            videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoFormat));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputVideoProfile:    %u", indentation, ' ',
-            videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoProfile));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputVideoLevel:    %u", indentation, ' ',
-            videoEditJava_getVideoFormatString(pSettings->xVSS.outputVideoLevel));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputAudioFormat:    %s", indentation, ' ',
-            videoEditJava_getAudioFormatString(pSettings->xVSS.outputAudioFormat));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputAudioSamplFreq: %s", indentation, ' ',
-            videoEditJava_getAudioSamplingFrequencyString(pSettings->xVSS.outputAudioSamplFreq));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputFileSize:       %u", indentation, ' ',
-            (unsigned int)pSettings->xVSS.outputFileSize);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bAudioMono:           %s", indentation, ' ',
-            pSettings->xVSS.bAudioMono ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputVideoBitrate:   %s", indentation, ' ',
-            videoEditJava_getBitrateString(pSettings->xVSS.outputVideoBitrate));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c outputAudioBitrate:   %s", indentation, ' ',
-            videoEditJava_getBitrateString(pSettings->xVSS.outputAudioBitrate));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pBGMtrack:",               indentation, ' ');
-        videoEditClasses_logBackgroundMusicSettings(pSettings->xVSS.pBGMtrack,
-            indentation + VIDEOEDIT_LOG_INDENTATION);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pTextRenderingFct:    %s", indentation, ' ',
-            (M4OSA_NULL != pSettings->xVSS.pTextRenderingFct) ? "set" : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c PTVolLevel:       %u", indentation, ' ',
-            (unsigned int)pSettings->PTVolLevel);
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-
-
-void
-videoEditClasses_getEffectSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_EffectSettings*           pSettings)
-{
-
-    VideoEditJava_EffectSettingsFieldIds fieldIds;
-    bool                         converted = true;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_EffectSettingsFieldIds));
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-         "videoEditClasses_getEffectSettings()");
-
-        // Retrieve the field ids.
-        videoEditJava_getEffectSettingsFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only validate the EffectSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if the effect is set.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                                                    (NULL == object),
-                                                    "effect is null");
-    }
-
-    // Only retrieve the EffectSettings if the fields could be located and validated.
-    if (*pResult)
-    {
-        // Set the start time in milliseconds.
-        pSettings->uiStartTime = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.startTime);
-
-        // Set the duration in milliseconds.
-        pSettings->uiDuration = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.duration);
-
-        // Set the video effect type, None, FadeIn, FadeOut, etc.
-        pSettings->VideoEffectType =
-                (M4VSS3GPP_VideoEffectType)videoEditJava_getVideoEffectJavaToC(
-                              &converted, pEnv->GetIntField(object, fieldIds.videoEffectType));
-
-        // Check if the video effect type is valid.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                !converted, "effect.videoEffectType is invalid");
-    }
-
-    // Check if the video effect type could be set.
-    if (*pResult)
-    {
-        // Set the external effect function.
-        pSettings->ExtVideoEffectFct = M4OSA_NULL;
-
-        // Set the context given to the external effect function.
-        pSettings->pExtVideoEffectFctCtxt = M4OSA_NULL;
-
-        // Set the audio effect type, None, FadeIn, FadeOut.
-        pSettings->AudioEffectType =
-                (M4VSS3GPP_AudioEffectType)videoEditJava_getAudioEffectJavaToC(
-                        &converted, pEnv->GetIntField(object, fieldIds.audioEffectType));
-
-        // Check if the audio effect type is valid.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                !converted, "effect.audioEffectType is invalid");
-    }
-
-    // Check if the audio effect type could be set.
-    if (*pResult)
-    {
-        // Set the start in percentage of the cut clip duration.
-        pSettings->xVSS.uiStartPercent = (M4OSA_UInt32)pEnv->GetIntField(object,
-                fieldIds.startPercent);
-
-        // Set the duration in percentage of the ((clip duration) - (effect starttime)).
-        pSettings->xVSS.uiDurationPercent = (M4OSA_UInt32)pEnv->GetIntField(object,
-                fieldIds.durationPercent);
-
-        // Set the framing file path (GIF/PNG file).
-        pSettings->xVSS.pFramingFilePath = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv,
-                object, fieldIds.framingFile, M4OSA_NULL);
-
-        // Check if this is a framing effect.
-        if (M4xVSS_kVideoEffectType_Framing == (M4xVSS_VideoEffectType)pSettings->VideoEffectType)
-        {
-            // Check if the framing file path is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                    (M4OSA_NULL == pSettings->xVSS.pFramingFilePath), "effect.framingFile is null");
-        }
-    }
-
-    // Check if the framing file path could be retrieved.
-    if (*pResult)
-    {
-        // Set the Framing RGB565 buffer.
-        pSettings->xVSS.pFramingBuffer = M4OSA_NULL;
-
-        // Set the top-left X coordinate in the output picture
-        // where the added frame will be displayed.
-        pSettings->xVSS.topleft_x = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.topLeftX);
-
-        // Set the top-left Y coordinate in the output picture
-        // where the added frame will be displayed.
-        pSettings->xVSS.topleft_y = (M4OSA_UInt32)pEnv->GetIntField(object, fieldIds.topLeftY);
-
-        // Set whether or not the framing image is resized to output video size.
-        pSettings->xVSS.bResize =
-                (M4OSA_Bool)pEnv->GetBooleanField(object, fieldIds.framingResize);
-
-        // Set the new size to which framing buffer needs to be resized to
-        pSettings->xVSS.framingScaledSize =
-                (M4VIDEOEDITING_VideoFrameSize)pEnv->GetIntField(object, fieldIds.framingScaledSize);
-
-        // Set the text buffer.
-        pSettings->xVSS.pTextBuffer = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv, object,
-                fieldIds.text, &pSettings->xVSS.textBufferSize);
-    }
-
-    // Check if the text buffer could be retrieved.
-    if (*pResult)
-    {
-        // Set the data used by the font engine (size, color...).
-        pSettings->xVSS.pRenderingData = (M4OSA_Char*)videoEditJava_getString(pResult, pEnv,
-                object, fieldIds.textRenderingData, M4OSA_NULL);
-    }
-
-    // Check if the text rendering data could be retrieved.
-    if (*pResult)
-    {
-        // Set the text plane width.
-        pSettings->xVSS.uiTextBufferWidth = (M4OSA_UInt32)pEnv->GetIntField(object,
-                fieldIds.textBufferWidth);
-
-        // Set the text plane height.
-        pSettings->xVSS.uiTextBufferHeight = (M4OSA_UInt32)pEnv->GetIntField(object,
-                fieldIds.textBufferHeight);
-
-        // Set the processing rate of the effect added when using the Fifties effect.
-        pSettings->xVSS.uiFiftiesOutFrameRate = (M4OSA_UInt32)pEnv->GetIntField(object,
-                fieldIds.fiftiesFrameRate);
-
-        // Set the RGB16 input color of the effect added when using the rgb16 color effect.
-        pSettings->xVSS.uiRgb16InputColor = (M4OSA_UInt16)pEnv->GetIntField(object,
-                fieldIds.rgb16InputColor);
-
-        // Set the start percentage of Alpha blending.
-        pSettings->xVSS.uialphaBlendingStart = (M4OSA_UInt8)pEnv->GetIntField(object,
-                fieldIds.alphaBlendingStartPercent);
-
-        // Set the middle percentage of Alpha blending.
-        pSettings->xVSS.uialphaBlendingMiddle = (M4OSA_UInt8)pEnv->GetIntField(object,
-                fieldIds.alphaBlendingMiddlePercent);
-
-        // Set the end percentage of Alpha blending.
-        pSettings->xVSS.uialphaBlendingEnd = (M4OSA_UInt8)pEnv->GetIntField(object,
-                fieldIds.alphaBlendingEndPercent);
-
-        // Set the duration, in percentage of effect duration, of the FadeIn phase.
-        pSettings->xVSS.uialphaBlendingFadeInTime = (M4OSA_UInt8)pEnv->GetIntField(object,
-                fieldIds.alphaBlendingFadeInTimePercent);
-
-        // Set the duration, in percentage of effect duration, of the FadeOut phase.
-        pSettings->xVSS.uialphaBlendingFadeOutTime = (M4OSA_UInt8)pEnv->GetIntField(object,
-                fieldIds.alphaBlendingFadeOutTimePercent);
-
-        if (pSettings->xVSS.pFramingFilePath != M4OSA_NULL)
-        {
-            pSettings->xVSS.pFramingBuffer =
-                (M4VIFI_ImagePlane *)M4OSA_32bitAlignedMalloc(sizeof(M4VIFI_ImagePlane),
-                0x00,(M4OSA_Char *)"framing buffer");
-        }
-
-        if (pSettings->xVSS.pFramingBuffer != M4OSA_NULL)
-        {
-             // OverFrame height and width
-            pSettings->xVSS.pFramingBuffer->u_width = pEnv->GetIntField(object,
-             fieldIds.width);
-
-            pSettings->xVSS.pFramingBuffer->u_height = pEnv->GetIntField(object,
-             fieldIds.height);
-
-            pSettings->xVSS.width = pSettings->xVSS.pFramingBuffer->u_width;
-            pSettings->xVSS.height = pSettings->xVSS.pFramingBuffer->u_height;
-            pSettings->xVSS.rgbType = M4VSS3GPP_kRGB565;
-
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "pFramingBuffer u_width %d ", pSettings->xVSS.pFramingBuffer->u_width);
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                    "pFramingBuffer u_height %d", pSettings->xVSS.pFramingBuffer->u_height);
-
-        }
-
-        // Check if settings could be set.
-        if (!(*pResult))
-        {
-            // Free the settings.
-            videoEditClasses_freeEffectSettings(pSettings);
-        }
-    }
-}
-
-void
-videoEditClasses_freeEffectSettings(
-                M4VSS3GPP_EffectSettings*           pSettings)
-{
-    // Check if memory was allocated for the EffectSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "videoEditClasses_freeEffectSettings()");
-
-        // Free the data used by the font engine (size, color...).
-        videoEditOsal_free(pSettings->xVSS.pRenderingData);
-        pSettings->xVSS.pRenderingData = M4OSA_NULL;
-
-        // Free the text buffer.
-        videoEditOsal_free(pSettings->xVSS.pTextBuffer);
-        pSettings->xVSS.pTextBuffer = M4OSA_NULL;
-        pSettings->xVSS.textBufferSize = 0;
-
-        // Free the framing file path.
-        videoEditOsal_free(pSettings->xVSS.pFramingFilePath);
-        pSettings->xVSS.pFramingFilePath = M4OSA_NULL;
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logEffectSettings(
-                M4VSS3GPP_EffectSettings*           pSettings,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the EffectSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiStartTime:                %u ms", indentation, ' ',
-            (unsigned int)pSettings->uiStartTime);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiDuration:                 %u ms", indentation, ' ',
-            (unsigned int)pSettings->uiDuration);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c VideoEffectType:            %s",    indentation, ' ',
-            videoEditJava_getVideoEffectString(pSettings->VideoEffectType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-             "%*c ExtVideoEffectFct:          %s",    indentation, ' ',
-            (M4OSA_NULL != pSettings->ExtVideoEffectFct) ? "set" : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pExtVideoEffectFctCtxt:     %s",    indentation, ' ',
-            (M4OSA_NULL != pSettings->pExtVideoEffectFctCtxt) ? "set" : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c AudioEffectType:            %s",    indentation, ' ',
-            videoEditJava_getAudioEffectString(pSettings->AudioEffectType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiStartPercent:             %u %%", indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiStartPercent);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiDurationPercent:          %u %%", indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiDurationPercent);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pFramingFilePath:           %s",    indentation, ' ',
-            (M4OSA_NULL != pSettings->xVSS.pFramingFilePath) ?\
-             (char*)pSettings->xVSS.pFramingFilePath : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pFramingBuffer:             %s",    indentation, ' ',
-            (M4OSA_NULL != pSettings->xVSS.pFramingBuffer) ? "set" : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c topleft_x:                  %u",    indentation, ' ',
-            (unsigned int)pSettings->xVSS.topleft_x);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c topleft_y:                  %u",    indentation, ' ',
-            (unsigned int)pSettings->xVSS.topleft_y);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c bResize:                    %s",    indentation, ' ',
-            pSettings->xVSS.bResize ? "true" : "false");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pTextBuffer:                %s",    indentation, ' ',
-            (M4OSA_NULL != pSettings->xVSS.pTextBuffer) ?\
-             (char*)pSettings->xVSS.pTextBuffer : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c textBufferSize:             %u",    indentation, ' ',
-            (unsigned int)pSettings->xVSS.textBufferSize);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c pRenderingData:             %s",    indentation, ' ',
-            (M4OSA_NULL != pSettings->xVSS.pRenderingData) ?\
-             (char*)pSettings->xVSS.pRenderingData : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiTextBufferWidth:          %u",    indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiTextBufferWidth);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-             "%*c uiTextBufferHeight:         %u",    indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiTextBufferHeight);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiFiftiesOutFrameRate:      %u",    indentation, ' ',
-            (unsigned int)pSettings->xVSS.uiFiftiesOutFrameRate);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uiRgb16InputColor:          %d",    indentation, ' ',
-            pSettings->xVSS.uiRgb16InputColor);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uialphaBlendingStart:       %d %%", indentation, ' ',
-            pSettings->xVSS.uialphaBlendingStart);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uialphaBlendingMiddle:      %d %%", indentation, ' ',
-            pSettings->xVSS.uialphaBlendingMiddle);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uialphaBlendingEnd:         %d %%", indentation, ' ',
-            pSettings->xVSS.uialphaBlendingEnd);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uialphaBlendingFadeInTime:  %d %%", indentation, ' ',
-            pSettings->xVSS.uialphaBlendingFadeInTime);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c uialphaBlendingFadeOutTime: %d %%", indentation, ' ',
-            pSettings->xVSS.uialphaBlendingFadeOutTime);
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-
-
-void
-videoEditClasses_getSlideTransitionSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4xVSS_SlideTransitionSettings**    ppSettings)
-{
-    VideoEditJava_SlideTransitionSettingsFieldIds fieldIds  = {NULL};
-    M4xVSS_SlideTransitionSettings*       pSettings = M4OSA_NULL;
-    bool                                  converted = true;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "videoEditClasses_getSlideTransitionSettings()");
-
-        // Retrieve the field ids.
-        videoEditJava_getSlideTransitionSettingsFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-
-    // Only validate the SlideTransitionSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if the clip is set.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                                                    (NULL == object),
-                                                    "slideSettings is null");
-    }
-
-    // Only retrieve the SlideTransitionSettings if the fields could be located and validated.
-    if (*pResult)
-    {
-        // Allocate memory for the SlideTransitionSettings.
-        pSettings = (M4xVSS_SlideTransitionSettings*)videoEditOsal_alloc(pResult, pEnv,
-                sizeof(M4xVSS_SlideTransitionSettings), "SlideTransitionSettings");
-
-        // Check if memory could be allocated for the SlideTransitionSettings.
-        if (*pResult)
-        {
-            // Set the direction of the slide.
-            pSettings->direction =
-                    (M4xVSS_SlideTransition_Direction)videoEditJava_getSlideDirectionJavaToC(
-                            &converted, pEnv->GetIntField(object, fieldIds.direction));
-
-            // Check if the direction is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                    !converted, "slideSettings.direction is invalid");
-        }
-
-        // Check if settings could be set.
-        if (*pResult)
-        {
-            // Return the settings.
-            (*ppSettings) = pSettings;
-        }
-        else
-        {
-            // Free the settings.
-            videoEditClasses_freeSlideTransitionSettings(&pSettings);
-        }
-    }
-}
-
-void
-videoEditClasses_freeSlideTransitionSettings(
-                M4xVSS_SlideTransitionSettings**    ppSettings)
-{
-    // Check if memory was allocated for the SlideTransitionSettings.
-    if (M4OSA_NULL != (*ppSettings))
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                "videoEditClasses_freeSlideTransitionSettings()");
-
-        // Free the settings structure.
-        videoEditOsal_free((*ppSettings));
-        (*ppSettings) = M4OSA_NULL;
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logSlideTransitionSettings(
-                M4xVSS_SlideTransitionSettings*     pSettings,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the SlideTransitionSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c direction: %s", indentation, ' ',
-            videoEditJava_getSlideDirectionString(pSettings->direction));
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-            "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-
-
-void
-videoEditClasses_getTransitionSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_TransitionSettings**      ppSettings)
-{
-
-    VideoEditJava_TransitionSettingsFieldIds fieldIds;
-    jobject                          alphaSettings = NULL;
-    jobject                          slideSettings = NULL;
-    M4VSS3GPP_TransitionSettings*    pSettings     = M4OSA_NULL;
-    bool                             converted     = true;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_TransitionSettingsFieldIds));
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-               "videoEditClasses_getTransitionSettings()");
-
-        // Retrieve the field ids.
-        videoEditJava_getTransitionSettingsFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only validate the TransitionSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Check if the transition is set.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                                                    (NULL == object),
-                                                    "transition is null");
-    }
-
-    // Check if the field ids could be located and validated.
-    if (*pResult)
-    {
-        // Retrieve the alphaSettings.
-        videoEditJava_getObject(pResult, pEnv, object, fieldIds.alphaSettings, &alphaSettings);
-
-        // Retrieve the slideSettings.
-        videoEditJava_getObject(pResult, pEnv, object, fieldIds.slideSettings, &slideSettings);
-    }
-
-    // Only retrieve the TransitionSettings if the fields could be located.
-    if (*pResult)
-    {
-        // Allocate memory for the TransitionSettings.
-        pSettings = (M4VSS3GPP_TransitionSettings*)videoEditOsal_alloc(pResult,
-                pEnv, sizeof(M4VSS3GPP_TransitionSettings), "TransitionSettings");
-
-        // Check if memory could be allocated for the TransitionSettings.
-        if (*pResult)
-        {
-            // Set the duration of the transition, in milliseconds (set to 0 to get no transition).
-            pSettings->uiTransitionDuration = (M4OSA_UInt32)pEnv->GetIntField(object,
-                    fieldIds.duration);
-
-            // Set the type of the video transition.
-            pSettings->VideoTransitionType =
-                    (M4VSS3GPP_VideoTransitionType)videoEditJava_getVideoTransitionJavaToC(
-                             &converted, pEnv->GetIntField(object, fieldIds.videoTransitionType));
-
-            // Check if the video transition type is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
-                            "transition.videoTransitionType is invalid");
-        }
-
-        // Check if the video transition type could be set.
-        if (*pResult)
-        {
-            // Set the external transition video effect function.
-            pSettings->ExtVideoTransitionFct = M4OSA_NULL;
-
-            // Set the context of the external transition video effect function.
-            pSettings->pExtVideoTransitionFctCtxt = M4OSA_NULL;
-
-            // Set the type of the audio transition.
-            pSettings->AudioTransitionType =
-                    (M4VSS3GPP_AudioTransitionType)videoEditJava_getAudioTransitionJavaToC(
-                            &converted, pEnv->GetIntField(object, fieldIds.audioTransitionType));
-
-            // Check if the audio transition type is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
-                             "transition.audioTransitionType is invalid");
-        }
-
-        // Check if the audio transition type could be set.
-        if (*pResult)
-        {
-            // Set the transition behaviour.
-            pSettings->TransitionBehaviour =
-                    (M4VSS3GPP_TransitionBehaviour)videoEditJava_getTransitionBehaviourJavaToC(
-                            &converted, pEnv->GetIntField(object, fieldIds.transitionBehaviour));
-
-            // Check if the transition behaviour is valid.
-            videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, !converted,
-                                                    "transition.transitionBehaviour is invalid");
-        }
-
-        // Check if the audio transition behaviour could be set.
-        if (*pResult)
-        {
-            // Check if a slide transition or alpha magic setting object is expected.
-            if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition)
-            {
-                // Set the slide transition settings.
-                videoEditClasses_getSlideTransitionSettings(pResult, pEnv, slideSettings,
-                                     &pSettings->xVSS.transitionSpecific.pSlideTransitionSettings);
-            }
-            else if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_AlphaMagic)
-            {
-                // Set the alpha magic settings.
-                videoEditClasses_getAlphaMagicSettings(pResult, pEnv, alphaSettings,
-                                  &pSettings->xVSS.transitionSpecific.pAlphaMagicSettings);
-            }
-        }
-
-        // Check if settings could be set.
-        if (*pResult)
-        {
-            // Return the settings.
-            (*ppSettings) = pSettings;
-        }
-        else
-        {
-            // Free the settings.
-            videoEditClasses_freeTransitionSettings(&pSettings);
-        }
-    }
-}
-
-void
-videoEditClasses_freeTransitionSettings(
-                M4VSS3GPP_TransitionSettings**      ppSettings)
-{
-    // Check if memory was allocated for the TransitionSettings.
-    if (M4OSA_NULL != (*ppSettings))
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                               "videoEditClasses_freeTransitionSettings()");
-
-        // Check if a slide transition or alpha magic setting structure is expected.
-        if ((int)(*ppSettings)->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition)
-        {
-            // Free the slide transition settings.
-            videoEditClasses_freeSlideTransitionSettings(
-                               &(*ppSettings)->xVSS.transitionSpecific.pSlideTransitionSettings);
-        }
-        else
-        {
-            // Free the alpha magic settings.
-            videoEditClasses_freeAlphaMagicSettings(
-                              &(*ppSettings)->xVSS.transitionSpecific.pAlphaMagicSettings);
-        }
-
-        // Free the settings structure.
-        videoEditOsal_free((*ppSettings));
-        (*ppSettings) = M4OSA_NULL;
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logTransitionSettings(
-                M4VSS3GPP_TransitionSettings*       pSettings,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the TransitionSettings.
-    if (M4OSA_NULL != pSettings)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                               "%*c uiTransitionDuration:       %u ms", indentation, ' ',
-                                  (unsigned int)pSettings->uiTransitionDuration);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                           "%*c VideoTransitionType:        %s",    indentation, ' ',
-                           videoEditJava_getVideoTransitionString(pSettings->VideoTransitionType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                              "%*c ExtVideoTransitionFct:      %s",    indentation, ' ',
-                              (M4OSA_NULL != pSettings->ExtVideoTransitionFct) ? "set" : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                         "%*c pExtVideoTransitionFctCtxt: %s",    indentation, ' ',
-                         (M4OSA_NULL != pSettings->pExtVideoTransitionFctCtxt) ? "set" : "<null>");
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                         "%*c AudioTransitionType:        %s",    indentation, ' ',
-                          videoEditJava_getAudioTransitionString(pSettings->AudioTransitionType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                      "%*c TransitionBehaviour:        %s",    indentation, ' ',
-                      videoEditJava_getTransitionBehaviourString(pSettings->TransitionBehaviour));
-
-        // Check if a slide transition or alpha magic setting structure is expected.
-        if ((int)pSettings->VideoTransitionType == M4xVSS_kVideoTransitionType_SlideTransition)
-        {
-            // Log the slide transition settings.
-            VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                                   "%*c pSlideTransitionSettings:", indentation, ' ');
-            videoEditClasses_logSlideTransitionSettings\
-            (pSettings->xVSS.transitionSpecific.pSlideTransitionSettings,
-            indentation + VIDEOEDIT_LOG_INDENTATION);
-        }
-        else
-        {
-            // Log the alpha magic settings.
-            VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                                   "%*c pAlphaMagicSettings:", indentation, ' ');
-            videoEditClasses_logAlphaMagicSettings\
-            (pSettings->xVSS.transitionSpecific.pAlphaMagicSettings,
-            indentation + VIDEOEDIT_LOG_INDENTATION);
-        }
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                               "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditPropClass_logProperties(
-                VideoEditPropClass_Properties*                   pProperties,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the Properties.
-    if (M4OSA_NULL != pProperties)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiClipDuration:                   %u",       indentation, ' ',
-            (unsigned int)pProperties->uiClipDuration);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c FileType:                         %s",       indentation, ' ',
-            videoEditJava_getFileTypeString(pProperties->FileType));
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c VideoStreamType:                  %s",       indentation, ' ',
-            videoEditJava_getVideoFormatString(pProperties->VideoStreamType));
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiClipVideoDuration:              %u",       indentation, ' ',
-            (unsigned int)pProperties->uiClipVideoDuration);
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiVideoBitrate:                   %s",       indentation, ' ',
-            videoEditJava_getBitrateString(pProperties->uiVideoBitrate));
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiVideoWidth:                     %u",       indentation, ' ',
-            (unsigned int)pProperties->uiVideoWidth);
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiVideoHeight:                    %u",       indentation, ' ',
-            (unsigned int)(unsigned int)pProperties->uiVideoHeight);
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c fAverageFrameRate:                %.3f",     indentation, ' ',
-            pProperties->fAverageFrameRate);
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c AudioStreamType:                  %s",       indentation, ' ',
-            videoEditJava_getAudioFormatString(pProperties->AudioStreamType));
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiClipAudioDuration:              %u",       indentation, ' ',
-            (unsigned int)pProperties->uiClipAudioDuration);
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiAudioBitrate:                   %s",       indentation, ' ',
-            videoEditJava_getBitrateString(pProperties->uiAudioBitrate));
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c uiNbChannels:                     %u",       indentation, ' ',
-            (unsigned int)pProperties->uiNbChannels);
-
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-             "%*c uiSamplingFrequency:              %u",       indentation, ' ',
-            (unsigned int)pProperties->uiSamplingFrequency);
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_PROP_CLASSES",
-            "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-
-
-void
-videoEditClasses_createVersion(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                M4_VersionInfo*                     pVersionInfo,
-                jobject*                            pObject)
-{
-
-    VideoEditJava_VersionFieldIds fieldIds;
-    jclass                clazz    = NULL;
-    jobject               object   = NULL;
-    memset(&fieldIds, 0, sizeof(VideoEditJava_VersionFieldIds));
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                               "videoEditClasses_createVersion()");
-
-        // Retrieve the class.
-        videoEditJava_getVersionClass(pResult, pEnv, &clazz);
-
-        // Retrieve the field ids.
-        videoEditJava_getVersionFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Only create an object if the class and fields could be located.
-    if (*pResult)
-    {
-        // Allocate a new object.
-        object = pEnv->AllocObject(clazz);
-
-        // check if alloc is done
-        videoEditJava_checkAndThrowRuntimeException(pResult, pEnv,
-                                                    (NULL == object),
-                                                    M4ERR_ALLOC);
-        if (NULL != object)
-        {
-            // Set the major field.
-            pEnv->SetIntField(object, fieldIds.major, pVersionInfo->m_major);
-
-            // Set the minor field.
-            pEnv->SetIntField(object, fieldIds.minor, pVersionInfo->m_minor);
-
-            // Set the revision field.
-            pEnv->SetIntField(object, fieldIds.revision, pVersionInfo->m_revision);
-
-            // Return the object.
-            (*pObject) = object;
-        }
-    }
-}
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-void
-videoEditClasses_logVersion(
-                M4_VersionInfo*                     pVersionInfo,
-                int                                 indentation)
-{
-    // Check if memory was allocated for the Version.
-    if (M4OSA_NULL != pVersionInfo)
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                             "%*c major:    %u ms", indentation, ' ',
-                             (unsigned int)pVersionInfo->m_major);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                              "%*c minor:    %u",    indentation, ' ',
-                              (unsigned int)pVersionInfo->m_minor);
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                             "%*c revision: %u",    indentation, ' ',
-                             (unsigned int)pVersionInfo->m_revision);
-    }
-    else
-    {
-        VIDEOEDIT_LOG_SETTING(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                              "%*c <null>", indentation, ' ');
-    }
-}
-#endif
-
-
-void*
-videoEditClasses_getContext(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object)
-{
-    void*                pContext = M4OSA_NULL;
-    jclass               clazz    = NULL;
-    VideoEditJava_EngineFieldIds fieldIds = {NULL};
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                               "videoEditClasses_getContext()");
-
-        // Retrieve the class.
-        videoEditJava_getEngineClass(pResult, pEnv, &clazz);
-
-        // Retrieve the field ids.
-        videoEditJava_getEngineFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Check if the class and field ids could be located.
-    if (*pResult)
-    {
-        // Retrieve the context pointer.
-        pContext = (void *)pEnv->GetLongField(object, fieldIds.context);
-    }
-
-    // Return the context pointer.
-    return(pContext);
-}
-
-void
-videoEditClasses_setContext(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                void*                               pContext)
-{
-    jclass               clazz    = NULL;
-    VideoEditJava_EngineFieldIds fieldIds = {NULL};
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                               "videoEditClasses_setContext()");
-
-        // Retrieve the class.
-        videoEditJava_getEngineClass(pResult, pEnv, &clazz);
-
-        // Retrieve the field ids.
-        videoEditJava_getEngineFieldIds(pResult, pEnv, &fieldIds);
-    }
-
-    // Check if the class and field ids could be located.
-    if (*pResult)
-    {
-        // Set the context field.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                        "The context value from JAVA before setting is = %p",
-                        (void *)pEnv->GetLongField(object, fieldIds.context));
-
-        pEnv->SetLongField(object, fieldIds.context, (jlong)pContext);
-        M4OSA_TRACE1_1("The context value in JNI is = %p",pContext);
-
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_CLASSES",
-                         "The context value from JAVA after setting is = %p",
-                         (void *)pEnv->GetLongField(object, fieldIds.context));
-    }
-}
-
diff --git a/media/jni/mediaeditor/VideoEditorClasses.h b/media/jni/mediaeditor/VideoEditorClasses.h
deleted file mode 100644
index a4c82a8..0000000
--- a/media/jni/mediaeditor/VideoEditorClasses.h
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef VIDEO_EDITOR_CLASSES_H
-#define VIDEO_EDITOR_CLASSES_H
-
-#include <VideoEditorJava.h>
-#include <VideoEditorClasses.h>
-/**
- ************************************************************************
- * @file        VideoEditorClasses.h
- * @brief       Interface for JNI methods/defines that have specific
- *              access to class, objects and method Ids defined in Java layer
- ************************************************************************
-*/
-
-
-extern "C" {
-#include <M4xVSS_API.h>
-#include <M4VSS3GPP_API.h>
-#include <M4VSS3GPP_ErrorCodes.h>
-#include <M4MCS_ErrorCodes.h>
-#include <M4READER_Common.h>
-#include <M4WRITER_common.h>
-};
-
-/*
- * Java layer class/object name strings
- */
-#define PACKAGE_NAME                           "android/media/videoeditor"
-
-#define MANUAL_EDIT_ENGINE_CLASS_NAME          PACKAGE_NAME"/MediaArtistNativeHelper"
-#define MEDIA_PROPERTIES_ENGINE_CLASS_NAME     PACKAGE_NAME"/MediaArtistNativeHelper"
-
-#define AUDIO_FORMAT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioFormat"
-#define RESULTS_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Results"
-#define VERSION_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Version"
-#define AUDIO_SAMPLING_FREQUENCY_CLASS_NAME    MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSamplingFrequency"
-#define BITRATE_CLASS_NAME                     MANUAL_EDIT_ENGINE_CLASS_NAME"$Bitrate"
-#define ERROR_CLASS_NAME                       MANUAL_EDIT_ENGINE_CLASS_NAME"$Result"
-#define FILE_TYPE_CLASS_NAME                   MANUAL_EDIT_ENGINE_CLASS_NAME"$FileType"
-#define MEDIA_RENDERING_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$MediaRendering"
-#define VIDEO_FORMAT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFormat"
-#define VIDEO_FRAME_RATE_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameRate"
-#define VIDEO_FRAME_SIZE_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoFrameSize"
-#define VIDEO_PROFILE_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoProfile"
-#define ALPHA_MAGIC_SETTINGS_CLASS_NAME        MANUAL_EDIT_ENGINE_CLASS_NAME"$AlphaMagicSettings"
-#define AUDIO_EFFECT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioEffect"
-#define AUDIO_TRANSITION_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioTransition"
-#define BACKGROUND_MUSIC_SETTINGS_CLASS_NAME   MANUAL_EDIT_ENGINE_CLASS_NAME"$BackgroundMusicSettings"
-#define CLIP_SETTINGS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$ClipSettings"
-#define EDIT_SETTINGS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$EditSettings"
-#define EFFECT_SETTINGS_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$EffectSettings"
-#define SLIDE_DIRECTION_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideDirection"
-#define SLIDE_TRANSITION_SETTINGS_CLASS_NAME   MANUAL_EDIT_ENGINE_CLASS_NAME"$SlideTransitionSettings"
-#define TRANSITION_BEHAVIOUR_CLASS_NAME        MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionBehaviour"
-#define TRANSITION_SETTINGS_CLASS_NAME         MANUAL_EDIT_ENGINE_CLASS_NAME"$TransitionSettings"
-#define VIDEO_EFFECT_CLASS_NAME                MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoEffect"
-#define VIDEO_TRANSITION_CLASS_NAME            MANUAL_EDIT_ENGINE_CLASS_NAME"$VideoTransition"
-#define PREVIEW_CLIPS_CLASS_NAME               MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClips"
-#define PREVIEW_SETTING_CLASS_NAME             MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewSettings"
-#define PREVIEW_PROPERTIES_CLASS_NAME          MANUAL_EDIT_ENGINE_CLASS_NAME"$PreviewClipProperties"
-#define AUDIO_SETTINGS_CLASS_NAME              MANUAL_EDIT_ENGINE_CLASS_NAME"$AudioSettings"
-#define PROPERTIES_CLASS_NAME                  MANUAL_EDIT_ENGINE_CLASS_NAME"$Properties"
-
-#define TASK_IDLE                                   0
-#define TASK_LOADING_SETTINGS                       1
-#define TASK_ENCODING                               2
-
-/*
- * File type enum
- */
-typedef enum
-{
-    VideoEditClasses_kFileType_3GPP,
-    VideoEditClasses_kFileType_MP4,
-    VideoEditClasses_kFileType_AMR,
-    VideoEditClasses_kFileType_MP3,
-    VideoEditClasses_kFileType_PCM,
-    VideoEditClasses_kFileType_JPG,
-    VideoEditClasses_kFileType_BMP,
-    VideoEditClasses_kFileType_GIF,
-    VideoEditClasses_kFileType_PNG,
-    VideoEditClasses_kFileType_ARGB8888,
-    VideoEditClasses_kFileType_M4V,
-    VideoEditClasses_kFileType_Unsupported
-} VideoEditClasses_FileType;
-
-/*
- * Alpha magic transition structure
- */
-typedef struct
-{
-    jfieldID file;
-    jfieldID blendingPercent;
-    jfieldID invertRotation;
-    jfieldID rgbWidth;
-    jfieldID rgbHeight;
-} VideoEditJava_AlphaMagicFieldIds;
-
-typedef struct
-{
-    jfieldID file;
-    jfieldID fileType;
-    jfieldID insertionTime;
-    jfieldID volumePercent;
-    jfieldID beginLoop;
-    jfieldID endLoop;
-    jfieldID enableDucking;
-    jfieldID duckingThreshold;
-    jfieldID lowVolume;
-    jfieldID isLooping;
-} VideoEditJava_BackgroundMusicFieldIds;
-/*
- * Structure to hold media properties from native layer
- */
-typedef struct {
-    M4OSA_UInt32 uiClipDuration;
-    VideoEditClasses_FileType  FileType;
-    M4VIDEOEDITING_VideoFormat VideoStreamType;
-    M4OSA_UInt32 uiClipVideoDuration;
-    M4OSA_UInt32 uiVideoBitrate;
-    M4OSA_UInt32 uiVideoWidth;
-    M4OSA_UInt32 uiVideoHeight;
-    M4OSA_Float  fAverageFrameRate;
-    M4OSA_UInt32 uiVideoProfile; /**< H263 or MPEG-4 or H264 profile(from core decoder) */
-    M4OSA_UInt32 uiVideoLevel;   /**< H263 or MPEG-4 or H264 level*/
-    M4OSA_Bool bProfileSupported;
-    M4OSA_Bool bLevelSupported;
-    M4VIDEOEDITING_AudioFormat AudioStreamType;
-    M4OSA_UInt32 uiClipAudioDuration;
-    M4OSA_UInt32 uiAudioBitrate;
-    M4OSA_UInt32 uiNbChannels;
-    M4OSA_UInt32 uiSamplingFrequency;
-    M4OSA_UInt32 uiRotation;
-} VideoEditPropClass_Properties;
-
-typedef struct
-{
-    jfieldID duration;
-    jfieldID fileType;
-    jfieldID videoFormat;
-    jfieldID videoDuration;
-    jfieldID videoBitrate;
-    jfieldID width;
-    jfieldID height;
-    jfieldID averageFrameRate;
-    jfieldID profile;
-    jfieldID level;
-    jfieldID profileSupported;
-    jfieldID levelSupported;
-    jfieldID audioFormat;
-    jfieldID audioDuration;
-    jfieldID audioBitrate;
-    jfieldID audioChannels;
-    jfieldID audioSamplingFrequency;
-    jfieldID videoRotation;
-} VideoEditJava_PropertiesFieldIds;
-
-
-typedef struct
-{
-    jfieldID clipPath;
-    jfieldID fileType;
-    jfieldID beginCutTime;
-    jfieldID endCutTime;
-    jfieldID beginCutPercent;
-    jfieldID endCutPercent;
-    jfieldID panZoomEnabled;
-    jfieldID panZoomPercentStart;
-    jfieldID panZoomTopLeftXStart;
-    jfieldID panZoomTopLeftYStart;
-    jfieldID panZoomPercentEnd;
-    jfieldID panZoomTopLeftXEnd;
-    jfieldID panZoomTopLeftYEnd;
-    jfieldID mediaRendering;
-    jfieldID rgbFileWidth;
-    jfieldID rgbFileHeight;
-    jfieldID rotationDegree;
-} VideoEditJava_ClipSettingsFieldIds;
-
-typedef struct
-{
-    jfieldID clipSettingsArray;
-    jfieldID transitionSettingsArray;
-    jfieldID effectSettingsArray;
-    jfieldID videoFrameRate;
-    jfieldID outputFile;
-    jfieldID videoFrameSize;
-    jfieldID videoFormat;
-    jfieldID videoProfile;
-    jfieldID videoLevel;
-    jfieldID audioFormat;
-    jfieldID audioSamplingFreq;
-    jfieldID maxFileSize;
-    jfieldID audioChannels;
-    jfieldID videoBitrate;
-    jfieldID audioBitrate;
-    jfieldID backgroundMusicSettings;
-    jfieldID primaryTrackVolume;
-} VideoEditJava_EditSettingsFieldIds;
-
-
-typedef struct
-{
-    jfieldID startTime;
-    jfieldID duration;
-    jfieldID videoEffectType;
-    jfieldID audioEffectType;
-    jfieldID startPercent;
-    jfieldID durationPercent;
-    jfieldID framingFile;
-    jfieldID framingBuffer;
-    jfieldID bitmapType;
-    jfieldID width;
-    jfieldID height;
-    jfieldID topLeftX;
-    jfieldID topLeftY;
-    jfieldID framingResize;
-    jfieldID framingScaledSize;
-    jfieldID text;
-    jfieldID textRenderingData;
-    jfieldID textBufferWidth;
-    jfieldID textBufferHeight;
-    jfieldID fiftiesFrameRate;
-    jfieldID rgb16InputColor;
-    jfieldID alphaBlendingStartPercent;
-    jfieldID alphaBlendingMiddlePercent;
-    jfieldID alphaBlendingEndPercent;
-    jfieldID alphaBlendingFadeInTimePercent;
-    jfieldID alphaBlendingFadeOutTimePercent;
-} VideoEditJava_EffectSettingsFieldIds;
-
-typedef struct
-{
-    jfieldID context;
-} VideoEditJava_EngineFieldIds;
-
-typedef struct
-{
-    jfieldID direction;
-} VideoEditJava_SlideTransitionSettingsFieldIds;
-
-typedef struct
-{
-    jfieldID duration;
-    jfieldID videoTransitionType;
-    jfieldID audioTransitionType;
-    jfieldID transitionBehaviour;
-    jfieldID alphaSettings;
-    jfieldID slideSettings;
-} VideoEditJava_TransitionSettingsFieldIds;
-
-typedef struct
-{
-    jfieldID major;
-    jfieldID minor;
-    jfieldID revision;
-} VideoEditJava_VersionFieldIds;
-
-
-typedef struct
-{
-    jmethodID onProgressUpdate;
-} VideoEditJava_EngineMethodIds;
-
-
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioEffect           )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioFormat           )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioSamplingFrequency)
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(AudioTransition       )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Bitrate               )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Engine                )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(Error                 )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(FileType              )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(MediaRendering        )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(SlideDirection        )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(TransitionBehaviour   )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoEffect           )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFormat           )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameRate        )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoFrameSize        )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoProfile          )
-VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(VideoTransition       )
-
-
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(AlphaMagic               )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(BackgroundMusic          )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(ClipSettings             )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EditSettings             )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(EffectSettings           )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Engine                   )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(SlideTransitionSettings  )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(TransitionSettings       )
-VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(Version                  )
-
-VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(Engine                  )
-
-/*
- * Init all Edit settings related structures
- */
-void
-videoEditClasses_init(
-                bool*                               pResult,
-                JNIEnv*                             pEnv);
-/**
- ************************************************************************
- * @brief    Media Properties init function.
- * @param    pResult    (OUT) Pointer to hold result
- * @param    pEnv       (IN)  JVM Interface pointer
- ************************************************************************
-*/
-void
-videoEditPropClass_init(
-                bool*                               pResult,
-                JNIEnv*                             pEnv);
-/**
- ************************************************************************
- * @brief    Interface to populate Media Properties.
- * @param    pResult        (IN/OUT)    Pointer to hold result
- * @param    pEnv           (IN)        JVM Interface pointer
- * @param    pProperties    (IN)        Media propeties structure pointer
- * @param    pObject        (OUT)       Java object to hold media
- *                                      properties for java layer.
- ************************************************************************
-*/
-void
-videoEditPropClass_createProperties(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditPropClass_Properties*      pProperties,
-                jobject*                            pObject);
-
-/**
- ************************************************************************
- * @brief    Interface to log/display media properties.
- * @param    pProperties    (IN) Pointer holding media properties
- * @param    indentation    (IN) Indentation to follow in display
- ************************************************************************
-*/
-void
-videoEditPropClass_logProperties(
-                VideoEditPropClass_Properties*      pProperties,
-                int                                 indentation);
-
-/*
- * Get alpha magic transition settings
- */
-void
-videoEditClasses_getAlphaMagicSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4xVSS_AlphaMagicSettings**         ppSettings);
-
-/*
- * Free alpha magic transition settings structure
- */
-void
-videoEditClasses_freeAlphaMagicSettings(
-                M4xVSS_AlphaMagicSettings**         ppSettings);
-
-/*
- * Log alpha magic transition settings
- */
-void
-videoEditClasses_logAlphaMagicSettings(
-                M4xVSS_AlphaMagicSettings*          pSettings,
-                int                                 indentation);
-
-/*
- * Get Background Track settings
- */
-void
-videoEditClasses_getBackgroundMusicSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4xVSS_BGMSettings**                ppSettings);
-
-/*
- * Free Background Track settings structure
- */
-void
-videoEditClasses_freeBackgroundMusicSettings(
-                M4xVSS_BGMSettings**                ppSettings);
-
-/*
- * Log Background Track settings
- */
-void
-videoEditClasses_logBackgroundMusicSettings(
-                M4xVSS_BGMSettings*                 pSettings,
-                int                                 indentation);
-
-/*
- * Log clip properties
- */
-void
-videoEditClasses_logClipProperties(
-                M4VIDEOEDITING_ClipProperties*      pProperties,
-                int                                 indentation);
-
-/*
- * Get clip settings from Java
- */
-void
-videoEditClasses_getClipSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_ClipSettings**            ppSettings);
-/**
- ************************************************************************
- * @brief   Interface function to retrieve media properties for a given
- *          file.
- * @param   pEnv    (IN)    Pointer holding media properties
- * @param   thiz    (IN)    Indentation to follow in display
- * @param   file    (IN)    File path for which media properties has
- *                          to be retrieved.
- ************************************************************************
-*/
-jobject
-videoEditProp_getProperties(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jstring                             file);
-
-/*
- * Create/Set the clip settings to java Object
- */
-void
-videoEditClasses_createClipSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                M4VSS3GPP_ClipSettings*             pSettings,
-                jobject*                            pObject);
-
-/*
- * Free clip settings structure
- */
-void
-videoEditClasses_freeClipSettings(
-                M4VSS3GPP_ClipSettings**            ppSettings);
-
-/*
- * Log clip settings structure
- */
-void
-videoEditClasses_logClipSettings(
-                M4VSS3GPP_ClipSettings*             pSettings,
-                int                                 indentation);
-
-/*
- * Get Edit settings from Java
- */
-void
-videoEditClasses_getEditSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_EditSettings**            ppSettings,
-                bool                                flag);
-
-/*
- * Free Edit Settings structure
- */
-void
-videoEditClasses_freeEditSettings(
-                M4VSS3GPP_EditSettings**            ppSettings);
-
-/*
- * Log Edit settings structure
- */
-void
-videoEditClasses_logEditSettings(
-                M4VSS3GPP_EditSettings*             pSettings,
-                int                                 indentation);
-
-/*
- * Get Effect settings from Java
- */
-void
-videoEditClasses_getEffectSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_EffectSettings*           pSettings);
-
-/*
- * Free Effect settings structure
- */
-void
-videoEditClasses_freeEffectSettings(
-                M4VSS3GPP_EffectSettings*           pSettings);
-
-/*
- * Log Effect settings
- */
-void
-videoEditClasses_logEffectSettings(
-                M4VSS3GPP_EffectSettings*           pSettings,
-                int                                 indentation);
-
-/*
- * Get Transition-Sliding settings from Java
- */
-void
-videoEditClasses_getSlideTransitionSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4xVSS_SlideTransitionSettings**    ppSettings);
-
-/*
- * Free Transition-Sliding structure
- */
-void
-videoEditClasses_freeSlideTransitionSettings(
-                M4xVSS_SlideTransitionSettings**    ppSettings);
-
-/*
- * Free Transition-Sliding structure
- */
-void
-videoEditClasses_logSlideTransitionSettings(
-                M4xVSS_SlideTransitionSettings*     pSettings,
-                int                                 indentation);
-
-/*
- * Get Transition settings from Java
- */
-void
-videoEditClasses_getTransitionSettings(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                M4VSS3GPP_TransitionSettings**      ppSettings);
-
-/*
- * Free Transition settings structure
- */
-void
-videoEditClasses_freeTransitionSettings(
-                M4VSS3GPP_TransitionSettings**      ppSettings);
-
-/*
- * Log Transition settings
- */
-void
-videoEditClasses_logTransitionSettings(
-                M4VSS3GPP_TransitionSettings*       pSettings,
-                int                                 indentation);
-
-/*
- * Set version information to Java object
- */
-void
-videoEditClasses_createVersion(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                M4_VersionInfo*                     pVersionInfo,
-                jobject*                            pObject);
-
-/*
- * Log Version information
- */
-void
-videoEditClasses_logVersion(
-                M4_VersionInfo*                     pVersionInfo,
-                int                                 indentation);
-
-
-void*
-videoEditClasses_getContext(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object);
-
-void
-videoEditClasses_setContext(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                void*                               pContext);
-
-
-#endif // VIDEO_EDITOR_CLASSES_H
-
diff --git a/media/jni/mediaeditor/VideoEditorJava.cpp b/media/jni/mediaeditor/VideoEditorJava.cpp
deleted file mode 100644
index fde0fb5..0000000
--- a/media/jni/mediaeditor/VideoEditorJava.cpp
+++ /dev/null
@@ -1,901 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#define LOG_TAG "VideoEditorJava"
-
-#include <VideoEditorClasses.h>
-#include <VideoEditorJava.h>
-#include <VideoEditorLogging.h>
-#include <VideoEditorOsal.h>
-
-extern "C" {
-#include <M4OSA_CharStar.h>
-};
-
-
-void
-videoEditJava_checkAndThrowIllegalArgumentExceptionFunc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                bool                                condition,
-                const char*                         pMessage,
-                const char*                         pFile,
-                int                                 lineNo)
-{
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Check if the condition is true.
-        if (condition)
-        {
-            // Log the exception.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_JAVA",\
-                    "videoEditJava_checkAndThrowIllegalArgumentException, %s (%s:%d)",
-                    pMessage, pFile, lineNo);
-
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/IllegalArgumentException", pMessage);
-        }
-    }
-}
-
-void
-videoEditJava_checkAndThrowRuntimeExceptionFunc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                bool                                condition,
-                M4OSA_ERR                           result,
-                const char*                         pFile,
-                int                                 lineNo
-                )
-{
-    const char* pMessage = NULL;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Check if the condition is true.
-        if (condition)
-        {
-            // Get the error string.
-            pMessage = videoEditJava_getErrorName(result);
-
-            // Log the exception.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_JAVA",
-                    "videoEditJava_checkAndThrowRuntimeException, %s (%s:%d)",
-                    pMessage, pFile, lineNo);
-
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/RuntimeException", pMessage);
-        }
-    }
-}
-
-void
-videoEditJava_checkAndThrowIllegalStateExceptionFunc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                bool                                condition,
-                const char*                         pMessage,
-                const char*                         pFile,
-                int                                 lineNo
-                )
-{
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Check if the condition is true.
-        if (condition)
-        {
-            // Log the exception.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_JAVA",
-                    "videoEditJava_checkAndThrowIllegalStateException, %s (%s:%d)",
-                    pMessage, pFile, lineNo);
-
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/IllegalStateException", pMessage);
-        }
-    }
-}
-
-void
-videoEditJava_getClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const char*                         pName,
-                jclass*                             pClazz)
-{
-    // Only look for the class if locating the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                "videoEditJava_getClass(%s)", pName);
-
-        // Look up the class.
-        jclass clazz = pEnv->FindClass(pName);
-
-        // Clear any resulting exceptions.
-        pEnv->ExceptionClear();
-
-        // Check if the class could be located.
-        if (NULL != clazz)
-        {
-            // Return the class.
-            (*pClazz) = clazz;
-        }
-        else
-        {
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Log the error.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_JAVA",
-                    "videoEditJava_getClass, error: unable to locate class %s", pName);
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/ClassNotFoundException",
-                    "unable to locate class");
-        }
-    }
-}
-
-void
-videoEditJava_getMethodId(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jclass                              clazz,
-                const char*                         pName,
-                const char*                         pType,
-                jmethodID*                          pMethodId)
-{
-    // Only look for the class if locating the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                "videoEditJava_getMethodId(%s,%s)", pName, pType);
-
-        // Look up the method id.
-        jmethodID methodId = pEnv->GetMethodID(clazz, pName, pType);
-
-        // Clear any resulting exceptions.
-        pEnv->ExceptionClear();
-
-        // Check if the method could be located.
-        if (NULL != methodId)
-        {
-            // Return the method id.
-            (*pMethodId) = methodId;
-        }
-        else
-        {
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Log the error.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_JAVA",
-                    "videoEditJava_getMethodId, error: unable to locate method %s with type %s",
-                    pName, pType);
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/NoSuchMethodException", "unable to locate method");
-        }
-    }
-}
-
-void
-videoEditJava_getFieldId(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jclass                              clazz,
-                const char*                         pName,
-                const char*                         pType,
-                jfieldID*                           pFieldId)
-{
-    // Only look for the class if locating the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                "videoEditJava_getFieldId(%s,%s)", pName, pType);
-
-        // Look up the field id.
-        jfieldID fieldId = pEnv->GetFieldID(clazz, pName, pType);
-
-        // Clear any resulting exceptions.
-        pEnv->ExceptionClear();
-
-        // Check if the field could be located.
-        if (NULL != fieldId)
-        {
-            // Return the field id.
-            (*pFieldId) = fieldId;
-        }
-        else
-        {
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Log the error.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_JAVA",
-                    "videoEditJava_getFieldId, error: unable to locate field %s with type %s",
-                    pName, pType);
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/NoSuchFieldException", "unable to locate field");
-        }
-    }
-}
-
-void
-videoEditJava_getObject(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                jfieldID                            objectFieldId,
-                jobject*                            pObject)
-{
-    // Only retrieve the array object and size if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-            "videoEditJava_getObject()");
-
-        // Retrieve the object.
-        (*pObject) = pEnv->GetObjectField(object, objectFieldId);
-
-        // Clear any resulting exceptions.
-        pEnv->ExceptionClear();
-    }
-}
-
-void
-videoEditJava_getArray(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                jfieldID                            arrayFieldId,
-                jobjectArray*                       pArray,
-                jsize*                              pArraySize)
-{
-    // Only retrieve the array object and size if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA", "videoEditJava_getArray()");
-
-        // Retrieve the array object.
-        jobjectArray array     = (jobjectArray)pEnv->GetObjectField(object, arrayFieldId);
-        jsize        arraySize = 0;
-
-        // Clear any resulting exceptions.
-        pEnv->ExceptionClear();
-
-        // Check if the array could be retrieved.
-        if (NULL != array)
-        {
-            // Retrieve the array size.
-            arraySize = pEnv->GetArrayLength(array);
-        }
-
-        // Return the array and its size.
-        (*pArray)     = array;
-        (*pArraySize) = arraySize;
-    }
-}
-
-void*
-videoEditJava_getString(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                jfieldID                            stringFieldId,
-                M4OSA_UInt32*                       pLength)
-{
-    void*        pString = M4OSA_NULL;
-    jstring      string  = NULL;
-    M4OSA_UInt32 length  = 0;
-    M4OSA_Char*  pLocal  = M4OSA_NULL;
-    M4OSA_ERR    result  = M4NO_ERROR;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA", "videoEditJava_getString()");
-
-        // Check if an object containing a string was specified.
-        if (NULL != stringFieldId)
-        {
-            // Retrieve the string object.
-            string = (jstring)pEnv->GetObjectField(object, stringFieldId);
-
-            // Clear any resulting exceptions.
-            pEnv->ExceptionClear();
-        }
-        else
-        {
-            // The string itself was specified.
-            string = (jstring)object;
-        }
-
-        // Check if the string could be retrieved.
-        if (NULL != string)
-        {
-            // Get a local copy of the string.
-            pLocal = (M4OSA_Char*)pEnv->GetStringUTFChars(string, M4OSA_NULL);
-            if (M4OSA_NULL != pLocal)
-            {
-                // Determine the length of the path
-                // (add one extra character for the zero terminator).
-                length = strlen((const char *)pLocal) + 1;
-
-                // Allocate memory for the string.
-                pString = videoEditOsal_alloc(pResult, pEnv, length, "String");
-                if (*pResult)
-                {
-                    // Copy the string.
-                    result = M4OSA_chrNCopy((M4OSA_Char*)pString, pLocal, length);
-
-                    // Check if the copy succeeded.
-                    videoEditJava_checkAndThrowRuntimeException(pResult, pEnv,
-                     (M4NO_ERROR != result), result);
-
-                    // Check if the string could not be copied.
-                    if (!(*pResult))
-                    {
-                        // Free the allocated memory.
-                        videoEditOsal_free(pString);
-                        pString = M4OSA_NULL;
-                    }
-                }
-
-                // Release the local copy of the string.
-                pEnv->ReleaseStringUTFChars(string, (const char *)pLocal);
-            }
-        }
-
-        // Check if the string was empty or could be copied.
-        if (*pResult)
-        {
-            // Check if the length was requested.
-            if (M4OSA_NULL != pLength)
-            {
-                // Return the length.
-                (*pLength) = length;
-            }
-        }
-
-        // Delete local references to avoid memory leaks
-        pEnv->DeleteLocalRef(string);
-    }
-
-    // Return the string.
-    return(pString);
-}
-
-void
-videoEditJava_getStaticIntField(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jclass                              clazz,
-                const char*                         pName,
-                int*                                pValue)
-{
-    // Only look for the class if locating the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                "videoEditJava_getStaticIntField(%s)", pName);
-
-        // Look up the field id.
-        jfieldID fieldId = pEnv->GetStaticFieldID(clazz, pName, "I");
-
-        // Clear any resulting exceptions.
-        pEnv->ExceptionClear();
-
-        // Check if the field could be located.
-        if (NULL != fieldId)
-        {
-            // Retrieve the field value.
-            (*pValue) = pEnv->GetStaticIntField(clazz, fieldId);
-
-            // Log the value.
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                    "videoEditJava_getStaticIntField, %s = %d", pName, (*pValue));
-        }
-        else
-        {
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Log the error.
-            VIDEOEDIT_LOG_EXCEPTION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_JAVA",
-                    "videoEditJava_getStaticIntField, error: unable to locate field %s", pName);
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/NoSuchFieldException",
-                    "unable to locate static field");
-        }
-    }
-}
-
-void
-videoEditJava_initConstantClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditJava_ConstantsClass*               pClass)
-{
-    bool   gotten = true;
-    jclass clazz  = NULL;
-    int    index  = 0;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                "videoEditJava_initConstantClass(%s)", pClass->pName);
-
-        // Only initialize the class once.
-        if (!pClass->initialized)
-        {
-            // Look up the class.
-            videoEditJava_getClass(pResult, pEnv, pClass->pName, &clazz);
-
-            // Loop over the constants.
-            for (index = 0; index < pClass->count; index++)
-            {
-                // Look up the constant.
-                videoEditJava_getStaticIntField(pResult, pEnv, clazz,
-                                        pClass->pConstants[index].pName,
-                                        &pClass->pConstants[index].java);
-            }
-
-            // Check if all constants could be located.
-            if (*pResult)
-            {
-                // Set the initialized flag.
-                pClass->initialized = true;
-            }
-        }
-    }
-}
-
-const char*
-videoEditJava_getConstantClassName(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                VideoEditJava_UnknownConstant               unknown)
-{
-    const char* pName = M4OSA_NULL;
-    int         index = 0;
-
-    // Loop over the list with constants.
-    for (index = 0;
-         ((M4OSA_NULL == pName) && (index < pClass->count));
-         index++)
-    {
-        // Check if the specified value matches the c value of the constant.
-        if (value == pClass->pConstants[index].c)
-        {
-            // Set the name.
-            pName = pClass->pConstants[index].pName;
-        }
-    }
-
-    // Check if no constant was found.
-    if (M4OSA_NULL == pName)
-    {
-        // Check if a function was specified to handle this case.
-        if (M4OSA_NULL != unknown)
-        {
-            // Pass the constant to the specified unknown function.
-            pName = unknown(value);
-        }
-        else
-        {
-            // Set the description to a default value.
-            pName = "<unknown>";
-        }
-    }
-
-    // Return the result.
-    return(pName);
-}
-
-const char*
-videoEditJava_getConstantClassString(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                VideoEditJava_UnknownConstant               unknown)
-{
-    const char* pString = M4OSA_NULL;
-    int         index   = 0;
-
-    // Loop over the list with constants.
-    for (index = 0;
-         ((M4OSA_NULL == pString) && (index < pClass->count));
-         index++)
-    {
-        // Check if the specified value matches the c value of the constant.
-        if (value == pClass->pConstants[index].c)
-        {
-            // Set the description.
-            pString = pClass->pConstants[index].pDescription;
-        }
-    }
-
-    // Check if no constant was found.
-    if (M4OSA_NULL == pString)
-    {
-        // Check if a function was specified to handle this case.
-        if (M4OSA_NULL != unknown)
-        {
-            // Pass the constant to the specified unknown function.
-            pString = unknown(value);
-        }
-        else
-        {
-            // Set the description to a default value.
-            pString = "<unknown>";
-        }
-    }
-
-    // Return the result.
-    return(pString);
-}
-
-int
-videoEditJava_getConstantClassJavaToC(
-                bool*                               pResult,
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value)
-{
-    bool gotten = false;
-    int  index  = 0;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Loop over the list with constants.
-        for (index = 0; ((!gotten) && (index < pClass->count)); index++)
-        {
-            // Check if the specified value matches the java value of the constant.
-            if (value == pClass->pConstants[index].java)
-            {
-                // Set the value to the c value.
-                value = pClass->pConstants[index].c;
-
-                // Set the gotten flag.
-                gotten = true;
-            }
-        }
-
-        // Check if the value was not found.
-        if (!gotten)
-        {
-            (*pResult) = false;
-        }
-    }
-
-    // Return the translated value.
-    return(value);
-}
-
-int
-videoEditJava_getConstantClassJavaToC(
-                bool*                               pResult,
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                int                                 unknown)
-{
-    bool gotten = false;
-    int  index  = 0;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Loop over the list with constants.
-        for (index = 0; ((!gotten) && (index < pClass->count)); index++)
-        {
-            // Check if the specified value matches the java value of the constant.
-            if (value == pClass->pConstants[index].java)
-            {
-                // Set the value to the c value.
-                value = pClass->pConstants[index].c;
-
-                // Set the gotten flag.
-                gotten = true;
-            }
-        }
-
-        // If the constant was not found, look for the specified unknown.
-        if (!gotten)
-        {
-            // Set the value to the c value.
-            value = unknown;
-        }
-    }
-
-    // Return the translated value.
-    return(value);
-}
-
-int
-videoEditJava_getConstantClassCToJava(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value)
-{
-    bool gotten = false;
-    int  index  = 0;
-
-    // Loop over the list with constants.
-    for (index = 0; ((!gotten) && (index < pClass->count)); index++)
-    {
-        // Check if the specified value matches the c value of the constant.
-        if (value == pClass->pConstants[index].c)
-        {
-            // Set the value to the java value.
-            value = pClass->pConstants[index].java;
-
-            // Set the gotten flag.
-            gotten = true;
-        }
-    }
-
-    // Return the translated value.
-    return(value);
-}
-
-int
-videoEditJava_getConstantClassCToJava(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                int                                 unknown)
-{
-    bool gotten = false;
-    int  index  = 0;
-
-    // Loop over the list with constants.
-    for (index = 0; ((!gotten) && (index < pClass->count)); index++)
-    {
-        // Check if the specified value matches the c value of the constant.
-        if (value == pClass->pConstants[index].c)
-        {
-            // Set the value to the java value.
-            value = pClass->pConstants[index].java;
-
-            // Set the gotten flag.
-            gotten = true;
-        }
-    }
-
-    // If the constant was not found, look for the specified unknown.
-    if (!gotten)
-    {
-        // Loop over the list with constants.
-        for (index = 0; ((!gotten) && (index < pClass->count)); index++)
-        {
-            // Check if the specified value matches the java value of the constant.
-            if (unknown == pClass->pConstants[index].c)
-            {
-                // Set the value to the c value.
-                value = pClass->pConstants[index].java;
-
-                // Set the gotten flag.
-                gotten = true;
-            }
-        }
-    }
-
-    // Return the translated value.
-    return(value);
-}
-
-void
-videoEditJava_initFieldClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditJava_FieldsClass*                  pClass)
-{
-    bool   gotten = true;
-    jclass clazz  = NULL;
-    int    index  = 0;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                "videoEditJava_initFieldClass(%s)", pClass->pName);
-
-        // Only initialize the class once.
-        if (!pClass->initialized)
-        {
-            // Look up the class.
-            videoEditJava_getClass(pResult, pEnv, pClass->pName, &clazz);
-
-            // Loop over the fields.
-            for (index = 0; index < pClass->count; index++)
-            {
-                // Look up the field id.
-                videoEditJava_getFieldId(
-                        pResult,
-                        pEnv,
-                        clazz,
-                        pClass->pFields[index].pName,
-                        pClass->pFields[index].pType,
-                        &pClass->pFields[index].fieldId);
-            }
-
-            // Check if all fields could be located.
-            if (*pResult)
-            {
-                // Set the initialized flag.
-                pClass->initialized = true;
-            }
-        }
-    }
-}
-
-void
-videoEditJava_fieldClassClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const VideoEditJava_FieldsClass*            pClass,
-                jclass*                             pClazz)
-{
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Check if the class is initialized.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, (!pClass->initialized),
-                "field class not initialized");
-
-        // Get the class.
-        videoEditJava_getClass(pResult, pEnv, pClass->pName, pClazz);
-    }
-}
-
-void
-videoEditJava_fieldClassFieldIds(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const VideoEditJava_FieldsClass*            pClass,
-                int                                 count,
-                VideoEditJava_FieldIds*                     pIds)
-{
-    int index = 0;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Check if the class is initialized.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, (!pClass->initialized),
-                "field class not initialized");
-
-        // Check if the number of fields matches.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,
-                (pClass->count != count),
-                "field class type mismatch");
-
-        // Check if the class and object are valid.
-        if (*pResult)
-        {
-            // Loop over the class fields.
-            for (index = 0; index < count; index++)
-            {
-                // Copy the field ids.
-                pIds->fieldIds[index] = pClass->pFields[index].fieldId;
-            }
-        }
-    }
-}
-
-void
-videoEditJava_initMethodClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditJava_MethodsClass*                 pClass)
-{
-    bool   gotten = true;
-    jclass clazz  = NULL;
-    int    index  = 0;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Log the function call.
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_JAVA",
-                "videoEditJava_initMethodClass(%s)", pClass->pName);
-
-        // Only initialize the class once.
-        if (!pClass->initialized)
-        {
-            // Look up the class.
-            videoEditJava_getClass(pResult, pEnv, pClass->pName, &clazz);
-
-            // Loop over the methods.
-            for (index = 0; index < pClass->count; index++)
-            {
-                // Look up the method id.
-                videoEditJava_getMethodId(
-                        pResult,
-                        pEnv,
-                        clazz,
-                        pClass->pMethods[index].pName,
-                        pClass->pMethods[index].pType,
-                        &pClass->pMethods[index].methodId);
-            }
-
-            // Check if all methods could be located.
-            if (*pResult)
-            {
-                // Set the initialized flag.
-                pClass->initialized = true;
-            }
-        }
-    }
-}
-
-void
-videoEditJava_methodClassMethodIds(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const VideoEditJava_MethodsClass*   pClass,
-                int                                 count,
-                VideoEditJava_MethodIds*            pIds)
-{
-    int index = 0;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Check if the class is initialized.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv, (!pClass->initialized),
-                    "method class not initialized");
-
-        // Check if the number of methods matches.
-        videoEditJava_checkAndThrowIllegalArgumentException(pResult, pEnv,\
-                    (pClass->count != count),
-                    "method class type mismatch");
-
-        // Check if the class and object are valid.
-        if (*pResult)
-        {
-            // Loop over the class methods.
-            for (index = 0; index < count; index++)
-            {
-                // Copy the method ids.
-                pIds->methodIds[index] = pClass->pMethods[index].methodId;
-            }
-        }
-    }
-}
-
diff --git a/media/jni/mediaeditor/VideoEditorJava.h b/media/jni/mediaeditor/VideoEditorJava.h
deleted file mode 100644
index 0a2db08..0000000
--- a/media/jni/mediaeditor/VideoEditorJava.h
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef VIDEO_EDiTOR_JAVA_H
-#define VIDEO_EDiTOR_JAVA_H
-
-#include <jni.h>
-#include <JNIHelp.h>
-
-/**
- ************************************************************************
- * @file        VideoEditorJava.h
- * @brief       Interface for JNI methods that have specific access to
- *              class, objects and method Ids defined in Java layer
- ************************************************************************
-*/
-
-extern "C" {
-#include <M4OSA_Types.h>
-#include <M4OSA_Error.h>
-}
-
-#define VIDEOEDIT_JAVA_CONSTANT_INIT(m_name, m_c)                           \
-            { m_name,                                                       \
-              0,                                                            \
-              m_c,                                                          \
-              #m_c }
-
-#define VIDEOEDIT_JAVA_DEFINE_CONSTANTS(m_class)                            \
-static                                                                      \
-VideoEditJava_Constant g##m_class##Constants [] =
-
-#define VIDEOEDIT_JAVA_DEFINE_CONSTANT_CLASS(                               \
-                m_class,                                                    \
-                m_name,                                                     \
-                m_unknownName,                                              \
-                m_unknownString)                                            \
-                                                                            \
-static VideoEditJava_ConstantsClass g##m_class##ConstantsClass =            \
-{       m_name,                                                             \
-        &g##m_class##Constants[0],                                          \
-        (sizeof(g##m_class##Constants) / sizeof(VideoEditJava_Constant)),   \
-        false                                                               \
-};                                                                          \
-                                                                            \
-                                                                            \
-void videoEditJava_init##m_class##Constants(                                \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv)                   \
-{                                                                           \
-    videoEditJava_initConstantClass(                                        \
-                pResult,                                                    \
-                pEnv,                                                       \
-                &g##m_class##ConstantsClass);                               \
-}                                                                           \
-                                                                            \
-const char* videoEditJava_get##m_class##Name(                               \
-                int                                 value)                  \
-{                                                                           \
-    return(videoEditJava_getConstantClassName(                              \
-                &g##m_class##ConstantsClass,                                \
-                value,                                                      \
-                m_unknownName));                                            \
-}                                                                           \
-                                                                            \
-const char* videoEditJava_get##m_class##String(                             \
-                int                                 value)                  \
-{                                                                           \
-    return(videoEditJava_getConstantClassString(                            \
-                &g##m_class##ConstantsClass,                                \
-                value,                                                      \
-                m_unknownString));                                          \
-}                                                                           \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##JavaToC(                                        \
-                bool*                               pResult,                \
-                int                                 value)                  \
-{                                                                           \
-    return(videoEditJava_getConstantClassJavaToC(                           \
-                pResult,                                                    \
-                &g##m_class##ConstantsClass,                                \
-                value));                                                    \
-}                                                                           \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##JavaToC(                                        \
-                bool*                               pResult,                \
-                int                                 value,                  \
-                int                                 unknown)                \
-{                                                                           \
-    return(videoEditJava_getConstantClassJavaToC(                           \
-                pResult,                                                    \
-                &g##m_class##ConstantsClass,                                \
-                value,                                                      \
-                unknown));                                                  \
-}                                                                           \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##CToJava(                                        \
-                        int                                 value)          \
-{                                                                           \
-    return(videoEditJava_getConstantClassCToJava(                           \
-                &g##m_class##ConstantsClass,                                \
-                value));                                                    \
-}                                                                           \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##CToJava(                                        \
-                int                                 value,                  \
-                int                                 unknown)                \
-{                                                                           \
-    return(videoEditJava_getConstantClassCToJava(                           \
-                &g##m_class##ConstantsClass,                                \
-                value,                                                      \
-                unknown));                                                  \
-}
-
-
-#define VIDEOEDIT_JAVA_DECLARE_CONSTANT_CLASS(m_class)                       \
-void                                                                        \
-videoEditJava_init##m_class##Constants(                                     \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv);                  \
-                                                                            \
-const char*                                                                 \
-videoEditJava_get##m_class##Name(                                           \
-                int                                 value);                 \
-                                                                            \
-const char*                                                                 \
-videoEditJava_get##m_class##String(                                         \
-                int                                 value);                 \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##JavaToC(                                        \
-                bool*                               pResult,                \
-                int                                 value,                  \
-                int                                 unknown);               \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##JavaToC(                                        \
-                bool*                               pResult,                \
-                int                                 value);                 \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##CToJava(                                        \
-                int                                 value);                 \
-                                                                            \
-int                                                                         \
-videoEditJava_get##m_class##CToJava(                                        \
-                int                                 value,                  \
-                int                                 unknown);
-
-#define VIDEOEDIT_JAVA_FIELD_INIT(m_name, m_type)                           \
-    { m_name,                                                               \
-      m_type,                                                               \
-      NULL }
-
-#define VIDEOEDIT_JAVA_DEFINE_FIELDS(m_class)                               \
-static                                                                      \
-VideoEditJava_Field g##m_class##Fields [] =
-
-#define VIDEOEDIT_JAVA_DEFINE_FIELD_CLASS(m_class, m_name)                  \
-static VideoEditJava_FieldsClass g##m_class##FieldsClass =                  \
-    { m_name,                                                               \
-      &g##m_class##Fields[0],                                               \
-      (sizeof(g##m_class##Fields) / sizeof(VideoEditJava_Field)),           \
-      false };                                                              \
-                                                                            \
-void                                                                        \
-videoEditJava_init##m_class##Fields(                                        \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv)                   \
-{                                                                           \
-    videoEditJava_initFieldClass(                                           \
-                pResult,                                                    \
-                pEnv,                                                       \
-                &g##m_class##FieldsClass);                                  \
-}                                                                           \
-                                                                            \
-void                                                                        \
-videoEditJava_get##m_class##Class(                                          \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv,                   \
-                jclass*                             pClazz)                 \
-{                                                                           \
-    videoEditJava_fieldClassClass(                                          \
-                pResult,                                                    \
-                pEnv,                                                       \
-                &g##m_class##FieldsClass,                                   \
-                pClazz);                                                    \
-}                                                                           \
-                                                                            \
-void                                                                        \
-videoEditJava_get##m_class##FieldIds(                                       \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv,                   \
-                VideoEditJava_##m_class##FieldIds*          pIds)           \
-{                                                                           \
-    videoEditJava_fieldClassFieldIds(                                       \
-                pResult,                                                    \
-                pEnv,                                                       \
-                &g##m_class##FieldsClass,                                   \
-                (sizeof(VideoEditJava_##m_class##FieldIds) /                \
-                 sizeof(jfieldID)),                                         \
-                (VideoEditJava_FieldIds*)pIds);                             \
-}
-
-#define VIDEOEDIT_JAVA_DECLARE_FIELD_CLASS(m_class)                         \
-void                                                                        \
-videoEditJava_init##m_class##Fields(                                        \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv);                  \
-                                                                            \
-void                                                                        \
-videoEditJava_get##m_class##Class(                                          \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv,                   \
-                jclass*                             pClazz);                \
-                                                                            \
-void                                                                        \
-videoEditJava_get##m_class##FieldIds(                                       \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv,                   \
-                VideoEditJava_##m_class##FieldIds*          pIds);
-
-
-#define VIDEOEDIT_JAVA_METHOD_INIT(m_name, m_type)                          \
-    { m_name,                                                               \
-      m_type,                                                               \
-      NULL }
-
-#define VIDEOEDIT_JAVA_DEFINE_METHODS(m_class)                              \
-static                                                                      \
-VideoEditJava_Method g##m_class##Methods [] =
-
-#define VIDEOEDIT_JAVA_DEFINE_METHOD_CLASS(m_class, m_name)                 \
-static VideoEditJava_MethodsClass g##m_class##MethodsClass =                \
-    { m_name,                                                               \
-      &g##m_class##Methods[0],                                              \
-      (sizeof(g##m_class##Methods) / sizeof(VideoEditJava_Method)),         \
-      false };                                                              \
-                                                                            \
-void                                                                        \
-videoEditJava_init##m_class##Methods(                                       \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv)                   \
-{                                                                           \
-    videoEditJava_initMethodClass(                                          \
-                pResult,                                                    \
-                pEnv,                                                       \
-                &g##m_class##MethodsClass);                                 \
-}                                                                           \
-                                                                            \
-void                                                                        \
-videoEditJava_get##m_class##MethodIds(                                      \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv,                   \
-                VideoEditJava_##m_class##MethodIds*         pIds)           \
-{                                                                           \
-    videoEditJava_methodClassMethodIds(                                     \
-                pResult,                                                    \
-                pEnv,                                                       \
-                &g##m_class##MethodsClass,                                  \
-                (sizeof(VideoEditJava_##m_class##MethodIds) /               \
-                 sizeof(jmethodID)),                                        \
-                (VideoEditJava_MethodIds*)pIds);                            \
-}
-
-#define VIDEOEDIT_JAVA_DECLARE_METHOD_CLASS(m_class)                        \
-void                                                                        \
-videoEditJava_init##m_class##Methods(                                       \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv);                  \
-                                                                            \
-void                                                                        \
-videoEditJava_get##m_class##MethodIds(                                      \
-                bool*                               pResult,                \
-                JNIEnv*                             pEnv,                   \
-                VideoEditJava_##m_class##MethodIds*         pIds);
-
-
-typedef struct
-{
-    const char*     pName;
-    int             java;
-    int             c;
-    const char*     pDescription;
-} VideoEditJava_Constant;
-
-typedef struct
-{
-    const char*             pName;
-    VideoEditJava_Constant* pConstants;
-    int                     count;
-    bool                    initialized;
-} VideoEditJava_ConstantsClass;
-
-typedef const char* (*VideoEditJava_UnknownConstant)(int constant);
-
-typedef struct
-{
-    const char*             pName;
-    const char*             pType;
-    jfieldID                fieldId;
-} VideoEditJava_Field;
-
-typedef struct
-{
-    const char*             pName;
-    VideoEditJava_Field*    pFields;
-    int                     count;
-    bool                    initialized;
-} VideoEditJava_FieldsClass;
-
-typedef struct
-{
-    jfieldID fieldIds[];
-} VideoEditJava_FieldIds;
-
-typedef struct
-{
-    const char*             pName;
-    const char*             pType;
-    jmethodID               methodId;
-} VideoEditJava_Method;
-
-typedef struct
-{
-    const char*             pName;
-    VideoEditJava_Method*   pMethods;
-    int                     count;
-    bool                    initialized;
-} VideoEditJava_MethodsClass;
-
-typedef struct
-{
-    jmethodID methodIds[];
-} VideoEditJava_MethodIds;
-
-#define videoEditJava_checkAndThrowIllegalArgumentException(\
-    a, b, c, d) videoEditJava_checkAndThrowIllegalArgumentExceptionFunc(\
-    a, b, c, d, __FILE__, __LINE__)
-
-#define videoEditJava_checkAndThrowRuntimeException(\
-    a, b, c, d) videoEditJava_checkAndThrowRuntimeExceptionFunc(\
-    a, b, c, d, __FILE__, __LINE__)
-
-#define videoEditJava_checkAndThrowIllegalStateException(\
-    a, b, c, d) videoEditJava_checkAndThrowIllegalStateExceptionFunc(\
-    a, b, c, d, __FILE__, __LINE__)
-
-void
-videoEditJava_checkAndThrowIllegalArgumentExceptionFunc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                bool                                condition,
-                const char*                         pMessage,
-                const char*                         pFile,
-                int                                 lineNo
-                );
-
-void
-videoEditJava_checkAndThrowRuntimeExceptionFunc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                bool                                condition,
-                M4OSA_ERR                           result,
-                const char*                         pFile,
-                int                                 lineNo
-                );
-
-void
-videoEditJava_checkAndThrowIllegalStateExceptionFunc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                bool                                condition,
-                const char*                         pMessage,
-                const char*                         pFile,
-                int                                 lineNo
-                );
-
-void
-videoEditJava_getClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const char*                         pName,
-                jclass*                             pClazz);
-
-void
-videoEditJava_getMethodId(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jclass                              clazz,
-                const char*                         pName,
-                const char*                         pType,
-                jmethodID*                          pMethodId);
-
-void videoEditJava_getFieldId(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jclass                              clazz,
-                const char*                         pName,
-                const char*                         pType,
-                jfieldID*                           pFieldId);
-
-void videoEditJava_getObject(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                jfieldID                            objectFieldId,
-                jobject*                            pObject);
-
-void videoEditJava_getArray(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                jfieldID                            arrayFieldId,
-                jobjectArray*                       pArray,
-                jsize*                              pArraySize);
-
-void* videoEditJava_getString(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                jobject                             object,
-                jfieldID                            stringFieldId,
-                M4OSA_UInt32*                       pLength);
-
-void videoEditJava_getStaticIntField(
-                bool*                               pResult,
-                JNIEnv*                             env,
-                jclass                              clazz,
-                const char*                         pName,
-                int*                                pValue);
-
-void
-videoEditJava_initConstantClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditJava_ConstantsClass*               pClass);
-
-const char*
-videoEditJava_getConstantClassName(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                VideoEditJava_UnknownConstant               unknown);
-
-const char*
-videoEditJava_getConstantClassString(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                VideoEditJava_UnknownConstant               unknown);
-
-int
-videoEditJava_getConstantClassJavaToC(
-                bool*                               pResult,
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value);
-
-int
-videoEditJava_getConstantClassJavaToC(
-                bool*                               pResult,
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                int                                 unknown);
-
-int
-videoEditJava_getConstantClassCToJava(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value);
-
-int
-videoEditJava_getConstantClassCToJava(
-                const VideoEditJava_ConstantsClass*         pClass,
-                int                                 value,
-                int                                 unknown);
-
-void
-videoEditJava_initFieldClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditJava_FieldsClass*                  pClass);
-
-void
-videoEditJava_fieldClassClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const VideoEditJava_FieldsClass*            pClass,
-                jclass*                             pClazz);
-
-void
-videoEditJava_fieldClassFieldIds(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const VideoEditJava_FieldsClass*            pClass,
-                int                                 count,
-                VideoEditJava_FieldIds*                     pIds);
-
-void
-videoEditJava_initMethodClass(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                VideoEditJava_MethodsClass*                 pClass);
-
-void
-videoEditJava_methodClassMethodIds(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                const VideoEditJava_MethodsClass*           pClass,
-                int                                 count,
-                VideoEditJava_MethodIds*                    pIds);
-
-#endif // VIDEO_EDiTOR_JAVA_H
-
diff --git a/media/jni/mediaeditor/VideoEditorLogging.h b/media/jni/mediaeditor/VideoEditorLogging.h
deleted file mode 100644
index 1f1228a..0000000
--- a/media/jni/mediaeditor/VideoEditorLogging.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef VIDEO_EDITOR_LOGGING_H
-#define VIDEO_EDITOR_LOGGING_H
-
-#ifndef LOG_TAG
-#error "No LOG_TAG defined!"
-#endif
-
-/*
- * This file is used as a proxy for cutils/log.h.  Include cutils/log.h here to
- * avoid relying on import ordering.
- */
-#include <cutils/log.h>
-
-//#define VIDEOEDIT_LOGGING_ENABLED
-
-#define VIDEOEDIT_LOG_INDENTATION                       (3)
-
-#define VIDEOEDIT_LOG_ERROR                             __android_log_print
-#define VIDEOEDIT_LOG_EXCEPTION                         __android_log_print
-
-#ifdef VIDEOEDIT_LOGGING_ENABLED
-
-#define VIDEOEDIT_LOG_ALLOCATION                        __android_log_print
-#define VIDEOEDIT_LOG_API                               __android_log_print
-#define VIDEOEDIT_LOG_FUNCTION                          __android_log_print
-#define VIDEOEDIT_LOG_RESULT(x,y, ...)                     ALOGI(y, __VA_ARGS__ )
-#define VIDEOEDIT_LOG_SETTING                           __android_log_print
-#define VIDEOEDIT_LOG_EDIT_SETTINGS(m_settings)         videoEditClasses_logEditSettings\
-                                               (m_settings, VIDEOEDIT_LOG_INDENTATION)
-#define VIDEOEDIT_PROP_LOG_PROPERTIES(m_properties)          videoEditPropClass_logProperties\
-                                                  (m_properties, VIDEOEDIT_LOG_INDENTATION)
-#define VIDEOEDIT_PROP_LOG_RESULT                            __android_log_print
-
-#else
-
-#define VIDEOEDIT_LOG_ALLOCATION                        (void)
-#define VIDEOEDIT_LOG_API                               (void)
-#define VIDEOEDIT_LOG_FUNCTION                          (void)
-#define VIDEOEDIT_LOG_RESULT                            (void)
-#define VIDEOEDIT_LOG_SETTING                           (void)
-#define VIDEOEDIT_LOG_EDIT_SETTINGS(m_settings)         (void)m_settings
-#define VIDEOEDIT_PROP_LOG_PROPERTIES(m_properties)          (void)m_properties
-#define VIDEOEDIT_PROP_LOG_RESULT                            (void)
-
-#endif
-
-#endif // VIDEO_EDITOR_LOGGING_H
-
diff --git a/media/jni/mediaeditor/VideoEditorMain.cpp b/media/jni/mediaeditor/VideoEditorMain.cpp
deleted file mode 100644
index 0894d74..0000000
--- a/media/jni/mediaeditor/VideoEditorMain.cpp
+++ /dev/null
@@ -1,3639 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-#define LOG_NDEBUG 1
-#define LOG_TAG "VideoEditorMain"
-#include <dlfcn.h>
-#include <inttypes.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <utils/Log.h>
-#include <utils/threads.h>
-#include <VideoEditorClasses.h>
-#include <VideoEditorJava.h>
-#include <VideoEditorOsal.h>
-#include <VideoEditorLogging.h>
-#include <VideoEditorClasses.h>
-#include <VideoEditorThumbnailMain.h>
-#include <M4OSA_Debug.h>
-#include <M4xVSS_Internal.h>
-#include <gui/Surface.h>
-#include "VideoEditorPreviewController.h"
-
-#include "VideoEditorMain.h"
-
-#include <android_runtime/android_view_Surface.h>
-
-extern "C" {
-#include <M4OSA_Clock.h>
-#include <M4OSA_CharStar.h>
-#include <M4OSA_Error.h>
-#include <M4OSA_FileCommon.h>
-#include <M4OSA_FileReader.h>
-#include <M4OSA_FileWriter.h>
-#include <M4OSA_Memory.h>
-#include <M4OSA_Thread.h>
-#include <M4xVSS_API.h>
-#include <M4VSS3GPP_ErrorCodes.h>
-#include <M4MCS_API.h>
-#include <M4MCS_ErrorCodes.h>
-#include <M4READER_Common.h>
-#include <M4WRITER_common.h>
-};
-
-
-using namespace android;
-
-#define THREAD_STACK_SIZE       (65536)
-
-#define VIDEOEDITOR_VERSION_MAJOR     0
-#define VIDEOEDITOR_VERSION_MINOR     0
-#define VIDEOEDITOR_VERSION_REVISION  1
-
-
-typedef enum
-{
-    ManualEditState_NOT_INITIALIZED,
-    ManualEditState_INITIALIZED,
-    ManualEditState_ANALYZING,
-    ManualEditState_ANALYZING_ERROR,
-    ManualEditState_OPENED,
-    ManualEditState_SAVING,
-    ManualEditState_SAVING_ERROR,
-    ManualEditState_SAVED,
-    ManualEditState_STOPPING
-} ManualEditState;
-
-typedef struct
-{
-    JavaVM*                        pVM;
-    jobject                        engine;
-    jmethodID                      onCompletionMethodId;
-    jmethodID                      onErrorMethodId;
-    jmethodID                      onWarningMethodId;
-    jmethodID                      onProgressUpdateMethodId;
-    jmethodID                      onPreviewProgressUpdateMethodId;
-    jmethodID                      previewFrameEditInfoId;
-    M4xVSS_InitParams              initParams;
-    void*                          pTextRendererHandle;
-    M4xVSS_getTextRgbBufferFct     pTextRendererFunction;
-    M4OSA_Context                  engineContext;
-    ManualEditState                state;
-    M4VSS3GPP_EditSettings*        pEditSettings;
-    M4OSA_Context                  threadContext;
-    M4OSA_ERR                      threadResult;
-    M4OSA_UInt8                    threadProgress;
-    VideoEditorPreviewController   *mPreviewController;
-    M4xVSS_AudioMixingSettings     *mAudioSettings;
-    /* Audio Graph changes */
-    M4OSA_Context                   pAudioGraphMCSCtx;
-    M4OSA_Bool                      bSkipState;
-    jmethodID                       onAudioGraphProgressUpdateMethodId;
-    Mutex                           mLock;
-    bool                            mIsUpdateOverlay;
-    char                            *mOverlayFileName;
-    int                             mOverlayRenderingMode;
-    M4DECODER_VideoDecoders* decoders;
-} ManualEditContext;
-
-extern "C" M4OSA_ERR M4MCS_open_normalMode(
-                M4MCS_Context                       pContext,
-                M4OSA_Void*                         pFileIn,
-                M4VIDEOEDITING_FileType             InputFileType,
-                M4OSA_Void*                         pFileOut,
-                M4OSA_Void*                         pTempFile);
-
-static M4OSA_ERR videoEditor_toUTF8Fct(
-                M4OSA_Void*                         pBufferIn,
-                M4OSA_UInt8*                        pBufferOut,
-                M4OSA_UInt32*                       bufferOutSize);
-
-static M4OSA_ERR videoEditor_fromUTF8Fct(
-                M4OSA_UInt8*                        pBufferIn,
-                M4OSA_Void*                         pBufferOut,
-                M4OSA_UInt32*                       bufferOutSize);
-
-static M4OSA_ERR videoEditor_getTextRgbBufferFct(
-                M4OSA_Void*                         pRenderingData,
-                M4OSA_Void*                         pTextBuffer,
-                M4OSA_UInt32                        textBufferSize,
-                M4VIFI_ImagePlane**                 pOutputPlane);
-
-static void videoEditor_callOnProgressUpdate(
-                ManualEditContext*                  pContext,
-                int                                 task,
-                int                                 progress);
-
-static void videoEditor_freeContext(
-                JNIEnv*                             pEnv,
-                ManualEditContext**                 ppContext);
-
-static M4OSA_ERR videoEditor_threadProc(
-                M4OSA_Void*                         param);
-
-static jobject videoEditor_getVersion(
-                JNIEnv*                             pEnv,
-                jobject                             thiz);
-
-static void videoEditor_init(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jstring                             tempPath,
-                jstring                             textRendererPath);
-
-static void videoEditor_loadSettings(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jobject                             settings);
-
-static void videoEditor_unloadSettings(
-                JNIEnv*                             pEnv,
-                jobject                             thiz);
-
-
-static void videoEditor_stopEncoding(
-                JNIEnv*                             pEnv,
-                jobject                             thiz);
-
-static void videoEditor_release(
-                JNIEnv*                             pEnv,
-                jobject                             thiz);
-static jint videoEditor_getPixels(
-                                 JNIEnv*                  env,
-                                 jobject                  thiz,
-                                 jstring                  path,
-                                 jintArray                pixelArray,
-                                 M4OSA_UInt32             width,
-                                 M4OSA_UInt32             height,
-                                 M4OSA_UInt32             timeMS);
-static jint videoEditor_getPixelsList(
-                                     JNIEnv*                  env,
-                                     jobject                  thiz,
-                                     jstring                  path,
-                                     jintArray                pixelArray,
-                                     M4OSA_UInt32             width,
-                                     M4OSA_UInt32             height,
-                                     M4OSA_UInt32             noOfThumbnails,
-                                     jlong                    startTime,
-                                     jlong                    endTime,
-                                     jintArray                indexArray,
-                                     jobject                  callback);
-
-static void
-videoEditor_startPreview(
-                JNIEnv*                 pEnv,
-                jobject                 thiz,
-                jobject                 mSurface,
-                jlong                   fromMs,
-                jlong                   toMs,
-                jint                    callbackInterval,
-                jboolean                loop);
-
-static void
-videoEditor_populateSettings(
-                JNIEnv*                 pEnv,
-                jobject                 thiz,
-                jobject                 settings,
-                jobject                 object,
-                jobject                 audioSettingObject);
-
-static jint videoEditor_stopPreview(JNIEnv*  pEnv,
-                              jobject  thiz);
-
-static jobject
-videoEditor_getProperties(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jstring                             file);
-
-static jint videoEditor_renderPreviewFrame(JNIEnv* pEnv,
-                                    jobject thiz,
-                                    jobject    mSurface,
-                                    jlong fromMs,
-                                    jint  surfaceWidth,
-                                    jint  surfaceHeight);
-
-static int videoEditor_registerManualEditMethods(
-                JNIEnv*                             pEnv);
-
-static void jniPreviewProgressCallback(void* cookie, M4OSA_UInt32 msgType,
-                                        void *argc);
-
-static jint videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv,
-                                                    jobject thiz,
-                                                    jobject mSurface,
-                                                    jstring filePath,
-                                                    jint frameWidth,
-                                                    jint frameHeight,
-                                                    jint surfaceWidth,
-                                                    jint surfaceHeight,
-                                                    jlong fromMs);
-
-static jint videoEditor_generateAudioWaveFormSync ( JNIEnv*     pEnv,
-                                                  jobject     thiz,
-                                                  jstring     pcmfilePath,
-                                                  jstring     outGraphfilePath,
-                                                  jint        frameDuration,
-                                                  jint        channels,
-                                                  jint        samplesCount);
-
-static int videoEditor_generateAudioRawFile(JNIEnv* pEnv,
-                                    jobject thiz,
-                                    jstring infilePath,
-                                    jstring pcmfilePath );
-
-M4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext,
-                                    M4OSA_Char* infilePath,
-                                    M4OSA_Char* pcmfilePath );
-
-static jint
-videoEditor_generateClip(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jobject                             settings);
-
-static void videoEditor_clearSurface(JNIEnv* pEnv,
-                                    jobject thiz,
-                                    jobject surface);
-
-static JNINativeMethod gManualEditMethods[] = {
-    {"getVersion",               "()L"VERSION_CLASS_NAME";",
-                                (void *)videoEditor_getVersion      },
-    {"_init",                    "(Ljava/lang/String;Ljava/lang/String;)V",
-                                (void *)videoEditor_init    },
-    {"nativeStartPreview",       "(Landroid/view/Surface;JJIZ)V",
-                                (void *)videoEditor_startPreview    },
-    {"nativePopulateSettings",
-            "(L"EDIT_SETTINGS_CLASS_NAME";L"PREVIEW_PROPERTIES_CLASS_NAME";L"
-            AUDIO_SETTINGS_CLASS_NAME";)V",
-                                (void *)videoEditor_populateSettings    },
-    {"nativeRenderPreviewFrame", "(Landroid/view/Surface;JII)I",
-                                (int *)videoEditor_renderPreviewFrame     },
-    {"nativeRenderMediaItemPreviewFrame",
-    "(Landroid/view/Surface;Ljava/lang/String;IIIIJ)I",
-                        (int *)videoEditor_renderMediaItemPreviewFrame     },
-    {"nativeStopPreview",       "()I",
-                                (int *)videoEditor_stopPreview    },
-    {"stopEncoding",            "()V",
-                                (void *)videoEditor_stopEncoding         },
-    {"release",                 "()V",
-                                (void *)videoEditor_release            },
-    {"nativeGetPixels",         "(Ljava/lang/String;[IIIJ)I",
-                                (void*)videoEditor_getPixels               },
-    {"nativeGetPixelsList",     "(Ljava/lang/String;[IIIIJJ[ILandroid/media/videoeditor/MediaArtistNativeHelper$NativeGetPixelsListCallback;)I",
-                                (void*)videoEditor_getPixelsList           },
-    {"getMediaProperties",
-    "(Ljava/lang/String;)Landroid/media/videoeditor/MediaArtistNativeHelper$Properties;",
-                                (void *)videoEditor_getProperties          },
-    {"nativeGenerateAudioGraph","(Ljava/lang/String;Ljava/lang/String;III)I",
-                                (int *)videoEditor_generateAudioWaveFormSync },
-    {"nativeGenerateRawAudio",  "(Ljava/lang/String;Ljava/lang/String;)I",
-                                (int *)videoEditor_generateAudioRawFile      },
-    {"nativeGenerateClip",      "(L"EDIT_SETTINGS_CLASS_NAME";)I",
-                                (void *)videoEditor_generateClip  },
-    {"nativeClearSurface",       "(Landroid/view/Surface;)V",
-                                (void *)videoEditor_clearSurface  },
-};
-
-// temp file name of VSS out file
-#define TEMP_MCS_OUT_FILE_PATH "tmpOut.3gp"
-
-void
-getClipSetting(
-                JNIEnv*                                       pEnv,
-                jobject                                       object,
-                M4VSS3GPP_ClipSettings*                       pSettings)
-{
-
-    jfieldID fid;
-    int field = 0;
-    bool needToBeLoaded = true;
-    jclass clazz = pEnv->FindClass(PROPERTIES_CLASS_NAME);
-
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == clazz),
-                                             "not initialized");
-
-    fid = pEnv->GetFieldID(clazz,"duration","I");
-    pSettings->ClipProperties.uiClipDuration = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("duration = %d",pSettings->ClipProperties.uiClipDuration);
-
-    fid = pEnv->GetFieldID(clazz,"videoFormat","I");
-    pSettings->ClipProperties.VideoStreamType =
-        (M4VIDEOEDITING_VideoFormat)pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("videoFormat = %d",pSettings->ClipProperties.VideoStreamType);
-
-    fid = pEnv->GetFieldID(clazz,"videoDuration","I");
-    pSettings->ClipProperties.uiClipVideoDuration = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("videoDuration = %d",
-                    pSettings->ClipProperties.uiClipVideoDuration);
-
-    fid = pEnv->GetFieldID(clazz,"width","I");
-    pSettings->ClipProperties.uiVideoWidth = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("width = %d",pSettings->ClipProperties.uiVideoWidth);
-
-    fid = pEnv->GetFieldID(clazz,"height","I");
-    pSettings->ClipProperties.uiVideoHeight = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("height = %d",pSettings->ClipProperties.uiVideoHeight);
-
-    fid = pEnv->GetFieldID(clazz,"audioFormat","I");
-    pSettings->ClipProperties.AudioStreamType =
-        (M4VIDEOEDITING_AudioFormat)pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("audioFormat = %d",pSettings->ClipProperties.AudioStreamType);
-
-    fid = pEnv->GetFieldID(clazz,"audioDuration","I");
-    pSettings->ClipProperties.uiClipAudioDuration = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("audioDuration = %d",
-                    pSettings->ClipProperties.uiClipAudioDuration);
-
-    fid = pEnv->GetFieldID(clazz,"audioBitrate","I");
-    pSettings->ClipProperties.uiAudioBitrate = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("audioBitrate = %d",pSettings->ClipProperties.uiAudioBitrate);
-
-    fid = pEnv->GetFieldID(clazz,"audioChannels","I");
-    pSettings->ClipProperties.uiNbChannels = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("audioChannels = %d",pSettings->ClipProperties.uiNbChannels);
-
-    fid = pEnv->GetFieldID(clazz,"audioSamplingFrequency","I");
-    pSettings->ClipProperties.uiSamplingFrequency = pEnv->GetIntField(object,fid);
-    M4OSA_TRACE1_1("audioSamplingFrequency = %d",
-                    pSettings->ClipProperties.uiSamplingFrequency);
-
-   fid = pEnv->GetFieldID(clazz,"audioVolumeValue","I");
-   pSettings->ClipProperties.uiClipAudioVolumePercentage =
-                    pEnv->GetIntField(object,fid);
-   M4OSA_TRACE1_1("audioVolumeValue = %d",
-                    pSettings->ClipProperties.uiClipAudioVolumePercentage);
-
-   fid = pEnv->GetFieldID(clazz,"videoRotation","I");
-   pSettings->ClipProperties.videoRotationDegrees =
-                    pEnv->GetIntField(object,fid);
-   M4OSA_TRACE1_1("videoRotation = %d",
-                    pSettings->ClipProperties.videoRotationDegrees);
-
-   // Free the local references to avoid memory leaks
-   pEnv->DeleteLocalRef(clazz);
-}
-
-static void jniPreviewProgressCallback (void* cookie, M4OSA_UInt32 msgType,
-                                        void *argc)
-{
-    ManualEditContext *pContext = (ManualEditContext *)cookie;
-    JNIEnv*     pEnv = NULL;
-    bool        isFinished = false;
-    int         currentMs = 0;
-    int         error = M4NO_ERROR;
-    bool        isUpdateOverlay = false;
-    int         overlayEffectIndex;
-    char        *extPos;
-    bool        isSendProgress = true;
-    jstring     tmpFileName;
-    VideoEditorCurretEditInfo *pCurrEditInfo;
-
-    // Attach the current thread.
-    pContext->pVM->AttachCurrentThread(&pEnv, NULL);
-    switch(msgType)
-    {
-        case MSG_TYPE_PROGRESS_INDICATION:
-            currentMs = *(int*)argc;
-            break;
-        case MSG_TYPE_PLAYER_ERROR:
-            currentMs = -1;
-            error = *(int*)argc;
-            break;
-        case MSG_TYPE_PREVIEW_END:
-            isFinished = true;
-            break;
-        case MSG_TYPE_OVERLAY_UPDATE:
-        {
-            int overlayFileNameLen = 0;
-            isSendProgress = false;
-            pContext->mIsUpdateOverlay = true;
-            pCurrEditInfo = (VideoEditorCurretEditInfo*)argc;
-            overlayEffectIndex = pCurrEditInfo->overlaySettingsIndex;
-            ALOGV("MSG_TYPE_OVERLAY_UPDATE");
-
-            if (pContext->mOverlayFileName != NULL) {
-                free(pContext->mOverlayFileName);
-                pContext->mOverlayFileName = NULL;
-            }
-
-            overlayFileNameLen =
-                strlen((const char*)pContext->pEditSettings->Effects[overlayEffectIndex].xVSS.pFramingFilePath);
-
-            pContext->mOverlayFileName =
-                (char*)M4OSA_32bitAlignedMalloc(overlayFileNameLen+1,
-                                    M4VS, (M4OSA_Char*)"videoEdito JNI overlayFile");
-            if (pContext->mOverlayFileName != NULL) {
-                strncpy (pContext->mOverlayFileName,
-                    (const char*)pContext->pEditSettings->
-                    Effects[overlayEffectIndex].xVSS.pFramingFilePath, overlayFileNameLen);
-                //Change the name to png file
-                extPos = strstr(pContext->mOverlayFileName, ".rgb");
-                if (extPos != NULL) {
-                    *extPos = '\0';
-                } else {
-                    ALOGE("ERROR the overlay file is incorrect");
-                }
-
-                strcat(pContext->mOverlayFileName, ".png");
-                ALOGV("Conv string is %s", pContext->mOverlayFileName);
-                ALOGV("Current Clip index = %d", pCurrEditInfo->clipIndex);
-
-                pContext->mOverlayRenderingMode = pContext->pEditSettings->\
-                         pClipList[pCurrEditInfo->clipIndex]->xVSS.MediaRendering;
-                ALOGV("rendering mode %d ", pContext->mOverlayRenderingMode);
-
-            }
-
-            break;
-        }
-
-        case MSG_TYPE_OVERLAY_CLEAR:
-            isSendProgress = false;
-            if (pContext->mOverlayFileName != NULL) {
-                free(pContext->mOverlayFileName);
-                pContext->mOverlayFileName = NULL;
-            }
-
-            ALOGV("MSG_TYPE_OVERLAY_CLEAR");
-            //argc is not used
-            pContext->mIsUpdateOverlay = true;
-            break;
-        default:
-            break;
-    }
-
-    if (isSendProgress) {
-        tmpFileName  = pEnv->NewStringUTF(pContext->mOverlayFileName);
-        pEnv->CallVoidMethod(pContext->engine,
-                pContext->onPreviewProgressUpdateMethodId,
-                currentMs,isFinished, pContext->mIsUpdateOverlay,
-                tmpFileName, pContext->mOverlayRenderingMode, error);
-
-        if (pContext->mIsUpdateOverlay) {
-            pContext->mIsUpdateOverlay = false;
-        }
-
-        if (tmpFileName) {
-            pEnv->DeleteLocalRef(tmpFileName);
-        }
-    }
-
-    // Detach the current thread.
-    pContext->pVM->DetachCurrentThread();
-
-}
-static M4OSA_ERR checkClipVideoProfileAndLevel(M4DECODER_VideoDecoders *pDecoders,
-    M4OSA_Int32 format, M4OSA_UInt32 profile, M4OSA_UInt32 level){
-
-    M4OSA_Int32 codec = 0;
-    M4OSA_Bool foundCodec = M4OSA_FALSE;
-    M4OSA_ERR  result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE;
-    M4OSA_Bool foundProfile = M4OSA_FALSE;
-    ALOGV("checkClipVideoProfileAndLevel format %d profile;%d level:0x%x",
-       format, profile, level);
-
-    switch (format) {
-        case M4VIDEOEDITING_kH263:
-            codec = M4DA_StreamTypeVideoH263;
-            break;
-        case M4VIDEOEDITING_kH264:
-             codec = M4DA_StreamTypeVideoMpeg4Avc;
-            break;
-        case M4VIDEOEDITING_kMPEG4:
-             codec = M4DA_StreamTypeVideoMpeg4;
-            break;
-        case M4VIDEOEDITING_kNoneVideo:
-        case M4VIDEOEDITING_kNullVideo:
-        case M4VIDEOEDITING_kUnsupportedVideo:
-             // For these case we do not check the profile and level
-             return M4NO_ERROR;
-        default :
-            ALOGE("checkClipVideoProfileAndLevel unsupport Video format %ld", format);
-            break;
-    }
-
-    if (pDecoders != M4OSA_NULL && pDecoders->decoderNumber > 0) {
-        VideoDecoder *pVideoDecoder = pDecoders->decoder;
-        for(size_t k =0; k < pDecoders->decoderNumber; k++) {
-            if (pVideoDecoder != M4OSA_NULL) {
-                if (pVideoDecoder->codec == codec) {
-                    foundCodec = M4OSA_TRUE;
-                    break;
-                }
-            }
-            pVideoDecoder++;
-        }
-
-        if (foundCodec) {
-            VideoComponentCapabilities* pComponent = pVideoDecoder->component;
-            for (size_t i = 0; i < pVideoDecoder->componentNumber; i++) {
-                if (pComponent != M4OSA_NULL) {
-                    VideoProfileLevel *pProfileLevel = pComponent->profileLevel;
-                    for (size_t j =0; j < pComponent->profileNumber; j++) {
-                        // Check the profile and level
-                        if (pProfileLevel != M4OSA_NULL) {
-                            if (profile == pProfileLevel->mProfile) {
-                                foundProfile = M4OSA_TRUE;
-
-                                if (level <= pProfileLevel->mLevel) {
-                                    return M4NO_ERROR;
-                                }
-                            } else {
-                                foundProfile = M4OSA_FALSE;
-                            }
-                        }
-                        pProfileLevel++;
-                    }
-                }
-                pComponent++;
-            }
-        }
-    }
-
-    if (foundProfile) {
-        result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL;
-    } else {
-        result = M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE;
-    }
-
-    return result;
-}
-static jint videoEditor_stopPreview(JNIEnv*  pEnv,
-                              jobject  thiz)
-{
-    ManualEditContext* pContext = M4OSA_NULL;
-    bool needToBeLoaded = true;
-    M4OSA_UInt32 lastProgressTimeMs = 0;
-
-    // Get the context.
-    pContext =
-            (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-    lastProgressTimeMs = pContext->mPreviewController->stopPreview();
-
-    if (pContext->mOverlayFileName != NULL) {
-        free(pContext->mOverlayFileName);
-        pContext->mOverlayFileName = NULL;
-    }
-
-    return (jint)lastProgressTimeMs;
-}
-
-static void videoEditor_clearSurface(JNIEnv* pEnv,
-                                    jobject thiz,
-                                    jobject surface)
-{
-    bool needToBeLoaded = true;
-    M4OSA_ERR result = M4NO_ERROR;
-    VideoEditor_renderPreviewFrameStr frameStr;
-    const char* pMessage = NULL;
-    // Let the size be QVGA
-    int width = 320;
-    int height = 240;
-    ManualEditContext* pContext = M4OSA_NULL;
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO,
-                                "VIDEO_EDITOR","pContext = 0x%x",pContext);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                 (M4OSA_NULL == pContext->mPreviewController),
-                                 "not initialized");
-
-    // Validate the surface parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
-                                                (NULL == surface),
-                                                "surface is null");
-
-    sp<Surface> previewSurface = android_view_Surface_getSurface(pEnv, surface);
-
-    // Validate the mSurface's mNativeSurface field
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                                (NULL == previewSurface.get()),
-                                                "mNativeSurface is null");
-
-    frameStr.pBuffer = M4OSA_NULL;
-    frameStr.timeMs = 0;
-    frameStr.uiSurfaceWidth = width;
-    frameStr.uiSurfaceHeight = height;
-    frameStr.uiFrameWidth = width;
-    frameStr.uiFrameHeight = height;
-    frameStr.bApplyEffect = M4OSA_FALSE;
-    frameStr.clipBeginCutTime = 0;
-    frameStr.clipEndCutTime = 0;
-
-    result = pContext->mPreviewController->clearSurface(previewSurface,
-                                                              &frameStr);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-            (M4NO_ERROR != result), result);
-
-  }
-
-static jint videoEditor_renderPreviewFrame(JNIEnv* pEnv,
-                                    jobject thiz,
-                                    jobject    mSurface,
-                                    jlong fromMs,
-                                    jint surfaceWidth,
-                                    jint surfaceHeight )
-{
-    bool needToBeLoaded = true;
-    M4OSA_ERR result = M4NO_ERROR;
-    M4OSA_UInt32 timeMs = (M4OSA_UInt32)fromMs;
-    M4OSA_UInt32 i=0,tnTimeMs = 0, framesizeYuv =0;
-    M4VIFI_UInt8 *pixelArray = M4OSA_NULL;
-    M4OSA_UInt32    iCurrentClipIndex = 0, uiNumberOfClipsInStoryBoard =0,
-                    uiClipDuration = 0, uiTotalClipDuration = 0,
-                    iIncrementedDuration = 0;
-    VideoEditor_renderPreviewFrameStr frameStr;
-    M4OSA_Context tnContext = M4OSA_NULL;
-    const char* pMessage = NULL;
-    M4VIFI_ImagePlane *yuvPlane = NULL;
-    VideoEditorCurretEditInfo  currEditInfo;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO,
-        "VIDEO_EDITOR", "surfaceWidth = %d",surfaceWidth);
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO,
-        "VIDEO_EDITOR", "surfaceHeight = %d",surfaceHeight);
-    ManualEditContext* pContext = M4OSA_NULL;
-    // Get the context.
-    pContext =
-            (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO,
-                                "VIDEO_EDITOR","pContext = 0x%x",pContext);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                 (M4OSA_NULL == pContext->mPreviewController),
-                                 "not initialized");
-
-    // Validate the mSurface parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
-                                                (NULL == mSurface),
-                                                "mSurface is null");
-
-    sp<Surface> previewSurface = android_view_Surface_getSurface(pEnv, mSurface);
-
-    // Validate the mSurface's mNativeSurface field
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                                (NULL == previewSurface.get()),
-                                                "mNativeSurface is null");
-
-    /* Determine the total number of clips, total duration*/
-    uiNumberOfClipsInStoryBoard = pContext->pEditSettings->uiClipNumber;
-
-    for (i = 0; i < uiNumberOfClipsInStoryBoard; i++) {
-        uiClipDuration = pContext->pEditSettings->pClipList[i]->uiEndCutTime -
-            pContext->pEditSettings->pClipList[i]->uiBeginCutTime;
-        uiTotalClipDuration += uiClipDuration;
-    }
-
-    /* determine the clip whose thumbnail needs to be rendered*/
-    if (timeMs == 0) {
-        iCurrentClipIndex = 0;
-        i=0;
-    } else {
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "videoEditor_renderPreviewFrame() timeMs=%d", timeMs);
-
-        if (timeMs > uiTotalClipDuration) {
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                "videoEditor_renderPreviewFrame() timeMs > uiTotalClipDuration");
-            pMessage = videoEditJava_getErrorName(M4ERR_PARAMETER);
-            jniThrowException(pEnv, "java/lang/IllegalArgumentException", pMessage);
-            return -1;
-        }
-
-        for (i = 0; i < uiNumberOfClipsInStoryBoard; i++) {
-            if (timeMs <= (iIncrementedDuration +
-                          (pContext->pEditSettings->pClipList[i]->uiEndCutTime -
-                           pContext->pEditSettings->pClipList[i]->uiBeginCutTime)))
-            {
-                iCurrentClipIndex = i;
-                VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                    "videoEditor_renderPreviewFrame() iCurrentClipIndex=%d for timeMs=%d",
-                    iCurrentClipIndex, timeMs);
-                break;
-            }
-            else {
-                iIncrementedDuration = iIncrementedDuration +
-                    (pContext->pEditSettings->pClipList[i]->uiEndCutTime -
-                    pContext->pEditSettings->pClipList[i]->uiBeginCutTime);
-            }
-        }
-    }
-    /* If timestamp is beyond story board duration, return*/
-    if (i >= uiNumberOfClipsInStoryBoard) {
-        if (timeMs == iIncrementedDuration) {
-            iCurrentClipIndex = i-1;
-        } else {
-           return -1;
-        }
-    }
-
-    /*+ Handle the image files here */
-      if (pContext->pEditSettings->pClipList[iCurrentClipIndex]->FileType ==
-          /*M4VIDEOEDITING_kFileType_JPG*/ M4VIDEOEDITING_kFileType_ARGB8888 ) {
-          VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", " iCurrentClipIndex %d ", iCurrentClipIndex);
-          VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                "  Height = %d",
-                pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoHeight);
-
-          VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                "  Width = %d",
-                pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoWidth);
-
-          LvGetImageThumbNail((const char *)pContext->pEditSettings->\
-          pClipList[iCurrentClipIndex]->pFile,
-            pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoHeight,
-            pContext->pEditSettings->pClipList[iCurrentClipIndex]->ClipProperties.uiVideoWidth,
-            (M4OSA_Void **)&frameStr.pBuffer);
-            tnTimeMs = (M4OSA_UInt32)timeMs;
-
-          frameStr.videoRotationDegree = 0;
-    } else {
-        /* Handle 3gp/mp4 Clips here */
-        /* get thumbnail*/
-        result = ThumbnailOpen(&tnContext,
-            (const M4OSA_Char*)pContext->pEditSettings->\
-            pClipList[iCurrentClipIndex]->pFile, M4OSA_TRUE);
-        if (result != M4NO_ERROR || tnContext  == M4OSA_NULL) {
-            return -1;
-        }
-
-        /* timeMs is relative to storyboard; in this api it shud be relative to this clip */
-        if ((i >= uiNumberOfClipsInStoryBoard) &&
-            (timeMs == iIncrementedDuration)) {
-            tnTimeMs = pContext->pEditSettings->\
-            pClipList[iCurrentClipIndex]->uiEndCutTime;
-        } else {
-            tnTimeMs = pContext->pEditSettings->\
-            pClipList[iCurrentClipIndex]->uiBeginCutTime
-            + (timeMs - iIncrementedDuration);
-        }
-
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "video width = %d",pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-            ClipProperties.uiVideoWidth);
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "video height = %d",pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-            ClipProperties.uiVideoHeight);
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "current clip index = %d",iCurrentClipIndex);
-
-        M4OSA_UInt32 width = pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-            ClipProperties.uiVideoWidth;
-        M4OSA_UInt32 height = pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-            ClipProperties.uiVideoHeight;
-
-        framesizeYuv = width * height * 1.5;
-
-        pixelArray = (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(framesizeYuv, M4VS,
-            (M4OSA_Char*)"videoEditor pixelArray");
-        if (pixelArray == M4OSA_NULL) {
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                "videoEditor_renderPreviewFrame() malloc error");
-            ThumbnailClose(tnContext);
-            pMessage = videoEditJava_getErrorName(M4ERR_ALLOC);
-            jniThrowException(pEnv, "java/lang/RuntimeException", pMessage);
-            return -1;
-        }
-
-        result = ThumbnailGetPixels16(tnContext, (M4OSA_Int16 *)pixelArray,
-            pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-            ClipProperties.uiVideoWidth,
-            pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-            ClipProperties.uiVideoHeight,
-            &tnTimeMs, 0);
-        if (result != M4NO_ERROR) {
-            free(pixelArray);
-            ThumbnailClose(tnContext);
-            return -1;
-        }
-
-        ThumbnailClose(tnContext);
-        tnContext = M4OSA_NULL;
-
-#ifdef DUMPTOFILE
-        {
-            M4OSA_Context fileContext;
-            M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/FirstRGB565.raw";
-            remove((const char *)fileName);
-            M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\
-                M4OSA_kFileWrite|M4OSA_kFileCreate);
-            M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) pixelArray,
-                framesizeYuv);
-            M4OSA_fileWriteClose(fileContext);
-        }
-#endif
-
-        /**
-        * Allocate output YUV planes
-        */
-        yuvPlane = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(3*sizeof(M4VIFI_ImagePlane), M4VS,
-            (M4OSA_Char*)"videoEditor_renderPreviewFrame Output plane YUV");
-        if (yuvPlane == M4OSA_NULL) {
-            VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                "videoEditor_renderPreviewFrame() malloc error for yuv plane");
-            free(pixelArray);
-            pMessage = videoEditJava_getErrorName(M4ERR_ALLOC);
-            jniThrowException(pEnv, "java/lang/RuntimeException", pMessage);
-            return -1;
-        }
-
-        yuvPlane[0].u_width = width;
-        yuvPlane[0].u_height = height;
-        yuvPlane[0].u_topleft = 0;
-        yuvPlane[0].u_stride = width;
-        yuvPlane[0].pac_data = (M4VIFI_UInt8*)pixelArray;
-
-        yuvPlane[1].u_width = width>>1;
-        yuvPlane[1].u_height = height>>1;
-        yuvPlane[1].u_topleft = 0;
-        yuvPlane[1].u_stride = width>>1;
-        yuvPlane[1].pac_data = yuvPlane[0].pac_data
-                    + yuvPlane[0].u_width * yuvPlane[0].u_height;
-        yuvPlane[2].u_width = (width)>>1;
-        yuvPlane[2].u_height = (height)>>1;
-        yuvPlane[2].u_topleft = 0;
-        yuvPlane[2].u_stride = (width)>>1;
-        yuvPlane[2].pac_data = yuvPlane[1].pac_data
-                    + yuvPlane[1].u_width * yuvPlane[1].u_height;
-
-#ifdef DUMPTOFILE
-        {
-            M4OSA_Context fileContext;
-            M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/ConvertedYuv.yuv";
-            remove((const char *)fileName);
-            M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\
-                M4OSA_kFileWrite|M4OSA_kFileCreate);
-            M4OSA_fileWriteData(fileContext,
-                (M4OSA_MemAddr8) yuvPlane[0].pac_data, framesizeYuv);
-            M4OSA_fileWriteClose(fileContext);
-        }
-#endif
-
-        /* Fill up the render structure*/
-        frameStr.pBuffer = (M4OSA_Void*)yuvPlane[0].pac_data;
-
-        frameStr.videoRotationDegree = pContext->pEditSettings->\
-            pClipList[iCurrentClipIndex]->ClipProperties.videoRotationDegrees;
-    }
-
-    frameStr.timeMs = timeMs;    /* timestamp on storyboard*/
-    frameStr.uiSurfaceWidth =
-        pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-        ClipProperties.uiVideoWidth;
-    frameStr.uiSurfaceHeight =
-        pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-        ClipProperties.uiVideoHeight;
-    frameStr.uiFrameWidth =
-        pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-        ClipProperties.uiVideoWidth;
-    frameStr.uiFrameHeight =
-        pContext->pEditSettings->pClipList[iCurrentClipIndex]->\
-        ClipProperties.uiVideoHeight;
-    if (pContext->pEditSettings->nbEffects > 0) {
-        frameStr.bApplyEffect = M4OSA_TRUE;
-    } else {
-        frameStr.bApplyEffect = M4OSA_FALSE;
-    }
-    frameStr.clipBeginCutTime = iIncrementedDuration;
-    frameStr.clipEndCutTime =
-        iIncrementedDuration +
-        (pContext->pEditSettings->pClipList[iCurrentClipIndex]->uiEndCutTime -\
-        pContext->pEditSettings->pClipList[iCurrentClipIndex]->uiBeginCutTime);
-
-    pContext->mPreviewController->setPreviewFrameRenderingMode(
-        pContext->pEditSettings->\
-        pClipList[iCurrentClipIndex]->xVSS.MediaRendering,
-        pContext->pEditSettings->xVSS.outputVideoSize);
-    result = pContext->mPreviewController->renderPreviewFrame(previewSurface,
-                                                              &frameStr, &currEditInfo);
-
-    if (currEditInfo.overlaySettingsIndex != -1) {
-        char tmpOverlayFilename[100];
-        char *extPos = NULL;
-        jstring tmpOverlayString;
-        int tmpRenderingMode = 0;
-
-        strncpy (tmpOverlayFilename,
-                (const char*)pContext->pEditSettings->Effects[currEditInfo.overlaySettingsIndex].xVSS.pFramingFilePath, 99);
-
-        //Change the name to png file
-        extPos = strstr(tmpOverlayFilename, ".rgb");
-        if (extPos != NULL) {
-            *extPos = '\0';
-        } else {
-            ALOGE("ERROR the overlay file is incorrect");
-        }
-
-        strcat(tmpOverlayFilename, ".png");
-
-        tmpRenderingMode = pContext->pEditSettings->pClipList[iCurrentClipIndex]->xVSS.MediaRendering;
-        tmpOverlayString = pEnv->NewStringUTF(tmpOverlayFilename);
-        pEnv->CallVoidMethod(pContext->engine,
-            pContext->previewFrameEditInfoId,
-            tmpOverlayString, tmpRenderingMode);
-
-    }
-
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-            (M4NO_ERROR != result), result);
-
-    free(frameStr.pBuffer);
-    if (pContext->pEditSettings->pClipList[iCurrentClipIndex]->FileType !=
-            M4VIDEOEDITING_kFileType_ARGB8888) {
-        free(yuvPlane);
-    }
-
-    return (jint)tnTimeMs;
-}
-
-static jint videoEditor_renderMediaItemPreviewFrame(JNIEnv* pEnv,
-                                                    jobject thiz,
-                                                    jobject mSurface,
-                                                    jstring filePath,
-                                                    jint    frameWidth,
-                                                    jint    frameHeight,
-                                                    jint    surfaceWidth,
-                                                    jint    surfaceHeight,
-                                                    jlong   fromMs)
-{
-    bool needToBeLoaded = true;
-    M4OSA_ERR result = M4NO_ERROR;
-    M4OSA_UInt32 timeMs = (M4OSA_UInt32)fromMs;
-    M4OSA_UInt32 framesizeYuv =0;
-    M4VIFI_UInt8 *pixelArray = M4OSA_NULL;
-    VideoEditor_renderPreviewFrameStr frameStr;
-    M4OSA_Context tnContext = M4OSA_NULL;
-    const char* pMessage = NULL;
-    M4VIFI_ImagePlane yuvPlane[3], rgbPlane;
-
-    ManualEditContext* pContext = M4OSA_NULL;
-    // Get the context.
-    pContext =
-            (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded,
-                                                      pEnv, thiz);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                 (M4OSA_NULL == pContext->mPreviewController),
-                                 "not initialized");
-
-    // Validate the mSurface parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
-                                                (NULL == mSurface),
-                                                "mSurface is null");
-
-    sp<Surface> previewSurface = android_view_Surface_getSurface(pEnv, mSurface);
-
-    const char *pString = pEnv->GetStringUTFChars(filePath, NULL);
-    if (pString == M4OSA_NULL) {
-        if (pEnv != NULL) {
-            jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null");
-        }
-    }
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-        "videoEditor_renderMediaItemPreviewFrame() timeMs=%d", timeMs);
-    /* get thumbnail*/
-    result = ThumbnailOpen(&tnContext,(const M4OSA_Char*)pString, M4OSA_TRUE);
-    if (result != M4NO_ERROR || tnContext  == M4OSA_NULL) {
-        return (jint)timeMs;
-    }
-
-    framesizeYuv = ((frameWidth)*(frameHeight)*1.5);
-
-    pixelArray = (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(framesizeYuv, M4VS,\
-        (M4OSA_Char*)"videoEditor pixelArray");
-    if (pixelArray == M4OSA_NULL) {
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "videoEditor_renderPreviewFrame() malloc error");
-        ThumbnailClose(tnContext);
-        pMessage = videoEditJava_getErrorName(M4ERR_ALLOC);
-        jniThrowException(pEnv, "java/lang/RuntimeException", pMessage);
-        return (jint)timeMs;
-    }
-
-    result = ThumbnailGetPixels16(tnContext, (M4OSA_Int16 *)pixelArray,
-                                                frameWidth,
-                                                frameHeight, &timeMs, 0);
-    if (result != M4NO_ERROR) {
-        free(pixelArray);
-        ThumbnailClose(tnContext);
-        return (jint)fromMs;
-    }
-
-#ifdef DUMPTOFILESYSTEM
-    {
-        M4OSA_Context fileContext;
-        M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/FirstRGB565.rgb";
-        M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\
-            M4OSA_kFileWrite|M4OSA_kFileCreate);
-        M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) pixelArray,
-                            framesizeRgb);
-        M4OSA_fileWriteClose(fileContext);
-    }
-#endif
-
-    yuvPlane[0].pac_data = (M4VIFI_UInt8*)pixelArray;
-    yuvPlane[0].u_height = frameHeight;
-    yuvPlane[0].u_width = frameWidth;
-    yuvPlane[0].u_stride = yuvPlane[0].u_width;
-    yuvPlane[0].u_topleft = 0;
-
-    yuvPlane[1].u_height = frameHeight/2;
-    yuvPlane[1].u_width = frameWidth/2;
-    yuvPlane[1].u_stride = yuvPlane[1].u_width;
-    yuvPlane[1].u_topleft = 0;
-    yuvPlane[1].pac_data = yuvPlane[0].pac_data
-                + yuvPlane[0].u_width*yuvPlane[0].u_height;
-
-    yuvPlane[2].u_height = frameHeight/2;
-    yuvPlane[2].u_width = frameWidth/2;
-    yuvPlane[2].u_stride = yuvPlane[2].u_width;
-    yuvPlane[2].u_topleft = 0;
-    yuvPlane[2].pac_data = yuvPlane[0].pac_data
-        + yuvPlane[0].u_width*yuvPlane[0].u_height + \
-        (yuvPlane[0].u_width/2)*(yuvPlane[0].u_height/2);
-#ifdef DUMPTOFILESYSTEM
-    {
-        M4OSA_Context fileContext;
-        M4OSA_Char* fileName = (M4OSA_Char*)"/mnt/sdcard/ConvertedYuv.yuv";
-        M4OSA_fileWriteOpen(&fileContext, (M4OSA_Void*) fileName,\
-            M4OSA_kFileWrite|M4OSA_kFileCreate);
-        M4OSA_fileWriteData(fileContext, (M4OSA_MemAddr8) yuvPlane[0].pac_data,
-                            framesizeYuv);
-        M4OSA_fileWriteClose(fileContext);
-    }
-#endif
-
-    /* Fill up the render structure*/
-    frameStr.pBuffer = (M4OSA_Void*)yuvPlane[0].pac_data;
-    frameStr.timeMs = timeMs;    /* timestamp on storyboard*/
-    frameStr.uiSurfaceWidth = frameWidth;
-    frameStr.uiSurfaceHeight = frameHeight;
-    frameStr.uiFrameWidth = frameWidth;
-    frameStr.uiFrameHeight = frameHeight;
-    frameStr.bApplyEffect = M4OSA_FALSE;
-    // clip begin cuttime and end cuttime set to 0
-    // as its only required when effect needs to be applied while rendering
-    frameStr.clipBeginCutTime = 0;
-    frameStr.clipEndCutTime = 0;
-
-    /*  pContext->mPreviewController->setPreviewFrameRenderingMode(M4xVSS_kBlackBorders,
-    (M4VIDEOEDITING_VideoFrameSize)(M4VIDEOEDITING_kHD960+1));*/
-    result
-    = pContext->mPreviewController->renderPreviewFrame(previewSurface,&frameStr, NULL);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                                                (M4NO_ERROR != result), result);
-
-    /* free the pixelArray and yuvPlane[0].pac_data */
-    free(yuvPlane[0].pac_data);
-
-    ThumbnailClose(tnContext);
-
-    if (pString != NULL) {
-        pEnv->ReleaseStringUTFChars(filePath, pString);
-    }
-
-    return (jint)timeMs;
-}
-
-jint videoEditor_generateAudioRawFile(  JNIEnv*     pEnv,
-                                        jobject     thiz,
-                                        jstring     infilePath,
-                                        jstring     pcmfilePath)
-{
-    M4OSA_ERR result = M4NO_ERROR;
-    bool               loaded   = true;
-    ManualEditContext* pContext = M4OSA_NULL;
-
-
-
-    const char *pInputFile = pEnv->GetStringUTFChars(infilePath, NULL);
-    if (pInputFile == M4OSA_NULL) {
-        if (pEnv != NULL) {
-            jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null");
-        }
-    }
-
-    const char *pStringOutPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL);
-    if (pStringOutPCMFilePath == M4OSA_NULL) {
-        if (pEnv != NULL) {
-            jniThrowException(pEnv, "java/lang/RuntimeException", "Input string null");
-        }
-    }
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO,
-        "VIDEO_EDITOR", "videoEditor_generateAudioRawFile infilePath %s",
-        pInputFile);
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO,
-        "VIDEO_EDITOR", "videoEditor_generateAudioRawFile pcmfilePath %s",
-        pStringOutPCMFilePath);
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz);
-
-    result = videoEditor_generateAudio( pEnv, pContext, (M4OSA_Char*)pInputFile,
-        (M4OSA_Char*)pStringOutPCMFilePath);
-
-    if (pInputFile != NULL) {
-        pEnv->ReleaseStringUTFChars(infilePath, pInputFile);
-    }
-    if (pStringOutPCMFilePath != NULL) {
-        pEnv->ReleaseStringUTFChars(pcmfilePath, pStringOutPCMFilePath);
-    }
-
-    return (jint)result;
-}
-
-M4OSA_ERR videoEditor_generateAudio(JNIEnv* pEnv,ManualEditContext* pContext,
-                                    M4OSA_Char* infilePath,
-                                    M4OSA_Char* pcmfilePath )
-{
-    bool                            needToBeLoaded = true;
-    M4OSA_ERR                       result = M4NO_ERROR;
-    M4MCS_Context                   mcsContext = M4OSA_NULL;
-    M4OSA_Char*                     pInputFile = M4OSA_NULL;
-    M4OSA_Char*                     pOutputFile = M4OSA_NULL;
-    M4OSA_Char*                     pTempPath = M4OSA_NULL;
-    M4MCS_OutputParams*             pOutputParams = M4OSA_NULL;
-    M4MCS_EncodingParams*           pEncodingParams = M4OSA_NULL;
-    M4OSA_Int32                     pInputFileType = 0;
-    M4OSA_UInt8                     threadProgress = 0;
-    M4OSA_Char*                     pTemp3gpFilePath = M4OSA_NULL;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_generateAudio()");
-
-    videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
-        (NULL == pContext),
-        "ManualEditContext is null");
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_init()");
-
-    pOutputParams = (M4MCS_OutputParams *)M4OSA_32bitAlignedMalloc(
-        sizeof(M4MCS_OutputParams),0x00,
-        (M4OSA_Char *)"M4MCS_OutputParams");
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-        (M4OSA_NULL == pOutputParams),
-        "not initialized");
-    if (needToBeLoaded == false) {
-        return M4ERR_ALLOC;
-    }
-
-    pEncodingParams = (M4MCS_EncodingParams *)M4OSA_32bitAlignedMalloc(
-        sizeof(M4MCS_EncodingParams),0x00,
-        (M4OSA_Char *)"M4MCS_EncodingParams");
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-        (M4OSA_NULL == pEncodingParams),
-        "not initialized");
-    if (needToBeLoaded == false) {
-        free(pEncodingParams);
-        pEncodingParams = M4OSA_NULL;
-        return M4ERR_ALLOC;
-    }
-
-    // Initialize the MCS library.
-    result = M4MCS_init(&mcsContext, pContext->initParams.pFileReadPtr,
-        pContext->initParams.pFileWritePtr);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,\
-        (M4NO_ERROR != result), result);
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-        (M4OSA_NULL == mcsContext),
-        "not initialized");
-     if(needToBeLoaded == false) {
-         free(pOutputParams);
-         pOutputParams = M4OSA_NULL;
-         free(pEncodingParams);
-         pEncodingParams = M4OSA_NULL;
-         return result;
-     }
-
-    // generate the path for temp 3gp output file
-    pTemp3gpFilePath = (M4OSA_Char*) M4OSA_32bitAlignedMalloc (
-        (strlen((const char*)pContext->initParams.pTempPath)
-        + strlen((const char*)TEMP_MCS_OUT_FILE_PATH)) + 1 /* for null termination */ , 0x0,
-        (M4OSA_Char*)"Malloc for temp 3gp file");
-    if (pTemp3gpFilePath != M4OSA_NULL)
-    {
-        memset((void *)pTemp3gpFilePath  ,0,
-            strlen((const char*)pContext->initParams.pTempPath)
-            + strlen((const char*)TEMP_MCS_OUT_FILE_PATH) + 1);
-        strncat((char *)pTemp3gpFilePath,
-            (const char *)pContext->initParams.pTempPath  ,
-            (size_t) ((M4OSA_Char*)pContext->initParams.pTempPath));
-        strncat((char *)pTemp3gpFilePath , (const char *)TEMP_MCS_OUT_FILE_PATH,
-            (size_t)strlen ((const char*)TEMP_MCS_OUT_FILE_PATH));
-    }
-    else {
-         M4MCS_abort(mcsContext);
-         free(pOutputParams);
-         pOutputParams = M4OSA_NULL;
-         free(pEncodingParams);
-         pEncodingParams = M4OSA_NULL;
-         return M4ERR_ALLOC;
-    }
-
-    pInputFile = (M4OSA_Char *) infilePath; //pContext->mAudioSettings->pFile;
-    //Delete this file later
-    pOutputFile = (M4OSA_Char *) pTemp3gpFilePath;
-    // Temp folder path for VSS use = ProjectPath
-    pTempPath = (M4OSA_Char *) pContext->initParams.pTempPath;
-    pInputFileType = (M4VIDEOEDITING_FileType)pContext->mAudioSettings->fileType;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "TEMP_MCS_OUT_FILE_PATH len %d",
-        strlen ((const char*)TEMP_MCS_OUT_FILE_PATH));
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "pTemp3gpFilePath %s",
-        pOutputFile);
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_open()");
-
-    result = M4MCS_open(mcsContext, pInputFile,
-        (M4VIDEOEDITING_FileType)pInputFileType,
-        pOutputFile, pTempPath);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-        (M4NO_ERROR != result), result);
-    if(needToBeLoaded == false) {
-         free(pTemp3gpFilePath);
-         pTemp3gpFilePath = M4OSA_NULL;
-         M4MCS_abort(mcsContext);
-         free(pOutputParams);
-         pOutputParams = M4OSA_NULL;
-         free(pEncodingParams);
-         pEncodingParams = M4OSA_NULL;
-         return result;
-    }
-
-    pOutputParams->OutputFileType
-        = (M4VIDEOEDITING_FileType)M4VIDEOEDITING_kFileType_3GPP;
-    // Set the video format.
-    pOutputParams->OutputVideoFormat =
-        (M4VIDEOEDITING_VideoFormat)M4VIDEOEDITING_kNoneVideo;//M4VIDEOEDITING_kNoneVideo;
-    pOutputParams->outputVideoProfile = 1;
-    pOutputParams->outputVideoLevel = 1;
-    // Set the frame size.
-    pOutputParams->OutputVideoFrameSize
-        = (M4VIDEOEDITING_VideoFrameSize)M4VIDEOEDITING_kQCIF;
-    // Set the frame rate.
-    pOutputParams->OutputVideoFrameRate
-        = (M4VIDEOEDITING_VideoFramerate)M4VIDEOEDITING_k5_FPS;
-
-    // Set the audio format.
-    pOutputParams->OutputAudioFormat
-        = (M4VIDEOEDITING_AudioFormat)M4VIDEOEDITING_kAAC;
-    // Set the audio sampling frequency.
-    pOutputParams->OutputAudioSamplingFrequency =
-        (M4VIDEOEDITING_AudioSamplingFrequency)M4VIDEOEDITING_k32000_ASF;
-    // Set the audio mono.
-    pOutputParams->bAudioMono = false;
-    // Set the pcm file; null for now.
-    pOutputParams->pOutputPCMfile = (M4OSA_Char *)pcmfilePath;
-    //(M4OSA_Char *)"/sdcard/Output/AudioPcm.pcm";
-    // Set the audio sampling frequency.
-    pOutputParams->MediaRendering = (M4MCS_MediaRendering)M4MCS_kCropping;
-    // new params after integrating MCS 2.0
-    // Set the number of audio effects; 0 for now.
-    pOutputParams->nbEffects = 0;
-    // Set the audio effect; null for now.
-    pOutputParams->pEffects = NULL;
-    // Set the audio effect; null for now.
-    pOutputParams->bDiscardExif = M4OSA_FALSE;
-    // Set the audio effect; null for now.
-    pOutputParams->bAdjustOrientation = M4OSA_FALSE;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_setOutputParams()");
-    result = M4MCS_setOutputParams(mcsContext, pOutputParams);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                                        (M4NO_ERROR != result), result);
-    if (needToBeLoaded == false) {
-         free(pTemp3gpFilePath);
-         pTemp3gpFilePath = M4OSA_NULL;
-         M4MCS_abort(mcsContext);
-         free(pOutputParams);
-         pOutputParams = M4OSA_NULL;
-         free(pEncodingParams);
-         pEncodingParams = M4OSA_NULL;
-        return result;
-    }
-    // Set the video bitrate.
-    pEncodingParams->OutputVideoBitrate =
-    (M4VIDEOEDITING_Bitrate)M4VIDEOEDITING_kUndefinedBitrate;
-    // Set the audio bitrate.
-    pEncodingParams->OutputAudioBitrate
-        = (M4VIDEOEDITING_Bitrate)M4VIDEOEDITING_k128_KBPS;
-    // Set the end cut time in milliseconds.
-    pEncodingParams->BeginCutTime = 0;
-    // Set the end cut time in milliseconds.
-    pEncodingParams->EndCutTime = 0;
-    // Set the output file size in bytes.
-    pEncodingParams->OutputFileSize = 0;
-    // Set video time scale.
-    pEncodingParams->OutputVideoTimescale = 0;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                            "M4MCS_setEncodingParams()");
-    result = M4MCS_setEncodingParams(mcsContext, pEncodingParams);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-        (M4NO_ERROR != result), result);
-    if (needToBeLoaded == false) {
-         free(pTemp3gpFilePath);
-         pTemp3gpFilePath = M4OSA_NULL;
-         M4MCS_abort(mcsContext);
-         free(pOutputParams);
-         pOutputParams = M4OSA_NULL;
-         free(pEncodingParams);
-         pEncodingParams = M4OSA_NULL;
-         return result;
-    }
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                            "M4MCS_checkParamsAndStart()");
-    result = M4MCS_checkParamsAndStart(mcsContext);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-        (M4NO_ERROR != result), result);
-    if (needToBeLoaded == false) {
-         free(pTemp3gpFilePath);
-         pTemp3gpFilePath = M4OSA_NULL;
-         M4MCS_abort(mcsContext);
-         free(pOutputParams);
-         pOutputParams = M4OSA_NULL;
-         free(pEncodingParams);
-         pEncodingParams = M4OSA_NULL;
-        return result;
-    }
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_step()");
-
-    /*+ PROGRESS CB */
-    M4OSA_UInt8 curProgress = 0;
-    int         lastProgress = 0;
-
-    ALOGV("LVME_generateAudio Current progress is =%d", curProgress);
-    pEnv->CallVoidMethod(pContext->engine,
-            pContext->onProgressUpdateMethodId, 1/*task status*/,
-            curProgress/*progress*/);
-    do {
-        result = M4MCS_step(mcsContext, &curProgress);
-
-        if (result != M4NO_ERROR) {
-            ALOGV("LVME_generateAudio M4MCS_step returned 0x%x",result);
-
-            if (result == M4MCS_WAR_TRANSCODING_DONE) {
-                ALOGV("LVME_generateAudio MCS process ended");
-
-                // Send a progress notification.
-                curProgress = 100;
-                pEnv->CallVoidMethod(pContext->engine,
-                    pContext->onProgressUpdateMethodId, 1/*task status*/,
-                    curProgress);
-                ALOGV("LVME_generateAudio Current progress is =%d", curProgress);
-            }
-        } else {
-            // Send a progress notification if needed
-            if (curProgress != lastProgress) {
-                lastProgress = curProgress;
-                pEnv->CallVoidMethod(pContext->engine,
-                    pContext->onProgressUpdateMethodId, 0/*task status*/,
-                    curProgress/*progress*/);
-                ALOGV("LVME_generateAudio Current progress is =%d",curProgress);
-            }
-        }
-    } while (result == M4NO_ERROR);
-    /*- PROGRESS CB */
-
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-        (M4MCS_WAR_TRANSCODING_DONE != result), result);
-    if (needToBeLoaded == false) {
-         free(pTemp3gpFilePath);
-         pTemp3gpFilePath = M4OSA_NULL;
-         M4MCS_abort(mcsContext);
-         free(pOutputParams);
-         pOutputParams = M4OSA_NULL;
-         free(pEncodingParams);
-         pEncodingParams = M4OSA_NULL;
-        return result;
-    }
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4MCS_abort()");
-    result = M4MCS_abort(mcsContext);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-        (M4NO_ERROR != result), result);
-
-    //pContext->mAudioSettings->pFile = pOutputParams->pOutputPCMfile;
-    remove((const char *) pTemp3gpFilePath);
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_generateAudio() EXIT ");
-
-    if (pTemp3gpFilePath != M4OSA_NULL) {
-        free(pTemp3gpFilePath);
-    }
-    if (pOutputParams != M4OSA_NULL) {
-       free(pOutputParams);
-    }
-    if(pEncodingParams != M4OSA_NULL) {
-       free(pEncodingParams);
-    }
-    return result;
-}
-
-static int removeAlphafromRGB8888 (
-                        M4OSA_Char* pFramingFilePath,
-                        M4xVSS_FramingStruct *pFramingCtx)
-{
-    M4OSA_UInt32 frameSize_argb = (pFramingCtx->width * pFramingCtx->height * 4); // aRGB data
-    M4OSA_Context lImageFileFp  = M4OSA_NULL;
-    M4OSA_ERR err = M4NO_ERROR;
-
-    ALOGV("removeAlphafromRGB8888: width %d", pFramingCtx->width);
-
-    M4OSA_UInt8 *pTmpData = (M4OSA_UInt8*) M4OSA_32bitAlignedMalloc(frameSize_argb, M4VS, (M4OSA_Char*)"Image argb data");
-    if (pTmpData == M4OSA_NULL) {
-        ALOGE("Failed to allocate memory for Image clip");
-        return M4ERR_ALLOC;
-    }
-
-       /** Read the argb data from the passed file. */
-    M4OSA_ERR lerr = M4OSA_fileReadOpen(&lImageFileFp, (M4OSA_Void *) pFramingFilePath, M4OSA_kFileRead);
-
-
-    if ((lerr != M4NO_ERROR) || (lImageFileFp == M4OSA_NULL))
-    {
-        ALOGE("removeAlphafromRGB8888: Can not open the file ");
-        free(pTmpData);
-        return M4ERR_FILE_NOT_FOUND;
-    }
-
-
-    lerr = M4OSA_fileReadData(lImageFileFp, (M4OSA_MemAddr8)pTmpData, &frameSize_argb);
-    if (lerr != M4NO_ERROR)
-    {
-        ALOGE("removeAlphafromRGB8888: can not read the data ");
-        M4OSA_fileReadClose(lImageFileFp);
-        free(pTmpData);
-        return lerr;
-    }
-    M4OSA_fileReadClose(lImageFileFp);
-
-    M4OSA_UInt32 frameSize = (pFramingCtx->width * pFramingCtx->height * 3); //Size of RGB 888 data.
-
-    pFramingCtx->FramingRgb = (M4VIFI_ImagePlane*)M4OSA_32bitAlignedMalloc(
-             sizeof(M4VIFI_ImagePlane), M4VS, (M4OSA_Char*)"Image clip RGB888 data");
-    pFramingCtx->FramingRgb->pac_data = (M4VIFI_UInt8*)M4OSA_32bitAlignedMalloc(
-             frameSize, M4VS, (M4OSA_Char*)"Image clip RGB888 data");
-
-    if (pFramingCtx->FramingRgb == M4OSA_NULL)
-    {
-        ALOGE("Failed to allocate memory for Image clip");
-        free(pTmpData);
-        return M4ERR_ALLOC;
-    }
-
-    /** Remove the alpha channel */
-    for (size_t i = 0, j = 0; i < frameSize_argb; i++) {
-        if ((i % 4) == 0) continue;
-        pFramingCtx->FramingRgb->pac_data[j] = pTmpData[i];
-        j++;
-    }
-    free(pTmpData);
-    return M4NO_ERROR;
-}
-
-static void
-videoEditor_populateSettings(
-                JNIEnv*                 pEnv,
-                jobject                 thiz,
-                jobject                 settings,
-                jobject                 object,
-                jobject                 audioSettingObject)
-{
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "videoEditor_populateSettings()");
-
-    bool                needToBeLoaded  = true;
-    ManualEditContext*  pContext        = M4OSA_NULL;
-    M4OSA_ERR           result          = M4NO_ERROR;
-    jstring             strPath         = M4OSA_NULL;
-    jstring             strPCMPath      = M4OSA_NULL;
-    jobjectArray        propertiesClipsArray           = M4OSA_NULL;
-    jobject             properties      = M4OSA_NULL;
-    jint*               bitmapArray     =  M4OSA_NULL;
-    jobjectArray        effectSettingsArray = M4OSA_NULL;
-    jobject             effectSettings  = M4OSA_NULL;
-    jintArray           pixelArray      = M4OSA_NULL;
-    int width = 0;
-    int height = 0;
-    int nbOverlays = 0;
-    int i,j = 0;
-    int *pOverlayIndex = M4OSA_NULL;
-    M4OSA_Char* pTempChar = M4OSA_NULL;
-
-    // Validate the settings parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
-                                                (NULL == settings),
-                                                "settings is null");
-    // Get the context.
-    pContext =
-            (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                 (M4OSA_NULL == pContext->mPreviewController),
-                                 "not initialized");
-    jclass mPreviewClipPropClazz = pEnv->FindClass(PREVIEW_PROPERTIES_CLASS_NAME);
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                     (M4OSA_NULL == mPreviewClipPropClazz),
-                                     "not initialized");
-
-    jfieldID fid = pEnv->GetFieldID(mPreviewClipPropClazz,"clipProperties",
-            "[L"PROPERTIES_CLASS_NAME";"  );
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                     (M4OSA_NULL == fid),
-                                     "not initialized");
-
-    propertiesClipsArray = (jobjectArray)pEnv->GetObjectField(object, fid);
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                     (M4OSA_NULL == propertiesClipsArray),
-                                     "not initialized");
-
-    jclass engineClass = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME);
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                     (M4OSA_NULL == engineClass),
-                                     "not initialized");
-
-    pContext->onPreviewProgressUpdateMethodId = pEnv->GetMethodID(engineClass,
-            "onPreviewProgressUpdate",     "(IZZLjava/lang/String;II)V");
-    // Check if the context is valid (required because the context is dereferenced).
-    if (needToBeLoaded) {
-        // Make sure that we are in a correct state.
-        videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                             (pContext->state != ManualEditState_INITIALIZED),
-                             "settings already loaded");
-        if (needToBeLoaded) {
-            // Retrieve the edit settings.
-            if (pContext->pEditSettings != M4OSA_NULL) {
-                videoEditClasses_freeEditSettings(&pContext->pEditSettings);
-                pContext->pEditSettings = M4OSA_NULL;
-            }
-            videoEditClasses_getEditSettings(&needToBeLoaded, pEnv,
-                settings, &pContext->pEditSettings,false);
-        }
-    }
-
-    if (needToBeLoaded == false) {
-        j = 0;
-        while (j < pContext->pEditSettings->nbEffects)
-        {
-            if (pContext->pEditSettings->Effects[j].xVSS.pFramingFilePath != M4OSA_NULL) {
-                if (pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer != M4OSA_NULL) {
-                    free(pContext->pEditSettings->\
-                    Effects[j].xVSS.pFramingBuffer);
-                    pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer = M4OSA_NULL;
-                }
-            }
-          j++;
-        }
-        return;
-    }
-
-    M4OSA_TRACE1_0("videoEditorC_getEditSettings done");
-
-    pContext->previewFrameEditInfoId = pEnv->GetMethodID(engineClass,
-        "previewFrameEditInfo", "(Ljava/lang/String;I)V");
-
-    if ( pContext->pEditSettings != NULL )
-    {
-        // Check if the edit settings could be retrieved.
-        jclass mEditClazz = pEnv->FindClass(EDIT_SETTINGS_CLASS_NAME);
-        if(mEditClazz == M4OSA_NULL)
-        {
-            M4OSA_TRACE1_0("cannot find object field for mEditClazz");
-            goto videoEditor_populateSettings_cleanup;
-        }
-        jclass mEffectsClazz = pEnv->FindClass(EFFECT_SETTINGS_CLASS_NAME);
-        if(mEffectsClazz == M4OSA_NULL)
-        {
-            M4OSA_TRACE1_0("cannot find object field for mEffectsClazz");
-            goto videoEditor_populateSettings_cleanup;
-        }
-        fid = pEnv->GetFieldID(mEditClazz,"effectSettingsArray", "[L"EFFECT_SETTINGS_CLASS_NAME";"  );
-        if(fid == M4OSA_NULL)
-        {
-            M4OSA_TRACE1_0("cannot find field for effectSettingsArray Array");
-            goto videoEditor_populateSettings_cleanup;
-        }
-        effectSettingsArray = (jobjectArray)pEnv->GetObjectField(settings, fid);
-        if(effectSettingsArray == M4OSA_NULL)
-        {
-            M4OSA_TRACE1_0("cannot find object field for effectSettingsArray");
-            goto videoEditor_populateSettings_cleanup;
-        }
-
-        //int overlayIndex[pContext->pEditSettings->nbEffects];
-        if (pContext->pEditSettings->nbEffects > 0)
-        {
-            pOverlayIndex
-            = (int*) M4OSA_32bitAlignedMalloc(pContext->pEditSettings->nbEffects * sizeof(int), 0,
-                (M4OSA_Char*)"pOverlayIndex");
-            if (pOverlayIndex == M4OSA_NULL) {
-                videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                    M4OSA_TRUE, M4ERR_ALLOC);
-                goto videoEditor_populateSettings_cleanup;
-            }
-        }
-
-        i = 0;
-        j = 0;
-        M4OSA_TRACE1_1("no of effects = %d",pContext->pEditSettings->nbEffects);
-        while (j < pContext->pEditSettings->nbEffects)
-        {
-            if (pContext->pEditSettings->Effects[j].xVSS.pFramingFilePath != M4OSA_NULL)
-            {
-                pOverlayIndex[nbOverlays] = j;
-
-                M4xVSS_FramingStruct *aFramingCtx = M4OSA_NULL;
-                aFramingCtx
-                = (M4xVSS_FramingStruct*)M4OSA_32bitAlignedMalloc(sizeof(M4xVSS_FramingStruct), M4VS,
-                  (M4OSA_Char*)"M4xVSS_internalDecodeGIF: Context of the framing effect");
-                if (aFramingCtx == M4OSA_NULL)
-                {
-                    M4OSA_TRACE1_0("Allocation error in videoEditor_populateSettings");
-                    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                        M4OSA_TRUE, M4ERR_ALLOC);
-                    goto videoEditor_populateSettings_cleanup;
-                }
-
-                aFramingCtx->pCurrent = M4OSA_NULL; /* Only used by the first element of the chain */
-                aFramingCtx->previousClipTime = -1;
-                aFramingCtx->FramingYuv = M4OSA_NULL;
-                aFramingCtx->FramingRgb = M4OSA_NULL;
-                aFramingCtx->topleft_x
-                    = pContext->pEditSettings->Effects[j].xVSS.topleft_x;
-                aFramingCtx->topleft_y
-                    = pContext->pEditSettings->Effects[j].xVSS.topleft_y;
-
-
-                 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF u_width %d",
-                                        pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width);
-                 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF u_height() %d",
-                                        pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height);
-                 VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "OF rgbType() %d",
-                                        pContext->pEditSettings->Effects[j].xVSS.rgbType);
-
-                 aFramingCtx->width = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width;
-                 aFramingCtx->height = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height;
-
-                result = M4xVSS_internalConvertARGB888toYUV420_FrammingEffect(pContext->engineContext,
-                    &(pContext->pEditSettings->Effects[j]),aFramingCtx,
-                pContext->pEditSettings->Effects[j].xVSS.framingScaledSize);
-                videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                                            (M4NO_ERROR != result), result);
-                if (needToBeLoaded == false) {
-                    M4OSA_TRACE1_1("M4xVSS_internalConvertARGB888toYUV420_FrammingEffect returned 0x%x", result);
-                    if (aFramingCtx != M4OSA_NULL) {
-                        free(aFramingCtx);
-                        aFramingCtx = M4OSA_NULL;
-                    }
-                    goto videoEditor_populateSettings_cleanup;
-                }
-
-                //framing buffers are resized to fit the output video resolution.
-                pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width =
-                    aFramingCtx->FramingRgb->u_width;
-                pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height =
-                    aFramingCtx->FramingRgb->u_height;
-
-                VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "A framing Context aFramingCtx->width = %d",
-                    aFramingCtx->FramingRgb->u_width);
-
-                VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "A framing Context aFramingCtx->height = %d",
-                    aFramingCtx->FramingRgb->u_height);
-
-
-                width = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_width;
-                height = pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_height;
-
-                //RGB 565
-                pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_stride = width * 2;
-
-                //for RGB565
-                pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->u_topleft = 0;
-                pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->pac_data =
-                            (M4VIFI_UInt8 *)M4OSA_32bitAlignedMalloc(width*height*2,
-                            0x00,(M4OSA_Char *)"pac_data buffer");
-
-                if (pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer->pac_data == M4OSA_NULL) {
-                    M4OSA_TRACE1_0("Failed to allocate memory for framing buffer");
-                    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                                            M4OSA_TRUE, M4ERR_ALLOC);
-                    goto videoEditor_populateSettings_cleanup;
-                }
-
-                memcpy((void *)&pContext->pEditSettings->\
-                    Effects[j].xVSS.pFramingBuffer->\
-                    pac_data[0],(void *)&aFramingCtx->FramingRgb->pac_data[0],(width*height*2));
-
-                //As of now rgb type is 565
-                pContext->pEditSettings->Effects[j].xVSS.rgbType =
-                    (M4VSS3GPP_RGBType) M4VSS3GPP_kRGB565;
-
-                if (aFramingCtx->FramingYuv != M4OSA_NULL )
-                {
-                    if (aFramingCtx->FramingYuv[0].pac_data != M4OSA_NULL) {
-                        free(aFramingCtx->FramingYuv[0].pac_data);
-                        aFramingCtx->FramingYuv[0].pac_data = M4OSA_NULL;
-                    }
-                    if (aFramingCtx->FramingYuv[1].pac_data != M4OSA_NULL) {
-                        free(aFramingCtx->FramingYuv[1].pac_data);
-                        aFramingCtx->FramingYuv[1].pac_data = M4OSA_NULL;
-                    }
-                    if (aFramingCtx->FramingYuv[2].pac_data != M4OSA_NULL) {
-                        free(aFramingCtx->FramingYuv[2].pac_data);
-                        aFramingCtx->FramingYuv[2].pac_data = M4OSA_NULL;
-                    }
-
-                    free(aFramingCtx->FramingYuv);
-                    aFramingCtx->FramingYuv = M4OSA_NULL;
-                }
-                if (aFramingCtx->FramingRgb->pac_data != M4OSA_NULL) {
-                    free(aFramingCtx->FramingRgb->pac_data);
-                    aFramingCtx->FramingRgb->pac_data = M4OSA_NULL;
-                }
-                if (aFramingCtx->FramingRgb != M4OSA_NULL) {
-                    free(aFramingCtx->FramingRgb);
-                    aFramingCtx->FramingRgb = M4OSA_NULL;
-                }
-                if (aFramingCtx != M4OSA_NULL) {
-                    free(aFramingCtx);
-                    aFramingCtx = M4OSA_NULL;
-                }
-                nbOverlays++;
-            }
-            j++;
-        }
-
-        // Check if the edit settings could be retrieved.
-        M4OSA_TRACE1_1("total clips are = %d",pContext->pEditSettings->uiClipNumber);
-        for (i = 0; i < pContext->pEditSettings->uiClipNumber; i++) {
-            M4OSA_TRACE1_1("clip no = %d",i);
-            properties = pEnv->GetObjectArrayElement(propertiesClipsArray, i);
-            videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                (M4OSA_NULL == properties),
-                "not initialized");
-            if (needToBeLoaded) {
-                getClipSetting(pEnv,properties, pContext->pEditSettings->pClipList[i]);
-                pEnv->DeleteLocalRef(properties);
-            } else {
-                pEnv->DeleteLocalRef(properties);
-                goto videoEditor_populateSettings_cleanup;
-            }
-        }
-
-        if (needToBeLoaded) {
-            // Log the edit settings.
-            VIDEOEDIT_LOG_EDIT_SETTINGS(pContext->pEditSettings);
-        }
-    }
-    /* free previous allocations , if any */
-    if (pContext->mAudioSettings != M4OSA_NULL) {
-        if (pContext->mAudioSettings->pFile != NULL) {
-            free(pContext->mAudioSettings->pFile);
-            pContext->mAudioSettings->pFile = M4OSA_NULL;
-        }
-        if (pContext->mAudioSettings->pPCMFilePath != NULL) {
-            free(pContext->mAudioSettings->pPCMFilePath);
-            pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL;
-        }
-    }
-
-    if (audioSettingObject != M4OSA_NULL) {
-        jclass audioSettingClazz = pEnv->FindClass(AUDIO_SETTINGS_CLASS_NAME);
-        videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                         (M4OSA_NULL == audioSettingClazz),
-                                         "not initialized");
-
-        videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                     (M4OSA_NULL == pContext->mAudioSettings),
-                                     "not initialized");
-
-        if (needToBeLoaded == false) {
-            goto videoEditor_populateSettings_cleanup;
-        }
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"bRemoveOriginal","Z");
-        pContext->mAudioSettings->bRemoveOriginal =
-            pEnv->GetBooleanField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("bRemoveOriginal = %d",pContext->mAudioSettings->bRemoveOriginal);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"channels","I");
-        pContext->mAudioSettings->uiNbChannels = pEnv->GetIntField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("uiNbChannels = %d",pContext->mAudioSettings->uiNbChannels);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"Fs","I");
-        pContext->mAudioSettings->uiSamplingFrequency = pEnv->GetIntField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("uiSamplingFrequency = %d",pContext->mAudioSettings->uiSamplingFrequency);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"ExtendedFs","I");
-        pContext->mAudioSettings->uiExtendedSamplingFrequency =
-         pEnv->GetIntField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("uiExtendedSamplingFrequency = %d",
-        pContext->mAudioSettings->uiExtendedSamplingFrequency);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"startMs","J");
-        pContext->mAudioSettings->uiAddCts
-            = pEnv->GetLongField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("uiAddCts = %d",pContext->mAudioSettings->uiAddCts);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"volume","I");
-        pContext->mAudioSettings->uiAddVolume
-            = pEnv->GetIntField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("uiAddVolume = %d",pContext->mAudioSettings->uiAddVolume);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"loop","Z");
-        pContext->mAudioSettings->bLoop
-            = pEnv->GetBooleanField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("bLoop = %d",pContext->mAudioSettings->bLoop);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"beginCutTime","J");
-        pContext->mAudioSettings->beginCutMs
-            = pEnv->GetLongField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("begin cut time = %d",pContext->mAudioSettings->beginCutMs);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"endCutTime","J");
-        pContext->mAudioSettings->endCutMs
-            = pEnv->GetLongField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("end cut time = %d",pContext->mAudioSettings->endCutMs);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"fileType","I");
-        pContext->mAudioSettings->fileType
-            = pEnv->GetIntField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("fileType = %d",pContext->mAudioSettings->fileType);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"pFile","Ljava/lang/String;");
-        strPath = (jstring)pEnv->GetObjectField(audioSettingObject,fid);
-        pTempChar = (M4OSA_Char*)pEnv->GetStringUTFChars(strPath, M4OSA_NULL);
-        if (pTempChar != NULL) {
-            pContext->mAudioSettings->pFile = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(
-                (M4OSA_UInt32)(strlen((const char*)pTempChar))+1 /* +1 for NULL termination */, 0,
-                (M4OSA_Char*)"strPath allocation " );
-            if (pContext->mAudioSettings->pFile != M4OSA_NULL) {
-                memcpy((void *)pContext->mAudioSettings->pFile ,
-                    (void *)pTempChar , strlen((const char*)pTempChar));
-                ((M4OSA_Int8 *)(pContext->mAudioSettings->pFile))[strlen((const char*)pTempChar)] = '\0';
-                pEnv->ReleaseStringUTFChars(strPath,(const char *)pTempChar);
-            } else {
-                pEnv->ReleaseStringUTFChars(strPath,(const char *)pTempChar);
-                VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                    "regenerateAudio() Malloc failed for pContext->mAudioSettings->pFile ");
-                videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                    M4OSA_TRUE, M4ERR_ALLOC);
-                goto videoEditor_populateSettings_cleanup;
-            }
-        }
-        M4OSA_TRACE1_1("file name = %s",pContext->mAudioSettings->pFile);
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "regenerateAudio() file name = %s",\
-        pContext->mAudioSettings->pFile);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"pcmFilePath","Ljava/lang/String;");
-        strPCMPath = (jstring)pEnv->GetObjectField(audioSettingObject,fid);
-        pTempChar = (M4OSA_Char*)pEnv->GetStringUTFChars(strPCMPath, M4OSA_NULL);
-        if (pTempChar != NULL) {
-            pContext->mAudioSettings->pPCMFilePath = (M4OSA_Char*) M4OSA_32bitAlignedMalloc(
-                (M4OSA_UInt32)(strlen((const char*)pTempChar))+1 /* +1 for NULL termination */, 0,
-                (M4OSA_Char*)"strPCMPath allocation " );
-            if (pContext->mAudioSettings->pPCMFilePath != M4OSA_NULL) {
-                memcpy((void *)pContext->mAudioSettings->pPCMFilePath ,
-                    (void *)pTempChar , strlen((const char*)pTempChar));
-                ((M4OSA_Int8 *)(pContext->mAudioSettings->pPCMFilePath))[strlen((const char*)pTempChar)] = '\0';
-                pEnv->ReleaseStringUTFChars(strPCMPath,(const char *)pTempChar);
-            } else {
-                pEnv->ReleaseStringUTFChars(strPCMPath,(const char *)pTempChar);
-                VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-                    "regenerateAudio() Malloc failed for pContext->mAudioSettings->pPCMFilePath ");
-                videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                    M4OSA_TRUE, M4ERR_ALLOC);
-                goto videoEditor_populateSettings_cleanup;
-            }
-        }
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "pPCMFilePath -- %s ",\
-        pContext->mAudioSettings->pPCMFilePath);
-
-        fid = pEnv->GetFieldID(engineClass,"mRegenerateAudio","Z");
-        bool regenerateAudio = pEnv->GetBooleanField(thiz,fid);
-
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEOEDITOR", "regenerateAudio -- %d ",\
-        regenerateAudio);
-
-        if (regenerateAudio) {
-            M4OSA_TRACE1_0("Calling Generate Audio now");
-            result = videoEditor_generateAudio(pEnv,
-                        pContext,
-                        (M4OSA_Char*)pContext->mAudioSettings->pFile,
-                        (M4OSA_Char*)pContext->mAudioSettings->pPCMFilePath);
-
-            videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                (M4NO_ERROR != result), result);
-            if (needToBeLoaded == false) {
-                goto videoEditor_populateSettings_cleanup;
-            }
-
-            regenerateAudio = false;
-            pEnv->SetBooleanField(thiz,fid,regenerateAudio);
-        }
-
-        /* Audio mix and duck */
-        fid = pEnv->GetFieldID(audioSettingClazz,"ducking_threshold","I");
-        pContext->mAudioSettings->uiInDucking_threshold
-            = pEnv->GetIntField(audioSettingObject,fid);
-
-        M4OSA_TRACE1_1("ducking threshold = %d",
-            pContext->mAudioSettings->uiInDucking_threshold);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"ducking_lowVolume","I");
-        pContext->mAudioSettings->uiInDucking_lowVolume
-            = pEnv->GetIntField(audioSettingObject,fid);
-
-        M4OSA_TRACE1_1("ducking lowVolume = %d",
-            pContext->mAudioSettings->uiInDucking_lowVolume);
-
-        fid = pEnv->GetFieldID(audioSettingClazz,"bInDucking_enable","Z");
-        pContext->mAudioSettings->bInDucking_enable
-            = pEnv->GetBooleanField(audioSettingObject,fid);
-        M4OSA_TRACE1_1("ducking lowVolume = %d",
-            pContext->mAudioSettings->bInDucking_enable);
-
-    } else {
-        if (pContext->mAudioSettings != M4OSA_NULL) {
-            pContext->mAudioSettings->pFile = M4OSA_NULL;
-            pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL;
-            pContext->mAudioSettings->bRemoveOriginal = 0;
-            pContext->mAudioSettings->uiNbChannels = 0;
-            pContext->mAudioSettings->uiSamplingFrequency = 0;
-            pContext->mAudioSettings->uiExtendedSamplingFrequency = 0;
-            pContext->mAudioSettings->uiAddCts = 0;
-            pContext->mAudioSettings->uiAddVolume = 0;
-            pContext->mAudioSettings->beginCutMs = 0;
-            pContext->mAudioSettings->endCutMs = 0;
-            pContext->mAudioSettings->fileType = 0;
-            pContext->mAudioSettings->bLoop = 0;
-            pContext->mAudioSettings->uiInDucking_lowVolume  = 0;
-            pContext->mAudioSettings->bInDucking_enable  = 0;
-            pContext->mAudioSettings->uiBTChannelCount  = 0;
-            pContext->mAudioSettings->uiInDucking_threshold = 0;
-
-            fid = pEnv->GetFieldID(engineClass,"mRegenerateAudio","Z");
-            bool regenerateAudio = pEnv->GetBooleanField(thiz,fid);
-            if (!regenerateAudio) {
-                regenerateAudio = true;
-                pEnv->SetBooleanField(thiz,fid,regenerateAudio);
-            }
-        }
-    }
-
-    if (pContext->pEditSettings != NULL)
-    {
-        result = pContext->mPreviewController->loadEditSettings(pContext->pEditSettings,
-            pContext->mAudioSettings);
-        videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-                                            (M4NO_ERROR != result), result);
-
-        if (needToBeLoaded) {
-            pContext->mPreviewController->setJniCallback((void*)pContext,
-            (jni_progress_callback_fct)jniPreviewProgressCallback);
-        }
-    }
-
-videoEditor_populateSettings_cleanup:
-        j = 0;
-        while (j < nbOverlays)
-        {
-            if (pContext->pEditSettings->Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data != \
-                M4OSA_NULL) {
-                free(pContext->pEditSettings->\
-                Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data);
-                pContext->pEditSettings->\
-                Effects[pOverlayIndex[j]].xVSS.pFramingBuffer->pac_data = M4OSA_NULL;
-            }
-            j++;
-        }
-
-        j = 0;
-        while (j < pContext->pEditSettings->nbEffects)
-        {
-            if (pContext->pEditSettings->Effects[j].xVSS.pFramingFilePath != M4OSA_NULL) {
-                if (pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer != M4OSA_NULL) {
-                    free(pContext->pEditSettings->\
-                    Effects[j].xVSS.pFramingBuffer);
-                    pContext->pEditSettings->Effects[j].xVSS.pFramingBuffer = M4OSA_NULL;
-                }
-            }
-          j++;
-        }
-
-    if (pOverlayIndex != M4OSA_NULL)
-    {
-        free(pOverlayIndex);
-        pOverlayIndex = M4OSA_NULL;
-    }
-    return;
-}
-
-static void
-videoEditor_startPreview(
-                JNIEnv*                 pEnv,
-                jobject                 thiz,
-                jobject                 mSurface,
-                jlong                   fromMs,
-                jlong                   toMs,
-                jint                    callbackInterval,
-                jboolean                loop)
-{
-    bool needToBeLoaded = true;
-    M4OSA_ERR result = M4NO_ERROR;
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_startPreview()");
-
-    ManualEditContext* pContext = M4OSA_NULL;
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                     (M4OSA_NULL == pContext->mAudioSettings),
-                                     "not initialized");
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                 (M4OSA_NULL == pContext->mPreviewController),
-                                 "not initialized");
-
-    // Validate the mSurface parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
-                                                (NULL == mSurface),
-                                                "mSurface is null");
-
-    sp<Surface> previewSurface = android_view_Surface_getSurface(pEnv, mSurface);
-
-    // Validate the mSurface's mNativeSurface field
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                                (NULL == previewSurface.get()),
-                                                "mNativeSurface is null");
-
-    result =  pContext->mPreviewController->setSurface(previewSurface);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv,
-        (M4NO_ERROR != result), result);
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "fromMs=%ld, toMs=%ld",
-        (M4OSA_UInt32)fromMs, (M4OSA_Int32)toMs);
-
-    result = pContext->mPreviewController->startPreview((M4OSA_UInt32)fromMs,
-                                                (M4OSA_Int32)toMs,
-                                                (M4OSA_UInt16)callbackInterval,
-                                                (M4OSA_Bool)loop);
-    videoEditJava_checkAndThrowRuntimeException(&needToBeLoaded, pEnv, (M4NO_ERROR != result), result);
-}
-
-
-static jobject
-videoEditor_getProperties(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jstring                             file)
-{
-    jobject object = M4OSA_NULL;
-    jclass clazz = pEnv->FindClass(PROPERTIES_CLASS_NAME);
-    jfieldID fid;
-    bool needToBeLoaded = true;
-    ManualEditContext* pContext = M4OSA_NULL;
-    M4OSA_ERR          result   = M4NO_ERROR;
-    int profile = 0;
-    int level = 0;
-    int videoFormat = 0;
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
-
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == clazz),
-                                             "not initialized");
-
-    object = videoEditProp_getProperties(pEnv,thiz,file);
-
-    if (object != M4OSA_NULL) {
-        fid = pEnv->GetFieldID(clazz,"profile","I");
-        profile = pEnv->GetIntField(object,fid);
-        fid = pEnv->GetFieldID(clazz,"level","I");
-        level = pEnv->GetIntField(object,fid);
-        fid = pEnv->GetFieldID(clazz,"videoFormat","I");
-        videoFormat = pEnv->GetIntField(object,fid);
-
-        result = checkClipVideoProfileAndLevel(pContext->decoders, videoFormat, profile, level);
-
-        fid = pEnv->GetFieldID(clazz,"profileSupported","Z");
-        if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_PROFILE == result) {
-            pEnv->SetBooleanField(object,fid,false);
-        }
-
-        fid = pEnv->GetFieldID(clazz,"levelSupported","Z");
-        if (M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_LEVEL == result) {
-            pEnv->SetBooleanField(object,fid,false);
-        }
-    }
-    return object;
-
-}
-static jint videoEditor_getPixels(
-                    JNIEnv*                     env,
-                    jobject                     thiz,
-                    jstring                     path,
-                    jintArray                   pixelArray,
-                    M4OSA_UInt32                width,
-                    M4OSA_UInt32                height,
-                    M4OSA_UInt32                timeMS)
-{
-
-    M4OSA_ERR       err = M4NO_ERROR;
-    M4OSA_Context   mContext = M4OSA_NULL;
-    jint*           m_dst32 = M4OSA_NULL;
-
-    const char *pString = env->GetStringUTFChars(path, NULL);
-    if (pString == M4OSA_NULL) {
-        if (env != NULL) {
-            jniThrowException(env, "java/lang/RuntimeException", "Input string null");
-        }
-        return M4ERR_ALLOC;
-    }
-
-    err = ThumbnailOpen(&mContext,(const M4OSA_Char*)pString, M4OSA_FALSE);
-    if (err != M4NO_ERROR || mContext == M4OSA_NULL) {
-        if (pString != NULL) {
-            env->ReleaseStringUTFChars(path, pString);
-        }
-        if (env != NULL) {
-            jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed");
-        }
-    }
-
-    m_dst32 = env->GetIntArrayElements(pixelArray, NULL);
-
-    err = ThumbnailGetPixels32(mContext, (M4OSA_Int32 *)m_dst32, width,height,&timeMS,0);
-    if (err != M4NO_ERROR ) {
-        if (env != NULL) {
-            jniThrowException(env, "java/lang/RuntimeException",\
-                "ThumbnailGetPixels32 failed");
-        }
-    }
-    env->ReleaseIntArrayElements(pixelArray, m_dst32, 0);
-
-    ThumbnailClose(mContext);
-    if (pString != NULL) {
-        env->ReleaseStringUTFChars(path, pString);
-    }
-
-    return (jint)timeMS;
-}
-
-static jint videoEditor_getPixelsList(
-                JNIEnv*                 env,
-                jobject                 thiz,
-                jstring                 path,
-                jintArray               pixelArray,
-                M4OSA_UInt32            width,
-                M4OSA_UInt32            height,
-                M4OSA_UInt32            noOfThumbnails,
-                jlong                   startTime,
-                jlong                   endTime,
-                jintArray               indexArray,
-                jobject                 callback)
-{
-
-    M4OSA_ERR           err = M4NO_ERROR;
-    M4OSA_Context       mContext = M4OSA_NULL;
-
-    const char *pString = env->GetStringUTFChars(path, NULL);
-    if (pString == M4OSA_NULL) {
-        jniThrowException(env, "java/lang/RuntimeException", "Input string null");
-        return (jint)M4ERR_ALLOC;
-    }
-
-    err = ThumbnailOpen(&mContext,(const M4OSA_Char*)pString, M4OSA_FALSE);
-    if (err != M4NO_ERROR || mContext == M4OSA_NULL) {
-        jniThrowException(env, "java/lang/RuntimeException", "ThumbnailOpen failed");
-        if (pString != NULL) {
-            env->ReleaseStringUTFChars(path, pString);
-        }
-        return (jint)err;
-    }
-
-    jlong duration = (endTime - startTime);
-    M4OSA_UInt32 tolerance = duration / (2 * noOfThumbnails);
-    jint* m_dst32 = env->GetIntArrayElements(pixelArray, NULL);
-    jint* indices = env->GetIntArrayElements(indexArray, NULL);
-    jsize len = env->GetArrayLength(indexArray);
-
-    jclass cls = env->GetObjectClass(callback);
-    jmethodID mid = env->GetMethodID(cls, "onThumbnail", "(I)V");
-
-    for (int i = 0; i < len; i++) {
-        int k = indices[i];
-        M4OSA_UInt32 timeMS = startTime;
-        timeMS += (2 * k + 1) * duration / (2 * noOfThumbnails);
-        err = ThumbnailGetPixels32(mContext, ((M4OSA_Int32 *)m_dst32),
-            width, height, &timeMS, tolerance);
-        if (err != M4NO_ERROR) {
-            break;
-        }
-        env->CallVoidMethod(callback, mid, (jint)k);
-        if (env->ExceptionCheck()) {
-            err = M4ERR_ALLOC;
-            break;
-        }
-    }
-
-    env->ReleaseIntArrayElements(pixelArray, m_dst32, 0);
-    env->ReleaseIntArrayElements(indexArray, indices, 0);
-
-    ThumbnailClose(mContext);
-    if (pString != NULL) {
-        env->ReleaseStringUTFChars(path, pString);
-    }
-
-    if (err != M4NO_ERROR && !env->ExceptionCheck()) {
-        jniThrowException(env, "java/lang/RuntimeException",\
-                "ThumbnailGetPixels32 failed");
-    }
-
-    return (jint)err;
-}
-
-static M4OSA_ERR
-videoEditor_toUTF8Fct(
-                M4OSA_Void*                         pBufferIn,
-                M4OSA_UInt8*                        pBufferOut,
-                M4OSA_UInt32*                       bufferOutSize)
-{
-    M4OSA_ERR    result = M4NO_ERROR;
-    M4OSA_UInt32 length = 0;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_toUTF8Fct()");
-
-    // Determine the length of the input buffer.
-    if (M4OSA_NULL != pBufferIn)
-    {
-        length = strlen((const char *)pBufferIn);
-    }
-
-    // Check if the output buffer is large enough to hold the input buffer.
-    if ((*bufferOutSize) > length)
-    {
-        // Check if the input buffer is not M4OSA_NULL.
-        if (M4OSA_NULL != pBufferIn)
-        {
-            // Copy the temp path, ignore the result.
-            M4OSA_chrNCopy((M4OSA_Char *)pBufferOut, (M4OSA_Char *)pBufferIn, length);
-        }
-        else
-        {
-            // Set the output buffer to an empty string.
-            (*(M4OSA_Char *)pBufferOut) = 0;
-        }
-    }
-    else
-    {
-        // The buffer is too small.
-        result = M4xVSSWAR_BUFFER_OUT_TOO_SMALL;
-    }
-
-    // Return the buffer output size.
-    (*bufferOutSize) = length + 1;
-
-    // Return the result.
-    return(result);
-}
-
-static M4OSA_ERR
-videoEditor_fromUTF8Fct(
-                M4OSA_UInt8*                        pBufferIn,
-                M4OSA_Void*                         pBufferOut,
-                M4OSA_UInt32*                       bufferOutSize)
-{
-    M4OSA_ERR    result = M4NO_ERROR;
-    M4OSA_UInt32 length = 0;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_fromUTF8Fct()");
-
-    // Determine the length of the input buffer.
-    if (M4OSA_NULL != pBufferIn)
-    {
-        length = strlen((const char *)pBufferIn);
-    }
-
-    // Check if the output buffer is large enough to hold the input buffer.
-    if ((*bufferOutSize) > length)
-    {
-        // Check if the input buffer is not M4OSA_NULL.
-        if (M4OSA_NULL != pBufferIn)
-        {
-            // Copy the temp path, ignore the result.
-            M4OSA_chrNCopy((M4OSA_Char *)pBufferOut, (M4OSA_Char *)pBufferIn, length);
-        }
-        else
-        {
-            // Set the output buffer to an empty string.
-            (*(M4OSA_Char *)pBufferOut) = 0;
-        }
-    }
-    else
-    {
-        // The buffer is too small.
-        result = M4xVSSWAR_BUFFER_OUT_TOO_SMALL;
-    }
-
-    // Return the buffer output size.
-    (*bufferOutSize) = length + 1;
-
-    // Return the result.
-    return(result);
-}
-
-static M4OSA_ERR
-videoEditor_getTextRgbBufferFct(
-                M4OSA_Void*                         pRenderingData,
-                M4OSA_Void*                         pTextBuffer,
-                M4OSA_UInt32                        textBufferSize,
-                M4VIFI_ImagePlane**                 pOutputPlane)
-{
-    M4OSA_ERR result = M4NO_ERROR;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getTextRgbBufferFct()");
-
-    // Return the result.
-    return(result);
-}
-
-static void
-videoEditor_callOnProgressUpdate(
-                ManualEditContext*                  pContext,
-                int                                 task,
-                int                                 progress)
-{
-    JNIEnv* pEnv = NULL;
-
-
-    // Attach the current thread.
-    pContext->pVM->AttachCurrentThread(&pEnv, NULL);
-
-
-    // Call the on completion callback.
-    pEnv->CallVoidMethod(pContext->engine, pContext->onProgressUpdateMethodId,
-     videoEditJava_getEngineCToJava(task), progress);
-
-
-    // Detach the current thread.
-    pContext->pVM->DetachCurrentThread();
-}
-
-static void
-videoEditor_freeContext(
-                JNIEnv*                             pEnv,
-                ManualEditContext**                 ppContext)
-{
-    ManualEditContext* pContext = M4OSA_NULL;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_freeContext");
-
-    // Set the context pointer.
-    pContext = (*ppContext);
-
-    // Check if the context was set.
-    if (M4OSA_NULL != pContext)
-    {
-        // Check if a global reference to the engine object was set.
-        if (NULL != pContext->engine)
-        {
-            // Free the global reference.
-            pEnv->DeleteGlobalRef(pContext->engine);
-            pContext->engine = NULL;
-        }
-
-        // Check if the temp path was set.
-        if (M4OSA_NULL != pContext->initParams.pTempPath)
-        {
-            // Free the memory allocated for the temp path.
-            videoEditOsal_free(pContext->initParams.pTempPath);
-            pContext->initParams.pTempPath = M4OSA_NULL;
-        }
-
-        // Check if the file writer was set.
-        if (M4OSA_NULL != pContext->initParams.pFileWritePtr)
-        {
-            // Free the memory allocated for the file writer.
-            videoEditOsal_free(pContext->initParams.pFileWritePtr);
-            pContext->initParams.pFileWritePtr = M4OSA_NULL;
-        }
-
-        // Check if the file reader was set.
-        if (M4OSA_NULL != pContext->initParams.pFileReadPtr)
-        {
-            // Free the memory allocated for the file reader.
-            videoEditOsal_free(pContext->initParams.pFileReadPtr);
-            pContext->initParams.pFileReadPtr = M4OSA_NULL;
-        }
-
-        // Free the memory allocated for the context.
-        videoEditOsal_free(pContext);
-        pContext = M4OSA_NULL;
-
-        // Reset the context pointer.
-        (*ppContext) = M4OSA_NULL;
-    }
-}
-
-static jobject
-videoEditor_getVersion(
-                JNIEnv*                             pEnv,
-                jobject                             thiz)
-{
-    bool           isSuccessful          = true;
-    jobject        version         = NULL;
-    M4_VersionInfo versionInfo     = {0, 0, 0, 0};
-    M4OSA_ERR      result          = M4NO_ERROR;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getVersion()");
-
-    versionInfo.m_structSize = sizeof(versionInfo);
-    versionInfo.m_major = VIDEOEDITOR_VERSION_MAJOR;
-    versionInfo.m_minor = VIDEOEDITOR_VERSION_MINOR;
-    versionInfo.m_revision = VIDEOEDITOR_VERSION_REVISION;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_getVersion() major %d,\
-     minor %d, revision %d", versionInfo.m_major, versionInfo.m_minor, versionInfo.m_revision);
-
-    // Create a version object.
-    videoEditClasses_createVersion(&isSuccessful, pEnv, &versionInfo, &version);
-
-    // Return the version object.
-    return(version);
-}
-
-static void
-videoEditor_init(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jstring                             tempPath,
-                jstring                             libraryPath)
-{
-    bool                  initialized            = true;
-    ManualEditContext*    pContext               = M4OSA_NULL;
-    VideoEditJava_EngineMethodIds methodIds              = {NULL};
-    M4OSA_Char*           pLibraryPath           = M4OSA_NULL;
-    M4OSA_Char*           pTextRendererPath      = M4OSA_NULL;
-    M4OSA_UInt32          textRendererPathLength = 0;
-    M4OSA_ERR             result                 = M4NO_ERROR;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_init()");
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&initialized, pEnv, thiz);
-
-    // Get the engine method ids.
-    videoEditJava_getEngineMethodIds(&initialized, pEnv, &methodIds);
-
-    // Validate the tempPath parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&initialized, pEnv,
-                                                (NULL == tempPath),
-                                                "tempPath is null");
-
-    // Make sure that the context was not set already.
-    videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv,
-                                             (M4OSA_NULL != pContext),
-                                             "already initialized");
-
-    // Check if the initialization succeeded (required because of dereferencing of psContext,
-    // and freeing when initialization fails).
-    if (initialized)
-    {
-        // Allocate a new context.
-        pContext = new ManualEditContext;
-
-        // Check if the initialization succeeded (required because of dereferencing of psContext).
-        //if (initialized)
-        if (pContext != NULL)
-        {
-            // Set the state to not initialized.
-            pContext->state = ManualEditState_NOT_INITIALIZED;
-
-            // Allocate a file read pointer structure.
-            pContext->initParams.pFileReadPtr =
-             (M4OSA_FileReadPointer*)videoEditOsal_alloc(&initialized, pEnv,
-              sizeof(M4OSA_FileReadPointer), "FileReadPointer");
-
-            // Allocate a file write pointer structure.
-            pContext->initParams.pFileWritePtr =
-             (M4OSA_FileWriterPointer*)videoEditOsal_alloc(&initialized, pEnv,
-              sizeof(M4OSA_FileWriterPointer), "FileWriterPointer");
-
-            // Get the temp path.
-            M4OSA_Char* tmpString =
-                (M4OSA_Char *)videoEditJava_getString(&initialized, pEnv, tempPath,
-                NULL, M4OSA_NULL);
-            M4OSA_UInt32 length = strlen((const char *)tmpString);
-            // Malloc additional 2 bytes for beginning and tail separator.
-            M4OSA_UInt32 pathLength = length + 2;
-
-            pContext->initParams.pTempPath = (M4OSA_Char *)
-                 M4OSA_32bitAlignedMalloc(pathLength, 0x0, (M4OSA_Char *)"tempPath");
-
-            //initialize the first char. so that strcat works.
-            M4OSA_Char *ptmpChar = (M4OSA_Char*)pContext->initParams.pTempPath;
-            ptmpChar[0] = 0x00;
-            strncat((char *)pContext->initParams.pTempPath, (const char *)tmpString,
-                length);
-            strncat((char *)pContext->initParams.pTempPath, (const char *)"/", (size_t)1);
-            free(tmpString);
-            tmpString = NULL;
-            pContext->mIsUpdateOverlay = false;
-            pContext->mOverlayFileName = NULL;
-            pContext->decoders = NULL;
-        }
-
-        // Check if the initialization succeeded
-        // (required because of dereferencing of pContext, pFileReadPtr and pFileWritePtr).
-        if (initialized)
-        {
-
-            // Initialize the OSAL file system function pointers.
-            videoEditOsal_getFilePointers(pContext->initParams.pFileReadPtr ,
-                                          pContext->initParams.pFileWritePtr);
-
-            // Set the UTF8 conversion functions.
-            pContext->initParams.pConvToUTF8Fct   = videoEditor_toUTF8Fct;
-            pContext->initParams.pConvFromUTF8Fct = videoEditor_fromUTF8Fct;
-
-            // Set the callback method ids.
-            pContext->onProgressUpdateMethodId = methodIds.onProgressUpdate;
-
-            // Set the virtual machine.
-            pEnv->GetJavaVM(&(pContext->pVM));
-
-            // Create a global reference to the engine object.
-            pContext->engine = pEnv->NewGlobalRef(thiz);
-
-            // Check if the global reference could be created.
-            videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv,
-             (NULL == pContext->engine), M4NO_ERROR);
-        }
-
-        // Check if the initialization succeeded (required because of dereferencing of pContext).
-        if (initialized)
-        {
-            // Log the API call.
-            VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "M4xVSS_Init()");
-
-            // Initialize the visual studio library.
-            result = M4xVSS_Init(&pContext->engineContext, &pContext->initParams);
-
-            // Log the result.
-            VIDEOEDIT_LOG_RESULT(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-             videoEditOsal_getResultString(result));
-
-            // Check if the library could be initialized.
-            videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv,
-             (M4NO_ERROR != result), result);
-
-            // Get platform video decoder capablities.
-            result = M4xVSS_getVideoDecoderCapabilities(&pContext->decoders);
-
-            videoEditJava_checkAndThrowRuntimeException(&initialized, pEnv,
-             (M4NO_ERROR != result), result);
-        }
-
-        if(initialized)
-        {
-            pContext->mPreviewController = new VideoEditorPreviewController();
-            videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv,
-                                 (M4OSA_NULL == pContext->mPreviewController),
-                                 "not initialized");
-            pContext->mAudioSettings =
-             (M4xVSS_AudioMixingSettings *)
-             M4OSA_32bitAlignedMalloc(sizeof(M4xVSS_AudioMixingSettings),0x0,
-             (M4OSA_Char *)"mAudioSettings");
-            videoEditJava_checkAndThrowIllegalStateException(&initialized, pEnv,
-                                     (M4OSA_NULL == pContext->mAudioSettings),
-                                     "not initialized");
-            pContext->mAudioSettings->pFile = M4OSA_NULL;
-            pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL;
-            pContext->mAudioSettings->bRemoveOriginal = 0;
-            pContext->mAudioSettings->uiNbChannels = 0;
-            pContext->mAudioSettings->uiSamplingFrequency = 0;
-            pContext->mAudioSettings->uiExtendedSamplingFrequency = 0;
-            pContext->mAudioSettings->uiAddCts = 0;
-            pContext->mAudioSettings->uiAddVolume = 0;
-            pContext->mAudioSettings->beginCutMs = 0;
-            pContext->mAudioSettings->endCutMs = 0;
-            pContext->mAudioSettings->fileType = 0;
-            pContext->mAudioSettings->bLoop = 0;
-            pContext->mAudioSettings->uiInDucking_lowVolume  = 0;
-            pContext->mAudioSettings->bInDucking_enable  = 0;
-            pContext->mAudioSettings->uiBTChannelCount  = 0;
-            pContext->mAudioSettings->uiInDucking_threshold = 0;
-        }
-        // Check if the library could be initialized.
-        if (initialized)
-        {
-            // Set the state to initialized.
-            pContext->state = ManualEditState_INITIALIZED;
-        }
-
-        // Set the context.
-        videoEditClasses_setContext(&initialized, pEnv, thiz, (void* )pContext);
-        pLibraryPath = M4OSA_NULL;
-
-        pContext->pEditSettings = M4OSA_NULL;
-        // Cleanup if anything went wrong during initialization.
-        if (!initialized)
-        {
-            // Free the context.
-            videoEditor_freeContext(pEnv, &pContext);
-        }
-    }
-}
-
-/*+ PROGRESS CB */
-static
-M4OSA_ERR videoEditor_processClip(
-                            JNIEnv*  pEnv,
-                            jobject  thiz,
-                            int      unuseditemID) {
-
-    bool               loaded           = true;
-    ManualEditContext* pContext         = NULL;
-    M4OSA_UInt8        progress         = 0;
-    M4OSA_UInt8        progressBase     = 0;
-    M4OSA_UInt8        lastProgress     = 0;
-    M4OSA_ERR          result           = M4NO_ERROR;
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&loaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    // We start in Analyzing state
-    pContext->state = ManualEditState_INITIALIZED;
-    M4OSA_ERR          completionResult = M4VSS3GPP_WAR_ANALYZING_DONE;
-    ManualEditState    completionState  = ManualEditState_OPENED;
-    ManualEditState    errorState       = ManualEditState_ANALYZING_ERROR;
-
-    // While analyzing progress goes from 0 to 10 (except Kenburn clip
-    // generation, which goes from 0 to 50)
-    progressBase     = 0;
-
-    // Set the text rendering function.
-    if (M4OSA_NULL != pContext->pTextRendererFunction)
-    {
-        // Use the text renderer function in the library.
-        pContext->pEditSettings->xVSS.pTextRenderingFct = pContext->pTextRendererFunction;
-    }
-    else
-    {
-        // Use the internal text renderer function.
-        pContext->pEditSettings->xVSS.pTextRenderingFct = videoEditor_getTextRgbBufferFct;
-    }
-
-    // Send the command.
-    ALOGV("videoEditor_processClip ITEM %d Calling M4xVSS_SendCommand()", unuseditemID);
-    result = M4xVSS_SendCommand(pContext->engineContext, pContext->pEditSettings);
-    ALOGV("videoEditor_processClip ITEM %d M4xVSS_SendCommand() returned 0x%x",
-        unuseditemID, (unsigned int) result);
-
-    // Remove warnings indications (we only care about errors here)
-    if ((result == M4VSS3GPP_WAR_TRANSCODING_NECESSARY)
-        || (result == M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED)) {
-        result = M4NO_ERROR;
-    }
-
-    // Send the first progress indication (=0)
-    ALOGV("VERY FIRST PROGRESS videoEditor_processClip ITEM %d Progress indication %d",
-        unuseditemID, progress);
-    pEnv->CallVoidMethod(pContext->engine, pContext->onProgressUpdateMethodId,
-        unuseditemID, progress);
-
-    // Check if a task is being performed.
-    // ??? ADD STOPPING MECHANISM
-    ALOGV("videoEditor_processClip Entering processing loop");
-    M4OSA_UInt8 prevReportedProgress = 0;
-    while((result == M4NO_ERROR)
-        &&(pContext->state!=ManualEditState_SAVED)
-        &&(pContext->state!=ManualEditState_STOPPING)) {
-
-            // Perform the next processing step.
-            //ALOGV("LVME_processClip Entering M4xVSS_Step()");
-            result = M4xVSS_Step(pContext->engineContext, &progress);
-
-            if (progress != prevReportedProgress) {
-                prevReportedProgress = progress;
-                // Log the 1 % .. 100 % progress after processing.
-                if (M4OSA_TRUE ==
-                    pContext->pEditSettings->pClipList[0]->xVSS.isPanZoom) {
-                    // For KenBurn clip generation, return 0 to 50
-                    // for Analysis phase and 50 to 100 for Saving phase
-                    progress = progressBase + progress/2;
-                } else {
-                    // For export/transition clips, 0 to 10 for Analysis phase
-                    // and 10 to 100 for Saving phase
-                    if (ManualEditState_INITIALIZED == pContext->state) {
-                        progress = 0.1*progress;
-                    } else {
-                        progress = progressBase + 0.9*progress;
-                    }
-                }
-
-                if (progress > lastProgress)
-                {
-                    // Send a progress notification.
-                    ALOGV("videoEditor_processClip ITEM %d Progress indication %d",
-                        unuseditemID, progress);
-                    pEnv->CallVoidMethod(pContext->engine,
-                        pContext->onProgressUpdateMethodId,
-                        unuseditemID, progress);
-                    lastProgress = progress;
-                }
-            }
-
-            // Check if processing has been completed.
-            if (result == completionResult)
-            {
-                // Set the state to the completions state.
-                pContext->state = completionState;
-                ALOGV("videoEditor_processClip ITEM %d STATE changed to %d",
-                    unuseditemID, pContext->state);
-
-                // Reset progress indication, as we switch to next state
-                lastProgress = 0;
-
-                // Reset error code, as we start a new round of processing
-                result = M4NO_ERROR;
-
-                // Check if we are analyzing input
-                if (pContext->state == ManualEditState_OPENED) {
-                    // File is opened, we must start saving it
-                    ALOGV("videoEditor_processClip Calling M4xVSS_SaveStart()");
-                    result = M4xVSS_SaveStart(pContext->engineContext,
-                        (M4OSA_Char*)pContext->pEditSettings->pOutputFile,
-                        (M4OSA_UInt32)pContext->pEditSettings->uiOutputPathSize);
-                    ALOGV("videoEditor_processClip ITEM %d SaveStart() returned 0x%x",
-                        unuseditemID, (unsigned int) result);
-
-                    // Set the state to saving.
-                    pContext->state  = ManualEditState_SAVING;
-                    completionState  = ManualEditState_SAVED;
-                    completionResult = M4VSS3GPP_WAR_SAVING_DONE;
-                    errorState       = ManualEditState_SAVING_ERROR;
-
-                    // While saving, progress goes from 10 to 100
-                    // except for Kenburn clip which goes from 50 to 100
-                    if (M4OSA_TRUE ==
-                            pContext->pEditSettings->pClipList[0]->xVSS.isPanZoom) {
-                        progressBase = 50;
-                    } else {
-                        progressBase     = 10;
-                    }
-                }
-                // Check if we encoding is ongoing
-                else if (pContext->state == ManualEditState_SAVED) {
-
-                    // Send a progress notification.
-                    progress = 100;
-                    ALOGV("videoEditor_processClip ITEM %d Last progress indication %d",
-                        unuseditemID, progress);
-                    pEnv->CallVoidMethod(pContext->engine,
-                        pContext->onProgressUpdateMethodId,
-                        unuseditemID, progress);
-
-
-                    // Stop the encoding.
-                    ALOGV("videoEditor_processClip Calling M4xVSS_SaveStop()");
-                    result = M4xVSS_SaveStop(pContext->engineContext);
-                    ALOGV("videoEditor_processClip M4xVSS_SaveStop() returned 0x%x", result);
-                }
-                // Other states are unexpected
-                else {
-                    result = M4ERR_STATE;
-                    ALOGE("videoEditor_processClip ITEM %d State ERROR 0x%x",
-                        unuseditemID, (unsigned int) result);
-                }
-            }
-
-            // Check if an error occurred.
-            if (result != M4NO_ERROR)
-            {
-                // Set the state to the error state.
-                pContext->state = errorState;
-
-                // Log the result.
-                ALOGE("videoEditor_processClip ITEM %d Processing ERROR 0x%x",
-                    unuseditemID, (unsigned int) result);
-            }
-    }
-
-    // Return the error result
-    ALOGE("videoEditor_processClip ITEM %d END 0x%x", unuseditemID, (unsigned int) result);
-    return result;
-}
-/*+ PROGRESS CB */
-
-static jint
-videoEditor_generateClip(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jobject                             settings) {
-    bool               loaded   = true;
-    ManualEditContext* pContext = M4OSA_NULL;
-    M4OSA_ERR          result   = M4NO_ERROR;
-
-    ALOGV("videoEditor_generateClip START");
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&loaded, pEnv, thiz);
-
-    Mutex::Autolock autoLock(pContext->mLock);
-
-    // Validate the settings parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&loaded, pEnv,
-                                                (NULL == settings),
-                                                "settings is null");
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&loaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    // Load the clip settings
-    ALOGV("videoEditor_generateClip Calling videoEditor_loadSettings");
-    videoEditor_loadSettings(pEnv, thiz, settings);
-    ALOGV("videoEditor_generateClip videoEditor_loadSettings returned");
-
-    // Generate the clip
-    ALOGV("videoEditor_generateClip Calling LVME_processClip");
-    result = videoEditor_processClip(pEnv, thiz, 0 /*item id is unused*/);
-    ALOGV("videoEditor_generateClip videoEditor_processClip returned 0x%x", result);
-
-    if (pContext->state != ManualEditState_INITIALIZED) {
-        // Free up memory (whatever the result)
-        videoEditor_unloadSettings(pEnv, thiz);
-    }
-
-    ALOGV("videoEditor_generateClip END 0x%x", (unsigned int) result);
-    return (jint)result;
-}
-
-static void
-videoEditor_loadSettings(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jobject                             settings)
-{
-    bool               needToBeLoaded   = true;
-    ManualEditContext* pContext = M4OSA_NULL;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_loadSettings()");
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded,
-                                                                pEnv, thiz);
-
-    // Validate the settings parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(&needToBeLoaded, pEnv,
-                                                (NULL == settings),
-                                                "settings is null");
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    // Check if the context is valid (required because the context is dereferenced).
-    if (needToBeLoaded)
-    {
-        // Make sure that we are in a correct state.
-        videoEditJava_checkAndThrowIllegalStateException(&needToBeLoaded, pEnv,
-                             (pContext->state != ManualEditState_INITIALIZED),
-                             "settings already loaded");
-
-        // Retrieve the edit settings.
-        if(pContext->pEditSettings != M4OSA_NULL) {
-            videoEditClasses_freeEditSettings(&pContext->pEditSettings);
-            pContext->pEditSettings = M4OSA_NULL;
-        }
-        videoEditClasses_getEditSettings(&needToBeLoaded, pEnv, settings,
-            &pContext->pEditSettings,true);
-    }
-
-    // Check if the edit settings could be retrieved.
-    if (needToBeLoaded)
-    {
-        // Log the edit settings.
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "inside load settings");
-        VIDEOEDIT_LOG_EDIT_SETTINGS(pContext->pEditSettings);
-    }
-    ALOGV("videoEditor_loadSettings END");
-}
-
-
-
-static void
-videoEditor_unloadSettings(
-                JNIEnv*                             pEnv,
-                jobject                             thiz)
-{
-    bool               needToBeUnLoaded = true;
-    ManualEditContext* pContext = M4OSA_NULL;
-    M4OSA_ERR          result   = M4NO_ERROR;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_unloadSettings()");
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeUnLoaded, pEnv, thiz);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&needToBeUnLoaded, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    // Check if the context is valid (required because the context is dereferenced).
-    if (needToBeUnLoaded)
-    {
-        ALOGV("videoEditor_unloadSettings state %d", pContext->state);
-        // Make sure that we are in a correct state.
-        videoEditJava_checkAndThrowIllegalStateException(&needToBeUnLoaded, pEnv,
-                     ((pContext->state != ManualEditState_ANALYZING      ) &&
-                      (pContext->state != ManualEditState_ANALYZING_ERROR) &&
-                      (pContext->state != ManualEditState_OPENED         ) &&
-                      (pContext->state != ManualEditState_SAVING_ERROR   ) &&
-                      (pContext->state != ManualEditState_SAVED          ) &&
-                      (pContext->state != ManualEditState_STOPPING       ) ),
-                     "videoEditor_unloadSettings no load settings in progress");
-    }
-
-    // Check if we are in a correct state.
-    if (needToBeUnLoaded)
-    {
-        // Check if the thread could be stopped.
-        if (needToBeUnLoaded)
-        {
-            // Close the command.
-            ALOGV("videoEditor_unloadSettings Calling M4xVSS_CloseCommand()");
-            result = M4xVSS_CloseCommand(pContext->engineContext);
-            ALOGV("videoEditor_unloadSettings M4xVSS_CloseCommand() returned 0x%x",
-                (unsigned int)result);
-
-            // Check if the command could be closed.
-            videoEditJava_checkAndThrowRuntimeException(&needToBeUnLoaded, pEnv,
-             (M4NO_ERROR != result), result);
-        }
-
-        // Check if the command could be closed.
-        if (needToBeUnLoaded)
-        {
-            // Free the edit settings.
-            //videoEditClasses_freeEditSettings(&pContext->pEditSettings);
-
-            // Reset the thread result.
-            pContext->threadResult = M4NO_ERROR;
-
-            // Reset the thread progress.
-            pContext->threadProgress = 0;
-
-            // Set the state to initialized.
-            pContext->state = ManualEditState_INITIALIZED;
-        }
-    }
-}
-
-static void
-videoEditor_stopEncoding(
-                JNIEnv*                             pEnv,
-                jobject                             thiz)
-{
-    bool               stopped  = true;
-    ManualEditContext* pContext = M4OSA_NULL;
-    M4OSA_ERR          result   = M4NO_ERROR;
-
-    ALOGV("videoEditor_stopEncoding START");
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&stopped, pEnv, thiz);
-
-    // Change state and get Lock
-    // This will ensure the generateClip function exits
-    pContext->state = ManualEditState_STOPPING;
-    Mutex::Autolock autoLock(pContext->mLock);
-
-    // Make sure that the context was set.
-    videoEditJava_checkAndThrowIllegalStateException(&stopped, pEnv,
-                                             (M4OSA_NULL == pContext),
-                                             "not initialized");
-
-    if (stopped) {
-
-        // Check if the command should be closed.
-        if (pContext->state != ManualEditState_INITIALIZED)
-        {
-            // Close the command.
-            ALOGV("videoEditor_stopEncoding Calling M4xVSS_CloseCommand()");
-            result = M4xVSS_CloseCommand(pContext->engineContext);
-            ALOGV("videoEditor_stopEncoding M4xVSS_CloseCommand() returned 0x%x",
-                (unsigned int)result);
-        }
-
-        // Check if the command could be closed.
-        videoEditJava_checkAndThrowRuntimeException(&stopped, pEnv,
-            (M4NO_ERROR != result), result);
-
-        // Free the edit settings.
-        videoEditClasses_freeEditSettings(&pContext->pEditSettings);
-
-        // Set the state to initialized.
-        pContext->state = ManualEditState_INITIALIZED;
-    }
-
-}
-
-static void
-videoEditor_release(
-                JNIEnv*                             pEnv,
-                jobject                             thiz)
-{
-    bool               released = true;
-    ManualEditContext* pContext = M4OSA_NULL;
-    M4OSA_ERR          result   = M4NO_ERROR;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "videoEditor_release()");
-
-    // Get the context.
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&released, pEnv, thiz);
-
-    // If context is not set, return (we consider release already happened)
-    if (pContext == NULL) {
-        ALOGV("videoEditor_release Nothing to do, context is aleady NULL");
-        return;
-    }
-
-
-    // Check if the context is valid (required because the context is dereferenced).
-    if (released)
-    {
-        if (pContext->state != ManualEditState_INITIALIZED)
-        {
-            // Change state and get Lock
-            // This will ensure the generateClip function exits if it is running
-            pContext->state = ManualEditState_STOPPING;
-            Mutex::Autolock autoLock(pContext->mLock);
-        }
-
-        // Reset the context.
-        videoEditClasses_setContext(&released, pEnv, thiz, (void *)M4OSA_NULL);
-
-        // Check if the command should be closed.
-        if (pContext->state != ManualEditState_INITIALIZED)
-        {
-            // Close the command.
-            ALOGV("videoEditor_release Calling M4xVSS_CloseCommand() state =%d",
-                pContext->state);
-            result = M4xVSS_CloseCommand(pContext->engineContext);
-            ALOGV("videoEditor_release M4xVSS_CloseCommand() returned 0x%x",
-                (unsigned int)result);
-
-            // Check if the command could be closed.
-            videoEditJava_checkAndThrowRuntimeException(&released, pEnv,
-                (M4NO_ERROR != result), result);
-        }
-
-        // Cleanup the engine.
-        ALOGV("videoEditor_release Calling M4xVSS_CleanUp()");
-        result = M4xVSS_CleanUp(pContext->engineContext);
-        ALOGV("videoEditor_release M4xVSS_CleanUp() returned 0x%x", (unsigned int)result);
-
-        // Check if the cleanup succeeded.
-        videoEditJava_checkAndThrowRuntimeException(&released, pEnv,
-            (M4NO_ERROR != result), result);
-
-        // Free the edit settings.
-        videoEditClasses_freeEditSettings(&pContext->pEditSettings);
-        pContext->pEditSettings = M4OSA_NULL;
-
-
-        if(pContext->mPreviewController != M4OSA_NULL)
-        {
-            delete pContext->mPreviewController;
-            pContext->mPreviewController = M4OSA_NULL;
-        }
-
-        // Free the mAudioSettings context.
-        if(pContext->mAudioSettings != M4OSA_NULL)
-        {
-            if (pContext->mAudioSettings->pFile != NULL) {
-                free(pContext->mAudioSettings->pFile);
-                pContext->mAudioSettings->pFile = M4OSA_NULL;
-            }
-            if (pContext->mAudioSettings->pPCMFilePath != NULL) {
-                free(pContext->mAudioSettings->pPCMFilePath);
-                pContext->mAudioSettings->pPCMFilePath = M4OSA_NULL;
-            }
-
-            free(pContext->mAudioSettings);
-            pContext->mAudioSettings = M4OSA_NULL;
-        }
-        // Free video Decoders capabilities
-        if (pContext->decoders != M4OSA_NULL) {
-            VideoDecoder *pDecoder = NULL;
-            VideoComponentCapabilities *pComponents = NULL;
-            int32_t decoderNumber = pContext->decoders->decoderNumber;
-            if (pContext->decoders->decoder != NULL &&
-                decoderNumber > 0) {
-                pDecoder = pContext->decoders->decoder;
-                for (int32_t k = 0; k < decoderNumber; k++) {
-                    // free each component
-                    ALOGV("decoder index :%d",k);
-                    if (pDecoder != NULL &&
-                        pDecoder->component != NULL &&
-                        pDecoder->componentNumber > 0) {
-                        ALOGV("component number %d",pDecoder->componentNumber);
-                        int32_t componentNumber =
-                           pDecoder->componentNumber;
-
-                        pComponents = pDecoder->component;
-                        for (int32_t i = 0; i< componentNumber; i++) {
-                            ALOGV("component index :%d",i);
-                            if (pComponents != NULL &&
-                                pComponents->profileLevel != NULL) {
-                                free(pComponents->profileLevel);
-                                pComponents->profileLevel = NULL;
-                            }
-                            pComponents++;
-                        }
-                        free(pDecoder->component);
-                        pDecoder->component = NULL;
-                    }
-
-                    pDecoder++;
-                }
-                free(pContext->decoders->decoder);
-                pContext->decoders->decoder = NULL;
-            }
-            free(pContext->decoders);
-            pContext->decoders = NULL;
-        }
-
-        videoEditor_freeContext(pEnv, &pContext);
-    }
-}
-
-static int
-videoEditor_registerManualEditMethods(
-                JNIEnv*                             pEnv)
-{
-    int result = -1;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-     "videoEditor_registerManualEditMethods()");
-
-    // Look up the engine class
-    jclass engineClazz = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME);
-
-    // Clear any resulting exceptions.
-    pEnv->ExceptionClear();
-
-    // Check if the engine class was found.
-    if (NULL != engineClazz)
-    {
-        // Register all the methods.
-        if (pEnv->RegisterNatives(engineClazz, gManualEditMethods,
-                sizeof(gManualEditMethods) / sizeof(gManualEditMethods[0])) == JNI_OK)
-        {
-            // Success.
-            result = 0;
-        }
-    }
-
-    // Return the result.
-    return(result);
-}
-
-/*******Audio Graph*******/
-
-static M4OSA_UInt32 getDecibelSound(M4OSA_UInt32 value)
-{
-    int dbSound = 1;
-
-    if (value == 0) return 0;
-
-    if (value > 0x4000 && value <= 0x8000) // 32768
-        dbSound = 90;
-    else if (value > 0x2000 && value <= 0x4000) // 16384
-        dbSound = 84;
-    else if (value > 0x1000 && value <= 0x2000) // 8192
-        dbSound = 78;
-    else if (value > 0x0800 && value <= 0x1000) // 4028
-        dbSound = 72;
-    else if (value > 0x0400 && value <= 0x0800) // 2048
-        dbSound = 66;
-    else if (value > 0x0200 && value <= 0x0400) // 1024
-        dbSound = 60;
-    else if (value > 0x0100 && value <= 0x0200) // 512
-        dbSound = 54;
-    else if (value > 0x0080 && value <= 0x0100) // 256
-        dbSound = 48;
-    else if (value > 0x0040 && value <= 0x0080) // 128
-        dbSound = 42;
-    else if (value > 0x0020 && value <= 0x0040) // 64
-        dbSound = 36;
-    else if (value > 0x0010 && value <= 0x0020) // 32
-        dbSound = 30;
-    else if (value > 0x0008 && value <= 0x0010) //16
-        dbSound = 24;
-    else if (value > 0x0007 && value <= 0x0008) //8
-        dbSound = 24;
-    else if (value > 0x0003 && value <= 0x0007) // 4
-        dbSound = 18;
-    else if (value > 0x0001 && value <= 0x0003) //2
-        dbSound = 12;
-    else if (value > 0x000 && value == 0x0001) // 1
-        dbSound = 6;
-    else
-        dbSound = 0;
-
-    return dbSound;
-}
-
-typedef struct
-{
-    M4OSA_UInt8      *m_dataAddress;
-    M4OSA_UInt32    m_bufferSize;
-} M4AM_Buffer;
-
-
-M4OSA_UInt8 logLookUp[256] = {
-0,120,137,146,154,159,163,167,171,173,176,178,181,182,184,186,188,189,190,192,193,
-194,195,196,198,199,199,200,201,202,203,204,205,205,206,207,207,208,209,209,210,
-211,211,212,212,213,213,214,215,215,216,216,216,217,217,218,218,219,219,220,220,
-220,221,221,222,222,222,223,223,223,224,224,224,225,225,225,226,226,226,227,227,
-227,228,228,228,229,229,229,229,230,230,230,230,231,231,231,232,232,232,232,233,
-233,233,233,233,234,234,234,234,235,235,235,235,236,236,236,236,236,237,237,237,
-237,237,238,238,238,238,238,239,239,239,239,239,240,240,240,240,240,240,241,241,
-241,241,241,241,242,242,242,242,242,242,243,243,243,243,243,243,244,244,244,244,
-244,244,245,245,245,245,245,245,245,246,246,246,246,246,246,246,247,247,247,247,
-247,247,247,247,248,248,248,248,248,248,248,249,249,249,249,249,249,249,249,250,
-250,250,250,250,250,250,250,250,251,251,251,251,251,251,251,251,252,252,252,252,
-252,252,252,252,252,253,253,253,253,253,253,253,253,253,253,254,254,254,254,254,
-254,254,254,254,255,255,255,255,255,255,255,255,255,255,255};
-
-M4OSA_ERR M4MA_generateAudioGraphFile(JNIEnv* pEnv, M4OSA_Char* pInputFileURL,
-                     M4OSA_Char* pOutFileURL,
-                     M4OSA_UInt32 samplesPerValue,
-                     M4OSA_UInt32 channels,
-                     M4OSA_UInt32 frameDuration,
-                     ManualEditContext* pContext)
-{
-    M4OSA_ERR           err;
-    M4OSA_Context       outFileHandle = M4OSA_NULL;
-    M4OSA_Context       inputFileHandle = M4OSA_NULL;
-    M4AM_Buffer         bufferIn = {0, 0};
-    M4OSA_UInt32        peakVolumeDbValue = 0;
-    M4OSA_UInt32        samplesCountInBytes= 0 , numBytesToRead = 0, index = 0;
-    M4OSA_UInt32        writeCount = 0, samplesCountBigEndian = 0, volumeValuesCount = 0;
-    M4OSA_Int32         seekPos = 0;
-    M4OSA_UInt32        fileSize = 0;
-    M4OSA_UInt32        totalBytesRead = 0;
-    M4OSA_UInt32        prevProgress = 0;
-    bool                threadStarted = true;
-
-    int dbValue = 0;
-    M4OSA_Int16 *ptr16 ;
-
-    jclass engineClass = pEnv->FindClass(MANUAL_EDIT_ENGINE_CLASS_NAME);
-    videoEditJava_checkAndThrowIllegalStateException(&threadStarted, pEnv,
-                                             (M4OSA_NULL == engineClass),
-                                             "not initialized");
-
-    /* register the call back function pointer */
-    pContext->onAudioGraphProgressUpdateMethodId =
-            pEnv->GetMethodID(engineClass, "onAudioGraphExtractProgressUpdate", "(IZ)V");
-
-
-    /* ENTER */
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "ENTER - M4MA_generateAudioGraphFile");
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "Audio Graph samplesPerValue %d channels %d", samplesPerValue, channels);
-
-    /******************************************************************************
-        OPEN INPUT AND OUTPUT FILES
-    *******************************************************************************/
-    err = M4OSA_fileReadOpen (&inputFileHandle, pInputFileURL, M4OSA_kFileRead);
-    if (inputFileHandle == M4OSA_NULL) {
-        VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "M4MA_generateAudioGraphFile: Cannot open input file 0x%" PRIx32, err);
-        return err;
-    }
-
-    /* get the file size for progress */
-    err = M4OSA_fileReadGetOption(inputFileHandle, M4OSA_kFileReadGetFileSize,
-                                (M4OSA_Void**)&fileSize);
-    if ( err != M4NO_ERROR) {
-        //LVMEL_LOG_ERROR("M4MA_generateAudioGraphFile : File write failed \n");
-        jniThrowException(pEnv, "java/lang/IOException", "file size get option failed");
-        //return -1;
-    }
-
-    err = M4OSA_fileWriteOpen (&outFileHandle,(M4OSA_Char*) pOutFileURL,
-        M4OSA_kFileCreate | M4OSA_kFileWrite);
-    if (outFileHandle == M4OSA_NULL) {
-        if (inputFileHandle != NULL)
-        {
-            M4OSA_fileReadClose(inputFileHandle);
-        }
-        return err;
-    }
-
-    /******************************************************************************
-        PROCESS THE SAMPLES
-    *******************************************************************************/
-    samplesCountInBytes = (samplesPerValue * sizeof(M4OSA_UInt16) * channels);
-
-    bufferIn.m_dataAddress = (M4OSA_UInt8*)M4OSA_32bitAlignedMalloc(samplesCountInBytes*sizeof(M4OSA_UInt16), 0,
-    (M4OSA_Char*)"AudioGraph" );
-    if ( bufferIn.m_dataAddress != M4OSA_NULL) {
-        bufferIn.m_bufferSize = samplesCountInBytes*sizeof(M4OSA_UInt16);
-    } else {
-        VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "M4MA_generateAudioGraphFile: Malloc failed for bufferIn.m_dataAddress 0x%" PRIx32,
-            M4ERR_ALLOC);
-        return M4ERR_ALLOC;
-    }
-    /* sample to be converted to BIG endian ; store the frame duration */
-    samplesCountBigEndian = ((frameDuration>>24)&0xff) | // move byte 3 to byte 0
-                    ((frameDuration<<8)&0xff0000) | // move byte 1 to byte 2
-                    ((frameDuration>>8)&0xff00) | // move byte 2 to byte 1
-                    ((frameDuration<<24)&0xff000000); // byte 0 to byte 3
-
-    /* write the samples per value supplied to out file */
-    err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&samplesCountBigEndian,
-        sizeof(M4OSA_UInt32) );
-    if (err != M4NO_ERROR) {
-        jniThrowException(pEnv, "java/lang/IOException", "file write failed");
-    }
-
-
-    /* write UIn32 value 0 for no of values as place holder */
-    samplesCountBigEndian = 0; /* reusing local var */
-    err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&samplesCountBigEndian,
-        sizeof(M4OSA_UInt32) );
-    if (err != M4NO_ERROR) {
-        jniThrowException(pEnv, "java/lang/IOException", "file write failed");
-    }
-
-    /* loop until EOF */
-    do
-    {
-        memset((void *)bufferIn.m_dataAddress,0,bufferIn.m_bufferSize);
-
-        numBytesToRead = samplesCountInBytes;
-
-        err =  M4OSA_fileReadData(  inputFileHandle,
-                                    (M4OSA_MemAddr8)bufferIn.m_dataAddress,
-                                    &numBytesToRead );
-
-        if (err != M4NO_ERROR) {
-            // if out value of bytes-read is 0, break
-            if ( numBytesToRead == 0) {
-                VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "numBytesToRead 0x%" PRIx32,
-                numBytesToRead);
-                break; /* stop if file is empty or EOF */
-            }
-        }
-
-        ptr16 = (M4OSA_Int16*)bufferIn.m_dataAddress;
-
-        peakVolumeDbValue = 0;
-        index = 0;
-
-        // loop through half the lenght frame bytes read 'cause its 16 bits samples
-        while (index < (numBytesToRead / 2)) {
-            /* absolute values of 16 bit sample */
-            if (ptr16[index] < 0) {
-                ptr16[index] = -(ptr16[index]);
-            }
-            peakVolumeDbValue = (peakVolumeDbValue > (M4OSA_UInt32)ptr16[index] ?\
-             peakVolumeDbValue : (M4OSA_UInt32)ptr16[index]);
-            index++;
-        }
-
-        // move 7 bits , ignore sign bit
-        dbValue = (peakVolumeDbValue >> 7);
-        dbValue = logLookUp[(M4OSA_UInt8)dbValue];
-
-        err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&dbValue, sizeof(M4OSA_UInt8) );
-        if (err != M4NO_ERROR) {
-            VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-             "M4MA_generateAudioGraphFile : File write failed");
-            break;
-        }
-
-        volumeValuesCount ++;
-        totalBytesRead += numBytesToRead;
-
-        if ((((totalBytesRead*100)/fileSize)) != prevProgress) {
-            if ( (pContext->threadProgress != prevProgress) && (prevProgress != 0 )) {
-                //pContext->threadProgress = prevProgress;
-                //onWveformProgressUpdateMethodId(prevProgress, 0);
-                //LVME_callAudioGraphOnProgressUpdate(pContext, 0, prevProgress);
-            pEnv->CallVoidMethod(pContext->engine,
-                                 pContext->onAudioGraphProgressUpdateMethodId,
-                                 prevProgress, 0);
-            VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "pContext->threadProgress %d",
-                             prevProgress);
-            }
-        }
-        prevProgress = (((totalBytesRead*100)/fileSize));
-
-    } while (numBytesToRead != 0);
-
-    VIDEOEDIT_LOG_ERROR(ANDROID_LOG_INFO, "VIDEO_EDITOR", "loop 0x%" PRIx32, volumeValuesCount);
-
-    /* if some error occured in fwrite */
-    if (numBytesToRead != 0) {
-        //err = -1;
-        jniThrowException(pEnv, "java/lang/IOException", "numBytesToRead != 0 ; file write failed");
-    }
-
-    /* write the count in place holder after seek */
-    seekPos = sizeof(M4OSA_UInt32);
-    err = M4OSA_fileWriteSeek(outFileHandle, M4OSA_kFileSeekBeginning,
-            &seekPos /* after samples per value */);
-    if ( err != M4NO_ERROR) {
-        jniThrowException(pEnv, "java/lang/IOException", "file seek failed");
-    } else {
-        volumeValuesCount = ((volumeValuesCount>>24)&0xff) | // move byte 3 to byte 0
-                    ((volumeValuesCount<<8)&0xff0000) | // move byte 1 to byte 2
-                    ((volumeValuesCount>>8)&0xff00) |  // move byte 2 to byte 1
-                    ((volumeValuesCount<<24)&0xff000000); // byte 0 to byte 3
-
-        err = M4OSA_fileWriteData (outFileHandle, (M4OSA_MemAddr8)&volumeValuesCount,
-                                    sizeof(M4OSA_UInt32) );
-        if ( err != M4NO_ERROR) {
-            jniThrowException(pEnv, "java/lang/IOException", "file write failed");
-        }
-    }
-
-    /******************************************************************************
-    CLOSE AND FREE ALLOCATIONS
-    *******************************************************************************/
-    free(bufferIn.m_dataAddress);
-    M4OSA_fileReadClose(inputFileHandle);
-    M4OSA_fileWriteClose(outFileHandle);
-    /* final finish callback */
-    pEnv->CallVoidMethod(pContext->engine, pContext->onAudioGraphProgressUpdateMethodId, 100, 0);
-
-    /* EXIT */
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR", "EXIT - M4MA_generateAudioGraphFile");
-
-    return err;
-}
-
-static jint videoEditor_generateAudioWaveFormSync (JNIEnv*  pEnv, jobject thiz,
-                                                  jstring pcmfilePath,
-                                                  jstring outGraphfilePath,
-                                                  jint frameDuration, jint channels,
-                                                  jint samplesCount)
-{
-    M4OSA_ERR result = M4NO_ERROR;
-    ManualEditContext* pContext = M4OSA_NULL;
-    bool needToBeLoaded = true;
-    const char *pPCMFilePath, *pStringOutAudioGraphFile;
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-        "videoEditor_generateAudioWaveFormSync() ");
-
-    /* Get the context. */
-    pContext = (ManualEditContext*)videoEditClasses_getContext(&needToBeLoaded, pEnv, thiz);
-    if (pContext == M4OSA_NULL) {
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-            "videoEditor_generateAudioWaveFormSync() - pContext is NULL ");
-    }
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-        "videoEditor_generateAudioWaveFormSync Retrieving pStringOutAudioGraphFile");
-
-    pPCMFilePath = pEnv->GetStringUTFChars(pcmfilePath, NULL);
-    if (pPCMFilePath == M4OSA_NULL) {
-        jniThrowException(pEnv, "java/lang/RuntimeException",
-            "Input string PCMFilePath is null");
-        result = M4ERR_PARAMETER;
-        goto out;
-    }
-
-    pStringOutAudioGraphFile = pEnv->GetStringUTFChars(outGraphfilePath, NULL);
-    if (pStringOutAudioGraphFile == M4OSA_NULL) {
-        jniThrowException(pEnv, "java/lang/RuntimeException",
-            "Input string outGraphfilePath is null");
-        result = M4ERR_PARAMETER;
-        goto out2;
-    }
-
-    VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-        "videoEditor_generateAudioWaveFormSync Generate the waveform data %s %d %d %d",
-        pStringOutAudioGraphFile, frameDuration, channels, samplesCount);
-
-    /* Generate the waveform */
-    result = M4MA_generateAudioGraphFile(pEnv, (M4OSA_Char*) pPCMFilePath,
-        (M4OSA_Char*) pStringOutAudioGraphFile,
-        (M4OSA_UInt32) samplesCount,
-        (M4OSA_UInt32) channels,
-        (M4OSA_UInt32)frameDuration,
-        pContext);
-
-    pEnv->ReleaseStringUTFChars(outGraphfilePath, pStringOutAudioGraphFile);
-
-out2:
-    if (pPCMFilePath != NULL) {
-        pEnv->ReleaseStringUTFChars(pcmfilePath, pPCMFilePath);
-    }
-
-out:
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR",
-        "videoEditor_generateAudioWaveFormSync pContext->bSkipState ");
-
-    return (jint)result;
-}
-
-/******** End Audio Graph *******/
-jint JNI_OnLoad(
-                JavaVM*                             pVm,
-                void*                               pReserved)
-{
-    void* pEnv         = NULL;
-    bool  needToBeInitialized = true;
-    jint  result      = -1;
-
-    VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR", "JNI_OnLoad()");
-
-    // Check the JNI version.
-    if (pVm->GetEnv(&pEnv, JNI_VERSION_1_4) == JNI_OK)
-    {
-        // Register the manual edit JNI methods.
-        if (videoEditor_registerManualEditMethods((JNIEnv*)pEnv) == 0)
-        {
-            // Initialize the classes.
-            videoEditClasses_init(&needToBeInitialized, (JNIEnv*)pEnv);
-            if (needToBeInitialized)
-            {
-                // Success, return valid version number.
-                result = JNI_VERSION_1_4;
-            }
-        }
-    }
-
-    // Return the result.
-    return(result);
-}
-
diff --git a/media/jni/mediaeditor/VideoEditorOsal.cpp b/media/jni/mediaeditor/VideoEditorOsal.cpp
deleted file mode 100644
index c12b1f5..0000000
--- a/media/jni/mediaeditor/VideoEditorOsal.cpp
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#define LOG_TAG "VideoEditorOsal"
-
-#include <VideoEditorJava.h>
-#include <VideoEditorLogging.h>
-#include <VideoEditorOsal.h>
-
-extern "C" {
-#include <M4OSA_Clock.h>
-#include <M4OSA_CharStar.h>
-#include <M4OSA_FileCommon.h>
-#include <M4OSA_FileReader.h>
-#include <M4OSA_FileWriter.h>
-#include <M4OSA_Memory.h>
-#include <M4OSA_Thread.h>
-#include <M4xVSS_API.h>
-#include <M4VSS3GPP_ErrorCodes.h>
-#include <M4MCS_ErrorCodes.h>
-#include <M4READER_Common.h>
-#include <M4WRITER_common.h>
-#include <M4VSS3GPP_API.h>
-#include <M4DECODER_Common.h>
-};
-
-
-#define VIDEOEDIT_OSAL_RESULT_STRING_MAX     (32)
-
-#define VIDEOEDIT_OSAL_RESULT_INIT(m_result) { m_result, #m_result }
-
-
-typedef struct
-{
-    M4OSA_ERR   result;
-    const char* pName;
-} VideoEdit_Osal_Result;
-
-static const VideoEdit_Osal_Result gkRESULTS[] =
-{
-    // M4OSA_Clock.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_TIMESCALE_TOO_BIG                                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_CLOCK_BAD_REF_YEAR                               ),
-
-    // M4OSA_Error.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4NO_ERROR                                             ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_PARAMETER                                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_STATE                                            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_ALLOC                                            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_BAD_CONTEXT                                      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_CONTEXT_FAILED                                   ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_BAD_STREAM_ID                                    ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_BAD_OPTION_ID                                    ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_WRITE_ONLY                                       ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_READ_ONLY                                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_NOT_IMPLEMENTED                                  ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_UNSUPPORTED_MEDIA_TYPE                           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_NO_DATA_YET                                      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_NO_MORE_STREAM                                   ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_INVALID_TIME                                     ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_NO_MORE_AU                                       ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_TIME_OUT                                         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_BUFFER_FULL                                      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_REDIRECT                                         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_TOO_MUCH_STREAMS                                 ),
-
-    // M4OSA_FileCommon.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_FILE_NOT_FOUND                                   ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_FILE_LOCKED                                      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_FILE_BAD_MODE_ACCESS                             ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_FILE_INVALID_POSITION                            ),
-
-    // M4OSA_Thread.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_THREAD_NOT_STARTED                               ),
-
-    // M4xVSS_API.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_ANALYZING_DONE                           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_PREVIEW_READY                            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_SAVING_DONE                              ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_TRANSCODING_NECESSARY                    ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_OUTPUTFILESIZE_EXCEED                    ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_JPG_TOO_BIG                              ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4xVSSWAR_BUFFER_OUT_TOO_SMALL                         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4xVSSERR_NO_MORE_SPACE                                ),
-
-    // M4VSS3GPP_ErrorCodes.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_FILE_TYPE                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_EFFECT_KIND                      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_VIDEO_EFFECT_TYPE                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_AUDIO_EFFECT_TYPE                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_VIDEO_TRANSITION_TYPE            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_AUDIO_TRANSITION_TYPE            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_VIDEO_ENCODING_FRAME_RATE        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EXTERNAL_EFFECT_NULL                     ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EXTERNAL_TRANSITION_NULL                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_DURATION           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_BEGIN_CUT_LARGER_THAN_END_CUT            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_OVERLAPPING_TRANSITIONS                  ),
-#ifdef M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_ANALYSIS_DATA_SIZE_TOO_SMALL             ),
-#endif
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_3GPP_FILE                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_UNSUPPORTED_INPUT_VIDEO_FORMAT           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_UNSUPPORTED_INPUT_AUDIO_FORMAT           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_AMR_EDITING_UNSUPPORTED                  ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INPUT_VIDEO_AU_TOO_LARGE                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INPUT_AUDIO_AU_TOO_LARGE                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AU                 ),
-#ifdef M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INPUT_AUDIO_CORRUPTED_AMR_AU             ),
-#endif
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_ENCODER_ACCES_UNIT_ERROR                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EDITING_UNSUPPORTED_VIDEO_FORMAT         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EDITING_UNSUPPORTED_H263_PROFILE         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_PROFILE        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EDITING_UNSUPPORTED_MPEG4_RVLC           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EDITING_UNSUPPORTED_AUDIO_FORMAT         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_STREAM_IN_FILE      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_EDITING_NO_SUPPORTED_VIDEO_STREAM_IN_FILE),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_VERSION            ),
-#ifdef M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INVALID_CLIP_ANALYSIS_PLATFORM           ),
-#endif
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FORMAT                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_FRAME_SIZE            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_TIME_SCALE            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INCOMPATIBLE_VIDEO_DATA_PARTITIONING     ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_UNSUPPORTED_MP3_ASSEMBLY                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_STREAM_TYPE           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_NB_OF_CHANNELS        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_WAR_INCOMPATIBLE_AUDIO_SAMPLING_FREQUENCY    ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_NO_SUPPORTED_STREAM_IN_FILE              ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_ADDVOLUME_EQUALS_ZERO                    ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_ADDCTS_HIGHER_THAN_VIDEO_DURATION        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_UNDEFINED_AUDIO_TRACK_FILE_FORMAT        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_UNSUPPORTED_ADDED_AUDIO_STREAM           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_AUDIO_MIXING_UNSUPPORTED                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AUDIO_TRACK     ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_AUDIO_CANNOT_BE_MIXED                    ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INPUT_CLIP_IS_NOT_A_3GPP                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_BEGINLOOP_HIGHER_ENDLOOP                 ),
-#ifdef M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_AUDIO_MIXING_MP3_UNSUPPORTED             ),
-#endif
-#ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_AAC             ),
-#endif
-#ifdef M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_ONLY_AMRNB_INPUT_CAN_BE_MIXED            ),
-#endif
-#ifdef M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_FEATURE_UNSUPPORTED_WITH_EVRC            ),
-#endif
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_H263_PROFILE_NOT_SUPPORTED               ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_NO_SUPPORTED_VIDEO_STREAM_IN_FILE        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_INTERNAL_STATE                           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_LUMA_FILTER_ERROR                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_TRANSITION_FILTER_ERROR                  ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_AUDIO_DECODER_INIT_FAILED                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_AUDIO_DECODED_PCM_SIZE_ISSUE             ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4VSS3GPP_ERR_OUTPUT_FILE_TYPE_ERROR                   ),
-
-    // M4MCS_ErrorCodes.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_WAR_TRANSCODING_DONE                             ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_WAR_MEDIATYPE_NOT_SUPPORTED                      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_INPUT_FILE_CONTAINS_NO_SUPPORTED_STREAM      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_INVALID_INPUT_FILE                           ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FORMAT                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_SIZE            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_UNDEFINED_OUTPUT_VIDEO_FRAME_RATE            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_UNDEFINED_OUTPUT_AUDIO_FORMAT                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_INVALID_VIDEO_FRAME_SIZE_FOR_H263            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_INVALID_VIDEO_FRAME_RATE_FOR_H263            ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_DURATION_IS_NULL                             ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_H263_FORBIDDEN_IN_MP4_FILE                   ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_H263_PROFILE_NOT_SUPPORTED                   ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_INVALID_AAC_SAMPLING_FREQUENCY               ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_AUDIO_CONVERSION_FAILED                      ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_BEGIN_CUT_LARGER_THAN_DURATION               ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_BEGIN_CUT_EQUALS_END_CUT                     ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_END_CUT_SMALLER_THAN_BEGIN_CUT               ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_MAXFILESIZE_TOO_SMALL                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_VIDEOBITRATE_TOO_LOW                         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_AUDIOBITRATE_TOO_LOW                         ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_VIDEOBITRATE_TOO_HIGH                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_AUDIOBITRATE_TOO_HIGH                        ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_OUTPUT_FILE_SIZE_TOO_SMALL                   ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_NOMORE_SPACE                                 ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4MCS_ERR_FILE_DRM_PROTECTED                           ),
-
-    // M4READER_Common.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_READER_UNKNOWN_STREAM_TYPE                       ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_READER_NO_METADATA                               ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_READER_INFORMATION_NOT_PRESENT                   ),
-
-    // M4WRITER_Common.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_WRITER_STOP_REQ                                  ),
-    // M4DECODER_Common.h
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_VIDEORENDERER_NO_NEW_FRAME                       ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4WAR_DEBLOCKING_FILTER_NOT_IMPLEMENTED                ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_DECODER_H263_PROFILE_NOT_SUPPORTED               ),
-    VIDEOEDIT_OSAL_RESULT_INIT(M4ERR_DECODER_H263_NOT_BASELINE                        )
-};
-
-static const int gkRESULTS_COUNT = (sizeof(gkRESULTS) / sizeof(VideoEdit_Osal_Result));
-
-#ifdef OSAL_MEM_LEAK_DEBUG
-static int gAllocatedBlockCount = 0;
-#endif
-
-const char*
-videoEditOsal_getResultString(
-                M4OSA_ERR                           result)
-{
-    static char string[VIDEOEDIT_OSAL_RESULT_STRING_MAX] = "";
-    const char* pString                         = M4OSA_NULL;
-    int         index                           = 0;
-
-    // Loop over the list with constants.
-    for (index = 0;
-         ((M4OSA_NULL == pString) && (index < gkRESULTS_COUNT));
-         index++)
-    {
-        // Check if the specified result matches.
-        if (result == gkRESULTS[index].result)
-        {
-            // Set the description.
-            pString = gkRESULTS[index].pName;
-        }
-    }
-
-    // Check if no result was found.
-    if (M4OSA_NULL == pString)
-    {
-        // Set the description to a default value.
-        M4OSA_chrSPrintf((M4OSA_Char *)string, sizeof(string) - 1,
-         (M4OSA_Char*)"<unknown(0x%08X)>", result);
-        pString = string;
-    }
-
-    // Return the result.
-    return(pString);
-}
-
-void *
-videoEditOsal_alloc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                size_t                              size,
-                const char*                         pDescription)
-{
-    void *pData = M4OSA_NULL;
-
-    // Check if the previous action succeeded.
-    if (*pResult)
-    {
-        // Allocate memory for the settings.
-        pData = (M4VSS3GPP_EditSettings*)M4OSA_32bitAlignedMalloc(size, 0, (M4OSA_Char*)pDescription);
-        if (M4OSA_NULL != pData)
-        {
-            // Reset the allocated memory.
-            memset((void *)pData, 0,size);
-#ifdef OSAL_MEM_LEAK_DEBUG
-            // Update the allocated block count.
-            gAllocatedBlockCount++;
-#endif
-        }
-        else
-        {
-            // Reset the result flag.
-            (*pResult) = false;
-
-            // Log the error.
-            VIDEOEDIT_LOG_ERROR(ANDROID_LOG_ERROR, "VIDEO_EDITOR_OSAL", "videoEditOsal_alloc,\
-             error: unable to allocate memory for %s", pDescription);
-
-            // Throw an exception.
-            jniThrowException(pEnv, "java/lang/OutOfMemoryError", "unable to allocate memory");
-        }
-    }
-
-    // Return the allocated memory.
-    return(pData);
-}
-
-void
-videoEditOsal_free(
-                void*                               pData)
-{
-    // Check if memory was allocated.
-    if (M4OSA_NULL != pData)
-    {
-        VIDEOEDIT_LOG_FUNCTION(ANDROID_LOG_INFO, "VIDEO_EDITOR_OSAL", "videoEditOsal_free()");
-
-        // Log the API call.
-        VIDEOEDIT_LOG_API(ANDROID_LOG_INFO, "VIDEO_EDITOR_OSAL", "free");
-
-        // Free the memory.
-        free(pData);
-#ifdef OSAL_MEM_LEAK_DEBUG
-        // Update the allocated block count.
-        gAllocatedBlockCount--;
-
-        // Log the number of allocated blocks.
-        VIDEOEDIT_LOG_ALLOCATION(ANDROID_LOG_ERROR, "VIDEO_EDITOR_OSAL", "allocated, %d blocks",\
-         gAllocatedBlockCount);
-#endif
-    }
-}
-
-
-void
-videoEditOsal_getFilePointers ( M4OSA_FileReadPointer *pOsaFileReadPtr,
-                                M4OSA_FileWriterPointer *pOsaFileWritePtr)
-{
-    if (pOsaFileReadPtr != M4OSA_NULL)
-    {
-        // Initialize the filereader function pointers.
-        pOsaFileReadPtr->openRead  = M4OSA_fileReadOpen;
-        pOsaFileReadPtr->readData  = M4OSA_fileReadData;
-        pOsaFileReadPtr->seek      = M4OSA_fileReadSeek;
-        pOsaFileReadPtr->closeRead = M4OSA_fileReadClose;
-        pOsaFileReadPtr->setOption = M4OSA_fileReadSetOption;
-        pOsaFileReadPtr->getOption = M4OSA_fileReadGetOption;
-    }
-
-    if (pOsaFileWritePtr != M4OSA_NULL)
-    {
-        // Initialize the filewriter function pointers.
-        pOsaFileWritePtr->openWrite  = M4OSA_fileWriteOpen;
-        pOsaFileWritePtr->writeData  = M4OSA_fileWriteData;
-        pOsaFileWritePtr->seek       = M4OSA_fileWriteSeek;
-        pOsaFileWritePtr->Flush      = M4OSA_fileWriteFlush;
-        pOsaFileWritePtr->closeWrite = M4OSA_fileWriteClose;
-        pOsaFileWritePtr->setOption  = M4OSA_fileWriteSetOption;
-        pOsaFileWritePtr->getOption  = M4OSA_fileWriteGetOption;
-    }
-}
-
diff --git a/media/jni/mediaeditor/VideoEditorOsal.h b/media/jni/mediaeditor/VideoEditorOsal.h
deleted file mode 100644
index 7a6f5ea..0000000
--- a/media/jni/mediaeditor/VideoEditorOsal.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef VIDEO_EDITOR_OSAL_H
-#define VIDEO_EDITOR_OSAL_H
-
-#include <jni.h>
-#include <JNIHelp.h>
-
-extern "C" {
-#include <M4OSA_Error.h>
-#include <M4OSA_Thread.h>
-#include <M4OSA_FileReader.h>
-#include <M4OSA_FileWriter.h>
-};
-
-const char*
-videoEditOsal_getResultString(
-                M4OSA_ERR                           result);
-
-void*
-videoEditOsal_alloc(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                size_t                              size,
-                const char*                         pDescription);
-
-void
-videoEditOsal_free(
-                void*                               pData);
-
-void
-videoEditOsal_startThread(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                int                                 stackSize,
-                M4OSA_ThreadDoIt                    callback,
-                M4OSA_Context*                      pContext,
-                void*                               pParam);
-
-void
-videoEditOsal_stopThread(
-                bool*                               pResult,
-                JNIEnv*                             pEnv,
-                M4OSA_Context*                      pContext);
-
-void
-videoEditOsal_getFilePointers ( M4OSA_FileReadPointer *pOsaFileReadPtr,
-                                M4OSA_FileWriterPointer *pOsaFileWritePtr);
-
-#endif // VIDEO_EDITOR_OSAL_H
-
diff --git a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp b/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
deleted file mode 100644
index ae1a80e..0000000
--- a/media/jni/mediaeditor/VideoEditorPropertiesMain.cpp
+++ /dev/null
@@ -1,533 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#define LOG_TAG "VideoEditorPropertiesMain"
-
-#include <dlfcn.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <utils/Log.h>
-#include <utils/threads.h>
-#include <VideoEditorClasses.h>
-#include <VideoEditorJava.h>
-#include <VideoEditorOsal.h>
-#include <VideoEditorLogging.h>
-#include <VideoEditorOsal.h>
-
-extern "C" {
-#include <M4OSA_Clock.h>
-#include <M4OSA_CharStar.h>
-#include <M4OSA_Error.h>
-#include <M4OSA_FileCommon.h>
-#include <M4OSA_FileReader.h>
-#include <M4OSA_FileWriter.h>
-#include <M4OSA_Memory.h>
-#include <M4OSA_Thread.h>
-#include <M4VSS3GPP_API.h>
-#include <M4VSS3GPP_ErrorCodes.h>
-#include <M4MCS_API.h>
-#include <M4MCS_ErrorCodes.h>
-#include <M4READER_Common.h>
-#include <M4WRITER_common.h>
-#include <M4DECODER_Common.h>
-#include <M4AD_Common.h>
-};
-
-extern "C" M4OSA_ERR M4MCS_open_normalMode(
-                M4MCS_Context                       pContext,
-                M4OSA_Void*                         pFileIn,
-                M4VIDEOEDITING_FileType             InputFileType,
-                M4OSA_Void*                         pFileOut,
-                M4OSA_Void*                         pTempFile);
-
-jobject videoEditProp_getProperties(
-                JNIEnv*                             pEnv,
-                jobject                             thiz,
-                jstring                             file);
-
-static void
-getFileAndMediaTypeFromExtension (
-                M4OSA_Char* pExtension,
-                VideoEditClasses_FileType   *pFileType,
-                M4VIDEOEDITING_FileType       *pClipType);
-
-static M4OSA_ERR
-getClipProperties(  JNIEnv*                         pEnv,
-                    jobject                         thiz,
-                    M4OSA_Char*                     pFile,
-                    M4VIDEOEDITING_FileType         clipType,
-                    M4VIDEOEDITING_ClipProperties*  pClipProperties);
-
-M4OSA_UInt32
-VideoEdit_chrCompare(M4OSA_Char* pStrIn1,
-                     M4OSA_Char* pStrIn2,
-                     M4OSA_Int32* pCmpResult);
-
-jobject videoEditProp_getProperties(
-        JNIEnv* pEnv,
-        jobject thiz,
-        jstring file)
-{
-    bool                           gotten          = true;
-    M4OSA_Char*                    pFile           = M4OSA_NULL;
-    M4OSA_Char*                    pExtension      = M4OSA_NULL;
-    M4OSA_UInt32                   index           = 0;
-    M4OSA_Int32                    cmpResult       = 0;
-    VideoEditPropClass_Properties* pProperties     = M4OSA_NULL;
-    M4VIDEOEDITING_ClipProperties* pClipProperties = M4OSA_NULL;
-    M4OSA_ERR                      result          = M4NO_ERROR;
-    M4MCS_Context                  context         = M4OSA_NULL;
-    M4OSA_FilePosition             size            = 0;
-    M4OSA_UInt32                   width           = 0;
-    M4OSA_UInt32                   height          = 0;
-    jobject                        properties      = NULL;
-    M4OSA_Context                  pOMXContext     = M4OSA_NULL;
-    M4DECODER_VideoInterface*      pOMXVidDecoderInterface = M4OSA_NULL;
-    M4AD_Interface*                pOMXAudDecoderInterface = M4OSA_NULL;
-
-    bool  initialized = true;
-    VideoEditClasses_FileType fileType = VideoEditClasses_kFileType_Unsupported;
-    M4VIDEOEDITING_FileType clipType = M4VIDEOEDITING_kFileType_Unsupported;
-
-    VIDEOEDIT_LOG_API(
-            ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",
-            "videoEditProp_getProperties()");
-
-    // Initialize the classes.
-    videoEditPropClass_init(&initialized, (JNIEnv*)pEnv);
-
-    // Validate the tempPath parameter.
-    videoEditJava_checkAndThrowIllegalArgumentException(
-            &gotten, pEnv, (NULL == file), "file is null");
-
-    // Get the file path.
-    pFile = (M4OSA_Char *)videoEditJava_getString(
-            &gotten, pEnv, file, NULL, M4OSA_NULL);
-
-    result = M4OSA_fileReadOpen(&context, (M4OSA_Void*)pFile, M4OSA_kFileRead);
-
-    if(M4NO_ERROR != result) {
-        // Free the file path.
-        videoEditOsal_free(pFile);
-        pFile = M4OSA_NULL;
-    }
-
-    videoEditJava_checkAndThrowIllegalArgumentException(&gotten, pEnv,
-        (M4NO_ERROR != result), "file not found");
-
-    // Close the file and free the file context
-    if (context != NULL) {
-        result = M4OSA_fileReadClose(context);
-        context = M4OSA_NULL;
-    }
-
-    // Return if Error
-    if (M4NO_ERROR != result) {
-        return (properties); // NULL
-    }
-
-    // Check if the file path is valid.
-    if (gotten)
-    {
-        // Retrieve the extension.
-        pExtension = (M4OSA_Char *)strrchr((const char *)pFile, (int)'.');
-        if (M4OSA_NULL != pExtension)
-        {
-            // Skip the dot.
-            pExtension++;
-
-            // Get the file type and Media type from extension
-            getFileAndMediaTypeFromExtension(
-                    pExtension ,&fileType, &clipType);
-        }
-    }
-
-    // Check if the file type could be determined.
-    videoEditJava_checkAndThrowIllegalArgumentException(
-            &gotten, pEnv,
-            (VideoEditClasses_kFileType_Unsupported == fileType),
-            "file type is not supported");
-
-    // Allocate a new properties structure.
-    pProperties = (VideoEditPropClass_Properties*)videoEditOsal_alloc(
-            &gotten, pEnv,
-            sizeof(VideoEditPropClass_Properties), "Properties");
-
-    // Check if the context is valid and allocation succeeded
-    // (required because of dereferencing of pProperties).
-    if (gotten)
-    {
-        // Check if this type of file needs to be analyzed using MCS.
-        if ((VideoEditClasses_kFileType_MP3  == fileType) ||
-            (VideoEditClasses_kFileType_MP4  == fileType) ||
-            (VideoEditClasses_kFileType_3GPP == fileType) ||
-            (VideoEditClasses_kFileType_AMR  == fileType) ||
-            (VideoEditClasses_kFileType_PCM  == fileType) ||
-            (VideoEditClasses_kFileType_M4V  == fileType))
-        {
-            // Allocate a new clip properties structure.
-            pClipProperties =
-                (M4VIDEOEDITING_ClipProperties*)videoEditOsal_alloc(
-                    &gotten, pEnv,
-                    sizeof(M4VIDEOEDITING_ClipProperties), "ClipProperties");
-
-            // Check if allocation succeeded (required because of
-            // dereferencing of pClipProperties).
-            if (gotten)
-            {
-                // Log the API call.
-                VIDEOEDIT_LOG_API(
-                        ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",
-                        "getClipProperties");
-
-                // Get Video clip properties
-                result = getClipProperties(
-                        pEnv, thiz, pFile, clipType, pClipProperties);
-
-                if (M4MCS_ERR_FILE_DRM_PROTECTED == result) {
-                    // Check if the creation succeeded.
-                    videoEditJava_checkAndThrowIllegalArgumentException(
-                            &gotten, pEnv,(M4NO_ERROR != result),
-                            "Invalid File - DRM Protected ");
-                } else {
-                    // Check if the creation succeeded.
-                    videoEditJava_checkAndThrowIllegalArgumentException(
-                            &gotten, pEnv,(M4NO_ERROR != result),
-                            "Invalid File or File not found ");
-                }
-
-#ifdef USE_SOFTWARE_DECODER
-                /**
-                 * Input clip with non-multiples of 16 is not supported.
-                 */
-                if ( (pClipProperties->uiVideoWidth %16)
-                    || (pClipProperties->uiVideoHeight %16) )
-                {
-                    result = M4MCS_ERR_INPUT_VIDEO_SIZE_NON_X16;
-                    videoEditJava_checkAndThrowIllegalArgumentException(
-                            &gotten, pEnv, (M4NO_ERROR != result),
-                            "non x16 input video frame size is not supported");
-                }
-#endif /* USE_SOFTWARE_DECODER */
-            }
-
-            // Check if the properties could be retrieved.
-            if (gotten)
-            {
-                // Set the properties.
-                pProperties->uiClipDuration = pClipProperties->uiClipDuration;
-                if (M4VIDEOEDITING_kFileType_Unsupported == pClipProperties->FileType)
-                {
-                    pProperties->FileType        = VideoEditClasses_kFileType_Unsupported;
-                }
-                else
-                {
-                    pProperties->FileType        = fileType;
-                }
-                pProperties->VideoStreamType     = pClipProperties->VideoStreamType;
-                pProperties->uiClipVideoDuration = pClipProperties->uiClipVideoDuration;
-                pProperties->uiVideoBitrate      = pClipProperties->uiVideoBitrate;
-                pProperties->uiVideoWidth        = pClipProperties->uiVideoWidth;
-                pProperties->uiVideoHeight       = pClipProperties->uiVideoHeight;
-                pProperties->fAverageFrameRate   = pClipProperties->fAverageFrameRate;
-                pProperties->uiVideoProfile      = pClipProperties->uiVideoProfile;
-                pProperties->uiVideoLevel        = pClipProperties->uiVideoLevel;
-                // Set profile and level support to TRUE, pending check
-                pProperties->bProfileSupported   = M4OSA_TRUE;
-                pProperties->bLevelSupported     = M4OSA_TRUE;
-                pProperties->AudioStreamType     = pClipProperties->AudioStreamType;
-                pProperties->uiClipAudioDuration = pClipProperties->uiClipAudioDuration;
-                pProperties->uiAudioBitrate      = pClipProperties->uiAudioBitrate;
-                pProperties->uiNbChannels        = pClipProperties->uiNbChannels;
-                pProperties->uiSamplingFrequency = pClipProperties->uiSamplingFrequency;
-                pProperties->uiRotation          = pClipProperties->videoRotationDegrees;
-
-            }
-
-            // Free the clip properties.
-            videoEditOsal_free(pClipProperties);
-            pClipProperties = M4OSA_NULL;
-        }
-        else if ((VideoEditClasses_kFileType_JPG == fileType) ||
-            (VideoEditClasses_kFileType_GIF == fileType) ||
-            (VideoEditClasses_kFileType_PNG == fileType))
-        {
-            pProperties->uiClipDuration      = 0;
-            pProperties->FileType            = fileType;
-            pProperties->VideoStreamType     = M4VIDEOEDITING_kNoneVideo;
-            pProperties->uiClipVideoDuration = 0;
-            pProperties->uiVideoBitrate      = 0;
-            pProperties->uiVideoWidth        = width;
-            pProperties->uiVideoHeight       = height;
-            pProperties->fAverageFrameRate   = 0.0f;
-            pProperties->uiVideoProfile = M4VIDEOEDITING_VIDEO_UNKNOWN_PROFILE;
-            pProperties->uiVideoLevel = M4VIDEOEDITING_VIDEO_UNKNOWN_LEVEL;
-            pProperties->AudioStreamType     = M4VIDEOEDITING_kNoneAudio;
-            pProperties->uiClipAudioDuration = 0;
-            pProperties->uiAudioBitrate      = 0;
-            pProperties->uiNbChannels        = 0;
-            pProperties->uiSamplingFrequency = 0;
-
-            // Added for Handling invalid paths and non existent image files
-            // Open the file for reading.
-            result = M4OSA_fileReadOpen(&context, (M4OSA_Void*)pFile, M4OSA_kFileRead);
-            if (M4NO_ERROR != result)
-            {
-                pProperties->FileType = VideoEditClasses_kFileType_Unsupported;
-            }
-            result = M4OSA_fileReadClose(context);
-            context = M4OSA_NULL;
-        }
-    }
-
-    if (M4NO_ERROR == result) {
-        // Create a properties object.
-        videoEditPropClass_createProperties(&gotten, pEnv, pProperties, &properties);
-
-        // Log the properties.
-        VIDEOEDIT_PROP_LOG_PROPERTIES(pProperties);
-    }
-
-    // Free the properties.
-    videoEditOsal_free(pProperties);
-    pProperties = M4OSA_NULL;
-
-    // Free the file path.
-    videoEditOsal_free(pFile);
-    pFile = M4OSA_NULL;
-
-    // Return the Properties object.
-    return(properties);
-}
-
-static void getFileAndMediaTypeFromExtension (
-        M4OSA_Char *pExtension,
-        VideoEditClasses_FileType *pFileType,
-        M4VIDEOEDITING_FileType *pClipType)
-{
-    M4OSA_Char extension[5] = {0, 0, 0, 0, 0};
-    VideoEditClasses_FileType fileType =
-            VideoEditClasses_kFileType_Unsupported;
-
-    M4VIDEOEDITING_FileType clipType =
-            M4VIDEOEDITING_kFileType_Unsupported;
-
-    M4OSA_UInt32 index = 0;
-    M4OSA_ERR result = M4NO_ERROR;
-    M4OSA_Int32 cmpResult = 0;
-    M4OSA_UInt32  extLength = strlen((const char *)pExtension);
-
-    // Assign default
-    *pFileType = VideoEditClasses_kFileType_Unsupported;
-    *pClipType = M4VIDEOEDITING_kFileType_Unsupported;
-
-    // Check if the length of the extension is valid.
-    if ((3 == extLength) || (4 == extLength))
-    {
-        // Convert the extension to lowercase.
-        for (index = 0; index < extLength ; index++)
-        {
-            extension[index] = tolower((int)pExtension[index]);
-        }
-
-        // Check if the extension is ".mp3".
-        if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"mp3", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_MP3;
-            *pClipType = M4VIDEOEDITING_kFileType_MP3;
-        }
-        // Check if the extension is ".mp4".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"mp4", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_MP4;
-            *pClipType = M4VIDEOEDITING_kFileType_MP4;
-        }
-        // Check if the extension is ".3gp".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"3gp", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_3GPP;
-            *pClipType = M4VIDEOEDITING_kFileType_3GPP;
-        }
-        // Check if the extension is ".m4a".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"m4a", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_3GPP;
-            *pClipType = M4VIDEOEDITING_kFileType_3GPP;
-        }
-        // Check if the extension is ".3gpp".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"3gpp", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_3GPP;
-            *pClipType = M4VIDEOEDITING_kFileType_3GPP;
-        }
-        // Check if the extension is ".amr".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"amr", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_AMR;
-            *pClipType = M4VIDEOEDITING_kFileType_AMR;
-        }
-        // Check if the extension is ".pcm".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"pcm", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_PCM;
-            *pClipType = M4VIDEOEDITING_kFileType_PCM;
-        }
-        // Check if the extension is ".jpg".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"jpg", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_JPG;
-        }
-        // Check if the extension is ".jpeg".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"jpeg", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_JPG;
-        }
-        // Check if the extension is ".gif".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"gif", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_GIF;
-        }
-        // Check if the extension is ".png".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"png", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_PNG;
-        }
-        // Check if the extension is ".m4v".
-        else if (!(VideoEdit_chrCompare(extension, (M4OSA_Char*)"m4v", &cmpResult)))
-        {
-            *pFileType = VideoEditClasses_kFileType_M4V;
-            *pClipType = M4VIDEOEDITING_kFileType_M4V;
-        }
-    }
-}
-
-static M4OSA_ERR getClipProperties(
-        JNIEnv* pEnv,
-        jobject thiz,
-        M4OSA_Char* pFile,
-        M4VIDEOEDITING_FileType clipType,
-        M4VIDEOEDITING_ClipProperties* pClipProperties)
-{
-    bool                      gotten          = true;
-    M4OSA_ERR                 result          = M4NO_ERROR;
-    M4OSA_ERR                 resultAbort     = M4NO_ERROR;
-    M4MCS_Context             context         = M4OSA_NULL;
-
-    M4OSA_FileReadPointer fileReadPtr =
-            { M4OSA_NULL, M4OSA_NULL, M4OSA_NULL,
-              M4OSA_NULL, M4OSA_NULL, M4OSA_NULL };
-
-    M4OSA_FileWriterPointer fileWritePtr =
-            { M4OSA_NULL, M4OSA_NULL, M4OSA_NULL,
-              M4OSA_NULL, M4OSA_NULL, M4OSA_NULL, M4OSA_NULL };
-
-    // Initialize the OSAL file system function pointers.
-    videoEditOsal_getFilePointers(&fileReadPtr , &fileWritePtr);
-
-    // Log the API call.
-    VIDEOEDIT_LOG_API(
-            ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",\
-            "getClipProperties - M4MCS_init()");
-
-    // Initialize the MCS context.
-    result = M4MCS_init(&context, &fileReadPtr, &fileWritePtr);
-
-    // Log the result.
-    VIDEOEDIT_PROP_LOG_RESULT(
-            ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES", "%s",
-            videoEditOsal_getResultString(result));
-
-    // Check if the creation succeeded.
-    videoEditJava_checkAndThrowRuntimeException(
-            &gotten, pEnv, (M4NO_ERROR != result), result);
-
-    // Check if opening the MCS context succeeded.
-    if (gotten)
-    {
-        // Log the API call.
-        VIDEOEDIT_LOG_API(
-                ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",
-                "getClipProperties - M4MCS_open_normalMode()");
-
-        // Open the MCS in the normal opening mode to
-        // retrieve the exact duration
-        result = M4MCS_open_normalMode(
-                context, pFile, clipType, M4OSA_NULL, M4OSA_NULL);
-
-        // Log the result.
-        VIDEOEDIT_PROP_LOG_RESULT(
-                ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES", "%s",
-                videoEditOsal_getResultString(result));
-
-        // Check if the creation succeeded.
-        videoEditJava_checkAndThrowRuntimeException(
-                &gotten, pEnv, (M4NO_ERROR != result), result);
-
-        // Check if the MCS could be opened.
-        if (gotten)
-        {
-            // Log the API call.
-            VIDEOEDIT_LOG_API(
-                    ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",
-                    "getClipProperties - M4MCS_getInputFileProperties()");
-
-            // Get the properties.
-            result = M4MCS_getInputFileProperties(context, pClipProperties);
-
-            // Log the result.
-            VIDEOEDIT_PROP_LOG_RESULT(
-                    ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES", "%s",
-                    videoEditOsal_getResultString(result));
-
-            // Check if the creation succeeded.
-            videoEditJava_checkAndThrowRuntimeException(
-                    &gotten, pEnv, (M4NO_ERROR != result), result);
-        }
-
-        // Log the API call.
-        VIDEOEDIT_LOG_API(
-                ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES",
-                "getClipProperties - M4MCS_abort()");
-
-        // Close the MCS session.
-        resultAbort = M4MCS_abort(context);
-
-       if (result == M4NO_ERROR) {
-            // Log the result.
-            VIDEOEDIT_PROP_LOG_RESULT(
-                    ANDROID_LOG_INFO, "VIDEO_EDITOR_PROPERTIES", "%s",
-                    videoEditOsal_getResultString(resultAbort));
-
-            // Check if the abort succeeded.
-            videoEditJava_checkAndThrowRuntimeException(
-                    &gotten, pEnv, (M4NO_ERROR != resultAbort), resultAbort);
-            result = resultAbort;
-        }
-    }
-
-    return result;
-}
-
-M4OSA_UInt32
-VideoEdit_chrCompare(M4OSA_Char* pStrIn1,
-                     M4OSA_Char* pStrIn2,
-                      M4OSA_Int32* pCmpResult)
-{
-    *pCmpResult = strcmp((const char *)pStrIn1, (const char *)pStrIn2);
-    return *pCmpResult;
-}
-
-
diff --git a/media/jni/mediaeditor/VideoEditorThumbnailMain.cpp b/media/jni/mediaeditor/VideoEditorThumbnailMain.cpp
deleted file mode 100644
index 1508246..0000000
--- a/media/jni/mediaeditor/VideoEditorThumbnailMain.cpp
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-
-#include <jni.h>
-#include <JNIHelp.h>
-#include <utils/Log.h>
-#include "VideoBrowserMain.h"
-#include "VideoBrowserInternal.h"
-
-#if (M4OSA_TRACE_LEVEL >= 1)
-#undef M4OSA_TRACE1_0
-#undef M4OSA_TRACE1_1
-#undef M4OSA_TRACE1_2
-#undef M4OSA_TRACE1_3
-
-#define M4OSA_TRACE1_0(a)       __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a);
-#define M4OSA_TRACE1_1(a,b)     __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b);
-#define M4OSA_TRACE1_2(a,b,c)   __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b,c);
-#define M4OSA_TRACE1_3(a,b,c,d) __android_log_print(ANDROID_LOG_INFO, "Thumbnail", a,b,c,d);
-#endif
-
-/*
- * Memory format of 'ARGB8888' in skia is RGBA, so ABGR in 32bit little-endian packed format
- * bitmap format is rgb565
- */
-//                                RED                 GREEN               BLUE            ALPHA
-#define RGB565toSKCOLOR(c) ( (((c)&0xF800)>>8) | (((c)&0x7E0)<<5) | (((c)&0x1F)<<19) | 0xFF000000)
-
-#define GetIntField(env, obj, name) env->GetIntField(obj,\
-env->GetFieldID(env->GetObjectClass(obj), name, "I"))
-
-extern "C" M4OSA_ERR NXPSW_FileReaderOptim_init(M4OSA_Void *lowLevel_functionPointers,
-        M4OSA_Void *optimized_functionPointers);
-
-/*
- * Video Browser execution context.
- * Based on request for RGB565 or RGB888, m_dst16 or m_dst32
- * will be initialized and used
- */
-typedef struct
-{
-    M4OSA_Context       m_pVideoBrowser;
-    M4OSA_UInt32        m_previousTime;
-    M4OSA_Int32*        m_dst32;
-    M4OSA_Int16*        m_dst16;
-    unsigned int        m_width;
-    unsigned int        m_height;
-    M4OSA_Bool          m_bRender;
-} ThumbnailContext;
-
-/**
- ************************************************************************
- * @brief    Interface to retrieve the thumbnail pixels
- * @param    pContext   (IN)    Thumbnail Context.
- * @param    width      (IN)    Width of thumbnail
- * @param    height     (IN)    Height of thumbnail
- * @param    pTimeMS    (IN/OUT)Time stamp at which thumbnail is retrieved.
- ************************************************************************
-*/
-M4OSA_ERR ThumbnailGetPixels(const M4OSA_Context pContext,
-                             M4OSA_Int32* pixelArray,
-                             M4OSA_UInt32 width, M4OSA_UInt32 height,
-                             M4OSA_UInt32* pTimeMS, M4OSA_UInt32 tolerance);
-
-
-/**
- ************************************************************************
- * @brief    Video browser callback, called when a frame must be displayed
- * @param    pInstance          (IN) Thumbnail context.
- * @param    notificationID     (IN) Id of the callback which generated the error
- * @param    errCode            (IN) Error code from the Core
- * @param    pCbData            (IN) pointer to data associated wit the callback.
- * @param    pCbUserData        (IN) pointer to application user data passed in init.
- * @note     This callback mechanism is used to request display of an image
- ************************************************************************
-*/
-M4OSA_Void VBcallback(  M4OSA_Context  pInstance,
-                        VideoBrowser_Notification notificationID,
-                        M4OSA_ERR errCode, M4OSA_Void* pCbData,
-                        M4OSA_Void* pCallbackUserData)
-{
-    M4OSA_UInt32 i, j;
-    M4OSA_ERR err;
-
-    M4OSA_TRACE3_0("inside VBcallback");
-    M4VIFI_ImagePlane* pPlane=NULL;
-    M4OSA_UInt16* src=NULL;
-    ThumbnailContext* pC = NULL;
-
-    CHECK_PTR(VBcallback, pCbData, err, M4ERR_PARAMETER);
-    CHECK_PTR(VBcallback, pInstance,err, M4ERR_PARAMETER);
-
-    pC = (ThumbnailContext*)pCallbackUserData ;
-    CHECK_PTR(VBcallback, pC->m_pVideoBrowser, err, M4ERR_PARAMETER);
-
-    pPlane = (M4VIFI_ImagePlane*)pCbData;
-    src = (M4OSA_UInt16*)pPlane->pac_data;
-
-    if (pC->m_dst32 != NULL)
-    {
-        M4OSA_Int32* dst = pC->m_dst32;
-
-        for (j = 0; j < pPlane->u_height; j++)
-        {
-            for (i = 0; i < pPlane->u_width; i++)
-            {
-                dst[i] = RGB565toSKCOLOR(src[i]);
-            }
-            for (i = pPlane->u_width; i < pC->m_width; i++)
-            {
-                dst[i] = 0;
-            }
-            src = (M4OSA_UInt16*)((M4OSA_UInt8*)src + pPlane->u_stride);
-            dst += pC->m_width;
-        }
-    }
-    else if (pC->m_dst16 != NULL)
-    {
-        M4OSA_Int16* dst = pC->m_dst16;
-
-        for (j = 0; j < pPlane->u_height; j++)
-        {
-            memcpy((void * )dst, (void * )src, pPlane->u_stride);
-            for (i = pPlane->u_width; i < pC->m_width; i++)
-            {
-                dst[i] = 0;
-            }
-            src = (M4OSA_UInt16*)((M4OSA_UInt8*)src + pPlane->u_stride);
-            dst += pC->m_width;
-        }
-    }
-    else
-    {
-        CHECK_PTR(VBcallback, NULL, err, M4ERR_PARAMETER);
-    }
-
-VBcallback_cleanUp:
-
-    return;
-}
-
-M4OSA_ERR ThumbnailOpen(M4OSA_Context *pPContext,
-                  const M4OSA_Char *pString,
-                  M4OSA_Bool bRender)
-{
-
-    M4OSA_ERR err;
-    ThumbnailContext *pContext = M4OSA_NULL;
-    VideoBrowser_VideoColorType vbColorType;
-
-    CHECK_PTR(ThumbnailOpen, pString, err, M4ERR_BAD_CONTEXT);
-
-    /*--- Create context ---*/
-    pContext = (ThumbnailContext*)M4OSA_32bitAlignedMalloc(sizeof(ThumbnailContext), VIDEOBROWSER,
-        (M4OSA_Char*)"Thumbnail context") ;
-    M4OSA_TRACE3_1("context value is = %d",pContext);
-    CHECK_PTR(ThumbnailOpen, pContext, err, M4ERR_ALLOC);
-
-    memset((void *)pContext, 0,sizeof(ThumbnailContext));
-
-    M4OSA_FileReadPointer optFP;
-    M4OSA_FileReadPointer llFP;
-
-    NXPSW_FileReaderOptim_init(&llFP, &optFP);
-    M4OSA_TRACE1_2("ThumbnailOpen: entering videoBrowserCreate with 0x%x %s",
-        &pContext->m_pVideoBrowser, pString) ;
-
-    pContext->m_bRender = bRender;
-    if (bRender == M4OSA_TRUE) {
-        //Open is called for rendering the frame.
-        //So set YUV420 as the output color format.
-        vbColorType = VideoBrowser_kYUV420;
-    } else {
-        //Open is called for thumbnail Extraction
-        //So set BGR565 as the output.
-        vbColorType = VideoBrowser_kGB565;
-    }
-
-    err = videoBrowserCreate(&pContext->m_pVideoBrowser, (M4OSA_Char*)pString,
-        VideoBrowser_kVBNormalBliting, &optFP, VBcallback, pContext, vbColorType);
-
-    M4OSA_TRACE1_1("err value is = 0x%x",err);
-    CHECK_ERR(ThumbnailOpen, err);
-    CHECK_PTR(ThumbnailOpen, pContext->m_pVideoBrowser, err, M4ERR_ALLOC);
-
-    *pPContext = pContext;
-    M4OSA_TRACE1_1("context value is = %d",*pPContext);
-
-    return M4NO_ERROR;
-
-ThumbnailOpen_cleanUp:
-
-    M4OSA_TRACE1_0("i am inside cleanUP");
-    if (M4OSA_NULL != pContext)
-    {
-        if (M4OSA_NULL != pContext->m_pVideoBrowser)
-        {
-            videoBrowserCleanUp(pContext->m_pVideoBrowser) ;
-        }
-        free(pContext) ;
-    }
-    return err;
-}
-
-M4OSA_ERR ThumbnailGetPixels(const M4OSA_Context pContext,
-                             M4OSA_Int32* pixelArray,
-                             M4OSA_UInt32 width, M4OSA_UInt32 height,
-                             M4OSA_UInt32* pTimeMS, M4OSA_UInt32 tolerance)
-{
-    M4OSA_ERR err;
-
-    ThumbnailContext* pC = (ThumbnailContext*)pContext;
-
-    if ((pC->m_width != width) || (pC->m_height != height))
-    {
-        err = videoBrowserSetWindow(pC->m_pVideoBrowser, pixelArray,
-                                      0, 0, width, height);
-        CHECK_ERR(ThumbnailGetPixels, err);
-        pC->m_width  = width;
-        pC->m_height = height;
-    }
-
-    // Alter the pTimeMS to a valid value at which a frame is found
-    // m_currentCTS has the actual frame time stamp just ahead of the
-    // pTimeMS supplied.
-    if ((((VideoBrowserContext*)pC->m_pVideoBrowser)->m_currentCTS != 0) &&
-        (*pTimeMS >= pC->m_previousTime) &&
-        (*pTimeMS < ((VideoBrowserContext*)pC->m_pVideoBrowser)->m_currentCTS))
-    {
-        pC->m_previousTime = *pTimeMS;
-        *pTimeMS = ((VideoBrowserContext*)pC->m_pVideoBrowser)->m_currentCTS;
-    }
-    else
-    {
-        pC->m_previousTime = *pTimeMS;
-    }
-
-    err = videoBrowserPrepareFrame(pC->m_pVideoBrowser, pTimeMS, tolerance);
-    CHECK_ERR(ThumbnailGetPixels, err);
-
-    if (pC->m_bRender != M4OSA_TRUE) {
-        err = videoBrowserDisplayCurrentFrame(pC->m_pVideoBrowser);
-        CHECK_ERR(ThumbnailGetPixels, err);
-    }
-
-ThumbnailGetPixels_cleanUp:
-
-    return err;
-}
-
-M4OSA_ERR ThumbnailGetPixels32(const M4OSA_Context pContext,
-                         M4OSA_Int32* pixelArray, M4OSA_UInt32 width,
-                         M4OSA_UInt32 height, M4OSA_UInt32* timeMS,
-                         M4OSA_UInt32 tolerance)
-{
-
-    M4OSA_ERR err = M4NO_ERROR;
-
-    ThumbnailContext* pC = (ThumbnailContext*)pContext;
-
-    CHECK_PTR(ThumbnailGetPixels32, pC->m_pVideoBrowser, err, M4ERR_ALLOC) ;
-    CHECK_PTR(ThumbnailGetPixels32, pixelArray, err, M4ERR_ALLOC) ;
-
-    pC->m_dst16 = NULL;
-    pC->m_dst32 = pixelArray;
-
-    err = ThumbnailGetPixels(pContext, pixelArray, width, height, timeMS, tolerance);
-
-ThumbnailGetPixels32_cleanUp:
-
-    return err;
-}
-
-M4OSA_ERR ThumbnailGetPixels16(const M4OSA_Context pContext,
-                         M4OSA_Int16* pixelArray, M4OSA_UInt32 width,
-                         M4OSA_UInt32 height, M4OSA_UInt32* timeMS,
-                         M4OSA_UInt32 tolerance)
-{
-    M4OSA_ERR err = M4NO_ERROR;
-
-    ThumbnailContext* pC = (ThumbnailContext*)pContext;
-
-    CHECK_PTR(ThumbnailGetPixels16, pC->m_pVideoBrowser, err, M4ERR_ALLOC);
-    CHECK_PTR(ThumbnailGetPixels16, pixelArray, err, M4ERR_ALLOC);
-
-    pC->m_dst16 = pixelArray;
-    pC->m_dst32 = NULL;
-
-    err = ThumbnailGetPixels(pContext, (M4OSA_Int32*)pixelArray, width, height,
-            timeMS, tolerance);
-
-ThumbnailGetPixels16_cleanUp:
-
-    return err;
-}
-
-
-void ThumbnailClose(const M4OSA_Context pContext)
-{
-    M4OSA_ERR err;
-
-    ThumbnailContext* pC = (ThumbnailContext*)pContext;
-
-    CHECK_PTR(ThumbnailClose, pC, err, M4ERR_ALLOC);
-
-    if (M4OSA_NULL != pC)
-    {
-        if (M4OSA_NULL != pC->m_pVideoBrowser)
-        {
-            videoBrowserCleanUp(pC->m_pVideoBrowser);
-        }
-        free(pC);
-    }
-
-ThumbnailClose_cleanUp:
-
-    return;
-}
-
diff --git a/media/jni/mediaeditor/VideoEditorThumbnailMain.h b/media/jni/mediaeditor/VideoEditorThumbnailMain.h
deleted file mode 100644
index 0b3b0c8..0000000
--- a/media/jni/mediaeditor/VideoEditorThumbnailMain.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-#ifndef VIDEOEDITOR_THUMBNAIL_MAIN_H
-#define VIDEOEDITOR_THUMBNAIL_MAIN_H
-
-/**
- ************************************************************************
- * @file        VideoEditorThumbnailMain.h
- * @brief       Thumbnail extract interface.
- ************************************************************************
-*/
-
-/**
- ************************************************************************
- * @brief    Interface to open a Thumbnail session.
- * @param    pContext   (OUT)   Thumbnail Context.
- * @param    pString    (IN)    File path from which thumbnail will be
- *                              retrieved
- * @param    M4OSA_Bool (IN)    true if this is for rendering at native layer.
- ************************************************************************
-*/
-M4OSA_ERR ThumbnailOpen(M4OSA_Context *pPContext,
-                  const M4OSA_Char *pString,
-                  M4OSA_Bool bRender);
-
-/**
- ************************************************************************
- * @brief    Interface to retrieve a RGB888 format thumbnail pixels
- * @param    pContext   (IN)    Thumbnail Context.
- * @param    pixelArray (OUT)   Pointer to array in which pixels data to return
- * @param    width      (IN)    Width of thumbnail
- * @param    height     (IN)    Height of thumbnail
- * @param    pTimeMS    (IN/OUT)Time stamp at which thumbnail is retrieved.
- ************************************************************************
-*/
-M4OSA_ERR ThumbnailGetPixels32(const M4OSA_Context pContext,
-                             M4OSA_Int32* pixelArray, M4OSA_UInt32 width,
-                             M4OSA_UInt32 height, M4OSA_UInt32 *timeMS,
-                             M4OSA_UInt32 tolerance);
-
-/**
- ************************************************************************
- * @brief    Interface to retrieve a RGB565 format thumbnail pixels
- * @param    pContext   (IN)    Thumbnail Context.
- * @param    pixelArray (OUT)   Pointer to array in which pixcel data to return
- * @param    width      (IN)    Width of thumbnail
- * @param    height     (IN)    Height of thumbnail
- * @param    pTimeMS    (IN/OUT)Time stamp at which thumbnail is retrieved.
- ************************************************************************
-*/
-M4OSA_ERR ThumbnailGetPixels16(const M4OSA_Context pContext,
-                             M4OSA_Int16* pixelArray, M4OSA_UInt32 width,
-                             M4OSA_UInt32 height, M4OSA_UInt32 *timeMS,
-                             M4OSA_UInt32 tolerance);
-
-/**
- ************************************************************************
- * @brief    Interface to close the Thumbnail session.
- * @param    pContext   (IN)    Thumbnail Context.
- ************************************************************************
-*/
-void ThumbnailClose(const M4OSA_Context pContext);
-
-#endif // VIDEOEDITOR_THUMBNAIL_MAIN_H
diff --git a/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp b/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp
index 9cc55ab..bda3b6b 100644
--- a/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp
+++ b/media/jni/soundpool/android_media_SoundPool_SoundPoolImpl.cpp
@@ -229,7 +229,7 @@
         "(I)Z",
         (void *)android_media_SoundPool_SoundPoolImpl_unload
     },
-    {   "play",
+    {   "_play",
         "(IFFIIF)I",
         (void *)android_media_SoundPool_SoundPoolImpl_play
     },
@@ -253,7 +253,7 @@
         "(I)V",
         (void *)android_media_SoundPool_SoundPoolImpl_stop
     },
-    {   "setVolume",
+    {   "_setVolume",
         "(IFF)V",
         (void *)android_media_SoundPool_SoundPoolImpl_setVolume
     },
diff --git a/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplay.java b/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplay.java
index 6cfc0e8..dc9dd79 100644
--- a/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplay.java
+++ b/media/lib/remotedisplay/java/com/android/media/remotedisplay/RemoteDisplay.java
@@ -16,7 +16,6 @@
 
 package com.android.media.remotedisplay;
 
-import android.media.MediaRouter;
 import android.media.RemoteDisplayState.RemoteDisplayInfo;
 import android.text.TextUtils;
 
diff --git a/media/mca/effect/java/android/media/effect/EffectContext.java b/media/mca/effect/java/android/media/effect/EffectContext.java
index ef03229..a11b9c4 100644
--- a/media/mca/effect/java/android/media/effect/EffectContext.java
+++ b/media/mca/effect/java/android/media/effect/EffectContext.java
@@ -19,10 +19,7 @@
 
 import android.filterfw.core.CachedFrameManager;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.FilterFactory;
 import android.filterfw.core.GLEnvironment;
-import android.filterfw.core.GLFrame;
-import android.filterfw.core.FrameManager;
 import android.opengl.GLES20;
 
 /**
diff --git a/media/mca/effect/java/android/media/effect/EffectFactory.java b/media/mca/effect/java/android/media/effect/EffectFactory.java
index 4330279..f6fcba7 100644
--- a/media/mca/effect/java/android/media/effect/EffectFactory.java
+++ b/media/mca/effect/java/android/media/effect/EffectFactory.java
@@ -18,7 +18,6 @@
 package android.media.effect;
 
 import java.lang.reflect.Constructor;
-import java.util.HashMap;
 
 /**
  * <p>The EffectFactory class defines the list of available Effects, and provides functionality to
diff --git a/media/mca/effect/java/android/media/effect/FilterEffect.java b/media/mca/effect/java/android/media/effect/FilterEffect.java
index d7c319e..34b3549 100644
--- a/media/mca/effect/java/android/media/effect/FilterEffect.java
+++ b/media/mca/effect/java/android/media/effect/FilterEffect.java
@@ -17,10 +17,7 @@
 
 package android.media.effect;
 
-import android.filterfw.core.CachedFrameManager;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.FilterFactory;
-import android.filterfw.core.GLEnvironment;
 import android.filterfw.core.GLFrame;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
diff --git a/media/mca/effect/java/android/media/effect/FilterGraphEffect.java b/media/mca/effect/java/android/media/effect/FilterGraphEffect.java
index b18bea8..80c695b 100644
--- a/media/mca/effect/java/android/media/effect/FilterGraphEffect.java
+++ b/media/mca/effect/java/android/media/effect/FilterGraphEffect.java
@@ -19,17 +19,13 @@
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterGraph;
 import android.filterfw.core.GraphRunner;
-import android.filterfw.core.SimpleScheduler;
 import android.filterfw.core.SyncRunner;
-import android.media.effect.Effect;
 import android.media.effect.FilterEffect;
 import android.media.effect.EffectContext;
 import android.filterfw.io.GraphIOException;
 import android.filterfw.io.GraphReader;
 import android.filterfw.io.TextGraphReader;
 
-import android.util.Log;
-
 /**
  * Effect subclass for effects based on a single Filter. Subclasses need only invoke the
  * constructor with the correct arguments to obtain an Effect implementation.
diff --git a/media/mca/effect/java/android/media/effect/SingleFilterEffect.java b/media/mca/effect/java/android/media/effect/SingleFilterEffect.java
index 6f85861..47900df 100644
--- a/media/mca/effect/java/android/media/effect/SingleFilterEffect.java
+++ b/media/mca/effect/java/android/media/effect/SingleFilterEffect.java
@@ -21,11 +21,8 @@
 import android.filterfw.core.FilterFactory;
 import android.filterfw.core.FilterFunction;
 import android.filterfw.core.Frame;
-import android.media.effect.Effect;
 import android.media.effect.EffectContext;
 
-import android.util.Log;
-
 /**
  * Effect subclass for effects based on a single Filter. Subclasses need only invoke the
  * constructor with the correct arguments to obtain an Effect implementation.
diff --git a/media/mca/effect/java/android/media/effect/SizeChangeEffect.java b/media/mca/effect/java/android/media/effect/SizeChangeEffect.java
index 4d27bae..1bf7d40 100644
--- a/media/mca/effect/java/android/media/effect/SizeChangeEffect.java
+++ b/media/mca/effect/java/android/media/effect/SizeChangeEffect.java
@@ -16,15 +16,9 @@
 
 package android.media.effect;
 
-import android.filterfw.core.Filter;
-import android.filterfw.core.FilterFactory;
-import android.filterfw.core.FilterFunction;
 import android.filterfw.core.Frame;
-import android.media.effect.Effect;
 import android.media.effect.EffectContext;
 
-import android.util.Log;
-
 /**
  * Effect subclass for effects based on a single Filter with output size differnet
  * from input.  Subclasses need only invoke the constructor with the correct arguments
diff --git a/media/mca/effect/java/android/media/effect/effects/CropEffect.java b/media/mca/effect/java/android/media/effect/effects/CropEffect.java
index 3e8d78a..7e1c495 100644
--- a/media/mca/effect/java/android/media/effect/effects/CropEffect.java
+++ b/media/mca/effect/java/android/media/effect/effects/CropEffect.java
@@ -19,7 +19,6 @@
 
 import android.media.effect.EffectContext;
 import android.media.effect.SizeChangeEffect;
-import android.media.effect.SingleFilterEffect;
 import android.filterpacks.imageproc.CropRectFilter;
 
 /**
diff --git a/media/mca/filterfw/java/android/filterfw/FilterFunctionEnvironment.java b/media/mca/filterfw/java/android/filterfw/FilterFunctionEnvironment.java
index 3f36d98..feaf6e8 100644
--- a/media/mca/filterfw/java/android/filterfw/FilterFunctionEnvironment.java
+++ b/media/mca/filterfw/java/android/filterfw/FilterFunctionEnvironment.java
@@ -20,7 +20,6 @@
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterFactory;
 import android.filterfw.core.FilterFunction;
-import android.filterfw.core.Frame;
 import android.filterfw.core.FrameManager;
 
 /**
diff --git a/media/mca/filterfw/java/android/filterfw/core/AsyncRunner.java b/media/mca/filterfw/java/android/filterfw/core/AsyncRunner.java
index 70cbad4..819774a 100644
--- a/media/mca/filterfw/java/android/filterfw/core/AsyncRunner.java
+++ b/media/mca/filterfw/java/android/filterfw/core/AsyncRunner.java
@@ -18,17 +18,9 @@
 package android.filterfw.core;
 
 import android.os.AsyncTask;
-import android.os.Handler;
 
 import android.util.Log;
 
-import java.lang.InterruptedException;
-import java.lang.Runnable;
-import java.util.concurrent.CancellationException;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
-import java.util.concurrent.TimeUnit;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterfw/java/android/filterfw/core/Filter.java b/media/mca/filterfw/java/android/filterfw/core/Filter.java
index 73b009d..062b6ba 100644
--- a/media/mca/filterfw/java/android/filterfw/core/Filter.java
+++ b/media/mca/filterfw/java/android/filterfw/core/Filter.java
@@ -33,7 +33,6 @@
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map.Entry;
-import java.util.LinkedList;
 import java.util.Set;
 
 /**
diff --git a/media/mca/filterfw/java/android/filterfw/core/Frame.java b/media/mca/filterfw/java/android/filterfw/core/Frame.java
index ef8c542..7dd0783 100644
--- a/media/mca/filterfw/java/android/filterfw/core/Frame.java
+++ b/media/mca/filterfw/java/android/filterfw/core/Frame.java
@@ -20,7 +20,6 @@
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.FrameManager;
 import android.graphics.Bitmap;
-import android.util.Log;
 
 import java.nio.ByteBuffer;
 
diff --git a/media/mca/filterfw/java/android/filterfw/core/NativeFrame.java b/media/mca/filterfw/java/android/filterfw/core/NativeFrame.java
index bfd09ba..7d1553f 100644
--- a/media/mca/filterfw/java/android/filterfw/core/NativeFrame.java
+++ b/media/mca/filterfw/java/android/filterfw/core/NativeFrame.java
@@ -24,8 +24,6 @@
 import android.filterfw.core.NativeBuffer;
 import android.graphics.Bitmap;
 
-import android.util.Log;
-
 import java.nio.ByteBuffer;
 
 /**
diff --git a/media/mca/filterfw/java/android/filterfw/core/OneShotScheduler.java b/media/mca/filterfw/java/android/filterfw/core/OneShotScheduler.java
index dbc8d16..83c475f 100644
--- a/media/mca/filterfw/java/android/filterfw/core/OneShotScheduler.java
+++ b/media/mca/filterfw/java/android/filterfw/core/OneShotScheduler.java
@@ -18,7 +18,6 @@
 package android.filterfw.core;
 
 import android.filterfw.core.Filter;
-import android.filterfw.core.Scheduler;
 import android.filterfw.core.RoundRobinScheduler;
 import android.util.Log;
 
diff --git a/media/mca/filterfw/java/android/filterfw/core/SerializedFrame.java b/media/mca/filterfw/java/android/filterfw/core/SerializedFrame.java
index f493fd2..35ba04f 100644
--- a/media/mca/filterfw/java/android/filterfw/core/SerializedFrame.java
+++ b/media/mca/filterfw/java/android/filterfw/core/SerializedFrame.java
@@ -20,7 +20,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.FrameManager;
-import android.filterfw.core.NativeBuffer;
 import android.filterfw.format.ObjectFormat;
 import android.graphics.Bitmap;
 
@@ -28,10 +27,7 @@
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
-import java.io.OptionalDataException;
 import java.io.OutputStream;
-import java.io.StreamCorruptedException;
-import java.lang.reflect.Constructor;
 import java.nio.ByteBuffer;
 
 /**
diff --git a/media/mca/filterfw/java/android/filterfw/core/SimpleFrame.java b/media/mca/filterfw/java/android/filterfw/core/SimpleFrame.java
index 534a30d..7ddd1d4 100644
--- a/media/mca/filterfw/java/android/filterfw/core/SimpleFrame.java
+++ b/media/mca/filterfw/java/android/filterfw/core/SimpleFrame.java
@@ -20,11 +20,9 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.FrameManager;
-import android.filterfw.core.NativeBuffer;
 import android.filterfw.format.ObjectFormat;
 import android.graphics.Bitmap;
 
-import java.lang.reflect.Constructor;
 import java.nio.ByteBuffer;
 
 /**
diff --git a/media/mca/filterfw/native/core/gl_env.cpp b/media/mca/filterfw/native/core/gl_env.cpp
index 84dad8c..f092af8 100644
--- a/media/mca/filterfw/native/core/gl_env.cpp
+++ b/media/mca/filterfw/native/core/gl_env.cpp
@@ -162,9 +162,11 @@
   }
 
   // Create dummy surface using a GLConsumer
-  sp<BufferQueue> bq = new BufferQueue();
-  surfaceTexture_ = new GLConsumer(bq, 0);
-  window_ = new Surface(static_cast<sp<IGraphicBufferProducer> >(bq));
+  sp<IGraphicBufferProducer> producer;
+  sp<IGraphicBufferConsumer> consumer;
+  BufferQueue::createBufferQueue(&producer, &consumer);
+  surfaceTexture_ = new GLConsumer(consumer, 0);
+  window_ = new Surface(producer);
 
   surfaces_[0] = SurfaceWindowPair(eglCreateWindowSurface(display(), config, window_.get(), NULL), NULL);
   if (CheckEGLError("eglCreateWindowSurface")) return false;
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/CallbackFilter.java b/media/mca/filterpacks/java/android/filterpacks/base/CallbackFilter.java
index 4185343..4a47fa4 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/CallbackFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/CallbackFilter.java
@@ -20,13 +20,8 @@
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.os.Handler;
 import android.os.Looper;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/FrameBranch.java b/media/mca/filterpacks/java/android/filterpacks/base/FrameBranch.java
index 6b8cbc7..f909c3f 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/FrameBranch.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/FrameBranch.java
@@ -22,7 +22,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFinalPort;
-import android.filterfw.core.KeyValueMap;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/FrameFetch.java b/media/mca/filterpacks/java/android/filterpacks/base/FrameFetch.java
index 518b837..87d8f0b 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/FrameFetch.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/FrameFetch.java
@@ -24,8 +24,6 @@
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
 
-import android.util.Log;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/FrameStore.java b/media/mca/filterpacks/java/android/filterpacks/base/FrameStore.java
index 3aadaac..05ac50d 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/FrameStore.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/FrameStore.java
@@ -20,7 +20,6 @@
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 
 /**
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/GLTextureSource.java b/media/mca/filterpacks/java/android/filterpacks/base/GLTextureSource.java
index 1776820..af61d9a 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/GLTextureSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/GLTextureSource.java
@@ -23,11 +23,8 @@
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.format.ImageFormat;
 
-import java.util.Set;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/GLTextureTarget.java b/media/mca/filterpacks/java/android/filterpacks/base/GLTextureTarget.java
index b2285cd..91bb417 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/GLTextureTarget.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/GLTextureTarget.java
@@ -23,11 +23,8 @@
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.format.ImageFormat;
 
-import java.util.Set;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/InputStreamSource.java b/media/mca/filterpacks/java/android/filterpacks/base/InputStreamSource.java
index 6c22ee7..0ef9055 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/InputStreamSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/InputStreamSource.java
@@ -23,7 +23,6 @@
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.format.PrimitiveFormat;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/NullFilter.java b/media/mca/filterpacks/java/android/filterpacks/base/NullFilter.java
index f3e08e4..73434d4 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/NullFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/NullFilter.java
@@ -19,8 +19,6 @@
 
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/ObjectSource.java b/media/mca/filterpacks/java/android/filterpacks/base/ObjectSource.java
index d511e44..78e2b50 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/ObjectSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/ObjectSource.java
@@ -17,15 +17,12 @@
 
 package android.filterpacks.base;
 
-import java.util.Set;
-
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
-import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.format.ObjectFormat;
 
 /**
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/OutputStreamTarget.java b/media/mca/filterpacks/java/android/filterpacks/base/OutputStreamTarget.java
index 3d3d0f1..fd65a9d 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/OutputStreamTarget.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/OutputStreamTarget.java
@@ -20,7 +20,6 @@
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 
 import java.io.OutputStream;
diff --git a/media/mca/filterpacks/java/android/filterpacks/base/RetargetFilter.java b/media/mca/filterpacks/java/android/filterpacks/base/RetargetFilter.java
index 254167a..0e988820 100644
--- a/media/mca/filterpacks/java/android/filterpacks/base/RetargetFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/base/RetargetFilter.java
@@ -21,9 +21,7 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
 
 /**
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/AlphaBlendFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/AlphaBlendFilter.java
index 473369c..c3cc282 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/AlphaBlendFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/AlphaBlendFilter.java
@@ -17,18 +17,9 @@
 
 package android.filterpacks.imageproc;
 
-import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
-import android.filterfw.format.ImageFormat;
-
-import java.util.Set;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/AutoFixFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/AutoFixFilter.java
index c71c1c94..ac83db2 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/AutoFixFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/AutoFixFilter.java
@@ -21,13 +21,10 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.NativeProgram;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
 public class AutoFixFilter extends Filter {
 
     @GenerateFieldPort(name = "tile_size", hasDefault = true)
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java
index e4bb6cf..92b177c 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapOverlayFilter.java
@@ -21,17 +21,11 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
-import android.filterpacks.imageproc.ImageCombineFilter;
 import android.graphics.Bitmap;
 
-import android.util.Log;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapSource.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapSource.java
index 978fc94..89e8723 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/BitmapSource.java
@@ -17,17 +17,11 @@
 
 package android.filterpacks.imageproc;
 
-import android.content.Context;
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.FrameManager;
-import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.format.ImageFormat;
 import android.graphics.Bitmap;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java
index 20b02d2f..38221b4 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/BlackWhiteFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/BlendFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/BlendFilter.java
index 29bc8a3..aff5e9e 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/BlendFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/BlendFilter.java
@@ -16,18 +16,9 @@
 
 package android.filterpacks.imageproc;
 
-import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
-import android.filterfw.format.ImageFormat;
-
-import java.util.Set;
 
 /**
  * The filter linearly blends "left" and "right" frames. The blending weight is
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/BrightnessFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/BrightnessFilter.java
index 046e69d..bc62e19 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/BrightnessFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/BrightnessFilter.java
@@ -17,13 +17,8 @@
 
 package android.filterpacks.imageproc;
 
-import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ColorTemperatureFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ColorTemperatureFilter.java
index 7488980..1d408be 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ColorTemperatureFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ColorTemperatureFilter.java
@@ -21,13 +21,9 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
-import android.util.Log;
 
 public class ColorTemperatureFilter extends Filter {
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ContrastFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ContrastFilter.java
index 70e987f..7043c72 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ContrastFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ContrastFilter.java
@@ -17,18 +17,11 @@
 
 package android.filterpacks.imageproc;
 
-import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 
-import java.util.Set;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/CropFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/CropFilter.java
index 5222d9c..0ef323c 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/CropFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/CropFilter.java
@@ -22,19 +22,13 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
-import android.filterfw.geometry.Point;
 import android.filterfw.geometry.Quad;
 import android.filterfw.format.ImageFormat;
 import android.filterfw.format.ObjectFormat;
 
-import android.util.Log;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/CropRectFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/CropRectFilter.java
index d423d06..010ee21 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/CropRectFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/CropRectFilter.java
@@ -21,14 +21,9 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
-import android.util.Log;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/CrossProcessFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/CrossProcessFilter.java
index e0514f8..d565e65 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/CrossProcessFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/CrossProcessFilter.java
@@ -21,15 +21,10 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
 public class CrossProcessFilter extends Filter {
 
     @GenerateFieldPort(name = "tile_size", hasDefault = true)
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java
index f93a82c..72745c0 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/DocumentaryFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawOverlayFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawOverlayFilter.java
index 3f1711e..d10a6ef 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawOverlayFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawOverlayFilter.java
@@ -21,17 +21,11 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.GLFrame;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.geometry.Quad;
 import android.filterfw.format.ImageFormat;
 import android.filterfw.format.ObjectFormat;
 
-import android.opengl.GLES20;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawRectFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawRectFilter.java
index 83c9348..b288e6e 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawRectFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/DrawRectFilter.java
@@ -23,9 +23,6 @@
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.geometry.Quad;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/DuotoneFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/DuotoneFilter.java
index d8c88ee..ef82ee9 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/DuotoneFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/DuotoneFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/FillLightFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/FillLightFilter.java
index fc917a1..c7fb55d 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/FillLightFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/FillLightFilter.java
@@ -21,10 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.GenerateFinalPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/FisheyeFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/FisheyeFilter.java
index 5d7929f..2ff6588 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/FisheyeFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/FisheyeFilter.java
@@ -22,17 +22,11 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
 import java.lang.Math;
-import java.util.Set;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/FixedRotationFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/FixedRotationFilter.java
index 3d319ea..340f308 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/FixedRotationFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/FixedRotationFilter.java
@@ -22,7 +22,6 @@
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.filterfw.geometry.Point;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/FlipFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/FlipFilter.java
index f8b857b..68c760f 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/FlipFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/FlipFilter.java
@@ -21,10 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
index 577243a..528eaa2 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/GrainFilter.java
@@ -21,14 +21,9 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
-import android.filterfw.geometry.Quad;
-import android.filterfw.geometry.Point;
 
 import java.util.Date;
 import java.util.Random;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageCombineFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageCombineFilter.java
index 858489b..c9a6956 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageCombineFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageCombineFilter.java
@@ -21,16 +21,10 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
-import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
 import java.lang.reflect.Field;
-import java.util.HashSet;
-import java.util.Set;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageEncoder.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageEncoder.java
index a5405cb..e8bf482 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageEncoder.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageEncoder.java
@@ -17,21 +17,16 @@
 
 package android.filterpacks.imageproc;
 
-import android.content.Context;
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.format.ImageFormat;
 import android.graphics.Bitmap;
 import android.graphics.Bitmap.CompressFormat;
 
-import android.util.Log;
-
 import java.io.OutputStream;
-import java.io.IOException;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageSlicer.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageSlicer.java
index b996eb8..8bf80b2f 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageSlicer.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageSlicer.java
@@ -20,9 +20,7 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.FrameManager;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageStitcher.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageStitcher.java
index 20aba91..5e3d15b 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageStitcher.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ImageStitcher.java
@@ -20,16 +20,12 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.FrameManager;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
 public class ImageStitcher extends Filter {
 
     @GenerateFieldPort(name = "xSlices")
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/Invert.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/Invert.java
index 400fd5d..881e30f 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/Invert.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/Invert.java
@@ -17,12 +17,8 @@
 
 package android.filterpacks.imageproc;
 
-import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.Frame;
-import android.filterfw.core.FrameFormat;
 import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java
index 726ffff..4e53f92 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/LomoishFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/NegativeFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/NegativeFilter.java
index 440d6a6..f66fc23 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/NegativeFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/NegativeFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/PosterizeFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/PosterizeFilter.java
index bc2e553..864d7e2 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/PosterizeFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/PosterizeFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
index 8618804..48b2fdf4 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/RedEyeFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
@@ -31,8 +28,6 @@
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
-import android.graphics.PointF;
-import android.util.Log;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ResizeFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ResizeFilter.java
index 411e061..c79c11b 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ResizeFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ResizeFilter.java
@@ -23,10 +23,7 @@
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/RotateFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/RotateFilter.java
index 3da7939..43d8d6c 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/RotateFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/RotateFilter.java
@@ -22,16 +22,11 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.filterfw.geometry.Quad;
 import android.filterfw.geometry.Point;
-import android.util.Log;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/SaturateFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/SaturateFilter.java
index b83af39..757fac1 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/SaturateFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/SaturateFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/SepiaFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/SepiaFilter.java
index 7a83fdf..a9f4e2c 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/SepiaFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/SepiaFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/SharpenFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/SharpenFilter.java
index 256b769..a290996 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/SharpenFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/SharpenFilter.java
@@ -21,15 +21,10 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import java.util.Set;
-
 public class SharpenFilter extends Filter {
 
     @GenerateFieldPort(name = "scale", hasDefault = true)
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/SimpleImageFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/SimpleImageFilter.java
index f4fc271e..afe92de 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/SimpleImageFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/SimpleImageFilter.java
@@ -21,16 +21,10 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
-import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
 import java.lang.reflect.Field;
-import java.util.HashSet;
-import java.util.Set;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/StraightenFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/StraightenFilter.java
index c9f097d..9db296b 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/StraightenFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/StraightenFilter.java
@@ -22,16 +22,11 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.filterfw.geometry.Quad;
 import android.filterfw.geometry.Point;
-import android.util.Log;
 
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/TintFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/TintFilter.java
index 0da54a5..2b140ba 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/TintFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/TintFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToGrayFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToGrayFilter.java
index 00e7bf4..760ce3a 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToGrayFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToGrayFilter.java
@@ -17,23 +17,14 @@
 
 package android.filterpacks.imageproc;
 
-import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
-import java.lang.reflect.Field;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToPackedGrayFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToPackedGrayFilter.java
index bc4a65e..3c121d0 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToPackedGrayFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToPackedGrayFilter.java
@@ -27,8 +27,6 @@
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
 import java.lang.Math;
 /**
  * @hide
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBAFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBAFilter.java
index ab4814f..f0084fa 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBAFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBAFilter.java
@@ -21,16 +21,11 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
-import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBFilter.java
index 9258502..bbb0fc3 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/ToRGBFilter.java
@@ -21,16 +21,11 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
-import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.util.Log;
-
 /**
  * @hide
  */
diff --git a/media/mca/filterpacks/java/android/filterpacks/imageproc/VignetteFilter.java b/media/mca/filterpacks/java/android/filterpacks/imageproc/VignetteFilter.java
index 715fec6c..249cc6f 100644
--- a/media/mca/filterpacks/java/android/filterpacks/imageproc/VignetteFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/imageproc/VignetteFilter.java
@@ -21,9 +21,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
 import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
diff --git a/media/mca/filterpacks/java/android/filterpacks/text/StringSource.java b/media/mca/filterpacks/java/android/filterpacks/text/StringSource.java
index cc33b89..2fe519f 100644
--- a/media/mca/filterpacks/java/android/filterpacks/text/StringSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/text/StringSource.java
@@ -22,8 +22,6 @@
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.KeyValueMap;
-import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.format.ObjectFormat;
 
 /**
diff --git a/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceRenderFilter.java b/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceRenderFilter.java
index a5c1ccb..ba88736 100644
--- a/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceRenderFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceRenderFilter.java
@@ -26,19 +26,11 @@
 import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GLEnvironment;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
-import android.view.Surface;
 import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-
-import android.graphics.Rect;
 
 import android.util.Log;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceTargetFilter.java b/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceTargetFilter.java
index 308d168..05cb81b 100644
--- a/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceTargetFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/ui/SurfaceTargetFilter.java
@@ -25,19 +25,11 @@
 import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GLEnvironment;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
 import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-
-import android.graphics.Rect;
 
 import android.util.Log;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/videoproc/BackDropperFilter.java b/media/mca/filterpacks/java/android/filterpacks/videoproc/BackDropperFilter.java
index 78f7f3e..a31ac2c 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videoproc/BackDropperFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videoproc/BackDropperFilter.java
@@ -24,7 +24,6 @@
 import android.filterfw.core.GLFrame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.opengl.GLES20;
@@ -32,7 +31,6 @@
 import android.os.SystemProperties;
 import android.util.Log;
 
-import java.lang.ArrayIndexOutOfBoundsException;
 import java.lang.Math;
 import java.util.Arrays;
 import java.nio.ByteBuffer;
diff --git a/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java b/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java
index 8bb653b..d034051 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosink/MediaEncoderFilter.java
@@ -17,32 +17,23 @@
 
 package android.filterpacks.videosink;
 
-import android.content.Context;
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.FrameManager;
 import android.filterfw.core.GenerateFieldPort;
-import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.filterfw.geometry.Point;
 import android.filterfw.geometry.Quad;
-import android.os.ConditionVariable;
 import android.media.MediaRecorder;
 import android.media.CamcorderProfile;
 import android.filterfw.core.GLEnvironment;
 
 import java.io.IOException;
 import java.io.FileDescriptor;
-import java.util.List;
-import java.util.Set;
 
 import android.util.Log;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/videosink/MediaRecorderStopException.java b/media/mca/filterpacks/java/android/filterpacks/videosink/MediaRecorderStopException.java
index dbf9768..ce7a8c1 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosink/MediaRecorderStopException.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosink/MediaRecorderStopException.java
@@ -18,7 +18,6 @@
 package android.filterpacks.videosink;
 
 import java.lang.RuntimeException;
-import android.util.Log;
 
 /** @hide **/
 public class MediaRecorderStopException extends RuntimeException {
diff --git a/media/mca/filterpacks/java/android/filterpacks/videosrc/CameraSource.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/CameraSource.java
index 2c474ab..d260684 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosrc/CameraSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/CameraSource.java
@@ -17,29 +17,22 @@
 
 package android.filterpacks.videosrc;
 
-import android.content.Context;
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.FrameManager;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.graphics.SurfaceTexture;
 import android.hardware.Camera;
-import android.os.ConditionVariable;
 import android.opengl.Matrix;
 
 import java.io.IOException;
 import java.util.List;
-import java.util.Set;
 
 import android.util.Log;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/videosrc/MediaSource.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/MediaSource.java
index 0be6c62..53a39a7 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosrc/MediaSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/MediaSource.java
@@ -23,28 +23,20 @@
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.FrameManager;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.graphics.SurfaceTexture;
 import android.media.MediaPlayer;
 import android.net.Uri;
-import android.os.ConditionVariable;
 import android.opengl.Matrix;
 import android.view.Surface;
 
 import java.io.IOException;
-import java.io.FileDescriptor;
 import java.lang.IllegalArgumentException;
-import java.util.List;
-import java.util.Set;
 
 import android.util.Log;
 
diff --git a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java
index 37fa242..6595baa 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureSource.java
@@ -16,31 +16,20 @@
 
 package android.filterpacks.videosrc;
 
-import android.content.Context;
-import android.content.res.AssetFileDescriptor;
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
-import android.filterfw.core.FrameManager;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 import android.graphics.SurfaceTexture;
-import android.media.MediaPlayer;
 import android.os.ConditionVariable;
 import android.opengl.Matrix;
 
-import java.io.IOException;
-import java.io.FileDescriptor;
-import java.lang.IllegalArgumentException;
-import java.util.List;
-import java.util.Set;
-
 import android.util.Log;
 
 /** <p>A filter that converts textures from a SurfaceTexture object into frames for
diff --git a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
index b6d9f94..5d03627 100644
--- a/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
+++ b/media/mca/filterpacks/java/android/filterpacks/videosrc/SurfaceTextureTarget.java
@@ -19,29 +19,19 @@
 
 import android.filterfw.core.Filter;
 import android.filterfw.core.FilterContext;
-import android.filterfw.core.FilterSurfaceView;
 import android.filterfw.core.Frame;
 import android.filterfw.core.FrameFormat;
 import android.filterfw.core.GenerateFieldPort;
 import android.filterfw.core.GenerateFinalPort;
 import android.filterfw.core.GLEnvironment;
 import android.filterfw.core.GLFrame;
-import android.filterfw.core.KeyValueMap;
 import android.filterfw.core.MutableFrameFormat;
-import android.filterfw.core.NativeProgram;
-import android.filterfw.core.NativeFrame;
-import android.filterfw.core.Program;
 import android.filterfw.core.ShaderProgram;
 import android.filterfw.format.ImageFormat;
 
 import android.filterfw.geometry.Quad;
 import android.filterfw.geometry.Point;
 
-import android.view.Surface;
-import android.view.SurfaceHolder;
-import android.view.SurfaceView;
-
-import android.graphics.Rect;
 import android.graphics.SurfaceTexture;
 
 import android.util.Log;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java
index 3d5905d..cfc0881 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkPerfTestRunner.java
@@ -17,8 +17,6 @@
 package com.android.mediaframeworktest;
 
 import com.android.mediaframeworktest.performance.MediaPlayerPerformance;
-/*Video Editor performance Test cases*/
-import com.android.mediaframeworktest.performance.VideoEditorPerformance;
 import junit.framework.TestSuite;
 
 import android.os.Bundle;
@@ -44,8 +42,6 @@
     public TestSuite getAllTests() {
         TestSuite suite = new InstrumentationTestSuite(this);
         suite.addTestSuite(MediaPlayerPerformance.class);
-        /* Video Editor performance Test cases */
-        suite.addTestSuite(VideoEditorPerformance.class);
         return suite;
     }
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
index cbb6642..a9dc886 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaFrameworkTestRunner.java
@@ -32,11 +32,6 @@
 import com.android.mediaframeworktest.functional.audio.MediaPresetReverbTest;
 import com.android.mediaframeworktest.functional.audio.MediaVirtualizerTest;
 import com.android.mediaframeworktest.functional.audio.MediaVisualizerTest;
-import com.android.mediaframeworktest.functional.videoeditor.MediaItemThumbnailTest;
-import com.android.mediaframeworktest.functional.videoeditor.MediaPropertiesTest;
-import com.android.mediaframeworktest.functional.videoeditor.VideoEditorAPITest;
-import com.android.mediaframeworktest.functional.videoeditor.VideoEditorExportTest;
-import com.android.mediaframeworktest.functional.videoeditor.VideoEditorPreviewTest;
 import junit.framework.TestSuite;
 
 import android.os.Bundle;
@@ -76,12 +71,6 @@
         suite.addTestSuite(MediaPresetReverbTest.class);
         suite.addTestSuite(MediaVirtualizerTest.class);
         suite.addTestSuite(MediaVisualizerTest.class);
-        /*Test for Video Editor*/
-        suite.addTestSuite(MediaItemThumbnailTest.class);
-        suite.addTestSuite(MediaPropertiesTest.class);
-        suite.addTestSuite(VideoEditorAPITest.class);
-        suite.addTestSuite(VideoEditorExportTest.class);
-        suite.addTestSuite(VideoEditorPreviewTest.class);
         return suite;
     }
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
index ee867ff..d01f4ec 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaNames.java
@@ -137,6 +137,8 @@
     public static final String INVALD_VIDEO_PATH =
             "/sdcard/media_api/filepathdoesnotexist" + "/filepathdoesnotexist/temp.3gp";
 
+    public static final String RECORDED_SURFACE_3GP = "/sdcard/surface.3gp";
+
     public static final long RECORDED_TIME = 5000;
     public static final long VALID_VIDEO_DURATION = 2000;
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaPlayerStressTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaPlayerStressTestRunner.java
index 0cd784c..5438061 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaPlayerStressTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaPlayerStressTestRunner.java
@@ -19,8 +19,6 @@
 import android.test.InstrumentationTestRunner;
 import android.test.InstrumentationTestSuite;
 import com.android.mediaframeworktest.stress.MediaPlayerStressTest;
-/** Import for Video Editor Stress Test cases*/
-import com.android.mediaframeworktest.stress.VideoEditorStressTest;
 
 import junit.framework.TestSuite;
 
@@ -30,8 +28,6 @@
     public TestSuite getAllTests() {
         TestSuite suite = new InstrumentationTestSuite(this);
         suite.addTestSuite(MediaPlayerStressTest.class);
-        /** Video Editor Stress Test cases*/
-        suite.addTestSuite(VideoEditorStressTest.class);
         return suite;
     }
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java
index abe8b8c..54c8add 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaProfileReader.java
@@ -88,7 +88,8 @@
         if (audioEncoder != MediaRecorder.AudioEncoder.AMR_NB &&
             audioEncoder != MediaRecorder.AudioEncoder.AMR_WB &&
             audioEncoder != MediaRecorder.AudioEncoder.AAC &&
-            audioEncoder != MediaRecorder.AudioEncoder.HE_AAC) {
+            audioEncoder != MediaRecorder.AudioEncoder.HE_AAC &&
+            audioEncoder != MediaRecorder.AudioEncoder.AAC_ELD) {
             throw new IllegalArgumentException("Unsupported audio encodeer " + audioEncoder);
         }
         return audioEncoderMap.get(audioEncoder);
@@ -128,5 +129,6 @@
         audioEncoderMap.put(MediaRecorder.AudioEncoder.AMR_WB, "amrwb");
         audioEncoderMap.put(MediaRecorder.AudioEncoder.AAC, "aac");
         audioEncoderMap.put(MediaRecorder.AudioEncoder.HE_AAC, "heaac");
+        audioEncoderMap.put(MediaRecorder.AudioEncoder.AAC_ELD, "aaceld");
     }
 }
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/VideoEditorHelper.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/VideoEditorHelper.java
deleted file mode 100644
index dd7c4c6..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/VideoEditorHelper.java
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Random;
-
-import junit.framework.Assert;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.media.videoeditor.AudioTrack;
-import android.media.videoeditor.EffectColor;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.OverlayFrame;
-import android.media.videoeditor.TransitionAlpha;
-import android.media.videoeditor.TransitionCrossfade;
-import android.media.videoeditor.TransitionFadeBlack;
-import android.media.videoeditor.TransitionSliding;
-import android.media.videoeditor.VideoEditor;
-import android.media.videoeditor.VideoEditorFactory;
-import android.util.Log;
-import android.os.Environment;
-
-/**
- * This class has the names of the all the activity name and variables in the
- * instrumentation test.
- */
-public class VideoEditorHelper extends Assert {
-
-    private final String TAG = "VideoEditorMediaNames";
-
-    public VideoEditorHelper() {
-
-    }
-
-    public static final String PROJECT_LOCATION_COMMON =
-        Environment.getExternalStorageDirectory().toString() + "/";
-
-    public static final String INPUT_FILE_PATH_COMMON = PROJECT_LOCATION_COMMON +
-        "media_api/videoeditor/";
-
-    // -----------------------------------------------------------------
-    // HELPER METHODS
-    // -----------------------------------------------------------------
-
-    /**
-     * This method creates an object of VideoEditor
-     *
-     * @param projectPath the directory where all files related to project will
-     *            be stored
-     * @param className The class which implements the VideoEditor Class
-     * @return the object of VideoEditor
-     */
-    public VideoEditor createVideoEditor(String projectPath) {
-        VideoEditor mVideoEditor = null;
-        try {
-            mVideoEditor = VideoEditorFactory.create(projectPath);
-            assertNotNull("VideoEditor", mVideoEditor);
-        } catch (Exception e) {
-            fail("Unable to create Video Editor");
-        }
-        return mVideoEditor;
-    }
-
-    /**
-     *This method deletes the VideoEditor object created using
-     * createVideoEditor method
-     *
-     * @param videoEditor the VideoEditor object which needs to be cleaned up
-     */
-    public void destroyVideoEditor(VideoEditor videoEditor) {
-        // Release VideoEditor
-        if (videoEditor != null) {
-            try {
-                videoEditor.release();
-            } catch (Exception e) {
-                fail("Unable to destory Video Editor");
-            }
-        }
-    }
-
-    /**
-     *This Method checks the Range in "RangePercent" (say 10)
-     *
-     * @param int Expected data
-     * @param actual data
-     * @return boolean flag which confirms the range matching
-     */
-    public boolean checkRange(long expected, long actual, long rangePercent) {
-        long range = 0;
-        range = (100 * actual) / expected;
-
-        Log.i("checkRange", "Range = " + range);
-        if ((range > (100 - rangePercent)) && (range < (100 + rangePercent))) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    /**
-     *This Method Creates a Bitmap with the given input file
-     *
-     * @param file the Input whose Bitmap has top be extracted
-     * @return an Object of EffectColor
-     */
-    public Bitmap getBitmap(String file, int width, int height) throws IOException {
-        assertNotNull("Bitmap File is Null", file);
-        FileInputStream inputStream = null;
-        Bitmap overlayBmp = null;
-        if (!new File(file).exists())
-            throw new IOException("File not Found " + file);
-        try {
-            final BitmapFactory.Options dbo = new BitmapFactory.Options();
-            dbo.inJustDecodeBounds = true;
-            dbo.outWidth = width;
-            dbo.outHeight = height;
-            File flPtr = new File(file);
-            inputStream = new FileInputStream(flPtr);
-            final Bitmap srcBitmap = BitmapFactory.decodeStream(inputStream);
-            overlayBmp = Bitmap.createBitmap(srcBitmap);
-            assertNotNull("Bitmap 1", srcBitmap);
-            assertNotNull("Bitmap 2", overlayBmp);
-            inputStream.close();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return overlayBmp;
-    }
-
-    /**
-     *This Method Create a Media Video Item with the specified params
-     *
-     * @return an Object of MediaVideoItem
-     */
-    public MediaVideoItem createMediaItem(VideoEditor videoEditor,
-        String MediaId, String filename, int renderingMode) {
-        MediaVideoItem mvi = null;
-        try {
-            mvi = new MediaVideoItem(videoEditor, MediaId, filename,
-                renderingMode);
-            assertNotNull("Can not create an object of MediaVideoItem", mvi);
-        } catch (IllegalArgumentException e) {
-            throw new IllegalArgumentException
-                ("Can not create an object of Media Video Item with file name = "
-                    + filename + " Issue = " + e.toString());
-        } catch (IOException e) {
-            assertTrue
-                ("Can not create an object of Media Video Item with file name = "
-                    + filename + " Issue = " + e.toString(), false);
-        }
-        return mvi;
-    }
-
-    /**
-     *This Method Create a Media Image Item with the specified params
-     *
-     * @return an Object of MediaImageItem
-     */
-    public MediaImageItem createMediaItem(VideoEditor videoEditor,
-        String MediaId, String filename, long duration, int renderingMode) {
-        MediaImageItem mii = null;
-        try {
-            mii = new MediaImageItem(videoEditor, MediaId, filename, duration,
-                renderingMode);
-            assertNotNull("Can not create an object of MediaImageItem", mii);
-
-        } catch (IllegalArgumentException e) {
-            assertTrue("Can not create an object of Media Image with file name = "
-                + filename + " Issue = " + e.toString(), false);
-        } catch (IOException e) {
-            assertTrue("Can not create an object of Media Image with file name = "
-                + filename + " Issue = " + e.toString(), false);
-        }
-        return mii;
-    }
-
-    /**
-     *This Method Create a Effect with the specified params
-     *
-     * @return an Object of EffectColor
-     */
-    public EffectColor createEffectItem(MediaItem mediaItem, String effectId,
-        long startTime, long duration, int effectType, int colorType) {
-        EffectColor effectonMVI = null;
-        effectonMVI = new EffectColor(mediaItem, effectId, startTime,
-            duration, effectType, colorType);
-        return effectonMVI;
-    }
-
-    /**
-     *This Method creates object of Type Transition Cross fade
-     *
-     * @return TransitionCrossfade object
-     */
-    public TransitionCrossfade createTCrossFade(String transitionId,
-        MediaItem afterMediaItem, MediaItem beforeMediaItem, long durationMs,
-        int behavior) {
-        Log.i("TransitionCrossfade Details === ", "Transid ID = " + transitionId +
-            " Duration= " + durationMs + " Behaviour " + behavior);
-
-        TransitionCrossfade transitionCF = null;
-            transitionCF = new TransitionCrossfade(transitionId, afterMediaItem,
-                beforeMediaItem, durationMs, behavior);
-        return transitionCF;
-    }
-
-    /**
-     *This Method creates object of Type TransitionFadeBlack
-     *
-     * @return TransitionFadeBlack object
-     */
-    public TransitionFadeBlack createTFadeBlack(String transitionId,
-        MediaItem afterMediaItem, MediaItem beforeMediaItem, long durationMs,
-        int behavior) {
-        TransitionFadeBlack transitionFB = null;
-
-        transitionFB = new TransitionFadeBlack(transitionId, afterMediaItem,
-            beforeMediaItem, durationMs, behavior);
-        return transitionFB;
-    }
-
-    /**
-     *This Method creates object of Type TransitionSliding
-     *
-     * @return TransitionSliding object
-     */
-    public TransitionSliding createTSliding(String transitionId,
-        MediaItem afterMediaItem, MediaItem beforeMediaItem, long durationMs,
-        int behavior, int direction) {
-        TransitionSliding transSlide = null;
-            transSlide = new TransitionSliding(transitionId, afterMediaItem,
-                beforeMediaItem, durationMs, behavior, direction);
-        return transSlide;
-    }
-
-    /**
-     *This Method creates object of Type TranistionAlpha
-     *
-     * @return TranistionAlpha object
-     */
-
-    public TransitionAlpha createTAlpha(String transitionId,
-        MediaItem afterMediaItem, MediaItem beforeMediaItem, long durationMs,
-        int behavior, String maskFilename, int blendingPercent, boolean invert) {
-        TransitionAlpha transA = null;
-            transA = new TransitionAlpha(transitionId, afterMediaItem,
-                beforeMediaItem, durationMs, behavior, maskFilename,
-                blendingPercent, invert);
-        return transA;
-    }
-
-    /**
-     *This Method creates object of Type OverlayFrame
-     *
-     * @return OverlayFrame object
-     */
-
-    public OverlayFrame createOverlay(MediaItem mediaItem, String overlayId,
-        Bitmap bitmap, long startTimeMs, long durationMs) {
-        OverlayFrame overLayFrame = null;
-        overLayFrame = new OverlayFrame(mediaItem, overlayId, bitmap,
-                startTimeMs, durationMs);
-        return overLayFrame;
-    }
-
-    /**
-     *This Method creates object of Type AudioTrack
-     *
-     * @return OverlayFrame object
-     */
-    public AudioTrack createAudio(VideoEditor videoEditor, String audioTrackId,
-        String filename) {
-        AudioTrack audio = null;
-        try {
-            audio = new AudioTrack(videoEditor, audioTrackId, filename);
-            assertNotNull("Cant not create an object of an  AudioTrack " +
-                audioTrackId, audio);
-        } catch (IllegalArgumentException e) {
-            assertTrue("Can not create object of an AudioTrack " +
-                audioTrackId + " Issue = " + e.toString(), false);
-        } catch (IOException e) {
-            assertTrue("Can not create object of an AudioTrack " +
-                audioTrackId + " Issue = " + e.toString(), false);
-        }
-        return audio;
-    }
-
-    /**
-     *This Method validates the Exported Movie,as per the specified params
-     * during Export
-     */
-
-    public void validateExport(VideoEditor videoEditor, String fileName,
-        int export_height, int startTime, long endTime, int vCodec, int aCodec) {
-        File tempFile = new File(fileName);
-        assertEquals("Exported FileName", tempFile.exists(), true);
-        final MediaVideoItem mvi = createMediaItem(videoEditor, "m1", fileName,
-            MediaItem.RENDERING_MODE_BLACK_BORDER);
-
-        Log.i(TAG, "VideoCodec for file = " + fileName +
-            "\tExpected Video Codec = " + vCodec + "\tActual Video Codec = " +
-            mvi.getVideoType());
-        assertEquals("Export: Video Codec Mismatch for file = " + fileName +
-            "\t<expected> " + vCodec + "\t<actual> " + mvi.getVideoType(),
-            vCodec, mvi.getVideoType());
-
-        Log.i(TAG, "Height for file = " + fileName + "\tExpected Height = " +
-            export_height + "\tActual VideoHeight = " + mvi.getHeight());
-        assertEquals("Export height Mismatch for file " + fileName +
-            "\t<expected> " + export_height + "\t<actual> " + mvi.getHeight(),
-             export_height, mvi.getHeight());
-        if (startTime == 0) {
-            if (endTime != 0) {
-                Log.i(TAG, "TimeLine Expected = " + (startTime + endTime) +
-                    "\t VideoTime= " + mvi.getTimelineDuration());
-                assertTrue("Timeline Duration Mismatch for file " + fileName +
-                    "<expected> " + (startTime + endTime) + "\t<actual> " +
-                    mvi.getTimelineDuration(), checkRange((startTime +
-                        endTime), mvi.getTimelineDuration(), 10));
-            }
-        } else {
-            Log.i(TAG, "TimeLine Expected = " + (endTime - startTime) +
-                "\t VideoTime= " + mvi.getTimelineDuration());
-            assertTrue("Timeline Duration Mismatch for file " + fileName +
-                "<expected> " + (endTime - startTime) + "\t<actual> " +
-                mvi.getTimelineDuration(), checkRange((endTime -
-                    startTime), (int)mvi.getTimelineDuration(), 10));
-        }
-    }
-
-    /**
-     * @param videoEditor
-     * @param fileName
-     * @param export_bitrate
-     * @param export_height
-     * @param startTime
-     * @param endTime
-     * @param vCodec
-     * @param aCodec
-     */
-    public void validateExport(VideoEditor videoEditor, String fileName,
-        int export_height, int startTime, int endTime, int vCodec, int aCodec) {
-        File tempFile = new File(fileName);
-        assertEquals("Exported FileName", tempFile.exists(), true);
-        final MediaVideoItem mvi = createMediaItem(videoEditor, "m1", fileName,
-            MediaItem.RENDERING_MODE_BLACK_BORDER);
-        Log.i(TAG, "VideoCodec for file = " + fileName +
-            "\tExpected Video Codec = " + vCodec + "\tActual Video Codec = " +
-            mvi.getVideoType());
-        assertEquals("Export: Video Codec Mismatch for file = " + fileName +
-            "\t<expected> " + vCodec + "\t<actual> " + mvi.getVideoType(),
-            vCodec, mvi.getVideoType());
-
-        Log.i(TAG, "AudioCodec for file = " + fileName +
-            "\tExpected Audio Codec = " + aCodec + "\tActual Audio Codec = " +
-            mvi.getAudioType());
-        assertEquals("Export: Audio Codec Mismatch for file = " + fileName +
-            "\t<expected> " + aCodec + "\t<actual> " + mvi.getAudioType(),
-            aCodec, mvi.getAudioType());
-
-        Log.i(TAG, "Height for file = " + fileName + "\tExpected Height = " +
-            export_height + "\tActual VideoHeight = " + mvi.getHeight());
-        assertEquals("Export: height Mismatch for file " + fileName +
-            "\t<expected> " + export_height + "\t<actual> " + mvi.getHeight(),
-            export_height, mvi.getHeight());
-        if (startTime == 0) {
-            if (endTime != 0) {
-                Log.i(TAG, "TimeLine Expected = " + (startTime + endTime) +
-                    "\t VideoTime= " + mvi.getTimelineDuration());
-                assertTrue("Export :Timeline Duration Mismatch for file " +
-                    fileName + "<expected> " + (startTime + endTime) +
-                    "\t<actual> " + mvi.getTimelineDuration(),
-                    checkRange((startTime + endTime), mvi.getTimelineDuration(), 10));
-            }
-        } else {
-            Log.i(TAG, "TimeLine Expected = " + (endTime-startTime) +
-                "\t VideoTime= " + mvi.getTimelineDuration());
-            assertTrue("Timeline Duration Mismatch for file " + fileName +
-                "<expected> " + (endTime - startTime) + "\t<actual> " +
-                mvi.getTimelineDuration(), checkRange((endTime -
-                    startTime), mvi.getTimelineDuration(), 10));
-        }
-    }
-
-    /**
-     * Check file and deletes it.
-     *
-     * @param filename
-     */
-    public void checkDeleteExistingFile(String filename) {
-        Log.i(TAG, ">>>>>>>>>>>>>>>>>>checkDeleteExistingFile  = " + filename);
-        if (filename != null) {
-            File temp = new File(filename);
-            if (temp != null && temp.exists()) {
-                temp.delete();
-            }
-        }
-    }
-
-    /**
-     * This method creates a Directory and filename
-     *
-     * @param location This is path where the file is to be created
-     *            "/sdcard/Output/"
-     * @return Path in form of /sdcard/Output/200910100000
-     */
-    public String createRandomFile(String location) {
-        Random randomGenerator = new Random();
-        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmssS");
-        Date date = new Date();
-        final String filePath = location + dateFormat.format(date) +
-            randomGenerator.nextInt(10);
-        Log.i(TAG, ">>>>>>>>>>>>>>>>createRandomFile  Location= " + location +
-            "\t FilePath = " + filePath);
-        return filePath;
-    }
-
-    /**
-     * This method recursively deletes all the file and directory
-     *
-     * @param directory where the files are located Example = "/sdcard/Input"
-     * @return boolean True if deletion is successful else False
-     */
-    public boolean deleteProject(File directory) {
-        Log.i(TAG, ">>>>>>>>>>>>>>>>>>>>>>>>deleteProject  directory= " +
-            directory.toString());
-        if (directory.isDirectory()) {
-            String[] filesInDirecory = directory.list();
-            for (int i = 0; i < filesInDirecory.length; i++) {
-                boolean success = deleteProject(new File(directory,
-                    filesInDirecory[i]));
-                if (!success) {
-                    return false;
-                }
-            }
-        }
-        return directory.delete();
-    }
-
-    /**
-     * This method compares the array of Integer from 0 - 100
-     *
-     * @param data set of integer values received as progress
-     * @return true if sucess else false
-     */
-    public boolean checkProgressCBValues(int[] data) {
-        boolean retFlag = false;
-        for (int i = 0; i < 100; i++) {
-            if (data[i] == 100) {
-                retFlag = true;
-                break;
-            } else {
-                retFlag = false;
-            }
-        }
-        return retFlag;
-    }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
index 8e6d5cb..d7069cac 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/mediarecorder/MediaRecorderTest.java
@@ -22,6 +22,10 @@
 import java.io.*;
 
 import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Typeface;
 import android.hardware.Camera;
 import android.media.MediaPlayer;
 import android.media.MediaRecorder;
@@ -30,6 +34,7 @@
 import android.media.EncoderCapabilities.AudioEncoderCap;
 import android.test.ActivityInstrumentationTestCase2;
 import android.util.Log;
+import android.view.Surface;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 import com.android.mediaframeworktest.MediaProfileReader;
@@ -41,27 +46,28 @@
 
 
 /**
- * Junit / Instrumentation test case for the media recorder api 
- */  
+ * Junit / Instrumentation test case for the media recorder api
+ */
 public class MediaRecorderTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> {
     private String TAG = "MediaRecorderTest";
     private int mOutputDuration =0;
     private int mOutputVideoWidth = 0;
     private int mOutputVideoHeight= 0 ;
-    
+
     private SurfaceHolder mSurfaceHolder = null;
     private MediaRecorder mRecorder;
 
     private int MIN_VIDEO_FPS = 5;
+    private int HIGH_SPEED_FPS = 120;
 
     private static final int CAMERA_ID = 0;
 
     Context mContext;
     Camera mCamera;
-  
+
     public MediaRecorderTest() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-       
+        super(MediaFrameworkTest.class);
+
     }
 
     protected void setUp() throws Exception {
@@ -69,8 +75,8 @@
         mRecorder = new MediaRecorder();
         super.setUp();
     }
- 
-    private void recordVideo(int frameRate, int width, int height, 
+
+    private void recordVideo(int frameRate, int width, int height,
             int videoFormat, int outFormat, String outFile, boolean videoOnly) {
         Log.v(TAG,"startPreviewAndPrepareRecording");
         try {
@@ -80,7 +86,7 @@
             }
             mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
             mRecorder.setOutputFormat(outFormat);
-            Log.v(TAG, "output format " + outFormat);          
+            Log.v(TAG, "output format " + outFormat);
             mRecorder.setOutputFile(outFile);
             mRecorder.setVideoFrameRate(frameRate);
             mRecorder.setVideoSize(width, height);
@@ -105,7 +111,186 @@
             mRecorder.release();
         }
     }
-    
+
+    private boolean validateGetSurface(boolean useSurface) {
+        Log.v(TAG,"validateGetSurface, useSurface=" + useSurface);
+        MediaRecorder recorder = new MediaRecorder();
+        Surface surface;
+        boolean success = true;
+        try {
+            /* initialization */
+            if (!useSurface) {
+                mCamera = Camera.open(CAMERA_ID);
+                Camera.Parameters parameters = mCamera.getParameters();
+                parameters.setPreviewSize(352, 288);
+                parameters.set("orientation", "portrait");
+                mCamera.setParameters(parameters);
+                mCamera.unlock();
+                recorder.setCamera(mCamera);
+                mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
+                recorder.setPreviewDisplay(mSurfaceHolder.getSurface());
+            }
+
+            recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+            int videoSource = useSurface ?
+                    MediaRecorder.VideoSource.SURFACE :
+                    MediaRecorder.VideoSource.CAMERA;
+            recorder.setVideoSource(videoSource);
+            recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
+            recorder.setOutputFile(MediaNames.RECORDED_SURFACE_3GP);
+            recorder.setVideoFrameRate(30);
+            recorder.setVideoSize(352, 288);
+            recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
+            recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
+
+            /* Test: getSurface() before prepare()
+             * should throw IllegalStateException
+             */
+            try {
+                surface = recorder.getSurface();
+                throw new Exception("getSurface failed to throw IllegalStateException");
+            } catch (IllegalStateException e) {
+                // OK
+            }
+
+            recorder.prepare();
+
+            /* Test: getSurface() after prepare()
+             * should succeed for surface source
+             * should fail for camera source
+             */
+            try {
+                surface = recorder.getSurface();
+                if (!useSurface) {
+                    throw new Exception("getSurface failed to throw IllegalStateException");
+                }
+            } catch (IllegalStateException e) {
+                if (useSurface) {
+                    throw new Exception("getSurface failed to throw IllegalStateException");
+                }
+            }
+
+            recorder.start();
+
+            /* Test: getSurface() after start()
+             * should succeed for surface source
+             * should fail for camera source
+             */
+            try {
+                surface = recorder.getSurface();
+                if (!useSurface) {
+                    throw new Exception("getSurface failed to throw IllegalStateException");
+                }
+            } catch (IllegalStateException e) {
+                if (useSurface) {
+                    throw new Exception("getSurface failed to throw IllegalStateException");
+                }
+            }
+
+            try {
+                recorder.stop();
+            } catch (Exception e) {
+                // stop() could fail if the recording is empty, as we didn't render anything.
+                // ignore any failure in stop, we just want it stopped.
+            }
+
+            /* Test: getSurface() after stop()
+             * should throw IllegalStateException
+             */
+            try {
+                surface = recorder.getSurface();
+                throw new Exception("getSurface failed to throw IllegalStateException");
+            } catch (IllegalStateException e) {
+                // OK
+            }
+        } catch (Exception e) {
+            // fail
+            success = false;
+        }
+
+        try {
+            if (mCamera != null) {
+                mCamera.lock();
+                mCamera.release();
+                mCamera = null;
+            }
+            recorder.release();
+        } catch (Exception e) {
+            success = false;
+        }
+
+        return success;
+    }
+
+    private boolean recordVideoFromSurface(
+            int frameRate, int captureRate, int width, int height,
+            int videoFormat, int outFormat, String outFile, boolean videoOnly) {
+        Log.v(TAG,"recordVideoFromSurface");
+        MediaRecorder recorder = new MediaRecorder();
+        int sleepTime = 33; // normal capture at 33ms / frame
+        try {
+            if (!videoOnly) {
+                recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
+            }
+            recorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
+            recorder.setOutputFormat(outFormat);
+            recorder.setOutputFile(outFile);
+            recorder.setVideoFrameRate(frameRate);
+            if (captureRate > 0) {
+                recorder.setCaptureRate(captureRate);
+                sleepTime = 1000 / captureRate;
+            }
+            recorder.setVideoSize(width, height);
+            recorder.setVideoEncoder(videoFormat);
+            if (!videoOnly) {
+                recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
+            }
+            recorder.prepare();
+            Surface surface = recorder.getSurface();
+
+            Paint paint = new Paint();
+            paint.setTextSize(16);
+            paint.setColor(Color.RED);
+            int i;
+
+            /* Test: draw 10 frames at 30fps before start
+             * these should be dropped and not causing malformed stream.
+             */
+            for(i = 0; i < 10; i++) {
+                Canvas canvas = surface.lockCanvas(null);
+                int background = (i * 255 / 99);
+                canvas.drawARGB(255, background, background, background);
+                String text = "Frame #" + i;
+                canvas.drawText(text, 100, 100, paint);
+                surface.unlockCanvasAndPost(canvas);
+                Thread.sleep(sleepTime);
+            }
+
+            Log.v(TAG, "start");
+            recorder.start();
+
+            /* Test: draw another 90 frames at 30fps after start */
+            for(i = 10; i < 100; i++) {
+                Canvas canvas = surface.lockCanvas(null);
+                int background = (i * 255 / 99);
+                canvas.drawARGB(255, background, background, background);
+                String text = "Frame #" + i;
+                canvas.drawText(text, 100, 100, paint);
+                surface.unlockCanvasAndPost(canvas);
+                Thread.sleep(sleepTime);
+            }
+
+            Log.v(TAG, "stop");
+            recorder.stop();
+            recorder.release();
+        } catch (Exception e) {
+            Log.v("record video failed ", e.toString());
+            recorder.release();
+            return false;
+        }
+        return true;
+    }
+
     private boolean recordVideoWithPara(VideoEncoderCap videoCap, AudioEncoderCap audioCap, boolean highQuality){
         boolean recordSuccess = false;
         int videoEncoder = videoCap.mCodec;
@@ -171,7 +356,7 @@
         return recordSuccess;
     }
 
-    private boolean invalidRecordSetting(int frameRate, int width, int height, 
+    private boolean invalidRecordSetting(int frameRate, int width, int height,
             int videoFormat, int outFormat, String outFile, boolean videoOnly) {
         try {
             if (!videoOnly) {
@@ -180,7 +365,7 @@
             }
             mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
             mRecorder.setOutputFormat(outFormat);
-            Log.v(TAG, "output format " + outFormat);          
+            Log.v(TAG, "output format " + outFormat);
             mRecorder.setOutputFile(outFile);
             mRecorder.setVideoFrameRate(frameRate);
             mRecorder.setVideoSize(width, height);
@@ -208,7 +393,7 @@
         }
         return false;
     }
-    
+
     private void getOutputVideoProperty(String outputFilePath) {
         MediaPlayer mediaPlayer = new MediaPlayer();
         try {
@@ -223,13 +408,13 @@
             Thread.sleep(1000);
             mOutputVideoHeight = mediaPlayer.getVideoHeight();
             mOutputVideoWidth = mediaPlayer.getVideoWidth();
-            mediaPlayer.release();    
+            mediaPlayer.release();
         } catch (Exception e) {
             Log.v(TAG, e.toString());
             mediaPlayer.release();
-        }       
+        }
     }
-    
+
     private boolean validateVideo(String filePath, int width, int height) {
         boolean validVideo = false;
         getOutputVideoProperty(filePath);
@@ -260,7 +445,7 @@
             int codec = MediaRecorder.VideoEncoder.H263;
             int frameRate = MediaProfileReader.getMaxFrameRateForCodec(codec);
             recordVideo(frameRate, 352, 288, codec,
-                    MediaRecorder.OutputFormat.THREE_GPP, 
+                    MediaRecorder.OutputFormat.THREE_GPP,
                     MediaNames.RECORDED_PORTRAIT_H263, true);
             mCamera.lock();
             mCamera.release();
@@ -271,15 +456,15 @@
         }
         assertTrue("PortraitH263", videoRecordedResult);
     }
-    
+
     @LargeTest
-    public void testInvalidVideoPath() throws Exception {       
+    public void testInvalidVideoPath() throws Exception {
         boolean isTestInvalidVideoPathSuccessful = false;
-        isTestInvalidVideoPathSuccessful = invalidRecordSetting(15, 176, 144, MediaRecorder.VideoEncoder.H263, 
-               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.INVALD_VIDEO_PATH, false);      
+        isTestInvalidVideoPathSuccessful = invalidRecordSetting(15, 176, 144, MediaRecorder.VideoEncoder.H263,
+               MediaRecorder.OutputFormat.THREE_GPP, MediaNames.INVALD_VIDEO_PATH, false);
         assertTrue("Invalid outputFile Path", isTestInvalidVideoPathSuccessful);
     }
-    
+
     @LargeTest
     //test cases for the new codec
     public void testDeviceSpecificCodec() throws Exception {
@@ -309,4 +494,83 @@
             assertTrue("testDeviceSpecificCodec", false);
         }
     }
+
+    // Test MediaRecorder.getSurface() api with surface or camera source
+    public void testGetSurfaceApi() {
+        boolean success = false;
+        int noOfFailure = 0;
+        try {
+            for (int k = 0; k < 2; k++) {
+                success = validateGetSurface(
+                        k == 0 ? true : false /* useSurface */);
+                if (!success) {
+                    noOfFailure++;
+                }
+            }
+        } catch (Exception e) {
+            Log.v(TAG, e.toString());
+        }
+        assertTrue("testGetSurfaceApi", noOfFailure == 0);
+    }
+
+    // Test recording from surface source with/without audio
+    public void testSurfaceRecording() {
+        boolean success = false;
+        int noOfFailure = 0;
+        try {
+            int codec = MediaRecorder.VideoEncoder.H264;
+            int frameRate = MediaProfileReader.getMaxFrameRateForCodec(codec);
+            for (int k = 0; k < 2; k++) {
+                String filename = "/sdcard/surface_" +
+                            (k==0?"video_only":"with_audio") + ".3gp";
+
+                success = recordVideoFromSurface(frameRate, 0, 352, 288, codec,
+                        MediaRecorder.OutputFormat.THREE_GPP, filename,
+                        k == 0 ? true : false /* videoOnly */);
+                if (success) {
+                    success = validateVideo(filename, 352, 288);
+                }
+                if (!success) {
+                    noOfFailure++;
+                }
+            }
+        } catch (Exception e) {
+            Log.v(TAG, e.toString());
+        }
+        assertTrue("testSurfaceRecording", noOfFailure == 0);
+    }
+
+    // Test recording from surface source with/without audio
+    public void testSurfaceRecordingTimeLapse() {
+        boolean success = false;
+        int noOfFailure = 0;
+        try {
+            int codec = MediaRecorder.VideoEncoder.H264;
+            int frameRate = MediaProfileReader.getMaxFrameRateForCodec(codec);
+            for (int k = 0; k < 2; k++) {
+                // k==0: time lapse test, set capture rate to MIN_VIDEO_FPS
+                // k==1: slow motion test, set capture rate to HIGH_SPEED_FPS
+                String filename = "/sdcard/surface_" +
+                            (k==0 ? "time_lapse" : "slow_motion") + ".3gp";
+
+                // always set videoOnly=false, MediaRecorder should disable
+                // audio automatically with time lapse/slow motion
+                success = recordVideoFromSurface(frameRate,
+                        k==0 ? MIN_VIDEO_FPS : HIGH_SPEED_FPS,
+                        352, 288, codec,
+                        MediaRecorder.OutputFormat.THREE_GPP,
+                        filename, false /* videoOnly */);
+                if (success) {
+                    success = validateVideo(filename, 352, 288);
+                }
+                if (!success) {
+                    noOfFailure++;
+                }
+            }
+        } catch (Exception e) {
+            Log.v(TAG, e.toString());
+        }
+        assertTrue("testSurfaceRecordingTimeLapse", noOfFailure == 0);
+    }
+
 }
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
deleted file mode 100644
index 7dfab7d..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaItemThumbnailTest.java
+++ /dev/null
@@ -1,921 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest.functional.videoeditor;
-
-import java.io.File;
-import java.io.IOException;
-
-import android.graphics.Bitmap;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.VideoEditor;
-import android.os.Environment;
-import android.test.ActivityInstrumentationTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.VideoEditorHelper;
-
-public class MediaItemThumbnailTest extends
-    ActivityInstrumentationTestCase<MediaFrameworkTest> {
-    private final String TAG = "MediaItemThumbailTest";
-
-    private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
-
-    private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
-
-    private VideoEditor mVideoEditor;
-
-    private VideoEditorHelper mVideoEditorHelper;
-
-    public MediaItemThumbnailTest() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        // setup for each test case.
-        super.setUp();
-        mVideoEditorHelper = new VideoEditorHelper();
-        // Create a random String which will be used as project path, where all
-        // project related files will be stored.
-        final String projectPath = mVideoEditorHelper.
-            createRandomFile(PROJECT_LOCATION);
-        mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
-        // Clean the directory created as project path
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-        System.gc();
-        super.tearDown();
-    }
-
-    protected void validateThumbnail(Bitmap thumbNailBmp, int outWidth,
-        int outHeight) throws Exception {
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertEquals("Thumbnail Height", outHeight, thumbNailBmp.getHeight());
-        assertEquals("Thumbnail Width", outWidth, thumbNailBmp.getWidth());
-        thumbNailBmp.recycle();
-    }
-
-    // -----------------------------------------------------------------
-    // THUMBNAIL
-    // -----------------------------------------------------------------
-    /**
-     * To test thumbnail / frame extraction on H.263 QCIF.
-     */
-    @LargeTest
-    public void testThumbnailForH263QCIF() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int atTime = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final int outWidth = (mediaVideoItem.getWidth() / 2);
-        final int outHeight = mediaVideoItem.getHeight();
-
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on MPEG4 VGA .
-     */
-    @LargeTest
-    public void testThumbnailForMPEG4VGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_30fps_512Kbps_0_23.3gp";
-        final int atTime = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = (mediaVideoItem.getWidth() / 2);
-        final int outHeight = mediaVideoItem.getHeight();
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on MPEG4 NTSC.
-     */
-    @LargeTest
-    public void testThumbnailForMPEG4NTSC() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final int atTime = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = mediaVideoItem.getWidth() / 2;
-        final int outHeight = mediaVideoItem.getHeight() / 2;
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on MPEG4 WVGA.
-     */
-    @LargeTest
-    public void testThumbnailForMPEG4WVGA() throws Exception {
-
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4";
-        final int atTime = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = mediaVideoItem.getWidth() * 2;
-        final int outHeight = mediaVideoItem.getHeight();
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on MPEG4 QCIF.
-     */
-    @LargeTest
-    public void testThumbnailForMPEG4QCIF() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int atTime = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = mediaVideoItem.getWidth();
-        final int outHeight = mediaVideoItem.getHeight() * 2;
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on H264 QCIF.
-     */
-    @LargeTest
-    public void testThumbnailForH264QCIF() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H264_BP_176x144_15fps_144kbps_AMRNB_8kHz_12.2kbps_m_1_17.3gp";
-
-        final int atTime = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = mediaVideoItem.getWidth() * 2;
-        final int outHeight = mediaVideoItem.getHeight() * 2;
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on H264 VGA.
-     */
-    @LargeTest
-    public void testThumbnailForH264VGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final int outWidth = 32;
-        final int outHeight = 32;
-        final int atTime = 0;
-
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-    /**
-     * To test thumbnail / frame extraction on H264 WVGA.
-     */
-    @LargeTest
-    public void testThumbnailForH264WVGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
-        final int outWidth = 64;
-        final int outHeight = 64;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final long atTime = mediaVideoItem.getDuration() / 2;
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on H264 854x480.
-     */
-    @LargeTest
-    public void testThumbnailForH264854_480() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_854x480_15fps_256kbps_AACLC_16khz_48kbps_s_0_26.mp4";
-        final int outWidth = 128;
-        final int outHeight = 128;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        MediaVideoItem mediaVideoItem = null;
-        mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final long atTime = mediaVideoItem.getDuration() - 1000;
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on H264 960x720.
-     */
-    @LargeTest
-    public void testThumbnailForH264HD960() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_960x720_25fps_800kbps_AACLC_48Khz_192Kbps_s_1_17.mp4";
-        final int outWidth = 75;
-        final int outHeight = 75;
-
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final long atTime = mediaVideoItem.getDuration() - 1000;
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on H264 1080x720 .
-     */
-    @LargeTest
-    public void testThumbnailForH264HD1080() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = mediaVideoItem.getWidth() / 2;
-        final int outHeight = mediaVideoItem.getHeight() / 2;
-        final long atTime = mediaVideoItem.getDuration() / 4;
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * Check the thumbnail / frame extraction precision at 0,100 and 200 ms
-     */
-    @LargeTest
-    public void testThumbnailForH264VGADifferentDuration() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final int atTime = 0;
-        final int atTime1 = 100;
-        final int atTime2 = 200;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = mediaVideoItem.getWidth();
-        final int outHeight = mediaVideoItem.getHeight();
-
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-
-        // get Thumbnail @ 100ms
-        final Bitmap thumbNailBmpAt100 =
-            mediaVideoItem.getThumbnail(outWidth, outHeight, atTime1);
-        validateThumbnail(thumbNailBmpAt100, outWidth, outHeight);
-
-        // get Thumbnail @ 200ms
-        final Bitmap thumbNailBmpAt200 = mediaVideoItem.getThumbnail(
-            outWidth, outHeight, atTime2);
-        validateThumbnail(thumbNailBmpAt200, outWidth, outHeight);
-    }
-
-    /**
-     *Check the thumbnail / frame extraction precision at
-     * FileDuration,FileDuration/2 + 100 andFileDuration/2 + 200 ms
-     */
-    @LargeTest
-    public void testThumbnailForMP4VGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, MediaItem.RENDERING_MODE_BLACK_BORDER);
-
-        final int outWidth = mediaVideoItem.getWidth();
-        final int outHeight = mediaVideoItem.getHeight();
-        final long atTime = mediaVideoItem.getDuration() / 2;
-        final long atTime1 = atTime + 100;
-        final long atTime2 = atTime + 200;
-
-        // get Thumbnail @ duration/2
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-
-        // get Thumbnail @ duration/2 + 100ms
-        final Bitmap thumbNailBmpAt100 = mediaVideoItem.getThumbnail(
-            outWidth, outHeight, atTime1);
-        validateThumbnail(thumbNailBmpAt100, outWidth, outHeight);
-
-        // get Thumbnail @ duration/2 + 200ms
-        final Bitmap thumbNailBmpAt200 = mediaVideoItem.getThumbnail(
-            outWidth, outHeight, atTime2);
-        validateThumbnail(thumbNailBmpAt200, outWidth, outHeight);
-    }
-
-    /**
-     * Check the thumbnail / frame extraction on JPEG file
-     */
-    @LargeTest
-    public void testThumbnailForImage() throws Exception {
-        final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int mediaDuration = 1000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        int outWidth = 0;
-        int outHeight = 0;
-
-        final MediaImageItem mii = mVideoEditorHelper.createMediaItem(
-            mVideoEditor, "m1", imageItemFilename, mediaDuration, renderingMode);
-        assertNotNull("Media Image Item is Null",  mii);
-        outWidth =  mii.getWidth() / 2;
-        outHeight =  mii.getHeight() / 2;
-
-        final Bitmap thumbNailBmp = mii.getThumbnail(outWidth,
-            outHeight, mediaDuration);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-    /**
-     *To test ThumbnailList for H263 QCIF
-     */
-    @LargeTest
-    public void testThumbnailListH263QCIF() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp";
-        final int startTime = 0;
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final int outWidth = mediaVideoItem.getWidth() / 4;
-        final int outHeight = mediaVideoItem.getHeight() / 4;
-        final long endTime = mediaVideoItem.getDuration() / 2;
-
-        final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
-            outWidth, outHeight, startTime, endTime, tnCount);
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
-
-        for (int i = 0; i < thumbNailBmp.length; i++) {
-            validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
-            thumbNailBmp[i] = null;
-        }
-    }
-
-    /**
-     *To test ThumbnailList for MPEG4 QCIF
-     */
-    @LargeTest
-    public void testThumbnailListMPEG4QCIF() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final int outWidth = mediaVideoItem.getWidth() / 2;
-        final int outHeight = mediaVideoItem.getHeight() / 2;
-        final long startTime = mediaVideoItem.getDuration() / 2;
-        final long endTime = mediaVideoItem.getDuration();
-
-        final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
-            outWidth, outHeight, startTime, endTime, tnCount);
-
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
-        for (int i = 0; i < thumbNailBmp.length; i++) {
-            validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
-            thumbNailBmp[i] = null;
-        }
-    }
-
-    /**
-     *To test ThumbnailList for H264 VGA
-     */
-    @LargeTest
-    public void testThumbnailListH264VGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final int outWidth = mediaVideoItem.getWidth() / 2;
-        final int outHeight = mediaVideoItem.getHeight() / 2;
-        final long startTime = mediaVideoItem.getDuration() / 3;
-        final long endTime = mediaVideoItem.getDuration() / 2;
-
-        final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
-            outWidth, outHeight, startTime, endTime, tnCount);
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
-        for (int i = 0; i < thumbNailBmp.length; i++) {
-            validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
-            thumbNailBmp[i] = null;
-        }
-    }
-
-    /**
-     *To test ThumbnailList for H264 WVGA
-     */
-    @LargeTest
-    public void testThumbnailListH264WVGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final int outWidth = mediaVideoItem.getWidth() / 2;
-        final int outHeight = mediaVideoItem.getHeight() / 2;
-        final long startTime = mediaVideoItem.getDuration() / 3;
-        final long endTime = mediaVideoItem.getDuration() / 2;
-
-        final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(
-            outWidth, outHeight, startTime, endTime, tnCount);
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
-        for (int i = 0; i < thumbNailBmp.length; i++) {
-            validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
-            thumbNailBmp[i] = null;
-        }
-    }
-
-    /**
-     *To test ThumbnailList for H264 VGA ,Time exceeding file duration
-     */
-    @LargeTest
-    public void testThumbnailH264VGAExceedingFileDuration() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        boolean flagForException = false;
-        int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        try {
-            final MediaVideoItem mediaVideoItem =
-                mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = mediaVideoItem.getWidth() / 2;
-            final int outHeight = mediaVideoItem.getHeight() / 2;
-            final long atTime = mediaVideoItem.getDuration() + 2000;
-            mediaVideoItem.getThumbnail(outWidth, outHeight, atTime);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Exception in Extracting thumbanil with Invalid Time",
-            flagForException);
-    }
-
-    /**
-     *To test ThumbnailList for VGA Image
-     */
-    @LargeTest
-    public void testThumbnailListVGAImage() throws Exception {
-        final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int imageItemDuration = 10000;
-        final int startTime = 0;
-        final int endTime = 0;
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                imageItemFilename, imageItemDuration, renderingMode);
-        final int outWidth = mediaImageItem.getWidth() / 2;
-        final int outHeight = mediaImageItem.getHeight() / 2;
-
-        final Bitmap thumbNailBmp[] = mediaImageItem.getThumbnailList
-            (outWidth, outHeight, startTime, endTime, tnCount);
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
-        for (int i = 0; i < thumbNailBmp.length; i++) {
-            validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
-            thumbNailBmp[i] = null;
-        }
-    }
-
-    /**
-     *To test ThumbnailList for Invalid file path
-     */
-    @LargeTest
-    public void testThumbnailForInvalidFilePath() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "/sdcard/abc.jpg";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        try{
-        final MediaImageItem mii = new MediaImageItem(mVideoEditor, "m1",
-            imageItemFileName, 3000, renderingMode);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        } catch (IOException e) {
-            flagForException = true;
-        }
-        assertTrue(" Invalid File Path", flagForException);
-    }
-
-    /**
-     * To test thumbnail / frame extraction with setBoundaries
-     */
-    @LargeTest
-    public void testThumbnailForMPEG4WVGAWithSetBoundaries() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4";
-        final int atTime = 10000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        mediaVideoItem.setExtractBoundaries(1000,
-            (mediaVideoItem.getDuration() - 21000));
-
-        final int outWidth = (mediaVideoItem.getWidth() / 2);
-        final int outHeight = (mediaVideoItem.getHeight() / 2);
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail(outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     *To test ThumbnailList for H264 WVGA with setExtractboundaries
-     */
-    @LargeTest
-    public void testThumbnailListForH264WVGAWithSetBoundaries() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
-        final int thumbNailStartTime = 10000;
-        final int thumbNailEndTime = 12000;
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final int outWidth = (mediaVideoItem.getWidth() / 2);
-        final int outHeight = (mediaVideoItem.getHeight() / 2);
-
-        mediaVideoItem.setExtractBoundaries(10000, 12000);
-
-        final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList
-            (outWidth, outHeight, thumbNailStartTime, thumbNailEndTime,
-             tnCount);
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertTrue("Thumbnail Size", (thumbNailBmp.length > 0) ? true : false);
-        for (int i = 0; i < thumbNailBmp.length; i++) {
-            validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
-            thumbNailBmp[i] = null;
-        }
-    }
-
-    /**
-     *To test ThumbnailList for H264 WVGA with count > frame available
-     */
-    @LargeTest
-    public void testThumbnailListForH264WVGAWithCount() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
-        final int tnCount = 70;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-
-        final int outWidth = (mediaVideoItem.getWidth() / 2);
-        final int outHeight = (mediaVideoItem.getHeight() / 2);
-        final long thumbNailStartTime = mediaVideoItem.getDuration() / 2;
-        final long thumbNailEndTime = thumbNailStartTime + 4000;
-        Bitmap thumbNailBmp[] = null;
-        boolean flagForException = false;
-        try{
-            thumbNailBmp = mediaVideoItem.getThumbnailList(outWidth, outHeight,
-                thumbNailStartTime, thumbNailEndTime, tnCount);
-        }catch (Exception e){
-            assertTrue("Unable to get Thumbnail list", flagForException);
-        }
-        if (thumbNailBmp.length <= tnCount) {
-            flagForException = true;
-        }
-        assertTrue("Thumbnail count more than asked", flagForException);
-    }
-
-    /**
-     *To test ThumbnailList for H264 WVGA with startTime > End Time
-     */
-    @LargeTest
-    public void testThumbnailListH264WVGAWithStartGreaterEnd() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int tnCount = 10;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = (mediaVideoItem.getWidth() / 2);
-        final int outHeight = (mediaVideoItem.getHeight() / 2);
-        final long thumbNailStartTime = mediaVideoItem.getDuration() / 2;
-        final long thumbNailEndTime = thumbNailStartTime - 1000;
-        try{
-            mediaVideoItem.getThumbnailList(outWidth, outHeight,
-                thumbNailStartTime, thumbNailEndTime, tnCount);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Thumbnail Extraction where start time > end time",
-            flagForException);
-    }
-
-    /**
-     *To test ThumbnailList for H264 WVGA with startTime = End Time
-     */
-    @LargeTest
-    public void testThumbnailListH264WVGAWithStartEqualEnd() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
-        final int tnCount = 1;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = (mediaVideoItem.getWidth() / 2);
-        final int outHeight = (mediaVideoItem.getHeight() / 2);
-        final long thumbNailStartTime = mediaVideoItem.getDuration() / 2;
-        final long thumbNailEndTime = thumbNailStartTime;
-        final Bitmap thumbNailBmp[] = mediaVideoItem.getThumbnailList(outWidth,
-            outHeight, thumbNailStartTime, thumbNailEndTime, tnCount);
-        assertNotNull("Thumbnail Retrived is Null", thumbNailBmp);
-        assertEquals("Thumbnail Count", tnCount, thumbNailBmp.length);
-        for (int i = 0; i < thumbNailBmp.length; i++) {
-            validateThumbnail(thumbNailBmp[i], outWidth, outHeight);
-            thumbNailBmp[i] = null;
-        }
-    }
-
-    /**
-     *To test ThumbnailList for file where video duration is less
-     * than file duration.
-     */
-    @LargeTest
-    public void testThumbnailForVideoDurationLessFileDuration() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-            final MediaVideoItem mediaVideoItem =
-                mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = (mediaVideoItem.getWidth() / 2);
-            final int outHeight = (mediaVideoItem.getHeight() / 2);
-            final long atTime = mediaVideoItem.getDuration() - 2000;
-            final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
-                outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-
-    }
-
-    /**
-     *To test ThumbnailList for file which has video part corrupted
-     */
-    @LargeTest
-    public void testThumbnailWithCorruptedVideoPart() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "corrupted_H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-
-        try {
-            final MediaVideoItem mediaVideoItem =
-                 mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = mediaVideoItem.getWidth();
-            final int outHeight = mediaVideoItem.getHeight() * 2;
-            final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail
-                (outWidth, outHeight, mediaVideoItem.getDuration()/2);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Corrupted File cannot be read", flagForException);
-    }
-
-    /**
-     * Check the thumbnail / frame list extraction for Height as Negative Value
-     */
-    @LargeTest
-    public void testThumbnailWithNegativeHeight() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        try {
-            final MediaVideoItem mediaVideoItem =
-                mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = (mediaVideoItem.getWidth() / 2);
-            final int outHeight = -1;
-            final long thumbNailStartTime =
-                mediaVideoItem.getBoundaryBeginTime()/2;
-            final long thumbNailEndTime = mediaVideoItem.getBoundaryEndTime();
-            mediaVideoItem.getThumbnailList(outWidth, outHeight,
-                thumbNailStartTime, thumbNailEndTime, tnCount);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Thumbnail List with negative Height", flagForException);
-    }
-
-    /**
-     * Check the thumbnail for Height as Zero
-     */
-    @LargeTest
-    public void testThumbnailWithHeightAsZero() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int atTime = 100;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        try {
-            final MediaVideoItem mediaVideoItem =
-                mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = (mediaVideoItem.getWidth() / 2);
-            final int outHeight = -1;
-            mediaVideoItem.getThumbnail(outWidth, outHeight, atTime);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Thumbnail List with Zero Height", flagForException);
-    }
-
-    /**
-     * Check the thumbnail for Height = 10
-     */
-    @LargeTest
-    public void testThumbnailWithHeight() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int atTime = 1000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-            final MediaVideoItem mediaVideoItem =
-                mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = (mediaVideoItem.getWidth() / 2);
-            final int outHeight = 10;
-            final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
-                outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * Check the thumbnail / frame list extraction for Width as Negative Value
-     */
-    @LargeTest
-    public void testThumbnailWithNegativeWidth() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int tnCount = 10;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        try {
-            final MediaVideoItem mediaVideoItem =
-                mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = -1;
-            final int outHeight = mediaVideoItem.getHeight();
-            final long thumbNailStartTime =
-                mediaVideoItem.getBoundaryBeginTime()/2;
-            final long thumbNailEndTime = mediaVideoItem.getBoundaryEndTime();
-            mediaVideoItem.getThumbnailList(outWidth, outHeight, thumbNailStartTime,
-                thumbNailEndTime, tnCount);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Thumbnail List with negative Height", flagForException);
-    }
-
-    /**
-     * Check the thumbnail / frame list extraction for Width zero
-     */
-    @LargeTest
-    public void testThumbnailWithWidthAsZero() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int atTime = 1000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        try {
-            final MediaVideoItem mediaVideoItem =
-                mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                    videoItemFilename, renderingMode);
-            final int outWidth = 0;
-            final int outHeight = mediaVideoItem.getHeight() / 2;
-            mediaVideoItem.getThumbnail(outWidth, outHeight, atTime);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Thumbnail List with Zero Width", flagForException);
-    }
-
-    /**
-     * Check the thumbnail for Width = 10
-     */
-    @LargeTest
-    public void testThumbnailWithWidth() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        final int atTime = 1000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth = 10;
-        final int outHeight = mediaVideoItem.getHeight();
-        final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
-            outHeight, atTime);
-        validateThumbnail(thumbNailBmp, outWidth, outHeight);
-    }
-
-    /**
-     * To test thumbnail / frame extraction on MPEG4 (time beyond file duration).
-     */
-    @LargeTest
-    public void testThumbnailMPEG4withMorethanFileDuration() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_30fps_256kbps_AACLC_44.1kHz_96kbps_s_1_17.3gp";
-        boolean flagForException = false;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename, renderingMode);
-        final int outWidth =  mediaVideoItem.getWidth()/2;
-        final int outHeight =  mediaVideoItem.getHeight()/2;
-        final long atTime = mediaVideoItem.getDuration() + 100;
-        try{
-            final Bitmap thumbNailBmp = mediaVideoItem.getThumbnail (outWidth,
-            outHeight, atTime);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Thumbnail duration is more than file duration",
-            flagForException);
-    }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
deleted file mode 100644
index 34cf9f0..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/MediaPropertiesTest.java
+++ /dev/null
@@ -1,750 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest.functional.videoeditor;
-
-import java.io.File;
-import java.io.IOException;
-
-import android.media.videoeditor.AudioTrack;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaProperties;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.VideoEditor;
-import android.os.Environment;
-import android.test.ActivityInstrumentationTestCase;
-import android.test.suitebuilder.annotation.LargeTest;
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import com.android.mediaframeworktest.VideoEditorHelper;
-import com.android.mediaframeworktest.MediaProfileReader;
-
-public class MediaPropertiesTest extends
-    ActivityInstrumentationTestCase<MediaFrameworkTest> {
-    private final String TAG = "MediaPropertiesTest";
-
-    private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
-
-    private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
-
-    private VideoEditor mVideoEditor;
-
-    private VideoEditorHelper mVideoEditorHelper;
-
-    public MediaPropertiesTest() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        // setup for each test case.
-        super.setUp();
-        mVideoEditorHelper = new VideoEditorHelper();
-        // Create a random String which will be used as project path,
-        // where all project related files will be stored.
-        final String projectPath = mVideoEditorHelper.
-            createRandomFile(PROJECT_LOCATION);
-        mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
-        // Clean the directory created as project path
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-        System.gc();
-        super.tearDown();
-    }
-
-    protected void validateVideoProperties(int aspectRatio, int fileType,
-        int videoCodecType, int duration, int videoBitrate, int fps,
-        int videoProfile, int videoLevel, int width, int height, int audioCodecType,
-        int audioSamplingFrequency, int audioChannel, int audioBitrate,
-        MediaVideoItem mvi) throws Exception {
-        assertEquals("Aspect Ratio Mismatch", aspectRatio, mvi.getAspectRatio());
-        assertEquals("File Type Mismatch", fileType, mvi.getFileType());
-        assertEquals("VideoCodec Mismatch", videoCodecType, mvi.getVideoType());
-
-        assertTrue("Video duration Mismatch", mVideoEditorHelper.checkRange (
-            duration, mvi.getDuration(), 10));
-        assertEquals("Video Profile " + mvi.getVideoProfile(), videoProfile,
-            mvi.getVideoProfile());
-        assertEquals("Video Level " + mvi.getVideoLevel(), videoLevel,
-            mvi.getVideoLevel());
-        assertEquals("Video height " + mvi.getHeight(), height, mvi.getHeight());
-        assertEquals("Video width " + mvi.getWidth(), width, mvi.getWidth());
-        /** Check FPS with 10% range */
-        assertTrue("fps Mismatch" + mvi.getFps(),
-            mVideoEditorHelper.checkRange(fps, mvi.getFps(), 10));
-
-        assertEquals("AudioType Mismatch ", audioCodecType, mvi.getAudioType());
-        assertEquals("Audio Sampling " + mvi.getAudioSamplingFrequency(),
-            audioSamplingFrequency, mvi.getAudioSamplingFrequency());
-        // PV SW AAC codec always returns number of channels as Stereo.
-        // So we do not assert for number of audio channels for AAC_LC
-        if ( audioCodecType != MediaProperties.ACODEC_AAC_LC ) {
-            assertEquals("Audio Channels " + mvi.getAudioChannels(), audioChannel,
-                mvi.getAudioChannels());
-        }
-    }
-
-    protected void validateAudioProperties(int audioCodecType, int duration,
-        int audioSamplingFrequency, int audioChannel, int audioBitrate,
-        AudioTrack aT) throws Exception {
-        assertEquals("AudioType Mismatch ", audioCodecType, aT.getAudioType());
-        assertTrue("Video duration Mismatch", mVideoEditorHelper.checkRange (
-            duration, aT.getDuration(), 10));
-        assertEquals("Audio Sampling " + aT.getAudioSamplingFrequency(),
-            audioSamplingFrequency, aT.getAudioSamplingFrequency());
-        // PV SW AAC codec always returns number of channels as Stereo.
-        // So we do not assert for number of audio channels for AAC_LC
-        if ( audioCodecType != MediaProperties.ACODEC_AAC_LC ) {
-            assertEquals("Audio Channels " + aT.getAudioChannels(), audioChannel,
-                aT.getAudioChannels());
-        }
-    }
-
-    protected void validateImageProperties(int aspectRatio, int fileType,
-        int width, int height, MediaImageItem mii)
-        throws Exception {
-        assertEquals("Aspect Ratio Mismatch", aspectRatio, mii.getAspectRatio());
-        assertEquals("File Type Mismatch", fileType, mii.getFileType());
-        assertEquals("Image height " + mii.getHeight(), height, mii.getHeight());
-        assertEquals("Image width " + mii.getWidth(), width, mii.getWidth());
-    }
-
-
-    /**
-     *To test Media Properties for file MPEG4 854 x 480
-     */
-    @LargeTest
-    public void testPropertiesMPEG4854_480() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_854x480_15fps_256kbps_AACLC_16khz_48kbps_s_0_26.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_16_9;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_MPEG4;
-        final int duration = 26933;
-        final int videoBitrate = 319000;
-        final int audioBitrate = 48000;
-        final int fps = 15;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 16000;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
-        final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
-        final int width = 854;
-        final int height = MediaProperties.HEIGHT_480;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename,
-            MediaItem.RENDERING_MODE_BLACK_BORDER);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-
-    /**
-     *To test Media Properties for file MPEG4 WVGA
-     */
-    @LargeTest
-    public void testPropertiesMPEGWVGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_5_3;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_MPEG4;
-        final int duration = 26933;
-        final int videoBitrate = 384000;
-        final int audioBitrate = 12800;
-        final int fps = 15;
-        final int audioCodecType = MediaProperties.ACODEC_AMRNB;
-        final int audioSamplingFrequency = 8000;
-        final int audioChannel = 1;
-        final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
-        final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
-        final int width = 800;
-        final int height = MediaProperties.HEIGHT_480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test media properties for MPEG4 720x480 (NTSC) + AAC file.
-     */
-    @LargeTest
-    public void testPropertiesMPEGNTSC() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_161kbps_s_0_26.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_MPEG4;
-        final int duration = 26866;
-        final int videoBitrate = 403000;
-        final int audioBitrate = 160000;
-        final int fps = 30;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 48000;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
-        final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
-        final int width = 720;
-        final int height = MediaProperties.HEIGHT_480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test Media Properties for file MPEG4 VGA
-     */
-    @LargeTest
-    public void testPropertiesMPEGVGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_MPEG4;
-        final int duration = 26933;
-        final int videoBitrate = 533000;
-        final int audioBitrate = 128000;
-        final int fps = 15;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 48000;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
-        final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
-        final int width = 640;
-        final int height = MediaProperties.HEIGHT_480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test Media Properties for file MPEG4 QCIF
-     */
-    @LargeTest
-    public void testPropertiesMPEGQCIF() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "MPEG4_SP_176x144_12fps_92kbps_AMRNB_8KHz_12.2kbps_m_0_27.3gp";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9;
-        final int fileType = MediaProperties.FILE_3GP;
-        final int videoCodecType = MediaProperties.VCODEC_MPEG4;
-        final int duration = 27000;
-        final int videoBitrate = 384000;
-        final int audioBitrate = 12200;
-        final int fps = 12;
-        final int audioCodecType = MediaProperties.ACODEC_AMRNB;
-        final int audioSamplingFrequency = 8000;
-        final int audioChannel = 1;
-        final int videoProfile = MediaProperties.MPEG4Profile.MPEG4ProfileSimple;
-        final int videoLevel = MediaProperties.MPEG4Level.MPEG4Level1;
-        final int width = 176;
-        final int height = MediaProperties.HEIGHT_144;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To To test media properties for H263 176x144 (QCIF) + AAC (mono) file.
-     */
-    @LargeTest
-    public void testPropertiesH263QCIF() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_16kHz_32kbps_m_0_26.3gp";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9;
-        final int fileType = MediaProperties.FILE_3GP;
-        final int videoCodecType = MediaProperties.VCODEC_H263;
-        final int duration = 26933;
-        final int videoBitrate = 384000;
-        final int audioBitrate = 64000;
-        final int fps = 15;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 16000;
-        final int audioChannel = 1;
-        final int videoProfile = MediaProperties.H263Profile.H263ProfileBaseline;
-        final int videoLevel = MediaProperties.H263Level.H263Level10;
-        final int width = 176;
-        final int height = MediaProperties.HEIGHT_144;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test Media Properties for file H264 VGA
-     */
-    @LargeTest
-    public void testPropertiesH264VGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
-        final int fileType = MediaProperties.FILE_3GP;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int duration = 77600;
-        final int videoBitrate = 745000;
-        final int audioBitrate = 64000;
-        final int fps = 15;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 48000;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int width = 640;
-        final int height = MediaProperties.HEIGHT_480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test Media Properties for file H264 NTSC
-     */
-    @LargeTest
-    public void testPropertiesH264NTSC() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H264_BP_720x480_25fps_256kbps_AMRNB_8khz_12.2kbps_m_0_26.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int duration = 26880;
-        final int videoBitrate = 244000;
-        final int audioBitrate = 12200;
-        final int fps = 25;
-        final int audioCodecType = MediaProperties.ACODEC_AMRNB;
-        final int audioSamplingFrequency = 8000;
-        final int audioChannel = 1;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int width = 720;
-        final int height = MediaProperties.HEIGHT_480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test media properties for H264 800x480 (WVGA) + AAC file.
-     */
-    @LargeTest
-    public void testPropertiesH264WVGA() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-              "H264_BP_800x480_15fps_512kbps_AACLC_24KHz_38Kbps_s_1_17.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_5_3;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int duration = 77466;
-        final int videoBitrate = 528000;
-        final int audioBitrate = 38000;
-        final int fps = 15;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 24000;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int width = 800;
-        final int height = MediaProperties.HEIGHT_480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test Media Properties for file H264 HD1280
-     */
-    @LargeTest
-    public void testPropertiesH264HD1280() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H264_BP_1280x720_15fps_512kbps_AACLC_16khz_48kbps_s_1_17.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_16_9;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int duration = 77600;
-        final int videoBitrate = 606000;
-        final int audioBitrate = 48000;
-        final int fps = 15;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 16000;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int width = 1280;
-        final int height = MediaProperties.HEIGHT_720;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test media properties for H264 1080x720 + AAC file
-     */
-    @LargeTest
-    public void testPropertiesH264HD1080WithAudio() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H264_BP_1080x720_30fps_12Mbps_AACLC_44.1khz_64kbps_s_1_17.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int duration = 77500;
-        final int videoBitrate = 1190000;
-        final int audioBitrate = 64000;
-        final int fps = 10;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 44100;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int width = 1080;
-        final int height = MediaProperties.HEIGHT_720;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test Media Properties for file WMV - Unsupported type
-     */
-    @LargeTest
-    public void testPropertiesWMVFile() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "WMV_V7_640x480_15fps_512Kbps_wma_V9_44khz_48Kbps_s_1_30.wmv";
-        boolean flagForException = false;
-        if (MediaProfileReader.getWMVEnable() == false) {
-            flagForException = true;
-        } else {
-            try {
-                new MediaVideoItem(mVideoEditor, "m1", videoItemFilename,
-                    MediaItem.RENDERING_MODE_BLACK_BORDER);
-            } catch (IllegalArgumentException e) {
-                flagForException = true;
-            } catch (IOException e) {
-                flagForException = true;
-            }
-        }
-        assertTrue("Media Properties for a WMV File -- Unsupported file type",
-            flagForException);
-    }
-
-    /**
-     *To test media properties for H.264 Main/Advanced profile.
-     */
-    @LargeTest
-    public void testPropertiesH264MainLineProfile() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH
-            + "H264_MP_960x720_25fps_800kbps_AACLC_48Khz_192Kbps_s_1_17.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int duration = 77500;
-        final int videoBitrate = 800000;
-        final int audioBitrate = 192000;
-        final int fps = 25;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 48000;
-        final int audioChannel = 2;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileMain;
-        final int videoLevel = MediaProperties.H264Level.H264Level31;
-        final int width = 960;
-        final int height = MediaProperties.HEIGHT_720;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-
-    }
-
-    /**
-     *To test Media Properties for non existing file.
-     */
-    @LargeTest
-    public void testPropertiesForNonExsitingFile() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH + "abc.3gp";
-        boolean flagForException = false;
-
-        try {
-            new MediaVideoItem(mVideoEditor, "m1", videoItemFilename,
-                MediaItem.RENDERING_MODE_BLACK_BORDER);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        } catch (IOException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Properties for non exsisting file", flagForException);
-     }
-
-    /**
-     *To test Media Properties for file H264 HD1080
-     */
-    @LargeTest
-    public void testPropertiesH264HD1080WithoutAudio() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int duration = 77366;
-        final int videoBitrate = 859000;
-        final int audioBitrate = 0;
-        final int fps = 30;
-        final int audioCodecType = -1;
-        final int audioSamplingFrequency = 0;
-        final int audioChannel = 0;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int width = 1080;
-        final int height = MediaProperties.HEIGHT_720;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mvi = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", videoItemFilename, renderingMode);
-
-        validateVideoProperties(aspectRatio, fileType, videoCodecType, duration,
-            videoBitrate, fps, videoProfile, videoLevel, width, height, audioCodecType,
-            audioSamplingFrequency, audioChannel, audioBitrate, mvi);
-    }
-
-    /**
-     *To test Media Properties for Image file of JPEG Type
-     */
-    @LargeTest
-    public void testPropertiesVGAImage() throws Exception {
-        final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int imageItemDuration = 10000;
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
-        final int fileType = MediaProperties.FILE_JPEG;
-        final int width = 640;
-        final int height = MediaProperties.HEIGHT_480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaImageItem mii = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", imageItemFilename, imageItemDuration,
-            renderingMode);
-        validateImageProperties(aspectRatio, fileType, width, height, mii);
-    }
-
-    /**
-     *To test Media Properties for Image file of PNG Type
-     */
-    @LargeTest
-    public void testPropertiesPNG() throws Exception {
-        final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.png";
-        final int imageItemDuration = 10000;
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_4_3;
-        final int fileType = MediaProperties.FILE_PNG;
-        final int width = 640;
-        final int height = 480;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mii = mVideoEditorHelper.createMediaItem
-            (mVideoEditor, "m1", imageItemFilename, imageItemDuration,
-            renderingMode);
-        validateImageProperties(aspectRatio, fileType, width, height, mii);
-    }
-
-    /**
-     *To test Media Properties for file GIF - Unsupported type
-     */
-    @LargeTest
-    public void testPropertiesGIFFile() throws Exception {
-
-        final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.gif";
-        final int imageItemDuration = 10000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        try {
-            new MediaImageItem(mVideoEditor, "m1", imageItemFilename,
-                imageItemDuration, renderingMode);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Properties for a GIF File -- Unsupported file type",
-            flagForException);
-    }
-
-    /**
-     *To test Media Properties for file Text file named as 3GP
-     */
-    @LargeTest
-    public void testPropertiesofDirtyFile() throws Exception {
-
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "Text_FileRenamedTo3gp.3gp";
-        boolean flagForException = false;
-
-        try {
-            new MediaVideoItem(mVideoEditor, "m1", videoItemFilename,
-                MediaItem.RENDERING_MODE_BLACK_BORDER);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Properties for a Dirty  File ",
-            flagForException);
-    }
-
-    /**
-     *To test Media Properties for file name as NULL
-     */
-    @LargeTest
-    public void testPropertieNULLFile() throws Exception {
-        final String videoItemFilename = null;
-        boolean flagForException = false;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        try {
-            new MediaVideoItem(mVideoEditor, "m1", videoItemFilename,
-                renderingMode);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Properties for NULL  File ",
-            flagForException);
-    }
-
-    /**
-     *To test Media Properties for file which is of type MPEG2
-     */
-    @LargeTest
-    public void testPropertiesMPEG2File() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "MPEG2_640x480_30fps_192kbps_1_5.mp4";
-        boolean flagForException = false;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        try {
-            new MediaVideoItem(mVideoEditor, "m1", videoItemFilename,
-                renderingMode);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Properties for a MPEG2 File --Unsupported file type",
-            flagForException);
-    }
-
-    /**
-     *To test Media Properties for file without Video only Audio
-     */
-    @LargeTest
-    public void testProperties3GPWithoutVideoMediaItem() throws Exception {
-        final String audioFilename = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        boolean flagForException = false;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        try {
-            new MediaVideoItem(mVideoEditor, "m1", audioFilename,
-                renderingMode);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Exception in Creaing Media Video item object without video",
-            flagForException);
-    }
-
-    /**
-     *To test media properties for Audio Track file. (No Video, AAC Audio)
-     */
-    @LargeTest
-    public void testProperties3GPWithoutVideoAudioTrack() throws Exception {
-
-        final String audioFilename = INPUT_FILE_PATH +
-            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
-        final int duration = 77554;
-        final int audioBitrate = 384000;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 44100;
-        final int audioChannel = 2;
-
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio
-            (mVideoEditor, "a1", audioFilename);
-
-        validateAudioProperties(audioCodecType, duration, audioSamplingFrequency,
-            audioChannel, audioBitrate, audioTrack);
-    }
-
-        /**
-     *To test media properties for Audio Track file. MP3 file
-     */
-    @LargeTest
-    public void testPropertiesMP3AudioTrack() throws Exception {
-
-        final String audioFilename = INPUT_FILE_PATH +
-            "MP3_48KHz_128kbps_s_1_17.mp3";
-        final int duration = 77640;
-        final int audioBitrate = 128000;
-        final int audioCodecType = MediaProperties.ACODEC_MP3;
-        final int audioSamplingFrequency = 48000;
-        final int audioChannel = 2;
-
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio
-            (mVideoEditor, "a1", audioFilename);
-
-        validateAudioProperties(audioCodecType, duration, audioSamplingFrequency,
-            audioChannel, audioBitrate, audioTrack);
-    }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
deleted file mode 100644
index 6e520c3..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorAPITest.java
+++ /dev/null
@@ -1,2751 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest.functional.videoeditor;
-
-import java.io.File;
-import java.util.List;
-
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.videoeditor.AudioTrack;
-import android.media.videoeditor.EffectColor;
-import android.media.videoeditor.EffectKenBurns;
-import android.media.videoeditor.ExtractAudioWaveformProgressListener;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaProperties;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.OverlayFrame;
-import android.media.videoeditor.Transition;
-import android.media.videoeditor.TransitionAlpha;
-import android.media.videoeditor.TransitionCrossfade;
-import android.media.videoeditor.TransitionFadeBlack;
-import android.media.videoeditor.TransitionSliding;
-import android.media.videoeditor.VideoEditor;
-import android.os.Environment;
-import android.test.ActivityInstrumentationTestCase;
-import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
-
-import android.util.Log;
-import java.lang.annotation.Annotation;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import android.test.suitebuilder.annotation.LargeTest;
-import com.android.mediaframeworktest.VideoEditorHelper;
-
-public class VideoEditorAPITest extends
-        ActivityInstrumentationTestCase<MediaFrameworkTest> {
-    private final String TAG = "VideoEditorTest";
-
-    private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
-
-    private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
-
-    private final String PROJECT_CLASS_NAME =
-        "android.media.videoeditor.VideoEditorImpl";
-    private VideoEditor mVideoEditor;
-    private VideoEditorHelper mVideoEditorHelper;
-
-    public VideoEditorAPITest() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        // setup for each test case.
-        super.setUp();
-        mVideoEditorHelper = new VideoEditorHelper();
-        // Create a random String which will be used as project path, where all
-        // project related files will be stored.
-        final String projectPath = mVideoEditorHelper.
-            createRandomFile(PROJECT_LOCATION);
-        mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
-        // Clean the directory created as project path
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-        System.gc();
-        super.tearDown();
-    }
-
-    /**
-     * To Test Creation of Media Video Item.
-     */
-    @LargeTest
-    public void testMediaVideoItem() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int videoItemRenderingMode =
-            MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-
-        assertTrue("Media Video ID",
-            mediaVideoItem1.getId().equals("mediaVideoItem1"));
-        assertTrue("Media Video Filename",
-            mediaVideoItem1.getFilename().equals(videoItemFileName));
-        assertEquals("Media Video Rendering Mode",
-            videoItemRenderingMode, mediaVideoItem1.getRenderingMode());
-        assertEquals("Media Video Item Duration", mediaVideoItem1.getDuration(),
-            mediaVideoItem1.getTimelineDuration());
-        assertEquals("Media Video Overlay", 0,
-            mediaVideoItem1.getAllOverlays().size());
-        assertEquals("Media Video Effect", 0,
-            mediaVideoItem1.getAllEffects().size());
-        assertNull("Media Video Begin transition",
-            mediaVideoItem1.getBeginTransition());
-        assertNull("Media Video End transition",
-            mediaVideoItem1.getEndTransition());
-        mediaVideoItem1.setExtractBoundaries(1000,11000);
-        boolean flagForException = false;
-        if (mediaVideoItem1.getDuration() !=
-            mediaVideoItem1.getTimelineDuration()) {
-            flagForException = true;
-        }
-        assertTrue("Media Video Item Duration & Timeline are same",
-            flagForException );
-    }
-
-    /**
-     * To test creation of Media Video Item with Set Extract Boundaries With Get
-     * the Begin and End Time.
-     */
-    @LargeTest
-    public void testMediaVideoItemExtractBoundaries() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int videoItemRenderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        mediaVideoItem1.setExtractBoundaries(1000, 11000);
-        assertEquals("Media Item Duration = StoryBoard Duration",
-            mediaVideoItem1.getTimelineDuration(), mVideoEditor.getDuration());
-        try {
-            mediaVideoItem1.setExtractBoundaries(0, 100000000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Set Extract with Invalid Values endTime > FileDuration",
-            flagForException);
-
-        flagForException = false;
-        try {
-            mediaVideoItem1.setExtractBoundaries(100000000, 11000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Set Extract with Invalid Values startTime > endTime",
-            flagForException);
-
-        flagForException = false;
-        try {
-            mediaVideoItem1.setExtractBoundaries(0, 0);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Set Extract with Invalid Values startTime = endTime",
-            flagForException);
-
-        mediaVideoItem1.setExtractBoundaries(1000, 10000);
-        assertTrue("Media Item Duration is still the same",
-            (mediaVideoItem1.getTimelineDuration() ==
-            (mediaVideoItem1.getBoundaryEndTime()-
-            mediaVideoItem1.getBoundaryBeginTime())) ? true : false);
-
-        mediaVideoItem1.setExtractBoundaries(1,mediaVideoItem1.getDuration()-1);
-        assertEquals("Media Item Start Time", 1,
-            mediaVideoItem1.getBoundaryBeginTime());
-        assertEquals("Media Item End Time", (mediaVideoItem1.getDuration() - 1),
-            mediaVideoItem1.getBoundaryEndTime());
-
-        mediaVideoItem1.setExtractBoundaries(1, mediaVideoItem1.getDuration());
-        assertEquals("Media Item Duration = StoryBoard Duration",
-            mediaVideoItem1.getTimelineDuration(), mVideoEditor.getDuration());
-
-        mediaVideoItem1.setExtractBoundaries(0,mediaVideoItem1.getDuration()/2);
-        assertEquals("Media Item Duration = StoryBoard Duration",
-            mediaVideoItem1.getTimelineDuration(), mVideoEditor.getDuration());
-
-        mediaVideoItem1.setExtractBoundaries(0, -1);
-        assertEquals("Media Item Duration = StoryBoard Duration",
-            mediaVideoItem1.getTimelineDuration(), mVideoEditor.getDuration());
-    }
-
-    /**
-     * To test creation of Media Video Item with Set and Get rendering Mode
-     */
-    @LargeTest
-    public void testMediaVideoItemRenderingModes() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int videoItemRenderingMode= MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        mediaVideoItem1.setRenderingMode(MediaItem.RENDERING_MODE_CROPPING);
-        assertEquals("MediaVideo Item rendering Mode",
-            MediaItem.RENDERING_MODE_CROPPING,
-            mediaVideoItem1.getRenderingMode());
-        try {
-            mediaVideoItem1.setRenderingMode(
-                MediaItem.RENDERING_MODE_CROPPING + 911);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Item Invalid rendering Mode", flagForException);
-        flagForException = false;
-        try {
-            mediaVideoItem1.setRenderingMode(
-                MediaItem.RENDERING_MODE_BLACK_BORDER - 11);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Item Invalid rendering Mode", flagForException);
-        assertEquals("MediaVideo Item rendering Mode",
-            MediaItem.RENDERING_MODE_CROPPING,
-            mediaVideoItem1.getRenderingMode());
-        mediaVideoItem1.setRenderingMode(MediaItem.RENDERING_MODE_STRETCH);
-        assertEquals("MediaVideo Item rendering Mode",
-            MediaItem.RENDERING_MODE_STRETCH,
-            mediaVideoItem1.getRenderingMode());
-    }
-
-
-    /**
-     * To Test the Media Video API : Set Audio Volume, Get Audio Volume and Mute
-     */
-    @LargeTest
-    public void testMediaVideoItemAudioFeatures() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int videoItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        mediaVideoItem1.setVolume(77);
-        assertEquals("Updated Volume is 77", 77, mediaVideoItem1.getVolume());
-
-        mediaVideoItem1.setMute(true);
-        assertTrue("Audio must be Muted", mediaVideoItem1.isMuted());
-
-        mediaVideoItem1.setVolume(78);
-        assertEquals("Updated Volume is 78", 78, mediaVideoItem1.getVolume());
-        assertTrue("Audio must be Muted", mediaVideoItem1.isMuted());
-
-        try {
-            mediaVideoItem1.setVolume(1000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Invalid Set Volume", flagForException);
-
-        mediaVideoItem1.setMute(false);
-        assertFalse("Audio must be Un-Muted", mediaVideoItem1.isMuted());
-
-        mediaVideoItem1.setVolume(0);
-        assertFalse("Audio must be Un-Muted", mediaVideoItem1.isMuted());
-
-        flagForException = false;
-        try {
-            mediaVideoItem1.setVolume(-1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Invalid Set Volume", flagForException);
-
-        mediaVideoItem1.setVolume(100);
-        assertEquals("MediaItem Volume", 100, mediaVideoItem1.getVolume());
-        try {
-            mediaVideoItem1.setVolume(101);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Invalid Set Volume", flagForException);
-        assertEquals("MediaItem Volume", 100, mediaVideoItem1.getVolume());
-    }
-
-    /**
-     * To Test the Media Video API : GetWaveFormData and
-     * extractAudioWaveFormData
-     */
-
-    @LargeTest
-    public void testMediaVideoItemGetWaveformData() throws Exception {
-
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int videoItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        assertNull("WaveForm data", mediaVideoItem1.getWaveformData());
-        final int[] progressWaveform = new int[105];
-
-        mediaVideoItem1.extractAudioWaveform(new
-            ExtractAudioWaveformProgressListener() {
-                int i = 0;
-                public void onProgress(int progress) {
-                    Log.i("WaveformData","progress=" +progress);
-                    progressWaveform[i++] = progress;
-                }
-            });
-        assertTrue("Progress of WaveForm data", mVideoEditorHelper
-            .checkProgressCBValues(progressWaveform));
-        assertNotNull("WaveForm data", mediaVideoItem1.getWaveformData());
-        assertTrue("WaveForm Frame Duration",
-            (mediaVideoItem1.getWaveformData().getFrameDuration() > 0?
-            true : false));
-        assertTrue("WaveForm Frame Count",
-            (mediaVideoItem1.getWaveformData().getFramesCount() > 0 ?
-            true : false));
-        assertTrue("WaveForm Gain",
-            (mediaVideoItem1.getWaveformData().getFrameGains().length > 0 ?
-            true : false));
-
-    }
-
-    /**
-     * To Test the Media Video API : Get Effect, GetAllEffects, remove Effect
-     */
-
-    @LargeTest
-    public void testMediaVideoItemEffect() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int videoItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem1 = mVideoEditorHelper.
-            createMediaItem(mVideoEditor, "mediaVideoItem1", videoItemFileName,
-            videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        assertTrue("Effect List Size",
-            (mediaVideoItem1.getAllEffects().size() == 0) ? true : false);
-        assertNull("Effect Item by ID", mediaVideoItem1.getEffect("xyx"));
-
-        final EffectColor effectColor = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "Effecton MVi1", 0, 4000, EffectColor.TYPE_GRADIENT,
-            EffectColor.GRAY);
-        mediaVideoItem1.addEffect(effectColor);
-
-        assertTrue("Effect List Size", (mediaVideoItem1.
-            getAllEffects().size() == 1) ? true : false);
-        assertEquals("Effect Item by Valid ID", effectColor,
-            mediaVideoItem1.getEffect(effectColor.getId()));
-        assertNull("Effect Item by Invalid ID",
-            mediaVideoItem1.getEffect("xyz"));
-        assertNull("Effect Item by Invalid ID",
-            mediaVideoItem1.removeEffect("effectId"));
-        assertTrue("Effect List Size",
-            (mediaVideoItem1.getAllEffects().size() == 1) ? true : false);
-        assertEquals("Effect Removed", effectColor,
-            mediaVideoItem1.removeEffect(effectColor.getId()));
-        assertTrue("Effect List Size",
-            (mediaVideoItem1.getAllEffects().size() == 0) ? true : false);
-        assertNull("Effect Item by ID", mediaVideoItem1.getEffect("effectId"));
-    }
-
-    /**
-     * To Test the Media Video API : Get Before and after transition
-     */
-
-    @LargeTest
-    public void testMediaVideoItemTransitions() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final int videoItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        assertNull("Begin Transition", mediaVideoItem1.getBeginTransition());
-        assertNull("End Transition", mediaVideoItem1.getEndTransition());
-
-        TransitionFadeBlack transition1 =
-            mVideoEditorHelper.createTFadeBlack("transition1", mediaVideoItem1,
-            null, 0, Transition.BEHAVIOR_SPEED_UP);
-        mVideoEditor.addTransition(transition1);
-        assertEquals("Begin transition", transition1,
-            mediaVideoItem1.getEndTransition());
-
-        assertNotNull("End Transition", mediaVideoItem1.getEndTransition());
-        assertTrue(mediaVideoItem1.
-            getEndTransition().getId().equals(transition1.getId()));
-        assertTrue(mediaVideoItem1.getEndTransition().getDuration() ==
-            transition1.getDuration() ? true : false);
-        assertTrue(mediaVideoItem1.getEndTransition().getBehavior() ==
-            transition1.getBehavior() ? true : false);
-
-        TransitionFadeBlack transition2 = mVideoEditorHelper.createTFadeBlack(
-            "transition2", null,mediaVideoItem1, 0, Transition.BEHAVIOR_LINEAR);
-        mVideoEditor.addTransition(transition2);
-        assertNotNull("Begin transition", mediaVideoItem1.getBeginTransition());
-        assertEquals("End Transition", transition2,
-            mediaVideoItem1.getBeginTransition());
-        assertTrue(mediaVideoItem1.
-            getBeginTransition().getId().equals(transition2.getId()));
-        assertTrue(mediaVideoItem1. getBeginTransition().getDuration() ==
-            transition2.getDuration() ? true : false);
-        assertTrue(mediaVideoItem1.getBeginTransition().getBehavior() ==
-            transition2.getBehavior() ? true : false);
-    }
-
-    /**
-     * To Test the Media Video API : Get All Overlay, Get Overlay and remove Overlay
-     *
-     */
-
-    @LargeTest
-    public void testMediaVideoItemOverlays() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final String overlayItemFileName = INPUT_FILE_PATH +
-            "IMG_176x144_Overlay1.png";
-        final int videoItemRenderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        assertTrue("Overlay List Size",
-            (mediaVideoItem1.getAllOverlays().size() == 0) ? true : false);
-        assertNull("Overlay Item by ID", mediaVideoItem1.getOverlay("xyz"));
-
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayItemFileName,
-            176, 144);
-        final OverlayFrame overlayFrame = mVideoEditorHelper.createOverlay(
-            mediaVideoItem1, "overlayId", mBitmap, 5000, 5000);
-        mediaVideoItem1.addOverlay(overlayFrame);
-
-        assertTrue("Overlay List Size",
-            (mediaVideoItem1.getAllOverlays().size() == 1) ? true : false);
-        assertEquals("Overlay Item by Valid ID", overlayFrame, mediaVideoItem1
-            .getOverlay(overlayFrame.getId()));
-        assertNull("Overlay Item by Invalid ID",
-            mediaVideoItem1.getOverlay("xyz"));
-        assertNull("Overlay Item by Invalid ID",
-            mediaVideoItem1.removeOverlay("xyz"));
-        assertTrue("Overlay List Size",
-            (mediaVideoItem1.getAllOverlays().size() == 1) ? true : false);
-        assertEquals("Overlay Removed", overlayFrame,
-            mediaVideoItem1.removeOverlay(overlayFrame.getId()));
-        assertTrue("Overlay List Size",
-            (mediaVideoItem1.getAllOverlays().size() == 0) ? true : false);
-        assertNull("Overlay Item by ID",mediaVideoItem1.getOverlay("effectId"));
-    }
-
-    /**
-     * To Test Creation of Media Image Item.
-     */
-    @LargeTest
-    public void testMediaImageItem() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-                imageItemFileName, 5000, imageItemRenderingMode);
-        assertTrue("Media Image ID",
-            mediaImageItem1.getId().equals("mediaImageItem1"));
-        assertTrue("Media IMage Filename",
-            mediaImageItem1.getFilename().equals(imageItemFileName));
-        assertEquals("Media Image Rendering Mode",
-            imageItemRenderingMode, mediaImageItem1.getRenderingMode());
-        assertEquals("Media Image Item Duration", mediaImageItem1.getDuration(),
-            mediaImageItem1.getTimelineDuration());
-        assertEquals("Media Image Overlay", 0,
-            mediaImageItem1.getAllOverlays().size());
-        assertEquals("Media Image Effect", 0,
-            mediaImageItem1.getAllEffects().size());
-        assertNull("Media Image Begin transition",
-            mediaImageItem1.getBeginTransition());
-        assertNull("Media Image End transition",
-            mediaImageItem1.getEndTransition());
-        assertEquals("Media Image Scaled Height", MediaProperties.HEIGHT_720,
-            mediaImageItem1.getScaledHeight());
-        assertEquals("Media Image Scaled Width", 960,
-            mediaImageItem1.getScaledWidth());
-        assertEquals("Media Image Aspect Ratio", MediaProperties.ASPECT_RATIO_4_3,
-            mediaImageItem1.getAspectRatio());
-        assertNotNull("Media Image Thumbnail",
-            mediaImageItem1.getThumbnail(960, MediaProperties.HEIGHT_720, 2000));
-    }
-
-    /**
-     * To Test the Media Image API : Get and Set rendering Mode
-     */
-    @LargeTest
-    public void testMediaImageItemRenderingModes() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final int imageItemRenderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, imageItemRenderingMode, 5000);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        mediaImageItem1.setRenderingMode(MediaItem.RENDERING_MODE_CROPPING);
-        assertEquals("MediaVideo Item rendering Mode",
-            MediaItem.RENDERING_MODE_CROPPING, mediaImageItem1.getRenderingMode());
-        try {
-            mediaImageItem1.setRenderingMode(
-                MediaItem.RENDERING_MODE_CROPPING + 911);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Item Invalid rendering Mode", flagForException);
-
-        flagForException = false;
-        try {
-            mediaImageItem1.setRenderingMode(
-                MediaItem.RENDERING_MODE_BLACK_BORDER - 11);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Media Item Invalid rendering Mode", flagForException);
-
-        assertEquals("MediaVideo Item rendering Mode",
-            MediaItem.RENDERING_MODE_CROPPING,
-            mediaImageItem1.getRenderingMode());
-        mediaImageItem1.setRenderingMode(MediaItem.RENDERING_MODE_STRETCH);
-        assertEquals("MediaVideo Item rendering Mode",
-            MediaItem.RENDERING_MODE_STRETCH,
-            mediaImageItem1.getRenderingMode());
-    }
-
-    /**
-     * To Test the Media Image API : GetHeight and GetWidth
-     */
-    @LargeTest
-    public void testMediaImageItemHeightWidth() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, imageItemRenderingMode, 5000);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        assertEquals("Image Height = Image Scaled Height",
-            mediaImageItem1.getScaledHeight(), mediaImageItem1.getHeight());
-        assertEquals("Image Width = Image Scaled Width",
-            mediaImageItem1.getScaledWidth(), mediaImageItem1.getWidth());
-    }
-
-
-
-/**    This Test Case can be removed as this is already checked in TC 010 */
-    /**
-     * To Test the Media Image API : Scaled Height and Scaled GetWidth
-     */
-    @LargeTest
-    public void testMediaImageItemScaledHeightWidth() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, imageItemRenderingMode, 5000);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        assertNotSame("Image Height = Image Scaled Height",
-            mediaImageItem1.getScaledHeight(), mediaImageItem1.getHeight());
-        assertNotSame("Image Width = Image Scaled Width",
-            mediaImageItem1.getScaledWidth(), mediaImageItem1.getWidth());
-    }
-
-    /**
-     * To Test the Media Image API : Get Effect, GetAllEffects, remove Effect
-     */
-
-    @LargeTest
-    public void testMediaImageItemEffect() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, 5000, imageItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        assertTrue("Effect List Size",
-            (mediaImageItem1.getAllEffects().size() == 0) ? true : false);
-        assertNull("Effect Item by ID", mediaImageItem1.getEffect("xyx"));
-
-        final EffectColor effectColor =
-            mVideoEditorHelper.createEffectItem(mediaImageItem1,
-            "Effecton MVi1", 0, 4000, EffectColor.TYPE_GRADIENT, EffectColor.GRAY);
-        mediaImageItem1.addEffect(effectColor);
-
-        assertTrue("Effect List Size",
-            (mediaImageItem1.getAllEffects().size() == 1) ? true : false);
-        assertEquals("Effect Item by Valid ID",
-            effectColor, mediaImageItem1.getEffect(effectColor.getId()));
-        assertNull("Effect Item by Invalid ID",
-            mediaImageItem1.getEffect("xyz"));
-        assertNull("Effect Item by Invalid ID",
-            mediaImageItem1.removeEffect("effectId"));
-        assertTrue("Effect List Size",
-            (mediaImageItem1.getAllEffects().size() == 1) ? true : false);
-        assertEquals("Effect Removed", effectColor,
-            mediaImageItem1.removeEffect(effectColor.getId()));
-        assertTrue("Effect List Size",
-            (mediaImageItem1.getAllEffects().size() == 0) ? true : false);
-        assertNull("Effect Item by ID", mediaImageItem1.getEffect("effectId"));
-    }
-
-    /**
-     * To Test the Media Image API : Get Before and after transition
-     */
-
-    @LargeTest
-    public void testMediaImageItemTransitions() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, 5000, imageItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        assertNull("Begin Transition", mediaImageItem1.getBeginTransition());
-        assertNull("End Transition", mediaImageItem1.getEndTransition());
-
-        TransitionFadeBlack transition1 =
-            mVideoEditorHelper.createTFadeBlack("transition1", mediaImageItem1,
-            null, 0, Transition.BEHAVIOR_SPEED_UP);
-        mVideoEditor.addTransition(transition1);
-
-        assertEquals("Begin transition", transition1,
-            mediaImageItem1.getEndTransition());
-        assertNotNull("End Transition", mediaImageItem1.getEndTransition());
-        assertTrue(mediaImageItem1.getEndTransition().getId().equals
-            (transition1.getId()));
-        assertTrue(mediaImageItem1.getEndTransition().getDuration() ==
-            transition1.getDuration() ? true : false);
-        assertTrue(mediaImageItem1.getEndTransition().getBehavior() ==
-            transition1.getBehavior() ? true : false);
-
-        TransitionFadeBlack transition2 = mVideoEditorHelper.createTFadeBlack(
-            "transition2",null, mediaImageItem1, 0, Transition.BEHAVIOR_SPEED_UP);
-        mVideoEditor.addTransition(transition2);
-
-        assertNotNull("Begin transition", mediaImageItem1.getBeginTransition());
-        assertEquals("End Transition", transition2,
-            mediaImageItem1.getBeginTransition());
-        assertTrue(mediaImageItem1.getBeginTransition().getId().equals(
-            transition2.getId()));
-        assertTrue(mediaImageItem1.getBeginTransition().getDuration() ==
-            transition2.getDuration() ? true : false);
-        assertTrue(mediaImageItem1.getBeginTransition().getBehavior() ==
-            transition2.getBehavior() ? true : false);
-    }
-
-    /**
-     * To Test the Media Image API : Get All Overlay, Get Overlay and remove
-     * Overlay
-     */
-
-    @LargeTest
-    public void testMediaImageItemOverlays() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String overlayItemFileName = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, 12000, imageItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        assertTrue("Overlay List Size",
-            (mediaImageItem1.getAllOverlays().size() == 0) ? true : false);
-        assertNull("Overlay Item by ID", mediaImageItem1.getOverlay("xyz"));
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayItemFileName,
-            640, 480);
-        final OverlayFrame overlayFrame =
-            mVideoEditorHelper.createOverlay(mediaImageItem1, "overlayId",
-            mBitmap, 5000, 5000);
-        mediaImageItem1.addOverlay(overlayFrame);
-
-        assertTrue("Overlay List Size",
-            (mediaImageItem1.getAllOverlays().size() == 1) ? true : false);
-        assertEquals("Overlay Item by Valid ID", overlayFrame, mediaImageItem1
-            .getOverlay(overlayFrame.getId()));
-        assertNull("Overlay Item by Invalid ID",
-            mediaImageItem1.getOverlay("xyz"));
-        assertNull("Remove Overlay Item by Invalid ID",
-            mediaImageItem1.removeOverlay("xyz"));
-        assertTrue("Overlay List Size",
-            (mediaImageItem1.getAllOverlays().size() == 1) ? true : false);
-        assertEquals("Overlay Removed",
-            overlayFrame, mediaImageItem1.removeOverlay(overlayFrame.getId()));
-        assertTrue("Overlay List Size",
-            (mediaImageItem1.getAllOverlays().size() == 0) ? true : false);
-        assertNull("Overlay Item by ID",
-            mediaImageItem1.getOverlay("effectId"));
-    }
-
-    /**
-     * To test creation of Audio Track
-     */
-
-    @LargeTest
-    public void testAudioTrack() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        assertEquals("Audio Track Item Duration", audioTrack.getDuration(),
-            audioTrack.getTimelineDuration());
-        assertEquals("Audio Track Start Time", 0, audioTrack.getStartTime());
-        assertFalse("Audio Track is Looping", audioTrack.isLooping());
-        audioTrack.getVolume();
-        assertFalse("Audio Track Ducking is Disabled",
-            audioTrack.isDuckingEnabled());
-        assertTrue("Audio Track Filename",
-            audioTrack.getFilename().equals(audioFileName));
-         assertEquals("Audio Ducking Threshold", 0,
-            audioTrack.getDuckingThreshhold());
-         assertFalse("Audio Track Mute", audioTrack.isMuted());
-         audioTrack.getDuckedTrackVolume();
-    }
-
-    /**
-     * To test creation of Audio Track with set extract boundaries
-     */
-    @LargeTest
-    public void testAudioTrackExtractBoundaries() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        boolean flagForException = false;
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        audioTrack.setExtractBoundaries(1000, 5000);
-        assertEquals("Audio Track Start time", 1000,
-            audioTrack.getBoundaryBeginTime());
-        assertEquals("Audio Track End time", 5000,
-            audioTrack.getBoundaryEndTime());
-        try {
-            audioTrack.setExtractBoundaries(0, 100000000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Audio Track With endTime > FileDuration", flagForException);
-        flagForException = false;
-        try {
-            audioTrack.setExtractBoundaries(100000000, 5000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Audio Track With startTime > FileDuration",
-            flagForException);
-        flagForException = false;
-        try {
-            audioTrack.setExtractBoundaries(0, 0);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        /* This is under discussion.  Hence, checked for False */
-        assertFalse("Audio Track With startTime = endTime", flagForException);
-        assertEquals("Audio Track Start time", 0,
-            audioTrack.getBoundaryBeginTime());
-        assertEquals("Audio Track End time", 0,
-            audioTrack.getBoundaryEndTime());
-        assertEquals("Audio Track Start time",0,
-            audioTrack.getBoundaryBeginTime());
-        assertEquals("Audio Track End time", (audioTrack.getTimelineDuration()),
-            audioTrack.getBoundaryEndTime());
-        audioTrack.setExtractBoundaries(0, audioTrack.getDuration() / 2);
-        assertEquals("Audio Track Start time",0,
-            audioTrack.getBoundaryBeginTime());
-        assertEquals("Audio Track End time", (audioTrack.getDuration() / 2),
-            audioTrack.getBoundaryEndTime());
-        audioTrack.setExtractBoundaries(1, audioTrack.getDuration() - 1);
-        assertEquals("Audio Track Start time", 1,
-            audioTrack.getBoundaryBeginTime());
-        assertEquals("Audio Track End time", (audioTrack.getDuration() - 1),
-            audioTrack.getBoundaryEndTime());
-
-        flagForException = false;
-        try {
-                audioTrack.setExtractBoundaries(0, -1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue ("Audio Track end time < 0",flagForException);
-    }
-
-    /**
-     * To test creation of Audio Track with set Start Time and Get Time
-     */
-    @LargeTest
-    public void testAudioTrackSetGetTime() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        boolean flagForException = false;
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-        /** set StartTime API is removed and start time is always 0 */
-        assertEquals("Audio Track Start Time", 0, audioTrack.getStartTime());
-    }
-
-    /**
-     * To Test the Audio Track API: Enable Ducking
-     */
-    @LargeTest
-    public void testAudioTrackEnableDucking() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        boolean flagForException = false;
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        assertFalse("Audio Ducking Disabled by default",
-            audioTrack.isDuckingEnabled());
-        audioTrack.enableDucking(45, 70);
-        assertTrue("Audio Ducking Enabled", audioTrack.isDuckingEnabled());
-        assertEquals("Audio Ducking Threshold", 45,
-            audioTrack.getDuckingThreshhold());
-        assertEquals("Audio Ducking Volume", 70,
-            audioTrack.getDuckedTrackVolume());
-        audioTrack.enableDucking(85, 70);
-        assertEquals("Audio Ducking Threshold", 85,
-            audioTrack.getDuckingThreshhold());
-        assertEquals("Audio Ducking Volume", 70,
-            audioTrack.getDuckedTrackVolume());
-        try {
-            audioTrack.enableDucking(91, 70);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Enable ducking threshold > 90", flagForException);
-        flagForException = false;
-        try {
-            audioTrack.enableDucking(90, 101);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Enable ducking volume > 100", flagForException);
-        flagForException = false;
-        try {
-            audioTrack.enableDucking(91, 101);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Enable ducking volume > 100 and threshold > 91",
-            flagForException);
-        flagForException = false;
-        try {
-            audioTrack.enableDucking(-1, 100);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Enable ducking threshold < 0", flagForException);
-        flagForException = false;
-        try {
-            audioTrack.enableDucking(1, -1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Enable ducking lowVolume < 0", flagForException);
-        flagForException = false;
-        try {
-            audioTrack.enableDucking(0, 50);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertFalse("Enable ducking threshold = 0", flagForException);
-    }
-
-    /**
-     * To Test the Audio Track API: Looping
-     */
-    @LargeTest
-    public void testAudioTrackLooping() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-        assertFalse("Audio Looping", audioTrack.isLooping());
-        audioTrack.enableLoop();
-        assertTrue("Audio Looping", audioTrack.isLooping());
-        audioTrack.disableLoop();
-        assertFalse("Audio Looping", audioTrack.isLooping());
-    }
-
-    /**
-     * To Test the Audio Track API:Extract waveform data
-     */
-
-    @LargeTest
-    public void testAudioTrackWaveFormData() throws Exception {
-        /** Image item is added as dummy as Audio track cannot be added without
-         * a media item in the story board
-         */
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, 5000, imageItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-
-        mVideoEditor.addAudioTrack(audioTrack);
-        assertNull("WaveForm data", audioTrack.getWaveformData());
-
-        final int[] progressUpdate = new int[105];
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            int i = 0;
-            public void onProgress(Object item, int action, int progress) {
-                progressUpdate[i++] = progress;
-            }
-        });
-
-        final int[] progressWaveform = new int[105];
-
-        audioTrack.extractAudioWaveform(
-            new ExtractAudioWaveformProgressListener() {
-                int i = 0;
-                public void onProgress(int progress) {
-                    Log.i("AudioWaveformData","progress=" +progress);
-                    progressWaveform[i++] = progress;
-            }
-        });
-        assertTrue("Progress of WaveForm data", mVideoEditorHelper
-            .checkProgressCBValues(progressWaveform));
-        assertNotNull("WaveForm data", audioTrack.getWaveformData());
-        assertTrue("WaveForm Frame Duration",
-            (audioTrack.getWaveformData().getFrameDuration() > 0 ?
-            true : false));
-        assertTrue("WaveForm Frame Count",
-            (audioTrack.getWaveformData().getFramesCount() > 0 ? true : false));
-        assertTrue("WaveForm Gain",
-            (audioTrack.getWaveformData().getFrameGains().length > 0 ?
-            true : false));
-    }
-
-    /**
-     * To Test the Audio Track API: Mute
-     */
-    @LargeTest
-    public void testAudioTrackMute() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        assertFalse("Audio Track UnMute", audioTrack.isMuted());
-        audioTrack.setMute(true);
-        assertTrue("Audio Track Mute", audioTrack.isMuted());
-        audioTrack.setMute(false);
-        assertFalse("Audio Track UnMute", audioTrack.isMuted());
-    }
-
-    /**
-     * To Test the Audio Track API: Get Volume and Set Volume
-     */
-    @LargeTest
-    public void testAudioTrackGetSetVolume() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        boolean flagForException = false;
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        audioTrack.setVolume(0);
-        assertEquals("Audio Volume", 0, audioTrack.getVolume());
-        assertFalse("Audio Track UnMute", audioTrack.isMuted());
-        audioTrack.setVolume(45);
-        assertEquals("Audio Volume", 45, audioTrack.getVolume());
-        assertFalse("Audio Track UnMute", audioTrack.isMuted());
-        try {
-            audioTrack.setVolume(-1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Volume = -1", flagForException);
-        assertEquals("Audio Volume", 45, audioTrack.getVolume());
-        flagForException = false;
-        try {
-            audioTrack.setVolume(101);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Volume = 101", flagForException);
-        flagForException = false;
-        try {
-            audioTrack.setVolume(1000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Volume = 10000", flagForException);
-        assertEquals("Audio Volume", 45, audioTrack.getVolume());
-    }
-
-    /**
-     * To test Effect Color.
-     */
-    @LargeTest
-    public void testAllEffects() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_30fps_512Kbps_0_27.mp4";
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final EffectColor effectColor1 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect1", 1000, 1000, EffectColor.TYPE_COLOR,
-            EffectColor.PINK);
-        mediaVideoItem1.addEffect(effectColor1);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor1.getMediaItem());
-        assertTrue("Effect Id", effectColor1.getId().equals("effect1"));
-        assertEquals("Effect StartTime", 1000, effectColor1.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor1.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_COLOR,
-            effectColor1.getType());
-        assertEquals("Effect Color", EffectColor.PINK, effectColor1.getColor());
-
-        final EffectColor effectColor2 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect2", 2000, 1000, EffectColor.TYPE_COLOR,
-            EffectColor.GRAY);
-        mediaVideoItem1.addEffect(effectColor2);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor2.getMediaItem());
-        assertTrue("Effect Id", effectColor2.getId().equals("effect2"));
-        assertEquals("Effect StartTime", 2000, effectColor2.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor2.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_COLOR,
-            effectColor2.getType());
-        assertEquals("Effect Color", EffectColor.GRAY, effectColor2.getColor());
-
-        final EffectColor effectColor3 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect3", 3000, 1000, EffectColor.TYPE_COLOR,
-            EffectColor.GREEN);
-        mediaVideoItem1.addEffect(effectColor3);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor3.getMediaItem());
-        assertTrue("Effect Id", effectColor3.getId().equals("effect3"));
-        assertEquals("Effect StartTime", 3000, effectColor3.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor3.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_COLOR,
-            effectColor3.getType());
-        assertEquals("Effect Color", EffectColor.GREEN, effectColor3.getColor());
-
-        final EffectColor effectColor4 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect4", 4000, 1000, EffectColor.TYPE_GRADIENT,
-            EffectColor.PINK);
-        mediaVideoItem1.addEffect(effectColor4);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor4.getMediaItem());
-        assertTrue("Effect Id", effectColor4.getId().equals("effect4"));
-        assertEquals("Effect StartTime", 4000, effectColor4.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor4.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_GRADIENT,
-            effectColor4.getType());
-        assertEquals("Effect Color", EffectColor.PINK, effectColor4.getColor());
-
-        final EffectColor effectColor5 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect5", 5000, 1000,
-            EffectColor.TYPE_GRADIENT, EffectColor.GRAY);
-        mediaVideoItem1.addEffect(effectColor5);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor5.getMediaItem());
-        assertTrue("Effect Id", effectColor5.getId().equals("effect5"));
-        assertEquals("Effect StartTime", 5000, effectColor5.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor5.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_GRADIENT,
-            effectColor5.getType());
-        assertEquals("Effect Color", EffectColor.GRAY, effectColor5.getColor());
-
-        final EffectColor effectColor6 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect6", 6000, 1000,
-            EffectColor.TYPE_GRADIENT, EffectColor.GREEN);
-        mediaVideoItem1.addEffect(effectColor6);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor6.getMediaItem());
-        assertTrue("Effect Id", effectColor6.getId().equals("effect6"));
-        assertEquals("Effect StartTime", 6000, effectColor6.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor6.getDuration());
-        assertEquals("Effect Type",
-            EffectColor.TYPE_GRADIENT, effectColor6.getType());
-        assertEquals("Effect Color",
-            EffectColor.GREEN, effectColor6.getColor());
-
-        final EffectColor effectColor7 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect7", 7000, 1000,
-            EffectColor.TYPE_FIFTIES, 0);
-        mediaVideoItem1.addEffect(effectColor7);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor7.getMediaItem());
-        assertTrue("Effect Id", effectColor7.getId().equals("effect7"));
-        assertEquals("Effect StartTime", 7000, effectColor7.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor7.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_FIFTIES,
-            effectColor7.getType());
-        assertEquals("Effect Color", -1, effectColor7.getColor());
-
-        final EffectColor effectColor8 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect8", 8000, 1000, EffectColor.TYPE_SEPIA, 0);
-        mediaVideoItem1.addEffect(effectColor8);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor8.getMediaItem());
-        assertTrue("Effect Id", effectColor8.getId().equals("effect8"));
-        assertEquals("Effect StartTime", 8000, effectColor8.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor8.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_SEPIA,
-            effectColor8.getType());
-        assertEquals("Effect Color", -1, effectColor8.getColor());
-
-        final EffectColor effectColor9 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect9", 9000, 1000,
-            EffectColor.TYPE_NEGATIVE, 0);
-        mediaVideoItem1.addEffect(effectColor9);
-
-        assertEquals("Associated Media Item", mediaVideoItem1,
-            effectColor9.getMediaItem());
-        assertTrue("Effect Id", effectColor9.getId().equals("effect9"));
-        assertEquals("Effect StartTime", 9000, effectColor9.getStartTime());
-        assertEquals("Effect EndTime", 1000, effectColor9.getDuration());
-        assertEquals("Effect Type", EffectColor.TYPE_NEGATIVE,
-            effectColor9.getType());
-        assertEquals("Effect Color", -1, effectColor9.getColor());
-        try {
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effect9",
-                9000, 1000, EffectColor.TYPE_COLOR - 1, 0);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect type Invalid", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effect9",
-                9000, 1000, EffectColor.TYPE_FIFTIES + 1, 0);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect type Invalid", flagForException);
-        try {
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effect10",
-                10000, 1000, EffectColor.TYPE_FIFTIES +
-                EffectColor.TYPE_GRADIENT, 0);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect type Invalid", flagForException);
-    }
-
-    /**
-     * To test Effect Color : Set duration and Get Duration
-     */
-    @LargeTest
-    public void testEffectSetgetDuration() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_30fps_512Kbps_0_27.mp4";
-        final int videoItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final EffectColor effectColor1 = mVideoEditorHelper.createEffectItem(
-            mediaVideoItem1, "effect1", 1000, 2000,
-            EffectColor.TYPE_COLOR, EffectColor.PINK);
-        mediaVideoItem1.addEffect(effectColor1);
-
-        effectColor1.setDuration(5000);
-        assertEquals("Updated Effect Duration", 5000,
-            effectColor1.getDuration());
-        try {
-            effectColor1.setDuration(mediaVideoItem1.getDuration() + 1000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect Color duration > mediaVideoItemDuration",
-            flagForException);
-        assertEquals("Effect Duration", 5000, effectColor1.getDuration());
-        flagForException = false;
-        try {
-            effectColor1.setDuration(-1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect Color duration = -1", flagForException);
-    }
-
-    /**
-     * To test Effect Color : UNDEFINED color param value
-     */
-    @LargeTest
-    public void testEffectUndefinedColorParam() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_30fps_512Kbps_0_27.mp4";
-        final int videoItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        try{
-        mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effect1", 1000,
-            2000, EffectColor.TYPE_COLOR, 0xabcdabcd);
-        }catch (IllegalArgumentException e){
-            flagForException = true;
-        }
-        assertTrue("Invalid Effect added",flagForException);
-    }
-
-    /**
-     * To test Effect Color : with Invalid StartTime and Duration
-     */
-    @LargeTest
-    public void testEffectInvalidStartTimeAndDuration() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_32kbps_m_1_17.3gp";
-        final int videoItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-            videoItemFileName, videoItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        try {
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effect1",
-                400000000, 2000, EffectColor.TYPE_COLOR, EffectColor.GREEN);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect with invalid StartTime", flagForException);
-
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effect1", -1,
-                2000, EffectColor.TYPE_COLOR, EffectColor.GREEN);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect with invalid StartTime", flagForException);
-
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effect1",
-                2000, -1, EffectColor.TYPE_COLOR, EffectColor.GREEN);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect with invalid Duration", flagForException);
-    }
-
-
-    /** Test cases 29, 30, 31, 32 and 33 are removed */
-
-
-    /**
-     * To test Effect : with NULL Media Item
-     */
-    @LargeTest
-    public void testEffectNullMediaItem() throws Exception {
-        boolean flagForException = false;
-        try {
-            mVideoEditorHelper.createEffectItem(null, "effect1", 1000, 4000,
-                EffectColor.TYPE_COLOR, EffectColor.GREEN);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Effect with null MediaItem", flagForException);
-    }
-
-    /**
-     * To test Effect : KenBurn Effect
-     */
-    @LargeTest
-    public void testEffectKenBurn() throws Exception {
-        // Test ken burn effect using a JPEG file.
-        testEffectKenBurn(INPUT_FILE_PATH + "IMG_640x480.jpg",
-         "mediaImageItem1");
-
-        // Test ken burn effect using a PNG file
-        testEffectKenBurn(INPUT_FILE_PATH + "IMG_640x480.png",
-         "mediaImageItem2");
-    }
-
-    private void testEffectKenBurn(final String imageItemFileName,
-     final String MediaId) throws Exception {
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, MediaId,
-            imageItemFileName, 5000, imageItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final Rect startRect = new Rect((mediaImageItem.getHeight() / 3),
-            (mediaImageItem.getWidth() / 3), (mediaImageItem.getHeight() / 2),
-            (mediaImageItem.getWidth() / 2));
-        final Rect endRect = new Rect(0, 0, mediaImageItem.getWidth(),
-            mediaImageItem.getHeight());
-
-        final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns(
-            mediaImageItem, "KBOnM2", startRect, endRect, 500, 3000);
-
-        assertNotNull("EffectKenBurns: " + imageItemFileName,
-            kbEffectOnMediaItem);
-
-        mediaImageItem.addEffect(kbEffectOnMediaItem);
-        assertEquals("KenBurn Start Rect: " + imageItemFileName, startRect,
-            kbEffectOnMediaItem.getStartRect());
-
-        assertEquals("KenBurn End Rect: " + imageItemFileName, endRect,
-            kbEffectOnMediaItem.getEndRect());
-    }
-
-    /**
-     * To test KenBurnEffect : Set StartRect and EndRect
-     */
-
-    @LargeTest
-    public void testEffectKenBurnSet() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int imageItemRenderingMode =MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-            imageItemFileName, 5000, imageItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final Rect startRect = new Rect((mediaImageItem.getHeight() / 3),
-            (mediaImageItem.getWidth() / 3), (mediaImageItem.getHeight() / 2),
-            (mediaImageItem.getWidth() / 2));
-        final Rect endRect = new Rect(0, 0, mediaImageItem.getWidth(),
-            mediaImageItem.getHeight());
-
-        EffectKenBurns kbEffectOnMediaItem=null;
-        kbEffectOnMediaItem = new EffectKenBurns(mediaImageItem, "KBOnM2",
-            startRect, endRect, 500, 3000);
-
-        assertNotNull("EffectKenBurns", kbEffectOnMediaItem);
-        mediaImageItem.addEffect(kbEffectOnMediaItem);
-        assertEquals("KenBurn Start Rect", startRect,
-            kbEffectOnMediaItem.getStartRect());
-        assertEquals("KenBurn End Rect", endRect,
-            kbEffectOnMediaItem.getEndRect());
-
-        final Rect startRect1 = new Rect((mediaImageItem.getHeight() / 5),
-            (mediaImageItem.getWidth() / 5), (mediaImageItem.getHeight() / 4),
-            (mediaImageItem.getWidth() / 4));
-        final Rect endRect1 = new Rect(10, 10, mediaImageItem.getWidth() / 4,
-            mediaImageItem.getHeight() / 4);
-
-        /* Added newly to take care of removal set APIs */
-        kbEffectOnMediaItem = new EffectKenBurns(mediaImageItem, "KBOnM2_changed",
-            startRect1, endRect1, 500, 3000);
-
-        assertEquals("KenBurn Start Rect", startRect1,
-            kbEffectOnMediaItem.getStartRect());
-        assertEquals("KenBurn End Rect", endRect1,
-            kbEffectOnMediaItem.getEndRect());
-
-        final Rect zeroRect = new Rect(0, 0, 0, 0);
-        try {
-            kbEffectOnMediaItem = new EffectKenBurns(mediaImageItem, "KBOnM2_zeroStart",
-                zeroRect, endRect, 500, 3000);
-
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Invalid Start Rect", flagForException);
-
-        flagForException = false;
-        try {
-            kbEffectOnMediaItem = new EffectKenBurns(mediaImageItem, "KBOnM2_zeroEnd",
-                startRect, zeroRect, 500, 3000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Invalid End Rect", flagForException);
-    }
-
-    /**
-     * To test Transition : Fade To Black with all behavior
-     * SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
-     */
-
-    @LargeTest
-    public void testTransitionFadeBlack() throws Exception {
-
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String videoItemFilename2 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_15fps_128kbps_1_35.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFilename3 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final String videoItemFilename4 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
-        final String videoItemFilename5 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_10fps_96kbps_0_25.3gp";
-        boolean flagForException = false;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-            videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-            videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem2.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final TransitionFadeBlack transition1And2 = mVideoEditorHelper
-            .createTFadeBlack("transition1And2", mediaVideoItem1,
-            mediaVideoItem2, 3000, Transition.BEHAVIOR_SPEED_UP);
-        mVideoEditor.addTransition(transition1And2);
-
-        assertTrue("Transition ID",
-            transition1And2.getId().equals("transition1And2"));
-        assertEquals("Transtion After Media item",
-            mediaVideoItem1, transition1And2.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem2,
-            transition1And2.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 3000, transition1And2.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_UP,
-            transition1And2.getBehavior());
-
-        final MediaImageItem mediaImageItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                imageItemFilename1, 15000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem3);
-
-        final TransitionFadeBlack transition2And3 =
-            mVideoEditorHelper.createTFadeBlack("transition2And3", mediaVideoItem2,
-                mediaImageItem3, 1000, Transition.BEHAVIOR_SPEED_DOWN);
-        mVideoEditor.addTransition(transition2And3);
-
-        assertTrue("Transition ID",
-            transition2And3.getId().equals("transition2And3"));
-        assertEquals("Transtion After Media item", mediaVideoItem2,
-            transition2And3.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaImageItem3,
-            transition2And3.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 1000, transition2And3.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_DOWN,
-            transition2And3.getBehavior());
-
-        final MediaVideoItem mediaVideoItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                videoItemFilename3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem4.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaVideoItem4);
-
-        final TransitionFadeBlack transition3And4 =
-            mVideoEditorHelper.createTFadeBlack("transition3And4", mediaImageItem3,
-                mediaVideoItem4, 5000, Transition.BEHAVIOR_LINEAR);
-        mVideoEditor.addTransition(transition3And4);
-
-        assertTrue("Transition ID",
-            transition3And4.getId().equals("transition3And4"));
-        assertEquals("Transtion After Media item", mediaImageItem3,
-            transition3And4.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem4,
-            transition3And4.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 5000, transition3And4.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_LINEAR,
-            transition3And4.getBehavior());
-
-        final MediaVideoItem mediaVideoItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                videoItemFilename4, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem5);
-
-        final TransitionFadeBlack transition4And5 =
-            mVideoEditorHelper.createTFadeBlack("transition4And5", mediaVideoItem4,
-                mediaVideoItem5, 8000, Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(transition4And5);
-
-        assertTrue("Transition ID",
-            transition4And5.getId().equals("transition4And5"));
-        assertEquals("Transtion After Media item", mediaVideoItem4,
-            transition4And5.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem5,
-            transition4And5.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 8000, transition4And5.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_MIDDLE_FAST,
-            transition4And5.getBehavior());
-
-        final MediaVideoItem mediaVideoItem6 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m6",
-                videoItemFilename5, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem6.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaVideoItem6);
-
-        final TransitionFadeBlack transition5And6 =
-            mVideoEditorHelper.createTFadeBlack("transition5And6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_SLOW);
-        mVideoEditor.addTransition(transition5And6);
-
-        assertTrue("Transition ID",
-            transition5And6.getId().equals("transition5And6"));
-        assertEquals("Transtion After Media item", mediaVideoItem5,
-            transition5And6.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem6,
-            transition5And6.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 2000, transition5And6.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_MIDDLE_SLOW,
-            transition5And6.getBehavior());
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTFadeBlack("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_SPEED_UP - 1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition FadeBlack with Invalid behavior", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTFadeBlack("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_FAST + 1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition FadeBlack with Invalid behavior", flagForException);
-    }
-
-    /**
-     * To test Transition : CrossFade with all behavior
-     * SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
-     */
-
-    @LargeTest
-    public void testTransitionCrossFade() throws Exception {
-
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String videoItemFilename2 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_15fps_128kbps_1_35.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFilename3 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final String videoItemFilename4 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
-        final String videoItemFilename5 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_10fps_96kbps_0_25.3gp";
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem2.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final TransitionCrossfade transition1And2 =
-            mVideoEditorHelper.createTCrossFade("transition1And2", mediaVideoItem1,
-                mediaVideoItem2, 3000, Transition.BEHAVIOR_SPEED_UP);
-        mVideoEditor.addTransition(transition1And2);
-
-        assertTrue("Transition ID",
-            transition1And2.getId().equals("transition1And2"));
-        assertEquals("Transtion After Media item", mediaVideoItem1,
-            transition1And2.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem2,
-            transition1And2.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 3000, transition1And2.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_UP,
-            transition1And2.getBehavior());
-
-        final MediaImageItem mediaImageItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                imageItemFilename1, 15000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem3);
-
-        final TransitionCrossfade transition2And3 =
-            mVideoEditorHelper.createTCrossFade("transition2And3", mediaVideoItem2,
-                mediaImageItem3, 1000, Transition.BEHAVIOR_SPEED_DOWN);
-        mVideoEditor.addTransition(transition2And3);
-
-        assertTrue("Transition ID",
-            transition2And3.getId().equals("transition2And3"));
-        assertEquals("Transtion After Media item", mediaVideoItem2,
-            transition2And3.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaImageItem3,
-            transition2And3.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 1000, transition2And3.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_DOWN,
-            transition2And3.getBehavior());
-
-        final MediaVideoItem mediaVideoItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                videoItemFilename3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem4.setExtractBoundaries(0, 18000);
-        mVideoEditor.addMediaItem(mediaVideoItem4);
-
-        final TransitionCrossfade transition3And4 =
-            mVideoEditorHelper.createTCrossFade("transition3And4", mediaImageItem3,
-                mediaVideoItem4, 5000, Transition.BEHAVIOR_LINEAR);
-        mVideoEditor.addTransition(transition3And4);
-
-        assertTrue("Transition ID",
-            transition3And4.getId().equals("transition3And4"));
-        assertEquals("Transtion After Media item", mediaImageItem3,
-            transition3And4.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem4,
-            transition3And4.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 5000, transition3And4.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_LINEAR,
-            transition3And4.getBehavior());
-
-        final MediaVideoItem mediaVideoItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                videoItemFilename4, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem5);
-
-        final TransitionCrossfade transition4And5 =
-            mVideoEditorHelper.createTCrossFade("transition4And5", mediaVideoItem4,
-                mediaVideoItem5, 8000, Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(transition4And5);
-
-        assertTrue("Transition ID",
-            transition4And5.getId().equals("transition4And5"));
-        assertEquals("Transtion After Media item", mediaVideoItem4,
-            transition4And5.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem5,
-            transition4And5.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 8000, transition4And5.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_MIDDLE_FAST,
-            transition4And5.getBehavior());
-
-        final MediaVideoItem mediaVideoItem6 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m6",
-                videoItemFilename5, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem6.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaVideoItem6);
-
-        final TransitionCrossfade transition5And6 =
-            mVideoEditorHelper.createTCrossFade("transition5And6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_SLOW);
-        mVideoEditor.addTransition(transition5And6);
-
-        assertTrue("Transition ID",
-            transition5And6.getId().equals("transition5And6"));
-        assertEquals("Transtion After Media item", mediaVideoItem5,
-            transition5And6.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem6,
-            transition5And6.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 2000, transition5And6.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_MIDDLE_SLOW,
-            transition5And6.getBehavior());
-
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTCrossFade("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_SPEED_UP - 1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition FadeBlack with Invalid behavior", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTCrossFade("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_FAST + 1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition FadeBlack with Invalid behavior", flagForException);
-    }
-
-    /**
-     * To test Transition : Sliding with all behavior
-     * SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST and Direction =
-     * DIRECTION_RIGHT_OUT_LEFT_IN
-     * ,DIRECTION_LEFT_OUT_RIGHT_IN,DIRECTION_TOP_OUT_BOTTOM_IN
-     * ,DIRECTION_BOTTOM_OUT_TOP_IN
-     */
-
-    @LargeTest
-    public void testTransitionSliding() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String videoItemFilename2 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_15fps_128kbps_1_35.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final String videoItemFilename3 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final String videoItemFilename4 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
-        final String videoItemFilename5 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_10fps_96kbps_0_25.3gp";
-        boolean flagForException = false;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem2.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final TransitionSliding transition1And2 =
-            mVideoEditorHelper.createTSliding("transition1And2", mediaVideoItem1,
-                mediaVideoItem2, 3000, Transition.BEHAVIOR_SPEED_UP,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN);
-        mVideoEditor.addTransition(transition1And2);
-
-        assertTrue("Transition ID",
-            transition1And2.getId().equals("transition1And2"));
-        assertEquals("Transtion After Media item", mediaVideoItem1,
-            transition1And2.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem2,
-            transition1And2.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 3000, transition1And2.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_UP,
-            transition1And2.getBehavior());
-        assertEquals("Transition Sliding",
-            TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN,
-            transition1And2.getDirection());
-
-        final MediaImageItem mediaImageItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                imageItemFilename1, 15000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem3);
-
-        final TransitionSliding transition2And3 =
-            mVideoEditorHelper.createTSliding("transition2And3",
-                mediaVideoItem2, mediaImageItem3, 1000,
-                Transition.BEHAVIOR_SPEED_DOWN,
-                TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN);
-        mVideoEditor.addTransition(transition2And3);
-
-        assertTrue("Transition ID",
-            transition2And3.getId().equals("transition2And3"));
-        assertEquals("Transtion After Media item", mediaVideoItem2,
-            transition2And3.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaImageItem3,
-            transition2And3.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 1000, transition2And3.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_DOWN,
-            transition2And3.getBehavior());
-        assertEquals("Transition Sliding",
-            TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN,
-            transition2And3.getDirection());
-
-        final MediaVideoItem mediaVideoItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                videoItemFilename3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem4.setExtractBoundaries(0, 18000);
-        mVideoEditor.addMediaItem(mediaVideoItem4);
-
-        final TransitionSliding transition3And4 =
-            mVideoEditorHelper.createTSliding("transition3And4", mediaImageItem3,
-                mediaVideoItem4, 5000, Transition.BEHAVIOR_LINEAR,
-                TransitionSliding.DIRECTION_TOP_OUT_BOTTOM_IN);
-        mVideoEditor.addTransition(transition3And4);
-
-        assertTrue("Transition ID",
-            transition3And4.getId().equals("transition3And4"));
-        assertEquals("Transtion After Media item", mediaImageItem3,
-            transition3And4.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem4,
-            transition3And4.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 5000, transition3And4.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_LINEAR,
-            transition3And4.getBehavior());
-        assertEquals("Transition Sliding",
-            TransitionSliding.DIRECTION_TOP_OUT_BOTTOM_IN,
-            transition3And4.getDirection());
-
-        final MediaVideoItem mediaVideoItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                videoItemFilename4, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem5);
-
-        final TransitionSliding transition4And5 =
-            mVideoEditorHelper.createTSliding("transition4And5", mediaVideoItem4,
-                mediaVideoItem5, 8000, Transition.BEHAVIOR_MIDDLE_FAST,
-                TransitionSliding.DIRECTION_BOTTOM_OUT_TOP_IN);
-        mVideoEditor.addTransition(transition4And5);
-
-        assertTrue("Transition ID",
-            transition4And5.getId().equals("transition4And5"));
-        assertEquals("Transtion After Media item", mediaVideoItem4,
-            transition4And5.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem5,
-            transition4And5.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 8000, transition4And5.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_MIDDLE_FAST,
-            transition4And5.getBehavior());
-        assertEquals("Transition Sliding",
-            TransitionSliding.DIRECTION_BOTTOM_OUT_TOP_IN,
-            transition4And5.getDirection());
-
-        final MediaVideoItem mediaVideoItem6 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m6",
-                videoItemFilename5, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem6.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaVideoItem6);
-
-        final TransitionSliding transition5And6 =
-            mVideoEditorHelper.createTSliding("transition5And6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_SLOW,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN);
-        mVideoEditor.addTransition(transition5And6);
-
-        assertTrue("Transition ID",
-            transition5And6.getId().equals("transition5And6"));
-        assertEquals("Transtion After Media item", mediaVideoItem5,
-            transition5And6.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem6,
-            transition5And6.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 2000, transition5And6.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_MIDDLE_SLOW,
-            transition5And6.getBehavior());
-        assertEquals("Transition Sliding",
-            TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN,
-            transition5And6.getDirection());
-
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTSliding("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_SLOW,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN - 1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition Sliding with Invalid Direction", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTSliding("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_FAST + 1,
-                TransitionSliding.DIRECTION_BOTTOM_OUT_TOP_IN + 1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition Sliding with Invalid behavior", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTSliding("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_SPEED_UP - 1,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition Sliding with Invalid behavior", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTSliding("transitiond6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_FAST + 1,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition Sliding with Invalid behavior", flagForException);
-    }
-
-    /**
-     * To test Transition : Alpha with all behavior
-     * SPEED_UP/SPEED_DOWN/LINEAR/MIDDLE_SLOW/MIDDLE_FAST
-     */
-
-    @LargeTest
-    public void testTransitionAlpha() throws Exception {
-
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String videoItemFilename2 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_15fps_128kbps_1_35.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH +
-            "IMG_640x480.jpg";
-        final String videoItemFilename3 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final String videoItemFilename4 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
-        final String videoItemFilename5 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_10fps_96kbps_0_25.3gp";
-        final String maskFilename = INPUT_FILE_PATH +
-            "TransitionSpiral_QVGA.jpg";
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem2.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final TransitionAlpha transition1And2 =
-            mVideoEditorHelper.createTAlpha("transition1And2", mediaVideoItem1,
-            mediaVideoItem2, 3000, Transition.BEHAVIOR_SPEED_UP, maskFilename,
-            10, false);
-        mVideoEditor.addTransition(transition1And2);
-
-        assertTrue("Transition ID",
-            transition1And2.getId().equals("transition1And2"));
-        assertEquals("Transtion After Media item", mediaVideoItem1,
-            transition1And2.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem2,
-            transition1And2.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 3000, transition1And2.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_UP,
-            transition1And2.getBehavior());
-        assertTrue("Transition maskFile",
-            transition1And2.getMaskFilename().equals(maskFilename));
-        assertEquals("Transition BlendingPercent", 10,
-            transition1And2.getBlendingPercent());
-        assertFalse("Transition Invert", transition1And2.isInvert());
-
-        final MediaImageItem mediaImageItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                imageItemFilename1, 15000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem3);
-
-        final TransitionAlpha transition2And3 =
-            mVideoEditorHelper.createTAlpha("transition2And3", mediaVideoItem2,
-                mediaImageItem3, 1000, Transition.BEHAVIOR_SPEED_DOWN,
-                maskFilename, 30, false);
-        mVideoEditor.addTransition(transition2And3);
-
-        assertTrue("Transition ID",
-            transition2And3.getId().equals("transition2And3"));
-        assertEquals("Transtion After Media item", mediaVideoItem2,
-            transition2And3.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaImageItem3,
-            transition2And3.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 1000, transition2And3.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_SPEED_DOWN,
-            transition2And3.getBehavior());
-        assertTrue("Transition maskFile",
-            transition2And3.getMaskFilename().equals(maskFilename));
-        assertEquals("Transition BlendingPercent", 30,
-            transition2And3.getBlendingPercent());
-        assertFalse("Transition Invert", transition2And3.isInvert());
-
-        final MediaVideoItem mediaVideoItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                videoItemFilename3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem4.setExtractBoundaries(0, 18000);
-        mVideoEditor.addMediaItem(mediaVideoItem4);
-
-        final TransitionAlpha transition3And4 =
-            mVideoEditorHelper.createTAlpha("transition3And4", mediaImageItem3,
-            mediaVideoItem4, 5000, Transition.BEHAVIOR_LINEAR, maskFilename,
-            50, false);
-        mVideoEditor.addTransition(transition3And4);
-
-        assertTrue("Transition ID",
-            transition3And4.getId().equals("transition3And4"));
-        assertEquals("Transtion After Media item", mediaImageItem3,
-            transition3And4.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem4,
-            transition3And4.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 5000, transition3And4.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_LINEAR,
-            transition3And4.getBehavior());
-        assertTrue("Transition maskFile",
-            transition3And4.getMaskFilename().equals(maskFilename));
-        assertEquals("Transition BlendingPercent", 50,
-            transition3And4.getBlendingPercent());
-        assertFalse("Transition Invert", transition3And4.isInvert());
-
-        final MediaVideoItem mediaVideoItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                videoItemFilename4, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem5);
-
-        final TransitionAlpha transition4And5 =
-            mVideoEditorHelper.createTAlpha("transition4And5", mediaVideoItem4,
-            mediaVideoItem5, 8000, Transition.BEHAVIOR_MIDDLE_FAST,
-            maskFilename, 70, true);
-        mVideoEditor.addTransition(transition4And5);
-
-        assertTrue("Transition ID",
-            transition4And5.getId().equals("transition4And5"));
-        assertEquals("Transtion After Media item", mediaVideoItem4,
-            transition4And5.getAfterMediaItem());
-        assertEquals("Transtion Before Media item", mediaVideoItem5,
-            transition4And5.getBeforeMediaItem());
-        assertEquals("Transtion Duration", 8000, transition4And5.getDuration());
-        assertEquals("Transtion Behavior", Transition.BEHAVIOR_MIDDLE_FAST,
-            transition4And5.getBehavior());
-        assertTrue("Transition maskFile",
-            transition4And5.getMaskFilename().equals(maskFilename));
-        assertEquals("Transition BlendingPercent", 70,
-            transition4And5.getBlendingPercent());
-        assertTrue("Transition Invert", transition4And5.isInvert());
-
-        final MediaVideoItem mediaVideoItem6 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m6",
-                videoItemFilename5, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem6.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaVideoItem6);
-
-        try {
-            mVideoEditorHelper.createTAlpha("transition5And6", mediaVideoItem5,
-                mediaVideoItem6, 2000, Transition.BEHAVIOR_MIDDLE_SLOW,
-                INPUT_FILE_PATH + "imDummyFile.jpg", 70,
-                true);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("MaskFile is not exsisting", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTAlpha("transition5And6", null, null, 2000,
-                Transition.BEHAVIOR_MIDDLE_SLOW, maskFilename, 101, true);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Invalid Blending Percent", flagForException);
-
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTAlpha("transitiond6", mediaVideoItem4,
-                mediaVideoItem5, 2000, Transition.BEHAVIOR_SPEED_UP - 1,
-                maskFilename, 30, false);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition FadeBlack with Invalid behavior", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditorHelper.createTAlpha("transitiond6", mediaVideoItem4,
-                mediaVideoItem5, 2000, Transition.BEHAVIOR_MIDDLE_FAST + 1,
-                maskFilename, 30, false);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Transition FadeBlack with Invalid behavior", flagForException);
-    }
-
-    /**
-     * To test Frame Overlay for Media Video Item
-     */
-
-    @LargeTest
-    public void testFrameOverlayVideoItem() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_10fps_256kbps_0_25.3gp";
-        final String overlayFile1 = INPUT_FILE_PATH +  "IMG_176x144_Overlay1.png";
-        final String overlayFile2 = INPUT_FILE_PATH +  "IMG_176x144_Overlay2.png";
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final Bitmap mBitmap1 =  mVideoEditorHelper.getBitmap(overlayFile1,
-            176, 144);
-        final OverlayFrame overlayFrame1 = mVideoEditorHelper.createOverlay(
-            mediaVideoItem1, "overlayId1", mBitmap1, 5000, 5000);
-        mediaVideoItem1.addOverlay(overlayFrame1);
-
-        assertEquals("Overlay : Media Item", mediaVideoItem1,
-            overlayFrame1.getMediaItem());
-        assertTrue("Overlay Id", overlayFrame1.getId().equals("overlayId1"));
-        assertEquals("Overlay Bitmap", mBitmap1, overlayFrame1.getBitmap());
-        assertEquals("Overlay Start Time", 5000, overlayFrame1.getStartTime());
-        assertEquals("Overlay Duration", 5000, overlayFrame1.getDuration());
-
-        Bitmap upddateBmp = mVideoEditorHelper.getBitmap(overlayFile2, 176, 144);
-        overlayFrame1.setBitmap(upddateBmp);
-        assertEquals("Overlay Update Bitmap", upddateBmp, overlayFrame1.getBitmap());
-        upddateBmp.recycle();
-    }
-
-    /**
-     * To test Frame Overlay for Media Video Item : Set duration and Get
-     * Duration
-     */
-
-    @LargeTest
-    public void testFrameOverlaySetAndGet() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_30fps_512Kbps_0_27.mp4";
-        final String overlayFile1 = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        boolean flagForException = false;
-
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-            640, 480);
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-            videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final OverlayFrame overlayFrame1 = mVideoEditorHelper.createOverlay(
-            mediaVideoItem1, "overlayId1", mBitmap, 5000, 5000);
-        mediaVideoItem1.addOverlay(overlayFrame1);
-        overlayFrame1.setDuration(5000);
-
-        assertEquals("Overlay Duration", 5000, overlayFrame1.getDuration());
-        try {
-            overlayFrame1.setDuration(mediaVideoItem1.getDuration() + 10000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay Duration > MediaVideo Item Duration",
-            flagForException);
-
-        assertEquals("Overlay Duration", 5000, overlayFrame1.getDuration());
-        flagForException = false;
-
-        try {
-            overlayFrame1.setDuration(-1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay Duration = -1", flagForException);
-    }
-
-    /**
-     * To test Frame Overlay for Media Video Item : Set duration and Get
-     * Duration
-     */
-
-    @LargeTest
-    public void testFrameOverlayInvalidTime() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
-        final String overlayFile1 = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        boolean flagForException = false;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        try {
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-                640, 480);
-            mVideoEditorHelper.createOverlay(mediaVideoItem1, "overlayId1",
-                mBitmap, 400000000, 2000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay With Invalid Start Time", flagForException);
-
-        flagForException = false;
-        try {
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-                640, 480);
-            mVideoEditorHelper.createOverlay(mediaVideoItem1, "overlayId2",
-                mBitmap, -1, 2000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay With Invalid Start Time", flagForException);
-
-        flagForException = false;
-        try {
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-            640, 480);
-            mVideoEditorHelper.createOverlay(mediaVideoItem1, "overlayId3",
-                mBitmap, 2000, -1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay With Invalid Start Time", flagForException);
-    }
-
-    /**
-     * To test Frame Overlay for Media Image Item
-     */
-    @LargeTest
-    public void testFrameOverlayImageItem() throws Exception {
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String overlayFile1 = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        final String overlayFile2 = INPUT_FILE_PATH + "IMG_640x480_Overlay2.png";
-
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                imageItemFilename1, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1, 640,
-            480);
-        final OverlayFrame overlayFrame1 = mVideoEditorHelper.createOverlay(
-            mediaImageItem1, "overlayId1", mBitmap, 5000, 5000);
-        mediaImageItem1.addOverlay(overlayFrame1);
-
-        assertEquals("Overlay : Media Item", mediaImageItem1,
-            overlayFrame1.getMediaItem());
-        assertTrue("Overlay Id", overlayFrame1.getId().equals("overlayId1"));
-        assertEquals("Overlay Bitmap",mBitmap ,overlayFrame1.getBitmap());
-        assertEquals("Overlay Start Time", 5000, overlayFrame1.getStartTime());
-        assertEquals("Overlay Duration", 5000, overlayFrame1.getDuration());
-        Bitmap upddateBmp = mVideoEditorHelper.getBitmap(overlayFile2, 640, 480);
-
-        overlayFrame1.setBitmap(upddateBmp);
-        assertEquals("Overlay Update Bitmap", upddateBmp, overlayFrame1.getBitmap());
-        upddateBmp.recycle();
-    }
-
-    /**
-     * To test Frame Overlay for Media Image Item : Set duration and Get
-     * Duration
-     */
-
-    @LargeTest
-    public void testFrameOverlaySetAndGetImage() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String overlayFile1 = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        boolean flagForException = false;
-
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-            640, 480);
-        final OverlayFrame overlayFrame1 = mVideoEditorHelper.createOverlay(
-            mediaImageItem1, "overlayId1", mBitmap, 5000, 5000);
-        mediaImageItem1.addOverlay(overlayFrame1);
-
-        overlayFrame1.setDuration(5000);
-        assertEquals("Overlay Duration", 5000, overlayFrame1.getDuration());
-
-        try {
-            overlayFrame1.setDuration(mediaImageItem1.getDuration() + 10000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay Duration > Media Item Duration", flagForException);
-        assertEquals("Overlay Duration", 5000, overlayFrame1.getDuration());
-
-        flagForException = false;
-        try {
-            overlayFrame1.setDuration(-1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay Duration = -1", flagForException);
-    }
-
-    /**
-     * To test  Frame Overlay for  Media Image Item :Invalid StartTime and
-     * Duration
-     */
-
-    @LargeTest
-    public void testFrameOverlayInvalidTimeImage() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String overlayFile1 = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        boolean flagForException = false;
-
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        try {
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-                640, 480);
-            mVideoEditorHelper.createOverlay(mediaImageItem1, "overlayId1",
-                mBitmap, 400000000, 2000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay With Invalid Start Time", flagForException);
-
-        flagForException = false;
-        try {
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-                640, 480);
-            mVideoEditorHelper.createOverlay(mediaImageItem1, "overlayId2",
-                mBitmap, -1, 2000);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay With Invalid Start Time", flagForException);
-
-        flagForException = false;
-        try {
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1,
-                640, 480);
-            mVideoEditorHelper.createOverlay(mediaImageItem1, "overlayId3",
-                mBitmap, 2000, -1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Overlay With Invalid Start Time", flagForException);
-    }
-
-    /**
-     * To Test Frame Overlay Media Image Item :JPG File
-     */
-
-    @LargeTest
-    public void testFrameOverlayJPGImage() throws Exception {
-
-        final String imageItemFilename = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String overlayFile1 = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        boolean flagForException = false;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                imageItemFilename, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile1, 640,
-            480);
-        mVideoEditorHelper.createOverlay(mediaImageItem1, "overlayId1",
-            mBitmap, 5000, 5000);
-    }
-
-    /**
-     * To test Video Editor API
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testVideoEditorAPI() throws Exception {
-
-        final String videoItemFileName1 = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final String videoItemFileName2 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
-        final String videoItemFileName3 = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final String imageItemFileName1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String imageItemFileName2 = INPUT_FILE_PATH + "IMG_176x144.jpg";
-        final String audioFilename1 = INPUT_FILE_PATH +
-            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-        final String audioFilename2 = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        TransitionCrossfade transition2And4;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName1, renderingMode);
-        mediaVideoItem1.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                videoItemFileName2, renderingMode);
-        mediaVideoItem2.setExtractBoundaries(mediaVideoItem2.getDuration() / 4,
-            mediaVideoItem2.getDuration() / 2);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final MediaVideoItem mediaVideoItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFileName3, renderingMode);
-        mediaVideoItem3.setExtractBoundaries(mediaVideoItem3.getDuration() / 2,
-            mediaVideoItem3.getDuration());
-        mVideoEditor.addMediaItem(mediaVideoItem3);
-
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                imageItemFileName1, 5000, renderingMode);
-
-        final MediaImageItem mediaImageItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                imageItemFileName2, 5000, renderingMode);
-
-        List<MediaItem> mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 3, mediaList.size());
-
-        mVideoEditor.insertMediaItem(mediaImageItem1, mediaVideoItem2.getId());
-        mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 4, mediaList.size());
-        assertEquals("Media item 1", mediaVideoItem1, mediaList.get(0));
-        assertEquals("Media item 2", mediaVideoItem2, mediaList.get(1));
-        assertEquals("Media item 4", mediaImageItem1, mediaList.get(2));
-        assertEquals("Media item 3", mediaVideoItem3, mediaList.get(3));
-
-        mVideoEditor.insertMediaItem(mediaImageItem2, mediaImageItem1.getId());
-        mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 5, mediaList.size());
-        assertEquals("Media item 1", mediaVideoItem1, mediaList.get(0));
-        assertEquals("Media item 2", mediaVideoItem2, mediaList.get(1));
-        assertEquals("Media item 4", mediaImageItem1, mediaList.get(2));
-        assertEquals("Media item 5", mediaImageItem2, mediaList.get(3));
-        assertEquals("Media item 3", mediaVideoItem3, mediaList.get(4));
-
-        mVideoEditor.moveMediaItem(mediaVideoItem1.getId(), mediaImageItem2.getId());
-        mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 5, mediaList.size());
-        assertEquals("Media item 2", mediaVideoItem2, mediaList.get(0));
-        assertEquals("Media item 4", mediaImageItem1, mediaList.get(1));
-        assertEquals("Media item 5", mediaImageItem2, mediaList.get(2));
-        assertEquals("Media item 1", mediaVideoItem1, mediaList.get(3));
-        assertEquals("Media item 3", mediaVideoItem3, mediaList.get(4));
-
-        assertEquals("Media Item 1", mediaVideoItem1,
-            mVideoEditor.getMediaItem(mediaVideoItem1.getId()));
-
-        flagForException = false;
-        transition2And4 = null;
-        try{
-            transition2And4 = mVideoEditorHelper.createTCrossFade(
-                "transition2And4", mediaVideoItem2, mediaImageItem1, 2000,
-                Transition.BEHAVIOR_MIDDLE_FAST);
-            mVideoEditor.addTransition(transition2And4);
-        }
-        catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertFalse("Transition2and4 cannot be created", flagForException);
-
-
-        TransitionCrossfade transition1And3 = null;
-        flagForException = false;
-        try{
-            transition1And3 = mVideoEditorHelper.createTCrossFade(
-                "transition1And3", mediaVideoItem1, mediaVideoItem2, 5000,
-                Transition.BEHAVIOR_MIDDLE_FAST);
-                mVideoEditor.addTransition(transition1And3);
-            }catch (IllegalArgumentException e) {
-                flagForException = true;
-            }
-        assertTrue("Transition1and3 cannot be created", flagForException);
-
-        List<Transition> transitionList = mVideoEditor.getAllTransitions();
-        assertEquals("Transition List", 1, transitionList.size());
-
-        assertEquals("Transition 2", transition2And4,
-            mVideoEditor.getTransition(transition2And4.getId()));
-
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFilename1);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        List<AudioTrack> audioList = mVideoEditor.getAllAudioTracks();
-        assertEquals("Audio List", 1, audioList.size());
-
-        final AudioTrack audioTrack1 = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack1", audioFilename2);
-        flagForException = false;
-        try {
-            mVideoEditor.addAudioTrack(audioTrack1);
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Audio Track support is 1 ", flagForException);
-
-        flagForException = false;
-        try {
-            mVideoEditor.insertAudioTrack(audioTrack1,"audioTrack");
-        } catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Audio Track supports is 1 ", flagForException);
-
-        assertEquals("Removing AudioTrack", audioTrack,
-            mVideoEditor.removeAudioTrack(audioTrack.getId()));
-
-        assertEquals("Removing transition", transition2And4,
-            mVideoEditor.removeTransition(transition2And4.getId()));
-
-        assertEquals("Removing Media Item", mediaVideoItem2,
-            mVideoEditor.removeMediaItem(mediaVideoItem2.getId()));
-
-        mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_16_9);
-        assertEquals("Check Aspect Ratio", MediaProperties.ASPECT_RATIO_16_9,
-            mVideoEditor.getAspectRatio());
-
-        long storyBoardDuration = mediaVideoItem1.getTimelineDuration()
-            + mediaVideoItem3.getTimelineDuration()
-            + mediaImageItem1.getDuration()
-            + mediaImageItem2.getDuration();
-        assertEquals("Story Board Duration", storyBoardDuration,
-            mVideoEditor.getDuration());
-    }
-
-    /**
-     * To add Audio Track Greater than MediaItem Duration
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testVideoLessThanAudio() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final String audioTrackFilename = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrackId", audioTrackFilename);
-        mVideoEditor.addAudioTrack(audioTrack);
-        assertEquals("Storyboard = mediaItem Duration",
-            mediaVideoItem1.getDuration(), mVideoEditor.getDuration());
-        assertTrue("Audio Duration > mediaItem Duration",
-            (audioTrack.getDuration() > mediaVideoItem1.getDuration() ?
-            true : false));
-    }
-
-    /**
-     * To test Video Editor API with 1080 P
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testVideoContentHD() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH
-            + "H264_BP_1920x1080_30fps_1200Kbps_1_10.mp4";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final MediaVideoItem mediaVideoItem1;
-        // 1080p resolution is supported on some devices
-        // but not on other devices.
-        // So this test case is not generic and
-        // hence we always assert true
-        boolean flagForException = true;
-        try {
-            mediaVideoItem1 = mVideoEditorHelper.createMediaItem(mVideoEditor,
-                "m1", videoItemFileName1, renderingMode);
-        } catch (IllegalArgumentException e) {
-        }
-        assertTrue("VideoContent 1920x1080", flagForException);
-    }
-
-
-    /**
-     * To test: Remove audio track
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testRemoveAudioTrack() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        boolean flagForException = false;
-
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack1", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        assertEquals("Audio Track Item Duration", audioTrack.getDuration(),
-            audioTrack.getTimelineDuration());
-        assertTrue("Audio Track ID", audioTrack.getId().equals("audioTrack1"));
-        assertNotNull("Remove Audio Track",
-            mVideoEditor.removeAudioTrack("audioTrack1"));
-        try{
-            mVideoEditor.removeAudioTrack("audioTrack1");
-        }catch (IllegalArgumentException e){
-            flagForException = true;
-        }
-        assertTrue("Remove Audio Track not possible", flagForException);
-    }
-
-      /**
-     * To test: Disable ducking
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testAudioDuckingDisable() throws Exception {
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        audioTrack.disableDucking();
-        assertFalse("Audio Track Ducking is Disabled",
-            audioTrack.isDuckingEnabled());
-    }
-
-
-
-      /**
-     * To test: Need a basic test case for the get value for TransitionAlpha
-     *  ( ie. getBlendingPercent, getMaskFilename, isInvert)
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testTransitionAlphaBasic() throws Exception {
-
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String maskFilename = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        boolean flagForException = false;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 15000);
-
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2", maskFilename,
-                10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaImageItem.setDuration(15000);
-
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        mVideoEditor.addMediaItem(mediaImageItem);
-        final TransitionAlpha transition1And2 =
-            mVideoEditorHelper.createTAlpha("transition1And2", mediaVideoItem1,
-                mediaImageItem, 3000, Transition.BEHAVIOR_SPEED_UP,
-                maskFilename, 10, false);
-        mVideoEditor.addTransition(transition1And2);
-        assertTrue("Transition maskFile",
-            transition1And2.getMaskFilename().equals(maskFilename));
-        assertEquals("Transition BlendingPercent", 10,
-            transition1And2.getBlendingPercent());
-        assertFalse("Transition Invert", transition1And2.isInvert());
-    }
-
-    /**
-     * To test: NULL arguments to the Video Editor APIs
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testNullAPIs() throws Exception {
-
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String maskFilename = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-        final String audioFileName = INPUT_FILE_PATH +
-            "AACLC_48KHz_256Kbps_s_1_17.3gp";
-        boolean flagForException = false;
-
-        try {
-            mVideoEditor.addAudioTrack(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Video Editor with null Audio Track", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditor.addMediaItem(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Video Editor with NULL Image Item ", flagForException);
-        flagForException = false;
-        try {
-            mVideoEditor.addMediaItem(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Video Editor with NULL Video Item ", flagForException);
-
-        MediaVideoItem mediaVideoItem1 = null;
-        try {
-            mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        } catch (IllegalArgumentException e) {
-            assertTrue("Cannot Create Video Item", false);
-        }
-        mediaVideoItem1.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        flagForException = false;
-        try {
-            mediaVideoItem1.addEffect(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Video with null effect ", flagForException);
-        flagForException = false;
-        try {
-            mediaVideoItem1.addOverlay(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Video with null overlay ", flagForException);
-
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2", maskFilename,
-                10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaImageItem.setDuration(15000);
-        mVideoEditor.addMediaItem(mediaImageItem);
-        flagForException = false;
-        try {
-            mediaImageItem.addEffect(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Image with null effect ", flagForException);
-        flagForException = false;
-        try {
-            mediaImageItem.addOverlay(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Image with null overlay ", flagForException);
-
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioFileName);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        flagForException = false;
-        try {
-            mVideoEditor.addTransition(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Added null transition ", flagForException);
-
-        flagForException = false;
-        try {
-            mVideoEditor.addTransition(null);
-        } catch(IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Added null transition ", flagForException);
-
-    }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
deleted file mode 100644
index 69ecf0d..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorExportTest.java
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest.functional.videoeditor;
-
-import java.io.File;
-
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.videoeditor.AudioTrack;
-import android.media.videoeditor.EffectColor;
-import android.media.videoeditor.EffectKenBurns;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaProperties;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.OverlayFrame;
-import android.media.videoeditor.Transition;
-import android.media.videoeditor.TransitionAlpha;
-import android.media.videoeditor.TransitionCrossfade;
-import android.media.videoeditor.TransitionFadeBlack;
-import android.media.videoeditor.TransitionSliding;
-import android.media.videoeditor.VideoEditor;
-import android.media.videoeditor.VideoEditor.ExportProgressListener;
-import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
-import android.os.Environment;
-import android.test.ActivityInstrumentationTestCase;
-
-
-import android.util.Log;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import android.test.suitebuilder.annotation.LargeTest;
-import android.test.suitebuilder.annotation.Suppress;
-import com.android.mediaframeworktest.VideoEditorHelper;
-
-public class VideoEditorExportTest extends
-    ActivityInstrumentationTestCase<MediaFrameworkTest> {
-    private final String TAG = "TransitionTest";
-
-    private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
-
-    private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
-
-    private VideoEditor mVideoEditor;
-
-    private VideoEditorHelper mVideoEditorHelper;
-
-    // Declares the annotation for Preview Test Cases
-    public @interface TransitionTests {
-    }
-
-    public VideoEditorExportTest() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        // setup for each test case.
-        super.setUp();
-        mVideoEditorHelper = new VideoEditorHelper();
-        // Create a random String which will be used as project path, where all
-        // project related files will be stored.
-        final String projectPath =
-            mVideoEditorHelper.createRandomFile(PROJECT_LOCATION);
-        mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
-        // Clean the directory created as project path
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-        System.gc();
-        super.tearDown();
-    }
-
-    /**
-     * To Test export : Merge and Trim different types of Video and Image files
-     */
-    @LargeTest
-    public void testExportMergeTrim() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFilename2 = INPUT_FILE_PATH
-            + "H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4";
-        final String videoItemFilename3 = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final String imageItemFilename2 = INPUT_FILE_PATH + "IMG_176x144.jpg";
-        final String imageItemFilename3 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/")
-            + ".3gp";
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(2000, 7000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaImageItem mediaImageItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFilename1, 3000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem2);
-
-        final MediaVideoItem mediaVideoItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem3.setExtractBoundaries(0, 2000);
-        mVideoEditor.addMediaItem(mediaVideoItem3);
-
-        final MediaVideoItem mediaVideoItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                videoItemFilename3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem4.setExtractBoundaries(mediaVideoItem4.getDuration()-5000,
-            mediaVideoItem4.getDuration());
-        mVideoEditor.addMediaItem(mediaVideoItem4);
-
-        final MediaImageItem mediaImageItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                imageItemFilename2, 4000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem5);
-
-        final MediaImageItem mediaImageItem6 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m6",
-                imageItemFilename3, 2000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem6);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        final long storyBoardDuration = mediaVideoItem1.getTimelineDuration()
-            + mediaImageItem2.getDuration() + mediaVideoItem3.getTimelineDuration()
-            + mediaVideoItem4.getTimelineDuration() + mediaImageItem5.getDuration()
-            + mediaImageItem6.getDuration();
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_720, 0, storyBoardDuration,
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-
-    /**
-     *To Test export : With Effect and Overlays on Different Media Items
-     */
-    @LargeTest
-    public void testExportEffectOverlay() throws Exception {
-          final String videoItemFilename1 = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFilename2 = INPUT_FILE_PATH
-              + "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp";
-        final String videoItemFilename3 = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final String imageItemFilename2 = INPUT_FILE_PATH + "IMG_176x144.jpg";
-        final String imageItemFilename3 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-
-        final String overlayFile = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(2000, 7000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final EffectColor effectPink =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effectPink",
-                0, 2000, EffectColor.TYPE_COLOR, EffectColor.PINK);
-        mediaVideoItem1.addEffect(effectPink);
-
-        final EffectColor effectNegative =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effectNegative",
-                3000, 4000, EffectColor.TYPE_NEGATIVE, 0);
-        mediaVideoItem1.addEffect(effectNegative);
-
-        final MediaImageItem mediaImageItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFilename1, 3000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem2);
-
-        final EffectColor effectFifties =
-            mVideoEditorHelper.createEffectItem(mediaImageItem2, "effectFifties",
-                0, 3000, EffectColor.TYPE_FIFTIES, 0);
-        mediaImageItem2.addEffect(effectFifties);
-
-        final MediaVideoItem mediaVideoItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem3);
-        mediaVideoItem3.setExtractBoundaries(0, 8000);
-
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile,
-            640, 480);
-        final OverlayFrame overlayFrame =
-            mVideoEditorHelper.createOverlay(mediaVideoItem3, "overlay",
-                mBitmap, 2000, 5000);
-        mediaVideoItem3.addOverlay(overlayFrame);
-
-        final EffectColor effectGreen =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem3, "effectGreen",
-                0, 2000, EffectColor.TYPE_COLOR, EffectColor.GREEN);
-        mediaVideoItem3.addEffect(effectGreen);
-
-        final MediaVideoItem mediaVideoItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                videoItemFilename3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem4.setExtractBoundaries(mediaVideoItem4.getDuration()-5000,
-            mediaVideoItem4.getDuration());
-        mVideoEditor.addMediaItem(mediaVideoItem4);
-
-        final EffectColor effectSepia =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem4, "effectSepia",
-                0, 2000, EffectColor.TYPE_SEPIA, 0);
-        mediaVideoItem4.addEffect(effectSepia);
-
-        final MediaImageItem mediaImageItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                imageItemFilename2, 4000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem5);
-
-        final EffectColor effectGray =
-            mVideoEditorHelper.createEffectItem(mediaImageItem5, "effectGray",
-                0, 2000, EffectColor.TYPE_COLOR, EffectColor.GRAY);
-        mediaImageItem5.addEffect(effectGray);
-
-        final MediaImageItem mediaImageItem6 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m6",
-                imageItemFilename3, 2000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem6);
-
-        final EffectColor effectGradient =
-            mVideoEditorHelper.createEffectItem(mediaImageItem6,
-                "effectGradient", 0, 2000, EffectColor.TYPE_GRADIENT,
-                EffectColor.PINK);
-        mediaImageItem6.addEffect(effectGradient);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        final long storyBoardDuration = mediaVideoItem1.getTimelineDuration()
-            + mediaImageItem2.getDuration()
-            + mediaVideoItem3.getTimelineDuration()
-            + mediaVideoItem4.getTimelineDuration()
-            + mediaImageItem5.getDuration()
-            + mediaImageItem6.getDuration();
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_720, 0, storyBoardDuration,
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-
-    /**
-     * To test export : with Image with KenBurnEffect
-     */
-    @LargeTest
-    public void testExportEffectKenBurn() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int imageItemRenderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaImageItem1",
-                imageItemFileName, 5000, imageItemRenderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final Rect startRect = new Rect((mediaImageItem.getHeight() / 3),
-            (mediaImageItem.getWidth() / 3), (mediaImageItem.getHeight() / 2),
-            (mediaImageItem.getWidth() / 2));
-
-        final Rect endRect = new Rect(0, 0, mediaImageItem.getWidth(),
-            mediaImageItem.getHeight());
-
-        final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns(
-            mediaImageItem, "KBOnM2", startRect, endRect, 500, 3000);
-        assertNotNull("EffectKenBurns", kbEffectOnMediaItem);
-        mediaImageItem.addEffect(kbEffectOnMediaItem);
-
-        assertEquals("KenBurn Start Rect", startRect,
-            kbEffectOnMediaItem.getStartRect());
-        assertEquals("KenBurn End Rect", endRect,
-            kbEffectOnMediaItem.getEndRect());
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_720, 0, mediaImageItem.getDuration(),
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-
-    /**
-     * To Test Export : With Video and Image and An Audio BackGround Track
-     */
-    @LargeTest
-    public void testExportAudio() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-        final String audioTrackFilename = INPUT_FILE_PATH +
-            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFileName, 5000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "a1", audioTrackFilename);
-        audioTrack.setExtractBoundaries(2000, 5000);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        audioTrack.disableDucking();
-        audioTrack.enableLoop();
-        audioTrack.setVolume(75);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_720, 0, (mediaVideoItem.getTimelineDuration() +
-            mediaImageItem.getDuration()),
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-
-    /**
-     *To Test export : With Transition on Different Media Items
-     */
-    @LargeTest
-    public void testExportTransition() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFilename2 = INPUT_FILE_PATH
-            + "H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4";
-        final String videoItemFilename3 = INPUT_FILE_PATH +
-            "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-
-        final String imageItemFilename2 = INPUT_FILE_PATH + "IMG_176x144.jpg";
-        final String imageItemFilename3 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-        final String maskFilename = INPUT_FILE_PATH +
-            "TransitionSpiral_QVGA.jpg";
-
-        final MediaVideoItem mediaItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaItem1.setExtractBoundaries(2000, 7000);
-        mVideoEditor.addMediaItem(mediaItem1);
-
-        final TransitionAlpha transition1 =
-            mVideoEditorHelper.createTAlpha("transition1", null, mediaItem1,
-                2000, Transition.BEHAVIOR_LINEAR, maskFilename, 50, true);
-        mVideoEditor.addTransition(transition1);
-
-        final MediaImageItem mediaItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFilename1, 8000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaItem2);
-
-        final MediaVideoItem mediaItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaItem3.setExtractBoundaries(0, 8000);
-        mVideoEditor.addMediaItem(mediaItem3);
-
-        final TransitionSliding transition2And3 =
-            mVideoEditorHelper.createTSliding("transition2", mediaItem2,
-                mediaItem3, 4000, Transition.BEHAVIOR_MIDDLE_FAST,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN);
-        mVideoEditor.addTransition(transition2And3);
-
-        final MediaVideoItem mediaItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                videoItemFilename3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaItem4);
-        mediaItem4.setExtractBoundaries(0, 8000);
-
-        final TransitionCrossfade transition3And4 =
-            mVideoEditorHelper.createTCrossFade("transition3", mediaItem3,
-                mediaItem4, 3500, Transition.BEHAVIOR_MIDDLE_SLOW);
-        mVideoEditor.addTransition(transition3And4);
-
-        final MediaImageItem mediaItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                imageItemFilename2, 7000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaItem5);
-
-        final TransitionFadeBlack transition4And5 =
-            mVideoEditorHelper.createTFadeBlack("transition4", mediaItem4,
-                mediaItem5, 3500, Transition.BEHAVIOR_SPEED_DOWN);
-        mVideoEditor.addTransition(transition4And5);
-
-        final MediaImageItem mediaItem6 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m6",
-                imageItemFilename3, 3000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaItem6);
-
-        final TransitionSliding transition5And6 =
-            mVideoEditorHelper.createTSliding("transition5", mediaItem5,
-                mediaItem6, 1000/*4000*/, Transition.BEHAVIOR_SPEED_UP,
-                TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN);
-        mVideoEditor.addTransition(transition5And6);
-
-        final TransitionSliding transition6 =
-            mVideoEditorHelper.createTSliding("transition6", mediaItem6, null,
-                1000 /*4000*/, Transition.BEHAVIOR_SPEED_UP,
-                TransitionSliding.DIRECTION_TOP_OUT_BOTTOM_IN);
-        mVideoEditor.addTransition(transition6);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        final long storyBoardDuration = mediaItem1.getTimelineDuration()
-            + mediaItem2.getTimelineDuration()
-            + mediaItem3.getTimelineDuration() - transition2And3.getDuration()
-            + mediaItem4.getTimelineDuration() - transition3And4.getDuration()
-            + mediaItem5.getTimelineDuration() - transition4And5.getDuration()
-            + mediaItem6.getTimelineDuration() - transition5And6.getDuration();
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_720, 0, storyBoardDuration,
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-
-    /**
-     * To Test Export : Without any Media Items in the story Board
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testExportWithoutMediaItems() throws Exception {
-        boolean flagForException = false;
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export("/sdcard/Test.3gp", MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (IllegalStateException e) {
-            flagForException = true;
-        }
-        assertTrue("Export without any MediaItems", flagForException);
-    }
-
-    /**
-     * To Test Export : With Media Items add and removed in the story Board
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testExportWithoutMediaItemsAddRemove() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String maskFilename = INPUT_FILE_PATH + "TransitionSpiral_QVGA.jpg";
-        boolean flagForException = false;
-
-        final MediaVideoItem mediaItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaItem1.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaItem1);
-
-        final MediaImageItem mediaItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFilename1, 15000,
-                MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaItem2);
-
-        final TransitionAlpha transition1 =
-            mVideoEditorHelper.createTAlpha("transition1", mediaItem1, mediaItem2,
-                3000, Transition.BEHAVIOR_LINEAR, maskFilename, 50, false);
-        mVideoEditor.addTransition(transition1);
-
-        final EffectColor effectColor =
-            mVideoEditorHelper.createEffectItem(mediaItem2, "effect", 12000,
-                3000, EffectColor.TYPE_COLOR, EffectColor.PINK);
-        mediaItem2.addEffect(effectColor);
-
-        mVideoEditor.removeMediaItem(mediaItem1.getId());
-        mVideoEditor.removeMediaItem(mediaItem2.getId());
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export("/sdcard/Test.3gp", MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (IllegalStateException e) {
-            flagForException = true;
-        }
-        assertTrue("Export with MediaItem added and removed", flagForException);
-    }
-
-    /**
-     * To Test Export : With Video and Image : MMS use case
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testExportMMS() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFilename2 = INPUT_FILE_PATH
-            + "H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4";
-        final String maskFilename = INPUT_FILE_PATH + "TransitionSpiral_QVGA.jpg";
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-
-        final MediaVideoItem mediaItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaItem1.setExtractBoundaries(2000, 7000);
-        mVideoEditor.addMediaItem(mediaItem1);
-
-        final TransitionAlpha transition1 =
-            mVideoEditorHelper.createTAlpha("transition1", null, mediaItem1,
-                2000, Transition.BEHAVIOR_LINEAR, maskFilename, 50, true);
-        mVideoEditor.addTransition(transition1);
-
-        final MediaImageItem mediaItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFilename1, 8000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaItem2);
-
-        final MediaVideoItem mediaItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFilename2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaItem3.setExtractBoundaries(0, 8000);
-        mVideoEditor.addMediaItem(mediaItem3);
-
-        final TransitionSliding transition2And3 =
-            mVideoEditorHelper.createTSliding("transition2", mediaItem2,
-                mediaItem3, 4000, Transition.BEHAVIOR_MIDDLE_FAST,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN);
-        mVideoEditor.addTransition(transition2And3);
-
-        final TransitionCrossfade transition3 =
-            mVideoEditorHelper.createTCrossFade("transition3", mediaItem3, null,
-                3500, Transition.BEHAVIOR_MIDDLE_SLOW);
-        mVideoEditor.addTransition(transition3);
-
-        final EffectColor effectColor =
-            mVideoEditorHelper.createEffectItem(mediaItem2, "effect", 0,
-                3000, EffectColor.TYPE_COLOR, EffectColor.PINK);
-        mediaItem2.addEffect(effectColor);
-
-        mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_11_9);
-
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        final long storyBoardDuration = mediaItem1.getTimelineDuration()
-            + mediaItem2.getTimelineDuration() + mediaItem3.getTimelineDuration()
-            - transition2And3.getDuration();
-
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_144, 0, storyBoardDuration,
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-         mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-
-    /**
-     * To Test Export :Media Item having duration of 1 Hour
-     *
-     * @throws Exception
-     */
-    @Suppress
-    @LargeTest
-    public void testExportDuration1Hour() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_15fps_384kbps_60_0.mp4";
-        final String outFilename = mVideoEditorHelper.createRandomFile(
-            mVideoEditor.getPath() + "/") + ".3gp";
-
-        final MediaVideoItem mediaItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaItem1);
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        }catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_720, 0, mediaItem1.getDuration(),
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-
-    /**
-     * To Test Export : Storage location having very less space (Less than 100
-     * KB)
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testExportWithStorageFull() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH
-            + "H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4";
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-        boolean flagForException = false;
-
-        mVideoEditorHelper.createMediaItem(mVideoEditor, "m1", videoItemFilename1,
-            MediaItem.RENDERING_MODE_BLACK_BORDER);
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            flagForException = true;
-        }
-        assertTrue("Error in exporting file due to lack of storage space",
-            flagForException);
-    }
-
-     /**
-     * To Test Export :Two Media Items added
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testExportTwoVideos() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp";
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_12.5fps_256kbps_AACLC_16khz_24kbps_s_0_26.mp4";
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        try {
-            final int[] progressUpdate = new int[100];
-            mVideoEditor.export(outFilename, MediaProperties.HEIGHT_720,
-                MediaProperties.BITRATE_800K, new ExportProgressListener() {
-                    int i = 0;
-                    public void onProgress(VideoEditor ve, String outFileName,
-                        int progress) {
-                            progressUpdate[i++] = progress;
-                    }
-                });
-            mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        } catch (Exception e) {
-            assertTrue("Error in Export" + e.toString(), false);
-        }
-        mVideoEditorHelper.validateExport(mVideoEditor, outFilename,
-            MediaProperties.HEIGHT_720, 0,
-            (mediaVideoItem.getDuration()+ mediaVideoItem1.getDuration()),
-            MediaProperties.VCODEC_H264, MediaProperties.ACODEC_AAC_LC);
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-    }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
deleted file mode 100644
index 7965b0a..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/functional/videoeditor/VideoEditorPreviewTest.java
+++ /dev/null
@@ -1,1156 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest.functional.videoeditor;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.concurrent.Semaphore;
-
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.videoeditor.AudioTrack;
-import android.media.videoeditor.Effect;
-import android.media.videoeditor.EffectColor;
-import android.media.videoeditor.EffectKenBurns;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaProperties;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.Overlay;
-import android.media.videoeditor.OverlayFrame;
-import android.media.videoeditor.Transition;
-import android.media.videoeditor.TransitionAlpha;
-import android.media.videoeditor.TransitionCrossfade;
-import android.media.videoeditor.TransitionFadeBlack;
-import android.media.videoeditor.TransitionSliding;
-import android.media.videoeditor.VideoEditor;
-import android.media.videoeditor.VideoEditor.ExportProgressListener;
-import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
-import android.media.videoeditor.VideoEditor.PreviewProgressListener;
-import android.media.videoeditor.VideoEditor.OverlayData;
-import android.os.Environment;
-import android.test.ActivityInstrumentationTestCase;
-import android.view.SurfaceHolder;
-
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import android.test.suitebuilder.annotation.LargeTest;
-import com.android.mediaframeworktest.VideoEditorHelper;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-
-import java.util.concurrent.TimeUnit;
-
-import android.util.Log;
-
-public class VideoEditorPreviewTest extends
-    ActivityInstrumentationTestCase<MediaFrameworkTest> {
-    private final String TAG = "VideoEditorTest";
-
-    private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
-
-    private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
-
-    private final String PROJECT_CLASS_NAME =
-        "android.media.videoeditor.VideoEditorImpl";
-
-    private VideoEditor mVideoEditor;
-
-    private VideoEditorHelper mVideoEditorHelper;
-
-    private class EventHandler extends Handler {
-        public EventHandler( Looper lp)
-        {
-            super(lp);
-        }
-        public void handleMessage(Message msg)
-        {
-            switch (msg.what)
-            {
-                default:
-                MediaFrameworkTest.testInvalidateOverlay();
-            }
-        }
-    }
-    private EventHandler mEventHandler;
-
-    private boolean previewStart;
-    private boolean previewStop;
-    private boolean previewError;
-
-    /* Minimum waiting time for Semaphore to wait for release */
-    private final long minWaitingTime = 3000;
-
-    // Declares the annotation for Preview Test Cases
-    public @interface Preview {
-    }
-
-    public VideoEditorPreviewTest() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-
-        Looper looper;
-        if ((looper = Looper.myLooper()) != null) {
-            mEventHandler = new EventHandler(looper);
-
-        } else {
-            //Handle error when looper can not be created.
-            ;
-        }
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        // setup for each test case.
-        super.setUp();
-        mVideoEditorHelper = new VideoEditorHelper();
-        // Create a random String which will be used as project path, where all
-        // project related files will be stored.
-        final String projectPath =
-            mVideoEditorHelper.createRandomFile(PROJECT_LOCATION);
-        mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
-        // Clean the directory created as project path
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-        System.gc();
-        super.tearDown();
-    }
-
-    protected void setPreviewStart() {
-        previewStart = true;
-    }
-    protected void setPreviewStop() {
-        previewStop = true;
-    }
-    protected void setPreviewError() {
-        previewError = true;
-    }
-    protected void validatePreviewProgress(int startMs, int endMs,
-        boolean loop, long duration) throws Exception {
-
-        final int[] progressUpdate = new int[100];
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        previewStart = false;
-        previewStop = false;
-        previewError = false;
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            int i = 0;
-            public void onProgress(Object item, int action, int progress) {
-                progressUpdate[i++] = progress;
-            }
-        });
-        mVideoEditorHelper.checkProgressCBValues(progressUpdate);
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-
-        long waitingTime = minWaitingTime;
-        if (endMs == -1) {
-            waitingTime += duration;
-        }
-        else {
-            waitingTime += (endMs - startMs);
-        }
-        blockTillPreviewCompletes.acquire();
-        try {
-        mVideoEditor.startPreview(surfaceHolder, startMs, endMs, loop, 1,
-            new PreviewProgressListener() {
-                public void onProgress(VideoEditor videoEditor, long timeMs,
-                    OverlayData overlayData) {
-
-                        if ( overlayData != null) {
-                            if(overlayData.needsRendering()) {
-                                overlayData.renderOverlay(MediaFrameworkTest.mDestBitmap);
-                                mEventHandler.sendMessage(mEventHandler.obtainMessage(1, 2, 3));
-                            }
-                        }
-                }
-                public void onStart(VideoEditor videoEditor) {
-                    setPreviewStart();
-                }
-                public void onStop(VideoEditor videoEditor) {
-                    setPreviewStop();
-                    blockTillPreviewCompletes.release();
-                }
-                public void onError(VideoEditor videoEditor, int error) {
-                    setPreviewError();
-                    blockTillPreviewCompletes.release();
-                }
-        });
-        } catch (Exception e) {
-            blockTillPreviewCompletes.release();
-        }
-        blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS);
-
-        mVideoEditor.stopPreview();
-        assertTrue("Preview Failed to start", previewStart);
-        assertTrue("Preview Failed to stop", previewStop);
-        assertFalse("Preview Error occurred", previewError);
-
-        blockTillPreviewCompletes.release();
-    }
-
-    // -----------------------------------------------------------------
-    // Preview
-    // -----------------------------------------------------------------
-
-    /**
-     *To test Preview : FULL Preview of current work (beginning till end)
-     */
-    @LargeTest
-    public void testPreviewTheStoryBoard() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final String videoItemFileName2 = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
-        final String videoItemFileName3 = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp";
-        previewStart = false;
-        previewStop = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-                videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem2",
-                videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-        mediaVideoItem2.setExtractBoundaries(0, 10000);
-
-        final MediaVideoItem mediaVideoItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem3",
-                videoItemFileName3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem3.setExtractBoundaries(0, 10000);
-
-        mVideoEditor.insertMediaItem(mediaVideoItem3, mediaVideoItem1.getId());
-        List<MediaItem> mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item 1", mediaVideoItem1, mediaList.get(0));
-        assertEquals("Media Item 3", mediaVideoItem3, mediaList.get(1));
-        assertEquals("Media Item 2", mediaVideoItem2, mediaList.get(2));
-
-        mediaVideoItem1.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER);
-        assertEquals("Media Item 1 Rendering Mode",
-            MediaItem.RENDERING_MODE_BLACK_BORDER,
-            mediaVideoItem1.getRenderingMode());
-
-        mediaVideoItem2.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER);
-        assertEquals("Media Item 2 Rendering Mode",
-            MediaItem.RENDERING_MODE_BLACK_BORDER,
-            mediaVideoItem2.getRenderingMode());
-
-        mediaVideoItem3.setRenderingMode(MediaItem.RENDERING_MODE_STRETCH);
-        assertEquals("Media Item 3 Rendering Mode",
-            MediaItem.RENDERING_MODE_STRETCH,
-            mediaVideoItem3.getRenderingMode());
-
-        mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_5_3);
-        assertEquals("Aspect Ratio", MediaProperties.ASPECT_RATIO_5_3,
-            mVideoEditor.getAspectRatio());
-
-        validatePreviewProgress(0, -1, false, mVideoEditor.getDuration());
-    }
-
-    /**
-     * To test Preview : Preview of start + 10 sec till end of story board
-     */
-    @LargeTest
-    public void testPreviewTheStoryBoardFromDuration() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH
-            + "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final String videoItemFileName2 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_256kbps_0_30.mp4";
-        final String videoItemFileName3 = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_1_17.3gp";
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        previewStart = false;
-        previewStop = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-                videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem2",
-                videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem2.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final MediaVideoItem mediaVideoItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem3",
-                videoItemFileName3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem3.setExtractBoundaries(0, 10000);
-
-        mVideoEditor.insertMediaItem(mediaVideoItem3, mediaVideoItem1.getId());
-
-        List<MediaItem> mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item 1", mediaVideoItem1, mediaList.get(0));
-        assertEquals("Media Item 3", mediaVideoItem3, mediaList.get(1));
-        assertEquals("Media Item 2", mediaVideoItem2, mediaList.get(2));
-        mediaVideoItem1.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER);
-
-        assertEquals("Media Item 1 Rendering Mode",
-            MediaItem.RENDERING_MODE_BLACK_BORDER,
-            mediaVideoItem1.getRenderingMode());
-        mediaVideoItem2.setRenderingMode(MediaItem.RENDERING_MODE_BLACK_BORDER);
-
-        assertEquals("Media Item 2 Rendering Mode",
-            MediaItem.RENDERING_MODE_BLACK_BORDER,
-            mediaVideoItem2.getRenderingMode());
-        mediaVideoItem3.setRenderingMode(MediaItem.RENDERING_MODE_STRETCH);
-
-        assertEquals("Media Item 3 Rendering Mode",
-            MediaItem.RENDERING_MODE_STRETCH,
-            mediaVideoItem3.getRenderingMode());
-
-        mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_5_3);
-        assertEquals("Aspect Ratio", MediaProperties.ASPECT_RATIO_5_3,
-            mVideoEditor.getAspectRatio());
-
-        validatePreviewProgress(10000, -1, false, mVideoEditor.getDuration());
-    }
-
-    /**
-     * To test Preview : Preview of current Effects applied
-     */
-    @LargeTest
-    public void testPreviewOfEffects() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        previewStart = false;
-        previewStop = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "mediaVideoItem1",
-                videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final EffectColor effectNegative =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1,
-                "effectNegative", 0, 2000, EffectColor.TYPE_NEGATIVE, 0);
-        mediaVideoItem1.addEffect(effectNegative);
-
-        final EffectColor effectGreen =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "effectGreen",
-                2000, 3000, EffectColor.TYPE_COLOR, EffectColor.GREEN);
-        mediaVideoItem1.addEffect(effectGreen);
-
-        final EffectColor effectFifties =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1,
-                "effectFifties", 5000, 4000, EffectColor.TYPE_FIFTIES, 0);
-        mediaVideoItem1.addEffect(effectFifties);
-
-        List<Effect> effectList = mediaVideoItem1.getAllEffects();
-        assertEquals("Effect List Size", 3, effectList.size());
-        assertEquals("Effect negative", effectNegative, effectList.get(0));
-        assertEquals("Effect Green", effectGreen, effectList.get(1));
-        assertEquals("Effect Fifties", effectFifties, effectList.get(2));
-
-        mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_4_3);
-        assertEquals("Aspect Ratio", MediaProperties.ASPECT_RATIO_4_3,
-            mVideoEditor.getAspectRatio());
-
-        final long storyboardDuration = mVideoEditor.getDuration() ;
-        validatePreviewProgress(0, (int)(storyboardDuration/2), false, (storyboardDuration/2));
-
-        assertEquals("Removing Effect : Negative", effectNegative,
-            mediaVideoItem1.removeEffect(effectNegative.getId()));
-
-        effectList = mediaVideoItem1.getAllEffects();
-
-        assertEquals("Effect List Size", 2, effectList.size());
-        assertEquals("Effect Green", effectGreen, effectList.get(0));
-        assertEquals("Effect Fifties", effectFifties, effectList.get(1));
-
-        validatePreviewProgress(0, -1, false, mVideoEditor.getDuration());
-    }
-
-    /**
-     *To test Preview : Preview of current Transitions applied (with multiple
-     * generatePreview)
-     */
-    @LargeTest
-    public void testPreviewWithTransition() throws Exception {
-
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_10fps_96kbps_0_25.3gp";
-        final String imageItemFileName1 = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final String videoItemFileName2 = INPUT_FILE_PATH +
-            "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4";
-        final String maskFilename = INPUT_FILE_PATH +
-            "TransitionSpiral_QVGA.jpg";
-        previewStart = false;
-        previewStop = false;
-        previewError = false;
-
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFileName1, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem2.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final TransitionCrossfade transition1And2CrossFade =
-            mVideoEditorHelper.createTCrossFade("transition_1_2_CF",
-                mediaVideoItem1, mediaImageItem1, 2000,
-                Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(transition1And2CrossFade);
-
-        final TransitionAlpha transition2And3Alpha =
-            mVideoEditorHelper.createTAlpha("transition_2_3", mediaImageItem1,
-                mediaVideoItem2, 4000, Transition.BEHAVIOR_SPEED_UP,
-                maskFilename, 50, true);
-        mVideoEditor.addTransition(transition2And3Alpha);
-
-        final TransitionFadeBlack transition1FadeBlack =
-            mVideoEditorHelper.createTFadeBlack("transition_1FB", null,
-                mediaVideoItem1, 2000, Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(transition1FadeBlack);
-
-        List<Transition> transitionList = mVideoEditor.getAllTransitions();
-        assertEquals("Transition List Size", 3, transitionList.size());
-        assertEquals("Transition 1", transition1And2CrossFade,
-            transitionList.get(0));
-        assertEquals("Transition 2", transition2And3Alpha, transitionList.get(1));
-        assertEquals("Transition 3", transition1FadeBlack, transitionList.get(2));
-
-        mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_3_2);
-
-        final int[] progressValues = new int[300];
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            int i = 0;
-
-            public void onProgress(Object item, int action, int progress) {
-                if (item instanceof TransitionCrossfade) {
-                    progressValues[i] = progress;
-                    assertEquals("Object", item, transition1And2CrossFade);
-                    assertEquals("Action", action,
-                        MediaProcessingProgressListener.ACTION_ENCODE);
-                } else if (item instanceof TransitionAlpha) {
-                    progressValues[i] = progress;
-                    assertEquals("Object", item, transition2And3Alpha);
-                    assertEquals("Action", action,
-                        MediaProcessingProgressListener.ACTION_ENCODE);
-                } else if (item instanceof TransitionFadeBlack) {
-                    progressValues[i] = progress;
-                    assertEquals("Object", item, transition1FadeBlack);
-                    assertEquals("Action", action,
-                        MediaProcessingProgressListener.ACTION_ENCODE);
-                }
-                i++;
-            }
-        });
-
-        mVideoEditorHelper.checkProgressCBValues(progressValues);
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-        /* As transition takes more time buffer of 10 sec is added */
-        long waitingTime = minWaitingTime + 10000 + 10000;
-
-        blockTillPreviewCompletes.acquire();
-        try {
-        mVideoEditor.startPreview(surfaceHolder, 0, 10000, false, 1,
-            new PreviewProgressListener() {
-            public void onProgress(VideoEditor videoEditor, long timeMs,
-                OverlayData overlayData) {
-                }
-                public void onStart(VideoEditor videoEditor) {
-                    setPreviewStart();
-                }
-                public void onStop(VideoEditor videoEditor) {
-                    setPreviewStop();
-                    blockTillPreviewCompletes.release();
-                }
-                public void onError(VideoEditor videoEditor, int error) {
-                    setPreviewError();
-                    blockTillPreviewCompletes.release();
-                }
-        });
-        } catch (Exception e) {
-            blockTillPreviewCompletes.release();
-        }
-        blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS);
-        mVideoEditor.stopPreview();
-        blockTillPreviewCompletes.release();
-        assertTrue("Preview Failed to start", previewStart);
-        assertTrue("Preview Failed to stop", previewStop);
-        assertFalse("Preview Error occurred", previewError);
-
-        assertEquals("Removing Transition " + transition1And2CrossFade.getId(),
-            transition1And2CrossFade,
-            mVideoEditor.removeTransition(transition1And2CrossFade.getId()));
-        transitionList = mVideoEditor.getAllTransitions();
-        assertEquals("Transition List Size", 2, transitionList.size());
-        assertEquals("Transition 1", transition2And3Alpha, transitionList.get(0));
-        assertEquals("Transition 2", transition1FadeBlack, transitionList.get(1));
-
-        validatePreviewProgress(0, -1, false, mVideoEditor.getDuration());
-
-
-        final TransitionSliding transition1And2Sliding =
-            mVideoEditorHelper.createTSliding("transition_1_2Sliding",
-                mediaVideoItem1, mediaImageItem1, 4000,
-                Transition.BEHAVIOR_MIDDLE_FAST,
-                TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN);
-        mVideoEditor.addTransition(transition1And2Sliding);
-
-        transitionList = mVideoEditor.getAllTransitions();
-        assertEquals("Transition List Size", 3, transitionList.size());
-        assertEquals("Transition 1", transition2And3Alpha, transitionList.get(0));
-        assertEquals("Transition 2", transition1FadeBlack, transitionList.get(1));
-        assertEquals("Transition 3", transition1And2Sliding,
-            transitionList.get(2));
-
-        validatePreviewProgress(5000, -1, false, (mVideoEditor.getDuration()));
-
-    }
-
-    /**
-     * To test Preview : Preview of current Overlay applied
-     */
-    @LargeTest
-    public void testPreviewWithOverlay() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
-        final String overlayFilename1 = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-        final String overlayFilename2 = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay2.png";
-        final int previewFrom = 5000;
-        final int previewTo = 10000;
-        final boolean previewLoop = false;
-        final int previewCallbackFrameCount = 1;
-        final int setAspectRatio = MediaProperties.ASPECT_RATIO_4_3;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        previewStart = false;
-        previewStop = false;
-        boolean flagForException = false;
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName, renderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-        mediaVideoItem.setExtractBoundaries(0, 10000);
-
-        final Bitmap mBitmap1 =  mVideoEditorHelper.getBitmap(overlayFilename1,
-            640, 480);
-        final OverlayFrame overlayOnMvi1 =
-            mVideoEditorHelper.createOverlay(mediaVideoItem, "OverlayOnMvi1",
-                mBitmap1, 0, 5000);
-        mediaVideoItem.addOverlay(overlayOnMvi1);
-
-        final Bitmap mBitmap2 =  mVideoEditorHelper.getBitmap(overlayFilename2,
-            640, 480);
-        final OverlayFrame overlayOnMvi2 =
-            mVideoEditorHelper.createOverlay(mediaVideoItem, "OverlayOnMvi2",
-                mBitmap2, 5000, 9000);
-        mediaVideoItem.addOverlay(overlayOnMvi2);
-
-        List<Overlay> overlayList = mediaVideoItem.getAllOverlays();
-        assertEquals("Overlay Size", 2, overlayList.size());
-        assertEquals("Overlay 1", overlayOnMvi1, overlayList.get(0));
-        assertEquals("Overlay 2", overlayOnMvi2, overlayList.get(1));
-
-        mVideoEditor.setAspectRatio(setAspectRatio);
-
-        validatePreviewProgress(0 /* previewFrom */, -1, previewLoop,
-            mVideoEditor.getDuration());
-    }
-
-    /**
-     * To test Preview : Preview of current Trim applied (with default aspect
-     * ratio)
-     */
-    @LargeTest
-    public void testPreviewWithTrim() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName, MediaItem.RENDERING_MODE_CROPPING);
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        boolean flagForException = false;
-        previewStart = false;
-        previewStop = false;
-        mediaVideoItem.setExtractBoundaries(mediaVideoItem.getDuration() / 2,
-            mediaVideoItem.getDuration());
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        validatePreviewProgress(1000, -1, false, mVideoEditor.getDuration());
-    }
-
-    /**
-     * To test Preview : Preview of current work having Overlay and Effect
-     * applied
-     */
-
-    @LargeTest
-    public void testPreviewWithOverlayEffectKenBurn() throws Exception {
-
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final String overlayFilename = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        previewStart = false;
-        previewStop = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaImageItem mediaImageItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFileName, 10000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem2);
-
-        final MediaVideoItem mediaVideoItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem3);
-
-        final EffectColor effectColor =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem1, "Effect1",
-                1000, 3000, EffectColor.TYPE_COLOR, EffectColor.GREEN);
-        mediaVideoItem1.addEffect(effectColor);
-
-        final Rect startRect = new Rect((mediaImageItem2.getHeight() / 3),
-            (mediaImageItem2.getWidth() / 3), (mediaImageItem2.getHeight() / 2),
-            (mediaImageItem2.getWidth() / 2));
-        final Rect endRect = new Rect(0, 0, mediaImageItem2.getWidth(),
-            mediaImageItem2.getHeight());
-
-        final EffectKenBurns kbeffectOnMI2 = new EffectKenBurns(mediaImageItem2,
-            "KBOnM2", startRect, endRect, 0, 10000);
-        assertNotNull("EffectKenBurns", kbeffectOnMI2);
-        mediaImageItem2.addEffect(kbeffectOnMI2);
-
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFilename,
-            640, 480);
-        final OverlayFrame overlayFrame =
-            mVideoEditorHelper.createOverlay(mediaVideoItem3, "OverlayID",
-                mBitmap, (mediaImageItem2.getDuration() / 4),
-                (mediaVideoItem3.getDuration() / 3));
-        mediaVideoItem3.addOverlay(overlayFrame);
-
-        validatePreviewProgress(5000, -1, false, mVideoEditor.getDuration());
-    }
-
-    /**
-     *To test Preview : Export during preview
-     */
-    @LargeTest
-    public void testPreviewDuringExport() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        previewStart = false;
-        previewStop = false;
-        previewError = false;
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        long waitingTime = minWaitingTime + mVideoEditor.getDuration();
-
-
-        blockTillPreviewCompletes.acquire();
-                    final String fileName = mVideoEditor.getPath() + "/test.3gp";
-                    final int height = MediaProperties.HEIGHT_480;
-                    final int bitrate = MediaProperties.BITRATE_512K;
-
-            try {
-                mVideoEditor.export(fileName, height, bitrate,
-                    new ExportProgressListener() {
-                        public void onProgress(VideoEditor ve,
-                            String outFileName,int progress) {
-
-                        }
-                    });
-            } catch (IOException e) {
-                assertTrue("UnExpected Error in Export" +
-                    e.toString(), false);
-            }
-
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-        try {
-
-            mVideoEditor.startPreview(surfaceHolder, 5000, -1, false, 1,
-                new PreviewProgressListener() {
-
-                    public void onProgress(VideoEditor videoEditor, long timeMs,
-                        OverlayData overlayData) {
-                    }
-                public void onStart(VideoEditor videoEditor) {
-                    setPreviewStart();
-                }
-                public void onStop(VideoEditor videoEditor) {
-                    setPreviewStop();
-                    blockTillPreviewCompletes.release();
-                }
-                public void onError(VideoEditor videoEditor, int error) {
-                    setPreviewError();
-                    blockTillPreviewCompletes.release();
-                }
-            });
-
-        } catch (Exception e) {
-            blockTillPreviewCompletes.release();
-        }
-        blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS);
-        mVideoEditor.stopPreview();
-        assertTrue("Preview Failed to start", previewStart);
-        assertTrue("Preview Failed to stop", previewStop);
-        assertFalse("Preview Error occurred", previewError);
-
-        blockTillPreviewCompletes.release();
-    }
-
-    /**
-     * To test Preview : Preview of current Effects applied (with from time >
-     * total duration)
-     */
-    @LargeTest
-    public void testPreviewWithDurationGreaterThanMediaDuration()
-        throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_192kbps_1_5.mp4";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        boolean flagForException = false;
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName, renderingMode);
-        try {
-            mediaVideoItem1.setExtractBoundaries(0, 20000);
-        } catch (Exception e) {
-            assertTrue("Exception during setExtract Boundaries", false);
-        }
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-        long waitingTime = minWaitingTime + (mVideoEditor.getDuration() - 30000);
-        if(waitingTime < 0)
-        {
-            waitingTime = minWaitingTime;
-        }
-
-        blockTillPreviewCompletes.acquire();
-        try {
-            mVideoEditor.startPreview(surfaceHolder, 30000, -1, true, 1,
-            new PreviewProgressListener() {
-                public void onProgress(VideoEditor videoEditor, long timeMs,
-                    OverlayData overlayData) {
-            }
-                public void onStart(VideoEditor videoEditor) {
-                    setPreviewStart();
-                }
-                public void onStop(VideoEditor videoEditor) {
-                    setPreviewStop();
-                    blockTillPreviewCompletes.release();
-                }
-                public void onError(VideoEditor videoEditor, int error) {
-                    setPreviewError();
-                    blockTillPreviewCompletes.release();
-                }
-        });
-
-        } catch (IllegalArgumentException e) {
-            blockTillPreviewCompletes.release();
-            flagForException = true;
-        }
-        blockTillPreviewCompletes.tryAcquire(waitingTime, TimeUnit.MILLISECONDS);
-        assertTrue("Expected Error in Preview", flagForException);
-        mVideoEditor.stopPreview();
-        blockTillPreviewCompletes.release();
-    }
-
-    /**
-     * To test Preview : Preview of current Effects applied (with Render Preview
-     * Frame)
-     */
-    @LargeTest
-    public void testPreviewWithRenderPreviewFrame() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final Semaphore blockTillPreviewCompletes = new Semaphore(1);
-        boolean flagForException = false;
-        OverlayData overlayData1 = new OverlayData();
-        previewStart = false;
-        previewStop = false;
-
-        final String overlayFilename1 = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor,
-            "m1", videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final EffectColor effectPink =
-            mVideoEditorHelper.createEffectItem(mediaVideoItem,
-                "effectNegativeOnMvi", 1000, 3000, EffectColor.TYPE_COLOR,
-                 EffectColor.PINK);
-        mediaVideoItem.addEffect(effectPink);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-
-        assertEquals("Render preview Frame at 5 Sec", 5000,
-            mVideoEditor.renderPreviewFrame(surfaceHolder, 5000,
-            overlayData1));
-
-        assertEquals("Render preview Frame at 7 Sec", 7000,
-            mVideoEditor.renderPreviewFrame(surfaceHolder, 7000,
-            overlayData1));
-
-        validatePreviewProgress(5000, -1, false, mVideoEditor.getDuration());
-    }
-
-    /**
-     * To test Preview : Preview of current work from selected jump location
-     * till end with Audio Track
-     */
-    @LargeTest
-    public void testPreviewWithEndAudioTrack() throws Exception {
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String imageItemFilename2 = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final String audioFilename = INPUT_FILE_PATH +
-            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-
-        boolean flagForException = false;
-        previewStart = false;
-        previewStop = false;
-        final MediaImageItem mediaImageItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                imageItemFilename1, 7000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem1);
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem.setExtractBoundaries(1000, 8000);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final MediaImageItem mediaImageItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                imageItemFilename2, 7000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem2);
-
-        final AudioTrack audioTrack =
-            mVideoEditorHelper.createAudio(mVideoEditor, "a1", audioFilename);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        List<AudioTrack> audioList = mVideoEditor.getAllAudioTracks();
-        assertEquals("Audio Track List size", 1, audioList.size());
-        assertEquals("Audio Track", audioTrack, audioList.get(0));
-        mVideoEditor.setAspectRatio(MediaProperties.ASPECT_RATIO_4_3);
-
-        validatePreviewProgress(10000, -1, false, mVideoEditor.getDuration());
-    }
-
-    /**
-     * To test render Preview Frame
-     */
-    @LargeTest
-    public void testRenderPreviewFrame() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH
-            + "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String videoItemFileName2 = INPUT_FILE_PATH
-            + "MPEG4_SP_800x480_515kbps_15fps_AMR_NB_8KHz_12.2kbps_m_0_26.mp4";
-        final String videoItemFileName3 = INPUT_FILE_PATH
-            + "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String imageItemFilename1 = INPUT_FILE_PATH
-            + "IMG_1600x1200.jpg";
-        final String imageItemFilename2 = INPUT_FILE_PATH
-            + "IMG_176x144.jpg";
-        final String audioFilename = INPUT_FILE_PATH
-            + "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-        OverlayData overlayData1 = new OverlayData();
-        previewStart = false;
-        previewStop = false;
-        final MediaVideoItem mediaVideoItem1 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFileName1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                videoItemFileName2, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(mediaVideoItem2.getDuration() / 4,
-            mediaVideoItem2.getDuration() / 2);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final MediaVideoItem mediaVideoItem3 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m3",
-                videoItemFileName3, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem1.setExtractBoundaries(mediaVideoItem2.getDuration() / 2,
-            mediaVideoItem2.getDuration());
-        mVideoEditor.addMediaItem(mediaVideoItem3);
-
-        final MediaImageItem mediaImageItem4 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m4",
-                imageItemFilename1, 5000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-
-        final MediaImageItem mediaImageItem5 =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m5",
-                imageItemFilename2, 5000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-
-        List<MediaItem> mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 3, mediaList.size());
-
-        mVideoEditor.insertMediaItem(mediaImageItem4, mediaVideoItem2.getId());
-        mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 4, mediaList.size());
-        assertEquals("Media item 1", mediaVideoItem1, mediaList.get(0));
-        assertEquals("Media item 2", mediaVideoItem2, mediaList.get(1));
-        assertEquals("Media item 4", mediaImageItem4, mediaList.get(2));
-        assertEquals("Media item 3", mediaVideoItem3, mediaList.get(3));
-
-        mVideoEditor.insertMediaItem(mediaImageItem5, mediaImageItem4.getId());
-        mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 5, mediaList.size());
-        assertEquals("Media item 1", mediaVideoItem1, mediaList.get(0));
-        assertEquals("Media item 2", mediaVideoItem2, mediaList.get(1));
-        assertEquals("Media item 4", mediaImageItem4, mediaList.get(2));
-        assertEquals("Media item 5", mediaImageItem5, mediaList.get(3));
-        assertEquals("Media item 3", mediaVideoItem3, mediaList.get(4));
-
-        mVideoEditor.moveMediaItem(mediaVideoItem1.getId(),
-            mediaImageItem5.getId());
-        mediaList = mVideoEditor.getAllMediaItems();
-        assertEquals("Media Item List Size", 5, mediaList.size());
-        assertEquals("Media item 2", mediaVideoItem2, mediaList.get(0));
-        assertEquals("Media item 4", mediaImageItem4, mediaList.get(1));
-        assertEquals("Media item 5", mediaImageItem5, mediaList.get(2));
-        assertEquals("Media item 1", mediaVideoItem1, mediaList.get(3));
-        assertEquals("Media item 3", mediaVideoItem3, mediaList.get(4));
-
-        final TransitionCrossfade transition2And4CrossFade =
-            mVideoEditorHelper.createTCrossFade("transition2And4CrossFade",
-                mediaVideoItem2, mediaImageItem4, 2000,
-                Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(transition2And4CrossFade);
-
-        final TransitionCrossfade transition1And3CrossFade =
-            mVideoEditorHelper.createTCrossFade("transition1And3CrossFade",
-                mediaVideoItem1, mediaVideoItem3, 5000,
-                Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(transition1And3CrossFade);
-
-        final AudioTrack audioTrack =
-            mVideoEditorHelper.createAudio(mVideoEditor, "a1", audioFilename);
-        audioTrack.setExtractBoundaries(0, 2000);
-        mVideoEditor.addAudioTrack(audioTrack);
-
-        audioTrack.enableLoop();
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-
-        mVideoEditor.renderPreviewFrame(surfaceHolder, mVideoEditor.getDuration()/4, overlayData1);
-        Thread.sleep(1000);
-        mVideoEditor.renderPreviewFrame(surfaceHolder, mVideoEditor.getDuration()/2, overlayData1);
-        Thread.sleep(1000);
-        mVideoEditor.renderPreviewFrame(surfaceHolder, mVideoEditor.getDuration(), overlayData1);
-
-    }
-
-    /**
-     * To Test Preview : Without any Media Items in the story Board
-     */
-    @LargeTest
-    public void testStartPreviewWithoutMediaItems() throws Exception {
-        boolean flagForException = false;
-
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-        try{
-            mVideoEditor.startPreview(surfaceHolder, 0, -1, false, 1,
-                new PreviewProgressListener() {
-                    public void onProgress(VideoEditor videoEditor, long timeMs,
-                        OverlayData overlayData) {
-                    }
-                    public void onStart(VideoEditor videoEditor) {
-                        setPreviewStart();
-                    }
-                    public void onStop(VideoEditor videoEditor) {
-                        setPreviewStop();
-                    }
-                    public void onError(VideoEditor videoEditor, int error) {
-                        setPreviewError();
-                    }
-            });
-        }catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Preview without Media Items", flagForException);
-    }
-
-    /**
-     * To Test Preview : Add Media and Remove Media Item (Without any Media
-     * Items in the story Board)
-     */
-    @LargeTest
-    public void testStartPreviewAddRemoveMediaItems() throws Exception {
-        final String videoItemFilename1 = INPUT_FILE_PATH
-            + "H263_profile0_176x144_15fps_256kbps_AACLC_32kHz_128kbps_s_0_26.3gp";
-        final String imageItemFilename1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String alphaFilename = INPUT_FILE_PATH +
-            "TransitionSpiral_QVGA.jpg";
-        boolean flagForException = false;
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m1",
-                videoItemFilename1, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mediaVideoItem.setExtractBoundaries(0, 15000);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final MediaImageItem mediaImageItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor, "m2",
-                imageItemFilename1, 15000, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final TransitionAlpha transition1And2 =
-            mVideoEditorHelper.createTAlpha("transition", mediaVideoItem,
-                mediaImageItem, 3000, Transition.BEHAVIOR_SPEED_UP,
-                alphaFilename, 10, false);
-        mVideoEditor.addTransition(transition1And2);
-
-        final EffectColor effectColor =
-            mVideoEditorHelper.createEffectItem(mediaImageItem, "effect", 5000,
-                3000, EffectColor.TYPE_COLOR, EffectColor.PINK);
-        mediaImageItem.addEffect(effectColor);
-
-        assertEquals("removing Media item 1", mediaVideoItem,
-            mVideoEditor.removeMediaItem(mediaVideoItem.getId()));
-        assertEquals("removing Media item 2", mediaImageItem,
-            mVideoEditor.removeMediaItem(mediaImageItem.getId()));
-
-        try{
-            mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-                public void onProgress(Object item, int action, int progress) {
-                }
-            });
-            final SurfaceHolder surfaceHolder =
-                MediaFrameworkTest.mSurfaceView.getHolder();
-            mVideoEditor.startPreview(surfaceHolder, 0, -1, false, 1,
-                new PreviewProgressListener() {
-                    public void onProgress(VideoEditor videoEditor, long timeMs,
-                        OverlayData overlayData) {
-                    }
-                    public void onStart(VideoEditor videoEditor) {
-                        setPreviewStart();
-                    }
-                    public void onStop(VideoEditor videoEditor) {
-                        setPreviewStop();
-                    }
-                    public void onError(VideoEditor videoEditor, int error) {
-                        setPreviewError();
-                    }
-            });
-        }catch (IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue("Preview with removed Media Items", flagForException);
-
-    }
-
-    /**
-     * To test Preview : Preview of current Effects applied (with Render Preview
-     * Frame)
-     */
-    @LargeTest
-    public void testPreviewWithRenderPreviewFrameWithoutGenerate() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        boolean flagForException = false;
-        long duration = 0;
-        OverlayData overlayData1 = new OverlayData();
-
-        final MediaVideoItem mediaVideoItem =
-            mVideoEditorHelper.createMediaItem(mVideoEditor,
-            "m1", videoItemFileName, MediaItem.RENDERING_MODE_BLACK_BORDER);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final SurfaceHolder surfaceHolder =
-            MediaFrameworkTest.mSurfaceView.getHolder();
-        duration = mVideoEditor.getDuration();
-        /* RenderPreviewFrame returns -1 to indicate last frame */
-        try {
-            mVideoEditor.renderPreviewFrame(surfaceHolder, duration,
-            overlayData1);
-        } catch ( IllegalStateException e) {
-            flagForException = true;
-        }
-        assertTrue (" Render Preview Frame without generate", flagForException);
-        duration = mVideoEditor.getDuration() + 1000;
-        try {
-            mVideoEditor.renderPreviewFrame(surfaceHolder, duration,
-            overlayData1);
-        } catch ( IllegalArgumentException e) {
-            flagForException = true;
-        }
-        assertTrue (" Preview time greater than duration", flagForException);
-    }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
index d157478..89886ef 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java
@@ -23,6 +23,7 @@
 import android.hardware.IProCameraCallbacks;
 import android.hardware.IProCameraUser;
 import android.hardware.camera2.CameraMetadata;
+import android.hardware.camera2.CaptureResultExtras;
 import android.hardware.camera2.ICameraDeviceCallbacks;
 import android.hardware.camera2.ICameraDeviceUser;
 import android.hardware.camera2.impl.CameraMetadataNative;
@@ -151,21 +152,50 @@
 
     static class DummyCameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub {
 
-        @Override
-        public void onCameraError(int errorCode) {
-        }
-
-        @Override
-        public void onCameraIdle() {
-        }
-
-        @Override
-        public void onCaptureStarted(int requestId, long timestamp) {
-        }
-
-        @Override
-        public void onResultReceived(int frameId, CameraMetadataNative result)
+        /*
+         * (non-Javadoc)
+         * @see
+         * android.hardware.camera2.ICameraDeviceCallbacks#onCameraError(int,
+         * android.hardware.camera2.CaptureResultExtras)
+         */
+        public void onCameraError(int errorCode, CaptureResultExtras resultExtras)
                 throws RemoteException {
+            // TODO Auto-generated method stub
+
+        }
+
+        /*
+         * (non-Javadoc)
+         * @see
+         * android.hardware.camera2.ICameraDeviceCallbacks#onCaptureStarted(
+         * android.hardware.camera2.CaptureResultExtras, long)
+         */
+        public void onCaptureStarted(CaptureResultExtras resultExtras, long timestamp)
+                throws RemoteException {
+            // TODO Auto-generated method stub
+
+        }
+
+        /*
+         * (non-Javadoc)
+         * @see
+         * android.hardware.camera2.ICameraDeviceCallbacks#onResultReceived(
+         * android.hardware.camera2.impl.CameraMetadataNative,
+         * android.hardware.camera2.CaptureResultExtras)
+         */
+        public void onResultReceived(CameraMetadataNative result, CaptureResultExtras resultExtras)
+                throws RemoteException {
+            // TODO Auto-generated method stub
+
+        }
+
+        /*
+         * (non-Javadoc)
+         * @see android.hardware.camera2.ICameraDeviceCallbacks#onCameraIdle()
+         */
+        public void onCameraIdle() throws RemoteException {
+            // TODO Auto-generated method stub
+
         }
     }
 
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
index 43ebef4..74ce997 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraDeviceBinderTest.java
@@ -21,6 +21,7 @@
 import android.hardware.camera2.CameraMetadata;
 import android.hardware.camera2.CameraCharacteristics;
 import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.CaptureResultExtras;
 import android.hardware.camera2.ICameraDeviceCallbacks;
 import android.hardware.camera2.ICameraDeviceUser;
 import android.hardware.camera2.impl.CameraMetadataNative;
@@ -84,20 +85,50 @@
 
     public class DummyCameraDeviceCallbacks extends ICameraDeviceCallbacks.Stub {
 
-        @Override
-        public void onCameraError(int errorCode) {
+        /*
+         * (non-Javadoc)
+         * @see
+         * android.hardware.camera2.ICameraDeviceCallbacks#onCameraError(int,
+         * android.hardware.camera2.CaptureResultExtras)
+         */
+        public void onCameraError(int errorCode, CaptureResultExtras resultExtras)
+                throws RemoteException {
+            // TODO Auto-generated method stub
+
         }
 
-        @Override
-        public void onCameraIdle() {
+        /*
+         * (non-Javadoc)
+         * @see android.hardware.camera2.ICameraDeviceCallbacks#onCameraIdle()
+         */
+        public void onCameraIdle() throws RemoteException {
+            // TODO Auto-generated method stub
+
         }
 
-        @Override
-        public void onCaptureStarted(int requestId, long timestamp) {
+        /*
+         * (non-Javadoc)
+         * @see
+         * android.hardware.camera2.ICameraDeviceCallbacks#onCaptureStarted(
+         * android.hardware.camera2.CaptureResultExtras, long)
+         */
+        public void onCaptureStarted(CaptureResultExtras resultExtras, long timestamp)
+                throws RemoteException {
+            // TODO Auto-generated method stub
+
         }
 
-        @Override
-        public void onResultReceived(int frameId, CameraMetadataNative result) {
+        /*
+         * (non-Javadoc)
+         * @see
+         * android.hardware.camera2.ICameraDeviceCallbacks#onResultReceived(
+         * android.hardware.camera2.impl.CameraMetadataNative,
+         * android.hardware.camera2.CaptureResultExtras)
+         */
+        public void onResultReceived(CameraMetadataNative result, CaptureResultExtras resultExtras)
+                throws RemoteException {
+            // TODO Auto-generated method stub
+
         }
     }
 
@@ -139,8 +170,10 @@
     }
 
     private int submitCameraRequest(CaptureRequest request, boolean streaming) throws Exception {
-        int requestId = mCameraUser.submitRequest(request, streaming);
-        assertTrue("Request IDs should be non-negative", requestId >= 0);
+        int requestId = mCameraUser.submitRequest(request, streaming, null);
+        assertTrue(
+                "Request IDs should be non-negative (expected: >= 0, actual: " + requestId + ")",
+                requestId >= 0);
         return requestId;
     }
 
@@ -250,13 +283,13 @@
 
         CaptureRequest.Builder builder = createDefaultBuilder(/* needStream */false);
         CaptureRequest request1 = builder.build();
-        int status = mCameraUser.submitRequest(request1, /* streaming */false);
+        int status = mCameraUser.submitRequest(request1, /* streaming */false, null);
         assertEquals("Expected submitRequest to return BAD_VALUE " +
                 "since we had 0 surface targets set.", CameraBinderTestUtils.BAD_VALUE, status);
 
         builder.addTarget(mSurface);
         CaptureRequest request2 = builder.build();
-        status = mCameraUser.submitRequest(request2, /* streaming */false);
+        status = mCameraUser.submitRequest(request2, /* streaming */false, null);
         assertEquals("Expected submitRequest to return BAD_VALUE since " +
                 "the target surface wasn't registered with createStream.",
                 CameraBinderTestUtils.BAD_VALUE, status);
@@ -290,15 +323,15 @@
         assertNotSame("Request IDs should be unique for multiple requests", requestId1,
                 requestIdStreaming);
 
-        int status = mCameraUser.cancelRequest(-1);
+        int status = mCameraUser.cancelRequest(-1, null);
         assertEquals("Invalid request IDs should not be cancellable",
                 CameraBinderTestUtils.BAD_VALUE, status);
 
-        status = mCameraUser.cancelRequest(requestId1);
+        status = mCameraUser.cancelRequest(requestId1, null);
         assertEquals("Non-streaming request IDs should not be cancellable",
                 CameraBinderTestUtils.BAD_VALUE, status);
 
-        status = mCameraUser.cancelRequest(requestIdStreaming);
+        status = mCameraUser.cancelRequest(requestIdStreaming, null);
         assertEquals("Streaming request IDs should be cancellable", CameraBinderTestUtils.NO_ERROR,
                 status);
 
@@ -337,7 +370,7 @@
             CameraBinderTestUtils.INVALID_OPERATION, status);
 
         // Test good case, waitUntilIdle when there is no active repeating request
-        status = mCameraUser.cancelRequest(requestIdStreaming);
+        status = mCameraUser.cancelRequest(requestIdStreaming, null);
         assertEquals(CameraBinderTestUtils.NO_ERROR, status);
         status = mCameraUser.waitUntilIdle();
         assertEquals(CameraBinderTestUtils.NO_ERROR, status);
@@ -349,16 +382,14 @@
         CaptureRequest request = createDefaultBuilder(/* needStream */true).build();
 
         // Test both single request and streaming request.
-        int requestId1 = submitCameraRequest(request, /* streaming */false);
         verify(mMockCb, timeout(WAIT_FOR_COMPLETE_TIMEOUT_MS).times(1)).onResultReceived(
-                eq(requestId1),
-                argThat(matcher));
+                argThat(matcher),
+                any(CaptureResultExtras.class));
 
-        int streamingId = submitCameraRequest(request, /* streaming */true);
         verify(mMockCb, timeout(WAIT_FOR_COMPLETE_TIMEOUT_MS).atLeast(NUM_CALLBACKS_CHECKED))
                 .onResultReceived(
-                        eq(streamingId),
-                        argThat(matcher));
+                        argThat(matcher),
+                        any(CaptureResultExtras.class));
     }
 
     @SmallTest
@@ -370,13 +401,13 @@
         // Test both single request and streaming request.
         int requestId1 = submitCameraRequest(request, /* streaming */false);
         verify(mMockCb, timeout(WAIT_FOR_COMPLETE_TIMEOUT_MS).times(1)).onCaptureStarted(
-                eq(requestId1),
+                any(CaptureResultExtras.class),
                 anyLong());
 
         int streamingId = submitCameraRequest(request, /* streaming */true);
         verify(mMockCb, timeout(WAIT_FOR_COMPLETE_TIMEOUT_MS).atLeast(NUM_CALLBACKS_CHECKED))
                 .onCaptureStarted(
-                        eq(streamingId),
+                        any(CaptureResultExtras.class),
                         timestamps.capture());
 
         long timestamp = 0; // All timestamps should be larger than 0.
@@ -399,7 +430,7 @@
         SystemClock.sleep(WAIT_FOR_WORK_MS);
 
         // Cancel and make sure we eventually quiesce
-        status = mCameraUser.cancelRequest(streamingId);
+        status = mCameraUser.cancelRequest(streamingId, null);
 
         verify(mMockCb, timeout(WAIT_FOR_IDLE_TIMEOUT_MS).times(1)).onCameraIdle();
 
@@ -420,14 +451,14 @@
         int status;
 
         // Initial flush should work
-        status = mCameraUser.flush();
+        status = mCameraUser.flush(null);
         assertEquals(CameraBinderTestUtils.NO_ERROR, status);
 
         // Then set up a stream
         CaptureRequest request = createDefaultBuilder(/* needStream */true).build();
 
         // Flush should still be a no-op, really
-        status = mCameraUser.flush();
+        status = mCameraUser.flush(null);
         assertEquals(CameraBinderTestUtils.NO_ERROR, status);
 
         // Submit a few capture requests
@@ -438,7 +469,7 @@
         int requestId5 = submitCameraRequest(request, /* streaming */false);
 
         // Then flush and wait for idle
-        status = mCameraUser.flush();
+        status = mCameraUser.flush(null);
         assertEquals(CameraBinderTestUtils.NO_ERROR, status);
 
         verify(mMockCb, timeout(WAIT_FOR_FLUSH_TIMEOUT_MS).times(1)).onCameraIdle();
@@ -450,7 +481,7 @@
         SystemClock.sleep(WAIT_FOR_WORK_MS);
 
         // Then flush and wait for the idle callback
-        status = mCameraUser.flush();
+        status = mCameraUser.flush(null);
         assertEquals(CameraBinderTestUtils.NO_ERROR, status);
 
         verify(mMockCb, timeout(WAIT_FOR_FLUSH_TIMEOUT_MS).times(2)).onCameraIdle();
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
deleted file mode 100644
index d15a535..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/performance/VideoEditorPerformance.java
+++ /dev/null
@@ -1,1073 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest.performance;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileWriter;
-import java.io.Writer;
-
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.videoeditor.AudioTrack;
-import android.media.videoeditor.EffectColor;
-import android.media.videoeditor.EffectKenBurns;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaProperties;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.OverlayFrame;
-import android.media.videoeditor.Transition;
-import android.media.videoeditor.TransitionCrossfade;
-import android.media.videoeditor.TransitionAlpha;
-import android.media.videoeditor.TransitionFadeBlack;
-import android.media.videoeditor.TransitionSliding;
-import android.media.videoeditor.VideoEditor;
-import android.os.Environment;
-import android.test.ActivityInstrumentationTestCase;
-import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
-import android.os.Environment;
-import android.os.SystemClock;
-import android.test.ActivityInstrumentationTestCase;
-import android.media.videoeditor.VideoEditor.ExportProgressListener;
-
-import android.util.Log;
-
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import android.test.suitebuilder.annotation.LargeTest;
-import com.android.mediaframeworktest.VideoEditorHelper;
-
-/**
- * Junit / Instrumentation - performance measurement for media player and
- * recorder
- */
-public class VideoEditorPerformance extends
-    ActivityInstrumentationTestCase<MediaFrameworkTest> {
-
-    private final String TAG = "VideoEditorPerformance";
-
-    private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
-
-    private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
-
-    private final String VIDEOEDITOR_OUTPUT = PROJECT_LOCATION +
-        "VideoEditorPerformance.txt";
-
-    public VideoEditorPerformance() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-    }
-
-    private final String PROJECT_CLASS_NAME =
-        "android.media.videoeditor.VideoEditorImpl";
-    private VideoEditor mVideoEditor;
-    private VideoEditorHelper mVideoEditorHelper;
-
-    @Override
-    protected void setUp() throws Exception {
-        // setup for each test case.
-        super.setUp();
-        mVideoEditorHelper = new VideoEditorHelper();
-        // Create a random String which will be used as project path, where all
-        // project related files will be stored.
-        final String projectPath =
-            mVideoEditorHelper.createRandomFile(PROJECT_LOCATION);
-        mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
-        // Clean the directory created as project path
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-        System.gc();
-        super.tearDown();
-    }
-
-    private void writeTimingInfo(String testCaseName, String[] information)
-        throws Exception {
-        File outFile = new File(VIDEOEDITOR_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(outFile, true));
-        output.write(testCaseName + "\n\t");
-        for (int i = 0; i < information.length; i++) {
-            output.write(information[i]);
-        }
-        output.write("\n\n");
-        output.close();
-    }
-
-    private final int NUM_OF_ITERATIONS=20;
-
-    private int calculateTimeTaken(long beginTime, int numIterations)
-        throws Exception {
-        final long duration2 = SystemClock.uptimeMillis();
-        final long durationToCreateMediaItem = (duration2 - beginTime);
-        final int timeTaken1 = (int)(durationToCreateMediaItem / numIterations);
-        return (timeTaken1);
-    }
-
-    private void createVideoItems(MediaVideoItem[] mediaVideoItem,
-        String videoItemFileName, int renderingMode, int startTime, int endTime) throws Exception {
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            try {
-                mediaVideoItem[i] = new MediaVideoItem(mVideoEditor, "m" + i,
-                    videoItemFileName, renderingMode);
-                mediaVideoItem[i].setExtractBoundaries(startTime, endTime);
-            } catch (Exception e1) {
-                assertTrue(
-                    "Can not create an object of Video Item with file name = "
-                    + videoItemFileName + "------ID:m" + i + "       Issue = "
-                    + e1.toString(), false);
-            }
-        }
-    }
-
-    private void addVideoItems(MediaVideoItem[] mediaVideoItem) throws Exception {
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            try {
-                mVideoEditor.addMediaItem(mediaVideoItem[i]);
-            } catch (Exception e1) {
-                assertTrue(
-                    "Can not add an object of Video Item with ID:m" + i +
-                    "    Issue = " + e1.toString(), false);
-            }
-        }
-    }
-
-    private void removeVideoItems(MediaVideoItem[] mediaVideoItem) throws Exception {
-            for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            try {
-            mVideoEditor.removeMediaItem(mediaVideoItem[i].getId());
-            } catch (Exception e1) {
-                assertTrue(
-                    "Can not Remove an object of Video Item with ID:m" + i +
-                    "    Issue = " + e1.toString(), false);
-            }
-        }
-    }
-
-    private void createImageItems(MediaImageItem[] mIi,
-        String imageItemFileName, int renderingMode, int duration) throws Exception {
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            try {
-                mIi[i] = new MediaImageItem(mVideoEditor, "m" + i,
-                    imageItemFileName, duration, renderingMode);
-            } catch (Exception e1) {
-                assertTrue( " Cannot create Image Item", false);
-            }
-        }
-    }
-
-    private void addImageItems(MediaImageItem[] mIi) throws Exception {
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            try {
-                mVideoEditor.addMediaItem(mIi[i]);
-            } catch (Exception e1) {
-                assertTrue("Cannot add Image item", false);
-            }
-        }
-    }
-
-    private void removeImageItems(MediaImageItem[] mIi) throws Exception {
-            for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            try {
-            mVideoEditor.removeMediaItem(mIi[i].getId());
-            } catch (Exception e1) {
-                assertTrue("Cannot remove image item", false);
-            }
-        }
-    }
-    /**
-     * To test the performance of adding and removing the video media item
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceAddRemoveVideoItem() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final int videoItemStartTime = 0;
-        final int videoItemEndTime = 5000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[3];
-        final MediaVideoItem[] mediaVideoItem =
-            new MediaVideoItem[NUM_OF_ITERATIONS];
-        int timeTaken = 0;
-        long startTime = 0;
-
-        /** Time Take for creation of Media Video Item */
-        startTime = SystemClock.uptimeMillis();
-        createVideoItems(mediaVideoItem, videoItemFileName, renderingMode,
-            videoItemStartTime, videoItemEndTime);
-
-        timeTaken = calculateTimeTaken (startTime, NUM_OF_ITERATIONS);
-        loggingInfo[0] = "Time taken to Create Media Video Item :" +
-            timeTaken;
-
-        /** Time Take for Addition of Media Video Item */
-        startTime = SystemClock.uptimeMillis();
-        addVideoItems(mediaVideoItem);
-        timeTaken = calculateTimeTaken (startTime, NUM_OF_ITERATIONS);
-        loggingInfo[1] = "\n\tTime taken to Add  Media Video Item :"
-            + timeTaken;
-
-        /** Time Take for Removal of Media Video Item */
-        startTime = SystemClock.uptimeMillis();
-        removeVideoItems(mediaVideoItem);
-        timeTaken = calculateTimeTaken (startTime, NUM_OF_ITERATIONS);
-        loggingInfo[2] = "\n\tTime taken to remove  Media Video Item :"
-            + timeTaken;
-
-        writeTimingInfo("testPerformanceAddRemoveVideoItem (in mSec)", loggingInfo);
-    }
-
-    /**
-     * To test the performance of adding and removing the image media item
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceAddRemoveImageItem() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final int imageItemDuration = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[3];
-        final MediaImageItem[] mediaImageItem =
-            new MediaImageItem[NUM_OF_ITERATIONS];
-        int timeTaken = 0;
-
-        long beginTime = SystemClock.uptimeMillis();
-        createImageItems(mediaImageItem, imageItemFileName, renderingMode,
-            imageItemDuration);
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[0] = "Time taken to Create  Media Image Item :" +
-            timeTaken;
-
-        beginTime = SystemClock.uptimeMillis();
-        addImageItems(mediaImageItem);
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[1] = "\n\tTime taken to add  Media Image Item :" +
-            timeTaken;
-
-        beginTime = SystemClock.uptimeMillis();
-        removeImageItems(mediaImageItem);
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[2] = "\n\tTime taken to remove  Media Image Item :"
-            + timeTaken;
-
-        writeTimingInfo("testPerformanceAddRemoveImageItem (in mSec)",
-            loggingInfo);
-    }
-
-    /**
-     * To test the performance of adding and removing the transition
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceAddRemoveTransition() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-        "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final int videoItemStartTime1 = 0;
-        final int videoItemEndTime1 = 20000;
-        final String videoItemFileName2 = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final int videoItemStartTime2 = 0;
-        final int videoItemEndTime2 = 20000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int transitionDuration = 5000;
-        final int transitionBehavior = Transition.BEHAVIOR_MIDDLE_FAST;
-        final String[] loggingInfo = new String[3];
-        int timeTaken = 0;
-
-        final MediaVideoItem[] mediaVideoItem =
-            new MediaVideoItem[(NUM_OF_ITERATIONS *10) + 1];
-
-        for (int i = 0; i < (NUM_OF_ITERATIONS *10); i+=2) {
-            try {
-                mediaVideoItem[i] = new MediaVideoItem(mVideoEditor, "m" + i,
-                    videoItemFileName1, renderingMode);
-                mediaVideoItem[i+1] = new MediaVideoItem(mVideoEditor,
-                    "m" + (i+1), videoItemFileName2, renderingMode);
-                mediaVideoItem[i].setExtractBoundaries(videoItemStartTime1,
-                    videoItemEndTime1);
-                mediaVideoItem[i+1].setExtractBoundaries(videoItemStartTime2,
-                    videoItemEndTime2);
-            } catch (Exception e1) {
-                assertTrue("Can not create Video Object Item with file name = "
-                    + e1.toString(), false);
-            }
-            mVideoEditor.addMediaItem(mediaVideoItem[i]);
-            mVideoEditor.addMediaItem(mediaVideoItem[i+1]);
-        }
-        mediaVideoItem[(NUM_OF_ITERATIONS *10)] = new MediaVideoItem(mVideoEditor,
-            "m" + (NUM_OF_ITERATIONS *10), videoItemFileName1, renderingMode);
-        mediaVideoItem[(NUM_OF_ITERATIONS *10)].setExtractBoundaries(
-            videoItemStartTime1, videoItemEndTime1);
-        mVideoEditor.addMediaItem(mediaVideoItem[(NUM_OF_ITERATIONS *10)]);
-        final TransitionCrossfade tranCrossfade[] =
-            new TransitionCrossfade[(NUM_OF_ITERATIONS *10)];
-
-        long beginTime = SystemClock.uptimeMillis();
-        for (int i = 0; i < (NUM_OF_ITERATIONS *10); i++) {
-            tranCrossfade[i] = new TransitionCrossfade("transition" + i,
-                mediaVideoItem[i], mediaVideoItem[i+1], transitionDuration,
-                transitionBehavior);
-        }
-        timeTaken = calculateTimeTaken(beginTime, (NUM_OF_ITERATIONS * 10));
-        loggingInfo[0] = "Time taken to Create CrossFade Transition :" +
-            timeTaken;
-
-        beginTime = SystemClock.uptimeMillis();
-        for (int i = 0; i < (NUM_OF_ITERATIONS *10); i++) {
-            mVideoEditor.addTransition(tranCrossfade[i]);
-        }
-        timeTaken = calculateTimeTaken(beginTime, (NUM_OF_ITERATIONS * 10));
-        loggingInfo[1] = "\n\tTime taken to add CrossFade Transition :" +
-            timeTaken;
-
-        beginTime = SystemClock.uptimeMillis();
-        for (int i = 0; i < (NUM_OF_ITERATIONS *10); i++) {
-            assertEquals("Removing Transitions", tranCrossfade[i], mVideoEditor
-                .removeTransition(tranCrossfade[i].getId()));
-        }
-        timeTaken = calculateTimeTaken(beginTime, (NUM_OF_ITERATIONS * 10));
-        loggingInfo[2] = "\n\tTime taken to remove CrossFade Transition :" +
-            timeTaken;
-
-        writeTimingInfo("testPerformanceAddRemoveTransition (in mSec)", loggingInfo);
-    }
-
-    /**
-     * To test performance of Export
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceExport() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int outHeight = MediaProperties.HEIGHT_480;
-        final int outBitrate = MediaProperties.BITRATE_256K;
-        final int outVcodec = MediaProperties.VCODEC_H264;
-        final String[] loggingInfo = new String[1];
-        final String outFilename = mVideoEditorHelper
-            .createRandomFile(mVideoEditor.getPath() + "/") + ".3gp";
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_12Mbps_AACLC_44.1khz_64kbps_s_1_17.mp4";
-        final String imageItemFileName1 = INPUT_FILE_PATH + "IMG_1600x1200.jpg";
-        final String videoItemFileName2 = INPUT_FILE_PATH +
-            "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_32kbps_m_1_17.3gp";
-        final String imageItemFileName2 = INPUT_FILE_PATH + "IMG_176x144.jpg";
-        final String videoItemFileName3 = INPUT_FILE_PATH +
-            "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_161kbps_s_0_26.mp4";
-        final String overlayFile = INPUT_FILE_PATH + "IMG_640x480_Overlay1.png";
-        final String audioTrackFilename = INPUT_FILE_PATH +
-            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-        final String maskFilename = INPUT_FILE_PATH +
-            "TransitionSpiral_QVGA.jpg";
-
-        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-            "m1", videoItemFileName1, renderingMode);
-        mediaItem1.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaItem1);
-
-        final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-            "m2", imageItemFileName1, 10000, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem2);
-
-        final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
-            "m3", videoItemFileName2, renderingMode);
-        mediaItem3.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaItem3);
-
-        final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor,
-            "m4", imageItemFileName2, 10000, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem4);
-
-        final MediaVideoItem mediaItem5 = new MediaVideoItem(mVideoEditor,
-            "m5", videoItemFileName3, renderingMode);
-        mediaItem5.setExtractBoundaries(0, 20000);
-        mVideoEditor.addMediaItem(mediaItem5);
-        /**
-         * 7.Add TransitionAlpha, Apply this  Transition as Begin for Media Item 1
-         *  with duration = 2 sec behavior = BEHAVIOR_LINEAR, mask file name =
-         * TransitionSpiral_QVGA.jpg , blending percent = 50%, invert = true;
-         * */
-        final TransitionAlpha transition1 =
-            mVideoEditorHelper.createTAlpha("transition1", null, mediaItem1,
-                2000, Transition.BEHAVIOR_LINEAR, maskFilename, 50, true);
-        mVideoEditor.addTransition(transition1);
-
-        /**
-         * 8.Add Transition Sliding between MediaItem 2 and 3 ,
-         *  Sliding Direction  = DIRECTION_RIGHT_OUT_LEFT_IN,
-         *  behavior  = BEHAVIOR_MIDDLE_FAST and duration = 4sec
-         * */
-        final TransitionSliding transition2And3 =
-            mVideoEditorHelper.createTSliding("transition2", mediaItem2,
-                mediaItem3, 4000, Transition.BEHAVIOR_MIDDLE_FAST,
-                TransitionSliding.DIRECTION_RIGHT_OUT_LEFT_IN);
-        mVideoEditor.addTransition(transition2And3);
-
-        /**
-         * 9.Add Transition Crossfade between  Media Item 3 and 4,
-         *  behavior = BEHAVIOR_MIDDLE_SLOW, duration = 3.5 sec
-         * */
-        final TransitionCrossfade transition3And4 =
-            mVideoEditorHelper.createTCrossFade("transition3", mediaItem3,
-                mediaItem4, 3500, Transition.BEHAVIOR_MIDDLE_SLOW);
-        mVideoEditor.addTransition(transition3And4);
-
-        /**
-         * 10.Add Transition Fadeblack between  Media Item 4 and 5,
-         *  behavior = BEHAVIOR_SPEED_DOWN, duration = 3.5 sec
-         * */
-        final TransitionFadeBlack transition4And5 =
-            mVideoEditorHelper.createTFadeBlack("transition4", mediaItem4,
-                mediaItem5, 3500, Transition.BEHAVIOR_SPEED_DOWN);
-        mVideoEditor.addTransition(transition4And5);
-
-        /**
-         * 11.Add Effect 1 type="TYPE_SEPIA" to the MediaItem 1,
-         *  start time=1sec and duration =4secs
-         * */
-        final EffectColor effectColor1 = mVideoEditorHelper.createEffectItem(
-            mediaItem1, "effect1", 1000, 4000, EffectColor.TYPE_SEPIA, 0);
-        mediaItem1.addEffect(effectColor1);
-
-        /**
-         * 12.Add Overlay 1  to the MediaItem 3: Frame Overlay with start time = 1 sec
-         * duration = 4 sec with item  = IMG_640x480_Overlay1.png
-         * */
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFile, 640,
-            480);
-        final OverlayFrame overlayFrame =
-            mVideoEditorHelper.createOverlay(mediaItem3, "overlay",
-                mBitmap, 1000, 4000);
-        mediaItem3.addOverlay(overlayFrame);
-        /**
-         * 13.Add Effect 2 type="TYPE_NEGATIVE" to the MediaItem 2,
-         *  start time=8sec and duration =2secs
-         * */
-        final EffectColor effectColor2 = mVideoEditorHelper.createEffectItem(
-            mediaItem2, "effect2", 8000, 2000, EffectColor.TYPE_NEGATIVE, 0);
-        mediaItem2.addEffect(effectColor2);
-        /**
-         * 14.Add Effect 3 type="TYPE_COLOR" to the MediaItem 3, color param = "PINK",
-         *  start time=5 sec and duration =3secs
-         * */
-        final EffectColor effectColor3 = mVideoEditorHelper.createEffectItem(
-            mediaItem3, "effect3", 5000, 3000, EffectColor.TYPE_COLOR,
-            EffectColor.PINK);
-        mediaItem3.addEffect(effectColor3);
-        /**
-         * 15.Add Effect 4 type="TYPE_FIFTIES" to the MediaItem 4,
-         *  start time=2 sec and duration =1secs
-        * */
-        final EffectColor effectColor4 = mVideoEditorHelper.createEffectItem(
-            mediaItem4, "effect4", 2000, 1000, EffectColor.TYPE_FIFTIES, 0);
-        mediaItem4.addEffect(effectColor4);
-        /**
-         * 16.Add KenBurnsEffect for MediaItem 4 with
-         *  duration = 3 sec and startTime = 4 sec
-         *  StartRect
-         *  left = org_height/3  ;  top = org_width/3
-         *  bottom = org_width/2  ;  right = org_height/2
-         *  EndRect
-         *  left = 0  ;  top = 0
-         *  bottom =  org_height;  right =  org_width
-         * */
-
-        final Rect startRect = new Rect((mediaItem4.getHeight() / 3),
-            (mediaItem4.getWidth() / 3), (mediaItem4.getHeight() / 2),
-            (mediaItem4.getWidth() / 2));
-        final Rect endRect = new Rect(0, 0, mediaItem4.getWidth(),
-            mediaItem4.getHeight());
-        final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns(
-            mediaItem4, "KBOnM2", startRect, endRect,4000 , 3000);
-        mediaItem4.addEffect(kbEffectOnMediaItem);
-
-        /** 17.Add Audio Track,Set extract boundaries o to 10 sec.
-         * */
-        final AudioTrack audioTrack = mVideoEditorHelper.createAudio(
-            mVideoEditor, "audioTrack", audioTrackFilename);
-        mVideoEditor.addAudioTrack(audioTrack);
-        /** 18.Enable Looping for Audio Track.
-         * */
-        audioTrack.enableLoop();
-        int timeTaken = 0;
-        final long beginTime = SystemClock.uptimeMillis();
-            try {
-                mVideoEditor.export(outFilename, outHeight, outBitrate,
-                    new ExportProgressListener() {
-                        public void onProgress(VideoEditor ve,
-                            String outFileName, int progress) {
-                        }
-                    });
-            } catch (Exception e) {
-                assertTrue("Error in Export" + e.toString(), false);
-            }
-        mVideoEditorHelper.checkDeleteExistingFile(outFilename);
-
-        timeTaken = calculateTimeTaken(beginTime, 1);
-        loggingInfo[0] = "Time taken to do ONE export of storyboard duration "
-            + mVideoEditor.getDuration() + " is :" + timeTaken;
-
-        writeTimingInfo("testPerformanceExport (in mSec)", loggingInfo);
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-    }
-
-
-    /**
-     * To test the performance of thumbnail extraction
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceThumbnailVideoItem() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final int videoItemStartTime = 0;
-        final int videoItemEndTime = 20000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[1];
-
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "m1", videoItemFileName, renderingMode);
-        mediaVideoItem.setExtractBoundaries(videoItemStartTime,
-            videoItemEndTime);
-
-        int timeTaken = 0;
-        long beginTime = SystemClock.uptimeMillis();
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            mediaVideoItem.getThumbnail(mediaVideoItem.getWidth() / 2,
-                mediaVideoItem.getHeight() / 2, i);
-        }
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[0] = "Duration taken to get Video Thumbnails :" +
-            timeTaken;
-
-        writeTimingInfo("testPerformanceThumbnailVideoItem (in mSec)", loggingInfo);
-    }
-
-    /**
-     * To test the performance of adding and removing the overlay to media item
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceOverlayVideoItem() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final int videoItemStartTime1 = 0;
-        final int videoItemEndTime1 = 10000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String overlayFilename = INPUT_FILE_PATH
-            + "IMG_640x480_Overlay1.png";
-        final int overlayStartTime = 1000;
-        final int overlayDuration = 5000;
-
-        final String[] loggingInfo = new String[2];
-        MediaVideoItem mediaVideoItem = null;
-
-        try {
-            mediaVideoItem = new MediaVideoItem(mVideoEditor, "m0",
-                videoItemFileName1, renderingMode);
-            mediaVideoItem.setExtractBoundaries(videoItemStartTime1,
-                videoItemEndTime1);
-        } catch (Exception e1) {
-            assertTrue("Can not create Video Item with file name = "
-                + e1.toString(), false);
-        }
-        final OverlayFrame overlayFrame[] = new OverlayFrame[NUM_OF_ITERATIONS];
-        final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(overlayFilename,
-            640, 480);
-        int timeTaken = 0;
-        long beginTime = SystemClock.uptimeMillis();
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            overlayFrame[i] = new OverlayFrame(mediaVideoItem, "overlay" + i,
-            mBitmap, overlayStartTime, overlayDuration);
-            mediaVideoItem.addOverlay(overlayFrame[i]);
-        }
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[0] = "Time taken to add & create Overlay :" + timeTaken;
-
-        beginTime = SystemClock.uptimeMillis();
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            assertEquals("Removing Overlays", overlayFrame[i],
-                mediaVideoItem.removeOverlay((overlayFrame[i].getId())));
-        }
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[1] = "\n\tTime taken to remove  Overlay :" +
-            timeTaken;
-
-        writeTimingInfo("testPerformanceOverlayVideoItem (in mSec)", loggingInfo);
-    }
-
-    /**
-     * To test the performance of get properties of a Video media item
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceVideoItemProperties() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final int videoItemStartTime1 = 0;
-        final int videoItemEndTime1 = 10100;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
-        final int fileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int duration = 77366;
-        final int videoBitrate = 3169971;
-        final int fps = 30;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int width = 1080;
-        final int height = MediaProperties.HEIGHT_720;
-        int timeTaken = 0;
-        final String[] loggingInfo = new String[1];
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "m0", videoItemFileName1, renderingMode);
-        mediaVideoItem.setExtractBoundaries(videoItemStartTime1,
-            videoItemEndTime1);
-        long beginTime = SystemClock.uptimeMillis();
-        for (int i = 0; i < (NUM_OF_ITERATIONS*10); i++) {
-            try {
-                assertEquals("Aspect Ratio Mismatch",
-                    aspectRatio, mediaVideoItem.getAspectRatio());
-                assertEquals("File Type Mismatch",
-                    fileType, mediaVideoItem.getFileType());
-                assertEquals("VideoCodec Mismatch",
-                    videoCodecType, mediaVideoItem.getVideoType());
-                assertEquals("duration Mismatch",
-                    duration, mediaVideoItem.getDuration());
-                assertEquals("Video Profile ",
-                    videoProfile, mediaVideoItem.getVideoProfile());
-                assertEquals("Video Level ",
-                    videoLevel, mediaVideoItem.getVideoLevel());
-                assertEquals("Video height ",
-                    height, mediaVideoItem.getHeight());
-                assertEquals("Video width ",
-                    width, mediaVideoItem.getWidth());
-            } catch (Exception e1) {
-                assertTrue("Can not create Video Item with file name = "
-                    + e1.toString(), false);
-            }
-        }
-        timeTaken = calculateTimeTaken(beginTime, (NUM_OF_ITERATIONS*10));
-        loggingInfo[0] = "Time taken to get Media Properties :"
-            + timeTaken;
-        writeTimingInfo("testPerformanceVideoItemProperties:", loggingInfo);
-    }
-
-    /**
-     * To test the performance of generatePreview : with Transitions
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceGeneratePreviewWithTransitions()
-        throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String imageItemFileName = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int transitionBehavior = Transition.BEHAVIOR_MIDDLE_FAST;
-        long averageTime = 0;
-        final String[] loggingInfo = new String[1];
-
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "mediaItem1", videoItemFileName, renderingMode);
-        mediaVideoItem.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final MediaImageItem mediaImageItem = new MediaImageItem(mVideoEditor,
-            "mediaItem2", imageItemFileName, 10000, renderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final TransitionCrossfade transitionCrossFade = new TransitionCrossfade(
-            "transitionCrossFade", mediaVideoItem, mediaImageItem,
-            5000, transitionBehavior);
-        mVideoEditor.addTransition(transitionCrossFade);
-
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            final long duration1 = SystemClock.uptimeMillis();
-            mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-                public void onProgress(Object item, int action, int progress) {
-                }
-            });
-            final long duration2 = SystemClock.uptimeMillis();
-            mVideoEditor.removeTransition(transitionCrossFade.getId());
-            mVideoEditor.addTransition(transitionCrossFade);
-            averageTime += (duration2 - duration1);
-        }
-        final long durationToAddObjects = averageTime;
-        final float timeTaken = (float)durationToAddObjects *
-            1.0f/(float)NUM_OF_ITERATIONS;
-        loggingInfo[0] = "Time taken to Generate Preview with transition :"
-            + timeTaken;
-        writeTimingInfo("testPerformanceGeneratePreviewWithTransitions:",
-            loggingInfo);
-    }
-
-    /**
-     * To test the performance of generatePreview : with KenBurn
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceWithKenBurn() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String imageItemFileName = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        long averageTime = 0;
-        final String[] loggingInfo = new String[1];
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "mediaItem1", videoItemFileName, renderingMode);
-        mediaVideoItem.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final MediaImageItem mediaImageItem = new MediaImageItem(mVideoEditor,
-            "mediaItem2", imageItemFileName, 10000, renderingMode);
-        mVideoEditor.addMediaItem(mediaImageItem);
-
-        final Rect startRect = new Rect((mediaImageItem.getHeight() / 3),
-            (mediaImageItem.getWidth() / 3), (mediaImageItem.getHeight() / 2),
-            (mediaImageItem.getWidth() / 2));
-        final Rect endRect = new Rect(0, 0, mediaImageItem.getWidth(),
-            mediaImageItem.getHeight());
-        final EffectKenBurns kbEffectOnMediaItem =
-            new EffectKenBurns(mediaImageItem, "KBOnM2", startRect, endRect,
-                500, 3000);
-        mediaImageItem.addEffect(kbEffectOnMediaItem);
-
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            final long duration1 = SystemClock.uptimeMillis();
-            mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-                public void onProgress(Object item, int action, int progress) {
-                }
-            });
-            final long duration2 = SystemClock.uptimeMillis();
-            mediaImageItem.removeEffect(kbEffectOnMediaItem.getId());
-            mediaImageItem.addEffect(kbEffectOnMediaItem);
-            averageTime += duration2 - duration1;
-        }
-
-        final long durationToAddObjects = (averageTime);
-        final float timeTaken = (float)durationToAddObjects *
-            1.0f/(float)NUM_OF_ITERATIONS;
-        loggingInfo[0] = "Time taken to Generate KenBurn Effect :"
-            + timeTaken;
-        writeTimingInfo("testPerformanceWithKenBurn", loggingInfo);
-    }
-
-    /**
-     * To test the performance of generatePreview : with Transitions and
-     * Effect,Overlapping scenario
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceEffectOverlappingTransition() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String videoItemFileName2 = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final int videoStartTime1 = 0;
-        final int videoEndTime1 = 10000;
-        final int videoStartTime2 = 0;
-        final int videoEndTime2 = 10000;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int transitionDuration = 5000;
-        final int transitionBehavior = Transition.BEHAVIOR_MIDDLE_FAST;
-        final int effectItemStartTime = 5000;
-        final int effectItemDurationTime = 5000;
-        final int effectType = EffectColor.TYPE_COLOR;
-        final int effectColorType = EffectColor.GREEN;
-        long averageDuration = 0;
-
-        final String[] loggingInfo = new String[1];
-        final MediaVideoItem mediaVideoItem1 = new MediaVideoItem(mVideoEditor,
-            "mediaItem1", videoItemFileName1, renderingMode);
-        mediaVideoItem1.setExtractBoundaries(videoStartTime1, videoEndTime1);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 = new MediaVideoItem(mVideoEditor,
-            "mediaItem2", videoItemFileName2, renderingMode);
-        mediaVideoItem2.setExtractBoundaries(videoStartTime2, videoEndTime2);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final TransitionCrossfade transitionCrossFade = new TransitionCrossfade(
-            "transitionCrossFade", mediaVideoItem1, mediaVideoItem2,
-            transitionDuration, transitionBehavior);
-        mVideoEditor.addTransition(transitionCrossFade);
-
-        final EffectColor effectColor = new EffectColor(mediaVideoItem1,
-            "effect", effectItemStartTime, effectItemDurationTime, effectType,
-             effectColorType);
-        mediaVideoItem1.addEffect(effectColor);
-
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            final long duration1 = SystemClock.uptimeMillis();
-            mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-                public void onProgress(Object item, int action, int progress) {
-                }
-            });
-            final long duration2 = SystemClock.uptimeMillis();
-            mVideoEditor.removeTransition(transitionCrossFade.getId());
-            mVideoEditor.addTransition(transitionCrossFade);
-            averageDuration += (duration2 - duration1);
-        }
-        SystemClock.uptimeMillis();
-        final long durationToAddObjects = (averageDuration);
-        final float timeTaken = (float)durationToAddObjects *
-            1.0f/(float)NUM_OF_ITERATIONS;
-        loggingInfo[0] =
-            "Time taken to testPerformanceEffectOverlappingTransition :"
-            + timeTaken;
-        writeTimingInfo("testPerformanceEffectOverlappingTransition:",
-            loggingInfo);
-    }
-
-    /**
-     * To test creation of story board with Transition and Two Effects, Effect
-     * overlapping transitions
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceTransitionWithEffectOverlapping() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String videoItemFileName2 = INPUT_FILE_PATH
-            + "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int transitionDuration = 5000;
-        final int transitionBehavior = Transition.BEHAVIOR_MIDDLE_FAST;
-        final int effectItemStartTime1 = 5000;
-        final int effectItemDurationTime1 = 5000;
-        final int effectType1 = EffectColor.TYPE_COLOR;
-        final int effectColorType1 = EffectColor.GREEN;
-        final int effectItemStartTime2 = 5000;
-        final int effectItemDurationTime2 = 5000;
-        final int effectType2 = EffectColor.TYPE_COLOR;
-        final int effectColorType2 = EffectColor.GREEN;
-        int averageTime = 0;
-        final String[] loggingInfo = new String[1];
-
-        final MediaVideoItem mediaVideoItem1 = new MediaVideoItem(mVideoEditor,
-            "mediaItem1", videoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem1);
-
-        final MediaVideoItem mediaVideoItem2 = new MediaVideoItem(mVideoEditor,
-            "mediaItem2", videoItemFileName2, renderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem2);
-
-        final TransitionCrossfade transitionCrossFade = new TransitionCrossfade(
-            "transitionCrossFade", mediaVideoItem1, mediaVideoItem2,
-            transitionDuration, transitionBehavior);
-        mVideoEditor.addTransition(transitionCrossFade);
-
-        final EffectColor effectColor1 = new EffectColor(mediaVideoItem1,
-            "effect1", effectItemStartTime1, effectItemDurationTime1,
-            effectType1, effectColorType1);
-        mediaVideoItem1.addEffect(effectColor1);
-
-        final EffectColor effectColor2 = new EffectColor(mediaVideoItem2,
-            "effect2", effectItemStartTime2, effectItemDurationTime2,
-            effectType2, effectColorType2);
-        mediaVideoItem2.addEffect(effectColor2);
-
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            final long duration1 = SystemClock.uptimeMillis();
-            mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-                public void onProgress(Object item, int action, int progress) {
-                }
-            });
-            final long duration2 = SystemClock.uptimeMillis();
-            mVideoEditor.removeTransition(transitionCrossFade.getId());
-            mVideoEditor.addTransition(transitionCrossFade);
-            averageTime += duration2 - duration1;
-        }
-        final long durationToAddObjects = (averageTime);
-        final float timeTaken = (float)durationToAddObjects *
-            1.0f/(float)NUM_OF_ITERATIONS;
-        loggingInfo[0] = "Time taken to TransitionWithEffectOverlapping :"
-            + timeTaken;
-        writeTimingInfo("testPerformanceTransitionWithEffectOverlapping",
-            loggingInfo);
-    }
-
-    /**
-     *To test ThumbnailList for H264
-     */
-    @LargeTest
-    public void testThumbnailH264NonIFrame() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final int outWidth = 1080;
-        final int outHeight = 720;
-        final int atTime = 2400;
-        long durationToAddObjects = 0;
-        int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[1];
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "m1", videoItemFilename, renderingMode);
-        assertNotNull("MediaVideoItem", mediaVideoItem);
-
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            final long duration1 = SystemClock.uptimeMillis();
-            mediaVideoItem.getThumbnail(outWidth, outHeight, atTime + i);
-            final long duration2 = SystemClock.uptimeMillis();
-            durationToAddObjects += (duration2 - duration1);
-        }
-        final float timeTaken = (float)durationToAddObjects *
-            1.0f/(float)NUM_OF_ITERATIONS;
-        loggingInfo[0] = "Time taken for Thumbnail generation :"
-            + timeTaken;
-        writeTimingInfo("testThumbnailH264NonIFrame", loggingInfo);
-    }
-
-    /**
-     *To test ThumbnailList for H264
-     */
-    @LargeTest
-    public void testThumbnailH264AnIFrame() throws Exception {
-        final String videoItemFilename = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final int outWidth = 1080;
-        final int outHeight = 720;
-        final int atTime = 3000;
-        int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[1];
-        long durationToAddObjects = 0;
-
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "m1", videoItemFilename, renderingMode);
-        assertNotNull("MediaVideoItem", mediaVideoItem);
-
-        for (int i = 0; i < NUM_OF_ITERATIONS; i++) {
-            final long duration1 = SystemClock.uptimeMillis();
-            mediaVideoItem.getThumbnail(outWidth, outHeight, atTime + i);
-            final long duration2 = SystemClock.uptimeMillis();
-            durationToAddObjects += (duration2 - duration1);
-        }
-        final float timeTaken = (float)durationToAddObjects *
-            1.0f/(float)NUM_OF_ITERATIONS;
-        loggingInfo[0] = "Time taken Thumbnail generation :"
-            + timeTaken;
-        writeTimingInfo("testThumbnailH264AnIFrame", loggingInfo);
-    }
-
-    /**
-     * To test the performance : With an audio track
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceWithAudioTrack() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String audioFilename1 = INPUT_FILE_PATH +
-            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
-        final String audioFilename2 = INPUT_FILE_PATH +
-            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int audioVolume = 50;
-        final String[] loggingInfo = new String[2];
-        int timeTaken = 0;
-
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "mediaItem1", videoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor,
-            "Audio Track1", audioFilename1);
-        audioTrack1.disableDucking();
-        audioTrack1.setVolume(audioVolume);
-        mVideoEditor.addAudioTrack(audioTrack1);
-
-        long beginTime = SystemClock.uptimeMillis();
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-        timeTaken = calculateTimeTaken(beginTime, 1);
-        loggingInfo[0] = "Time taken for 1st Audio Track (AACLC) :"
-            + timeTaken;
-
-        final AudioTrack audioTrack2 = new AudioTrack(mVideoEditor,
-            "Audio Track2", audioFilename2);
-        audioTrack2.enableLoop();
-
-        beginTime = SystemClock.uptimeMillis();
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-        timeTaken = calculateTimeTaken(beginTime, 1);
-        loggingInfo[1] = "\n\tTime taken for 2nd Audio Track(AMRNB) :"
-            + timeTaken;
-
-        writeTimingInfo("testPerformanceWithAudioTrack", loggingInfo);
-    }
-
-    /**
-     * To test the performance of adding and removing the
-     * image media item with 640 x 480
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testPerformanceAddRemoveImageItem640x480() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int imageItemDuration = 0;
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[3];
-
-        int timeTaken = 0;
-
-        final MediaImageItem[] mediaImageItem =
-            new MediaImageItem[NUM_OF_ITERATIONS];
-        long beginTime = SystemClock.uptimeMillis();
-        createImageItems(mediaImageItem, imageItemFileName, renderingMode,
-            imageItemDuration);
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[0] = "Time taken to Create  Media Image Item (640x480) :"
-            + timeTaken;
-
-        beginTime = SystemClock.uptimeMillis();
-        addImageItems(mediaImageItem);
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[1] = "\n\tTime taken to add  Media Image Item (640x480) :"
-            + timeTaken;
-
-        beginTime = SystemClock.uptimeMillis();
-        removeImageItems(mediaImageItem);
-        timeTaken = calculateTimeTaken(beginTime, NUM_OF_ITERATIONS);
-        loggingInfo[2] = "\n\tTime taken to remove  Media Image Item (640x480) :"
-            + timeTaken;
-        writeTimingInfo("testPerformanceAddRemoveImageItem640x480 (in mSec)", loggingInfo);
-    }
-
-
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java
deleted file mode 100644
index 7784c7b..0000000
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/VideoEditorStressTest.java
+++ /dev/null
@@ -1,1309 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.mediaframeworktest.stress;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.Writer;
-import java.util.List;
-
-import android.graphics.Bitmap;
-import android.graphics.Rect;
-import android.media.videoeditor.AudioTrack;
-import android.media.videoeditor.EffectColor;
-import android.media.videoeditor.EffectKenBurns;
-import android.media.videoeditor.MediaImageItem;
-import android.media.videoeditor.MediaItem;
-import android.media.videoeditor.MediaProperties;
-import android.media.videoeditor.MediaVideoItem;
-import android.media.videoeditor.OverlayFrame;
-import android.media.videoeditor.Transition;
-import android.media.videoeditor.TransitionCrossfade;
-import android.media.videoeditor.TransitionAlpha;
-import android.media.videoeditor.TransitionFadeBlack;
-import android.media.videoeditor.TransitionSliding;
-import android.media.videoeditor.VideoEditor;
-import android.os.Environment;
-import android.test.ActivityInstrumentationTestCase;
-import android.media.videoeditor.VideoEditor.MediaProcessingProgressListener;
-import android.os.Environment;
-import android.os.SystemClock;
-import android.test.ActivityInstrumentationTestCase;
-import android.media.videoeditor.VideoEditor.ExportProgressListener;
-import android.media.videoeditor.VideoEditorFactory;
-import android.media.videoeditor.ExtractAudioWaveformProgressListener;
-
-import android.os.Debug;
-import android.util.Log;
-import com.android.mediaframeworktest.MediaFrameworkPerfTestRunner;
-import com.android.mediaframeworktest.MediaFrameworkTest;
-import android.test.suitebuilder.annotation.LargeTest;
-import com.android.mediaframeworktest.VideoEditorHelper;
-import com.android.mediaframeworktest.MediaTestUtil;
-
-/**
- * Junit / Instrumentation - performance measurement for media player and
- * recorder
- */
-public class VideoEditorStressTest
-        extends ActivityInstrumentationTestCase<MediaFrameworkTest> {
-
-    private final String TAG = "VideoEditorStressTest";
-
-    private final String PROJECT_LOCATION = VideoEditorHelper.PROJECT_LOCATION_COMMON;
-
-    private final String INPUT_FILE_PATH = VideoEditorHelper.INPUT_FILE_PATH_COMMON;
-
-    private final String VIDEOEDITOR_OUTPUT = PROJECT_LOCATION +
-        "VideoEditorStressMemOutput.txt";
-
-    private long BeginJavaMemory;
-    private long AfterJavaMemory;
-
-    private long BeginNativeMemory;
-    private long AfterNativeMemory;
-
-    public VideoEditorStressTest() {
-        super("com.android.mediaframeworktest", MediaFrameworkTest.class);
-        new File(VIDEOEDITOR_OUTPUT).delete();
-    }
-
-    private final String PROJECT_CLASS_NAME =
-        "android.media.videoeditor.VideoEditorImpl";
-    private VideoEditor mVideoEditor;
-    private MediaTestUtil mMediaTestUtil;
-    private VideoEditorHelper mVideoEditorHelper;
-
-    @Override
-    protected void setUp() throws Exception {
-        // setup for each test case.
-        super.setUp();
-        getActivity();
-        mMediaTestUtil = new MediaTestUtil(
-            "/sdcard/VideoEditorMediaServerMemoryLog.txt",
-             this.getName(), "mediaserver");
-        mVideoEditorHelper = new VideoEditorHelper();
-        // Create a random String which will be used as project path, where all
-        // project related files will be stored.
-        final String projectPath =
-            mVideoEditorHelper.createRandomFile(PROJECT_LOCATION);
-        mVideoEditor = mVideoEditorHelper.createVideoEditor(projectPath);
-    }
-
-    @Override
-    protected void tearDown() throws Exception {
-        final String[] loggingInfo = new String[1];
-        mMediaTestUtil.getMemorySummary();
-        loggingInfo[0] = "\n" +this.getName();
-        writeTimingInfo(loggingInfo);
-        loggingInfo[0] = " diff :  " + (AfterNativeMemory - BeginNativeMemory);
-        writeTimingInfo(loggingInfo);
-        mVideoEditorHelper.destroyVideoEditor(mVideoEditor);
-        // Clean the directory created as project path
-        mVideoEditorHelper.deleteProject(new File(mVideoEditor.getPath()));
-        System.gc();
-        super.tearDown();
-    }
-
-    private void writeTimingInfo(String[] information)
-        throws Exception {
-        File outFile = new File(VIDEOEDITOR_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(outFile, true));
-        for (int i = 0; i < information.length; i++) {
-            output.write(information[i]);
-        }
-        output.close();
-    }
-
-    private void writeTestCaseHeader(String testCaseName)
-        throws Exception {
-        File outFile = new File(VIDEOEDITOR_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(outFile, true));
-        output.write("\n\n" + testCaseName + "\n");
-        output.close();
-    }
-
-    private void getBeginMemory() throws Exception {
-        System.gc();
-        Thread.sleep(2500);
-        BeginNativeMemory = Debug.getNativeHeapAllocatedSize();
-        mMediaTestUtil.getStartMemoryLog();
-    }
-    private void getAfterMemory_updateLog(String[] loggingInfo, boolean when,
-        int iteration)
-        throws Exception {
-        System.gc();
-        Thread.sleep(2500);
-        AfterNativeMemory = Debug.getNativeHeapAllocatedSize();
-        if(when == false){
-            loggingInfo[0] = "\n Before Remove: iteration No.= " + iteration +
-                "\t " + (AfterNativeMemory - BeginNativeMemory);
-        } else {
-            loggingInfo[0] = "\n After Remove: iteration No.= " + iteration +
-                "\t " + (AfterNativeMemory - BeginNativeMemory);
-        }
-        writeTimingInfo(loggingInfo);
-        mMediaTestUtil.getMemoryLog();
-    }
-
-    /**
-     * To stress test MediaItem(Video Item) adding functionality
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressAddRemoveVideoItem() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_176x144_15fps_144kbps_AMRNB_8kHz_12.2kbps_m_1_17.3gp";
-        final String videoItemFileName2 = INPUT_FILE_PATH +
-            "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_96kbps_s_0_21.mp4";
-        final String videoItemFileName3 = INPUT_FILE_PATH +
-            "H263_profile0_176x144_15fps_128kbps_1_35.3gp";
-        final String videoItemFileName4 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
-        final String[] loggingInfo = new String[1];
-        writeTestCaseHeader("testStressAddRemoveVideoItem");
-        int i = 0;
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-                    "m1" + i, videoItemFileName1, renderingMode);
-                mediaItem1.setExtractBoundaries(0, 5000);
-                mVideoEditor.addMediaItem(mediaItem1);
-            }
-            if (i % 4 == 1) {
-                final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor,
-                    "m2" + i, videoItemFileName2, renderingMode);
-                mediaItem2.setExtractBoundaries(0, 10000);
-                mVideoEditor.addMediaItem(mediaItem2);
-            }
-            if (i % 4 == 2) {
-                final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
-                    "m3" + i, videoItemFileName3, renderingMode);
-                mediaItem3.setExtractBoundaries(30000, 45000);
-                mVideoEditor.addMediaItem(mediaItem3);
-            }
-            if (i % 4 == 3) {
-                final MediaVideoItem mediaItem4 = new MediaVideoItem(mVideoEditor,
-                    "m4" + i, videoItemFileName4, renderingMode);
-                mediaItem4.setExtractBoundaries(10000, 30000);
-                mVideoEditor.addMediaItem(mediaItem4);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                mVideoEditor.removeMediaItem("m1" + i);
-            }
-            if (i % 4 == 1) {
-                mVideoEditor.removeMediaItem("m2" + i);
-            }
-            if (i % 4 == 2) {
-                mVideoEditor.removeMediaItem("m3" + i);
-            }
-            if (i % 4 == 3) {
-                mVideoEditor.removeMediaItem("m4" + i);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, true, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To stress test MediaItem(Image Item) adding functionality
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressAddRemoveImageItem() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String ImageItemFileName1 = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final String ImageItemFileName2 = INPUT_FILE_PATH +
-            "IMG_640x480.jpg";
-        final String ImageItemFileName3 = INPUT_FILE_PATH +
-            "IMG_320x240.jpg";
-        final String ImageItemFileName4 = INPUT_FILE_PATH +
-            "IMG_176x144.jpg";
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        writeTestCaseHeader("testStressAddRemoveImageItem");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                final MediaImageItem mediaItem1 = new MediaImageItem(mVideoEditor,
-                    "m1"+ i, ImageItemFileName1, 5000, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem1);
-            }
-            if (i % 4 == 1) {
-                final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-                    "m2"+ i, ImageItemFileName2, 10000, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem2);
-            }
-            if (i % 4 == 2) {
-                final MediaImageItem mediaItem3 = new MediaImageItem(mVideoEditor,
-                    "m3"+ i, ImageItemFileName3, 15000, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem3);
-            }
-            if (i % 4 == 3) {
-                final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor,
-                    "m4"+ i, ImageItemFileName4, 20000, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem4);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                mVideoEditor.removeMediaItem("m1"+i);
-            }
-            if (i % 4 == 1) {
-                mVideoEditor.removeMediaItem("m2"+i);
-            }
-            if (i % 4 == 2) {
-                mVideoEditor.removeMediaItem("m3"+i);
-            }
-            if (i % 4 == 3) {
-                mVideoEditor.removeMediaItem("m4"+i);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, true, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To stress test transition
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressAddRemoveTransition() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
-        final String ImageItemFileName2 = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final String VideoItemFileName3 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final String maskFilename = INPUT_FILE_PATH +
-            "TransitionSpiral_QVGA.jpg";
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        writeTestCaseHeader("testStressAddRemoveTransition");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-                    "m1"+i, VideoItemFileName1, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem1);
-                mediaItem1.setExtractBoundaries(0, 10000);
-                final TransitionCrossfade tranCrossfade =
-                    new TransitionCrossfade("transCF" + i, null,
-                        mediaItem1, 5000, Transition.BEHAVIOR_MIDDLE_FAST);
-                mVideoEditor.addTransition(tranCrossfade);
-            }
-            if (i % 4 == 1) {
-                final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-                    "m1"+i, VideoItemFileName1, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem1);
-                mediaItem1.setExtractBoundaries(0, 10000);
-
-                final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-                    "m2" +i, ImageItemFileName2, 10000, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem2);
-
-                final TransitionAlpha transitionAlpha =
-                    mVideoEditorHelper.createTAlpha("transAlpha" + i, mediaItem1,
-                        mediaItem2, 5000, Transition.BEHAVIOR_SPEED_UP,
-                        maskFilename, 10, false);
-                transitionAlpha.setDuration(4000);
-                mVideoEditor.addTransition(transitionAlpha);
-            }
-            if (i % 4 == 2) {
-                final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-                    "m2" + i, ImageItemFileName2, 10000, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem2);
-
-                final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
-                    "m3" + i, VideoItemFileName3, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem3);
-
-                mediaItem3.setExtractBoundaries(0, 10000);
-                final TransitionAlpha transitionAlpha =
-                    mVideoEditorHelper.createTAlpha("transAlpha" + i, mediaItem2,
-                        mediaItem3, 5000, Transition.BEHAVIOR_SPEED_UP,
-                        maskFilename, 10, false);
-                transitionAlpha.setDuration(4000);
-                mVideoEditor.addTransition(transitionAlpha);
-
-                mediaItem3.setExtractBoundaries(0, 6000);
-
-                final TransitionSliding transition2And3 =
-                    mVideoEditorHelper.createTSliding("transSlide" +i, mediaItem2,
-                        mediaItem3, 3000, Transition.BEHAVIOR_MIDDLE_FAST,
-                        TransitionSliding.DIRECTION_LEFT_OUT_RIGHT_IN);
-                mVideoEditor.addTransition(transition2And3);
-            }
-            if (i % 4 == 3) {
-                final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
-                    "m3" + i, VideoItemFileName3, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem3);
-                mediaItem3.setExtractBoundaries(0, 5000);
-
-                final TransitionFadeBlack transition3 =
-                    mVideoEditorHelper.createTFadeBlack("transFB" +i, mediaItem3,
-                        null, 2500, Transition.BEHAVIOR_SPEED_UP);
-                transition3.setDuration(500);
-                mVideoEditor.addTransition(transition3);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                mVideoEditor.removeTransition("transCF" + i);
-                mVideoEditor.removeMediaItem("m1" + i);
-            }
-            if (i % 4 == 1) {
-                mVideoEditor.removeTransition("transAlpha" + i);
-                mVideoEditor.removeMediaItem("m1" + i);
-                mVideoEditor.removeMediaItem("m2" + i);
-            }
-            if (i % 4 == 2) {
-                mVideoEditor.removeTransition("transSlide" +i);
-                mVideoEditor.removeMediaItem("m2" + i);
-                mVideoEditor.removeMediaItem("m3" + i);
-            }
-            if (i % 4 == 3) {
-                mVideoEditor.removeMediaItem("m3" + i);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, true, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To stress test overlay
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressAddRemoveOverlay() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final String ImageItemFileName2 = INPUT_FILE_PATH +
-            "IMG_640x480.jpg";
-        final String OverlayFile3 = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-        final String OverlayFile4 = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay2.png";
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-            "m1", VideoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem1);
-
-        final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-            "m2", ImageItemFileName2, 10000, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem2);
-        writeTestCaseHeader("testStressAddRemoveOverlay");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 3 == 0) {
-                mediaItem1.setExtractBoundaries(0, 10000);
-                final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(
-                    OverlayFile3, 640, 480);
-                final OverlayFrame overlayFrame =
-                    mVideoEditorHelper.createOverlay(mediaItem1, "overlay" + i,
-                        mBitmap, 1000, 5000);
-                mediaItem1.addOverlay(overlayFrame);
-                mediaItem1.removeOverlay("overlay"+i);
-            }
-            if (i % 3 == 1) {
-                final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(
-                    OverlayFile4, 640, 480);
-                final OverlayFrame overlayFrame =
-                    mVideoEditorHelper.createOverlay(mediaItem2, "overlay" + i,
-                        mBitmap, 1000, 5000);
-                mediaItem2.addOverlay(overlayFrame);
-                mediaItem2.removeOverlay("overlay"+i);
-            }
-            if (i % 3 == 2) {
-                mediaItem1.setExtractBoundaries(0, 10000);
-                final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(
-                    OverlayFile4, 640, 480);
-                final OverlayFrame overlayFrame =
-                    mVideoEditorHelper.createOverlay(mediaItem1, "overlay" + i,
-                        mBitmap, 0, mediaItem1.getDuration());
-                mediaItem1.addOverlay(overlayFrame);
-                mediaItem1.removeOverlay("overlay"+i);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-    }
-
-    /**
-     * To stress test Effects
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressAddRemoveEffects() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
-        final String ImageItemFileName2 = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final String[] loggingInfo = new String[1];
-        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-            "m1", VideoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem1);
-        final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-            "m2", ImageItemFileName2, 10000, renderingMode);
-        int i = 0;
-        mVideoEditor.addMediaItem(mediaItem2);
-        writeTestCaseHeader("testStressAddRemoveEffects");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 5 == 0) {
-                mediaItem1.setExtractBoundaries(10000, 30000);
-                final EffectColor effectColor1 =
-                    mVideoEditorHelper.createEffectItem(mediaItem1, "effect1"+i,
-                        10000, (mediaItem1.getTimelineDuration()-1000),
-                        EffectColor.TYPE_COLOR, EffectColor.GREEN);
-                mediaItem1.addEffect(effectColor1);
-            }
-            if (i % 5 == 1) {
-                mediaItem2.setDuration(20000);
-                final EffectColor effectColor1 =
-                    mVideoEditorHelper.createEffectItem(mediaItem2, "effect1"+i,
-                        0, 4000, EffectColor.TYPE_GRADIENT, EffectColor.GRAY);
-                mediaItem2.addEffect(effectColor1);
-            }
-            if (i % 5 == 2) {
-                mediaItem1.setExtractBoundaries(10000, 30000);
-                final EffectColor effectColor1 =
-                    mVideoEditorHelper.createEffectItem(mediaItem1, "effect1"+i,
-                        (mediaItem1.getTimelineDuration() - 4000), 4000,
-                        EffectColor.TYPE_SEPIA, 0);
-                mediaItem1.addEffect(effectColor1);
-            }
-            if (i % 5 == 3) {
-                mediaItem2.setDuration(20000);
-                final EffectColor effectColor1 =
-                    mVideoEditorHelper.createEffectItem(mediaItem2, "effect1"+i,
-                        10000, 4000, EffectColor.TYPE_NEGATIVE, 0);
-                mediaItem2.addEffect(effectColor1);
-            }
-            if (i % 5 == 4) {
-                mediaItem2.setDuration(20000);
-                final Rect startRect = new Rect((mediaItem2.getHeight() / 3),
-                    (mediaItem2.getWidth() / 3), (mediaItem2.getHeight() / 2),
-                    (mediaItem2.getWidth() / 2));
-                final Rect endRect = new Rect(0, 0, mediaItem2.getWidth(),
-                    mediaItem2.getHeight());
-                final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns(
-                    mediaItem2, "KBOnM2" + i, startRect, endRect, 500,
-                    (mediaItem2.getDuration() - 500));
-                mediaItem2.addEffect(kbEffectOnMediaItem);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        for ( i = 0; i < 50; i++) {
-            if (i % 5 == 0) {
-                mediaItem1.removeEffect("effect1"+i);
-            }
-            if (i % 5 == 1) {
-                mediaItem1.removeEffect("effect1"+i);
-            }
-            if (i % 5 == 2) {
-                mediaItem1.removeEffect("effect1"+i);
-            }
-            if (i % 5 == 3) {
-                mediaItem1.removeEffect("effect1"+i);
-            }
-            if (i % 5 == 4) {
-                mediaItem1.removeEffect("KBOnM2"+i);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, true, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * This method will test thumbnail list extraction in a loop = 200 for Video
-     * Item
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressThumbnailVideoItem() throws Exception {
-        final String videoItemFileName = INPUT_FILE_PATH
-                + "H264_BP_640x480_15fps_1200Kbps_AACLC_48KHz_64kps_m_0_27.3gp";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "m1", videoItemFileName, renderingMode);
-        writeTestCaseHeader("testStressThumbnailVideoItem");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                final Bitmap[] thumbNails =
-                    mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth()*3,
-                        mediaVideoItem.getHeight()/2, i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 4 == 1) {
-                final Bitmap[] thumbNails =
-                    mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth()/2,
-                        mediaVideoItem.getHeight() * 3, i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 4 == 2) {
-                final Bitmap[] thumbNails =
-                    mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth()*2,
-                        mediaVideoItem.getHeight() / 3, i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 4 == 3) {
-                final Bitmap[] thumbNails =
-                    mediaVideoItem.getThumbnailList(mediaVideoItem.getWidth(),
-                        mediaVideoItem.getHeight(), i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-    }
-
-    /**
-     * To stress test media properties
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressMediaProperties() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String ImageItemFileName2 = INPUT_FILE_PATH +
-            "IMG_640x480.jpg";
-        final String AudioItemFileName3 = INPUT_FILE_PATH +
-            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        final int videoAspectRatio = MediaProperties.ASPECT_RATIO_3_2;
-        final int videoFileType = MediaProperties.FILE_MP4;
-        final int videoCodecType = MediaProperties.VCODEC_H264;
-        final int videoDuration = 77366;
-        final int videoProfile = MediaProperties.H264Profile.H264ProfileBaseline;
-        final int videoLevel = MediaProperties.H264Level.H264Level13;
-        final int videoHeight = MediaProperties.HEIGHT_720;
-        final int videoWidth = 1080;
-
-        final int imageAspectRatio = MediaProperties.ASPECT_RATIO_4_3;
-        final int imageFileType = MediaProperties.FILE_JPEG;
-        final int imageWidth = 640;
-        final int imageHeight = MediaProperties.HEIGHT_480;
-
-        final int audioDuration = 77554;
-        final int audioCodecType = MediaProperties.ACODEC_AAC_LC;
-        final int audioSamplingFrequency = 44100;
-        final int audioChannel = 2;
-        writeTestCaseHeader("testStressMediaProperties");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 3 == 0) {
-                final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-                    "m1" + i, VideoItemFileName1, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem1);
-                mediaItem1.setExtractBoundaries(0, 20000);
-                assertEquals("Aspect Ratio Mismatch",
-                    videoAspectRatio, mediaItem1.getAspectRatio());
-                assertEquals("File Type Mismatch",
-                    videoFileType, mediaItem1.getFileType());
-                assertEquals("VideoCodec Mismatch",
-                    videoCodecType, mediaItem1.getVideoType());
-                assertEquals("duration Mismatch",
-                    videoDuration, mediaItem1.getDuration());
-                assertEquals("Video Profile ",
-                    videoProfile, mediaItem1.getVideoProfile());
-                assertEquals("Video Level ",
-                    videoLevel, mediaItem1.getVideoLevel());
-                assertEquals("Video height ",
-                    videoHeight, mediaItem1.getHeight());
-                assertEquals("Video width ",
-                    videoWidth, mediaItem1.getWidth());
-                mVideoEditor.removeMediaItem("m1" + i);
-            }
-            if (i % 3 == 1) {
-                final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-                    "m2" + i, ImageItemFileName2, 10000, renderingMode);
-                mVideoEditor.addMediaItem(mediaItem2);
-                assertEquals("Aspect Ratio Mismatch",
-                    imageAspectRatio, mediaItem2.getAspectRatio());
-                assertEquals("File Type Mismatch",
-                    imageFileType, mediaItem2.getFileType());
-                assertEquals("Image height",
-                    imageHeight, mediaItem2.getHeight());
-                assertEquals("Image width",
-                    imageWidth, mediaItem2.getWidth());
-                mVideoEditor.removeMediaItem("m2" + i);
-            }
-            if (i % 3 == 2) {
-                final AudioTrack mediaItem3 = new AudioTrack(mVideoEditor,
-                    "m3" + i, AudioItemFileName3);
-                mVideoEditor.addAudioTrack(mediaItem3);
-                assertEquals("AudioType Mismatch", audioCodecType,
-                    mediaItem3.getAudioType());
-                assertEquals("Audio Sampling", audioSamplingFrequency,
-                    mediaItem3.getAudioSamplingFrequency());
-                assertEquals("Audio Channels",
-                    audioChannel, mediaItem3.getAudioChannels());
-                assertEquals("duration Mismatch", audioDuration,
-                    mediaItem3.getDuration());
-                mVideoEditor.removeAudioTrack("m3" + i);
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-    }
-
-    /**
-     * To stress test insert and move of mediaitems
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressInsertMovieItems() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String VideoItemFileName2 = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
-        final String VideoItemFileName3 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        writeTestCaseHeader("testStressInsertMovieItems");
-
-        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-            "m1", VideoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem1);
-        mediaItem1.setExtractBoundaries(0, 10000);
-
-        final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor,
-            "m2", VideoItemFileName2, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem2);
-        mediaItem2.setExtractBoundaries(0, 15000);
-
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
-                "m3" + i, VideoItemFileName3, renderingMode);
-            mediaItem3.setExtractBoundaries(0, 15000);
-            mVideoEditor.insertMediaItem(mediaItem3, "m1");
-            mVideoEditor.moveMediaItem("m2", "m3" + i);
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        for ( i = 0; i < 50; i++) {
-            mVideoEditor.removeMediaItem("m3" + i);
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, true, i);
-            }
-        }
-        mVideoEditor.removeMediaItem("m2");
-        mVideoEditor.removeMediaItem("m1");
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To stress test : load and save
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressLoadAndSave() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String VideoItemFileName2 = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
-        final String VideoItemFileName3 = INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_1200kbps_AACLC_48khz_64kbps_m_1_17.3gp";
-        final String ImageItemFileName4 = INPUT_FILE_PATH +
-            "IMG_640x480.jpg";
-        final String ImageItemFileName5 = INPUT_FILE_PATH +
-            "IMG_176x144.jpg";
-        final String OverlayFile6 = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        final String[] projectPath = new String[10];
-        writeTestCaseHeader("testStressLoadAndSave");
-        getBeginMemory();
-        for( i=0; i < 10; i++){
-
-            projectPath[i] =
-                mVideoEditorHelper.createRandomFile(PROJECT_LOCATION);
-            final VideoEditor mVideoEditor1 =
-                mVideoEditorHelper.createVideoEditor(projectPath[i]);
-
-            final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor1,
-                "m1", VideoItemFileName1, renderingMode);
-            mVideoEditor1.addMediaItem(mediaItem1);
-            mediaItem1.setExtractBoundaries(0, 10000);
-
-            final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor1,
-                "m2", VideoItemFileName2, renderingMode);
-            mVideoEditor1.addMediaItem(mediaItem2);
-            mediaItem2.setExtractBoundaries(mediaItem2.getDuration()/4,
-                mediaItem2.getDuration()/2);
-
-            final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor1,
-                "m3", VideoItemFileName3, renderingMode);
-            mVideoEditor1.addMediaItem(mediaItem3);
-            mediaItem3.setExtractBoundaries(mediaItem3.getDuration()/2,
-                mediaItem3.getDuration());
-
-            final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor1,
-                "m4", ImageItemFileName4, 5000, renderingMode);
-            mVideoEditor1.addMediaItem(mediaItem4);
-
-            final MediaImageItem mediaItem5 = new MediaImageItem(mVideoEditor1,
-                "m5", ImageItemFileName5, 5000, renderingMode);
-            mVideoEditor1.addMediaItem(mediaItem5);
-
-            final EffectColor effectColor1 =
-                mVideoEditorHelper.createEffectItem(mediaItem3, "effect1",
-                    10000, 2000, EffectColor.TYPE_COLOR, EffectColor.GREEN);
-            mediaItem3.addEffect(effectColor1);
-
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(OverlayFile6,
-                640, 480);
-            final OverlayFrame overlayFrame =
-                mVideoEditorHelper.createOverlay(mediaItem4, "overlay",
-                    mBitmap, 4000, 1000);
-            mediaItem4.addOverlay(overlayFrame);
-
-            final TransitionCrossfade tranCrossfade =
-                new TransitionCrossfade("transCF", mediaItem1,
-                    mediaItem2, 5000, Transition.BEHAVIOR_MIDDLE_FAST);
-            mVideoEditor1.addTransition(tranCrossfade);
-
-            final EffectColor effectColor2 =
-                mVideoEditorHelper.createEffectItem(mediaItem4, "effect2", 0,
-                    mediaItem4.getDuration(), EffectColor.TYPE_COLOR,
-                    EffectColor.PINK);
-            mediaItem4.addEffect(effectColor2);
-
-            mVideoEditor1.generatePreview(new MediaProcessingProgressListener() {
-                public void onProgress(Object item, int action, int progress) {
-                }
-            });
-
-            mVideoEditor1.save();
-            mVideoEditor1.release();
-
-            getAfterMemory_updateLog(loggingInfo, false, i);
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        for( i=0; i<10; i++){
-            final VideoEditor mVideoEditor1b =
-                VideoEditorFactory.load(projectPath[i], true);
-            List<MediaItem> mediaList = mVideoEditor1b.getAllMediaItems();
-            assertEquals("Media Item List Size", 5, mediaList.size());
-
-            mediaList.get(3).removeEffect("effect1");
-            mediaList.get(3).removeEffect("effect2");
-            mediaList.get(2).removeOverlay("overlay");
-            mVideoEditor1b.removeTransition("transCF");
-            mVideoEditor1b.removeMediaItem("m5");
-            mVideoEditor1b.removeMediaItem("m4");
-            mVideoEditor1b.removeMediaItem("m3");
-            mVideoEditor1b.removeMediaItem("m2");
-            mVideoEditor1b.removeMediaItem("m1");
-            mVideoEditor1b.release();
-            getAfterMemory_updateLog(loggingInfo, true, i);
-        }
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To stress test : Multiple Export
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressMultipleExport() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String VideoItemFileName2 = INPUT_FILE_PATH +
-            "H264_BP_800x480_15fps_512kbps_1_17.mp4";
-        final String[] loggingInfo = new String[1];
-        final String outFilename = mVideoEditorHelper.createRandomFile(
-            mVideoEditor.getPath() + "/") + ".3gp";
-        int i = 0;
-        writeTestCaseHeader("testStressMultipleExport");
-        getBeginMemory();
-        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-            "m1", VideoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem1);
-        mediaItem1.setExtractBoundaries(0, 10000);
-
-        final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor,
-            "m2", VideoItemFileName2, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem2);
-        mediaItem2.setExtractBoundaries(0, 15000);
-
-        for ( i = 0; i < 50; i++) {
-            if(i%4 ==0){
-                final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9;
-                mVideoEditor.setAspectRatio(aspectRatio);
-                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_288,
-                    MediaProperties.BITRATE_256K,MediaProperties.ACODEC_AAC_LC,
-                        MediaProperties.VCODEC_H263,
-                        new ExportProgressListener() {
-                        public void onProgress(VideoEditor ve, String outFileName,
-                            int progress) {
-                        }
-                    });
-            }
-            if(i%4 ==1){
-                final int aspectRatio = MediaProperties.ASPECT_RATIO_5_3;
-                mVideoEditor.setAspectRatio(aspectRatio);
-                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
-                    MediaProperties.BITRATE_384K,MediaProperties.ACODEC_AAC_LC,
-                        MediaProperties.VCODEC_MPEG4,
-                        new ExportProgressListener() {
-                        public void onProgress(VideoEditor ve, String outFileName,
-                            int progress) {
-                        }
-                    });
-            }
-            if(i%4 ==2){
-                final int aspectRatio = MediaProperties.ASPECT_RATIO_11_9;
-                mVideoEditor.setAspectRatio(aspectRatio);
-                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_144,
-                    MediaProperties.BITRATE_512K,MediaProperties.ACODEC_AAC_LC,
-                        MediaProperties.VCODEC_H264,
-                        new ExportProgressListener() {
-                        public void onProgress(VideoEditor ve, String outFileName,
-                            int progress) {
-                        }
-                    });
-            }
-            if(i%4 ==3){
-                final int aspectRatio = MediaProperties.ASPECT_RATIO_3_2;
-                mVideoEditor.setAspectRatio(aspectRatio);
-                mVideoEditor.export(outFilename, MediaProperties.HEIGHT_480,
-                    MediaProperties.BITRATE_800K,MediaProperties.ACODEC_AAC_LC,
-                        MediaProperties.VCODEC_H264,
-                        new ExportProgressListener() {
-                        public void onProgress(VideoEditor ve, String outFileName,
-                            int progress) {
-                        }
-                    });
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        mVideoEditor.removeMediaItem("m2");
-        mVideoEditor.removeMediaItem("m1");
-
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To stress test Media Item,Overlays,Transitions and Ken Burn
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressOverlayTransKenBurn() throws Exception {
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String VideoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_640x480_30fps_256kbps_1_17.mp4";
-        final String ImageItemFileName2 = INPUT_FILE_PATH +
-            "IMG_640x480.jpg";
-        final String OverlayFile3 = INPUT_FILE_PATH +
-            "IMG_640x480_Overlay1.png";
-        final String audioFilename4 = INPUT_FILE_PATH +
-            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
-        int i = 0;
-        final String[] loggingInfo = new String[1];
-        writeTestCaseHeader("testStressOverlayTransKenBurn");
-        getBeginMemory();
-        for ( i = 0; i < 10; i++) {
-            final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-                "m1" + i, VideoItemFileName1, renderingMode);
-            mVideoEditor.addMediaItem(mediaItem1);
-            mediaItem1.setExtractBoundaries(0, 10000);
-
-            final MediaImageItem mediaItem2 = new MediaImageItem(mVideoEditor,
-                "m2" + i, ImageItemFileName2, 10000, renderingMode);
-            mVideoEditor.addMediaItem(mediaItem2);
-
-            final EffectColor effectColor1 =
-                mVideoEditorHelper.createEffectItem(mediaItem1, "effect1"+i,
-                    (mediaItem1.getDuration() - 4000), 4000,
-                    EffectColor.TYPE_SEPIA, 0);
-            mediaItem1.addEffect(effectColor1);
-
-            final TransitionCrossfade tranCrossfade =
-                new TransitionCrossfade("transCF" + i, mediaItem1,
-                    mediaItem2, 4000, Transition.BEHAVIOR_MIDDLE_FAST);
-            mVideoEditor.addTransition(tranCrossfade);
-
-            final Bitmap mBitmap =  mVideoEditorHelper.getBitmap(OverlayFile3,
-                640, 480);
-            final OverlayFrame overlayFrame =
-                mVideoEditorHelper.createOverlay(mediaItem1, "overlay" + i,
-                    mBitmap, 1000, 5000);
-            mediaItem1.addOverlay(overlayFrame);
-
-            final Rect startRect = new Rect((mediaItem2.getHeight() / 3),
-                (mediaItem2.getWidth() / 3), (mediaItem2.getHeight() / 2),
-                (mediaItem2.getWidth() / 2));
-            final Rect endRect = new Rect(0, 0, mediaItem2.getWidth(),
-                mediaItem2.getHeight());
-
-            final EffectKenBurns kbEffectOnMediaItem = new EffectKenBurns(
-                mediaItem2, "KBOnM2" + i, startRect, endRect, 500,
-                (mediaItem2.getDuration()-500));
-            mediaItem2.addEffect(kbEffectOnMediaItem);
-
-            if(i == 5) {
-                final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor,
-                    "Audio Track1", audioFilename4);
-                mVideoEditor.addAudioTrack(audioTrack1);
-            }
-            getAfterMemory_updateLog(loggingInfo, false, i);
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        for ( i = 0; i < 10; i++) {
-            MediaImageItem m2 = (MediaImageItem)mVideoEditor.getMediaItem("m2"+i);
-            MediaVideoItem m1 = (MediaVideoItem)mVideoEditor.getMediaItem("m1"+i);
-            m2.removeEffect("KBOnM2" + i);
-            m1.removeOverlay("overlay" + i);
-            mVideoEditor.removeTransition("transCF" + i);
-            m1.removeEffect("effect1" + i);
-            mVideoEditor.removeMediaItem("m2" + i);
-            mVideoEditor.removeMediaItem("m1" + i);
-            if(i == 5) {
-                mVideoEditor.removeAudioTrack("Audio Track1");
-            }
-            getAfterMemory_updateLog(loggingInfo, true, i);
-        }
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To test the performance : With an audio track with Video
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressAudioTrackVideo() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "H264_BP_1080x720_30fps_800kbps_1_17.mp4";
-        final String audioFilename1 = INPUT_FILE_PATH +
-            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
-        final String audioFilename2 = INPUT_FILE_PATH +
-            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int audioVolume = 50;
-        final String[] loggingInfo = new String[1];
-        int i = 1;
-        writeTestCaseHeader("testStressAudioTrackVideo");
-        getBeginMemory();
-        final MediaVideoItem mediaVideoItem = new MediaVideoItem(mVideoEditor,
-            "mediaItem1", videoItemFileName1, renderingMode);
-        mVideoEditor.addMediaItem(mediaVideoItem);
-
-        final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor,
-            "Audio Track1", audioFilename1);
-        audioTrack1.disableDucking();
-        audioTrack1.setVolume(audioVolume);
-        mVideoEditor.addAudioTrack(audioTrack1);
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-
-        mVideoEditor.removeAudioTrack("Audio Track1");
-
-        final AudioTrack audioTrack2 = new AudioTrack(mVideoEditor,
-            "Audio Track2", audioFilename2);
-        audioTrack2.enableLoop();
-
-        mVideoEditor.generatePreview(new MediaProcessingProgressListener() {
-            public void onProgress(Object item, int action, int progress) {
-            }
-        });
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        mVideoEditor.removeMediaItem("mediaItem1");
-
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-    /**
-     * To Test Stress : Story Board creation with out preview or export
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressStoryBoard() throws Exception {
-        final String videoItemFileName1 = INPUT_FILE_PATH +
-            "MPEG4_SP_720x480_30fps_280kbps_AACLC_48kHz_161kbps_s_0_26.mp4";
-        final String videoItemFileName2 = INPUT_FILE_PATH +
-            "MPEG4_SP_854x480_15fps_256kbps_AACLC_16khz_48kbps_s_0_26.mp4";
-        final String videoItemFileName3= INPUT_FILE_PATH +
-            "MPEG4_SP_640x480_15fps_512kbps_AACLC_48khz_132kbps_s_0_26.mp4";
-        final String imageItemFileName4 = INPUT_FILE_PATH +
-            "IMG_1600x1200.jpg";
-        final String imageItemFileName5 = INPUT_FILE_PATH +
-            "IMG_176x144.jpg";
-        final String audioFilename6 = INPUT_FILE_PATH +
-            "AMRNB_8KHz_12.2Kbps_m_1_17.3gp";
-        final String audioFilename7 = INPUT_FILE_PATH +
-            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
-
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final int audioVolume = 50;
-        final String[] loggingInfo = new String[1];
-        int i = 1;
-
-        writeTestCaseHeader("testStressStoryBoard");
-        getBeginMemory();
-        final MediaVideoItem mediaItem1 = new MediaVideoItem(mVideoEditor,
-            "m1", videoItemFileName1, renderingMode);
-        mediaItem1.setExtractBoundaries(0, 10000);
-        mVideoEditor.addMediaItem(mediaItem1);
-
-        final MediaVideoItem mediaItem2 = new MediaVideoItem(mVideoEditor,
-            "m2", videoItemFileName2, renderingMode);
-        mediaItem2.setExtractBoundaries(mediaItem2.getDuration()/4,
-            mediaItem2.getDuration()/2);
-        mVideoEditor.addMediaItem(mediaItem2);
-
-        final MediaVideoItem mediaItem3 = new MediaVideoItem(mVideoEditor,
-            "m3", videoItemFileName3, renderingMode);
-        mediaItem3.setExtractBoundaries(mediaItem3.getDuration()/2,
-            mediaItem3.getDuration());
-        mVideoEditor.addMediaItem(mediaItem3);
-
-        final MediaImageItem mediaItem4 = new MediaImageItem(mVideoEditor,
-            "m4", imageItemFileName4, 5000, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem4);
-
-        final MediaImageItem mediaItem5 = new MediaImageItem(mVideoEditor,
-            "m5", imageItemFileName5, 5000, renderingMode);
-        mVideoEditor.addMediaItem(mediaItem5);
-
-        final TransitionCrossfade tranCrossfade =
-            new TransitionCrossfade("transCF", mediaItem2, mediaItem3, 2500,
-                Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(tranCrossfade);
-
-        final TransitionCrossfade tranCrossfade1 =
-            new TransitionCrossfade("transCF1", mediaItem3, mediaItem4, 2500,
-                Transition.BEHAVIOR_MIDDLE_FAST);
-        mVideoEditor.addTransition(tranCrossfade1);
-
-        final AudioTrack audioTrack1 = new AudioTrack(mVideoEditor,
-            "Audio Track1", audioFilename6);
-        mVideoEditor.addAudioTrack(audioTrack1);
-
-        mVideoEditor.removeAudioTrack("Audio Track1");
-        final AudioTrack audioTrack2 = new AudioTrack(mVideoEditor,
-            "Audio Track2", audioFilename7);
-        mVideoEditor.addAudioTrack(audioTrack2);
-        audioTrack2.enableLoop();
-        getAfterMemory_updateLog(loggingInfo, false, i);
-
-        /** Remove items and check for memory leak if any */
-        getBeginMemory();
-        mVideoEditor.removeAudioTrack("Audio Track2");
-        mVideoEditor.removeTransition("transCF");
-        mVideoEditor.removeTransition("transCF1");
-        mVideoEditor.removeMediaItem("m5");
-        mVideoEditor.removeMediaItem("m4");
-        mVideoEditor.removeMediaItem("m3");
-        mVideoEditor.removeMediaItem("m2");
-        mVideoEditor.removeMediaItem("m1");
-
-        getAfterMemory_updateLog(loggingInfo, true, i);
-    }
-
-     /**
-     * To test the performance : With an audio track Only
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressAudioTrackOnly() throws Exception {
-
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String AudioItemFileName1 = INPUT_FILE_PATH +
-            "AACLC_44.1kHz_256kbps_s_1_17.mp4";
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        writeTestCaseHeader("testStressAudioTrackOnly");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            final AudioTrack mediaItem1 = new AudioTrack(mVideoEditor,
-                "m1" + i, AudioItemFileName1);
-            mVideoEditor.addAudioTrack(mediaItem1);
-            mediaItem1.enableLoop();
-            mVideoEditor.removeAudioTrack("m1" + i);
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-    }
-
-    /**
-     * This method will test thumbnail list extraction in a loop = 200 for Image
-     * Item
-     *
-     * @throws Exception
-     */
-    @LargeTest
-    public void testStressThumbnailImageItem() throws Exception {
-        final String imageItemFileName = INPUT_FILE_PATH + "IMG_640x480.jpg";
-        final int renderingMode = MediaItem.RENDERING_MODE_BLACK_BORDER;
-        final String[] loggingInfo = new String[1];
-        int i = 0;
-        final MediaImageItem mediaImageItem = new MediaImageItem(mVideoEditor,
-            "m1", imageItemFileName, 5000, renderingMode);
-        writeTestCaseHeader("testStressThumbnailImageItem");
-        getBeginMemory();
-        for ( i = 0; i < 50; i++) {
-            if (i % 4 == 0) {
-                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
-                    mediaImageItem.getWidth() / 2 ,
-                    mediaImageItem.getHeight() / 2, i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 4 == 1) {
-                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
-                    mediaImageItem.getWidth() / 2,
-                    mediaImageItem.getHeight() * 3, i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 4 == 2) {
-                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
-                    mediaImageItem.getWidth() * 2,
-                    mediaImageItem.getHeight() / 3, i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 4 == 3) {
-                final Bitmap[] thumbNails = mediaImageItem.getThumbnailList(
-                    mediaImageItem.getWidth(),
-                    mediaImageItem.getHeight(), i, 5000, 2);
-                // Recycle this Bitmap array
-                for (int i1 = 0; i1 < thumbNails.length; i1++) {
-                    thumbNails[i1].recycle();
-                }
-            }
-            if (i % 10 == 0) {
-                getAfterMemory_updateLog(loggingInfo, false, i);
-            }
-        }
-        getAfterMemory_updateLog(loggingInfo, false, i);
-    }
-}
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraMetadataTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraMetadataTest.java
index 3f17aa9..45df065 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraMetadataTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/CameraMetadataTest.java
@@ -552,29 +552,72 @@
         };
         int availableFormatTag = CameraMetadataNative.getTag("android.scaler.availableFormats");
 
-        // Write
-        mMetadata.set(CameraCharacteristics.SCALER_AVAILABLE_FORMATS, availableFormats);
+        Key<int[]> formatKey = CameraCharacteristics.SCALER_AVAILABLE_FORMATS;
 
-        byte[] availableFormatValues = mMetadata.readValues(availableFormatTag);
+        validateArrayMetadataReadWriteOverride(formatKey, availableFormats,
+                expectedIntValues, availableFormatTag);
 
-        ByteBuffer bf = ByteBuffer.wrap(availableFormatValues).order(ByteOrder.nativeOrder());
+        //
+        // android.scaler.availableStreamConfigurations (int x n x 4 array)
+        //
+        final int OUTPUT = CameraCharacteristics.SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT;
+        int[] availableStreamConfigs = new int[] {
+                0x20, 3280, 2464, OUTPUT, // RAW16
+                0x23, 3264, 2448, OUTPUT, // YCbCr_420_888
+                0x23, 3200, 2400, OUTPUT, // YCbCr_420_888
+                0x100, 3264, 2448, OUTPUT, // ImageFormat.JPEG
+                0x100, 3200, 2400, OUTPUT, // ImageFormat.JPEG
+                0x100, 2592, 1944, OUTPUT, // ImageFormat.JPEG
+                0x100, 2048, 1536, OUTPUT, // ImageFormat.JPEG
+                0x100, 1920, 1080, OUTPUT  // ImageFormat.JPEG
+        };
+        int[] expectedAvailableStreamConfigs = new int[] {
+                0x20, 3280, 2464, OUTPUT, // RAW16
+                0x23, 3264, 2448, OUTPUT, // YCbCr_420_888
+                0x23, 3200, 2400, OUTPUT, // YCbCr_420_888
+                0x21, 3264, 2448, OUTPUT, // BLOB
+                0x21, 3200, 2400, OUTPUT, // BLOB
+                0x21, 2592, 1944, OUTPUT, // BLOB
+                0x21, 2048, 1536, OUTPUT, // BLOB
+                0x21, 1920, 1080, OUTPUT  // BLOB
+        };
+        int availableStreamConfigTag =
+                CameraMetadataNative.getTag("android.scaler.availableStreamConfigurations");
 
-        assertEquals(expectedIntValues.length * 4, availableFormatValues.length);
-        for (int i = 0; i < expectedIntValues.length; ++i) {
-            assertEquals(expectedIntValues[i], bf.getInt());
-        }
-        // Read
-        byte[] availableFormatsAsByteArray = new byte[expectedIntValues.length * 4];
-        ByteBuffer availableFormatsByteBuffer =
-                ByteBuffer.wrap(availableFormatsAsByteArray).order(ByteOrder.nativeOrder());
-        for (int value : expectedIntValues) {
-            availableFormatsByteBuffer.putInt(value);
-        }
-        mMetadata.writeValues(availableFormatTag, availableFormatsAsByteArray);
+        Key<int[]> configKey = CameraCharacteristics.SCALER_AVAILABLE_STREAM_CONFIGURATIONS;
+        validateArrayMetadataReadWriteOverride(configKey, availableStreamConfigs,
+                expectedAvailableStreamConfigs, availableStreamConfigTag);
 
-        int[] resultFormats = mMetadata.get(CameraCharacteristics.SCALER_AVAILABLE_FORMATS);
-        assertNotNull("result available formats shouldn't be null", resultFormats);
-        assertArrayEquals(availableFormats, resultFormats);
+        //
+        // android.scaler.availableMinFrameDurations (int x n x 4 array)
+
+        //
+        long[] availableMinDurations = new long[] {
+                0x20, 3280, 2464, 33333336, // RAW16
+                0x23, 3264, 2448, 33333336, // YCbCr_420_888
+                0x23, 3200, 2400, 33333336, // YCbCr_420_888
+                0x100, 3264, 2448, 33333336, // ImageFormat.JPEG
+                0x100, 3200, 2400, 33333336, // ImageFormat.JPEG
+                0x100, 2592, 1944, 33333336, // ImageFormat.JPEG
+                0x100, 2048, 1536, 33333336, // ImageFormat.JPEG
+                0x100, 1920, 1080, 33333336  // ImageFormat.JPEG
+        };
+        long[] expectedAvailableMinDurations = new long[] {
+                0x20, 3280, 2464, 33333336, // RAW16
+                0x23, 3264, 2448, 33333336, // YCbCr_420_888
+                0x23, 3200, 2400, 33333336, // YCbCr_420_888
+                0x21, 3264, 2448, 33333336, // BLOB
+                0x21, 3200, 2400, 33333336, // BLOB
+                0x21, 2592, 1944, 33333336, // BLOB
+                0x21, 2048, 1536, 33333336, // BLOB
+                0x21, 1920, 1080, 33333336  // BLOB
+        };
+        int availableMinDurationsTag =
+                CameraMetadataNative.getTag("android.scaler.availableMinFrameDurations");
+
+        Key<long[]> durationKey = CameraCharacteristics.SCALER_AVAILABLE_MIN_FRAME_DURATIONS;
+        validateArrayMetadataReadWriteOverride(durationKey, availableMinDurations,
+                expectedAvailableMinDurations, availableMinDurationsTag);
 
         //
         // android.statistics.faces (Face x n array)
@@ -639,4 +682,59 @@
         }
 
     }
+
+    /**
+     * Validate metadata array tag read/write override.
+     *
+     * <p>Only support long and int array for now, can be easily extend to support other
+     * primitive arrays.</p>
+     */
+    private <T> void validateArrayMetadataReadWriteOverride(Key<T> key, T writeValues,
+            T readValues, int tag) {
+        Class<T> type = key.getType();
+        if (!type.isArray()) {
+            throw new IllegalArgumentException("This function expects an key with array type");
+        } else if (type != int[].class && type != long[].class) {
+            throw new IllegalArgumentException("This function expects long or int array values");
+        }
+
+        // Write
+        mMetadata.set(key, writeValues);
+
+        byte[] readOutValues = mMetadata.readValues(tag);
+
+        ByteBuffer bf = ByteBuffer.wrap(readOutValues).order(ByteOrder.nativeOrder());
+
+        int readValuesLength = Array.getLength(readValues);
+        int readValuesNumBytes = readValuesLength * 4;
+        if (type == long[].class) {
+            readValuesNumBytes = readValuesLength * 8;
+        }
+
+        assertEquals(readValuesNumBytes, readOutValues.length);
+        for (int i = 0; i < readValuesLength; ++i) {
+            if (type == int[].class) {
+                assertEquals(Array.getInt(readValues, i), bf.getInt());
+            } else if (type == long[].class) {
+                assertEquals(Array.getLong(readValues, i), bf.getLong());
+            }
+        }
+
+        // Read
+        byte[] readOutValuesAsByteArray = new byte[readValuesNumBytes];
+        ByteBuffer readOutValuesByteBuffer =
+                ByteBuffer.wrap(readOutValuesAsByteArray).order(ByteOrder.nativeOrder());
+        for (int i = 0; i < readValuesLength; ++i) {
+            if (type == int[].class) {
+                readOutValuesByteBuffer.putInt(Array.getInt(readValues, i));
+            } else if (type == long[].class) {
+                readOutValuesByteBuffer.putLong(Array.getLong(readValues, i));
+            }
+        }
+        mMetadata.writeValues(tag, readOutValuesAsByteArray);
+
+        T result = mMetadata.get(key);
+        assertNotNull(key.getName() + " result shouldn't be null", result);
+        assertArrayEquals(writeValues, result);
+    }
 }
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
index 8c76421..eb1a589 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/unit/MediaInserterTest.java
@@ -85,8 +85,8 @@
         super.setUp();
         mMockProvider = EasyMock.createMock(IContentProvider.class);
         mMediaInserter = new MediaInserter(mMockProvider,
-		mPackageName, TEST_BUFFER_SIZE);
-	mPackageName = getInstrumentation().getContext().getPackageName();
+        mPackageName, TEST_BUFFER_SIZE);
+        mPackageName = getInstrumentation().getContext().getPackageName();
         mFilesCounter = 0;
         mAudioCounter = 0;
         mVideoCounter = 0;
@@ -224,19 +224,19 @@
     @SmallTest
     public void testInsertContentsWithDifferentSizePerContentType() throws Exception {
         EasyMock.expect(mMockProvider.bulkInsert(mPackageName,
-		MediaUriMatcher.expectMediaUri(sFilesUri),
+        MediaUriMatcher.expectMediaUri(sFilesUri),
                 (ContentValues[]) EasyMock.anyObject())).andReturn(1);
         EasyMock.expectLastCall().times(1);
         EasyMock.expect(mMockProvider.bulkInsert(mPackageName,
-		MediaUriMatcher.expectMediaUri(sAudioUri),
+        MediaUriMatcher.expectMediaUri(sAudioUri),
                 (ContentValues[]) EasyMock.anyObject())).andReturn(1);
         EasyMock.expectLastCall().times(2);
         EasyMock.expect(mMockProvider.bulkInsert(mPackageName,
-		MediaUriMatcher.expectMediaUri(sVideoUri),
+        MediaUriMatcher.expectMediaUri(sVideoUri),
                 (ContentValues[]) EasyMock.anyObject())).andReturn(1);
         EasyMock.expectLastCall().times(3);
         EasyMock.expect(mMockProvider.bulkInsert(mPackageName,
-		MediaUriMatcher.expectMediaUri(sImagesUri),
+        MediaUriMatcher.expectMediaUri(sImagesUri),
                 (ContentValues[]) EasyMock.anyObject())).andReturn(1);
         EasyMock.expectLastCall().times(4);
         EasyMock.replay(mMockProvider);
diff --git a/media/tests/omxjpegdecoder/Android.mk b/media/tests/omxjpegdecoder/Android.mk
index ad874c8..b0bc5d4 100644
--- a/media/tests/omxjpegdecoder/Android.mk
+++ b/media/tests/omxjpegdecoder/Android.mk
@@ -19,7 +19,6 @@
 LOCAL_SRC_FILES := \
         omx_jpeg_decoder.cpp \
         jpeg_decoder_bench.cpp \
-        SkOmxPixelRef.cpp \
         StreamSource.cpp
 
 LOCAL_SHARED_LIBRARIES := \
@@ -34,11 +33,6 @@
 
 LOCAL_C_INCLUDES := \
     $(TOP)/external/jpeg \
-    $(TOP)/external/skia/include/config \
-    $(TOP)/external/skia/include/core \
-    $(TOP)/external/skia/include/images \
-    $(TOP)/external/skia/include/utils \
-    $(TOP)/external/skia/include/effects \
     $(TOP)/frameworks/base/media/libstagefright \
     $(TOP)/frameworks/base/include/ \
     $(TOP)/frameworks/base/ \
diff --git a/media/tests/omxjpegdecoder/SkOmxPixelRef.cpp b/media/tests/omxjpegdecoder/SkOmxPixelRef.cpp
deleted file mode 100644
index a25e854..0000000
--- a/media/tests/omxjpegdecoder/SkOmxPixelRef.cpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-#include <media/stagefright/foundation/ADebug.h>
-#include <SkBitmap.h>
-
-#include "SkOmxPixelRef.h"
-
-using namespace android;
-
-SkOmxPixelRef::SkOmxPixelRef(SkColorTable* ctable, MediaBuffer* buffer,
-        sp<MediaSource> decoder)  {
-    mBuffer = buffer;
-    mDecoder = decoder;
-    mSize = buffer->size();
-    mCTable = ctable;
-    SkSafeRef(mCTable);
-}
-
-SkOmxPixelRef::~SkOmxPixelRef() {
-    mBuffer->release();
-    CHECK_EQ(mDecoder->stop(), (status_t)OK);
-    SkSafeUnref(mCTable);
-}
-
-void* SkOmxPixelRef::onLockPixels(SkColorTable** ct) {
-    *ct = mCTable;
-    return mBuffer->data();
-}
-
-void SkOmxPixelRef::onUnlockPixels() {
-    // nothing to do
-}
diff --git a/media/tests/omxjpegdecoder/SkOmxPixelRef.h b/media/tests/omxjpegdecoder/SkOmxPixelRef.h
deleted file mode 100644
index 374604c..0000000
--- a/media/tests/omxjpegdecoder/SkOmxPixelRef.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Copyright (C) 2009 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.
- */
-
-#ifndef SKOMXPIXELREF_DEFINED
-#define SKOMXPIXELREF_DEFINED
-
-#include <media/stagefright/MediaBuffer.h>
-#include <media/stagefright/OMXClient.h>
-#include <media/stagefright/OMXCodec.h>
-#include <SkPixelRef.h>
-
-namespace android {
-
-class SkOmxPixelRef : public SkPixelRef {
-public:
-    SkOmxPixelRef(SkColorTable* ctable, MediaBuffer* buffer,
-            sp<MediaSource> decoder);
-    virtual ~SkOmxPixelRef();
-
-     //! Return the allocation size for the pixels
-    size_t getSize() const { return mSize; }
-
-    SK_DECLARE_UNFLATTENABLE_OBJECT()
-protected:
-    // overrides from SkPixelRef
-    virtual void* onLockPixels(SkColorTable**);
-    virtual void onUnlockPixels();
-
-private:
-    MediaBuffer* mBuffer;
-    sp<MediaSource> mDecoder;
-    size_t          mSize;
-    SkColorTable*   mCTable;
-
-    typedef SkPixelRef INHERITED;
-};
-
-} // namespace android
-#endif // SKOMXPIXELREF_DEFINED
diff --git a/media/tests/omxjpegdecoder/StreamSource.h b/media/tests/omxjpegdecoder/StreamSource.h
index 6c34cbd..9807385 100644
--- a/media/tests/omxjpegdecoder/StreamSource.h
+++ b/media/tests/omxjpegdecoder/StreamSource.h
@@ -20,7 +20,7 @@
 
 #include <stdio.h>
 
-#include <core/SkStream.h>
+#include <SkStream.h>
 #include <media/stagefright/DataSource.h>
 #include <media/stagefright/MediaErrors.h>
 #include <utils/threads.h>
diff --git a/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp b/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp
index 53f04bc..3dd988e 100644
--- a/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp
+++ b/media/tests/omxjpegdecoder/omx_jpeg_decoder.cpp
@@ -34,7 +34,6 @@
 #include <SkMallocPixelRef.h>
 
 #include "omx_jpeg_decoder.h"
-#include "SkOmxPixelRef.h"
 #include "StreamSource.h"
 
 using namespace android;
@@ -158,10 +157,6 @@
     printf("Duration in decoder->read(): %.1f (msecs). \n",
                 duration / 1E3 );
 
-    /* Mark the code for now, since we attend to copy buffer to SkBitmap.
-    // Install pixelRef to Bitmap.
-    installPixelRef(buffer, decoder, bm);*/
-
     // Copy pixels from buffer to bm.
     // May need to check buffer->rawBytes() == bm->rawBytes().
     CHECK_EQ(buffer->size(), bm->getSize());
@@ -172,17 +167,6 @@
     return true;
 }
 
-void OmxJpegImageDecoder::installPixelRef(MediaBuffer *buffer, sp<MediaSource> decoder,
-        SkBitmap* bm) {
-
-    // set bm's pixelref based on the data in buffer.
-    SkAutoLockPixels alp(*bm);
-    SkPixelRef* pr = new SkOmxPixelRef(NULL, buffer, decoder);
-    bm->setPixelRef(pr)->unref();
-    bm->lockPixels();
-    return;
-}
-
 void OmxJpegImageDecoder::configBitmapSize(SkBitmap* bm, SkBitmap::Config pref,
         int width, int height) {
     bm->setConfig(getColorSpaceConfig(pref), width, height, 0, kOpaque_SkAlphaType);
diff --git a/media/tests/omxjpegdecoder/omx_jpeg_decoder.h b/media/tests/omxjpegdecoder/omx_jpeg_decoder.h
index a313877..e431e72 100644
--- a/media/tests/omxjpegdecoder/omx_jpeg_decoder.h
+++ b/media/tests/omxjpegdecoder/omx_jpeg_decoder.h
@@ -49,8 +49,6 @@
     sp<MediaSource> getDecoder(OMXClient* client, const sp<MediaSource>& source);
     bool decodeSource(sp<MediaSource> decoder, const sp<MediaSource>& source,
             SkBitmap* bm);
-    void installPixelRef(MediaBuffer* buffer, sp<MediaSource> decoder,
-            SkBitmap* bm);
     void configBitmapSize(SkBitmap* bm, SkBitmap::Config pref, int width,
             int height);
     SkBitmap::Config getColorSpaceConfig(SkBitmap::Config pref);
diff --git a/media/tests/players/invoke_mock_media_player.cpp b/media/tests/players/invoke_mock_media_player.cpp
index a94fedb..d1fed7bb 100644
--- a/media/tests/players/invoke_mock_media_player.cpp
+++ b/media/tests/players/invoke_mock_media_player.cpp
@@ -27,6 +27,7 @@
 using android::INVALID_OPERATION;
 using android::Surface;
 using android::IGraphicBufferProducer;
+using android::IMediaHTTPService;
 using android::MediaPlayerBase;
 using android::OK;
 using android::Parcel;
@@ -57,6 +58,7 @@
     virtual bool        hardwareOutput() {return true;}
 
     virtual status_t    setDataSource(
+            const sp<IMediaHTTPService> &httpService,
             const char *url,
             const KeyedVector<String8, String8> *) {
         ALOGV("setDataSource %s", url);
diff --git a/native/android/sensor.cpp b/native/android/sensor.cpp
index fb4de9e..acfcd83 100644
--- a/native/android/sensor.cpp
+++ b/native/android/sensor.cpp
@@ -123,10 +123,13 @@
 ssize_t ASensorEventQueue_getEvents(ASensorEventQueue* queue,
                 ASensorEvent* events, size_t count)
 {
-    return static_cast<SensorEventQueue*>(queue)->read(events, count);
+    ssize_t actual = static_cast<SensorEventQueue*>(queue)->read(events, count);
+    if (actual > 0) {
+        static_cast<SensorEventQueue*>(queue)->sendAck(events, actual);
+    }
+    return actual;
 }
 
-
 /*****************************************************************************/
 
 const char* ASensor_getName(ASensor const* sensor)
diff --git a/native/graphics/jni/Android.mk b/native/graphics/jni/Android.mk
index 8b333e7..3154030 100644
--- a/native/graphics/jni/Android.mk
+++ b/native/graphics/jni/Android.mk
@@ -23,7 +23,6 @@
     libskia
 
 LOCAL_C_INCLUDES += \
-	external/skia/include/core \
 	frameworks/base/native/include \
 	frameworks/base/core/jni/android/graphics
 
diff --git a/opengl/java/android/opengl/EGLObjectHandle.java b/opengl/java/android/opengl/EGLObjectHandle.java
index e6e3976..f961eb7 100644
--- a/opengl/java/android/opengl/EGLObjectHandle.java
+++ b/opengl/java/android/opengl/EGLObjectHandle.java
@@ -24,18 +24,28 @@
 public abstract class EGLObjectHandle {
     private final long mHandle;
 
-    // TODO Deprecate EGLObjectHandle(int) method
+    /**
+     * @deprecated Use {@link #EGLObjectHandle(long)} instead. Handles
+     *     on 64 bit platforms will be wider than java ints.
+     */
+    @Deprecated
     protected EGLObjectHandle(int handle) {
         mHandle = handle;
     }
-    // TODO Unhide the EGLObjectHandle(long) method
-    /**
-     * {@hide}
-     */
     protected EGLObjectHandle(long handle) {
         mHandle = handle;
     }
-    // TODO Deprecate getHandle() method in favor of getNativeHandle()
+    /**
+     * @deprecated Use {@link #getNativeHandle()} instead. Handles on
+     *     64 bit platforms will be wider than java ints.
+     */
+    @Deprecated
+    public int getHandle() {
+        if ((mHandle & 0xffffffffL) != mHandle) {
+            throw new UnsupportedOperationException();
+        }
+        return (int)mHandle;
+    }
     /**
      * Returns the native handle of the wrapped EGL object. This handle can be
      * cast to the corresponding native type on the native side.
@@ -44,17 +54,6 @@
      *
      * @return the native handle of the wrapped EGL object.
      */
-    public int getHandle() {
-        if ((mHandle & 0xffffffffL) != mHandle) {
-            throw new UnsupportedOperationException();
-        }
-        return (int)mHandle;
-    }
-
-    // TODO Unhide getNativeHandle() method
-    /**
-     * {@hide}
-     */
     public long getNativeHandle() {
         return mHandle;
     }
diff --git a/opengl/java/android/opengl/GLES10.java b/opengl/java/android/opengl/GLES10.java
index db52b82..fed84d5 100644
--- a/opengl/java/android/opengl/GLES10.java
+++ b/opengl/java/android/opengl/GLES10.java
@@ -262,7 +262,7 @@
 
     native private static void _nativeClassInit();
     static {
-	    _nativeClassInit();
+        _nativeClassInit();
     }
 
     private static Buffer _colorPointer;
diff --git a/opengl/java/android/opengl/GLES10Ext.java b/opengl/java/android/opengl/GLES10Ext.java
index 81fc59e..3dc26eb 100644
--- a/opengl/java/android/opengl/GLES10Ext.java
+++ b/opengl/java/android/opengl/GLES10Ext.java
@@ -22,7 +22,7 @@
 public class GLES10Ext {
     native private static void _nativeClassInit();
     static {
-	    _nativeClassInit();
+        _nativeClassInit();
     }
     
     // C function GLbitfield glQueryMatrixxOES ( GLfixed *mantissa, GLint *exponent )
diff --git a/opengl/java/android/opengl/GLES11.java b/opengl/java/android/opengl/GLES11.java
index 1ca179b..bb69bba 100644
--- a/opengl/java/android/opengl/GLES11.java
+++ b/opengl/java/android/opengl/GLES11.java
@@ -147,7 +147,7 @@
 
     native private static void _nativeClassInit();
     static {
-	    _nativeClassInit();
+        _nativeClassInit();
     }
 
     private static Buffer _pointSizePointerOES;
diff --git a/opengl/java/android/opengl/GLES11Ext.java b/opengl/java/android/opengl/GLES11Ext.java
index 484439a..04d1b5d 100644
--- a/opengl/java/android/opengl/GLES11Ext.java
+++ b/opengl/java/android/opengl/GLES11Ext.java
@@ -132,7 +132,7 @@
 
     native private static void _nativeClassInit();
     static {
-	    _nativeClassInit();
+        _nativeClassInit();
     }
     
     private static final int GL_BYTE = GLES10.GL_BYTE;
diff --git a/opengl/java/android/opengl/GLES20.java b/opengl/java/android/opengl/GLES20.java
index 8261474..137f2f5 100644
--- a/opengl/java/android/opengl/GLES20.java
+++ b/opengl/java/android/opengl/GLES20.java
@@ -823,6 +823,7 @@
 
     // C function void glGetActiveAttrib ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name )
 
+    /** @hide Method is broken, but used to be public (b/6006380) */
     public static native void glGetActiveAttrib(
         int program,
         int index,
@@ -870,6 +871,7 @@
 
     // C function void glGetActiveUniform ( GLuint program, GLuint index, GLsizei bufsize, GLsizei *length, GLint *size, GLenum *type, char *name )
 
+    /** @hide Method is broken, but used to be public (b/6006380) */
     public static native void glGetActiveUniform(
         int program,
         int index,
@@ -1107,6 +1109,7 @@
 
     // C function void glGetShaderSource ( GLuint shader, GLsizei bufsize, GLsizei *length, char *source )
 
+    /** @hide Method is broken, but used to be public (b/6006380) */
     public static native void glGetShaderSource(
         int shader,
         int bufsize,
diff --git a/opengl/java/android/opengl/GLES30.java b/opengl/java/android/opengl/GLES30.java
index 9164849..342ffa4 100644
--- a/opengl/java/android/opengl/GLES30.java
+++ b/opengl/java/android/opengl/GLES30.java
@@ -864,13 +864,13 @@
         int buffer
     );
 
-	// C function void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode )
+    // C function void glTransformFeedbackVaryings ( GLuint program, GLsizei count, const GLchar *varyings, GLenum bufferMode )
 
-	public static native void glTransformFeedbackVaryings(
+    public static native void glTransformFeedbackVaryings(
         int program,
         String[] varyings,
         int bufferMode
-	);
+    );
 
     // C function void glGetTransformFeedbackVarying ( GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name )
 
@@ -1245,14 +1245,14 @@
         int size
     );
 
-	// C function void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices )
+    // C function void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices )
 
-	public static native void glGetUniformIndices(
+    public static native void glGetUniformIndices(
         int program,
         String[] uniformNames,
         int[] uniformIndices,
         int uniformIndicesOffset
-	);
+    );
 
     // C function void glGetUniformIndices ( GLuint program, GLsizei uniformCount, const GLchar *const *uniformNames, GLuint *uniformIndices )
 
diff --git a/opengl/java/android/opengl/GLSurfaceView.java b/opengl/java/android/opengl/GLSurfaceView.java
index 4c024ae..1406f6b 100644
--- a/opengl/java/android/opengl/GLSurfaceView.java
+++ b/opengl/java/android/opengl/GLSurfaceView.java
@@ -595,13 +595,9 @@
         mDetached = false;
     }
 
-    /**
-     * This method is used as part of the View class and is not normally
-     * called or subclassed by clients of GLSurfaceView.
-     * Must not be called before a renderer has been set.
-     */
+    /** @hide */
     @Override
-    protected void onDetachedFromWindow() {
+    protected void onDetachedFromWindowInternal() {
         if (LOG_ATTACH_DETACH) {
             Log.d(TAG, "onDetachedFromWindow");
         }
@@ -609,7 +605,7 @@
             mGLThread.requestExitAndWait();
         }
         mDetached = true;
-        super.onDetachedFromWindow();
+        super.onDetachedFromWindowInternal();
     }
 
     // ----------------------------------------------------------------------
diff --git a/opengl/java/com/google/android/gles_jni/GLImpl.java b/opengl/java/com/google/android/gles_jni/GLImpl.java
index 6b23be9..d4c0c80 100644
--- a/opengl/java/com/google/android/gles_jni/GLImpl.java
+++ b/opengl/java/com/google/android/gles_jni/GLImpl.java
@@ -39,7 +39,7 @@
 
     native private static void _nativeClassInit();
     static {
-	_nativeClassInit();
+        _nativeClassInit();
     }
 
     Buffer _colorPointer = null;
diff --git a/packages/BackupRestoreConfirmation/AndroidManifest.xml b/packages/BackupRestoreConfirmation/AndroidManifest.xml
index 4fb26ae..8141fa7 100644
--- a/packages/BackupRestoreConfirmation/AndroidManifest.xml
+++ b/packages/BackupRestoreConfirmation/AndroidManifest.xml
@@ -1,20 +1,21 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-** Copyright 2011, 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.
+/*
+ * Copyright (c) 2014 Google Inc.
+ *
+ * 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.
+ */
 -->
-
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.backupconfirm" >
 
diff --git a/packages/BackupRestoreConfirmation/res/values-az-rAZ/strings.xml b/packages/BackupRestoreConfirmation/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..1f9e6aa
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-az-rAZ/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"Tam yedəkləmə"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"Tam bərpa"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Bütün datanın qoşulmuş masaüstü kompüterə rezerv olunması sorğusu göndərilib. Buna icazə vermək istəyirsiniz mi?\n\nƏgər bu sorğunu göndərməmisinizsə, bu prosesin davam etməsinə icazə verməyin."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"Məlumatlarımı yedəklə"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"Rezerv etməyin"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Qoşulmuş stolüstü kompüterdən tam bərpa tələb olunur. Buna icazə verilsin?\n\nBərpanı siz özünüz tələb etməmisinizsə, bu əməliyyatı davam etdirməyin. Bu cihazdakı istənilən məlumatı dəyişdirəcək."</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"Məlumatlarımı bərpa et"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"Bərpa etməyin"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Lütfən, aşağıda cari yedək parolunuzu daxil edin:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Lütfən, aşağıda cihaz şifrələmə parolunu daxil edin."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Lütfən, aşağıda cihaz şifrələmə parolunuzu daxil edin. Bu yedək arxivini şifrələmək üçün də istifadə olunacaq."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Tam yedək data şifrələmədən istifadə üçün şifrə daxil edin. Əgər boş buraxılsa, cari yedək şifrə istifadə olunacaq:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Bütün yedək datanı şifrələmək istəyirsinizsə, aşağıda parol daxil edin:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"Bərpa məlumatları şifrələnibsə, şifrəni aşağıda daxil edin:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Rezerv edilir ..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Yedəkləmə sona çatdı"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"Bərpa başlayır..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"Bərpa sona çatdı"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"Əməliyyat vaxtı bitdi"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-az/strings.xml b/packages/BackupRestoreConfirmation/res/values-az/strings.xml
new file mode 100644
index 0000000..1f9e6aa
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-az/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"Tam yedəkləmə"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"Tam bərpa"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Bütün datanın qoşulmuş masaüstü kompüterə rezerv olunması sorğusu göndərilib. Buna icazə vermək istəyirsiniz mi?\n\nƏgər bu sorğunu göndərməmisinizsə, bu prosesin davam etməsinə icazə verməyin."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"Məlumatlarımı yedəklə"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"Rezerv etməyin"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Qoşulmuş stolüstü kompüterdən tam bərpa tələb olunur. Buna icazə verilsin?\n\nBərpanı siz özünüz tələb etməmisinizsə, bu əməliyyatı davam etdirməyin. Bu cihazdakı istənilən məlumatı dəyişdirəcək."</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"Məlumatlarımı bərpa et"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"Bərpa etməyin"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Lütfən, aşağıda cari yedək parolunuzu daxil edin:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Lütfən, aşağıda cihaz şifrələmə parolunu daxil edin."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Lütfən, aşağıda cihaz şifrələmə parolunuzu daxil edin. Bu yedək arxivini şifrələmək üçün də istifadə olunacaq."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Tam yedək data şifrələmədən istifadə üçün şifrə daxil edin. Əgər boş buraxılsa, cari yedək şifrə istifadə olunacaq:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Bütün yedək datanı şifrələmək istəyirsinizsə, aşağıda parol daxil edin:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"Bərpa məlumatları şifrələnibsə, şifrəni aşağıda daxil edin:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Rezerv edilir ..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Yedəkləmə sona çatdı"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"Bərpa başlayır..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"Bərpa sona çatdı"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"Əməliyyat vaxtı bitdi"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-be/strings.xml b/packages/BackupRestoreConfirmation/res/values-be/strings.xml
deleted file mode 100644
index 188041a..0000000
--- a/packages/BackupRestoreConfirmation/res/values-be/strings.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2011 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="backup_confirm_title" msgid="827563724209303345">"Поўнае рэзервовае капіяванне"</string>
-    <string name="restore_confirm_title" msgid="5469365809567486602">"Поўнае аднаўленне"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"Было прапанавана поўнае рэзервовае капіяванне ўсіх дадзеных на падлучаным настольным кампутары. Дазволіць гэта?\n\nКалі вы самі не запытвалі рэзервовае капiяванне, спынiце аперацыю."</string>
-    <string name="allow_backup_button_label" msgid="4217228747769644068">"Рэзервовае капіяванне дадзеных"</string>
-    <string name="deny_backup_button_label" msgid="6009119115581097708">"Не ствараць рэзервовыя копіі"</string>
-    <string name="restore_confirm_text" msgid="7499866728030461776">"Запытана поўнае аднаўленне ўсіх дадзеных з падлучанага настольнага кампутара. Дазволіць гэта?\n\nКалі вы самі не запытвалі аднаўленне, не дазваляйце працягваць аперацыю. Гэта прывядзе да замены якіх-небудзь дадзеных, якія зараз знаходзяцца на прыладзе."</string>
-    <string name="allow_restore_button_label" msgid="3081286752277127827">"Аднавіць мае дадзеныя"</string>
-    <string name="deny_restore_button_label" msgid="1724367334453104378">"Не аднаўляць"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"Увядзіце ваш бягучы пароль рэзервовага капіявання ніжэй:"</string>
-    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Увядзіце нiжэй пароль для расшыфравання прылады."</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Увядзіце пароль для расшыфравання прылады. Ён таксама будзе выкарыстоўвацца для расшыфравання рэзервовай копіі."</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"Увядзіце пароль, які выкарыстоўваецца для шыфравання ўсіх дадзеных рэзервовага капіявання. Калі гэтае поле пакінуць пустым, будзе выкарыстоўвацца бягучы пароль рэзервовага капіявання:"</string>
-    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Калі вы жадаеце зашыфраваць усе дадзеныя рэзервовага капіявання, увядзіце пароль ніжэй:"</string>
-    <string name="restore_enc_password_text" msgid="6140898525580710823">"Калі дадзеныя для аднаўлення зашыфраваныя, увядзіце пароль ніжэй:"</string>
-    <string name="toast_backup_started" msgid="550354281452756121">"Рэзервовае капіяванне..."</string>
-    <string name="toast_backup_ended" msgid="3818080769548726424">"Рэзервовае капіяванне скончылася"</string>
-    <string name="toast_restore_started" msgid="7881679218971277385">"Пачынаецца аднаўленне..."</string>
-    <string name="toast_restore_ended" msgid="1764041639199696132">"Аднаўленне скончылася"</string>
-    <string name="toast_timeout" msgid="5276598587087626877">"Тайм-аўт аперацыі"</string>
-</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-en-rIN/strings.xml b/packages/BackupRestoreConfirmation/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..d096d98
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-en-rIN/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"Full backup"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"Full restoration"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"A full backup of all data to a connected desktop computer has been requested. Do you want to allow this to happen?\n\nIf you did not request the backup yourself, do not allow the operation to proceed."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"Back up my data"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"Do not back up"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"A full restore of all data from a connected desktop computer has been requested. Do you want to allow this to happen?\n\nIf you did not request the restore yourself, do not allow the operation to proceed. This will replace any data currently on the device!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"Restore my data"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"Do not restore"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Please enter your current backup password below:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Please enter your device encryption password below."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Please enter your device encryption password below. This will also be used to encrypt the backup archive."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Please enter a password to use for encrypting the full backup data. If this is left blank, your current backup password will be used:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"If you wish to encrypt the full backup data, enter a password below:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"If the restore data is encrypted, please enter the password below:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Backup starting..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Backup finished"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"Restoration starting..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"Restoration ended"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"Operation timed out"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-et/strings.xml b/packages/BackupRestoreConfirmation/res/values-et-rEE/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-et/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-et-rEE/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-fr-rCA/strings.xml b/packages/BackupRestoreConfirmation/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..8a70fb5
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-fr-rCA/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"Sauvegarde complète"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"Restauration complète"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Vous avez demandé une sauvegarde complète de l\'ensemble des données vers un ordinateur de bureau connecté. Voulez-vous l\'autoriser?\n\nSi vous n\'avez pas demandé la sauvegarde vous-même, n\'autorisez pas la poursuite de l\'opération."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"Sauvegarder mes données"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"Ne pas sauvegarder"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Vous avez demandé une restauration complète de l\'ensemble des données à partir d\'un ordinateur de bureau connecté. Voulez-vous l\'autoriser?\n\nSi vous n\'avez pas demandé vous-même la restauration, n\'autorisez pas sa poursuite. Cette opération remplacera toutes les données actuellement sur l\'appareil!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"Restaurer mes données"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"Ne pas restaurer"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Veuillez saisir votre mot de passe de sauvegarde actuel ci-dessous :"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Veuillez saisir le mot de passe de chiffrement de l\'appareil ci-dessous."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Veuillez saisir le mot de passe de chiffrement de l\'appareil ci-dessous. Il permettra également de chiffrer les archives de sauvegarde."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Veuillez saisir un mot de passe à utiliser pour chiffrer les données de sauvegarde complète. Si ce champ n\'est pas renseigné, votre mot de passe de sauvegarde actuel sera utilisé :"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Si vous souhaitez chiffrer l\'ensemble des données de sauvegarde, veuillez saisir un mot de passe ci-dessous :"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"Si les données de restauration sont chiffrées, veuillez saisir le mot de passe ci-dessous :"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Démarrage de la sauvegarde…"</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Sauvegarde terminée."</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"Démarrage de la restauration…"</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"Restauration terminée."</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"L\'opération a expiré."</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-hi/strings.xml b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
index dd0c645..0b29804 100644
--- a/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-hi/strings.xml
@@ -16,22 +16,22 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="backup_confirm_title" msgid="827563724209303345">"पूर्ण बैकअप"</string>
+    <string name="backup_confirm_title" msgid="827563724209303345">"पूर्ण सुरक्षा"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"पूर्ण पुनर्स्‍थापना"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"कनेक्‍ट कि‍ए गए डेस्‍कटॉप कंप्‍यूटर से सभी डेटा के संपूर्ण बैकअप का अनुरोध कि‍या गया है. क्‍या आप इसकी अनुमति‍ देना चाहते हैं?\n\nयदि‍ आपने स्‍वयं बैकअप का अनुरोध नहीं कि‍या है, तो प्रक्रि‍या जारी रखने की अनुमति‍ न दें."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"कनेक्‍ट कि‍ए गए डेस्‍कटॉप कंप्‍यूटर से सभी डेटा के संपूर्ण सुरक्षा का अनुरोध कि‍या गया है. क्‍या आप इसकी अनुमति‍ देना चाहते हैं?\n\nयदि‍ आपने स्‍वयं बैकअप का अनुरोध नहीं कि‍या है, तो प्रक्रि‍या जारी रखने की अनुमति‍ न दें."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"मेरे डेटा का बैकअप लें"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"बैकअप न लें"</string>
     <string name="restore_confirm_text" msgid="7499866728030461776">"कनेक्‍ट कि‍ए गए डेस्‍कटॉप कंप्‍यूटर से सभी डेटा की पूर्ण पुनर्स्थापना का अनुरोध कि‍या गया है. क्‍या आप इसकी अनुमति‍ देना चाहते हैं?\n\nयदि‍ आपने स्‍वयं पुनर्प्राप्ति‍ का अनुरोध नहीं कि‍या है, तो प्रक्रि‍या जारी रखने की अनुमति‍ न दें. इससे वर्तमान में आपके उपकरण पर मौजूद डेटा बदल जाएगा!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"मेरा डेटा पुनर्स्थापित करें"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"पुनर्स्‍थापित न करें"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"कृपया नीचे अपना वर्तमान बैकअप पासवर्ड डालें:"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"कृपया नीचे अपना वर्तमान सुरक्षित करने का पासवर्ड डालें:"</string>
     <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया नीचे अपना उपकरण एन्‍क्रिप्शन पासवर्ड डालें."</string>
-    <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया अपना उपकरण एन्क्रिप्शन पासवर्ड नीचे दर्ज करें. बैकअप संग्रहण को एन्‍क्रिप्‍ट करने के लिए भी इसका उपयोग किया जाएगा."</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया संपूर्ण बैकअप डेटा को एन्‍क्रि‍प्‍ट करने में उपयोग के लि‍ए पासवर्ड डालें. यदि‍ यह खाली छोड़ दि‍या जाता है, तो आपके वर्तमान बैकअप पासवर्ड का उपयोग कि‍या जाएगा:"</string>
-    <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि‍ आप संपूर्ण बैकअप डेटा एन्‍क्रि‍प्‍ट करना चाहते हैं, तो नीचे पासवर्ड डालें:"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया अपना उपकरण सुरक्षित तरीका पासवर्ड नीचे दर्ज करें. बैकअप संग्रहण को एन्‍क्रिप्‍ट करने के लिए भी इसका उपयोग किया जाएगा."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"कृपया संपूर्ण सुरक्षित डेटा को एन्‍क्रि‍प्‍ट करने में उपयोग के लि‍ए पासवर्ड डालें. यदि‍ यह खाली छोड़ दि‍या जाता है, तो आपके वर्तमान बैकअप पासवर्ड का उपयोग कि‍या जाएगा:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि‍ आप संपूर्ण सुरक्षित डेटा को एन्‍क्रि‍प्‍ट करना चाहते हैं, तो नीचे पासवर्ड डालें:"</string>
     <string name="restore_enc_password_text" msgid="6140898525580710823">"यदि‍ पुनर्स्थापित डेटा को एन्‍क्रि‍प्‍ट कि‍या गया है, तो कृपया नीचे पासवर्ड डालें:"</string>
-    <string name="toast_backup_started" msgid="550354281452756121">"बैकअप प्रारंभ हो रहा है..."</string>
-    <string name="toast_backup_ended" msgid="3818080769548726424">"बैकअप पूर्ण"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"सुरक्षित करना शुरु हो रहा है..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"सुरक्षित करना पूर्ण"</string>
     <string name="toast_restore_started" msgid="7881679218971277385">"पुनर्स्‍थापना प्रारंभ हो रही है..."</string>
     <string name="toast_restore_ended" msgid="1764041639199696132">"पुनर्स्‍थापना समाप्त"</string>
     <string name="toast_timeout" msgid="5276598587087626877">"कार्यवाही समयबाह्य हो गई"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-hy-rAM/strings.xml b/packages/BackupRestoreConfirmation/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..4db9080
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-hy-rAM/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"Ամբողջական պահուստավորում"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"Ամբողջական վերականգնում"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Կապակցված աշխատասեղանով համակարգչի վրա բոլոր տվյալների լրիվ պահուստավորման հարցում է արվել: Ցանկանու՞մ եք թույլատրել հարցման կատարումը:\n\nԵթե դուք ինքներդ պահուստավորման հարցում չեք արել, թույլ մի տվեք, որպեսզի գործողությունը շարունակվի:"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"Պահուստավորել իմ տվյալները"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"Չպահուստավորել"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Հայցվել է բոլոր տվյալների ամբողջական վերականգնում միացված աշխատանքային համակարգչից: Ցանկանու՞մ եք թույլատրել, որ դա տեղի ունենա:\n\nԵթե վերականգնումը ինքներդ չեք հայցել, թուjլ մի տվեք, որ գործողությունը շարունակվի: Դա կփոխարինի ներկայում հեռախոսի մեջ գտնվող ցանկացած տվյալ:"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"Վերականգնել իմ տվյալները"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"Չվերականգնել"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Խնդրում ենք մուտքագրել ձեր ընթացիկ պահուստային գաղտնաբառը ներքևում`"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Խնդրում ենք մուտքագրել ձեր սարքի կոդավորված գաղտնաբառը ներքևում:"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Խնդրում ենք մուտքագրել ձեր սարքի կոդավորված գաղտնաբառը ներքևում: Այն նաև կօգտագործվի պահուստային արխիվի կոդավորման համար:"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Խնդրում ենք մուտքագրել գաղտնաբառը` ամբողջական պահուստավորվող տվյալները կոդավորելու համար: Եթե ​​այն դատարկ թողնեք, ապա կօգտագործվի ձեր առկա պահուստավորման գաղտնաբառը`"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Եթե ​​ցանկանում եք կոդավորել ամբողջական պահուստավորված տվյալները, մուտքագրեք գաղտնաբառ ստորև`"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"Եթե ​​վերականգնվող տվյալները կոդավորված են, խնդրում ենք մուտքագրել գաղտնաբառը ստորև`"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Պահուստավորումը սկսվում է..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Պահուստավորումն ավարտվեց"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"Վերականգնումը մեկնարկեց..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"Վերականգնումն ավարտվեց"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"Գործողության ժամանակը սպառվեց"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ka-rGE/strings.xml b/packages/BackupRestoreConfirmation/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..9c6f67e
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ka-rGE/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"სრული სარეზერვო კოპირება"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"სრულად აღდგენა"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"მოთხოვნილ იქნა სამაგიდო კომპიუტერთან დაკავშირებული ყველა მონაცემის სრულყოფილი სარეზერვო ასლები. \n\nთუ სარეზერვო ასლები თქვენ არ მოგითხოვიათ, არ დაუშვათ ამ ოპერაციის გაგრძელება."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"ჩემი მონაცემების სარეზერვო კოპირება"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"სარეზერვო ასლები არ გააკეთო"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"დაკავშირებული დესკტოპ კომპიუტერიდან მოხდა ყველა მონაცემის სრული აღდგენის მოთხოვნა. გსურთ, დაუშვათ ეს?\n\nთუ თქვენ თვითონ არ მოითხოვეთ აღდგენა, არ დაუშვათ ამ ოპერაციის გაგრძელება. ის ჩაანაცვლებს მოწყობილობაზე ამჟამად არსებულ ნებისმიერ მონაცემს!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"ჩემი მონაცემების აღდგენა"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"არ აღადგინო"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"გთხოვთ, ქვემოთ მიუთითოთ თქვენი ამჟამინდელი სათადარიგო პაროლი:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"გთხოვთ, ქვემოთ მიუთითოთ თქვენი მოწყობილობის დაშიფვრის პაროლი."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"გთხოვთ, ქვემოთ მიუთითოთ თქვენი მოწყობილობის დაშიფვრის პაროლი. ეს ასევე გამოყენებული იქნება სათადარიგო არქივის დაშიფრვისათვის."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"გთხოვთ შეიყვანოთ ყველა სამარქაფო ასლის დაშიფრვის პაროლი. თუ ამ ველს ცარიელს დატოვებთ, გამოყენებული იქნება მიმდინარე პაროლი:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"თუ გსურთ სრული ლოკალური სარეზერვო კოპიის დაშიფრვა, შეიყვანეთ პაროლი ქვემოთ:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"თუ აღსადგენი მონაცემები დაშიფრულია, გთხოვთ, შეიყვანოთ პაროლი ქვემოთ:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"ასლების მომზადება იწყება..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"სარეზერვო კოპირება დასრულებულია"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"აღდგენა იწყება..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"აღდგენა დასრულდა"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"ოპერაციის დროის ლიმიტი ამოიწურა"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-km-rKH/strings.xml b/packages/BackupRestoreConfirmation/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..956fdd7
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-km-rKH/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"ការ​បម្រុង​ទុក​ពេញលេញ"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"ស្ដារ​ឡើងវិញ​ពេញលេញ"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"ការ​បម្រុងទុក​ទិន្នន័យ​ទាំងអស់​ពេញលេញ​​ទៅ​កុំព្យូទ័រ​ដែល​បាន​ភ្ជាប់​ត្រូវ​បាន​ស្នើ។ តើ​អ្នក​ចង់ឲ្យ​វា​កើត​ឡើង​ដែរ​ឬទេ??\n\nបើ​អ្នក​មិន​បាន​ស្នើ​ការ​បម្រុងទុក​ដោយ​ខ្លួន​អ្នក​ផ្ទាល់​ទេ កុំ​អនុញ្ញាត​ប្រតិបត្តិការ​នេះ។"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"បម្រុង​ទុក​ទិន្នន័យ​របស់​ខ្ញុំ"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"កុំ​បម្រុង​ទុក"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"ការ​ស្ដារ​ទិន្នន័យ​ទាំងអស់​ពេញលេញ​ពី​កុំព្យូទ័រ​ដែល​បាន​តភ្ជាប់​ត្រូវ​បាន​ស្នើ។ តើ​អ្នក​ចង់​អនុញ្ញាត​ដែរ​ឬទេ?\n\n បើ​អ្នក​មិន​បាន​ស្នើ​ការ​ស្ដារ​ខ្លួន​ឯង​ទេ កុំ​អនុញ្ញាត។ វា​នឹង​ជំនួស​ទិន្នន័យ​ណាមួយ​ដែល​មាន​លើ​ឧបករណ៍!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"ស្ដារ​ទិន្នន័យ​របស់​ខ្ញុំ"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"កុំ​ស្ដារ​ឡើងវិញ"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​បម្រុង​ទុក​បច្ចុប្បន្ន​របស់​អ្នក​ខាង​ក្រោម៖"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​ដាក់​លេខ​កូដ​​ឧបករណ៍​របស់​​អ្នក​ខាង​ក្រោម។"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​ដាក់​លេខ​កូដ​ឧបករណ៍​របស់​អ្នក​ខាង​ក្រោម។ វា​នឹង​ត្រូវ​បាន​ប្រើ ដើម្បី​ដាក់​លេខ​កូដ​ប័ណ្ណសារ​បម្រុងទុក​ផង​ដែរ។"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​ដើម្បី​ប្រើ​សម្រាប់​ដាក់លេខ​កូដ​ទិន្នន័យ​បម្រុងទុក​ពេញលេញ។ បើ​ទុក​វា​ទទេ ពាក្យ​សម្ងាត់​បម្រុងទុក​បច្ចុប្បន្ន​របស់​អ្នក​នឹង​ត្រូវ​បាន​ប្រើ៖"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"បើ​អ្នក​ចង់​ដាក់​លេខ​កូដ​ទិន្នន័យ​បម្រុងទុក​ពេញលេញ បញ្ចូល​ពាក្យ​សម្ងាត់​ខាង​ក្រោម៖"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"បើ​​ទិន្នន័យ​ស្ដារ​ត្រូវ​បាន​ដាក់​លេខ​កូដ សូម​បញ្ចូល​ពាក្យ​សម្ងាត់​ខាង​ក្រោម៖"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"កំពុង​ចាប់ផ្ដើម​បម្រុងទុក..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"ការ​​បម្រុង​ទុក​បាន​បញ្ចប់"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"ការ​ស្ដារ​កំពុង​ចាប់ផ្ដើម..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"ការ​ស្តា​រ​បាន​បញ្ចប់"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"ប្រតិបត្តិការ​អស់​ពេល"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-lo-rLA/strings.xml b/packages/BackupRestoreConfirmation/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..fb28502
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-lo-rLA/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"ສຳຮອງຂໍ້ມູນເຕັມຮູບແບບ"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"ກູ້ຂໍ້ມູນເຕັມຮູບແບບ"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"ມີການຮ້ອງຂໍໃຫ້ສຳຮອງຂໍ້ມູນທັງໝົດ ໄປໃສ່ຄອມພິວເຕີຕັ້ງໂຕະທີ່ເຊື່ອມຕໍ່ຢູ່. ທ່ານຈະອະນຸມັດໃຫ້ດຳເນີນການຫຼືບໍ່?\n\nຫາກທ່ານບໍ່ໄດ້ຮ້ອງຂໍໃຫ້ສຳຮອງຂໍ້ມູນດ້ວຍຕົນເອງ, ກະລຸນາຢ່າອະນຸຍາດໃຫ້ດຳເນີນການຕໍ່ໄປ."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"ສຳຮອງຂໍ້ມູນຂອງຂ້ອຍ"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"ບໍ່ໃຫ້ສຳຮອງຂໍ້ມູນ"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"ການກູ້ຂໍ້ມູນທັງໝົດຈາກຄອມພິວເຕີທີ່ເຊື່ອມຕໍ່ຢູ່ນັ້ນຖືກຮ້ອງຂໍແລ້ວ. ທ່ານຕ້ອງການອະນຸຍາດໃຫ້ການກະທຳນີ້ເກີດຂຶ້ນບໍ່?\n\nຫາກທ່ານບໍ່ໄດ້ເຮັດການຮ້ອງຂໍ້ການກູ້ຂໍ້ມູນດ້ວຍໂຕທ່ານເອງ, ທ່ານບໍ່ຄວນອະນຸຍາດໃຫ້ມີການດຳເນີນການໃດໆ ເນື່ອງຈາກມັນຈະໄປຂຽນທັບຂໍ້ມູນທັງໝົດທີ່ຢູ່ໃນອຸປະກອນ!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"ກູ້ຄືນຂໍ້ມູນຂອງຂ້ອຍ"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"ບໍ່ໃຫ້ກູ້ຄືນ"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"ກະລຸນາປ້ອນລະຫັດຜ່ານການສຳຮອງຂໍ້ມູນທີ່ທ່ານໃຊ້ຢູ່ໃສ່ດ້ານລຸ່ມ:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"ກະລຸນາປ້ອນລະຫັດຜ່ານການເຂົ້າລະຫັດອຸປະກອນຂອງທ່ານໃສ່ດ້ານລຸ່ມ."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"ກະລຸນາປ້ອນລະຫັດຜ່ານການເຂົ້າລະຫັດອຸປະກອນຂອງທ່ານໃສ່ດ້ານລຸ່ມ. ລະຫັດນີ້ຍັງຈະໃຊ້ເພື່ອເຂົ້າລະຫັດຂໍ້ມູນທີ່ສຳຮອງໄວ້."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"ກະລຸນາປ້ອນລະຫັດຜ່ານ ເພື່ອໃຊ້ໃນການເຂົ້າລະຫັດການສຳຮອງຂໍ້ມູນເຕັມຮູບແບບ. ຖ້າປ່ອຍໃຫ້ເປົ່າຫວ່າງໄວ້, ລະຫັດຜ່ານສຳຮອງຂໍ້ມູນທີ່ທ່ານໃຊ້ຢູ່ຈະຖືກນຳໃຊ້ແທນ:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"ຫາກທ່ານຕ້ອງການທີ່ຈະເຂົ້າລະຫັດໃຫ້ກັບການສຳຮອງຂໍ້ມູນທັງໝົດ, ກະລຸນາໃສ່ລະຫັດທາງລຸ່ມນີ້:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"ຫາກຂໍ້ມູນສຳຮອງຖືກເຂົ້າລະຫັດໄວ້, ກະລຸນາໃສ່ລະຫັດຜ່ານທາງດ້ານລຸ່ມນີ້:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"ກຳລັງເລີ່ມການສຳຮອງຂໍ້ມູນ..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"ສຳຮອງຂໍ້ມູນສຳເລັດແລ້ວ"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"ການກູ້ຂໍ້ມູນກຳລັງຈະເລີ່ມ..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"ການກູ້ຂໍ້ມູນສິ້ນສຸດແລ້ວ"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"ໝົດເວລາປະຕິບັດການ"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-mn-rMN/strings.xml b/packages/BackupRestoreConfirmation/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..b2738c0
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-mn-rMN/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"Бүрэн нөөшлөх"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"Бүрэн сэргээх"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Холбогдсон байгаа десктоп компьютерлүү бүх датаг бүрэн нөөшлөх хүсэлт тавигдав. Та энийг зөвшөөрөх үү?\n\nХэрэв та нөөшлөлт хийх хүсэлт хийгээгүй бол энийг зөвшөөрч болохгүй."</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"Миний датаг нөөшлөх"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"Нөөшлөхгүй"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"Холбогдсон байгаа десктоп компьютерээс бүх датаг бүрэн сэргээх хүсэлт тавигдав. Та энийг зөвшөөрөх үү?\n\nХэрэв та сэргээх хүсэлт хийгээгүй бол энийг зөвшөөрч болохгүй. Энэ нь төхөөрөмж дээр одоо байгаа дурын датаг орлуулах болно!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"Миний датаг сэргээх"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"Сэргээхгүй"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Одоогийн нөөшлөх нууц үгийг доор оруулна уу:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"Төхөөрөмж шифрлэх нууц үгийг доор оруулна уу."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"Төхөөрөмж шифрлэх нууц үгийг доор оруулна уу. Энэ нууц үгийг нөөшлөх архивийг шифрлэхэд бас ашиглана."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Бүрэн дата нөөшлөлтийг шифрлэхэд ашиглах нууц үгийг оруулна уу. Хэрэв та хоосон үлдээвэл таны одоогийн нөөшлөлтийн нууц үг ашиглагдах болно:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Хэрэв та бүрэн нөөшлөх датаг шифрлэх бол доор нууц үгийг оруулна уу:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"Хэрэв сэргээх дата шифрлэгдсэн бол доор нууц үгийг оруулна уу:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"Нөөшлөж эхлэх..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"Нөөшлөлт дуусав"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"Сэргээлт эхлэж байна..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"Сэргээлт дуусав"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"Ажиллагааны хугацаа хэтрэв"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ms/strings.xml b/packages/BackupRestoreConfirmation/res/values-ms-rMY/strings.xml
similarity index 100%
rename from packages/BackupRestoreConfirmation/res/values-ms/strings.xml
rename to packages/BackupRestoreConfirmation/res/values-ms-rMY/strings.xml
diff --git a/packages/BackupRestoreConfirmation/res/values-ne-rNP/strings.xml b/packages/BackupRestoreConfirmation/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..c56332f
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ne-rNP/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"पूर्ण ब्याकअप"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"पूर्ण पुनःप्राप्ति"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"एउटा जोडिएको डेस्कटप कम्प्युटरमा सबै डेटाको एउटा पूर्ण जगेडाको अनुरोध गरिएको छ। के तपाईँ यो हुन दिन चाहनुहुन्छ? \n\nयदि तपाईँले जगेडाको लागि आफैँ अनुरोध गर्नु भएन भने प्रक्रियालाई अगाडि बढ्न अनुमति नदिनुहोस्।"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"मेरो डेटा ब्याकअप गर्नुहोस्"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"जगेडा नगर्नुहोस्"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"एउटा जडित डेस्कटप कम्प्युटरबाट सबै डेटाको पूर्ण पुनःबहाली अनुरोध गरियो। के तपाईं यो हुन अनुमति दिनुहुन्छ?\n\nयदि तपाईं आफैं पुनःबहाली अनुरोध गर्नुहुन्न भने अपरेसनलाई अघि बढाउन अनुमति नदिनुहोस्। यसले उपकरणमा भएको कुनै पनि डेटालाई बदल्ने छ!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"मेरो डेटा पुनःबहाली गर्नुहोस्"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"पुन:स्थापना नगर्नुहोस्"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"कृपया तल तपाईंको हालको ब्याकअप पासवर्ड प्रविष्टि गर्नुहोस्:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया तल तपाईंको उपकरण एन्क्रिप्सन पासवर्ड प्रविष्टि गर्नुहोस्:"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया तल तपाईंको उपकरण एन्क्रिप्सन पासवर्ड प्रविष्टि गर्नुहोस्: यो ब्याकप सँग्रह एन्क्रिप्ट गर्न पनि प्रयोग हुने छ।"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"ब्याकप डेटालाई encrypt गर्न पासवर्ड प्रविष्टि गर्नुहोस्, यदि यो खालि छोडिएको खण्डमा तपाईको पुरानै पासवर्ड प्रयोग हुने छ।"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि तपाईं पूर्ण ब्याकअप डेटा इन्क्रिप्ट गर्न चाहनु हुन्छ भने तल पासवर्ड प्रविष्टि गर्नुहोस्।"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"यदि पुनःबहाली डेटा इन्क्रिप्ट छ भने कृपया तल पासवर्ड प्रविष्टि गर्नुहोस्:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"जगेडा राख्न सुरु हुँदै..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"ब्याकअप सकियो"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"पुनःस्थापना सुरु हुँदैछ..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"पुनःबहाली समाप्त भयो"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"संचलन कार्यको समय समाप्त भयो"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-ne/strings.xml b/packages/BackupRestoreConfirmation/res/values-ne/strings.xml
new file mode 100644
index 0000000..c56332f
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-ne/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"पूर्ण ब्याकअप"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"पूर्ण पुनःप्राप्ति"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"एउटा जोडिएको डेस्कटप कम्प्युटरमा सबै डेटाको एउटा पूर्ण जगेडाको अनुरोध गरिएको छ। के तपाईँ यो हुन दिन चाहनुहुन्छ? \n\nयदि तपाईँले जगेडाको लागि आफैँ अनुरोध गर्नु भएन भने प्रक्रियालाई अगाडि बढ्न अनुमति नदिनुहोस्।"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"मेरो डेटा ब्याकअप गर्नुहोस्"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"जगेडा नगर्नुहोस्"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"एउटा जडित डेस्कटप कम्प्युटरबाट सबै डेटाको पूर्ण पुनःबहाली अनुरोध गरियो। के तपाईं यो हुन अनुमति दिनुहुन्छ?\n\nयदि तपाईं आफैं पुनःबहाली अनुरोध गर्नुहुन्न भने अपरेसनलाई अघि बढाउन अनुमति नदिनुहोस्। यसले उपकरणमा भएको कुनै पनि डेटालाई बदल्ने छ!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"मेरो डेटा पुनःबहाली गर्नुहोस्"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"पुन:स्थापना नगर्नुहोस्"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"कृपया तल तपाईंको हालको ब्याकअप पासवर्ड प्रविष्टि गर्नुहोस्:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"कृपया तल तपाईंको उपकरण एन्क्रिप्सन पासवर्ड प्रविष्टि गर्नुहोस्:"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"कृपया तल तपाईंको उपकरण एन्क्रिप्सन पासवर्ड प्रविष्टि गर्नुहोस्: यो ब्याकप सँग्रह एन्क्रिप्ट गर्न पनि प्रयोग हुने छ।"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"ब्याकप डेटालाई encrypt गर्न पासवर्ड प्रविष्टि गर्नुहोस्, यदि यो खालि छोडिएको खण्डमा तपाईको पुरानै पासवर्ड प्रयोग हुने छ।"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"यदि तपाईं पूर्ण ब्याकअप डेटा इन्क्रिप्ट गर्न चाहनु हुन्छ भने तल पासवर्ड प्रविष्टि गर्नुहोस्।"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"यदि पुनःबहाली डेटा इन्क्रिप्ट छ भने कृपया तल पासवर्ड प्रविष्टि गर्नुहोस्:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"जगेडा राख्न सुरु हुँदै..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"ब्याकअप सकियो"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"पुनःस्थापना सुरु हुँदैछ..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"पुनःबहाली समाप्त भयो"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"संचलन कार्यको समय समाप्त भयो"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-si-rLK/strings.xml b/packages/BackupRestoreConfirmation/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..ed32e73
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-si-rLK/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"සම්පූර්ණ උපස්ථය"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"සම්පූර්ණයෙන් නැවත පිහිටුවන්න"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"ඩෙස්ක්ටොප් පරිගණකයකට සම්බන්ධිත සියලුම දත්ත වල සම්පූර්ණ උපස්ථයක් ඉල්ලා තිබේ. මෙම සිදු වෙනවාට අවසර දීමට ඔබට අවශ්‍යද?\n\nඔබ විසින් උපස්ථය කිරීමට ඉල්ලා නොතිබුණි නම්, මෙම මෙහෙයුම ඉදිරියට කරගෙන යාමට අවසර දෙන්න එපා. 1"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"මගේ දත්ත උපස්ථ කරන්න"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"උපස්ථ කරන්න එපා"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"සම්බන්ධිත ඩෙස්ක්ටොප් පරිගණකයකින් සියලු දත්ත වල සම්පූර්ණ ප්‍රතිස්ථාපනයක් ඉල්ලා ඇත. ඔබ මෙය සිදු වීමට අවසර දෙනවා ද?\n\nඔබ විසින් ප්‍රතිස්ථාපනය ඉල්ලා නොමැති නම්, ක්‍රියාවලියට ඉදිරියට යාමට ඉඩ නොදෙන්න. උපාංගයේ දැනට ඇති ඕනෑම දත්තයක් මෙමඟින් ප්‍රතිස්ථාපනය වෙයි!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"මගේ දත්ත නැවත පිහිටුවන්න"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"නැවත පිහිටුවන්න එපා"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"කරුණාකර ඔබගේ වර්තමාන උපස්ථ මුරපදය පහත ඇතුලත් කරන්න:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"කරුණාකර ඔබගේ උපාංගයේ සංකේතන මුරපදය පහත ඇතුලත් කරන්න."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"කරුණාකර ඔබගේ උපාංගයේ සංකේතන මුරපදය පහත ඇතුලත් කරන්න. සංරක්ෂිත උපස්ථ සංකේතනය කිරීමට මෙය භාවිත කළ හැක."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"කරුණාකර සියලු උපස්ථ දත්ත සංකේතනය කිරීම සඳහා භාවිතයට මුරපදයක් ඇතුළත් කරන්න. මෙය හිස්ව තැබුවොත්, ඔබගේ වර්තමාන උපස්ථ මුරපදය භාවිත වෙයි:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"සියලු උපස්ථ දත්ත සංකේතනය කිරීමට ඔබ අදහස් කරන්නේ නම්, මුරපදය පහලින් ඇතුලත් කරන්න:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"යළි පිහිටුවන දත්ත සංකේතනය කරන ලද ඒවානම්, කරුණාකර මුරපදය පහලින් ඇතුල් කරන්න:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"උපස්ථ කිරීම ආරම්භ කරමින්..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"උපස්ථය අවසන්"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"යළි පිහිටුවීම අරඹයි..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"යළි පිහිටුවීම අවසන්"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"ක්‍රියාවලිය කල් ඉකුත් වී ඇත"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-si/strings.xml b/packages/BackupRestoreConfirmation/res/values-si/strings.xml
new file mode 100644
index 0000000..ed32e73
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-si/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"සම්පූර්ණ උපස්ථය"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"සම්පූර්ණයෙන් නැවත පිහිටුවන්න"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"ඩෙස්ක්ටොප් පරිගණකයකට සම්බන්ධිත සියලුම දත්ත වල සම්පූර්ණ උපස්ථයක් ඉල්ලා තිබේ. මෙම සිදු වෙනවාට අවසර දීමට ඔබට අවශ්‍යද?\n\nඔබ විසින් උපස්ථය කිරීමට ඉල්ලා නොතිබුණි නම්, මෙම මෙහෙයුම ඉදිරියට කරගෙන යාමට අවසර දෙන්න එපා. 1"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"මගේ දත්ත උපස්ථ කරන්න"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"උපස්ථ කරන්න එපා"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"සම්බන්ධිත ඩෙස්ක්ටොප් පරිගණකයකින් සියලු දත්ත වල සම්පූර්ණ ප්‍රතිස්ථාපනයක් ඉල්ලා ඇත. ඔබ මෙය සිදු වීමට අවසර දෙනවා ද?\n\nඔබ විසින් ප්‍රතිස්ථාපනය ඉල්ලා නොමැති නම්, ක්‍රියාවලියට ඉදිරියට යාමට ඉඩ නොදෙන්න. උපාංගයේ දැනට ඇති ඕනෑම දත්තයක් මෙමඟින් ප්‍රතිස්ථාපනය වෙයි!"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"මගේ දත්ත නැවත පිහිටුවන්න"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"නැවත පිහිටුවන්න එපා"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"කරුණාකර ඔබගේ වර්තමාන උපස්ථ මුරපදය පහත ඇතුලත් කරන්න:"</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"කරුණාකර ඔබගේ උපාංගයේ සංකේතන මුරපදය පහත ඇතුලත් කරන්න."</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"කරුණාකර ඔබගේ උපාංගයේ සංකේතන මුරපදය පහත ඇතුලත් කරන්න. සංරක්ෂිත උපස්ථ සංකේතනය කිරීමට මෙය භාවිත කළ හැක."</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"කරුණාකර සියලු උපස්ථ දත්ත සංකේතනය කිරීම සඳහා භාවිතයට මුරපදයක් ඇතුළත් කරන්න. මෙය හිස්ව තැබුවොත්, ඔබගේ වර්තමාන උපස්ථ මුරපදය භාවිත වෙයි:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"සියලු උපස්ථ දත්ත සංකේතනය කිරීමට ඔබ අදහස් කරන්නේ නම්, මුරපදය පහලින් ඇතුලත් කරන්න:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"යළි පිහිටුවන දත්ත සංකේතනය කරන ලද ඒවානම්, කරුණාකර මුරපදය පහලින් ඇතුල් කරන්න:"</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"උපස්ථ කිරීම ආරම්භ කරමින්..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"උපස්ථය අවසන්"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"යළි පිහිටුවීම අරඹයි..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"යළි පිහිටුවීම අවසන්"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"ක්‍රියාවලිය කල් ඉකුත් වී ඇත"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
index 21e21b5..12f562b 100644
--- a/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sk/strings.xml
@@ -24,7 +24,7 @@
     <string name="restore_confirm_text" msgid="7499866728030461776">"Z pripojeného počítača bolo vyžiadané úplné obnovenie všetkých údajov. Chcete túto akciu povoliť?\n\nAk ste toto obnovenie nevyžiadali vy, túto operáciu nepovoľujte. Táto akcia nahradí všetky údaje v zariadení."</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"Obnoviť údaje"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"Neobnoviť"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"Zadajte svoje aktuálne heslo pre zálohu nižšie:"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Zadajte svoje aktuálne heslo záloh nižšie:"</string>
     <string name="device_encryption_restore_text" msgid="1570864916855208992">"Zadajte svoje heslo na šifrovanie zariadenia nižšie."</string>
     <string name="device_encryption_backup_text" msgid="5866590762672844664">"Zadajte svoje heslo na šifrovanie zariadenia nižšie. Bude tiež použité na šifrovanie archívu zálohy."</string>
     <string name="backup_enc_password_text" msgid="4981585714795233099">"Zadajte heslo, ktoré sa použije pri šifrovaní údajov úplnej zálohy. Ak pole ponecháte prázdne, použije sa vaše aktuálne heslo zálohy:"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
index 619a6db..4e35b91 100644
--- a/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-sw/strings.xml
@@ -18,17 +18,17 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="backup_confirm_title" msgid="827563724209303345">"Kuhifadhi kikamilifu"</string>
     <string name="restore_confirm_title" msgid="5469365809567486602">"Kurejesha kila kitu"</string>
-    <string name="backup_confirm_text" msgid="1878021282758896593">"Chelezo kamili la data iliyounganishwa kwenye eneo kazi la kompyuta limeombwa. Unataka kuruhusu hii kutendeka?\n\n Ikiwa hukuomba chelezo mwenyewe, usikubali uendeshaji kuendelea."</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"Ombi la kuhifadhi nakala rudufu kamili za data kwenye eneo kazi la kompyuta iliyounganishwa limewasilishwa. Ungependa shughuli hii ufanyike?\n\n Ikiwa sio wewe uliyewasilisha ombi hili, usikubali shughuli hii iendelee."</string>
     <string name="allow_backup_button_label" msgid="4217228747769644068">"Hifadhi nakala ya data yangu"</string>
     <string name="deny_backup_button_label" msgid="6009119115581097708">"Usicheleze"</string>
     <string name="restore_confirm_text" msgid="7499866728030461776">"Kurejesha kamili kwa data nzima kutoka kwa eneo kazi la kompyuta lililounganishwa limeombwa. Unataka kuruhusu hii kutendeka?\n\n Ikiwa hukuweza kurejesha upya mwenyewe, usiruhusu uendeshaji huu kuendelea. Hii itaweka upya data yoyote iliyo kwenye kifaa hiki sasa!"</string>
     <string name="allow_restore_button_label" msgid="3081286752277127827">"Rejesha upya data yangu"</string>
     <string name="deny_restore_button_label" msgid="1724367334453104378">"Usirejeshe upya"</string>
-    <string name="current_password_text" msgid="8268189555578298067">"Tafadhali ingiza nenosiri lako la chelezo hapo chini:"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"Tafadhali ingiza nenosiri unalotumia kuhifadhi nakala rudufu hapo chini:"</string>
     <string name="device_encryption_restore_text" msgid="1570864916855208992">"Tafadhali ingiza nenosiri la usimbaji fiche wa kifaa chako hapo chini."</string>
     <string name="device_encryption_backup_text" msgid="5866590762672844664">"Tafadhali ingiza nenosiri lako la msimbo fiche hapo chini. Pia litatumika kusimba fiche jalidi ya hifadhi."</string>
-    <string name="backup_enc_password_text" msgid="4981585714795233099">"Tafadhali ingiza nenosiri la kutumia kwa usimbaji fiche wa chelezo ya data kamili. Ikiwa hii itawachwa wazi, nenosiri lako la sasa litatumika:"</string>
-    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ikiwa unataka kusimba fiche data nzima ya kucheleza, ingiza nenosiri la hapo chini:"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"Tafadhali ingiza nenosiri la kutumia katika kusimba nakala rudufu kamili za data kwa njia fiche. Ikiwa hii itawachwa wazi, nenosiri lako la sasa litatumika:"</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"Ikiwa unataka kusimba kwa njia fiche nakala rudufu za data, ingiza nenosiri lililo hapo chini:"</string>
     <string name="restore_enc_password_text" msgid="6140898525580710823">"Ikiwa data iliyorejeshwa upya, tafadhali ingiza nenosiri lililo hapo chini:"</string>
     <string name="toast_backup_started" msgid="550354281452756121">"Inaanza kuhifadhi..."</string>
     <string name="toast_backup_ended" msgid="3818080769548726424">"Imemaliza kuhifadhi"</string>
diff --git a/packages/BackupRestoreConfirmation/res/values-zh-rHK/strings.xml b/packages/BackupRestoreConfirmation/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..d3bcd6e
--- /dev/null
+++ b/packages/BackupRestoreConfirmation/res/values-zh-rHK/strings.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="backup_confirm_title" msgid="827563724209303345">"完整備份"</string>
+    <string name="restore_confirm_title" msgid="5469365809567486602">"完整還原"</string>
+    <string name="backup_confirm_text" msgid="1878021282758896593">"系統收到將所有資料完整備份到連線桌上電腦的要求，請問您允許進行備份嗎？\n\n如果您本人並未提出備份要求，請勿允許繼續進行這項作業。"</string>
+    <string name="allow_backup_button_label" msgid="4217228747769644068">"備份我的資料"</string>
+    <string name="deny_backup_button_label" msgid="6009119115581097708">"不要備份"</string>
+    <string name="restore_confirm_text" msgid="7499866728030461776">"系統收到從連線的桌上電腦完整還原所有資料的要求，請問您允許進行還原嗎？\n\n如果您本人並未提出還原要求，請勿允許繼續進行這項作業。這項作業將取代裝置上現有的全部資料！"</string>
+    <string name="allow_restore_button_label" msgid="3081286752277127827">"還原我的資料"</string>
+    <string name="deny_restore_button_label" msgid="1724367334453104378">"不要還原"</string>
+    <string name="current_password_text" msgid="8268189555578298067">"在下面輸入您目前的備份密碼："</string>
+    <string name="device_encryption_restore_text" msgid="1570864916855208992">"請在下面輸入您的裝置加密密碼。"</string>
+    <string name="device_encryption_backup_text" msgid="5866590762672844664">"請在下面輸入您的裝置加密密碼，這也會用來將封存備份加密。"</string>
+    <string name="backup_enc_password_text" msgid="4981585714795233099">"請輸入為完整備份資料加密的專用密碼。如果留空，系統將使用您目前的備份密碼："</string>
+    <string name="backup_enc_password_optional" msgid="1350137345907579306">"如果您想將完整的備份資料加密，請在下面輸入一組密碼："</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"如果還原的資料經過加密處理，請在下面輸入密碼："</string>
+    <string name="toast_backup_started" msgid="550354281452756121">"正在開始備份..."</string>
+    <string name="toast_backup_ended" msgid="3818080769548726424">"備份完畢"</string>
+    <string name="toast_restore_started" msgid="7881679218971277385">"正在開始還原..."</string>
+    <string name="toast_restore_ended" msgid="1764041639199696132">"還原完畢"</string>
+    <string name="toast_timeout" msgid="5276598587087626877">"操作逾時"</string>
+</resources>
diff --git a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
index b62b7af..955b26f 100644
--- a/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
+++ b/packages/BackupRestoreConfirmation/res/values-zu/strings.xml
@@ -29,7 +29,7 @@
     <string name="device_encryption_backup_text" msgid="5866590762672844664">"Uyacelwa ukuba ufake iphasiwedi efakwe kudivayisi yakho ngezansi. lokhu kuzosetshenziswa ukufaka kusilondoloza sokusiza lapho kudingeka."</string>
     <string name="backup_enc_password_text" msgid="4981585714795233099">"Sicela ufake iphasiwedi ezosetshenziselwa ukubhala ngokufihlekileyo imininingo eyesekwe ngokulondoloza. Uma lokhu kushiywe kungabhalwe lutho, kuzosetshenziswa iphasiwedi yokweseka ngokulondoloza yamanje:"</string>
     <string name="backup_enc_password_optional" msgid="1350137345907579306">"Uma ufuna ukufaka ikhowudi kwimininingo yonke eyesekelwe ngokulondoloza faka i-passowrd engezansi:"</string>
-    <string name="restore_enc_password_text" msgid="6140898525580710823">"Uma insiza yokubuyiselwa esimweni kwmininingo ibhalwe ngokufihlekileyo, sicela ufake iphasiwedi engezansi:"</string>
+    <string name="restore_enc_password_text" msgid="6140898525580710823">"Uma uhlelo lokusebenza yokubuyiselwa esimweni kwmininingo ibhalwe ngokufihlekileyo, sicela ufake iphasiwedi engezansi:"</string>
     <string name="toast_backup_started" msgid="550354281452756121">"Ukulondoloza kuyaqala..."</string>
     <string name="toast_backup_ended" msgid="3818080769548726424">"Ukulondoloza kuphelile"</string>
     <string name="toast_restore_started" msgid="7881679218971277385">"Ukubuyisa kuyaqala..."</string>
diff --git a/packages/DefaultContainerService/res/values-az-rAZ/strings.xml b/packages/DefaultContainerService/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..cae7d02
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-az-rAZ/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Paket Giriş Yardımçısı"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-az/strings.xml b/packages/DefaultContainerService/res/values-az/strings.xml
new file mode 100644
index 0000000..cae7d02
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-az/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Paket Giriş Yardımçısı"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-be/strings.xml b/packages/DefaultContainerService/res/values-be/strings.xml
deleted file mode 100644
index 68621b6..0000000
--- a/packages/DefaultContainerService/res/values-be/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/*
-**
-** Copyright 2008, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="service_name" msgid="4841491635055379553">"Памочнік дост. да пакетаў"</string>
-</resources>
diff --git a/packages/DefaultContainerService/res/values-et/strings.xml b/packages/DefaultContainerService/res/values-en-rIN/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-et/strings.xml
rename to packages/DefaultContainerService/res/values-en-rIN/strings.xml
diff --git a/packages/DefaultContainerService/res/values-et/strings.xml b/packages/DefaultContainerService/res/values-et-rEE/strings.xml
similarity index 100%
copy from packages/DefaultContainerService/res/values-et/strings.xml
copy to packages/DefaultContainerService/res/values-et-rEE/strings.xml
diff --git a/packages/DefaultContainerService/res/values-fr-rCA/strings.xml b/packages/DefaultContainerService/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..69c4e99
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-fr-rCA/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Aide accès au paquet"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-hy-rAM/strings.xml b/packages/DefaultContainerService/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..1e2f587
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-hy-rAM/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Փաթեթի մուտքի օժանդակող"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-et/strings.xml b/packages/DefaultContainerService/res/values-ka-rGE/strings.xml
similarity index 100%
copy from packages/DefaultContainerService/res/values-et/strings.xml
copy to packages/DefaultContainerService/res/values-ka-rGE/strings.xml
diff --git a/packages/DefaultContainerService/res/values-km-rKH/strings.xml b/packages/DefaultContainerService/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..1006d56
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-km-rKH/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"កម្មវិធី​ជំនួយ​ចូល​ដំណើរការ​កញ្ចប់"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-et/strings.xml b/packages/DefaultContainerService/res/values-lo-rLA/strings.xml
similarity index 100%
copy from packages/DefaultContainerService/res/values-et/strings.xml
copy to packages/DefaultContainerService/res/values-lo-rLA/strings.xml
diff --git a/packages/DefaultContainerService/res/values-mn-rMN/strings.xml b/packages/DefaultContainerService/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..d9fe647
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-mn-rMN/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"Багц хандалтын тусламж"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-ms/strings.xml b/packages/DefaultContainerService/res/values-ms-rMY/strings.xml
similarity index 100%
rename from packages/DefaultContainerService/res/values-ms/strings.xml
rename to packages/DefaultContainerService/res/values-ms-rMY/strings.xml
diff --git a/packages/DefaultContainerService/res/values-ne-rNP/strings.xml b/packages/DefaultContainerService/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..5b70ce1
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-ne-rNP/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"प्याकेज पहुँच सहयोगी"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-ne/strings.xml b/packages/DefaultContainerService/res/values-ne/strings.xml
new file mode 100644
index 0000000..5b70ce1
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-ne/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"प्याकेज पहुँच सहयोगी"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-si-rLK/strings.xml b/packages/DefaultContainerService/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..522ec6c
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-si-rLK/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"පැකේජ ප්‍රවේශ උදව්කරු"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-si/strings.xml b/packages/DefaultContainerService/res/values-si/strings.xml
new file mode 100644
index 0000000..522ec6c
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-si/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"පැකේජ ප්‍රවේශ උදව්කරු"</string>
+</resources>
diff --git a/packages/DefaultContainerService/res/values-th/strings.xml b/packages/DefaultContainerService/res/values-th/strings.xml
index 3a7080c..621d7ed 100644
--- a/packages/DefaultContainerService/res/values-th/strings.xml
+++ b/packages/DefaultContainerService/res/values-th/strings.xml
@@ -20,5 +20,5 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="service_name" msgid="4841491635055379553">"ตัวช่วยเหลือของการเข้าถึงแพคเกจ"</string>
+    <string name="service_name" msgid="4841491635055379553">"ตัวช่วยเหลือของการเข้าถึงแพ็กเกจ"</string>
 </resources>
diff --git a/packages/DefaultContainerService/res/values-zh-rHK/strings.xml b/packages/DefaultContainerService/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..9a43509
--- /dev/null
+++ b/packages/DefaultContainerService/res/values-zh-rHK/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+**
+** Copyright 2008, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="service_name" msgid="4841491635055379553">"套件存取輔助程式"</string>
+</resources>
diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml
index 179bcd1..159ee66 100644
--- a/packages/DocumentsUI/AndroidManifest.xml
+++ b/packages/DocumentsUI/AndroidManifest.xml
@@ -9,18 +9,17 @@
         android:label="@string/app_label"
         android:supportsRtl="true">
 
-        <!-- TODO: allow rotation when state saving is in better shape -->
         <activity
             android:name=".DocumentsActivity"
             android:theme="@style/Theme"
             android:icon="@drawable/ic_doc_text">
-            <intent-filter android:priority="100">
+            <intent-filter>
                 <action android:name="android.intent.action.OPEN_DOCUMENT" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.OPENABLE" />
                 <data android:mimeType="*/*" />
             </intent-filter>
-            <intent-filter android:priority="100">
+            <intent-filter>
                 <action android:name="android.intent.action.CREATE_DOCUMENT" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="android.intent.category.OPENABLE" />
@@ -33,6 +32,10 @@
                 <data android:mimeType="*/*" />
             </intent-filter>
             <intent-filter>
+                <action android:name="android.intent.action.PICK_DIRECTORY" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <intent-filter>
                 <action android:name="android.provider.action.MANAGE_ROOT" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:mimeType="vnd.android.document/root" />
@@ -42,7 +45,7 @@
         <activity
             android:name=".SettingsActivity"
             android:label="@string/menu_settings"
-            android:theme="@android:style/Theme.Holo.Light.DialogWhenLarge"
+            android:theme="@android:style/Theme.DeviceDefault.Light.DialogWhenLarge"
             android:exported="false" />
 
         <provider
@@ -57,14 +60,5 @@
                 <data android:scheme="package" />
             </intent-filter>
         </receiver>
-
-        <!-- TODO: remove when we have real clients -->
-        <activity android:name=".TestActivity" android:enabled="false">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter>
-        </activity>
     </application>
 </manifest>
diff --git a/packages/DocumentsUI/res/layout/fragment_pick.xml b/packages/DocumentsUI/res/layout/fragment_pick.xml
new file mode 100644
index 0000000..4a2fd03
--- /dev/null
+++ b/packages/DocumentsUI/res/layout/fragment_pick.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+
+    <!-- Le sigh, this really should be an asset -->
+    <View
+        android:layout_width="match_parent"
+        android:layout_height="1dp"
+        android:background="#ccc" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        android:baselineAligned="false"
+        android:gravity="center_vertical"
+        android:background="#ddd"
+        android:minHeight="?android:attr/listPreferredItemHeightSmall">
+
+        <Button
+            android:id="@android:id/button1"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:background="?android:attr/selectableItemBackground"
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textAllCaps="false"
+            android:padding="8dp" />
+
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/packages/DocumentsUI/res/values-af/strings.xml b/packages/DocumentsUI/res/values-af/strings.xml
new file mode 100644
index 0000000..ca76a7d
--- /dev/null
+++ b/packages/DocumentsUI/res/values-af/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumente"</string>
+    <string name="title_open" msgid="4353228937663917801">"Maak oop vanaf"</string>
+    <string name="title_save" msgid="2433679664882857999">"Stoor na"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Skep vouer"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Roosteraansig"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Lysaansig"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sorteer volgens"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Soek"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Instellings"</string>
+    <string name="menu_open" msgid="432922957274920903">"Maak oop"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Stoor"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Deel"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Vee uit"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Kies \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> gekies"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Volgens naam"</string>
+    <string name="sort_date" msgid="586080032956151448">"Volgens datum gewysig"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Volgens grootte"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Wys wortels"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Versteek wortels"</string>
+    <string name="save_error" msgid="6167009778003223664">"Kon nie dokument stoor nie"</string>
+    <string name="create_error" msgid="3735649141335444215">"Kon nie vouer skep nie"</string>
+    <string name="query_error" msgid="1222448261663503501">"Kon nie navraag doen oor dokumente nie"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Onlangs"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> gratis"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Bergingdienste"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Kortpaaie"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Toestelle"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Nog programme"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Wys gevorderde toestelle"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Wys lêergrootte"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Wys toestelgrootte"</string>
+    <string name="empty" msgid="7858882803708117596">"Geen items nie"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Kan lêer nie oopmaak nie"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Kan sommige dokumente nie uitvee nie"</string>
+    <string name="share_via" msgid="8966594246261344259">"Deel via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-am/strings.xml b/packages/DocumentsUI/res/values-am/strings.xml
new file mode 100644
index 0000000..84879d5
--- /dev/null
+++ b/packages/DocumentsUI/res/values-am/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"ሰነዶች"</string>
+    <string name="title_open" msgid="4353228937663917801">"ክፈት ከ"</string>
+    <string name="title_save" msgid="2433679664882857999">"አስቀምጥ ወደ"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"አቃፊ ፍጠር"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"የፍርግርግ እይታ"</string>
+    <string name="menu_list" msgid="7279285939892417279">"የዝርዝር እይታ"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"ደርድር በ"</string>
+    <string name="menu_search" msgid="3816712084502856974">"ፈልግ"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"ቅንብሮች"</string>
+    <string name="menu_open" msgid="432922957274920903">"ክፈት"</string>
+    <string name="menu_save" msgid="2394743337684426338">"አስቀምጥ"</string>
+    <string name="menu_share" msgid="3075149983979628146">"አጋራ"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"ሰርዝ"</string>
+    <string name="menu_select" msgid="8711270657353563424">"«<xliff:g id="DIRECTORY">^1</xliff:g>»ን ይምረጡ"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ተመርጠዋል"</string>
+    <string name="sort_name" msgid="9183560467917256779">"በስም"</string>
+    <string name="sort_date" msgid="586080032956151448">"በተለወጠበት ቀን"</string>
+    <string name="sort_size" msgid="3350681319735474741">"በመጠን"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"ስሮችን አሳይ"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"ስሮችን ደብቅ"</string>
+    <string name="save_error" msgid="6167009778003223664">"ሰነድ ማስቀመጥ አልተሳካም"</string>
+    <string name="create_error" msgid="3735649141335444215">"አቃፊ መፍጠር አልተሳካም"</string>
+    <string name="query_error" msgid="1222448261663503501">"ለሰነዶች መጠይቅ መስራት አልተሳካም"</string>
+    <string name="root_recent" msgid="4470053704320518133">"የቅርብ ጊዜ"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ነፃ"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"የማከማቻ አገልግሎቶች"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"አቋራጮች"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"መሣሪያዎች"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"ተጨማሪ መተግበሪያዎች"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"የላቁ መሳሪያዎችን አሳይ"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"የፋይል መጠን አሳይ"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"የመሳሪያ መጠን አሳይ"</string>
+    <string name="empty" msgid="7858882803708117596">"ምንም ንጥሎች የሉም"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"ፋይል መክፈት አይቻልም"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"አንዳንድ ሰነዶችን መሰረዝ አልተቻለም"</string>
+    <string name="share_via" msgid="8966594246261344259">"በሚከተለው በኩል ያጋሩ"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ar/strings.xml b/packages/DocumentsUI/res/values-ar/strings.xml
new file mode 100644
index 0000000..5c5d863
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ar/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"مستندات"</string>
+    <string name="title_open" msgid="4353228937663917801">"فتح من"</string>
+    <string name="title_save" msgid="2433679664882857999">"حفظ في"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"إنشاء مجلد"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"عرض الشبكة"</string>
+    <string name="menu_list" msgid="7279285939892417279">"عرض القائمة"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"ترتيب بحسب"</string>
+    <string name="menu_search" msgid="3816712084502856974">"بحث"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"الإعدادات"</string>
+    <string name="menu_open" msgid="432922957274920903">"فتح"</string>
+    <string name="menu_save" msgid="2394743337684426338">"حفظ"</string>
+    <string name="menu_share" msgid="3075149983979628146">"مشاركة"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"حذف"</string>
+    <string name="menu_select" msgid="8711270657353563424">"تحديد \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"تم تحديد <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"بحسب الاسم"</string>
+    <string name="sort_date" msgid="586080032956151448">"بحسب تاريخ التعديل"</string>
+    <string name="sort_size" msgid="3350681319735474741">"بحسب الحجم"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"عرض الجذور"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"إخفاء الجذور"</string>
+    <string name="save_error" msgid="6167009778003223664">"أخفق حفظ المستند"</string>
+    <string name="create_error" msgid="3735649141335444215">"أخفق إنشاء المجلد"</string>
+    <string name="query_error" msgid="1222448261663503501">"أخفق إرسال طلب بحث عن المستندات"</string>
+    <string name="root_recent" msgid="4470053704320518133">"الأخيرة"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> خالية"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"خدمات التخزين"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"اختصارات"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"أجهزة"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"المزيد من التطبيقات"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"عرض الأجهزة المتقدمة"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"عرض حجم الملف"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"عرض حجم الجهاز"</string>
+    <string name="empty" msgid="7858882803708117596">"ليس هناك أي عناصر"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"لا يمكن فتح الملف"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"تعذر حذف بعض المستندات"</string>
+    <string name="share_via" msgid="8966594246261344259">"مشاركة عبر"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-az-rAZ/strings.xml b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..1374982
--- /dev/null
+++ b/packages/DocumentsUI/res/values-az-rAZ/strings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Sənədlər"</string>
+    <string name="title_open" msgid="4353228937663917801">"Vasitəsilə açın"</string>
+    <string name="title_save" msgid="2433679664882857999">"buraya saxlayın"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Qovluq yaradın"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Torlu görünüş"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Siyahı görünüşü"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Bunlardan biri üzrə sırala"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Axtarış"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Ayarlar"</string>
+    <string name="menu_open" msgid="432922957274920903">"Açın"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Yadda saxlayın"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Paylaşın"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Sil"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> seçilmiş"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Ad üzrə"</string>
+    <string name="sort_date" msgid="586080032956151448">"Tarix üzrə dəyişmiş"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Ölçü üzrə"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Kökləri göstərin"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Kökləri gizlədin"</string>
+    <string name="save_error" msgid="6167009778003223664">"Sənədi yadda saxlaya bilmədi"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Son"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ödənişsiz"</string>
+    <!-- no translation found for root_type_service (2178854894416775409) -->
+    <skip />
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Qısa yollar"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Daha çox tətbiq"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Qabaqcıl cihazları görüntüləyin"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Fayl ölçüsünü görüntüləyin"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Cihaz ölçüsünü görüntüləyin"</string>
+    <string name="empty" msgid="7858882803708117596">"Element yoxdur"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Faylı aça bilmir"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Bəzi sənədləri silə bilmir"</string>
+    <string name="share_via" msgid="8966594246261344259">"Bunun vasitəsilə paylaş:"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-az/strings.xml b/packages/DocumentsUI/res/values-az/strings.xml
new file mode 100644
index 0000000..806118b
--- /dev/null
+++ b/packages/DocumentsUI/res/values-az/strings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Sənədlər"</string>
+    <string name="title_open" msgid="4353228937663917801">"Vasitəsilə açın"</string>
+    <string name="title_save" msgid="2433679664882857999">"buraya saxlayın"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Qovluq yaradın"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Torlu görünüş"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Siyahı görünüşü"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Bunlardan biri üzrə sırala"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Axtarış"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Ayarlar"</string>
+    <string name="menu_open" msgid="432922957274920903">"Açın"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Yadda saxlayın"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Paylaşın"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Sil"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> seçilmiş"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Ad üzrə"</string>
+    <string name="sort_date" msgid="586080032956151448">"Tarix üzrə dəyişmiş"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Ölçü üzrə"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Kökləri göstərin"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Kökləri gizlədin"</string>
+    <string name="save_error" msgid="6167009778003223664">"Sənədi yadda saxlaya bilmədi"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Son"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ödənişsiz"</string>
+    <string name="root_type_service" msgid="2857362700576006694">"Xidmətlər"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Qısa yollar"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Daha çox tətbiq"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Qabaqcıl cihazları görüntüləyin"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Fayl ölçüsünü görüntüləyin"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Cihaz ölçüsünü görüntüləyin"</string>
+    <string name="empty" msgid="7858882803708117596">"Element yoxdur"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Faylı aça bilmir"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Bəzi sənədləri silə bilmir"</string>
+    <string name="more" msgid="7117420986529297171">"Daha çox"</string>
+    <string name="loading" msgid="7933681260296021180">"Yüklənir…"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-bg/strings.xml b/packages/DocumentsUI/res/values-bg/strings.xml
new file mode 100644
index 0000000..d1da879
--- /dev/null
+++ b/packages/DocumentsUI/res/values-bg/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Документи"</string>
+    <string name="title_open" msgid="4353228937663917801">"Отваряне от"</string>
+    <string name="title_save" msgid="2433679664882857999">"Запазване в/ъв"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Създаване на папка"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Изглед в мрежа"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Списъчен изглед"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Сортиране по"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Търсене"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Настройки"</string>
+    <string name="menu_open" msgid="432922957274920903">"Отваряне"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Запазване"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Споделяне"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Изтриване"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Избиране на „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Избрахте <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"По име"</string>
+    <string name="sort_date" msgid="586080032956151448">"По дата на промяната"</string>
+    <string name="sort_size" msgid="3350681319735474741">"По размер"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Показване на основните елементи"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Скриване на основните елементи"</string>
+    <string name="save_error" msgid="6167009778003223664">"Запазването на документа не бе успешно"</string>
+    <string name="create_error" msgid="3735649141335444215">"Създаването на папката не бе успешно"</string>
+    <string name="query_error" msgid="1222448261663503501">"Заявката за документи не бе успешна"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Скорошно"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Свободно: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Услуги за съхранение"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Преки пътища"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Още приложения"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Устройства с разширени ф-ии"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Показване на файловия размер"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Показване на размера на устройството"</string>
+    <string name="empty" msgid="7858882803708117596">"Няма елементи"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Файлът не може да се отвори"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Някои документи не могат да бъдат изтрити"</string>
+    <string name="share_via" msgid="8966594246261344259">"Споделяне чрез"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ca/strings.xml b/packages/DocumentsUI/res/values-ca/strings.xml
new file mode 100644
index 0000000..23e7284
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ca/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documents"</string>
+    <string name="title_open" msgid="4353228937663917801">"Obre des de"</string>
+    <string name="title_save" msgid="2433679664882857999">"Desa a"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Crea una carpeta"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Visualització de quadrícula"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Visualització de llista"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Ordena per"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Cerca"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Configuració"</string>
+    <string name="menu_open" msgid="432922957274920903">"Obre"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Desa"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Comparteix"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Suprimeix"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Selecciona \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Seleccionats: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Per nom"</string>
+    <string name="sort_date" msgid="586080032956151448">"Per data de modificació"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Per mida"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Mostra les arrels"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Amaga les arrels"</string>
+    <string name="save_error" msgid="6167009778003223664">"No s\'ha pogut desar el document."</string>
+    <string name="create_error" msgid="3735649141335444215">"No s\'ha pogut crear la carpeta"</string>
+    <string name="query_error" msgid="1222448261663503501">"No s\'han pogut consultar els documents"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> lliures"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Serveis d\'emmagatzematge"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Dreceres"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Dispositius"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Més aplicacions"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Mostra els dispositius avançats"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Mostra la mida del fitxer"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Mostra la mida del dispositiu"</string>
+    <string name="empty" msgid="7858882803708117596">"Sense elements"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"No es pot obrir el fitxer."</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"No es poden suprimir alguns documents."</string>
+    <string name="share_via" msgid="8966594246261344259">"Comparteix mitjançant"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-cs/strings.xml b/packages/DocumentsUI/res/values-cs/strings.xml
new file mode 100644
index 0000000..ad8897a
--- /dev/null
+++ b/packages/DocumentsUI/res/values-cs/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenty"</string>
+    <string name="title_open" msgid="4353228937663917801">"Otevřít z"</string>
+    <string name="title_save" msgid="2433679664882857999">"Uložit do"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Vytvořit složku"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Mřížka"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Seznam"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Řadit podle"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Hledat"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Nastavení"</string>
+    <string name="menu_open" msgid="432922957274920903">"Otevřít"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Uložit"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Sdílet"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Smazat"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Vyberte adresář <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Vybráno: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Podle názvu"</string>
+    <string name="sort_date" msgid="586080032956151448">"Podle data úpravy"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Podle velikosti"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Zobrazit kořeny"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Skrýt kořeny"</string>
+    <string name="save_error" msgid="6167009778003223664">"Uložení dokumentu se nezdařilo"</string>
+    <string name="create_error" msgid="3735649141335444215">"Složku se nepodařilo vytvořit"</string>
+    <string name="query_error" msgid="1222448261663503501">"Seznam dokumentů se nepodařilo načíst"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Poslední"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Volný prostor: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Služby úložiště"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Klávesové zkratky"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Zařízení"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Další aplikace"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Zobrazit pokročilá zařízení"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Zobrazit velikost souboru"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Zobrazit velikost zařízení"</string>
+    <string name="empty" msgid="7858882803708117596">"Žádné položky"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Soubor nelze otevřít"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Některé dokumenty nelze smazat"</string>
+    <string name="share_via" msgid="8966594246261344259">"Sdílet pomocí"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-da/strings.xml b/packages/DocumentsUI/res/values-da/strings.xml
new file mode 100644
index 0000000..7ae5d1e
--- /dev/null
+++ b/packages/DocumentsUI/res/values-da/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenter"</string>
+    <string name="title_open" msgid="4353228937663917801">"Åbn fra"</string>
+    <string name="title_save" msgid="2433679664882857999">"Gem på"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Opret mappe"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Gittervisning"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Listevisning"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sortér efter"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Søg"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Indstillinger"</string>
+    <string name="menu_open" msgid="432922957274920903">"Åbn"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Gem"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Del"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Slet"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Vælg \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> er valgt"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Efter navn"</string>
+    <string name="sort_date" msgid="586080032956151448">"Efter ændringsdato"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Efter størrelse"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Vis rødder"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Skjul rødder"</string>
+    <string name="save_error" msgid="6167009778003223664">"Dokumentet kunne ikke gemmes"</string>
+    <string name="create_error" msgid="3735649141335444215">"Mappen kunne ikke oprettes"</string>
+    <string name="query_error" msgid="1222448261663503501">"Dokumenterne kunne ikke forespørges."</string>
+    <string name="root_recent" msgid="4470053704320518133">"Seneste"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledig plads"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Lagringstjenester"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Genveje"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Enheder"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Flere apps"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Vis avancerede enheder"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Vis filstørrelse"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Vis enhedens størrelse"</string>
+    <string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Filen kan ikke åbnes"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Nogle dokumenter kan ikke slettes"</string>
+    <string name="share_via" msgid="8966594246261344259">"Del via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-de/strings.xml b/packages/DocumentsUI/res/values-de/strings.xml
new file mode 100644
index 0000000..98c1787
--- /dev/null
+++ b/packages/DocumentsUI/res/values-de/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumente"</string>
+    <string name="title_open" msgid="4353228937663917801">"Öffnen von"</string>
+    <string name="title_save" msgid="2433679664882857999">"Speichern unter"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Ordner erstellen"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Rasteransicht"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Listenansicht"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sortieren nach"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Suchen"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Einstellungen"</string>
+    <string name="menu_open" msgid="432922957274920903">"Öffnen"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Speichern"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Teilen"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Löschen"</string>
+    <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" auswählen"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ausgewählt"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Nach Name"</string>
+    <string name="sort_date" msgid="586080032956151448">"Nach Änderungsdatum"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Nach Größe"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Root-Verzeichnis anzeigen"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Root-Verzeichnis ausblenden"</string>
+    <string name="save_error" msgid="6167009778003223664">"Dokument konnte nicht gespeichert werden."</string>
+    <string name="create_error" msgid="3735649141335444215">"Ordner konnte nicht erstellt werden."</string>
+    <string name="query_error" msgid="1222448261663503501">"Fehler bei der Anforderung von Dokumenten"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Letzte"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> verfügbar"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Speicherdienste"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Verknüpfungen"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Geräte"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Weitere Apps"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Erweiterte Geräte anzeigen"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Dateigröße anzeigen"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Geräteabmessungen anzeigen"</string>
+    <string name="empty" msgid="7858882803708117596">"Keine Dokumente"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Datei kann nicht geöffnet werden."</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Einige Dokumente konnten nicht gelöscht werden."</string>
+    <string name="share_via" msgid="8966594246261344259">"Teilen über"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml
new file mode 100644
index 0000000..f0f7e10
--- /dev/null
+++ b/packages/DocumentsUI/res/values-el/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Έγγραφα"</string>
+    <string name="title_open" msgid="4353228937663917801">"Άνοιγμα από"</string>
+    <string name="title_save" msgid="2433679664882857999">"Αποθήκευση σε"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Δημιουργία φακέλου"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Προβολή πλέγματος"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Προβολή λίστας"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Ταξινόμηση κατά"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Αναζήτηση"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Ρυθμίσεις"</string>
+    <string name="menu_open" msgid="432922957274920903">"Άνοιγμα"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Αποθήκευση"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Κοινοποίηση"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Διαγραφή"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Επιλογή \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Επιλέχθηκαν <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Κατά όνομα"</string>
+    <string name="sort_date" msgid="586080032956151448">"Κατά ημερομηνία τροποποίησης"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Κατά μέγεθος"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Εμφάνιση ρίζας"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Απόκρυψη ρίζας"</string>
+    <string name="save_error" msgid="6167009778003223664">"Αποτυχία αποθήκευσης του εγγράφου"</string>
+    <string name="create_error" msgid="3735649141335444215">"Αποτυχία δημιουργίας φακέλου"</string>
+    <string name="query_error" msgid="1222448261663503501">"Αποτυχία υποβολής  ερωτήματος για έγγραφα"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Πρόσφατα"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ελεύθερα"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Υπηρεσίες αποθήκευσης"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Συντομεύσεις"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Συσκευές"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Περισσότερες εφαρμογές"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Εμφάνιση προηγμένων συσκευών"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Εμφάνιση μεγέθους αρχείου"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Εμφάνιση μεγέθους συσκευής"</string>
+    <string name="empty" msgid="7858882803708117596">"Δεν υπάρχουν στοιχεία"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Δεν είναι δυνατό το άνοιγμα του αρχείου"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Δεν είναι δυνατή η διαγραφή ορισμένων εγγράφων"</string>
+    <string name="share_via" msgid="8966594246261344259">"Κοινοποίηση μέσω"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-en-rGB/strings.xml b/packages/DocumentsUI/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..d2af473
--- /dev/null
+++ b/packages/DocumentsUI/res/values-en-rGB/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documents"</string>
+    <string name="title_open" msgid="4353228937663917801">"Open from"</string>
+    <string name="title_save" msgid="2433679664882857999">"Save to"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Create folder"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Grid view"</string>
+    <string name="menu_list" msgid="7279285939892417279">"List view"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sort by"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Search"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Settings"</string>
+    <string name="menu_open" msgid="432922957274920903">"Open"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Save"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Share"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Select \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selected"</string>
+    <string name="sort_name" msgid="9183560467917256779">"By name"</string>
+    <string name="sort_date" msgid="586080032956151448">"By date modified"</string>
+    <string name="sort_size" msgid="3350681319735474741">"By size"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Show roots"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
+    <string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
+    <string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
+    <string name="query_error" msgid="1222448261663503501">"Failed to query documents"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Display advanced devices"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Display file size"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Display device size"</string>
+    <string name="empty" msgid="7858882803708117596">"No items"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
+    <string name="share_via" msgid="8966594246261344259">"Share via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-en-rIN/strings.xml b/packages/DocumentsUI/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..d2af473
--- /dev/null
+++ b/packages/DocumentsUI/res/values-en-rIN/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documents"</string>
+    <string name="title_open" msgid="4353228937663917801">"Open from"</string>
+    <string name="title_save" msgid="2433679664882857999">"Save to"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Create folder"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Grid view"</string>
+    <string name="menu_list" msgid="7279285939892417279">"List view"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sort by"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Search"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Settings"</string>
+    <string name="menu_open" msgid="432922957274920903">"Open"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Save"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Share"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Delete"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Select \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selected"</string>
+    <string name="sort_name" msgid="9183560467917256779">"By name"</string>
+    <string name="sort_date" msgid="586080032956151448">"By date modified"</string>
+    <string name="sort_size" msgid="3350681319735474741">"By size"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Show roots"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Hide roots"</string>
+    <string name="save_error" msgid="6167009778003223664">"Failed to save document"</string>
+    <string name="create_error" msgid="3735649141335444215">"Failed to create folder"</string>
+    <string name="query_error" msgid="1222448261663503501">"Failed to query documents"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> free"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Storage services"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Shortcuts"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Devices"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"More apps"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Display advanced devices"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Display file size"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Display device size"</string>
+    <string name="empty" msgid="7858882803708117596">"No items"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Cannot open file"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Unable to delete some documents"</string>
+    <string name="share_via" msgid="8966594246261344259">"Share via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-es-rUS/strings.xml b/packages/DocumentsUI/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..daf18cf
--- /dev/null
+++ b/packages/DocumentsUI/res/values-es-rUS/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documentos"</string>
+    <string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
+    <string name="title_save" msgid="2433679664882857999">"Guardar en"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Crear carpeta"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Vista de cuadrícula"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Vista de lista"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Ordenar por"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Buscar"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Configuración"</string>
+    <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Seleccionar \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> seleccionado(s)"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Por nombre"</string>
+    <string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Mostrar raíces"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ocultar raíces"</string>
+    <string name="save_error" msgid="6167009778003223664">"Error al guardar el documento"</string>
+    <string name="create_error" msgid="3735649141335444215">"Error al crear la carpeta"</string>
+    <string name="query_error" msgid="1222448261663503501">"Error al consultar documentos"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recientes"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> de espacio libre"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Almacenamiento"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Accesos directos"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Mostrar dispositivos avanzados"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Mostrar tamaño del archivo"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Mostrar tamaño del dispositivo"</string>
+    <string name="empty" msgid="7858882803708117596">"Sin elementos"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"No se puede abrir el archivo."</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos."</string>
+    <string name="share_via" msgid="8966594246261344259">"Compartir mediante"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml
new file mode 100644
index 0000000..573ee41
--- /dev/null
+++ b/packages/DocumentsUI/res/values-es/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documentos"</string>
+    <string name="title_open" msgid="4353228937663917801">"Abrir desde"</string>
+    <string name="title_save" msgid="2433679664882857999">"Guardar en"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Crear carpeta"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Vista de cuadrícula"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Vista de lista"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Ordenar por"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Buscar"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Ajustes"</string>
+    <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Compartir"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Selecciona \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Seleccionado: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Por nombre"</string>
+    <string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Por tamaño"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Mostrar raíces"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ocultar raíces"</string>
+    <string name="save_error" msgid="6167009778003223664">"Error al guardar documento"</string>
+    <string name="create_error" msgid="3735649141335444215">"Error al crear la carpeta"</string>
+    <string name="query_error" msgid="1222448261663503501">"Error al consultar lista de documentos"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Reciente"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> de espacio libre"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Servicios almacenamiento"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Accesos directos"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Más aplicaciones"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Mostrar dispositivos avanzados"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Mostrar tamaño del archivo"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Mostrar tamaño del dispositivo"</string>
+    <string name="empty" msgid="7858882803708117596">"Sin elementos"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Error al abrir el archivo"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"No es posible eliminar algunos documentos"</string>
+    <string name="share_via" msgid="8966594246261344259">"Compartir a través de"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..dae965a0
--- /dev/null
+++ b/packages/DocumentsUI/res/values-et-rEE/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumendid"</string>
+    <string name="title_open" msgid="4353228937663917801">"Ava:"</string>
+    <string name="title_save" msgid="2433679664882857999">"Salvesta:"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Loo kaust"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Ruudustikkuva"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Loendikuva"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sortimisalus:"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Otsing"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Seaded"</string>
+    <string name="menu_open" msgid="432922957274920903">"Ava"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Salvesta"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Jaga"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Kustuta"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Kataloogi „<xliff:g id="DIRECTORY">^1</xliff:g>” valimine"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> on valitud"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Nime järgi"</string>
+    <string name="sort_date" msgid="586080032956151448">"Muutmiskuupäeva järgi"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Suuruse järgi"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Kuva juured"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Peida juured"</string>
+    <string name="save_error" msgid="6167009778003223664">"Dokumendi salvestamine ebaõnnestus"</string>
+    <string name="create_error" msgid="3735649141335444215">"Kausta loomine ebaõnnestus"</string>
+    <string name="query_error" msgid="1222448261663503501">"Dokumentide päring ebaõnnestus"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Hiljutised"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> on vaba"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Mäluruumi teenused"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Otseteed"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Seadmed"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Rohkem rakendusi"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Kuva tippseadmed"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Kuva faili suurus"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Kuva seadme suurus"</string>
+    <string name="empty" msgid="7858882803708117596">"Üksusi ei ole"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Faili ei saa avada"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Mõnda dokumenti ei õnnestu kustutada"</string>
+    <string name="share_via" msgid="8966594246261344259">"Jagage teenusega"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-fa/strings.xml b/packages/DocumentsUI/res/values-fa/strings.xml
new file mode 100644
index 0000000..a646eda
--- /dev/null
+++ b/packages/DocumentsUI/res/values-fa/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"اسناد"</string>
+    <string name="title_open" msgid="4353228937663917801">"باز کردن از"</string>
+    <string name="title_save" msgid="2433679664882857999">"ذخیره در"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"ایجاد پوشه"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"نمای جدولی"</string>
+    <string name="menu_list" msgid="7279285939892417279">"نمای فهرست‌وار"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"مرتب‌سازی بر اساس"</string>
+    <string name="menu_search" msgid="3816712084502856974">"جستجو"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"تنظیمات"</string>
+    <string name="menu_open" msgid="432922957274920903">"باز کردن"</string>
+    <string name="menu_save" msgid="2394743337684426338">"ذخیره"</string>
+    <string name="menu_share" msgid="3075149983979628146">"اشتراک‌گذاری"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"حذف"</string>
+    <string name="menu_select" msgid="8711270657353563424">"انتخاب «<xliff:g id="DIRECTORY">^1</xliff:g>»"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> انتخاب شد"</string>
+    <string name="sort_name" msgid="9183560467917256779">"بر اساس نام"</string>
+    <string name="sort_date" msgid="586080032956151448">"بر اساس تاریخ اصلاح"</string>
+    <string name="sort_size" msgid="3350681319735474741">"بر اساس اندازه"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"نمایش ریشه‌ها"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"پنهان کردن ریشه‌ها"</string>
+    <string name="save_error" msgid="6167009778003223664">"ذخیره سند انجام نشد"</string>
+    <string name="create_error" msgid="3735649141335444215">"ایجاد پوشه انجام نشد"</string>
+    <string name="query_error" msgid="1222448261663503501">"جستجوی اسناد ناموفق بود"</string>
+    <string name="root_recent" msgid="4470053704320518133">"اخیر"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> آزاد"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"خدمات ذخیره‌سازی"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"میانبرها"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"دستگاه‌ها"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"برنامه‌های بیشتر"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"نمایش دستگاه‌های پیشرفته"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"نمایش اندازه فایل"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"نمایش اندازه صفحه نمایش"</string>
+    <string name="empty" msgid="7858882803708117596">"موردی موجود نیست"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"فایل باز نمی‌شود"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"برخی از اسناد حذف نمی‌شوند"</string>
+    <string name="share_via" msgid="8966594246261344259">"اشتراک‌گذاری از طریق"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-fi/strings.xml b/packages/DocumentsUI/res/values-fi/strings.xml
new file mode 100644
index 0000000..aa118ed
--- /dev/null
+++ b/packages/DocumentsUI/res/values-fi/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Asiakirjat"</string>
+    <string name="title_open" msgid="4353228937663917801">"Avoinna alkaen"</string>
+    <string name="title_save" msgid="2433679664882857999">"Tallenna kohteeseen"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Luo kansio"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Ruudukkonäkymä"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Luettelonäkymä"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Lajitteluperuste"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Haku"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Asetukset"</string>
+    <string name="menu_open" msgid="432922957274920903">"Avaa"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Tallenna"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Jaa"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Poista"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Valitse <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> valittua"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Nimen mukaan"</string>
+    <string name="sort_date" msgid="586080032956151448">"Muokkauspäivän mukaan"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Koon mukaan"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Näytä juuret"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Piilota juuret"</string>
+    <string name="save_error" msgid="6167009778003223664">"Asiakirjan tallennus epäonnistui"</string>
+    <string name="create_error" msgid="3735649141335444215">"Kansion luominen epäonnistui"</string>
+    <string name="query_error" msgid="1222448261663503501">"Dokumenttikysely epäonnistui"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Viimeisimmät"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> vapaana"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Tallennuspalvelut"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Pikakuvakkeet"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Laitteet"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Lisää sovelluksia"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Näytä kehittyneet laitteet"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Näytä tiedoston koko"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Näytä laitteen koko"</string>
+    <string name="empty" msgid="7858882803708117596">"Ei kohteita"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Tiedostoa ei voi avata"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Joitakin asiakirjoja ei voi poistaa"</string>
+    <string name="share_via" msgid="8966594246261344259">"Jaa sovelluksessa"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..b370a1e
--- /dev/null
+++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documents"</string>
+    <string name="title_open" msgid="4353228937663917801">"Ouvert à partir de"</string>
+    <string name="title_save" msgid="2433679664882857999">"Enregistrer dans"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Créer un dossier"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Grille"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Liste"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Trier par"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Rechercher"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Paramètres"</string>
+    <string name="menu_open" msgid="432922957274920903">"Ouvrir"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Partager"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Sélectionner « <xliff:g id="DIRECTORY">^1</xliff:g> »"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> sélectionné(s)"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Par nom"</string>
+    <string name="sort_date" msgid="586080032956151448">"Par date de modification"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Par taille"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Afficher les racines"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Masquer les racines"</string>
+    <string name="save_error" msgid="6167009778003223664">"Échec de l\'enregistrement du document"</string>
+    <string name="create_error" msgid="3735649141335444215">"Échec de la création du dossier"</string>
+    <string name="query_error" msgid="1222448261663503501">"Échec de la demande de document"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Récents"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> disponible"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Services de stockage"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Raccourcis"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Plus d\'applications"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Afficher les appareils avancés"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Afficher la taille du fichier"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Taille de l\'écran de l\'appareil"</string>
+    <string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Impossible d\'ouvrir le fichier"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents"</string>
+    <string name="share_via" msgid="8966594246261344259">"Partager par"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-fr/strings.xml b/packages/DocumentsUI/res/values-fr/strings.xml
new file mode 100644
index 0000000..070b130
--- /dev/null
+++ b/packages/DocumentsUI/res/values-fr/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documents"</string>
+    <string name="title_open" msgid="4353228937663917801">"Ouvrir à partir de"</string>
+    <string name="title_save" msgid="2433679664882857999">"Enregistrer sous"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Créer un dossier"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Grille"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Liste"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Trier par"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Rechercher"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Paramètres"</string>
+    <string name="menu_open" msgid="432922957274920903">"Ouvrir"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Enregistrer"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Partager"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Sélectionner \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> élément(s) sélectionné(s)"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Par nom"</string>
+    <string name="sort_date" msgid="586080032956151448">"Par date de modification"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Par taille"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Afficher les répertoires racines"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Masquer les répertoires racines"</string>
+    <string name="save_error" msgid="6167009778003223664">"Échec de l\'enregistrement du document."</string>
+    <string name="create_error" msgid="3735649141335444215">"Échec de la création du dossier."</string>
+    <string name="query_error" msgid="1222448261663503501">"Échec de la demande de documents."</string>
+    <string name="root_recent" msgid="4470053704320518133">"Récents"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Espace disponible : <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Services de stockage"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Raccourcis"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Appareils"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Autres applications"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Afficher les appareils avancés"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Afficher la taille des fichiers"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Afficher la capacité de stockage des appareils"</string>
+    <string name="empty" msgid="7858882803708117596">"Aucun élément"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Impossible d\'ouvrir le fichier."</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Impossible de supprimer certains documents."</string>
+    <string name="share_via" msgid="8966594246261344259">"Partager via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-hi/strings.xml b/packages/DocumentsUI/res/values-hi/strings.xml
new file mode 100644
index 0000000..66c707e
--- /dev/null
+++ b/packages/DocumentsUI/res/values-hi/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"दस्तावेज़"</string>
+    <string name="title_open" msgid="4353228937663917801">"यहां से खोलें"</string>
+    <string name="title_save" msgid="2433679664882857999">"यहां सहेजें"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"फ़ोल्डर बनाएं"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"ग्रिड दृश्य"</string>
+    <string name="menu_list" msgid="7279285939892417279">"सूची दृश्य"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"इससे क्रमित करें"</string>
+    <string name="menu_search" msgid="3816712084502856974">"खोजें"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"सेटिंग"</string>
+    <string name="menu_open" msgid="432922957274920903">"खोलें"</string>
+    <string name="menu_save" msgid="2394743337684426338">"सहेजें"</string>
+    <string name="menu_share" msgid="3075149983979628146">"साझा करें"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"हटाएं"</string>
+    <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" चुनें"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> चयनित"</string>
+    <string name="sort_name" msgid="9183560467917256779">"नाम के अनुसार"</string>
+    <string name="sort_date" msgid="586080032956151448">"बदलाव के दिनांक के अनुसार"</string>
+    <string name="sort_size" msgid="3350681319735474741">"आकार के अनुसार"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"रूट दिखाएं"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"रूट छिपाएं"</string>
+    <string name="save_error" msgid="6167009778003223664">"दस्तावेज़ सहेजने में विफल रहा"</string>
+    <string name="create_error" msgid="3735649141335444215">"फ़ोल्डर बनाने में विफल"</string>
+    <string name="query_error" msgid="1222448261663503501">"दस्तावेजों के लिए क्वेरी करने में विफल रहा"</string>
+    <string name="root_recent" msgid="4470053704320518133">"हाल ही के"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> रिक्त"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"संग्रहण सेवाएं"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"शॉर्टकट"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"उपकरण"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"अधिक ऐप्स"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"उन्नत उपकरणों को दिखाएं"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"फ़ाइल का आकार दिखाएं"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"उपकरण का आकार दिखाएं"</string>
+    <string name="empty" msgid="7858882803708117596">"कोई आइटम नहीं"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"फ़ाइल नहीं खोली जा सकती"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"कुछ दस्तावेज़ों को हटाने में अक्षम"</string>
+    <string name="share_via" msgid="8966594246261344259">"इसके द्वारा साझा करें"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-hr/strings.xml b/packages/DocumentsUI/res/values-hr/strings.xml
new file mode 100644
index 0000000..3438e73
--- /dev/null
+++ b/packages/DocumentsUI/res/values-hr/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenti"</string>
+    <string name="title_open" msgid="4353228937663917801">"Otvori iz"</string>
+    <string name="title_save" msgid="2433679664882857999">"Spremi u"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Izradi mapu"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Prikaz rešetke"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Prikaz popisa"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Poredano po"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Pretraživanje"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Postavke"</string>
+    <string name="menu_open" msgid="432922957274920903">"Otvaranje"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Spremi"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Dijeli"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Odaberi \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Odabrano: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Po korisniku"</string>
+    <string name="sort_date" msgid="586080032956151448">"Po datumu izmjene"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Po veličini"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Prikaži korijene"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Sakrij korijene"</string>
+    <string name="save_error" msgid="6167009778003223664">"Nije uspjelo spremanje dokumenta"</string>
+    <string name="create_error" msgid="3735649141335444215">"Izrada mape nije uspjela"</string>
+    <string name="query_error" msgid="1222448261663503501">"Traženje dokumenata nije uspjelo"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Nedavno"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> besplatno"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Usluge pohrane"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Prečaci"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Uređaji"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Više aplikacija"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Prikaži napredne uređaje"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Prikaži veličinu datoteke"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Prikaži veličinu uređaja"</string>
+    <string name="empty" msgid="7858882803708117596">"Nema stavki"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Datoteku nije moguće otvoriti"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Nije moguće izbrisati neke dokumente"</string>
+    <string name="share_via" msgid="8966594246261344259">"Dijeli putem"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml
new file mode 100644
index 0000000..2af559b
--- /dev/null
+++ b/packages/DocumentsUI/res/values-hu/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumentumok"</string>
+    <string name="title_open" msgid="4353228937663917801">"Megnyitás innen"</string>
+    <string name="title_save" msgid="2433679664882857999">"Mentés ide"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Mappa létrehozása"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Rács"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Lista"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Rendezés"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Keresés"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Beállítások"</string>
+    <string name="menu_open" msgid="432922957274920903">"Megnyitás"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Mentés"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Megosztás"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Törlés"</string>
+    <string name="menu_select" msgid="8711270657353563424">"A(z) „<xliff:g id="DIRECTORY">^1</xliff:g>” mappa kiválasztása"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> kiválasztva"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Név szerint"</string>
+    <string name="sort_date" msgid="586080032956151448">"Módosítás dátuma szerint"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Méret szerint"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Gyökérszint megjelenítése"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Gyökérszint elrejtése"</string>
+    <string name="save_error" msgid="6167009778003223664">"Nem sikerült menteni a dokumentumot"</string>
+    <string name="create_error" msgid="3735649141335444215">"Nem sikerült létrehozni a mappát"</string>
+    <string name="query_error" msgid="1222448261663503501">"A dokumentumok lekérése nem sikerült"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Legutóbbiak"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> szabad"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Tárhelyszolgáltatások"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Parancsikonok"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Eszközök"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"További alkalmazások"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Speciális eszközök megjelenítése"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Fájlméret megjelenítése"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Eszközméret megjelenítése"</string>
+    <string name="empty" msgid="7858882803708117596">"Nincsenek elemek"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"A fájlt nem lehet megnyitni"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Néhány dokumentumot nem lehet törölni"</string>
+    <string name="share_via" msgid="8966594246261344259">"Megosztás itt:"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..67a1f7e
--- /dev/null
+++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Փաստաթղթեր"</string>
+    <string name="title_open" msgid="4353228937663917801">"Բացել այստեղից"</string>
+    <string name="title_save" msgid="2433679664882857999">"Պահել այստեղ"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Ստեղծել թղթապանակ"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Ցանցային տեսք"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Ցուցակի տեսք"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Դասավորել ըստ"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Որոնել"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Կարգավորումներ"</string>
+    <string name="menu_open" msgid="432922957274920903">"Բացել"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Պահել"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Համօգտագործել"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Ջնջել"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Ընտրել «<xliff:g id="DIRECTORY">^1</xliff:g>»"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ընտրված"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Ըստ անվան"</string>
+    <string name="sort_date" msgid="586080032956151448">"Ըստ փոփոխման ամսաթվի"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Ըստ չափի"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Ցույց տալ արմատները"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Թաքցնել արմատները"</string>
+    <string name="save_error" msgid="6167009778003223664">"Չհաջողվեց պահել փաստաթուղթը"</string>
+    <string name="create_error" msgid="3735649141335444215">"Չհաջողվեց ստեղծել թղթապանակը"</string>
+    <string name="query_error" msgid="1222448261663503501">"Փաստաթղթերին հարցում կատարելիս սխալ տեղի ունեցավ"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Վերջին"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ազատ է"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Պահուստի ծառայություններ"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Դյուրանցումներ"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Սարքեր"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Հավելյալ ծրագրեր"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Ցուցադրել ընդլայնված սարքերը"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Ցուցադրել ֆայլի չափը"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Ցուցադրել սարքի չափը"</string>
+    <string name="empty" msgid="7858882803708117596">"Տարրեր չկան"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Հնարավոր չէ բացել ֆայլը"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Անհնար է ջնջել որոշ փաստաթղթեր"</string>
+    <string name="share_via" msgid="8966594246261344259">"Տարածել"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-in/strings.xml b/packages/DocumentsUI/res/values-in/strings.xml
new file mode 100644
index 0000000..62057c7
--- /dev/null
+++ b/packages/DocumentsUI/res/values-in/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumen"</string>
+    <string name="title_open" msgid="4353228937663917801">"Buka dari"</string>
+    <string name="title_save" msgid="2433679664882857999">"Simpan ke"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Buat folder"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Tampilan kisi"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Tampilan daftar"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Urutkan menurut"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Telusuri"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Setelan"</string>
+    <string name="menu_open" msgid="432922957274920903">"Buka"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Simpan"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Bagikan"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Hapus"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Pilih \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> dipilih"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Menurut nama"</string>
+    <string name="sort_date" msgid="586080032956151448">"Menurut tanggal diubah"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Menurut ukuran"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Tampilkan akar"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Sembunyikan akar"</string>
+    <string name="save_error" msgid="6167009778003223664">"Gagal menyimpan dokumen"</string>
+    <string name="create_error" msgid="3735649141335444215">"Gagal membuat folder"</string>
+    <string name="query_error" msgid="1222448261663503501">"Gagal mengirim kueri untuk dokumen"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Terkini"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bebas"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Layanan penyimpanan"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Pintasan"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Perangkat"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Aplikasi lain"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Tampilkan perangkat lanjutan"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Tampilkan ukuran file"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Tampilkan ukuran perangkat"</string>
+    <string name="empty" msgid="7858882803708117596">"Tidak ada item"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Tidak dapat membuka file"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat menghapus beberapa dokumen"</string>
+    <string name="share_via" msgid="8966594246261344259">"Bagikan melalui"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-it/strings.xml b/packages/DocumentsUI/res/values-it/strings.xml
new file mode 100644
index 0000000..bec4d00
--- /dev/null
+++ b/packages/DocumentsUI/res/values-it/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documenti"</string>
+    <string name="title_open" msgid="4353228937663917801">"Apri da"</string>
+    <string name="title_save" msgid="2433679664882857999">"Salva in"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Crea cartella"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Visualizzazione griglia"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Visualizzazione elenco"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Ordina per"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Cerca"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Impostazioni"</string>
+    <string name="menu_open" msgid="432922957274920903">"Apri"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Salva"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Condividi"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Elimina"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Seleziona \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selezionati"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Per nome"</string>
+    <string name="sort_date" msgid="586080032956151448">"Per data di modifica"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Per dimensioni"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Mostra nodi principali"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Nascondi nodi principali"</string>
+    <string name="save_error" msgid="6167009778003223664">"Impossibile salvare il documento"</string>
+    <string name="create_error" msgid="3735649141335444215">"Impossibile creare la cartella"</string>
+    <string name="query_error" msgid="1222448261663503501">"Impossibile chiedere documenti"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recenti"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> liberi"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Servizi di archiviazione"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Scorciatoie"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Dispositivi"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Altre app"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Visualizza dispositivi avanzati"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Visualizza dimensioni file"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Visualizza dimensioni dispositivi"</string>
+    <string name="empty" msgid="7858882803708117596">"Nessun articolo"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Impossibile aprire il file"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Impossibile eliminare alcuni documenti"</string>
+    <string name="share_via" msgid="8966594246261344259">"Condividi via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-iw/strings.xml b/packages/DocumentsUI/res/values-iw/strings.xml
new file mode 100644
index 0000000..c8a3fb9
--- /dev/null
+++ b/packages/DocumentsUI/res/values-iw/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"מסמכים"</string>
+    <string name="title_open" msgid="4353228937663917801">"פתח מ-"</string>
+    <string name="title_save" msgid="2433679664882857999">"שמור ב-"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"צור תיקיה"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"תצוגת רשת"</string>
+    <string name="menu_list" msgid="7279285939892417279">"תצוגת רשימה"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"מיין לפי"</string>
+    <string name="menu_search" msgid="3816712084502856974">"חפש"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"הגדרות"</string>
+    <string name="menu_open" msgid="432922957274920903">"פתח"</string>
+    <string name="menu_save" msgid="2394743337684426338">"שמור"</string>
+    <string name="menu_share" msgid="3075149983979628146">"שתף"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"מחק"</string>
+    <string name="menu_select" msgid="8711270657353563424">"בחר ב-\"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> נבחרו"</string>
+    <string name="sort_name" msgid="9183560467917256779">"לפי שם"</string>
+    <string name="sort_date" msgid="586080032956151448">"לפי תאריך שינוי"</string>
+    <string name="sort_size" msgid="3350681319735474741">"לפי גודל"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"הצג שורשים"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"הסתר שורשים"</string>
+    <string name="save_error" msgid="6167009778003223664">"שמירת המסמך נכשלה"</string>
+    <string name="create_error" msgid="3735649141335444215">"יצירת התיקיה נכשלה"</string>
+    <string name="query_error" msgid="1222448261663503501">"שאילתת המסמכים נכשלה"</string>
+    <string name="root_recent" msgid="4470053704320518133">"מהזמן האחרון"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> של שטח פנוי"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"שירותי אחסון"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"קיצורי דרך"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"מכשירים"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"עוד אפליקציות"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"הצג מכשירים מתקדמים"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"הצג את גודל הקובץ"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"הצג את גודל המכשיר"</string>
+    <string name="empty" msgid="7858882803708117596">"אין פריטים"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"לא ניתן לפתוח את הקובץ"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"לא ניתן למחוק חלק מהמסמכים"</string>
+    <string name="share_via" msgid="8966594246261344259">"שתף באמצעות"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ja/strings.xml b/packages/DocumentsUI/res/values-ja/strings.xml
new file mode 100644
index 0000000..1475005
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ja/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"ドキュメント"</string>
+    <string name="title_open" msgid="4353228937663917801">"次から開く:"</string>
+    <string name="title_save" msgid="2433679664882857999">"次に保存:"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"フォルダを作成"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"グリッド表示"</string>
+    <string name="menu_list" msgid="7279285939892417279">"リスト表示"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"並べ替え"</string>
+    <string name="menu_search" msgid="3816712084502856974">"検索"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"設定"</string>
+    <string name="menu_open" msgid="432922957274920903">"開く"</string>
+    <string name="menu_save" msgid="2394743337684426338">"保存"</string>
+    <string name="menu_share" msgid="3075149983979628146">"共有"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"削除"</string>
+    <string name="menu_select" msgid="8711270657353563424">"「<xliff:g id="DIRECTORY">^1</xliff:g>」を選択"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g>件選択済み"</string>
+    <string name="sort_name" msgid="9183560467917256779">"名前順"</string>
+    <string name="sort_date" msgid="586080032956151448">"更新日順"</string>
+    <string name="sort_size" msgid="3350681319735474741">"サイズ順"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"ルートを表示する"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"ルートを非表示にする"</string>
+    <string name="save_error" msgid="6167009778003223664">"ドキュメントを保存できませんでした"</string>
+    <string name="create_error" msgid="3735649141335444215">"フォルダを作成できませんでした"</string>
+    <string name="query_error" msgid="1222448261663503501">"ドキュメントのクエリに失敗しました"</string>
+    <string name="root_recent" msgid="4470053704320518133">"最近"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"空き容量: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"ストレージサービス"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"ショートカット"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"端末"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"その他のアプリ"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"端末の詳細設定を表示"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"ファイルのサイズを表示"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"端末のサイズを表示"</string>
+    <string name="empty" msgid="7858882803708117596">"アイテムがありません"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"ファイルを開けません"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"一部のドキュメントを削除できません"</string>
+    <string name="share_via" msgid="8966594246261344259">"共有ツール"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ka-rGE/strings.xml b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..c90768f
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ka-rGE/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"დოკუმენტები"</string>
+    <string name="title_open" msgid="4353228937663917801">"გახსნა აქედან:"</string>
+    <string name="title_save" msgid="2433679664882857999">"შენახვა აქ:"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"საქაღალდის შექმნა"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"ბადის ხედი"</string>
+    <string name="menu_list" msgid="7279285939892417279">"სიის ხედი"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"სორტირება:"</string>
+    <string name="menu_search" msgid="3816712084502856974">"ძიება"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"პარამეტრები"</string>
+    <string name="menu_open" msgid="432922957274920903">"გახსნა"</string>
+    <string name="menu_save" msgid="2394743337684426338">"შენახვა"</string>
+    <string name="menu_share" msgid="3075149983979628146">"გაზიარება"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"წაშლა"</string>
+    <string name="menu_select" msgid="8711270657353563424">"„<xliff:g id="DIRECTORY">^1</xliff:g>“-ის არჩევა"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> მონიშნული"</string>
+    <string name="sort_name" msgid="9183560467917256779">"სახელით"</string>
+    <string name="sort_date" msgid="586080032956151448">"ცვლილების თარიღით"</string>
+    <string name="sort_size" msgid="3350681319735474741">"ზომით"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"ფესვების ჩვენება"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"ფესვების დამალვა"</string>
+    <string name="save_error" msgid="6167009778003223664">"დოკუმენტის შენახვა ვერ მოხერხდა"</string>
+    <string name="create_error" msgid="3735649141335444215">"საქაღალდის შექმნა ვერ მოხერხდა"</string>
+    <string name="query_error" msgid="1222448261663503501">"დოკუმენტებზე მოთხოვნა ვერ გაიგზავნა"</string>
+    <string name="root_recent" msgid="4470053704320518133">"ბოლო"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> თავისუფალია"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"მეხსიერების სერვისები"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"მალსახმობები"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"მოწყობილობები"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"მეტი აპები"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"კომპლექსური მოწყობილობების ჩვენება"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"ფაილის ზომის ჩვენება"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"მოწყობილობის ზომის ჩვენება"</string>
+    <string name="empty" msgid="7858882803708117596">"ერთეულები არ არის"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"ფაილის გახსნა ვერ ხერხდება"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"ზოგიერთი დოკუმენტის წაშლა ვერ ხერხდება"</string>
+    <string name="share_via" msgid="8966594246261344259">"გაზიარება:"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-km-rKH/strings.xml b/packages/DocumentsUI/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..e8944ec
--- /dev/null
+++ b/packages/DocumentsUI/res/values-km-rKH/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"ឯកសារ"</string>
+    <string name="title_open" msgid="4353228937663917801">"បើក​ពី"</string>
+    <string name="title_save" msgid="2433679664882857999">"រក្សា​ទុក​ទៅ"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"បង្កើត​ថត"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"ទិដ្ឋភាព​ក្រឡា"</string>
+    <string name="menu_list" msgid="7279285939892417279">"ទិដ្ឋភាព​បញ្ជី"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"តម្រៀប​តាម"</string>
+    <string name="menu_search" msgid="3816712084502856974">"ស្វែងរក"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"ការ​កំណត់"</string>
+    <string name="menu_open" msgid="432922957274920903">"បើក"</string>
+    <string name="menu_save" msgid="2394743337684426338">"រក្សាទុក"</string>
+    <string name="menu_share" msgid="3075149983979628146">"ចែករំលែក"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"លុប"</string>
+    <string name="menu_select" msgid="8711270657353563424">"ជ្រើស \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"បាន​ជ្រើស <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"តាម​ឈ្មោះ"</string>
+    <string name="sort_date" msgid="586080032956151448">"តាម​កាលបរិច្ឆេទ​បាន​កែប្រែ"</string>
+    <string name="sort_size" msgid="3350681319735474741">"តាម​​ទំហំ"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"បង្ហាញ roots"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"លាក់ roots"</string>
+    <string name="save_error" msgid="6167009778003223664">"បាន​បរាជ័យ​ក្នុង​ការ​រក្សា​ទុក​ឯកសារ"</string>
+    <string name="create_error" msgid="3735649141335444215">"បាន​បរាជ័យ​ក្នុង​ការ​បង្កើត​ថត"</string>
+    <string name="query_error" msgid="1222448261663503501">"បាន​បរាជ័យ​ក្នុង​ការ​​ច្រោះ​ឯកសារ"</string>
+    <string name="root_recent" msgid="4470053704320518133">"ថ្មីៗ"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"ទំនេរ <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"សេវាកម្ម​ផ្ដល់​ឧបករណ៍​ផ្ទុក"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"ផ្លូវកាត់"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"ឧបករណ៍"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"កម្ម​វិធី​​ច្រើន​ទៀត"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"បង្ហាញ​ឧបករណ៍​កម្រិត​ខ្ពស់"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"បង្ហាញ​ទំហំ​ឯកសារ"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"បង្ហាញ​ទំហំ​ឧបករណ៍"</string>
+    <string name="empty" msgid="7858882803708117596">"គ្មានធាតុ"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"មិន​អាច​បើក​ឯកសារ"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"មិន​អាច​លុប​ឯកសារ​មួយ​ចំនួន"</string>
+    <string name="share_via" msgid="8966594246261344259">"ចែករំលែក​តាម"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ko/strings.xml b/packages/DocumentsUI/res/values-ko/strings.xml
new file mode 100644
index 0000000..5996e66
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ko/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"문서"</string>
+    <string name="title_open" msgid="4353228937663917801">"열기:"</string>
+    <string name="title_save" msgid="2433679664882857999">"저장 위치:"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"폴더 만들기"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"바둑판식 보기"</string>
+    <string name="menu_list" msgid="7279285939892417279">"목록 보기"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"정렬 기준"</string>
+    <string name="menu_search" msgid="3816712084502856974">"검색"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"설정"</string>
+    <string name="menu_open" msgid="432922957274920903">"열기"</string>
+    <string name="menu_save" msgid="2394743337684426338">"저장"</string>
+    <string name="menu_share" msgid="3075149983979628146">"공유"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"삭제"</string>
+    <string name="menu_select" msgid="8711270657353563424">"\'<xliff:g id="DIRECTORY">^1</xliff:g>\' 선택"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g>개 선택됨"</string>
+    <string name="sort_name" msgid="9183560467917256779">"이름순"</string>
+    <string name="sort_date" msgid="586080032956151448">"수정된 날짜순"</string>
+    <string name="sort_size" msgid="3350681319735474741">"크기순"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"루트 표시"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"루트 숨기기"</string>
+    <string name="save_error" msgid="6167009778003223664">"문서 저장 실패"</string>
+    <string name="create_error" msgid="3735649141335444215">"폴더를 만들지 못함"</string>
+    <string name="query_error" msgid="1222448261663503501">"문서를 검색하지 못했습니다."</string>
+    <string name="root_recent" msgid="4470053704320518133">"최근"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> 남음"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"저장용량 서비스"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"바로가기"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"기기"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"앱 더보기"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"고급 기기 표시"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"파일 크기 표시"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"기기 크기 표시"</string>
+    <string name="empty" msgid="7858882803708117596">"항목 없음"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"파일을 열 수 없음"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"일부 문서를 삭제할 수 없음"</string>
+    <string name="share_via" msgid="8966594246261344259">"공유 방법"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..8452ae1
--- /dev/null
+++ b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"ເອ​ກະ​ສານ"</string>
+    <string name="title_open" msgid="4353228937663917801">"ເປີດ​ຈາກ"</string>
+    <string name="title_save" msgid="2433679664882857999">"ບັນທຶກໄປທີ່"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"ສ້າງໂຟນເດີ"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"ມຸມມອງແບບຊ່ອງ"</string>
+    <string name="menu_list" msgid="7279285939892417279">"ມຸມມອງແບບລາຍຊື່"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"ຮຽງລຳດັບຕາມ"</string>
+    <string name="menu_search" msgid="3816712084502856974">"ຊອກຫາ"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"ການຕັ້ງຄ່າ"</string>
+    <string name="menu_open" msgid="432922957274920903">"ເປີດ"</string>
+    <string name="menu_save" msgid="2394743337684426338">"ບັນທຶກ"</string>
+    <string name="menu_share" msgid="3075149983979628146">"ແບ່ງປັນ"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"ລຶບ"</string>
+    <string name="menu_select" msgid="8711270657353563424">"ເລືອກ​ \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"ເລືອກແລ້ວ <xliff:g id="COUNT">%1$d</xliff:g> ລາຍການ"</string>
+    <string name="sort_name" msgid="9183560467917256779">"ຕາມຊື່"</string>
+    <string name="sort_date" msgid="586080032956151448">"ຕາມວັນທີທີ່ແກ້ໄຂ"</string>
+    <string name="sort_size" msgid="3350681319735474741">"ຕາມຂະໜາດ"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"ສະແດງ roots"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"ເຊື່ອງ roots"</string>
+    <string name="save_error" msgid="6167009778003223664">"ການບັນທຶກເອກະສານລົ້ມເຫລວ"</string>
+    <string name="create_error" msgid="3735649141335444215">"ການ​ສ້າງ​ໂຟນ​ເດີລົ້ມເຫຼວ"</string>
+    <string name="query_error" msgid="1222448261663503501">"ການຊອກຫາເອກະສານລົ້ມເຫຼວ"</string>
+    <string name="root_recent" msgid="4470053704320518133">"ຫາກໍໃຊ້"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"ຟຣີ <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"ບໍລິການບ່ອນຈັດເກັບຂໍ້ມູນ"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"ທາງລັດ"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"ອຸປະກອນ"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"ແອັບຯອື່ນໆ"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"ສະແດງອຸປະກອນຂັ້ນສູງ"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"ສະແດງຂະໜາດໄຟລ໌"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"ສະແດງຂະໜາດອຸປະກອນ"</string>
+    <string name="empty" msgid="7858882803708117596">"ບໍ່ມີລາຍການ"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"ບໍ່ສາມດາເປີດໄຟລ໌ໄດ້"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"ບໍ່ສາມາດລຶບບາງເອກະສານໄດ້"</string>
+    <string name="share_via" msgid="8966594246261344259">"ແບ່ງປັນຜ່ານ"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-lt/strings.xml b/packages/DocumentsUI/res/values-lt/strings.xml
new file mode 100644
index 0000000..8ec3e0b
--- /dev/null
+++ b/packages/DocumentsUI/res/values-lt/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumentai"</string>
+    <string name="title_open" msgid="4353228937663917801">"Atidaryti iš"</string>
+    <string name="title_save" msgid="2433679664882857999">"Išsaugoti į"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Kurti aplanką"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Tinklelio rodinys"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Sąrašo rodinys"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Rūšiuoti pagal"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Ieškoti"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Nustatymai"</string>
+    <string name="menu_open" msgid="432922957274920903">"Atidaryti"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Išsaugoti"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Bendrinti"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Ištrinti"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Pasirinkti katalogą „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Pasirinkta: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Pagal pavadinimą"</string>
+    <string name="sort_date" msgid="586080032956151448">"Pagal keitimo datą"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Pagal dydį"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Rodyti šaknis"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Slėpti šaknis"</string>
+    <string name="save_error" msgid="6167009778003223664">"Nepavyko išsaugoti dokumento"</string>
+    <string name="create_error" msgid="3735649141335444215">"Nepavyko sukurti aplanko"</string>
+    <string name="query_error" msgid="1222448261663503501">"Nepavyko pateikti dokumentų užklausų"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Naujausi"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Laisvos vietos: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Saugyklos paslaugos"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Spartieji klavišai"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Įrenginiai"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Daugiau programų"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Rodyti išplėstinius įrenginius"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Rodyti failo dydį"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Rodyti įrenginio dydį"</string>
+    <string name="empty" msgid="7858882803708117596">"Nėra elementų"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Nepavyksta atidaryti failo"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Nepavyko ištrinti kai kurių dokumentų"</string>
+    <string name="share_via" msgid="8966594246261344259">"Bendrinti naudojant"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-lv/strings.xml b/packages/DocumentsUI/res/values-lv/strings.xml
new file mode 100644
index 0000000..caaf8ec
--- /dev/null
+++ b/packages/DocumentsUI/res/values-lv/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenti"</string>
+    <string name="title_open" msgid="4353228937663917801">"Atvēršana no:"</string>
+    <string name="title_save" msgid="2433679664882857999">"Saglabāšana:"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Izveidot mapi"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Režģis"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Saraksts"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Kārtot pēc"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Meklēt"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Iestatījumi"</string>
+    <string name="menu_open" msgid="432922957274920903">"Atvērt"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Saglabāt"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Kopīgot"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Dzēst"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Atlasīt “<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Atlasīts: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Pēc nosaukuma"</string>
+    <string name="sort_date" msgid="586080032956151448">"Pēc pārveidošanas datuma"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Pēc lieluma"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Rādīt saknes"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Slēpt saknes"</string>
+    <string name="save_error" msgid="6167009778003223664">"Neizdevās saglabāt dokumentu."</string>
+    <string name="create_error" msgid="3735649141335444215">"Neizdevās izveidot mapi."</string>
+    <string name="query_error" msgid="1222448261663503501">"Neizdevās atrast vaicājumā norādītos dokumentus."</string>
+    <string name="root_recent" msgid="4470053704320518133">"Pēdējie"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Brīva vieta: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Glabāšanas pakalpojumi"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Saīsnes"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Ierīces"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Vairāk lietotņu"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Attēlot papildu ierīces"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Attēlot faila lielumu"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Attēlot ierīces izmēru"</string>
+    <string name="empty" msgid="7858882803708117596">"Nav vienumu"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Nevar atvērt failu."</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Nevar dzēst dažus dokumentus."</string>
+    <string name="share_via" msgid="8966594246261344259">"Kopīgot, izmantojot"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-mn-rMN/strings.xml b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..3d90cc1
--- /dev/null
+++ b/packages/DocumentsUI/res/values-mn-rMN/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Документүүд"</string>
+    <string name="title_open" msgid="4353228937663917801">"Нээх"</string>
+    <string name="title_save" msgid="2433679664882857999">"Хадгалах"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Фолдер үүсгэх"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Эгнүүлж харах"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Жагсааж харах"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Эрэмбэлэх"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Хайх"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Тохиргоо"</string>
+    <string name="menu_open" msgid="432922957274920903">"Нээх"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Хадгалах"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Хуваалцах"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Устгах"</string>
+    <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\"-г сонгох"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> сонгогдсон"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Нэрээр"</string>
+    <string name="sort_date" msgid="586080032956151448">"Өөрчлөгдсөн огноогоор"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Хэмжээгээр"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Язгуурыг харуулах"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Язгуурыг нууцлах"</string>
+    <string name="save_error" msgid="6167009778003223664">"Документыг хадгалж чадсангүй"</string>
+    <string name="create_error" msgid="3735649141335444215">"Фолдер үүсгэж чадсангүй"</string>
+    <string name="query_error" msgid="1222448261663503501">"Документын хүсэлт гаргаж чадсангүй"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Саяхны"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> чөлөөтэй"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Сангийн үйлчилгээ"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Товчлол"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Төхөөрөмжүүд"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Өөр апп-ууд"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Дэвшилтэт төхөөрөмжүүдийг харуулах"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Файлын хэмжээг харуулах"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Төхөөрөмжийн хэмжээг харуулах"</string>
+    <string name="empty" msgid="7858882803708117596">"Хоосон"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Файлыг нээх боломжгүй"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Зарим документуудыг устгах боломжгүй"</string>
+    <string name="share_via" msgid="8966594246261344259">"Дараахаар дамжуулан хуваалцах"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ms-rMY/strings.xml b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..9ea7119
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ms-rMY/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumen"</string>
+    <string name="title_open" msgid="4353228937663917801">"Buka dari"</string>
+    <string name="title_save" msgid="2433679664882857999">"Simpan ke"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Buat folder"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Paparan grid"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Paparan senarai"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Isih mengikut"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Cari"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Tetapan"</string>
+    <string name="menu_open" msgid="432922957274920903">"Buka"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Simpan"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Kongsi"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Padam"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Pilih \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> dipilih"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Mengikut nama"</string>
+    <string name="sort_date" msgid="586080032956151448">"Diubah suai mengikut tarikh"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Mengikut saiz"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Tunjukkan akar"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Sembunyikan akar"</string>
+    <string name="save_error" msgid="6167009778003223664">"Gagal menyimpan dokumen"</string>
+    <string name="create_error" msgid="3735649141335444215">"Gagal membuat folder"</string>
+    <string name="query_error" msgid="1222448261663503501">"Gagal menanyakan dokumen"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Terbaharu"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> kosong"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Perkhidmatan storan"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Pintasan"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Peranti"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Lebih banyak apl"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Paparkan peranti terperinci"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Paparkan saiz fail"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Paparkan saiz peranti"</string>
+    <string name="empty" msgid="7858882803708117596">"Tiada item"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Tidak dapat membuka fail"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Tidak dapat memadam beberapa dokumen"</string>
+    <string name="share_via" msgid="8966594246261344259">"Kongsi melalui"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-nb/strings.xml b/packages/DocumentsUI/res/values-nb/strings.xml
new file mode 100644
index 0000000..af7c282
--- /dev/null
+++ b/packages/DocumentsUI/res/values-nb/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenter"</string>
+    <string name="title_open" msgid="4353228937663917801">"Åpne fra"</string>
+    <string name="title_save" msgid="2433679664882857999">"Lagre i"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Opprett en mappe"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Rutenettvisning"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Listevisning"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sortér etter"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Søk"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Innstillinger"</string>
+    <string name="menu_open" msgid="432922957274920903">"Åpne"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Lagre"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Del"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Slett"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Velg «<xliff:g id="DIRECTORY">^1</xliff:g>»"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> valgt"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Etter navn"</string>
+    <string name="sort_date" msgid="586080032956151448">"«Etter dato» endret"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Etter størrelse"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Vis røtter"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Skjul røtter"</string>
+    <string name="save_error" msgid="6167009778003223664">"Kunne ikke lagre dokumentet"</string>
+    <string name="create_error" msgid="3735649141335444215">"Kunne ikke opprette mappen"</string>
+    <string name="query_error" msgid="1222448261663503501">"Kunne ikke undersøke dokumenter"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Siste"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> gratis"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Lagringstjenester"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Snarveier"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Flere apper"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Vis avanserte enheter"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Vis filstørrelse"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Vis enhetsstørrelse"</string>
+    <string name="empty" msgid="7858882803708117596">"Ingen elementer"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Kan ikke åpne filen"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Enkelte dokumenter kunne ikke slettes"</string>
+    <string name="share_via" msgid="8966594246261344259">"Del via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ne-rNP/strings.xml b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..d2606df
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ne-rNP/strings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"कागजातहरू"</string>
+    <string name="title_open" msgid="4353228937663917801">"यसबाट खोल्नुहोस्"</string>
+    <string name="title_save" msgid="2433679664882857999">"यसमा सुरक्षित गर्नुहोस्"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"फोल्डर सिर्जना गर्नुहोस्"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"ग्रिड दृश्य"</string>
+    <string name="menu_list" msgid="7279285939892417279">"सूची दृश्य"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"यसद्वारा क्रमवद्घ गर्नुहोस्"</string>
+    <string name="menu_search" msgid="3816712084502856974">"खोज्नुहोस्"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"सेटिङहरू"</string>
+    <string name="menu_open" msgid="432922957274920903">"खोल्नुहोस्"</string>
+    <string name="menu_save" msgid="2394743337684426338">"सुरक्षित गर्नुहोस्"</string>
+    <string name="menu_share" msgid="3075149983979628146">"साझेदारी गर्नुहोस्"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"मेटाउनुहोस्"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> चयन गरियो"</string>
+    <string name="sort_name" msgid="9183560467917256779">"नाम अनुसार"</string>
+    <string name="sort_date" msgid="586080032956151448">"परिमार्जित मिति अनुसार"</string>
+    <string name="sort_size" msgid="3350681319735474741">"आकार अनुसार"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"मूलहरू देखाउनुहोस्"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"मूलहरू लुकाउनुहोस्"</string>
+    <string name="save_error" msgid="6167009778003223664">"कागजात सुरक्षित गर्न विफल भयो"</string>
+    <string name="root_recent" msgid="4470053704320518133">"हालैको"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> खाली"</string>
+    <!-- no translation found for root_type_service (2178854894416775409) -->
+    <skip />
+    <string name="root_type_shortcut" msgid="3318760609471618093">"सर्टकटहरू"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"उपकरणहरू"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"थप अनुप्रयोगहरू"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"उन्नत उपकरणहरू प्रदर्शन गर्नुहोस्"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"फाइल आकार प्रदर्शन गर्नुहोस्"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"उपकरण आकार प्रदर्शन गर्नुहोस्"</string>
+    <string name="empty" msgid="7858882803708117596">"कुनै वस्तु छैन।"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"फाइल खोल्न सक्दैन"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"केही कागजातहरू मेट्न असमर्थ छ"</string>
+    <string name="share_via" msgid="8966594246261344259">"माध्यमबाट साझेदारी गर्नुहोस्"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-nl/strings.xml b/packages/DocumentsUI/res/values-nl/strings.xml
new file mode 100644
index 0000000..a8cf114
--- /dev/null
+++ b/packages/DocumentsUI/res/values-nl/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documenten"</string>
+    <string name="title_open" msgid="4353228937663917801">"Openen vanuit"</string>
+    <string name="title_save" msgid="2433679664882857999">"Opslaan in"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Map maken"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Rasterweergave"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Lijstweergave"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sorteren op"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Zoeken"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Instellingen"</string>
+    <string name="menu_open" msgid="432922957274920903">"Openen"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Opslaan"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Delen"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Verwijderen"</string>
+    <string name="menu_select" msgid="8711270657353563424">"<xliff:g id="DIRECTORY">^1</xliff:g> selecteren"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> geselecteerd"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Op naam"</string>
+    <string name="sort_date" msgid="586080032956151448">"Op aanpassingsdatum"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Op grootte"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Roots weergeven"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Roots verbergen"</string>
+    <string name="save_error" msgid="6167009778003223664">"Kan document niet opslaan"</string>
+    <string name="create_error" msgid="3735649141335444215">"Kan map niet maken"</string>
+    <string name="query_error" msgid="1222448261663503501">"Kan geen query\'s voor documenten verzenden"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recent"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> vrij"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Opslagservices"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Sneltoetsen"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Apparaten"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Meer apps"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Geavanceerde apparaten weergeven"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Bestandsgrootte weergeven"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Apparaatgrootte weergeven"</string>
+    <string name="empty" msgid="7858882803708117596">"Geen items"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Kan bestand niet openen"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Kan bepaalde documenten niet verwijderen"</string>
+    <string name="share_via" msgid="8966594246261344259">"Delen via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-pl/strings.xml b/packages/DocumentsUI/res/values-pl/strings.xml
new file mode 100644
index 0000000..ead40e9
--- /dev/null
+++ b/packages/DocumentsUI/res/values-pl/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenty"</string>
+    <string name="title_open" msgid="4353228937663917801">"Otwórz z"</string>
+    <string name="title_save" msgid="2433679664882857999">"Zapisz w"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Utwórz folder"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Widok siatki"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Widok listy"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sortuj według"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Szukaj"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Ustawienia"</string>
+    <string name="menu_open" msgid="432922957274920903">"Otwórz"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Zapisz"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Udostępnij"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Usuń"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Zaznacz „<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Wybrano: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Według nazwy"</string>
+    <string name="sort_date" msgid="586080032956151448">"Według daty edycji"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Według rozmiaru"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Pokaż elementy główne"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ukryj elementy główne"</string>
+    <string name="save_error" msgid="6167009778003223664">"Nie udało się zapisać dokumentu"</string>
+    <string name="create_error" msgid="3735649141335444215">"Nie udało się utworzyć folderu"</string>
+    <string name="query_error" msgid="1222448261663503501">"Nie udało się pobrać listy dokumentów"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Ostatnie"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> wolne"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Usługi pamięci masowej"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Skróty"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Urządzenia"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Więcej aplikacji"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Pokaż urządzenia zaawansowane"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Pokaż rozmiar pliku"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Wyświetl rozmiar urządzenia"</string>
+    <string name="empty" msgid="7858882803708117596">"Brak elementów"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Nie można otworzyć pliku"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Nie można usunąć niektórych dokumentów"</string>
+    <string name="share_via" msgid="8966594246261344259">"Udostępnij przez"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-pt-rPT/strings.xml b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..0003c05
--- /dev/null
+++ b/packages/DocumentsUI/res/values-pt-rPT/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documentos"</string>
+    <string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
+    <string name="title_save" msgid="2433679664882857999">"Guardar em"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Criar pasta"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Vista de grelha"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Vista de lista"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Ordenar por"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Pesquisar"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Definições"</string>
+    <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Guardar"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Partilhar"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Eliminar"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Selecionar \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selecionado(s)"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
+    <string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Por tamanho"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Mostrar raízes"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ocultar raízes"</string>
+    <string name="save_error" msgid="6167009778003223664">"Falha ao guardar o documento"</string>
+    <string name="create_error" msgid="3735649141335444215">"Falha ao criar a pasta"</string>
+    <string name="query_error" msgid="1222448261663503501">"Falha ao consultar os documentos"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> espaço livre"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Serv. de armazenamento"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Atalhos"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Mais aplicações"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Ver dispositivos avançados"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Apresentar tamanho do ficheiro"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Apresentar tamanho do dispositivo"</string>
+    <string name="empty" msgid="7858882803708117596">"Sem itens"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Não é possível abrir o ficheiro"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Não é possível eliminar alguns documentos"</string>
+    <string name="share_via" msgid="8966594246261344259">"Partilhar através de"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-pt/strings.xml b/packages/DocumentsUI/res/values-pt/strings.xml
new file mode 100644
index 0000000..4a5c72a
--- /dev/null
+++ b/packages/DocumentsUI/res/values-pt/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documentos"</string>
+    <string name="title_open" msgid="4353228937663917801">"Abrir de"</string>
+    <string name="title_save" msgid="2433679664882857999">"Salvar em"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Criar pasta"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Visualização em grade"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Visualização em lista"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Classificar por"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Pesquisar"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Configurações"</string>
+    <string name="menu_open" msgid="432922957274920903">"Abrir"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Salvar"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Compartilhar"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Excluir"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Selecionar \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selecionados"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Por nome"</string>
+    <string name="sort_date" msgid="586080032956151448">"Por data de modificação"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Por tamanho"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Mostrar raízes"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ocultar raízes"</string>
+    <string name="save_error" msgid="6167009778003223664">"Falha ao salvar o documento"</string>
+    <string name="create_error" msgid="3735649141335444215">"Falha ao criar a pasta"</string>
+    <string name="query_error" msgid="1222448261663503501">"Falha ao consultar documentos"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recentes"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> livres"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Serviços de armazenamento"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Atalhos"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Dispositivos"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Mais aplicativos"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Mostrar dispositivos avançados"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Mostrar tamanho do arquivo"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Mostrar tamanho do dispositivo"</string>
+    <string name="empty" msgid="7858882803708117596">"Nenhum item"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Não é possível abrir o arquivo"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Não foi possível excluir alguns documentos"</string>
+    <string name="share_via" msgid="8966594246261344259">"Compartilhar via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml
new file mode 100644
index 0000000..0dfa11d4
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ro/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Documente"</string>
+    <string name="title_open" msgid="4353228937663917801">"Deschideți din"</string>
+    <string name="title_save" msgid="2433679664882857999">"Salvați în"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Creați un dosar"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Afișare tip grilă"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Afișare tip listă"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sortați după"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Căutați"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Setări"</string>
+    <string name="menu_open" msgid="432922957274920903">"Deschideți"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Salvați"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Distribuiți"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Ștergeți"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Selectați „<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> selectate"</string>
+    <string name="sort_name" msgid="9183560467917256779">"După nume"</string>
+    <string name="sort_date" msgid="586080032956151448">"După data modificării"</string>
+    <string name="sort_size" msgid="3350681319735474741">"După dimensiune"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Afișați directoarele rădăcină"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ascundeți directoarele rădăcină"</string>
+    <string name="save_error" msgid="6167009778003223664">"Salvarea documentului nu a reușit"</string>
+    <string name="create_error" msgid="3735649141335444215">"Eroare la crearea dosarului"</string>
+    <string name="query_error" msgid="1222448261663503501">"Interogarea referitoare la documente nu a reușit"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Recente"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> spațiu liber"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Servicii de stocare"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Comenzi rapide"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Dispozitive"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Alte aplicații"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Afișați dispozitive avansate"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Afișați dimensiunile fișierelor"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Afișați capacitatea de stocare a dispozitivelor"</string>
+    <string name="empty" msgid="7858882803708117596">"Nu există elemente"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Fișierul nu poate fi deschis"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Unele documente nu au putut fi șterse"</string>
+    <string name="share_via" msgid="8966594246261344259">"Distribuiți prin"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-ru/strings.xml b/packages/DocumentsUI/res/values-ru/strings.xml
new file mode 100644
index 0000000..f86a4af
--- /dev/null
+++ b/packages/DocumentsUI/res/values-ru/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Документы"</string>
+    <string name="title_open" msgid="4353228937663917801">"Открыть"</string>
+    <string name="title_save" msgid="2433679664882857999">"Сохранить"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Новая папка"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Таблица"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Список"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Сортировать"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Поиск"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Настройки"</string>
+    <string name="menu_open" msgid="432922957274920903">"Открыть"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Сохранить"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Поделиться"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Удалить"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Выбрать папку \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Выбрано: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"По названию"</string>
+    <string name="sort_date" msgid="586080032956151448">"По дате изменения"</string>
+    <string name="sort_size" msgid="3350681319735474741">"По размеру"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Показать"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Скрыть"</string>
+    <string name="save_error" msgid="6167009778003223664">"Не удалось сохранить документ"</string>
+    <string name="create_error" msgid="3735649141335444215">"Не удалось создать папку"</string>
+    <string name="query_error" msgid="1222448261663503501">"Не удалось отправить запрос"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Недавние"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Свободно <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Службы хранения"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Ярлыки"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Устройства"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Другие приложения"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Показать другие устройства"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Показать размер файла"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Показать размер устройства"</string>
+    <string name="empty" msgid="7858882803708117596">"Ничего нет"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Не удалось открыть файл"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Не удалось удалить некоторые документы"</string>
+    <string name="share_via" msgid="8966594246261344259">"Поделиться"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-si-rLK/strings.xml b/packages/DocumentsUI/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..6263b82
--- /dev/null
+++ b/packages/DocumentsUI/res/values-si-rLK/strings.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"ලේඛන"</string>
+    <string name="title_open" msgid="4353228937663917801">"විවෘත වන්නේ"</string>
+    <string name="title_save" msgid="2433679664882857999">"සුරකින්නේ"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"ෆෝල්ඩරයක් සාදන්න"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"ජාල පෙනුම"</string>
+    <string name="menu_list" msgid="7279285939892417279">"ලැයිස්තු පෙනුම"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"අනුපිළිවෙලට සකසා ඇත්තේ"</string>
+    <string name="menu_search" msgid="3816712084502856974">"සෙවීම"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"සැකසීම්"</string>
+    <string name="menu_open" msgid="432922957274920903">"විවෘත කරන්න"</string>
+    <string name="menu_save" msgid="2394743337684426338">"සුරකින්න"</string>
+    <string name="menu_share" msgid="3075149983979628146">"බෙදාගන්න"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"මකන්න"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ක් තෝරාගන්නා ලදි"</string>
+    <string name="sort_name" msgid="9183560467917256779">"නමින්"</string>
+    <string name="sort_date" msgid="586080032956151448">"වෙනස් කරන ලද දිනයෙන්"</string>
+    <string name="sort_size" msgid="3350681319735474741">"ප්‍රමාණය මගින්"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"මුල් පෙන්වන්න"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"මුල් සඟවන්න"</string>
+    <string name="save_error" msgid="6167009778003223664">"ලේඛනය සුරැකීමට අපොහොසත් විය"</string>
+    <string name="root_recent" msgid="4470053704320518133">"මෑත"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ඉතිරියි"</string>
+    <!-- no translation found for root_type_service (2178854894416775409) -->
+    <skip />
+    <string name="root_type_shortcut" msgid="3318760609471618093">"කෙටිමං"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"උපාංග"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"තවත් යෙදුම්"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"උසස් උපාංග දර්ශනය කරන්න"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"ගොනු ප්‍රමාණය දර්ශනය කරන්න"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"උපාංග ප්‍රමාණය දර්ශනය කරන්න"</string>
+    <string name="empty" msgid="7858882803708117596">"අයිතම නැත"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"ගොනුව විවෘත කළ නොහැක"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"සමහර ලේඛන මැකීමට නොහැකි විය"</string>
+    <string name="share_via" msgid="8966594246261344259">"හරහා බෙදාගන්න"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-sk/strings.xml b/packages/DocumentsUI/res/values-sk/strings.xml
new file mode 100644
index 0000000..5d03df6
--- /dev/null
+++ b/packages/DocumentsUI/res/values-sk/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenty"</string>
+    <string name="title_open" msgid="4353228937663917801">"Otvoriť z"</string>
+    <string name="title_save" msgid="2433679664882857999">"Uložiť do"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Vytvoriť priečinok"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Zobrazenie mriežky"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Zobrazenie zoznamu"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Zoradiť podľa"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Hľadať"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Nastavenia"</string>
+    <string name="menu_open" msgid="432922957274920903">"Otvoriť"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Uložiť"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Zdieľať"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Odstrániť"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Vyberte adresár <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Vybraté: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Podľa názvu"</string>
+    <string name="sort_date" msgid="586080032956151448">"Podľa dátumu zmeny"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Podľa veľkosti"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Zobraziť korene"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Skryť korene"</string>
+    <string name="save_error" msgid="6167009778003223664">"Dokument sa nepodarilo uložiť"</string>
+    <string name="create_error" msgid="3735649141335444215">"Priečinok sa nepodarilo vytvoriť"</string>
+    <string name="query_error" msgid="1222448261663503501">"Zoznam dokumentov sa nepodarilo načítať"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Nedávne"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Voľné: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Služby úložiska"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Skratky"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Zariadenia"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Ďalšie aplikácie"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Zobraziť pokročilé zariadenia"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Zobraziť veľkosť súboru"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Zobraziť veľkosť zariadenia"</string>
+    <string name="empty" msgid="7858882803708117596">"Žiadne položky"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Súbor sa nepodarilo otvoriť"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Niektoré dokumenty sa nepodarilo odstrániť"</string>
+    <string name="share_via" msgid="8966594246261344259">"Zdieľať pomocou"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-sl/strings.xml b/packages/DocumentsUI/res/values-sl/strings.xml
new file mode 100644
index 0000000..b3e52dd43
--- /dev/null
+++ b/packages/DocumentsUI/res/values-sl/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokumenti"</string>
+    <string name="title_open" msgid="4353228937663917801">"Odpiranje iz"</string>
+    <string name="title_save" msgid="2433679664882857999">"Shranjevanje v"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Ustvarjanje mape"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Mrežni pogled"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Pogled seznama"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Razvrsti glede na"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Iskanje"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Nastavitve"</string>
+    <string name="menu_open" msgid="432922957274920903">"Odpri"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Shrani"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Skupna raba"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Izbriši"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Izbira mape »<xliff:g id="DIRECTORY">^1</xliff:g>«"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Št. izbranih: <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Po imenu"</string>
+    <string name="sort_date" msgid="586080032956151448">"Po datumu spremembe"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Po velikosti"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Pokaži korene"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Skrij korene"</string>
+    <string name="save_error" msgid="6167009778003223664">"Dokumenta ni bilo mogoče shraniti"</string>
+    <string name="create_error" msgid="3735649141335444215">"Mape ni bilo mogoče ustvariti"</string>
+    <string name="query_error" msgid="1222448261663503501">"Poizvedba za dokumente ni uspela"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Nedavno"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Prosto: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Storitve shrambe"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Bližnjice"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Naprave"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Več aplikacij"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Prikaz naprednih naprav"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Prikaz velikosti datoteke"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Prikaz velikosti naprave"</string>
+    <string name="empty" msgid="7858882803708117596">"Ni elementov"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Datoteke ni mogoče odpreti"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Nekaterih dokumentov ni mogoče izbrisati"</string>
+    <string name="share_via" msgid="8966594246261344259">"Deli z drugimi prek"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-sr/strings.xml b/packages/DocumentsUI/res/values-sr/strings.xml
new file mode 100644
index 0000000..892dbce
--- /dev/null
+++ b/packages/DocumentsUI/res/values-sr/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Документи"</string>
+    <string name="title_open" msgid="4353228937663917801">"Отвори са"</string>
+    <string name="title_save" msgid="2433679664882857999">"Сачувај у"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Направи директоријум"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Приказ мреже"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Приказ листе"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Сортирај према"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Претражи"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Подешавања"</string>
+    <string name="menu_open" msgid="432922957274920903">"Отвори"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Сачувај"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Дели"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Избриши"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Изабери „<xliff:g id="DIRECTORY">^1</xliff:g>“"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Изабрано је <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Према имену"</string>
+    <string name="sort_date" msgid="586080032956151448">"Према датуму измене"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Према величини"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Прикажи основне елементе"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Сакриј основне елементе"</string>
+    <string name="save_error" msgid="6167009778003223664">"Чување документа није успело"</string>
+    <string name="create_error" msgid="3735649141335444215">"Директоријум није направљен"</string>
+    <string name="query_error" msgid="1222448261663503501">"Слање упита за документе није успело"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Недавно"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"Слободно је <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Услуге складиштења"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Пречице"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Уређаји"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Још апликација"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Прикажи напредне уређаје"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Прикажи величину датотеке"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Прикажи величину уређаја"</string>
+    <string name="empty" msgid="7858882803708117596">"Нема ставки"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Није могуће отворити датотеку"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Није могуће избрисати неке документе"</string>
+    <string name="share_via" msgid="8966594246261344259">"Делите преко"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-sv/strings.xml b/packages/DocumentsUI/res/values-sv/strings.xml
new file mode 100644
index 0000000..fd6457d
--- /dev/null
+++ b/packages/DocumentsUI/res/values-sv/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokument"</string>
+    <string name="title_open" msgid="4353228937663917801">"Öppna från"</string>
+    <string name="title_save" msgid="2433679664882857999">"Spara till"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Skapa mapp"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Rutnätsvy"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Listvy"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sortera efter"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Sök"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Inställningar"</string>
+    <string name="menu_open" msgid="432922957274920903">"Öppna"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Spara"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Dela"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Ta bort"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Välj <xliff:g id="DIRECTORY">^1</xliff:g>"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Har valt <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Efter namn"</string>
+    <string name="sort_date" msgid="586080032956151448">"Efter ändringsdatum"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Efter storlek"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Visa rötter"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Dölj rötter"</string>
+    <string name="save_error" msgid="6167009778003223664">"Det gick inte att spara dokumentet"</string>
+    <string name="create_error" msgid="3735649141335444215">"Det gick inte att skapa mappen"</string>
+    <string name="query_error" msgid="1222448261663503501">"Det gick inte att söka efter dokument"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Senaste"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ledigt"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Lagringstjänster"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Genvägar"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Enheter"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Fler appar"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Visa avancerade enheter"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Visa filstorlek"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Bildskärmsstorlek"</string>
+    <string name="empty" msgid="7858882803708117596">"Inga objekt"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Det går inte att öppna filen"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Det gick inte att ta bort vissa dokument"</string>
+    <string name="share_via" msgid="8966594246261344259">"Dela via"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml
new file mode 100644
index 0000000..0948c71
--- /dev/null
+++ b/packages/DocumentsUI/res/values-sw/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Hati"</string>
+    <string name="title_open" msgid="4353228937663917801">"Fungua kutoka"</string>
+    <string name="title_save" msgid="2433679664882857999">"Hifadhi kwenye"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Unda folda"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Mwonekano gridi"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Mwonekano orodha"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Panga kwa"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Utafutaji"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Mipangilio"</string>
+    <string name="menu_open" msgid="432922957274920903">"Fungua"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Hifadhi"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Shiriki"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Futa"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Chagua \" <xliff:g id="DIRECTORY">^1</xliff:g> \""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> zimechaguliwa"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Kwa jina"</string>
+    <string name="sort_date" msgid="586080032956151448">"Kwa tarehe viliporekebishwa"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Kwa ukubwa"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Onyesha usuli"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ficha usuli"</string>
+    <string name="save_error" msgid="6167009778003223664">"Imeshindwa kuhifadhi hati"</string>
+    <string name="create_error" msgid="3735649141335444215">"Ilishindwa kuunda folda"</string>
+    <string name="query_error" msgid="1222448261663503501">"Ilishindwa kuhoji hati"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Hivi karibuni"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bila malipo"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Huduma za hifadhi"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Njia za mkato"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Vifaa"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Programu zaidi"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Onyesha vifaa mahiri"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Onyesha ukubwa wa faili"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Onyesha ukubwa wa kifaa"</string>
+    <string name="empty" msgid="7858882803708117596">"Hakuna vipengee"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Haiwezi kufungua faili"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Imeshindwa kufuta baadhi ya hati"</string>
+    <string name="share_via" msgid="8966594246261344259">"Shiriki kupitia"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-sw720dp/styles.xml b/packages/DocumentsUI/res/values-sw720dp/styles.xml
index 19d2ebe..8d31444 100644
--- a/packages/DocumentsUI/res/values-sw720dp/styles.xml
+++ b/packages/DocumentsUI/res/values-sw720dp/styles.xml
@@ -15,11 +15,11 @@
 -->
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
-    <style name="Theme" parent="@android:style/Theme.Holo.Light">
+    <style name="Theme" parent="@android:style/Theme.DeviceDefault.Light">
         <item name="android:actionOverflowButtonStyle">@style/DarkerOverflow</item>
         <item name="android:windowBackground">@*android:drawable/dialog_full_holo_light</item>
         <item name="android:colorBackgroundCacheHint">@null</item>
         <item name="android:windowIsTranslucent">true</item>
-        <item name="android:windowAnimationStyle">@*android:style/Animation.Holo.Dialog</item>
+        <item name="android:windowAnimationStyle">@*android:style/Animation.DeviceDefault.Dialog</item>
     </style>
 </resources>
diff --git a/packages/DocumentsUI/res/values-th/strings.xml b/packages/DocumentsUI/res/values-th/strings.xml
new file mode 100644
index 0000000..4bf3e4f
--- /dev/null
+++ b/packages/DocumentsUI/res/values-th/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"เอกสาร"</string>
+    <string name="title_open" msgid="4353228937663917801">"เปิดจาก"</string>
+    <string name="title_save" msgid="2433679664882857999">"บันทึกไปยัง"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"สร้างโฟลเดอร์"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"มุมมองตาราง"</string>
+    <string name="menu_list" msgid="7279285939892417279">"มุมมองรายการ"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"จัดเรียงตาม"</string>
+    <string name="menu_search" msgid="3816712084502856974">"ค้นหา"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"การตั้งค่า"</string>
+    <string name="menu_open" msgid="432922957274920903">"เปิด"</string>
+    <string name="menu_save" msgid="2394743337684426338">"บันทึก"</string>
+    <string name="menu_share" msgid="3075149983979628146">"แชร์"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"ลบ"</string>
+    <string name="menu_select" msgid="8711270657353563424">"เลือก \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"เลือกไว้ <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"ตามชื่อ"</string>
+    <string name="sort_date" msgid="586080032956151448">"ตามวันที่ที่ปรับเปลี่ยน"</string>
+    <string name="sort_size" msgid="3350681319735474741">"ตามขนาด"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"แสดงราก"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"ซ่อนราก"</string>
+    <string name="save_error" msgid="6167009778003223664">"การบันทึกเอกสารล้มเหลว"</string>
+    <string name="create_error" msgid="3735649141335444215">"การสร้างโฟลเดอร์ล้มเหลว"</string>
+    <string name="query_error" msgid="1222448261663503501">"การค้นหาเอกสารล้มเหลว"</string>
+    <string name="root_recent" msgid="4470053704320518133">"ล่าสุด"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"ว่าง <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"บริการที่เก็บข้อมูล"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"ทางลัด"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"อุปกรณ์"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"แอปเพิ่มเติม"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"แสดงอุปกรณ์ขั้นสูง"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"แสดงขนาดของไฟล์"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"แสดงขนาดของอุปกรณ์"</string>
+    <string name="empty" msgid="7858882803708117596">"ไม่มีรายการ"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"ไม่สามารถเปิดไฟล์ได้"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"ไม่สามารถลบเอกสารบางรายการ"</string>
+    <string name="share_via" msgid="8966594246261344259">"แชร์ผ่าน"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml
new file mode 100644
index 0000000..8ef8aa5
--- /dev/null
+++ b/packages/DocumentsUI/res/values-tl/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Mga Dokumento"</string>
+    <string name="title_open" msgid="4353228937663917801">"Buksan mula sa"</string>
+    <string name="title_save" msgid="2433679664882857999">"I-save sa"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Gumawa ng folder"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"View ng grid"</string>
+    <string name="menu_list" msgid="7279285939892417279">"View ng listahan"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Pag-uri-uriin ayon sa"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Maghanap"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Mga Setting"</string>
+    <string name="menu_open" msgid="432922957274920903">"Buksan"</string>
+    <string name="menu_save" msgid="2394743337684426338">"I-save"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Ibahagi"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Tanggalin"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Piliin ang \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> ang pinili"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Ayon sa pangalan"</string>
+    <string name="sort_date" msgid="586080032956151448">"Ayon sa petsa ng pagbago"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Ayon sa laki"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Ipakita ang mga root"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Itago ang mga root"</string>
+    <string name="save_error" msgid="6167009778003223664">"Hindi na-save ang dokumento"</string>
+    <string name="create_error" msgid="3735649141335444215">"Hindi nagawa ang folder"</string>
+    <string name="query_error" msgid="1222448261663503501">"Hindi na-query ang mga dokumento"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Kamakailan"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> ang libre"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Mga serbisyo ng storage"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Mga Shortcut"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Mga Device"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Higit pang apps"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Ipakita ang mga advanced na device"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Ipakita ang laki ng file"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Ipakita ang laki ng device"</string>
+    <string name="empty" msgid="7858882803708117596">"Walang mga item"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Hindi mabuksan ang file"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Hindi matanggal ang ilang dokumento"</string>
+    <string name="share_via" msgid="8966594246261344259">"Ibahagi sa pamamagitan ng"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-tr/strings.xml b/packages/DocumentsUI/res/values-tr/strings.xml
new file mode 100644
index 0000000..93586d0
--- /dev/null
+++ b/packages/DocumentsUI/res/values-tr/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Dokümanlar"</string>
+    <string name="title_open" msgid="4353228937663917801">"Şuradan aç:"</string>
+    <string name="title_save" msgid="2433679664882857999">"Şuraya kaydet:"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Klasör oluştur"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Tablo görünümü"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Liste görünümü"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sıralama ölçütü"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Ara"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Ayarlar"</string>
+    <string name="menu_open" msgid="432922957274920903">"Aç"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Kaydet"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Paylaş"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Sil"</string>
+    <string name="menu_select" msgid="8711270657353563424">"\"<xliff:g id="DIRECTORY">^1</xliff:g>\" dizinini seç"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> tane seçildi"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Ada göre"</string>
+    <string name="sort_date" msgid="586080032956151448">"Değişiklik tarihine göre"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Boyuta göre"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Kökleri göster"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Kökleri sakla"</string>
+    <string name="save_error" msgid="6167009778003223664">"Doküman kaydedilemedi"</string>
+    <string name="create_error" msgid="3735649141335444215">"Klasör oluşturulamadı"</string>
+    <string name="query_error" msgid="1222448261663503501">"Dokümanlar sorgulanamadı"</string>
+    <string name="root_recent" msgid="4470053704320518133">"En son"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> boş"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Depolama hizmetleri"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Kısayollar"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Cihazlar"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Diğer uygulamalar"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Gelişmiş cihazları göster"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Dosya boyutunu göster"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Cihaz boyutunu göster"</string>
+    <string name="empty" msgid="7858882803708117596">"Öğe yok"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Dosya açılamıyor"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Bazı dokümanlar silinemiyor"</string>
+    <string name="share_via" msgid="8966594246261344259">"Şunu kullanarak paylaş:"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-uk/strings.xml b/packages/DocumentsUI/res/values-uk/strings.xml
new file mode 100644
index 0000000..8f8865b
--- /dev/null
+++ b/packages/DocumentsUI/res/values-uk/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Документи"</string>
+    <string name="title_open" msgid="4353228937663917801">"Відкрити в"</string>
+    <string name="title_save" msgid="2433679664882857999">"Зберегти в"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Створити папку"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Режим таблиці"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Режим списку"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Параметри сортування"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Пошук"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Налаштування"</string>
+    <string name="menu_open" msgid="432922957274920903">"Відкрити"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Зберегти"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Поділитися"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Видалити"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Вибрати каталог \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Вибрано <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"За назвою"</string>
+    <string name="sort_date" msgid="586080032956151448">"За датою змінення"</string>
+    <string name="sort_size" msgid="3350681319735474741">"За розміром"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Показати кореневі каталоги"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Сховати кореневі каталоги"</string>
+    <string name="save_error" msgid="6167009778003223664">"Не вдалося зберегти документ"</string>
+    <string name="create_error" msgid="3735649141335444215">"Помилка створення папки"</string>
+    <string name="query_error" msgid="1222448261663503501">"Помилка надсилання запиту на документи"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Останні"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> вільного місця"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Онлайн-сховища"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Ярлики"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Пристрої"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Інші програми"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Показати покращені пристрої"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Показати розмір файлу"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Показати розмір пристрою"</string>
+    <string name="empty" msgid="7858882803708117596">"Немає елементів"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Не вдалося відкрити файл"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Не вдалося видалити деякі документи"</string>
+    <string name="share_via" msgid="8966594246261344259">"Надіслати через"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-vi/strings.xml b/packages/DocumentsUI/res/values-vi/strings.xml
new file mode 100644
index 0000000..8b8ff1f
--- /dev/null
+++ b/packages/DocumentsUI/res/values-vi/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Tài liệu"</string>
+    <string name="title_open" msgid="4353228937663917801">"Mở từ"</string>
+    <string name="title_save" msgid="2433679664882857999">"Lưu vào"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Tạo thư mục"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Chế độ xem lưới"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Chế độ xem danh sách"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Sắp xếp theo"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Tìm kiếm"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Cài đặt"</string>
+    <string name="menu_open" msgid="432922957274920903">"Mở"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Lưu"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Chia sẻ"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Xóa"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Chọn \"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"Đã chọn <xliff:g id="COUNT">%1$d</xliff:g>"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Theo tên"</string>
+    <string name="sort_date" msgid="586080032956151448">"Theo ngày sửa đổi"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Theo kích thước"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Hiển thị gốc"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Ẩn gốc"</string>
+    <string name="save_error" msgid="6167009778003223664">"Không lưu tài liệu được"</string>
+    <string name="create_error" msgid="3735649141335444215">"Không thể tạo thư mục"</string>
+    <string name="query_error" msgid="1222448261663503501">"Không truy vấn được tài liệu"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Gần đây"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> còn trống"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Dịch vụ lưu trữ"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Lối tắt"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Thiết bị"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Các ứng dụng khác"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Hiển thị các thiết bị nâng cao"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Hiển thị kích thước tệp"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Hiển thị kích thước thiết bị"</string>
+    <string name="empty" msgid="7858882803708117596">"Không có mục nào"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Không thể mở tệp"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Không thể xóa một số tài liệu"</string>
+    <string name="share_via" msgid="8966594246261344259">"Chia sẻ qua"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rCN/strings.xml b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..68ab5f8
--- /dev/null
+++ b/packages/DocumentsUI/res/values-zh-rCN/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"文档"</string>
+    <string name="title_open" msgid="4353228937663917801">"打开文件"</string>
+    <string name="title_save" msgid="2433679664882857999">"保存文件"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"新建文件夹"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"网格视图"</string>
+    <string name="menu_list" msgid="7279285939892417279">"列表视图"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"排序依据"</string>
+    <string name="menu_search" msgid="3816712084502856974">"搜索"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"设置"</string>
+    <string name="menu_open" msgid="432922957274920903">"打开"</string>
+    <string name="menu_save" msgid="2394743337684426338">"保存"</string>
+    <string name="menu_share" msgid="3075149983979628146">"分享"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"删除"</string>
+    <string name="menu_select" msgid="8711270657353563424">"选择“<xliff:g id="DIRECTORY">^1</xliff:g>”"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"已选择<xliff:g id="COUNT">%1$d</xliff:g>项"</string>
+    <string name="sort_name" msgid="9183560467917256779">"按名称"</string>
+    <string name="sort_date" msgid="586080032956151448">"按修改日期"</string>
+    <string name="sort_size" msgid="3350681319735474741">"按大小"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"显示根目录"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"隐藏根目录"</string>
+    <string name="save_error" msgid="6167009778003223664">"无法保存文档"</string>
+    <string name="create_error" msgid="3735649141335444215">"无法创建文件夹"</string>
+    <string name="query_error" msgid="1222448261663503501">"无法查询文档"</string>
+    <string name="root_recent" msgid="4470053704320518133">"最近"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"可用空间：<xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"存储服务"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"捷径"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"设备"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"更多应用"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"显示高级设备"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"显示文件大小"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"显示设备大小"</string>
+    <string name="empty" msgid="7858882803708117596">"无任何文件"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"无法打开文件"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"无法删除部分文档"</string>
+    <string name="share_via" msgid="8966594246261344259">"分享方式"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rHK/strings.xml b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..afd8b63
--- /dev/null
+++ b/packages/DocumentsUI/res/values-zh-rHK/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"文件"</string>
+    <string name="title_open" msgid="4353228937663917801">"開啟自"</string>
+    <string name="title_save" msgid="2433679664882857999">"儲存至"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"建立資料夾"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"格狀檢視"</string>
+    <string name="menu_list" msgid="7279285939892417279">"清單檢視"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"排序方式"</string>
+    <string name="menu_search" msgid="3816712084502856974">"搜尋"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"設定"</string>
+    <string name="menu_open" msgid="432922957274920903">"開啟"</string>
+    <string name="menu_save" msgid="2394743337684426338">"儲存"</string>
+    <string name="menu_share" msgid="3075149983979628146">"分享"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"刪除"</string>
+    <string name="menu_select" msgid="8711270657353563424">"選取「<xliff:g id="DIRECTORY">^1</xliff:g>」"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 個"</string>
+    <string name="sort_name" msgid="9183560467917256779">"按名稱"</string>
+    <string name="sort_date" msgid="586080032956151448">"按修改日期"</string>
+    <string name="sort_size" msgid="3350681319735474741">"按大小"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"顯示根目錄"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"隱藏根目錄"</string>
+    <string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
+    <string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
+    <string name="query_error" msgid="1222448261663503501">"無法查詢文件"</string>
+    <string name="root_recent" msgid="4470053704320518133">"近期用過"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"可用空間：<xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"捷徑"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"顯示進階裝置"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"顯示檔案大小"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"顯示裝置大小"</string>
+    <string name="empty" msgid="7858882803708117596">"沒有項目"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"無法開啟檔案"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
+    <string name="share_via" msgid="8966594246261344259">"分享方式："</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..2e77f21
--- /dev/null
+++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"文件"</string>
+    <string name="title_open" msgid="4353228937663917801">"開啟檔案"</string>
+    <string name="title_save" msgid="2433679664882857999">"儲存至"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"建立資料夾"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"格狀檢視"</string>
+    <string name="menu_list" msgid="7279285939892417279">"清單檢視"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"排序依據"</string>
+    <string name="menu_search" msgid="3816712084502856974">"搜尋"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"設定"</string>
+    <string name="menu_open" msgid="432922957274920903">"開啟"</string>
+    <string name="menu_save" msgid="2394743337684426338">"儲存"</string>
+    <string name="menu_share" msgid="3075149983979628146">"共用"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"刪除"</string>
+    <string name="menu_select" msgid="8711270657353563424">"選取「<xliff:g id="DIRECTORY">^1</xliff:g>」"</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"已選取 <xliff:g id="COUNT">%1$d</xliff:g> 個項目"</string>
+    <string name="sort_name" msgid="9183560467917256779">"依名稱"</string>
+    <string name="sort_date" msgid="586080032956151448">"依修改日期"</string>
+    <string name="sort_size" msgid="3350681319735474741">"依大小"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"顯示根目錄"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"隱藏根目錄"</string>
+    <string name="save_error" msgid="6167009778003223664">"無法儲存文件"</string>
+    <string name="create_error" msgid="3735649141335444215">"無法建立資料夾"</string>
+    <string name="query_error" msgid="1222448261663503501">"無法查詢文件"</string>
+    <string name="root_recent" msgid="4470053704320518133">"最近存取過"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"可用空間：<xliff:g id="SIZE">%1$s</xliff:g>"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"儲存空間服務"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"捷徑"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"裝置"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"更多應用程式"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"顯示進階裝置"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"顯示檔案大小"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"顯示裝置大小"</string>
+    <string name="empty" msgid="7858882803708117596">"沒有任何項目"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"無法開啟檔案"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"無法刪除部分文件"</string>
+    <string name="share_via" msgid="8966594246261344259">"分享方式："</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values-zu/strings.xml b/packages/DocumentsUI/res/values-zu/strings.xml
new file mode 100644
index 0000000..55e2c75
--- /dev/null
+++ b/packages/DocumentsUI/res/values-zu/strings.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="2783841764617238354">"Amadokhumenti"</string>
+    <string name="title_open" msgid="4353228937663917801">"Vula kusuka ku-"</string>
+    <string name="title_save" msgid="2433679664882857999">"Londoloza ku-"</string>
+    <string name="menu_create_dir" msgid="5947289605844398389">"Dala ifolda"</string>
+    <string name="menu_grid" msgid="6878021334497835259">"Ukubuka kwegridi"</string>
+    <string name="menu_list" msgid="7279285939892417279">"Ukubuka uhlu"</string>
+    <string name="menu_sort" msgid="7677740407158414452">"Hlunga nge-"</string>
+    <string name="menu_search" msgid="3816712084502856974">"Sesha"</string>
+    <string name="menu_settings" msgid="6008033148948428823">"Izilungiselelo"</string>
+    <string name="menu_open" msgid="432922957274920903">"Vula"</string>
+    <string name="menu_save" msgid="2394743337684426338">"Londoloza"</string>
+    <string name="menu_share" msgid="3075149983979628146">"Yabelana"</string>
+    <string name="menu_delete" msgid="8138799623850614177">"Susa"</string>
+    <string name="menu_select" msgid="8711270657353563424">"Khetha i-\"<xliff:g id="DIRECTORY">^1</xliff:g>\""</string>
+    <string name="mode_selected_count" msgid="459111894725594625">"<xliff:g id="COUNT">%1$d</xliff:g> okukhethiwe"</string>
+    <string name="sort_name" msgid="9183560467917256779">"Ngegama"</string>
+    <string name="sort_date" msgid="586080032956151448">"Ngedethi yokuguqula"</string>
+    <string name="sort_size" msgid="3350681319735474741">"Ngosayizi"</string>
+    <string name="drawer_open" msgid="4545466532430226949">"Bonisa izimpande"</string>
+    <string name="drawer_close" msgid="7602734368552123318">"Fihla izimpande"</string>
+    <string name="save_error" msgid="6167009778003223664">"Yehlulekile ukulondoloza idokhumenti"</string>
+    <string name="create_error" msgid="3735649141335444215">"Yehlulekile ukudala ifolda"</string>
+    <string name="query_error" msgid="1222448261663503501">"Ihlulekile ukubuza amadokhumenti"</string>
+    <string name="root_recent" msgid="4470053704320518133">"Okwakamuva"</string>
+    <string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> okhululekile"</string>
+    <string name="root_type_service" msgid="2178854894416775409">"Amasevisi wesitoreji"</string>
+    <string name="root_type_shortcut" msgid="3318760609471618093">"Izinqamuleli"</string>
+    <string name="root_type_device" msgid="7121342474653483538">"Amadivayisi"</string>
+    <string name="root_type_apps" msgid="8838065367985945189">"Izinhlelo zokusebenza eziningi"</string>
+    <string name="pref_advanced_devices" msgid="903257239609301276">"Bonisa amadivayisi aphakeme"</string>
+    <string name="pref_file_size" msgid="2826879315743961459">"Bonisa usayizi wefayela"</string>
+    <string name="pref_device_size" msgid="3542106883278997222">"Bonisa usayizi wedivayisi"</string>
+    <string name="empty" msgid="7858882803708117596">"Azikho izinto"</string>
+    <string name="toast_no_application" msgid="1339885974067891667">"Ayikwazi ukuvula ifayela"</string>
+    <string name="toast_failed_delete" msgid="2180678019407244069">"Ayikwazi ukususa amanye amadokhumenti"</string>
+    <string name="share_via" msgid="8966594246261344259">"Yabelana nge-"</string>
+</resources>
diff --git a/packages/DocumentsUI/res/values/strings.xml b/packages/DocumentsUI/res/values/strings.xml
index 92c30ba..c1a9d72 100644
--- a/packages/DocumentsUI/res/values/strings.xml
+++ b/packages/DocumentsUI/res/values/strings.xml
@@ -44,6 +44,8 @@
     <string name="menu_share">Share</string>
     <!-- Menu item title that deletes the selected documents [CHAR LIMIT=24] -->
     <string name="menu_delete">Delete</string>
+    <!-- Menu item title that selects the current directory [CHAR LIMIT=48] -->
+    <string name="menu_select">Select \"<xliff:g id="directory" example="My Directory">^1</xliff:g>\"</string>
 
     <!-- Action mode title summarizing the number of documents selected [CHAR LIMIT=32] -->
     <string name="mode_selected_count"><xliff:g id="count" example="3">%1$d</xliff:g> selected</string>
diff --git a/packages/DocumentsUI/res/values/styles.xml b/packages/DocumentsUI/res/values/styles.xml
index 0c8f712..a416eb4 100644
--- a/packages/DocumentsUI/res/values/styles.xml
+++ b/packages/DocumentsUI/res/values/styles.xml
@@ -29,11 +29,11 @@
 
     <!-- Normally just a redirection, but this is used to make ourselves a
          dialog on large tablets -->
-    <style name="Theme" parent="@android:style/Theme.Holo.Light">
+    <style name="Theme" parent="@android:style/Theme.DeviceDefault.Light">
         <item name="android:actionOverflowButtonStyle">@style/DarkerOverflow</item>
     </style>
     
-    <style name="DarkerOverflow" parent="@android:style/Widget.Holo.Light.ActionButton.Overflow">
+    <style name="DarkerOverflow" parent="@android:style/Widget.DeviceDefault.Light.ActionButton.Overflow">
         <item name="android:src">@drawable/ic_menu_overflow</item>
     </style>
 
diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
index 4212e96..9f76991 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java
@@ -24,6 +24,7 @@
 import static com.android.documentsui.DocumentsActivity.State.ACTION_GET_CONTENT;
 import static com.android.documentsui.DocumentsActivity.State.ACTION_MANAGE;
 import static com.android.documentsui.DocumentsActivity.State.ACTION_OPEN;
+import static com.android.documentsui.DocumentsActivity.State.ACTION_PICK_DIRECTORY;
 import static com.android.documentsui.DocumentsActivity.State.MODE_GRID;
 import static com.android.documentsui.DocumentsActivity.State.MODE_LIST;
 
@@ -202,6 +203,8 @@
             final String mimeType = getIntent().getType();
             final String title = getIntent().getStringExtra(Intent.EXTRA_TITLE);
             SaveFragment.show(getFragmentManager(), mimeType, title);
+        } else if (mState.action == ACTION_PICK_DIRECTORY) {
+            PickFragment.show(getFragmentManager());
         }
 
         if (mState.action == ACTION_GET_CONTENT) {
@@ -209,7 +212,8 @@
             moreApps.setComponent(null);
             moreApps.setPackage(null);
             RootsFragment.show(getFragmentManager(), moreApps);
-        } else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE) {
+        } else if (mState.action == ACTION_OPEN || mState.action == ACTION_CREATE
+                || mState.action == ACTION_PICK_DIRECTORY) {
             RootsFragment.show(getFragmentManager(), null);
         }
 
@@ -236,6 +240,8 @@
             mState.action = ACTION_CREATE;
         } else if (Intent.ACTION_GET_CONTENT.equals(action)) {
             mState.action = ACTION_GET_CONTENT;
+        } else if (Intent.ACTION_PICK_DIRECTORY.equals(action)) {
+            mState.action = ACTION_PICK_DIRECTORY;
         } else if (DocumentsContract.ACTION_MANAGE_ROOT.equals(action)) {
             mState.action = ACTION_MANAGE;
         }
@@ -434,7 +440,8 @@
             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
             actionBar.setIcon(new ColorDrawable());
 
-            if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT) {
+            if (mState.action == ACTION_OPEN || mState.action == ACTION_GET_CONTENT
+                    || mState.action == ACTION_PICK_DIRECTORY) {
                 actionBar.setTitle(R.string.title_open);
             } else if (mState.action == ACTION_CREATE) {
                 actionBar.setTitle(R.string.title_save);
@@ -576,7 +583,7 @@
         sortSize.setVisible(mState.showSize);
 
         final boolean searchVisible;
-        if (mState.action == ACTION_CREATE) {
+        if (mState.action == ACTION_CREATE || mState.action == ACTION_PICK_DIRECTORY) {
             createDir.setVisible(cwd != null && cwd.isCreateSupported());
             searchVisible = false;
 
@@ -586,7 +593,9 @@
                 list.setVisible(false);
             }
 
-            SaveFragment.get(fm).setSaveEnabled(cwd != null && cwd.isCreateSupported());
+            if (mState.action == ACTION_CREATE) {
+                SaveFragment.get(fm).setSaveEnabled(cwd != null && cwd.isCreateSupported());
+            }
         } else {
             createDir.setVisible(false);
 
@@ -819,7 +828,7 @@
 
         if (cwd == null) {
             // No directory means recents
-            if (mState.action == ACTION_CREATE) {
+            if (mState.action == ACTION_CREATE || mState.action == ACTION_PICK_DIRECTORY) {
                 RecentsCreateFragment.show(fm);
             } else {
                 DirectoryFragment.showRecentsOpen(fm, anim);
@@ -848,6 +857,15 @@
             }
         }
 
+        if (mState.action == ACTION_PICK_DIRECTORY) {
+            final PickFragment pick = PickFragment.get(fm);
+            if (pick != null) {
+                final CharSequence displayName = (mState.stack.size() <= 1) ? root.title
+                        : cwd.displayName;
+                pick.setPickTarget(cwd, displayName);
+            }
+        }
+
         final RootsFragment roots = RootsFragment.get(fm);
         if (roots != null) {
             roots.onCurrentRootChanged();
@@ -1002,12 +1020,18 @@
         new CreateFinishTask(mimeType, displayName).executeOnExecutor(getCurrentExecutor());
     }
 
+    public void onPickRequested(DocumentInfo pickTarget) {
+        final Uri viaUri = DocumentsContract.buildViaUri(pickTarget.authority,
+                pickTarget.documentId);
+        new PickFinishTask(viaUri).executeOnExecutor(getCurrentExecutor());
+    }
+
     private void saveStackBlocking() {
         final ContentResolver resolver = getContentResolver();
         final ContentValues values = new ContentValues();
 
         final byte[] rawStack = DurableUtils.writeToArrayOrNull(mState.stack);
-        if (mState.action == ACTION_CREATE) {
+        if (mState.action == ACTION_CREATE || mState.action == ACTION_PICK_DIRECTORY) {
             // Remember stack for last create
             values.clear();
             values.put(RecentColumns.KEY, mState.stack.buildKey());
@@ -1040,6 +1064,11 @@
 
         if (mState.action == ACTION_GET_CONTENT) {
             intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+        } else if (mState.action == ACTION_PICK_DIRECTORY) {
+            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
+                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+                    | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+                    | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
         } else {
             intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
                     | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
@@ -1121,6 +1150,25 @@
         }
     }
 
+    private class PickFinishTask extends AsyncTask<Void, Void, Void> {
+        private final Uri mUri;
+
+        public PickFinishTask(Uri uri) {
+            mUri = uri;
+        }
+
+        @Override
+        protected Void doInBackground(Void... params) {
+            saveStackBlocking();
+            return null;
+        }
+
+        @Override
+        protected void onPostExecute(Void result) {
+            onFinished(mUri);
+        }
+    }
+
     public static class State implements android.os.Parcelable {
         public int action;
         public String[] acceptMimes;
@@ -1154,7 +1202,8 @@
         public static final int ACTION_OPEN = 1;
         public static final int ACTION_CREATE = 2;
         public static final int ACTION_GET_CONTENT = 3;
-        public static final int ACTION_MANAGE = 4;
+        public static final int ACTION_PICK_DIRECTORY = 4;
+        public static final int ACTION_MANAGE = 5;
 
         public static final int MODE_UNKNOWN = 0;
         public static final int MODE_LIST = 1;
diff --git a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
index 1f7386c..71fd100 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/IconUtils.java
@@ -22,7 +22,6 @@
 import android.content.res.Resources;
 import android.graphics.drawable.Drawable;
 import android.provider.DocumentsContract.Document;
-import android.util.Log;
 
 import com.google.android.collect.Maps;
 
diff --git a/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java b/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java
new file mode 100644
index 0000000..a9e488a1
--- /dev/null
+++ b/packages/DocumentsUI/src/com/android/documentsui/PickFragment.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2014 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.android.documentsui;
+
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+
+import com.android.documentsui.model.DocumentInfo;
+
+import java.util.Locale;
+
+/**
+ * Display pick confirmation bar, usually for selecting a directory.
+ */
+public class PickFragment extends Fragment {
+    public static final String TAG = "PickFragment";
+
+    private DocumentInfo mPickTarget;
+
+    private View mContainer;
+    private Button mPick;
+
+    public static void show(FragmentManager fm) {
+        final PickFragment fragment = new PickFragment();
+
+        final FragmentTransaction ft = fm.beginTransaction();
+        ft.replace(R.id.container_save, fragment, TAG);
+        ft.commitAllowingStateLoss();
+    }
+
+    public static PickFragment get(FragmentManager fm) {
+        return (PickFragment) fm.findFragmentByTag(TAG);
+    }
+
+    @Override
+    public View onCreateView(
+            LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+        mContainer = inflater.inflate(R.layout.fragment_pick, container, false);
+
+        mPick = (Button) mContainer.findViewById(android.R.id.button1);
+        mPick.setOnClickListener(mPickListener);
+
+        setPickTarget(null, null);
+
+        return mContainer;
+    }
+
+    private View.OnClickListener mPickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            final DocumentsActivity activity = DocumentsActivity.get(PickFragment.this);
+            activity.onPickRequested(mPickTarget);
+        }
+    };
+
+    public void setPickTarget(DocumentInfo pickTarget, CharSequence displayName) {
+        mPickTarget = pickTarget;
+
+        if (mPickTarget != null) {
+            mContainer.setVisibility(View.VISIBLE);
+            final Locale locale = getResources().getConfiguration().locale;
+            final String raw = getString(R.string.menu_select).toUpperCase(locale);
+            mPick.setText(TextUtils.expandTemplate(raw, displayName));
+        } else {
+            mContainer.setVisibility(View.GONE);
+        }
+    }
+}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
index 05766f5..82c3048 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsCreateFragment.java
@@ -54,8 +54,6 @@
 
 import libcore.io.IoUtils;
 
-import java.io.ByteArrayInputStream;
-import java.io.DataInputStream;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
index f1dca1d..933dbe0 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/RootsCache.java
@@ -104,7 +104,8 @@
         mRecentsRoot.authority = null;
         mRecentsRoot.rootId = null;
         mRecentsRoot.icon = R.drawable.ic_root_recent;
-        mRecentsRoot.flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE;
+        mRecentsRoot.flags = Root.FLAG_LOCAL_ONLY | Root.FLAG_SUPPORTS_CREATE
+                | Root.FLAG_SUPPORTS_DIR_SELECTION;
         mRecentsRoot.title = mContext.getString(R.string.root_recent);
         mRecentsRoot.availableBytes = -1;
 
@@ -349,12 +350,15 @@
         final List<RootInfo> matching = Lists.newArrayList();
         for (RootInfo root : roots) {
             final boolean supportsCreate = (root.flags & Root.FLAG_SUPPORTS_CREATE) != 0;
+            final boolean supportsDir = (root.flags & Root.FLAG_SUPPORTS_DIR_SELECTION) != 0;
             final boolean advanced = (root.flags & Root.FLAG_ADVANCED) != 0;
             final boolean localOnly = (root.flags & Root.FLAG_LOCAL_ONLY) != 0;
             final boolean empty = (root.flags & Root.FLAG_EMPTY) != 0;
 
             // Exclude read-only devices when creating
             if (state.action == State.ACTION_CREATE && !supportsCreate) continue;
+            // Exclude roots that don't support directory picking
+            if (state.action == State.ACTION_PICK_DIRECTORY && !supportsDir) continue;
             // Exclude advanced devices when not requested
             if (!state.showAdvanced && advanced) continue;
             // Exclude non-local devices when local only
diff --git a/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java b/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
index 9d70c51..ce98db2 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/SaveFragment.java
@@ -23,7 +23,6 @@
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextWatcher;
-import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
diff --git a/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java b/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
deleted file mode 100644
index 1a47308..0000000
--- a/packages/DocumentsUI/src/com/android/documentsui/TestActivity.java
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * Copyright (C) 2013 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.android.documentsui;
-
-import android.app.Activity;
-import android.content.Context;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.DocumentsContract;
-import android.util.Log;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.LinearLayout;
-import android.widget.ScrollView;
-import android.widget.TextView;
-
-import libcore.io.IoUtils;
-import libcore.io.Streams;
-
-import java.io.InputStream;
-import java.io.OutputStream;
-
-public class TestActivity extends Activity {
-    private static final String TAG = "TestActivity";
-
-    private static final int CODE_READ = 42;
-    private static final int CODE_WRITE = 43;
-
-    private TextView mResult;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        final Context context = this;
-
-        final LinearLayout view = new LinearLayout(context);
-        view.setOrientation(LinearLayout.VERTICAL);
-
-        mResult = new TextView(context);
-        view.addView(mResult);
-
-        final CheckBox multiple = new CheckBox(context);
-        multiple.setText("ALLOW_MULTIPLE");
-        view.addView(multiple);
-        final CheckBox localOnly = new CheckBox(context);
-        localOnly.setText("LOCAL_ONLY");
-        view.addView(localOnly);
-
-        Button button;
-        button = new Button(context);
-        button.setText("OPEN_DOC */*");
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("*/*");
-                if (multiple.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
-                }
-                if (localOnly.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
-                }
-                startActivityForResult(intent, CODE_READ);
-            }
-        });
-        view.addView(button);
-
-        button = new Button(context);
-        button.setText("OPEN_DOC image/*");
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("image/*");
-                if (multiple.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
-                }
-                if (localOnly.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
-                }
-                startActivityForResult(intent, CODE_READ);
-            }
-        });
-        view.addView(button);
-
-        button = new Button(context);
-        button.setText("OPEN_DOC audio/ogg");
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("audio/ogg");
-                if (multiple.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
-                }
-                if (localOnly.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
-                }
-                startActivityForResult(intent, CODE_READ);
-            }
-        });
-        view.addView(button);
-
-        button = new Button(context);
-        button.setText("OPEN_DOC text/plain, application/msword");
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("*/*");
-                intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[] {
-                        "text/plain", "application/msword" });
-                if (multiple.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
-                }
-                if (localOnly.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
-                }
-                startActivityForResult(intent, CODE_READ);
-            }
-        });
-        view.addView(button);
-
-        button = new Button(context);
-        button.setText("CREATE_DOC text/plain");
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("text/plain");
-                intent.putExtra(Intent.EXTRA_TITLE, "foobar.txt");
-                if (localOnly.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
-                }
-                startActivityForResult(intent, CODE_WRITE);
-            }
-        });
-        view.addView(button);
-
-        button = new Button(context);
-        button.setText("CREATE_DOC image/png");
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("image/png");
-                intent.putExtra(Intent.EXTRA_TITLE, "mypicture.png");
-                if (localOnly.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
-                }
-                startActivityForResult(intent, CODE_WRITE);
-            }
-        });
-        view.addView(button);
-
-        button = new Button(context);
-        button.setText("GET_CONTENT */*");
-        button.setOnClickListener(new OnClickListener() {
-            @Override
-            public void onClick(View v) {
-                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
-                intent.addCategory(Intent.CATEGORY_OPENABLE);
-                intent.setType("*/*");
-                if (multiple.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
-                }
-                if (localOnly.isChecked()) {
-                    intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
-                }
-                startActivityForResult(Intent.createChooser(intent, "Kittens!"), CODE_READ);
-            }
-        });
-        view.addView(button);
-
-        final ScrollView scroll = new ScrollView(context);
-        scroll.addView(view);
-
-        setContentView(scroll);
-    }
-
-    @Override
-    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-        mResult.setText(null);
-        String result = "resultCode=" + resultCode + ", data=" + String.valueOf(data);
-
-        if (requestCode == CODE_READ) {
-            final Uri uri = data != null ? data.getData() : null;
-            if (uri != null) {
-                if (DocumentsContract.isDocumentUri(this, uri)) {
-                    result += "; DOC_ID";
-                }
-                try {
-                    getContentResolver().takePersistableUriPermission(
-                            uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
-                } catch (SecurityException e) {
-                    result += "; FAILED TO TAKE";
-                    Log.e(TAG, "Failed to take", e);
-                }
-                InputStream is = null;
-                try {
-                    is = getContentResolver().openInputStream(uri);
-                    final int length = Streams.readFullyNoClose(is).length;
-                    result += "; read length=" + length;
-                } catch (Exception e) {
-                    result += "; ERROR";
-                    Log.e(TAG, "Failed to read " + uri, e);
-                } finally {
-                    IoUtils.closeQuietly(is);
-                }
-            } else {
-                result += "no uri?";
-            }
-        } else if (requestCode == CODE_WRITE) {
-            final Uri uri = data != null ? data.getData() : null;
-            if (uri != null) {
-                if (DocumentsContract.isDocumentUri(this, uri)) {
-                    result += "; DOC_ID";
-                }
-                try {
-                    getContentResolver().takePersistableUriPermission(
-                            uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
-                } catch (SecurityException e) {
-                    result += "; FAILED TO TAKE";
-                    Log.e(TAG, "Failed to take", e);
-                }
-                OutputStream os = null;
-                try {
-                    os = getContentResolver().openOutputStream(uri);
-                    os.write("THE COMPLETE WORKS OF SHAKESPEARE".getBytes());
-                } catch (Exception e) {
-                    result += "; ERROR";
-                    Log.e(TAG, "Failed to write " + uri, e);
-                } finally {
-                    IoUtils.closeQuietly(os);
-                }
-            } else {
-                result += "no uri?";
-            }
-        }
-
-        Log.d(TAG, result);
-        mResult.setText(result);
-    }
-}
diff --git a/packages/ExternalStorageProvider/res/values-af/strings.xml b/packages/ExternalStorageProvider/res/values-af/strings.xml
new file mode 100644
index 0000000..1de881d
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-af/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Eksterne berging"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Interne berging"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-am/strings.xml b/packages/ExternalStorageProvider/res/values-am/strings.xml
new file mode 100644
index 0000000..230fb06
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-am/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"ውጫዊ ማከማቻ"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"ውስጣዊ ማከማቻ"</string>
+    <string name="root_documents" msgid="4051252304075469250">"ሰነዶች"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ar/strings.xml b/packages/ExternalStorageProvider/res/values-ar/strings.xml
new file mode 100644
index 0000000..b20a056
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ar/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"وحدة تخزين خارجية"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"وحدة تخزين داخلية"</string>
+    <string name="root_documents" msgid="4051252304075469250">"مستندات"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml b/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..a6a79ca8
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Xarici Yaddaş"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Daxili yaddaş"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-az/strings.xml b/packages/ExternalStorageProvider/res/values-az/strings.xml
new file mode 100644
index 0000000..a6a79ca8
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-az/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Xarici Yaddaş"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Daxili yaddaş"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-bg/strings.xml b/packages/ExternalStorageProvider/res/values-bg/strings.xml
new file mode 100644
index 0000000..f5dce31
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-bg/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Външно хранилище"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Вътрешно хранилище"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ca/strings.xml b/packages/ExternalStorageProvider/res/values-ca/strings.xml
new file mode 100644
index 0000000..15e9d46
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ca/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Emmagatzematge extern"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Emmagatzematge intern"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-cs/strings.xml b/packages/ExternalStorageProvider/res/values-cs/strings.xml
new file mode 100644
index 0000000..b68a928
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-cs/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Externí úložiště"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Interní úložiště"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-da/strings.xml b/packages/ExternalStorageProvider/res/values-da/strings.xml
new file mode 100644
index 0000000..a9ecb69
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-da/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Ekstern lagring"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenter"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-de/strings.xml b/packages/ExternalStorageProvider/res/values-de/strings.xml
new file mode 100644
index 0000000..318634a
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-de/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Externer Speicher"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Interner Speicher"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-el/strings.xml b/packages/ExternalStorageProvider/res/values-el/strings.xml
new file mode 100644
index 0000000..b3aa792
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-el/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Εξωτερικός αποθηκευτικός χώρος"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Εσωτερικός αποθηκευτικός χώρος"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Έγγραφα"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..f88eb9e
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..f88eb9e
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml b/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..e7e38b5
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Almacenamiento externo"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Almacenamiento interno"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-es/strings.xml b/packages/ExternalStorageProvider/res/values-es/strings.xml
new file mode 100644
index 0000000..e7e38b5
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-es/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Almacenamiento externo"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Almacenamiento interno"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml b/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..6824e9d
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Väline talletusruum"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Sisemine salvestusruum"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumendid"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-fa/strings.xml b/packages/ExternalStorageProvider/res/values-fa/strings.xml
new file mode 100644
index 0000000..8471fc7
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-fa/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"فضای ذخیره خارجی"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"حافظهٔ داخلی"</string>
+    <string name="root_documents" msgid="4051252304075469250">"اسناد"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-fi/strings.xml b/packages/ExternalStorageProvider/res/values-fi/strings.xml
new file mode 100644
index 0000000..9d1fbaa
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-fi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Ulkoinen tallennustila"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Sisäinen tallennustila"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumentit"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml b/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..b3fdd48
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Stockage externe"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Mémoire de stockage interne"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-fr/strings.xml b/packages/ExternalStorageProvider/res/values-fr/strings.xml
new file mode 100644
index 0000000..b3fdd48
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-fr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Stockage externe"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Mémoire de stockage interne"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documents"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-hi/strings.xml b/packages/ExternalStorageProvider/res/values-hi/strings.xml
new file mode 100644
index 0000000..1227bd4
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-hi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"बाहरी संग्रहण"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"मोबाइल संग्रहण"</string>
+    <string name="root_documents" msgid="4051252304075469250">"दस्तावेज़"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-hr/strings.xml b/packages/ExternalStorageProvider/res/values-hr/strings.xml
new file mode 100644
index 0000000..a74f8e8
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-hr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Vanjska pohrana"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Unutarnja pohrana"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-hu/strings.xml b/packages/ExternalStorageProvider/res/values-hu/strings.xml
new file mode 100644
index 0000000..3f72b41
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-hu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Külső tárhely"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Belső tárhely"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumentumok"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml b/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..5360124
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Արտաքին պահոց"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Ներքին պահոց"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Փաստաթղթեր"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-in/strings.xml b/packages/ExternalStorageProvider/res/values-in/strings.xml
new file mode 100644
index 0000000..42acde7
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-in/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Penyimpanan Eksternal"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Penyimpanan internal"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumen"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-it/strings.xml b/packages/ExternalStorageProvider/res/values-it/strings.xml
new file mode 100644
index 0000000..957b5ff
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-it/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Archivio esterno"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Memoria interna"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documenti"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-iw/strings.xml b/packages/ExternalStorageProvider/res/values-iw/strings.xml
new file mode 100644
index 0000000..775506a
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-iw/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"אחסון חיצוני"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"אחסון פנימי"</string>
+    <string name="root_documents" msgid="4051252304075469250">"מסמכים"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ja/strings.xml b/packages/ExternalStorageProvider/res/values-ja/strings.xml
new file mode 100644
index 0000000..188fca2
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ja/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"外部ストレージ"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"内部ストレージ"</string>
+    <string name="root_documents" msgid="4051252304075469250">"ドキュメント"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml b/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..cc04860
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"გარე მეხსიერება"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"შიდა მეხსიერება"</string>
+    <string name="root_documents" msgid="4051252304075469250">"დოკუმენტები"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml b/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..9cf76d40
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"ឧបករណ៍​​ផ្ទុក​ខាងក្រៅ"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"ឧបករណ៍​ផ្ទុក​ខាង​ក្នុង"</string>
+    <string name="root_documents" msgid="4051252304075469250">"ឯកសារ"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ko/strings.xml b/packages/ExternalStorageProvider/res/values-ko/strings.xml
new file mode 100644
index 0000000..849d37e
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ko/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"외부 저장소"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"내부 저장소"</string>
+    <string name="root_documents" msgid="4051252304075469250">"문서"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..cecd9f5
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍນອກ"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍໃນ"</string>
+    <string name="root_documents" msgid="4051252304075469250">"ເອ​ກະ​ສານ"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-lt/strings.xml b/packages/ExternalStorageProvider/res/values-lt/strings.xml
new file mode 100644
index 0000000..240ea89
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-lt/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Išorinė atmintinė"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Vidinė atmintinė"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumentai"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-lv/strings.xml b/packages/ExternalStorageProvider/res/values-lv/strings.xml
new file mode 100644
index 0000000..d308fe8
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-lv/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Ārējā krātuve"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Iekšējā atmiņa"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml b/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..3d7b7f7
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Гадаад сан"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Дотоод сан"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Документүүд"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml b/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..cb4d736
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Storan Luaran"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Storan dalaman"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumen"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-nb/strings.xml b/packages/ExternalStorageProvider/res/values-nb/strings.xml
new file mode 100644
index 0000000..a9ecb69
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-nb/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Ekstern lagring"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenter"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml b/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..8a9454e
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"बाह्य भण्डारण"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"आन्तरिक भण्डारण"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-nl/strings.xml b/packages/ExternalStorageProvider/res/values-nl/strings.xml
new file mode 100644
index 0000000..bde6166
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-nl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Externe opslag"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Interne opslag"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documenten"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-pl/strings.xml b/packages/ExternalStorageProvider/res/values-pl/strings.xml
new file mode 100644
index 0000000..6c5e7d7
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-pl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Pamięć zewnętrzna"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Pamięć wewnętrzna"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml b/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..77c89b8
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-pt/strings.xml b/packages/ExternalStorageProvider/res/values-pt/strings.xml
new file mode 100644
index 0000000..77c89b8
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-pt/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documentos"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ro/strings.xml b/packages/ExternalStorageProvider/res/values-ro/strings.xml
new file mode 100644
index 0000000..abd0b98
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ro/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Stocare externă"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Stocare internă"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Documente"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-ru/strings.xml b/packages/ExternalStorageProvider/res/values-ru/strings.xml
new file mode 100644
index 0000000..b6c10951
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-ru/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Внешний накопитель"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Внутренняя память"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Документы"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml b/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..de3f3e8
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"බාහිර ආචයනය"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"අභ්‍යන්තර ආචයනය"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-sk/strings.xml b/packages/ExternalStorageProvider/res/values-sk/strings.xml
new file mode 100644
index 0000000..9be7b79
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-sk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Externý ukladací priestor"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Interné úložisko"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-sl/strings.xml b/packages/ExternalStorageProvider/res/values-sl/strings.xml
new file mode 100644
index 0000000..6ffa698
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-sl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Zunanja shramba"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Notranja shramba"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-sr/strings.xml b/packages/ExternalStorageProvider/res/values-sr/strings.xml
new file mode 100644
index 0000000..54238a4
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-sr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Спољна меморија"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Интерна меморија"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-sv/strings.xml b/packages/ExternalStorageProvider/res/values-sv/strings.xml
new file mode 100644
index 0000000..6eac11e
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-sv/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Extern lagring"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokument"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-sw/strings.xml b/packages/ExternalStorageProvider/res/values-sw/strings.xml
new file mode 100644
index 0000000..0d0e483
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-sw/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Hifadhi ya Nje"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Hifadhi ya ndani"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Hati"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-th/strings.xml b/packages/ExternalStorageProvider/res/values-th/strings.xml
new file mode 100644
index 0000000..796635e
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-th/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"ที่จัดเก็บข้อมูลภายนอก"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"ที่จัดเก็บข้อมูลภายใน"</string>
+    <string name="root_documents" msgid="4051252304075469250">"เอกสาร"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-tl/strings.xml b/packages/ExternalStorageProvider/res/values-tl/strings.xml
new file mode 100644
index 0000000..529cdc2
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-tl/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"External Storage"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Mga Dokumento"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-tr/strings.xml b/packages/ExternalStorageProvider/res/values-tr/strings.xml
new file mode 100644
index 0000000..d6bd52a
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-tr/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Harici Depolama"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Dahili depolama"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Dokümanlar"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-uk/strings.xml b/packages/ExternalStorageProvider/res/values-uk/strings.xml
new file mode 100644
index 0000000..b8206e0
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-uk/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Зовнішня пам’ять"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Внутрішня пам’ять"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Документи"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-vi/strings.xml b/packages/ExternalStorageProvider/res/values-vi/strings.xml
new file mode 100644
index 0000000..b171c93
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-vi/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Bộ nhớ ngoài"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Bộ nhớ trong"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Tài liệu"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..7df77dd
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"外部存储设备"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"内部存储空间"</string>
+    <string name="root_documents" msgid="4051252304075469250">"文档"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..62d8afb
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"外部儲存空間"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"內部儲存空間"</string>
+    <string name="root_documents" msgid="4051252304075469250">"文件"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..62d8afb
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"外部儲存空間"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"內部儲存空間"</string>
+    <string name="root_documents" msgid="4051252304075469250">"文件"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/res/values-zu/strings.xml b/packages/ExternalStorageProvider/res/values-zu/strings.xml
new file mode 100644
index 0000000..4a0a845
--- /dev/null
+++ b/packages/ExternalStorageProvider/res/values-zu/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7123375275748530234">"Isitoreji sangaphandle"</string>
+    <string name="root_internal_storage" msgid="827844243068584127">"Isitoreji sangaphakathi"</string>
+    <string name="root_documents" msgid="4051252304075469250">"Amadokhumenti"</string>
+</resources>
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 559e052..16fc3e5 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -27,6 +27,7 @@
 import android.os.CancellationSignal;
 import android.os.Environment;
 import android.os.FileObserver;
+import android.os.FileUtils;
 import android.os.ParcelFileDescriptor;
 import android.os.storage.StorageManager;
 import android.os.storage.StorageVolume;
@@ -143,7 +144,7 @@
                 final RootInfo root = new RootInfo();
                 root.rootId = rootId;
                 root.flags = Root.FLAG_SUPPORTS_CREATE | Root.FLAG_LOCAL_ONLY | Root.FLAG_ADVANCED
-                        | Root.FLAG_SUPPORTS_SEARCH;
+                        | Root.FLAG_SUPPORTS_SEARCH | Root.FLAG_SUPPORTS_DIR_SELECTION;
                 if (ROOT_ID_PRIMARY_EMULATED.equals(rootId)) {
                     root.title = getContext().getString(R.string.root_internal_storage);
                 } else {
@@ -240,8 +241,8 @@
                 flags |= Document.FLAG_DIR_SUPPORTS_CREATE;
             } else {
                 flags |= Document.FLAG_SUPPORTS_WRITE;
+                flags |= Document.FLAG_SUPPORTS_DELETE;
             }
-            flags |= Document.FLAG_SUPPORTS_DELETE;
         }
 
         final String displayName = file.getName();
@@ -284,11 +285,26 @@
     }
 
     @Override
+    public boolean isChildDocument(String parentDocId, String docId) {
+        try {
+            final File parent = getFileForDocId(parentDocId).getCanonicalFile();
+            final File doc = getFileForDocId(docId).getCanonicalFile();
+            return FileUtils.contains(parent, doc);
+        } catch (IOException e) {
+            throw new IllegalArgumentException(
+                    "Failed to determine if " + docId + " is child of " + parentDocId + ": " + e);
+        }
+    }
+
+    @Override
     public String createDocument(String docId, String mimeType, String displayName)
             throws FileNotFoundException {
         final File parent = getFileForDocId(docId);
-        File file;
+        if (!parent.isDirectory()) {
+            throw new IllegalArgumentException("Parent document isn't a directory");
+        }
 
+        File file;
         if (Document.MIME_TYPE_DIR.equals(mimeType)) {
             file = new File(parent, displayName);
             if (!file.mkdir()) {
@@ -317,6 +333,7 @@
 
     @Override
     public void deleteDocument(String docId) throws FileNotFoundException {
+        // TODO: extend to delete directories
         final File file = getFileForDocId(docId);
         if (!file.delete()) {
             throw new IllegalStateException("Failed to delete " + file);
diff --git a/packages/FusedLocation/res/values-af/strings.xml b/packages/FusedLocation/res/values-af/strings.xml
new file mode 100644
index 0000000..a321abe
--- /dev/null
+++ b/packages/FusedLocation/res/values-af/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Saamgesmelte ligging"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-am/strings.xml b/packages/FusedLocation/res/values-am/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-am/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ar/strings.xml b/packages/FusedLocation/res/values-ar/strings.xml
new file mode 100644
index 0000000..dfbcf7a
--- /dev/null
+++ b/packages/FusedLocation/res/values-ar/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"الموقع المدمج"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-bg/strings.xml b/packages/FusedLocation/res/values-bg/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-bg/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ca/strings.xml b/packages/FusedLocation/res/values-ca/strings.xml
new file mode 100644
index 0000000..9dae512
--- /dev/null
+++ b/packages/FusedLocation/res/values-ca/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Ubicació combinada"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-cs/strings.xml b/packages/FusedLocation/res/values-cs/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-cs/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-da/strings.xml b/packages/FusedLocation/res/values-da/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-da/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-de/strings.xml b/packages/FusedLocation/res/values-de/strings.xml
new file mode 100644
index 0000000..d7e5faa
--- /dev/null
+++ b/packages/FusedLocation/res/values-de/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Kombinierte Standortbestimmung"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-el/strings.xml b/packages/FusedLocation/res/values-el/strings.xml
new file mode 100644
index 0000000..1243b21
--- /dev/null
+++ b/packages/FusedLocation/res/values-el/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Ενοποιημένη τοποθεσία"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-en-rGB/strings.xml b/packages/FusedLocation/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-en-rGB/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-en-rIN/strings.xml b/packages/FusedLocation/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-en-rIN/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-es-rUS/strings.xml b/packages/FusedLocation/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..ec95314
--- /dev/null
+++ b/packages/FusedLocation/res/values-es-rUS/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Ubicación combinada"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-es/strings.xml b/packages/FusedLocation/res/values-es/strings.xml
new file mode 100644
index 0000000..ec95314
--- /dev/null
+++ b/packages/FusedLocation/res/values-es/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Ubicación combinada"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-et-rEE/strings.xml b/packages/FusedLocation/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..fcf4ef7
--- /dev/null
+++ b/packages/FusedLocation/res/values-et-rEE/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Liidetud asukoht"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-fa/strings.xml b/packages/FusedLocation/res/values-fa/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-fa/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-fi/strings.xml b/packages/FusedLocation/res/values-fi/strings.xml
new file mode 100644
index 0000000..2d308b3
--- /dev/null
+++ b/packages/FusedLocation/res/values-fi/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Yhdistetty sijainti"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-fr-rCA/strings.xml b/packages/FusedLocation/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..c7d33af
--- /dev/null
+++ b/packages/FusedLocation/res/values-fr-rCA/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Tables de fusion"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-fr/strings.xml b/packages/FusedLocation/res/values-fr/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-fr/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-hi/strings.xml b/packages/FusedLocation/res/values-hi/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-hi/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-hr/strings.xml b/packages/FusedLocation/res/values-hr/strings.xml
new file mode 100644
index 0000000..b2a2cc9
--- /dev/null
+++ b/packages/FusedLocation/res/values-hr/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Lokacija iz kombiniranih izvora"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-hu/strings.xml b/packages/FusedLocation/res/values-hu/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-hu/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-hy-rAM/strings.xml b/packages/FusedLocation/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-hy-rAM/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-in/strings.xml b/packages/FusedLocation/res/values-in/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-in/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-it/strings.xml b/packages/FusedLocation/res/values-it/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-it/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-iw/strings.xml b/packages/FusedLocation/res/values-iw/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-iw/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ja/strings.xml b/packages/FusedLocation/res/values-ja/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-ja/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ka-rGE/strings.xml b/packages/FusedLocation/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-ka-rGE/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-km-rKH/strings.xml b/packages/FusedLocation/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..649e4f7
--- /dev/null
+++ b/packages/FusedLocation/res/values-km-rKH/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"ភ្ជាប់​ទីតាំង"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ko/strings.xml b/packages/FusedLocation/res/values-ko/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-ko/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-lo-rLA/strings.xml b/packages/FusedLocation/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-lo-rLA/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-lt/strings.xml b/packages/FusedLocation/res/values-lt/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-lt/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-lv/strings.xml b/packages/FusedLocation/res/values-lv/strings.xml
new file mode 100644
index 0000000..8c40cb2
--- /dev/null
+++ b/packages/FusedLocation/res/values-lv/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Apvienota atrašanās vieta"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-mn-rMN/strings.xml b/packages/FusedLocation/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..8055ca8
--- /dev/null
+++ b/packages/FusedLocation/res/values-mn-rMN/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Нэгдмэл байршил"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ms-rMY/strings.xml b/packages/FusedLocation/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..d345cb8
--- /dev/null
+++ b/packages/FusedLocation/res/values-ms-rMY/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Lokasi Terlakur"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-nb/strings.xml b/packages/FusedLocation/res/values-nb/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-nb/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-nl/strings.xml b/packages/FusedLocation/res/values-nl/strings.xml
new file mode 100644
index 0000000..b3003c8
--- /dev/null
+++ b/packages/FusedLocation/res/values-nl/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Samengestelde locatie"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-pl/strings.xml b/packages/FusedLocation/res/values-pl/strings.xml
new file mode 100644
index 0000000..4637034
--- /dev/null
+++ b/packages/FusedLocation/res/values-pl/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Uśredniona lokalizacja"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-pt-rPT/strings.xml b/packages/FusedLocation/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..2707fa9
--- /dev/null
+++ b/packages/FusedLocation/res/values-pt-rPT/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Localização Fundida"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-pt/strings.xml b/packages/FusedLocation/res/values-pt/strings.xml
new file mode 100644
index 0000000..4f8277a
--- /dev/null
+++ b/packages/FusedLocation/res/values-pt/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Localização combinada"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ro/strings.xml b/packages/FusedLocation/res/values-ro/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-ro/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-ru/strings.xml b/packages/FusedLocation/res/values-ru/strings.xml
new file mode 100644
index 0000000..40d9e6f
--- /dev/null
+++ b/packages/FusedLocation/res/values-ru/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Геоданные из нескольких источников"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-sk/strings.xml b/packages/FusedLocation/res/values-sk/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-sk/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-sl/strings.xml b/packages/FusedLocation/res/values-sl/strings.xml
new file mode 100644
index 0000000..928c50b
--- /dev/null
+++ b/packages/FusedLocation/res/values-sl/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Kombinirana lokacija"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-sr/strings.xml b/packages/FusedLocation/res/values-sr/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-sr/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-sv/strings.xml b/packages/FusedLocation/res/values-sv/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-sv/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-sw/strings.xml b/packages/FusedLocation/res/values-sw/strings.xml
new file mode 100644
index 0000000..60c235e
--- /dev/null
+++ b/packages/FusedLocation/res/values-sw/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Eneo Hakika"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-th/strings.xml b/packages/FusedLocation/res/values-th/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-th/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-tl/strings.xml b/packages/FusedLocation/res/values-tl/strings.xml
new file mode 100644
index 0000000..94a2507
--- /dev/null
+++ b/packages/FusedLocation/res/values-tl/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Naka-fuse na Lokasyon"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-tr/strings.xml b/packages/FusedLocation/res/values-tr/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-tr/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-uk/strings.xml b/packages/FusedLocation/res/values-uk/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-uk/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-vi/strings.xml b/packages/FusedLocation/res/values-vi/strings.xml
new file mode 100644
index 0000000..e0e83a8
--- /dev/null
+++ b/packages/FusedLocation/res/values-vi/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Vị trí được hợp nhất"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-zh-rCN/strings.xml b/packages/FusedLocation/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..e6d7bc1
--- /dev/null
+++ b/packages/FusedLocation/res/values-zh-rCN/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"一体化位置信息"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-zh-rHK/strings.xml b/packages/FusedLocation/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-zh-rHK/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-zh-rTW/strings.xml b/packages/FusedLocation/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..0d2cccc
--- /dev/null
+++ b/packages/FusedLocation/res/values-zh-rTW/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Fused Location"</string>
+</resources>
diff --git a/packages/FusedLocation/res/values-zu/strings.xml b/packages/FusedLocation/res/values-zu/strings.xml
new file mode 100644
index 0000000..62d4359
--- /dev/null
+++ b/packages/FusedLocation/res/values-zu/strings.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="5379477904423203699">"Indawo ehlanganisiwe"</string>
+</resources>
diff --git a/packages/FusedLocation/src/com/android/location/fused/FusedLocationService.java b/packages/FusedLocation/src/com/android/location/fused/FusedLocationService.java
index 509c010..12966cf 100644
--- a/packages/FusedLocation/src/com/android/location/fused/FusedLocationService.java
+++ b/packages/FusedLocation/src/com/android/location/fused/FusedLocationService.java
@@ -16,9 +16,6 @@
 
 package com.android.location.fused;
 
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
 import android.app.Service;
 import android.content.Intent;
 import android.os.IBinder;
diff --git a/packages/InputDevices/res/values-af/strings.xml b/packages/InputDevices/res/values-af/strings.xml
new file mode 100644
index 0000000..ddaf706
--- /dev/null
+++ b/packages/InputDevices/res/values-af/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Invoertoestelle"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-sleutelbord"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engels (VK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Engels (VS)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Engels (VS), internasionale styl"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Engels (VS), Colemak-styl"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Engels (VS), Dvorak-styl"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Duits"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Frans"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Frans (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russies"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russies, Mac-styl"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spaans"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Switserse Frans"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Switserse Duits"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgies"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgaars"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiaans"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Deens"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Noors"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Sweeds"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Fins"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroaties"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tsjeggies"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estnies"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hongaars"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Yslands"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasiliaans"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugees"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slowaaks"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Sloweens"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turks"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Oekraïens"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabies"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grieks"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebreeus"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litaus"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spaans (Latyn)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-am/strings.xml b/packages/InputDevices/res/values-am/strings.xml
new file mode 100644
index 0000000..09b65e0
--- /dev/null
+++ b/packages/InputDevices/res/values-am/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"የግቤት መሣሪያዎች"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"የAndroid የቁልፍ ሰሌዳ"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"እንግሊዝኛ (ዩኬ)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"እንግሊዘኛ (ዩ.ኤስ.)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"እንግሊዘኛ (ዩ. ኤስ.)፣ አለም አቀፍ ቅጥ"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"እንግሊዘኛ (ዩ. ኤስ.)፣ የኮልማርክ ቅጥ"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"እንግሊዘኛ (ዩ. ኤስ.)፣ የድቮራክ ቅጥ"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"ጀርመን"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"ፈረንሳይኛ"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"ፈረንሳይኛ (ካናዳ)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ሩስያኛ"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ሩስያኛ፣ Mac ቅጥ"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"ስፓኒሽ"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"የስዊዝ ፈረንሳይኛ"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"የስዊዝ ጀርመን"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"ቤልጂየም"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"ቡልጋሪያ"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"ጣሊያንኛ"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"ዴኒሽ"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"ኖርዌጂያ"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"ስዊድንኛ"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ፊኒሽ"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"ክሮሽያ"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"ቼክ"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ኤስቶኒያ"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ሀንጋሪ"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"አይስላንድ"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ብራዚል"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"ፖርቹጋል"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"ስሎቫክ"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"ስሎቫኒያ"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ቱርክኛ"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ዩክሬን"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"አረብኛ"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"ግሪክኛ"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ዕብራስጥ"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ሊቱዌኒያኛ"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ስፓኒሽ (ላቲን)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ar/strings.xml b/packages/InputDevices/res/values-ar/strings.xml
new file mode 100644
index 0000000..4c5cccc
--- /dev/null
+++ b/packages/InputDevices/res/values-ar/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"أجهزة إدخال بيانات"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"‏لوحة مفاتيح Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"الإنجليزية (المملكة المتحدة)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"الإنجليزية (الولايات المتحدة)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"الإنجليزية (الولايات المتحدة)، النمط الدولي"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"‏الإنجليزية (الولايات المتحدة)، نمط Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"‏الإنجليزية (الولايات المتحدة)، نمط Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"الألمانية"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"الفرنسية"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"الفرنسية (كندا)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"الروسية"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"‏الروسية، نمط Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"الإسبانية"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"الفرنسية السويسرية"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"الألمانية السويسرية"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"البلجيكية"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"البلغارية"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"الإيطالية"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"الدانماركية"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"النرويجية"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"السويدية"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"الفنلندية"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"الكرواتية"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"التشيكية"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"الإستونية"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"المجرية"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"الأيسلندية"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"البرازيلية"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"البرتغالية"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"السلوفاكية"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"السلوفينية"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"التركية"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"الأوكرانية"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"العربية"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"اليونانية"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"العبرية"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"الليتوانية"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"الإسبانية (اللاتينية)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-bg/strings.xml b/packages/InputDevices/res/values-bg/strings.xml
new file mode 100644
index 0000000..cc3eb36
--- /dev/null
+++ b/packages/InputDevices/res/values-bg/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Входни устройства"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Клавиатура на Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"английски (Великобритания)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"английски (САЩ)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"англ. (САЩ) – стил „Mеждународна“"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"английски (САЩ) – стил „Коулмак“"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"английски (САЩ) – стил „Дворак“"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"немски"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"френски"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"френски (Канада)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"руски"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"руски – стил „Mac“"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"испански"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"швейцарски френски"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"швейцарски немски"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"белгийски"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"български"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"италиански"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"датски"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"норвежки"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"шведски"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"финландски"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"хърватски"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"чешки"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"естонски"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"унгарски"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"исландски"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"португалски (Бразилия)"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"португалски"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"словашки"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"словенски"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"турски"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"украински"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Арабска клавиатурна подредба"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Гръцка клавиатурна подредба"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Ивритска клавиатурна подредба"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовска клавиатурна подредба"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Исп. клав. подредба (Лат. Америка)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ca/strings.xml b/packages/InputDevices/res/values-ca/strings.xml
new file mode 100644
index 0000000..2c8521c
--- /dev/null
+++ b/packages/InputDevices/res/values-ca/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Dispositius d’entrada"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Teclat Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Anglès (RU)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Anglès (EUA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Anglès (EUA), estil internacional"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Anglès (EUA), estil Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Anglès (EUA), estil Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Alemany"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francès"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francès (Canadà)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Rus"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Rus, estil Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Espanyol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francès suís"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Alemany suís"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belga"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Búlgar"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italià"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danès"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Noruec"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Suec"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finès"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croat"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Txec"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonià"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hongarès"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandès"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasiler"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portuguès"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Eslovac"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Eslovè"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turc"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraïnès"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Àrab"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grec"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebreu"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituà"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanyol (llatí)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-cs/strings.xml b/packages/InputDevices/res/values-cs/strings.xml
new file mode 100644
index 0000000..9b65eed
--- /dev/null
+++ b/packages/InputDevices/res/values-cs/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Vstupní zařízení"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Klávesnice Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"anglické (Spojené království)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"anglické (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"anglické (USA), mezinárodní"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"anglické (USA), styl Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"anglické (USA), styl Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"německé"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"francouzské"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"francouzské (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ruské"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ruské, styl Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"španělské"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"švýcarské (francouzština)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"švýcarské (němčina)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belgické"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bulharské"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"italské"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"dánské"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norské"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"švédské"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"finské"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"chorvatské"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"české"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"estonské"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"maďarské"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islandské"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazilské"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalské"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovenské"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovinské"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turecké"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinské"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabština"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"řečtina"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebrejština"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litevština"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španělština (Latinská Amerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-da/strings.xml b/packages/InputDevices/res/values-da/strings.xml
new file mode 100644
index 0000000..8b423ab
--- /dev/null
+++ b/packages/InputDevices/res/values-da/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Inputenheder"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-tastatur"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engelsk (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Engelsk (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Engelsk (USA), international stil"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Engelsk (USA), Colemak-stil"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Engelsk (USA), Dvorak-stil"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Tysk"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Fransk"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Fransk (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russisk"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russisk, Mac-stil"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spansk"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Schweizisk fransk"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Schweizertysk"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgisk"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarsk"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiensk"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Dansk"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norsk"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Svensk"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finsk"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroatisk"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tjekkisk"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estisk"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ungarsk"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandsk"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasiliansk"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugisisk"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovakisk"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovensk"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Tyrkisk"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainsk"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabisk"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Græsk"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebræisk"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauisk"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spansk (latinamerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-de/strings.xml b/packages/InputDevices/res/values-de/strings.xml
new file mode 100644
index 0000000..b5a5870
--- /dev/null
+++ b/packages/InputDevices/res/values-de/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Eingabegeräte"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-Tastatur"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Englisch (Großbritannien)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Englisch (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Englisch (USA), international"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Englisch (USA), Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Englisch (USA), Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Deutsch"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Französisch"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Französisch (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russisch"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russisch, Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanisch"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Schweizer Französisch"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Schweizerdeutsch"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgisch"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarisch"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italienisch"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Dänisch"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegisch"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Schwedisch"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnisch"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroatisch"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tschechisch"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estnisch"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ungarisch"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Isländisch"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasilianisch"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugiesisch"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slowakisch"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slowenisch"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Türkisch"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainisch"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabisch"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Griechisch"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebräisch"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauisch"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanisch (Lateinisch)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-el/strings.xml b/packages/InputDevices/res/values-el/strings.xml
new file mode 100644
index 0000000..976f370
--- /dev/null
+++ b/packages/InputDevices/res/values-el/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Συσκευές εισόδου"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Πληκτρολόγιο Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Αγγλικά (ΗΒ)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Αγγλικά (ΗΠΑ)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Αγγλικά (ΗΠΑ), τύπου International"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Αγγλικά (ΗΠΑ), τύπου Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Αγγλικά (ΗΠΑ), τύπου Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Γερμανικά"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Γαλλικά"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Γαλλικά (Καναδά)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Ρωσικά"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Ρωσικά, τύπου Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Ισπανικά"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Γαλλικά Ελβετίας"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Γερμανικά Ελβετίας"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Βελγικά"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Βουλγαρικά"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Ιταλικά"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Δανικά"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Νορβηγικά"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Σουηδικά"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Φινλανδικά"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Κροατικά"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Τσεχικά"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Εσθονικά"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ουγγρικά"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Ισλανδικά"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Βραζιλιάνικα"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Πορτογαλικά"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Σλοβακικά"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Σλοβενικά"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Τουρκικά"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ουκρανικά"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Αραβικά"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Ελληνικά"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Εβραϊκά"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Λιθουανικά"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Ισπανικά (Λατινικής Αμερικής)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-en-rGB/strings.xml b/packages/InputDevices/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..50a98b26
--- /dev/null
+++ b/packages/InputDevices/res/values-en-rGB/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android keyboard"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"English (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"English (US)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"English (US), International style"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"English (US), Colemak style"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"English (US), Dvorak style"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"German"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"French"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"French (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russian"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russian, Mac style"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanish"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Swiss French"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Swiss German"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgian"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarian"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italian"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danish"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegian"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedish"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnish"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croatian"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Czech"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonian"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungarian"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Icelandic"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazilian"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portuguese"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovak"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenian"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkish"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainian"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabic"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greek"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrew"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-en-rIN/strings.xml b/packages/InputDevices/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..50a98b26
--- /dev/null
+++ b/packages/InputDevices/res/values-en-rIN/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android keyboard"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"English (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"English (US)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"English (US), International style"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"English (US), Colemak style"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"English (US), Dvorak style"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"German"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"French"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"French (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russian"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russian, Mac style"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanish"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Swiss French"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Swiss German"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgian"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarian"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italian"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danish"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegian"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedish"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnish"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croatian"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Czech"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonian"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungarian"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Icelandic"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazilian"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portuguese"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovak"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenian"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkish"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainian"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabic"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greek"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrew"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-es-rUS/strings.xml b/packages/InputDevices/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..b842a3b
--- /dev/null
+++ b/packages/InputDevices/res/values-es-rUS/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Dispositivos de entrada"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Teclado de Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglés (Reino Unido)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglés (EE. UU.)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglés (EE. UU.), internacional"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglés (EE. UU.), Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglés (EE. UU.), Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Alemán"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francés"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francés (Canadá)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Ruso"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Ruso, Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Español"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francés de Suiza"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Alemán de Suiza"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belga"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Búlgaro"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiano"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danés"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Noruego"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Sueco"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandés"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croata"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Checo"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonio"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Húngaro"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandés"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasileño"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugués"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Eslovaco"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Esloveno"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turco"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraniano"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Árabe"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Griego"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebreo"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Español (latino)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-es/strings.xml b/packages/InputDevices/res/values-es/strings.xml
new file mode 100644
index 0000000..5dc85a0
--- /dev/null
+++ b/packages/InputDevices/res/values-es/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Dispositivos de entrada"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Teclado de Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglés (Reino Unido)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglés (EE.UU.)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglés (EE.UU.), estilo internacional"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglés (EE.UU.), estilo Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglés (EE.UU.), estilo Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Alemán"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francés"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francés (Canadá)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Ruso"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Ruso, estilo Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Español"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francés de Suiza"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Alemán suizo"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belga"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Búlgaro"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiano"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danés"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Noruego"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Sueco"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandés"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croata"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Checo"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonio"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Húngaro"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandés"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasileño"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugués"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Eslovaco"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Esloveno"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turco"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraniano"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Árabe"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Griego"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebreo"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Español (Latinoamérica)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-et-rEE/strings.xml b/packages/InputDevices/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..4ffdb37
--- /dev/null
+++ b/packages/InputDevices/res/values-et-rEE/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Sisendseadmed"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Androidi klaviatuur"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglise (Ühendkuningriik)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglise (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglise (USA), rahvusvaheline stiil"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglise (USA), Colemaki stiil"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglise (USA), Dvoraki stiil"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Saksa"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Prantsuse"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Prantsuse (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Vene"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Vene, Maci stiil"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Hispaania"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Šveitsi prantsuse"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Šveitsisaksa"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgia"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgaaria"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Itaalia"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Taani"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norra"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Rootsi"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Soome"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Horvaatia"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tšehhi"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Eesti"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ungari"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandi"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasiilia"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugali"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovaki"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Sloveenia"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Türgi"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukraina"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Araabia"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Kreeka"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Heebrea"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Leedu"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Hispaania (Ladina-Ameerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-fa/strings.xml b/packages/InputDevices/res/values-fa/strings.xml
new file mode 100644
index 0000000..fd6f54b
--- /dev/null
+++ b/packages/InputDevices/res/values-fa/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"‏صفحه‌کلید Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"انگلیسی (بریتانیا)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"انگلیسی (امریکا)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"انگلیسی (ایالات متحده)، سبک بین‌المللی"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"‏انگلیسی (ایالات متحده)، سبک Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"‏انگلیسی (ایالات متحده)، سبک Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"آلمانی"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"فرانسوی"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"فرانسوی (کانادا)‏"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"روسی"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"‏روسی، سبک Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"اسپانیایی"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"فرانسوی سوئیس"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"آلمانی سوئیسی"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"بلژیکی"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"بلغاری"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"ایتالیایی"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"دانمارکی"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"نروژی"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"سوئدی"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"فنلاندی"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"کرواسی"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"چک"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"استونیایی"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"مجارستانی"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ایسلندی"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"برزیلی"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"پرتغالی"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"اسلوواکی"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"اسلوونیایی"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ترکی"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"اوکراینی"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"عربی"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"یونانی"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"عبری"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"لیتوانیایی"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"اسپانیایی (لاتین)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-fi/strings.xml b/packages/InputDevices/res/values-fi/strings.xml
new file mode 100644
index 0000000..b7ec183
--- /dev/null
+++ b/packages/InputDevices/res/values-fi/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Syöttölaitteet"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-näppäimistö"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"englanti (Iso-Britannia)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"englanti (Yhdysvallat)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"englanti (Yhdysvallat), kansainvälinen"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"englanti (Yhdysvallat), Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"englanti (Yhdysvallat), Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"saksa"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"ranska"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"ranska (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"venäjä"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"venäjä, Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"espanja"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"sveitsinranska"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"sveitsinsaksa"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belgialainen"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bulgaria"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"italia"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"tanska"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norja"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"ruotsi"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"suomi"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"kroaatti"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"tšekki"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"viro"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"unkari"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islanti"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brasilialainen"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugali"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovakki"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"sloveeni"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turkki"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukraina"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabia"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"kreikka"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"heprea"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"liettua"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"espanja (Latinalainen Amerikka)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-fr-rCA/strings.xml b/packages/InputDevices/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..18600ed
--- /dev/null
+++ b/packages/InputDevices/res/values-fr-rCA/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Périphériques d\'entrée"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Clavier Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Anglais (britannique)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Anglais (États-Unis)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Anglais (États-Unis), international"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Anglais (États-Unis), type Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Anglais (États-Unis), type Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Allemand"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Français"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Français (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russe"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russe, type Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Espagnol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Français (Suisse)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Allemand (Suisse)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belge"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgare"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italien"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danois"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norvégien"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Suédois"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnois"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croate"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tchèque"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonien"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hongrois"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandais"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brésilien"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugais"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovaque"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovène"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turc"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainien"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabe"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grec"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hébreu"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituanien"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espagnol (latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-fr/strings.xml b/packages/InputDevices/res/values-fr/strings.xml
new file mode 100644
index 0000000..e3ca49c
--- /dev/null
+++ b/packages/InputDevices/res/values-fr/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Clavier Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Anglais (Royaume-Uni)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Anglais (États-Unis)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Anglais (États-Unis), international"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Anglais (États-Unis), type Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Anglais (États-Unis), type Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Allemand"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Français"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Français (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russe"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russe, type Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Espagnol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Français (Suisse)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Allemand (Suisse)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belge"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgare"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italien"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danois"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norvégien"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Suédois"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnois"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croate"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tchèque"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonien"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hongrois"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandais"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brésilien"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugais"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovaque"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovène"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turc"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainien"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabe"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grec"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hébreu"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituanien"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espagnol (latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-hi/strings.xml b/packages/InputDevices/res/values-hi/strings.xml
new file mode 100644
index 0000000..a1a4ef2
--- /dev/null
+++ b/packages/InputDevices/res/values-hi/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"इनपुट उपकरण"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android कीबोर्ड"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"अंग्रेज़ी (यूके)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"अंग्रेज़ी (यूएस)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"अंग्रेज़ी (यूएस), अंतर्राष्ट्रीय शैली"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"अंग्रेज़ी (यूएस), कोलमैक शैली"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"अंग्रेज़ी (यूएस), ड्वोरक शैली"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"जर्मन"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"फ़्रांसीसी"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"फ़्रांसीसी (कनाडा)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"रूसी"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"रूसी, मैक शैली"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"स्पैनिश"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"स्विस फ़्रांसीसी"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"स्विस जर्मन"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"बेल्जियाई"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"बुल्‍गारियाई"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"इतालवी"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"डैनिश"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"नार्वेजियाई"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"स्वीडिश"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"फ़िनिश"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"क्रोएशियाई"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"चेक"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"एस्टोनियाई"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"हंगेरियाई"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"आइसलैंडिक"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ब्राज़ीलियाई"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"पुर्तगाली"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"स्लोवाक"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"स्लोवेनियाई"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"तुर्की"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"यूक्रेनियाई"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"अरबी"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"ग्रीक"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"हिब्रू"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"लिथुआनियाई"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"स्पेनिश (लैटिन)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-hr/strings.xml b/packages/InputDevices/res/values-hr/strings.xml
new file mode 100644
index 0000000..512ffd7
--- /dev/null
+++ b/packages/InputDevices/res/values-hr/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Uređaji za unos"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android tipkovnica"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"engleska (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"engleska (SAD)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"engleska (SAD), međunarodna"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"engleska (SAD), Colemakov raspored"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"engleska (SAD), Dvorakov raspored"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"njemačka"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"francuska"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"francuska (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ruska"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ruska, raspored Maca"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"španjolska"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"švicarsko-francuska"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"švicarsko-njemačka"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belgijska"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bugarska"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"talijanska"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"danska"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norveška"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"švedska"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"finska"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"hrvatska"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"češka"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"estonska"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"mađarska"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islandska"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazilska"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalska"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovačka"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovenska"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turska"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinska"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arapski"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"grčki"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebrejski"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litavski"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španjolski (Latinska Amerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-hu/strings.xml b/packages/InputDevices/res/values-hu/strings.xml
new file mode 100644
index 0000000..645e597
--- /dev/null
+++ b/packages/InputDevices/res/values-hu/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Beviteli eszközök"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-billentyűzet"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"angol (Egyesült Királyság)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"angol (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"angol (USA), nemzetközi stílus"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"angol (USA), Colemak-stílus"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"angol (USA), Dvorak-stílus"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"német"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"francia"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"francia (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"orosz"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"orosz, Mac-stílus"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"spanyol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"svájci francia"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"svájci német"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belga"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bolgár"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"olasz"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"dán"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norvég"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"svéd"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"finn"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"horvát"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"cseh"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"észt"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"magyar"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"izlandi"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazil"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugál"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"szlovák"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"szlovén"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"török"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrán"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arab"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"görög"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"héber"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litván"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"spanyol (latin-amerikai)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-hy-rAM/strings.xml b/packages/InputDevices/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..282dc82
--- /dev/null
+++ b/packages/InputDevices/res/values-hy-rAM/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Մուտքագրման ​​սարքեր"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android ստեղնաշար"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Անգլերեն (ՄԲ)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Անգլերեն (ԱՄՆ)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Անգլերեն (ԱՄՆ), միջազգային տեսակ"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Անգլերեն (ԱՄՆ), Colemak տեսակ"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Անգլերեն (ԱՄՆ), Dvorak տեսակ"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Գերմաներեն"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Ֆրանսերեն"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Ֆրանսերեն (Կանադա)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Ռուսերեն"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Ռուսերեն, Mac տեսակ"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Իսպաներեն"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Շվեյցարական ֆրանսերեն"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Շվեյցարական գերմաներեն"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Բելգիական"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Բուլղարերեն"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Իտալերեն"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Դանիերեն"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Նորվեգերեն"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Շվեդերեն"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Ֆիններեն"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Խորվաթերեն"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Չեխերեն"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Էստոներեն"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Հունգարերեն"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Իսլանդերեն"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Բրազիլերեն"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Պորտուգալերեն"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Սլովակերեն"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Սլովեներեն"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Թուրքերեն"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ուկրաիներեն"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Արաբերեն"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Հունարեն"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Եբրայերեն"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Լիտվերեն"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Իսպաներեն (Լատինական)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-in/strings.xml b/packages/InputDevices/res/values-in/strings.xml
new file mode 100644
index 0000000..a7fc330
--- /dev/null
+++ b/packages/InputDevices/res/values-in/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Perangkat Masukan"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Keyboard Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inggris (Britania)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inggris (Amerika)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inggris (AS), gaya Internasional"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inggris (AS), gaya Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inggris (AS), gaya Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Jerman"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Prancis"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Prancis (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Rusia"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Rusia, gaya Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanyol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Prancis Swiss"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Jerman Swiss"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgia"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgaria"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italia"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Denmark"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegia"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedia"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandia"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroasia"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Cheska"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonia"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungaria"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandia"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasil"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugis"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slowakia"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenia"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turki"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukraina"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arab"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Yunani"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Ibrani"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuania"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanyol (Latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-it/strings.xml b/packages/InputDevices/res/values-it/strings.xml
new file mode 100644
index 0000000..e8fe310
--- /dev/null
+++ b/packages/InputDevices/res/values-it/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Dispositivi di immissione"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Tastiera Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglese (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglese (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglese (USA), stile internazionale"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglese (USA), stile Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglese (USA), stile Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Tedesco"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francese"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francese (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russo"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russo, stile Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spagnolo"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francese svizzero"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Tedesco svizzero"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belga"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgaro"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiano"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danese"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norvegese"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Svedese"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandese"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croato"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Ceco"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estone"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ungherese"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandese"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasiliano"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portoghese"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovacco"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Sloveno"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turco"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraino"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabo"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greco"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Ebraico"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spagnolo (America Latina)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-iw/strings.xml b/packages/InputDevices/res/values-iw/strings.xml
new file mode 100644
index 0000000..d2673d9
--- /dev/null
+++ b/packages/InputDevices/res/values-iw/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"התקני קלט"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"‏מקלדת Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"אנגלית (בריטניה)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"אנגלית (ארה\"ב)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"אנגלית (ארה\"ב), סגנון בינ\"ל"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"‏אנגלית (ארה\"ב), סגנון Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"‏אנגלית (ארה\"ב), סגנון Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"גרמנית"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"צרפתית"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"צרפתית (קנדה)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"רוסית"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"‏רוסית, סגנון Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"ספרדית"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"צרפתית שוויצרית"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"גרמנית שוויצרית"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"בלגית"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"בולגרית"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"איטלקית"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"דנית"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"נורווגית"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"שוודית"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"פינית"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"קרואטית"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"צ\'כית"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"אסטונית"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"הונגרית"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"איסלנדית"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ברזילאית"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"פורטוגזית"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"סלובקית"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"סלובנית"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"טורקית"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"אוקראינית"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ערבית"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"יוונית"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"עברית"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ליטאית"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ספרדית (לטינית)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ja/strings.xml b/packages/InputDevices/res/values-ja/strings.xml
new file mode 100644
index 0000000..86cd30e
--- /dev/null
+++ b/packages/InputDevices/res/values-ja/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Androidキーボード"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"英語（イギリス）"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"英語（アメリカ）"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"英語（アメリカ）、インターナショナル配列"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"英語（アメリカ）、Colemak配列"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"英語（アメリカ）、Dvorak配列"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"ドイツ語"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"フランス語"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"フランス語（カナダ）"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ロシア語"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ロシア語（Mac配列）"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"スペイン語"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"フランス語（スイス）"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"ドイツ語（スイス）"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"ベルギー語"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"ブルガリア語"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"イタリア語"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"デンマーク語"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"ノルウェー語"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"スウェーデン語"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"フィンランド語"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"クロアチア語"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"チェコ語"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"エストニア語"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ハンガリー語"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"アイスランド語"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ブラジル配列"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"ポルトガル語"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"スロバキア語"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"スロベニア語"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"トルコ語"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ウクライナ語"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"アラビア語"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"ギリシャ語"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ヘブライ語"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"リトアニア語"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"スペイン語（中南米）"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ka-rGE/strings.xml b/packages/InputDevices/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..14ebee8
--- /dev/null
+++ b/packages/InputDevices/res/values-ka-rGE/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"შეყვანის მოწყობილობები"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-ის კლავიატურა"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ინგლისური (გართ. სამ.)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ინგლისური (აშშ)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"ინგლისური (აშშ), საერთაშორისო სტილი"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"ინგლისური (აშშ), Colemak სტილი"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"ინგლისური (აშშ), Dvorak სტილი"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"გერმანული"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"ფრანგული"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"ფრანგული (კანადა)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"რუსული"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"რუსული, Mac სტილი"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"ესპანური"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"შვეიცარიული ფრანგული"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"შვეიცარიული გერმანული"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"ბელგიური"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"ბულგარული"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"იტალიური"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"დანიური"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"ნორვეგიული"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"შვედური"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ფინური"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"ხორვატიული"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"ჩეხური"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ესტონური"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"უნგრული"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ისლანდიური"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ბრაზილიური"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"პორტუგალიური"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"სლოვაკური"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"სლოვენური"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"თურქული"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"უკრაინული"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"არაბული"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"ბერძნული"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ებრაული"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ლიტვური"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"ესპანური (ლათინური)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-km-rKH/strings.xml b/packages/InputDevices/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..569f273
--- /dev/null
+++ b/packages/InputDevices/res/values-km-rKH/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"ឧបករណ៍​បញ្ចូល"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"ក្ដារចុច​ Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"អង់គ្លេស (​ចក្រភព​អង់គ្លេស)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"អង់គ្លេស (​សហរដ្ឋ​អាមេរិក)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"អង់គ្លេស (សហរដ្ឋ​អាមេរិក​)​, ​​រចនាប័ទ្ម​​អន្តរជាតិ"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"អង់គ្លេស (សហរដ្ឋ​អាមេរិក​)​, ​​រចនាប័ទ្ម Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"អង់គ្លេស (សហរដ្ឋ​អាមេរិក​)​, ​​រចនាប័ទ្ម Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"អាល្លឺម៉ង់"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"បារាំង"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"បារាំង (កាណាដា​)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"រុស្សី"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"រុស្សី ​រចនាប័ទ្ម Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"អេស្ប៉ាញ"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"​​បារាំង​ ស្វីស"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"អាល្លឺម៉ង់ ស្វីស"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"បែលហ្ស៊ិក"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"ប៊ុលហ្ការី"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"អ៊ីតាលី"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"ដាណឺម៉ាក"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"ន័រវែស"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"ស៊ុយអែដ"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ហ្វាំងឡង់"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"ក្រូអាត"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"ឆេក"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"អេស្តូនី"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ហុងគ្រី"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"អ៊ីស្លង់"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ប្រេស៊ីល"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"ព័រទុយហ្គាល់"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"ស្លូវ៉ាគី"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"ស្លូវ៉ានី"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ទួរគី"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"អ៊ុយក្រែន"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"អារ៉ាប់"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"ក្រិក"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"អ៊ីស្រាអែល"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"លីទុយអានី"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"អេស្ប៉ាញ (ឡាតាំង​)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ko/strings.xml b/packages/InputDevices/res/values-ko/strings.xml
new file mode 100644
index 0000000..dbbe6ea
--- /dev/null
+++ b/packages/InputDevices/res/values-ko/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"입력 기기"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android 키보드"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"영어(영국)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"영어(미국)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"영어(미국), 글로벌 스타일"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"영어(미국), 콜맥 스타일"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"영어(미국), 드보락 스타일"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"독일어"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"프랑스어"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"프랑스어(캐나다)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"러시아어"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"러시아어, Mac 스타일"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"스페인어"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"프랑스어(스위스)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"독일어(스위스)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"벨기에어"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"불가리아어"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"이탈리아어"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"덴마크어"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"노르웨이어"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"스웨덴어"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"핀란드어"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"크로아티아어"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"체코어"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"에스토니아어"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"헝가리어"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"아이슬란드어"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"브라질어"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"포르투갈어"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"슬로바키아어"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"슬로베니아어"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"터키어"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"우크라이나어"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"아랍어"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"그리스어"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"히브리어"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"리투아니아어"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"스페인어(라틴)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-lo-rLA/strings.xml b/packages/InputDevices/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..eaf5026
--- /dev/null
+++ b/packages/InputDevices/res/values-lo-rLA/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"ອຸປະກອນປ້ອນຂໍ້ມູນ"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"ແປ້ນພິມ Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"ອັງກິດ (ສະຫະລັດຊະອານາຈັກ)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"ອັງກິດ (ສະຫະລັດຯ)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"ອັງກິດ (ສະຫະລັດຯ), ແບບສາກົນ"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"ອັງກິດ (ສະຫະລັດຯ), ແບບ Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"ອັງກິດ (ສະຫະລັດຯ), ແບບ Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"ເຢຍລະມັນ"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"ຝຣັ່ງ"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"ຝຣັ່ງ (ຄານາດາ)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ຣັດເຊຍ"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ຣັດຊຽຍ, ແບບ Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"ສະແປນນິດ"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"ສະວິສ ຝຣັ່ງ"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"ສະວິສ ເຢຍລະມັນ"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"ເບວຢ້ຽນ"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"ຮັງກາຣຽນ"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"ອິຕາລຽນ"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"ເດັນນິຊ"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"ນໍເວກຽນ"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"ສະວີດິຊ"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ຟິນນິຊ"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"ໂຄຣເອທຽນ"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"ເຊກ"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"ເອສໂຕນຽນ"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ຮັງກາຣຽນ"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ໄອສແລນດິກ"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"ບຣາຊິລຽນ"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"ປໍຕູກີສ"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"ສະໂລແວັກ"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"ສະໂລເວນຽນ"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ເຕີກິສ"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ຢູເຄຣນຽນ"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ອາຣັບ"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"ກ​ຣີກ"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ຮີບຣິວ"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"​ລິ​ທົວ​ນຽນ"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"​ສະ​ແປນ​ນິດ (ລາ​ຕິນ)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-lt/strings.xml b/packages/InputDevices/res/values-lt/strings.xml
new file mode 100644
index 0000000..2fcacde
--- /dev/null
+++ b/packages/InputDevices/res/values-lt/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"„Android“ klaviatūra"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Anglų k. (JK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Anglų k. (JAV)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Anglų k. (JAV), tarptautinis stilius"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Anglų k. (JAV), „Colemak“ stilius"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Anglų k. (JAV), „Dvorak“ stilius"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Vokiečių k."</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Prancūzų k."</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Prancūzų k. (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Rusų k."</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Rusų k., „Mac“ stilius"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Ispanų k."</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Šveicarijos prancūzų k."</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Šveicarijos vokiečių k."</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgų k."</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarų k."</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italų k."</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danų k."</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norvegų k."</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Švedų k."</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Suomių k."</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroatų k."</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Čekų k."</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estų k."</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Vengrų k."</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandų k."</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazilų k."</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugalų k."</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovakų k."</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovėnų k."</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkų k."</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainiečių k."</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabų"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Graikų"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrajų"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lietuvių"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Ispanų (Lotynų Amerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-lv/strings.xml b/packages/InputDevices/res/values-lv/strings.xml
new file mode 100644
index 0000000..921c881
--- /dev/null
+++ b/packages/InputDevices/res/values-lv/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Ievadierīces"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android tastatūra"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Angļu (Lielbritānija)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Angļu (ASV)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Angļu (ASV), starptautiska"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Angļu (ASV), Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Angļu (ASV), Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Vācu"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Franču"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Franču (Kanāda)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Krievu"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Krievu, Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spāņu"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Franču (Šveice)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Vācu (Šveice)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Beļģu"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgāru"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Itāļu"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Dāņu"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norvēģu"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Zviedru"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Somu"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Horvātu"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Čehu"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Igauņu"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ungāru"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Īslandiešu"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazīļu"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugāļu"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovāku"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovēņu"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turku"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukraiņu"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arābu"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grieķu"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Ivrits"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lietuviešu"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spāņu (latīņu)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-mn-rMN/strings.xml b/packages/InputDevices/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..c99339e
--- /dev/null
+++ b/packages/InputDevices/res/values-mn-rMN/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Оруулах Төхөөрөмж"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Андройд гар"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Англи (ИБ)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Англи (АНУ)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Англи (АНУ), Олон улсын стиль"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Англи (АНУ), Колемак стиль"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Англи (АНУ), Дворак стиль"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Герман"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Франц"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Франц (Канад)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Орос"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Орос, Maк стиль"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Испани"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Швейцарийн Франц"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Швейцарийн Герман"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Бельги"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Болгар"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Итали"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Дани"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Норвеги"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Швед"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Финлянд"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Хорват"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Чех"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Эстон"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Унгар"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Исланд"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Бразил"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Португал"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Словак"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Словени"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Турк"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Украйн"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Араб"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Грек"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Еврей"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литви"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Испани (Латин)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ms-rMY/strings.xml b/packages/InputDevices/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..32041d0
--- /dev/null
+++ b/packages/InputDevices/res/values-ms-rMY/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Peranti Input"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Papan kekunci Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Bahasa Inggeris (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Bahasa Inggeris (AS)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Bahasa Inggeris (AS), gaya A/bangsa"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Bahasa Inggeris (AS), gaya Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Bahasa Inggeris (AS), gaya Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Bahasa Jerman"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Bahasa Perancis"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Bahasa Perancis (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Bahasa Rusia"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Bahasa Rusia, gaya Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Bahasa Sepanyol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Perancis Switzerland"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Jerman Switzerland"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Bahasa Belgium"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bahasa Bulgaria"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Bahasa Itali"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Bahasa Denmark"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Bahasa Norway"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Bahasa Sweden"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Bahasa Finland"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Bahasa Croatia"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Bahasa Czech"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Bahasa Estonia"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Bahasa Hungary"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Bahasa Iceland"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Bahasa Brazil"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Bahasa Portugis"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Bahasa Slovakia"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Bahasa Slovenia"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Bahasa Turki"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Bahasa Ukraine"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Bahasa Arab"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Bahasa Greek"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Bahasa Ibrani"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Bahasa Lithuania"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Bahasa Sepanyol (Latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-nb/strings.xml b/packages/InputDevices/res/values-nb/strings.xml
new file mode 100644
index 0000000..e880981
--- /dev/null
+++ b/packages/InputDevices/res/values-nb/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Inndataenheter"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-tastatur"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engelsk (Storbritannia)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Engelsk (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Engelsk (USA), internasjonal stil"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Engelsk (USA), Colemak-stil"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Engelsk (USA), Dvorak-stil"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Tysk"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Fransk"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Fransk (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russisk"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russisk, Mac-stil"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spansk"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Sveitsisk fransk"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Sveitsisk standardtysk"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgisk"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarsk"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiensk"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Dansk"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norsk"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Svensk"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finsk"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroatisk"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tsjekkisk"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estisk"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ungarsk"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandsk"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasiliansk"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugisisk"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovakisk"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovensk"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Tyrkisk"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainsk"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabisk"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Gresk"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebraisk"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauisk"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spansk (latinsk)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-nl/strings.xml b/packages/InputDevices/res/values-nl/strings.xml
new file mode 100644
index 0000000..92a9fcf
--- /dev/null
+++ b/packages/InputDevices/res/values-nl/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Invoerapparaten"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android-toetsenbord"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engels (Verenigd Koninkrijk)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Engels (Verenigde Staten)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Engels (VS), internationaal"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Engels (VS), Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Engels (VS), Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Duits"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Frans"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Frans (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russisch"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russisch, Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spaans"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Zwitsers Frans"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Zwitsers Duits"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgisch"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgaars"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiaans"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Deens"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Noors"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Zweeds"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Fins"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroatisch"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tsjechisch"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estlands"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hongaars"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"IJslands"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Braziliaans"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugees"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slowaaks"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Sloveens"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turks"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Oekraïens"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabisch"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grieks"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebreeuws"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litouws"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spaans (Latijns-Amerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-pl/strings.xml b/packages/InputDevices/res/values-pl/strings.xml
new file mode 100644
index 0000000..f84252a
--- /dev/null
+++ b/packages/InputDevices/res/values-pl/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Urządzenia wejściowe"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Klawiatura Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Angielski (Wielka Brytania)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Angielski (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Angielski (USA), międzynarodowy"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Angielski (USA), Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Angielski (USA), Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Niemiecki"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francuski"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francuski (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Rosyjski"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Rosyjski, Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Hiszpański"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francuski (Szwajcaria)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Niemiecki (Szwajcaria)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgijski"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bułgarski"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Włoski"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Duński"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norweski"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Szwedzki"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Fiński"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Chorwacki"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Czeski"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estoński"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Węgierski"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandzki"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazylijski"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugalski"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Słowacki"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Słoweński"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turecki"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukraiński"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabski"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"grecki"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebrajski"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litewski"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"hiszpański (Ameryka Łacińska)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-pt-rPT/strings.xml b/packages/InputDevices/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..670badd
--- /dev/null
+++ b/packages/InputDevices/res/values-pt-rPT/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Dispositivos de entrada"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Teclado do Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglês (RU)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglês (EUA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglês (EUA), est. Internacional"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglês (EUA), estilo Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglês (EUA), estilo Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Alemão"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francês"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francês (Canadá)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russo"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russo, estilo Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Espanhol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francês (Suíça)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Alemão (Suíça)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belga"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Búlgaro"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiano"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Dinamarquês"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norueguês"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Sueco"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandês"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croata"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Checo"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estónio"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Húngaro"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandês"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasileiro"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Português"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Eslovaco"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Esloveno"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turco"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraniano"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Árabe"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grego"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebraico"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanhol (América Latina)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-pt/strings.xml b/packages/InputDevices/res/values-pt/strings.xml
new file mode 100644
index 0000000..71274aa
--- /dev/null
+++ b/packages/InputDevices/res/values-pt/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Dispositivos de entrada"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Teclado do Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Inglês (Reino Unido)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Inglês (EUA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Inglês (EUA), estilo internacional"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Inglês (EUA), estilo Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Inglês (EUA), estilo Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Alemão"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Francês"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Francês (Canadá)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russo"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russo, estilo Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Espanhol"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Francês suíço"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Alemão suíço"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belga"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Búlgaro"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiano"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Dinamarquês"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norueguês"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Sueco"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandês"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croata"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tcheco"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estoniano"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Húngaro"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandês"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brasileiro"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Português"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Eslovaco"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Esloveno"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turco"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraniano"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Árabe"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grego"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebraico"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituano"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Espanhol (América Latina)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ro/strings.xml b/packages/InputDevices/res/values-ro/strings.xml
new file mode 100644
index 0000000..151c11d
--- /dev/null
+++ b/packages/InputDevices/res/values-ro/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Dispozitive de introducere de date"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Tastatură Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engleză (Regatul Unit)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Engleză (SUA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Engleză (SUA), stil internațional"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Engleză (SUA), stil Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Engleză (SUA), stil Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Germană"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Franceză"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Franceză (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Rusă"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Rusă, stil Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spaniolă"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Franceză (Elveția)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Germană (Elveția)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgiană"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgară"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italiană"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Daneză"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norvegiană"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Suedeză"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finlandeză"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croată"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Cehă"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estoniană"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Maghiară"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Islandeză"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Braziliană"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugheză"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovacă"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenă"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turcă"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ucraineană"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabă"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greacă"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Ebraică"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lituaniană"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spaniolă (America Latină)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-ru/strings.xml b/packages/InputDevices/res/values-ru/strings.xml
new file mode 100644
index 0000000..585a215
--- /dev/null
+++ b/packages/InputDevices/res/values-ru/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Устройства ввода"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Клавиатура Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"английский (Великобритания)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"английский (США)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"английский (США, международная)"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"английский (США, Colemak)"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"английский (США, Dvorak)"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"немецкий"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"французский"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"французский (Канада)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"русский"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"русский (Mac)"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"испанский"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"французский (Швейцария)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"немецкий (Швейцария)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"нидерландский (Бельгия)"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"болгарский"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"итальянский"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"датский"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"норвежский"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"шведский"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"финский"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"хорватский"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"чешский"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"эстонский"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"венгерский"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"исландский"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"португальский (Бразилия)"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"португальский"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"словацкий"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"словенский"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"турецкий"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"украинский"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Арабский"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Греческий"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Иврит"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовский"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Испанский (Латинская Америка)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-sk/strings.xml b/packages/InputDevices/res/values-sk/strings.xml
new file mode 100644
index 0000000..d14c204
--- /dev/null
+++ b/packages/InputDevices/res/values-sk/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Vstupné zariadenia"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Klávesnica Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"anglické (Spojené kráľovstvo)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"anglické (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"anglické (USA), medzinárodné"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"anglické (USA), štýl Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"anglické (USA), štýl Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"nemecké"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"francúzske"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"francúzske (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ruské"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ruské, štýl Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"španielske"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"švajčiarske (francúzština)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"švajčiarske (nemčina)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belgické"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bulharské"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"talianske"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"dánske"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"nórske"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"švédske"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"fínske"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"chorvátske"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"české"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"estónske"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"maďarské"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islandské"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazílske"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalské"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovenské"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovinské"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turecké"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinské"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabčina"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Gréčtina"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrejčina"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litovčina"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Španielčina (Latinská Amerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-sl/strings.xml b/packages/InputDevices/res/values-sl/strings.xml
new file mode 100644
index 0000000..b8fc823e
--- /dev/null
+++ b/packages/InputDevices/res/values-sl/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Vhodne naprave"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Tipkovnica Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"angleška (Združeno kraljestvo)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"angleška (ZDA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"angleška (ZDA), mednarodni slog"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"angleška (ZDA), slog Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"angleška (ZDA), slog Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"nemška"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"francoska"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"francoska (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"ruska"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"ruska, slog Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"španska"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"švicarska francoska"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"švicarska nemška"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"belgijska"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"bolgarska"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"italijanska"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"danska"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"norveška"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"švedska"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"finska"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"hrvaška"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"češka"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"estonska"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"madžarska"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"islandska"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"brazilska"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"portugalska"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"slovaška"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"slovenska"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"turška"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ukrajinska"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"arabščina"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"grščina"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"hebrejščina"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"litovščina"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"španščina (Latinska Amerika)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-sr/strings.xml b/packages/InputDevices/res/values-sr/strings.xml
new file mode 100644
index 0000000..45e0b4b
--- /dev/null
+++ b/packages/InputDevices/res/values-sr/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Улазни уређаји"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android тастатура"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"енглеска (УК)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"енглеска (САД)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"енглеска (САД), међународни стил"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"енглеска (САД), Colemak стил"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"енглеска (САД), Dvorak стил"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"немачка"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"француска"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"француска (Канада)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"руска"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"руска, Mac стил"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"шпанска"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"швајцарско француска"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"швајцарско немачка"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"белгијска"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"бугарска"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"италијанска"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"данска"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"норвешка"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"шведска"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"финска"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"хрватска"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"чешка"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"естонска"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"мађарска"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"исландска"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"бразилска"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"португалска"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"словачка"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"словеначка"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"турска"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"украјинска"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"арапски"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"грчки"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"хебрејски"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"литвански"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"шпански (Латинска Америка)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-sv/strings.xml b/packages/InputDevices/res/values-sv/strings.xml
new file mode 100644
index 0000000..ce20bff
--- /dev/null
+++ b/packages/InputDevices/res/values-sv/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Indataenheter"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Androids tangentbord"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Engelskt (Storbritannien)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Engelskt (USA)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Engelskt (USA), internationellt"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Engelskt (USA), colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Engelskt (USA), dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Tyskt"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Franskt"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Franskt (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Ryskt"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Ryskt, Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanskt"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Franskt (Schweiz)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Tyskt (Schweiz)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgiskt"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgariskt"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italienskt"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danskt"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norskt"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Svenskt"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finskt"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kroatiskt"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tjeckiskt"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estniskt"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Ungerskt"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Isländskt"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Portugisiskt (Brasilien)"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portugisiskt"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovakiskt"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenskt"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkiskt"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainskt"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabiska"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Grekiska"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebreiska"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litauiska"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanska (latinamerikansk)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-sw/strings.xml b/packages/InputDevices/res/values-sw/strings.xml
new file mode 100644
index 0000000..38bc83a
--- /dev/null
+++ b/packages/InputDevices/res/values-sw/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Vifaa Ingizi"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Kibodi ya Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Kiingereza (Uingereza)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Kiingereza (Marekani)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Kiingereza (Marekani), Muundo wa Kimataifa"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Kiingereza (Marekani), Muundo wa Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Kiingereza (Marekani), Muundo wa Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Kijerumani"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Kifaransa"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Kifaransa (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Kirusi"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Kirusi, Muundo wa Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Kihispania"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Kifaransa cha Uswisi"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Kijerumani cha Uswisi"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Kibelgiji"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Kibulgaria"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Kiitaliano"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Kidenmarki"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Kinorwei"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Kiswidi"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Kifinlandi"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Kikroeshia"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Kicheki"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Kiestonia"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Kihungari"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Kiaislandi"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Kibrazili"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Kireno"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Kislovakia"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Kislovenia"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Kituruki"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Kiukrania"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Kiarabu"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Kigiriki"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Kiyahudi"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Kilithuania"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Kihispania (Kilatini)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-th/strings.xml b/packages/InputDevices/res/values-th/strings.xml
new file mode 100644
index 0000000..8951281
--- /dev/null
+++ b/packages/InputDevices/res/values-th/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"อุปกรณ์อินพุต"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"แป้นพิมพ์แอนดรอยด์"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"อังกฤษ (สหราชอาณาจักร)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"อังกฤษ (อเมริกัน)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"อังกฤษ (อเมริกัน), รูปแบบนานาชาติ"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"อังกฤษ (อเมริกัน), รูปแบบ Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"อังกฤษ (อเมริกัน), รูปแบบ Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"เยอรมัน"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"ฝรั่งเศส"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"ฝรั่งเศส (แคนาดา)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"รัสเซีย"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"รัสเซีย, รูปแบบ Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"สเปน"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"ฝรั่งเศส (สวิส)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"เยอรมันสวิส"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"เบลเยียม"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"บัลแกเรีย"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"อิตาลี"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"เดนมาร์ก"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"นอร์เวย์"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"สวีเดน"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"ฟินแลนด์"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"โครเอเชีย"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"เช็ก"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"เอสโตเนีย"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"ฮังการี"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ไอซ์แลนดิก"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"บราซิล"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"โปรตุเกส"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"สโลวัก"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"สโลวีเนีย"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"ตุรกี"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"ยูเครน"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"ภาษาอารบิค"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"กรีก"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"ฮิบรู"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"ลิทัวเนีย"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"สเปน (ละติน)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-tl/strings.xml b/packages/InputDevices/res/values-tl/strings.xml
new file mode 100644
index 0000000..c551e20
--- /dev/null
+++ b/packages/InputDevices/res/values-tl/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Mga Input Device"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android keyboard"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Ingles (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Ingles (US)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Ingles (US), istilong International"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Ingles (US), istilong Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Ingles (US), istilong Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"German"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"French"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"French (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Russian"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Russian, istilong Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Spanish"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Swiss French"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Swiss German"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belgian"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarian"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Italian"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danish"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norwegian"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Swedish"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Finnish"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Croatian"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Czech"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonian"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Hungarian"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Icelandic"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brazilian"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portuguese"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovak"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovenian"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Turkish"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukrainian"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arabic"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Greek"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Hebrew"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Lithuanian"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Spanish (Latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-tr/strings.xml b/packages/InputDevices/res/values-tr/strings.xml
new file mode 100644
index 0000000..d828e78
--- /dev/null
+++ b/packages/InputDevices/res/values-tr/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Input Devices"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android klavyesi"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"İngilizce (İngiltere)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"İngilizce (ABD)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"İngilizce (ABD) Uluslararası stil"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"İngilizce (ABD) Colemak stili"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"İngilizce (ABD) Dvorak stili"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Almanca"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Fransızca"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Fransızca (Kanada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Rusça"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Rusça, Mac stili"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"İspanyolca"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"İsviçre Fransızcası"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"İsviçre Almancası"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Belçika dili"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Bulgarca"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"İtalyanca"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Danca"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Norveççe"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"İsveççe"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Fince"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Hırvatça"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Çekçe"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Estonca"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Macarca"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"İzlandaca"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Brezilya dili"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Portekizce"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Slovakça"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Slovence"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Türkçe"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Ukraynaca"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Arapça"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Yunanca"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"İbranice"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Litvanca"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"İspanyolca (Latin)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-uk/strings.xml b/packages/InputDevices/res/values-uk/strings.xml
new file mode 100644
index 0000000..b4b9923
--- /dev/null
+++ b/packages/InputDevices/res/values-uk/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Пристрої вводу"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Клавіатура Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"англійська (Великобританія)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"англійська (США)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"англійська (США), міжнародна"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"англійська (США), розкладка Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"англійська (США), розкладка Дворака"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"німецька"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"французька"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"французька (Канада)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"російська"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"російська, розкладка Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"іспанська"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"французька (Швейцарія)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"німецька (Швейцарія)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"бельгійська"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"болгарська"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"італійська"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"данська"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"норвезька"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"шведська"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"фінська"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"хорватська"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"чеська"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"естонська"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"угорська"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"ісландська"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"бразильська"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"португальська"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"словацька"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"словенська"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"турецька"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"українська"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Арабська"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Грецька"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Іврит"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Литовська"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Іспанська (латиниця)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-vi/strings.xml b/packages/InputDevices/res/values-vi/strings.xml
new file mode 100644
index 0000000..18aa989
--- /dev/null
+++ b/packages/InputDevices/res/values-vi/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Thiết bị đầu vào"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Bàn phím Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"Tiếng Anh (Anh)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"Tiếng Anh (Mỹ)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"Tiếng Anh (Mỹ), kiểu Quốc tế"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"Tiếng Anh (Mỹ), kiểu Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"Tiếng Anh (Mỹ), kiểu Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Tiếng Đức"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Tiếng Pháp"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Tiếng Pháp (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Tiếng Nga"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Tiếng Nga, kiểu Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Tiếng Tây Ban Nha"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Tiếng Pháp ở Thụy Sĩ"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Tiếng Đức Thụy Sĩ"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Tiếng Bỉ"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Tiếng Bungary"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Tiếng Ý"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Tiếng Đan Mạch"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Tiếng Na Uy"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Tiếng Thụy Điển"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Tiếng Phần Lan"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Tiếng Croatia"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Tiếng Séc"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Tiếng Estonia"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Tiếng Hungary"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Tiếng Ai-xơ-len"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Tiếng Brazil"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Tiếng Bồ Đào Nha"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Tiếng Slovak"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Tiếng Sloven"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Tiếng Thổ Nhĩ Kỳ"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Tiếng Ukraina"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Tiếng Ả rập"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Tiếng Hy Lạp"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Tiếng Do Thái"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Tiếng Lithuania"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Tiếng Tây Ban Nha (La tinh)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-zh-rCN/strings.xml b/packages/InputDevices/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..8d76f92
--- /dev/null
+++ b/packages/InputDevices/res/values-zh-rCN/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"输入设备"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android 键盘"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"英语（英国）"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"英语（美国）"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"英语（美国），国际风格"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"英语（美国），Colemak 风格"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"英语（美国），Dvorak 风格"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"德语"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"法语"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"法语（加拿大）"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"俄语"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"俄语，Mac 风格"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"西班牙语"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"瑞士法语"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"瑞士德语"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"比利时语"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"保加利亚语"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"意大利语"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"丹麦语"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"挪威语"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"瑞典语"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"芬兰语"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"克罗地亚语"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"捷克语"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"爱沙尼亚语"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"匈牙利语"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"冰岛语"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"巴西语"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"葡萄牙语"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"斯洛伐克语"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"斯洛文尼亚语"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"土耳其语"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"乌克兰语"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"阿拉伯语"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"希腊语"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"希伯来语"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"立陶宛语"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"西班牙语（拉丁美洲）"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-zh-rHK/strings.xml b/packages/InputDevices/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..031f294
--- /dev/null
+++ b/packages/InputDevices/res/values-zh-rHK/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"輸入裝置"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android 鍵盤"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"英文 (英國)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"英文 (美國)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"英文 (美國)，國際樣式"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"英文 (美國)，Colemak 樣式"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"英文 (美國)，Dvorak 樣式"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"德文"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"法文"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"法文 (加拿大)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"俄文"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"俄文，Mac 樣式"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"西班牙文"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"法文 (瑞士)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"德文（瑞士）"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"比利時文"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"保加利亞文"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"意大利文"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"丹麥文"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"挪威文"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"瑞典文"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"芬蘭文"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"克羅地亞文"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"捷克文"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"愛沙尼亞文"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"匈牙利文"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"冰島文"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"巴西文"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"葡萄牙文"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"斯洛伐克文"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"斯洛文尼亞文"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"土耳其文"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"烏克蘭文"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"阿拉伯文"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"希臘文"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"希伯來文"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"立陶宛文"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"西班牙文 (拉丁美洲)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-zh-rTW/strings.xml b/packages/InputDevices/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..76cb6a2
--- /dev/null
+++ b/packages/InputDevices/res/values-zh-rTW/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"輸入裝置"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Android 鍵盤"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"英文 (英國)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"英文 (美國)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"英文 (美國)，國際樣式"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"英文 (美國)，Colemak 樣式"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"英文 (美國)，Dvorak 樣式"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"德文"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"法文"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"法文 (加拿大)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"俄文"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"俄文，Mac 樣式"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"西班牙文"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"法文 (瑞士)"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"德文 (瑞士)"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"比利時式"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"保加利亞文"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"義大利文"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"丹麥文"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"挪威文"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"瑞典文"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"芬蘭文"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"克羅埃西亞文"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"捷克文"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"愛沙尼亞文"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"匈牙利文"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"冰島文"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"巴西式"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"葡萄牙文"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"斯洛伐克文"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"斯洛維尼亞文"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"土耳其文"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"烏克蘭文"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"阿拉伯文"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"希臘文"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"希伯來文"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"立陶宛文"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"西班牙文 (拉丁美洲)"</string>
+</resources>
diff --git a/packages/InputDevices/res/values-zu/strings.xml b/packages/InputDevices/res/values-zu/strings.xml
new file mode 100644
index 0000000..3e4ad67
--- /dev/null
+++ b/packages/InputDevices/res/values-zu/strings.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="8016145283189546017">"Amadivayisi wokufaka"</string>
+    <string name="keyboard_layouts_label" msgid="6688773268302087545">"Ikhibhodi ye-Android"</string>
+    <string name="keyboard_layout_english_uk_label" msgid="6664258463319999632">"I-English (UK)"</string>
+    <string name="keyboard_layout_english_us_label" msgid="8994890249649106291">"I-English (US)"</string>
+    <string name="keyboard_layout_english_us_intl" msgid="3705168594034233583">"I-English (US), isitayela sakwamanye amazwe"</string>
+    <string name="keyboard_layout_english_us_colemak_label" msgid="4194969610343455380">"I-English (US), isitayela se-Colemak"</string>
+    <string name="keyboard_layout_english_us_dvorak_label" msgid="793528923171145202">"I-English (US), isitayela se-Dvorak"</string>
+    <string name="keyboard_layout_german_label" msgid="8451565865467909999">"Isi-German"</string>
+    <string name="keyboard_layout_french_label" msgid="813450119589383723">"Isi-French"</string>
+    <string name="keyboard_layout_french_ca_label" msgid="365352601060604832">"Isi-French (Canada)"</string>
+    <string name="keyboard_layout_russian_label" msgid="8724879775815042968">"Isi-Russian"</string>
+    <string name="keyboard_layout_russian_mac_label" msgid="3795866869038264796">"Isi-Russian, isitayela se-Mac"</string>
+    <string name="keyboard_layout_spanish_label" msgid="7091555148131908240">"Isi-Spanish"</string>
+    <string name="keyboard_layout_swiss_french_label" msgid="4659191025396371684">"Isi-Swiss French"</string>
+    <string name="keyboard_layout_swiss_german_label" msgid="2305520941993314258">"Isi-Swiss German"</string>
+    <string name="keyboard_layout_belgian" msgid="2011984572838651558">"Isi-Belgian"</string>
+    <string name="keyboard_layout_bulgarian" msgid="8951224309972028398">"Isi-Bulgarian"</string>
+    <string name="keyboard_layout_italian" msgid="6497079660449781213">"Isi-Italian"</string>
+    <string name="keyboard_layout_danish" msgid="8036432066627127851">"Isi-Danish"</string>
+    <string name="keyboard_layout_norwegian" msgid="9090097917011040937">"Isi-Norwegian"</string>
+    <string name="keyboard_layout_swedish" msgid="732959109088479351">"Isi-Swedish"</string>
+    <string name="keyboard_layout_finnish" msgid="5585659438924315466">"Isi-Finnish"</string>
+    <string name="keyboard_layout_croatian" msgid="4172229471079281138">"Isi-Croatian"</string>
+    <string name="keyboard_layout_czech" msgid="1349256901452975343">"Isi-Czech"</string>
+    <string name="keyboard_layout_estonian" msgid="8775830985185665274">"Isi-Estonian"</string>
+    <string name="keyboard_layout_hungarian" msgid="4154963661406035109">"Isi-Hungarian"</string>
+    <string name="keyboard_layout_icelandic" msgid="5836645650912489642">"Isi-Icelandic"</string>
+    <string name="keyboard_layout_brazilian" msgid="5117896443147781939">"Isi-Brazilian"</string>
+    <string name="keyboard_layout_portuguese" msgid="2888198587329660305">"Isi-Portuguese"</string>
+    <string name="keyboard_layout_slovak" msgid="2469379934672837296">"Isi-Slovak"</string>
+    <string name="keyboard_layout_slovenian" msgid="1735933028924982368">"Isi-Slovenian"</string>
+    <string name="keyboard_layout_turkish" msgid="7736163250907964898">"Isi-Turkish"</string>
+    <string name="keyboard_layout_ukrainian" msgid="8176637744389480417">"Isi-Ukrainian"</string>
+    <string name="keyboard_layout_arabic" msgid="5671970465174968712">"Isi-Arabic"</string>
+    <string name="keyboard_layout_greek" msgid="7289253560162386040">"Isi-Greek"</string>
+    <string name="keyboard_layout_hebrew" msgid="7241473985890173812">"Isi-Hebrew"</string>
+    <string name="keyboard_layout_lithuanian" msgid="6943110873053106534">"Isi-Lithuanian"</string>
+    <string name="keyboard_layout_spanish_latin" msgid="5690539836069535697">"Isi-Spanish (Latin)"</string>
+</resources>
diff --git a/packages/Keyguard/Android.mk b/packages/Keyguard/Android.mk
index 1f2b5fb..1be44f9 100644
--- a/packages/Keyguard/Android.mk
+++ b/packages/Keyguard/Android.mk
@@ -16,9 +16,10 @@
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
-LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-subdir-Iaidl-files)
+LOCAL_SRC_FILES := $(call all-java-files-under, src) $(call all-subdir-Iaidl-files) \
+                   $(call all-proto-files-under,src)
 
-LOCAL_PACKAGE_NAME := Keyguard
+LOCAL_MODULE := Keyguard
 
 LOCAL_CERTIFICATE := platform
 
@@ -26,6 +27,11 @@
 
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags
 
-include $(BUILD_PACKAGE)
+LOCAL_PROTOC_OPTIMIZE_TYPE := nano
+LOCAL_PROTO_JAVA_OUTPUT_PARAMS := optional_field_style=accessors
 
-#include $(call all-makefiles-under,$(LOCAL_PATH))
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
+
+#include $(call all-makefiles-under,$(LOCAL_PATH))
\ No newline at end of file
diff --git a/packages/Keyguard/AndroidManifest.xml b/packages/Keyguard/AndroidManifest.xml
index 66d1e75..352317d 100644
--- a/packages/Keyguard/AndroidManifest.xml
+++ b/packages/Keyguard/AndroidManifest.xml
@@ -39,14 +39,12 @@
     <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
     <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
     <uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" />
+    <uses-permission android:name="android.permission.TRUST_LISTENER" />
 
     <application android:label="@string/app_name"
         android:process="com.android.systemui"
         android:persistent="true"
         android:supportsRtl="true">
 
-        <service android:name=".KeyguardService"
-            android:exported="true" />
-
     </application>
 </manifest>
diff --git a/packages/Keyguard/res/layout-land/keyguard_host_view.xml b/packages/Keyguard/res/layout-land/keyguard_host_view.xml
index 9f1c1f0..1d596d3 100644
--- a/packages/Keyguard/res/layout-land/keyguard_host_view.xml
+++ b/packages/Keyguard/res/layout-land/keyguard_host_view.xml
@@ -21,7 +21,7 @@
     and the security view. -->
 <com.android.keyguard.KeyguardHostView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_host_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/packages/Keyguard/res/layout-land/keyguard_simple_host_view.xml b/packages/Keyguard/res/layout-land/keyguard_simple_host_view.xml
new file mode 100644
index 0000000..49b4212
--- /dev/null
+++ b/packages/Keyguard/res/layout-land/keyguard_simple_host_view.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2014, 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.
+*/
+-->
+
+<!-- This is the host view that generally contains two sub views: the widget view
+    and the security view. -->
+<com.android.keyguard.KeyguardSimpleHostView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/keyguard_host_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.android.keyguard.KeyguardSecurityContainer
+        android:id="@+id/keyguard_security_container"
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/keyguard_security_height"
+        android:clipChildren="false"
+        android:clipToPadding="false"
+        android:padding="0dp"
+        android:layout_gravity="center">
+        <com.android.keyguard.KeyguardSecurityViewFlipper
+            android:id="@+id/view_flipper"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:clipChildren="false"
+            android:clipToPadding="false"
+            android:paddingTop="@dimen/keyguard_security_view_margin"
+            android:gravity="center">
+        </com.android.keyguard.KeyguardSecurityViewFlipper>
+    </com.android.keyguard.KeyguardSecurityContainer>
+
+</com.android.keyguard.KeyguardSimpleHostView>
+
diff --git a/packages/Keyguard/res/layout-land/keyguard_widget_pager.xml b/packages/Keyguard/res/layout-land/keyguard_widget_pager.xml
index da31065..50c2709 100644
--- a/packages/Keyguard/res/layout-land/keyguard_widget_pager.xml
+++ b/packages/Keyguard/res/layout-land/keyguard_widget_pager.xml
@@ -19,7 +19,7 @@
 
 <!-- This is the selector widget that allows the user to select an action. -->
 <com.android.keyguard.KeyguardWidgetCarousel
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingLeft="25dp"
     android:paddingRight="25dp"
diff --git a/packages/Keyguard/res/layout-port/keyguard_host_view.xml b/packages/Keyguard/res/layout-port/keyguard_host_view.xml
index 136b296..8223db4 100644
--- a/packages/Keyguard/res/layout-port/keyguard_host_view.xml
+++ b/packages/Keyguard/res/layout-port/keyguard_host_view.xml
@@ -21,7 +21,7 @@
     and the security view. -->
 <com.android.keyguard.KeyguardHostView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_host_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/packages/Keyguard/res/layout-port/keyguard_simple_host_view.xml b/packages/Keyguard/res/layout-port/keyguard_simple_host_view.xml
new file mode 100644
index 0000000..ed600b0
--- /dev/null
+++ b/packages/Keyguard/res/layout-port/keyguard_simple_host_view.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 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.
+*/
+-->
+
+<!-- This is the host view that generally contains two sub views: the widget view
+    and the security view. -->
+<com.android.keyguard.KeyguardSimpleHostView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/keyguard_host_view"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <com.android.keyguard.KeyguardSecurityContainer
+        android:id="@+id/keyguard_security_container"
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/keyguard_security_height"
+        android:clipChildren="false"
+        android:clipToPadding="false"
+        android:padding="0dp"
+        android:layout_gravity="center">
+        <com.android.keyguard.KeyguardSecurityViewFlipper
+            android:id="@+id/view_flipper"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:clipChildren="false"
+            android:clipToPadding="false"
+            android:paddingTop="@dimen/keyguard_security_view_margin"
+            android:gravity="center">
+        </com.android.keyguard.KeyguardSecurityViewFlipper>
+    </com.android.keyguard.KeyguardSecurityContainer>
+
+</com.android.keyguard.KeyguardSimpleHostView>
+
diff --git a/packages/Keyguard/res/layout-port/keyguard_widget_pager.xml b/packages/Keyguard/res/layout-port/keyguard_widget_pager.xml
index d0a07ca..6d7d864 100644
--- a/packages/Keyguard/res/layout-port/keyguard_widget_pager.xml
+++ b/packages/Keyguard/res/layout-port/keyguard_widget_pager.xml
@@ -19,7 +19,7 @@
 
 <!-- This is the selector widget that allows the user to select an action. -->
 <com.android.keyguard.KeyguardWidgetPager
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/app_widget_container"
     android:paddingLeft="25dp"
diff --git a/packages/Keyguard/res/layout-sw600dp-port/keyguard_host_view.xml b/packages/Keyguard/res/layout-sw600dp-port/keyguard_host_view.xml
index 85f6b6d..ba2f3a6 100644
--- a/packages/Keyguard/res/layout-sw600dp-port/keyguard_host_view.xml
+++ b/packages/Keyguard/res/layout-sw600dp-port/keyguard_host_view.xml
@@ -21,7 +21,7 @@
     and the security view. -->
 <com.android.keyguard.KeyguardHostView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_host_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_account_view.xml b/packages/Keyguard/res/layout/keyguard_account_view.xml
index 766effa..bde2ec6 100644
--- a/packages/Keyguard/res/layout/keyguard_account_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_account_view.xml
@@ -18,7 +18,7 @@
 -->
 <com.android.keyguard.KeyguardAccountView
     xmlns:android="http://schemas.android.com/apk/res/android"
-	xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+	xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_account_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_bouncer.xml b/packages/Keyguard/res/layout/keyguard_bouncer.xml
new file mode 100644
index 0000000..8716ebc
--- /dev/null
+++ b/packages/Keyguard/res/layout/keyguard_bouncer.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <View android:id="@+id/bouncer_background"
+        android:background="#aa000000"
+        android:clickable="true"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"/>
+
+    <include
+        style="@style/BouncerSecurityContainer"
+        layout="@layout/keyguard_simple_host_view"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+</FrameLayout>
+
diff --git a/packages/Keyguard/res/layout/keyguard_emergency_carrier_area.xml b/packages/Keyguard/res/layout/keyguard_emergency_carrier_area.xml
index b4847f0..b2d0219 100644
--- a/packages/Keyguard/res/layout/keyguard_emergency_carrier_area.xml
+++ b/packages/Keyguard/res/layout/keyguard_emergency_carrier_area.xml
@@ -20,6 +20,7 @@
 <!-- This contains emergency call button and carrier as shared by pin/pattern/password screens -->
 <com.android.keyguard.EmergencyCarrierArea
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical"
@@ -35,7 +36,8 @@
         android:ellipsize="marquee"
         android:textAppearance="?android:attr/textAppearanceMedium"
         android:textSize="@dimen/kg_status_line_font_size"
-        android:textColor="?android:attr/textColorSecondary" />
+        android:textColor="?android:attr/textColorSecondary"
+        androidprv:allCaps="@bool/kg_use_all_caps" />
 
     <LinearLayout
         android:layout_width="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_face_unlock_view.xml b/packages/Keyguard/res/layout/keyguard_face_unlock_view.xml
index 94c68a5..8c8ec7a 100644
--- a/packages/Keyguard/res/layout/keyguard_face_unlock_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_face_unlock_view.xml
@@ -20,7 +20,7 @@
 <!-- This is the screen that allows the user to unlock by showing their face.  -->
 <com.android.keyguard.KeyguardFaceUnlockView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_face_unlock_view"
     android:orientation="vertical"
     android:layout_width="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_multi_user_selector.xml b/packages/Keyguard/res/layout/keyguard_multi_user_selector.xml
index c1d5326..83036ab 100644
--- a/packages/Keyguard/res/layout/keyguard_multi_user_selector.xml
+++ b/packages/Keyguard/res/layout/keyguard_multi_user_selector.xml
@@ -17,7 +17,7 @@
 */
 -->
 <com.android.keyguard.KeyguardMultiUserSelectorView
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     xmlns:android="http://schemas.android.com/apk/res/android"
     androidprv:layout_childType="userSwitcher"
     android:id="@+id/keyguard_user_selector"
diff --git a/packages/Keyguard/res/layout/keyguard_password_view.xml b/packages/Keyguard/res/layout/keyguard_password_view.xml
index d8012bf..ed3f0e0 100644
--- a/packages/Keyguard/res/layout/keyguard_password_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_password_view.xml
@@ -18,7 +18,7 @@
 -->
 <com.android.keyguard.KeyguardPasswordView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_password_view"
     android:orientation="vertical"
     android:layout_width="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_pattern_view.xml b/packages/Keyguard/res/layout/keyguard_pattern_view.xml
index 0c9380c..3d7820f 100644
--- a/packages/Keyguard/res/layout/keyguard_pattern_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_pattern_view.xml
@@ -22,7 +22,7 @@
      is the portrait layout.  -->
 <com.android.keyguard.KeyguardPatternView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_pattern_view"
     android:orientation="vertical"
     android:layout_width="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_pin_view.xml b/packages/Keyguard/res/layout/keyguard_pin_view.xml
index 00c6a21d..a804c8c 100644
--- a/packages/Keyguard/res/layout/keyguard_pin_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_pin_view.xml
@@ -19,7 +19,7 @@
 
 <com.android.keyguard.KeyguardPINView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_pin_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_presentation.xml b/packages/Keyguard/res/layout/keyguard_presentation.xml
index 7df0b70..ab676aa 100644
--- a/packages/Keyguard/res/layout/keyguard_presentation.xml
+++ b/packages/Keyguard/res/layout/keyguard_presentation.xml
@@ -20,7 +20,7 @@
 <!-- This is a view that shows general status information in Keyguard. -->
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/presentation"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/packages/Keyguard/res/layout/keyguard_selector_view.xml b/packages/Keyguard/res/layout/keyguard_selector_view.xml
index 6cb5e67..d3064ed 100644
--- a/packages/Keyguard/res/layout/keyguard_selector_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_selector_view.xml
@@ -20,7 +20,7 @@
 <!-- This is the selector widget that allows the user to select an action. -->
 <com.android.keyguard.KeyguardSelectorView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_selector_view"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/packages/Keyguard/res/layout/keyguard_sim_pin_view.xml b/packages/Keyguard/res/layout/keyguard_sim_pin_view.xml
index eccac19..0e2b33a 100644
--- a/packages/Keyguard/res/layout/keyguard_sim_pin_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_sim_pin_view.xml
@@ -19,7 +19,7 @@
 <!-- This is the SIM PIN view that allows the user to enter a SIM PIN to unlock the device. -->
 <com.android.keyguard.KeyguardSimPinView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_sim_pin_view"
     android:orientation="vertical"
     android:layout_width="match_parent"
@@ -52,7 +52,7 @@
            android:orientation="horizontal"
            android:layout_weight="1"
            >
-           <TextView android:id="@+id/pinEntry"
+           <TextView android:id="@+id/simPinEntry"
                android:editable="true"
                android:layout_width="0dip"
                android:layout_height="match_parent"
@@ -96,7 +96,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="1"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -105,7 +105,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="2"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -114,7 +114,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="3"
                />
        </LinearLayout>
@@ -130,7 +130,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="4"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -139,7 +139,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="5"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -148,7 +148,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="6"
                />
        </LinearLayout>
@@ -164,7 +164,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="7"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -173,7 +173,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="8"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -182,7 +182,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="9"
                />
        </LinearLayout>
@@ -203,7 +203,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/simPinEntry"
                androidprv:digit="0"
                />
            <ImageButton
diff --git a/packages/Keyguard/res/layout/keyguard_sim_puk_view.xml b/packages/Keyguard/res/layout/keyguard_sim_puk_view.xml
index fe37203..88049a7 100644
--- a/packages/Keyguard/res/layout/keyguard_sim_puk_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_sim_puk_view.xml
@@ -20,7 +20,7 @@
     carrier-provided PUK code and entering a new SIM PIN for it. -->
 <com.android.keyguard.KeyguardSimPukView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_sim_puk_view"
     android:orientation="vertical"
     android:layout_width="match_parent"
@@ -53,7 +53,7 @@
            android:orientation="horizontal"
            android:layout_weight="1"
            >
-           <TextView android:id="@+id/pinEntry"
+           <TextView android:id="@+id/pukEntry"
                android:editable="true"
                android:layout_width="0dip"
                android:layout_height="match_parent"
@@ -97,7 +97,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="1"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -106,7 +106,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="2"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -115,7 +115,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="3"
                />
        </LinearLayout>
@@ -131,7 +131,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="4"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -140,7 +140,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="5"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -149,7 +149,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="6"
                />
        </LinearLayout>
@@ -165,7 +165,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="7"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -174,7 +174,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="8"
                />
            <view class="com.android.keyguard.NumPadKey"
@@ -183,7 +183,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="9"
                />
        </LinearLayout>
@@ -204,7 +204,7 @@
                android:layout_width="0px"
                android:layout_height="match_parent"
                android:layout_weight="1"
-               androidprv:textView="@+id/pinEntry"
+               androidprv:textView="@+id/pukEntry"
                androidprv:digit="0"
                />
            <ImageButton
diff --git a/packages/Keyguard/res/layout/keyguard_status_area.xml b/packages/Keyguard/res/layout/keyguard_status_area.xml
index 98ba512..2730517 100644
--- a/packages/Keyguard/res/layout/keyguard_status_area.xml
+++ b/packages/Keyguard/res/layout/keyguard_status_area.xml
@@ -20,7 +20,7 @@
 <!-- This is a view that shows general status information in Keyguard. -->
 <LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
diff --git a/packages/Keyguard/res/layout/keyguard_status_view.xml b/packages/Keyguard/res/layout/keyguard_status_view.xml
index a4d298a..546ddd4 100644
--- a/packages/Keyguard/res/layout/keyguard_status_view.xml
+++ b/packages/Keyguard/res/layout/keyguard_status_view.xml
@@ -18,43 +18,38 @@
 -->
 
 <!-- This is a view that shows general status information in Keyguard. -->
-<com.android.keyguard.KeyguardWidgetFrame
+<com.android.keyguard.KeyguardStatusView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:androidprv="http://schemas.android.com/apk/res/com.android.keyguard"
+    xmlns:androidprv="http://schemas.android.com/apk/res-auto"
     android:id="@+id/keyguard_status_view"
+    android:orientation="vertical"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
+    android:layout_height="wrap_content"
     androidprv:layout_maxWidth="@dimen/keyguard_security_width"
     androidprv:layout_maxHeight="@dimen/keyguard_security_height"
-    android:gravity="center">
-
-    <com.android.keyguard.KeyguardStatusView
-        android:id="@+id/keyguard_status_view_face_palm"
-        android:orientation="vertical"
+    android:gravity="center_horizontal|top"
+    android:layout_marginTop="32dp"
+    android:layout_marginBottom="32dp"
+    android:contentDescription="@string/keyguard_accessibility_status">
+    <LinearLayout
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:gravity="center_horizontal|top"
-        android:contentDescription="@string/keyguard_accessibility_status">
-        <LinearLayout
-            android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal|top"
+        android:orientation="vertical"
+        android:focusable="true">
+        <TextClock
+            android:id="@+id/clock_view"
+            android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_horizontal|top"
-            android:orientation="vertical"
-            android:focusable="true">
-            <TextClock
-                android:id="@+id/clock_view"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_horizontal|top"
-                android:textColor="@color/clock_white"
-                android:singleLine="true"
-                style="@style/widget_big_thin"
-                android:format12Hour="@string/keyguard_widget_12_hours_format"
-                android:format24Hour="@string/keyguard_widget_24_hours_format"
-                android:baselineAligned="true"
-                android:layout_marginBottom="@dimen/bottom_text_spacing_digital" />
+            android:textColor="@color/clock_white"
+            android:singleLine="true"
+            style="@style/widget_big_thin"
+            android:format12Hour="@string/keyguard_widget_12_hours_format"
+            android:format24Hour="@string/keyguard_widget_24_hours_format"
+            android:baselineAligned="true"
+            android:layout_marginBottom="@dimen/bottom_text_spacing_digital" />
 
-            <include layout="@layout/keyguard_status_area" />
-        </LinearLayout>
-    </com.android.keyguard.KeyguardStatusView>
-</com.android.keyguard.KeyguardWidgetFrame>
+        <include layout="@layout/keyguard_status_area" />
+    </LinearLayout>
+</com.android.keyguard.KeyguardStatusView>
diff --git a/packages/Keyguard/res/values-af/activitystrings.xml b/packages/Keyguard/res/values-af/activitystrings.xml
deleted file mode 100644
index f6e8d5e..0000000
--- a/packages/Keyguard/res/values-af/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardToetsAktiwiteit"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"VerenigdeKamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Geen sekuriteit nie"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Wagwoord"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Patroon"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Kies legstuk…"</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"opSkermAfgeskakel"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"opSkermAangeskakel"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doenKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifieerOntsluit"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-af/strings.xml b/packages/Keyguard/res/values-af/strings.xml
index 7e1f0bf..a046dc5 100644
--- a/packages/Keyguard/res/values-af/strings.xml
+++ b/packages/Keyguard/res/values-af/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Voer PIN-kode in"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Voer PUK en nuwe PIN-kode in"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuwe PIN-kode"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Voer SIM PUK- en nuwe PIN-kode in"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK-kode"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nuwe SIM PIN-kode"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Raak om wagwoord in te voer"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Voer wagwoord in om te ontsluit"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Voer PIN in om te ontsluit"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Laatwag-knoppie"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Speel-knoppie"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop-knoppie"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Laaik baie"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Laaik niks"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Hart"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Ontsluit om voort te gaan"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Begin gekanselleer"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Laat los <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> om uit te vee."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> sal nie uitgevee word nie."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Voer die gewenste PIN-kode in"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bevestig gewenste PIN-kode"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ontsluit tans SIM-kaart…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Verkeerde PIN-kode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Tik \'n PIN in wat 4 tot 8 syfers lank is."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-kode moet 8 of meer syfers wees."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Voer weer die korrekte PUK-kode in. Herhaalde pogings sal die SIM permanent deaktiveer."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jy het jou ontsluitpatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer verkeerdelik geteken. Na nog <xliff:g id="NUMBER_1">%d</xliff:g> onsuksesvolle pogings, sal jy gevra word om jou foon te ontsluit deur middel van \'n e-posrekening.\n\n Probeer weer oor <xliff:g id="NUMBER_2">%d</xliff:g> sekondes."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Verwyder"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Verkeerde SIM PIN-kode, jy sal nou jou diensverskaffer moet kontak om jou toestel te ontsluit."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Verkeerde SIM PIN-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende poging voordat jy jou diensverskaffer sal moet kontak om jou toestel te ontsluit."</item>
+    <item quantity="other" msgid="2215723361575359486">"Verkeerde SIM PIN-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende pogings."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM is onbruikbaar. Kontak jou diensverskaffer."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Verkeerde SIM PUK-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende poging voordat SIM permanent onbruikbaar word."</item>
+    <item quantity="other" msgid="5477305226026342036">"Verkeerde SIM PUK-kode, jy het <xliff:g id="NUMBER">%d</xliff:g> oorblywende pogings voordat SIM permanent onbruikbaar word."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN-bewerking het misluk!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK-bewerking het misluk!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kode is aanvaar!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Vorigesnit-knoppie"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Volgendesnit-knoppie"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Laatwag-knoppie"</string>
diff --git a/packages/Keyguard/res/values-am/activitystrings.xml b/packages/Keyguard/res/values-am/activitystrings.xml
deleted file mode 100644
index a6c7449..0000000
--- a/packages/Keyguard/res/values-am/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"ምንም ደህንነት የለም"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"ፒን"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"የይለፍ ቃል"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"ሥርዓተ ጥለት"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"የሲም ፒን"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"የሲም ፒዩኬ"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"ንዑስ ፕሮግራም ይምረጡ..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-am/strings.xml b/packages/Keyguard/res/values-am/strings.xml
index 2f6dab0..0bb7993 100644
--- a/packages/Keyguard/res/values-am/strings.xml
+++ b/packages/Keyguard/res/values-am/strings.xml
@@ -20,14 +20,15 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"የቁልፍ ጥበቃ"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"ፒን ኮድ ተይብ"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK እና አዲስ ፒን ተይብ"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"የPUK ኮድ"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"አዲስ Pin ኮድ"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"የሲም PUK እና አዲሱን ፒን ኮድ ይተይቡ"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"የሲም PUK ኮድ"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"አዲስ ሲም ፒን ኮድ"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"የይለፍ ቃል ለመተየብ ንካ"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"ለመክፈት የይለፍ ቃል ተይብ"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"ለመክፈት ፒን ተይብ"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ትክክል ያልሆነ PIN ኮድ።"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ትክክል ያልሆነ ፒን  ኮድ።"</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"ለመክፈት፣ምናሌ ተጫን ከዛ 0"</string>
     <string name="faceunlock_multiple_failures" msgid="754137583022792429">"የመጨረሻውን  የገጽ ክፈት ሙከራዎችን አልፏል"</string>
     <string name="keyguard_charged" msgid="3272223906073492454">"ባትሪ ሞልቷል"</string>
@@ -71,11 +72,18 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"ለአፍታ አቁም አዝራር"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"የአጫውት አዝራር"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"አቁም አዝራር"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"አሪፍ"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"ደባሪ"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"ልብ"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"ለመቀጠል ይክፈቱ"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"ማስጀመር ተሰርዟል"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"ለመሰረዝ <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>ን ጣል ያድርጉ።"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> አይሰርዝም።"</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
     <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ተወው"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ይቅር"</string>
     <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"ሰርዝ"</string>
     <string name="keyboardview_keycode_done" msgid="1992571118466679775">"ተከናውኗል"</string>
     <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ሞድ ለውጥ"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"የተፈለገውን የፒን ኮድ ያስገቡ"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"የተፈለገውን የፒን ኮድ ያረጋግጡ"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"ሲም ካርዱን በመክፈት ላይ…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"ትክክል ያልሆነ ፒን ኮድ።"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ከ4 እስከ 8 ቁጥሮች የያዘ ፒን ይተይቡ።"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"የPUK ኮድ 8 ወይም ከዚያ በላይ ቁጥሮች ሊኖረው ይገባል።"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"ትክክለኛውን የPUK ኮድ እንደገና ያስገቡ። ተደጋጋሚ ሙከራዎች ሲም ካርዱን እስከመጨረሻው ያሰናክሉታል።"</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"የመክፈቻ ስርዓተ ጥለቱን <xliff:g id="NUMBER_0">%d</xliff:g> ጊዜ በትክክል አልሳሉትም። ከ<xliff:g id="NUMBER_1">%d</xliff:g> ተጨማሪ ያልተሳኩ ሙከራዎች በኋላ የኢሜይል መለያ ተጠቅመው ስልክዎን እንዲከፍቱ ይጠየቃሉ።\n\nእባክዎ ከ<xliff:g id="NUMBER_2">%d</xliff:g> ሰከንዶች በኋላ እንደገና ይሞክሩ።"</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"አስወግድ"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ልክ ያልሆነ የሲም ኮድ። አሁን መሳሪያዎን ለማስከፈት ድምጸ ተያያዥ ሞደምዎን ማግኘት አለብዎ።"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"ልክ ያልሆነ የሲም ፒን ኮድ፣ መሳሪያዎን ለማስከፈት ድምጸ ተያያዥ ሞደምዎን ማግኘት ግዴታዎ ሊሆን <xliff:g id="NUMBER">%d</xliff:g> ሙከራ ይቀርዎታል።"</item>
+    <item quantity="other" msgid="2215723361575359486">"ልክ ያልሆነ የሲም ፒን ኮድ፣ <xliff:g id="NUMBER">%d</xliff:g> ሙከራዎች ይቀሩዎታል።"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ሲሙ ጥቅም ላይ መዋል እይችልም። የእርስዎን ድምጸ ተያያዥ ሞደም ያግኙ።"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"ልክ ያልሆነ የሲም PUK ኮድ፣ ሲም ካርድዎ በቋሚነት ጥቅም ላይ መዋል የማይችል ሊሆን <xliff:g id="NUMBER">%d</xliff:g> ሙከራ ይቀርዎታል።"</item>
+    <item quantity="other" msgid="5477305226026342036">"ልክ ያልሆነ የሲም PUK ኮድ፣ ሲም ካርድዎ በቋሚነት ጥቅም ላይ መዋል የማይችል ሊሆን <xliff:g id="NUMBER">%d</xliff:g> ሙከራዎች ይቀሩዎታል።"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"የሲም ፒን ክወና አልተሳካም!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"የሲም PUK ክወና አልተሳካም!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"ኮዱ ተቀባይነት አግኝቷል!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"የቀዳሚ ትራክ አዝራር"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"የቀጣይ ትራክ አዝራር"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"ለአፍታ አቁም አዝራር"</string>
diff --git a/packages/Keyguard/res/values-ar/activitystrings.xml b/packages/Keyguard/res/values-ar/activitystrings.xml
deleted file mode 100644
index f77d8f00..0000000
--- a/packages/Keyguard/res/values-ar/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"بدون تأمين"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"رقم التعريف الشخصي"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"كلمة المرور"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"نقش"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"رقم التعريف الشخصي لبطاقة SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"رمز PUK لبطاقة SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"جارٍ اختيار أداة..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ar/strings.xml b/packages/Keyguard/res/values-ar/strings.xml
index bcfe7db..eac3216 100644
--- a/packages/Keyguard/res/values-ar/strings.xml
+++ b/packages/Keyguard/res/values-ar/strings.xml
@@ -20,14 +20,15 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"اكتب رمز رقم التعريف الشخصي"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"اكتب رمز PUK ورمز رقم التعريف الشخصي الجديد"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"رمز PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"رمز رقم التعريف الشخصي الجديد"</string>
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"‏اكتب رمز رمز PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"‏أدخل رمز PUK لبطاقة SIM ورمز \"رقم التعريف الشخصي\" الجديد"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"‏رمز PUK لبطاقة SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"‏رمز \"رقم تعريف شخصي\" جديد لبطاقة SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"المس لكتابة كلمة المرور"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"اكتب كلمة المرور لإلغاء التأمين"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"اكتب رقم التعريف الشخصي لإلغاء التأمين"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"رقم التعريف الشخصي غير صحيح."</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"‏اكتب رمز PIN لإلغاء التأمين"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"‏رمز PIN غير صحيح."</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"لإلغاء التأمين، اضغط على \"القائمة\" ثم على 0."</string>
     <string name="faceunlock_multiple_failures" msgid="754137583022792429">"تم تجاوز الحد الأقصى لعدد محاولات تأمين الجهاز بالوجه"</string>
     <string name="keyguard_charged" msgid="3272223906073492454">"تم الشحن"</string>
@@ -35,17 +36,17 @@
     <string name="keyguard_low_battery" msgid="8143808018719173859">"توصيل جهاز الشحن."</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"اضغط على \"القائمة\" لإلغاء القفل."</string>
     <string name="keyguard_network_locked_message" msgid="9169717779058037168">"الشبكة مؤمّنة"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"ليست هناك بطاقة SIM"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ليست هناك بطاقة SIM في الجهاز اللوحي."</string>
-    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"ليست هناك بطاقة SIM في الهاتف."</string>
-    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"أدخل بطاقة SIM."</string>
-    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string>
-    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"بطاقة SIM غير قابلة للاستخدام."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"تم تعطيل بطاقة SIM بشكل دائم.\n اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string>
-    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"بطاقة SIM مؤمّنة."</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"بطاقة SIM مؤمّنة بكود PUK."</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. الأداة %2$d من %3$d."</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"‏ليست هناك بطاقة SIM"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"‏ليست هناك بطاقة SIM في الجهاز اللوحي."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"‏ليست هناك بطاقة SIM في الهاتف."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"‏أدخل بطاقة SIM."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"‏بطاقة SIM مفقودة أو غير قابلة للقراءة. أدخل بطاقة SIM."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"‏بطاقة SIM غير قابلة للاستخدام."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"‏تم تعطيل بطاقة SIM بشكل دائم.\n اتصل بمقدم خدمة اللاسلكي للحصول على بطاقة SIM أخرى."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"‏بطاقة SIM مؤمّنة."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"‏بطاقة SIM مؤمّنة بكود PUK."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"‏جارٍ إلغاء تأمين بطاقة SIM…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"‏%1$s. الأداة %2$d من %3$d."</string>
     <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"إضافة أداة."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"فارغة"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"تم توسيع منطقة إلغاء القفل."</string>
@@ -62,7 +63,7 @@
     <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"إلغاء القفل باستخدام التمرير."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string>
     <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"تأمين الجهاز بالوجه."</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"إلغاء القفل باستخدام رقم التعريف الشخصي."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"‏إلغاء القفل باستخدام رمز PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"إلغاء القفل باستخدام كلمة المرور."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"منطقة النقش."</string>
     <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"منطقة التمرير."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"زر الإيقاف المؤقت"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"زر التشغيل"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"زر الإيقاف"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"رائعة"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"معارضة"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"قلب"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"إلغاء القفل للمتابعة"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"تم إلغاء التشغيل"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"أسقط <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> للحذف."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"لن يتم حذف <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ب ت ث"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -98,27 +106,26 @@
     <string name="kg_wrong_pin" msgid="1131306510833563801">"رقم تعريف شخصي خاطئ"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"حاول مرة أخرى خلال <xliff:g id="NUMBER">%d</xliff:g> ثانية."</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"ارسم نقشك"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"أدخل رقم التعريف الشخصي لبطاقة SIM"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"أدخل رقم التعريف الشخصي"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"‏أدخل رمز PIN لبطاقة SIM"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"‏أدخل رمز PIN"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"أدخل كلمة المرور"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"إدخال رمز رقم التعريف الشخصي المراد"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأكيد رمز رقم التعريف الشخصي المراد"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"جارٍ إلغاء تأمين بطاقة SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"رقم التعريف الشخصي غير صحيح."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"اكتب رقم التعريف الشخصي المكون من 4 إلى 8 أرقام."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"يجب أن يتضمن رمز PUK‏ 8 أرقام أو أكثر."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"لا يتطابق رمزا رقم التعريف الشخصي"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"‏بطاقة SIM معطلة الآن. أدخل رمز PUK للمتابعة. اتصل بمشغل شبكة الجوال للاطلاع على التفاصيل."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"‏إدخال رمز رمز PIN المراد"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"‏تأكيد رمز رمز PIN المراد"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"‏جارٍ إلغاء تأمين بطاقة SIM…"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"‏اكتب رمز PIN المكون من 4 إلى 8 أرقام."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"‏يجب أن يتضمن رمز PUK‏ 8 أرقام أو أكثر."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"‏أعد إدخال رمز PUK الصحيح. وستؤدي المحاولات المتكررة إلى تعطيل بطاقة SIM نهائيًا."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"‏لا يتطابق رمزا رمز PIN"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"محاولات النقش كثيرة جدًا"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"‏لإلغاء التأمين، سجّل الدخول بحسابك في Google."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"اسم المستخدم (البريد إلكتروني)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"كلمة المرور"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"تسجيل الدخول"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"اسم مستخدم غير صحيح أو كلمة مرور غير صالحة."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‏هل نسيت اسم المستخدم أو كلمة المرور؟\nانتقل إلى "<b>"google.com/accounts/recovery"</b>"."</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"جارٍ فحص الحساب…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"لقد كتبت رقم التعريف الشخصي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"‏لقد كتبت رمز PIN بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"لقد كتبت كلمة المرور بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"لقد رسمت نقش إلغاء التأمين بطريقة غير صحيحة <xliff:g id="NUMBER_0">%d</xliff:g> مرة. \n\nأعد المحاولة خلال <xliff:g id="NUMBER_1">%d</xliff:g> ثانية."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"لقد حاولت إلغاء تأمين الجهاز اللوحي بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستتم إعادة تعيين الجهاز اللوحي على الإعدادات الافتراضية للمصنع وسيتم فقد جميع بيانات المستخدم."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"لقد رسمت نقش إلغاء التأمين بشكل غير صحيح <xliff:g id="NUMBER_0">%d</xliff:g> مرة. بعد إجراء <xliff:g id="NUMBER_1">%d</xliff:g> من المحاولات غير الناجحة الأخرى، ستُطالب بإلغاء تأمين الهاتف باستخدام حساب بريد إلكتروني لإلغاء تأمين الهاتف.\n\n أعد المحاولة خلال <xliff:g id="NUMBER_2">%d</xliff:g> ثانية."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"إزالة"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"‏رمز \"رقم التعريف الشخصي\" لبطاقة SIM غير صحيح، ويلزمك الاتصال الآن بمشغّل شبكة الجوّال لإلغاء قفل الجهاز."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"‏رمز \"رقم التعريف الشخصي\" لبطاقة SIM غير صحيح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER">%d</xliff:g>) يتعين عليك بعدها الاتصال بمشغّل شبكة الجوّال لإلغاء قفل الجهاز."</item>
+    <item quantity="other" msgid="2215723361575359486">"‏رمز \"رقم التعريف الشخصي\" لبطاقة SIM غير صحيح، يتبقى لديك <xliff:g id="NUMBER">%d</xliff:g> من المحاولات."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"‏بطاقة SIM غير صالحة للاستخدام. يُرجى الاتصال بمشغّل شبكة الجوّال."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"‏رمز PUK لبطاقة SIM غير صالح، ويتبقى لديك محاولة واحدة (<xliff:g id="NUMBER">%d</xliff:g>)، تصبح بعدها بطاقة SIM غير صالحة للاستخدام بشكل دائم."</item>
+    <item quantity="other" msgid="5477305226026342036">"‏رمز PUK لبطاقة SIM غير صالح، ويتبقى لديك <xliff:g id="NUMBER">%d</xliff:g> من المحاولات، تصبح بعدها بطاقة SIM غير صالحة للاستخدام بشكل دائم."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"‏أخفقت عملية \"رقم التعريف الشخصي\" لبطاقة SIM!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"‏أخفقت عملية PUK لبطاقة SIM!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"تم قبول الرمز!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"زر المقطع الصوتي السابق"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"زر المقطع الصوتي التالي"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"زر الإيقاف المؤقت"</string>
diff --git a/packages/Keyguard/res/values-az-rAZ/strings.xml b/packages/Keyguard/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..5c8f6ac
--- /dev/null
+++ b/packages/Keyguard/res/values-az-rAZ/strings.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PİN kodu daxil edin"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK və yeni PİN kod daxil edin"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kod"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Yeni PIN kodu"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Şifrə daxil etmək üçün toxunun"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Kilidi açmaq üçün parol yazın"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Kilidi açmaq üçün PIN daxil edin"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Yanlış PIN kodu."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Kilidi açmaq üçün Menyu, sonra 0 basın."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Sifət kilidi cəhdləriniz bitdi"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Dolmuş"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Dolur, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Elektrikə qoşun."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Kilidi açmaq üçün Menyu düyməsinə baxın."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Şəbəkə kilidləndi"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SİM kart yoxdur"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Planşetdə SİM kart yoxdur.."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonda SİM kart yoxdu."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM kartı daxil edin."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SİM kart yoxdur və ya oxuna bilinmir. SİM kart daxil edin."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Yararsız SIM kart."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Sizin SİM kartınız daimi olaraq deaktivləşib.\n Başqa SİM kart üçün simsiz xidmət provayderinizə müraciət edin."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kart kilidlənib."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SİM kart PUK ilə kilidlənib."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SİM kartın kilidi açılır..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d of %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Widget əlavə edin."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Boş"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Kilidi açma sahəsi genişləndi."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Kilidi açma sahəsi çökdü."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> vidcet."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"İstifadəçi selektoru"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media kontrolları"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Yenidən sıralama vidceti başladıldı."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidcetin təkrar sifarişi sona çatdı."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidcet <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> silindi."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kilidi açma sahəsini genişləndir."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Sürüşdürmə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kild açma modeli."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Sifət Kilidi"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin kilid açması."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifrə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Model sahəsi."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Sürüşdürmə sahəsi."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Əvvəlki izləmə düyməsi"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Növbəti izləmə düyməsi"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pauza düyməsi"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Oxutma düyməsi"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Dayandırma düyməsi"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ləğv et"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Sil"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hazırdır"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Rejim dəyişikliyi"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Daxil olun"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Kilidi aç"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Səssiz"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Səs açıqdır"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Axtar"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün yuxarı sürüşdürün."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün aşağı sürüşdürün."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sola sürüşdür."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sağa sürüşdür."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Cari istifadəçi <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Təcili zəng"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Şablonu unutmuşam"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Yanlış Model"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Yanlış Şifrə"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN səhvdir"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> saniyə sonra yenidən cəhd edin."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Şablonunuzu çəkin"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN kodu daxil edin"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PİN kodu daxil edin"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Parol daxil edin"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM indi deaktivdir. Davam etmək üçün PUK kodu daxil edin. Əlavə məlumat üçün operatora müraciət edin."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"İstədiyiniz PİN kodu daxil edin"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"İstədiyiniz PIN kodu təsdiqləyin"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SİM kartın kilidi açılır..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PİN kod."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-dən 8-ə qədər rəqəmi olan PIN yazın."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kod 8 rəqəm və ya daha çox olmalıdır."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Düzgün PUK kodu yenidən daxil edin. Təkrarlanan cəhdlər SIM\'i birdəfəlik sıradan çıxaracaq."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodları uyğun deyil"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Həddindən çox cəhd edildi!"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Kilidi açmaq üçün Google hesabınız ilə daxil olun."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"İstifadəçi adı (e-poçt)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Şifrə"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Daxil ol"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Yanlış istifadəçi adı və ya parol."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"İstifadəçi adınızı və ya parolunuzu unutmusunuz?\n "<b>"google.com/accounts/recovery"</b>" linkinə daxil olun."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Hesab yoxlanılır..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodunuzu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Şifrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Modelinizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış çəkmisiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, planşet fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Siz telefon kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, telefon fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. Planşet fabrik ayarlarına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Siz telefonun kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> yanlış cəhd etmisiniz. Telefon artıq defolt zavod halına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetinizin kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz artıq modeli <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etmisiniz.<xliff:g id="NUMBER_1">%d</xliff:g> dəfə də yanlış daxil etsəniz, telefonun kilidinin açılması üçün elektron poçt ünvanınız tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində yenidən cəhd edin."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Yığışdır"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Əvvəlki izləmə düyməsi"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Növbəti izləmə düyməsi"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pauza düyməsi"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Oxutma düyməsi"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Dayandırma düyməsi"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Xidmət yoxdur."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-az/strings.xml b/packages/Keyguard/res/values-az/strings.xml
new file mode 100644
index 0000000..5c8f6ac
--- /dev/null
+++ b/packages/Keyguard/res/values-az/strings.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PİN kodu daxil edin"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK və yeni PİN kod daxil edin"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kod"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Yeni PIN kodu"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Şifrə daxil etmək üçün toxunun"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Kilidi açmaq üçün parol yazın"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Kilidi açmaq üçün PIN daxil edin"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Yanlış PIN kodu."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Kilidi açmaq üçün Menyu, sonra 0 basın."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Sifət kilidi cəhdləriniz bitdi"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Dolmuş"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Dolur, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Elektrikə qoşun."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Kilidi açmaq üçün Menyu düyməsinə baxın."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Şəbəkə kilidləndi"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SİM kart yoxdur"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Planşetdə SİM kart yoxdur.."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonda SİM kart yoxdu."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM kartı daxil edin."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SİM kart yoxdur və ya oxuna bilinmir. SİM kart daxil edin."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Yararsız SIM kart."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Sizin SİM kartınız daimi olaraq deaktivləşib.\n Başqa SİM kart üçün simsiz xidmət provayderinizə müraciət edin."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kart kilidlənib."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SİM kart PUK ilə kilidlənib."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SİM kartın kilidi açılır..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d of %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Widget əlavə edin."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Boş"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Kilidi açma sahəsi genişləndi."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Kilidi açma sahəsi çökdü."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> vidcet."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"İstifadəçi selektoru"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media kontrolları"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Yenidən sıralama vidceti başladıldı."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidcetin təkrar sifarişi sona çatdı."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidcet <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> silindi."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kilidi açma sahəsini genişləndir."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Sürüşdürmə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kild açma modeli."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Sifət Kilidi"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin kilid açması."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifrə kilidi."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Model sahəsi."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Sürüşdürmə sahəsi."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Əvvəlki izləmə düyməsi"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Növbəti izləmə düyməsi"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pauza düyməsi"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Oxutma düyməsi"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Dayandırma düyməsi"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Ləğv et"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Sil"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Hazırdır"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Rejim dəyişikliyi"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Daxil olun"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Kilidi aç"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Səssiz"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Səs açıqdır"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Axtar"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün yuxarı sürüşdürün."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün aşağı sürüşdürün."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sola sürüşdür."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> üçün sağa sürüşdür."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Cari istifadəçi <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Təcili zəng"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Şablonu unutmuşam"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Yanlış Model"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Yanlış Şifrə"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN səhvdir"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> saniyə sonra yenidən cəhd edin."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Şablonunuzu çəkin"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN kodu daxil edin"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PİN kodu daxil edin"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Parol daxil edin"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM indi deaktivdir. Davam etmək üçün PUK kodu daxil edin. Əlavə məlumat üçün operatora müraciət edin."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"İstədiyiniz PİN kodu daxil edin"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"İstədiyiniz PIN kodu təsdiqləyin"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SİM kartın kilidi açılır..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PİN kod."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-dən 8-ə qədər rəqəmi olan PIN yazın."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kod 8 rəqəm və ya daha çox olmalıdır."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Düzgün PUK kodu yenidən daxil edin. Təkrarlanan cəhdlər SIM\'i birdəfəlik sıradan çıxaracaq."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN kodları uyğun deyil"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Həddindən çox cəhd edildi!"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Kilidi açmaq üçün Google hesabınız ilə daxil olun."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"İstifadəçi adı (e-poçt)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Şifrə"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Daxil ol"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Yanlış istifadəçi adı və ya parol."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"İstifadəçi adınızı və ya parolunuzu unutmusunuz?\n "<b>"google.com/accounts/recovery"</b>" linkinə daxil olun."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Hesab yoxlanılır..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"PIN kodunuzu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Şifrənizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etdiniz. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Modelinizi <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış çəkmisiniz.\n\n <xliff:g id="NUMBER_1">%d</xliff:g> saniyə ərzində yenidən yoxlayın"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, planşet fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Siz telefon kilidini açmaq üçün <xliff:g id="NUMBER_0">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. <xliff:g id="NUMBER_1">%d</xliff:g> dəfə də uğursuz cəhd etsəniz, telefon fabrik ayarlarına sıfırlanacaq və bütün məlumatlarınız itəcək."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Siz planşet kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> dəfə uğursuz cəhd etmisiniz. Planşet fabrik ayarlarına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Siz telefonun kilidini açmaq üçün <xliff:g id="NUMBER">%d</xliff:g> yanlış cəhd etmisiniz. Telefon artıq defolt zavod halına sıfırlanacaq."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Siz kilidi açmaq üçün şablonu <xliff:g id="NUMBER_0">%d</xliff:g> dəfə səhv çəkdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> daha uğursuz cəhddən sonra planşetinizin kilidini e-poçt hesabınızla açmaq tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində bir daha yoxlayın."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Siz artıq modeli <xliff:g id="NUMBER_0">%d</xliff:g> dəfə yanlış daxil etmisiniz.<xliff:g id="NUMBER_1">%d</xliff:g> dəfə də yanlış daxil etsəniz, telefonun kilidinin açılması üçün elektron poçt ünvanınız tələb olunacaq.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniyə ərzində yenidən cəhd edin."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Yığışdır"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Əvvəlki izləmə düyməsi"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Növbəti izləmə düyməsi"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pauza düyməsi"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Oxutma düyməsi"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Dayandırma düyməsi"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Xidmət yoxdur."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-be/activitystrings.xml b/packages/Keyguard/res/values-be/activitystrings.xml
deleted file mode 100644
index ccefe40..0000000
--- a/packages/Keyguard/res/values-be/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Аховы няма"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Шаблон"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карты"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карты"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Выбар вiджэта..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-be/strings.xml b/packages/Keyguard/res/values-be/strings.xml
deleted file mode 100644
index 81020a0..0000000
--- a/packages/Keyguard/res/values-be/strings.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Увядзіце PIN-код"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Увядзіце PUK-код і новы PIN-код"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новы PIN-код"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Дакраніцеся, каб увесці пароль"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Увядзіце пароль для разблакавання"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Каб разблакаваць, увядзіце PIN-код"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Няправільны PIN-код."</string>
-    <string name="keyguard_label_text" msgid="861796461028298424">"Каб разблакаваць, націсніце \"Меню\", затым 0."</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Перавышана максімальная колькасць спроб разблакоўкі праз Фэйскантроль"</string>
-    <string name="keyguard_charged" msgid="3272223906073492454">"Зараджаны"</string>
-    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Зарадка, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="keyguard_low_battery" msgid="8143808018719173859">"Падключыце зарадную прыладу."</string>
-    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Націсніце кнопку \"Меню\", каб разблакіраваць."</string>
-    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Сетка заблакiраваная"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Няма SIM-карты"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"У планшэце няма SIM-карты."</string>
-    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"У тэлефоне няма SIM-карты."</string>
-    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Устаўце SIM-карту."</string>
-    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-карта адсутнічае ці не чытаецца. Устаўце SIM-карту."</string>
-    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM-карту немагчыма выкарыстоўваць."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Ваша SIM-карта была адключана назаўсёды.\n Звяжыцеся з аператарам бесправадной сувязі, каб атрымаць іншую SIM-карту."</string>
-    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта заблакiраваная."</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карта заблакiравана PUK-кодам."</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Разблакiраванне SIM-карты..."</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ВIджэт %2$d з %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Дадаць віджэт"</string>
-    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Пусты"</string>
-    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Вобласць разблакіроўкі разгарнута."</string>
-    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Вобласць разблакіроўкі згарнута."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Віджэт <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
-    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Селектар карыстальнiка"</string>
-    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Стан"</string>
-    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камера"</string>
-    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Налады мультымедыя"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Змяненне парадку віджэтаў пачалося."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Змяненне парадку віджэтаў скончылася."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Віджэт <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> выдалены."</string>
-    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Разгарнуць вобласць разблакіроўкі."</string>
-    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Разблакiроўка слайда."</string>
-    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Узор разблакiроўкі."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Фэйскантроль"</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-код разблакiроўкі."</string>
-    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Пароль разблакiроўкі."</string>
-    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Вобласць узора."</string>
-    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Вобласць слайда."</string>
-    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Кнопка папярэдняй кампазiцыі"</string>
-    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Кнопка наступнай кампазiцыі"</string>
-    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Кнопка паўзы"</string>
-    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Кнопка прайгравання"</string>
-    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Кнопка спынення"</string>
-    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"123"</string>
-    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
-    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string>
-    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Адмена"</string>
-    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Выдаліць"</string>
-    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Гатова"</string>
-    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Змена рэжыму"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
-    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Разблакаваць"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Камера"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Ціхі рэжым"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Гук уключаны"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Правядзіце пальцам уверх, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Правядзіце пальцам уніз, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Правядзіце пальцам улева, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Правядзіце пальцам управа, каб атрымаць <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="user_switched" msgid="3768006783166984410">"Бягучы карыстальнік <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="kg_emergency_call_label" msgid="684946192523830531">"Экстранны выклік"</string>
-    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Забылі ключ"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Няправільна ключ"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Няправiльны пароль"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"Няправільны PIN-код"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Паўтарыце спробу праз <xliff:g id="NUMBER">%d</xliff:g> с."</string>
-    <string name="kg_pattern_instructions" msgid="398978611683075868">"Намалюйце ключ"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Увядзіце PIN-код SIM-карты"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"Увядзіце PIN-код"</string>
-    <string name="kg_password_instructions" msgid="5753646556186936819">"Увядзіце пароль"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-карта зараз адключана. Увядзіце PUK-код, каб працягнуць. Звяжыцеся са сваiм аператарам, каб атрымаць дадатковую iнфармацыю."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Увядзіце жаданы PIN-код"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Пацвердзіце жадан PIN-код"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблакiроўка SIM-карты..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Няправільны PIN-код."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Увядзіце PIN-код, які змяшчае ад 4 да 8 лічбаў."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код павінен утрымлiваць 8 лiчбаў і больш."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"Паўторна увядзіце правільны PUK-код. Неаднаразовыя спробы назаўжды адключаць SIM-карту."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-коды не супадаюць"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Занадта шмат спроб паўтарыць шаблон!"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Каб разблакiраваць, увайдзіце ў свой уліковы запіс Google."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Імя карыстальніка (электронная пошта)"</string>
-    <string name="kg_login_password_hint" msgid="9057289103827298549">"Пароль"</string>
-    <string name="kg_login_submit_button" msgid="5355904582674054702">"Увайсцi"</string>
-    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Няправільнае імя карыстальніка ці пароль."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Забыліся на імя карыстальніка або пароль?\nНаведайце "<b>"google.com/accounts/recovery"</b></string>
-    <string name="kg_login_checking_password" msgid="1052685197710252395">"Праверка ўлiковага запiсу..."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Вы няправільна ўвялі PIN-код пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Вы няправільна ўвялі пароль пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. \n\nПаўтарыце спробу праз <xliff:g id="NUMBER_1">%d</xliff:g> с."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да заводскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER_0">%d</xliff:g>). Пасля яшчэ некалькiх спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) ён будзе скінуты да завадскіх налад i карыстальнiцкiя дадзеныя будуць згубленыя."</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Вы няправільна спрабавалі разблакiраваць планшэт некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да завадскіх налад."</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Вы няправільна спрабавалі разблакiраваць тэлефон некалькi разоў (<xliff:g id="NUMBER">%d</xliff:g>). Цяпер ён будзе скінуты да завадскіх налад."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google.\n\n Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы няправільна ўвялі графічны ключ разблакiроўкi пэўную колькасць разоў: <xliff:g id="NUMBER_0">%d</xliff:g>. Пасля яшчэ некалькiх няўдалых спроб (<xliff:g id="NUMBER_1">%d</xliff:g>) вам будзе прапанавана разблакiраваць тэлефон, увайшоўшы ў Google.\n\n Паўтарыце спробу праз <xliff:g id="NUMBER_2">%d</xliff:g> с."</string>
-    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
-    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Выдалiць"</string>
-    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Кнопка папярэдняй кампазiцыі"</string>
-    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Кнопка наступнай кампазiцыі"</string>
-    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Кнопка паўзы"</string>
-    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Кнопка прайгравання"</string>
-    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Кнопка спынення"</string>
-    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Не абслугоўваецца."</string>
-</resources>
diff --git a/packages/Keyguard/res/values-bg/activitystrings.xml b/packages/Keyguard/res/values-bg/activitystrings.xml
deleted file mode 100644
index 807bcf2..0000000
--- a/packages/Keyguard/res/values-bg/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Без защита"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"ПИН код"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Парола"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Фигура"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"ПИН код за SIM карта"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK код за SIM карта"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Избиране на приспособление..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-bg/strings.xml b/packages/Keyguard/res/values-bg/strings.xml
index 869ab7b..ad4285a 100644
--- a/packages/Keyguard/res/values-bg/strings.xml
+++ b/packages/Keyguard/res/values-bg/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Въведете ПИН кода"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Въведете PUK и новия ПИН код"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK код"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Нов ПИН код"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Въведете PUK за SIM картата и новия ПИН код"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK код за SIM картата"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Нов ПИН код за SIM картата"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Докоснете и въведете парола"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Въведете парола, за да отключите"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Въведете ПИН, за да отключите"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Бутон за пауза"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Бутон за пускане"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Бутон за спиране"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Харесва ми"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Не ми харесва"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Сърце"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Отключете, за да продължите"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Стартирането е анулирано"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Пуснете <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>, за да изтриете."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> няма да се изтрие."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"АБВ"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Въведете желания ПИН код"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Потвърдете желания ПИН код"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM картата се отключва…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправилен ПИН код."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Въведете ПИН код с четири до осем цифри."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK кодът трябва да е с 8 или повече цифри."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Въведете отново правилния PUK код. Многократните опити ще деактивират за постоянно SIM картата."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Начертахте неправилно фигурата си за отключване <xliff:g id="NUMBER_0">%d</xliff:g> пъти. След още <xliff:g id="NUMBER_1">%d</xliff:g> неуспешни опита ще бъдете помолени да отключите телефона посредством имейл адрес.\n\n Опитайте отново след <xliff:g id="NUMBER_2">%d</xliff:g> секунди."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Премахване"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Неправилен ПИН код за SIM картата – сега трябва да се свържете с оператора си, за да отключите устройството."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Неправилен ПИН код за SIM картата – остава ви <xliff:g id="NUMBER">%d</xliff:g> опит, преди да трябва да се свържете с оператора си, за да отключите устройството."</item>
+    <item quantity="other" msgid="2215723361575359486">"Неправилен ПИН код за SIM картата – остават ви <xliff:g id="NUMBER">%d</xliff:g> опита."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM картата е неизползваема. Свържете се с оператора си."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Неправилен PUK код за SIM картата – остава ви <xliff:g id="NUMBER">%d</xliff:g> опит, преди SIM картата да стане неизползваема завинаги."</item>
+    <item quantity="other" msgid="5477305226026342036">"Неправилен PUK код за SIM картата – остават ви <xliff:g id="NUMBER">%d</xliff:g> опита, преди SIM картата да стане неизползваема завинаги."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Операцията с ПИН кода за SIM картата не бе успешна!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Операцията с PUK кода за SIM картата не бе успешна!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Кодът е приет!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Бутон за предишния запис"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Бутон за следващия запис"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Бутон за пауза"</string>
diff --git a/packages/Keyguard/res/values-ca/activitystrings.xml b/packages/Keyguard/res/values-ca/activitystrings.xml
deleted file mode 100644
index c18b9bb..0000000
--- a/packages/Keyguard/res/values-ca/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"No hi ha seguretat"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Contrasenya"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Patró"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de la SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de la SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Tria un widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ca/strings.xml b/packages/Keyguard/res/values-ca/strings.xml
index 4f97c6b..7e40709 100644
--- a/packages/Keyguard/res/values-ca/strings.xml
+++ b/packages/Keyguard/res/values-ca/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Bloqueig de teclat"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introdueix el codi PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introdueix el codi PUK i el codi PIN nou"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codi PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Codi PIN nou"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Escriu el PUK de la SIM i el codi PIN nou."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Codi PUK de la SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Codi PIN de la SIM nou"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toca per introduir contrasenya"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introdueix la contrasenya per desbloquejar"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introdueix la contrasenya per desbloquejar"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botó de pausa"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botó de reproducció"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botó de parada"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"M\'agrada"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"No m\'agrada"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Cor"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Desbloqueja per continuar"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"S\'ha cancel·lat l\'inici"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Deixa anar <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> per suprimir-lo."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"No se suprimirà <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introdueix el codi PIN"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirma el codi PIN"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"S\'està desbloquejant la targeta SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codi PIN incorrecte."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escriu un PIN que tingui de 4 a 8 números."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El codi PUK ha de tenir 8 números o més."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Torna a introduir el codi PUK correcte. Els intents repetits faran que es desactivi la SIM de manera permanent."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has dibuixat el patró de desbloqueig <xliff:g id="NUMBER_0">%d</xliff:g> vegades de manera incorrecta. Després de <xliff:g id="NUMBER_1">%d</xliff:g> intents incorrectes més, se\'t demanarà que desbloquegis el telèfon amb un compte de correu electrònic.\n\n Torna-ho a provar d\'aquí a <xliff:g id="NUMBER_2">%d</xliff:g> segons."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Elimina"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"El codi PIN de la SIM no és correcte. Has de contactar amb l\'operador de telefonia mòbil per desbloquejar el dispositiu."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"El codi PIN de la SIM no és correcte. Et queda <xliff:g id="NUMBER">%d</xliff:g> intent; si no l\'encertes, contacta amb l\'operador de telefonia mòbil per desbloquejar el dispositiu."</item>
+    <item quantity="other" msgid="2215723361575359486">"El codi PIN de la SIM no és correcte. Et queden <xliff:g id="NUMBER">%d</xliff:g> intents."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La SIM no es pot utilitzar. Contacta amb l\'operador de telefonia mòbil."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"El codi PUK de la SIM no és correcte. Et queda <xliff:g id="NUMBER">%d</xliff:g> intent; si no l\'encertes, la SIM no es podrà tornar a fer servir."</item>
+    <item quantity="other" msgid="5477305226026342036">"El codi PUK de la SIM no és correcte. Et queden <xliff:g id="NUMBER">%d</xliff:g> intents; si no l\'encertes, la SIM no es podrà tornar a fer servir."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Hi ha hagut un problema en l\'operació del PIN de la SIM."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Hi ha hagut un problema en l\'operació del PUK de la SIM."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"S\'ha acceptat el codi."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botó de pista anterior"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botó de pista següent"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botó de pausa"</string>
diff --git a/packages/Keyguard/res/values-cs/activitystrings.xml b/packages/Keyguard/res/values-cs/activitystrings.xml
deleted file mode 100644
index 354176e..0000000
--- a/packages/Keyguard/res/values-cs/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Žádné zabezpečení"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Heslo"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Gesto"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM karty"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM karty"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Zvolte widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-cs/strings.xml b/packages/Keyguard/res/values-cs/strings.xml
index ec2833c..53cc707 100644
--- a/packages/Keyguard/res/values-cs/strings.xml
+++ b/packages/Keyguard/res/values-cs/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Uzamčení kláves"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Zadejte kód PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Zadejte kód PUK a nový kód PIN."</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kód PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nový kód PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Zadejte kód PUK SIM karty a nový kód PIN."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Kód PUK SIM karty"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nový kód PIN SIM karty"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotykem zadáte heslo"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Zadejte heslo pro odemknutí"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Zadejte kód PIN pro odemknutí"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tlačítko Pozastavit"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Tlačítko Přehrát"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Tlačítko Zastavit"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Líbí se mi"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Nelíbí se mi"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Srdíčko"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Pokračujte odemknutím"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Spuštění zrušeno"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Uvolněním dotyku widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> vymažete."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> nebude vymazán."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Zadejte požadovaný kód PIN."</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potvrďte požadovaný kód PIN."</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokování SIM karty..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávný kód PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadejte kód PIN o délce 4–8 číslic."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Minimální délka kódu PUK je 8 číslic."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Znovu zadejte správný kód PUK. Opakovanými pokusy SIM kartu trvale deaktivujete."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Již <xliff:g id="NUMBER_0">%d</xliff:g>krát jste nesprávně nakreslili své heslo odemknutí. Po <xliff:g id="NUMBER_1">%d</xliff:g> dalších neúspěšných pokusech budete požádáni o odemčení telefonu pomocí e-mailového účtu.\n\n Zkuste to znovu za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Odebrat"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Zadali jste nesprávný kód PIN SIM karty. Nyní musíte za účelem odemknutí zařízení kontaktovat svého operátora."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Zadali jste nesprávný kód PIN SIM karty. Máte ještě <xliff:g id="NUMBER">%d</xliff:g> pokus, poté budete muset o odemknutí zařízení požádat svého operátora."</item>
+    <item quantity="other" msgid="2215723361575359486">"Zadali jste nesprávný kód PIN SIM karty. Počet zbývajících pokusů: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kartu nelze použít. Kontaktujte operátora."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Nesprávný kód PUK SIM karty. Máte ještě <xliff:g id="NUMBER">%d</xliff:g> pokus, poté bude SIM karta natrvalo zablokována."</item>
+    <item quantity="other" msgid="5477305226026342036">"Zadali jste nesprávný kód PUK SIM karty. Počet zbývajících pokusů, po kterých bude SIM karta natrvalo zablokována: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operace pomocí kódu PIN SIM karty se nezdařila!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operace pomocí kódu PUK SIM karty se nezdařila!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kód byl přijat."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Tlačítko Předchozí stopa"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Tlačítko Další stopa"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tlačítko Pozastavit"</string>
diff --git a/packages/Keyguard/res/values-da/activitystrings.xml b/packages/Keyguard/res/values-da/activitystrings.xml
deleted file mode 100644
index af07ba5..0000000
--- a/packages/Keyguard/res/values-da/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Ingen sikkerhed"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"Pinkode"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Adgangskode"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Mønster"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"Pinkode til SIM-kort"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kode til SIM-kort"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Vælg widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-da/strings.xml b/packages/Keyguard/res/values-da/strings.xml
index cfc7464..cf1aad9 100644
--- a/packages/Keyguard/res/values-da/strings.xml
+++ b/packages/Keyguard/res/values-da/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Tastaturlås"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Indtast pinkode"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Indtast PUK- og pinkode"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Ny pinkode"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Indtast PUK-koden til SIM-kortet og den nye pinkode"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK-kode til SIM-kort"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Ny pinkode til SIM-kortet"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Tryk for at angive adgangskode"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Indtast adgangskoden for at låse op"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Indtast pinkode for at låse op"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pause-knap"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Afspil-knap"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop-knap"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Synes om"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Synes ikke om"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Hjerte"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Lås op for at gå videre"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Starten blev annulleret"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Slip <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> for at slette."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> slettes ikke."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Indtast den ønskede pinkode"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekræft den ønskede pinkode"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortet låses op…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Forkert pinkode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Indtast en pinkode på mellem 4 og 8 tal."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden skal være på 8 tal eller mere."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Indtast den korrekte PUK-kode. Gentagne forsøg vil permanent deaktivere SIM-kortet."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet dit oplåsningsmønster forkert <xliff:g id="NUMBER_0">%d</xliff:g> gange. Efter <xliff:g id="NUMBER_1">%d</xliff:g> yderligere mislykkede forsøg til vil du blive bedt om at låse din telefon op ved hjælp af en e-mailkonto.\n\n Prøv igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Fjern"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Forkert pinkode til SIM-kort. Du skal nu kontakte dit mobilselskab for at låse din enhed op."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før du skal kontakte dit mobilselskab for at låse din enhed op."</item>
+    <item quantity="other" msgid="2215723361575359486">"Forkert pinkode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortet er ubrugeligt. Kontakt dit mobilselskab."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før SIM-kortet bliver permanent ubrugeligt."</item>
+    <item quantity="other" msgid="5477305226026342036">"Forkert PUK-kode til SIM-kort. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøg tilbage, før dit SIM-kort bliver permanent ubrugeligt."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Pinkoden til SIM-kortet blev afvist."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"PUK-koden til SIM-kortet blev afvist."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Koden blev accepteret."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Knap til forrige nummer"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Knap til næste nummer"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pause-knap"</string>
diff --git a/packages/Keyguard/res/values-de/activitystrings.xml b/packages/Keyguard/res/values-de/activitystrings.xml
deleted file mode 100644
index d8e9272..0000000
--- a/packages/Keyguard/res/values-de/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Keine Sicherheit"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Passwort"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Muster"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN für SIM-Karte"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK für SIM-Karte"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Widget auswählen..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-de/strings.xml b/packages/Keyguard/res/values-de/strings.xml
index 85d1a4f9..14df237 100644
--- a/packages/Keyguard/res/values-de/strings.xml
+++ b/packages/Keyguard/res/values-de/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN-Code eingeben"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK und neuen PIN-Code eingeben"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-Code"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Neuer PIN-Code"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Geben Sie den PUK-Code der SIM-Karte und den neuen PIN-Code ein."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK-Code der SIM-Karte"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Neuer PIN-Code der SIM-Karte"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Zur Passworteingabe berühren"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Passwort zum Entsperren eingeben"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"PIN zum Entsperren eingeben"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Schaltfläche für Pause"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Schaltfläche für Wiedergabe"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Schaltfläche für Stopp"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Mag ich"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Mag ich nicht"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Herz"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Zum Fortfahren entsperren"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Start abgebrochen"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Legen Sie <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> zum Löschen ab."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> wird nicht gelöscht."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -79,7 +87,7 @@
     <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Löschen"</string>
     <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Fertig"</string>
     <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Modusänderung"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Umschalttaste"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
     <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Eingabetaste"</string>
     <string name="description_target_unlock" msgid="2228524900439801453">"Entsperren"</string>
     <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Gewünschten PIN-Code eingeben"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Gewünschten PIN-Code bestätigen"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-Karte wird entsperrt…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Falscher PIN-Code"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Geben Sie eine 4- bis 8-stellige PIN ein."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Der PUK-Code muss mindestens 8 Ziffern betragen."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Geben Sie den richtigen PUK-Code ein. Bei wiederholten Versuchen wird die SIM-Karte dauerhaft deaktiviert."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Sie haben Ihr Entsperrungsmuster <xliff:g id="NUMBER_0">%d</xliff:g>-mal falsch gezeichnet. Nach <xliff:g id="NUMBER_1">%d</xliff:g> weiteren erfolglosen Versuchen werden Sie aufgefordert, Ihr Telefon mithilfe eines E-Mail-Kontos zu entsperren.\n\n Versuchen Sie es in <xliff:g id="NUMBER_2">%d</xliff:g> Sekunden erneut."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Entfernen"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Falscher PIN-Code der SIM-Karte. Bitte wenden Sie sich an Ihren Mobilfunkanbieter, damit er Ihr Gerät entsperrt."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Falscher PIN-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuch, bevor Sie das Gerät von Ihrem Mobilfunkanbieter entsperren lassen müssen."</item>
+    <item quantity="other" msgid="2215723361575359486">"Falscher PIN-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuche."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Die SIM-Karte kann nicht verwendet werden. Bitte wenden Sie sich an Ihren Mobilfunkanbieter."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Falscher PUK-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuch, bevor Ihre SIM-Karte endgültig gesperrt wird."</item>
+    <item quantity="other" msgid="5477305226026342036">"Falscher PUK-Code der SIM-Karte. Sie haben noch <xliff:g id="NUMBER">%d</xliff:g> Versuche, bevor Ihre SIM-Karte endgültig gesperrt wird."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Fehler beim Entsperren mit der PIN der SIM-Karte"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Fehler beim Entsperren mithilfe des PUK-Codes der SIM-Karte"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Code akzeptiert"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Schaltfläche für vorherigen Titel"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Schaltfläche für nächsten Titel"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Schaltfläche für Pause"</string>
diff --git a/packages/Keyguard/res/values-el/activitystrings.xml b/packages/Keyguard/res/values-el/activitystrings.xml
deleted file mode 100644
index 3941f4f..0000000
--- a/packages/Keyguard/res/values-el/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Χωρίς ασφάλεια"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Κωδικός πρόσβασης"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Μοτίβο"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"Κωδικός PIN κάρτας SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"Κωδικός PUK κάρτας SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Επιλογή γραφικού στοιχείου…"</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml
index e86f24d..63d8409 100644
--- a/packages/Keyguard/res/values-el/strings.xml
+++ b/packages/Keyguard/res/values-el/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Πληκτρολογήστε τον κωδικό αριθμό PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Πληκτρολογήστε τον κωδικό PUK και τον νέο κωδικό PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Κωδικός PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Νέος κωδικός PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Πληκτρολογήστε τον κωδικό PUK της κάρτας SIM και τον νέο κωδικό PIN"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Κωδικός PUK κάρτας SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Νέος κώδικας αριθμού PIN της κάρτας SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Αγγίξτε για εισαγ. κωδ. πρόσβ."</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Πληκτρολογήστε τον κωδικό πρόσβασης για ξεκλείδωμα"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Πληκτρολογήστε τον αριθμό PIN για ξεκλείδωμα"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Κουμπί παύσης"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Κουμπί αναπαραγωγής"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Κουμπί διακοπής"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Επιδοκιμασία"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Αποδοκιμασία"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Καρδιά"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Ξεκλειδώστε για να συνεχίσετε"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Η εκκίνηση ακυρώθηκε"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Αποθέστε <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> για διαγραφή."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> δεν θα διαγραφεί."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ΑΒΓ"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Εισαγάγετε τον απαιτούμενο κωδικό PIN"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Επιβεβαιώστε τον απαιτούμενο κωδικό PIN"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ξεκλείδωμα κάρτας SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Εσφαλμένος κωδικός PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Πληκτρολογήστε έναν αριθμό PIN που να αποτελείται από 4 έως 8 αριθμούς."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Ο κωδικός PUK θα πρέπει να περιέχει τουλάχιστον 8 αριθμούς."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Εισαγάγετε ξανά τον κωδικό PUK. Οι επαναλαμβανόμενες προσπάθειες θα απενεργοποιήσουν οριστικά την κάρτα SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Σχεδιάσατε το μοτίβο ξεκλειδώματος εσφαλμένα <xliff:g id="NUMBER_0">%d</xliff:g> φορές. Μετά από <xliff:g id="NUMBER_1">%d</xliff:g> ανεπιτυχείς προσπάθειες ακόμη, θα σας ζητηθεί να ξεκλειδώσετε το τηλέφωνό σας με τη χρήση ενός λογαριασμού ηλεκτρονικού ταχυδρομείου.\n\n Δοκιμάστε ξανά σε <xliff:g id="NUMBER_2">%d</xliff:g> δευτερόλεπτα."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Κατάργηση"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Εσφαλμένος κωδικός PIN κάρτας SIM. Θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER">%d</xliff:g> προσπάθεια. Στη συνέχεια, θα πρέπει να επικοινωνήσετε με τον πάροχο κινητής τηλεφωνίας σας για να ξεκλειδώσετε τη συσκευή σας."</item>
+    <item quantity="other" msgid="2215723361575359486">"Εσφαλμένος κωδικός PIN κάρτας SIM. Απομένουν <xliff:g id="NUMBER">%d</xliff:g> προσπάθειες."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Η κάρτα SIM δεν μπορεί να χρησιμοποιηθεί. Επικοινωνήστε με τον πάροχο κινητής τηλεφωνίας σας."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένει άλλη <xliff:g id="NUMBER">%d</xliff:g> προσπάθεια προτού δεν είναι πλέον δυνατή η χρήση της κάρτας SIM."</item>
+    <item quantity="other" msgid="5477305226026342036">"Εσφαλμένος κωδικός PUK κάρτας SIM. Απομένουν <xliff:g id="NUMBER">%d</xliff:g> προσπάθειες προτού δεν είναι πλέον δυνατή η χρήση της κάρτας SIM."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Αποτυχία λειτουργίας κωδικού PIN κάρτας SIM!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Αποτυχία λειτουργίας κωδικού PUK κάρτας SIM!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Αποδεκτός κωδικός!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Κουμπί προηγούμενου κομματιού"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Κουμπί επόμενου κομματιού"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Κουμπί παύσης"</string>
diff --git a/packages/Keyguard/res/values-en-rGB/activitystrings.xml b/packages/Keyguard/res/values-en-rGB/activitystrings.xml
deleted file mode 100644
index 88e806e..0000000
--- a/packages/Keyguard/res/values-en-rGB/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"No security"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Password"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Pattern"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Choose widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-en-rGB/strings.xml b/packages/Keyguard/res/values-en-rGB/strings.xml
index 967c3fa..ecc850d 100644
--- a/packages/Keyguard/res/values-en-rGB/strings.xml
+++ b/packages/Keyguard/res/values-en-rGB/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Type PIN code"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Type PUK and new PIN code"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"New PIN Code"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Type SIM PUK and new PIN code"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK code"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"New SIM PIN code"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Touch to type password"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Type password to unlock"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Type PIN to unlock"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pause button"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Play button"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop button"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Thumbs up"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Thumbs down"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Heart"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Unlock to continue"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Launch cancelled"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Drop <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> to delete."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> will not be deleted."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Enter desired PIN code"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirm desired PIN code"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Incorrect PIN code."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK code should be 8 numbers or more."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remove"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before you must contact your carrier to unlock your device."</item>
+    <item quantity="other" msgid="2215723361575359486">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM is unusable. Contact your operator."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item>
+    <item quantity="other" msgid="5477305226026342036">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN operation failed!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK operation failed!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepted"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Previous track button"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Next track button"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pause button"</string>
diff --git a/packages/Keyguard/res/values-en-rIN/strings.xml b/packages/Keyguard/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..ecc850d
--- /dev/null
+++ b/packages/Keyguard/res/values-en-rIN/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Type PIN code"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Type SIM PUK and new PIN code"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK code"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"New SIM PIN code"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Touch to type password"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Type password to unlock"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Type PIN to unlock"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Incorrect PIN code."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"To unlock, press Menu, then 0."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maximum Face Unlock attempts exceeded"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Charged"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Charging, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Connect your charger."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Press Menu to unlock."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Network locked"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"No SIM card"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"No SIM card in tablet."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"No SIM card in phone."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insert a SIM card."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"The SIM card is missing or not readable. Insert a SIM card."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Unusable SIM card."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Your SIM card has been permanently disabled.\n Contact your wireless service provider for another SIM card."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM card is locked."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d of %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Add widget"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Empty"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Unlock area expanded."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Unlock area collapsed."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"User selector"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Camera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Media controls"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Widget reordering started."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Widget reordering ended."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> deleted."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Expand unlock area."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Slide unlock."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Face unlock."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slide area."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Previous track button"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Next track button"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pause button"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Play button"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop button"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Thumbs up"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Thumbs down"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Heart"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Unlock to continue"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Launch cancelled"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Drop <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> to delete."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> will not be deleted."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Cancel"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Delete"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Done"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Mode change"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Unlock"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Camera"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Silent"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Sound on"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"Slide down for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"Slide right for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Current user <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Emergency call"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Forgot Pattern"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Wrong Pattern"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Wrong Password"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"Wrong PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Try again in <xliff:g id="NUMBER">%d</xliff:g> seconds."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Draw your pattern"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Enter SIM PIN"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"Enter PIN"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Enter Password"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM is now disabled. Enter PUK code to continue. Contact carrier for details."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Enter desired PIN code"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirm desired PIN code"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Unlocking SIM card…"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Type a PIN that is 4 to 8 numbers."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK code should be 8 numbers or more."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Re-enter the correct PUK code. Repeated attempts will permanently disable the SIM."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN codes do not match"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Too many pattern attempts"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"To unlock, sign in with your Google account."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Username (email)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Password"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Sign in"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Invalid username or password."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Forgot your username or password?\nVisit "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Checking account…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"You have incorrectly typed your PIN <xliff:g id="NUMBER_0">%d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"You have incorrectly typed your password <xliff:g id="NUMBER_0">%d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. \n\nTry again in <xliff:g id="NUMBER_1">%d</xliff:g> seconds."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the tablet will be reset to factory default and all user data will be lost."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, the phone will be reset to factory default and all user data will be lost."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"You have incorrectly attempted to unlock the tablet <xliff:g id="NUMBER">%d</xliff:g> times. The tablet will now be reset to factory default."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"You have incorrectly attempted to unlock the phone <xliff:g id="NUMBER">%d</xliff:g> times. The phone will now be reset to factory default."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your tablet using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"You have incorrectly drawn your unlock pattern <xliff:g id="NUMBER_0">%d</xliff:g> times. After <xliff:g id="NUMBER_1">%d</xliff:g> more unsuccessful attempts, you will be asked to unlock your phone using an email account.\n\n Try again in <xliff:g id="NUMBER_2">%d</xliff:g> seconds."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remove"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Incorrect SIM PIN code; you must now contact your operator to unlock your device."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before you must contact your carrier to unlock your device."</item>
+    <item quantity="other" msgid="2215723361575359486">"Incorrect SIM PIN code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM is unusable. Contact your operator."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item>
+    <item quantity="other" msgid="5477305226026342036">"Incorrect SIM PUK code; you have <xliff:g id="NUMBER">%d</xliff:g> remaining attempt/s before SIM becomes permanently unusable."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN operation failed!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK operation failed!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepted"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Previous track button"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Next track button"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pause button"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Play button"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Stop button"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"No service."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-es-rUS/activitystrings.xml b/packages/Keyguard/res/values-es-rUS/activitystrings.xml
deleted file mode 100644
index 20117c4..0000000
--- a/packages/Keyguard/res/values-es-rUS/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Sin seguridad"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Contraseña"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Patrón"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de tarjeta SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de tarjeta SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Elegir widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-es-rUS/strings.xml b/packages/Keyguard/res/values-es-rUS/strings.xml
index 787581a..c6d63ba 100644
--- a/packages/Keyguard/res/values-es-rUS/strings.xml
+++ b/packages/Keyguard/res/values-es-rUS/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Bloqueo de teclado"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ingresa el código PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Escribe el código PUK y un nuevo código PIN."</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuevo código PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Escribe el código PUK de la tarjeta SIM y un nuevo código PIN."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Código PUK de la tarjeta SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nuevo código PIN de la tarjeta SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toca para ingresar la contraseña"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ingresar contraseña para desbloquear"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ingresa el PIN para desbloquear"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botón de pausa"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botón de reproducción"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botón de detención"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Votos a favor"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Votos en contra"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Corazón"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Desbloquea para continuar."</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Se canceló el inicio."</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Suelta <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> para eliminarlo."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"No se eliminará <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ingresa el código PIN deseado"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmar código PIN deseado"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Escribe un PIN que tenga de cuatro a ocho números."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El código PUK debe tener ocho números como mínimo."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Vuelve a ingresar el código PUK correcto. Si ingresas un código incorrecto varias veces, se inhabilitará la tarjeta SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Dibujaste incorrectamente tu patrón de desbloqueo <xliff:g id="NUMBER_0">%d</xliff:g> veces. Luego de <xliff:g id="NUMBER_1">%d</xliff:g> intentos incorrectos más, se te solicitará que desbloquees tu dispositivo mediante el uso de una cuenta de correo.\n\n Vuelve a intentarlo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminar"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"El código PIN de la tarjeta SIM es incorrecto. Debes comunicarte con el proveedor para desbloquear el dispositivo."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"El código PIN de la tarjeta SIM es incorrecto. Te queda <xliff:g id="NUMBER">%d</xliff:g> intento antes de que debas comunicarte con el proveedor para desbloquear el dispositivo."</item>
+    <item quantity="other" msgid="2215723361575359486">"El código PIN de la tarjeta SIM es incorrecto. Te quedan <xliff:g id="NUMBER">%d</xliff:g> intentos."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La tarjeta SIM no se puede utilizar. Comunícate con el proveedor."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"El código PUK de la tarjeta SIM es incorrecto. Te queda <xliff:g id="NUMBER">%d</xliff:g> intento antes de que la tarjeta SIM quede inutilizable permanentemente."</item>
+    <item quantity="other" msgid="5477305226026342036">"El código PUK de la tarjeta SIM es incorrecto. Te quedan <xliff:g id="NUMBER">%d</xliff:g> intentos antes de que la tarjeta SIM quede inutilizable permanentemente."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Error al desbloquear la tarjeta SIM con el PIN"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Error al desbloquear la tarjeta SIM con el PUK"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceptado"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botón de pista anterior"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botón de pista siguiente"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botón de pausa"</string>
diff --git a/packages/Keyguard/res/values-es/activitystrings.xml b/packages/Keyguard/res/values-es/activitystrings.xml
deleted file mode 100644
index 34899cc..0000000
--- a/packages/Keyguard/res/values-es/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Sin seguridad"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Contraseña"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Patrón"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN de tarjeta SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK de tarjeta SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Seleccionar widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-es/strings.xml b/packages/Keyguard/res/values-es/strings.xml
index d0c79eb..8a78399 100644
--- a/packages/Keyguard/res/values-es/strings.xml
+++ b/packages/Keyguard/res/values-es/strings.xml
@@ -20,17 +20,18 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Bloqueo"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduce el código PIN."</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduce el código PUK y un nuevo código PIN."</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuevo código PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Escribe el PUK de la tarjeta SIM y un nuevo código PIN"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Código PUK de la tarjeta SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nuevo código PIN de tarjeta SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toca para introducir contraseña"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introduce la contraseña para desbloquear."</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introduce el código PIN para desbloquear."</string>
     <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Código PIN incorrecto"</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"Para desbloquear el teléfono, pulsa la tecla de menú y, a continuación, pulsa 0."</string>
     <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Se ha superado el número máximo de intentos de desbloqueo facial."</string>
-    <string name="keyguard_charged" msgid="3272223906073492454">"Cargado"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Cargada"</string>
     <string name="keyguard_plugged_in" msgid="8117572000639998388">"Cargando (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
     <string name="keyguard_low_battery" msgid="8143808018719173859">"Conecta el cargador."</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Ve al menú para desbloquear la pantalla."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botón de pausa"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botón de reproducción"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botón para detener la reproducción"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Me gusta"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"No me gusta"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Corazón"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Desbloquear para continuar"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Inicio cancelado"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Suelta <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> para eliminarlo."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> no se eliminará."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduce el código PIN deseado"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirma el código PIN"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando tarjeta SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorrecto"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduce un código PIN con una longitud comprendida entre cuatro y ocho dígitos."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"El código PUK debe tener ocho números como mínimo."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Vuelve a introducir el código PUK correcto. Si introduces un código incorrecto varias veces, se inhabilitará la tarjeta SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Has fallado <xliff:g id="NUMBER_0">%d</xliff:g> veces al dibujar el patrón de desbloqueo. Si fallas otras <xliff:g id="NUMBER_1">%d</xliff:g> veces, deberás usar una cuenta de correo electrónico para desbloquear el teléfono.\n\n Inténtalo de nuevo en <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminar"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Código PIN de la tarjeta SIM incorrecto. Debes ponerte en contacto con tu operador para desbloquear el dispositivo."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Código PIN de la tarjeta SIM incorrecto. Queda <xliff:g id="NUMBER">%d</xliff:g> intento para tener que ponerte en contacto con tu operador para desbloquear el dispositivo."</item>
+    <item quantity="other" msgid="2215723361575359486">"Código PIN de la tarjeta SIM incorrecto. Quedan <xliff:g id="NUMBER">%d</xliff:g> intentos."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La tarjeta SIM no se puede utilizar. Ponte en contacto con tu operador."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Código PUK de la tarjeta SIM incorrecto. Te queda <xliff:g id="NUMBER">%d</xliff:g> intento para que la tarjeta SIM no se pueda utilizar de forma permanente."</item>
+    <item quantity="other" msgid="5477305226026342036">"Código PUK de la tarjeta SIM incorrecto. Quedan <xliff:g id="NUMBER">%d</xliff:g> intentos para que la tarjeta SIM no se pueda utilizar de forma permanente."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Error al intentar desbloquear la tarjeta SIM con el código PIN"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Error al intentar desbloquear la tarjeta SIM con el código PUK"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceptado"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botón de canción anterior"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botón de siguiente canción"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botón de pausa"</string>
diff --git a/packages/Keyguard/res/values-et-rEE/strings.xml b/packages/Keyguard/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..b837f01
--- /dev/null
+++ b/packages/Keyguard/res/values-et-rEE/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Klahvilukk"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Sisestage PIN-kood"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Sisestage SIM-i PUK- ja uus PIN-kood"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM-i PUK-kood"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Uus SIM-i PIN-kood"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Puudutage parooli sisestamiseks"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Avamiseks sisestage parool"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Avamiseks sisestage PIN-kood"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Vale PIN-kood."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Avamiseks vajutage menüüklahvi, seejärel klahvi 0."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimaalne teenusega Face Unlock avamise katsete arv on ületatud"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Laetud"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Ühendage laadija."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Avamiseks vajutage menüüklahvi."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Võrk on suletud"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM-kaarti pole"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tahvelarvutis pole SIM-kaarti."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonis pole SIM-kaarti."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Sisestage SIM-kaart."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-kaart puudub või on loetamatu. Sisestage SIM-kaart."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kasutamiskõlbmatu SIM-kaart."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kaart on jäädavalt keelatud.\n Uue SIM-kaardi saamiseks võtke ühendust oma mobiilsideoperaatoriga."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kaart on lukus."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart on PUK-lukus."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kaardi avamine ..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Vidin %2$d/%3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Vidina lisamine."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tühi"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Avamisala on laiendatud."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Avamisala on ahendatud."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Kasutaja valija"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Olek"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kaamera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Meedia juhtnupud"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Vidina ümberkorraldamine algas."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidina ümberkorraldamine lõppes."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> on kustutatud."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Avamisala laiendamine."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Lohistamisega avamine."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mustriga avamine."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Näoga avamine."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-koodiga avamine."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parooliga avamine."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mustri ala."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Lohistamisala."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Nupp Eelmine lugu"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Nupp Järgmine lugu"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Nupp Peata"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Nupp Esita"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Nupp Peata"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Meeldib"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Ei meeldi"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Süda"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Jätkamiseks tühistage lukustus"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Käivitamine on tühistatud"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Kustutamiseks laske vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> lahti."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Vidinat <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ei kustutata."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Tühista"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Kustuta"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Valmis"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režiimi muutmine"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tõstuklahv"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Sisestusklahv"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Luku avamine"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Kaamera"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Hääletu"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Heli on sees"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"Lohistage alla: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"Lohistage paremale: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Praegune kasutaja <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Hädaabikõne"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unustasin mustri"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Vale muster"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Vale parool"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"Vale PIN-kood"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Proovige uuesti <xliff:g id="NUMBER">%d</xliff:g> sekundi pärast."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Joonistage oma muster"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Sisestage SIM-i PIN-kood"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"Sisestage PIN-kood"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Sisestage parool"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Üksikasju küsige operaatorilt."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Sisestage soovitud PIN-kood"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kinnitage soovitud PIN-kood"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kaardi avamine ..."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Sisestage 4–8-numbriline PIN-kood."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodi pikkus peab olema vähemalt 8 numbrit."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Sisestage uuesti õige PUK-kood. Korduvkatsete korral keelatakse SIM jäädavalt."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodid ei ole vastavuses"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liiga palju mustrikatseid"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Avamiseks logige sisse oma Google\'i kontoga."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Kasutajanimi (e-post)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Parool"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Logi sisse"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Vale kasutajanimi või parool."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Kas unustasite kasutajanime või parooli?\nKülastage aadressi "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Konto kontrollimine ..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Olete PIN-koodi <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud.\n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Olete parooli <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud. \n\nProovige uuesti <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti.\n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda tahvelarvutit valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse tahvelarvuti tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda telefoni valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse telefon tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Olete püüdnud tahvelarvutit <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Tahvelarvuti lähtestatakse nüüd tehase vaikeseadetele."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Olete püüdnud telefoni <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Telefon lähtestatakse nüüd tehase vaikeseadetele."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eemalda"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Vale SIM-i PIN-kood, seadme avamiseks peate nüüd ühendust võtma oma operaatoriga."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Vale SIM-i PIN-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katse, enne kui peate seadme avamiseks operaatoriga ühendust võtma."</item>
+    <item quantity="other" msgid="2215723361575359486">"Vale SIM-i PIN-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katset."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM ei ole kasutatav. Võtke ühendust operaatoriga."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Vale SIM-i PUK-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katse, enne kui SIM püsivalt lukustatakse."</item>
+    <item quantity="other" msgid="5477305226026342036">"Vale SIM-i PUK-kood, teil on jäänud veel <xliff:g id="NUMBER">%d</xliff:g> katset, enne kui SIM püsivalt lukustatakse."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM-i PIN-koodi toiming ebaõnnestus."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM-i PUK-koodi toiming ebaõnnestus."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kood on õige."</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Nupp Eelmine lugu"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Nupp Järgmine lugu"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Nupp Peata"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Nupp Esita"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Nupp Peata"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Teenus puudub."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-et/activitystrings.xml b/packages/Keyguard/res/values-et/activitystrings.xml
deleted file mode 100644
index eb71afc..0000000
--- a/packages/Keyguard/res/values-et/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Turvamata"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN-kood"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Parool"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Muster"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM-i PIN-kood"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM-i PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Vidina valimine ..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-et/strings.xml b/packages/Keyguard/res/values-et/strings.xml
deleted file mode 100644
index 0a17a9c..0000000
--- a/packages/Keyguard/res/values-et/strings.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Sisestage PIN-kood"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Sisestage PUK-kood ja uus PIN-kood"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kood"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Uus PIN-kood"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Puudutage parooli sisestamiseks"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Avamiseks sisestage parool"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Avamiseks sisestage PIN-kood"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Vale PIN-kood."</string>
-    <string name="keyguard_label_text" msgid="861796461028298424">"Avamiseks vajutage menüüklahvi, seejärel klahvi 0."</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Maksimaalne teenusega Face Unlock avamise katsete arv on ületatud"</string>
-    <string name="keyguard_charged" msgid="3272223906073492454">"Laetud"</string>
-    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="keyguard_low_battery" msgid="8143808018719173859">"Ühendage laadija."</string>
-    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Avamiseks vajutage menüüklahvi."</string>
-    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Võrk on suletud"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM-kaarti pole"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tahvelarvutis pole SIM-kaarti."</string>
-    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Telefonis pole SIM-kaarti."</string>
-    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Sisestage SIM-kaart."</string>
-    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-kaart puudub või on loetamatu. Sisestage SIM-kaart."</string>
-    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kasutamiskõlbmatu SIM-kaart."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-kaart on jäädavalt keelatud.\n Uue SIM-kaardi saamiseks võtke ühendust oma mobiilsideoperaatoriga."</string>
-    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kaart on lukus."</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart on PUK-lukus."</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kaardi avamine ..."</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Vidin %2$d/%3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Vidina lisamine."</string>
-    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tühi"</string>
-    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Avamisala on laiendatud."</string>
-    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Avamisala on ahendatud."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
-    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Kasutaja valija"</string>
-    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Olek"</string>
-    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kaamera"</string>
-    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Meedia juhtnupud"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Vidina ümberkorraldamine algas."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Vidina ümberkorraldamine lõppes."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Vidin <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> on kustutatud."</string>
-    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Avamisala laiendamine."</string>
-    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Lohistamisega avamine."</string>
-    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mustriga avamine."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Näoga avamine."</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-koodiga avamine."</string>
-    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parooliga avamine."</string>
-    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mustri ala."</string>
-    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Lohistamisala."</string>
-    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Nupp Eelmine lugu"</string>
-    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Nupp Järgmine lugu"</string>
-    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Nupp Peata"</string>
-    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Nupp Esita"</string>
-    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Nupp Peata"</string>
-    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
-    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
-    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
-    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Tühista"</string>
-    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Kustuta"</string>
-    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Valmis"</string>
-    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Režiimi muutmine"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Tõstuklahv"</string>
-    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Sisestusklahv"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Luku avamine"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kaamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Hääletu"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Heli on sees"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Lohistage alla: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Lohistage paremale: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="user_switched" msgid="3768006783166984410">"Praegune kasutaja <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="kg_emergency_call_label" msgid="684946192523830531">"Hädaabikõne"</string>
-    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Unustasin mustri"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Vale muster"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Vale parool"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"Vale PIN-kood"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Proovige uuesti <xliff:g id="NUMBER">%d</xliff:g> sekundi pärast."</string>
-    <string name="kg_pattern_instructions" msgid="398978611683075868">"Joonistage oma muster"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Sisestage SIM-i PIN-kood"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"Sisestage PIN-kood"</string>
-    <string name="kg_password_instructions" msgid="5753646556186936819">"Sisestage parool"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM on nüüd keelatud. Jätkamiseks sisestage PUK-kood. Üksikasju küsige operaatorilt."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Sisestage soovitud PIN-kood"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kinnitage soovitud PIN-kood"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kaardi avamine ..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Vale PIN-kood."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Sisestage 4–8-numbriline PIN-kood."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodi pikkus peab olema vähemalt 8 numbrit."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"Sisestage uuesti õige PUK-kood. Korduvkatsete korral keelatakse SIM jäädavalt."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-koodid ei ole vastavuses"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Liiga palju mustrikatseid"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Avamiseks logige sisse oma Google\'i kontoga."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Kasutajanimi (e-post)"</string>
-    <string name="kg_login_password_hint" msgid="9057289103827298549">"Parool"</string>
-    <string name="kg_login_submit_button" msgid="5355904582674054702">"Logi sisse"</string>
-    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Vale kasutajanimi või parool."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Kas unustasite kasutajanime või parooli?\nKülastage aadressi "<b>"google.com/accounts/recovery"</b>"."</string>
-    <string name="kg_login_checking_password" msgid="1052685197710252395">"Konto kontrollimine ..."</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Olete PIN-koodi <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud.\n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Olete parooli <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti sisestanud. \n\nProovige uuesti <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti.\n\nProovige <xliff:g id="NUMBER_1">%d</xliff:g> sekundi pärast uuesti."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda tahvelarvutit valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse tahvelarvuti tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Olete üritanud <xliff:g id="NUMBER_0">%d</xliff:g> korda telefoni valesti avada. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset lähtestatakse telefon tehase vaikeseadetele ja kõik kasutajaandmed lähevad kaotsi."</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Olete püüdnud tahvelarvutit <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Tahvelarvuti lähtestatakse nüüd tehase vaikeseadetele."</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Olete püüdnud telefoni <xliff:g id="NUMBER">%d</xliff:g> korda valesti avada. Telefon lähtestatakse nüüd tehase vaikeseadetele."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil tahvelarvuti avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Joonistasite oma avamismustri <xliff:g id="NUMBER_0">%d</xliff:g> korda valesti. Pärast veel <xliff:g id="NUMBER_1">%d</xliff:g> ebaõnnestunud katset palutakse teil telefon avada meilikontoga.\n\n Proovige uuesti <xliff:g id="NUMBER_2">%d</xliff:g> sekundi pärast."</string>
-    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
-    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eemalda"</string>
-    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Nupp Eelmine lugu"</string>
-    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Nupp Järgmine lugu"</string>
-    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Nupp Peata"</string>
-    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Nupp Esita"</string>
-    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Nupp Peata"</string>
-    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Teenus puudub."</string>
-</resources>
diff --git a/packages/Keyguard/res/values-fa/activitystrings.xml b/packages/Keyguard/res/values-fa/activitystrings.xml
deleted file mode 100644
index 735af8d..0000000
--- a/packages/Keyguard/res/values-fa/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"عدم وجود امنیت"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"پین"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"گذرواژه"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"الگو"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"پین سیم کارت"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK سیم کارت"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"انتخاب ابزارک..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml
index 83c5a34..5d1c487 100644
--- a/packages/Keyguard/res/values-fa/strings.xml
+++ b/packages/Keyguard/res/values-fa/strings.xml
@@ -20,16 +20,17 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"پین کد را وارد کنید"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK و پین کد جدید را تایپ کنید"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"کد PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"پین کد جدید"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"‏PUK سیم کارت و کد پین جدید را تایپ کنید"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"‏کد PUK سیم کارت"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"کد پین جدید سیم کارت"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"برای تایپ گذرواژه لمس کنید"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"برای بازکردن قفل، گذرواژه را وارد کنید"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"برای بازکردن قفل، پین را تایپ کنید"</string>
     <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"پین کد اشتباه است."</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"برای بازگشایی قفل، منو را فشار دهید و سپس 0 را فشار دهید."</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"دفعات تلاش برای Face Unlock از حداکثر مجاز بیشتر شد"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"‏دفعات تلاش برای Face Unlock از حداکثر مجاز بیشتر شد"</string>
     <string name="keyguard_charged" msgid="3272223906073492454">"شارژ شد"</string>
     <string name="keyguard_plugged_in" msgid="8117572000639998388">"شارژ، <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="keyguard_low_battery" msgid="8143808018719173859">"شارژر خود را وصل کنید."</string>
@@ -41,11 +42,11 @@
     <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"سیم کارت را وارد کنید."</string>
     <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"سیم کارت موجود نیست یا قابل خواندن نیست. یک سیم کارت وارد کنید."</string>
     <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"سیم کارت غیرقابل استفاده است."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"سیم کارت شما به طور دائم غیر فعال شده است. \nبرای داشتن سیم کارت دیگر با ارائه‎دهنده سرویس بی‎سیم خود تماس بگیرید."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"‏سیم کارت شما به طور دائم غیر فعال شده است. \nبرای داشتن سیم کارت دیگر با ارائه‎دهنده سرویس بی‎سیم خود تماس بگیرید."</string>
     <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"سیم کارت قفل شد."</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"سیم کارت با PUK قفل شده است."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"‏سیم کارت با PUK قفل شده است."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"درحال بازگشایی قفل سیم کارت..."</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ابزارک %2$d از %3$d."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"‏%1$s. ابزارک %2$d از %3$d."</string>
     <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"ابزارک اضافه کنید."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"خالی"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"منطقه بازگشایی گسترده شد."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"دکمه توقف موقت"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"دکمه پخش"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"دکمه توقف"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"رأی موافق"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"رأی مخالف"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"قلب"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"برای ادامه قفل را باز کنید"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"راه‌اندازی لغو شد"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"جهت حذف، <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> را بکشید."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> پاک نخواهد شد."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,18 +113,17 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"پین کد دلخواه را وارد کنید"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"تأیید پین کد دلخواه"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"بازگشایی قفل سیم کارت..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"پین کد اشتباه است."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"یک پین ۴ تا ۸ رقمی را تایپ کنید."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"پین کد باید ۸ عدد یا بیشتر باشد."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"پین کد صحیح را دوباره وارد کنید. تلاش‌های مکرر به‌طور دائم سیم کارت را غیرفعال خواهد کرد."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"پین کدها منطبق نیستند"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"تلاش‎های زیادی برای کشیدن الگو صورت گرفته است"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"‏تلاش‎های زیادی برای کشیدن الگو صورت گرفته است"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"‏برای بازگشایی قفل، با حساب Google خود وارد سیستم شوید."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"نام کاربری (ایمیل)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"گذرواژه"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"ورود به سیستم"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"نام کاربری یا گذرواژه نامعتبر."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"نام کاربری یا گذرواژه خود را فراموش کردید؟\nاز "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‏نام کاربری یا گذرواژه خود را فراموش کردید؟\nاز "<b>"google.com/accounts/recovery"</b>" بازدید کنید."</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"درحال بررسی حساب..."</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"پین خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. \n\nپس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"گذرواژه خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه تایپ کردید. \n\nپس از <xliff:g id="NUMBER_1">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
@@ -125,10 +132,23 @@
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"شما به اشتباه <xliff:g id="NUMBER_0">%d</xliff:g> بار اقدام به باز کردن قفل تلفن کرده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق دیگر، تلفن به پیش‌فرض کارخانه بازنشانی می‌شود و تمام داده‌های کاربر از دست خواهد رفت."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"شما به اشتباه <xliff:g id="NUMBER">%d</xliff:g> بار اقدام به باز کردن قفل رایانه لوحی کرده‌اید. رایانه لوحی اکنون به پیش‌فرض کارخانه بازنشانی می‌شود."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"شما به اشتباه <xliff:g id="NUMBER">%d</xliff:g> بار اقدام به باز کردن قفل تلفن کرده‌اید. این تلفن اکنون به پیش‌فرض کارخانه بازنشانی می‌شود."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل رایانه لوحی خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل تلفن خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"‏شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‎اید. بعد از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل رایانه لوحی خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"‏شما الگوی بازگشایی قفل خود را <xliff:g id="NUMBER_0">%d</xliff:g> بار اشتباه کشیده‌اید. پس از <xliff:g id="NUMBER_1">%d</xliff:g> تلاش ناموفق، از شما خواسته می‎شود که با استفاده از یک حساب ایمیل قفل تلفن خود را باز کنید.\n\n لطفاً پس از <xliff:g id="NUMBER_2">%d</xliff:g> ثانیه دوباره امتحان کنید."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"حذف"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"کد پین سیم کارت اشتباه است، اکنون برای گشودن قفل دستگاهتان باید با شرکت مخابراتی تماس بگیرید."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"کد پین سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر می‌توانید تلاش کنید و پس از آن برای گشودن قفل دستگاهتان باید با شرکت مخابراتی تماس بگیرید."</item>
+    <item quantity="other" msgid="2215723361575359486">"کد پین سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر می‌توانید تلاش کنید."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"سیم کارت غیر قابل استفاده است. با شرکت مخابراتی‌تان تماس بگیرید."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"‏کد PUK سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر می‌توانید تلاش کنید و پس از آن سیم کارت به صورت دائم غیر قابل استفاده می‌شود."</item>
+    <item quantity="other" msgid="5477305226026342036">"‏کد PUK سیم کارت اشتباه است، <xliff:g id="NUMBER">%d</xliff:g> بار دیگر می‌توانید تلاش کنید و پس از آن سیم کارت به طور دائم غیر قابل استفاده می‌شود."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"عملیات پین سیم کارت ناموفق بود!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"‏عملیات PUK سیم کارت ناموفق بود!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"کد پذیرفته شد!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"دکمه تراک قبلی"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"دکمه تراک بعدی"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"دکمه توقف موقت"</string>
diff --git a/packages/Keyguard/res/values-fi/activitystrings.xml b/packages/Keyguard/res/values-fi/activitystrings.xml
deleted file mode 100644
index 6e0a5a9..0000000
--- a/packages/Keyguard/res/values-fi/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Ei suojausta"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN-koodi"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Salasana"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Kuvio"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM-kortin PIN-koodi"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM-kortin PUK-koodi"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Valitse widget…"</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-fi/strings.xml b/packages/Keyguard/res/values-fi/strings.xml
index dbca50d..bdf6677 100644
--- a/packages/Keyguard/res/values-fi/strings.xml
+++ b/packages/Keyguard/res/values-fi/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Näppäinvahti"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Anna PIN-koodi"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Anna PUK-koodi ja uusi PIN-koodi"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-koodi"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Uusi PIN-koodi"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Anna SIM-kortin PUK-koodi ja uusi PIN-koodi"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM-kortin PUK-koodi"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Uusi SIM-kortin PIN-koodi"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Kosketa ja anna salasana"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Poista lukitus antamalla salasana"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Poista lukitus antamalla PIN-koodi"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tauko-painike"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Toista-painike"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Keskeytä-painike"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Tykkään"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"En tykkää"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Sydän"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Jatka poistamalla lukitus"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Käynnistys peruutettu"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Poista <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> pudottamalla."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Kohdetta <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ei poisteta."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Anna haluamasi PIN-koodi"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Vahvista haluamasi PIN-koodi"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM-kortin lukitusta poistetaan…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Virheellinen PIN-koodi."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Anna 4–8-numeroinen PIN-koodi."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koodissa tulee olla vähintään 8 numeroa."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Anna uudelleen oikea PUK-koodi. Jos teet liian monta yritystä, SIM-kortti poistetaan käytöstä pysyvästi."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Piirsit lukituksenpoistokuvion väärin <xliff:g id="NUMBER_0">%d</xliff:g> kertaa. Jos piirrät kuvion väärin vielä <xliff:g id="NUMBER_1">%d</xliff:g> kertaa, sinua pyydetään poistamaan puhelimesi lukitus sähköpostitilin avulla.\n\n Yritä uudelleen <xliff:g id="NUMBER_2">%d</xliff:g> sekunnin kuluttua."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Poista"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Virheellinen SIM-kortin PIN-koodi. Sinun on nyt otettava yhteys operaattoriin laitteen lukituksen avaamiseksi."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritys jäljellä, ennen kuin sinun on otettava yhteys operaattoriin laitteen lukituksen avaamiseksi."</item>
+    <item quantity="other" msgid="2215723361575359486">"Virheellinen SIM-kortin PIN-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritystä jäljellä."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortti on käyttökelvoton. Ota yhteys operaattoriin."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritys jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton."</item>
+    <item quantity="other" msgid="5477305226026342036">"Virheellinen SIM-kortin PUK-koodi. Sinulla on <xliff:g id="NUMBER">%d</xliff:g> yritystä jäljellä, ennen kuin SIM-kortista tulee pysyvästi käyttökelvoton."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM-kortin PIN-toiminto epäonnistui!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM-kortin PUK-toiminto epäonnistui!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Koodi hyväksytty!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Edellinen kappale -painike"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Seuraava kappale -painike"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tauko-painike"</string>
diff --git a/packages/Keyguard/res/values-fr-rCA/strings.xml b/packages/Keyguard/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..e77927c
--- /dev/null
+++ b/packages/Keyguard/res/values-fr-rCA/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Verrouillage du clavier"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Saisissez le NIP."</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Entrez le code PUK et le nouveau NIP de la carte SIM"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Code PUK de la carte SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nouveau NIP de la carte SIM"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Appuyer pour saisir mot passe"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Saisissez le mot de passe pour déverrouiller le clavier."</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Saisissez le NIP pour déverrouiller le clavier."</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"NIP erroné."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Pour déverrouiller le téléphone, appuyez sur \"Menu\", puis sur 0."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Nombre maximal autorisé de tentatives Face Unlock atteint."</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Chargé"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"En charge (<xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Branchez votre chargeur."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Appuyez sur \"Menu\" pour déverrouiller l\'appareil."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Réseau verrouillé"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Aucune carte SIM"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Aucune carte SIM n\'est insérée dans la tablette."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Aucune carte SIM n\'est insérée dans le téléphone."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Insérez une carte SIM."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Carte SIM absente ou illisible. Veuillez insérer une carte SIM."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Carte SIM inutilisable."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Votre carte SIM a été définitivement désactivée.\n Veuillez contacter votre opérateur de téléphonie mobile pour en obtenir une autre."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La carte SIM est verrouillée."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La carte SIM est verrouillée par clé PUK."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Déverrouillage de la carte SIM en cours…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d sur %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ajouter un widget"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Vide"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Développement de la zone de déverrouillage"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Réduction de la zone de déverrouillage"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Sélecteur d\'utilisateur"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"État"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Caméra"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Commandes multimédias"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Début de la réorganisation des widgets"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Fin de la réorganisation des widgets"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Le widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> a été supprimé."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Développer la zone de déverrouillage"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Déverrouillage en faisant glisser votre doigt sur l\'écran"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Déverrouillage par schéma"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Déverrouillage par reconnaissance faciale"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Déverrouillage par NIP"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Déverrouillage par mot de passe"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zone du schéma"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zone où faire glisser votre doigt sur l\'écran"</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Bouton pour revenir au titre précédent"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Bouton pour atteindre le titre suivant"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Bouton de pause"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Bouton de lecture"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Bouton d\'arrêt"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"J\'aime"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Je n\'aime pas"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Cœur"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Déverrouiller pour continuer"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Lancement annulé"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Déposez <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> pour supprimer."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ne sera pas supprimé."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Annuler"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Supprimer"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Terminé"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Changement de mode"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Maj"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Entrée"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Déverrouiller"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Appareil photo"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Mode silencieux"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Son activé"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Recherche"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Faire glisser le doigt vers le haut : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"Faire glisser le doigt vers le bas : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser votre doigt vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"Faites glisser votre doigt vers la droite pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Utilisateur actuel : <xliff:g id="NAME">%1$s</xliff:g>"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Appel d\'urgence"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"J\'ai oublié le schéma"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Schéma incorrect."</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Mot de passe incorrect."</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"NIP incorrect."</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Réessayez dans <xliff:g id="NUMBER">%d</xliff:g> secondes."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Dessinez votre schéma."</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Saisissez le NIP de la carte SIM"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"Saisissez le NIP."</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Saisissez votre mot de passe."</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"La carte SIM est maintenant désactivée. Saisissez le code PUK pour continuer. Contactez votre opérateur pour en savoir plus."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Saisir le NIP souhaité"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmer le NIP souhaité"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Déblocage de la carte SIM en cours…"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Saisissez un NIP comprenant entre quatre et huit chiffres"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Le code PUK doit contenir au moins 8 chiffres."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Veuillez saisir de nouveau le code PUK correct. Des tentatives répétées désactivent définitivement la carte SIM."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Les codes PIN ne correspondent pas."</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Trop de tentatives."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Pour déverrouiller l\'appareil, connectez-vous avec votre compte Google."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Nom d\'utilisateur (courriel)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Mot de passe"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Connexion"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nom d\'utilisateur ou mot de passe non valide."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Vous avez oublié votre nom d\'utilisateur ou votre mot de passe?\nRendez-vous sur la page "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Vérification du compte en cours…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Vous avez saisi un NIP incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. \n\nVeuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Vous avez saisi un mot de passe incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. \n\nVeuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises.\n\nVeuillez réessayer dans <xliff:g id="NUMBER_1">%d</xliff:g> secondes."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Vous avez tenté de déverrouiller la tablette de façon incorrecte à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, sa configuration d\'usine sera rétablie, et toutes les données utilisateur seront perdues."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, sa configuration d\'usine sera rétablie, et toutes les données utilisateur seront perdues."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Vous avez tenté de déverrouiller la tablette de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Vous avez tenté de déverrouiller le téléphone de façon incorrecte à <xliff:g id="NUMBER">%d</xliff:g> reprises. Sa configuration d\'usine va être rétablie."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre tablette à l\'aide d\'un compte de messagerie électronique.\n\n Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique.\n\n Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Supprimer"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"NIP de carte SIM incorrect. Vous devez maintenant communiquer avec votre fournisseur de services pour déverrouiller votre appareil."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"NIP de carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative. Après cela, vous devrez communiquer avec votre fournisseur de services pour déverrouiller votre appareil."</item>
+    <item quantity="other" msgid="2215723361575359486">"NIP de carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative(s)."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La carte SIM est inutilisable. Communiquez avec votre fournisseur de services."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Code PUK de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative avant que votre carte SIM devienne définitivement inutilisable."</item>
+    <item quantity="other" msgid="5477305226026342036">"Code PUK de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative(s) avant que votre carte SIM devienne définitivement inutilisable."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Le déverrouillage par NIP de la carte SIM a échoué."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Le déverrouillage de la carte SIM par code PUK a échoué."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepté"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Bouton pour revenir au titre précédent"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Bouton pour atteindre le titre suivant"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Bouton de pause"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Bouton de lecture"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Bouton d\'arrêt"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Aucun service"</string>
+</resources>
diff --git a/packages/Keyguard/res/values-fr/activitystrings.xml b/packages/Keyguard/res/values-fr/activitystrings.xml
deleted file mode 100644
index dc79842..0000000
--- a/packages/Keyguard/res/values-fr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Aucune sécurité"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"Code PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Mot de passe"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Schéma"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"Code PIN de la carte SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"Clé PUK de la carte SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Sélectionner un widget"</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-fr/strings.xml b/packages/Keyguard/res/values-fr/strings.xml
index 250a136..41be1eb 100644
--- a/packages/Keyguard/res/values-fr/strings.xml
+++ b/packages/Keyguard/res/values-fr/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Protection des touches"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Saisissez le code PIN."</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Saisissez la clé PUK et le nouveau code PIN."</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Code PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nouveau code PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Saisissez la clé PUK et le nouveau code PIN de la carte SIM."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Clé PUK de la carte SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nouveau code PIN de la carte SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Appuyez pour saisir mot passe"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Saisissez le mot de passe pour déverrouiller le clavier."</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Saisissez le code PIN pour déverrouiller le clavier."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Bouton de pause"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Bouton de lecture"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Bouton d\'arrêt"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"J\'aime"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Je n\'aime pas"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Cœur"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Déverrouillez l\'appareil pour continuer."</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Lancement annulé."</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Relâchez le widget \"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>\" pour le supprimer."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Le widget \"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>\" ne va pas être supprimé."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Saisir le code PIN souhaité"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmer le code PIN souhaité"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Déblocage de la carte SIM en cours…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Le code PIN est erroné."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Veuillez saisir un code PIN comprenant entre quatre et huit chiffres."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Le code PUK doit contenir au moins 8 chiffres."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Veuillez saisir de nouveau le code PUK correct. Des tentatives répétées désactivent définitivement la carte SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vous avez dessiné un schéma de déverrouillage incorrect à <xliff:g id="NUMBER_0">%d</xliff:g> reprises. Si vous échouez encore <xliff:g id="NUMBER_1">%d</xliff:g> fois, vous devrez déverrouiller votre téléphone à l\'aide d\'un compte de messagerie électronique.\n\n Veuillez réessayer dans <xliff:g id="NUMBER_2">%d</xliff:g> secondes."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Supprimer"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Code PIN de la carte SIM incorrect. Vous devez désormais contacter votre opérateur pour déverrouiller votre appareil."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Code PIN de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative. Après cela, vous devrez contacter votre opérateur pour déverrouiller votre appareil."</item>
+    <item quantity="other" msgid="2215723361575359486">"Code PIN de la carte SIM incorrect. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentatives."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"La carte SIM est inutilisable. Veuillez contacter votre opérateur."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Clé PUK de la carte SIM incorrecte. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentative avant que votre carte SIM ne devienne définitivement inutilisable."</item>
+    <item quantity="other" msgid="5477305226026342036">"Clé PUK de la carte SIM incorrecte. Il vous reste <xliff:g id="NUMBER">%d</xliff:g> tentatives avant que votre carte SIM ne devienne définitivement inutilisable."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Échec du déverrouillage à l\'aide du code PIN de la carte SIM."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Échec du déverrouillage à l\'aide de la clé PUK de la carte SIM."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Code accepté."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Bouton pour revenir au titre précédent"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Bouton pour atteindre le titre suivant"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Bouton de pause"</string>
diff --git a/packages/Keyguard/res/values-hi/activitystrings.xml b/packages/Keyguard/res/values-hi/activitystrings.xml
deleted file mode 100644
index 4b0a082..0000000
--- a/packages/Keyguard/res/values-hi/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"कोई सुरक्षा नहीं"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"पासवर्ड"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"प्रतिमान"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM पिन"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"विजेट चुनें..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-hi/strings.xml b/packages/Keyguard/res/values-hi/strings.xml
index 714d9fb..c963beb 100644
--- a/packages/Keyguard/res/values-hi/strings.xml
+++ b/packages/Keyguard/res/values-hi/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"कीगार्ड"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"पिन कोड लिखें"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK और नया पिन कोड लिखें"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"नया पिन कोड"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"सिम PUK और नया PIN कोड लिखें"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"सिम PUK कोड"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"नया सिम PIN कोड"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"पासवर्ड लिखने के लिए स्पर्श करें"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"अनलॉक करने के लिए पासवर्ड लिखें"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"अनलॉक करने के लिए पिन लिखें"</string>
@@ -60,17 +61,24 @@
     <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"विजेट <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> को हटा दिया गया."</string>
     <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"अनलॉक क्षेत्र विस्तृत करें."</string>
     <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"स्लाइड अनलॉक."</string>
-    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"प्रतिमान अनलॉक."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"आकार अनलॉक."</string>
     <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलॉक."</string>
     <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"पिन अनलॉक."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलॉक."</string>
-    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"प्रतिमान क्षेत्र."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"आकार क्षेत्र."</string>
     <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र."</string>
     <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"पिछला ट्रैक बटन"</string>
     <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"अगला ट्रैक बटन"</string>
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"पॉज़ करें बटन"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"चलाएं बटन"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"रोकें बटन"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"पसंद"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"नापसंद"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"दिल"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"जारी रखने के लिए अनलॉक करें"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"लॉन्‍च रद्द कर दिया गया"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"हटाने के लिए <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> खींचें."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> को नहीं हटाया जाएगा."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -92,12 +100,12 @@
     <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए दाएं स्‍लाइड करें."</string>
     <string name="user_switched" msgid="3768006783166984410">"वर्तमान उपयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>."</string>
     <string name="kg_emergency_call_label" msgid="684946192523830531">"आपातकालीन कॉल"</string>
-    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"प्रतिमान भूल गए"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत प्रतिमान"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"आकार भूल गए"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत आकार"</string>
     <string name="kg_wrong_password" msgid="2333281762128113157">"गलत पासवर्ड"</string>
     <string name="kg_wrong_pin" msgid="1131306510833563801">"गलत PIN"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
-    <string name="kg_pattern_instructions" msgid="398978611683075868">"अपना प्रतिमान आरेखित करें"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"अपना आकार आरेखित करें"</string>
     <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"सिम PIN डालें"</string>
     <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN डालें"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड डालें"</string>
@@ -105,30 +113,42 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"इच्छित पिन कोड डालें"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"इच्छित पिन कोड की पुष्टि करें"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलॉक कर रहा है…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ऐसा PIN लिखें, जो 4 से 8 अंकों का हो."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK कोड 8 या अधिक संख्या वाला होना चाहिए."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"सही PUK कोड पुन: डालें. बार-बार प्रयास करने से सिम स्थायी रूप से अक्षम हो जाएगी."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"पिन कोड का मिलान नहीं होता"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"बहुत अधिक प्रतिमान प्रयास"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"अनलॉक करने के लिए, अपने Google खाते से साइन इन करें."</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"बहुत अधिक आकार प्रयास"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"अनलॉक करने के लिए, अपने Google खाते से प्रवेश करें."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"उपयोगकर्ता नाम (ईमेल)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"पासवर्ड"</string>
-    <string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन करें"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"प्रवेश करें"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य उपयोगकर्ता नाम या पासवर्ड."</string>
     <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"अपना उपयोगकर्ता नाम या पासवर्ड भूल गए?\n "<b>"google.com/accounts/recovery"</b>" पर जाएं."</string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"खाते की जांच की जा रही है…"</string>
     <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"आप अपना PIN <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"आप अपना पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से लिख चुके हैं. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"आपने अपना अनलॉक प्रतिमान <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"आपने अपना अनलॉक आकार <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"आप टेबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, टेबलेट फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"आप फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, फ़ोन फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा और सभी उपयोगकर्ता डेटा खो जाएगा."</string>
     <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"आप टेबलेट को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. टेबलेट अब फ़ैक्‍टरी डिफ़ॉल्‍ट पर रीसेट हो जाएगा."</string>
     <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"आप फ़ोन को अनलॉक करने के लिए <xliff:g id="NUMBER">%d</xliff:g> बार गलत तरीके से प्रयास कर चुके हैं. फ़ोन अब फ़ैक्टरी डिफ़ॉल्ट पर रीसेट हो जाएगा."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टेबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक प्रतिमान को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने टेबलेट को किसी ईमेल खाते के उपयोग से अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"आपने अपने अनलॉक आकार को <xliff:g id="NUMBER_0">%d</xliff:g> बार गलत तरीके से आरेखित किया है. <xliff:g id="NUMBER_1">%d</xliff:g> और असफल प्रयासों के बाद, आपसे अपने फ़ोन को किसी ईमेल खाते का उपयोग करके अनलॉक करने के लिए कहा जाएगा.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> सेकंड में पुन: प्रयास करें."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"निकालें"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"गलत सिम PIN कोड अपने उपकरण को अनलॉक करने के लिए अब आपको अपने वाहक से संपर्क करना होगा."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"गलत सिम PIN कोड, अपने उपकरण को अनलॉक करने के लिए अपने वाहक से संपर्क करने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष है."</item>
+    <item quantity="other" msgid="2215723361575359486">"गलत सिम PIN कोड, आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष हैं."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"सिम अनुपयोगी है. अपने वाहक से संपर्क करें."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"गलत सिम PUK कोड, सिम के स्थायी रूप से अनुपयोगी हो जाने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष है."</item>
+    <item quantity="other" msgid="5477305226026342036">"गलत सिम PUK कोड, सिम के स्थायी रूप से अनुपयोगी हो जाने से पहले आपके पास <xliff:g id="NUMBER">%d</xliff:g> प्रयास शेष हैं."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"सिम PIN की कार्यवाही विफल रही!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"सिम PUK की कार्यवाही विफल रही!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"कोड स्वीकार किया गया!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"पिछला ट्रैक बटन"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"अगला ट्रैक बटन"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"पॉज़ करें बटन"</string>
diff --git a/packages/Keyguard/res/values-hr/activitystrings.xml b/packages/Keyguard/res/values-hr/activitystrings.xml
deleted file mode 100644
index d2b8e92..0000000
--- a/packages/Keyguard/res/values-hr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Nema zaštite"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Zaporka"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Uzorak"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN za SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK za SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Odaberite widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-hr/strings.xml b/packages/Keyguard/res/values-hr/strings.xml
index 70e6305..6bbdd51 100644
--- a/packages/Keyguard/res/values-hr/strings.xml
+++ b/packages/Keyguard/res/values-hr/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Zaštita tipkovnice"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Unesite PIN kôd"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Unesite PUK i novi PIN kôd"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kôd"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Novi PIN kôd"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Unesite PUK i novi PIN kôd SIM kartice"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK kôd SIM kartice"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Novi PIN kôd SIM kartice"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dodirnite za tipkanje zaporke"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Unesite zaporku za otključavanje"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Unesite PIN za otključavanje"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Gumb Pauza"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Gumb Reprodukcija"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Gumb Zaustavi"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Palac gore"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Palac dolje"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Srce"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Otključajte za nastavak"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Pokretanje je otkazano"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Ispustite widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> da biste ga izbrisali."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> neće se izbrisati."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Upišite željeni PIN kôd"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potvrdite željeni PIN kôd"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Otključavanje SIM kartice…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netočan PIN kôd."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Unesite PIN koji ima od 4 do 8 brojeva."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kôd treba imati 8 brojeva ili više."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ponovo unesite ispravan PUK kôd. Ponovljeni pokušaji trajno će onemogućiti SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netočno ste iscrtali obrazac za otključavanje <xliff:g id="NUMBER_0">%d</xliff:g> puta. Nakon još ovoliko neuspješnih pokušaja: <xliff:g id="NUMBER_1">%d</xliff:g> morat ćete otključati telefon pomoću računa e-pošte.\n\n Pokušajte ponovo za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Ukloni"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Netočan PIN kôd SIM kartice; sada morate kontaktirati svog mobilnog operatera da bi otključao vaš uređaj."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Netočan PIN kôd SIM kartice; imate još <xliff:g id="NUMBER">%d</xliff:g> pokušaj prije nego što budete morali kontaktirati svog mobilnog operatera da bi otključao vaš uređaj."</item>
+    <item quantity="other" msgid="2215723361575359486">"Netočan PIN kôd SIM kartice; imate još ovoliko preostalih pokušaja: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kartica nije upotrebljiva. Kontaktirajte svog mobilnog operatera."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Netočan PUK kôd SIM kartice; imate još <xliff:g id="NUMBER">%d</xliff:g> pokušaj prije nego što SIM kartica postane trajno neupotrebljiva."</item>
+    <item quantity="other" msgid="5477305226026342036">"Netočan PUK kôd SIM kartice; imate još nekoliko preostalih pokušaja (<xliff:g id="NUMBER">%d</xliff:g>) prije nego što SIM kartica postane trajno neupotrebljiva."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operacija PIN-a SIM kartice nije uspjela!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operacija PUK-a SIM kartice nije uspjela!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kôd je prihvaćen!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Gumb Prethodni zapis"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Gumb Sljedeći zapis"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Gumb Pauza"</string>
diff --git a/packages/Keyguard/res/values-hu/activitystrings.xml b/packages/Keyguard/res/values-hu/activitystrings.xml
deleted file mode 100644
index 30d2951..0000000
--- a/packages/Keyguard/res/values-hu/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Nincs védelem"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN kód"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Jelszó"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Minta"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM kártya PIN kódja"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM kártya PUK kódja"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Modul kiválasztása..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-hu/strings.xml b/packages/Keyguard/res/values-hu/strings.xml
index 611602e..9706874 100644
--- a/packages/Keyguard/res/values-hu/strings.xml
+++ b/packages/Keyguard/res/values-hu/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Billentyűzár"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Írja be a PIN kódot"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Írja be a PUK kódot, majd az új PIN kódot"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kód"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Új PIN kód"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Írja be a SIM kártya PUK kódját, majd az új PIN kódot"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM kártya PUK kódja"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Új PIN kód a SIM kártyához"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Érintsen jelszó megadásához"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"A feloldáshoz írja be a jelszót"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Feloldáshoz írja be a PIN kódot"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Szünet gomb"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Lejátszás gomb"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Leállítás gomb"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Tetszik"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Nem tetszik"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Szív"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"A folytatáshoz oldja fel a billentyűzárat"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Indítás törölve"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Engedje el a(z) <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> törléséhez."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"A(z) <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> nem lesz törölve."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,13 +113,12 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Kívánt PIN kód megadása"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kívánt PIN kód megerősítése"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kártya feloldása..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Helytelen PIN kód."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4–8 számjegyű PIN kódot írjon be."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"A PUK kód legalább  8 számjegyből kell, hogy álljon."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Adja meg újra a helyes PUK kódot. Az ismételt próbálkozással véglegesen letiltja a SIM kártyát."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"A PIN kódok nem egyeznek."</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Túl sok mintarajzolási próbálkozás"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"A feloldáshoz jelentkezzen be Google Fiókjával."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"A feloldáshoz jelentkezzen be Google-fiókjával."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"Felhasználónév (e-mail cím)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"Jelszó"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"Bejelentkezés"</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> alkalommal helytelenül rajzolta le a feloldási mintát. További <xliff:g id="NUMBER_1">%d</xliff:g> sikertelen kísérlet után egy e-mail fiók használatával kell feloldania a telefonját.\n\n Kérjük, próbálja újra <xliff:g id="NUMBER_2">%d</xliff:g> másodperc múlva."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eltávolítás"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Helytelen PIN kód a SIM kártyához; vegye fel a kapcsolatot szolgáltatójával az eszköz feloldásához."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Helytelen PIN kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt fel kellene vennie a kapcsolatot szolgáltatójával az eszköz feloldásához."</item>
+    <item quantity="other" msgid="2215723361575359486">"Helytelen PIN kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"A SIM kártya használhatatlan. Vegye fel a kapcsolatot szolgáltatójával."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Helytelen PUK kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt a SIM kártya végleg használhatatlan lesz."</item>
+    <item quantity="other" msgid="5477305226026342036">"Helytelen PUK kód a SIM kártyához; még <xliff:g id="NUMBER">%d</xliff:g> próbálkozása van, mielőtt a SIM kártya végleg használhatatlan lesz."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"A SIM kártya PIN-művelete sikertelen!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"A SIM kártya PUK-művelete sikertelen!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kód elfogadva."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Előző szám gomb"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Következő szám gomb"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Szünet gomb"</string>
diff --git a/packages/Keyguard/res/values-hy-rAM/strings.xml b/packages/Keyguard/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..60c626d
--- /dev/null
+++ b/packages/Keyguard/res/values-hy-rAM/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Մուտքագրեք PIN կոդը"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Մուտքագրեք SIM PUK-ը և նոր PIN կոդը"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK կոդը"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Նոր SIM PIN կոդը"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Հպեք` գաղտնաբառը մուտքագրելու համար"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Մուտքագրեք գաղտնաբառը ապակողպման համար"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Մուտքագրեք PIN-ը ապակողպման համար"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Սխալ PIN ծածկագիր:"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Ապակողպման համար սեղմեք Ցանկ, ապա 0:"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Առավելագույն Դեմքով ապակողպման փորձերը գերազանցված են"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Լիցքավորված է"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Լիցքավորում, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Միացրեք ձեր լիցքավորիչը:"</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Ապակողպելու համար սեղմեք Ցանկը:"</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Ցանցը կողպված է"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM քարտ չկա"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Գրասալիկում SIM քարտ չկա:"</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Հեռախոսի մեջ SIM քարտ չկա:"</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Զետեղեք SIM քարտը:"</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM քարտը բացակայում է կամ չի կարող կարդացվել: Մտցրեք SIM քարտ:"</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Անպիտան SIM քարտ:"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Ձեր SIM քարտը ընդմիշտ կասեցվել է:\nԿապվեք ձեր բջջային ծառայության մատակարարի հետ նոր SIM քարտ ձեռք բերելու համար:"</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM քարտը կողպված է:"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM քարտը PUK-ով կողպված է:"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM քարտը ապակողպվում է..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Վիջեթ %2$d of %3$d:"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ավելացնել վիջեթ:"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Դատարկ"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Ապակողպման տարածքն ընդլայնված է:"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Ապակողպման տարածքը ետ է ծալված:"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> վիջեթ:"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Օգտվողի ընտրիչ"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Կարգավիճակ"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Ֆոտոխցիկ"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Մեդիա կարգավորումներ"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Վիջեթների վերադասավորումը մեկնարկել է:"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Վիջեթի վերադասավորումն ավարտվեց:"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Վիջեթ <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>-ը ջնջված է:"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Ընդլայնել ապակողպման տարածությունը:"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Էջի ապակողպում:"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Սխեմայով ապակողպում:"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Դեմքով ապակողպում:"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin-ն ապակողպված է:"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Գաղտնաբառի ապակողպում:"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Սխեմայի տարածք:"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Սահեցման տարածք:"</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Նախորդ հետագծի կոճակը"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Հաջորդ հետագծի կոճակը"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Դադարի կոճակ"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Նվագարկման կոճակ"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Կանգի կոճակ"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Լավն է"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Լավը չէ"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Սիրտ"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Շարունակելու համար ապակողպեք"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Գործարկումը չեղարկվեց"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> վիջեթը ջնջելու համար բաց թողեք այն այստեղ:"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> վիջեթը չի ջնջվի:"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Չեղարկել"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Ջնջել"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Կատարված է"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Ռեժիմի փոփոխում"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Մուտք"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Ապակողպել"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Ֆոտոխցիկ"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Լուռ"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Ձայնը միացնել"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Որոնել"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Սահեցրեք վերև <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"Սահեցրեք ցած <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Սահեցրեք ձախ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"Սահեցրեք աջ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
+    <string name="user_switched" msgid="3768006783166984410">"Ներկայիս օգտվողը <xliff:g id="NAME">%1$s</xliff:g>:"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Արտակարգ իրավիճակի հեռախոսազանգ"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Մոռացել եմ սխեման"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Սխալ սխեմա"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Սխալ գաղտնաբառ"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"Սխալ PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Փորձեք կրկին <xliff:g id="NUMBER">%d</xliff:g> վայրկյանից:"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Հավաքեք ձեր սխեման"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Մուտքագրեք SIM-ի PIN-ը"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"Մուտքագրեք PIN-ը"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Մուտքագրեք գաղտնաբառը"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM-ը այս պահին անջատված է: Մուտքագրեք PUK կոդը շարունակելու համար: Մանրամասների համար կապվեք օպերատորի հետ:"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Մուտքագրեք ցանկալի PIN ծածկագիրը"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Հաստատեք ցանկալի PIN ծածկագիրը"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ապակողպում է SIM քարտը ..."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Մուտքագրեք PIN, որը 4-ից 8 թիվ է:"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK կոդը պետք է լինի 8 կամ ավելի թիվ:"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Վերամուտքագրեք ճիշտ PUK ծածկագիրը: Կրկնվող փորձերը ընդմիշտ կկասեցնեն SIM քարտը:"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN ծածկագրերը չեն համընկնում"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Չափից շատ սխեմայի փորձեր"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Ապակողպելու համար` մուտք գործեք ձեր Google հաշվով:"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Օգտանուն (էլփոստ)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Գաղտնաբառը"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Մուտք գործել"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Սխալ օգտանուն կամ գաղտնաբառ:"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Մոռացե՞լ եք ձեր օգտանունը կամ գաղտնաբառը:\nԱյցելեք "<b>"google.com /accounts/recovery"</b>":"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Հաշիվը ստուգվում է..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Դուք <xliff:g id="NUMBER_0">%d</xliff:g> անգամ սխալ եք մուտքագրել ձեր PIN-ը: \n\nՓորձեք կրկին <xliff:g id="NUMBER_1">%d</xliff:g> վայրկյանից:"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Դուք սխալ եք մուտքագրել ձեր գաղտնաբառը <xliff:g id="NUMBER_0">%d</xliff:g> անգամ: \n\nՓորձեք կրկին <xliff:g id="NUMBER_1">%d</xliff:g> վայրկյանից:"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Դուք <xliff:g id="NUMBER_0">%d</xliff:g> անգամ սխալ եք հավաքել ձեր ապակողպման սխեման: \n\nՓորձեք կրկին <xliff:g id="NUMBER_1">%d</xliff:g> վայրկյանից:"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Դուք <xliff:g id="NUMBER_0">%d</xliff:g> անգամ սխալ փորձ եք արել գրասալիկն ապակողպելու համար: <xliff:g id="NUMBER_1">%d</xliff:g> անգամից ավել անհաջող փորձերից հետո գրասալիկը կվերակարգավորվի գործարանային լռելյայնի, և օգտվողի բոլոր տվյալները կկորեն:"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Դուք <xliff:g id="NUMBER_0">%d</xliff:g> անգամ սխալ փորձ եք արել հեռախոսն ապակողպելու համար: <xliff:g id="NUMBER_1">%d</xliff:g> անգամից ավել անհաջող փորձերից հետո հեռախոսը կվերակարգավորվի գործարանային լռելյայնի, և օգտվողի բոլոր տվյալները կկորեն:"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Դուք <xliff:g id="NUMBER">%d</xliff:g> անգամ սխալ փորձ եք արել գրասալիկն ապակողպելու համար: Գրասալիկն այժմ կվերակարգավորվի գործարանային լռելյայնի:"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Դուք <xliff:g id="NUMBER">%d</xliff:g> անգամ սխալ փորձ եք արել հեռախոսն ապակողպելու համար: Հեռախոսն այժմ կվերակարգավորվի գործարանային լռելյայնի:"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Դուք սխալ եք հավաքել ձեր ապակողպման սխեման <xliff:g id="NUMBER_0">%d</xliff:g> անգամ: Եվս <xliff:g id="NUMBER_1">%d</xliff:g> անհաջող փորձից հետո ձեզանից կպահանջվի ապակողպել ձեր գրասալիկը` օգտագործելով էլփոստի հաշիվ:\n\n Փորձեք կրկին <xliff:g id="NUMBER_2">%d</xliff:g> վայրկյանից:"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Դուք <xliff:g id="NUMBER_0">%d</xliff:g> անգամ սխալ եք հավաքել ձեր ապակողպման նմուշը: <xliff:g id="NUMBER_1">%d</xliff:g> անգամից ավել անհաջող փորձերից հետո ձեզ կառաջարկվի ապակողպել ձեր հեռախոսը` օգտագործելով էլփոստի հաշիվ:\n\n Փորձեք կրկին <xliff:g id="NUMBER_2">%d</xliff:g> վայրկյանից:"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Հեռացնել"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Սխալ SIM PIN կոդի պատճառով պետք է դիմեք ձեր օպերատորին՝ սարքն արգելաբացելու համար:"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ, որից հետո պետք է դիմեք ձեր օպերատորին՝ սարքն արգելաբացելու համար:"</item>
+    <item quantity="other" msgid="2215723361575359486">"SIM PIN կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ:"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-ը հնարավոր չէ օգտագործել: Դիմեք ձեր օպերատորին:"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ՝ մինչև SIM-ի ընդմիշտ արգելափակումը:"</item>
+    <item quantity="other" msgid="5477305226026342036">"SIM PUK կոդը սխալ է: Մնաց <xliff:g id="NUMBER">%d</xliff:g> փորձ՝ մինչև SIM-ի ընդմիշտ արգելափակումը:"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN գործողությունը ձախողվեց:"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK գործողությունը ձախողվեց:"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Կոդն ընդունվեց:"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Նախորդ հետագծի կոճակ"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Հաջորդ հետագծի կոճակ"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Դադարի կոճակ"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Նվագարկման կոճակ"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Դադարի կոճակ"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ծառայություն չկա:"</string>
+</resources>
diff --git a/packages/Keyguard/res/values-in/activitystrings.xml b/packages/Keyguard/res/values-in/activitystrings.xml
deleted file mode 100644
index ec9774d..0000000
--- a/packages/Keyguard/res/values-in/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Tanpa pengamanan"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Sandi"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Pola"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Pilih widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-in/strings.xml b/packages/Keyguard/res/values-in/strings.xml
index 9f731ab..9ea5a29 100644
--- a/packages/Keyguard/res/values-in/strings.xml
+++ b/packages/Keyguard/res/values-in/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ketik kode PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ketik kode PUK dan PIN baru"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kode PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Kode Pin baru"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Ketik kode PIN baru dan PUK SIM"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Kode PUK SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Kode PIN SIM baru"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Sentuh untuk mengetikkan sandi"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ketik sandi untuk membuka kunci"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ketik PIN untuk membuka kunci"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tombol jeda"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Tombol putar"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Tombol hentikan"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Bagus"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Jelek"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Hati"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Buka kunci untuk melanjutkan"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Peluncuran dibatalkan"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Jatuhkan <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> untuk menghapus."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> tidak akan dihapus."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Masukkan kode PIN yang diinginkan"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Konfirmasi kode PIN yang diinginkan"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kartu SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kode PIN salah."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ketik PIN yang terdiri dari 4 sampai 8 angka."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kode PUK harus terdiri dari 8 angka atau lebih."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan kembali kode PUK yang benar. Jika berulang kali gagal, SIM akan dinonaktifkan secara permanen."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah <xliff:g id="NUMBER_0">%d</xliff:g> kali salah menggambar pola pembuka kunci. Setelah <xliff:g id="NUMBER_1">%d</xliff:g> lagi upaya gagal, Anda akan diminta membuka kunci ponsel menggunakan akun email.\n\nCoba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> detik."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Hapus"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Kode PIN SIM salah. Hubungi operator untuk membuka kunci perangkat."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Kode PIN SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum Anda harus menghubungi operator untuk membuka kunci perangkat."</item>
+    <item quantity="other" msgid="2215723361575359486">"Kode PIN SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM tidak dapat digunakan. Hubungi operator Anda."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Kode PUK SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya."</item>
+    <item quantity="other" msgid="5477305226026342036">"Kode PUK SIM salah, sisa <xliff:g id="NUMBER">%d</xliff:g> percobaan sebelum SIM tidak dapat digunakan selamanya."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operasi PIN SIM gagal!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operasi PUK SIM gagal!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kode Diterima!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Tombol lagu sebelumnya"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Tombol lagu berikutnya"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tombol jeda"</string>
diff --git a/packages/Keyguard/res/values-it/activitystrings.xml b/packages/Keyguard/res/values-it/activitystrings.xml
deleted file mode 100644
index 34ad96497..0000000
--- a/packages/Keyguard/res/values-it/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Nessuna sicurezza"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Password"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Sequenza"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN della SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK della SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Scegli widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-it/strings.xml b/packages/Keyguard/res/values-it/strings.xml
index 4eda348..2a481e6 100644
--- a/packages/Keyguard/res/values-it/strings.xml
+++ b/packages/Keyguard/res/values-it/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Inserisci il codice PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Inserisci il PUK e il nuovo codice PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codice PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nuovo codice PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Digita il PUK della SIM e il nuovo codice PIN"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Codice PUK della SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nuovo PIN della SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Tocca per inserire la password"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Inserisci password per sbloccare"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Inserisci PIN per sbloccare"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pulsante Pausa"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Pulsante Riproduci"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Pulsante di arresto"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Mi piace"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Pollice giù"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Cuore"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Sblocca per continuare"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Avvio annullato"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Rilascia <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> per eliminarlo."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> non sarà eliminato."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Inserisci il codice PIN desiderato"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Conferma il codice PIN desiderato"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Sblocco scheda SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Codice PIN errato."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Il PIN deve essere di 4-8 numeri."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Il codice PUK dovrebbe avere almeno otto numeri."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Inserisci di nuovo il codice PUK corretto. Ripetuti tentativi comportano la disattivazione definitiva della scheda SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g> tentativi errati di inserimento della sequenza di sblocco. Dopo altri <xliff:g id="NUMBER_1">%d</xliff:g> tentativi falliti, ti verrà chiesto di sbloccare il telefono con un account email.\n\n Riprova tra <xliff:g id="NUMBER_2">%d</xliff:g> secondi."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Rimuovi"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Codice PIN della SIM errato. Devi contattare l\'operatore per sbloccare il dispositivo."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativo a disposizione, dopodiché dovrai contattare l\'operatore per sbloccare il dispositivo."</item>
+    <item quantity="other" msgid="2215723361575359486">"Codice PIN della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativi a disposizione."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM inutilizzabile. Contatta il tuo operatore."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativo a disposizione prima che la SIM diventi definitivamente inutilizzabile."</item>
+    <item quantity="other" msgid="5477305226026342036">"Codice PUK della SIM errato. Hai ancora <xliff:g id="NUMBER">%d</xliff:g> tentativi a disposizione prima che la SIM diventi definitivamente inutilizzabile."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operazione con PIN della SIM non riuscita."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operazione con PUK della SIM non riuscita."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Codice accettato."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Pulsante traccia precedente"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Pulsante traccia successiva"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pulsante Pausa"</string>
diff --git a/packages/Keyguard/res/values-iw/activitystrings.xml b/packages/Keyguard/res/values-iw/activitystrings.xml
deleted file mode 100644
index 84e351a2..0000000
--- a/packages/Keyguard/res/values-iw/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"ללא אבטחה"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"סיסמה"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"קו ביטול נעילה"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN של SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK של SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"בחר Widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-iw/strings.xml b/packages/Keyguard/res/values-iw/strings.xml
index 8d36309..a6a3192 100644
--- a/packages/Keyguard/res/values-iw/strings.xml
+++ b/packages/Keyguard/res/values-iw/strings.xml
@@ -20,49 +20,50 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"הקלד קוד PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"הקלד את קוד ה-PUK וקוד  ה-PIN החדש"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"קוד PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"קוד PIN חדש"</string>
+    <string name="app_name" msgid="719438068451601849">"מגן מקלדת"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"‏הקלד קוד PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"‏הקלד קוד PUK של כרטיס SIM וקוד PIN חדש"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"‏קוד PUK של כרטיס SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"‏מספר PIN חדש של כרטיס SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"גע כדי להקליד את הסיסמה"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"הקלד סיסמה לביטול הנעילה"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"הקלד קוד PIN לביטול הנעילה"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"קוד PIN שגוי"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"‏הקלד קוד PIN לביטול הנעילה"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"‏קוד PIN שגוי"</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"כדי לבטל את הנעילה, לחץ על \'תפריט\' ולאחר מכן על 0."</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"חרגת ממספר הניסיונות המרבי של זיהוי פרצוף"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"חרגת ממספר הניסיונות המרבי של זיהוי פנים"</string>
     <string name="keyguard_charged" msgid="3272223906073492454">"טעון"</string>
     <string name="keyguard_plugged_in" msgid="8117572000639998388">"טוען, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="keyguard_low_battery" msgid="8143808018719173859">"חבר את המטען."</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"לחץ על \'תפריט\' כדי לבטל את הנעילה."</string>
     <string name="keyguard_network_locked_message" msgid="9169717779058037168">"רשת נעולה"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"אין כרטיס SIM"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"אין כרטיס SIM בטאבלט."</string>
-    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"אין כרטיס SIM בטלפון."</string>
-    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"הכנס כרטיס SIM."</string>
-    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string>
-    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"לא ניתן להשתמש בכרטיס SIM זה."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"כרטיס ה-SIM שלך הושבת לצמיתות.\nפנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string>
-    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"כרטיס ה-SIM נעול."</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"כרטיס SIM נעול באמצעות PUK."</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"מבטל נעילה של כרטיס SIM…"</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d מתוך %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"הוסף Widget."</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"‏אין כרטיס SIM"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"‏אין כרטיס SIM בטאבלט."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"‏אין כרטיס SIM בטלפון."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"‏הכנס כרטיס SIM."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"‏כרטיס ה-SIM חסר או שלא ניתן לקרוא אותו. הכנס כרטיס SIM."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"‏לא ניתן להשתמש בכרטיס SIM זה."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"‏כרטיס ה-SIM שלך הושבת לצמיתות.\nפנה לספק השירות האלחוטי שלך לקבלת כרטיס SIM אחר."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"‏כרטיס ה-SIM נעול."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"‏כרטיס SIM נעול באמצעות PUK."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"‏מבטל נעילה של כרטיס SIM…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"‏%1$s. Widget %2$d מתוך %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"‏הוסף Widget."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ריק"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"אזור ביטול הנעילה הורחב."</string>
     <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"אזור ביטול הנעילה כווץ."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"‏Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
     <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"בוחר משתמשים"</string>
     <string name="keyguard_accessibility_status" msgid="8008264603935930611">"סטטוס"</string>
     <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"מצלמה"</string>
     <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"פקדי מדיה"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"סידור מחדש של Widgets התחיל."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"סידור מחדש של Widgets הסתיים."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> נמחק."</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"‏סידור מחדש של Widgets התחיל."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"‏סידור מחדש של Widgets הסתיים."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"‏Widget ‏<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> נמחק."</string>
     <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"הרחב את אזור ביטול הנעילה."</string>
     <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"ביטול נעילה באמצעות הסטה."</string>
     <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ביטול נעילה באמצעות ציור קו."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ביטול נעילה באמצעות זיהוי פרצוף."</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ביטול נעילה באמצעות מספר PIN."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ביטול נעילה באמצעות זיהוי פנים."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"‏ביטול נעילה באמצעות מספר PIN."</string>
     <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ביטול נעילה באמצעות סיסמה."</string>
     <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"אזור ציור קו."</string>
     <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"אזור הסטה."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"לחצן \'השהה\'"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"לחצן \'הפעל\'"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"לחצן \'הפסק\'"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"אהבתי"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"לא אהבתי"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"לב"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"בטל נעילה כדי להמשיך"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"ההפעלה בוטלה"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"שחרר את <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> למחיקה."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> לא יימחק."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"אבג"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -95,30 +103,29 @@
     <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"שכחת את הקו"</string>
     <string name="kg_wrong_pattern" msgid="1850806070801358830">"קו ביטול נעילה שגוי"</string>
     <string name="kg_wrong_password" msgid="2333281762128113157">"סיסמה שגויה"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"מספר PIN שגוי"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"‏מספר PIN שגוי"</string>
     <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"נסה שוב בעוד <xliff:g id="NUMBER">%d</xliff:g> שניות."</string>
     <string name="kg_pattern_instructions" msgid="398978611683075868">"שרטט את קו ביטול הנעילה"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"הזן מספר PIN ל-SIM"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"הזן מספר PIN"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"‏הזן מספר PIN ל-SIM"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"‏הזן מספר PIN"</string>
     <string name="kg_password_instructions" msgid="5753646556186936819">"הזן את הסיסמה"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"הזן את קוד ה-PIN הרצוי"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"אשר את קוד ה-PIN הרצוי"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"מבטל נעילה של כרטיס SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"קוד PIN שגוי."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"הקלד מספר PIN שאורכו 4 עד 8 ספרות."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"קוד PUK צריך להיות בן 8 ספרות או יותר."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"הזן מחדש את קוד PUK הנכון. ניסיונות חוזרים ישביתו לצמיתות את כרטיס ה-SIM."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"קודי ה-PIN אינם תואמים"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"‏כרטיס ה-SIM מושבת כעת. הזן קוד PUK כדי להמשיך. פנה אל הספק לפרטים."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"‏הזן את קוד ה-PIN הרצוי"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"‏אשר את קוד ה-PIN הרצוי"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"‏מבטל נעילה של כרטיס SIM…"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"‏הקלד מספר PIN שאורכו 4 עד 8 ספרות."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"‏קוד PUK צריך להיות בן 8 ספרות או יותר."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"‏הזן מחדש את קוד PUK הנכון. ניסיונות חוזרים ישביתו לצמיתות את כרטיס ה-SIM."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"‏קודי ה-PIN אינם תואמים"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ניסיונות רבים מדי לשרטוט קו ביטול נעילה."</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"‏כדי לבטל את הנעילה, היכנס באמצעות חשבון Google שלך."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"שם משתמש (דוא\"ל)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"סיסמה"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"היכנס"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"שם משתמש או סיסמה לא חוקיים."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"שכחת את שם המשתמש או הסיסמה?\nבקר בכתובת "<b>"google.com/accounts/recovery"</b></string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"‏שכחת את שם המשתמש או הסיסמה?\nבקר בכתובת "<b>"google.com/accounts/recovery"</b></string>
     <string name="kg_login_checking_password" msgid="1052685197710252395">"בודק חשבון…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"הקלדת מספר PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"‏הקלדת מספר PIN שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
     <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"הקלדת סיסמה שגויה <xliff:g id="NUMBER_0">%d</xliff:g> פעמים.\n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
     <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. \n\nנסה שוב בעוד <xliff:g id="NUMBER_1">%d</xliff:g> שניות."</string>
     <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ביצעת <xliff:g id="NUMBER_0">%d</xliff:g> ניסיונות שגויים לביטול נעילת הטלפון. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, הטאבלט יעבור איפוס לברירת המחדל של היצרן וכל נתוני המשתמש יאבדו."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"שרטטת את קו ביטול הנעילה באופן שגוי <xliff:g id="NUMBER_0">%d</xliff:g> פעמים. לאחר <xliff:g id="NUMBER_1">%d</xliff:g> ניסיונות כושלים נוספים, תתבקש לבטל את נעילת הטלפון באמצעות חשבון דוא\"ל‏.\n\nנסה שוב בעוד <xliff:g id="NUMBER_2">%d</xliff:g> שניות."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"הסר"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"‏מספר PIN שגוי של כרטיס ה-SIM. עליך ליצור כעת קשר עם הספק על מנת לבטל את נעילת המכשיר."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"‏מספר PIN שגוי של כרטיס ה-SIM. נותר לך ניסיון <xliff:g id="NUMBER">%d</xliff:g> נוסף לפני שיהיה עליך ליצור קשר עם הספק על מנת לבטל את נעילת המכשיר."</item>
+    <item quantity="other" msgid="2215723361575359486">"‏מספר PIN שגוי של כרטיס ה-SIM. נותרו לך <xliff:g id="NUMBER">%d</xliff:g> ניסיונות נוספים."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"‏לא ניתן להשתמש בכרטיס ה-SIM. צור קשר עם הספק."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"‏קוד PUK שגוי של כרטיס ה-SIM. נותר לך ניסיון <xliff:g id="NUMBER">%d</xliff:g> נוסף לפני שכרטיס ה-SIM ינעל לצמיתות."</item>
+    <item quantity="other" msgid="5477305226026342036">"‏קוד PUK שגוי של כרטיס ה-SIM. נותרו לך <xliff:g id="NUMBER">%d</xliff:g> ניסיונות נוספים לפני שכרטיס ה-SIM ינעל לצמיתות."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"‏פעולת מספר ה-PIN של כרטיס ה-SIM נכשלה!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"‏פעולת קוד ה-PUK של כרטיס ה-SIM נכשלה!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"הקוד התקבל!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"לחצן \'הרצועה הקודמת\'"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"לחצן \'הרצועה הבאה\'"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"לחצן \'השהה\'"</string>
diff --git a/packages/Keyguard/res/values-ja/activitystrings.xml b/packages/Keyguard/res/values-ja/activitystrings.xml
deleted file mode 100644
index b0e77f1..0000000
--- a/packages/Keyguard/res/values-ja/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"セキュリティなし"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"パスワード"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"パターン"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"ウィジェットを選択..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ja/strings.xml b/packages/Keyguard/res/values-ja/strings.xml
index 92e308b..b683a9d 100644
--- a/packages/Keyguard/res/values-ja/strings.xml
+++ b/packages/Keyguard/res/values-ja/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"キーガード"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PINコードを入力"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUKと新しいPINコードを入力"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUKコード"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"新しいPINコード"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"PUKと新しいPINコードを入力"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUKコード"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"新しいSIM PINコード"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"タップしてパスワードを入力"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"ロックを解除するにはパスワードを入力"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"ロックを解除するにはPINを入力"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"一時停止ボタン"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"再生ボタン"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"停止ボタン"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"グッド"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"イマイチ"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"ハート"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"続行するにはロックを解除してください"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"起動をキャンセルしました"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"削除するには<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>をドロップしてください。"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>は削除されません。"</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"希望のPINコードを入力してください"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"希望のPINコードを確認してください"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIMカードのロック解除中…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PINコードが正しくありません。"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"PINは4～8桁の数字で入力してください。"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUKコードは8桁以上の番号です。"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"正しいPUKコードを再入力してください。誤入力を繰り返すと、SIMが永久に無効になるおそれがあります。"</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ロック解除パターンの入力を<xliff:g id="NUMBER_0">%d</xliff:g>回間違えました。あと<xliff:g id="NUMBER_1">%d</xliff:g>回間違えると、携帯端末のロック解除にメールアカウントが必要になります。\n\n<xliff:g id="NUMBER_2">%d</xliff:g>秒後にもう一度お試しください。"</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"削除"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PINコードが無効です。お使いの端末をロック解除するには携帯通信会社にお問い合わせいただく必要があります。"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"SIM PINコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えると、お使いの端末をロック解除するのに携帯通信会社にお問い合わせいただく必要があります。"</item>
+    <item quantity="other" msgid="2215723361575359486">"SIM PINコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIMは使用できません。携帯通信会社にお問い合わせください。"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"SIM PUKコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えるとSIMは完全に使用できなくなります。"</item>
+    <item quantity="other" msgid="5477305226026342036">"SIM PUKコードが無効です。入力できるのはあと<xliff:g id="NUMBER">%d</xliff:g>回です。この回数を超えるとSIMは完全に使用できなくなります。"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN操作に失敗しました。"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK操作に失敗しました。"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"コードが承認されました。"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"前のトラックボタン"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"次のトラックボタン"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"一時停止ボタン"</string>
diff --git a/packages/Keyguard/res/values-ka-rGE/strings.xml b/packages/Keyguard/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..4414096
--- /dev/null
+++ b/packages/Keyguard/res/values-ka-rGE/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"აკრიფეთ PIN კოდი"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"დაბეჭდეთ SIM-ის PUK კოდი და ახალი PIN კოდი"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK კოდი"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"SIM-ის ახალი PIN-ის კოდი"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384">"შეეხეთ "<font size="17">"-ს პაროლის"</font>" დასაბეჭდად."</string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"განსაბლოკად აკრიფეთ პაროლი"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"განსაბლოკად აკრიფეთ PIN კოდი"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"არასწორი PIN კოდი."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"განბლოკვისათვის დააჭირეთ მენიუს და შემდეგ 0-ს."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"სახის ამოცნობით განბლოკვის მცდელობამ დაშვებულ რაოდენობას გადააჭარბა"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"დამუხტულია"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"მიმდინარეობს დამუხტვა (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"შეაერთეთ დამტენი."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"განბლოკვისთვის დააჭირეთ მენიუს."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"ქსელი ჩაკეტილია"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM ბარათი არ არის"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ტაბლეტში არ დევს SIM ბარათი."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"არ არის SIM ბარათი ტელეფონში."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"ჩადეთ SIM ბარათი."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM ბარათი არ არის ან არ იკითხება. ჩადეთ SIM ბარათი."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"არამოხმარებადი SIM ბარათი."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"თქვენი SIM ბარათი გამუდმებით გამორთული იყო.\n დაუკავშირდით თქვენი უკაბელო სერვისის პროვაიდერს სხვა SIM ბარათისთვის."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM ბარათი დაბლოკილია."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM ბარათი დაბლოკილია PUK კოდით."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"მიმდინარეობს SIM ბარათის განბლოკვა…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ვიჯეტი %2$d of %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"ვიჯეტის დამატება"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ცარიელი"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"განბლოკვის სივრცე გაშლილია."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"განბლოკვის სივრცე ჩაკეცილია."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ვიჯეტი."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"მომხმარებლის ამომრჩეველი"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"სტატუსი"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"კამერა"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"მედიის მართვის ელემენტები"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"დაიწყო ვიჯეტის ხელახლა განლაგება."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"ვიჯეტების გადახარისხება დასრულებულია."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"ვიჯეტი <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> წაიშალა."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"განბლოკვის სივრცის გაშლა."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"გასრიალებით განბლოკვა"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"განბლოკვა ნიმუშით."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"განბლოკვა სახით"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"განბლოკვა Pin-ით."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"პაროლის განბლოკვა"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ნიმუშების სივრცე."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"გადასრიალების სივრცე."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"წინა ჩანაწერის ღილაკი"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"შემდეგი ჩანაწერის ღილაკი"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"პაუზის ღილაკი"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"დაკვრის ღილაკი"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stop ღილაკი"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"ზევით აწეული ცერი"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"ქვევით დახრილი ცერი"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"გული"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"განბლოკეთ გასაგრძელებლად"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"გამოძახება გაუქმდა"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"ჩააგდეთ <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> წასაშლელად."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> არ წაიშლება."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"გაუქმება"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"წაშლა"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"დასრულდა"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"რეჟიმის შეცვლა"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift-"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"შეყვანა"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"განბლოკვა"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"კამერა"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"უხმო"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"ხმის ჩართვა"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ძიება"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"გაასრიალეთ ზემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"გაასრიალეთ ქვემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"გაასრიალეთ მარცხნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"გაასრიალეთ მარჯვნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
+    <string name="user_switched" msgid="3768006783166984410">"ამჟამინდელი მომხმარებელი <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"გადაუდებელი დახმარების ზარი"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"დაგავიწყდათ ნიმუში"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"არასწორი ნიმუში"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"არასწორი პაროლი"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"არასწორი PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"კიდევ სცადეთ <xliff:g id="NUMBER">%d</xliff:g> წამში."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"დახატეთ თქვენი ნიმუში."</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN-ის შეყვანა"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"შეიყვანეთ PIN"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"პაროლის შეყვანა"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM ამჟამად დეაქტივირებულია. გასაგრძელებლად შეიყვანეთ PUK კოდი. დეტალებისთვის მიმართეთ მობილურ ოპერატორს."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"სასურველი PIN კოდის შეყვანა"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"სასურველი PIN კოდის დადასტურება"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM ბარათის განბლოკვა…"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"აკრიფეთ PIN, რომელიც შედგება 4-დან 8 ციფრამდე."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK კოდი უნდა იყოს რვა ან მეტი ციფრისგან შემდგარი."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"ხელახლა შეიყვანეთ სწორი PUK კოდი. რამდენიმე წარუმატებელი მცდელობა გამოიწვევს SIM ბარათის დაბლოკვას."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN კოდები არ ემთხვევა"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ნახატი ნიმუშის ძალიან ბევრი მცდელობა"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"განბლოკვისთვის გაიარეთ ავტორიზაცია თქვენი Google  ანგარიშით."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"მომხმარებლის სახელი (ელფოსტა)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"პაროლი"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"შესვლა"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"არასწორი სახელი, ან პაროლი."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"დაგავიწყდათ მომხმარებლის სახელი და პაროლი?\nეწვიეთ "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"მიმდინარეობს ანგარიშის შემოწმება…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"თქვენ <xliff:g id="NUMBER_0">%d</xliff:g>-ჯერ არასწორად შეიყვანეთ PIN კოდი. \n\nსცადეთ ხელახლა <xliff:g id="NUMBER_1">%d</xliff:g> წამში."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"თქვენ <xliff:g id="NUMBER_0">%d</xliff:g>-ჯერ არასწორად დაბეჭდეთ თქვენი პაროლი. \n\nხელახლა სცადეთ <xliff:g id="NUMBER_1">%d</xliff:g> წამში."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"თქვენ <xliff:g id="NUMBER_0">%d</xliff:g>-ჯერ დახატეთ განბლოკვის ნიმუში. \n\nსცადეთ ხელახლა <xliff:g id="NUMBER_1">%d</xliff:g> წამში."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"თქვენ არასწორად სცადეთ ტაბლეტის განბლოკვა <xliff:g id="NUMBER_0">%d</xliff:g>-ჯერ. კიდევ <xliff:g id="NUMBER_1">%d</xliff:g> წარუმატებელი ცდის შემდეგ ტაბლეტზე დაყენდება საწყისი, ქარხნული პარამეტრები და მომხმარებლის ყველა მონაცემი დაიკარგება."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"თქვენ არასწორად სცადეთ ტელეფონის განბლოკვა <xliff:g id="NUMBER_0">%d</xliff:g>-ჯერ. კიდევ <xliff:g id="NUMBER_1">%d</xliff:g> წარუმატებელი ცდის შემდეგ ტელეფონზე დაყენდება საწყისი, ქარხნული პარამეტრები და მომხმარებლის ყველა მონაცემი დაიკარგება."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"თქვენ არასწორად სცადეთ ტაბლეტის განბლოკვა <xliff:g id="NUMBER">%d</xliff:g>-ჯერ. ტაბლეტზე დაყენდება საწყისი, ქარხნული პარამეტრები და მომხმარებლის ყველა მონაცემი დაიკარგება."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"თქვენ <xliff:g id="NUMBER">%d</xliff:g>-ჯერ არასწორად სცადეთ ტელეფონის განბლოკვა. ამიტომ ტელეფონზე დადგება საწყისი, ქარხნული პარამეტრები."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"თქვენ არასწორად დახატეთ თქვენი განბლოკვის ნიმუში <xliff:g id="NUMBER_0">%d</xliff:g> ჯერ. კიდევ <xliff:g id="NUMBER_1">%d</xliff:g> წარუმატებელი ცდის შემდეგ მოგთხოვთ ტაბლეტის განბლოკვას ელფოსტის ანგარიშის გამოყენებით.\n\n ხელახლა სცადეთ <xliff:g id="NUMBER_2">%d</xliff:g> წამში."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"თქვენ არასწორად დახატეთ თქვენი განბლოკვის ნიმუში <xliff:g id="NUMBER_0">%d</xliff:g>-ჯერ. კიდევ <xliff:g id="NUMBER_1">%d</xliff:g> წარუმატებელი ცდის შემდეგ, დაგჭირდებათ თქვენი ტელეფონის განბლოკვა ელფოსტის ანგარიშის გამოყენებით.\n\n ხელახლა სცადეთ <xliff:g id="NUMBER_2">%d</xliff:g> წამში."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"ამოშლა"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM-ის არასწორი PIN კოდი. თქვენ ახლა მოგიწევთ მოწყობილობის განსაბლოკად მიმართოთ ოპერატორს."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"SIM-ის არასწორი PIN კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ მოგიწევთ თქვენი მოწყობილობის განსაბლოკად ოპერატორთან დაკავშირება."</item>
+    <item quantity="other" msgid="2215723361575359486">"SIM-ის არასწორი PIN კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM გამოუსადეგარია. დაუკავშირდით ოპერატორს."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"არასწორი SIM PUK კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდებოდეს."</item>
+    <item quantity="other" msgid="5477305226026342036">"არასწორი SIM PUK კოდი. თქვენ დაგრჩათ <xliff:g id="NUMBER">%d</xliff:g> მცდელობა, სანამ SIM სამუდამოდ გამოუსადეგარი გახდებოდეს."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN ოპერაცია ჩაიშალა!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK ოპერაცია ჩაიშალა!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"კოდი მიღებულია!"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"წინა ჩანაწერზე გადასვლის ღილაკი"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"შემდეგი ჩანაწერის ღილაკი"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"პაუზის ღილაკი"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"დაკვრის ღილაკი"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"შეჩერების ღილაკი"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"არ არის სერვისი."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-km-rKH/strings.xml b/packages/Keyguard/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..a2e54a7
--- /dev/null
+++ b/packages/Keyguard/res/values-km-rKH/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"ការពារ​គ្រាប់ចុច"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"បញ្ចូល​កូដ PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"បញ្ចូល​លេខ​កូដ PUK  និង​​ PIN ថ្មី​របស់​ស៊ីម"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"លេខ​កូដ PUK ស៊ីម"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"លេខ​កូដ PIN ស៊ីម​ថ្មី"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"ប៉ះ ដើម្បី​បញ្ចូល​ពាក្យ​សម្ងាត់"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"បញ្ចូល​ពាក្យ​សម្ងាត់​ ​ដើម្បី​ដោះ​សោ"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"បញ្ចូល​កូដ PIN ដើម្បី​ដោះ​សោ"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"កូដ PIN មិន​ត្រឹមត្រូវ។"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"ដើម្បី​ដោះ​សោ​​ ចុច​ម៉ឺនុយ​ បន្ទាប់មក 0 ។"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"បាន​លើស​ការ​ព្យាយាម​ដោះ​សោ​តាម​ទម្រង់​មុខ"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"បាន​បញ្ចូល​​ពេញ"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"បញ្ចូល​ថ្ម <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"ភ្ជាប់​ឧបករណ៍​បញ្ចូល​ថ្ម​។"</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"ចុច​ម៉ឺនុយ ដើម្បី​ដោះ​សោ។"</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"បណ្ដាញ​ជាប់​សោ"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"គ្មាន​ស៊ី​ម​កាត"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"គ្មាន​ស៊ី​ម​កាត​នៅ​ក្នុង​កុំព្យូទ័រ​បន្ទះ​។"</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"គ្មាន​ស៊ីមកាត​ក្នុង​ទូរស័ព្ទ។"</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"បញ្ចូល​​​ស៊ី​ម​កាត​។"</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"បាត់​ស៊ីមកាត ឬ​មិន​អាច​អាន។ បញ្ចូល​ស៊ីម​កាត។"</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"ស៊ីម​កាត​មិន​អាច​ប្រើ​បាន។"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"បាន​បិទ​ស៊ីម​កាត​របស់​អ្នក​ជា​អចិន្ត្រៃយ៍។\n ទាក់ទង​​ក្រុមហ៊ុន​ផ្ដល់​សេវាកម្ម​ឥត​ខ្សែ​សម្រាប់​ស៊ីម​កាត​ផ្សេង។"</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ស៊ីម​កាត​​ជាប់​សោ។"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ស៊ីម​កាត​ជាប់​កូដ​​ PUK ។"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"កំពុង​ដោះ​សោ​ស៊ីម​កាត..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ធាតុ​ក្រាហ្វិក %2$d នៃ %3$d ។"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"បន្ថែម​ធាតុ​ក្រាហ្វិក​។"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ទទេ"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"បាន​ពង្រីក​ផ្ទៃ​ដោះ​សោ។"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"បាន​បង្រួម​ផ្ទៃ​ដោះ​សោ។"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ធាតុ​ក្រាហ្វិក។"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"ឧបករណ៍​ជ្រើស​អ្នក​ប្រើ"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"ស្ថានភាព"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"ម៉ាស៊ីន​ថត"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"ពិនិត្យ​មេឌៀ"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"បាន​ចាប់ផ្ដើម​តម្រៀប​ធាតុ​ក្រាហ្វិក​ឡើងវិញ។"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"បាន​បញ្ចប់​ការ​បង្ហាញ​ធាតុ​ក្រាហ្វិក។"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"បាន​លុប​ធាតុ​ក្រាហ្វិក <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ។"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"ពង្រីក​តំបន់​ដោះ​សោ។"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"រុញ​ដោះ​សោ។"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"លំនាំ​ដោះ​សោ​។"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ដោះ​សោ​តាម​​ទម្រង់​មុខ។"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"កូដ PIN ដោះ​សោ។"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ពាក្យ​សម្ងាត់​ដោះ​សោ​។"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ផ្ទៃ​លំនាំ។"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ផ្ទៃ​រុញ។"</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"ប៊ូតុង​បទ​មុន"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"ប៊ូតុង​បទ​បន្ទាប់"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"ប៊ូតុង​ផ្អាក"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"ប៊ូតុង​ចាក់"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"ប៊ូតុង​បញ្ឈប់"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"មេដៃ​ឡើង"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"មេដៃ​ចុះ"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"បេះដូង"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"ដោះ​សោ ​ដើម្បី​បន្ត"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"បាន​បោះបង់​ការ​ចាប់ផ្ដើម"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"ទម្លាក់ <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ដើម្បី​លុប។"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> នឹង​មិន​ត្រូវ​បាន​លុប​។"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"បោះ​បង់"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"លុប"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"រួចរាល់"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ប្ដូរ​របៀប"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"ដោះ​​សោ"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"ម៉ាស៊ីន​ថត"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"ស្ងាត់"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"បើក​សំឡេង"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ស្វែងរក"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"រុញ​ឡើង​លើ​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"រុញ​ចុះក្រោម​សម្រាប់ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"រុញ​ទៅ​ឆ្វេង​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"រុញ​​ទៅ​ស្ដាំ​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
+    <string name="user_switched" msgid="3768006783166984410">"អ្នក​ប្រើ​បច្ចុប្បន្ន <xliff:g id="NAME">%1$s</xliff:g> ។"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"ការ​ហៅ​ពេល​អាសន្ន"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ភ្លេច​​លំនាំ"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"លំនាំ​មិន​ត្រឹមត្រូវ"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"ពាក្យ​សម្ងាត់​មិន​ត្រឹមត្រូវ"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"កូដ PIN មិន​ត្រឹមត្រូវ"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"ព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER">%d</xliff:g> វិនាទី។"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"គូរ​លំនាំ​របស់​អ្នក"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"បញ្ចូល​កូដ PIN ស៊ីម​កាត"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"បញ្ចូល​​កូដ PIN"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"បញ្ចូល​ពាក្យ​សម្ងាត់"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"ឥឡូវ​ស៊ីមកាត​ត្រូវ​បាន​បិទ។ បញ្ចូល​កូដ PUK ដើម្បី​បន្ត។ ចំពោះ​ព័ត៌មាន​លម្អិត​ទាក់ទង​ក្រុមហ៊ុន​បញ្ជូន​របស់​អ្នក។"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"បញ្ចូល​កូដ PIN ដែល​ចង់​បាន"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"បញ្ជាក់​កូដ PIN ដែល​ចង់​បាន"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"កំពុង​ដោះ​សោ​​ស៊ីម​កាត..."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"បញ្ចូល​កូដ PIN ដែល​មាន​ពី ៤ ដល់ ៨ លេខ។"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"កូដ PUK គួរ​តែ​មាន​​ ៨ លេខ ឬ​​ច្រើន​ជាង​នេះ។"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"បញ្ចូល​កូដ PUK ម្ដង​ទៀត។ ការ​ព្យាយាម​ដដែល​ច្រើន​ដឹង​នឹង​បិទ​ស៊ីម​កាត​ជា​អចិន្ត្រៃយ៍។"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"កូដ PIN មិន​ដូច​គ្នា"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ព្យាយាម​លំនាំ​ច្រើន​ពេក"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"ដើម្បី​ដោះ​សោ ចូល​ក្នុង​គណនី Google ។"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"ឈ្មោះ​អ្នក​ប្រើ (អ៊ី​ម៉ែ​ល​)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"ពាក្យសម្ងាត់"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"ចូល"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"ឈ្មោះ​អ្នកប្រើ ឬ​ពាក្យ​សម្ងាត់​មិន​ត្រឹមត្រូវ។"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ភ្លេច​ឈ្មោះ​អ្នកប្រើ ឬ​ពាក្យ​សម្ងាត់​របស់​អ្នក?\nមើល "<b>"google.com/accounts/recovery"</b>" ។"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"កំពុង​ពិនិត្យ​មើល​គណនី..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"អ្នក​បាន​បញ្ចូល​កូដ PIN របស់​អ្នក​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%d</xliff:g> ដង។\n\n ព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_1">%d</xliff:g> វិនាទី។"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"អ្នក​បាន​បញ្ចូល​ពាក្យ​សម្ងាត់​មិន​ត្រឹមត្រូវ <xliff:g id="NUMBER_0">%d</xliff:g> ដង។\n\nព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_1">%d</xliff:g> វិនាទី។"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"អ្នក​បាន​​គូរ​លំនាំ​ដោះ​សោ​របស់​អ្នក​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%d</xliff:g> ដង។\n\nព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_1">%d</xliff:g> វិនាទី។"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"អ្នក​បាន​ព្យាយាម​ដោះ​សោ​​កុំព្យូទ័រ​បន្ទះ​​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%d</xliff:g> ដង។ បន្ទាប់​ពី​ការ​ព្យាយាម​មិន​ជោគជ័យ​​ច្រើន​ជាង <xliff:g id="NUMBER_1">%d</xliff:g> ដង កុំព្យូទ័រ​បន្ទះ​​នឹង​ត្រូវ​បាន​កំណត់​ទៅ​លំនាំដើម​ដូច​ចេញ​ពី​រោងចក្រ ហើយ​ទិន្នន័យ​អ្នកប្រើ​នឹង​បាត់បង់។"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"អ្នក​បាន​ព្យាយាម​ដោះ​សោ​ទូរស័ព្ទ​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%d</xliff:g> ដង។ បន្ទាប់​ពី​ការ​ព្យាយាម​មិន​ជោគជ័យ​​ច្រើន​ជាង <xliff:g id="NUMBER_1">%d</xliff:g> ដង ទូរស័ព្ទ​នឹង​ត្រូវ​បាន​កំណត់​ទៅ​លំនាំដើម​ដូច​ចេញ​ពី​រោងចក្រ ហើយ​ទិន្នន័យ​អ្នកប្រើ​នឹង​បាត់បង់។"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"អ្នក​បាន​ព្យាយាម​ដោះ​សោ​កុំព្យូទ័រ​បន្ទះ​មិន​ត្រឹមត្រូវ​ចំនួន​ <xliff:g id="NUMBER">%d</xliff:g> ដង។ កុំព្យូទ័រ​បន្ទះ​នឹង​ត្រូវ​បាន​កំណត់​ទៅ​លំនាំដើម​ដូច​ចេញ​ពី​រោងចក្រ"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"អ្នក​បាន​ព្យាយាម​ដោះ​សោ​ទូរស័ព្ទ​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER">%d</xliff:g> ដង។ ឥឡូវ​ទូរស័ព្ទ​នឹង​កំណត់​ទៅ​លំនាំ​ដើម​ដូច​ចេញ​ពី​រោងចក្រ។"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"អ្នក​បាន​គូរ​លំនាំ​ដោះ​សោ​មិន​ត្រឹមត្រូវ <xliff:g id="NUMBER_0">%d</xliff:g> ដង។ បន្ទាប់​ពី​ការ​ព្យាយាម <xliff:g id="NUMBER_1">%d</xliff:g> ដង​មិន​ជោគជ័យ អ្នក​នឹង​ត្រូវ​បាន​ស្នើ​ឲ្យ​ដោះ​សោ​កុំព្យូទ័រ​បន្ទះ​របស់​អ្នក ដោយ​ប្រើ​គណនី​អ៊ីមែល។\n\n ព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_2">%d</xliff:g> វិនាទី។"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"អ្នក​បាន​គូរ​លំនាំ​ដោះ​​សោ​របស់​អ្នក​មិន​ត្រឹមត្រូវ​ចំនួន <xliff:g id="NUMBER_0">%d</xliff:g> ដង។ បន្ទាប់​ពី​ការ​ព្យាយាម​មិន​ជោគជ័យ​​ច្រើនជាង <xliff:g id="NUMBER_1">%d</xliff:g> ដង អ្នក​នឹង​ត្រូវ​បាន​​ស្នើ​ឲ្យ​ដោះ​សោ​ទូរស័ព្ទ​របស់​អ្នក​ដោយ​ប្រើ​គណនី​អ៊ីមែល។\n\n ព្យាយាម​ម្ដង​ទៀត​ក្នុង​រយៈ​ពេល <xliff:g id="NUMBER_2">%d</xliff:g> វិនាទី។"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"លុប​ចេញ"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"លេខ​កូដ PIN ស៊ីម​មិន​ត្រឹមត្រូវ អ្នក​ត្រូវ​ទាក់ទង​ក្រុមហ៊ុន​បញ្ជូន​របស់​អ្នក​ឥឡូវ​នេះ ដើម្បី​ដោះ​សោ​ឧបករណ៍​របស់​អ្នក។"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"លេខ​កូដ PIN ស៊ីម​មិន​​ត្រឹមត្រូវ​, អ្នក​មាន <xliff:g id="NUMBER">%d</xliff:g> ការ​ព្យាយាម​ដែល​នៅសល់​មុន​ពេល​អ្នក​ត្រូវ​​ទាក់ទង​ក្រុម​ហ៊ុន​​​បញ្ជូន​របស់​អ្នក​​ ដើម្បី​​​ដោះ​សោ​ឧបករណ៍​របស់​អ្នក​។"</item>
+    <item quantity="other" msgid="2215723361575359486">"លេខ​កូដ​ PIN ស៊ីម​មិន​ត្រឹមត្រូវ​, អ្នក​មាន <xliff:g id="NUMBER">%d</xliff:g> ការ​ព្យាយាម​ដែល​នៅ​​សល់​។"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ស៊ីម​មិន​អាច​ប្រើ​បាន។ ទាក់ទង​ក្រុមហ៊ុន​បញ្ជូន​របស់​អ្នក។"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"លេខ​កូដ PUK ស៊ីម​មិន​ត្រឹមត្រូវ, អ្នក​មាន <xliff:g id="NUMBER">%d</xliff:g> ការ​ព្យាយាម​ដែល​នៅ​សល់ មុន​ពេល​ស៊ីម​​ក្លាយ​ជា​មិន​អាច​ប្រើ​បាន​ជា​អចិន្ត្រៃយ៍​។"</item>
+    <item quantity="other" msgid="5477305226026342036">"លេខ​កូដ PUK ស៊ីម​មិន​ត្រឹមត្រូវ, អ្នក​មាន <xliff:g id="NUMBER">%d</xliff:g> ការ​ព្យាយាម​ដែល​នៅ​សល់ មុន​ពេល​ស៊ីម​​ក្លាយ​ជា​មិន​អាច​ប្រើ​បាន​ជា​អចិន្ត្រៃយ៍​។"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"បាន​បរាជ័យ​ក្នុង​ការ​ប្រតិបត្តិ​លេខ​កូដ PIN ស៊ីម!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"បាន​បរាជ័យ​ក្នុង​ការ​ប្រតិបត្តិ​​លេខ​កូដ PUK ស៊ីម!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"បាន​ទទួល​យក​លេខ​កូដ​!"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"ប៊ូតុង​បទ​មុន"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"ប៊ូតុង​បទ​បន្ទាប់"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"ប៊ូតុង​ផ្អាក"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"ប៊ូតុង​ចាក់"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"ប៊ូតុង​បញ្ឈប់"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"គ្មាន​សេវា​។"</string>
+</resources>
diff --git a/packages/Keyguard/res/values-ko/activitystrings.xml b/packages/Keyguard/res/values-ko/activitystrings.xml
deleted file mode 100644
index 3aab225..0000000
--- a/packages/Keyguard/res/values-ko/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"보안 사용 안함"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"비밀번호"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"패턴"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"위젯 선택..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ko/strings.xml b/packages/Keyguard/res/values-ko/strings.xml
index dfac106..cde2b1c 100644
--- a/packages/Keyguard/res/values-ko/strings.xml
+++ b/packages/Keyguard/res/values-ko/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"키가드"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN 코드 입력"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK 및 새 PIN 코드 입력"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 코드"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"새 PIN 코드"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"SIM PUK 및 새 PIN 코드 입력"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK 코드"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"새 SIM PIN 코드"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"비밀번호를 입력하려면 터치"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"잠금 해제하려면 비밀번호 입력"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"잠금을 해제하려면 PIN 입력"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"일시중지 버튼"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"재생 버튼"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"중지 버튼"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"좋아요"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"싫어요"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"하트"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"계속하려면 잠금해제합니다."</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"실행 취소됨"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"삭제하려면 <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>을(를) 드롭합니다."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>은(는) 삭제되지 않습니다."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"원하는 PIN 코드 입력"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"원하는 PIN 코드 확인"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM 카드 잠금해제 중..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 코드가 잘못되었습니다."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4~8자리 숫자로 된 PIN을 입력하세요."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 코드는 8자리 이상의 숫자여야 합니다."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"올바른 PUK 코드를 다시 입력하세요. 입력을 반복해서 시도하면 SIM을 영구적으로 사용할 수 없게 됩니다."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"잠금해제 패턴을 <xliff:g id="NUMBER_0">%d</xliff:g>회 잘못 그렸습니다. <xliff:g id="NUMBER_1">%d</xliff:g>회 더 실패하면 이메일 계정을 사용하여 휴대전화를 잠금해제해야 합니다.\n\n <xliff:g id="NUMBER_2">%d</xliff:g>초 후에 다시 시도해 주세요."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"삭제"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PIN 코드가 잘못되었습니다. 이동통신사에 문의하여 기기를 잠금 해제해야 합니다."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"SIM PIN 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 이동통신사에 문의하여 기기를 잠금 해제해야 합니다."</item>
+    <item quantity="other" msgid="2215723361575359486">"SIM PIN 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>번의 기회가 남았습니다."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM을 사용할 수 없습니다. 이동통신사에 문의하세요."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"SIM PUK 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 SIM을 완전히 사용할 수 없습니다."</item>
+    <item quantity="other" msgid="5477305226026342036">"SIM PUK 코드가 잘못되었습니다. <xliff:g id="NUMBER">%d</xliff:g>회 이상 실패할 경우 SIM을 완전히 사용할 수 없습니다."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN 작업이 실패했습니다."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK 작업이 실패했습니다."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"코드 승인 완료"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"이전 트랙 버튼"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"다음 트랙 버튼"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"일시중지 버튼"</string>
diff --git a/packages/Keyguard/res/values-lo-rLA/strings.xml b/packages/Keyguard/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..0571768
--- /dev/null
+++ b/packages/Keyguard/res/values-lo-rLA/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"ພິມລະຫັດ PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"ປະເພດ PUK ຂອງ SIM ແລະລະຫັດ PIN ໃໝ່"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"ລະຫັດ PUK ຂອງ SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"ລະຫັດ PIN ໃໝ່ຂອງ SIM"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"ແຕະເພື່ອພິມລະຫັດຜ່ານ"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"ພິມລະຫັດເພື່ອປົດລັອກ"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"ພິມລະຫັດ PIN ເພື່ອປົດລັອກ"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"ລະຫັດ PIN ບໍ່ຖືກຕ້ອງ."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"ເພື່ອປົດລັອກ, ໃຫ້ກົດເມນູ ແລ້ວກົດ 0."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"ຄວາມພະຍາຍາມປົດລັອກດ້ວຍໜ້ານັ້ນ ເກີນຈຳນວນທີ່ກຳນົດແລ້ວ"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"ສາກເຕັມແລ້ວ"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"ກຳລັງສາກ, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"ເຊື່ອມຕໍ່ອຸປະກອນສາກຂອງທ່ານ."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"ກົດເມນູເພື່ອປົດລັອກ."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"ເຄືອຂ່າຍຖືກລັອກ"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"ບໍ່ມີຊິມກາດ"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ບໍ່ມີຊິມກາດໃນແທັບເລັດ."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"ບໍ່ມີຊິມກາດຢູ່ໃນໂທລະສັບ."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"ໃສ່ SIM card."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"ບໍ່ພົບເຫັນຊິມກາດ ຫຼືບໍ່ສາມາດອ່ານຊິມກາດໄດ້. ກະລຸນາໃສ່ຊິມກາດໃໝ່."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM card ບໍ່ສາມາດໃຊ້ໄດ້."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM card ຂອງທ່ານຖືກປິດການນຳໃຊ້ຢ່າງຖາວອນແລ້ວ.\n ຕິດຕໍ່ຜູ່ໃຫ້ບໍລິການລະບົບຂອງທ່ານເພື່ອຂໍ SIM card ໃໝ່."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ຊິມກາດຖືກລັອກ."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ຊິມກາດຖືກລັອກດ້ວຍລະຫັດ PUK."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ກຳລັງປົດລັອກຊິມກາດ..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. ວິດເຈັດ %2$d ຈາກທັງໝົດ %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"ເພີ່ມວິດເຈັດ"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"ຫວ່າງເປົ່າ"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"ຂະຫຍາຍພື້ນທີ່ປົດລັອກແລ້ວ."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"ຫຍໍ້ພື້ນທີ່ປົດລັອກແລ້ວ."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ວິດເຈັດ."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"ໂຕເລືອກຂອງຜູ່ໃຊ້"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"ສະຖານະ"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"ກ້ອງ"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"ການຄວບຄຸມສື່"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"ການຈັດຮຽງວິເຈັດໃໝ່ເລີ່ມຕົ້ນແລ້ວ."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"ການຈັດຮຽງວິດເຈັດຄືນໃໝ່ສຳເລັດແລ້ວ."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"ລຶບວິດເຈັດ <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ແລ້ວ."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"ຂະຫຍາຍຂອບເຂດປົດລັອກ."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"ການປົດລັອກດ້ວຍການເລື່ອນ."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ປົດລັອກດ້ວຍຮູບແບບ."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"ປົດລັອກດ້ວຍໜ້າ."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ປົດລັອກດ້ວຍ PIN."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ການປົດລັອກດ້ວຍລະຫັດຜ່ານ."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ພື້ນທີ່ຮູບແບບ."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ເລື່ອນພື້ນທີ່."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"ປຸ່ມເພງກ່ອນໜ້າ"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"ປຸ່ມເພງຕໍ່ໄປ"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"ປຸ່ມຢຸດຊົ່ວຄາວ"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"ປຸ່ມຫຼິ້ນ"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"ປຸ່ມຢຸດ"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"ເລື່ອນນິ້ວໂປ້ຂຶ້ນ"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"ເລື່ອນນິ້ວໂປ້ລົງ"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"ຫົວໃຈ"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"ປົດລັອກເພື່ອດຳເນີນການຕໍ່"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"ການເປີດໃຊ້ຖືກຍົກເລີກ"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"ວາງ <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ເພື່ອລຶບ."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ຈະບໍ່ຖືກລຶບອອກ"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"ຍົກເລີກ"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"ລຶບ"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"ແລ້ວໆ"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ປ່ຽນຮູບແບບ"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"ປົດລັອກ"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"ກ້ອງ"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"ປິດສຽງ"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"ເປີດສຽງ"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ຊອກຫາ"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"ເລື່ອນຂຶ້ນເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"ເລື່ອນລົງເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"ເລື່ອນໄປທາງຊ້າຍເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"ເລື່ອນໄປທາງຂວາເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="user_switched" msgid="3768006783166984410">"ຜູ່ໃຊ້ປັດຈຸບັນ <xliff:g id="NAME">%1$s</xliff:g> ."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"ການໂທສຸກເສີນ"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ລືມຮູບແບບປົດລັອກ?"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"ຮູບແບບຜິດ"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"ລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"ລະຫັດ PIN ຜິດ"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"ລອງໃໝ່ໃນອີກ <xliff:g id="NUMBER">%d</xliff:g> ວິນາທີ."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"ແຕ້ມຮູບແບບປົດລັອກຂອງທ່ານ"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"ໃສ່ລະຫັດ PIN ຂອງຊິມ"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"ໃສ່ລະຫັດ PIN"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"ໃສ່ລະຫັດຜ່ານ"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"ຊິມຖືກປິດການນຳໃຊ້ແລ້ວ. ປ້ອນລະຫັດ PUK ເພື່ອດຳເນີນການຕໍ່. ຕິດຕໍ່ຜູ່ໃຫ້ບໍລິການສຳລັບລາຍລະອຽດ."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"ໃສ່ລະຫັດ PIN ທີ່ຕ້ອງການ."</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"ຢືນຢັນລະຫັດ PIN ທີ່ຕ້ອງການ"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"ປົດລັອກ SIM card..."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"ພິມລະຫັດ PIN ຄວາມຍາວ 4 ເຖິງ 8 ໂຕເລກ."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"ລະຫັດ PUK ຄວນມີຢ່າງໜ້ອຍ 8 ໂຕເລກ."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"ປ້ອນລະຫັດ PUK ທີ່ຖືກຕ້ອງຄືນໃໝ່. ການພະຍາຍາມໃສ່ຫຼາຍເທື່ອຈະເຮັດໃຫ້ຊິມກາດໃຊ້ບໍ່ໄດ້ຖາວອນ."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"ລະຫັດ PIN ບໍ່ກົງກັນ"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"ແຕ້ມຮູບແບບປົດລັອກຫຼາຍເກີນໄປ"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"ເພື່ອປົດລັອກ, ເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ Google ຂອງທ່ານ."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"ຊື່ຜູ່ໃຊ້ (ອີເມວ)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"ລະຫັດຜ່ານ"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"ເຂົ້າສູ່ລະບົບ"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"ຊື່ຜູ່ໃຊ້ ຫຼືລະຫັດຜ່ານບໍ່ຖືກຕ້ອງ."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ລືມຊື່ຜູ່ໃຊ້ ຫຼືລະຫັດຜ່ານຂອງທ່ານບໍ່?\nໄປທີ່ "<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"ກຳລັງກວດສອບບັນຊີ..."</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ທ່ານພິມລະຫັດ PIN​ ຂອງທ່ານຜິດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. \n\nກະລຸນາລອງໃໝ່ໃນອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ວິນາທີ."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"ທ່ານພິມລະຫັດຜິດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. \n\nລອງໃໝ່ໃນອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ວິນາທີ."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ທ່ານແຕ້ມຮູບແບບປົດລັອກຂອງທ່ານຜິດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. \n\nກະລຸນາລອງໃໝ່ໃນອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ວິນາທີ."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ທ່ານໄດ້ພະຍາຍາມປົດລັອກແທັບເລັດບໍ່ສຳເລັດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກຄວາມພະຍາຍາມອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ ແທັບເລັດຂອງທ່ານຈະຖືກຕັ້ງ ໃຫ້ກັບໄປໃຊ້ຄ່າເລີ່ມຕົ້ນຈາກໂຮງງານຄືນໃໝ່ ແລະຂໍ້ມູນຜູ່ໃຊ້ທັງໝົດຈະສູນຫາຍໄປ."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ທ່ານໄດ້ພະຍາຍາມປົດລັອກໂທລະສັບບໍ່ສຳເລັດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກຄວາມພະຍາຍາມອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ ໂທລະສັບຂອງທ່ານຈະຖືກຕັ້ງ ໃຫ້ກັບໄປໃຊ້ຄ່າເລີ່ມຕົ້ນຈາກໂຮງງານຄືນໃໝ່ ແລະຂໍ້ມູນຜູ່ໃຊ້ທັງໝົດຈະສູນຫາຍໄປ."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ທ່ານໄດ້ພະຍາຍາມປົດລັອກແທັບເລັດບໍ່ສຳເລັດ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອແລ້ວ. ຕອນນີ້ແທັບເລັດຈະຖືກຕັ້ງໃຫ້ກັບໄປໃຊ້ຄ່າເລີ່ມຕົ້ນຈາກໂຮງງານ."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ທ່ານໄດ້ພະຍາຍາມປົດລັອກໂທລະສັບບໍ່ຖືກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອແລ້ວ. ຕອນນີ້ໂທລະສັບຈະຖືກຣີເຊັດເປັນຄ່າຈາກໂຮງງານ."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ທ່ານແຕ້ມຮູບແບບປົດລັອກຜິດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກແຕ້ມຜິດອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ, ທ່ານຈະຖືກຖາມໃຫ້ປົດລັອກແທັບເລັດຂອງທ່ານ ດ້ວຍການເຂົ້າສູ່ລະບົບໂດຍໃຊ້ອີເມວຂອງທ່ານ.\n\n ກະລຸນາລອງໃໝ່ອີກຄັ້ງໃນອີກ <xliff:g id="NUMBER_2">%d</xliff:g> ວິນາທີ."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ທ່ານແຕ້ມຮູບແບບປົດລັອກຂອງທ່ານຜິດ <xliff:g id="NUMBER_0">%d</xliff:g> ເທື່ອແລ້ວ. ຫຼັງຈາກຄວາມພະຍາຍາມອີກ <xliff:g id="NUMBER_1">%d</xliff:g> ເທື່ອ ທ່ານຈະຖືກຖາມໃຫ້ປົດລັອກໂທລະສັບຂອງທ່ານດ້ວຍບັນຊີອີເມວ.\n\n ລອງໃໝ່ອີກຄັ້ງໃນ <xliff:g id="NUMBER_2">%d</xliff:g> ວິນາທີ."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"ລຶບອອກ"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງທ່ານຕ້ອງຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການ ເພື່ອປົດລັອກອຸປະກອນຂອງທ່ານ."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ທ່ານຈະຕ້ອງຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການຂອງທ່ານ ເພື່ອປົດລັອກອຸປະກອນຂອງທ່ານ."</item>
+    <item quantity="other" msgid="2215723361575359486">"ລະຫັດ PIN ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອ."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM ໃຊ້ບໍ່ໄດ້ແລ້ວ. ກະລຸນາຕິດຕໍ່ຫາຜູ່ໃຫ້ບໍລິການຂອງທ່ານ."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ."</item>
+    <item quantity="other" msgid="5477305226026342036">"ລະຫັດ PUK ຂອງ SIM ບໍ່ຖືກຕ້ອງ, ທ່ານສາມາດລອງໄດ້ອີກ <xliff:g id="NUMBER">%d</xliff:g> ເທື່ອກ່ອນທີ່ SIM ຂອງທ່ານຈະໃຊ້ບໍ່ໄດ້ຢ່າງຖາວອນ."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"PIN ຂອງ SIM ເຮັດວຽກລົ້ມເຫຼວ!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"PUK ຂອງ SIM ເຮັດວຽກລົ້ມເຫຼວ!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"ລະ​ຫັດ​ຖືກຕອບຮັບແລ້ວ!"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"ປຸ່ມເພງກ່ອນໜ້າ"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"ປຸ່ມເພງຕໍ່ໄປ"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"ປຸ່ມຢຸດຊົ່ວຄາວ"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"ປຸ່ມຫຼິ້ນ"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"ປຸ່ມຢຸດ"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"ບໍ່ມີບໍລິການ"</string>
+</resources>
diff --git a/packages/Keyguard/res/values-lt/activitystrings.xml b/packages/Keyguard/res/values-lt/activitystrings.xml
deleted file mode 100644
index 9ec21e4..0000000
--- a/packages/Keyguard/res/values-lt/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Neapsaugota"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN kodas"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Slaptažodis"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Šablonas"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM kortelės PIN kodas"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM kortelės PUK kodas"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Pasirinkite valdiklį..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-lt/strings.xml b/packages/Keyguard/res/values-lt/strings.xml
index 29f62a7..0fd6605 100644
--- a/packages/Keyguard/res/values-lt/strings.xml
+++ b/packages/Keyguard/res/values-lt/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Klaviatūros apsauga"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Įveskite PIN kodą"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Įveskite PUK ir naują PIN kodus"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kodas"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Naujas PIN kodas"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Įveskite SIM kortelės PUK kodą ir naują PIN kodą"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM kortelės PUK kodas"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Naujas SIM kortelės PIN kodas"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Palieskite, kad įves. slaptaž."</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Jei norite atrakinti, įveskite slaptažodį"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Jei norite atrakinti, įveskite PIN kodą"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pristabdymo mygtukas"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Paleidimo mygtukas"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Sustabdymo mygtukas"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Patinka"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Nepatinka"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Širdis"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Jei norite tęsti, atrakinkite"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Paleidimas atšauktas"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Paleiskite „<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>“, kad jį ištrintumėte."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"„<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>“ nebus ištrintas."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Įveskite pageidaujamą PIN kodą"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Patvirtinkite pageidaujamą PIN kodą"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Atrakinama SIM kortelė…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Netinkamas PIN kodas."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Įveskite PIN kodą, sudarytą iš 4–8 skaičių."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodas turėtų būti mažiausiai 8 skaitmenų."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Pakartotinai įveskite tinkamą PUK kodą. Pakartotinai bandant SIM bus neleidžiama visam laikui."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Netinkamai nupiešėte atrakinimo piešinį <xliff:g id="NUMBER_0">%d</xliff:g> k. Po dar <xliff:g id="NUMBER_1">%d</xliff:g> nesėkm. band. būsite paprašyti atrakinti telefoną naudodami „Google“ prisijungimo duomenis.\n\n Bandykite dar kartą po <xliff:g id="NUMBER_2">%d</xliff:g> sek."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Pašalinti"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Netinkamas SIM kortelės PIN kodas. Reikės susisiekti su operatoriumi, kad atrakintų įrenginį."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Netinkamas SIM kortelės PIN kodas. Jums liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui reikės susisiekti su operatoriumi, kad jis atrakintų įrenginį."</item>
+    <item quantity="other" msgid="2215723361575359486">"Netinkamas SIM kortelės PIN kodas, liko <xliff:g id="NUMBER">%d</xliff:g> band."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Nebegalima naudoti SIM kortelės. Susisiekite su operatoriumi."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui visiškai nebegalėsite naudoti SIM kortelės."</item>
+    <item quantity="other" msgid="5477305226026342036">"Netinkamas SIM kortelės PUK kodas. Liko <xliff:g id="NUMBER">%d</xliff:g> band. Paskui visiškai nebegalėsite naudoti SIM kortelės."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Nepavyko atlikti SIM kortelės PIN kodo operacijos."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Nepavyko atlikti SIM kortelės PUK kodo operacijos."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kodas priimtas."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Ankstesnio takelio mygtukas"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Kito takelio mygtukas"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pristabdymo mygtukas"</string>
diff --git a/packages/Keyguard/res/values-lv/activitystrings.xml b/packages/Keyguard/res/values-lv/activitystrings.xml
deleted file mode 100644
index 96807de..0000000
--- a/packages/Keyguard/res/values-lv/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Drošība nav iespējota"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Parole"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Kombinācija"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Izvēlēties logrīku..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-lv/strings.xml b/packages/Keyguard/res/values-lv/strings.xml
index aa13934..2bcde1d 100644
--- a/packages/Keyguard/res/values-lv/strings.xml
+++ b/packages/Keyguard/res/values-lv/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Taustiņslēgs"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ievadiet PIN kodu."</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ievadiet PUK kodu un jaunu PIN kodu."</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kods"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Jauns PIN kods"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Ievadiet SIM kartes PUK kodu un jaunu PIN kodu."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM kartes PUK kods"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Jauns SIM kartes PIN kods"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Pieskarieties, lai ievadītu paroli"</font>"."</string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ievadiet paroli, lai atbloķētu."</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Lai atbloķētu, ievadiet PIN."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pārtraukšanas poga"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Atskaņošanas poga"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Apturēšanas poga"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Patīk"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Nepatīk"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Sirds"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Atbloķējiet, lai turpinātu."</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Palaišana atcelta"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Velciet logrīku <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>, lai to izdzēstu."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Logrīks <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> netiks izdzēsts."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ievadiet vēlamo PIN kodu."</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Apstipriniet vēlamo PIN."</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Notiek SIM kartes atbloķēšana..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN kods nav pareizs."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ievadiet PIN, kas sastāv no 4 līdz 8 cipariem."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodam ir jābūt vismaz 8 ciparus garam."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Atkārtoti ievadiet pareizo PUK kodu. Ja vairākas reizes ievadīsiet to nepareizi, SIM karte tiks neatgriezeniski atspējota."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Jūs nepareizi norādījāt atbloķēšanas kombināciju <xliff:g id="NUMBER_0">%d</xliff:g> reizes. Pēc vēl <xliff:g id="NUMBER_1">%d</xliff:g> neveiksmīgiem mēģinājumiem tālrunis būs jāatbloķē, izmantojot e-pasta kontu.\n\nMēģiniet vēlreiz pēc <xliff:g id="NUMBER_2">%d</xliff:g> sekundēm."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">"  — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Noņemt"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Nepareizs SIM kartes PIN kods. Lai atbloķētu ierīci, sazinieties ar mobilo sakaru operatoru."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi. Kļūdas gadījumā būs jāsazinās ar mobilo sakaru operatoru, lai tas atbloķētu jūsu ierīci."</item>
+    <item quantity="other" msgid="2215723361575359486">"Nepareizs SIM kartes PIN kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi(-es)."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM karte nav izmantojama. Sazinieties ar mobilo sakaru operatoru."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi. Kļūdas gadījumā SIM karte kļūs neizmantojama."</item>
+    <item quantity="other" msgid="5477305226026342036">"Nepareizs SIM kartes PUK kods. Varat mēģināt vēl <xliff:g id="NUMBER">%d</xliff:g> reizi(-es). Kļūdas gadījumā SIM karte kļūs neizmantojama."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM kartes PIN koda ievadīšana neizdevās."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM kartes PUK koda ievadīšana neizdevās."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kods ir pieņemts!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Iepriekšējā ieraksta poga"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Nākamā ieraksta poga"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pārtraukšanas poga"</string>
diff --git a/packages/Keyguard/res/values-mn-rMN/strings.xml b/packages/Keyguard/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..7bb819d
--- /dev/null
+++ b/packages/Keyguard/res/values-mn-rMN/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN кодыг бичнэ үү"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"СИМ ПҮК-г бичээд шинэ ПИН код оруулна уу"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"СИМ ПҮК код"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Шинэ СИМ ПИН код"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Нууц үг бичих бол хүрнэ үү"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Тайлах нууц үгийг бичнэ үү"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Тайлах PIN-г оруулна уу"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Буруу PIN код."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Тайлах бол Цэсийг дараад 0."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Нүүрээр түгжээ тайлах оролдлогын тоо дээд хэмжээнээс хэтэрсэн"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Цэнэглэгдэв"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Цэнэглэж байна, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Цэнэглэгчээ холбоно уу."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Тайлх бол цэсийг дарна уу."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Сүлжээ түгжигдсэн"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM карт байхгүй"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Таблет SIM картгүй."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Утсанд SIM карт байхгүй."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM картыг оруулна уу."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM карт байхгүй эсвэл унших боломжгүй. SIM карт оруулна уу."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Ашиглаж болохгүй SIM карт."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Таны SIM карт бүрмөсөн идэвхгүй болов.\n Өөр SIM карт авах бол өөрийн утасгүй үйлчилгээний нийлүүлэгчтэй холбогдоно уу."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM карт түгжигдсэн."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картны PUK-түгжигдсэн."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картны түгжээг гаргаж байна…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. %3$d. -н %2$d виджет"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Виджет нэмэх."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Хоосон"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Тайлах хэсэг нээгдсэн."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Тайлах хэсэг хаагдсан."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> виджет."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Хэрэглэгч сонгоч"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Статус"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Камер"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Медиа контрол"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Виджет дахин эрэмбэлж эхлэв."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Виджетийг дахин эрэмбэлж дуусав."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> виджет устсан."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Түгжээгүй хэсгийг өргөсгөх."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Тайлах гулсуулалт."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Тайлах хээ."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Нүүрээр тайлах"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Тайлах пин."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Тайлах нууц үг."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Хээний хэсэг."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Гулсуулах хэсэг."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Өмнөх бичлэг товч"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Дараагийн бичлэг товч"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Түр зогсоох товч"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Тоглуулах товч"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Зогсоох товч"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Сайн"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Онцгүй"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Зүрх"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Үргэлжлүүлэхийн тулд түгжээг тайлна уу"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Эхлүүлэхийг цуцалсан"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Устгахын тулд <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>-г тавина уу."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> устахгүй."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"АБВ"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Цуцлах"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Устгах"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Дуусгах"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Горим өөрчлөх"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Шифт"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Оруулах"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Тайлах"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Камер"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Чимээгүй"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Дуунууд идэвхтэй"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Хайх"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-г гулсуулах."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх бол доош гулсуулах."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх зүүнлүү гулсуулах."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх бол баруунлуу гулсуулах."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Одоогийн хэрэглэгч <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Яаралтай дуудлага"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Хээг мартсан"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Буруу хээ"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Нууц үг буруу"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN буруу"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g> секундын дараа дахин оролдоно уу."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Хээг зурах"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN оруулна уу"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN оруулна уу"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Нууц үгээ оруулна уу"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM идэвхгүй байна. Үргэлжлүүлэх бол PUK кодыг оруулна уу. Дэлгэрэнгүй мэдээллийг оператороос асууна ууу"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Хүссэн PIN кодоо оруулна уу"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Хүссэн PIN кодоо дахин оруулна уу"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM картны түгжээг гаргаж байна…"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-8 тооноос бүтэх PIN-г бичнэ үү."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK код 8-с цөөнгүй тооноос бүтнэ."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Зөв PUK кодыг дахин оруулна уу. Давтан оролдвол SIM нь бүрмөсөн идэвхгүй болгоно."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN кодууд таарахгүй байна"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Хээ оруулах оролдлого хэт олон"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Түгжээг тайлах бол Google акаунтаараа нэвтэрнэ үү."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Хэрэглэгчийн нэр (имэйл)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Нууц үг"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Нэвтрэх"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Хэрэглэгчийн нэр эсвэл нууц үг буруу."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Хэрэглэгчийн нэр нууц үгээ мартсан уу?\n"<b>"google.com/accounts/recovery"</b>"-д зочилно уу."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Акаунт шалгаж байна…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Та PIN кодоо <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу бичив. \n\n<xliff:g id="NUMBER_1">%d</xliff:g> секундын дараа дахин оролдоно уу."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Та PIN кодоо <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу бичив. \n\n<xliff:g id="NUMBER_1">%d</xliff:g> секундын дараа дахин оролдоно уу."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Та тайлах хээг <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу зурлаа. \n\n<xliff:g id="NUMBER_1">%d</xliff:g> секундын дараа дахин оролдоно уу."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Та таблетыг тайлах гэж <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу оролдлоо. <xliff:g id="NUMBER_1">%d</xliff:g> удаа дахин буруу оролдвол таблет үйлдвэрийн үндсэн утгаараа тохируулагдах ба хэрэглэгчийн дата бүхэлдээ устана."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Та утсыг тайлах гэж <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу оролдлоо. <xliff:g id="NUMBER_1">%d</xliff:g> удаа дахин буруу оролдвол утас үйлдвэрийн үндсэн утгаараа тохируулагдах ба хэрэглэгчийн дата бүхэлдээ устана."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Та таблетыг тайлах гэж <xliff:g id="NUMBER">%d</xliff:g> удаа буруу оролдлоо. Таблет одоо үйлдвэрийн үндсэн утгаараа тохируулагдах болно."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Та утсыг тайлах гэж <xliff:g id="NUMBER">%d</xliff:g> удаа буруу оролдлоо. Утас одоо үйлдвэрийн үндсэн утгаараа тохируулагдах болно."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Та тайлах хээг <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу зурлаа. <xliff:g id="NUMBER_1">%d</xliff:g> удаа дахин буруу оруулбал, та таблетаа тайлахын тулд имэйл акаунт шаардлагатай болно.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундын дараа дахин оролдоно уу."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Та тайлах хээг <xliff:g id="NUMBER_0">%d</xliff:g> удаа буруу зурлаа. <xliff:g id="NUMBER_1">%d</xliff:g> удаа дахин буруу оруулбал, та утсаа тайлахын тулд имэйл акаунтаа ашиглах шаардлагатай болно.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> секундын дараа дахин оролдоно уу."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Устгах"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"СИМ ПИН код буруу, та төхөөрөмжийн түгжээг тайлахын тулд оператор компанитай холбоо барих шаардлагатай."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"СИМ ПИН код буруу байна, танд мобайл оператор компанитай холбогдохгүйгээр төхөөрөмжийн түгжээг тайлахад <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдсэн байна."</item>
+    <item quantity="other" msgid="2215723361575359486">"СИМ ПИН код буруу байна, танд <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"СИМ ашиглах боломжгүй. Өөрийн оператор компанитай холбоо барина уу."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"СИМ ПҮК код буруу, таны СИМ бүрмөсөн ашиглалтгүй болохоос өмнө <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item>
+    <item quantity="other" msgid="5477305226026342036">"СИМ ПҮК код буруу, таны СИМ бүрмөсөн ашиглалтгүй болохоос өмнө <xliff:g id="NUMBER">%d</xliff:g> оролдлого хийх боломж үлдлээ."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"СИМ ПИН ажиллуулах амжилтгүй боллоо!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"СИМ ПҮК ажиллуулах амжилтгүй боллоо!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Код зөвшөөрөгдлөө!"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Өмнөх дуу товч"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Дараагийн дуу товч"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Түр зогсох товч"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Тоглуулах товч"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Зогсоох товч"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Үйлчилгээ байхгүй."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-ms-rMY/strings.xml b/packages/Keyguard/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..b4c1b46
--- /dev/null
+++ b/packages/Keyguard/res/values-ms-rMY/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Pengawal kekunci"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Taip kod PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Taip PUK SIM dan kod PIN baharu"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Kod PUK SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Kod PIN SIM baharu"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Sentuh untuk menaip kata laluan"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Taip kata laluan untuk membuka kunci"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Taip PIN untuk membuka kunci"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Kod PIN salah."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka kunci, tekan Menu, kemudian 0."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Telah melepasi had cubaan Buka Kunci Wajah"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Sudah dicas"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Mengecas, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"Sambungkan pengecas anda."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tekan Menu untuk membuka kunci."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rangkaian dikunci"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Tiada kad SIM"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tiada kad SIM dalam tablet."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Tiada kad SIM dalam telefon."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Masukkan kad SIM."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Kad SIM tiada atau tidak boleh dibaca. Sila masukkan kad SIM."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kad SIM tidak boleh digunakan."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Kad SIM anda telah dilumpuhkan secara kekal.\n Hubungi pembekal perkhidmatan wayarles anda untuk mendapatkan kad SIM lain."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kad SIM dikunci."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kad SIM dikunci dengan PUK."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kunci kad SIM..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d dari %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Tambah widget."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Kosong"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Bahagian buka kunci dikembangkan."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Bahagian buka kunci diruntuhkan."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Pemilih pengguna"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Kawalan media"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Penyusunan semula widget dimulakan."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Penyusunan semula widget tamat."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> dipadamkan."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kembangkan bahagian buka kunci."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Buka kunci luncur."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci corak."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Wajah Buka Kunci"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci pin."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci kata laluan."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kawasan corak."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Kawasan luncur."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Butang lagu sebelumnya"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Butang lagu seterusnya"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Butang jeda"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Butang main"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Butang berhenti"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Menyukai"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Tidak diterima"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Jantung"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Buka kunci untuk meneruskan"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Pelancaran dibatalkan"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Jatuhkan <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> untuk memadam."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> tidak akan dipadamkan."</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Batal"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Padam"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Selesai"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Perubahan mod"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Masuk"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"Buka kunci"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"Luncurkan ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"Luncurkan ke kanan untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="user_switched" msgid="3768006783166984410">"Pengguna semasa <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan kecemasan"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Corak"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Corak Salah"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"Kata Laluan Salah"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN salah"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Cuba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> saat."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"Lukiskan corak anda"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Masukkan PIN SIM"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"Masukkan PIN"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"Masukkan Kata Laluan"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Hubungi pembawa untuk butiran."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Masukkan kod PIN yang diingini"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Sahkan kod PIN yang diingini"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kad SIM..."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK mestilah 8 nombor atau lebih."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan semula kod PIN yang betul. Percubaan berulang akan melumpuhkan SIM secara kekal."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kod PIN tidak sepadan"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak percubaan melukis corak"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Untuk membuka kunci, log masuk dengan akaun Google anda."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Nama Pengguna (E-mel)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"Kata laluan"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"Log masuk"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nama pengguna atau kata laluan tidak sah."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Lupa nama pengguna atau kata laluan anda?\nLawati"<b>"google.com/accounts/recovery"</b>"."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"Menyemak akaun…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Anda telah menaip PIN anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Anda telah menaip kata laluan anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Anda telah tersilap melukis corak buka kunci anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Anda telah mencuba untuk membuka kunci tablet dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, tablet akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Anda telah mencuba untuk membuka kunci telefon dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, telefon akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Anda telah mencuba untuk membuka kunci tablet secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Tablet kini akan ditetapkan semula ke tetapan lalai kilang."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Anda telah mencuba untuk membuka kunci telefon secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Telefon kini akan ditetapkan semula ke tetapan lalai kilang."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah tersilap melukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Alih keluar"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Kod PIN SIM tidak betul, jadi anda harus menghubungi pembawa anda untuk membuka kunci peranti."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Kod PIN SIM tidak betul. Anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum anda harus menghubungi pembawa anda untuk membuka kunci peranti."</item>
+    <item quantity="other" msgid="2215723361575359486">"Kod PIN SIM tidak betul, anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM tidak boleh digunakan. Hubungi pembawa anda."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Kod PUK SIM tidak betul, anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum SIM tidak boleh digunakan secara kekal."</item>
+    <item quantity="other" msgid="5477305226026342036">"Kod PUK SIM tidak betul, anda mempunyai <xliff:g id="NUMBER">%d</xliff:g> percubaan lagi sebelum SIM tidak boleh digunakan secara kekal."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operasi PIN SIM gagal!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operasi PUK SIM gagal!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod Diterima!"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Butang lagu sebelumnya"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Butang lagu seterusnya"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Butang jeda"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Butang main"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Butang berhenti"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Tiada perkhidmatan."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-ms/activitystrings.xml b/packages/Keyguard/res/values-ms/activitystrings.xml
deleted file mode 100644
index 04e2184..0000000
--- a/packages/Keyguard/res/values-ms/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Tiada keselamatan"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Kata laluan"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Corak"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Pilih widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ms/strings.xml b/packages/Keyguard/res/values-ms/strings.xml
deleted file mode 100644
index 0aeeeb5..0000000
--- a/packages/Keyguard/res/values-ms/strings.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Taip kod PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Taip PUK dan kod PIN baharu"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kod PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Kod PIN Baharu"</string>
-    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Sentuh untuk menaip kata laluan"</font></string>
-    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Taip kata laluan untuk membuka kunci"</string>
-    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Taip PIN untuk membuka kunci"</string>
-    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Kod PIN salah."</string>
-    <string name="keyguard_label_text" msgid="861796461028298424">"Untuk membuka kunci, tekan Menu, kemudian 0."</string>
-    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Telah melepasi had cubaan Buka Kunci Wajah"</string>
-    <string name="keyguard_charged" msgid="3272223906073492454">"Sudah dicas"</string>
-    <string name="keyguard_plugged_in" msgid="8117572000639998388">"Mengecas, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="keyguard_low_battery" msgid="8143808018719173859">"Sambungkan pengecas anda."</string>
-    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Tekan Menu untuk membuka kunci."</string>
-    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Rangkaian dikunci"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Tiada kad SIM"</string>
-    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"Tiada kad SIM dalam tablet."</string>
-    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"Tiada kad SIM dalam telefon."</string>
-    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Masukkan kad SIM."</string>
-    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"Kad SIM tiada atau tidak boleh dibaca. Sila masukkan kad SIM."</string>
-    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"Kad SIM tidak boleh digunakan."</string>
-    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"Kad SIM anda telah dilumpuhkan secara kekal.\n Hubungi pembekal perkhidmatan wayarles anda untuk mendapatkan kad SIM lain."</string>
-    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kad SIM dikunci."</string>
-    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kad SIM dikunci dengan PUK."</string>
-    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kunci kad SIM..."</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Widget %2$d dari %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Tambah widget."</string>
-    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Kosong"</string>
-    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Bahagian buka kunci dikembangkan."</string>
-    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Bahagian buka kunci diruntuhkan."</string>
-    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
-    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"Pemilih pengguna"</string>
-    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Status"</string>
-    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
-    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Kawalan media"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Penyusunan semula widget dimulakan."</string>
-    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Penyusunan semula widget tamat."</string>
-    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Widget <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> dipadamkan."</string>
-    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Kembangkan bahagian buka kunci."</string>
-    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"Buka kunci luncur."</string>
-    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci corak."</string>
-    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"Wajah Buka Kunci"</string>
-    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci pin."</string>
-    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci kata laluan."</string>
-    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kawasan corak."</string>
-    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Kawasan luncur."</string>
-    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"Butang lagu sebelumnya"</string>
-    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"Butang lagu seterusnya"</string>
-    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Butang jeda"</string>
-    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Butang main"</string>
-    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Butang berhenti"</string>
-    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
-    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
-    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
-    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
-    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"Batal"</string>
-    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Padam"</string>
-    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"Selesai"</string>
-    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"Perubahan mod"</string>
-    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
-    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Masuk"</string>
-    <string name="description_target_unlock" msgid="2228524900439801453">"Buka kunci"</string>
-    <string name="description_target_camera" msgid="969071997552486814">"Kamera"</string>
-    <string name="description_target_silent" msgid="893551287746522182">"Senyap"</string>
-    <string name="description_target_soundon" msgid="30052466675500172">"Bunyi dihidupkan"</string>
-    <string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
-    <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_down" msgid="5087739728639014595">"Luncurkan ke bawah untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="description_direction_right" msgid="8034433242579600980">"Luncurkan ke kanan untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
-    <string name="user_switched" msgid="3768006783166984410">"Pengguna semasa <xliff:g id="NAME">%1$s</xliff:g>."</string>
-    <string name="kg_emergency_call_label" msgid="684946192523830531">"Panggilan kecemasan"</string>
-    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Lupa Corak"</string>
-    <string name="kg_wrong_pattern" msgid="1850806070801358830">"Corak Salah"</string>
-    <string name="kg_wrong_password" msgid="2333281762128113157">"Kata Laluan Salah"</string>
-    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN salah"</string>
-    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Cuba lagi dalam <xliff:g id="NUMBER">%d</xliff:g> saat."</string>
-    <string name="kg_pattern_instructions" msgid="398978611683075868">"Lukiskan corak anda"</string>
-    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Masukkan PIN SIM"</string>
-    <string name="kg_pin_instructions" msgid="2377242233495111557">"Masukkan PIN"</string>
-    <string name="kg_password_instructions" msgid="5753646556186936819">"Masukkan Kata Laluan"</string>
-    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Kini SIM dilumpuhkan. Masukkan kod PUK untuk meneruskan. Hubungi pembawa untuk butiran."</string>
-    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Masukkan kod PIN yang diingini"</string>
-    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Sahkan kod PIN yang diingini"</string>
-    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Membuka kunci kad SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Kod PIN salah."</string>
-    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Taipkan PIN yang mengandungi 4 hingga 8 nombor."</string>
-    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK mestilah 8 nombor atau lebih."</string>
-    <string name="kg_invalid_puk" msgid="3638289409676051243">"Masukkan semula kod PIN yang betul. Percubaan berulang akan melumpuhkan SIM secara kekal."</string>
-    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Kod PIN tidak sepadan"</string>
-    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Terlalu banyak percubaan melukis corak"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Untuk membuka kunci, log masuk dengan akaun Google anda."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Nama Pengguna (E-mel)"</string>
-    <string name="kg_login_password_hint" msgid="9057289103827298549">"Kata laluan"</string>
-    <string name="kg_login_submit_button" msgid="5355904582674054702">"Log masuk"</string>
-    <string name="kg_login_invalid_input" msgid="5754664119319872197">"Nama pengguna atau kata laluan tidak sah."</string>
-    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"Lupa nama pengguna atau kata laluan anda?\nLawati"<b>"google.com/accounts/recovery"</b>"."</string>
-    <string name="kg_login_checking_password" msgid="1052685197710252395">"Menyemak akaun…"</string>
-    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Anda telah menaip PIN anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Anda telah menaip kata laluan anda secara salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Anda telah tersilap melukis corak buka kunci anda sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. \n\nCuba lagi dalam <xliff:g id="NUMBER_1">%d</xliff:g> saat."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Anda telah mencuba untuk membuka kunci tablet dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, tablet akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
-    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Anda telah mencuba untuk membuka kunci telefon dengan salah sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, telefon akan ditetapkan semula kepada tetapan lalai kilang dan semua data pengguna akan hilang."</string>
-    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Anda telah mencuba untuk membuka kunci tablet secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Tablet kini akan ditetapkan semula ke tetapan lalai kilang."</string>
-    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Anda telah mencuba untuk membuka kunci telefon secara salah sebanyak <xliff:g id="NUMBER">%d</xliff:g> kali. Telefon kini akan ditetapkan semula ke tetapan lalai kilang."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Anda telah tersilap melukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci tablet anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
-    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Anda telah tersilap lukis corak buka kunci sebanyak <xliff:g id="NUMBER_0">%d</xliff:g> kali. Selepas <xliff:g id="NUMBER_1">%d</xliff:g> lagi percubaan yang tidak berjaya, anda akan diminta membuka kunci telefon anda menggunakan log masuk Google anda.\n\n Cuba lagi dalam <xliff:g id="NUMBER_2">%d</xliff:g> saat."</string>
-    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
-    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Alih keluar"</string>
-    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Butang lagu sebelumnya"</string>
-    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Butang lagu seterusnya"</string>
-    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Butang jeda"</string>
-    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Butang main"</string>
-    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Butang berhenti"</string>
-    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Tiada perkhidmatan."</string>
-</resources>
diff --git a/packages/Keyguard/res/values-nb/activitystrings.xml b/packages/Keyguard/res/values-nb/activitystrings.xml
deleted file mode 100644
index 015df15..0000000
--- a/packages/Keyguard/res/values-nb/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Ingen sikkerhet"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Passord"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Mønster"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"Personlig kode for SIM-kort"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kode for SIM-kort"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Velg modul"</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-nb/strings.xml b/packages/Keyguard/res/values-nb/strings.xml
index 6a5bfa9..801e03d 100644
--- a/packages/Keyguard/res/values-nb/strings.xml
+++ b/packages/Keyguard/res/values-nb/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Tastaturlås"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Skriv inn PIN-kode"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Skriv inn PUK-kode og ny personlig kode"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kode"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Ny PIN-kode"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Skriv inn PUK-koden for SIM-kortet og en ny PIN-kode"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK-koden for SIM-kortet"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Ny PIN-kode for SIM-kortet"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Trykk for å skrive inn passord"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Skriv inn passord for å låse opp"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Skriv inn PIN-kode for å låse opp"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pause-knapp"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Avspillingsknapp"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stopp-knapp"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Likt av meg"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Sanger du ikke liker"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Hjerte"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Lås opp for å fortsette"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Starten ble kansellert"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Slipp <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> for å slette den."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> blir ikke slettet."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,13 +113,12 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Tast inn ønsket PIN-kode"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekreft ønsket PIN-kode"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser opp SIM-kortet ..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Feil PIN-kode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Skriv inn en PIN-kode på fire til åtte sifre."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden skal være på åtte eller flere siffer."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Skriv inn den korrekte PUK-koden på nytt. Gjentatte forsøk kommer til å deaktivere SIM-kortet."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN-kodene stemmer ikke overens"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"For mange forsøk på tegning av mønster"</string>
-    <string name="kg_login_instructions" msgid="1100551261265506448">"Logg deg på med Google-kontoen din for å låse opp."</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"Logg på med Google-kontoen din for å låse opp."</string>
     <string name="kg_login_username_hint" msgid="5718534272070920364">"Brukernavn (e-postadresse)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"Passord"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"Logg på"</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har tegnet opplåsningsmønsteret feil <xliff:g id="NUMBER_0">%d</xliff:g> ganger. Etter ytterligere <xliff:g id="NUMBER_1">%d</xliff:g> gale forsøk, blir du bedt om å låse opp telefonen via en e-postkonto.\n\n Prøv på nytt om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Fjern"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Feil PIN-kode for SIM-kortet. Du må nå kontakte operatøren din for å låse opp enheten."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før du må kontakte operatøren din for å låse opp enheten."</item>
+    <item quantity="other" msgid="2215723361575359486">"Feil PIN-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortet er ubrukelig. Kontakt operatøren din."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig."</item>
+    <item quantity="other" msgid="5477305226026342036">"Feil PUK-kode for SIM-kortet. Du har <xliff:g id="NUMBER">%d</xliff:g> forsøk igjen før SIM-kortet blir permanent ubrukelig."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"PIN-koden for SIM-kortet ble avvist."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"PUK-koden for SIM-kortet ble avvist."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Koden er godkjent."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Forrige spor-knapp"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Neste spor-knapp"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pause-knapp"</string>
diff --git a/packages/Keyguard/res/values-ne-rNP/strings.xml b/packages/Keyguard/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..0fa1182
--- /dev/null
+++ b/packages/Keyguard/res/values-ne-rNP/strings.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK र नयाँ PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"नयाँ PIN कोड"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"पासवर्ड टाइप गर्न छुनुहोस्"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"अनलक गर्न पासवर्ड टाइप गर्नुहोस्।"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"अनलक गर्न PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"गलत PIN कोड।"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"अनलक गर्न मेनु थिच्नुहोस् र त्यसपछि ० थिच्नुहोस्।"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"अत्याधिक मोहडा खोल्ने प्रयासहरू बढी भए।"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"चार्ज भयो"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"चार्ज गर्दै, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"तपाईँको चार्जर जोड्नुहोस्।"</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"अनलक गर्न मेनु थिच्नुहोस्।"</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"नेटवर्क लक गरिएको छ"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM कार्ड छैन"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ट्याब्लेटमा SIM कार्ड छैन।"</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"फोनमा कुनै SIM कार्ड छैन।"</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM कार्ड भित्र राख्नुहोस्।"</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM कार्ड हराइरहेको छ वा पढ्न योग्य छैन। SIM कार्ड हाल्नुहोस्।"</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"प्रयोग अयोग्य SIM कार्ड।"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"तपाईँको SIM कार्ड स्थायी रूपमा असक्षम पारिएको छ।\n अर्को SIM कार्डको लागि तपाईँको ताररहित सेवा प्रदायकसँग सम्पर्क गर्नुहोस्।"</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM कार्ड लक गरियो।"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM कार्ड PUK-लक छ।"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM कार्ड अनलक हुँदै…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. विजेट %2$d of %3$d।"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"विजेट थप गर्नुहोस्।"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"खाली"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"अनलक क्षेत्र विस्तार भयो।"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"अनलक क्षेत्र भत्कियो।"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> विजेट।"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"प्रयोगकर्ता छनौटकर्ता"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"स्थिति"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"क्यामेरा"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"मिडिया नियन्त्रणहरू"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"विजेट पुनःक्रम गर्ने सुरु भयो।"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"विजेट पुनःक्रम समाप्त भएको छ।"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"विजेट <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> मेटाइयो।"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"अनलक क्षेत्र बढाउनुहोस्।"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"स्लाइड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ढाँचा अनलक।"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलक"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin अनलक"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ढाँचा क्षेत्र।"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र।"</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"अघिल्लो पथ बटन"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"अर्को पथ बटन"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"रोक्ने बटन"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"बजाउने बटन"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"बटन रोक्नुहोस्"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?१२३"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"रद्द गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"मेट्नुहोस्"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"भयो"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"मोड परिवर्तन गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"प्रविष्टि गर्नुहोस्"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"अनलक गर्नुहोस्"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"क्यामेरा"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"मौन"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"आवाज चालू"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"खोज्नुहोस्"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि माथि धिसार्नुहोस्"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> को लागि तल स्लाइड गर्नुहोस्।"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि बायाँ।"</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि दायाँ।"</string>
+    <string name="user_switched" msgid="3768006783166984410">"अहिलेको प्रयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>।"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"आपतकालीन कल"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ढाँचा बिर्सनु भयो"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत ढाँचा"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"गलत पासवर्ड"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"गलत PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g>सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"आफ्नो ढाँचा कोर्नुहोस्"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्।  विवरणको लागि वाहकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"इच्छित PIN कोड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"मनपर्दो PIN कोड निश्चित गर्नुहोस्"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलक गर्दै…"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड।"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"४ देखि ८ वाट नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK कोड ८ वटा नम्बर वा सो भन्दा बढी हुनुपर्छ।"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"PUK कोड पुन:प्रदान गर्नुहोस्। धेरै पुन:प्रयासहरूले SIMलाई स्थायी रूपमा निष्क्रिय गरिदिने छ।"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN कोडहरू मेल खाएन"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"निकै धेरै ढाँचा कोसिसहरू"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"अनलक गर्नको लागि, तपाईँको Google खाताको साथ साइन इन गर्नुहोस्।"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"प्रयोगकर्ता नाम (इमेल)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"पासवर्ड"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन गर्नुहोस्"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य प्रयोगकर्तानाम वा पासवर्ड।"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"के तपाईँले उपयोगकर्ता नाम वा पासवर्ड बिर्सनुभयो?\n"<b>"google.com/accounts/recovery"</b>" मा जानुहोस्।"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"खाता जाँच हुँदै…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"तपाईँले तपाईँक पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> पटक गलत टाइप गर्नुभएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"तपाईँले ट्याब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल प्रयासहरू, ट्याब्लेट पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"तपाईँले गलतसँग फोनलाई अनलक गर्न <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भयो। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल कोसिसहरू, फोनलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"तपाईँले ट्यब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER">%d</xliff:g> पटक प्रयास गर्नु भएको छ। अब ट्याब्लेटलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"तपाईंले गलत तरिकाले फोन <xliff:g id="NUMBER">%d</xliff:g> पटक अनलक गर्ने प्रयत्न गर्नुभयो। अब फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"तपाईंले गलत तरिकाले आफ्नो अनलक ढाँचा <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोर्नुभयो। <xliff:g id="NUMBER_1">%d</xliff:g> विफल प्रयत्नहरू पछि, तपाईंलाई आफ्नो ट्याब्लेट इमेल खाता प्रयोग गरेर अनलक गर्न सोधिने छ।\n\n फेरि प्रयास गर्नुहोस् <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डहरूमा।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"तपाईँले आफ्नो अनलक ढाँचा गलत रूपमा <xliff:g id="NUMBER_0">%d</xliff:g> पटक तान्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> धेरै असफल प्रयासहरूपछि, तपाईँलाई एउटा इमेल खाताको प्रयोग गरेर तपाईँको फोन अनलक गर्न सोधिने छ।\n\n फेरि <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा प्रयास गर्नुहोस्।"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"हटाउनुहोस्"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"अघिल्लो ट्रयाक बटन"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"अर्को ट्रयाक बटन"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"रोक्ने बटन"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"बटन बजाउनुहोस्"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"बटन रोक्नुहोस्"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"कुनै सेवा छैन।"</string>
+</resources>
diff --git a/packages/Keyguard/res/values-ne/strings.xml b/packages/Keyguard/res/values-ne/strings.xml
new file mode 100644
index 0000000..0fa1182
--- /dev/null
+++ b/packages/Keyguard/res/values-ne/strings.xml
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK र नयाँ PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK कोड"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"नयाँ PIN कोड"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"पासवर्ड टाइप गर्न छुनुहोस्"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"अनलक गर्न पासवर्ड टाइप गर्नुहोस्।"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"अनलक गर्न PIN कोड टाइप गर्नुहोस्"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"गलत PIN कोड।"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"अनलक गर्न मेनु थिच्नुहोस् र त्यसपछि ० थिच्नुहोस्।"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"अत्याधिक मोहडा खोल्ने प्रयासहरू बढी भए।"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"चार्ज भयो"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"चार्ज गर्दै, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"तपाईँको चार्जर जोड्नुहोस्।"</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"अनलक गर्न मेनु थिच्नुहोस्।"</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"नेटवर्क लक गरिएको छ"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM कार्ड छैन"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ट्याब्लेटमा SIM कार्ड छैन।"</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"फोनमा कुनै SIM कार्ड छैन।"</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM कार्ड भित्र राख्नुहोस्।"</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM कार्ड हराइरहेको छ वा पढ्न योग्य छैन। SIM कार्ड हाल्नुहोस्।"</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"प्रयोग अयोग्य SIM कार्ड।"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"तपाईँको SIM कार्ड स्थायी रूपमा असक्षम पारिएको छ।\n अर्को SIM कार्डको लागि तपाईँको ताररहित सेवा प्रदायकसँग सम्पर्क गर्नुहोस्।"</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM कार्ड लक गरियो।"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM कार्ड PUK-लक छ।"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM कार्ड अनलक हुँदै…"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. विजेट %2$d of %3$d।"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"विजेट थप गर्नुहोस्।"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"खाली"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"अनलक क्षेत्र विस्तार भयो।"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"अनलक क्षेत्र भत्कियो।"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> विजेट।"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"प्रयोगकर्ता छनौटकर्ता"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"स्थिति"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"क्यामेरा"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"मिडिया नियन्त्रणहरू"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"विजेट पुनःक्रम गर्ने सुरु भयो।"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"विजेट पुनःक्रम समाप्त भएको छ।"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"विजेट <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> मेटाइयो।"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"अनलक क्षेत्र बढाउनुहोस्।"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"स्लाइड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ढाँचा अनलक।"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"फेस अनलक"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin अनलक"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलक।"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ढाँचा क्षेत्र।"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र।"</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"अघिल्लो पथ बटन"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"अर्को पथ बटन"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"रोक्ने बटन"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"बजाउने बटन"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"बटन रोक्नुहोस्"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?१२३"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"रद्द गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"मेट्नुहोस्"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"भयो"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"मोड परिवर्तन गर्नुहोस्"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"प्रविष्टि गर्नुहोस्"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"अनलक गर्नुहोस्"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"क्यामेरा"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"मौन"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"आवाज चालू"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"खोज्नुहोस्"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि माथि धिसार्नुहोस्"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> को लागि तल स्लाइड गर्नुहोस्।"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि बायाँ।"</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"स्लाइड <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>को लागि दायाँ।"</string>
+    <string name="user_switched" msgid="3768006783166984410">"अहिलेको प्रयोगकर्ता <xliff:g id="NAME">%1$s</xliff:g>।"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"आपतकालीन कल"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"ढाँचा बिर्सनु भयो"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"गलत ढाँचा"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"गलत पासवर्ड"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"गलत PIN"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"<xliff:g id="NUMBER">%d</xliff:g>सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"आफ्नो ढाँचा कोर्नुहोस्"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"पासवर्ड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM कार्ड अहिले असक्षम छ। सुचारु गर्नको लागि PUK कोड प्रविष्टि गर्नुहोस्।  विवरणको लागि वाहकलाई सम्पर्क गर्नुहोस्।"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"इच्छित PIN कोड प्रविष्टि गर्नुहोस्"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"मनपर्दो PIN कोड निश्चित गर्नुहोस्"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM कार्ड अनलक गर्दै…"</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"गलत PIN कोड।"</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"४ देखि ८ वाट नम्बर भएको एउटा PIN टाइप गर्नुहोस्।"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK कोड ८ वटा नम्बर वा सो भन्दा बढी हुनुपर्छ।"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"PUK कोड पुन:प्रदान गर्नुहोस्। धेरै पुन:प्रयासहरूले SIMलाई स्थायी रूपमा निष्क्रिय गरिदिने छ।"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN कोडहरू मेल खाएन"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"निकै धेरै ढाँचा कोसिसहरू"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"अनलक गर्नको लागि, तपाईँको Google खाताको साथ साइन इन गर्नुहोस्।"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"प्रयोगकर्ता नाम (इमेल)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"पासवर्ड"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"साइन इन गर्नुहोस्"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"अमान्य प्रयोगकर्तानाम वा पासवर्ड।"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"के तपाईँले उपयोगकर्ता नाम वा पासवर्ड बिर्सनुभयो?\n"<b>"google.com/accounts/recovery"</b>" मा जानुहोस्।"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"खाता जाँच हुँदै…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"तपाईँले गलत तरिकाले तपाईँको PIN <xliff:g id="NUMBER_0">%d</xliff:g> पटक टाइप गर्नु भएको छ। \n\n<xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"तपाईँले तपाईँक पासवर्ड <xliff:g id="NUMBER_0">%d</xliff:g> पटक गलत टाइप गर्नुभएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि प्रयास गर्नुहोस्।"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"तपाईँले तपाईँको अनलक ढाँचा गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक खिच्नु भएको छ। \n\n <xliff:g id="NUMBER_1">%d</xliff:g> सेकेन्डमा फेरि कोसिस गर्नुहोस्।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"तपाईँले ट्याब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल प्रयासहरू, ट्याब्लेट पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"तपाईँले गलतसँग फोनलाई अनलक गर्न <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोसिस गर्नु भयो। <xliff:g id="NUMBER_1">%d</xliff:g> पछि थप असफल कोसिसहरू, फोनलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ र सबै प्रयोग डेटा हराउने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"तपाईँले ट्यब्लेटलाई अनलक गर्न गलत तरिकाले <xliff:g id="NUMBER">%d</xliff:g> पटक प्रयास गर्नु भएको छ। अब ट्याब्लेटलाई पूर्वनिर्धारित कार्यशालामा पुनःसेट गरिने छ।"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"तपाईंले गलत तरिकाले फोन <xliff:g id="NUMBER">%d</xliff:g> पटक अनलक गर्ने प्रयत्न गर्नुभयो। अब फोन फ्याक्ट्रि पूर्वनिर्धारितमा पुनःसेट हुने छ।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"तपाईंले गलत तरिकाले आफ्नो अनलक ढाँचा <xliff:g id="NUMBER_0">%d</xliff:g> पटक कोर्नुभयो। <xliff:g id="NUMBER_1">%d</xliff:g> विफल प्रयत्नहरू पछि, तपाईंलाई आफ्नो ट्याब्लेट इमेल खाता प्रयोग गरेर अनलक गर्न सोधिने छ।\n\n फेरि प्रयास गर्नुहोस् <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डहरूमा।"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"तपाईँले आफ्नो अनलक ढाँचा गलत रूपमा <xliff:g id="NUMBER_0">%d</xliff:g> पटक तान्नु भएको छ। <xliff:g id="NUMBER_1">%d</xliff:g> धेरै असफल प्रयासहरूपछि, तपाईँलाई एउटा इमेल खाताको प्रयोग गरेर तपाईँको फोन अनलक गर्न सोधिने छ।\n\n फेरि <xliff:g id="NUMBER_2">%d</xliff:g> सेकेन्डमा प्रयास गर्नुहोस्।"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"हटाउनुहोस्"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"अघिल्लो ट्रयाक बटन"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"अर्को ट्रयाक बटन"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"रोक्ने बटन"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"बटन बजाउनुहोस्"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"बटन रोक्नुहोस्"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"कुनै सेवा छैन।"</string>
+</resources>
diff --git a/packages/Keyguard/res/values-nl/activitystrings.xml b/packages/Keyguard/res/values-nl/activitystrings.xml
deleted file mode 100644
index fcb0be9..0000000
--- a/packages/Keyguard/res/values-nl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Geen beveiliging"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"Pincode"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Wachtwoord"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Patroon"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"Pincode van simkaart"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-code van simkaart"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Widget kiezen…"</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-nl/strings.xml b/packages/Keyguard/res/values-nl/strings.xml
index b94cb70..195f950 100644
--- a/packages/Keyguard/res/values-nl/strings.xml
+++ b/packages/Keyguard/res/values-nl/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Toetsblokkering"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Pincode typen"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Geef de PUK-code en de nieuwe pincode op"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-code"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nieuwe pincode"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Typ de pukcode voor de simkaart en de nieuwe pincode"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Pukcode voor simkaart"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nieuwe pincode voor simkaart"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Raak aan om wachtwoord in te voeren"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Typ het wachtwoord om te ontgrendelen"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Typ pincode om te ontgrendelen"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Knop voor onderbreken"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Knop voor afspelen"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Knop voor stoppen"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Leuk"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Niet leuk"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Hart"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Ontgrendel om door te gaan"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Start geannuleerd"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Zet <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> neer om te verwijderen."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> wordt niet verwijderd."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"Alt"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Gewenste pincode opgeven"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Gewenste pincode bevestigen"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Simkaart ontgrendelen..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Onjuiste pincode."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Voer een pincode van 4 tot 8 cijfers in."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"De PUK-code is minimaal acht nummers lang."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Geef de juiste PUK-code opnieuw op. Bij herhaalde pogingen wordt de simkaart permanent uitgeschakeld."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"U heeft uw ontgrendelingspatroon <xliff:g id="NUMBER_0">%d</xliff:g> keer onjuist getekend. Na nog eens <xliff:g id="NUMBER_1">%d</xliff:g> mislukte pogingen wordt u gevraagd uw telefoon te ontgrendelen via een e-mailaccount.\n\n Probeer het over <xliff:g id="NUMBER_2">%d</xliff:g> seconden opnieuw."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Verwijderen"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Onjuiste pincode voor simkaart. U moet nu contact opnemen met uw provider om uw apparaat te ontgrendelen."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Onjuiste pincode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> poging over voordat u contact met uw provider moet opnemen om uw apparaat te ontgrendelen."</item>
+    <item quantity="other" msgid="2215723361575359486">"Onjuiste pincode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> pogingen over."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Simkaart is onbruikbaar. Neem contact op met uw provider."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Onjuiste pukcode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> poging over voordat de simkaart definitief onbruikbaar wordt."</item>
+    <item quantity="other" msgid="5477305226026342036">"Onjuiste pukcode voor simkaart. U heeft nog <xliff:g id="NUMBER">%d</xliff:g> pogingen over voordat de simkaart definitief onbruikbaar wordt."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Bewerking met pincode voor simkaart mislukt."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Bewerking met pukcode voor simkaart is mislukt."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Code geaccepteerd."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Knop voor vorig nummer"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Knop voor volgend nummer"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Knop voor onderbreken"</string>
diff --git a/packages/Keyguard/res/values-pl/activitystrings.xml b/packages/Keyguard/res/values-pl/activitystrings.xml
deleted file mode 100644
index f04170e..0000000
--- a/packages/Keyguard/res/values-pl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Bez zabezpieczeń"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Hasło"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Wzór"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do karty SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do karty SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Wybierz widżet..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-pl/strings.xml b/packages/Keyguard/res/values-pl/strings.xml
index 15a4a7c..165b2c4 100644
--- a/packages/Keyguard/res/values-pl/strings.xml
+++ b/packages/Keyguard/res/values-pl/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Blokada klawiszy"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Wpisz kod PIN."</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Wpisz kod PUK i nowy kod PIN."</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kod PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nowy PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Wpisz PUK i nowy kod PIN karty SIM"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Kod PUK karty SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nowy kod PIN karty SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotknij, aby wpisać hasło."</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Wpisz hasło, aby odblokować."</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Wpisz kod PIN, aby odblokować."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Przycisk wstrzymania"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Przycisk odtwarzania"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Przycisk zatrzymania"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Podoba mi się"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Nie podoba mi się"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Serce"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Odblokuj, by kontynuować"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Uruchomienie anulowane"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Upuść <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>, by usunąć."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> nie zostanie usunięty."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Podaj wybrany kod PIN"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potwierdź wybrany kod PIN"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odblokowuję kartę SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nieprawidłowy PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Wpisz PIN o długości od 4 do 8 cyfr."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kod PUK musi mieć co najmniej 8 cyfr."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ponownie podaj poprawny kod PUK. Nieudane próby spowodują trwałe wyłączenie karty SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Po raz <xliff:g id="NUMBER_0">%d</xliff:g> nieprawidłowo narysowałeś wzór odblokowania. Po kolejnych <xliff:g id="NUMBER_1">%d</xliff:g> nieudanych próbach konieczne będzie odblokowanie telefonu przy użyciu danych logowania na konto Google.\n\n Spróbuj ponownie za <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Usuń"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Nieprawidłowy kod PIN karty SIM. Musisz teraz skontaktować się z operatorem, by odblokował Twoje urządzenie."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> próbę, zanim będziesz musiał skontaktować się z operatorem, by odblokował Twoje urządzenie."</item>
+    <item quantity="other" msgid="2215723361575359486">"Nieprawidłowy kod PIN karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> prób(y)."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Karta SIM została trwale zablokowana. Skontaktuj się z operatorem."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> próbę, zanim karta SIM zostanie trwale zablokowana."</item>
+    <item quantity="other" msgid="5477305226026342036">"Nieprawidłowy kod PUK karty SIM. Masz jeszcze <xliff:g id="NUMBER">%d</xliff:g> prób(y), zanim karta SIM zostanie trwale zablokowana."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operacja z kodem PIN karty SIM nie udała się."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operacja z kodem PUK karty SIM nie udała się."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod został zaakceptowany."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Przycisk poprzedniego utworu"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Przycisk następnego utworu"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Przycisk wstrzymania"</string>
diff --git a/packages/Keyguard/res/values-pt-rPT/activitystrings.xml b/packages/Keyguard/res/values-pt-rPT/activitystrings.xml
deleted file mode 100644
index 470865d..0000000
--- a/packages/Keyguard/res/values-pt-rPT/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Sem segurança"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Palavra-passe"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Sequência"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Escolher widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-pt-rPT/strings.xml b/packages/Keyguard/res/values-pt-rPT/strings.xml
index 222051c..332a943 100644
--- a/packages/Keyguard/res/values-pt-rPT/strings.xml
+++ b/packages/Keyguard/res/values-pt-rPT/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Escreva o código PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Escreva o PUK e o novo código PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Novo código PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Introduzir PUK do cartão SIM e o novo código PIN"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Código PUK do cartão SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Novo código PIN do cartão SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toque para escrever a palavra-passe"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Escreva a palavra-passe para desbloquear"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Escreva o PIN para desbloquear"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botão Pausa"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botão Reproduzir"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botão Parar"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Gosto"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Não gosto"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Coração"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Desbloquear para continuar"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Lançamento cancelado"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Largue <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> para eliminar."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> não será eliminado."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduza o código PIN pretendido"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirme o código PIN pretendido"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"A desbloquear cartão SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduza um PIN entre 4 e 8 números."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"O código PUK deve ter 8 ou mais números."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Volte a introduzir o código PUK correto. Demasiadas tentativas consecutivas irão desativar permanentemente o SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Desenhou a sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Depois de mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas sem sucesso, ser-lhe-á pedido para desbloquear o telemóvel através de uma conta de email.\n\n Tente novamente dentro de <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" - "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remover"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Código PIN do cartão SIM incorreto. Tem de contactar o seu operador para desbloquear o dispositivo."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativa antes de necessitar de contactar o seu operador para desbloquear o dispositivo."</item>
+    <item quantity="other" msgid="2215723361575359486">"Código PIN do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativas."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Cartão SIM inutilizável. Contacte o seu operador."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativa antes de o cartão SIM ficar permanentemente inutilizável."</item>
+    <item quantity="other" msgid="5477305226026342036">"Código PUK do cartão SIM incorreto. Tem mais <xliff:g id="NUMBER">%d</xliff:g> tentativas antes de o cartão SIM ficar permanentemente inutilizável."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Falha ao introduzir o PIN do cartão SIM!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Falha ao introduzir o PUK do cartão SIM!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceite!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botão Faixa anterior"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botão Faixa seguinte"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botão Pausa"</string>
diff --git a/packages/Keyguard/res/values-pt/activitystrings.xml b/packages/Keyguard/res/values-pt/activitystrings.xml
deleted file mode 100644
index 7a63708..0000000
--- a/packages/Keyguard/res/values-pt/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Sem segurança"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Senha"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Padrão"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN do SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK do SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Escolher widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-pt/strings.xml b/packages/Keyguard/res/values-pt/strings.xml
index a563372..a97b1b6 100644
--- a/packages/Keyguard/res/values-pt/strings.xml
+++ b/packages/Keyguard/res/values-pt/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Bloqueio do teclado"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Insira o código PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Insira o PUK e o novo código PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Código PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Novo código PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Digite o PUK do SIM e o novo código PIN."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Código PUK do SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Novo código PIN do SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Toque para inserir a senha"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Digite a senha para desbloquear"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Insira o PIN para desbloquear"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Botão \"Pausar\""</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Botão \"Reproduzir\""</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Botão \"Parar\""</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Gostei"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Não gostei"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Coração"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Desbloqueie para continuar"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Inicialização cancelada"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Solte <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> para excluir."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> não será excluído."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Digite o código PIN desejado"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirme o código PIN desejado"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Desbloqueando o cartão SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Código PIN incorreto."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Digite um PIN com quatro a oito números."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"O código PUK deve ter 8 números ou mais."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Introduza novamente o código PUK correto. Muitas tentativas malsucedidas desativarão permanentemente o SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Você desenhou sua sequência de desbloqueio incorretamente <xliff:g id="NUMBER_0">%d</xliff:g> vezes. Se fizer mais <xliff:g id="NUMBER_1">%d</xliff:g> tentativas incorretas, será solicitado que você use o login do Google para desbloquear.\n\n Tente novamente em <xliff:g id="NUMBER_2">%d</xliff:g> segundos."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Remover"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Código PIN do SIM incorreto. Entre em contato com a operadora para desbloquear o dispositivo."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Código PIN do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>. Caso o código correto não seja digitado, será necessário entrar em contato com a operadora para desbloquear o dispositivo."</item>
+    <item quantity="other" msgid="2215723361575359486">"Código PIN do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"O SIM está inutilizável. Entre em contato com a operadora."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Código PUK do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g> Caso o código correto não seja digitado, o SIM se tornará permanentemente inutilizável."</item>
+    <item quantity="other" msgid="5477305226026342036">"Código PUK do SIM incorreto. Tentativas restantes: <xliff:g id="NUMBER">%d</xliff:g>. Caso o código correto não seja digitado, o SIM se tornará permanentemente inutilizável."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Falha na operação de PIN do SIM."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Falha na operação de PUK do SIM."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Código aceito."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Botão \"Faixa anterior\""</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Botão \"Próxima faixa\""</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Botão \"Pausar\""</string>
diff --git a/packages/Keyguard/res/values-rm/strings.xml b/packages/Keyguard/res/values-rm/strings.xml
index 8dda055..4d71f27 100644
--- a/packages/Keyguard/res/values-rm/strings.xml
+++ b/packages/Keyguard/res/values-rm/strings.xml
@@ -20,13 +20,15 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- no translation found for app_name (719438068451601849) -->
+    <skip />
     <!-- no translation found for keyguard_password_enter_pin_code (3037685796058495017) -->
     <skip />
-    <!-- no translation found for keyguard_password_enter_puk_code (4800725266925845333) -->
+    <!-- no translation found for keyguard_password_enter_puk_code (3035856550289724338) -->
     <skip />
-    <!-- no translation found for keyguard_password_enter_puk_prompt (1341112146710087048) -->
+    <!-- no translation found for keyguard_password_enter_puk_prompt (1801941051094974609) -->
     <skip />
-    <!-- no translation found for keyguard_password_enter_pin_prompt (8027680321614196258) -->
+    <!-- no translation found for keyguard_password_enter_pin_prompt (3201151840570492538) -->
     <skip />
     <!-- no translation found for keyguard_password_entry_touch_hint (7858547464982981384) -->
     <skip />
@@ -121,6 +123,20 @@
     <skip />
     <!-- no translation found for keyguard_accessibility_transport_stop_description (7656358482980912216) -->
     <skip />
+    <!-- no translation found for keyguard_accessibility_transport_thumbs_up_description (4535938129663903194) -->
+    <skip />
+    <!-- no translation found for keyguard_accessibility_transport_thumbs_down_description (8101433677192177861) -->
+    <skip />
+    <!-- no translation found for keyguard_accessibility_transport_heart_description (2336943232474689887) -->
+    <skip />
+    <!-- no translation found for keyguard_accessibility_show_bouncer (5425837272418176176) -->
+    <skip />
+    <!-- no translation found for keyguard_accessibility_hide_bouncer (7896992171878309358) -->
+    <skip />
+    <!-- no translation found for keyguard_accessibility_delete_widget_start (4096550552634391451) -->
+    <skip />
+    <!-- no translation found for keyguard_accessibility_delete_widget_end (508833506780909393) -->
+    <skip />
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -186,8 +202,6 @@
     <skip />
     <!-- no translation found for kg_sim_unlock_progress_dialog_message (8950398016976865762) -->
     <skip />
-    <!-- no translation found for kg_password_wrong_pin_code (1139324887413846912) -->
-    <skip />
     <!-- no translation found for kg_invalid_sim_pin_hint (8795159358110620001) -->
     <skip />
     <!-- no translation found for kg_invalid_sim_puk_hint (7553388325654369575) -->
@@ -234,6 +248,20 @@
     <skip />
     <!-- no translation found for kg_reordering_delete_drop_target_text (7899202978204438708) -->
     <skip />
+    <!-- no translation found for kg_password_wrong_pin_code_pukked (30531039455764924) -->
+    <skip />
+    <!-- no translation found for kg_password_wrong_pin_code:one (8134313997799638254) -->
+    <!-- no translation found for kg_password_wrong_pin_code:other (2215723361575359486) -->
+    <!-- no translation found for kg_password_wrong_puk_code_dead (7077536808291316208) -->
+    <skip />
+    <!-- no translation found for kg_password_wrong_puk_code:one (3256893607561060649) -->
+    <!-- no translation found for kg_password_wrong_puk_code:other (5477305226026342036) -->
+    <!-- no translation found for kg_password_pin_failed (6268288093558031564) -->
+    <skip />
+    <!-- no translation found for kg_password_puk_failed (2838824369502455984) -->
+    <skip />
+    <!-- no translation found for kg_pin_accepted (1448241673570020097) -->
+    <skip />
     <!-- no translation found for keyguard_transport_prev_description (8229108430245669854) -->
     <skip />
     <!-- no translation found for keyguard_transport_next_description (4299258300283778305) -->
diff --git a/packages/Keyguard/res/values-ro/activitystrings.xml b/packages/Keyguard/res/values-ro/activitystrings.xml
deleted file mode 100644
index 6d3447d..0000000
--- a/packages/Keyguard/res/values-ro/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Fără securitate"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Parolă"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Model"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Alegeți un widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ro/strings.xml b/packages/Keyguard/res/values-ro/strings.xml
index 01d79f8..58bc337 100644
--- a/packages/Keyguard/res/values-ro/strings.xml
+++ b/packages/Keyguard/res/values-ro/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Blocarea tastaturii"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduceţi codul PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduceţi codul PUK şi noul cod PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codul PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Noul cod PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Introduceți codul PUK pentru cardul SIM și codul PIN nou"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Codul PUK pentru cardul SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Codul PIN nou pentru cardul SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Atingeţi şi introduceţi parola"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introduceţi parola pentru a debloca"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introduceţi codul PIN pentru a debloca"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Butonul Întrerupeți"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Butonul Redați"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Butonul Opriți"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Vot pozitiv"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Vot negativ"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Inimă"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Deblocați pentru a continua"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Lansare anulată"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Eliberați <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> pentru a șterge."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Widgetul <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> nu va fi șters."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduceţi codul PIN dorit"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmaţi codul PIN dorit"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Se deblochează cardul SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Cod PIN incorect."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceţi un cod PIN format din 4 până la 8 cifre."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Codul PUK trebuie să aibă minimum 8 cifre."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Reintroduceţi codul PUK corect. Încercările repetate vor dezactiva definitiv cardul SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Aţi desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%d</xliff:g> încercări nereuşite, vi se va solicita să deblocaţi telefonul cu ajutorul unui cont de e-mail.\n\n Încercaţi din nou peste <xliff:g id="NUMBER_2">%d</xliff:g> (de) secunde."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminaţi"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Codul PIN pentru cardul SIM este incorect. Contactați operatorul pentru a vă debloca dispozitivul."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Codul PIN pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercare, după care va trebui să contactați operatorul pentru a vă debloca dispozitivul."</item>
+    <item quantity="other" msgid="2215723361575359486">"Codul PIN pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercări."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Cardul SIM nu poate fi utilizat. Contactați operatorul."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Codul PUK pentru cardul SIM este incorect. V-a mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercare până când cardul SIM va deveni inutilizabil definitiv."</item>
+    <item quantity="other" msgid="5477305226026342036">"Codul PUK pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER">%d</xliff:g> încercări până când cardul SIM va deveni inutilizabil definitiv."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Deblocarea cu ajutorul codului PIN pentru cardul SIM nu a reușit!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Deblocarea cu ajutorul codului PUK pentru cardul SIM nu a reușit!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Cod acceptat!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Butonul Melodia anterioară"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Butonul Melodia următoare"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Butonul Întrerupeți"</string>
diff --git a/packages/Keyguard/res/values-ru/activitystrings.xml b/packages/Keyguard/res/values-ru/activitystrings.xml
deleted file mode 100644
index 002cd56..0000000
--- a/packages/Keyguard/res/values-ru/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Защита отключена"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Графический ключ"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карты"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карты"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Выбор виджета..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-ru/strings.xml b/packages/Keyguard/res/values-ru/strings.xml
index 136982a..866abc0 100644
--- a/packages/Keyguard/res/values-ru/strings.xml
+++ b/packages/Keyguard/res/values-ru/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Введите PIN-код"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Введите PUK-код и новый PIN-код"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-код"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новый PIN-код"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Введите PUK-код и новый PIN-код"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK-код"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Новый PIN-код"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Нажмите для ввода пароля"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Введите пароль"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Введите PIN-код"</string>
@@ -42,7 +43,7 @@
     <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM-карта отсутствует или недоступна. Вставьте SIM-карту."</string>
     <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM-карта непригодна."</string>
     <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"SIM-карта окончательно заблокирована.\nЧтобы получить новую, обратитесь к своему оператору."</string>
-    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта заблокирована."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта заблокирована"</string>
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Для разблокировки SIM-карты требуется PUK-код."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Разблокировка SIM-карты…"</string>
     <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Виджет %2$d из %3$d."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Кнопка паузы"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Кнопка воспроизведения"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Кнопка выключения"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Нравится"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Не нравится"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Рейтинг"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Разблокируйте экран, чтобы продолжить."</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Запуск отменен."</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Отпустите виджет \"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>\", чтобы удалить его."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Виджет \"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>\" не будет удален."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"АБВ"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Введите желаемый PIN-код"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Введите PIN-код ещё раз"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Разблокировка SIM-карты…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неверный PIN-код."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введите PIN-код (от 4 до 8 цифр)."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код должен содержать не менее 8 символов."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Введите правильный PUK-код. После нескольких неудачных попыток SIM-карта будет заблокирована."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Вы <xliff:g id="NUMBER_0">%d</xliff:g> раз неверно указали графический ключ. После <xliff:g id="NUMBER_1">%d</xliff:g> неверных попыток для разблокировки телефона потребуется войти в аккаунт Google.\n\nПовтор через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Удалить"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Неверный PIN-код. Обратитесь к оператору связи, чтобы разблокировать SIM-карту."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Неверный PIN-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована и вам придется обратиться к оператору связи."</item>
+    <item quantity="other" msgid="2215723361575359486">"Неверный PIN-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-карта заблокирована навсегда. Обратитесь к оператору связи."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Неверный PUK-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована навсегда."</item>
+    <item quantity="other" msgid="5477305226026342036">"Неверный PUK-код. Осталось попыток: <xliff:g id="NUMBER">%d</xliff:g>. После этого SIM-карта будет заблокирована навсегда."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Не удалось разблокировать SIM-карту"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Не удалось разблокировать SIM-карту"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Код принят"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Кнопка перехода к предыдущему треку"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Кнопка перехода к следующему треку"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Кнопка паузы"</string>
diff --git a/packages/Keyguard/res/values-si-rLK/strings.xml b/packages/Keyguard/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..8904c7e
--- /dev/null
+++ b/packages/Keyguard/res/values-si-rLK/strings.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK සහ නව PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK කේතය"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"නව PIN කේතය"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"මුරපදය ටයිප් කිරීමට ස්පර්ශ කරන්න"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"අගුළු ඇරීමට මුරපදය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"අගුළු හැරීමට PIN එක ටයිප් කරන්න"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"වැරදි PIN කේතයකි."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"අගුළු ඇරීමට, මෙනුව ඔබා පසුව 0 ද ඔබන්න."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"මුහුණ භාවිතයෙන් අඟුළු හැරීමේ උපරිම ප්‍රයන්තයන් ගණන ඉක්මවා ඇත"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"අරෝපිතයි"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"ආරෝපණය වෙමින්, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"ඔබගේ ආරෝපකයට සම්බන්ධ කරන්න."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"අගුළු ඇරීමට මෙනුව ඔබන්න."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"ජාල අගුළු දමා ඇත"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM පත නොමැත"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ටැබ්ලටයේ SIM පත නොමැත."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"දුරකථනය තුල SIM පතක් නැත."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM පත ඇතුල් කරන්න."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM පත නොමැත හෝ කියවිය නොහැක. SIM පතක් ඇතුල් කරන්න."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"භාවිතා කළ නොහැකි SIM පත."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"ඔබගේ SIM පත ස්ථිරව අබල කර ඇත.\n වෙනත් SIM පතක් සඳහා ඔබගේ නොරැහැන් සේවා සැපයුම්කරු සම්බන්ධ කරගන්න."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM පත අගුළු දමා ඇත."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM පත PUK අගුළු ලා ඇත."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM පත අගුළු හරිමින්..."</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for keyguard_accessibility_widget_changed (5678624624681400191) -->
+    <skip />
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"විජටය එකතු කරන්න."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"හිස්"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"අගුළු අරින ප්‍රදේශය විදහා ඇත."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"අගුළු අරින ප්‍රදේශය හැකිලී ඇත."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජට්."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"පරිශීලක තෝරන්නා"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"තත්වය"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"කැමරාව"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"මාධ්‍ය පාලක"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"විජටය නැවත අනුපිළිවෙළට සැකසිම ඇරඹුණි."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"විජට් නැවත අනුපිළිවෙලට සැකසීම අවසානය."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජටය මැකී ඇත."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"අගුළු නොදැමූ ප්‍රදේශය පුළුල් කරන්න."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"සර්පණ අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"රටා අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"මුහුණ භාවිතයෙන් අඟුළු හැරීම."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"මුරපද අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"රටා ප්‍රදේශය."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"සර්පණ ප්‍රදේශය."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"පෙර ගීත බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"ඉදිරි ගීත බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"විරාම බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"ධාවක බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"නැවතීමේ බොත්තම"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"අවලංගු කරන්න"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"මකන්න"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"හරි"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ආකාරය වෙනස් කරන්න"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ඇතුල් කරන්න"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"අඟුල අරින්න"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"කැමරාව"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"නිහඬ"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"ශබ්ද සක්‍රීය කරන්න"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"සෙවීම"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා උඩට සර්පණය කරන්න."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා පහලට සර්පණය කරන්න."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා වමට සර්පණය කරන්න."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා දකුණට සර්පණය කරන්න."</string>
+    <string name="user_switched" msgid="3768006783166984410">"දැනට සිටින පරිශීලකයා <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"හදිසි ඇමතුම"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"රටාව අමතකයි"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"වැරදි රටාවකි"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"වැරදි මුරපදය"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN එක වැරදියි"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"තත්පර <xliff:g id="NUMBER">%d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"ඔබගේ රටාව අඳින්න"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN ඇතුලු කරන්න"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN එක ඇතුළු කරන්න"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"මුරපදය ඇතුළු කරන්න"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"දැන් SIM එක අබල කර ඇත. ඉදිරියට යාමට PUK කේතය යොදන්න. විස්තර සඳහා වාහකයා අමතන්න."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"අපේක්ෂිත PIN කේතය ඇතුළත් කරන්න"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"අපේක්ෂිත PIN කේතය ස්ථිර කරන්න"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM පත අගුළු අරිමින්..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"වැරදි PIN කේතයකි."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"අංක 4 සිට 8 අතර වන PIN එකක් ටයිප් කරන්න."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK කේතය සංඛ්‍යා 8 ක් හෝ වැඩි විය යුතුය."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"නිවැරදි PUK කේතය නැවත ඇතුලත් කරන්න. නැවත නැවත උත්සාහ කිරීමෙන් SIM එක ස්ථිරවම අබල කරයි."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN කේත ගැලපී නැත"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"රටා උත්සාහ කිරීම් වැඩිය"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"අගුළු ඇරීමට, ඔබගේ Google ගිණුම සමග පුරනය වන්න."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"පරිශීලක නාමය (ඊ-තැපෑල)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"මුරපදය"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"පුරනය වන්න"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"වලංගු නොවන පරිශීලක නාමයක් හෝ මුරපදයක්."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ඔබගේ පරිශීලක නාමය හෝ මුරපදය අමතකද?\n "<b>"google.com/accounts/recovery"</b>" වෙත යන්න."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"ගිණුම පරීක්ෂා කරමින්…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ඔබ PIN අංකය <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් වැරදියට ටයිප් කොට ඇත.\n\n තත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ මුරපදය ඔබ වැරදියට ටයිප් කර ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ඔබ <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් අගුළු ඇරීමේ රටාව වැරදියට ඇඳ ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ඔබ ටැබ්ලටය අගුළු හැරීමට වැරදියට අවස්ථා <xliff:g id="NUMBER_0">%d</xliff:g> ක් උත්සාහ කර ඇත. අවස්ථා <xliff:g id="NUMBER_1">%d</xliff:g> ක් අසාර්ථකව උත්සහ කිරීමකින් පසුව, කර්මාන්ත ශාලා මුල් තත්වයට නැවත පත් වන අතර සියලු පරිශීලක දත්ත නැති වෙයි."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER_0">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. තවත් අසාර්ථක ප්‍රයත්න <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, දුරකථනය කර්මාන්ත ශාලාවේ සුපුරුද්දට යළි පිහිටුවන අතර සියලුම පරිශීලක දත්ත නැති වී යයි."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ටැබ්ලටයේ අගුළු ඇරීමට ඔබ වැරදි ප්‍රයත්න <xliff:g id="NUMBER">%d</xliff:g> වාරයක් ගෙන ඇත. දැන් ටැබ්ලටය කර්මාන්ත ශාලා සුපුරුද්ද වෙත යළි පිහිටුවීම කෙරේ."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER">%d</xliff:g> කදී වැරදී ප්‍රයන්තයන් ගෙන තිබේ. දැන් දුරකථනය කර්මාන්තශාලා සුපුරුද්දට පිහිටුවනු ලබයි."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ඔබ අගුළු ඇරිමේ රටාව <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් වැරදියට ඇඳ ඇත. තවත් අසාර්ථක උත්සාහ <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, ඊ-තැපැල් ගිණුම භාවිතා කරමින් ඔබගේ ටැබ්ලටයේ අගුළු ඇරීමට ඔබට පවසනු ඇත.\n\n නැවත තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> කින් උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ ඊ-තැපැල් ලිපිනය භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> න් පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"ඉවත් කරන්න"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"පෙර ගීත බොත්තම"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"ඉදිරි ගීත යතුර"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"විරාම බොත්තම"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"ධාවන බොත්තම"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"නැවතුම් බොත්තම"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"සේවාව නැත."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-si/strings.xml b/packages/Keyguard/res/values-si/strings.xml
new file mode 100644
index 0000000..8904c7e
--- /dev/null
+++ b/packages/Keyguard/res/values-si/strings.xml
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK සහ නව PIN කේතය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK කේතය"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"නව PIN කේතය"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"මුරපදය ටයිප් කිරීමට ස්පර්ශ කරන්න"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"අගුළු ඇරීමට මුරපදය ටයිප් කරන්න"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"අගුළු හැරීමට PIN එක ටයිප් කරන්න"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"වැරදි PIN කේතයකි."</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"අගුළු ඇරීමට, මෙනුව ඔබා පසුව 0 ද ඔබන්න."</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"මුහුණ භාවිතයෙන් අඟුළු හැරීමේ උපරිම ප්‍රයන්තයන් ගණන ඉක්මවා ඇත"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"අරෝපිතයි"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"ආරෝපණය වෙමින්, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"ඔබගේ ආරෝපකයට සම්බන්ධ කරන්න."</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"අගුළු ඇරීමට මෙනුව ඔබන්න."</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"ජාල අගුළු දමා ඇත"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"SIM පත නොමැත"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"ටැබ්ලටයේ SIM පත නොමැත."</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"දුරකථනය තුල SIM පතක් නැත."</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"SIM පත ඇතුල් කරන්න."</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"SIM පත නොමැත හෝ කියවිය නොහැක. SIM පතක් ඇතුල් කරන්න."</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"භාවිතා කළ නොහැකි SIM පත."</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"ඔබගේ SIM පත ස්ථිරව අබල කර ඇත.\n වෙනත් SIM පතක් සඳහා ඔබගේ නොරැහැන් සේවා සැපයුම්කරු සම්බන්ධ කරගන්න."</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM පත අගුළු දමා ඇත."</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM පත PUK අගුළු ලා ඇත."</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM පත අගුළු හරිමින්..."</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for keyguard_accessibility_widget_changed (5678624624681400191) -->
+    <skip />
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"විජටය එකතු කරන්න."</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"හිස්"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"අගුළු අරින ප්‍රදේශය විදහා ඇත."</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"අගුළු අරින ප්‍රදේශය හැකිලී ඇත."</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජට්."</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"පරිශීලක තෝරන්නා"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"තත්වය"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"කැමරාව"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"මාධ්‍ය පාලක"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"විජටය නැවත අනුපිළිවෙළට සැකසිම ඇරඹුණි."</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"විජට් නැවත අනුපිළිවෙලට සැකසීම අවසානය."</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> විජටය මැකී ඇත."</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"අගුළු නොදැමූ ප්‍රදේශය පුළුල් කරන්න."</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"සර්පණ අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"රටා අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"මුහුණ භාවිතයෙන් අඟුළු හැරීම."</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"මුරපද අගුළු ඇරීම."</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"රටා ප්‍රදේශය."</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"සර්පණ ප්‍රදේශය."</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"පෙර ගීත බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"ඉදිරි ගීත බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"විරාම බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"ධාවක බොත්තම"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"නැවතීමේ බොත්තම"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"අවලංගු කරන්න"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"මකන්න"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"හරි"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"ආකාරය වෙනස් කරන්න"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"ඇතුල් කරන්න"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"අඟුල අරින්න"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"කැමරාව"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"නිහඬ"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"ශබ්ද සක්‍රීය කරන්න"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"සෙවීම"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා උඩට සර්පණය කරන්න."</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා පහලට සර්පණය කරන්න."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා වමට සර්පණය කරන්න."</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> සඳහා දකුණට සර්පණය කරන්න."</string>
+    <string name="user_switched" msgid="3768006783166984410">"දැනට සිටින පරිශීලකයා <xliff:g id="NAME">%1$s</xliff:g>."</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"හදිසි ඇමතුම"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"රටාව අමතකයි"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"වැරදි රටාවකි"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"වැරදි මුරපදය"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN එක වැරදියි"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"තත්පර <xliff:g id="NUMBER">%d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"ඔබගේ රටාව අඳින්න"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"SIM PIN ඇතුලු කරන්න"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"PIN එක ඇතුළු කරන්න"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"මුරපදය ඇතුළු කරන්න"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"දැන් SIM එක අබල කර ඇත. ඉදිරියට යාමට PUK කේතය යොදන්න. විස්තර සඳහා වාහකයා අමතන්න."</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"අපේක්ෂිත PIN කේතය ඇතුළත් කරන්න"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"අපේක්ෂිත PIN කේතය ස්ථිර කරන්න"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM පත අගුළු අරිමින්..."</string>
+    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"වැරදි PIN කේතයකි."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"අංක 4 සිට 8 අතර වන PIN එකක් ටයිප් කරන්න."</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK කේතය සංඛ්‍යා 8 ක් හෝ වැඩි විය යුතුය."</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"නිවැරදි PUK කේතය නැවත ඇතුලත් කරන්න. නැවත නැවත උත්සාහ කිරීමෙන් SIM එක ස්ථිරවම අබල කරයි."</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN කේත ගැලපී නැත"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"රටා උත්සාහ කිරීම් වැඩිය"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"අගුළු ඇරීමට, ඔබගේ Google ගිණුම සමග පුරනය වන්න."</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"පරිශීලක නාමය (ඊ-තැපෑල)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"මුරපදය"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"පුරනය වන්න"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"වලංගු නොවන පරිශීලක නාමයක් හෝ මුරපදයක්."</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"ඔබගේ පරිශීලක නාමය හෝ මුරපදය අමතකද?\n "<b>"google.com/accounts/recovery"</b>" වෙත යන්න."</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"ගිණුම පරීක්ෂා කරමින්…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"ඔබ PIN අංකය <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් වැරදියට ටයිප් කොට ඇත.\n\n තත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"<xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ මුරපදය ඔබ වැරදියට ටයිප් කර ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ට පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"ඔබ <xliff:g id="NUMBER_0">%d</xliff:g> වාරයක් අගුළු ඇරීමේ රටාව වැරදියට ඇඳ ඇත. \n\nතත්පර <xliff:g id="NUMBER_1">%d</xliff:g> ක් ඇතුළත නැවත උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"ඔබ ටැබ්ලටය අගුළු හැරීමට වැරදියට අවස්ථා <xliff:g id="NUMBER_0">%d</xliff:g> ක් උත්සාහ කර ඇත. අවස්ථා <xliff:g id="NUMBER_1">%d</xliff:g> ක් අසාර්ථකව උත්සහ කිරීමකින් පසුව, කර්මාන්ත ශාලා මුල් තත්වයට නැවත පත් වන අතර සියලු පරිශීලක දත්ත නැති වෙයි."</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER_0">%d</xliff:g> කදී වැරදී ප්‍රයත්නයන් ගෙන තිබේ. තවත් අසාර්ථක ප්‍රයත්න <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, දුරකථනය කර්මාන්ත ශාලාවේ සුපුරුද්දට යළි පිහිටුවන අතර සියලුම පරිශීලක දත්ත නැති වී යයි."</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"ටැබ්ලටයේ අගුළු ඇරීමට ඔබ වැරදි ප්‍රයත්න <xliff:g id="NUMBER">%d</xliff:g> වාරයක් ගෙන ඇත. දැන් ටැබ්ලටය කර්මාන්ත ශාලා සුපුරුද්ද වෙත යළි පිහිටුවීම කෙරේ."</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"ඔබ දුරකථනය අගුළු ඇරීමට වාර <xliff:g id="NUMBER">%d</xliff:g> කදී වැරදී ප්‍රයන්තයන් ගෙන තිබේ. දැන් දුරකථනය කර්මාන්තශාලා සුපුරුද්දට පිහිටුවනු ලබයි."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"ඔබ අගුළු ඇරිමේ රටාව <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් වැරදියට ඇඳ ඇත. තවත් අසාර්ථක උත්සාහ <xliff:g id="NUMBER_1">%d</xliff:g> කින් පසුව, ඊ-තැපැල් ගිණුම භාවිතා කරමින් ඔබගේ ටැබ්ලටයේ අගුළු ඇරීමට ඔබට පවසනු ඇත.\n\n නැවත තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> කින් උත්සාහ කරන්න."</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"ඔබ වැරදියට <xliff:g id="NUMBER_0">%d</xliff:g> වතාවක් ඔබගේ අගුළු හැරීමේ රටාව ඇඳ ඇත. අසාර්ථක උත්සහ කිරීම් <xliff:g id="NUMBER_1">%d</xliff:g> න් පසුව, ඔබගේ ඊ-තැපැල් ලිපිනය භාවිතයෙන් ඔබගේ දුරකථනය අගුළු හැරීමට ඔබගෙන් අසයි.\n\n තත්පර <xliff:g id="NUMBER_2">%d</xliff:g> න් පසුව නැවත උත්සහ කරන්න."</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"ඉවත් කරන්න"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"පෙර ගීත බොත්තම"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"ඉදිරි ගීත යතුර"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"විරාම බොත්තම"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"ධාවන බොත්තම"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"නැවතුම් බොත්තම"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"සේවාව නැත."</string>
+</resources>
diff --git a/packages/Keyguard/res/values-sk/activitystrings.xml b/packages/Keyguard/res/values-sk/activitystrings.xml
deleted file mode 100644
index 33f2228..0000000
--- a/packages/Keyguard/res/values-sk/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Bez zabezpečenia"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"Kód PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Heslo"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Vzor"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN karty SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK karty SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Vyberte miniaplikáciu..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sk/strings.xml b/packages/Keyguard/res/values-sk/strings.xml
index 4b2e1e3..45e4288 100644
--- a/packages/Keyguard/res/values-sk/strings.xml
+++ b/packages/Keyguard/res/values-sk/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Zámka klávesnice"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Zadajte kód PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Zadajte kód PUK a nový kód PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Kód PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nový kód PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Zadajte kód PUK karty SIM a nový kód PIN"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Kód PUK karty SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nový kód PIN karty SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotknutím zadajte heslo"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Zadajte heslo na odomknutie"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Zadajte kód PIN na odomknutie"</string>
@@ -35,7 +36,7 @@
     <string name="keyguard_low_battery" msgid="8143808018719173859">"Pripojte nabíjačku."</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Telefón odomknete stlačením tlačidla Menu."</string>
     <string name="keyguard_network_locked_message" msgid="9169717779058037168">"Sieť je zablokovaná"</string>
-    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nie je vložená karta SIM."</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"Nie je vložená karta SIM"</string>
     <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"V tablete nie je žiadna karta SIM."</string>
     <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"V telefóne nie je žiadna karta SIM."</string>
     <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"Vložte kartu SIM."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Tlačidlo Pozastaviť"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Tlačidlo Prehrať"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Tlačidlo Zastaviť"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Páči sa mi"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Nepáči sa mi"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Srdce"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Odomknite zariadenie a pokračujte"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Spustenie bolo zrušené"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Uvoľnením dotyku miniaplikáciu <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> odstránite."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Miniaplikácia <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> nebude odstránená."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Zadajte požadovaný kód PIN"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potvrďte požadovaný kód PIN"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Prebieha odomykanie karty SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Nesprávny kód PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Zadajte kód PIN s dĺžkou 4 až 8 číslic."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Kód PUK musí obsahovať 8 alebo viac číslic."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Znova zadajte správny kód PUK. Opakované pokusy zakážu kartu SIM natrvalo."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"<xliff:g id="NUMBER_0">%d</xliff:g>-krát ste nesprávne nakreslili svoj bezpečnostný vzor. Po <xliff:g id="NUMBER_1">%d</xliff:g> ďalších neúspešných pokusoch sa zobrazí výzva na odomknutie telefónu pomocou e-mailového účtu.\n\n Skúste to znova o <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Odstrániť"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Nesprávny kód PIN karty SIM. Teraz musíte kontaktovať svojho operátora, aby vám odomkol zariadenie."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Nesprávny kód PIN karty SIM. Zostáva vám <xliff:g id="NUMBER">%d</xliff:g> pokus, inak budete musieť kontaktovať svojho operátora, aby vám odomkol zariadenie."</item>
+    <item quantity="other" msgid="2215723361575359486">"Nesprávny kód PIN karty SIM. Počet zostávajúcich pokusov: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Karta SIM je nepoužiteľná. Kontaktujte svojho operátora."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Nesprávny kód PUK karty SIM. Zostáva vám <xliff:g id="NUMBER">%d</xliff:g> pokus, inak sa vaša karta SIM natrvalo zablokuje."</item>
+    <item quantity="other" msgid="5477305226026342036">"Nesprávny kód PUK karty SIM. Počet zostávajúcich pokusov pred trvalým zablokovaním karty SIM: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Operácia kódu PIN karty SIM zlyhala!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Operácia kódu PUK karty SIM zlyhala!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kód bol prijatý!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Tlačidlo Predchádzajúca stopa"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Tlačidlo Ďalšia stopa"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Tlačidlo Pozastaviť"</string>
diff --git a/packages/Keyguard/res/values-sl/activitystrings.xml b/packages/Keyguard/res/values-sl/activitystrings.xml
deleted file mode 100644
index 2c60219..0000000
--- a/packages/Keyguard/res/values-sl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Brez varnosti"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Geslo"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Vzorec"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN za kartico SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK za kartico SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Izberite pripomoček ..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sl/strings.xml b/packages/Keyguard/res/values-sl/strings.xml
index b6cfc1c..cf72e47 100644
--- a/packages/Keyguard/res/values-sl/strings.xml
+++ b/packages/Keyguard/res/values-sl/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Vnesite kodo PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Vnesite kodo PUK in novo kodo PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Koda PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Nova koda PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Vnesite kodo PUK in novo kodo PIN kartice SIM"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Koda PUK kartice SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Nova koda PIN kartice SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Dotaknite se za vnos gesla"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Vnesite geslo za odklepanje"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Vnesite PIN za odklepanje"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Gumb za začasno ustavitev"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Gumb za predvajanje"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Gumb za ustavitev"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Všeč mi je"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Ni mi všeč"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Srce"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Za nadaljevanje odklenite"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Zagon je preklican"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Izpustite pripomoček <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>, da ga izbrišete."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Pripomoček <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ne bo izbrisan."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Vnesite želeno kodo PIN"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Potrdite želeno kodo PIN"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Odklepanje kartice SIM ..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Napačna koda PIN."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Vnesite PIN, ki vsebuje od štiri do osem številk."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Koda PUK mora vsebovati 8 ali več števk."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Vnovič vnesite pravilno kodo PUK. Večkratni poskusi bodo trajno onemogočili kartico SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Vzorec za odklepanje ste <xliff:g id="NUMBER_0">%d</xliff:g>-krat napačno vnesli. Po nadaljnjih <xliff:g id="NUMBER_1">%d</xliff:g> neuspešnih poskusih boste pozvani, da odklenete telefon z Googlovimi podatki za prijavo.\n\nPoskusite znova čez <xliff:g id="NUMBER_2">%d</xliff:g> s."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Odstrani"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Napačna koda PIN kartice SIM. Zdaj se boste morali za odklenitev naprave obrniti na operaterja."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Napačna koda PIN kartice SIM. Na voljo imate še <xliff:g id="NUMBER">%d</xliff:g> poskus. Potem se boste morali za odklenitev naprave obrniti na operaterja."</item>
+    <item quantity="other" msgid="2215723361575359486">"Napačna koda PIN kartice SIM. Poskusite lahko še <xliff:g id="NUMBER">%d</xliff:g>-krat."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Kartica SIM ni več uporabna. Obrnite se na operaterja."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Napačna koda PUK kartice SIM. Na voljo imate še <xliff:g id="NUMBER">%d</xliff:g> poskus. Potem bo kartica SIM postala trajno neuporabna."</item>
+    <item quantity="other" msgid="5477305226026342036">"Napačna koda PUK kartice SIM. Poskusite lahko še <xliff:g id="NUMBER">%d</xliff:g>-krat. Potem bo kartica SIM postala trajno neuporabna."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Postopek za odklepanje s kodo PIN kartice SIM ni uspel."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Postopek za odklepanje s kodo PUK kartice SIM ni uspel."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Koda je sprejeta."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Gumb za prejšnjo skladbo"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Gumb za naslednjo skladbo"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Gumb za začasno ustavitev"</string>
diff --git a/packages/Keyguard/res/values-sr/activitystrings.xml b/packages/Keyguard/res/values-sr/activitystrings.xml
deleted file mode 100644
index 34802df..0000000
--- a/packages/Keyguard/res/values-sr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Без заштите"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Лозинка"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Шаблон"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN SIM картице"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK SIM картице"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Изабери виџет..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sr/strings.xml b/packages/Keyguard/res/values-sr/strings.xml
index 664b85e..bd08eae 100644
--- a/packages/Keyguard/res/values-sr/strings.xml
+++ b/packages/Keyguard/res/values-sr/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Заштита тастера"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Унесите PIN кôд"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Унесите PUK и нови PIN кôд"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK кôд"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Нови PIN кôд"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Унесите SIM PUK кôд и нови PIN кôд"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK кôд"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Нови SIM PIN кôд"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Додирните да бисте унели лозинку"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Откуцајте лозинку да бисте откључали"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Унесите PIN за откључавање"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Дугме за паузу"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Дугме за репродукцију"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Дугме за заустављање"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Свиђа ми се"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Не свиђа ми се"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Срце"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Откључајте да бисте наставили"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Покретање је отказано"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Отпустите виџет <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> да бисте га избрисали."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Виџет <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> неће бити избрисан."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,14 +113,13 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Унесите жељени PIN кôд"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Потврдите жељени PIN кôд"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Откључавање SIM картице…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN кôд је нетачан."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Унесите PIN који има од 4 до 8 бројева."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK кôд треба да има 8 или више бројева."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Поново унесите исправни PUK кôд. Поновљени покушаји ће трајно онемогућити SIM."</string>
     <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN кодови се не подударају"</string>
     <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Превише покушаја уноса шаблона"</string>
     <string name="kg_login_instructions" msgid="1100551261265506448">"Да бисте откључали, пријавите се помоћу Google налога."</string>
-    <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (адреса е-поште)"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"Корисничко име (имејл адреса)"</string>
     <string name="kg_login_password_hint" msgid="9057289103827298549">"Лозинка"</string>
     <string name="kg_login_submit_button" msgid="5355904582674054702">"Пријави ме"</string>
     <string name="kg_login_invalid_input" msgid="5754664119319872197">"Неважеће корисничко име или лозинка."</string>
@@ -129,10 +136,23 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Нацртали сте шаблон за откључавање неисправно <xliff:g id="NUMBER_0">%d</xliff:g> пута. После још <xliff:g id="NUMBER_1">%d</xliff:g> неуспешна(их) покушаја, од вас ће бити затражено да откључате телефон помоћу налога е-поште.\n\nПокушајте поново за <xliff:g id="NUMBER_2">%d</xliff:g> секунде(и)."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Уклони"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Нетачан SIM PIN кôд. Сада морате да контактирате мобилног оператера да бисте откључали уређај."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Нетачан SIM PIN кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушај, а онда морате да контактирате мобилног оператера да бисте откључали уређај."</item>
+    <item quantity="other" msgid="2215723361575359486">"Нетачан SIM PIN кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушаја."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM картица је неупотребљива. Контактирајте мобилног оператера."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Нетачан SIM PUK кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушај пре него што SIM картица постане трајно неупотребљива."</item>
+    <item quantity="other" msgid="5477305226026342036">"Нетачан SIM PUK кôд. Имате још <xliff:g id="NUMBER">%d</xliff:g> покушаја пре него што SIM картица постане трајно неупотребљива."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Радња са SIM PIN кодом није успела!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Радња са SIM PUK кодом није успела!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Кôд је прихваћен!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Дугме за претходну песму"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Дугме за следећу песму"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Дугме за паузу"</string>
     <string name="keyguard_transport_play_description" msgid="2924628863741150956">"Дугме за репродукцију"</string>
     <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"Дугме за заустављање"</string>
-    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Ван мреже сте."</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"Офлајн сте."</string>
 </resources>
diff --git a/packages/Keyguard/res/values-sv/activitystrings.xml b/packages/Keyguard/res/values-sv/activitystrings.xml
deleted file mode 100644
index e664383..0000000
--- a/packages/Keyguard/res/values-sv/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Ingen säkerhet"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN-kod"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Lösenord"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Grafiskt lösenord"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-kod för SIM-kort"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-kod för SIM-kort"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Välj widget ..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sv/strings.xml b/packages/Keyguard/res/values-sv/strings.xml
index fb0f912..1214100 100644
--- a/packages/Keyguard/res/values-sv/strings.xml
+++ b/packages/Keyguard/res/values-sv/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ange PIN-kod"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ange PUK-koden och en ny PIN-kod"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-kod"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Ny PIN-kod"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Ange PUK-koden och en ny pinkod för SIM-kortet"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK-kod för SIM-kortet"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Ny pinkod för SIM-kort"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Tryck om du vill ange lösenord"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Ange lösenord för att låsa upp"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ange PIN-kod för att låsa upp"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Pausknappen"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Uppspelningsknappen"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Stoppknappen"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Gillar"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Tummen ned"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Hjärta"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Lås upp om du vill fortsätta"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Lanseringen har avbrutits"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Ta bort genom att släppa <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> här."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> kommer inte att tas bort."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ange önskad PIN-kod"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Bekräfta önskad PIN-kod"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Låser upp SIM-kort …"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Fel PIN-kod."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Ange en PIN-kod med 4 till 8 siffror."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-koden ska vara minst åtta siffror."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ange rätt PUK-kod igen. Om försöken upprepas inaktiveras SIM-kortet permanent."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Du har ritat ditt grafiska lösenord fel <xliff:g id="NUMBER_0">%d</xliff:g> gånger. Efter ytterligare <xliff:g id="NUMBER_1">%d</xliff:g> försök ombeds du låsa upp mobilen med hjälp av ett e-postkonto.\n\n Försök igen om <xliff:g id="NUMBER_2">%d</xliff:g> sekunder."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Ta bort"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Du angav fel pinkod för SIM-kortet och måste nu kontakta operatören för att låsa upp enheten."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår innan du måste kontakta operatören för att låsa upp enheten."</item>
+    <item quantity="other" msgid="2215723361575359486">"Du angav fel pinkod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-kortet är obrukbart. Kontakta operatören."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart."</item>
+    <item quantity="other" msgid="5477305226026342036">"Du angav fel PUK-kod för SIM-kortet. <xliff:g id="NUMBER">%d</xliff:g> försök återstår innan SIM-kortet blir obrukbart."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Det gick inte att låsa upp med pinkoden för SIM-kortet."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Det gick inte att låsa upp med PUK-koden för SIM-kortet."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Koden godkändes!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Knapp för föregående spår"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Knapp för nästa spår"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Pausknappen"</string>
diff --git a/packages/Keyguard/res/values-sw/activitystrings.xml b/packages/Keyguard/res/values-sw/activitystrings.xml
deleted file mode 100644
index 357b911..0000000
--- a/packages/Keyguard/res/values-sw/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Hakuna usalama"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Nenosiri"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Ruwaza"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN ya SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK ya SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Chagua wijeti..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-sw/strings.xml b/packages/Keyguard/res/values-sw/strings.xml
index 27f1f30..fc1ce17 100644
--- a/packages/Keyguard/res/values-sw/strings.xml
+++ b/packages/Keyguard/res/values-sw/strings.xml
@@ -20,17 +20,18 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Kilinda vitufe"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Ingiza msimbo wa PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Ingiza PUK na msimbo mpya wa PIN"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Msimbo wa PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Msimbo mpya wa PIN"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Chapa PUK ya SIM na msimbo mpya wa PIN"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Msimbo wa PUK ya SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Msimbo mpya wa PIN ya SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Gusa kuingiza nenosiri "</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Charaza nenosiri ili kufungua"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Ingiza PIN ili kufungua"</string>
     <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Msimbo wa PIN usio sahihi."</string>
     <string name="keyguard_label_text" msgid="861796461028298424">"Ili kufungua, bofya Menyu kisha 0."</string>
     <string name="faceunlock_multiple_failures" msgid="754137583022792429">"Majaribio ya Juu ya Kufungua Uso yamezidishwa"</string>
-    <string name="keyguard_charged" msgid="3272223906073492454">"Imechajiwa"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"Betri imejaa"</string>
     <string name="keyguard_plugged_in" msgid="8117572000639998388">"Inachaji, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="keyguard_low_battery" msgid="8143808018719173859">"Unganisha chaja yako."</string>
     <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"Bonyeza Menyu ili kufungua."</string>
@@ -45,8 +46,8 @@
     <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kadi imefungwa."</string>
     <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kadi imefungwa na PUK."</string>
     <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Inafungua SIM kadi..."</string>
-    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Wiji %2$d ya %3$d."</string>
-    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ongeza wiji"</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s. Wijeti %2$d ya %3$d."</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"Ongeza wijeti."</string>
     <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"Tupu"</string>
     <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"Eneo la kufungua limepanuliwa."</string>
     <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"Eneo la kufungua limekunjwa."</string>
@@ -55,7 +56,7 @@
     <string name="keyguard_accessibility_status" msgid="8008264603935930611">"Hali"</string>
     <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"Kamera"</string>
     <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"Vidhibiti vya media"</string>
-    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Upangaji upya wa wiji umeanza."</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"Upangaji upya wa wijeti umeanza."</string>
     <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"Upangaji upya wa wiji umekamilika."</string>
     <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"Wiji <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> imefutwa."</string>
     <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"Panua eneo la kufungua."</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Kitufe cha kusitisha"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Kitufe cha kucheza"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Kitufe cha kusitisha"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Bomba"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Si bomba"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Moyo"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Fungua ili uendelee"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Uzinduzi umeghairiwa"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Dondosha <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ili ufute."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> haitafutwa."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ingiza msimbo wa PIN unaopendelewa"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Thibitisha msimbo wa PIN unaopendelewa"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Inafungua SIM kadi..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Msimbo wa PIN usio sahihi."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Charaza PIN iliyo na tarakimu kati ya 4 na 8."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Msimbo wa PUK unafaa kuwa na nambari 8 au zaidi."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Ingiza upya msimbo sahihi wa PUK. Majaribio yanayorudiwa yatalemaza SIM kabisa."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Umekosea kuchora mchoro wako wa kufungua mara <xliff:g id="NUMBER_0">%d</xliff:g>. Baada ya majaribio <xliff:g id="NUMBER_1">%d</xliff:g> yasiyofaulu, utaombwa kufungua simu yako kwa kutumia akaunti ya barua pepe.\n\n Jaribu tena baada ya sekunde <xliff:g id="NUMBER_2">%d</xliff:g>."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Ondoa"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Msimbo wa PIN ya SIM usiosahihi sasa lazima uwasiliane na mtoa huduma wako ili ufungue kifaa chako."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Msimbo wa PIN ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ulazimike kuwasiliana na mtoa huduma wako ili ufungue kifaa chako."</item>
+    <item quantity="other" msgid="2215723361575359486">"Msimbo wa PIN ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM haiwezi kutumika. Wasiliana na mtoa huduma wako."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Msimbo wa PUK ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ya SIM kuacha kutumika kabisa."</item>
+    <item quantity="other" msgid="5477305226026342036">"Msimbo wa PUK ya SIM usio sahihi, umesalia na majaribio <xliff:g id="NUMBER">%d</xliff:g> kabla ya SIM kuacha kutumika kabisa."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Utendakazi wa PIN ya SIM umeshindwa!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Utendakazi wa PUK ya SIM umeshindwa!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Msimbo Umekubaliwa!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Kitufe cha wimbo wa awali"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Kitufe cha wimbo unaofuata"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Kitufe cha kusitisha"</string>
diff --git a/packages/Keyguard/res/values-sw600dp/dimens.xml b/packages/Keyguard/res/values-sw600dp/dimens.xml
index ea5ef27..25e86e1 100644
--- a/packages/Keyguard/res/values-sw600dp/dimens.xml
+++ b/packages/Keyguard/res/values-sw600dp/dimens.xml
@@ -32,7 +32,7 @@
 
     <!-- Keyguard dimensions -->
     <!-- Size of the clock font in keyguard's status view -->
-    <dimen name="kg_status_clock_font_size">141dp</dimen>
+    <dimen name="kg_status_clock_font_size">120dp</dimen>
 
     <!-- Size of the generic status lines keyguard's status view  -->
     <dimen name="kg_status_line_font_size">16sp</dimen>
diff --git a/packages/Keyguard/res/values-sw600dp/styles.xml b/packages/Keyguard/res/values-sw600dp/styles.xml
new file mode 100644
index 0000000..e632e76
--- /dev/null
+++ b/packages/Keyguard/res/values-sw600dp/styles.xml
@@ -0,0 +1,21 @@
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<resources>
+    <style name="BouncerSecurityContainer">
+        <item name="android:layout_gravity">center</item>
+    </style>
+</resources>
\ No newline at end of file
diff --git a/packages/Keyguard/res/values-sw720dp/dimens.xml b/packages/Keyguard/res/values-sw720dp/dimens.xml
index 4853a7b..30b979c 100644
--- a/packages/Keyguard/res/values-sw720dp/dimens.xml
+++ b/packages/Keyguard/res/values-sw720dp/dimens.xml
@@ -19,7 +19,7 @@
 <resources>
     <!-- Keyguard dimensions -->
     <!-- Size of the clock font in keyguard's status view -->
-    <dimen name="kg_status_clock_font_size">188dp</dimen>
+    <dimen name="kg_status_clock_font_size">140dp</dimen>
 
     <!-- Size of the generic status lines keyguard's status view  -->
     <dimen name="kg_status_line_font_size">19sp</dimen>
diff --git a/packages/Keyguard/res/values-th/activitystrings.xml b/packages/Keyguard/res/values-th/activitystrings.xml
deleted file mode 100644
index 64f50cc..0000000
--- a/packages/Keyguard/res/values-th/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"ไม่มีการรักษาความปลอดภัย"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"รหัสผ่าน"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"รูปแบบ"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN ของซิม"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK ของซิม"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"เลือกวิดเจ็ต..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-th/strings.xml b/packages/Keyguard/res/values-th/strings.xml
index d6308b6..34d97c2 100644
--- a/packages/Keyguard/res/values-th/strings.xml
+++ b/packages/Keyguard/res/values-th/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"การล็อกปุ่มกด"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"พิมพ์รหัส PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"พิมพ์ PUK และรหัส PIN ใหม่"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"รหัส PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"รหัส PIN ใหม่"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"พิมพ์ PUK และรหัส PIN ใหม่"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"รหัส PUK ของซิม"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"รหัส PIN ของซิมใหม่"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"แตะเพื่อพิมพ์รหัสผ่าน"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"พิมพ์รหัสผ่านเพื่อปลดล็อก"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"พิมพ์ PIN เพื่อปลดล็อก"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"ปุ่มหยุดชั่วคราว"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"ปุ่มเล่น"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"ปุ่มหยุด"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"สุดยอด"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"ไม่ชอบ"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"หัวใจ"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"ปลดล็อกเพื่อดำเนินการต่อ"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"ยกเลิกการเปิดใช้งานแล้ว"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"ลาก <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> เพื่อลบ"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> จะไม่ถูกลบ"</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"ป้อนรหัส PIN ที่ต้องการ"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"ยืนยันรหัส PIN ที่ต้องการ"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"กำลังปลดล็อกซิมการ์ด…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"รหัส PIN ไม่ถูกต้อง"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"พิมพ์ PIN ซึ่งเป็นเลข 4 ถึง 8 หลัก"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"รหัส PUK ต้องเป็นตัวเลขอย่างน้อย 8 หลัก"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"ใส่รหัส PUK ที่ถูกต้องอีกครั้ง การพยายามซ้ำหลายครั้งจะทำให้ซิมการ์ดถูกปิดใช้งานอย่างถาวร"</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"คุณวาดรูปแบบการปลดล็อกไม่ถูกต้อง <xliff:g id="NUMBER_0">%d</xliff:g> ครั้งแล้ว หากทำไม่สำเร็จอีก <xliff:g id="NUMBER_1">%d</xliff:g> ครั้ง ระบบจะขอให้คุณปลดล็อกโทรศัพท์โดยใช้ับัญชีอีเมล\n\n โปรดลองอีกครั้งในอีก <xliff:g id="NUMBER_2">%d</xliff:g> วินาที"</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"นำออก"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"รหัส PIN ของซิมไม่ถูกต้อง ตอนนี้คุณต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์ของคุณ"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่จะต้องติดต่อผู้ให้บริการเพื่อปลดล็อกอุปกรณ์ของคุณ"</item>
+    <item quantity="other" msgid="2215723361575359486">"รหัส PIN ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้ง"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"ซิมไม่สามารถใช้งานได้ ติดต่อผู้ให้บริการของคุณ"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร"</item>
+    <item quantity="other" msgid="5477305226026342036">"รหัส PUK ของซิมไม่ถูกต้อง คุณพยายามได้อีก <xliff:g id="NUMBER">%d</xliff:g> ครั้งก่อนที่ซิมจะไม่สามารถใช้งานได้อย่างถาวร"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"การปลดล็อกด้วย PIN ของซิมล้มเหลว!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"การปลดล็อกด้วย PUK ของซิมล้มเหลว!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"รหัสได้รับการยอมรับ!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"ปุ่มแทร็กก่อนหน้า"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"ปุ่มแทร็กถัดไป"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"ปุ่มหยุดชั่วคราว"</string>
diff --git a/packages/Keyguard/res/values-tl/activitystrings.xml b/packages/Keyguard/res/values-tl/activitystrings.xml
deleted file mode 100644
index 71f3564..0000000
--- a/packages/Keyguard/res/values-tl/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Walang seguridad"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Password"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Pattern"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Pumili ng widget..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenNaka-off"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenNaka-on"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-tl/strings.xml b/packages/Keyguard/res/values-tl/strings.xml
index a41d268..9d97d22 100644
--- a/packages/Keyguard/res/values-tl/strings.xml
+++ b/packages/Keyguard/res/values-tl/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"I-type ang PIN code"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"I-type ang PUK at bagong PIN code"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK code"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Bagong PIN code"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"I-type ang SIM PUK at bagong PIN code"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK code ng SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Bagong PIN code ng SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Pindutin upang i-type password"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"I-type ang password upang i-unlock"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"I-type ang PIN upang i-unlock"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Button na I-pause"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Button na I-play"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Button na Ihinto"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Thumbs up"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Thumbs down"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Heart"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"I-unlock upang magpatuloy"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Nakansela ang paglunsad"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"I-drop ang <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> upang tanggalin."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"Hindi tatanggalin ang <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Ilagay ang ninanais na PIN code"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Kumpirmahin ang ninanais na PIN code"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ina-unlock ang SIM card…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Hindi tamang PIN code."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Mag-type ng PIN na 4 hanggang 8 numero."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Dapat ay 8 numero o higit pa ang PUK code."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Muling ilagay ang tamang PUK code. Permanenteng hindi pagaganahin ang SIM ng mga paulit-ulit na pagtatangka."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Naguhit mo nang hindi tama ang iyong pattern sa pag-unlock nang <xliff:g id="NUMBER_0">%d</xliff:g> (na) beses. Pagkatapos ng <xliff:g id="NUMBER_1">%d</xliff:g> pang hindi matagumpay na pagtatangka, hihilingin sa iyong i-unlock ang telepono mo gamit ang isang email account.\n\n Subukang muli sa loob ng <xliff:g id="NUMBER_2">%d</xliff:g> (na) segundo."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Alisin"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Maling PIN code ng SIM, dapat ka nang makipag-ugnay sa iyong carrier upang i-unlock ang iyong device."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Maling PIN code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago ka dapat makipag-ugnay sa iyong carrier upang i-unlock ang iyong device."</item>
+    <item quantity="other" msgid="2215723361575359486">"Maling PIN code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"Hindi magagamit ang SIM. Makipag-ugnay sa iyong carrier."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Maling PUK code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago maging permanenteng hindi magagamit ang SIM."</item>
+    <item quantity="other" msgid="5477305226026342036">"Maling PUK code ng SIM, mayroon kang <xliff:g id="NUMBER">%d</xliff:g> (na) natitirang pagsubok bago maging permanenteng hindi magagamit ang SIM."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Nabigo ang operasyon ng SIM PIN!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Nabigo ang operasyon ng SIM PUK!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Tinanggap ang Code!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Button na Nakaraang track"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Button na Susunod na track"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Button na I-pause"</string>
diff --git a/packages/Keyguard/res/values-tr/activitystrings.xml b/packages/Keyguard/res/values-tr/activitystrings.xml
deleted file mode 100644
index 7f5a958..0000000
--- a/packages/Keyguard/res/values-tr/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Güvenlik yok"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Şifre"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Desen"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN\'i"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK\'u"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Widget seç..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-tr/strings.xml b/packages/Keyguard/res/values-tr/strings.xml
index 0af7740..1d8b982 100644
--- a/packages/Keyguard/res/values-tr/strings.xml
+++ b/packages/Keyguard/res/values-tr/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"PIN kodunu yazın"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"PUK ve yeni PIN kodunu yazın"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK kodu"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Yeni PIN kodu"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"SIM PUK kodunu ve yeni bir PIN kodu yazın."</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK kodu"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Yeni SIM PIN kodu"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Şifre yazmak için dokunun"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Kilidi açmak için şifreyi yazın"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Kilidi açmak için PIN kodunu yazın"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Duraklat düğmesi"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Oynat düğmesi"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Durdur düğmesi"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Beğen"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Beğenme"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Kalp"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Devam etmek için kilidini açın"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Başlatma iptal edildi"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Silmek için <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> widget\'ını bırakın."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> silinmeyecek."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"İstenen PIN kodunu girin"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"İstenen PIN kodunu onaylayın"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"SIM kart kilidi açılıyor…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Yanlış PIN kodu."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"4-8 rakamdan oluşan bir PIN girin."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK kodu 8 veya daha çok basamaklı bir sayı olmalıdır."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Doğru PUK kodunu tekrar girin. Çok sayıda deneme yapılırsa SIM kart kalıcı olarak devre dışı bırakılır."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Kilit açma deseninizi <xliff:g id="NUMBER_0">%d</xliff:g> kez yanlış çizdiniz. <xliff:g id="NUMBER_1">%d</xliff:g> başarısız denemeden sonra telefonunuzu bir e-posta hesabı kullanarak açmanız istenir.\n\n <xliff:g id="NUMBER_2">%d</xliff:g> saniye içinde tekrar deneyin."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Kaldır"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Yanlış SIM PIN kodu. Cihazınızın kilidini açmak için artık operatörünüzle bağlantı kurmanız gerekiyor."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Yanlış SIM PIN kodu. Cihazının kilidini açmak için operatörünüzle bağlantı kurmak zorunda kalmadan önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item>
+    <item quantity="other" msgid="2215723361575359486">"Yanlış SIM PIN kodu. <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM kullanılamaz. Operatörünüzle bağlantı kurun."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Yanlış SIM PUK kodu. SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item>
+    <item quantity="other" msgid="5477305226026342036">"Yanlış SIM PUK kodu. SIM kalıcı olarak kullanılmaz hale gelmeden önce <xliff:g id="NUMBER">%d</xliff:g> deneme hakkınız kaldı."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN işlemi başarısız oldu!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK işlemi başarısız oldu!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Kod Kabul Edildi!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Önceki parça düğmesi"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Sonraki parça düğmesi"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Duraklat düğmesi"</string>
diff --git a/packages/Keyguard/res/values-uk/activitystrings.xml b/packages/Keyguard/res/values-uk/activitystrings.xml
deleted file mode 100644
index d4d0a4d..0000000
--- a/packages/Keyguard/res/values-uk/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Без захисту"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN-код"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Пароль"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Ключ"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"PIN-код SIM-карти"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"PUK-код SIM-карти"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Вибрати віджет…"</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-uk/strings.xml b/packages/Keyguard/res/values-uk/strings.xml
index 2879e87..16cf6cf 100644
--- a/packages/Keyguard/res/values-uk/strings.xml
+++ b/packages/Keyguard/res/values-uk/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Введіть PIN-код"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Введіть PUK-код і новий PIN-код"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK-код"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Новий PIN-код"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Введіть PUK-код і новий PIN-код SIM-карти"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"PUK-код SIM-карти"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Новий PIN-код SIM-карти"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Торкніться, щоб ввести пароль"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Введіть пароль, щоб розблокувати"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Введіть PIN-код, щоб розблокувати"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Кнопка \"Призупинити\""</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Кнопка \"Відтворити\""</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Кнопка \"Зупинити\""</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Подобається"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Не подобається"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Рейтинг"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Розблокуйте, щоб продовжити"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Запуск скасовано"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Відпустіть <xliff:g id="WIDGET_INDEX">%1$s</xliff:g>, щоб видалити."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> не буде видалено."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Введіть потрібний PIN-код"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Підтвердьте потрібний PIN-код"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Розблокування SIM-карти…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Неправильний PIN-код."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Введіть PIN-код із 4–8 цифр."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK-код має складатися зі щонайменше 8 цифр."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Повторно введіть правильний PUK-код. Численні спроби назавжди вимкнуть SIM-карту."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ключ розблокування неправильно намальовано стільки разів: <xliff:g id="NUMBER_0">%d</xliff:g>. У вас є ще стільки спроб: <xliff:g id="NUMBER_1">%d</xliff:g>. У разі невдачі з’явиться запит розблокувати телефон за допомогою облікового запису електронної пошти.\n\n Повторіть спробу через <xliff:g id="NUMBER_2">%d</xliff:g> сек."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" – "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Вилучити"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Неправильний PIN-код SIM-карти. Зв’яжіться зі своїм оператором, щоб розблокувати пристрій."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Неправильний PIN-код SIM-карти. У вас залишилась <xliff:g id="NUMBER">%d</xliff:g> спроба. Після цього потрібно буде зв’язатися з оператором, щоб розблокувати пристрій."</item>
+    <item quantity="other" msgid="2215723361575359486">"Неправильний PIN-код SIM-карти. У вас залишилося стільки спроб: <xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM-карту заблоковано. Зв’яжіться з оператором."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Неправильний PUK-код SIM-карти. У вас залишилась <xliff:g id="NUMBER">%d</xliff:g> спроба. Після цього SIM-карту буде назавжди заблоковано."</item>
+    <item quantity="other" msgid="5477305226026342036">"Неправильний PUK-код SIM-карти. У вас залишилося стільки спроб: <xliff:g id="NUMBER">%d</xliff:g>. Після цього SIM-карту буде назавжди заблоковано."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Помилка введення PIN-коду SIM-карти."</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Помилка введення PUK-коду SIM-карти."</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Код прийнято."</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Кнопка \"Попередня композиція\""</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Кнопка \"Наступна композиція\""</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Кнопка \"Призупинити\""</string>
diff --git a/packages/Keyguard/res/values-vi/activitystrings.xml b/packages/Keyguard/res/values-vi/activitystrings.xml
deleted file mode 100644
index 009c3bd..0000000
--- a/packages/Keyguard/res/values-vi/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Không có bảo mật"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"Mã PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Mật khẩu"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Hình"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"Mã PIN của SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"Mã PUK của SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Chọn tiện ích..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-vi/strings.xml b/packages/Keyguard/res/values-vi/strings.xml
index 70d3c73..00693aa5 100644
--- a/packages/Keyguard/res/values-vi/strings.xml
+++ b/packages/Keyguard/res/values-vi/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Khóa bàn phím"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Nhập mã PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Nhập PUK và mã PIN mới"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Mã PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Mã PIN mới"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Nhập mã PIN mới và mã PUK của SIM"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Mã PUK của SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Mã PIN mới của SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Chạm để nhập mật khẩu"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Nhập mật khẩu để mở khóa"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Nhập mã PIN để mở khóa"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Nút tạm dừng"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Nút phát"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Nút dừng"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Bài hát được đánh dấu thích"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Bài hát được đánh dấu không thích"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Trái tim"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Mở khóa để tiếp tục"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Quá trình chạy bị hủy"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Thả <xliff:g id="WIDGET_INDEX">%1$s</xliff:g> để xóa."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> sẽ không bị xóa."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Nhập mã PIN mong muốn"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Xác nhận mã PIN mong muốn"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Đang mở khóa thẻ SIM…"</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Mã PIN không chính xác."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Nhập mã PIN có từ 4 đến 8 số."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Mã PUK phải có từ 8 số trở lên."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Hãy nhập lại mã PUK chính xác. Nhiều lần lặp lại sẽ vô hiệu hóa vĩnh viễn thẻ SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Bạn đã <xliff:g id="NUMBER_0">%d</xliff:g> lần vẽ không chính xác hình mở khóa của mình. Sau <xliff:g id="NUMBER_1">%d</xliff:g> lần thử không thành công nữa, bạn sẽ được yêu cầu mở khóa điện thoại bằng tài khoản email.\n\n Vui lòng thử lại sau <xliff:g id="NUMBER_2">%d</xliff:g> giây."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Xóa"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Mã PIN của SIM không chính xác, bây giờ bạn phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của bạn."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi bạn phải liên hệ với nhà cung cấp dịch vụ để mở khóa thiết bị của bạn."</item>
+    <item quantity="other" msgid="2215723361575359486">"Mã PIN của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM không thể sử dụng được. Liên hệ với nhà cung cấp dịch vụ của bạn."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được."</item>
+    <item quantity="other" msgid="5477305226026342036">"Mã PUK của SIM không chính xác, bạn còn <xliff:g id="NUMBER">%d</xliff:g> lần thử trước khi SIM vĩnh viễn không thể sử dụng được."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Thao tác mã PIN của SIM không thành công!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Thao tác mã PUK của SIM không thành công!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Mã được chấp nhận!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Nút bản nhạc trước"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Nút bản nhạc tiếp theo"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Nút tạm dừng"</string>
diff --git a/packages/Keyguard/res/values-zh-rCN/activitystrings.xml b/packages/Keyguard/res/values-zh-rCN/activitystrings.xml
deleted file mode 100644
index d9b99e0..0000000
--- a/packages/Keyguard/res/values-zh-rCN/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"无安全措施"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"密码"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"图案"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM 卡 PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM 卡 PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"选择小部件..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml
index cdb1944e..1c014c3 100644
--- a/packages/Keyguard/res/values-zh-rCN/strings.xml
+++ b/packages/Keyguard/res/values-zh-rCN/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Keyguard"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"输入 PIN 码"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"请输入 PUK 码和新的 PIN 码"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 码"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"新的 PIN 码"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"请输入 SIM 卡 PUK 码和新的 PIN 码"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM 卡 PUK 码"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"新 SIM 卡 PIN 码"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"触摸可输入密码"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"输入密码以解锁"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"输入 PIN 进行解锁"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"暂停按钮"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"播放按钮"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"停止按钮"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"我喜欢"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"不喜欢"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"爱心"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"解锁即可继续"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"启动已取消"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"放下<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>即可将其删除。"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>将不会被删除。"</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"请输入所需 PIN 码"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"请确认所需 PIN 码"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解锁 SIM 卡..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 码有误。"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"请输入 4 至 8 位数的 PIN。"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 码应至少包含 8 位数字。"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"请重新输入正确的 PUK 码。如果尝试错误次数过多，SIM 卡将永久停用。"</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您已经 <xliff:g id="NUMBER_0">%d</xliff:g> 次错误地绘制了解锁图案。如果再尝试 <xliff:g id="NUMBER_1">%d</xliff:g> 次后仍不成功，系统就会要求您使用自己的电子邮件帐户解锁手机。\n\n请在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒后重试。"</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"删除"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM 卡 PIN 码不正确，您现在必须联系运营商为您解锁设备。"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"SIM 卡 PIN 码不正确，您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败，则必须联系运营商帮您解锁设备。"</item>
+    <item quantity="other" msgid="2215723361575359486">"SIM 卡 PIN 码不正确，您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM 卡无法使用，请与您的运营商联系。"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"SIM 卡 PUK 码不正确，您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败，SIM 卡将永远无法使用。"</item>
+    <item quantity="other" msgid="5477305226026342036">"SIM 卡 PUK 码不正确，您还有<xliff:g id="NUMBER">%d</xliff:g>次尝试机会。如果仍然失败，SIM 卡将永远无法使用。"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM 卡 PIN 码操作失败！"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM 卡 PUK 码操作失败！"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"代码正确！"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"“上一曲”按钮"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"“下一曲”按钮"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"“暂停”按钮"</string>
diff --git a/packages/Keyguard/res/values-zh-rHK/strings.xml b/packages/Keyguard/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..1b621d6
--- /dev/null
+++ b/packages/Keyguard/res/values-zh-rHK/strings.xml
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/* //device/apps/common/assets/res/any/strings.xml
+**
+** Copyright 2006, 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.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"鍵盤鎖"</string>
+    <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"輸入 PIN 碼"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"請輸入 SIM PUK 碼和新 PIN 碼"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM PUK 碼"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"新 SIM PIN 碼"</string>
+    <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"輕觸即可輸入密碼"</font></string>
+    <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"輸入密碼即可解鎖"</string>
+    <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"輸入 PIN 碼即可解鎖"</string>
+    <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"PIN 碼不正確。"</string>
+    <string name="keyguard_label_text" msgid="861796461028298424">"如要解鎖，請按選單鍵，然後按 0。"</string>
+    <string name="faceunlock_multiple_failures" msgid="754137583022792429">"已超過臉容解鎖嘗試次數上限"</string>
+    <string name="keyguard_charged" msgid="3272223906073492454">"充電完成"</string>
+    <string name="keyguard_plugged_in" msgid="8117572000639998388">"充電中 (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="keyguard_low_battery" msgid="8143808018719173859">"請連接充電器。"</string>
+    <string name="keyguard_instructions_when_pattern_disabled" msgid="1332288268600329841">"按選單鍵解鎖。"</string>
+    <string name="keyguard_network_locked_message" msgid="9169717779058037168">"網絡已鎖定"</string>
+    <string name="keyguard_missing_sim_message_short" msgid="494980561304211931">"找不到 SIM 卡"</string>
+    <string name="keyguard_missing_sim_message" product="tablet" msgid="1445849005909260039">"平板電腦中沒有 SIM 卡。"</string>
+    <string name="keyguard_missing_sim_message" product="default" msgid="3481110395508637643">"手機中沒有 SIM 卡。"</string>
+    <string name="keyguard_missing_sim_instructions" msgid="5210891509995942250">"請插入 SIM 卡。"</string>
+    <string name="keyguard_missing_sim_instructions_long" msgid="5968985489463870358">"找不到 SIM 卡或無法讀取 SIM 卡，請插入 SIM 卡。"</string>
+    <string name="keyguard_permanent_disabled_sim_message_short" msgid="8340813989586622356">"SIM 卡無法使用。"</string>
+    <string name="keyguard_permanent_disabled_sim_instructions" msgid="5892940909699723544">"您的 SIM 卡已被永久停用。\n請與您的無線服務供應商聯絡，以取得另一張 SIM 卡。"</string>
+    <string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM 卡處於鎖定狀態。"</string>
+    <string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 卡處於 PUK 鎖定狀態。"</string>
+    <string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解開上鎖的 SIM 卡..."</string>
+    <string name="keyguard_accessibility_widget_changed" msgid="5678624624681400191">"%1$s。第 %2$d 個小工具，共 %3$d 個。"</string>
+    <string name="keyguard_accessibility_add_widget" msgid="8273277058724924654">"新增小工具。"</string>
+    <string name="keyguard_accessibility_widget_empty_slot" msgid="1281505703307930757">"空白"</string>
+    <string name="keyguard_accessibility_unlock_area_expanded" msgid="2278106022311170299">"解鎖區域已展開。"</string>
+    <string name="keyguard_accessibility_unlock_area_collapsed" msgid="6366992066936076396">"解鎖區域已收合。"</string>
+    <string name="keyguard_accessibility_widget" msgid="6527131039741808240">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>小工具。"</string>
+    <string name="keyguard_accessibility_user_selector" msgid="1226798370913698896">"用戶選取工具"</string>
+    <string name="keyguard_accessibility_status" msgid="8008264603935930611">"狀態"</string>
+    <string name="keyguard_accessibility_camera" msgid="8904231194181114603">"相機"</string>
+    <string name="keygaurd_accessibility_media_controls" msgid="262209654292161806">"媒體控制"</string>
+    <string name="keyguard_accessibility_widget_reorder_start" msgid="8736853615588828197">"已開始為小工具重新排列次序。"</string>
+    <string name="keyguard_accessibility_widget_reorder_end" msgid="7170190950870468320">"已完成為小工具重新排列次序。"</string>
+    <string name="keyguard_accessibility_widget_deleted" msgid="4426204263929224434">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>小工具已刪除。"</string>
+    <string name="keyguard_accessibility_expand_lock_area" msgid="519859720934178024">"展開解鎖區域。"</string>
+    <string name="keyguard_accessibility_slide_unlock" msgid="2959928478764697254">"滑動解鎖。"</string>
+    <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"圖案解鎖。"</string>
+    <string name="keyguard_accessibility_face_unlock" msgid="4817282543351718535">"臉容解鎖。"</string>
+    <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN 解鎖。"</string>
+    <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密碼解鎖。"</string>
+    <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"圖案區域。"</string>
+    <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"滑動區域。"</string>
+    <string name="keyguard_accessibility_transport_prev_description" msgid="1337286538318543555">"[上一首曲目] 按鈕"</string>
+    <string name="keyguard_accessibility_transport_next_description" msgid="7073928300444909320">"[下一首曲目] 按鈕"</string>
+    <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"[暫停] 按鈕"</string>
+    <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"[播放] 按鈕"</string>
+    <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"[停止] 按鈕"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"喜歡"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"不喜歡"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"心形"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"請解鎖以繼續"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"已取消啟動"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"拖放「<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>」即可刪除。"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"「<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>」將不會被刪除。"</string>
+    <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"？123"</string>
+    <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
+    <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
+    <string name="keyboardview_keycode_alt" msgid="4856868820040051939">"Alt"</string>
+    <string name="keyboardview_keycode_cancel" msgid="1203984017245783244">"取消"</string>
+    <string name="keyboardview_keycode_delete" msgid="3337914833206635744">"刪除"</string>
+    <string name="keyboardview_keycode_done" msgid="1992571118466679775">"完成"</string>
+    <string name="keyboardview_keycode_mode_change" msgid="4547387741906537519">"模式更改"</string>
+    <string name="keyboardview_keycode_shift" msgid="2270748814315147690">"Shift 鍵"</string>
+    <string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Enter 鍵"</string>
+    <string name="description_target_unlock" msgid="2228524900439801453">"解鎖"</string>
+    <string name="description_target_camera" msgid="969071997552486814">"相機"</string>
+    <string name="description_target_silent" msgid="893551287746522182">"靜音"</string>
+    <string name="description_target_soundon" msgid="30052466675500172">"音效已開啟"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+    <string name="description_direction_down" msgid="5087739728639014595">"向下滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+    <string name="description_direction_right" msgid="8034433242579600980">"向右滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+    <string name="user_switched" msgid="3768006783166984410">"目前的用戶是<xliff:g id="NAME">%1$s</xliff:g>。"</string>
+    <string name="kg_emergency_call_label" msgid="684946192523830531">"緊急電話"</string>
+    <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"忘記圖案"</string>
+    <string name="kg_wrong_pattern" msgid="1850806070801358830">"圖案錯誤"</string>
+    <string name="kg_wrong_password" msgid="2333281762128113157">"密碼錯誤"</string>
+    <string name="kg_wrong_pin" msgid="1131306510833563801">"PIN 錯誤"</string>
+    <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"請在 <xliff:g id="NUMBER">%d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_pattern_instructions" msgid="398978611683075868">"畫出圖案"</string>
+    <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"輸入 SIM 卡 PIN 碼"</string>
+    <string name="kg_pin_instructions" msgid="2377242233495111557">"輸入 PIN 碼"</string>
+    <string name="kg_password_instructions" msgid="5753646556186936819">"輸入密碼"</string>
+    <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"SIM 卡現已停用，請輸入 PUK 碼以繼續。詳情請與流動網絡供應商聯絡。"</string>
+    <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"輸入所需的 PIN 碼"</string>
+    <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"確認所需的 PIN 碼"</string>
+    <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解開上鎖的 SIM 卡..."</string>
+    <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"請輸入一個 4 至 8 位數的 PIN 碼。"</string>
+    <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 碼應由 8 個或以上數字組成。"</string>
+    <string name="kg_invalid_puk" msgid="3638289409676051243">"請重新輸入正確的 PUK 碼。如果嘗試輸入的次數過多，SIM 卡將永久停用。"</string>
+    <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"PIN 碼不符"</string>
+    <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"圖案嘗試次數過多"</string>
+    <string name="kg_login_instructions" msgid="1100551261265506448">"如要解鎖，請以 Google 帳戶登入。"</string>
+    <string name="kg_login_username_hint" msgid="5718534272070920364">"用戶名稱 (電子郵件)"</string>
+    <string name="kg_login_password_hint" msgid="9057289103827298549">"密碼"</string>
+    <string name="kg_login_submit_button" msgid="5355904582674054702">"登入"</string>
+    <string name="kg_login_invalid_input" msgid="5754664119319872197">"無效的用戶名稱或密碼。"</string>
+    <string name="kg_login_account_recovery_hint" msgid="5690709132841752974">"忘記用戶名稱或密碼？\n請瀏覽 "<b>"google.com/accounts/recovery"</b>"。"</string>
+    <string name="kg_login_checking_password" msgid="1052685197710252395">"正在檢查帳戶…"</string>
+    <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"您已輸入錯誤的 PIN 碼 <xliff:g id="NUMBER_0">%d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"您已輸入錯誤的密碼 <xliff:g id="NUMBER_0">%d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%d</xliff:g> 次。\n\n請在 <xliff:g id="NUMBER_1">%d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"您嘗試了 <xliff:g id="NUMBER_0">%d</xliff:g> 次仍未能成功解開這部上鎖的平板電腦。如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功，平板電腦將回復原廠設定，所有用戶資料均會失去。"</string>
+    <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"您嘗試了 <xliff:g id="NUMBER_0">%d</xliff:g> 次仍未能成功解開這部上鎖的手機。如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功，手機將回復原廠設定，所有用戶資料均會失去。"</string>
+    <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"您嘗試了 <xliff:g id="NUMBER">%d</xliff:g> 次仍未能成功解開這部上鎖的平板電腦。平板電腦現在將回復原廠設定。"</string>
+    <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"您嘗試了 <xliff:g id="NUMBER">%d</xliff:g> 次仍未能成功解開這部上鎖的手機。手機現在將回復原廠設定。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%d</xliff:g> 次，如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功，系統會要求您透過電郵帳戶解開上鎖的平板電腦。\n\n請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您已畫錯解鎖圖案 <xliff:g id="NUMBER_0">%d</xliff:g> 次，如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功，系統會要求您透過電郵帳戶解開上鎖的手機。\n\n請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string>
+    <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
+    <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"移除"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM PIN 碼不正確，您現在必須聯絡流動網絡供應商為您的裝置解鎖。"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"SIM PIN 碼不正確，您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤，您必須聯絡流動網絡供應商為您的裝置解鎖。"</item>
+    <item quantity="other" msgid="2215723361575359486">"SIM PIN 碼不正確，您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM 無法使用，請聯絡您的流動網絡供應商。"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"SIM PUK 碼不正確，您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輪入錯誤，SIM 將永久無法使用。"</item>
+    <item quantity="other" msgid="5477305226026342036">"SIM PUK 碼不正確，您剩下 <xliff:g id="NUMBER">%d</xliff:g> 次機會輸入。如果仍然輸入錯誤，SIM 將永久無法使用。"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM PIN 碼操作失敗！"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM PUK 碼操作失敗！"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"密碼正確！"</string>
+    <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"[上一首曲目] 按鈕"</string>
+    <string name="keyguard_transport_next_description" msgid="4299258300283778305">"[下一首曲目] 按鈕"</string>
+    <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"[暫停] 按鈕"</string>
+    <string name="keyguard_transport_play_description" msgid="2924628863741150956">"[播放] 按鈕"</string>
+    <string name="keyguard_transport_stop_description" msgid="3084179324810575787">"[停止] 按鈕"</string>
+    <string name="keyguard_carrier_default" msgid="8700650403054042153">"沒有服務。"</string>
+</resources>
diff --git a/packages/Keyguard/res/values-zh-rTW/activitystrings.xml b/packages/Keyguard/res/values-zh-rTW/activitystrings.xml
deleted file mode 100644
index 42c2a51..0000000
--- a/packages/Keyguard/res/values-zh-rTW/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"Keyguard 測試活動"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"整合式相機"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"無安全性設定"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"密碼"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"圖形"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"SIM PIN"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"SIM PUK"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"選擇小工具..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"在螢幕上關閉"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"在螢幕上開啟"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"執行 Keyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"驗證解鎖"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-zh-rTW/strings.xml b/packages/Keyguard/res/values-zh-rTW/strings.xml
index 72a1c0f..6e632ef 100644
--- a/packages/Keyguard/res/values-zh-rTW/strings.xml
+++ b/packages/Keyguard/res/values-zh-rTW/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"鍵盤鎖"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"輸入 PIN 碼"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"輸入 PUK 碼和新 PIN 碼"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"PUK 碼"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"新 PIN 碼"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"輸入 SIM 卡 PUK 碼和新 PIN 碼"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"SIM 卡 PUK 碼"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"新增 SIM 卡 PIN 碼"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"輕觸即可輸入密碼"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"輸入密碼即可解鎖"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"輸入 PIN 即可解鎖"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"[暫停] 按鈕"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"[播放] 按鈕"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"[停止] 按鈕"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"喜歡"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"不喜歡"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"愛心"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"先解鎖才能繼續操作"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"已取消啟動"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"拖放「<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>」即可將其刪除。"</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"「<xliff:g id="WIDGET_INDEX">%1$s</xliff:g>」將不會遭到刪除。"</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"輸入所需的 PIN 碼"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"確認所需的 PIN 碼"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"正在解除 SIM 卡鎖定..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"PIN 碼不正確。"</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"請輸入 4 到 8 碼的 PIN。"</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"PUK 碼至少必須為 8 碼。"</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"重新輸入正確的 PUK 碼。如果錯誤次數過多，SIM 卡將會永久停用。"</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"您的解鎖圖形已畫錯 <xliff:g id="NUMBER_0">%d</xliff:g> 次，如果再嘗試 <xliff:g id="NUMBER_1">%d</xliff:g> 次仍未成功，系統就會要求您透過電子郵件帳戶解除手機的鎖定狀態。\n\n請在 <xliff:g id="NUMBER_2">%d</xliff:g> 秒後再試一次。"</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"移除"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"SIM 卡的 PIN 碼輸入錯誤，您現在必須請行動通訊業者為裝置解鎖。"</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"SIM 卡的 PIN 碼輸入錯誤，您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗，就必須請行動通訊業者為裝置解鎖。"</item>
+    <item quantity="other" msgid="2215723361575359486">"SIM 卡的 PIN 碼輸入錯誤，您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。"</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"SIM 卡無法使用，請與您的行動通訊業者聯絡。"</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"SIM 卡的 PUK 碼輸入錯誤，您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗，SIM 卡將永久無法使用。"</item>
+    <item quantity="other" msgid="5477305226026342036">"SIM 卡的 PUK 碼輸入錯誤，您還可以再試 <xliff:g id="NUMBER">%d</xliff:g> 次。如果仍然失敗，SIM 卡將永久無法使用。"</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"SIM 卡 PIN 碼操作失敗！"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"SIM 卡 PUK 碼操作失敗！"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"密碼正確！"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"[上一首曲目] 按鈕"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"[下一首曲目] 按鈕"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"[暫停] 按鈕"</string>
diff --git a/packages/Keyguard/res/values-zu/activitystrings.xml b/packages/Keyguard/res/values-zu/activitystrings.xml
deleted file mode 100644
index 0031a8b..0000000
--- a/packages/Keyguard/res/values-zu/activitystrings.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/* //device/apps/common/assets/res/any/strings.xml
-**
-** Copyright 2006, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_name" msgid="3352888186674981593">"I-KeyguardTestActivity"</string>
-    <string name="secure_app_name" msgid="7955498742816868049">"I-UnifiedCamera"</string>
-    <string name="none_menu_item" msgid="6156747285687551424">"Akukho ukuphepha"</string>
-    <string name="pin_menu_item" msgid="1179756433268962311">"I-PIN"</string>
-    <string name="password_menu_item" msgid="1959980499662153160">"Iphasiwedi"</string>
-    <string name="pattern_menu_item" msgid="2987798152175140249">"Iphethini"</string>
-    <string name="sim_pin_menu_item" msgid="3962286639645084880">"I-PIN ye-SIM"</string>
-    <string name="sim_puk_menu_item" msgid="6190044133008392974">"I-PUK YE-SIM"</string>
-    <string name="add_widget_item" msgid="279702152366857415">"Khetha iwijethi..."</string>
-    <string name="on_screen_turned_off" msgid="8761396329770508367">"I-onScreenTurnedOff"</string>
-    <string name="on_screen_turned_on" msgid="9222926818030728999">"I-onScreenTurnedOn"</string>
-    <string name="do_keyguard" msgid="9210936977823118796">"I-doKeyguard"</string>
-    <string name="verify_unlock" msgid="8508722273329306968">"I-verifyUnlock"</string>
-</resources>
diff --git a/packages/Keyguard/res/values-zu/strings.xml b/packages/Keyguard/res/values-zu/strings.xml
index 185ea03..95d3474 100644
--- a/packages/Keyguard/res/values-zu/strings.xml
+++ b/packages/Keyguard/res/values-zu/strings.xml
@@ -20,10 +20,11 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="719438068451601849">"Ukhiye wokugada"</string>
     <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Faka ikhodi ye-PIN"</string>
-    <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Faka i-PUK nephinikhodi entsha"</string>
-    <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Ikhodi le-PUK"</string>
-    <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Iphinikhodi entsha"</string>
+    <string name="keyguard_password_enter_puk_code" msgid="3035856550289724338">"Thayipha i-PUK ye-SIM nekhodi yephinikhodi entsha"</string>
+    <string name="keyguard_password_enter_puk_prompt" msgid="1801941051094974609">"Ikhodi ye-PUK ye-SIM"</string>
+    <string name="keyguard_password_enter_pin_prompt" msgid="3201151840570492538">"Ikhodi entsha yephinikhodi ye-SIM"</string>
     <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Thinta ukubhala iphasiwedi"</font></string>
     <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Bhala iphasiwedi ukuze kuvuleke"</string>
     <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Faka i-PIN ukuvula"</string>
@@ -71,6 +72,13 @@
     <string name="keyguard_accessibility_transport_pause_description" msgid="8455979545295224302">"Inkinobho yokumiswa isikhashana"</string>
     <string name="keyguard_accessibility_transport_play_description" msgid="8146417789511154044">"Inkinobho yokudlala"</string>
     <string name="keyguard_accessibility_transport_stop_description" msgid="7656358482980912216">"Inkinobho yokumisa"</string>
+    <string name="keyguard_accessibility_transport_thumbs_up_description" msgid="4535938129663903194">"Okushaphu"</string>
+    <string name="keyguard_accessibility_transport_thumbs_down_description" msgid="8101433677192177861">"Akulungile"</string>
+    <string name="keyguard_accessibility_transport_heart_description" msgid="2336943232474689887">"Inhliziyo"</string>
+    <string name="keyguard_accessibility_show_bouncer" msgid="5425837272418176176">"Vula ukuze uqhubeke"</string>
+    <string name="keyguard_accessibility_hide_bouncer" msgid="7896992171878309358">"Ukuqalisa kukhanseliwe"</string>
+    <string name="keyguard_accessibility_delete_widget_start" msgid="4096550552634391451">"Lahla i-<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ukuze uyisuse."</string>
+    <string name="keyguard_accessibility_delete_widget_end" msgid="508833506780909393">"<xliff:g id="WIDGET_INDEX">%1$s</xliff:g> ngeke isuswe."</string>
     <string name="password_keyboard_label_symbol_key" msgid="992280756256536042">"?123"</string>
     <string name="password_keyboard_label_alpha_key" msgid="8001096175167485649">"ABC"</string>
     <string name="password_keyboard_label_alt_key" msgid="1284820942620288678">"ALT"</string>
@@ -105,7 +113,6 @@
     <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Faka iphinikhodi oyithandayo"</string>
     <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Qiniseka iphinikhodi oyithandayo"</string>
     <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Ivula ikhadi le-SIM..."</string>
-    <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Iphinikhodi engalungile."</string>
     <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Thayipha iphinikhodi enezinombolo ezingu-4 kuya kwezingu-8."</string>
     <string name="kg_invalid_sim_puk_hint" msgid="7553388325654369575">"Ikhodi ye-PUK kufanele ibe yizinombolo ezingu-8 noma eziningi."</string>
     <string name="kg_invalid_puk" msgid="3638289409676051243">"Faka kabusha ikhodi ye-PUK elungile. Imizamo ephindiwe izokhubaza unaphakade i-SIM."</string>
@@ -129,6 +136,19 @@
     <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ukulayisha ungenisa iphathini yakho yokuvula ngendlela engalungile izikhathi ezi-<xliff:g id="NUMBER_0">%d</xliff:g> Emva kweminye imizamo engu-<xliff:g id="NUMBER_1">%d</xliff:g>, uzocelwa ukuvula ifoni yakho usebenzisa ukungena ngemvume ku-Google\n\n Zame futhi emumva kwengu- <xliff:g id="NUMBER_2">%d</xliff:g> amasekhondi."</string>
     <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string>
     <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Susa"</string>
+    <string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Ikhodi yephinikhodi ye-SIM engalungile manje kumele uxhumane nenkampini yenethiwekhi yakho ukuvula idivayisi yakho."</string>
+  <plurals name="kg_password_wrong_pin_code">
+    <item quantity="one" msgid="8134313997799638254">"Ikhodi yephinikhodi ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> esele ngaphambi kokuba uxhumane nenkampini yenethiwekhi."</item>
+    <item quantity="other" msgid="2215723361575359486">"Ikhodi yephinikhodi ye-SIM engalungile, unemizamo esele engu-<xliff:g id="NUMBER">%d</xliff:g>."</item>
+  </plurals>
+    <string name="kg_password_wrong_puk_code_dead" msgid="7077536808291316208">"I-SIM ayisebenziseki. Xhumana nemkampini yenethiwekhi yakho."</string>
+  <plurals name="kg_password_wrong_puk_code">
+    <item quantity="one" msgid="3256893607561060649">"Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> esele ngaphambi kokuba i-SIM ibe engasebenziseki unaphakade."</item>
+    <item quantity="other" msgid="5477305226026342036">"Ikhodi ye-PUK ye-SIM engalungile, unemizamo engu-<xliff:g id="NUMBER">%d</xliff:g> esele ngaphambi kokuba i-SIM iba engasebenziseki unaphakade."</item>
+  </plurals>
+    <string name="kg_password_pin_failed" msgid="6268288093558031564">"Umsebenzi wephinikhodi ye-SIM wehlulekile!"</string>
+    <string name="kg_password_puk_failed" msgid="2838824369502455984">"Umsebenzi we-PUK ye-SIM wehlulekile!"</string>
+    <string name="kg_pin_accepted" msgid="1448241673570020097">"Ikhodi yamukelwe!"</string>
     <string name="keyguard_transport_prev_description" msgid="8229108430245669854">"Inkinombo yethrekhi yangaphambilini"</string>
     <string name="keyguard_transport_next_description" msgid="4299258300283778305">"Inkinobho yethrekhi elandelayo"</string>
     <string name="keyguard_transport_pause_description" msgid="5093073338238310224">"Inkinobho yokumiswa isikhashana"</string>
diff --git a/packages/Keyguard/res/values/attrs.xml b/packages/Keyguard/res/values/attrs.xml
index e045dd2..2410b6a 100644
--- a/packages/Keyguard/res/values/attrs.xml
+++ b/packages/Keyguard/res/values/attrs.xml
@@ -133,4 +133,8 @@
         <attr name="digit" format="integer" />
         <attr name="textView" format="reference" />
     </declare-styleable>
+
+    <declare-styleable name="CarrierText">
+        <attr name="allCaps" format="boolean" />
+    </declare-styleable>
 </resources>
diff --git a/packages/Keyguard/res/values/dimens.xml b/packages/Keyguard/res/values/dimens.xml
index 71e9924..c05f834 100644
--- a/packages/Keyguard/res/values/dimens.xml
+++ b/packages/Keyguard/res/values/dimens.xml
@@ -158,7 +158,7 @@
     <dimen name="bottom_text_spacing_digital">-8dp</dimen>
     <dimen name="label_font_size">14dp</dimen>
     <dimen name="widget_label_font_size">14dp</dimen>
-    <dimen name="widget_big_font_size">80dp</dimen>
+    <dimen name="widget_big_font_size">60dp</dimen>
     <dimen name="big_font_size">120dp</dimen>
 
 </resources>
diff --git a/packages/Keyguard/res/values/strings.xml b/packages/Keyguard/res/values/strings.xml
index 4738049..d20b269 100644
--- a/packages/Keyguard/res/values/strings.xml
+++ b/packages/Keyguard/res/values/strings.xml
@@ -18,6 +18,8 @@
 */
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <!-- App label in the manifest  -->
+    <string name="app_name">Keyguard</string>
     <!-- Instructions telling the user to enter their SIM PIN to unlock the keyguard.
          Displayed in one line in a large font.  -->
     <string name="keyguard_password_enter_pin_code">Type PIN code</string>
diff --git a/packages/Keyguard/res/values/styles.xml b/packages/Keyguard/res/values/styles.xml
index d4f98af..b54ac50 100644
--- a/packages/Keyguard/res/values/styles.xml
+++ b/packages/Keyguard/res/values/styles.xml
@@ -56,8 +56,7 @@
     <!-- Built-in clock widget stuff -->
     <style name="widget_label">
         <item name="android:textStyle">bold</item>
-        <item name="android:textAllCaps">true</item>
-        <item name="android:fontFamily">sans-serif-condensed</item>
+        <item name="android:fontFamily">sans-serif-light</item>
         <item name="android:textSize">@dimen/widget_label_font_size</item>
     </style>
     <style name="big_thin">
@@ -68,7 +67,7 @@
         <item name="android:textSize">@dimen/widget_big_font_size</item>
     </style>
 
-    <style name="Widget.TransportControl.SeekBar" parent="@android:style/Widget.Holo.SeekBar">
+    <style name="Widget.TransportControl.SeekBar" parent="@android:style/Widget.DeviceDefault.Light.SeekBar">
         <item name="android:indeterminateOnly">false</item>
         <item name="android:progressDrawable">@drawable/scrubber_progress_horizontal_holo_light</item>
         <item name="android:indeterminateDrawable">@drawable/scrubber_progress_horizontal_holo_light</item>
@@ -82,4 +81,9 @@
         <item name="android:mirrorForRtl">true</item>
     </style>
 
+    <style name="BouncerSecurityContainer">
+        <item name="android:layout_marginBottom">32dp</item>
+        <item name="android:layout_gravity">center_horizontal|bottom</item>
+    </style>
+
 </resources>
diff --git a/packages/Keyguard/src/com/android/keyguard/CameraWidgetFrame.java b/packages/Keyguard/src/com/android/keyguard/CameraWidgetFrame.java
index 74e6f33..2bf74ea 100644
--- a/packages/Keyguard/src/com/android/keyguard/CameraWidgetFrame.java
+++ b/packages/Keyguard/src/com/android/keyguard/CameraWidgetFrame.java
@@ -38,7 +38,7 @@
 
 public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnClickListener {
     private static final String TAG = CameraWidgetFrame.class.getSimpleName();
-    private static final boolean DEBUG = KeyguardHostView.DEBUG;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     private static final int WIDGET_ANIMATION_DURATION = 250; // ms
     private static final int WIDGET_WAIT_DURATION = 400; // ms
     private static final int RECOVERY_DELAY = 1000; // ms
@@ -113,12 +113,14 @@
 
     private final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() {
         private boolean mShowing;
-        void onKeyguardVisibilityChanged(boolean showing) {
+
+        @Override
+        public void onKeyguardVisibilityChanged(boolean showing) {
             if (mShowing == showing)
                 return;
             mShowing = showing;
             CameraWidgetFrame.this.onKeyguardVisibilityChanged(mShowing);
-        };
+        }
     };
 
     private static final class FixedSizeFrameLayout extends FrameLayout {
diff --git a/packages/Keyguard/src/com/android/keyguard/CarrierText.java b/packages/Keyguard/src/com/android/keyguard/CarrierText.java
index 88558cd..05f2962 100644
--- a/packages/Keyguard/src/com/android/keyguard/CarrierText.java
+++ b/packages/Keyguard/src/com/android/keyguard/CarrierText.java
@@ -17,6 +17,7 @@
 package com.android.keyguard;
 
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.text.method.SingleLineTransformationMethod;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -81,7 +82,14 @@
     public CarrierText(Context context, AttributeSet attrs) {
         super(context, attrs);
         mLockPatternUtils = new LockPatternUtils(mContext);
-        boolean useAllCaps = mContext.getResources().getBoolean(R.bool.kg_use_all_caps);
+        boolean useAllCaps;
+        TypedArray a = context.getTheme().obtainStyledAttributes(
+                attrs, R.styleable.CarrierText, 0, 0);
+        try {
+            useAllCaps = a.getBoolean(R.styleable.CarrierText_allCaps, false);
+        } finally {
+            a.recycle();
+        }
         setTransformationMethod(new CarrierTextTransformationMethod(mContext, useAllCaps));
     }
 
diff --git a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
index fd56613..4ed37d4 100644
--- a/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
+++ b/packages/Keyguard/src/com/android/keyguard/EmergencyButton.java
@@ -48,10 +48,11 @@
             updateEmergencyCallButton(simState, phoneState);
         }
 
-        void onPhoneStateChanged(int phoneState) {
+        @Override
+        public void onPhoneStateChanged(int phoneState) {
             State simState = KeyguardUpdateMonitor.getInstance(mContext).getSimState();
             updateEmergencyCallButton(simState, phoneState);
-        };
+        }
     };
     private LockPatternUtils mLockPatternUtils;
     private PowerManager mPowerManager;
diff --git a/packages/Keyguard/src/com/android/keyguard/FaceUnlock.java b/packages/Keyguard/src/com/android/keyguard/FaceUnlock.java
index 689366b..2f14003 100644
--- a/packages/Keyguard/src/com/android/keyguard/FaceUnlock.java
+++ b/packages/Keyguard/src/com/android/keyguard/FaceUnlock.java
@@ -37,8 +37,9 @@
 
 public class FaceUnlock implements BiometricSensorUnlock, Handler.Callback {
 
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     private static final String TAG = "FULLockscreen";
+    private static final String FACE_LOCK_PACKAGE = "com.android.facelock";
 
     private final Context mContext;
     private final LockPatternUtils mLockPatternUtils;
@@ -128,7 +129,8 @@
         if (!mBoundToService) {
             Log.d(TAG, "Binding to Face Unlock service for user="
                     + mLockPatternUtils.getCurrentUser());
-            mContext.bindServiceAsUser(new Intent(IFaceLockInterface.class.getName()),
+            mContext.bindServiceAsUser(
+                    new Intent(IFaceLockInterface.class.getName()).setPackage(FACE_LOCK_PACKAGE),
                     mConnection,
                     Context.BIND_AUTO_CREATE,
                     new UserHandle(mLockPatternUtils.getCurrentUser()));
@@ -304,7 +306,7 @@
         int currentUserId = mLockPatternUtils.getCurrentUser();
         if (authenticatedUserId == currentUserId) {
             if (DEBUG) Log.d(TAG, "Unlocking for user " + authenticatedUserId);
-            mKeyguardScreenCallback.reportSuccessfulUnlockAttempt();
+            mKeyguardScreenCallback.reportUnlockAttempt(true);
             mKeyguardScreenCallback.dismiss(true);
         } else {
             Log.d(TAG, "Ignoring unlock for authenticated user (" + authenticatedUserId +
@@ -335,7 +337,7 @@
         // next time the user visits keyguard.
         KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(false);
 
-        mKeyguardScreenCallback.reportFailedUnlockAttempt();
+        mKeyguardScreenCallback.reportUnlockAttempt(false);
     }
 
     /**
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
index 461fd77..4b386b6 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
@@ -154,14 +154,14 @@
     protected void verifyPasswordAndUnlock() {
         String entry = mPasswordEntry.getText().toString();
         if (mLockPatternUtils.checkPassword(entry)) {
-            mCallback.reportSuccessfulUnlockAttempt();
+            mCallback.reportUnlockAttempt(true);
             mCallback.dismiss(true);
         } else if (entry.length() > MINIMUM_PASSWORD_LENGTH_BEFORE_REPORT ) {
             // to avoid accidental lockout, only count attempts that are long enough to be a
             // real password. This may require some tweaking.
-            mCallback.reportFailedUnlockAttempt();
-            if (0 == (mCallback.getFailedAttempts()
-                    % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)) {
+            mCallback.reportUnlockAttempt(false);
+            int attempts = KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts();
+            if (0 == (attempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT)) {
                 long deadline = mLockPatternUtils.setLockoutAttemptDeadline();
                 handleAttemptLockout(deadline);
             }
@@ -231,7 +231,7 @@
     @Override
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
         if (mCallback != null) {
-            mCallback.userActivity(KeyguardViewManager.DIGIT_PRESS_WAKE_MILLIS);
+            mCallback.userActivity(KeyguardConstants.DIGIT_PRESS_WAKE_MILLIS);
         }
     }
 
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAccountView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAccountView.java
index 6b8be69..f69fa5f 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardAccountView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAccountView.java
@@ -177,14 +177,14 @@
                     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                     mContext.startActivityAsUser(intent,
                             new UserHandle(mLockPatternUtils.getCurrentUser()));
-                    mCallback.reportSuccessfulUnlockAttempt();
+                    mCallback.reportUnlockAttempt(true);
 
                     // dismiss keyguard
                     mCallback.dismiss(true);
                 } else {
                     mSecurityMessageDisplay.setMessage(R.string.kg_login_invalid_input, true);
                     mPassword.setText("");
-                    mCallback.reportFailedUnlockAttempt();
+                    mCallback.reportUnlockAttempt(false);
                 }
             }
         });
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardActivityLauncher.java b/packages/Keyguard/src/com/android/keyguard/KeyguardActivityLauncher.java
index 0a915ea..25f3383 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardActivityLauncher.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardActivityLauncher.java
@@ -43,7 +43,7 @@
 
 public abstract class KeyguardActivityLauncher {
     private static final String TAG = KeyguardActivityLauncher.class.getSimpleName();
-    private static final boolean DEBUG = KeyguardHostView.DEBUG;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     private static final String META_DATA_KEYGUARD_LAYOUT = "com.android.keyguard.layout";
     private static final Intent SECURE_CAMERA_INTENT =
             new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE)
@@ -53,10 +53,12 @@
 
     abstract Context getContext();
 
-    abstract KeyguardSecurityCallback getCallback();
-
     abstract LockPatternUtils getLockPatternUtils();
 
+    abstract void setOnDismissAction(OnDismissAction action);
+
+    abstract void requestDismissKeyguard();
+
     public static class CameraWidgetInfo {
         public String contextPackage;
         public int layoutId;
@@ -102,9 +104,10 @@
 
         // Workaround to avoid camera release/acquisition race when resuming face unlock
         // after showing lockscreen camera (bug 11063890).
-        KeyguardUpdateMonitor.getInstance(getContext()).setAlternateUnlockEnabled(false);
+        KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(getContext());
+        updateMonitor.setAlternateUnlockEnabled(false);
 
-        if (lockPatternUtils.isSecure()) {
+        if (mustLaunchSecurely()) {
             // Launch the secure version of the camera
             if (wouldLaunchResolverActivity(SECURE_CAMERA_INTENT)) {
                 // TODO: Show disambiguation dialog instead.
@@ -121,6 +124,13 @@
         }
     }
 
+    private boolean mustLaunchSecurely() {
+        LockPatternUtils lockPatternUtils = getLockPatternUtils();
+        KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(getContext());
+        int currentUser = lockPatternUtils.getCurrentUser();
+        return lockPatternUtils.isSecure() && !updateMonitor.getUserHasTrust(currentUser);
+    }
+
     public void launchWidgetPicker(int appWidgetId) {
         Intent pickIntent = new Intent(AppWidgetManager.ACTION_KEYGUARD_APPWIDGET_PICK);
 
@@ -175,9 +185,9 @@
                 Intent.FLAG_ACTIVITY_NEW_TASK
                 | Intent.FLAG_ACTIVITY_SINGLE_TOP
                 | Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        boolean isSecure = lockPatternUtils.isSecure();
-        if (!isSecure || showsWhileLocked) {
-            if (!isSecure) {
+        boolean mustLaunchSecurely = mustLaunchSecurely();
+        if (!mustLaunchSecurely || showsWhileLocked) {
+            if (!mustLaunchSecurely) {
                 dismissKeyguardOnNextActivity();
             }
             try {
@@ -190,8 +200,7 @@
         } else {
             // Create a runnable to start the activity and ask the user to enter their
             // credentials.
-            KeyguardSecurityCallback callback = getCallback();
-            callback.setOnDismissAction(new OnDismissAction() {
+            setOnDismissAction(new OnDismissAction() {
                 @Override
                 public boolean onDismiss() {
                     dismissKeyguardOnNextActivity();
@@ -199,7 +208,7 @@
                     return true;
                 }
             });
-            callback.dismiss(false);
+            requestDismissKeyguard();
         }
     }
 
@@ -252,7 +261,7 @@
     }
 
     private Intent getCameraIntent() {
-        return getLockPatternUtils().isSecure() ? SECURE_CAMERA_INTENT : INSECURE_CAMERA_INTENT;
+        return mustLaunchSecurely() ? SECURE_CAMERA_INTENT : INSECURE_CAMERA_INTENT;
     }
 
     private boolean wouldLaunchResolverActivity(Intent intent) {
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardCircleFramedDrawable.java b/packages/Keyguard/src/com/android/keyguard/KeyguardCircleFramedDrawable.java
index 63b61ad..0e08cf4 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardCircleFramedDrawable.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardCircleFramedDrawable.java
@@ -29,8 +29,6 @@
 import android.graphics.RectF;
 import android.graphics.drawable.Drawable;
 
-import android.util.Log;
-
 class KeyguardCircleFramedDrawable extends Drawable {
 
     private final Bitmap mBitmap;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java b/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java
new file mode 100644
index 0000000..bfa95f38
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardConstants.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014 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.android.keyguard;
+
+/**
+ * Defines constants for the Keyguard.
+ */
+public class KeyguardConstants {
+
+    /**
+     * Turns on debugging information for the whole Keyguard. This is very verbose and should only
+     * be used temporarily for debugging.
+     */
+    public static final boolean DEBUG = false;
+
+    /** Timeout used for key presses. */
+    public static final int DIGIT_PRESS_WAKE_MILLIS = 5000;
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java
index 6bcbd6c..55f965c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardDisplayManager.java
@@ -30,18 +30,18 @@
 
 public class KeyguardDisplayManager {
     protected static final String TAG = "KeyguardDisplayManager";
-    private static boolean DEBUG = KeyguardViewMediator.DEBUG;
+    private static boolean DEBUG = KeyguardConstants.DEBUG;
     Presentation mPresentation;
     private MediaRouter mMediaRouter;
     private Context mContext;
     private boolean mShowing;
 
-    KeyguardDisplayManager(Context context) {
+    public KeyguardDisplayManager(Context context) {
         mContext = context;
         mMediaRouter = (MediaRouter) mContext.getSystemService(Context.MEDIA_ROUTER_SERVICE);
     }
 
-    void show() {
+    public void show() {
         if (!mShowing) {
             if (DEBUG) Slog.v(TAG, "show");
             mMediaRouter.addCallback(MediaRouter.ROUTE_TYPE_REMOTE_DISPLAY,
@@ -51,7 +51,7 @@
         mShowing = true;
     }
 
-    void hide() {
+    public void hide() {
         if (mShowing) {
             if (DEBUG) Slog.v(TAG, "hide");
             mMediaRouter.removeCallback(mMediaRouterCallback);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java
index c2cd32f..900d16e 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardFaceUnlockView.java
@@ -36,7 +36,7 @@
 public class KeyguardFaceUnlockView extends LinearLayout implements KeyguardSecurityView {
 
     private static final String TAG = "FULKeyguardFaceUnlockView";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     private KeyguardSecurityCallback mKeyguardSecurityCallback;
     private LockPatternUtils mLockPatternUtils;
     private BiometricSensorUnlock mBiometricUnlock;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
index 247089f..f85e29f 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java
@@ -16,15 +16,14 @@
 
 package com.android.keyguard;
 
+import android.nfc.NfcUnlock;
+
 import com.android.internal.widget.LockPatternUtils;
 import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
 import com.android.keyguard.KeyguardUpdateMonitor.DisplayClientState;
 
-import android.app.Activity;
 import android.app.ActivityManager;
 import android.app.ActivityOptions;
-import android.app.AlertDialog;
-import android.app.SearchManager;
 import android.app.admin.DevicePolicyManager;
 import android.appwidget.AppWidgetHost;
 import android.appwidget.AppWidgetHostView;
@@ -35,33 +34,29 @@
 import android.content.Intent;
 import android.content.IntentSender;
 import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.pm.UserInfo;
 import android.content.res.Resources;
-import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.media.RemoteControlClient;
+import android.os.Bundle;
 import android.os.Looper;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.SystemClock;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.provider.Settings;
 import android.util.AttributeSet;
 import android.util.Log;
-import android.util.Slog;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.View;
-import android.view.WindowManager;
 import android.widget.RemoteViews.OnClickHandler;
 
-import java.io.File;
 import java.lang.ref.WeakReference;
-import java.util.List;
 
 public class KeyguardHostView extends KeyguardViewBase {
     private static final String TAG = "KeyguardHostView";
+    public static boolean DEBUG = KeyguardConstants.DEBUG;
+    public static boolean DEBUGXPORT = true; // debug music transport control
 
     // Transport control states.
     static final int TRANSPORT_GONE = 0;
@@ -70,42 +65,24 @@
 
     private int mTransportState = TRANSPORT_GONE;
 
-    // Use this to debug all of keyguard
-    public static boolean DEBUG = KeyguardViewMediator.DEBUG;
-    public static boolean DEBUGXPORT = true; // debug music transport control
-
     // Found in KeyguardAppWidgetPickActivity.java
     static final int APPWIDGET_HOST_ID = 0x4B455947;
-
     private final int MAX_WIDGETS = 5;
 
     private AppWidgetHost mAppWidgetHost;
     private AppWidgetManager mAppWidgetManager;
     private KeyguardWidgetPager mAppWidgetContainer;
-    private KeyguardSecurityViewFlipper mSecurityViewContainer;
-    private KeyguardSelectorView mKeyguardSelectorView;
     private KeyguardTransportControlView mTransportControl;
-    private boolean mIsVerifyUnlockOnly;
-    private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
-    private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
     private int mAppWidgetToShow;
 
-    protected OnDismissAction mDismissAction;
-
     protected int mFailedAttempts;
-    private LockPatternUtils mLockPatternUtils;
 
-    private KeyguardSecurityModel mSecurityModel;
     private KeyguardViewStateManager mViewStateManager;
 
     private Rect mTempRect = new Rect();
-
     private int mDisabledFeatures;
-
     private boolean mCameraDisabled;
-
     private boolean mSafeModeEnabled;
-
     private boolean mUserSetupCompleted;
 
     // User for whom this host view was created.  Final because we should never change the
@@ -135,7 +112,7 @@
         void userActivity();
     }
 
-    /*package*/ interface OnDismissAction {
+    public interface OnDismissAction {
         /* returns true if the dismiss should be deferred */
         boolean onDismiss();
     }
@@ -184,8 +161,6 @@
 
         mAppWidgetManager = AppWidgetManager.getInstance(userContext);
 
-        mSecurityModel = new KeyguardSecurityModel(context);
-
         mViewStateManager = new KeyguardViewStateManager(this);
 
         mUserSetupCompleted = Settings.Secure.getIntForUser(mContext.getContentResolver(),
@@ -205,13 +180,6 @@
         }
     }
 
-    public void announceCurrentSecurityMethod() {
-        View v = (View) getSecurityView(mCurrentSecuritySelection);
-        if (v != null) {
-            v.announceForAccessibility(v.getContentDescription());
-        }
-    }
-
     private void getInitialTransportState() {
         DisplayClientState dcs = KeyguardUpdateMonitor.getInstance(mContext)
                 .getCachedDisplayClientState();
@@ -267,7 +235,7 @@
             }
         }
         @Override
-        void onMusicClientIdChanged(
+        public void onMusicClientIdChanged(
                 int clientGeneration, boolean clearing, android.app.PendingIntent intent) {
             // Set transport state to invisible until we know music is playing (below)
             if (DEBUGXPORT && (mClientGeneration != clientGeneration || clearing)) {
@@ -296,6 +264,12 @@
                 }
             }
         }
+        @Override
+        public void onNfcUnlock() {
+            if (NfcUnlock.getPropertyEnabled()) {
+                dismiss(true);
+            }
+        }
     };
 
     private static final boolean isMusicPlaying(int playbackState) {
@@ -320,21 +294,13 @@
     public boolean onTouchEvent(MotionEvent ev) {
         boolean result = super.onTouchEvent(ev);
         mTempRect.set(0, 0, 0, 0);
-        offsetRectIntoDescendantCoords(mSecurityViewContainer, mTempRect);
+        offsetRectIntoDescendantCoords(getSecurityContainer(), mTempRect);
         ev.offsetLocation(mTempRect.left, mTempRect.top);
-        result = mSecurityViewContainer.dispatchTouchEvent(ev) || result;
+        result = getSecurityContainer().dispatchTouchEvent(ev) || result;
         ev.offsetLocation(-mTempRect.left, -mTempRect.top);
         return result;
     }
 
-    @Override
-    protected void dispatchDraw(Canvas canvas) {
-        super.dispatchDraw(canvas);
-        if (mViewMediatorCallback != null) {
-            mViewMediatorCallback.keyguardDoneDrawing();
-        }
-    }
-
     private int getWidgetPosition(int id) {
         final KeyguardWidgetPager appWidgetContainer = mAppWidgetContainer;
         final int children = appWidgetContainer.getChildCount();
@@ -352,6 +318,8 @@
 
     @Override
     protected void onFinishInflate() {
+        super.onFinishInflate();
+
         // Grab instances of and make any necessary changes to the main layouts. Create
         // view state manager and wire up necessary listeners / callbacks.
         View deleteDropTarget = findViewById(R.id.keyguard_widget_pager_delete_target);
@@ -376,11 +344,8 @@
         mAppWidgetContainer.setBouncerAnimationDuration(challenge.getBouncerAnimationDuration());
         mViewStateManager.setPagedView(mAppWidgetContainer);
         mViewStateManager.setChallengeLayout(challenge);
-        mSecurityViewContainer = (KeyguardSecurityViewFlipper) findViewById(R.id.view_flipper);
-        mKeyguardSelectorView = (KeyguardSelectorView) findViewById(R.id.keyguard_selector_view);
-        mViewStateManager.setSecurityViewContainer(mSecurityViewContainer);
 
-        setBackButtonEnabled(false);
+        mViewStateManager.setSecurityViewContainer(getSecurityContainer());
 
         if (KeyguardUpdateMonitor.getInstance(mContext).hasBootCompleted()) {
             updateAndAddWidgets();
@@ -395,8 +360,7 @@
             };
         }
 
-        showPrimarySecurityScreen(false);
-        updateSecurityViews();
+        getSecurityContainer().updateSecurityViews(mViewStateManager.isBouncing());
         enableUserSelectorIfNecessary();
     }
 
@@ -425,17 +389,37 @@
         }
     }
 
-    private void setBackButtonEnabled(boolean enabled) {
-        if (mContext instanceof Activity) return;  // always enabled in activity mode
-        setSystemUiVisibility(enabled ?
-                getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_BACK :
-                getSystemUiVisibility() | View.STATUS_BAR_DISABLE_BACK);
-    }
-
     private boolean shouldEnableAddWidget() {
         return numWidgets() < MAX_WIDGETS && mUserSetupCompleted;
     }
 
+    @Override
+    public boolean dismiss(boolean authenticated) {
+        boolean finished = super.dismiss(authenticated);
+        if (!finished) {
+            mViewStateManager.showBouncer(true);
+
+            // Enter full screen mode if we're in SIM or Account screen
+            SecurityMode securityMode = getSecurityContainer().getSecurityMode();
+            boolean isFullScreen = getResources().getBoolean(R.bool.kg_sim_puk_account_full_screen);
+            boolean isSimOrAccount = securityMode == SecurityMode.SimPin
+                    || securityMode == SecurityMode.SimPuk
+                    || securityMode == SecurityMode.Account;
+            mAppWidgetContainer.setVisibility(
+                    isSimOrAccount && isFullScreen ? View.GONE : View.VISIBLE);
+
+            // Don't show camera or search in navbar when SIM or Account screen is showing
+            setSystemUiVisibility(isSimOrAccount ?
+                    (getSystemUiVisibility() | View.STATUS_BAR_DISABLE_SEARCH)
+                    : (getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_SEARCH));
+
+            if (mSlidingChallengeLayout != null) {
+                mSlidingChallengeLayout.setChallengeInteractive(!isFullScreen);
+            }
+        }
+        return finished;
+    }
+
     private int getDisabledFeatures(DevicePolicyManager dpm) {
         int disabledFeatures = DevicePolicyManager.KEYGUARD_DISABLE_FEATURES_NONE;
         if (dpm != null) {
@@ -458,32 +442,10 @@
                 || (mDisabledFeatures & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0;
     }
 
-    private void updateSecurityViews() {
-        int children = mSecurityViewContainer.getChildCount();
-        for (int i = 0; i < children; i++) {
-            updateSecurityView(mSecurityViewContainer.getChildAt(i));
-        }
-    }
-
-    private void updateSecurityView(View view) {
-        if (view instanceof KeyguardSecurityView) {
-            KeyguardSecurityView ksv = (KeyguardSecurityView) view;
-            ksv.setKeyguardCallback(mCallback);
-            ksv.setLockPatternUtils(mLockPatternUtils);
-            if (mViewStateManager.isBouncing()) {
-                ksv.showBouncer(0);
-            } else {
-                ksv.hideBouncer(0);
-            }
-        } else {
-            Log.w(TAG, "View " + view + " is not a KeyguardSecurityView");
-        }
-    }
-
-    void setLockPatternUtils(LockPatternUtils utils) {
-        mSecurityModel.setLockPatternUtils(utils);
-        mLockPatternUtils = utils;
-        updateSecurityViews();
+    @Override
+    public void setLockPatternUtils(LockPatternUtils utils) {
+        super.setLockPatternUtils(utils);
+        getSecurityContainer().updateSecurityViews(mViewStateManager.isBouncing());
     }
 
     @Override
@@ -542,7 +504,8 @@
         }
     };
 
-    public void initializeSwitchingUserState(boolean switching) {
+    @Override
+    public void onUserSwitching(boolean switching) {
         if (!switching && mKeyguardMultiUserSelectorView != null) {
             mKeyguardMultiUserSelectorView.finalizeActiveUserView(false);
         }
@@ -570,283 +533,23 @@
         return -1;
     }
 
-    private KeyguardSecurityCallback mCallback = new KeyguardSecurityCallback() {
-
-        public void userActivity(long timeout) {
-            if (mViewMediatorCallback != null) {
-                mViewMediatorCallback.userActivity(timeout);
-            }
-        }
-
-        public void dismiss(boolean authenticated) {
-            showNextSecurityScreenOrFinish(authenticated);
-        }
-
-        public boolean isVerifyUnlockOnly() {
-            return mIsVerifyUnlockOnly;
-        }
-
-        public void reportSuccessfulUnlockAttempt() {
-            KeyguardUpdateMonitor.getInstance(mContext).clearFailedUnlockAttempts();
-            mLockPatternUtils.reportSuccessfulPasswordAttempt();
-        }
-
-        public void reportFailedUnlockAttempt() {
-            if (mCurrentSecuritySelection == SecurityMode.Biometric) {
-                KeyguardUpdateMonitor.getInstance(mContext).reportFailedBiometricUnlockAttempt();
-            } else {
-                KeyguardHostView.this.reportFailedUnlockAttempt();
-            }
-        }
-
-        public int getFailedAttempts() {
-            return KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts();
-        }
-
-        @Override
-        public void showBackupSecurity() {
-            KeyguardHostView.this.showBackupSecurityScreen();
-        }
-
-        @Override
-        public void setOnDismissAction(OnDismissAction action) {
-            KeyguardHostView.this.setOnDismissAction(action);
-        }
-
-    };
-
-    private void showDialog(String title, String message) {
-        final AlertDialog dialog = new AlertDialog.Builder(mContext)
-            .setTitle(title)
-            .setMessage(message)
-            .setNeutralButton(R.string.ok, null)
-            .create();
-        if (!(mContext instanceof Activity)) {
-            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
-        }
-        dialog.show();
-    }
-
-    private void showTimeoutDialog() {
-        int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
-        int messageId = 0;
-
-        switch (mSecurityModel.getSecurityMode()) {
-            case Pattern:
-                messageId = R.string.kg_too_many_failed_pattern_attempts_dialog_message;
-                break;
-            case PIN:
-                messageId = R.string.kg_too_many_failed_pin_attempts_dialog_message;
-                break;
-            case Password:
-                messageId = R.string.kg_too_many_failed_password_attempts_dialog_message;
-                break;
-        }
-
-        if (messageId != 0) {
-            final String message = mContext.getString(messageId,
-                    KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts(),
-                    timeoutInSeconds);
-            showDialog(null, message);
-        }
-    }
-
-    private void showAlmostAtWipeDialog(int attempts, int remaining) {
-        String message = mContext.getString(R.string.kg_failed_attempts_almost_at_wipe,
-                attempts, remaining);
-        showDialog(null, message);
-    }
-
-    private void showWipeDialog(int attempts) {
-        String message = mContext.getString(R.string.kg_failed_attempts_now_wiping, attempts);
-        showDialog(null, message);
-    }
-
-    private void showAlmostAtAccountLoginDialog() {
-        final int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
-        final int count = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
-                - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
-        String message = mContext.getString(R.string.kg_failed_attempts_almost_at_login,
-                count, LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT, timeoutInSeconds);
-        showDialog(null, message);
-    }
-
-    private void reportFailedUnlockAttempt() {
-        final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
-        final int failedAttempts = monitor.getFailedUnlockAttempts() + 1; // +1 for this time
-
-        if (DEBUG) Log.d(TAG, "reportFailedPatternAttempt: #" + failedAttempts);
-
-        SecurityMode mode = mSecurityModel.getSecurityMode();
-        final boolean usingPattern = mode == KeyguardSecurityModel.SecurityMode.Pattern;
-
-        final int failedAttemptsBeforeWipe = mLockPatternUtils.getDevicePolicyManager()
-                .getMaximumFailedPasswordsForWipe(null, mLockPatternUtils.getCurrentUser());
-
-        final int failedAttemptWarning = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
-                - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
-
-        final int remainingBeforeWipe = failedAttemptsBeforeWipe > 0 ?
-                (failedAttemptsBeforeWipe - failedAttempts)
-                : Integer.MAX_VALUE; // because DPM returns 0 if no restriction
-
-        boolean showTimeout = false;
-        if (remainingBeforeWipe < LockPatternUtils.FAILED_ATTEMPTS_BEFORE_WIPE_GRACE) {
-            // If we reach this code, it means the user has installed a DevicePolicyManager
-            // that requests device wipe after N attempts.  Once we get below the grace
-            // period, we'll post this dialog every time as a clear warning until the
-            // bombshell hits and the device is wiped.
-            if (remainingBeforeWipe > 0) {
-                showAlmostAtWipeDialog(failedAttempts, remainingBeforeWipe);
-            } else {
-                // Too many attempts. The device will be wiped shortly.
-                Slog.i(TAG, "Too many unlock attempts; device will be wiped!");
-                showWipeDialog(failedAttempts);
-            }
-        } else {
-            showTimeout =
-                (failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) == 0;
-            if (usingPattern && mEnableFallback) {
-                if (failedAttempts == failedAttemptWarning) {
-                    showAlmostAtAccountLoginDialog();
-                    showTimeout = false; // don't show both dialogs
-                } else if (failedAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET) {
-                    mLockPatternUtils.setPermanentlyLocked(true);
-                    showSecurityScreen(SecurityMode.Account);
-                    // don't show timeout dialog because we show account unlock screen next
-                    showTimeout = false;
-                }
-            }
-        }
-        monitor.reportFailedUnlockAttempt();
-        mLockPatternUtils.reportFailedPasswordAttempt();
-        if (showTimeout) {
-            showTimeoutDialog();
-        }
-    }
-
-    /**
-     * Shows the primary security screen for the user. This will be either the multi-selector
-     * or the user's security method.
-     * @param turningOff true if the device is being turned off
-     */
-    void showPrimarySecurityScreen(boolean turningOff) {
-        SecurityMode securityMode = mSecurityModel.getSecurityMode();
-        if (DEBUG) Log.v(TAG, "showPrimarySecurityScreen(turningOff=" + turningOff + ")");
-        if (!turningOff &&
-                KeyguardUpdateMonitor.getInstance(mContext).isAlternateUnlockEnabled()) {
-            // If we're not turning off, then allow biometric alternate.
-            // We'll reload it when the device comes back on.
-            securityMode = mSecurityModel.getAlternateFor(securityMode);
-        }
-        showSecurityScreen(securityMode);
-    }
-
-    /**
-     * Shows the backup security screen for the current security mode.  This could be used for
-     * password recovery screens but is currently only used for pattern unlock to show the
-     * account unlock screen and biometric unlock to show the user's normal unlock.
-     */
-    private void showBackupSecurityScreen() {
-        if (DEBUG) Log.d(TAG, "showBackupSecurity()");
-        SecurityMode backup = mSecurityModel.getBackupSecurityMode(mCurrentSecuritySelection);
-        showSecurityScreen(backup);
-    }
-
-    public boolean showNextSecurityScreenIfPresent() {
-        SecurityMode securityMode = mSecurityModel.getSecurityMode();
-        // Allow an alternate, such as biometric unlock
-        securityMode = mSecurityModel.getAlternateFor(securityMode);
-        if (SecurityMode.None == securityMode) {
-            return false;
-        } else {
-            showSecurityScreen(securityMode); // switch to the alternate security view
-            return true;
-        }
-    }
-
-    private void showNextSecurityScreenOrFinish(boolean authenticated) {
-        if (DEBUG) Log.d(TAG, "showNextSecurityScreenOrFinish(" + authenticated + ")");
-        boolean finish = false;
-        if (SecurityMode.None == mCurrentSecuritySelection) {
-            SecurityMode securityMode = mSecurityModel.getSecurityMode();
-            // Allow an alternate, such as biometric unlock
-            securityMode = mSecurityModel.getAlternateFor(securityMode);
-            if (SecurityMode.None == securityMode) {
-                finish = true; // no security required
-            } else {
-                showSecurityScreen(securityMode); // switch to the alternate security view
-            }
-        } else if (authenticated) {
-            switch (mCurrentSecuritySelection) {
-                case Pattern:
-                case Password:
-                case PIN:
-                case Account:
-                case Biometric:
-                    finish = true;
-                    break;
-
-                case SimPin:
-                case SimPuk:
-                    // Shortcut for SIM PIN/PUK to go to directly to user's security screen or home
-                    SecurityMode securityMode = mSecurityModel.getSecurityMode();
-                    if (securityMode != SecurityMode.None) {
-                        showSecurityScreen(securityMode);
-                    } else {
-                        finish = true;
-                    }
-                    break;
-
-                default:
-                    Log.v(TAG, "Bad security screen " + mCurrentSecuritySelection + ", fail safe");
-                    showPrimarySecurityScreen(false);
-                    break;
-            }
-        } else {
-            showPrimarySecurityScreen(false);
-        }
-        if (finish) {
-            // If the alternate unlock was suppressed, it can now be safely
-            // enabled because the user has left keyguard.
-            KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
-
-            // If there's a pending runnable because the user interacted with a widget
-            // and we're leaving keyguard, then run it.
-            boolean deferKeyguardDone = false;
-            if (mDismissAction != null) {
-                deferKeyguardDone = mDismissAction.onDismiss();
-                mDismissAction = null;
-            }
-            if (mViewMediatorCallback != null) {
-                if (deferKeyguardDone) {
-                    mViewMediatorCallback.keyguardDonePending();
-                } else {
-                    mViewMediatorCallback.keyguardDone(true);
-                }
-            }
-        } else {
-            mViewStateManager.showBouncer(true);
-        }
-    }
-
     private static class MyOnClickHandler extends OnClickHandler {
 
         // weak reference to the hostView to avoid keeping a live reference
         // due to Binder GC linkages to AppWidgetHost. By the same token,
         // this click handler should not keep references to any large
         // objects.
-        WeakReference<KeyguardHostView> mThis;
+        WeakReference<KeyguardHostView> mKeyguardHostView;
 
         MyOnClickHandler(KeyguardHostView hostView) {
-            mThis = new WeakReference<KeyguardHostView>(hostView);
+            mKeyguardHostView = new WeakReference<KeyguardHostView>(hostView);
         }
 
         @Override
         public boolean onClickHandler(final View view,
                 final android.app.PendingIntent pendingIntent,
                 final Intent fillInIntent) {
-            KeyguardHostView hostView = mThis.get();
+            KeyguardHostView hostView = mKeyguardHostView.get();
             if (hostView == null) {
                 return false;
             }
@@ -876,7 +579,7 @@
                 if (hostView.mViewStateManager.isChallengeShowing()) {
                     hostView.mViewStateManager.showBouncer(true);
                 } else {
-                    hostView.mCallback.dismiss(false);
+                    hostView.dismiss();
                 }
                 return true;
             } else {
@@ -885,249 +588,33 @@
         };
     };
 
-    // Used to ignore callbacks from methods that are no longer current (e.g. face unlock).
-    // This avoids unwanted asynchronous events from messing with the state.
-    private KeyguardSecurityCallback mNullCallback = new KeyguardSecurityCallback() {
-
-        @Override
-        public void userActivity(long timeout) {
-        }
-
-        @Override
-        public void showBackupSecurity() {
-        }
-
-        @Override
-        public void setOnDismissAction(OnDismissAction action) {
-        }
-
-        @Override
-        public void reportSuccessfulUnlockAttempt() {
-        }
-
-        @Override
-        public void reportFailedUnlockAttempt() {
-        }
-
-        @Override
-        public boolean isVerifyUnlockOnly() {
-            return false;
-        }
-
-        @Override
-        public int getFailedAttempts() {
-            return 0;
-        }
-
-        @Override
-        public void dismiss(boolean securityVerified) {
-        }
-    };
-
-    /**
-     * Sets an action to perform when keyguard is dismissed.
-     * @param action
-     */
-    protected void setOnDismissAction(OnDismissAction action) {
-        mDismissAction = action;
-    }
-
-    private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
-        final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
-        KeyguardSecurityView view = null;
-        final int children = mSecurityViewContainer.getChildCount();
-        for (int child = 0; child < children; child++) {
-            if (mSecurityViewContainer.getChildAt(child).getId() == securityViewIdForMode) {
-                view = ((KeyguardSecurityView)mSecurityViewContainer.getChildAt(child));
-                break;
-            }
-        }
-        int layoutId = getLayoutIdFor(securityMode);
-        if (view == null && layoutId != 0) {
-            final LayoutInflater inflater = LayoutInflater.from(mContext);
-            if (DEBUG) Log.v(TAG, "inflating id = " + layoutId);
-            View v = inflater.inflate(layoutId, mSecurityViewContainer, false);
-            mSecurityViewContainer.addView(v);
-            updateSecurityView(v);
-            view = (KeyguardSecurityView)v;
-        }
-
-        if (view instanceof KeyguardSelectorView) {
-            KeyguardSelectorView selectorView = (KeyguardSelectorView) view;
-            View carrierText = selectorView.findViewById(R.id.keyguard_selector_fade_container);
-            selectorView.setCarrierArea(carrierText);
-        }
-
-        return view;
-    }
-
-    /**
-     * Switches to the given security view unless it's already being shown, in which case
-     * this is a no-op.
-     *
-     * @param securityMode
-     */
-    private void showSecurityScreen(SecurityMode securityMode) {
-        if (DEBUG) Log.d(TAG, "showSecurityScreen(" + securityMode + ")");
-
-        if (securityMode == mCurrentSecuritySelection) return;
-
-        KeyguardSecurityView oldView = getSecurityView(mCurrentSecuritySelection);
-        KeyguardSecurityView newView = getSecurityView(securityMode);
-
-        // Enter full screen mode if we're in SIM or Account screen
-        boolean fullScreenEnabled = getResources().getBoolean(R.bool.kg_sim_puk_account_full_screen);
-        boolean isSimOrAccount = securityMode == SecurityMode.SimPin
-                || securityMode == SecurityMode.SimPuk
-                || securityMode == SecurityMode.Account;
-        mAppWidgetContainer.setVisibility(
-                isSimOrAccount && fullScreenEnabled ? View.GONE : View.VISIBLE);
-
-        // Don't show camera or search in navbar when SIM or Account screen is showing
-        setSystemUiVisibility(isSimOrAccount ?
-                (getSystemUiVisibility() | View.STATUS_BAR_DISABLE_SEARCH)
-                : (getSystemUiVisibility() & ~View.STATUS_BAR_DISABLE_SEARCH));
-
-        if (mSlidingChallengeLayout != null) {
-            mSlidingChallengeLayout.setChallengeInteractive(!fullScreenEnabled);
-        }
-
-        // Emulate Activity life cycle
-        if (oldView != null) {
-            oldView.onPause();
-            oldView.setKeyguardCallback(mNullCallback); // ignore requests from old view
-        }
-        newView.onResume(KeyguardSecurityView.VIEW_REVEALED);
-        newView.setKeyguardCallback(mCallback);
-
-        final boolean needsInput = newView.needsInput();
-        if (mViewMediatorCallback != null) {
-            mViewMediatorCallback.setNeedsInput(needsInput);
-        }
-
-        // Find and show this child.
-        final int childCount = mSecurityViewContainer.getChildCount();
-
-        final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
-        for (int i = 0; i < childCount; i++) {
-            if (mSecurityViewContainer.getChildAt(i).getId() == securityViewIdForMode) {
-                mSecurityViewContainer.setDisplayedChild(i);
-                break;
-            }
-        }
-
-        if (securityMode == SecurityMode.None) {
-            // Discard current runnable if we're switching back to the selector view
-            setOnDismissAction(null);
-        }
-        if (securityMode == SecurityMode.Account && !mLockPatternUtils.isPermanentlyLocked()) {
-            // we're showing account as a backup, provide a way to get back to primary
-            setBackButtonEnabled(true);
-        }
-        mCurrentSecuritySelection = securityMode;
-    }
-
     @Override
-    public void onScreenTurnedOn() {
-        if (DEBUG) Log.d(TAG, "screen on, instance " + Integer.toHexString(hashCode()));
-        showPrimarySecurityScreen(false);
-        getSecurityView(mCurrentSecuritySelection).onResume(KeyguardSecurityView.SCREEN_ON);
-
-        // This is a an attempt to fix bug 7137389 where the device comes back on but the entire
-        // layout is blank but forcing a layout causes it to reappear (e.g. with with
-        // hierarchyviewer).
-        requestLayout();
-
+    public void onResume() {
+        super.onResume();
         if (mViewStateManager != null) {
             mViewStateManager.showUsabilityHints();
         }
-
-        requestFocus();
     }
 
     @Override
-    public void onScreenTurnedOff() {
-        if (DEBUG) Log.d(TAG, String.format("screen off, instance %s at %s",
-                Integer.toHexString(hashCode()), SystemClock.uptimeMillis()));
-        // Once the screen turns off, we no longer consider this to be first boot and we want the
-        // biometric unlock to start next time keyguard is shown.
-        KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
+    public void onPause() {
+        super.onPause();
         // We use mAppWidgetToShow to show a particular widget after you add it-- once the screen
         // turns off we reset that behavior
         clearAppWidgetToShow();
         if (KeyguardUpdateMonitor.getInstance(mContext).hasBootCompleted()) {
             checkAppWidgetConsistency();
         }
-        showPrimarySecurityScreen(true);
-        getSecurityView(mCurrentSecuritySelection).onPause();
         CameraWidgetFrame cameraPage = findCameraPage();
         if (cameraPage != null) {
             cameraPage.onScreenTurnedOff();
         }
-
-        clearFocus();
     }
 
     public void clearAppWidgetToShow() {
         mAppWidgetToShow = AppWidgetManager.INVALID_APPWIDGET_ID;
     }
 
-    @Override
-    public void show() {
-        if (DEBUG) Log.d(TAG, "show()");
-        showPrimarySecurityScreen(false);
-    }
-
-    @Override
-    public void verifyUnlock() {
-        SecurityMode securityMode = mSecurityModel.getSecurityMode();
-        if (securityMode == KeyguardSecurityModel.SecurityMode.None) {
-            if (mViewMediatorCallback != null) {
-                mViewMediatorCallback.keyguardDone(true);
-            }
-        } else if (securityMode != KeyguardSecurityModel.SecurityMode.Pattern
-                && securityMode != KeyguardSecurityModel.SecurityMode.PIN
-                && securityMode != KeyguardSecurityModel.SecurityMode.Password) {
-            // can only verify unlock when in pattern/password mode
-            if (mViewMediatorCallback != null) {
-                mViewMediatorCallback.keyguardDone(false);
-            }
-        } else {
-            // otherwise, go to the unlock screen, see if they can verify it
-            mIsVerifyUnlockOnly = true;
-            showSecurityScreen(securityMode);
-        }
-    }
-
-    private int getSecurityViewIdForMode(SecurityMode securityMode) {
-        switch (securityMode) {
-            case None: return R.id.keyguard_selector_view;
-            case Pattern: return R.id.keyguard_pattern_view;
-            case PIN: return R.id.keyguard_pin_view;
-            case Password: return R.id.keyguard_password_view;
-            case Biometric: return R.id.keyguard_face_unlock_view;
-            case Account: return R.id.keyguard_account_view;
-            case SimPin: return R.id.keyguard_sim_pin_view;
-            case SimPuk: return R.id.keyguard_sim_puk_view;
-        }
-        return 0;
-    }
-
-    private int getLayoutIdFor(SecurityMode securityMode) {
-        switch (securityMode) {
-            case None: return R.layout.keyguard_selector_view;
-            case Pattern: return R.layout.keyguard_pattern_view;
-            case PIN: return R.layout.keyguard_pin_view;
-            case Password: return R.layout.keyguard_password_view;
-            case Biometric: return R.layout.keyguard_face_unlock_view;
-            case Account: return R.layout.keyguard_account_view;
-            case SimPin: return R.layout.keyguard_sim_pin_view;
-            case SimPuk: return R.layout.keyguard_sim_puk_view;
-            default:
-                return 0;
-        }
-    }
-
     private boolean addWidget(int appId, int pageIndex, boolean updateDbIfFailed) {
         AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appId);
         if (appWidgetInfo != null) {
@@ -1175,23 +662,6 @@
             }
         };
 
-    private final KeyguardActivityLauncher mActivityLauncher = new KeyguardActivityLauncher() {
-        @Override
-        Context getContext() {
-            return mContext;
-        }
-
-        @Override
-        KeyguardSecurityCallback getCallback() {
-            return mCallback;
-        }
-
-        @Override
-        LockPatternUtils getLockPatternUtils() {
-            return mLockPatternUtils;
-        }
-    };
-
     private int numWidgets() {
         final int childCount = mAppWidgetContainer.getChildCount();
         int widgetCount = 0;
@@ -1213,7 +683,7 @@
                 @Override
                 public void onClick(View v) {
                     // Pass in an invalid widget id... the picker will allocate an ID for us
-                    mActivityLauncher.launchWidgetPicker(AppWidgetManager.INVALID_APPWIDGET_ID);
+                    getActivityLauncher().launchWidgetPicker(AppWidgetManager.INVALID_APPWIDGET_ID);
                 }
             });
         }
@@ -1223,8 +693,8 @@
         // inflate system-provided camera?
         if (!mSafeModeEnabled && !cameraDisabledByDpm() && mUserSetupCompleted
                 && mContext.getResources().getBoolean(R.bool.kg_enable_camera_default_widget)) {
-            View cameraWidget =
-                    CameraWidgetFrame.create(mContext, mCameraWidgetCallbacks, mActivityLauncher);
+            View cameraWidget = CameraWidgetFrame.create(mContext, mCameraWidgetCallbacks,
+                    getActivityLauncher());
             if (cameraWidget != null) {
                 mAppWidgetContainer.addWidget(cameraWidget);
             }
@@ -1575,9 +1045,6 @@
     }
 
     private void enableUserSelectorIfNecessary() {
-        if (!UserManager.supportsMultipleUsers()) {
-            return; // device doesn't support multi-user mode
-        }
         final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
         if (um == null) {
             Throwable t = new Throwable();
@@ -1587,61 +1054,53 @@
         }
 
         // if there are multiple users, we need to enable to multi-user switcher
-        final List<UserInfo> users = um.getUsers(true);
-        if (users == null) {
-            Throwable t = new Throwable();
-            t.fillInStackTrace();
-            Log.e(TAG, "list of users is null.", t);
+        if (!um.isUserSwitcherEnabled()) {
             return;
         }
 
         final View multiUserView = findViewById(R.id.keyguard_user_selector);
         if (multiUserView == null) {
-            Throwable t = new Throwable();
-            t.fillInStackTrace();
-            Log.e(TAG, "can't find user_selector in layout.", t);
+            if (DEBUG) Log.d(TAG, "can't find user_selector in layout.");
             return;
         }
 
-        if (users.size() > 1) {
-            if (multiUserView instanceof KeyguardMultiUserSelectorView) {
-                mKeyguardMultiUserSelectorView = (KeyguardMultiUserSelectorView) multiUserView;
-                mKeyguardMultiUserSelectorView.setVisibility(View.VISIBLE);
-                mKeyguardMultiUserSelectorView.addUsers(users);
-                UserSwitcherCallback callback = new UserSwitcherCallback() {
-                    @Override
-                    public void hideSecurityView(int duration) {
-                        mSecurityViewContainer.animate().alpha(0).setDuration(duration);
-                    }
-
-                    @Override
-                    public void showSecurityView() {
-                        mSecurityViewContainer.setAlpha(1.0f);
-                    }
-
-                    @Override
-                    public void showUnlockHint() {
-                        if (mKeyguardSelectorView != null) {
-                            mKeyguardSelectorView.showUsabilityHint();
-                        }
-                    }
-
-                    @Override
-                    public void userActivity() {
-                        if (mViewMediatorCallback != null) {
-                            mViewMediatorCallback.userActivity();
-                        }
-                    }
-                };
-                mKeyguardMultiUserSelectorView.setCallback(callback);
-            } else {
-                Throwable t = new Throwable();
-                t.fillInStackTrace();
-                if (multiUserView == null) {
-                    Log.e(TAG, "could not find the user_selector.", t);
-                } else {
-                    Log.e(TAG, "user_selector is the wrong type.", t);
+        if (multiUserView instanceof KeyguardMultiUserSelectorView) {
+            mKeyguardMultiUserSelectorView = (KeyguardMultiUserSelectorView) multiUserView;
+            mKeyguardMultiUserSelectorView.setVisibility(View.VISIBLE);
+            mKeyguardMultiUserSelectorView.addUsers(um.getUsers(true));
+            UserSwitcherCallback callback = new UserSwitcherCallback() {
+                @Override
+                public void hideSecurityView(int duration) {
+                    getSecurityContainer().animate().alpha(0).setDuration(duration);
                 }
+
+                @Override
+                public void showSecurityView() {
+                    getSecurityContainer().setAlpha(1.0f);
+                }
+
+                @Override
+                public void showUnlockHint() {
+                    if (getSecurityContainer() != null) {
+                        getSecurityContainer().showUsabilityHint();
+                    }
+                }
+
+                @Override
+                public void userActivity() {
+                    if (mViewMediatorCallback != null) {
+                        mViewMediatorCallback.userActivity();
+                    }
+                }
+            };
+            mKeyguardMultiUserSelectorView.setCallback(callback);
+        } else {
+            Throwable t = new Throwable();
+            t.fillInStackTrace();
+            if (multiUserView == null) {
+                Log.e(TAG, "could not find the user_selector.", t);
+            } else {
+                Log.e(TAG, "user_selector is the wrong type.", t);
             }
         }
     }
@@ -1655,23 +1114,7 @@
             KeyguardWidgetFrame frame = mAppWidgetContainer.getWidgetPageAt(i);
             frame.removeAllViews();
         }
-        mSecurityViewContainer.onPause(); // clean up any actions in progress
-    }
-
-    /**
-     * In general, we enable unlocking the insecure keyguard with the menu key. However, there are
-     * some cases where we wish to disable it, notably when the menu button placement or technology
-     * is prone to false positives.
-     *
-     * @return true if the menu key should be enabled
-     */
-    private static final String ENABLE_MENU_KEY_FILE = "/data/local/enable_menu_key";
-    private boolean shouldEnableMenuKey() {
-        final Resources res = getResources();
-        final boolean configDisabled = res.getBoolean(R.bool.config_disableMenuKeyInLockScreen);
-        final boolean isTestHarness = ActivityManager.isRunningInTestHarness();
-        final boolean fileOverride = (new File(ENABLE_MENU_KEY_FILE)).exists();
-        return !configDisabled || isTestHarness || fileOverride;
+        getSecurityContainer().onPause(); // clean up any actions in progress
     }
 
     public void goToWidget(int appWidgetId) {
@@ -1679,58 +1122,26 @@
         mSwitchPageRunnable.run();
     }
 
-    public boolean handleMenuKey() {
-        // The following enables the MENU key to work for testing automation
-        if (shouldEnableMenuKey()) {
-            showNextSecurityScreenOrFinish(false);
-            return true;
-        }
-        return false;
+    @Override
+    protected void showBouncer(boolean show) {
+        super.showBouncer(show);
+        mViewStateManager.showBouncer(show);
     }
 
-    public boolean handleBackKey() {
-        if (mCurrentSecuritySelection == SecurityMode.Account) {
-            // go back to primary screen and re-disable back
-            setBackButtonEnabled(false);
-            showPrimarySecurityScreen(false /*turningOff*/);
-            return true;
-        }
-        if (mCurrentSecuritySelection != SecurityMode.None) {
-            mCallback.dismiss(false);
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     *  Dismisses the keyguard by going to the next screen or making it gone.
-     */
-    public void dismiss() {
-        showNextSecurityScreenOrFinish(false);
-    }
-
-    public void showAssistant() {
-        final Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-          .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
-
-        if (intent == null) return;
-
-        final ActivityOptions opts = ActivityOptions.makeCustomAnimation(mContext,
-                R.anim.keyguard_action_assist_enter, R.anim.keyguard_action_assist_exit,
-                getHandler(), null);
-
-        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
-        mActivityLauncher.launchActivityWithAnimation(
-                intent, false, opts.toBundle(), null, null);
-    }
-
-    public void dispatch(MotionEvent event) {
+    @Override
+    public void onExternalMotionEvent(MotionEvent event) {
         mAppWidgetContainer.handleExternalCameraEvent(event);
     }
 
-    public void launchCamera() {
-        mActivityLauncher.launchCamera(getHandler(), null);
+    @Override
+    protected void onCreateOptions(Bundle options) {
+        if (options != null) {
+            int widgetToShow = options.getInt(LockPatternUtils.KEYGUARD_SHOW_APPWIDGET,
+                    AppWidgetManager.INVALID_APPWIDGET_ID);
+            if (widgetToShow != AppWidgetManager.INVALID_APPWIDGET_ID) {
+                goToWidget(widgetToShow);
+            }
+        }
     }
 
 }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java
index bcb2e6d..ede23ef 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMessageArea.java
@@ -23,17 +23,11 @@
 import android.content.Context;
 import android.os.BatteryManager;
 import android.os.Handler;
-import android.os.IBinder;
 import android.os.Looper;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.SystemClock;
-import android.os.UserHandle;
-import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.AttributeSet;
 import android.util.MutableInt;
-import android.util.Slog;
 import android.view.View;
 import android.widget.TextView;
 
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserAvatar.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserAvatar.java
index aa2ae0e..3aec55c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserAvatar.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserAvatar.java
@@ -37,7 +37,7 @@
 
 class KeyguardMultiUserAvatar extends FrameLayout {
     private static final String TAG = KeyguardMultiUserAvatar.class.getSimpleName();
-    private static final boolean DEBUG = KeyguardHostView.DEBUG;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
 
     private ImageView mUserImage;
     private TextView mUserName;
@@ -123,7 +123,7 @@
         mUserName = (TextView) findViewById(R.id.keyguard_user_name);
 
         mFramed = (KeyguardCircleFramedDrawable)
-                KeyguardViewMediator.getAvatarCache().get(user.id);
+                MultiUserAvatarCache.getInstance().get(user.id);
 
         // If we can't find it or the params don't match, create the drawable again
         if (mFramed == null
@@ -143,7 +143,7 @@
 
             mFramed = new KeyguardCircleFramedDrawable(icon, (int) mIconSize, mFrameColor, mStroke,
                     mFrameShadowColor, mShadowRadius, mHighlightColor);
-            KeyguardViewMediator.getAvatarCache().put(user.id, mFramed);
+            MultiUserAvatarCache.getInstance().put(user.id, mFramed);
         }
 
         mFramed.reset();
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserSelectorView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserSelectorView.java
index 7975d8e..06815e1 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserSelectorView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardMultiUserSelectorView.java
@@ -76,11 +76,13 @@
         Collections.sort(users, mOrderAddedComparator);
 
         for (UserInfo user: users) {
-            KeyguardMultiUserAvatar uv = createAndAddUser(user);
-            if (user.id == activeUser.id) {
-                mActiveUserAvatar = uv;
+            if (user.supportsSwitchTo()) {
+                KeyguardMultiUserAvatar uv = createAndAddUser(user);
+                if (user.id == activeUser.id) {
+                    mActiveUserAvatar = uv;
+                }
+                uv.setActive(false, false, null);
             }
-            uv.setActive(false, false, null);
         }
         mActiveUserAvatar.lockPressed(true);
     }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
index 3d1c3f3..ca2d615 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
@@ -17,7 +17,6 @@
 package com.android.keyguard;
 
 import android.content.Context;
-import android.text.Editable;
 import android.text.InputType;
 import android.text.TextWatcher;
 import android.text.method.DigitsKeyListener;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
index 4e3568b..e733afc 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
@@ -16,13 +16,10 @@
 
 package com.android.keyguard;
 
-import android.app.admin.DevicePolicyManager;
 import android.content.Context;
-import android.content.res.Configuration;
 import android.text.Editable;
 import android.text.InputType;
 import android.text.TextWatcher;
-import android.text.method.DigitsKeyListener;
 import android.text.method.TextKeyListener;
 import android.util.AttributeSet;
 import android.view.View;
@@ -31,9 +28,6 @@
 import android.view.inputmethod.InputMethodSubtype;
 import android.widget.TextView.OnEditorActionListener;
 
-import com.android.internal.widget.PasswordEntryKeyboardHelper;
-import com.android.internal.widget.PasswordEntryKeyboardView;
-
 import java.util.List;
 /**
  * Displays an alphanumeric (latin-1) key entry for the user to enter
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
index 3b72f43..b4308c6 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
@@ -44,7 +44,7 @@
 public class KeyguardPatternView extends LinearLayout implements KeyguardSecurityView {
 
     private static final String TAG = "SecurityPatternView";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
 
     // how long before we clear the wrong pattern
     private static final int PATTERN_CLEAR_TIMEOUT_MS = 2000;
@@ -262,7 +262,7 @@
 
         public void onPatternDetected(List<LockPatternView.Cell> pattern) {
             if (mLockPatternUtils.checkPattern(pattern)) {
-                mCallback.reportSuccessfulUnlockAttempt();
+                mCallback.reportUnlockAttempt(true);
                 mLockPatternView.setDisplayMode(LockPatternView.DisplayMode.Correct);
                 mCallback.dismiss(true);
             } else {
@@ -273,7 +273,7 @@
                 boolean registeredAttempt =
                         pattern.size() >= LockPatternUtils.MIN_PATTERN_REGISTER_FAIL;
                 if (registeredAttempt) {
-                    mCallback.reportFailedUnlockAttempt();
+                    mCallback.reportUnlockAttempt(false);
                 }
                 int attempts = mKeyguardUpdateMonitor.getFailedUnlockAttempts();
                 if (registeredAttempt &&
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java
index 4f139ad..975ad6c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityCallback.java
@@ -15,8 +15,6 @@
  */
 package com.android.keyguard;
 
-import com.android.keyguard.KeyguardHostView.OnDismissAction;
-
 public interface KeyguardSecurityCallback {
 
     /**
@@ -39,30 +37,14 @@
     boolean isVerifyUnlockOnly();
 
     /**
-     * Call when user correctly enters their credentials
+     * Call to report an unlock attempt.
+     * @param success set to 'true' if user correctly entered security credentials.
      */
-    void reportSuccessfulUnlockAttempt();
-
-    /**
-     * Call when the user incorrectly enters their credentials
-     */
-    void reportFailedUnlockAttempt();
-
-    /**
-     * Gets the number of attempts thus far as reported by {@link #reportFailedUnlockAttempt()}
-     * @return number of failed attempts
-     */
-    int getFailedAttempts();
+    void reportUnlockAttempt(boolean success);
 
     /**
      * Shows the backup security for the current method.  If none available, this call is a no-op.
      */
     void showBackupSecurity();
 
-    /**
-     * Sets an action to perform after the user successfully enters their credentials.
-     * @param action
-     */
-    void setOnDismissAction(OnDismissAction action);
-
 }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
index 9d03c6a..8425c48 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityContainer.java
@@ -1,11 +1,55 @@
+/*
+ * Copyright (C) 2014 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.android.keyguard;
 
+import android.app.Activity;
+import android.app.AlertDialog;
 import android.content.Context;
 import android.util.AttributeSet;
+import android.util.Log;
+import android.util.Slog;
+import android.view.LayoutInflater;
 import android.view.View;
+import android.view.WindowManager;
 import android.widget.FrameLayout;
 
-public class KeyguardSecurityContainer extends FrameLayout {
+import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
+
+public class KeyguardSecurityContainer extends FrameLayout implements KeyguardSecurityView {
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
+    private static final String TAG = "KeyguardSecurityView";
+    private KeyguardSecurityModel mSecurityModel;
+    private boolean mEnableFallback; // TODO: This should get the value from KeyguardPatternView
+    private LockPatternUtils mLockPatternUtils;
+
+    private KeyguardSecurityViewFlipper mSecurityViewFlipper;
+    private boolean mIsVerifyUnlockOnly;
+    private SecurityMode mCurrentSecuritySelection = SecurityMode.Invalid;
+    private boolean mIsBouncing;
+    private SecurityCallback mSecurityCallback;
+
+    // Used to notify the container when something interesting happens.
+    public interface SecurityCallback {
+        public boolean dismiss(boolean authenticated);
+        public void userActivity(long timeout);
+        public void onSecurityModeChanged(SecurityMode securityMode, boolean needsInput);
+        public void finish();
+    }
+
     public KeyguardSecurityContainer(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
@@ -16,9 +60,331 @@
 
     public KeyguardSecurityContainer(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
+        mSecurityModel = new KeyguardSecurityModel(context);
+        mLockPatternUtils = new LockPatternUtils(context);
     }
 
-    KeyguardSecurityViewFlipper getFlipper() {
+    public void setSecurityCallback(SecurityCallback callback) {
+        mSecurityCallback = callback;
+    }
+
+    @Override
+    public void onResume(int reason) {
+        getSecurityView(mCurrentSecuritySelection).onResume(reason);
+    }
+
+    @Override
+    public void onPause() {
+        getSecurityView(mCurrentSecuritySelection).onPause();
+    }
+
+    void updateSecurityViews(boolean isBouncing) {
+        int children = mSecurityViewFlipper.getChildCount();
+        for (int i = 0; i < children; i++) {
+            updateSecurityView(mSecurityViewFlipper.getChildAt(i), isBouncing);
+        }
+    }
+
+    public void announceCurrentSecurityMethod() {
+        View v = (View) getSecurityView(mCurrentSecuritySelection);
+        if (v != null) {
+            v.announceForAccessibility(v.getContentDescription());
+        }
+    }
+
+    private KeyguardSecurityView getSecurityView(SecurityMode securityMode) {
+        final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
+        KeyguardSecurityView view = null;
+        final int children = mSecurityViewFlipper.getChildCount();
+        for (int child = 0; child < children; child++) {
+            if (mSecurityViewFlipper.getChildAt(child).getId() == securityViewIdForMode) {
+                view = ((KeyguardSecurityView)mSecurityViewFlipper.getChildAt(child));
+                break;
+            }
+        }
+        int layoutId = getLayoutIdFor(securityMode);
+        if (view == null && layoutId != 0) {
+            final LayoutInflater inflater = LayoutInflater.from(mContext);
+            if (DEBUG) Log.v(TAG, "inflating id = " + layoutId);
+            View v = inflater.inflate(layoutId, mSecurityViewFlipper, false);
+            mSecurityViewFlipper.addView(v);
+            updateSecurityView(v, mIsBouncing);
+            view = (KeyguardSecurityView)v;
+        }
+
+        if (view instanceof KeyguardSelectorView) {
+            KeyguardSelectorView selectorView = (KeyguardSelectorView) view;
+            View carrierText = selectorView.findViewById(R.id.keyguard_selector_fade_container);
+            selectorView.setCarrierArea(carrierText);
+        }
+
+        return view;
+    }
+
+    private void updateSecurityView(View view, boolean isBouncing) {
+        mIsBouncing = isBouncing;
+        if (view instanceof KeyguardSecurityView) {
+            KeyguardSecurityView ksv = (KeyguardSecurityView) view;
+            ksv.setKeyguardCallback(mCallback);
+            ksv.setLockPatternUtils(mLockPatternUtils);
+            if (isBouncing) {
+                ksv.showBouncer(0);
+            } else {
+                ksv.hideBouncer(0);
+            }
+        } else {
+            Log.w(TAG, "View " + view + " is not a KeyguardSecurityView");
+        }
+    }
+
+    protected void onFinishInflate() {
+        mSecurityViewFlipper = (KeyguardSecurityViewFlipper) findViewById(R.id.view_flipper);
+        mSecurityViewFlipper.setLockPatternUtils(mLockPatternUtils);
+    }
+
+    public void setLockPatternUtils(LockPatternUtils utils) {
+        mLockPatternUtils = utils;
+        mSecurityModel.setLockPatternUtils(utils);
+        mSecurityViewFlipper.setLockPatternUtils(mLockPatternUtils);
+    }
+
+    private void showDialog(String title, String message) {
+        final AlertDialog dialog = new AlertDialog.Builder(mContext)
+            .setTitle(title)
+            .setMessage(message)
+            .setNeutralButton(R.string.ok, null)
+            .create();
+        if (!(mContext instanceof Activity)) {
+            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
+        }
+        dialog.show();
+    }
+
+    private void showTimeoutDialog() {
+        int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
+        int messageId = 0;
+
+        switch (mSecurityModel.getSecurityMode()) {
+            case Pattern:
+                messageId = R.string.kg_too_many_failed_pattern_attempts_dialog_message;
+                break;
+            case PIN:
+                messageId = R.string.kg_too_many_failed_pin_attempts_dialog_message;
+                break;
+            case Password:
+                messageId = R.string.kg_too_many_failed_password_attempts_dialog_message;
+                break;
+            // These don't have timeout dialogs.
+            case Account:
+            case Biometric:
+            case Invalid:
+            case None:
+            case SimPin:
+            case SimPuk:
+                break;
+        }
+
+        if (messageId != 0) {
+            final String message = mContext.getString(messageId,
+                    KeyguardUpdateMonitor.getInstance(mContext).getFailedUnlockAttempts(),
+                    timeoutInSeconds);
+            showDialog(null, message);
+        }
+    }
+
+    private void showAlmostAtWipeDialog(int attempts, int remaining) {
+        String message = mContext.getString(R.string.kg_failed_attempts_almost_at_wipe,
+                attempts, remaining);
+        showDialog(null, message);
+    }
+
+    private void showWipeDialog(int attempts) {
+        String message = mContext.getString(R.string.kg_failed_attempts_now_wiping, attempts);
+        showDialog(null, message);
+    }
+
+    private void showAlmostAtAccountLoginDialog() {
+        final int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000;
+        final int count = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
+                - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
+        String message = mContext.getString(R.string.kg_failed_attempts_almost_at_login,
+                count, LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT, timeoutInSeconds);
+        showDialog(null, message);
+    }
+
+    private void reportFailedUnlockAttempt() {
+        final KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
+        final int failedAttempts = monitor.getFailedUnlockAttempts() + 1; // +1 for this time
+
+        if (DEBUG) Log.d(TAG, "reportFailedPatternAttempt: #" + failedAttempts);
+
+        SecurityMode mode = mSecurityModel.getSecurityMode();
+        final boolean usingPattern = mode == KeyguardSecurityModel.SecurityMode.Pattern;
+
+        final int failedAttemptsBeforeWipe = mLockPatternUtils.getDevicePolicyManager()
+                .getMaximumFailedPasswordsForWipe(null, mLockPatternUtils.getCurrentUser());
+
+        final int failedAttemptWarning = LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET
+                - LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT;
+
+        final int remainingBeforeWipe = failedAttemptsBeforeWipe > 0 ?
+                (failedAttemptsBeforeWipe - failedAttempts)
+                : Integer.MAX_VALUE; // because DPM returns 0 if no restriction
+
+        boolean showTimeout = false;
+        if (remainingBeforeWipe < LockPatternUtils.FAILED_ATTEMPTS_BEFORE_WIPE_GRACE) {
+            // If we reach this code, it means the user has installed a DevicePolicyManager
+            // that requests device wipe after N attempts.  Once we get below the grace
+            // period, we'll post this dialog every time as a clear warning until the
+            // bombshell hits and the device is wiped.
+            if (remainingBeforeWipe > 0) {
+                showAlmostAtWipeDialog(failedAttempts, remainingBeforeWipe);
+            } else {
+                // Too many attempts. The device will be wiped shortly.
+                Slog.i(TAG, "Too many unlock attempts; device will be wiped!");
+                showWipeDialog(failedAttempts);
+            }
+        } else {
+            showTimeout =
+                (failedAttempts % LockPatternUtils.FAILED_ATTEMPTS_BEFORE_TIMEOUT) == 0;
+            if (usingPattern && mEnableFallback) {
+                if (failedAttempts == failedAttemptWarning) {
+                    showAlmostAtAccountLoginDialog();
+                    showTimeout = false; // don't show both dialogs
+                } else if (failedAttempts >= LockPatternUtils.FAILED_ATTEMPTS_BEFORE_RESET) {
+                    mLockPatternUtils.setPermanentlyLocked(true);
+                    showSecurityScreen(SecurityMode.Account);
+                    // don't show timeout dialog because we show account unlock screen next
+                    showTimeout = false;
+                }
+            }
+        }
+        monitor.reportFailedUnlockAttempt();
+        mLockPatternUtils.reportFailedPasswordAttempt();
+        if (showTimeout) {
+            showTimeoutDialog();
+        }
+    }
+
+    /**
+     * Shows the primary security screen for the user. This will be either the multi-selector
+     * or the user's security method.
+     * @param turningOff true if the device is being turned off
+     */
+    void showPrimarySecurityScreen(boolean turningOff) {
+        SecurityMode securityMode = mSecurityModel.getSecurityMode();
+        if (DEBUG) Log.v(TAG, "showPrimarySecurityScreen(turningOff=" + turningOff + ")");
+        if (!turningOff &&
+                KeyguardUpdateMonitor.getInstance(mContext).isAlternateUnlockEnabled()) {
+            // If we're not turning off, then allow biometric alternate.
+            // We'll reload it when the device comes back on.
+            securityMode = mSecurityModel.getAlternateFor(securityMode);
+        }
+        showSecurityScreen(securityMode);
+    }
+
+    /**
+     * Shows the backup security screen for the current security mode.  This could be used for
+     * password recovery screens but is currently only used for pattern unlock to show the
+     * account unlock screen and biometric unlock to show the user's normal unlock.
+     */
+    private void showBackupSecurityScreen() {
+        if (DEBUG) Log.d(TAG, "showBackupSecurity()");
+        SecurityMode backup = mSecurityModel.getBackupSecurityMode(mCurrentSecuritySelection);
+        showSecurityScreen(backup);
+    }
+
+    /**
+     * Shows the next security screen if there is one.
+     * @param authenticated true if the user entered the correct authentication
+     * @param authenticated
+     * @return true if keyguard is done
+     */
+    boolean showNextSecurityScreenOrFinish(boolean authenticated) {
+        if (DEBUG) Log.d(TAG, "showNextSecurityScreenOrFinish(" + authenticated + ")");
+        boolean finish = false;
+        if (SecurityMode.None == mCurrentSecuritySelection) {
+            SecurityMode securityMode = mSecurityModel.getSecurityMode();
+            // Allow an alternate, such as biometric unlock
+            securityMode = mSecurityModel.getAlternateFor(securityMode);
+            if (SecurityMode.None == securityMode) {
+                finish = true; // no security required
+            } else {
+                showSecurityScreen(securityMode); // switch to the alternate security view
+            }
+        } else if (authenticated) {
+            switch (mCurrentSecuritySelection) {
+                case Pattern:
+                case Password:
+                case PIN:
+                case Account:
+                case Biometric:
+                    finish = true;
+                    break;
+
+                case SimPin:
+                case SimPuk:
+                    // Shortcut for SIM PIN/PUK to go to directly to user's security screen or home
+                    SecurityMode securityMode = mSecurityModel.getSecurityMode();
+                    if (securityMode != SecurityMode.None) {
+                        showSecurityScreen(securityMode);
+                    } else {
+                        finish = true;
+                    }
+                    break;
+
+                default:
+                    Log.v(TAG, "Bad security screen " + mCurrentSecuritySelection + ", fail safe");
+                    showPrimarySecurityScreen(false);
+                    break;
+            }
+        } else {
+            showPrimarySecurityScreen(false);
+        }
+        if (finish) {
+            mSecurityCallback.finish();
+        }
+        return finish;
+    }
+
+    /**
+     * Switches to the given security view unless it's already being shown, in which case
+     * this is a no-op.
+     *
+     * @param securityMode
+     */
+    private void showSecurityScreen(SecurityMode securityMode) {
+        if (DEBUG) Log.d(TAG, "showSecurityScreen(" + securityMode + ")");
+
+        if (securityMode == mCurrentSecuritySelection) return;
+
+        KeyguardSecurityView oldView = getSecurityView(mCurrentSecuritySelection);
+        KeyguardSecurityView newView = getSecurityView(securityMode);
+
+        // Emulate Activity life cycle
+        if (oldView != null) {
+            oldView.onPause();
+            oldView.setKeyguardCallback(mNullCallback); // ignore requests from old view
+        }
+        newView.onResume(KeyguardSecurityView.VIEW_REVEALED);
+        newView.setKeyguardCallback(mCallback);
+
+        // Find and show this child.
+        final int childCount = mSecurityViewFlipper.getChildCount();
+
+        final int securityViewIdForMode = getSecurityViewIdForMode(securityMode);
+        for (int i = 0; i < childCount; i++) {
+            if (mSecurityViewFlipper.getChildAt(i).getId() == securityViewIdForMode) {
+                mSecurityViewFlipper.setDisplayedChild(i);
+                break;
+            }
+        }
+
+        mCurrentSecuritySelection = securityMode;
+        mSecurityCallback.onSecurityModeChanged(securityMode, newView.needsInput());
+    }
+
+    private KeyguardSecurityViewFlipper getFlipper() {
         for (int i = 0; i < getChildCount(); i++) {
             View child = getChildAt(i);
             if (child instanceof KeyguardSecurityViewFlipper) {
@@ -41,5 +407,129 @@
             flipper.hideBouncer(duration);
         }
     }
+
+    private KeyguardSecurityCallback mCallback = new KeyguardSecurityCallback() {
+
+        public void userActivity(long timeout) {
+            if (mSecurityCallback != null) {
+                mSecurityCallback.userActivity(timeout);
+            }
+        }
+
+        public void dismiss(boolean authenticated) {
+            mSecurityCallback.dismiss(authenticated);
+        }
+
+        public boolean isVerifyUnlockOnly() {
+            return mIsVerifyUnlockOnly;
+        }
+
+        public void reportUnlockAttempt(boolean success) {
+            KeyguardUpdateMonitor monitor = KeyguardUpdateMonitor.getInstance(mContext);
+            if (success) {
+                monitor.clearFailedUnlockAttempts();
+                mLockPatternUtils.reportSuccessfulPasswordAttempt();
+            } else {
+                if (mCurrentSecuritySelection == SecurityMode.Biometric) {
+                    monitor.reportFailedBiometricUnlockAttempt();
+                } else {
+                    KeyguardSecurityContainer.this.reportFailedUnlockAttempt();
+                }
+            }
+        }
+
+        @Override
+        public void showBackupSecurity() {
+            KeyguardSecurityContainer.this.showBackupSecurityScreen();
+        }
+
+    };
+
+    // The following is used to ignore callbacks from SecurityViews that are no longer current
+    // (e.g. face unlock). This avoids unwanted asynchronous events from messing with the
+    // state for the current security method.
+    private KeyguardSecurityCallback mNullCallback = new KeyguardSecurityCallback() {
+        @Override
+        public void userActivity(long timeout) { }
+        @Override
+        public void showBackupSecurity() { }
+        @Override
+        public void reportUnlockAttempt(boolean success) { }
+        @Override
+        public boolean isVerifyUnlockOnly() { return false; }
+        @Override
+        public void dismiss(boolean securityVerified) { }
+    };
+
+    private int getSecurityViewIdForMode(SecurityMode securityMode) {
+        switch (securityMode) {
+            case None: return R.id.keyguard_selector_view;
+            case Pattern: return R.id.keyguard_pattern_view;
+            case PIN: return R.id.keyguard_pin_view;
+            case Password: return R.id.keyguard_password_view;
+            case Biometric: return R.id.keyguard_face_unlock_view;
+            case Account: return R.id.keyguard_account_view;
+            case SimPin: return R.id.keyguard_sim_pin_view;
+            case SimPuk: return R.id.keyguard_sim_puk_view;
+        }
+        return 0;
+    }
+
+    private int getLayoutIdFor(SecurityMode securityMode) {
+        switch (securityMode) {
+            case None: return R.layout.keyguard_selector_view;
+            case Pattern: return R.layout.keyguard_pattern_view;
+            case PIN: return R.layout.keyguard_pin_view;
+            case Password: return R.layout.keyguard_password_view;
+            case Biometric: return R.layout.keyguard_face_unlock_view;
+            case Account: return R.layout.keyguard_account_view;
+            case SimPin: return R.layout.keyguard_sim_pin_view;
+            case SimPuk: return R.layout.keyguard_sim_puk_view;
+            default:
+                return 0;
+        }
+    }
+
+    public SecurityMode getSecurityMode() {
+        return mSecurityModel.getSecurityMode();
+    }
+
+    public void verifyUnlock() {
+        mIsVerifyUnlockOnly = true;
+        showSecurityScreen(getSecurityMode());
+    }
+
+    public SecurityMode getCurrentSecuritySelection() {
+        return mCurrentSecuritySelection;
+    }
+
+    public void dismiss(boolean authenticated) {
+        mCallback.dismiss(authenticated);
+    }
+
+    public boolean needsInput() {
+        return mSecurityViewFlipper.needsInput();
+    }
+
+    @Override
+    public void setKeyguardCallback(KeyguardSecurityCallback callback) {
+        mSecurityViewFlipper.setKeyguardCallback(callback);
+    }
+
+    @Override
+    public void reset() {
+        mSecurityViewFlipper.reset();
+    }
+
+    @Override
+    public KeyguardSecurityCallback getCallback() {
+        return mSecurityViewFlipper.getCallback();
+    }
+
+    @Override
+    public void showUsabilityHint() {
+        mSecurityViewFlipper.showUsabilityHint();
+    }
+
 }
 
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityModel.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityModel.java
index 4129e33..2d492db 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityModel.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityModel.java
@@ -23,11 +23,12 @@
 import com.android.internal.widget.LockPatternUtils;
 
 public class KeyguardSecurityModel {
+
     /**
      * The different types of security available for {@link Mode#UnlockScreen}.
      * @see com.android.internal.policy.impl.LockPatternKeyguardView#getUnlockMode()
      */
-    enum SecurityMode {
+    public enum SecurityMode {
         Invalid, // NULL state
         None, // No security enabled
         Pattern, // Unlock by drawing a pattern.
@@ -82,6 +83,8 @@
         } else if (simState == IccCardConstants.State.PUK_REQUIRED
                 && mLockPatternUtils.isPukUnlockScreenEnable()) {
             mode = SecurityMode.SimPuk;
+        } else if (updateMonitor.getUserHasTrust(mLockPatternUtils.getCurrentUser())) {
+            mode = SecurityMode.None;
         } else {
             final int security = mLockPatternUtils.getKeyguardStoredPasswordQuality();
             switch (security) {
@@ -105,7 +108,7 @@
                     break;
 
                 default:
-                    throw new IllegalStateException("Unknown unlock mode:" + mode);
+                    throw new IllegalStateException("Unknown security quality:" + security);
             }
         }
         return mode;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java
index 70a0e44..07239d1 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSecurityViewFlipper.java
@@ -38,7 +38,7 @@
  */
 public class KeyguardSecurityViewFlipper extends ViewFlipper implements KeyguardSecurityView {
     private static final String TAG = "KeyguardSecurityViewFlipper";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
 
     private Rect mTempRect = new Rect();
 
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java
index 63be102..03e7b07 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSelectorView.java
@@ -16,19 +16,14 @@
 package com.android.keyguard;
 
 import android.animation.ObjectAnimator;
-import android.app.ActivityManager;
-import android.app.PendingIntent;
 import android.app.SearchManager;
 import android.app.admin.DevicePolicyManager;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.PowerManager;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.telephony.TelephonyManager;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Slog;
@@ -41,7 +36,6 @@
 import com.android.internal.widget.multiwaveview.GlowPadView.OnTriggerListener;
 
 public class KeyguardSelectorView extends LinearLayout implements KeyguardSecurityView {
-    private static final boolean DEBUG = KeyguardHostView.DEBUG;
     private static final String TAG = "SecuritySelectorView";
     private static final String ASSIST_ICON_METADATA_NAME =
         "com.android.systemui.action_assist_icon";
@@ -62,29 +56,10 @@
         public void onTrigger(View v, int target) {
             final int resId = mGlowPadView.getResourceIdForTarget(target);
 
-            switch (resId) {
-                case R.drawable.ic_action_assist_generic:
-                    Intent assistIntent =
-                            ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
-                            .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
-                    if (assistIntent != null) {
-                        mActivityLauncher.launchActivity(assistIntent, false, true, null, null);
-                    } else {
-                        Log.w(TAG, "Failed to get intent for assist activity");
-                    }
-                    mCallback.userActivity(0);
-                    break;
-
-                case R.drawable.ic_lockscreen_camera:
-                    mActivityLauncher.launchCamera(null, null);
-                    mCallback.userActivity(0);
-                    break;
-
-                case R.drawable.ic_lockscreen_unlock_phantom:
-                case R.drawable.ic_lockscreen_unlock:
-                    mCallback.userActivity(0);
-                    mCallback.dismiss(false);
-                break;
+            if (resId == R.drawable.ic_lockscreen_unlock_phantom
+                    || resId == R.drawable.ic_lockscreen_unlock) {
+                mCallback.userActivity(0);
+                mCallback.dismiss(false);
             }
         }
 
@@ -122,23 +97,6 @@
         }
     };
 
-    private final KeyguardActivityLauncher mActivityLauncher = new KeyguardActivityLauncher() {
-
-        @Override
-        KeyguardSecurityCallback getCallback() {
-            return mCallback;
-        }
-
-        @Override
-        LockPatternUtils getLockPatternUtils() {
-            return mLockPatternUtils;
-        }
-
-        @Override
-        Context getContext() {
-            return mContext;
-        }};
-
     public KeyguardSelectorView(Context context) {
         this(context, null);
     }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java b/packages/Keyguard/src/com/android/keyguard/KeyguardService.java
deleted file mode 100644
index 36b2446..0000000
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardService.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
- * Copyright (C) 2013 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.android.keyguard;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-import android.app.Service;
-import android.content.Intent;
-import static android.content.pm.PackageManager.PERMISSION_GRANTED;
-
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.Debug;
-import android.os.IBinder;
-import android.util.Log;
-import android.view.MotionEvent;
-
-import com.android.internal.policy.IKeyguardService;
-import com.android.internal.policy.IKeyguardExitCallback;
-import com.android.internal.policy.IKeyguardShowCallback;
-import com.android.internal.widget.LockPatternUtils;
-
-public class KeyguardService extends Service {
-    static final String TAG = "KeyguardService";
-    static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD;
-    private KeyguardViewMediator mKeyguardViewMediator;
-
-    @Override
-    public void onCreate() {
-        if (mKeyguardViewMediator == null) {
-            mKeyguardViewMediator = new KeyguardViewMediator(
-                    KeyguardService.this, new LockPatternUtils(KeyguardService.this));
-        }
-        Log.v(TAG, "onCreate()");
-    }
-
-    @Override
-    public IBinder onBind(Intent intent) {
-        return mBinder;
-    }
-
-    @Override
-    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        // TODO
-    }
-
-    void checkPermission() {
-        if (getBaseContext().checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
-            Log.w(TAG, "Caller needs permission '" + PERMISSION + "' to call " + Debug.getCaller());
-            throw new SecurityException("Access denied to process: " + Binder.getCallingPid()
-                    + ", must have permission " + PERMISSION);
-        }
-    }
-
-    private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
-        public boolean isShowing() {
-            return mKeyguardViewMediator.isShowing();
-        }
-        public boolean isSecure() {
-            return mKeyguardViewMediator.isSecure();
-        }
-        public boolean isShowingAndNotHidden() {
-            return mKeyguardViewMediator.isShowingAndNotHidden();
-        }
-        public boolean isInputRestricted() {
-            return mKeyguardViewMediator.isInputRestricted();
-        }
-        public void verifyUnlock(IKeyguardExitCallback callback) {
-            mKeyguardViewMediator.verifyUnlock(callback);
-        }
-        public void keyguardDone(boolean authenticated, boolean wakeup) {
-            checkPermission();
-            mKeyguardViewMediator.keyguardDone(authenticated, wakeup);
-        }
-        public void setHidden(boolean isHidden) {
-            checkPermission();
-            mKeyguardViewMediator.setHidden(isHidden);
-        }
-        public void dismiss() {
-            mKeyguardViewMediator.dismiss();
-        }
-        public void onDreamingStarted() {
-            checkPermission();
-            mKeyguardViewMediator.onDreamingStarted();
-        }
-        public void onDreamingStopped() {
-            checkPermission();
-            mKeyguardViewMediator.onDreamingStopped();
-        }
-        public void onScreenTurnedOff(int reason) {
-            checkPermission();
-            mKeyguardViewMediator.onScreenTurnedOff(reason);
-        }
-        public void onScreenTurnedOn(IKeyguardShowCallback callback) {
-            checkPermission();
-            mKeyguardViewMediator.onScreenTurnedOn(callback);
-        }
-        public void setKeyguardEnabled(boolean enabled) {
-            checkPermission();
-            mKeyguardViewMediator.setKeyguardEnabled(enabled);
-        }
-        public boolean isDismissable() {
-            return mKeyguardViewMediator.isDismissable();
-        }
-        public void onSystemReady() {
-            checkPermission();
-            mKeyguardViewMediator.onSystemReady();
-        }
-        public void doKeyguardTimeout(Bundle options) {
-            checkPermission();
-            mKeyguardViewMediator.doKeyguardTimeout(options);
-        }
-        public void setCurrentUser(int userId) {
-            checkPermission();
-            mKeyguardViewMediator.setCurrentUser(userId);
-        }
-        public void showAssistant() {
-            checkPermission();
-            mKeyguardViewMediator.showAssistant();
-        }
-        public void dispatch(MotionEvent event) {
-            checkPermission();
-            mKeyguardViewMediator.dispatch(event);
-        }
-        public void launchCamera() {
-            checkPermission();
-            mKeyguardViewMediator.launchCamera();
-        }
-        public void onBootCompleted() {
-            checkPermission();
-            mKeyguardViewMediator.onBootCompleted();
-        }
-    };
-
-}
-
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
index 9accbb4..4791956 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
@@ -20,16 +20,12 @@
 import com.android.internal.telephony.PhoneConstants;
 
 import android.content.Context;
-import android.content.DialogInterface;
-import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.AlertDialog.Builder;
 import android.app.Dialog;
 import android.app.ProgressDialog;
-import android.os.Message;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.text.Editable;
 import android.text.InputType;
 import android.text.TextWatcher;
 import android.text.method.DigitsKeyListener;
@@ -45,7 +41,7 @@
 public class KeyguardSimPinView extends KeyguardAbsKeyInputView
         implements KeyguardSecurityView, OnEditorActionListener, TextWatcher {
     private static final String LOG_TAG = "KeyguardSimPinView";
-    private static final boolean DEBUG = KeyguardViewMediator.DEBUG;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     public static final String TAG = "KeyguardSimPinView";
 
     private ProgressDialog mSimUnlockProgressDialog = null;
@@ -91,7 +87,7 @@
 
     @Override
     protected int getPasswordTextViewId() {
-        return R.id.pinEntry;
+        return R.id.simPinEntry;
     }
 
     @Override
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
index d882eca..b9c7f51 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
@@ -17,14 +17,12 @@
 package com.android.keyguard;
 
 import android.content.Context;
-import android.animation.AnimatorSet.Builder;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.app.ProgressDialog;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.text.Editable;
 import android.text.InputType;
 import android.text.TextWatcher;
 import android.text.method.DigitsKeyListener;
@@ -44,7 +42,7 @@
 public class KeyguardSimPukView extends KeyguardAbsKeyInputView
         implements KeyguardSecurityView, OnEditorActionListener, TextWatcher {
     private static final String LOG_TAG = "KeyguardSimPukView";
-    private static final boolean DEBUG = KeyguardViewMediator.DEBUG;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     public static final String TAG = "KeyguardSimPukView";
 
     private ProgressDialog mSimUnlockProgressDialog = null;
@@ -140,7 +138,7 @@
 
     @Override
     protected int getPasswordTextViewId() {
-        return R.id.pinEntry;
+        return R.id.pukEntry;
     }
 
     @Override
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimpleHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimpleHostView.java
new file mode 100644
index 0000000..5d5168c
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimpleHostView.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2014 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.android.keyguard;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+
+public class KeyguardSimpleHostView extends KeyguardViewBase {
+
+    public KeyguardSimpleHostView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void showBouncer(boolean show) {
+        super.showBouncer(show);
+        if (show) {
+            getSecurityContainer().showBouncer(250);
+        } else {
+            getSecurityContainer().hideBouncer(250);
+        }
+    }
+
+    @Override
+    public void cleanUp() {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public long getUserActivityTimeout() {
+        return -1; // not used
+    }
+
+    @Override
+    protected void onUserSwitching(boolean switching) {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    protected void onCreateOptions(Bundle options) {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    protected void onExternalMotionEvent(MotionEvent event) {
+        // TODO Auto-generated method stub
+    }
+
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
index 0bfee38..ae55c4a 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
@@ -33,7 +33,7 @@
 import java.util.Locale;
 
 public class KeyguardStatusView extends GridLayout {
-    private static final boolean DEBUG = KeyguardViewMediator.DEBUG;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     private static final String TAG = "KeyguardStatusView";
 
     private LockPatternUtils mLockPatternUtils;
@@ -50,22 +50,22 @@
         }
 
         @Override
-        void onKeyguardVisibilityChanged(boolean showing) {
+        public void onKeyguardVisibilityChanged(boolean showing) {
             if (showing) {
                 if (DEBUG) Slog.v(TAG, "refresh statusview showing:" + showing);
                 refresh();
             }
-        };
+        }
 
         @Override
         public void onScreenTurnedOn() {
             setEnableMarquee(true);
-        };
+        }
 
         @Override
         public void onScreenTurnedOff(int why) {
             setEnableMarquee(false);
-        };
+        }
     };
 
     public KeyguardStatusView(Context context) {
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
index 349078f..0d472ae 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardTransportControlView.java
@@ -32,7 +32,6 @@
 import android.media.RemoteController;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.SystemClock;
 import android.text.TextUtils;
 import android.text.format.DateFormat;
 import android.transition.ChangeBounds;
@@ -61,7 +60,7 @@
 public class KeyguardTransportControlView extends FrameLayout {
 
     private static final int RESET_TO_METADATA_DELAY = 5000;
-    protected static final boolean DEBUG = false;
+    protected static final boolean DEBUG = KeyguardConstants.DEBUG;
     protected static final String TAG = "TransportControlView";
 
     private static final boolean ANIMATE_TRANSITIONS = true;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index a849316..ba67a82 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -20,6 +20,7 @@
 import android.app.IUserSwitchObserver;
 import android.app.PendingIntent;
 import android.app.admin.DevicePolicyManager;
+import android.app.trust.TrustManager;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -36,6 +37,7 @@
 import static android.os.BatteryManager.EXTRA_HEALTH;
 import android.media.AudioManager;
 import android.media.IRemoteControlDisplay;
+import android.nfc.NfcUnlock;
 import android.os.BatteryManager;
 import android.os.Bundle;
 import android.os.Handler;
@@ -50,6 +52,8 @@
 
 import android.telephony.TelephonyManager;
 import android.util.Log;
+import android.util.SparseBooleanArray;
+
 import com.google.android.collect.Lists;
 
 import java.lang.ref.WeakReference;
@@ -65,10 +69,10 @@
  * the device, and {@link #getFailedUnlockAttempts()}, {@link #reportFailedAttempt()}
  * and {@link #clearFailedUnlockAttempts()}.  Maybe we should rename this 'KeyguardContext'...
  */
-public class KeyguardUpdateMonitor {
+public class KeyguardUpdateMonitor implements TrustManager.TrustListener {
 
     private static final String TAG = "KeyguardUpdateMonitor";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     private static final boolean DEBUG_SIM_STATES = DEBUG || false;
     private static final int FAILED_BIOMETRIC_UNLOCK_ATTEMPTS_BEFORE_BACKUP = 3;
     private static final int LOW_BATTERY_THRESHOLD = 20;
@@ -94,6 +98,7 @@
     protected static final int MSG_REPORT_EMERGENCY_CALL_ACTION = 318;
     private static final int MSG_SCREEN_TURNED_ON = 319;
     private static final int MSG_SCREEN_TURNED_OFF = 320;
+    private static final int MSG_NFC_UNLOCK = 321;
 
     private static KeyguardUpdateMonitor sInstance;
 
@@ -194,12 +199,47 @@
                 case MSG_SCREEN_TURNED_ON:
                     handleScreenTurnedOn();
                     break;
+                case MSG_NFC_UNLOCK:
+                    handleNfcUnlock();
+                    break;
             }
         }
     };
 
     private AudioManager mAudioManager;
 
+    private SparseBooleanArray mUserHasTrust = new SparseBooleanArray();
+
+    @Override
+    public void onTrustChanged(boolean enabled, int userId) {
+        mUserHasTrust.put(userId, enabled);
+    }
+
+    private boolean isTrustDisabled(int userId) {
+        final DevicePolicyManager dpm =
+                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
+        if (dpm != null) {
+                // TODO once UI is finalized
+                final boolean disabledByGlobalActions = false;
+                final boolean disabledBySettings = false;
+
+                // Don't allow trust agent if device is secured with a SIM PIN. This is here
+                // mainly because there's no other way to prompt the user to enter their SIM PIN
+                // once they get past the keyguard screen.
+                final boolean disabledBySimPin = isSimPinSecure();
+
+                final boolean disabledByDpm = (dpm.getKeyguardDisabledFeatures(null, userId)
+                        & DevicePolicyManager.KEYGUARD_DISABLE_TRUST_AGENTS) != 0;
+                return disabledByDpm || disabledByGlobalActions || disabledBySettings
+                        || disabledBySimPin;
+        }
+        return false;
+    }
+
+    public boolean getUserHasTrust(int userId) {
+        return !isTrustDisabled(userId) && mUserHasTrust.get(userId);
+    }
+
     static class DisplayClientState {
         public int clientGeneration;
         public boolean clearing;
@@ -311,6 +351,15 @@
         }
     };
 
+    private final BroadcastReceiver mNfcUnlockReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (NfcUnlock.ACTION_NFC_UNLOCK.equals(intent.getAction())) {
+                mHandler.sendEmptyMessage(MSG_NFC_UNLOCK);
+            }
+        }
+    }
+    ;
     /**
      * When we receive a
      * {@link com.android.internal.telephony.TelephonyIntents#ACTION_SIM_STATE_CHANGED} broadcast,
@@ -495,6 +544,15 @@
         }
     }
 
+    private void handleNfcUnlock() {
+        for (int i = 0; i < mCallbacks.size(); i++) {
+            KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
+            if (cb != null) {
+                cb.onNfcUnlock();
+            }
+        }
+    }
+
     private KeyguardUpdateMonitor(Context context) {
         mContext = context;
 
@@ -524,6 +582,11 @@
         filter.addAction(Intent.ACTION_USER_REMOVED);
         context.registerReceiver(mBroadcastReceiver, filter);
 
+        final IntentFilter nfcUnlockIntentFilter = new IntentFilter();
+        nfcUnlockIntentFilter.addAction(NfcUnlock.ACTION_NFC_UNLOCK);
+        context.registerReceiver(mNfcUnlockReceiver, nfcUnlockIntentFilter,
+                NfcUnlock.NFC_UNLOCK_PERMISSION, null /* run on default scheduler */);
+
         final IntentFilter bootCompleteFilter = new IntentFilter();
         bootCompleteFilter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);
         bootCompleteFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
@@ -553,6 +616,9 @@
             // TODO Auto-generated catch block
             e.printStackTrace();
         }
+
+        TrustManager trustManager = (TrustManager) context.getSystemService(Context.TRUST_SERVICE);
+        trustManager.registerTrustListener(this);
     }
 
     private boolean isDeviceProvisionedInSettingsDb() {
@@ -634,7 +700,7 @@
      * broadcast and hence not handle the event. This method is ultimately called by
      * PhoneWindowManager in this case.
      */
-    protected void dispatchBootCompleted() {
+    public void dispatchBootCompleted() {
         mHandler.sendEmptyMessage(MSG_BOOT_COMPLETED);
     }
 
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
index 1e4ec42..7be4cec 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
@@ -20,6 +20,7 @@
 import android.graphics.Bitmap;
 import android.media.AudioManager;
 import android.os.SystemClock;
+import android.telephony.TelephonyManager;
 import android.view.WindowManagerPolicy;
 
 import com.android.internal.telephony.IccCardConstants;
@@ -27,7 +28,7 @@
 /**
  * Callback for general information relevant to lock screen.
  */
-class KeyguardUpdateMonitorCallback {
+public class KeyguardUpdateMonitorCallback {
 
     private static final long VISIBILITY_CHANGED_COLLAPSE_MS = 1000;
     private long mVisibilityChangedCalled;
@@ -39,12 +40,12 @@
      *
      * @param status current battery status
      */
-    void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) { }
+    public void onRefreshBatteryInfo(KeyguardUpdateMonitor.BatteryStatus status) { }
 
     /**
      * Called once per minute or when the time changes.
      */
-    void onTimeChanged() { }
+    public void onTimeChanged() { }
 
     /**
      * Called when the carrier PLMN or SPN changes.
@@ -53,14 +54,14 @@
      *   be displayed.
      * @param spn The service provider name.  May be null if it shouldn't be displayed.
      */
-    void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { }
+    public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { }
 
     /**
      * Called when the ringer mode changes.
      * @param state the current ringer state, as defined in
      * {@link AudioManager#RINGER_MODE_CHANGED_ACTION}
      */
-    void onRingerModeChanged(int state) { }
+    public void onRingerModeChanged(int state) { }
 
     /**
      * Called when the phone state changes. String will be one of:
@@ -68,15 +69,15 @@
      * {@link TelephonyManager@EXTRA_STATE_RINGING}
      * {@link TelephonyManager#EXTRA_STATE_OFFHOOK
      */
-    void onPhoneStateChanged(int phoneState) { }
+    public void onPhoneStateChanged(int phoneState) { }
 
     /**
      * Called when the visibility of the keyguard changes.
      * @param showing Indicates if the keyguard is now visible.
      */
-    void onKeyguardVisibilityChanged(boolean showing) { }
+    public void onKeyguardVisibilityChanged(boolean showing) { }
 
-    void onKeyguardVisibilityChangedRaw(boolean showing) {
+    public void onKeyguardVisibilityChangedRaw(boolean showing) {
         final long now = SystemClock.elapsedRealtime();
         if (showing == mShowing
                 && (now - mVisibilityChangedCalled) < VISIBILITY_CHANGED_COLLAPSE_MS) return;
@@ -89,44 +90,44 @@
      * Called when visibility of lockscreen clock changes, such as when
      * obscured by a widget.
      */
-    void onClockVisibilityChanged() { }
+    public void onClockVisibilityChanged() { }
 
     /**
      * Called when the device becomes provisioned
      */
-    void onDeviceProvisioned() { }
+    public void onDeviceProvisioned() { }
 
     /**
      * Called when the device policy changes.
      * See {@link DevicePolicyManager#ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED}
      */
-    void onDevicePolicyManagerStateChanged() { }
+    public void onDevicePolicyManagerStateChanged() { }
 
     /**
      * Called when the user change begins.
      */
-    void onUserSwitching(int userId) { }
+    public void onUserSwitching(int userId) { }
 
     /**
      * Called when the user change is complete.
      */
-    void onUserSwitchComplete(int userId) { }
+    public void onUserSwitchComplete(int userId) { }
 
     /**
      * Called when the SIM state changes.
      * @param simState
      */
-    void onSimStateChanged(IccCardConstants.State simState) { }
+    public void onSimStateChanged(IccCardConstants.State simState) { }
 
     /**
      * Called when a user is removed.
      */
-    void onUserRemoved(int userId) { }
+    public void onUserRemoved(int userId) { }
 
     /**
      * Called when the user's info changed.
      */
-    void onUserInfoChanged(int userId) { }
+    public void onUserInfoChanged(int userId) { }
 
     /**
      * Called when boot completed.
@@ -134,12 +135,12 @@
      * Note, this callback will only be received if boot complete occurs after registering with
      * KeyguardUpdateMonitor.
      */
-    void onBootCompleted() { }
+    public void onBootCompleted() { }
 
     /**
      * Called when audio client attaches or detaches from AudioManager.
      */
-    void onMusicClientIdChanged(int clientGeneration, boolean clearing, PendingIntent intent) { }
+    public void onMusicClientIdChanged(int clientGeneration, boolean clearing, PendingIntent intent) { }
 
     /**
      * Called when the audio playback state changes.
@@ -172,4 +173,10 @@
      * {@link WindowManagerPolicy#OFF_BECAUSE_OF_TIMEOUT}.
      */
     public void onScreenTurnedOff(int why) { }
+
+    /**
+     * Called when the NFC Service has found a tag that is registered for NFC unlock.
+     */
+    public void onNfcUnlock() { }
+
 }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java
index bff1f93..d8e5b8a 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewBase.java
@@ -17,18 +17,36 @@
 package com.android.keyguard;
 
 import android.app.Activity;
+import android.app.ActivityManager;
+import android.app.ActivityOptions;
+import android.app.SearchManager;
 import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.graphics.Canvas;
 import android.media.AudioManager;
 import android.media.IAudioService;
+import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.os.SystemClock;
+import android.os.UserHandle;
 import android.telephony.TelephonyManager;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.Slog;
 import android.view.KeyEvent;
+import android.view.MotionEvent;
+import android.view.View;
 import android.widget.FrameLayout;
 
+import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.KeyguardHostView.OnDismissAction;
+import com.android.keyguard.KeyguardSecurityContainer.SecurityCallback;
+import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
+
+import java.io.File;
+
 /**
  * Base class for keyguard view.  {@link #reset} is where you should
  * reset the state of your view.  Use the {@link KeyguardViewCallback} via
@@ -38,16 +56,22 @@
  * Handles intercepting of media keys that still work when the keyguard is
  * showing.
  */
-public abstract class KeyguardViewBase extends FrameLayout {
+public abstract class KeyguardViewBase extends FrameLayout implements SecurityCallback {
 
     private AudioManager mAudioManager;
     private TelephonyManager mTelephonyManager = null;
-    protected KeyguardViewMediator.ViewMediatorCallback mViewMediatorCallback;
+    protected ViewMediatorCallback mViewMediatorCallback;
+    protected LockPatternUtils mLockPatternUtils;
+    private OnDismissAction mDismissAction;
 
     // Whether the volume keys should be handled by keyguard. If true, then
     // they will be handled here for specific media types such as music, otherwise
     // the audio service will bring up the volume dialog.
     private static final boolean KEYGUARD_MANAGES_VOLUME = true;
+    public static final boolean DEBUG = KeyguardConstants.DEBUG;
+    private static final String TAG = "KeyguardViewBase";
+
+    private KeyguardSecurityContainer mSecurityContainer;
 
     public KeyguardViewBase(Context context) {
         this(context, null);
@@ -57,20 +81,169 @@
         super(context, attrs);
     }
 
-    /**
-     * Called when the screen turned off.
-     */
-    abstract public void onScreenTurnedOff();
+    @Override
+    protected void dispatchDraw(Canvas canvas) {
+        super.dispatchDraw(canvas);
+        if (mViewMediatorCallback != null) {
+            mViewMediatorCallback.keyguardDoneDrawing();
+        }
+    }
 
     /**
-     * Called when the screen turned on.
+     * Sets an action to run when keyguard finishes.
+     *
+     * @param action
      */
-    abstract public void onScreenTurnedOn();
+    public void setOnDismissAction(OnDismissAction action) {
+        mDismissAction = action;
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        mSecurityContainer =
+                (KeyguardSecurityContainer) findViewById(R.id.keyguard_security_container);
+        mLockPatternUtils = new LockPatternUtils(mContext);
+        mSecurityContainer.setLockPatternUtils(mLockPatternUtils);
+        mSecurityContainer.setSecurityCallback(this);
+        mSecurityContainer.showPrimarySecurityScreen(false);
+        // mSecurityContainer.updateSecurityViews(false /* not bouncing */);
+    }
 
     /**
      * Called when the view needs to be shown.
      */
-    abstract public void show();
+    public void show() {
+        if (DEBUG) Log.d(TAG, "show()");
+        mSecurityContainer.showPrimarySecurityScreen(false);
+    }
+
+    /**
+     *  Dismisses the keyguard by going to the next screen or making it gone.
+     *
+     *  @return True if the keyguard is done.
+     */
+    public boolean dismiss() {
+        return dismiss(false);
+    }
+
+    protected void showBouncer(boolean show) {
+        CharSequence what = getContext().getResources().getText(
+                show ? R.string.keyguard_accessibility_show_bouncer
+                        : R.string.keyguard_accessibility_hide_bouncer);
+        announceForAccessibility(what);
+        announceCurrentSecurityMethod();
+    }
+
+    public boolean handleBackKey() {
+        if (mSecurityContainer.getCurrentSecuritySelection() == SecurityMode.Account) {
+            // go back to primary screen
+            mSecurityContainer.showPrimarySecurityScreen(false /*turningOff*/);
+            return true;
+        }
+        if (mSecurityContainer.getCurrentSecuritySelection() != SecurityMode.None) {
+            mSecurityContainer.dismiss(false);
+            return true;
+        }
+        return false;
+    }
+
+    protected void announceCurrentSecurityMethod() {
+        mSecurityContainer.announceCurrentSecurityMethod();
+    }
+
+    protected KeyguardSecurityContainer getSecurityContainer() {
+        return mSecurityContainer;
+    }
+
+    /**
+     * Extend display timeout
+     * @param timeout duration to delay timeout, in ms.
+     */
+    @Override
+    public void userActivity(long timeout) {
+        if (mViewMediatorCallback != null) {
+            mViewMediatorCallback.userActivity(timeout);
+        }
+    }
+
+    @Override
+    public boolean dismiss(boolean authenticated) {
+        return mSecurityContainer.showNextSecurityScreenOrFinish(authenticated);
+    }
+
+    /**
+     * Authentication has happened and it's time to dismiss keyguard. This function
+     * should clean up and inform KeyguardViewMediator.
+     */
+    @Override
+    public void finish() {
+        // If the alternate unlock was suppressed, it can now be safely
+        // enabled because the user has left keyguard.
+        KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
+
+        // If there's a pending runnable because the user interacted with a widget
+        // and we're leaving keyguard, then run it.
+        boolean deferKeyguardDone = false;
+        if (mDismissAction != null) {
+            deferKeyguardDone = mDismissAction.onDismiss();
+            mDismissAction = null;
+        }
+        if (mViewMediatorCallback != null) {
+            if (deferKeyguardDone) {
+                mViewMediatorCallback.keyguardDonePending();
+            } else {
+                mViewMediatorCallback.keyguardDone(true);
+            }
+        }
+    }
+
+    @Override
+    public void onSecurityModeChanged(SecurityMode securityMode, boolean needsInput) {
+        if (mViewMediatorCallback != null) {
+            mViewMediatorCallback.setNeedsInput(needsInput);
+        }
+    }
+
+    public void userActivity() {
+        if (mViewMediatorCallback != null) {
+            mViewMediatorCallback.userActivity();
+        }
+    }
+
+    protected void onUserActivityTimeoutChanged() {
+        if (mViewMediatorCallback != null) {
+            mViewMediatorCallback.onUserActivityTimeoutChanged();
+        }
+    }
+
+    /**
+     * Called when the Keyguard is not actively shown anymore on the screen.
+     */
+    public void onPause() {
+        if (DEBUG) Log.d(TAG, String.format("screen off, instance %s at %s",
+                Integer.toHexString(hashCode()), SystemClock.uptimeMillis()));
+        // Once the screen turns off, we no longer consider this to be first boot and we want the
+        // biometric unlock to start next time keyguard is shown.
+        KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
+        mSecurityContainer.showPrimarySecurityScreen(true);
+        mSecurityContainer.onPause();
+        clearFocus();
+    }
+
+    /**
+     * Called when the Keyguard is actively shown on the screen.
+     */
+    public void onResume() {
+        if (DEBUG) Log.d(TAG, "screen on, instance " + Integer.toHexString(hashCode()));
+        mSecurityContainer.showPrimarySecurityScreen(false);
+        mSecurityContainer.onResume(KeyguardSecurityView.SCREEN_ON);
+
+        // This is a an attempt to fix bug 7137389 where the device comes back on but the entire
+        // layout is blank but forcing a layout causes it to reappear (e.g. with with
+        // hierarchyviewer).
+        requestLayout();
+        requestFocus();
+    }
 
     /**
      * Verify that the user can get past the keyguard securely.  This is called,
@@ -79,7 +252,24 @@
      *
      * The result will be propogated back via {@link KeyguardViewCallback#keyguardDone(boolean)}
      */
-    abstract public void verifyUnlock();
+    public void verifyUnlock() {
+        SecurityMode securityMode = mSecurityContainer.getSecurityMode();
+        if (securityMode == KeyguardSecurityModel.SecurityMode.None) {
+            if (mViewMediatorCallback != null) {
+                mViewMediatorCallback.keyguardDone(true);
+            }
+        } else if (securityMode != KeyguardSecurityModel.SecurityMode.Pattern
+                && securityMode != KeyguardSecurityModel.SecurityMode.PIN
+                && securityMode != KeyguardSecurityModel.SecurityMode.Password) {
+            // can only verify unlock when in pattern/password mode
+            if (mViewMediatorCallback != null) {
+                mViewMediatorCallback.keyguardDone(false);
+            }
+        } else {
+            // otherwise, go to the unlock screen, see if they can verify it
+            mSecurityContainer.verifyUnlock();
+        }
+    }
 
     /**
      * Called before this view is being removed.
@@ -183,7 +373,7 @@
         return false;
     }
 
-    void handleMediaKeyEvent(KeyEvent keyEvent) {
+    private void handleMediaKeyEvent(KeyEvent keyEvent) {
         IAudioService audioService = IAudioService.Stub.asInterface(
                 ServiceManager.checkService(Context.AUDIO_SERVICE));
         if (audioService != null) {
@@ -206,8 +396,94 @@
         }
     }
 
-    public void setViewMediatorCallback(
-            KeyguardViewMediator.ViewMediatorCallback viewMediatorCallback) {
-        mViewMediatorCallback = viewMediatorCallback;
+    /**
+     * In general, we enable unlocking the insecure keyguard with the menu key. However, there are
+     * some cases where we wish to disable it, notably when the menu button placement or technology
+     * is prone to false positives.
+     *
+     * @return true if the menu key should be enabled
+     */
+    private static final String ENABLE_MENU_KEY_FILE = "/data/local/enable_menu_key";
+    private boolean shouldEnableMenuKey() {
+        final Resources res = getResources();
+        final boolean configDisabled = res.getBoolean(R.bool.config_disableMenuKeyInLockScreen);
+        final boolean isTestHarness = ActivityManager.isRunningInTestHarness();
+        final boolean fileOverride = (new File(ENABLE_MENU_KEY_FILE)).exists();
+        return !configDisabled || isTestHarness || fileOverride;
     }
+
+    public boolean handleMenuKey() {
+        // The following enables the MENU key to work for testing automation
+        if (shouldEnableMenuKey()) {
+            dismiss();
+            return true;
+        }
+        return false;
+    }
+
+    public void setViewMediatorCallback(ViewMediatorCallback viewMediatorCallback) {
+        mViewMediatorCallback = viewMediatorCallback;
+        // Update ViewMediator with the current input method requirements
+        mViewMediatorCallback.setNeedsInput(mSecurityContainer.needsInput());
+    }
+
+    protected KeyguardActivityLauncher getActivityLauncher() {
+        return mActivityLauncher;
+    }
+
+    private final KeyguardActivityLauncher mActivityLauncher = new KeyguardActivityLauncher() {
+        @Override
+        Context getContext() {
+            return mContext;
+        }
+
+        @Override
+        void setOnDismissAction(OnDismissAction action) {
+            KeyguardViewBase.this.setOnDismissAction(action);
+        }
+
+        @Override
+        LockPatternUtils getLockPatternUtils() {
+            return mLockPatternUtils;
+        }
+
+        @Override
+        void requestDismissKeyguard() {
+            KeyguardViewBase.this.dismiss(false);
+        }
+    };
+
+    public void showAssistant() {
+        final Intent intent = ((SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE))
+          .getAssistIntent(mContext, true, UserHandle.USER_CURRENT);
+
+        if (intent == null) return;
+
+        final ActivityOptions opts = ActivityOptions.makeCustomAnimation(mContext,
+                R.anim.keyguard_action_assist_enter, R.anim.keyguard_action_assist_exit,
+                getHandler(), null);
+
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        mActivityLauncher.launchActivityWithAnimation(intent, false, opts.toBundle(), null, null);
+    }
+
+    public void launchCamera() {
+        mActivityLauncher.launchCamera(getHandler(), null);
+    }
+
+    public void setLockPatternUtils(LockPatternUtils utils) {
+        mLockPatternUtils = utils;
+        mSecurityContainer.setLockPatternUtils(utils);
+    }
+
+    public SecurityMode getSecurityMode() {
+        return mSecurityContainer.getSecurityMode();
+    }
+
+    protected abstract void onUserSwitching(boolean switching);
+
+    protected abstract void onCreateOptions(Bundle options);
+
+    protected abstract void onExternalMotionEvent(MotionEvent event);
+
 }
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
deleted file mode 100644
index 7d0059f..0000000
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewManager.java
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * Copyright (C) 2007 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.android.keyguard;
-
-import android.app.PendingIntent;
-import android.graphics.Bitmap;
-import android.graphics.drawable.BitmapDrawable;
-import com.android.internal.policy.IKeyguardShowCallback;
-import com.android.internal.widget.LockPatternUtils;
-
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.appwidget.AppWidgetManager;
-import android.content.Context;
-import android.content.pm.ActivityInfo;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.ColorFilter;
-import android.graphics.PixelFormat;
-import android.graphics.PorterDuff;
-import android.graphics.Rect;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.Parcelable;
-import android.os.RemoteException;
-import android.os.SystemProperties;
-import android.util.Log;
-import android.util.Slog;
-import android.util.SparseArray;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewManager;
-import android.view.WindowManager;
-import android.widget.FrameLayout;
-
-/**
- * Manages creating, showing, hiding and resetting the keyguard.  Calls back
- * via {@link KeyguardViewMediator.ViewMediatorCallback} to poke
- * the wake lock and report that the keyguard is done, which is in turn,
- * reported to this class by the current {@link KeyguardViewBase}.
- */
-public class KeyguardViewManager {
-    private final static boolean DEBUG = KeyguardViewMediator.DEBUG;
-    private static String TAG = "KeyguardViewManager";
-    public final static String IS_SWITCHING_USER = "is_switching_user";
-
-    // Delay dismissing keyguard to allow animations to complete.
-    private static final int HIDE_KEYGUARD_DELAY = 500;
-
-    // Timeout used for keypresses
-    static final int DIGIT_PRESS_WAKE_MILLIS = 5000;
-
-    private final Context mContext;
-    private final ViewManager mViewManager;
-    private final KeyguardViewMediator.ViewMediatorCallback mViewMediatorCallback;
-
-    private WindowManager.LayoutParams mWindowLayoutParams;
-    private boolean mNeedsInput = false;
-
-    private ViewManagerHost mKeyguardHost;
-    private KeyguardHostView mKeyguardView;
-
-    private boolean mScreenOn = false;
-    private LockPatternUtils mLockPatternUtils;
-
-    private KeyguardUpdateMonitorCallback mBackgroundChanger = new KeyguardUpdateMonitorCallback() {
-        @Override
-        public void onSetBackground(Bitmap bmp) {
-            mKeyguardHost.setCustomBackground(bmp != null ?
-                    new BitmapDrawable(mContext.getResources(), bmp) : null);
-            updateShowWallpaper(bmp == null);
-        }
-    };
-
-    public interface ShowListener {
-        void onShown(IBinder windowToken);
-    };
-
-    /**
-     * @param context Used to create views.
-     * @param viewManager Keyguard will be attached to this.
-     * @param callback Used to notify of changes.
-     * @param lockPatternUtils
-     */
-    public KeyguardViewManager(Context context, ViewManager viewManager,
-            KeyguardViewMediator.ViewMediatorCallback callback,
-            LockPatternUtils lockPatternUtils) {
-        mContext = context;
-        mViewManager = viewManager;
-        mViewMediatorCallback = callback;
-        mLockPatternUtils = lockPatternUtils;
-    }
-
-    /**
-     * Show the keyguard.  Will handle creating and attaching to the view manager
-     * lazily.
-     */
-    public synchronized void show(Bundle options) {
-        if (DEBUG) Log.d(TAG, "show(); mKeyguardView==" + mKeyguardView);
-
-        boolean enableScreenRotation = shouldEnableScreenRotation();
-
-        maybeCreateKeyguardLocked(enableScreenRotation, false, options);
-        maybeEnableScreenRotation(enableScreenRotation);
-
-        // Disable common aspects of the system/status/navigation bars that are not appropriate or
-        // useful on any keyguard screen but can be re-shown by dialogs or SHOW_WHEN_LOCKED
-        // activities. Other disabled bits are handled by the KeyguardViewMediator talking
-        // directly to the status bar service.
-        int visFlags = View.STATUS_BAR_DISABLE_HOME;
-        if (shouldEnableTranslucentDecor()) {
-            mWindowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
-                                       | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
-        }
-        if (DEBUG) Log.v(TAG, "show:setSystemUiVisibility(" + Integer.toHexString(visFlags)+")");
-        mKeyguardHost.setSystemUiVisibility(visFlags);
-
-        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
-        mKeyguardHost.setVisibility(View.VISIBLE);
-        mKeyguardView.show();
-        mKeyguardView.requestFocus();
-    }
-
-    private boolean shouldEnableScreenRotation() {
-        Resources res = mContext.getResources();
-        return SystemProperties.getBoolean("lockscreen.rot_override",false)
-                || res.getBoolean(R.bool.config_enableLockScreenRotation);
-    }
-
-    private boolean shouldEnableTranslucentDecor() {
-        Resources res = mContext.getResources();
-        return res.getBoolean(R.bool.config_enableLockScreenTranslucentDecor);
-    }
-
-    class ViewManagerHost extends FrameLayout {
-        private static final int BACKGROUND_COLOR = 0x70000000;
-
-        private Drawable mCustomBackground;
-
-        // This is a faster way to draw the background on devices without hardware acceleration
-        private final Drawable mBackgroundDrawable = new Drawable() {
-            @Override
-            public void draw(Canvas canvas) {
-                if (mCustomBackground != null) {
-                    final Rect bounds = mCustomBackground.getBounds();
-                    final int vWidth = getWidth();
-                    final int vHeight = getHeight();
-
-                    final int restore = canvas.save();
-                    canvas.translate(-(bounds.width() - vWidth) / 2,
-                            -(bounds.height() - vHeight) / 2);
-                    mCustomBackground.draw(canvas);
-                    canvas.restoreToCount(restore);
-                } else {
-                    canvas.drawColor(BACKGROUND_COLOR, PorterDuff.Mode.SRC);
-                }
-            }
-
-            @Override
-            public void setAlpha(int alpha) {
-            }
-
-            @Override
-            public void setColorFilter(ColorFilter cf) {
-            }
-
-            @Override
-            public int getOpacity() {
-                return PixelFormat.TRANSLUCENT;
-            }
-        };
-
-        public ViewManagerHost(Context context) {
-            super(context);
-            setBackground(mBackgroundDrawable);
-        }
-
-        public void setCustomBackground(Drawable d) {
-            mCustomBackground = d;
-            if (d != null) {
-                d.setColorFilter(BACKGROUND_COLOR, PorterDuff.Mode.SRC_OVER);
-            }
-            computeCustomBackgroundBounds();
-            invalidate();
-        }
-
-        private void computeCustomBackgroundBounds() {
-            if (mCustomBackground == null) return; // Nothing to do
-            if (!isLaidOut()) return; // We'll do this later
-
-            final int bgWidth = mCustomBackground.getIntrinsicWidth();
-            final int bgHeight = mCustomBackground.getIntrinsicHeight();
-            final int vWidth = getWidth();
-            final int vHeight = getHeight();
-
-            final float bgAspect = (float) bgWidth / bgHeight;
-            final float vAspect = (float) vWidth / vHeight;
-
-            if (bgAspect > vAspect) {
-                mCustomBackground.setBounds(0, 0, (int) (vHeight * bgAspect), vHeight);
-            } else {
-                mCustomBackground.setBounds(0, 0, vWidth, (int) (vWidth / bgAspect));
-            }
-        }
-
-        @Override
-        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-            super.onSizeChanged(w, h, oldw, oldh);
-            computeCustomBackgroundBounds();
-        }
-
-        @Override
-        protected void onConfigurationChanged(Configuration newConfig) {
-            super.onConfigurationChanged(newConfig);
-            if (mKeyguardHost.getVisibility() == View.VISIBLE) {
-                // only propagate configuration messages if we're currently showing
-                maybeCreateKeyguardLocked(shouldEnableScreenRotation(), true, null);
-            } else {
-                if (DEBUG) Log.v(TAG, "onConfigurationChanged: view not visible");
-            }
-        }
-
-        @Override
-        public boolean dispatchKeyEvent(KeyEvent event) {
-            if (mKeyguardView != null) {
-                // Always process back and menu keys, regardless of focus
-                if (event.getAction() == KeyEvent.ACTION_DOWN) {
-                    int keyCode = event.getKeyCode();
-                    if (keyCode == KeyEvent.KEYCODE_BACK && mKeyguardView.handleBackKey()) {
-                        return true;
-                    } else if (keyCode == KeyEvent.KEYCODE_MENU && mKeyguardView.handleMenuKey()) {
-                        return true;
-                    }
-                }
-                // Always process media keys, regardless of focus
-                if (mKeyguardView.dispatchKeyEvent(event)) {
-                    return true;
-                }
-            }
-            return super.dispatchKeyEvent(event);
-        }
-    }
-
-    SparseArray<Parcelable> mStateContainer = new SparseArray<Parcelable>();
-
-    private void maybeCreateKeyguardLocked(boolean enableScreenRotation, boolean force,
-            Bundle options) {
-        if (mKeyguardHost != null) {
-            mKeyguardHost.saveHierarchyState(mStateContainer);
-        }
-
-        if (mKeyguardHost == null) {
-            if (DEBUG) Log.d(TAG, "keyguard host is null, creating it...");
-
-            mKeyguardHost = new ViewManagerHost(mContext);
-
-            int flags = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
-                    | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR
-                    | WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
-                    | WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-
-            if (!mNeedsInput) {
-                flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-            }
-
-            final int stretch = ViewGroup.LayoutParams.MATCH_PARENT;
-            final int type = WindowManager.LayoutParams.TYPE_KEYGUARD;
-            WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
-                    stretch, stretch, type, flags, PixelFormat.TRANSLUCENT);
-            lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
-            lp.windowAnimations = R.style.Animation_LockScreen;
-            lp.screenOrientation = enableScreenRotation ?
-                    ActivityInfo.SCREEN_ORIENTATION_USER : ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
-
-            if (ActivityManager.isHighEndGfx()) {
-                lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
-                lp.privateFlags |=
-                        WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_HARDWARE_ACCELERATED;
-            }
-            lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SET_NEEDS_MENU_KEY;
-            lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
-            lp.setTitle("Keyguard");
-            mWindowLayoutParams = lp;
-            mViewManager.addView(mKeyguardHost, lp);
-
-            KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mBackgroundChanger);
-        }
-
-        if (force || mKeyguardView == null) {
-            mKeyguardHost.setCustomBackground(null);
-            mKeyguardHost.removeAllViews();
-            inflateKeyguardView(options);
-            mKeyguardView.requestFocus();
-        }
-        updateUserActivityTimeoutInWindowLayoutParams();
-        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
-
-        mKeyguardHost.restoreHierarchyState(mStateContainer);
-    }
-
-    private void inflateKeyguardView(Bundle options) {
-        View v = mKeyguardHost.findViewById(R.id.keyguard_host_view);
-        if (v != null) {
-            mKeyguardHost.removeView(v);
-        }
-        final LayoutInflater inflater = LayoutInflater.from(mContext);
-        View view = inflater.inflate(R.layout.keyguard_host_view, mKeyguardHost, true);
-        mKeyguardView = (KeyguardHostView) view.findViewById(R.id.keyguard_host_view);
-        mKeyguardView.setLockPatternUtils(mLockPatternUtils);
-        mKeyguardView.setViewMediatorCallback(mViewMediatorCallback);
-        mKeyguardView.initializeSwitchingUserState(options != null &&
-                options.getBoolean(IS_SWITCHING_USER));
-
-        // HACK
-        // The keyguard view will have set up window flags in onFinishInflate before we set
-        // the view mediator callback. Make sure it knows the correct IME state.
-        if (mViewMediatorCallback != null) {
-            KeyguardPasswordView kpv = (KeyguardPasswordView) mKeyguardView.findViewById(
-                    R.id.keyguard_password_view);
-
-            if (kpv != null) {
-                mViewMediatorCallback.setNeedsInput(kpv.needsInput());
-            }
-        }
-
-        if (options != null) {
-            int widgetToShow = options.getInt(LockPatternUtils.KEYGUARD_SHOW_APPWIDGET,
-                    AppWidgetManager.INVALID_APPWIDGET_ID);
-            if (widgetToShow != AppWidgetManager.INVALID_APPWIDGET_ID) {
-                mKeyguardView.goToWidget(widgetToShow);
-            }
-        }
-    }
-
-    public void updateUserActivityTimeout() {
-        updateUserActivityTimeoutInWindowLayoutParams();
-        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
-    }
-
-    private void updateUserActivityTimeoutInWindowLayoutParams() {
-        // Use the user activity timeout requested by the keyguard view, if any.
-        if (mKeyguardView != null) {
-            long timeout = mKeyguardView.getUserActivityTimeout();
-            if (timeout >= 0) {
-                mWindowLayoutParams.userActivityTimeout = timeout;
-                return;
-            }
-        }
-
-        // Otherwise, use the default timeout.
-        mWindowLayoutParams.userActivityTimeout = KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
-    }
-
-    private void maybeEnableScreenRotation(boolean enableScreenRotation) {
-        // TODO: move this outside
-        if (enableScreenRotation) {
-            if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen On!");
-            mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
-        } else {
-            if (DEBUG) Log.d(TAG, "Rotation sensor for lock screen Off!");
-            mWindowLayoutParams.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
-        }
-        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
-    }
-
-    void updateShowWallpaper(boolean show) {
-        if (show) {
-            mWindowLayoutParams.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-        } else {
-            mWindowLayoutParams.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-        }
-        mWindowLayoutParams.format = show ? PixelFormat.TRANSLUCENT : PixelFormat.OPAQUE;
-
-        mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
-    }
-
-    public void setNeedsInput(boolean needsInput) {
-        mNeedsInput = needsInput;
-        if (mWindowLayoutParams != null) {
-            if (needsInput) {
-                mWindowLayoutParams.flags &=
-                    ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-            } else {
-                mWindowLayoutParams.flags |=
-                    WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-            }
-
-            try {
-                mViewManager.updateViewLayout(mKeyguardHost, mWindowLayoutParams);
-            } catch (java.lang.IllegalArgumentException e) {
-                // TODO: Ensure this method isn't called on views that are changing...
-                Log.w(TAG,"Can't update input method on " + mKeyguardHost + " window not attached");
-            }
-        }
-    }
-
-    /**
-     * Reset the state of the view.
-     */
-    public synchronized void reset(Bundle options) {
-        if (DEBUG) Log.d(TAG, "reset()");
-        // User might have switched, check if we need to go back to keyguard
-        // TODO: It's preferable to stay and show the correct lockscreen or unlock if none
-        maybeCreateKeyguardLocked(shouldEnableScreenRotation(), true, options);
-    }
-
-    public synchronized void onScreenTurnedOff() {
-        if (DEBUG) Log.d(TAG, "onScreenTurnedOff()");
-        mScreenOn = false;
-        if (mKeyguardView != null) {
-            mKeyguardView.onScreenTurnedOff();
-        }
-    }
-
-    public synchronized void onScreenTurnedOn(final IKeyguardShowCallback callback) {
-        if (DEBUG) Log.d(TAG, "onScreenTurnedOn()");
-        mScreenOn = true;
-
-        // If keyguard is not showing, we need to inform PhoneWindowManager with a null
-        // token so it doesn't wait for us to draw...
-        final IBinder token = isShowing() ? mKeyguardHost.getWindowToken() : null;
-
-        if (DEBUG && token == null) Slog.v(TAG, "send wm null token: "
-                + (mKeyguardHost == null ? "host was null" : "not showing"));
-
-        if (mKeyguardView != null) {
-            mKeyguardView.onScreenTurnedOn();
-
-            // Caller should wait for this window to be shown before turning
-            // on the screen.
-            if (callback != null) {
-                if (mKeyguardHost.getVisibility() == View.VISIBLE) {
-                    // Keyguard may be in the process of being shown, but not yet
-                    // updated with the window manager...  give it a chance to do so.
-                    mKeyguardHost.post(new Runnable() {
-                        @Override
-                        public void run() {
-                            try {
-                                callback.onShown(token);
-                            } catch (RemoteException e) {
-                                Slog.w(TAG, "Exception calling onShown():", e);
-                            }
-                        }
-                    });
-                } else {
-                    try {
-                        callback.onShown(token);
-                    } catch (RemoteException e) {
-                        Slog.w(TAG, "Exception calling onShown():", e);
-                    }
-                }
-            }
-        } else if (callback != null) {
-            try {
-                callback.onShown(token);
-            } catch (RemoteException e) {
-                Slog.w(TAG, "Exception calling onShown():", e);
-            }
-        }
-    }
-
-    public synchronized void verifyUnlock() {
-        if (DEBUG) Log.d(TAG, "verifyUnlock()");
-        show(null);
-        mKeyguardView.verifyUnlock();
-    }
-
-    /**
-     * Hides the keyguard view
-     */
-    public synchronized void hide() {
-        if (DEBUG) Log.d(TAG, "hide()");
-
-        if (mKeyguardHost != null) {
-            mKeyguardHost.setVisibility(View.GONE);
-
-            // We really only want to preserve keyguard state for configuration changes. Hence
-            // we should clear state of widgets (e.g. Music) when we hide keyguard so it can
-            // start with a fresh state when we return.
-            mStateContainer.clear();
-
-            // Don't do this right away, so we can let the view continue to animate
-            // as it goes away.
-            if (mKeyguardView != null) {
-                final KeyguardViewBase lastView = mKeyguardView;
-                mKeyguardView = null;
-                mKeyguardHost.postDelayed(new Runnable() {
-                    @Override
-                    public void run() {
-                        synchronized (KeyguardViewManager.this) {
-                            lastView.cleanUp();
-                            // Let go of any large bitmaps.
-                            mKeyguardHost.setCustomBackground(null);
-                            updateShowWallpaper(true);
-                            mKeyguardHost.removeView(lastView);
-                            mViewMediatorCallback.keyguardGone();
-                        }
-                    }
-                }, HIDE_KEYGUARD_DELAY);
-            }
-        }
-    }
-
-    /**
-     * Dismisses the keyguard by going to the next screen or making it gone.
-     */
-    public synchronized void dismiss() {
-        if (mScreenOn) {
-            mKeyguardView.dismiss();
-        }
-    }
-
-    /**
-     * @return Whether the keyguard is showing
-     */
-    public synchronized boolean isShowing() {
-        return (mKeyguardHost != null && mKeyguardHost.getVisibility() == View.VISIBLE);
-    }
-
-    public void showAssistant() {
-        if (mKeyguardView != null) {
-            mKeyguardView.showAssistant();
-        }
-    }
-
-    public void dispatch(MotionEvent event) {
-        if (mKeyguardView != null) {
-            mKeyguardView.dispatch(event);
-        }
-    }
-
-    public void launchCamera() {
-        if (mKeyguardView != null) {
-            mKeyguardView.launchCamera();
-        }
-    }
-}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
deleted file mode 100644
index 6d7eabc..0000000
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewMediator.java
+++ /dev/null
@@ -1,1390 +0,0 @@
-/*
- * Copyright (C) 2007 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.android.keyguard;
-
-import android.graphics.Bitmap;
-import com.android.internal.policy.IKeyguardExitCallback;
-import com.android.internal.policy.IKeyguardShowCallback;
-import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-
-import android.app.Activity;
-import android.app.ActivityManagerNative;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.app.SearchManager;
-import android.app.StatusBarManager;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.media.AudioManager;
-import android.media.SoundPool;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.PowerManager;
-import android.os.RemoteException;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.telephony.TelephonyManager;
-import android.util.EventLog;
-import android.util.Log;
-import android.util.Slog;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.WindowManager;
-import android.view.WindowManagerPolicy;
-
-import com.android.internal.telephony.IccCardConstants;
-import com.android.internal.widget.LockPatternUtils;
-
-
-/**
- * Mediates requests related to the keyguard.  This includes queries about the
- * state of the keyguard, power management events that effect whether the keyguard
- * should be shown or reset, callbacks to the phone window manager to notify
- * it of when the keyguard is showing, and events from the keyguard view itself
- * stating that the keyguard was succesfully unlocked.
- *
- * Note that the keyguard view is shown when the screen is off (as appropriate)
- * so that once the screen comes on, it will be ready immediately.
- *
- * Example queries about the keyguard:
- * - is {movement, key} one that should wake the keygaurd?
- * - is the keyguard showing?
- * - are input events restricted due to the state of the keyguard?
- *
- * Callbacks to the phone window manager:
- * - the keyguard is showing
- *
- * Example external events that translate to keyguard view changes:
- * - screen turned off -> reset the keyguard, and show it so it will be ready
- *   next time the screen turns on
- * - keyboard is slid open -> if the keyguard is not secure, hide it
- *
- * Events from the keyguard view:
- * - user succesfully unlocked keyguard -> hide keyguard view, and no longer
- *   restrict input events.
- *
- * Note: in addition to normal power managment events that effect the state of
- * whether the keyguard should be showing, external apps and services may request
- * that the keyguard be disabled via {@link #setKeyguardEnabled(boolean)}.  When
- * false, this will override all other conditions for turning on the keyguard.
- *
- * Threading and synchronization:
- * This class is created by the initialization routine of the {@link WindowManagerPolicy},
- * and runs on its thread.  The keyguard UI is created from that thread in the
- * constructor of this class.  The apis may be called from other threads, including the
- * {@link com.android.server.input.InputManagerService}'s and {@link android.view.WindowManager}'s.
- * Therefore, methods on this class are synchronized, and any action that is pointed
- * directly to the keyguard UI is posted to a {@link Handler} to ensure it is taken on the UI
- * thread of the keyguard.
- */
-public class KeyguardViewMediator {
-    private static final int KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000;
-    final static boolean DEBUG = false;
-    private final static boolean DBG_WAKE = false;
-
-    private final static String TAG = "KeyguardViewMediator";
-
-    private static final String DELAYED_KEYGUARD_ACTION =
-        "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD";
-
-    // used for handler messages
-    private static final int SHOW = 2;
-    private static final int HIDE = 3;
-    private static final int RESET = 4;
-    private static final int VERIFY_UNLOCK = 5;
-    private static final int NOTIFY_SCREEN_OFF = 6;
-    private static final int NOTIFY_SCREEN_ON = 7;
-    private static final int KEYGUARD_DONE = 9;
-    private static final int KEYGUARD_DONE_DRAWING = 10;
-    private static final int KEYGUARD_DONE_AUTHENTICATING = 11;
-    private static final int SET_HIDDEN = 12;
-    private static final int KEYGUARD_TIMEOUT = 13;
-    private static final int SHOW_ASSISTANT = 14;
-    private static final int DISPATCH_EVENT = 15;
-    private static final int LAUNCH_CAMERA = 16;
-    private static final int DISMISS = 17;
-
-    /**
-     * The default amount of time we stay awake (used for all key input)
-     */
-    protected static final int AWAKE_INTERVAL_DEFAULT_MS = 10000;
-
-    /**
-     * How long to wait after the screen turns off due to timeout before
-     * turning on the keyguard (i.e, the user has this much time to turn
-     * the screen back on without having to face the keyguard).
-     */
-    private static final int KEYGUARD_LOCK_AFTER_DELAY_DEFAULT = 5000;
-
-    /**
-     * How long we'll wait for the {@link ViewMediatorCallback#keyguardDoneDrawing()}
-     * callback before unblocking a call to {@link #setKeyguardEnabled(boolean)}
-     * that is reenabling the keyguard.
-     */
-    private static final int KEYGUARD_DONE_DRAWING_TIMEOUT_MS = 2000;
-
-    /**
-     * Allow the user to expand the status bar when the keyguard is engaged
-     * (without a pattern or password).
-     */
-    private static final boolean ENABLE_INSECURE_STATUS_BAR_EXPAND = true;
-
-    /** The stream type that the lock sounds are tied to. */
-    private int mMasterStreamType;
-
-    private Context mContext;
-    private AlarmManager mAlarmManager;
-    private AudioManager mAudioManager;
-    private StatusBarManager mStatusBarManager;
-    private boolean mSwitchingUser;
-
-    private boolean mSystemReady;
-
-    // Whether the next call to playSounds() should be skipped.  Defaults to
-    // true because the first lock (on boot) should be silent.
-    private boolean mSuppressNextLockSound = true;
-
-
-    /** High level access to the power manager for WakeLocks */
-    private PowerManager mPM;
-
-    /** UserManager for querying number of users */
-    private UserManager mUserManager;
-
-    /** SearchManager for determining whether or not search assistant is available */
-    private SearchManager mSearchManager;
-
-    /**
-     * Used to keep the device awake while to ensure the keyguard finishes opening before
-     * we sleep.
-     */
-    private PowerManager.WakeLock mShowKeyguardWakeLock;
-
-    private KeyguardViewManager mKeyguardViewManager;
-
-    // these are protected by synchronized (this)
-
-    /**
-     * External apps (like the phone app) can tell us to disable the keygaurd.
-     */
-    private boolean mExternallyEnabled = true;
-
-    /**
-     * Remember if an external call to {@link #setKeyguardEnabled} with value
-     * false caused us to hide the keyguard, so that we need to reshow it once
-     * the keygaurd is reenabled with another call with value true.
-     */
-    private boolean mNeedToReshowWhenReenabled = false;
-
-    // cached value of whether we are showing (need to know this to quickly
-    // answer whether the input should be restricted)
-    private boolean mShowing;
-
-    // true if the keyguard is hidden by another window
-    private boolean mHidden = false;
-
-    /**
-     * Helps remember whether the screen has turned on since the last time
-     * it turned off due to timeout. see {@link #onScreenTurnedOff(int)}
-     */
-    private int mDelayedShowingSequence;
-
-    /**
-     * If the user has disabled the keyguard, then requests to exit, this is
-     * how we'll ultimately let them know whether it was successful.  We use this
-     * var being non-null as an indicator that there is an in progress request.
-     */
-    private IKeyguardExitCallback mExitSecureCallback;
-
-    // the properties of the keyguard
-
-    private KeyguardUpdateMonitor mUpdateMonitor;
-
-    private boolean mScreenOn;
-
-    // last known state of the cellular connection
-    private String mPhoneState = TelephonyManager.EXTRA_STATE_IDLE;
-
-    /**
-     * we send this intent when the keyguard is dismissed.
-     */
-    private static final Intent USER_PRESENT_INTENT = new Intent(Intent.ACTION_USER_PRESENT)
-            .addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
-                    | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-
-    /**
-     * {@link #setKeyguardEnabled} waits on this condition when it reenables
-     * the keyguard.
-     */
-    private boolean mWaitingUntilKeyguardVisible = false;
-    private LockPatternUtils mLockPatternUtils;
-    private boolean mKeyguardDonePending = false;
-
-    private SoundPool mLockSounds;
-    private int mLockSoundId;
-    private int mUnlockSoundId;
-    private int mLockSoundStreamId;
-
-    /**
-     * The volume applied to the lock/unlock sounds.
-     */
-    private final float mLockSoundVolume;
-
-    /**
-     * For managing external displays
-     */
-    private KeyguardDisplayManager mKeyguardDisplayManager;
-
-    /**
-     * Cache of avatar drawables, for use by KeyguardMultiUserAvatar.
-     */
-    private static MultiUserAvatarCache sMultiUserAvatarCache = new MultiUserAvatarCache();
-
-    /**
-     * The callback used by the keyguard view to tell the {@link KeyguardViewMediator}
-     * various things.
-     */
-    public interface ViewMediatorCallback {
-        /**
-         * Reports user activity and requests that the screen stay on.
-         */
-        void userActivity();
-
-        /**
-         * Reports user activity and requests that the screen stay on for at least
-         * the specified amount of time.
-         * @param millis The amount of time in millis.  This value is currently ignored.
-         */
-        void userActivity(long millis);
-
-        /**
-         * Report that the keyguard is done.
-         * @param authenticated Whether the user securely got past the keyguard.
-         *   the only reason for this to be false is if the keyguard was instructed
-         *   to appear temporarily to verify the user is supposed to get past the
-         *   keyguard, and the user fails to do so.
-         */
-        void keyguardDone(boolean authenticated);
-
-        /**
-         * Report that the keyguard is done drawing.
-         */
-        void keyguardDoneDrawing();
-
-        /**
-         * Tell ViewMediator that the current view needs IME input
-         * @param needsInput
-         */
-        void setNeedsInput(boolean needsInput);
-
-        /**
-         * Tell view mediator that the keyguard view's desired user activity timeout
-         * has changed and needs to be reapplied to the window.
-         */
-        void onUserActivityTimeoutChanged();
-
-        /**
-         * Report that the keyguard is dismissable, pending the next keyguardDone call.
-         */
-        void keyguardDonePending();
-
-        /**
-         * Report when keyguard is actually gone
-         */
-        void keyguardGone();
-    }
-
-    KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
-
-        @Override
-        public void onUserSwitching(int userId) {
-            // Note that the mLockPatternUtils user has already been updated from setCurrentUser.
-            // We need to force a reset of the views, since lockNow (called by
-            // ActivityManagerService) will not reconstruct the keyguard if it is already showing.
-            synchronized (KeyguardViewMediator.this) {
-                mSwitchingUser = true;
-                resetStateLocked(null);
-                adjustStatusBarLocked();
-                // When we switch users we want to bring the new user to the biometric unlock even
-                // if the current user has gone to the backup.
-                KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
-            }
-        }
-
-        @Override
-        public void onUserSwitchComplete(int userId) {
-            mSwitchingUser = false;
-        }
-
-        @Override
-        public void onUserRemoved(int userId) {
-            mLockPatternUtils.removeUser(userId);
-            sMultiUserAvatarCache.clear(userId);
-        }
-
-        @Override
-        public void onUserInfoChanged(int userId) {
-            sMultiUserAvatarCache.clear(userId);
-        }
-
-        @Override
-        void onPhoneStateChanged(int phoneState) {
-            synchronized (KeyguardViewMediator.this) {
-                if (TelephonyManager.CALL_STATE_IDLE == phoneState  // call ending
-                        && !mScreenOn                           // screen off
-                        && mExternallyEnabled) {                // not disabled by any app
-
-                    // note: this is a way to gracefully reenable the keyguard when the call
-                    // ends and the screen is off without always reenabling the keyguard
-                    // each time the screen turns off while in call (and having an occasional ugly
-                    // flicker while turning back on the screen and disabling the keyguard again).
-                    if (DEBUG) Log.d(TAG, "screen is off and call ended, let's make sure the "
-                            + "keyguard is showing");
-                    doKeyguardLocked(null);
-                }
-            }
-        };
-
-        @Override
-        public void onClockVisibilityChanged() {
-            adjustStatusBarLocked();
-        }
-
-        @Override
-        public void onDeviceProvisioned() {
-            sendUserPresentBroadcast();
-        }
-
-        @Override
-        public void onSimStateChanged(IccCardConstants.State simState) {
-            if (DEBUG) Log.d(TAG, "onSimStateChanged: " + simState);
-
-            switch (simState) {
-                case NOT_READY:
-                case ABSENT:
-                    // only force lock screen in case of missing sim if user hasn't
-                    // gone through setup wizard
-                    synchronized (this) {
-                        if (!mUpdateMonitor.isDeviceProvisioned()) {
-                            if (!isShowing()) {
-                                if (DEBUG) Log.d(TAG, "ICC_ABSENT isn't showing,"
-                                        + " we need to show the keyguard since the "
-                                        + "device isn't provisioned yet.");
-                                doKeyguardLocked(null);
-                            } else {
-                                resetStateLocked(null);
-                            }
-                        }
-                    }
-                    break;
-                case PIN_REQUIRED:
-                case PUK_REQUIRED:
-                    synchronized (this) {
-                        if (!isShowing()) {
-                            if (DEBUG) Log.d(TAG, "INTENT_VALUE_ICC_LOCKED and keygaurd isn't "
-                                    + "showing; need to show keyguard so user can enter sim pin");
-                            doKeyguardLocked(null);
-                        } else {
-                            resetStateLocked(null);
-                        }
-                    }
-                    break;
-                case PERM_DISABLED:
-                    synchronized (this) {
-                        if (!isShowing()) {
-                            if (DEBUG) Log.d(TAG, "PERM_DISABLED and "
-                                  + "keygaurd isn't showing.");
-                            doKeyguardLocked(null);
-                        } else {
-                            if (DEBUG) Log.d(TAG, "PERM_DISABLED, resetStateLocked to"
-                                  + "show permanently disabled message in lockscreen.");
-                            resetStateLocked(null);
-                        }
-                    }
-                    break;
-                case READY:
-                    synchronized (this) {
-                        if (isShowing()) {
-                            resetStateLocked(null);
-                        }
-                    }
-                    break;
-            }
-        }
-
-    };
-
-    ViewMediatorCallback mViewMediatorCallback = new ViewMediatorCallback() {
-        public void userActivity() {
-            KeyguardViewMediator.this.userActivity();
-        }
-
-        public void userActivity(long holdMs) {
-            KeyguardViewMediator.this.userActivity(holdMs);
-        }
-
-        public void keyguardDone(boolean authenticated) {
-            KeyguardViewMediator.this.keyguardDone(authenticated, true);
-        }
-
-        public void keyguardDoneDrawing() {
-            mHandler.sendEmptyMessage(KEYGUARD_DONE_DRAWING);
-        }
-
-        @Override
-        public void setNeedsInput(boolean needsInput) {
-            mKeyguardViewManager.setNeedsInput(needsInput);
-        }
-
-        @Override
-        public void onUserActivityTimeoutChanged() {
-            mKeyguardViewManager.updateUserActivityTimeout();
-        }
-
-        @Override
-        public void keyguardDonePending() {
-            mKeyguardDonePending = true;
-        }
-
-        @Override
-        public void keyguardGone() {
-            mKeyguardDisplayManager.hide();
-        }
-    };
-
-    private void userActivity() {
-        userActivity(AWAKE_INTERVAL_DEFAULT_MS);
-    }
-
-    public void userActivity(long holdMs) {
-        // We ignore the hold time.  Eventually we should remove it.
-        // Instead, the keyguard window has an explicit user activity timeout set on it.
-        mPM.userActivity(SystemClock.uptimeMillis(), false);
-    }
-
-    /**
-     * Construct a KeyguardViewMediator
-     * @param context
-     * @param lockPatternUtils optional mock interface for LockPatternUtils
-     */
-    public KeyguardViewMediator(Context context, LockPatternUtils lockPatternUtils) {
-        mContext = context;
-        mPM = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
-        mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
-        mShowKeyguardWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "show keyguard");
-        mShowKeyguardWakeLock.setReferenceCounted(false);
-
-        mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(DELAYED_KEYGUARD_ACTION));
-
-        mKeyguardDisplayManager = new KeyguardDisplayManager(context);
-
-        mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
-
-        mUpdateMonitor = KeyguardUpdateMonitor.getInstance(context);
-
-        mLockPatternUtils = lockPatternUtils != null
-                ? lockPatternUtils : new LockPatternUtils(mContext);
-        mLockPatternUtils.setCurrentUser(UserHandle.USER_OWNER);
-
-        // Assume keyguard is showing (unless it's disabled) until we know for sure...
-        mShowing = (mUpdateMonitor.isDeviceProvisioned() || mLockPatternUtils.isSecure())
-                && !mLockPatternUtils.isLockScreenDisabled();
-
-        WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
-
-        mKeyguardViewManager = new KeyguardViewManager(context, wm, mViewMediatorCallback,
-                mLockPatternUtils);
-
-        final ContentResolver cr = mContext.getContentResolver();
-
-        mScreenOn = mPM.isScreenOn();
-
-        mLockSounds = new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
-        String soundPath = Settings.Global.getString(cr, Settings.Global.LOCK_SOUND);
-        if (soundPath != null) {
-            mLockSoundId = mLockSounds.load(soundPath, 1);
-        }
-        if (soundPath == null || mLockSoundId == 0) {
-            Log.w(TAG, "failed to load lock sound from " + soundPath);
-        }
-        soundPath = Settings.Global.getString(cr, Settings.Global.UNLOCK_SOUND);
-        if (soundPath != null) {
-            mUnlockSoundId = mLockSounds.load(soundPath, 1);
-        }
-        if (soundPath == null || mUnlockSoundId == 0) {
-            Log.w(TAG, "failed to load unlock sound from " + soundPath);
-        }
-        int lockSoundDefaultAttenuation = context.getResources().getInteger(
-                com.android.internal.R.integer.config_lockSoundVolumeDb);
-        mLockSoundVolume = (float)Math.pow(10, (float)lockSoundDefaultAttenuation/20);
-    }
-
-    /**
-     * Let us know that the system is ready after startup.
-     */
-    public void onSystemReady() {
-        mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
-        synchronized (this) {
-            if (DEBUG) Log.d(TAG, "onSystemReady");
-            mSystemReady = true;
-            mUpdateMonitor.registerCallback(mUpdateCallback);
-
-            // Suppress biometric unlock right after boot until things have settled if it is the
-            // selected security method, otherwise unsuppress it.  It must be unsuppressed if it is
-            // not the selected security method for the following reason:  if the user starts
-            // without a screen lock selected, the biometric unlock would be suppressed the first
-            // time they try to use it.
-            //
-            // Note that the biometric unlock will still not show if it is not the selected method.
-            // Calling setAlternateUnlockEnabled(true) simply says don't suppress it if it is the
-            // selected method.
-            if (mLockPatternUtils.usingBiometricWeak()
-                    && mLockPatternUtils.isBiometricWeakInstalled()) {
-                if (DEBUG) Log.d(TAG, "suppressing biometric unlock during boot");
-                mUpdateMonitor.setAlternateUnlockEnabled(false);
-            } else {
-                mUpdateMonitor.setAlternateUnlockEnabled(true);
-            }
-
-            doKeyguardLocked(null);
-        }
-        // Most services aren't available until the system reaches the ready state, so we
-        // send it here when the device first boots.
-        maybeSendUserPresentBroadcast();
-    }
-
-    /**
-     * Called to let us know the screen was turned off.
-     * @param why either {@link WindowManagerPolicy#OFF_BECAUSE_OF_ADMIN},
-     * {@link WindowManagerPolicy#OFF_BECAUSE_OF_USER}, or
-     * {@link WindowManagerPolicy#OFF_BECAUSE_OF_TIMEOUT}.
-     */
-    public void onScreenTurnedOff(int why) {
-        synchronized (this) {
-            mScreenOn = false;
-            if (DEBUG) Log.d(TAG, "onScreenTurnedOff(" + why + ")");
-
-            mKeyguardDonePending = false;
-
-            // Lock immediately based on setting if secure (user has a pin/pattern/password).
-            // This also "locks" the device when not secure to provide easy access to the
-            // camera while preventing unwanted input.
-            final boolean lockImmediately =
-                mLockPatternUtils.getPowerButtonInstantlyLocks() || !mLockPatternUtils.isSecure();
-
-            if (mExitSecureCallback != null) {
-                if (DEBUG) Log.d(TAG, "pending exit secure callback cancelled");
-                try {
-                    mExitSecureCallback.onKeyguardExitResult(false);
-                } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
-                }
-                mExitSecureCallback = null;
-                if (!mExternallyEnabled) {
-                    hideLocked();
-                }
-            } else if (mShowing) {
-                notifyScreenOffLocked();
-                resetStateLocked(null);
-            } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT
-                   || (why == WindowManagerPolicy.OFF_BECAUSE_OF_USER && !lockImmediately)) {
-                doKeyguardLaterLocked();
-            } else {
-                doKeyguardLocked(null);
-            }
-        }
-        KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurndOff(why);
-    }
-
-    private void doKeyguardLaterLocked() {
-        // if the screen turned off because of timeout or the user hit the power button
-        // and we don't need to lock immediately, set an alarm
-        // to enable it a little bit later (i.e, give the user a chance
-        // to turn the screen back on within a certain window without
-        // having to unlock the screen)
-        final ContentResolver cr = mContext.getContentResolver();
-
-        // From DisplaySettings
-        long displayTimeout = Settings.System.getInt(cr, SCREEN_OFF_TIMEOUT,
-                KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT);
-
-        // From SecuritySettings
-        final long lockAfterTimeout = Settings.Secure.getInt(cr,
-                Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT,
-                KEYGUARD_LOCK_AFTER_DELAY_DEFAULT);
-
-        // From DevicePolicyAdmin
-        final long policyTimeout = mLockPatternUtils.getDevicePolicyManager()
-                .getMaximumTimeToLock(null, mLockPatternUtils.getCurrentUser());
-
-        long timeout;
-        if (policyTimeout > 0) {
-            // policy in effect. Make sure we don't go beyond policy limit.
-            displayTimeout = Math.max(displayTimeout, 0); // ignore negative values
-            timeout = Math.min(policyTimeout - displayTimeout, lockAfterTimeout);
-        } else {
-            timeout = lockAfterTimeout;
-        }
-
-        if (timeout <= 0) {
-            // Lock now
-            mSuppressNextLockSound = true;
-            doKeyguardLocked(null);
-        } else {
-            // Lock in the future
-            long when = SystemClock.elapsedRealtime() + timeout;
-            Intent intent = new Intent(DELAYED_KEYGUARD_ACTION);
-            intent.putExtra("seq", mDelayedShowingSequence);
-            PendingIntent sender = PendingIntent.getBroadcast(mContext,
-                    0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
-            mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, sender);
-            if (DEBUG) Log.d(TAG, "setting alarm to turn off keyguard, seq = "
-                             + mDelayedShowingSequence);
-        }
-    }
-
-    private void cancelDoKeyguardLaterLocked() {
-        mDelayedShowingSequence++;
-    }
-
-    /**
-     * Let's us know the screen was turned on.
-     */
-    public void onScreenTurnedOn(IKeyguardShowCallback callback) {
-        synchronized (this) {
-            mScreenOn = true;
-            cancelDoKeyguardLaterLocked();
-            if (DEBUG) Log.d(TAG, "onScreenTurnedOn, seq = " + mDelayedShowingSequence);
-            if (callback != null) {
-                notifyScreenOnLocked(callback);
-            }
-        }
-        KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurnedOn();
-        maybeSendUserPresentBroadcast();
-    }
-
-    private void maybeSendUserPresentBroadcast() {
-        if (mSystemReady && mLockPatternUtils.isLockScreenDisabled()
-                && mUserManager.getUsers(true).size() == 1) {
-            // Lock screen is disabled because the user has set the preference to "None".
-            // In this case, send out ACTION_USER_PRESENT here instead of in
-            // handleKeyguardDone()
-            sendUserPresentBroadcast();
-        }
-    }
-
-    /**
-     * A dream started.  We should lock after the usual screen-off lock timeout but only
-     * if there is a secure lock pattern.
-     */
-    public void onDreamingStarted() {
-        synchronized (this) {
-            if (mScreenOn && mLockPatternUtils.isSecure()) {
-                doKeyguardLaterLocked();
-            }
-        }
-    }
-
-    /**
-     * A dream stopped.
-     */
-    public void onDreamingStopped() {
-        synchronized (this) {
-            if (mScreenOn) {
-                cancelDoKeyguardLaterLocked();
-            }
-        }
-    }
-
-    /**
-     * Same semantics as {@link WindowManagerPolicy#enableKeyguard}; provide
-     * a way for external stuff to override normal keyguard behavior.  For instance
-     * the phone app disables the keyguard when it receives incoming calls.
-     */
-    public void setKeyguardEnabled(boolean enabled) {
-        synchronized (this) {
-            if (DEBUG) Log.d(TAG, "setKeyguardEnabled(" + enabled + ")");
-
-            mExternallyEnabled = enabled;
-
-            if (!enabled && mShowing) {
-                if (mExitSecureCallback != null) {
-                    if (DEBUG) Log.d(TAG, "in process of verifyUnlock request, ignoring");
-                    // we're in the process of handling a request to verify the user
-                    // can get past the keyguard. ignore extraneous requests to disable / reenable
-                    return;
-                }
-
-                // hiding keyguard that is showing, remember to reshow later
-                if (DEBUG) Log.d(TAG, "remembering to reshow, hiding keyguard, "
-                        + "disabling status bar expansion");
-                mNeedToReshowWhenReenabled = true;
-                hideLocked();
-            } else if (enabled && mNeedToReshowWhenReenabled) {
-                // reenabled after previously hidden, reshow
-                if (DEBUG) Log.d(TAG, "previously hidden, reshowing, reenabling "
-                        + "status bar expansion");
-                mNeedToReshowWhenReenabled = false;
-
-                if (mExitSecureCallback != null) {
-                    if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting");
-                    try {
-                        mExitSecureCallback.onKeyguardExitResult(false);
-                    } catch (RemoteException e) {
-                        Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
-                    }
-                    mExitSecureCallback = null;
-                    resetStateLocked(null);
-                } else {
-                    showLocked(null);
-
-                    // block until we know the keygaurd is done drawing (and post a message
-                    // to unblock us after a timeout so we don't risk blocking too long
-                    // and causing an ANR).
-                    mWaitingUntilKeyguardVisible = true;
-                    mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_DRAWING, KEYGUARD_DONE_DRAWING_TIMEOUT_MS);
-                    if (DEBUG) Log.d(TAG, "waiting until mWaitingUntilKeyguardVisible is false");
-                    while (mWaitingUntilKeyguardVisible) {
-                        try {
-                            wait();
-                        } catch (InterruptedException e) {
-                            Thread.currentThread().interrupt();
-                        }
-                    }
-                    if (DEBUG) Log.d(TAG, "done waiting for mWaitingUntilKeyguardVisible");
-                }
-            }
-        }
-    }
-
-    /**
-     * @see android.app.KeyguardManager#exitKeyguardSecurely
-     */
-    public void verifyUnlock(IKeyguardExitCallback callback) {
-        synchronized (this) {
-            if (DEBUG) Log.d(TAG, "verifyUnlock");
-            if (!mUpdateMonitor.isDeviceProvisioned()) {
-                // don't allow this api when the device isn't provisioned
-                if (DEBUG) Log.d(TAG, "ignoring because device isn't provisioned");
-                try {
-                    callback.onKeyguardExitResult(false);
-                } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
-                }
-            } else if (mExternallyEnabled) {
-                // this only applies when the user has externally disabled the
-                // keyguard.  this is unexpected and means the user is not
-                // using the api properly.
-                Log.w(TAG, "verifyUnlock called when not externally disabled");
-                try {
-                    callback.onKeyguardExitResult(false);
-                } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
-                }
-            } else if (mExitSecureCallback != null) {
-                // already in progress with someone else
-                try {
-                    callback.onKeyguardExitResult(false);
-                } catch (RemoteException e) {
-                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
-                }
-            } else {
-                mExitSecureCallback = callback;
-                verifyUnlockLocked();
-            }
-        }
-    }
-
-    /**
-     * Is the keyguard currently showing?
-     */
-    public boolean isShowing() {
-        return mShowing;
-    }
-
-    /**
-     * Is the keyguard currently showing and not being force hidden?
-     */
-    public boolean isShowingAndNotHidden() {
-        return mShowing && !mHidden;
-    }
-
-    /**
-     * Notify us when the keyguard is hidden by another window
-     */
-    public void setHidden(boolean isHidden) {
-        if (DEBUG) Log.d(TAG, "setHidden " + isHidden);
-        mUpdateMonitor.sendKeyguardVisibilityChanged(!isHidden);
-        mHandler.removeMessages(SET_HIDDEN);
-        Message msg = mHandler.obtainMessage(SET_HIDDEN, (isHidden ? 1 : 0), 0);
-        mHandler.sendMessage(msg);
-    }
-
-    /**
-     * Handles SET_HIDDEN message sent by setHidden()
-     */
-    private void handleSetHidden(boolean isHidden) {
-        synchronized (KeyguardViewMediator.this) {
-            if (mHidden != isHidden) {
-                mHidden = isHidden;
-                updateActivityLockScreenState();
-                adjustStatusBarLocked();
-            }
-        }
-    }
-
-    /**
-     * Used by PhoneWindowManager to enable the keyguard due to a user activity timeout.
-     * This must be safe to call from any thread and with any window manager locks held.
-     */
-    public void doKeyguardTimeout(Bundle options) {
-        mHandler.removeMessages(KEYGUARD_TIMEOUT);
-        Message msg = mHandler.obtainMessage(KEYGUARD_TIMEOUT, options);
-        mHandler.sendMessage(msg);
-    }
-
-    /**
-     * Given the state of the keyguard, is the input restricted?
-     * Input is restricted when the keyguard is showing, or when the keyguard
-     * was suppressed by an app that disabled the keyguard or we haven't been provisioned yet.
-     */
-    public boolean isInputRestricted() {
-        return mShowing || mNeedToReshowWhenReenabled || !mUpdateMonitor.isDeviceProvisioned();
-    }
-
-    /**
-     * Enable the keyguard if the settings are appropriate.
-     */
-    private void doKeyguardLocked(Bundle options) {
-        // if another app is disabling us, don't show
-        if (!mExternallyEnabled) {
-            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because externally disabled");
-
-            // note: we *should* set mNeedToReshowWhenReenabled=true here, but that makes
-            // for an occasional ugly flicker in this situation:
-            // 1) receive a call with the screen on (no keyguard) or make a call
-            // 2) screen times out
-            // 3) user hits key to turn screen back on
-            // instead, we reenable the keyguard when we know the screen is off and the call
-            // ends (see the broadcast receiver below)
-            // TODO: clean this up when we have better support at the window manager level
-            // for apps that wish to be on top of the keyguard
-            return;
-        }
-
-        // if the keyguard is already showing, don't bother
-        if (mKeyguardViewManager.isShowing()) {
-            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because it is already showing");
-            return;
-        }
-
-        // if the setup wizard hasn't run yet, don't show
-        final boolean requireSim = !SystemProperties.getBoolean("keyguard.no_require_sim",
-                false);
-        final boolean provisioned = mUpdateMonitor.isDeviceProvisioned();
-        final IccCardConstants.State state = mUpdateMonitor.getSimState();
-        final boolean lockedOrMissing = state.isPinLocked()
-                || ((state == IccCardConstants.State.ABSENT
-                || state == IccCardConstants.State.PERM_DISABLED)
-                && requireSim);
-
-        if (!lockedOrMissing && !provisioned) {
-            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because device isn't provisioned"
-                    + " and the sim is not locked or missing");
-            return;
-        }
-
-        if (mUserManager.getUsers(true).size() < 2
-                && mLockPatternUtils.isLockScreenDisabled() && !lockedOrMissing) {
-            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because lockscreen is off");
-            return;
-        }
-
-        if (DEBUG) Log.d(TAG, "doKeyguard: showing the lock screen");
-        showLocked(options);
-    }
-
-    /**
-     * Dismiss the keyguard through the security layers.
-     */
-    public void handleDismiss() {
-        if (mShowing && !mHidden) {
-            mKeyguardViewManager.dismiss();
-        }
-    }
-
-    public void dismiss() {
-        mHandler.sendEmptyMessage(DISMISS);
-    }
-
-    /**
-     * Send message to keyguard telling it to reset its state.
-     * @param options options about how to show the keyguard
-     * @see #handleReset()
-     */
-    private void resetStateLocked(Bundle options) {
-        if (DEBUG) Log.e(TAG, "resetStateLocked");
-        Message msg = mHandler.obtainMessage(RESET, options);
-        mHandler.sendMessage(msg);
-    }
-
-    /**
-     * Send message to keyguard telling it to verify unlock
-     * @see #handleVerifyUnlock()
-     */
-    private void verifyUnlockLocked() {
-        if (DEBUG) Log.d(TAG, "verifyUnlockLocked");
-        mHandler.sendEmptyMessage(VERIFY_UNLOCK);
-    }
-
-
-    /**
-     * Send a message to keyguard telling it the screen just turned on.
-     * @see #onScreenTurnedOff(int)
-     * @see #handleNotifyScreenOff
-     */
-    private void notifyScreenOffLocked() {
-        if (DEBUG) Log.d(TAG, "notifyScreenOffLocked");
-        mHandler.sendEmptyMessage(NOTIFY_SCREEN_OFF);
-    }
-
-    /**
-     * Send a message to keyguard telling it the screen just turned on.
-     * @see #onScreenTurnedOn()
-     * @see #handleNotifyScreenOn
-     */
-    private void notifyScreenOnLocked(IKeyguardShowCallback result) {
-        if (DEBUG) Log.d(TAG, "notifyScreenOnLocked");
-        Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_ON, result);
-        mHandler.sendMessage(msg);
-    }
-
-    /**
-     * Send message to keyguard telling it to show itself
-     * @see #handleShow()
-     */
-    private void showLocked(Bundle options) {
-        if (DEBUG) Log.d(TAG, "showLocked");
-        // ensure we stay awake until we are finished displaying the keyguard
-        mShowKeyguardWakeLock.acquire();
-        Message msg = mHandler.obtainMessage(SHOW, options);
-        mHandler.sendMessage(msg);
-    }
-
-    /**
-     * Send message to keyguard telling it to hide itself
-     * @see #handleHide()
-     */
-    private void hideLocked() {
-        if (DEBUG) Log.d(TAG, "hideLocked");
-        Message msg = mHandler.obtainMessage(HIDE);
-        mHandler.sendMessage(msg);
-    }
-
-    public boolean isSecure() {
-        return mLockPatternUtils.isSecure()
-            || KeyguardUpdateMonitor.getInstance(mContext).isSimPinSecure();
-    }
-
-    /**
-     * Update the newUserId. Call while holding WindowManagerService lock.
-     * NOTE: Should only be called by KeyguardViewMediator in response to the user id changing.
-     *
-     * @param newUserId The id of the incoming user.
-     */
-    public void setCurrentUser(int newUserId) {
-        mLockPatternUtils.setCurrentUser(newUserId);
-    }
-
-    private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (DELAYED_KEYGUARD_ACTION.equals(intent.getAction())) {
-                final int sequence = intent.getIntExtra("seq", 0);
-                if (DEBUG) Log.d(TAG, "received DELAYED_KEYGUARD_ACTION with seq = "
-                        + sequence + ", mDelayedShowingSequence = " + mDelayedShowingSequence);
-                synchronized (KeyguardViewMediator.this) {
-                    if (mDelayedShowingSequence == sequence) {
-                        // Don't play lockscreen SFX if the screen went off due to timeout.
-                        mSuppressNextLockSound = true;
-                        doKeyguardLocked(null);
-                    }
-                }
-            }
-        }
-    };
-
-    public void keyguardDone(boolean authenticated, boolean wakeup) {
-        if (DEBUG) Log.d(TAG, "keyguardDone(" + authenticated + ")");
-        EventLog.writeEvent(70000, 2);
-        synchronized (this) {
-            mKeyguardDonePending = false;
-        }
-        Message msg = mHandler.obtainMessage(KEYGUARD_DONE, authenticated ? 1 : 0, wakeup ? 1 : 0);
-        mHandler.sendMessage(msg);
-    }
-
-    /**
-     * This handler will be associated with the policy thread, which will also
-     * be the UI thread of the keyguard.  Since the apis of the policy, and therefore
-     * this class, can be called by other threads, any action that directly
-     * interacts with the keyguard ui should be posted to this handler, rather
-     * than called directly.
-     */
-    private Handler mHandler = new Handler(Looper.myLooper(), null, true /*async*/) {
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case SHOW:
-                    handleShow((Bundle) msg.obj);
-                    break;
-                case HIDE:
-                    handleHide();
-                    break;
-                case RESET:
-                    handleReset((Bundle) msg.obj);
-                    break;
-                case VERIFY_UNLOCK:
-                    handleVerifyUnlock();
-                    break;
-                case NOTIFY_SCREEN_OFF:
-                    handleNotifyScreenOff();
-                    break;
-                case NOTIFY_SCREEN_ON:
-                    handleNotifyScreenOn((IKeyguardShowCallback) msg.obj);
-                    break;
-                case KEYGUARD_DONE:
-                    handleKeyguardDone(msg.arg1 != 0, msg.arg2 != 0);
-                    break;
-                case KEYGUARD_DONE_DRAWING:
-                    handleKeyguardDoneDrawing();
-                    break;
-                case KEYGUARD_DONE_AUTHENTICATING:
-                    keyguardDone(true, true);
-                    break;
-                case SET_HIDDEN:
-                    handleSetHidden(msg.arg1 != 0);
-                    break;
-                case KEYGUARD_TIMEOUT:
-                    synchronized (KeyguardViewMediator.this) {
-                        doKeyguardLocked((Bundle) msg.obj);
-                    }
-                    break;
-                case SHOW_ASSISTANT:
-                    handleShowAssistant();
-                    break;
-                case DISPATCH_EVENT:
-                    handleDispatchEvent((MotionEvent) msg.obj);
-                    break;
-                case LAUNCH_CAMERA:
-                    handleLaunchCamera();
-                    break;
-                case DISMISS:
-                    handleDismiss();
-                    break;
-            }
-        }
-    };
-
-    /**
-     * @see #keyguardDone
-     * @see #KEYGUARD_DONE
-     */
-    private void handleKeyguardDone(boolean authenticated, boolean wakeup) {
-        if (DEBUG) Log.d(TAG, "handleKeyguardDone");
-
-        if (authenticated) {
-            mUpdateMonitor.clearFailedUnlockAttempts();
-        }
-
-        if (mExitSecureCallback != null) {
-            try {
-                mExitSecureCallback.onKeyguardExitResult(authenticated);
-            } catch (RemoteException e) {
-                Slog.w(TAG, "Failed to call onKeyguardExitResult(" + authenticated + ")", e);
-            }
-
-            mExitSecureCallback = null;
-
-            if (authenticated) {
-                // after succesfully exiting securely, no need to reshow
-                // the keyguard when they've released the lock
-                mExternallyEnabled = true;
-                mNeedToReshowWhenReenabled = false;
-            }
-        }
-
-        handleHide();
-        sendUserPresentBroadcast();
-    }
-
-    protected void handleLaunchCamera() {
-        mKeyguardViewManager.launchCamera();
-    }
-
-    protected void handleDispatchEvent(MotionEvent event) {
-        mKeyguardViewManager.dispatch(event);
-    }
-
-    private void sendUserPresentBroadcast() {
-        final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser());
-        mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser);
-    }
-
-    /**
-     * @see #keyguardDoneDrawing
-     * @see #KEYGUARD_DONE_DRAWING
-     */
-    private void handleKeyguardDoneDrawing() {
-        synchronized(this) {
-            if (DEBUG) Log.d(TAG, "handleKeyguardDoneDrawing");
-            if (mWaitingUntilKeyguardVisible) {
-                if (DEBUG) Log.d(TAG, "handleKeyguardDoneDrawing: notifying mWaitingUntilKeyguardVisible");
-                mWaitingUntilKeyguardVisible = false;
-                notifyAll();
-
-                // there will usually be two of these sent, one as a timeout, and one
-                // as a result of the callback, so remove any remaining messages from
-                // the queue
-                mHandler.removeMessages(KEYGUARD_DONE_DRAWING);
-            }
-        }
-    }
-
-    private void playSounds(boolean locked) {
-        // User feedback for keyguard.
-
-        if (mSuppressNextLockSound) {
-            mSuppressNextLockSound = false;
-            return;
-        }
-
-        final ContentResolver cr = mContext.getContentResolver();
-        if (Settings.System.getInt(cr, Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 1) == 1) {
-            final int whichSound = locked
-                ? mLockSoundId
-                : mUnlockSoundId;
-            mLockSounds.stop(mLockSoundStreamId);
-            // Init mAudioManager
-            if (mAudioManager == null) {
-                mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
-                if (mAudioManager == null) return;
-                mMasterStreamType = mAudioManager.getMasterStreamType();
-            }
-            // If the stream is muted, don't play the sound
-            if (mAudioManager.isStreamMute(mMasterStreamType)) return;
-
-            mLockSoundStreamId = mLockSounds.play(whichSound,
-                    mLockSoundVolume, mLockSoundVolume, 1/*priortiy*/, 0/*loop*/, 1.0f/*rate*/);
-        }
-    }
-
-    private void updateActivityLockScreenState() {
-        try {
-            ActivityManagerNative.getDefault().setLockScreenShown(mShowing && !mHidden);
-        } catch (RemoteException e) {
-        }
-    }
-
-    /**
-     * Handle message sent by {@link #showLocked}.
-     * @see #SHOW
-     */
-    private void handleShow(Bundle options) {
-        synchronized (KeyguardViewMediator.this) {
-            if (!mSystemReady) {
-                if (DEBUG) Log.d(TAG, "ignoring handleShow because system is not ready.");
-                return;
-            } else {
-                if (DEBUG) Log.d(TAG, "handleShow");
-            }
-
-            mKeyguardViewManager.show(options);
-            mShowing = true;
-            mKeyguardDonePending = false;
-            updateActivityLockScreenState();
-            adjustStatusBarLocked();
-            userActivity();
-            try {
-                ActivityManagerNative.getDefault().closeSystemDialogs("lock");
-            } catch (RemoteException e) {
-            }
-
-            // Do this at the end to not slow down display of the keyguard.
-            playSounds(true);
-
-            mShowKeyguardWakeLock.release();
-        }
-        mKeyguardDisplayManager.show();
-    }
-
-    /**
-     * Handle message sent by {@link #hideLocked()}
-     * @see #HIDE
-     */
-    private void handleHide() {
-        synchronized (KeyguardViewMediator.this) {
-            if (DEBUG) Log.d(TAG, "handleHide");
-
-            // only play "unlock" noises if not on a call (since the incall UI
-            // disables the keyguard)
-            if (TelephonyManager.EXTRA_STATE_IDLE.equals(mPhoneState)) {
-                playSounds(false);
-            }
-
-            mKeyguardViewManager.hide();
-            mShowing = false;
-            mKeyguardDonePending = false;
-            updateActivityLockScreenState();
-            adjustStatusBarLocked();
-        }
-    }
-
-    private void adjustStatusBarLocked() {
-        if (mStatusBarManager == null) {
-            mStatusBarManager = (StatusBarManager)
-                    mContext.getSystemService(Context.STATUS_BAR_SERVICE);
-        }
-        if (mStatusBarManager == null) {
-            Log.w(TAG, "Could not get status bar manager");
-        } else {
-            // Disable aspects of the system/status/navigation bars that must not be re-enabled by
-            // windows that appear on top, ever
-            int flags = StatusBarManager.DISABLE_NONE;
-            if (mShowing) {
-                // Permanently disable components not available when keyguard is enabled
-                // (like recents). Temporary enable/disable (e.g. the "back" button) are
-                // done in KeyguardHostView.
-                flags |= StatusBarManager.DISABLE_RECENT;
-                if (isSecure() || !ENABLE_INSECURE_STATUS_BAR_EXPAND) {
-                    // showing secure lockscreen; disable expanding.
-                    flags |= StatusBarManager.DISABLE_EXPAND;
-                }
-                if (isSecure()) {
-                    // showing secure lockscreen; disable ticker.
-                    flags |= StatusBarManager.DISABLE_NOTIFICATION_TICKER;
-                }
-                if (!isAssistantAvailable()) {
-                    flags |= StatusBarManager.DISABLE_SEARCH;
-                }
-            }
-
-            if (DEBUG) {
-                Log.d(TAG, "adjustStatusBarLocked: mShowing=" + mShowing + " mHidden=" + mHidden
-                        + " isSecure=" + isSecure() + " --> flags=0x" + Integer.toHexString(flags));
-            }
-
-            if (!(mContext instanceof Activity)) {
-                mStatusBarManager.disable(flags);
-            }
-        }
-    }
-
-    /**
-     * Handle message sent by {@link #resetStateLocked(Bundle)}
-     * @see #RESET
-     */
-    private void handleReset(Bundle options) {
-        if (options == null) {
-            options = new Bundle();
-        }
-        options.putBoolean(KeyguardViewManager.IS_SWITCHING_USER, mSwitchingUser);
-        synchronized (KeyguardViewMediator.this) {
-            if (DEBUG) Log.d(TAG, "handleReset");
-            mKeyguardViewManager.reset(options);
-        }
-    }
-
-    /**
-     * Handle message sent by {@link #verifyUnlock}
-     * @see #VERIFY_UNLOCK
-     */
-    private void handleVerifyUnlock() {
-        synchronized (KeyguardViewMediator.this) {
-            if (DEBUG) Log.d(TAG, "handleVerifyUnlock");
-            mKeyguardViewManager.verifyUnlock();
-            mShowing = true;
-            updateActivityLockScreenState();
-        }
-    }
-
-    /**
-     * Handle message sent by {@link #notifyScreenOffLocked()}
-     * @see #NOTIFY_SCREEN_OFF
-     */
-    private void handleNotifyScreenOff() {
-        synchronized (KeyguardViewMediator.this) {
-            if (DEBUG) Log.d(TAG, "handleNotifyScreenOff");
-            mKeyguardViewManager.onScreenTurnedOff();
-        }
-    }
-
-    /**
-     * Handle message sent by {@link #notifyScreenOnLocked()}
-     * @see #NOTIFY_SCREEN_ON
-     */
-    private void handleNotifyScreenOn(IKeyguardShowCallback callback) {
-        synchronized (KeyguardViewMediator.this) {
-            if (DEBUG) Log.d(TAG, "handleNotifyScreenOn");
-            mKeyguardViewManager.onScreenTurnedOn(callback);
-        }
-    }
-
-    public boolean isDismissable() {
-        return mKeyguardDonePending || !isSecure();
-    }
-
-    public void showAssistant() {
-        Message msg = mHandler.obtainMessage(SHOW_ASSISTANT);
-        mHandler.sendMessage(msg);
-    }
-
-    public void handleShowAssistant() {
-        mKeyguardViewManager.showAssistant();
-    }
-
-    private boolean isAssistantAvailable() {
-        return mSearchManager != null
-                && mSearchManager.getAssistIntent(mContext, false, UserHandle.USER_CURRENT) != null;
-    }
-
-    public static MultiUserAvatarCache getAvatarCache() {
-        return sMultiUserAvatarCache;
-    }
-
-    public void dispatch(MotionEvent event) {
-        Message msg = mHandler.obtainMessage(DISPATCH_EVENT, event);
-        mHandler.sendMessage(msg);
-    }
-
-    public void launchCamera() {
-        Message msg = mHandler.obtainMessage(LAUNCH_CAMERA);
-        mHandler.sendMessage(msg);
-    }
-
-    public void onBootCompleted() {
-        mUpdateMonitor.dispatchBootCompleted();
-    }
-}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java
index 169899f..e47edf3 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardViewStateManager.java
@@ -20,7 +20,6 @@
 import android.animation.AnimatorListenerAdapter;
 import android.os.Handler;
 import android.os.Looper;
-import android.util.Log;
 import android.view.View;
 
 public class KeyguardViewStateManager implements
@@ -106,11 +105,6 @@
     }
 
     public void showBouncer(boolean show) {
-        CharSequence what = mKeyguardHostView.getContext().getResources().getText(
-                show ? R.string.keyguard_accessibility_show_bouncer
-                        : R.string.keyguard_accessibility_hide_bouncer);
-        mKeyguardHostView.announceForAccessibility(what);
-        mKeyguardHostView.announceCurrentSecurityMethod();
         mChallengeLayout.showBouncer();
     }
 
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java
index 99f7757..6120127 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardWidgetPager.java
@@ -953,17 +953,13 @@
                     // to keep event dispatch happy.
                     mCameraEventInProgress = true;
                     userActivity();
-                    startPageWarp(cameraPage);
                     break;
                 case MotionEvent.ACTION_UP:
                 case MotionEvent.ACTION_CANCEL:
                     mCameraEventInProgress = false;
-                    endWarp = isWarping();
                     break;
             }
             dispatchTouchEvent(event);
-            // This has to happen after the event has been handled by the real widget pager
-            if (endWarp) stopPageWarp();
         }
         endCameraEvent();
     }
diff --git a/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java
index 4cfc9dc..340a4d5 100644
--- a/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java
+++ b/packages/Keyguard/src/com/android/keyguard/MultiPaneChallengeLayout.java
@@ -28,7 +28,6 @@
 import android.view.Gravity;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.View.MeasureSpec;
 import android.widget.LinearLayout;
 
 public class MultiPaneChallengeLayout extends ViewGroup implements ChallengeLayout {
diff --git a/packages/Keyguard/src/com/android/keyguard/MultiUserAvatarCache.java b/packages/Keyguard/src/com/android/keyguard/MultiUserAvatarCache.java
index 9930e72..7128211 100644
--- a/packages/Keyguard/src/com/android/keyguard/MultiUserAvatarCache.java
+++ b/packages/Keyguard/src/com/android/keyguard/MultiUserAvatarCache.java
@@ -22,12 +22,21 @@
 
 public class MultiUserAvatarCache {
 
+    private static MultiUserAvatarCache sInstance;
+
     private final HashMap<Integer, Drawable> mCache;
 
-    public MultiUserAvatarCache() {
+    private MultiUserAvatarCache() {
         mCache = new HashMap<Integer, Drawable>();
     }
 
+    public static MultiUserAvatarCache getInstance() {
+        if (sInstance == null) {
+            sInstance = new MultiUserAvatarCache();
+        }
+        return sInstance;
+    }
+
     public void clear(int userId) {
         mCache.remove(userId);
     }
diff --git a/packages/Keyguard/src/com/android/keyguard/PagedView.java b/packages/Keyguard/src/com/android/keyguard/PagedView.java
index 53c17a5..b42a085 100644
--- a/packages/Keyguard/src/com/android/keyguard/PagedView.java
+++ b/packages/Keyguard/src/com/android/keyguard/PagedView.java
@@ -36,15 +36,7 @@
 import android.util.AttributeSet;
 import android.util.DisplayMetrics;
 import android.util.Log;
-import android.view.InputDevice;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.VelocityTracker;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.view.ViewParent;
-import android.view.ViewPropertyAnimator;
+import android.view.*;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
@@ -64,7 +56,7 @@
 public abstract class PagedView extends ViewGroup implements ViewGroup.OnHierarchyChangeListener {
     private static final int WARP_SNAP_DURATION = 160;
     private static final String TAG = "WidgetPagedView";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
     private static final boolean DEBUG_WARP = false;
     protected static final int INVALID_PAGE = -1;
     private static final int WARP_PEEK_ANIMATION_DURATION = 150;
@@ -262,6 +254,7 @@
     // Page warping
     private int mPageSwapIndex = -1; // the page we swapped out if needed
     private int mPageWarpIndex = -1; // the page we intend to warp
+
     private boolean mWarpPageExposed;
     private ViewPropertyAnimator mWarpAnimation;
 
@@ -494,9 +487,6 @@
             mIsPageMoving = true;
             if (isWarping()) {
                 dispatchOnPageBeginWarp();
-                if (mPageSwapIndex != -1) {
-                    swapPages(mPageSwapIndex, mPageWarpIndex);
-                }
             }
             onPageBeginMoving();
         }
@@ -523,22 +513,13 @@
         if (mIsPageMoving) {
             mIsPageMoving = false;
             if (isWarping()) {
-                if (mPageSwapIndex != -1) {
-                    swapPages(mPageSwapIndex, mPageWarpIndex);
-                }
                 dispatchOnPageEndWarp();
-                resetPageWarp();
+                mWarpPageExposed = false;
             }
             onPageEndMoving();
         }
     }
 
-    private void resetPageWarp() {
-        // TODO: Verify pages have been reset correctly
-        mPageSwapIndex = -1;
-        mPageWarpIndex = -1;
-    }
-
     protected boolean isPageMoving() {
         return mIsPageMoving;
     }
@@ -794,11 +775,6 @@
             setHorizontalScrollBarEnabled(true);
             mFirstLayout = false;
         }
-        // If a page was swapped when we rebuilt the layout, swap it again now.
-        if (mPageSwapIndex  != -1) {
-            if (DEBUG_WARP) Log.v(TAG, "onLayout: swapping pages");
-            swapPages(mPageSwapIndex, mPageWarpIndex);
-        }
     }
 
     protected void screenScrolled(int screenCenter) {
@@ -1252,6 +1228,25 @@
         }
     }
 
+    private boolean isHorizontalCameraScroll(MotionEvent ev) {
+        // Disallow scrolling if we don't have a valid pointer index
+        final int pointerIndex = ev.findPointerIndex(mActivePointerId);
+        if (pointerIndex == -1) return false;
+
+        // If we're only allowing edge swipes, we break out early if the down event wasn't
+        // at the edge.
+        if (mOnlyAllowEdgeSwipes && !mDownEventOnEdge) return false;
+
+        final float x = ev.getX(pointerIndex);
+        final int xDiff = (int) Math.abs(x - mDownMotionX);
+
+        final int touchSlop = Math.round(TOUCH_SLOP_SCALE * mTouchSlop);
+        boolean xPaged = xDiff > mPagingTouchSlop;
+        boolean xMoved = xDiff > touchSlop;
+
+        return mIsCameraEvent && (mUsePagingTouchSlop ? xPaged : xMoved);
+    }
+
     /*
      * Determines if we should change the touch state to start scrolling after the
      * user moves their touch point too far.
@@ -1271,14 +1266,12 @@
         if (mOnlyAllowEdgeSwipes && !mDownEventOnEdge) return false;
 
         final int xDiff = (int) Math.abs(x - mLastMotionX);
-        final int yDiff = (int) Math.abs(y - mLastMotionY);
 
         final int touchSlop = Math.round(TOUCH_SLOP_SCALE * mTouchSlop);
         boolean xPaged = xDiff > mPagingTouchSlop;
         boolean xMoved = xDiff > touchSlop;
-        boolean yMoved = yDiff > touchSlop;
 
-        return (xMoved || xPaged || yMoved) && (mUsePagingTouchSlop ? xPaged : xMoved);
+        return mUsePagingTouchSlop ? xPaged : xMoved;
     }
 
     private void startScrolling(MotionEvent ev) {
@@ -1446,7 +1439,7 @@
                     mTouchX += deltaX;
                     mSmoothingTime = System.nanoTime() / NANOTIME_DIV;
                     if (isWarping()) {
-                        KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(mPageWarpIndex);
+                        KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(getPageWarpIndex());
                         v.setTranslationX(v.getTranslationX() - deltaX);
                     } else if (!mDeferScrollUpdate) {
                         scrollBy((int) deltaX, 0);
@@ -1565,8 +1558,13 @@
                     removeCallbacks(mSidePageHoverRunnable);
                     mSidePageHoverIndex = -1;
                 }
-            } else if (mIsCameraEvent || determineScrollingStart(ev)) {
+            } else if (determineScrollingStart(ev)) {
                 startScrolling(ev);
+            } else if (isHorizontalCameraScroll(ev)) {
+                startScrolling(ev);
+                // we need to cancel the camera animation
+                KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(getPageWarpIndex());
+                v.animate().cancel();
             }
             break;
 
@@ -1612,7 +1610,8 @@
                 } else if (((isSignificantMove && deltaX < 0 && !isFling) ||
                         (isFling && velocityX < 0)) &&
                         mCurrentPage < getChildCount() - 1) {
-                    finalPage = returnToOriginalPage ? mCurrentPage : mCurrentPage + 1;
+                    finalPage = returnToOriginalPage ? mCurrentPage :
+                            isWarping() ? getPageWarpIndex() : mCurrentPage + 1;
                     snapToPageWithVelocity(finalPage, velocityX);
                 } else {
                     snapToDestination();
@@ -1929,20 +1928,19 @@
     }
 
     protected void snapToPage(int whichPage, int delta, int duration, boolean immediate) {
-        if (mPageSwapIndex != -1 && whichPage == mPageSwapIndex) {
-            mNextPage = mPageWarpIndex; // jump to the warp page
+        if (isWarping() && whichPage == mCurrentPage+1) {
+            mNextPage = getPageWarpIndex(); // jump to the warp page
             if (DEBUG_WARP) Log.v(TAG, "snapToPage(" + whichPage + ") : reset mPageSwapIndex");
         } else {
             mNextPage = whichPage;
         }
 
-        if (isWarping()) {
+        if(mWarpPageExposed) {
             dispatchOnPageEndWarp();
-            notifyPageSwitching(whichPage);
-            resetPageWarp();
-        } else {
-            notifyPageSwitching(whichPage);
+            mWarpPageExposed = false;
         }
+        notifyPageSwitching(whichPage);
+
 
         View focusedChild = getFocusedChild();
         if (focusedChild != null && whichPage != mCurrentPage &&
@@ -1973,7 +1971,7 @@
     }
 
     protected boolean isWarping() {
-        return mPageWarpIndex != -1;
+        return mWarpPageExposed;
     }
 
     public void scrollLeft() {
@@ -2716,6 +2714,12 @@
                 animateWarpPageOffScreen("onScreen end", true);
             }
         }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            super.onAnimationCancel(animation);
+            mWarpAnimation = null;
+        }
     };
 
     AnimatorListenerAdapter mOffScreenAnimationListener = new AnimatorListenerAdapter() {
@@ -2723,6 +2727,14 @@
         public void onAnimationEnd(Animator animation) {
             mWarpAnimation = null;
             mWarpPageExposed = false;
+            KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(getPageWarpIndex());
+            v.setTranslationX(0.0f);
+        }
+
+        @Override
+        public void onAnimationCancel(Animator animation) {
+            super.onAnimationCancel(animation);
+            mWarpAnimation = null;
         }
     };
 
@@ -2731,7 +2743,7 @@
         if (abortAnimation) {
             // We're done with the animation and moving to a new page.  Let the scroller
             // take over the animation.
-            KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(mPageWarpIndex);
+            KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(getPageWarpIndex());
             v.animate().cancel();
             // Make the scroll amount match the current warp position.
             scrollBy(Math.round(-v.getTranslationX()), 0);
@@ -2747,28 +2759,43 @@
 
     private void animateWarpPageOnScreen(String reason) {
         if (DEBUG_WARP) Log.v(TAG, "animateWarpPageOnScreen(" + reason + ")");
-        if (isWarping() && !mWarpPageExposed) {
+        if (!mWarpPageExposed) {
             mWarpPageExposed = true;
             dispatchOnPageBeginWarp();
-            KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(mPageWarpIndex);
+            KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(getPageWarpIndex());
             if (DEBUG_WARP) Log.v(TAG, "moving page on screen: Tx=" + v.getTranslationX());
             DecelerateInterpolator interp = new DecelerateInterpolator(1.5f);
+            int totalOffset = getCurrentWarpOffset();
+            v.setTranslationX(totalOffset);
             mWarpAnimation = v.animate();
-            mWarpAnimation.translationX(mWarpPeekAmount)
+            mWarpAnimation.translationX(mWarpPeekAmount+totalOffset)
                     .setInterpolator(interp)
                     .setDuration(WARP_PEEK_ANIMATION_DURATION)
                     .setListener(mOnScreenAnimationListener);
         }
     }
 
+    private int getCurrentWarpOffset() {
+        if (mCurrentPage == getPageWarpIndex()) {
+            return 0;
+        }
+        View viewRight = getPageAt(mCurrentPage + 1);
+        View warpView = getPageAt(getPageWarpIndex());
+        if (viewRight != warpView && viewRight != null && warpView != null) {
+            return viewRight.getLeft() - warpView.getLeft();
+        }
+        return 0;
+    }
+
     private void animateWarpPageOffScreen(String reason, boolean animate) {
         if (DEBUG_WARP) Log.v(TAG, "animateWarpPageOffScreen(" + reason + " anim:" + animate + ")");
-        if (isWarping()) {
+        if (mWarpPageExposed) {
             dispatchOnPageEndWarp();
-            KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(mPageWarpIndex);
+            KeyguardWidgetFrame v = (KeyguardWidgetFrame) getPageAt(getPageWarpIndex());
             if (DEBUG_WARP) Log.v(TAG, "moving page off screen: Tx=" + v.getTranslationX());
             AccelerateInterpolator interp = new AccelerateInterpolator(1.5f);
-            v.animate().translationX(0.0f)
+            int totalOffset = getCurrentWarpOffset();
+            v.animate().translationX(totalOffset)
                     .setInterpolator(interp)
                     .setDuration(animate ? WARP_PEEK_ANIMATION_DURATION : 0)
                     .setListener(mOffScreenAnimationListener);
@@ -2799,7 +2826,7 @@
     }
 
     protected int getPageWarpIndex() {
-        return mPageWarpIndex;
+        return getPageCount() - 1;
     }
 
     public void stopPageWarp() {
diff --git a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
index 3d515ce..ab9286b 100644
--- a/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
+++ b/packages/Keyguard/src/com/android/keyguard/SlidingChallengeLayout.java
@@ -45,7 +45,7 @@
  */
 public class SlidingChallengeLayout extends ViewGroup implements ChallengeLayout {
     private static final String TAG = "SlidingChallengeLayout";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = KeyguardConstants.DEBUG;
 
     // The drag handle is measured in dp above & below the top edge of the
     // challenge view; these parameters change based on whether the challenge
diff --git a/packages/Keyguard/src/com/android/keyguard/ViewMediatorCallback.java b/packages/Keyguard/src/com/android/keyguard/ViewMediatorCallback.java
new file mode 100644
index 0000000..1f23785
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/ViewMediatorCallback.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2014 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.android.keyguard;
+
+/**
+ * The callback used by the keyguard view to tell the {@link KeyguardViewMediator}
+ * various things.
+ */
+public interface ViewMediatorCallback {
+    /**
+     * Reports user activity and requests that the screen stay on.
+     */
+    void userActivity();
+
+    /**
+     * Reports user activity and requests that the screen stay on for at least
+     * the specified amount of time.
+     * @param millis The amount of time in millis.  This value is currently ignored.
+     */
+    void userActivity(long millis);
+
+    /**
+     * Report that the keyguard is done.
+     * @param authenticated Whether the user securely got past the keyguard.
+     *   the only reason for this to be false is if the keyguard was instructed
+     *   to appear temporarily to verify the user is supposed to get past the
+     *   keyguard, and the user fails to do so.
+     */
+    void keyguardDone(boolean authenticated);
+
+    /**
+     * Report that the keyguard is done drawing.
+     */
+    void keyguardDoneDrawing();
+
+    /**
+     * Tell ViewMediator that the current view needs IME input
+     * @param needsInput
+     */
+    void setNeedsInput(boolean needsInput);
+
+    /**
+     * Tell view mediator that the keyguard view's desired user activity timeout
+     * has changed and needs to be reapplied to the window.
+     */
+    void onUserActivityTimeoutChanged();
+
+    /**
+     * Report that the keyguard is dismissable, pending the next keyguardDone call.
+     */
+    void keyguardDonePending();
+
+    /**
+     * Report when keyguard is actually gone
+     */
+    void keyguardGone();
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/KeyguardAnalytics.java b/packages/Keyguard/src/com/android/keyguard/analytics/KeyguardAnalytics.java
new file mode 100644
index 0000000..20af2f1
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/KeyguardAnalytics.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2014 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.android.keyguard.analytics;
+
+import com.google.protobuf.nano.CodedOutputByteBufferNano;
+import com.google.protobuf.nano.MessageNano;
+
+import android.content.Context;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.os.AsyncTask;
+import android.util.Log;
+import android.view.MotionEvent;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+/**
+ * Tracks sessions, touch and sensor events in Keyguard.
+ *
+ * A session starts when the user is presented with the Keyguard and ends when the Keyguard is no
+ * longer visible to the user.
+ */
+public class KeyguardAnalytics implements SensorEventListener {
+
+    private static final boolean DEBUG = false;
+    private static final String TAG = "KeyguardAnalytics";
+    private static final long TIMEOUT_MILLIS = 11000; // 11 seconds.
+
+    private static final int[] SENSORS = new int[] {
+            Sensor.TYPE_ACCELEROMETER,
+            Sensor.TYPE_GYROSCOPE,
+            Sensor.TYPE_PROXIMITY,
+            Sensor.TYPE_LIGHT,
+            Sensor.TYPE_ROTATION_VECTOR,
+    };
+
+    private Session mCurrentSession = null;
+    // Err on the side of caution, so logging is not started after a crash even tough the screen
+    // is off.
+    private boolean mScreenOn = false;
+    private boolean mHidden = false;
+
+    private final SensorManager mSensorManager;
+    private final SessionTypeAdapter mSessionTypeAdapter;
+    private final File mAnalyticsFile;
+
+    public KeyguardAnalytics(Context context, SessionTypeAdapter sessionTypeAdapter,
+            File analyticsFile) {
+        mSensorManager = (SensorManager) context.getSystemService(Context.SENSOR_SERVICE);
+        mSessionTypeAdapter = sessionTypeAdapter;
+        mAnalyticsFile = analyticsFile;
+    }
+
+    public Callback getCallback() {
+        return mCallback;
+    }
+
+    public interface Callback {
+        public void onShow();
+        public void onHide();
+        public void onScreenOn();
+        public void onScreenOff();
+        public boolean onTouchEvent(MotionEvent ev, int width, int height);
+        public void onSetOccluded(boolean hidden);
+    }
+
+    public interface SessionTypeAdapter {
+        public int getSessionType();
+    }
+
+    private void sessionEntrypoint() {
+        if (mCurrentSession == null && mScreenOn && !mHidden) {
+            onSessionStart();
+        }
+    }
+
+    private void sessionExitpoint(int result) {
+        if (mCurrentSession != null) {
+            onSessionEnd(result);
+        }
+    }
+
+    private void onSessionStart() {
+        int type = mSessionTypeAdapter.getSessionType();
+        mCurrentSession = new Session(System.currentTimeMillis(), System.nanoTime(), type);
+        if (type == Session.TYPE_KEYGUARD_SECURE) {
+            mCurrentSession.setRedactTouchEvents();
+        }
+        for (int sensorType : SENSORS) {
+            Sensor s = mSensorManager.getDefaultSensor(sensorType);
+            if (s != null) {
+                mSensorManager.registerListener(this, s, SensorManager.SENSOR_DELAY_GAME);
+            }
+        }
+        if (DEBUG) {
+            Log.d(TAG, "onSessionStart()");
+        }
+    }
+
+    private void onSessionEnd(int result) {
+        if (DEBUG) {
+            Log.d(TAG, String.format("onSessionEnd(success=%d)", result));
+        }
+        mSensorManager.unregisterListener(this);
+
+        Session session = mCurrentSession;
+        mCurrentSession = null;
+
+        session.end(System.currentTimeMillis(), result);
+        queueSession(session);
+    }
+
+    private void queueSession(final Session currentSession) {
+        if (DEBUG) {
+            Log.i(TAG, "Saving session.");
+        }
+        new AsyncTask<Void, Void, Void>() {
+            @Override
+            protected Void doInBackground(Void... params) {
+                try {
+                    byte[] b = writeDelimitedProto(currentSession.toProto());
+                    OutputStream os = new FileOutputStream(mAnalyticsFile, true /* append */);
+                    if (DEBUG) {
+                        Log.d(TAG, String.format("Serialized size: %d kB.", b.length / 1024));
+                    }
+                    try {
+                        os.write(b);
+                        os.flush();
+                    } finally {
+                        try {
+                            os.close();
+                        } catch (IOException e) {
+                            Log.e(TAG, "Exception while closing file", e);
+                        }
+                    }
+                } catch (IOException e) {
+                    Log.e(TAG, "Exception while writing file", e);
+                }
+                return null;
+            }
+
+            private byte[] writeDelimitedProto(MessageNano proto)
+                    throws IOException {
+                byte[] result = new byte[CodedOutputByteBufferNano.computeMessageSizeNoTag(proto)];
+                CodedOutputByteBufferNano ob = CodedOutputByteBufferNano.newInstance(result);
+                ob.writeMessageNoTag(proto);
+                ob.checkNoSpaceLeft();
+                return result;
+            }
+        }.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR);
+    }
+
+    @Override
+    public synchronized void onSensorChanged(SensorEvent event) {
+        if (false) {
+            Log.v(TAG, String.format(
+                    "onSensorChanged(name=%s, values[0]=%f)",
+                    event.sensor.getName(), event.values[0]));
+        }
+        if (mCurrentSession != null) {
+            mCurrentSession.addSensorEvent(event, System.nanoTime());
+            enforceTimeout();
+        }
+    }
+
+    private void enforceTimeout() {
+        if (System.currentTimeMillis() - mCurrentSession.getStartTimestampMillis()
+                > TIMEOUT_MILLIS) {
+            onSessionEnd(Session.RESULT_UNKNOWN);
+            if (DEBUG) {
+                Log.i(TAG, "Analytics timed out.");
+            }
+        }
+    }
+
+    @Override
+    public void onAccuracyChanged(Sensor sensor, int accuracy) {
+    }
+
+    private final Callback mCallback = new Callback() {
+        @Override
+        public void onShow() {
+            if (DEBUG) {
+                Log.d(TAG, "onShow()");
+            }
+            synchronized (KeyguardAnalytics.this) {
+                sessionEntrypoint();
+            }
+        }
+
+        @Override
+        public void onHide() {
+            if (DEBUG) {
+                Log.d(TAG, "onHide()");
+            }
+            synchronized (KeyguardAnalytics.this) {
+                sessionExitpoint(Session.RESULT_SUCCESS);
+            }
+        }
+
+        @Override
+        public void onScreenOn() {
+            if (DEBUG) {
+                Log.d(TAG, "onScreenOn()");
+            }
+            synchronized (KeyguardAnalytics.this) {
+                mScreenOn = true;
+                sessionEntrypoint();
+            }
+        }
+
+        @Override
+        public void onScreenOff() {
+            if (DEBUG) {
+                Log.d(TAG, "onScreenOff()");
+            }
+            synchronized (KeyguardAnalytics.this) {
+                mScreenOn = false;
+                sessionExitpoint(Session.RESULT_FAILURE);
+            }
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent ev, int width, int height) {
+            if (DEBUG) {
+                Log.v(TAG, "onTouchEvent(ev.action="
+                        + MotionEvent.actionToString(ev.getAction()) + ")");
+            }
+            synchronized (KeyguardAnalytics.this) {
+                if (mCurrentSession != null) {
+                    mCurrentSession.addMotionEvent(ev);
+                    mCurrentSession.setTouchArea(width, height);
+                    enforceTimeout();
+                }
+            }
+            return true;
+        }
+
+        @Override
+        public void onSetOccluded(boolean hidden) {
+            synchronized (KeyguardAnalytics.this) {
+                if (hidden != mHidden) {
+                    if (DEBUG) {
+                        Log.d(TAG, "onSetOccluded(" + hidden + ")");
+                    }
+                    mHidden = hidden;
+                    if (hidden) {
+                        // Could have gone to camera on purpose / by falsing or an app could have
+                        // launched on top of the lockscreen.
+                        sessionExitpoint(Session.RESULT_UNKNOWN);
+                    } else {
+                        sessionEntrypoint();
+                    }
+                }
+            }
+        }
+    };
+
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/PointerTracker.java b/packages/Keyguard/src/com/android/keyguard/analytics/PointerTracker.java
new file mode 100644
index 0000000..e68f751
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/PointerTracker.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2014 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.android.keyguard.analytics;
+
+import android.graphics.RectF;
+import android.util.FloatMath;
+import android.util.SparseArray;
+import android.view.MotionEvent;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.android.keyguard.analytics.KeyguardAnalyticsProtos.Session.TouchEvent.BoundingBox;
+
+/**
+ * Takes motion events and tracks the length and bounding box of each pointer gesture as well as
+ * the bounding box of the whole gesture.
+ */
+public class PointerTracker {
+    private SparseArray<Pointer> mPointerInfoMap = new SparseArray<Pointer>();
+    private RectF mTotalBoundingBox = new RectF();
+
+    public void addMotionEvent(MotionEvent ev) {
+        if (ev.getActionMasked() == MotionEvent.ACTION_DOWN) {
+            float x = ev.getX();
+            float y = ev.getY();
+            mTotalBoundingBox.set(x, y, x, y);
+        }
+        for (int i = 0; i < ev.getPointerCount(); i++) {
+            int id = ev.getPointerId(i);
+            Pointer pointer = getPointer(id);
+            float x = ev.getX(i);
+            float y = ev.getY(i);
+            boolean down = ev.getActionMasked() == MotionEvent.ACTION_DOWN
+                    || (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN
+                            && ev.getActionIndex() == i);
+            pointer.addPoint(x, y, down);
+            mTotalBoundingBox.union(x, y);
+        }
+    }
+
+    public float getPointerLength(int id) {
+        return getPointer(id).length;
+    }
+
+    public BoundingBox getBoundingBox() {
+        return boundingBoxFromRect(mTotalBoundingBox);
+    }
+
+    public BoundingBox getPointerBoundingBox(int id) {
+        return boundingBoxFromRect(getPointer(id).boundingBox);
+    }
+
+    private BoundingBox boundingBoxFromRect(RectF f) {
+        BoundingBox bb = new BoundingBox();
+        bb.setHeight(f.height());
+        bb.setWidth(f.width());
+        return bb;
+    }
+
+    private Pointer getPointer(int id) {
+        Pointer p = mPointerInfoMap.get(id);
+        if (p == null) {
+            p = new Pointer();
+            mPointerInfoMap.put(id, p);
+        }
+        return p;
+    }
+
+    private static class Pointer {
+        public float length;
+        public final RectF boundingBox = new RectF();
+
+        private float mLastX;
+        private float mLastY;
+
+        public void addPoint(float x, float y, boolean down) {
+            float deltaX;
+            float deltaY;
+            if (down) {
+                boundingBox.set(x, y, x, y);
+                length = 0f;
+                deltaX = 0;
+                deltaY = 0;
+            } else {
+                deltaX = x - mLastX;
+                deltaY = y - mLastY;
+            }
+            mLastX = x;
+            mLastY = y;
+            length += FloatMath.sqrt(deltaX * deltaX + deltaY * deltaY);
+            boundingBox.union(x, y);
+        }
+    }
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/Session.java b/packages/Keyguard/src/com/android/keyguard/analytics/Session.java
new file mode 100644
index 0000000..05f9165
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/Session.java
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2014 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.android.keyguard.analytics;
+
+import android.os.Build;
+import android.util.Slog;
+import android.view.MotionEvent;
+
+import java.util.ArrayList;
+
+import static com.android.keyguard.analytics.KeyguardAnalyticsProtos.Session.SensorEvent;
+import static com.android.keyguard.analytics.KeyguardAnalyticsProtos.Session.TouchEvent;
+
+/**
+ * Records data about one keyguard session.
+ *
+ * The recorded data contains start and end of the session, whether it unlocked the device
+ * successfully, sensor data and touch data.
+ *
+ * If the keyguard is secure, the recorded touch data will correlate or contain the user pattern or
+ * PIN. If this is not desired, the touch coordinates can be redacted before serialization.
+ */
+public class Session {
+
+    private static final String TAG = "KeyguardAnalytics";
+    private static final boolean DEBUG = false;
+
+    /**
+     * The user has failed to unlock the device in this session.
+     */
+    public static final int RESULT_FAILURE = KeyguardAnalyticsProtos.Session.FAILURE;
+    /**
+     * The user has succeeded in unlocking the device in this session.
+     */
+    public static final int RESULT_SUCCESS = KeyguardAnalyticsProtos.Session.SUCCESS;
+
+    /**
+     * It is unknown how the session with the keyguard ended.
+     */
+    public static final int RESULT_UNKNOWN = KeyguardAnalyticsProtos.Session.UNKNOWN;
+
+    /**
+     * This session took place on an insecure keyguard.
+     */
+    public static final int TYPE_KEYGUARD_INSECURE
+            = KeyguardAnalyticsProtos.Session.KEYGUARD_INSECURE;
+
+    /**
+     * This session took place on an secure keyguard.
+     */
+    public static final int TYPE_KEYGUARD_SECURE
+            = KeyguardAnalyticsProtos.Session.KEYGUARD_SECURE;
+
+    /**
+     * This session took place during a fake wake up of the device.
+     */
+    public static final int TYPE_RANDOM_WAKEUP = KeyguardAnalyticsProtos.Session.RANDOM_WAKEUP;
+
+
+    private final PointerTracker mPointerTracker = new PointerTracker();
+
+    private final long mStartTimestampMillis;
+    private final long mStartSystemTimeNanos;
+    private final int mType;
+
+    private boolean mRedactTouchEvents;
+    private ArrayList<TouchEvent> mMotionEvents = new ArrayList<TouchEvent>(200);
+    private ArrayList<SensorEvent> mSensorEvents = new ArrayList<SensorEvent>(600);
+    private int mTouchAreaHeight;
+    private int mTouchAreaWidth;
+
+    private long mEndTimestampMillis;
+    private int mResult;
+    private boolean mEnded;
+
+    public Session(long startTimestampMillis, long startSystemTimeNanos, int type) {
+        mStartTimestampMillis = startTimestampMillis;
+        mStartSystemTimeNanos = startSystemTimeNanos;
+        mType = type;
+    }
+
+    public void end(long endTimestampMillis, int result) {
+        mEnded = true;
+        mEndTimestampMillis = endTimestampMillis;
+        mResult = result;
+    }
+
+    public void addMotionEvent(MotionEvent motionEvent) {
+        if (mEnded) {
+            return;
+        }
+        mPointerTracker.addMotionEvent(motionEvent);
+        mMotionEvents.add(protoFromMotionEvent(motionEvent));
+    }
+
+    public void addSensorEvent(android.hardware.SensorEvent eventOrig, long systemTimeNanos) {
+        if (mEnded) {
+            return;
+        }
+        SensorEvent event = protoFromSensorEvent(eventOrig, systemTimeNanos);
+        mSensorEvents.add(event);
+        if (DEBUG) {
+            Slog.v(TAG, String.format("addSensorEvent(name=%s, values[0]=%f",
+                    event.getType(), event.values[0]));
+        }
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder sb = new StringBuilder("Session{");
+        sb.append("mType=").append(mType);
+        sb.append(", mStartTimestampMillis=").append(mStartTimestampMillis);
+        sb.append(", mStartSystemTimeNanos=").append(mStartSystemTimeNanos);
+        sb.append(", mEndTimestampMillis=").append(mEndTimestampMillis);
+        sb.append(", mResult=").append(mResult);
+        sb.append(", mRedactTouchEvents=").append(mRedactTouchEvents);
+        sb.append(", mTouchAreaHeight=").append(mTouchAreaHeight);
+        sb.append(", mTouchAreaWidth=").append(mTouchAreaWidth);
+        sb.append(", mMotionEvents=[size=").append(mMotionEvents.size()).append("]");
+        sb.append(", mSensorEvents=[size=").append(mSensorEvents.size()).append("]");
+        sb.append('}');
+        return sb.toString();
+    }
+
+    public KeyguardAnalyticsProtos.Session toProto() {
+        KeyguardAnalyticsProtos.Session proto = new KeyguardAnalyticsProtos.Session();
+        proto.setStartTimestampMillis(mStartTimestampMillis);
+        proto.setDurationMillis(mEndTimestampMillis - mStartTimestampMillis);
+        proto.setBuild(Build.FINGERPRINT);
+        proto.setResult(mResult);
+        proto.sensorEvents = mSensorEvents.toArray(proto.sensorEvents);
+        proto.touchEvents = mMotionEvents.toArray(proto.touchEvents);
+        proto.setTouchAreaWidth(mTouchAreaWidth);
+        proto.setTouchAreaHeight(mTouchAreaHeight);
+        proto.setType(mType);
+        if (mRedactTouchEvents) {
+            redactTouchEvents(proto.touchEvents);
+        }
+        return proto;
+    }
+
+    private void redactTouchEvents(TouchEvent[] touchEvents) {
+        for (int i = 0; i < touchEvents.length; i++) {
+            TouchEvent t = touchEvents[i];
+            for (int j = 0; j < t.pointers.length; j++) {
+                TouchEvent.Pointer p = t.pointers[j];
+                p.clearX();
+                p.clearY();
+            }
+            t.setRedacted(true);
+        }
+    }
+
+    private SensorEvent protoFromSensorEvent(android.hardware.SensorEvent ev, long sysTimeNanos) {
+        SensorEvent proto = new SensorEvent();
+        proto.setType(ev.sensor.getType());
+        proto.setTimeOffsetNanos(sysTimeNanos - mStartSystemTimeNanos);
+        proto.setTimestamp(ev.timestamp);
+        proto.values = ev.values.clone();
+        return proto;
+    }
+
+    private TouchEvent protoFromMotionEvent(MotionEvent ev) {
+        int count = ev.getPointerCount();
+        TouchEvent proto = new TouchEvent();
+        proto.setTimeOffsetNanos(ev.getEventTimeNano() - mStartSystemTimeNanos);
+        proto.setAction(ev.getActionMasked());
+        proto.setActionIndex(ev.getActionIndex());
+        proto.pointers = new TouchEvent.Pointer[count];
+        for (int i = 0; i < count; i++) {
+            TouchEvent.Pointer p = new TouchEvent.Pointer();
+            p.setX(ev.getX(i));
+            p.setY(ev.getY(i));
+            p.setSize(ev.getSize(i));
+            p.setPressure(ev.getPressure(i));
+            p.setId(ev.getPointerId(i));
+            proto.pointers[i] = p;
+            if ((ev.getActionMasked() == MotionEvent.ACTION_POINTER_UP && ev.getActionIndex() == i)
+                    || ev.getActionMasked() == MotionEvent.ACTION_UP) {
+                p.boundingBox = mPointerTracker.getPointerBoundingBox(p.getId());
+                p.setLength(mPointerTracker.getPointerLength(p.getId()));
+            }
+        }
+        if (ev.getActionMasked() == MotionEvent.ACTION_UP) {
+            proto.boundingBox = mPointerTracker.getBoundingBox();
+        }
+        return proto;
+    }
+
+    /**
+     * Discards the x / y coordinates of the touch events on serialization. Retained are the
+     * size of the individual and overall bounding boxes and the length of each pointer's gesture.
+     */
+    public void setRedactTouchEvents() {
+        mRedactTouchEvents = true;
+    }
+
+    public void setTouchArea(int width, int height) {
+        mTouchAreaWidth = width;
+        mTouchAreaHeight = height;
+    }
+
+    public long getStartTimestampMillis() {
+        return mStartTimestampMillis;
+    }
+}
diff --git a/packages/Keyguard/src/com/android/keyguard/analytics/keyguard_analytics.proto b/packages/Keyguard/src/com/android/keyguard/analytics/keyguard_analytics.proto
new file mode 100644
index 0000000..68b1590
--- /dev/null
+++ b/packages/Keyguard/src/com/android/keyguard/analytics/keyguard_analytics.proto
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2014 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
+ */
+
+syntax = "proto2";
+
+package keyguard;
+
+option java_package = "com.android.keyguard.analytics";
+option java_outer_classname = "KeyguardAnalyticsProtos";
+
+message Session {
+    message TouchEvent {
+        message BoundingBox {
+            optional float width = 1;
+            optional float height = 2;
+        }
+
+        enum Action {
+            // Keep in sync with MotionEvent.
+            DOWN = 0;
+            UP = 1;
+            MOVE = 2;
+            CANCEL = 3;
+            OUTSIDE = 4;
+            POINTER_DOWN = 5;
+            POINTER_UP = 6;
+        }
+
+        message Pointer {
+            optional float x = 1;
+            optional float y = 2;
+            optional float size = 3;
+            optional float pressure = 4;
+            optional int32 id = 5;
+            optional float length = 6;
+            // Bounding box of the pointer. Only set on UP or POINTER_UP event of this pointer.
+            optional BoundingBox boundingBox = 7;
+        }
+
+        optional uint64 timeOffsetNanos = 1;
+        optional Action action = 2;
+        optional int32 actionIndex = 3;
+        repeated Pointer pointers = 4;
+        /* If true, the the x / y coordinates of the touch events were redacted. Retained are the
+           size of the individual and overall bounding boxes and the length of each pointer's
+           gesture. */
+        optional bool redacted = 5;
+        // Bounding box of the whole gesture. Only set on UP event.
+        optional BoundingBox boundingBox = 6;
+    }
+
+    message SensorEvent {
+        enum Type {
+            ACCELEROMETER = 1;
+            GYROSCOPE = 4;
+            LIGHT = 5;
+            PROXIMITY = 8;
+            ROTATION_VECTOR = 11;
+        }
+
+        optional Type type = 1;
+        optional uint64 timeOffsetNanos = 2;
+        repeated float values = 3;
+        optional uint64 timestamp = 4;
+    }
+
+    enum Result {
+        FAILURE = 0;
+        SUCCESS = 1;
+        UNKNOWN = 2;
+    }
+
+    enum Type {
+        KEYGUARD_INSECURE = 0;
+        KEYGUARD_SECURE = 1;
+        RANDOM_WAKEUP = 2;
+    }
+
+    optional uint64 startTimestampMillis = 1;
+    optional uint64 durationMillis = 2;
+    optional string build = 3;
+    optional Result result = 4;
+    repeated TouchEvent touchEvents = 5;
+    repeated SensorEvent sensorEvents = 6;
+
+    optional int32 touchAreaWidth = 9;
+    optional int32 touchAreaHeight = 10;
+    optional Type type = 11;
+}
diff --git a/packages/Keyguard/test/AndroidManifest.xml b/packages/Keyguard/test/AndroidManifest.xml
index b801e4b..1638127 100644
--- a/packages/Keyguard/test/AndroidManifest.xml
+++ b/packages/Keyguard/test/AndroidManifest.xml
@@ -23,7 +23,7 @@
     <application android:label="@string/app_name" android:icon="@drawable/app_icon">
         <activity android:name=".KeyguardTestActivity"
                 android:label="@string/app_name"
-                android:theme="@android:style/Theme.Holo">
+                android:theme="@android:style/Theme.DeviceDefault.Light">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.LAUNCHER" />
diff --git a/packages/Keyguard/test/SampleTrustAgent/Android.mk b/packages/Keyguard/test/SampleTrustAgent/Android.mk
new file mode 100644
index 0000000..7551fdf
--- /dev/null
+++ b/packages/Keyguard/test/SampleTrustAgent/Android.mk
@@ -0,0 +1,33 @@
+# Copyright (C) 2014 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := SampleTrustAgent
+
+# Remove these to verify permission checks are working correctly
+#LOCAL_CERTIFICATE := platform
+#LOCAL_PRIVILEGED_MODULE := true
+
+LOCAL_MODULE_TAGS := tests
+
+# LOCAL_PROGUARD_FLAG_FILES := proguard.flags
+
+LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4
+
+include $(BUILD_PACKAGE)
diff --git a/packages/Keyguard/test/SampleTrustAgent/AndroidManifest.xml b/packages/Keyguard/test/SampleTrustAgent/AndroidManifest.xml
new file mode 100644
index 0000000..1511911
--- /dev/null
+++ b/packages/Keyguard/test/SampleTrustAgent/AndroidManifest.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.trustagent.test">
+    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17"/>
+    <uses-permission android:name="android.permission.CONTROL_KEYGUARD" />
+    <application android:label="@string/app_name">
+      <service
+          android:name=".SampleTrustAgent"
+          android:label="@string/app_name"
+          android:exported="true">
+        <intent-filter>
+          <action android:name="android.service.trust.TrustAgentService" />
+          <category android:name="android.intent.category.DEFAULT" />
+        </intent-filter>
+        <meta-data android:name="android.service.trust.trustagent"
+                   android:resource="@xml/sample_trust_agent"/>
+      </service>
+
+      <activity
+          android:name=".SampleTrustAgentSettings"
+          android:label="@string/app_name"
+          android:exported="true"
+          android:launchMode="singleInstance" >
+      </activity>
+    </application>
+</manifest>
diff --git a/packages/Keyguard/test/SampleTrustAgent/res/layout/sample_trust_agent_settings.xml b/packages/Keyguard/test/SampleTrustAgent/res/layout/sample_trust_agent_settings.xml
new file mode 100644
index 0000000..01b107b
--- /dev/null
+++ b/packages/Keyguard/test/SampleTrustAgent/res/layout/sample_trust_agent_settings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+    <Button android:id="@+id/enable_trust"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="Grant trust for 30 seconds" />
+    <Button android:id="@+id/revoke_trust"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="Revoke trust" />
+    <CheckBox android:id="@+id/report_unlock_attempts"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="Report unlock attempts" />
+</LinearLayout>
\ No newline at end of file
diff --git a/packages/Keyguard/test/SampleTrustAgent/res/values/strings.xml b/packages/Keyguard/test/SampleTrustAgent/res/values/strings.xml
new file mode 100644
index 0000000..0c6b502
--- /dev/null
+++ b/packages/Keyguard/test/SampleTrustAgent/res/values/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<resources>
+    <string name="app_name">Sample Trust Agent</string>
+</resources>
\ No newline at end of file
diff --git a/packages/Keyguard/test/SampleTrustAgent/res/xml/sample_trust_agent.xml b/packages/Keyguard/test/SampleTrustAgent/res/xml/sample_trust_agent.xml
new file mode 100644
index 0000000..b48e011
--- /dev/null
+++ b/packages/Keyguard/test/SampleTrustAgent/res/xml/sample_trust_agent.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+<trust_agent xmlns:android="http://schemas.android.com/apk/res/android"
+        android:settingsActivity=".SampleTrustAgentSettings" />
diff --git a/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgent.java b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgent.java
new file mode 100644
index 0000000..25406d6
--- /dev/null
+++ b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgent.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2014 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.android.trustagent.test;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.service.trust.TrustAgentService;
+import android.support.v4.content.LocalBroadcastManager;
+import android.widget.Toast;
+
+public class SampleTrustAgent extends TrustAgentService {
+
+    LocalBroadcastManager mLocalBroadcastManager;
+
+    private static final String ACTION_ENABLE_TRUST = "action.sample_trust_agent.enable_trust";
+    private static final String ACTION_REVOKE_TRUST = "action.sample_trust_agent.revoke_trust";
+
+    private static final String EXTRA_MESSAGE = "extra.message";
+    private static final String EXTRA_DURATION = "extra.duration";
+    private static final String EXTRA_EXTRA = "extra.extra";
+
+    private static final String PREFERENCE_REPORT_UNLOCK_ATTEMPTS
+            = "preference.report_unlock_attempts";
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(ACTION_ENABLE_TRUST);
+        filter.addAction(ACTION_REVOKE_TRUST);
+        mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
+        mLocalBroadcastManager.registerReceiver(mReceiver, filter);
+    }
+
+    @Override
+    protected void onUnlockAttempt(boolean successful) {
+        if (getReportUnlockAttempts(this)) {
+            Toast.makeText(this, "onUnlockAttempt(successful=" + successful + ")",
+                    Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        mLocalBroadcastManager.unregisterReceiver(mReceiver);
+    }
+
+    private BroadcastReceiver mReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            if (ACTION_ENABLE_TRUST.equals(action)) {
+                enableTrust(intent.getStringExtra(EXTRA_MESSAGE),
+                        intent.getLongExtra(EXTRA_DURATION, 0),
+                        false /* initiatedByUser */);
+            } else if (ACTION_REVOKE_TRUST.equals(action)) {
+                revokeTrust();
+            }
+        }
+    };
+
+    public static void sendEnableTrust(Context context,
+            String message, long durationMs, Bundle extra) {
+        Intent intent = new Intent(ACTION_ENABLE_TRUST);
+        intent.putExtra(EXTRA_MESSAGE, message);
+        intent.putExtra(EXTRA_DURATION, durationMs);
+        intent.putExtra(EXTRA_EXTRA, extra);
+        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+    }
+
+    public static void sendRevokeTrust(Context context) {
+        Intent intent = new Intent(ACTION_REVOKE_TRUST);
+        LocalBroadcastManager.getInstance(context).sendBroadcast(intent);
+    }
+
+    public static void setReportUnlockAttempts(Context context, boolean enabled) {
+        SharedPreferences sharedPreferences = PreferenceManager
+                .getDefaultSharedPreferences(context);
+        sharedPreferences.edit().putBoolean(PREFERENCE_REPORT_UNLOCK_ATTEMPTS, enabled).apply();
+    }
+
+    public static boolean getReportUnlockAttempts(Context context) {
+        SharedPreferences sharedPreferences = PreferenceManager
+                .getDefaultSharedPreferences(context);
+        return sharedPreferences.getBoolean(PREFERENCE_REPORT_UNLOCK_ATTEMPTS, false);
+    }
+}
diff --git a/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgentSettings.java b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgentSettings.java
new file mode 100644
index 0000000..0a6f675
--- /dev/null
+++ b/packages/Keyguard/test/SampleTrustAgent/src/com/android/trustagent/test/SampleTrustAgentSettings.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2014 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.android.trustagent.test;
+
+import android.annotation.Nullable;
+import android.app.Activity;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.view.View;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
+
+public class SampleTrustAgentSettings extends Activity implements View.OnClickListener,
+        CompoundButton.OnCheckedChangeListener {
+
+    private static final int TRUST_DURATION_MS = 30 * 1000;
+
+    private CheckBox mReportUnlockAttempts;
+
+    @Override
+    protected void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.sample_trust_agent_settings);
+
+        findViewById(R.id.enable_trust).setOnClickListener(this);
+        findViewById(R.id.revoke_trust).setOnClickListener(this);
+
+        mReportUnlockAttempts = (CheckBox) findViewById(R.id.report_unlock_attempts);
+        mReportUnlockAttempts.setOnCheckedChangeListener(this);
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        mReportUnlockAttempts.setChecked(SampleTrustAgent.getReportUnlockAttempts(this));
+    }
+
+    @Override
+    public void onClick(View v) {
+        int id = v.getId();
+        if (id == R.id.enable_trust) {
+            SampleTrustAgent.sendEnableTrust(this, "SampleTrustAgent", TRUST_DURATION_MS,
+                    null /* extra */);
+        } else if (id == R.id.revoke_trust) {
+            SampleTrustAgent.sendRevokeTrust(this);
+        }
+    }
+
+    @Override
+    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+        if (buttonView.getId() == R.id.report_unlock_attempts) {
+            SampleTrustAgent.setReportUnlockAttempts(this, isChecked);
+        }
+    }
+}
diff --git a/packages/PrintSpooler/res/layout/select_printer_activity.xml b/packages/PrintSpooler/res/layout/select_printer_activity.xml
index 6fc77df..4488b6a 100644
--- a/packages/PrintSpooler/res/layout/select_printer_activity.xml
+++ b/packages/PrintSpooler/res/layout/select_printer_activity.xml
@@ -61,7 +61,7 @@
                 android:layout_width="fill_parent"
                 android:layout_height="wrap_content"
                 android:indeterminate="true"
-                style="@android:style/Widget.Holo.ProgressBar.Horizontal">
+                style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Horizontal">
             </ProgressBar>
 
         </LinearLayout>
diff --git a/packages/PrintSpooler/res/values-af/strings.xml b/packages/PrintSpooler/res/values-af/strings.xml
new file mode 100644
index 0000000..a10a5a0
--- /dev/null
+++ b/packages/PrintSpooler/res/values-af/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Drukwaglys"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Drukkerinstellings"</string>
+    <string name="print_button" msgid="645164566271246268">"Druk"</string>
+    <string name="save_button" msgid="1921310454071758999">"Stoor"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Bestemming"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Afskrifte"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Papiergrootte"</string>
+    <string name="label_color" msgid="1108690305218188969">"Kleur"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Oriëntasie"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Bladsye (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"bv. 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Drukvoorskou"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Installeer PDF-bekyker vir voorskou"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Drukkerprogram het omgeval"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Bladsye"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Genereer uitdruktaak"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Stoor as PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Alle drukkers…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Drukdialoog"</string>
+    <string name="search" msgid="5421724265322228497">"Deursoek"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Alle drukkers"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Voeg diens by"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Soekkassie vertoon"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Soekkassie weggesteek"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Voeg drukker by"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Kies drukker"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Vergeet drukker"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> drukker gekry"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> drukkers gekry"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Kies drukdiens"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Soek tans vir drukkers"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Geen drukkers gekry nie"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Druk tans <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kanselleer tans <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Drukkerfout by <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Drukker het <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> geblokkeer"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-uitdruktaak"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-uitdruktake"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Kanselleer"</string>
+    <string name="restart" msgid="2472034227037808749">"Herbegin"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Geen verbinding met drukker nie"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"onbekend"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – nie beskikbaar nie"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Kon nie uitdruktaak genereer nie"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Swart en wit"</item>
+    <item msgid="2762241247228983754">"Kleur"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portret"</item>
+    <item msgid="3199660090246166812">"Landskap"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Alles"</item>
+    <item msgid="6812869625222503603">"Reikwydte"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-am/strings.xml b/packages/PrintSpooler/res/values-am/strings.xml
new file mode 100644
index 0000000..d86acb86cb
--- /dev/null
+++ b/packages/PrintSpooler/res/values-am/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"የህትመት አስተላላፊ"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"የአታሚ ቅንብሮች"</string>
+    <string name="print_button" msgid="645164566271246268">"አትም"</string>
+    <string name="save_button" msgid="1921310454071758999">"አስቀምጥ"</string>
+    <string name="label_destination" msgid="9132510997381599275">"መድረሻ"</string>
+    <string name="label_copies" msgid="3634531042822968308">"ቅጂዎች"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"የወረቀት መጠን"</string>
+    <string name="label_color" msgid="1108690305218188969">"ቀለም"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"አቀማመጠ ገፅ"</string>
+    <string name="label_pages" msgid="6300874667546617333">"ገጾች (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"ለምሳሌ፦ 1–5,8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"የህትመት ቅድመ እይታ"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"ለቅድመ-እይታ የፒ ዲ ኤፍ መመልከቻ ይጫኑ"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"የአታሚ መተግበሪያ ተበላሽቷል"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"ገፆች"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"የህትመት ስራን በማመንጨት ላይ"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"እንደ ፒ ዲ ኤፍ አስቀምጥ"</string>
+    <string name="all_printers" msgid="5018829726861876202">"ሁሉም አታሚዎች…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"የህትመት መገናኛ"</string>
+    <string name="search" msgid="5421724265322228497">"ፍለጋ"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"ሁሉም አታሚዎች"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"አገልግሎት አክል"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"የፍለጋ ሳጥን ይታያል"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"የፍለጋ ሳጥን ተደብቋል"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"አታሚ አክል"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"አታሚ ምረጥ"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"አታሚ እርሳ"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> አታሚ ተገኝቷል"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> አታሚዎች ተገኝተዋል"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"የህትመት አገልግሎት ይምረጡ"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"አታሚዎችን በመፈለግ ላይ"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"ምንም አታሚዎች አልተገኙም"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን በማተም ላይ"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን በመተው ላይ"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"የአታሚ ስህተት <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"አታሚ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>ን አግዷል"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> የህትመት ስራ"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> የህትመት ስራዎች"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"ይቅር"</string>
+    <string name="restart" msgid="2472034227037808749">"እንደገና ጀምር"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"ከአታሚ ጋር ምንም ግንኙነት የለም"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"አይታወቅም"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – አይገኝም"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"የህትመት ስራን ማመንጨት አልተቻለም"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"ጥቁር እና ነጭ"</item>
+    <item msgid="2762241247228983754">"ቀለም"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"የቁም"</item>
+    <item msgid="3199660090246166812">"የወርድ"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"ሁሉም"</item>
+    <item msgid="6812869625222503603">"ምጥጥነ ገጽታ"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ar/strings.xml b/packages/PrintSpooler/res/values-ar/strings.xml
new file mode 100644
index 0000000..b883f93
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ar/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"إعدادات الطابعة"</string>
+    <string name="print_button" msgid="645164566271246268">"طباعة"</string>
+    <string name="save_button" msgid="1921310454071758999">"حفظ"</string>
+    <string name="label_destination" msgid="9132510997381599275">"الوجهة"</string>
+    <string name="label_copies" msgid="3634531042822968308">"عدد النسخ"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"حجم الورق"</string>
+    <string name="label_color" msgid="1108690305218188969">"ألوان"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"الاتجاه"</string>
+    <string name="label_pages" msgid="6300874667546617333">"الصفحات (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"على سبيل المثال، 1—5،8،11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"معاينة قبل الطباعة"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"‏تثبيت برنامج عرض PDF للمعاينة"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"تعطّل تطبيق الطباعة"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"الصفحات"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"جارٍ إنشاء مهمة الطباعة"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"‏حفظ بتنسيق PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"جميع الطابعات…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"مربع حوار الطباعة"</string>
+    <string name="search" msgid="5421724265322228497">"بحث"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"جميع الطابعات"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"إضافة خدمة"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"تم إظهار مربع البحث"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"تم إخفاء مربع البحث"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"إضافة طابعة"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"حدد الطابعة"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"تجاهل الطابعة"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"تم العثور على <xliff:g id="COUNT">%1$s</xliff:g> طابعة"</item>
+    <item quantity="other" msgid="6533817036607128241">"تم العثور على <xliff:g id="COUNT">%1$s</xliff:g> من الطابعات"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"اختر خدمة طباعة"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"البحث عن طابعات"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"لم يتم العثور على طابعات"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"جارٍ طباعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"جارٍ إلغاء <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"خطا في الطابعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"رفضت الطابعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> مهمة طباعة"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> من مهام الطباعة"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"إلغاء"</string>
+    <string name="restart" msgid="2472034227037808749">"إعادة تشغيل"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"لا يوجد اتصال بالطابعة"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"غير معروف"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – غير متاحة"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"تعذر إنشاء عملية الطباعة"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"أبيض وأسود"</item>
+    <item msgid="2762241247228983754">"ملونة"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"عمودي"</item>
+    <item msgid="3199660090246166812">"أفقي"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"الكل"</item>
+    <item msgid="6812869625222503603">"النطاق"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-be/arrays.xml b/packages/PrintSpooler/res/values-be/arrays.xml
deleted file mode 100644
index d40278c..0000000
--- a/packages/PrintSpooler/res/values-be/arrays.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-<resources>
-
-    <string-array name="pdf_printer_media_sizes" translatable="false">
-        <item>NA_LETTER</item>
-        <item>NA_GOVT_LETTER</item>
-        <item>NA_LEGAL</item>
-        <item>NA_JUNIOR_LEGAL</item>
-        <item>NA_LEDGER</item>
-        <item>NA_TABLOID</item>
-        <item>NA_INDEX_3X5</item>
-        <item>NA_INDEX_4X6</item>
-        <item>NA_INDEX_5X8</item>
-        <item>NA_MONARCH</item>
-        <item>NA_QUARTO</item>
-        <item>NA_FOOLSCAP</item>
-    </string-array>
-
-</resources>
diff --git a/packages/PrintSpooler/res/values-be/donottranslate.xml b/packages/PrintSpooler/res/values-be/donottranslate.xml
deleted file mode 100644
index 7537aa5..0000000
--- a/packages/PrintSpooler/res/values-be/donottranslate.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2013 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.
--->
-
-<resources>
-
-    <string name="mediasize_default">NA_LETTER</string>
-    <string name="mediasize_standard">@string/mediasize_standard_north_america</string>
-
-</resources>
diff --git a/packages/PrintSpooler/res/values-bg/strings.xml b/packages/PrintSpooler/res/values-bg/strings.xml
new file mode 100644
index 0000000..4009aa2
--- /dev/null
+++ b/packages/PrintSpooler/res/values-bg/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Спулер за печат"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Настройки на принтера"</string>
+    <string name="print_button" msgid="645164566271246268">"Печат"</string>
+    <string name="save_button" msgid="1921310454071758999">"Запазване"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Местоназначение"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Копия"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Размер на хартията"</string>
+    <string name="label_color" msgid="1108690305218188969">"Цвят"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Ориентация"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Страници (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"напр. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Визуализация за печат"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Инсталиране на визуализатор на PDF"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Получи се срив в приложението за отпечатване"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Страници"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Заданието за печат се генерира"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Запазване като PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Всички принтери…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Диалогов прозорец за отпечатване"</string>
+    <string name="search" msgid="5421724265322228497">"Търсене"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Всички принтери"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Добавяне на услуга"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Полето за търсене е показано"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Полето за търсене е скрито"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Добавяне на принтер"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Избиране на принтер"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Забравяне на принтера"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Намерен е <xliff:g id="COUNT">%1$s</xliff:g> принтер"</item>
+    <item quantity="other" msgid="6533817036607128241">"Намерени са <xliff:g id="COUNT">%1$s</xliff:g> принтера"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Избиране на услуга за отпечатване"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Търсят се принтери"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Няма намерени принтери"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ се отпечатва"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ се анулира"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка в принтера при „<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Принтерът блокира при „<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Задание за отпечатване: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Задания за отпечатване: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Отказ"</string>
+    <string name="restart" msgid="2472034227037808749">"Рестартиране"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Няма връзка с принтера"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"няма данни"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – не е налице"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Заданието за отпечатване не можа да се генерира"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Черно-бяло"</item>
+    <item msgid="2762241247228983754">"Цветно"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Вертикално"</item>
+    <item msgid="3199660090246166812">"Хоризонтално"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Всички"</item>
+    <item msgid="6812869625222503603">"Поредица"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ca/arrays.xml b/packages/PrintSpooler/res/values-ca/arrays.xml
deleted file mode 100644
index d40278c..0000000
--- a/packages/PrintSpooler/res/values-ca/arrays.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-<resources>
-
-    <string-array name="pdf_printer_media_sizes" translatable="false">
-        <item>NA_LETTER</item>
-        <item>NA_GOVT_LETTER</item>
-        <item>NA_LEGAL</item>
-        <item>NA_JUNIOR_LEGAL</item>
-        <item>NA_LEDGER</item>
-        <item>NA_TABLOID</item>
-        <item>NA_INDEX_3X5</item>
-        <item>NA_INDEX_4X6</item>
-        <item>NA_INDEX_5X8</item>
-        <item>NA_MONARCH</item>
-        <item>NA_QUARTO</item>
-        <item>NA_FOOLSCAP</item>
-    </string-array>
-
-</resources>
diff --git a/packages/PrintSpooler/res/values-ca/strings.xml b/packages/PrintSpooler/res/values-ca/strings.xml
new file mode 100644
index 0000000..a429dd5
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ca/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Gest. cues impr."</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Configuració impressora"</string>
+    <string name="print_button" msgid="645164566271246268">"Imprimeix"</string>
+    <string name="save_button" msgid="1921310454071758999">"Desa"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destinació"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Còpies"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Mida del paper"</string>
+    <string name="label_color" msgid="1108690305218188969">"Color"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientació"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pàgines (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"p. ex. 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Visualització prèvia impressió"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instal·la un lector de PDF per a visualitz. prèvia"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"L\'aplicació d\'impressió ha fallat"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pàgines"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generant tasca impressió"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Desa com a PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Totes les impressores…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Diàleg d\'impressió"</string>
+    <string name="search" msgid="5421724265322228497">"Cerca"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Totes les impressores"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Afegeix un servei"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Es mostra el quadre de cerca"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"S\'ha amagat el quadre de cerca"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Afegeix una impressora"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Selecciona una impressora"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Oblida la impressora"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"S\'ha trobat <xliff:g id="COUNT">%1$s</xliff:g> impressora"</item>
+    <item quantity="other" msgid="6533817036607128241">"S\'han trobat <xliff:g id="COUNT">%1$s</xliff:g> impressores"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Selecció del servei d\'impressió"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Cerca d\'impressores"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"No s\'ha trobat cap impressora"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"S\'està imprimint <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"S\'està cancel·lant <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Error d\'impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Impressora bloquejada <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Tasca d\'impressió per a <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Tasques d\'impressió per a <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Cancel·la"</string>
+    <string name="restart" msgid="2472034227037808749">"Reinicia"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"No hi ha connexió amb la impressora"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"desconegut"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>: no disponible"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"No s\'ha pogut generar la tasca d\'impressió"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Blanc i negre"</item>
+    <item msgid="2762241247228983754">"Color"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Vertical"</item>
+    <item msgid="3199660090246166812">"Horitzontal"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Tots"</item>
+    <item msgid="6812869625222503603">"Interval"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-cs/strings.xml b/packages/PrintSpooler/res/values-cs/strings.xml
new file mode 100644
index 0000000..3ddc701
--- /dev/null
+++ b/packages/PrintSpooler/res/values-cs/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Nastavení tiskárny"</string>
+    <string name="print_button" msgid="645164566271246268">"Tisk"</string>
+    <string name="save_button" msgid="1921310454071758999">"Uložit"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Cíl"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopie"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Velikost papíru"</string>
+    <string name="label_color" msgid="1108690305218188969">"Barva"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientace"</string>
+    <string name="label_pages" msgid="6300874667546617333">"STRÁNKY (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"např. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Náhled tisku"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Nainstalovat prohlížeč PDF (umožní náhled)"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Aplikace tisku selhala"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Stránky"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generování úlohy tisku"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Uložit ve formátu PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Všechny tiskárny…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Dialog tisku"</string>
+    <string name="search" msgid="5421724265322228497">"Hledat"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Všechny tiskárny"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Přidat službu"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Vyhledávací pole se zobrazuje"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Vyhledávací pole je skryto"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Přidat tiskárnu"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Vybrat tiskárnu"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Odstranit tiskárnu"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Počet nalezených tiskáren: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+    <item quantity="other" msgid="6533817036607128241">"Počet nalezených tiskáren: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Zvolte službu tisku"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Vyhledávání tiskáren"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nebyly nalezeny žádné tiskárny"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Tisk úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Rušení úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tiskárny u úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tiskárna blokuje úlohu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Počet tiskových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Počet tiskových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Zrušit"</string>
+    <string name="restart" msgid="2472034227037808749">"Restartovat"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Nelze se připojit k tiskárně"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"neznámé"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – není k dispozici"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Tiskovou úlohu nelze vytvořit"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Černobíle"</item>
+    <item msgid="2762241247228983754">"Barevně"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Na výšku"</item>
+    <item msgid="3199660090246166812">"Na šířku"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Vše"</item>
+    <item msgid="6812869625222503603">"Rozsah"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-da/strings.xml b/packages/PrintSpooler/res/values-da/strings.xml
new file mode 100644
index 0000000..1a871f8
--- /dev/null
+++ b/packages/PrintSpooler/res/values-da/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Printerindstillinger"</string>
+    <string name="print_button" msgid="645164566271246268">"Udskriv"</string>
+    <string name="save_button" msgid="1921310454071758999">"Gem"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopier"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Papirstørrelse"</string>
+    <string name="label_color" msgid="1108690305218188969">"Farve"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Retning"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Sider (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"f.eks. 1-5,8,11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Vis udskrift"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Installer et PDF-visningsprog. for at se eksempel"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Udskrivningsapp gik ned"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Sider"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Udskriften generes"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Gem som PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Alle printere..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Udskriftsdialog"</string>
+    <string name="search" msgid="5421724265322228497">"Søg"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Alle printere"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Tilføj tjeneste"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Søgefeltet vises"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Søgefeltet er skjult"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Tilføj printer"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Vælg printer"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Glem printer"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Der blev fundet <xliff:g id="COUNT">%1$s</xliff:g> printer"</item>
+    <item quantity="other" msgid="6533817036607128241">"Der blev fundet <xliff:g id="COUNT">%1$s</xliff:g> printere"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Vælg udskriftstjeneste"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Søger efter printere"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Der blev ikke fundet nogen printere"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> udskrives"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annulleres"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Udskriften <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> mislykkedes"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printeren har blokeret <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-udskriftsjob"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>-udskriftsjobs"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Annuller"</string>
+    <string name="restart" msgid="2472034227037808749">"Genstart"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen forbindelse til printer"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"ukendt"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – ikke tilgængelig"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Der kunne ikke genereres et udskriftsjob"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Sort/hvid"</item>
+    <item msgid="2762241247228983754">"Farve"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Stående"</item>
+    <item msgid="3199660090246166812">"Liggende"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Alle"</item>
+    <item msgid="6812869625222503603">"Interval"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-de/strings.xml b/packages/PrintSpooler/res/values-de/strings.xml
new file mode 100644
index 0000000..6b83ac3
--- /dev/null
+++ b/packages/PrintSpooler/res/values-de/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Druck-Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Druckereinstellungen"</string>
+    <string name="print_button" msgid="645164566271246268">"Drucken"</string>
+    <string name="save_button" msgid="1921310454071758999">"Speichern"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Ziel"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Exemplare"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Papiergröße"</string>
+    <string name="label_color" msgid="1108690305218188969">"Farbe"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Ausrichtung"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Seiten (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"z. B. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Vorschau drucken"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"PDF-Viewer für Vorschau installieren"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Druck-App abgestürzt"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Seiten"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Druckauftrag wird generiert..."</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Als PDF speichern"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Alle Drucker…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Druckdialogfeld"</string>
+    <string name="search" msgid="5421724265322228497">"Suchen"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Alle Drucker"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Dienst hinzufügen"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Suchfeld angezeigt"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Suchfeld ausgeblendet"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Drucker hinzufügen"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Drucker auswählen"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Drucker wieder vergessen"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> Drucker gefunden"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> Drucker gefunden"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Druckdienst auswählen"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Suche nach Druckern"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Keine Drucker gefunden"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> wird gedruckt..."</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> wird abgebrochen..."</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Druckerfehler <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Drucker hat <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> blockiert."</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Druckauftrag \"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>\""</item>
+    <item quantity="other" msgid="8746611264734222865">"Druckaufträge \"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>\""</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Abbrechen"</string>
+    <string name="restart" msgid="2472034227037808749">"Neu starten"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Keine Verbindung zum Drucker"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"unbekannt"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – nicht verfügbar"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Druckauftrag konnte nicht generiert werden."</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Schwarz-weiß"</item>
+    <item msgid="2762241247228983754">"Farbe"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Hochformat"</item>
+    <item msgid="3199660090246166812">"Querformat"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Alle"</item>
+    <item msgid="6812869625222503603">"Bereich"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-el/strings.xml b/packages/PrintSpooler/res/values-el/strings.xml
new file mode 100644
index 0000000..795e730
--- /dev/null
+++ b/packages/PrintSpooler/res/values-el/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Λογισμικό ουράς εκτύπωσης"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Ρυθμίσεις εκτυπωτή"</string>
+    <string name="print_button" msgid="645164566271246268">"Εκτύπωση"</string>
+    <string name="save_button" msgid="1921310454071758999">"Αποθήκευση"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Προορισμός"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Αντίγραφα"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Μέγεθος χαρτιού"</string>
+    <string name="label_color" msgid="1108690305218188969">"Χρώμα"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Προσανατολισμός"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Σελίδες (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"π.χ. 1-5,8,11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Προεπισκόπηση εκτύπωσης"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Εγκαταστήστε το PDF viewer για προεπισκόπηση"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Διακοπή λειτουργίας εφαρμογής εκτύπωσης"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Σελίδες"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Δημιουργία εργασίας εκτύπωσης"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Αποθήκευση ως PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Όλοι οι εκτυπωτές…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Πλαίσιο διαλόγου εκτύπωσης"</string>
+    <string name="search" msgid="5421724265322228497">"Αναζήτηση"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Όλοι οι εκτυπωτές"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Προσθήκη υπηρεσίας"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Εμφάνιση πλαισίου αναζήτησης"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Απόκρυψη πλαισίου αναζήτησης"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Προσθήκη εκτυπωτή"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Επιλογή εκτυπωτή"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Διαγραφή εκτυπωτή"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Βρέθηκε <xliff:g id="COUNT">%1$s</xliff:g> εκτυπωτής"</item>
+    <item quantity="other" msgid="6533817036607128241">"Βρέθηκαν <xliff:g id="COUNT">%1$s</xliff:g> εκτυπωτές"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Επιλέξτε υπηρεσία εκτύπωσης"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Αναζήτηση για εκτυπωτές"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Δεν βρέθηκαν εκτυπωτές"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Εκτύπωση <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ακύρωση <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Σφάλμα εκτυπωτή <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Ο εκτυπωτής απέκλεισε <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"εργασία εκτύπωσης <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"εργασίες εκτύπωσης <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Ακύρωση"</string>
+    <string name="restart" msgid="2472034227037808749">"Επανεκκίνηση"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Δεν υπάρχει σύνδεση με εκτυπωτή"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"άγνωστο"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – μη διαθέσιμο"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Δεν ήταν δυνατή η δημιουργία εργασίας εκτύπωσης"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Ασπρόμαυρο"</item>
+    <item msgid="2762241247228983754">"Χρώμα"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Πορτραίτο"</item>
+    <item msgid="3199660090246166812">"Οριζόντια"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Όλα"</item>
+    <item msgid="6812869625222503603">"Εύρος"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-en-rGB/strings.xml b/packages/PrintSpooler/res/values-en-rGB/strings.xml
new file mode 100644
index 0000000..27372f8
--- /dev/null
+++ b/packages/PrintSpooler/res/values-en-rGB/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Printer settings"</string>
+    <string name="print_button" msgid="645164566271246268">"Print"</string>
+    <string name="save_button" msgid="1921310454071758999">"Save"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copies"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Paper Size"</string>
+    <string name="label_color" msgid="1108690305218188969">"Colour"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pages (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"e.g. 1–5,8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Print preview"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Install PDF viewer for preview"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Printing app crashed"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pages"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generating print job"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Save as PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"All printers…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Print dialogue"</string>
+    <string name="search" msgid="5421724265322228497">"Search"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"All printers"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Search box shown"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Search box hidden"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Add printer"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Select printer"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Forget printer"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer found"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printers found"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"No printers found"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blocked <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print job"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print jobs"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Cancel"</string>
+    <string name="restart" msgid="2472034227037808749">"Restart"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"No connection to printer"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"unknown"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – unavailable"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Couldn\'t generate print job"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Black &amp; White"</item>
+    <item msgid="2762241247228983754">"Colour"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portrait"</item>
+    <item msgid="3199660090246166812">"Landscape"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"All"</item>
+    <item msgid="6812869625222503603">"Range"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-en-rIN/strings.xml b/packages/PrintSpooler/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..27372f8
--- /dev/null
+++ b/packages/PrintSpooler/res/values-en-rIN/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Printer settings"</string>
+    <string name="print_button" msgid="645164566271246268">"Print"</string>
+    <string name="save_button" msgid="1921310454071758999">"Save"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copies"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Paper Size"</string>
+    <string name="label_color" msgid="1108690305218188969">"Colour"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pages (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"e.g. 1–5,8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Print preview"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Install PDF viewer for preview"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Printing app crashed"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pages"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generating print job"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Save as PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"All printers…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Print dialogue"</string>
+    <string name="search" msgid="5421724265322228497">"Search"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"All printers"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Add service"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Search box shown"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Search box hidden"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Add printer"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Select printer"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Forget printer"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer found"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printers found"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Choose print service"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Searching for printers"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"No printers found"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Printing <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelling <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Printer error <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blocked <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print job"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> print jobs"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Cancel"</string>
+    <string name="restart" msgid="2472034227037808749">"Restart"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"No connection to printer"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"unknown"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – unavailable"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Couldn\'t generate print job"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Black &amp; White"</item>
+    <item msgid="2762241247228983754">"Colour"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portrait"</item>
+    <item msgid="3199660090246166812">"Landscape"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"All"</item>
+    <item msgid="6812869625222503603">"Range"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-es-rUS/arrays.xml b/packages/PrintSpooler/res/values-es-rUS/arrays.xml
deleted file mode 100644
index d40278c..0000000
--- a/packages/PrintSpooler/res/values-es-rUS/arrays.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-<resources>
-
-    <string-array name="pdf_printer_media_sizes" translatable="false">
-        <item>NA_LETTER</item>
-        <item>NA_GOVT_LETTER</item>
-        <item>NA_LEGAL</item>
-        <item>NA_JUNIOR_LEGAL</item>
-        <item>NA_LEDGER</item>
-        <item>NA_TABLOID</item>
-        <item>NA_INDEX_3X5</item>
-        <item>NA_INDEX_4X6</item>
-        <item>NA_INDEX_5X8</item>
-        <item>NA_MONARCH</item>
-        <item>NA_QUARTO</item>
-        <item>NA_FOOLSCAP</item>
-    </string-array>
-
-</resources>
diff --git a/packages/PrintSpooler/res/values-es-rUS/strings.xml b/packages/PrintSpooler/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..c7d12af
--- /dev/null
+++ b/packages/PrintSpooler/res/values-es-rUS/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Cola de impresión"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Config. de impresora"</string>
+    <string name="print_button" msgid="645164566271246268">"Imprimir"</string>
+    <string name="save_button" msgid="1921310454071758999">"Guardar"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destino"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copias"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Tamaño del papel"</string>
+    <string name="label_color" msgid="1108690305218188969">"Color"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientación"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Páginas (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"Ej.: 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Vista previa de impresión"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instalar visualizador de PDF para vista previa"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"La aplicación de impresión falló"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Páginas"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generando trabajo de impresión"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Guardar como PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Todas las impresoras…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Cuadro de diálogo de impresión"</string>
+    <string name="search" msgid="5421724265322228497">"Buscar"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Todas las impresoras"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Agregar servicio"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Cuadro de búsqueda visible"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Cuadro de búsqueda oculto"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Agregar impresora"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Seleccionar impresora"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"No recordar impresora"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Se encontró <xliff:g id="COUNT">%1$s</xliff:g> impresora."</item>
+    <item quantity="other" msgid="6533817036607128241">"Se encontraron <xliff:g id="COUNT">%1$s</xliff:g> impresoras."</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Elegir servicio de impresión"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Buscando impresoras"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"No se encontraron impresoras"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Imprimiendo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"La impresora bloqueó <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>."</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Trabajo de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Trabajos de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Cancelar"</string>
+    <string name="restart" msgid="2472034227037808749">"Reiniciar"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"No hay conexión con la impresora."</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"desconocido"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>: no disponible"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Error al generar el trabajo de impresión"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Blanco y negro"</item>
+    <item msgid="2762241247228983754">"Color"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Vertical"</item>
+    <item msgid="3199660090246166812">"Horizontal"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Todas"</item>
+    <item msgid="6812869625222503603">"Intervalo"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-es/strings.xml b/packages/PrintSpooler/res/values-es/strings.xml
new file mode 100644
index 0000000..0225cad
--- /dev/null
+++ b/packages/PrintSpooler/res/values-es/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Cola de impresión"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Ajustes de impresora"</string>
+    <string name="print_button" msgid="645164566271246268">"Imprimir"</string>
+    <string name="save_button" msgid="1921310454071758999">"Guardar"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destino"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copias"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Tamaño del papel"</string>
+    <string name="label_color" msgid="1108690305218188969">"Color"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientación"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Páginas (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"p. ej.: 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Vista previa de impresión"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instalar visor PDF para obtener vista previa"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Error de aplicación de impresión"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Páginas"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generando trabajo de impresión"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Guardar como PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Todas las impresoras…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Cuadro de diálogo de impresión"</string>
+    <string name="search" msgid="5421724265322228497">"Buscar"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Todas las impresoras"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Añadir servicio"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Cuadro de búsqueda visible"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Cuadro de búsqueda oculto"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Añadir impresora"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Seleccionar impresora"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Borrar impresora"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Se ha encontrado <xliff:g id="COUNT">%1$s</xliff:g> impresora"</item>
+    <item quantity="other" msgid="6533817036607128241">"Se han encontrado <xliff:g id="COUNT">%1$s</xliff:g> impresoras"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Seleccionar servicio de impresión"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Buscando impresoras"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"No se encontraron impresoras"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Imprimiendo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Error de impresora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"La impresora ha bloqueado <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Trabajo de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Trabajos de impresión <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Cancelar"</string>
+    <string name="restart" msgid="2472034227037808749">"Volver a empezar"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"No hay conexión con la impresora"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"desconocido"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – no disponible"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Error al generar el trabajo de impresión"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Blanco y negro"</item>
+    <item msgid="2762241247228983754">"Color"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Vertical"</item>
+    <item msgid="3199660090246166812">"Horizontal"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Todo"</item>
+    <item msgid="6812869625222503603">"Intervalo"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-et-rEE/strings.xml b/packages/PrintSpooler/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..2b3b352
--- /dev/null
+++ b/packages/PrintSpooler/res/values-et-rEE/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Prindispuuler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Printeri seaded"</string>
+    <string name="print_button" msgid="645164566271246268">"Prindi"</string>
+    <string name="save_button" msgid="1921310454071758999">"Salvesta"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Sihtkoht"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Koopiaid"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Paberiformaat"</string>
+    <string name="label_color" msgid="1108690305218188969">"Värv"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Suund"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Lehti (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"nt 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Prindi eelvaade"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"PDF-vaaturi installimine eelvaate kuvamiseks"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Printimisrakendus jooksis kokku"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Lehed"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Prinditöö loomine"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Salvesta PDF-ina"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Kõik printerid …"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Printimisdialoog"</string>
+    <string name="search" msgid="5421724265322228497">"Otsing"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Kõik printerid"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Lisa teenus"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Otsingukast on kuvatud"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Otsingukast on peidetud"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Lisa printer"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Printeri valimine"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Printeri unustamine"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Leiti <xliff:g id="COUNT">%1$s</xliff:g> printer"</item>
+    <item quantity="other" msgid="6533817036607128241">"Leiti <xliff:g id="COUNT">%1$s</xliff:g> printerit"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Prinditeenuse valimine"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Printerite otsimine"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Printereid ei leitud"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> printimine"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> tühistamine"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Printeri viga: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer blokeeris töö <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Prinditöö <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Prinditööd <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Tühista"</string>
+    <string name="restart" msgid="2472034227037808749">"Taaskäivita"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Printeriühendus puudub"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"teadmata"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – pole saadaval"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Prinditööd ei saanud luua"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Mustvalge"</item>
+    <item msgid="2762241247228983754">"Värv"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Vertikaalpaigutus"</item>
+    <item msgid="3199660090246166812">"Horisontaalpaigutus"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Kõik"</item>
+    <item msgid="6812869625222503603">"Vahemik"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-fa/strings.xml b/packages/PrintSpooler/res/values-fa/strings.xml
new file mode 100644
index 0000000..49bae323
--- /dev/null
+++ b/packages/PrintSpooler/res/values-fa/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"هماهنگ‌کننده چاپ"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"تنظیمات چاپگر"</string>
+    <string name="print_button" msgid="645164566271246268">"چاپ"</string>
+    <string name="save_button" msgid="1921310454071758999">"ذخیره"</string>
+    <string name="label_destination" msgid="9132510997381599275">"مقصد"</string>
+    <string name="label_copies" msgid="3634531042822968308">"کپی‌ها"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"اندازه کاغذ"</string>
+    <string name="label_color" msgid="1108690305218188969">"رنگی"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"جهت"</string>
+    <string name="label_pages" msgid="6300874667546617333">"صفحات (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"‏‏‎مثلاً ۱—۵،‏۹،۷—۱۰"</string>
+    <string name="print_preview" msgid="8010217796057763343">"پیش‌نمایش چاپ"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"‏نصب نمایشگر PDF برای پیش‌نمایش"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"برنامه چاپ خراب شد"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"صفحات"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"در حال ایجاد کار چاپ"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"‏ذخیره به‌عنوان PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"همه چاپگرها..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"چاپ گفتگو"</string>
+    <string name="search" msgid="5421724265322228497">"جستجو"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"همه چاپگرها"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"افزودن سرویس"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"کادر جستجو نمایان شد"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"کادر جستجو پنهان شد"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"افزودن چاپگر"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"انتخاب چاپگر"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"فراموش کردن چاپگر"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> چاپگر یافت شد"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> چاپگر یافت شد"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"انتخاب سرویس چاپ"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"در حال جستجو برای چاپگرها"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"هیچ چاپگری یافت نشد"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"در حال چاپ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"در حال لغو <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"خطای چاپگر <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"چاپگر، کار <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> را مسدود کرد"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"کار چاپ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"کارهای چاپ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"لغو"</string>
+    <string name="restart" msgid="2472034227037808749">"راه‌اندازی مجدد"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"اتصال با چاپگر برقرار نیست"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"نامعلوم"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - در دسترس نیست"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"کار چاپ ایجاد نشد"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"سیاه و سفید"</item>
+    <item msgid="2762241247228983754">"رنگی"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"عمودی"</item>
+    <item msgid="3199660090246166812">"افقی"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"همه"</item>
+    <item msgid="6812869625222503603">"محدوده"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-fi/strings.xml b/packages/PrintSpooler/res/values-fi/strings.xml
new file mode 100644
index 0000000..8658e04
--- /dev/null
+++ b/packages/PrintSpooler/res/values-fi/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Taustatulostus"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Tulostimen asetukset"</string>
+    <string name="print_button" msgid="645164566271246268">"Tulosta"</string>
+    <string name="save_button" msgid="1921310454071758999">"Tallenna"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Kohde"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopiot"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Paperikoko"</string>
+    <string name="label_color" msgid="1108690305218188969">"Väri"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Suunta"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Sivut (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"esim. 1–5,8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Tulostuksen esikatselu"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Asenna PDF-katseluohjelma esikatselua varten"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Tulostussovellus kaatui"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Sivut"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Luodaan tulostustyö"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Tallenna PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Kaikki tulostimet…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Tulostusikkuna"</string>
+    <string name="search" msgid="5421724265322228497">"Haku"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Kaikki tulostimet"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Lisää palvelu"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Hakukenttä näkyvissä"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Hakukenttä piilotettu"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Lisää tulostin"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Valitse tulostin"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Unohda tulostin"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Löytyi <xliff:g id="COUNT">%1$s</xliff:g> tulostin"</item>
+    <item quantity="other" msgid="6533817036607128241">"Löytyi <xliff:g id="COUNT">%1$s</xliff:g> tulostinta"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Valitse tulostuspalvelu"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Etsitään tulostimia"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Tulostimia ei löydy"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Tulostetaan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Peruutetaan työ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Tulostinvirhe työlle <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tulostin esti työn <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Tulostustyö <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Tulostustyöt <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Peruuta"</string>
+    <string name="restart" msgid="2472034227037808749">"Käynnistä uudelleen"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Ei yhteyttä tulostimeen"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"tuntematon"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – ei käytettävissä"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Tulostustyötä ei voitu luoda"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Mustavalkoinen"</item>
+    <item msgid="2762241247228983754">"Väri"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Pysty"</item>
+    <item msgid="3199660090246166812">"Vaaka"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Kaikki"</item>
+    <item msgid="6812869625222503603">"Väli"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-fr-rCA/strings.xml b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..9a3352c
--- /dev/null
+++ b/packages/PrintSpooler/res/values-fr-rCA/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"File d\'att. impr."</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Paramètres de l\'imprimante"</string>
+    <string name="print_button" msgid="645164566271246268">"Imprimer"</string>
+    <string name="save_button" msgid="1921310454071758999">"Enregistrer"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copies"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Format du papier"</string>
+    <string name="label_color" msgid="1108690305218188969">"Couleur"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pages (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"p. ex. 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Aperçu avant impression"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Installer un lecteur PDF pour voir l\'aperçu"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"L\'application à l\'origine de l\'impression a planté"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pages"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Génération tâche impression…"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Enregistrer en format PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Toutes les imprimantes…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Boîte de dialogue d\'impression"</string>
+    <string name="search" msgid="5421724265322228497">"Rechercher"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Toutes les imprimantes"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Ajouter le service"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Champ de recherche affiché"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Champ de recherche masqué"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Ajouter une imprimante"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Sélectionner une imprimante"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Supprimer l\'imprimante"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> imprimante trouvée"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> imprimantes trouvées"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Recherche d\'imprimantes en cours..."</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Aucune imprimante trouvée"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Impression de <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> en cours…"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »…"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression : « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> »"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Impression de « <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> » bloquée"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Tâche d\'impression <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Tâches d\'impression <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Annuler"</string>
+    <string name="restart" msgid="2472034227037808749">"Recommencer"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Aucune connexion à l\'imprimante"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"inconnu"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> — indisponible"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Impossible de générer la tâche d\'impression"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Noir et blanc"</item>
+    <item msgid="2762241247228983754">"Couleur"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portrait"</item>
+    <item msgid="3199660090246166812">"Paysage"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Tous"</item>
+    <item msgid="6812869625222503603">"Plage"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-fr/strings.xml b/packages/PrintSpooler/res/values-fr/strings.xml
new file mode 100644
index 0000000..17fabdc
--- /dev/null
+++ b/packages/PrintSpooler/res/values-fr/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Spouler impress."</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Paramètres de l\'imprimante"</string>
+    <string name="print_button" msgid="645164566271246268">"Imprimer"</string>
+    <string name="save_button" msgid="1921310454071758999">"Enregistrer"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copies"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Format du papier"</string>
+    <string name="label_color" msgid="1108690305218188969">"Couleur"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientation"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pages (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"ex. : 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Aperçu avant impression"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Installer un lecteur PDF pour afficher l\'aperçu"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"L\'application à l\'origine de l\'impression a planté"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pages"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Génération tâche impression…"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Enregistrer au format .PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Toutes les imprim."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Boîte de dialogue d\'impression"</string>
+    <string name="search" msgid="5421724265322228497">"Rechercher"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Toutes les imprimantes"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Ajouter un service"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Champ de recherche affiché."</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Champ de recherche masqué."</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Ajouter une imprimante"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Sélectionner une imprimante"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Supprimer l\'imprimante"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> imprimante trouvée."</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> imprimantes trouvées."</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Sélectionner le service d\'impression"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Recherche d\'imprimantes en cours"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Aucune imprimante trouvée"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Impression de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" en cours…"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annulation de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" en cours…"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Erreur impression pour \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Impression de \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" bloquée"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> tâche d\'impression"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> tâches d\'impression"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Annuler"</string>
+    <string name="restart" msgid="2472034227037808749">"Redémarrer"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Aucune connexion à l\'imprimante."</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"inconnue"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – indisponible"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Impossible de générer la tâche d\'impression."</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Noir et blanc"</item>
+    <item msgid="2762241247228983754">"Couleur"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portrait"</item>
+    <item msgid="3199660090246166812">"Paysage"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Tout"</item>
+    <item msgid="6812869625222503603">"Plage"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-hi/strings.xml b/packages/PrintSpooler/res/values-hi/strings.xml
new file mode 100644
index 0000000..60406b7
--- /dev/null
+++ b/packages/PrintSpooler/res/values-hi/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"प्रिंट स्पूलर"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"प्रिंटर सेटिंग"</string>
+    <string name="print_button" msgid="645164566271246268">"प्रिंट करें"</string>
+    <string name="save_button" msgid="1921310454071758999">"सहेजें"</string>
+    <string name="label_destination" msgid="9132510997381599275">"गंतव्य"</string>
+    <string name="label_copies" msgid="3634531042822968308">"प्रतियां"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"कागज़ का आकार"</string>
+    <string name="label_color" msgid="1108690305218188969">"रंग"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"अभिविन्‍यास"</string>
+    <string name="label_pages" msgid="6300874667546617333">"पृष्‍ठ (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"उदा. 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"प्रिंट पूर्वावलोकन"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"पूर्वावलोकन के लिए PDF व्यूअर इंस्टॉल करें"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"प्रिंटिंग एप्लिकेशन क्रैश हो गया"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"पृष्ठ"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"प्रिंट कार्य जनरेट हो रहा है"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF के रूप में सहेजें"</string>
+    <string name="all_printers" msgid="5018829726861876202">"सभी प्रिंटर..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"प्रिंट संवाद"</string>
+    <string name="search" msgid="5421724265322228497">"खोजें"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"सभी प्रिंटर"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"सेवा जोड़ें"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"खोज बॉक्स प्रदर्शित है"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"खोज बॉक्स छिपा हुआ है"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"प्रिंटर जोड़ें"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"प्रिंटर चुनें"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"प्रिंटर को भूल जाएं"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिंटर मिला"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> प्रिंटर मिले"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"प्रिंट सेवा चुनें"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"प्रिंटर खोज रहा है"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"कोई प्रिंटर नहीं मिले"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> प्रिंट हो रहा है"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द हो रहा है"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"प्रिंटर त्रुटि <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"प्रिंटर अवरोधित <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> प्रिंट कार्य"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> प्रिंट कार्य"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"रद्द करें"</string>
+    <string name="restart" msgid="2472034227037808749">"पुन: आरंभ करें"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"प्रिंटर के लिए कोई कनेक्शन नहीं"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"अज्ञात"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – अनुपलब्ध"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"प्रिंट कार्य जनरेट नहीं किया जा सका"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"श्याम और श्वेत"</item>
+    <item msgid="2762241247228983754">"रंग"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"पोर्ट्रेट"</item>
+    <item msgid="3199660090246166812">"लैंडस्केप"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"सभी"</item>
+    <item msgid="6812869625222503603">"सीमा"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-hr/strings.xml b/packages/PrintSpooler/res/values-hr/strings.xml
new file mode 100644
index 0000000..7182cf6
--- /dev/null
+++ b/packages/PrintSpooler/res/values-hr/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Postavke pisača"</string>
+    <string name="print_button" msgid="645164566271246268">"Ispis"</string>
+    <string name="save_button" msgid="1921310454071758999">"Spremi"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Odredište"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopije"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Veličina papira"</string>
+    <string name="label_color" msgid="1108690305218188969">"U boji"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orijentacija"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Stranice (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"npr. 1 – 5,8,11 – 13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Pregled ispisa"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instaliraj PDF preglednik za pregled"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Srušila se aplikacija za ispis"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Stranice"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generiranje zadatka ispisa"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Spremi kao PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Svi pisači…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Dijaloški okvir za ispis"</string>
+    <string name="search" msgid="5421724265322228497">"Pretraživanje"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Svi pisači"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj uslugu"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Okvir za pretraživanje prikazan je"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Okvir za pretraživanje skriven je"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Dodaj pisač"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Odaberite pisač"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Zaboravite pisač"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Pronađen je <xliff:g id="COUNT">%1$s</xliff:g> pisač"</item>
+    <item quantity="other" msgid="6533817036607128241">"Pronađen je sljedeći broj pisača: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Odaberite uslugu ispisa"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Traženje pisača"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nije pronađen nijedan pisač"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Ispisivanje <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Otkazivanje zadatka <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Pogreška pisača <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Pisač je blokirao <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Zadatak ispisa <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Broj zadataka ispisa: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Odustani"</string>
+    <string name="restart" msgid="2472034227037808749">"Ponovo pokreni"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Nema veze s pisačem"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"nepoznato"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – zadatak nije dostupan"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Zadatak ispisa nije generiran"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Crno-bijelo"</item>
+    <item msgid="2762241247228983754">"U boji"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portret"</item>
+    <item msgid="3199660090246166812">"Pejzaž"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Sve"</item>
+    <item msgid="6812869625222503603">"Raspon"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-hu/strings.xml b/packages/PrintSpooler/res/values-hu/strings.xml
new file mode 100644
index 0000000..6a0741b
--- /dev/null
+++ b/packages/PrintSpooler/res/values-hu/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Nyomtatásisor-kezelő"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Nyomtatóbeállítások"</string>
+    <string name="print_button" msgid="645164566271246268">"Nyomtatás"</string>
+    <string name="save_button" msgid="1921310454071758999">"Mentés"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Cél"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Példányszám"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Papírméret"</string>
+    <string name="label_color" msgid="1108690305218188969">"Szín"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Tájolás"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Oldalszám (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"pl. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Előnézet nyomtatása"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Az előnézethez telepítse a PDF-megtekintőt."</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"A nyomtatási alkalmazás összeomlott."</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Oldalak"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Nyomtatási feladat létrehozása"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Mentés PDF-ként"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Az összes nyomtató…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Nyomtatási párbeszédablak"</string>
+    <string name="search" msgid="5421724265322228497">"Keresés"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Az összes nyomtató"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Szolgáltatás hozzáadása"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Keresőmező megjelenítve"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Keresőmező elrejtve"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Nyomtató hozzáadása"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Nyomtató kiválasztása"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Nyomtató elfelejtése"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> nyomtató észlelve"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> nyomtató észlelve"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Nyomtatási szolgáltatás kiválasztása"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Nyomtatók keresése"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nem található nyomtató"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> nyomtatása"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> törlése"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Nyomtatási hiba: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"A(z) <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> letiltva."</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> – nyomtatási feladat"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> – nyomtatási feladatok"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Mégse"</string>
+    <string name="restart" msgid="2472034227037808749">"Újraindítás"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Nincs kapcsolat a nyomtatóval"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"ismeretlen"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – nem érhető el"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Nem sikerült létrehozni a nyomtatási feladatot."</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Fekete-fehér"</item>
+    <item msgid="2762241247228983754">"Szín"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Álló"</item>
+    <item msgid="3199660090246166812">"Fekvő"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Összes"</item>
+    <item msgid="6812869625222503603">"Tartomány"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-hy-rAM/strings.xml b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..1423b82
--- /dev/null
+++ b/packages/PrintSpooler/res/values-hy-rAM/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Տպման կարգավար"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Տպիչի կարգավորումներ"</string>
+    <string name="print_button" msgid="645164566271246268">"Տպել"</string>
+    <string name="save_button" msgid="1921310454071758999">"Պահել"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Նպատակակետ"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Պատճեններ"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Թղթի չափը"</string>
+    <string name="label_color" msgid="1108690305218188969">"Գույնը"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Դիրքավորում"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Էջեր (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"օր.՝ 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Տպելու նախադիտում"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Նախադիտման համար տեղադրեք PDF դիտարկիչ"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Տպելու ծրագիրը վթարի է ենթարկվել"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Էջեր"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Ձևավորվում է տպելու աշխատանքը"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Պահել որպես PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Բոլոր տպիչները..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Տպելու երկխոսության պատուհան"</string>
+    <string name="search" msgid="5421724265322228497">"Որոնել"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Բոլոր տպիչները"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Ավելացնել ծառայություն"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Որոնման վանդակը ցուցադրված է"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Որոնման վանդակը թաքցվել է"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Ավելացնել տպիչ"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Ընտրել տպիչ"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Մոռանալ տպիչը"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> տպիչ է գտնվել"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> տպիչ է գտնվել"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Ընտրեք տպելու ծառայությունը"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Տպիչների որոնում"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Տպիչներ չեն գտնվել"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Տպվում է՝ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ը չեղարկվում է"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Տպիչի սխալ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Տպիչն արգելափակել է <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ը"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> տպման աշխատանք"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> տպման աշխատանքներ"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Չեղարկել"</string>
+    <string name="restart" msgid="2472034227037808749">"Վերագործարկել"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Տպիչի հետ կապ չկա"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"անհայտ"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> տպիչն անհասանելի է"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Չկարողացանք մշակել տպման աշխատանքը"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Սև ու սպիտակ"</item>
+    <item msgid="2762241247228983754">"Գույնը"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Դիմանկար"</item>
+    <item msgid="3199660090246166812">"Լանդշաֆտ"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Բոլորը"</item>
+    <item msgid="6812869625222503603">"Միջակայք"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-in/strings.xml b/packages/PrintSpooler/res/values-in/strings.xml
new file mode 100644
index 0000000..2b80d07
--- /dev/null
+++ b/packages/PrintSpooler/res/values-in/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Setelan printer"</string>
+    <string name="print_button" msgid="645164566271246268">"Cetak"</string>
+    <string name="save_button" msgid="1921310454071758999">"Simpan"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Tujuan"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Salinan"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Ukuran Kertas"</string>
+    <string name="label_color" msgid="1108690305218188969">"Warna"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientasi"</string>
+    <string name="label_pages" msgid="6300874667546617333">"(<xliff:g id="PAGE_COUNT">%1$s</xliff:g>) halaman"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"misalnya 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Pratinjau cetak"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Pasang penampil PDF untuk pratinjau"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Aplikasi pencetakan mogok"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Halaman"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Membuat tugas pencetakan"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Simpan sebagai PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Semua printer…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Cetak dialog"</string>
+    <string name="search" msgid="5421724265322228497">"Cari"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Semua printer"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Tambahkan layanan"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Kotak telusur ditampilkan"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Kotak telusur disembunyikan"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Tambahkan printer"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Pilih printer"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Lupakan printer"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer ditemukan"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printer ditemukan"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Pilih layanan cetak"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Mencari printer"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Tidak ditemukan printer"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Mencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Ada kesalahan printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printer memblokir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Tugas cetak <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Tugas cetak <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Batal"</string>
+    <string name="restart" msgid="2472034227037808749">"Mulai Ulang"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Tidak ada sambungan ke printer"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"tak diketahui"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – tidak tersedia"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Tidak dapat membuat tugas cetak"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Hitam &amp; Putih"</item>
+    <item msgid="2762241247228983754">"Warna"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Potret"</item>
+    <item msgid="3199660090246166812">"Lanskap"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Semua"</item>
+    <item msgid="6812869625222503603">"Rentang"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-it/strings.xml b/packages/PrintSpooler/res/values-it/strings.xml
new file mode 100644
index 0000000..96c3b48
--- /dev/null
+++ b/packages/PrintSpooler/res/values-it/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Impostazioni stampante"</string>
+    <string name="print_button" msgid="645164566271246268">"Stampa"</string>
+    <string name="save_button" msgid="1921310454071758999">"Salva"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destinazione"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copie"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Formato carta"</string>
+    <string name="label_color" msgid="1108690305218188969">"A colori"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientamento"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pagine (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"Es.: 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Anteprima di stampa"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Installa visualizzatore PDF per anteprima"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Arresto anomalo dell\'app di stampa"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pagine"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generazione processo di stampa"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Salva in PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Tutte le stampanti…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Finestra di dialogo Stampa"</string>
+    <string name="search" msgid="5421724265322228497">"Cerca"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Tutte le stampanti"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Aggiungi servizio"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Casella di ricerca visualizzata"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Casella di ricerca nascosta"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Aggiungi stampante"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Seleziona stampante"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Elimina stampante"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> stampante trovata"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> stampanti trovate"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Scegli servizio di stampa"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Ricerca di stampanti"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nessuna stampante trovata"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Stampa di <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Annullamento di <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Errore della stampante: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"La stampante ha bloccato <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Processo di stampa <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Processi di stampa <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Annulla"</string>
+    <string name="restart" msgid="2472034227037808749">"Riavvia"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Nessun collegamento alla stampante"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"sconosciuto"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - non disponibile"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Impossibile generare processo di stampa"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Bianco e nero"</item>
+    <item msgid="2762241247228983754">"A colori"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Verticale"</item>
+    <item msgid="3199660090246166812">"Orizzontale"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Tutte"</item>
+    <item msgid="6812869625222503603">"Intervallo"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-iw/strings.xml b/packages/PrintSpooler/res/values-iw/strings.xml
new file mode 100644
index 0000000..3e0e732
--- /dev/null
+++ b/packages/PrintSpooler/res/values-iw/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"הגדרות מדפסת"</string>
+    <string name="print_button" msgid="645164566271246268">"הדפס"</string>
+    <string name="save_button" msgid="1921310454071758999">"שמור"</string>
+    <string name="label_destination" msgid="9132510997381599275">"יעד"</string>
+    <string name="label_copies" msgid="3634531042822968308">"עותקים"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"גודל נייר"</string>
+    <string name="label_color" msgid="1108690305218188969">"צבע"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"כיוון"</string>
+    <string name="label_pages" msgid="6300874667546617333">"עמודים (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"למשל 1–5‏,8,‏11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"תצוגה מקדימה של הדפסה"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"‏התקן מציג PDF ליצירת תצוגה מקדימה"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"אפליקציית ההדפסה קרסה"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"עמודים"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"יוצר עבודת הדפסה"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"‏שמור כ-PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"כל המדפסות…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"תיבת דו שיח של מדפסת"</string>
+    <string name="search" msgid="5421724265322228497">"חפש"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"כל המדפסות"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"הוסף שירות"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"תיבת החיפוש מוצגת"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"תיבת החיפוש מוסתרת"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"הוסף מדפסת"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"בחר מדפסת"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"שכח את המדפסת"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"נמצאה מדפסת <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+    <item quantity="other" msgid="6533817036607128241">"נמצאו <xliff:g id="COUNT">%1$s</xliff:g> מדפסות"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"בחר שירות הדפסה"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"מחפש מדפסות"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"לא נמצאו מדפסות"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"מדפיס את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"מבטל את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"שגיאת מדפסת ב-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"המדפסת חסמה את <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"עבודת הדפסה <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> עבודות הדפסה"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"בטל"</string>
+    <string name="restart" msgid="2472034227037808749">"הפעל מחדש"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"אין חיבור למדפסת"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"לא ידוע"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – לא זמינה"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"לא ניתן היה ליצור את עבודת ההדפסה"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"שחור ולבן"</item>
+    <item msgid="2762241247228983754">"צבע"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"לאורך"</item>
+    <item msgid="3199660090246166812">"לרוחב"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"הכל"</item>
+    <item msgid="6812869625222503603">"טווח"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ja/strings.xml b/packages/PrintSpooler/res/values-ja/strings.xml
new file mode 100644
index 0000000..d3f4f85
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ja/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"印刷スプーラ"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"プリンタの設定"</string>
+    <string name="print_button" msgid="645164566271246268">"印刷"</string>
+    <string name="save_button" msgid="1921310454071758999">"保存"</string>
+    <string name="label_destination" msgid="9132510997381599275">"印刷先"</string>
+    <string name="label_copies" msgid="3634531042822968308">"部数"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"用紙サイズ"</string>
+    <string name="label_color" msgid="1108690305218188969">"カラー選択"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"方向"</string>
+    <string name="label_pages" msgid="6300874667546617333">"ページ（<xliff:g id="PAGE_COUNT">%1$s</xliff:g>）"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"例: 1-5,8,11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"印刷プレビュー"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"プレビュー用PDFビューアをインストール"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"印刷アプリでの障害発生"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"ページ数"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"印刷ジョブを生成しています"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF形式で保存"</string>
+    <string name="all_printers" msgid="5018829726861876202">"すべてのプリンタ…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"印刷ダイアログ"</string>
+    <string name="search" msgid="5421724265322228497">"検索"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"すべてのプリンタ"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"サービスを追加"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"検索ボックスは表示されています"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"検索ボックスは表示されていません"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"プリンタを追加"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"プリンタを選択"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"プリンタを切断"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g>台のプリンタが見つかりました"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g>台のプリンタが見つかりました"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"印刷サービスの選択"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"プリンタの検索中"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"プリンタが見つかりません"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>を印刷しています"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>をキャンセルしています"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"プリンタエラー: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>をブロックしました"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>の印刷ジョブ"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>の印刷ジョブ"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"キャンセル"</string>
+    <string name="restart" msgid="2472034227037808749">"再試行"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"プリンタに接続されていません"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"不明"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>–使用不可"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"印刷ジョブを生成できませんでした"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"モノクロ"</item>
+    <item msgid="2762241247228983754">"カラー"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"縦向き"</item>
+    <item msgid="3199660090246166812">"横向き"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"すべて"</item>
+    <item msgid="6812869625222503603">"範囲"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ka-rGE/strings.xml b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..d36b7c9
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ka-rGE/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"ბეჭდვის Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"პრინტერის პარამეტრები"</string>
+    <string name="print_button" msgid="645164566271246268">"ბეჭდვა"</string>
+    <string name="save_button" msgid="1921310454071758999">"შენახვა"</string>
+    <string name="label_destination" msgid="9132510997381599275">"დანიშნულება"</string>
+    <string name="label_copies" msgid="3634531042822968308">"ასლები"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"ფურცლის ზომა"</string>
+    <string name="label_color" msgid="1108690305218188969">"ფერი"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"ორიენტაცია"</string>
+    <string name="label_pages" msgid="6300874667546617333">"გვერდები (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"მაგ. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"ნახვა ამობეჭდვამდე"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"გადახედვისთვის დააყენეთ PDF მნახველი"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"ბეჭდვის აპი ავარიულად გაითიშა"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"გვერდები"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"მიმდინარეობის ბეჭდვის დავალების შექმნა"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF-ად შენახვა"</string>
+    <string name="all_printers" msgid="5018829726861876202">"ყველა პრინტერი…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"ბეჭდვის სარკმელი"</string>
+    <string name="search" msgid="5421724265322228497">"ძიება"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"ყველა პრინტერი"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"სერვისის დამატება"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"საძიებო ველი ნაჩვენებია"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"საძიებო ველი დამალულია"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"პრინტერის დამატება"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"პრინტერის არჩევა"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"პრინტერის დავიწყება"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"ნაპოვნია <xliff:g id="COUNT">%1$s</xliff:g> პრინტერი"</item>
+    <item quantity="other" msgid="6533817036607128241">"ნაპოვნია <xliff:g id="COUNT">%1$s</xliff:g> პრინტერი"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"აირჩიეთ ბეჭდვის სერვისი"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"მიმდინარეობს პრინტერების ძიება"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"პრინტერები ვერ მოიძებნა"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"იბეჭდება <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"მიმდინარეობს <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>-ის გაუქმება"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"ბეჭდვის შეცდომა <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"პრინტერმა დაბლოკა <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"ბეჭდვის <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> დავალება"</item>
+    <item quantity="other" msgid="8746611264734222865">"ბეჭდვის <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> დავალება"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"გაუქმება"</string>
+    <string name="restart" msgid="2472034227037808749">"გადატვირთვა"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"პრინტერთან კავშირი არ არის"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"უცნობი"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – მიუწვდომელია"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"ბეჭდვის დავალების გენერაცია ვერ ხერხდება"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"შავ-თეთრი"</item>
+    <item msgid="2762241247228983754">"ფერი"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"პორტრეტი"</item>
+    <item msgid="3199660090246166812">"პეიზაჟის რეჟიმი"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"ყველა"</item>
+    <item msgid="6812869625222503603">"დიაპაზონი"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-km-rKH/strings.xml b/packages/PrintSpooler/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..c89f9bf
--- /dev/null
+++ b/packages/PrintSpooler/res/values-km-rKH/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"បោះពុម្ព​ស្ពូល័រ"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"ការ​កំណត់​ម៉ាស៊ីន​បោះពុម្ព"</string>
+    <string name="print_button" msgid="645164566271246268">"បោះពុម្ព"</string>
+    <string name="save_button" msgid="1921310454071758999">"រក្សាទុក"</string>
+    <string name="label_destination" msgid="9132510997381599275">"ទិសដៅ"</string>
+    <string name="label_copies" msgid="3634531042822968308">"ច្បាប់​ចម្លង"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"ទំហំ​ក្រដាស"</string>
+    <string name="label_color" msgid="1108690305218188969">"ពណ៌"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"ទិស"</string>
+    <string name="label_pages" msgid="6300874667546617333">"ទំព័រ (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"ឧ. 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"មើល​មុន​បោះពុម្ព"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"ដំឡើង​កម្មវិធី​មើល PDF សម្រាប់​ការ​មើល​ជា​មុន"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"កម្មវិធី​បោះពុម្ព​គាំង"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"ទំព័រ"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"​បង្កើត​ការ​ងារ​បោះពុម្ព"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"រក្សា​ទុក​ជា PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"ម៉ាស៊ីន​បោះពុម្ព​ទាំងអស់ ..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"ប្រអប់​បោះពុម្ព"</string>
+    <string name="search" msgid="5421724265322228497">"ស្វែងរក"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"ម៉ាស៊ីន​បោះពុម្ព​ទាំងអស់"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"បន្ថែម​សេវាកម្ម"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"បាន​បង្ហាញ​ប្រ​អប់​ស្វែងរក"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"បាន​លាក់​ប្រអប់​ស្វែងរក"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"បន្ថែម​ម៉ាស៊ីន​បោះពុម្ព"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"ជ្រើស​ម៉ាស៊ីន​បោះពុម្ព"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"ភ្លេច​​ម៉ាស៊ីន​បោះពុម្ព"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"រក​ឃើញ​ម៉ាស៊ីន​បោះពុម្ព <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+    <item quantity="other" msgid="6533817036607128241">"រក​ឃើញ​ម៉ាស៊ីន​បោះពុម្ព <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"ជ្រើស​សេវា​បោះពុម្ព"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"ស្វែងរក​ម៉ាស៊ីន​បោះពុម្ព"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"រក​មិន​ឃើញ​ម៉ាស៊ីន​បោះពុម្ព"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"កំពុង​​បោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"ការ​បោះបង់ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"កំហុស​ម៉ាស៊ីន​បោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"ម៉ាស៊ីន​បោះពុម្ព​បាន​ទប់ស្កាត់ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"ការងារ​បោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"ការងារ​បោះពុម្ព <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"បោះបង់"</string>
+    <string name="restart" msgid="2472034227037808749">"ចាប់ផ្ដើម​ឡើងវិញ"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"គ្មាន​​​ការ​ភ្ជាប់​ទៅ​ម៉ាស៊ីន​បោះពុម្ព"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"មិន​ស្គាល់"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – មិន​អាច​ប្រើ​បាន"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"មិន​អាច​បង្កើត​ការ​ងារ​បោះពុម្ព"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"ស &amp; ខ្មៅ"</item>
+    <item msgid="2762241247228983754">"ពណ៌"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"បញ្ឈរ"</item>
+    <item msgid="3199660090246166812">"ផ្ដេក"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"ទាំង​អស់"</item>
+    <item msgid="6812869625222503603">"ជួរ"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ko/strings.xml b/packages/PrintSpooler/res/values-ko/strings.xml
new file mode 100644
index 0000000..3b2fef7
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ko/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"인쇄 스풀러"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"프린터 설정"</string>
+    <string name="print_button" msgid="645164566271246268">"인쇄"</string>
+    <string name="save_button" msgid="1921310454071758999">"저장"</string>
+    <string name="label_destination" msgid="9132510997381599275">"대상"</string>
+    <string name="label_copies" msgid="3634531042822968308">"매수"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"용지 크기"</string>
+    <string name="label_color" msgid="1108690305218188969">"색상"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"방향"</string>
+    <string name="label_pages" msgid="6300874667546617333">"페이지 수(<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"예: 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"인쇄 미리보기"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"미리보기용 PDF 뷰어 설치"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"인쇄 앱에 오류 발생"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"페이지"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"인쇄 작업 생성 중"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF로 저장"</string>
+    <string name="all_printers" msgid="5018829726861876202">"모든 프린터…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"인쇄 대화상자"</string>
+    <string name="search" msgid="5421724265322228497">"검색"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"모든 프린터"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"서비스 추가"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"검색창 표시됨"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"검색창 숨겨짐"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"프린터 추가"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"프린터 선택"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"프린터 삭제"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"프린터 <xliff:g id="COUNT">%1$s</xliff:g>대 검색됨"</item>
+    <item quantity="other" msgid="6533817036607128241">"프린터 <xliff:g id="COUNT">%1$s</xliff:g>대 검색됨"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"인쇄 서비스 선택"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"프린터 검색 중"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"프린터 없음"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> 인쇄 중"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> 취소 중"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"프린터 오류: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"차단된 프린터: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 인쇄 작업"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 인쇄 작업"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"취소"</string>
+    <string name="restart" msgid="2472034227037808749">"다시 시작"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"프린터와 연결되지 않음"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"알 수 없음"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – 사용할 수 없음"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"인쇄 작업을 생성할 수 없습니다."</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"흑백"</item>
+    <item msgid="2762241247228983754">"컬러"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"세로"</item>
+    <item msgid="3199660090246166812">"가로"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"모두"</item>
+    <item msgid="6812869625222503603">"범위"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-lo-rLA/strings.xml b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..f954606
--- /dev/null
+++ b/packages/PrintSpooler/res/values-lo-rLA/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"ຕົວຈັດຄິວການພິມ"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"ການຕັ້ງຄ່າເຄື່ອງພິມ"</string>
+    <string name="print_button" msgid="645164566271246268">"ພິມ"</string>
+    <string name="save_button" msgid="1921310454071758999">"ບັນທຶກ"</string>
+    <string name="label_destination" msgid="9132510997381599275">"ປາຍທາງ"</string>
+    <string name="label_copies" msgid="3634531042822968308">"ສຳເນົາ"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"ຂະໜາດຂອງໜ້າເຈ້ຍ"</string>
+    <string name="label_color" msgid="1108690305218188969">"ສີ"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"ລວງ"</string>
+    <string name="label_pages" msgid="6300874667546617333">"(<xliff:g id="PAGE_COUNT">%1$s</xliff:g>) ໜ້າ"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"ຕົວຢ່າງ: 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"ເບິ່ງກ່ອນພິມ"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"ຕິດຕັ້ງໂປຼແກຼມເບິ່ງ PDF ເພື່ອເບິ່ງຕົວຢ່າງ"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"ແອັບຯພິມລົ້ມເຫລວ"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"ໜ້າ"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"ກຳລັງສ້າງວຽກພິມ"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"ບັນທຶກເປັ​​ນ PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"ທຸກເຄື່ອງພິມ..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"ໜ້າຕ່າງການພິມ"</string>
+    <string name="search" msgid="5421724265322228497">"ຊອກຫາ"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"ທຸກເຄື່ອງພິມ"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"ເພີ່ມບໍລິການ"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"ກ່ອງຊອກຫາຖືກສະແດງ"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"ກ່ອງຊອກຫາຖືກເຊື່ອງ"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"ເພີ່ມເຄື່ອງພິມ"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"ເລືອກເຄື່ອງພິມ"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"ລືມເຄື່ອງພິມ"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"ພົບ <xliff:g id="COUNT">%1$s</xliff:g> ເຄື່ອງພິມ"</item>
+    <item quantity="other" msgid="6533817036607128241">"ພົບ <xliff:g id="COUNT">%1$s</xliff:g> ເຄື່ອງພິມ"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"ເລືອກບໍລິການການພິມ"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"ກຳລັງຊອກຫາເຄື່ອງພິມ"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"ບໍ່ພົບເຄື່ອງພິມ"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"ກຳລັງພິມ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"ກຳລັງຍົກເລີກ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"ເຄື່ອງພິມເກີດຂໍ້ຜິດພາດ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"ເຄື່ອງພິມຖືກບລອກ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"ງານພິມ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"ງານພິມ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"ຍົກເລີກ"</string>
+    <string name="restart" msgid="2472034227037808749">"ປິດເປີດໃໝ່"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"ບໍ່ມີການເຊື່ອມຕໍ່ຫາເຄື່ອງພິມ"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"ບໍ່ຮູ້ຈັກ"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - ບໍ່ມີຢູ່"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"ບໍ່​ສາ​ມາດ​ສ້າງວຽກພິມໄດ້"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"ຂາວດຳ"</item>
+    <item msgid="2762241247228983754">"ສີ"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"ລວງຕັ້ງ"</item>
+    <item msgid="3199660090246166812">"ລວງນອນ"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"ທັງໝົດ"</item>
+    <item msgid="6812869625222503603">"ໄລຍະ"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-lt/strings.xml b/packages/PrintSpooler/res/values-lt/strings.xml
new file mode 100644
index 0000000..0c4e386
--- /dev/null
+++ b/packages/PrintSpooler/res/values-lt/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Spausdintuvo nustatymai"</string>
+    <string name="print_button" msgid="645164566271246268">"Spausdinti"</string>
+    <string name="save_button" msgid="1921310454071758999">"Išsaugoti"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Paskirties vieta"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopijos"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Popieriaus dydis"</string>
+    <string name="label_color" msgid="1108690305218188969">"Spalva"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientacija"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Puslapiai (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"pvz., 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Spaudinio peržiūra"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Įdiegti PDF peržiūros priemonę"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Spausdinimo programa užstrigo"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Puslapiai"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generuojama spausd. užduotis"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Išsaugoti kaip PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Visi spausdintuvai…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Spausdinimo dialogo langas"</string>
+    <string name="search" msgid="5421724265322228497">"Ieškoti"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Visi spausdintuvai"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Pridėti paslaugą"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Paieškos laukelis rodomas"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Paieškos laukelis paslėptas"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Pridėti spausdintuvą"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Pasirinkti spausdintuvą"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Pamiršti spausdintuvą"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Rasta spausdintuvų: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+    <item quantity="other" msgid="6533817036607128241">"Rasta spausdintuvų: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Pasirinkite spausdinimo paslaugą"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Ieškoma spausdintuvų"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nerasta spausdintuvų"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Spausdinama: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Atšaukiama: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Spausdintuvo klaida: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Spausdintuvas užblokavo: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Spausdinimo užduotis: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Spausdinimo užduotys: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Atšaukti"</string>
+    <string name="restart" msgid="2472034227037808749">"Paleisti iš naujo"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Nėra ryšio su spausdintuvu"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"nežinoma"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"„<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>“ – nepasiekiama"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Nepavyko sukurti spausdinimo užduoties"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Nespalvotas"</item>
+    <item msgid="2762241247228983754">"Spalva"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Stačias"</item>
+    <item msgid="3199660090246166812">"Gulsčias"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Visi"</item>
+    <item msgid="6812869625222503603">"Diapazonas"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-lv/strings.xml b/packages/PrintSpooler/res/values-lv/strings.xml
new file mode 100644
index 0000000..3fffdfe
--- /dev/null
+++ b/packages/PrintSpooler/res/values-lv/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Printera iestatījumi"</string>
+    <string name="print_button" msgid="645164566271246268">"Drukāt"</string>
+    <string name="save_button" msgid="1921310454071758999">"Saglabāt"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Galamērķis"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Eksemplāri"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Papīra izmērs"</string>
+    <string name="label_color" msgid="1108690305218188969">"Krāsa"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Virziens"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Lapas (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"piem., 1–5,8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Drukas priekšskatījums"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instalēt PDF skatītāju priekšskatīšanai"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Drukas lietotne avarēja"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Lapas"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Ģenerē drukas darbu…"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Saglabāt kā PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Visi printeri…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Drukāšanas dialoglodziņš"</string>
+    <string name="search" msgid="5421724265322228497">"Meklēt"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Visi printeri"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Pievienot pakalpojumu"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Meklēšanas lodziņš ir redzams."</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Meklēšanas lodziņš ir paslēpts."</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Pievienot printeri"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Atlasīt printeri"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Neatcerēties printeri"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Atrasts <xliff:g id="COUNT">%1$s</xliff:g> printeris"</item>
+    <item quantity="other" msgid="6533817036607128241">"Atrasti <xliff:g id="COUNT">%1$s</xliff:g> printeri"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Izvēlieties drukāšanas pakalpojumu"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Printeru meklēšana"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Netika atrasts neviens printeris."</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Notiek darba <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> drukāšana…"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Pārtrauc drukas darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Printera kļūda ar darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printeris bloķēja darbu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Drukas darbs <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Drukas darbi <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Atcelt"</string>
+    <string name="restart" msgid="2472034227037808749">"Restartēt"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Nav savienojuma ar printeri"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"nezināms"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> — nav pieejams"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Nevarēja ģenerēt drukas darbu"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Melnbalts"</item>
+    <item msgid="2762241247228983754">"Krāsa"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portrets"</item>
+    <item msgid="3199660090246166812">"Ainava"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Visi"</item>
+    <item msgid="6812869625222503603">"Diapazons"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-mn-rMN/strings.xml b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..e429387
--- /dev/null
+++ b/packages/PrintSpooler/res/values-mn-rMN/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Хэвлэгчийн буфер"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Принтерийн тохиргоо"</string>
+    <string name="print_button" msgid="645164566271246268">"Хэвлэх"</string>
+    <string name="save_button" msgid="1921310454071758999">"Хадгалах"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Хүлээн авагч"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Хуулбарууд"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Цаасны хэмжээ"</string>
+    <string name="label_color" msgid="1108690305218188969">"Өнгө"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Чиглэл"</string>
+    <string name="label_pages" msgid="6300874667546617333">"(<xliff:g id="PAGE_COUNT">%1$s</xliff:g>) хуудас"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"ж.нь. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Хэвлэхээр урьдчилан харах"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Урьдчилан харахын тулд PDF харагчийг суулгах"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Хэвлэгч апп гацсан"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Хуудас"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Хэвлэх ажил үүсгэж байна"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF болгож хадгалах"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Бүх принтерүүд…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Хэвлэх диалоги"</string>
+    <string name="search" msgid="5421724265322228497">"Хайх"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Бүх принтерүүд"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Үйлчилгээ нэмэх"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Хайлтын нүдийг гаргах"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Хайлтын нүдийг далдлах"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Принтер нэмэх"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Принтер сонгох"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Принтерийг мартах"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> принтер олдсон"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> принтер олдсон"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Хэвлэх үйлчилгээг сонгох"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Принтер хайж байна"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Принтер олдсонгүй"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Хэвлэж байна <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Цуцлаж байна <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Принтерийн алдаа <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Принтер хориглогдсон <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> хэвлэх ажил"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> хэвлэх ажлууд"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Цуцлах"</string>
+    <string name="restart" msgid="2472034227037808749">"Дахин эхлүүлэх"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Принтер холбогдоогүй байна"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"тодорхойгүй"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – ашиглах боломжгүй"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Хэвлэх ажлыг үүсгэж чадсангүй"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Хар &amp; Цагаан"</item>
+    <item msgid="2762241247228983754">"Өнгө"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Босоо"</item>
+    <item msgid="3199660090246166812">"Хэвтээ"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Бүгд"</item>
+    <item msgid="6812869625222503603">"Хүрээ"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ms-rMY/strings.xml b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..cca5d2c
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ms-rMY/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Penspul Cetakan"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Tetapan pencetak"</string>
+    <string name="print_button" msgid="645164566271246268">"Cetak"</string>
+    <string name="save_button" msgid="1921310454071758999">"Simpan"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destinasi"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Salinan"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Saiz Kertas"</string>
+    <string name="label_color" msgid="1108690305218188969">"Warna"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientasi"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Halaman (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"cth. 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Pratonton cetak"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Pasang pemapar PDF untuk pratonton"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Apl percetakan ranap"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Halaman"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Menjana kerja cetak"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Simpan sebagai PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Semua pencetak..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Dialog cetakan"</string>
+    <string name="search" msgid="5421724265322228497">"Cari"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Semua pencetak"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Tambahkan perkhidmatan"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Kotak carian ditunjukkan"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Kotak carian tersembunyi"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Tambah pencetak"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Pilih pencetak"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Lupakan pencetak"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> pencetak ditemui"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> pencetak ditemui"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Pilih perkhidmatan cetak"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Mencari pencetak"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Tiada pencetak ditemui"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Mencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Membatalkan <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Ralat pencetak <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Pencetak disekat <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Kerja cetakan <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Kerja cetakan <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Batal"</string>
+    <string name="restart" msgid="2472034227037808749">"Mulakan semula"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Tiada sambungan ke pencetak"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"tidak diketahui"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – tidak tersedia"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Tidak dapat menjana kerja cetakan"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Hitam &amp; Putih"</item>
+    <item msgid="2762241247228983754">"Warna"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Potret"</item>
+    <item msgid="3199660090246166812">"Landskap"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Semua"</item>
+    <item msgid="6812869625222503603">"Julat"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-nb/strings.xml b/packages/PrintSpooler/res/values-nb/strings.xml
new file mode 100644
index 0000000..f6a60c6
--- /dev/null
+++ b/packages/PrintSpooler/res/values-nb/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Utskriftskø"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Skriverinnstillinger"</string>
+    <string name="print_button" msgid="645164566271246268">"Skriv ut"</string>
+    <string name="save_button" msgid="1921310454071758999">"Lagre"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destinasjon"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopier"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Papirstørrelse"</string>
+    <string name="label_color" msgid="1108690305218188969">"Farge"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Retning"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Sider (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"f.eks. 1–5, 8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Utskriftsforhåndsvisning"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Installer PDF-leser for forhåndsvisning"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Utskriftsappen krasjet"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Sider"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Genererer utskriftsjobb"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Lagre som PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Alle skrivere"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Skriv ut dialog"</string>
+    <string name="search" msgid="5421724265322228497">"Søk"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Alle skrivere"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Legg til tjeneste"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Søkefeltet vises"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Søkefeltet er skjult"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Legg til skriver"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Velg skriver"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Glem skriveren"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> skriver ble funnet"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> skrivere ble funnet"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Velg utskriftstjeneste"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Søker etter skrivere"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Fant ingen skrivere"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Skriver ut <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Skriverfeil <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Skriveren blokkerte <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Utskriftsjobb for <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Utskriftsjobber for <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Avbryt"</string>
+    <string name="restart" msgid="2472034227037808749">"Start på nytt"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen forbindelse med skriveren"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"ukjent"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – utilgjengelig"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Kunne ikke generere utskriftsjobben"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Svart og hvitt"</item>
+    <item msgid="2762241247228983754">"Farge"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Stående"</item>
+    <item msgid="3199660090246166812">"Liggende"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Alle"</item>
+    <item msgid="6812869625222503603">"Område"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-nl/strings.xml b/packages/PrintSpooler/res/values-nl/strings.xml
new file mode 100644
index 0000000..dc12508
--- /dev/null
+++ b/packages/PrintSpooler/res/values-nl/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Afdrukspooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Printerinstellingen"</string>
+    <string name="print_button" msgid="645164566271246268">"Afdrukken"</string>
+    <string name="save_button" msgid="1921310454071758999">"Opslaan"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Bestemming"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Aantal exemplaren"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Papierformaat"</string>
+    <string name="label_color" msgid="1108690305218188969">"Kleur"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Stand"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pagina\'s (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"bijv. 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Afdrukvoorbeeld"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Pdf-viewer installeren voor voorbeeld"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Afdruk-app gecrasht"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pagina\'s"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Afdruktaak genereren"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Opslaan als pdf"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Alle printers…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Afdrukdialoogvenster"</string>
+    <string name="search" msgid="5421724265322228497">"Zoeken"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Alle printers"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Service toevoegen"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Zoekvak weergegeven"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Zoekvak verborgen"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Printer toevoegen"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Printer selecteren"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Printer vergeten"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer gevonden"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> printers gevonden"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Afdrukservice kiezen"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Printers zoeken"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Geen printers gevonden"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> afdrukken"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> annuleren"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Printerfout <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> geblokkeerd door printer"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> afdruktaak"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> afdruktaken"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Annuleren"</string>
+    <string name="restart" msgid="2472034227037808749">"Opnieuw starten"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Geen verbinding met printer"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"onbekend"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – niet beschikbaar"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Kan de afdruktaak niet genereren"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Zwart-wit"</item>
+    <item msgid="2762241247228983754">"Kleur"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portret"</item>
+    <item msgid="3199660090246166812">"Landschap"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Alle"</item>
+    <item msgid="6812869625222503603">"Bereik"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-pl/strings.xml b/packages/PrintSpooler/res/values-pl/strings.xml
new file mode 100644
index 0000000..81acc76
--- /dev/null
+++ b/packages/PrintSpooler/res/values-pl/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Bufor wydruku"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Ustawienia drukarki"</string>
+    <string name="print_button" msgid="645164566271246268">"Drukuj"</string>
+    <string name="save_button" msgid="1921310454071758999">"Zapisz"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Miejsce docelowe"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopie"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Rozmiar papieru"</string>
+    <string name="label_color" msgid="1108690305218188969">"Kolor"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientacja"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Strony (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"np. 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Podgląd wydruku"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Zainstaluj przeglądarkę PDF, by zobaczyć podgląd"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Aplikacja drukująca uległa awarii"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Strony"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generowanie zadania wydruku"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Zapisz jako PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Wszystkie drukarki…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Okno drukowania"</string>
+    <string name="search" msgid="5421724265322228497">"Szukaj"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Wszystkie drukarki"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj usługę"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Pole wyszukiwania jest widoczne"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Pole wyszukiwania jest ukryte"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Dodaj drukarkę"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Wybierz drukarkę"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Nie zapamiętuj drukarki"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Znaleziono <xliff:g id="COUNT">%1$s</xliff:g> drukarkę"</item>
+    <item quantity="other" msgid="6533817036607128241">"Znalezione drukarki: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Wybierz usługę drukowania"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Szukanie drukarek"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nie znaleziono drukarek"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Drukowanie: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Anulowanie: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Błąd drukarki: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Drukarka zablokowała <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> zadanie drukowania"</item>
+    <item quantity="other" msgid="8746611264734222865">"Zadania drukowania: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Anuluj"</string>
+    <string name="restart" msgid="2472034227037808749">"Od nowa"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Brak połączenia z drukarką"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"brak informacji"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – niedostępne"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Nie udało się wygenerować zadania drukowania"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Czarno-białe"</item>
+    <item msgid="2762241247228983754">"Kolor"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Pionowa"</item>
+    <item msgid="3199660090246166812">"Pozioma"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Wszystkie"</item>
+    <item msgid="6812869625222503603">"Zakres"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-pt-rPT/strings.xml b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..6bfc395
--- /dev/null
+++ b/packages/PrintSpooler/res/values-pt-rPT/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Definições da impressora"</string>
+    <string name="print_button" msgid="645164566271246268">"Imprimir"</string>
+    <string name="save_button" msgid="1921310454071758999">"Guardar"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destino"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Cópias"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Tamanho do papel"</string>
+    <string name="label_color" msgid="1108690305218188969">"Cor"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientação"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Páginas (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"p. ex. 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Pré-visualização de impressão"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instalar o leitor de PDF para pré-visualização"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"A aplicação de impressão bloqueou"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Páginas"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"A gerar tarefa de impressão"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Guardar como PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Todas as impressoras..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Caixa de diálogo de impressão"</string>
+    <string name="search" msgid="5421724265322228497">"Pesquisar"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Todas as impressoras"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Adicionar serviço"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Caixa de pesquisa apresentada"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Caixa de pesquisa ocultada"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Adicionar impressora"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Selecionar impressora"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Esquecer impressora"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> impressora encontrada"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> impressoras encontradas"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Escolher o serviço de impressão"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"A procurar impressoras"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nenhuma impressora encontrada"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"A imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"A cancelar <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Erro da impressora <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"A impressora bloqueou <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Tarefa de impressão: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Tarefas de impressão: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Cancelar"</string>
+    <string name="restart" msgid="2472034227037808749">"Reiniciar"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Sem ligação à impressora"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"desconhecido"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – indisponível"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Não foi possível gerar a tarefa de impressão"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Preto e branco"</item>
+    <item msgid="2762241247228983754">"Cor"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Vertical"</item>
+    <item msgid="3199660090246166812">"Horizontal"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Todas"</item>
+    <item msgid="6812869625222503603">"Intervalo"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-pt/strings.xml b/packages/PrintSpooler/res/values-pt/strings.xml
new file mode 100644
index 0000000..82c157d
--- /dev/null
+++ b/packages/PrintSpooler/res/values-pt/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Sp. de impressão"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Configur. da impressora"</string>
+    <string name="print_button" msgid="645164566271246268">"Imprimir"</string>
+    <string name="save_button" msgid="1921310454071758999">"Salvar"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destino"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Cópias"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Tamanho do papel"</string>
+    <string name="label_color" msgid="1108690305218188969">"Cor"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientação"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Páginas (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"Ex.: 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Visualização de impressão"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instalar o visualizador de PDF"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"O aplicativo de impressão falhou"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Páginas"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Gerando trabalho de impressão"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Salvar como PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Todas as impressoras…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Diálogo de impressão"</string>
+    <string name="search" msgid="5421724265322228497">"Pesquisar"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Todas as impressoras"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Adicionar serviço"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Caixa de pesquisa exibida"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Caixa de pesquisa oculta"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Adicionar impressora"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Selecionar impressora"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Esquecer impressora"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> impressora encontrada"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> impressoras encontradas"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Selecione o serviço de impressão"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Procurando impressoras"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nenhuma impressora encontrada"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Imprimindo <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Cancelando <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Erro ao imprimir <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"A impressora bloqueou <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Trabalho de impressão <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Trabalhos de impressão <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Cancelar"</string>
+    <string name="restart" msgid="2472034227037808749">"Reiniciar"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Sem conexão com a impressora"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"desconhecido"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – não disponível"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Não foi possível gerar o trabalho de impressão"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Preto e branco"</item>
+    <item msgid="2762241247228983754">"Cor"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Retrato"</item>
+    <item msgid="3199660090246166812">"Paisagem"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Todas"</item>
+    <item msgid="6812869625222503603">"Intervalo"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ro/strings.xml b/packages/PrintSpooler/res/values-ro/strings.xml
new file mode 100644
index 0000000..79c3bdc
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ro/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Derulator print."</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Setările imprimantei"</string>
+    <string name="print_button" msgid="645164566271246268">"Printați"</string>
+    <string name="save_button" msgid="1921310454071758999">"Salvați"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destinație"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Copii"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Formatul hârtiei"</string>
+    <string name="label_color" msgid="1108690305218188969">"Color"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientare"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Pagini (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"de ex. 1-5, 8, 11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Previzualizați printarea"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Instalați PDF viewer pentru previzualizare"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Aplicația de printare s-a blocat"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Pagini"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Se generează sarcină printare"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Salvați ca PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Toate imprimantele..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Caseta de dialog de printare"</string>
+    <string name="search" msgid="5421724265322228497">"Căutați"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Toate imprimantele"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Adăugați un serviciu"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Caseta de căutare este afișată"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Caseta de căutare este ascunsă"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Adăugați o imprimantă"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Selectați imprimanta"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Omiteți imprimanta"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> imprimantă găsită"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> (de) imprimante găsite"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Alegeți serviciul de printare"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Se caută imprimante"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nu au fost găsite imprimante"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Se printează <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Se anulează <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Eroare de printare: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printare blocată: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Sarcină de printare <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Sarcini de printare <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Anulați"</string>
+    <string name="restart" msgid="2472034227037808749">"Reporniți"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Nu există conexiune la o imprimantă"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"necunoscut"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - indisponibil"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Nu s-a putut genera sarcina de printare"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Alb-negru"</item>
+    <item msgid="2762241247228983754">"Color"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portret"</item>
+    <item msgid="3199660090246166812">"Peisaj"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Toate"</item>
+    <item msgid="6812869625222503603">"Interval"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-ru/strings.xml b/packages/PrintSpooler/res/values-ru/strings.xml
new file mode 100644
index 0000000..a27f3c8
--- /dev/null
+++ b/packages/PrintSpooler/res/values-ru/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Спулер печати"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Настройки принтера"</string>
+    <string name="print_button" msgid="645164566271246268">"Печать"</string>
+    <string name="save_button" msgid="1921310454071758999">"Сохранить"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Принтер"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Копии"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Формат"</string>
+    <string name="label_color" msgid="1108690305218188969">"Печать"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Ориентация"</string>
+    <string name="label_pages" msgid="6300874667546617333">"СТРАНИЦЫ (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"напр., 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Предварительный просмотр"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Установить средство просмотра PDF"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Сбой приложения печати"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Количество страниц"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Создание задания печати…"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Сохранить как PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Все принтеры"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Диалоговое окно печати"</string>
+    <string name="search" msgid="5421724265322228497">"Поиск"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Все принтеры"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Добавить службу печати"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Окно поиска показано"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Окно поиска скрыто"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Добавить принтер"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Выбрать принтер"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Удалить принтер"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Найден <xliff:g id="COUNT">%1$s</xliff:g> принтер"</item>
+    <item quantity="other" msgid="6533817036607128241">"Найдено принтеров: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Выберите службу печати"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Поиск принтеров…"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Ничего не найдено"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Печать задания \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\"…"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отмена задания <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>…"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Ошибка задания \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Задание \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" заблокировано"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Задание печати: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Задания печати: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Отмена"</string>
+    <string name="restart" msgid="2472034227037808749">"Повторить"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Нет связи с принтером"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"неизвестно"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – недоступен"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Не удалось отправить документ на печать."</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Черно-белая"</item>
+    <item msgid="2762241247228983754">"Цветная"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Книга"</item>
+    <item msgid="3199660090246166812">"Альбом"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Все"</item>
+    <item msgid="6812869625222503603">"Диапазон"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-sk/strings.xml b/packages/PrintSpooler/res/values-sk/strings.xml
new file mode 100644
index 0000000..39a022d
--- /dev/null
+++ b/packages/PrintSpooler/res/values-sk/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Zaraďovač tlače"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Nastavenia tlačiarne"</string>
+    <string name="print_button" msgid="645164566271246268">"Tlačiť"</string>
+    <string name="save_button" msgid="1921310454071758999">"Uložiť"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Cieľ"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kópie"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Veľkosť papiera"</string>
+    <string name="label_color" msgid="1108690305218188969">"Farba"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientácia"</string>
+    <string name="label_pages" msgid="6300874667546617333">"STRÁNKY (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"napr. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Ukážka pred tlačou"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Inštalovať zobrazovač PDF na zobrazenie ukážky"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Aplikácia pre tlač zlyhala"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Strany"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Generuje sa tlačová úloha"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Uložiť ako PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Všetky tlačiarne..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Dialógové okno tlače"</string>
+    <string name="search" msgid="5421724265322228497">"VYHĽADÁVANIE"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Všetky tlačiarne"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Pridať službu"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Vyhľadávacie pole sa zobrazuje"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Vyhľadávacie pole je skryté"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Pridať tlačiareň"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Vybrať tlačiareň"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Odstrániť tlačiareň"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Našla sa <xliff:g id="COUNT">%1$s</xliff:g> tlačiareň"</item>
+    <item quantity="other" msgid="6533817036607128241">"Počet nájdených tlačiarní: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Výber tlačovej služby"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Vyhľadávanie tlačiarní"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Nenašli sa žiadne tlačiarne"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Prebieha tlač úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Prebieha zrušenie úlohy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Chyba tlačiarne – úloha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tlačiareň zablok. úlohu <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Počet tlačových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Počet tlačových úloh: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Zrušiť"</string>
+    <string name="restart" msgid="2472034227037808749">"Spustiť znova"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Žiadne pripojenie k tlačiarni"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"neznáme"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – nie je k dispozícii"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Tlačovú úlohu nie je možné vytvoriť"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Čiernobiele"</item>
+    <item msgid="2762241247228983754">"Farba"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Na výšku"</item>
+    <item msgid="3199660090246166812">"Na šírku"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Všetky"</item>
+    <item msgid="6812869625222503603">"Rozsah"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-sl/strings.xml b/packages/PrintSpooler/res/values-sl/strings.xml
new file mode 100644
index 0000000..e299508
--- /dev/null
+++ b/packages/PrintSpooler/res/values-sl/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Tisk. v ozadju"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Nastavitve tiskalnika"</string>
+    <string name="print_button" msgid="645164566271246268">"Natisni"</string>
+    <string name="save_button" msgid="1921310454071758999">"Shrani"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Cilj"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Št. kopij"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Velikost papirja"</string>
+    <string name="label_color" msgid="1108690305218188969">"Barvno"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Postavitev"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Št. strani (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"npr. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Predogled tiskanja"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Za predogled namestite pregledovalnik za PDF-je"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Aplikacija za tiskanje se je zrušila"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Št. strani:"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Ustvarjanje zahteve za tisk"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Shrani kot PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Vsi tiskalniki …"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Pogovorno okno za tiskanje"</string>
+    <string name="search" msgid="5421724265322228497">"Iskanje"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Vsi tiskalniki"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Dodaj storitev"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Iskalno polje je prikazano"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Iskalno polje je skrito"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Dodajanje tiskalnika"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Izbira tiskalnika"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Odstranitev tiskalnika"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Najden <xliff:g id="COUNT">%1$s</xliff:g> tiskalnik"</item>
+    <item quantity="other" msgid="6533817036607128241">"Število najdenih tiskalnikov: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Izberite tiskalno storitev"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Iskanje tiskalnikov"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Tiskalnikov ni mogoče najti"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Tiskanje: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Preklic: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Napaka tiskalnika: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Tiskalnik je blokiral <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Tiskalno opravilo: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Tiskalna opravila: <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Prekliči"</string>
+    <string name="restart" msgid="2472034227037808749">"Začni znova"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Ni povezave s tiskalnikom"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"neznano"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – ni na voljo"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Tiskalnega opravila ni bilo mogoče ustvariti"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Črno-belo"</item>
+    <item msgid="2762241247228983754">"Barvno"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Pokončno"</item>
+    <item msgid="3199660090246166812">"Ležeče"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Vse"</item>
+    <item msgid="6812869625222503603">"Obseg"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-sr/strings.xml b/packages/PrintSpooler/res/values-sr/strings.xml
new file mode 100644
index 0000000..cbab1a6
--- /dev/null
+++ b/packages/PrintSpooler/res/values-sr/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Штамп. из мемор."</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Подешавања штампача"</string>
+    <string name="print_button" msgid="645164566271246268">"Штампај"</string>
+    <string name="save_button" msgid="1921310454071758999">"Сачувај"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Одредиште"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Копије"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Величина папира"</string>
+    <string name="label_color" msgid="1108690305218188969">"Боја"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Положај"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Странице (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"нпр. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Преглед пре штампања"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Инсталирај PDF приказивач за преглед"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Апликација за штампање је отказала"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Странице"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Генерисање задатка за штампање"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Сачувај као PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Сви штампачи…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Дијалог за штампање"</string>
+    <string name="search" msgid="5421724265322228497">"Претражи"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Сви штампачи"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Додај услугу"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Оквир за претрагу је приказан"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Оквир за претрагу је сакривен"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Додај штампач"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Изабери штампач"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Заборави штампач"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Пронађен је <xliff:g id="COUNT">%1$s</xliff:g> штампач"</item>
+    <item quantity="other" msgid="6533817036607128241">"Пронађено је <xliff:g id="COUNT">%1$s</xliff:g> штампача"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Изаберите услугу штампања"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Претрага штампача"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Није пронађен ниједан штампач"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Штампа се <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Отказује се <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Грешка штампача <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Штампач је блокирао <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Задатак штампања <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Задаци штампања <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Откажи"</string>
+    <string name="restart" msgid="2472034227037808749">"Поново покрени"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Нема везе са штампачем"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"непознато"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – недоступан"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Није могуће генерисати задатак за штампање"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Црно-бело"</item>
+    <item msgid="2762241247228983754">"Боја"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Усправно"</item>
+    <item msgid="3199660090246166812">"Водоравно"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Све"</item>
+    <item msgid="6812869625222503603">"Опсег"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-sv/strings.xml b/packages/PrintSpooler/res/values-sv/strings.xml
new file mode 100644
index 0000000..2286fce
--- /dev/null
+++ b/packages/PrintSpooler/res/values-sv/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Utskriftskö"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Skrivarinställningar"</string>
+    <string name="print_button" msgid="645164566271246268">"Skriv ut"</string>
+    <string name="save_button" msgid="1921310454071758999">"Spara"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Destination"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopior"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Pappersstorlek"</string>
+    <string name="label_color" msgid="1108690305218188969">"Färg"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Orientering"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Sidor (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"t.ex. 1–5,8,11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Förhandsgranskning"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Installera PDF-läsare för förhandsgranskning"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Utskriftsappen kraschade"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Sidor"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Genererar utskriftsjobb"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Spara som PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Alla skrivare ..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Dialogrutan Skriv ut"</string>
+    <string name="search" msgid="5421724265322228497">"Sök"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Alla skrivare"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Lägg till tjänst"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Sökrutan visas"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Sökrutan är dold"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Lägg till skrivare"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Välj en skrivare"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Ta bort en skrivare"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> skrivare hittades"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> skrivare hittades"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Välj utskriftstjänst"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Söker efter skrivare"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Det gick inte att hitta några skrivare"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Skriver ut <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Avbryter <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Skrivarfel för <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Skrivaren har blockerat <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Utskriftsjobb – <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Utskriftsjobb – <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Avbryt"</string>
+    <string name="restart" msgid="2472034227037808749">"Starta om"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Ingen anslutning till skrivaren"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"okänt"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – inte tillgänglig"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Det gick inte att skapa utskriftsjobbet"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Svartvit"</item>
+    <item msgid="2762241247228983754">"Färg"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Stående"</item>
+    <item msgid="3199660090246166812">"Liggande"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Alla"</item>
+    <item msgid="6812869625222503603">"Intervall"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-sw/strings.xml b/packages/PrintSpooler/res/values-sw/strings.xml
new file mode 100644
index 0000000..a84e9b3
--- /dev/null
+++ b/packages/PrintSpooler/res/values-sw/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Programu ya kuandaa Printa kwa ajili ya Kuchapisha"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Mipangilio ya printa"</string>
+    <string name="print_button" msgid="645164566271246268">"Chapisha"</string>
+    <string name="save_button" msgid="1921310454071758999">"Hifadhi"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Itakapofika"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Nakala"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Ukubwa wa Karatasi"</string>
+    <string name="label_color" msgid="1108690305218188969">"Rangi"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Mkao"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Kurasa (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"k.m. 1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Chungulia kwanza kabla ya kuchapisha"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Sakinisha kitazamaji cha PDF kwa onyesho la kuchungulia"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Programu ya kuchapisha imeacha kufanya kazi"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Kurasa"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Inaleta kazi ya kuchapisha"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Hifadhi kama PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Printa zote..."</string>
+    <string name="print_dialog" msgid="32628687461331979">"Chapisha mazungumzo"</string>
+    <string name="search" msgid="5421724265322228497">"Tafuta"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Printa zote"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Ongeza huduma"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Kisanduku cha kutafutia kimeonyeshwa"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Kisanduku cha kutafutia kimefichwa"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Ongeza printa"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Chagua printa"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Sahau printa"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Printa <xliff:g id="COUNT">%1$s</xliff:g> imepatikana"</item>
+    <item quantity="other" msgid="6533817036607128241">"Printa <xliff:g id="COUNT">%1$s</xliff:g> zimepatikana"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Chagua huduma ya printa"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Inatafuta printa"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Hakuna printa zilizopatikana"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Inachapisha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Inaghairi <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Hitilafu ya kuchapisha <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Printa imefungwa <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Kazi ya kuchapisha ya <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Kazi za kuchapisha za <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Ghairi"</string>
+    <string name="restart" msgid="2472034227037808749">"Anzisha upya"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Hakuna muunganisho kwa printa"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"haijulikani"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - haipatikani"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Haikuweza kuleta kazi ya kuchapisha"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Nyeusi na Nyeupe"</item>
+    <item msgid="2762241247228983754">"Rangi"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Wima"</item>
+    <item msgid="3199660090246166812">"Mlalo"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Zote"</item>
+    <item msgid="6812869625222503603">"Masafa"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-th/strings.xml b/packages/PrintSpooler/res/values-th/strings.xml
new file mode 100644
index 0000000..aa01d6f
--- /dev/null
+++ b/packages/PrintSpooler/res/values-th/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"การตั้งค่าเครื่องพิมพ์"</string>
+    <string name="print_button" msgid="645164566271246268">"พิมพ์"</string>
+    <string name="save_button" msgid="1921310454071758999">"บันทึก"</string>
+    <string name="label_destination" msgid="9132510997381599275">"ปลายทาง"</string>
+    <string name="label_copies" msgid="3634531042822968308">"สำเนา"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"ขนาดของกระดาษ"</string>
+    <string name="label_color" msgid="1108690305218188969">"สี"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"การวางแนว"</string>
+    <string name="label_pages" msgid="6300874667546617333">"หน้า (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"เช่น 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"ตัวอย่างก่อนพิมพ์"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"ติดตั้งโปรแกรมดู PDF เพื่อดูหน้าตัวอย่าง"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"แอปการพิมพ์ขัดข้อง"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"หน้า"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"กำลังสร้างงานพิมพ์"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"บันทึกเป็น PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"เครื่องพิมพ์ทั้งหมด…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"ช่องโต้ตอบการพิมพ์"</string>
+    <string name="search" msgid="5421724265322228497">"ค้นหา"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"เครื่องพิมพ์ทั้งหมด"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"เพิ่มบริการ"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"แสดงช่องค้นหาอยู่"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"ซ่อนช่องค้นหาอยู่"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"เพิ่มเครื่องพิมพ์"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"เลือกเครื่องพิมพ์"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"ไม่ต้องจำเครื่องพิมพ์"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"พบเครื่องพิมพ์ <xliff:g id="COUNT">%1$s</xliff:g> เครื่อง"</item>
+    <item quantity="other" msgid="6533817036607128241">"พบเครื่องพิมพ์ <xliff:g id="COUNT">%1$s</xliff:g> เครื่อง"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"เลือกบริการพิมพ์"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"กำลังค้นหาเครื่องพิมพ์"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"ไม่พบเครื่องพิมพ์"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"กำลังพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"กำลังยกเลิก <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"ข้อผิดพลาดเครื่องพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"เครื่องพิมพ์ได้บล็อก <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"งานพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"งานพิมพ์ <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"ยกเลิก"</string>
+    <string name="restart" msgid="2472034227037808749">"เริ่มต้นใหม่"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"ไม่มีการเชื่อมต่อไปยังเครื่องพิมพ์"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"ไม่ทราบ"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ไม่พร้อมใช้งาน"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"ไม่สามารถสร้างงานพิมพ์"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"ขาวดำ"</item>
+    <item msgid="2762241247228983754">"สี"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"แนวตั้ง"</item>
+    <item msgid="3199660090246166812">"แนวนอน"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"ทั้งหมด"</item>
+    <item msgid="6812869625222503603">"ช่วง"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-tl/strings.xml b/packages/PrintSpooler/res/values-tl/strings.xml
new file mode 100644
index 0000000..a72c937
--- /dev/null
+++ b/packages/PrintSpooler/res/values-tl/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Mga setting ng printer"</string>
+    <string name="print_button" msgid="645164566271246268">"I-print"</string>
+    <string name="save_button" msgid="1921310454071758999">"I-save"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Patutunguhan"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Mga Kopya"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Laki ng Papel"</string>
+    <string name="label_color" msgid="1108690305218188969">"Kulay"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Oryentasyon"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Mga Pahina (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"hal. 1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Preview sa pag-print"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Mag-install ng PDF viewer para sa pag-preview"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Nag-crash ang app sa pag-print"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Mga Pahina"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Gumagawa ng pag-print"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"I-save bilang PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Lahat ng printer…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Dialog ng pag-print"</string>
+    <string name="search" msgid="5421724265322228497">"Hanapin"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Lahat ng printer"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Magdagdag ng serbisyo"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Ipinapakita ang box para sa paghahanap"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Nakatago ang box para sa paghahanap"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Magdagdag ng printer"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Piliin ang printer"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Kalimutan ang printer"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> printer ang nakita"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> (na) printer ang nakita"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Pumili ng serbisyo ng pag-print"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Naghahanap ng mga printer"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Walang mga printer na nakita"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Pini-print ang <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Kinakansela ang <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Error sa printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Naka-block ang Printer <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Pag-print ng <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Mga pag-print ng <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Kanselahin"</string>
+    <string name="restart" msgid="2472034227037808749">"I-restart"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Hindi nakakonekta sa printer"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"hindi alam"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – hindi available"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Hindi mabuo ang pag-print"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Black &amp; White"</item>
+    <item msgid="2762241247228983754">"Kulay"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Portrait"</item>
+    <item msgid="3199660090246166812">"Landscape"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Lahat"</item>
+    <item msgid="6812869625222503603">"Sakop"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-tr/strings.xml b/packages/PrintSpooler/res/values-tr/strings.xml
new file mode 100644
index 0000000..c6e302d
--- /dev/null
+++ b/packages/PrintSpooler/res/values-tr/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Yazıcı ayarları"</string>
+    <string name="print_button" msgid="645164566271246268">"Yazdır"</string>
+    <string name="save_button" msgid="1921310454071758999">"Kaydet"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Hedef"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Kopya sayısı"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Kağıt Boyutu"</string>
+    <string name="label_color" msgid="1108690305218188969">"Renkli"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Sayfa yönü"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Sayfa (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"ör. 1-5,8,11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Yazdırmayı önizle"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Önizlemek için PDF görüntüleyici yükleyin"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Yazdırma uygulaması kilitlendi"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Sayfa"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Yazdırma işi oluşturuluyor"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"PDF olarak kaydet"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Tüm yazıcılar…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Yazdırma iletişim kutusu"</string>
+    <string name="search" msgid="5421724265322228497">"Ara"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Tüm yazıcılar"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Hizmet ekle"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Arama kutusu gösteriliyor"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Arama kutusu gizli"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Yazıcı ekle"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Yazıcı seç"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Yazıcıyı unut"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> yazıcı bulundu"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> yazıcı bulundu"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Yazdırma hizmetini seçin"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Yazıcılar aranıyor"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Yazıcı bulunamadı"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> yazdırılıyor"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> iptal ediliyor"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Yazıcı hatası: <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Yazıcı <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> işini engelledi"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> yazdırma işi"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> yazdırma işleri"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"İptal"</string>
+    <string name="restart" msgid="2472034227037808749">"Yeniden başlat"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Yazıcı bağlantısı yok"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"bilinmiyor"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – kullanılamıyor"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Yazdırma işi oluşturulamadı"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Siyah Beyaz"</item>
+    <item msgid="2762241247228983754">"Renkli"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Dikey"</item>
+    <item msgid="3199660090246166812">"Yatay"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Tümü"</item>
+    <item msgid="6812869625222503603">"Aralık"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-uk/strings.xml b/packages/PrintSpooler/res/values-uk/strings.xml
new file mode 100644
index 0000000..4f526d0
--- /dev/null
+++ b/packages/PrintSpooler/res/values-uk/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Налаштування принтера"</string>
+    <string name="print_button" msgid="645164566271246268">"Друк"</string>
+    <string name="save_button" msgid="1921310454071758999">"Зберегти"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Місце признач-ня"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Копії"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Розмір паперу"</string>
+    <string name="label_color" msgid="1108690305218188969">"Колір"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Орієнтація"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Сторінки (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"напр.,1–5, 8, 11–13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Версія для друку"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Установити засіб перегляду PDF"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Програма друку аварійно завершила роботу"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Сторінки"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Створюється завдання друку"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Зберегти як PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Усі принтери…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Діалогове вікно друку"</string>
+    <string name="search" msgid="5421724265322228497">"Пошук"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Усі принтери"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Додати службу"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Вікно пошуку показано"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Вікно пошуку сховано"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Додати принтер"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Вибрати принтер"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Ігнорувати принтер"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Знайдено принтерів: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+    <item quantity="other" msgid="6533817036607128241">"Знайдено принтерів: <xliff:g id="COUNT">%1$s</xliff:g>"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Вибрати службу друку"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Пошук принтерів"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Принтери не знайдено"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" друкується"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" скасовується"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Помилка завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\""</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" заблоковано"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Завдання друку <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Завдання друку <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Скасувати"</string>
+    <string name="restart" msgid="2472034227037808749">"Перезапустити"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Немає з’єднання з принтером"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"невідомо"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"Завдання \"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>\" не доступне"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Не вдалося створити завдання друку"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Чорно-білий"</item>
+    <item msgid="2762241247228983754">"Колір"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Книжкова"</item>
+    <item msgid="3199660090246166812">"Альбомна"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Усі"</item>
+    <item msgid="6812869625222503603">"Діапазон"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-vi/strings.xml b/packages/PrintSpooler/res/values-vi/strings.xml
new file mode 100644
index 0000000..d21172c
--- /dev/null
+++ b/packages/PrintSpooler/res/values-vi/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Print Spooler"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Cài đặt máy in"</string>
+    <string name="print_button" msgid="645164566271246268">"In"</string>
+    <string name="save_button" msgid="1921310454071758999">"Lưu"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Đích"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Bản sao"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Kích thước trang"</string>
+    <string name="label_color" msgid="1108690305218188969">"Màu"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Hướng"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Trang (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"Ví dụ: 1—5, 8, 11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Xem trước bản in"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Cài đặt trình xem PDF để xem trước"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Ứng dụng in gặp lỗi"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Trang"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Đang tạo lệnh in"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Lưu dưới dạng PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Tất cả máy in…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Hộp thoại in"</string>
+    <string name="search" msgid="5421724265322228497">"Tìm kiếm"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Tất cả máy in"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Thêm dịch vụ"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Hiển thị hộp tìm kiếm"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Ẩn hộp tìm kiếm"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Thêm máy in"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Chọn máy in"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Bỏ qua máy in"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"Đã tìm thấy <xliff:g id="COUNT">%1$s</xliff:g> máy in"</item>
+    <item quantity="other" msgid="6533817036607128241">"Đã tìm thấy <xliff:g id="COUNT">%1$s</xliff:g> máy in"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Chọn dịch vụ in"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Đang tìm kiếm máy in"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Không tìm thấy máy in"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"In <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Hủy <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Lỗi máy in <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Máy in đã chặn <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"Lệnh in <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+    <item quantity="other" msgid="8746611264734222865">"Lệnh in <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Hủy"</string>
+    <string name="restart" msgid="2472034227037808749">"Bắt đầu lại"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Không có kết nối nào với máy in"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"không xác định"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – không khả dụng"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Không thể tạo lệnh in"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Đen trắng"</item>
+    <item msgid="2762241247228983754">"Màu"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Dọc"</item>
+    <item msgid="3199660090246166812">"Ngang"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Tất cả"</item>
+    <item msgid="6812869625222503603">"Dãy"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-zh-rCN/arrays.xml b/packages/PrintSpooler/res/values-zh-rCN/arrays.xml
deleted file mode 100644
index 4fc75db..0000000
--- a/packages/PrintSpooler/res/values-zh-rCN/arrays.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-<resources>
-
-    <string-array name="pdf_printer_media_sizes" translatable="false">
-        <item>ROC_8K</item>
-        <item>ROC_16K</item>
-        <item>PRC_1</item>
-        <item>PRC_2</item>
-        <item>PRC_3</item>
-        <item>PRC_4</item>
-        <item>PRC_5</item>
-        <item>PRC_6</item>
-        <item>PRC_7</item>
-        <item>PRC_8</item>
-        <item>PRC_9</item>
-        <item>PRC_10</item>
-        <item>PRC_16K</item>
-        <item>OM_PA_KAI</item>
-        <item>OM_DAI_PA_KAI</item>
-        <item>OM_JUURO_KU_KAI</item>
-    </string-array>
-
-</resources>
diff --git a/packages/PrintSpooler/res/values-zh-rCN/strings.xml b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..e43ea60
--- /dev/null
+++ b/packages/PrintSpooler/res/values-zh-rCN/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"打印处理服务"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"打印机设置"</string>
+    <string name="print_button" msgid="645164566271246268">"打印"</string>
+    <string name="save_button" msgid="1921310454071758999">"保存"</string>
+    <string name="label_destination" msgid="9132510997381599275">"目的地"</string>
+    <string name="label_copies" msgid="3634531042822968308">"份数"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"纸张尺寸"</string>
+    <string name="label_color" msgid="1108690305218188969">"颜色"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"方向"</string>
+    <string name="label_pages" msgid="6300874667546617333">"页数 (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"例如：1-5、8、11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"打印预览"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"安装 PDF 查看器以便预览"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"打印应用崩溃了"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"页数"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"正在生成打印作业"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"保存为 PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"所有打印机…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"打印对话框"</string>
+    <string name="search" msgid="5421724265322228497">"搜索"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"所有打印机"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"添加服务"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"搜索框已显示"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"搜索框已隐藏"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"添加打印机"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"选择打印机"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"取消保存打印机"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"找到<xliff:g id="COUNT">%1$s</xliff:g>台打印机"</item>
+    <item quantity="other" msgid="6533817036607128241">"找到<xliff:g id="COUNT">%1$s</xliff:g>台打印机"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"选择打印服务"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜索打印机"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"找不到打印机"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"正在打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"打印机在打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”时出错"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"打印机拒绝打印“<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>”"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"“<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>”打印作业"</item>
+    <item quantity="other" msgid="8746611264734222865">"“<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g>”打印作业"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"取消"</string>
+    <string name="restart" msgid="2472034227037808749">"重新开始"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"未与打印机建立连接"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"未知"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> - 无法使用"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"无法生成打印作业"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"黑白"</item>
+    <item msgid="2762241247228983754">"彩色"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"纵向"</item>
+    <item msgid="3199660090246166812">"横向"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"全部"</item>
+    <item msgid="6812869625222503603">"范围"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-zh-rHK/strings.xml b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..2c2422a9
--- /dev/null
+++ b/packages/PrintSpooler/res/values-zh-rHK/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"列印多工緩衝處理器"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"打印機設定"</string>
+    <string name="print_button" msgid="645164566271246268">"列印"</string>
+    <string name="save_button" msgid="1921310454071758999">"儲存"</string>
+    <string name="label_destination" msgid="9132510997381599275">"目的地"</string>
+    <string name="label_copies" msgid="3634531042822968308">"份數"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"紙張大小"</string>
+    <string name="label_color" msgid="1108690305218188969">"顏色"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"方向"</string>
+    <string name="label_pages" msgid="6300874667546617333">"頁數 (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"例如：1-5,8,11-13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"預覽列印"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"安裝預覽所需的 PDF 檢視器"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"列印應用程式當機了"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"頁數"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"正在產生列印工作"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"儲存為 PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"所有打印機…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"列印對話方塊"</string>
+    <string name="search" msgid="5421724265322228497">"搜尋"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"所有打印機"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"新增服務"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"搜尋框已顯示"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"搜尋框已隱藏"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"新增打印機"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"選取打印機"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"移除打印機"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 部打印機"</item>
+    <item quantity="other" msgid="6533817036607128241">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 部打印機"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜尋打印機"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"找不到打印機"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"正在列印 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"打印機錯誤：<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"打印機已封鎖 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"一項 <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 列印工作"</item>
+    <item quantity="other" msgid="8746611264734222865">"多項 <xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 列印工作"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"取消"</string>
+    <string name="restart" msgid="2472034227037808749">"重新開始"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"尚未與打印機連線"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"不明"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – 無法使用"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"無法產生列印工作"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"黑白"</item>
+    <item msgid="2762241247228983754">"彩色"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"直向"</item>
+    <item msgid="3199660090246166812">"橫向"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"全部"</item>
+    <item msgid="6812869625222503603">"範圍"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-zh-rTW/strings.xml b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
new file mode 100644
index 0000000..0fe88d9
--- /dev/null
+++ b/packages/PrintSpooler/res/values-zh-rTW/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"列印多工緩衝處理器"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"印表機設定"</string>
+    <string name="print_button" msgid="645164566271246268">"列印"</string>
+    <string name="save_button" msgid="1921310454071758999">"儲存"</string>
+    <string name="label_destination" msgid="9132510997381599275">"目的地"</string>
+    <string name="label_copies" msgid="3634531042822968308">"份數"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"紙張大小"</string>
+    <string name="label_color" msgid="1108690305218188969">"色彩"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"方向"</string>
+    <string name="label_pages" msgid="6300874667546617333">"頁數 (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"例如：1—5,8,11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"列印預覽"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"安裝預覽所需的 PDF 檢視器"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"列印應用程式當機了"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"頁數"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"正在產生列印工作"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"儲存為 PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"所有印表機…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"印表機對話方塊"</string>
+    <string name="search" msgid="5421724265322228497">"搜尋"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"所有印表機"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"新增服務"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"搜尋框已顯示"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"搜尋框已隱藏"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"新增印表機"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"選取印表機"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"移除印表機"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 台印表機"</item>
+    <item quantity="other" msgid="6533817036607128241">"找到 <xliff:g id="COUNT">%1$s</xliff:g> 台印表機"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"選擇列印服務"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"正在搜尋印表機"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"找不到印表機"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"正在列印 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"正在取消 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"印表機發生錯誤：<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"印表機封鎖了 <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 個列印工作"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> 個列印工作"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"取消"</string>
+    <string name="restart" msgid="2472034227037808749">"重新開始"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"尚未與印表機建立連線"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"不明"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – 無法使用"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"無法產生列印工作"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"黑白"</item>
+    <item msgid="2762241247228983754">"彩色"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"縱向"</item>
+    <item msgid="3199660090246166812">"橫向"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"全部"</item>
+    <item msgid="6812869625222503603">"範圍"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values-zu/strings.xml b/packages/PrintSpooler/res/values-zu/strings.xml
new file mode 100644
index 0000000..08e31e1
--- /dev/null
+++ b/packages/PrintSpooler/res/values-zu/strings.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4469836075319831821">"Ispuli sephrinta"</string>
+    <string name="advanced_settings_button" msgid="5764225091289415632">"Izilungiselelo zephrinta"</string>
+    <string name="print_button" msgid="645164566271246268">"Phrinta"</string>
+    <string name="save_button" msgid="1921310454071758999">"Londoloza"</string>
+    <string name="label_destination" msgid="9132510997381599275">"Indawo"</string>
+    <string name="label_copies" msgid="3634531042822968308">"Amakhophi"</string>
+    <string name="label_paper_size" msgid="8681895607876809323">"Usayizi wephepha"</string>
+    <string name="label_color" msgid="1108690305218188969">"Umbala"</string>
+    <string name="label_orientation" msgid="2853142581990496477">"Umumo"</string>
+    <string name="label_pages" msgid="6300874667546617333">"Amakhasi (<xliff:g id="PAGE_COUNT">%1$s</xliff:g>)"</string>
+    <string name="pages_range_example" msgid="8558694453556945172">"isb. 1—5, 8, 11—13"</string>
+    <string name="print_preview" msgid="8010217796057763343">"Ukubuka kuqala kokuphrinta"</string>
+    <string name="install_for_print_preview" msgid="6366303997385509332">"Faka isibukeli se-PDF ukuze uhlole kuqala"</string>
+    <string name="printing_app_crashed" msgid="854477616686566398">"Ukuphrinta uhlelo lokusebenza kukhubazekile"</string>
+    <string name="page_count_unknown" msgid="6058852665954511124">"Amakhasi"</string>
+    <string name="generating_print_job" msgid="3119608742651698916">"Ikhiqiza umsebenzi wokuphrinta"</string>
+    <string name="save_as_pdf" msgid="5718454119847596853">"Londoloza njenge-PDF"</string>
+    <string name="all_printers" msgid="5018829726861876202">"Wonke amaphrinta…"</string>
+    <string name="print_dialog" msgid="32628687461331979">"Ingxoxo yokuphrinta"</string>
+    <string name="search" msgid="5421724265322228497">"Sesha"</string>
+    <string name="all_printers_label" msgid="3178848870161526399">"Wonke amaphrinta"</string>
+    <string name="add_print_service_label" msgid="5356702546188981940">"Engeza isevisi"</string>
+    <string name="print_search_box_shown_utterance" msgid="7967404953901376090">"Ibhokisi lokuhlola libonisiwe"</string>
+    <string name="print_search_box_hidden_utterance" msgid="5727755169343113351">"Ibhokisi lokusesha lifihliwe"</string>
+    <string name="print_add_printer" msgid="1088656468360653455">"Engeza iphrinta"</string>
+    <string name="print_select_printer" msgid="7388760939873368698">"Khetha iphrinta"</string>
+    <string name="print_forget_printer" msgid="5035287497291910766">"Khohlwa iphrinta"</string>
+  <plurals name="print_search_result_count_utterance">
+    <item quantity="one" msgid="4484953260685964252">"<xliff:g id="COUNT">%1$s</xliff:g> iphrinta itholiwe"</item>
+    <item quantity="other" msgid="6533817036607128241">"<xliff:g id="COUNT">%1$s</xliff:g> amaphrinta atholiwe"</item>
+  </plurals>
+    <string name="choose_print_service" msgid="3740309762324459694">"Khetha isevisi yephrinta"</string>
+    <string name="print_searching_for_printers" msgid="6550424555079932867">"Isesha amaphrinta"</string>
+    <string name="print_no_printers" msgid="4869403323900054866">"Awekho amaphrinta atholiwe"</string>
+    <string name="printing_notification_title_template" msgid="295903957762447362">"Iphrinta i-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="cancelling_notification_title_template" msgid="1821759594704703197">"Ikhansela i-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="failed_notification_title_template" msgid="2256217208186530973">"Iphutha lephrinta ye-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+    <string name="blocked_notification_title_template" msgid="1175435827331588646">"Iphrinta engu-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> ivinjelwe"</string>
+  <plurals name="composite_notification_title_template">
+    <item quantity="one" msgid="5866624638054847057">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> umsebenzi wokuphrinta"</item>
+    <item quantity="other" msgid="8746611264734222865">"<xliff:g id="PRINT_JOB_NAME">%1$d</xliff:g> imisebenzi yokuphrinta"</item>
+  </plurals>
+    <string name="cancel" msgid="4373674107267141885">"Khansela"</string>
+    <string name="restart" msgid="2472034227037808749">"Qala kabusha"</string>
+    <string name="no_connection_to_printer" msgid="2159246915977282728">"Akukho ukuxhumana kuphrinta"</string>
+    <string name="reason_unknown" msgid="5507940196503246139">"akwaziwa"</string>
+    <string name="printer_unavailable" msgid="2434170617003315690">"I-<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> – ayitholakali"</string>
+    <string name="print_error_default_message" msgid="8568506918983980567">"Ayikwazanga ukukhiqiza umsebenzi wokuphrinta"</string>
+  <string-array name="color_mode_labels">
+    <item msgid="7602948745415174937">"Okumnyama nokumhlophe"</item>
+    <item msgid="2762241247228983754">"Umbala"</item>
+  </string-array>
+  <string-array name="orientation_labels">
+    <item msgid="4061931020926489228">"Ukuma ngobude"</item>
+    <item msgid="3199660090246166812">"Ukwakheka kwezwe"</item>
+  </string-array>
+  <string-array name="page_options_labels">
+    <item msgid="7421377442011699994">"Konke"</item>
+    <item msgid="6812869625222503603">"Ibanga"</item>
+  </string-array>
+</resources>
diff --git a/packages/PrintSpooler/res/values/themes.xml b/packages/PrintSpooler/res/values/themes.xml
index 86f4a37..94ab895 100644
--- a/packages/PrintSpooler/res/values/themes.xml
+++ b/packages/PrintSpooler/res/values/themes.xml
@@ -16,7 +16,7 @@
 
 <resources>
 
-    <style name="PrintJobConfigActivityTheme" parent="@android:style/Theme.Holo.Light.NoActionBar">
+    <style name="PrintJobConfigActivityTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
         <item name="android:windowBackground">@android:color/transparent</item>
         <item name="android:windowSoftInputMode">stateAlwaysHidden|adjustResize</item>
         <item name="android:windowIsTranslucent">true</item>
@@ -25,11 +25,11 @@
         <item name="android:windowIsFloating">true</item>
     </style>
 
-    <style name="SelectPrinterActivityTheme" parent="@android:style/Theme.Holo.Light">
+    <style name="SelectPrinterActivityTheme" parent="@android:style/Theme.DeviceDefault.Light">
         <item name="android:actionBarStyle">@style/SelectPrinterActivityActionBarStyle</item>
     </style>
 
-    <style name="SelectPrinterActivityActionBarStyle" parent="@android:style/Widget.Holo.ActionBar">
+    <style name="SelectPrinterActivityActionBarStyle" parent="@android:style/Widget.DeviceDefault.Light.ActionBar">
         <item name="android:displayOptions">showTitle</item>
     </style>
 
diff --git a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
index f6008d4..e3d8d05 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/PrintJobConfigActivity.java
@@ -454,7 +454,11 @@
                 return;
             }
 
-            mControllerState = CONTROLLER_STATE_LAYOUT_COMPLETED;
+            final int oldControllerState = mControllerState;
+
+            if (mControllerState == CONTROLLER_STATE_LAYOUT_STARTED) {
+                mControllerState = CONTROLLER_STATE_LAYOUT_COMPLETED;
+            }
 
             // For layout purposes we care only whether the type or the page
             // count changed. We still do not have the size since we did not
@@ -477,6 +481,8 @@
                         mPrintJobId, null);
             }
 
+            PageRange[] oldRequestedPages = mRequestedPages;
+
             // No pages means that the user selected an invalid range while we
             // were doing a layout or the layout returned a document info for
             // which the selected range is invalid. In such a case we do not
@@ -504,14 +510,21 @@
                 }
             }
 
-            // If the info and the layout did not change and we already have
-            // the requested pages, then nothing else to do.
+            // If the info and the layout did not change...
             if (!infoChanged && !layoutChanged
-                    && PageRangeUtils.contains(mDocument.pages, mRequestedPages)) {
+                    // and we have the requested pages ... 
+                    && (PageRangeUtils.contains(mDocument.pages, mRequestedPages))
+                        // ...or the requested pages are being written...
+                        || (oldControllerState == CONTROLLER_STATE_WRITE_STARTED
+                            && oldRequestedPages != null
+                            && PageRangeUtils.contains(oldRequestedPages, mRequestedPages))) {
                 // Nothing interesting changed and we have all requested pages.
                 // Then update the print jobs's pages as we will not do a write
                 // and we usually update the pages in the write complete callback.
-                updatePrintJobPages(mDocument.pages, mRequestedPages);
+                if (mDocument.pages != null) {
+                    // Update the print job's pages given we have them.
+                    updatePrintJobPages(mDocument.pages, mRequestedPages);
+                }
                 mEditor.updateUi();
                 if (mEditor.isDone()) {
                     requestCreatePdfFileOrFinish();
@@ -616,7 +629,9 @@
                 // We did not get the pages we requested, then the application
                 // misbehaves, so we fail quickly.
                 mControllerState = CONTROLLER_STATE_FAILED;
-                Log.e(LOG_TAG, "Received invalid pages from the app");
+                Log.e(LOG_TAG, "Received invalid pages from the app: requested="
+                        + Arrays.toString(requestedPages) + " written="
+                        + Arrays.toString(writtenPages));
                 mEditor.showUi(Editor.UI_ERROR, null);
             }
         }
@@ -1276,7 +1291,7 @@
                     // Initially, we have only safe to PDF as a printer but after some
                     // printers are loaded we want to select the user's favorite one
                     // which is the first.
-                    if (!mFavoritePrinterSelected && mDestinationSpinnerAdapter.getCount() > 2) {
+                    if (!mFavoritePrinterSelected && mDestinationSpinnerAdapter.getCount() > 1) {
                         mFavoritePrinterSelected = true;
                         mDestinationSpinner.setSelection(0);
                         // Workaround again the weird spinner behavior to notify for selection
@@ -1350,6 +1365,7 @@
 
                                 if (mCurrentPrinter.getCapabilities() == null) {
                                     if (printer.getCapabilities() != null) {
+                                        updatePrintAttributes(printer.getCapabilities());
                                         capabilitiesChanged = true;
                                     }
                                 } else if (!mCurrentPrinter.getCapabilities().equals(
diff --git a/packages/SettingsProvider/res/values-az-rAZ/strings.xml b/packages/SettingsProvider/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..a4d0d43
--- /dev/null
+++ b/packages/SettingsProvider/res/values-az-rAZ/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Parametrlər Deposu"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-az/strings.xml b/packages/SettingsProvider/res/values-az/strings.xml
new file mode 100644
index 0000000..a4d0d43
--- /dev/null
+++ b/packages/SettingsProvider/res/values-az/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Parametrlər Deposu"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-be/strings.xml b/packages/SettingsProvider/res/values-be/strings.xml
deleted file mode 100644
index c164ac7..0000000
--- a/packages/SettingsProvider/res/values-be/strings.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * Copyright (c) 2007, 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="4567566098528588863">"Захоўванне налад"</string>
-</resources>
diff --git a/packages/SettingsProvider/res/values-en-rIN/strings.xml b/packages/SettingsProvider/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..c19fdd7
--- /dev/null
+++ b/packages/SettingsProvider/res/values-en-rIN/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Settings Storage"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-et/strings.xml b/packages/SettingsProvider/res/values-et-rEE/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-et/strings.xml
rename to packages/SettingsProvider/res/values-et-rEE/strings.xml
diff --git a/packages/SettingsProvider/res/values-fr-rCA/strings.xml b/packages/SettingsProvider/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..c90eb09
--- /dev/null
+++ b/packages/SettingsProvider/res/values-fr-rCA/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Stockage des paramètres"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-hy-rAM/strings.xml b/packages/SettingsProvider/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..b1f1afb
--- /dev/null
+++ b/packages/SettingsProvider/res/values-hy-rAM/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Կարգավորումների պահուստ"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-ka-rGE/strings.xml b/packages/SettingsProvider/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..691a2e9
--- /dev/null
+++ b/packages/SettingsProvider/res/values-ka-rGE/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"პარამეტრების საცავი"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-km-rKH/strings.xml b/packages/SettingsProvider/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..7be62427
--- /dev/null
+++ b/packages/SettingsProvider/res/values-km-rKH/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"កំណត់​ការ​ផ្ទុក"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-lo-rLA/strings.xml b/packages/SettingsProvider/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..4e57936
--- /dev/null
+++ b/packages/SettingsProvider/res/values-lo-rLA/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"ບ່ອນເກັບຂໍ້ມູນການຕັ້ງຄ່າ"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-mn-rMN/strings.xml b/packages/SettingsProvider/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..9452145
--- /dev/null
+++ b/packages/SettingsProvider/res/values-mn-rMN/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"Тохиргооны Сан"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-ms/strings.xml b/packages/SettingsProvider/res/values-ms-rMY/strings.xml
similarity index 100%
rename from packages/SettingsProvider/res/values-ms/strings.xml
rename to packages/SettingsProvider/res/values-ms-rMY/strings.xml
diff --git a/packages/SettingsProvider/res/values-ne-rNP/strings.xml b/packages/SettingsProvider/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..af6ef62
--- /dev/null
+++ b/packages/SettingsProvider/res/values-ne-rNP/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"सेटिङहरू भण्डारण"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-ne/strings.xml b/packages/SettingsProvider/res/values-ne/strings.xml
new file mode 100644
index 0000000..af6ef62
--- /dev/null
+++ b/packages/SettingsProvider/res/values-ne/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"सेटिङहरू भण्डारण"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-si-rLK/strings.xml b/packages/SettingsProvider/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..24ef798
--- /dev/null
+++ b/packages/SettingsProvider/res/values-si-rLK/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"සැකසීම් ගබඩාව"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-si/strings.xml b/packages/SettingsProvider/res/values-si/strings.xml
new file mode 100644
index 0000000..24ef798
--- /dev/null
+++ b/packages/SettingsProvider/res/values-si/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"සැකසීම් ගබඩාව"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values-zh-rHK/strings.xml b/packages/SettingsProvider/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..977c9b9
--- /dev/null
+++ b/packages/SettingsProvider/res/values-zh-rHK/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2007, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="4567566098528588863">"設定儲存空間"</string>
+</resources>
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index da3ca0f..59b486f 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -174,7 +174,19 @@
          >0 is milliseconds of screen-off time after which battery sounds will not play -->
     <integer name="def_low_battery_sound_timeout">0</integer>
 
+    <!-- Initial value for the Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS setting,
+         which is a comma separated list of packages that no longer need confirmation
+         for immersive mode.
+         Override to disable immersive mode confirmation for certain packages. -->
+    <string name="def_immersive_mode_confirmations" translatable="false"></string>
+
     <!-- Default for Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE -->
     <integer name="def_wifi_scan_always_available">0</integer>
 
+    <!-- Default for Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS, 1==on -->
+    <integer name="def_lock_screen_show_notifications">1</integer>
+
+    <!-- Default for Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED, 1==on -->
+    <integer name="def_heads_up_enabled">1</integer>
+
 </resources>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index ed86f42..58086c4 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -39,13 +39,10 @@
 import android.provider.Settings;
 import android.provider.Settings.Global;
 import android.provider.Settings.Secure;
-import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.internal.content.PackageHelper;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.RILConstants;
 import com.android.internal.telephony.cdma.CdmaSubscriptionSourceManager;
 import com.android.internal.util.XmlUtils;
@@ -72,7 +69,7 @@
     // database gets upgraded properly. At a minimum, please confirm that 'upgradeVersion'
     // is properly propagated through your change.  Not doing so will result in a loss of user
     // settings.
-    private static final int DATABASE_VERSION = 98;
+    private static final int DATABASE_VERSION = 101;
 
     private Context mContext;
     private int mUserHandle;
@@ -1559,6 +1556,64 @@
             upgradeVersion = 98;
         }
 
+        if (upgradeVersion == 98) {
+            if (mUserHandle == UserHandle.USER_OWNER) {
+                db.beginTransaction();
+                SQLiteStatement stmt = null;
+                try {
+                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
+                            + " VALUES(?,?);");
+                    loadIntegerSetting(stmt, Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS,
+                            R.integer.def_lock_screen_show_notifications);
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                    if (stmt != null) stmt.close();
+                }
+            }
+            upgradeVersion = 99;
+        }
+
+        if (upgradeVersion == 99) {
+            if (mUserHandle == UserHandle.USER_OWNER) {
+                db.beginTransaction();
+                SQLiteStatement stmt = null;
+                try {
+                    stmt = db.compileStatement("INSERT OR REPLACE INTO global(name,value)"
+                            + " VALUES(?,?);");
+                    loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
+                            R.integer.def_heads_up_enabled);
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                    if (stmt != null) stmt.close();
+                }
+            }
+            upgradeVersion = 100;
+        }
+        if (upgradeVersion == 100) {
+           // Catch devices that were initialized to version 100 and missed these in onCreate()
+            if (mUserHandle == UserHandle.USER_OWNER) {
+                db.beginTransaction();
+                SQLiteStatement stmt = null;
+                try {
+                    stmt = db.compileStatement("INSERT OR IGNORE INTO global(name,value)"
+                            + " VALUES(?,?);");
+                    loadIntegerSetting(stmt, Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS,
+                            R.integer.def_lock_screen_show_notifications);
+
+                    loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
+                            R.integer.def_heads_up_enabled);
+
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                    if (stmt != null) stmt.close();
+                }
+            }
+            upgradeVersion = 101;
+        }
+
         // *** Remember to update DATABASE_VERSION above!
 
         if (upgradeVersion != currentVersion) {
@@ -2114,6 +2169,10 @@
 
             loadBooleanSetting(stmt, Settings.Secure.USER_SETUP_COMPLETE,
                     R.bool.def_user_setup_complete);
+
+            loadStringSetting(stmt, Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
+                        R.string.def_immersive_mode_confirmations);
+
         } finally {
             if (stmt != null) stmt.close();
         }
@@ -2277,6 +2336,12 @@
             loadIntegerSetting(stmt, Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
                     R.integer.def_wifi_scan_always_available);
 
+            loadIntegerSetting(stmt, Settings.Global.LOCK_SCREEN_SHOW_NOTIFICATIONS,
+                    R.integer.def_lock_screen_show_notifications);
+
+            loadIntegerSetting(stmt, Global.HEADS_UP_NOTIFICATIONS_ENABLED,
+                    R.integer.def_heads_up_enabled);
+
             // --- New global settings start here
         } finally {
             if (stmt != null) stmt.close();
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
index 7b09092..45957a4 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsBackupAgent.java
@@ -422,7 +422,11 @@
         // If we have wifi data to restore, post a runnable to perform the
         // bounce-and-update operation a little ways in the future.
         if (mWifiRestore != null) {
-            new Handler(getMainLooper()).postDelayed(mWifiRestore, WIFI_BOUNCE_DELAY_MILLIS);
+            long wifiBounceDelayMillis = Settings.Global.getLong(
+                    getContentResolver(),
+                    Settings.Global.WIFI_BOUNCE_DELAY_OVERRIDE_MS,
+                    WIFI_BOUNCE_DELAY_MILLIS);
+            new Handler(getMainLooper()).postDelayed(mWifiRestore, wifiBounceDelayMillis);
         }
     }
 
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 29e8d1d..56f5a3a 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -1,3 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (c) 2014 Google Inc.
+ *
+ * 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.
+ */
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.shell"
         coreApp="true"
@@ -69,6 +87,8 @@
     <uses-permission android:name="android.permission.MANAGE_USERS" />
     <uses-permission android:name="android.permission.BLUETOOTH_STACK" />
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+    <uses-permission android:name="android.permission.RETRIEVE_WINDOW_TOKEN" />
+    <uses-permission android:name="android.permission.FRAME_STATS" />
 
     <application android:label="@string/app_label">
         <provider
@@ -83,7 +103,7 @@
 
         <activity
             android:name=".BugreportWarningActivity"
-            android:theme="@*android:style/Theme.Holo.Dialog.Alert"
+            android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
             android:finishOnCloseSystemDialogs="true"
             android:excludeFromRecents="true"
             android:exported="false" />
diff --git a/packages/Shell/res/values-az-rAZ/strings.xml b/packages/Shell/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..da08e38
--- /dev/null
+++ b/packages/Shell/res/values-az-rAZ/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Baq raport alındı"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Xətanı şikayətini paylaşmaq üçün toxunun"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Baq raportları sistemin müxtəlif jurnal fayllarından data içərir ki, buna şəxsi və konfidensial məlumatlar da aiddir. Yalnız inandığınız adamlarla baq raportlarını paylaşın."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bu mesajı növbəti dəfə göstər"</string>
+</resources>
diff --git a/packages/Shell/res/values-az/strings.xml b/packages/Shell/res/values-az/strings.xml
new file mode 100644
index 0000000..da08e38
--- /dev/null
+++ b/packages/Shell/res/values-az/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Baq raport alındı"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Xətanı şikayətini paylaşmaq üçün toxunun"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Baq raportları sistemin müxtəlif jurnal fayllarından data içərir ki, buna şəxsi və konfidensial məlumatlar da aiddir. Yalnız inandığınız adamlarla baq raportlarını paylaşın."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Bu mesajı növbəti dəfə göstər"</string>
+</resources>
diff --git a/packages/Shell/res/values-be/strings.xml b/packages/Shell/res/values-be/strings.xml
deleted file mode 100644
index e713975..0000000
--- a/packages/Shell/res/values-be/strings.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2013 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="3701846017049540910">"Абалонка"</string>
-    <string name="bugreport_finished_title" msgid="2293711546892863898">"Справаздача пра збой захавана"</string>
-    <string name="bugreport_finished_text" msgid="3559904746859400732">"Націсніце, каб падзяліцца сваёй справаздачай пра збой"</string>
-    <string name="bugreport_confirm" msgid="5130698467795669780">"Справаздача пра памылку ўтрымлівае дадзеныя з гiсторыi сістэмных файлаў, у тым ліку персанальную і прыватную інфармацыю. Дзялiцеся справаздачамi пра збоi толькi з праверанымi карыстальнiкамi i прыкладаннямi."</string>
-    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"У наступны раз паказваць гэта паведамленне"</string>
-</resources>
diff --git a/packages/Shell/res/values-cs/strings.xml b/packages/Shell/res/values-cs/strings.xml
index effdcb9..3f1c921 100644
--- a/packages/Shell/res/values-cs/strings.xml
+++ b/packages/Shell/res/values-cs/strings.xml
@@ -17,8 +17,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="3701846017049540910">"Prostředí"</string>
-    <string name="bugreport_finished_title" msgid="2293711546892863898">"Byla vytvořena zpráva o chybě"</string>
-    <string name="bugreport_finished_text" msgid="3559904746859400732">"Zprávu o chybě můžete sdílet klepnutím."</string>
-    <string name="bugreport_confirm" msgid="5130698467795669780">"Zprávy o chybách obsahují data z různých souborů protokolů systému včetně osobních a soukromých informací. Zprávy o chybách sdílejte pouze s aplikacemi a uživateli, kterým důvěřujete."</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Bylo vytvořeno chybové hlášení"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Chybové hlášení můžete sdílet klepnutím."</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Chybová hlášení obsahují data z různých souborů protokolů systému včetně osobních a soukromých informací. Chybová hlášení sdílejte pouze s aplikacemi a uživateli, kterým důvěřujete."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Zobrazit tuto zprávu příště"</string>
 </resources>
diff --git a/packages/Shell/res/values-da/strings.xml b/packages/Shell/res/values-da/strings.xml
index 01ea42b..fa30c96 100644
--- a/packages/Shell/res/values-da/strings.xml
+++ b/packages/Shell/res/values-da/strings.xml
@@ -19,6 +19,6 @@
     <string name="app_label" msgid="3701846017049540910">"Shell"</string>
     <string name="bugreport_finished_title" msgid="2293711546892863898">"Fejlrapporten er registreret"</string>
     <string name="bugreport_finished_text" msgid="3559904746859400732">"Tryk for at dele din fejlrapport"</string>
-    <string name="bugreport_confirm" msgid="5130698467795669780">"Fejlrapporter indeholder data fra systemets forskellige logfiler, herunder personlige og private oplysninger. Del kun fejlrapporter med apps og personer, du har tillid til."</string>
-    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne meddelelse næste gang"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Fejlrapporter indeholder data fra systemets forskellige logfiler, f.eks. personlige og private oplysninger. Del kun fejlrapporter med apps og personer, du har tillid til."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Vis denne underretning næste gang"</string>
 </resources>
diff --git a/packages/Shell/res/values-el/strings.xml b/packages/Shell/res/values-el/strings.xml
index 3669f78..9b1eb7b 100644
--- a/packages/Shell/res/values-el/strings.xml
+++ b/packages/Shell/res/values-el/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="3701846017049540910">"Κέλυφος"</string>
     <string name="bugreport_finished_title" msgid="2293711546892863898">"Η λήψη της αναφοράς ήταν επιτυχής"</string>
-    <string name="bugreport_finished_text" msgid="3559904746859400732">"Αγγίξτε για κοινή χρήση της αναφοράς σας σφαλμάτων"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Αγγίξτε για να μοιραστείτε τη αναφορά σφαλμάτων"</string>
     <string name="bugreport_confirm" msgid="5130698467795669780">"Οι αναφορές σφαλμάτων περιέχουν δεδομένα από τα διάφορα αρχεία καταγραφής του συστήματος, συμπεριλαμβανομένων προσωπικών και ιδιωτικών πληροφοριών. Να μοιράζεστε αναφορές σφαλμάτων μόνο με εφαρμογές και άτομα που εμπιστεύεστε."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Εμφάνιση αυτού του μηνύματος την επόμενη φορά"</string>
 </resources>
diff --git a/packages/Shell/res/values-en-rIN/strings.xml b/packages/Shell/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..68708e0
--- /dev/null
+++ b/packages/Shell/res/values-en-rIN/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Bug report captured"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Touch to share your bug report"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Bug reports contain data from the system\'s various log files, including personal and private information. Only share bug reports with apps and people that you trust."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Show this message next time"</string>
+</resources>
diff --git a/packages/Shell/res/values-et/strings.xml b/packages/Shell/res/values-et-rEE/strings.xml
similarity index 100%
rename from packages/Shell/res/values-et/strings.xml
rename to packages/Shell/res/values-et-rEE/strings.xml
diff --git a/packages/Shell/res/values-fr-rCA/strings.xml b/packages/Shell/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..c672f23
--- /dev/null
+++ b/packages/Shell/res/values-fr-rCA/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Rapport de bogue enregistré"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Appuyer ici pour partager votre rapport de bogue"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Les rapports de bogue contiennent des données des fichiers journaux du système, y compris des informations personnelles et privées. Ne partagez les rapports de bogue qu\'avec les applications et les personnes que vous estimez fiables."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Afficher ce message la prochaine fois"</string>
+</resources>
diff --git a/packages/Shell/res/values-hi/strings.xml b/packages/Shell/res/values-hi/strings.xml
index 4ea0664..f889311 100644
--- a/packages/Shell/res/values-hi/strings.xml
+++ b/packages/Shell/res/values-hi/strings.xml
@@ -19,6 +19,6 @@
     <string name="app_label" msgid="3701846017049540910">"शेल"</string>
     <string name="bugreport_finished_title" msgid="2293711546892863898">"बग रिपोर्ट कैप्चर कर ली गई"</string>
     <string name="bugreport_finished_text" msgid="3559904746859400732">"अपनी बग रिपोर्ट साझा करने के लिए स्पर्श करें"</string>
-    <string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्ट में व्यक्तिगत और निजी जानकारी सहित, सिस्टम की विभिन्न लॉग फ़ाइलों का डेटा होता है. बग रिपोर्ट केवल विश्वसनीय एप्लिकेशन और व्यक्तियों से ही साझा करें."</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्ट में व्यक्तिगत और निजी जानकारी सहित, सिस्टम की विभिन्न लॉग फ़ाइलों का डेटा होता है. बग रिपोर्ट केवल विश्वसनीय ऐप्स  और व्यक्तियों से ही साझा करें."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"यह संदेश अगली बार दिखाएं"</string>
 </resources>
diff --git a/packages/Shell/res/values-hy-rAM/strings.xml b/packages/Shell/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..ea7fa9f
--- /dev/null
+++ b/packages/Shell/res/values-hy-rAM/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Խեցի"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Վրիպակի զեկույց ստացվեց"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Հպեք` ձեր վրիպակի մասին զեկույցը տարածելու համար"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Վրիպակի զեկույցները պարունակում են տվյալներ համակարգի տարբեր մուտքի ֆայլերից, այդ թվում նաև անհատական ​​և գաղտնի տեղեկություններ: Վրիպակի զեկույցները կիսեք միայն այն հավելվածների և մարդկանց հետ, որոնց վստահում եք:"</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Այս հաղորդագրությունը ցույց տալ հաջորդ անգամ"</string>
+</resources>
diff --git a/packages/Shell/res/values-iw/strings.xml b/packages/Shell/res/values-iw/strings.xml
index e7715e9..ded860c 100644
--- a/packages/Shell/res/values-iw/strings.xml
+++ b/packages/Shell/res/values-iw/strings.xml
@@ -19,6 +19,6 @@
     <string name="app_label" msgid="3701846017049540910">"מעטפת"</string>
     <string name="bugreport_finished_title" msgid="2293711546892863898">"דוח הבאגים צולם"</string>
     <string name="bugreport_finished_text" msgid="3559904746859400732">"גע כדי לשתף את דוח הבאגים שלך"</string>
-    <string name="bugreport_confirm" msgid="5130698467795669780">"דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, כולל מידע אישי ופרטי. שתף דוחות באגים רק עם יישומים ואנשים שאתה סומך עליהם."</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"דוחות על באגים כוללים נתונים מקובצי היומן השונים במערכת, כולל מידע אישי ופרטי. שתף דוחות באגים רק עם אפליקציות ואנשים שאתה סומך עליהם."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"הצג את ההודעה הזו בפעם הבאה"</string>
 </resources>
diff --git a/packages/Shell/res/values-ka-rGE/strings.xml b/packages/Shell/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..7d9c72a
--- /dev/null
+++ b/packages/Shell/res/values-ka-rGE/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"გარეკანი"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"ანგარიში ხარვეზების შესახებ შექმნილია"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"შეეხეთ თქვენი ხარვეზების ანგარიშის გასაზიარებლად"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"ხარვეზის ანგარიშები მოიცავს მონაცემებს სხვადასხვა სისტემური ჟურნალის ფაილებიდან, მათ შორის პირად და კონფიდენციალურ ინფორმაციას."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"შემდგომში აჩვენე ეს შეტყობინება"</string>
+</resources>
diff --git a/packages/Shell/res/values-km-rKH/strings.xml b/packages/Shell/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..efb345c
--- /dev/null
+++ b/packages/Shell/res/values-km-rKH/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"សែល"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"បាន​ចាប់​យក​របាយការណ៍​កំហុស"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"ប៉ះ​ ដើម្បី​ចែក​រំលែក​របាយការណ៍​កំហុស​របស់​អ្នក"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"របាយការណ៍​កំហុស​រួមមាន​ឯកសារ​កំណត់​ហេតុ​ផ្សេងៗ​របស់​ប្រព័ន្ធ រួមមាន​ព័ត៌មាន​ផ្ទាល់ខ្លួន និង​ឯកជន។ ចែករំលែក​របាយការណ៍​កំហុស​ជា​មួយ​កម្មវិធី និង​មនុស្ស​ដែល​អ្នក​ទុក​ចិត្ត។"</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"បង្ហាញ​សារ​នេះ​ពេល​ក្រោយ"</string>
+</resources>
diff --git a/packages/Shell/res/values-lo-rLA/strings.xml b/packages/Shell/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..a237d48
--- /dev/null
+++ b/packages/Shell/res/values-lo-rLA/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Shell"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"ລາຍງານຈຸດບົກພ່ອງຖືກເກັບກຳແລ້ວ"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"ແຕະເພື່ອສົ່ງການລາຍງານປັນຫາຂອງທ່ານ"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"ການລາຍງານຂໍ້ຜິດພາດປະກອບມີ ຂໍ້ມູນຈາກໄຟລ໌ບັນທຶກຂອງລະບົບຫຼາຍໄຟລ໌, ຮວມທັງຂໍ້ມູນສ່ວນໂຕນຳ. ທ່ານຕ້ອງແບ່ງປັນລາຍງານຂໍ້ຜິດພາດໃຫ້ແອັບຯ ແລະຄົນທີ່ທ່ານເຊື່ອຖືໄດ້ເທົ່ານັ້ນ."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ສະແດງຂໍ້ຄວາມນີ້ອີກໃນເທື່ອຕໍ່ໄປ"</string>
+</resources>
diff --git a/packages/Shell/res/values-mn-rMN/strings.xml b/packages/Shell/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..f74298d
--- /dev/null
+++ b/packages/Shell/res/values-mn-rMN/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"Шел"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Алдааны мэдээлэл хүлээн авав"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Та алдааны мэдэгдлийг хуваалцах бол хүрнэ үү"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"Алдааны репорт нь хувийн болон нууц мэдээлэл зэргийг агуулсан системийн төрөл бүрийн лог файлын датаг агуулна. Алдааны репортыг зөвхөн итгэлтэй апп болон хүмүүст хуваалцана уу."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Энэ мессежийг дараагийн удаа харуулах"</string>
+</resources>
diff --git a/packages/Shell/res/values-ms/strings.xml b/packages/Shell/res/values-ms-rMY/strings.xml
similarity index 100%
rename from packages/Shell/res/values-ms/strings.xml
rename to packages/Shell/res/values-ms-rMY/strings.xml
diff --git a/packages/Shell/res/values-ne-rNP/strings.xml b/packages/Shell/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..cf09433
--- /dev/null
+++ b/packages/Shell/res/values-ne-rNP/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"सेल"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"बग प्रतिवेदन समातियो"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"तपाईंको बग रिपोर्ट साझेदारी गर्न छुनुहोस्"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्टहरूमा प्रणालीका विभिन्न लग फाइलहरूबाट व्यक्तिगत तथा नीजि सूचनासहितको डेटा रहन्छ।  बग रिपोर्टहरू अनुप्रयोगहरू र तपाईँले विश्वास गरेका व्यक्तिहरूसँग मात्र साझेदारी गर्नुहोस्।"</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"यो सन्देश अर्को पटक देखाउनुहोस्"</string>
+</resources>
diff --git a/packages/Shell/res/values-ne/strings.xml b/packages/Shell/res/values-ne/strings.xml
new file mode 100644
index 0000000..cf09433
--- /dev/null
+++ b/packages/Shell/res/values-ne/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"सेल"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"बग प्रतिवेदन समातियो"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"तपाईंको बग रिपोर्ट साझेदारी गर्न छुनुहोस्"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"बग रिपोर्टहरूमा प्रणालीका विभिन्न लग फाइलहरूबाट व्यक्तिगत तथा नीजि सूचनासहितको डेटा रहन्छ।  बग रिपोर्टहरू अनुप्रयोगहरू र तपाईँले विश्वास गरेका व्यक्तिहरूसँग मात्र साझेदारी गर्नुहोस्।"</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"यो सन्देश अर्को पटक देखाउनुहोस्"</string>
+</resources>
diff --git a/packages/Shell/res/values-si-rLK/strings.xml b/packages/Shell/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..0780789
--- /dev/null
+++ b/packages/Shell/res/values-si-rLK/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"ෂෙල්"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"දෝෂ වාර්තාව ලබාගන්නා ලදි"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"ඔබගේ දෝෂ වාර්තාව බෙදා ගැනීමට ස්පර්ශ කරන්න"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව පද්ධතියේ විවිධ ලොග් ගොනු වල දත්ත දෝෂ වාර්තාවේ අඩංගු වේ. ඔබට විශ්වාසවන්ත යෙදුම් සහ පුද්ගලයින් සමඟ පමණක් දෝෂ වාර්තා බෙදා ගන්න."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ඊළඟ වෙලාවේ මෙම පණිවිඩය පෙන්වන්න"</string>
+</resources>
diff --git a/packages/Shell/res/values-si/strings.xml b/packages/Shell/res/values-si/strings.xml
new file mode 100644
index 0000000..0780789
--- /dev/null
+++ b/packages/Shell/res/values-si/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"ෂෙල්"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"දෝෂ වාර්තාව ලබාගන්නා ලදි"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"ඔබගේ දෝෂ වාර්තාව බෙදා ගැනීමට ස්පර්ශ කරන්න"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"පුද්ගලික සහ පෞද්ගලික තොරතුරු ඇතුළත්ව පද්ධතියේ විවිධ ලොග් ගොනු වල දත්ත දෝෂ වාර්තාවේ අඩංගු වේ. ඔබට විශ්වාසවන්ත යෙදුම් සහ පුද්ගලයින් සමඟ පමණක් දෝෂ වාර්තා බෙදා ගන්න."</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"ඊළඟ වෙලාවේ මෙම පණිවිඩය පෙන්වන්න"</string>
+</resources>
diff --git a/packages/Shell/res/values-sk/strings.xml b/packages/Shell/res/values-sk/strings.xml
index 99f36f9..59c3ccf 100644
--- a/packages/Shell/res/values-sk/strings.xml
+++ b/packages/Shell/res/values-sk/strings.xml
@@ -17,8 +17,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="3701846017049540910">"Prostredie"</string>
-    <string name="bugreport_finished_title" msgid="2293711546892863898">"Správa o chybách sa zaznamenala"</string>
-    <string name="bugreport_finished_text" msgid="3559904746859400732">"Dotykom môžete zdieľať správu o chybách"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"Hlásenie o chybách bolo vytvorené"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"Hlásenie o chybách môžete zdielať klepnutím"</string>
     <string name="bugreport_confirm" msgid="5130698467795669780">"Správy o chybách obsahujú údaje z rôznych súborov denníkov systému vrátane osobných a súkromných informácií. Zdieľajte ich iba s dôveryhodnými aplikáciami a ľuďmi."</string>
     <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"Zobraziť túto správu nabudúce"</string>
 </resources>
diff --git a/packages/Shell/res/values-zh-rHK/strings.xml b/packages/Shell/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..b5f1935
--- /dev/null
+++ b/packages/Shell/res/values-zh-rHK/strings.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2013 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="3701846017049540910">"命令介面"</string>
+    <string name="bugreport_finished_title" msgid="2293711546892863898">"已擷取錯誤報告"</string>
+    <string name="bugreport_finished_text" msgid="3559904746859400732">"輕觸即可分享您的錯誤報告"</string>
+    <string name="bugreport_confirm" msgid="5130698467795669780">"錯誤報告中有來自系統各個記錄檔案的資料，包括個人和私人資料。請只與您信任的應用程式和用戶分享錯誤報告。"</string>
+    <string name="bugreport_confirm_repeat" msgid="4926842460688645058">"下次再顯示這則訊息"</string>
+</resources>
diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk
index f8f064a..69c6159 100644
--- a/packages/SystemUI/Android.mk
+++ b/packages/SystemUI/Android.mk
@@ -6,6 +6,7 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src) \
     src/com/android/systemui/EventLogTags.logtags
 
+LOCAL_STATIC_JAVA_LIBRARIES := Keyguard
 LOCAL_JAVA_LIBRARIES := telephony-common
 
 LOCAL_PACKAGE_NAME := SystemUI
@@ -14,6 +15,11 @@
 
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags
 
+LOCAL_RESOURCE_DIR := \
+    frameworks/base/packages/Keyguard/res \
+    $(LOCAL_PATH)/res
+LOCAL_AAPT_FLAGS := --auto-add-overlay --extra-packages com.android.keyguard
+
 include $(BUILD_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index 8d6fe41..327df8d 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -1,3 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (c) 2014 Google Inc.
+ *
+ * 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.
+ */
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
         package="com.android.systemui"
@@ -52,6 +70,7 @@
     <uses-permission android:name="android.permission.START_ANY_ACTIVITY" />
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
     <uses-permission android:name="android.permission.GET_TOP_ACTIVITY_INFO" />
+    <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
 
     <!-- WindowManager -->
     <uses-permission android:name="android.permission.INTERNAL_SYSTEM_WINDOW" />
@@ -70,11 +89,20 @@
 
     <!-- Keyguard -->
     <uses-permission android:name="android.permission.CONTROL_KEYGUARD" />
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+    <uses-permission android:name="android.permission.GET_ACCOUNTS" />
+    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
+    <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
+    <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
+    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
+    <uses-permission android:name="android.permission.ACCESS_KEYGUARD_SECURE_STORAGE" />
+    <uses-permission android:name="android.permission.TRUST_LISTENER" />
 
     <!-- Wifi Display -->
     <uses-permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY" />
 
     <application
+        android:name=".SystemUIApplication"
         android:persistent="true"
         android:allowClearUserData="false"
         android:allowBackup="false"
@@ -82,7 +110,11 @@
         android:label="@string/app_label"
         android:icon="@*android:drawable/platlogo"
         android:process="com.android.systemui"
-        android:supportsRtl="true">
+        android:supportsRtl="true"
+        android:theme="@style/systemui_theme">
+        <!-- Keep theme in sync with SystemUIApplication.onCreate().
+             Setting the theme on the application does not affect views inflated by services.
+             The application theme is set again from onCreate to take effect for those views. -->
 
         <!-- Broadcast receiver that gets the broadcast at boot time and starts
              up everything else.
@@ -140,11 +172,23 @@
             </intent-filter>
         </receiver>
 
+        <!-- Alternate Recents -->
+        <activity android:name=".recents.RecentsActivity"
+                  android:launchMode="singleInstance"
+                  android:excludeFromRecents="true"
+                  android:theme="@style/RecentsTheme">
+            <intent-filter>
+                <action android:name="com.android.systemui.recents.TOGGLE_RECENTS" />
+            </intent-filter>
+        </activity>
+
+        <service android:name=".recents.RecentsService" />
+
         <!-- started from UsbDeviceSettingsManager -->
         <activity android:name=".usb.UsbConfirmActivity"
             android:exported="true"
             android:permission="android.permission.MANAGE_USB"
-            android:theme="@*android:style/Theme.Holo.Dialog.Alert"
+            android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
             android:finishOnCloseSystemDialogs="true"
             android:excludeFromRecents="true">
         </activity>
@@ -153,7 +197,7 @@
         <activity android:name=".usb.UsbPermissionActivity"
             android:exported="true"
             android:permission="android.permission.MANAGE_USB"
-            android:theme="@*android:style/Theme.Holo.Dialog.Alert"
+            android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
             android:finishOnCloseSystemDialogs="true"
             android:excludeFromRecents="true">
         </activity>
@@ -162,7 +206,7 @@
         <activity android:name=".usb.UsbResolverActivity"
             android:exported="true"
             android:permission="android.permission.MANAGE_USB"
-            android:theme="@*android:style/Theme.Holo.Dialog.Alert"
+            android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
             android:finishOnCloseSystemDialogs="true"
             android:excludeFromRecents="true">
         </activity>
@@ -171,7 +215,7 @@
         <activity android:name=".usb.UsbAccessoryUriActivity"
             android:exported="true"
             android:permission="android.permission.MANAGE_USB"
-            android:theme="@*android:style/Theme.Holo.Dialog.Alert"
+            android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
             android:finishOnCloseSystemDialogs="true"
             android:excludeFromRecents="true">
         </activity>
@@ -179,7 +223,7 @@
         <!-- started from UsbDebuggingManager -->
         <activity android:name=".usb.UsbDebuggingActivity"
             android:permission="android.permission.MANAGE_USB"
-            android:theme="@*android:style/Theme.Holo.Dialog.Alert"
+            android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
             android:finishOnCloseSystemDialogs="true"
             android:excludeFromRecents="true">
         </activity>
@@ -189,7 +233,7 @@
             android:name=".net.NetworkOverLimitActivity"
             android:exported="true"
             android:permission="android.permission.MANAGE_NETWORK_POLICY"
-            android:theme="@android:style/Theme.Holo.Panel"
+            android:theme="@android:style/Theme.DeviceDefault.Light.Panel"
             android:finishOnCloseSystemDialogs="true"
             android:launchMode="singleTop"
             android:taskAffinity="com.android.systemui.net"
@@ -227,6 +271,11 @@
             </intent-filter>
         </service>
 
+        <service
+            android:name=".keyguard.KeyguardService"
+            android:exported="true"
+            android:enabled="@bool/config_enableKeyguardService" />
+
         <activity android:name=".Somnambulator"
             android:label="@string/start_dreams"
             android:icon="@mipmap/ic_launcher_dreams"
diff --git a/packages/SystemUI/proguard.flags b/packages/SystemUI/proguard.flags
index 1ff93d2..da37803 100644
--- a/packages/SystemUI/proguard.flags
+++ b/packages/SystemUI/proguard.flags
@@ -6,6 +6,11 @@
   public void setGlowAlpha(float);
   public void setGlowScale(float);
 }
+-keep class com.android.systemui.recents.views.TaskInfoView {
+	public void setCircularClipRadius(float);
+	public float getCircularClipRadius();
+}
 
 -keep class com.android.systemui.statusbar.phone.PhoneStatusBar
 -keep class com.android.systemui.statusbar.tv.TvStatusBar
+-keep class com.android.systemui.recents.*
\ No newline at end of file
diff --git a/packages/SystemUI/res/anim/heads_up_exit.xml b/packages/SystemUI/res/anim/heads_up_exit.xml
index 05c144a..2cad8f6 100644
--- a/packages/SystemUI/res/anim/heads_up_exit.xml
+++ b/packages/SystemUI/res/anim/heads_up_exit.xml
@@ -1,13 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android"
         >
-    <scale
-        android:interpolator="@android:interpolator/accelerate_quad"
-        android:fromXScale="1.0" android:toXScale="0.7"
-        android:fromYScale="1.0" android:toYScale="0.7"
-        android:pivotX="50%" android:pivotY="50%"
-        android:duration="@android:integer/config_shortAnimTime" />
-    <alpha 
+    <translate
+            android:interpolator="@android:interpolator/overshoot"
+            android:fromYDelta="0" android:toYDelta="-50%"
+            android:duration="@android:integer/config_shortAnimTime" />
+    <alpha
         android:interpolator="@android:interpolator/accelerate_quad"
         android:fromAlpha="1.0" android:toAlpha="0.0"
         android:duration="@android:integer/config_shortAnimTime" />
diff --git a/packages/SystemUI/res/anim/hydraulic_brake_interpolator.xml b/packages/SystemUI/res/anim/hydraulic_brake_interpolator.xml
deleted file mode 100644
index 5b6778e..0000000
--- a/packages/SystemUI/res/anim/hydraulic_brake_interpolator.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/* //device/apps/common/res/anim/ease_out_interpolator.xml
-**
-** Copyright 2007, 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.
-*/
--->
-
-<decelerateInterpolator 
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:factor="10.0" />
diff --git a/packages/SystemUI/res/anim/lights_out_in.xml b/packages/SystemUI/res/anim/lights_out_in.xml
deleted file mode 100644
index f76a452..0000000
--- a/packages/SystemUI/res/anim/lights_out_in.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-    >
-    <translate android:fromYDelta="-100%p" android:toYDelta="0"
-        android:duration="@android:integer/config_mediumAnimTime" 
-        android:interpolator="@anim/hydraulic_brake_interpolator"
-        />
-    <alpha android:fromAlpha="0.5" android:toAlpha="1.0"
-        android:duration="@android:integer/config_longAnimTime" 
-        />
-</set>
diff --git a/packages/SystemUI/res/anim/lights_out_out.xml b/packages/SystemUI/res/anim/lights_out_out.xml
deleted file mode 100644
index 610ac7a..0000000
--- a/packages/SystemUI/res/anim/lights_out_out.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-    >
-    <translate android:toYDelta="-100%p" android:fromYDelta="0" 
-        android:duration="@android:integer/config_mediumAnimTime" 
-        android:interpolator="@anim/hydraulic_brake_interpolator"
-        />
-    <alpha android:toAlpha="0.5" android:fromAlpha="1.0"
-        android:duration="@android:integer/config_longAnimTime" 
-        />
-</set>
diff --git a/packages/SystemUI/res/anim/notification_dnd_off.xml b/packages/SystemUI/res/anim/notification_dnd_off.xml
deleted file mode 100644
index 4e88855..0000000
--- a/packages/SystemUI/res/anim/notification_dnd_off.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-    >
-    <translate android:fromXDelta="100%p" android:toXDelta="0"
-        android:duration="@android:integer/config_longAnimTime" 
-        android:interpolator="@anim/hydraulic_brake_interpolator"
-        />
-</set>
diff --git a/packages/SystemUI/res/anim/notification_dnd_on.xml b/packages/SystemUI/res/anim/notification_dnd_on.xml
deleted file mode 100644
index 309943b..0000000
--- a/packages/SystemUI/res/anim/notification_dnd_on.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
-    >
-    <translate android:toXDelta="100%p" android:fromXDelta="0"
-        android:duration="@android:integer/config_longAnimTime" 
-        android:interpolator="@anim/hydraulic_brake_interpolator"
-        />
-</set>
diff --git a/packages/SystemUI/res/anim/recents_from_launcher_enter.xml b/packages/SystemUI/res/anim/recents_from_launcher_enter.xml
new file mode 100644
index 0000000..4bd7e82
--- /dev/null
+++ b/packages/SystemUI/res/anim/recents_from_launcher_enter.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false"
+     android:zAdjustment="top">
+  <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
+         android:fillEnabled="true"
+         android:fillBefore="true" android:fillAfter="true"
+         android:interpolator="@android:interpolator/accelerate_cubic"
+         android:duration="250"/>
+</set>
diff --git a/packages/SystemUI/res/anim/recents_from_launcher_exit.xml b/packages/SystemUI/res/anim/recents_from_launcher_exit.xml
new file mode 100644
index 0000000..becc9d0
--- /dev/null
+++ b/packages/SystemUI/res/anim/recents_from_launcher_exit.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+     android:shareInterpolator="false"
+     android:zAdjustment="normal">
+  <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
+         android:fillEnabled="true"
+         android:fillBefore="true" android:fillAfter="true"
+         android:interpolator="@android:interpolator/decelerate_cubic"
+         android:duration="250"/>
+</set>
diff --git a/packages/SystemUI/res/drawable-hdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-hdpi/heads_up_window_bg.9.png
deleted file mode 100644
index 3b952d0..0000000
--- a/packages/SystemUI/res/drawable-hdpi/heads_up_window_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_action_assist_generic_activated.png b/packages/SystemUI/res/drawable-hdpi/ic_action_assist_generic_activated.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_action_assist_generic_activated.png
rename to packages/SystemUI/res/drawable-hdpi/ic_action_assist_generic_activated.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_action_assist_generic_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_action_assist_generic_normal.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_action_assist_generic_normal.png
rename to packages/SystemUI/res/drawable-hdpi/ic_action_assist_generic_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_ime_switcher_default.png b/packages/SystemUI/res/drawable-hdpi/ic_ime_switcher_default.png
new file mode 100644
index 0000000..369c88d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_ime_switcher_default.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/ic_lockscreen_glowdot.png b/packages/SystemUI/res/drawable-hdpi/ic_lockscreen_glowdot.png
similarity index 100%
rename from core/res/res/drawable-hdpi/ic_lockscreen_glowdot.png
rename to packages/SystemUI/res/drawable-hdpi/ic_lockscreen_glowdot.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_open_normal.png
index 092b561..3c0dc4e 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png
index 064860d..3b1944d 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_off.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_off_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_off.png
rename to packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_off_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_on.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_on_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_on.png
rename to packages/SystemUI/res/drawable-hdpi/ic_qs_brightness_auto_on_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_color_space_alpha.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_color_space_alpha.png
new file mode 100644
index 0000000..fe6dc52
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_color_space_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_contrast_alpha.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_contrast_alpha.png
new file mode 100644
index 0000000..0f9dfc7
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_contrast_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_inversion_alpha.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_inversion_alpha.png
new file mode 100644
index 0000000..aea75c1
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/ic_qs_inversion_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/search_bg_transparent.9.png b/packages/SystemUI/res/drawable-hdpi/search_bg_transparent.9.png
new file mode 100644
index 0000000..85db9c8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/search_bg_transparent.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/spinner_default_holo_dark_am_no_underline.9.png b/packages/SystemUI/res/drawable-hdpi/spinner_default_holo_dark_am_no_underline.9.png
new file mode 100644
index 0000000..267e7ba
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/spinner_default_holo_dark_am_no_underline.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_zen_full.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_zen_full.png
new file mode 100644
index 0000000..fa23e85
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_zen_full.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/stat_sys_zen_limited.png b/packages/SystemUI/res/drawable-hdpi/stat_sys_zen_limited.png
new file mode 100644
index 0000000..aa8635c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/stat_sys_zen_limited.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png
deleted file mode 100644
index 13f6b7f..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_open_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png
deleted file mode 100644
index ecdb240..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_notify_quicksettings_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png
deleted file mode 100644
index c98911c..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_open_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png
deleted file mode 100644
index bb99022..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_notify_quicksettings_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png
deleted file mode 100644
index d9d8b13..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_open_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png
deleted file mode 100644
index 09e0a3c..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_notify_quicksettings_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_open_normal.png
deleted file mode 100644
index c0855b5..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_open_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_quicksettings_normal.png
deleted file mode 100644
index e3fb992..0000000
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_notify_quicksettings_normal.png
+++ /dev/null
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-mdpi/heads_up_window_bg.9.png
deleted file mode 100644
index a0ab991..0000000
--- a/packages/SystemUI/res/drawable-mdpi/heads_up_window_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_action_assist_generic_activated.png b/packages/SystemUI/res/drawable-mdpi/ic_action_assist_generic_activated.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_action_assist_generic_activated.png
rename to packages/SystemUI/res/drawable-mdpi/ic_action_assist_generic_activated.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_action_assist_generic_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_action_assist_generic_normal.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_action_assist_generic_normal.png
rename to packages/SystemUI/res/drawable-mdpi/ic_action_assist_generic_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_ime_switcher_default.png b/packages/SystemUI/res/drawable-mdpi/ic_ime_switcher_default.png
new file mode 100644
index 0000000..7d97eb5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_ime_switcher_default.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/ic_lockscreen_glowdot.png b/packages/SystemUI/res/drawable-mdpi/ic_lockscreen_glowdot.png
similarity index 100%
rename from core/res/res/drawable-mdpi/ic_lockscreen_glowdot.png
rename to packages/SystemUI/res/drawable-mdpi/ic_lockscreen_glowdot.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_open_normal.png
index ae5d263..8010ce7 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png
index 32fbed4..807f607 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_off.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_off_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_off.png
rename to packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_off_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_on.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_on_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_on.png
rename to packages/SystemUI/res/drawable-mdpi/ic_qs_brightness_auto_on_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_color_space_alpha.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_color_space_alpha.png
new file mode 100644
index 0000000..18b6029
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_color_space_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_contrast_alpha.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_contrast_alpha.png
new file mode 100644
index 0000000..a4dd087
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_contrast_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_inversion_alpha.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_inversion_alpha.png
new file mode 100644
index 0000000..b6ea14e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/ic_qs_inversion_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/search_bg_transparent.9.png b/packages/SystemUI/res/drawable-mdpi/search_bg_transparent.9.png
new file mode 100644
index 0000000..c4941a6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/search_bg_transparent.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/spinner_default_holo_dark_am_no_underline.9.png b/packages/SystemUI/res/drawable-mdpi/spinner_default_holo_dark_am_no_underline.9.png
new file mode 100644
index 0000000..db51f6b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/spinner_default_holo_dark_am_no_underline.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_zen_full.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_zen_full.png
new file mode 100644
index 0000000..b0185a5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_zen_full.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/stat_sys_zen_limited.png b/packages/SystemUI/res/drawable-mdpi/stat_sys_zen_limited.png
new file mode 100644
index 0000000..949ab10
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/stat_sys_zen_limited.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/heads_up_window_bg.9.png
new file mode 100644
index 0000000..b30cf15
--- /dev/null
+++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/heads_up_window_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png
index 6002cfb..31eb8f7 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xhdpi/heads_up_window_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png
index 586a738..c76d0e1 100644
--- a/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png
+++ b/packages/SystemUI/res/drawable-sw600dp-xxhdpi/heads_up_window_bg.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-xhdpi/heads_up_window_bg.9.png
deleted file mode 100644
index 42e5593..0000000
--- a/packages/SystemUI/res/drawable-xhdpi/heads_up_window_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_action_assist_generic_activated.png b/packages/SystemUI/res/drawable-xhdpi/ic_action_assist_generic_activated.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_action_assist_generic_activated.png
rename to packages/SystemUI/res/drawable-xhdpi/ic_action_assist_generic_activated.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_action_assist_generic_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_action_assist_generic_normal.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_action_assist_generic_normal.png
rename to packages/SystemUI/res/drawable-xhdpi/ic_action_assist_generic_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_ime_switcher_default.png b/packages/SystemUI/res/drawable-xhdpi/ic_ime_switcher_default.png
new file mode 100644
index 0000000..900801a
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_ime_switcher_default.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/ic_lockscreen_glowdot.png b/packages/SystemUI/res/drawable-xhdpi/ic_lockscreen_glowdot.png
similarity index 100%
rename from core/res/res/drawable-xhdpi/ic_lockscreen_glowdot.png
rename to packages/SystemUI/res/drawable-xhdpi/ic_lockscreen_glowdot.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_open_normal.png
index 990f8bb..6d46fdd 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png
index 96eaafe..e562bc2 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_off_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_off.png
rename to packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_off_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_on_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_on.png
rename to packages/SystemUI/res/drawable-xhdpi/ic_qs_brightness_auto_on_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_color_space_alpha.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_color_space_alpha.png
new file mode 100644
index 0000000..95cf67f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_color_space_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_contrast_alpha.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_contrast_alpha.png
new file mode 100644
index 0000000..9331e52
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_contrast_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_inversion_alpha.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_inversion_alpha.png
new file mode 100644
index 0000000..efd8b9e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_qs_inversion_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/search_bg_transparent.9.png b/packages/SystemUI/res/drawable-xhdpi/search_bg_transparent.9.png
new file mode 100644
index 0000000..4618f40
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/search_bg_transparent.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/spinner_default_holo_dark_am_no_underline.9.png b/packages/SystemUI/res/drawable-xhdpi/spinner_default_holo_dark_am_no_underline.9.png
new file mode 100644
index 0000000..8d22ce2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/spinner_default_holo_dark_am_no_underline.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_zen_full.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_zen_full.png
new file mode 100644
index 0000000..7f7cb63
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_zen_full.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/stat_sys_zen_limited.png b/packages/SystemUI/res/drawable-xhdpi/stat_sys_zen_limited.png
new file mode 100644
index 0000000..abdeb3b
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/stat_sys_zen_limited.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/heads_up_window_bg.9.png b/packages/SystemUI/res/drawable-xxhdpi/heads_up_window_bg.9.png
deleted file mode 100644
index 586a738..0000000
--- a/packages/SystemUI/res/drawable-xxhdpi/heads_up_window_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_action_assist_generic_activated.png b/packages/SystemUI/res/drawable-xxhdpi/ic_action_assist_generic_activated.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_action_assist_generic_activated.png
rename to packages/SystemUI/res/drawable-xxhdpi/ic_action_assist_generic_activated.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_action_assist_generic_normal.png b/packages/SystemUI/res/drawable-xxhdpi/ic_action_assist_generic_normal.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_action_assist_generic_normal.png
rename to packages/SystemUI/res/drawable-xxhdpi/ic_action_assist_generic_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_ime_switcher_default.png b/packages/SystemUI/res/drawable-xxhdpi/ic_ime_switcher_default.png
new file mode 100644
index 0000000..6c8222e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_ime_switcher_default.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/ic_lockscreen_glowdot.png b/packages/SystemUI/res/drawable-xxhdpi/ic_lockscreen_glowdot.png
similarity index 100%
rename from core/res/res/drawable-xxhdpi/ic_lockscreen_glowdot.png
rename to packages/SystemUI/res/drawable-xxhdpi/ic_lockscreen_glowdot.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_notify_open_normal.png b/packages/SystemUI/res/drawable-xxhdpi/ic_notify_open_normal.png
index 60579f9..7742207 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_notify_open_normal.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_notify_open_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_notify_quicksettings_normal.png b/packages/SystemUI/res/drawable-xxhdpi/ic_notify_quicksettings_normal.png
index abb9b18..a2e8fe1 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_notify_quicksettings_normal.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_notify_quicksettings_normal.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_off.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_off_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_off.png
rename to packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_off_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_on.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_on_alpha.png
similarity index 100%
rename from packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_on.png
rename to packages/SystemUI/res/drawable-xxhdpi/ic_qs_brightness_auto_on_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_color_space_alpha.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_color_space_alpha.png
new file mode 100644
index 0000000..7f441c8
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_color_space_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_contrast_alpha.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_contrast_alpha.png
new file mode 100644
index 0000000..82c3842
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_contrast_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_qs_inversion_alpha.png b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_inversion_alpha.png
new file mode 100644
index 0000000..ce9bae2
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_qs_inversion_alpha.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/recents_task_shadow.9.png b/packages/SystemUI/res/drawable-xxhdpi/recents_task_shadow.9.png
new file mode 100644
index 0000000..36e7e45
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/recents_task_shadow.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/search_bg_transparent.9.png b/packages/SystemUI/res/drawable-xxhdpi/search_bg_transparent.9.png
new file mode 100644
index 0000000..c0bf31d
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/search_bg_transparent.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/spinner_default_holo_dark_am_no_underline.9.png b/packages/SystemUI/res/drawable-xxhdpi/spinner_default_holo_dark_am_no_underline.9.png
new file mode 100644
index 0000000..29fb50f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/spinner_default_holo_dark_am_no_underline.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_zen_full.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_zen_full.png
new file mode 100644
index 0000000..afe85b4
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_zen_full.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/stat_sys_zen_limited.png b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_zen_limited.png
new file mode 100644
index 0000000..5e5053f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xxhdpi/stat_sys_zen_limited.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/heads_up_notification_row_bg.xml b/packages/SystemUI/res/drawable/heads_up_notification_row_bg.xml
deleted file mode 100644
index 59d9fcf..0000000
--- a/packages/SystemUI/res/drawable/heads_up_notification_row_bg.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-          android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-    <item android:state_pressed="true"
-          android:drawable="@drawable/heads_up_notification_bg_pressed" />
-</selector>
diff --git a/core/res/res/drawable/ic_action_assist_generic.xml b/packages/SystemUI/res/drawable/ic_action_assist_generic.xml
similarity index 100%
rename from core/res/res/drawable/ic_action_assist_generic.xml
rename to packages/SystemUI/res/drawable/ic_action_assist_generic.xml
diff --git a/packages/SystemUI/res/drawable/ic_notify_button_bg.xml b/packages/SystemUI/res/drawable/ic_notify_button_bg.xml
index 85f1ea2..3a47261 100644
--- a/packages/SystemUI/res/drawable/ic_notify_button_bg.xml
+++ b/packages/SystemUI/res/drawable/ic_notify_button_bg.xml
@@ -15,6 +15,6 @@
 -->
 
 <selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_pressed="true"  android:drawable="@*android:drawable/list_selector_pressed_holo_dark" />
-    <item                               android:drawable="@*android:drawable/list_selector_disabled_holo_dark" />
+    <item android:state_pressed="true"
+          android:drawable="@*android:drawable/list_selector_pressed_holo_dark" />
 </selector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_brightness_auto_off.xml b/packages/SystemUI/res/drawable/ic_qs_brightness_auto_off.xml
new file mode 100644
index 0000000..b7fe5ab
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_brightness_auto_off.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_brightness_auto_off_alpha"
+    android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_brightness_auto_on.xml b/packages/SystemUI/res/drawable/ic_qs_brightness_auto_on.xml
new file mode 100644
index 0000000..e17b533
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_brightness_auto_on.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_brightness_auto_on_alpha"
+    android:tint="?android:attr/colorControlNormal" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_color_space_off.xml b/packages/SystemUI/res/drawable/ic_qs_color_space_off.xml
new file mode 100644
index 0000000..cf34ba6
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_color_space_off.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_color_space_alpha"
+    android:tint="@color/ic_qs_off" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_color_space_on.xml b/packages/SystemUI/res/drawable/ic_qs_color_space_on.xml
new file mode 100644
index 0000000..1806688
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_color_space_on.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_color_space_alpha"
+    android:tint="@color/ic_qs_on" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_contrast_off.xml b/packages/SystemUI/res/drawable/ic_qs_contrast_off.xml
new file mode 100644
index 0000000..5f65d8a
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_contrast_off.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_contrast_alpha"
+    android:tint="@color/ic_qs_off" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_contrast_on.xml b/packages/SystemUI/res/drawable/ic_qs_contrast_on.xml
new file mode 100644
index 0000000..a018929
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_contrast_on.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_contrast_alpha"
+    android:tint="@color/ic_qs_on" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_inversion_off.xml b/packages/SystemUI/res/drawable/ic_qs_inversion_off.xml
new file mode 100644
index 0000000..9018a90
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_inversion_off.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_inversion_alpha"
+    android:tint="@color/ic_qs_off" />
diff --git a/packages/SystemUI/res/drawable/ic_qs_inversion_on.xml b/packages/SystemUI/res/drawable/ic_qs_inversion_on.xml
new file mode 100644
index 0000000..9110201
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_inversion_on.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+    android:src="@drawable/ic_qs_inversion_alpha"
+    android:tint="@color/ic_qs_on" />
diff --git a/packages/SystemUI/res/drawable/notification_row_legacy_bg.xml b/packages/SystemUI/res/drawable/notification_row_legacy_bg.xml
index 0e1bdd3..ce3372e 100644
--- a/packages/SystemUI/res/drawable/notification_row_legacy_bg.xml
+++ b/packages/SystemUI/res/drawable/notification_row_legacy_bg.xml
@@ -17,6 +17,6 @@
 <selector xmlns:android="http://schemas.android.com/apk/res/android"
         android:exitFadeDuration="@android:integer/config_mediumAnimTime">
 
-    <item android:state_pressed="true"  android:drawable="@*android:drawable/notification_item_background_color_pressed" />
+    <item android:state_pressed="true"  android:drawable="@drawable/notification_item_background_color_pressed" />
     <item android:state_pressed="false" android:drawable="@drawable/notification_item_background_legacy_color" />
 </selector>
diff --git a/packages/SystemUI/res/drawable/status_bar_item_background.xml b/packages/SystemUI/res/drawable/status_bar_item_background.xml
index b82fed9..3a50aa9 100644
--- a/packages/SystemUI/res/drawable/status_bar_item_background.xml
+++ b/packages/SystemUI/res/drawable/status_bar_item_background.xml
@@ -19,7 +19,7 @@
     android:opacity="translucent"
     >
     <item
-        android:drawable="@*android:drawable/notification_item_background_color"
+        android:drawable="@drawable/notification_item_background_color"
         />
 </layer-list>
 
diff --git a/packages/SystemUI/res/drawable/status_bar_ticker_background.xml b/packages/SystemUI/res/drawable/status_bar_ticker_background.xml
deleted file mode 100644
index 7cb64c0..0000000
--- a/packages/SystemUI/res/drawable/status_bar_ticker_background.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<bitmap
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:tileMode="repeat"
-    android:src="@*android:drawable/notify_panel_notification_icon_bg"
-    />
diff --git a/packages/SystemUI/res/drawable/system_bar_ticker_background.xml b/packages/SystemUI/res/drawable/system_bar_ticker_background.xml
deleted file mode 100644
index 7cb64c0..0000000
--- a/packages/SystemUI/res/drawable/system_bar_ticker_background.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-
-<bitmap
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:tileMode="repeat"
-    android:src="@*android:drawable/notify_panel_notification_icon_bg"
-    />
diff --git a/packages/SystemUI/res/drawable/ticker_background.xml b/packages/SystemUI/res/drawable/ticker_background.xml
index 07b44ca..7320fa0 100644
--- a/packages/SystemUI/res/drawable/ticker_background.xml
+++ b/packages/SystemUI/res/drawable/ticker_background.xml
@@ -20,7 +20,7 @@
     >
     <!-- the large icon extends 12dp beyond the edge of the status bar -->
     <item
-        android:drawable="@*android:drawable/notification_item_background_color"
+        android:drawable="@drawable/notification_item_background_color"
         android:top="12dp"
         />
 </layer-list>
diff --git a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml
index a109191..ddffd6e 100644
--- a/packages/SystemUI/res/layout-land/status_bar_search_panel.xml
+++ b/packages/SystemUI/res/layout-land/status_bar_search_panel.xml
@@ -51,13 +51,13 @@
                 prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions"
                 prvandroid:outerRingDrawable="@drawable/navbar_search_outerring"
                 prvandroid:outerRadius="@dimen/navbar_search_outerring_radius"
-                prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
+                prvandroid:innerRadius="@dimen/glowpadview_inner_radius"
                 prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
                 prvandroid:feedbackCount="0"
                 prvandroid:vibrationDuration="@integer/config_vibration_duration"
                 prvandroid:alwaysTrackFinger="true"
-                prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
-                prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"
+                prvandroid:glowRadius="@dimen/glowpadview_glow_radius"
+                prvandroid:pointDrawable="@drawable/ic_lockscreen_glowdot"
                 />
 
         </RelativeLayout>
diff --git a/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml b/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml
index aa7256b..5f12706 100644
--- a/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml
+++ b/packages/SystemUI/res/layout-ldrtl/navigation_bar.xml
@@ -43,7 +43,7 @@
 
             <!-- navigation controls -->
             <View
-                android:layout_width="40dp"
+                android:layout_width="@dimen/navigation_extra_key_width"
                 android:layout_height="match_parent"
                 android:layout_weight="0"
                 android:visibility="invisible"
@@ -88,16 +88,29 @@
                 systemui:glowBackground="@drawable/ic_sysbar_highlight"
                 android:contentDescription="@string/accessibility_recent"
                 />
-            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
-                android:layout_width="@dimen/navigation_menu_key_width"
+            <FrameLayout
+                android:layout_width="@dimen/navigation_extra_key_width"
                 android:layout_height="match_parent"
-                android:src="@drawable/ic_sysbar_menu"
-                systemui:keyCode="82"
-                android:layout_weight="0"
-                android:visibility="invisible"
-                android:contentDescription="@string/accessibility_menu"
-                systemui:glowBackground="@drawable/ic_sysbar_highlight"
-                />
+                android:layout_weight="0" >
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/menu"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:contentDescription="@string/accessibility_menu"
+                    android:src="@drawable/ic_sysbar_menu"
+                    android:visibility="invisible"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                    systemui:keyCode="82" />
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/ime_switcher"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:contentDescription="@string/accessibility_ime_switch_button"
+                    android:scaleType="centerInside"
+                    android:src="@drawable/ic_ime_switcher_default"
+                    android:visibility="invisible"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight" />
+            </FrameLayout>
         </LinearLayout>
 
         <!-- lights out layout to match exactly -->
@@ -187,16 +200,29 @@
             >
             
             <!-- navigation controls -->
-            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
-                android:layout_height="40dp"
-                android:layout_width="match_parent"
-                android:src="@drawable/ic_sysbar_menu_land"
-                systemui:keyCode="82"
-                android:layout_weight="0"
-                android:visibility="invisible"
-                android:contentDescription="@string/accessibility_menu"
-                systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
-                />
+            <FrameLayout
+                android:layout_width="@dimen/navigation_extra_key_width"
+                android:layout_height="match_parent"
+                android:layout_weight="0" >
+                <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+                    android:layout_height="@dimen/navigation_extra_key_width"
+                    android:layout_width="match_parent"
+                    android:src="@drawable/ic_sysbar_menu_land"
+                    systemui:keyCode="82"
+                    android:layout_weight="0"
+                    android:visibility="invisible"
+                    android:contentDescription="@string/accessibility_menu"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight_land" />
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/ime_switcher"
+                    android:layout_height="@dimen/navigation_extra_key_width"
+                    android:layout_width="match_parent"
+                    android:contentDescription="@string/accessibility_ime_switch_button"
+                    android:scaleType="centerInside"
+                    android:src="@drawable/ic_ime_switcher_default"
+                    android:visibility="invisible"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight" />
+            </FrameLayout>
             <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/back"
                 android:layout_height="80dp"
                 android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/layout-sw600dp/heads_up.xml b/packages/SystemUI/res/layout-sw600dp/heads_up.xml
new file mode 100644
index 0000000..71f7c21
--- /dev/null
+++ b/packages/SystemUI/res/layout-sw600dp/heads_up.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2014, 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.
+*/
+-->
+<com.android.systemui.statusbar.policy.HeadsUpNotificationView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_height="wrap_content"
+    android:layout_width="match_parent"
+    >
+    <FrameLayout
+        android:id="@+id/content_holder"
+        android:layout_height="wrap_content"
+        android:layout_width="@dimen/notification_panel_width"
+        android:layout_marginStart="@dimen/notification_panel_margin_left"
+        android:background="@drawable/heads_up_window_bg"
+        />
+</com.android.systemui.statusbar.policy.HeadsUpNotificationView>
diff --git a/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml
index b9ad799..6a2e3c6 100644
--- a/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml
+++ b/packages/SystemUI/res/layout-sw600dp/navigation_bar.xml
@@ -42,7 +42,7 @@
 
             <!-- navigation controls -->
             <View
-                android:layout_width="48dp"
+                android:layout_width="@dimen/navigation_extra_key_width"
                 android:layout_height="match_parent"
                 android:layout_weight="0"
                 android:layout_marginStart="2dp"
@@ -85,17 +85,32 @@
                 android:layout_height="match_parent"
                 android:layout_weight="1"
                 />
-            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
-                android:layout_width="48dp"
+            <FrameLayout
+                android:layout_width="@dimen/navigation_extra_key_width"
                 android:layout_height="match_parent"
-                android:src="@drawable/ic_sysbar_menu"
-                android:layout_marginEnd="2dp"
-                systemui:keyCode="82"
                 android:layout_weight="0"
-                android:visibility="invisible"
-                android:contentDescription="@string/accessibility_menu"
-                systemui:glowBackground="@drawable/ic_sysbar_highlight"
-                />
+                android:layout_marginEnd="2dp" >
+                <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:src="@drawable/ic_sysbar_menu"
+                    android:layout_marginEnd="2dp"
+                    systemui:keyCode="82"
+                    android:visibility="invisible"
+                    android:contentDescription="@string/accessibility_menu"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                    />
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/ime_switcher"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:layout_marginEnd="2dp"
+                    android:scaleType="centerInside"
+                    android:src="@drawable/ic_ime_switcher_default"
+                    android:visibility="invisible"
+                    android:contentDescription="@string/accessibility_ime_switch_button"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight" />
+            </FrameLayout>
         </LinearLayout>
 
         <!-- lights out layout to match exactly -->
@@ -184,7 +199,7 @@
 
             <!-- navigation controls -->
             <View
-                android:layout_width="48dp"
+                android:layout_width="@dimen/navigation_extra_key_width"
                 android:layout_height="match_parent"
                 android:layout_weight="0"
                 android:layout_marginStart="2dp"
@@ -227,17 +242,32 @@
                 android:layout_height="match_parent"
                 android:layout_weight="1"
                 />
-            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
-                android:layout_width="48dp"
+            <FrameLayout
+                android:layout_width="@dimen/navigation_extra_key_width"
                 android:layout_height="match_parent"
                 android:layout_marginEnd="2dp"
-                android:src="@drawable/ic_sysbar_menu"
-                systemui:keyCode="82"
-                android:layout_weight="0"
-                android:visibility="invisible"
-                android:contentDescription="@string/accessibility_menu"
-                systemui:glowBackground="@drawable/ic_sysbar_highlight"
-                />
+                android:layout_weight="0" >
+                <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:layout_marginEnd="2dp"
+                    android:src="@drawable/ic_sysbar_menu"
+                    systemui:keyCode="82"
+                    android:visibility="invisible"
+                    android:contentDescription="@string/accessibility_menu"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                    />
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/ime_switcher"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:layout_marginEnd="2dp"
+                    android:src="@drawable/ic_ime_switcher_default"
+                    android:visibility="invisible"
+                    android:contentDescription="@string/accessibility_ime_switch_button"
+                    android:scaleType="centerInside"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight" />
+            </FrameLayout>
         </LinearLayout>
 
         <!-- lights out layout to match exactly -->
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml
index 1fa67bd..08f61bb 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_search_panel.xml
@@ -37,12 +37,12 @@
         prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions"
         prvandroid:outerRingDrawable="@drawable/navbar_search_outerring"
         prvandroid:outerRadius="@dimen/navbar_search_outerring_radius"
-        prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
+        prvandroid:innerRadius="@dimen/glowpadview_inner_radius"
         prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
         prvandroid:feedbackCount="0"
         prvandroid:vibrationDuration="@integer/config_vibration_duration"
         prvandroid:alwaysTrackFinger="true"
-        prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
-        prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"/>
+        prvandroid:glowRadius="@dimen/glowpadview_glow_radius"
+        prvandroid:pointDrawable="@drawable/ic_lockscreen_glowdot"/>
 
 </com.android.systemui.SearchPanelView>
diff --git a/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml b/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml
deleted file mode 100644
index 0947c6f..0000000
--- a/packages/SystemUI/res/layout-sw600dp/super_status_bar.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 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.
-*/
--->
-
-<!-- This is the combined status bar / notification panel window. -->
-<com.android.systemui.statusbar.phone.StatusBarWindowView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
-    android:focusable="true"
-    android:descendantFocusability="afterDescendants"
-    android:fitsSystemWindows="true"
-    >
-
-    <include layout="@layout/status_bar"
-        android:layout_width="match_parent"
-        android:layout_height="@*android:dimen/status_bar_height"
-        />
-
-
-    <com.android.systemui.statusbar.phone.PanelHolder
-        android:id="@+id/panel_holder"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_marginTop="@*android:dimen/status_bar_height"
-        >
-        <include layout="@layout/status_bar_expanded"
-            android:layout_width="@dimen/notification_panel_width"
-            android:layout_height="wrap_content"
-            android:layout_gravity="start|top"
-            />
-        <include layout="@layout/quick_settings"
-            android:layout_width="@dimen/notification_panel_width"
-            android:layout_height="wrap_content"
-            android:layout_gravity="end|top"
-            />
-    </com.android.systemui.statusbar.phone.PanelHolder>
-</com.android.systemui.statusbar.phone.StatusBarWindowView>
diff --git a/packages/SystemUI/res/layout/flip_settings.xml b/packages/SystemUI/res/layout/flip_settings.xml
index 1b8898c5..f3c1b90 100644
--- a/packages/SystemUI/res/layout/flip_settings.xml
+++ b/packages/SystemUI/res/layout/flip_settings.xml
@@ -14,18 +14,13 @@
      limitations under the License.
 -->
 
-<com.android.systemui.statusbar.phone.QuickSettingsScrollView
+<com.android.systemui.statusbar.phone.QuickSettingsContainerView
     xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/quick_settings_container"
+    android:padding="@dimen/notification_side_padding"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:layout_marginBottom="@dimen/close_handle_underlap"
-    android:overScrollMode="ifContentScrolls"
-    >
-    <com.android.systemui.statusbar.phone.QuickSettingsContainerView
-        android:id="@+id/quick_settings_container"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:animateLayoutChanges="true"
-        android:columnCount="@integer/quick_settings_num_columns"
-        />
-</com.android.systemui.statusbar.phone.QuickSettingsScrollView>
\ No newline at end of file
+    android:background="#5f000000"
+    android:animateLayoutChanges="true"
+    android:visibility="gone"
+    android:columnCount="@integer/quick_settings_num_columns" />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/heads_up.xml b/packages/SystemUI/res/layout/heads_up.xml
index 564dc51..3a58b84 100644
--- a/packages/SystemUI/res/layout/heads_up.xml
+++ b/packages/SystemUI/res/layout/heads_up.xml
@@ -17,25 +17,11 @@
 ** limitations under the License.
 */
 -->
-
-<!--    android:background="@drawable/status_bar_closed_default_background" -->
 <com.android.systemui.statusbar.policy.HeadsUpNotificationView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_height="wrap_content"
-    android:layout_width="match_parent"
-    android:orientation="vertical"
-    >
-    <FrameLayout
-            android:layout_height="wrap_content"
-            android:layout_width="@dimen/notification_panel_width"
-            android:id="@+id/content_slider"
-            android:layout_marginStart="@dimen/notification_panel_margin_left"
-            >
-        <FrameLayout
-                android:layout_height="wrap_content"
-                android:layout_width="match_parent"
-                android:id="@+id/content_holder"
-                android:background="@drawable/heads_up_window_bg"
-                />
-    </FrameLayout>
-</com.android.systemui.statusbar.policy.HeadsUpNotificationView>
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_height="wrap_content"
+        android:layout_width="@dimen/notification_panel_width"
+        android:id="@+id/content_holder"
+        android:layout_marginStart="@dimen/notification_panel_margin_left"
+        android:background="@drawable/notification_panel_bg"
+        />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
new file mode 100644
index 0000000..809adcd
--- /dev/null
+++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<com.android.systemui.statusbar.phone.KeyguardBottomAreaView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+    android:id="@+id/keyguard_bottom_area"
+    android:layout_height="match_parent"
+    android:layout_width="match_parent"
+    >
+    <com.android.systemui.statusbar.policy.KeyButtonView
+        android:id="@+id/camera_button"
+        android:layout_height="80dp"
+        android:layout_width="80dp"
+        android:layout_gravity="bottom|right"
+        android:src="@drawable/ic_sysbar_camera"
+        android:scaleType="center"
+        android:contentDescription="@string/accessibility_camera_button"
+        systemui:glowBackground="@drawable/ic_sysbar_highlight_land" />
+
+    <com.android.systemui.statusbar.phone.KeyguardIndicationTextView
+        android:id="@+id/keyguard_indication_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginBottom="100dp"
+        android:layout_gravity="bottom|center_horizontal"
+        android:textStyle="italic"
+        android:textAppearance="?android:attr/textAppearanceMedium"/>
+
+</com.android.systemui.statusbar.phone.KeyguardBottomAreaView>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/navigation_bar.xml b/packages/SystemUI/res/layout/navigation_bar.xml
index 5488a87..7470409 100644
--- a/packages/SystemUI/res/layout/navigation_bar.xml
+++ b/packages/SystemUI/res/layout/navigation_bar.xml
@@ -88,16 +88,31 @@
                 systemui:glowBackground="@drawable/ic_sysbar_highlight"
                 android:contentDescription="@string/accessibility_recent"
                 />
-            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
-                android:layout_width="@dimen/navigation_menu_key_width"
+            <FrameLayout
+                android:layout_width="@dimen/navigation_extra_key_width"
                 android:layout_height="match_parent"
-                android:src="@drawable/ic_sysbar_menu"
-                systemui:keyCode="82"
-                android:layout_weight="0"
-                android:visibility="invisible"
-                android:contentDescription="@string/accessibility_menu"
-                systemui:glowBackground="@drawable/ic_sysbar_highlight"
-                />
+                android:layout_weight="0" >
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/menu"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:contentDescription="@string/accessibility_menu"
+                    android:src="@drawable/ic_sysbar_menu"
+                    android:visibility="invisible"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight"
+                    systemui:keyCode="82" />
+
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/ime_switcher"
+                    android:layout_width="@dimen/navigation_extra_key_width"
+                    android:layout_height="match_parent"
+                    android:contentDescription="@string/accessibility_ime_switch_button"
+                    android:scaleType="centerInside"
+                    android:src="@drawable/ic_ime_switcher_default"
+                    android:visibility="invisible"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight" />
+            </FrameLayout>
+
         </LinearLayout>
 
         <!-- lights out layout to match exactly -->
@@ -159,17 +174,6 @@
                 android:visibility="gone"
                 android:contentDescription="@string/accessibility_search_light"
                 />
-
-            <com.android.systemui.statusbar.policy.KeyButtonView
-                android:id="@+id/camera_button"
-                android:layout_height="match_parent"
-                android:layout_width="80dp"
-                android:layout_gravity="center_vertical|right"
-                android:src="@drawable/ic_sysbar_camera"
-                android:scaleType="center"
-                android:visibility="gone"
-                android:contentDescription="@string/accessibility_camera_button"
-                />
         </FrameLayout>
 
         <com.android.systemui.statusbar.policy.DeadZone
@@ -201,18 +205,33 @@
             android:id="@+id/nav_buttons"
             android:animateLayoutChanges="true"
             >
-            
+
             <!-- navigation controls -->
-            <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/menu"
-                android:layout_height="40dp"
-                android:layout_width="match_parent"
-                android:src="@drawable/ic_sysbar_menu_land"
-                systemui:keyCode="82"
+            <FrameLayout
                 android:layout_weight="0"
-                android:visibility="invisible"
-                android:contentDescription="@string/accessibility_menu"
-                systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
-                />
+                android:layout_width="match_parent"
+                android:layout_height="40dp" >
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/ime_switcher"
+                    android:layout_width="match_parent"
+                    android:layout_height="40dp"
+                    android:contentDescription="@string/accessibility_ime_switch_button"
+                    android:scaleType="centerInside"
+                    android:src="@drawable/ic_ime_switcher_default"
+                    android:visibility="invisible"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight" />
+
+                <com.android.systemui.statusbar.policy.KeyButtonView
+                    android:id="@+id/menu"
+                    android:layout_width="match_parent"
+                    android:layout_height="40dp"
+                    android:contentDescription="@string/accessibility_menu"
+                    android:src="@drawable/ic_sysbar_menu_land"
+                    android:visibility="invisible"
+                    systemui:glowBackground="@drawable/ic_sysbar_highlight_land"
+                    systemui:keyCode="82" />
+            </FrameLayout>
+
             <com.android.systemui.statusbar.policy.KeyButtonView android:id="@+id/recent_apps"
                 android:layout_height="80dp"
                 android:layout_width="match_parent"
diff --git a/packages/SystemUI/res/layout/notification_adaptive_wrapper.xml b/packages/SystemUI/res/layout/notification_adaptive_wrapper.xml
deleted file mode 100644
index 15d0890..0000000
--- a/packages/SystemUI/res/layout/notification_adaptive_wrapper.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-<SizeAdaptiveLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:background="@android:color/background_dark"
-    android:id="@+id/notification_adaptive_wrapper"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content" />
diff --git a/packages/SystemUI/res/layout/quick_settings.xml b/packages/SystemUI/res/layout/quick_settings.xml
deleted file mode 100644
index 75082ba..0000000
--- a/packages/SystemUI/res/layout/quick_settings.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<com.android.systemui.statusbar.phone.SettingsPanelView 
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:id="@+id/settings_panel"
-    android:background="@drawable/notification_panel_bg"
-    >
-    <!-- TODO: Put into ScrollView -->
-    <com.android.systemui.statusbar.phone.QuickSettingsScrollView
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginBottom="@dimen/close_handle_underlap"
-        android:overScrollMode="ifContentScrolls"
-        >
-        <com.android.systemui.statusbar.phone.QuickSettingsContainerView
-            android:id="@+id/quick_settings_container"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:animateLayoutChanges="true"
-            android:columnCount="@integer/quick_settings_num_columns"
-            />
-    </com.android.systemui.statusbar.phone.QuickSettingsScrollView>
-
-    <View
-        android:id="@+id/handle"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/close_handle_height"
-        android:background="@drawable/status_bar_close"
-        android:visibility="invisible"
-        />
-
-</com.android.systemui.statusbar.phone.SettingsPanelView >
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
index a6f4e9b..b7df51d 100644
--- a/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
+++ b/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml
@@ -13,27 +13,25 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<LinearLayout 
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
     style="@style/BrightnessDialogContainer">
 
     <ImageView
         android:id="@+id/brightness_icon"
-	    android:layout_width="wrap_content"
-	    android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
-        android:paddingEnd="10dp"
+        android:layout_marginEnd="8dp"
         android:src="@drawable/ic_qs_brightness_auto_off"
-        />
+        android:contentDescription="@null" />
+
     <com.android.systemui.settings.ToggleSlider
         android:id="@+id/brightness_slider"
         android:layout_width="0dp"
         android:layout_height="40dp"
-        android:layout_weight="1"
-        android:layout_marginEnd="2dp"
         android:layout_gravity="center_vertical"
-        systemui:text="@string/status_bar_settings_auto_brightness_label"
-        />
+        android:layout_weight="1"
+        systemui:text="@string/status_bar_settings_auto_brightness_label" />
+
 </LinearLayout>
diff --git a/packages/SystemUI/res/layout/quick_settings_tile_battery.xml b/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
index f3b894c..1f39aef 100644
--- a/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
+++ b/packages/SystemUI/res/layout/quick_settings_tile_battery.xml
@@ -15,6 +15,7 @@
 -->
 <LinearLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="top"
@@ -27,6 +28,7 @@
             android:layout_height="32dp"
             android:padding="3dp"
             android:layout_gravity="top|center_horizontal"
+            systemui:frameColor="@color/qs_batterymeter_frame_color"
             />
     <TextView
             style="@style/TextAppearance.QuickSettings.TileView"
diff --git a/packages/SystemUI/res/layout/recents_empty.xml b/packages/SystemUI/res/layout/recents_empty.xml
new file mode 100644
index 0000000..6268628
--- /dev/null
+++ b/packages/SystemUI/res/layout/recents_empty.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<TextView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:gravity="center"
+    android:textSize="40sp"
+    android:textColor="#ffffffff"
+    android:text="@string/recents_empty_message"
+    android:fontFamily="sans-serif-thin"
+    android:visibility="gone" />
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/recents_search_bar.xml b/packages/SystemUI/res/layout/recents_search_bar.xml
new file mode 100644
index 0000000..915283e
--- /dev/null
+++ b/packages/SystemUI/res/layout/recents_search_bar.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/search_bg_transparent">
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:text="@string/recents_search_bar_label"
+        android:textColor="#99ffffff"
+        android:textSize="18sp"
+        android:textAllCaps="true" />
+</FrameLayout>
+
diff --git a/packages/SystemUI/res/layout/recents_task_view.xml b/packages/SystemUI/res/layout/recents_task_view.xml
new file mode 100644
index 0000000..ddc0dbf
--- /dev/null
+++ b/packages/SystemUI/res/layout/recents_task_view.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+<com.android.systemui.recents.views.TaskView
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent" 
+    android:layout_height="match_parent">
+    <com.android.systemui.recents.views.TaskThumbnailView
+        android:id="@+id/task_view_thumbnail"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+    <com.android.systemui.recents.views.TaskInfoView
+        android:id="@+id/task_view_info_pane"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:visibility="invisible"
+        android:background="@color/recents_task_bar_default_background_color">
+        <Button
+            android:id="@+id/task_view_app_info_button"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="20dp"
+            android:layout_marginEnd="20dp"
+            android:layout_gravity="top|center_horizontal"
+            android:text="@string/recents_app_info_button_label" />
+    </com.android.systemui.recents.views.TaskInfoView>
+    <com.android.systemui.recents.views.TaskBarView
+        android:id="@+id/task_view_bar"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="top|center_horizontal"
+        android:background="@color/recents_task_bar_default_background_color">
+        <ImageView
+            android:id="@+id/application_icon"
+            android:layout_width="@dimen/recents_task_view_application_icon_size"
+            android:layout_height="@dimen/recents_task_view_application_icon_size"
+            android:layout_gravity="center_vertical|start"
+            android:padding="8dp" />
+        <TextView
+            android:id="@+id/activity_description"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_vertical|left"
+            android:layout_marginStart="@dimen/recents_task_view_application_icon_size"
+            android:layout_marginEnd="8dp"
+            android:textSize="22sp"
+            android:textColor="#ffffffff"
+            android:text="@string/recents_empty_message"
+            android:fontFamily="sans-serif-thin"
+            android:singleLine="true"
+            android:maxLines="2"
+            android:ellipsize="marquee"
+            android:fadingEdge="horizontal" />
+    </com.android.systemui.recents.views.TaskBarView>
+</com.android.systemui.recents.views.TaskView>
+
+
diff --git a/packages/SystemUI/res/layout/status_bar.xml b/packages/SystemUI/res/layout/status_bar.xml
index eb66908..1b35537 100644
--- a/packages/SystemUI/res/layout/status_bar.xml
+++ b/packages/SystemUI/res/layout/status_bar.xml
@@ -27,7 +27,6 @@
     android:orientation="vertical"
     android:focusable="true"
     android:descendantFocusability="afterDescendants"
-    android:fitsSystemWindows="true"
     >
 
     <ImageView
@@ -62,7 +61,11 @@
                 android:src="@drawable/stat_notify_more"
                 android:visibility="gone"
                 />
-
+            <com.android.systemui.statusbar.StatusBarIconView android:id="@+id/modeIcon"
+                android:layout_width="@dimen/status_bar_icon_size"
+                android:layout_height="match_parent"
+                android:visibility="gone"
+                />
             <com.android.systemui.statusbar.phone.IconMerger android:id="@+id/notificationIcons"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
diff --git a/packages/SystemUI/res/layout/status_bar_expanded.xml b/packages/SystemUI/res/layout/status_bar_expanded.xml
index 1693e01..761ad42 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded.xml
@@ -24,19 +24,10 @@
     android:id="@+id/notification_panel"
     android:layout_width="0dp"
     android:layout_height="wrap_content"
-    android:background="@drawable/notification_panel_bg"
     android:paddingTop="@dimen/notification_panel_padding_top"
     android:layout_marginStart="@dimen/notification_panel_margin_left"
     >
 
-    <View
-        android:id="@+id/handle"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/close_handle_height"
-        android:background="@drawable/status_bar_close"
-        android:visibility="invisible"
-        />
-
     <include
         layout="@layout/carrier_label"
         android:layout_height="@dimen/carrier_label_height"
@@ -45,53 +36,65 @@
         android:layout_gravity="bottom"
         />
 
-    <LinearLayout
+    <include
+        layout="@layout/status_bar_flip_button"
+        android:id="@+id/keyguard_flipper"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:layout_gravity="right|top"
+        android:layout_marginTop="@dimen/status_bar_height"
+        android:visibility="gone" />
+
+    <com.android.keyguard.CarrierText
+        android:id="@+id/keyguard_carrier_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginTop="2dp"
+        android:layout_marginLeft="8dp"
+        android:ellipsize="marquee"
+        android:textAppearance="?android:attr/textAppearanceMedium" />
+
+    <include layout="@layout/status_bar_expanded_header"
+        android:layout_width="match_parent"
+        android:layout_height="@dimen/notification_panel_header_height"
+        />
+
+    <include
+        layout="@layout/keyguard_status_view"
+        android:layout_height="wrap_content"
+        android:visibility="gone" />
+
+    <TextView
+        android:id="@+id/emergency_calls_only"
+        android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Network.EmergencyOnly"
+        android:layout_height="wrap_content"
+        android:layout_width="match_parent"
+        android:padding="4dp"
+        android:gravity="center"
+        android:visibility="gone"
+        />
+
+    <FrameLayout
+        android:id="@+id/notification_container_parent"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginBottom="@dimen/close_handle_underlap"
-        android:orientation="vertical"
-        android:animateLayoutChanges="false"
         >
-
-        <include layout="@layout/status_bar_expanded_header"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/notification_panel_header_height"
-            />
-
-        <TextView
-            android:id="@+id/emergency_calls_only"
-            android:textAppearance="@style/TextAppearance.StatusBar.Expanded.Network.EmergencyOnly"
-            android:layout_height="wrap_content"
-            android:layout_width="match_parent"
-            android:padding="4dp"
-            android:gravity="center"
-            android:visibility="gone"
-            />
-
-        <FrameLayout
+        <include
+            layout="@layout/flip_settings"
+            android:layout_marginTop="@dimen/notification_panel_header_height"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            >
-            <ViewStub android:id="@+id/flip_settings_stub"
-                android:layout="@layout/flip_settings"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                />
-    
-            <ScrollView
-                android:id="@+id/scroll"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:fadingEdge="none"
-                android:overScrollMode="ifContentScrolls"
-                >
-                <com.android.systemui.statusbar.policy.NotificationRowLayout
-                    android:id="@+id/latestItems"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    systemui:rowHeight="@dimen/notification_row_min_height"
-                    />
-            </ScrollView>
-        </FrameLayout>
-    </LinearLayout>
+            />
+
+        <com.android.systemui.statusbar.stack.NotificationStackScrollLayout
+            android:id="@+id/notification_stack_scroller"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            />
+    </FrameLayout>
+
+    <include
+        layout="@layout/keyguard_bottom_area"
+        android:visibility="gone" />
 </com.android.systemui.statusbar.phone.NotificationPanelView><!-- end of sliding panel -->
diff --git a/packages/SystemUI/res/layout/status_bar_expanded_header.xml b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
index 9aa7cfd..8975728 100644
--- a/packages/SystemUI/res/layout/status_bar_expanded_header.xml
+++ b/packages/SystemUI/res/layout/status_bar_expanded_header.xml
@@ -81,29 +81,11 @@
         android:src="@drawable/ic_notify_clear"
         android:background="@drawable/ic_notify_button_bg"
         android:contentDescription="@string/accessibility_clear_all"
-        />     
+        />
 
-    <FrameLayout android:id="@+id/settings_button_holder"
+    <include layout="@layout/status_bar_flip_button"
+        android:id="@+id/header_flipper"
         android:layout_width="50dp"
         android:layout_height="50dp"
-        android:layout_marginStart="12dp"
-        >
-        <ImageView android:id="@+id/settings_button"
-            android:layout_width="50dp"
-            android:layout_height="50dp"
-            android:scaleType="center"
-            android:src="@drawable/ic_notify_settings"
-            android:background="@drawable/ic_notify_button_bg"
-            android:contentDescription="@string/accessibility_desc_quick_settings"
-            />
-        <ImageView android:id="@+id/notification_button"
-            android:layout_width="50dp"
-            android:layout_height="50dp"
-            android:scaleType="center"
-            android:src="@drawable/ic_notifications"
-            android:background="@drawable/ic_notify_button_bg"
-            android:visibility="gone"
-            android:contentDescription="@string/accessibility_notifications_button"
-            />
-    </FrameLayout>
+        android:layout_marginStart="12dp" />
 </LinearLayout>
diff --git a/packages/SystemUI/res/layout/status_bar_flip_button.xml b/packages/SystemUI/res/layout/status_bar_flip_button.xml
new file mode 100644
index 0000000..b7dff8c
--- /dev/null
+++ b/packages/SystemUI/res/layout/status_bar_flip_button.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="50dp"
+        android:layout_height="50dp">
+    <ImageView android:id="@+id/settings_button"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:scaleType="center"
+        android:src="@drawable/ic_notify_settings"
+        android:background="@drawable/ic_notify_button_bg"
+        android:contentDescription="@string/accessibility_desc_quick_settings" />
+    <ImageView android:id="@+id/notification_button"
+        android:layout_width="50dp"
+        android:layout_height="50dp"
+        android:scaleType="center"
+        android:src="@drawable/ic_notifications"
+        android:background="@drawable/ic_notify_button_bg"
+        android:visibility="gone"
+        android:contentDescription="@string/accessibility_notifications_button" />
+</FrameLayout>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/status_bar_notification_keyguard_overflow.xml b/packages/SystemUI/res/layout/status_bar_notification_keyguard_overflow.xml
new file mode 100644
index 0000000..2e08bff
--- /dev/null
+++ b/packages/SystemUI/res/layout/status_bar_notification_keyguard_overflow.xml
@@ -0,0 +1,44 @@
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<!-- Extends FrameLayout -->
+<com.android.systemui.statusbar.NotificationOverflowContainer
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="32dp"
+    android:focusable="true"
+    android:clickable="true"
+    >
+    <TextView
+        android:id="@+id/more_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:gravity="center_horizontal"
+        android:textColor="@color/keyguard_overflow_content_color"
+        android:textAllCaps="true"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        />
+    <com.android.systemui.statusbar.NotificationOverflowIconsView
+        android:id="@+id/overflow_icons_view"
+        android:layout_gravity="end|center_vertical"
+        android:gravity="end"
+        android:paddingLeft="8dp"
+        android:paddingRight="8dp"
+        android:layout_width="120dp"
+        android:layout_height="wrap_content"
+        />
+</com.android.systemui.statusbar.NotificationOverflowContainer>
diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml
index f827967..8959a5b 100644
--- a/packages/SystemUI/res/layout/status_bar_notification_row.xml
+++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml
@@ -2,17 +2,17 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:focusable="true"
+    android:clickable="true"
     >
 
-    <View
-        android:id="@+id/top_glow"
-        android:alpha="0"
-        android:visibility="invisible"
+    <com.android.systemui.statusbar.NotificationContentView android:id="@+id/expanded"
+       android:layout_width="match_parent"
+       android:layout_height="wrap_content" />
+
+    <com.android.systemui.statusbar.NotificationContentView android:id="@+id/expandedPublic"
         android:layout_width="match_parent"
-        android:layout_height="@dimen/notification_divider_height"
-        android:layout_gravity="top|center_horizontal"
-        android:background="@drawable/top_divider_glow"
-        />
+        android:layout_height="wrap_content" />
 
     <Button
         android:id="@+id/veto"
@@ -25,31 +25,6 @@
         android:paddingStart="8dp"
         />
 
-    <com.android.systemui.statusbar.LatestItemView android:id="@+id/content"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginBottom="@dimen/notification_divider_height"
-        android:layout_marginTop="@dimen/notification_divider_height"
-        android:focusable="true"
-        android:clickable="true"
-        >
-
-        <com.android.internal.widget.SizeAdaptiveLayout android:id="@+id/adaptive"
-           android:layout_width="match_parent"
-           android:layout_height="wrap_content" />
-
-    </com.android.systemui.statusbar.LatestItemView>
-
-    <View
-        android:id="@+id/bottom_glow"
-        android:alpha="0"
-        android:visibility="invisible"
-        android:layout_width="match_parent"
-        android:layout_height="@dimen/notification_divider_height"
-        android:layout_gravity="bottom|center_horizontal"
-        android:background="@drawable/bottom_divider_glow"
-        />
-
     <TextView
         android:id="@+id/debug_info"
         android:visibility="invisible"
diff --git a/packages/SystemUI/res/layout/status_bar_search_panel.xml b/packages/SystemUI/res/layout/status_bar_search_panel.xml
index b871bef..c01db7c 100644
--- a/packages/SystemUI/res/layout/status_bar_search_panel.xml
+++ b/packages/SystemUI/res/layout/status_bar_search_panel.xml
@@ -51,13 +51,13 @@
                 prvandroid:directionDescriptions="@array/navbar_search_direction_descriptions"
                 prvandroid:outerRingDrawable="@drawable/navbar_search_outerring"
                 prvandroid:outerRadius="@dimen/navbar_search_outerring_radius"
-                prvandroid:innerRadius="@*android:dimen/glowpadview_inner_radius"
+                prvandroid:innerRadius="@dimen/glowpadview_inner_radius"
                 prvandroid:snapMargin="@dimen/navbar_search_snap_margin"
                 prvandroid:feedbackCount="0"
                 prvandroid:vibrationDuration="@integer/config_vibration_duration"
                 prvandroid:alwaysTrackFinger="true"
-                prvandroid:glowRadius="@*android:dimen/glowpadview_glow_radius"
-                prvandroid:pointDrawable="@*android:drawable/ic_lockscreen_glowdot"
+                prvandroid:glowRadius="@dimen/glowpadview_glow_radius"
+                prvandroid:pointDrawable="@drawable/ic_lockscreen_glowdot"
                />
 
         </RelativeLayout>
diff --git a/packages/SystemUI/res/layout/status_bar_toggle_slider.xml b/packages/SystemUI/res/layout/status_bar_toggle_slider.xml
index 834cc2c..e6d7c93 100644
--- a/packages/SystemUI/res/layout/status_bar_toggle_slider.xml
+++ b/packages/SystemUI/res/layout/status_bar_toggle_slider.xml
@@ -29,7 +29,7 @@
         android:layout_alignParentBottom="true"
         android:button="@null"
         />
-    <SeekBar
+    <com.android.systemui.settings.ToggleSeekBar
         android:id="@+id/slider"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml
index 2b56618..61d43d7 100644
--- a/packages/SystemUI/res/layout/super_status_bar.xml
+++ b/packages/SystemUI/res/layout/super_status_bar.xml
@@ -20,32 +20,25 @@
 <!-- This is the combined status bar / notification panel window. -->
 <com.android.systemui.statusbar.phone.StatusBarWindowView
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
     android:focusable="true"
-    android:descendantFocusability="afterDescendants"
     android:fitsSystemWindows="true"
-    android:background="@android:color/transparent"
-    >
+    android:descendantFocusability="afterDescendants">
 
     <include layout="@layout/status_bar"
         android:layout_width="match_parent"
-        android:layout_height="@*android:dimen/status_bar_height"
-        />
+        android:layout_height="@dimen/status_bar_height" />
 
     <com.android.systemui.statusbar.phone.PanelHolder
         android:id="@+id/panel_holder"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        >
+        android:layout_marginTop="@dimen/panel_holder_padding_top">
         <include layout="@layout/status_bar_expanded"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            />
-        <ViewStub android:id="@+id/quick_settings_stub"
-            android:layout="@layout/quick_settings"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            />
+            android:layout_width="@dimen/notification_panel_width"
+            android:layout_height="wrap_content"
+            android:layout_gravity="start|top" />
     </com.android.systemui.statusbar.phone.PanelHolder>
 
 </com.android.systemui.statusbar.phone.StatusBarWindowView>
diff --git a/packages/SystemUI/res/layout/user_switcher_host.xml b/packages/SystemUI/res/layout/user_switcher_host.xml
new file mode 100644
index 0000000..bc56cf6
--- /dev/null
+++ b/packages/SystemUI/res/layout/user_switcher_host.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<!-- FrameLayout -->
+<com.android.systemui.settings.UserSwitcherHostView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="#dd000000">
+    <FrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="@*android:dimen/volume_panel_top"
+            android:background="@*android:drawable/dialog_full_holo_dark">
+        <ListView android:id="@android:id/list"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                tools:listitem="@layout/user_switcher_item"/>
+    </FrameLayout>
+</com.android.systemui.settings.UserSwitcherHostView>
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/user_switcher_item.xml b/packages/SystemUI/res/layout/user_switcher_item.xml
new file mode 100644
index 0000000..43a85e7
--- /dev/null
+++ b/packages/SystemUI/res/layout/user_switcher_item.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2014 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
+  -->
+
+<LinearLayout
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:tools="http://schemas.android.com/tools"
+        android:layout_width="match_parent"
+        android:layout_height="64dp"
+        android:orientation="horizontal"
+        tools:context=".settings.UserSwitcherDialog">
+    <ImageView
+            android:layout_width="64dp"
+            android:layout_height="match_parent"
+            android:id="@+id/user_picture"
+            tools:src="@drawable/dessert_zombiegingerbread"/>
+    <TextView
+            android:layout_width="0dp"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:id="@+id/user_name"
+            android:textAppearance="?android:attr/textAppearanceLarge"
+            android:padding="8dp"
+            android:gravity="center_vertical"
+            tools:text="Hiroshi Lockheimer"
+            />
+</LinearLayout>
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 9ddf42a..d8a3114 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Laat altyd toe van hierdie rekenaar af"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoem om skerm te vul"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Strek om skerm te vul"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Versoenbaarheidszoem"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"As \'n program vir \'n kleiner skerm ontwerp is, sal \'n zoemkontrole naby die horlosie verskyn"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Stoor tans skermkiekie..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Stoor tans skermkiekie..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Skermkiekie word tans gestoor."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Tuis"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Kieslys"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Onlangse programme"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Deursoek"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knoppie vir wissel van invoermetode."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Versoenbaarheid-zoem se knoppie."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoem kleiner na groter skerm."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Vliegtuigmodus <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Ligging <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Wekker gestel vir <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data gedeaktiveer"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data gedeaktiveer"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi gekoppel"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Soek vir GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Ligging deur GPS gestel"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Liggingversoeke aktief"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Verwyder alle kennisgewings."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Programinligting"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Die skerm sal outomaties draai."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skerm is in landskapsoriëntasie gesluit."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skerm is in portretoriëntasie gesluit."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Nageregkas"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Sluimer"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegtuigmodus"</string>
@@ -181,11 +183,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Outoroteer"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotasie gesluit"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Gesluit op portret"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Gesluit op landskap"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Invoermetode"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Ligging"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ligging af"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Mediatoestel"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Net noodoproepe"</string>
@@ -196,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nie gekoppel nie"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk nie"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi af"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi-skerm"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Draadlose aansig"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Saai na skerm uit"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helderheid"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Kennisgewings verskyn hier"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Verkry enige tyd toegang tot hulle deur af te sleep.\nSleep weer af vir stelselkontroles."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Sleep rand van skerm om balk te wys"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Sleep van rand van skerm af om stelselbalk te wys"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Kleur-omkeringmodus"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Verbeterde kontrasmodus"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Kleurregstellingmodus"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ONLANGS"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programinligting"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"soek"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netwerk word\ndalk gemonitor"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Soek"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Gly op vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Gly links vir <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Kennisgewing versteek"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d kennisgewings versteek"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak om te wys"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Moenie steur nie"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d meer"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tik weer om oop te maak"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Sleep op om te ontsluit"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index 1d81ea7..9d1e036 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -20,7 +20,7 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" msgid="7164937344850004466">"የስርዓት UI"</string>
-    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"አጥራ"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"አጽዳ"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ከዝርዝር አስወግድ"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"የትግበራ መረጃ"</string>
     <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"ምንም የቅርብ ጊዜ ትግበራዎች የሉም"</string>
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"ሁልጊዜ ከዚህ ኮምፒውተር ፍቀድ"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ማያ እንዲሞላ አጉላ"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ማያ ለመሙለት ሳብ"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"የተኳኋኝነት አጉላ"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"ትግበራ ለትንሽ ማያ ሲነደፍ፣ የአጉላ መቆመጣጠሪያ በሰዓት በኩል ብቅ ይላል።"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"ቅጽበታዊ ገጽ እይታ እየተቀመጠ ነው::"</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"መነሻ"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"ምናሌ"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"የቅርብ ጊዜ  መተግበሪያዎች"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"ፈልግ"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"ካሜራ"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"የግቤት ስልት አዝራር ቀይር"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"የተኳኋኝአጉላ አዝራር።"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"አነስተኛውን ማያ ወደ ትልቅ አጉላ።"</string>
@@ -136,7 +136,7 @@
     <string name="accessibility_battery_level" msgid="7451474187113371965">"የባትሪ <xliff:g id="NUMBER">%d</xliff:g> መቶኛ።"</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"የስርዓት ቅንብሮች"</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"ማሳወቂያዎች"</string>
-    <string name="accessibility_remove_notification" msgid="3603099514902182350">"ማሳወቂያ አጥራ"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"ማሳወቂያ አጽዳ"</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ነቅቷል።"</string>
     <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS በማግኘት ላይ።"</string>
     <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ነቅቷል።"</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ባትሪ <xliff:g id="STATE">%s</xliff:g>።"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"የአውሮፕላን ሁነታ <xliff:g id="STATE">%s</xliff:g>።"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"ብሉቱዝ <xliff:g id="STATE">%s</xliff:g>።"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"አካባቢ <xliff:g id="STATE">%s</xliff:g>።"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ማንቂያ ለ<xliff:g id="TIME">%s</xliff:g> ተዋቅሯል።"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G ውሂብ ቦዝኗል"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G ውሂብ ቦዝኗል"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ተያይዟል"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"ለGPS በመፈለግ ላይ"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"በ GPS የተዘጋጀ ሥፍራ"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"የአካባቢ ጥያቄዎች ነቅተዋል"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"ሁሉንም ማሳወቂያዎች አጽዳ"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"የመተግበሪያ መረጃ"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ማያ ገጽ በራስ ሰር ይዞራል።"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ማያ ገጽ በወርድ ገፅ አቀማመጥ ተቆልፏል።"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ማያ ገጽ በቁም ገፅ አቀማመጥ ተቆልፏል።"</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"የማወራረጃ ምግቦች መያዣ"</string>
     <string name="start_dreams" msgid="7219575858348719790">"የቀን ህልም"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"ኤተርኔት"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"የአውሮፕላን ሁነታ"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"ብሩህነት"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ራስ-አዙር"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"አዙሪት ተቆልፏል"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ወደ ቁመት አቀማመጥ ተቆልፏል"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ወደ መሬት ገጽታ ተቆልፏል"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"የግቤት ስልት"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"አካባቢ"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"አካባቢ ጠፍቷል"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"አልተገናኘም"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ምንም አውታረ መረብ የለም"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ጠፍቷል"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"የWi-Fi ማሳያ"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"ገመድ አልባ ማሳያ"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ማያ ገጽ ውሰድ"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ብሩህነት"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ራስ-ሰር"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"ማሳወቂያዎች እዚህ ላይ ይታያሉ"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"ወደ ታች በማንሸራተት በማንኛውም ጊዜ ይድረሱባቸው።\nSwipe የስርዓት መቆጣጠሪያዎችን ለማምጣት እንደገና ወደ ታች ያንሸራትቱ።"</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"አሞሌውን ለማሳየት የማያ ገጹን ጠርዝ ላይ ያንሸራትቱ"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"አሞሌውን ለማሳየት ከማያ ገጹ ጠርዝ ጀምረው ያንሸራትቱ"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"የተቃራኒ ቀለም ሁነታ"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"የተሻሻለ ንፅፅር ሁነታ"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"የቀለም እርማት ሁነታ"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"የቅርብ ጊዜዎች"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"የመተግበሪያ መረጃ"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"ፈልግ"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"አውታረ መረብ\nክትትል ሊደረግበት ይችላል"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ፍለጋ"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ላይ አንሸራትት።"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"ለ<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ወደ ግራ አንሸራትት።"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"ማሳወቂያ ተደብቋል"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d ማሳወቂያዎች ተደብቀዋል"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"ለማሳየት ነካ ያድርጉ"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"አይረብሹ"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d ተጨማሪ"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"ለመክፈት ዳግም መታ ያድርጉ"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"ለማስከፈት ወደ ላይ ያንሸራትቱ"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index c31d6d9..22a032a 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -27,15 +27,15 @@
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"إزالة التطبيقات الحديثة"</string>
   <plurals name="status_bar_accessibility_recent_apps">
     <item quantity="one" msgid="5854176083865845541">"تطبيق حديث واحد"</item>
-    <item quantity="other" msgid="1040784359794890744">"%d من التطبيقات الحديثة"</item>
+    <item quantity="other" msgid="1040784359794890744">"‏%d من التطبيقات الحديثة"</item>
   </plurals>
-    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ليس هناك أي تنبيهات"</string>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ليس هناك أي اشعارات"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"مستمر"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"التنبيهات"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"الإشعارات"</string>
     <string name="battery_low_title" msgid="2783104807551211639">"توصيل الشاحن"</string>
     <string name="battery_low_subtitle" msgid="1752040062087829196">"انخفضت طاقة البطارية."</string>
     <string name="battery_low_percent_format" msgid="1077244949318261761">"المتبقي: <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
-    <string name="invalid_charger" msgid="4549105996740522523">"شحن USB غير معتمد.\nاستخدم الشاحن الموفر فقط."</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"‏شحن USB غير معتمد.\nاستخدم الشاحن الموفر فقط."</string>
     <string name="battery_low_why" msgid="7279169609518386372">"استخدام البطارية"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"الإعدادات"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
@@ -43,26 +43,24 @@
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"التدوير التلقائي للشاشة"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"كتم"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"تلقائي"</string>
-    <string name="status_bar_settings_notifications" msgid="397146176280905137">"التنبيهات"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"الإشعارات"</string>
     <string name="bluetooth_tethered" msgid="7094101612161133267">"تم إنشاء الاتصال بالإنترنت عن طريق البلوتوث."</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"إعداد أسلوب الإدخال"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"لوحة مفاتيح فعلية"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"هل تريد السماح للتطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> بالدخول إلى جهاز USB؟"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"هل تريد السماح للتطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> بالدخول إلى ملحق USB؟"</string>
-    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"هل تريد فتح <xliff:g id="ACTIVITY">%1$s</xliff:g> عند توصيل جهاز USB هذا؟"</string>
-    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"هل تريد فتح <xliff:g id="ACTIVITY">%1$s</xliff:g> عند توصيل ملحق USB هذا؟"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"لا يعمل أي تطبيق مثبت مع ملحق UEB هذا. مزيد من المعلومات عن هذا الملحق على <xliff:g id="URL">%1$s</xliff:g>."</string>
-    <string name="title_usb_accessory" msgid="4966265263465181372">"ملحق USB"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"‏هل تريد السماح للتطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> بالدخول إلى جهاز USB؟"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"‏هل تريد السماح للتطبيق <xliff:g id="APPLICATION">%1$s</xliff:g> بالدخول إلى ملحق USB؟"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"‏هل تريد فتح <xliff:g id="ACTIVITY">%1$s</xliff:g> عند توصيل جهاز USB هذا؟"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"‏هل تريد فتح <xliff:g id="ACTIVITY">%1$s</xliff:g> عند توصيل ملحق USB هذا؟"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"‏لا يعمل أي تطبيق مثبت مع ملحق UEB هذا. مزيد من المعلومات عن هذا الملحق على <xliff:g id="URL">%1$s</xliff:g>."</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"‏ملحق USB"</string>
     <string name="label_view" msgid="6304565553218192990">"عرض"</string>
-    <string name="always_use_device" msgid="1450287437017315906">"الاستخدام بشكل افتراضي لجهاز USB هذا"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"الاستخدام بشكل افتراضي لملحق USB هذا"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"هل تريد السماح بتصحيح أخطاء USB؟"</string>
-    <string name="usb_debugging_message" msgid="2220143855912376496">"الملف المرجعي الرئيسي لـ RSA في هذا الكمبيوتر هو:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"‏الاستخدام بشكل افتراضي لجهاز USB هذا"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"‏الاستخدام بشكل افتراضي لملحق USB هذا"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"‏هل تريد السماح بتصحيح أخطاء USB؟"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"‏الملف المرجعي الرئيسي لـ RSA في هذا الكمبيوتر هو:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"السماح دائمًا من هذا الكمبيوتر"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"تكبير/تصغير لملء الشاشة"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"توسيع بملء الشاشة"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"تكبير/تصغير التوافق"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"عند تصميم تطبيق لشاشة أصغر، سيظهر عنصر تحكم في التكبير/التصغير بجوار الساعة."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"جارٍ حفظ لقطة الشاشة..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"جارٍ حفظ لقطة الشاشة..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"يتم حفظ لقطة."</string>
@@ -70,14 +68,16 @@
     <string name="screenshot_saved_text" msgid="1152839647677558815">"المس لعرض لقطة الشاشة."</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"تعذر التقاط لقطة الشاشة."</string>
     <string name="screenshot_failed_text" msgid="8134011269572415402">"تعذر حفظ لقطة الشاشة. قد يكون التخزين قيد الاستخدام."</string>
-    <string name="usb_preference_title" msgid="6551050377388882787">"خيارات نقل الملفات عبر USB"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"تحميل كمشغل وسائط (MTP)"</string>
-    <string name="use_ptp_button_title" msgid="7517127540301625751">"تحميل ككاميرا (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"تثبيت تطبيق Android File Transfer لـ Mac"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"‏خيارات نقل الملفات عبر USB"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"‏تحميل كمشغل وسائط (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"‏تحميل ككاميرا (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"‏تثبيت تطبيق Android File Transfer لـ Mac"</string>
     <string name="accessibility_back" msgid="567011538994429120">"رجوع"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"الرئيسية"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"القائمة"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"التطبيقات الحديثة"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"بحث"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"الكاميرا"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"زر تبديل طريقة الإدخال."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"زر تكبير/تصغير للتوافق."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"استخدام التكبير/التصغير لتحويل شاشة صغيرة إلى شاشة أكبر"</string>
@@ -98,17 +98,17 @@
     <string name="accessibility_data_two_bars" msgid="6166018492360432091">"إشارة البيانات تتكون من شريطين."</string>
     <string name="accessibility_data_three_bars" msgid="9167670452395038520">"إشارة البيانات تتكون من ثلاثة أشرطة."</string>
     <string name="accessibility_data_signal_full" msgid="2708384608124519369">"إشارة البيانات كاملة."</string>
-    <string name="accessibility_wifi_off" msgid="3177380296697933627">"تم إيقاف Wi-Fi."</string>
-    <string name="accessibility_no_wifi" msgid="1425476551827924474">"تم قطع اتصال Wi-Fi."</string>
-    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"إشارة Wi-Fi تتكون من شريط واحد."</string>
-    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"إشارة Wi-Fi تتكون من شريطين."</string>
-    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"إشارة Wi-Fi تتكون من ثلاثة أشرطة."</string>
-    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"إشارة Wi-Fi كاملة."</string>
-    <string name="accessibility_no_wimax" msgid="4329180129727630368">"ليس هناك WiMAX."</string>
-    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"شريط WiMAX واحد."</string>
-    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"شريطا WiMAX."</string>
-    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"أشرطة WiMAX الثلاثة."</string>
-    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"إشارة WiMAX كاملة."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"‏تم إيقاف Wi-Fi."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"‏تم قطع اتصال Wi-Fi."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"‏إشارة Wi-Fi تتكون من شريط واحد."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"‏إشارة Wi-Fi تتكون من شريطين."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"‏إشارة Wi-Fi تتكون من ثلاثة أشرطة."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"‏إشارة Wi-Fi كاملة."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"‏ليس هناك WiMAX."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"‏شريط WiMAX واحد."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‏شريطا WiMAX."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‏أشرطة WiMAX الثلاثة."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‏إشارة WiMAX كاملة."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"ليست هناك إشارة."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"غير متصل."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"ليست هناك أشرطة."</string>
@@ -123,22 +123,22 @@
     <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1‎ X‎"</string>
     <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
     <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"شبكة الجيل الثالث"</string>
-    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"شبكة 3.5G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"‏شبكة 3.5G"</string>
     <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"شبكة الجيل الرابع"</string>
     <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
     <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"تجوال"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
-    <string name="accessibility_no_sim" msgid="8274017118472455155">"ليست هناك بطاقة SIM."</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"‏ليست هناك بطاقة SIM."</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ربط البلوتوث."</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"وضع الطائرة."</string>
     <string name="accessibility_battery_level" msgid="7451474187113371965">"مستوى البطارية <xliff:g id="NUMBER">%d</xliff:g> في المائة."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"إعدادات النظام."</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"الإشعارات."</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"محو الإشعار."</string>
-    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"تم تمكين GPS."</string>
-    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"الحصول على GPS."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"‏تم تمكين GPS."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"‏الحصول على GPS."</string>
     <string name="accessibility_tty_enabled" msgid="4613200365379426561">"تم تمكين المبرقة الكاتبة."</string>
     <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"رنين مع الاهتزاز."</string>
     <string name="accessibility_ringer_silent" msgid="9061243307939135383">"رنين صامت."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"البطارية <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"وضع الطائرة <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"البلوتوث <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"حالة الموقع: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"تم ضبط المنبه على <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"تم تعطيل بيانات شبكات الجيل الثاني والجيل الثالث"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"تم تعطيل بيانات شبكة الجيل الرابع"</string>
@@ -161,15 +162,16 @@
     <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"لقد وصلت إلى حد استخدام البيانات المحدد. \n \n إذا أعدت تمكين البيانات ، فقد يتم تحصيل رسوم منك من قبل مشغل شبكة الجوال."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"إعادة تمكين البيانات"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"لا يوجد اتصال إنترنت"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi متصل"</string>
-    <string name="gps_notification_searching_text" msgid="8574247005642736060">"جارٍ البحث عن GPS"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"تم تعيين الموقع بواسطة GPS"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"‏Wi-Fi متصل"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"‏جارٍ البحث عن GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"‏تم تعيين الموقع بواسطة GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"طلبات الموقع نشطة"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"محو جميع الإشعارات."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"معلومات التطبيق"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"سيتم تدوير الشاشة تلقائيًا."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"تم تأمين الشاشة في الاتجاه الأفقي."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"تم تأمين الشاشة في الاتجاه العمودي."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"حالة الحلويات"</string>
     <string name="start_dreams" msgid="7219575858348719790">"حلم اليقظة"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"وضع الطائرة"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"السطوع"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"تدوير تلقائي"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"تم قفل التدوير"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"تم القفل على الوضع العمودي"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"تم القفل على الوضع الأفقي"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"أسلوب الإدخال"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"الموقع"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"الموقع قيد الإيقاف"</string>
@@ -193,13 +197,29 @@
     <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ليست متصلة"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"لا تتوفر شبكة"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"إيقاف Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"عرض Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"عرض شاشة لاسلكي"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏إيقاف Wi-Fi"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"بث الشاشة"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"السطوع"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"تلقائي"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"تظهر الإشعارات هنا"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"يمكنك الدخول إليها في أي وقت بالتمرير السريع إلى أسفل.\nيمكنك التمرير السريع إلى أسفل مرة أخرى للوصول إلى عناصر تحكم النظام."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"مرر سريعًا لحافة الشاشة لإظهار الشريط"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"مرر سريعًا من حافة الشاشة لإظهار شريط النظام"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"وضع انعكاس اللون"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"وضع التباين المحسن"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"وضع تصحيح الألوان"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"الأخيرة"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"معلومات التطبيق"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"بحث"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"قد تكون الشبكة\nخاضعة للرقابة"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"بحث"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"تمرير لأعلى لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"تمرير لليسار لـ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"تم إخفاء الإشعار"</item>
+    <item quantity="other" msgid="7388721375827338153">"‏تم إخفاء %d من الإشعارات"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"المس للعرض"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"الرجاء عدم الإزعاج"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"‏%d أخرى"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"انقر مرة أخرى للفتح"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"مرر سريعًا لأعلى لإلغاء القفل"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-az-land/strings.xml b/packages/SystemUI/res/values-az-land/strings.xml
new file mode 100644
index 0000000..8eb6978
--- /dev/null
+++ b/packages/SystemUI/res/values-az-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Hazırda ekran landşaft orientasiyasında kilidlənib."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ-land/strings.xml b/packages/SystemUI/res/values-az-rAZ-land/strings.xml
new file mode 100644
index 0000000..8eb6978
--- /dev/null
+++ b/packages/SystemUI/res/values-az-rAZ-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Hazırda ekran landşaft orientasiyasında kilidlənib."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..9565eee
--- /dev/null
+++ b/packages/SystemUI/res/values-az-rAZ/strings.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"Sistemin İstifadə İnterfeysi"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Təmizlə"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Siyahıdan sil"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Tətbiq infosu"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Yeni tətbiq yoxdur"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Son tətbiqləri kənarlaşdır"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 son tətbiq"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d son tətbiq"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildiriş yoxdu"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Davam edir"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirişlər"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Adapteri qoşun"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"Batareya azalır."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> qalıb"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB ilə elektrik doldurma dəstəklənmir.\nYalnız adapter istifadə edin."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Batareya istifadəsi"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Ayarlar"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Təyyarə rejimi"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Ekranın avto-dönüşü"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"SUSDUR"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AVTO"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Bildirişlər"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tezerinq"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Daxiletmə metodlarını ayarlayın"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Fiziki klaviatura"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə USB cihazına daxil olmağa icazə verilsin?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə USB aksesuarına qoşulmağa icazə verirsiniz?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"USB cihaz qoşulu olan zaman <xliff:g id="ACTIVITY">%1$s</xliff:g> açılsın mı?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"USB aksesuar qoşulu olan zaman <xliff:g id="ACTIVITY">%1$s</xliff:g> açılsın mı?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Heç bir quraşdırılmış tətbiq bu USB aksesuar ilə işləmir. Bu aksesuar haqqında daha ətraflı məlumatı <xliff:g id="URL">%1$s</xliff:g> adresindən öyrənin"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB aksesuar"</string>
+    <string name="label_view" msgid="6304565553218192990">"Göstər"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Bu USB cihaz üçün defolt olaraq istifadə edin."</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Bu USB aksesuar üçün defolt istifadə edin"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"USB sazlamaya icazə verilsin?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"Kompüterin RSA barmaq izi: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Bu kompüterdən həmişə icazə verilsin"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Ekranı doldurmaq üçün yaxınlaşdır"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Ekranı doldurmaq üçün uzat"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Skrinşot yadda saxlanılır..."</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Skrinşot yadda saxlanır..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Skrinşot yadda saxlanır."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Skrinşot çəkildi."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Skrinşotunuza baxmaq üçün toxunun"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Skrinşot götürülə bilinmədi."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Skrinşotu yadda saxlamaq alınmadı, yəqin yaddaş istifadə olunur."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB fayl transferi seçimləri"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Media pleyer (MTP) kimi montaj edin"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera kimi birləşdir (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac üçün Android File Transfer tətbiqini quraşdırın"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Geri"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Ana səhifə"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Menyu"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Son tətbiqlər"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Daxiletmə metodu düyməsinə keç"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyğunluq zoom düyməsi."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Daha böyük ekranda uzaqlaşdır."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth qoşulub."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth əlaqəsi kəsildi."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"Batareya yoxdur."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Batareya bir xətdir."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Batareya iki xətdir."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Batareya üç xətdir."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Batareya doludur"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"Telefon yoxdur."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Şəbəkə bir xətdir."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Şəbəkə iki xətdir."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Şəbəkə üç xətdir."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Tam şəbəkə."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"Məlumat yoxdur."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data bir xətdir."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data iki xətdir."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data üç xətdir."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Data siqnalı tamdır."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi sönülüdür."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi bağlantı kəsildi."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi bir xətdir."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi iki xətdir."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wifi üç xətdir."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wifi siqnalı tamdır."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX yoxdur."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX bir xətt."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX iki xətdir."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX üç xətdir."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX siqnalı tamdır."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"Siqnal yoxdur."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Qoşulu deyil."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Sıfır xətt."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"Bir xətt."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"İki xətt."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Üç xətdir."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Siqnal tamdır."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Aktiv."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Deaktiv"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Qoşuludur."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rouminq"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM yoxdur"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tezering."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçuş rejimi"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Batareya <xliff:g id="NUMBER">%d</xliff:g> faizdir."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"Sistem parametrləri"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Bildirişlər."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Bildirişi təmizlə."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktivdir."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS əldə edilir."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktivləşdirilib."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zəng vibrasiyası"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zəngvuran səssiz."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> çıxarıldı."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Bildiriş uzaqlaşdırıldı."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bildiriş kölgəsi."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tez ayarlar."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Axırıncı tətbiqlər."</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"İstifadəçi <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobil <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batareya <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Təyyarə Rejimi <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm <xliff:g id="TIME">%s</xliff:g> üçün qurulub."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data qeyri-aktivdir"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data deaktiv edildi"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobil data qeyri-aktivdir"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data qeyri-aktivdir"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Göstərilmiş data istifadə limitinə çatdınız.\n\nƏgər datanı yenidən aktivləşdirsəniz, operator tərəfindən əlavə tariflər tətbiq oluna bilər."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Datanı yenidən aktiv et"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"İnternet bağlantısı yoxdur"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi qoşulub"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS Axtarışı"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Yer GPS tərəfindən müəyyən edildi"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Məkan sorğuları arxivi"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Bütün bildirişləri sil."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Tətbiq infosu"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekran avtomatik döndəriləcək."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekran landşaft orientasiyasında kilidlənib."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekran portret orientasiyasında kilidlənib."</string>
+    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Xəyal"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Uçuş rejimi"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Dolur, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Dolub"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Cihaz)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth bağlıdır"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Parlaqlıq"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Avtofırlanma"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Fırlatma kilidlidir"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Daxiletmə metodu"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Yer"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Yer Deaktiv"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media cihazı"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Yalnız fövqəladə zənglər"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Nizamlar"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Vaxt"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Mən"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Bağlantı yoxdur"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Şəbəkə yoxdur"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi sönülüdür"</string>
+    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Ekran"</string>
+    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Simsiz Ekran"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Parlaqlıq"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AVTO"</string>
+    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Şəbəkə monitor edilə bilər"</string>
+    <string name="done_button" msgid="1759387181766603361">"Hazırdır"</string>
+    <string name="ssl_ca_cert_dialog_title" msgid="1273796967092027291">"Şəbəkə Monitorinqi"</string>
+    <string name="ssl_ca_cert_info_message" msgid="5430320539555358452">"Bu cihaz <xliff:g id="MANAGING_DOMAIN">%s</xliff:g> tərəfindən idarə edilir . \n \n Sizin administrator şəbəkə fəaliyyətinizin, həmçinin e-poçt, tətbiqlər və təhlükəsiz veb saytlarınızın monitorinqini etməyə qadirdir. \n \n Ətraflı məlumat üçün administrator ilə əlaqə saxlayın."</string>
+    <string name="ssl_ca_cert_warning_message" msgid="2033091656129963669">"Üçüncü tərəf \n şəbəkə fəaliyyətinizin, həmçinin e-poçt, tətbiqlər və təhlükəsiz veb saytlarınızın monitorinqini etməyə qadirdir. . \n \nCihanzınıza yüklənmiş etibarlı etimad bunu mümkün edir."</string>
+    <string name="ssl_ca_cert_settings_button" msgid="7946956977377166709">"Etibarlı etimadları yoxlayın"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml
new file mode 100644
index 0000000..cb48aa0
--- /dev/null
+++ b/packages/SystemUI/res/values-az/strings.xml
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"Sistemin İstifadə İnterfeysi"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Təmizlə"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Siyahıdan sil"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Tətbiq infosu"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Yeni tətbiq yoxdur"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Son tətbiqləri kənarlaşdır"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 son tətbiq"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d son tətbiq"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Bildiriş yoxdu"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Davam edir"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Bildirişlər"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Adapteri qoşun"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"Batareya azalır."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> qalıb"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB ilə elektrik doldurma dəstəklənmir.\nYalnız adapter istifadə edin."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Batareya istifadəsi"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Ayarlar"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Təyyarə rejimi"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Ekranın avto-dönüşü"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"SUSDUR"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AVTO"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Bildirişlər"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tezerinq"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Daxiletmə metodlarını ayarlayın"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Fiziki klaviatura"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə USB cihazına daxil olmağa icazə verilsin?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə USB aksesuarına qoşulmağa icazə verirsiniz?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"USB cihaz qoşulu olan zaman <xliff:g id="ACTIVITY">%1$s</xliff:g> açılsın mı?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"USB aksesuar qoşulu olan zaman <xliff:g id="ACTIVITY">%1$s</xliff:g> açılsın mı?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Heç bir quraşdırılmış tətbiq bu USB aksesuar ilə işləmir. Bu aksesuar haqqında daha ətraflı məlumatı <xliff:g id="URL">%1$s</xliff:g> adresindən öyrənin"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB aksesuar"</string>
+    <string name="label_view" msgid="6304565553218192990">"Göstər"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Bu USB cihaz üçün defolt olaraq istifadə edin."</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Bu USB aksesuar üçün defolt istifadə edin"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"USB sazlamaya icazə verilsin?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"Kompüterin RSA barmaq izi: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Bu kompüterdən həmişə icazə verilsin"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Ekranı doldurmaq üçün yaxınlaşdır"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Ekranı doldurmaq üçün uzat"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Skrinşot yadda saxlanılır..."</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Skrinşot yadda saxlanır..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Skrinşot yadda saxlanır."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Skrinşot çəkildi."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Skrinşotunuza baxmaq üçün toxunun"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Skrinşot götürülə bilinmədi."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Skrinşotu yadda saxlamaq alınmadı, yəqin yaddaş istifadə olunur."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB fayl transferi seçimləri"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Media pleyer (MTP) kimi montaj edin"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Kamera kimi birləşdir (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac üçün Android File Transfer tətbiqini quraşdırın"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Geri"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Ana səhifə"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Menyu"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Son tətbiqlər"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Daxiletmə metodu düyməsinə keç"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyğunluq zoom düyməsi."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Daha böyük ekranda uzaqlaşdır."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth qoşulub."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth əlaqəsi kəsildi."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"Batareya yoxdur."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Batareya bir xətdir."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Batareya iki xətdir."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Batareya üç xətdir."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Batareya doludur"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"Telefon yoxdur."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Şəbəkə bir xətdir."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Şəbəkə iki xətdir."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Şəbəkə üç xətdir."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Tam şəbəkə."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"Məlumat yoxdur."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data bir xətdir."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data iki xətdir."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data üç xətdir."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Data siqnalı tamdır."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi sönülüdür."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi bağlantı kəsildi."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi bir xətdir."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi iki xətdir."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wifi üç xətdir."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wifi siqnalı tamdır."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX yoxdur."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX bir xətt."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX iki xətdir."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX üç xətdir."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX siqnalı tamdır."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"Siqnal yoxdur."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Qoşulu deyil."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Sıfır xətt."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"Bir xətt."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"İki xətt."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Üç xətdir."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Siqnal tamdır."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Aktiv."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Deaktiv"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Qoşuludur."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rouminq"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM yoxdur"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tezering."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Uçuş rejimi"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Batareya <xliff:g id="NUMBER">%d</xliff:g> faizdir."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"Sistem parametrləri"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Bildirişlər."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Bildirişi təmizlə."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktivdir."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS əldə edilir."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktivləşdirilib."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Zəng vibrasiyası"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Zəngvuran səssiz."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> çıxarıldı."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Bildiriş uzaqlaşdırıldı."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bildiriş kölgəsi."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tez ayarlar."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Axırıncı tətbiqlər."</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"İstifadəçi <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobil <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batareya <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Təyyarə Rejimi <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm <xliff:g id="TIME">%s</xliff:g> üçün qurulub."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data qeyri-aktivdir"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data deaktiv edildi"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobil data qeyri-aktivdir"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data qeyri-aktivdir"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Göstərilmiş data istifadə limitinə çatdınız.\n\nƏgər datanı yenidən aktivləşdirsəniz, operator tərəfindən əlavə tariflər tətbiq oluna bilər."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Datanı yenidən aktiv et"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"İnternet bağlantısı yoxdur"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi qoşulub"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS Axtarışı"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Yer GPS tərəfindən müəyyən edildi"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Məkan sorğuları arxivi"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Bütün bildirişləri sil."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Tətbiq infosu"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekran avtomatik döndəriləcək."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekran landşaft orientasiyasında kilidlənib."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekran portret orientasiyasında kilidlənib."</string>
+    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Xəyal"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Uçuş rejimi"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Dolur, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Dolub"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Cihaz)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth bağlıdır"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Parlaqlıq"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Avtofırlanma"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Fırlatma kilidlidir"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Daxiletmə metodu"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Yer"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Yer Deaktiv"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media cihazı"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Yalnız fövqəladə zənglər"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Nizamlar"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Vaxt"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Mən"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Bağlantı yoxdur"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Şəbəkə yoxdur"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi sönülüdür"</string>
+    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Ekran"</string>
+    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Simsiz Ekran"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Parlaqlıq"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AVTO"</string>
+    <string name="status_bar_help_title" msgid="1199237744086469217">"Bildirişlər burada görünür"</string>
+    <string name="status_bar_help_text" msgid="7874607155052076323">"Aşağı sürüşdürməklə istənilən vaxt onları əldə edin.\nSistemi nəzarəti üçün yenə də aşağı sürüşdürün."</string>
+    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"Şəbəkə monitor edilə bilər"</string>
+    <string name="done_button" msgid="1759387181766603361">"Hazırdır"</string>
+    <string name="ssl_ca_cert_dialog_title" msgid="1273796967092027291">"Şəbəkə Monitorinqi"</string>
+    <string name="ssl_ca_cert_info_message" msgid="5430320539555358452">"Bu cihaz <xliff:g id="MANAGING_DOMAIN">%s</xliff:g> tərəfindən idarə edilir . \n \n Sizin administrator şəbəkə fəaliyyətinizin, həmçinin e-poçt, tətbiqlər və təhlükəsiz veb saytlarınızın monitorinqini etməyə qadirdir. \n \n Ətraflı məlumat üçün administrator ilə əlaqə saxlayın."</string>
+    <string name="ssl_ca_cert_warning_message" msgid="2033091656129963669">"Üçüncü tərəf \n şəbəkə fəaliyyətinizin, həmçinin e-poçt, tətbiqlər və təhlükəsiz veb saytlarınızın monitorinqini etməyə qadirdir. . \n \nCihanzınıza yüklənmiş etibarlı etimad bunu mümkün edir."</string>
+    <string name="ssl_ca_cert_settings_button" msgid="7946956977377166709">"Etibarlı etimadları yoxlayın"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml
deleted file mode 100644
index 6608b79..0000000
--- a/packages/SystemUI/res/values-be/strings.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * Copyright (c) 2009, 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="7164937344850004466">"Інтэрфейс карыстальніка сістэмы"</string>
-    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ачысціць"</string>
-    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Выдаліць са спісу"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Звесткі аб прыкладанні"</string>
-    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Апошніх прыкладанняў няма"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Закрыць нядаўнія прыкладаннi"</string>
-  <plurals name="status_bar_accessibility_recent_apps">
-    <item quantity="one" msgid="5854176083865845541">"1 нядаўняе прыкладанне"</item>
-    <item quantity="other" msgid="1040784359794890744">"Нядаўнія прыкладаннi: %d"</item>
-  </plurals>
-    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Без апавяшчэнняў"</string>
-    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Пастаянныя"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Апавяшчэнні"</string>
-    <string name="battery_low_title" msgid="2783104807551211639">"Падлучыце зарадную прыладу."</string>
-    <string name="battery_low_subtitle" msgid="1752040062087829196">"Зарад батарэі становіцца нізкім."</string>
-    <string name="battery_low_percent_format" msgid="1077244949318261761">"Спроб засталося: <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
-    <string name="invalid_charger" msgid="4549105996740522523">"USB-зарадка не падтрымліваецца.\nКарыстайцеся толькі зарадкай для прылады."</string>
-    <string name="battery_low_why" msgid="7279169609518386372">"Выкарыстанне батарэі"</string>
-    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Налады"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
-    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Рэжым палёту"</string>
-    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Аўтаматычны паварот экрана"</string>
-    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"БЯЗГУЧНА"</string>
-    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АЎТА"</string>
-    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Паведамленні"</string>
-    <string name="bluetooth_tethered" msgid="7094101612161133267">"Прывязаныя праз Bluetooth"</string>
-    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Налада метадаў уводу"</string>
-    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Фізічная клавіятура"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Дазволіць праыкладанню <xliff:g id="APPLICATION">%1$s</xliff:g> атрымлiваць доступ да прылады USB?"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Дазволіць прыкладанню <xliff:g id="APPLICATION">%1$s</xliff:g> доступ да прылады USB?"</string>
-    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Адкрыць <xliff:g id="ACTIVITY">%1$s</xliff:g>, калі гэтая USB-прылада падлучаная?"</string>
-    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Адкрыць <xliff:g id="ACTIVITY">%1$s</xliff:g>, калі гэтая USB-прылада падлучаная?"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Няма ўсталяв. прыкл. для працы з гэтай прыл. USB. Больш падраб. пра гэтую прыл.: <xliff:g id="URL">%1$s</xliff:g>"</string>
-    <string name="title_usb_accessory" msgid="4966265263465181372">"USB-прылада"</string>
-    <string name="label_view" msgid="6304565553218192990">"Прагляд"</string>
-    <string name="always_use_device" msgid="1450287437017315906">"Выкарыстоўваць налады па змаўчанні для дадзенай USB-прылады"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"Выкарыстоўваць налады па змаўчанні для дадзенай USB-прылады"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"Дазволіць адладку USB?"</string>
-    <string name="usb_debugging_message" msgid="2220143855912376496">"Адбiтак ключа RSA на гэтым камп\'ютары:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
-    <string name="usb_debugging_always" msgid="303335496705863070">"Заўсёды дазваляць з гэтага камп\'ютара"</string>
-    <string name="compat_mode_on" msgid="6623839244840638213">"Павял. на ўвесь экран"</string>
-    <string name="compat_mode_off" msgid="4434467572461327898">"Расцягн. на ўвесь экран"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Маштабаванне для сумяшчальнасцi"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Калі прыкладанне распрацаванае для невялікіх экранаў, каля гадзінніка з\'явіцца кіраванне маштабаваннем."</string>
-    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Захаванне скрыншота..."</string>
-    <string name="screenshot_saving_title" msgid="8242282144535555697">"Захаванне скрыншота..."</string>
-    <string name="screenshot_saving_text" msgid="2419718443411738818">"Скрыншот захаваны."</string>
-    <string name="screenshot_saved_title" msgid="6461865960961414961">"Скрыншот зроблены"</string>
-    <string name="screenshot_saved_text" msgid="1152839647677558815">"Націсніце, каб прагледзець скрыншот"</string>
-    <string name="screenshot_failed_title" msgid="705781116746922771">"Не атрымалася зрабiць скрыншот."</string>
-    <string name="screenshot_failed_text" msgid="8134011269572415402">"Немагчыма захаваць скрыншот. Магчыма, назапашвальнiк выкарыстоўваецца."</string>
-    <string name="usb_preference_title" msgid="6551050377388882787">"Парам. перадачы файлаў па USB"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"Падлучыць як медыяпрайгравальнік (ССП)"</string>
-    <string name="use_ptp_button_title" msgid="7517127540301625751">"Падлучыць як камеру (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Усталяваць прыклад. Android File Transfer для Mac"</string>
-    <string name="accessibility_back" msgid="567011538994429120">"Назад"</string>
-    <string name="accessibility_home" msgid="8217216074895377641">"На Галоўную старонку"</string>
-    <string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
-    <string name="accessibility_recent" msgid="8571350598987952883">"Нядаўнія прыкладанні"</string>
-    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка пераключэння метаду ўводу."</string>
-    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка сумяшчальнасці маштаба."</string>
-    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Маштабаванне малых элементаў для большага экрана."</string>
-    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-сувязь."</string>
-    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth адключаны."</string>
-    <string name="accessibility_no_battery" msgid="358343022352820946">"Без акумулятара."</string>
-    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Адна планка акумулятара."</string>
-    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"2 планкі акумулятара."</string>
-    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Тры планкі акумулятара."</string>
-    <string name="accessibility_battery_full" msgid="8909122401720158582">"Акумулятар поўны."</string>
-    <string name="accessibility_no_phone" msgid="4894708937052611281">"Няма тэлефона."</string>
-    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Адна планка на тэлефоне."</string>
-    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"2 планкі тэлефона."</string>
-    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"3 планкі тэлефона."</string>
-    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Поўны сігнал тэлефона."</string>
-    <string name="accessibility_no_data" msgid="4791966295096867555">"Няма дадзеных."</string>
-    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Адна планка дадзеных."</string>
-    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"2 планкі дадзеных."</string>
-    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"3 планкі дадзеных."</string>
-    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Поўны сігнал перадачы дадзеных."</string>
-    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi-Fi выключаны."</string>
-    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wi-Fi адключаны."</string>
-    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Адзiн слупок Wi-Fi."</string>
-    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Два слупкi Wi-Fi."</string>
-    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Тры слупкi Wi-Fi."</string>
-    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Поўны сігнал Wi-Fi."</string>
-    <string name="accessibility_no_wimax" msgid="4329180129727630368">"Няма сiгналу WiMAX."</string>
-    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"Адзiн слупок сiгналу WiMAX."</string>
-    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Два слупкi сiгналу WiMAX."</string>
-    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Тры слупкi сiгналу WiMAX."</string>
-    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Моцны сiгнал WiMAX."</string>
-    <string name="accessibility_no_signal" msgid="7064645320782585167">"Няма сігналу."</string>
-    <string name="accessibility_not_connected" msgid="6395326276213402883">"Няма падключэння."</string>
-    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Няма."</string>
-    <string name="accessibility_one_bar" msgid="1685730113192081895">"Адзiн слупок."</string>
-    <string name="accessibility_two_bars" msgid="6437363648385206679">"Два слупкi."</string>
-    <string name="accessibility_three_bars" msgid="2648241415119396648">"Тры слупкi."</string>
-    <string name="accessibility_signal_full" msgid="9122922886519676839">"Сігнал поўны."</string>
-    <string name="accessibility_desc_on" msgid="2385254693624345265">"Уключана."</string>
-    <string name="accessibility_desc_off" msgid="6475508157786853157">"Адключана."</string>
-    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Падключана."</string>
-    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
-    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
-    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
-    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
-    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
-    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
-    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
-    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
-    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Роўмінг"</string>
-    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
-    <string name="accessibility_no_sim" msgid="8274017118472455155">"Няма SIM-карты."</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Сувязь па Bluetooth."</string>
-    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Рэжым палёту."</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
-    <skip />
-    <string name="accessibility_settings_button" msgid="799583911231893380">"Сістэмныя налады."</string>
-    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Апавяшчэнні."</string>
-    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Выдаліць апавяшчэнне."</string>
-    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS уключаны."</string>
-    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Атрыманне GPS."</string>
-    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter уключаны."</string>
-    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Выклік з вібрацыяй."</string>
-    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Маўклівы выклік."</string>
-    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> выдалены."</string>
-    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Апавяшчэнне прапушчана."</string>
-    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Цень апавяшчэння.."</string>
-    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Хуткія налады."</string>
-    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Апошнія прыкладанні."</string>
-    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Карыстальнік: <xliff:g id="USER">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
-    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Мабiльны сiгнал: <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Акумулятар: <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Рэжым палёту: <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Наладжаны будзiльнiк: <xliff:g id="TIME">%s</xliff:g>."</string>
-    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Дадзеныя 2G-3G адключаныя"</string>
-    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Дадзеныя 4G адключаныя"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Мабільная перадача дадзеных адключаная"</string>
-    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Дадзеныя адключаныя"</string>
-    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Вы перавысiлi ўсталяваны лiмiт на выкарыстанне. \n\nКалі вы паўторна ўключыце перадачу дадзеных, можа спаганяцца плата."</string>
-    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Паўторна ўключыць дадзеныя"</string>
-    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Няма падключэння да Iнтэрнэту"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi падключаны"</string>
-    <string name="gps_notification_searching_text" msgid="8574247005642736060">"Пошук GPS"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"Месца задана праз GPS"</string>
-    <string name="accessibility_clear_all" msgid="5235938559247164925">"Выдалiць усе апавяшчэннi."</string>
-    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Інфармацыя пра прыкладанне"</string>
-    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Экран паварочваецца аўтаматычна."</string>
-    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Экран заблакiраваны ў альбомнай арыентацыі."</string>
-    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Экран заблакiраваны ў партрэтнай арыентацыі."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
-    <string name="start_dreams" msgid="7219575858348719790">"Мроi"</string>
-    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
-    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Рэжым палёту"</string>
-    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Зарадка, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Зараджана"</string>
-    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
-    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (прылады: <xliff:g id="NUMBER">%d</xliff:g>)"</string>
-    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth выключаны"</string>
-    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркасць"</string>
-    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Аўтапаварот"</string>
-    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Паварот забаронены"</string>
-    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Метад уводу"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
-    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Мультымедыйная прылада"</string>
-    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
-    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Толькі экстраныя выклікі"</string>
-    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Налады"</string>
-    <string name="quick_settings_time_label" msgid="4635969182239736408">"Час"</string>
-    <string name="quick_settings_user_label" msgid="5238995632130897840">"Я"</string>
-    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
-    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Няма падключэння"</string>
-    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Няма сеткi"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi адключаны"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Дысплей Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Бесправадны дысплей"</string>
-    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркасць"</string>
-    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АЎТА"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Апавяшчэнні з\'яўляюцца тут"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Атрымлівайце доступ да іх у любы час, праводзячы пальцам уніз.\nПравядзіце пальцам уніз яшчэ раз, каб атрымаць доступ да сродкаў кіравання сістэмай."</string>
-    <!-- no translation found for hideybar_confirmation_message (9050869548951044371) -->
-    <skip />
-    <!-- no translation found for hideybar_confirmation_message_long (7117692795163620626) -->
-    <skip />
-</resources>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index 6194fd8..00ac707 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Винаги да се разрешава от този компютър"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Мащаб – запълва екрана"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Разпъване – запълва екрана"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Промяна на мащаба за съвместимост"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Когато дадено приложение е създадено за по-малък екран, до часовника ще се покаже управление за промяна на мащаба."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Екранната снимка се запазва..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Екранната снимка се запазва..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Екранната снимка се запазва."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Начало"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Скорошни приложения"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Търсене"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Бутон за превключване на метода на въвеждане."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Бутон за промяна на мащаба с цел съвместимост."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Промяна на мащаба на екрана от по-малък до по-голям."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батерия: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Самолетен режим: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Местоположението е <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Будилникът е навит за <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G данните са деактивирани"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G данните са деактивирани"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: Има връзка"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Търси се GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Местоположението е зададено от GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Активни заявки за местоположение"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Изчистване на всички известия."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Информация за приложението"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екранът ще се завърта автоматично."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екранът е заключен в хоризонтална ориентация."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екранът е заключен във вертикална ориентация."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Витрина с десерти"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Мечта"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Самолетен режим"</string>
@@ -181,11 +183,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркост"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Автоматична ориентация"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Ориентацията е заключена"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Заключено във вертикален режим"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Заключено в хоризонтален режим"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод на въвеждане"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Местоположение"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Местоположението е изключено"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Мултимедийно устройство"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"Индикатор за силата на получения сигнал (RSSI)"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Само спешни обаждания"</string>
@@ -196,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Няма връзка"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Няма мрежа"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi е изключен"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Дисплей през Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Безжичен дисплей"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Екран за предаване"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркост"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТ."</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Известията се показват тук"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Осъществявайте достъп до тях по всяко време, като прекарате пръст надолу.\nНаправете го отново за системните контроли."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Прекарайте пръст по ръба на екрана, за да се покаже лентата"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Прекарайте пръст от ръба на екрана, за да се покаже системната лента"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Режим на инвертиране на цветовете"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Режим на подобрен контраст"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Режим на коригиране на цветовете"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"СКОРОШНИ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информация за приложението"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"търсене"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мрежата може\nда се наблюдава"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Търсене"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Плъзнете нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Плъзнете наляво за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Известието е скрито"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d известия са скрити"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Докоснете за показване"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Не ме безпокойте"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Още %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Докоснете отново, за да отворите"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Прекарайте пръст нагоре, за да отключите"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index eddeda3..bfad5bc 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -61,9 +61,7 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Dóna sempre permís des d\'aquest equip"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom per omplir pantalla"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Estira per omplir pant."</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilitat"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Quan una aplicació s\'hagi dissenyat per a una pantalla més petita, apareixerà un control de zoom al costat del rellotge."</string>
-    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Desant captura de pantalla..."</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"S\'està desant captura de pantalla..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"S\'està desant la captura de pantalla..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"La captura de pantalla s\'ha desat."</string>
     <string name="screenshot_saved_title" msgid="6461865960961414961">"S\'ha fet una captura de pantalla."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Pàgina d\'inici"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Aplicacions recents"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Cerca"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Càmera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botó de canvi del mètode d\'entrada."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botó de zoom de compatibilitat."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Amplia menys com més gran sigui la pantalla."</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode d\'avió <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Ubicació: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarma establerta a les <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dades 2G-3G desactivades"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dades 4G desactivades"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: connectada"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"S\'està cercant un GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"S\'ha establert la ubicació per GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Sol·licituds d\'ubicació actives"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Esborra totes les notificacions."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informació de l\'aplicació"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girarà automàticament."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla està bloquejada en orientació horitzontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla està bloquejada en orientació vertical."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Capsa de postres"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Estalvi de pantalla"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode d\'avió"</string>
@@ -183,6 +185,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillantor"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotació automàtica"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotació bloquejada"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloquejat en mode vertical"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloquejat en mode horitzontal"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Mètode d\'entrada"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Ubicació"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ubicació desactivada"</string>
@@ -196,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Desconnectat"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hi ha cap xarxa"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desconnectada"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Pantalla Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Pantalla sense fil"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Pantalla d\'emissió"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillantor"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMÀTICA"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Les notificacions apareixen aquí"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Accedeix-hi en qualsevol moment: només has de fer lliscar el dit cap avall.\nTorna a fer lliscar el dit cap avall per fer que es mostrin els controls del sistema."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Fes lliscar el dit per la vora de la pantalla perquè es mostri la barra"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Fes lliscar el dit des de la vora de la pantalla perquè es mostri la barra del sistema"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Mode d\'inversió de color"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mode de contrast millorat"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode de correcció de color"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECENTS"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informació de l\'aplicació"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"És possible que la xarxa\nestigui controlada"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Cerca"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Fes lliscar el dit cap amunt per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Fes lliscar el dit cap a l\'esquerra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notificació oculta"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notificacions ocultes"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca per mostrar-ho."</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"No molesteu"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d més"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Torna a tocar per obrir-la."</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Fes lliscar el dit cap amunt per desbloquejar el teclat."</string>
 </resources>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 87ba67a..94ba5c7 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Vždy povolit z tohoto počítače"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Přiblížit na celou obrazovku"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Na celou obrazovku"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Úprava velikosti z důvodu kompatibility"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Pokud je aplikace navržena pro menší obrazovku, zobrazí se vedle hodin ovládací prvek přiblížení."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Ukládání snímku obrazovky..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Ukládání snímku obrazovky..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Probíhá ukládání snímku obrazovky."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Domů"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Nové aplikace"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Hledat"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparát"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačítko přepnutí metody zadávání"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačítko úpravy velikosti z důvodu kompatibility"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zvětšit menší obrázek na větší obrazovku."</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterie: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Režim V letadle: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Poloha: <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Budík je nastaven na <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datové přenosy 2G a 3G jsou zakázány"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datové přenosy 4G jsou zakázány"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: připojeno"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhledávání satelitů GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Poloha nastavena pomocí systému GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Aktivní žádosti o polohu"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Vymazat všechna oznámení."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informace o aplikaci"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Obrazovka se automaticky otočí."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Obrazovka je uzamčena v orientaci na šířku."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Obrazovka je uzamčena v orientaci na výšku."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Pult se sladkostmi"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Spořič obrazovky"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Režim V letadle"</string>
@@ -183,11 +185,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jas"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatické otáčení"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Otáčení je uzamčeno"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Uzamčen režim na výšku"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Uzamčen režim na šířku"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Metoda zadávání dat"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Poloha"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Poloha vypnuta"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Mediální zařízení"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Pouze tísňová volání"</string>
@@ -198,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nepřipojeno"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žádná síť"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi vypnuta"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Displej přes Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Bezdrátový displej"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Vzdálená obrazovka"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jas"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATICKY"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Zde se zobrazují oznámení"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Můžete je kdykoli zobrazit tím, že přejedete prstem dolů.\nPřejedete-li prstem dolů ještě jednou, zobrazí se ovládací prvky systému."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Panel zobrazíte přejetím přes okraj obrazovky"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Systémový panel zobrazíte přejetím přes okraj obrazovky"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Režim převrácení barev"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Režim zvýšeného kontrastu"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Režim korekce barev"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"POSLEDNÍ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informace o aplikaci"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"vyhledat"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Síť může být\nmonitorována"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Vyhledávání"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Přejeďte prstem nahoru: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Přejeďte prstem doleva: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Oznámení bylo skryto"</item>
+    <item quantity="other" msgid="7388721375827338153">"Skrytá oznámení: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Oznámení zobrazíte kliknutím"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Nerušit"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Další: %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Oznámení otevřete opětovným klepnutím"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Zařízení odemknete přejetím prstem nahoru"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index af4bb33..df442ab 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -29,7 +29,7 @@
     <item quantity="one" msgid="5854176083865845541">"1 seneste app"</item>
     <item quantity="other" msgid="1040784359794890744">"%d seneste apps"</item>
   </plurals>
-    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen meddelelser"</string>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ingen underretninger"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"I gang"</string>
     <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Underretninger"</string>
     <string name="battery_low_title" msgid="2783104807551211639">"Tilslut oplader"</string>
@@ -44,7 +44,7 @@
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"LYDLØS"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
     <string name="status_bar_settings_notifications" msgid="397146176280905137">"Underretninger"</string>
-    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-tethering anvendt"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Netdeling via Bluetooth anvendt"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Konfigurer inputmetoder"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Fysisk tastatur"</string>
     <string name="usb_device_permission_prompt" msgid="834698001271562057">"Tillad, at appen <xliff:g id="APPLICATION">%1$s</xliff:g> kan få adgang til USB-enheden?"</string>
@@ -61,12 +61,10 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Tillad altid fra denne computer"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom til fuld skærm"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stræk til fuld skærm"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitetszoom"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er udviklet til en mindre skærm, vises der en zoomfunktion ved uret."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Gemmer skærmbillede..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Gemmer skærmbillede..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Skærmbilledet gemmes."</string>
-    <string name="screenshot_saved_title" msgid="6461865960961414961">"Skærmbilledet er taget."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Skærmbilledet er gemt."</string>
     <string name="screenshot_saved_text" msgid="1152839647677558815">"Tryk for at se dit skærmbillede."</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"Skærmbilledet kunne ikke tages."</string>
     <string name="screenshot_failed_text" msgid="8134011269572415402">"Skærmbilledet kunne ikke gemmes. Eksternt lager kan være i brug."</string>
@@ -75,9 +73,11 @@
     <string name="use_ptp_button_title" msgid="7517127540301625751">"Isæt som et kamera (PTP)"</string>
     <string name="installer_cd_button_title" msgid="2312667578562201583">"Installer appen Android Filoverførsel til Mac"</string>
     <string name="accessibility_back" msgid="567011538994429120">"Tilbage"</string>
-    <string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Startskærm"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Seneste apps"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Søg"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Skift indtastningsmetode-knappen."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knap for kompatibilitetszoom."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom mindre til større skærm."</string>
@@ -136,7 +136,7 @@
     <string name="accessibility_battery_level" msgid="7451474187113371965">"Batteri <xliff:g id="NUMBER">%d</xliff:g> procent."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"Systemindstillinger."</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"Underretninger."</string>
-    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ryd meddelelse."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ryd underretning."</string>
     <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS aktiveret."</string>
     <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS samler data."</string>
     <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter aktiveret."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteri <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flytilstand <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Placering <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmen er indstillet til <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktiveret"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktiveret"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi er forbundet"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Søger efter GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Placeringen er angivet ved hjælp af GPS"</string>
-    <string name="accessibility_clear_all" msgid="5235938559247164925">"Ryd alle meddelelser."</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Aktive placeringsanmodninger"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Ryd alle underretninger."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Oplysninger om appen"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skærmen roterer automatisk."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skærmen er nu låst i liggende retning."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skærmen er nu låst i stående retning."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessertcase"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Dagdrøm"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flytilstand"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Lysstyrke"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatisk rotation"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation er låst"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Altid stående"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Altid liggende"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Inputmetode"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Placering"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Placering fra"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ikke forbundet"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Intet netværk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi slået fra"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Display"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Trådløs skærm"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast skærm"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Underretninger vises her"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Få adgang til dem når som helst ved at stryge ned.\nStryg ned igen for at komme til systemindstillingerne."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Stryg kanten af skærmen for at se bjælken"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Stryg fra skærmens kant for at se systembjælken"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Farveinverteringstilstand"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Tilstand for forbedret kontrast"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Farvekorrigeringstilstand"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"SENESTE"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Oplysninger om applikationen"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"søg"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netværket kan\nvære overvåget"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Søgning"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Glid op for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Glid til venstre for at <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Underretningen er skjult"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d underretninger er skjult"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryk for at vise"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Vil ikke forstyrres"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d mere"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tryk igen for at åbne"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Stryg for at låse op"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index ec52ede..451476c 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Von diesem Computer immer zulassen"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom auf Bildschirmgröße"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Auf Bildschirmgröße anpassen"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitätszoom"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Wenn eine App für einen kleineren Bildschirm ausgelegt ist, wird ein Zoom-Steuerelement neben der Uhr angezeigt."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Screenshot wird gespeichert..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Screenshot wird gespeichert..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot wird gespeichert..."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Startbildschirm"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Kürzlich geöffnete Apps"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Suchen"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Schaltfläche zum Ändern der Eingabemethode"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Schaltfläche für Kompatibilitätszoom"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom auf einen größeren Bildschirm"</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akku: <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flugmodus: <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Standort <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Wecker gestellt für <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-Daten deaktiviert"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-Daten deaktiviert"</string>
@@ -164,14 +165,15 @@
     <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Daten erneut aktivieren"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Keine Internetverbindung"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN verbunden"</string>
-    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS wird gesucht"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS wird gesucht..."</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Standort durch GPS festgelegt"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Standortanfragen aktiv"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Alle Benachrichtigungen löschen"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App-Details"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Bildschirm wird automatisch gedreht."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Bildschirm bleibt im Querformat."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Bildschirm bleibt im Hochformat."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessertbehälter"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flugmodus"</string>
@@ -183,11 +185,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helligkeit"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Autom. drehen"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Drehung gesperrt"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Auf Hochformat gesperrt"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Auf Querformat gesperrt"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Eingabemethode"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Standort"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Standort aus"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Mediengerät"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Nur Notrufe"</string>
@@ -198,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nicht verbunden"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Kein Netz"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN aus"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"WLAN-Display"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Kabellose Übertragung (WiDi)"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Bildschirm übertragen"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helligkeit"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Benachrichtigungen erscheinen hier"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Greifen Sie jederzeit auf sie zu, indem Sie nach unten wischen.\nWischen Sie für Systemeinstellungen erneut nach unten."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Zum Einblenden der Leiste vom Rand wischen"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Zum Einblenden der Systemleiste vom Display-Rand weg wischen"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Farbinversionsmodus"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Kontrastverbesserungsmodus"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Farbkorrekturmodus"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"Letzte"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-Info"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"Suche"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netzwerk wird\neventuell überwacht."</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Suche"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach oben schieben"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Zum <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> nach links schieben"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Benachrichtigung ausgeblendet"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d Benachrichtigungen ausgeblendet"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Zum Ansehen tippen"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Nicht stören"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d mehr"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Erneut tippen, um Benachrichtigung zu öffnen"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Zum Entsperren nach oben wischen"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index ab43081..6dcffcf 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Να επιτρέπεται πάντα από αυτόν τον υπολογιστή"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Ζουμ σε πλήρη οθόνη"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Προβoλή σε πλήρη οθ."</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Ζουμ για συμβατότητα"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Όταν μια εφαρμογή έχει σχεδιαστεί για προβολή σε μικρότερη οθόνη, δίπλα από το ρολόι θα εμφανιστεί ένα στοιχείο ελέγχου ζουμ."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Αποθήκ. στιγμιότυπου οθόνης..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Αποθήκευση στιγμιότυπου οθόνης..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Γίνεται αποθήκευση του στιγμιότυπου οθόνης."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Αρχική σελίδα"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Μενού"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Πρόσφατες εφαρμογές"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Αναζήτηση"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Φωτογραφική μηχανή"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Κουμπί εναλλαγής μεθόδου εισόδου"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Κουμπί εστίασης συμβατότητας."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Ζουμ από μικρότερη σε μεγαλύτερη οθόνη."</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Μπαταρία <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Λειτουργία πτήσης <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Τοποθεσία <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Το ξυπνητήρι έχει οριστεί στις <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Τα δεδομένα 2G-3G απενεργοποιήθηκαν"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Τα δεδομένα 4G απενεργοποιήθηκαν"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi συνδεδεμένο"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Αναζήτηση για GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Ρύθμιση τοποθεσίας με GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Τα αιτήματα τοποθεσίας έχουν ενεργοποιηθεί"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Εκκαθάριση όλων των ειδοποιήσεων."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Πληροφορίες εφαρμογής"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Θα γίνεται αυτόματη περιστροφή της οθόνης."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Η οθόνη έχει κλειδωθεί σε οριζόντιο προσανατολισμό."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Η οθόνη έχει κλειδωθεί σε κατακόρυφο προσανατολισμό."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Επιδόρπιο"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Λειτουργία πτήσης"</string>
@@ -183,6 +185,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Φωτεινότητα"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Αυτόματη περιστροφή"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Η περιστροφή είναι κλειδωμένη"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Κλειδωμένο στην κατακόρυφη προβολή"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Κλειδωμένο στην οριζόντια προβολή"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Μέθοδος εισαγωγής"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Τοποθεσία"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Τοποθεσία απενεργοποιημένη"</string>
@@ -196,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Μη συνδεδεμένο"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Κανένα δίκτυο"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ανενεργό"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Οθόνη Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Ασύρματη οθόνη"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Μετάδοση οθόνης"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Φωτεινότητα"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ΑΥΤΟΜΑΤΗ"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Οι ειδοποιήσεις εμφανίζονται εδώ"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Μεταβείτε σε αυτές ανά πάσα στιγμή σύροντας προς τα κάτω.\nΣύρετε ξανά προς τα κάτω για τα στοιχεία ελέγχου συστήματος."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Σύρετε από την άκρη της οθόνης για να εμφανίσετε τη γραμμή"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Σύρετε από την άκρη της οθόνης για να εμφανίσετε τη γραμμή συστήματος"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Λειτουργία αναστροφής χρώματος"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Λειτουργία βελτίωσης αντίθεσης"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Λειτουργία διόρθωσης χρώματος"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ΠΡΟΣΦΑΤΑ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Πληροφορίες εφαρμογής"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"αναζήτηση"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Το δίκτυο μπορεί\nνα παρακολουθείται"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Αναζήτηση"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Κύλιση προς τα επάνω για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Κύλιση προς τα αριστερά για <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Έγινε απόκρυψη της ειδοποίησης"</item>
+    <item quantity="other" msgid="7388721375827338153">"Έγινε απόκρυψη %d ειδοποιήσεων"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Αγγίξτε για εμφάνιση"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Μην ενοχλείτε"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d ακόμη"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Πατήστε ξανά για να ανοίξετε"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Σύρετε για να ξεκλειδώσετε"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 6027553f..91a334a 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Compatibility zoom"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"When an app was designed for a smaller screen, a zoom control will appear by the clock."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Saving screenshot…"</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot is being saved."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Recent apps"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Aeroplane Mode <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Location <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set for <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data disabled"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data disabled"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Location set by GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Location requests active"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App info"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Screen will rotate automatically."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Screen is locked in landscape orientation."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Screen is locked in portrait orientation."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Rotate"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation Locked"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Locked to Portrait"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Locked to Landscape"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Location"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Location Off"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Not Connected"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Display"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Wireless Display"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast Screen"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Notifications appear here"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Access them any time by swiping down.\nSwipe down again for system controls."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Swipe edge of screen to reveal bar"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Swipe from edge of screen to reveal system bar"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Colour inversion mode"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Enhanced contrast mode"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Colour correction mode"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECENTS"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Network may\nbe monitored"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notification hidden"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notifications hidden"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Do not disturb"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d more"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tap again to open"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-en-rIN-land/strings.xml b/packages/SystemUI/res/values-en-rIN-land/strings.xml
new file mode 100644
index 0000000..ba773b8
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rIN-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Screen is now locked in landscape orientation."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..91a334a
--- /dev/null
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"System UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Clear"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Remove from list"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"App info"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"No recent apps"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Dismiss recent apps"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 recent app"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d recent apps"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"No notifications"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ongoing"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Connect charger"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"The battery is getting low."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> remaining"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB charging not supported.\nUse only the supplied charger."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Battery use"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Settings"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Aeroplane mode"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Auto-rotate screen"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifications"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth tethered"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Set up input methods"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Physical keyboard"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB device?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Allow the app <xliff:g id="APPLICATION">%1$s</xliff:g> to access the USB accessory?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB device is connected?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Open <xliff:g id="ACTIVITY">%1$s</xliff:g> when this USB accessory is connected?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"No installed apps work with this USB accessory. Learn more about this accessory at <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB accessory"</string>
+    <string name="label_view" msgid="6304565553218192990">"View"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Use by default for this USB device"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Use by default for this USB accessory"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"Allow USB debugging?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"The computer\'s RSA key fingerprint is:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Always allow from this computer"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Zoom to fill screen"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Stretch to fill screen"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saving screenshot…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Saving screenshot…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot is being saved."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Screenshot captured."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Touch to view your screenshot."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Couldn\'t capture screenshot."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Couldn\'t save screenshot. Storage may be in use."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB file transfer options"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Mount as a media player (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Mount as a camera (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Install Android File Transfer application for Mac"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Back"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Recent apps"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Search"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Switch input method button."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Compatibility zoom button."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom smaller to larger screen."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connected."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth disconnected."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"No battery."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Battery one bar."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Battery two bars."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Battery three bars."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Battery full."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"No phone."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Phone one bar."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Phone two bars."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Phone three bars."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Phone signal full."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"No data."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data one bar."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data two bars."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data three bars."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Data signal full."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi-Fi off."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wi-Fi disconnected."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wi-Fi one bar."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wi-Fi two bars."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wi-Fi three bars."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wi-Fi signal full."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"No WiMAX."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX one bar."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX two bars."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX three bars."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX signal full."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"No signal."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Not connected."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Zero bars."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"One bar."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"Two bars."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Three bars."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Signal full."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"On."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Off."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connected."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"No SIM."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth tethering"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Aeroplane mode"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Battery <xliff:g id="NUMBER">%d</xliff:g> per cent."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"System settings"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Clear notification."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS enabled."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS acquiring."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter enabled."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Ringer vibrate."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Ringer silent."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> dismissed."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification dismissed."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Notification shade."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Quick settings."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Recent apps"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"User <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobile <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Battery <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Aeroplane Mode <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Location <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set for <xliff:g id="TIME">%s</xliff:g>."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G data disabled"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G data disabled"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobile data disabled"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data disabled"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"You\'ve reached the specified data usage limit.\n\nIf you re-enable data, you may be charged by the operator."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Reenable data"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"No Internet connection"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connected"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"Searching for GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Location set by GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Location requests active"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Clear all notifications."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App info"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Screen will rotate automatically."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Screen is locked in landscape orientation."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Screen is locked in portrait orientation."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Aeroplane mode"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Charging, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Charged"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Devices)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Off"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Rotate"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation Locked"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Locked to Portrait"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Locked to Landscape"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Input Method"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Location"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Location Off"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Media device"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Emergency Calls Only"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Settings"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Time"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Me"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Not Connected"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No Network"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Off"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast Screen"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Colour inversion mode"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Enhanced contrast mode"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Colour correction mode"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECENTS"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Application Info"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"search"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Network may\nbe monitored"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Search"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Slide up for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Slide left for <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notification hidden"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notifications hidden"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touch to show"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Do not disturb"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d more"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tap again to open"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Swipe up to unlock"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 62f6c20..2150cbe 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Permitir siempre desde esta computadora"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom para ocupar la pantalla"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Estirar p/ ocupar la pantalla"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilidad"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Cuando una aplicación fue diseñada para una pantalla más pequeña, aparece un control de zoom junto al reloj."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Guardando captura de pantalla"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Guardando la captura de pantalla..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"La captura de pantalla se está guardando."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Página principal"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Aplicaciones recientes"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Buscar"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Cámara"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batería <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avión <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Ubicación <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarma: <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos de 2G-3G inhabilitados"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos de 4G inhabilitados"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"La ubicación se estableció por GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Solicitudes de ubicación activas"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Eliminar todas las notificaciones"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Información de la aplicación"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girará automáticamente."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla está bloqueada en modo horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla está bloqueada en modo vertical."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Caja para postres"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Activar protector"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avión"</string>
@@ -183,11 +185,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillo"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Girar automáticamente"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotación bloqueada"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueada en vertical"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueada en horizontal"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de introducción"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Ubicación"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ubicación desactivada"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispositivo multimedia"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Solo emergencia"</string>
@@ -198,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Sin conexión"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sin red"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivada"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Pantalla Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Pantalla inalámbrica"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Pantalla de Cast"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillo"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMÁTICO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Las notificaciones aparecen aquí."</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Desliza el dedo hacia abajo para acceder al contenido.\nVuelve a deslizar el dedo hacia abajo para acceder a los controles del sistema."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Desliza el dedo desde el borde de la pantalla para mostrar la barra."</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Desliza el dedo desde el borde de la pantalla para mostrar la barra del sistema."</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Modo de inversión de color"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Modo de contraste mejorado"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de corrección de color"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECIENTES"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Es posible que la red\nesté supervisada."</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notificación oculta"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notificaciones ocultas"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"No molestar"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d más"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Presionar de nuevo para abrir"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Deslizar el dedo hacia arriba para desbloquear"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 64c3cab..3424166 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Permitir siempre desde este ordenador"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom para ajustar"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Expandir para ajustar"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilidad"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Si la aplicación se ha diseñado para una pantalla más pequeña, aparecerá un control de zoom junto al reloj."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Guardando captura..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Guardando captura..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"La captura de pantalla se está guardando."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Inicio"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menú"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Aplicaciones recientes"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Buscar"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Cámara"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Botón Cambiar método de entrada"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botón de zoom de compatibilidad"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de pantalla más pequeña a más grande"</string>
@@ -116,8 +116,8 @@
     <string name="accessibility_two_bars" msgid="6437363648385206679">"Dos barras"</string>
     <string name="accessibility_three_bars" msgid="2648241415119396648">"Tres barras"</string>
     <string name="accessibility_signal_full" msgid="9122922886519676839">"Señal al máximo"</string>
-    <string name="accessibility_desc_on" msgid="2385254693624345265">"Activado"</string>
-    <string name="accessibility_desc_off" msgid="6475508157786853157">"Desactivado"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Sí"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"No"</string>
     <string name="accessibility_desc_connected" msgid="8366256693719499665">"Conectado"</string>
     <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
     <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batería <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avión <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Ubicación <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"La alarma sonará a la(s) <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datos 2G-3G inhabilitados"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datos 4G inhabilitados"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Con conexión Wi-Fi"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Ubicación definida por GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Solicitudes de ubicación activas"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Borrar todas las notificaciones"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Información de la aplicación"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"La pantalla girará automáticamente."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"La pantalla está bloqueada en modo horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"La pantalla está bloqueada en modo vertical."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Caja para postres"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Salvapantallas"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avión"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brillo"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Girar automáticamente"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotación bloqueada"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueado en vertical"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueado en horizontal"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de entrada"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Ubicación"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Ubicación desactivada"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"No conectado"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"No hay red."</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desactivado"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Pantalla Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Pantalla inalámbrica"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Enviar contenido a pantalla"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brillo"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Las notificaciones aparecen aquí"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Desliza el dedo hacia abajo para acceder al contenido.\nVuelve a deslizar el dedo hacia abajo para acceder a los controles del sistema."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Desliza el borde de la pantalla para mostrar la barra"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Desliza el borde de la pantalla para mostrar la barra del sistema"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Modo de inversión de color"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Modo de contraste mejorado"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de corrección de color"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECIENTES"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"La red se\npuede supervisar"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Buscar"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Desliza el dedo hacia arriba para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Desliza el dedo hacia la izquierda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notification oculta"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notificaciones ocultas"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toca para mostrar"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"No molestar"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d más"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Toca de nuevo para abrir"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Desliza el dedo hacia arriba para desbloquear"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-et-rEE-land/strings.xml b/packages/SystemUI/res/values-et-rEE-land/strings.xml
new file mode 100644
index 0000000..77b0ce1
--- /dev/null
+++ b/packages/SystemUI/res/values-et-rEE-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Ekraan on nüüd lukustatud horisontaalasendisse."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
new file mode 100644
index 0000000..8dbf9af
--- /dev/null
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"Süsteemi UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Kustuta"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Loendist eemaldamine"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Rakenduse teave"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Uusi rakendusi pole"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Loobu hiljutistest rakendustest"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 hiljutine rakendus"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d hiljutist rakendust"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Teatisi pole"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Jätkuv"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Teadistused"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Ühendage laadija"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"Aku hakkab tühjenema."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> on alles"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB laadimist ei toetata.\nKasutage ainult tootja laadija."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Akukasutus"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Seaded"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"WiFi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Lennurežiim"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Pööra ekraani automaatselt"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"SUMMUTA"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Teatised"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth on jagatud"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Seadista sisestusmeetodeid"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Füüsiline klaviatuur"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Kas lubate rakendusel <xliff:g id="APPLICATION">%1$s</xliff:g> USB-seadmele juurde pääseda?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Kas lubate rakendusel <xliff:g id="APPLICATION">%1$s</xliff:g> USB-seadmele juurde pääseda?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Kas avada <xliff:g id="ACTIVITY">%1$s</xliff:g>, kui see USB-seade on ühendatud?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Kas avada <xliff:g id="ACTIVITY">%1$s</xliff:g>, kui USB-lisaseade on ühendatud?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Inst. rak. ei tööta selle USB-seadmega. Lisateavet lisaseadme kohta vt siit: <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB-lisaseade"</string>
+    <string name="label_view" msgid="6304565553218192990">"Kuva"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Kasuta vaikimisi selle USB-seadme jaoks"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Vaikimisi kasuta seda USB-lisaseadet"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"Kas luban USB silumise?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"Arvuti RSA-võtme sõrmejälg:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Luba alati sellest arvutist"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Suumi ekraani täitmiseks"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Venita ekraani täitmiseks"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Kuvatõmmise salvestamine ..."</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Kuvatõmmise salvestamine ..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Kuvatõmmist salvestatakse."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Ekraanipilt on jäädvustatud."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Puudutage kuvatõmmise vaatamiseks."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Kuvatõmmist ei saanud jäädvustada."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Kuvatõmmist ei saa salvestada. Mäluseade võib olla kasutuses."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB-failiedastuse valikud"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Paigalda meediumimängijana (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Paigalda kaamerana (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Android File Transferi installimine Macile"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Tagasi"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Kodu"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Menüü"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Hiljutised rakendused"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Otsing"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kaamera"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Sisestusmeetodi vahetamise nupp."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Sobivussuumi nupp."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Suumi suuremale ekraanile vähem."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth on ühendatud."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetoothi ühendus katkestatud."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"Aku puudub."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Aku: üks pulk."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Aku: kaks pulka."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Aku: kolm pulka."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Aku täis."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"Telefonisignaal puudub"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefonisignaal: üks pulk."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefonisignaal: kaks pulka."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefonisignaal: kolm pulka."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefonisignaal on tugev."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"Andmed puuduvad."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Andmesignaal: üks pulk."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Andmeside: kaks pulka."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Andmeside: kolm pulka."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Andmesignaal on tugev."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi on väljas."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi-ühendus on katkestatud."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"WiFi: üks pulk."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"WiFi: kaks pulka."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi: kolm pulka."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"WiFi-signaal on tugev."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX-i pole."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX-i on üks riba."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-i on kaks riba."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-i on kolm riba."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-i signaal on tugev."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"Signaal puudub."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Ühendus puudub."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Null pulka."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"Üks pulk."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"Kaks pulka."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Kolm pulka."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Signaal on tugev."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Sees."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Väljas."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Ühendatud."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rändlus"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Serv"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"WiFi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM-kaarti pole."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetoothi jagamine."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lennurežiim."</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Aku: <xliff:g id="NUMBER">%d</xliff:g> protsenti."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"Süsteemiseaded"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Teatised"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Teatise kustutamine"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS on lubatud."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-signaali otsimine."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter lubatud."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibreeriv kõlisti."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Vaikne kõlisti."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Loobusite rakendusest <xliff:g id="APP">%s</xliff:g>."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Märguandest on loobutud."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Märguande vari."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Kiirseaded."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Hiljutised rakendused"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Kasutaja <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobiili <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Aku: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lennukirežiim: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Asukoht: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Määratud äratus: <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G andmeside keelatud"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G andmeside keelatud"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobiilne andmeside keelatud"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Andmekasutus keelatud."</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Olete jõudnud määratud andmekasutuse piirini.\n\nKui lülitate andmeside uuesti sisse, siis võib operaator teilt tasu võtta."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Luba andmeside uuesti"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Interneti-ühendus puudub"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WiFi on ühendatud"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS-i otsimine"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS-i määratud asukoht"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Asukoha taotlused on aktiivsed"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Kustuta kõik teatised."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Rakenduse teave"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekraani pööramine toimub automaatselt."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekraan on lukustatud horisontaalsuunas."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekraan on lukustatud vertikaalsuunas."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Maiustusekorv"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Unistus"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lennurežiim"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Laetud"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> seadet)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth on väljas"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Heledus"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automaatne pööramine"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Pööramine lukus"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Lukustatud vertikaalpaigutusse"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Lukustatud horisontaalpaigutusse"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Sisestusmeetod"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Asukoht"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Asukoht on väljas"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Meediaseade"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Ainult hädaabikõned"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Seaded"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Aeg"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Mina"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"WiFi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ühendus puudub"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WiFi-ühendus on väljas"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast-ekraan"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Heledus"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAATNE"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Värvide ümberpööramise režiim"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Täiustatud kontrasti režiim"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Värviparandusrežiim"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"HILJUTISED"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Rakenduste teave"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"otsing"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Võrku võidakse\njälgida"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Otsing"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Lohistage üles: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Lohistage vasakule: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for zen_mode_notification_title:other (7388721375827338153) -->
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Puudutage kuvamiseks"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Mitte segada"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Veel %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Avamiseks puudutage uuesti"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Lukustuse tühistamiseks pühkige üles"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml
deleted file mode 100644
index 6d9c838..0000000
--- a/packages/SystemUI/res/values-et/strings.xml
+++ /dev/null
@@ -1,205 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * Copyright (c) 2009, 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="7164937344850004466">"Süsteemi UI"</string>
-    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Kustuta"</string>
-    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Loendist eemaldamine"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Rakenduse teave"</string>
-    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Uusi rakendusi pole"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Loobu hiljutistest rakendustest"</string>
-  <plurals name="status_bar_accessibility_recent_apps">
-    <item quantity="one" msgid="5854176083865845541">"1 hiljutine rakendus"</item>
-    <item quantity="other" msgid="1040784359794890744">"%d hiljutist rakendust"</item>
-  </plurals>
-    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Teatisi pole"</string>
-    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Jätkuv"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Teadistused"</string>
-    <string name="battery_low_title" msgid="2783104807551211639">"Ühendage laadija"</string>
-    <string name="battery_low_subtitle" msgid="1752040062087829196">"Aku hakkab tühjenema."</string>
-    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> on alles"</string>
-    <string name="invalid_charger" msgid="4549105996740522523">"USB laadimist ei toetata.\nKasutage ainult tootja laadija."</string>
-    <string name="battery_low_why" msgid="7279169609518386372">"Akukasutus"</string>
-    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Seaded"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"WiFi"</string>
-    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Lennurežiim"</string>
-    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Pööra ekraani automaatselt"</string>
-    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"SUMMUTA"</string>
-    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
-    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Teatised"</string>
-    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth on jagatud"</string>
-    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Seadista sisestusmeetodeid"</string>
-    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Füüsiline klaviatuur"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Kas lubate rakendusel <xliff:g id="APPLICATION">%1$s</xliff:g> USB-seadmele juurde pääseda?"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Kas lubate rakendusel <xliff:g id="APPLICATION">%1$s</xliff:g> USB-seadmele juurde pääseda?"</string>
-    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Kas avada <xliff:g id="ACTIVITY">%1$s</xliff:g>, kui see USB-seade on ühendatud?"</string>
-    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Kas avada <xliff:g id="ACTIVITY">%1$s</xliff:g>, kui USB-lisaseade on ühendatud?"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Inst. rak. ei tööta selle USB-seadmega. Lisateavet lisaseadme kohta vt siit: <xliff:g id="URL">%1$s</xliff:g>"</string>
-    <string name="title_usb_accessory" msgid="4966265263465181372">"USB-lisaseade"</string>
-    <string name="label_view" msgid="6304565553218192990">"Kuva"</string>
-    <string name="always_use_device" msgid="1450287437017315906">"Kasuta vaikimisi selle USB-seadme jaoks"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"Vaikimisi kasuta seda USB-lisaseadet"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"Kas luban USB silumise?"</string>
-    <string name="usb_debugging_message" msgid="2220143855912376496">"Arvuti RSA-võtme sõrmejälg:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
-    <string name="usb_debugging_always" msgid="303335496705863070">"Luba alati sellest arvutist"</string>
-    <string name="compat_mode_on" msgid="6623839244840638213">"Suumi ekraani täitmiseks"</string>
-    <string name="compat_mode_off" msgid="4434467572461327898">"Venita ekraani täitmiseks"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Sobivussuum"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Kui rakendus on mõeldud väiksemale ekraanile, kuvatakse kella kõrval suumi juhtnupp."</string>
-    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Kuvatõmmise salvestamine ..."</string>
-    <string name="screenshot_saving_title" msgid="8242282144535555697">"Kuvatõmmise salvestamine ..."</string>
-    <string name="screenshot_saving_text" msgid="2419718443411738818">"Kuvatõmmist salvestatakse."</string>
-    <string name="screenshot_saved_title" msgid="6461865960961414961">"Ekraanipilt on jäädvustatud."</string>
-    <string name="screenshot_saved_text" msgid="1152839647677558815">"Puudutage kuvatõmmise vaatamiseks."</string>
-    <string name="screenshot_failed_title" msgid="705781116746922771">"Kuvatõmmist ei saanud jäädvustada."</string>
-    <string name="screenshot_failed_text" msgid="8134011269572415402">"Kuvatõmmist ei saa salvestada. Mäluseade võib olla kasutuses."</string>
-    <string name="usb_preference_title" msgid="6551050377388882787">"USB-failiedastuse valikud"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"Paigalda meediumimängijana (MTP)"</string>
-    <string name="use_ptp_button_title" msgid="7517127540301625751">"Paigalda kaamerana (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Android File Transferi installimine Macile"</string>
-    <string name="accessibility_back" msgid="567011538994429120">"Tagasi"</string>
-    <string name="accessibility_home" msgid="8217216074895377641">"Kodu"</string>
-    <string name="accessibility_menu" msgid="316839303324695949">"Menüü"</string>
-    <string name="accessibility_recent" msgid="8571350598987952883">"Hiljutised rakendused"</string>
-    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Sisestusmeetodi vahetamise nupp."</string>
-    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Sobivussuumi nupp."</string>
-    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Suumi suuremale ekraanile vähem."</string>
-    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth on ühendatud."</string>
-    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetoothi ühendus katkestatud."</string>
-    <string name="accessibility_no_battery" msgid="358343022352820946">"Aku puudub."</string>
-    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Aku: üks pulk."</string>
-    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Aku: kaks pulka."</string>
-    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Aku: kolm pulka."</string>
-    <string name="accessibility_battery_full" msgid="8909122401720158582">"Aku täis."</string>
-    <string name="accessibility_no_phone" msgid="4894708937052611281">"Telefonisignaal puudub"</string>
-    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefonisignaal: üks pulk."</string>
-    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefonisignaal: kaks pulka."</string>
-    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefonisignaal: kolm pulka."</string>
-    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Telefonisignaal on tugev."</string>
-    <string name="accessibility_no_data" msgid="4791966295096867555">"Andmed puuduvad."</string>
-    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Andmesignaal: üks pulk."</string>
-    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Andmeside: kaks pulka."</string>
-    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Andmeside: kolm pulka."</string>
-    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Andmesignaal on tugev."</string>
-    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi on väljas."</string>
-    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi-ühendus on katkestatud."</string>
-    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"WiFi: üks pulk."</string>
-    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"WiFi: kaks pulka."</string>
-    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi: kolm pulka."</string>
-    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"WiFi-signaal on tugev."</string>
-    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX-i pole."</string>
-    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX-i on üks riba."</string>
-    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-i on kaks riba."</string>
-    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-i on kolm riba."</string>
-    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-i signaal on tugev."</string>
-    <string name="accessibility_no_signal" msgid="7064645320782585167">"Signaal puudub."</string>
-    <string name="accessibility_not_connected" msgid="6395326276213402883">"Ühendus puudub."</string>
-    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Null pulka."</string>
-    <string name="accessibility_one_bar" msgid="1685730113192081895">"Üks pulk."</string>
-    <string name="accessibility_two_bars" msgid="6437363648385206679">"Kaks pulka."</string>
-    <string name="accessibility_three_bars" msgid="2648241415119396648">"Kolm pulka."</string>
-    <string name="accessibility_signal_full" msgid="9122922886519676839">"Signaal on tugev."</string>
-    <string name="accessibility_desc_on" msgid="2385254693624345265">"Sees."</string>
-    <string name="accessibility_desc_off" msgid="6475508157786853157">"Väljas."</string>
-    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Ühendatud."</string>
-    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
-    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
-    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
-    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
-    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3,5G"</string>
-    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
-    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
-    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
-    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Rändlus"</string>
-    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Serv"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"WiFi"</string>
-    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM-kaarti pole."</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetoothi jagamine."</string>
-    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lennurežiim."</string>
-    <string name="accessibility_battery_level" msgid="7451474187113371965">"Aku: <xliff:g id="NUMBER">%d</xliff:g> protsenti."</string>
-    <string name="accessibility_settings_button" msgid="799583911231893380">"Süsteemiseaded"</string>
-    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Teatised"</string>
-    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Teatise kustutamine"</string>
-    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS on lubatud."</string>
-    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-signaali otsimine."</string>
-    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter lubatud."</string>
-    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibreeriv kõlisti."</string>
-    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Vaikne kõlisti."</string>
-    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Loobusite rakendusest <xliff:g id="APP">%s</xliff:g>."</string>
-    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Märguandest on loobutud."</string>
-    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Märguande vari."</string>
-    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Kiirseaded."</string>
-    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Hiljutised rakendused"</string>
-    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Kasutaja <xliff:g id="USER">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
-    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mobiili <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Aku: <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lennukirežiim: <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Määratud äratus: <xliff:g id="TIME">%s</xliff:g>"</string>
-    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G andmeside keelatud"</string>
-    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G andmeside keelatud"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Mobiilne andmeside keelatud"</string>
-    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Andmekasutus keelatud."</string>
-    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Olete jõudnud määratud andmekasutuse piirini.\n\nKui lülitate andmeside uuesti sisse, siis võib operaator teilt tasu võtta."</string>
-    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Luba andmeside uuesti"</string>
-    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Interneti-ühendus puudub"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WiFi on ühendatud"</string>
-    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS-i otsimine"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS-i määratud asukoht"</string>
-    <string name="accessibility_clear_all" msgid="5235938559247164925">"Kustuta kõik teatised."</string>
-    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Rakenduse teave"</string>
-    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekraani pööramine toimub automaatselt."</string>
-    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekraan on lukustatud horisontaalsuunas."</string>
-    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekraan on lukustatud vertikaalsuunas."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
-    <string name="start_dreams" msgid="7219575858348719790">"Unistus"</string>
-    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
-    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lennurežiim"</string>
-    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Laadimine, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Laetud"</string>
-    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
-    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> seadet)"</string>
-    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth on väljas"</string>
-    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Heledus"</string>
-    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automaatne pööramine"</string>
-    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Pööramine lukus"</string>
-    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Sisestusmeetod"</string>
-    <string name="quick_settings_location_label" msgid="5011327048748762257">"Asukoht"</string>
-    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Asukoht on väljas"</string>
-    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Meediaseade"</string>
-    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
-    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Ainult hädaabikõned"</string>
-    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Seaded"</string>
-    <string name="quick_settings_time_label" msgid="4635969182239736408">"Aeg"</string>
-    <string name="quick_settings_user_label" msgid="5238995632130897840">"Mina"</string>
-    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"WiFi"</string>
-    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ühendus puudub"</string>
-    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Võrku pole"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WiFi-ühendus on väljas"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"WiFi-ekraan"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Juhtmeta ekraaniühendus"</string>
-    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Heledus"</string>
-    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAATNE"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Märguanded ilmuvad siia"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Juurdepääs igal ajal sõrmega alla pühkides.\nSüsteemi juhtnuppude jaoks pühkige uuesti alla."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Riba kuvamiseks pühkige ekraani serva"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Süsteemiriba kuvamiseks pühkige ekraani servast"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index b095519..b2ac990 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -27,7 +27,7 @@
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"رد کردن برنامه‌های اخیر"</string>
   <plurals name="status_bar_accessibility_recent_apps">
     <item quantity="one" msgid="5854176083865845541">"1 برنامه اخیر"</item>
-    <item quantity="other" msgid="1040784359794890744">"%d برنامه‌ اخیر"</item>
+    <item quantity="other" msgid="1040784359794890744">"‏%d برنامه‌ اخیر"</item>
   </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"اعلانی موجود نیست"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"در حال انجام"</string>
@@ -35,7 +35,7 @@
     <string name="battery_low_title" msgid="2783104807551211639">"شارژر را متصل کنید"</string>
     <string name="battery_low_subtitle" msgid="1752040062087829196">"باتری در حال کم شدن است."</string>
     <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> باقیمانده است"</string>
-    <string name="invalid_charger" msgid="4549105996740522523">"شارژ USB پشتیبانی نمی‌شود.\nفقط از شارژر ارائه شده استفاده کنید."</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"‏شارژ USB پشتیبانی نمی‌شود.\nفقط از شارژر ارائه شده استفاده کنید."</string>
     <string name="battery_low_why" msgid="7279169609518386372">"استفاده از باتری"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"تنظیمات"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
@@ -47,22 +47,20 @@
     <string name="bluetooth_tethered" msgid="7094101612161133267">"اتصال اینترنتی با بلوتوث تلفن همراه"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"تنظیم روش‌های ورودی"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"صفحه‌کلید فیزیکی"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"به برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> اجازه می‌دهید به دستگاه USB دسترسی داشته باشد؟"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"به برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> اجازه می‌دهد تا به وسیله جانبی USB دسترسی داشته باشد؟"</string>
-    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"وقتی این دستگاه USB وصل است، <xliff:g id="ACTIVITY">%1$s</xliff:g> باز شود؟"</string>
-    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"وقتی این وسیله جانبی USB وصل است، <xliff:g id="ACTIVITY">%1$s</xliff:g> باز شود؟"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"هیچ برنامهٔ کاربردی نصب شده‌ای با این وسیله جانبی USB کار نمی‌کند. در <xliff:g id="URL">%1$s</xliff:g> دربارهٔ این وسیله جانبی اطلاعات بیشتری کسب کنید"</string>
-    <string name="title_usb_accessory" msgid="4966265263465181372">"لوازم جانبی USB"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"‏به برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> اجازه می‌دهید به دستگاه USB دسترسی داشته باشد؟"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"‏به برنامه <xliff:g id="APPLICATION">%1$s</xliff:g> اجازه می‌دهد تا به وسیله جانبی USB دسترسی داشته باشد؟"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"‏وقتی این دستگاه USB وصل است، <xliff:g id="ACTIVITY">%1$s</xliff:g> باز شود؟"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"‏وقتی این وسیله جانبی USB وصل است، <xliff:g id="ACTIVITY">%1$s</xliff:g> باز شود؟"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"‏هیچ برنامهٔ کاربردی نصب شده‌ای با این وسیله جانبی USB کار نمی‌کند. در <xliff:g id="URL">%1$s</xliff:g> دربارهٔ این وسیله جانبی اطلاعات بیشتری کسب کنید"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"‏لوازم جانبی USB"</string>
     <string name="label_view" msgid="6304565553218192990">"مشاهده"</string>
-    <string name="always_use_device" msgid="1450287437017315906">"استفاده به صورت پیش‌فرض برای این دستگاه USB"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"استفاده به صورت پیش‌فرض برای این دستگاه USB"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"اجازه به اشکال‌زدایی USB؟"</string>
-    <string name="usb_debugging_message" msgid="2220143855912376496">"اثر انگشت کلید RSA رایانه: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"‏استفاده به صورت پیش‌فرض برای این دستگاه USB"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"‏استفاده به صورت پیش‌فرض برای این دستگاه USB"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"‏اجازه به اشکال‌زدایی USB؟"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"‏اثر انگشت کلید RSA رایانه: \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"همیشه از این رایانه انجام شود"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"بزرگنمایی برای پر کردن صفحه"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"گسترده کردن برای پر کردن صفحه"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"بزرگنمایی سازگاری"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"اگر یک برنامه برای صفحه کوچک تری طراحی شده باشد، یک کنترل بزرگنمایی توسط ساعت نشان داده می‌شود."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"در حال ذخیره تصویر صفحه..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"در حال ذخیره تصویر صفحه..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"تصویر صفحه ذخیره شد."</string>
@@ -70,14 +68,16 @@
     <string name="screenshot_saved_text" msgid="1152839647677558815">"برای مشاهده تصویر صفحه خود، لمس کنید."</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"تصویر صفحه گرفته نشد."</string>
     <string name="screenshot_failed_text" msgid="8134011269572415402">"تصویر صفحه ذخیره نشد. ممکن است دستگاه ذخیره‌ در حال استفاده باشد."</string>
-    <string name="usb_preference_title" msgid="6551050377388882787">"گزینه‌های انتقال فایل USB"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"نصب به‌عنوان دستگاه پخش رسانه (MTP)"</string>
-    <string name="use_ptp_button_title" msgid="7517127540301625751">"تصب به‌عنوان دوربین (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"برنامه Android File Transfer را برای Mac نصب کنید"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"‏گزینه‌های انتقال فایل USB"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"‏نصب به‌عنوان دستگاه پخش رسانه (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"‏تصب به‌عنوان دوربین (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"‏برنامه Android File Transfer را برای Mac نصب کنید"</string>
     <string name="accessibility_back" msgid="567011538994429120">"برگشت"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"صفحهٔ اصلی"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"منو"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"برنامه‌های اخیر"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"جستجو"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"دوربین"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"کلید تغییر روش ورود متن."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"دکمه بزرگنمایی سازگار."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"بزرگنمایی از صفحه‌های کوچک تا بزرگ."</string>
@@ -98,17 +98,17 @@
     <string name="accessibility_data_two_bars" msgid="6166018492360432091">"دو نوار برای داده."</string>
     <string name="accessibility_data_three_bars" msgid="9167670452395038520">"سه نوار برای داده."</string>
     <string name="accessibility_data_signal_full" msgid="2708384608124519369">"قدرت سیگنال داده کامل است."</string>
-    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi‑Fi خاموش."</string>
-    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wi-Fi قطع‌شد."</string>
-    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"یک نوار برای Wi‑Fi."</string>
-    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"دو نوار برای Wi‑Fi."</string>
-    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"سه نوار برای Wi‑Fi."</string>
-    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"قدرت سیگنال Wi‑Fi کامل است."</string>
-    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX وجود ندارد."</string>
-    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX دارای یک نوار است."</string>
-    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX دارای دو نوار است."</string>
-    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX دارای سه نوار است."</string>
-    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"قدرت سیگنال WiMAX کامل است."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"‏Wi‑Fi خاموش."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"‏Wi-Fi قطع‌شد."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"‏یک نوار برای Wi‑Fi."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"‏دو نوار برای Wi‑Fi."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"‏سه نوار برای Wi‑Fi."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"‏قدرت سیگنال Wi‑Fi کامل است."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"‏WiMAX وجود ندارد."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"‏WiMAX دارای یک نوار است."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‏WiMAX دارای دو نوار است."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‏WiMAX دارای سه نوار است."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‏قدرت سیگنال WiMAX کامل است."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"فاقد سیگنال."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"متصل نیست."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"بدون میله."</string>
@@ -137,9 +137,9 @@
     <string name="accessibility_settings_button" msgid="799583911231893380">"تنظیمات سیستم."</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"اعلان‌ها."</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"پاک کردن اعلان"</string>
-    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS فعال شد."</string>
-    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"دستیابی به GPS."</string>
-    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter فعال شد."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"‏GPS فعال شد."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"‏دستیابی به GPS."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"‏TeleTypewriter فعال شد."</string>
     <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"زنگ لرزشی."</string>
     <string name="accessibility_ringer_silent" msgid="9061243307939135383">"زنگ بی‌صدا."</string>
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> نادیده گرفته شد."</string>
@@ -153,23 +153,25 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"باتری <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"حالت هواپیما <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"بلوتوث <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"مکان <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"هشدار برای <xliff:g id="TIME">%s</xliff:g> تنظیم شد."</string>
-    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"داده 2G-3G غیرفعال شد"</string>
-    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"داده 4G غیر فعال شد"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"‏داده 2G-3G غیرفعال شد"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"‏داده 4G غیر فعال شد"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"داده‌های تلفن همراه غیرفعال است"</string>
     <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"داده غیرفعال شد"</string>
     <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"به حداکثر محدوده مشخص شده برای استفاده از داده رسیده‌اید.\n\nدر صورت فعال کردن مجدد داده، ممکن است از طرف اپراتور برای شما هزینه محاسبه شود."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"فعال کردن مجدد داده"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"اتصال اینترنتی وجود ندارد"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi متصل شد"</string>
-    <string name="gps_notification_searching_text" msgid="8574247005642736060">"جستجو برای GPS"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"مکان تنظیم شده توسط GPS"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"‏Wi-Fi متصل شد"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"‏جستجو برای GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"‏مکان تنظیم شده توسط GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"درخواست‌های موقعیت مکانی فعال است"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"پاک کردن تمام اعلان‌ها"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"اطلاعات برنامه"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"صفحه به صورت خودکار می‌چرخد."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"صفحه اکنون در جهت افقی قفل است."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"صفحه اکنون در جهت عمودی قفل است."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"ویترین دسر"</string>
     <string name="start_dreams" msgid="7219575858348719790">"رویاپردازی"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"اترنت"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"حالت هواپیما"</string>
@@ -181,11 +183,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"روشنایی"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"چرخش خودکار"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"چرخش قفل شد"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"قفل شده در حالت عمودی"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"قفل شده در حالت افقی"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"روش ورودی"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"مکان"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"مکان خاموش"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"دستگاه رسانه"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"فقط تماس‌های اضطراری"</string>
@@ -195,13 +197,29 @@
     <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"متصل نیست"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"شبکه‌ای موجود نیست"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi خاموش است"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Display"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"نمایش بدون سیم"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏Wi-Fi خاموش است"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"فرستادن صفحه"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"روشنایی"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"خودکار"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"اعلان‌ها در اینجا نمایش داده می‌شوند"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"با کشیدن انگشت به طرف پایین به آنها دسترسی پیدا کنید.\nبرای کنترل‌های سیستم دوباره انگشت خود را به سمت پایین بکشید."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"برای نمایش نوار، انگشت خود را از لبه‌ صفحه به داخل بکشید"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"برای نمایش نوار سیستم، انگشت خود را از لبه‌ صفحه به داخل بکشید"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"حالت وارونگی رنگ"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"حالت کنتراست بهبودیافته"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"حالت تصحیح رنگ"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"موارد اخیر"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"اطلاعات برنامه"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"جستجو"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ممکن است شبکه\nتحت نظارت باشد"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"جستجو"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"لغزاندن به بالا برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"لغزاندن به چپ برای <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"اعلان پنهان شده"</item>
+    <item quantity="other" msgid="7388721375827338153">"‏%d اعلان پنهان شده"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"برای نمایش لمس کنید"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"مزاحم نشوید"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"‏%d بیشتر"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"برای باز کردن دوباره ضربه بزنید"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"برای باز کردن قفل سریع به بالا بکشید"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index 06e1926..af0df4d 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -38,7 +38,7 @@
     <string name="invalid_charger" msgid="4549105996740522523">"USB-latausta ei tueta.\nKäytä laitteen mukana tullutta laturia."</string>
     <string name="battery_low_why" msgid="7279169609518386372">"Akun käyttö"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Asetukset"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wifi"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
     <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Lentokonetila"</string>
     <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Kierrä näyttöä automaattisesti"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"ÄÄNET."</string>
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Salli aina tällä tietokoneella"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoomaa koko näyttöön"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Venytä koko näyttöön"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Yhteensopivuuszoomaus"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Jos sovellus on suunniteltu pienemmälle näytölle, kellon viereen tulee näkyviin zoomaussäädin."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Tallennetaan kuvakaappausta..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Tallennetaan kuvakaappausta..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Kuvakaappausta tallennetaan."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Aloituspainike"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Valikko"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Viimeaikaiset sovellukset"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Haku"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Syöttötavan vaihtopainike."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Yhteensopivuuszoomaus-painike."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoomaa pienemmältä suuremmalle ruudulle."</string>
@@ -98,11 +98,11 @@
     <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Datasignaali - kaksi palkkia."</string>
     <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Datasignaali - kolme palkkia"</string>
     <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Vahva kuuluvuus."</string>
-    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi pois käytöstä."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi-Fi pois käytöstä."</string>
     <string name="accessibility_no_wifi" msgid="1425476551827924474">"Ei wifi-yhteyttä."</string>
-    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi-signaali – yksi palkki."</string>
-    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi-signaali – kaksi palkkia."</string>
-    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wifi-signaali – kolme palkkia."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wi-Fi-signaali – yksi palkki."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wi-Fi-signaali – kaksi palkkia."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wi-Fi-signaali – kolme palkkia."</string>
     <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Vahva wifi-signaali."</string>
     <string name="accessibility_no_wimax" msgid="4329180129727630368">"Ei WiMAX-yhteyttä."</string>
     <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX: yksi palkki."</string>
@@ -129,7 +129,7 @@
     <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Roaming"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wifi"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"Ei SIM-korttia."</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Internetyhteyden jakaminen Bluetoothin kautta."</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"Lentokonetila."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akku: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lentokonetila <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Sijainti <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Hälytys asetettu, aika: <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-tiedonsiirto pois käytöstä"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-tiedonsiirto pois käytöstä"</string>
@@ -161,15 +162,16 @@
     <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Tiedonsiirtoraja saavutettu.\n\nJos otat tiedonsiirron uudelleen käyttöön, operaattorisi voi veloittaa sinua."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Ota tiedonsiirto käyttöön"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ei internetyhteyttä"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wifi yhdistetty"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi yhdistetty"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Haetaan GPS-yhteyttä"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Sijainti määritetty GPS:n avulla"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Sijaintipyynnöt aktiiviset"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Tyhjennä kaikki ilmoitukset."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Sovelluksen tiedot"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ruutu kääntyy automaattisesti."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ruutu on lukittu vaakasuuntaan."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ruutu on lukittu pystysuuntaan."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Jälkiruokavitriini"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Unelmat"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lentokonetila"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kirkkaus"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automaattinen kääntö"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Kääntö lukittu"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Vaaka lukittu"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Pysty lukittu"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Syöttötapa"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Sijainti"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Sijainti ei käytössä"</string>
@@ -190,16 +194,32 @@
     <string name="quick_settings_settings_label" msgid="5326556592578065401">"Asetukset"</string>
     <string name="quick_settings_time_label" msgid="4635969182239736408">"Aika"</string>
     <string name="quick_settings_user_label" msgid="5238995632130897840">"Minä"</string>
-    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wifi"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ei yhteyttä"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ei verkkoa"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wifi-yhteys pois käytöstä"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wifi-näyttö"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Langaton näyttö"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-yhteys pois käytöstä"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Lähetysnäyttö"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kirkkaus"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Ilmoitukset näkyvät tässä"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Näet ilmoitukset liu\'uttamalla sormea alas ruudulla.\nVoit palauttaa järjestelmän ohjaimet näkyviin liu\'uttamalla sormea alas uudelleen."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Tuo palkki näkyviin liu\'uttamalla ruudun reunasta"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Tuo järjestelmäpalkki näkyviin liu\'uttamalla ruudun reunasta"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Käänteinen väritila"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Kontrastinparannustila"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Värinkorjaustila"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"VIIMEISIMMÄT"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Sovellustiedot"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"haku"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Verkkoa saatetaan\nvalvoa"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Haku"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Liu\'uta ylös ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Liu\'uta vasemmalle ja <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Ilmoitus piilotettu"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d ilmoitusta piilotettu"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Näytä koskettamalla"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Älä häiritse"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d muuta"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Avaa napauttamalla uudelleen"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Avaa lukitus pyyhkäisemällä ylös"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-fr-rCA-land/strings.xml b/packages/SystemUI/res/values-fr-rCA-land/strings.xml
new file mode 100644
index 0000000..4775fc6
--- /dev/null
+++ b/packages/SystemUI/res/values-fr-rCA-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"L\'écran est désormais verrouillé au format paysage."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..f01c99a
--- /dev/null
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"IU système"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Effacer"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Supprimer de la liste"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informations sur l\'application"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Aucune application récente"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Masquer les applications récentes"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 application récente"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d applications récentes"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Aucune notification"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"En cours"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Notifications"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Brancher le chargeur"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"Le niveau de la batterie est faible."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> restant(s)"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"Chargement USB non compatible.\nVous devez utiliser le chargeur fourni."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Utilisation de la batterie"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Paramètres"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Mode Avion"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Rotation auto de l\'écran"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUET"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOMATIQUE"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notifications"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Connexion Bluetooth partagée"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Configurer les modes de saisie"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Clavier physique"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Autoriser l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> à accéder au périphérique USB?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Autoriser l\'application <xliff:g id="APPLICATION">%1$s</xliff:g> à accéder à l\'accessoire USB?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Ouvrir <xliff:g id="ACTIVITY">%1$s</xliff:g> lors de la connexion de ce périphérique USB?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Ouvrir <xliff:g id="ACTIVITY">%1$s</xliff:g> lors de la connexion de cet accessoire USB?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Aucune application installée compatible avec accessoire USB. En savoir plus sur <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"Accessoire USB"</string>
+    <string name="label_view" msgid="6304565553218192990">"Afficher"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Utiliser par défaut pour ce périphérique USB"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Utiliser par défaut pour cet accessoire USB"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"Autoriser le débogage USB?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"Empreinte numérique de la clé RSA de l\'ordinateur : \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Toujours autoriser sur cet ordinateur"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Zoomer pour remplir l\'écran"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Étirer pour remplir l\'écran"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Enregistrement capture écran…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Enregistrement capture écran…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Enregistrement de la capture d\'écran en cours…"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Capture d\'écran réussie"</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Appuyez pour afficher votre capture d\'écran."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Impossible de réaliser une capture d\'écran"</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Impossible enregistrer capture d\'écran. Périphérique de stockage peut-être en cours d\'utilisation."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"Options transfert fichiers USB"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Installer comme un lecteur multimédia (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Installer comme un appareil photo (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Installer application Android File Transfer (Mac)"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Précédent"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Domicile"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Applications récentes"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Rechercher"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Appareil photo"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Bouton \"Zoom de compatibilité\""</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de compatibilité avec la taille de l\'écran"</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth connecté"</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth déconnecté"</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"Batterie vide"</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Niveau de batterie : faible"</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Niveau de batterie : moyen"</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Niveau de batterie : bon"</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Batterie pleine"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"Aucun signal"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Signal : faible"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Signal : moyen"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Signal : bon"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Signal excellent"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"Aucun signal"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Signal faible"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Signal moyen"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Signal bon"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Signal excellent"</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi-Fi désactivé"</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wi-Fi déconnecté"</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Signal Wi-Fi faible"</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Signal Wi-Fi moyen"</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Signal Wi-Fi bon"</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Signal Wi-Fi excellent"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"Aucun signal WiMAX"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"Signal WiMAX : faible"</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"Signal WiMAX : moyen"</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"Signal WiMAX : bon"</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Signal WiMAX : excellent"</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"Aucun signal"</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Non connecté"</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Aucun signal"</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"Signal faible"</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"Moyen"</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Bon"</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Signal excellent"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Activé"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Désactivé"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connecté"</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1x"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"3G+"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3G+"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Itinérance"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"EDGE"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"Aucune carte SIM"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Partage de connexion Bluetooth"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mode Avion"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+    <skip />
+    <string name="accessibility_settings_button" msgid="799583911231893380">"Paramètres système"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notifications"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Supprimer la notification"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activé"</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Acquisition de données GPS"</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Téléscripteur activé"</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Sonnerie en mode vibreur"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonnerie en mode silencieux"</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Application \"<xliff:g id="APP">%s</xliff:g>\" ignorée."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Notification masquée"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Volet des notifications"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Paramètres rapides"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Applications récentes"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Utilisateur : <xliff:g id="USER">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>, <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Signal mobile : <xliff:g id="SIGNAL">%1$s</xliff:g>, <xliff:g id="TYPE">%2$s</xliff:g>, <xliff:g id="NETWORK">%3$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batterie : <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode Avion : <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth : <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Localisation <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme réglée sur <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Données 2G-3G  désactivées"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Données 4G désactivées"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Données mobiles désactivées"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Données désactivées"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Vous avez atteint le plafond de consommation de données spécifié.\n\nSi vous utilisez des données supplémentaires, celles-ci pourront être facturées par l\'opérateur."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Réactiver connexion données"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Aucune connexion Internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Connecté au Wi-Fi"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"Recherche de GPS..."</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Position définie par GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Demandes de localisation actives"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Supprimer toutes les notifications"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informations sur l\'application"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"L\'écran pivote automatiquement."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"L\'écran est verrouillé en mode paysage."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"L\'écran est verrouillé en mode portrait."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Vitrine des desserts"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Écran de veille"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode Avion"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"En charge (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Chargée"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> appareils)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"BLUETOOTH DÉSACTIVÉ"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosité"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotation automatique"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation verrouillée"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Verrouillé en mode portrait"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Verrouillé en mode paysage"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Mode de saisie"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Position"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localisation désactivée"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Appareil multimédia"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Appels d\'urgence uniquement"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Paramètres"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Heures"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Moi"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Non connecté"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Écran distant"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosité"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATIQUE"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Mode d\'inversion des couleurs"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mode d\'accentuation du contraste"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode de correction des couleurs"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RÉCENTS"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Détails de l\'application"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Le réseau peut\nêtre surveillé."</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Recherche"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Faire glisser le doigt vers le haut : <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser votre doigt vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notification masquée"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notifications masquées"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Touchez pour afficher la notification"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Ne pas déranger"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d autres"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Touchez à nouveau pour ouvrir"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Glissez vers le haut pour déverrouiller"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index 7db07e2..5efbd2f 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Toujours autoriser sur cet ordinateur"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoomer pour remplir l\'écran"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Étirer pour remplir l\'écran"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilité"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Si une application a été conçue pour un écran plus petit, une commande de zoom s\'affiche à côté de l\'horloge."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Enregistrement capture écran…"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Enregistrement de la capture d\'écran…"</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Enregistrement de la capture d\'écran en cours…"</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Accueil"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Applications récentes"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Rechercher"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Appareil photo"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bouton \"Changer le mode de saisie\""</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Bouton \"Zoom de compatibilité\""</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom de compatibilité avec la taille de l\'écran"</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batterie : <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode Avion : <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth : <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Localisation <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme réglée sur <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Données 2G-3G désactivées"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Données 4G désactivées"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Connecté au Wi-Fi"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Recherche de GPS..."</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Position définie par GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Demandes de localisation actives"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Supprimer toutes les notifications"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informations sur l\'application"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"L\'écran pivote automatiquement."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"L\'écran est verrouillé en mode paysage."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"L\'écran est verrouillé en mode portrait."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Vitrine des desserts"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Écran de veille interactif"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode avion"</string>
@@ -183,14 +185,14 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosité"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotation auto"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotation bloquée"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Verrouillé en mode portrait"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Verrouillé en mode paysage"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Mode de saisie"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Localisation"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localisation désactivée"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Appareil multimédia"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
-    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Appels d\'urgence uniquement"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Appels d\'urgence"</string>
     <string name="quick_settings_settings_label" msgid="5326556592578065401">"Paramètres"</string>
     <string name="quick_settings_time_label" msgid="4635969182239736408">"Heure"</string>
     <string name="quick_settings_user_label" msgid="5238995632130897840">"Moi"</string>
@@ -198,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Non connecté"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Aucun réseau"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi désactivé"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Display"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Affichage sans fil"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Caster l\'écran"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosité"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATIQUE"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Les notifications s’affichent ici"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Accédez-y à tout moment en faisant glisser le doigt vers le bas.\nRépétez l\'opération pour accéder aux commandes du système."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Faites glisser votre doigt sur le côté de l\'écran pour afficher la barre."</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Faites glisser votre doigt à partir d\'un côté de l\'écran pour afficher la barre système."</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Mode d\'inversion des couleurs"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mode d\'accentuation du contraste"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode de correction des couleurs"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RÉCENTS"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informations sur l\'application"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Le réseau peut\nêtre surveillé."</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Rechercher"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Faites glisser vers le haut pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Faites glisser vers la gauche pour <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notification masquée"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notifications masquées"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Appuyer pour afficher"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Ne pas déranger"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"+ %d autres"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Appuyer à nouveau pour ouvrir"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Faire glisser pour déverrouiller"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 862e2ef..e6d38ef 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -22,12 +22,12 @@
     <string name="app_label" msgid="7164937344850004466">"सिस्‍टम UI"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"साफ़ करें"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूची से निकालें"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"एप्‍लिकेशन जानकारी"</string>
-    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"कोई हाल ही के एप्लिकेशन नहीं"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"हाल ही के एप्लिकेशन खारिज करें"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ऐप्स जानकारी"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"कोई हाल ही के ऐप्स  नहीं"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"हाल ही के ऐप्स  खारिज करें"</string>
   <plurals name="status_bar_accessibility_recent_apps">
-    <item quantity="one" msgid="5854176083865845541">"1 हाल ही का एप्लिकेशन"</item>
-    <item quantity="other" msgid="1040784359794890744">"%d हाल ही के एप्लिकेशन"</item>
+    <item quantity="one" msgid="5854176083865845541">"1 हाल ही का ऐप्स"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d हाल ही के ऐप्स"</item>
   </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कोई सूचना नहीं"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ऑनगोइंग"</string>
@@ -40,18 +40,18 @@
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"सेटिंग"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
     <string name="status_bar_settings_airplane" msgid="4879879698500955300">"हवाई जहाज मोड"</string>
-    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्‍क्रीन स्‍वत: घुमाएं"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्‍क्रीन अपनेआप घुमाएं"</string>
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"म्यूट करें"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"स्वत:"</string>
     <string name="status_bar_settings_notifications" msgid="397146176280905137">"सूचनाएं"</string>
     <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth टीदर किया गया"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट पद्धति सेट करें"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"भौतिक कीबोर्ड"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"एप्लिकेशन <xliff:g id="APPLICATION">%1$s</xliff:g> को USB उपकरण तक पहुंचने दें?"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"एप्लिकेशन <xliff:g id="APPLICATION">%1$s</xliff:g> को USB सहायक उपकरण तक पहुंचने दें?"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"ऐप्स  <xliff:g id="APPLICATION">%1$s</xliff:g> को USB उपकरण तक पहुंचने दें?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ऐप्स  <xliff:g id="APPLICATION">%1$s</xliff:g> को USB सहायक उपकरण तक पहुंचने दें?"</string>
     <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"जब यह USB उपकरण कनेक्ट किया जाए, तब <xliff:g id="ACTIVITY">%1$s</xliff:g> को खोलें?"</string>
     <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"जब यह USB एसेसरी कनेक्ट की जाए, तब <xliff:g id="ACTIVITY">%1$s</xliff:g> को खोलें?"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"इस USB सहायक उपकरण के साथ कोई भी इंस्टॉल एप्लिकेशन काम नहीं करता. इस सहायक उपकरण के बारे में यहां अधिक जानें: <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"इस USB सहायक उपकरण के साथ कोई भी इंस्टॉल ऐप्स  काम नहीं करता. इस सहायक उपकरण के बारे में यहां अधिक जानें: <xliff:g id="URL">%1$s</xliff:g>"</string>
     <string name="title_usb_accessory" msgid="4966265263465181372">"USB सहायक साधन"</string>
     <string name="label_view" msgid="6304565553218192990">"देखें"</string>
     <string name="always_use_device" msgid="1450287437017315906">"इस USB उपकरण के लिए डिफ़ॉल्‍ट रूप से उपयोग करें"</string>
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"इस कंप्यूटर से हमेशा अनुमति दें"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"स्‍क्रीन भरने हेतु ज़ूम करें"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"स्‍क्रीन को भरने के लिए खींचें"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"संगतता ज़ूम"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"जब किसी छोटी स्‍क्रीन के लिए एप्‍लिकेशन को डिज़ाइन किया जाता है, तो ज़ूम नियंत्रण क्लॉक के पास दिखाई देगा."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"स्क्रीनशॉट सहेजा जा रहा है..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"स्क्रीनशॉट सहेजा जा रहा है..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"स्क्रीनशॉट सहेजा जा रहा है."</string>
@@ -73,11 +71,13 @@
     <string name="usb_preference_title" msgid="6551050377388882787">"USB फ़ाइल स्थानांतरण विकल्प"</string>
     <string name="use_mtp_button_title" msgid="4333504413563023626">"मीडिया प्लेयर के रूप में माउंट करें (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"कैमरे के रूप में माउंट करें (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac के लिए Android File Transfer एप्लि. इंस्टॉल करें"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac के लिए Android File Transfer ऐप्स इंस्टॉल करें"</string>
     <string name="accessibility_back" msgid="567011538994429120">"वापस जाएं"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"होम"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"मेनू"</string>
-    <string name="accessibility_recent" msgid="8571350598987952883">"हाल ही के एप्‍लिकेशन"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"हाल ही के ऐप्स"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"खोजें"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"कैमरा"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट पद्धति‍ बटन स्विच करें."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"संगतता ज़ूम बटन."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"छोटी से बड़ी स्‍क्रीन पर ज़ूम करें."</string>
@@ -146,13 +146,14 @@
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना खारिज की गई."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना शेड."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"त्वरित सेटिंग."</string>
-    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"हाल ही के एप्‍लिकेशन."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"हाल ही के ऐप्स."</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"उपयोगकर्ता <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"मोबाइल <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"बैटरी <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"हवाई जहाज़ मोड <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"स्थान <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"<xliff:g id="TIME">%s</xliff:g> के लिए अलार्म सेट किया गया."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G डेटा अक्षम"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G डेटा अक्षम"</string>
@@ -164,13 +165,14 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi कनेक्‍ट किया गया"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS को खोजा जा रहा है"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS द्वारा सेट किया गया स्‍थान"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"स्थान अनुरोध सक्रिय"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"सभी सूचनाएं साफ़ करें."</string>
-    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"एप्‍लिकेशन जानकारी"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"ऐप्स जानकारी"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्‍क्रीन स्‍वचालित रूप से घूमेगी."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"स्‍क्रीन लैंडस्केप अभिविन्यास में लॉक है."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"स्‍क्रीन पोर्ट्रेट अभिविन्‍यास में लॉक है."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
-    <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"मिठाई का डिब्बा"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"दिवास्वप्न"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"ईथरनेट"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"हवाई जहाज़ मोड"</string>
     <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"चार्ज हो रही है, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
@@ -178,9 +180,11 @@
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> उपकरण)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth बंद"</string>
-    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"चमक"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"स्क्रीन की रोशनी"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"स्वत: रोटेट"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"रोटेशन लॉक किया गया"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"पोर्ट्रेट पर लॉक किया गया"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"भू-दृश्य पर लॉक किया गया"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"इनपुट विधि"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"स्थान"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"स्थान बंद"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"कनेक्ट नहीं है"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"कोई नेटवर्क नहीं"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi बंद"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi प्रदर्शन"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"वायरलेस डिस्प्ले"</string>
-    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"चमक"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"स्क्रीन कास्ट करें"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"स्क्रीन की रोशनी"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"स्वत:"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"सूचनाएं यहां दिखाई देती हैं"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"नीचे स्वाइप करके उन तक कभी भी पहुंचें.\nसिस्टम नियंत्रणों के लिए पुन: नीचे स्वाइप करें."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"बार दिखाने के लिए स्क्रीन के किनारे को स्वाइप करें"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"सिस्टम बार दिखाने के लिए स्क्रीन के किनारे से स्वाइप करें"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"रंग व्युत्क्रम मोड"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"उन्नत कंट्रास्ट मोड"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"रंग सुधार मोड"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"हाल ही का"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"एप्‍लिकेशन जानकारी"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"खोज"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"नेटवर्क को\nमॉनीटर किया जा सकता है"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"खोजें"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए ऊपर स्‍लाइड करें."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> के लिए बाएं स्‍लाइड करें."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"सूचना छिपी हुई है"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d सूचनाएं छिपी हुई हैं"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"दिखाने के लिए स्पर्श करें"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"परेशान न करें"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d और"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"खोलने के लिए पुन: टैप करें"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"अनलॉक करने के लिए ऊपर स्वाइप करें"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 631d549..b777b8f 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Uvijek dopusti s ovog računala"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zumiraj i ispuni zaslon"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rastegni i ispuni zaslon"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilno zumiranje"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Kada je aplikacija dizajnirana za manji zaslon, kontrole zumiranja prikazuju se pored sata."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Spremanje snimke zaslona..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Spremanje snimke zaslona..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Spremanje snimke zaslona."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Početna"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Izbornik"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Nedavne aplikacije"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Pretraži"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparat"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za promjenu načina unosa."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb za kompatibilnost zumiranja."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zumiranje manjeg zaslona na veći."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterija – <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Način rada u zrakoplovu <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth – <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Lokacija <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Vrijeme alarma: <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Onemogućeni su 2G-3G podaci"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Onemogućeni su 4G podaci"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Traženje GPS-a"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokaciju utvrdio GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Zahtjevi za lokaciju aktivni su"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Brisanje svih obavijesti."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informacije o aplikaciji"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Zaslon će se automatski zakrenuti."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Zaslon je zaključan u pejzažnoj orijentaciji."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Zaslon je zaključan u portretnoj orijentaciji."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Izlog za slastice"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Sanjarenje"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Način rada u zrakoplovu"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Svjetlina"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatska rotacija"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotacija zaključana"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Blokirano u portretnom prikazu"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Blokirano u pejzažnom prikazu"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Način unosa"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Lokacija"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokacija je isključena"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nije povezano"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nema mreže"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi isključen"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi zaslon"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Bežični prikaz"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Emitiranje zaslona"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Svjetlina"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATSKI"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Obavijesti se prikazuju ovdje"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Pristupite im u bilo kojem trenutku tako da prstom trznete prema dolje. \nPonovo prstom trznite prema dolje za kontrole sustava."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Prijeđite prstom po rubu zaslona da bi se prikazala traka"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Prijeđite prstom od ruba zaslona da bi se prikazala traka sustava"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Način inverzije boje"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Način pojačanog kontrasta"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Način korekcije boje"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"NEDAVNO"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacije o aplikaciji"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraži"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Mreža se\nmožda prati"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Pretraživanje"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Kliznite prema gore za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Kliznite lijevo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Obavijest je skrivena"</item>
+    <item quantity="other" msgid="7388721375827338153">"Broj skrivenih obavijesti: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dodirnite za prikaz"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Ne ometaj"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Još %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Dodirnite opet za otvaranje"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Prijeđite prstom prema gore za otključavanje"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index c1c9136b..10732fe 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Mindig engedélyezze erről a számítógépről"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Nagyítás a kitöltéshez"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Nyújtás kitöltéshez"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitás -- nagyítás/kicsinyítés"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Ha egy alkalmazást kisebb képernyőre terveztek, akkor a nagyítás/kicsinyítés vezérlője az óra mellett jelenik meg."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Képernyőkép mentése..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Képernyőkép mentése..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Képernyőkép mentése."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Főoldal"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Legújabb alkalmazás"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Keresés"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Beviteli mód váltása gomb."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kompatibilitási zoom gomb."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kicsinyítsen a nagyobb képernyőhöz."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akkumulátor <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Repülős üzemmód <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Helyadatok: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Ébresztés időpontja: <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G adatforgalom letiltva"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G adatforgalom letiltva"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi csatlakoztatva"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS keresése"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"A GPS beállította a helyet"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Aktív helylekérések"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Minden értesítés törlése"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Alkalmazásinformáció"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"A képernyő automatikusan forogni fog."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"A képernyő zárolva van fekvő tájolásban."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"A képernyő zárolva van álló tájolásban."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Álmodozás"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Repülőgép üzemmód"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Fényerő"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatikus forgatás"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Forgatás zárolva"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Álló nézet zárolva"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Fekvő nézet zárolva"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Beviteli módszer"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Tartózkodási hely"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Hely kikapcsolva"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nincs kapcsolat"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nincs hálózat"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi kikapcsolva"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi kijelző"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Vezeték nélküli kijelző"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Képernyő tartalmának átküldése"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Fényerő"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"automatikus"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Az értesítések itt jelennek meg."</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Bármikor elérheti őket, ha lefelé húzza az ujját.\nHúzza le az ujját még egyszer a rendszerbeállítások eléréséhez."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Csúsztassa ujját a képernyő szélén a sáv megjelenítéséhez"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Csúsztassa ujját a képernyő szélétől a rendszersáv megjelenítéséhez"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Színinvertálás mód"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Kontrasztjavítás mód"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Színjavítás mód"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"LEGUTÓBBIAK"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Az alkalmazás adatai"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"keresés"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Lehet, hogy a\nhálózat felügyelt"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Keresés"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa felfelé."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"A(z) <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> művelethez csúsztassa balra."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Értesítés elrejtve"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d értesítés elrejtve"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"A megtekintéshez érintse meg"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Ne zavarjanak"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d további"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Koppintson rá ismét a megnyitáshoz"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Húzza felfelé az ujját a feloldáshoz"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-hy-land/strings.xml b/packages/SystemUI/res/values-hy-land/strings.xml
new file mode 100644
index 0000000..7c0535c
--- /dev/null
+++ b/packages/SystemUI/res/values-hy-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Էկրանն այժմ կողպված է հորիզոնական դիրքավորման մեջ:"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM-land/strings.xml b/packages/SystemUI/res/values-hy-rAM-land/strings.xml
new file mode 100644
index 0000000..7c0535c
--- /dev/null
+++ b/packages/SystemUI/res/values-hy-rAM-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Էկրանն այժմ կողպված է հորիզոնական դիրքավորման մեջ:"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..f1c4869
--- /dev/null
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"Համակարգային UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Մաքրել"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Հեռացնել ցանկից"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Տեղեկություններ ծրագրի մասին"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Թարմ հավելվածներ չկան"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Անտեսել վերջին ծրագրերը"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 նոր ծրագիր"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d նոր ծրագիր"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ծանուցումներ չկան"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ընթացիկ"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ծանուցումներ"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Միացրեք լիցքավորիչը"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"Մարտկոցը լիցքաթափվում է:"</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"մնում է <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB լիցքավորումը չի աջակցվում:\nՕգտվեք միայն գործող լիցքավորիչից:"</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Մարտկոցի օգտագործումը"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Կարգավորումներ"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Ինքնաթիռային ռեժիմ"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Ինքնապտտվող էկրան"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"Համրեցնել"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"Ինքնաշխատ"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Ծանուցումներ"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-ը կապված է"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Կարգավորել մուտքագրման եղանակները"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Ֆիզիկական ստեղնաշար"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Թույլատրե՞լ <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածի մուտքը USB սարք:"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Թույլատրե՞լ, որ <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածը մուտք գործի USB լրասարք:"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Բացե՞լ <xliff:g id="ACTIVITY">%1$s</xliff:g>-ը, երբ այս USB կրիչը կապակցված է:"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Բացե՞լ <xliff:g id="ACTIVITY">%1$s</xliff:g>-ը, երբ այս USB լրասարքը կապակցված է:"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Այս USB լրասարքի հետ ոչ մի հավելված չի աշխատում: Իմացեք ավելին այս լրասարքի մասին <xliff:g id="URL">%1$s</xliff:g>-ում"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB լրասարք"</string>
+    <string name="label_view" msgid="6304565553218192990">"Դիտել"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Օգտագործել լռելյայն այս USB սարքի համար"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Օգտագործել լռելյայն այս USB լրասարքի համար"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"Թույլատրե՞լ USB-ի կարգաբերումը:"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"Համակարգչի RSA-ի բանալի մատնահետքն է`\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Միշտ թույլատրել այս համակարգչից"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Խոշորացնել` էկրանը լցնելու համար"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Ձգել` էկրանը լցնելու համար"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Պահում է էկրանի հանույթը…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Պահում է էկրանի հանույթը..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Էկրանի հանույթը պահվում է:"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Էկրանի հանույթը լուսանկարվել է:"</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Հպեք ձեր էկրանի հանույթը տեսնելու համար:"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Չհաջողվեց լուսանկարել էկրանի հանույթը:"</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Չհաջողվեց պահել էկրանի հանույթը: Հնարավոր է` պահոցն օգտագործման մեջ է:"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB ֆայլերի փոխանցման ընտրանքներ"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Միացնել որպես մեդիա նվագարկիչ (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Միացնել որպես ֆոտոխցիկ (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Տեղադրել Android ֆայլերի փոխանցման հավելվածը Mac-ի համար"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Հետ"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Տուն"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Ցանկ"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Վերջին ծրագրերը"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Որոնել"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Ֆոտոխցիկ"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Միացնել մուտքագրման եղանակի կոճակը:"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Համատեղելիության խոշորացման կոճակը:"</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Դիտափոխել փոքրից ավելի մեծ էկրան:"</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-ը միացված է:"</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth-ն անջատված է:"</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"Մարտկոց չկա:"</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Մարտկոցի մեկ գիծ:"</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Մարտկոցի երկու գիծ:"</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Մարտկոցի երեք գիծ:"</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Մարտկոցը լիքն է:"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"Հեռախոս չկա:"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Հեռախոսի մեկ գիծ:"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Հեռախոսի երկու գիծ:"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Հեռախոսի երեք գիծ:"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Հեռախոսի ազդանշանը լիքն է:"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"Տվյալներ չկան:"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Տվյալների մեկ գիծ:"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Տվյալների երկու գիծ:"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Տվյալների երեք գիծ:"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Տվյալների ազդանշանը լրիվ է:"</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi-ը անջատված է:"</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"WiFi-ը անջատված է:"</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi-ի մեկ գիծ:"</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi-ի երկու գիծ:"</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi-ի երեք գիծ:"</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wifi-ի ազդանշանը լիքն է:"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX չկա:"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX-ի մեկ գիծ:"</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-ի երկու գիծ:"</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-ի երեք գիծ:"</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX-ի ազդանշանը լիքն է:"</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"Ազդանշան չկա:"</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Միացված չէ:"</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Զրո գիծ:"</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"Մեկ գիծ:"</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"Երկու գիծ:"</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Երեք գիծ:"</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Ազդանշանը լրիվ է:"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Միացված է:"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Անջատված է:"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Միացված է:"</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Ռոումինգ"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM չկա:"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-ը կապվում է:"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Ինքնաթիռային ռեժիմ"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Մարտկոցը <xliff:g id="NUMBER">%d</xliff:g> տոկոս է:"</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"Համակարգի կարգավորումներ:"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Ծանուցումներ:"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Մաքրել ծանուցումը:"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS-ը միացված է:"</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-ի ստացում:"</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Հեռամուտքագրիչը միացված է:"</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Զանգի թրթռոց:"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Զանգակը լռեցված է:"</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g>-ը անտեսված է:"</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Ծանուցումը անտեսվեց:"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Ծանուցումների վահանակ:"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Արագ կարգավորումներ:"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Վերջին հավելվածները:"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Օգտվող <xliff:g id="USER">%s</xliff:g>:"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>: <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Շարժական <xliff:g id="SIGNAL">%1$s</xliff:g>: <xliff:g id="TYPE">%2$s</xliff:g>: <xliff:g id="NETWORK">%3$s</xliff:g>:"</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Մարտկոցը <xliff:g id="STATE">%s</xliff:g> է:"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Ինքնաթիռային ռեժիմը <xliff:g id="STATE">%s</xliff:g> է:"</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth-ը <xliff:g id="STATE">%s</xliff:g> է:"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Տեղադրությունը՝ <xliff:g id="STATE">%s</xliff:g>:"</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Զարթուցիչը դրված է <xliff:g id="TIME">%s</xliff:g>-ին:"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G տվյալները անջատված են"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G տվյալները անջատված են"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Շարժական տվյալները անջատված են"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Տվյալները անջատված են"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Դուք հասել եք նշված տվյալների օգտագործման սահմանին:\n\n Եթե դուք կրկին ակտիվացնեք տվյալները, այն կարող է գանձվել օպերատորի կողմից:"</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Վերամիացնել տվյալները"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Ինտերնետ կապ չկա"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi-ը միացված է"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"Որոնում է GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Տեղադրությունը կարգավորվել է GPS-ի կողմից"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Տեղադրության հարցումներն ակտիվ են"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Մաքրել բոլոր ծանուցումները:"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Տեղեկություններ ծրագրի մասին"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Էկրանը ինքնուրույն կպտտվի:"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Էկրանը կողպված է հորիզոնական դիրքավորման մեջ:"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Էկրանը կողպված է ուղղաձիգ դիրքավորմամբ:"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Ցերեկային ռեժիմ"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Ինքնաթիռային ռեժիմ"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Լիցքավորում` <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Լիցքավորված է"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> սարք)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth-ն անջատված է"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Պայծառություն"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Ինքնապտտում"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Պտտումը կողպված է"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Միայն ուղղաձիգ"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Միայն հորիզոնական"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Մուտքագրման եղանակը"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Տեղադրություն"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Անջատել տեղադրությունը"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Մեդիա սարք"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Միայն արտակարգ իրավիճակների զանգեր"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Կարգավորումներ"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Ժամանակը"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Ես"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Միացված չէ"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ցանց չկա"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi-ը անջատված է"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Հեռակա էկրան"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Պայծառություն"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"Ինքնաշխատ"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Գունաշրջման ռեժիմ"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Ընդլայնված ցայտունության ռեժիմ"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Գույների կարգավորման ռեժիմ"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ՎԵՐՋԻՆՆԵՐԸ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Հավելվածի մասին"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"որոնել"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Ցանցը կարող է\nվերահսկվել"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Որոնել"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Սահեցրեք վերև <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Սահեցրեք ձախ` <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-ի համար:"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Ծանուցումը թաքցված է"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d ծանուցում թաքցված է"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Հպեք՝ ցուցադրելու համար"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Չխանգարել"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Եվս %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Կրկին հպեք՝ բացելու համար"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Սահեցրեք վերև` ապակողպելու համար"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index 6a702b9..f0b0713 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Selalu izinkan dari komputer ini"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Perbesar utk mengisi layar"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rentangkn utk mngisi layar"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Perbesar/perkecil untuk kompatibilitas"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Saat apl dirancang untuk layar yang lebih kecil, kontrol zoom akan tampil di dekat jam."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Menyimpan tangkapan layar..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Menyimpan tangkapan layar..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Tangkapan layar sedang disimpan."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Utama"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Apl terbaru"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Telusuri"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tombol beralih metode masukan."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tombol perbesar/perkecil kompatibilitas."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Perbesar dari layar kecil ke besar."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterai <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mode Pesawat <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Lokasi <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm disetel ke <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dinonaktifkan"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dinonaktifkan"</string>
@@ -164,28 +165,29 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tersambung"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Menelusuri GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi yang disetel oleh GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Permintaan lokasi aktif"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Menghapus semua pemberitahuan."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info aplikasi"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Layar akan diputar secara otomatis."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Layar dikunci dalam orientasi lanskap."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Layar dikunci dalam orientasi potret."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Etalase Hidangan Penutup"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Lamunan"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mode pesawat"</string>
     <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Mengisi baterai, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Ditagih"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Terisi"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Perangkat)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Mati"</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kecerahan"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotasi Otomatis"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotasi Dikunci"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Terkunci ke Potret"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Terkunci ke Lanskap"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Metode Masukan"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Lokasi"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokasi Mati"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Perangkat media"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Panggilan Darurat Saja"</string>
@@ -196,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Tidak Tersambung"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tidak Ada Jaringan"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Mati"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Tampilan Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Layar Nirkabel"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Layar Transmisi"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kecerahan"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OTOMATIS"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Pemberitahuan muncul di sini"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Akses kapan saja dengan menggesek ke bawah.\nGesek ke bawah sekali lagi untuk kontrol sistem."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Gesek tepi layar untuk membuka bilah"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Gesek dari bagian tepi layar untuk membuka bilah sistem"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Mode inversi warna"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mode kontras yang disempurnakan"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode koreksi warna"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"TERBARU"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Info Aplikasi"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"telusuri"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Jaringan bisa\ndiawasi"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Telusuri"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Geser ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Geser ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Pemberitahuan disembunyikan"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d pemberitahuan disembunyikan"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menampilkan"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Jangan ganggu"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d lainnya"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Ketuk lagi untuk membuka"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Gesek ke atas untuk membuka kunci"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index a350d38..6a57682 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Consenti sempre da questo computer"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom per riempire schermo"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Estendi per riemp. schermo"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom compatibilità"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Se un\'applicazione è stata progettata per uno schermo più piccolo, accanto all\'orologio viene visualizzato un controllo dello zoom."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Salvataggio screenshot..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Salvataggio screenshot..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot in corso di salvataggio."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Applicazioni recenti"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Cerca"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotocamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Pulsante per cambiare metodo di immissione."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Pulsante zoom compatibilità."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom inferiore per schermo più grande."</string>
@@ -116,8 +116,8 @@
     <string name="accessibility_two_bars" msgid="6437363648385206679">"Due barre."</string>
     <string name="accessibility_three_bars" msgid="2648241415119396648">"Tre barre."</string>
     <string name="accessibility_signal_full" msgid="9122922886519676839">"Massimo segnale."</string>
-    <string name="accessibility_desc_on" msgid="2385254693624345265">"Attivo."</string>
-    <string name="accessibility_desc_off" msgid="6475508157786853157">"Non attivo."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"ON"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"OFF"</string>
     <string name="accessibility_desc_connected" msgid="8366256693719499665">"Connesso."</string>
     <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
     <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteria: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modalità aereo: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Posizione: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Allarme impostato per: <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dati 2G-3G disattivati"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dati 4G disattivati"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi connesso"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Ricerca del GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Posizione stabilita dal GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Richieste di accesso alla posizione attive"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Cancella tutte le notifiche."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informazioni applicazione"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Lo schermo ruoterà automaticamente."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Lo schermo è bloccato in orientamento orizzontale."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Lo schermo è bloccato in orientamento verticale."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Vetrina di dolci"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modalità aereo"</string>
@@ -183,9 +185,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminosità"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotazione autom."</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotazione bloccata"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloccato in verticale"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloccato in orizzontale"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Metodo di immissione"</string>
-    <string name="quick_settings_location_label" msgid="5011327048748762257">"Posizione"</string>
-    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Posizione non attiva"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Geolocalizz."</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Geolocalizz. non attiva"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispositivo multimediale"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Solo chiamate di emergenza"</string>
@@ -196,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Non connesso"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nessuna rete"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi disattivato"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Display Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Visualizzazione wireless"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Trasmetti schermo"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminosità"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Le notifiche vengono visualizzate qui"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Puoi accedervi in qualsiasi momento scorrendo verso il basso.\nFai scorrere di nuovo verso il basso per visualizzare i controlli del sistema."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Fai scorrere il bordo dello schermo per visualizzare la barra"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Fai scorrere il dito dal bordo dello schermo per visualizzare la barra di sistema"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Modalità inversione colori"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Modalità di contrasto avanzata"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modalità di correzione del colore"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"MESSAGGI RECENTI"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informazioni sull\'applicazione"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"La rete potrebbe\nessere monitorata"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Ricerca"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Su per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"A sinistra per <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notifica nascosta"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notifiche nascoste"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tocca per visualizzare"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Non disturbare"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Altre %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tocca ancora per aprire"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Scorri verso l\'alto per sbloccare"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index b274dcc..3e87b76 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -22,12 +22,12 @@
     <string name="app_label" msgid="7164937344850004466">"ממשק משתמש של המערכת"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"נקה"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"הסר מהרשימה"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"פרטי יישום"</string>
-    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"אין יישומים אחרונים"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"סגור יישומים אחרונים"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"פרטי אפליקציה"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"אין אפליקציות אחרונות"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"סגור אפליקציות אחרונות"</string>
   <plurals name="status_bar_accessibility_recent_apps">
-    <item quantity="one" msgid="5854176083865845541">"יישום אחרון אחד"</item>
-    <item quantity="other" msgid="1040784359794890744">"%d היישומים האחרונים"</item>
+    <item quantity="one" msgid="5854176083865845541">"אפליקציה אחרונה אחת"</item>
+    <item quantity="other" msgid="1040784359794890744">"‏%d האפליקציות האחרונות"</item>
   </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"אין התראות"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"מתמשך"</string>
@@ -35,7 +35,7 @@
     <string name="battery_low_title" msgid="2783104807551211639">"חבר מטען"</string>
     <string name="battery_low_subtitle" msgid="1752040062087829196">"הסוללה נחלשת."</string>
     <string name="battery_low_percent_format" msgid="1077244949318261761">"נותרו <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
-    <string name="invalid_charger" msgid="4549105996740522523">"טעינה באמצעות USB אינה נתמכת.\nהשתמש אך ורק במטען שסופק."</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"‏טעינה באמצעות USB אינה נתמכת.\nהשתמש אך ורק במטען שסופק."</string>
     <string name="battery_low_why" msgid="7279169609518386372">"צריכת סוללה"</string>
     <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"הגדרות"</string>
     <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
@@ -44,25 +44,23 @@
     <string name="status_bar_settings_mute_label" msgid="554682549917429396">"השתק"</string>
     <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"אוטומטי"</string>
     <string name="status_bar_settings_notifications" msgid="397146176280905137">"התראות"</string>
-    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth קשור"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"‏Bluetooth קשור"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"הגדר שיטות קלט"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"מקלדת פיזית"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"לאפשר ליישום <xliff:g id="APPLICATION">%1$s</xliff:g> גישה להתקן ה-USB?"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"לאפשר ליישום <xliff:g id="APPLICATION">%1$s</xliff:g> גישה לאביזר ה-USB?"</string>
-    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר מכשיר USB זה מחובר?"</string>
-    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר אביזר USB זה מחובר?"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"אין יישומים מותקנים הפועלים עם אביזר ה-USB. למידע נוסף על אביזר זה בקר בכתובת <xliff:g id="URL">%1$s</xliff:g>"</string>
-    <string name="title_usb_accessory" msgid="4966265263465181372">"אביזר USB"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"‏לאפשר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה להתקן ה-USB?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"‏לאפשר לאפליקציה <xliff:g id="APPLICATION">%1$s</xliff:g> גישה לאביזר ה-USB?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"‏האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר מכשיר USB זה מחובר?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"‏האם לפתוח את <xliff:g id="ACTIVITY">%1$s</xliff:g> כאשר אביזר USB זה מחובר?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"‏אין אפליקציות מותקנות הפועלות עם אביזר ה-USB. למידע נוסף על אביזר זה בקר בכתובת <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"‏אביזר USB"</string>
     <string name="label_view" msgid="6304565553218192990">"הצג"</string>
-    <string name="always_use_device" msgid="1450287437017315906">"השתמש כברירת מחדל עבור מכשיר USB זה"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"השתמש כברירת מחדל עבור אביזר USB זה"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"האם לאפשר ניקוי באגים ב-USB?"</string>
-    <string name="usb_debugging_message" msgid="2220143855912376496">"טביעת האצבע של מפתח ה-RSA של המחשב היא:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"‏השתמש כברירת מחדל עבור מכשיר USB זה"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"‏השתמש כברירת מחדל עבור אביזר USB זה"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"‏האם לאפשר ניקוי באגים ב-USB?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"‏טביעת האצבע של מפתח ה-RSA של המחשב היא:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
     <string name="usb_debugging_always" msgid="303335496705863070">"אפשר תמיד ממחשב זה"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"הגדל תצוגה כדי למלא את המסך"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"מתח כדי למלא את המסך"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"שינוי מרחק מתצוגה לצורך תאימות"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"כאשר יישום מיועד למסך קטן יותר, פקד של מרחק מתצוגה יופיע ליד השעון."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"שומר צילום מסך..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"שומר צילום מסך..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"מתבצעת שמירה של צילום המסך."</string>
@@ -70,19 +68,21 @@
     <string name="screenshot_saved_text" msgid="1152839647677558815">"גע כדי להציג את צילום המסך שלך"</string>
     <string name="screenshot_failed_title" msgid="705781116746922771">"לא ניתן לבצע צילום מסך."</string>
     <string name="screenshot_failed_text" msgid="8134011269572415402">"לא ניתן לשמור את צילום המסך. ייתכן שנעשה שימוש באמצעי אחסון."</string>
-    <string name="usb_preference_title" msgid="6551050377388882787">"אפשרויות העברת קבצים ב-USB"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"טען כנגן מדיה (MTP)"</string>
-    <string name="use_ptp_button_title" msgid="7517127540301625751">"טען כמצלמה (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"התקן את יישום העברת הקבצים של Android עבור Mac"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"‏אפשרויות העברת קבצים ב-USB"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"‏טען כנגן מדיה (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"‏טען כמצלמה (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"‏התקן את אפליקציית העברת הקבצים של Android עבור Mac"</string>
     <string name="accessibility_back" msgid="567011538994429120">"הקודם"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"בית"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"תפריט"</string>
-    <string name="accessibility_recent" msgid="8571350598987952883">"יישומים אחרונים"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"אפליקציות אחרונות"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"חפש"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"מצלמה"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"לחצן החלפת שיטת קלט."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"לחצן מרחק מתצוגה של תאימות."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"שנה מרחק מתצוגה של מסך קטן לגדול יותר."</string>
-    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth מחובר."</string>
-    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth מנותק."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"‏Bluetooth מחובר."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"‏Bluetooth מנותק."</string>
     <string name="accessibility_no_battery" msgid="358343022352820946">"אין סוללה."</string>
     <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"פס אחד של סוללה."</string>
     <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"שני פסים של סוללה."</string>
@@ -98,17 +98,17 @@
     <string name="accessibility_data_two_bars" msgid="6166018492360432091">"שני פסים של נתונים."</string>
     <string name="accessibility_data_three_bars" msgid="9167670452395038520">"שלושה פסים של נתונים."</string>
     <string name="accessibility_data_signal_full" msgid="2708384608124519369">"אות הנתונים מלא."</string>
-    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wi-Fi כבוי."</string>
-    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wi-Fi מנותק."</string>
-    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"פס אחד של Wi-Fi."</string>
-    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"שני פסים של Wi-Fi."</string>
-    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"שלושה פסים של Wi-Fi."</string>
-    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"אות ה-Wi-Fi מלא."</string>
-    <string name="accessibility_no_wimax" msgid="4329180129727630368">"ללא WiMAX."</string>
-    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"פס אחד של WiMAX."</string>
-    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"שני פסים של WiMAX."</string>
-    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"שלושה פסים של WiMAX."</string>
-    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"אות ה-WiMAX מלא."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"‏Wi-Fi כבוי."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"‏Wi-Fi מנותק."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"‏פס אחד של Wi-Fi."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"‏שני פסים של Wi-Fi."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"‏שלושה פסים של Wi-Fi."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"‏אות ה-Wi-Fi מלא."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"‏ללא WiMAX."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"‏פס אחד של WiMAX."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"‏שני פסים של WiMAX."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"‏שלושה פסים של WiMAX."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"‏אות ה-WiMAX מלא."</string>
     <string name="accessibility_no_signal" msgid="7064645320782585167">"אין אות."</string>
     <string name="accessibility_not_connected" msgid="6395326276213402883">"לא מחובר."</string>
     <string name="accessibility_zero_bars" msgid="3806060224467027887">"אפס פסים."</string>
@@ -130,57 +130,61 @@
     <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"נדידה"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"קצה"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
-    <string name="accessibility_no_sim" msgid="8274017118472455155">"אין כרטיס SIM."</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"שיתוף אינטרנט בין ניידים של Bluetooth"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"‏אין כרטיס SIM."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"‏שיתוף אינטרנט דרך Bluetooth"</string>
     <string name="accessibility_airplane_mode" msgid="834748999790763092">"מצב טיסה"</string>
     <string name="accessibility_battery_level" msgid="7451474187113371965">"<xliff:g id="NUMBER">%d</xliff:g> אחוזים של סוללה."</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"הגדרות מערכת"</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"התראות"</string>
     <string name="accessibility_remove_notification" msgid="3603099514902182350">"נקה התראה"</string>
-    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS מופעל."</string>
-    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"השגת GPS."</string>
-    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter מופעל"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"‏GPS מופעל."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"‏השגת GPS."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"‏TeleTypewriter מופעל"</string>
     <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"צלצול ורטט."</string>
     <string name="accessibility_ringer_silent" msgid="9061243307939135383">"צלצול שקט."</string>
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> נדחה."</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"הודעה נדחתה."</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"תריס התראות."</string>
     <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"הגדרות מהירות."</string>
-    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"יישומים אחרונים"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"אפליקציות אחרונות"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"משתמש <xliff:g id="USER">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>‏. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"נייד <xliff:g id="SIGNAL">%1$s</xliff:g>.‏ <xliff:g id="TYPE">%2$s</xliff:g>.‏ <xliff:g id="NETWORK">%3$s</xliff:g>.‏"</string>
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"סוללה <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"מצב טיסה <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth ‏<xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"‏Bluetooth ‏<xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"המיקום <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ההתראה נקבעה ל-<xliff:g id="TIME">%s</xliff:g>."</string>
-    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"נתוני 2G-3G מושבתים"</string>
-    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"נתוני 4G מושבתים"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"‏נתוני 2G-3G מושבתים"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"‏נתוני 4G מושבתים"</string>
     <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"נתונים לנייד מושבתים"</string>
     <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"הנתונים מושבתים"</string>
     <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"הגעת לגבול המוגדר של שימוש בנתונים.\n\nאם תפעיל מחדש נתונים, ייתכן שתחויב על ידי הספק שלך."</string>
     <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"הפעל מחדש את הנתונים"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"אין חיבור לאינטרנט"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi מחובר"</string>
-    <string name="gps_notification_searching_text" msgid="8574247005642736060">"מחפש GPS"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"מיקום מוגדר על ידי GPS"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"‏Wi-Fi מחובר"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"‏מחפש GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"‏מיקום מוגדר על ידי GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"בקשות מיקום פעילות"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"נקה את כל ההתראות."</string>
-    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"פרטי יישום"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"פרטי אפליקציה"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"המסך יסתובב באופן אוטומטי."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"המסך נעול כעת לרוחב."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"המסך נעול כעת לאורך."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"מזנון קינוחים"</string>
     <string name="start_dreams" msgid="7219575858348719790">"חלום בהקיץ"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"מצב טיסה"</string>
     <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"טוען (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
     <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"מלאה"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
-    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth ‏(<xliff:g id="NUMBER">%d</xliff:g> מכשירים)"</string>
-    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth מופסק"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"‏Bluetooth ‏(<xliff:g id="NUMBER">%d</xliff:g> מכשירים)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"‏Bluetooth מופסק"</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"בהירות"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"סיבוב אוטומטי"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"סיבוב נעול"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"נעול במצב הצגה לאורך"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"נעול במצב הצגה לרוחב"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"שיטת קלט"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"מיקום"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"מיקום כבוי"</string>
@@ -193,13 +197,29 @@
     <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"לא מחובר"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"אין רשת"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi כבוי"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"תצוגת Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"תצוגת Wi-Fi"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"‏Wi-Fi כבוי"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"העבר מסך"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"בהירות"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"אוטומטי"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"הודעות מופיעות כאן"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"גש אליהם בכל עת על ידי החלקה למטה.\nהחלק למטה שוב למעבר למרכז הבקרה של המערכת."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"החלק מקצה המסך כדי להציג את הסרגל"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"החלק מקצה המסך כדי להציג את סרגל המערכת"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"מצב היפוך צבעים"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"מצב ניגודיות מוגברת"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"מצב תיקון צבע"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"אחרונים"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"מידע על האפליקציה"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"חפש"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ייתכן שהרשת\nמנוטרת"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"חיפוש"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"הסט למעלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"הסט שמאלה כדי להציג <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"ההודעה הוסתרה"</item>
+    <item quantity="other" msgid="7388721375827338153">"‏%d הודעות הוסתרו"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"גע כדי להציג"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"נא לא להפריע"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"‏עוד %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"הקש שוב כדי לפתוח"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"החלק מעלה כדי לבטל את הנעילה"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index 7392ae9..1edb630 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"このパソコンからのUSBデバッグを常に許可する"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"画面サイズに合わせて拡大"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"画面サイズに合わせて拡大"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"互換ズーム"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"より小型の画面向けのアプリの場合は、ズームコントロールが時計のそばに表示されます。"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"スクリーンショットを保存中..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"スクリーンショットを保存しています..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"スクリーンショットを保存しています。"</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"ホーム"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"メニュー"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"最近使ったアプリ"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"検索"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"カメラ"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"入力方法の切り替えボタン。"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"互換ズームボタン。"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"小さい画面から大きい画面に拡大。"</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"電池<xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"機内モード<xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"現在地: <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"アラームは<xliff:g id="TIME">%s</xliff:g>に設定されています。"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G～3Gデータが無効になりました"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4Gデータが無効になりました"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi接続済み"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSで検索中"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPSにより現在地が設定されました"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"現在地リクエストがアクティブ"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"通知をすべて消去。"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"アプリ情報"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"画面は自動的に回転します。"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"画面は横向きにロックされています。"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"画面は縦向きにロックされています。"</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"デザートケース"</string>
     <string name="start_dreams" msgid="7219575858348719790">"スクリーンセーバー"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"イーサネット"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"機内モード"</string>
@@ -183,6 +185,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"画面の明るさ"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自動回転"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"画面の向きをロック"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"縦向きにロック済み"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"横向きにロック済み"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"入力方法"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"現在地"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"現在地OFF"</string>
@@ -196,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"接続されていません"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ネットワークなし"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi OFF"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fiディスプレイ"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"ワイヤレスディスプレイ"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"画面のキャスト"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"画面の明るさ"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自動"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"ここに通知が表示されます"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"下にスワイプすると、いつでも通知を表示できます。\nシステムを管理するにはもう一度下にスワイプしてください。"</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"バーを表示するには、画面の端からスワイプします"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"システムバーを表示するには、画面の端からスワイプします"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"色反転モード"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"拡張コントラストモード"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"色補正モード"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"最近"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"アプリ情報"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"検索"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ネットワークが監視される\n場合があります"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"検索します"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"上にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"左にスライドして<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>を行います。"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"通知が非表示"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d件の通知が非表示"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"表示するにはタップします"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"通知を非表示"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"他%d件"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"開くにはもう一度タップしてください"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"ロック解除するには上にスワイプしてください"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ka-land/strings.xml b/packages/SystemUI/res/values-ka-land/strings.xml
new file mode 100644
index 0000000..3f20938
--- /dev/null
+++ b/packages/SystemUI/res/values-ka-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"ეკრანი ამჟამად დაბლოკილია თარაზულ ორიენტაციაში"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE-land/strings.xml b/packages/SystemUI/res/values-ka-rGE-land/strings.xml
new file mode 100644
index 0000000..3f20938
--- /dev/null
+++ b/packages/SystemUI/res/values-ka-rGE-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"ეკრანი ამჟამად დაბლოკილია თარაზულ ორიენტაციაში"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..9d4344a
--- /dev/null
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"სისტემის UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"გასუფთავება"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"სიიდან ამოშლა"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"აპის შესახებ"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"ბოლოს გამოყენებული აპების სია ცარიელია"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ბოლო აპების გაუქმება"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 ბოლო აპი"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d ბოლო აპი"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"შეტყობინებები არ არის."</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"მიმდინარე"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"შეტყობინებები"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"შეაერთეთ დამტენი."</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"ბატარეა ჯდება."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"დარჩენილია <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB-ით დატენვა არ არის მხარდაჭერილი.\nგამოიყენეთ მხოლოდ ელექტრო-დამტენი."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"ელემენტის გამოყენება"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"პარამეტრები"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"თვითმფრინავის რეჟიმი"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"ავტოროტაციის ეკრანი"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"დადუმება"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ავტო."</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"შეტყობინებები"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth მიერთებულია."</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"შეყვანის მეთოდების დაყენება"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ფიზიკური კლავიატურა"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"გსურთ, მისცეთ აპლიკაციას „<xliff:g id="APPLICATION">%1$s</xliff:g>“ USB მეხსიერებასთან წვდომის უფლება?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"გსურთ, მისცეთ აპლიკაციას „<xliff:g id="APPLICATION">%1$s</xliff:g>“ USB აქსესუართან წვდომის უფლება?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"გსურთ <xliff:g id="ACTIVITY">%1$s</xliff:g> , როდესაც ეს USB მოწყობილობა შეერთებულია?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"გსურთ <xliff:g id="ACTIVITY">%1$s</xliff:g> , როდესაც ეს USB მოწყობილობა შეერთებულია?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"არცერთი დაყენებული აპი არ მუშაობს ამ USB აქსესუართან. შეიტყვეთ მეტი ამ აქსესუარის შესახებ <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB აქსესუარი"</string>
+    <string name="label_view" msgid="6304565553218192990">"ნახვა"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"ამ USB მოწყობილობის ნაგულისხმევად გამოყენება"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"ავტომატურად გამოიყენე ამ USB აქსესუარისთვის."</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"გააქტიურდეს USB გამართვა?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"კომპიუტერის RSA გასაღების თითის ანაბეჭდია:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"ყოველთვის დართე ნება ამ კომპიუტერიდან."</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"მასშტაბი შეცვალეთ ეკრანის შესავსებად."</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"გაწიეთ ეკრანის შესავსებად."</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"სკრინშოტის შენახვა…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"ეკრანის სურათის შენახვა…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"ეკრანის სურათი შენახულია."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"სკრინშოტი გადაღებულია."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"შეეხეთ ეკრანის სურათის სანახავად."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"ვერ მოხერხდა ეკრანის ანაბეჭდის გადაღება."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"ეკრანის სურათი ვერ შეინახა. შესაძლოა, მეხსიერება უკვე დაკავებულია."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB ფაილის ტრანსფერის პარამეტრები"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"მედია-საკრავად (MTP) ჩართვა"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"მიუერთეთ როგორც კამერა (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Android File Transfer აპის დაყენება Mac-თვის"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"უკან"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"საწყისი"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"მენიუ"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"ბოლოს გამოყენებული აპები"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"ძიება"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"კამერა"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"შეყვანის მეთოდის გადართვის ღილაკი."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"თავსებადი მასშტაბირების ღილაკი."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"შეცვალეთ პატარა ეკრანი უფრო დიდით."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth დაკავშირებულია."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth კავშირი გაწყვეტილია."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"ბატარეა დამჯდარია."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"ბატარეია ერთ ზოლზეა."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"ელემენტი ორ ზოლზე."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"ელემენტი სამ ზოლზე."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"ელემენტი სავსეა."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"ტელეფონი არ არის."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"ტელეფონის სიგნალი ერთ ზოლზეა."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"ტელეფონის სიგნალი ორ ზოლზეა."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"ტელეფონის სიგნალი სამ ზოლზეა."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"ტელეფონის სიგნალი სრულია."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"მონაცემები არ არის."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"თარიღი ზოლზე."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"მონაცემების გადაცემა: ორი ზოლი"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"მონაცემების გადაცემა: სამი ზოლი"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"მონაცემთა გადაცემის საიმედო სიგნალი."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi გამორთულია."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi არ არის დაკავშირებული."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi სიგნალი ერთ ზოლზეა."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi სიგნალი ორ ზოლზეა."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wifi სამი ზოლი."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wifi სიგნალი სრულია."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX არ არის."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX ერთი სვეტი."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX-ის ორი ზოლი."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX-ის სამი ზოლი."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX სიგნალი სრულია."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"სიგნალი არ არის."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"არ არის დაკავშირებული."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"სიგნალი ნულ ზოლზეა."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"ერთი ზოლი."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"ორი სვეტი."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"სამი ზოლი."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"სრული სიგნალი."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"ჩართული"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"გამორთულია."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"დაკავშირებულია."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5გბ"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"როუმინგი"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM არ არის."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth-ის ჩართვა"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"თვითმფრინავის რეჟიმი"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"ბატარეა: <xliff:g id="NUMBER">%d</xliff:g> პროცენტი."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"სისტემის პარამეტრები."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"შეტყობინებები"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"შეტყობინებების გასუფთავება."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS გააქტიურდა."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-ის დადგენა."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"ტელეტაიპი ჩართულია."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"ვიბრაციის რეჟიმი."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"უხმო რეჟიმი."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ამოშლილია სიიდან."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"შეტყობინება წაიშალა."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"შეტყობინებების ფარდა"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"სწრაფი პარამეტრები"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"ბოლო აპები."</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"მომხმარებელი: <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"მობილურის <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ელემენტი: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"თვითმფრინავის რეჟიმი <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"მდებარეობა <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"მაღვიძარა დაყენებულია: <xliff:g id="TIME">%s</xliff:g>"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G ინტერნეტი გაითიშა."</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G მონაცემები გათიშულია"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"მობილური ინტერნეტი გაითიშა."</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"ინტერნეტი გაითიშა."</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"თქვენ მიაღწიეთ ინტერნეტის გამოყენების განსაზღვრულ ლიმიტს.\n\nთუ გააქტიურებთ ინტერნეტს, შესაძლოა მობილური ოპერატორისთვის დამატებითი თანხის გადახდა მოგიწიოთ."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"მონაცემების ხელახლა ჩართვა"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ინტერნეტ კავშირი არ არის"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi დაკავშირებულია"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS-ის ძებნა"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS-ით დადგენილი მდებარეობა"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"მდებარეობის მოთხოვნები აქტიურია"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"ყველა შეტყობინების წაშლა"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"აპის შესახებ"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ეკრანი შეტრიალდება ავტომატურად."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ეკრანი დაბლოკილია თარაზულ ორიენტაციაში"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ეკრანი დაბლოკილია პორტრეტის ორიენტაციაში."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"სადესერტო ყუთი"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"ეთერნეტი"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"თვითმფრინავის რეჟიმი"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"დამუხტვა, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"დამუხტულია"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> მოწყობილობა)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth გამორთულია"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"სიკაშკაშე"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ავტო მობრუნება"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"როტაციის ჩაკეტვა"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"პორტრეტზე ჩაკეტილი"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ლანდშაფტზე ჩაკეტილი"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"შეყვანის მეთოდი"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"მდებარეობა"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"მდებარეობა გამორთულია"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"მედია მოწყობილობა"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"მხოლოდ გადაუდებელი დახმარების ზარებისთვის"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"პარამეტრები"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"დრო"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"მე"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"არ არის დაკავშირებული."</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ქსელი არ არის"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi გამორთულია"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast Screen"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"განათება"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ავტომატურად"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"ფერთა ინვერსიის რეჟიმი"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"გაუმჯობესებული კონტრასტის რეჟიმი"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"ფერთა კორექციის რეჟიმი"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ბოლო დროის"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"აპლიკაციის შესახებ"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"ძიება"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"შესაძლოა ქსელზე\nმონიტორინგი ხორციელდებოდეს"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ძიება"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"გაასრიალეთ ზემოთ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"გაასრიალეთ მარცხნივ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-თვის."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"შეტყობინება დამალულია"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d შეტყობინება დამალულია"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"შეეხეთ საჩვენებლად"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"არ შემაწუხოთ"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d სხვა"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"შეეხეთ ისევ გასახსნელად"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"გაასრიალეთ ზევით განსაბლოკად"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-km-land/strings.xml b/packages/SystemUI/res/values-km-land/strings.xml
new file mode 100644
index 0000000..f148cc3
--- /dev/null
+++ b/packages/SystemUI/res/values-km-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"ឥឡូវ​អេក្រង់​​ជាប់​សោ​ក្នុង​ទិស​ផ្ដេក។"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-km-rKH-land/strings.xml b/packages/SystemUI/res/values-km-rKH-land/strings.xml
new file mode 100644
index 0000000..f148cc3
--- /dev/null
+++ b/packages/SystemUI/res/values-km-rKH-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"ឥឡូវ​អេក្រង់​​ជាប់​សោ​ក្នុង​ទិស​ផ្ដេក។"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..bb2d3b9
--- /dev/null
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"ចំណុច​ប្រទាក់​ប្រព័ន្ធ"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"សម្អាត"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"យក​ចេញ​ពី​បញ្ជី"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ព័ត៌មាន​កម្មវិធី"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"គ្មាន​កម្មវិធី​ថ្មីៗ"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"បដិសេធ​កម្មវិធី​ថ្មីៗ"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"កម្មវិធី​ថ្មី ១"</item>
+    <item quantity="other" msgid="1040784359794890744">"កម្មវិធី​ថ្មីៗ %d"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"គ្មាន​ការ​ជូន​ដំណឹង"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"បន្ត"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"ការ​ជូន​ដំណឹង"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"ភ្ជាប់​ឧបករណ៍​បញ្ចូល​ថ្ម"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"ជិត​អស់​ថ្ម​ហើយ។"</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"នៅ​សល់ <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"មិន​គាំទ្រ​ការ​បញ្ចូល​តាម​យូអេសប៊ី។\nប្រើ​តែ​ឧបករណ៍​បញ្ចូល​ថ្ម​ដែល​បាន​ផ្ដល់។"</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"ការ​ប្រើ​ថ្ម"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"ការ​កំណត់"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"វ៉ាយហ្វាយ"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"ពេល​ជិះ​យន្តហោះ"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"បង្វិល​អេក្រង់​ស្វ័យ​ប្រវត្តិ"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"ស្ងាត់"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ស្វ័យប្រវត្តិ"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"ការ​ជូន​ដំណឹង"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"បាន​ភ្ជាប់​ប៊្លូធូស"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"រៀបចំ​វិធីសាស្ត្រ​បញ្ចូល"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ក្ដារ​ចុច​ពិតប្រាកដ"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"ឲ្យ​កម្មវិធី <xliff:g id="APPLICATION">%1$s</xliff:g> ចូល​ដំណើរការ​ឧបករណ៍​យូអេសប៊ី?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ឲ្យ​កម្មវិធី <xliff:g id="APPLICATION">%1$s</xliff:g> ចូល​ដំណើរការ​ឧបករណ៍​យូអេសប៊ី?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"បើក <xliff:g id="ACTIVITY">%1$s</xliff:g> ពេល​បាន​ភ្ជាប់​ឧបករណ៍​យូអេសប៊ី​នេះ?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"បើក <xliff:g id="ACTIVITY">%1$s</xliff:g> ពេល​បាន​ភ្ជាប់​ឧបករណ៍​យូអេសប៊ី?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"គ្មាន​កម្មវិធី​បាន​ដំឡើង​ដំណើរការ​ជា​មួយ​ឧបករណ៍​យូអេសប៊ី។ ស្វែងយល់​បន្ថែម​អំពី​ឧបករណ៍​នេះ​នៅ <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"ឧបករណ៍​យូអេសប៊ី"</string>
+    <string name="label_view" msgid="6304565553218192990">"មើល"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"ប្រើ​តាម​លំនាំដើម​សម្រាប់​ឧបករណ៍​យូអេសប៊ី​នេះ"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"ប្រើ​តាម​លំនាំដើម​សម្រាប់​ខ្សែ​យូអេសប៊ី​នេះ"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"អនុញ្ញាត​ការ​កែ​កំហុស​យូអេសប៊ី?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"ស្នាម​ម្រាម​ដៃ​ RSA របស់​កុំព្យូទ័រ​គឺ៖ \n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"អនុញ្ញាត​ជា​និច្ច​សម្រាប់​កុំព្យូទ័រ​នេះ"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"ពង្រីក​​ដើម្បី​ឲ្យ​ពេញ​អេក្រង់"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"ទាញ​ដើម្បី​ឲ្យ​ពេញ​អេក្រង់"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"កំពុង​រក្សាទុក​រូបថត​អេក្រង់…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"កំពុង​រក្សាទុក​រូបថត​អេក្រង់..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"រូបថត​អេក្រង់​កំពុង​ត្រូវ​បាន​រក្សាទុក។"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"បាន​ចាប់​យក​រូបថត​អេក្រង់។"</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"ប៉ះ ​ដើម្បី​មើល​រូបថត​អេក្រង់​របស់​អ្នក​។"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"មិន​អាច​ចាប់​យក​រូប​ថត​អេក្រង់​។"</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"មិន​អាច​រក្សាទុក​រូបថត​អេក្រង់​។ ឧបករណ៍​ផ្ទុក​អាច​កំពុង​ប្រើ​​។"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"ជម្រើស​ផ្ទេរ​ឯកសារ​តាម​យូអេសប៊ី"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"ភ្ជាប់​ជា​កម្មវិធី​ចាក់​មេឌៀ (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"ភ្ជាប់​ជា​ម៉ាស៊ីន​ថត (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"ដំឡើង​កម្មវិធី​ផ្ទេរ​ឯកសារ Android សម្រាប់ Mac"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"ថយក្រោយ"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"គេហ​ទំព័រ"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"ម៉ឺនុយ"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"កម្មវិធី​ថ្មីៗ"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"ស្វែងរក"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"ម៉ាស៊ីន​ថត"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ប្ដូរ​ប៊ូតុង​វិធីសាស្ត្រ​បញ្ចូល។"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ប៊ូតុង​ពង្រីក​ត្រូវ​គ្នា។"</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ពង្រីក/បង្រួម​​អេក្រង់​ពី​​ទៅធំ"</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"បាន​តភ្ជាប់​ប៊្លូធូស។"</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"បាន​ផ្ដាច់​​ប៊្លូធូស។"</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"គ្មាន​ថ្ម។"</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"ថ្ម​មួយ​កាំ។"</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"ថ្ម​ពីរ​កាំ។"</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"ថ្ម​ទាំង​បី​​កាំ​។"</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"ថ្ម​ពេញ​ហើយ។"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"គ្មាន​ទូរស័ព្ទ។"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"សេវា​ទូរស័ព្ទ​មួយ​កាំ។"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"សេវា​ទូរស័ព្ទ​ពីរ​កាំ។"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"សេវា​ទូរស័ព្ទ​បី​កាំ​។"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"សេវា​ទូរស័ព្ទ​ពេញ។"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"គ្មាន​ទិន្នន័យ​។"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"ទិន្នន័យ​មួយ​​កាំ។"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"ទិន្នន័យ​ពីរ​​កាំ។"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"ទិន្នន័យ​បី​កាំ។"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"សញ្ញា​ទិន្នន័យ​ពេញ។"</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"បិទ​វ៉ាយហ្វាយ។"</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"បាន​ផ្ដាច់​វ៉ាយហ្វាយ។"</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"សញ្ញា​វ៉ាយហ្វាយ​មួយ​កាំ។"</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"សេវា​វ៉ាយហ្វាយ​ពីរ​កាំ។"</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"វ៉ាយហ្វាយ​បី​កាំ។"</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"សញ្ញា​វ៉ាយហ្វាយ​ពេញ។"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"គ្មាន WiMAX ។"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX មួយ​កាំ។"</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX ពីរ​កាំ។"</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX បី​កាំ។"</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"សញ្ញា WiMAX ពេញ។"</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"គ្មាន​សញ្ញា។"</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"មិន​បាន​តភ្ជាប់​។"</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"សូន្យ​កាំ។"</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"មួយ​កាំ។"</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"ពីរ​កាំ។"</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"បី​កាំ។"</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"សញ្ញា​ពេញ​​។"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"បើក។"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"បិទ"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"បាន​តភ្ជាប់។"</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"រ៉ូ​មីង"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"វ៉ាយហ្វាយ"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"គ្មាន​ស៊ីម​កាត។"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ការ​ភ្ជាប់​ប៊្លូធូស។"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"របៀប​​ពេលជិះ​យន្តហោះ"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"ថ្ម <xliff:g id="NUMBER">%d</xliff:g> ភាគរយ។"</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"ការ​កំណត់​ប្រព័ន្ធ​។"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"ការ​ជូន​ដំណឹង។"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"សម្អាត​ការ​ជូន​ដំណឹង។"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"បាន​បើក GPS ។"</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"ទទួល​​ GPS ។"</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"បាន​បើក​ម៉ាស៊ីន​អង្គុលីលេខ"</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"កម្មវិធី​រោទ៍​ញ័រ។"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"កម្មវិធី​រោទ៍​ស្ងាត់។"</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> បដិសេធ។"</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"បាន​បដិសេធ​ការ​ជូនដំណឹង"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ពណ៌​ការ​ជូន​ដំណឹង"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ការ​កំណត់​រហ័ស។"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"កម្មវិធី​ថ្មី​ៗ។"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"អ្នក​ប្រើ <xliff:g id="USER">%s</xliff:g> ។"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"ចល័ត <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ថ្ម <xliff:g id="STATE">%s</xliff:g> ។"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"របៀបពេល​ជិះ​យន្ត​ហោះ <xliff:g id="STATE">%s</xliff:g> ។"</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"ប៊្លូធូស <xliff:g id="STATE">%s</xliff:g> ។"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"ទីតាំង <xliff:g id="STATE">%s</xliff:g> ។"</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"កំណត់​សំឡេង​រោទ៍​សម្រាប់ <xliff:g id="TIME">%s</xliff:g> ។"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"បាន​បិទ​ទិន្នន័យ 2G-3G"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"បាន​បិទ​ទិន្នន័យ 4G"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"បាន​បិទ​ទិន្នន័យ​ចល័ត"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"បាន​បិទ​ទិន្នន័យ"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"អ្នក​បាន​ដល់​ដែន​កំណត់​ប្រើ​ទិន្នន័យ​បាន​បញ្ជាក់។\n\nបើ​អ្នក​បើក​ទិន្នន័យ​ឡើងវិញ អ្នក​អាច​ត្រូវ​បាន​ប្ដូរ​ដោយ​ប្រតិបត្តិ​ករ។"</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"បើក​​ទិន្នន័យ​ឡើងវិញ"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"គ្មាន​ការ​តភ្ជាប់​អ៊ីនធឺណិត"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"បាន​ភ្ជាប់​វ៉ាយហ្វាយ"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"ស្វែងរក GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"ទីតាំង​​​​​កំណត់​ដោយ GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"សំណើ​ទីតាំង​សកម្ម"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"សម្អាត​ការ​ជូន​ដំណឹង​ទាំងអស់។"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"ព័ត៌មាន​កម្មវិធី"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"នឹង​បង្វិល​អេក្រង់​ស្វ័យ​ប្រវត្តិ។"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"អេក្រង់​ជាប់​សោ​ក្នុង​ទិស​ផ្ដេក។"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"បា​ន​ចាក់​សោ​អេក្រង់​​ក្នុង​ទិស​បញ្ឈរ។"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"ករណី Dessert"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"ស្រមើ​ស្រមៃ"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"អ៊ីសឺរណិត"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"របៀបពេល​​ជិះ​យន្តហោះ"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"បញ្ចូល​ថ្ម <xliff:g id="NUMBER">%d</xliff:g> <xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"បាន​បញ្ចូល​ពេញ"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ប៊្លូធូស"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ប៊្លូធូស (ឧបករណ៍ <xliff:g id="NUMBER">%d</xliff:g>)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"​ប៊្លូធូស​បាន​បិទ"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"ពន្លឺ"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"បង្វិល​​ស្វ័យ​ប្រវត្តិ"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"បាន​ចាក់​សោ​ការ​បង្វិល"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ចាក់​សោ​​បញ្ឈរ"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ចាក់​សោ​​​ផ្ដេក"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"វិធីសាស្ត្រ​បញ្ចូល"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"ទី​តាំង"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"ទីតាំង​បាន​បិទ"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"ឧបករណ៍​មេឌៀ"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"សម្រាប់​តែ​ការ​ហៅ​ពេល​អាសន្ន"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"ការ​កំណត់"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"ពេលវេលា"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"ខ្ញុំ"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"វ៉ាយហ្វាយ"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"មិន​បាន​តភ្ជាប់"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"គ្មាន​បណ្ដាញ"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"វ៉ាយហ្វាយ​បានបិទ"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ចាត់​ថ្នាក់​អេក្រង់"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ពន្លឺ"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ស្វ័យប្រវត្តិ"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"របៀប​​បញ្ច្រាស​ពណ៌"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"របៀប​កម្រិត​ពណ៌​ប្រ​សើ​រ​ឡើង"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"របៀប​កែ​ពណ៌"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ថ្មីៗ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"ព័ត៌មាន​កម្មវិធី"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"ស្វែងរក"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"បណ្ដាញ​អាច​\nត្រូវ​បាន​ត្រួតពិនិត្យ"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ស្វែងរក"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"រុញ​ឡើង​លើ​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"រុញ​ទៅ​ឆ្វេង​ដើម្បី <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ។"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"បាន​លាក់​ការ​ជូនដំណឹង"</item>
+    <item quantity="other" msgid="7388721375827338153">"បាន​លាក់ការ​ជូនដំណឹង %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"ប៉ះ​ដើម្បី​បង្ហាញ"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"កុំ​រំខាន"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d ទៀត"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"ប៉ះ​ម្ដង​ទៀត ដើម្បី​បើក"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"អូស​ឡើង​លើ ដើម្បី​ដោះ​សោ"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 1437601..83ffa9f 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"이 컴퓨터에서 항상 허용"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"전체화면 모드로 확대"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"전체화면 모드로 확대"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"호환성 확대/축소"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"앱이 작은 화면에 맞도록 설계된 경우 시계 옆에 확대/축소 컨트롤이 표시됩니다."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"캡쳐화면 저장 중..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"캡쳐화면 저장 중..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"캡쳐화면을 저장하는 중입니다."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"홈"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"메뉴"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"최근에 사용한 앱"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"검색"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"카메라"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"입력 방법 버튼을 전환합니다."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"호환성 확대/축소 버튼입니다."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"작은 화면을 큰 화면으로 확대합니다."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"배터리 <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"비행기 모드가 <xliff:g id="STATE">%s</xliff:g> 상태입니다."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"블루투스 <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"위치 <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"알람이 <xliff:g id="TIME">%s</xliff:g>(으)로 설정되었습니다."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G 데이터 사용중지됨"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G 데이터 사용중지됨"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 연결됨"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS 검색 중"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS에서 위치 설정"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"위치 요청 있음"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"모든 알림 지우기"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"앱 정보"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"화면이 자동으로 회전됩니다."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"화면이 가로 방향으로 잠겨 있습니다."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"화면이 세로 방향으로 잠겨 있습니다."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"디저트 케이스"</string>
     <string name="start_dreams" msgid="7219575858348719790">"화면 보호기"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"이더넷"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"비행기 모드"</string>
@@ -181,11 +183,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"밝기"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"자동 회전"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"회전 잠금"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"세로 모드로 고정됨"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"가로 모드로 고정됨"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"입력 방법"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"위치"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"위치 사용 중지"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"미디어 기기"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"긴급 통화만 허용"</string>
@@ -196,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"연결되어 있지 않음"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"네트워크가 연결되지 않음"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 꺼짐"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi 디스플레이"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"무선 디스플레이"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"화면 전송"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"밝기"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"자동"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"알림이 여기에 표시됨"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"아래로 스와이프하여 언제든 액세스하세요.\n한 번 더 아래로 스와이프하면 시스템 관리로 이동합니다."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"화면 가장자리에서 스와이프하여 표시줄 표시"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"화면 가장자리에서 스와이프하여 시스템 표시줄 표시"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"색상 반전 모드"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"향상된 대비 모드"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"색상 보정 모드"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"최근"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"애플리케이션 정보"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"검색"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"네트워크가\n모니터링될 수 있음"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"검색"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 위로 슬라이드"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>하려면 왼쪽으로 슬라이드"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"알림 숨김"</item>
+    <item quantity="other" msgid="7388721375827338153">"알림 %d개 숨김"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"표시하려면 터치"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"알림 일시중지"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d개 더보기"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"다시 탭하여 열기"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"위로 스와이프하여 잠금 해제"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-land/arrays.xml b/packages/SystemUI/res/values-land/arrays.xml
index 74a6c81..c32ce12 100644
--- a/packages/SystemUI/res/values-land/arrays.xml
+++ b/packages/SystemUI/res/values-land/arrays.xml
@@ -22,21 +22,21 @@
     <array name="navbar_search_targets">
         <item>@null</item>
         <item>@null</item>
-        <item>@*android:drawable/ic_action_assist_generic</item>
+        <item>@drawable/ic_action_assist_generic</item>
         <item>@null</item>
     </array>
 
     <array name="navbar_search_target_descriptions">
         <item>@null</item>
         <item>@null</item>
-        <item>@*android:string/description_target_search</item>
+        <item>@string/description_target_search</item>
         <item>@null</item>
     </array>
 
     <array name="navbar_search_direction_descriptions">
         <item>@null</item>
         <item>@null</item>
-        <item>@*android:string/description_direction_left</item>
+        <item>@string/description_direction_left</item>
         <item>@null</item>
     </array>
 
diff --git a/packages/SystemUI/res/values-land/config.xml b/packages/SystemUI/res/values-land/config.xml
index 6476d88..7223773 100644
--- a/packages/SystemUI/res/values-land/config.xml
+++ b/packages/SystemUI/res/values-land/config.xml
@@ -27,6 +27,9 @@
     <!-- The number of columns in the QuickSettings -->
     <integer name="quick_settings_num_columns">6</integer>
 
+    <!-- The maximum number of rows in the QuickSettings -->
+    <integer name="quick_settings_max_rows">2</integer>
+
     <!-- The number of columns that the top level tiles span in the QuickSettings -->
     <integer name="quick_settings_user_time_settings_tile_span">2</integer>
 </resources>
diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml
index ab71371..76e7784 100644
--- a/packages/SystemUI/res/values-land/dimens.xml
+++ b/packages/SystemUI/res/values-land/dimens.xml
@@ -40,4 +40,7 @@
 
     <!-- The fixed height of each tile -->
     <dimen name="quick_settings_cell_height">100dp</dimen>
+
+    <!-- Width of the zen mode interstitial dialog. -->
+    <dimen name="zen_mode_dialog_width">384dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values-lo-land/strings.xml b/packages/SystemUI/res/values-lo-land/strings.xml
new file mode 100644
index 0000000..a838a15
--- /dev/null
+++ b/packages/SystemUI/res/values-lo-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"ໜ້າຈໍຕອນນີ້ຖືກລັອກໄວ້ໃນແບບລວງນອນ."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA-land/strings.xml b/packages/SystemUI/res/values-lo-rLA-land/strings.xml
new file mode 100644
index 0000000..a838a15
--- /dev/null
+++ b/packages/SystemUI/res/values-lo-rLA-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"ໜ້າຈໍຕອນນີ້ຖືກລັອກໄວ້ໃນແບບລວງນອນ."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..9a3d483
--- /dev/null
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"ສ່ວນຕິດຕໍ່ຜູ່ໃຊ້ຂອງລະບົບ"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"ລຶບ"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ເອົາອອກຈາກລາຍການ"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ຂໍ້ມູນແອັບຯ"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"ບໍ່ມີແອັບຯທີ່ຫາກໍໃຊ້"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ປິດແອັບຯຫຼ້າສຸດທີ່ໃຊ້"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 ແອັບຯຫຼ້າສຸດ"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d ແອັບຯຫຼ້າສຸດ"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"ບໍ່ມີການແຈ້ງເຕືອນ"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"ດຳເນີນຢູ່"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"ການແຈ້ງເຕືອນ"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"ເຊື່ອມຕໍ່ສາຍສາກ"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"ແບັດເຕີຣີເຫຼືອໜ້ອຍແລ້ວ."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"ຍັງເຫຼືອອີກ <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"ບໍ່ຮອງຮັບການສາກໄຟດ້ວຍ USB.\nຕ້ອງໃຊ້ສະເພາະເຄື່ອງສາກທີ່ແຖມມານຳເທົ່ານັ້ນ."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"ການນຳໃຊ້ແບັດເຕີຣີ"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"ການຕັ້ງຄ່າ"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"ໂໝດເທິງຍົນ"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"ໝຸນໜ້າຈໍອັດຕະໂນມັດ"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"ປິດສຽງ"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ອັດຕະໂນມັດ"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"ການແຈ້ງເຕືອນ"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"ປ່ອຍສັນຍານຜ່ານ Bluetooth ແລ້ວ"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ຕັ້ງຄ່າວິທີການປ້ອນຂໍ້ມູນ"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ແປ້ນພິມແທ້"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"ອະນຸຍາດໃຫ້ແອັບຯ <xliff:g id="APPLICATION">%1$s</xliff:g> ເຂົ້າເຖິງອຸປະກອນ USB?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ອະນຸຍາດໃຫ້ແອັບຯ <xliff:g id="APPLICATION">%1$s</xliff:g> ເຂົ້າເຖິງອຸປະກອນພ່ວງ USB?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ເປີດ <xliff:g id="ACTIVITY">%1$s</xliff:g> ເມື່ອເຊື່ອມຕໍ່ກັບອຸປະກອນ USB ນີ້ຫຼືບໍ່?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"ເປີດ <xliff:g id="ACTIVITY">%1$s</xliff:g> ເມື່ອມີການເຊື່ອມຕໍ່ກັບອຸປະກອນເສີມ USB ນີ້ຫຼືບໍ່?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ບໍ່ມີແອັບຯໃດທີ່ຕິດຕັ້ງໄປແລ້ວ ສາມາດເຮັດວຽກຮ່ວມກັບອຸປະກອນເສີມ USB ນີ້ໄດ້. ສຶກສາເພີ່ມເຕີມກ່ຽວກັບອຸປະກອນເສີມນີ້ທີ່ <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"ອຸປະກອນເສີມ USB"</string>
+    <string name="label_view" msgid="6304565553218192990">"ເບິ່ງ"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"ໃຊ້ເປັນຄ່າເລີ່ມຕົ້ນສຳລັບອຸປະກອນ USB ນີ້"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"ໃຊ້ຄ່າເລີ່ມຕົ້ນສຳລັບອຸປະກອນເສີມ USB ນີ້."</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"ອະນຸຍາດການດີບັ໊ກຜ່ານ USB?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"ລາຍນິ້ມື RSA ຂອງຄອມພິວເຕີແມ່ນ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"ອະນຸຍາດຈາກຄອມພິວເຕີນີ້ຕະຫຼອດ"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"ຊູມໃຫ້ເຕັມໜ້າຈໍ"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"ປັບໃຫ້ເຕັມໜ້າຈໍ"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"ກຳລັງບັນທຶກຮູບໜ້າຈໍ"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"ກຳລັງບັນທຶກພາບໜ້າຈໍ..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"ກຳລັງບັນທຶກພາບໜ້າຈໍ."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"ຖ່າຍຮູບໜ້າຈໍແລ້ວ"</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"ແຕະເພື່ອເບິ່ງພາບໜ້າຈໍຂອງທ່ານ."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"ບໍ່ສາມາດຖ່າຍຮູບໜ້າຈໍໄດ້"</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"ບໍ່ສາມາດບັນທຶກພາບໜ້າຈໍໄດ້. ບ່ອນຈັດເກັບອາດກຳລັງຖືກນຳໃຊ້ຢູ່."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB ໂຕເລືອກການຍ້າຍໄຟລ໌"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"ເຊື່ອມຕໍ່ເປັນ media player (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"ເຊື່ອມຕໍ່ເປັນກ້ອງຖ່າຍຮູບ (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"ຕິດຕັ້ງແອັບຯ Android File Transfer ສຳລັບ Mac"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"ກັບຄືນ"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"ໜ້າທຳອິດ"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"ເມນູ"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"ແອັບຯຫຼ້າສຸດ"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"ຊອກຫາ"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"ກ້ອງ"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ປຸ່ມສະລັບຮູບແບບການປ້ອນຂໍ້ມູນ."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ປຸ່ມຊູມທີ່ໃຊ້ຮ່ວມກັນໄດ້."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ຊູມຈໍນ້ອຍໄປເປັນຈໍຂະຫນາດໃຫຍ່."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ເຊື່ອມຕໍ່ Bluetooth ແລ້ວ."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth ຖືກຕັດການເຊື່ອມຕໍ່ແລ້ວ."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"ແບັດເຕີຣີໝົດ."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"ແບັດເຕີຣີນຶ່ງຂີດ."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"ແບັດເຕີຣີສອງຂີດ."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"ແບັດເຕີຣີສາມຂີດ."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"ແບັດເຕີຣີເຕັມ."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"ບໍ່ມີໂທລະສັບ."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"ສັນຍານນຶ່ງຂີດ."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"ສັນຍານສອງຂີດ."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"ສັນຍານສາມຂີດ."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"ສັນຍານເຕັມ."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"ບໍ່ມີຂໍ້ມູນ."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"ຂໍ້ມູນນຶ່ງຂີດ."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"ຂໍ້ມູນສອງຂີດ."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"ຂໍ້ມູນສາມຂີດ."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"ສັນ​ຍານຂໍ້ມູນ​ເຕັມ."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"WiFi ປິດຢູ່."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"ຕັດການເຊື່ອມຕໍ່ Wi-Fi ແລ້ວ."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"ສັນຍານ Wi-Fi ນຶ່ງຂີດ."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"ສັນຍານ Wi-Fi ສອງຂີດ."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wifi ສາມຂີດ."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"ສັນຍານ Wi-Fi ເຕັມ"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"ບໍ່ມີ WiMAX."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX ນຶ່ງຂີດ."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX ສອງຂີດ."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX ສາມຂີດ."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"ສັນ​ຍານ WiMAX ເຕັມ."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"ບໍ່ມີສັນຍານ."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"ບໍ່ໄດ້ເຊື່ອມຕໍ່."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"ບໍ່ມີຈັກຂີດ."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"ນຶ່ງຂີດ."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"ສອງຂີດ."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"ສາມຂີດ."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"ສັນຍານເຕັມ."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"ເປີດ."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"ປິດ."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"ເຊື່ອມ​ຕໍ່ແລ້ວ."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"ໂຣມມິງ"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"ບໍ່ມີຊິມ."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ການປ່ອຍສັນຍານ Bluetooth."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"ໂໝດໃນຍົນ."</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"ແບັດເຕີຣີ <xliff:g id="NUMBER">%d</xliff:g> ເປີເຊັນ."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"ການຕັ້ງຄ່າລະບົບ."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"ການແຈ້ງເຕືອນ."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"ລຶບລ້າງການແຈ້ງເຕືອນ."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS ເປີດແລ້ວ."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"ກຳລັງຊອກຫາ GPS."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ຖືກເປີດຢູ່."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"ສັ່ນເຕືອນພ້ອມສຽງເອີ້ນເຂົ້າ."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"ປິດສຽງ."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"ປິດ <xliff:g id="APP">%s</xliff:g> ແລ້ວ."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"ປິດການແຈ້ງເຕືອນແລ້ວ."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"ໜ້າຈໍແຈ້ງເຕືອນ."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ການຕັ້ງຄ່າດ່ວນ."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"ແອັບຯທີ່ຫາກໍໃຊ້."</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ຜູ່ໃຊ້ <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"ມືຖື <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ແບັດເຕີຣີ <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"ໂໝດໃນຍົນ <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"ສະ​ຖານ​ທີ່ <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ຕັ້ງໂມງປຸກ <xliff:g id="TIME">%s</xliff:g> ແລ້ວ."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"ອິນເຕີເນັດ 2G​, 3G ຖືກປິດແລ້ວ"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"ການນຳໃຊ້ຂໍ້ມູນ 4G ຖືກປິດແລ້ວ"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"ອິນເຕີເນັດໃນມືຖືຖືກປິດການນຳໃຊ້ແລ້ວ"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"ອິນເຕີເນັດຖືກປິດການນຳໃຊ້ແລ້ວ"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"ທ່ານໄດ້ໃຊ້ຂໍ້ມູນຈົນຮອດຈຳນວນທີ່ຈຳກັດໄວ້ແລ້ວ.\n\nຫາກທ່ານເປີດນຳໃຊ້ຂໍ້ມູນຄືນອີກຄັ້ງ, ທ່ານອາດຖືກຮຽກເກັບເງິນໂດຍຜູ່ໃຫ້ບໍລິການໄດ້."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"ເປີດນຳໃຊ້ຂໍ້ມູນຄືນໃໝ່"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ເຊື່ອມ​ຕໍ່ Wi-​-Fi ແລ້ວ"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"ກຳລັງຊອກຫາ GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"ສະຖານທີ່ກຳນົດໂດຍ GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"ການຮ້ອງຂໍສະຖານທີ່ທີ່ເຮັດວຽກຢູ່"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"ລຶບການແຈ້ງເຕືອນທັງໝົດ."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"ຂໍ້ມູນແອັບຯ"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"ໜ້າຈໍຈະໝຸນໂດຍອັດຕະໂນມັດ."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ໜ້າຈໍຖືກລັອກໃນລວງນອນ."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ໜ້າຈໍຖືກລັອກຢູ່ໃນໂໝດແນວຕັ້ງ."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"ກ່ອງຂອງຫວານ"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"ໂໝດຢູ່ໃນຍົນ"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"ກຳລັງສາກ, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"ສາກເຕັມແລ້ວ"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> ອຸປະກອນ)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth ປິດ"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"ຄວາມສະຫວ່າງ"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ໝຸນໜ້າຈໍອັດຕະໂນມັດ"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"ລັອກການປ່ຽນລວງ"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ລັອກເປັນຮູບລວງຕັ້ງ"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ລັອກເປັນຮູບລວງນອນ"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"ວິທີການປ້ອນຂໍ້ມູນ"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"ສະຖານທີ່"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"ຂໍ້ມູນສະຖານທີ່ປິດຢູ່"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"ອຸປະກອນສື່"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"ໂທສຸກເສີນເທົ່ານັ້ນ"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"ການຕັ້ງຄ່າ"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"ເວລາ"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"ຂ້ອຍ"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi​-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ບໍ່ໄດ້ເຊື່ອມຕໍ່"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ບໍ່ມີເຄືອຂ່າຍ"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi​-Fi ປິດ"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ດຶງໜ້າຈໍ"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ຄວາມແຈ້ງ"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ອັດຕະໂນມັດ"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"ໂໝດສະລັບສີ"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"ໂໝດຄວາມຕ່າງແສງ"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"ໂໝດການແກ້ໄຂສີ"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ບໍ່​ດົນ​ມາ​ນີ້"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"​ຂໍ້​ມູນ​ແອັບ​ພ​ລິ​ເຄ​ຊັນ"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"ຊອກຫາ"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ເຄືອຄ່າຍອາດ\nຖືກຕິດຕາມ"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ຊອກຫາ"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"ເລື່ອນຂຶ້ນເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"ເລື່ອນໄປທາງຊ້າຍເພື່ອ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"ເຊື່ອງ​ການ​ແຈ້ງ​ເຕ​ືອນ​ແລ້ວ"</item>
+    <item quantity="other" msgid="7388721375827338153">"ເຊື່ອງ %d ການ​ແຈ້ງ​ເຕືອນ​ແລ້ວ"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"​ແຕະ​ເພື່ອ​ສະ​ແດງ"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"ຫ້າມລົບກວນ"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d ເພີ່ມ​ເຕີມ"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"ແຕະ​ອີກ​ຄັ້ງ​ເພື່ອ​ເປີດ"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"ເລື່ອນ​ຂຶ້ນ​ເພື່ອ​ປົດ​ລັອກ"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index bf8662a..379cfce 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Visada leisti iš šio kompiuterio"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Keisti mast., kad atit. ekr."</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ištempti, kad atit. ekr."</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Suderinamumo mastelio keitimas"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Kai programa bus pritaikyta mažesniam ekranui, mastelio keitimo valdiklis bus parodytas šalia laikrodžio."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Išsaugoma ekrano kopija..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Išsaugoma ekrano kopija..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Išsaugoma ekrano kopija."</string>
@@ -71,13 +69,15 @@
     <string name="screenshot_failed_title" msgid="705781116746922771">"Nepavyko užfiksuoti ekrano kopijos."</string>
     <string name="screenshot_failed_text" msgid="8134011269572415402">"Nepavyko išsaugoti ekrano kopijos. Gali būti naudojama atmintis."</string>
     <string name="usb_preference_title" msgid="6551050377388882787">"USB failo perdavimo parinktys"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"Įmontuoti kaip medijos grotuvą (MTP)"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Įmontuoti kaip medijos leistuvę (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"Įmontuoti kaip fotoaparatą (PTP)"</string>
     <string name="installer_cd_button_title" msgid="2312667578562201583">"Įdiegti „Mac“ skirtą „Android“ perkėl. priem. pr."</string>
     <string name="accessibility_back" msgid="567011538994429120">"Atgal"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"Pagrindinis"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Meniu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Naujausios programos"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Ieškoti"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparatas"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Perjungti įvesties metodo mygtuką."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Suderinamumo priartinimo mygtukas."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Padidinti ekraną."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akumuliatorius <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lėktuvo režimas <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"„Bluetooth“ <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Vietovė – <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Signalas nustatytas <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G duomenys neleidžiami"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G duomenys neleidžiami"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Prisij. prie „Wi-Fi“"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Ieškoma GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS nustatyta vieta"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Vietovės užklausos aktyvios"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Išvalyti visus pranešimus."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Programos informacija"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekranas bus sukamas automatiškai."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Užrakintas ekranas yra horizontalios orientacijos."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Užrakintas ekranas yra vertikalios orientacijos."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Desertų dėklas"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Svajonė"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Eternetas"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lėktuvo režimas"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Skaistis"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatiškai sukti"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Sukimas užrakintas"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Užrakinta stačia padėtis"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Užrakinta gulsčia padėtis"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Įvesties metodas"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Vietovė"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Vietovė išjungta"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Neprisijungta"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tinklo nėra"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"„Wi-Fi“ išjungta"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"„Wi-Fi“ pateiktis"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Belaidis rodymas"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Perduoti ekraną"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Skaistis"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATINIS"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Pranešimai rodomi čia"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Perbraukę žemyn bet kuriuo metu pasieksite pranešimus.\nJei norite naudoti sistemos valdiklius, perbraukite žemyn dar kartą."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Jei norite, kad būtų rodoma juosta, perbraukite ekrano krašte"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Jei norite, kad būtų rodoma sistemos juosta, perbraukite iš ekrano krašto"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Spalvų inversijos režimas"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Patobulinto kontrasto režimas"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Spalvų taisymo režimas"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"PASTARIEJI"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Programos informacija"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"paieška"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Tinklas gali\nbūti stebimas"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Paieška"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Slyskite aukštyn link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Slyskite į kairę link <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Pranešimas paslėptas"</item>
+    <item quantity="other" msgid="7388721375827338153">"Paslėpta pranešimų: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Palieskite, kad būtų rodoma"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Netrukdyti"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Dar %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Palieskite dar kartą, kad atidarytumėte"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Perbraukite aukštyn, kad atrakintumėte"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index b96a786..ca07095 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Vienmēr atļaut no šī datora"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Tālumm., lai aizp. ekr."</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Stiepiet, lai aizp. ekr."</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Saderības tālummaiņa"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Ja lietotne ir paredzēta mazākam ekrānam, blakus pulkstenim tiks parādīta tālummaiņas vadīkla."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Saglabā ekrānuzņēmumu…"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Notiek ekrānuzņēmuma saglabāšana..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Notiek ekrānuzņēmuma saglabāšana."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Sākums"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Izvēlne"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Nesen izmantotās lietotnes"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Meklēt"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ievades metodes maiņas poga."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Saderības tālummaiņas poga."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Veikt tālummaiņu no mazāka ekrāna uz lielāku."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Akumulatora statuss: <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Lidojuma režīma statuss: <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth statuss: <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Atrašanās vieta: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Signāls ir iestatīts uz: <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G dati atspējoti"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G dati atspējoti"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Izv. sav. ar Wi-Fi"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Notiek GPS meklēšana..."</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS iestatītā atrašanās vieta"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Aktīvi atrašanās vietu pieprasījumi"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Notīrīt visus paziņojumus"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informācija par lietotni"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekrāns tiks pagriezts automātiski."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekrāns tagad ir bloķēts ainavas orientācijā."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekrāns tagad ir bloķēts portreta orientācijā."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Saldo ēdienu stends"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Ekrānsaudzētājs"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Tīkls Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Lidojuma režīms"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Spilgtums"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automātiska pagriešana"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Pagriešana bloķēta"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Fiksēts portreta režīmā"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Fiksēts ainavas režīmā"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Ievades metode"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Atrašanās vieta"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Atrašanās vieta izslēgta"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nav izveidots savienojums"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nav tīkla"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ir izslēgts"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi displejs"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Bezvadu attēlošana"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Apraides ekrāns"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Spilgtums"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMĀTISKI"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Šeit tiek rādīti paziņojumi"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Piekļūstiet tiem jebkurā laikā, velkot uz leju.\nVēlreiz velciet, lai tiktu parādītas sistēmas vadīklas."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Velciet no ekrāna malas, lai piekļūtu joslai."</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Velciet no ekrāna malas, lai piekļūtu sistēmas joslai."</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Krāsu inversijas režīms"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Uzlabota kontrasta režīms"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Krāsu korekcijas režīms"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"JAUNĀKIE"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informācija par lietojumprogrammu"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"Meklēt"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Tīkls var\ntikt uzraudzīts"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Meklēt"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Velciet uz augšu, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Velciet pa kreisi, lai veiktu šādu darbību: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Paziņojums paslēpts"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d paziņojumi paslēpti"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Pieskarieties, lai rādītu"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Netraucēt"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"vēl %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Pieskarieties vēlreiz, lai atvērtu"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Velciet uz augšu, lai atbloķētu"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-mn-land/strings.xml b/packages/SystemUI/res/values-mn-land/strings.xml
new file mode 100644
index 0000000..ec4616f
--- /dev/null
+++ b/packages/SystemUI/res/values-mn-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Дэлгэц хэвтээ чиглэлд түгжигдсэн."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN-land/strings.xml b/packages/SystemUI/res/values-mn-rMN-land/strings.xml
new file mode 100644
index 0000000..ec4616f
--- /dev/null
+++ b/packages/SystemUI/res/values-mn-rMN-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Дэлгэц хэвтээ чиглэлд түгжигдсэн."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..4545301
--- /dev/null
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"Систем UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Цэвэрлэх"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Жагсаалтаас устгах"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Апп мэдээлэл"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Сүүлийн апп хоосон"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Сүүлийн апп-уудыг хаах"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 сүүлийн апп"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d сүүлийн апп"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Мэдэгдэл байхгүй"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Гарсан"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Мэдэгдэл"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Цэнэглэгчийг холбоно уу"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"Батерей дуусаж байна."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> үлдсэн"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB цэнэглэлт дэмжигдэхгүй байна.\nЗөвхөн нийлүүлэгдсэн цэнэглэгчийг ашиглана уу."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Батерей ашиглах"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Тохиргоо"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Нислэгийн горим"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Дэлгэцийг автоматаар эргүүлэх"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"ХААХ"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"АВТОМАТ"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Мэдэгдэл"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Блютүүтыг модем болгож байна"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Оруулах аргыг тохируулах"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Бодит гар"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> апп-г USB төхөөрөмжид хандахыг зөвшөөрөх үү?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> апп-г USB төхөөрөмжид хандахыг зөвшөөрөх үү?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Энэ USB төхөөрөмж холбогдох үед <xliff:g id="ACTIVITY">%1$s</xliff:g>-г нээх үү?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Энэ USB төхөөрөмж холбогдох үед <xliff:g id="ACTIVITY">%1$s</xliff:g>-г нээх үү?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Энэ USB хэрэгсэл дээр суулгасан апп ажиллаагүй байна. Энэ хэрэгслийн талаар <xliff:g id="URL">%1$s</xliff:g>-с дэлгэрэнгүй үзнэ үү."</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB төхөөрөмж"</string>
+    <string name="label_view" msgid="6304565553218192990">"Үзэх"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Энэ USB төхөөрөмжийг үндсэн болгон ашиглах"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Энэ USB төхөөрөмжийг үндсэн болгон ашиглах"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"USB дебаг хийхийг зөвшөөрөх үү?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"Компьютерийн RSA түлхүүрийн хурууны хээ :\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Энэ компьютерээс орохыг байнга зөвшөөрөх"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Дэлгэц дүүргэх бол өсгөнө үү"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Дэлгэц дүүргэх бол татна уу"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Дэлгэцийн агшинг хадгалж байна…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Дэлгэцийн агшинг хадгалж байна…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Дэлгэцийн агшин хадгалагдав."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Дэлгэцийн агшинг авсан."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Дэлгэцийн агшныг харах бол хүрнэ үү."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Дэлгэцийн агшинг авч чадсангүй."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Дэлгэцийн агшинг хадгалж чадсангүй. Сан ашиглагдаж байгаа бололтой."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB файл шилжүүлэх сонголт"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Медиа тоглуулагч(MTP) болгон залгах"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Камер болгон(PTP) залгах"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Мас-д зориулсан  Андройд Файл Шилжүүлэх апп-г суулгана уу"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Буцах"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Гэрийн"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Цэс"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Сүүлийн апп"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Хайх"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Камер"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Оруулах аргыг сэлгэх товч."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Тохиромжтой өсгөх товч."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Жижгээс том дэлгэцрүү өсгөх."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Блютүүт холбогдсон."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Блютүүт тасрав."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"Батерей байхгүй."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Батерей нэг баганатай."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Батерей хоёр баганатай."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Батерей гурван баганатай."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Батерей дүүрэн."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"Утас байхгүй."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Утас нэг баганатай."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Утас хоёр баганатай."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Утас гурван баганатай."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Утасны дохио дүүрэн."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"Дата байхгүй."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Дата нэг баганатай."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Дата хоёр баганатай."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Дата гурван баганатай."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Дата дохио дүүрэн."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi унтарсан."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi салав."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi нэг баганатай."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi хоёр баганатай."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"Wifi гурван баганатай."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wifi дохио дүүрэн."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX байхгүй."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX нэг багана."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX хоёр баганатай."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX гурван баганатай."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX дохио дүүрэн."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"Дохио байхгүй."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Холбогдоогүй."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Тэг баганатай."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"Нэг баганатай."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"Хоёр багана."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Гурван баганатай."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Дохио дүүрэн."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Идэвхижсэн."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Унтраах"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Холбогдсон."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Рүүминг"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM байхгүй."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Блютүүт модем болж байна."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Нислэгийн горим"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Батерей <xliff:g id="NUMBER">%d</xliff:g> хувьтай."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"Системийн тохиргоо."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Мэдэгдэл."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Мэдэгдлийг цэвэрлэх."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS идэвхтэй."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS хайж байна."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter идэвхтэй болов."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Хонхны чичиргээ."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Хонхыг хаах."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> байхгүй."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Мэдэгдэл хаагдсан."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Мэдэгдлийн хураангуй самбар"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Шуурхай тохиргоо."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Сүүлийн апп"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Хэрэглэгч <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Мобайл <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батерей <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Нислэгийн горим <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Блютүүт <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Байршил <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Сэрүүлгийг <xliff:g id="TIME">%s</xliff:g>-д тохируулсан."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G дата идэвхгүй болов"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G дата идэвхгүй байна"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Мобайл дата идэвхгүй болов"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Дата идэвхгүй болов"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Та заасан дата ашиглалтын хязгаарт хүрэв.\n\nХэрэв та датаг дахин идэвхжүүлбэл операторт төлбөр төлөх хэрэгтэй."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Дата дахин идэвхжүүлэх"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Интернет холболт байхгүй"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi холбогдсон"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS хайж байна"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS байршил"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Байршлын хүсэлтүүд идэвхтэй"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Бүх мэдэгдлийг цэвэрлэх."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Апп мэдээлэл"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Дэлгэц автоматаар эргэнэ."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Дэлгэц хэвтээ чиглэлд түгжигдсэн."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Дэлгэц босоо чиглэлээр түгжигдсэн."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Амттаны хайрцаг"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Этернет"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Нислэгийн горим"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Цэнэглэж байна, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Цэнэглэгдсэн"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Блютүүт"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Блютүүт (<xliff:g id="NUMBER">%d</xliff:g> төхөөрөмж)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Блютүүт унтраалттай"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Тодрол"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Автомат эргэх"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Эргүүлэлт түгжигдсэн"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Босоо байдлаар түгжсэн"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Хэвтээ байдлаар түгжсэн"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Оруулах арга"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Байршил"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Байршил идэвхгүй"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Медиа төхөөрөмж"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Зөвхөн яаралтай дуудлага"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Тохиргоо"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Цаг"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Би"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Холбогдоогүй"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Сүлжээгүй"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi унтарсан"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Дамжуулах дэлгэц"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Тодрол"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТОМАТ"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Өнгө урвуулах горим"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Сайжруулсан ялгаралтай горим"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Өнгө залруулах горим"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"СҮҮЛИЙН"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Аппликешны мэдээлэл"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"хайх"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Сүлжээ хянагдаж\nбайж болзошгүй"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Хайх"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>-г гулсуулах."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> хийх зүүнлүү гулсуулах."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Мэдэгдлийг нуусан"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d мэдэгдлийг нуусан"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Харуулах бол хүрнэ үү"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Бүү саад бол"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"өөр %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Нээхийн тулд дахин товшино уу"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Түгжээг тайлах бол шудрана уу"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY-land/strings.xml b/packages/SystemUI/res/values-ms-rMY-land/strings.xml
new file mode 100644
index 0000000..175b0fa
--- /dev/null
+++ b/packages/SystemUI/res/values-ms-rMY-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"Skrin kini dikunci dalam orientasi landskap."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
new file mode 100644
index 0000000..587b84f
--- /dev/null
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -0,0 +1,225 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"Sistem UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Pdm bersih"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alih keluar dari senarai"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Maklumat aplikasi"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Tiada aplikasi terbaharu"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Buang aplikasi terbaharu"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 aplikasi terbaharu"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d aplikasi terbaharu"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"Sambungkan pengecas"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"Bateri semakin lemah."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"Berbaki <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"Pengecasan USB tidak disokong.\nGunakan hanya pengecas yang dibekalkan."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"Penggunaan bateri"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Tetapan"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Mod pesawat"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Autoputar skrin"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"REDAM"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ditambatkan"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Sediakan kaedah input"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Papan kekunci fizikal"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Benarkan aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> mengakses peranti USB?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Benarkan aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> mengakses aksesori USB?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Buka <xliff:g id="ACTIVITY">%1$s</xliff:g> apabila peranti USB ini disambungkan?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Buka <xliff:g id="ACTIVITY">%1$s</xliff:g> apabila aksesori USB ini disambungkan?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Tiada apl yg dipsg bfungsi dgn aksesori USB ini. Ketahui lg ttg aksesori ini di <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"Aksesori USB"</string>
+    <string name="label_view" msgid="6304565553218192990">"Lihat"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"Gunakan secara lalai untuk peranti USB ini"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"Gunakan secara lalai untuk aksesori USB ini"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"Benarkan penyahpepijatan USB?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"Cap jari kekunci RSA komputer ialah:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"Sentiasa benarkan komputer ini"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"Zum untuk memenuhi skrin"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"Regang utk memenuhi skrin"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Menyimpan tangkapan skrin..."</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"Menyimpan tangkapan skrin..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"Tangkapan skrin sedang disimpan."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"Tangkapan skrin ditangkap."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"Sentuh untuk melihat tangkapan skrin anda."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"Tidak dapat menangkap tangkapan skrin."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"Tidak boleh menyimpan tangkapan skrin. Storan mungkin sedang digunakan."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"Pilihan pemindahan fail USB"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"Lekapkan sebagai pemain media (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"Lekapkan sebagai kamera (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Pasang aplikasi Pindahan Fail Android untuk Mac"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"Rumah"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"Aplikasi terbaharu"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Cari"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah input."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Butang zum keserasian."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Skrin zum lebih kecil kepada lebih besar."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth disambungkan."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth diputuskan sambungan."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"Tiada bateri."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateri satu bar."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Bateri dua bar."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Bateri tiga bar."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"Bateri penuh."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"Tiada telefon."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon satu bar."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon dua bar."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon tiga bar."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Isyarat telefon penuh."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"Tiada data."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data satu bar."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data dua bar."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tiga bar."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Isyarat data penuh."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi dimatikan."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi diputuskan sambungannya."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"WiFi satu bar."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"WiFi dua bar."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi tiga bar."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Isyarat WiFi penuh."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"Tiada WiMAX"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX satu bar."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX dua bar."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX tiga bar."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Isyarat WiMAX penuh."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"Tiada isyarat."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"Tidak disambungkan."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Tiada bar."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"Satu bar."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"Dua bar."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"Tiga bar."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"Isyarat penuh."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"Dihidupkan."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"Dimatikan."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Disambungkan."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Perayauan"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"Tiada SIM."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Penambatan Bluetooth."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod pesawat"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateri <xliff:g id="NUMBER">%d</xliff:g> peratus."</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"Tetapan sistem."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Padamkan pemberitahuan."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS didayakan."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS sedang mendapatkan."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Mesin Teletaip didayakan."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ditolak."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Pemberitahuan diketepikan."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bidai pemberitahuan."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tetapan pantas."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Apl terbaru."</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Pengguna <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mudah Alih <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateri <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mod Pesawat <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Lokasi <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Penggera ditetapkan pada <xliff:g id="TIME">%s</xliff:g>."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dilumpuhkan"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dilumpuhkan"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data mudah alih dilumpuhkan"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data dilumpuhkan"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Anda telah mencapai had penggunaan data yang dinyatakan.\n\nJika anda mendayakan semula data, anda mungkin dikenakan caj oleh operator."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Dayakan semula data"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Tiada smbg Internet"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi disambungkan"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"Mencari GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi ditetapkan oleh GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Permintaan lokasi aktif"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"Padamkan semua pemberitahuan."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Maklumat apl"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skrin akan berputar secara automatik."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skrin dikunci dalam orientasi landskap."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skrin dikunci dalam orientasi potret."</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Bekas Pencuci Mulut"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Lamun"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mod kapal terbang"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Mengecas, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Sudah dicas"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Peranti)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Dimatikan"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kecerahan"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Putar"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Putaran Dikunci"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Dikunci kepada Potret"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Dikunci kepada Landskap"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Kaedah Input"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Lokasi"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokasi Dimatikan"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Peranti media"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Panggilan Kecemasan Sahaja"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Tetapan"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"Masa"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"Saya"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Tidak Disambungkan"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tiada Rangkaian"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Dimatikan"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Skrin Cast"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kecerahan"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Mod penyongsangan warna"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mod kontras dipertingkat"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mod pembetulan warna"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"TERBAHARU"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maklumat Aplikasi"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"cari"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Rangkaian mungkin\nboleh dipantau"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Carian"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Luncurkan ke atas untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Luncurkan ke kiri untuk <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Pemberitahuan disembunyikan"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d pemberitahuan disembunyikan"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Sentuh untuk menunjukkan"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Jangan ganggu"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d lagi"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Ketik lagi untuk membuka"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Leret ke atas untuk membuka kunci"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml
deleted file mode 100644
index 5312ccb..0000000
--- a/packages/SystemUI/res/values-ms/strings.xml
+++ /dev/null
@@ -1,207 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/**
- * Copyright (c) 2009, 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.
- */
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" msgid="7164937344850004466">"Sistem UI"</string>
-    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Pdm bersih"</string>
-    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Alih keluar dari senarai"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Maklumat aplikasi"</string>
-    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Tiada aplikasi terbaharu"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Buang aplikasi terbaharu"</string>
-  <plurals name="status_bar_accessibility_recent_apps">
-    <item quantity="one" msgid="5854176083865845541">"1 aplikasi terbaharu"</item>
-    <item quantity="other" msgid="1040784359794890744">"%d aplikasi terbaharu"</item>
-  </plurals>
-    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Tiada pemberitahuan"</string>
-    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Sedang berlangsung"</string>
-    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"Pemberitahuan"</string>
-    <string name="battery_low_title" msgid="2783104807551211639">"Sambungkan pengecas"</string>
-    <string name="battery_low_subtitle" msgid="1752040062087829196">"Bateri semakin lemah."</string>
-    <string name="battery_low_percent_format" msgid="1077244949318261761">"Berbaki <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
-    <string name="invalid_charger" msgid="4549105996740522523">"Pengecasan USB tidak disokong.\nGunakan hanya pengecas yang dibekalkan."</string>
-    <string name="battery_low_why" msgid="7279169609518386372">"Penggunaan bateri"</string>
-    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Tetapan"</string>
-    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
-    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"Mod pesawat"</string>
-    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Autoputar skrin"</string>
-    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"REDAM"</string>
-    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
-    <string name="status_bar_settings_notifications" msgid="397146176280905137">"Pemberitahuan"</string>
-    <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ditambatkan"</string>
-    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Sediakan kaedah input"</string>
-    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Papan kekunci fizikal"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Benarkan aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> mengakses peranti USB?"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Benarkan aplikasi <xliff:g id="APPLICATION">%1$s</xliff:g> mengakses aksesori USB?"</string>
-    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Buka <xliff:g id="ACTIVITY">%1$s</xliff:g> apabila peranti USB ini disambungkan?"</string>
-    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Buka <xliff:g id="ACTIVITY">%1$s</xliff:g> apabila aksesori USB ini disambungkan?"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Tiada apl yg dipsg bfungsi dgn aksesori USB ini. Ketahui lg ttg aksesori ini di <xliff:g id="URL">%1$s</xliff:g>"</string>
-    <string name="title_usb_accessory" msgid="4966265263465181372">"Aksesori USB"</string>
-    <string name="label_view" msgid="6304565553218192990">"Lihat"</string>
-    <string name="always_use_device" msgid="1450287437017315906">"Gunakan secara lalai untuk peranti USB ini"</string>
-    <string name="always_use_accessory" msgid="1210954576979621596">"Gunakan secara lalai untuk aksesori USB ini"</string>
-    <string name="usb_debugging_title" msgid="4513918393387141949">"Benarkan penyahpepijatan USB?"</string>
-    <string name="usb_debugging_message" msgid="2220143855912376496">"Cap jari kekunci RSA komputer ialah:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
-    <string name="usb_debugging_always" msgid="303335496705863070">"Sentiasa benarkan komputer ini"</string>
-    <string name="compat_mode_on" msgid="6623839244840638213">"Zum untuk memenuhi skrin"</string>
-    <string name="compat_mode_off" msgid="4434467572461327898">"Regang utk memenuhi skrin"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zum keserasian"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Apabila apl direka untuk skrin yang lebih kecil, kawalan zum akan muncul di tepi jam."</string>
-    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Menyimpan tangkapan skrin..."</string>
-    <string name="screenshot_saving_title" msgid="8242282144535555697">"Menyimpan tangkapan skrin..."</string>
-    <string name="screenshot_saving_text" msgid="2419718443411738818">"Tangkapan skrin sedang disimpan."</string>
-    <string name="screenshot_saved_title" msgid="6461865960961414961">"Tangkapan skrin ditangkap."</string>
-    <string name="screenshot_saved_text" msgid="1152839647677558815">"Sentuh untuk melihat tangkapan skrin anda."</string>
-    <string name="screenshot_failed_title" msgid="705781116746922771">"Tidak dapat menangkap tangkapan skrin."</string>
-    <string name="screenshot_failed_text" msgid="8134011269572415402">"Tidak boleh menyimpan tangkapan skrin. Storan mungkin sedang digunakan."</string>
-    <string name="usb_preference_title" msgid="6551050377388882787">"Pilihan pemindahan fail USB"</string>
-    <string name="use_mtp_button_title" msgid="4333504413563023626">"Lekapkan sebagai pemain media (MTP)"</string>
-    <string name="use_ptp_button_title" msgid="7517127540301625751">"Lekapkan sebagai kamera (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Pasang aplikasi Pindahan Fail Android untuk Mac"</string>
-    <string name="accessibility_back" msgid="567011538994429120">"Kembali"</string>
-    <string name="accessibility_home" msgid="8217216074895377641">"Rumah"</string>
-    <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
-    <string name="accessibility_recent" msgid="8571350598987952883">"Aplikasi terbaharu"</string>
-    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Butang tukar kaedah input."</string>
-    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Butang zum keserasian."</string>
-    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Skrin zum lebih kecil kepada lebih besar."</string>
-    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth disambungkan."</string>
-    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth diputuskan sambungan."</string>
-    <string name="accessibility_no_battery" msgid="358343022352820946">"Tiada bateri."</string>
-    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Bateri satu bar."</string>
-    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Bateri dua bar."</string>
-    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"Bateri tiga bar."</string>
-    <string name="accessibility_battery_full" msgid="8909122401720158582">"Bateri penuh."</string>
-    <string name="accessibility_no_phone" msgid="4894708937052611281">"Tiada telefon."</string>
-    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"Telefon satu bar."</string>
-    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"Telefon dua bar."</string>
-    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"Telefon tiga bar."</string>
-    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"Isyarat telefon penuh."</string>
-    <string name="accessibility_no_data" msgid="4791966295096867555">"Tiada data."</string>
-    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"Data satu bar."</string>
-    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"Data dua bar."</string>
-    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"Data tiga bar."</string>
-    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"Isyarat data penuh."</string>
-    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi dimatikan."</string>
-    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi diputuskan sambungannya."</string>
-    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"WiFi satu bar."</string>
-    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"WiFi dua bar."</string>
-    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi tiga bar."</string>
-    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Isyarat WiFi penuh."</string>
-    <string name="accessibility_no_wimax" msgid="4329180129727630368">"Tiada WiMAX"</string>
-    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX satu bar."</string>
-    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX dua bar."</string>
-    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX tiga bar."</string>
-    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"Isyarat WiMAX penuh."</string>
-    <string name="accessibility_no_signal" msgid="7064645320782585167">"Tiada isyarat."</string>
-    <string name="accessibility_not_connected" msgid="6395326276213402883">"Tidak disambungkan."</string>
-    <string name="accessibility_zero_bars" msgid="3806060224467027887">"Tiada bar."</string>
-    <string name="accessibility_one_bar" msgid="1685730113192081895">"Satu bar."</string>
-    <string name="accessibility_two_bars" msgid="6437363648385206679">"Dua bar."</string>
-    <string name="accessibility_three_bars" msgid="2648241415119396648">"Tiga bar."</string>
-    <string name="accessibility_signal_full" msgid="9122922886519676839">"Isyarat penuh."</string>
-    <string name="accessibility_desc_on" msgid="2385254693624345265">"Dihidupkan."</string>
-    <string name="accessibility_desc_off" msgid="6475508157786853157">"Dimatikan."</string>
-    <string name="accessibility_desc_connected" msgid="8366256693719499665">"Disambungkan."</string>
-    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
-    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
-    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
-    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
-    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
-    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
-    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
-    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
-    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Perayauan"</string>
-    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
-    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
-    <string name="accessibility_no_sim" msgid="8274017118472455155">"Tiada SIM."</string>
-    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Penambatan Bluetooth."</string>
-    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Mod pesawat"</string>
-    <string name="accessibility_battery_level" msgid="7451474187113371965">"Bateri <xliff:g id="NUMBER">%d</xliff:g> peratus."</string>
-    <string name="accessibility_settings_button" msgid="799583911231893380">"Tetapan sistem."</string>
-    <string name="accessibility_notifications_button" msgid="4498000369779421892">"Pemberitahuan."</string>
-    <string name="accessibility_remove_notification" msgid="3603099514902182350">"Padamkan pemberitahuan."</string>
-    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS didayakan."</string>
-    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS sedang mendapatkan."</string>
-    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"Mesin Teletaip didayakan."</string>
-    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Pendering bergetar."</string>
-    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Pendering senyap."</string>
-    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> ditolak."</string>
-    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"Pemberitahuan diketepikan."</string>
-    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"Bidai pemberitahuan."</string>
-    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"Tetapan pantas."</string>
-    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"Apl terbaru."</string>
-    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"Pengguna <xliff:g id="USER">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
-    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"Mudah Alih <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateri <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mod Pesawat <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
-    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Penggera ditetapkan pada <xliff:g id="TIME">%s</xliff:g>."</string>
-    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data 2G-3G dilumpuhkan"</string>
-    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data 4G dilumpuhkan"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"Data mudah alih dilumpuhkan"</string>
-    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"Data dilumpuhkan"</string>
-    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"Anda telah mencapai had penggunaan data yang dinyatakan.\n\nJika anda mendayakan semula data, anda mungkin dikenakan caj oleh operator."</string>
-    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"Dayakan semula data"</string>
-    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"Tiada smbg Internet"</string>
-    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi disambungkan"</string>
-    <string name="gps_notification_searching_text" msgid="8574247005642736060">"Mencari GPS"</string>
-    <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasi ditetapkan oleh GPS"</string>
-    <string name="accessibility_clear_all" msgid="5235938559247164925">"Padamkan semua pemberitahuan."</string>
-    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Maklumat apl"</string>
-    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skrin akan berputar secara automatik."</string>
-    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skrin dikunci dalam orientasi landskap."</string>
-    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skrin dikunci dalam orientasi potret."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
-    <string name="start_dreams" msgid="7219575858348719790">"Lamun"</string>
-    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
-    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mod kapal terbang"</string>
-    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Mengecas, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Sudah dicas"</string>
-    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
-    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> Peranti)"</string>
-    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Dimatikan"</string>
-    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Kecerahan"</string>
-    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Auto Putar"</string>
-    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Putaran Dikunci"</string>
-    <string name="quick_settings_ime_label" msgid="7073463064369468429">"Kaedah Input"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
-    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Peranti media"</string>
-    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
-    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Panggilan Kecemasan Sahaja"</string>
-    <string name="quick_settings_settings_label" msgid="5326556592578065401">"Tetapan"</string>
-    <string name="quick_settings_time_label" msgid="4635969182239736408">"Masa"</string>
-    <string name="quick_settings_user_label" msgid="5238995632130897840">"Saya"</string>
-    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
-    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Tidak Disambungkan"</string>
-    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tiada Rangkaian"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Dimatikan"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Paparan Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Paparan Wayarles"</string>
-    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Kecerahan"</string>
-    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Pemberitahuan dipaparkan di sini"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Akses panel pada bila-bila masa dengan meleret ke bawah.\nLeret ke bawah sekali lagi untuk mendapatkan kawalan sistem."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Leret ke bahagian tepi skrin untuk menampakkan bar"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Leret dari tepi skrin untuk menampakkan bar sistem"</string>
-</resources>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 778be83..001e733 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -22,7 +22,7 @@
     <string name="app_label" msgid="7164937344850004466">"Sys.gr.snitt"</string>
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Fjern"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Fjern fra listen"</string>
-    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om app"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string>
     <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Ingen nylige apper"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvis nylige apper"</string>
   <plurals name="status_bar_accessibility_recent_apps">
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Tillat alltid fra denne datamaskinen"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom for å fylle skjermen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Strekk for å fylle skjerm"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Kompatibilitets-zooming"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Når en app er utformet for en mindre skjerm, vises det en zoomkontroll ved klokken."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Lagrer skjermdumpen …"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Lagrer skjermdumpen …"</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Skjermdumpen lagres."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Startside"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Nylige apper"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Søk"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Bytt knapp for inndatametode."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Zoomknapp for kompatibilitet."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom fra mindre til større skjerm."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteri – <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flymodus – <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth – <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Posisjon <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmen ble stilt for <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G-data er deaktivert"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-data er deaktivert"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi tilkoblet"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Søker etter GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Posisjon angitt av GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Aktive stedsforespørsler"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Fjern alle varslinger."</string>
-    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info om app"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info om appen"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skjermen roterer automatisk."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skjermen er låst i liggende retning."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skjermen er låst i stående retning."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessertmonter"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Dagdrøm"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flymodus"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Lysstyrke"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatisk rotasjon"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotasjon er låst"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Låst til stående format"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Låst til liggende format"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Inndatametode"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Sted"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Posisjon av"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ikke tilkoblet"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ingen nettverk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi er av"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi-skjerm"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Trådløs skjerm"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Cast skjermen"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Lysstyrke"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Varslene vises her"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Bruk dem når som helst ved å sveipe nedover.\nSveip nedover igjen for å gå til systemkontrollene."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Sveip på kanten av skjermen for å få frem feltet"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Sveip fra kanten på skjermen for å få frem systemfeltet"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Modus for fargeinvertering"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Forbedret kontrastmodus"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modus for fargekorrigering"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"NYLIGE"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformasjon"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"Søk"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Nettverket kan\nvære overvåket"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Søk"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Dra opp for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Dra til venstre for å <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Varselet er skjult"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d varsler er skjult"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Trykk for å vise"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Ikke forstyrr"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d til"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Trykk på nytt for å åpne"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Sveip oppover for å låse opp"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ne-land/strings.xml b/packages/SystemUI/res/values-ne-land/strings.xml
new file mode 100644
index 0000000..8d5286e
--- /dev/null
+++ b/packages/SystemUI/res/values-ne-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"स्क्रिन अहिले ल्यान्डस्केप अवस्थामा बन्द छ।"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP-land/strings.xml b/packages/SystemUI/res/values-ne-rNP-land/strings.xml
new file mode 100644
index 0000000..8d5286e
--- /dev/null
+++ b/packages/SystemUI/res/values-ne-rNP-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"स्क्रिन अहिले ल्यान्डस्केप अवस्थामा बन्द छ।"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..19e2744
--- /dev/null
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"प्रणाली UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"हटाउनुहोस्"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूचीबाट हटाउनुहोस्"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"अनुप्रयोगको जानकारी"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"कुनै नयाँ अनुप्रयोगहरू छैनन्"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"नयाँ अनुप्रयोगहरू खारेज गर्नुहोस्"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"१ भरखरै अनुप्रयोग"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d भरखरैका अनुप्रयोगहरू"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कुनै सूचनाहरू छैन"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"चलिरहेको"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाहरू"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"चार्जर जडान गर्नुहोस्"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"ब्याट्रि न्यून हुँदै छ।"</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> बाँकी"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB चार्ज गर्न समर्थित छैन।\n आपूर्ति गरिएको चार्जर मात्र प्रयोग गर्नुहोस्।"</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"ब्याट्रि प्रयोग"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"सेटिङहरू"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"वाइ-फाइ"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"हवाइजहाज मोड"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्वत:घुम्ने स्क्रिन"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"म्युट गर्नुहोस्"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"स्वतः"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"सूचनाहरू"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लुटुथ टेथर भयो"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट विधिहरू सेटअप गर्नुहोस्"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"फिजिकल किबोर्ड"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> USB उपकरणलाई पहुँच दिनको लागि अनुप्रयोगलाई अनुमति दिने हो?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> USB पाटपुर्जालाई पहुँच दिनको लागि अनुप्रयोगलाई अनुमति दिने हो?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"यो USB उपकरण जोडिएको बेला <xliff:g id="ACTIVITY">%1$s</xliff:g> खोल्ने हो?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"यो USB सहायक जडान हुँदा <xliff:g id="ACTIVITY">%1$s</xliff:g> खोल्ने हो?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"यस USB उपकरणसँग स्थापित अनुप्रयोग काम गर्दैन। यस उपकरणको बारेमा <xliff:g id="URL">%1$s</xliff:g> मा धेरै जान्नुहोस्"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB सहयोगी"</string>
+    <string name="label_view" msgid="6304565553218192990">"दृश्य"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"यो USB उपकरणको लागि पूर्वनिर्धारितबाट प्रयोग गर्नुहोस्"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"यस USB सहायक सामानको लागि पूर्वनिर्धारितद्वारा प्रयोग गर्नुहोस्"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"USB डिबग गर्नको लागि अनुमति दिने हो?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"कम्प्युटरको RSA कुञ्जी औंलाछाप:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"यो कम्प्युटरबाट सधैँ अनुमति दिनुहोस्"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"स्क्रिन भर्न जुम गर्नुहोस्"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"स्क्रिन भर्न तन्काउनुहोस्"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"स्क्रिनसट बचत गर्दै…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"स्क्रिनसट बचत गर्दै…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"स्क्रिनसट बचत हुँदै छ।"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"स्क्रिनसट क्याप्चर गरियो।"</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"तपाईँको स्क्रिनसट हेर्न छुनुहोस्।"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"स्क्रिनसट क्याप्चर गर्न सकिएन।"</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"स्क्रिनसटलाई बचत गर्न सकेन। भण्डारण उपयोगमा हुन सक्छ।"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB फाइल सार्ने विकल्पहरू"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"मिडिया प्लेयर(MTP)को रूपमा माउन्ट गर्नुहोस्"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"क्यामेराको रूपमा माउन्ट गर्नुहोस् (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"म्याकको लागि एन्ड्रोइड फाइल ट्रान्सफर अनुप्रयोग स्थापना गर्नुहोस्"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"पछाडि"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"गृह"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"मेनु"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"भर्खरका अनुप्रयोगहरू"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट विधि बटन स्विच गर्नुहोस्।"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"मिलाउने जुम बटन।"</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"स्क्रिनलाई सानोबाट ठूलो पार्नुहोस्।"</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब्लुटुथ जडान भयो।"</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ब्लुटुथसँग विच्छेद गरियो।"</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"कुनै ब्याट्रि छैन।"</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"ब्याट्रि एउटा पट्टि।"</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"ब्याट्रिका दुईवटा पट्टिहरू"</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"ब्याट्रिका तिनवटा पट्टिहरू"</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"ब्याट्रि पूर्ण छ।"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"फोन छैन्।"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"फोन एउटा पट्टि।"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"फोन दुई पट्टि।"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"फोन तिन पट्टिहरू।"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"फोन सङ्केत भरिएको।"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"डेटा छैन।"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"डेटाको एउटा पट्टि।"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"डेटा दुई बाधाहरू।"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"डेटा तिन बाधाहरू।"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"डेटा संकेत पूर्ण।"</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"वाइफाइ बन्द।"</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"वाइफाइ विच्छेद भयो।"</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"वाइफाइ एक पट्टि।"</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"वाइफाइ दुई पट्टि।"</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"वाइफाइ तिन बारहरू।"</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"वाइफाइ सङ्केत भरिएको।"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"वाइम्यास छैन।"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX एउटा पट्टि।"</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"वाइम्याक्स दुईवटा बारहरू।"</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"वाइम्याक्स तिनवटा बारहरू।"</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"वाइम्याक्स सङ्केत भरिएका।"</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"सङ्केत छैन।"</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"जडान नगरिएको।"</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"शून्य पट्टि।"</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"एउटा बार।"</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"दुई पट्टिहरू।"</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"तिनवटा पट्टिहरू"</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"सङ्केत पूर्ण छ।"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"चालु।"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"बन्द गर्नुहोस्।"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"जडान गरिएको।"</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"रोमिङ"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"वाइ-फाइ"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM छैन।"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लुटुथ टिथर गर्दै।"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाइजहाज मोड।"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"ब्याट्रि <xliff:g id="NUMBER">%d</xliff:g> प्रतिशत"</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"प्रणाली सेटिङहरू"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"सूचनाहरू।"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"सूचना खाली गर्नुहोस्।"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम गरिएको"</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त हुँदैछ।"</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"टेलि टाइपराइटर सक्षम गरियो।"</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"बज्ने कम्पन हुन्छ।"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"घन्टी मौन।"</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खारेज गरिएको छ।"</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना खारेज।"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना कक्ष।"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"द्रुत सेटिङहरू"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"वर्तमान अनुप्रयोगहरू"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"प्रयोगकर्ता <xliff:g id="USER">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>। <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"मोवाइल <xliff:g id="SIGNAL">%1$s</xliff:g>। <xliff:g id="TYPE">%2$s</xliff:g>। <xliff:g id="NETWORK">%3$s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ब्याट्रि <xliff:g id="STATE">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"हवाजहाज मोड <xliff:g id="STATE">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"ब्लुटुथ <xliff:g id="STATE">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"<xliff:g id="TIME">%s</xliff:g>को लागि सङ्केत घन्टी सेट गरिएको"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G डेटा अक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G डेटा असक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"मोबाइल डेटा अक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"डेटा अक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"तपाईँ निर्दिष्ट डेटा उपयोग सीमामा पुग्नु भएको छ।\n\nयदि तपाईँले डेटालाई पुनःसक्षम पार्नु भयो भने तपाईँलाई अर्को संचालकबाट शुल्क लगाउन सक्छ।"</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"डेटा पुनः सक्षम गर्नुहोस्"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"इन्टरनेट जडान छैन"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाइ-फाइ जडित"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSको लागि खोजी गर्दै"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS द्वारा स्थान सेट गरिएको"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"स्थान अनुरोधहरू सक्रिय"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"सबै सूचनाहरू हटाउनुहोस्।"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"अनुप्रयोगको जानकारी"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्क्रिन स्वतः घुम्ने छ।"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"स्क्रिनलाई ल्यान्डस्केप अवस्थामा बन्द गरिएको छ।"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"स्क्रिन पोर्टेट अभिमूखमा लक गरिएको छ।"</string>
+    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"दिवासपना"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"हवाइजहाज मोड"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"चार्ज हुँदै, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"चार्ज भयो"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लुटुथ"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब्लुटुथ (<xliff:g id="NUMBER">%d</xliff:g> उपकरणहरू)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ब्लुटुथ बन्द"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"चमक"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"स्वतः घुमाइ"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"घुम्ने लक गरेको"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"आगत विधि"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"स्थान"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"स्थान बन्द छ"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"मिडिया उपकरण"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"आकस्मिक कल मात्र"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"सेटिङहरू"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"समय"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"मलाई"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"वाइ-फाइ"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"जोडिएको छैन"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क छैन"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाइ-फाइ बन्द"</string>
+    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"वाइ-फाइ प्रदर्शन"</string>
+    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"ताररहित प्रदर्शन"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"उज्यालपन"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"स्वतः"</string>
+    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"सञ्जाल अनुगमित हुन सक्छ"</string>
+    <string name="done_button" msgid="1759387181766603361">"भयो"</string>
+    <string name="ssl_ca_cert_dialog_title" msgid="1273796967092027291">"सञ्जाल निगरानी"</string>
+    <string name="ssl_ca_cert_info_message" msgid="5430320539555358452">"यो उपकरण <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>द्वारा प्रबन्धित छ। \n \n तपाईँको प्रशासक तपाईँको अनुप्रयोग र सुरक्षित वेब साइट लगायत सञ्जाल गतिविधि अनुगमन गर्न सक्षम छ। \n \n थप जानकारीको लागि तपाईँको प्रशासकसँग सम्पर्क राख्नुहोस्।"</string>
+    <string name="ssl_ca_cert_warning_message" msgid="2033091656129963669">"एक तेस्रो पक्ष तपाईँको सञ्जाल\n गतिविधि, इमेल, अनुप्रयोग र सुरक्षित वेबसाइट अनुगमन गर्न सक्षम छ। \n \n तपाईँको उपकरणमा स्थापित एक विश्वसनीय प्रामाणिक डेटाले सम्भव तुल्याइरहेको छ।"</string>
+    <string name="ssl_ca_cert_settings_button" msgid="7946956977377166709">"विश्वसनीय प्रामाणिक डेटा जाँच गर्नुहोस्"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml
new file mode 100644
index 0000000..c3eee01
--- /dev/null
+++ b/packages/SystemUI/res/values-ne/strings.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"प्रणाली UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"हटाउनुहोस्"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"सूचीबाट हटाउनुहोस्"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"अनुप्रयोगको जानकारी"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"कुनै नयाँ अनुप्रयोगहरू छैनन्"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"नयाँ अनुप्रयोगहरू खारेज गर्नुहोस्"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"१ भरखरै अनुप्रयोग"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d भरखरैका अनुप्रयोगहरू"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"कुनै सूचनाहरू छैन"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"चलिरहेको"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"सूचनाहरू"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"चार्जर जडान गर्नुहोस्"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"ब्याट्रि न्यून हुँदै छ।"</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> बाँकी"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB चार्ज गर्न समर्थित छैन।\n आपूर्ति गरिएको चार्जर मात्र प्रयोग गर्नुहोस्।"</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"ब्याट्रि प्रयोग"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"सेटिङहरू"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"वाइ-फाइ"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"हवाइजहाज मोड"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"स्वत:घुम्ने स्क्रिन"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"म्युट गर्नुहोस्"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"स्वतः"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"सूचनाहरू"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"ब्लुटुथ टेथर भयो"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"इनपुट विधिहरू सेटअप गर्नुहोस्"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"फिजिकल किबोर्ड"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"<xliff:g id="APPLICATION">%1$s</xliff:g> USB उपकरणलाई पहुँच दिनको लागि अनुप्रयोगलाई अनुमति दिने हो?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"<xliff:g id="APPLICATION">%1$s</xliff:g> USB पाटपुर्जालाई पहुँच दिनको लागि अनुप्रयोगलाई अनुमति दिने हो?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"यो USB उपकरण जोडिएको बेला <xliff:g id="ACTIVITY">%1$s</xliff:g> खोल्ने हो?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"यो USB सहायक जडान हुँदा <xliff:g id="ACTIVITY">%1$s</xliff:g> खोल्ने हो?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"यस USB उपकरणसँग स्थापित अनुप्रयोग काम गर्दैन। यस उपकरणको बारेमा <xliff:g id="URL">%1$s</xliff:g> मा धेरै जान्नुहोस्"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB सहयोगी"</string>
+    <string name="label_view" msgid="6304565553218192990">"दृश्य"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"यो USB उपकरणको लागि पूर्वनिर्धारितबाट प्रयोग गर्नुहोस्"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"यस USB सहायक सामानको लागि पूर्वनिर्धारितद्वारा प्रयोग गर्नुहोस्"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"USB डिबग गर्नको लागि अनुमति दिने हो?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"कम्प्युटरको RSA कुञ्जी औंलाछाप:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"यो कम्प्युटरबाट सधैँ अनुमति दिनुहोस्"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"स्क्रिन भर्न जुम गर्नुहोस्"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"स्क्रिन भर्न तन्काउनुहोस्"</string>
+    <string name="compat_mode_help_header" msgid="7969493989397529910">"अनुकूलता जुम"</string>
+    <string name="compat_mode_help_body" msgid="4946726776359270040">"जब कुनै अनुप्रयोग सानो स्क्रिनको लागि बनाइएको हुन्छ, तब जुम नियन्त्रण घडीको नजिक देखिन्छ।"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"स्क्रिनसट बचत गर्दै…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"स्क्रिनसट बचत गर्दै…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"स्क्रिनसट बचत हुँदै छ।"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"स्क्रिनसट क्याप्चर गरियो।"</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"तपाईँको स्क्रिनसट हेर्न छुनुहोस्।"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"स्क्रिनसट क्याप्चर गर्न सकिएन।"</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"स्क्रिनसटलाई बचत गर्न सकेन। भण्डारण उपयोगमा हुन सक्छ।"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB फाइल सार्ने विकल्पहरू"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"मिडिया प्लेयर(MTP)को रूपमा माउन्ट गर्नुहोस्"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"क्यामेराको रूपमा माउन्ट गर्नुहोस् (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"म्याकको लागि एन्ड्रोइड फाइल ट्रान्सफर अनुप्रयोग स्थापना गर्नुहोस्"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"पछाडि"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"गृह"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"मेनु"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"भर्खरका अनुप्रयोगहरू"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"इनपुट विधि बटन स्विच गर्नुहोस्।"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"मिलाउने जुम बटन।"</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"स्क्रिनलाई सानोबाट ठूलो पार्नुहोस्।"</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ब्लुटुथ जडान भयो।"</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ब्लुटुथसँग विच्छेद गरियो।"</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"कुनै ब्याट्रि छैन।"</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"ब्याट्रि एउटा पट्टि।"</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"ब्याट्रिका दुईवटा पट्टिहरू"</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"ब्याट्रिका तिनवटा पट्टिहरू"</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"ब्याट्रि पूर्ण छ।"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"फोन छैन्।"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"फोन एउटा पट्टि।"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"फोन दुई पट्टि।"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"फोन तिन पट्टिहरू।"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"फोन सङ्केत भरिएको।"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"डेटा छैन।"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"डेटाको एउटा पट्टि।"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"डेटा दुई बाधाहरू।"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"डेटा तिन बाधाहरू।"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"डेटा संकेत पूर्ण।"</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"वाइफाइ बन्द।"</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"वाइफाइ विच्छेद भयो।"</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"वाइफाइ एक पट्टि।"</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"वाइफाइ दुई पट्टि।"</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"वाइफाइ तिन बारहरू।"</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"वाइफाइ सङ्केत भरिएको।"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"वाइम्यास छैन।"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX एउटा पट्टि।"</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"वाइम्याक्स दुईवटा बारहरू।"</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"वाइम्याक्स तिनवटा बारहरू।"</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"वाइम्याक्स सङ्केत भरिएका।"</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"सङ्केत छैन।"</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"जडान नगरिएको।"</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"शून्य पट्टि।"</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"एउटा बार।"</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"दुई पट्टिहरू।"</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"तिनवटा पट्टिहरू"</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"सङ्केत पूर्ण छ।"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"चालु।"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"बन्द गर्नुहोस्।"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"जडान गरिएको।"</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"रोमिङ"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"वाइ-फाइ"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM छैन।"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ब्लुटुथ टिथर गर्दै।"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"हवाइजहाज मोड।"</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"ब्याट्रि <xliff:g id="NUMBER">%d</xliff:g> प्रतिशत"</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"प्रणाली सेटिङहरू"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"सूचनाहरू।"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"सूचना खाली गर्नुहोस्।"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS सक्षम गरिएको"</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS प्राप्त हुँदैछ।"</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"टेलि टाइपराइटर सक्षम गरियो।"</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"बज्ने कम्पन हुन्छ।"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"घन्टी मौन।"</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> खारेज गरिएको छ।"</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"सूचना खारेज।"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"सूचना कक्ष।"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"द्रुत सेटिङहरू"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"वर्तमान अनुप्रयोगहरू"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"प्रयोगकर्ता <xliff:g id="USER">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>। <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"मोवाइल <xliff:g id="SIGNAL">%1$s</xliff:g>। <xliff:g id="TYPE">%2$s</xliff:g>। <xliff:g id="NETWORK">%3$s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"ब्याट्रि <xliff:g id="STATE">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"हवाजहाज मोड <xliff:g id="STATE">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"ब्लुटुथ <xliff:g id="STATE">%s</xliff:g>।"</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"<xliff:g id="TIME">%s</xliff:g>को लागि सङ्केत घन्टी सेट गरिएको"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G डेटा अक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G डेटा असक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"मोबाइल डेटा अक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"डेटा अक्षम गरियो"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"तपाईँ निर्दिष्ट डेटा उपयोग सीमामा पुग्नु भएको छ।\n\nयदि तपाईँले डेटालाई पुनःसक्षम पार्नु भयो भने तपाईँलाई अर्को संचालकबाट शुल्क लगाउन सक्छ।"</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"डेटा पुनः सक्षम गर्नुहोस्"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"इन्टरनेट जडान छैन"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"वाइ-फाइ जडित"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPSको लागि खोजी गर्दै"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS द्वारा स्थान सेट गरिएको"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"स्थान अनुरोधहरू सक्रिय"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"सबै सूचनाहरू हटाउनुहोस्।"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"अनुप्रयोगको जानकारी"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"स्क्रिन स्वतः घुम्ने छ।"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"स्क्रिनलाई ल्यान्डस्केप अवस्थामा बन्द गरिएको छ।"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"स्क्रिन पोर्टेट अभिमूखमा लक गरिएको छ।"</string>
+    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"दिवासपना"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"उडान मोड"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"चार्ज हुँदै, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"चार्ज भयो"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ब्लुटुथ"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ब्लुटुथ (<xliff:g id="NUMBER">%d</xliff:g> उपकरणहरू)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ब्लुटुथ बन्द"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"चमक"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"स्वतः घुमाइ"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"घुम्ने लक गरेको"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"आगत विधि"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"स्थान"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"स्थान बन्द छ"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"मिडिया उपकरण"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"आकस्मिक कल मात्र"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"सेटिङहरू"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"समय"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"मलाई"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"वाइ-फाइ"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"जोडिएको छैन"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"नेटवर्क छैन"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"वाइ-फाइ बन्द"</string>
+    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"वाइ-फाइ प्रदर्शन"</string>
+    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"ताररहित प्रदर्शन"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"उज्यालपन"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"स्वतः"</string>
+    <string name="status_bar_help_title" msgid="1199237744086469217">"यहाँ जानकारीहरू देखा पर्छन्"</string>
+    <string name="status_bar_help_text" msgid="7874607155052076323">"तल हुत्त्याएर तिनीहरूलाई सधैं पहुँच गर्नुहोस्\nप्रणाली नियन्त्रणको लागि पुनः तल हुत्त्याउनुहोस्"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index ab77839..8a6e33b 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Altijd toestaan vanaf deze computer"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom om scherm te vullen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rek uit v. schermvulling"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Compatibiliteitszoom"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Wanneer een app is ontworpen voor een kleiner scherm, wordt naast de klok een zoomknop weergegeven."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Screenshot opslaan..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Screenshot opslaan..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Screenshot wordt opgeslagen."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Startpagina"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Recente apps"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Zoeken"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knop voor wijzigen invoermethode."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knop voor compatibiliteitszoom."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kleiner scherm uitzoomen naar groter scherm."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Accu: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Vliegmodus: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Locatie <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm is ingesteld op <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-/3G-gegevens uitgeschakeld"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G-gegevens uitgeschakeld"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Verbonden via wifi"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Zoeken naar GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Locatie bepaald met GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Locatieverzoeken actief"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Alle meldingen wissen."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"App-info"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Scherm wordt automatisch geroteerd."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Het scherm is nu vergrendeld in liggende stand."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Het scherm is nu vergrendeld in staande stand."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessertshowcase"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Dagdroom"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Vliegmodus"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Helderheid"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatische rotatie"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotatie vergrendeld"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Vergrendeld in staande stand"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Vergrendeld in liggende stand"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Invoermethode"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Locatie"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Locatie uit"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Niet verbonden"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Geen netwerk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wifi uit"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wifi-weergave"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Draadloze display"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Scherm casten"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Helderheid"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATISCH"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Meldingen worden hier weergegeven"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"U kunt de meldingen op elk gewenst moment openen door met uw vinger omlaag te vegen.\nVeeg nogmaals met uw vinger omlaag om de systeembesturingselementen weer te geven."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Veeg vanaf de rand om balk weer te geven"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Veeg vanaf de rand van het scherm om de systeembalk weer te geven"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Modus voor kleurinversie"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Modus voor verbeterd contrast"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modus voor kleurcorrectie"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECENTE"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"App-informatie"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"zoeken"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Netwerk kan\nworden gecontroleerd"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Zoeken"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Veeg omhoog voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Veeg naar links voor <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Melding verborgen"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d meldingen verborgen"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Raak aan om weer te geven"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Niet storen"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Nog %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tik nogmaals om te openen"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Veeg omhoog om te ontgrendelen"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index c94cfc8..4862d1b 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Zawsze zezwalaj z tego komputera"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Powiększ, aby wypełnić ekran"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Rozciągnij, aby wypełnić ekran"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Powiększenie w trybie zgodności"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Jeśli aplikacja została przystosowana do mniejszego ekranu, obok zegara zostanie wyświetlony element sterujący powiększeniem."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Zapisywanie zrzutu ekranu..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Zapisywanie zrzutu ekranu..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Zapisywanie zrzutu ekranu."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Ekran główny"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Ostatnie aplikacje"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Szukaj"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Aparat"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Przycisk przełączania metody wprowadzania."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Przycisk powiększenia na potrzeby zgodności."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Powiększa mniejszy ekran do większego."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Tryb samolotowy: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Lokalizacja <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm ustawiony na <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Wyłączono transmisję danych 2G/3G"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Wyłączono transmisję danych 4G"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: połączono"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Wyszukiwanie sygnału GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokalizacja z GPSa"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Prośby o lokalizację są aktywne"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Usuń wszystkie powiadomienia."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"O aplikacji"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekran zostanie obrócony automatycznie."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekran jest zablokowany w orientacji poziomej."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekran jest zablokowany w orientacji pionowej."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Półka ze słodkościami"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Wygaszacz ekranu"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Tryb samolotowy"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jasność"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Autoobracanie"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Obracanie jest zablokowane"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Zablokowano w orientacji pionowej"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Zablokowano w orientacji poziomej"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Metoda wprowadzania"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Lokalizacja"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokalizacja wyłączona"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Brak połączenia"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Brak sieci"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wyłącz Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wyświetlacz Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Wyświetlacz bezprzewodowy"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Ekran Cast"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jasność"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATYCZNA"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Tutaj pokazują się powiadomienia"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Możesz je otworzyć w dowolnej chwili, przesuwając w dół.\nPrzesuń jeszcze raz w dół, by otworzyć ustawienia systemowe."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Przesuń palcem od krawędzi ekranu, by odkryć pasek"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Przesuń palcem od krawędzi ekranu, by odkryć pasek systemu"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Tryb odwrócenia kolorów"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Tryb zwiększonego kontrastu"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Tryb korekcji kolorów"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"OSTATNIE"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informacje o aplikacji"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"szukaj"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Sieć może być\nmonitorowana"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Szukaj"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Przesuń w górę: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Przesuń w lewo: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Powiadomienie ukryte"</item>
+    <item quantity="other" msgid="7388721375827338153">"Ukryte powiadomienia: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotknij, by zobaczyć"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Nie przeszkadzać"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d więcej"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Kliknij ponownie, by otworzyć"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Przesuń w górę, by odblokować"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index c106329..012283a 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Permitir sempre a partir deste computador"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom para preencher o ecrã"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Esticar p. caber em ec. int."</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilidade"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Sempre que uma aplicação tiver sido concebida para ecrãs mais pequenos, aparecerá um controlo de zoom junto ao relógio."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"A guardar captura de ecrã..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"A guardar captura de ecrã..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"A guardar captura de ecrã."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Aplicações recentes"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Pesquisar"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Câmara"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alternar botão de método de introdução."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão zoom de compatibilidade."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zoom menor para ecrã maior."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo de Avião <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Localização <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme definido para <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Os dados 2G-3G estão desativados"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Os dados 4G estão desativados"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ligado"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"A procurar GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Localização definida por GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Pedidos de localização ativos"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informações da aplicação"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"O ecrã será rodado automaticamente."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"O ecrã está bloqueado na orientação horizontal."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"O ecrã está bloqueado na orientação vertical."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Vitrina de sobremesas"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo de avião"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brilho"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rodar automat."</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotação Bloqueada"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueado em retrato"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueado em paisagem"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de Introdução"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Localização"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localização Desativada"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Não Ligado"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem Rede"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Desligado"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Visualização Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Display Sem Fios"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Transmitir ecrã"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brilho"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMÁTICO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"As notificações são apresentadas aqui"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Pode aceder em qualquer altura, deslizando rapidamente para baixo com o dedo.\nDeslize novamente para baixo para aceder aos controlos do sistema."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Deslize da extremidade do ecrã para revelar a barra"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Deslize da extremidade do ecrã para revelar a barra do sistema"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Modo de inversão de cor"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Modo de contraste melhorado"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de correção de cor"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECENTES"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações da aplicação"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"A rede pode ser\nmonitorizada"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Deslize para cima para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Deslize para a esquerda para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notificação oculta"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notificações ocultas"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Não incomodar"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Mais %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Toque novamente para abrir"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Deslizar rapidamente com o dedo para cima para desbloquear"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 91e7f02..0978d18 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Sempre permitir a partir deste computador"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom p/ preencher a tela"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Ampliar p/ preencher tela"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom em modo de compatibilidade"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Quando um aplicativo é desenvolvido para uma tela menor, um controle de zoom é exibido perto do relógio."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Salvando captura de tela..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Salvando captura de tela..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"A captura de tela está sendo salva."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Página inicial"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Aplicativos recentes"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Pesquisar"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Câmera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Alterar botão do método de entrada."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Botão de zoom da compatibilidade."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Aumentar a tela com zoom."</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Bateria <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Modo avião <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Localização <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarme definido para <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dados 2G e 3G desativados"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dados 4G desativados"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectado"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Buscando GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Local definido por GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Solicitações de localização ativas"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Limpar todas as notificações."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informações do aplicativo"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"A tela girará automaticamente."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"A tela está bloqueada na orientação paisagem."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"A tela está bloqueada na orientação retrato."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Mostruário de sobremesas"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modo avião"</string>
@@ -183,11 +185,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brilho"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Girar automat."</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotação bloqueada"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Bloqueado no modo retrato"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Bloqueado no modo paisagem"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Método de entrada"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Localização"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localização desativada"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispositivo de mídia"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Somente chamadas de emergência"</string>
@@ -198,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Não conectado"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Sem rede"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi desligado"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi Display"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Display sem fio"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Transmitir tela"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brilho"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"As notificações aparecem aqui"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Acesse a qualquer momento deslizando para baixo.\nDeslize para baixo novamente para acessar os controles do sistema."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Deslize a borda da tela para ver a barra"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Deslize a partir da borda da tela ver a barra do sistema"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Modo de inversão de cores"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Modo de contraste aprimorado"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Modo de correção de cor"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECENTES"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informações do aplicativo"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"pesquisar"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"A rede pode estar\nsob monitoração"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Pesquisar"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para cima."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Para <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>, deslize para a esquerda."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notificação oculta"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d notificações ocultas"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Toque para mostrar"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Não perturbe"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Mais %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Toque novamente para abrir"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Deslize para cima para desbloquear"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-rm/strings.xml b/packages/SystemUI/res/values-rm/strings.xml
index d7772ed..25f643f 100644
--- a/packages/SystemUI/res/values-rm/strings.xml
+++ b/packages/SystemUI/res/values-rm/strings.xml
@@ -92,10 +92,6 @@
     <skip />
     <!-- no translation found for compat_mode_off (4434467572461327898) -->
     <skip />
-    <!-- no translation found for compat_mode_help_header (7969493989397529910) -->
-    <skip />
-    <!-- no translation found for compat_mode_help_body (4946726776359270040) -->
-    <skip />
     <!-- no translation found for screenshot_saving_ticker (7403652894056693515) -->
     <skip />
     <!-- no translation found for screenshot_saving_title (8242282144535555697) -->
@@ -126,6 +122,10 @@
     <skip />
     <!-- no translation found for accessibility_recent (8571350598987952883) -->
     <skip />
+    <!-- no translation found for accessibility_search_light (1103867596330271848) -->
+    <skip />
+    <!-- no translation found for accessibility_camera_button (8064671582820358152) -->
+    <skip />
     <!-- no translation found for accessibility_ime_switch_button (5032926134740456424) -->
     <skip />
     <!-- no translation found for accessibility_compatibility_zoom_button (8461115318742350699) -->
@@ -276,6 +276,8 @@
     <skip />
     <!-- no translation found for accessibility_quick_settings_bluetooth (5749054971341882340) -->
     <skip />
+    <!-- no translation found for accessibility_quick_settings_location (4577282329866813100) -->
+    <skip />
     <!-- no translation found for accessibility_quick_settings_alarm (3959908972897295660) -->
     <skip />
     <!-- no translation found for data_usage_disabled_dialog_3g_title (5257833881698644687) -->
@@ -298,6 +300,8 @@
     <skip />
     <!-- no translation found for gps_notification_found_text (4619274244146446464) -->
     <skip />
+    <!-- no translation found for accessibility_location_active (2427290146138169014) -->
+    <skip />
     <!-- no translation found for accessibility_clear_all (5235938559247164925) -->
     <skip />
     <!-- no translation found for status_bar_notification_inspect_item_title (1163547729015390250) -->
@@ -308,7 +312,7 @@
     <skip />
     <!-- no translation found for accessibility_rotation_lock_on_portrait (5809367521644012115) -->
     <skip />
-    <!-- no translation found for jelly_bean_dream_name (5992026543636816792) -->
+    <!-- no translation found for dessert_case (1295161776223959221) -->
     <skip />
     <!-- no translation found for start_dreams (7219575858348719790) -->
     <skip />
@@ -332,6 +336,10 @@
     <skip />
     <!-- no translation found for quick_settings_rotation_locked_label (8058646447242565486) -->
     <skip />
+    <!-- no translation found for quick_settings_rotation_locked_portrait_label (1553131290066230775) -->
+    <skip />
+    <!-- no translation found for quick_settings_rotation_locked_landscape_label (7216265671276086593) -->
+    <skip />
     <!-- no translation found for quick_settings_ime_label (7073463064369468429) -->
     <skip />
     <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
@@ -358,20 +366,41 @@
     <skip />
     <!-- no translation found for quick_settings_wifi_off_label (7558778100843885864) -->
     <skip />
-    <!-- no translation found for quick_settings_wifi_display_label (6893592964463624333) -->
-    <skip />
-    <!-- no translation found for quick_settings_wifi_display_no_connection_label (2355298740765736918) -->
+    <!-- no translation found for quick_settings_remote_display_no_connection_label (372107699274391290) -->
     <skip />
     <!-- no translation found for quick_settings_brightness_dialog_title (8599674057673605368) -->
     <skip />
     <!-- no translation found for quick_settings_brightness_dialog_auto_brightness_label (5064982743784071218) -->
     <skip />
-    <!-- no translation found for status_bar_help_title (1199237744086469217) -->
+    <!-- no translation found for quick_settings_inversion_label (1666358784283020762) -->
     <skip />
-    <!-- no translation found for status_bar_help_text (7874607155052076323) -->
+    <!-- no translation found for quick_settings_contrast_label (3319507551689108692) -->
     <skip />
-    <!-- no translation found for hideybar_confirmation_message (9050869548951044371) -->
+    <!-- no translation found for quick_settings_color_space_label (853443689745584770) -->
     <skip />
-    <!-- no translation found for hideybar_confirmation_message_long (7117692795163620626) -->
+    <!-- no translation found for recents_empty_message (2269156590813544104) -->
+    <skip />
+    <!-- no translation found for recents_app_info_button_label (2890317189376000030) -->
+    <skip />
+    <!-- no translation found for recents_search_bar_label (8074997400187836677) -->
+    <skip />
+    <!-- no translation found for ssl_ca_cert_warning (9005954106902053641) -->
+    <skip />
+    <!-- no translation found for description_target_search (3091587249776033139) -->
+    <skip />
+    <!-- no translation found for description_direction_up (7169032478259485180) -->
+    <skip />
+    <!-- no translation found for description_direction_left (7207478719805562165) -->
+    <skip />
+    <!-- no translation found for zen_mode_notification_title:one (7809876956258040354) -->
+    <!-- no translation found for zen_mode_notification_title:other (7388721375827338153) -->
+    <!-- no translation found for zen_mode_notification_text (8336623711388065713) -->
+    <skip />
+    <!-- no translation found for zen_mode_title (8793432092004749188) -->
+    <skip />
+    <!-- no translation found for keyguard_more_overflow_text:other (9180696159506883684) -->
+    <!-- no translation found for notification_tap_again (7590196980943943842) -->
+    <skip />
+    <!-- no translation found for keyguard_unlock (8043466894212841998) -->
     <skip />
 </resources>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index 42e2d48..5c9764a 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Permiteţi întotdeauna de pe acest computer"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zoom pt. a umple ecranul"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Înt. pt. a umple ecranul"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom de compatibilitate"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Atunci când o aplicaţie a fost concepută pentru un ecran mai mic, o comandă pentru mărire/micşorare va apărea alături de ceas."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Se salv. captura de ecran..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Se salvează captura de ecran..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Captura de ecran este salvată."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Ecranul de pornire"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Meniu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Aplicaţii recente"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Căutați"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Cameră foto"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Buton pentru comutarea metodei de introducere."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Buton zoom pentru compatibilitate."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Faceţi zoom de la o imagine mai mică la una mai mare."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterie <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Mod Avion <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Locație: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmă setată pentru <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Datele 2G-3G au fost dezactivate"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Datele 4G au fost dezactivate"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi conectat"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Se caută GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Locaţie setată prin GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Solicitări locație active"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Ștergeţi toate notificările."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informaţii despre aplicaţie"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ecranul se va roti în mod automat."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ecranul este blocat în orientarea de tip peisaj."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ecranul este blocat în orientarea de tip portret."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Vitrina cu dulciuri"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Mod Avion"</string>
@@ -181,11 +183,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Luminozitate"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotire automată"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotire blocată"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Blocat la afișarea „portret”"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Blocat la afișarea „peisaj”"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Metodă de introducere"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Locație"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Localizarea este dezactivată"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Dispozitiv media"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Numai apeluri de urgenţă"</string>
@@ -196,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Neconectat"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Nicio reţea"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi deconectat"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Afişaj Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Ecran wireless"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Ecran de afișare a transmisiunii"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Luminozitate"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMAT"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Notificările se afişează aici"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Accesaţi-le oricând glisând în jos.\nGlisaţi în jos din nou pentru comenzile sistemului."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Glisați dinspre marginea ecranului pentru a afișa bara"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Glisați dinspre marginea ecranului pentru a afișa bara de sistem"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Mod de inversare a culorilor"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mod contrast îmbunătățit"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mod de corectare a culorilor"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"RECENTE"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informații despre aplicație"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"căutare"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Rețeaua poate\nfi monitorizată"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Căutaţi"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Glisaţi în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Glisaţi spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Notificare ascunsă"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d de notificări ascunse"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Atingeți pentru a afișa"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Nu deranjaţi"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Încă %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Atingeți din nou pentru a deschide"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Glisați în sus pentru a debloca"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index 233fee8a8..976a793 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Всегда разрешать отладку с этого компьютера"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Подогнать по размерам экрана"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Растянуть на весь экран"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Масштаб и совместимость"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Если приложение рассчитано на экран меньших размеров, рядом с часами появятся средства масштабирования."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Сохранение..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Сохранение..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Сохранение..."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Домой"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Недавние приложения"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Поиск"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка переключения способа ввода."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка масштабирования (режим совместимости)"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Уменьшение изображения для увеличения свободного места на экране."</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батарея: <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Режим полета <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Доступ к геоданным <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Будильник установлен на <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Передача данных по каналам 2G и 3G отключена"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Передача данных по каналу 4G отключена"</string>
@@ -166,30 +167,29 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi подключено"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Поиск GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Координаты по GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Есть активные запросы на определение местоположения"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Удалить все уведомления"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"О приложении"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Экран будет поворачиваться автоматически."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Выбрана только альбомная ориентация экрана."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Выбрана только книжная ориентация экрана."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Коробка со сладостями"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Заставка"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим полета"</string>
     <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <!-- String.format failed for translation -->
-    <!-- no translation found for quick_settings_battery_charged_label (8865413079414246081) -->
-    <skip />
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"100%%"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth выкл."</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яркость"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Автоповорот"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Автоповорот выкл."</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Только вертикально"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Только горизонтально"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Способ ввода"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Передача геоданных"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Местоположение выкл."</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Режим медиа"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Экстр. вызов"</string>
@@ -200,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Нет соединения"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нет сети"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi выкл."</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Проектор Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Wi-Fi-монитор"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Wi-Fi-монитор"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яркость"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТОНАСТРОЙКА"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Это панель уведомлений"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Ее можно открыть, пролистнув экран вниз.\nЧтобы открыть настройки, проведите пальцем вниз ещё раз."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Чтобы открыть панель, проведите пальцем от края к центру экрана"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Чтобы открыть панель навигации, проведите пальцем от края к центру экрана"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Инверсия цвета"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Контрастность"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Коррекция цвета"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"НЕДАВНИЕ СООБЩЕНИЯ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Сведения о приложении"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"поиск"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Действия в сети\nмогут отслеживаться"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Поиск"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Проведите вверх, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Проведите влево, чтобы <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Оповещение скрыто"</item>
+    <item quantity="other" msgid="7388721375827338153">"Скрыто оповещений: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Нажмите, чтобы открыть"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Не беспокоить"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Ещё %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Нажмите ещё раз, чтобы открыть"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Для разблокировки проведите пальцем по экрану"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-si-land/strings.xml b/packages/SystemUI/res/values-si-land/strings.xml
new file mode 100644
index 0000000..b5aba2a
--- /dev/null
+++ b/packages/SystemUI/res/values-si-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"තිරය දැන් තිරස් දිශානතිය අගුළු දමා ඇත."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-si-rLK-land/strings.xml b/packages/SystemUI/res/values-si-rLK-land/strings.xml
new file mode 100644
index 0000000..b5aba2a
--- /dev/null
+++ b/packages/SystemUI/res/values-si-rLK-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"තිරය දැන් තිරස් දිශානතිය අගුළු දමා ඇත."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..24accd1
--- /dev/null
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"පද්ධති UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"හිස් කරන්න"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ලැයිස්තුවෙන් ඉවත් කරන්න"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"යෙදුම් තොරතුරු"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"මෑත උපාංග නැත"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"මෑත යෙදුම් ඉවතලන්න"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"මෑත යෙදුම් 1 ක්"</item>
+    <item quantity="other" msgid="1040784359794890744">"මෑත යෙදුම් %d ක්"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"දැනුම්දීම් නැත"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"දැනට පවතින"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"දැනුම්දීම්"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"අරෝපකයට සම්බන්ධ කරන්න"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"බැටරිය අඩු වෙමින් පවතී."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> ක් ඉතිරියි"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB ආරෝපණය සහය නොදක්වයි.\nසපයන ලද ආරෝපකය පමණක් භාවිතා කරන්න."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"බැටරි භාවිතය"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"සැකසීම්"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"අහස්යානා ආකාරය"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"ස්වයංක්‍රීයව-භ්‍රමණය වන තිරය"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"නිශ්ශබ්ද කරන්න"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ස්වයංක්‍රීය"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"දැනුම්දීම්"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"බ්ලූටූත් ටෙදර් කරා"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ආදාන ක්‍රම සකසන්න"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"භෞතික යතුරු පුවරුව"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB උපාංගය ප්‍රවේශ කිරීමට <xliff:g id="APPLICATION">%1$s</xliff:g> යෙදුමට අවසර දෙනවාද?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"USB මෙවලම ප්‍රවේශ කිරීමට <xliff:g id="APPLICATION">%1$s</xliff:g> යෙදුමට අවසර දෙනවාද?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"මෙම USB උපාංගය සම්බන්ධ විට <xliff:g id="ACTIVITY">%1$s</xliff:g> විවෘත කරන්නද?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"මෙම USB මෙවලමට සම්බන්ධ වී ඇති විට <xliff:g id="ACTIVITY">%1$s</xliff:g> විවෘත කරන්නද?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"මෙම USB මෙවලම සමග ක්‍රියා කරන ස්ථාපිත යෙදුම් නොමැත. <xliff:g id="URL">%1$s</xliff:g> වලින් මෙම මෙවලම ගැන තව දැනගන්න"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB මෙවලම"</string>
+    <string name="label_view" msgid="6304565553218192990">"පෙනුම"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"මෙම USB උපාංගය සඳහා සුපුරුද්දෙන් භාවිතා කරන්න"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"මේ USB මෙවලම සඳහා සුපුරුද්දෙන් භාවිතා කරන්න."</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"USB නිදොස්කරණයට අවසර දෙනවද?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"මෙම පරිගණකයේ RSA යතුරු ඇඟිලි සටහන වන්නේ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"සැම විටම මෙම පරිගණකයෙන් ඉඩ ලබා දෙන්න"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"තිරය පිරවීමට විශාලනය කරන්න"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"තිරය පිරවීමට අදින්න"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"තිර රුව සුරකිමින්…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"තිර රුව සුරැකෙමින් පවතී…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"තිර රුව සුරැකෙමින් පවතී."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"තිර රුව ග්‍රහණය කරන ලදි."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"ඔබගේ තිර රුව බැලීමට ස්පර්ශ කරන්න."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"තිර රුව ග්‍රහණය කිරීමට නොහැකි විය."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"තිර රුව සුරැකීමට නොහැකි විය. ආචයනය භාවිතාවේ තිබෙනවා විය හැක."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB ගොනු හුවමාරු විකල්ප"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"මධ්‍ය ධාවකයක් (MTP) ලෙස සවි කරන්න"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"කැමරාවක් (PTP) ලෙස සවි කරන්න"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac සඳහා Android ගොනු හුවමාරු යෙදුම ස්ථාපනය කරන්න"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"ආපසු"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"මුල් පිටුව"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"මෙනුව"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"මෑත යෙදුම්"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ආදාන ක්‍රමය මාරු කිරීමේ බොත්තම."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ගැළපෙන විශාලන බොත්තම."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"විශාල තිරය වෙත කුඩාව විශාලනය කරන්න."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"බ්ලූටූත් සම්බන්ධිතයි."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"බ්ලූටූත් විසන්ධි කර ඇත."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"බැටරිය නැත."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"බැටරිය තීරු එකයි."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"බැටරිය තීරු දෙකයි."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"බැටරිය තීරු තුනයි."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"බැටරිය පිරී ඇත."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"දුරකථනයක් නැත."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"දුරකථනය තීරු එකයි."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"දුරකථනය තීරු දෙකයි."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"දුරකථනය තීරු තුනයි."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"දුරකථනයේ සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"දත්ත නැත."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"දත්ත තීරු එකයි."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"දත්ත තීරු 2."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"දත්ත තීරු 3."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"දත්ත සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi අක්‍රියයි."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi සම්බන්ධ කර නොමැත."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi තීරු එකයි."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi තීරු දෙකයි."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi තීරු තුනයි."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wifi සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX නැත."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX තීරු එකයි."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX තීරු දෙකයි."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX තීරු තුනයි."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"සංඥා නැත."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"සම්බන්ධ වී නැත."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"තීරු ශුන්‍යයි."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"තීරු එක."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"තීරු දෙකයි."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"තීරු තුනයි."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"සක්‍රීයයි."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"අක්‍රිය කරන්න."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"සම්බන්ධිතයි."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"රෝමිං"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM නැත."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"බ්ලූටූත් ටෙදරින්."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"අහස්යානා ආකාරය."</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"බැටරි ප්‍රතිශතය <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"පද්ධති සැකසීම්."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"දැනුම්දීම්."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"දැනුම්දීම හිස් කරන්න."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS සබල කර ඇත."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS ලබා ගනිමින්."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ක්‍රියාත්මකයි."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"හඬ නඟනය කම්පනය වේ."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"හඬ නඟනය නිශ්ශබ්දයි."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> අස් කර ඇත."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"දැනුම්දීම නිෂ්ප්‍රභා කරඇත."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"දැනුම්දීම් ආවරණය."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ක්ෂණික සැකසීම්."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"මෑත කාලීන යෙදුම්."</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"පරිශීලකයා <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"ජංගම <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"බැටරිය <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"අහස්යානා ආකාරය <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"බ්ලූටූත් <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"<xliff:g id="TIME">%s</xliff:g> සඳහා සීනුව සකස් කර ඇත."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G දත්ත අබල කරන ලදි"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"ජංගම දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"ඔබ නියමිත දත්ත භාවිත සීමාවට ළඟා වී ඇත.\n\nඔබ දත්ත නැවත සබල කළහොත් වාහකයා ඔබගෙන් ඇතැම් විට අය කරගත හැක."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"නැවත දත්ත සබල කරන්න"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"අන්තර්ජාල සම්බන්ධතාවයක් නැත"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi සම්බන්ධිතයි"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS සඳහා සොයමින්"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS මඟින් ස්ථානය සකසා ඇත"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"පිහිටීම් ඉල්ලීම් සක්‍රියයි"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"සියලු දැනුම්දීම් හිස් කරන්න."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"යෙදුම් තොරතුරු"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"තිරය ස්වයංක්‍රීයව කරකැවේ."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"තිරය තිරස් දිශානතියෙහි අගුළු දමා ඇත."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"තිරය සිරස් දිශානතිය තුළ අගුළු වැටී ඇත."</string>
+    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"දවල් හීනය"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"ඊතර නෙට්"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"අහස්යානා ආකාරය"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"ආරෝපණය වෙමින්, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"අරෝපිතයි"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"බ්ලූටූත්"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"බ්ලූටූත් (උපාංග <xliff:g id="NUMBER">%d</xliff:g>)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"බ්ලූටූත් අක්‍රියයි"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"දීප්තිය"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ස්වයංක්‍රීය කරකැවීම"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"භ්‍රමණය අගුළු දමා ඇත"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"ආදාන ක්‍රමය"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"ස්ථානය"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"ස්ථානය අක්‍රියයි"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"මාධ්‍ය උපාංගය"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"හදිසි ඇමතුම් පමණි"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"සැකසීම්"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"වේලාව"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"මම"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"සම්බන්ධ වී නොමැත"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ජාලයක් නැත"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi අක්‍රියයි"</string>
+    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi සංදර්ශකය"</string>
+    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"නොරැහැන් සංදර්ශකය"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"දීප්තිමත් බව"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ස්වයංක්‍රීය"</string>
+    <string name="ssl_ca_cert_warning" msgid="5848402127455021714">"ඇතැම් විට ජාලය නිරීක්ෂණය විය හැක"</string>
+    <string name="done_button" msgid="1759387181766603361">"හරි"</string>
+    <string name="ssl_ca_cert_dialog_title" msgid="1273796967092027291">"ජාල නිරීක්ෂණය කිරීම"</string>
+    <string name="ssl_ca_cert_info_message" msgid="5430320539555358452">"මෙම උපාංගය කළමනාකරණය කරනුයේ: <xliff:g id="MANAGING_DOMAIN">%s</xliff:g>.\n\nඔබගේ පරිපාලකයා ඊ-තැපැල්, යෙදුම්, සහ ආරක්‍ෂිත වෙබ් අඩවි ඇතුළුව ඔබගේ ජාල ක්‍රියාකාරකම් නිරීක්ෂණය කිරීමට හැකියාව ඇත.\n\nවැඩි විස්තර සඳහා, ඔබේ පරිපාලකයා සම්බන්ධ කරගන්න."</string>
+    <string name="ssl_ca_cert_warning_message" msgid="2033091656129963669">"තුන්වන පාර්ශවයකට ඔබගේ ජාලය නිරීක්ෂණය කිරීමට හැකියාව ඇත\nක්‍රියාකාරකම්, ඊ-තැපැල්, යෙදුම් සහ ආරක්‍ෂිත වෙබ් අඩවි ඇතුළුව.\n\nඔබගේ උපාංගය මත ස්ථාපිත විශ්වාසදයී අක්තපත්‍ර මෙය සිදුවීමේ හැකියාව ඇතිකරයි."</string>
+    <string name="ssl_ca_cert_settings_button" msgid="7946956977377166709">"විශ්වාසදායී අක්තපත්‍ර පරික්ෂා කරන්න"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml
new file mode 100644
index 0000000..f28cd16
--- /dev/null
+++ b/packages/SystemUI/res/values-si/strings.xml
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"පද්ධති UI"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"හිස් කරන්න"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ලැයිස්තුවෙන් ඉවත් කරන්න"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"යෙදුම් තොරතුරු"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"මෑත උපාංග නැත"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"මෑත යෙදුම් ඉවතලන්න"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"මෑත යෙදුම් 1 ක්"</item>
+    <item quantity="other" msgid="1040784359794890744">"මෑත යෙදුම් %d ක්"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"දැනුම්දීම් නැත"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"දැනට පවතින"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"දැනුම්දීම්"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"අරෝපකයට සම්බන්ධ කරන්න"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"බැටරිය අඩු වෙමින් පවතී."</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"<xliff:g id="NUMBER">%d%%</xliff:g> ක් ඉතිරියි"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"USB ආරෝපණය සහය නොදක්වයි.\nසපයන ලද ආරෝපකය පමණක් භාවිතා කරන්න."</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"බැටරි භාවිතය"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"සැකසීම්"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"අහස්යානා ආකාරය"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"ස්වයංක්‍රීයව-භ්‍රමණය වන තිරය"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"නිශ්ශබ්ද කරන්න"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"ස්වයංක්‍රීය"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"දැනුම්දීම්"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"බ්ලූටූත් ටෙදර් කරා"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ආදාන ක්‍රම සකසන්න"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"භෞතික යතුරු පුවරුව"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"USB උපාංගය ප්‍රවේශ කිරීමට <xliff:g id="APPLICATION">%1$s</xliff:g> යෙදුමට අවසර දෙනවාද?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"USB මෙවලම ප්‍රවේශ කිරීමට <xliff:g id="APPLICATION">%1$s</xliff:g> යෙදුමට අවසර දෙනවාද?"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"මෙම USB උපාංගය සම්බන්ධ විට <xliff:g id="ACTIVITY">%1$s</xliff:g> විවෘත කරන්නද?"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"මෙම USB මෙවලමට සම්බන්ධ වී ඇති විට <xliff:g id="ACTIVITY">%1$s</xliff:g> විවෘත කරන්නද?"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"මෙම USB මෙවලම සමග ක්‍රියා කරන ස්ථාපිත යෙදුම් නොමැත. <xliff:g id="URL">%1$s</xliff:g> වලින් මෙම මෙවලම ගැන තව දැනගන්න"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB මෙවලම"</string>
+    <string name="label_view" msgid="6304565553218192990">"පෙනුම"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"මෙම USB උපාංගය සඳහා සුපුරුද්දෙන් භාවිතා කරන්න"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"මේ USB මෙවලම සඳහා සුපුරුද්දෙන් භාවිතා කරන්න."</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"USB නිදොස්කරණයට අවසර දෙනවද?"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"මෙම පරිගණකයේ RSA යතුරු ඇඟිලි සටහන වන්නේ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"සැම විටම මෙම පරිගණකයෙන් ඉඩ ලබා දෙන්න"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"තිරය පිරවීමට විශාලනය කරන්න"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"තිරය පිරවීමට අදින්න"</string>
+    <string name="compat_mode_help_header" msgid="7969493989397529910">"ගැළපෙන විශාලනය"</string>
+    <string name="compat_mode_help_body" msgid="4946726776359270040">"කුඩා තිරයක් සඳහා යෙදුමක් නිර්මාණය කළ විට, විශාලනය පාලකය ඔරලෝසුව ළඟින් පෙන්වයි."</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"තිර රුව සුරකිමින්…"</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"තිර රුව සුරැකෙමින් පවතී…"</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"තිර රුව සුරැකෙමින් පවතී."</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"තිර රුව ග්‍රහණය කරන ලදි."</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"ඔබගේ තිර රුව බැලීමට ස්පර්ශ කරන්න."</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"තිර රුව ග්‍රහණය කිරීමට නොහැකි විය."</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"තිර රුව සුරැකීමට නොහැකි විය. ආචයනය භාවිතාවේ තිබෙනවා විය හැක."</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB ගොනු හුවමාරු විකල්ප"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"මධ්‍ය ධාවකයක් (MTP) ලෙස සවි කරන්න"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"කැමරාවක් (PTP) ලෙස සවි කරන්න"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac සඳහා Android ගොනු හුවමාරු යෙදුම ස්ථාපනය කරන්න"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"ආපසු"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"මුල් පිටුව"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"මෙනුව"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"මෑත යෙදුම්"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ආදාන ක්‍රමය මාරු කිරීමේ බොත්තම."</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ගැළපෙන විශාලන බොත්තම."</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"විශාල තිරය වෙත කුඩාව විශාලනය කරන්න."</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"බ්ලූටූත් සම්බන්ධිතයි."</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"බ්ලූටූත් විසන්ධි කර ඇත."</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"බැටරිය නැත."</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"බැටරිය තීරු එකයි."</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"බැටරිය තීරු දෙකයි."</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"බැටරිය තීරු තුනයි."</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"බැටරිය පිරී ඇත."</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"දුරකථනයක් නැත."</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"දුරකථනය තීරු එකයි."</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"දුරකථනය තීරු දෙකයි."</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"දුරකථනය තීරු තුනයි."</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"දුරකථනයේ සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"දත්ත නැත."</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"දත්ත තීරු එකයි."</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"දත්ත තීරු 2."</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"දත්ත තීරු 3."</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"දත්ත සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"Wifi අක්‍රියයි."</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"Wifi සම්බන්ධ කර නොමැත."</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"Wifi තීරු එකයි."</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"Wifi තීරු දෙකයි."</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi තීරු තුනයි."</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"Wifi සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"WiMAX නැත."</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX තීරු එකයි."</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX තීරු දෙකයි."</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX තීරු තුනයි."</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"සංඥා නැත."</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"සම්බන්ධ වී නැත."</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"තීරු ශුන්‍යයි."</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"තීරු එක."</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"තීරු දෙකයි."</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"තීරු තුනයි."</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"සංඥාව පිරී ඇත."</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"සක්‍රීයයි."</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"අක්‍රිය කරන්න."</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"සම්බන්ධිතයි."</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"රෝමිං"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"SIM නැත."</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"බ්ලූටූත් ටෙදරින්."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"අහස්යානා ආකාරය."</string>
+    <string name="accessibility_battery_level" msgid="7451474187113371965">"බැටරි ප්‍රතිශතය <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="accessibility_settings_button" msgid="799583911231893380">"පද්ධති සැකසීම්."</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"දැනුම්දීම්."</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"දැනුම්දීම හිස් කරන්න."</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS සබල කර ඇත."</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS ලබා ගනිමින්."</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter ක්‍රියාත්මකයි."</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"හඬ නඟනය කම්පනය වේ."</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"හඬ නඟනය නිශ්ශබ්දයි."</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"<xliff:g id="APP">%s</xliff:g> අස් කර ඇත."</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"දැනුම්දීම නිෂ්ප්‍රභා කරඇත."</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"දැනුම්දීම් ආවරණය."</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ක්ෂණික සැකසීම්."</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"මෑත කාලීන යෙදුම්."</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"පරිශීලකයා <xliff:g id="USER">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"ජංගම <xliff:g id="SIGNAL">%1$s</xliff:g>. <xliff:g id="TYPE">%2$s</xliff:g>. <xliff:g id="NETWORK">%3$s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"බැටරිය <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"අහස්යානා ආකාරය <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"බ්ලූටූත් <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"<xliff:g id="TIME">%s</xliff:g> සඳහා සීනුව සකස් කර ඇත."</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G දත්ත අබල කරන ලදි"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"ජංගම දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"දත්ත අබල කර ඇත"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"ඔබ නියමිත දත්ත භාවිත සීමාවට ළඟා වී ඇත.\n\nඔබ දත්ත නැවත සබල කළහොත් වාහකයා ඔබගෙන් ඇතැම් විට අය කරගත හැක."</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"නැවත දත්ත සබල කරන්න"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"අන්තර්ජාල සම්බන්ධතාවයක් නැත"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi සම්බන්ධිතයි"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS සඳහා සොයමින්"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS මඟින් ස්ථානය සකසා ඇත"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"පිහිටීම් ඉල්ලීම් සක්‍රියයි"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"සියලු දැනුම්දීම් හිස් කරන්න."</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"යෙදුම් තොරතුරු"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"තිරය ස්වයංක්‍රීයව කරකැවේ."</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"තිරය තිරස් දිශානතියෙහි අගුළු දමා ඇත."</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"තිරය සිරස් දිශානතිය තුළ අගුළු වැටී ඇත."</string>
+    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"දවල් හීනය"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"ඊතර නෙට්"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"අහස්යානා ආකාරය"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"ආරෝපණය වෙමින්, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"අරෝපිතයි"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"බ්ලූටූත්"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"බ්ලූටූත් (උපාංග <xliff:g id="NUMBER">%d</xliff:g>)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"බ්ලූටූත් අක්‍රියයි"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"දීප්තිය"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"ස්වයංක්‍රීය කරකැවීම"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"භ්‍රමණය අගුළු දමා ඇත"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"ආදාන ක්‍රමය"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"ස්ථානය"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"ස්ථානය අක්‍රියයි"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"මාධ්‍ය උපාංගය"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"හදිසි ඇමතුම් පමණි"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"සැකසීම්"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"වේලාව"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"මම"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"සම්බන්ධ වී නොමැත"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ජාලයක් නැත"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi අක්‍රියයි"</string>
+    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi සංදර්ශකය"</string>
+    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"නොරැහැන් සංදර්ශකය"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"දීප්තිමත් බව"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"ස්වයංක්‍රීය"</string>
+    <string name="status_bar_help_title" msgid="1199237744086469217">"දැනුම්දීම් මෙතන පෙන්නුම් කරයි"</string>
+    <string name="status_bar_help_text" msgid="7874607155052076323">"පහලට සර්පණය කිරීමෙන් ඕනෑම වෙලාවක ඒවා වෙත පිවිසෙන්න.\nපද්ධති පාලක සඳහා නැවත පහළට සර්පණය කරන්න."</string>
+</resources>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index c54540c..1224c3a 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -24,7 +24,7 @@
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Odstrániť zo zoznamu"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informácie o aplikácii"</string>
     <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Žiadne nedávne aplikácie"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Odmietnuť nové aplikácie"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Zatvoriť nedávne aplikácie"</string>
   <plurals name="status_bar_accessibility_recent_apps">
     <item quantity="one" msgid="5854176083865845541">"1 nová aplikácia"</item>
     <item quantity="other" msgid="1040784359794890744">"Počet nových aplikácií: %d"</item>
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Vždy povoliť z tohto počítača"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Priblížiť na celú obrazovku"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Na celú obrazovku"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Úprava veľkosti z dôvodu kompatibility"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Ak je aplikácia navrhnutá pre menšiu obrazovku, zobrazí sa vedľa hodín ovládací prvok priblíženia."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Prebieha ukladanie snímky obrazovky..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Prebieha ukladanie snímky obrazovky..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Snímka obrazovky sa ukladá."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Plocha"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Nové aplikácie"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Hľadať"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparát"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Tlačidlo prepnutia metódy vstupu."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Tlačidlo úpravy veľkosti z dôvodu kompatibility."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zväčšiť menší obrázok na väčšiu obrazovku."</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batéria: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Režim V lietadle: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Poloha: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Budík nastavený na <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Dátové prenosy 2G a 3G sú zakázané"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Dátové prenosy 4G sú zakázané"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi: pripojené"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Vyhľadávanie satelitov GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Poloha nastavená pomocou GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Žiadosti o polohu sú aktívne"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Vymazať všetky upozornenia."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Informácie o aplikácii"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Obrazovka sa automaticky otočí."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Obrazovka je uzamknutá v orientácii na šírku."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Obrazovka je uzamknutá v orientácii na výšku."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Pult s dezertami"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Šetrič obrazovky"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Režim V lietadle"</string>
@@ -183,6 +185,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Jas"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Automatické otáčanie"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Otáčanie uzamknuté"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Uzamknuté na výšku"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Uzamknuté na šírku"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Metóda vstupu"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Poloha"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Poloha vypnutá"</string>
@@ -196,12 +200,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Nepripojené"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Žiadna sieť"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Sieť Wi-Fi je vypnutá"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Obrazovka Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Bezdrôtový displej"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Vzdialená obrazovka"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Jas"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATICKY"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Tu sa zobrazujú upozornenia"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Môžete ich kedykoľvek zobraziť tak, že posuniete prstom nadol.\nAk posuniete prstom nadol ešte raz, zobrazia sa ovládacie prvky systému."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Panel zobrazíte posunutím cez okraj obrazovky"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Systémový panel zobrazíte posunutím cez okraj obrazovky"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Režim prevrátenia farieb"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Režim zvýšeného kontrastu"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Režim korekcie farieb"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"NEDÁVNE"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Informácie o aplikácii"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"hľadať"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Sieť môže byť\nmonitorovaná"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Vyhľadávanie"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Prejdite prstom nahor: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Prejdite prstom doľava: <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Upozornenie bolo skryté"</item>
+    <item quantity="other" msgid="7388721375827338153">"Skryté upozornenia: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Upozornenie zobrazíte dotykom"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Nerušiť"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d ďalších"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Upozornenie otvoríte opätovným klepnutím"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Zariadenie odomknete prejdením prstom nahor"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index 3fc4882..10011bc 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Vedno dovoli iz tega računalnika"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Povečava čez cel zaslon"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Raztegnitev čez zaslon"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Razširitev združljivosti"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Če je program izdelan za manjše zaslone, se ob uri pokaže kontrolnik za povečavo."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Shranjev. posnetka zaslona ..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Shranjevanje posnetka zaslona ..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Shranjevanje posnetka zaslona."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Začetni zaslon"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Meni"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Nedavni programi"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Iskanje"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Fotoaparat"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Gumb za preklop načina vnosa."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Gumb povečave za združljivost."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Povečava manjšega na večji zaslon."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Baterija: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Letalski način: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Lokacija: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm je nastavljen na <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Podatki 2G-3G so onemogočeni"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Podatki 4G so onemogočeni"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi povezan"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Iskanje GPS-a"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokacija nastavljena z GPS-om"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Aktivne zahteve za lokacijo"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Izbriši vsa obvestila."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Podatki o aplikaciji"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Zaslon se bo samodejno zasukal."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Zaslon je zaklenjen v ležeči usmerjenosti."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Zaslon je zaklenjen v pokončni usmerjenosti."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Vitrina za sladice"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Sanjarjenje"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Način za letalo"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Svetlost"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Samodejno vrtenje"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Zaklenjeno vrtenje"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Zaklenjeno na pokončno postavitev"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Zaklenjeno na ležečo postavitev"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Način vnosa"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Lokacija"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Lokacija izklopljena"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Povezava ni vzpostavljena"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ni omrežja"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi izklopljen"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Zaslon Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Prikaz brezžičnih naprav"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Zaslon za predvajanje"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Svetlost"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"SAMODEJNO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Obvestila so prikazana tukaj"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Do njih lahko kadar koli dostopate tako, da povlečete navzdol.\nZa prikaz sistemskih kontrolnikov znova povlecite navzdol."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Vrstico prikažete tako, da povlečete z roba zaslona"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Sistemsko vrstico prikažete tako, da povlečete z roba zaslona"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Način inverzije barv"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Način izboljšanega kontrasta"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Način popravljanja barv"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"NEDAVNI"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Podatki o aplikaciji"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"iskanje"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Omrežje je\nlahko spremljano"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Iskanje"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Povlecite navzgor za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Povlecite v levo za <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Obvestilo je skrito"</item>
+    <item quantity="other" msgid="7388721375827338153">"Skritih je toliko obvestil: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Dotaknite se za prikaz"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Ne moti"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"še %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Znova se dotaknite, da odprete"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Povlecite, da odklenete"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 7ba2da5..0c6a939 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Увек дозволи са овог рачунара"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Зумирај на целом екрану"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Развуци на цео екран"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Компатибилно зумирање"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Када је апликација намењена мањем екрану, контрола зумирања приказује се поред сата."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Чување снимка екрана..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Чување снимка екрана..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Снимак екрана се чува."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Почетна"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Мени"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Недавне апликације"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Претражите"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Дугме Промени метод уноса."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Дугме Зум компатибилности."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Зумирање са мањег на већи екран."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Батерија: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Режим рада у авиону: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Локација је <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Аларм је подешен за <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G–3G подаци су онемогућени"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G подаци су онемогућени"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi је повезан"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Тражи се GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Локацију је подесио GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Има активних захтева за локацију"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Обриши сва обавештења."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Информације о апликацији"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екран ће се аутоматски ротирати."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екран је закључан у хоризонталном положају."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екран је закључан у вертикалном положају."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Витрина са посластицама"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Сањарење"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Етернет"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим рада у авиону"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Осветљеност"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Аутоматско ротирање"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Ротирање је закључано"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Закључано на Усправно"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Закључано на Водоравно"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод уноса"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Локација"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Локација је искључена"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Веза није успостављена"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Нема мреже"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi је искључен"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi екран"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Бежични екран"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Пребаци екран"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Осветљеност"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АУТОМАТСКА"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Обавештења се појављују овде"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Приступите им у било ком тренутку листањем надоле.\nПоново листајте надоле да би се приказале системске контроле."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Превуците по ивици екрана да би се приказала трака"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Превуците од ивице екрана да би се приказала системска трака"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Режим инверзије боје"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Режим унапређеног контраста"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Режим корекције боје"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"НАЈНОВИЈЕ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Информације о апликацији"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"претражи"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мрежа се можда\nнадгледа"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Претрага"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Превуците нагоре за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Превуците улево за <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Обавештење је сакривено"</item>
+    <item quantity="other" msgid="7388721375827338153">"Сакривена обавештења: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Додирните за приказ"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Не узнемиравај"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Још %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Додирните поново да бисте отворили"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Превуците нагоре да бисте откључали"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index 022e2f2..d8bd1b1 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -23,7 +23,7 @@
     <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ta bort"</string>
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Ta bort från listan"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Info om appen"</string>
-    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Inga nya appar"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Inga aktiva appar"</string>
     <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Avvisa nya appar"</string>
   <plurals name="status_bar_accessibility_recent_apps">
     <item quantity="one" msgid="5854176083865845541">"1 ny app"</item>
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Tillåt alltid på den här datorn"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Zooma för att fylla skärm"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Dra för att fylla skärmen"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom i kompatibilitetsläge"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"När en app är anpassad för en mindre skärm visas ett zoomreglage vid klockan."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Skärmdumpen sparas ..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Skärmdumpen sparas ..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Skärmdumpen sparas."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Startsida"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Meny"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Senaste apparna"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Sök"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Knapp för byte av inmatningsmetod."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Knapp för kompatibilitetszoom."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Zooma mindre skärm till större."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Batteri <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Flygplansläge <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Plats <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarmet ringer <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data via 2G-3G har inaktiverats"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data via 4G har inaktiverats"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi-ansluten"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Sökning efter GPS pågår"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Platsen har identifierats av GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Det finns aktiva platsbegäranden"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Ta bort alla meddelanden."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Info om appen"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skärmen roteras automatiskt."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Bildskärmens riktning är nu låst i liggande format."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Bildskärmens riktning är nu låst i stående format."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessertdisken"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Dagdröm"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Flygplansläge"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ljusstyrka"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Rotera automatiskt"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Rotationen har låsts"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Låst i stående läge"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Låst i liggande läge"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Inmatningsmetod"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Plats"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Plats har inaktiverats"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ej ansluten"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Inget nätverk"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi av"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi-skärm"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Trådlös skärm"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Överför skärmen"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ljusstyrka"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Meddelanden visas här"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Du kommer åt dem när som helst genom att dra nedåt.\nDra nedåt igen om du vill visa systemkontroller."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Dra från kanten av skärmen om du vill visa fältet"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Dra från kanten av skärmen om du vill visa systemfältet"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Färginverteringsläge"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Kontrastförbättringsläge"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Färgkorrigeringsläge"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"NYA"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Appinformation"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"sök"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Nätverket kan\nvara övervakat"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Sök"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Dra uppåt för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Dra åt vänster för <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Aviseringen har dolts"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d aviseringar har dolts"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Tryck här om du vill visa aviseringar"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Stör ej"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d till"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Tryck igen för att öppna"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Dra uppåt om du vill låsa upp"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 27f556c..d308b518 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -59,8 +59,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Ruhusu kutoka kwenye kompyuta hii kila wakati"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Kuza ili kujaza skrini"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Tanua ili kujaza skrini"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Kukuza kwa Utangamanifu"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Wakati programu ilibuniwa kwa skrini ndogo, kidhibiti cha kukuza kitaonekana kwa saa."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Inahifadhi picha ya skrini..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Inahifadhi picha ya skrini..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Picha ya skrini inahifadhiwa"</string>
@@ -76,6 +74,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Nyumbani"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menyu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Programu za hivi karibuni"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Tafuta"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Swichi kitufe cha mbinu ingizi."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Kichupo cha kukuza kwa utangamanifu"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Kuza kidogo kwa skrini kubwa."</string>
@@ -125,12 +125,12 @@
     <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
     <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
     <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
-    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Inatumia data nje mtandao wako"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"Inatumia data nje mtandao wako wa kawaida"</string>
     <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Ukingo"</string>
     <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
     <string name="accessibility_no_sim" msgid="8274017118472455155">"Hakuna SIM."</string>
     <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Shiriki intaneti kwa Bluetooth."</string>
-    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Modi ya ndege."</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"Hali ya ndege."</string>
     <string name="accessibility_battery_level" msgid="7451474187113371965">"Asilimia <xliff:g id="NUMBER">%d</xliff:g> ya betri"</string>
     <string name="accessibility_settings_button" msgid="799583911231893380">"Mipangilio ya mfumo."</string>
     <string name="accessibility_notifications_button" msgid="4498000369779421892">"Arifa."</string>
@@ -151,6 +151,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Betri <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Hali ya Ndege <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Mahali <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Kengele imewekwa <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Data ya 2G-3G imelemazwa"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Data ya 4G imelemazwa"</string>
@@ -162,28 +163,29 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Mtandao-hewa umeunganishwa"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Inatafuta GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Mahali pamewekwa na GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Maombi ya eneo yanatumika"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Futa arifa zote."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Taarifa ya programu"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Skrini itazunguka kiotomatiki."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Skrini imefungwa sasa katika uelekezo wa mandhari."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Skrini imefungwa katika uelekeo wa picha."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Sanduku la Vitindamlo"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Hali Tulivu"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
-    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Modi ya ndege"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Hali ya ndege"</string>
     <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"Inachaji, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
-    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Imechajiwa"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"Betri imejaa"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (Vifaa <xliff:g id="NUMBER">%d</xliff:g>)"</string>
     <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth Imezimwa"</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ung\'avu"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Zungusha Otomatiki"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Mzunguko Umefungwa"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Imefungwa katika mkamo Wima"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Imefungwa katika mkao Mlalo"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Mbinu ya uingizaji"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Kutambua Eneo"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Kitambua eneo kimezimwa"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Kifaa cha midia"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Simu za Dharura Pekee"</string>
@@ -194,12 +196,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Haijaunganishwa"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Hakuna Mtandao"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi Imezimwa"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Onyesho la Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Uonyeshaji Pasiwaya"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Utumaji wa Skrini"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ung\'avu"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"KIOTOMATIKI"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Arifa zitaonekana hapa"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Zifikie wakati wowote kwa kutelezesha chini.\nTelezesha chini tena kupata vidhibiti vya mfumo."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Papasa kwa kasi kutoka ukingo wa skrini ili kuonyesha upau"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Papasa kwa kasi kutoka ukingo wa skrini ili kuonyesha upau wa mfumo"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Hali ya ugeuzaji kinyume wa rangi"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Hali ya utofautishaji ulioboreshwa"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Hali ya kusahihisha rangi"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"YA HIVI KARIBUNI"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Maelezo ya Programu"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"tafuta"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Huenda mtandao\nunafuatiliwa"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Tafuta"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Sogeza juu kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Sogeza kushoto kwa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Arifa imefichwa"</item>
+    <item quantity="other" msgid="7388721375827338153">"Arifa %d zimefichwa"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Gusa ili zionekane"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Usisumbue"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d zaidi"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Gonga tena ili ufungue"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Telezesha kidole ili ufungue"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-sw600dp/arrays.xml b/packages/SystemUI/res/values-sw600dp/arrays.xml
index f3a1771..21c4bd3 100644
--- a/packages/SystemUI/res/values-sw600dp/arrays.xml
+++ b/packages/SystemUI/res/values-sw600dp/arrays.xml
@@ -21,21 +21,21 @@
 
     <array name="navbar_search_targets">
         <item>@null</item>
-        <item>@*android:drawable/ic_action_assist_generic</item>
+        <item>@drawable/ic_action_assist_generic</item>
         <item>@null</item>
         <item>@null</item>
     </array>
 
     <array name="navbar_search_target_descriptions">
         <item>@null</item>
-        <item>@*android:string/description_target_search</item>
+        <item>@string/description_target_search</item>
         <item>@null</item>
         <item>@null</item>
     </array>
 
     <array name="navbar_search_direction_descriptions">
         <item>@null</item>
-        <item>@*android:string/description_direction_left</item>
+        <item>@string/description_direction_left</item>
         <item>@null</item>
         <item>@null</item>
     </array>
diff --git a/packages/SystemUI/res/values-sw600dp/config.xml b/packages/SystemUI/res/values-sw600dp/config.xml
index 48a02ab..fe2224e 100644
--- a/packages/SystemUI/res/values-sw600dp/config.xml
+++ b/packages/SystemUI/res/values-sw600dp/config.xml
@@ -20,18 +20,12 @@
 <!-- These resources are around just to allow their values to be customized
      for different hardware and product builds. -->
 <resources>
-    <!-- Enable quick settings on tablets -->
-    <bool name="config_hasSettingsPanel">true</bool>
-
     <!-- The number of columns in the QuickSettings -->
     <integer name="quick_settings_num_columns">3</integer>
 
+    <!-- The maximum number of rows in the QuickSettings -->
+    <integer name="quick_settings_max_rows">4</integer>
+
     <!-- The number of columns that the top level tiles span in the QuickSettings -->
     <integer name="quick_settings_user_time_settings_tile_span">1</integer>
-
-    <!-- Whether rotation lock shows up in quick settings or not -->
-    <bool name="quick_settings_show_rotation_lock">true</bool>
-
-    <!-- Enable the "flip settings" panel -->
-    <bool name="config_hasFlipSettingsPanel">false</bool>
 </resources>
diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
index ad4dcf9..92e3885 100644
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
@@ -23,10 +23,9 @@
     <dimen name="notification_panel_margin_bottom">192dp</dimen>
     <dimen name="notification_panel_margin_left">16dp</dimen>
 
-    <!-- Gravity for the notification & quick settings panels -->
-    <!-- 0x800033 = start|top ; 0x800035 = end|top -->
-    <integer name="notification_panel_layout_gravity">0x800033</integer>
-    <integer name="settings_panel_layout_gravity">0x800035</integer>
+    <!-- Gravity for the notification panel -->
+    <!-- 0x31 = top|center_horizontal -->
+    <integer name="notification_panel_layout_gravity">0x31</integer>
 
     <!-- Diameter of outer shape drawable shown in navbar search-->
     <dimen name="navbar_search_outerring_diameter">430dip</dimen>
@@ -37,13 +36,15 @@
     <!-- Height of search panel including navigation bar height -->
     <dimen name="navbar_search_panel_height">280dip</dimen>
 
+    <!-- The width of the view containing the menu/ime navigation bar icons -->
+    <dimen name="navigation_extra_key_width">48dip</dimen>
+
     <!-- Size of application thumbnail -->
     <dimen name="status_bar_recents_thumbnail_width">200dp</dimen>
     <dimen name="status_bar_recents_thumbnail_height">177dp</dimen>
 
-    <!-- On tablet-sized devices, we allocate the rightmost third(ish) of the draggable status bar
-         to quick settings. -->
-    <item type="dimen" name="settings_panel_dragzone_fraction">35%</item>
+    <!-- On tablets, panels drop from the statusbar instead of overlapping it. -->
+    <dimen name="panel_holder_padding_top">@*android:dimen/status_bar_height</dimen>
 
     <!-- Minimum fraction of the screen that should be taken up by the notification panel. -->
     <item type="dimen" name="notification_panel_min_height_frac">40%</item>
@@ -51,4 +52,7 @@
     <!-- How far to slide the panel out when you touch it -->
     <!-- On tablets this is just the close_handle_height -->
     <dimen name="peek_height">@dimen/close_handle_height</dimen>
+
+    <!-- Width of the zen mode interstitial dialog. -->
+    <dimen name="zen_mode_dialog_width">384dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index dc643c4..7929a30 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"อนุญาตจากคอมพิวเตอร์เครื่องนี้เสมอ"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"ขยายจนเต็มหน้าจอ"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"ยืดจนเต็มหน้าจอ"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"ความเข้ากันได้ของการย่อ/ขยาย"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"สำหรับแอปพลิเคชันที่ออกแบบมาสำหรับหน้าจอขนาดเล็ก ตัวควบคุมการย่อ/ขยายจะปรากฏขึ้นข้างนาฬิกา"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"กำลังบันทึกภาพหน้าจอ..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"กำลังบันทึกภาพหน้าจอ..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"กำลังบันทึกภาพหน้าจอ"</string>
@@ -74,10 +72,12 @@
     <string name="use_mtp_button_title" msgid="4333504413563023626">"ต่อเชื่อมเป็นโปรแกรมเล่นสื่อ (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"ต่อเชื่อมเป็นกล้องถ่ายรูป (PTP)"</string>
     <string name="installer_cd_button_title" msgid="2312667578562201583">"ติดตั้งแอปพลิเคชัน Android File Transfer ของ Mac"</string>
-    <string name="accessibility_back" msgid="567011538994429120">"ย้อนกลับ"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"กลับ"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"หน้าแรก"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"เมนู"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"แอปพลิเคชันล่าสุด"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"ค้นหา"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"กล้องถ่ายรูป"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"ปุ่มสลับวิธีการป้อนข้อมูล"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"ปุ่มซูมที่ใช้งานร่วมกันได้"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ซูมหน้าจอให้มีขนาดใหญ่ขึ้น"</string>
@@ -151,8 +151,9 @@
     <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g> <xliff:g id="NETWORK">%2$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"มือถือ <xliff:g id="SIGNAL">%1$s</xliff:g> <xliff:g id="TYPE">%2$s</xliff:g> <xliff:g id="NETWORK">%3$s</xliff:g>"</string>
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"แบตเตอรี่ <xliff:g id="STATE">%s</xliff:g>"</string>
-    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"โหมดใช้งานบนเครื่องบิน <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"โหมดใช้บนเครื่องบิน <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"บลูทูธ <xliff:g id="STATE">%s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"สถานที่ <xliff:g id="STATE">%s</xliff:g>"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ตั้งเวลาปลุกไว้ที่ <xliff:g id="TIME">%s</xliff:g>"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"ปิดใช้งานข้อมูล 2G-3G แล้ว"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"ปิดใช้งานข้อมูล 4G แล้ว"</string>
@@ -164,15 +165,16 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"เชื่อมต่อ WiFi แล้ว"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"กำลังค้นหา GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"ตำแหน่งที่กำหนดโดย GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"คำขอตำแหน่งที่มีการใช้งาน"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"ล้างการแจ้งเตือนทั้งหมด"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"ข้อมูลแอป"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"หน้าจอจะหมุนโดยอัตโนมัติ"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"ขณะนี้หน้าจอถูกล็อกให้วางในแนวนอน"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"ขณะนี้หน้าจอถูกล็อกให้วางในแนวตั้ง"</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"ชั้นแสดงของหวาน"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"อีเทอร์เน็ต"</string>
-    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"โหมดใช้งานบนเครื่องบิน"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"โหมดใช้บนเครื่องบิน"</string>
     <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"กำลังชาร์จ, <xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>"</string>
     <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"ชาร์จแล้ว"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"บลูทูธ"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"ความสว่าง"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"หมุนอัตโนมัติ"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"ล็อกการหมุนแล้ว"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"ล็อกที่แนวตั้ง"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"ล็อกที่แนวนอน"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"วิธีป้อนข้อมูล"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"ตำแหน่ง"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"ปิดตำแหน่ง"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ไม่ได้เชื่อมต่อ"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ไม่มีเครือข่าย"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ปิด WiFi"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"การแสดงผล WiFi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"จอแสดงผลไร้สาย"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"ส่งหน้าจอ"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ความสว่าง"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"อัตโนมัติ"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"การแจ้งเตือนจะแสดงขึ้นที่นี่"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"เข้าถึงได้ทุกเมื่อด้วยการกวาดนิ้วลง\nกวาดนิ้วลงอีกครั้งสำหรับการควบคุมระบบ"</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"กวาดขอบของหน้าจอเพื่อแสดงแถบ"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"กวาดจากขอบของหน้าจอเพื่อแสดงแถบระบบ"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"โหมดการกลับสี"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"โหมดคอนทราสต์ที่ปรับปรุงแล้ว"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"โหมดการแก้ไขสี"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ล่าสุด"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"ข้อมูลแอปพลิเคชัน"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"ค้นหา"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"เครือข่ายอาจ\nถูกตรวจสอบ"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"ค้นหา"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"เลื่อนขึ้นเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"เลื่อนไปทางซ้ายเพื่อ <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"ซ่อนการแจ้งเตือนแล้ว"</item>
+    <item quantity="other" msgid="7388721375827338153">"ซ่อน %d การแจ้งเตือนแล้ว"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"แตะเพื่อแสดง"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"ห้ามรบกวน"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"อีก %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"แตะอีกครั้งเพื่อเปิด"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"กวาดขึ้นเพื่อปลดล็อก"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 0053be4..92473a4 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Palaging payagan mula sa computer na ito"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"I-zoom upang punan screen"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"I-stretch upang mapuno screen"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Zoom sa pagiging Tugma"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Kapag nakadisenyo ang isang app para sa mas maliit na screen, isang kontrol ng zoom ang lalabas sa may orasan."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Sine-save ang screenshot…"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Sine-save ang screenshot…"</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Sine-save ang screenshot."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Home"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Kamakailang apps"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Hanapin"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Camera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Ilipat ang button na pamamaraan ng pag-input."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Button ng zoom ng pagiging tugma."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Mag-zoom nang mas maliit sa mas malaking screen."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"<xliff:g id="STATE">%s</xliff:g> ng baterya."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"<xliff:g id="STATE">%s</xliff:g> ng Airplane Mode."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"<xliff:g id="STATE">%s</xliff:g> ng Bluetooth."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Lokasyon <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm set para sa <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Di pinapagana ang 2G-3G na data"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Hindi pinapagana ang 4G na data"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"nakakonekta ang Wi-Fi"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Naghahanap ng GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Lokasyong itinatakda ng GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Aktibo ang mga kahilingan ng lokasyon"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"I-clear ang lahat ng notification."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Impormasyon ng app"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Awtomatikong iikot ang screen."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Naka-lock ang screen sa pahigang oryentasyon."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Naka-lock ang screen sa patayong oryentasyon."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Airplane mode"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Brightness"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"I-auto Rotate"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Naka-lock ang Pag-rotate"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Naka-lock sa Portrait"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Naka-lock sa Landscape"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Pamamaraan ng Pag-input"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Lokasyon"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Naka-off ang Lokasyon"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Hindi Nakakonekta"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Walang Network"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Naka-off ang Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Display ng Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Wireless Display"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"I-cast ang Screen"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Brightness"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Dito lumalabas ang mga notification"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"I-access ang mga ito anumang oras sa pamamagitan ng pag-swipe pababa.\nMuling mag-swipe pababa para sa mga kontrol ng system."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Mag-swipe sa gilid ng screen upang ipakita ang bar"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Mag-swipe mula sa gilid ng screen upang ipakita ang system bar"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Mode ng pag-invert ng kulay"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Mode na dinagdagan ang contrast"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Mode ng pagtatama ng kulay"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"MGA KAMAKAILAN"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Impormasyon ng Application"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"maghanap"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Maaaring\nsinusubaybayan ang network"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Maghanap"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Mag-slide pataas para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Mag-slide pakaliwa para sa <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Nakatago ang notification"</item>
+    <item quantity="other" msgid="7388721375827338153">"Nakatago ang %d (na) notification"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Pindutin upang ipakita"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Huwag istorbohin"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d pa"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"I-tap ulit upang buksan"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Mag-swipe pataas upang i-unlock"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index f39f8bc..9837ff8 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Bu bilgisayardan her zaman izin ver"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Yakınlaştır (ekranı kaplasın)"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Genişlet (ekran kapansın)"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Uyumluluk yakınlaştırması"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Uygulama küçük bir ekran için tasarlanmışsa saatin yanında bir yakınlaştırma denetimi görünür."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Ekran görüntüsü kaydediliyor..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Ekran görüntüsü kaydediliyor..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Ekran görüntüsü kaydediliyor."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Ana sayfa"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Menü"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Son uygulamalar"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Ara"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Kamera"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Giriş yöntemini değiştirme düğmesi."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Uyumluluk zum düğmesi."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Daha büyük ekrana daha küçük yakınlaştır."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Pil <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Uçak Modu <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Konum: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Alarm saati: <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G verileri devre dışı bırakıldı"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G verileri devre dışı"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Kablosuz bağlandı"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS aranıyor"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Konum GPS ile belirlendi"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Konum bilgisi istekleri etkin"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Tüm bildirimleri temizle"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Uygulama bilgileri"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Ekran otomatik olarak dönecektir."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Ekran yatay yönde kilitlendi."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Ekran dikey yönde kilitlendi."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Tatlı Kutusu"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Hafif uyku"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Uçak modu"</string>
@@ -181,11 +183,11 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Parlaklık"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Otomatik Döndür"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Dönme Kilitlendi"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Dikey Görünüme Kilitlendi"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Yatay Görünüme Kilitlendi"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Giriş Yöntemi"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"Konum"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Konum Bilgisi Kapalı"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"Medya cihazı"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"Yalnızca Acil Çağrılar İçin"</string>
@@ -196,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Bağlı Değil"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ağ yok"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Kablosuz Kapalı"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Kablosuz Ekran"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Kablosuz Ekran"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Yayınlama Ekranı"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Parlaklık"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OTOMATİK"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Bildirimler burada görünür"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Aşağıya hızlıca kaydırarak bunlara istediğiniz zaman erişebilirsiniz.\nSistem denetimleri için tekrar hızlıca aşağı kaydırın."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Çubuğu görüntülemek için ekranın kenarından hızlıca kaydırın"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Sistem çubuğunu görüntülemek için ekranın kenarından hızlıca kaydırın"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Renk ters çevirme modu"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Geliştirilmiş kontrast modu"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Renk düzeltme modu"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"SON İLETİLER"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Uygulama Bilgileri"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"ara"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Ağ izleniyor\nolabilir"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Ara"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için yukarı kaydırın."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> için sola kaydırın."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Bildirim gizli"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d bildirim gizli"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Görüntülemek için dokunun"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Rahatsız etmeyin"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d adet daha"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Açmak için tekrar hafifçe vurun"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Kilidi açmak için hızlıca yukarı kaydırın"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 18f67a2..534f520 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Завжди дозволяти з цього комп’ютера"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Масштабув. на весь екран"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Розтягнути на весь екран"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Масштабування для сумісності"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Якщо програму призначено для менших екранів, елемент керування масштабом буде відображатися біля годинника."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Збереження знімка екрана..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Збереження знімка екрана..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Зберігається знімок екрана."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Головна"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Меню"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Останні програми"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Пошук"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Камера"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Кнопка перемикання методу введення."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка масштабування сумісності."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Збільшення екрана."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Акумулятор: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Режим польоту: <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth: <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Місцезнаходження <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Сигнал установлено на <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Дані 2G–3G вимкнено"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Дані 4G вимкнено"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi під’єднано"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Виконується пошук GPS-сигналу"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Місцезнаходження встановлено за допомогою GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Запити про місцезнаходження активні"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Очистити всі сповіщення."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Інформація про програму"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Екран обертатиметься автоматично."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Екран заблоковано в альбомній орієнтації."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Екран заблоковано в книжковій орієнтації."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Вітрина десертів"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Заставка"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Режим польоту"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Яскравість"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Обертати автоматично"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Обертання заблоковано"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Заблоковано в книжковій орієнтації"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Заблоковано в альбомній орієнтації"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Метод введення"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Місцезнаходження"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Місцезнаходження вимкнено"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Не під’єднано."</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Немає мережі"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi вимкнено"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Відображення Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Бездротове відображення"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Транслювати екран"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Яскравість"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"АВТО"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Сповіщення з’являються тут"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Отримуйте до них доступ будь-коли, провівши пальцем униз.\nЗнову проведіть униз, щоб відкрити елементи керування системи."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Гортайте від краю екрана, щоб з’явилась панель"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Проведіть пальцем від краю екрана, щоб з’явилась навігаційна панель"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Режим інверсії кольорів"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Режим посиленого контрасту"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Режим коригування кольору"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"ОСТАННІ"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Інформація про додаток"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"пошук"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Мережа може\nвідстежуватися"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Пошук"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Проведіть пальцем угору, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Проведіть пальцем ліворуч, щоб <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Сповіщення сховано"</item>
+    <item quantity="other" msgid="7388721375827338153">"Сховано сповіщень: %d"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Торкніться, щоб показати"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Не турбувати"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"Ще %d"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Торкніться знову, щоб відкрити"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Проведіть пальцем угору, щоб розблокувати"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index acc7e0e5..56fc89c 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Luôn cho phép từ máy tính này"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"T.phóng để lấp đầy m.hình"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Giãn ra để lấp đầy m.hình"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Thu phóng tương thích"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Khi ứng dụng được thiết kế cho một màn hình nhỏ hơn, điều khiển thu phóng sẽ xuất hiện bên cạnh đồng hồ."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Đang lưu ảnh chụp màn hình..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Đang lưu ảnh chụp màn hình..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Ảnh chụp màn hình đang được lưu."</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"Trang chủ"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Trình đơn"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Ứng dụng gần đây"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Tìm kiếm"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Máy ảnh"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Nút chuyển phương thức nhập."</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Nút thu phóng khả năng tương thích."</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Thu phóng màn hình lớn hơn hoặc nhỏ hơn."</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Pin <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Chế độ trên máy bay <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Vị trí <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"Báo thức được đặt cho <xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"Đã tắt dữ liệu 2G-3G"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Đã tắt dữ liệu 4G"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Đã kết nối Wi-Fi"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Đang tìm kiếm GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Vị trí đặt bởi GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Yêu cầu về thông tin vị trí đang hoạt động"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Xóa tất cả thông báo."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Thông tin về ứng dụng"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Màn hình sẽ xoay tự động."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Màn hình hiện bị khóa theo hướng ngang."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Màn hình hiện bị khóa theo hướng dọc."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Tủ trưng bày bánh ngọt"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Chế độ ngủ"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Chế độ trên máy bay"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Độ sáng"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Tự động xoay"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Khóa xoay"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Đã khóa ở chế độ xoay dọc"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Đã khóa ở chế độ xoay ngang"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Phương thức nhập"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Vị trí"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Tắt vị trí"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Chưa được kết nối"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Không có mạng nào"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Tắt Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Hiển thị Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Hiển thị không dây"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Truyền màn hình"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Độ sáng"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"TỰ ĐỘNG"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Thông báo xuất hiện tại đây"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Truy cập vào chúng bất kỳ lúc nào bằng cách vuốt xuống.\nVuốt lại xuống để hiển thị các điều khiển hệ thống."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Vuốt cạnh màn hình để hiển thị thanh"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Vuốt từ cạnh màn hình để hiển thị thanh hệ thống"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Chế độ đảo ngược màu sắc"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Chế độ tương phản tăng cường"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Chế độ hiệu chỉnh màu sắc"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"GẦN ĐÂY"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Thông tin ứng dụng"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"tìm kiếm"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Mạng có thể\nđược giám sát"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Tìm kiếm"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Trượt lên để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Trượt sang trái để <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Thông báo ẩn"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d thông báo ẩn"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Chạm để hiển thị"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Không làm phiền"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d thông báo khác"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Nhấn lại để mở"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Vuốt lên để mở khóa"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 0a62ee3..442fdb7 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"一律允许使用这台计算机进行调试"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"缩放以填满屏幕"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"拉伸以填满屏幕"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"兼容性缩放"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"如果应用是针对较小屏幕设计的，则时钟旁会显示缩放控件。"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在保存屏幕截图..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"正在保存屏幕截图..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"正在保存屏幕截图。"</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"主屏幕"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"菜单"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"最近运行的应用"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"搜索"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"相机"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"输入法切换按钮。"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"兼容性缩放按钮。"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"将小屏幕的图片放大在较大屏幕上显示。"</string>
@@ -116,7 +116,7 @@
     <string name="accessibility_two_bars" msgid="6437363648385206679">"信号强度为两格。"</string>
     <string name="accessibility_three_bars" msgid="2648241415119396648">"信号强度为三格。"</string>
     <string name="accessibility_signal_full" msgid="9122922886519676839">"信号满格。"</string>
-    <string name="accessibility_desc_on" msgid="2385254693624345265">"打开。"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"开启。"</string>
     <string name="accessibility_desc_off" msgid="6475508157786853157">"关闭。"</string>
     <string name="accessibility_desc_connected" msgid="8366256693719499665">"已连接。"</string>
     <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
@@ -147,7 +147,7 @@
     <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"已删除<xliff:g id="APP">%s</xliff:g>"</string>
     <string name="accessibility_notification_dismissed" msgid="854211387186306927">"已关闭通知。"</string>
     <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知栏。"</string>
-    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快速设置。"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快捷设置。"</string>
     <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"最近使用的应用。"</string>
     <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"用户：<xliff:g id="USER">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>，<xliff:g id="NETWORK">%2$s</xliff:g>"</string>
@@ -155,23 +155,25 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"电池电量：<xliff:g id="STATE">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"飞行模式：<xliff:g id="STATE">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"蓝牙：<xliff:g id="STATE">%s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"位置信息服务<xliff:g id="STATE">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"闹钟已设置为：<xliff:g id="TIME">%s</xliff:g>。"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"2G-3G 数据网络已停用"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"4G 数据网络已停用"</string>
-    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"移动数据已停用"</string>
-    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"数据已停用"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"移动数据网络已停用"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"数据网络已停用"</string>
     <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"您已达到指定的数据流量上限。\n\n如果您重新启用数据，运营商可能会收取相应的费用。"</string>
     <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"重新启用数据连接"</string>
     <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"未连接互联网"</string>
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"WLAN 已连接"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜索 GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"已通过 GPS 确定位置"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"应用发出了有效位置信息请求"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"清除所有通知。"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"应用信息"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"屏幕会自动旋转。"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"屏幕锁定为横向模式。"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"屏幕锁定为纵向模式。"</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"果冻豆大乱舞"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"甜品盒"</string>
     <string name="start_dreams" msgid="7219575858348719790">"互动屏保"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"以太网"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"飞行模式"</string>
@@ -179,15 +181,15 @@
     <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"充电完成"</string>
     <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"蓝牙"</string>
     <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"蓝牙（<xliff:g id="NUMBER">%d</xliff:g> 台设备）"</string>
-    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"蓝牙已关闭"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"蓝牙：关闭"</string>
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"亮度"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自动旋转"</string>
-    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"屏幕方向已锁定"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"屏幕方向：锁定"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"锁定为纵向"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"锁定为横向"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"输入法"</string>
-    <!-- no translation found for quick_settings_location_label (5011327048748762257) -->
-    <skip />
-    <!-- no translation found for quick_settings_location_off_label (7464544086507331459) -->
-    <skip />
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"位置信息"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"位置信息：关闭"</string>
     <string name="quick_settings_media_device_label" msgid="1302906836372603762">"媒体设备"</string>
     <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
     <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"只能拨打紧急呼救电话"</string>
@@ -197,13 +199,29 @@
     <string name="quick_settings_wifi_label" msgid="9135344704899546041">"WLAN"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"未连接"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"无网络"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN 已关闭"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"WLAN 显示"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"无线显示"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"WLAN：关闭"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"投射屏幕"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自动"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"通知会显示在这里"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"向下滑动可随时查看通知。\n再次向下滑动可使用系统控制功能。"</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"从边缘向里滑可显示系统栏"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"从屏幕边缘向里滑动即可显示系统栏"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"颜色反转模式"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"增强对比度模式"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"颜色校正模式"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"最近"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"应用信息"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"搜索"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"网络可能会\n受到监控"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"搜索"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"向上滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"向左滑动以<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"隐藏了1条通知"</item>
+    <item quantity="other" msgid="7388721375827338153">"隐藏了%d条通知"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"触摸即可显示"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"勿扰"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"还有%d条"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"再次点按即可打开"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"向上滑动即可解锁"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zh-rHK-land/strings.xml b/packages/SystemUI/res/values-zh-rHK-land/strings.xml
new file mode 100644
index 0000000..8d55df4
--- /dev/null
+++ b/packages/SystemUI/res/values-zh-rHK-land/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2010, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="toast_rotation_locked" msgid="7609673011431556092">"屏幕現已鎖定為橫向模式"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..54a3b1e
--- /dev/null
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -0,0 +1,227 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/**
+ * Copyright (c) 2009, 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.
+ */
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_label" msgid="7164937344850004466">"系統用戶介面"</string>
+    <string name="status_bar_clear_all_button" msgid="7774721344716731603">"清除"</string>
+    <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"從清單中移除"</string>
+    <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"應用程式資訊"</string>
+    <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"沒有最近的應用程式"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"關閉最近使用的應用程式"</string>
+  <plurals name="status_bar_accessibility_recent_apps">
+    <item quantity="one" msgid="5854176083865845541">"1 個最近使用的應用程式"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d 個最近使用的應用程式"</item>
+  </plurals>
+    <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"無通知"</string>
+    <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"持續進行"</string>
+    <string name="status_bar_latest_events_title" msgid="6594767438577593172">"通知"</string>
+    <string name="battery_low_title" msgid="2783104807551211639">"連接充電器"</string>
+    <string name="battery_low_subtitle" msgid="1752040062087829196">"電池即將用盡。"</string>
+    <string name="battery_low_percent_format" msgid="1077244949318261761">"剩餘 <xliff:g id="NUMBER">%d%%</xliff:g>"</string>
+    <string name="invalid_charger" msgid="4549105996740522523">"不支援 USB 充電。\n僅能使用隨附的充電器。"</string>
+    <string name="battery_low_why" msgid="7279169609518386372">"電池使用情況"</string>
+    <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"設定"</string>
+    <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+    <string name="status_bar_settings_airplane" msgid="4879879698500955300">"飛行模式"</string>
+    <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"自動旋轉螢幕"</string>
+    <string name="status_bar_settings_mute_label" msgid="554682549917429396">"關閉"</string>
+    <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"自動"</string>
+    <string name="status_bar_settings_notifications" msgid="397146176280905137">"通知"</string>
+    <string name="bluetooth_tethered" msgid="7094101612161133267">"已經由藍牙進行網絡共享"</string>
+    <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"設定輸入方式"</string>
+    <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"實體鍵盤"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"允許「<xliff:g id="APPLICATION">%1$s</xliff:g>」應用程式存取 USB 裝置嗎？"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"允許「<xliff:g id="APPLICATION">%1$s</xliff:g>」應用程式存取 USB 配件嗎？"</string>
+    <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"連接這個 USB 裝置時啟用 <xliff:g id="ACTIVITY">%1$s</xliff:g> 嗎？"</string>
+    <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"連接這個 USB 配件時啟用 <xliff:g id="ACTIVITY">%1$s</xliff:g> 嗎？"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"已安裝的應用程式均無法存取這個 USB 配件，如要進一步瞭解這個配件，請瀏覽 <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="title_usb_accessory" msgid="4966265263465181372">"USB 配件"</string>
+    <string name="label_view" msgid="6304565553218192990">"觀看"</string>
+    <string name="always_use_device" msgid="1450287437017315906">"預設用於這個 USB 裝置"</string>
+    <string name="always_use_accessory" msgid="1210954576979621596">"預設用於這個 USB 配件"</string>
+    <string name="usb_debugging_title" msgid="4513918393387141949">"允許 USB 除錯嗎？"</string>
+    <string name="usb_debugging_message" msgid="2220143855912376496">"這部電腦的 RSA 密鑰指紋如下：\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
+    <string name="usb_debugging_always" msgid="303335496705863070">"一律允許透過這部電腦進行"</string>
+    <string name="compat_mode_on" msgid="6623839244840638213">"放大為全螢幕"</string>
+    <string name="compat_mode_off" msgid="4434467572461327898">"放大為全螢幕"</string>
+    <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在儲存屏幕擷取畫面..."</string>
+    <string name="screenshot_saving_title" msgid="8242282144535555697">"正在儲存屏幕擷取畫面..."</string>
+    <string name="screenshot_saving_text" msgid="2419718443411738818">"正在儲存屏幕擷取畫面。"</string>
+    <string name="screenshot_saved_title" msgid="6461865960961414961">"已擷取屏幕畫面。"</string>
+    <string name="screenshot_saved_text" msgid="1152839647677558815">"輕觸即可查看屏幕擷取畫面。"</string>
+    <string name="screenshot_failed_title" msgid="705781116746922771">"無法擷取屏幕畫面。"</string>
+    <string name="screenshot_failed_text" msgid="8134011269572415402">"無法儲存屏幕擷取畫面，儲存裝置可能正在使用。"</string>
+    <string name="usb_preference_title" msgid="6551050377388882787">"USB 檔案傳輸選項"</string>
+    <string name="use_mtp_button_title" msgid="4333504413563023626">"掛接為媒體播放器 (MTP)"</string>
+    <string name="use_ptp_button_title" msgid="7517127540301625751">"掛接為相機 (PTP)"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"安裝 Mac 專用的「Android 檔案傳輸」應用程式"</string>
+    <string name="accessibility_back" msgid="567011538994429120">"返回"</string>
+    <string name="accessibility_home" msgid="8217216074895377641">"首頁"</string>
+    <string name="accessibility_menu" msgid="316839303324695949">"選單"</string>
+    <string name="accessibility_recent" msgid="8571350598987952883">"最近使用的應用程式"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"搜尋"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"相機"</string>
+    <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string>
+    <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"相容性縮放按鈕。"</string>
+    <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"將較小螢幕的畫面放大在較大螢幕上顯示。"</string>
+    <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"藍牙連線已建立。"</string>
+    <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"藍牙連線已中斷。"</string>
+    <string name="accessibility_no_battery" msgid="358343022352820946">"未安裝電池。"</string>
+    <string name="accessibility_battery_one_bar" msgid="7774887721891057523">"電池電量為一格。"</string>
+    <string name="accessibility_battery_two_bars" msgid="8500650438735009973">"電池電量為兩格。"</string>
+    <string name="accessibility_battery_three_bars" msgid="2302983330865040446">"電池電量為三格。"</string>
+    <string name="accessibility_battery_full" msgid="8909122401720158582">"電池已滿。"</string>
+    <string name="accessibility_no_phone" msgid="4894708937052611281">"沒有電話訊號。"</string>
+    <string name="accessibility_phone_one_bar" msgid="687699278132664115">"電話訊號強度為一格。"</string>
+    <string name="accessibility_phone_two_bars" msgid="8384905382804815201">"電話訊號強度為兩格。"</string>
+    <string name="accessibility_phone_three_bars" msgid="8521904843919971885">"電話訊號強度為三格。"</string>
+    <string name="accessibility_phone_signal_full" msgid="6471834868580757898">"電話訊號滿格。"</string>
+    <string name="accessibility_no_data" msgid="4791966295096867555">"沒有數據網絡。"</string>
+    <string name="accessibility_data_one_bar" msgid="1415625833238273628">"數據網絡訊號強度為一格。"</string>
+    <string name="accessibility_data_two_bars" msgid="6166018492360432091">"數據網絡訊號強度為兩格。"</string>
+    <string name="accessibility_data_three_bars" msgid="9167670452395038520">"數據網絡訊號強度為三格。"</string>
+    <string name="accessibility_data_signal_full" msgid="2708384608124519369">"數據網絡訊號滿格。"</string>
+    <string name="accessibility_wifi_off" msgid="3177380296697933627">"WiFi 已關閉。"</string>
+    <string name="accessibility_no_wifi" msgid="1425476551827924474">"WiFi 連線已中斷。"</string>
+    <string name="accessibility_wifi_one_bar" msgid="7735893178010724377">"WiFi 訊號強度為一格。"</string>
+    <string name="accessibility_wifi_two_bars" msgid="4994274250497262434">"WiFi 訊號強度為兩格。"</string>
+    <string name="accessibility_wifi_three_bars" msgid="3495755044276588384">"WiFi 訊號強度為三格。"</string>
+    <string name="accessibility_wifi_signal_full" msgid="6853561303586480376">"WiFi 訊號已滿。"</string>
+    <string name="accessibility_no_wimax" msgid="4329180129727630368">"沒有 WiMAX 訊號。"</string>
+    <string name="accessibility_wimax_one_bar" msgid="4170994299011863648">"WiMAX 訊號強度一格。"</string>
+    <string name="accessibility_wimax_two_bars" msgid="9176236858336502288">"WiMAX 訊號強度兩格。"</string>
+    <string name="accessibility_wimax_three_bars" msgid="6116551636752103927">"WiMAX 訊號強度三格。"</string>
+    <string name="accessibility_wimax_signal_full" msgid="2768089986795579558">"WiMAX 訊號滿格。"</string>
+    <string name="accessibility_no_signal" msgid="7064645320782585167">"沒有訊號。"</string>
+    <string name="accessibility_not_connected" msgid="6395326276213402883">"未連線。"</string>
+    <string name="accessibility_zero_bars" msgid="3806060224467027887">"訊號強度為零格。"</string>
+    <string name="accessibility_one_bar" msgid="1685730113192081895">"訊號強度為一格。"</string>
+    <string name="accessibility_two_bars" msgid="6437363648385206679">"訊號強度為兩格。"</string>
+    <string name="accessibility_three_bars" msgid="2648241415119396648">"訊號強度為三格。"</string>
+    <string name="accessibility_signal_full" msgid="9122922886519676839">"訊號已滿。"</string>
+    <string name="accessibility_desc_on" msgid="2385254693624345265">"開啟。"</string>
+    <string name="accessibility_desc_off" msgid="6475508157786853157">"關閉。"</string>
+    <string name="accessibility_desc_connected" msgid="8366256693719499665">"已連線。"</string>
+    <string name="accessibility_data_connection_gprs" msgid="1606477224486747751">"GPRS"</string>
+    <string name="accessibility_data_connection_1x" msgid="994133468120244018">"1 X"</string>
+    <string name="accessibility_data_connection_hspa" msgid="2032328855462645198">"HSPA"</string>
+    <string name="accessibility_data_connection_3g" msgid="8628562305003568260">"3G"</string>
+    <string name="accessibility_data_connection_3.5g" msgid="8664845609981692001">"3.5G"</string>
+    <string name="accessibility_data_connection_4g" msgid="7741000750630089612">"4G"</string>
+    <string name="accessibility_data_connection_lte" msgid="5413468808637540658">"LTE"</string>
+    <string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
+    <string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"漫遊"</string>
+    <string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
+    <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+    <string name="accessibility_no_sim" msgid="8274017118472455155">"無 SIM 卡。"</string>
+    <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"藍牙數據連線。"</string>
+    <string name="accessibility_airplane_mode" msgid="834748999790763092">"飛航模式。"</string>
+    <!-- String.format failed for translation -->
+    <!-- no translation found for accessibility_battery_level (7451474187113371965) -->
+    <skip />
+    <string name="accessibility_settings_button" msgid="799583911231893380">"系統設定"</string>
+    <string name="accessibility_notifications_button" msgid="4498000369779421892">"通知。"</string>
+    <string name="accessibility_remove_notification" msgid="3603099514902182350">"清除通知。"</string>
+    <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS 已啟用。"</string>
+    <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"正在取得 GPS 訊號。"</string>
+    <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter (TTY) 已啟用。"</string>
+    <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"鈴聲震動。"</string>
+    <string name="accessibility_ringer_silent" msgid="9061243307939135383">"鈴聲靜音。"</string>
+    <string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"「<xliff:g id="APP">%s</xliff:g>」已關閉。"</string>
+    <string name="accessibility_notification_dismissed" msgid="854211387186306927">"通知已關閉。"</string>
+    <string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"通知欄。"</string>
+    <string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"快速設定。"</string>
+    <string name="accessibility_desc_recent_apps" msgid="9014032916410590027">"最近使用的應用程式"</string>
+    <string name="accessibility_quick_settings_user" msgid="1104846699869476855">"用戶：<xliff:g id="USER">%s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_wifi" msgid="6099781031669728709">"<xliff:g id="SIGNAL">%1$s</xliff:g>、<xliff:g id="NETWORK">%2$s</xliff:g>"</string>
+    <string name="accessibility_quick_settings_mobile" msgid="4876806564086241341">"流動數據連線：<xliff:g id="SIGNAL">%1$s</xliff:g>、<xliff:g id="TYPE">%2$s</xliff:g>、<xliff:g id="NETWORK">%3$s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"電池電量：<xliff:g id="STATE">%s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"飛航模式：<xliff:g id="STATE">%s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"藍牙：<xliff:g id="STATE">%s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"定位服務<xliff:g id="STATE">%s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"鬧鐘已設定為：<xliff:g id="TIME">%s</xliff:g>。"</string>
+    <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"已停用 2G-3G 數據"</string>
+    <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"已停用 4G 數據"</string>
+    <string name="data_usage_disabled_dialog_mobile_title" msgid="1046047248844821202">"已停用流動數據"</string>
+    <string name="data_usage_disabled_dialog_title" msgid="2086815304858964954">"數據停用"</string>
+    <string name="data_usage_disabled_dialog" msgid="3853117269051806280">"您已到達指定的數據用量上限。\n\n如果您重新啟用數據傳輸，流動網絡供應商可能會向您收費。"</string>
+    <string name="data_usage_disabled_dialog_enable" msgid="7729772039208664606">"重新啟用數據"</string>
+    <string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"沒有互聯網連線"</string>
+    <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string>
+    <string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜尋 GPS"</string>
+    <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS 已定位"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"位置要求啟動中"</string>
+    <string name="accessibility_clear_all" msgid="5235938559247164925">"清除所有通知。"</string>
+    <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"應用程式資訊"</string>
+    <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"屏幕會自動旋轉。"</string>
+    <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"屏幕已鎖定為橫向模式。"</string>
+    <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"屏幕已鎖定為垂直模式。"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
+    <string name="start_dreams" msgid="7219575858348719790">"Daydream"</string>
+    <string name="ethernet_label" msgid="7967563676324087464">"以太網"</string>
+    <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"飛行模式"</string>
+    <string name="quick_settings_battery_charging_label" msgid="490074774465309209">"充電中 (<xliff:g id="NUMBER">%d</xliff:g><xliff:g id="PERCENT">%%</xliff:g>)"</string>
+    <string name="quick_settings_battery_charged_label" msgid="8865413079414246081">"充電完成"</string>
+    <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"藍牙"</string>
+    <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"藍牙 (<xliff:g id="NUMBER">%d</xliff:g> 部裝置)"</string>
+    <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"藍牙關閉"</string>
+    <string name="quick_settings_brightness_label" msgid="6968372297018755815">"亮度"</string>
+    <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自動旋轉"</string>
+    <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"已鎖定屏幕旋轉功能"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"已鎖定為直向"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"已鎖定為橫向"</string>
+    <string name="quick_settings_ime_label" msgid="7073463064369468429">"輸入法"</string>
+    <string name="quick_settings_location_label" msgid="5011327048748762257">"位置"</string>
+    <string name="quick_settings_location_off_label" msgid="7464544086507331459">"位置關閉"</string>
+    <string name="quick_settings_media_device_label" msgid="1302906836372603762">"媒體裝置"</string>
+    <string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
+    <string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"只可撥打緊急電話"</string>
+    <string name="quick_settings_settings_label" msgid="5326556592578065401">"設定"</string>
+    <string name="quick_settings_time_label" msgid="4635969182239736408">"時間"</string>
+    <string name="quick_settings_user_label" msgid="5238995632130897840">"我"</string>
+    <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+    <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"未連線"</string>
+    <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網絡"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 關閉"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"放送螢幕"</string>
+    <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string>
+    <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自動"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"色彩反轉模式"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"增強對比模式"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"色彩校準模式"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"近期"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資料"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"網絡可能會\n受到監控"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"已隱藏通知"</item>
+    <item quantity="other" msgid="7388721375827338153">"已隱藏 %d 則通知"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"請勿騷擾"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"還有 %d 個"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"再次輕按即可開啟"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"向上快速滑動即可解鎖"</string>
+</resources>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 2cfdb59..fc74f53 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"一律允許透過這台電腦進行"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"放大為全螢幕"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"放大為全螢幕"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"相容性縮放"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"執行專為較小螢幕設計的應用程式時，系統會在時鐘旁顯示縮放控制項。"</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"正在儲存螢幕擷取畫面…"</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"正在儲存螢幕擷取畫面…"</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"正在儲存螢幕擷取畫面。"</string>
@@ -78,6 +76,8 @@
     <string name="accessibility_home" msgid="8217216074895377641">"主螢幕"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"選單"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"最近使用的應用程式"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"搜尋"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"相機"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"切換輸入法按鈕。"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"相容性縮放按鈕。"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"將較小螢幕的畫面放大在較大螢幕上顯示。"</string>
@@ -155,6 +155,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"電池電量：<xliff:g id="STATE">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"飛航模式：<xliff:g id="STATE">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"藍牙：<xliff:g id="STATE">%s</xliff:g>。"</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"定位服務<xliff:g id="STATE">%s</xliff:g>。"</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"鬧鐘已設定為：<xliff:g id="TIME">%s</xliff:g>。"</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"已停用 2G-3G 數據"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"已停用 4G 數據"</string>
@@ -166,12 +167,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi 已連線"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"正在搜尋 GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS 已定位"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"有位置資訊要求"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"清除所有通知。"</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"應用程式資訊"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"螢幕會自動旋轉。"</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"螢幕已鎖定為橫向模式。"</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"螢幕已鎖定為垂直模式。"</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Dessert Case"</string>
     <string name="start_dreams" msgid="7219575858348719790">"休眠模式"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"乙太網路"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"飛航模式"</string>
@@ -183,6 +185,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"亮度"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"自動旋轉"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"已鎖定螢幕旋轉功能"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"已鎖定為縱向"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"已鎖定為橫向"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"輸入法"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"定位"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"定位服務已關閉"</string>
@@ -195,13 +199,29 @@
     <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"未連線"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"沒有網路"</string>
-    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"關閉 Wi-Fi"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Wi-Fi 顯示裝置"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"無線螢幕分享"</string>
+    <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi 已關閉"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"投放螢幕"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"亮度"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"自動"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"系統會在這裡顯示通知"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"向下滑動即可隨時存取通知。\n再次向下滑動即可使用系統控制項。"</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"滑動螢幕邊緣即可顯示導覽列"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"從螢幕邊緣向內滑動即可顯示導覽列"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"彩色反轉模式"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"增強對比模式"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"色彩校正模式"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"近期"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"應用程式資訊"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"網路可能\n受到監控"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"搜尋"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"向上滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"向左滑動即可<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>。"</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"已隱藏通知"</item>
+    <item quantity="other" msgid="7388721375827338153">"已隱藏 %d 則通知"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"輕觸即可顯示"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"請勿打擾"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"還有 %d 則"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"再次輕按即可開啟"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"向上滑動即可解鎖"</string>
 </resources>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 007d338..dfe8838 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -24,10 +24,10 @@
     <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Susa ohlwini"</string>
     <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Ulwazi lwensiza"</string>
     <string name="status_bar_no_recent_apps" msgid="6576392951053994640">"Azikho izinhlelo zokusebenza zakamuva"</string>
-    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Susa izinsiza zakamumva"</string>
+    <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Susa izinhlelo zokusebenza zakamumva"</string>
   <plurals name="status_bar_accessibility_recent_apps">
     <item quantity="one" msgid="5854176083865845541">"Insiza eyi-1 yakamumva"</item>
-    <item quantity="other" msgid="1040784359794890744">"%d izinsiza zakamumva"</item>
+    <item quantity="other" msgid="1040784359794890744">"%d izinhlelo zokusebenza zakamumva"</item>
   </plurals>
     <string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Azikho izaziso"</string>
     <string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Okuqhubekayo"</string>
@@ -47,11 +47,11 @@
     <string name="bluetooth_tethered" msgid="7094101612161133267">"Ukusebenzisa i-Bluetooth njengemodemu"</string>
     <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Izilungiselelo zezindlela zokufakwayo"</string>
     <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Ukwakheka kwekhibhodi"</string>
-    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Vumela insiza <xliff:g id="APPLICATION">%1$s</xliff:g> ukuthi ufinyelele ezintweni eziphuma ne-USB?"</string>
-    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Vumela insiza <xliff:g id="APPLICATION">%1$s</xliff:g> ukuthi ufinyelele ezintweni eziphuma ne-USB?"</string>
+    <string name="usb_device_permission_prompt" msgid="834698001271562057">"Vumela uhlelo lokusebenza <xliff:g id="APPLICATION">%1$s</xliff:g> ukuthi ufinyelele ezintweni eziphuma ne-USB?"</string>
+    <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Vumela uhlelo lokusebenza <xliff:g id="APPLICATION">%1$s</xliff:g> ukuthi ufinyelele ezintweni eziphuma ne-USB?"</string>
     <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Vula <xliff:g id="ACTIVITY">%1$s</xliff:g> uma ledivayisi ye-USB ixhunyiwe?"</string>
     <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Vula <xliff:g id="ACTIVITY">%1$s</xliff:g> uma le-accessory ye-USB ixhunyiwe"</string>
-    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Azikho izinsiza ezisebenze ngezinto ze-USB. Funda okwengeziwe ngale into kwi <xliff:g id="URL">%1$s</xliff:g>"</string>
+    <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Azikho izinhlelo zokusebenza ezisebenze ngezinto ze-USB. Funda okwengeziwe ngale into kwi <xliff:g id="URL">%1$s</xliff:g>"</string>
     <string name="title_usb_accessory" msgid="4966265263465181372">"ama-accessory e-USB"</string>
     <string name="label_view" msgid="6304565553218192990">"Buka"</string>
     <string name="always_use_device" msgid="1450287437017315906">"Sebenzisa ngokuzenzakalelayo yale divayisi ye-USB"</string>
@@ -61,8 +61,6 @@
     <string name="usb_debugging_always" msgid="303335496705863070">"Hlala uvumela njalo kusuka kule khompyutha"</string>
     <string name="compat_mode_on" msgid="6623839244840638213">"Sondeza ukugcwalisa isikrini"</string>
     <string name="compat_mode_off" msgid="4434467572461327898">"Nweba ukugcwalisa isikrini"</string>
-    <string name="compat_mode_help_header" msgid="7969493989397529910">"Ukuhambelana Kokusondeza"</string>
-    <string name="compat_mode_help_body" msgid="4946726776359270040">"Uma uhlelo lokusebenza lwenzelwe isikrini ezincane, isilawuli sokusondeza sizovela ngakuyiwashi."</string>
     <string name="screenshot_saving_ticker" msgid="7403652894056693515">"Ilondoloz umfanekiso weskrini..."</string>
     <string name="screenshot_saving_title" msgid="8242282144535555697">"Ilondoloz umfanekiso weskrini..."</string>
     <string name="screenshot_saving_text" msgid="2419718443411738818">"Umfanekiso weskrini uyalondolozwa."</string>
@@ -73,11 +71,13 @@
     <string name="usb_preference_title" msgid="6551050377388882787">"Okukhethwa kokudluliswa kwefayela ye-USB"</string>
     <string name="use_mtp_button_title" msgid="4333504413563023626">"Lengisa njengesidlali semediya (MTP)"</string>
     <string name="use_ptp_button_title" msgid="7517127540301625751">"Lengisa ikhamera (PTP)"</string>
-    <string name="installer_cd_button_title" msgid="2312667578562201583">"Faka insiza yokudluliswa Kwefayela ye-Android kwi-Mac"</string>
+    <string name="installer_cd_button_title" msgid="2312667578562201583">"Faka uhlelo lokusebenza yokudluliswa Kwefayela ye-Android kwi-Mac"</string>
     <string name="accessibility_back" msgid="567011538994429120">"Emuva"</string>
     <string name="accessibility_home" msgid="8217216074895377641">"Ekhaya"</string>
     <string name="accessibility_menu" msgid="316839303324695949">"Imenyu"</string>
     <string name="accessibility_recent" msgid="8571350598987952883">"Izinhlelo zokusebenza zakamuva"</string>
+    <string name="accessibility_search_light" msgid="1103867596330271848">"Sesha"</string>
+    <string name="accessibility_camera_button" msgid="8064671582820358152">"Ikhamela"</string>
     <string name="accessibility_ime_switch_button" msgid="5032926134740456424">"Vula indlela yokungena yenkinobho"</string>
     <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Inkinobho evumelekile yokusondeza"</string>
     <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Sondeza kancane esikrinini esikhudlwana"</string>
@@ -153,6 +153,7 @@
     <string name="accessibility_quick_settings_battery" msgid="1480931583381408972">"Ibhethri <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_airplane" msgid="4196876722090224753">"Imodi yendiza <xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_bluetooth" msgid="5749054971341882340">"I-Bluetooth <xliff:g id="STATE">%s</xliff:g>."</string>
+    <string name="accessibility_quick_settings_location" msgid="4577282329866813100">"Indawo i-<xliff:g id="STATE">%s</xliff:g>."</string>
     <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"I-alamu isethiwe ngo-<xliff:g id="TIME">%s</xliff:g>."</string>
     <string name="data_usage_disabled_dialog_3g_title" msgid="5257833881698644687">"idatha ye-2G-3G ivimbelwe"</string>
     <string name="data_usage_disabled_dialog_4g_title" msgid="4789143363492682629">"Idatha ye-4G ivimbelwe"</string>
@@ -164,12 +165,13 @@
     <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"I-Wi-Fi ixhunyiwe"</string>
     <string name="gps_notification_searching_text" msgid="8574247005642736060">"Isesha i-GPS"</string>
     <string name="gps_notification_found_text" msgid="4619274244146446464">"Indawo ihlelwe i-GPS"</string>
+    <string name="accessibility_location_active" msgid="2427290146138169014">"Izicelo zendawo ziyasebenza"</string>
     <string name="accessibility_clear_all" msgid="5235938559247164925">"Susa zonke izaziso."</string>
     <string name="status_bar_notification_inspect_item_title" msgid="1163547729015390250">"Ulwazi lohlelo lokusebenza"</string>
     <string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"Isikrini sizophenduka ngokuzenzakalela."</string>
     <string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"Isikrini sikhiyelwe ngomumo we-landscape."</string>
     <string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"Isikrini sikhiyelwe ngomumo we-portrait."</string>
-    <string name="jelly_bean_dream_name" msgid="5992026543636816792">"I-BeanFlinger"</string>
+    <string name="dessert_case" msgid="1295161776223959221">"Isikhwama soswidi"</string>
     <string name="start_dreams" msgid="7219575858348719790">"Ukuphupha emini"</string>
     <string name="ethernet_label" msgid="7967563676324087464">"I-Ethernet"</string>
     <string name="quick_settings_airplane_mode_label" msgid="5510520633448831350">"Isimo sendiza"</string>
@@ -181,6 +183,8 @@
     <string name="quick_settings_brightness_label" msgid="6968372297018755815">"Ukugqama"</string>
     <string name="quick_settings_rotation_unlocked_label" msgid="336054930362580584">"Ukuphendula ngokuzenzakalela"</string>
     <string name="quick_settings_rotation_locked_label" msgid="8058646447242565486">"Ukuphendula kukhiyiwe"</string>
+    <string name="quick_settings_rotation_locked_portrait_label" msgid="1553131290066230775">"Kukhiyelwe ekumeni ngobude"</string>
+    <string name="quick_settings_rotation_locked_landscape_label" msgid="7216265671276086593">"Kukhiyelwe ekwakhiweni kwezwe"</string>
     <string name="quick_settings_ime_label" msgid="7073463064369468429">"Indlela yokungenayo"</string>
     <string name="quick_settings_location_label" msgid="5011327048748762257">"Indawo"</string>
     <string name="quick_settings_location_off_label" msgid="7464544086507331459">"Indawo ivaliwe"</string>
@@ -194,12 +198,28 @@
     <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Akuxhunyiwe"</string>
     <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Ayikho inethiwekhi"</string>
     <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"I-Wi-Fi icimile"</string>
-    <string name="quick_settings_wifi_display_label" msgid="6893592964463624333">"Ukuboniswa kwe-Wi-"</string>
-    <string name="quick_settings_wifi_display_no_connection_label" msgid="2355298740765736918">"Ukubonisa okungenazintambo"</string>
+    <string name="quick_settings_remote_display_no_connection_label" msgid="372107699274391290">"Isikrini sabalingisi"</string>
     <string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Ukugqama"</string>
     <string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"OKUZENZAKALELAYO"</string>
-    <string name="status_bar_help_title" msgid="1199237744086469217">"Izaziso zivela lapha"</string>
-    <string name="status_bar_help_text" msgid="7874607155052076323">"Kufinyelele noma kunini ngokuswayiphela phansi.\nSwayiphela phansi futhi ngezilawuli zesistimu."</string>
-    <string name="hideybar_confirmation_message" msgid="9050869548951044371">"Swayipha unqenqema wesikrini ukuze uveze ibha"</string>
-    <string name="hideybar_confirmation_message_long" msgid="7117692795163620626">"Swayipha kusukela kunqenqema ukuze uveze ibha yesistimu"</string>
+    <string name="quick_settings_inversion_label" msgid="1666358784283020762">"Imodi yokuguqulwa kombala"</string>
+    <string name="quick_settings_contrast_label" msgid="3319507551689108692">"Imodi ethuthukisiwe yokugqama"</string>
+    <string name="quick_settings_color_space_label" msgid="853443689745584770">"Imodi yokulungisa umbala"</string>
+    <string name="recents_empty_message" msgid="2269156590813544104">"OKWAKAMUVA"</string>
+    <string name="recents_app_info_button_label" msgid="2890317189376000030">"Ulwazi lohlelo lokusebenza"</string>
+    <string name="recents_search_bar_label" msgid="8074997400187836677">"sesha"</string>
+    <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Kungenzeka inethiwekhi\niqashiwe"</string>
+    <string name="description_target_search" msgid="3091587249776033139">"Sesha"</string>
+    <string name="description_direction_up" msgid="7169032478259485180">"Shelelisela ngenhla ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+    <string name="description_direction_left" msgid="7207478719805562165">"Shelelisela ngakwesokunxele ku-<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string>
+  <plurals name="zen_mode_notification_title">
+    <item quantity="one" msgid="7809876956258040354">"Isaziso sifihliwe"</item>
+    <item quantity="other" msgid="7388721375827338153">"%d izaziso zifihliwe"</item>
+  </plurals>
+    <string name="zen_mode_notification_text" msgid="8336623711388065713">"Thinta ukuze ubonise"</string>
+    <string name="zen_mode_title" msgid="8793432092004749188">"Ungaphazamisi"</string>
+  <plurals name="keyguard_more_overflow_text">
+    <item quantity="other" msgid="9180696159506883684">"%d okuningi"</item>
+  </plurals>
+    <string name="notification_tap_again" msgid="7590196980943943842">"Thepha futhi ukuze uvule"</string>
+    <string name="keyguard_unlock" msgid="8043466894212841998">"Swayiphela phezulu ukuze uvule"</string>
 </resources>
diff --git a/packages/SystemUI/res/values/arrays.xml b/packages/SystemUI/res/values/arrays.xml
index bfb600d..1ce4983 100644
--- a/packages/SystemUI/res/values/arrays.xml
+++ b/packages/SystemUI/res/values/arrays.xml
@@ -21,21 +21,21 @@
     
     <array name="navbar_search_targets">
         <item>@null</item>
-        <item>@*android:drawable/ic_action_assist_generic</item>
+        <item>@drawable/ic_action_assist_generic</item>
         <item>@null</item>
         <item>@null</item>
     </array>
 
     <array name="navbar_search_target_descriptions">
         <item>@null</item>
-        <item>@*android:string/description_target_search</item>
+        <item>@string/description_target_search</item>
         <item>@null</item>
         <item>@null</item>
     </array>
 
     <array name="navbar_search_direction_descriptions">
         <item>@null</item>
-        <item>@*android:string/description_direction_up</item>
+        <item>@string/description_direction_up</item>
         <item>@null</item>
         <item>@null</item>
     </array>
diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml
index 047570f..734abdc 100644
--- a/packages/SystemUI/res/values/attrs.xml
+++ b/packages/SystemUI/res/values/attrs.xml
@@ -42,7 +42,9 @@
         <attr name="decayTime" format="integer" />
         <attr name="orientation" />
     </declare-styleable>
-
+    <declare-styleable name="BatteryMeterView">
+        <attr name="frameColor" format="color" />
+    </declare-styleable>
     <attr name="orientation">
         <enum name="horizontal" value="0" />
         <enum name="vertical" value="1" />
diff --git a/packages/SystemUI/res/values/colors.xml b/packages/SystemUI/res/values/colors.xml
index 0bbdead..9281265 100644
--- a/packages/SystemUI/res/values/colors.xml
+++ b/packages/SystemUI/res/values/colors.xml
@@ -31,9 +31,32 @@
     <drawable name="notification_item_background_legacy_color">#ffaaaaaa</drawable>
     <drawable name="heads_up_notification_bg_pressed">#ff33B5E5</drawable>
     <drawable name="notification_header_bg">#FF000000</drawable>
-    <color name="notification_panel_scrim_color">#B0000000</color>
+    <color name="notification_panel_scrim_color">#A0000000</color>
+    <color name="notification_panel_scrim_color_keyguard">#80000000</color>
     <color name="batterymeter_frame_color">#66FFFFFF</color><!-- 40% white -->
     <color name="batterymeter_charge_color">#FFFFFFFF</color>
-    <color name="batterymeter_bolt_color">#B2000000</color><!-- 70% black -->
+    <color name="batterymeter_bolt_color">#FFFFFFFF</color>
+    <color name="qs_batterymeter_frame_color">#FF404040</color>
     <color name="status_bar_clock_color">#FFFFFFFF</color>
+    <drawable name="notification_item_background_color">#ff111111</drawable>
+    <drawable name="notification_item_background_color_pressed">#ff454545</drawable>
+
+    <!-- Tint color for inactive Quick Settings icons. -->
+    <color name="ic_qs_off">#ff404040</color>
+
+    <!-- Tint color for active Quick Settings icons. -->
+    <color name="ic_qs_on">#ffffffff</color>
+
+    <!-- Tint color for the content on the notification overflow card. -->
+    <color name="keyguard_overflow_content_color">#ff666666</color>
+
+    <!-- The default recents task bar background color. -->
+    <color name="recents_task_bar_default_background_color">#e6444444</color>
+    <!-- The default recents task bar text color. -->
+    <color name="recents_task_bar_default_text_color">#ffffffff</color>
+    <!-- The recents task bar light text color to be drawn on top of dark backgrounds. -->
+    <color name="recents_task_bar_light_text_color">#ffffffff</color>
+    <!-- The recents task bar dark text color to be drawn on top of light backgrounds. -->
+    <color name="recents_task_bar_dark_text_color">#ff222222</color>
+
 </resources>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 3869db3..722ca15 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -50,16 +50,16 @@
     <!-- When true, show 1/2G networks as 3G. -->
     <bool name="config_showMin3G">false</bool>
 
-    <!-- Show rotation lock button in phone-style notification panel. -->
+    <!-- Show rotation lock toggle in System UI-->
     <bool name="config_showRotationLock">true</bool>
 
     <!-- Amount of time to hold off before showing the search panel when the user presses home -->
     <integer name="config_show_search_delay">200</integer>
 
-    <!-- Vibration duration for MultiWaveView used in SearchPanelView -->
+    <!-- Vibration duration for GlowPadView used in SearchPanelView -->
     <integer translatable="false" name="config_vibration_duration">0</integer>
 
-    <!-- Vibration duration for MultiWaveView used in SearchPanelView -->
+    <!-- Vibration duration for GlowPadView used in SearchPanelView -->
     <integer translatable="false" name="config_search_panel_view_vibration_duration">20</integer>
 
     <!-- The length of the vibration when the notification pops open. -->
@@ -72,7 +72,7 @@
     <!-- decay duration (from size_max -> size), in ms -->
     <integer name="navigation_bar_deadzone_hold">333</integer>
     <integer name="navigation_bar_deadzone_decay">333</integer>
-    
+
     <bool name="config_dead_zone_flash">false</bool>
 
     <!-- Min alpha % that recent items will fade to while being dismissed -->
@@ -81,12 +81,15 @@
     <!-- The number of columns in the QuickSettings -->
     <integer name="quick_settings_num_columns">3</integer>
 
+    <!-- The maximum number of rows in the QuickSettings -->
+    <integer name="quick_settings_max_rows">4</integer>
+
+    <!-- The maximum number of rows in the QuickSettings when on the keyguard -->
+    <integer name="quick_settings_max_rows_keyguard">3</integer>
+
     <!-- The number of columns that the top level tiles span in the QuickSettings -->
     <integer name="quick_settings_user_time_settings_tile_span">1</integer>
 
-    <!-- Whether rotation lock shows up in quick settings or not -->
-    <bool name="quick_settings_show_rotation_lock">false</bool>
-
     <!-- Whether or not the RSSI tile is capitalized or not. -->
     <bool name="quick_settings_rssi_tile_capitalization">true</bool>
 
@@ -96,11 +99,8 @@
 
     <integer name="blinds_pop_duration_ms">10</integer>
 
-    <!-- Disable the separate quick settings panel -->
-    <bool name="config_hasSettingsPanel">true</bool>
-
-    <!-- Enable the "flip settings" panel -->
-    <bool name="config_hasFlipSettingsPanel">true</bool>
+    <!-- The device supports quick settings. -->
+    <bool name="config_hasQuickSettings">true</bool>
 
     <!-- Should "4G" be shown instead of "LTE" when the network is NETWORK_TYPE_LTE? -->
     <bool name="config_show4GForLTE">true</bool>
@@ -110,5 +110,23 @@
 
     <!-- milliseconds before the heads up notification accepts touches. -->
     <integer name="heads_up_sensitivity_delay">700</integer>
+
+    <!-- The min animation duration for animating views that are currently visible. -->
+    <integer name="recents_filter_animate_current_views_min_duration">175</integer>
+    <!-- The min animation duration for animating views that are newly visible. -->
+    <integer name="recents_filter_animate_new_views_min_duration">125</integer>
+    <!-- The min animation duration for animating views that are newly visible. -->
+    <integer name="recents_animate_task_bar_enter_duration">200</integer>
+    <!-- The animation duration for animating in the info pane. -->
+    <integer name="recents_animate_task_view_info_pane_duration">150</integer>
+    <!-- The minimum alpha for the dim applied to cards that go deeper into the stack. -->
+    <integer name="recents_max_task_stack_view_dim">96</integer>
+
+    <!-- Whether to enable KeyguardService or not -->
+    <bool name="config_enableKeyguardService">true</bool>
+
+    <!-- The maximum count of notifications on Keyguard. The rest will be collapsed in an overflow
+     card. -->
+    <integer name="keyguard_max_notification_count">4</integer>
 </resources>
 
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index cc78cb4..2f2914c 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -79,11 +79,8 @@
     <!-- Height of a large notification in the status bar -->
     <dimen name="notification_max_height">256dp</dimen>
 
-    <!-- Height of a small notification in the status bar plus glow, padding, etc -->
-    <dimen name="notification_row_min_height">70dp</dimen>
-
-    <!-- Height of a large notification in the status bar plus glow, padding, etc -->
-    <dimen name="notification_row_max_height">260dp</dimen>
+    <!-- Height of a medium notification in the status bar -->
+    <dimen name="notification_mid_height">128dp</dimen>
 
     <!-- size at which Notification icons will be drawn in the status bar -->
     <dimen name="status_bar_icon_drawing_size">18dip</dimen>
@@ -95,7 +92,7 @@
     <dimen name="status_bar_icon_padding">0dp</dimen>
 
     <!-- half the distance between notifications in the panel -->
-    <dimen name="notification_divider_height">3dp</dimen>
+    <dimen name="notification_divider_height">2dp</dimen>
 
     <!-- Notification drawer tuning parameters (phone UI) -->
     <!-- Initial velocity of the shade when expanding on its own -->
@@ -131,8 +128,8 @@
     <!-- The width of the view containing non-menu status bar icons -->
     <dimen name="navigation_key_width">80dip</dimen>
 
-    <!-- The width of the view containing the menu status bar icon -->
-    <dimen name="navigation_menu_key_width">40dip</dimen>
+    <!-- The width of the view containing the menu/ime navigation bar icons -->
+    <dimen name="navigation_extra_key_width">40dip</dimen>
 
     <!-- Default distance beyond which snaps to the matching target -->
     <dimen name="navbar_search_snap_margin">40dip</dimen>
@@ -164,28 +161,22 @@
     <!-- Extra space above the clock in the panel -->
     <dimen name="notification_panel_header_padding_top">0dp</dimen>
 
+    <!-- Extra space above the panel holder -->
+    <dimen name="panel_holder_padding_top">0dp</dimen>
+
     <!-- Layout parameters for the notification panel -->
     <dimen name="notification_panel_margin_bottom">0dp</dimen>
     <dimen name="notification_panel_margin_left">0dp</dimen>
 
-    <!-- Gravity for the notification & quick settings panels -->
+    <!-- Gravity for the notification panel -->
     <!-- 0x37 = fill_horizontal|top -->
     <integer name="notification_panel_layout_gravity">0x37</integer>
-    <integer name="settings_panel_layout_gravity">0x37</integer>
-
-    <!-- Fraction of the status bar that, when dragged, will produce the quick settings panel
-         instead of the notification panel. See also @dimen/settings_panel_dragzone_min.
-         If zero, the settings panel will not be directly draggable from the status bar. -->
-    <item type="dimen" name="settings_panel_dragzone_fraction">0%</item>
-
-    <!-- Quick settings dragzone, if used, should be at least this big (may be zero). -->
-    <dimen name="settings_panel_dragzone_min">100dp</dimen>
 
     <!-- Height of the carrier/wifi name label -->
     <dimen name="carrier_label_height">24dp</dimen>
 
     <!-- The distance you can pull a notification before it pops open -->
-    <dimen name="one_finger_pop_limit">32dp</dimen>
+    <dimen name="one_finger_pop_limit">0dp</dimen>
 
     <!-- The fixed height of each tile -->
     <dimen name="quick_settings_cell_height">110dp</dimen>
@@ -197,7 +188,7 @@
          Not used at this screen size. -->
     <item type="dimen" name="notification_panel_min_height_frac">0%</item>
 
-    <dimen name="blinds_pop_threshold">32dp</dimen>
+    <dimen name="blinds_pop_threshold">0dp</dimen>
 
     <!-- The size of the gesture span needed to activate the "pull" notification expansion -->
     <dimen name="pull_span_min">25dp</dimen>
@@ -220,4 +211,64 @@
 
     <!-- used by DessertCase -->
     <dimen name="dessert_case_cell_size">192dp</dimen>
+
+    <!-- Default glow radius for GlowPadView -->
+    <dimen name="glowpadview_glow_radius">75dip</dimen>
+
+    <!-- Default distance from each snap target that GlowPadView considers a "hit" -->
+    <dimen name="glowpadview_inner_radius">15dip</dimen>
+
+    <!-- The size of the application icon in the recents task view. -->
+    <dimen name="recents_task_view_application_icon_size">60dp</dimen>
+
+    <!-- The size of the activity icon in the recents task view. -->
+    <dimen name="recents_task_view_activity_icon_size">60dp</dimen>
+
+    <!-- The radius of the rounded corners on a task view. -->
+    <dimen name="recents_task_view_rounded_corners_radius">2dp</dimen>
+
+    <!-- The amount of space a user has to scroll to dismiss any info panes. -->
+    <dimen name="recents_task_stack_scroll_dismiss_info_pane_distance">50dp</dimen>
+
+    <!-- The height of the search bar space. -->
+    <dimen name="recents_search_bar_space_height">40dp</dimen>
+
+    <!-- The search bar edge margins. -->
+    <dimen name="recents_search_bar_space_edge_margins">12dp</dimen>
+
+    <!-- Used to calculate the translation animation duration, the expected amount of movement 
+         in dps over one second of time. -->
+    <dimen name="recents_animation_movement_in_dps_per_second">800dp</dimen>
+
+    <!-- Space below the notification stack -->
+    <dimen name="notification_stack_margin_bottom">0dp</dimen>
+
+    <!-- Space reserved for the cards behind the top card in the top stack -->
+    <dimen name="top_stack_peek_amount">12dp</dimen>
+
+    <!-- Space reserved for the cards behind the top card in the bottom stack -->
+    <dimen name="bottom_stack_peek_amount">18dp</dimen>
+
+    <!-- The side padding of the notifications-->
+    <dimen name="notification_side_padding">8dp</dimen>
+
+    <!-- Z distance between notifications if they are in the stack -->
+    <dimen name="z_distance_between_notifications">2dp</dimen>
+
+    <!-- The padding between the individual notification cards. -->
+    <dimen name="notification_padding">3dp</dimen>
+
+    <!-- Width of the zen mode interstitial dialog. -->
+    <dimen name="zen_mode_dialog_width">320dp</dimen>
+
+    <!-- Camera affordance drag distance -->
+    <dimen name="camera_drag_distance">100dp</dimen>
+
+    <dimen name="quick_settings_tmp_scrim_stroke_width">8dp</dimen>
+    <dimen name="quick_settings_tmp_scrim_text_size">30dp</dimen>
+
+    <dimen name="notifications_top_padding">8dp</dimen>
+    
+    <!-- Minimum distance the user has to drag down to go to the full shade. -->
+    <dimen name="keyguard_drag_down_min_distance">100dp</dimen>
 </resources>
diff --git a/packages/SystemUI/res/values/internal.xml b/packages/SystemUI/res/values/internal.xml
new file mode 100644
index 0000000..ddaab942
--- /dev/null
+++ b/packages/SystemUI/res/values/internal.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<resources>
+    <dimen name="status_bar_height">@*android:dimen/status_bar_height</dimen>
+    <dimen name="navigation_bar_height">@*android:dimen/navigation_bar_height</dimen>
+    <drawable name="notification_quantum_bg">@*android:drawable/notification_quantum_bg</drawable>
+</resources>
+
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index e36ca8e..b4a13d4 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -464,6 +464,10 @@
     <string name="quick_settings_rotation_unlocked_label">Auto Rotate</string>
     <!-- QuickSettings: Rotation Locked [CHAR LIMIT=NONE] -->
     <string name="quick_settings_rotation_locked_label">Rotation Locked</string>
+    <!-- QuickSettings: Locked to Portrait [CHAR LIMIT=NONE] -->
+    <string name="quick_settings_rotation_locked_portrait_label">Locked to Portrait</string>
+    <!-- QuickSettings: Locked to Landscape [CHAR LIMIT=NONE] -->
+    <string name="quick_settings_rotation_locked_landscape_label">Locked to Landscape</string>
     <!-- QuickSettings: IME [CHAR LIMIT=NONE] -->
     <string name="quick_settings_ime_label">Input Method</string>
     <!-- QuickSettings: Location [CHAR LIMIT=NONE] -->
@@ -496,6 +500,19 @@
     <string name="quick_settings_brightness_dialog_title">Brightness</string>
     <!-- QuickSettings: Brightness dialog auto brightness button [CHAR LIMIT=NONE] -->
     <string name="quick_settings_brightness_dialog_auto_brightness_label">AUTO</string>
+    <!-- QuickSettings: Label for the toggle that controls whether display inversion is enabled. [CHAR LIMIT=NONE] -->
+    <string name="quick_settings_inversion_label">Color inversion mode</string>
+    <!-- QuickSettings: Label for the toggle that controls whether display contrast enhancement is enabled. [CHAR LIMIT=NONE] -->
+    <string name="quick_settings_contrast_label">Enhanced contrast mode</string>
+    <!-- QuickSettings: Label for the toggle that controls whether display color correction is enabled. [CHAR LIMIT=NONE] -->
+    <string name="quick_settings_color_space_label">Color correction mode</string>
+
+    <!-- Recents: The empty recents string. [CHAR LIMIT=NONE] -->
+    <string name="recents_empty_message">RECENTS</string>
+    <!-- Recents: The info panel app info button string. [CHAR LIMIT=NONE] -->
+    <string name="recents_app_info_button_label">Application Info</string>
+    <!-- Recents: Temporary string for the button in the recents search bar. [CHAR LIMIT=NONE] -->
+    <string name="recents_search_bar_label">search</string>
 
 
     <!-- Glyph to be overlaid atop the battery when the level is extremely low. Do not translate. -->
@@ -507,4 +524,32 @@
          linebreak to position it correctly.  [CHAR LIMIT=45] -->
     <string name="ssl_ca_cert_warning">Network may\nbe monitored</string>
 
+    <!-- Description of the unlock target in the Slide unlock screen. [CHAR LIMIT=NONE] -->
+    <string name="description_target_search">Search</string>
+    <!-- Description of the up direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
+    <string name="description_direction_up">Slide up for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
+    <!-- Description of the left direction in which one can to slide the handle in the Slide unlock screen. [CHAR LIMIT=NONE] -->
+    <string name="description_direction_left">"Slide left for <xliff:g id="target_description" example="Unlock">%s</xliff:g>.</string>
+
+    <!-- Zen mode: Summary notification content title. [CHAR LIMIT=NONE] -->
+    <plurals name="zen_mode_notification_title">
+        <item quantity="one">Notification hidden</item>
+        <item quantity="other">%d notifications hidden</item>
+    </plurals>
+    <!-- Zen mode: Summary notification content text. [CHAR LIMIT=NONE] -->
+    <string name="zen_mode_notification_text">Touch to show</string>
+
+    <!-- Zen mode: Short title. [CHAR LIMIT=40] -->
+    <string name="zen_mode_title">Do not disturb</string>
+
+    <!-- Text for overflow card on Keyguard when there is not enough space for all notifications on Keyguard. [CHAR LIMIT=12] -->
+    <plurals name="keyguard_more_overflow_text">
+        <item quantity="other">%d more</item>
+    </plurals>
+
+    <!-- Shows to explain the double tap interaction with notifications: After tapping a notification on Keyguard, this will explain users to tap again to launch a notification. [CHAR LIMIT=60] -->
+    <string name="notification_tap_again">Tap again to open</string>
+
+    <!-- Shows when people have pressed the unlock icon to explain how to unlock. [CHAR LIMIT=60] -->
+    <string name="keyguard_unlock">Swipe up to unlock</string>
 </resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 54f03bd..8ab646d 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -16,7 +16,14 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
 
-    <style name="RecentsStyle" parent="@android:style/Theme.Holo.Wallpaper.NoTitleBar">
+    <style name="RecentsStyle" parent="@android:style/Theme.DeviceDefault.Wallpaper.NoTitleBar">
+        <item name="android:windowAnimationStyle">@style/Animation.RecentsActivity</item>
+    </style>
+
+    <!-- Alternate Recents theme -->
+    <style name="RecentsTheme" parent="@android:style/Theme.DeviceDefault.Wallpaper.NoTitleBar">
+        <item name="android:windowTranslucentStatus">true</item>
+        <item name="android:windowTranslucentNavigation">true</item>
         <item name="android:windowAnimationStyle">@style/Animation.RecentsActivity</item>
     </style>
 
@@ -130,10 +137,9 @@
     <style name="BaseBrightnessDialogContainer">
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">wrap_content</item>
-        <item name="android:layout_marginLeft">8dp</item>
-        <item name="android:layout_marginRight">8dp</item>
         <item name="android:padding">16dp</item>
     </style>
+
     <style name="BrightnessDialogContainer" parent="@style/BaseBrightnessDialogContainer" />
 
     <style name="Animation" />
@@ -162,5 +168,7 @@
         <!-- Note: must be dp to fit in status bar -->
         <item name="android:textSize">14dp</item>
     </style>
-    
+
+    <style name="systemui_theme" parent="@android:style/Theme.DeviceDefault" />
+
 </resources>
diff --git a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
index 13aafb2..19d06be 100755
--- a/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
+++ b/packages/SystemUI/src/com/android/systemui/BatteryMeterView.java
@@ -27,7 +27,6 @@
 import android.graphics.Path;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuffXfermode;
-import android.graphics.Rect;
 import android.graphics.RectF;
 import android.graphics.Typeface;
 import android.os.BatteryManager;
@@ -40,20 +39,20 @@
     public static final String TAG = BatteryMeterView.class.getSimpleName();
     public static final String ACTION_LEVEL_TEST = "com.android.systemui.BATTERY_LEVEL_TEST";
 
-    public static final boolean ENABLE_PERCENT = true;
-    public static final boolean SINGLE_DIGIT_PERCENT = false;
-    public static final boolean SHOW_100_PERCENT = false;
+    private static final boolean ENABLE_PERCENT = true;
+    private static final boolean SINGLE_DIGIT_PERCENT = false;
+    private static final boolean SHOW_100_PERCENT = false;
 
-    public static final int FULL = 96;
-    public static final int EMPTY = 4;
+    private static final int FULL = 96;
+    private static final int EMPTY = 4;
 
-    public static final float SUBPIXEL = 0.4f;  // inset rects for softer edges
+    private static final float SUBPIXEL = 0.4f;  // inset rects for softer edges
+    private static final float BOLT_LEVEL_THRESHOLD = 0.3f;  // opaque bolt below this fraction
 
-    int[] mColors;
+    private final int[] mColors;
 
     boolean mShowPercent = true;
-    Paint mFramePaint, mBatteryPaint, mWarningTextPaint, mTextPaint, mBoltPaint;
-    int mButtonHeight;
+    private final Paint mFramePaint, mBatteryPaint, mWarningTextPaint, mTextPaint, mBoltPaint;
     private float mTextHeight, mWarningTextHeight;
 
     private int mHeight;
@@ -65,9 +64,12 @@
 
     private final RectF mFrame = new RectF();
     private final RectF mButtonFrame = new RectF();
-    private final RectF mClipFrame = new RectF();
     private final RectF mBoltFrame = new RectF();
 
+    private final Path mShapePath = new Path();
+    private final Path mClipPath = new Path();
+    private final Path mTextPath = new Path();
+
     private class BatteryTracker extends BroadcastReceiver {
         public static final int UNKNOWN_LEVEL = -1;
 
@@ -176,6 +178,10 @@
         super(context, attrs, defStyle);
 
         final Resources res = context.getResources();
+        TypedArray atts = context.obtainStyledAttributes(attrs, R.styleable.BatteryMeterView,
+                defStyle, 0);
+        final int frameColor = atts.getColor(R.styleable.BatteryMeterView_frameColor,
+                res.getColor(R.color.batterymeter_frame_color));
         TypedArray levels = res.obtainTypedArray(R.array.batterymeter_color_levels);
         TypedArray colors = res.obtainTypedArray(R.array.batterymeter_color_values);
 
@@ -187,17 +193,16 @@
         }
         levels.recycle();
         colors.recycle();
+        atts.recycle();
         mShowPercent = ENABLE_PERCENT && 0 != Settings.System.getInt(
                 context.getContentResolver(), "status_bar_show_battery_percent", 0);
-
         mWarningString = context.getString(R.string.battery_meter_very_low_overlay_symbol);
 
         mFramePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        mFramePaint.setColor(res.getColor(R.color.batterymeter_frame_color));
+        mFramePaint.setColor(frameColor);
         mFramePaint.setDither(true);
         mFramePaint.setStrokeWidth(0);
         mFramePaint.setStyle(Paint.Style.FILL_AND_STROKE);
-        mFramePaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));
 
         mBatteryPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         mBatteryPaint.setDither(true);
@@ -205,8 +210,7 @@
         mBatteryPaint.setStyle(Paint.Style.FILL_AND_STROKE);
 
         mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
-        mTextPaint.setColor(0xFFFFFFFF);
-        Typeface font = Typeface.create("sans-serif-condensed", Typeface.NORMAL);
+        Typeface font = Typeface.create("sans-serif-condensed", Typeface.BOLD);
         mTextPaint.setTypeface(font);
         mTextPaint.setTextAlign(Paint.Align.CENTER);
 
@@ -218,11 +222,9 @@
 
         mChargeColor = getResources().getColor(R.color.batterymeter_charge_color);
 
-        mBoltPaint = new Paint();
-        mBoltPaint.setAntiAlias(true);
+        mBoltPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
         mBoltPaint.setColor(res.getColor(R.color.batterymeter_bolt_color));
         mBoltPoints = loadBoltPoints(res);
-        setLayerType(View.LAYER_TYPE_SOFTWARE, null);
     }
 
     private static float[] loadBoltPoints(Resources res) {
@@ -270,36 +272,34 @@
         final int pl = getPaddingLeft();
         final int pr = getPaddingRight();
         final int pb = getPaddingBottom();
-        int height = mHeight - pt - pb;
-        int width = mWidth - pl - pr;
+        final int height = mHeight - pt - pb;
+        final int width = mWidth - pl - pr;
 
-        mButtonHeight = (int) (height * 0.12f);
+        final int buttonHeight = (int) (height * 0.12f);
 
         mFrame.set(0, 0, width, height);
         mFrame.offset(pl, pt);
 
+        // button-frame: area above the battery body
         mButtonFrame.set(
                 mFrame.left + width * 0.25f,
                 mFrame.top,
                 mFrame.right - width * 0.25f,
-                mFrame.top + mButtonHeight + 5 /*cover frame border of intersecting area*/);
+                mFrame.top + buttonHeight);
 
         mButtonFrame.top += SUBPIXEL;
         mButtonFrame.left += SUBPIXEL;
         mButtonFrame.right -= SUBPIXEL;
 
-        mFrame.top += mButtonHeight;
+        // frame: battery body area
+        mFrame.top += buttonHeight;
         mFrame.left += SUBPIXEL;
         mFrame.top += SUBPIXEL;
         mFrame.right -= SUBPIXEL;
         mFrame.bottom -= SUBPIXEL;
 
-        // first, draw the battery shape
-        c.drawRect(mFrame, mFramePaint);
-
-        // fill 'er up
-        final int color = tracker.plugged ? mChargeColor : getColorForLevel(level);
-        mBatteryPaint.setColor(color);
+        // set the battery charging color
+        mBatteryPaint.setColor(tracker.plugged ? mChargeColor : getColorForLevel(level));
 
         if (level >= FULL) {
             drawFrac = 1f;
@@ -307,18 +307,23 @@
             drawFrac = 0f;
         }
 
-        c.drawRect(mButtonFrame, drawFrac == 1f ? mBatteryPaint : mFramePaint);
+        final float levelTop = drawFrac == 1f ? mButtonFrame.top
+                : (mFrame.top + (mFrame.height() * (1f - drawFrac)));
 
-        mClipFrame.set(mFrame);
-        mClipFrame.top += (mFrame.height() * (1f - drawFrac));
-
-        c.save(Canvas.CLIP_SAVE_FLAG);
-        c.clipRect(mClipFrame);
-        c.drawRect(mFrame, mBatteryPaint);
-        c.restore();
+        // define the battery shape
+        mShapePath.reset();
+        mShapePath.moveTo(mButtonFrame.left, mButtonFrame.top);
+        mShapePath.lineTo(mButtonFrame.right, mButtonFrame.top);
+        mShapePath.lineTo(mButtonFrame.right, mFrame.top);
+        mShapePath.lineTo(mFrame.right, mFrame.top);
+        mShapePath.lineTo(mFrame.right, mFrame.bottom);
+        mShapePath.lineTo(mFrame.left, mFrame.bottom);
+        mShapePath.lineTo(mFrame.left, mFrame.top);
+        mShapePath.lineTo(mButtonFrame.left, mFrame.top);
+        mShapePath.lineTo(mButtonFrame.left, mButtonFrame.top);
 
         if (tracker.plugged) {
-            // draw the bolt
+            // define the bolt shape
             final float bl = mFrame.left + mFrame.width() / 4.5f;
             final float bt = mFrame.top + mFrame.height() / 6f;
             final float br = mFrame.right - mFrame.width() / 7f;
@@ -339,24 +344,61 @@
                         mBoltFrame.left + mBoltPoints[0] * mBoltFrame.width(),
                         mBoltFrame.top + mBoltPoints[1] * mBoltFrame.height());
             }
-            c.drawPath(mBoltPath, mBoltPaint);
-        } else if (level <= EMPTY) {
-            final float x = mWidth * 0.5f;
-            final float y = (mHeight + mWarningTextHeight) * 0.48f;
-            c.drawText(mWarningString, x, y, mWarningTextPaint);
-        } else if (mShowPercent && !(tracker.level == 100 && !SHOW_100_PERCENT)) {
+
+            float boltPct = (mBoltFrame.bottom - levelTop) / (mBoltFrame.bottom - mBoltFrame.top);
+            boltPct = Math.min(Math.max(boltPct, 0), 1);
+            if (boltPct <= BOLT_LEVEL_THRESHOLD) {
+                // draw the bolt if opaque
+                c.drawPath(mBoltPath, mBoltPaint);
+            } else {
+                // otherwise cut the bolt out of the overall shape
+                mShapePath.op(mBoltPath, Path.Op.DIFFERENCE);
+            }
+        }
+
+        // compute percentage text
+        boolean pctOpaque = false;
+        float pctX = 0, pctY = 0;
+        String pctText = null;
+        if (!tracker.plugged && level > EMPTY && mShowPercent
+                && !(tracker.level == 100 && !SHOW_100_PERCENT)) {
+            mTextPaint.setColor(getColorForLevel(level));
             mTextPaint.setTextSize(height *
                     (SINGLE_DIGIT_PERCENT ? 0.75f
                             : (tracker.level == 100 ? 0.38f : 0.5f)));
             mTextHeight = -mTextPaint.getFontMetrics().ascent;
+            pctText = String.valueOf(SINGLE_DIGIT_PERCENT ? (level/10) : level);
+            pctX = mWidth * 0.5f;
+            pctY = (mHeight + mTextHeight) * 0.47f;
+            pctOpaque = levelTop > pctY;
+            if (!pctOpaque) {
+                mTextPath.reset();
+                mTextPaint.getTextPath(pctText, 0, pctText.length(), pctX, pctY, mTextPath);
+                // cut the percentage text out of the overall shape
+                mShapePath.op(mTextPath, Path.Op.DIFFERENCE);
+            }
+        }
 
-            final String str = String.valueOf(SINGLE_DIGIT_PERCENT ? (level/10) : level);
-            final float x = mWidth * 0.5f;
-            final float y = (mHeight + mTextHeight) * 0.47f;
-            c.drawText(str,
-                    x,
-                    y,
-                    mTextPaint);
+        // draw the battery shape background
+        c.drawPath(mShapePath, mFramePaint);
+
+        // draw the battery shape, clipped to charging level
+        mFrame.top = levelTop;
+        mClipPath.reset();
+        mClipPath.addRect(mFrame,  Path.Direction.CCW);
+        mShapePath.op(mClipPath, Path.Op.INTERSECT);
+        c.drawPath(mShapePath, mBatteryPaint);
+
+        if (!tracker.plugged) {
+            if (level <= EMPTY) {
+                // draw the warning text
+                final float x = mWidth * 0.5f;
+                final float y = (mHeight + mWarningTextHeight) * 0.48f;
+                c.drawText(mWarningString, x, y, mWarningTextPaint);
+            } else if (pctOpaque) {
+                // draw the percentage text
+                c.drawText(pctText, pctX, pctY, mTextPaint);
+            }
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/DemoMode.java b/packages/SystemUI/src/com/android/systemui/DemoMode.java
index 8d271e4..c16c3a1 100644
--- a/packages/SystemUI/src/com/android/systemui/DemoMode.java
+++ b/packages/SystemUI/src/com/android/systemui/DemoMode.java
@@ -31,4 +31,5 @@
     public static final String COMMAND_NETWORK = "network";
     public static final String COMMAND_BARS = "bars";
     public static final String COMMAND_STATUS = "status";
+    public static final String COMMAND_NOTIFICATIONS = "notifications";
 }
diff --git a/packages/SystemUI/src/com/android/systemui/DessertCase.java b/packages/SystemUI/src/com/android/systemui/DessertCase.java
index d797e38..a96f024 100644
--- a/packages/SystemUI/src/com/android/systemui/DessertCase.java
+++ b/packages/SystemUI/src/com/android/systemui/DessertCase.java
@@ -16,13 +16,10 @@
 
 package com.android.systemui;
 
-import android.animation.ObjectAnimator;
 import android.app.Activity;
 import android.content.ComponentName;
 import android.content.pm.PackageManager;
-import android.os.Handler;
 import android.util.Slog;
-import android.view.animation.DecelerateInterpolator;
 
 public class DessertCase extends Activity {
     DessertCaseView mView;
diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
index e1a4bb2..4d6d815c 100644
--- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java
@@ -19,9 +19,9 @@
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.content.Context;
+import android.media.AudioManager;
 import android.os.Vibrator;
 import android.util.Log;
 import android.view.Gravity;
@@ -29,14 +29,16 @@
 import android.view.ScaleGestureDetector;
 import android.view.ScaleGestureDetector.OnScaleGestureListener;
 import android.view.View;
-import android.view.View.OnClickListener;
 import android.view.ViewConfiguration;
-import android.view.ViewGroup;
 
-public class ExpandHelper implements Gefingerpoken, OnClickListener {
+import com.android.systemui.statusbar.ExpandableNotificationRow;
+import com.android.systemui.statusbar.ExpandableView;
+import com.android.systemui.statusbar.policy.ScrollAdapter;
+
+public class ExpandHelper implements Gefingerpoken {
     public interface Callback {
-        View getChildAtRawPosition(float x, float y);
-        View getChildAtPosition(float x, float y);
+        ExpandableView getChildAtRawPosition(float x, float y);
+        ExpandableView getChildAtPosition(float x, float y);
         boolean canChildBeExpanded(View v);
         void setUserExpandedChild(View v, boolean userExpanded);
         void setUserLockedChild(View v, boolean userLocked);
@@ -45,9 +47,7 @@
     private static final String TAG = "ExpandHelper";
     protected static final boolean DEBUG = false;
     protected static final boolean DEBUG_SCALE = false;
-    protected static final boolean DEBUG_GLOW = false;
     private static final long EXPAND_DURATION = 250;
-    private static final long GLOW_DURATION = 150;
 
     // Set to false to disable focus-based gestures (spread-finger vertical pull).
     private static final boolean USE_DRAG = true;
@@ -78,8 +78,6 @@
     private boolean mHasPopped;
     private View mEventSource;
     private View mCurrView;
-    private View mCurrViewTopGlow;
-    private View mCurrViewBottomGlow;
     private float mOldHeight;
     private float mNaturalHeight;
     private float mInitialTouchFocusY;
@@ -96,9 +94,6 @@
     private ScaleGestureDetector mSGD;
     private ViewScaler mScaler;
     private ObjectAnimator mScaleAnimation;
-    private AnimatorSet mGlowAnimationSet;
-    private ObjectAnimator mGlowTopAnimation;
-    private ObjectAnimator mGlowBottomAnimation;
     private Vibrator mVibrator;
 
     private int mSmallSize;
@@ -107,7 +102,7 @@
 
     private int mGravity;
 
-    private View mScrollView;
+    private ScrollAdapter mScrollAdapter;
 
     private OnScaleGestureListener mScaleGestureListener
             = new ScaleGestureDetector.SimpleOnScaleGestureListener() {
@@ -117,10 +112,8 @@
             float focusX = detector.getFocusX();
             float focusY = detector.getFocusY();
 
-            final View underFocus = findView(focusX, focusY);
-            if (underFocus != null) {
-                startExpanding(underFocus, STRETCH);
-            }
+            final ExpandableView underFocus = findView(focusX, focusY);
+            startExpanding(underFocus, STRETCH);
             return mExpanding;
         }
 
@@ -136,41 +129,21 @@
     };
 
     private class ViewScaler {
-        View mView;
+        ExpandableView mView;
 
         public ViewScaler() {}
-        public void setView(View v) {
+        public void setView(ExpandableView v) {
             mView = v;
         }
         public void setHeight(float h) {
             if (DEBUG_SCALE) Log.v(TAG, "SetHeight: setting to " + h);
-            ViewGroup.LayoutParams lp = mView.getLayoutParams();
-            lp.height = (int)h;
-            mView.setLayoutParams(lp);
-            mView.requestLayout();
+            mView.setActualHeight((int) h);
         }
         public float getHeight() {
-            int height = mView.getLayoutParams().height;
-            if (height < 0) {
-                height = mView.getMeasuredHeight();
-            }
-            return height;
+            return mView.getActualHeight();
         }
         public int getNaturalHeight(int maximum) {
-            ViewGroup.LayoutParams lp = mView.getLayoutParams();
-            if (DEBUG_SCALE) Log.v(TAG, "Inspecting a child of type: " +
-                    mView.getClass().getName());
-            int oldHeight = lp.height;
-            lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
-            mView.setLayoutParams(lp);
-            mView.measure(
-                    View.MeasureSpec.makeMeasureSpec(mView.getMeasuredWidth(),
-                                                     View.MeasureSpec.EXACTLY),
-                    View.MeasureSpec.makeMeasureSpec(maximum,
-                                                     View.MeasureSpec.AT_MOST));
-            lp.height = oldHeight;
-            mView.setLayoutParams(lp);
-            return mView.getMeasuredHeight();
+            return Math.min(maximum, mView.getMaxHeight());
         }
     }
 
@@ -196,32 +169,6 @@
         mPopDuration = mContext.getResources().getInteger(R.integer.blinds_pop_duration_ms);
         mPullGestureMinXSpan = mContext.getResources().getDimension(R.dimen.pull_span_min);
 
-        AnimatorListenerAdapter glowVisibilityController = new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationStart(Animator animation) {
-                View target = (View) ((ObjectAnimator) animation).getTarget();
-                if (target.getAlpha() <= 0.0f) {
-                    target.setVisibility(View.VISIBLE);
-                }
-            }
-
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                View target = (View) ((ObjectAnimator) animation).getTarget();
-                if (target.getAlpha() <= 0.0f) {
-                    target.setVisibility(View.INVISIBLE);
-                }
-            }
-        };
-
-        mGlowTopAnimation = ObjectAnimator.ofFloat(null, "alpha", 0f);
-        mGlowTopAnimation.addListener(glowVisibilityController);
-        mGlowBottomAnimation = ObjectAnimator.ofFloat(null, "alpha", 0f);
-        mGlowBottomAnimation.addListener(glowVisibilityController);
-        mGlowAnimationSet = new AnimatorSet();
-        mGlowAnimationSet.play(mGlowTopAnimation).with(mGlowBottomAnimation);
-        mGlowAnimationSet.setDuration(GLOW_DURATION);
-
         final ViewConfiguration configuration = ViewConfiguration.get(mContext);
         mTouchSlop = configuration.getScaledTouchSlop();
 
@@ -242,7 +189,6 @@
         float newHeight = clamp(target);
         mScaler.setHeight(newHeight);
 
-        setGlow(calculateGlow(target, newHeight));
         mLastFocusY = mSGD.getFocusY();
         mLastSpanY = mSGD.getCurrentSpan();
     }
@@ -254,8 +200,8 @@
         return out;
     }
 
-    private View findView(float x, float y) {
-        View v = null;
+    private ExpandableView findView(float x, float y) {
+        ExpandableView v;
         if (mEventSource != null) {
             int[] location = new int[2];
             mEventSource.getLocationOnScreen(location);
@@ -300,48 +246,8 @@
         mGravity = gravity;
     }
 
-    public void setScrollView(View scrollView) {
-        mScrollView = scrollView;
-    }
-
-    private float calculateGlow(float target, float actual) {
-        // glow if overscale
-        if (DEBUG_GLOW) Log.d(TAG, "target: " + target + " actual: " + actual);
-        float stretch = Math.abs((target - actual) / mMaximumStretch);
-        float strength = 1f / (1f + (float) Math.pow(Math.E, -1 * ((8f * stretch) - 5f)));
-        if (DEBUG_GLOW) Log.d(TAG, "stretch: " + stretch + " strength: " + strength);
-        return (GLOW_BASE + strength * (1f - GLOW_BASE));
-    }
-
-    public void setGlow(float glow) {
-        if (!mGlowAnimationSet.isRunning() || glow == 0f) {
-            if (mGlowAnimationSet.isRunning()) {
-                mGlowAnimationSet.end();
-            }
-            if (mCurrViewTopGlow != null && mCurrViewBottomGlow != null) {
-                if (glow == 0f || mCurrViewTopGlow.getAlpha() == 0f) {
-                    // animate glow in and out
-                    mGlowTopAnimation.setTarget(mCurrViewTopGlow);
-                    mGlowBottomAnimation.setTarget(mCurrViewBottomGlow);
-                    mGlowTopAnimation.setFloatValues(glow);
-                    mGlowBottomAnimation.setFloatValues(glow);
-                    mGlowAnimationSet.setupStartValues();
-                    mGlowAnimationSet.start();
-                } else {
-                    // set it explicitly in reponse to touches.
-                    mCurrViewTopGlow.setAlpha(glow);
-                    mCurrViewBottomGlow.setAlpha(glow);
-                    handleGlowVisibility();
-                }
-            }
-        }
-    }
-
-    private void handleGlowVisibility() {
-        mCurrViewTopGlow.setVisibility(mCurrViewTopGlow.getAlpha() <= 0.0f ?
-                View.INVISIBLE : View.VISIBLE);
-        mCurrViewBottomGlow.setVisibility(mCurrViewBottomGlow.getAlpha() <= 0.0f ?
-                View.INVISIBLE : View.VISIBLE);
+    public void setScrollAdapter(ScrollAdapter adapter) {
+        mScrollAdapter = adapter;
     }
 
     @Override
@@ -377,13 +283,11 @@
                 // detect a vertical pulling gesture with fingers somewhat separated
                 if (DEBUG_SCALE) Log.v(TAG, "got pull gesture (xspan=" + xspan + "px)");
 
-                final View underFocus = findView(x, y);
-                if (underFocus != null) {
-                    startExpanding(underFocus, PULL);
-                }
+                final ExpandableView underFocus = findView(x, y);
+                startExpanding(underFocus, PULL);
                 return true;
             }
-            if (mScrollView != null && mScrollView.getScrollY() > 0) {
+            if (mScrollAdapter != null && !mScrollAdapter.isScrolledToTop()) {
                 return false;
             }
             // Now look for other gestures
@@ -394,9 +298,8 @@
                     if (yDiff > mTouchSlop) {
                         if (DEBUG) Log.v(TAG, "got venetian gesture (dy=" + yDiff + "px)");
                         mLastMotionY = y;
-                        final View underFocus = findView(x, y);
-                        if (underFocus != null) {
-                            startExpanding(underFocus, BLINDS);
+                        final ExpandableView underFocus = findView(x, y);
+                        if (startExpanding(underFocus, BLINDS)) {
                             mInitialTouchY = mLastMotionY;
                             mHasPopped = false;
                         }
@@ -406,7 +309,8 @@
             }
 
             case MotionEvent.ACTION_DOWN:
-                mWatchingForPull = isInside(mScrollView, x, y);
+                mWatchingForPull = mScrollAdapter != null &&
+                        isInside(mScrollAdapter.getHostView(), x, y);
                 mLastMotionY = y;
                 break;
 
@@ -456,14 +360,11 @@
 
                     if (mHasPopped) {
                         mScaler.setHeight(newHeight);
-                        setGlow(GLOW_BASE);
-                    } else {
-                        setGlow(calculateGlow(4f * pull, 0f));
                     }
 
                     final int x = (int) mSGD.getFocusX();
                     final int y = (int) mSGD.getFocusY();
-                    View underFocus = findView(x, y);
+                    ExpandableView underFocus = findView(x, y);
                     if (isFinished && underFocus != null && underFocus != mCurrView) {
                         finishExpanding(false); // @@@ needed?
                         startExpanding(underFocus, BLINDS);
@@ -498,17 +399,22 @@
         return true;
     }
 
-    private void startExpanding(View v, int expandType) {
+    /**
+     * @return True if the view is expandable, false otherwise.
+     */
+    private boolean startExpanding(ExpandableView v, int expandType) {
+        if (!(v instanceof ExpandableNotificationRow)) {
+            return false;
+        }
         mExpansionStyle = expandType;
-        if (mExpanding &&  v == mCurrView) {
-            return;
+        if (mExpanding && v == mCurrView) {
+            return true;
         }
         mExpanding = true;
         if (DEBUG) Log.d(TAG, "scale type " + expandType + " beginning on view: " + v);
         mCallback.setUserLockedChild(v, true);
         setView(v);
-        setGlow(GLOW_BASE);
-        mScaler.setView(v);
+        mScaler.setView((ExpandableView) v);
         mOldHeight = mScaler.getHeight();
         if (mCallback.canChildBeExpanded(v)) {
             if (DEBUG) Log.d(TAG, "working on an expandable child");
@@ -520,6 +426,7 @@
         if (DEBUG) Log.d(TAG, "got mOldHeight: " + mOldHeight +
                     " mNaturalHeight: " + mNaturalHeight);
         v.getParent().requestDisallowInterceptTouchEvent(true);
+        return true;
     }
 
     private void finishExpanding(boolean force) {
@@ -539,14 +446,22 @@
         if (mScaleAnimation.isRunning()) {
             mScaleAnimation.cancel();
         }
-        setGlow(0f);
-        mCallback.setUserExpandedChild(mCurrView, h == mNaturalHeight);
+        mCallback.setUserExpandedChild(mCurrView, targetHeight == mNaturalHeight);
         if (targetHeight != currentHeight) {
             mScaleAnimation.setFloatValues(targetHeight);
             mScaleAnimation.setupStartValues();
+            final View scaledView = mCurrView;
+            mScaleAnimation.addListener(new AnimatorListenerAdapter() {
+                @Override
+                public void onAnimationEnd(Animator animation) {
+                    mCallback.setUserLockedChild(scaledView, false);
+                    mScaleAnimation.removeListener(this);
+                }
+            });
             mScaleAnimation.start();
+        } else {
+            mCallback.setUserLockedChild(mCurrView, false);
         }
-        mCallback.setUserLockedChild(mCurrView, false);
 
         mExpanding = false;
         mExpansionStyle = NONE;
@@ -560,30 +475,11 @@
 
     private void clearView() {
         mCurrView = null;
-        mCurrViewTopGlow = null;
-        mCurrViewBottomGlow = null;
+
     }
 
     private void setView(View v) {
         mCurrView = v;
-        if (v instanceof ViewGroup) {
-            ViewGroup g = (ViewGroup) v;
-            mCurrViewTopGlow = g.findViewById(R.id.top_glow);
-            mCurrViewBottomGlow = g.findViewById(R.id.bottom_glow);
-            if (DEBUG) {
-                String debugLog = "Looking for glows: " +
-                        (mCurrViewTopGlow != null ? "found top " : "didn't find top") +
-                        (mCurrViewBottomGlow != null ? "found bottom " : "didn't find bottom");
-                Log.v(TAG,  debugLog);
-            }
-        }
-    }
-
-    @Override
-    public void onClick(View v) {
-        startExpanding(v, STRETCH);
-        finishExpanding(true);
-        clearView();
     }
 
     /**
@@ -605,7 +501,7 @@
             mVibrator = (android.os.Vibrator)
                     mContext.getSystemService(Context.VIBRATOR_SERVICE);
         }
-        mVibrator.vibrate(duration);
+        mVibrator.vibrate(duration, AudioManager.STREAM_SYSTEM);
     }
 }
 
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index e323591..4857adc 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -537,7 +537,7 @@
 
             checkGlError();
 
-            if (w < 0 || h < 0) {
+            if (w > 0 || h > 0) {
                 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
                 glClear(GL_COLOR_BUFFER_BIT);
             }
diff --git a/packages/SystemUI/src/com/android/systemui/LoadAverageService.java b/packages/SystemUI/src/com/android/systemui/LoadAverageService.java
index 610e42b..59ffe03 100644
--- a/packages/SystemUI/src/com/android/systemui/LoadAverageService.java
+++ b/packages/SystemUI/src/com/android/systemui/LoadAverageService.java
@@ -195,9 +195,10 @@
             int systemW = (systemTime*W)/totalTime;
             int irqW = ((iowaitTime+irqTime+softIrqTime)*W)/totalTime;
 
-            int x = RIGHT - mPaddingRight;
-            int top = mPaddingTop + 2;
-            int bottom = mPaddingTop + mFH - 2;
+            int paddingRight = getPaddingRight();
+            int x = RIGHT - paddingRight;
+            int top = getPaddingTop() + 2;
+            int bottom = getPaddingTop() + mFH - 2;
 
             if (irqW > 0) {
                 canvas.drawRect(x-irqW, top, x, bottom, mIrqPaint);
@@ -212,16 +213,16 @@
                 x -= userW;
             }
 
-            int y = mPaddingTop - (int)mAscent;
-            canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth-1,
+            int y = getPaddingTop() - (int)mAscent;
+            canvas.drawText(stats.mLoadText, RIGHT-paddingRight-stats.mLoadWidth-1,
                     y-1, mShadowPaint);
-            canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth-1,
+            canvas.drawText(stats.mLoadText, RIGHT-paddingRight-stats.mLoadWidth-1,
                     y+1, mShadowPaint);
-            canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth+1,
+            canvas.drawText(stats.mLoadText, RIGHT-paddingRight-stats.mLoadWidth+1,
                     y-1, mShadow2Paint);
-            canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth+1,
+            canvas.drawText(stats.mLoadText, RIGHT-paddingRight-stats.mLoadWidth+1,
                     y+1, mShadow2Paint);
-            canvas.drawText(stats.mLoadText, RIGHT-mPaddingRight-stats.mLoadWidth,
+            canvas.drawText(stats.mLoadText, RIGHT-paddingRight-stats.mLoadWidth,
                     y, mLoadPaint);
 
             int N = stats.countWorkingStats();
@@ -233,7 +234,7 @@
 
                 userW = (st.rel_utime*W)/totalTime;
                 systemW = (st.rel_stime*W)/totalTime;
-                x = RIGHT - mPaddingRight;
+                x = RIGHT - paddingRight;
                 if (systemW > 0) {
                     canvas.drawRect(x-systemW, top, x, bottom, mSystemPaint);
                     x -= systemW;
@@ -243,18 +244,18 @@
                     x -= userW;
                 }
 
-                canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth-1,
+                canvas.drawText(st.name, RIGHT-paddingRight-st.nameWidth-1,
                         y-1, mShadowPaint);
-                canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth-1,
+                canvas.drawText(st.name, RIGHT-paddingRight-st.nameWidth-1,
                         y+1, mShadowPaint);
-                canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth+1,
+                canvas.drawText(st.name, RIGHT-paddingRight-st.nameWidth+1,
                         y-1, mShadow2Paint);
-                canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth+1,
+                canvas.drawText(st.name, RIGHT-paddingRight-st.nameWidth+1,
                         y+1, mShadow2Paint);
                 Paint p = mLoadPaint;
                 if (st.added) p = mAddedPaint;
                 if (st.removed) p = mRemovedPaint;
-                canvas.drawText(st.name, RIGHT-mPaddingRight-st.nameWidth, y, p);
+                canvas.drawText(st.name, RIGHT-paddingRight-st.nameWidth, y, p);
             }
         }
 
@@ -270,8 +271,8 @@
                 }
             }
 
-            int neededWidth = mPaddingLeft + mPaddingRight + maxWidth;
-            int neededHeight = mPaddingTop + mPaddingBottom + (mFH*(1+NW));
+            int neededWidth = getPaddingLeft() + getPaddingRight() + maxWidth;
+            int neededHeight = getPaddingTop() + getPaddingBottom() + (mFH*(1+NW));
             if (neededWidth != mNeededWidth || neededHeight != mNeededHeight) {
                 mNeededWidth = neededWidth;
                 mNeededHeight = neededHeight;
diff --git a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
index c7f0e17..09aa60f 100644
--- a/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/SearchPanelView.java
@@ -25,6 +25,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
+import android.media.AudioManager;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
@@ -135,7 +136,7 @@
         public void onTrigger(View v, final int target) {
             final int resId = mGlowPadView.getResourceIdForTarget(target);
             switch (resId) {
-                case com.android.internal.R.drawable.ic_action_assist_generic:
+                case R.drawable.ic_action_assist_generic:
                     mWaitingForLaunch = true;
                     startAssistActivity();
                     vibrate();
@@ -175,7 +176,7 @@
             ComponentName component = intent.getComponent();
             if (component == null || !mGlowPadView.replaceTargetDrawablesIfPresent(component,
                     ASSIST_ICON_METADATA_NAME,
-                    com.android.internal.R.drawable.ic_action_assist_generic)) {
+                    R.drawable.ic_action_assist_generic)) {
                 if (DEBUG) Log.v(TAG, "Couldn't grab icon for component " + component);
             }
         }
@@ -207,7 +208,8 @@
                 Settings.System.HAPTIC_FEEDBACK_ENABLED, 1, UserHandle.USER_CURRENT) != 0) {
             Resources res = context.getResources();
             Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
-            vibrator.vibrate(res.getInteger(R.integer.config_search_panel_view_vibration_duration));
+            vibrator.vibrate(res.getInteger(R.integer.config_search_panel_view_vibration_duration),
+                    AudioManager.STREAM_SYSTEM);
         }
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUI.java b/packages/SystemUI/src/com/android/systemui/SystemUI.java
index cb624ad..85befff 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUI.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUI.java
@@ -35,6 +35,9 @@
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
     }
 
+    protected void onBootCompleted() {
+    }
+
     @SuppressWarnings("unchecked")
     public <T> T getComponent(Class<T> interfaceType) {
         return (T) (mComponents != null ? mComponents.get(interfaceType) : null);
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
new file mode 100644
index 0000000..103991a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIApplication.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2014 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.android.systemui;
+
+import android.app.Application;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Configuration;
+import android.os.SystemProperties;
+import android.util.Log;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Application class for SystemUI.
+ */
+public class SystemUIApplication extends Application {
+
+    private static final String TAG = "SystemUIService";
+    private static final boolean DEBUG = false;
+
+    /**
+     * The classes of the stuff to start.
+     */
+    private final Class<?>[] SERVICES = new Class[] {
+            com.android.systemui.keyguard.KeyguardViewMediator.class,
+            com.android.systemui.recent.Recents.class,
+            com.android.systemui.statusbar.SystemBars.class,
+            com.android.systemui.usb.StorageNotification.class,
+            com.android.systemui.power.PowerUI.class,
+            com.android.systemui.media.RingtonePlayer.class,
+            com.android.systemui.settings.SettingsUI.class,
+    };
+
+    /**
+     * Hold a reference on the stuff we start.
+     */
+    private final SystemUI[] mServices = new SystemUI[SERVICES.length];
+    private boolean mServicesStarted;
+    private boolean mBootCompleted;
+    private final Map<Class<?>, Object> mComponents = new HashMap<Class<?>, Object>();
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        // Set the application theme that is inherited by all services. Note that setting the
+        // application theme in the manifest does only work for activities. Keep this in sync with
+        // the theme set there.
+        setTheme(R.style.systemui_theme);
+
+        registerReceiver(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (mBootCompleted) return;
+
+                if (DEBUG) Log.v(TAG, "BOOT_COMPLETED received");
+                unregisterReceiver(this);
+                mBootCompleted = true;
+                if (mServicesStarted) {
+                    final int N = mServices.length;
+                    for (int i = 0; i < N; i++) {
+                        mServices[i].onBootCompleted();
+                    }
+                }
+            }
+        }, new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
+    }
+
+    /**
+     * Makes sure that all the SystemUI services are running. If they are already running, this is a
+     * no-op. This is needed to conditinally start all the services, as we only need to have it in
+     * the main process.
+     *
+     * <p>This method must only be called from the main thread.</p>
+     */
+    public void startServicesIfNeeded() {
+        if (mServicesStarted) {
+            return;
+        }
+
+        if (!mBootCompleted) {
+            // check to see if maybe it was already completed long before we began
+            // see ActivityManagerService.finishBooting()
+            if ("1".equals(SystemProperties.get("sys.boot_completed"))) {
+                mBootCompleted = true;
+                if (DEBUG) Log.v(TAG, "BOOT_COMPLETED was already sent");
+            }
+        }
+
+        Log.v(TAG, "Starting SystemUI services.");
+        final int N = SERVICES.length;
+        for (int i=0; i<N; i++) {
+            Class<?> cl = SERVICES[i];
+            if (DEBUG) Log.d(TAG, "loading: " + cl);
+            try {
+                mServices[i] = (SystemUI)cl.newInstance();
+            } catch (IllegalAccessException ex) {
+                throw new RuntimeException(ex);
+            } catch (InstantiationException ex) {
+                throw new RuntimeException(ex);
+            }
+            mServices[i].mContext = this;
+            mServices[i].mComponents = mComponents;
+            if (DEBUG) Log.d(TAG, "running: " + mServices[i]);
+            mServices[i].start();
+
+            if (mBootCompleted) {
+                mServices[i].onBootCompleted();
+            }
+        }
+        mServicesStarted = true;
+    }
+
+    @Override
+    public void onConfigurationChanged(Configuration newConfig) {
+        if (mServicesStarted) {
+            int len = mServices.length;
+            for (int i = 0; i < len; i++) {
+                mServices[i].onConfigurationChanged(newConfig);
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public <T> T getComponent(Class<T> interfaceType) {
+        return (T) mComponents.get(interfaceType);
+    }
+
+    public SystemUI[] getServices() {
+        return mServices;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIService.java b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
index ca5f7d1..05e5f6b 100644
--- a/packages/SystemUI/src/com/android/systemui/SystemUIService.java
+++ b/packages/SystemUI/src/com/android/systemui/SystemUIService.java
@@ -18,80 +18,35 @@
 
 import android.app.Service;
 import android.content.Intent;
-import android.content.res.Configuration;
 import android.os.IBinder;
-import android.util.Log;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.util.HashMap;
 
 public class SystemUIService extends Service {
-    private static final String TAG = "SystemUIService";
-
-    /**
-     * The classes of the stuff to start.
-     */
-    private final Class<?>[] SERVICES = new Class[] {
-            com.android.systemui.recent.Recents.class,
-            com.android.systemui.statusbar.SystemBars.class,
-            com.android.systemui.usb.StorageNotification.class,
-            com.android.systemui.power.PowerUI.class,
-            com.android.systemui.media.RingtonePlayer.class,
-            com.android.systemui.settings.SettingsUI.class,
-        };
-
-    /**
-     * Hold a reference on the stuff we start.
-     */
-    private final SystemUI[] mServices = new SystemUI[SERVICES.length];
 
     @Override
     public void onCreate() {
-        HashMap<Class<?>, Object> components = new HashMap<Class<?>, Object>();
-        final int N = SERVICES.length;
-        for (int i=0; i<N; i++) {
-            Class<?> cl = SERVICES[i];
-            Log.d(TAG, "loading: " + cl);
-            try {
-                mServices[i] = (SystemUI)cl.newInstance();
-            } catch (IllegalAccessException ex) {
-                throw new RuntimeException(ex);
-            } catch (InstantiationException ex) {
-                throw new RuntimeException(ex);
-            }
-            mServices[i].mContext = this;
-            mServices[i].mComponents = components;
-            Log.d(TAG, "running: " + mServices[i]);
-            mServices[i].start();
-        }
+        super.onCreate();
+        ((SystemUIApplication) getApplication()).startServicesIfNeeded();
     }
 
     @Override
-    public void onConfigurationChanged(Configuration newConfig) {
-        for (SystemUI ui: mServices) {
-            ui.onConfigurationChanged(newConfig);
-        }
-    }
-
-    /**
-     * Nobody binds to us.
-     */
-    @Override
     public IBinder onBind(Intent intent) {
         return null;
     }
 
     @Override
     protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+        SystemUI[] services = ((SystemUIApplication) getApplication()).getServices();
         if (args == null || args.length == 0) {
-            for (SystemUI ui: mServices) {
+            for (SystemUI ui: services) {
                 pw.println("dumping service: " + ui.getClass().getName());
                 ui.dump(fd, pw, args);
             }
         } else {
             String svc = args[0];
-            for (SystemUI ui: mServices) {
+            for (SystemUI ui: services) {
                 String name = ui.getClass().getName();
                 if (name.endsWith(svc)) {
                     ui.dump(fd, pw, args);
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
new file mode 100644
index 0000000..41c0e78
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.keyguard;
+
+import android.app.Service;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Debug;
+import android.os.IBinder;
+import android.util.Log;
+import android.view.MotionEvent;
+
+import com.android.internal.policy.IKeyguardExitCallback;
+import com.android.internal.policy.IKeyguardService;
+import com.android.internal.policy.IKeyguardServiceConstants;
+import com.android.internal.policy.IKeyguardShowCallback;
+import com.android.systemui.SystemUIApplication;
+
+import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+
+public class KeyguardService extends Service {
+    static final String TAG = "KeyguardService";
+    static final String PERMISSION = android.Manifest.permission.CONTROL_KEYGUARD;
+
+    private KeyguardViewMediator mKeyguardViewMediator;
+
+    @Override
+    public void onCreate() {
+        ((SystemUIApplication) getApplication()).startServicesIfNeeded();
+        mKeyguardViewMediator =
+                ((SystemUIApplication) getApplication()).getComponent(KeyguardViewMediator.class);
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        return mBinder;
+    }
+
+    void checkPermission() {
+        if (getBaseContext().checkCallingOrSelfPermission(PERMISSION) != PERMISSION_GRANTED) {
+            Log.w(TAG, "Caller needs permission '" + PERMISSION + "' to call " + Debug.getCaller());
+            throw new SecurityException("Access denied to process: " + Binder.getCallingPid()
+                    + ", must have permission " + PERMISSION);
+        }
+    }
+
+    private final IKeyguardService.Stub mBinder = new IKeyguardService.Stub() {
+
+        private boolean mIsOccluded;
+
+        @Override
+        public boolean isShowing() {
+            return mKeyguardViewMediator.isShowing();
+        }
+
+        @Override
+        public boolean isSecure() {
+            return mKeyguardViewMediator.isSecure();
+        }
+
+        @Override
+        public boolean isShowingAndNotOccluded() {
+            return mKeyguardViewMediator.isShowingAndNotOccluded();
+        }
+
+        @Override
+        public boolean isInputRestricted() {
+            return mKeyguardViewMediator.isInputRestricted();
+        }
+
+        @Override
+        public void verifyUnlock(IKeyguardExitCallback callback) {
+            checkPermission();
+            mKeyguardViewMediator.verifyUnlock(callback);
+        }
+
+        @Override
+        public void keyguardDone(boolean authenticated, boolean wakeup) {
+            checkPermission();
+            mKeyguardViewMediator.keyguardDone(authenticated, wakeup);
+        }
+
+        @Override
+        public int setOccluded(boolean isOccluded) {
+            checkPermission();
+            synchronized (this) {
+                int result;
+                if (isOccluded && mKeyguardViewMediator.isShowing()
+                        && !mIsOccluded) {
+                    result = IKeyguardServiceConstants
+                            .KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_UNSET_FLAGS;
+                } else if (!isOccluded && mKeyguardViewMediator.isShowing()
+                        && mIsOccluded) {
+                    result = IKeyguardServiceConstants
+                            .KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_SET_FLAGS;
+                } else {
+                    result = IKeyguardServiceConstants.KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_NONE;
+                }
+                if (mIsOccluded != isOccluded) {
+                    mKeyguardViewMediator.setOccluded(isOccluded);
+
+                    // Cache the value so we always have a fresh view in whether Keyguard is occluded.
+                    // If we would just call mKeyguardViewMediator.isOccluded(), this might be stale
+                    // because that value gets updated in another thread.
+                    mIsOccluded = isOccluded;
+                }
+                return result;
+            }
+        }
+
+        @Override
+        public void dismiss() {
+            checkPermission();
+            mKeyguardViewMediator.dismiss();
+        }
+
+        @Override
+        public void onDreamingStarted() {
+            checkPermission();
+            mKeyguardViewMediator.onDreamingStarted();
+        }
+
+        @Override
+        public void onDreamingStopped() {
+            checkPermission();
+            mKeyguardViewMediator.onDreamingStopped();
+        }
+
+        @Override
+        public void onScreenTurnedOff(int reason) {
+            checkPermission();
+            mKeyguardViewMediator.onScreenTurnedOff(reason);
+        }
+
+        @Override
+        public void onScreenTurnedOn(IKeyguardShowCallback callback) {
+            checkPermission();
+            mKeyguardViewMediator.onScreenTurnedOn(callback);
+        }
+
+        @Override
+        public void setKeyguardEnabled(boolean enabled) {
+            checkPermission();
+            mKeyguardViewMediator.setKeyguardEnabled(enabled);
+        }
+
+        @Override
+        public boolean isDismissable() {
+            return mKeyguardViewMediator.isDismissable();
+        }
+
+        @Override
+        public void onSystemReady() {
+            checkPermission();
+            mKeyguardViewMediator.onSystemReady();
+        }
+
+        @Override
+        public void doKeyguardTimeout(Bundle options) {
+            checkPermission();
+            mKeyguardViewMediator.doKeyguardTimeout(options);
+        }
+
+        @Override
+        public void setCurrentUser(int userId) {
+            checkPermission();
+            mKeyguardViewMediator.setCurrentUser(userId);
+        }
+
+        @Override
+        public void showAssistant() {
+            checkPermission();
+        }
+
+        @Override
+        public void dispatch(MotionEvent event) {
+            checkPermission();
+        }
+
+        @Override
+        public void launchCamera() {
+            checkPermission();
+        }
+
+        @Override
+        public void onBootCompleted() {
+            checkPermission();
+            mKeyguardViewMediator.onBootCompleted();
+        }
+    };
+}
+
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
new file mode 100644
index 0000000..f812e8c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -0,0 +1,1329 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.keyguard;
+
+import android.app.Activity;
+import android.app.ActivityManagerNative;
+import android.app.AlarmManager;
+import android.app.PendingIntent;
+import android.app.SearchManager;
+import android.app.StatusBarManager;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.media.AudioManager;
+import android.media.SoundPool;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.SystemClock;
+import android.os.SystemProperties;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.telephony.TelephonyManager;
+import android.util.EventLog;
+import android.util.Log;
+import android.util.Slog;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+import android.view.WindowManagerPolicy;
+
+import com.android.internal.policy.IKeyguardExitCallback;
+import com.android.internal.policy.IKeyguardShowCallback;
+import com.android.internal.telephony.IccCardConstants;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.KeyguardDisplayManager;
+import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitorCallback;
+import com.android.keyguard.MultiUserAvatarCache;
+import com.android.keyguard.ViewMediatorCallback;
+import com.android.keyguard.analytics.KeyguardAnalytics;
+import com.android.keyguard.analytics.Session;
+import com.android.systemui.SystemUI;
+import com.android.systemui.statusbar.phone.PhoneStatusBar;
+import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
+import com.android.systemui.statusbar.phone.StatusBarWindowManager;
+
+import java.io.File;
+
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import static com.android.keyguard.analytics.KeyguardAnalytics.SessionTypeAdapter;
+
+
+/**
+ * Mediates requests related to the keyguard.  This includes queries about the
+ * state of the keyguard, power management events that effect whether the keyguard
+ * should be shown or reset, callbacks to the phone window manager to notify
+ * it of when the keyguard is showing, and events from the keyguard view itself
+ * stating that the keyguard was succesfully unlocked.
+ *
+ * Note that the keyguard view is shown when the screen is off (as appropriate)
+ * so that once the screen comes on, it will be ready immediately.
+ *
+ * Example queries about the keyguard:
+ * - is {movement, key} one that should wake the keygaurd?
+ * - is the keyguard showing?
+ * - are input events restricted due to the state of the keyguard?
+ *
+ * Callbacks to the phone window manager:
+ * - the keyguard is showing
+ *
+ * Example external events that translate to keyguard view changes:
+ * - screen turned off -> reset the keyguard, and show it so it will be ready
+ *   next time the screen turns on
+ * - keyboard is slid open -> if the keyguard is not secure, hide it
+ *
+ * Events from the keyguard view:
+ * - user succesfully unlocked keyguard -> hide keyguard view, and no longer
+ *   restrict input events.
+ *
+ * Note: in addition to normal power managment events that effect the state of
+ * whether the keyguard should be showing, external apps and services may request
+ * that the keyguard be disabled via {@link #setKeyguardEnabled(boolean)}.  When
+ * false, this will override all other conditions for turning on the keyguard.
+ *
+ * Threading and synchronization:
+ * This class is created by the initialization routine of the {@link android.view.WindowManagerPolicy},
+ * and runs on its thread.  The keyguard UI is created from that thread in the
+ * constructor of this class.  The apis may be called from other threads, including the
+ * {@link com.android.server.input.InputManagerService}'s and {@link android.view.WindowManager}'s.
+ * Therefore, methods on this class are synchronized, and any action that is pointed
+ * directly to the keyguard UI is posted to a {@link android.os.Handler} to ensure it is taken on the UI
+ * thread of the keyguard.
+ */
+public class KeyguardViewMediator extends SystemUI {
+    private static final int KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT = 30000;
+    final static boolean DEBUG = false;
+    private static final boolean ENABLE_ANALYTICS = Build.IS_DEBUGGABLE;
+    private final static boolean DBG_WAKE = false;
+
+    private final static String TAG = "KeyguardViewMediator";
+
+    private static final String DELAYED_KEYGUARD_ACTION =
+        "com.android.internal.policy.impl.PhoneWindowManager.DELAYED_KEYGUARD";
+
+    // used for handler messages
+    private static final int SHOW = 2;
+    private static final int HIDE = 3;
+    private static final int RESET = 4;
+    private static final int VERIFY_UNLOCK = 5;
+    private static final int NOTIFY_SCREEN_OFF = 6;
+    private static final int NOTIFY_SCREEN_ON = 7;
+    private static final int KEYGUARD_DONE = 9;
+    private static final int KEYGUARD_DONE_DRAWING = 10;
+    private static final int KEYGUARD_DONE_AUTHENTICATING = 11;
+    private static final int SET_OCCLUDED = 12;
+    private static final int KEYGUARD_TIMEOUT = 13;
+    private static final int DISMISS = 17;
+
+    /**
+     * The default amount of time we stay awake (used for all key input)
+     */
+    public static final int AWAKE_INTERVAL_DEFAULT_MS = 10000;
+
+    /**
+     * How long to wait after the screen turns off due to timeout before
+     * turning on the keyguard (i.e, the user has this much time to turn
+     * the screen back on without having to face the keyguard).
+     */
+    private static final int KEYGUARD_LOCK_AFTER_DELAY_DEFAULT = 5000;
+
+    /**
+     * How long we'll wait for the {@link ViewMediatorCallback#keyguardDoneDrawing()}
+     * callback before unblocking a call to {@link #setKeyguardEnabled(boolean)}
+     * that is reenabling the keyguard.
+     */
+    private static final int KEYGUARD_DONE_DRAWING_TIMEOUT_MS = 2000;
+
+    /**
+     * Secure setting whether analytics are collected on the keyguard.
+     */
+    private static final String KEYGUARD_ANALYTICS_SETTING = "keyguard_analytics";
+
+    /** The stream type that the lock sounds are tied to. */
+    private int mMasterStreamType;
+
+    private AlarmManager mAlarmManager;
+    private AudioManager mAudioManager;
+    private StatusBarManager mStatusBarManager;
+    private boolean mSwitchingUser;
+
+    private boolean mSystemReady;
+
+    // Whether the next call to playSounds() should be skipped.  Defaults to
+    // true because the first lock (on boot) should be silent.
+    private boolean mSuppressNextLockSound = true;
+
+
+    /** High level access to the power manager for WakeLocks */
+    private PowerManager mPM;
+
+    /** UserManager for querying number of users */
+    private UserManager mUserManager;
+
+    /** SearchManager for determining whether or not search assistant is available */
+    private SearchManager mSearchManager;
+
+    /**
+     * Used to keep the device awake while to ensure the keyguard finishes opening before
+     * we sleep.
+     */
+    private PowerManager.WakeLock mShowKeyguardWakeLock;
+
+    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+
+    private KeyguardAnalytics mKeyguardAnalytics;
+
+    // these are protected by synchronized (this)
+
+    /**
+     * External apps (like the phone app) can tell us to disable the keygaurd.
+     */
+    private boolean mExternallyEnabled = true;
+
+    /**
+     * Remember if an external call to {@link #setKeyguardEnabled} with value
+     * false caused us to hide the keyguard, so that we need to reshow it once
+     * the keygaurd is reenabled with another call with value true.
+     */
+    private boolean mNeedToReshowWhenReenabled = false;
+
+    // cached value of whether we are showing (need to know this to quickly
+    // answer whether the input should be restricted)
+    private boolean mShowing;
+
+    // true if the keyguard is hidden by another window
+    private boolean mOccluded = false;
+
+    /**
+     * Helps remember whether the screen has turned on since the last time
+     * it turned off due to timeout. see {@link #onScreenTurnedOff(int)}
+     */
+    private int mDelayedShowingSequence;
+
+    /**
+     * If the user has disabled the keyguard, then requests to exit, this is
+     * how we'll ultimately let them know whether it was successful.  We use this
+     * var being non-null as an indicator that there is an in progress request.
+     */
+    private IKeyguardExitCallback mExitSecureCallback;
+
+    // the properties of the keyguard
+
+    private KeyguardUpdateMonitor mUpdateMonitor;
+
+    private boolean mScreenOn;
+
+    // last known state of the cellular connection
+    private String mPhoneState = TelephonyManager.EXTRA_STATE_IDLE;
+
+    /**
+     * we send this intent when the keyguard is dismissed.
+     */
+    private static final Intent USER_PRESENT_INTENT = new Intent(Intent.ACTION_USER_PRESENT)
+            .addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING
+                    | Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
+
+    /**
+     * {@link #setKeyguardEnabled} waits on this condition when it reenables
+     * the keyguard.
+     */
+    private boolean mWaitingUntilKeyguardVisible = false;
+    private LockPatternUtils mLockPatternUtils;
+    private boolean mKeyguardDonePending = false;
+
+    private SoundPool mLockSounds;
+    private int mLockSoundId;
+    private int mUnlockSoundId;
+    private int mLockSoundStreamId;
+
+    /**
+     * The volume applied to the lock/unlock sounds.
+     */
+    private float mLockSoundVolume;
+
+    /**
+     * For managing external displays
+     */
+    private KeyguardDisplayManager mKeyguardDisplayManager;
+
+    KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() {
+
+        @Override
+        public void onUserSwitching(int userId) {
+            // Note that the mLockPatternUtils user has already been updated from setCurrentUser.
+            // We need to force a reset of the views, since lockNow (called by
+            // ActivityManagerService) will not reconstruct the keyguard if it is already showing.
+            synchronized (KeyguardViewMediator.this) {
+                mSwitchingUser = true;
+                resetStateLocked();
+                adjustStatusBarLocked();
+                // When we switch users we want to bring the new user to the biometric unlock even
+                // if the current user has gone to the backup.
+                KeyguardUpdateMonitor.getInstance(mContext).setAlternateUnlockEnabled(true);
+            }
+        }
+
+        @Override
+        public void onUserSwitchComplete(int userId) {
+            mSwitchingUser = false;
+        }
+
+        @Override
+        public void onUserRemoved(int userId) {
+            mLockPatternUtils.removeUser(userId);
+            MultiUserAvatarCache.getInstance().clear(userId);
+        }
+
+        @Override
+        public void onUserInfoChanged(int userId) {
+            MultiUserAvatarCache.getInstance().clear(userId);
+        }
+
+        @Override
+        public void onPhoneStateChanged(int phoneState) {
+            synchronized (KeyguardViewMediator.this) {
+                if (TelephonyManager.CALL_STATE_IDLE == phoneState  // call ending
+                        && !mScreenOn                           // screen off
+                        && mExternallyEnabled) {                // not disabled by any app
+
+                    // note: this is a way to gracefully reenable the keyguard when the call
+                    // ends and the screen is off without always reenabling the keyguard
+                    // each time the screen turns off while in call (and having an occasional ugly
+                    // flicker while turning back on the screen and disabling the keyguard again).
+                    if (DEBUG) Log.d(TAG, "screen is off and call ended, let's make sure the "
+                            + "keyguard is showing");
+                    doKeyguardLocked(null);
+                }
+            }
+        }
+
+        @Override
+        public void onClockVisibilityChanged() {
+            adjustStatusBarLocked();
+        }
+
+        @Override
+        public void onDeviceProvisioned() {
+            sendUserPresentBroadcast();
+        }
+
+        @Override
+        public void onSimStateChanged(IccCardConstants.State simState) {
+            if (DEBUG) Log.d(TAG, "onSimStateChanged: " + simState);
+
+            switch (simState) {
+                case NOT_READY:
+                case ABSENT:
+                    // only force lock screen in case of missing sim if user hasn't
+                    // gone through setup wizard
+                    synchronized (this) {
+                        if (!mUpdateMonitor.isDeviceProvisioned()) {
+                            if (!isShowing()) {
+                                if (DEBUG) Log.d(TAG, "ICC_ABSENT isn't showing,"
+                                        + " we need to show the keyguard since the "
+                                        + "device isn't provisioned yet.");
+                                doKeyguardLocked(null);
+                            } else {
+                                resetStateLocked();
+                            }
+                        }
+                    }
+                    break;
+                case PIN_REQUIRED:
+                case PUK_REQUIRED:
+                    synchronized (this) {
+                        if (!isShowing()) {
+                            if (DEBUG) Log.d(TAG, "INTENT_VALUE_ICC_LOCKED and keygaurd isn't "
+                                    + "showing; need to show keyguard so user can enter sim pin");
+                            doKeyguardLocked(null);
+                        } else {
+                            resetStateLocked();
+                        }
+                    }
+                    break;
+                case PERM_DISABLED:
+                    synchronized (this) {
+                        if (!isShowing()) {
+                            if (DEBUG) Log.d(TAG, "PERM_DISABLED and "
+                                  + "keygaurd isn't showing.");
+                            doKeyguardLocked(null);
+                        } else {
+                            if (DEBUG) Log.d(TAG, "PERM_DISABLED, resetStateLocked to"
+                                  + "show permanently disabled message in lockscreen.");
+                            resetStateLocked();
+                        }
+                    }
+                    break;
+                case READY:
+                    synchronized (this) {
+                        if (isShowing()) {
+                            resetStateLocked();
+                        }
+                    }
+                    break;
+            }
+        }
+
+    };
+
+    ViewMediatorCallback mViewMediatorCallback = new ViewMediatorCallback() {
+
+        public void userActivity() {
+            KeyguardViewMediator.this.userActivity();
+        }
+
+        public void userActivity(long holdMs) {
+            KeyguardViewMediator.this.userActivity(holdMs);
+        }
+
+        public void keyguardDone(boolean authenticated) {
+            KeyguardViewMediator.this.keyguardDone(authenticated, true);
+        }
+
+        public void keyguardDoneDrawing() {
+            mHandler.sendEmptyMessage(KEYGUARD_DONE_DRAWING);
+        }
+
+        @Override
+        public void setNeedsInput(boolean needsInput) {
+            mStatusBarKeyguardViewManager.setNeedsInput(needsInput);
+        }
+
+        @Override
+        public void onUserActivityTimeoutChanged() {
+            mStatusBarKeyguardViewManager.updateUserActivityTimeout();
+        }
+
+        @Override
+        public void keyguardDonePending() {
+            mKeyguardDonePending = true;
+        }
+
+        @Override
+        public void keyguardGone() {
+            mKeyguardDisplayManager.hide();
+        }
+    };
+
+    private void userActivity() {
+        userActivity(AWAKE_INTERVAL_DEFAULT_MS);
+    }
+
+    public void userActivity(long holdMs) {
+        // We ignore the hold time.  Eventually we should remove it.
+        // Instead, the keyguard window has an explicit user activity timeout set on it.
+        mPM.userActivity(SystemClock.uptimeMillis(), false);
+    }
+
+    private void setup() {
+        mPM = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+        mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        mShowKeyguardWakeLock = mPM.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "show keyguard");
+        mShowKeyguardWakeLock.setReferenceCounted(false);
+
+        mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(DELAYED_KEYGUARD_ACTION));
+
+        mKeyguardDisplayManager = new KeyguardDisplayManager(mContext);
+
+        mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+
+        mUpdateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
+
+        mLockPatternUtils = new LockPatternUtils(mContext);
+        mLockPatternUtils.setCurrentUser(UserHandle.USER_OWNER);
+
+        // Assume keyguard is showing (unless it's disabled) until we know for sure...
+        mShowing = (mUpdateMonitor.isDeviceProvisioned() || mLockPatternUtils.isSecure())
+                && !mLockPatternUtils.isLockScreenDisabled();
+
+        mStatusBarKeyguardViewManager = new StatusBarKeyguardViewManager(mContext,
+                mViewMediatorCallback, mLockPatternUtils);
+        final ContentResolver cr = mContext.getContentResolver();
+
+        if (ENABLE_ANALYTICS && !LockPatternUtils.isSafeModeEnabled() &&
+                Settings.Secure.getInt(cr, KEYGUARD_ANALYTICS_SETTING, 0) == 1) {
+            mKeyguardAnalytics = new KeyguardAnalytics(mContext, new SessionTypeAdapter() {
+
+                @Override
+                public int getSessionType() {
+                    return mLockPatternUtils.isSecure() && !mUpdateMonitor.getUserHasTrust(
+                            mLockPatternUtils.getCurrentUser())
+                            ? Session.TYPE_KEYGUARD_SECURE
+                            : Session.TYPE_KEYGUARD_INSECURE;
+                }
+            }, new File(mContext.getCacheDir(), "keyguard_analytics.bin"));
+        } else {
+            mKeyguardAnalytics = null;
+        }
+
+        mScreenOn = mPM.isScreenOn();
+
+        mLockSounds = new SoundPool(1, AudioManager.STREAM_SYSTEM, 0);
+        String soundPath = Settings.Global.getString(cr, Settings.Global.LOCK_SOUND);
+        if (soundPath != null) {
+            mLockSoundId = mLockSounds.load(soundPath, 1);
+        }
+        if (soundPath == null || mLockSoundId == 0) {
+            Log.w(TAG, "failed to load lock sound from " + soundPath);
+        }
+        soundPath = Settings.Global.getString(cr, Settings.Global.UNLOCK_SOUND);
+        if (soundPath != null) {
+            mUnlockSoundId = mLockSounds.load(soundPath, 1);
+        }
+        if (soundPath == null || mUnlockSoundId == 0) {
+            Log.w(TAG, "failed to load unlock sound from " + soundPath);
+        }
+        int lockSoundDefaultAttenuation = mContext.getResources().getInteger(
+                com.android.internal.R.integer.config_lockSoundVolumeDb);
+        mLockSoundVolume = (float)Math.pow(10, (float)lockSoundDefaultAttenuation/20);
+    }
+
+    @Override
+    public void start() {
+        setup();
+        putComponent(KeyguardViewMediator.class, this);
+    }
+
+    /**
+     * Let us know that the system is ready after startup.
+     */
+    public void onSystemReady() {
+        mSearchManager = (SearchManager) mContext.getSystemService(Context.SEARCH_SERVICE);
+        synchronized (this) {
+            if (DEBUG) Log.d(TAG, "onSystemReady");
+            mSystemReady = true;
+            mUpdateMonitor.registerCallback(mUpdateCallback);
+
+            // Suppress biometric unlock right after boot until things have settled if it is the
+            // selected security method, otherwise unsuppress it.  It must be unsuppressed if it is
+            // not the selected security method for the following reason:  if the user starts
+            // without a screen lock selected, the biometric unlock would be suppressed the first
+            // time they try to use it.
+            //
+            // Note that the biometric unlock will still not show if it is not the selected method.
+            // Calling setAlternateUnlockEnabled(true) simply says don't suppress it if it is the
+            // selected method.
+            if (mLockPatternUtils.usingBiometricWeak()
+                    && mLockPatternUtils.isBiometricWeakInstalled()) {
+                if (DEBUG) Log.d(TAG, "suppressing biometric unlock during boot");
+                mUpdateMonitor.setAlternateUnlockEnabled(false);
+            } else {
+                mUpdateMonitor.setAlternateUnlockEnabled(true);
+            }
+
+            doKeyguardLocked(null);
+        }
+        // Most services aren't available until the system reaches the ready state, so we
+        // send it here when the device first boots.
+        maybeSendUserPresentBroadcast();
+    }
+
+    /**
+     * Called to let us know the screen was turned off.
+     * @param why either {@link android.view.WindowManagerPolicy#OFF_BECAUSE_OF_USER} or
+     *   {@link android.view.WindowManagerPolicy#OFF_BECAUSE_OF_TIMEOUT}.
+     */
+    public void onScreenTurnedOff(int why) {
+        synchronized (this) {
+            mScreenOn = false;
+            if (DEBUG) Log.d(TAG, "onScreenTurnedOff(" + why + ")");
+
+            mKeyguardDonePending = false;
+
+            // Lock immediately based on setting if secure (user has a pin/pattern/password).
+            // This also "locks" the device when not secure to provide easy access to the
+            // camera while preventing unwanted input.
+            final boolean lockImmediately =
+                mLockPatternUtils.getPowerButtonInstantlyLocks() || !mLockPatternUtils.isSecure();
+
+            if (mExitSecureCallback != null) {
+                if (DEBUG) Log.d(TAG, "pending exit secure callback cancelled");
+                try {
+                    mExitSecureCallback.onKeyguardExitResult(false);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
+                }
+                mExitSecureCallback = null;
+                if (!mExternallyEnabled) {
+                    hideLocked();
+                }
+            } else if (mShowing) {
+                notifyScreenOffLocked();
+                resetStateLocked();
+            } else if (why == WindowManagerPolicy.OFF_BECAUSE_OF_TIMEOUT
+                   || (why == WindowManagerPolicy.OFF_BECAUSE_OF_USER && !lockImmediately)) {
+                doKeyguardLaterLocked();
+            } else {
+                doKeyguardLocked(null);
+            }
+            if (ENABLE_ANALYTICS && mKeyguardAnalytics != null) {
+                mKeyguardAnalytics.getCallback().onScreenOff();
+            }
+        }
+        KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurndOff(why);
+    }
+
+    private void doKeyguardLaterLocked() {
+        // if the screen turned off because of timeout or the user hit the power button
+        // and we don't need to lock immediately, set an alarm
+        // to enable it a little bit later (i.e, give the user a chance
+        // to turn the screen back on within a certain window without
+        // having to unlock the screen)
+        final ContentResolver cr = mContext.getContentResolver();
+
+        // From DisplaySettings
+        long displayTimeout = Settings.System.getInt(cr, SCREEN_OFF_TIMEOUT,
+                KEYGUARD_DISPLAY_TIMEOUT_DELAY_DEFAULT);
+
+        // From SecuritySettings
+        final long lockAfterTimeout = Settings.Secure.getInt(cr,
+                Settings.Secure.LOCK_SCREEN_LOCK_AFTER_TIMEOUT,
+                KEYGUARD_LOCK_AFTER_DELAY_DEFAULT);
+
+        // From DevicePolicyAdmin
+        final long policyTimeout = mLockPatternUtils.getDevicePolicyManager()
+                .getMaximumTimeToLock(null, mLockPatternUtils.getCurrentUser());
+
+        long timeout;
+        if (policyTimeout > 0) {
+            // policy in effect. Make sure we don't go beyond policy limit.
+            displayTimeout = Math.max(displayTimeout, 0); // ignore negative values
+            timeout = Math.min(policyTimeout - displayTimeout, lockAfterTimeout);
+        } else {
+            timeout = lockAfterTimeout;
+        }
+
+        if (timeout <= 0) {
+            // Lock now
+            mSuppressNextLockSound = true;
+            doKeyguardLocked(null);
+        } else {
+            // Lock in the future
+            long when = SystemClock.elapsedRealtime() + timeout;
+            Intent intent = new Intent(DELAYED_KEYGUARD_ACTION);
+            intent.putExtra("seq", mDelayedShowingSequence);
+            PendingIntent sender = PendingIntent.getBroadcast(mContext,
+                    0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
+            mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, when, sender);
+            if (DEBUG) Log.d(TAG, "setting alarm to turn off keyguard, seq = "
+                             + mDelayedShowingSequence);
+        }
+    }
+
+    private void cancelDoKeyguardLaterLocked() {
+        mDelayedShowingSequence++;
+    }
+
+    /**
+     * Let's us know the screen was turned on.
+     */
+    public void onScreenTurnedOn(IKeyguardShowCallback callback) {
+        synchronized (this) {
+            mScreenOn = true;
+            cancelDoKeyguardLaterLocked();
+            if (DEBUG) Log.d(TAG, "onScreenTurnedOn, seq = " + mDelayedShowingSequence);
+            if (callback != null) {
+                notifyScreenOnLocked(callback);
+            }
+        }
+        KeyguardUpdateMonitor.getInstance(mContext).dispatchScreenTurnedOn();
+        maybeSendUserPresentBroadcast();
+    }
+
+    private void maybeSendUserPresentBroadcast() {
+        if (mSystemReady && mLockPatternUtils.isLockScreenDisabled()
+                && !mUserManager.isUserSwitcherEnabled()) {
+            // Lock screen is disabled because the user has set the preference to "None".
+            // In this case, send out ACTION_USER_PRESENT here instead of in
+            // handleKeyguardDone()
+            sendUserPresentBroadcast();
+        }
+    }
+
+    /**
+     * A dream started.  We should lock after the usual screen-off lock timeout but only
+     * if there is a secure lock pattern.
+     */
+    public void onDreamingStarted() {
+        synchronized (this) {
+            if (mScreenOn && mLockPatternUtils.isSecure()) {
+                doKeyguardLaterLocked();
+            }
+        }
+    }
+
+    /**
+     * A dream stopped.
+     */
+    public void onDreamingStopped() {
+        synchronized (this) {
+            if (mScreenOn) {
+                cancelDoKeyguardLaterLocked();
+            }
+        }
+    }
+
+    /**
+     * Same semantics as {@link android.view.WindowManagerPolicy#enableKeyguard}; provide
+     * a way for external stuff to override normal keyguard behavior.  For instance
+     * the phone app disables the keyguard when it receives incoming calls.
+     */
+    public void setKeyguardEnabled(boolean enabled) {
+        synchronized (this) {
+            if (DEBUG) Log.d(TAG, "setKeyguardEnabled(" + enabled + ")");
+
+            mExternallyEnabled = enabled;
+
+            if (!enabled && mShowing) {
+                if (mExitSecureCallback != null) {
+                    if (DEBUG) Log.d(TAG, "in process of verifyUnlock request, ignoring");
+                    // we're in the process of handling a request to verify the user
+                    // can get past the keyguard. ignore extraneous requests to disable / reenable
+                    return;
+                }
+
+                // hiding keyguard that is showing, remember to reshow later
+                if (DEBUG) Log.d(TAG, "remembering to reshow, hiding keyguard, "
+                        + "disabling status bar expansion");
+                mNeedToReshowWhenReenabled = true;
+                hideLocked();
+            } else if (enabled && mNeedToReshowWhenReenabled) {
+                // reenabled after previously hidden, reshow
+                if (DEBUG) Log.d(TAG, "previously hidden, reshowing, reenabling "
+                        + "status bar expansion");
+                mNeedToReshowWhenReenabled = false;
+
+                if (mExitSecureCallback != null) {
+                    if (DEBUG) Log.d(TAG, "onKeyguardExitResult(false), resetting");
+                    try {
+                        mExitSecureCallback.onKeyguardExitResult(false);
+                    } catch (RemoteException e) {
+                        Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
+                    }
+                    mExitSecureCallback = null;
+                    resetStateLocked();
+                } else {
+                    showLocked(null);
+
+                    // block until we know the keygaurd is done drawing (and post a message
+                    // to unblock us after a timeout so we don't risk blocking too long
+                    // and causing an ANR).
+                    mWaitingUntilKeyguardVisible = true;
+                    mHandler.sendEmptyMessageDelayed(KEYGUARD_DONE_DRAWING, KEYGUARD_DONE_DRAWING_TIMEOUT_MS);
+                    if (DEBUG) Log.d(TAG, "waiting until mWaitingUntilKeyguardVisible is false");
+                    while (mWaitingUntilKeyguardVisible) {
+                        try {
+                            wait();
+                        } catch (InterruptedException e) {
+                            Thread.currentThread().interrupt();
+                        }
+                    }
+                    if (DEBUG) Log.d(TAG, "done waiting for mWaitingUntilKeyguardVisible");
+                }
+            }
+        }
+    }
+
+    /**
+     * @see android.app.KeyguardManager#exitKeyguardSecurely
+     */
+    public void verifyUnlock(IKeyguardExitCallback callback) {
+        synchronized (this) {
+            if (DEBUG) Log.d(TAG, "verifyUnlock");
+            if (!mUpdateMonitor.isDeviceProvisioned()) {
+                // don't allow this api when the device isn't provisioned
+                if (DEBUG) Log.d(TAG, "ignoring because device isn't provisioned");
+                try {
+                    callback.onKeyguardExitResult(false);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
+                }
+            } else if (mExternallyEnabled) {
+                // this only applies when the user has externally disabled the
+                // keyguard.  this is unexpected and means the user is not
+                // using the api properly.
+                Log.w(TAG, "verifyUnlock called when not externally disabled");
+                try {
+                    callback.onKeyguardExitResult(false);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
+                }
+            } else if (mExitSecureCallback != null) {
+                // already in progress with someone else
+                try {
+                    callback.onKeyguardExitResult(false);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Failed to call onKeyguardExitResult(false)", e);
+                }
+            } else {
+                mExitSecureCallback = callback;
+                verifyUnlockLocked();
+            }
+        }
+    }
+
+    /**
+     * Is the keyguard currently showing?
+     */
+    public boolean isShowing() {
+        return mShowing;
+    }
+
+    public boolean isOccluded() {
+        return mOccluded;
+    }
+
+    /**
+     * Is the keyguard currently showing and not being force hidden?
+     */
+    public boolean isShowingAndNotOccluded() {
+        return mShowing && !mOccluded;
+    }
+
+    /**
+     * Notify us when the keyguard is occluded by another window
+     */
+    public void setOccluded(boolean isOccluded) {
+        if (DEBUG) Log.d(TAG, "setOccluded " + isOccluded);
+        mUpdateMonitor.sendKeyguardVisibilityChanged(!isOccluded);
+        mHandler.removeMessages(SET_OCCLUDED);
+        Message msg = mHandler.obtainMessage(SET_OCCLUDED, (isOccluded ? 1 : 0), 0);
+        mHandler.sendMessage(msg);
+    }
+
+    /**
+     * Handles SET_OCCLUDED message sent by setOccluded()
+     */
+    private void handleSetOccluded(boolean isOccluded) {
+        synchronized (KeyguardViewMediator.this) {
+            if (mOccluded != isOccluded) {
+                mOccluded = isOccluded;
+                mStatusBarKeyguardViewManager.setOccluded(isOccluded);
+                updateActivityLockScreenState();
+                adjustStatusBarLocked();
+            }
+            if (ENABLE_ANALYTICS && mKeyguardAnalytics != null) {
+                mKeyguardAnalytics.getCallback().onSetOccluded(isOccluded);
+            }
+        }
+    }
+
+    /**
+     * Used by PhoneWindowManager to enable the keyguard due to a user activity timeout.
+     * This must be safe to call from any thread and with any window manager locks held.
+     */
+    public void doKeyguardTimeout(Bundle options) {
+        mHandler.removeMessages(KEYGUARD_TIMEOUT);
+        Message msg = mHandler.obtainMessage(KEYGUARD_TIMEOUT, options);
+        mHandler.sendMessage(msg);
+    }
+
+    /**
+     * Given the state of the keyguard, is the input restricted?
+     * Input is restricted when the keyguard is showing, or when the keyguard
+     * was suppressed by an app that disabled the keyguard or we haven't been provisioned yet.
+     */
+    public boolean isInputRestricted() {
+        return mShowing || mNeedToReshowWhenReenabled || !mUpdateMonitor.isDeviceProvisioned();
+    }
+
+    /**
+     * Enable the keyguard if the settings are appropriate.
+     */
+    private void doKeyguardLocked(Bundle options) {
+        // if another app is disabling us, don't show
+        if (!mExternallyEnabled) {
+            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because externally disabled");
+
+            // note: we *should* set mNeedToReshowWhenReenabled=true here, but that makes
+            // for an occasional ugly flicker in this situation:
+            // 1) receive a call with the screen on (no keyguard) or make a call
+            // 2) screen times out
+            // 3) user hits key to turn screen back on
+            // instead, we reenable the keyguard when we know the screen is off and the call
+            // ends (see the broadcast receiver below)
+            // TODO: clean this up when we have better support at the window manager level
+            // for apps that wish to be on top of the keyguard
+            return;
+        }
+
+        // if the keyguard is already showing, don't bother
+        if (mStatusBarKeyguardViewManager.isShowing()) {
+            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because it is already showing");
+            return;
+        }
+
+        // if the setup wizard hasn't run yet, don't show
+        final boolean requireSim = !SystemProperties.getBoolean("keyguard.no_require_sim",
+                false);
+        final boolean provisioned = mUpdateMonitor.isDeviceProvisioned();
+        final IccCardConstants.State state = mUpdateMonitor.getSimState();
+        final boolean lockedOrMissing = state.isPinLocked()
+                || ((state == IccCardConstants.State.ABSENT
+                || state == IccCardConstants.State.PERM_DISABLED)
+                && requireSim);
+
+        if (!lockedOrMissing && !provisioned) {
+            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because device isn't provisioned"
+                    + " and the sim is not locked or missing");
+            return;
+        }
+
+        if (!mUserManager.isUserSwitcherEnabled()
+                && mLockPatternUtils.isLockScreenDisabled() && !lockedOrMissing) {
+            if (DEBUG) Log.d(TAG, "doKeyguard: not showing because lockscreen is off");
+            return;
+        }
+
+        if (mLockPatternUtils.checkVoldPassword()) {
+            if (DEBUG) Log.d(TAG, "Not showing lock screen since just decrypted");
+            // Without this, settings is not enabled until the lock screen first appears
+            hideLocked();
+            return;
+        }
+
+        if (DEBUG) Log.d(TAG, "doKeyguard: showing the lock screen");
+        showLocked(options);
+    }
+
+    /**
+     * Dismiss the keyguard through the security layers.
+     */
+    public void handleDismiss() {
+        if (mShowing && !mOccluded) {
+            mStatusBarKeyguardViewManager.dismiss();
+        }
+    }
+
+    public void dismiss() {
+        mHandler.sendEmptyMessage(DISMISS);
+    }
+
+    /**
+     * Send message to keyguard telling it to reset its state.
+     * @see #handleReset
+     */
+    private void resetStateLocked() {
+        if (DEBUG) Log.e(TAG, "resetStateLocked");
+        Message msg = mHandler.obtainMessage(RESET);
+        mHandler.sendMessage(msg);
+    }
+
+    /**
+     * Send message to keyguard telling it to verify unlock
+     * @see #handleVerifyUnlock()
+     */
+    private void verifyUnlockLocked() {
+        if (DEBUG) Log.d(TAG, "verifyUnlockLocked");
+        mHandler.sendEmptyMessage(VERIFY_UNLOCK);
+    }
+
+
+    /**
+     * Send a message to keyguard telling it the screen just turned on.
+     * @see #onScreenTurnedOff(int)
+     * @see #handleNotifyScreenOff
+     */
+    private void notifyScreenOffLocked() {
+        if (DEBUG) Log.d(TAG, "notifyScreenOffLocked");
+        mHandler.sendEmptyMessage(NOTIFY_SCREEN_OFF);
+    }
+
+    /**
+     * Send a message to keyguard telling it the screen just turned on.
+     * @see #onScreenTurnedOn
+     * @see #handleNotifyScreenOn
+     */
+    private void notifyScreenOnLocked(IKeyguardShowCallback result) {
+        if (DEBUG) Log.d(TAG, "notifyScreenOnLocked");
+        Message msg = mHandler.obtainMessage(NOTIFY_SCREEN_ON, result);
+        mHandler.sendMessage(msg);
+    }
+
+    /**
+     * Send message to keyguard telling it to show itself
+     * @see #handleShow
+     */
+    private void showLocked(Bundle options) {
+        if (DEBUG) Log.d(TAG, "showLocked");
+        // ensure we stay awake until we are finished displaying the keyguard
+        mShowKeyguardWakeLock.acquire();
+        Message msg = mHandler.obtainMessage(SHOW, options);
+        mHandler.sendMessage(msg);
+    }
+
+    /**
+     * Send message to keyguard telling it to hide itself
+     * @see #handleHide()
+     */
+    private void hideLocked() {
+        if (DEBUG) Log.d(TAG, "hideLocked");
+        Message msg = mHandler.obtainMessage(HIDE);
+        mHandler.sendMessage(msg);
+    }
+
+    public boolean isSecure() {
+        return mLockPatternUtils.isSecure()
+            || KeyguardUpdateMonitor.getInstance(mContext).isSimPinSecure();
+    }
+
+    /**
+     * Update the newUserId. Call while holding WindowManagerService lock.
+     * NOTE: Should only be called by KeyguardViewMediator in response to the user id changing.
+     *
+     * @param newUserId The id of the incoming user.
+     */
+    public void setCurrentUser(int newUserId) {
+        mLockPatternUtils.setCurrentUser(newUserId);
+    }
+
+    private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DELAYED_KEYGUARD_ACTION.equals(intent.getAction())) {
+                final int sequence = intent.getIntExtra("seq", 0);
+                if (DEBUG) Log.d(TAG, "received DELAYED_KEYGUARD_ACTION with seq = "
+                        + sequence + ", mDelayedShowingSequence = " + mDelayedShowingSequence);
+                synchronized (KeyguardViewMediator.this) {
+                    if (mDelayedShowingSequence == sequence) {
+                        // Don't play lockscreen SFX if the screen went off due to timeout.
+                        mSuppressNextLockSound = true;
+                        doKeyguardLocked(null);
+                    }
+                }
+            }
+        }
+    };
+
+    public void keyguardDone(boolean authenticated, boolean wakeup) {
+        if (DEBUG) Log.d(TAG, "keyguardDone(" + authenticated + ")");
+        EventLog.writeEvent(70000, 2);
+        synchronized (this) {
+            mKeyguardDonePending = false;
+        }
+        Message msg = mHandler.obtainMessage(KEYGUARD_DONE, authenticated ? 1 : 0, wakeup ? 1 : 0);
+        mHandler.sendMessage(msg);
+    }
+
+    /**
+     * This handler will be associated with the policy thread, which will also
+     * be the UI thread of the keyguard.  Since the apis of the policy, and therefore
+     * this class, can be called by other threads, any action that directly
+     * interacts with the keyguard ui should be posted to this handler, rather
+     * than called directly.
+     */
+    private Handler mHandler = new Handler(Looper.myLooper(), null, true /*async*/) {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case SHOW:
+                    handleShow((Bundle) msg.obj);
+                    break;
+                case HIDE:
+                    handleHide();
+                    break;
+                case RESET:
+                    handleReset();
+                    break;
+                case VERIFY_UNLOCK:
+                    handleVerifyUnlock();
+                    break;
+                case NOTIFY_SCREEN_OFF:
+                    handleNotifyScreenOff();
+                    break;
+                case NOTIFY_SCREEN_ON:
+                    handleNotifyScreenOn((IKeyguardShowCallback) msg.obj);
+                    break;
+                case KEYGUARD_DONE:
+                    handleKeyguardDone(msg.arg1 != 0, msg.arg2 != 0);
+                    break;
+                case KEYGUARD_DONE_DRAWING:
+                    handleKeyguardDoneDrawing();
+                    break;
+                case KEYGUARD_DONE_AUTHENTICATING:
+                    keyguardDone(true, true);
+                    break;
+                case SET_OCCLUDED:
+                    handleSetOccluded(msg.arg1 != 0);
+                    break;
+                case KEYGUARD_TIMEOUT:
+                    synchronized (KeyguardViewMediator.this) {
+                        doKeyguardLocked((Bundle) msg.obj);
+                    }
+                    break;
+                case DISMISS:
+                    handleDismiss();
+                    break;
+            }
+        }
+    };
+
+    /**
+     * @see #keyguardDone
+     * @see #KEYGUARD_DONE
+     */
+    private void handleKeyguardDone(boolean authenticated, boolean wakeup) {
+        if (DEBUG) Log.d(TAG, "handleKeyguardDone");
+
+        if (authenticated) {
+            mUpdateMonitor.clearFailedUnlockAttempts();
+        }
+
+        if (mExitSecureCallback != null) {
+            try {
+                mExitSecureCallback.onKeyguardExitResult(authenticated);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "Failed to call onKeyguardExitResult(" + authenticated + ")", e);
+            }
+
+            mExitSecureCallback = null;
+
+            if (authenticated) {
+                // after succesfully exiting securely, no need to reshow
+                // the keyguard when they've released the lock
+                mExternallyEnabled = true;
+                mNeedToReshowWhenReenabled = false;
+            }
+        }
+
+        handleHide();
+        sendUserPresentBroadcast();
+    }
+
+    private void sendUserPresentBroadcast() {
+        final UserHandle currentUser = new UserHandle(mLockPatternUtils.getCurrentUser());
+        mContext.sendBroadcastAsUser(USER_PRESENT_INTENT, currentUser);
+    }
+
+    /**
+     * @see #keyguardDone
+     * @see #KEYGUARD_DONE_DRAWING
+     */
+    private void handleKeyguardDoneDrawing() {
+        synchronized(this) {
+            if (DEBUG) Log.d(TAG, "handleKeyguardDoneDrawing");
+            if (mWaitingUntilKeyguardVisible) {
+                if (DEBUG) Log.d(TAG, "handleKeyguardDoneDrawing: notifying mWaitingUntilKeyguardVisible");
+                mWaitingUntilKeyguardVisible = false;
+                notifyAll();
+
+                // there will usually be two of these sent, one as a timeout, and one
+                // as a result of the callback, so remove any remaining messages from
+                // the queue
+                mHandler.removeMessages(KEYGUARD_DONE_DRAWING);
+            }
+        }
+    }
+
+    private void playSounds(boolean locked) {
+        // User feedback for keyguard.
+
+        if (mSuppressNextLockSound) {
+            mSuppressNextLockSound = false;
+            return;
+        }
+
+        final ContentResolver cr = mContext.getContentResolver();
+        if (Settings.System.getInt(cr, Settings.System.LOCKSCREEN_SOUNDS_ENABLED, 1) == 1) {
+            final int whichSound = locked
+                ? mLockSoundId
+                : mUnlockSoundId;
+            mLockSounds.stop(mLockSoundStreamId);
+            // Init mAudioManager
+            if (mAudioManager == null) {
+                mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+                if (mAudioManager == null) return;
+                mMasterStreamType = mAudioManager.getMasterStreamType();
+            }
+            // If the stream is muted, don't play the sound
+            if (mAudioManager.isStreamMute(mMasterStreamType)) return;
+
+            mLockSoundStreamId = mLockSounds.play(whichSound,
+                    mLockSoundVolume, mLockSoundVolume, 1/*priortiy*/, 0/*loop*/, 1.0f/*rate*/);
+        }
+    }
+
+    private void updateActivityLockScreenState() {
+        try {
+            ActivityManagerNative.getDefault().setLockScreenShown(mShowing && !mOccluded);
+        } catch (RemoteException e) {
+        }
+    }
+
+    /**
+     * Handle message sent by {@link #showLocked}.
+     * @see #SHOW
+     */
+    private void handleShow(Bundle options) {
+        synchronized (KeyguardViewMediator.this) {
+            if (!mSystemReady) {
+                if (DEBUG) Log.d(TAG, "ignoring handleShow because system is not ready.");
+                return;
+            } else {
+                if (DEBUG) Log.d(TAG, "handleShow");
+            }
+
+            mStatusBarKeyguardViewManager.show(options);
+            mShowing = true;
+            mKeyguardDonePending = false;
+            updateActivityLockScreenState();
+            adjustStatusBarLocked();
+            userActivity();
+
+            // Do this at the end to not slow down display of the keyguard.
+            playSounds(true);
+
+            mShowKeyguardWakeLock.release();
+        }
+        mKeyguardDisplayManager.show();
+    }
+
+    /**
+     * Handle message sent by {@link #hideLocked()}
+     * @see #HIDE
+     */
+    private void handleHide() {
+        synchronized (KeyguardViewMediator.this) {
+            if (DEBUG) Log.d(TAG, "handleHide");
+
+            // only play "unlock" noises if not on a call (since the incall UI
+            // disables the keyguard)
+            if (TelephonyManager.EXTRA_STATE_IDLE.equals(mPhoneState)) {
+                playSounds(false);
+            }
+
+            mStatusBarKeyguardViewManager.hide();
+            mShowing = false;
+            mKeyguardDonePending = false;
+            updateActivityLockScreenState();
+            adjustStatusBarLocked();
+        }
+    }
+
+    private void adjustStatusBarLocked() {
+        if (mStatusBarManager == null) {
+            mStatusBarManager = (StatusBarManager)
+                    mContext.getSystemService(Context.STATUS_BAR_SERVICE);
+        }
+        if (mStatusBarManager == null) {
+            Log.w(TAG, "Could not get status bar manager");
+        } else {
+            // Disable aspects of the system/status/navigation bars that must not be re-enabled by
+            // windows that appear on top, ever
+            int flags = StatusBarManager.DISABLE_NONE;
+            if (mShowing) {
+                // Permanently disable components not available when keyguard is enabled
+                // (like recents). Temporary enable/disable (e.g. the "back" button) are
+                // done in KeyguardHostView.
+                flags |= StatusBarManager.DISABLE_RECENT;
+                if (!isAssistantAvailable()) {
+                    flags |= StatusBarManager.DISABLE_SEARCH;
+                }
+            }
+            if (isShowingAndNotOccluded()) {
+                flags |= StatusBarManager.DISABLE_HOME;
+            }
+
+            if (DEBUG) {
+                Log.d(TAG, "adjustStatusBarLocked: mShowing=" + mShowing + " mOccluded=" + mOccluded
+                        + " isSecure=" + isSecure() + " --> flags=0x" + Integer.toHexString(flags));
+            }
+
+            if (!(mContext instanceof Activity)) {
+                mStatusBarManager.disable(flags);
+            }
+        }
+    }
+
+    /**
+     * Handle message sent by {@link #resetStateLocked}
+     * @see #RESET
+     */
+    private void handleReset() {
+        synchronized (KeyguardViewMediator.this) {
+            if (DEBUG) Log.d(TAG, "handleReset");
+            mStatusBarKeyguardViewManager.reset();
+        }
+    }
+
+    /**
+     * Handle message sent by {@link #verifyUnlock}
+     * @see #VERIFY_UNLOCK
+     */
+    private void handleVerifyUnlock() {
+        synchronized (KeyguardViewMediator.this) {
+            if (DEBUG) Log.d(TAG, "handleVerifyUnlock");
+            mStatusBarKeyguardViewManager.verifyUnlock();
+            mShowing = true;
+            updateActivityLockScreenState();
+        }
+    }
+
+    /**
+     * Handle message sent by {@link #notifyScreenOffLocked()}
+     * @see #NOTIFY_SCREEN_OFF
+     */
+    private void handleNotifyScreenOff() {
+        synchronized (KeyguardViewMediator.this) {
+            if (DEBUG) Log.d(TAG, "handleNotifyScreenOff");
+            mStatusBarKeyguardViewManager.onScreenTurnedOff();
+        }
+    }
+
+    /**
+     * Handle message sent by {@link #notifyScreenOnLocked}
+     * @see #NOTIFY_SCREEN_ON
+     */
+    private void handleNotifyScreenOn(IKeyguardShowCallback callback) {
+        synchronized (KeyguardViewMediator.this) {
+            if (DEBUG) Log.d(TAG, "handleNotifyScreenOn");
+            mStatusBarKeyguardViewManager.onScreenTurnedOn(callback);
+        }
+    }
+
+    public boolean isDismissable() {
+        return mKeyguardDonePending || !isSecure();
+    }
+
+    private boolean isAssistantAvailable() {
+        return mSearchManager != null
+                && mSearchManager.getAssistIntent(mContext, false, UserHandle.USER_CURRENT) != null;
+    }
+
+    public void onBootCompleted() {
+        mUpdateMonitor.dispatchBootCompleted();
+    }
+
+    public StatusBarKeyguardViewManager registerStatusBar(PhoneStatusBar phoneStatusBar,
+            ViewGroup container, StatusBarWindowManager statusBarWindowManager) {
+        mStatusBarKeyguardViewManager.registerStatusBar(phoneStatusBar, container,
+                statusBarWindowManager);
+        return mStatusBarKeyguardViewManager;
+    }
+
+    public ViewMediatorCallback getViewMediatorCallback() {
+        return mViewMediatorCallback;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerDialogWarnings.java b/packages/SystemUI/src/com/android/systemui/power/PowerDialogWarnings.java
new file mode 100644
index 0000000..feec87c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerDialogWarnings.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.power;
+
+import android.app.AlertDialog;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.media.AudioManager;
+import android.media.Ringtone;
+import android.media.RingtoneManager;
+import android.net.Uri;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.Slog;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.TextView;
+
+import com.android.systemui.R;
+
+import java.io.PrintWriter;
+
+public class PowerDialogWarnings implements PowerUI.WarningsUI {
+    private static final String TAG = PowerUI.TAG + ".Dialog";
+    private static final boolean DEBUG = PowerUI.DEBUG;
+
+    private final Context mContext;
+
+    private int mBatteryLevel;
+    private int mBucket;
+    private long mScreenOffTime;
+
+    private AlertDialog mInvalidChargerDialog;
+    private AlertDialog mLowBatteryDialog;
+    private TextView mBatteryLevelTextView;
+
+    public PowerDialogWarnings(Context context) {
+        mContext = context;
+    }
+
+    @Override
+    public void dump(PrintWriter pw) {
+        pw.print("mInvalidChargerDialog=");
+        pw.println(mInvalidChargerDialog == null ? "null" : mInvalidChargerDialog.toString());
+        pw.print("mLowBatteryDialog=");
+        pw.println(mLowBatteryDialog == null ? "null" : mLowBatteryDialog.toString());
+    }
+
+    @Override
+    public void update(int batteryLevel, int bucket, long screenOffTime) {
+        mBatteryLevel = batteryLevel;
+        mBucket = bucket;
+        mScreenOffTime = screenOffTime;
+    }
+
+    @Override
+    public boolean isInvalidChargerWarningShowing() {
+        return mInvalidChargerDialog != null;
+    }
+
+    @Override
+    public void updateLowBatteryWarning() {
+        if (mBatteryLevelTextView != null) {
+            showLowBatteryWarning(false /*playSound*/);
+        }
+    }
+
+    @Override
+    public void dismissLowBatteryWarning() {
+        if (mLowBatteryDialog != null) {
+            Slog.i(TAG, "closing low battery warning: level=" + mBatteryLevel);
+            mLowBatteryDialog.dismiss();
+        }
+    }
+
+    @Override
+    public void showLowBatteryWarning(boolean playSound) {
+        Slog.i(TAG,
+                ((mBatteryLevelTextView == null) ? "showing" : "updating")
+                + " low battery warning: level=" + mBatteryLevel
+                + " [" + mBucket + "]");
+
+        CharSequence levelText = mContext.getString(
+                R.string.battery_low_percent_format, mBatteryLevel);
+
+        if (mBatteryLevelTextView != null) {
+            mBatteryLevelTextView.setText(levelText);
+        } else {
+            View v = View.inflate(mContext, R.layout.battery_low, null);
+            mBatteryLevelTextView = (TextView)v.findViewById(R.id.level_percent);
+
+            mBatteryLevelTextView.setText(levelText);
+
+            AlertDialog.Builder b = new AlertDialog.Builder(mContext);
+                b.setCancelable(true);
+                b.setTitle(R.string.battery_low_title);
+                b.setView(v);
+                b.setIconAttribute(android.R.attr.alertDialogIcon);
+                b.setPositiveButton(android.R.string.ok, null);
+
+            final Intent intent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
+            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                    | Intent.FLAG_ACTIVITY_MULTIPLE_TASK
+                    | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
+                    | Intent.FLAG_ACTIVITY_NO_HISTORY);
+            if (intent.resolveActivity(mContext.getPackageManager()) != null) {
+                b.setNegativeButton(R.string.battery_low_why,
+                        new DialogInterface.OnClickListener() {
+                    @Override
+                    public void onClick(DialogInterface dialog, int which) {
+                        mContext.startActivityAsUser(intent, UserHandle.CURRENT);
+                        dismissLowBatteryWarning();
+                    }
+                });
+            }
+
+            AlertDialog d = b.create();
+            d.setOnDismissListener(new DialogInterface.OnDismissListener() {
+                    @Override
+                    public void onDismiss(DialogInterface dialog) {
+                        mLowBatteryDialog = null;
+                        mBatteryLevelTextView = null;
+                    }
+                });
+            d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+            d.getWindow().getAttributes().privateFlags |=
+                    WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
+            d.show();
+            mLowBatteryDialog = d;
+            if (playSound) {
+                playLowBatterySound();
+            }
+        }
+    }
+
+    private void playLowBatterySound() {
+        final ContentResolver cr = mContext.getContentResolver();
+
+        final int silenceAfter = Settings.Global.getInt(cr,
+                Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, 0);
+        final long offTime = SystemClock.elapsedRealtime() - mScreenOffTime;
+        if (silenceAfter > 0
+                && mScreenOffTime > 0
+                && offTime > silenceAfter) {
+            Slog.i(TAG, "screen off too long (" + offTime + "ms, limit " + silenceAfter
+                    + "ms): not waking up the user with low battery sound");
+            return;
+        }
+
+        if (DEBUG) {
+            Slog.d(TAG, "playing low battery sound. pick-a-doop!"); // WOMP-WOMP is deprecated
+        }
+
+        if (Settings.Global.getInt(cr, Settings.Global.POWER_SOUNDS_ENABLED, 1) == 1) {
+            final String soundPath = Settings.Global.getString(cr,
+                    Settings.Global.LOW_BATTERY_SOUND);
+            if (soundPath != null) {
+                final Uri soundUri = Uri.parse("file://" + soundPath);
+                if (soundUri != null) {
+                    final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
+                    if (sfx != null) {
+                        sfx.setStreamType(AudioManager.STREAM_SYSTEM);
+                        sfx.play();
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    public void dismissInvalidChargerWarning() {
+        if (mInvalidChargerDialog != null) {
+            mInvalidChargerDialog.dismiss();
+        }
+    }
+
+    @Override
+    public void showInvalidChargerWarning() {
+        Slog.d(TAG, "showing invalid charger dialog");
+
+        dismissLowBatteryWarning();
+
+        AlertDialog.Builder b = new AlertDialog.Builder(mContext);
+            b.setCancelable(true);
+            b.setMessage(R.string.invalid_charger);
+            b.setIconAttribute(android.R.attr.alertDialogIcon);
+            b.setPositiveButton(android.R.string.ok, null);
+
+        AlertDialog d = b.create();
+            d.setOnDismissListener(new DialogInterface.OnDismissListener() {
+                    public void onDismiss(DialogInterface dialog) {
+                        mInvalidChargerDialog = null;
+                        mBatteryLevelTextView = null;
+                    }
+                });
+
+        d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
+        d.show();
+        mInvalidChargerDialog = d;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
index 28c2772..0fb0f8b 100644
--- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
+++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java
@@ -16,29 +16,17 @@
 
 package com.android.systemui.power;
 
-import android.app.AlertDialog;
 import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
 import android.content.Context;
-import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.media.AudioManager;
-import android.media.Ringtone;
-import android.media.RingtoneManager;
-import android.net.Uri;
 import android.os.BatteryManager;
 import android.os.Handler;
 import android.os.PowerManager;
 import android.os.SystemClock;
-import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Slog;
-import android.view.View;
-import android.view.WindowManager;
-import android.widget.TextView;
 
-import com.android.systemui.R;
 import com.android.systemui.SystemUI;
 
 import java.io.FileDescriptor;
@@ -50,19 +38,17 @@
 
     static final boolean DEBUG = false;
 
-    Handler mHandler = new Handler();
+    private WarningsUI mWarnings;
 
-    int mBatteryLevel = 100;
-    int mBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN;
-    int mPlugType = 0;
-    int mInvalidCharger = 0;
+    private final Handler mHandler = new Handler();
 
-    int mLowBatteryAlertCloseLevel;
-    int[] mLowBatteryReminderLevels = new int[2];
+    private int mBatteryLevel = 100;
+    private int mBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN;
+    private int mPlugType = 0;
+    private int mInvalidCharger = 0;
 
-    AlertDialog mInvalidChargerDialog;
-    AlertDialog mLowBatteryDialog;
-    TextView mBatteryLevelTextView;
+    private int mLowBatteryAlertCloseLevel;
+    private final int[] mLowBatteryReminderLevels = new int[2];
 
     private long mScreenOffTime = -1;
 
@@ -77,6 +63,7 @@
 
         final PowerManager pm = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
         mScreenOffTime = pm.isScreenOn() ? -1 : SystemClock.elapsedRealtime();
+        mWarnings = new PowerDialogWarnings(mContext);
 
         // Register for Intent broadcasts for...
         IntentFilter filter = new IntentFilter();
@@ -145,13 +132,14 @@
                     Slog.d(TAG, "plugged        " + oldPlugged + " --> " + plugged);
                 }
 
+                mWarnings.update(mBatteryLevel, bucket, mScreenOffTime);
                 if (oldInvalidCharger == 0 && mInvalidCharger != 0) {
                     Slog.d(TAG, "showing invalid charger warning");
-                    showInvalidChargerDialog();
+                    mWarnings.showInvalidChargerWarning();
                     return;
                 } else if (oldInvalidCharger != 0 && mInvalidCharger == 0) {
-                    dismissInvalidChargerDialog();
-                } else if (mInvalidChargerDialog != null) {
+                    mWarnings.dismissInvalidChargerWarning();
+                } else if (mWarnings.isInvalidChargerWarningShowing()) {
                     // if invalid charger is showing, don't show low battery
                     return;
                 }
@@ -160,16 +148,13 @@
                         && (bucket < oldBucket || oldPlugged)
                         && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN
                         && bucket < 0) {
-                    showLowBatteryWarning();
-
                     // only play SFX when the dialog comes up or the bucket changes
-                    if (bucket != oldBucket || oldPlugged) {
-                        playLowBatterySound();
-                    }
+                    final boolean playSound = bucket != oldBucket || oldPlugged;
+                    mWarnings.showLowBatteryWarning(playSound);
                 } else if (plugged || (bucket > oldBucket && bucket > 0)) {
-                    dismissLowBatteryWarning();
-                } else if (mBatteryLevelTextView != null) {
-                    showLowBatteryWarning();
+                    mWarnings.dismissLowBatteryWarning();
+                } else {
+                    mWarnings.updateLowBatteryWarning();
                 }
             } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                 mScreenOffTime = SystemClock.elapsedRealtime();
@@ -181,142 +166,11 @@
         }
     };
 
-    void dismissLowBatteryWarning() {
-        if (mLowBatteryDialog != null) {
-            Slog.i(TAG, "closing low battery warning: level=" + mBatteryLevel);
-            mLowBatteryDialog.dismiss();
-        }
-    }
-
-    void showLowBatteryWarning() {
-        Slog.i(TAG,
-                ((mBatteryLevelTextView == null) ? "showing" : "updating")
-                + " low battery warning: level=" + mBatteryLevel
-                + " [" + findBatteryLevelBucket(mBatteryLevel) + "]");
-
-        CharSequence levelText = mContext.getString(
-                R.string.battery_low_percent_format, mBatteryLevel);
-
-        if (mBatteryLevelTextView != null) {
-            mBatteryLevelTextView.setText(levelText);
-        } else {
-            View v = View.inflate(mContext, R.layout.battery_low, null);
-            mBatteryLevelTextView = (TextView)v.findViewById(R.id.level_percent);
-
-            mBatteryLevelTextView.setText(levelText);
-
-            AlertDialog.Builder b = new AlertDialog.Builder(mContext);
-                b.setCancelable(true);
-                b.setTitle(R.string.battery_low_title);
-                b.setView(v);
-                b.setIconAttribute(android.R.attr.alertDialogIcon);
-                b.setPositiveButton(android.R.string.ok, null);
-
-            final Intent intent = new Intent(Intent.ACTION_POWER_USAGE_SUMMARY);
-            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
-                    | Intent.FLAG_ACTIVITY_MULTIPLE_TASK
-                    | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
-                    | Intent.FLAG_ACTIVITY_NO_HISTORY);
-            if (intent.resolveActivity(mContext.getPackageManager()) != null) {
-                b.setNegativeButton(R.string.battery_low_why,
-                        new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        mContext.startActivityAsUser(intent, UserHandle.CURRENT);
-                        dismissLowBatteryWarning();
-                    }
-                });
-            }
-
-            AlertDialog d = b.create();
-            d.setOnDismissListener(new DialogInterface.OnDismissListener() {
-                    @Override
-                    public void onDismiss(DialogInterface dialog) {
-                        mLowBatteryDialog = null;
-                        mBatteryLevelTextView = null;
-                    }
-                });
-            d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-            d.getWindow().getAttributes().privateFlags |=
-                    WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
-            d.show();
-            mLowBatteryDialog = d;
-        }
-    }
-
-    void playLowBatterySound() {
-        final ContentResolver cr = mContext.getContentResolver();
-
-        final int silenceAfter = Settings.Global.getInt(cr,
-                Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, 0);
-        final long offTime = SystemClock.elapsedRealtime() - mScreenOffTime;
-        if (silenceAfter > 0
-                && mScreenOffTime > 0
-                && offTime > silenceAfter) {
-            Slog.i(TAG, "screen off too long (" + offTime + "ms, limit " + silenceAfter
-                    + "ms): not waking up the user with low battery sound");
-            return;
-        }
-
-        if (DEBUG) {
-            Slog.d(TAG, "playing low battery sound. pick-a-doop!"); // WOMP-WOMP is deprecated
-        }
-
-        if (Settings.Global.getInt(cr, Settings.Global.POWER_SOUNDS_ENABLED, 1) == 1) {
-            final String soundPath = Settings.Global.getString(cr,
-                    Settings.Global.LOW_BATTERY_SOUND);
-            if (soundPath != null) {
-                final Uri soundUri = Uri.parse("file://" + soundPath);
-                if (soundUri != null) {
-                    final Ringtone sfx = RingtoneManager.getRingtone(mContext, soundUri);
-                    if (sfx != null) {
-                        sfx.setStreamType(AudioManager.STREAM_SYSTEM);
-                        sfx.play();
-                    }
-                }
-            }
-        }
-    }
-
-    void dismissInvalidChargerDialog() {
-        if (mInvalidChargerDialog != null) {
-            mInvalidChargerDialog.dismiss();
-        }
-    }
-
-    void showInvalidChargerDialog() {
-        Slog.d(TAG, "showing invalid charger dialog");
-
-        dismissLowBatteryWarning();
-
-        AlertDialog.Builder b = new AlertDialog.Builder(mContext);
-            b.setCancelable(true);
-            b.setMessage(R.string.invalid_charger);
-            b.setIconAttribute(android.R.attr.alertDialogIcon);
-            b.setPositiveButton(android.R.string.ok, null);
-
-        AlertDialog d = b.create();
-            d.setOnDismissListener(new DialogInterface.OnDismissListener() {
-                    public void onDismiss(DialogInterface dialog) {
-                        mInvalidChargerDialog = null;
-                        mBatteryLevelTextView = null;
-                    }
-                });
-
-        d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-        d.show();
-        mInvalidChargerDialog = d;
-    }
-
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
         pw.print("mLowBatteryAlertCloseLevel=");
         pw.println(mLowBatteryAlertCloseLevel);
         pw.print("mLowBatteryReminderLevels=");
         pw.println(Arrays.toString(mLowBatteryReminderLevels));
-        pw.print("mInvalidChargerDialog=");
-        pw.println(mInvalidChargerDialog == null ? "null" : mInvalidChargerDialog.toString());
-        pw.print("mLowBatteryDialog=");
-        pw.println(mLowBatteryDialog == null ? "null" : mLowBatteryDialog.toString());
         pw.print("mBatteryLevel=");
         pw.println(Integer.toString(mBatteryLevel));
         pw.print("mBatteryStatus=");
@@ -338,6 +192,18 @@
                 Settings.Global.LOW_BATTERY_SOUND_TIMEOUT, 0));
         pw.print("bucket: ");
         pw.println(Integer.toString(findBatteryLevelBucket(mBatteryLevel)));
+        mWarnings.dump(pw);
+    }
+
+    public interface WarningsUI {
+        void update(int batteryLevel, int bucket, long screenOffTime);
+        void dismissLowBatteryWarning();
+        void showLowBatteryWarning(boolean playSound);
+        void dismissInvalidChargerWarning();
+        void showInvalidChargerWarning();
+        void updateLowBatteryWarning();
+        boolean isInvalidChargerWarningShowing();
+        void dump(PrintWriter pw);
     }
 }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java b/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java
index c714d8b..aa4e69a 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentTasksLoader.java
@@ -17,10 +17,12 @@
 package com.android.systemui.recent;
 
 import android.app.ActivityManager;
+import android.app.AppGlobals;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
+import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Resources;
@@ -30,7 +32,9 @@
 import android.os.AsyncTask;
 import android.os.Handler;
 import android.os.Process;
+import android.os.RemoteException;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
@@ -156,15 +160,20 @@
 
     // Create an TaskDescription, returning null if the title or icon is null
     TaskDescription createTaskDescription(int taskId, int persistentTaskId, Intent baseIntent,
-            ComponentName origActivity, CharSequence description) {
+            ComponentName origActivity, CharSequence description, int userId) {
         Intent intent = new Intent(baseIntent);
         if (origActivity != null) {
             intent.setComponent(origActivity);
         }
         final PackageManager pm = mContext.getPackageManager();
+        final IPackageManager ipm = AppGlobals.getPackageManager();
         intent.setFlags((intent.getFlags()&~Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)
                 | Intent.FLAG_ACTIVITY_NEW_TASK);
-        final ResolveInfo resolveInfo = pm.resolveActivity(intent, 0);
+        ResolveInfo resolveInfo = null;
+        try {
+            resolveInfo = ipm.resolveIntent(intent, null, 0, userId);
+        } catch (RemoteException re) {
+        }
         if (resolveInfo != null) {
             final ActivityInfo info = resolveInfo.activityInfo;
             final String title = info.loadLabel(pm).toString();
@@ -175,7 +184,7 @@
 
                 TaskDescription item = new TaskDescription(taskId,
                         persistentTaskId, resolveInfo, baseIntent, info.packageName,
-                        description);
+                        description, userId);
                 item.setLabel(title);
 
                 return item;
@@ -192,7 +201,11 @@
         final PackageManager pm = mContext.getPackageManager();
         Bitmap thumbnail = am.getTaskTopThumbnail(td.persistentTaskId);
         Drawable icon = getFullResIcon(td.resolveInfo, pm);
-
+        if (td.userId != UserHandle.myUserId()) {
+            // Need to badge the icon
+            final UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+            icon = um.getBadgedDrawableForUser(icon, new UserHandle(td.userId));
+        }
         if (DEBUG) Log.v(TAG, "Loaded bitmap for task "
                 + td + ": " + thumbnail);
         synchronized (td) {
@@ -367,8 +380,9 @@
     public TaskDescription loadFirstTask() {
         final ActivityManager am = (ActivityManager) mContext.getSystemService(Context.ACTIVITY_SERVICE);
 
-        final List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasksForUser(
-                1, ActivityManager.RECENT_IGNORE_UNAVAILABLE, UserHandle.CURRENT.getIdentifier());
+        final List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasksForUser(1,
+                ActivityManager.RECENT_IGNORE_UNAVAILABLE | ActivityManager.RECENT_INCLUDE_PROFILES,
+                UserHandle.CURRENT.getIdentifier());
         TaskDescription item = null;
         if (recentTasks.size() > 0) {
             ActivityManager.RecentTaskInfo recentInfo = recentTasks.get(0);
@@ -390,7 +404,8 @@
 
             item = createTaskDescription(recentInfo.id,
                     recentInfo.persistentId, recentInfo.baseIntent,
-                    recentInfo.origActivity, recentInfo.description);
+                    recentInfo.origActivity, recentInfo.description,
+                    recentInfo.userId);
             if (item != null) {
                 loadThumbnailAndIcon(item);
             }
@@ -439,7 +454,8 @@
                 mContext.getSystemService(Context.ACTIVITY_SERVICE);
 
                 final List<ActivityManager.RecentTaskInfo> recentTasks =
-                        am.getRecentTasks(MAX_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE);
+                        am.getRecentTasks(MAX_TASKS, ActivityManager.RECENT_IGNORE_UNAVAILABLE
+                        | ActivityManager.RECENT_INCLUDE_PROFILES);
                 int numTasks = recentTasks.size();
                 ActivityInfo homeInfo = new Intent(Intent.ACTION_MAIN)
                         .addCategory(Intent.CATEGORY_HOME).resolveActivityInfo(pm, 0);
@@ -472,7 +488,8 @@
 
                     TaskDescription item = createTaskDescription(recentInfo.id,
                             recentInfo.persistentId, recentInfo.baseIntent,
-                            recentInfo.origActivity, recentInfo.description);
+                            recentInfo.origActivity, recentInfo.description,
+                            recentInfo.userId);
 
                     if (item != null) {
                         while (true) {
diff --git a/packages/SystemUI/src/com/android/systemui/recent/Recents.java b/packages/SystemUI/src/com/android/systemui/recent/Recents.java
index f5670e1..ae18aa8 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/Recents.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/Recents.java
@@ -26,27 +26,55 @@
 import android.graphics.Paint;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.Display;
 import android.view.View;
-
 import com.android.systemui.R;
 import com.android.systemui.RecentsComponent;
 import com.android.systemui.SystemUI;
+import com.android.systemui.recents.AlternateRecentsComponent;
+
 
 public class Recents extends SystemUI implements RecentsComponent {
     private static final String TAG = "Recents";
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = true;
+
+    // Which recents to use
+    boolean mUseAlternateRecents;
+    AlternateRecentsComponent mAlternateRecents;
+    boolean mBootCompleted = false;
 
     @Override
     public void start() {
+        Configuration config = mContext.getResources().getConfiguration();
+        mUseAlternateRecents = (config.smallestScreenWidthDp < 600);
+        if (mUseAlternateRecents) {
+            if (mAlternateRecents == null) {
+                mAlternateRecents = new AlternateRecentsComponent(mContext);
+            }
+            mAlternateRecents.onStart();
+        }
+
         putComponent(RecentsComponent.class, this);
     }
 
     @Override
+    protected void onBootCompleted() {
+        mBootCompleted = true;
+    }
+
+    @Override
     public void toggleRecents(Display display, int layoutDirection, View statusBarView) {
+        if (mUseAlternateRecents) {
+            // Launch the alternate recents if required
+            mAlternateRecents.onToggleRecents(display, layoutDirection, statusBarView);
+            return;
+        }
+
         if (DEBUG) Log.d(TAG, "toggle recents panel");
         try {
             TaskDescription firstTask = RecentTasksLoader.getInstance(mContext).getFirstTask();
@@ -177,13 +205,11 @@
                                 Intent intent =
                                         new Intent(RecentsActivity.WINDOW_ANIMATION_START_INTENT);
                                 intent.setPackage("com.android.systemui");
-                                mContext.sendBroadcastAsUser(intent,
-                                        new UserHandle(UserHandle.USER_CURRENT));
+                                sendBroadcastSafely(intent);
                             }
                         });
                 intent.putExtra(RecentsActivity.WAITING_FOR_WINDOW_ANIMATION_PARAM, true);
-                mContext.startActivityAsUser(intent, opts.toBundle(), new UserHandle(
-                        UserHandle.USER_CURRENT));
+                startActivitySafely(intent, opts.toBundle());
             }
         } catch (ActivityNotFoundException e) {
             Log.e(TAG, "Failed to launch RecentAppsIntent", e);
@@ -191,32 +217,66 @@
     }
 
     @Override
-    public void preloadRecentTasksList() {
-        if (DEBUG) Log.d(TAG, "preloading recents");
-        Intent intent = new Intent(RecentsActivity.PRELOAD_INTENT);
-        intent.setClassName("com.android.systemui",
-                "com.android.systemui.recent.RecentsPreloadReceiver");
-        mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
+    protected void onConfigurationChanged(Configuration newConfig) {
+        if (mUseAlternateRecents) {
+            mAlternateRecents.onConfigurationChanged(newConfig);
+        }
+    }
 
-        RecentTasksLoader.getInstance(mContext).preloadFirstTask();
+    @Override
+    public void preloadRecentTasksList() {
+        if (mUseAlternateRecents) {
+            mAlternateRecents.onPreloadRecents();
+        } else {
+            Intent intent = new Intent(RecentsActivity.PRELOAD_INTENT);
+            intent.setClassName("com.android.systemui",
+                    "com.android.systemui.recent.RecentsPreloadReceiver");
+            sendBroadcastSafely(intent);
+
+            RecentTasksLoader.getInstance(mContext).preloadFirstTask();
+        }
     }
 
     @Override
     public void cancelPreloadingRecentTasksList() {
-        if (DEBUG) Log.d(TAG, "cancel preloading recents");
-        Intent intent = new Intent(RecentsActivity.CANCEL_PRELOAD_INTENT);
-        intent.setClassName("com.android.systemui",
-                "com.android.systemui.recent.RecentsPreloadReceiver");
-        mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
+        if (mUseAlternateRecents) {
+            mAlternateRecents.onCancelPreloadingRecents();
+        } else {
+            Intent intent = new Intent(RecentsActivity.CANCEL_PRELOAD_INTENT);
+            intent.setClassName("com.android.systemui",
+                    "com.android.systemui.recent.RecentsPreloadReceiver");
+            sendBroadcastSafely(intent);
 
-        RecentTasksLoader.getInstance(mContext).cancelPreloadingFirstTask();
+            RecentTasksLoader.getInstance(mContext).cancelPreloadingFirstTask();
+        }
     }
 
     @Override
     public void closeRecents() {
-        if (DEBUG) Log.d(TAG, "closing recents panel");
-        Intent intent = new Intent(RecentsActivity.CLOSE_RECENTS_INTENT);
-        intent.setPackage("com.android.systemui");
+        if (mUseAlternateRecents) {
+            mAlternateRecents.onCloseRecents();
+        } else {
+            Intent intent = new Intent(RecentsActivity.CLOSE_RECENTS_INTENT);
+            intent.setPackage("com.android.systemui");
+            sendBroadcastSafely(intent);
+
+            RecentTasksLoader.getInstance(mContext).cancelPreloadingFirstTask();
+        }
+    }
+
+    /**
+     * Send broadcast only if BOOT_COMPLETED
+     */
+    private void sendBroadcastSafely(Intent intent) {
+        if (!mBootCompleted) return;
         mContext.sendBroadcastAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
     }
+
+    /**
+     * Start activity only if BOOT_COMPLETED
+     */
+    private void startActivitySafely(Intent intent, Bundle opts) {
+        if (!mBootCompleted) return;
+        mContext.startActivityAsUser(intent, opts, new UserHandle(UserHandle.USER_CURRENT));
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
index 09a7a5e..7ab40b0 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsActivity.java
@@ -164,7 +164,8 @@
             final List<ActivityManager.RecentTaskInfo> recentTasks =
                     am.getRecentTasks(2,
                             ActivityManager.RECENT_WITH_EXCLUDED |
-                            ActivityManager.RECENT_IGNORE_UNAVAILABLE);
+                            ActivityManager.RECENT_IGNORE_UNAVAILABLE |
+                            ActivityManager.RECENT_INCLUDE_PROFILES);
             if (recentTasks.size() > 1 &&
                     mRecentsPanel.simulateClick(recentTasks.get(1).persistentId)) {
                 // recents panel will take care of calling show(false) through simulateClick
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
index be42bc0..35c824b 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsHorizontalScrollView.java
@@ -57,7 +57,7 @@
     public RecentsHorizontalScrollView(Context context, AttributeSet attrs) {
         super(context, attrs, 0);
         float densityScale = getResources().getDisplayMetrics().density;
-        float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop();
+        float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
         mSwipeHelper = new SwipeHelper(SwipeHelper.Y, this, densityScale, pagingTouchSlop);
         mFadedEdgeDrawHelper = FadedEdgeDrawHelper.create(context, attrs, this, false);
         mRecycledViews = new HashSet<View>();
@@ -239,9 +239,9 @@
         if (mFadedEdgeDrawHelper != null) {
 
             mFadedEdgeDrawHelper.drawCallback(canvas,
-                    left, right, top, bottom, mScrollX, mScrollY,
+                    left, right, top, bottom, getScrollX(), getScrollY(),
                     0, 0,
-                    getLeftFadingEdgeStrength(), getRightFadingEdgeStrength(), mPaddingTop);
+                    getLeftFadingEdgeStrength(), getRightFadingEdgeStrength(), getPaddingTop());
         }
     }
 
@@ -280,7 +280,7 @@
         super.onFinishInflate();
         setScrollbarFadingEnabled(true);
         mLinearLayout = (LinearLayout) findViewById(R.id.recents_linear_layout);
-        final int leftPadding = mContext.getResources()
+        final int leftPadding = getContext().getResources()
             .getDimensionPixelOffset(R.dimen.status_bar_recents_thumbnail_left_margin);
         setOverScrollEffectPadding(leftPadding, 0);
     }
@@ -297,7 +297,7 @@
         super.onConfigurationChanged(newConfig);
         float densityScale = getResources().getDisplayMetrics().density;
         mSwipeHelper.setDensityScale(densityScale);
-        float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop();
+        float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
         mSwipeHelper.setPagingTouchSlop(pagingTouchSlop);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
index 788e843..98bdee0 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java
@@ -330,7 +330,7 @@
     }
 
     private void showImpl(boolean show) {
-        sendCloseSystemWindows(mContext, BaseStatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS);
+        sendCloseSystemWindows(getContext(), BaseStatusBar.SYSTEM_DIALOG_REASON_RECENT_APPS);
 
         mShowing = show;
 
@@ -372,11 +372,11 @@
     }
 
     public void dismiss() {
-        ((RecentsActivity) mContext).dismissAndGoHome();
+        ((RecentsActivity) getContext()).dismissAndGoHome();
     }
 
     public void dismissAndGoBack() {
-        ((RecentsActivity) mContext).dismissAndGoBack();
+        ((RecentsActivity) getContext()).dismissAndGoBack();
     }
 
     public void onAnimationCancel(Animator animation) {
@@ -424,7 +424,7 @@
     }
 
     public void updateValuesFromResources() {
-        final Resources res = mContext.getResources();
+        final Resources res = getContext().getResources();
         mThumbnailWidth = Math.round(res.getDimension(R.dimen.status_bar_recents_thumbnail_width));
         mFitThumbnailToXY = res.getBoolean(R.bool.config_recents_thumbnail_image_fits_to_xy);
     }
@@ -440,7 +440,7 @@
                 invalidate();
             }
         });
-        mListAdapter = new TaskDescriptionAdapter(mContext);
+        mListAdapter = new TaskDescriptionAdapter(getContext());
         mRecentsContainer.setAdapter(mListAdapter);
         mRecentsContainer.setCallback(this);
 
@@ -474,7 +474,7 @@
             if (show && h.iconView.getVisibility() != View.VISIBLE) {
                 if (anim) {
                     h.iconView.setAnimation(
-                            AnimationUtils.loadAnimation(mContext, R.anim.recent_appear));
+                            AnimationUtils.loadAnimation(getContext(), R.anim.recent_appear));
                 }
                 h.iconView.setVisibility(View.VISIBLE);
             }
@@ -506,7 +506,7 @@
             if (show && h.thumbnailView.getVisibility() != View.VISIBLE) {
                 if (anim) {
                     h.thumbnailView.setAnimation(
-                            AnimationUtils.loadAnimation(mContext, R.anim.recent_appear));
+                            AnimationUtils.loadAnimation(getContext(), R.anim.recent_appear));
                 }
                 h.thumbnailView.setVisibility(View.VISIBLE);
             }
@@ -617,7 +617,7 @@
         } else {
             mRecentTaskDescriptions.addAll(tasks);
         }
-        if (((RecentsActivity) mContext).isActivityShowing()) {
+        if (((RecentsActivity) getContext()).isActivityShowing()) {
             refreshViews();
         }
     }
@@ -689,7 +689,7 @@
             if (DEBUG) Log.v(TAG, "Starting activity " + intent);
             try {
                 context.startActivityAsUser(intent, opts,
-                        new UserHandle(UserHandle.USER_CURRENT));
+                        new UserHandle(ad.userId));
             } catch (SecurityException e) {
                 Log.e(TAG, "Recents does not have the permission to launch " + intent, e);
             } catch (ActivityNotFoundException e) {
@@ -726,13 +726,13 @@
         // Currently, either direction means the same thing, so ignore direction and remove
         // the task.
         final ActivityManager am = (ActivityManager)
-                mContext.getSystemService(Context.ACTIVITY_SERVICE);
+                getContext().getSystemService(Context.ACTIVITY_SERVICE);
         if (am != null) {
             am.removeTask(ad.persistentTaskId, ActivityManager.REMOVE_TASK_KILL_PROCESS);
 
             // Accessibility feedback
             setContentDescription(
-                    mContext.getString(R.string.accessibility_recents_item_dismissed, ad.getLabel()));
+                    getContext().getString(R.string.accessibility_recents_item_dismissed, ad.getLabel()));
             sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED);
             setContentDescription(null);
         }
@@ -741,7 +741,7 @@
     private void startApplicationDetailsActivity(String packageName) {
         Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
                 Uri.fromParts("package", packageName, null));
-        intent.setComponent(intent.resolveActivity(mContext.getPackageManager()));
+        intent.setComponent(intent.resolveActivity(getContext().getPackageManager()));
         TaskStackBuilder.create(getContext())
                 .addNextIntentWithParentStack(intent).startActivities();
     }
@@ -758,7 +758,7 @@
             final View selectedView, final View anchorView, final View thumbnailView) {
         thumbnailView.setSelected(true);
         final PopupMenu popup =
-            new PopupMenu(mContext, anchorView == null ? selectedView : anchorView);
+            new PopupMenu(getContext(), anchorView == null ? selectedView : anchorView);
         mPopup = popup;
         popup.getMenuInflater().inflate(R.menu.recent_popup_menu, popup.getMenu());
         popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@@ -793,15 +793,15 @@
     protected void dispatchDraw(Canvas canvas) {
         super.dispatchDraw(canvas);
 
-        int paddingLeft = mPaddingLeft;
+        int paddingLeft = getPaddingLeft();
         final boolean offsetRequired = isPaddingOffsetRequired();
         if (offsetRequired) {
             paddingLeft += getLeftPaddingOffset();
         }
 
-        int left = mScrollX + paddingLeft;
-        int right = left + mRight - mLeft - mPaddingRight - paddingLeft;
-        int top = mScrollY + getFadeTop(offsetRequired);
+        int left = getScrollX() + paddingLeft;
+        int right = left + getRight() - getLeft() - getPaddingRight() - paddingLeft;
+        int top = getScrollY() + getFadeTop(offsetRequired);
         int bottom = top + getFadeHeight(offsetRequired);
 
         if (offsetRequired) {
diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
index 6dddc39..297fe0d 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsVerticalScrollView.java
@@ -57,7 +57,7 @@
     public RecentsVerticalScrollView(Context context, AttributeSet attrs) {
         super(context, attrs, 0);
         float densityScale = getResources().getDisplayMetrics().density;
-        float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop();
+        float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
         mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop);
 
         mFadedEdgeDrawHelper = FadedEdgeDrawHelper.create(context, attrs, this, true);
@@ -69,7 +69,7 @@
     }
 
     private int scrollPositionOfMostRecent() {
-        return mLinearLayout.getHeight() - getHeight() + mPaddingTop;
+        return mLinearLayout.getHeight() - getHeight() + getPaddingTop();
     }
 
     private void addToRecycledViews(View v) {
@@ -248,9 +248,9 @@
         if (mFadedEdgeDrawHelper != null) {
             final boolean offsetRequired = isPaddingOffsetRequired();
             mFadedEdgeDrawHelper.drawCallback(canvas,
-                    left, right, top + getFadeTop(offsetRequired), bottom, mScrollX, mScrollY,
+                    left, right, top + getFadeTop(offsetRequired), bottom, getScrollX(), getScrollY(),
                     getTopFadingEdgeStrength(), getBottomFadingEdgeStrength(),
-                    0, 0, mPaddingTop);
+                    0, 0, getPaddingTop());
         }
     }
 
@@ -289,7 +289,7 @@
         super.onFinishInflate();
         setScrollbarFadingEnabled(true);
         mLinearLayout = (LinearLayout) findViewById(R.id.recents_linear_layout);
-        final int leftPadding = mContext.getResources()
+        final int leftPadding = getContext().getResources()
             .getDimensionPixelOffset(R.dimen.status_bar_recents_thumbnail_left_margin);
         setOverScrollEffectPadding(leftPadding, 0);
     }
@@ -306,7 +306,7 @@
         super.onConfigurationChanged(newConfig);
         float densityScale = getResources().getDisplayMetrics().density;
         mSwipeHelper.setDensityScale(densityScale);
-        float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop();
+        float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
         mSwipeHelper.setPagingTouchSlop(pagingTouchSlop);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/recent/TaskDescription.java b/packages/SystemUI/src/com/android/systemui/recent/TaskDescription.java
index 2bc2821..5ad965f 100644
--- a/packages/SystemUI/src/com/android/systemui/recent/TaskDescription.java
+++ b/packages/SystemUI/src/com/android/systemui/recent/TaskDescription.java
@@ -16,9 +16,9 @@
 
 package com.android.systemui.recent;
 
+import android.os.UserHandle;
 import android.content.Intent;
 import android.content.pm.ResolveInfo;
-import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 
 public final class TaskDescription {
@@ -28,6 +28,7 @@
     final Intent intent; // launch intent for application
     final String packageName; // used to override animations (see onClick())
     final CharSequence description;
+    final int userId;
 
     private Drawable mThumbnail; // generated by Activity.onCreateThumbnail()
     private Drawable mIcon; // application package icon
@@ -36,7 +37,7 @@
 
     public TaskDescription(int _taskId, int _persistentTaskId,
             ResolveInfo _resolveInfo, Intent _intent,
-            String _packageName, CharSequence _description) {
+            String _packageName, CharSequence _description, int _userId) {
         resolveInfo = _resolveInfo;
         intent = _intent;
         taskId = _taskId;
@@ -44,6 +45,7 @@
 
         description = _description;
         packageName = _packageName;
+        userId = _userId;
     }
 
     public TaskDescription() {
@@ -54,6 +56,7 @@
 
         description = null;
         packageName = null;
+        userId = UserHandle.USER_NULL;
     }
 
     public void setLoaded(boolean loaded) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java
new file mode 100644
index 0000000..f2e322d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java
@@ -0,0 +1,420 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+import android.app.ActivityManager;
+import android.app.ActivityOptions;
+import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.DisplayMetrics;
+import android.view.Display;
+import android.view.Surface;
+import android.view.SurfaceControl;
+import android.view.View;
+import android.view.WindowManager;
+import com.android.systemui.R;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+/** A proxy implementation for the recents component */
+public class AlternateRecentsComponent {
+
+    /** A handler for messages from the recents implementation */
+    class RecentsMessageHandler extends Handler {
+        @Override
+        public void handleMessage(Message msg) {
+            if (msg.what == MSG_UPDATE_FOR_CONFIGURATION) {
+                Resources res = mContext.getResources();
+                float statusBarHeight = res.getDimensionPixelSize(
+                        com.android.internal.R.dimen.status_bar_height);
+                Bundle replyData = msg.getData().getParcelable(KEY_CONFIGURATION_DATA);
+                mSingleCountFirstTaskRect = replyData.getParcelable(KEY_SINGLE_TASK_STACK_RECT);
+                mSingleCountFirstTaskRect.offset(0, (int) statusBarHeight);
+                mMultipleCountFirstTaskRect = replyData.getParcelable(KEY_MULTIPLE_TASK_STACK_RECT);
+                mMultipleCountFirstTaskRect.offset(0, (int) statusBarHeight);
+            }
+        }
+    }
+
+    /** A service connection to the recents implementation */
+    class RecentsServiceConnection implements ServiceConnection {
+        @Override
+        public void onServiceConnected(ComponentName className, IBinder service) {
+            Console.log(Constants.DebugFlags.App.RecentsComponent,
+                    "[RecentsComponent|ServiceConnection|onServiceConnected]",
+                    "toggleRecents: " + mToggleRecentsUponServiceBound);
+            mService = new Messenger(service);
+            mServiceIsBound = true;
+
+            // Toggle recents if this service connection was triggered by hitting the recents button
+            if (mToggleRecentsUponServiceBound) {
+                startAlternateRecentsActivity();
+            }
+            mToggleRecentsUponServiceBound = false;
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName className) {
+            Console.log(Constants.DebugFlags.App.RecentsComponent,
+                    "[RecentsComponent|ServiceConnection|onServiceDisconnected]");
+            mService = null;
+            mServiceIsBound = false;
+        }
+    }
+
+    final public static int MSG_UPDATE_FOR_CONFIGURATION = 0;
+    final public static int MSG_UPDATE_TASK_THUMBNAIL = 1;
+    final public static int MSG_PRELOAD_TASKS = 2;
+    final public static int MSG_CANCEL_PRELOAD_TASKS = 3;
+    final public static int MSG_CLOSE_RECENTS = 4;
+    final public static int MSG_TOGGLE_RECENTS = 5;
+
+    final public static String EXTRA_ANIMATING_WITH_THUMBNAIL = "recents.animatingWithThumbnail";
+    final public static String KEY_CONFIGURATION_DATA = "recents.data.updateForConfiguration";
+    final public static String KEY_WINDOW_RECT = "recents.windowRect";
+    final public static String KEY_SYSTEM_INSETS = "recents.systemInsets";
+    final public static String KEY_SINGLE_TASK_STACK_RECT = "recents.singleCountTaskRect";
+    final public static String KEY_MULTIPLE_TASK_STACK_RECT = "recents.multipleCountTaskRect";
+
+
+    final static int sMinToggleDelay = 425;
+
+    final static String sToggleRecentsAction = "com.android.systemui.recents.SHOW_RECENTS";
+    final static String sRecentsPackage = "com.android.systemui";
+    final static String sRecentsActivity = "com.android.systemui.recents.RecentsActivity";
+    final static String sRecentsService = "com.android.systemui.recents.RecentsService";
+
+    Context mContext;
+    SystemServicesProxy mSystemServicesProxy;
+
+    // Recents service binding
+    Messenger mService = null;
+    Messenger mMessenger;
+    boolean mServiceIsBound = false;
+    boolean mToggleRecentsUponServiceBound;
+    RecentsServiceConnection mConnection = new RecentsServiceConnection();
+
+    View mStatusBarView;
+    Rect mSingleCountFirstTaskRect = new Rect();
+    Rect mMultipleCountFirstTaskRect = new Rect();
+    long mLastToggleTime;
+
+    public AlternateRecentsComponent(Context context) {
+        mContext = context;
+        mSystemServicesProxy = new SystemServicesProxy(context);
+        mMessenger = new Messenger(new RecentsMessageHandler());
+    }
+
+    public void onStart() {
+        Console.log(Constants.DebugFlags.App.RecentsComponent, "[RecentsComponent|start]");
+
+        // Try to create a long-running connection to the recents service
+        bindToRecentsService(false);
+    }
+
+    /** Toggles the alternate recents activity */
+    public void onToggleRecents(Display display, int layoutDirection, View statusBarView) {
+        Console.logStartTracingTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                Constants.DebugFlags.App.TimeRecentsStartupKey);
+        Console.logStartTracingTime(Constants.DebugFlags.App.TimeRecentsLaunchTask,
+                Constants.DebugFlags.App.TimeRecentsLaunchKey);
+        Console.log(Constants.DebugFlags.App.RecentsComponent, "[RecentsComponent|toggleRecents]",
+                "serviceIsBound: " + mServiceIsBound);
+        mStatusBarView = statusBarView;
+        if (!mServiceIsBound) {
+            // Try to create a long-running connection to the recents service before toggling
+            // recents
+            bindToRecentsService(true);
+            return;
+        }
+
+        try {
+            startAlternateRecentsActivity();
+        } catch (ActivityNotFoundException e) {
+            Console.logRawError("Failed to launch RecentAppsIntent", e);
+        }
+    }
+
+    public void onPreloadRecents() {
+        // Do nothing
+    }
+
+    public void onCancelPreloadingRecents() {
+        // Do nothing
+    }
+
+    public void onCloseRecents() {
+        Console.log(Constants.DebugFlags.App.RecentsComponent, "[RecentsComponent|closeRecents]");
+        if (mServiceIsBound) {
+            // Try and update the recents configuration
+            try {
+                Bundle data = new Bundle();
+                Message msg = Message.obtain(null, MSG_CLOSE_RECENTS, 0, 0);
+                msg.setData(data);
+                mService.send(msg);
+            } catch (RemoteException re) {
+                re.printStackTrace();
+            }
+        }
+    }
+
+    public void onConfigurationChanged(Configuration newConfig) {
+        if (mServiceIsBound) {
+            Resources res = mContext.getResources();
+            int statusBarHeight = res.getDimensionPixelSize(
+                    com.android.internal.R.dimen.status_bar_height);
+            int navBarHeight = res.getDimensionPixelSize(
+                    com.android.internal.R.dimen.navigation_bar_height);
+            Rect rect = new Rect();
+            WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
+            wm.getDefaultDisplay().getRectSize(rect);
+
+            // Try and update the recents configuration
+            try {
+                Bundle data = new Bundle();
+                data.putParcelable(KEY_WINDOW_RECT, rect);
+                data.putParcelable(KEY_SYSTEM_INSETS, new Rect(0, statusBarHeight, 0, 0));
+                Message msg = Message.obtain(null, MSG_UPDATE_FOR_CONFIGURATION, 0, 0);
+                msg.setData(data);
+                msg.replyTo = mMessenger;
+                mService.send(msg);
+            } catch (RemoteException re) {
+                re.printStackTrace();
+            }
+        }
+    }
+
+    /** Binds to the recents implementation */
+    private void bindToRecentsService(boolean toggleRecentsUponConnection) {
+        mToggleRecentsUponServiceBound = toggleRecentsUponConnection;
+        Intent intent = new Intent();
+        intent.setClassName(sRecentsPackage, sRecentsService);
+        mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+    }
+
+    /** Loads the first task thumbnail */
+    Bitmap loadFirstTaskThumbnail() {
+        SystemServicesProxy ssp = mSystemServicesProxy;
+        List<ActivityManager.RecentTaskInfo> tasks = ssp.getRecentTasks(1,
+                UserHandle.CURRENT.getIdentifier());
+        for (ActivityManager.RecentTaskInfo t : tasks) {
+            // Skip tasks in the home stack
+            if (ssp.isInHomeStack(t.persistentId)) {
+                return null;
+            }
+
+            return ssp.getTaskThumbnail(t.persistentId);
+        }
+        return null;
+    }
+
+    /** Returns whether there is are multiple recents tasks */
+    boolean hasMultipleRecentsTask(List<ActivityManager.RecentTaskInfo> tasks) {
+        // NOTE: Currently there's no method to get the number of non-home tasks, so we have to
+        // compute this ourselves
+        SystemServicesProxy ssp = mSystemServicesProxy;
+        Iterator<ActivityManager.RecentTaskInfo> iter = tasks.iterator();
+        while (iter.hasNext()) {
+            ActivityManager.RecentTaskInfo t = iter.next();
+
+            // Skip tasks in the home stack
+            if (ssp.isInHomeStack(t.persistentId)) {
+                iter.remove();
+                continue;
+            }
+        }
+        return (tasks.size() > 1);
+    }
+
+    /** Returns whether the base intent of the top task stack was launched with the flag
+     * Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS. */
+    boolean isTopTaskExcludeFromRecents(List<ActivityManager.RecentTaskInfo> tasks) {
+        if (tasks.size() > 0) {
+            ActivityManager.RecentTaskInfo t = tasks.get(0);
+            Console.log(t.baseIntent.toString());
+            return (t.baseIntent.getFlags() & Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0;
+        }
+        return false;
+    }
+
+    /** Converts from the device rotation to the degree */
+    float getDegreesForRotation(int value) {
+        switch (value) {
+            case Surface.ROTATION_90:
+                return 360f - 90f;
+            case Surface.ROTATION_180:
+                return 360f - 180f;
+            case Surface.ROTATION_270:
+                return 360f - 270f;
+        }
+        return 0f;
+    }
+
+    /** Takes a screenshot of the surface */
+    Bitmap takeScreenshot(Display display) {
+        DisplayMetrics dm = new DisplayMetrics();
+        display.getRealMetrics(dm);
+        float[] dims = {dm.widthPixels, dm.heightPixels};
+        float degrees = getDegreesForRotation(display.getRotation());
+        boolean requiresRotation = (degrees > 0);
+        if (requiresRotation) {
+            // Get the dimensions of the device in its native orientation
+            Matrix m = new Matrix();
+            m.preRotate(-degrees);
+            m.mapPoints(dims);
+            dims[0] = Math.abs(dims[0]);
+            dims[1] = Math.abs(dims[1]);
+        }
+        return SurfaceControl.screenshot((int) dims[0], (int) dims[1]);
+    }
+
+    /** Starts the recents activity */
+    void startAlternateRecentsActivity() {
+        // If the user has toggled it too quickly, then just eat up the event here (it's better than
+        // showing a janky screenshot).
+        // NOTE: Ideally, the screenshot mechanism would take the window transform into account
+        if (System.currentTimeMillis() - mLastToggleTime < sMinToggleDelay) {
+            return;
+        }
+
+        // If Recents is the front most activity, then we should just communicate with it directly
+        // to launch the first task or dismiss itself
+        SystemServicesProxy ssp = mSystemServicesProxy;
+        List<ActivityManager.RunningTaskInfo> tasks = ssp.getRunningTasks(1);
+        boolean isTopTaskHome = false;
+        if (!tasks.isEmpty()) {
+            ActivityManager.RunningTaskInfo topTask = tasks.get(0);
+            ComponentName topActivity = topTask.topActivity;
+
+            // Check if the front most activity is recents
+            if (topActivity.getPackageName().equals(sRecentsPackage) &&
+                    topActivity.getClassName().equals(sRecentsActivity)) {
+                // Notify Recents to toggle itself
+                try {
+                    Bundle data = new Bundle();
+                    Message msg = Message.obtain(null, MSG_TOGGLE_RECENTS, 0, 0);
+                    msg.setData(data);
+                    mService.send(msg);
+
+                    // Time this path
+                    Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                            Constants.DebugFlags.App.TimeRecentsStartupKey, "sendToggleRecents");
+                    Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsLaunchTask,
+                            Constants.DebugFlags.App.TimeRecentsLaunchKey, "sendToggleRecents");
+                } catch (RemoteException re) {
+                    re.printStackTrace();
+                }
+                mLastToggleTime = System.currentTimeMillis();
+                return;
+            }
+
+            // Determine whether the top task is currently home
+            isTopTaskHome = ssp.isInHomeStack(topTask.id);
+        }
+
+        // Otherwise, Recents is not the front-most activity and we should animate into it.  If
+        // the activity at the root of the top task stack is excluded from recents, or if that
+        // task stack is in the home stack, then we just do a simple transition.  Otherwise, we
+        // animate to the rects defined by the Recents service, which can differ depending on the
+        // number of items in the list.
+        List<ActivityManager.RecentTaskInfo> recentTasks =
+                ssp.getRecentTasks(4, UserHandle.CURRENT.getIdentifier());
+        boolean hasMultipleTasks = hasMultipleRecentsTask(recentTasks);
+        boolean isTaskExcludedFromRecents = isTopTaskExcludeFromRecents(recentTasks);
+        Rect taskRect = hasMultipleTasks ? mMultipleCountFirstTaskRect : mSingleCountFirstTaskRect;
+        if (!isTopTaskHome && !isTaskExcludedFromRecents &&
+                (taskRect != null) && (taskRect.width() > 0) && (taskRect.height() > 0)) {
+            // Loading from thumbnail
+            Bitmap thumbnail;
+            Bitmap firstThumbnail = loadFirstTaskThumbnail();
+            if (firstThumbnail != null) {// Create the thumbnail
+                thumbnail = Bitmap.createBitmap(taskRect.width(), taskRect.height(),
+                        Bitmap.Config.ARGB_8888);
+                int size = Math.min(firstThumbnail.getWidth(), firstThumbnail.getHeight());
+                Canvas c = new Canvas(thumbnail);
+                c.drawBitmap(firstThumbnail, new Rect(0, 0, size, size),
+                        new Rect(0, 0, taskRect.width(), taskRect.height()), null);
+                c.setBitmap(null);
+                // Recycle the old thumbnail
+                firstThumbnail.recycle();
+            } else {
+                // Load the thumbnail from the screenshot if can't get one from the system
+                WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
+                Display display = wm.getDefaultDisplay();
+                Bitmap screenshot = takeScreenshot(display);
+                Resources res = mContext.getResources();
+                int size = Math.min(screenshot.getWidth(), screenshot.getHeight());
+                int statusBarHeight = res.getDimensionPixelSize(
+                        com.android.internal.R.dimen.status_bar_height);
+                thumbnail = Bitmap.createBitmap(taskRect.width(), taskRect.height(),
+                        Bitmap.Config.ARGB_8888);
+                Canvas c = new Canvas(thumbnail);
+                c.drawBitmap(screenshot, new Rect(0, statusBarHeight, size, statusBarHeight + size),
+                        new Rect(0, 0, taskRect.width(), taskRect.height()), null);
+                c.setBitmap(null);
+                // Recycle the temporary screenshot
+                screenshot.recycle();
+            }
+
+            ActivityOptions opts = ActivityOptions.makeThumbnailScaleDownAnimation(mStatusBarView,
+                    thumbnail, taskRect.left, taskRect.top, null);
+            startAlternateRecentsActivity(opts, true);
+        } else {
+            ActivityOptions opts = ActivityOptions.makeCustomAnimation(mContext,
+                    R.anim.recents_from_launcher_enter,
+                    R.anim.recents_from_launcher_exit);
+            startAlternateRecentsActivity(opts, false);
+        }
+
+        Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                Constants.DebugFlags.App.TimeRecentsStartupKey, "startRecentsActivity");
+        mLastToggleTime = System.currentTimeMillis();
+    }
+
+    /** Starts the recents activity */
+    void startAlternateRecentsActivity(ActivityOptions opts, boolean animatingWithThumbnail) {
+        Intent intent = new Intent(sToggleRecentsAction);
+        intent.setClassName(sRecentsPackage, sRecentsActivity);
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+        intent.putExtra(EXTRA_ANIMATING_WITH_THUMBNAIL, animatingWithThumbnail);
+        if (opts != null) {
+            mContext.startActivityAsUser(intent, opts.toBundle(), new UserHandle(
+                    UserHandle.USER_CURRENT));
+        } else {
+            mContext.startActivityAsUser(intent, new UserHandle(UserHandle.USER_CURRENT));
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/BakedBezierInterpolator.java b/packages/SystemUI/src/com/android/systemui/recents/BakedBezierInterpolator.java
new file mode 100644
index 0000000..95ab8e8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/BakedBezierInterpolator.java
@@ -0,0 +1,64 @@
+package com.android.systemui.recents;
+
+import android.animation.TimeInterpolator;
+
+/**
+ * A pre-baked bezier-curved interpolator for quantum-paper transitions.
+ */
+public class BakedBezierInterpolator implements TimeInterpolator {
+    public static final BakedBezierInterpolator INSTANCE = new BakedBezierInterpolator();
+
+    /**
+     * Use the INSTANCE variable instead of instantiating.
+     */
+    private BakedBezierInterpolator() {
+        super();
+    }
+
+    /**
+     * Lookup table values.
+     * Generated using a Bezier curve from (0,0) to (1,1) with control points:
+     * P0 (0,0)
+     * P1 (0.4, 0)
+     * P2 (0.2, 1.0)
+     * P3 (1.0, 1.0)
+     *
+     * Values sampled with x at regular intervals between 0 and 1.
+     */
+    private static final float[] VALUES = new float[] {
+        0.0f, 0.0002f, 0.0009f, 0.0019f, 0.0036f, 0.0059f, 0.0086f, 0.0119f, 0.0157f, 0.0209f,
+        0.0257f, 0.0321f, 0.0392f, 0.0469f, 0.0566f, 0.0656f, 0.0768f, 0.0887f, 0.1033f, 0.1186f,
+        0.1349f, 0.1519f, 0.1696f, 0.1928f, 0.2121f, 0.237f, 0.2627f, 0.2892f, 0.3109f, 0.3386f,
+        0.3667f, 0.3952f, 0.4241f, 0.4474f, 0.4766f, 0.5f, 0.5234f, 0.5468f, 0.5701f, 0.5933f,
+        0.6134f, 0.6333f, 0.6531f, 0.6698f, 0.6891f, 0.7054f, 0.7214f, 0.7346f, 0.7502f, 0.763f,
+        0.7756f, 0.7879f, 0.8f, 0.8107f, 0.8212f, 0.8326f, 0.8415f, 0.8503f, 0.8588f, 0.8672f,
+        0.8754f, 0.8833f, 0.8911f, 0.8977f, 0.9041f, 0.9113f, 0.9165f, 0.9232f, 0.9281f, 0.9328f,
+        0.9382f, 0.9434f, 0.9476f, 0.9518f, 0.9557f, 0.9596f, 0.9632f, 0.9662f, 0.9695f, 0.9722f,
+        0.9753f, 0.9777f, 0.9805f, 0.9826f, 0.9847f, 0.9866f, 0.9884f, 0.9901f, 0.9917f, 0.9931f,
+        0.9944f, 0.9955f, 0.9964f, 0.9973f, 0.9981f, 0.9986f, 0.9992f, 0.9995f, 0.9998f, 1.0f, 1.0f
+    };
+
+    private static final float STEP_SIZE = 1.0f / (VALUES.length - 1);
+
+    @Override
+    public float getInterpolation(float input) {
+        if (input >= 1.0f) {
+            return 1.0f;
+        }
+
+        if (input <= 0f) {
+            return 0f;
+        }
+
+        int position = Math.min(
+                (int)(input * (VALUES.length - 1)),
+                VALUES.length - 2);
+
+        float quantized = position * STEP_SIZE;
+        float difference = input - quantized;
+        float weight = difference / STEP_SIZE;
+
+        return VALUES[position] + weight * (VALUES[position + 1] - VALUES[position]);
+    }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Console.java b/packages/SystemUI/src/com/android/systemui/recents/Console.java
new file mode 100644
index 0000000..4b75c99
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/Console.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+
+import android.content.ComponentCallbacks2;
+import android.content.Context;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.widget.Toast;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class Console {
+    // Timer
+    public static final Map<Object, Long> mTimeLogs = new HashMap<Object, Long>();
+
+    // Colors
+    public static final String AnsiReset = "\u001B[0m";
+    public static final String AnsiBlack = "\u001B[30m";
+    public static final String AnsiRed = "\u001B[31m";      // SystemUIHandshake
+    public static final String AnsiGreen = "\u001B[32m";    // MeasureAndLayout
+    public static final String AnsiYellow = "\u001B[33m";   // SynchronizeViewsWithModel
+    public static final String AnsiBlue = "\u001B[34m";     // TouchEvents
+    public static final String AnsiPurple = "\u001B[35m";   // Draw
+    public static final String AnsiCyan = "\u001B[36m";     // ClickEvents
+    public static final String AnsiWhite = "\u001B[37m";
+
+    /** Logs a key */
+    public static void log(String key) {
+        log(true, key, "", AnsiReset);
+    }
+
+    /** Logs a conditioned key */
+    public static void log(boolean condition, String key) {
+        if (condition) {
+            log(condition, key, "", AnsiReset);
+        }
+    }
+
+    /** Logs a key in a specific color */
+    public static void log(boolean condition, String key, Object data) {
+        if (condition) {
+            log(condition, key, data, AnsiReset);
+        }
+    }
+
+    /** Logs a key with data in a specific color */
+    public static void log(boolean condition, String key, Object data, String color) {
+        if (condition) {
+            System.out.println(color + key + AnsiReset + " " + data.toString());
+        }
+    }
+
+    /** Logs an error */
+    public static void logError(Context context, String msg) {
+        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
+        Log.e("Recents", msg);
+    }
+
+    /** Logs a raw error */
+    public static void logRawError(String msg, Exception e) {
+        Log.e("Recents", msg, e);
+    }
+
+    /** Logs a divider bar */
+    public static void logDivider(boolean condition) {
+        if (condition) {
+            System.out.println("==== [" + System.currentTimeMillis() +
+                    "] ============================================================");
+        }
+    }
+
+    /** Starts a time trace */
+    public static void logStartTracingTime(boolean condition, String key) {
+        if (condition) {
+            long curTime = System.currentTimeMillis();
+            mTimeLogs.put(key, curTime);
+            Console.log(condition, "[Recents|" + key + "]",
+                    "started @ " + curTime);
+        }
+    }
+
+    /** Continues a time trace */
+    public static void logTraceTime(boolean condition, String key, String desc) {
+        if (condition) {
+            long timeDiff = System.currentTimeMillis() - mTimeLogs.get(key);
+            Console.log(condition, "[Recents|" + key + "|" + desc + "]",
+                    "+" + timeDiff + "ms");
+        }
+    }
+
+    /** Logs a stack trace */
+    public static void logStackTrace() {
+        logStackTrace("", 99);
+    }
+
+    /** Logs a stack trace to a certain depth */
+    public static void logStackTrace(int depth) {
+        logStackTrace("", depth);
+    }
+
+    /** Logs a stack trace to a certain depth with a key */
+    public static void logStackTrace(String key, int depth) {
+        int offset = 0;
+        StackTraceElement[] callStack = Thread.currentThread().getStackTrace();
+        String tinyStackTrace = "";
+        // Skip over the known stack trace classes
+        for (int i = 0; i < callStack.length; i++) {
+            StackTraceElement el = callStack[i];
+            String className = el.getClassName();
+            if (className.indexOf("dalvik.system.VMStack") == -1 &&
+                className.indexOf("java.lang.Thread") == -1 &&
+                className.indexOf("recents.Console") == -1) {
+                break;
+            } else {
+                offset++;
+            }
+        }
+        // Build the pretty stack trace
+        int start = Math.min(offset + depth, callStack.length);
+        int end = offset;
+        String indent = "";
+        for (int i = start - 1; i >= end; i--) {
+            StackTraceElement el = callStack[i];
+            tinyStackTrace += indent + " -> " + el.getClassName() +
+                    "[" + el.getLineNumber() + "]." + el.getMethodName();
+            if (i > end) {
+                tinyStackTrace += "\n";
+                indent += "  ";
+            }
+        }
+        log(true, key, tinyStackTrace, AnsiRed);
+    }
+
+
+    /** Returns the stringified MotionEvent action */
+    public static String motionEventActionToString(int action) {
+        switch (action) {
+            case MotionEvent.ACTION_DOWN:
+                return "Down";
+            case MotionEvent.ACTION_UP:
+                return "Up";
+            case MotionEvent.ACTION_MOVE:
+                return "Move";
+            case MotionEvent.ACTION_CANCEL:
+                return "Cancel";
+            case MotionEvent.ACTION_POINTER_DOWN:
+                return "Pointer Down";
+            case MotionEvent.ACTION_POINTER_UP:
+                return "Pointer Up";
+            default:
+                return "" + action;
+        }
+    }
+
+    public static String trimMemoryLevelToString(int level) {
+        switch (level) {
+            case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN:
+                return "UI Hidden";
+            case ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE:
+                return "Running Moderate";
+            case ComponentCallbacks2.TRIM_MEMORY_BACKGROUND:
+                return "Background";
+            case ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW:
+                return "Running Low";
+            case ComponentCallbacks2.TRIM_MEMORY_MODERATE:
+                return "Moderate";
+            case ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL:
+                return "Critical";
+            case ComponentCallbacks2.TRIM_MEMORY_COMPLETE:
+                return "Complete";
+            default:
+                return "" + level;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Constants.java b/packages/SystemUI/src/com/android/systemui/recents/Constants.java
new file mode 100644
index 0000000..a996c1a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/Constants.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+/**
+ * Constants
+ * XXX: We are going to move almost all of these into a resource.
+ */
+public class Constants {
+    public static class DebugFlags {
+        // Enable this with any other debug flag to see more info
+        public static final boolean Verbose = false;
+
+        public static class App {
+            public static final boolean EnableTaskFiltering = false;
+            public static final boolean EnableTaskStackClipping = false;
+            public static final boolean EnableInfoPane = true;
+            public static final boolean EnableSearchButton = false;
+
+            // This disables the bitmap and icon caches
+            public static final boolean DisableBackgroundCache = false;
+            // For debugging, this enables us to create mock recents tasks
+            public static final boolean EnableSystemServicesProxy = false;
+            // For debugging, this defines the number of mock recents packages to create
+            public static final int SystemServicesProxyMockPackageCount = 3;
+            // For debugging, this defines the number of mock recents tasks to create
+            public static final int SystemServicesProxyMockTaskCount = 75;
+
+            // Timing certain paths
+            public static final String TimeRecentsStartupKey = "startup";
+            public static final String TimeRecentsLaunchKey = "launchTask";
+            public static final boolean TimeRecentsStartup = false;
+            public static final boolean TimeRecentsLaunchTask = false;
+
+            public static final boolean RecentsComponent = false;
+            public static final boolean TaskDataLoader = false;
+            public static final boolean SystemUIHandshake = false;
+            public static final boolean TimeSystemCalls = false;
+            public static final boolean Memory = false;
+        }
+
+        public static class UI {
+            public static final boolean Draw = false;
+            public static final boolean ClickEvents = false;
+            public static final boolean TouchEvents = false;
+            public static final boolean MeasureAndLayout = false;
+            public static final boolean HwLayers = false;
+        }
+
+        public static class TaskStack {
+            public static final boolean SynchronizeViewsWithModel = false;
+        }
+
+        public static class ViewPool {
+            public static final boolean PoolCallbacks = false;
+        }
+    }
+
+    public static class Values {
+        public static class Window {
+            // The dark background dim is set behind the empty recents view
+            public static final float DarkBackgroundDim = 0.5f;
+        }
+
+        public static class RecentsTaskLoader {
+            // XXX: This should be calculated on the first load
+            public static final int PreloadFirstTasksCount = 5;
+        }
+
+        public static class TaskStackView {
+            public static final int TaskStackOverscrollRange = 150;
+            public static final int FilterStartDelay = 25;
+
+            // The amount to inverse scale the movement if we are overscrolling
+            public static final float TouchOverscrollScaleFactor = 3f;
+
+            // The padding will be applied to the smallest dimension, and then applied to all sides
+            public static final float StackPaddingPct = 0.15f;
+            // The overlap height relative to the task height
+            public static final float StackOverlapPct = 0.65f;
+            // The height of the peek space relative to the stack height
+            public static final float StackPeekHeightPct = 0.1f;
+            // The min scale of the last card in the peek area
+            public static final float StackPeekMinScale = 0.9f;
+            // The number of cards we see in the peek space
+            public static final int StackPeekNumCards = 3;
+        }
+
+        public static class TaskView {
+            public static final boolean AnimateFrontTaskBarOnEnterRecents = true;
+            public static final boolean AnimateFrontTaskBarOnLeavingRecents = true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
new file mode 100644
index 0000000..71c45f2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -0,0 +1,268 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+import android.app.Activity;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.FrameLayout;
+import com.android.systemui.R;
+import com.android.systemui.recents.model.SpaceNode;
+import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.recents.views.RecentsView;
+
+import java.util.ArrayList;
+
+
+/* Activity */
+public class RecentsActivity extends Activity implements RecentsView.RecentsViewCallbacks {
+    FrameLayout mContainerView;
+    RecentsView mRecentsView;
+    View mEmptyView;
+
+    boolean mVisible;
+    boolean mTaskLaunched;
+
+    // Broadcast receiver to handle messages from our RecentsService
+    BroadcastReceiver mServiceBroadcastReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            Console.log(Constants.DebugFlags.App.SystemUIHandshake,
+                    "[RecentsActivity|serviceBroadcast]", action, Console.AnsiRed);
+            if (action.equals(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY)) {
+                // Try and unfilter and filtered stacks
+                if (!mRecentsView.unfilterFilteredStacks()) {
+                    // If there are no filtered stacks, dismiss recents and launch the first task
+                    dismissRecentsIfVisible();
+                }
+            }
+        }
+    };
+
+    // Broadcast receiver to handle messages from the system
+    BroadcastReceiver mScreenOffReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            finish();
+        }
+    };
+
+    /** Updates the set of recent tasks */
+    void updateRecentsTasks(Intent launchIntent) {
+        // Update the configuration based on the launch intent
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        config.launchedWithThumbnailAnimation = launchIntent.getBooleanExtra(
+                AlternateRecentsComponent.EXTRA_ANIMATING_WITH_THUMBNAIL, false);
+
+        RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
+        SpaceNode root = loader.reload(this, Constants.Values.RecentsTaskLoader.PreloadFirstTasksCount);
+        ArrayList<TaskStack> stacks = root.getStacks();
+        if (!stacks.isEmpty()) {
+            mRecentsView.setBSP(root);
+        }
+
+        // Add the default no-recents layout
+        if (stacks.size() == 1 && stacks.get(0).getTaskCount() == 0) {
+            mEmptyView.setVisibility(View.VISIBLE);
+
+            // Dim the background even more
+            WindowManager.LayoutParams wlp = getWindow().getAttributes();
+            wlp.dimAmount = Constants.Values.Window.DarkBackgroundDim;
+            getWindow().setAttributes(wlp);
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+        } else {
+            mEmptyView.setVisibility(View.GONE);
+
+            // Un-dim the background
+            WindowManager.LayoutParams wlp = getWindow().getAttributes();
+            wlp.dimAmount = 0f;
+            getWindow().setAttributes(wlp);
+            getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
+        }
+    }
+
+    /** Dismisses recents if we are already visible and the intent is to toggle the recents view */
+    boolean dismissRecentsIfVisible() {
+        if (mVisible) {
+            if (!mRecentsView.launchFirstTask()) {
+                finish();
+            }
+            return true;
+        }
+        return false;
+    }
+
+    /** Called with the activity is first created. */
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        Console.logDivider(Constants.DebugFlags.App.SystemUIHandshake);
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onCreate]",
+                getIntent().getAction() + " visible: " + mVisible, Console.AnsiRed);
+        Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                Constants.DebugFlags.App.TimeRecentsStartupKey, "onCreate");
+
+        // Initialize the loader and the configuration
+        RecentsTaskLoader.initialize(this);
+        RecentsConfiguration.reinitialize(this);
+
+        // Create the view hierarchy
+        mRecentsView = new RecentsView(this);
+        mRecentsView.setCallbacks(this);
+        mRecentsView.setLayoutParams(new FrameLayout.LayoutParams(
+                FrameLayout.LayoutParams.MATCH_PARENT,
+                FrameLayout.LayoutParams.MATCH_PARENT));
+
+        // Create the empty view
+        LayoutInflater inflater = LayoutInflater.from(this);
+        mEmptyView = inflater.inflate(R.layout.recents_empty, mContainerView, false);
+
+        mContainerView = new FrameLayout(this);
+        mContainerView.addView(mRecentsView);
+        mContainerView.addView(mEmptyView);
+        setContentView(mContainerView);
+
+        // Update the recent tasks
+        updateRecentsTasks(getIntent());
+    }
+
+    @Override
+    protected void onNewIntent(Intent intent) {
+        super.onNewIntent(intent);
+        // Reset the task launched flag if we encounter an onNewIntent() before onStop()
+        mTaskLaunched = false;
+
+        Console.logDivider(Constants.DebugFlags.App.SystemUIHandshake);
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onNewIntent]",
+                intent.getAction() + " visible: " + mVisible, Console.AnsiRed);
+        Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                Constants.DebugFlags.App.TimeRecentsStartupKey, "onNewIntent");
+
+        // Initialize the loader and the configuration
+        RecentsTaskLoader.initialize(this);
+        RecentsConfiguration.reinitialize(this);
+
+        // Update the recent tasks
+        updateRecentsTasks(intent);
+    }
+
+    @Override
+    protected void onStart() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onStart]", "",
+                Console.AnsiRed);
+        super.onStart();
+        mVisible = true;
+    }
+
+    @Override
+    protected void onResume() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onResume]", "",
+                Console.AnsiRed);
+        super.onResume();
+    }
+
+    @Override
+    public void onAttachedToWindow() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake,
+                "[RecentsActivity|onAttachedToWindow]", "",
+                Console.AnsiRed);
+        super.onAttachedToWindow();
+
+        // Register the broadcast receiver to handle messages from our service
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY);
+        registerReceiver(mServiceBroadcastReceiver, filter);
+
+        // Register the broadcast receiver to handle messages when the screen is turned off
+        filter = new IntentFilter();
+        filter.addAction(Intent.ACTION_SCREEN_OFF);
+        registerReceiver(mScreenOffReceiver, filter);
+    }
+
+    @Override
+    public void onDetachedFromWindow() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake,
+                "[RecentsActivity|onDetachedFromWindow]", "",
+                Console.AnsiRed);
+        super.onDetachedFromWindow();
+
+        // Unregister any broadcast receivers we have registered
+        unregisterReceiver(mServiceBroadcastReceiver);
+        unregisterReceiver(mScreenOffReceiver);
+    }
+
+    @Override
+    protected void onPause() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onPause]", "",
+                Console.AnsiRed);
+        super.onPause();
+    }
+
+    @Override
+    protected void onStop() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onStop]", "",
+                Console.AnsiRed);
+        super.onStop();
+
+        mVisible = false;
+        mTaskLaunched = false;
+    }
+
+    @Override
+    protected void onDestroy() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsActivity|onDestroy]", "",
+                Console.AnsiRed);
+        super.onDestroy();
+    }
+
+    @Override
+    public void onTrimMemory(int level) {
+        RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
+        if (loader != null) {
+            loader.onTrimMemory(level);
+        }
+    }
+
+    @Override
+    public void onBackPressed() {
+        boolean interceptedByInfoPanelClose = false;
+
+        // Try and return from any open info panes
+        if (Constants.DebugFlags.App.EnableInfoPane) {
+            interceptedByInfoPanelClose = mRecentsView.closeOpenInfoPanes();
+        }
+
+        // If we haven't been intercepted already, then unfilter any stacks
+        if (!interceptedByInfoPanelClose) {
+            if (!mRecentsView.unfilterFilteredStacks()) {
+                super.onBackPressed();
+            }
+        }
+    }
+
+    @Override
+    public void onTaskLaunching() {
+        mTaskLaunched = true;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
new file mode 100644
index 0000000..d54df13
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsConfiguration.java
@@ -0,0 +1,137 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+import android.content.Context;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.graphics.Rect;
+import android.util.DisplayMetrics;
+import android.util.TypedValue;
+import com.android.systemui.R;
+
+
+/** A static Recents configuration for the current context
+ * NOTE: We should not hold any references to a Context from a static instance */
+public class RecentsConfiguration {
+    static RecentsConfiguration sInstance;
+
+    DisplayMetrics mDisplayMetrics;
+
+    public Rect systemInsets = new Rect();
+    public Rect displayRect = new Rect();
+
+    public float animationPxMovementPerSecond;
+
+    public int filteringCurrentViewsMinAnimDuration;
+    public int filteringNewViewsMinAnimDuration;
+    public int taskBarEnterAnimDuration;
+    public int taskStackScrollDismissInfoPaneDistance;
+    public int taskStackMaxDim;
+    public int taskViewInfoPaneAnimDuration;
+    public int taskViewRoundedCornerRadiusPx;
+    public int searchBarSpaceHeightPx;
+    public int searchBarSpaceEdgeMarginsPx;
+
+    public boolean launchedWithThumbnailAnimation;
+
+    /** Private constructor */
+    private RecentsConfiguration() {}
+
+    /** Updates the configuration to the current context */
+    public static RecentsConfiguration reinitialize(Context context) {
+        if (sInstance == null) {
+            sInstance = new RecentsConfiguration();
+        }
+        sInstance.update(context);
+        return sInstance;
+    }
+
+    /** Returns the current recents configuration */
+    public static RecentsConfiguration getInstance() {
+        return sInstance;
+    }
+
+    /** Updates the state, given the specified context */
+    void update(Context context) {
+        Resources res = context.getResources();
+        DisplayMetrics dm = res.getDisplayMetrics();
+        mDisplayMetrics = dm;
+
+        boolean isLandscape = res.getConfiguration().orientation ==
+                Configuration.ORIENTATION_LANDSCAPE;
+        Console.log(Constants.DebugFlags.UI.MeasureAndLayout,
+                "[RecentsConfiguration|orientation]", isLandscape ? "Landscape" : "Portrait",
+                Console.AnsiGreen);
+
+        displayRect.set(0, 0, dm.widthPixels, dm.heightPixels);
+        animationPxMovementPerSecond =
+                res.getDimensionPixelSize(R.dimen.recents_animation_movement_in_dps_per_second);
+        filteringCurrentViewsMinAnimDuration =
+                res.getInteger(R.integer.recents_filter_animate_current_views_min_duration);
+        filteringNewViewsMinAnimDuration =
+                res.getInteger(R.integer.recents_filter_animate_new_views_min_duration);
+        taskBarEnterAnimDuration =
+                res.getInteger(R.integer.recents_animate_task_bar_enter_duration);
+        taskStackScrollDismissInfoPaneDistance = res.getDimensionPixelSize(
+                R.dimen.recents_task_stack_scroll_dismiss_info_pane_distance);
+        taskStackMaxDim = res.getInteger(R.integer.recents_max_task_stack_view_dim);
+        taskViewInfoPaneAnimDuration =
+                res.getInteger(R.integer.recents_animate_task_view_info_pane_duration);
+        taskViewRoundedCornerRadiusPx =
+                res.getDimensionPixelSize(R.dimen.recents_task_view_rounded_corners_radius);
+        searchBarSpaceHeightPx = res.getDimensionPixelSize(R.dimen.recents_search_bar_space_height);
+        searchBarSpaceEdgeMarginsPx =
+                res.getDimensionPixelSize(R.dimen.recents_search_bar_space_edge_margins);
+    }
+
+    /** Updates the system insets */
+    public void updateSystemInsets(Rect insets) {
+        systemInsets.set(insets);
+    }
+
+    /** Returns the search bar bounds in the specified orientation */
+    public void getSearchBarBounds(int width, int height,
+                                   Rect searchBarSpaceBounds, Rect searchBarBounds) {
+        // Return empty rects if search is not enabled
+        if (!Constants.DebugFlags.App.EnableSearchButton) {
+            searchBarSpaceBounds.set(0, 0, 0, 0);
+            searchBarBounds.set(0, 0, 0, 0);
+            return;
+        }
+
+        // Calculate the search bar bounds, and account for the system insets
+        int edgeMarginPx = searchBarSpaceEdgeMarginsPx;
+        int availableWidth = width - systemInsets.left - systemInsets.right;
+        searchBarSpaceBounds.set(0, 0, availableWidth, 2 * edgeMarginPx + searchBarSpaceHeightPx);
+
+        // Inset from the search bar space to get the search bar bounds
+        searchBarBounds.set(searchBarSpaceBounds);
+        searchBarBounds.inset(edgeMarginPx, edgeMarginPx);
+    }
+
+    /** Converts from DPs to PXs */
+    public int pxFromDp(float size) {
+        return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
+                size, mDisplayMetrics));
+    }
+    /** Converts from SPs to PXs */
+    public int pxFromSp(float size) {
+        return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
+                size, mDisplayMetrics));
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsService.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsService.java
new file mode 100644
index 0000000..36b761e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsService.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+import android.app.Service;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Rect;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.Messenger;
+import android.os.RemoteException;
+import com.android.systemui.recents.model.Task;
+import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.recents.views.TaskStackView;
+import com.android.systemui.recents.views.TaskViewTransform;
+
+import java.lang.ref.WeakReference;
+
+
+/** The message handler to process Recents SysUI messages */
+class SystemUIMessageHandler extends Handler {
+    WeakReference<Context> mContext;
+
+    SystemUIMessageHandler(Context context) {
+        // Keep a weak ref to the context instead of a strong ref
+        mContext = new WeakReference<Context>(context);
+    }
+
+    @Override
+    public void handleMessage(Message msg) {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake,
+                "[RecentsService|handleMessage]", msg);
+
+        Context context = mContext.get();
+        if (context == null) return;
+
+        if (msg.what == AlternateRecentsComponent.MSG_UPDATE_FOR_CONFIGURATION) {
+            RecentsTaskLoader.initialize(context);
+            RecentsConfiguration.reinitialize(context);
+
+            try {
+                Bundle data = msg.getData();
+                Rect windowRect = data.getParcelable(AlternateRecentsComponent.KEY_WINDOW_RECT);
+                Rect systemInsets = data.getParcelable(AlternateRecentsComponent.KEY_SYSTEM_INSETS);
+
+                // Create a dummy task stack & compute the rect for the thumbnail to animate to
+                TaskStack stack = new TaskStack(context);
+                TaskStackView tsv = new TaskStackView(context, stack);
+                Bundle replyData = new Bundle();
+                TaskViewTransform transform;
+
+                // Get the search bar bounds so that we can account for its height in the children
+                Rect searchBarSpaceBounds = new Rect();
+                Rect searchBarBounds = new Rect();
+                RecentsConfiguration config = RecentsConfiguration.getInstance();
+                config.getSearchBarBounds(windowRect.width(), windowRect.height(),
+                        searchBarSpaceBounds, searchBarBounds);
+
+                // Calculate the target task rect for when there is one task
+                // NOTE: Since the nav bar height is already accounted for in the windowRect, don't
+                // pass in a bottom inset
+                stack.addTask(new Task());
+                tsv.computeRects(windowRect.width(), windowRect.height() - systemInsets.top -
+                        systemInsets.bottom - searchBarSpaceBounds.height(), 0);
+                tsv.boundScroll();
+                transform = tsv.getStackTransform(0, tsv.getStackScroll());
+                transform.rect.offset(0, searchBarSpaceBounds.height());
+                replyData.putParcelable(AlternateRecentsComponent.KEY_SINGLE_TASK_STACK_RECT,
+                        new Rect(transform.rect));
+
+                // Also calculate the target task rect when there are multiple tasks
+                stack.addTask(new Task());
+                tsv.computeRects(windowRect.width(), windowRect.height() - systemInsets.top -
+                        systemInsets.bottom - searchBarSpaceBounds.height(), 0);
+                tsv.setStackScrollRaw(Integer.MAX_VALUE);
+                tsv.boundScroll();
+                transform = tsv.getStackTransform(1, tsv.getStackScroll());
+                transform.rect.offset(0, searchBarSpaceBounds.height());
+                replyData.putParcelable(AlternateRecentsComponent.KEY_MULTIPLE_TASK_STACK_RECT,
+                        new Rect(transform.rect));
+
+                data.putParcelable(AlternateRecentsComponent.KEY_CONFIGURATION_DATA, replyData);
+                Message reply = Message.obtain(null,
+                        AlternateRecentsComponent.MSG_UPDATE_FOR_CONFIGURATION, 0, 0);
+                reply.setData(data);
+                msg.replyTo.send(reply);
+            } catch (RemoteException re) {
+                re.printStackTrace();
+            }
+        } else if (msg.what == AlternateRecentsComponent.MSG_CLOSE_RECENTS) {
+            // Do nothing
+        } else if (msg.what == AlternateRecentsComponent.MSG_TOGGLE_RECENTS) {
+            // Send a broadcast to toggle recents
+            Intent intent = new Intent(RecentsService.ACTION_TOGGLE_RECENTS_ACTIVITY);
+            intent.setPackage(context.getPackageName());
+            context.sendBroadcast(intent);
+
+            // Time this path
+            Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                    Constants.DebugFlags.App.TimeRecentsStartupKey, "receivedToggleRecents");
+            Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsLaunchTask,
+                    Constants.DebugFlags.App.TimeRecentsLaunchKey, "receivedToggleRecents");
+        }
+    }
+}
+
+/* Service */
+public class RecentsService extends Service {
+    final static String ACTION_TOGGLE_RECENTS_ACTIVITY = "action_toggle_recents_activity";
+
+    Messenger mSystemUIMessenger = new Messenger(new SystemUIMessageHandler(this));
+
+    @Override
+    public void onCreate() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsService|onCreate]");
+        super.onCreate();
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsService|onBind]");
+        return mSystemUIMessenger.getBinder();
+    }
+
+    @Override
+    public boolean onUnbind(Intent intent) {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsService|onUnbind]");
+        return super.onUnbind(intent);
+    }
+
+    @Override
+    public void onRebind(Intent intent) {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsService|onRebind]");
+        super.onRebind(intent);
+    }
+
+    @Override
+    public void onDestroy() {
+        Console.log(Constants.DebugFlags.App.SystemUIHandshake, "[RecentsService|onDestroy]");
+        super.onDestroy();
+    }
+
+    @Override
+    public void onTrimMemory(int level) {
+        RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
+        if (loader != null) {
+            loader.onTrimMemory(level);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java
new file mode 100644
index 0000000..52bba4a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsTaskLoader.java
@@ -0,0 +1,593 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+import android.app.ActivityManager;
+import android.content.ComponentCallbacks2;
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.UserHandle;
+import android.util.LruCache;
+import android.util.Pair;
+import com.android.systemui.recents.model.SpaceNode;
+import com.android.systemui.recents.model.Task;
+import com.android.systemui.recents.model.TaskStack;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+
+/** A bitmap load queue */
+class TaskResourceLoadQueue {
+    ConcurrentLinkedQueue<Task> mQueue = new ConcurrentLinkedQueue<Task>();
+    ConcurrentHashMap<Task.TaskKey, Boolean> mForceLoadSet =
+            new ConcurrentHashMap<Task.TaskKey, Boolean>();
+
+    static final Boolean sFalse = new Boolean(false);
+
+    /** Adds a new task to the load queue */
+    void addTask(Task t, boolean forceLoad) {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "  [TaskResourceLoadQueue|addTask]");
+        if (!mQueue.contains(t)) {
+            mQueue.add(t);
+        }
+        if (forceLoad) {
+            mForceLoadSet.put(t.key, new Boolean(true));
+        }
+        synchronized(this) {
+            notifyAll();
+        }
+    }
+
+    /**
+     * Retrieves the next task from the load queue, as well as whether we want that task to be
+     * force reloaded.
+     */
+    Pair<Task, Boolean> nextTask() {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "  [TaskResourceLoadQueue|nextTask]");
+        Task task = mQueue.poll();
+        Boolean forceLoadTask = null;
+        if (task != null) {
+            forceLoadTask = mForceLoadSet.remove(task.key);
+        }
+        if (forceLoadTask == null) {
+            forceLoadTask = sFalse;
+        }
+        return new Pair<Task, Boolean>(task, forceLoadTask);
+    }
+
+    /** Removes a task from the load queue */
+    void removeTask(Task t) {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "  [TaskResourceLoadQueue|removeTask]");
+        mQueue.remove(t);
+        mForceLoadSet.remove(t.key);
+    }
+
+    /** Clears all the tasks from the load queue */
+    void clearTasks() {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "  [TaskResourceLoadQueue|clearTasks]");
+        mQueue.clear();
+        mForceLoadSet.clear();
+    }
+
+    /** Returns whether the load queue is empty */
+    boolean isEmpty() {
+        return mQueue.isEmpty();
+    }
+}
+
+/* Task resource loader */
+class TaskResourceLoader implements Runnable {
+    Context mContext;
+    HandlerThread mLoadThread;
+    Handler mLoadThreadHandler;
+    Handler mMainThreadHandler;
+
+    SystemServicesProxy mSystemServicesProxy;
+    TaskResourceLoadQueue mLoadQueue;
+    DrawableLruCache mApplicationIconCache;
+    BitmapLruCache mThumbnailCache;
+
+    boolean mCancelled;
+    boolean mWaitingOnLoadQueue;
+
+    /** Constructor, creates a new loading thread that loads task resources in the background */
+    public TaskResourceLoader(TaskResourceLoadQueue loadQueue,
+                              DrawableLruCache applicationIconCache,
+                              BitmapLruCache thumbnailCache) {
+        mLoadQueue = loadQueue;
+        mApplicationIconCache = applicationIconCache;
+        mThumbnailCache = thumbnailCache;
+        mMainThreadHandler = new Handler();
+        mLoadThread = new HandlerThread("Recents-TaskResourceLoader");
+        mLoadThread.setPriority(Thread.NORM_PRIORITY - 1);
+        mLoadThread.start();
+        mLoadThreadHandler = new Handler(mLoadThread.getLooper());
+        mLoadThreadHandler.post(this);
+    }
+
+    /** Restarts the loader thread */
+    void start(Context context) {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "[TaskResourceLoader|start]");
+        mContext = context;
+        mCancelled = false;
+        mSystemServicesProxy = new SystemServicesProxy(context);
+        // Notify the load thread to start loading
+        synchronized(mLoadThread) {
+            mLoadThread.notifyAll();
+        }
+    }
+
+    /** Requests the loader thread to stop after the current iteration */
+    void stop() {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "[TaskResourceLoader|stop]");
+        // Mark as cancelled for the thread to pick up
+        mCancelled = true;
+        mSystemServicesProxy = null;
+        // If we are waiting for the load queue for more tasks, then we can just reset the
+        // Context now, since nothing is using it
+        if (mWaitingOnLoadQueue) {
+            mContext = null;
+        }
+    }
+
+    @Override
+    public void run() {
+        while (true) {
+            Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                    "[TaskResourceLoader|run|" + Thread.currentThread().getId() + "]");
+            if (mCancelled) {
+                Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                        "[TaskResourceLoader|cancel|" + Thread.currentThread().getId() + "]");
+                // We have to unset the context here, since the background thread may be using it
+                // when we call stop()
+                mContext = null;
+                // If we are cancelled, then wait until we are started again
+                synchronized(mLoadThread) {
+                    try {
+                        Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                                "[TaskResourceLoader|waitOnLoadThreadCancelled]");
+                        mLoadThread.wait();
+                    } catch (InterruptedException ie) {
+                        ie.printStackTrace();
+                    }
+                }
+            } else {
+                SystemServicesProxy ssp = mSystemServicesProxy;
+
+                // Load the next item from the queue
+                Pair<Task, Boolean> nextTaskData = mLoadQueue.nextTask();
+                final Task t = nextTaskData.first;
+                final boolean forceLoadTask = nextTaskData.second;
+                if (t != null) {
+                    Drawable loadIcon = mApplicationIconCache.get(t.key);
+                    Bitmap loadThumbnail = mThumbnailCache.get(t.key);
+                    Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                            "  [TaskResourceLoader|load]",
+                            t + " icon: " + loadIcon + " thumbnail: " + loadThumbnail +
+                                    " forceLoad: " + forceLoadTask);
+                    // Load the application icon
+                    if (loadIcon == null || forceLoadTask) {
+                        ActivityInfo info = ssp.getActivityInfo(t.key.baseIntent.getComponent(),
+                                t.userId);
+                        Drawable icon = ssp.getActivityIcon(info, t.userId);
+                        if (!mCancelled) {
+                            if (icon != null) {
+                                Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                                        "    [TaskResourceLoader|loadIcon]",
+                                        icon);
+                                loadIcon = icon;
+                                mApplicationIconCache.put(t.key, icon);
+                            }
+                        }
+                    }
+                    // Load the thumbnail
+                    if (loadThumbnail == null || forceLoadTask) {
+                        Bitmap thumbnail = ssp.getTaskThumbnail(t.key.id);
+                        if (!mCancelled) {
+                            if (thumbnail != null) {
+                                Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                                        "    [TaskResourceLoader|loadThumbnail]",
+                                        thumbnail);
+                                thumbnail.setHasAlpha(false);
+                                loadThumbnail = thumbnail;
+                                mThumbnailCache.put(t.key, thumbnail);
+                            } else {
+                                Console.logError(mContext,
+                                        "Failed to load task top thumbnail for: " +
+                                                t.key.baseIntent.getComponent().getPackageName());
+                            }
+                        }
+                    }
+                    if (!mCancelled) {
+                        // Notify that the task data has changed
+                        final Drawable newIcon = loadIcon;
+                        final Bitmap newThumbnail = loadThumbnail;
+                        mMainThreadHandler.post(new Runnable() {
+                            @Override
+                            public void run() {
+                                t.notifyTaskDataLoaded(newThumbnail, newIcon, forceLoadTask);
+                            }
+                        });
+                    }
+                }
+
+                // If there are no other items in the list, then just wait until something is added
+                if (!mCancelled && mLoadQueue.isEmpty()) {
+                    synchronized(mLoadQueue) {
+                        try {
+                            Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                                    "[TaskResourceLoader|waitOnLoadQueue]");
+                            mWaitingOnLoadQueue = true;
+                            mLoadQueue.wait();
+                            mWaitingOnLoadQueue = false;
+                        } catch (InterruptedException ie) {
+                            ie.printStackTrace();
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
+
+/**
+ * The drawable cache.  By using the Task's key, we can prevent holding onto a reference to the Task
+ * resource data, while keeping the cache data in memory where necessary.
+ */
+class DrawableLruCache extends LruCache<Task.TaskKey, Drawable> {
+    public DrawableLruCache(int cacheSize) {
+        super(cacheSize);
+    }
+
+    @Override
+    protected int sizeOf(Task.TaskKey t, Drawable d) {
+        // The cache size will be measured in kilobytes rather than number of items
+        // NOTE: this isn't actually correct, as the icon may be smaller
+        int maxBytes = (d.getIntrinsicWidth() * d.getIntrinsicHeight() * 4);
+        return maxBytes / 1024;
+    }
+}
+
+/**
+ * The bitmap cache.  By using the Task's key, we can prevent holding onto a reference to the Task
+ * resource data, while keeping the cache data in memory where necessary.
+ */
+class BitmapLruCache extends LruCache<Task.TaskKey, Bitmap> {
+    public BitmapLruCache(int cacheSize) {
+        super(cacheSize);
+    }
+
+    @Override
+    protected int sizeOf(Task.TaskKey t, Bitmap bitmap) {
+        // The cache size will be measured in kilobytes rather than number of items
+        return bitmap.getAllocationByteCount() / 1024;
+    }
+}
+
+/* Recents task loader
+ * NOTE: We should not hold any references to a Context from a static instance */
+public class RecentsTaskLoader {
+    static RecentsTaskLoader sInstance;
+
+    SystemServicesProxy mSystemServicesProxy;
+    DrawableLruCache mApplicationIconCache;
+    BitmapLruCache mThumbnailCache;
+    TaskResourceLoadQueue mLoadQueue;
+    TaskResourceLoader mLoader;
+
+    int mMaxThumbnailCacheSize;
+    int mMaxIconCacheSize;
+
+    BitmapDrawable mDefaultApplicationIcon;
+    Bitmap mDefaultThumbnail;
+
+    /** Private Constructor */
+    private RecentsTaskLoader(Context context) {
+        // Calculate the cache sizes, we just use a reasonable number here similar to those
+        // suggested in the Android docs, 1/8th for the thumbnail cache and 1/32 of the max memory
+        // for icons.
+        int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
+        mMaxThumbnailCacheSize = maxMemory / 8;
+        mMaxIconCacheSize = mMaxThumbnailCacheSize / 4;
+        int iconCacheSize = Constants.DebugFlags.App.DisableBackgroundCache ? 1 :
+                mMaxIconCacheSize;
+        int thumbnailCacheSize = Constants.DebugFlags.App.DisableBackgroundCache ? 1 :
+                mMaxThumbnailCacheSize;
+
+        Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                "[RecentsTaskLoader|init]", "thumbnailCache: " + thumbnailCacheSize +
+                " iconCache: " + iconCacheSize);
+
+        // Initialize the proxy, cache and loaders
+        mSystemServicesProxy = new SystemServicesProxy(context);
+        mLoadQueue = new TaskResourceLoadQueue();
+        mApplicationIconCache = new DrawableLruCache(iconCacheSize);
+        mThumbnailCache = new BitmapLruCache(thumbnailCacheSize);
+        mLoader = new TaskResourceLoader(mLoadQueue, mApplicationIconCache, mThumbnailCache);
+
+        // Create the default assets
+        Bitmap icon = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
+        icon.eraseColor(0x00000000);
+        mDefaultThumbnail = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
+        mDefaultThumbnail.eraseColor(0x00000000);
+        mDefaultApplicationIcon = new BitmapDrawable(context.getResources(), icon);
+        Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                "[RecentsTaskLoader|defaultBitmaps]",
+                "icon: " + mDefaultApplicationIcon + " thumbnail: " + mDefaultThumbnail, Console.AnsiRed);
+    }
+
+    /** Initializes the recents task loader */
+    public static RecentsTaskLoader initialize(Context context) {
+        if (sInstance == null) {
+            sInstance = new RecentsTaskLoader(context);
+        }
+        return sInstance;
+    }
+
+    /** Returns the current recents task loader */
+    public static RecentsTaskLoader getInstance() {
+        return sInstance;
+    }
+
+    /** Returns the system services proxy */
+    public SystemServicesProxy getSystemServicesProxy() {
+        return mSystemServicesProxy;
+    }
+
+    private List<ActivityManager.RecentTaskInfo> getRecentTasks(Context context) {
+        long t1 = System.currentTimeMillis();
+
+        SystemServicesProxy ssp = mSystemServicesProxy;
+        List<ActivityManager.RecentTaskInfo> tasks =
+                ssp.getRecentTasks(25, UserHandle.CURRENT.getIdentifier());
+        Collections.reverse(tasks);
+        Console.log(Constants.DebugFlags.App.TimeSystemCalls,
+                "[RecentsTaskLoader|getRecentTasks]",
+                "" + (System.currentTimeMillis() - t1) + "ms");
+        Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                "[RecentsTaskLoader|tasks]", "" + tasks.size());
+
+        // Remove home/recents tasks
+        Iterator<ActivityManager.RecentTaskInfo> iter = tasks.iterator();
+        while (iter.hasNext()) {
+            ActivityManager.RecentTaskInfo t = iter.next();
+
+            // Skip tasks in the home stack
+            if (ssp.isInHomeStack(t.persistentId)) {
+                iter.remove();
+                continue;
+            }
+            // Skip tasks from this Recents package
+            if (t.baseIntent.getComponent().getPackageName().equals(context.getPackageName())) {
+                iter.remove();
+                continue;
+            }
+        }
+
+        return tasks;
+    }
+
+    /** Reload the set of recent tasks */
+    SpaceNode reload(Context context, int preloadCount) {
+        long t1 = System.currentTimeMillis();
+
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "[RecentsTaskLoader|reload]");
+        Resources res = context.getResources();
+        ArrayList<Task> tasksToForceLoad = new ArrayList<Task>();
+        TaskStack stack = new TaskStack(context);
+        SpaceNode root = new SpaceNode(context);
+        root.setStack(stack);
+
+        // Get the recent tasks
+        SystemServicesProxy ssp = mSystemServicesProxy;
+        List<ActivityManager.RecentTaskInfo> tasks = getRecentTasks(context);
+
+        // Add each task to the task stack
+        t1 = System.currentTimeMillis();
+        int taskCount = tasks.size();
+        for (int i = 0; i < taskCount; i++) {
+            ActivityManager.RecentTaskInfo t = tasks.get(i);
+            ActivityInfo info = ssp.getActivityInfo(t.baseIntent.getComponent(), t.userId);
+            if (info == null) continue;
+
+            String activityLabel = (t.activityLabel == null ? ssp.getActivityLabel(info) :
+                    t.activityLabel.toString());
+            BitmapDrawable activityIcon = null;
+            if (t.activityIcon != null) {
+                activityIcon = new BitmapDrawable(res, t.activityIcon);
+            }
+            boolean isForemostTask = (i == (taskCount - 1));
+
+            // Create a new task
+            Task task = new Task(t.persistentId, (t.id > -1), t.baseIntent, activityLabel,
+                    activityIcon, t.userId);
+
+            // Preload the specified number of apps
+            if (i >= (taskCount - preloadCount)) {
+                Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                        "[RecentsTaskLoader|preloadTask]",
+                        "i: " + i + " task: " + t.baseIntent.getComponent().getPackageName());
+
+                // Load the icon (if possible and not the foremost task, from the cache)
+                if (!isForemostTask) {
+                    task.applicationIcon = mApplicationIconCache.get(task.key);
+                    if (task.applicationIcon != null) {
+                        // Even though we get things from the cache, we should update them
+                        // if they've changed in the bg
+                        tasksToForceLoad.add(task);
+                    }
+                }
+                if (task.applicationIcon == null) {
+                    task.applicationIcon = ssp.getActivityIcon(info, task.userId);
+                    if (task.applicationIcon != null) {
+                        mApplicationIconCache.put(task.key, task.applicationIcon);
+                    } else {
+                        task.applicationIcon = mDefaultApplicationIcon;
+                    }
+                }
+
+                // Load the thumbnail (if possible and not the foremost task, from the cache)
+                if (!isForemostTask) {
+                    task.thumbnail = mThumbnailCache.get(task.key);
+                    if (task.thumbnail != null) {
+                        // Even though we get things from the cache, we should update them if
+                        // they've changed in the bg
+                        tasksToForceLoad.add(task);
+                    }
+                }
+                if (task.thumbnail == null) {
+                    Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                            "[RecentsTaskLoader|loadingTaskThumbnail]");
+                    task.thumbnail = ssp.getTaskThumbnail(task.key.id);
+                    if (task.thumbnail != null) {
+                        task.thumbnail.setHasAlpha(false);
+                        mThumbnailCache.put(task.key, task.thumbnail);
+                    } else {
+                        task.thumbnail = mDefaultThumbnail;
+                    }
+                }
+            }
+
+            // Add the task to the stack
+            Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                "  [RecentsTaskLoader|task]", t.baseIntent.getComponent().getPackageName());
+            stack.addTask(task);
+        }
+        Console.log(Constants.DebugFlags.App.TimeSystemCalls,
+                "[RecentsTaskLoader|getAllTaskTopThumbnail]",
+                "" + (System.currentTimeMillis() - t1) + "ms");
+
+        /*
+        // Get all the stacks
+        t1 = System.currentTimeMillis();
+        List<ActivityManager.StackInfo> stackInfos = ams.getAllStackInfos();
+        Console.log(Constants.DebugFlags.App.TimeSystemCalls, "[RecentsTaskLoader|getAllStackInfos]", "" + (System.currentTimeMillis() - t1) + "ms");
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "[RecentsTaskLoader|stacks]", "" + tasks.size());
+        for (ActivityManager.StackInfo s : stackInfos) {
+            Console.log(Constants.DebugFlags.App.TaskDataLoader, "  [RecentsTaskLoader|stack]", s.toString());
+            if (stacks.containsKey(s.stackId)) {
+                stacks.get(s.stackId).setRect(s.bounds);
+            }
+        }
+        */
+
+        // Start the task loader
+        mLoader.start(context);
+
+        // Add all the tasks that we are force/re-loading
+        for (Task t : tasksToForceLoad) {
+            mLoadQueue.addTask(t, true);
+        }
+
+        return root;
+    }
+
+    /** Acquires the task resource data from the pool. */
+    public void loadTaskData(Task t) {
+        Drawable applicationIcon = mApplicationIconCache.get(t.key);
+        Bitmap thumbnail = mThumbnailCache.get(t.key);
+
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "[RecentsTaskLoader|loadTask]",
+                t + " applicationIcon: " + applicationIcon + " thumbnail: " + thumbnail +
+                        " thumbnailCacheSize: " + mThumbnailCache.size());
+
+        boolean requiresLoad = false;
+        if (applicationIcon == null) {
+            applicationIcon = mDefaultApplicationIcon;
+            requiresLoad = true;
+        }
+        if (thumbnail == null) {
+            thumbnail = mDefaultThumbnail;
+            requiresLoad = true;
+        }
+        if (requiresLoad) {
+            mLoadQueue.addTask(t, false);
+        }
+        t.notifyTaskDataLoaded(thumbnail, applicationIcon, false);
+    }
+
+    /** Releases the task resource data back into the pool. */
+    public void unloadTaskData(Task t) {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                "[RecentsTaskLoader|unloadTask]", t +
+                " thumbnailCacheSize: " + mThumbnailCache.size());
+
+        mLoadQueue.removeTask(t);
+        t.notifyTaskDataUnloaded(mDefaultThumbnail, mDefaultApplicationIcon);
+    }
+
+    /** Completely removes the resource data from the pool. */
+    public void deleteTaskData(Task t) {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader,
+                "[RecentsTaskLoader|deleteTask]", t);
+
+        mLoadQueue.removeTask(t);
+        mThumbnailCache.remove(t.key);
+        mApplicationIconCache.remove(t.key);
+        t.notifyTaskDataUnloaded(mDefaultThumbnail, mDefaultApplicationIcon);
+    }
+
+    /** Stops the task loader and clears all pending tasks */
+    void stopLoader() {
+        Console.log(Constants.DebugFlags.App.TaskDataLoader, "[RecentsTaskLoader|stopLoader]");
+        mLoader.stop();
+        mLoadQueue.clearTasks();
+    }
+
+    void onTrimMemory(int level) {
+        Console.log(Constants.DebugFlags.App.Memory, "[RecentsTaskLoader|onTrimMemory]",
+                Console.trimMemoryLevelToString(level));
+
+        switch (level) {
+            case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN:
+                // Stop the loader immediately when the UI is no longer visible
+                stopLoader();
+                break;
+            case ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE:
+            case ComponentCallbacks2.TRIM_MEMORY_BACKGROUND:
+                // We are leaving recents, so trim the data a bit
+                mThumbnailCache.trimToSize(mMaxThumbnailCacheSize / 2);
+                mApplicationIconCache.trimToSize(mMaxIconCacheSize / 2);
+                break;
+            case ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW:
+            case ComponentCallbacks2.TRIM_MEMORY_MODERATE:
+                // We are going to be low on memory
+                mThumbnailCache.trimToSize(mMaxThumbnailCacheSize / 4);
+                mApplicationIconCache.trimToSize(mMaxIconCacheSize / 4);
+                break;
+            case ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL:
+            case ComponentCallbacks2.TRIM_MEMORY_COMPLETE:
+                // We are low on memory, so release everything
+                mThumbnailCache.evictAll();
+                mApplicationIconCache.evictAll();
+                break;
+            default:
+                break;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java
new file mode 100644
index 0000000..33ac0a8
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/SystemServicesProxy.java
@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+import android.app.ActivityManager;
+import android.app.ActivityOptions;
+import android.app.AppGlobals;
+import android.app.SearchManager;
+import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.graphics.Bitmap;
+import android.graphics.Rect;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.text.TextUtils;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Acts as a shim around the real system services that we need to access data from, and provides
+ * a point of injection when testing UI.
+ */
+public class SystemServicesProxy {
+    ActivityManager mAm;
+    PackageManager mPm;
+    IPackageManager mIpm;
+    UserManager mUm;
+    SearchManager mSm;
+    String mPackage;
+
+    Bitmap mDummyIcon;
+
+    /** Private constructor */
+    public SystemServicesProxy(Context context) {
+        mAm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+        mPm = context.getPackageManager();
+        mUm = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        mIpm = AppGlobals.getPackageManager();
+        mSm = (SearchManager) context.getSystemService(Context.SEARCH_SERVICE);
+        mPackage = context.getPackageName();
+
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
+            // Create a dummy icon
+            mDummyIcon = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
+            mDummyIcon.eraseColor(0xFF999999);
+        }
+    }
+
+    /** Returns a list of the recents tasks */
+    public List<ActivityManager.RecentTaskInfo> getRecentTasks(int numTasks, int userId) {
+        if (mAm == null) return null;
+
+        // If we are mocking, then create some recent tasks
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
+            ArrayList<ActivityManager.RecentTaskInfo> tasks =
+                    new ArrayList<ActivityManager.RecentTaskInfo>();
+            int count = Math.min(numTasks, Constants.DebugFlags.App.SystemServicesProxyMockTaskCount);
+            for (int i = 0; i < count; i++) {
+                // Create a dummy component name
+                int packageIndex = i % Constants.DebugFlags.App.SystemServicesProxyMockPackageCount;
+                ComponentName cn = new ComponentName("com.android.test" + packageIndex,
+                        "com.android.test" + i + ".Activity");
+                // Create the recent task info
+                ActivityManager.RecentTaskInfo rti = new ActivityManager.RecentTaskInfo();
+                rti.id = rti.persistentId = i;
+                rti.baseIntent = new Intent();
+                rti.baseIntent.setComponent(cn);
+                rti.description = rti.activityLabel = "" + i + " - " +
+                        Long.toString(Math.abs(new Random().nextLong()), 36);
+                if (i % 2 == 0) {
+                    rti.activityIcon = Bitmap.createBitmap(mDummyIcon);
+                }
+                tasks.add(rti);
+            }
+            return tasks;
+        }
+
+        return mAm.getRecentTasksForUser(numTasks,
+                ActivityManager.RECENT_IGNORE_UNAVAILABLE |
+                ActivityManager.RECENT_INCLUDE_PROFILES, userId);
+    }
+
+    /** Returns a list of the running tasks */
+    public List<ActivityManager.RunningTaskInfo> getRunningTasks(int numTasks) {
+        if (mAm == null) return null;
+        return mAm.getRunningTasks(numTasks);
+    }
+
+    /** Returns whether the specified task is in the home stack */
+    public boolean isInHomeStack(int taskId) {
+        if (mAm == null) return false;
+
+        // If we are mocking, then just return false
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
+            return false;
+        }
+
+        return mAm.isInHomeStack(taskId);
+    }
+
+    /** Returns the top task thumbnail for the given task id */
+    public Bitmap getTaskThumbnail(int taskId) {
+        if (mAm == null) return null;
+
+        // If we are mocking, then just return a dummy thumbnail
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
+            Bitmap thumbnail = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
+            thumbnail.eraseColor(0xff333333);
+            return thumbnail;
+        }
+
+        return mAm.getTaskTopThumbnail(taskId);
+    }
+
+    /** Moves a task to the front with the specified activity options */
+    public void moveTaskToFront(int taskId, ActivityOptions opts) {
+        if (mAm == null) return;
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) return;
+
+        if (opts != null) {
+            mAm.moveTaskToFront(taskId, ActivityManager.MOVE_TASK_WITH_HOME,
+                    opts.toBundle());
+        } else {
+            mAm.moveTaskToFront(taskId, ActivityManager.MOVE_TASK_WITH_HOME);
+        }
+    }
+
+    /** Removes the task and kills the process */
+    public void removeTask(int taskId) {
+        if (mAm == null) return;
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) return;
+
+        mAm.removeTask(taskId, ActivityManager.REMOVE_TASK_KILL_PROCESS);
+    }
+
+    /**
+     * Returns the activity info for a given component name.
+     * 
+     * @param ComponentName The component name of the activity.
+     * @param userId The userId of the user that this is for.
+     */
+    public ActivityInfo getActivityInfo(ComponentName cn, int userId) {
+        if (mIpm == null) return null;
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) return null;
+
+        try {
+            return mIpm.getActivityInfo(cn, PackageManager.GET_META_DATA, userId);
+        } catch (RemoteException e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /** Returns the activity label */
+    public String getActivityLabel(ActivityInfo info) {
+        if (mPm == null) return null;
+
+        // If we are mocking, then return a mock label
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
+            return "Recent Task";
+        }
+
+        return info.loadLabel(mPm).toString();
+    }
+
+    /**
+     * Returns the activity icon for the ActivityInfo for a user, badging if
+     * necessary.
+     */
+    public Drawable getActivityIcon(ActivityInfo info, int userId) {
+        if (mPm == null || mUm == null) return null;
+
+        // If we are mocking, then return a mock label
+        if (Constants.DebugFlags.App.EnableSystemServicesProxy) {
+            return new ColorDrawable(0xFF666666);
+        }
+
+        Drawable icon = info.loadIcon(mPm);
+        if (userId != UserHandle.myUserId()) {
+            icon = mUm.getBadgedDrawableForUser(icon, new UserHandle(userId));
+        }
+        return icon;
+    }
+
+
+    /**
+     * Composes an intent to launch the global search activity.
+     */
+    public Intent getGlobalSearchIntent(Rect sourceBounds) {
+        if (mSm == null) return null;
+
+        // Try and get the global search activity
+        ComponentName globalSearchActivity = mSm.getGlobalSearchActivity();
+        if (globalSearchActivity == null) return null;
+
+        // Bundle the source of the search
+        Bundle appSearchData = new Bundle();
+        appSearchData.putString("source", mPackage);
+
+        // Compose the intent and Start the search activity
+        Intent intent = new Intent(SearchManager.INTENT_ACTION_GLOBAL_SEARCH);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        intent.setComponent(globalSearchActivity);
+        intent.putExtra(SearchManager.APP_DATA, appSearchData);
+        intent.setSourceBounds(sourceBounds);
+        return intent;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Utilities.java b/packages/SystemUI/src/com/android/systemui/recents/Utilities.java
new file mode 100644
index 0000000..4a1b3b2
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/Utilities.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents;
+
+import android.graphics.Rect;
+
+/* Common code */
+public class Utilities {
+    /**
+     * Calculates a consistent animation duration (ms) for all animations depending on the movement
+     * of the object being animated.
+     */
+    public static int calculateTranslationAnimationDuration(int distancePx) {
+        return calculateTranslationAnimationDuration(distancePx, 100);
+    }
+    public static int calculateTranslationAnimationDuration(int distancePx, int minDuration) {
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        return Math.max(minDuration, (int) (1000f /* ms/s */ *
+                (Math.abs(distancePx) / config.animationPxMovementPerSecond)));
+    }
+
+    /** Scales a rect about its centroid */
+    public static void scaleRectAboutCenter(Rect r, float scale) {
+        if (scale != 1.0f) {
+            int cx = r.centerX();
+            int cy = r.centerY();
+            r.offset(-cx, -cy);
+            r.left = (int) (r.left * scale + 0.5f);
+            r.top = (int) (r.top * scale + 0.5f);
+            r.right = (int) (r.right * scale + 0.5f);
+            r.bottom = (int) (r.bottom * scale + 0.5f);
+            r.offset(cx, cy);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/SpaceNode.java b/packages/SystemUI/src/com/android/systemui/recents/model/SpaceNode.java
new file mode 100644
index 0000000..1dd1be6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/SpaceNode.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.model;
+
+import android.content.Context;
+import android.graphics.Rect;
+
+import java.util.ArrayList;
+
+
+/**
+ * The full recents space is partitioned using a BSP into various nodes that define where task
+ * stacks should be placed.
+ */
+public class SpaceNode {
+    /* BSP node callbacks */
+    public interface SpaceNodeCallbacks {
+        /** Notifies when a node is added */
+        public void onSpaceNodeAdded(SpaceNode node);
+        /** Notifies when a node is measured */
+        public void onSpaceNodeMeasured(SpaceNode node, Rect rect);
+    }
+
+    Context mContext;
+
+    SpaceNode mStartNode;
+    SpaceNode mEndNode;
+
+    TaskStack mStack;
+
+    public SpaceNode(Context context) {
+        mContext = context;
+    }
+
+    /** Sets the current stack for this space node */
+    public void setStack(TaskStack stack) {
+        mStack = stack;
+    }
+
+    /** Returns the task stack (not null if this is a leaf) */
+    TaskStack getStack() {
+        return mStack;
+    }
+
+    /** Returns whether this is a leaf node */
+    boolean isLeafNode() {
+        return (mStartNode == null) && (mEndNode == null);
+    }
+
+    /** Returns all the descendent task stacks */
+    private void getStacksRec(ArrayList<TaskStack> stacks) {
+        if (isLeafNode()) {
+            stacks.add(mStack);
+        } else {
+            mStartNode.getStacksRec(stacks);
+            mEndNode.getStacksRec(stacks);
+        }
+    }
+    public ArrayList<TaskStack> getStacks() {
+        ArrayList<TaskStack> stacks = new ArrayList<TaskStack>();
+        getStacksRec(stacks);
+        return stacks;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/Task.java b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
new file mode 100644
index 0000000..1566a49
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/Task.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.model;
+
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+
+
+/**
+ * A task represents the top most task in the system's task stack.
+ */
+public class Task {
+    /* Task callbacks */
+    public interface TaskCallbacks {
+        /* Notifies when a task has been bound */
+        public void onTaskDataLoaded(boolean reloadingTaskData);
+        /* Notifies when a task has been unbound */
+        public void onTaskDataUnloaded();
+    }
+
+    /* The Task Key represents the unique primary key for the task */
+    public static class TaskKey {
+        public final int id;
+        public final Intent baseIntent;
+        public final int userId;
+
+        public TaskKey(int id, Intent intent, int userId) {
+            this.id = id;
+            this.baseIntent = intent;
+            this.userId = userId;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (!(o instanceof TaskKey)) {
+                return false;
+            }
+            return id == ((TaskKey) o).id
+                    && userId == ((TaskKey) o).userId;
+        }
+
+        @Override
+        public int hashCode() {
+            return (id << 5) + userId;
+        }
+
+        @Override
+        public String toString() {
+            return "Task.Key: " + id + ", "
+                    + "u" + userId + ", "
+                    + baseIntent.getComponent().getPackageName();
+        }
+    }
+
+    public TaskKey key;
+    public Drawable applicationIcon;
+    public Drawable activityIcon;
+    public String activityLabel;
+    public Bitmap thumbnail;
+    public boolean isActive;
+    public int userId;
+
+    TaskCallbacks mCb;
+
+    public Task() {
+        // Only used by RecentsService for task rect calculations.
+    }
+
+    public Task(int id, boolean isActive, Intent intent, String activityTitle,
+                BitmapDrawable activityIcon, int userId) {
+        this.key = new TaskKey(id, intent, userId);
+        this.activityLabel = activityTitle;
+        this.activityIcon = activityIcon;
+        this.isActive = isActive;
+        this.userId = userId;
+    }
+
+    /** Set the callbacks */
+    public void setCallbacks(TaskCallbacks cb) {
+        mCb = cb;
+    }
+
+    /** Notifies the callback listeners that this task has been loaded */
+    public void notifyTaskDataLoaded(Bitmap thumbnail, Drawable applicationIcon,
+                                     boolean reloadingTaskData) {
+        this.applicationIcon = applicationIcon;
+        this.thumbnail = thumbnail;
+        if (mCb != null) {
+            mCb.onTaskDataLoaded(reloadingTaskData);
+        }
+    }
+
+    /** Notifies the callback listeners that this task has been unloaded */
+    public void notifyTaskDataUnloaded(Bitmap defaultThumbnail, Drawable defaultApplicationIcon) {
+        applicationIcon = defaultApplicationIcon;
+        thumbnail = defaultThumbnail;
+        if (mCb != null) {
+            mCb.onTaskDataUnloaded();
+        }
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        // Check that the id matches
+        Task t = (Task) o;
+        return key.equals(t.key);
+    }
+
+    @Override
+    public String toString() {
+        return "Task: " + key.baseIntent.getComponent().getPackageName() + " [" + super.toString() + "]";
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
new file mode 100644
index 0000000..d2de185
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/model/TaskStack.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.model;
+
+import android.content.Context;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+/**
+ * An interface for a task filter to query whether a particular task should show in a stack.
+ */
+interface TaskFilter {
+    /** Returns whether the filter accepts the specified task */
+    public boolean acceptTask(Task t, int index);
+}
+
+/**
+ * A list of filtered tasks.
+ */
+class FilteredTaskList {
+    ArrayList<Task> mTasks = new ArrayList<Task>();
+    ArrayList<Task> mFilteredTasks = new ArrayList<Task>();
+    TaskFilter mFilter;
+
+    /** Sets the task filter, saving the current touch state */
+    boolean setFilter(TaskFilter filter) {
+        ArrayList<Task> prevFilteredTasks = new ArrayList<Task>(mFilteredTasks);
+        mFilter = filter;
+        updateFilteredTasks();
+        if (!prevFilteredTasks.equals(mFilteredTasks)) {
+            return true;
+        } else {
+            // If the tasks are exactly the same pre/post filter, then just reset it
+            mFilter = null;
+            return false;
+        }
+    }
+
+    /** Removes the task filter and returns the previous touch state */
+    void removeFilter() {
+        mFilter = null;
+        updateFilteredTasks();
+    }
+
+    /** Adds a new task to the task list */
+    void add(Task t) {
+        mTasks.add(t);
+        updateFilteredTasks();
+    }
+
+    /** Sets the list of tasks */
+    void set(List<Task> tasks) {
+        mTasks.clear();
+        mTasks.addAll(tasks);
+        updateFilteredTasks();
+    }
+
+    /** Removes a task from the base list only if it is in the filtered list */
+    boolean remove(Task t) {
+        if (mFilteredTasks.contains(t)) {
+            boolean removed = mTasks.remove(t);
+            updateFilteredTasks();
+            return removed;
+        }
+        return false;
+    }
+
+    /** Returns the index of this task in the list of filtered tasks */
+    int indexOf(Task t) {
+        return mFilteredTasks.indexOf(t);
+    }
+
+    /** Returns the size of the list of filtered tasks */
+    int size() {
+        return mFilteredTasks.size();
+    }
+
+    /** Returns whether the filtered list contains this task */
+    boolean contains(Task t) {
+        return mFilteredTasks.contains(t);
+    }
+
+    /** Updates the list of filtered tasks whenever the base task list changes */
+    private void updateFilteredTasks() {
+        mFilteredTasks.clear();
+        if (mFilter != null) {
+            int taskCount = mTasks.size();
+            for (int i = 0; i < taskCount; i++) {
+                Task t = mTasks.get(i);
+                if (mFilter.acceptTask(t, i)) {
+                    mFilteredTasks.add(t);
+                }
+            }
+        } else {
+            mFilteredTasks.addAll(mTasks);
+        }
+    }
+
+    /** Returns whether this task list is filtered */
+    boolean hasFilter() {
+        return (mFilter != null);
+    }
+
+    /** Returns the list of filtered tasks */
+    ArrayList<Task> getTasks() {
+        return mFilteredTasks;
+    }
+}
+
+/**
+ * The task stack contains a list of multiple tasks.
+ */
+public class TaskStack {
+    /* Task stack callbacks */
+    public interface TaskStackCallbacks {
+        /* Notifies when a task has been added to the stack */
+        public void onStackTaskAdded(TaskStack stack, Task t);
+        /* Notifies when a task has been removed from the stack */
+        public void onStackTaskRemoved(TaskStack stack, Task t);
+        /** Notifies when the stack was filtered */
+        public void onStackFiltered(TaskStack newStack, ArrayList<Task> curTasks, Task t);
+        /** Notifies when the stack was un-filtered */
+        public void onStackUnfiltered(TaskStack newStack, ArrayList<Task> curTasks);
+    }
+
+    Context mContext;
+
+    FilteredTaskList mTaskList = new FilteredTaskList();
+    TaskStackCallbacks mCb;
+
+    public TaskStack(Context context) {
+        mContext = context;
+    }
+
+    /** Sets the callbacks for this task stack */
+    public void setCallbacks(TaskStackCallbacks cb) {
+        mCb = cb;
+    }
+
+    /** Adds a new task */
+    public void addTask(Task t) {
+        mTaskList.add(t);
+        if (mCb != null) {
+            mCb.onStackTaskAdded(this, t);
+        }
+    }
+
+    /** Removes a task */
+    public void removeTask(Task t) {
+        if (mTaskList.contains(t)) {
+            mTaskList.remove(t);
+            if (mCb != null) {
+                mCb.onStackTaskRemoved(this, t);
+            }
+        }
+    }
+
+    /** Sets a few tasks in one go */
+    public void setTasks(List<Task> tasks) {
+        int taskCount = mTaskList.getTasks().size();
+        for (int i = 0; i < taskCount; i++) {
+            Task t = mTaskList.getTasks().get(i);
+            if (mCb != null) {
+                mCb.onStackTaskRemoved(this, t);
+            }
+        }
+        mTaskList.set(tasks);
+        for (Task t : tasks) {
+            if (mCb != null) {
+                mCb.onStackTaskAdded(this, t);
+            }
+        }
+    }
+
+    /** Gets the tasks */
+    public ArrayList<Task> getTasks() {
+        return mTaskList.getTasks();
+    }
+
+    /** Gets the number of tasks */
+    public int getTaskCount() {
+        return mTaskList.size();
+    }
+
+    /** Returns the index of this task in this current task stack */
+    public int indexOfTask(Task t) {
+        return mTaskList.indexOf(t);
+    }
+
+    /** Tests whether a task is in this current task stack */
+    public boolean containsTask(Task t) {
+        return mTaskList.contains(t);
+    }
+
+    /** Filters the stack into tasks similar to the one specified */
+    public void filterTasks(final Task t) {
+        ArrayList<Task> oldStack = new ArrayList<Task>(mTaskList.getTasks());
+
+        // Set the task list filter
+        boolean filtered = mTaskList.setFilter(new TaskFilter() {
+            @Override
+            public boolean acceptTask(Task at, int i) {
+                return t.key.baseIntent.getComponent().getPackageName().equals(
+                        at.key.baseIntent.getComponent().getPackageName());
+            }
+        });
+        if (filtered && mCb != null) {
+            mCb.onStackFiltered(this, oldStack, t);
+        }
+    }
+
+    /** Unfilters the current stack */
+    public void unfilterTasks() {
+        ArrayList<Task> oldStack = new ArrayList<Task>(mTaskList.getTasks());
+
+        // Unset the filter, then update the virtual scroll
+        mTaskList.removeFilter();
+        if (mCb != null) {
+            mCb.onStackUnfiltered(this, oldStack);
+        }
+    }
+
+    /** Returns whether tasks are currently filtered */
+    public boolean hasFilteredTasks() {
+        return mTaskList.hasFilter();
+    }
+
+    @Override
+    public String toString() {
+        String str = "Tasks:\n";
+        for (Task t : mTaskList.getTasks()) {
+            str += "  " + t.toString() + "\n";
+        }
+        return str;
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
new file mode 100644
index 0000000..a04cd3e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java
@@ -0,0 +1,397 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.app.ActivityOptions;
+import android.app.TaskStackBuilder;
+import android.content.ActivityNotFoundException;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.TextView;
+import com.android.systemui.recents.Console;
+import com.android.systemui.recents.Constants;
+import com.android.systemui.recents.RecentsConfiguration;
+import com.android.systemui.recents.RecentsTaskLoader;
+import com.android.systemui.recents.model.SpaceNode;
+import com.android.systemui.recents.model.Task;
+import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.R;
+
+import java.util.ArrayList;
+
+
+/**
+ * This view is the the top level layout that contains TaskStacks (which are laid out according
+ * to their SpaceNode bounds.
+ */
+public class RecentsView extends FrameLayout implements TaskStackView.TaskStackViewCallbacks {
+
+    /** The RecentsView callbacks */
+    public interface RecentsViewCallbacks {
+        public void onTaskLaunching();
+    }
+
+    // The space partitioning root of this container
+    SpaceNode mBSP;
+    // Search bar view
+    View mSearchBar;
+    // Recents view callbacks
+    RecentsViewCallbacks mCb;
+
+    LayoutInflater mInflater;
+
+    public RecentsView(Context context) {
+        super(context);
+        mInflater = LayoutInflater.from(context);
+        setWillNotDraw(false);
+    }
+
+    /** Sets the callbacks */
+    public void setCallbacks(RecentsViewCallbacks cb) {
+        mCb = cb;
+    }
+
+    /** Set/get the bsp root node */
+    public void setBSP(SpaceNode n) {
+        mBSP = n;
+
+        // Create and add all the stacks for this partition of space.
+        boolean hasTasks = false;
+        removeAllViews();
+        ArrayList<TaskStack> stacks = mBSP.getStacks();
+        for (TaskStack stack : stacks) {
+            TaskStackView stackView = new TaskStackView(getContext(), stack);
+            stackView.setCallbacks(this);
+            addView(stackView);
+            hasTasks |= (stack.getTaskCount() > 0);
+        }
+
+        // Create the search bar (and hide it if we have no recent tasks)
+        if (Constants.DebugFlags.App.EnableSearchButton) {
+            createSearchBar();
+            if (!hasTasks) {
+                mSearchBar.setVisibility(View.GONE);
+            }
+        }
+    }
+
+    /** Launches the first task from the first stack if possible */
+    public boolean launchFirstTask() {
+        // Get the first stack view
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            View child = getChildAt(i);
+            if (child instanceof TaskStackView) {
+                TaskStackView stackView = (TaskStackView) child;
+                TaskStack stack = stackView.mStack;
+                ArrayList<Task> tasks = stack.getTasks();
+
+                // Get the first task in the stack
+                if (!tasks.isEmpty()) {
+                    Task task = tasks.get(tasks.size() - 1);
+                    TaskView tv = null;
+
+                    // Try and use the first child task view as the source of the launch animation
+                    if (stackView.getChildCount() > 0) {
+                        TaskView stv = (TaskView) stackView.getChildAt(stackView.getChildCount() - 1);
+                        if (stv.getTask() == task) {
+                            tv = stv;
+                        }
+                    }
+                    onTaskLaunched(stackView, tv, stack, task);
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /** Creates and adds the search bar */
+    void createSearchBar() {
+        // Create a temporary search bar
+        mSearchBar = mInflater.inflate(R.layout.recents_search_bar, this, false);
+        mSearchBar.setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                onSearchTriggered();
+            }
+        });
+        addView(mSearchBar);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+        int height = MeasureSpec.getSize(heightMeasureSpec);
+        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+
+        Console.log(Constants.DebugFlags.UI.MeasureAndLayout, "[RecentsView|measure]",
+                "width: " + width + " height: " + height, Console.AnsiGreen);
+        Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                Constants.DebugFlags.App.TimeRecentsStartupKey, "RecentsView.onMeasure");
+
+        // Get the search bar bounds so that we can account for its height in the children
+        Rect searchBarSpaceBounds = new Rect();
+        Rect searchBarBounds = new Rect();
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        config.getSearchBarBounds(getMeasuredWidth(), getMeasuredHeight(),
+                searchBarSpaceBounds, searchBarBounds);
+        if (mSearchBar != null) {
+            mSearchBar.measure(MeasureSpec.makeMeasureSpec(searchBarSpaceBounds.width(), widthMode),
+                    MeasureSpec.makeMeasureSpec(searchBarSpaceBounds.height(), heightMode));
+        }
+
+        // We measure our stack views sans the status bar.  It will handle the nav bar itself.
+        int childWidth = width - config.systemInsets.right;
+        int childHeight = height - config.systemInsets.top - searchBarSpaceBounds.height();
+
+        // Measure each child
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            View child = getChildAt(i);
+            if (child instanceof TaskStackView && child.getVisibility() != GONE) {
+                child.measure(MeasureSpec.makeMeasureSpec(childWidth, widthMode),
+                        MeasureSpec.makeMeasureSpec(childHeight, heightMode));
+            }
+        }
+
+        setMeasuredDimension(width, height);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        Console.log(Constants.DebugFlags.UI.MeasureAndLayout, "[RecentsView|layout]",
+                new Rect(left, top, right, bottom) + " changed: " + changed, Console.AnsiGreen);
+        Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsStartup,
+                Constants.DebugFlags.App.TimeRecentsStartupKey, "RecentsView.onLayout");
+
+        // Get the search bar bounds so that we can account for its height in the children
+        Rect searchBarSpaceBounds = new Rect();
+        Rect searchBarBounds = new Rect();
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        config.getSearchBarBounds(getMeasuredWidth(), getMeasuredHeight(),
+                searchBarSpaceBounds, searchBarBounds);
+        if (mSearchBar != null) {
+            mSearchBar.layout(config.systemInsets.left + searchBarSpaceBounds.left,
+                    config.systemInsets.top + searchBarSpaceBounds.top,
+                    config.systemInsets.left + mSearchBar.getMeasuredWidth(),
+                    config.systemInsets.top + mSearchBar.getMeasuredHeight());
+        }
+
+        // We offset our stack views by the status bar height.  It will handle the nav bar itself.
+        top += config.systemInsets.top + searchBarSpaceBounds.height();
+
+        // Layout each child
+        // XXX: Based on the space node for that task view
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            View child = getChildAt(i);
+            if (child instanceof TaskStackView && child.getVisibility() != GONE) {
+                int width = child.getMeasuredWidth();
+                int height = child.getMeasuredHeight();
+                child.layout(left, top, left + width, top + height);
+            }
+        }
+    }
+
+    @Override
+    protected void dispatchDraw(Canvas canvas) {
+        Console.log(Constants.DebugFlags.UI.Draw, "[RecentsView|dispatchDraw]", "",
+                Console.AnsiPurple);
+        super.dispatchDraw(canvas);
+    }
+
+    @Override
+    protected boolean fitSystemWindows(Rect insets) {
+        Console.log(Constants.DebugFlags.UI.MeasureAndLayout,
+                "[RecentsView|fitSystemWindows]", "insets: " + insets, Console.AnsiGreen);
+
+        // Update the configuration with the latest system insets and trigger a relayout
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        config.updateSystemInsets(insets);
+        requestLayout();
+
+        return true;
+    }
+
+    /** Closes any open info panes */
+    public boolean closeOpenInfoPanes() {
+        if (mBSP != null) {
+            // Get the first stack view
+            int childCount = getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                View child = getChildAt(i);
+                if (child instanceof TaskStackView) {
+                    TaskStackView stackView = (TaskStackView) child;
+                    if (stackView.closeOpenInfoPanes()) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    /** Unfilters any filtered stacks */
+    public boolean unfilterFilteredStacks() {
+        if (mBSP != null) {
+            // Check if there are any filtered stacks and unfilter them before we back out of Recents
+            boolean stacksUnfiltered = false;
+            ArrayList<TaskStack> stacks = mBSP.getStacks();
+            for (TaskStack stack : stacks) {
+                if (stack.hasFilteredTasks()) {
+                    stack.unfilterTasks();
+                    stacksUnfiltered = true;
+                }
+            }
+            return stacksUnfiltered;
+        }
+        return false;
+    }
+
+    /**** TaskStackView.TaskStackCallbacks Implementation ****/
+
+    @Override
+    public void onTaskLaunched(final TaskStackView stackView, final TaskView tv,
+                               final TaskStack stack, final Task task) {
+        // Notify any callbacks of the launching of a new task
+        if (mCb != null) {
+            mCb.onTaskLaunching();
+        }
+
+        // Close any open info panes
+        closeOpenInfoPanes();
+
+        final Runnable launchRunnable = new Runnable() {
+            @Override
+            public void run() {
+                TaskViewTransform transform;
+                View sourceView = tv;
+                int offsetX = 0;
+                int offsetY = 0;
+                int stackScroll = stackView.getStackScroll();
+                if (tv == null) {
+                    // If there is no actual task view, then use the stack view as the source view
+                    // and then offset to the expected transform rect, but bound this to just
+                    // outside the display rect (to ensure we don't animate from too far away)
+                    RecentsConfiguration config = RecentsConfiguration.getInstance();
+                    sourceView = stackView;
+                    transform = stackView.getStackTransform(stack.indexOfTask(task), stackScroll);
+                    offsetX = transform.rect.left;
+                    offsetY = Math.min(transform.rect.top, config.displayRect.height());
+                } else {
+                    transform = stackView.getStackTransform(stack.indexOfTask(task), stackScroll);
+                }
+
+                // Compute the thumbnail to scale up from
+                ActivityOptions opts = null;
+                int thumbnailWidth = transform.rect.width();
+                int thumbnailHeight = transform.rect.height();
+                if (task.thumbnail != null && thumbnailWidth > 0 && thumbnailHeight > 0 &&
+                        task.thumbnail.getWidth() > 0 && task.thumbnail.getHeight() > 0) {
+                    // Resize the thumbnail to the size of the view that we are animating from
+                    Bitmap b = Bitmap.createBitmap(thumbnailWidth, thumbnailHeight,
+                            Bitmap.Config.ARGB_8888);
+                    Canvas c = new Canvas(b);
+                    c.drawBitmap(task.thumbnail,
+                            new Rect(0, 0, task.thumbnail.getWidth(), task.thumbnail.getHeight()),
+                            new Rect(0, 0, thumbnailWidth, thumbnailHeight), null);
+                    c.setBitmap(null);
+                    opts = ActivityOptions.makeThumbnailScaleUpAnimation(sourceView,
+                            b, offsetX, offsetY);
+                }
+
+                if (task.isActive) {
+                    // Bring an active task to the foreground
+                    RecentsTaskLoader.getInstance().getSystemServicesProxy()
+                            .moveTaskToFront(task.key.id, opts);
+                } else {
+                    // Launch the activity with the desired animation
+                    Intent i = new Intent(task.key.baseIntent);
+                    i.setFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY
+                            | Intent.FLAG_ACTIVITY_TASK_ON_HOME
+                            | Intent.FLAG_ACTIVITY_NEW_TASK);
+                    try {
+                        UserHandle taskUser = new UserHandle(task.userId);
+                        if (opts != null) {
+                            getContext().startActivityAsUser(i, opts.toBundle(), taskUser);
+                        } else {
+                            getContext().startActivityAsUser(i, taskUser);
+                        }
+                    } catch (ActivityNotFoundException anfe) {
+                        Console.logError(getContext(), "Could not start Activity");
+                    }
+                }
+
+                Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsLaunchTask,
+                        Constants.DebugFlags.App.TimeRecentsLaunchKey, "startActivity");
+            }
+        };
+
+        Console.logTraceTime(Constants.DebugFlags.App.TimeRecentsLaunchTask,
+                Constants.DebugFlags.App.TimeRecentsLaunchKey, "onTaskLaunched");
+
+        // Launch the app right away if there is no task view, otherwise, animate the icon out first
+        if (tv == null || !Constants.Values.TaskView.AnimateFrontTaskBarOnLeavingRecents) {
+            post(launchRunnable);
+        } else {
+            tv.animateOnLeavingRecents(launchRunnable);
+        }
+    }
+
+    @Override
+    public void onTaskAppInfoLaunched(Task t) {
+        // Create a new task stack with the application info details activity
+        Intent baseIntent = t.key.baseIntent;
+        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
+                Uri.fromParts("package", baseIntent.getComponent().getPackageName(), null));
+        intent.setComponent(intent.resolveActivity(getContext().getPackageManager()));
+        TaskStackBuilder.create(getContext())
+                .addNextIntentWithParentStack(intent).startActivities();
+    }
+
+    public void onSearchTriggered() {
+        // Get the search bar source bounds
+        Rect searchBarSpaceBounds = new Rect();
+        Rect searchBarBounds = new Rect();
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        config.getSearchBarBounds(getMeasuredWidth(), getMeasuredHeight(),
+                searchBarSpaceBounds, searchBarBounds);
+
+        // Get the search intent and start it
+        Intent searchIntent = RecentsTaskLoader.getInstance().getSystemServicesProxy()
+                .getGlobalSearchIntent(searchBarBounds);
+        if (searchIntent != null) {
+            try {
+                getContext().startActivity(searchIntent);
+            } catch (ActivityNotFoundException anfe) {
+                Console.logError(getContext(), "Could not start Search activity");
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java
new file mode 100644
index 0000000..21ef9ff
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/SwipeHelper.java
@@ -0,0 +1,398 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.annotation.TargetApi;
+import android.os.Build;
+import android.util.DisplayMetrics;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.animation.LinearInterpolator;
+import com.android.systemui.recents.Console;
+import com.android.systemui.recents.Constants;
+
+/**
+ * This class facilitates swipe to dismiss. It defines an interface to be implemented by the
+ * by the class hosting the views that need to swiped, and, using this interface, handles touch
+ * events and translates / fades / animates the view as it is dismissed.
+ */
+public class SwipeHelper {
+    static final String TAG = "SwipeHelper";
+    private static final boolean SLOW_ANIMATIONS = false; // DEBUG;
+    private static final boolean CONSTRAIN_SWIPE = true;
+    private static final boolean FADE_OUT_DURING_SWIPE = true;
+    private static final boolean DISMISS_IF_SWIPED_FAR_ENOUGH = true;
+
+    public static final int X = 0;
+    public static final int Y = 1;
+
+    private static LinearInterpolator sLinearInterpolator = new LinearInterpolator();
+
+    private float SWIPE_ESCAPE_VELOCITY = 100f; // dp/sec
+    private int DEFAULT_ESCAPE_ANIMATION_DURATION = 75; // ms
+    private int MAX_ESCAPE_ANIMATION_DURATION = 150; // ms
+    private int MAX_DISMISS_VELOCITY = 2000; // dp/sec
+    private static final int SNAP_ANIM_LEN = SLOW_ANIMATIONS ? 1000 : 150; // ms
+
+    public static float ALPHA_FADE_START = 0.15f; // fraction of thumbnail width
+                                                 // where fade starts
+    static final float ALPHA_FADE_END = 0.65f; // fraction of thumbnail width
+                                              // beyond which alpha->0
+    private float mMinAlpha = 0f;
+
+    private float mPagingTouchSlop;
+    Callback mCallback;
+    private int mSwipeDirection;
+    private VelocityTracker mVelocityTracker;
+
+    private float mInitialTouchPos;
+    private boolean mDragging;
+
+    private View mCurrView;
+    private boolean mCanCurrViewBeDimissed;
+    private float mDensityScale;
+
+    public boolean mAllowSwipeTowardsStart = true;
+    public boolean mAllowSwipeTowardsEnd = true;
+    private boolean mRtl;
+
+    public SwipeHelper(int swipeDirection, Callback callback, float densityScale,
+            float pagingTouchSlop) {
+        mCallback = callback;
+        mSwipeDirection = swipeDirection;
+        mVelocityTracker = VelocityTracker.obtain();
+        mDensityScale = densityScale;
+        mPagingTouchSlop = pagingTouchSlop;
+    }
+
+    public void setDensityScale(float densityScale) {
+        mDensityScale = densityScale;
+    }
+
+    public void setPagingTouchSlop(float pagingTouchSlop) {
+        mPagingTouchSlop = pagingTouchSlop;
+    }
+
+    public void cancelOngoingDrag() {
+        if (mDragging) {
+            if (mCurrView != null) {
+                mCallback.onDragCancelled(mCurrView);
+                setTranslation(mCurrView, 0);
+                mCallback.onSnapBackCompleted(mCurrView);
+                mCurrView = null;
+            }
+            mDragging = false;
+        }
+    }
+
+    public void resetTranslation(View v) {
+        setTranslation(v, 0);
+    }
+
+    private float getPos(MotionEvent ev) {
+        return mSwipeDirection == X ? ev.getX() : ev.getY();
+    }
+
+    private float getTranslation(View v) {
+        return mSwipeDirection == X ? v.getTranslationX() : v.getTranslationY();
+    }
+
+    private float getVelocity(VelocityTracker vt) {
+        return mSwipeDirection == X ? vt.getXVelocity() :
+                vt.getYVelocity();
+    }
+
+    private ObjectAnimator createTranslationAnimation(View v, float newPos) {
+        ObjectAnimator anim = ObjectAnimator.ofFloat(v,
+                mSwipeDirection == X ? View.TRANSLATION_X : View.TRANSLATION_Y, newPos);
+        return anim;
+    }
+
+    private float getPerpendicularVelocity(VelocityTracker vt) {
+        return mSwipeDirection == X ? vt.getYVelocity() :
+                vt.getXVelocity();
+    }
+
+    private void setTranslation(View v, float translate) {
+        if (mSwipeDirection == X) {
+            v.setTranslationX(translate);
+        } else {
+            v.setTranslationY(translate);
+        }
+    }
+
+    private float getSize(View v) {
+        final DisplayMetrics dm = v.getContext().getResources().getDisplayMetrics();
+        return mSwipeDirection == X ? dm.widthPixels : dm.heightPixels;
+    }
+
+    public void setMinAlpha(float minAlpha) {
+        mMinAlpha = minAlpha;
+    }
+
+    float getAlphaForOffset(View view) {
+        float viewSize = getSize(view);
+        final float fadeSize = ALPHA_FADE_END * viewSize;
+        float result = 1.0f;
+        float pos = getTranslation(view);
+        if (pos >= viewSize * ALPHA_FADE_START) {
+            result = 1.0f - (pos - viewSize * ALPHA_FADE_START) / fadeSize;
+        } else if (pos < viewSize * (1.0f - ALPHA_FADE_START)) {
+            result = 1.0f + (viewSize * ALPHA_FADE_START + pos) / fadeSize;
+        }
+        result = Math.min(result, 1.0f);
+        result = Math.max(result, 0f);
+        return Math.max(mMinAlpha, result);
+    }
+
+    /**
+     * Determines whether the given view has RTL layout.
+     */
+    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
+    public static boolean isLayoutRtl(View view) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
+            return View.LAYOUT_DIRECTION_RTL == view.getLayoutDirection();
+        } else {
+            return false;
+        }
+    }
+
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        Console.log(Constants.DebugFlags.UI.TouchEvents,
+                "[SwipeHelper|interceptTouchEvent]",
+                Console.motionEventActionToString(ev.getAction()), Console.AnsiBlue);
+        final int action = ev.getAction();
+
+        switch (action) {
+            case MotionEvent.ACTION_DOWN:
+                mDragging = false;
+                mCurrView = mCallback.getChildAtPosition(ev);
+                mVelocityTracker.clear();
+                if (mCurrView != null) {
+                    mRtl = isLayoutRtl(mCurrView);
+                    mCanCurrViewBeDimissed = mCallback.canChildBeDismissed(mCurrView);
+                    mVelocityTracker.addMovement(ev);
+                    mInitialTouchPos = getPos(ev);
+                } else {
+                    mCanCurrViewBeDimissed = false;
+                }
+                break;
+            case MotionEvent.ACTION_MOVE:
+                if (mCurrView != null) {
+                    mVelocityTracker.addMovement(ev);
+                    float pos = getPos(ev);
+                    float delta = pos - mInitialTouchPos;
+                    if (Math.abs(delta) > mPagingTouchSlop) {
+                        mCallback.onBeginDrag(mCurrView);
+                        mDragging = true;
+                        mInitialTouchPos = pos - getTranslation(mCurrView);
+                    }
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                mDragging = false;
+                mCurrView = null;
+                break;
+        }
+        return mDragging;
+    }
+
+    /**
+     * @param view The view to be dismissed
+     * @param velocity The desired pixels/second speed at which the view should move
+     */
+    private void dismissChild(final View view, float velocity) {
+        final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view);
+        float newPos;
+        if (velocity < 0
+                || (velocity == 0 && getTranslation(view) < 0)
+                // if we use the Menu to dismiss an item in landscape, animate up
+                || (velocity == 0 && getTranslation(view) == 0 && mSwipeDirection == Y)) {
+            newPos = -getSize(view);
+        } else {
+            newPos = getSize(view);
+        }
+        int duration = MAX_ESCAPE_ANIMATION_DURATION;
+        if (velocity != 0) {
+            duration = Math.min(duration,
+                                (int) (Math.abs(newPos - getTranslation(view)) *
+                                        1000f / Math.abs(velocity)));
+        } else {
+            duration = DEFAULT_ESCAPE_ANIMATION_DURATION;
+        }
+
+        ValueAnimator anim = createTranslationAnimation(view, newPos);
+        anim.setInterpolator(sLinearInterpolator);
+        anim.setDuration(duration);
+        anim.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mCallback.onChildDismissed(view);
+                if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) {
+                    view.setAlpha(1.f);
+                }
+            }
+        });
+        anim.addUpdateListener(new AnimatorUpdateListener() {
+            @Override
+            public void onAnimationUpdate(ValueAnimator animation) {
+                if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) {
+                    view.setAlpha(getAlphaForOffset(view));
+                }
+            }
+        });
+        anim.start();
+    }
+
+    private void snapChild(final View view, float velocity) {
+        final boolean canAnimViewBeDismissed = mCallback.canChildBeDismissed(view);
+        ValueAnimator anim = createTranslationAnimation(view, 0);
+        int duration = SNAP_ANIM_LEN;
+        anim.setDuration(duration);
+        anim.addUpdateListener(new AnimatorUpdateListener() {
+            @Override
+            public void onAnimationUpdate(ValueAnimator animation) {
+                if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) {
+                    view.setAlpha(getAlphaForOffset(view));
+                }
+            }
+        });
+        anim.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                if (FADE_OUT_DURING_SWIPE && canAnimViewBeDismissed) {
+                    view.setAlpha(1.0f);
+                }
+                mCallback.onSnapBackCompleted(view);
+            }
+        });
+        anim.start();
+    }
+
+    public boolean onTouchEvent(MotionEvent ev) {
+        Console.log(Constants.DebugFlags.UI.TouchEvents,
+                "[SwipeHelper|touchEvent]",
+                Console.motionEventActionToString(ev.getAction()), Console.AnsiBlue);
+
+        if (!mDragging) {
+            if (!onInterceptTouchEvent(ev)) {
+                return mCanCurrViewBeDimissed;
+            }
+        }
+
+        mVelocityTracker.addMovement(ev);
+        final int action = ev.getAction();
+        switch (action) {
+            case MotionEvent.ACTION_OUTSIDE:
+            case MotionEvent.ACTION_MOVE:
+                if (mCurrView != null) {
+                    float delta = getPos(ev) - mInitialTouchPos;
+                    setSwipeAmount(delta);
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                if (mCurrView != null) {
+                    endSwipe(mVelocityTracker);
+                }
+                break;
+        }
+        return true;
+    }
+
+    private void setSwipeAmount(float amount) {
+        // don't let items that can't be dismissed be dragged more than
+        // maxScrollDistance
+        if (CONSTRAIN_SWIPE
+                && (!isValidSwipeDirection(amount) || !mCallback.canChildBeDismissed(mCurrView))) {
+            float size = getSize(mCurrView);
+            float maxScrollDistance = 0.15f * size;
+            if (Math.abs(amount) >= size) {
+                amount = amount > 0 ? maxScrollDistance : -maxScrollDistance;
+            } else {
+                amount = maxScrollDistance * (float) Math.sin((amount/size)*(Math.PI/2));
+            }
+        }
+        setTranslation(mCurrView, amount);
+        if (FADE_OUT_DURING_SWIPE && mCanCurrViewBeDimissed) {
+            float alpha = getAlphaForOffset(mCurrView);
+            mCurrView.setAlpha(alpha);
+        }
+    }
+
+    private boolean isValidSwipeDirection(float amount) {
+        if (mSwipeDirection == X) {
+            if (mRtl) {
+                return (amount <= 0) ? mAllowSwipeTowardsEnd : mAllowSwipeTowardsStart;
+            } else {
+                return (amount <= 0) ? mAllowSwipeTowardsStart : mAllowSwipeTowardsEnd;
+            }
+        }
+
+        // Vertical swipes are always valid.
+        return true;
+    }
+
+    private void endSwipe(VelocityTracker velocityTracker) {
+        float maxVelocity = MAX_DISMISS_VELOCITY * mDensityScale;
+        velocityTracker.computeCurrentVelocity(1000 /* px/sec */, maxVelocity);
+        float velocity = getVelocity(velocityTracker);
+        float perpendicularVelocity = getPerpendicularVelocity(velocityTracker);
+        float escapeVelocity = SWIPE_ESCAPE_VELOCITY * mDensityScale;
+        float translation = getTranslation(mCurrView);
+        // Decide whether to dismiss the current view
+        boolean childSwipedFarEnough = DISMISS_IF_SWIPED_FAR_ENOUGH &&
+                Math.abs(translation) > 0.6 * getSize(mCurrView);
+        boolean childSwipedFastEnough = (Math.abs(velocity) > escapeVelocity) &&
+                (Math.abs(velocity) > Math.abs(perpendicularVelocity)) &&
+                (velocity > 0) == (translation > 0);
+
+        boolean dismissChild = mCallback.canChildBeDismissed(mCurrView)
+                && isValidSwipeDirection(translation)
+                && (childSwipedFastEnough || childSwipedFarEnough);
+
+        if (dismissChild) {
+            // flingadingy
+            dismissChild(mCurrView, childSwipedFastEnough ? velocity : 0f);
+        } else {
+            // snappity
+            mCallback.onDragCancelled(mCurrView);
+            snapChild(mCurrView, velocity);
+        }
+    }
+
+    public interface Callback {
+        View getChildAtPosition(MotionEvent ev);
+
+        boolean canChildBeDismissed(View v);
+
+        void onBeginDrag(View v);
+
+        void onChildDismissed(View v);
+
+        void onSnapBackCompleted(View v);
+
+        void onDragCancelled(View v);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskBarView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskBarView.java
new file mode 100644
index 0000000..124f11e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskBarView.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.TextView;
+import com.android.systemui.R;
+import com.android.systemui.recents.model.Task;
+
+
+/* The task bar view */
+class TaskBarView extends FrameLayout {
+    Task mTask;
+
+    ImageView mApplicationIcon;
+    TextView mActivityDescription;
+
+    public TaskBarView(Context context) {
+        this(context, null);
+    }
+
+    public TaskBarView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public TaskBarView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public TaskBarView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        // Initialize the icon and description views
+        mApplicationIcon = (ImageView) findViewById(R.id.application_icon);
+        mActivityDescription = (TextView) findViewById(R.id.activity_description);
+    }
+
+    /** Binds the bar view to the task */
+    void rebindToTask(Task t, boolean animate) {
+        mTask = t;
+        // If an activity icon is defined, then we use that as the primary icon to show in the bar,
+        // otherwise, we fall back to the application icon
+        if (t.activityIcon != null) {
+            mApplicationIcon.setImageDrawable(t.activityIcon);
+        } else if (t.applicationIcon != null) {
+            mApplicationIcon.setImageDrawable(t.applicationIcon);
+        }
+        mActivityDescription.setText(t.activityLabel);
+        if (animate) {
+            // XXX: Investigate how expensive it will be to create a second bitmap and crossfade
+        }
+    }
+
+    /** Unbinds the bar view from the task */
+    void unbindFromTask() {
+        mTask = null;
+        mApplicationIcon.setImageDrawable(null);
+        mActivityDescription.setText("");
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskInfoView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskInfoView.java
new file mode 100644
index 0000000..a81d01c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskInfoView.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Path;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.widget.Button;
+import android.widget.FrameLayout;
+import com.android.systemui.R;
+import com.android.systemui.recents.BakedBezierInterpolator;
+import com.android.systemui.recents.Utilities;
+
+
+/* The task info view */
+class TaskInfoView extends FrameLayout {
+
+    Button mAppInfoButton;
+
+    // Circular clip animation
+    boolean mCircularClipEnabled;
+    Path mClipPath = new Path();
+    float mClipRadius;
+    float mMaxClipRadius;
+    Point mClipOrigin = new Point();
+    ObjectAnimator mCircularClipAnimator;
+
+    public TaskInfoView(Context context) {
+        this(context, null);
+    }
+
+    public TaskInfoView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public TaskInfoView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public TaskInfoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        // Initialize the buttons on the info panel
+        mAppInfoButton = (Button) findViewById(R.id.task_view_app_info_button);
+    }
+
+    /** Updates the positions of each of the items to fit in the rect specified */
+    void updateContents(Rect visibleRect) {
+        // Offset the app info button
+        mAppInfoButton.setTranslationY(visibleRect.top +
+                (visibleRect.height() - mAppInfoButton.getMeasuredHeight()) / 2);
+    }
+
+    /** Sets the circular clip radius on this panel */
+    public void setCircularClipRadius(float r) {
+        mClipRadius = r;
+        invalidate();
+    }
+
+    /** Gets the circular clip radius on this panel */
+    public float getCircularClipRadius() {
+        return mClipRadius;
+    }
+
+    /** Animates the circular clip radius on the icon */
+    void animateCircularClip(Point o, float fromRadius, float toRadius,
+                             final Runnable postRunnable, boolean animateInContent) {
+        if (mCircularClipAnimator != null) {
+            mCircularClipAnimator.cancel();
+        }
+
+        // Calculate the max clip radius to each of the corners
+        int w = getMeasuredWidth() - o.x;
+        int h = getMeasuredHeight() - o.y;
+        // origin to tl, tr, br, bl
+        mMaxClipRadius = (int) Math.ceil(Math.sqrt(o.x * o.x + o.y * o.y));
+        mMaxClipRadius = (int) Math.max(mMaxClipRadius, Math.ceil(Math.sqrt(w * w + o.y * o.y)));
+        mMaxClipRadius = (int) Math.max(mMaxClipRadius, Math.ceil(Math.sqrt(w * w + h * h)));
+        mMaxClipRadius = (int) Math.max(mMaxClipRadius, Math.ceil(Math.sqrt(o.x * o.x + h * h)));
+
+        mClipOrigin.set(o.x, o.y);
+        mClipRadius = fromRadius;
+        int duration = Utilities.calculateTranslationAnimationDuration((int) mMaxClipRadius);
+        mCircularClipAnimator = ObjectAnimator.ofFloat(this, "circularClipRadius", toRadius);
+        mCircularClipAnimator.setDuration(duration);
+        mCircularClipAnimator.setInterpolator(BakedBezierInterpolator.INSTANCE);
+        mCircularClipAnimator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mCircularClipEnabled = false;
+                if (postRunnable != null) {
+                    postRunnable.run();
+                }
+            }
+        });
+        mCircularClipAnimator.start();
+        mCircularClipEnabled = true;
+
+        if (animateInContent) {
+            animateAppInfoButtonIn(duration);
+        }
+    }
+
+    /** Cancels the circular clip animation. */
+    void cancelCircularClipAnimation() {
+        if (mCircularClipAnimator != null) {
+            mCircularClipAnimator.cancel();
+        }
+    }
+
+    void animateAppInfoButtonIn(int duration) {
+        mAppInfoButton.setScaleX(0.75f);
+        mAppInfoButton.setScaleY(0.75f);
+        mAppInfoButton.animate()
+                .scaleX(1f)
+                .scaleY(1f)
+                .setDuration(duration)
+                .setInterpolator(BakedBezierInterpolator.INSTANCE)
+                .withLayer()
+                .start();
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        int saveCount = 0;
+        if (mCircularClipEnabled) {
+            saveCount = canvas.save(Canvas.CLIP_SAVE_FLAG);
+            mClipPath.reset();
+            mClipPath.addCircle(mClipOrigin.x, mClipOrigin.y, mClipRadius * mMaxClipRadius,
+                    Path.Direction.CW);
+            canvas.clipPath(mClipPath);
+        }
+        super.draw(canvas);
+        if (mCircularClipEnabled) {
+            canvas.restoreToCount(saveCount);
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
new file mode 100644
index 0000000..0a8e76f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackView.java
@@ -0,0 +1,1450 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Rect;
+import android.graphics.Region;
+import android.util.Pair;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewParent;
+import android.widget.FrameLayout;
+import android.widget.OverScroller;
+import com.android.systemui.R;
+import com.android.systemui.recents.BakedBezierInterpolator;
+import com.android.systemui.recents.Console;
+import com.android.systemui.recents.Constants;
+import com.android.systemui.recents.RecentsConfiguration;
+import com.android.systemui.recents.RecentsTaskLoader;
+import com.android.systemui.recents.Utilities;
+import com.android.systemui.recents.model.Task;
+import com.android.systemui.recents.model.TaskStack;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+
+/* The visual representation of a task stack view */
+public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCallbacks,
+        TaskView.TaskViewCallbacks, ViewPool.ViewPoolConsumer<TaskView, Task>,
+        View.OnClickListener, View.OnLongClickListener {
+
+    /** The TaskView callbacks */
+    interface TaskStackViewCallbacks {
+        public void onTaskLaunched(TaskStackView stackView, TaskView tv, TaskStack stack, Task t);
+        public void onTaskAppInfoLaunched(Task t);
+    }
+
+    TaskStack mStack;
+    TaskStackViewTouchHandler mTouchHandler;
+    TaskStackViewCallbacks mCb;
+    ViewPool<TaskView, Task> mViewPool;
+
+    // The various rects that define the stack view
+    Rect mRect = new Rect();
+    Rect mStackRect = new Rect();
+    Rect mStackRectSansPeek = new Rect();
+    Rect mTaskRect = new Rect();
+
+    // The virtual stack scroll that we use for the card layout
+    int mStackScroll;
+    int mMinScroll;
+    int mMaxScroll;
+    int mStashedScroll;
+    int mLastInfoPaneStackScroll;
+    OverScroller mScroller;
+    ObjectAnimator mScrollAnimator;
+
+    // Optimizations
+    int mHwLayersRefCount;
+    int mStackViewsAnimationDuration;
+    boolean mStackViewsDirty = true;
+    boolean mAwaitingFirstLayout = true;
+    int[] mTmpVisibleRange = new int[2];
+    Rect mTmpRect = new Rect();
+    Rect mTmpRect2 = new Rect();
+    LayoutInflater mInflater;
+
+    public TaskStackView(Context context, TaskStack stack) {
+        super(context);
+        mStack = stack;
+        mStack.setCallbacks(this);
+        mScroller = new OverScroller(context);
+        mTouchHandler = new TaskStackViewTouchHandler(context, this);
+        mViewPool = new ViewPool<TaskView, Task>(context, this);
+        mInflater = LayoutInflater.from(context);
+    }
+
+    /** Sets the callbacks */
+    void setCallbacks(TaskStackViewCallbacks cb) {
+        mCb = cb;
+    }
+
+    /** Requests that the views be synchronized with the model */
+    void requestSynchronizeStackViewsWithModel() {
+        requestSynchronizeStackViewsWithModel(0);
+    }
+    void requestSynchronizeStackViewsWithModel(int duration) {
+        Console.log(Constants.DebugFlags.TaskStack.SynchronizeViewsWithModel,
+                "[TaskStackView|requestSynchronize]", "" + duration + "ms", Console.AnsiYellow);
+        if (!mStackViewsDirty) {
+            invalidate();
+        }
+        if (mAwaitingFirstLayout) {
+            // Skip the animation if we are awaiting first layout
+            mStackViewsAnimationDuration = 0;
+        } else {
+            mStackViewsAnimationDuration = Math.max(mStackViewsAnimationDuration, duration);
+        }
+        mStackViewsDirty = true;
+    }
+
+    // XXX: Optimization: Use a mapping of Task -> View
+    private TaskView getChildViewForTask(Task t) {
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            TaskView tv = (TaskView) getChildAt(i);
+            if (tv.getTask() == t) {
+                return tv;
+            }
+        }
+        return null;
+    }
+
+    /** Update/get the transform */
+    public TaskViewTransform getStackTransform(int indexInStack, int stackScroll) {
+        TaskViewTransform transform = new TaskViewTransform();
+
+        // Return early if we have an invalid index
+        if (indexInStack < 0) return transform;
+
+        // Map the items to an continuous position relative to the specified scroll
+        int numPeekCards = Constants.Values.TaskStackView.StackPeekNumCards;
+        float overlapHeight = Constants.Values.TaskStackView.StackOverlapPct * mTaskRect.height();
+        float peekHeight = Constants.Values.TaskStackView.StackPeekHeightPct * mStackRect.height();
+        float t = ((indexInStack * overlapHeight) - stackScroll) / overlapHeight;
+        float boundedT = Math.max(t, -(numPeekCards + 1));
+
+        // Set the scale relative to its position
+        float minScale = Constants.Values.TaskStackView.StackPeekMinScale;
+        float scaleRange = 1f - minScale;
+        float scaleInc = scaleRange / numPeekCards;
+        float scale = Math.max(minScale, Math.min(1f, 1f + (boundedT * scaleInc)));
+        float scaleYOffset = ((1f - scale) * mTaskRect.height()) / 2;
+        transform.scale = scale;
+
+        // Set the translation
+        if (boundedT < 0f) {
+            transform.translationY = (int) ((Math.max(-numPeekCards, boundedT) /
+                    numPeekCards) * peekHeight - scaleYOffset);
+        } else {
+            transform.translationY = (int) (boundedT * overlapHeight - scaleYOffset);
+        }
+
+        // Update the rect and visibility
+        transform.rect.set(mTaskRect);
+        if (t < -(numPeekCards + 1)) {
+            transform.visible = false;
+        } else {
+            transform.rect.offset(0, transform.translationY);
+            Utilities.scaleRectAboutCenter(transform.rect, transform.scale);
+            transform.visible = Rect.intersects(mRect, transform.rect);
+        }
+        transform.t = t;
+        return transform;
+    }
+
+    /**
+     * Gets the stack transforms of a list of tasks, and returns the visible range of tasks.
+     */
+    private ArrayList<TaskViewTransform> getStackTransforms(ArrayList<Task> tasks,
+                                                            int stackScroll,
+                                                            int[] visibleRangeOut,
+                                                            boolean boundTranslationsToRect) {
+        // XXX: Optimization: Use binary search to find the visible range
+
+        ArrayList<TaskViewTransform> taskTransforms = new ArrayList<TaskViewTransform>();
+        int taskCount = tasks.size();
+        int firstVisibleIndex = -1;
+        int lastVisibleIndex = -1;
+        for (int i = 0; i < taskCount; i++) {
+            TaskViewTransform transform = getStackTransform(i, stackScroll);
+            taskTransforms.add(transform);
+            if (transform.visible) {
+                if (firstVisibleIndex < 0) {
+                    firstVisibleIndex = i;
+                }
+                lastVisibleIndex = i;
+            }
+
+            if (boundTranslationsToRect) {
+                transform.translationY = Math.min(transform.translationY, mRect.bottom);
+            }
+        }
+        if (visibleRangeOut != null) {
+            visibleRangeOut[0] = firstVisibleIndex;
+            visibleRangeOut[1] = lastVisibleIndex;
+        }
+        return taskTransforms;
+    }
+
+    /** Synchronizes the views with the model */
+    void synchronizeStackViewsWithModel() {
+        Console.log(Constants.DebugFlags.TaskStack.SynchronizeViewsWithModel,
+                "[TaskStackView|synchronizeViewsWithModel]",
+                "mStackViewsDirty: " + mStackViewsDirty, Console.AnsiYellow);
+        if (mStackViewsDirty) {
+            // XXX: Consider using TaskViewTransform pool to prevent allocations
+            // XXX: Iterate children views, update transforms and remove all that are not visible
+            //      For all remaining tasks, update transforms and if visible add the view
+
+            // Get all the task transforms
+            int[] visibleRange = mTmpVisibleRange;
+            int stackScroll = getStackScroll();
+            ArrayList<Task> tasks = mStack.getTasks();
+            ArrayList<TaskViewTransform> taskTransforms = getStackTransforms(tasks, stackScroll,
+                    visibleRange, false);
+
+            // Update the visible state of all the tasks
+            int taskCount = tasks.size();
+            for (int i = 0; i < taskCount; i++) {
+                Task task = tasks.get(i);
+                TaskViewTransform transform = taskTransforms.get(i);
+                TaskView tv = getChildViewForTask(task);
+
+                if (transform.visible) {
+                    if (tv == null) {
+                        tv = mViewPool.pickUpViewFromPool(task, task);
+                        // When we are picking up a new view from the view pool, prepare it for any
+                        // following animation by putting it in a reasonable place
+                        if (mStackViewsAnimationDuration > 0 && i != 0) {
+                            int fromIndex = (transform.t < 0) ? (visibleRange[0] - 1) :
+                                    (visibleRange[1] + 1);
+                            tv.updateViewPropertiesToTaskTransform(null,
+                                    getStackTransform(fromIndex, stackScroll), 0);
+                        }
+                    }
+                } else {
+                    if (tv != null) {
+                        mViewPool.returnViewToPool(tv);
+                    }
+                }
+            }
+
+            // Update all the remaining view children
+            // NOTE: We have to iterate in reverse where because we are removing views directly
+            int childCount = getChildCount();
+            for (int i = childCount - 1; i >= 0; i--) {
+                TaskView tv = (TaskView) getChildAt(i);
+                Task task = tv.getTask();
+                int taskIndex = mStack.indexOfTask(task);
+                if (taskIndex < 0 || !taskTransforms.get(taskIndex).visible) {
+                    mViewPool.returnViewToPool(tv);
+                } else {
+                    tv.updateViewPropertiesToTaskTransform(null, taskTransforms.get(taskIndex),
+                            mStackViewsAnimationDuration);
+                }
+            }
+
+            Console.log(Constants.DebugFlags.TaskStack.SynchronizeViewsWithModel,
+                    "  [TaskStackView|viewChildren]", "" + getChildCount());
+
+            mStackViewsAnimationDuration = 0;
+            mStackViewsDirty = false;
+        }
+    }
+
+    /** Sets the current stack scroll */
+    public void setStackScroll(int value) {
+        mStackScroll = value;
+        requestSynchronizeStackViewsWithModel();
+
+        // Close any open info panes if the user has scrolled away from them
+        boolean isAnimatingScroll = (mScrollAnimator != null && mScrollAnimator.isRunning());
+        if (mLastInfoPaneStackScroll > -1 && !isAnimatingScroll) {
+            RecentsConfiguration config = RecentsConfiguration.getInstance();
+            if (Math.abs(mStackScroll - mLastInfoPaneStackScroll) >
+                    config.taskStackScrollDismissInfoPaneDistance) {
+                // Close any open info panes
+                closeOpenInfoPanes();
+            }
+        }
+    }
+    /** Sets the current stack scroll without synchronizing the stack view with the model */
+    public void setStackScrollRaw(int value) {
+        mStackScroll = value;
+    }
+
+    /** Gets the current stack scroll */
+    public int getStackScroll() {
+        return mStackScroll;
+    }
+
+    /** Animates the stack scroll into bounds */
+    ObjectAnimator animateBoundScroll() {
+        int curScroll = getStackScroll();
+        int newScroll = Math.max(mMinScroll, Math.min(mMaxScroll, curScroll));
+        if (newScroll != curScroll) {
+            // Enable hw layers on the stack
+            addHwLayersRefCount("animateBoundScroll");
+
+            // Start a new scroll animation
+            animateScroll(curScroll, newScroll, new Runnable() {
+                @Override
+                public void run() {
+                    // Disable hw layers on the stack
+                    decHwLayersRefCount("animateBoundScroll");
+                }
+            });
+        }
+        return mScrollAnimator;
+    }
+
+    /** Animates the stack scroll */
+    void animateScroll(int curScroll, int newScroll, final Runnable postRunnable) {
+        // Abort any current animations
+        abortScroller();
+        abortBoundScrollAnimation();
+
+        mScrollAnimator = ObjectAnimator.ofInt(this, "stackScroll", curScroll, newScroll);
+        mScrollAnimator.setDuration(Utilities.calculateTranslationAnimationDuration(newScroll -
+                curScroll, 250));
+        mScrollAnimator.setInterpolator(BakedBezierInterpolator.INSTANCE);
+        mScrollAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+            @Override
+            public void onAnimationUpdate(ValueAnimator animation) {
+                setStackScroll((Integer) animation.getAnimatedValue());
+            }
+        });
+        mScrollAnimator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                if (postRunnable != null) {
+                    postRunnable.run();
+                }
+                mScrollAnimator.removeAllListeners();
+            }
+        });
+        mScrollAnimator.start();
+    }
+
+    /** Aborts any current stack scrolls */
+    void abortBoundScrollAnimation() {
+        if (mScrollAnimator != null) {
+            mScrollAnimator.cancel();
+        }
+    }
+
+    /** Aborts the scroller and any current fling */
+    void abortScroller() {
+        if (!mScroller.isFinished()) {
+            // Abort the scroller
+            mScroller.abortAnimation();
+            // And disable hw layers on the stack
+            decHwLayersRefCount("flingScroll");
+        }
+    }
+
+    /** Bounds the current scroll if necessary */
+    public boolean boundScroll() {
+        int curScroll = getStackScroll();
+        int newScroll = Math.max(mMinScroll, Math.min(mMaxScroll, curScroll));
+        if (newScroll != curScroll) {
+            setStackScroll(newScroll);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * Bounds the current scroll if necessary, but does not synchronize the stack view with the
+     * model.
+     */
+    public boolean boundScrollRaw() {
+        int curScroll = getStackScroll();
+        int newScroll = Math.max(mMinScroll, Math.min(mMaxScroll, curScroll));
+        if (newScroll != curScroll) {
+            setStackScrollRaw(newScroll);
+            return true;
+        }
+        return false;
+    }
+
+    /** Returns whether the specified scroll is out of bounds */
+    boolean isScrollOutOfBounds(int scroll) {
+        return (scroll < mMinScroll) || (scroll > mMaxScroll);
+    }
+    boolean isScrollOutOfBounds() {
+        return isScrollOutOfBounds(getStackScroll());
+    }
+
+    /** Updates the min and max virtual scroll bounds */
+    void updateMinMaxScroll(boolean boundScrollToNewMinMax) {
+        // Compute the min and max scroll values
+        int numTasks = Math.max(1, mStack.getTaskCount());
+        int taskHeight = mTaskRect.height();
+        int stackHeight = mStackRectSansPeek.height();
+        int maxScrollHeight = taskHeight + (int) ((numTasks - 1) *
+                Constants.Values.TaskStackView.StackOverlapPct * taskHeight);
+
+        if (numTasks <= 1) {
+            // If there is only one task, then center the task in the stack rect (sans peek)
+            mMinScroll = mMaxScroll = -(stackHeight - taskHeight) / 2;
+        } else {
+            mMinScroll = Math.min(stackHeight, maxScrollHeight) - stackHeight;
+            mMaxScroll = maxScrollHeight - stackHeight;
+        }
+
+        // Debug logging
+        if (Constants.DebugFlags.UI.MeasureAndLayout) {
+            Console.log("  [TaskStack|minScroll] " + mMinScroll);
+            Console.log("  [TaskStack|maxScroll] " + mMaxScroll);
+        }
+
+        if (boundScrollToNewMinMax) {
+            boundScroll();
+        }
+    }
+
+    /** Closes any open info panes. */
+    boolean closeOpenInfoPanes() {
+        if (!Constants.DebugFlags.App.EnableInfoPane) return false;
+
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            TaskView tv = (TaskView) getChildAt(i);
+            if (tv.isInfoPaneVisible()) {
+                tv.hideInfoPane();
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /** Enables the hw layers and increments the hw layer requirement ref count */
+    void addHwLayersRefCount(String reason) {
+        Console.log(Constants.DebugFlags.UI.HwLayers,
+                "[TaskStackView|addHwLayersRefCount] refCount: " +
+                        mHwLayersRefCount + "->" + (mHwLayersRefCount + 1) + " " + reason);
+        if (mHwLayersRefCount == 0) {
+            // Enable hw layers on each of the children
+            int childCount = getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                TaskView tv = (TaskView) getChildAt(i);
+                tv.enableHwLayers();
+            }
+        }
+        mHwLayersRefCount++;
+    }
+
+    /** Decrements the hw layer requirement ref count and disables the hw layers when we don't
+        need them anymore. */
+    void decHwLayersRefCount(String reason) {
+        Console.log(Constants.DebugFlags.UI.HwLayers,
+                "[TaskStackView|decHwLayersRefCount] refCount: " +
+                        mHwLayersRefCount + "->" + (mHwLayersRefCount - 1) + " " + reason);
+        mHwLayersRefCount--;
+        if (mHwLayersRefCount == 0) {
+            // Disable hw layers on each of the children
+            int childCount = getChildCount();
+            for (int i = 0; i < childCount; i++) {
+                TaskView tv = (TaskView) getChildAt(i);
+                tv.disableHwLayers();
+            }
+        } else if (mHwLayersRefCount < 0) {
+            new Throwable("Invalid hw layers ref count").printStackTrace();
+            Console.logError(getContext(), "Invalid HW layers ref count");
+        }
+    }
+
+    @Override
+    public void computeScroll() {
+        if (mScroller.computeScrollOffset()) {
+            setStackScroll(mScroller.getCurrY());
+            invalidate();
+
+            // If we just finished scrolling, then disable the hw layers
+            if (mScroller.isFinished()) {
+                decHwLayersRefCount("finishedFlingScroll");
+            }
+        }
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        return mTouchHandler.onInterceptTouchEvent(ev);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        return mTouchHandler.onTouchEvent(ev);
+    }
+
+    @Override
+    public void dispatchDraw(Canvas canvas) {
+        Console.log(Constants.DebugFlags.UI.Draw, "[TaskStackView|dispatchDraw]", "",
+                Console.AnsiPurple);
+        synchronizeStackViewsWithModel();
+        super.dispatchDraw(canvas);
+    }
+
+    @Override
+    protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
+        if (Constants.DebugFlags.App.EnableTaskStackClipping) {
+            TaskView tv = (TaskView) child;
+            TaskView nextTv = null;
+            int curIndex = indexOfChild(tv);
+            if ((curIndex > -1) && (curIndex < (getChildCount() - 1))) {
+                // Clip against the next view (if we aren't animating its alpha)
+                nextTv = (TaskView) getChildAt(curIndex + 1);
+                if (nextTv.getAlpha() == 1f) {
+                    Rect curRect = tv.getClippingRect(mTmpRect);
+                    Rect nextRect = nextTv.getClippingRect(mTmpRect2);
+                    RecentsConfiguration config = RecentsConfiguration.getInstance();
+                    // The hit rects are relative to the task view, which needs to be offset by the
+                    // system bar height
+                    curRect.offset(0, config.systemInsets.top);
+                    nextRect.offset(0, config.systemInsets.top);
+                    // Compute the clip region
+                    Region clipRegion = new Region();
+                    clipRegion.op(curRect, Region.Op.UNION);
+                    clipRegion.op(nextRect, Region.Op.DIFFERENCE);
+                    // Clip the canvas
+                    int saveCount = canvas.save(Canvas.CLIP_SAVE_FLAG);
+                    canvas.clipRegion(clipRegion);
+                    boolean invalidate = super.drawChild(canvas, child, drawingTime);
+                    canvas.restoreToCount(saveCount);
+                    return invalidate;
+                }
+            }
+        }
+        return super.drawChild(canvas, child, drawingTime);
+    }
+
+    /** Computes the stack and task rects */
+    public void computeRects(int width, int height, int insetBottom) {
+        // Note: We let the stack view be the full height because we want the cards to go under the
+        //       navigation bar if possible.  However, the stack rects which we use to calculate
+        //       max scroll, etc. need to take the nav bar into account
+
+        // Compute the stack rects
+        mRect.set(0, 0, width, height);
+        mStackRect.set(mRect);
+        mStackRect.bottom -= insetBottom;
+
+        int smallestDimension = Math.min(width, height);
+        int padding = (int) (Constants.Values.TaskStackView.StackPaddingPct * smallestDimension / 2f);
+        if (Constants.DebugFlags.App.EnableSearchButton) {
+            // Don't need to pad the top since we have some padding on the search bar already
+            mStackRect.left += padding;
+            mStackRect.right -= padding;
+            mStackRect.bottom -= padding;
+        } else {
+            mStackRect.inset(padding, padding);
+        }
+        mStackRectSansPeek.set(mStackRect);
+        mStackRectSansPeek.top += Constants.Values.TaskStackView.StackPeekHeightPct * mStackRect.height();
+
+        // Compute the task rect
+        int minHeight = (int) (mStackRect.height() -
+                (Constants.Values.TaskStackView.StackPeekHeightPct * mStackRect.height()));
+        int size = Math.min(minHeight, Math.min(mStackRect.width(), mStackRect.height()));
+        int left = mStackRect.left + (mStackRect.width() - size) / 2;
+        mTaskRect.set(left, mStackRectSansPeek.top,
+                left + size, mStackRectSansPeek.top + size);
+
+        // Update the scroll bounds
+        updateMinMaxScroll(false);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        int width = MeasureSpec.getSize(widthMeasureSpec);
+        int height = MeasureSpec.getSize(heightMeasureSpec);
+        Console.log(Constants.DebugFlags.UI.MeasureAndLayout, "[TaskStackView|measure]",
+                "width: " + width + " height: " + height +
+                " awaitingFirstLayout: " + mAwaitingFirstLayout, Console.AnsiGreen);
+
+        // Compute our stack/task rects
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        computeRects(width, height, config.systemInsets.bottom);
+
+        // Debug logging
+        if (Constants.DebugFlags.UI.MeasureAndLayout) {
+            Console.log("  [TaskStack|fullRect] " + mRect);
+            Console.log("  [TaskStack|stackRect] " + mStackRect);
+            Console.log("  [TaskStack|stackRectSansPeek] " + mStackRectSansPeek);
+            Console.log("  [TaskStack|taskRect] " + mTaskRect);
+        }
+
+        // If this is the first layout, then scroll to the front of the stack and synchronize the
+        // stack views immediately
+        if (mAwaitingFirstLayout) {
+            setStackScroll(mMaxScroll);
+            requestSynchronizeStackViewsWithModel();
+            synchronizeStackViewsWithModel();
+
+            // Animate the task bar of the first task view
+            if (config.launchedWithThumbnailAnimation &&
+                    Constants.Values.TaskView.AnimateFrontTaskBarOnEnterRecents) {
+                TaskView tv = (TaskView) getChildAt(getChildCount() - 1);
+                if (tv != null) {
+                    tv.animateOnEnterRecents();
+                }
+            }
+        }
+
+        // Measure each of the children
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            TaskView t = (TaskView) getChildAt(i);
+            t.measure(MeasureSpec.makeMeasureSpec(mTaskRect.width(), MeasureSpec.EXACTLY),
+                    MeasureSpec.makeMeasureSpec(mTaskRect.height(), MeasureSpec.EXACTLY));
+        }
+
+        setMeasuredDimension(width, height);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        Console.log(Constants.DebugFlags.UI.MeasureAndLayout, "[TaskStackView|layout]",
+                "" + new Rect(left, top, right, bottom), Console.AnsiGreen);
+
+        // Debug logging
+        if (Constants.DebugFlags.UI.MeasureAndLayout) {
+            Console.log("  [TaskStack|fullRect] " + mRect);
+            Console.log("  [TaskStack|stackRect] " + mStackRect);
+            Console.log("  [TaskStack|stackRectSansPeek] " + mStackRectSansPeek);
+            Console.log("  [TaskStack|taskRect] " + mTaskRect);
+        }
+
+        // Layout each of the children
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            TaskView t = (TaskView) getChildAt(i);
+            t.layout(mTaskRect.left, mStackRectSansPeek.top,
+                    mTaskRect.right, mStackRectSansPeek.top + mTaskRect.height());
+        }
+
+        if (mAwaitingFirstLayout) {
+            mAwaitingFirstLayout = false;
+        }
+    }
+
+    @Override
+    protected void onScrollChanged(int l, int t, int oldl, int oldt) {
+        super.onScrollChanged(l, t, oldl, oldt);
+        requestSynchronizeStackViewsWithModel();
+    }
+
+    public boolean isTransformedTouchPointInView(float x, float y, View child) {
+        return isTransformedTouchPointInView(x, y, child, null);
+    }
+
+    /**** TaskStackCallbacks Implementation ****/
+
+    @Override
+    public void onStackTaskAdded(TaskStack stack, Task t) {
+        requestSynchronizeStackViewsWithModel();
+    }
+
+    @Override
+    public void onStackTaskRemoved(TaskStack stack, Task t) {
+        // Remove the view associated with this task, we can't rely on updateTransforms
+        // to work here because the task is no longer in the list
+        int childCount = getChildCount();
+        for (int i = childCount - 1; i >= 0; i--) {
+            TaskView tv = (TaskView) getChildAt(i);
+            if (tv.getTask() == t) {
+                mViewPool.returnViewToPool(tv);
+                break;
+            }
+        }
+
+        updateMinMaxScroll(true);
+        int movement = (int) (Constants.Values.TaskStackView.StackOverlapPct * mTaskRect.height());
+        requestSynchronizeStackViewsWithModel(Utilities.calculateTranslationAnimationDuration(movement));
+    }
+
+    /**
+     * Creates the animations for all the children views that need to be removed or to move views
+     * to their un/filtered position when we are un/filtering a stack, and returns the duration
+     * for these animations.
+     */
+    int getExitTransformsForFilterAnimation(ArrayList<Task> curTasks,
+                        ArrayList<TaskViewTransform> curTaskTransforms,
+                        ArrayList<Task> tasks, ArrayList<TaskViewTransform> taskTransforms,
+                        HashMap<TaskView, Pair<Integer, TaskViewTransform>> childViewTransformsOut,
+                        ArrayList<TaskView> childrenToRemoveOut,
+                        RecentsConfiguration config) {
+        // Animate all of the existing views out of view (if they are not in the visible range in
+        // the new stack) or to their final positions in the new stack
+        int movement = 0;
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            TaskView tv = (TaskView) getChildAt(i);
+            Task task = tv.getTask();
+            int taskIndex = tasks.indexOf(task);
+            TaskViewTransform toTransform;
+
+            // If the view is no longer visible, then we should just animate it out
+            boolean willBeInvisible = taskIndex < 0 || !taskTransforms.get(taskIndex).visible;
+            if (willBeInvisible) {
+                if (taskIndex < 0) {
+                    toTransform = curTaskTransforms.get(curTasks.indexOf(task));
+                } else {
+                    toTransform = new TaskViewTransform(taskTransforms.get(taskIndex));
+                }
+                tv.prepareTaskTransformForFilterTaskVisible(toTransform);
+                childrenToRemoveOut.add(tv);
+            } else {
+                toTransform = taskTransforms.get(taskIndex);
+                // Use the movement of the visible views to calculate the duration of the animation
+                movement = Math.max(movement, Math.abs(toTransform.translationY -
+                        (int) tv.getTranslationY()));
+            }
+            childViewTransformsOut.put(tv, new Pair(0, toTransform));
+        }
+        return Utilities.calculateTranslationAnimationDuration(movement,
+                config.filteringCurrentViewsMinAnimDuration);
+    }
+
+    /**
+     * Creates the animations for all the children views that need to be animated in when we are
+     * un/filtering a stack, and returns the duration for these animations.
+     */
+    int getEnterTransformsForFilterAnimation(ArrayList<Task> tasks,
+                         ArrayList<TaskViewTransform> taskTransforms,
+                         HashMap<TaskView, Pair<Integer, TaskViewTransform>> childViewTransformsOut,
+                         RecentsConfiguration config) {
+        int offset = 0;
+        int movement = 0;
+        int taskCount = tasks.size();
+        for (int i = taskCount - 1; i >= 0; i--) {
+            Task task = tasks.get(i);
+            TaskViewTransform toTransform = taskTransforms.get(i);
+            if (toTransform.visible) {
+                TaskView tv = getChildViewForTask(task);
+                if (tv == null) {
+                    // For views that are not already visible, animate them in
+                    tv = mViewPool.pickUpViewFromPool(task, task);
+
+                    // Compose a new transform to fade and slide the new task in
+                    TaskViewTransform fromTransform = new TaskViewTransform(toTransform);
+                    tv.prepareTaskTransformForFilterTaskHidden(fromTransform);
+                    tv.updateViewPropertiesToTaskTransform(null, fromTransform, 0);
+
+                    int startDelay = offset *
+                            Constants.Values.TaskStackView.FilterStartDelay;
+                    childViewTransformsOut.put(tv, new Pair(startDelay, toTransform));
+
+                    // Use the movement of the new views to calculate the duration of the animation
+                    movement = Math.max(movement,
+                            Math.abs(toTransform.translationY - fromTransform.translationY));
+                    offset++;
+                }
+            }
+        }
+        return Utilities.calculateTranslationAnimationDuration(movement,
+                config.filteringNewViewsMinAnimDuration);
+    }
+
+    /** Orchestrates the animations of the current child views and any new views. */
+    void doFilteringAnimation(ArrayList<Task> curTasks,
+                              ArrayList<TaskViewTransform> curTaskTransforms,
+                              final ArrayList<Task> tasks,
+                              final ArrayList<TaskViewTransform> taskTransforms) {
+        final RecentsConfiguration config = RecentsConfiguration.getInstance();
+
+        // Calculate the transforms to animate out all the existing views if they are not in the
+        // new visible range (or to their final positions in the stack if they are)
+        final ArrayList<TaskView> childrenToRemove = new ArrayList<TaskView>();
+        final HashMap<TaskView, Pair<Integer, TaskViewTransform>> childViewTransforms =
+                new HashMap<TaskView, Pair<Integer, TaskViewTransform>>();
+        int duration = getExitTransformsForFilterAnimation(curTasks, curTaskTransforms, tasks,
+                taskTransforms, childViewTransforms, childrenToRemove, config);
+
+        // If all the current views are in the visible range of the new stack, then don't wait for
+        // views to animate out and animate all the new views into their place
+        final boolean unifyNewViewAnimation = childrenToRemove.isEmpty();
+        if (unifyNewViewAnimation) {
+            int inDuration = getEnterTransformsForFilterAnimation(tasks, taskTransforms,
+                    childViewTransforms, config);
+            duration = Math.max(duration, inDuration);
+        }
+
+        // Animate all the views to their final transforms
+        for (final TaskView tv : childViewTransforms.keySet()) {
+            Pair<Integer, TaskViewTransform> t = childViewTransforms.get(tv);
+            tv.animate().cancel();
+            tv.animate()
+                    .setStartDelay(t.first)
+                    .withEndAction(new Runnable() {
+                        @Override
+                        public void run() {
+                            childViewTransforms.remove(tv);
+                            if (childViewTransforms.isEmpty()) {
+                                // Return all the removed children to the view pool
+                                for (TaskView tv : childrenToRemove) {
+                                    mViewPool.returnViewToPool(tv);
+                                }
+
+                                if (!unifyNewViewAnimation) {
+                                    // For views that are not already visible, animate them in
+                                    childViewTransforms.clear();
+                                    int duration = getEnterTransformsForFilterAnimation(tasks,
+                                            taskTransforms, childViewTransforms, config);
+                                    for (final TaskView tv : childViewTransforms.keySet()) {
+                                        Pair<Integer, TaskViewTransform> t = childViewTransforms.get(tv);
+                                        tv.animate().setStartDelay(t.first);
+                                        tv.updateViewPropertiesToTaskTransform(null, t.second, duration);
+                                    }
+                                }
+                            }
+                        }
+                    });
+            tv.updateViewPropertiesToTaskTransform(null, t.second, duration);
+        }
+    }
+
+    @Override
+    public void onStackFiltered(TaskStack newStack, final ArrayList<Task> curTasks,
+                                Task filteredTask) {
+        // Close any open info panes
+        closeOpenInfoPanes();
+
+        // Stash the scroll and filtered task for us to restore to when we unfilter
+        mStashedScroll = getStackScroll();
+
+        // Calculate the current task transforms
+        ArrayList<TaskViewTransform> curTaskTransforms =
+                getStackTransforms(curTasks, getStackScroll(), null, true);
+
+        // Scroll the item to the top of the stack (sans-peek) rect so that we can see it better
+        updateMinMaxScroll(false);
+        float overlapHeight = Constants.Values.TaskStackView.StackOverlapPct * mTaskRect.height();
+        setStackScrollRaw((int) (newStack.indexOfTask(filteredTask) * overlapHeight));
+        boundScrollRaw();
+
+        // Compute the transforms of the items in the new stack after setting the new scroll
+        final ArrayList<Task> tasks = mStack.getTasks();
+        final ArrayList<TaskViewTransform> taskTransforms =
+                getStackTransforms(mStack.getTasks(), getStackScroll(), null, true);
+
+        // Animate
+        doFilteringAnimation(curTasks, curTaskTransforms, tasks, taskTransforms);
+    }
+
+    @Override
+    public void onStackUnfiltered(TaskStack newStack, final ArrayList<Task> curTasks) {
+        // Close any open info panes
+        closeOpenInfoPanes();
+
+        // Calculate the current task transforms
+        final ArrayList<TaskViewTransform> curTaskTransforms =
+                getStackTransforms(curTasks, getStackScroll(), null, true);
+
+        // Restore the stashed scroll
+        updateMinMaxScroll(false);
+        setStackScrollRaw(mStashedScroll);
+        boundScrollRaw();
+
+        // Compute the transforms of the items in the new stack after restoring the stashed scroll
+        final ArrayList<Task> tasks = mStack.getTasks();
+        final ArrayList<TaskViewTransform> taskTransforms =
+                getStackTransforms(tasks, getStackScroll(), null, true);
+
+        // Animate
+        doFilteringAnimation(curTasks, curTaskTransforms, tasks, taskTransforms);
+
+        // Clear the saved vars
+        mStashedScroll = 0;
+    }
+
+    /**** ViewPoolConsumer Implementation ****/
+
+    @Override
+    public TaskView createView(Context context) {
+        Console.log(Constants.DebugFlags.ViewPool.PoolCallbacks, "[TaskStackView|createPoolView]");
+        return (TaskView) mInflater.inflate(R.layout.recents_task_view, this, false);
+    }
+
+    @Override
+    public void prepareViewToEnterPool(TaskView tv) {
+        Task task = tv.getTask();
+        tv.resetViewProperties();
+        Console.log(Constants.DebugFlags.ViewPool.PoolCallbacks, "[TaskStackView|returnToPool]",
+                tv.getTask() + " tv: " + tv);
+
+        // Report that this tasks's data is no longer being used
+        RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
+        loader.unloadTaskData(task);
+
+        // Detach the view from the hierarchy
+        detachViewFromParent(tv);
+
+        // Disable hw layers on this view
+        tv.disableHwLayers();
+    }
+
+    @Override
+    public void prepareViewToLeavePool(TaskView tv, Task prepareData, boolean isNewView) {
+        Console.log(Constants.DebugFlags.ViewPool.PoolCallbacks, "[TaskStackView|leavePool]",
+                "isNewView: " + isNewView);
+
+        // Setup and attach the view to the window
+        Task task = prepareData;
+        // We try and rebind the task (this MUST be done before the task filled)
+        tv.onTaskBound(task);
+        // Request that this tasks's data be filled
+        RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
+        loader.loadTaskData(task);
+
+        // Find the index where this task should be placed in the children
+        int insertIndex = -1;
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            Task tvTask = ((TaskView) getChildAt(i)).getTask();
+            if (mStack.containsTask(task) && (mStack.indexOfTask(task) < mStack.indexOfTask(tvTask))) {
+                insertIndex = i;
+                break;
+            }
+        }
+
+        // Add/attach the view to the hierarchy
+        Console.log(Constants.DebugFlags.ViewPool.PoolCallbacks, "  [TaskStackView|insertIndex]",
+                "" + insertIndex);
+        if (isNewView) {
+            addView(tv, insertIndex);
+
+            // Set the callbacks and listeners for this new view
+            tv.setOnClickListener(this);
+            if (Constants.DebugFlags.App.EnableInfoPane) {
+                tv.setOnLongClickListener(this);
+            }
+            tv.setCallbacks(this);
+        } else {
+            attachViewToParent(tv, insertIndex, tv.getLayoutParams());
+        }
+
+        // Enable hw layers on this view if hw layers are enabled on the stack
+        if (mHwLayersRefCount > 0) {
+            tv.enableHwLayers();
+        }
+    }
+
+    @Override
+    public boolean hasPreferredData(TaskView tv, Task preferredData) {
+        return (tv.getTask() == preferredData);
+    }
+
+    /**** TaskViewCallbacks Implementation ****/
+
+    @Override
+    public void onTaskIconClicked(TaskView tv) {
+        Console.log(Constants.DebugFlags.UI.ClickEvents, "[TaskStack|Clicked|Icon]",
+                tv.getTask() + " is currently filtered: " + mStack.hasFilteredTasks(),
+                Console.AnsiCyan);
+        if (Constants.DebugFlags.App.EnableTaskFiltering) {
+            if (mStack.hasFilteredTasks()) {
+                mStack.unfilterTasks();
+            } else {
+                mStack.filterTasks(tv.getTask());
+            }
+        }
+    }
+
+    @Override
+    public void onTaskInfoPanelShown(TaskView tv) {
+        // Do nothing
+    }
+
+    @Override
+    public void onTaskInfoPanelHidden(TaskView tv) {
+        // Unset the saved scroll
+        mLastInfoPaneStackScroll = -1;
+    }
+
+    @Override
+    public void onTaskAppInfoClicked(TaskView tv) {
+        if (mCb != null) {
+            mCb.onTaskAppInfoLaunched(tv.getTask());
+        }
+    }
+
+    /**** View.OnClickListener Implementation ****/
+
+    @Override
+    public void onClick(View v) {
+        TaskView tv = (TaskView) v;
+        Task task = tv.getTask();
+        Console.log(Constants.DebugFlags.UI.ClickEvents, "[TaskStack|Clicked|Thumbnail]",
+                task + " cb: " + mCb);
+
+        // Close any open info panes if the user taps on another task
+        if (closeOpenInfoPanes()) {
+            return;
+        }
+
+        if (mCb != null) {
+            mCb.onTaskLaunched(this, tv, mStack, task);
+        }
+    }
+
+    @Override
+    public boolean onLongClick(View v) {
+        if (!Constants.DebugFlags.App.EnableInfoPane) return false;
+
+        TaskView tv = (TaskView) v;
+
+        // Close any other task info panels if we launch another info pane
+        closeOpenInfoPanes();
+
+        // Scroll the task view so that it is maximally visible
+        float overlapHeight = Constants.Values.TaskStackView.StackOverlapPct * mTaskRect.height();
+        int taskIndex = mStack.indexOfTask(tv.getTask());
+        int curScroll = getStackScroll();
+        int newScroll = (int) Math.max(mMinScroll, Math.min(mMaxScroll, taskIndex * overlapHeight));
+        TaskViewTransform transform = getStackTransform(taskIndex, curScroll);
+        Rect nonOverlapRect = new Rect(transform.rect);
+        if (taskIndex < (mStack.getTaskCount() - 1)) {
+            nonOverlapRect.bottom = nonOverlapRect.top + (int) overlapHeight;
+        }
+
+        // XXX: Use HW Layers
+        if (transform.t < 0f) {
+            animateScroll(curScroll, newScroll, null);
+        } else if (nonOverlapRect.bottom > mStackRectSansPeek.bottom) {
+            // Check if we are out of bounds, if so, just scroll it in such that the bottom of the
+            // task view is visible
+            newScroll = curScroll - (mStackRectSansPeek.bottom - nonOverlapRect.bottom);
+            animateScroll(curScroll, newScroll, null);
+        }
+        mLastInfoPaneStackScroll = newScroll;
+
+        // Show the info pane for this task view
+        tv.showInfoPane(new Rect(0, 0, 0, (int) overlapHeight));
+        return true;
+    }
+}
+
+/* Handles touch events */
+class TaskStackViewTouchHandler implements SwipeHelper.Callback {
+    static int INACTIVE_POINTER_ID = -1;
+
+    TaskStackView mSv;
+    VelocityTracker mVelocityTracker;
+
+    boolean mIsScrolling;
+
+    int mInitialMotionX, mInitialMotionY;
+    int mLastMotionX, mLastMotionY;
+    int mActivePointerId = INACTIVE_POINTER_ID;
+    TaskView mActiveTaskView = null;
+
+    int mTotalScrollMotion;
+    int mMinimumVelocity;
+    int mMaximumVelocity;
+    // The scroll touch slop is used to calculate when we start scrolling
+    int mScrollTouchSlop;
+    // The page touch slop is used to calculate when we start swiping
+    float mPagingTouchSlop;
+
+    SwipeHelper mSwipeHelper;
+    boolean mInterceptedBySwipeHelper;
+
+    public TaskStackViewTouchHandler(Context context, TaskStackView sv) {
+        ViewConfiguration configuration = ViewConfiguration.get(context);
+        mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
+        mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
+        mScrollTouchSlop = configuration.getScaledTouchSlop();
+        mPagingTouchSlop = configuration.getScaledPagingTouchSlop();
+        mSv = sv;
+
+
+        float densityScale = context.getResources().getDisplayMetrics().density;
+        mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, mPagingTouchSlop);
+        mSwipeHelper.setMinAlpha(1f);
+    }
+
+    /** Velocity tracker helpers */
+    void initOrResetVelocityTracker() {
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        } else {
+            mVelocityTracker.clear();
+        }
+    }
+    void initVelocityTrackerIfNotExists() {
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        }
+    }
+    void recycleVelocityTracker() {
+        if (mVelocityTracker != null) {
+            mVelocityTracker.recycle();
+            mVelocityTracker = null;
+        }
+    }
+
+    /** Returns the view at the specified coordinates */
+    TaskView findViewAtPoint(int x, int y) {
+        int childCount = mSv.getChildCount();
+        for (int i = childCount - 1; i >= 0; i--) {
+            TaskView tv = (TaskView) mSv.getChildAt(i);
+            if (tv.getVisibility() == View.VISIBLE) {
+                if (mSv.isTransformedTouchPointInView(x, y, tv)) {
+                    return tv;
+                }
+            }
+        }
+        return null;
+    }
+
+    /** Touch preprocessing for handling below */
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        Console.log(Constants.DebugFlags.UI.TouchEvents,
+                "[TaskStackViewTouchHandler|interceptTouchEvent]",
+                Console.motionEventActionToString(ev.getAction()), Console.AnsiBlue);
+
+        // Return early if we have no children
+        boolean hasChildren = (mSv.getChildCount() > 0);
+        if (!hasChildren) {
+            return false;
+        }
+
+        // Pass through to swipe helper if we are swiping
+        mInterceptedBySwipeHelper = mSwipeHelper.onInterceptTouchEvent(ev);
+        if (mInterceptedBySwipeHelper) {
+            return true;
+        }
+
+        boolean wasScrolling = !mSv.mScroller.isFinished() ||
+                (mSv.mScrollAnimator != null && mSv.mScrollAnimator.isRunning());
+        int action = ev.getAction();
+        switch (action & MotionEvent.ACTION_MASK) {
+            case MotionEvent.ACTION_DOWN: {
+                // Save the touch down info
+                mInitialMotionX = mLastMotionX = (int) ev.getX();
+                mInitialMotionY = mLastMotionY = (int) ev.getY();
+                mActivePointerId = ev.getPointerId(0);
+                mActiveTaskView = findViewAtPoint(mLastMotionX, mLastMotionY);
+                // Stop the current scroll if it is still flinging
+                mSv.abortScroller();
+                mSv.abortBoundScrollAnimation();
+                // Initialize the velocity tracker
+                initOrResetVelocityTracker();
+                mVelocityTracker.addMovement(ev);
+                // Check if the scroller is finished yet
+                mIsScrolling = !mSv.mScroller.isFinished();
+                break;
+            }
+            case MotionEvent.ACTION_MOVE: {
+                if (mActivePointerId == INACTIVE_POINTER_ID) break;
+
+                int activePointerIndex = ev.findPointerIndex(mActivePointerId);
+                int y = (int) ev.getY(activePointerIndex);
+                int x = (int) ev.getX(activePointerIndex);
+                if (Math.abs(y - mInitialMotionY) > mScrollTouchSlop) {
+                    // Save the touch move info
+                    mIsScrolling = true;
+                    // Initialize the velocity tracker if necessary
+                    initVelocityTrackerIfNotExists();
+                    mVelocityTracker.addMovement(ev);
+                    // Disallow parents from intercepting touch events
+                    final ViewParent parent = mSv.getParent();
+                    if (parent != null) {
+                        parent.requestDisallowInterceptTouchEvent(true);
+                    }
+                    // Enable HW layers
+                    mSv.addHwLayersRefCount("stackScroll");
+                }
+
+                mLastMotionX = x;
+                mLastMotionY = y;
+                break;
+            }
+            case MotionEvent.ACTION_CANCEL:
+            case MotionEvent.ACTION_UP: {
+                // Animate the scroll back if we've cancelled
+                mSv.animateBoundScroll();
+                // Disable HW layers
+                if (mIsScrolling) {
+                    mSv.decHwLayersRefCount("stackScroll");
+                }
+                // Reset the drag state and the velocity tracker
+                mIsScrolling = false;
+                mActivePointerId = INACTIVE_POINTER_ID;
+                mActiveTaskView = null;
+                mTotalScrollMotion = 0;
+                recycleVelocityTracker();
+                break;
+            }
+        }
+
+        return wasScrolling || mIsScrolling;
+    }
+
+    /** Handles touch events once we have intercepted them */
+    public boolean onTouchEvent(MotionEvent ev) {
+        Console.log(Constants.DebugFlags.UI.TouchEvents,
+                "[TaskStackViewTouchHandler|touchEvent]",
+                Console.motionEventActionToString(ev.getAction()), Console.AnsiBlue);
+
+        // Short circuit if we have no children
+        boolean hasChildren = (mSv.getChildCount() > 0);
+        if (!hasChildren) {
+            return false;
+        }
+
+        // Pass through to swipe helper if we are swiping
+        if (mInterceptedBySwipeHelper && mSwipeHelper.onTouchEvent(ev)) {
+            return true;
+        }
+
+        // Update the velocity tracker
+        initVelocityTrackerIfNotExists();
+        mVelocityTracker.addMovement(ev);
+
+        int action = ev.getAction();
+        switch (action & MotionEvent.ACTION_MASK) {
+            case MotionEvent.ACTION_DOWN: {
+                // Save the touch down info
+                mInitialMotionX = mLastMotionX = (int) ev.getX();
+                mInitialMotionY = mLastMotionY = (int) ev.getY();
+                mActivePointerId = ev.getPointerId(0);
+                mActiveTaskView = findViewAtPoint(mLastMotionX, mLastMotionY);
+                // Stop the current scroll if it is still flinging
+                mSv.abortScroller();
+                mSv.abortBoundScrollAnimation();
+                // Initialize the velocity tracker
+                initOrResetVelocityTracker();
+                mVelocityTracker.addMovement(ev);
+                // Disallow parents from intercepting touch events
+                final ViewParent parent = mSv.getParent();
+                if (parent != null) {
+                    parent.requestDisallowInterceptTouchEvent(true);
+                }
+                break;
+            }
+            case MotionEvent.ACTION_POINTER_DOWN: {
+                final int index = ev.getActionIndex();
+                mActivePointerId = ev.getPointerId(index);
+                mLastMotionX = (int) ev.getX(index);
+                mLastMotionY = (int) ev.getY(index);
+                break;
+            }
+            case MotionEvent.ACTION_MOVE: {
+                if (mActivePointerId == INACTIVE_POINTER_ID) break;
+
+                int activePointerIndex = ev.findPointerIndex(mActivePointerId);
+                int x = (int) ev.getX(activePointerIndex);
+                int y = (int) ev.getY(activePointerIndex);
+                int yTotal = Math.abs(y - mInitialMotionY);
+                int deltaY = mLastMotionY - y;
+                if (!mIsScrolling) {
+                    if (yTotal > mScrollTouchSlop) {
+                        mIsScrolling = true;
+                        // Initialize the velocity tracker
+                        initOrResetVelocityTracker();
+                        mVelocityTracker.addMovement(ev);
+                        // Disallow parents from intercepting touch events
+                        final ViewParent parent = mSv.getParent();
+                        if (parent != null) {
+                            parent.requestDisallowInterceptTouchEvent(true);
+                        }
+                        // Enable HW layers
+                        mSv.addHwLayersRefCount("stackScroll");
+                    }
+                }
+                if (mIsScrolling) {
+                    int curStackScroll = mSv.getStackScroll();
+                    if (mSv.isScrollOutOfBounds(curStackScroll + deltaY)) {
+                        // Scale the touch if we are overscrolling
+                        deltaY /= Constants.Values.TaskStackView.TouchOverscrollScaleFactor;
+                    }
+                    mSv.setStackScroll(curStackScroll + deltaY);
+                    if (mSv.isScrollOutOfBounds()) {
+                        mVelocityTracker.clear();
+                    }
+                }
+                mLastMotionX = x;
+                mLastMotionY = y;
+                mTotalScrollMotion += Math.abs(deltaY);
+                break;
+            }
+            case MotionEvent.ACTION_UP: {
+                final VelocityTracker velocityTracker = mVelocityTracker;
+                velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
+                int velocity = (int) velocityTracker.getYVelocity(mActivePointerId);
+
+                if (mIsScrolling && (Math.abs(velocity) > mMinimumVelocity)) {
+                    // Enable HW layers on the stack
+                    mSv.addHwLayersRefCount("flingScroll");
+                    int overscrollRange = (int) (Math.min(1f,
+                            Math.abs((float) velocity / mMaximumVelocity)) *
+                            Constants.Values.TaskStackView.TaskStackOverscrollRange);
+
+                    Console.log(Constants.DebugFlags.UI.TouchEvents,
+                            "[TaskStackViewTouchHandler|fling]",
+                            "scroll: " + mSv.getStackScroll() + " velocity: " + velocity +
+                                    " maxVelocity: " + mMaximumVelocity +
+                                    " overscrollRange: " + overscrollRange,
+                            Console.AnsiGreen);
+
+                    // Fling scroll
+                    mSv.mScroller.fling(0, mSv.getStackScroll(),
+                            0, -velocity,
+                            0, 0,
+                            mSv.mMinScroll, mSv.mMaxScroll,
+                            0, overscrollRange);
+                    // Invalidate to kick off computeScroll
+                    mSv.invalidate();
+                } else if (mSv.isScrollOutOfBounds()) {
+                    // Animate the scroll back into bounds
+                    // XXX: Make this animation a function of the velocity OR distance
+                    mSv.animateBoundScroll();
+                }
+
+                if (mIsScrolling) {
+                    // Disable HW layers
+                    mSv.decHwLayersRefCount("stackScroll");
+                }
+                mActivePointerId = INACTIVE_POINTER_ID;
+                mIsScrolling = false;
+                mTotalScrollMotion = 0;
+                recycleVelocityTracker();
+                break;
+            }
+            case MotionEvent.ACTION_POINTER_UP: {
+                int pointerIndex = ev.getActionIndex();
+                int pointerId = ev.getPointerId(pointerIndex);
+                if (pointerId == mActivePointerId) {
+                    // Select a new active pointer id and reset the motion state
+                    final int newPointerIndex = (pointerIndex == 0) ? 1 : 0;
+                    mActivePointerId = ev.getPointerId(newPointerIndex);
+                    mLastMotionX = (int) ev.getX(newPointerIndex);
+                    mLastMotionY = (int) ev.getY(newPointerIndex);
+                    mVelocityTracker.clear();
+                }
+                break;
+            }
+            case MotionEvent.ACTION_CANCEL: {
+                if (mIsScrolling) {
+                    // Disable HW layers
+                    mSv.decHwLayersRefCount("stackScroll");
+                }
+                if (mSv.isScrollOutOfBounds()) {
+                    // Animate the scroll back into bounds
+                    // XXX: Make this animation a function of the velocity OR distance
+                    mSv.animateBoundScroll();
+                }
+                mActivePointerId = INACTIVE_POINTER_ID;
+                mIsScrolling = false;
+                mTotalScrollMotion = 0;
+                recycleVelocityTracker();
+                break;
+            }
+        }
+        return true;
+    }
+
+    /**** SwipeHelper Implementation ****/
+
+    @Override
+    public View getChildAtPosition(MotionEvent ev) {
+        return findViewAtPoint((int) ev.getX(), (int) ev.getY());
+    }
+
+    @Override
+    public boolean canChildBeDismissed(View v) {
+        return true;
+    }
+
+    @Override
+    public void onBeginDrag(View v) {
+        // Enable HW layers
+        mSv.addHwLayersRefCount("swipeBegin");
+        // Disallow parents from intercepting touch events
+        final ViewParent parent = mSv.getParent();
+        if (parent != null) {
+            parent.requestDisallowInterceptTouchEvent(true);
+        }
+        // If the info panel is currently showing on this view, then we need to dismiss it
+        if (Constants.DebugFlags.App.EnableInfoPane) {
+            TaskView tv = (TaskView) v;
+            if (tv.isInfoPaneVisible()) {
+                tv.hideInfoPane();
+            }
+        }
+    }
+
+    @Override
+    public void onChildDismissed(View v) {
+        TaskView tv = (TaskView) v;
+        Task task = tv.getTask();
+        Activity activity = (Activity) mSv.getContext();
+
+        // Remove the task from the view
+        mSv.mStack.removeTask(task);
+
+        // Remove any stored data from the loader
+        RecentsTaskLoader loader = RecentsTaskLoader.getInstance();
+        loader.deleteTaskData(task);
+
+        // Remove the task from activity manager
+        RecentsTaskLoader.getInstance().getSystemServicesProxy().removeTask(tv.getTask().key.id);
+
+        // If there are no remaining tasks, then either unfilter the current stack, or just close
+        // the activity if there are no filtered stacks
+        if (mSv.mStack.getTaskCount() == 0) {
+            boolean shouldFinishActivity = true;
+            if (mSv.mStack.hasFilteredTasks()) {
+                mSv.mStack.unfilterTasks();
+                shouldFinishActivity = (mSv.mStack.getTaskCount() == 0);
+            }
+            if (shouldFinishActivity) {
+                activity.finish();
+            }
+        }
+
+        // Disable HW layers
+        mSv.decHwLayersRefCount("swipeComplete");
+    }
+
+    @Override
+    public void onSnapBackCompleted(View v) {
+        // Do Nothing
+    }
+
+    @Override
+    public void onDragCancelled(View v) {
+        // Disable HW layers
+        mSv.decHwLayersRefCount("swipeCancelled");
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskThumbnailView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskThumbnailView.java
new file mode 100644
index 0000000..8a9250a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskThumbnailView.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.ImageView;
+import com.android.systemui.recents.model.Task;
+
+
+/** The task thumbnail view */
+public class TaskThumbnailView extends ImageView {
+    Task mTask;
+
+    public TaskThumbnailView(Context context) {
+        this(context, null);
+    }
+
+    public TaskThumbnailView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public TaskThumbnailView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public TaskThumbnailView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        setScaleType(ScaleType.FIT_XY);
+    }
+
+    /** Binds the thumbnail view to the task */
+    void rebindToTask(Task t, boolean animate) {
+        mTask = t;
+        if (t.thumbnail != null) {
+            setImageBitmap(t.thumbnail);
+            if (animate) {
+                // XXX: Investigate how expensive it will be to create a second bitmap and crossfade
+            }
+        }
+    }
+
+    /** Unbinds the thumbnail view from the task */
+    void unbindFromTask() {
+        mTask = null;
+        setImageDrawable(null);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
new file mode 100644
index 0000000..d3b79d6
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskView.java
@@ -0,0 +1,386 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.animation.TimeInterpolator;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Path;
+import android.graphics.Point;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.animation.AccelerateInterpolator;
+import android.widget.FrameLayout;
+import com.android.systemui.R;
+import com.android.systemui.recents.BakedBezierInterpolator;
+import com.android.systemui.recents.Constants;
+import com.android.systemui.recents.RecentsConfiguration;
+import com.android.systemui.recents.Utilities;
+import com.android.systemui.recents.model.Task;
+
+
+/* A task view */
+public class TaskView extends FrameLayout implements View.OnClickListener,
+        Task.TaskCallbacks {
+    /** The TaskView callbacks */
+    interface TaskViewCallbacks {
+        public void onTaskIconClicked(TaskView tv);
+        public void onTaskInfoPanelShown(TaskView tv);
+        public void onTaskInfoPanelHidden(TaskView tv);
+        public void onTaskAppInfoClicked(TaskView tv);
+
+        // public void onTaskViewReboundToTask(TaskView tv, Task t);
+    }
+
+    int mDim;
+    int mMaxDim;
+    TimeInterpolator mDimInterpolator = new AccelerateInterpolator();
+
+    Task mTask;
+    boolean mTaskDataLoaded;
+    boolean mTaskInfoPaneVisible;
+    Point mLastTouchDown = new Point();
+    Path mRoundedRectClipPath = new Path();
+
+    TaskThumbnailView mThumbnailView;
+    TaskBarView mBarView;
+    TaskInfoView mInfoView;
+    TaskViewCallbacks mCb;
+
+
+    public TaskView(Context context) {
+        this(context, null);
+    }
+
+    public TaskView(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public TaskView(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public TaskView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        setWillNotDraw(false);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        mMaxDim = config.taskStackMaxDim;
+
+        // Bind the views
+        mThumbnailView = (TaskThumbnailView) findViewById(R.id.task_view_thumbnail);
+        mBarView = (TaskBarView) findViewById(R.id.task_view_bar);
+        mInfoView = (TaskInfoView) findViewById(R.id.task_view_info_pane);
+
+        if (mTaskDataLoaded) {
+            onTaskDataLoaded(false);
+        }
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+
+        // Update the rounded rect clip path
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        float radius = config.taskViewRoundedCornerRadiusPx;
+        mRoundedRectClipPath.reset();
+        mRoundedRectClipPath.addRoundRect(new RectF(0, 0, getMeasuredWidth(), getMeasuredHeight()),
+                radius, radius, Path.Direction.CW);
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        switch (ev.getAction()) {
+            case MotionEvent.ACTION_DOWN:
+            case MotionEvent.ACTION_MOVE:
+                mLastTouchDown.set((int) ev.getX(), (int) ev.getY());
+                break;
+        }
+        return super.onInterceptTouchEvent(ev);
+    }
+
+    /** Set callback */
+    void setCallbacks(TaskViewCallbacks cb) {
+        mCb = cb;
+    }
+
+    /** Gets the task */
+    Task getTask() {
+        return mTask;
+    }
+
+    /** Synchronizes this view's properties with the task's transform */
+    void updateViewPropertiesToTaskTransform(TaskViewTransform animateFromTransform,
+                                             TaskViewTransform toTransform, int duration) {
+        if (duration > 0) {
+            if (animateFromTransform != null) {
+                setTranslationY(animateFromTransform.translationY);
+                setScaleX(animateFromTransform.scale);
+                setScaleY(animateFromTransform.scale);
+                setAlpha(animateFromTransform.alpha);
+            }
+            animate().translationY(toTransform.translationY)
+                    .scaleX(toTransform.scale)
+                    .scaleY(toTransform.scale)
+                    .alpha(toTransform.alpha)
+                    .setDuration(duration)
+                    .setInterpolator(BakedBezierInterpolator.INSTANCE)
+                    .withLayer()
+                    .setUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+                        @Override
+                        public void onAnimationUpdate(ValueAnimator animation) {
+                            updateDimOverlayFromScale();
+                        }
+                    })
+                    .start();
+        } else {
+            setTranslationY(toTransform.translationY);
+            setScaleX(toTransform.scale);
+            setScaleY(toTransform.scale);
+            setAlpha(toTransform.alpha);
+        }
+        updateDimOverlayFromScale();
+        invalidate();
+    }
+
+    /** Resets this view's properties */
+    void resetViewProperties() {
+        setTranslationX(0f);
+        setTranslationY(0f);
+        setScaleX(1f);
+        setScaleY(1f);
+        setAlpha(1f);
+        invalidate();
+    }
+
+    /**
+     * When we are un/filtering, this method will set up the transform that we are animating to,
+     * in order to hide the task.
+     */
+    void prepareTaskTransformForFilterTaskHidden(TaskViewTransform toTransform) {
+        // Fade the view out and slide it away
+        toTransform.alpha = 0f;
+        toTransform.translationY += 200;
+    }
+
+    /**
+     * When we are un/filtering, this method will setup the transform that we are animating from,
+     * in order to show the task.
+     */
+    void prepareTaskTransformForFilterTaskVisible(TaskViewTransform fromTransform) {
+        // Fade the view in
+        fromTransform.alpha = 0f;
+    }
+
+    /** Animates this task view as it enters recents */
+    public void animateOnEnterRecents() {
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        int translate = config.pxFromDp(10);
+        mBarView.setScaleX(1.25f);
+        mBarView.setScaleY(1.25f);
+        mBarView.setAlpha(0f);
+        mBarView.setTranslationX(translate / 2);
+        mBarView.setTranslationY(-translate);
+        mBarView.animate()
+                .alpha(1f)
+                .scaleX(1f)
+                .scaleY(1f)
+                .translationX(0)
+                .translationY(0)
+                .setStartDelay(235)
+                .setInterpolator(BakedBezierInterpolator.INSTANCE)
+                .setDuration(config.taskBarEnterAnimDuration)
+                .withLayer()
+                .start();
+    }
+
+    /** Animates this task view as it exits recents */
+    public void animateOnLeavingRecents(final Runnable r) {
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+        int translate = config.pxFromDp(10);
+        mBarView.animate()
+            .alpha(0f)
+            .scaleX(1.1f)
+            .scaleY(1.1f)
+            .translationX(translate / 2)
+            .translationY(-translate)
+            .setStartDelay(0)
+            .setInterpolator(BakedBezierInterpolator.INSTANCE)
+            .setDuration(Utilities.calculateTranslationAnimationDuration(translate))
+            .withLayer()
+            .withEndAction(new Runnable() {
+                @Override
+                public void run() {
+                    post(r);
+                }
+            })
+            .start();
+    }
+
+    /** Returns the rect we want to clip (it may not be the full rect) */
+    Rect getClippingRect(Rect outRect) {
+        getHitRect(outRect);
+        // XXX: We should get the hit rect of the thumbnail view and intersect, but this is faster
+        outRect.right = outRect.left + mThumbnailView.getRight();
+        outRect.bottom = outRect.top + mThumbnailView.getBottom();
+        return outRect;
+    }
+
+    /** Returns whether this task has an info pane visible */
+    boolean isInfoPaneVisible() {
+        return mTaskInfoPaneVisible;
+    }
+
+    /** Shows the info pane if it is not visible. */
+    void showInfoPane(Rect taskVisibleRect) {
+        if (mTaskInfoPaneVisible) return;
+
+        // Remove the bar view from the visible rect and update the info pane contents
+        taskVisibleRect.top += mBarView.getMeasuredHeight();
+        mInfoView.updateContents(taskVisibleRect);
+
+        // Show the info pane and animate it into view
+        mInfoView.setVisibility(View.VISIBLE);
+        mInfoView.animateCircularClip(mLastTouchDown, 0f, 1f, null, true);
+        mInfoView.setOnClickListener(this);
+        mTaskInfoPaneVisible = true;
+
+        // Notify any callbacks
+        if (mCb != null) {
+            mCb.onTaskInfoPanelShown(this);
+        }
+    }
+
+    /** Hides the info pane if it is visible. */
+    void hideInfoPane() {
+        if (!mTaskInfoPaneVisible) return;
+        RecentsConfiguration config = RecentsConfiguration.getInstance();
+
+        // Cancel any circular clip animation
+        mInfoView.cancelCircularClipAnimation();
+
+        // Animate the info pane out
+        mInfoView.animate()
+                .alpha(0f)
+                .setDuration(config.taskViewInfoPaneAnimDuration)
+                .setInterpolator(BakedBezierInterpolator.INSTANCE)
+                .withLayer()
+                .withEndAction(new Runnable() {
+                    @Override
+                    public void run() {
+                        mInfoView.setVisibility(View.INVISIBLE);
+                        mInfoView.setOnClickListener(null);
+
+                        mInfoView.setAlpha(1f);
+                    }
+                })
+                .start();
+        mTaskInfoPaneVisible = false;
+
+        // Notify any callbacks
+        if (mCb != null) {
+            mCb.onTaskInfoPanelHidden(this);
+        }
+    }
+
+    /** Enable the hw layers on this task view */
+    void enableHwLayers() {
+        mThumbnailView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+    }
+
+    /** Disable the hw layers on this task view */
+    void disableHwLayers() {
+        mThumbnailView.setLayerType(View.LAYER_TYPE_NONE, null);
+    }
+
+    /** Update the dim as a function of the scale of this view. */
+    void updateDimOverlayFromScale() {
+        float minScale = Constants.Values.TaskStackView.StackPeekMinScale;
+        float scaleRange = 1f - minScale;
+        float dim = (1f - getScaleX()) / scaleRange;
+        dim = mDimInterpolator.getInterpolation(Math.min(dim, 1f));
+        mDim = Math.max(0, Math.min(mMaxDim, (int) (dim * 255)));
+        invalidate();
+    }
+
+    @Override
+    public void draw(Canvas canvas) {
+        // Apply the rounded rect clip path on the whole view
+        canvas.clipPath(mRoundedRectClipPath);
+
+        super.draw(canvas);
+
+        // Apply the dim if necessary
+        if (mDim > 0) {
+            canvas.drawColor(mDim << 24);
+        }
+    }
+
+    /**** TaskCallbacks Implementation ****/
+
+    /** Binds this task view to the task */
+    public void onTaskBound(Task t) {
+        mTask = t;
+        mTask.setCallbacks(this);
+    }
+
+    @Override
+    public void onTaskDataLoaded(boolean reloadingTaskData) {
+        if (mThumbnailView != null && mBarView != null && mInfoView != null) {
+            // Bind each of the views to the new task data
+            mThumbnailView.rebindToTask(mTask, reloadingTaskData);
+            mBarView.rebindToTask(mTask, reloadingTaskData);
+            // Rebind any listeners
+            mBarView.mApplicationIcon.setOnClickListener(this);
+            mInfoView.mAppInfoButton.setOnClickListener(this);
+        }
+        mTaskDataLoaded = true;
+    }
+
+    @Override
+    public void onTaskDataUnloaded() {
+        if (mThumbnailView != null && mBarView != null && mInfoView != null) {
+            // Unbind each of the views from the task data and remove the task callback
+            mTask.setCallbacks(null);
+            mThumbnailView.unbindFromTask();
+            mBarView.unbindFromTask();
+            // Unbind any listeners
+            mBarView.mApplicationIcon.setOnClickListener(null);
+            mInfoView.mAppInfoButton.setOnClickListener(null);
+        }
+        mTaskDataLoaded = false;
+    }
+
+    @Override
+    public void onClick(View v) {
+        if (v == mInfoView) {
+            // Do nothing
+        } else if (v == mBarView.mApplicationIcon) {
+            mCb.onTaskIconClicked(this);
+        } else if (v == mInfoView.mAppInfoButton) {
+            mCb.onTaskAppInfoClicked(this);
+        }
+    }
+}
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
new file mode 100644
index 0000000..0748bbb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskViewTransform.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.graphics.Rect;
+
+
+/* The transform state for a task view */
+public class TaskViewTransform {
+    public int translationY = 0;
+    public float scale = 1f;
+    public float alpha = 1f;
+    public boolean visible = false;
+    public Rect rect = new Rect();
+    float t;
+
+    public TaskViewTransform() {
+        // Do nothing
+    }
+
+    public TaskViewTransform(TaskViewTransform o) {
+        translationY = o.translationY;
+        scale = o.scale;
+        alpha = o.alpha;
+        visible = o.visible;
+        rect.set(o.rect);
+        t = o.t;
+    }
+
+    @Override
+    public String toString() {
+        return "TaskViewTransform y: " + translationY + " scale: " + scale + " alpha: " + alpha +
+                " visible: " + visible + " rect: " + rect;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/ViewPool.java b/packages/SystemUI/src/com/android/systemui/recents/views/ViewPool.java
new file mode 100644
index 0000000..af0094e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/ViewPool.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.recents.views;
+
+import android.content.Context;
+
+import java.util.Iterator;
+import java.util.LinkedList;
+
+
+/* A view pool to manage more views than we can visibly handle */
+public class ViewPool<V, T> {
+
+    /* An interface to the consumer of a view pool */
+    public interface ViewPoolConsumer<V, T> {
+        public V createView(Context context);
+        public void prepareViewToEnterPool(V v);
+        public void prepareViewToLeavePool(V v, T prepareData, boolean isNewView);
+        public boolean hasPreferredData(V v, T preferredData);
+    }
+
+    Context mContext;
+    ViewPoolConsumer<V, T> mViewCreator;
+    LinkedList<V> mPool = new LinkedList<V>();
+
+    /** Initializes the pool with a fixed predetermined pool size */
+    public ViewPool(Context context, ViewPoolConsumer<V, T> viewCreator) {
+        mContext = context;
+        mViewCreator = viewCreator;
+    }
+
+    /** Returns a view into the pool */
+    void returnViewToPool(V v) {
+        mViewCreator.prepareViewToEnterPool(v);
+        mPool.push(v);
+    }
+
+    /** Gets a view from the pool and prepares it */
+    V pickUpViewFromPool(T preferredData, T prepareData) {
+        V v = null;
+        boolean isNewView = false;
+        if (mPool.isEmpty()) {
+            v = mViewCreator.createView(mContext);
+            isNewView = true;
+        } else {
+            // Try and find a preferred view
+            Iterator<V> iter = mPool.iterator();
+            while (iter.hasNext()) {
+                V vpv = iter.next();
+                if (mViewCreator.hasPreferredData(vpv, preferredData)) {
+                    v = vpv;
+                    iter.remove();
+                    break;
+                }
+            }
+            // Otherwise, just grab the first view
+            if (v == null) {
+                v = mPool.pop();
+            }
+        }
+        mViewCreator.prepareViewToLeavePool(v, prepareData, isNewView);
+        return v;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
index 74d982a..5771299 100644
--- a/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
+++ b/packages/SystemUI/src/com/android/systemui/screenshot/GlobalScreenshot.java
@@ -98,7 +98,7 @@
 
     private final int mNotificationId;
     private final NotificationManager mNotificationManager;
-    private final Notification.Builder mNotificationBuilder;
+    private final Notification.Builder mNotificationBuilder, mPublicNotificationBuilder;
     private final File mScreenshotDir;
     private final String mImageFileName;
     private final String mImageFilePath;
@@ -152,18 +152,31 @@
         mTickerAddSpace = !mTickerAddSpace;
         mNotificationId = nId;
         mNotificationManager = nManager;
+        final long now = System.currentTimeMillis();
+
         mNotificationBuilder = new Notification.Builder(context)
             .setTicker(r.getString(R.string.screenshot_saving_ticker)
                     + (mTickerAddSpace ? " " : ""))
             .setContentTitle(r.getString(R.string.screenshot_saving_title))
             .setContentText(r.getString(R.string.screenshot_saving_text))
             .setSmallIcon(R.drawable.stat_notify_image)
-            .setWhen(System.currentTimeMillis());
+            .setWhen(now);
 
         mNotificationStyle = new Notification.BigPictureStyle()
             .bigPicture(preview);
         mNotificationBuilder.setStyle(mNotificationStyle);
 
+        // For "public" situations we want to show all the same info but
+        // omit the actual screenshot image.
+        mPublicNotificationBuilder = new Notification.Builder(context)
+                .setContentTitle(r.getString(R.string.screenshot_saving_title))
+                .setContentText(r.getString(R.string.screenshot_saving_text))
+                .setSmallIcon(R.drawable.stat_notify_image)
+                .setCategory(Notification.CATEGORY_PROGRESS)
+                .setWhen(now);
+
+        mNotificationBuilder.setPublicVersion(mPublicNotificationBuilder.build());
+
         Notification n = mNotificationBuilder.build();
         n.flags |= Notification.FLAG_NO_CLEAR;
         mNotificationManager.notify(nId, n);
@@ -280,13 +293,25 @@
             launchIntent.setDataAndType(params.imageUri, "image/png");
             launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 
+            final long now = System.currentTimeMillis();
+
             mNotificationBuilder
                 .setContentTitle(r.getString(R.string.screenshot_saved_title))
                 .setContentText(r.getString(R.string.screenshot_saved_text))
                 .setContentIntent(PendingIntent.getActivity(params.context, 0, launchIntent, 0))
-                .setWhen(System.currentTimeMillis())
+                .setWhen(now)
                 .setAutoCancel(true);
 
+            // Update the text in the public version as well
+            mPublicNotificationBuilder
+                .setContentTitle(r.getString(R.string.screenshot_saved_title))
+                .setContentText(r.getString(R.string.screenshot_saved_text))
+                .setContentIntent(PendingIntent.getActivity(params.context, 0, launchIntent, 0))
+                .setWhen(now)
+                .setAutoCancel(true);
+
+            mNotificationBuilder.setPublicVersion(mPublicNotificationBuilder.build());
+
             Notification n = mNotificationBuilder.build();
             n.flags &= ~Notification.FLAG_NO_CLEAR;
             mNotificationManager.notify(mNotificationId, n);
@@ -669,6 +694,8 @@
             .setContentText(r.getString(R.string.screenshot_failed_text))
             .setSmallIcon(R.drawable.stat_notify_image_error)
             .setWhen(System.currentTimeMillis())
+            .setVisibility(Notification.VISIBILITY_PUBLIC) // ok to show outside lockscreen
+            .setCategory(Notification.CATEGORY_ERROR)
             .setAutoCancel(true);
         Notification n =
             new Notification.BigTextStyle(b)
diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
index ff79f04..bd5e5e8 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessDialog.java
@@ -21,6 +21,8 @@
 import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.Handler;
+import android.view.Gravity;
+import android.view.KeyEvent;
 import android.view.Window;
 import android.view.WindowManager;
 import android.widget.ImageView;
@@ -67,9 +69,15 @@
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         Window window = getWindow();
-        window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);
-        window.getAttributes().privateFlags |=
+        window.setGravity(Gravity.TOP);
+        WindowManager.LayoutParams lp = window.getAttributes();
+        // Offset from the top
+        lp.y = getContext().getResources().getDimensionPixelOffset(
+                com.android.internal.R.dimen.volume_panel_top);
+        lp.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY;
+        lp.privateFlags |=
                 WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
+        window.setAttributes(lp);
         window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
         window.requestFeature(Window.FEATURE_NO_TITLE);
 
@@ -108,4 +116,13 @@
         mHandler.removeCallbacks(mDismissDialogRunnable);
     }
 
+    @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
+                keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
+                keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {
+            dismiss();
+        }
+        return super.onKeyDown(keyCode, event);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java
new file mode 100644
index 0000000..a0a5561
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSeekBar.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.settings;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.widget.SeekBar;
+
+public class ToggleSeekBar extends SeekBar {
+    public ToggleSeekBar(Context context) {
+        super(context);
+    }
+
+    public ToggleSeekBar(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public ToggleSeekBar(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (!isEnabled()) {
+            setEnabled(true);
+        }
+
+        return super.onTouchEvent(event);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
index d584043..7d38058 100644
--- a/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
+++ b/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java
@@ -19,20 +19,18 @@
 import android.content.Context;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
-import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
 import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.RelativeLayout;
 import android.widget.SeekBar;
+import android.widget.SeekBar.OnSeekBarChangeListener;
 import android.widget.TextView;
 
 import com.android.systemui.R;
 
-public class ToggleSlider extends RelativeLayout
-        implements CompoundButton.OnCheckedChangeListener, SeekBar.OnSeekBarChangeListener {
-    private static final String TAG = "StatusBar.ToggleSlider";
-
+public class ToggleSlider extends RelativeLayout {
     public interface Listener {
         public void onInit(ToggleSlider v);
         public void onChanged(ToggleSlider v, boolean tracking, boolean checked, int value);
@@ -55,20 +53,21 @@
 
     public ToggleSlider(Context context, AttributeSet attrs, int defStyle) {
         super(context, attrs, defStyle);
+
         View.inflate(context, R.layout.status_bar_toggle_slider, this);
 
         final Resources res = context.getResources();
-        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ToggleSlider,
-                defStyle, 0);
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, R.styleable.ToggleSlider, defStyle, 0);
 
-        mToggle = (CompoundButton)findViewById(R.id.toggle);
-        mToggle.setOnCheckedChangeListener(this);
-        mToggle.setBackgroundDrawable(res.getDrawable(R.drawable.status_bar_toggle_button));
+        mToggle = (CompoundButton) findViewById(R.id.toggle);
+        mToggle.setOnCheckedChangeListener(mCheckListener);
+        mToggle.setBackground(res.getDrawable(R.drawable.status_bar_toggle_button));
 
-        mSlider = (SeekBar)findViewById(R.id.slider);
-        mSlider.setOnSeekBarChangeListener(this);
+        mSlider = (SeekBar) findViewById(R.id.slider);
+        mSlider.setOnSeekBarChangeListener(mSeekListener);
 
-        mLabel = (TextView)findViewById(R.id.label);
+        mLabel = (TextView) findViewById(R.id.label);
         mLabel.setText(a.getString(R.styleable.ToggleSlider_text));
 
         a.recycle();
@@ -82,50 +81,6 @@
         }
     }
 
-    public void onCheckedChanged(CompoundButton toggle, boolean checked) {
-        Drawable thumb;
-        Drawable slider;
-        final Resources res = getContext().getResources();
-        if (checked) {
-            thumb = res.getDrawable(
-                    com.android.internal.R.drawable.scrubber_control_disabled_holo);
-            slider = res.getDrawable(
-                    R.drawable.status_bar_settings_slider_disabled);
-        } else {
-            thumb = res.getDrawable(
-                    com.android.internal.R.drawable.scrubber_control_selector_holo);
-            slider = res.getDrawable(
-                    com.android.internal.R.drawable.scrubber_progress_horizontal_holo_dark);
-        }
-        mSlider.setThumb(thumb);
-        mSlider.setProgressDrawable(slider);
-
-        if (mListener != null) {
-            mListener.onChanged(this, mTracking, checked, mSlider.getProgress());
-        }
-    }
-
-    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
-        if (mListener != null) {
-            mListener.onChanged(this, mTracking, mToggle.isChecked(), progress);
-        }
-    }
-
-    public void onStartTrackingTouch(SeekBar seekBar) {
-        mTracking = true;
-        if (mListener != null) {
-            mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress());
-        }
-        mToggle.setChecked(false);
-    }
-
-    public void onStopTrackingTouch(SeekBar seekBar) {
-        mTracking = false;
-        if (mListener != null) {
-            mListener.onChanged(this, mTracking, mToggle.isChecked(), mSlider.getProgress());
-        }
-    }
-
     public void setOnChangedListener(Listener l) {
         mListener = l;
     }
@@ -145,5 +100,49 @@
     public void setValue(int value) {
         mSlider.setProgress(value);
     }
+
+    private final OnCheckedChangeListener mCheckListener = new OnCheckedChangeListener() {
+        @Override
+        public void onCheckedChanged(CompoundButton toggle, boolean checked) {
+            mSlider.setEnabled(!checked);
+
+            if (mListener != null) {
+                mListener.onChanged(
+                        ToggleSlider.this, mTracking, checked, mSlider.getProgress());
+            }
+        }
+    };
+
+    private final OnSeekBarChangeListener mSeekListener = new OnSeekBarChangeListener() {
+        @Override
+        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
+            if (mListener != null) {
+                mListener.onChanged(
+                        ToggleSlider.this, mTracking, mToggle.isChecked(), progress);
+            }
+        }
+
+        @Override
+        public void onStartTrackingTouch(SeekBar seekBar) {
+            mTracking = true;
+
+            if (mListener != null) {
+                mListener.onChanged(
+                        ToggleSlider.this, mTracking, mToggle.isChecked(), mSlider.getProgress());
+            }
+
+            mToggle.setChecked(false);
+        }
+
+        @Override
+        public void onStopTrackingTouch(SeekBar seekBar) {
+            mTracking = false;
+
+            if (mListener != null) {
+                mListener.onChanged(
+                        ToggleSlider.this, mTracking, mToggle.isChecked(), mSlider.getProgress());
+            }
+        }
+    };
 }
 
diff --git a/packages/SystemUI/src/com/android/systemui/settings/UserSwitcherHostView.java b/packages/SystemUI/src/com/android/systemui/settings/UserSwitcherHostView.java
new file mode 100644
index 0000000..d67e7cb
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/settings/UserSwitcherHostView.java
@@ -0,0 +1,178 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.settings;
+
+import com.android.systemui.R;
+
+import android.app.ActivityManagerNative;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.RemoteException;
+import android.os.UserManager;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManagerGlobal;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * A quick and dirty view to show a user switcher.
+ */
+public class UserSwitcherHostView extends FrameLayout implements ListView.OnItemClickListener {
+
+    private static final String TAG = "UserSwitcherDialog";
+
+    private ArrayList<UserInfo> mUserInfo = new ArrayList<UserInfo>();
+    private Adapter mAdapter = new Adapter();
+    private UserManager mUserManager;
+    private Runnable mFinishRunnable;
+    private ListView mListView;
+
+    public UserSwitcherHostView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+
+        if (isInEditMode()) {
+            return;
+        }
+        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+    }
+
+    public UserSwitcherHostView(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.listViewStyle);
+    }
+
+    public UserSwitcherHostView(Context context) {
+        this(context, null);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mListView = (ListView) findViewById(android.R.id.list);
+        mListView.setAdapter(mAdapter);
+        mListView.setOnItemClickListener(this);
+    }
+
+    @Override
+    public void onItemClick(AdapterView<?> l, View v, int position, long id) {
+        int userId = mAdapter.getItem(position).id;
+        try {
+            WindowManagerGlobal.getWindowManagerService().lockNow(null);
+            ActivityManagerNative.getDefault().switchUser(userId);
+            finish();
+        } catch (RemoteException e) {
+            Log.e(TAG, "Couldn't switch user.", e);
+        }
+    }
+
+    private void finish() {
+        if (mFinishRunnable != null) {
+            mFinishRunnable.run();
+        }
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (event.getAction() == MotionEvent.ACTION_UP) {
+            finish();
+        }
+        return true;
+    }
+
+    @Override
+    protected void onVisibilityChanged(View changedView, int visibility) {
+        super.onVisibilityChanged(changedView, visibility);
+        // A gross hack to get rid of the switcher when the shade is collapsed.
+        if (visibility != VISIBLE) {
+            finish();
+        }
+    }
+
+    public void setFinishRunnable(Runnable finishRunnable) {
+        mFinishRunnable = finishRunnable;
+    }
+
+    public void refreshUsers() {
+        mUserInfo.clear();
+        List<UserInfo> users = mUserManager.getUsers(true);
+        for (UserInfo user : users) {
+            if (!user.isManagedProfile()) {
+                mUserInfo.add(user);
+            }
+        }
+        mAdapter.notifyDataSetChanged();
+    }
+
+    private class Adapter extends BaseAdapter {
+
+        @Override
+        public int getCount() {
+            return mUserInfo.size();
+        }
+
+        @Override
+        public UserInfo getItem(int position) {
+            return mUserInfo.get(position);
+        }
+
+        @Override
+        public long getItemId(int position) {
+            return getItem(position).serialNumber;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (convertView == null || (!(convertView.getTag() instanceof ViewHolder))) {
+                convertView = createView(parent);
+            }
+            ViewHolder h = (ViewHolder) convertView.getTag();
+            bindView(h, getItem(position));
+            return convertView;
+        }
+
+        private View createView(ViewGroup parent) {
+            View v = LayoutInflater.from(getContext()).inflate(
+                    R.layout.user_switcher_item, parent, false);
+            ViewHolder h = new ViewHolder();
+            h.name = (TextView) v.findViewById(R.id.user_name);
+            h.picture = (ImageView) v.findViewById(R.id.user_picture);
+            v.setTag(h);
+            return v;
+        }
+
+        private void bindView(ViewHolder h, UserInfo item) {
+            h.name.setText(item.name);
+            h.picture.setImageBitmap(mUserManager.getUserIcon(item.id));
+        }
+
+        class ViewHolder {
+            TextView name;
+            ImageView picture;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
new file mode 100644
index 0000000..1c88ea7
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java
@@ -0,0 +1,336 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+
+import com.android.internal.R;
+
+/**
+ * Base class for both {@link ExpandableNotificationRow} and {@link NotificationOverflowContainer}
+ * to implement dimming/activating on Keyguard for the double-tap gesture
+ */
+public abstract class ActivatableNotificationView extends ExpandableOutlineView {
+
+    private static final long DOUBLETAP_TIMEOUT_MS = 1000;
+
+    private boolean mDimmed;
+
+    private int mBgResId = R.drawable.notification_quantum_bg;
+    private int mDimmedBgResId = R.drawable.notification_quantum_bg_dim;
+
+    /**
+     * Flag to indicate that the notification has been touched once and the second touch will
+     * click it.
+     */
+    private boolean mActivated;
+
+    private float mDownX;
+    private float mDownY;
+    private final float mTouchSlop;
+
+    private OnActivatedListener mOnActivatedListener;
+
+    protected Drawable mBackgroundNormal;
+    protected Drawable mBackgroundDimmed;
+    private ObjectAnimator mBackgroundAnimator;
+    private Interpolator mFastOutSlowInInterpolator;
+
+    public ActivatableNotificationView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+        updateBackgroundResource();
+        setWillNotDraw(false);
+        mFastOutSlowInInterpolator =
+                AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in);
+    }
+
+    private final Runnable mTapTimeoutRunnable = new Runnable() {
+        @Override
+        public void run() {
+            makeInactive();
+        }
+    };
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        draw(canvas, mBackgroundNormal);
+        draw(canvas, mBackgroundDimmed);
+    }
+
+    private void draw(Canvas canvas, Drawable drawable) {
+        if (drawable != null) {
+            drawable.setBounds(0, mClipTopAmount, getWidth(), mActualHeight);
+            drawable.draw(canvas);
+        }
+    }
+
+    @Override
+    protected boolean verifyDrawable(Drawable who) {
+        return super.verifyDrawable(who) || who == mBackgroundNormal
+                || who == mBackgroundDimmed;
+    }
+
+    @Override
+    protected void drawableStateChanged() {
+        drawableStateChanged(mBackgroundNormal);
+        drawableStateChanged(mBackgroundDimmed);
+    }
+
+    private void drawableStateChanged(Drawable d) {
+        if (d != null && d.isStateful()) {
+            d.setState(getDrawableState());
+        }
+    }
+
+    @Override
+    public void setOnClickListener(OnClickListener l) {
+        super.setOnClickListener(l);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (mDimmed) {
+            return handleTouchEventDimmed(event);
+        } else {
+            return super.onTouchEvent(event);
+        }
+    }
+
+    private boolean handleTouchEventDimmed(MotionEvent event) {
+        int action = event.getActionMasked();
+        switch (action) {
+            case MotionEvent.ACTION_DOWN:
+                mDownX = event.getX();
+                mDownY = event.getY();
+                if (mDownY > getActualHeight()) {
+                    return false;
+                }
+                break;
+            case MotionEvent.ACTION_MOVE:
+                if (!isWithinTouchSlop(event)) {
+                    makeInactive();
+                    return false;
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+                if (isWithinTouchSlop(event)) {
+                    if (!mActivated) {
+                        makeActive(event.getX(), event.getY());
+                        postDelayed(mTapTimeoutRunnable, DOUBLETAP_TIMEOUT_MS);
+                    } else {
+                        makeInactive();
+                        performClick();
+                    }
+                } else {
+                    makeInactive();
+                }
+                break;
+            case MotionEvent.ACTION_CANCEL:
+                makeInactive();
+                break;
+            default:
+                break;
+        }
+        return true;
+    }
+
+    private void makeActive(float x, float y) {
+        mBackgroundDimmed.setHotspot(0, x, y);
+        mActivated = true;
+        if (mOnActivatedListener != null) {
+            mOnActivatedListener.onActivated(this);
+        }
+    }
+
+    /**
+     * Cancels the hotspot and makes the notification inactive.
+     */
+    private void makeInactive() {
+        if (mActivated) {
+            // Make sure that we clear the hotspot from the center.
+            mBackgroundDimmed.setHotspot(0, getWidth() / 2, getActualHeight() / 2);
+            mBackgroundDimmed.removeHotspot(0);
+            mActivated = false;
+        }
+        if (mOnActivatedListener != null) {
+            mOnActivatedListener.onReset(this);
+        }
+        removeCallbacks(mTapTimeoutRunnable);
+    }
+
+    private boolean isWithinTouchSlop(MotionEvent event) {
+        return Math.abs(event.getX() - mDownX) < mTouchSlop
+                && Math.abs(event.getY() - mDownY) < mTouchSlop;
+    }
+
+    /**
+     * Sets the notification as dimmed, meaning that it will appear in a more gray variant.
+     *
+     * @param dimmed Whether the notification should be dimmed.
+     * @param fade Whether an animation should be played to change the state.
+     */
+    public void setDimmed(boolean dimmed, boolean fade) {
+        if (mDimmed != dimmed) {
+            mDimmed = dimmed;
+            if (fade) {
+                fadeBackgroundResource();
+            } else {
+                updateBackgroundResource();
+            }
+        }
+    }
+
+    /**
+     * Sets the resource id for the background of this notification.
+     *
+     * @param bgResId The background resource to use in normal state.
+     * @param dimmedBgResId The background resource to use in dimmed state.
+     */
+    public void setBackgroundResourceIds(int bgResId, int dimmedBgResId) {
+        mBgResId = bgResId;
+        mDimmedBgResId = dimmedBgResId;
+        updateBackgroundResource();
+    }
+
+    private void fadeBackgroundResource() {
+        if (mDimmed) {
+            setBackgroundDimmed(mDimmedBgResId);
+        } else {
+            setBackgroundNormal(mBgResId);
+        }
+        int startAlpha = mDimmed ? 255 : 0;
+        int endAlpha = mDimmed ? 0 : 255;
+        int duration = NotificationActivator.ANIMATION_LENGTH_MS;
+        // Check whether there is already a background animation running.
+        if (mBackgroundAnimator != null) {
+            startAlpha = (Integer) mBackgroundAnimator.getAnimatedValue();
+            duration = (int) mBackgroundAnimator.getCurrentPlayTime();
+            mBackgroundAnimator.removeAllListeners();
+            mBackgroundAnimator.cancel();
+            if (duration <= 0) {
+                updateBackgroundResource();
+                return;
+            }
+        }
+        mBackgroundNormal.setAlpha(startAlpha);
+        mBackgroundAnimator =
+                ObjectAnimator.ofInt(mBackgroundNormal, "alpha", startAlpha, endAlpha);
+        mBackgroundAnimator.setInterpolator(mFastOutSlowInInterpolator);
+        mBackgroundAnimator.setDuration(duration);
+        mBackgroundAnimator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                if (mDimmed) {
+                    setBackgroundNormal(null);
+                } else {
+                    setBackgroundDimmed(null);
+                }
+                mBackgroundAnimator = null;
+            }
+        });
+        mBackgroundAnimator.start();
+    }
+
+    private void updateBackgroundResource() {
+        if (mDimmed) {
+            setBackgroundDimmed(mDimmedBgResId);
+            mBackgroundDimmed.setAlpha(255);
+            setBackgroundNormal(null);
+        } else {
+            setBackgroundDimmed(null);
+            setBackgroundNormal(mBgResId);
+            mBackgroundNormal.setAlpha(255);
+        }
+    }
+
+    /**
+     * Sets a background drawable for the normal state. As we need to change our bounds
+     * independently of layout, we need the notion of a background independently of the regular View
+     * background..
+     */
+    private void setBackgroundNormal(Drawable backgroundNormal) {
+        if (mBackgroundNormal != null) {
+            mBackgroundNormal.setCallback(null);
+            unscheduleDrawable(mBackgroundNormal);
+        }
+        mBackgroundNormal = backgroundNormal;
+        if (mBackgroundNormal != null) {
+            mBackgroundNormal.setCallback(this);
+        }
+        invalidate();
+    }
+
+    private void setBackgroundDimmed(Drawable overlay) {
+        if (mBackgroundDimmed != null) {
+            mBackgroundDimmed.setCallback(null);
+            unscheduleDrawable(mBackgroundDimmed);
+        }
+        mBackgroundDimmed = overlay;
+        if (mBackgroundDimmed != null) {
+            mBackgroundDimmed.setCallback(this);
+        }
+        invalidate();
+    }
+
+    private void setBackgroundNormal(int drawableResId) {
+        setBackgroundNormal(getResources().getDrawable(drawableResId));
+    }
+
+    private void setBackgroundDimmed(int drawableResId) {
+        setBackgroundDimmed(getResources().getDrawable(drawableResId));
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        setPivotX(getWidth() / 2);
+    }
+
+    @Override
+    public void setActualHeight(int actualHeight) {
+        super.setActualHeight(actualHeight);
+        invalidate();
+        setPivotY(actualHeight / 2);
+    }
+
+    @Override
+    public void setClipTopAmount(int clipTopAmount) {
+        super.setClipTopAmount(clipTopAmount);
+        invalidate();
+    }
+
+    public void setOnActivatedListener(OnActivatedListener onActivatedListener) {
+        mOnActivatedListener = onActivatedListener;
+    }
+
+    public interface OnActivatedListener {
+        void onActivated(View view);
+        void onReset(View view);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java b/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java
index 7d3e870..9839fe9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/AnimatedImageView.java
@@ -38,7 +38,7 @@
     }
 
     private void updateAnim() {
-        Drawable drawable = mAttached ? getDrawable() : null;
+        Drawable drawable = getDrawable();
         if (mAttached && mAnim != null) {
             mAnim.stop();
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 9a0749d..edf54d1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -26,10 +26,13 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.UserInfo;
 import android.content.res.Configuration;
 import android.database.ContentObserver;
 import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Handler;
@@ -39,12 +42,15 @@
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.provider.Settings;
 import android.service.dreams.DreamService;
 import android.service.dreams.IDreamManager;
 import android.service.notification.StatusBarNotification;
 import android.text.TextUtils;
 import android.util.Log;
+import android.util.SparseArray;
+import android.util.SparseBooleanArray;
 import android.view.Display;
 import android.view.IWindowManager;
 import android.view.LayoutInflater;
@@ -64,19 +70,19 @@
 import com.android.internal.statusbar.IStatusBarService;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.internal.statusbar.StatusBarIconList;
-import com.android.internal.widget.SizeAdaptiveLayout;
+import com.android.internal.util.LegacyNotificationUtil;
 import com.android.systemui.R;
 import com.android.systemui.RecentsComponent;
 import com.android.systemui.SearchPanelView;
 import com.android.systemui.SystemUI;
 import com.android.systemui.statusbar.phone.KeyguardTouchDelegate;
-import com.android.systemui.statusbar.policy.NotificationRowLayout;
+import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
 
 import java.util.ArrayList;
 import java.util.Locale;
 
 public abstract class BaseStatusBar extends SystemUI implements
-        CommandQueue.Callbacks {
+        CommandQueue.Callbacks, ActivatableNotificationView.OnActivatedListener {
     public static final String TAG = "StatusBar";
     public static final boolean DEBUG = false;
     public static final boolean MULTIUSER_DEBUG = false;
@@ -93,8 +99,8 @@
 
     protected static final boolean ENABLE_HEADS_UP = true;
     // scores above this threshold should be displayed in heads up mode.
-    protected static final int INTERRUPTION_THRESHOLD = 11;
-    protected static final String SETTING_HEADS_UP = "heads_up_enabled";
+    protected static final int INTERRUPTION_THRESHOLD = 10;
+    protected static final String SETTING_HEADS_UP_TICKER = "ticker_gets_heads_up";
 
     // Should match the value in PhoneWindowManager
     public static final String SYSTEM_DIALOG_REASON_RECENT_APPS = "recentapps";
@@ -108,7 +114,7 @@
 
     // all notifications
     protected NotificationData mNotificationData = new NotificationData();
-    protected NotificationRowLayout mPile;
+    protected NotificationStackScrollLayout mStackScroller;
 
     protected NotificationData.Entry mInterruptingNotificationEntry;
     protected long mInterruptingNotificationTime;
@@ -122,14 +128,24 @@
     protected PopupMenu mNotificationBlamePopup;
 
     protected int mCurrentUserId = 0;
+    final protected SparseArray<UserInfo> mCurrentProfiles = new SparseArray<UserInfo>();
 
     protected int mLayoutDirection = -1; // invalid
     private Locale mLocale;
     protected boolean mUseHeadsUp = false;
+    protected boolean mHeadsUpTicker = false;
 
     protected IDreamManager mDreamManager;
     PowerManager mPowerManager;
-    protected int mRowHeight;
+    protected int mRowMinHeight;
+    protected int mRowMaxHeight;
+
+    // public mode, private notifications, etc
+    private boolean mLockscreenPublicMode = false;
+    private final SparseBooleanArray mUsersAllowingPrivateNotifications = new SparseBooleanArray();
+    private LegacyNotificationUtil mLegacyNotificationUtil = LegacyNotificationUtil.getInstance();
+
+    private UserManager mUserManager;
 
     // UI-specific methods
 
@@ -149,15 +165,21 @@
 
     private RecentsComponent mRecents;
 
-    public IStatusBarService getStatusBarService() {
-        return mBarService;
-    }
+    protected int mZenMode;
+
+    /**
+     * The {@link StatusBarState} of the status bar.
+     */
+    protected int mState;
+    protected boolean mBouncerShowing;
+
+    protected NotificationOverflowContainer mKeyguardIconOverflowContainer;
 
     public boolean isDeviceProvisioned() {
         return mDeviceProvisioned;
     }
 
-    private ContentObserver mProvisioningObserver = new ContentObserver(new Handler()) {
+    protected final ContentObserver mSettingsObserver = new ContentObserver(mHandler) {
         @Override
         public void onChange(boolean selfChange) {
             final boolean provisioned = 0 != Settings.Global.getInt(
@@ -166,6 +188,20 @@
                 mDeviceProvisioned = provisioned;
                 updateNotificationIcons();
             }
+            final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+                    Settings.Global.ZEN_MODE, Settings.Global.ZEN_MODE_OFF);
+            setZenMode(mode);
+        }
+    };
+
+    private final ContentObserver mLockscreenSettingsObserver = new ContentObserver(mHandler) {
+        @Override
+        public void onChange(boolean selfChange) {
+            // We don't know which user changed LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS,
+            // so we just dump our cache ...
+            mUsersAllowingPrivateNotifications.clear();
+            // ... and refresh all the notifications
+            updateNotificationIcons();
         }
     };
 
@@ -207,12 +243,26 @@
             String action = intent.getAction();
             if (Intent.ACTION_USER_SWITCHED.equals(action)) {
                 mCurrentUserId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
+                updateCurrentProfilesCache();
                 if (true) Log.v(TAG, "userId " + mCurrentUserId + " is in the house");
                 userSwitched(mCurrentUserId);
+            } else if (Intent.ACTION_USER_ADDED.equals(action)) {
+                updateCurrentProfilesCache();
             }
         }
     };
 
+    private void updateCurrentProfilesCache() {
+        synchronized (mCurrentProfiles) {
+            mCurrentProfiles.clear();
+            if (mUserManager != null) {
+                for (UserInfo user : mUserManager.getProfiles(mCurrentUserId)) {
+                    mCurrentProfiles.put(user.id, user);
+                }
+            }
+        }
+    }
+
     public void start() {
         mWindowManager = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
         mWindowManagerService = WindowManagerGlobal.getWindowManagerService();
@@ -222,10 +272,19 @@
                 ServiceManager.checkService(DreamService.DREAM_SERVICE));
         mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
 
-        mProvisioningObserver.onChange(false); // set up
+        mSettingsObserver.onChange(false); // set up
         mContext.getContentResolver().registerContentObserver(
                 Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED), true,
-                mProvisioningObserver);
+                mSettingsObserver);
+        mContext.getContentResolver().registerContentObserver(
+                Settings.Global.getUriFor(Settings.Global.ZEN_MODE), false,
+                mSettingsObserver);
+
+        mContext.getContentResolver().registerContentObserver(
+                Settings.Secure.getUriFor(Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS),
+                true,
+                mLockscreenSettingsObserver,
+                UserHandle.USER_ALL);
 
         mBarService = IStatusBarService.Stub.asInterface(
                 ServiceManager.getService(Context.STATUS_BAR_SERVICE));
@@ -235,6 +294,8 @@
         mLocale = mContext.getResources().getConfiguration().locale;
         mLayoutDirection = TextUtils.getLayoutDirectionFromLocale(mLocale);
 
+        mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+
         // Connect in to the status bar manager service
         StatusBarIconList iconList = new StatusBarIconList();
         ArrayList<IBinder> notificationKeys = new ArrayList<IBinder>();
@@ -296,22 +357,27 @@
 
         IntentFilter filter = new IntentFilter();
         filter.addAction(Intent.ACTION_USER_SWITCHED);
+        filter.addAction(Intent.ACTION_USER_ADDED);
         mContext.registerReceiver(mBroadcastReceiver, filter);
+
+        updateCurrentProfilesCache();
     }
 
     public void userSwitched(int newUserId) {
         // should be overridden
     }
 
-    public boolean notificationIsForCurrentUser(StatusBarNotification n) {
+    public boolean notificationIsForCurrentProfiles(StatusBarNotification n) {
         final int thisUserId = mCurrentUserId;
         final int notificationUserId = n.getUserId();
         if (DEBUG && MULTIUSER_DEBUG) {
             Log.v(TAG, String.format("%s: current userid: %d, notification userid: %d",
                     n, thisUserId, notificationUserId));
         }
-        return notificationUserId == UserHandle.USER_ALL
-                || thisUserId == notificationUserId;
+        synchronized (mCurrentProfiles) {
+            return notificationUserId == UserHandle.USER_ALL
+                    || mCurrentProfiles.get(notificationUserId) != null;
+        }
     }
 
     @Override
@@ -337,13 +403,14 @@
             final String _pkg = n.getPackageName();
             final String _tag = n.getTag();
             final int _id = n.getId();
+            final int _userId = n.getUserId();
             vetoButton.setOnClickListener(new View.OnClickListener() {
                     public void onClick(View v) {
                         // Accessibility feedback
                         v.announceForAccessibility(
                                 mContext.getString(R.string.accessibility_notification_dismissed));
                         try {
-                            mBarService.onNotificationClear(_pkg, _tag, _id);
+                            mBarService.onNotificationClear(_pkg, _tag, _id, _userId);
 
                         } catch (RemoteException ex) {
                             // system process is dead if we're here.
@@ -359,9 +426,9 @@
     }
 
 
-    protected void applyLegacyRowBackground(StatusBarNotification sbn, View content) {
-        if (sbn.getNotification().contentView.getLayoutId() !=
-                com.android.internal.R.layout.notification_template_base) {
+    protected void applyLegacyRowBackground(StatusBarNotification sbn,
+            NotificationData.Entry entry) {
+        if (entry.expanded.getId() != com.android.internal.R.id.status_bar_latest_event_content) {
             int version = 0;
             try {
                 ApplicationInfo info = mContext.getPackageManager().getApplicationInfo(sbn.getPackageName(), 0);
@@ -370,9 +437,11 @@
                 Log.e(TAG, "Failed looking up ApplicationInfo for " + sbn.getPackageName(), ex);
             }
             if (version > 0 && version < Build.VERSION_CODES.GINGERBREAD) {
-                content.setBackgroundResource(R.drawable.notification_row_legacy_bg);
-            } else {
-                content.setBackgroundResource(com.android.internal.R.drawable.notification_bg);
+                entry.row.setBackgroundResource(R.drawable.notification_row_legacy_bg);
+            } else if (version < Build.VERSION_CODES.L) {
+                entry.row.setBackgroundResourceIds(
+                        com.android.internal.R.drawable.notification_bg,
+                        com.android.internal.R.drawable.notification_bg_dim);
             }
         }
     }
@@ -524,6 +593,7 @@
 
     protected void toggleRecentsActivity() {
         if (mRecents != null) {
+            sendCloseSystemWindows(mContext, SYSTEM_DIALOG_REASON_RECENT_APPS);
             mRecents.toggleRecents(mDisplay, mLayoutDirection, getStatusBarView());
         }
     }
@@ -548,6 +618,37 @@
 
     public abstract void resetHeadsUpDecayTimer();
 
+    /**
+     * Save the current "public" (locked and secure) state of the lockscreen.
+     */
+    public void setLockscreenPublicMode(boolean publicMode) {
+        mLockscreenPublicMode = publicMode;
+    }
+
+    public boolean isLockscreenPublicMode() {
+        return mLockscreenPublicMode;
+    }
+
+    /**
+     * Has the given user chosen to allow their private (full) notifications to be shown even
+     * when the lockscreen is in "public" (secure & locked) mode?
+     */
+    public boolean userAllowsPrivateNotificationsInPublic(int userHandle) {
+        if (userHandle == UserHandle.USER_ALL) {
+            return true;
+        }
+
+        if (mUsersAllowingPrivateNotifications.indexOfKey(userHandle) < 0) {
+            final boolean allowed = 0 != Settings.Secure.getIntForUser(
+                    mContext.getContentResolver(),
+                    Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0, userHandle);
+            mUsersAllowingPrivateNotifications.append(userHandle, allowed);
+            return allowed;
+        }
+
+        return mUsersAllowingPrivateNotifications.get(userHandle);
+    }
+
     protected class H extends Handler {
         public void handleMessage(Message m) {
             Intent intent;
@@ -614,6 +715,14 @@
     }
 
     public boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) {
+            return inflateViews(entry, parent, false);
+    }
+
+    public boolean inflateViewsForHeadsUp(NotificationData.Entry entry, ViewGroup parent) {
+            return inflateViews(entry, parent, true);
+    }
+
+    public boolean inflateViews(NotificationData.Entry entry, ViewGroup parent, boolean isHeadsUp) {
         int minHeight =
                 mContext.getResources().getDimensionPixelSize(R.dimen.notification_min_height);
         int maxHeight =
@@ -621,10 +730,23 @@
         StatusBarNotification sbn = entry.notification;
         RemoteViews contentView = sbn.getNotification().contentView;
         RemoteViews bigContentView = sbn.getNotification().bigContentView;
+
+        if (isHeadsUp) {
+            maxHeight =
+                    mContext.getResources().getDimensionPixelSize(R.dimen.notification_mid_height);
+            bigContentView = sbn.getNotification().headsUpContentView;
+        }
+
         if (contentView == null) {
             return false;
         }
 
+        if (DEBUG) {
+            Log.v(TAG, "publicNotification: " + sbn.getNotification().publicVersion);
+        }
+
+        Notification publicNotification = sbn.getNotification().publicVersion;
+
         // create the row view
         LayoutInflater inflater = (LayoutInflater)mContext.getSystemService(
                 Context.LAYOUT_INFLATER_SERVICE);
@@ -642,26 +764,31 @@
         // NB: the large icon is now handled entirely by the template
 
         // bind the click event to the content area
-        ViewGroup content = (ViewGroup)row.findViewById(R.id.content);
-        ViewGroup adaptive = (ViewGroup)row.findViewById(R.id.adaptive);
+        NotificationContentView expanded =
+                (NotificationContentView) row.findViewById(R.id.expanded);
+        NotificationContentView expandedPublic =
+                (NotificationContentView) row.findViewById(R.id.expandedPublic);
 
-        content.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
+        row.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
 
         PendingIntent contentIntent = sbn.getNotification().contentIntent;
         if (contentIntent != null) {
-            final View.OnClickListener listener = new NotificationClicker(contentIntent,
-                    sbn.getPackageName(), sbn.getTag(), sbn.getId());
-            content.setOnClickListener(listener);
+            final View.OnClickListener listener = makeClicker(contentIntent,
+                    sbn.getPackageName(), sbn.getTag(), sbn.getId(), isHeadsUp, sbn.getUserId());
+            row.setOnClickListener(listener);
         } else {
-            content.setOnClickListener(null);
+            row.setOnClickListener(null);
         }
 
+        // set up the adaptive layout
         View contentViewLocal = null;
         View bigContentViewLocal = null;
         try {
-            contentViewLocal = contentView.apply(mContext, adaptive, mOnClickHandler);
+            contentViewLocal = contentView.apply(mContext, expanded,
+                    mOnClickHandler);
             if (bigContentView != null) {
-                bigContentViewLocal = bigContentView.apply(mContext, adaptive, mOnClickHandler);
+                bigContentViewLocal = bigContentView.apply(mContext, expanded,
+                        mOnClickHandler);
             }
         }
         catch (RuntimeException e) {
@@ -671,41 +798,95 @@
         }
 
         if (contentViewLocal != null) {
-            SizeAdaptiveLayout.LayoutParams params =
-                    new SizeAdaptiveLayout.LayoutParams(contentViewLocal.getLayoutParams());
-            params.minHeight = minHeight;
-            params.maxHeight = minHeight;
-            adaptive.addView(contentViewLocal, params);
+            contentViewLocal.setIsRootNamespace(true);
+            expanded.setContractedChild(contentViewLocal);
         }
         if (bigContentViewLocal != null) {
-            SizeAdaptiveLayout.LayoutParams params =
-                    new SizeAdaptiveLayout.LayoutParams(bigContentViewLocal.getLayoutParams());
-            params.minHeight = minHeight+1;
-            params.maxHeight = maxHeight;
-            adaptive.addView(bigContentViewLocal, params);
+            bigContentViewLocal.setIsRootNamespace(true);
+            expanded.setExpandedChild(bigContentViewLocal);
         }
-        row.setDrawingCacheEnabled(true);
 
-        applyLegacyRowBackground(sbn, content);
+        PackageManager pm = mContext.getPackageManager();
+
+        // now the public version
+        View publicViewLocal = null;
+        if (publicNotification != null) {
+            try {
+                publicViewLocal = publicNotification.contentView.apply(mContext, expandedPublic,
+                        mOnClickHandler);
+
+                if (publicViewLocal != null) {
+                    publicViewLocal.setIsRootNamespace(true);
+                    expandedPublic.setContractedChild(publicViewLocal);
+                }
+            }
+            catch (RuntimeException e) {
+                final String ident = sbn.getPackageName() + "/0x" + Integer.toHexString(sbn.getId());
+                Log.e(TAG, "couldn't inflate public view for notification " + ident, e);
+                publicViewLocal = null;
+            }
+        }
+
+        if (publicViewLocal == null) {
+            // Add a basic notification template
+            publicViewLocal = LayoutInflater.from(mContext).inflate(
+                    com.android.internal.R.layout.notification_template_quantum_base,
+                    expandedPublic, true);
+
+            final TextView title = (TextView) publicViewLocal.findViewById(com.android.internal.R.id.title);
+            try {
+                title.setText(pm.getApplicationLabel(
+                        pm.getApplicationInfo(entry.notification.getPackageName(), 0)));
+            } catch (NameNotFoundException e) {
+                title.setText(entry.notification.getPackageName());
+            }
+
+            final ImageView icon = (ImageView) publicViewLocal.findViewById(com.android.internal.R.id.icon);
+
+            final StatusBarIcon ic = new StatusBarIcon(entry.notification.getPackageName(),
+                    entry.notification.getUser(),
+                    entry.notification.getNotification().icon,
+                    entry.notification.getNotification().iconLevel,
+                    entry.notification.getNotification().number,
+                    entry.notification.getNotification().tickerText);
+
+            Drawable iconDrawable = StatusBarIconView.getIcon(mContext, ic);
+            icon.setImageDrawable(iconDrawable);
+            if (mLegacyNotificationUtil.isGrayscale(iconDrawable)) {
+                icon.setBackgroundResource(
+                        com.android.internal.R.drawable.notification_icon_legacy_bg_inset);
+            }
+
+            final TextView text = (TextView) publicViewLocal.findViewById(com.android.internal.R.id.text);
+            text.setText("Unlock your device to see this notification.");
+
+            // TODO: fill out "time" as well
+        }
+
+        row.setDrawingCacheEnabled(true);
 
         if (MULTIUSER_DEBUG) {
             TextView debug = (TextView) row.findViewById(R.id.debug_info);
             if (debug != null) {
                 debug.setVisibility(View.VISIBLE);
-                debug.setText("U " + entry.notification.getUserId());
+                debug.setText("CU " + mCurrentUserId +" NU " + entry.notification.getUserId());
             }
         }
         entry.row = row;
-        entry.row.setRowHeight(mRowHeight);
-        entry.content = content;
+        entry.row.setHeightRange(mRowMinHeight, mRowMaxHeight);
+        entry.row.setOnActivatedListener(this);
         entry.expanded = contentViewLocal;
+        entry.expandedPublic = publicViewLocal;
         entry.setBigContentView(bigContentViewLocal);
 
+        applyLegacyRowBackground(sbn, entry);
+
         return true;
     }
 
-    public NotificationClicker makeClicker(PendingIntent intent, String pkg, String tag, int id) {
-        return new NotificationClicker(intent, pkg, tag, id);
+    public NotificationClicker makeClicker(PendingIntent intent, String pkg, String tag,
+            int id, boolean forHun, int userId) {
+        return new NotificationClicker(intent, pkg, tag, id, forHun, userId);
     }
 
     protected class NotificationClicker implements View.OnClickListener {
@@ -713,12 +894,17 @@
         private String mPkg;
         private String mTag;
         private int mId;
+        private boolean mIsHeadsUp;
+        private int mUserId;
 
-        public NotificationClicker(PendingIntent intent, String pkg, String tag, int id) {
+        public NotificationClicker(PendingIntent intent, String pkg, String tag, int id,
+                boolean forHun, int userId) {
             mIntent = intent;
             mPkg = pkg;
             mTag = tag;
             mId = id;
+            mIsHeadsUp = forHun;
+            mUserId = userId;
         }
 
         public void onClick(View v) {
@@ -751,7 +937,10 @@
             }
 
             try {
-                mBarService.onNotificationClick(mPkg, mTag, mId);
+                if (mIsHeadsUp) {
+                    mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
+                }
+                mBarService.onNotificationClick(mPkg, mTag, mId, mUserId);
             } catch (RemoteException ex) {
                 // system process is dead if we're here.
             }
@@ -761,6 +950,7 @@
             visibilityChanged(false);
         }
     }
+
     /**
      * The LEDs are turned o)ff when the notification panel is shown, even just a little bit.
      * This was added last-minute and is inconsistent with the way the rest of the notifications
@@ -772,7 +962,11 @@
         if (mPanelSlightlyVisible != visible) {
             mPanelSlightlyVisible = visible;
             try {
-                mBarService.onPanelRevealed();
+                if (visible) {
+                    mBarService.onPanelRevealed();
+                } else {
+                    mBarService.onPanelHidden();
+                }
             } catch (RemoteException ex) {
                 // Won't fail unless the world has ended.
             }
@@ -788,7 +982,8 @@
     void handleNotificationError(IBinder key, StatusBarNotification n, String message) {
         removeNotification(key);
         try {
-            mBarService.onNotificationError(n.getPackageName(), n.getTag(), n.getId(), n.getUid(), n.getInitialPid(), message);
+            mBarService.onNotificationError(n.getPackageName(), n.getTag(), n.getId(), n.getUid(),
+                    n.getInitialPid(), message, n.getUserId());
         } catch (RemoteException ex) {
             // The end is nigh.
         }
@@ -803,7 +998,7 @@
         // Remove the expanded view.
         ViewGroup rowParent = (ViewGroup)entry.row.getParent();
         if (rowParent != null) rowParent.removeView(entry.row);
-        updateExpansionStates();
+        updateRowStates();
         updateNotificationIcons();
 
         return entry.notification;
@@ -832,7 +1027,7 @@
         }
         // Construct the expanded view.
         NotificationData.Entry entry = new NotificationData.Entry(key, notification, iconView);
-        if (!inflateViews(entry, mPile)) {
+        if (!inflateViews(entry, mStackScroller)) {
             handleNotificationError(key, notification, "Couldn't expand RemoteViews for: "
                     + notification);
             return null;
@@ -846,7 +1041,7 @@
         if (DEBUG) {
             Log.d(TAG, "addNotificationViews: added at " + pos);
         }
-        updateExpansionStates();
+        updateRowStates();
         updateNotificationIcons();
     }
 
@@ -854,26 +1049,101 @@
         addNotificationViews(createNotificationViews(key, notification));
     }
 
-    protected void updateExpansionStates() {
-        int N = mNotificationData.size();
-        for (int i = 0; i < N; i++) {
+    /**
+     * @return The number of notifications we show on Keyguard.
+     */
+    protected abstract int getMaxKeyguardNotifications();
+
+    /**
+     * Updates expanded, dimmed and locked states of notification rows.
+     */
+    protected void updateRowStates() {
+        int maxKeyguardNotifications = getMaxKeyguardNotifications();
+        mKeyguardIconOverflowContainer.getIconsView().removeAllViews();
+        int n = mNotificationData.size();
+        int visibleNotifications = 0;
+        boolean onKeyguard = mState == StatusBarState.KEYGUARD;
+        for (int i = n-1; i >= 0; i--) {
             NotificationData.Entry entry = mNotificationData.get(i);
-            if (!entry.row.isUserLocked()) {
-                if (i == (N-1)) {
-                    if (DEBUG) Log.d(TAG, "expanding top notification at " + i);
-                    entry.row.setExpanded(true);
-                } else {
-                    if (!entry.row.isUserExpanded()) {
-                        if (DEBUG) Log.d(TAG, "collapsing notification at " + i);
-                        entry.row.setExpanded(false);
-                    } else {
-                        if (DEBUG) Log.d(TAG, "ignoring user-modified notification at " + i);
-                    }
+            if (onKeyguard) {
+                entry.row.setExpansionDisabled(true);
+            } else {
+                entry.row.setExpansionDisabled(false);
+                if (!entry.row.isUserLocked()) {
+                    boolean top = (i == n-1);
+                    entry.row.setSystemExpanded(top);
+                }
+            }
+            entry.row.setDimmed(onKeyguard, false /* fade */);
+            boolean showOnKeyguard = shouldShowOnKeyguard(entry.notification);
+            if (onKeyguard && (visibleNotifications >= maxKeyguardNotifications
+                    || !showOnKeyguard)) {
+                entry.row.setVisibility(View.GONE);
+                if (showOnKeyguard) {
+                    mKeyguardIconOverflowContainer.getIconsView().addNotification(entry);
                 }
             } else {
-                if (DEBUG) Log.d(TAG, "ignoring notification being held by user at " + i);
+                if (entry.row.getVisibility() == View.GONE) {
+                    // notify the scroller of a child addition
+                    mStackScroller.generateAddAnimation(entry.row);
+                }
+                entry.row.setVisibility(View.VISIBLE);
+                visibleNotifications++;
             }
         }
+
+        if (onKeyguard && mKeyguardIconOverflowContainer.getIconsView().getChildCount() > 0) {
+            mKeyguardIconOverflowContainer.setVisibility(View.VISIBLE);
+            mKeyguardIconOverflowContainer.setDimmed(true /* dimmed */, false /* fade */);
+        } else {
+            mKeyguardIconOverflowContainer.setVisibility(View.GONE);
+        }
+    }
+
+    @Override
+    public void onActivated(View view) {
+        int n = mNotificationData.size();
+        for (int i = 0; i < n; i++) {
+            NotificationData.Entry entry = mNotificationData.get(i);
+            if (entry.row.getVisibility() != View.GONE) {
+                if (view == entry.row) {
+                    entry.row.getActivator().activate();
+                } else {
+                    entry.row.getActivator().activateInverse();
+                }
+            }
+        }
+        if (mKeyguardIconOverflowContainer.getVisibility() != View.GONE) {
+            if (view == mKeyguardIconOverflowContainer) {
+                mKeyguardIconOverflowContainer.getActivator().activate();
+            } else {
+                mKeyguardIconOverflowContainer.getActivator().activateInverse();
+            }
+        }
+    }
+
+    @Override
+    public void onReset(View view) {
+        int n = mNotificationData.size();
+        for (int i = 0; i < n; i++) {
+            NotificationData.Entry entry = mNotificationData.get(i);
+            if (entry.row.getVisibility() != View.GONE) {
+                entry.row.getActivator().reset();
+            }
+        }
+        if (mKeyguardIconOverflowContainer.getVisibility() != View.GONE) {
+            mKeyguardIconOverflowContainer.getActivator().reset();
+        }
+    }
+
+    private boolean shouldShowOnKeyguard(StatusBarNotification sbn) {
+        return sbn.getNotification().priority >= Notification.PRIORITY_LOW;
+    }
+
+    protected void setZenMode(int mode) {
+        if (!isDeviceProvisioned()) return;
+        mZenMode = mode;
+        updateNotificationIcons();
     }
 
     protected abstract void haltTicker();
@@ -904,6 +1174,14 @@
         final RemoteViews contentView = notification.getNotification().contentView;
         final RemoteViews oldBigContentView = oldNotification.getNotification().bigContentView;
         final RemoteViews bigContentView = notification.getNotification().bigContentView;
+        final RemoteViews oldHeadsUpContentView = oldNotification.getNotification().headsUpContentView;
+        final RemoteViews headsUpContentView = notification.getNotification().headsUpContentView;
+        final Notification oldPublicNotification = oldNotification.getNotification().publicVersion;
+        final RemoteViews oldPublicContentView = oldPublicNotification != null
+                ? oldPublicNotification.contentView : null;
+        final Notification publicNotification = notification.getNotification().publicVersion;
+        final RemoteViews publicContentView = publicNotification != null
+                ? publicNotification.contentView : null;
 
         if (DEBUG) {
             Log.d(TAG, "old notification: when=" + oldNotification.getNotification().when
@@ -911,11 +1189,13 @@
                     + " expanded=" + oldEntry.expanded
                     + " contentView=" + oldContentView
                     + " bigContentView=" + oldBigContentView
+                    + " publicView=" + oldPublicContentView
                     + " rowParent=" + oldEntry.row.getParent());
             Log.d(TAG, "new notification: when=" + notification.getNotification().when
                     + " ongoing=" + oldNotification.isOngoing()
                     + " contentView=" + contentView
-                    + " bigContentView=" + bigContentView);
+                    + " bigContentView=" + bigContentView
+                    + " publicView=" + publicContentView);
         }
 
         // Can we just reapply the RemoteViews in place?  If when didn't change, the order
@@ -935,8 +1215,24 @@
                     && oldBigContentView.getPackage() != null
                     && oldBigContentView.getPackage().equals(bigContentView.getPackage())
                     && oldBigContentView.getLayoutId() == bigContentView.getLayoutId());
+        boolean headsUpContentsUnchanged =
+                (oldHeadsUpContentView == null && headsUpContentView == null)
+                || ((oldHeadsUpContentView != null && headsUpContentView != null)
+                    && headsUpContentView.getPackage() != null
+                    && oldHeadsUpContentView.getPackage() != null
+                    && oldHeadsUpContentView.getPackage().equals(headsUpContentView.getPackage())
+                    && oldHeadsUpContentView.getLayoutId() == headsUpContentView.getLayoutId());
+        boolean publicUnchanged  =
+                (oldPublicContentView == null && publicContentView == null)
+                || ((oldPublicContentView != null && publicContentView != null)
+                        && publicContentView.getPackage() != null
+                        && oldPublicContentView.getPackage() != null
+                        && oldPublicContentView.getPackage().equals(publicContentView.getPackage())
+                        && oldPublicContentView.getLayoutId() == publicContentView.getLayoutId());
+
         ViewGroup rowParent = (ViewGroup) oldEntry.row.getParent();
-        boolean orderUnchanged = notification.getNotification().when== oldNotification.getNotification().when
+        boolean orderUnchanged =
+                   notification.getNotification().when == oldNotification.getNotification().when
                 && notification.getScore() == oldNotification.getScore();
                 // score now encompasses/supersedes isOngoing()
 
@@ -944,7 +1240,8 @@
                 && !TextUtils.equals(notification.getNotification().tickerText,
                         oldEntry.notification.getNotification().tickerText);
         boolean isTopAnyway = isTopNotification(rowParent, oldEntry);
-        if (contentsUnchanged && bigContentsUnchanged && (orderUnchanged || isTopAnyway)) {
+        if (contentsUnchanged && bigContentsUnchanged && headsUpContentsUnchanged && publicUnchanged
+                && (orderUnchanged || isTopAnyway)) {
             if (DEBUG) Log.d(TAG, "reusing notification for key: " + key);
             oldEntry.notification = notification;
             try {
@@ -958,7 +1255,7 @@
                     } else {
                         if (DEBUG) Log.d(TAG, "updating the current heads up:" + notification);
                         mInterruptingNotificationEntry.notification = notification;
-                        updateNotificationViews(mInterruptingNotificationEntry, notification);
+                        updateHeadsUpViews(mInterruptingNotificationEntry, notification);
                     }
                 }
 
@@ -972,7 +1269,7 @@
                     handleNotificationError(key, notification, "Couldn't update icon: " + ic);
                     return;
                 }
-                updateExpansionStates();
+                updateRowStates();
             }
             catch (RuntimeException e) {
                 // It failed to add cleanly.  Log, and remove the view from the panel.
@@ -985,13 +1282,14 @@
             if (DEBUG) Log.d(TAG, "contents was " + (contentsUnchanged ? "unchanged" : "changed"));
             if (DEBUG) Log.d(TAG, "order was " + (orderUnchanged ? "unchanged" : "changed"));
             if (DEBUG) Log.d(TAG, "notification is " + (isTopAnyway ? "top" : "not top"));
-            final boolean wasExpanded = oldEntry.row.isUserExpanded();
             removeNotificationViews(key);
             addNotificationViews(key, notification);  // will also replace the heads up
-            if (wasExpanded) {
-                final NotificationData.Entry newEntry = mNotificationData.findByKey(key);
-                newEntry.row.setExpanded(true);
-                newEntry.row.setUserExpanded(true);
+            final NotificationData.Entry newEntry = mNotificationData.findByKey(key);
+            final boolean userChangedExpansion = oldEntry.row.hasUserChangedExpansion();
+            if (userChangedExpansion) {
+                boolean userExpanded = oldEntry.row.isUserExpanded();
+                newEntry.row.setUserExpanded(userExpanded);
+                newEntry.row.notifyHeightChanged();
             }
         }
 
@@ -1000,7 +1298,7 @@
         updateNotificationVetoButton(oldEntry.row, notification);
 
         // Is this for you?
-        boolean isForCurrentUser = notificationIsForCurrentUser(notification);
+        boolean isForCurrentUser = notificationIsForCurrentProfiles(notification);
         if (DEBUG) Log.d(TAG, "notification is " + (isForCurrentUser ? "" : "not ") + "for you");
 
         // Restart the ticker if it's still running
@@ -1016,22 +1314,44 @@
 
     private void updateNotificationViews(NotificationData.Entry entry,
             StatusBarNotification notification) {
+        updateNotificationViews(entry, notification, false);
+    }
+
+    private void updateHeadsUpViews(NotificationData.Entry entry,
+            StatusBarNotification notification) {
+        updateNotificationViews(entry, notification, true);
+    }
+
+    private void updateNotificationViews(NotificationData.Entry entry,
+            StatusBarNotification notification, boolean isHeadsUp) {
         final RemoteViews contentView = notification.getNotification().contentView;
-        final RemoteViews bigContentView = notification.getNotification().bigContentView;
+        final RemoteViews bigContentView = isHeadsUp
+                ? notification.getNotification().headsUpContentView
+                : notification.getNotification().bigContentView;
+        final Notification publicVersion = notification.getNotification().publicVersion;
+        final RemoteViews publicContentView = publicVersion != null ? publicVersion.contentView
+                : null;
+
         // Reapply the RemoteViews
         contentView.reapply(mContext, entry.expanded, mOnClickHandler);
         if (bigContentView != null && entry.getBigContentView() != null) {
-            bigContentView.reapply(mContext, entry.getBigContentView(), mOnClickHandler);
+            bigContentView.reapply(mContext, entry.getBigContentView(),
+                    mOnClickHandler);
+        }
+        if (publicContentView != null && entry.getPublicContentView() != null) {
+            publicContentView.reapply(mContext, entry.getPublicContentView(), mOnClickHandler);
         }
         // update the contentIntent
         final PendingIntent contentIntent = notification.getNotification().contentIntent;
         if (contentIntent != null) {
             final View.OnClickListener listener = makeClicker(contentIntent,
-                    notification.getPackageName(), notification.getTag(), notification.getId());
-            entry.content.setOnClickListener(listener);
+                    notification.getPackageName(), notification.getTag(), notification.getId(),
+                    isHeadsUp, notification.getUserId());
+            entry.row.setOnClickListener(listener);
         } else {
-            entry.content.setOnClickListener(null);
+            entry.row.setOnClickListener(null);
         }
+        entry.row.notifyContentUpdated();
     }
 
     protected void notifyHeadsUpScreenOn(boolean screenOn) {
@@ -1049,14 +1369,15 @@
                 || notification.vibrate != null;
         boolean isHighPriority = sbn.getScore() >= INTERRUPTION_THRESHOLD;
         boolean isFullscreen = notification.fullScreenIntent != null;
+        boolean hasTicker = mHeadsUpTicker && !TextUtils.isEmpty(notification.tickerText);
         boolean isAllowed = notification.extras.getInt(Notification.EXTRA_AS_HEADS_UP,
                 Notification.HEADS_UP_ALLOWED) != Notification.HEADS_UP_NEVER;
 
         final KeyguardTouchDelegate keyguard = KeyguardTouchDelegate.getInstance(mContext);
-        boolean interrupt = (isFullscreen || (isHighPriority && isNoisy))
+        boolean interrupt = (isFullscreen || (isHighPriority && (isNoisy || hasTicker)))
                 && isAllowed
                 && mPowerManager.isScreenOn()
-                && !keyguard.isShowingAndNotHidden()
+                && !keyguard.isShowingAndNotOccluded()
                 && !keyguard.isInputRestricted();
         try {
             interrupt = interrupt && !mDreamManager.isDreaming();
@@ -1083,6 +1404,17 @@
         // hook for subclasses
     }
 
+    public void setBouncerShowing(boolean bouncerShowing) {
+        mBouncerShowing = bouncerShowing;
+    }
+
+    /**
+     * @return Whether the security bouncer from Keyguard is showing.
+     */
+    public boolean isBouncerShowing() {
+        return mBouncerShowing;
+    }
+
     public void destroy() {
         if (mSearchPanelView != null) {
             mWindowManager.removeViewImmediate(mSearchPanelView);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
index 39333d7..bbbe8fa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java
@@ -21,6 +21,7 @@
 import android.os.Message;
 import android.service.notification.StatusBarNotification;
 
+import com.android.internal.policy.IKeyguardShowCallback;
 import com.android.internal.statusbar.IStatusBar;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.internal.statusbar.StatusBarIconList;
@@ -98,6 +99,7 @@
         public void hideSearchPanel();
         public void cancelPreloadRecentApps();
         public void setWindowState(int window, int state);
+
     }
 
     public CommandQueue(Callbacks callbacks, StatusBarIconList list) {
@@ -232,6 +234,7 @@
         }
     }
 
+
     private final class H extends Handler {
         public void handleMessage(Message msg) {
             final int what = msg.what & MSG_MASK;
@@ -295,7 +298,7 @@
                     mCallbacks.topAppWindowChanged(msg.arg1 != 0);
                     break;
                 case MSG_SHOW_IME_BUTTON:
-                    mCallbacks.setImeWindowStatus((IBinder)msg.obj, msg.arg1, msg.arg2);
+                    mCallbacks.setImeWindowStatus((IBinder) msg.obj, msg.arg1, msg.arg2);
                     break;
                 case MSG_SET_HARD_KEYBOARD_STATUS:
                     mCallbacks.setHardKeyboardStatus(msg.arg1 != 0, msg.arg2 != 0);
@@ -312,6 +315,7 @@
                 case MSG_SET_WINDOW_STATE:
                     mCallbacks.setWindowState(msg.arg1, msg.arg2);
                     break;
+
             }
         }
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java
new file mode 100644
index 0000000..e471754
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/DragDownHelper.java
@@ -0,0 +1,206 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
+import android.content.Context;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+
+import com.android.systemui.ExpandHelper;
+import com.android.systemui.Gefingerpoken;
+import com.android.systemui.R;
+
+/**
+ * A utility class to enable the downward swipe on the lockscreen to go to the full shade and expand
+ * the notification where the drag started.
+ */
+public class DragDownHelper implements Gefingerpoken {
+
+    private static final float RUBBERBAND_FACTOR_EXPANDABLE = 0.5f;
+    private static final float RUBBERBAND_FACTOR_STATIC = 0.15f;
+
+    private static final int SPRING_BACK_ANIMATION_LENGTH_MS = 375;
+
+    private int mMinDragDistance;
+    private ExpandHelper.Callback mCallback;
+    private float mInitialTouchX;
+    private float mInitialTouchY;
+    private boolean mDraggingDown;
+    private float mTouchSlop;
+    private OnDragDownListener mOnDragDownListener;
+    private View mHost;
+    private final int[] mTemp2 = new int[2];
+    private boolean mDraggedFarEnough;
+    private ExpandableView mStartingChild;
+    private Interpolator mInterpolator;
+
+    public DragDownHelper(Context context, View host, ExpandHelper.Callback callback,
+            OnDragDownListener onDragDownListener) {
+        mMinDragDistance = context.getResources().getDimensionPixelSize(
+                R.dimen.keyguard_drag_down_min_distance);
+        mInterpolator =
+                AnimationUtils.loadInterpolator(context, android.R.interpolator.fast_out_slow_in);
+        mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
+        mCallback = callback;
+        mOnDragDownListener = onDragDownListener;
+        mHost = host;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent event) {
+        final float x = event.getX();
+        final float y = event.getY();
+
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN:
+                mDraggedFarEnough = false;
+                mDraggingDown = false;
+                mStartingChild = null;
+                mInitialTouchY = y;
+                mInitialTouchX = x;
+                break;
+
+            case MotionEvent.ACTION_MOVE:
+                final float h = y - mInitialTouchY;
+                if (h > mTouchSlop && h > Math.abs(x - mInitialTouchX)) {
+                    mDraggingDown = true;
+                    captureStartingChild(mInitialTouchX, mInitialTouchY);
+                    mInitialTouchY = y;
+                    mInitialTouchX = x;
+                    return true;
+                }
+                break;
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (!mDraggingDown) {
+            return false;
+        }
+        final float x = event.getX();
+        final float y = event.getY();
+
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_MOVE:
+                final float h = y - mInitialTouchY;
+                captureStartingChild(mInitialTouchX, mInitialTouchY);
+                if (mStartingChild != null) {
+                    handleExpansion(h, mStartingChild);
+                }
+                if (h > mMinDragDistance) {
+                    if (!mDraggedFarEnough) {
+                        mDraggedFarEnough = true;
+                        mOnDragDownListener.onThresholdReached();
+                    }
+                } else {
+                    if (mDraggedFarEnough) {
+                        mDraggedFarEnough = false;
+                        mOnDragDownListener.onReset();
+                    }
+                }
+                return true;
+            case MotionEvent.ACTION_UP:
+                if (mDraggedFarEnough) {
+                    if (mStartingChild != null) {
+                        mCallback.setUserLockedChild(mStartingChild, false);
+                    }
+                    mOnDragDownListener.onDraggedDown(mStartingChild);
+                    mDraggingDown = false;
+                } else {
+                    stopDragging();
+                    return false;
+                }
+                break;
+            case MotionEvent.ACTION_CANCEL:
+                stopDragging();
+                return false;
+        }
+        return false;
+    }
+
+    private void captureStartingChild(float x, float y) {
+        if (mStartingChild == null) {
+            mStartingChild = findView(x, y);
+            if (mStartingChild != null) {
+                mCallback.setUserLockedChild(mStartingChild, true);
+            }
+        }
+    }
+
+    private void handleExpansion(float heightDelta, ExpandableView child) {
+        if (heightDelta < 0) {
+            heightDelta = 0;
+        }
+        boolean expandable = child.isContentExpandable();
+        float rubberbandFactor = expandable
+                ? RUBBERBAND_FACTOR_EXPANDABLE
+                : RUBBERBAND_FACTOR_STATIC;
+        float rubberband = heightDelta * rubberbandFactor;
+        if (expandable && (rubberband + child.getMinHeight()) > child.getMaxHeight()) {
+            float overshoot = (rubberband + child.getMinHeight()) - child.getMaxHeight();
+            overshoot *= (1 - RUBBERBAND_FACTOR_STATIC);
+            rubberband -= overshoot;
+        }
+        child.setActualHeight((int) (child.getMinHeight() + rubberband));
+    }
+
+    private void cancelExpansion(final ExpandableView child) {
+        if (child.getActualHeight() == child.getMinHeight()) {
+            return;
+        }
+        ObjectAnimator anim = ObjectAnimator.ofInt(child, "actualHeight",
+                child.getActualHeight(), child.getMinHeight());
+        anim.setInterpolator(mInterpolator);
+        anim.setDuration(SPRING_BACK_ANIMATION_LENGTH_MS);
+        anim.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mCallback.setUserLockedChild(child, false);
+            }
+        });
+        anim.start();
+    }
+
+    private void stopDragging() {
+        if (mStartingChild != null) {
+            cancelExpansion(mStartingChild);
+        }
+        mDraggingDown = false;
+        mOnDragDownListener.onReset();
+    }
+
+    private ExpandableView findView(float x, float y) {
+        mHost.getLocationOnScreen(mTemp2);
+        x += mTemp2[0];
+        y += mTemp2[1];
+        return mCallback.getChildAtRawPosition(x, y);
+    }
+
+    public interface OnDragDownListener {
+        void onDraggedDown(View startingChild);
+        void onReset();
+        void onThresholdReached();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index cd6495f..e5512a3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -18,29 +18,72 @@
 
 import android.content.Context;
 import android.util.AttributeSet;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
+import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
 
-public class ExpandableNotificationRow extends FrameLayout {
-    private int mRowHeight;
+import com.android.systemui.R;
 
-    /** does this row contain layouts that can adapt to row expansion */
+public class ExpandableNotificationRow extends ActivatableNotificationView {
+    private int mRowMinHeight;
+    private int mRowMaxHeight;
+
+    /** Does this row contain layouts that can adapt to row expansion */
     private boolean mExpandable;
-    /** has the user manually expanded this row */
+    /** Has the user actively changed the expansion state of this row */
+    private boolean mHasUserChangedExpansion;
+    /** If {@link #mHasUserChangedExpansion}, has the user expanded this row */
     private boolean mUserExpanded;
-    /** is the user touching this row */
+    /** Is the user touching this row */
     private boolean mUserLocked;
+    /** Are we showing the "public" version */
+    private boolean mShowingPublic;
+
+    /**
+     * Is this notification expanded by the system. The expansion state can be overridden by the
+     * user expansion.
+     */
+    private boolean mIsSystemExpanded;
+
+    /**
+     * Whether the notification expansion is disabled. This is the case on Keyguard.
+     */
+    private boolean mExpansionDisabled;
+
+    private NotificationContentView mPublicLayout;
+    private NotificationContentView mPrivateLayout;
+    private int mMaxExpandHeight;
+    private NotificationActivator mActivator;
 
     public ExpandableNotificationRow(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
-    public int getRowHeight() {
-        return mRowHeight;
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mPublicLayout = (NotificationContentView) findViewById(R.id.expandedPublic);
+        mPrivateLayout = (NotificationContentView) findViewById(R.id.expanded);
+
+        mActivator = new NotificationActivator(this, this);
     }
 
-    public void setRowHeight(int rowHeight) {
-        this.mRowHeight = rowHeight;
+    @Override
+    public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
+        if (super.onRequestSendAccessibilityEvent(child, event)) {
+            // Add a record for the entire layout since its content is somehow small.
+            // The event comes from a leaf view that is interacted with.
+            AccessibilityEvent record = AccessibilityEvent.obtain();
+            onInitializeAccessibilityEvent(record);
+            dispatchPopulateAccessibilityEvent(record);
+            event.appendRecord(record);
+            return true;
+        }
+        return false;
+    }
+
+    public void setHeightRange(int rowMinHeight, int rowMaxHeight) {
+        mRowMinHeight = rowMinHeight;
+        mRowMaxHeight = rowMaxHeight;
     }
 
     public boolean isExpandable() {
@@ -51,11 +94,24 @@
         mExpandable = expandable;
     }
 
+    /**
+     * @return whether the user has changed the expansion state
+     */
+    public boolean hasUserChangedExpansion() {
+        return mHasUserChangedExpansion;
+    }
+
     public boolean isUserExpanded() {
         return mUserExpanded;
     }
 
+    /**
+     * Set this notification to be expanded by the user
+     *
+     * @param userExpanded whether the user wants this notification to be expanded
+     */
     public void setUserExpanded(boolean userExpanded) {
+        mHasUserChangedExpansion = true;
         mUserExpanded = userExpanded;
     }
 
@@ -67,13 +123,144 @@
         mUserLocked = userLocked;
     }
 
-    public void setExpanded(boolean expand) {
-        ViewGroup.LayoutParams lp = getLayoutParams();
+    /**
+     * @return has the system set this notification to be expanded
+     */
+    public boolean isSystemExpanded() {
+        return mIsSystemExpanded;
+    }
+
+    /**
+     * Set this notification to be expanded by the system.
+     *
+     * @param expand whether the system wants this notification to be expanded.
+     */
+    public void setSystemExpanded(boolean expand) {
+        mIsSystemExpanded = expand;
+        notifyHeightChanged();
+    }
+
+    /**
+     * @param expansionDisabled whether to prevent notification expansion
+     */
+    public void setExpansionDisabled(boolean expansionDisabled) {
+        mExpansionDisabled = expansionDisabled;
+        notifyHeightChanged();
+    }
+
+    /**
+     * Apply an expansion state to the layout.
+     */
+    public void applyExpansionToLayout() {
+        boolean expand = isExpanded();
         if (expand && mExpandable) {
-            lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
+            setActualHeight(mMaxExpandHeight);
         } else {
-            lp.height = mRowHeight;
+            setActualHeight(mRowMinHeight);
         }
-        setLayoutParams(lp);
+    }
+
+    @Override
+    public int getIntrinsicHeight() {
+        if (isUserLocked()) {
+            return getActualHeight();
+        }
+        boolean inExpansionState = isExpanded();
+        if (!inExpansionState) {
+            // not expanded, so we return the collapsed size
+            return mRowMinHeight;
+        }
+
+        return mShowingPublic ? mRowMinHeight : getMaxExpandHeight();
+    }
+
+    /**
+     * Check whether the view state is currently expanded. This is given by the system in {@link
+     * #setSystemExpanded(boolean)} and can be overridden by user expansion or
+     * collapsing in {@link #setUserExpanded(boolean)}. Note that the visual appearance of this
+     * view can differ from this state, if layout params are modified from outside.
+     *
+     * @return whether the view state is currently expanded.
+     */
+    private boolean isExpanded() {
+        return !mExpansionDisabled
+                && (!hasUserChangedExpansion() && isSystemExpanded() || isUserExpanded());
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        boolean updateExpandHeight = mMaxExpandHeight == 0;
+        mMaxExpandHeight = mPrivateLayout.getMaxHeight();
+        if (updateExpandHeight) {
+            applyExpansionToLayout();
+        }
+    }
+
+    public void setShowingPublic(boolean show) {
+        mShowingPublic = show;
+
+        // bail out if no public version
+        if (mPublicLayout.getChildCount() == 0) return;
+
+        // TODO: animation?
+        mPublicLayout.setVisibility(show ? View.VISIBLE : View.GONE);
+        mPrivateLayout.setVisibility(show ? View.GONE : View.VISIBLE);
+    }
+
+    /**
+     * Sets the notification as dimmed, meaning that it will appear in a more gray variant.
+     */
+    @Override
+    public void setDimmed(boolean dimmed, boolean fade) {
+        super.setDimmed(dimmed, fade);
+        mActivator.setDimmed(dimmed, fade);
+    }
+
+    public int getMaxExpandHeight() {
+        return mMaxExpandHeight;
+    }
+
+    public NotificationActivator getActivator() {
+        return mActivator;
+    }
+
+    /**
+     * @return the potential height this view could expand in addition.
+     */
+    public int getExpandPotential() {
+        return getIntrinsicHeight() - getActualHeight();
+    }
+
+    @Override
+    public boolean isContentExpandable() {
+        return mPrivateLayout.isContentExpandable();
+    }
+
+    @Override
+    public void setActualHeight(int height) {
+        mPrivateLayout.setActualHeight(height);
+        invalidate();
+        super.setActualHeight(height);
+    }
+
+    @Override
+    public int getMaxHeight() {
+        return mPrivateLayout.getMaxHeight();
+    }
+
+    @Override
+    public int getMinHeight() {
+        return mPrivateLayout.getMinHeight();
+    }
+
+    @Override
+    public void setClipTopAmount(int clipTopAmount) {
+        super.setClipTopAmount(clipTopAmount);
+        mPrivateLayout.setClipTopAmount(clipTopAmount);
+    }
+
+    public void notifyContentUpdated() {
+        mPrivateLayout.notifyContentUpdated();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableOutlineView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableOutlineView.java
new file mode 100644
index 0000000..43eb5b5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableOutlineView.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.content.Context;
+import android.graphics.Outline;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+
+/**
+ * Like {@link ExpandableView}, but setting an outline for the height and clipping.
+ */
+public abstract class ExpandableOutlineView extends ExpandableView {
+
+    private final Outline mOutline = new Outline();
+
+    public ExpandableOutlineView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void setActualHeight(int actualHeight) {
+        super.setActualHeight(actualHeight);
+        updateOutline();
+    }
+
+    @Override
+    public void setClipTopAmount(int clipTopAmount) {
+        super.setClipTopAmount(clipTopAmount);
+        updateOutline();
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        updateOutline();
+    }
+
+    private void updateOutline() {
+        mOutline.setRect(0,
+                mClipTopAmount,
+                getWidth(),
+                Math.max(mActualHeight, mClipTopAmount));
+        setOutline(mOutline);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
new file mode 100644
index 0000000..1664a32
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
@@ -0,0 +1,124 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Outline;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.InsetDrawable;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.FrameLayout;
+
+/**
+ * An abstract view for expandable views.
+ */
+public abstract class ExpandableView extends FrameLayout {
+
+    private OnHeightChangedListener mOnHeightChangedListener;
+    protected int mActualHeight;
+    protected int mClipTopAmount;
+    private boolean mActualHeightInitialized;
+
+    public ExpandableView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        if (!mActualHeightInitialized && mActualHeight == 0) {
+            mActualHeight = getHeight();
+        }
+        mActualHeightInitialized = true;
+    }
+
+    /**
+     * Sets the actual height of this notification. This is different than the laid out
+     * {@link View#getHeight()}, as we want to avoid layouting during scrolling and expanding.
+     */
+    public void setActualHeight(int actualHeight) {
+        mActualHeight = actualHeight;
+        notifyHeightChanged();
+    }
+
+    /**
+     * See {@link #setActualHeight}.
+     *
+     * @return The current actual height of this notification.
+     */
+    public int getActualHeight() {
+        return mActualHeight;
+    }
+
+    /**
+     * @return The maximum height of this notification.
+     */
+    public int getMaxHeight() {
+        return getHeight();
+    }
+
+    /**
+     * @return The minimum height of this notification.
+     */
+    public int getMinHeight() {
+        return getHeight();
+    }
+
+    /**
+     * @return The desired notification height.
+     */
+    public int getIntrinsicHeight() {
+        return mActualHeight;
+    }
+
+    /**
+     * Sets the amount this view should be clipped from the top. This is used when an expanded
+     * notification is scrolling in the top or bottom stack.
+     *
+     * @param clipTopAmount The amount of pixels this view should be clipped from top.
+     */
+    public void setClipTopAmount(int clipTopAmount) {
+        mClipTopAmount = clipTopAmount;
+    }
+
+    public void setOnHeightChangedListener(OnHeightChangedListener listener) {
+        mOnHeightChangedListener = listener;
+    }
+
+    /**
+     * @return Whether we can expand this views content.
+     */
+    public boolean isContentExpandable() {
+        return false;
+    }
+
+    public void notifyHeightChanged() {
+        if (mOnHeightChangedListener != null) {
+            mOnHeightChangedListener.onHeightChanged(this);
+        }
+    }
+
+    /**
+     * A listener notifying when {@link #getActualHeight} changes.
+     */
+    public interface OnHeightChangedListener {
+        void onHeightChanged(ExpandableView view);
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java b/packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java
new file mode 100644
index 0000000..6401695
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/InterceptedNotifications.java
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.app.Notification;
+import android.content.Context;
+import android.os.Binder;
+import android.os.IBinder;
+import android.os.Process;
+import android.service.notification.StatusBarNotification;
+import android.util.ArrayMap;
+import android.view.View;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.NotificationData.Entry;
+import com.android.systemui.statusbar.phone.PhoneStatusBar;
+
+public class InterceptedNotifications {
+    private static final String TAG = "InterceptedNotifications";
+    private static final String EXTRA_INTERCEPT = "android.intercept";
+
+    private final Context mContext;
+    private final PhoneStatusBar mBar;
+    private final ArrayMap<IBinder, StatusBarNotification> mIntercepted
+            = new ArrayMap<IBinder, StatusBarNotification>();
+
+    private Binder mSynKey;
+
+    public InterceptedNotifications(Context context, PhoneStatusBar bar) {
+        mContext = context;
+        mBar = bar;
+    }
+
+    public void releaseIntercepted() {
+        final int n = mIntercepted.size();
+        for (int i = 0; i < n; i++) {
+            final IBinder key = mIntercepted.keyAt(i);
+            final StatusBarNotification sbn = mIntercepted.valueAt(i);
+            sbn.getNotification().extras.putBoolean(EXTRA_INTERCEPT, false);
+            mBar.addNotification(key, sbn);
+        }
+        mIntercepted.clear();
+        updateSyntheticNotification();
+    }
+
+    public boolean tryIntercept(IBinder key, StatusBarNotification notification) {
+        if (!notification.getNotification().extras.getBoolean(EXTRA_INTERCEPT)) return false;
+        mIntercepted.put(key, notification);
+        updateSyntheticNotification();
+        return true;
+    }
+
+    public void remove(IBinder key) {
+        if (mIntercepted.remove(key) != null) {
+            updateSyntheticNotification();
+        }
+    }
+
+    public boolean isSyntheticEntry(Entry ent) {
+        return mSynKey != null && ent.key.equals(mSynKey);
+    }
+
+    public void update(IBinder key, StatusBarNotification notification) {
+        if (mIntercepted.containsKey(key)) {
+            mIntercepted.put(key, notification);
+        }
+    }
+
+    private void updateSyntheticNotification() {
+        if (mIntercepted.isEmpty()) {
+            if (mSynKey != null) {
+                mBar.removeNotification(mSynKey);
+                mSynKey = null;
+            }
+            return;
+        }
+        final Notification n = new Notification.Builder(mContext)
+                .setSmallIcon(R.drawable.stat_sys_zen_limited)
+                .setContentTitle(mContext.getResources().getQuantityString(
+                        R.plurals.zen_mode_notification_title,
+                        mIntercepted.size(), mIntercepted.size()))
+                .setContentText(mContext.getString(R.string.zen_mode_notification_text))
+                .setOngoing(true)
+                .build();
+        final StatusBarNotification sbn = new StatusBarNotification(mContext.getPackageName(),
+                mContext.getBasePackageName(),
+                TAG.hashCode(), TAG, Process.myUid(), Process.myPid(), 0, n,
+                mBar.getCurrentUserHandle());
+        if (mSynKey == null) {
+            mSynKey = new Binder();
+            mBar.addNotification(mSynKey, sbn);
+        } else {
+           mBar.updateNotification(mSynKey, sbn);
+        }
+        final NotificationData.Entry entry = mBar.mNotificationData.findByKey(mSynKey);
+        entry.row.setOnClickListener(mSynClickListener);
+    }
+
+    private final View.OnClickListener mSynClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            releaseIntercepted();
+        }
+    };
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/LatestItemView.java b/packages/SystemUI/src/com/android/systemui/statusbar/LatestItemView.java
deleted file mode 100644
index 6419777..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/LatestItemView.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2008 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.android.systemui.statusbar;
-
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
-import android.widget.FrameLayout;
-
-public class LatestItemView extends FrameLayout {
-    public LatestItemView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    public void setOnClickListener(OnClickListener l) {
-        super.setOnClickListener(l);
-    }
-
-    @Override
-    public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
-        if (super.onRequestSendAccessibilityEvent(child, event)) {
-            // Add a record for the entire layout since its content is somehow small.
-            // The event comes from a leaf view that is interacted with.
-            AccessibilityEvent record = AccessibilityEvent.obtain();
-            onInitializeAccessibilityEvent(record);
-            dispatchPopulateAccessibilityEvent(record);
-            event.appendRecord(record);
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationActivator.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationActivator.java
new file mode 100644
index 0000000..a03aeec
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationActivator.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.content.Context;
+import android.view.View;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+
+import com.android.systemui.R;
+
+/**
+ * A helper class used by both {@link com.android.systemui.statusbar.ExpandableNotificationRow} and
+ * {@link com.android.systemui.statusbar.NotificationOverflowIconsView} to make a notification look
+ * active after tapping it once on the Keyguard.
+ */
+public class NotificationActivator {
+
+    public static final int ANIMATION_LENGTH_MS = 220;
+    private static final float INVERSE_ALPHA = 0.9f;
+    private static final float DIMMED_SCALE = 0.95f;
+
+    /**
+     * Normal state. Notification is fully interactable.
+     */
+    private static final int STATE_NORMAL = 0;
+
+    /**
+     * Dimmed state. Neutral state when on the lockscreen, with slight transparency and scaled down
+     * a bit.
+     */
+    private static final int STATE_DIMMED = 1;
+
+    /**
+     * Activated state. Used after tapping a notification on the lockscreen. Normal transparency and
+     * normal scale.
+     */
+    private static final int STATE_ACTIVATED = 2;
+
+    /**
+     * Inverse activated state. Used for the other notifications on the lockscreen when tapping on
+     * one.
+     */
+    private static final int STATE_ACTIVATED_INVERSE = 3;
+
+    private final View mTargetView;
+    private final View mHotspotView;
+    private final Interpolator mFastOutSlowInInterpolator;
+    private final Interpolator mLinearOutSlowInInterpolator;
+    private final int mTranslationZ;
+
+    private int mState;
+
+    public NotificationActivator(View targetView, View hotspotView) {
+        mTargetView = targetView;
+        mHotspotView = hotspotView;
+        Context ctx = targetView.getContext();
+        mFastOutSlowInInterpolator =
+                AnimationUtils.loadInterpolator(ctx, android.R.interpolator.fast_out_slow_in);
+        mLinearOutSlowInInterpolator =
+                AnimationUtils.loadInterpolator(ctx, android.R.interpolator.linear_out_slow_in);
+        mTranslationZ =
+                ctx.getResources().getDimensionPixelSize(R.dimen.z_distance_between_notifications);
+        mTargetView.animate().setDuration(ANIMATION_LENGTH_MS);
+    }
+
+    public void activateInverse() {
+        if (mState == STATE_ACTIVATED_INVERSE) {
+            return;
+        }
+        mTargetView.animate().cancel();
+        mTargetView.animate().withLayer().alpha(INVERSE_ALPHA);
+        mState = STATE_ACTIVATED_INVERSE;
+    }
+
+    public void addHotspot() {
+        mHotspotView.getBackground().setHotspot(
+                0, mHotspotView.getWidth()/2, mHotspotView.getHeight()/2);
+    }
+
+    public void activate() {
+        if (mState == STATE_ACTIVATED) {
+            return;
+        }
+        mTargetView.animate().cancel();
+        mTargetView.animate()
+                .setInterpolator(mLinearOutSlowInInterpolator)
+                .scaleX(1)
+                .scaleY(1)
+                .translationZBy(mTranslationZ);
+        mState = STATE_ACTIVATED;
+    }
+
+    public void reset() {
+        if (mState == STATE_DIMMED) {
+            return;
+        }
+        mTargetView.animate().cancel();
+        mTargetView.animate()
+                .setInterpolator(mFastOutSlowInInterpolator)
+                .scaleX(DIMMED_SCALE)
+                .scaleY(DIMMED_SCALE)
+                .translationZBy(-mTranslationZ);
+        if (mTargetView.getAlpha() != 1.0f) {
+            mTargetView.animate().withLayer().alpha(1);
+        }
+        mState = STATE_DIMMED;
+    }
+
+    public void setDimmed(boolean dimmed, boolean fade) {
+        if (dimmed) {
+            mTargetView.animate().cancel();
+            if (fade) {
+                mTargetView.animate()
+                        .setInterpolator(mFastOutSlowInInterpolator)
+                        .scaleX(DIMMED_SCALE)
+                        .scaleY(DIMMED_SCALE);
+            } else {
+                mTargetView.setScaleX(DIMMED_SCALE);
+                mTargetView.setScaleY(DIMMED_SCALE);
+            }
+            mState = STATE_DIMMED;
+        } else {
+            mTargetView.animate().cancel();
+            if (fade) {
+                mTargetView.animate()
+                        .setInterpolator(mFastOutSlowInInterpolator)
+                        .scaleX(1)
+                        .scaleY(1);
+            } else {
+                mTargetView.animate().cancel();
+                mTargetView.setScaleX(1);
+                mTargetView.setScaleY(1);
+            }
+            mState = STATE_NORMAL;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
new file mode 100644
index 0000000..1f15eaf
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.content.Context;
+import android.graphics.Rect;
+import android.util.AttributeSet;
+import android.view.Gravity;
+import android.view.View;
+
+import com.android.systemui.R;
+
+/**
+ * A frame layout containing the actual payload of the notification, including the contracted and
+ * expanded layout. This class is responsible for clipping the content and and switching between the
+ * expanded and contracted view depending on its clipped size.
+ */
+public class NotificationContentView extends ExpandableView {
+
+    private final Rect mClipBounds = new Rect();
+
+    private View mContractedChild;
+    private View mExpandedChild;
+
+    private int mSmallHeight;
+
+    public NotificationContentView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        mSmallHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height);
+        mActualHeight = mSmallHeight;
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        updateClipping();
+    }
+
+    public void setContractedChild(View child) {
+        if (mContractedChild != null) {
+            removeView(mContractedChild);
+        }
+        sanitizeContractedLayoutParams(child);
+        addView(child);
+        mContractedChild = child;
+        selectLayout();
+    }
+
+    public void setExpandedChild(View child) {
+        if (mExpandedChild != null) {
+            removeView(mExpandedChild);
+        }
+        addView(child);
+        mExpandedChild = child;
+        selectLayout();
+    }
+
+    @Override
+    public void setActualHeight(int actualHeight) {
+        super.setActualHeight(actualHeight);
+        selectLayout();
+        updateClipping();
+    }
+
+    @Override
+    public int getMaxHeight() {
+
+        // The maximum height is just the laid out height.
+        return getHeight();
+    }
+
+    @Override
+    public int getMinHeight() {
+        return mSmallHeight;
+    }
+
+    @Override
+    public void setClipTopAmount(int clipTopAmount) {
+        super.setClipTopAmount(clipTopAmount);
+        updateClipping();
+    }
+
+    public int getClipTopAmount() {
+        return mClipTopAmount;
+    }
+
+    private void updateClipping() {
+        mClipBounds.set(0, mClipTopAmount, getWidth(), mActualHeight);
+        setClipBounds(mClipBounds);
+    }
+
+    private void sanitizeContractedLayoutParams(View contractedChild) {
+        LayoutParams lp = (LayoutParams) contractedChild.getLayoutParams();
+        lp.height = mSmallHeight;
+        contractedChild.setLayoutParams(lp);
+    }
+
+    private void selectLayout() {
+        if (mActualHeight <= mSmallHeight || mExpandedChild == null) {
+            if (mContractedChild.getVisibility() != View.VISIBLE) {
+                mContractedChild.setVisibility(View.VISIBLE);
+            }
+            if (mExpandedChild != null && mExpandedChild.getVisibility() != View.INVISIBLE) {
+                mExpandedChild.setVisibility(View.INVISIBLE);
+            }
+        } else {
+            if (mExpandedChild.getVisibility() != View.VISIBLE) {
+                mExpandedChild.setVisibility(View.VISIBLE);
+            }
+            if (mContractedChild.getVisibility() != View.INVISIBLE) {
+                mContractedChild.setVisibility(View.INVISIBLE);
+            }
+        }
+    }
+
+    public void notifyContentUpdated() {
+        selectLayout();
+    }
+
+    @Override
+    public boolean isContentExpandable() {
+        return mExpandedChild != null;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
index 5264998..6b6f55a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java
@@ -21,8 +21,6 @@
 import android.view.View;
 import android.widget.ImageView;
 
-import com.android.systemui.R;
-
 import java.util.ArrayList;
 import java.util.Comparator;
 
@@ -35,8 +33,8 @@
         public StatusBarNotification notification;
         public StatusBarIconView icon;
         public ExpandableNotificationRow row; // the outer expanded view
-        public View content; // takes the click events and sends the PendingIntent
         public View expanded; // the inflated RemoteViews
+        public View expandedPublic; // for insecure lockscreens
         public ImageView largeIcon;
         private View expandedBig;
         private boolean interruption;
@@ -53,6 +51,7 @@
         public View getBigContentView() {
             return expandedBig;
         }
+        public View getPublicContentView() { return expandedPublic; }
         /**
          * Set the flag indicating that this is being touched by the user.
          */
@@ -71,9 +70,9 @@
             final StatusBarNotification na = a.notification;
             final StatusBarNotification nb = b.notification;
             int d = na.getScore() - nb.getScore();
-	    if (a.interruption != b.interruption) {
-	      return a.interruption ? 1 : -1;
-	    } else if (d != 0) {
+            if (a.interruption != b.interruption) {
+                return a.interruption ? 1 : -1;
+            } else if (d != 0) {
                 return d;
             } else {
                 return (int) (na.getNotification().when - nb.getNotification().when);
@@ -110,19 +109,6 @@
         return i;
     }
 
-    public int add(IBinder key, StatusBarNotification notification, ExpandableNotificationRow row,
-            View content, View expanded, StatusBarIconView icon) {
-        Entry entry = new Entry();
-        entry.key = key;
-        entry.notification = notification;
-        entry.row = row;
-        entry.content = content;
-        entry.expanded = expanded;
-        entry.icon = icon;
-        entry.largeIcon = null; // TODO add support for large icons
-        return add(entry);
-    }
-
     public Entry remove(IBinder key) {
         Entry e = findByKey(key);
         if (e != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowContainer.java
new file mode 100644
index 0000000..e6b5600
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowContainer.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+import com.android.systemui.R;
+
+/**
+ * Container view for overflowing notification icons on Keyguard.
+ */
+public class NotificationOverflowContainer extends ActivatableNotificationView {
+
+    private NotificationOverflowIconsView mIconsView;
+    private NotificationActivator mActivator;
+
+    public NotificationOverflowContainer(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    public void setActualHeight(int currentHeight) {
+        // noop
+    }
+
+    @Override
+    public int getActualHeight() {
+        return getHeight();
+    }
+
+    @Override
+    public void setClipTopAmount(int clipTopAmount) {
+        // noop
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mIconsView = (NotificationOverflowIconsView) findViewById(R.id.overflow_icons_view);
+        mIconsView.setMoreText((TextView) findViewById(R.id.more_text));
+
+        mActivator = new NotificationActivator(this, this);
+        setDimmed(true, false);
+    }
+
+    @Override
+    public void setDimmed(boolean dimmed, boolean fade) {
+        super.setDimmed(dimmed, fade);
+        mActivator.setDimmed(dimmed, fade);
+    }
+
+    public NotificationOverflowIconsView getIconsView() {
+        return mIconsView;
+    }
+
+    public NotificationActivator getActivator() {
+        return mActivator;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
new file mode 100644
index 0000000..ce31894
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationOverflowIconsView.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+import android.app.Notification;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.PorterDuff;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.android.internal.statusbar.StatusBarIcon;
+import com.android.systemui.R;
+import com.android.systemui.statusbar.phone.IconMerger;
+
+/**
+ * A view to display all the overflowing icons on Keyguard.
+ */
+public class NotificationOverflowIconsView extends IconMerger {
+
+    private TextView mMoreText;
+    private int mTintColor;
+
+    public NotificationOverflowIconsView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mTintColor = getResources().getColor(R.color.keyguard_overflow_content_color);
+    }
+
+    public void setMoreText(TextView moreText) {
+        mMoreText = moreText;
+    }
+
+    public void addNotification(NotificationData.Entry notification) {
+        StatusBarIconView v = new StatusBarIconView(getContext(), "",
+                notification.notification.getNotification());
+        v.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
+        v.setColorFilter(mTintColor, PorterDuff.Mode.MULTIPLY);
+        addView(v);
+        v.set(notification.icon.getStatusBarIcon());
+        updateMoreText();
+    }
+
+    private void updateMoreText() {
+        mMoreText.setText(getResources().getQuantityString(
+                R.plurals.keyguard_more_overflow_text, getChildCount(), getChildCount()));
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index f1c8e01..89da08f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -17,6 +17,8 @@
 package com.android.systemui.statusbar;
 
 import android.content.Context;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.View;
@@ -35,11 +37,14 @@
 
     static final boolean DEBUG = false;
     static final String TAG = "SignalClusterView";
+    static final PorterDuffColorFilter PROBLEM_FILTER
+            = new PorterDuffColorFilter(0xffab653b, PorterDuff.Mode.SRC_ATOP);
 
     NetworkController mNC;
 
     private boolean mWifiVisible = false;
     private int mWifiStrengthId = 0;
+    private boolean mInetProblem;
     private boolean mMobileVisible = false;
     private int mMobileStrengthId = 0, mMobileTypeId = 0;
     private boolean mIsAirplaneMode = false;
@@ -96,19 +101,22 @@
     }
 
     @Override
-    public void setWifiIndicators(boolean visible, int strengthIcon, String contentDescription) {
+    public void setWifiIndicators(boolean visible, int strengthIcon, boolean problem,
+            String contentDescription) {
         mWifiVisible = visible;
         mWifiStrengthId = strengthIcon;
+        mInetProblem = problem;
         mWifiDescription = contentDescription;
 
         apply();
     }
 
     @Override
-    public void setMobileDataIndicators(boolean visible, int strengthIcon,
+    public void setMobileDataIndicators(boolean visible, int strengthIcon, boolean problem,
             int typeIcon, String contentDescription, String typeContentDescription) {
         mMobileVisible = visible;
         mMobileStrengthId = strengthIcon;
+        mInetProblem = problem;
         mMobileTypeId = typeIcon;
         mMobileDescription = contentDescription;
         mMobileTypeDescription = typeContentDescription;
@@ -158,13 +166,17 @@
         apply();
     }
 
+    private void applyInetProblem(ImageView iv) {
+        iv.setColorFilter(mInetProblem ? PROBLEM_FILTER : null);
+    }
+
     // Run after each indicator change.
     private void apply() {
         if (mWifiGroup == null) return;
 
         if (mWifiVisible) {
             mWifi.setImageResource(mWifiStrengthId);
-
+            applyInetProblem(mWifi);
             mWifiGroup.setContentDescription(mWifiDescription);
             mWifiGroup.setVisibility(View.VISIBLE);
         } else {
@@ -179,7 +191,7 @@
         if (mMobileVisible && !mIsAirplaneMode) {
             mMobile.setImageResource(mMobileStrengthId);
             mMobileType.setImageResource(mMobileTypeId);
-
+            applyInetProblem(mMobile);
             mMobileGroup.setContentDescription(mMobileTypeDescription + " " + mMobileDescription);
             mMobileGroup.setVisibility(View.VISIBLE);
         } else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index 9f9524b..6f839bd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -119,7 +119,7 @@
         }
 
         if (!numberEquals) {
-            if (icon.number > 0 && mContext.getResources().getBoolean(
+            if (icon.number > 0 && getContext().getResources().getBoolean(
                         R.bool.config_statusBarShowNumber)) {
                 if (mNumberBackground == null) {
                     mNumberBackground = getContext().getResources().getDrawable(
@@ -240,10 +240,10 @@
 
     void placeNumber() {
         final String str;
-        final int tooBig = mContext.getResources().getInteger(
+        final int tooBig = getContext().getResources().getInteger(
                 android.R.integer.status_bar_notification_info_maxnum);
         if (mIcon.number > tooBig) {
-            str = mContext.getResources().getString(
+            str = getContext().getResources().getString(
                         android.R.string.status_bar_notification_info_overflow);
         } else {
             NumberFormat f = NumberFormat.getIntegerInstance();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarState.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarState.java
new file mode 100644
index 0000000..9d75228
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarState.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar;
+
+/**
+ * Class to encapsulate all possible status bar states regarding Keyguard.
+ */
+public class StatusBarState {
+
+    /**
+     * The status bar is in the "normal" shade mode.
+     */
+    public static final int SHADE = 0;
+
+    /**
+     * Status bar is currently the Keyguard.
+     */
+    public static final int KEYGUARD = 1;
+
+    /**
+     * Status bar is in the special mode, where it is fully interactive but still locked. So
+     * dismissing the shade will still show the bouncer.
+     */
+    public static final int SHADE_LOCKED = 2;
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
index aba7afa..a3cf0f2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java
@@ -143,7 +143,7 @@
             }
         }
         StatusBarIcon icon = new StatusBarIcon(iconPkg, UserHandle.CURRENT, iconId, 0, 0, "Demo");
-        StatusBarIconView v = new StatusBarIconView(mContext, null);
+        StatusBarIconView v = new StatusBarIconView(getContext(), null);
         v.setTag(slot);
         v.set(icon);
         addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize));
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
new file mode 100644
index 0000000..3cc22ef
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.phone;
+
+import android.app.ActivityManagerNative;
+import android.app.admin.DevicePolicyManager;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.PowerManager;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.provider.MediaStore;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.accessibility.AccessibilityManager;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+import android.widget.FrameLayout;
+
+import com.android.systemui.R;
+
+/**
+ * Implementation for the bottom area of the Keyguard, including camera/phone affordance and status
+ * text.
+ */
+public class KeyguardBottomAreaView extends FrameLayout {
+
+    final static String TAG = "PhoneStatusBar/KeyguardBottomAreaView";
+
+    private View mCameraButton;
+    private float mCameraDragDistance;
+    private PowerManager mPowerManager;
+    private int mScaledTouchSlop;
+
+    public KeyguardBottomAreaView(Context context) {
+        super(context);
+    }
+
+    public KeyguardBottomAreaView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public KeyguardBottomAreaView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public KeyguardBottomAreaView(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    @Override
+    protected void onFinishInflate() {
+        super.onFinishInflate();
+        mCameraButton = findViewById(R.id.camera_button);
+        watchForDevicePolicyChanges();
+        watchForAccessibilityChanges();
+        updateCameraVisibility();
+        mCameraDragDistance = getResources().getDimension(R.dimen.camera_drag_distance);
+        mScaledTouchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
+        mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
+    }
+
+    private void updateCameraVisibility() {
+        boolean visible = !isCameraDisabledByDpm();
+        mCameraButton.setVisibility(visible ? View.VISIBLE : View.GONE);
+    }
+
+    private boolean isCameraDisabledByDpm() {
+        final DevicePolicyManager dpm =
+                (DevicePolicyManager) getContext().getSystemService(Context.DEVICE_POLICY_SERVICE);
+        if (dpm != null) {
+            try {
+                final int userId = ActivityManagerNative.getDefault().getCurrentUser().id;
+                final int disabledFlags = dpm.getKeyguardDisabledFeatures(null, userId);
+                final  boolean disabledBecauseKeyguardSecure =
+                        (disabledFlags & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0
+                                && KeyguardTouchDelegate.getInstance(getContext()).isSecure();
+                return dpm.getCameraDisabled(null) || disabledBecauseKeyguardSecure;
+            } catch (RemoteException e) {
+                Log.e(TAG, "Can't get userId", e);
+            }
+        }
+        return false;
+    }
+
+    private void watchForDevicePolicyChanges() {
+        final IntentFilter filter = new IntentFilter();
+        filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
+        getContext().registerReceiver(new BroadcastReceiver() {
+            public void onReceive(Context context, Intent intent) {
+                post(new Runnable() {
+                    @Override
+                    public void run() {
+                        updateCameraVisibility();
+                    }
+                });
+            }
+        }, filter);
+    }
+
+    private void watchForAccessibilityChanges() {
+        final AccessibilityManager am =
+                (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
+
+        // Set the initial state
+        enableAccessibility(am.isTouchExplorationEnabled());
+
+        // Watch for changes
+        am.addTouchExplorationStateChangeListener(
+                new AccessibilityManager.TouchExplorationStateChangeListener() {
+            @Override
+            public void onTouchExplorationStateChanged(boolean enabled) {
+                enableAccessibility(enabled);
+            }
+        });
+    }
+
+    private void enableAccessibility(boolean touchExplorationEnabled) {
+
+        // Add a touch handler or accessibility click listener for camera button.
+        if (touchExplorationEnabled) {
+            mCameraButton.setOnTouchListener(null);
+            mCameraButton.setOnClickListener(mCameraClickListener);
+        } else {
+            mCameraButton.setOnTouchListener(mCameraTouchListener);
+            mCameraButton.setOnClickListener(null);
+        }
+    }
+
+    private void launchCamera() {
+        mContext.startActivityAsUser(
+                new Intent(MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA_SECURE),
+                UserHandle.CURRENT);
+    }
+
+    private final OnClickListener mCameraClickListener = new OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            launchCamera();
+        }
+    };
+
+    private final OnTouchListener mCameraTouchListener = new OnTouchListener() {
+        private float mStartX;
+        private boolean mTouchSlopReached;
+        private boolean mSkipCancelAnimation;
+
+        @Override
+        public boolean onTouch(final View cameraButtonView, MotionEvent event) {
+            float realX = event.getRawX();
+            switch (event.getAction()) {
+                case MotionEvent.ACTION_DOWN:
+                    mStartX = realX;
+                    mTouchSlopReached = false;
+                    mSkipCancelAnimation = false;
+                    break;
+                case MotionEvent.ACTION_MOVE:
+                    if (realX > mStartX) {
+                        realX = mStartX;
+                    }
+                    if (realX < mStartX - mCameraDragDistance) {
+                        cameraButtonView.setPressed(true);
+                        mPowerManager.userActivity(event.getEventTime(), false);
+                    } else {
+                        cameraButtonView.setPressed(false);
+                    }
+                    if (realX < mStartX - mScaledTouchSlop) {
+                        mTouchSlopReached = true;
+                    }
+                    cameraButtonView.setTranslationX(Math.max(realX - mStartX,
+                            -mCameraDragDistance));
+                    break;
+                case MotionEvent.ACTION_UP:
+                    if (realX < mStartX - mCameraDragDistance) {
+                        launchCamera();
+                        cameraButtonView.animate().x(-cameraButtonView.getWidth())
+                                .setInterpolator(new AccelerateInterpolator(2f)).withEndAction(
+                                new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        cameraButtonView.setTranslationX(0);
+                                    }
+                                });
+                        mSkipCancelAnimation = true;
+                    }
+                    if (realX < mStartX - mScaledTouchSlop) {
+                        mTouchSlopReached = true;
+                    }
+                    if (!mTouchSlopReached) {
+                        mSkipCancelAnimation = true;
+                        cameraButtonView.animate().translationX(-mCameraDragDistance / 2).
+                                setInterpolator(new DecelerateInterpolator()).withEndAction(
+                                new Runnable() {
+                                    @Override
+                                    public void run() {
+                                        cameraButtonView.animate().translationX(0).
+                                                setInterpolator(new AccelerateInterpolator());
+                                    }
+                                });
+                    }
+                case MotionEvent.ACTION_CANCEL:
+                    cameraButtonView.setPressed(false);
+                    if (!mSkipCancelAnimation) {
+                        cameraButtonView.animate().translationX(0)
+                                .setInterpolator(new AccelerateInterpolator(2f));
+                    }
+                    break;
+            }
+            return true;
+        }
+    };
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
new file mode 100644
index 0000000..1ffb4ee
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.phone;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.KeyguardViewBase;
+import com.android.keyguard.R;
+import com.android.keyguard.ViewMediatorCallback;
+import com.android.systemui.keyguard.KeyguardViewMediator;
+
+import static com.android.keyguard.KeyguardSecurityModel.*;
+
+/**
+ * A class which manages the bouncer on the lockscreen.
+ */
+public class KeyguardBouncer {
+
+    private Context mContext;
+    private ViewMediatorCallback mCallback;
+    private LockPatternUtils mLockPatternUtils;
+    private ViewGroup mContainer;
+    private StatusBarWindowManager mWindowManager;
+    private KeyguardViewBase mKeyguardView;
+    private ViewGroup mRoot;
+
+    public KeyguardBouncer(Context context, ViewMediatorCallback callback,
+            LockPatternUtils lockPatternUtils, StatusBarWindowManager windowManager,
+            ViewGroup container) {
+        mContext = context;
+        mCallback = callback;
+        mLockPatternUtils = lockPatternUtils;
+        mContainer = container;
+        mWindowManager = windowManager;
+    }
+
+    public void prepare() {
+        ensureView();
+    }
+
+    public void show() {
+        ensureView();
+
+        // Try to dismiss the Keyguard. If no security pattern is set, this will dismiss the whole
+        // Keyguard. If we need to authenticate, show the bouncer.
+        if (!mKeyguardView.dismiss()) {
+            mRoot.setVisibility(View.VISIBLE);
+            mKeyguardView.requestFocus();
+            mKeyguardView.onResume();
+        }
+    }
+
+    public void hide() {
+        if (mKeyguardView != null) {
+            mKeyguardView.cleanUp();
+        }
+        removeView();
+    }
+
+    /**
+     * Reset the state of the view.
+     */
+    public void reset() {
+        inflateView();
+    }
+
+    public void onScreenTurnedOff() {
+        if (mKeyguardView != null && mRoot != null && mRoot.getVisibility() == View.VISIBLE) {
+            mKeyguardView.onPause();
+        }
+    }
+
+    public long getUserActivityTimeout() {
+        if (mKeyguardView != null) {
+            long timeout = mKeyguardView.getUserActivityTimeout();
+            if (timeout >= 0) {
+                return timeout;
+            }
+        }
+        return KeyguardViewMediator.AWAKE_INTERVAL_DEFAULT_MS;
+    }
+
+    public boolean isShowing() {
+        return mRoot != null && mRoot.getVisibility() == View.VISIBLE;
+    }
+
+    private void ensureView() {
+        if (mRoot == null) {
+            inflateView();
+        }
+    }
+
+    private void inflateView() {
+        removeView();
+        mRoot = (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.keyguard_bouncer, null);
+        mKeyguardView = (KeyguardViewBase) mRoot.findViewById(R.id.keyguard_host_view);
+        mKeyguardView.setLockPatternUtils(mLockPatternUtils);
+        mKeyguardView.setViewMediatorCallback(mCallback);
+        mContainer.addView(mRoot, mContainer.getChildCount());
+        mRoot.setVisibility(View.INVISIBLE);
+        mRoot.setSystemUiVisibility(View.STATUS_BAR_DISABLE_HOME);
+    }
+
+    private void removeView() {
+        if (mRoot != null && mRoot.getParent() == mContainer) {
+            mContainer.removeView(mRoot);
+            mRoot = null;
+        }
+    }
+
+    public boolean onBackPressed() {
+        return mKeyguardView != null && mKeyguardView.handleBackKey();
+    }
+
+    /**
+     * @return True if and only if the current security method should be shown before showing
+     *         the notifications on Keyguard, like SIM PIN/PUK.
+     */
+    public boolean needsFullscreenBouncer() {
+        if (mKeyguardView != null) {
+            SecurityMode mode = mKeyguardView.getSecurityMode();
+            return mode == SecurityMode.SimPin
+                    || mode == SecurityMode.SimPuk;
+        }
+        return false;
+    }
+
+    public boolean isSecure() {
+        return mKeyguardView == null || mKeyguardView.getSecurityMode() != SecurityMode.None;
+    }
+
+    public boolean onMenuPressed() {
+        ensureView();
+        if (mKeyguardView.handleMenuKey()) {
+
+            // We need to show it in case it is secure. If not, it will get dismissed in any case.
+            mRoot.setVisibility(View.VISIBLE);
+            mKeyguardView.requestFocus();
+            mKeyguardView.onResume();
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java
new file mode 100644
index 0000000..769b1b1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.phone;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.widget.TextView;
+
+/**
+ * A view to show hints on Keyguard ("Swipe up to unlock", "Tap again to open").
+ */
+public class KeyguardIndicationTextView extends TextView {
+
+    public KeyguardIndicationTextView(Context context) {
+        super(context);
+    }
+
+    public KeyguardIndicationTextView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public KeyguardIndicationTextView(Context context, AttributeSet attrs, int defStyleAttr) {
+        super(context, attrs, defStyleAttr);
+    }
+
+    public KeyguardIndicationTextView(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+    }
+
+    /**
+     * Changes the text with an animation and makes sure a single indication is shown long enough.
+     *
+     * @param text The text to show.
+     */
+    public void switchIndication(CharSequence text) {
+
+        // TODO: Animation, make sure that we will show one indication long enough.
+        setText(text);
+    }
+
+    /**
+     * See {@link #switchIndication}.
+     */
+    public void switchIndication(int textResId) {
+        switchIndication(getResources().getText(textResId));
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardTouchDelegate.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardTouchDelegate.java
index c1646ba..754075a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardTouchDelegate.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardTouchDelegate.java
@@ -26,10 +26,11 @@
 import android.util.Slog;
 import android.view.MotionEvent;
 
-import com.android.internal.policy.IKeyguardExitCallback;
-import com.android.internal.policy.IKeyguardShowCallback;
 import com.android.internal.policy.IKeyguardService;
 
+import java.util.ArrayList;
+import java.util.List;
+
 
 /**
  * Facilitates event communication between navigation bar and keyguard.  Currently used to
@@ -38,10 +39,12 @@
  */
 public class KeyguardTouchDelegate {
     // TODO: propagate changes to these to {@link KeyguardServiceDelegate}
-    static final String KEYGUARD_PACKAGE = "com.android.keyguard";
-    static final String KEYGUARD_CLASS = "com.android.keyguard.KeyguardService";
+    static final String KEYGUARD_PACKAGE = "com.android.systemui";
+    static final String KEYGUARD_CLASS = "com.android.systemui.keyguard.KeyguardService";
 
     private static KeyguardTouchDelegate sInstance;
+    private static final List<OnKeyguardConnectionListener> sConnectionListeners =
+            new ArrayList<OnKeyguardConnectionListener>();
 
     private volatile IKeyguardService mService;
 
@@ -54,6 +57,10 @@
             Slog.v(TAG, "Connected to keyguard");
             mService = IKeyguardService.Stub.asInterface(service);
 
+            for (int i = 0; i < sConnectionListeners.size(); i++) {
+                OnKeyguardConnectionListener listener = sConnectionListeners.get(i);
+                listener.onKeyguardServiceConnected(KeyguardTouchDelegate.this);
+            }
         }
 
         @Override
@@ -61,6 +68,11 @@
             Slog.v(TAG, "Disconnected from keyguard");
             mService = null;
             sInstance = null; // force reconnection if this goes away
+
+            for (int i = 0; i < sConnectionListeners.size(); i++) {
+                OnKeyguardConnectionListener listener = sConnectionListeners.get(i);
+                listener.onKeyguardServiceDisconnected(KeyguardTouchDelegate.this);
+            }
         }
 
     };
@@ -128,16 +140,16 @@
         return false;
     }
 
-    public boolean isShowingAndNotHidden() {
+    public boolean isShowingAndNotOccluded() {
         final IKeyguardService service = mService;
         if (service != null) {
             try {
-                return service.isShowingAndNotHidden();
+                return service.isShowingAndNotOccluded();
             } catch (RemoteException e) {
                 Slog.w(TAG , "Remote Exception", e);
             }
         } else {
-            Slog.w(TAG, "isShowingAndNotHidden(): NO SERVICE!");
+            Slog.w(TAG, "isShowingAndNotOccluded(): NO SERVICE!");
         }
         return false;
     }
@@ -184,4 +196,13 @@
         }
     }
 
+    public static void addListener(OnKeyguardConnectionListener listener) {
+        sConnectionListeners.add(listener);
+    }
+
+    public interface OnKeyguardConnectionListener {
+
+        void onKeyguardServiceConnected(KeyguardTouchDelegate keyguardTouchDelegate);
+        void onKeyguardServiceDisconnected(KeyguardTouchDelegate keyguardTouchDelegate);
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
index a74230b..a0582ee 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarTransitions.java
@@ -82,7 +82,6 @@
         setKeyButtonViewQuiescentAlpha(mView.getMenuButton(), alpha, animate);
 
         setKeyButtonViewQuiescentAlpha(mView.getSearchLight(), KEYGUARD_QUIESCENT_ALPHA, animate);
-        setKeyButtonViewQuiescentAlpha(mView.getCameraButton(), KEYGUARD_QUIESCENT_ALPHA, animate);
 
         applyBackButtonQuiescentAlpha(mode, animate);
 
@@ -98,7 +97,6 @@
     public void applyBackButtonQuiescentAlpha(int mode, boolean animate) {
         float backAlpha = 0;
         backAlpha = maxVisibleQuiescentAlpha(backAlpha, mView.getSearchLight());
-        backAlpha = maxVisibleQuiescentAlpha(backAlpha, mView.getCameraButton());
         backAlpha = maxVisibleQuiescentAlpha(backAlpha, mView.getHomeButton());
         backAlpha = maxVisibleQuiescentAlpha(backAlpha, mView.getRecentsButton());
         backAlpha = maxVisibleQuiescentAlpha(backAlpha, mView.getMenuButton());
@@ -117,7 +115,7 @@
     @Override
     public void setContentVisible(boolean visible) {
         final float alpha = visible ? 1 : 0;
-        fadeContent(mView.getCameraButton(), alpha);
+        fadeContent(mView.getBackButton(), alpha);
         fadeContent(mView.getSearchLight(), alpha);
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 9589e8b..089757a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -21,20 +21,14 @@
 import android.animation.ObjectAnimator;
 import android.animation.TimeInterpolator;
 import android.animation.ValueAnimator;
-import android.app.ActivityManagerNative;
 import android.app.StatusBarManager;
-import android.app.admin.DevicePolicyManager;
-import android.content.BroadcastReceiver;
 import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.res.Resources;
 import android.graphics.Point;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
 import android.os.Message;
-import android.os.RemoteException;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.Display;
@@ -45,6 +39,7 @@
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityManager.TouchExplorationStateChangeListener;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 
@@ -90,9 +85,6 @@
     final static boolean WORKAROUND_INVALID_LAYOUT = true;
     final static int MSG_CHECK_INVALID_LAYOUT = 8686;
 
-    // used to disable the camera icon in navbar when disabled by DPM
-    private boolean mCameraDisabledByDpm;
-
     // performs manual animation in sync with layout transitions
     private final NavTransitionListener mTransitionListener = new NavTransitionListener();
 
@@ -145,30 +137,17 @@
     private final OnClickListener mAccessibilityClickListener = new OnClickListener() {
         @Override
         public void onClick(View v) {
-            if (v.getId() == R.id.camera_button) {
-                KeyguardTouchDelegate.getInstance(getContext()).launchCamera();
-            } else if (v.getId() == R.id.search_light) {
+            if (v.getId() == R.id.search_light) {
                 KeyguardTouchDelegate.getInstance(getContext()).showAssistant();
             }
         }
     };
 
-    private final OnTouchListener mCameraTouchListener = new OnTouchListener() {
+    private final OnClickListener mImeSwitcherClickListener = new OnClickListener() {
         @Override
-        public boolean onTouch(View cameraButtonView, MotionEvent event) {
-            switch (event.getAction()) {
-                case MotionEvent.ACTION_DOWN:
-                    // disable search gesture while interacting with camera
-                    mDelegateHelper.setDisabled(true);
-                    mBarTransitions.setContentVisible(false);
-                    break;
-                case MotionEvent.ACTION_UP:
-                case MotionEvent.ACTION_CANCEL:
-                    mDelegateHelper.setDisabled(false);
-                    mBarTransitions.setContentVisible(true);
-                    break;
-            }
-            return KeyguardTouchDelegate.getInstance(getContext()).dispatch(event);
+        public void onClick(View view) {
+            ((InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE))
+                    .showInputMethodPicker();
         }
     };
 
@@ -201,7 +180,7 @@
         mDisplay = ((WindowManager)context.getSystemService(
                 Context.WINDOW_SERVICE)).getDefaultDisplay();
 
-        final Resources res = mContext.getResources();
+        final Resources res = getContext().getResources();
         mBarSize = res.getDimensionPixelSize(R.dimen.navigation_bar_size);
         mVertical = false;
         mShowMenu = false;
@@ -210,24 +189,6 @@
         getIcons(res);
 
         mBarTransitions = new NavigationBarTransitions(this);
-
-        mCameraDisabledByDpm = isCameraDisabledByDpm();
-        watchForDevicePolicyChanges();
-    }
-
-    private void watchForDevicePolicyChanges() {
-        final IntentFilter filter = new IntentFilter();
-        filter.addAction(DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED);
-        mContext.registerReceiver(new BroadcastReceiver() {
-            public void onReceive(Context context, Intent intent) {
-                post(new Runnable() {
-                    @Override
-                    public void run() {
-                        mCameraDisabledByDpm = isCameraDisabledByDpm();
-                    }
-                });
-            }
-        }, filter);
     }
 
     public BarTransitions getBarTransitions() {
@@ -281,16 +242,15 @@
         return mCurrentView.findViewById(R.id.home);
     }
 
+    public View getImeSwitchButton() {
+        return mCurrentView.findViewById(R.id.ime_switcher);
+    }
+
     // for when home is disabled, but search isn't
     public View getSearchLight() {
         return mCurrentView.findViewById(R.id.search_light);
     }
 
-    // shown when keyguard is visible and camera is available
-    public View getCameraButton() {
-        return mCurrentView.findViewById(R.id.camera_button);
-    }
-
     private void getIcons(Resources res) {
         mBackIcon = res.getDrawable(R.drawable.ic_sysbar_back);
         mBackLandIcon = res.getDrawable(R.drawable.ic_sysbar_back_land);
@@ -302,7 +262,7 @@
 
     @Override
     public void setLayoutDirection(int layoutDirection) {
-        getIcons(mContext.getResources());
+        getIcons(getContext().getResources());
 
         super.setLayoutDirection(layoutDirection);
     }
@@ -323,7 +283,7 @@
             mTransitionListener.onBackAltCleared();
         }
         if (DEBUG) {
-            android.widget.Toast.makeText(mContext,
+            android.widget.Toast.makeText(getContext(),
                 "Navigation icon hints = " + hints,
                 500).show();
         }
@@ -336,6 +296,12 @@
 
         ((ImageView)getRecentsButton()).setImageDrawable(mVertical ? mRecentLandIcon : mRecentIcon);
 
+        final boolean showImeButton = ((hints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) != 0);
+        getImeSwitchButton().setVisibility(showImeButton ? View.VISIBLE : View.INVISIBLE);
+        // Update menu button in case the IME state has changed.
+        setMenuVisibility(mShowMenu, true);
+
+
         setDisabledFlags(mDisabledFlags, true);
     }
 
@@ -380,9 +346,7 @@
         getRecentsButton().setVisibility(disableRecent     ? View.INVISIBLE : View.VISIBLE);
 
         final boolean showSearch = disableHome && !disableSearch;
-        final boolean showCamera = showSearch && !mCameraDisabledByDpm;
         setVisibleOrGone(getSearchLight(), showSearch);
-        setVisibleOrGone(getCameraButton(), showCamera);
 
         mBarTransitions.applyBackButtonQuiescentAlpha(mBarTransitions.getMode(), true /*animate*/);
     }
@@ -393,24 +357,6 @@
         }
     }
 
-    private boolean isCameraDisabledByDpm() {
-        final DevicePolicyManager dpm =
-                (DevicePolicyManager) mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
-        if (dpm != null) {
-            try {
-                final int userId = ActivityManagerNative.getDefault().getCurrentUser().id;
-                final int disabledFlags = dpm.getKeyguardDisabledFeatures(null, userId);
-                final  boolean disabledBecauseKeyguardSecure =
-                        (disabledFlags & DevicePolicyManager.KEYGUARD_DISABLE_SECURE_CAMERA) != 0
-                        && KeyguardTouchDelegate.getInstance(getContext()).isSecure();
-                return dpm.getCameraDisabled(null) || disabledBecauseKeyguardSecure;
-            } catch (RemoteException e) {
-                Log.e(TAG, "Can't get userId", e);
-            }
-        }
-        return false;
-    }
-
     public void setSlippery(boolean newSlippery) {
         WindowManager.LayoutParams lp = (WindowManager.LayoutParams) getLayoutParams();
         if (lp != null) {
@@ -436,7 +382,10 @@
 
         mShowMenu = show;
 
-        getMenuButton().setVisibility(mShowMenu ? View.VISIBLE : View.INVISIBLE);
+        // Only show Menu if IME switcher not shown.
+        final boolean shouldShow = mShowMenu &&
+                ((mNavigationIconHints & StatusBarManager.NAVIGATION_HINT_IME_SHOWN) == 0);
+        getMenuButton().setVisibility(shouldShow ? View.VISIBLE : View.INVISIBLE);
     }
 
     @Override
@@ -452,12 +401,14 @@
 
         mCurrentView = mRotatedViews[Surface.ROTATION_0];
 
+        getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
+
         watchForAccessibilityChanges();
     }
 
     private void watchForAccessibilityChanges() {
         final AccessibilityManager am =
-                (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
+                (AccessibilityManager) getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);
 
         // Set the initial state
         enableAccessibility(am.isTouchExplorationEnabled());
@@ -477,25 +428,12 @@
         // Add a touch handler or accessibility click listener for camera and search buttons
         // for all view orientations.
         final OnClickListener onClickListener = touchEnabled ? mAccessibilityClickListener : null;
-        final OnTouchListener onTouchListener = touchEnabled ? null : mCameraTouchListener;
-        boolean hasCamera = false;
         for (int i = 0; i < mRotatedViews.length; i++) {
-            final View cameraButton = mRotatedViews[i].findViewById(R.id.camera_button);
             final View searchLight = mRotatedViews[i].findViewById(R.id.search_light);
-            if (cameraButton != null) {
-                hasCamera = true;
-                cameraButton.setOnTouchListener(onTouchListener);
-                cameraButton.setOnClickListener(onClickListener);
-            }
             if (searchLight != null) {
                 searchLight.setOnClickListener(onClickListener);
             }
         }
-        if (hasCamera) {
-            // Warm up KeyguardTouchDelegate so it's ready by the time the camera button is touched.
-            // This will connect to KeyguardService so that touch events are processed.
-            KeyguardTouchDelegate.getInstance(mContext);
-        }
     }
 
     public boolean isVertical() {
@@ -510,6 +448,8 @@
         mCurrentView = mRotatedViews[rot];
         mCurrentView.setVisibility(View.VISIBLE);
 
+        getImeSwitchButton().setOnClickListener(mImeSwitcherClickListener);
+
         mDeadZone = (DeadZone) mCurrentView.findViewById(R.id.deadzone);
 
         // force the low profile & disabled states into compliance
@@ -575,7 +515,7 @@
 
     private String getResourceName(int resId) {
         if (resId != 0) {
-            final android.content.res.Resources res = mContext.getResources();
+            final android.content.res.Resources res = getContext().getResources();
             try {
                 return res.getResourceName(resId);
             } catch (android.content.res.Resources.NotFoundException ex) {
@@ -632,7 +572,6 @@
         dumpButton(pw, "rcnt", getRecentsButton());
         dumpButton(pw, "menu", getMenuButton());
         dumpButton(pw, "srch", getSearchLight());
-        dumpButton(pw, "cmra", getCameraButton());
 
         pw.println("    }");
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index 6be6d4d..627b80f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -17,45 +17,77 @@
 package com.android.systemui.statusbar.phone;
 
 import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
-import android.util.EventLog;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.accessibility.AccessibilityEvent;
 
-import com.android.systemui.EventLogTags;
 import com.android.systemui.R;
+import com.android.systemui.statusbar.ExpandableView;
 import com.android.systemui.statusbar.GestureRecorder;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
 
-public class NotificationPanelView extends PanelView {
+public class NotificationPanelView extends PanelView implements
+        ExpandableView.OnHeightChangedListener {
     public static final boolean DEBUG_GESTURES = true;
 
-    Drawable mHandleBar;
-    int mHandleBarHeight;
-    View mHandleView;
-    int mFingers;
     PhoneStatusBar mStatusBar;
-    boolean mOkToFlip;
+    private View mHeader;
+    private View mKeyguardStatusView;
+
+    private NotificationStackScrollLayout mNotificationStackScroller;
+    private boolean mTrackingSettings;
+    private int mNotificationTopPadding;
+    private boolean mAnimateNextTopPaddingChange;
 
     public NotificationPanelView(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
     public void setStatusBar(PhoneStatusBar bar) {
+        if (mStatusBar != null) {
+            mStatusBar.setOnFlipRunnable(null);
+        }
         mStatusBar = bar;
+        if (bar != null) {
+            mStatusBar.setOnFlipRunnable(new Runnable() {
+                @Override
+                public void run() {
+                    requestPanelHeightUpdate();
+                }
+            });
+        }
     }
 
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
 
-        Resources resources = getContext().getResources();
-        mHandleBar = resources.getDrawable(R.drawable.status_bar_close);
-        mHandleBarHeight = resources.getDimensionPixelSize(R.dimen.close_handle_height);
-        mHandleView = findViewById(R.id.handle);
+        mHeader = findViewById(R.id.header);
+        mKeyguardStatusView = findViewById(R.id.keyguard_status_view);
+        mNotificationStackScroller = (NotificationStackScrollLayout)
+                findViewById(R.id.notification_stack_scroller);
+        mNotificationStackScroller.setOnHeightChangedListener(this);
+        mNotificationTopPadding = getResources().getDimensionPixelSize(
+                R.dimen.notifications_top_padding);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        super.onLayout(changed, left, top, right, bottom);
+        int keyguardBottomMargin =
+                ((MarginLayoutParams) mKeyguardStatusView.getLayoutParams()).bottomMargin;
+        mNotificationStackScroller.setTopPadding(mStatusBar.getBarState() == StatusBarState.KEYGUARD
+                ? mKeyguardStatusView.getBottom() + keyguardBottomMargin
+                : mHeader.getBottom() + mNotificationTopPadding,
+                mAnimateNextTopPaddingChange);
+        mAnimateNextTopPaddingChange = false;
+    }
+
+    public void animateNextTopPaddingChange() {
+        mAnimateNextTopPaddingChange = true;
+        requestLayout();
     }
 
     @Override
@@ -80,61 +112,92 @@
         return super.dispatchPopulateAccessibilityEvent(event);
     }
 
-    // We draw the handle ourselves so that it's always glued to the bottom of the window.
     @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        if (changed) {
-            final int pl = getPaddingLeft();
-            final int pr = getPaddingRight();
-            mHandleBar.setBounds(pl, 0, getWidth() - pr, (int) mHandleBarHeight);
+    public boolean onInterceptTouchEvent(MotionEvent event) {
+        // intercept for quick settings
+        if (event.getAction() == MotionEvent.ACTION_DOWN) {
+            final View target = mStatusBar.getBarState() == StatusBarState.KEYGUARD
+                    ? mKeyguardStatusView
+                    : mHeader;
+            final boolean inTarget = PhoneStatusBar.inBounds(target, event, true);
+            if (inTarget && !isInSettings()) {
+                mTrackingSettings = true;
+                requestDisallowInterceptTouchEvent(true);
+                return true;
+            }
+            if (!inTarget && isInSettings()) {
+                mTrackingSettings = true;
+                requestDisallowInterceptTouchEvent(true);
+                return true;
+            }
         }
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        super.draw(canvas);
-        final int off = (int) (getHeight() - mHandleBarHeight - getPaddingBottom());
-        canvas.translate(0, off);
-        mHandleBar.setState(mHandleView.getDrawableState());
-        mHandleBar.draw(canvas);
-        canvas.translate(0, -off);
+        return super.onInterceptTouchEvent(event);
     }
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
-        if (DEBUG_GESTURES) {
-            if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
-                EventLog.writeEvent(EventLogTags.SYSUI_NOTIFICATIONPANEL_TOUCH,
-                       event.getActionMasked(), (int) event.getX(), (int) event.getY());
+        // TODO: Handle doublefinger swipe to notifications again. Look at history for a reference
+        // implementation.
+        if (mTrackingSettings) {
+            mStatusBar.onSettingsEvent(event);
+            if (event.getAction() == MotionEvent.ACTION_UP
+                    || event.getAction() == MotionEvent.ACTION_CANCEL) {
+                mTrackingSettings = false;
             }
+            return true;
         }
-        if (PhoneStatusBar.SETTINGS_DRAG_SHORTCUT && mStatusBar.mHasFlipSettings) {
-            switch (event.getActionMasked()) {
-                case MotionEvent.ACTION_DOWN:
-                    mOkToFlip = getExpandedHeight() == 0;
-                    break;
-                case MotionEvent.ACTION_POINTER_DOWN:
-                    if (mOkToFlip) {
-                        float miny = event.getY(0);
-                        float maxy = miny;
-                        for (int i=1; i<event.getPointerCount(); i++) {
-                            final float y = event.getY(i);
-                            if (y < miny) miny = y;
-                            if (y > maxy) maxy = y;
-                        }
-                        if (maxy - miny < mHandleBarHeight) {
-                            if (getMeasuredHeight() < mHandleBarHeight) {
-                                mStatusBar.switchToSettings();
-                            } else {
-                                mStatusBar.flipToSettings();
-                            }
-                            mOkToFlip = false;
-                        }
-                    }
-                    break;
-            }
+        if (isInSettings()) {
+            return true;
         }
-        return mHandleView.dispatchTouchEvent(event);
+        return super.onTouchEvent(event);
+    }
+
+    @Override
+    protected boolean isScrolledToBottom() {
+        if (!isInSettings()) {
+            return mNotificationStackScroller.isScrolledToBottom();
+        }
+        return super.isScrolledToBottom();
+    }
+
+    @Override
+    protected int getMaxPanelHeight() {
+        if (!isInSettings()) {
+            int maxPanelHeight = super.getMaxPanelHeight();
+            int emptyBottomMargin = mNotificationStackScroller.getEmptyBottomMargin();
+            return maxPanelHeight - emptyBottomMargin;
+        }
+        return super.getMaxPanelHeight();
+    }
+
+    private boolean isInSettings() {
+        return mStatusBar != null && mStatusBar.isFlippedToSettings();
+    }
+
+    @Override
+    protected void onHeightUpdated(float expandedHeight) {
+        mNotificationStackScroller.setStackHeight(expandedHeight);
+    }
+
+    @Override
+    protected int getDesiredMeasureHeight() {
+        return mMaxPanelHeight;
+    }
+
+    @Override
+    protected void onExpandingStarted() {
+        super.onExpandingStarted();
+        mNotificationStackScroller.onExpansionStarted();
+    }
+
+    @Override
+    protected void onExpandingFinished() {
+        super.onExpandingFinished();
+        mNotificationStackScroller.onExpansionStopped();
+    }
+
+    @Override
+    public void onHeightChanged(ExpandableView view) {
+        requestPanelHeightUpdate();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
index a3e35d1..324d6f3 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelBar.java
@@ -151,7 +151,8 @@
         if (DEBUG) LOG("panelExpansionChanged: start state=%d panel=%s", mState, panel.getName());
         mPanelExpandedFractionSum = 0f;
         for (PanelView pv : mPanels) {
-            final boolean visible = pv.getVisibility() == View.VISIBLE;
+            boolean visible = pv.getExpandedHeight() > 0;
+            pv.setVisibility(visible ? View.VISIBLE : View.GONE);
             // adjust any other panels that may be partially visible
             if (pv.getExpandedHeight() > 0f) {
                 if (mState == STATE_CLOSED) {
@@ -166,11 +167,6 @@
                     if (thisFrac == 1f) fullyOpenedPanel = panel;
                 }
             }
-            if (pv.getExpandedHeight() > 0f) {
-                if (!visible) pv.setVisibility(View.VISIBLE);
-            } else {
-                if (visible) pv.setVisibility(View.GONE);
-            }
         }
         mPanelExpandedFractionSum /= mPanels.size();
         if (fullyOpenedPanel != null && !mTracking) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index 4b2c3e1..328a1728 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -25,6 +25,7 @@
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.widget.FrameLayout;
 
 import com.android.systemui.R;
@@ -45,7 +46,6 @@
     }
 
     public static final boolean BRAKES = false;
-    private boolean mRubberbandingEnabled = true;
 
     private float mSelfExpandVelocityPx; // classic value: 2000px/s
     private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up")
@@ -67,16 +67,15 @@
     private float mExpandBrakingDistancePx = 150; // XXX Resource
     private float mBrakingSpeedPx = 150; // XXX Resource
 
-    private View mHandleView;
     private float mPeekHeight;
-    private float mTouchOffset;
+    private float mInitialOffsetOnTouch;
     private float mExpandedFraction = 0;
     private float mExpandedHeight = 0;
     private boolean mJustPeeked;
     private boolean mClosing;
-    private boolean mRubberbanding;
     private boolean mTracking;
     private int mTrackingPointer;
+    private int mTouchSlop;
 
     private TimeAnimator mTimeAnimator;
     private ObjectAnimator mPeekAnimator;
@@ -198,7 +197,6 @@
         }
     }
 
-    private int[] mAbsPos = new int[2];
     PanelBar mBar;
 
     private final TimeListener mAnimationCallback = new TimeListener() {
@@ -213,20 +211,23 @@
         public void run() {
             if (mTimeAnimator != null && mTimeAnimator.isStarted()) {
                 mTimeAnimator.end();
-                mRubberbanding = false;
                 mClosing = false;
+                onExpandingFinished();
             }
         }
     };
 
     private float mVel, mAccel;
-    private int mFullHeight = 0;
+    protected int mMaxPanelHeight = 0;
     private String mViewName;
     protected float mInitialTouchY;
+    protected float mInitialTouchX;
     protected float mFinalTouchY;
 
-    public void setRubberbandingEnabled(boolean enable) {
-        mRubberbandingEnabled = enable;
+    protected void onExpandingFinished() {
+    }
+
+    protected void onExpandingStarted() {
     }
 
     private void runPeekAnimation() {
@@ -252,14 +253,9 @@
 
             mTimeAnimator.start();
 
-            mRubberbanding = mRubberbandingEnabled // is it enabled at all?
-                    && mExpandedHeight > getFullHeight() // are we past the end?
-                    && mVel >= -mFlingGestureMinDistPx; // was this not possibly a "close" gesture?
-            if (mRubberbanding) {
-                mClosing = true;
-            } else if (mVel == 0) {
+            if (mVel == 0) {
                 // if the panel is less than halfway open, close it
-                mClosing = (mFinalTouchY / getFullHeight()) < 0.5f;
+                mClosing = (mFinalTouchY / getMaxPanelHeight()) < 0.5f;
             } else {
                 mClosing = mExpandedHeight > 0 && mVel < 0;
             }
@@ -268,7 +264,7 @@
             if (DEBUG) logf("tick: v=%.2fpx/s dt=%.4fs", mVel, dt);
             if (DEBUG) logf("tick: before: h=%d", (int) mExpandedHeight);
 
-            final float fh = getFullHeight();
+            final float fh = getMaxPanelHeight();
             boolean braking = false;
             if (BRAKES) {
                 if (mClosing) {
@@ -300,10 +296,6 @@
 
             float h = mExpandedHeight + mVel * dt;
 
-            if (mRubberbanding && h < fh) {
-                h = fh;
-            }
-
             if (DEBUG) logf("tick: new h=%d closing=%s", (int) h, mClosing?"true":"false");
 
             setExpandedHeightInternal(h);
@@ -312,7 +304,7 @@
 
             if (mVel == 0
                     || (mClosing && mExpandedHeight == 0)
-                    || ((mRubberbanding || !mClosing) && mExpandedHeight == fh)) {
+                    || (!mClosing && mExpandedHeight == fh)) {
                 post(mStopAnimator);
             }
         } else {
@@ -326,6 +318,7 @@
 
         mTimeAnimator = new TimeAnimator();
         mTimeAnimator.setTimeListener(mAnimationCallback);
+        setOnHierarchyChangeListener(mHierarchyListener);
     }
 
     private void loadDimens() {
@@ -349,8 +342,10 @@
         mFlingGestureMaxOutputVelocityPx = res.getDimension(R.dimen.fling_gesture_max_output_velocity);
 
         mPeekHeight = res.getDimension(R.dimen.peek_height)
-            + getPaddingBottom() // our window might have a dropshadow
-            - (mHandleView == null ? 0 : mHandleView.getPaddingTop()); // the handle might have a topshadow
+            + getPaddingBottom(); // our window might have a dropshadow
+
+        final ViewConfiguration configuration = ViewConfiguration.get(getContext());
+        mTouchSlop = configuration.getScaledTouchSlop();
     }
 
     private void trackMovement(MotionEvent event) {
@@ -363,146 +358,229 @@
         event.offsetLocation(-deltaX, -deltaY);
     }
 
-    // Pass all touches along to the handle, allowing the user to drag the panel closed from its interior
     @Override
     public boolean onTouchEvent(MotionEvent event) {
-        return mHandleView.dispatchTouchEvent(event);
+
+        /*
+         * We capture touch events here and update the expand height here in case according to
+         * the users fingers. This also handles multi-touch.
+         *
+         * If the user just clicks shortly, we give him a quick peek of the shade.
+         *
+         * Flinging is also enabled in order to open or close the shade.
+         */
+
+        int pointerIndex = event.findPointerIndex(mTrackingPointer);
+        if (pointerIndex < 0) {
+            pointerIndex = 0;
+            mTrackingPointer = event.getPointerId(pointerIndex);
+        }
+        final float y = event.getY(pointerIndex);
+        final float x = event.getX(pointerIndex);
+
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN:
+                mTracking = true;
+
+                mInitialTouchY = y;
+                mInitialTouchX = x;
+                initVelocityTracker();
+                trackMovement(event);
+                mTimeAnimator.cancel(); // end any outstanding animations
+                onTrackingStarted();
+                mInitialOffsetOnTouch = mExpandedHeight;
+                if (mExpandedHeight == 0) {
+                    mJustPeeked = true;
+                    runPeekAnimation();
+                }
+                break;
+
+            case MotionEvent.ACTION_POINTER_UP:
+                final int upPointer = event.getPointerId(event.getActionIndex());
+                if (mTrackingPointer == upPointer) {
+                    // gesture is ongoing, find a new pointer to track
+                    final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
+                    final float newY = event.getY(newIndex);
+                    final float newX = event.getX(newIndex);
+                    mTrackingPointer = event.getPointerId(newIndex);
+                    mInitialOffsetOnTouch = mExpandedHeight;
+                    mInitialTouchY = newY;
+                    mInitialTouchX = newX;
+                }
+                break;
+
+            case MotionEvent.ACTION_MOVE:
+                final float h = y - mInitialTouchY + mInitialOffsetOnTouch;
+                if (h > mPeekHeight) {
+                    if (mPeekAnimator != null && mPeekAnimator.isStarted()) {
+                        mPeekAnimator.cancel();
+                    }
+                    mJustPeeked = false;
+                }
+                if (!mJustPeeked) {
+                    setExpandedHeightInternal(h);
+                    mBar.panelExpansionChanged(PanelView.this, mExpandedFraction);
+                }
+
+                trackMovement(event);
+                break;
+
+            case MotionEvent.ACTION_UP:
+            case MotionEvent.ACTION_CANCEL:
+                mFinalTouchY = y;
+                mTracking = false;
+                mTrackingPointer = -1;
+                onTrackingStopped();
+                trackMovement(event);
+
+                float vel = getCurrentVelocity();
+                fling(vel, true);
+
+                if (mVelocityTracker != null) {
+                    mVelocityTracker.recycle();
+                    mVelocityTracker = null;
+                }
+                break;
+        }
+        return true;
+    }
+
+    protected void onTrackingStopped() {
+        mBar.onTrackingStopped(PanelView.this);
+    }
+
+    protected void onTrackingStarted() {
+        mBar.onTrackingStarted(PanelView.this);
+        onExpandingStarted();
+    }
+
+    private float getCurrentVelocity() {
+        float vel = 0;
+        float yVel = 0, xVel = 0;
+        boolean negative = false;
+
+        // the velocitytracker might be null if we got a bad input stream
+        if (mVelocityTracker == null) {
+            return 0;
+        }
+
+        mVelocityTracker.computeCurrentVelocity(1000);
+
+        yVel = mVelocityTracker.getYVelocity();
+        negative = yVel < 0;
+
+        xVel = mVelocityTracker.getXVelocity();
+        if (xVel < 0) {
+            xVel = -xVel;
+        }
+        if (xVel > mFlingGestureMaxXVelocityPx) {
+            xVel = mFlingGestureMaxXVelocityPx; // limit how much we care about the x axis
+        }
+
+        vel = (float) Math.hypot(yVel, xVel);
+        if (vel > mFlingGestureMaxOutputVelocityPx) {
+            vel = mFlingGestureMaxOutputVelocityPx;
+        }
+
+        // if you've barely moved your finger, we treat the velocity as 0
+        // preventing spurious flings due to touch screen jitter
+        final float deltaY = Math.abs(mFinalTouchY - mInitialTouchY);
+        if (deltaY < mFlingGestureMinDistPx
+                || vel < mFlingExpandMinVelocityPx
+                ) {
+            vel = 0;
+        }
+
+        if (negative) {
+            vel = -vel;
+        }
+
+        if (DEBUG) {
+            logf("gesture: dy=%f vel=(%f,%f) vlinear=%f",
+                    deltaY,
+                    xVel, yVel,
+                    vel);
+        }
+        return vel;
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent event) {
+
+        /*
+         * If the user drags anywhere inside the panel we intercept it if he moves his finger
+         * upwards. This allows closing the shade from anywhere inside the panel.
+         *
+         * We only do this if the current content is scrolled to the bottom,
+         * i.e isScrolledToBottom() is true and therefore there is no conflicting scrolling gesture
+         * possible.
+         */
+        int pointerIndex = event.findPointerIndex(mTrackingPointer);
+        if (pointerIndex < 0) {
+            pointerIndex = 0;
+            mTrackingPointer = event.getPointerId(pointerIndex);
+        }
+        final float x = event.getX(pointerIndex);
+        final float y = event.getY(pointerIndex);
+        boolean scrolledToBottom = isScrolledToBottom();
+
+        switch (event.getActionMasked()) {
+            case MotionEvent.ACTION_DOWN:
+                mInitialTouchY = y;
+                mInitialTouchX = x;
+                initVelocityTracker();
+                trackMovement(event);
+                mTimeAnimator.cancel(); // end any outstanding animations
+                break;
+            case MotionEvent.ACTION_POINTER_UP:
+                final int upPointer = event.getPointerId(event.getActionIndex());
+                if (mTrackingPointer == upPointer) {
+                    // gesture is ongoing, find a new pointer to track
+                    final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
+                    mTrackingPointer = event.getPointerId(newIndex);
+                    mInitialTouchX = event.getX(newIndex);
+                    mInitialTouchY = event.getY(newIndex);
+                }
+                break;
+
+            case MotionEvent.ACTION_MOVE:
+                final float h = y - mInitialTouchY;
+                trackMovement(event);
+                if (scrolledToBottom) {
+                    if (h < -mTouchSlop && h < -Math.abs(x - mInitialTouchX)) {
+                        mInitialOffsetOnTouch = mExpandedHeight;
+                        mInitialTouchY = y;
+                        mInitialTouchX = x;
+                        mTracking = true;
+                        onTrackingStarted();
+                        return true;
+                    }
+                }
+                break;
+        }
+        return false;
+    }
+
+    private void initVelocityTracker() {
+        if (mVelocityTracker != null) {
+            mVelocityTracker.recycle();
+        }
+        mVelocityTracker = FlingTracker.obtain();
+    }
+
+    protected boolean isScrolledToBottom() {
+        return false;
+    }
+
+    protected float getContentHeight() {
+        return mExpandedHeight;
     }
 
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        mHandleView = findViewById(R.id.handle);
 
         loadDimens();
-
-        if (DEBUG) logf("handle view: " + mHandleView);
-        if (mHandleView != null) {
-            mHandleView.setOnTouchListener(new View.OnTouchListener() {
-                @Override
-                public boolean onTouch(View v, MotionEvent event) {
-                    int pointerIndex = event.findPointerIndex(mTrackingPointer);
-                    if (pointerIndex < 0) {
-                        pointerIndex = 0;
-                        mTrackingPointer = event.getPointerId(pointerIndex);
-                    }
-                    final float y = event.getY(pointerIndex);
-                    final float rawDelta = event.getRawY() - event.getY();
-                    final float rawY = y + rawDelta;
-                    if (DEBUG) logf("handle.onTouch: a=%s p=[%d,%d] y=%.1f rawY=%.1f off=%.1f",
-                            MotionEvent.actionToString(event.getAction()),
-                            mTrackingPointer, pointerIndex,
-                            y, rawY, mTouchOffset);
-                    PanelView.this.getLocationOnScreen(mAbsPos);
-
-                    switch (event.getActionMasked()) {
-                        case MotionEvent.ACTION_DOWN:
-                            mTracking = true;
-                            mHandleView.setPressed(true);
-                            postInvalidate(); // catch the press state change
-                            mInitialTouchY = y;
-                            mVelocityTracker = FlingTracker.obtain();
-                            trackMovement(event);
-                            mTimeAnimator.cancel(); // end any outstanding animations
-                            mBar.onTrackingStarted(PanelView.this);
-                            mTouchOffset = (rawY - mAbsPos[1]) - mExpandedHeight;
-                            if (mExpandedHeight == 0) {
-                                mJustPeeked = true;
-                                runPeekAnimation();
-                            }
-                            break;
-
-                        case MotionEvent.ACTION_POINTER_UP:
-                            final int upPointer = event.getPointerId(event.getActionIndex());
-                            if (mTrackingPointer == upPointer) {
-                                // gesture is ongoing, find a new pointer to track
-                                final int newIndex = event.getPointerId(0) != upPointer ? 0 : 1;
-                                final float newY = event.getY(newIndex);
-                                final float newRawY = newY + rawDelta;
-                                mTrackingPointer = event.getPointerId(newIndex);
-                                mTouchOffset = (newRawY - mAbsPos[1]) - mExpandedHeight;
-                                mInitialTouchY = newY;
-                            }
-                            break;
-
-                        case MotionEvent.ACTION_MOVE:
-                            final float h = rawY - mAbsPos[1] - mTouchOffset;
-                            if (h > mPeekHeight) {
-                                if (mPeekAnimator != null && mPeekAnimator.isStarted()) {
-                                    mPeekAnimator.cancel();
-                                }
-                                mJustPeeked = false;
-                            }
-                            if (!mJustPeeked) {
-                                PanelView.this.setExpandedHeightInternal(h);
-                                mBar.panelExpansionChanged(PanelView.this, mExpandedFraction);
-                            }
-
-                            trackMovement(event);
-                            break;
-
-                        case MotionEvent.ACTION_UP:
-                        case MotionEvent.ACTION_CANCEL:
-                            mFinalTouchY = y;
-                            mTracking = false;
-                            mTrackingPointer = -1;
-                            mHandleView.setPressed(false);
-                            postInvalidate(); // catch the press state change
-                            mBar.onTrackingStopped(PanelView.this);
-                            trackMovement(event);
-
-                            float vel = 0, yVel = 0, xVel = 0;
-                            boolean negative = false;
-
-                            if (mVelocityTracker != null) {
-                                // the velocitytracker might be null if we got a bad input stream
-                                mVelocityTracker.computeCurrentVelocity(1000);
-
-                                yVel = mVelocityTracker.getYVelocity();
-                                negative = yVel < 0;
-
-                                xVel = mVelocityTracker.getXVelocity();
-                                if (xVel < 0) {
-                                    xVel = -xVel;
-                                }
-                                if (xVel > mFlingGestureMaxXVelocityPx) {
-                                    xVel = mFlingGestureMaxXVelocityPx; // limit how much we care about the x axis
-                                }
-
-                                vel = (float)Math.hypot(yVel, xVel);
-                                if (vel > mFlingGestureMaxOutputVelocityPx) {
-                                    vel = mFlingGestureMaxOutputVelocityPx;
-                                }
-
-                                mVelocityTracker.recycle();
-                                mVelocityTracker = null;
-                            }
-
-                            // if you've barely moved your finger, we treat the velocity as 0
-                            // preventing spurious flings due to touch screen jitter
-                            final float deltaY = Math.abs(mFinalTouchY - mInitialTouchY);
-                            if (deltaY < mFlingGestureMinDistPx
-                                    || vel < mFlingExpandMinVelocityPx
-                                    ) {
-                                vel = 0;
-                            }
-
-                            if (negative) {
-                                vel = -vel;
-                            }
-
-                            if (DEBUG) logf("gesture: dy=%f vel=(%f,%f) vlinear=%f",
-                                    deltaY,
-                                    xVel, yVel,
-                                    vel);
-
-                            fling(vel, true);
-
-                            break;
-                    }
-                    return true;
-                }});
-        }
     }
 
     public void fling(float vel, boolean always) {
@@ -511,6 +589,8 @@
 
         if (always||mVel != 0) {
             animationTick(0); // begin the animation
+        } else {
+            onExpandingFinished();
         }
     }
 
@@ -524,15 +604,6 @@
         return mViewName;
     }
 
-    @Override
-    protected void onViewAdded(View child) {
-        if (DEBUG) logf("onViewAdded: " + child);
-    }
-
-    public View getHandle() {
-        return mHandleView;
-    }
-
     // Rubberbands the panel to hold its contents.
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
@@ -543,23 +614,27 @@
 
         // Did one of our children change size?
         int newHeight = getMeasuredHeight();
-        if (newHeight != mFullHeight) {
-            mFullHeight = newHeight;
+        if (newHeight != mMaxPanelHeight) {
+            mMaxPanelHeight = newHeight;
             // If the user isn't actively poking us, let's rubberband to the content
-            if (!mTracking && !mRubberbanding && !mTimeAnimator.isStarted()
-                    && mExpandedHeight > 0 && mExpandedHeight != mFullHeight) {
-                mExpandedHeight = mFullHeight;
+            if (!mTracking && !mTimeAnimator.isStarted()
+                    && mExpandedHeight > 0 && mExpandedHeight != mMaxPanelHeight
+                    && mMaxPanelHeight > 0) {
+                mExpandedHeight = mMaxPanelHeight;
             }
         }
         heightMeasureSpec = MeasureSpec.makeMeasureSpec(
-                    (int) mExpandedHeight, MeasureSpec.AT_MOST); // MeasureSpec.getMode(heightMeasureSpec));
+                getDesiredMeasureHeight(), MeasureSpec.AT_MOST);
         setMeasuredDimension(widthMeasureSpec, heightMeasureSpec);
     }
 
+    protected int getDesiredMeasureHeight() {
+        return (int) mExpandedHeight;
+    }
+
 
     public void setExpandedHeight(float height) {
         if (DEBUG) logf("setExpandedHeight(%.1f)", height);
-        mRubberbanding = false;
         if (mTimeAnimator.isStarted()) {
             post(mStopAnimator);
         }
@@ -569,8 +644,20 @@
 
     @Override
     protected void onLayout (boolean changed, int left, int top, int right, int bottom) {
-        if (DEBUG) logf("onLayout: changed=%s, bottom=%d eh=%d fh=%d", changed?"T":"f", bottom, (int)mExpandedHeight, mFullHeight);
+        if (DEBUG) logf("onLayout: changed=%s, bottom=%d eh=%d fh=%d", changed?"T":"f", bottom,
+                (int)mExpandedHeight, mMaxPanelHeight);
         super.onLayout(changed, left, top, right, bottom);
+        requestPanelHeightUpdate();
+    }
+
+    protected void requestPanelHeightUpdate() {
+        float currentMaxPanelHeight = getMaxPanelHeight();
+
+        // If the user isn't actively poking us, let's update the height
+        if (!mTracking && !mTimeAnimator.isStarted()
+                && mExpandedHeight > 0 && currentMaxPanelHeight != mExpandedHeight) {
+            setExpandedHeightInternal(currentMaxPanelHeight);
+        }
     }
 
     public void setExpandedHeightInternal(float h) {
@@ -583,19 +670,23 @@
             h = 0;
         }
 
-        float fh = getFullHeight();
+        float fh = getMaxPanelHeight();
         if (fh == 0) {
             // Hmm, full height hasn't been computed yet
         }
 
         if (h < 0) h = 0;
-        if (!(mRubberbandingEnabled && (mTracking || mRubberbanding)) && h > fh) h = fh;
+        if (h > fh) h = fh;
 
         mExpandedHeight = h;
 
-        if (DEBUG) logf("setExpansion: height=%.1f fh=%.1f tracking=%s rubber=%s", h, fh, mTracking?"T":"f", mRubberbanding?"T":"f");
+        if (DEBUG) {
+            logf("setExpansion: height=%.1f fh=%.1f tracking=%s", h, fh,
+                    mTracking ? "T" : "f");
+        }
 
-        requestLayout();
+        onHeightUpdated(mExpandedHeight);
+
 //        FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) getLayoutParams();
 //        lp.height = (int) mExpandedHeight;
 //        setLayoutParams(lp);
@@ -603,13 +694,23 @@
         mExpandedFraction = Math.min(1f, (fh == 0) ? 0 : h / fh);
     }
 
-    private float getFullHeight() {
-        if (mFullHeight <= 0) {
-            if (DEBUG) logf("Forcing measure() since fullHeight=" + mFullHeight);
+    protected void onHeightUpdated(float expandedHeight) {
+        requestLayout();
+    }
+
+    /**
+     * This returns the maximum height of the panel. Children should override this if their
+     * desired height is not the full height.
+     *
+     * @return the default implementation simply returns the maximum height.
+     */
+    protected int getMaxPanelHeight() {
+        if (mMaxPanelHeight <= 0) {
+            if (DEBUG) logf("Forcing measure() since mMaxPanelHeight=" + mMaxPanelHeight);
             measure(MeasureSpec.makeMeasureSpec(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, MeasureSpec.EXACTLY),
                     MeasureSpec.makeMeasureSpec(android.view.ViewGroup.LayoutParams.WRAP_CONTENT, MeasureSpec.EXACTLY));
         }
-        return mFullHeight;
+        return mMaxPanelHeight;
     }
 
     public void setExpandedFraction(float frac) {
@@ -621,7 +722,7 @@
             }
             frac = 0;
         }
-        setExpandedHeight(getFullHeight() * frac);
+        setExpandedHeight(getMaxPanelHeight() * frac);
     }
 
     public float getExpandedHeight() {
@@ -633,7 +734,7 @@
     }
 
     public boolean isFullyExpanded() {
-        return mExpandedHeight >= getFullHeight();
+        return mExpandedHeight >= getMaxPanelHeight();
     }
 
     public boolean isFullyCollapsed() {
@@ -658,8 +759,8 @@
         if (!isFullyCollapsed()) {
             mTimeAnimator.cancel();
             mClosing = true;
+            onExpandingStarted();
             // collapse() should never be a rubberband, even if an animation is already running
-            mRubberbanding = false;
             fling(-mSelfCollapseVelocityPx, /*always=*/ true);
         }
     }
@@ -668,6 +769,7 @@
         if (DEBUG) logf("expand: " + this);
         if (isFullyCollapsed()) {
             mBar.startOpeningPanel(this);
+            onExpandingStarted();
             fling(mSelfExpandVelocityPx, /*always=*/ true);
         } else if (DEBUG) {
             if (DEBUG) logf("skipping expansion: is expanded");
@@ -681,18 +783,28 @@
     }
 
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println(String.format("[PanelView(%s): expandedHeight=%f fullHeight=%f closing=%s"
-                + " tracking=%s rubberbanding=%s justPeeked=%s peekAnim=%s%s timeAnim=%s%s"
+        pw.println(String.format("[PanelView(%s): expandedHeight=%f maxPanelHeight=%d closing=%s"
+                + " tracking=%s justPeeked=%s peekAnim=%s%s timeAnim=%s%s"
                 + "]",
                 this.getClass().getSimpleName(),
                 getExpandedHeight(),
-                getFullHeight(),
+                getMaxPanelHeight(),
                 mClosing?"T":"f",
                 mTracking?"T":"f",
-                mRubberbanding?"T":"f",
                 mJustPeeked?"T":"f",
                 mPeekAnimator, ((mPeekAnimator!=null && mPeekAnimator.isStarted())?" (started)":""),
                 mTimeAnimator, ((mTimeAnimator!=null && mTimeAnimator.isStarted())?" (started)":"")
         ));
     }
+
+    private final OnHierarchyChangeListener mHierarchyListener = new OnHierarchyChangeListener() {
+        @Override
+        public void onChildViewAdded(View parent, View child) {
+            if (DEBUG) logf("onViewAdded: " + child);
+        }
+
+        @Override
+        public void onChildViewRemoved(View parent, View child) {
+        }
+    };
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index bbac4ef..0db6914 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -16,14 +16,16 @@
 
 package com.android.systemui.statusbar.phone;
 
+
 import static android.app.StatusBarManager.NAVIGATION_HINT_BACK_ALT;
+import static android.app.StatusBarManager.NAVIGATION_HINT_IME_SHOWN;
 import static android.app.StatusBarManager.WINDOW_STATE_HIDDEN;
 import static android.app.StatusBarManager.WINDOW_STATE_SHOWING;
 import static android.app.StatusBarManager.windowStateToString;
+import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
 import static com.android.systemui.statusbar.phone.BarTransitions.MODE_OPAQUE;
 import static com.android.systemui.statusbar.phone.BarTransitions.MODE_SEMI_TRANSPARENT;
 import static com.android.systemui.statusbar.phone.BarTransitions.MODE_TRANSLUCENT;
-import static com.android.systemui.statusbar.phone.BarTransitions.MODE_LIGHTS_OUT;
 
 import android.animation.Animator;
 import android.animation.AnimatorListenerAdapter;
@@ -49,6 +51,7 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.inputmethodservice.InputMethodService;
+import android.media.AudioManager;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -58,19 +61,23 @@
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.provider.Settings;
+import android.provider.Settings.Global;
 import android.service.notification.StatusBarNotification;
+import android.util.ArraySet;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
 import android.util.Log;
 import android.view.Display;
 import android.view.Gravity;
+import android.view.LayoutInflater;
 import android.view.MotionEvent;
 import android.view.VelocityTracker;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
 import android.view.ViewPropertyAnimator;
-import android.view.ViewStub;
+import android.view.ViewTreeObserver;
 import android.view.WindowManager;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.Animation;
@@ -79,35 +86,45 @@
 import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
-import android.widget.ScrollView;
 import android.widget.TextView;
 
 import com.android.internal.statusbar.StatusBarIcon;
+import com.android.keyguard.ViewMediatorCallback;
 import com.android.systemui.DemoMode;
 import com.android.systemui.EventLogTags;
 import com.android.systemui.R;
+import com.android.systemui.keyguard.KeyguardViewMediator;
 import com.android.systemui.statusbar.BaseStatusBar;
 import com.android.systemui.statusbar.CommandQueue;
+import com.android.systemui.statusbar.DragDownHelper;
+import com.android.systemui.statusbar.ExpandableNotificationRow;
 import com.android.systemui.statusbar.GestureRecorder;
+import com.android.systemui.statusbar.InterceptedNotifications;
 import com.android.systemui.statusbar.NotificationData;
 import com.android.systemui.statusbar.NotificationData.Entry;
+import com.android.systemui.statusbar.NotificationOverflowContainer;
 import com.android.systemui.statusbar.SignalClusterView;
 import com.android.systemui.statusbar.StatusBarIconView;
+import com.android.systemui.statusbar.StatusBarState;
 import com.android.systemui.statusbar.policy.BatteryController;
 import com.android.systemui.statusbar.policy.BluetoothController;
 import com.android.systemui.statusbar.policy.DateView;
 import com.android.systemui.statusbar.policy.HeadsUpNotificationView;
 import com.android.systemui.statusbar.policy.LocationController;
 import com.android.systemui.statusbar.policy.NetworkController;
-import com.android.systemui.statusbar.policy.NotificationRowLayout;
-import com.android.systemui.statusbar.policy.OnSizeChangedListener;
 import com.android.systemui.statusbar.policy.RotationLockController;
+import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
+import com.android.systemui.statusbar.stack.NotificationStackScrollLayout.OnChildLocationsChangedListener;
+import com.android.systemui.statusbar.stack.StackScrollState.ViewState;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
 
-public class PhoneStatusBar extends BaseStatusBar implements DemoMode {
+public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
+        DragDownHelper.OnDragDownListener {
     static final String TAG = "PhoneStatusBar";
     public static final boolean DEBUG = BaseStatusBar.DEBUG;
     public static final boolean SPEW = false;
@@ -134,10 +151,18 @@
     private static final int NOTIFICATION_PRIORITY_MULTIPLIER = 10; // see NotificationManagerService
     private static final int HIDE_ICONS_BELOW_SCORE = Notification.PRIORITY_LOW * NOTIFICATION_PRIORITY_MULTIPLIER;
 
+    /**
+     * Default value of {@link android.provider.Settings.Global#LOCK_SCREEN_SHOW_NOTIFICATIONS}.
+     */
+    private static final boolean ALLOW_NOTIFICATIONS_DEFAULT = false;
+
     private static final int STATUS_OR_NAV_TRANSIENT =
             View.STATUS_BAR_TRANSIENT | View.NAVIGATION_BAR_TRANSIENT;
     private static final long AUTOHIDE_TIMEOUT_MS = 3000;
 
+    /** The minimum delay in ms between reports of notification visibility. */
+    private static final int VISIBILITY_REPORT_MIN_DELAY_MS = 500;
+
     // fling gesture tuning parameters, scaled to display density
     private float mSelfExpandVelocityPx; // classic value: 2000px/s
     private float mSelfCollapseVelocityPx; // classic value: 2000px/s (will be negated to collapse "up")
@@ -168,11 +193,12 @@
     Display mDisplay;
     Point mCurrentDisplaySize = new Point();
     private float mHeadsUpVerticalOffset;
-    private int[] mPilePosition = new int[2];
+    private int[] mStackScrollerPosition = new int[2];
 
     StatusBarWindowView mStatusBarWindow;
     PhoneStatusBarView mStatusBarView;
     private int mStatusBarWindowState = WINDOW_STATE_SHOWING;
+    private StatusBarWindowManager mStatusBarWindowManager;
 
     int mPixelFormat;
     Object mQueueLock = new Object();
@@ -189,10 +215,11 @@
     IconMerger mNotificationIcons;
     // [+>
     View mMoreIcon;
+    // mode indicator icon
+    ImageView mModeIcon;
 
     // expanded notifications
     NotificationPanelView mNotificationPanel; // the sliding/resizing panel within the notification window
-    ScrollView mScrollView;
     View mExpandedContents;
     int mNotificationPanelGravity;
     int mNotificationPanelMarginBottomPx, mNotificationPanelMarginPx;
@@ -202,17 +229,23 @@
 
     // settings
     QuickSettings mQS;
-    boolean mHasSettingsPanel, mHasFlipSettings;
-    SettingsPanelView mSettingsPanel;
+    boolean mHasQuickSettings;
     View mFlipSettingsView;
     QuickSettingsContainerView mSettingsContainer;
-    int mSettingsPanelGravity;
 
     // top bar
     View mNotificationPanelHeader;
+    View mKeyguardStatusView;
+    View mKeyguardBottomArea;
+    boolean mLeaveOpenOnKeyguardHide;
+    KeyguardIndicationTextView mKeyguardIndicationTextView;
+
+    // TODO: Fetch phrase from search/hotword provider.
+    String mKeyguardHotwordPhrase = "";
+    int mKeyguardMaxNotificationCount;
     View mDateTimeView;
     View mClearButton;
-    ImageView mSettingsButton, mNotificationButton;
+    FlipperButton mHeaderFlipper, mKeyguardFlipper;
 
     // carrier/wifi label
     private TextView mCarrierLabel;
@@ -220,6 +253,7 @@
     private int mCarrierLabelHeight;
     private TextView mEmergencyCallLabel;
     private int mNotificationHeaderHeight;
+    private View mKeyguardCarrierLabel;
 
     private boolean mShowCarrierInPanel = false;
 
@@ -292,12 +326,9 @@
             if (MULTIUSER_DEBUG) Log.d(TAG, String.format("User setup changed: " +
                     "selfChange=%s userSetup=%s mUserSetup=%s",
                     selfChange, userSetup, mUserSetup));
-            if (mSettingsButton != null && mHasFlipSettings) {
-                mSettingsButton.setVisibility(userSetup ? View.VISIBLE : View.INVISIBLE);
-            }
-            if (mSettingsPanel != null) {
-                mSettingsPanel.setEnabled(userSetup);
-            }
+            mHeaderFlipper.userSetup(userSetup);
+            mKeyguardFlipper.userSetup(userSetup);
+
             if (userSetup != mUserSetup) {
                 mUserSetup = userSetup;
                 if (!mUserSetup && mStatusBarView != null)
@@ -310,13 +341,17 @@
         @Override
         public void onChange(boolean selfChange) {
             boolean wasUsing = mUseHeadsUp;
-            mUseHeadsUp = ENABLE_HEADS_UP && 0 != Settings.Global.getInt(
-                    mContext.getContentResolver(), SETTING_HEADS_UP, 0);
+            mUseHeadsUp = ENABLE_HEADS_UP && Settings.Global.HEADS_UP_OFF != Settings.Global.getInt(
+                    mContext.getContentResolver(), Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED,
+                    Settings.Global.HEADS_UP_OFF);
+            mHeadsUpTicker = mUseHeadsUp && 0 != Settings.Global.getInt(
+                    mContext.getContentResolver(), SETTING_HEADS_UP_TICKER, 0);
             Log.d(TAG, "heads up is " + (mUseHeadsUp ? "enabled" : "disabled"));
             if (wasUsing != mUseHeadsUp) {
                 if (!mUseHeadsUp) {
                     Log.d(TAG, "dismissing any existing heads up notification on disable event");
-                    mHandler.sendEmptyMessage(MSG_HIDE_HEADS_UP);
+                    setHeadsUpVisibility(false);
+                    mHeadsUpNotificationView.setNotification(null);
                     removeHeadsUpView();
                 } else {
                     addHeadsUpView();
@@ -331,6 +366,9 @@
     private int mNavigationBarMode;
     private Boolean mScreenOn;
 
+    private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
+    private ViewMediatorCallback mKeyguardViewMediatorCallback;
+
     private final Runnable mAutohide = new Runnable() {
         @Override
         public void run() {
@@ -340,25 +378,146 @@
             }
         }};
 
+    private Runnable mOnFlipRunnable;
+    private InterceptedNotifications mIntercepted;
+    private VelocityTracker mSettingsTracker;
+    private float mSettingsDownY;
+    private boolean mSettingsStarted;
+    private boolean mSettingsCancelled;
+    private boolean mSettingsClosing;
+    private boolean mVisible;
+
+    private final OnChildLocationsChangedListener mOnChildLocationsChangedListener =
+            new OnChildLocationsChangedListener() {
+        @Override
+        public void onChildLocationsChanged(NotificationStackScrollLayout stackScrollLayout) {
+            userActivity();
+        }
+    };
+
+    public void setOnFlipRunnable(Runnable onFlipRunnable) {
+        mOnFlipRunnable = onFlipRunnable;
+    }
+
+    /** Keys of notifications currently visible to the user. */
+    private final ArraySet<String> mCurrentlyVisibleNotifications = new ArraySet<String>();
+    private long mLastVisibilityReportUptimeMs;
+
+    private static final int VISIBLE_LOCATIONS = ViewState.LOCATION_FIRST_CARD
+            | ViewState.LOCATION_TOP_STACK_PEEKING
+            | ViewState.LOCATION_MAIN_AREA
+            | ViewState.LOCATION_BOTTOM_STACK_PEEKING;
+
+    private final OnChildLocationsChangedListener mNotificationLocationsChangedListener =
+            new OnChildLocationsChangedListener() {
+                @Override
+                public void onChildLocationsChanged(
+                        NotificationStackScrollLayout stackScrollLayout) {
+                    if (mHandler.hasCallbacks(mVisibilityReporter)) {
+                        // Visibilities will be reported when the existing
+                        // callback is executed.
+                        return;
+                    }
+                    // Calculate when we're allowed to run the visibility
+                    // reporter. Note that this timestamp might already have
+                    // passed. That's OK, the callback will just be executed
+                    // ASAP.
+                    long nextReportUptimeMs =
+                            mLastVisibilityReportUptimeMs + VISIBILITY_REPORT_MIN_DELAY_MS;
+                    mHandler.postAtTime(mVisibilityReporter, nextReportUptimeMs);
+                }
+            };
+
+    // Tracks notifications currently visible in mNotificationStackScroller and
+    // emits visibility events via NoMan on changes.
+    private final Runnable mVisibilityReporter = new Runnable() {
+        private final ArrayList<String> mTmpNewlyVisibleNotifications = new ArrayList<String>();
+        private final ArrayList<String> mTmpCurrentlyVisibleNotifications = new ArrayList<String>();
+
+        @Override
+        public void run() {
+            mLastVisibilityReportUptimeMs = SystemClock.uptimeMillis();
+
+            // 1. Loop over mNotificationData entries:
+            //   A. Keep list of visible notifications.
+            //   B. Keep list of previously hidden, now visible notifications.
+            // 2. Compute no-longer visible notifications by removing currently
+            //    visible notifications from the set of previously visible
+            //    notifications.
+            // 3. Report newly visible and no-longer visible notifications.
+            // 4. Keep currently visible notifications for next report.
+            int N = mNotificationData.size();
+            for (int i = 0; i < N; i++) {
+                Entry entry = mNotificationData.get(i);
+                String key = entry.notification.getKey();
+                boolean previouslyVisible = mCurrentlyVisibleNotifications.contains(key);
+                boolean currentlyVisible =
+                        (mStackScroller.getChildLocation(entry.row) & VISIBLE_LOCATIONS) != 0;
+                if (currentlyVisible) {
+                    // Build new set of visible notifications.
+                    mTmpCurrentlyVisibleNotifications.add(key);
+                }
+                if (!previouslyVisible && currentlyVisible) {
+                    mTmpNewlyVisibleNotifications.add(key);
+                }
+            }
+            ArraySet<String> noLongerVisibleNotifications = mCurrentlyVisibleNotifications;
+            noLongerVisibleNotifications.removeAll(mTmpCurrentlyVisibleNotifications);
+
+            logNotificationVisibilityChanges(
+                    mTmpNewlyVisibleNotifications, noLongerVisibleNotifications);
+
+            mCurrentlyVisibleNotifications.clear();
+            mCurrentlyVisibleNotifications.addAll(mTmpCurrentlyVisibleNotifications);
+
+            mTmpNewlyVisibleNotifications.clear();
+            mTmpCurrentlyVisibleNotifications.clear();
+        }
+    };
+
+    private final View.OnClickListener mOverflowClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            goToLockedShade(null);
+        }
+    };
+
+    @Override
+    public void setZenMode(int mode) {
+        super.setZenMode(mode);
+        if (mModeIcon == null) return;
+        if (!isDeviceProvisioned()) return;
+        final boolean zen = mode != Settings.Global.ZEN_MODE_OFF;
+        mModeIcon.setVisibility(zen ? View.VISIBLE : View.GONE);
+        if (!zen) {
+            mIntercepted.releaseIntercepted();
+        }
+    }
+
     @Override
     public void start() {
         mDisplay = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))
                 .getDefaultDisplay();
         updateDisplaySize();
-
+        mIntercepted = new InterceptedNotifications(mContext, this);
         super.start(); // calls createAndAddWindows()
 
         addNavigationBar();
 
         // Lastly, call to the icon policy to install/update all the icons.
         mIconPolicy = new PhoneStatusBarPolicy(mContext);
+        mSettingsObserver.onChange(false); // set up
 
         mHeadsUpObserver.onChange(true); // set up
         if (ENABLE_HEADS_UP) {
             mContext.getContentResolver().registerContentObserver(
-                    Settings.Global.getUriFor(SETTING_HEADS_UP), true,
+                    Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED), true,
+                    mHeadsUpObserver);
+            mContext.getContentResolver().registerContentObserver(
+                    Settings.Global.getUriFor(SETTING_HEADS_UP_TICKER), true,
                     mHeadsUpObserver);
         }
+        startKeyguard();
     }
 
     // ================================================================================
@@ -395,7 +554,8 @@
         PanelHolder holder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder);
         mStatusBarView.setPanelHolder(holder);
 
-        mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById(R.id.notification_panel);
+        mNotificationPanel = (NotificationPanelView) mStatusBarWindow.findViewById(
+                R.id.notification_panel);
         mNotificationPanel.setStatusBar(this);
         mNotificationPanelIsFullScreenWidth =
             (mNotificationPanel.getLayoutParams().width == ViewGroup.LayoutParams.MATCH_PARENT);
@@ -421,7 +581,8 @@
             mHeadsUpNotificationView.setBar(this);
         }
         if (MULTIUSER_DEBUG) {
-            mNotificationPanelDebugText = (TextView) mNotificationPanel.findViewById(R.id.header_debug_info);
+            mNotificationPanelDebugText = (TextView) mNotificationPanel.findViewById(
+                    R.id.header_debug_info);
             mNotificationPanelDebugText.setVisibility(View.VISIBLE);
         }
 
@@ -455,16 +616,32 @@
         mNotificationIcons = (IconMerger)mStatusBarView.findViewById(R.id.notificationIcons);
         mMoreIcon = mStatusBarView.findViewById(R.id.moreIcon);
         mNotificationIcons.setOverflowIndicator(mMoreIcon);
+        mModeIcon = (ImageView)mStatusBarView.findViewById(R.id.modeIcon);
+        mModeIcon.setImageResource(R.drawable.stat_sys_zen_limited);
         mStatusBarContents = (LinearLayout)mStatusBarView.findViewById(R.id.status_bar_contents);
         mTickerView = mStatusBarView.findViewById(R.id.ticker);
 
-        mPile = (NotificationRowLayout)mStatusBarWindow.findViewById(R.id.latestItems);
-        mPile.setLayoutTransitionsEnabled(false);
-        mPile.setLongPressListener(getNotificationLongClicker());
-        mExpandedContents = mPile; // was: expanded.findViewById(R.id.notificationLinearLayout);
+        mStackScroller = (NotificationStackScrollLayout) mStatusBarWindow.findViewById(
+                R.id.notification_stack_scroller);
+        mStackScroller.setLongPressListener(getNotificationLongClicker());
+        mStackScroller.setChildLocationsChangedListener(mOnChildLocationsChangedListener);
+
+        mKeyguardIconOverflowContainer =
+                (NotificationOverflowContainer) LayoutInflater.from(mContext).inflate(
+                        R.layout.status_bar_notification_keyguard_overflow, mStackScroller, false);
+        mKeyguardIconOverflowContainer.setOnActivatedListener(this);
+        mKeyguardCarrierLabel = mStatusBarWindow.findViewById(R.id.keyguard_carrier_text);
+        // TODO: Comment in when transition is ready.
+        //mKeyguardIconOverflowContainer.setOnClickListener(mOverflowClickListener);
+        mStackScroller.addView(mKeyguardIconOverflowContainer);
+
+        mExpandedContents = mStackScroller;
 
         mNotificationPanelHeader = mStatusBarWindow.findViewById(R.id.header);
-
+        mKeyguardStatusView = mStatusBarWindow.findViewById(R.id.keyguard_status_view);
+        mKeyguardBottomArea = mStatusBarWindow.findViewById(R.id.keyguard_bottom_area);
+        mKeyguardIndicationTextView = (KeyguardIndicationTextView) mStatusBarWindow.findViewById(
+                R.id.keyguard_indication_text);
         mClearButton = mStatusBarWindow.findViewById(R.id.clear_all_button);
         mClearButton.setOnClickListener(mClearButtonListener);
         mClearButton.setAlpha(0f);
@@ -472,8 +649,7 @@
         mClearButton.setEnabled(false);
         mDateView = (DateView)mStatusBarWindow.findViewById(R.id.date);
 
-        mHasSettingsPanel = res.getBoolean(R.bool.config_hasSettingsPanel);
-        mHasFlipSettings = res.getBoolean(R.bool.config_hasFlipSettingsPanel);
+        mHasQuickSettings = res.getBoolean(R.bool.config_hasQuickSettings);
 
         mDateTimeView = mNotificationPanelHeader.findViewById(R.id.datetime);
         if (mDateTimeView != null) {
@@ -481,40 +657,11 @@
             mDateTimeView.setEnabled(true);
         }
 
-        mSettingsButton = (ImageView) mStatusBarWindow.findViewById(R.id.settings_button);
-        if (mSettingsButton != null) {
-            mSettingsButton.setOnClickListener(mSettingsButtonListener);
-            if (mHasSettingsPanel) {
-                if (mStatusBarView.hasFullWidthNotifications()) {
-                    // the settings panel is hiding behind this button
-                    mSettingsButton.setImageResource(R.drawable.ic_notify_quicksettings);
-                    mSettingsButton.setVisibility(View.VISIBLE);
-                } else {
-                    // there is a settings panel, but it's on the other side of the (large) screen
-                    final View buttonHolder = mStatusBarWindow.findViewById(
-                            R.id.settings_button_holder);
-                    if (buttonHolder != null) {
-                        buttonHolder.setVisibility(View.GONE);
-                    }
-                }
-            } else {
-                // no settings panel, go straight to settings
-                mSettingsButton.setVisibility(View.VISIBLE);
-                mSettingsButton.setImageResource(R.drawable.ic_notify_settings);
-            }
-        }
-        if (mHasFlipSettings) {
-            mNotificationButton = (ImageView) mStatusBarWindow.findViewById(R.id.notification_button);
-            if (mNotificationButton != null) {
-                mNotificationButton.setOnClickListener(mNotificationButtonListener);
-            }
-        }
+        mHeaderFlipper = new FlipperButton(mStatusBarWindow.findViewById(R.id.header_flipper));
+        mKeyguardFlipper =new FlipperButton(mStatusBarWindow.findViewById(R.id.keyguard_flipper));
 
-        mScrollView = (ScrollView)mStatusBarWindow.findViewById(R.id.scroll);
-        mScrollView.setVerticalScrollBarEnabled(false); // less drawing during pulldowns
         if (!mNotificationPanelIsFullScreenWidth) {
-            mScrollView.setSystemUiVisibility(
-                    View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER |
+            mNotificationPanel.setSystemUiVisibility(
                     View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS |
                     View.STATUS_BAR_DISABLE_CLOCK);
         }
@@ -534,7 +681,10 @@
         mBatteryController = new BatteryController(mContext);
         mNetworkController = new NetworkController(mContext);
         mBluetoothController = new BluetoothController(mContext);
-        mRotationLockController = new RotationLockController(mContext);
+        if (mContext.getResources().getBoolean(R.bool.config_showRotationLock)
+                || QuickSettings.DEBUG_GONE_TILES) {
+            mRotationLockController = new RotationLockController(mContext);
+        }
         final SignalClusterView signalCluster =
                 (SignalClusterView)mStatusBarView.findViewById(R.id.signal_cluster);
 
@@ -546,17 +696,18 @@
         if (isAPhone) {
             mEmergencyCallLabel =
                     (TextView) mStatusBarWindow.findViewById(R.id.emergency_calls_only);
-            if (mEmergencyCallLabel != null) {
-                mNetworkController.addEmergencyLabelView(mEmergencyCallLabel);
-                mEmergencyCallLabel.setOnClickListener(new View.OnClickListener() {
-                    public void onClick(View v) { }});
-                mEmergencyCallLabel.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
-                    @Override
-                    public void onLayoutChange(View v, int left, int top, int right, int bottom,
-                            int oldLeft, int oldTop, int oldRight, int oldBottom) {
-                        updateCarrierLabelVisibility(false);
-                    }});
-            }
+            // TODO: Uncomment when correctly positioned
+//            if (mEmergencyCallLabel != null) {
+//                mNetworkController.addEmergencyLabelView(mEmergencyCallLabel);
+//                mEmergencyCallLabel.setOnClickListener(new View.OnClickListener() {
+//                    public void onClick(View v) { }});
+//                mEmergencyCallLabel.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+//                    @Override
+//                    public void onLayoutChange(View v, int left, int top, int right, int bottom,
+//                            int oldLeft, int oldTop, int oldRight, int oldBottom) {
+//                        updateCarrierLabelVisibility(false);
+//                    }});
+//            }
         }
 
         mCarrierLabel = (TextView)mStatusBarWindow.findViewById(R.id.carrier_label);
@@ -574,56 +725,27 @@
             }
 
             // set up the dynamic hide/show of the label
-            mPile.setOnSizeChangedListener(new OnSizeChangedListener() {
-                @Override
-                public void onSizeChanged(View view, int w, int h, int oldw, int oldh) {
-                    updateCarrierLabelVisibility(false);
-                }
-            });
+            // TODO: uncomment, handle this for the Stack scroller aswell
+//                ((NotificationRowLayout) mStackScroller)
+// .setOnSizeChangedListener(new OnSizeChangedListener() {
+//                @Override
+//                public void onSizeChanged(View view, int w, int h, int oldw, int oldh) {
+//                    updateCarrierLabelVisibility(false);
         }
 
         // Quick Settings (where available, some restrictions apply)
-        if (mHasSettingsPanel) {
-            // first, figure out where quick settings should be inflated
-            final View settings_stub;
-            if (mHasFlipSettings) {
-                // a version of quick settings that flips around behind the notifications
-                settings_stub = mStatusBarWindow.findViewById(R.id.flip_settings_stub);
-                if (settings_stub != null) {
-                    mFlipSettingsView = ((ViewStub)settings_stub).inflate();
-                    mFlipSettingsView.setVisibility(View.GONE);
-                    mFlipSettingsView.setVerticalScrollBarEnabled(false);
-                }
-            } else {
-                // full quick settings panel
-                settings_stub = mStatusBarWindow.findViewById(R.id.quick_settings_stub);
-                if (settings_stub != null) {
-                    mSettingsPanel = (SettingsPanelView) ((ViewStub)settings_stub).inflate();
-                } else {
-                    mSettingsPanel = (SettingsPanelView) mStatusBarWindow.findViewById(R.id.settings_panel);
-                }
-
-                if (mSettingsPanel != null) {
-                    if (!ActivityManager.isHighEndGfx()) {
-                        mSettingsPanel.setBackground(new FastColorDrawable(context.getResources().getColor(
-                                R.color.notification_panel_solid_background)));
-                    }
-                }
-            }
-
-            // wherever you find it, Quick Settings needs a container to survive
+        if (mHasQuickSettings) {
+            // Quick Settings needs a container to survive
             mSettingsContainer = (QuickSettingsContainerView)
                     mStatusBarWindow.findViewById(R.id.quick_settings_container);
+            mFlipSettingsView = mSettingsContainer;
             if (mSettingsContainer != null) {
                 mQS = new QuickSettings(mContext, mSettingsContainer);
                 if (!mNotificationPanelIsFullScreenWidth) {
                     mSettingsContainer.setSystemUiVisibility(
-                            View.STATUS_BAR_DISABLE_NOTIFICATION_TICKER
+                            View.STATUS_BAR_DISABLE_NOTIFICATION_ICONS
                             | View.STATUS_BAR_DISABLE_SYSTEM_INFO);
                 }
-                if (mSettingsPanel != null) {
-                    mSettingsPanel.setQuickSettings(mQS);
-                }
                 mQS.setService(this);
                 mQS.setBar(mStatusBarView);
                 mQS.setup(mNetworkController, mBluetoothController, mBatteryController,
@@ -651,6 +773,108 @@
         return mStatusBarView;
     }
 
+    public boolean onSettingsEvent(MotionEvent event) {
+        userActivity();
+        if (mSettingsClosing
+                && mFlipSettingsViewAnim != null && mFlipSettingsViewAnim.isRunning()) {
+            return true;
+        }
+        if (mSettingsTracker != null) {
+            mSettingsTracker.addMovement(event);
+        }
+        final int slop = ViewConfiguration.get(mContext).getScaledTouchSlop();
+        if (event.getAction() == MotionEvent.ACTION_DOWN) {
+            mSettingsTracker = VelocityTracker.obtain();
+            mSettingsDownY = event.getY();
+            mSettingsCancelled = false;
+            mSettingsStarted = false;
+            mSettingsClosing = mFlipSettingsView.getVisibility() == View.VISIBLE;
+            if (mSettingsClosing) {
+                mStackScroller.setVisibility(View.VISIBLE);
+            } else {
+                mFlipSettingsView.setTranslationY(-mNotificationPanel.getMeasuredHeight());
+            }
+            dispatchSettingsEvent(event);
+        } else if (mSettingsTracker != null && (event.getAction() == MotionEvent.ACTION_UP
+                || event.getAction() == MotionEvent.ACTION_CANCEL)) {
+            final float dy = event.getY() - mSettingsDownY;
+            final FlipperButton flipper = mState == StatusBarState.KEYGUARD
+                    ? mKeyguardFlipper
+                    : mHeaderFlipper;
+            final boolean inButton = flipper.inHolderBounds(event);
+            final boolean qsTap = mSettingsClosing && Math.abs(dy) < slop;
+            if (!qsTap && !inButton) {
+                mSettingsTracker.computeCurrentVelocity(1000);
+                final float vy = mSettingsTracker.getYVelocity();
+                final boolean animate = true;
+                if (dy <= slop || vy <= 0) {
+                    flipToNotifications(animate);
+                } else {
+                    flipToSettings(animate);
+                }
+            }
+            mSettingsTracker.recycle();
+            mSettingsTracker = null;
+            dispatchSettingsEvent(event);
+        } else if (mSettingsTracker != null && event.getAction() == MotionEvent.ACTION_MOVE) {
+            final float dy = event.getY() - mSettingsDownY;
+            if (mSettingsClosing) {
+                positionSettings(dy);
+                final boolean qsTap = Math.abs(dy) < slop;
+                if (!mSettingsCancelled && !qsTap) {
+                    MotionEvent cancelEvent = MotionEvent.obtainNoHistory(event);
+                    cancelEvent.setAction(MotionEvent.ACTION_CANCEL);
+                    dispatchSettingsEvent(cancelEvent);
+                    mSettingsCancelled = true;
+                }
+            } else {
+                if (!mSettingsStarted && dy > slop) {
+                    mSettingsStarted = true;
+                    mFlipSettingsView.setVisibility(View.VISIBLE);
+                    mStackScroller.setVisibility(View.VISIBLE);
+                }
+                if (mSettingsStarted) {
+                    positionSettings(dy);
+                }
+                dispatchSettingsEvent(event);
+            }
+        }
+        return true;
+    }
+
+    private void dispatchSettingsEvent(MotionEvent event) {
+        final View target = mSettingsClosing ? mFlipSettingsView : mNotificationPanelHeader;
+        final int[] targetLoc = new int[2];
+        target.getLocationInWindow(targetLoc);
+        final int[] panelLoc = new int[2];
+        mNotificationPanel.getLocationInWindow(panelLoc);
+        final int dx = targetLoc[0] - panelLoc[0];
+        final int dy = targetLoc[1] - panelLoc[1];
+        event.offsetLocation(-dx, -dy);
+        target.dispatchTouchEvent(event);
+    }
+
+    private void positionSettings(float dy) {
+        if (mSettingsClosing) {
+            final int ph = mNotificationPanel.getMeasuredHeight();
+            dy = Math.min(Math.max(-ph, dy), 0);
+            mFlipSettingsView.setTranslationY(dy);
+            mStackScroller.setTranslationY(ph + dy);
+        } else {
+            final int h = mFlipSettingsView.getBottom();
+            dy = Math.min(Math.max(0, dy), h);
+            mFlipSettingsView.setTranslationY(-h + dy);
+            mStackScroller.setTranslationY(dy);
+        }
+    }
+
+    private void startKeyguard() {
+        KeyguardViewMediator keyguardViewMediator = getComponent(KeyguardViewMediator.class);
+        mStatusBarKeyguardViewManager = keyguardViewMediator.registerStatusBar(this,
+                mStatusBarWindow, mStatusBarWindowManager);
+        mKeyguardViewMediatorCallback = keyguardViewMediator.getViewMediatorCallback();
+    }
+
     @Override
     protected void onShowSearchPanel() {
         if (mNavigationBarView != null) {
@@ -728,10 +952,6 @@
         }
     }
 
-    protected int getStatusBarGravity() {
-        return Gravity.TOP | Gravity.FILL_HORIZONTAL;
-    }
-
     public int getStatusBarHeight() {
         if (mNaturalBarHeight < 0) {
             final Resources res = mContext.getResources();
@@ -853,7 +1073,6 @@
                 PixelFormat.TRANSLUCENT);
         lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
         lp.gravity = Gravity.TOP;
-        lp.y = getStatusBarHeight();
         lp.setTitle("Heads Up");
         lp.packageName = mContext.getPackageName();
         lp.windowAnimations = R.style.Animation_StatusBar_HeadsUp;
@@ -901,16 +1120,24 @@
         mStatusIcons.removeViewAt(viewIndex);
     }
 
+    public UserHandle getCurrentUserHandle() {
+        return new UserHandle(mCurrentUserId);
+    }
+
     public void addNotification(IBinder key, StatusBarNotification notification) {
         if (DEBUG) Log.d(TAG, "addNotification score=" + notification.getScore());
         Entry shadeEntry = createNotificationViews(key, notification);
         if (shadeEntry == null) {
             return;
         }
+        if (mZenMode != Global.ZEN_MODE_OFF && mIntercepted.tryIntercept(key, notification)) {
+            return;
+        }
         if (mUseHeadsUp && shouldInterrupt(notification)) {
             if (DEBUG) Log.d(TAG, "launching notification in heads up mode");
             Entry interruptionCandidate = new Entry(key, notification, null);
-            if (inflateViews(interruptionCandidate, mHeadsUpNotificationView.getHolder())) {
+            ViewGroup holder = mHeadsUpNotificationView.getHolder();
+            if (inflateViewsForHeadsUp(interruptionCandidate, holder)) {
                 mInterruptingNotificationTime = System.currentTimeMillis();
                 mInterruptingNotificationEntry = interruptionCandidate;
                 shadeEntry.setInterruption();
@@ -951,13 +1178,19 @@
 
     @Override
     public void resetHeadsUpDecayTimer() {
+        mHandler.removeMessages(MSG_HIDE_HEADS_UP);
         if (mUseHeadsUp && mHeadsUpNotificationDecay > 0
                 && mHeadsUpNotificationView.isClearable()) {
-            mHandler.removeMessages(MSG_HIDE_HEADS_UP);
             mHandler.sendEmptyMessageDelayed(MSG_HIDE_HEADS_UP, mHeadsUpNotificationDecay);
         }
     }
 
+    @Override
+    public void updateNotification(IBinder key, StatusBarNotification notification) {
+        super.updateNotification(key, notification);
+        mIntercepted.update(key, notification);
+    }
+
     public void removeNotification(IBinder key) {
         StatusBarNotification old = removeNotificationViews(key);
         if (SPEW) Log.d(TAG, "removeNotification key=" + key + " old=" + old);
@@ -975,11 +1208,11 @@
             }
 
             if (CLOSE_PANEL_WHEN_EMPTIED && mNotificationData.size() == 0
-                    && !mNotificationPanel.isTracking()) {
+                    && !mNotificationPanel.isTracking() && mState != StatusBarState.KEYGUARD) {
                 animateCollapsePanels();
             }
         }
-
+        mIntercepted.remove(key);
         setAreThereNotifications();
     }
 
@@ -995,17 +1228,8 @@
             ((ImageView)mClearButton).setImageResource(R.drawable.ic_notify_clear);
         }
 
-        if (mSettingsButton != null) {
-            // Force asset reloading
-            mSettingsButton.setImageDrawable(null);
-            mSettingsButton.setImageResource(R.drawable.ic_notify_quicksettings);
-        }
-
-        if (mNotificationButton != null) {
-            // Force asset reloading
-            mNotificationButton.setImageDrawable(null);
-            mNotificationButton.setImageResource(R.drawable.ic_notifications);
-        }
+        mHeaderFlipper.refreshLayout();
+        mKeyguardFlipper.refreshLayout();
 
         refreshAllStatusBarIcons();
     }
@@ -1016,7 +1240,7 @@
     }
 
     private void loadNotificationShade() {
-        if (mPile == null) return;
+        if (mStackScroller == null) return;
 
         int N = mNotificationData.size();
 
@@ -1027,32 +1251,41 @@
         for (int i=0; i<N; i++) {
             Entry ent = mNotificationData.get(N-i-1);
             if (!(provisioned || showNotificationEvenIfUnprovisioned(ent.notification))) continue;
-            if (!notificationIsForCurrentUser(ent.notification)) continue;
-            toShow.add(ent.row);
+
+            // TODO How do we want to badge notifcations from profiles.
+            if (!notificationIsForCurrentProfiles(ent.notification)) continue;
+
+            final int vis = ent.notification.getNotification().visibility;
+            if (vis != Notification.VISIBILITY_SECRET) {
+                // when isLockscreenPublicMode() we show the public form of VISIBILITY_PRIVATE notifications
+                ent.row.setShowingPublic(isLockscreenPublicMode()
+                        && vis == Notification.VISIBILITY_PRIVATE
+                        && !userAllowsPrivateNotificationsInPublic(ent.notification.getUserId()));
+                toShow.add(ent.row);
+            }
         }
 
         ArrayList<View> toRemove = new ArrayList<View>();
-        for (int i=0; i<mPile.getChildCount(); i++) {
-            View child = mPile.getChildAt(i);
-            if (!toShow.contains(child)) {
+        for (int i=0; i< mStackScroller.getChildCount(); i++) {
+            View child = mStackScroller.getChildAt(i);
+            if (!toShow.contains(child) && child != mKeyguardIconOverflowContainer) {
                 toRemove.add(child);
             }
         }
 
         for (View remove : toRemove) {
-            mPile.removeView(remove);
+            mStackScroller.removeView(remove);
         }
 
         for (int i=0; i<toShow.size(); i++) {
             View v = toShow.get(i);
             if (v.getParent() == null) {
-                mPile.addView(v, i);
+                mStackScroller.addView(v, i);
             }
         }
 
-        if (mSettingsButton != null) {
-            mSettingsButton.setEnabled(isDeviceProvisioned());
-        }
+        mHeaderFlipper.provisionCheck(provisioned);
+        mKeyguardFlipper.provisionCheck(provisioned);
     }
 
     @Override
@@ -1078,7 +1311,17 @@
             Entry ent = mNotificationData.get(N-i-1);
             if (!((provisioned && ent.notification.getScore() >= HIDE_ICONS_BELOW_SCORE)
                     || showNotificationEvenIfUnprovisioned(ent.notification))) continue;
-            if (!notificationIsForCurrentUser(ent.notification)) continue;
+            if (!notificationIsForCurrentProfiles(ent.notification)) continue;
+            if (isLockscreenPublicMode()
+                    && ent.notification.getNotification().visibility
+                            == Notification.VISIBILITY_SECRET
+                    && !userAllowsPrivateNotificationsInPublic(ent.notification.getUserId())) {
+                // in "public" mode (atop a secure keyguard), secret notifs are totally hidden
+                continue;
+            }
+            if (mIntercepted.isSyntheticEntry(ent)) {
+                continue;
+            }
             toShow.add(ent.icon);
         }
 
@@ -1103,19 +1346,23 @@
     }
 
     protected void updateCarrierLabelVisibility(boolean force) {
+        // TODO: Handle this for the notification stack scroller as well
         if (!mShowCarrierInPanel) return;
         // The idea here is to only show the carrier label when there is enough room to see it,
         // i.e. when there aren't enough notifications to fill the panel.
         if (SPEW) {
-            Log.d(TAG, String.format("pileh=%d scrollh=%d carrierh=%d",
-                    mPile.getHeight(), mScrollView.getHeight(), mCarrierLabelHeight));
+            Log.d(TAG, String.format("stackScrollerh=%d scrollh=%d carrierh=%d",
+                    mStackScroller.getHeight(), mStackScroller.getHeight(),
+                    mCarrierLabelHeight));
         }
 
         final boolean emergencyCallsShownElsewhere = mEmergencyCallLabel != null;
         final boolean makeVisible =
             !(emergencyCallsShownElsewhere && mNetworkController.isEmergencyOnly())
-            && mPile.getHeight() < (mNotificationPanel.getHeight() - mCarrierLabelHeight - mNotificationHeaderHeight)
-            && mScrollView.getVisibility() == View.VISIBLE;
+            && mStackScroller.getHeight() < (mNotificationPanel.getHeight()
+                    - mCarrierLabelHeight - mNotificationHeaderHeight)
+            && mStackScroller.getVisibility() == View.VISIBLE
+            && mState != StatusBarState.KEYGUARD;
 
         if (force || mCarrierLabelVisible != makeVisible) {
             mCarrierLabelVisible = makeVisible;
@@ -1155,10 +1402,9 @@
                     + " any=" + any + " clearable=" + clearable);
         }
 
-        if (mHasFlipSettings
-                && mFlipSettingsView != null
+        if (mFlipSettingsView != null
                 && mFlipSettingsView.getVisibility() == View.VISIBLE
-                && mScrollView.getVisibility() != View.VISIBLE) {
+                && mStackScroller.getVisibility() != View.VISIBLE) {
             // the flip settings panel is unequivocally showing; we should not be shown
             mClearButton.setVisibility(View.INVISIBLE);
         } else if (mClearButton.isShown()) {
@@ -1240,8 +1486,6 @@
         flagdbg.append(((diff  & StatusBarManager.DISABLE_NOTIFICATION_ICONS) != 0) ? "* " : " ");
         flagdbg.append(((state & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) ? "ALERTS" : "alerts");
         flagdbg.append(((diff  & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) ? "* " : " ");
-        flagdbg.append(((state & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) ? "TICKER" : "ticker");
-        flagdbg.append(((diff  & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) ? "* " : " ");
         flagdbg.append(((state & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) ? "SYSTEM_INFO" : "system_info");
         flagdbg.append(((diff  & StatusBarManager.DISABLE_SYSTEM_INFO) != 0) ? "* " : " ");
         flagdbg.append(((state & StatusBarManager.DISABLE_BACK) != 0) ? "BACK" : "back");
@@ -1326,10 +1570,6 @@
                     .setDuration(175)
                     .start();
             }
-        } else if ((diff & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
-            if (mTicking && (state & StatusBarManager.DISABLE_NOTIFICATION_TICKER) != 0) {
-                haltTicker();
-            }
         }
     }
 
@@ -1400,14 +1640,13 @@
         return (mDisabled & StatusBarManager.DISABLE_EXPAND) == 0;
     }
 
-    void makeExpandedVisible() {
+    void makeExpandedVisible(boolean force) {
         if (SPEW) Log.d(TAG, "Make expanded visible: expanded visible=" + mExpandedVisible);
-        if (mExpandedVisible || !panelsEnabled()) {
+        if (!force && (mExpandedVisible || !panelsEnabled())) {
             return;
         }
 
         mExpandedVisible = true;
-        mPile.setLayoutTransitionsEnabled(true);
         if (mNavigationBarView != null)
             mNavigationBarView.setSlippery(true);
 
@@ -1417,25 +1656,13 @@
 
         // Expand the window to encompass the full screen in anticipation of the drag.
         // This is only possible to do atomically because the status bar is at the top of the screen!
-        WindowManager.LayoutParams lp = (WindowManager.LayoutParams) mStatusBarWindow.getLayoutParams();
-        lp.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-        lp.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-        lp.height = ViewGroup.LayoutParams.MATCH_PARENT;
-        mWindowManager.updateViewLayout(mStatusBarWindow, lp);
+        mStatusBarWindowManager.setStatusBarExpanded(true);
 
         visibilityChanged(true);
 
         setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
     }
 
-    private void releaseFocus() {
-        WindowManager.LayoutParams lp =
-                (WindowManager.LayoutParams) mStatusBarWindow.getLayoutParams();
-        lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-        lp.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-        mWindowManager.updateViewLayout(mStatusBarWindow, lp);
-    }
-
     public void animateCollapsePanels() {
         animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
     }
@@ -1447,9 +1674,6 @@
                     + " flags=" + flags);
         }
 
-        // release focus immediately to kick off focus change transition
-        releaseFocus();
-
         if ((flags & CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL) == 0) {
             mHandler.removeMessages(MSG_CLOSE_RECENTS_PANEL);
             mHandler.sendEmptyMessage(MSG_CLOSE_RECENTS_PANEL);
@@ -1460,8 +1684,17 @@
             mHandler.sendEmptyMessage(MSG_CLOSE_SEARCH_PANEL);
         }
 
-        mStatusBarWindow.cancelExpandHelper();
-        mStatusBarView.collapseAllPanels(true);
+        if (mStatusBarWindow != null) {
+
+            // release focus immediately to kick off focus change transition
+            mStatusBarWindowManager.setStatusBarFocusable(false);
+
+            mStatusBarWindow.cancelExpandHelper();
+            mStatusBarView.collapseAllPanels(true);
+            if (isFlippedToSettings()) {
+                flipToNotifications(true /*animate*/);
+            }
+        }
     }
 
     public ViewPropertyAnimator setVisibilityWhenDone(
@@ -1508,8 +1741,7 @@
     final int FLIP_DURATION_IN = 225;
     final int FLIP_DURATION = (FLIP_DURATION_IN + FLIP_DURATION_OUT);
 
-    Animator mScrollViewAnim, mFlipSettingsViewAnim, mNotificationButtonAnim,
-        mSettingsButtonAnim, mClearButtonAnim;
+    Animator mScrollViewAnim, mFlipSettingsViewAnim, mClearButtonAnim;
 
     @Override
     public void animateExpandNotificationsPanel() {
@@ -1519,43 +1751,50 @@
         }
 
         mNotificationPanel.expand();
-        if (mHasFlipSettings && mScrollView.getVisibility() != View.VISIBLE) {
-            flipToNotifications();
+        if (mStackScroller.getVisibility() != View.VISIBLE) {
+            flipToNotifications(true /*animate*/);
         }
 
         if (false) postStartTracing();
     }
 
-    public void flipToNotifications() {
-        if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
-        if (mScrollViewAnim != null) mScrollViewAnim.cancel();
-        if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
-        if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
-        if (mClearButtonAnim != null) mClearButtonAnim.cancel();
+    private static void cancelAnim(Animator anim) {
+        if (anim != null) {
+            anim.cancel();
+        }
+    }
 
-        mScrollView.setVisibility(View.VISIBLE);
-        mScrollViewAnim = start(
-            startDelay(FLIP_DURATION_OUT,
-                interpolator(mDecelerateInterpolator,
-                    ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 0f, 1f)
-                        .setDuration(FLIP_DURATION_IN)
-                    )));
-        mFlipSettingsViewAnim = start(
-            setVisibilityWhenDone(
-                interpolator(mAccelerateInterpolator,
-                        ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 1f, 0f)
-                        )
-                    .setDuration(FLIP_DURATION_OUT),
-                mFlipSettingsView, View.INVISIBLE));
-        mNotificationButtonAnim = start(
-            setVisibilityWhenDone(
-                ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
-                    .setDuration(FLIP_DURATION),
-                mNotificationButton, View.INVISIBLE));
-        mSettingsButton.setVisibility(View.VISIBLE);
-        mSettingsButtonAnim = start(
-            ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
-                .setDuration(FLIP_DURATION));
+    public void flipToNotifications(boolean animate) {
+        cancelAnim(mFlipSettingsViewAnim);
+        cancelAnim(mScrollViewAnim);
+        cancelAnim(mClearButtonAnim);
+        mHeaderFlipper.cancel();
+        mKeyguardFlipper.cancel();
+        mStackScroller.setVisibility(View.VISIBLE);
+        final int h = mNotificationPanel.getMeasuredHeight();
+        if (animate) {
+            final float settingsY =
+                    mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : 0;
+            final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : h;
+            mScrollViewAnim = start(
+                    interpolator(mDecelerateInterpolator,
+                        ObjectAnimator.ofFloat(mStackScroller, View.TRANSLATION_Y, scrollerY, 0)
+                            .setDuration(FLIP_DURATION)
+                        ));
+            mFlipSettingsViewAnim = start(
+                setVisibilityWhenDone(
+                    interpolator(mDecelerateInterpolator,
+                            ObjectAnimator.ofFloat(
+                                    mFlipSettingsView, View.TRANSLATION_Y, settingsY, -h))
+                        .setDuration(FLIP_DURATION),
+                    mFlipSettingsView, View.INVISIBLE));
+        } else {
+            mStackScroller.setTranslationY(0);
+            mFlipSettingsView.setTranslationY(-h);
+            mFlipSettingsView.setVisibility(View.INVISIBLE);
+        }
+        mHeaderFlipper.flipToNotifications(animate);
+        mKeyguardFlipper.flipToNotifications(animate);
         mClearButton.setVisibility(View.VISIBLE);
         mClearButton.setAlpha(0f);
         setAreThereNotifications(); // this will show/hide the button as necessary
@@ -1563,7 +1802,10 @@
             public void run() {
                 updateCarrierLabelVisibility(false);
             }
-        }, FLIP_DURATION - 150);
+        }, animate ? FLIP_DURATION - 150 : 0);
+        if (mOnFlipRunnable != null) {
+            mOnFlipRunnable.run();
+        }
     }
 
     @Override
@@ -1576,85 +1818,76 @@
         // Settings are not available in setup
         if (!mUserSetup) return;
 
-        if (mHasFlipSettings) {
-            mNotificationPanel.expand();
-            if (mFlipSettingsView.getVisibility() != View.VISIBLE) {
-                flipToSettings();
-            }
-        } else if (mSettingsPanel != null) {
-            mSettingsPanel.expand();
+        mNotificationPanel.expand();
+        if (mFlipSettingsView.getVisibility() != View.VISIBLE
+                || mFlipSettingsView.getTranslationY() < 0) {
+            flipToSettings(true /*animate*/);
         }
 
         if (false) postStartTracing();
     }
 
-    public void switchToSettings() {
-        // Settings are not available in setup
-        if (!mUserSetup) return;
-
-        mFlipSettingsView.setScaleX(1f);
-        mFlipSettingsView.setVisibility(View.VISIBLE);
-        mSettingsButton.setVisibility(View.GONE);
-        mScrollView.setVisibility(View.GONE);
-        mScrollView.setScaleX(0f);
-        mNotificationButton.setVisibility(View.VISIBLE);
-        mNotificationButton.setAlpha(1f);
-        mClearButton.setVisibility(View.GONE);
+    public boolean isFlippedToSettings() {
+        if (mFlipSettingsView != null) {
+            return mFlipSettingsView.getVisibility() == View.VISIBLE;
+        }
+        return false;
     }
 
-    public void flipToSettings() {
+    public void flipToSettings(boolean animate) {
         // Settings are not available in setup
         if (!mUserSetup) return;
 
-        if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
-        if (mScrollViewAnim != null) mScrollViewAnim.cancel();
-        if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
-        if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
-        if (mClearButtonAnim != null) mClearButtonAnim.cancel();
+        cancelAnim(mFlipSettingsViewAnim);
+        cancelAnim(mScrollViewAnim);
+        mHeaderFlipper.cancel();
+        mKeyguardFlipper.cancel();
+        cancelAnim(mClearButtonAnim);
 
         mFlipSettingsView.setVisibility(View.VISIBLE);
-        mFlipSettingsView.setScaleX(0f);
-        mFlipSettingsViewAnim = start(
-            startDelay(FLIP_DURATION_OUT,
-                interpolator(mDecelerateInterpolator,
-                    ObjectAnimator.ofFloat(mFlipSettingsView, View.SCALE_X, 0f, 1f)
-                        .setDuration(FLIP_DURATION_IN)
-                    )));
-        mScrollViewAnim = start(
-            setVisibilityWhenDone(
-                interpolator(mAccelerateInterpolator,
-                        ObjectAnimator.ofFloat(mScrollView, View.SCALE_X, 1f, 0f)
-                        )
-                    .setDuration(FLIP_DURATION_OUT),
-                mScrollView, View.INVISIBLE));
-        mSettingsButtonAnim = start(
-            setVisibilityWhenDone(
-                ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
+        final int h = mNotificationPanel.getMeasuredHeight();
+        if (animate) {
+            final float settingsY
+                    = mSettingsTracker != null ? mFlipSettingsView.getTranslationY() : -h;
+            final float scrollerY = mSettingsTracker != null ? mStackScroller.getTranslationY() : 0;
+            mFlipSettingsViewAnim = start(
+                    startDelay(0,
+                        interpolator(mDecelerateInterpolator,
+                            ObjectAnimator.ofFloat(mFlipSettingsView, View.TRANSLATION_Y,
+                                    settingsY, 0f)
+                                .setDuration(FLIP_DURATION)
+                            )));
+            mScrollViewAnim = start(
+                setVisibilityWhenDone(
+                    interpolator(mDecelerateInterpolator,
+                            ObjectAnimator.ofFloat(mStackScroller, View.TRANSLATION_Y, scrollerY, h)
+                            )
+                        .setDuration(FLIP_DURATION),
+                        mStackScroller, View.INVISIBLE));
+        } else {
+            mFlipSettingsView.setTranslationY(0);
+            mStackScroller.setTranslationY(h);
+            mStackScroller.setVisibility(View.INVISIBLE);
+        }
+        mHeaderFlipper.flipToSettings(animate);
+        mKeyguardFlipper.flipToSettings(animate);
+        if (animate) {
+            mClearButtonAnim = start(
+                setVisibilityWhenDone(
+                    ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
                     .setDuration(FLIP_DURATION),
-                    mScrollView, View.INVISIBLE));
-        mNotificationButton.setVisibility(View.VISIBLE);
-        mNotificationButtonAnim = start(
-            ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
-                .setDuration(FLIP_DURATION));
-        mClearButtonAnim = start(
-            setVisibilityWhenDone(
-                ObjectAnimator.ofFloat(mClearButton, View.ALPHA, 0f)
-                .setDuration(FLIP_DURATION),
-                mClearButton, View.INVISIBLE));
+                    mClearButton, View.INVISIBLE));
+        } else {
+            mClearButton.setAlpha(0);
+            mClearButton.setVisibility(View.INVISIBLE);
+        }
         mNotificationPanel.postDelayed(new Runnable() {
             public void run() {
                 updateCarrierLabelVisibility(false);
             }
-        }, FLIP_DURATION - 150);
-    }
-
-    public void flipPanels() {
-        if (mHasFlipSettings) {
-            if (mFlipSettingsView.getVisibility() != View.VISIBLE) {
-                flipToSettings();
-            } else {
-                flipToNotifications();
-            }
+        }, animate ? FLIP_DURATION - 150 : 0);
+        if (mOnFlipRunnable != null) {
+            mOnFlipRunnable.run();
         }
     }
 
@@ -1670,43 +1903,34 @@
         if (SPEW) Log.d(TAG, "makeExpandedInvisible: mExpandedVisible=" + mExpandedVisible
                 + " mExpandedVisible=" + mExpandedVisible);
 
-        if (!mExpandedVisible) {
+        if (!mExpandedVisible || mStatusBarWindow == null) {
             return;
         }
 
         // Ensure the panel is fully collapsed (just in case; bug 6765842, 7260868)
         mStatusBarView.collapseAllPanels(/*animate=*/ false);
 
-        if (mHasFlipSettings) {
-            // reset things to their proper state
-            if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
-            if (mScrollViewAnim != null) mScrollViewAnim.cancel();
-            if (mSettingsButtonAnim != null) mSettingsButtonAnim.cancel();
-            if (mNotificationButtonAnim != null) mNotificationButtonAnim.cancel();
-            if (mClearButtonAnim != null) mClearButtonAnim.cancel();
+        // reset things to their proper state
+        if (mFlipSettingsViewAnim != null) mFlipSettingsViewAnim.cancel();
+        if (mScrollViewAnim != null) mScrollViewAnim.cancel();
+        if (mClearButtonAnim != null) mClearButtonAnim.cancel();
 
-            mScrollView.setScaleX(1f);
-            mScrollView.setVisibility(View.VISIBLE);
-            mSettingsButton.setAlpha(1f);
-            mSettingsButton.setVisibility(View.VISIBLE);
-            mNotificationPanel.setVisibility(View.GONE);
-            mFlipSettingsView.setVisibility(View.GONE);
-            mNotificationButton.setVisibility(View.GONE);
-            setAreThereNotifications(); // show the clear button
-        }
+        mStackScroller.setVisibility(View.VISIBLE);
+        mNotificationPanel.setVisibility(View.GONE);
+        mFlipSettingsView.setVisibility(View.GONE);
+
+        setAreThereNotifications(); // show the clear button
+
+        mHeaderFlipper.reset();
+        mKeyguardFlipper.reset();
 
         mExpandedVisible = false;
-        mPile.setLayoutTransitionsEnabled(false);
         if (mNavigationBarView != null)
             mNavigationBarView.setSlippery(false);
         visibilityChanged(false);
 
         // Shrink the window to the size of the status bar only
-        WindowManager.LayoutParams lp = (WindowManager.LayoutParams) mStatusBarWindow.getLayoutParams();
-        lp.height = getStatusBarHeight();
-        lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-        lp.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-        mWindowManager.updateViewLayout(mStatusBarWindow, lp);
+        mStatusBarWindowManager.setStatusBarExpanded(false);
 
         if ((mDisabled & StatusBarManager.DISABLE_NOTIFICATION_ICONS) == 0) {
             setNotificationIconVisibility(true, com.android.internal.R.anim.fade_in);
@@ -1721,53 +1945,8 @@
         }
 
         setInteracting(StatusBarManager.WINDOW_STATUS_BAR, false);
-    }
 
-    /**
-     * Enables or disables layers on the children of the notifications pile.
-     *
-     * When layers are enabled, this method attempts to enable layers for the minimal
-     * number of children. Only children visible when the notification area is fully
-     * expanded will receive a layer. The technique used in this method might cause
-     * more children than necessary to get a layer (at most one extra child with the
-     * current UI.)
-     *
-     * @param layerType {@link View#LAYER_TYPE_NONE} or {@link View#LAYER_TYPE_HARDWARE}
-     */
-    private void setPileLayers(int layerType) {
-        final int count = mPile.getChildCount();
-
-        switch (layerType) {
-            case View.LAYER_TYPE_NONE:
-                for (int i = 0; i < count; i++) {
-                    mPile.getChildAt(i).setLayerType(layerType, null);
-                }
-                break;
-            case View.LAYER_TYPE_HARDWARE:
-                final int[] location = new int[2];
-                mNotificationPanel.getLocationInWindow(location);
-
-                final int left = location[0];
-                final int top = location[1];
-                final int right = left + mNotificationPanel.getWidth();
-                final int bottom = top + getExpandedViewMaxHeight();
-
-                final Rect childBounds = new Rect();
-
-                for (int i = 0; i < count; i++) {
-                    final View view = mPile.getChildAt(i);
-                    view.getLocationInWindow(location);
-
-                    childBounds.set(location[0], location[1],
-                            location[0] + view.getWidth(), location[1] + view.getHeight());
-
-                    if (childBounds.intersects(left, top, right, bottom)) {
-                        view.setLayerType(layerType, null);
-                    }
-                }
-
-                break;
-        }
+        showBouncer();
     }
 
     public boolean interceptTouchEvent(MotionEvent event) {
@@ -1893,7 +2072,7 @@
             }
             if (sbModeChanged || nbModeChanged) {
                 // update transient bar autohide
-                if (sbMode == MODE_SEMI_TRANSPARENT || nbMode == MODE_SEMI_TRANSPARENT) {
+                if (mStatusBarMode == MODE_SEMI_TRANSPARENT || mNavigationBarMode == MODE_SEMI_TRANSPARENT) {
                     scheduleAutohide();
                 } else {
                     cancelAutohide();
@@ -1933,7 +2112,8 @@
     private void checkBarModes() {
         if (mDemoMode) return;
         int sbMode = mStatusBarMode;
-        if (panelsEnabled() && (mInteractingWindows & StatusBarManager.WINDOW_STATUS_BAR) != 0) {
+        if (panelsEnabled() && (mInteractingWindows & StatusBarManager.WINDOW_STATUS_BAR) != 0
+                && mState != StatusBarState.KEYGUARD) {
             // if panels are expandable, force the status bar opaque on any interaction
             sbMode = MODE_OPAQUE;
         }
@@ -2046,12 +2226,20 @@
 
     @Override
     public void setImeWindowStatus(IBinder token, int vis, int backDisposition) {
-        boolean altBack = (backDisposition == InputMethodService.BACK_DISPOSITION_WILL_DISMISS)
-            || ((vis & InputMethodService.IME_VISIBLE) != 0);
+        boolean imeShown = (vis & InputMethodService.IME_VISIBLE) != 0;
+        int flags = mNavigationIconHints;
+        if ((backDisposition == InputMethodService.BACK_DISPOSITION_WILL_DISMISS) || imeShown) {
+            flags |= NAVIGATION_HINT_BACK_ALT;
+        } else {
+            flags &= ~NAVIGATION_HINT_BACK_ALT;
+        }
+        if (imeShown) {
+            flags |= NAVIGATION_HINT_IME_SHOWN;
+        } else {
+            flags &= ~NAVIGATION_HINT_IME_SHOWN;
+        }
 
-        setNavigationIconHints(
-                altBack ? (mNavigationIconHints | NAVIGATION_HINT_BACK_ALT)
-                        : (mNavigationIconHints & ~NAVIGATION_HINT_BACK_ALT));
+        setNavigationIconHints(flags);
         if (mQS != null) mQS.setImeWindowStatus(vis > 0);
     }
 
@@ -2067,13 +2255,14 @@
         if (!isDeviceProvisioned()) return;
 
         // not for you
-        if (!notificationIsForCurrentUser(n)) return;
+        if (!notificationIsForCurrentProfiles(n)) return;
 
         // Show the ticker if one is requested. Also don't do this
         // until status bar window is attached to the window manager,
         // because...  well, what's the point otherwise?  And trying to
         // run a ticker without being attached will crash!
-        if (n.getNotification().tickerText != null && mStatusBarWindow.getWindowToken() != null) {
+        if (n.getNotification().tickerText != null && mStatusBarWindow != null
+                && mStatusBarWindow.getWindowToken() != null) {
             if (0 == (mDisabled & (StatusBarManager.DISABLE_NOTIFICATION_ICONS
                             | StatusBarManager.DISABLE_NOTIFICATION_TICKER))) {
                 mTicker.addEntry(n);
@@ -2146,10 +2335,11 @@
             pw.println("  mTicking=" + mTicking);
             pw.println("  mTracking=" + mTracking);
             pw.println("  mDisplayMetrics=" + mDisplayMetrics);
-            pw.println("  mPile: " + viewInfo(mPile));
+            pw.println("  mStackScroller: " + viewInfo(mStackScroller));
             pw.println("  mTickerView: " + viewInfo(mTickerView));
-            pw.println("  mScrollView: " + viewInfo(mScrollView)
-                    + " scroll " + mScrollView.getScrollX() + "," + mScrollView.getScrollY());
+            pw.println("  mStackScroller: " + viewInfo(mStackScroller)
+                    + " scroll " + mStackScroller.getScrollX()
+                    + "," + mStackScroller.getScrollY());
         }
 
         pw.print("  mInteractingWindows="); pw.println(mInteractingWindows);
@@ -2157,6 +2347,12 @@
         pw.println(windowStateToString(mStatusBarWindowState));
         pw.print("  mStatusBarMode=");
         pw.println(BarTransitions.modeToString(mStatusBarMode));
+        pw.print("  mZenMode=");
+        pw.println(Settings.Global.zenModeToString(mZenMode));
+        pw.print("  mUseHeadsUp=");
+        pw.println(mUseHeadsUp);
+        pw.print("  interrupting package: ");
+        pw.println(hunStateToString(mInterruptingNotificationEntry));
         dumpBarTransitions(pw, "mStatusBarView", mStatusBarView.getBarTransitions());
         if (mNavigationBarView != null) {
             pw.print("  mNavigationBarWindowState=");
@@ -2180,12 +2376,6 @@
             pw.print  ("      ");
             mNotificationPanel.dump(fd, pw, args);
         }
-        if (mSettingsPanel != null) {
-            pw.println("    mSettingsPanel=" +
-                mSettingsPanel + " params=" + mSettingsPanel.getLayoutParams().debug(""));
-            pw.print  ("      ");
-            mSettingsPanel.dump(fd, pw, args);
-        }
 
         if (DUMPTRUCK) {
             synchronized (mNotificationData) {
@@ -2231,6 +2421,12 @@
         mNetworkController.dump(fd, pw, args);
     }
 
+    private String hunStateToString(Entry entry) {
+        if (entry == null) return "null";
+        if (entry.notification == null) return "corrupt";
+        return entry.notification.getPackageName();
+    }
+
     private static void dumpBarTransitions(PrintWriter pw, String var, BarTransitions transitions) {
         pw.print("  "); pw.print(var); pw.print(".BarTransitions.mMode=");
         pw.println(BarTransitions.modeToString(transitions.getMode()));
@@ -2242,30 +2438,9 @@
     }
 
     private void addStatusBarWindow() {
-        // Put up the view
-        final int height = getStatusBarHeight();
-
-        // Now that the status bar window encompasses the sliding panel and its
-        // translucent backdrop, the entire thing is made TRANSLUCENT and is
-        // hardware-accelerated.
-        final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
-                ViewGroup.LayoutParams.MATCH_PARENT,
-                height,
-                WindowManager.LayoutParams.TYPE_STATUS_BAR,
-                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
-                    | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
-                    | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
-                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
-                PixelFormat.TRANSLUCENT);
-
-        lp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
-
-        lp.gravity = getStatusBarGravity();
-        lp.setTitle("StatusBar");
-        lp.packageName = mContext.getPackageName();
-
         makeStatusBarView();
-        mWindowManager.addView(mStatusBarWindow, lp);
+        mStatusBarWindowManager = new StatusBarWindowManager(mContext);
+        mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
     }
 
     void setNotificationIconVisibility(boolean visible, int anim) {
@@ -2303,17 +2478,10 @@
         lp.setMarginStart(mNotificationPanelMarginPx);
         mNotificationPanel.setLayoutParams(lp);
 
-        if (mSettingsPanel != null) {
-            lp = (FrameLayout.LayoutParams) mSettingsPanel.getLayoutParams();
-            lp.gravity = mSettingsPanelGravity;
-            lp.setMarginEnd(mNotificationPanelMarginPx);
-            mSettingsPanel.setLayoutParams(lp);
-        }
-
         if (ENABLE_HEADS_UP && mHeadsUpNotificationView != null) {
             mHeadsUpNotificationView.setMargin(mNotificationPanelMarginPx);
-            mPile.getLocationOnScreen(mPilePosition);
-            mHeadsUpVerticalOffset = mPilePosition[1] - mNaturalBarHeight;
+            mStackScroller.getLocationOnScreen(mStackScrollerPosition);
+            mHeadsUpVerticalOffset = mStackScrollerPosition[1] - mNaturalBarHeight;
         }
 
         updateCarrierLabelVisibility(false);
@@ -2332,77 +2500,21 @@
     private View.OnClickListener mClearButtonListener = new View.OnClickListener() {
         public void onClick(View v) {
             synchronized (mNotificationData) {
-                // animate-swipe all dismissable notifications, then animate the shade closed
-                int numChildren = mPile.getChildCount();
-
-                int scrollTop = mScrollView.getScrollY();
-                int scrollBottom = scrollTop + mScrollView.getHeight();
-                final ArrayList<View> snapshot = new ArrayList<View>(numChildren);
-                for (int i=0; i<numChildren; i++) {
-                    final View child = mPile.getChildAt(i);
-                    if (mPile.canChildBeDismissed(child) && child.getBottom() > scrollTop &&
-                            child.getTop() < scrollBottom) {
-                        snapshot.add(child);
-                    }
-                }
-                if (snapshot.isEmpty()) {
-                    animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
-                    return;
-                }
-                new Thread(new Runnable() {
+                mPostCollapseCleanup = new Runnable() {
                     @Override
                     public void run() {
-                        // Decrease the delay for every row we animate to give the sense of
-                        // accelerating the swipes
-                        final int ROW_DELAY_DECREMENT = 10;
-                        int currentDelay = 140;
-                        int totalDelay = 0;
-
-                        // Set the shade-animating state to avoid doing other work during
-                        // all of these animations. In particular, avoid layout and
-                        // redrawing when collapsing the shade.
-                        mPile.setViewRemoval(false);
-
-                        mPostCollapseCleanup = new Runnable() {
-                            @Override
-                            public void run() {
-                                if (DEBUG) {
-                                    Log.v(TAG, "running post-collapse cleanup");
-                                }
-                                try {
-                                    mPile.setViewRemoval(true);
-                                    mBarService.onClearAllNotifications();
-                                } catch (Exception ex) { }
-                            }
-                        };
-
-                        View sampleView = snapshot.get(0);
-                        int width = sampleView.getWidth();
-                        final int dir = sampleView.isLayoutRtl() ? -1 : +1;
-                        final int velocity = dir * width * 8; // 1000/8 = 125 ms duration
-                        for (final View _v : snapshot) {
-                            mHandler.postDelayed(new Runnable() {
-                                @Override
-                                public void run() {
-                                    mPile.dismissRowAnimated(_v, velocity);
-                                }
-                            }, totalDelay);
-                            currentDelay = Math.max(50, currentDelay - ROW_DELAY_DECREMENT);
-                            totalDelay += currentDelay;
+                        if (DEBUG) {
+                            Log.v(TAG, "running post-collapse cleanup");
                         }
-                        // Delay the collapse animation until after all swipe animations have
-                        // finished. Provide some buffer because there may be some extra delay
-                        // before actually starting each swipe animation. Ideally, we'd
-                        // synchronize the end of those animations with the start of the collaps
-                        // exactly.
-                        mHandler.postDelayed(new Runnable() {
-                            @Override
-                            public void run() {
-                                animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
-                            }
-                        }, totalDelay + 225);
+                        try {
+                            mBarService.onClearAllNotifications(mCurrentUserId);
+                        } catch (Exception ex) { }
                     }
-                }).start();
+                };
+
+                animateCollapsePanels(CommandQueue.FLAG_EXCLUDE_NONE);
+                return;
+                // TODO: Handle this better with notification stack scroller
             }
         }
     };
@@ -2421,7 +2533,7 @@
 
     private View.OnClickListener mSettingsButtonListener = new View.OnClickListener() {
         public void onClick(View v) {
-            if (mHasSettingsPanel) {
+            if (mHasQuickSettings) {
                 animateExpandSettingsPanel();
             } else {
                 startActivityDismissingKeyguard(
@@ -2459,17 +2571,17 @@
             }
             else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                 mScreenOn = false;
-                // no waiting!
-                makeExpandedInvisible();
                 notifyNavigationBarScreenOn(false);
                 notifyHeadsUpScreenOn(false);
                 finishBarAnimations();
+                stopNotificationLogging();
             }
             else if (Intent.ACTION_SCREEN_ON.equals(action)) {
                 mScreenOn = true;
                 // work around problem where mDisplay.getRotation() is not stable while screen is off (bug 7086018)
                 repositionNavigationBar();
                 notifyNavigationBarScreenOn(true);
+                startNotificationLoggingIfScreenOnAndVisible();
             }
             else if (ACTION_DEMO.equals(action)) {
                 Bundle bundle = intent.getExtras();
@@ -2549,7 +2661,8 @@
                 mBarService.onNotificationClear(
                         mInterruptingNotificationEntry.notification.getPackageName(),
                         mInterruptingNotificationEntry.notification.getTag(),
-                        mInterruptingNotificationEntry.notification.getId());
+                        mInterruptingNotificationEntry.notification.getId(),
+                        mInterruptingNotificationEntry.notification.getUserId());
             } catch (android.os.RemoteException ex) {
                 // oh well
             }
@@ -2620,11 +2733,6 @@
         if (mNotificationPanelGravity <= 0) {
             mNotificationPanelGravity = Gravity.START | Gravity.TOP;
         }
-        mSettingsPanelGravity = res.getInteger(R.integer.settings_panel_layout_gravity);
-        Log.d(TAG, "mSettingsPanelGravity = " + mSettingsPanelGravity);
-        if (mSettingsPanelGravity <= 0) {
-            mSettingsPanelGravity = Gravity.END | Gravity.TOP;
-        }
 
         mCarrierLabelHeight = res.getDimensionPixelSize(R.dimen.carrier_label_height);
         mNotificationHeaderHeight = res.getDimensionPixelSize(R.dimen.notification_panel_header_height);
@@ -2635,11 +2743,67 @@
         }
 
         mHeadsUpNotificationDecay = res.getInteger(R.integer.heads_up_notification_decay);
-        mRowHeight =  res.getDimensionPixelSize(R.dimen.notification_row_min_height);
+        mRowMinHeight =  res.getDimensionPixelSize(R.dimen.notification_min_height);
+        mRowMaxHeight =  res.getDimensionPixelSize(R.dimen.notification_max_height);
+
+        mKeyguardMaxNotificationCount = res.getInteger(R.integer.keyguard_max_notification_count);
 
         if (false) Log.v(TAG, "updateResources");
     }
 
+    // Visibility reporting
+
+    @Override
+    protected void visibilityChanged(boolean visible) {
+        mVisible = visible;
+        if (visible) {
+            startNotificationLoggingIfScreenOnAndVisible();
+        } else {
+            stopNotificationLogging();
+        }
+        super.visibilityChanged(visible);
+    }
+
+    private void stopNotificationLogging() {
+        // Report all notifications as invisible and turn down the
+        // reporter.
+        if (!mCurrentlyVisibleNotifications.isEmpty()) {
+            logNotificationVisibilityChanges(
+                    Collections.<String>emptyList(), mCurrentlyVisibleNotifications);
+            mCurrentlyVisibleNotifications.clear();
+        }
+        mHandler.removeCallbacks(mVisibilityReporter);
+        mStackScroller.setChildLocationsChangedListener(null);
+    }
+
+    private void startNotificationLoggingIfScreenOnAndVisible() {
+        if (mVisible && mScreenOn) {
+            mStackScroller.setChildLocationsChangedListener(mNotificationLocationsChangedListener);
+            // Some transitions like mScreenOn=false -> mScreenOn=true don't
+            // cause the scroller to emit child location events. Hence generate
+            // one ourselves to guarantee that we're reporting visible
+            // notifications.
+            // (Note that in cases where the scroller does emit events, this
+            // additional event doesn't break anything.)
+            mNotificationLocationsChangedListener.onChildLocationsChanged(mStackScroller);
+        }
+    }
+
+    private void logNotificationVisibilityChanges(
+            Collection<String> newlyVisible, Collection<String> noLongerVisible) {
+        if (newlyVisible.isEmpty() && noLongerVisible.isEmpty()) {
+            return;
+        }
+
+        String[] newlyVisibleAr = newlyVisible.toArray(new String[newlyVisible.size()]);
+        String[] noLongerVisibleAr = noLongerVisible.toArray(new String[noLongerVisible.size()]);
+        try {
+            mBarService.onNotificationVisibilityChanged(newlyVisibleAr, noLongerVisibleAr);
+        } catch (RemoteException e) {
+            // Ignore.
+        }
+    }
+
     //
     // tracing
     //
@@ -2651,7 +2815,7 @@
     void vibrate() {
         android.os.Vibrator vib = (android.os.Vibrator)mContext.getSystemService(
                 Context.VIBRATOR_SERVICE);
-        vib.vibrate(250);
+        vib.vibrate(250, AudioManager.STREAM_SYSTEM);
     }
 
     Runnable mStartTracing = new Runnable() {
@@ -2684,6 +2848,12 @@
                 || (mDisabled & StatusBarManager.DISABLE_SEARCH) != 0;
     }
 
+    public void startSettingsActivity(String action) {
+        if (mQS != null) {
+            mQS.startSettingsActivity(action);
+        }
+    }
+
     private static class FastColorDrawable extends Drawable {
         private final int mColor;
 
@@ -2723,9 +2893,11 @@
         super.destroy();
         if (mStatusBarWindow != null) {
             mWindowManager.removeViewImmediate(mStatusBarWindow);
+            mStatusBarWindow = null;
         }
         if (mNavigationBarView != null) {
             mWindowManager.removeViewImmediate(mNavigationBarView);
+            mNavigationBarView = null;
         }
         mContext.unregisterReceiver(mBroadcastReceiver);
     }
@@ -2766,6 +2938,15 @@
         if (mNetworkController != null && (modeChange || command.equals(COMMAND_NETWORK))) {
             mNetworkController.dispatchDemoCommand(command, args);
         }
+        if (modeChange || command.equals(COMMAND_NOTIFICATIONS)) {
+            View notifications = mStatusBarView == null ? null
+                    : mStatusBarView.findViewById(R.id.notification_icon_area);
+            if (notifications != null) {
+                String visible = args.getString("visible");
+                int vis = mDemoMode && "false".equals(visible) ? View.INVISIBLE : View.VISIBLE;
+                notifications.setVisibility(vis);
+            }
+        }
         if (command.equals(COMMAND_BARS)) {
             String mode = args.getString("mode");
             int barMode = "opaque".equals(mode) ? MODE_OPAQUE :
@@ -2791,4 +2972,350 @@
             ((DemoMode)v).dispatchDemoCommand(command, args);
         }
     }
+
+    /**
+     * @return The {@link StatusBarState} the status bar is in.
+     */
+    public int getBarState() {
+        return mState;
+    }
+
+    public void showKeyguard() {
+        setBarState(StatusBarState.KEYGUARD);
+        updateKeyguardState();
+        instantExpandNotificationsPanel();
+        mLeaveOpenOnKeyguardHide = false;
+    }
+
+    public void hideKeyguard() {
+        setBarState(StatusBarState.SHADE);
+        if (mLeaveOpenOnKeyguardHide) {
+            mLeaveOpenOnKeyguardHide = false;
+            mNotificationPanel.animateNextTopPaddingChange();
+        } else {
+            instantCollapseNotificationPanel();
+        }
+        updateKeyguardState();
+    }
+
+    private void updatePublicMode() {
+        setLockscreenPublicMode(mState == StatusBarState.KEYGUARD
+                && mStatusBarKeyguardViewManager.isSecure());
+    }
+
+    private void updateKeyguardState() {
+        if (mState == StatusBarState.KEYGUARD) {
+            if (isFlippedToSettings()) {
+                flipToNotifications(false /*animate*/);
+            }
+            mKeyguardStatusView.setVisibility(View.VISIBLE);
+            mKeyguardBottomArea.setVisibility(View.VISIBLE);
+            mKeyguardIndicationTextView.setVisibility(View.VISIBLE);
+            mKeyguardIndicationTextView.switchIndication(mKeyguardHotwordPhrase);
+            mKeyguardCarrierLabel.setVisibility(View.VISIBLE);
+            mNotificationPanelHeader.setVisibility(View.GONE);
+
+            mKeyguardFlipper.setVisibility(View.VISIBLE);
+            mSettingsContainer.setKeyguardShowing(true);
+        } else {
+            mKeyguardStatusView.setVisibility(View.GONE);
+            mKeyguardBottomArea.setVisibility(View.GONE);
+            mKeyguardIndicationTextView.setVisibility(View.GONE);
+            mKeyguardCarrierLabel.setVisibility(View.GONE);
+            mNotificationPanelHeader.setVisibility(View.VISIBLE);
+
+            mKeyguardFlipper.setVisibility(View.GONE);
+            mSettingsContainer.setKeyguardShowing(false);
+        }
+
+        updatePublicMode();
+        updateRowStates();
+        checkBarModes();
+        updateNotificationIcons();
+        updateCarrierLabelVisibility(false);
+    }
+
+    public void userActivity() {
+        if (mState == StatusBarState.KEYGUARD) {
+            mKeyguardViewMediatorCallback.userActivity();
+        }
+    }
+
+    public boolean onMenuPressed() {
+        return mState == StatusBarState.KEYGUARD && mStatusBarKeyguardViewManager.onMenuPressed();
+    }
+
+    public boolean onBackPressed() {
+        if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) {
+            return mStatusBarKeyguardViewManager.onBackPressed();
+        } else {
+            animateCollapsePanels();
+            return true;
+        }
+    }
+
+    private void showBouncer() {
+        if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) {
+            mStatusBarKeyguardViewManager.dismiss();
+        }
+    }
+
+    private void instantExpandNotificationsPanel() {
+
+        // Make our window larger and the panel visible.
+        makeExpandedVisible(true);
+        mNotificationPanel.setVisibility(View.VISIBLE);
+
+        // Wait for window manager to pickup the change, so we know the maximum height of the panel
+        // then.
+        mNotificationPanel.getViewTreeObserver().addOnGlobalLayoutListener(
+                new ViewTreeObserver.OnGlobalLayoutListener() {
+            @Override
+            public void onGlobalLayout() {
+                if (mStatusBarWindow.getHeight() != getStatusBarHeight()) {
+                    mNotificationPanel.getViewTreeObserver().removeOnGlobalLayoutListener(this);
+                    mNotificationPanel.setExpandedFraction(1);
+                }
+            }
+        });
+    }
+
+    private void instantCollapseNotificationPanel() {
+        mNotificationPanel.setExpandedFraction(0);
+    }
+
+    @Override
+    public void onActivated(View view) {
+        userActivity();
+        mKeyguardIndicationTextView.switchIndication(R.string.notification_tap_again);
+        super.onActivated(view);
+    }
+
+    /**
+     * @param state The {@link StatusBarState} to set.
+     */
+    public void setBarState(int state) {
+        mState = state;
+        mStatusBarWindowManager.setStatusBarState(state);
+    }
+
+    @Override
+    public void onReset(View view) {
+        super.onReset(view);
+        mKeyguardIndicationTextView.switchIndication(mKeyguardHotwordPhrase);
+    }
+
+    public void onTrackingStarted() {
+        if (mState == StatusBarState.KEYGUARD) {
+            mKeyguardIndicationTextView.switchIndication(R.string.keyguard_unlock);
+        }
+    }
+
+    public void onTrackingStopped() {
+        if (mState == StatusBarState.KEYGUARD) {
+            mKeyguardIndicationTextView.switchIndication(mKeyguardHotwordPhrase);
+        }
+    }
+
+    @Override
+    protected int getMaxKeyguardNotifications() {
+        return mKeyguardMaxNotificationCount;
+    }
+
+    public NavigationBarView getNavigationBarView() {
+        return mNavigationBarView;
+    }
+
+    // ---------------------- DragDownHelper.OnDragDownListener ------------------------------------
+
+    @Override
+    public void onDraggedDown(View startingChild) {
+        goToLockedShade(startingChild);
+    }
+
+    @Override
+    public void onReset() {
+        int n = mNotificationData.size();
+        for (int i = 0; i < n; i++) {
+            NotificationData.Entry entry = mNotificationData.get(i);
+            if (entry.row.getVisibility() != View.GONE) {
+                entry.row.setDimmed(true /* dimmed */, true /* fade */);
+            }
+        }
+        if (mKeyguardIconOverflowContainer.getVisibility() != View.GONE) {
+            mKeyguardIconOverflowContainer.setDimmed(true /* dimmed */, true /* fade */);
+        }
+    }
+
+    public void onThresholdReached() {
+        int n = mNotificationData.size();
+        for (int i = 0; i < n; i++) {
+            NotificationData.Entry entry = mNotificationData.get(i);
+            if (entry.row.getVisibility() != View.GONE) {
+                entry.row.setDimmed(false /* dimmed */, true /* fade */);
+            }
+        }
+        if (mKeyguardIconOverflowContainer.getVisibility() != View.GONE) {
+            mKeyguardIconOverflowContainer.setDimmed(false /* dimmed */, true /* fade */);
+        }
+    }
+
+    /**
+     * If secure with redaction: Show bouncer, go to unlocked shade.
+     *
+     * <p>If secure without redaction: Go to {@link StatusBarState#SHADE_LOCKED}.</p>
+     *
+     * <p>Otherwise go directly to unlocked shade.</p>
+     *
+     * @param expandView The view to expand after going to the shade.
+     */
+    public void goToLockedShade(View expandView) {
+        if (expandView instanceof ExpandableNotificationRow) {
+            ExpandableNotificationRow row = (ExpandableNotificationRow) expandView;
+            row.setUserExpanded(true);
+        }
+        if (isLockscreenPublicMode() && !userAllowsPrivateNotificationsInPublic(mCurrentUserId)) {
+            mLeaveOpenOnKeyguardHide = true;
+            showBouncer();
+        } else if (mStatusBarKeyguardViewManager.isSecure()) {
+            mNotificationPanel.animateNextTopPaddingChange();
+            setBarState(StatusBarState.SHADE_LOCKED);
+            updateKeyguardState();
+        } else {
+            mLeaveOpenOnKeyguardHide = true;
+            mStatusBarKeyguardViewManager.dismiss();
+        }
+    }
+
+    /**
+     * @return a ViewGroup that spans the entire panel which contains the quick settings
+     */
+    public ViewGroup getQuickSettingsOverlayParent() {
+        if (mHasQuickSettings) {
+            return mNotificationPanel;
+        } else {
+            return null;
+        }
+    }
+
+    public static boolean inBounds(View view, MotionEvent event, boolean orAbove) {
+        final int[] location = new int[2];
+        view.getLocationInWindow(location);
+        final int rx = (int) event.getRawX();
+        final int ry = (int) event.getRawY();
+        return rx >= location[0] && rx <= location[0] + view.getMeasuredWidth()
+                && (orAbove || ry >= location[1]) && ry <= location[1] + view.getMeasuredHeight();
+    }
+
+    private final class FlipperButton {
+        private final View mHolder;
+
+        private ImageView mSettingsButton, mNotificationButton;
+        private Animator mSettingsButtonAnim, mNotificationButtonAnim;
+
+        public FlipperButton(View holder) {
+            mHolder = holder;
+            mSettingsButton = (ImageView) holder.findViewById(R.id.settings_button);
+            if (mSettingsButton != null) {
+                mSettingsButton.setOnClickListener(mSettingsButtonListener);
+                if (mHasQuickSettings) {
+                    // the settings panel is hiding behind this button
+                    mSettingsButton.setImageResource(R.drawable.ic_notify_quicksettings);
+                    mSettingsButton.setVisibility(View.VISIBLE);
+                } else {
+                    // no settings panel, go straight to settings
+                    mSettingsButton.setVisibility(View.VISIBLE);
+                    mSettingsButton.setImageResource(R.drawable.ic_notify_settings);
+                }
+            }
+            mNotificationButton = (ImageView) holder.findViewById(R.id.notification_button);
+            if (mNotificationButton != null) {
+                mNotificationButton.setOnClickListener(mNotificationButtonListener);
+            }
+        }
+
+        public boolean inHolderBounds(MotionEvent event) {
+            return inBounds(mHolder, event, false);
+        }
+
+        public void provisionCheck(boolean provisioned) {
+            if (mSettingsButton != null) {
+                mSettingsButton.setEnabled(provisioned);
+            }
+        }
+
+        public void userSetup(boolean userSetup) {
+            if (mSettingsButton != null) {
+                mSettingsButton.setVisibility(userSetup ? View.VISIBLE : View.INVISIBLE);
+            }
+        }
+
+        public void reset() {
+            cancel();
+            mSettingsButton.setVisibility(View.VISIBLE);
+            mNotificationButton.setVisibility(View.GONE);
+        }
+
+        public void refreshLayout() {
+            if (mSettingsButton != null) {
+                // Force asset reloading
+                mSettingsButton.setImageDrawable(null);
+                mSettingsButton.setImageResource(R.drawable.ic_notify_quicksettings);
+            }
+
+            if (mNotificationButton != null) {
+                // Force asset reloading
+                mNotificationButton.setImageDrawable(null);
+                mNotificationButton.setImageResource(R.drawable.ic_notifications);
+            }
+        }
+
+        public void flipToSettings(boolean animate) {
+            mNotificationButton.setVisibility(View.VISIBLE);
+            if (animate) {
+                mSettingsButtonAnim = start(
+                    setVisibilityWhenDone(
+                        ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 0f)
+                            .setDuration(FLIP_DURATION_OUT),
+                        mStackScroller, View.INVISIBLE));
+                mNotificationButtonAnim = start(
+                    startDelay(FLIP_DURATION_OUT,
+                        ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 1f)
+                            .setDuration(FLIP_DURATION_IN)));
+            } else {
+                mSettingsButton.setAlpha(0f);
+                mSettingsButton.setVisibility(View.INVISIBLE);
+                mNotificationButton.setAlpha(1f);
+            }
+        }
+
+        public void flipToNotifications(boolean animate) {
+            mSettingsButton.setVisibility(View.VISIBLE);
+            if (animate) {
+                mNotificationButtonAnim = start(
+                    setVisibilityWhenDone(
+                        ObjectAnimator.ofFloat(mNotificationButton, View.ALPHA, 0f)
+                            .setDuration(FLIP_DURATION_OUT),
+                        mNotificationButton, View.INVISIBLE));
+
+                mSettingsButtonAnim = start(
+                    startDelay(FLIP_DURATION_OUT,
+                        ObjectAnimator.ofFloat(mSettingsButton, View.ALPHA, 1f)
+                            .setDuration(FLIP_DURATION_IN)));
+            } else {
+                mNotificationButton.setVisibility(View.INVISIBLE);
+                mNotificationButton.setAlpha(0f);
+                mSettingsButton.setAlpha(1f);
+            }
+        }
+
+        public void cancel() {
+            cancelAnim(mSettingsButtonAnim);
+            cancelAnim(mNotificationButtonAnim);
+        }
+
+        public void setVisibility(int vis) {
+            mHolder.setVisibility(vis);
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
index d0e9a99..10c1625 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@@ -19,7 +19,6 @@
 import android.app.ActivityManager;
 import android.content.Context;
 import android.content.res.Resources;
-import android.content.res.Resources.NotFoundException;
 import android.util.AttributeSet;
 import android.util.EventLog;
 import android.util.Log;
@@ -29,6 +28,7 @@
 
 import com.android.systemui.EventLogTags;
 import com.android.systemui.R;
+import com.android.systemui.statusbar.StatusBarState;
 
 public class PhoneStatusBarView extends PanelBar {
     private static final String TAG = "PhoneStatusBarView";
@@ -37,13 +37,11 @@
 
     PhoneStatusBar mBar;
     int mScrimColor;
-    float mSettingsPanelDragzoneFrac;
-    float mSettingsPanelDragzoneMin;
+    int mScrimColorKeyguard;
 
-    boolean mFullWidthNotifications;
     PanelView mFadingPanel = null;
     PanelView mLastFullyOpenedPanel = null;
-    PanelView mNotificationPanel, mSettingsPanel;
+    PanelView mNotificationPanel;
     private boolean mShouldFade;
     private final PhoneStatusBarTransitions mBarTransitions;
 
@@ -52,13 +50,7 @@
 
         Resources res = getContext().getResources();
         mScrimColor = res.getColor(R.color.notification_panel_scrim_color);
-        mSettingsPanelDragzoneMin = res.getDimension(R.dimen.settings_panel_dragzone_min);
-        try {
-            mSettingsPanelDragzoneFrac = res.getFraction(R.dimen.settings_panel_dragzone_fraction, 1, 1);
-        } catch (NotFoundException ex) {
-            mSettingsPanelDragzoneFrac = 0f;
-        }
-        mFullWidthNotifications = mSettingsPanelDragzoneFrac <= 0f;
+        mScrimColorKeyguard = res.getColor(R.color.notification_panel_scrim_color_keyguard);
         mBarTransitions = new PhoneStatusBarTransitions(this);
     }
 
@@ -70,15 +62,8 @@
         mBar = bar;
     }
 
-    public boolean hasFullWidthNotifications() {
-        return mFullWidthNotifications;
-    }
-
     @Override
     public void onAttachedToWindow() {
-        for (PanelView pv : mPanels) {
-            pv.setRubberbandingEnabled(!mFullWidthNotifications);
-        }
         mBarTransitions.init();
     }
 
@@ -87,10 +72,7 @@
         super.addPanel(pv);
         if (pv.getId() == R.id.notification_panel) {
             mNotificationPanel = pv;
-        } else if (pv.getId() == R.id.settings_panel){
-            mSettingsPanel = pv;
         }
-        pv.setRubberbandingEnabled(!mFullWidthNotifications);
     }
 
     @Override
@@ -115,40 +97,16 @@
 
     @Override
     public PanelView selectPanelForTouch(MotionEvent touch) {
-        final float x = touch.getX();
-        final boolean isLayoutRtl = isLayoutRtl();
-
-        if (mFullWidthNotifications) {
-            // No double swiping. If either panel is open, nothing else can be pulled down.
-            return ((mSettingsPanel == null ? 0 : mSettingsPanel.getExpandedHeight())
-                        + mNotificationPanel.getExpandedHeight() > 0)
-                    ? null
-                    : mNotificationPanel;
-        }
-
-        // We split the status bar into thirds: the left 2/3 are for notifications, and the
-        // right 1/3 for quick settings. If you pull the status bar down a second time you'll
-        // toggle panels no matter where you pull it down.
-
-        final float w = getMeasuredWidth();
-        float region = (w * mSettingsPanelDragzoneFrac);
-
-        if (DEBUG) {
-            Log.v(TAG, String.format(
-                "w=%.1f frac=%.3f region=%.1f min=%.1f x=%.1f w-x=%.1f",
-                w, mSettingsPanelDragzoneFrac, region, mSettingsPanelDragzoneMin, x, (w-x)));
-        }
-
-        if (region < mSettingsPanelDragzoneMin) region = mSettingsPanelDragzoneMin;
-
-        final boolean showSettings = isLayoutRtl ? (x < region) : (w - region < x);
-        return showSettings ? mSettingsPanel : mNotificationPanel;
+        // No double swiping. If either panel is open, nothing else can be pulled down.
+        return mNotificationPanel.getExpandedHeight() > 0
+                ? null
+                : mNotificationPanel;
     }
 
     @Override
     public void onPanelPeeked() {
         super.onPanelPeeked();
-        mBar.makeExpandedVisible();
+        mBar.makeExpandedVisible(false);
     }
 
     @Override
@@ -170,7 +128,7 @@
         mBar.makeExpandedInvisibleSoon();
         mFadingPanel = null;
         mLastFullyOpenedPanel = null;
-        if (mScrimColor != 0 && ActivityManager.isHighEndGfx()) {
+        if (mScrimColor != 0 && ActivityManager.isHighEndGfx() && mBar.mStatusBarWindow != null) {
             mBar.mStatusBarWindow.setBackgroundColor(0);
         }
     }
@@ -202,6 +160,18 @@
     }
 
     @Override
+    public void onTrackingStarted(PanelView panel) {
+        super.onTrackingStarted(panel);
+        mBar.onTrackingStarted();
+    }
+
+    @Override
+    public void onTrackingStopped(PanelView panel) {
+        super.onTrackingStopped(panel);
+        mBar.onTrackingStopped();
+    }
+
+    @Override
     public boolean onInterceptTouchEvent(MotionEvent event) {
         return mBar.interceptTouchEvent(event) || super.onInterceptTouchEvent(event);
     }
@@ -214,8 +184,13 @@
             Log.v(TAG, "panelExpansionChanged: f=" + frac);
         }
 
-        if (panel == mFadingPanel && mScrimColor != 0 && ActivityManager.isHighEndGfx()) {
+        if (panel == mFadingPanel && mScrimColor != 0 && ActivityManager.isHighEndGfx()
+                && mBar.mStatusBarWindow != null) {
             if (mShouldFade) {
+                int scrimColor = (mBar.getBarState() == StatusBarState.KEYGUARD
+                        || mBar.getBarState() == StatusBarState.SHADE_LOCKED)
+                        ? mScrimColorKeyguard
+                        : mScrimColor;
                 frac = mPanelExpandedFractionSum; // don't judge me
                 // let's start this 20% of the way down the screen
                 frac = frac * 1.2f - 0.2f;
@@ -225,7 +200,7 @@
                     // woo, special effects
                     final float k = (float)(1f-0.5f*(1f-Math.cos(3.14159f * Math.pow(1f-frac, 2f))));
                     // attenuate background color alpha by k
-                    final int color = (int) ((mScrimColor >>> 24) * k) << 24 | (mScrimColor & 0xFFFFFF);
+                    final int color = (int) ((scrimColor >>> 24) * k) << 24 | (scrimColor & 0xFFFFFF);
                     mBar.mStatusBarWindow.setBackgroundColor(color);
                 }
             }
@@ -248,5 +223,6 @@
         mBar.animateHeadsUp(mNotificationPanel == panel, mPanelExpandedFractionSum);
 
         mBar.updateCarrierLabelVisibility(false);
+        mBar.userActivity();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
index e7b8fa1..f3ebf1b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettings.java
@@ -25,6 +25,7 @@
 import android.bluetooth.BluetoothAdapter;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
@@ -32,6 +33,7 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.UserInfo;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.Cursor;
 import android.graphics.Bitmap;
@@ -41,6 +43,7 @@
 import android.media.MediaRouter;
 import android.net.wifi.WifiManager;
 import android.os.AsyncTask;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.RemoteException;
 import android.os.UserHandle;
@@ -51,18 +54,24 @@
 import android.provider.ContactsContract.Profile;
 import android.provider.Settings;
 import android.security.KeyChain;
+import android.text.TextUtils.TruncateAt;
 import android.util.Log;
 import android.util.Pair;
 import android.view.LayoutInflater;
+import android.view.Menu;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.Window;
 import android.view.WindowManager;
 import android.view.WindowManagerGlobal;
+import android.view.WindowManager.LayoutParams;
+import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.android.internal.app.MediaRouteDialogPresenter;
 import com.android.systemui.R;
+import com.android.systemui.settings.UserSwitcherHostView;
 import com.android.systemui.statusbar.phone.QuickSettingsModel.ActivityState;
 import com.android.systemui.statusbar.phone.QuickSettingsModel.BluetoothState;
 import com.android.systemui.statusbar.phone.QuickSettingsModel.RSSIState;
@@ -84,6 +93,7 @@
     static final boolean DEBUG_GONE_TILES = false;
     private static final String TAG = "QuickSettings";
     public static final boolean SHOW_IME_TILE = false;
+    public static final boolean SHOW_ACCESSIBILITY_TILES = true;
 
     public static final boolean LONG_PRESS_TOGGLES = true;
 
@@ -174,7 +184,9 @@
         bluetoothController.addStateChangedCallback(mModel);
         batteryController.addStateChangedCallback(mModel);
         locationController.addSettingsChangedCallback(mModel);
-        rotationLockController.addRotationLockControllerCallback(mModel);
+        if (rotationLockController != null) {
+            rotationLockController.addRotationLockControllerCallback(mModel);
+        }
     }
 
     private void queryForSslCaCerts() {
@@ -268,13 +280,14 @@
         addUserTiles(mContainerView, inflater);
         addSystemTiles(mContainerView, inflater);
         addTemporaryTiles(mContainerView, inflater);
+        addAccessibilityTiles(mContainerView);
 
         queryForUserInformation();
         queryForSslCaCerts();
         mTilesSetUp = true;
     }
 
-    private void startSettingsActivity(String action) {
+    public void startSettingsActivity(String action) {
         Intent intent = new Intent(action);
         startSettingsActivity(intent);
     }
@@ -299,30 +312,56 @@
         collapsePanels();
     }
 
-    private void addUserTiles(ViewGroup parent, LayoutInflater inflater) {
+    private void addAccessibilityTiles(ViewGroup parent) {
+        if (!DEBUG_GONE_TILES && !SHOW_ACCESSIBILITY_TILES) return;
+
+        // Color inversion tile
+        final SystemSettingTile inversionTile = new SystemSettingTile(mContext);
+        inversionTile.setUri(Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED,
+                SystemSettingTile.TYPE_SECURE);
+        inversionTile.setFragment("Settings$AccessibilityInversionSettingsActivity");
+        mModel.addInversionTile(inversionTile, inversionTile.getRefreshCallback());
+        parent.addView(inversionTile);
+
+        // Contrast enhancement tile
+        final SystemSettingTile contrastTile = new SystemSettingTile(mContext);
+        contrastTile.setUri(Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED,
+                SystemSettingTile.TYPE_SECURE);
+        contrastTile.setFragment("Settings$AccessibilityContrastSettingsActivity");
+        mModel.addContrastTile(contrastTile, contrastTile.getRefreshCallback());
+        parent.addView(contrastTile);
+
+        // Color space adjustment tile
+        final SystemSettingTile colorSpaceTile = new SystemSettingTile(mContext);
+        colorSpaceTile.setUri(Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED,
+                SystemSettingTile.TYPE_SECURE);
+        colorSpaceTile.setFragment("Settings$AccessibilityDaltonizerSettingsActivity");
+        mModel.addColorSpaceTile(colorSpaceTile, colorSpaceTile.getRefreshCallback());
+        parent.addView(colorSpaceTile);
+    }
+
+    private void addUserTiles(final ViewGroup parent, final LayoutInflater inflater) {
         QuickSettingsTileView userTile = (QuickSettingsTileView)
                 inflater.inflate(R.layout.quick_settings_tile, parent, false);
         userTile.setContent(R.layout.quick_settings_tile_user, inflater);
         userTile.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                collapsePanels();
                 final UserManager um = UserManager.get(mContext);
-                if (um.getUsers(true).size() > 1) {
-                    // Since keyguard and systemui were merged into the same process to save
-                    // memory, they share the same Looper and graphics context.  As a result,
-                    // there's no way to allow concurrent animation while keyguard inflates.
-                    // The workaround is to add a slight delay to allow the animation to finish.
-                    mHandler.postDelayed(new Runnable() {
+                if (um.isUserSwitcherEnabled()) {
+                    final ViewGroup switcherParent = getService().getQuickSettingsOverlayParent();
+                    final UserSwitcherHostView switcher = (UserSwitcherHostView) inflater.inflate(
+                            R.layout.user_switcher_host, switcherParent, false);
+                    switcher.setFinishRunnable(new Runnable() {
+                        @Override
                         public void run() {
-                            try {
-                                WindowManagerGlobal.getWindowManagerService().lockNow(null);
-                            } catch (RemoteException e) {
-                                Log.e(TAG, "Couldn't show user switcher", e);
-                            }
+                            switcherParent.removeView(switcher);
                         }
-                    }, 400); // TODO: ideally this would be tied to the collapse of the panel
+                    });
+                    switcher.refreshUsers();
+                    switcherParent.addView(switcher);
                 } else {
+                    collapsePanels();
                     Intent intent = ContactsContract.QuickContact.composeQuickContactsIntent(
                             mContext, v, ContactsContract.Profile.CONTENT_URI,
                             ContactsContract.QuickContact.MODE_LARGE, null);
@@ -472,8 +511,7 @@
         }
 
         // Rotation Lock
-        if (mContext.getResources().getBoolean(R.bool.quick_settings_show_rotation_lock)
-                || DEBUG_GONE_TILES) {
+        if (mRotationLockController != null) {
             final QuickSettingsBasicTile rotationLockTile
                     = new QuickSettingsBasicTile(mContext);
             rotationLockTile.setOnClickListener(new View.OnClickListener() {
@@ -536,24 +574,6 @@
         });
         parent.addView(batteryTile);
 
-        // Airplane Mode
-        final QuickSettingsBasicTile airplaneTile
-                = new QuickSettingsBasicTile(mContext);
-        mModel.addAirplaneModeTile(airplaneTile, new QuickSettingsModel.RefreshCallback() {
-            @Override
-            public void refreshView(QuickSettingsTileView unused, State state) {
-                airplaneTile.setImageResource(state.iconId);
-
-                String airplaneState = mContext.getString(
-                        (state.enabled) ? R.string.accessibility_desc_on
-                                : R.string.accessibility_desc_off);
-                airplaneTile.setContentDescription(
-                        mContext.getString(R.string.accessibility_quick_settings_airplane, airplaneState));
-                airplaneTile.setText(state.label);
-            }
-        });
-        parent.addView(airplaneTile);
-
         // Bluetooth
         if (mModel.deviceSupportsBluetooth()
                 || DEBUG_GONE_TILES) {
@@ -647,6 +667,50 @@
             }
         });
         parent.addView(locationTile);
+
+        // Airplane Mode
+        final QuickSettingsBasicTile airplaneTile
+                = new QuickSettingsBasicTile(mContext);
+        mModel.addAirplaneModeTile(airplaneTile, new QuickSettingsModel.RefreshCallback() {
+            @Override
+            public void refreshView(QuickSettingsTileView unused, State state) {
+                airplaneTile.setImageResource(state.iconId);
+
+                String airplaneState = mContext.getString(
+                        (state.enabled) ? R.string.accessibility_desc_on
+                                : R.string.accessibility_desc_off);
+                airplaneTile.setContentDescription(
+                        mContext.getString(R.string.accessibility_quick_settings_airplane,
+                                airplaneState));
+                airplaneTile.setText(state.label);
+            }
+        });
+        parent.addView(airplaneTile);
+
+        // Zen Mode
+        final QuickSettingsBasicTile zenModeTile = new QuickSettingsBasicTile(mContext);
+        zenModeTile.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                showZenModeDialog();
+            }
+        });
+        mModel.addZenModeTile(zenModeTile, new QuickSettingsModel.RefreshCallback() {
+            @Override
+            public void refreshView(QuickSettingsTileView unused, State state) {
+                zenModeTile.setImageResource(state.iconId);
+                // TODO cut new assets
+                zenModeTile.getImageView().setAlpha(state.enabled ? 1 : .2f);
+                zenModeTile.getImageView().setScaleX(1.5f);
+                zenModeTile.getImageView().setScaleY(1.5f);
+                // for landscape version
+                zenModeTile.getTextView().setMaxLines(2);
+                zenModeTile.getTextView().setEllipsize(TruncateAt.END);
+                // TODO content description
+                zenModeTile.setText(state.label);
+            }
+        });
+        parent.addView(zenModeTile);
     }
 
     private void addTemporaryTiles(final ViewGroup parent, final LayoutInflater inflater) {
@@ -832,6 +896,44 @@
         dialog.show();
     }
 
+    private void showZenModeDialog() {
+        final Dialog d = new Dialog(mContext);
+        d.requestWindowFeature(Window.FEATURE_NO_TITLE);
+        d.setCancelable(true);
+        d.setCanceledOnTouchOutside(true);
+        final ZenModeView v = new ZenModeView(mContext) {
+            @Override
+            protected void onConfigurationChanged(Configuration newConfig) {
+                super.onConfigurationChanged(newConfig);
+                WindowManager.LayoutParams lp = d.getWindow().getAttributes();
+                lp.width = mContext.getResources()
+                        .getDimensionPixelSize(R.dimen.zen_mode_dialog_width);
+                d.getWindow().setAttributes(lp);
+            }
+        };
+        v.setAutoActivate(true);
+        v.setAdapter(new ZenModeViewAdapter(mContext) {
+            @Override
+            public void configure() {
+                if (mStatusBarService != null) {
+                    mStatusBarService.startSettingsActivity(Settings.ACTION_ZEN_MODE_SETTINGS);
+                }
+                d.dismiss();
+            }
+            @Override
+            public void close() {
+                d.dismiss();
+            }
+        });
+        d.setContentView(v);
+        d.create();
+        d.getWindow().setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY);
+        WindowManager.LayoutParams lp = d.getWindow().getAttributes();
+        lp.width = mContext.getResources().getDimensionPixelSize(R.dimen.zen_mode_dialog_width);
+        d.getWindow().setAttributes(lp);
+        d.show();
+    }
+
     private void applyBluetoothStatus() {
         mModel.onBluetoothStateChange(mBluetoothState);
     }
@@ -918,4 +1020,108 @@
             }
         }
     }
+
+    /**
+     * Quick Setting tile that represents a secure setting. This type of tile
+     * can toggle a URI within Settings.Secure on click and launch a Settings
+     * fragment on long-click.
+     */
+    public class SystemSettingTile extends QuickSettingsBasicTile {
+        private static final int TYPE_GLOBAL = 0;
+        private static final int TYPE_SECURE = 1;
+        private static final int TYPE_SYSTEM = 2;
+
+        private final QuickSettingsModel.BasicRefreshCallback mRefreshCallback;
+
+        private String mFragment;
+        private String mName;
+        private int mType;
+
+        public SystemSettingTile(Context context) {
+            super(context);
+
+            mRefreshCallback = new QuickSettingsModel.BasicRefreshCallback(this);
+            mRefreshCallback.setShowWhenEnabled(true);
+        }
+
+        @Override
+        public boolean performLongClick() {
+            if (mFragment != null) {
+                collapsePanels();
+
+                final Intent intent = new Intent();
+                intent.setComponent(new ComponentName(
+                        "com.android.settings", "com.android.settings." + mFragment));
+                startSettingsActivity(intent);
+                return true;
+            }
+            return false;
+        }
+
+        @Override
+        public boolean performClick() {
+            if (mName != null) {
+                collapsePanels();
+
+                final ContentResolver cr = mContext.getContentResolver();
+                switch (mType) {
+                    case TYPE_GLOBAL: {
+                        final boolean enable = Settings.Global.getInt(cr, mName, 0) == 0;
+                        Settings.Global.putInt(cr, mName, enable ? 1 : 0);
+                    } break;
+                    case TYPE_SECURE: {
+                        final boolean enable = Settings.Secure.getIntForUser(
+                                cr, mName, 0, UserHandle.USER_CURRENT) == 0;
+                        Settings.Secure.putIntForUser(
+                                cr, mName, enable ? 1 : 0, UserHandle.USER_CURRENT);
+                    } break;
+                    case TYPE_SYSTEM: {
+                        final boolean enable = Settings.System.getIntForUser(
+                                cr, mName, 0, UserHandle.USER_CURRENT) == 0;
+                        Settings.System.putIntForUser(
+                                cr, mName, enable ? 1 : 0, UserHandle.USER_CURRENT);
+                    } break;
+                }
+                return true;
+            }
+            return false;
+        }
+
+        /**
+         * Specifies the fragment within the com.android.settings package to
+         * launch when this tile is long-clicked.
+         *
+         * @param fragment a fragment name within the com.android.settings
+         *            package
+         */
+        public void setFragment(String fragment) {
+            mFragment = fragment;
+            setLongClickable(fragment != null);
+        }
+
+        /**
+         * Specifies the setting name and type to toggle when this tile is
+         * clicked.
+         *
+         * @param name a setting name
+         * @param type the type of setting, one of:
+         *            <ul>
+         *            <li>{@link #TYPE_GLOBAL}
+         *            <li>{@link #TYPE_SECURE}
+         *            <li>{@link #TYPE_SYSTEM}
+         *            </ul>
+         */
+        public void setUri(String name, int type) {
+            mName = name;
+            mType = type;
+            setClickable(mName != null);
+        }
+
+        /**
+         * @return the refresh callback for this tile
+         */
+        public QuickSettingsModel.BasicRefreshCallback getRefreshCallback() {
+            return mRefreshCallback;
+        }
+    }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java
index 17ee017..c44cb0c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsContainerView.java
@@ -19,7 +19,13 @@
 import android.animation.LayoutTransition;
 import android.content.Context;
 import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Rect;
+import android.graphics.Typeface;
 import android.util.AttributeSet;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
@@ -31,30 +37,59 @@
  */
 class QuickSettingsContainerView extends FrameLayout {
 
+    private static boolean sShowScrim = true;
+
+    private final Context mContext;
+
     // The number of columns in the QuickSettings grid
     private int mNumColumns;
 
+    private boolean mKeyguardShowing;
+    private int mMaxRows;
+    private int mMaxRowsOnKeyguard;
+
     // The gap between tiles in the QuickSettings grid
     private float mCellGap;
 
+    private ScrimView mScrim;
+
     public QuickSettingsContainerView(Context context, AttributeSet attrs) {
         super(context, attrs);
-
+        mContext = context;
         updateResources();
     }
 
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-
+        if (sShowScrim) {
+            mScrim = new ScrimView(mContext);
+            addView(mScrim);
+        }
         // TODO: Setup the layout transitions
         LayoutTransition transitions = getLayoutTransition();
     }
 
+    @Override
+    public boolean onTouchEvent(MotionEvent event) {
+        if (mScrim != null) {
+            sShowScrim = false;
+            removeView(mScrim);
+        }
+        return super.onTouchEvent(event);
+    }
+
     void updateResources() {
         Resources r = getContext().getResources();
         mCellGap = r.getDimension(R.dimen.quick_settings_cell_gap);
         mNumColumns = r.getInteger(R.integer.quick_settings_num_columns);
+        mMaxRows = r.getInteger(R.integer.quick_settings_max_rows);
+        mMaxRowsOnKeyguard = r.getInteger(R.integer.quick_settings_max_rows_keyguard);
+        requestLayout();
+    }
+
+    void setKeyguardShowing(boolean showing) {
+        mKeyguardShowing = showing;
         requestLayout();
     }
 
@@ -71,10 +106,18 @@
         final int N = getChildCount();
         int cellHeight = 0;
         int cursor = 0;
+        int maxRows = mKeyguardShowing ? mMaxRowsOnKeyguard : mMaxRows;
+
         for (int i = 0; i < N; ++i) {
+            if (getChildAt(i).equals(mScrim)) {
+                continue;
+            }
             // Update the child's width
             QuickSettingsTileView v = (QuickSettingsTileView) getChildAt(i);
             if (v.getVisibility() != View.GONE) {
+                int row = (int) (cursor / mNumColumns);
+                if (row >= maxRows) continue;
+
                 ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
                 int colSpan = v.getColumnSpan();
                 lp.width = (int) ((colSpan * cellWidth) + (colSpan - 1) * mCellGap);
@@ -102,6 +145,9 @@
 
     @Override
     protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+        if (mScrim != null) {
+            mScrim.bringToFront();
+        }
         final int N = getChildCount();
         final boolean isLayoutRtl = isLayoutRtl();
         final int width = getWidth();
@@ -109,8 +155,18 @@
         int x = getPaddingStart();
         int y = getPaddingTop();
         int cursor = 0;
+        int maxRows = mKeyguardShowing ? mMaxRowsOnKeyguard : mMaxRows;
 
         for (int i = 0; i < N; ++i) {
+            if (getChildAt(i).equals(mScrim)) {
+                int w = right - left - getPaddingLeft() - getPaddingRight();
+                int h = bottom - top - getPaddingTop() - getPaddingBottom();
+                mScrim.measure(
+                        MeasureSpec.makeMeasureSpec(w, MeasureSpec.EXACTLY),
+                        MeasureSpec.makeMeasureSpec(h, MeasureSpec.EXACTLY));
+                mScrim.layout(getPaddingLeft(), getPaddingTop(), right, bottom);
+                continue;
+            }
             QuickSettingsTileView child = (QuickSettingsTileView) getChildAt(i);
             ViewGroup.LayoutParams lp = child.getLayoutParams();
             if (child.getVisibility() != GONE) {
@@ -121,6 +177,7 @@
                 final int childHeight = lp.height;
 
                 int row = (int) (cursor / mNumColumns);
+                if (row >= maxRows) continue;
 
                 // Push the item to the next row if it can't fit on this one
                 if ((col + colSpan) > mNumColumns) {
@@ -150,4 +207,89 @@
             }
         }
     }
+
+    private static final class ScrimView extends View {
+        private static final int SCRIM = 0x4f000000;
+        private static final int COLOR = 0xaf4285f4;
+
+        private final Paint mLinePaint;
+        private final int mStrokeWidth;
+        private final Rect mTmp = new Rect();
+        private final Paint mTextPaint;
+        private final int mTextSize;
+
+        public ScrimView(Context context) {
+            super(context);
+            setFocusable(false);
+            final Resources res = context.getResources();
+            mStrokeWidth = res.getDimensionPixelSize(R.dimen.quick_settings_tmp_scrim_stroke_width);
+            mTextSize = res.getDimensionPixelSize(R.dimen.quick_settings_tmp_scrim_text_size);
+
+            mLinePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+            mLinePaint.setColor(COLOR);
+            mLinePaint.setStrokeWidth(mStrokeWidth);
+            mLinePaint.setStrokeJoin(Paint.Join.ROUND);
+            mLinePaint.setStrokeCap(Paint.Cap.ROUND);
+            mLinePaint.setStyle(Paint.Style.STROKE);
+
+            mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+            mTextPaint.setColor(COLOR);
+            mTextPaint.setTextSize(mTextSize);
+            mTextPaint.setTypeface(Typeface.create("sans-serif-condensed", Typeface.BOLD));
+        }
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            final int w = getMeasuredWidth();
+            final int h = getMeasuredHeight();
+            final int f = mStrokeWidth * 3 / 4;
+
+            canvas.drawColor(SCRIM);
+            canvas.drawPath(line(f, h / 2, w - f, h / 2), mLinePaint);
+            canvas.drawPath(line(w / 2, f, w / 2, h - f), mLinePaint);
+
+            final int s = mStrokeWidth;
+            mTextPaint.setTextAlign(Paint.Align.RIGHT);
+            canvas.drawText("FUTURE", w / 2 - s, h / 2 - s, mTextPaint);
+            mTextPaint.setTextAlign(Paint.Align.LEFT);
+            canvas.drawText("SITE OF", w / 2 + s, h / 2 - s , mTextPaint);
+            mTextPaint.setTextAlign(Paint.Align.RIGHT);
+            drawUnder(canvas, "QUANTUM", w / 2 - s, h / 2 + s);
+            mTextPaint.setTextAlign(Paint.Align.LEFT);
+            drawUnder(canvas, "SETTINGS", w / 2 + s, h / 2 + s);
+        }
+
+        private void drawUnder(Canvas c, String text, float x, float y) {
+            if (mTmp.isEmpty()) {
+                mTextPaint.getTextBounds(text, 0, text.length(), mTmp);
+            }
+            c.drawText(text, x, y + mTmp.height() * .85f, mTextPaint);
+        }
+
+        private Path line(float x1, float y1, float x2, float y2) {
+            final int a = mStrokeWidth * 2;
+            final Path p = new Path();
+            p.moveTo(x1, y1);
+            p.lineTo(x2, y2);
+            if (y1 == y2) {
+                p.moveTo(x1 + a, y1 + a);
+                p.lineTo(x1, y1);
+                p.lineTo(x1 + a, y1 - a);
+
+                p.moveTo(x2 - a, y2 - a);
+                p.lineTo(x2, y2);
+                p.lineTo(x2 - a, y2 + a);
+            }
+            if (x1 == x2) {
+                p.moveTo(x1 - a, y1 + a);
+                p.lineTo(x1, y1);
+                p.lineTo(x1 + a, y1 + a);
+
+                p.moveTo(x2 - a, y2 - a);
+                p.lineTo(x2, y2);
+                p.lineTo(x2 + a, y2 - a);
+            }
+            return p;
+        }
+    }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
index 42201c5..e1ef83a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsModel.java
@@ -24,6 +24,7 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
+import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.ContentObserver;
 import android.graphics.drawable.Drawable;
@@ -37,6 +38,7 @@
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.View;
+import android.view.WindowManager;
 import android.view.inputmethod.InputMethodInfo;
 import android.view.inputmethod.InputMethodManager;
 import android.view.inputmethod.InputMethodSubtype;
@@ -91,6 +93,19 @@
     static class BrightnessState extends State {
         boolean autoBrightness;
     }
+    static class InversionState extends State {
+        boolean toggled;
+        int type;
+    }
+    static class ContrastState extends State {
+        boolean toggled;
+        float contrast;
+        float brightness;
+    }
+    static class ColorSpaceState extends State {
+        boolean toggled;
+        int type;
+    }
     public static class BluetoothState extends State {
         boolean connected = false;
         String stateContentDescription;
@@ -98,6 +113,9 @@
     public static class RotationLockState extends State {
         boolean visible = false;
     }
+    public static class ZenModeState extends State {
+        int zenMode = Settings.Global.ZEN_MODE_OFF;
+    }
 
     /** The callback to update a given tile. */
     interface RefreshCallback {
@@ -199,6 +217,106 @@
         }
     }
 
+    /** ContentObserver to watch display inversion */
+    private class DisplayInversionObserver extends ContentObserver {
+        public DisplayInversionObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            onInversionChanged();
+        }
+
+        public void startObserving() {
+            final ContentResolver cr = mContext.getContentResolver();
+            cr.unregisterContentObserver(this);
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED),
+                    false, this, mUserTracker.getCurrentUserId());
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_QUICK_SETTING_ENABLED),
+                    false, this, mUserTracker.getCurrentUserId());
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION),
+                    false, this, mUserTracker.getCurrentUserId());
+        }
+    }
+
+    /** ContentObserver to watch display contrast */
+    private class DisplayContrastObserver extends ContentObserver {
+        public DisplayContrastObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            onContrastChanged();
+        }
+
+        public void startObserving() {
+            final ContentResolver cr = mContext.getContentResolver();
+            cr.unregisterContentObserver(this);
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED),
+                    false, this, mUserTracker.getCurrentUserId());
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_QUICK_SETTING_ENABLED),
+                    false, this, mUserTracker.getCurrentUserId());
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST),
+                    false, this, mUserTracker.getCurrentUserId());
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS),
+                    false, this, mUserTracker.getCurrentUserId());
+        }
+    }
+
+    /** ContentObserver to watch display color space adjustment */
+    private class DisplayColorSpaceObserver extends ContentObserver {
+        public DisplayColorSpaceObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            onColorSpaceChanged();
+        }
+
+        public void startObserving() {
+            final ContentResolver cr = mContext.getContentResolver();
+            cr.unregisterContentObserver(this);
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED),
+                    false, this, mUserTracker.getCurrentUserId());
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_QUICK_SETTING_ENABLED),
+                    false, this, mUserTracker.getCurrentUserId());
+            cr.registerContentObserver(Settings.Secure.getUriFor(
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER),
+                    false, this, mUserTracker.getCurrentUserId());
+        }
+    }
+
+    /** ContentObserver to watch display color space adjustment */
+    private class ZenModeObserver extends ContentObserver {
+        public ZenModeObserver(Handler handler) {
+            super(handler);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            onZenModeChanged();
+        }
+
+        public void startObserving() {
+            final ContentResolver cr = mContext.getContentResolver();
+            cr.unregisterContentObserver(this);
+            cr.registerContentObserver(
+                    Settings.Global.getUriFor(Settings.Global.ZEN_MODE), false, this);
+        }
+    }
+
     /** Callback for changes to remote display routes. */
     private class RemoteDisplayRouteCallback extends MediaRouter.SimpleCallback {
         @Override
@@ -229,6 +347,10 @@
     private final NextAlarmObserver mNextAlarmObserver;
     private final BugreportObserver mBugreportObserver;
     private final BrightnessObserver mBrightnessObserver;
+    private final DisplayInversionObserver mInversionObserver;
+    private final DisplayContrastObserver mContrastObserver;
+    private final DisplayColorSpaceObserver mColorSpaceObserver;
+    private final ZenModeObserver mZenModeObserver;
 
     private final MediaRouter mMediaRouter;
     private final RemoteDisplayRouteCallback mRemoteDisplayRouteCallback;
@@ -251,6 +373,10 @@
     private RefreshCallback mAirplaneModeCallback;
     private State mAirplaneModeState = new State();
 
+    private QuickSettingsTileView mZenModeTile;
+    private RefreshCallback mZenModeCallback;
+    private ZenModeState mZenModeState = new ZenModeState();
+
     private QuickSettingsTileView mWifiTile;
     private RefreshCallback mWifiCallback;
     private WifiState mWifiState = new WifiState();
@@ -287,6 +413,18 @@
     private RefreshCallback mBrightnessCallback;
     private BrightnessState mBrightnessState = new BrightnessState();
 
+    private QuickSettingsTileView mInversionTile;
+    private RefreshCallback mInversionCallback;
+    private InversionState mInversionState = new InversionState();
+
+    private QuickSettingsTileView mContrastTile;
+    private RefreshCallback mContrastCallback;
+    private ContrastState mContrastState = new ContrastState();
+
+    private QuickSettingsTileView mColorSpaceTile;
+    private RefreshCallback mColorSpaceCallback;
+    private ColorSpaceState mColorSpaceState = new ColorSpaceState();
+
     private QuickSettingsTileView mBugreportTile;
     private RefreshCallback mBugreportCallback;
     private State mBugreportState = new State();
@@ -300,6 +438,7 @@
     private State mSslCaCertWarningState = new State();
 
     private RotationLockController mRotationLockController;
+    private int mRotationLockedLabel;
 
     public QuickSettingsModel(Context context) {
         mContext = context;
@@ -308,8 +447,14 @@
             @Override
             public void onUserSwitched(int newUserId) {
                 mBrightnessObserver.startObserving();
+                mInversionObserver.startObserving();
+                mContrastObserver.startObserving();
+                mColorSpaceObserver.startObserving();
                 refreshRotationLockTile();
                 onBrightnessLevelChanged();
+                onInversionChanged();
+                onContrastChanged();
+                onColorSpaceChanged();
                 onNextAlarmChanged();
                 onBugreportChanged();
                 rebindMediaRouterAsCurrentUser();
@@ -322,6 +467,14 @@
         mBugreportObserver.startObserving();
         mBrightnessObserver = new BrightnessObserver(mHandler);
         mBrightnessObserver.startObserving();
+        mInversionObserver = new DisplayInversionObserver(mHandler);
+        mInversionObserver.startObserving();
+        mContrastObserver = new DisplayContrastObserver(mHandler);
+        mContrastObserver.startObserving();
+        mColorSpaceObserver = new DisplayColorSpaceObserver(mHandler);
+        mColorSpaceObserver.startObserving();
+        mZenModeObserver = new ZenModeObserver(mHandler);
+        mZenModeObserver.startObserving();
 
         mMediaRouter = (MediaRouter)context.getSystemService(Context.MEDIA_ROUTER_SERVICE);
         rebindMediaRouterAsCurrentUser();
@@ -444,6 +597,22 @@
         mAirplaneModeCallback.refreshView(mAirplaneModeTile, mAirplaneModeState);
     }
 
+    // Zen Mode
+    void addZenModeTile(QuickSettingsTileView view, RefreshCallback cb) {
+        mZenModeTile = view;
+        mZenModeCallback = cb;
+        onZenModeChanged();
+    }
+    private void onZenModeChanged() {
+        final int mode = Settings.Global.getInt(mContext.getContentResolver(),
+                Settings.Global.ZEN_MODE, Settings.Global.ZEN_MODE_OFF);
+        mZenModeState.enabled = mode != Settings.Global.ZEN_MODE_OFF;
+        mZenModeState.zenMode = mode;
+        mZenModeState.label = mContext.getString(R.string.zen_mode_title);
+        mZenModeState.iconId = R.drawable.stat_sys_zen_limited;
+        mZenModeCallback.refreshView(mZenModeTile, mZenModeState);
+    }
+
     // Wifi
     void addWifiTile(QuickSettingsTileView view, RefreshCallback cb) {
         mWifiTile = view;
@@ -659,7 +828,6 @@
     void addRemoteDisplayTile(QuickSettingsTileView view, RefreshCallback cb) {
         mRemoteDisplayTile = view;
         mRemoteDisplayCallback = cb;
-        final int[] count = new int[1];
         mRemoteDisplayTile.setOnPrepareListener(new QuickSettingsTileView.OnPrepareListener() {
             @Override
             public void onPrepare() {
@@ -798,6 +966,12 @@
         mRotationLockTile = view;
         mRotationLockCallback = cb;
         mRotationLockController = rotationLockController;
+        final int lockOrientation = mRotationLockController.getRotationLockOrientation();
+        mRotationLockedLabel = lockOrientation == Configuration.ORIENTATION_PORTRAIT
+                    ? R.string.quick_settings_rotation_locked_portrait_label
+                    : lockOrientation == Configuration.ORIENTATION_LANDSCAPE
+                    ? R.string.quick_settings_rotation_locked_landscape_label
+                    : R.string.quick_settings_rotation_locked_label;
         onRotationLockChanged();
     }
     void onRotationLockChanged() {
@@ -812,7 +986,7 @@
                 ? R.drawable.ic_qs_rotation_locked
                 : R.drawable.ic_qs_auto_rotate;
         mRotationLockState.label = rotationLocked
-                ? mContext.getString(R.string.quick_settings_rotation_locked_label)
+                ? mContext.getString(mRotationLockedLabel)
                 : mContext.getString(R.string.quick_settings_rotation_unlocked_label);
         mRotationLockCallback.refreshView(mRotationLockTile, mRotationLockState);
     }
@@ -847,6 +1021,90 @@
         onBrightnessLevelChanged();
     }
 
+    // Color inversion
+    void addInversionTile(QuickSettingsTileView view, RefreshCallback cb) {
+        mInversionTile = view;
+        mInversionCallback = cb;
+        onInversionChanged();
+    }
+    public void onInversionChanged() {
+        final Resources res = mContext.getResources();
+        final ContentResolver cr = mContext.getContentResolver();
+        final int currentUserId = mUserTracker.getCurrentUserId();
+        final boolean quickSettingEnabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_QUICK_SETTING_ENABLED, 0,
+                currentUserId) == 1;
+        final boolean enabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, currentUserId) == 1;
+        final int type = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION, 0, currentUserId);
+        mInversionState.enabled = quickSettingEnabled;
+        mInversionState.toggled = enabled;
+        mInversionState.type = type;
+        // TODO: Add real icon assets.
+        mInversionState.iconId = enabled ? R.drawable.ic_qs_inversion_on
+                : R.drawable.ic_qs_inversion_off;
+        mInversionState.label = res.getString(R.string.quick_settings_inversion_label);
+        mInversionCallback.refreshView(mInversionTile, mInversionState);
+    }
+
+    // Contrast enhancement
+    void addContrastTile(QuickSettingsTileView view, RefreshCallback cb) {
+        mContrastTile = view;
+        mContrastCallback = cb;
+        onContrastChanged();
+    }
+    public void onContrastChanged() {
+        final Resources res = mContext.getResources();
+        final ContentResolver cr = mContext.getContentResolver();
+        final int currentUserId = mUserTracker.getCurrentUserId();
+        final boolean quickSettingEnabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_QUICK_SETTING_ENABLED, 0,
+                currentUserId) == 1;
+        final boolean enabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED, 0, currentUserId) == 1;
+        final float contrast = Settings.Secure.getFloatForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST, 1, currentUserId);
+        final float brightness = Settings.Secure.getFloatForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS, 0, currentUserId);
+        mContrastState.enabled = quickSettingEnabled;
+        mContrastState.toggled = enabled;
+        mContrastState.contrast = contrast;
+        mContrastState.brightness = brightness;
+        // TODO: Add real icon assets.
+        mContrastState.iconId = enabled ? R.drawable.ic_qs_contrast_on
+                : R.drawable.ic_qs_contrast_off;
+        mContrastState.label = res.getString(R.string.quick_settings_contrast_label);
+        mContrastCallback.refreshView(mContrastTile, mContrastState);
+    }
+
+    // Color space adjustment
+    void addColorSpaceTile(QuickSettingsTileView view, RefreshCallback cb) {
+        mColorSpaceTile = view;
+        mColorSpaceCallback = cb;
+        onColorSpaceChanged();
+    }
+    public void onColorSpaceChanged() {
+        final Resources res = mContext.getResources();
+        final ContentResolver cr = mContext.getContentResolver();
+        final int currentUserId = mUserTracker.getCurrentUserId();
+        final boolean quickSettingEnabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_QUICK_SETTING_ENABLED, 0,
+                currentUserId) == 1;
+        final boolean enabled = Settings.Secure.getIntForUser(cr,
+                Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, currentUserId) == 1;
+        final int type = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, 0, currentUserId);
+        mColorSpaceState.enabled = quickSettingEnabled;
+        mColorSpaceState.toggled = enabled;
+        mColorSpaceState.type = type;
+        // TODO: Add real icon assets.
+        mColorSpaceState.iconId = enabled ? R.drawable.ic_qs_color_space_on
+                : R.drawable.ic_qs_color_space_off;
+        mColorSpaceState.label = res.getString(R.string.quick_settings_color_space_label);
+        mColorSpaceCallback.refreshView(mColorSpaceTile, mColorSpaceState);
+    }
+
     // SSL CA Cert warning.
     public void addSslCaCertWarningTile(QuickSettingsTileView view, RefreshCallback cb) {
         mSslCaCertWarningTile = view;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsScrollView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsScrollView.java
index 8a2f8d6..175805a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsScrollView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsScrollView.java
@@ -42,7 +42,7 @@
         if (getChildCount() > 0) {
             View child = getChildAt(0);
             scrollRange = Math.max(0,
-                    child.getHeight() - (getHeight() - mPaddingBottom - mPaddingTop));
+                    child.getHeight() - (getHeight() - getPaddingBottom() - getPaddingTop()));
         }
         return scrollRange;
     }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
deleted file mode 100644
index c10a0d4..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SettingsPanelView.java
+++ /dev/null
@@ -1,161 +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.android.systemui.statusbar.phone;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.drawable.Drawable;
-import android.util.AttributeSet;
-import android.util.EventLog;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.accessibility.AccessibilityEvent;
-
-import com.android.systemui.EventLogTags;
-import com.android.systemui.R;
-import com.android.systemui.statusbar.GestureRecorder;
-import com.android.systemui.statusbar.policy.BatteryController;
-import com.android.systemui.statusbar.policy.BluetoothController;
-import com.android.systemui.statusbar.policy.LocationController;
-import com.android.systemui.statusbar.policy.NetworkController;
-import com.android.systemui.statusbar.policy.RotationLockController;
-
-public class SettingsPanelView extends PanelView {
-    public static final boolean DEBUG_GESTURES = true;
-
-    private QuickSettings mQS;
-    private QuickSettingsContainerView mQSContainer;
-
-    Drawable mHandleBar;
-    int mHandleBarHeight;
-    View mHandleView;
-
-    public SettingsPanelView(Context context, AttributeSet attrs) {
-        super(context, attrs);
-    }
-
-    @Override
-    protected void onFinishInflate() {
-        super.onFinishInflate();
-
-        mQSContainer = (QuickSettingsContainerView) findViewById(R.id.quick_settings_container);
-
-        Resources resources = getContext().getResources();
-        mHandleBar = resources.getDrawable(R.drawable.status_bar_close);
-        mHandleBarHeight = resources.getDimensionPixelSize(R.dimen.close_handle_height);
-        mHandleView = findViewById(R.id.handle);
-    }
-
-    public void setQuickSettings(QuickSettings qs) {
-        mQS = qs;
-    }
-
-    @Override
-    public void setBar(PanelBar panelBar) {
-        super.setBar(panelBar);
-
-        if (mQS != null) {
-            mQS.setBar(panelBar);
-        }
-    }
-
-    public void setImeWindowStatus(boolean visible) {
-        if (mQS != null) {
-            mQS.setImeWindowStatus(visible);
-        }
-    }
-
-    public void setup(NetworkController networkController, BluetoothController bluetoothController,
-            BatteryController batteryController, LocationController locationController,
-            RotationLockController rotationLockController) {
-        if (mQS != null) {
-            mQS.setup(networkController, bluetoothController, batteryController,
-                    locationController, rotationLockController);
-        }
-    }
-
-    void updateResources() {
-        if (mQS != null) {
-            mQS.updateResources();
-        }
-        if (mQSContainer != null) {
-            mQSContainer.updateResources();
-        }
-        requestLayout();
-    }
-
-    @Override
-    public void fling(float vel, boolean always) {
-        GestureRecorder gr = ((PhoneStatusBarView) mBar).mBar.getGestureRecorder();
-        if (gr != null) {
-            gr.tag(
-                "fling " + ((vel > 0) ? "open" : "closed"),
-                "settings,v=" + vel);
-        }
-        super.fling(vel, always);
-    }
-
-    public void setService(PhoneStatusBar phoneStatusBar) {
-        if (mQS != null) {
-            mQS.setService(phoneStatusBar);
-        }
-    }
-
-    @Override
-    public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) {
-        if (event.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
-            event.getText()
-                    .add(getContext().getString(R.string.accessibility_desc_quick_settings));
-            return true;
-        }
-
-        return super.dispatchPopulateAccessibilityEvent(event);
-    }
-
-    // We draw the handle ourselves so that it's always glued to the bottom of the window.
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        super.onLayout(changed, left, top, right, bottom);
-        if (changed) {
-            final int pl = getPaddingLeft();
-            final int pr = getPaddingRight();
-            mHandleBar.setBounds(pl, 0, getWidth() - pr, (int) mHandleBarHeight);
-        }
-    }
-
-    @Override
-    public void draw(Canvas canvas) {
-        super.draw(canvas);
-        final int off = (int) (getHeight() - mHandleBarHeight - getPaddingBottom());
-        canvas.translate(0, off);
-        mHandleBar.setState(mHandleView.getDrawableState());
-        mHandleBar.draw(canvas);
-        canvas.translate(0, -off);
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent event) {
-        if (DEBUG_GESTURES) {
-            if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
-                EventLog.writeEvent(EventLogTags.SYSUI_QUICKPANEL_TOUCH,
-                       event.getActionMasked(), (int) event.getX(), (int) event.getY());
-            }
-        }
-        return super.onTouchEvent(event);
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
new file mode 100644
index 0000000..554892c
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -0,0 +1,219 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.phone;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.os.RemoteException;
+import android.util.Slog;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.internal.policy.IKeyguardShowCallback;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.keyguard.ViewMediatorCallback;
+
+/**
+ * Manages creating, showing, hiding and resetting the keyguard within the status bar. Calls back
+ * via {@link ViewMediatorCallback} to poke the wake lock and report that the keyguard is done,
+ * which is in turn, reported to this class by the current
+ * {@link com.android.keyguard.KeyguardViewBase}.
+ */
+public class StatusBarKeyguardViewManager {
+    private static String TAG = "StatusBarKeyguardViewManager";
+
+    private final Context mContext;
+
+    private LockPatternUtils mLockPatternUtils;
+    private ViewMediatorCallback mViewMediatorCallback;
+    private PhoneStatusBar mPhoneStatusBar;
+
+    private ViewGroup mContainer;
+    private StatusBarWindowManager mStatusBarWindowManager;
+
+    private boolean mScreenOn = false;
+    private KeyguardBouncer mBouncer;
+    private boolean mShowing;
+    private boolean mOccluded;
+
+    public StatusBarKeyguardViewManager(Context context, ViewMediatorCallback callback,
+            LockPatternUtils lockPatternUtils) {
+        mContext = context;
+        mViewMediatorCallback = callback;
+        mLockPatternUtils = lockPatternUtils;
+    }
+
+    public void registerStatusBar(PhoneStatusBar phoneStatusBar,
+            ViewGroup container, StatusBarWindowManager statusBarWindowManager) {
+        mPhoneStatusBar = phoneStatusBar;
+        mContainer = container;
+        mStatusBarWindowManager = statusBarWindowManager;
+        mBouncer = new KeyguardBouncer(mContext, mViewMediatorCallback, mLockPatternUtils,
+                mStatusBarWindowManager, container);
+    }
+
+    /**
+     * Show the keyguard.  Will handle creating and attaching to the view manager
+     * lazily.
+     */
+    public void show(Bundle options) {
+        mShowing = true;
+        mStatusBarWindowManager.setKeyguardShowing(true);
+        showBouncerOrKeyguard();
+        updateStates();
+    }
+
+    /**
+     * Shows the notification keyguard or the bouncer depending on
+     * {@link KeyguardBouncer#needsFullscreenBouncer()}.
+     */
+    private void showBouncerOrKeyguard() {
+        if (mBouncer.needsFullscreenBouncer()) {
+
+            // The keyguard might be showing (already). So we need to hide it.
+            mPhoneStatusBar.hideKeyguard();
+            mBouncer.show();
+        } else {
+            mPhoneStatusBar.showKeyguard();
+            mBouncer.hide();
+            mBouncer.prepare();
+        }
+    }
+
+    private void showBouncer() {
+        mBouncer.show();
+        updateStates();
+    }
+
+    /**
+     * Reset the state of the view.
+     */
+    public void reset() {
+        showBouncerOrKeyguard();
+        updateStates();
+    }
+
+    public void onScreenTurnedOff() {
+        mScreenOn = false;
+        mBouncer.onScreenTurnedOff();
+    }
+
+    public void onScreenTurnedOn(final IKeyguardShowCallback callback) {
+        mScreenOn = true;
+        if (callback != null) {
+            callbackAfterDraw(callback);
+        }
+    }
+
+    private void callbackAfterDraw(final IKeyguardShowCallback callback) {
+        mContainer.post(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    callback.onShown(mContainer.getWindowToken());
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Exception calling onShown():", e);
+                }
+            }
+        });
+    }
+
+    public void verifyUnlock() {
+        dismiss();
+    }
+
+    public void setNeedsInput(boolean needsInput) {
+        mStatusBarWindowManager.setKeyguardNeedsInput(needsInput);
+    }
+
+    public void updateUserActivityTimeout() {
+        mStatusBarWindowManager.setKeyguardUserActivityTimeout(mBouncer.getUserActivityTimeout());
+    }
+
+    public void setOccluded(boolean occluded) {
+        mOccluded = occluded;
+        mStatusBarWindowManager.setKeyguardOccluded(occluded);
+        updateStates();
+    }
+
+    /**
+     * Hides the keyguard view
+     */
+    public void hide() {
+        mShowing = false;
+        mPhoneStatusBar.hideKeyguard();
+        mStatusBarWindowManager.setKeyguardShowing(false);
+        mBouncer.hide();
+        mViewMediatorCallback.keyguardGone();
+        updateStates();
+    }
+
+    /**
+     * Dismisses the keyguard by going to the next screen or making it gone.
+     */
+    public void dismiss() {
+        if (mScreenOn) {
+            showBouncer();
+        }
+    }
+
+    public boolean isSecure() {
+        return mBouncer.isSecure();
+    }
+
+    /**
+     * @return Whether the keyguard is showing
+     */
+    public boolean isShowing() {
+        return mShowing;
+    }
+
+    /**
+     * Notifies this manager that the back button has been pressed.
+     *
+     * @return whether the back press has been handled
+     */
+    public boolean onBackPressed() {
+        if (mBouncer.isShowing()) {
+            mBouncer.hide();
+            mPhoneStatusBar.showKeyguard();
+            updateStates();
+            return true;
+        }
+        return false;
+    }
+
+    private void updateStates() {
+        int vis = mContainer.getSystemUiVisibility();
+        boolean bouncerDismissable = mBouncer.isShowing() && !mBouncer.needsFullscreenBouncer();
+        if (bouncerDismissable || !mShowing) {
+            mContainer.setSystemUiVisibility(vis & ~View.STATUS_BAR_DISABLE_BACK);
+        } else {
+            mContainer.setSystemUiVisibility(vis | View.STATUS_BAR_DISABLE_BACK);
+        }
+        if (!(mShowing && !mOccluded) || mBouncer.isShowing()) {
+            mPhoneStatusBar.getNavigationBarView().setVisibility(View.VISIBLE);
+        } else {
+            mPhoneStatusBar.getNavigationBarView().setVisibility(View.GONE);
+        }
+        mPhoneStatusBar.setBouncerShowing(mBouncer.isShowing());
+    }
+
+    public boolean onMenuPressed() {
+        return mBouncer.onMenuPressed();
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
new file mode 100644
index 0000000..a4c9df5
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
@@ -0,0 +1,225 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.phone;
+
+import android.content.Context;
+import android.content.pm.ActivityInfo;
+import android.content.res.Resources;
+import android.graphics.PixelFormat;
+import android.os.SystemProperties;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowManager;
+
+import com.android.keyguard.R;
+import com.android.systemui.statusbar.BaseStatusBar;
+import com.android.systemui.statusbar.StatusBarState;
+
+/**
+ * Encapsulates all logic for the status bar window state management.
+ */
+public class StatusBarWindowManager {
+
+    private final Context mContext;
+    private final WindowManager mWindowManager;
+    private View mStatusBarView;
+    private WindowManager.LayoutParams mLp;
+    private int mBarHeight;
+    private final boolean mKeyguardScreenRotation;
+
+    private final State mCurrentState = new State();
+
+    public StatusBarWindowManager(Context context) {
+        mContext = context;
+        mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
+        mKeyguardScreenRotation = shouldEnableKeyguardScreenRotation();
+    }
+
+    private boolean shouldEnableKeyguardScreenRotation() {
+        Resources res = mContext.getResources();
+        return SystemProperties.getBoolean("lockscreen.rot_override", false)
+                || res.getBoolean(R.bool.config_enableLockScreenRotation);
+    }
+
+    /**
+     * Adds the status bar view to the window manager.
+     *
+     * @param statusBarView The view to add.
+     * @param barHeight The height of the status bar in collapsed state.
+     */
+    public void add(View statusBarView, int barHeight) {
+
+        // Now that the status bar window encompasses the sliding panel and its
+        // translucent backdrop, the entire thing is made TRANSLUCENT and is
+        // hardware-accelerated.
+        mLp = new WindowManager.LayoutParams(
+                ViewGroup.LayoutParams.MATCH_PARENT,
+                barHeight,
+                WindowManager.LayoutParams.TYPE_STATUS_BAR,
+                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                        | WindowManager.LayoutParams.FLAG_TOUCHABLE_WHEN_WAKING
+                        | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
+                        | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
+                        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION
+                        | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
+                PixelFormat.TRANSLUCENT);
+
+        mLp.flags |= WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED;
+        mLp.gravity = Gravity.TOP | Gravity.FILL_HORIZONTAL;
+        mLp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE;
+        mLp.setTitle("StatusBar");
+        mLp.packageName = mContext.getPackageName();
+        mStatusBarView = statusBarView;
+        mBarHeight = barHeight;
+        mWindowManager.addView(mStatusBarView, mLp);
+    }
+
+    private void applyKeyguardFlags(State state) {
+        if (state.keyguardShowing) {
+            mLp.flags |= WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+            mLp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
+        } else {
+            mLp.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+            mLp.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
+        }
+    }
+
+    private void adjustScreenOrientation(State state) {
+        if (state.isKeyguardShowingAndNotOccluded()) {
+            if (mKeyguardScreenRotation) {
+                mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
+            } else {
+                mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
+            }
+        } else {
+            mLp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
+        }
+    }
+
+    private void applyFocusableFlag(State state) {
+        if (state.isKeyguardShowingAndNotOccluded() && state.keyguardNeedsInput) {
+            mLp.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+            mLp.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+        } else if (state.isKeyguardShowingAndNotOccluded() || state.statusBarFocusable) {
+            mLp.flags &= ~WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+            mLp.flags |= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+        } else {
+            mLp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
+            mLp.flags &= ~WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
+        }
+    }
+
+    private void applyHeight(State state) {
+        boolean expanded = state.isKeyguardShowingAndNotOccluded() || state.statusBarExpanded;
+        if (expanded) {
+            mLp.height = ViewGroup.LayoutParams.MATCH_PARENT;
+        } else {
+            mLp.height = mBarHeight;
+        }
+    }
+
+    private void applyFitsSystemWindows(State state) {
+        mStatusBarView.setFitsSystemWindows(!state.isKeyguardShowingAndNotOccluded());
+    }
+
+    private void applyUserActivityTimeout(State state) {
+        if (state.isKeyguardShowingAndNotOccluded()
+                && state.statusBarState == StatusBarState.KEYGUARD) {
+            mLp.userActivityTimeout = state.keyguardUserActivityTimeout;
+        } else {
+            mLp.userActivityTimeout = -1;
+        }
+    }
+
+    private void applyInputFeatures(State state) {
+        if (state.isKeyguardShowingAndNotOccluded()
+                && state.statusBarState == StatusBarState.KEYGUARD) {
+            mLp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
+        } else {
+            mLp.inputFeatures &= ~WindowManager.LayoutParams.INPUT_FEATURE_DISABLE_USER_ACTIVITY;
+        }
+    }
+
+    private void apply(State state) {
+        applyKeyguardFlags(state);
+        applyFocusableFlag(state);
+        adjustScreenOrientation(state);
+        applyHeight(state);
+        applyUserActivityTimeout(state);
+        applyInputFeatures(state);
+        applyFitsSystemWindows(state);
+        mWindowManager.updateViewLayout(mStatusBarView, mLp);
+    }
+
+    public void setKeyguardShowing(boolean showing) {
+        mCurrentState.keyguardShowing = showing;
+        apply(mCurrentState);
+    }
+
+    public void setKeyguardOccluded(boolean occluded) {
+        mCurrentState.keyguardOccluded = occluded;
+        apply(mCurrentState);
+    }
+
+    public void setKeyguardNeedsInput(boolean needsInput) {
+        mCurrentState.keyguardNeedsInput = needsInput;
+        apply(mCurrentState);
+    }
+
+    public void setStatusBarExpanded(boolean expanded) {
+        mCurrentState.statusBarExpanded = expanded;
+        mCurrentState.statusBarFocusable = expanded;
+        apply(mCurrentState);
+    }
+
+    public void setStatusBarFocusable(boolean focusable) {
+        mCurrentState.statusBarFocusable = focusable;
+        apply(mCurrentState);
+    }
+
+    public void setKeyguardUserActivityTimeout(long timeout) {
+        mCurrentState.keyguardUserActivityTimeout = timeout;
+        apply(mCurrentState);
+    }
+
+    /**
+     * @param state The {@link StatusBarState} of the status bar.
+     */
+    public void setStatusBarState(int state) {
+        mCurrentState.statusBarState = state;
+        apply(mCurrentState);
+    }
+
+    private static class State {
+        boolean keyguardShowing;
+        boolean keyguardOccluded;
+        boolean keyguardNeedsInput;
+        boolean statusBarExpanded;
+        boolean statusBarFocusable;
+        long keyguardUserActivityTimeout;
+
+        /**
+         * The {@link BaseStatusBar} state from the status bar.
+         */
+        int statusBarState;
+
+        private boolean isKeyguardShowingAndNotOccluded() {
+            return keyguardShowing && !keyguardOccluded;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
index 4901823..acc3a0b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowView.java
@@ -20,29 +20,30 @@
 import android.content.Context;
 import android.graphics.Canvas;
 import android.graphics.Paint;
+import android.graphics.Rect;
 import android.util.AttributeSet;
 import android.view.KeyEvent;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewRootImpl;
 import android.widget.FrameLayout;
-import android.widget.ScrollView;
 
 import com.android.systemui.ExpandHelper;
 import com.android.systemui.R;
 import com.android.systemui.statusbar.BaseStatusBar;
-import com.android.systemui.statusbar.policy.NotificationRowLayout;
+import com.android.systemui.statusbar.DragDownHelper;
+import com.android.systemui.statusbar.StatusBarState;
+import com.android.systemui.statusbar.stack.NotificationStackScrollLayout;
 
 
-public class StatusBarWindowView extends FrameLayout
-{
+public class StatusBarWindowView extends FrameLayout {
     public static final String TAG = "StatusBarWindowView";
     public static final boolean DEBUG = BaseStatusBar.DEBUG;
 
     private ExpandHelper mExpandHelper;
-    private NotificationRowLayout latestItems;
+    private DragDownHelper mDragDownHelper;
+    private NotificationStackScrollLayout mStackScrollLayout;
     private NotificationPanelView mNotificationPanel;
-    private ScrollView mScrollView;
 
     PhoneStatusBar mService;
 
@@ -53,16 +54,29 @@
     }
 
     @Override
+    protected boolean fitSystemWindows(Rect insets) {
+        if (getFitsSystemWindows()) {
+            setPadding(insets.left, insets.top, insets.right, insets.bottom);
+        } else {
+            setPadding(0, 0, 0, 0);
+        }
+        return true;
+    }
+
+    @Override
     protected void onAttachedToWindow () {
         super.onAttachedToWindow();
-        latestItems = (NotificationRowLayout) findViewById(R.id.latestItems);
-        mScrollView = (ScrollView) findViewById(R.id.scroll);
+
+        mStackScrollLayout = (NotificationStackScrollLayout) findViewById(
+                R.id.notification_stack_scroller);
         mNotificationPanel = (NotificationPanelView) findViewById(R.id.notification_panel);
-        int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height);
-        int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height);
-        mExpandHelper = new ExpandHelper(mContext, latestItems, minHeight, maxHeight);
+        int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height);
+        int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_max_height);
+        mExpandHelper = new ExpandHelper(getContext(), mStackScrollLayout,
+                minHeight, maxHeight);
         mExpandHelper.setEventSource(this);
-        mExpandHelper.setScrollView(mScrollView);
+        mExpandHelper.setScrollAdapter(mStackScrollLayout);
+        mDragDownHelper = new DragDownHelper(getContext(), this, mStackScrollLayout, mService);
 
         // We really need to be able to animate while window animations are going on
         // so that activities may be started asynchronously from panel animations
@@ -76,11 +90,15 @@
     public boolean dispatchKeyEvent(KeyEvent event) {
         boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
         switch (event.getKeyCode()) {
-        case KeyEvent.KEYCODE_BACK:
-            if (!down) {
-                mService.animateCollapsePanels();
-            }
-            return true;
+            case KeyEvent.KEYCODE_BACK:
+                if (!down) {
+                    mService.onBackPressed();
+                }
+                return true;
+            case KeyEvent.KEYCODE_MENU:
+                if (!down) {
+                    return mService.onMenuPressed();
+                }
         }
         return super.dispatchKeyEvent(event);
     }
@@ -88,8 +106,15 @@
     @Override
     public boolean onInterceptTouchEvent(MotionEvent ev) {
         boolean intercept = false;
-        if (mNotificationPanel.isFullyExpanded() && mScrollView.getVisibility() == View.VISIBLE) {
+        if (mNotificationPanel.isFullyExpanded()
+                && mStackScrollLayout.getVisibility() == View.VISIBLE
+                && mService.getBarState() != StatusBarState.KEYGUARD) {
             intercept = mExpandHelper.onInterceptTouchEvent(ev);
+        } else if (mNotificationPanel.isFullyExpanded()
+                && mStackScrollLayout.getVisibility() == View.VISIBLE
+                && mService.getBarState() == StatusBarState.KEYGUARD
+                && !mService.isBouncerShowing()) {
+            intercept = mDragDownHelper.onInterceptTouchEvent(ev);
         }
         if (!intercept) {
             super.onInterceptTouchEvent(ev);
@@ -97,7 +122,7 @@
         if (intercept) {
             MotionEvent cancellation = MotionEvent.obtain(ev);
             cancellation.setAction(MotionEvent.ACTION_CANCEL);
-            latestItems.onInterceptTouchEvent(cancellation);
+            mStackScrollLayout.onInterceptTouchEvent(cancellation);
             cancellation.recycle();
         }
         return intercept;
@@ -106,8 +131,11 @@
     @Override
     public boolean onTouchEvent(MotionEvent ev) {
         boolean handled = false;
-        if (mNotificationPanel.isFullyExpanded()) {
+        if (mNotificationPanel.isFullyExpanded()
+                && mService.getBarState() != StatusBarState.KEYGUARD) {
             handled = mExpandHelper.onTouchEvent(ev);
+        } else if (mService.getBarState() == StatusBarState.KEYGUARD) {
+            handled = mDragDownHelper.onTouchEvent(ev);
         }
         if (!handled) {
             handled = super.onTouchEvent(ev);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeView.java
new file mode 100644
index 0000000..20011ff
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeView.java
@@ -0,0 +1,424 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.phone;
+
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Typeface;
+import android.graphics.drawable.ShapeDrawable;
+import android.graphics.drawable.shapes.OvalShape;
+import android.text.Spannable;
+import android.text.SpannableStringBuilder;
+import android.text.TextPaint;
+import android.text.method.LinkMovementMethod;
+import android.text.style.URLSpan;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.widget.CompoundButton;
+import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+import android.widget.RelativeLayout;
+import android.widget.Switch;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.phone.ZenModeView.Adapter.ExitCondition;
+
+public class ZenModeView extends RelativeLayout {
+    private static final String TAG = ZenModeView.class.getSimpleName();
+    private static final boolean DEBUG = false;
+
+    public static final int BACKGROUND = 0xff282828;
+
+    private static final Typeface CONDENSED =
+            Typeface.create("sans-serif-condensed", Typeface.NORMAL);
+    private static final int GRAY = 0xff999999; //TextAppearance.StatusBar.Expanded.Network
+    private static final int DARK_GRAY = 0xff333333;
+
+    private static final long DURATION = new ValueAnimator().getDuration();
+    private static final long PAGER_DURATION = DURATION / 2;
+    private static final long CLOSE_DELAY = 600;
+    private static final long AUTO_ACTIVATE_DELAY = 100;
+
+    private final Context mContext;
+    private final TextView mModeText;
+    private final Switch mModeSwitch;
+    private final View mDivider;
+    private final UntilPager mUntilPager;
+    private final ProgressDots mProgressDots;
+    private final View mDivider2;
+    private final TextView mSettingsButton;
+
+    private Adapter mAdapter;
+    private boolean mInit;
+    private boolean mAutoActivate;
+
+    public ZenModeView(Context context) {
+        this(context, null);
+    }
+
+    public ZenModeView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        if (DEBUG) log("new %s()", getClass().getSimpleName());
+        mContext = context;
+
+        final int iconSize = mContext.getResources()
+                .getDimensionPixelSize(com.android.internal.R.dimen.notification_large_icon_width);
+        final int topRowSize = iconSize * 2 / 3;
+        final int p = topRowSize / 3;
+
+        LayoutParams lp = null;
+
+        mModeText = new TextView(mContext);
+        mModeText.setText(R.string.zen_mode_title);
+        mModeText.setId(android.R.id.title);
+        mModeText.setTextColor(GRAY);
+        mModeText.setTypeface(CONDENSED);
+        mModeText.setAllCaps(true);
+        mModeText.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL);
+        mModeText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mModeText.getTextSize() * 1.5f);
+        lp = new LayoutParams(LayoutParams.WRAP_CONTENT, topRowSize);
+        lp.leftMargin = p;
+        addView(mModeText, lp);
+
+        mModeSwitch = new Switch(mContext);
+        mModeSwitch.setSwitchPadding(0);
+        mModeSwitch.setSwitchTypeface(CONDENSED);
+        lp = new LayoutParams(LayoutParams.WRAP_CONTENT, topRowSize);
+        lp.topMargin = p;
+        lp.rightMargin = p;
+        lp.addRule(ALIGN_PARENT_RIGHT);
+        lp.addRule(ALIGN_BASELINE, mModeText.getId());
+        addView(mModeSwitch, lp);
+        mModeSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                mAdapter.setMode(isChecked);
+                if (!mInit) return;
+                postDelayed(new Runnable(){
+                    @Override
+                    public void run() {
+                        mAdapter.close();
+                    }
+                }, CLOSE_DELAY);
+            }
+        });
+
+        mDivider = new View(mContext);
+        mDivider.setId(android.R.id.empty);
+        mDivider.setBackgroundColor(GRAY);
+        lp = new LayoutParams(LayoutParams.MATCH_PARENT, 2);
+        lp.addRule(BELOW, mModeText.getId());
+        lp.bottomMargin = p;
+        addView(mDivider, lp);
+
+        mUntilPager = new UntilPager(mContext, iconSize * 3 / 4);
+        mUntilPager.setId(android.R.id.tabhost);
+        lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+        lp.leftMargin = lp.rightMargin = iconSize / 2;
+        lp.addRule(CENTER_HORIZONTAL);
+        lp.addRule(BELOW, mDivider.getId());
+        addView(mUntilPager, lp);
+
+        mProgressDots = new ProgressDots(mContext, iconSize / 5);
+        mProgressDots.setId(android.R.id.progress);
+        lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
+        lp.addRule(CENTER_HORIZONTAL);
+        lp.addRule(BELOW, mUntilPager.getId());
+        addView(mProgressDots, lp);
+
+        mDivider2 = new View(mContext);
+        mDivider2.setId(android.R.id.widget_frame);
+        mDivider2.setBackgroundColor(GRAY);
+        lp = new LayoutParams(LayoutParams.MATCH_PARENT, 2);
+        lp.addRule(BELOW, mProgressDots.getId());
+        addView(mDivider2, lp);
+
+        mSettingsButton = new TextView(mContext);
+        mSettingsButton.setTypeface(CONDENSED);
+        mSettingsButton.setTextSize(TypedValue.COMPLEX_UNIT_PX, mSettingsButton.getTextSize() * 1.3f);
+        mSettingsButton.setPadding(p, p, p, p);
+        mSettingsButton.setText("More settings...");
+        lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
+        lp.addRule(BELOW, mDivider2.getId());
+        addView(mSettingsButton, lp);
+        mSettingsButton.setOnTouchListener(new OnTouchListener() {
+            @Override
+            public boolean onTouch(View v, MotionEvent event) {
+                if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                    mSettingsButton.setBackgroundColor(DARK_GRAY);
+                } else if (event.getAction() == MotionEvent.ACTION_UP) {
+                    mSettingsButton.setBackground(null);
+                    if (mAdapter != null) {
+                        mAdapter.configure();
+                    }
+                }
+                return true;
+            }
+        });
+    }
+
+    public void setAdapter(Adapter adapter) {
+        mAdapter = adapter;
+        mAdapter.setCallbacks(new Adapter.Callbacks() {
+            @Override
+            public void onChanged() {
+                post(new Runnable() {
+                    @Override
+                    public void run() {
+                        updateState(true);
+                    }
+                });
+            }
+        });
+        updateState(false);
+    }
+
+    @Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        if (mAutoActivate) {
+            mAutoActivate = false;
+            postDelayed(new Runnable() {
+                @Override
+                public void run() {
+                    if (!mModeSwitch.isChecked()) {
+                        mInit = false;
+                        mModeSwitch.setChecked(true);
+                    }
+                }
+            }, AUTO_ACTIVATE_DELAY);
+        }
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        if (mAdapter != null) {
+            mAdapter.dispose();
+        }
+    }
+
+    public void setAutoActivate(boolean value) {
+        mAutoActivate = value;
+    }
+
+    private void updateState(boolean animate) {
+        mUntilPager.updateState();
+        mModeSwitch.setChecked(mAdapter.getMode());
+        mInit = true;
+    }
+
+    private static void log(String msg, Object... args) {
+        Log.d(TAG, args == null || args.length == 0 ? msg : String.format(msg, args));
+    }
+
+    private final class UntilView extends FrameLayout {
+        private static final boolean SUPPORT_LINKS = false;
+
+        private final TextView mText;
+        public UntilView(Context context) {
+            super(context);
+            mText = new TextView(mContext);
+            mText.setTextSize(TypedValue.COMPLEX_UNIT_PX, mText.getTextSize() * 1.3f);
+            mText.setTypeface(CONDENSED);
+            mText.setTextColor(GRAY);
+            mText.setGravity(Gravity.CENTER);
+            addView(mText);
+        }
+
+        public void setExitCondition(final ExitCondition ec) {
+            SpannableStringBuilder ss = new SpannableStringBuilder(ec.summary);
+            if (SUPPORT_LINKS && ec.action != null) {
+                ss.setSpan(new CustomLinkSpan() {
+                    @Override
+                    public void onClick() {
+                        // TODO wire up links
+                        Toast.makeText(mContext, ec.action, Toast.LENGTH_SHORT).show();
+                    }
+                }, 0, ss.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
+                mText.setMovementMethod(LinkMovementMethod.getInstance());
+            } else {
+                mText.setMovementMethod(null);
+            }
+            mText.setText(ss);
+        }
+    }
+
+    private final class ProgressDots extends LinearLayout {
+        private final int mDotSize;
+        public ProgressDots(Context context, int dotSize) {
+            super(context);
+            setOrientation(HORIZONTAL);
+            mDotSize = dotSize;
+        }
+
+        private void updateState(int current, int count) {
+            while (getChildCount() < count) {
+                View dot = new View(mContext);
+                OvalShape s = new OvalShape();
+                ShapeDrawable sd = new ShapeDrawable(s);
+
+                dot.setBackground(sd);
+                LayoutParams lp = new LayoutParams(mDotSize, mDotSize);
+                lp.leftMargin = lp.rightMargin = mDotSize / 2;
+                lp.topMargin = lp.bottomMargin = mDotSize * 2 / 3;
+                addView(dot, lp);
+            }
+            while (getChildCount() > count) {
+                removeViewAt(getChildCount() - 1);
+            }
+            final int N = getChildCount();
+            for (int i = 0; i < N; i++) {
+                final int color = current == i ? GRAY : DARK_GRAY;
+                ((ShapeDrawable)getChildAt(i).getBackground()).setColorFilter(color, Mode.ADD);
+            }
+        }
+    }
+
+    private final class UntilPager extends RelativeLayout {
+        private final UntilView[] mViews;
+        private int mCurrent;
+        private float mDownX;
+
+        public UntilPager(Context context, int iconSize) {
+            super(context);
+            mViews = new UntilView[3];
+            for (int i = 0; i < mViews.length; i++) {
+                UntilView v = new UntilView(mContext);
+                LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, iconSize);
+                addView(v, lp);
+                mViews[i] = v;
+            }
+            updateState();
+            addOnLayoutChangeListener(new OnLayoutChangeListener() {
+                @Override
+                public void onLayoutChange(View v, int left, int top, int right,
+                        int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
+                    if (left != oldLeft || right != oldRight) {
+                        updateState();
+                    }
+                }
+            });
+            setBackgroundColor(DARK_GRAY);
+        }
+
+        private void updateState() {
+            if (mAdapter == null) {
+                return;
+            }
+            UntilView current = mViews[mCurrent];
+            current.setExitCondition(mAdapter.getExitCondition(0));
+            UntilView next = mViews[mCurrent + 1 % 3];
+            next.setExitCondition(mAdapter.getExitCondition(1));
+            UntilView prev = mViews[mCurrent + 2 % 3];
+            prev.setExitCondition(mAdapter.getExitCondition(-1));
+            position(0, false);
+            mProgressDots.updateState(mAdapter.getExitConditionIndex(),
+                    mAdapter.getExitConditionCount());
+        }
+
+        private void position(float dx, boolean animate) {
+            int w = getWidth();
+            UntilView current = mViews[mCurrent];
+            UntilView next = mViews[mCurrent + 1 % 3];
+            UntilView prev = mViews[mCurrent + 2 % 3];
+            if (animate) {
+                current.animate().setDuration(PAGER_DURATION).translationX(dx).start();
+                next.animate().setDuration(PAGER_DURATION).translationX(w + dx).start();
+                prev.animate().setDuration(PAGER_DURATION).translationX(-w + dx).start();
+            } else {
+                current.setTranslationX(dx);
+                next.setTranslationX(w + dx);
+                prev.setTranslationX(-w + dx);
+            }
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent event) {
+            log("onTouchEvent " + MotionEvent.actionToString(event.getAction()));
+            if (event.getAction() == MotionEvent.ACTION_DOWN) {
+                mDownX = event.getX();
+            } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
+                float dx = event.getX() - mDownX;
+                position(dx, false);
+            } else if (event.getAction() == MotionEvent.ACTION_UP
+                    || event.getAction() == MotionEvent.ACTION_CANCEL) {
+                float dx = event.getX() - mDownX;
+                int d = Math.abs(dx) < getWidth() / 3 ? 0 : Math.signum(dx) > 0 ? -1 : 1;
+                if (d != 0 && mAdapter.getExitConditionCount() > 1) {
+                    mAdapter.select(mAdapter.getExitCondition(d));
+                } else {
+                    position(0, true);
+                }
+            }
+            return true;
+        }
+    }
+
+    private abstract static class CustomLinkSpan extends URLSpan {
+        abstract public void onClick();
+
+        public CustomLinkSpan() {
+            super("#");
+        }
+
+        @Override
+        public void updateDrawState(TextPaint ds) {
+            super.updateDrawState(ds);
+            ds.setUnderlineText(false);
+            ds.bgColor = BACKGROUND;
+        }
+
+        @Override
+        public void onClick(View widget) {
+            onClick();
+        }
+    }
+
+    public interface Adapter {
+        void configure();
+        void close();
+        boolean getMode();
+        void setMode(boolean mode);
+        void select(ExitCondition ec);
+        void init();
+        void dispose();
+        void setCallbacks(Callbacks callbacks);
+        ExitCondition getExitCondition(int d);
+        int getExitConditionCount();
+        int getExitConditionIndex();
+
+        public static class ExitCondition {
+            public String summary;
+            public String line1;
+            public String line2;
+            public String action;
+            public Object tag;
+        }
+
+        public interface Callbacks {
+            void onChanged();
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeViewAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeViewAdapter.java
new file mode 100644
index 0000000..8748888
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ZenModeViewAdapter.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.phone;
+
+import android.app.INotificationManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.service.notification.Condition;
+import android.service.notification.IConditionListener;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public abstract class ZenModeViewAdapter implements ZenModeView.Adapter {
+    private static final String TAG = "ZenModeViewAdapter";
+
+    private final Context mContext;
+    private final ContentResolver mResolver;
+    private final Handler mHandler = new Handler();
+    private final SettingsObserver mObserver;
+    private final List<ExitCondition> mExits = new ArrayList<ExitCondition>(Arrays.asList(
+            newExit("Until you turn this off", "Until", "You turn this off", null)));
+    private final INotificationManager mNoMan;
+    private final ArrayMap<Uri, Condition> mConditions = new ArrayMap<Uri, Condition>();
+
+    private Callbacks mCallbacks;
+    private int mExitIndex;
+    private boolean mMode;
+
+    public ZenModeViewAdapter(Context context) {
+        mContext = context;
+        mResolver = mContext.getContentResolver();
+        mObserver = new SettingsObserver(mHandler);
+        mNoMan = INotificationManager.Stub.asInterface(
+                ServiceManager.getService(Context.NOTIFICATION_SERVICE));
+        try {
+            mNoMan.requestZenModeConditions(mListener, Condition.FLAG_RELEVANT_NOW);
+        } catch (RemoteException e) {
+            // noop
+        }
+        mObserver.init();
+        init();
+    }
+
+    @Override
+    public boolean getMode() {
+        return mMode;
+    }
+
+    @Override
+    public void setMode(boolean mode) {
+        if (mode == mMode) return;
+        mMode = mode;
+        final int v = mMode ? Settings.Global.ZEN_MODE_ON : Settings.Global.ZEN_MODE_OFF;
+        AsyncTask.execute(new Runnable() {
+            @Override
+            public void run() {
+                Settings.Global.putInt(mContext.getContentResolver(),
+                        Settings.Global.ZEN_MODE, v);
+            }
+        });
+        dispatchChanged();
+    }
+
+    @Override
+    public void init() {
+        if (mExitIndex != 0) {
+            mExitIndex = 0;
+            dispatchChanged();
+        }
+        setZenModeCondition();
+    }
+
+    @Override
+    public void dispose() {
+        try {
+            mNoMan.requestZenModeConditions(mListener, 0 /*none*/);
+        } catch (RemoteException e) {
+            // noop
+        }
+    }
+
+    private void dispatchChanged() {
+        mHandler.removeCallbacks(mChanged);
+        mHandler.post(mChanged);
+    }
+
+    @Override
+    public void setCallbacks(final Callbacks callbacks) {
+        mHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                mCallbacks = callbacks;
+            }
+        });
+    }
+
+    @Override
+    public ExitCondition getExitCondition(int d) {
+        final int n = mExits.size();
+        final int i = (n + (mExitIndex + (int)Math.signum(d))) % n;
+        return mExits.get(i);
+    }
+
+    @Override
+    public int getExitConditionCount() {
+        return mExits.size();
+    }
+
+    @Override
+    public int getExitConditionIndex() {
+        return mExitIndex;
+    }
+
+    @Override
+    public void select(ExitCondition ec) {
+        final int i = mExits.indexOf(ec);
+        if (i == -1 || i == mExitIndex) {
+            return;
+        }
+        mExitIndex = i;
+        dispatchChanged();
+        setZenModeCondition();
+    }
+
+    private void setZenModeCondition() {
+        if (mExitIndex < 0 || mExitIndex >= mExits.size()) {
+            Log.w(TAG, "setZenModeCondition to bad index " + mExitIndex + " of " + mExits.size());
+            return;
+        }
+        final Uri conditionUri = (Uri) mExits.get(mExitIndex).tag;
+        try {
+            mNoMan.setZenModeCondition(conditionUri);
+        } catch (RemoteException e) {
+            // noop
+        }
+    }
+
+    private static ExitCondition newExit(String summary, String line1, String line2, Object tag) {
+        final ExitCondition rt = new ExitCondition();
+        rt.summary = summary;
+        rt.line1 = line1;
+        rt.line2 = line2;
+        rt.tag = tag;
+        return rt;
+    }
+
+    private final Runnable mChanged = new Runnable() {
+        public void run() {
+            if (mCallbacks == null) {
+                return;
+            }
+            try {
+                mCallbacks.onChanged();
+            } catch (Throwable t) {
+                Log.w(TAG, "Error dispatching onChanged to " + mCallbacks, t);
+            }
+        }
+    };
+
+    private final class SettingsObserver extends ContentObserver {
+        public SettingsObserver(Handler handler) {
+            super(handler);
+        }
+
+        public void init() {
+            loadSettings();
+            mResolver.registerContentObserver(
+                    Settings.Global.getUriFor(Settings.Global.ZEN_MODE),
+                    false, this);
+        }
+
+        @Override
+        public void onChange(boolean selfChange) {
+            loadSettings();
+            mChanged.run();  // already on handler
+        }
+
+        private void loadSettings() {
+            mMode = getModeFromSetting();
+        }
+
+        private boolean getModeFromSetting() {
+            final int v = Settings.Global.getInt(mResolver,
+                    Settings.Global.ZEN_MODE, Settings.Global.ZEN_MODE_OFF);
+            return v != Settings.Global.ZEN_MODE_OFF;
+        }
+    }
+
+    private final IConditionListener mListener = new IConditionListener.Stub() {
+        @Override
+        public void onConditionsReceived(Condition[] conditions) {
+            if (conditions == null || conditions.length == 0) return;
+            for (Condition c : conditions) {
+                mConditions.put(c.id, c);
+            }
+            for (int i = mExits.size() - 1; i > 0; i--) {
+                mExits.remove(i);
+            }
+            for (Condition c : mConditions.values()) {
+                mExits.add(newExit(c.summary, c.line1, c.line2, c.id));
+            }
+            dispatchChanged();
+        }
+    };
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
index b7f3cfe..cadb44a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DateView.java
@@ -21,9 +21,6 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-import android.view.ViewParent;
 import android.widget.TextView;
 
 import com.android.systemui.R;
@@ -73,7 +70,7 @@
         filter.addAction(Intent.ACTION_TIME_CHANGED);
         filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
         filter.addAction(Intent.ACTION_LOCALE_CHANGED);
-        mContext.registerReceiver(mIntentReceiver, filter, null, null);
+        getContext().registerReceiver(mIntentReceiver, filter, null, null);
 
         updateClock();
     }
@@ -83,7 +80,7 @@
         super.onDetachedFromWindow();
 
         mDateFormat = null; // reload the locale next time
-        mContext.unregisterReceiver(mIntentReceiver);
+        getContext().unregisterReceiver(mIntentReceiver);
     }
 
     protected void updateClock() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
index f1fda78..72e22e9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HeadsUpNotificationView.java
@@ -16,7 +16,6 @@
 
 package com.android.systemui.statusbar.policy;
 
-import android.app.Notification;
 import android.content.Context;
 import android.content.res.Configuration;
 import android.graphics.Rect;
@@ -27,12 +26,13 @@
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.widget.FrameLayout;
-import android.widget.LinearLayout;
 
 import com.android.systemui.ExpandHelper;
+import com.android.systemui.Gefingerpoken;
 import com.android.systemui.R;
 import com.android.systemui.SwipeHelper;
 import com.android.systemui.statusbar.BaseStatusBar;
+import com.android.systemui.statusbar.ExpandableView;
 import com.android.systemui.statusbar.NotificationData;
 
 public class HeadsUpNotificationView extends FrameLayout implements SwipeHelper.Callback, ExpandHelper.Callback {
@@ -44,13 +44,13 @@
 
     private final int mTouchSensitivityDelay;
     private SwipeHelper mSwipeHelper;
+    private EdgeSwipeHelper mEdgeSwipeHelper;
 
     private BaseStatusBar mBar;
     private ExpandHelper mExpandHelper;
-    private long mStartTouchTime;
 
+    private long mStartTouchTime;
     private ViewGroup mContentHolder;
-    private ViewGroup mContentSlider;
 
     private NotificationData.Entry mHeadsUp;
 
@@ -74,18 +74,24 @@
 
     public boolean setNotification(NotificationData.Entry headsUp) {
         mHeadsUp = headsUp;
-        mHeadsUp.row.setExpanded(false);
-        if (mContentHolder == null) {
-            // too soon!
-            return false;
+        if (mContentHolder != null) {
+            mContentHolder.removeAllViews();
         }
-        mContentHolder.setX(0);
-        mContentHolder.setVisibility(View.VISIBLE);
-        mContentHolder.setAlpha(1f);
-        mContentHolder.removeAllViews();
-        mContentHolder.addView(mHeadsUp.row);
-        mSwipeHelper.snapChild(mContentSlider, 1f);
-        mStartTouchTime = System.currentTimeMillis() + mTouchSensitivityDelay;
+
+        if (mHeadsUp != null) {
+            mHeadsUp.row.setSystemExpanded(true);
+            mHeadsUp.row.setShowingPublic(false);
+            if (mContentHolder == null) {
+                // too soon!
+                return false;
+            }
+            mContentHolder.setX(0);
+            mContentHolder.setVisibility(View.VISIBLE);
+            mContentHolder.setAlpha(1f);
+            mContentHolder.addView(mHeadsUp.row);
+            mSwipeHelper.snapChild(mContentHolder, 1f);
+            mStartTouchTime = System.currentTimeMillis() + mTouchSensitivityDelay;
+        }
         return true;
     }
 
@@ -95,10 +101,11 @@
 
     public void setMargin(int notificationPanelMarginPx) {
         if (SPEW) Log.v(TAG, "setMargin() " + notificationPanelMarginPx);
-        if (mContentSlider != null) {
-            FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentSlider.getLayoutParams();
+        if (mContentHolder != null &&
+                mContentHolder.getLayoutParams() instanceof FrameLayout.LayoutParams) {
+            FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) mContentHolder.getLayoutParams();
             lp.setMarginStart(notificationPanelMarginPx);
-            mContentSlider.setLayoutParams(lp);
+            mContentHolder.setLayoutParams(lp);
         }
     }
 
@@ -123,15 +130,17 @@
     @Override
     public void onAttachedToWindow() {
         float densityScale = getResources().getDisplayMetrics().density;
-        float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
+        final ViewConfiguration viewConfiguration = ViewConfiguration.get(getContext());
+        float pagingTouchSlop = viewConfiguration.getScaledPagingTouchSlop();
+        float touchSlop = viewConfiguration.getScaledTouchSlop();
         mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop);
+        mEdgeSwipeHelper = new EdgeSwipeHelper(touchSlop);
 
-        int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_min_height);
-        int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_row_max_height);
-        mExpandHelper = new ExpandHelper(mContext, this, minHeight, maxHeight);
+        int minHeight = getResources().getDimensionPixelSize(R.dimen.notification_min_height);
+        int maxHeight = getResources().getDimensionPixelSize(R.dimen.notification_max_height);
+        mExpandHelper = new ExpandHelper(getContext(), this, minHeight, maxHeight);
 
         mContentHolder = (ViewGroup) findViewById(R.id.content_holder);
-        mContentSlider = (ViewGroup) findViewById(R.id.content_slider);
 
         if (mHeadsUp != null) {
             // whoops, we're on already!
@@ -145,7 +154,8 @@
         if (System.currentTimeMillis() < mStartTouchTime) {
             return true;
         }
-        return mSwipeHelper.onInterceptTouchEvent(ev)
+        return mEdgeSwipeHelper.onInterceptTouchEvent(ev)
+                || mSwipeHelper.onInterceptTouchEvent(ev)
                 || mExpandHelper.onInterceptTouchEvent(ev)
                 || super.onInterceptTouchEvent(ev);
     }
@@ -158,7 +168,8 @@
             return false;
         }
         mBar.resetHeadsUpDecayTimer();
-        return mSwipeHelper.onTouchEvent(ev)
+        return mEdgeSwipeHelper.onTouchEvent(ev)
+                || mSwipeHelper.onTouchEvent(ev)
                 || mExpandHelper.onTouchEvent(ev)
                 || super.onTouchEvent(ev);
     }
@@ -175,12 +186,12 @@
     // ExpandHelper.Callback methods
 
     @Override
-    public View getChildAtRawPosition(float x, float y) {
+    public ExpandableView getChildAtRawPosition(float x, float y) {
         return getChildAtPosition(x, y);
     }
 
     @Override
-    public View getChildAtPosition(float x, float y) {
+    public ExpandableView getChildAtPosition(float x, float y) {
         return mHeadsUp == null ? null : mHeadsUp.row;
     }
 
@@ -227,11 +238,65 @@
 
     @Override
     public View getChildAtPosition(MotionEvent ev) {
-        return mContentSlider;
+        return mContentHolder;
     }
 
     @Override
     public View getChildContentView(View v) {
-        return mContentSlider;
+        return mContentHolder;
+    }
+
+    private class EdgeSwipeHelper implements Gefingerpoken {
+        private static final boolean DEBUG_EDGE_SWIPE = false;
+        private final float mTouchSlop;
+        private boolean mConsuming;
+        private float mFirstY;
+        private float mFirstX;
+
+        public EdgeSwipeHelper(float touchSlop) {
+            mTouchSlop = touchSlop;
+        }
+
+        @Override
+        public boolean onInterceptTouchEvent(MotionEvent ev) {
+            switch (ev.getActionMasked()) {
+                case MotionEvent.ACTION_DOWN:
+                    if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action down " + ev.getY());
+                    mFirstX = ev.getX();
+                    mFirstY = ev.getY();
+                    mConsuming = false;
+                    break;
+
+                case MotionEvent.ACTION_MOVE:
+                    if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action move " + ev.getY());
+                    final float dY = ev.getY() - mFirstY;
+                    final float daX = Math.abs(ev.getX() - mFirstX);
+                    final float daY = Math.abs(dY);
+                    if (!mConsuming && (4f * daX) < daY && daY > mTouchSlop) {
+                        if (dY > 0) {
+                            if (DEBUG_EDGE_SWIPE) Log.d(TAG, "found an open");
+                            mBar.animateExpandNotificationsPanel();
+                        }
+                        if (dY < 0) {
+                            if (DEBUG_EDGE_SWIPE) Log.d(TAG, "found a close");
+                            mBar.onHeadsUpDismissed();
+                        }
+                        mConsuming = true;
+                    }
+                    break;
+
+                case MotionEvent.ACTION_UP:
+                case MotionEvent.ACTION_CANCEL:
+                    if (DEBUG_EDGE_SWIPE) Log.d(TAG, "action done" );
+                    mConsuming = false;
+                    break;
+            }
+            return mConsuming;
+        }
+
+        @Override
+        public boolean onTouchEvent(MotionEvent ev) {
+            return mConsuming;
+        }
     }
 }
\ No newline at end of file
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
index 312bba3..f5ee95b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/LocationController.java
@@ -24,7 +24,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.database.ContentObserver;
 import android.location.LocationManager;
 import android.os.Handler;
 import android.os.UserHandle;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 09f1695..92c008e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -126,6 +126,7 @@
     private int mConnectedNetworkType = ConnectivityManager.TYPE_NONE;
     private String mConnectedNetworkTypeName;
     private int mInetCondition = 0;
+    private int mLastInetCondition = 0;
     private static final int INET_CONDITION_THRESHOLD = 50;
 
     private boolean mAirplaneMode = false;
@@ -156,9 +157,9 @@
     boolean mDataAndWifiStacked = false;
 
     public interface SignalCluster {
-        void setWifiIndicators(boolean visible, int strengthIcon,
+        void setWifiIndicators(boolean visible, int strengthIcon, boolean problem,
                 String contentDescription);
-        void setMobileDataIndicators(boolean visible, int strengthIcon,
+        void setMobileDataIndicators(boolean visible, int strengthIcon, boolean problem,
                 int typeIcon, String contentDescription, String typeContentDescription);
         void setIsAirplaneMode(boolean is, int airplaneIcon);
     }
@@ -288,6 +289,7 @@
                 // only show wifi in the cluster if connected or if wifi-only
                 mWifiEnabled && (mWifiConnected || !mHasMobileDataFeature),
                 mWifiIconId,
+                mInetCondition == 0,
                 mContentDescriptionWifi);
 
         if (mIsWimaxEnabled && mWimaxConnected) {
@@ -295,6 +297,7 @@
             cluster.setMobileDataIndicators(
                     true,
                     mAlwaysShowCdmaRssi ? mPhoneSignalIconId : mWimaxIconId,
+                    mInetCondition == 0,
                     mDataTypeIconId,
                     mContentDescriptionWimax,
                     mContentDescriptionDataType);
@@ -303,6 +306,7 @@
             cluster.setMobileDataIndicators(
                     mHasMobileDataFeature,
                     mShowPhoneRSSIForData ? mPhoneSignalIconId : mDataSignalIconId,
+                    mInetCondition == 0,
                     mDataTypeIconId,
                     mContentDescriptionPhoneSignal,
                     mContentDescriptionDataType);
@@ -1145,6 +1149,7 @@
 
         if (mLastPhoneSignalIconId          != mPhoneSignalIconId
          || mLastWifiIconId                 != mWifiIconId
+         || mLastInetCondition              != mInetCondition
          || mLastWimaxIconId                != mWimaxIconId
          || mLastDataTypeIconId             != mDataTypeIconId
          || mLastAirplaneMode               != mAirplaneMode
@@ -1179,6 +1184,10 @@
             mLastWifiIconId = mWifiIconId;
         }
 
+        if (mLastInetCondition != mInetCondition) {
+            mLastInetCondition = mInetCondition;
+        }
+
         // the wimax icon on phones
         if (mLastWimaxIconId != mWimaxIconId) {
             mLastWimaxIconId = mWimaxIconId;
@@ -1424,6 +1433,7 @@
                     cluster.setWifiIndicators(
                             show,
                             iconId,
+                            mDemoInetCondition == 0,
                             "Demo");
                 }
             }
@@ -1456,6 +1466,7 @@
                     cluster.setMobileDataIndicators(
                             show,
                             iconId,
+                            mDemoInetCondition == 0,
                             mDemoDataTypeIconId,
                             "Demo",
                             "Demo");
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
deleted file mode 100644
index 259422d..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NotificationRowLayout.java
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- * Copyright (C) 2011 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.android.systemui.statusbar.policy;
-
-import android.animation.LayoutTransition;
-import android.animation.ValueAnimator;
-import android.content.Context;
-import android.content.res.Configuration;
-import android.graphics.Rect;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-
-import com.android.systemui.ExpandHelper;
-import com.android.systemui.R;
-import com.android.systemui.SwipeHelper;
-import com.android.systemui.statusbar.ExpandableNotificationRow;
-import com.android.systemui.statusbar.NotificationData;
-
-import java.util.HashMap;
-
-public class NotificationRowLayout
-        extends LinearLayout
-        implements SwipeHelper.Callback, ExpandHelper.Callback
-{
-    private static final String TAG = "NotificationRowLayout";
-    private static final boolean DEBUG = false;
-    private static final boolean SLOW_ANIMATIONS = DEBUG;
-
-    private static final int APPEAR_ANIM_LEN = SLOW_ANIMATIONS ? 5000 : 250;
-    private static final int DISAPPEAR_ANIM_LEN = APPEAR_ANIM_LEN;
-
-    boolean mAnimateBounds = true;
-
-    Rect mTmpRect = new Rect();
-
-    HashMap<View, ValueAnimator> mAppearingViews = new HashMap<View, ValueAnimator>();
-    HashMap<View, ValueAnimator> mDisappearingViews = new HashMap<View, ValueAnimator>();
-
-    private SwipeHelper mSwipeHelper;
-
-    private OnSizeChangedListener mOnSizeChangedListener;
-
-    // Flag set during notification removal animation to avoid causing too much work until
-    // animation is done
-    boolean mRemoveViews = true;
-
-    private LayoutTransition mRealLayoutTransition;
-
-    public NotificationRowLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public NotificationRowLayout(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        mRealLayoutTransition = new LayoutTransition();
-        mRealLayoutTransition.setAnimateParentHierarchy(true);
-        setLayoutTransitionsEnabled(true);
-
-        setOrientation(LinearLayout.VERTICAL);
-
-        if (DEBUG) {
-            setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
-                @Override
-                public void onChildViewAdded(View parent, View child) {
-                    Log.d(TAG, "view added: " + child + "; new count: " + getChildCount());
-                }
-                @Override
-                public void onChildViewRemoved(View parent, View child) {
-                    Log.d(TAG, "view removed: " + child + "; new count: " + (getChildCount() - 1));
-                }
-            });
-
-            setBackgroundColor(0x80FF8000);
-        }
-
-        float densityScale = getResources().getDisplayMetrics().density;
-        float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop();
-        mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop);
-    }
-
-    public void setLongPressListener(View.OnLongClickListener listener) {
-        mSwipeHelper.setLongPressListener(listener);
-    }
-
-    public void setOnSizeChangedListener(OnSizeChangedListener l) {
-        mOnSizeChangedListener = l;
-    }
-
-    @Override
-    public void onWindowFocusChanged(boolean hasWindowFocus) {
-        super.onWindowFocusChanged(hasWindowFocus);
-        if (!hasWindowFocus) {
-            mSwipeHelper.removeLongPressCallback();
-        }
-    }
-
-    public void setAnimateBounds(boolean anim) {
-        mAnimateBounds = anim;
-    }
-
-    private void logLayoutTransition() {
-        Log.v(TAG, "layout " +
-              (mRealLayoutTransition.isChangingLayout() ? "is " : "is not ") +
-              "in transition and animations " +
-              (mRealLayoutTransition.isRunning() ? "are " : "are not ") +
-              "running.");
-    }
-
-    @Override
-    public boolean onInterceptTouchEvent(MotionEvent ev) {
-        if (DEBUG) Log.v(TAG, "onInterceptTouchEvent()");
-        if (DEBUG) logLayoutTransition();
-
-        return mSwipeHelper.onInterceptTouchEvent(ev) ||
-                super.onInterceptTouchEvent(ev);
-    }
-
-    @Override
-    public boolean onTouchEvent(MotionEvent ev) {
-        if (DEBUG) Log.v(TAG, "onTouchEvent()");
-        if (DEBUG) logLayoutTransition();
-
-        return mSwipeHelper.onTouchEvent(ev) ||
-                super.onTouchEvent(ev);
-    }
-
-    public boolean canChildBeDismissed(View v) {
-        final View veto = v.findViewById(R.id.veto);
-        return (veto != null && veto.getVisibility() != View.GONE);
-    }
-
-    public boolean canChildBeExpanded(View v) {
-        return v instanceof ExpandableNotificationRow
-                && ((ExpandableNotificationRow) v).isExpandable();
-    }
-
-    public void setUserExpandedChild(View v, boolean userExpanded) {
-        if (v instanceof ExpandableNotificationRow) {
-            ((ExpandableNotificationRow) v).setUserExpanded(userExpanded);
-        }
-    }
-
-    public void setUserLockedChild(View v, boolean userLocked) {
-        if (v instanceof ExpandableNotificationRow) {
-            ((ExpandableNotificationRow) v).setUserLocked(userLocked);
-        }
-    }
-
-    public void onChildDismissed(View v) {
-        if (DEBUG) Log.v(TAG, "onChildDismissed: " + v + " mRemoveViews=" + mRemoveViews);
-        final View veto = v.findViewById(R.id.veto);
-        if (veto != null && veto.getVisibility() != View.GONE && mRemoveViews) {
-            veto.performClick();
-        }
-    }
-
-    public void onBeginDrag(View v) {
-        // We need to prevent the surrounding ScrollView from intercepting us now;
-        // the scroll position will be locked while we swipe
-        requestDisallowInterceptTouchEvent(true);
-    }
-
-    public void onDragCancelled(View v) {
-    }
-
-    public View getChildAtPosition(MotionEvent ev) {
-        return getChildAtPosition(ev.getX(), ev.getY());
-    }
-
-    public View getChildAtRawPosition(float touchX, float touchY) {
-        int[] location = new int[2];
-        getLocationOnScreen(location);
-        return getChildAtPosition((float) (touchX - location[0]), (float) (touchY - location[1]));
-    }
-
-    public View getChildAtPosition(float touchX, float touchY) {
-        // find the view under the pointer, accounting for GONE views
-        final int count = getChildCount();
-        int y = 0;
-        int childIdx = 0;
-        View slidingChild;
-        for (; childIdx < count; childIdx++) {
-            slidingChild = getChildAt(childIdx);
-            if (slidingChild.getVisibility() == GONE) {
-                continue;
-            }
-            y += slidingChild.getMeasuredHeight();
-            if (touchY < y) return slidingChild;
-        }
-        return null;
-    }
-
-    public View getChildContentView(View v) {
-        return v;
-    }
-
-    @Override
-    protected void onConfigurationChanged(Configuration newConfig) {
-        super.onConfigurationChanged(newConfig);
-        float densityScale = getResources().getDisplayMetrics().density;
-        mSwipeHelper.setDensityScale(densityScale);
-        float pagingTouchSlop = ViewConfiguration.get(mContext).getScaledPagingTouchSlop();
-        mSwipeHelper.setPagingTouchSlop(pagingTouchSlop);
-    }
-
-
-    /**
-     * Sets a flag to tell us whether to actually remove views. Removal is delayed by setting this
-     * to false during some animations to smooth out performance. Callers should restore the
-     * flag to true after the animation is done, and then they should make sure that the views
-     * get removed properly.
-     */
-    public void setViewRemoval(boolean removeViews) {
-        if (DEBUG) Log.v(TAG, "setViewRemoval: " + removeViews);
-        mRemoveViews = removeViews;
-    }
-
-    // Suppress layout transitions for a little while.
-    public void setLayoutTransitionsEnabled(boolean b) {
-        if (b) {
-            setLayoutTransition(mRealLayoutTransition);
-        } else {
-            if (mRealLayoutTransition.isRunning()) {
-                mRealLayoutTransition.cancel();
-            }
-            setLayoutTransition(null);
-        }
-    }
-
-    public void dismissRowAnimated(View child) {
-        dismissRowAnimated(child, 0);
-    }
-
-    public void dismissRowAnimated(View child, int vel) {
-        mSwipeHelper.dismissChild(child, vel);
-    }
-
-    @Override
-    public void onFinishInflate() {
-        super.onFinishInflate();
-        if (DEBUG) setWillNotDraw(false);
-    }
-
-    @Override
-    public void onDraw(android.graphics.Canvas c) {
-        super.onDraw(c);
-        if (DEBUG) logLayoutTransition();
-        if (DEBUG) {
-            //Log.d(TAG, "onDraw: canvas height: " + c.getHeight() + "px; measured height: "
-            //        + getMeasuredHeight() + "px");
-            c.save();
-            c.clipRect(6, 6, c.getWidth() - 6, getMeasuredHeight() - 6,
-                    android.graphics.Region.Op.DIFFERENCE);
-            c.drawColor(0xFFFF8000);
-            c.restore();
-        }
-    }
-
-    @Override
-    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
-        if (mOnSizeChangedListener != null) {
-            mOnSizeChangedListener.onSizeChanged(this, w, h, oldw, oldh);
-        }
-    }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/OnSizeChangedListener.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/OnSizeChangedListener.java
deleted file mode 100644
index 0377123..0000000
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/OnSizeChangedListener.java
+++ /dev/null
@@ -1,23 +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.android.systemui.statusbar.policy;
-
-import android.view.View;
-
-public interface OnSizeChangedListener {
-    void onSizeChanged(View view, int w, int h, int oldw, int oldh);
-}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockController.java
index 6f61ec8..98d205a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RotationLockController.java
@@ -17,6 +17,7 @@
 package com.android.systemui.statusbar.policy;
 
 import android.content.Context;
+import android.content.res.Configuration;
 import android.os.UserHandle;
 
 import com.android.internal.view.RotationPolicy;
@@ -42,42 +43,32 @@
 
     public RotationLockController(Context context) {
         mContext = context;
-        notifyChanged();
-        if (RotationPolicy.isRotationLockToggleSupported(mContext)) {
-            RotationPolicy.registerRotationPolicyListener(mContext,
-                    mRotationPolicyListener, UserHandle.USER_ALL);
-        }
+        RotationPolicy.registerRotationPolicyListener(mContext,
+                mRotationPolicyListener, UserHandle.USER_ALL);
     }
 
     public void addRotationLockControllerCallback(RotationLockControllerCallback callback) {
         mCallbacks.add(callback);
     }
 
+    public int getRotationLockOrientation() {
+        return RotationPolicy.getRotationLockOrientation(mContext);
+    }
+
     public boolean isRotationLocked() {
-        if (RotationPolicy.isRotationLockToggleSupported(mContext)) {
-            return RotationPolicy.isRotationLocked(mContext);
-        }
-        return false;
+        return RotationPolicy.isRotationLocked(mContext);
     }
 
     public void setRotationLocked(boolean locked) {
-        if (RotationPolicy.isRotationLockToggleSupported(mContext)) {
-            RotationPolicy.setRotationLock(mContext, locked);
-        }
+        RotationPolicy.setRotationLock(mContext, locked);
     }
 
     public boolean isRotationLockAffordanceVisible() {
-        if (RotationPolicy.isRotationLockToggleSupported(mContext)) {
-            return RotationPolicy.isRotationLockToggleVisible(mContext);
-        }
-        return false;
+        return RotationPolicy.isRotationLockToggleVisible(mContext);
     }
 
     public void release() {
-        if (RotationPolicy.isRotationLockToggleSupported(mContext)) {
-            RotationPolicy.unregisterRotationPolicyListener(mContext,
-                    mRotationPolicyListener);
-        }
+        RotationPolicy.unregisterRotationPolicyListener(mContext, mRotationPolicyListener);
     }
 
     private void notifyChanged() {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/ScrollAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ScrollAdapter.java
new file mode 100644
index 0000000..f35e22d
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/ScrollAdapter.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.policy;
+
+import android.view.View;
+
+/**
+ * A scroll adapter which can be queried for meta information about the scroll state
+ */
+public interface ScrollAdapter {
+
+    /**
+     * @return Whether the view returned by {@link #getHostView()} is scrolled to the top
+     */
+    public boolean isScrolledToTop();
+
+    /**
+     * @return Whether the view returned by {@link #getHostView()} is scrolled to the bottom
+     */
+    public boolean isScrolledToBottom();
+
+    /**
+     * @return The view in which the scrolling is performed
+     */
+    public View getHostView();
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
new file mode 100644
index 0000000..e4e5fb1
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -0,0 +1,1188 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.stack;
+
+import android.content.Context;
+import android.content.res.Configuration;
+
+import android.graphics.Canvas;
+import android.graphics.Paint;
+
+import android.util.AttributeSet;
+import android.util.Log;
+
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.animation.AnimationUtils;
+import android.widget.OverScroller;
+
+import com.android.systemui.ExpandHelper;
+import com.android.systemui.R;
+import com.android.systemui.SwipeHelper;
+import com.android.systemui.statusbar.ExpandableNotificationRow;
+import com.android.systemui.statusbar.ExpandableView;
+import com.android.systemui.statusbar.stack.StackScrollState.ViewState;
+import com.android.systemui.statusbar.policy.ScrollAdapter;
+
+import java.util.ArrayList;
+
+/**
+ * A layout which handles a dynamic amount of notifications and presents them in a scrollable stack.
+ */
+public class NotificationStackScrollLayout extends ViewGroup
+        implements SwipeHelper.Callback, ExpandHelper.Callback, ScrollAdapter,
+        ExpandableView.OnHeightChangedListener {
+
+    private static final String TAG = "NotificationStackScrollLayout";
+    private static final boolean DEBUG = false;
+
+    /**
+     * Sentinel value for no current active pointer. Used by {@link #mActivePointerId}.
+     */
+    private static final int INVALID_POINTER = -1;
+
+    private SwipeHelper mSwipeHelper;
+    private boolean mSwipingInProgress;
+    private int mCurrentStackHeight = Integer.MAX_VALUE;
+    private int mOwnScrollY;
+    private int mMaxLayoutHeight;
+
+    private VelocityTracker mVelocityTracker;
+    private OverScroller mScroller;
+    private int mTouchSlop;
+    private int mMinimumVelocity;
+    private int mMaximumVelocity;
+    private int mOverscrollDistance;
+    private int mOverflingDistance;
+    private boolean mIsBeingDragged;
+    private int mLastMotionY;
+    private int mActivePointerId;
+
+    private int mSidePaddings;
+    private Paint mDebugPaint;
+    private int mContentHeight;
+    private int mCollapsedSize;
+    private int mBottomStackPeekSize;
+    private int mEmptyMarginBottom;
+    private int mPaddingBetweenElements;
+    private int mTopPadding;
+    private boolean mListenForHeightChanges = true;
+
+    /**
+     * The algorithm which calculates the properties for our children
+     */
+    private StackScrollAlgorithm mStackScrollAlgorithm;
+
+    /**
+     * The current State this Layout is in
+     */
+    private StackScrollState mCurrentStackScrollState = new StackScrollState(this);
+    private ArrayList<View> mChildrenToAddAnimated = new ArrayList<View>();
+    private ArrayList<View> mChildrenToRemoveAnimated = new ArrayList<View>();
+    private ArrayList<AnimationEvent> mAnimationEvents
+            = new ArrayList<AnimationEvent>();
+    private ArrayList<View> mSwipedOutViews = new ArrayList<View>();
+    private final StackStateAnimator mStateAnimator = new StackStateAnimator(this);
+
+    private OnChildLocationsChangedListener mListener;
+    private ExpandableView.OnHeightChangedListener mOnHeightChangedListener;
+    private boolean mNeedsAnimation;
+    private boolean mTopPaddingNeedsAnimation;
+    private boolean mIsExpanded = true;
+    private boolean mChildrenUpdateRequested;
+    private ViewTreeObserver.OnPreDrawListener mChildrenUpdater
+            = new ViewTreeObserver.OnPreDrawListener() {
+        @Override
+        public boolean onPreDraw() {
+            updateChildren();
+            mChildrenUpdateRequested = false;
+            getViewTreeObserver().removeOnPreDrawListener(this);
+            return true;
+        }
+    };
+
+    public NotificationStackScrollLayout(Context context) {
+        this(context, null);
+    }
+
+    public NotificationStackScrollLayout(Context context, AttributeSet attrs) {
+        this(context, attrs, 0);
+    }
+
+    public NotificationStackScrollLayout(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public NotificationStackScrollLayout(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        initView(context);
+        if (DEBUG) {
+            setWillNotDraw(false);
+            mDebugPaint = new Paint();
+            mDebugPaint.setColor(0xffff0000);
+            mDebugPaint.setStrokeWidth(2);
+            mDebugPaint.setStyle(Paint.Style.STROKE);
+        }
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        if (DEBUG) {
+            int y = mCollapsedSize;
+            canvas.drawLine(0, y, getWidth(), y, mDebugPaint);
+            y = (int) (getLayoutHeight() - mBottomStackPeekSize - mCollapsedSize);
+            canvas.drawLine(0, y, getWidth(), y, mDebugPaint);
+            y = (int) getLayoutHeight();
+            canvas.drawLine(0, y, getWidth(), y, mDebugPaint);
+        }
+    }
+
+    private void initView(Context context) {
+        mScroller = new OverScroller(getContext());
+        setFocusable(true);
+        setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
+        setClipChildren(false);
+        final ViewConfiguration configuration = ViewConfiguration.get(context);
+        mTouchSlop = configuration.getScaledTouchSlop();
+        mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
+        mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
+        mOverscrollDistance = configuration.getScaledOverscrollDistance();
+        mOverflingDistance = configuration.getScaledOverflingDistance();
+        float densityScale = getResources().getDisplayMetrics().density;
+        float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
+        mSwipeHelper = new SwipeHelper(SwipeHelper.X, this, densityScale, pagingTouchSlop);
+
+        mSidePaddings = context.getResources()
+                .getDimensionPixelSize(R.dimen.notification_side_padding);
+        mCollapsedSize = context.getResources()
+                .getDimensionPixelSize(R.dimen.notification_min_height);
+        mBottomStackPeekSize = context.getResources()
+                .getDimensionPixelSize(R.dimen.bottom_stack_peek_amount);
+        mEmptyMarginBottom = context.getResources().getDimensionPixelSize(
+                R.dimen.notification_stack_margin_bottom);
+        mPaddingBetweenElements = context.getResources()
+                .getDimensionPixelSize(R.dimen.notification_padding);
+        mStackScrollAlgorithm = new StackScrollAlgorithm(context);
+    }
+
+    @Override
+    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+        int mode = MeasureSpec.getMode(widthMeasureSpec);
+        int size = MeasureSpec.getSize(widthMeasureSpec);
+        int childMeasureSpec = MeasureSpec.makeMeasureSpec(size - 2 * mSidePaddings, mode);
+        measureChildren(childMeasureSpec, heightMeasureSpec);
+    }
+
+    @Override
+    protected void onLayout(boolean changed, int l, int t, int r, int b) {
+
+        // we layout all our children centered on the top
+        float centerX = getWidth() / 2.0f;
+        for (int i = 0; i < getChildCount(); i++) {
+            View child = getChildAt(i);
+            float width = child.getMeasuredWidth();
+            float height = child.getMeasuredHeight();
+            child.layout((int) (centerX - width / 2.0f),
+                    0,
+                    (int) (centerX + width / 2.0f),
+                    (int) height);
+        }
+        setMaxLayoutHeight(getHeight() - mEmptyMarginBottom);
+        updateContentHeight();
+        updateScrollPositionIfNecessary();
+        requestChildrenUpdate();
+    }
+
+    public void setChildLocationsChangedListener(OnChildLocationsChangedListener listener) {
+        mListener = listener;
+    }
+
+    /**
+     * Returns the location the given child is currently rendered at.
+     *
+     * @param child the child to get the location for
+     * @return one of {@link ViewState}'s <code>LOCATION_*</code> constants
+     */
+    public int getChildLocation(View child) {
+        ViewState childViewState = mCurrentStackScrollState.getViewStateForView(child);
+        if (childViewState == null) {
+            return ViewState.LOCATION_UNKNOWN;
+        }
+        return childViewState.location;
+    }
+
+    private void setMaxLayoutHeight(int maxLayoutHeight) {
+        mMaxLayoutHeight = maxLayoutHeight;
+        updateAlgorithmHeightAndPadding();
+    }
+
+    private void updateAlgorithmHeightAndPadding() {
+        mStackScrollAlgorithm.setLayoutHeight(getLayoutHeight());
+        mStackScrollAlgorithm.setTopPadding(mTopPadding);
+    }
+
+    /**
+     * @return whether the height of the layout needs to be adapted, in order to ensure that the
+     *         last child is not in the bottom stack.
+     */
+    private boolean needsHeightAdaption() {
+        View lastChild = getLastChildNotGone();
+        View firstChild = getFirstChildNotGone();
+        boolean isLastChildExpanded = isViewExpanded(lastChild);
+        return isLastChildExpanded && lastChild != firstChild;
+    }
+
+    private boolean isViewExpanded(View view) {
+        if (view != null) {
+            ExpandableView expandView = (ExpandableView) view;
+            return expandView.getActualHeight() > mCollapsedSize;
+        }
+        return false;
+    }
+
+    /**
+     * Updates the children views according to the stack scroll algorithm. Call this whenever
+     * modifications to {@link #mOwnScrollY} are performed to reflect it in the view layout.
+     */
+    private void updateChildren() {
+        mCurrentStackScrollState.setScrollY(mOwnScrollY);
+        mStackScrollAlgorithm.getStackScrollState(mCurrentStackScrollState);
+        if (!isCurrentlyAnimating() && !mNeedsAnimation) {
+            applyCurrentState();
+        } else {
+            startAnimationToState();
+        }
+    }
+
+    private void requestChildrenUpdate() {
+        if (!mChildrenUpdateRequested) {
+            getViewTreeObserver().addOnPreDrawListener(mChildrenUpdater);
+            mChildrenUpdateRequested = true;
+            invalidate();
+        }
+    }
+
+    private boolean isCurrentlyAnimating() {
+        return mStateAnimator.isRunning();
+    }
+
+    private void updateScrollPositionIfNecessary() {
+        int scrollRange = getScrollRange();
+        if (scrollRange < mOwnScrollY) {
+            mOwnScrollY = scrollRange;
+        }
+    }
+
+    public int getTopPadding() {
+        return mTopPadding;
+    }
+
+    public void setTopPadding(int topPadding, boolean animate) {
+        if (mTopPadding != topPadding) {
+            mTopPadding = topPadding;
+            updateAlgorithmHeightAndPadding();
+            updateContentHeight();
+            if (animate) {
+                mTopPaddingNeedsAnimation = true;
+                mNeedsAnimation =  true;
+            }
+            requestChildrenUpdate();
+            if (mOnHeightChangedListener != null) {
+                mOnHeightChangedListener.onHeightChanged(null);
+            }
+        }
+    }
+
+    /**
+     * Update the height of the stack to a new height.
+     *
+     * @param height the new height of the stack
+     */
+    public void setStackHeight(float height) {
+        setIsExpanded(height > 0.0f);
+        int newStackHeight = (int) height;
+        int itemHeight = getItemHeight();
+        int bottomStackPeekSize = mBottomStackPeekSize;
+        int minStackHeight = itemHeight + bottomStackPeekSize;
+        int stackHeight;
+        if (newStackHeight - mTopPadding >= minStackHeight) {
+            setTranslationY(0);
+            stackHeight = newStackHeight;
+        } else {
+
+            // We did not reach the position yet where we actually start growing,
+            // so we translate the stack upwards.
+            int translationY = (newStackHeight - minStackHeight);
+            // A slight parallax effect is introduced in order for the stack to catch up with
+            // the top card.
+            float partiallyThere = (float) (newStackHeight - mTopPadding) / minStackHeight;
+            partiallyThere = Math.max(0, partiallyThere);
+            translationY += (1 - partiallyThere) * bottomStackPeekSize;
+            setTranslationY(translationY - mTopPadding);
+            stackHeight = (int) (height - (translationY - mTopPadding));
+        }
+        if (stackHeight != mCurrentStackHeight) {
+            mCurrentStackHeight = stackHeight;
+            updateAlgorithmHeightAndPadding();
+            requestChildrenUpdate();
+        }
+    }
+
+    /**
+     * Get the current height of the view. This is at most the msize of the view given by a the
+     * layout but it can also be made smaller by setting {@link #mCurrentStackHeight}
+     *
+     * @return either the layout height or the externally defined height, whichever is smaller
+     */
+    private int getLayoutHeight() {
+        return Math.min(mMaxLayoutHeight, mCurrentStackHeight);
+    }
+
+    public int getItemHeight() {
+        return mCollapsedSize;
+    }
+
+    public int getBottomStackPeekSize() {
+        return mBottomStackPeekSize;
+    }
+
+    public void setLongPressListener(View.OnLongClickListener listener) {
+        mSwipeHelper.setLongPressListener(listener);
+    }
+
+    public void onChildDismissed(View v) {
+        if (DEBUG) Log.v(TAG, "onChildDismissed: " + v);
+        final View veto = v.findViewById(R.id.veto);
+        if (veto != null && veto.getVisibility() != View.GONE) {
+            veto.performClick();
+        }
+        setSwipingInProgress(false);
+        mSwipedOutViews.add(v);
+    }
+
+    public void onBeginDrag(View v) {
+        setSwipingInProgress(true);
+    }
+
+    public void onDragCancelled(View v) {
+        setSwipingInProgress(false);
+    }
+
+    public View getChildAtPosition(MotionEvent ev) {
+        return getChildAtPosition(ev.getX(), ev.getY());
+    }
+
+    public ExpandableView getChildAtRawPosition(float touchX, float touchY) {
+        int[] location = new int[2];
+        getLocationOnScreen(location);
+        return getChildAtPosition(touchX - location[0], touchY - location[1]);
+    }
+
+    public ExpandableView getChildAtPosition(float touchX, float touchY) {
+        // find the view under the pointer, accounting for GONE views
+        final int count = getChildCount();
+        for (int childIdx = 0; childIdx < count; childIdx++) {
+            ExpandableView slidingChild = (ExpandableView) getChildAt(childIdx);
+            if (slidingChild.getVisibility() == GONE) {
+                continue;
+            }
+            float top = slidingChild.getTranslationY();
+            float bottom = top + slidingChild.getActualHeight();
+            int left = slidingChild.getLeft();
+            int right = slidingChild.getRight();
+
+            if (touchY >= top && touchY <= bottom && touchX >= left && touchX <= right) {
+                return slidingChild;
+            }
+        }
+        return null;
+    }
+
+    public boolean canChildBeExpanded(View v) {
+        return v instanceof ExpandableNotificationRow
+                && ((ExpandableNotificationRow) v).isExpandable();
+    }
+
+    public void setUserExpandedChild(View v, boolean userExpanded) {
+        if (v instanceof ExpandableNotificationRow) {
+            ((ExpandableNotificationRow) v).setUserExpanded(userExpanded);
+        }
+    }
+
+    public void setUserLockedChild(View v, boolean userLocked) {
+        if (v instanceof ExpandableNotificationRow) {
+            ((ExpandableNotificationRow) v).setUserLocked(userLocked);
+        }
+    }
+
+    public View getChildContentView(View v) {
+        return v;
+    }
+
+    public boolean canChildBeDismissed(View v) {
+        final View veto = v.findViewById(R.id.veto);
+        return (veto != null && veto.getVisibility() != View.GONE);
+    }
+
+    private void setSwipingInProgress(boolean isSwiped) {
+        mSwipingInProgress = isSwiped;
+        if(isSwiped) {
+            requestDisallowInterceptTouchEvent(true);
+        }
+    }
+
+    @Override
+    protected void onConfigurationChanged(Configuration newConfig) {
+        super.onConfigurationChanged(newConfig);
+        float densityScale = getResources().getDisplayMetrics().density;
+        mSwipeHelper.setDensityScale(densityScale);
+        float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
+        mSwipeHelper.setPagingTouchSlop(pagingTouchSlop);
+        initView(getContext());
+    }
+
+    public void dismissRowAnimated(View child, int vel) {
+        mSwipeHelper.dismissChild(child, vel);
+    }
+
+    @Override
+    public boolean onTouchEvent(MotionEvent ev) {
+        boolean scrollerWantsIt = false;
+        if (!mSwipingInProgress) {
+            scrollerWantsIt = onScrollTouch(ev);
+        }
+        boolean horizontalSwipeWantsIt = false;
+        if (!mIsBeingDragged) {
+            horizontalSwipeWantsIt = mSwipeHelper.onTouchEvent(ev);
+        }
+        return horizontalSwipeWantsIt || scrollerWantsIt || super.onTouchEvent(ev);
+    }
+
+    private boolean onScrollTouch(MotionEvent ev) {
+        initVelocityTrackerIfNotExists();
+        mVelocityTracker.addMovement(ev);
+
+        final int action = ev.getAction();
+
+        switch (action & MotionEvent.ACTION_MASK) {
+            case MotionEvent.ACTION_DOWN: {
+                if (getChildCount() == 0) {
+                    return false;
+                }
+                boolean isBeingDragged = !mScroller.isFinished();
+                setIsBeingDragged(isBeingDragged);
+
+                /*
+                 * If being flinged and user touches, stop the fling. isFinished
+                 * will be false if being flinged.
+                 */
+                if (!mScroller.isFinished()) {
+                    mScroller.abortAnimation();
+                }
+
+                // Remember where the motion event started
+                mLastMotionY = (int) ev.getY();
+                mActivePointerId = ev.getPointerId(0);
+                break;
+            }
+            case MotionEvent.ACTION_MOVE:
+                final int activePointerIndex = ev.findPointerIndex(mActivePointerId);
+                if (activePointerIndex == -1) {
+                    Log.e(TAG, "Invalid pointerId=" + mActivePointerId + " in onTouchEvent");
+                    break;
+                }
+
+                final int y = (int) ev.getY(activePointerIndex);
+                int deltaY = mLastMotionY - y;
+                if (!mIsBeingDragged && Math.abs(deltaY) > mTouchSlop) {
+                    setIsBeingDragged(true);
+                    if (deltaY > 0) {
+                        deltaY -= mTouchSlop;
+                    } else {
+                        deltaY += mTouchSlop;
+                    }
+                }
+                if (mIsBeingDragged) {
+                    // Scroll to follow the motion event
+                    mLastMotionY = y;
+
+                    final int oldX = mScrollX;
+                    final int oldY = mOwnScrollY;
+                    final int range = getScrollRange();
+                    final int overscrollMode = getOverScrollMode();
+                    final boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
+                            (overscrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);
+
+                    // Calling overScrollBy will call onOverScrolled, which
+                    // calls onScrollChanged if applicable.
+                    if (overScrollBy(0, deltaY, 0, mOwnScrollY,
+                            0, range, 0, mOverscrollDistance, true)) {
+                        // Break our velocity if we hit a scroll barrier.
+                        mVelocityTracker.clear();
+                    }
+                    // TODO: Overscroll
+//                    if (canOverscroll) {
+//                        final int pulledToY = oldY + deltaY;
+//                        if (pulledToY < 0) {
+//                            mEdgeGlowTop.onPull((float) deltaY / getHeight());
+//                            if (!mEdgeGlowBottom.isFinished()) {
+//                                mEdgeGlowBottom.onRelease();
+//                            }
+//                        } else if (pulledToY > range) {
+//                            mEdgeGlowBottom.onPull((float) deltaY / getHeight());
+//                            if (!mEdgeGlowTop.isFinished()) {
+//                                mEdgeGlowTop.onRelease();
+//                            }
+//                        }
+//                        if (mEdgeGlowTop != null
+//                                && (!mEdgeGlowTop.isFinished() || !mEdgeGlowBottom.isFinished())){
+//                            postInvalidateOnAnimation();
+//                        }
+//                    }
+                }
+                break;
+            case MotionEvent.ACTION_UP:
+                if (mIsBeingDragged) {
+                    final VelocityTracker velocityTracker = mVelocityTracker;
+                    velocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
+                    int initialVelocity = (int) velocityTracker.getYVelocity(mActivePointerId);
+
+                    if (getChildCount() > 0) {
+                        if ((Math.abs(initialVelocity) > mMinimumVelocity)) {
+                            fling(-initialVelocity);
+                        } else {
+                            if (mScroller.springBack(mScrollX, mOwnScrollY, 0, 0, 0,
+                                    getScrollRange())) {
+                                postInvalidateOnAnimation();
+                            }
+                        }
+                    }
+
+                    mActivePointerId = INVALID_POINTER;
+                    endDrag();
+                }
+                break;
+            case MotionEvent.ACTION_CANCEL:
+                if (mIsBeingDragged && getChildCount() > 0) {
+                    if (mScroller.springBack(mScrollX, mOwnScrollY, 0, 0, 0, getScrollRange())) {
+                        postInvalidateOnAnimation();
+                    }
+                    mActivePointerId = INVALID_POINTER;
+                    endDrag();
+                }
+                break;
+            case MotionEvent.ACTION_POINTER_DOWN: {
+                final int index = ev.getActionIndex();
+                mLastMotionY = (int) ev.getY(index);
+                mActivePointerId = ev.getPointerId(index);
+                break;
+            }
+            case MotionEvent.ACTION_POINTER_UP:
+                onSecondaryPointerUp(ev);
+                mLastMotionY = (int) ev.getY(ev.findPointerIndex(mActivePointerId));
+                break;
+        }
+        return true;
+    }
+
+    private void onSecondaryPointerUp(MotionEvent ev) {
+        final int pointerIndex = (ev.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >>
+                MotionEvent.ACTION_POINTER_INDEX_SHIFT;
+        final int pointerId = ev.getPointerId(pointerIndex);
+        if (pointerId == mActivePointerId) {
+            // This was our active pointer going up. Choose a new
+            // active pointer and adjust accordingly.
+            // TODO: Make this decision more intelligent.
+            final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
+            mLastMotionY = (int) ev.getY(newPointerIndex);
+            mActivePointerId = ev.getPointerId(newPointerIndex);
+            if (mVelocityTracker != null) {
+                mVelocityTracker.clear();
+            }
+        }
+    }
+
+    private void initVelocityTrackerIfNotExists() {
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        }
+    }
+
+    private void recycleVelocityTracker() {
+        if (mVelocityTracker != null) {
+            mVelocityTracker.recycle();
+            mVelocityTracker = null;
+        }
+    }
+
+    private void initOrResetVelocityTracker() {
+        if (mVelocityTracker == null) {
+            mVelocityTracker = VelocityTracker.obtain();
+        } else {
+            mVelocityTracker.clear();
+        }
+    }
+
+    @Override
+    public void computeScroll() {
+        if (mScroller.computeScrollOffset()) {
+            // This is called at drawing time by ViewGroup.
+            int oldX = mScrollX;
+            int oldY = mOwnScrollY;
+            int x = mScroller.getCurrX();
+            int y = mScroller.getCurrY();
+
+            if (oldX != x || oldY != y) {
+                final int range = getScrollRange();
+                final int overscrollMode = getOverScrollMode();
+                final boolean canOverscroll = overscrollMode == OVER_SCROLL_ALWAYS ||
+                        (overscrollMode == OVER_SCROLL_IF_CONTENT_SCROLLS && range > 0);
+
+                overScrollBy(x - oldX, y - oldY, oldX, oldY, 0, range,
+                        0, mOverflingDistance, false);
+                onScrollChanged(mScrollX, mOwnScrollY, oldX, oldY);
+
+                if (canOverscroll) {
+                    // TODO: Overscroll
+//                    if (y < 0 && oldY >= 0) {
+//                        mEdgeGlowTop.onAbsorb((int) mScroller.getCurrVelocity());
+//                    } else if (y > range && oldY <= range) {
+//                        mEdgeGlowBottom.onAbsorb((int) mScroller.getCurrVelocity());
+//                    }
+                }
+                updateChildren();
+            }
+
+            // Keep on drawing until the animation has finished.
+            postInvalidateOnAnimation();
+        }
+    }
+
+    private void customScrollTo(int y) {
+        mOwnScrollY = y;
+        updateChildren();
+    }
+
+    @Override
+    protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
+        // Treat animating scrolls differently; see #computeScroll() for why.
+        if (!mScroller.isFinished()) {
+            final int oldX = mScrollX;
+            final int oldY = mOwnScrollY;
+            mScrollX = scrollX;
+            mOwnScrollY = scrollY;
+            invalidateParentIfNeeded();
+            onScrollChanged(mScrollX, mOwnScrollY, oldX, oldY);
+            if (clampedY) {
+                mScroller.springBack(mScrollX, mOwnScrollY, 0, 0, 0, getScrollRange());
+            }
+            updateChildren();
+        } else {
+            customScrollTo(scrollY);
+            scrollTo(scrollX, mScrollY);
+        }
+    }
+
+    private int getScrollRange() {
+        int scrollRange = 0;
+        ExpandableView firstChild = (ExpandableView) getFirstChildNotGone();
+        if (firstChild != null) {
+            int contentHeight = getContentHeight();
+            int firstChildMaxExpandHeight = getMaxExpandHeight(firstChild);
+
+            scrollRange = Math.max(0, contentHeight - mMaxLayoutHeight + mBottomStackPeekSize);
+            if (scrollRange > 0) {
+                View lastChild = getLastChildNotGone();
+                if (isViewExpanded(lastChild)) {
+                    // last child is expanded, so we have to ensure that it can exit the
+                    // bottom stack
+                    scrollRange += mCollapsedSize + mPaddingBetweenElements;
+                }
+                // We want to at least be able collapse the first item and not ending in a weird
+                // end state.
+                scrollRange = Math.max(scrollRange, firstChildMaxExpandHeight - mCollapsedSize);
+            }
+        }
+        return scrollRange;
+    }
+
+    /**
+     * @return the first child which has visibility unequal to GONE
+     */
+    private View getFirstChildNotGone() {
+        int childCount = getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            View child = getChildAt(i);
+            if (child.getVisibility() != View.GONE) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @return the last child which has visibility unequal to GONE
+     */
+    private View getLastChildNotGone() {
+        int childCount = getChildCount();
+        for (int i = childCount - 1; i >= 0; i--) {
+            View child = getChildAt(i);
+            if (child.getVisibility() != View.GONE) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    private int getMaxExpandHeight(View view) {
+        if (view instanceof ExpandableNotificationRow) {
+            ExpandableNotificationRow row = (ExpandableNotificationRow) view;
+            return row.getIntrinsicHeight();
+        }
+        return view.getHeight();
+    }
+
+    private int getContentHeight() {
+        return mContentHeight;
+    }
+
+    private void updateContentHeight() {
+        int height = 0;
+        for (int i = 0; i < getChildCount(); i++) {
+            View child = getChildAt(i);
+            if (child.getVisibility() != View.GONE) {
+                if (height != 0) {
+                    // add the padding before this element
+                    height += mPaddingBetweenElements;
+                }
+                if (child instanceof ExpandableNotificationRow) {
+                    ExpandableNotificationRow row = (ExpandableNotificationRow) child;
+                    height += row.getIntrinsicHeight();
+                } else if (child instanceof ExpandableView) {
+                    ExpandableView expandableView = (ExpandableView) child;
+                    height += expandableView.getActualHeight();
+                }
+            }
+        }
+        mContentHeight = height + mTopPadding;
+    }
+
+    /**
+     * Fling the scroll view
+     *
+     * @param velocityY The initial velocity in the Y direction. Positive
+     *                  numbers mean that the finger/cursor is moving down the screen,
+     *                  which means we want to scroll towards the top.
+     */
+    private void fling(int velocityY) {
+        if (getChildCount() > 0) {
+            int height = (int) getLayoutHeight();
+            int bottom = getContentHeight();
+
+            mScroller.fling(mScrollX, mOwnScrollY, 0, velocityY, 0, 0, 0,
+                    Math.max(0, bottom - height), 0, height/2);
+
+            postInvalidateOnAnimation();
+        }
+    }
+
+    private void endDrag() {
+        setIsBeingDragged(false);
+
+        recycleVelocityTracker();
+
+        // TODO: Overscroll
+//        if (mEdgeGlowTop != null) {
+//            mEdgeGlowTop.onRelease();
+//            mEdgeGlowBottom.onRelease();
+//        }
+    }
+
+    @Override
+    public boolean onInterceptTouchEvent(MotionEvent ev) {
+        boolean scrollWantsIt = false;
+        if (!mSwipingInProgress) {
+            scrollWantsIt = onInterceptTouchEventScroll(ev);
+        }
+        boolean swipeWantsIt = false;
+        if (!mIsBeingDragged) {
+            swipeWantsIt = mSwipeHelper.onInterceptTouchEvent(ev);
+        }
+        return swipeWantsIt || scrollWantsIt ||
+                super.onInterceptTouchEvent(ev);
+    }
+
+    @Override
+    protected void onViewRemoved(View child) {
+        super.onViewRemoved(child);
+        ((ExpandableView) child).setOnHeightChangedListener(null);
+        mCurrentStackScrollState.removeViewStateForView(child);
+        mStackScrollAlgorithm.notifyChildrenChanged(this);
+        updateScrollStateForRemovedChild(child);
+        if (mIsExpanded) {
+
+            if (!mChildrenToAddAnimated.contains(child)) {
+                // Generate Animations
+                mChildrenToRemoveAnimated.add(child);
+                mNeedsAnimation = true;
+            } else {
+                mChildrenToAddAnimated.remove(child);
+            }
+        }
+    }
+
+    /**
+     * Updates the scroll position when a child was removed
+     *
+     * @param removedChild the removed child
+     */
+    private void updateScrollStateForRemovedChild(View removedChild) {
+        int startingPosition = getPositionInLinearLayout(removedChild);
+        int childHeight = removedChild.getHeight() + mPaddingBetweenElements;
+        int endPosition = startingPosition + childHeight;
+        if (endPosition <= mOwnScrollY) {
+            // This child is fully scrolled of the top, so we have to deduct its height from the
+            // scrollPosition
+            mOwnScrollY -= childHeight;
+        } else if (startingPosition < mOwnScrollY) {
+            // This child is currently being scrolled into, set the scroll position to the start of
+            // this child
+            mOwnScrollY = startingPosition;
+        }
+    }
+
+    private int getPositionInLinearLayout(View requestedChild) {
+        int position = 0;
+        for (int i = 0; i < getChildCount(); i++) {
+            View child = getChildAt(i);
+            if (child == requestedChild) {
+                return position;
+            }
+            if (child.getVisibility() != View.GONE) {
+                position += child.getHeight();
+                if (i < getChildCount()-1) {
+                    position += mPaddingBetweenElements;
+                }
+            }
+        }
+        return 0;
+    }
+
+    @Override
+    protected void onViewAdded(View child) {
+        super.onViewAdded(child);
+        mStackScrollAlgorithm.notifyChildrenChanged(this);
+        ((ExpandableView) child).setOnHeightChangedListener(this);
+        if (child.getVisibility() != View.GONE) {
+            generateAddAnimation(child);
+        }
+    }
+
+    public void generateAddAnimation(View child) {
+        if (mIsExpanded) {
+
+            // Generate Animations
+            mChildrenToAddAnimated.add(child);
+            mNeedsAnimation = true;
+        }
+    }
+
+    /**
+     * Change the position of child to a new location
+     *
+     * @param child the view to change the position for
+     * @param newIndex the new index
+     */
+    public void changeViewPosition(View child, int newIndex) {
+        if (child != null && child.getParent() == this) {
+            // TODO: handle this
+        }
+    }
+
+    private void startAnimationToState() {
+        if (mNeedsAnimation) {
+            generateChildHierarchyEvents();
+            mNeedsAnimation = false;
+        }
+        if (!mAnimationEvents.isEmpty()) {
+            mStateAnimator.startAnimationForEvents(mAnimationEvents, mCurrentStackScrollState);
+        } else {
+            applyCurrentState();
+        }
+    }
+
+    private void generateChildHierarchyEvents() {
+        generateChildAdditionEvents();
+        generateChildRemovalEvents();
+        generateTopPaddingEvent();
+        mNeedsAnimation = false;
+    }
+
+    private void generateChildRemovalEvents() {
+        for (View  child : mChildrenToRemoveAnimated) {
+            boolean childWasSwipedOut = mSwipedOutViews.contains(child);
+            int animationType = childWasSwipedOut
+                    ? AnimationEvent.ANIMATION_TYPE_REMOVE_SWIPED_OUT
+                    : AnimationEvent.ANIMATION_TYPE_REMOVE;
+            mAnimationEvents.add(new AnimationEvent(child, animationType));
+        }
+        mSwipedOutViews.clear();
+        mChildrenToRemoveAnimated.clear();
+    }
+
+    private void generateChildAdditionEvents() {
+        for (View  child : mChildrenToAddAnimated) {
+            mAnimationEvents.add(new AnimationEvent(child,
+                    AnimationEvent.ANIMATION_TYPE_ADD));
+        }
+        mChildrenToAddAnimated.clear();
+    }
+
+    private void generateTopPaddingEvent() {
+        if (mTopPaddingNeedsAnimation) {
+            mAnimationEvents.add(
+                    new AnimationEvent(null, AnimationEvent.ANIMATION_TYPE_TOP_PADDING_CHANGED));
+        }
+        mTopPaddingNeedsAnimation = false;
+    }
+
+    private boolean onInterceptTouchEventScroll(MotionEvent ev) {
+        /*
+         * This method JUST determines whether we want to intercept the motion.
+         * If we return true, onMotionEvent will be called and we do the actual
+         * scrolling there.
+         */
+
+        /*
+        * Shortcut the most recurring case: the user is in the dragging
+        * state and he is moving his finger.  We want to intercept this
+        * motion.
+        */
+        final int action = ev.getAction();
+        if ((action == MotionEvent.ACTION_MOVE) && (mIsBeingDragged)) {
+            return true;
+        }
+
+        /*
+         * Don't try to intercept touch if we can't scroll anyway.
+         */
+        if (mOwnScrollY == 0 && getScrollRange() == 0) {
+            return false;
+        }
+
+        switch (action & MotionEvent.ACTION_MASK) {
+            case MotionEvent.ACTION_MOVE: {
+                /*
+                 * mIsBeingDragged == false, otherwise the shortcut would have caught it. Check
+                 * whether the user has moved far enough from his original down touch.
+                 */
+
+                /*
+                * Locally do absolute value. mLastMotionY is set to the y value
+                * of the down event.
+                */
+                final int activePointerId = mActivePointerId;
+                if (activePointerId == INVALID_POINTER) {
+                    // If we don't have a valid id, the touch down wasn't on content.
+                    break;
+                }
+
+                final int pointerIndex = ev.findPointerIndex(activePointerId);
+                if (pointerIndex == -1) {
+                    Log.e(TAG, "Invalid pointerId=" + activePointerId
+                            + " in onInterceptTouchEvent");
+                    break;
+                }
+
+                final int y = (int) ev.getY(pointerIndex);
+                final int yDiff = Math.abs(y - mLastMotionY);
+                if (yDiff > mTouchSlop) {
+                    setIsBeingDragged(true);
+                    mLastMotionY = y;
+                    initVelocityTrackerIfNotExists();
+                    mVelocityTracker.addMovement(ev);
+                }
+                break;
+            }
+
+            case MotionEvent.ACTION_DOWN: {
+                final int y = (int) ev.getY();
+                if (getChildAtPosition(ev.getX(), y) == null) {
+                    setIsBeingDragged(false);
+                    recycleVelocityTracker();
+                    break;
+                }
+
+                /*
+                 * Remember location of down touch.
+                 * ACTION_DOWN always refers to pointer index 0.
+                 */
+                mLastMotionY = y;
+                mActivePointerId = ev.getPointerId(0);
+
+                initOrResetVelocityTracker();
+                mVelocityTracker.addMovement(ev);
+                /*
+                * If being flinged and user touches the screen, initiate drag;
+                * otherwise don't.  mScroller.isFinished should be false when
+                * being flinged.
+                */
+                boolean isBeingDragged = !mScroller.isFinished();
+                setIsBeingDragged(isBeingDragged);
+                break;
+            }
+
+            case MotionEvent.ACTION_CANCEL:
+            case MotionEvent.ACTION_UP:
+                /* Release the drag */
+                setIsBeingDragged(false);
+                mActivePointerId = INVALID_POINTER;
+                recycleVelocityTracker();
+                if (mScroller.springBack(mScrollX, mOwnScrollY, 0, 0, 0, getScrollRange())) {
+                    postInvalidateOnAnimation();
+                }
+                break;
+            case MotionEvent.ACTION_POINTER_UP:
+                onSecondaryPointerUp(ev);
+                break;
+        }
+
+        /*
+        * The only time we want to intercept motion events is if we are in the
+        * drag mode.
+        */
+        return mIsBeingDragged;
+    }
+
+    private void setIsBeingDragged(boolean isDragged) {
+        mIsBeingDragged = isDragged;
+        if (isDragged) {
+            requestDisallowInterceptTouchEvent(true);
+            mSwipeHelper.removeLongPressCallback();
+        }
+    }
+
+    @Override
+    public void onWindowFocusChanged(boolean hasWindowFocus) {
+        super.onWindowFocusChanged(hasWindowFocus);
+        if (!hasWindowFocus) {
+            mSwipeHelper.removeLongPressCallback();
+        }
+    }
+
+    @Override
+    public boolean isScrolledToTop() {
+        return mOwnScrollY == 0;
+    }
+
+    @Override
+    public boolean isScrolledToBottom() {
+        return mOwnScrollY >= getScrollRange();
+    }
+
+    @Override
+    public View getHostView() {
+        return this;
+    }
+
+    public int getEmptyBottomMargin() {
+        int emptyMargin = mMaxLayoutHeight - mContentHeight;
+        if (needsHeightAdaption()) {
+            emptyMargin = emptyMargin - mCollapsedSize - mBottomStackPeekSize;
+        }
+        return Math.max(emptyMargin, 0);
+    }
+
+    public void onExpansionStarted() {
+        mStackScrollAlgorithm.onExpansionStarted(mCurrentStackScrollState);
+    }
+
+    public void onExpansionStopped() {
+        mStackScrollAlgorithm.onExpansionStopped();
+    }
+
+    private void setIsExpanded(boolean isExpanded) {
+        mIsExpanded = isExpanded;
+        mStackScrollAlgorithm.setIsExpanded(isExpanded);
+        if (!isExpanded) {
+            mOwnScrollY = 0;
+        }
+    }
+
+    @Override
+    public void onHeightChanged(ExpandableView view) {
+        if (mListenForHeightChanges && !isCurrentlyAnimating()) {
+            updateContentHeight();
+            updateScrollPositionIfNecessary();
+            if (mOnHeightChangedListener != null) {
+                mOnHeightChangedListener.onHeightChanged(view);
+            }
+            requestChildrenUpdate();
+        }
+    }
+
+    public void setOnHeightChangedListener(
+            ExpandableView.OnHeightChangedListener mOnHeightChangedListener) {
+        this.mOnHeightChangedListener = mOnHeightChangedListener;
+    }
+
+    public void onChildAnimationFinished() {
+        requestChildrenUpdate();
+        mAnimationEvents.clear();
+    }
+
+    private void applyCurrentState() {
+        mListenForHeightChanges = false;
+        mCurrentStackScrollState.apply();
+        mListenForHeightChanges = true;
+        if (mListener != null) {
+            mListener.onChildLocationsChanged(this);
+        }
+    }
+
+    /**
+     * A listener that is notified when some child locations might have changed.
+     */
+    public interface OnChildLocationsChangedListener {
+        public void onChildLocationsChanged(NotificationStackScrollLayout stackScrollLayout);
+    }
+
+    static class AnimationEvent {
+
+        static int ANIMATION_TYPE_ADD = 1;
+        static int ANIMATION_TYPE_REMOVE = 2;
+        static int ANIMATION_TYPE_REMOVE_SWIPED_OUT = 3;
+        static int ANIMATION_TYPE_TOP_PADDING_CHANGED = 4;
+
+        final long eventStartTime;
+        final View changingView;
+        final int animationType;
+
+        AnimationEvent(View view, int type) {
+            eventStartTime = AnimationUtils.currentAnimationTimeMillis();
+            changingView = view;
+            animationType = type;
+        }
+    }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/PiecewiseLinearIndentationFunctor.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/PiecewiseLinearIndentationFunctor.java
new file mode 100644
index 0000000..38b544f
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/PiecewiseLinearIndentationFunctor.java
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.stack;
+
+import java.util.ArrayList;
+
+/**
+ * A Functor which interpolates the stack distance linearly based on base values.
+ * The base values are based on an interpolation between a linear function and a
+ * quadratic function
+ */
+public class PiecewiseLinearIndentationFunctor extends StackIndentationFunctor {
+
+    private final ArrayList<Float> mBaseValues;
+    private final float mLinearPart;
+
+    /**
+     * @param maxItemsInStack The maximum number of items which should be visible at the same time,
+     *                        i.e the function returns totalTransitionDistance for the element with
+     *                        index maxItemsInStack
+     * @param peekSize The visual appearance of this is how far the cards in the stack peek
+     *                 out below the top card and it is measured in real pixels.
+     *                 Note that the visual appearance does not necessarily always correspond to
+     *                 the actual visual distance below the top card but is a maximum,
+     *                 achieved when the next card just starts transitioning into the stack and
+     *                 the stack is full.
+     *                 If totalTransitionDistance is equal to this, we directly start at the peek,
+     *                 otherwise the first element transitions between 0 and
+     *                 totalTransitionDistance - peekSize.
+     *                 Visualization:
+     *           ---------------------------------------------------   ---
+     *          |                                                   |   |
+     *          |                  FIRST ITEM                       |   | <- totalTransitionDistance
+     *          |                                                   |   |
+     *          |---------------------------------------------------|   |   ---
+     *          |__________________SECOND ITEM______________________|   |    |  <- peekSize
+     *          |===================================================|  _|_  _|_
+     *
+     * @param totalTransitionDistance The total transition distance an element has to go through
+     * @param linearPart The interpolation factor between the linear and the quadratic amount taken.
+     *                   This factor must be somewhere in [0 , 1]
+     */
+    PiecewiseLinearIndentationFunctor(int maxItemsInStack,
+                                      int peekSize,
+                                      int totalTransitionDistance,
+                                      float linearPart) {
+        super(maxItemsInStack, peekSize, totalTransitionDistance);
+        mBaseValues = new ArrayList<Float>(maxItemsInStack+1);
+        initBaseValues();
+        mLinearPart = linearPart;
+    }
+
+    private void initBaseValues() {
+        int sumOfSquares = getSumOfSquares(mMaxItemsInStack-1);
+        int totalWeight = 0;
+        mBaseValues.add(0.0f);
+        for (int i = 0; i < mMaxItemsInStack - 1; i++) {
+            totalWeight += (mMaxItemsInStack - i - 1) * (mMaxItemsInStack - i - 1);
+            mBaseValues.add((float) totalWeight / sumOfSquares);
+        }
+    }
+
+    /**
+     * Get the sum of squares up to and including n, i.e sum(i * i, 1, n)
+     *
+     * @param n the maximum square to include
+     * @return
+     */
+    private int getSumOfSquares(int n) {
+        return n * (n + 1) * (2 * n + 1) / 6;
+    }
+
+    @Override
+    public float getValue(float itemsBefore) {
+        if (mStackStartsAtPeek) {
+            // We directly start at the stack, so no initial interpolation.
+            itemsBefore++;
+        }
+        if (itemsBefore < 0) {
+            return 0;
+        } else if (itemsBefore >= mMaxItemsInStack) {
+            return mTotalTransitionDistance;
+        }
+        int below = (int) itemsBefore;
+        float partialIn = itemsBefore - below;
+
+        if (below == 0) {
+            return mDistanceToPeekStart * partialIn;
+        } else {
+            float result = mDistanceToPeekStart;
+            float progress = mBaseValues.get(below - 1) * (1 - partialIn)
+                    + mBaseValues.get(below) * partialIn;
+            result += (progress * (1 - mLinearPart)
+                    + (itemsBefore - 1) / (mMaxItemsInStack - 1)  * mLinearPart) * mPeekSize;
+            return result;
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackIndentationFunctor.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackIndentationFunctor.java
new file mode 100644
index 0000000..f72947a
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackIndentationFunctor.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.stack;
+
+/**
+ * A functor which can be queried for offset given the number of items before it.
+ */
+public abstract class StackIndentationFunctor {
+
+    protected final int mTotalTransitionDistance;
+    protected final int mDistanceToPeekStart;
+    protected int mMaxItemsInStack;
+    protected int mPeekSize;
+    protected boolean mStackStartsAtPeek;
+
+    /**
+     * @param maxItemsInStack The maximum number of items which should be visible at the same time,
+     *                        i.e the function returns totalTransitionDistance for the element with
+     *                        index maxItemsInStack
+     * @param peekSize The visual appearance of this is how far the cards in the stack peek
+     *                 out below the top card and it is measured in real pixels.
+     *                 Note that the visual appearance does not necessarily always correspond to
+     *                 the actual visual distance below the top card but is a maximum,
+     *                 achieved when the next card just starts transitioning into the stack and
+     *                 the stack is full.
+     *                 If totalTransitionDistance is equal to this, we directly start at the peek,
+     *                 otherwise the first element transitions between 0 and
+     *                 totalTransitionDistance - peekSize.
+     *                 Visualization:
+     *           ---------------------------------------------------   ---
+     *          |                                                   |   |
+     *          |                  FIRST ITEM                       |   | <- totalTransitionDistance
+     *          |                                                   |   |
+     *          |---------------------------------------------------|   |   ---
+     *          |__________________SECOND ITEM______________________|   |    |  <- peekSize
+     *          |===================================================|  _|_  _|_
+     *
+     * @param totalTransitionDistance The total transition distance an element has to go through
+     */
+    StackIndentationFunctor(int maxItemsInStack, int peekSize, int totalTransitionDistance) {
+        mTotalTransitionDistance = totalTransitionDistance;
+        mDistanceToPeekStart = mTotalTransitionDistance - peekSize;
+        mStackStartsAtPeek = mDistanceToPeekStart == 0;
+        mMaxItemsInStack = maxItemsInStack;
+        mPeekSize = peekSize;
+
+    }
+
+    public void setPeekSize(int mPeekSize) {
+        this.mPeekSize = mPeekSize;
+    }
+
+    /**
+     * Gets the offset of this Functor given a the quantity of items before it
+     *
+     * @param itemsBefore how many items are already in the stack before this element
+     * @return the offset
+     */
+    public abstract float getValue(float itemsBefore);
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
new file mode 100644
index 0000000..09d8d50
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -0,0 +1,612 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.stack;
+
+import android.content.Context;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.systemui.R;
+import com.android.systemui.statusbar.ExpandableNotificationRow;
+import com.android.systemui.statusbar.ExpandableView;
+
+import java.util.ArrayList;
+
+/**
+ * The Algorithm of the {@link com.android.systemui.statusbar.stack
+ * .NotificationStackScrollLayout} which can be queried for {@link com.android.systemui.statusbar
+ * .stack.StackScrollState}
+ */
+public class StackScrollAlgorithm {
+
+    private static final String LOG_TAG = "StackScrollAlgorithm";
+
+    private static final int MAX_ITEMS_IN_BOTTOM_STACK = 3;
+    private static final int MAX_ITEMS_IN_TOP_STACK = 3;
+
+    private int mPaddingBetweenElements;
+    private int mCollapsedSize;
+    private int mTopStackPeekSize;
+    private int mBottomStackPeekSize;
+    private int mZDistanceBetweenElements;
+    private int mZBasicHeight;
+
+    private StackIndentationFunctor mTopStackIndentationFunctor;
+    private StackIndentationFunctor mBottomStackIndentationFunctor;
+
+    private int mLayoutHeight;
+
+    /** mLayoutHeight - mTopPadding */
+    private int mInnerHeight;
+    private int mTopPadding;
+    private StackScrollAlgorithmState mTempAlgorithmState = new StackScrollAlgorithmState();
+    private boolean mIsExpansionChanging;
+    private int mFirstChildMaxHeight;
+    private boolean mIsExpanded;
+    private ExpandableView mFirstChildWhileExpanding;
+    private boolean mExpandedOnStart;
+    private int mTopStackTotalSize;
+
+    public StackScrollAlgorithm(Context context) {
+        initConstants(context);
+    }
+
+    private void initConstants(Context context) {
+        mPaddingBetweenElements = context.getResources()
+                .getDimensionPixelSize(R.dimen.notification_padding);
+        mCollapsedSize = context.getResources()
+                .getDimensionPixelSize(R.dimen.notification_min_height);
+        mTopStackPeekSize = context.getResources()
+                .getDimensionPixelSize(R.dimen.top_stack_peek_amount);
+        mBottomStackPeekSize = context.getResources()
+                .getDimensionPixelSize(R.dimen.bottom_stack_peek_amount);
+        mZDistanceBetweenElements = context.getResources()
+                .getDimensionPixelSize(R.dimen.z_distance_between_notifications);
+        mZBasicHeight = (MAX_ITEMS_IN_BOTTOM_STACK + 1) * mZDistanceBetweenElements;
+        mTopStackTotalSize = mCollapsedSize + mPaddingBetweenElements;
+        mTopStackIndentationFunctor = new PiecewiseLinearIndentationFunctor(
+                MAX_ITEMS_IN_TOP_STACK,
+                mTopStackPeekSize,
+                mTopStackTotalSize,
+                0.5f);
+        mBottomStackIndentationFunctor = new PiecewiseLinearIndentationFunctor(
+                MAX_ITEMS_IN_BOTTOM_STACK,
+                mBottomStackPeekSize,
+                mCollapsedSize + mBottomStackPeekSize + mPaddingBetweenElements,
+                0.5f);
+    }
+
+
+    public void getStackScrollState(StackScrollState resultState) {
+        // The state of the local variables are saved in an algorithmState to easily subdivide it
+        // into multiple phases.
+        StackScrollAlgorithmState algorithmState = mTempAlgorithmState;
+
+        // First we reset the view states to their default values.
+        resultState.resetViewStates();
+
+        algorithmState.itemsInTopStack = 0.0f;
+        algorithmState.partialInTop = 0.0f;
+        algorithmState.lastTopStackIndex = 0;
+        algorithmState.scrolledPixelsTop = 0;
+        algorithmState.itemsInBottomStack = 0.0f;
+        algorithmState.partialInBottom = 0.0f;
+        algorithmState.scrollY = resultState.getScrollY() + mCollapsedSize;
+
+        updateVisibleChildren(resultState, algorithmState);
+
+        // Phase 1:
+        findNumberOfItemsInTopStackAndUpdateState(resultState, algorithmState);
+
+        // Phase 2:
+        updatePositionsForState(resultState, algorithmState);
+
+        // Phase 3:
+        updateZValuesForState(resultState, algorithmState);
+    }
+
+    /**
+     * Update the visible children on the state.
+     */
+    private void updateVisibleChildren(StackScrollState resultState,
+            StackScrollAlgorithmState state) {
+        ViewGroup hostView = resultState.getHostView();
+        int childCount = hostView.getChildCount();
+        state.visibleChildren.clear();
+        state.visibleChildren.ensureCapacity(childCount);
+        for (int i = 0; i < childCount; i++) {
+            ExpandableView v = (ExpandableView) hostView.getChildAt(i);
+            if (v.getVisibility() != View.GONE) {
+                state.visibleChildren.add(v);
+            }
+        }
+    }
+
+    /**
+     * Determine the positions for the views. This is the main part of the algorithm.
+     *
+     * @param resultState The result state to update if a change to the properties of a child occurs
+     * @param algorithmState The state in which the current pass of the algorithm is currently in
+     *                       and which will be updated
+     */
+    private void updatePositionsForState(StackScrollState resultState,
+            StackScrollAlgorithmState algorithmState) {
+
+        // The starting position of the bottom stack peek
+        float bottomPeekStart = mInnerHeight - mBottomStackPeekSize;
+
+        // The position where the bottom stack starts.
+        float bottomStackStart = bottomPeekStart - mCollapsedSize;
+
+        // The y coordinate of the current child.
+        float currentYPosition = 0.0f;
+
+        // How far in is the element currently transitioning into the bottom stack.
+        float yPositionInScrollView = 0.0f;
+
+        int childCount = algorithmState.visibleChildren.size();
+        int numberOfElementsCompletelyIn = (int) algorithmState.itemsInTopStack;
+        for (int i = 0; i < childCount; i++) {
+            ExpandableView child = algorithmState.visibleChildren.get(i);
+            StackScrollState.ViewState childViewState = resultState.getViewStateForView(child);
+            childViewState.location = StackScrollState.ViewState.LOCATION_UNKNOWN;
+            int childHeight = getMaxAllowedChildHeight(child);
+            float yPositionInScrollViewAfterElement = yPositionInScrollView
+                    + childHeight
+                    + mPaddingBetweenElements;
+            float scrollOffset = yPositionInScrollView - algorithmState.scrollY + mCollapsedSize;
+
+            if (i == algorithmState.lastTopStackIndex + 1) {
+                // Normally the position of this child is the position in the regular scrollview,
+                // but if the two stacks are very close to each other,
+                // then have have to push it even more upwards to the position of the bottom
+                // stack start.
+                currentYPosition = Math.min(scrollOffset, bottomStackStart);
+            }
+            childViewState.yTranslation = currentYPosition;
+
+            // The y position after this element
+            float nextYPosition = currentYPosition + childHeight +
+                    mPaddingBetweenElements;
+
+            if (i <= algorithmState.lastTopStackIndex) {
+                // Case 1:
+                // We are in the top Stack
+                updateStateForTopStackChild(algorithmState,
+                        numberOfElementsCompletelyIn, i, childHeight, childViewState, scrollOffset);
+                clampYTranslation(childViewState, childHeight);
+                // check if we are overlapping with the bottom stack
+                if (childViewState.yTranslation + childHeight + mPaddingBetweenElements
+                        >= bottomStackStart && !mIsExpansionChanging && i != 0) {
+                    // TODO: handle overlapping sizes with end stack better
+                    // we just collapse this element
+                    childViewState.height = mCollapsedSize;
+                }
+            } else if (nextYPosition >= bottomStackStart) {
+                // Case 2:
+                // We are in the bottom stack.
+                if (currentYPosition >= bottomStackStart) {
+                    // According to the regular scroll view we are fully translated out of the
+                    // bottom of the screen so we are fully in the bottom stack
+                    updateStateForChildFullyInBottomStack(algorithmState,
+                            bottomStackStart, childViewState, childHeight);
+                } else {
+                    // According to the regular scroll view we are currently translating out of /
+                    // into the bottom of the screen
+                    updateStateForChildTransitioningInBottom(algorithmState,
+                            bottomStackStart, bottomPeekStart, currentYPosition,
+                            childViewState, childHeight);
+                }
+            } else {
+                // Case 3:
+                // We are in the regular scroll area.
+                childViewState.location = StackScrollState.ViewState.LOCATION_MAIN_AREA;
+                clampYTranslation(childViewState, childHeight);
+            }
+
+            // The first card is always rendered.
+            if (i == 0) {
+                childViewState.alpha = 1.0f;
+                childViewState.yTranslation = 0;
+                childViewState.location = StackScrollState.ViewState.LOCATION_FIRST_CARD;
+            }
+            if (childViewState.location == StackScrollState.ViewState.LOCATION_UNKNOWN) {
+                Log.wtf(LOG_TAG, "Failed to assign location for child " + i);
+            }
+            currentYPosition = childViewState.yTranslation + childHeight + mPaddingBetweenElements;
+            yPositionInScrollView = yPositionInScrollViewAfterElement;
+
+            childViewState.yTranslation += mTopPadding;
+        }
+    }
+
+    /**
+     * Clamp the yTranslation both up and down to valid positions.
+     *
+     * @param childViewState the view state of the child
+     * @param childHeight the height of this child
+     */
+    private void clampYTranslation(StackScrollState.ViewState childViewState, int childHeight) {
+        clampPositionToBottomStackStart(childViewState, childHeight);
+        clampPositionToTopStackEnd(childViewState, childHeight);
+    }
+
+    /**
+     * Clamp the yTranslation of the child down such that its end is at most on the beginning of
+     * the bottom stack.
+     *
+     * @param childViewState the view state of the child
+     * @param childHeight the height of this child
+     */
+    private void clampPositionToBottomStackStart(StackScrollState.ViewState childViewState,
+            int childHeight) {
+        childViewState.yTranslation = Math.min(childViewState.yTranslation,
+                mInnerHeight - mBottomStackPeekSize - childHeight);
+    }
+
+    /**
+     * Clamp the yTranslation of the child up such that its end is at lest on the end of the top
+     * stack.get
+     *
+     * @param childViewState the view state of the child
+     * @param childHeight the height of this child
+     */
+    private void clampPositionToTopStackEnd(StackScrollState.ViewState childViewState,
+            int childHeight) {
+        childViewState.yTranslation = Math.max(childViewState.yTranslation,
+                mCollapsedSize - childHeight);
+    }
+
+    private int getMaxAllowedChildHeight(View child) {
+        if (child instanceof ExpandableNotificationRow) {
+            ExpandableNotificationRow row = (ExpandableNotificationRow) child;
+            return row.getIntrinsicHeight();
+        } else if (child instanceof ExpandableView) {
+            ExpandableView expandableView = (ExpandableView) child;
+            return expandableView.getActualHeight();
+        }
+        return child == null? mCollapsedSize : child.getHeight();
+    }
+
+    private void updateStateForChildTransitioningInBottom(StackScrollAlgorithmState algorithmState,
+            float transitioningPositionStart, float bottomPeakStart, float currentYPosition,
+            StackScrollState.ViewState childViewState, int childHeight) {
+
+        // This is the transitioning element on top of bottom stack, calculate how far we are in.
+        algorithmState.partialInBottom = 1.0f - (
+                (transitioningPositionStart - currentYPosition) / (childHeight +
+                        mPaddingBetweenElements));
+
+        // the offset starting at the transitionPosition of the bottom stack
+        float offset = mBottomStackIndentationFunctor.getValue(algorithmState.partialInBottom);
+        algorithmState.itemsInBottomStack += algorithmState.partialInBottom;
+        childViewState.yTranslation = transitioningPositionStart + offset - childHeight
+                - mPaddingBetweenElements;
+
+        // We want at least to be at the end of the top stack when collapsing
+        clampPositionToTopStackEnd(childViewState, childHeight);
+        childViewState.location = StackScrollState.ViewState.LOCATION_MAIN_AREA;
+    }
+
+    private void updateStateForChildFullyInBottomStack(StackScrollAlgorithmState algorithmState,
+            float transitioningPositionStart, StackScrollState.ViewState childViewState,
+            int childHeight) {
+
+        float currentYPosition;
+        algorithmState.itemsInBottomStack += 1.0f;
+        if (algorithmState.itemsInBottomStack < MAX_ITEMS_IN_BOTTOM_STACK) {
+            // We are visually entering the bottom stack
+            currentYPosition = transitioningPositionStart
+                    + mBottomStackIndentationFunctor.getValue(algorithmState.itemsInBottomStack)
+                    - mPaddingBetweenElements;
+            childViewState.location = StackScrollState.ViewState.LOCATION_BOTTOM_STACK_PEEKING;
+        } else {
+            // we are fully inside the stack
+            if (algorithmState.itemsInBottomStack > MAX_ITEMS_IN_BOTTOM_STACK + 2) {
+                childViewState.alpha = 0.0f;
+            } else if (algorithmState.itemsInBottomStack
+                    > MAX_ITEMS_IN_BOTTOM_STACK + 1) {
+                childViewState.alpha = 1.0f - algorithmState.partialInBottom;
+            }
+            childViewState.location = StackScrollState.ViewState.LOCATION_BOTTOM_STACK_HIDDEN;
+            currentYPosition = mInnerHeight;
+        }
+        childViewState.yTranslation = currentYPosition - childHeight;
+        clampPositionToTopStackEnd(childViewState, childHeight);
+    }
+
+    private void updateStateForTopStackChild(StackScrollAlgorithmState algorithmState,
+            int numberOfElementsCompletelyIn, int i, int childHeight,
+            StackScrollState.ViewState childViewState, float scrollOffset) {
+
+
+        // First we calculate the index relative to the current stack window of size at most
+        // {@link #MAX_ITEMS_IN_TOP_STACK}
+        int paddedIndex = i - 1
+                - Math.max(numberOfElementsCompletelyIn - MAX_ITEMS_IN_TOP_STACK, 0);
+        if (paddedIndex >= 0) {
+
+            // We are currently visually entering the top stack
+            float distanceToStack = childHeight - algorithmState.scrolledPixelsTop;
+            if (i == algorithmState.lastTopStackIndex && distanceToStack > mTopStackTotalSize) {
+
+                // Child is currently translating into stack but not yet inside slow down zone.
+                // Handle it like the regular scrollview.
+                childViewState.yTranslation = scrollOffset;
+            } else {
+                // Apply stacking logic.
+                float numItemsBefore;
+                if (i == algorithmState.lastTopStackIndex) {
+                    numItemsBefore = 1.0f - (distanceToStack / mTopStackTotalSize);
+                } else {
+                    numItemsBefore = algorithmState.itemsInTopStack - i;
+                }
+                // The end position of the current child
+                float currentChildEndY = mCollapsedSize + mTopStackTotalSize -
+                        mTopStackIndentationFunctor.getValue(numItemsBefore);
+                childViewState.yTranslation = currentChildEndY - childHeight;
+            }
+            childViewState.location = StackScrollState.ViewState.LOCATION_TOP_STACK_PEEKING;
+        } else {
+            if (paddedIndex == -1) {
+                childViewState.alpha = 1.0f - algorithmState.partialInTop;
+            } else {
+                // We are hidden behind the top card and faded out, so we can hide ourselves.
+                childViewState.alpha = 0.0f;
+            }
+            childViewState.yTranslation = mCollapsedSize - childHeight;
+            childViewState.location = StackScrollState.ViewState.LOCATION_TOP_STACK_HIDDEN;
+        }
+
+
+    }
+
+    /**
+     * Find the number of items in the top stack and update the result state if needed.
+     *
+     * @param resultState The result state to update if a height change of an child occurs
+     * @param algorithmState The state in which the current pass of the algorithm is currently in
+     *                       and which will be updated
+     */
+    private void findNumberOfItemsInTopStackAndUpdateState(StackScrollState resultState,
+            StackScrollAlgorithmState algorithmState) {
+
+        // The y Position if the element would be in a regular scrollView
+        float yPositionInScrollView = 0.0f;
+        int childCount = algorithmState.visibleChildren.size();
+
+        // find the number of elements in the top stack.
+        for (int i = 0; i < childCount; i++) {
+            ExpandableView child = algorithmState.visibleChildren.get(i);
+            StackScrollState.ViewState childViewState = resultState.getViewStateForView(child);
+            int childHeight = getMaxAllowedChildHeight(child);
+            float yPositionInScrollViewAfterElement = yPositionInScrollView
+                    + childHeight
+                    + mPaddingBetweenElements;
+            if (yPositionInScrollView < algorithmState.scrollY) {
+                if (i == 0 && algorithmState.scrollY == mCollapsedSize) {
+
+                    // The starting position of the bottom stack peek
+                    int bottomPeekStart = mInnerHeight - mBottomStackPeekSize;
+                    // Collapse and expand the first child while the shade is being expanded
+                    float maxHeight = mIsExpansionChanging && child == mFirstChildWhileExpanding
+                            ? mFirstChildMaxHeight
+                            : childHeight;
+                    childViewState.height = (int) Math.max(Math.min(bottomPeekStart, maxHeight),
+                            mCollapsedSize);
+                    algorithmState.itemsInTopStack = 1.0f;
+
+                } else if (yPositionInScrollViewAfterElement < algorithmState.scrollY) {
+                    // According to the regular scroll view we are fully off screen
+                    algorithmState.itemsInTopStack += 1.0f;
+                    if (i == 0) {
+                        childViewState.height = mCollapsedSize;
+                    }
+                } else {
+                    // According to the regular scroll view we are partially off screen
+                    // If it is expanded we have to collapse it to a new size
+                    float newSize = yPositionInScrollViewAfterElement
+                            - mPaddingBetweenElements
+                            - algorithmState.scrollY;
+
+                    if (i == 0) {
+                        newSize += mCollapsedSize;
+                    }
+
+                    // How much did we scroll into this child
+                    algorithmState.scrolledPixelsTop = childHeight - newSize;
+                    algorithmState.partialInTop = (algorithmState.scrolledPixelsTop) / (childHeight
+                            + mPaddingBetweenElements);
+
+                    // Our element can be expanded, so this can get negative
+                    algorithmState.partialInTop = Math.max(0.0f, algorithmState.partialInTop);
+                    algorithmState.itemsInTopStack += algorithmState.partialInTop;
+                    newSize = Math.max(mCollapsedSize, newSize);
+                    if (i == 0) {
+                        childViewState.height = (int) newSize;
+                    }
+                    algorithmState.lastTopStackIndex = i;
+                    break;
+                }
+            } else {
+                algorithmState.lastTopStackIndex = i - 1;
+                // We are already past the stack so we can end the loop
+                break;
+            }
+            yPositionInScrollView = yPositionInScrollViewAfterElement;
+        }
+    }
+
+    /**
+     * Calculate the Z positions for all children based on the number of items in both stacks and
+     * save it in the resultState
+     *
+     * @param resultState The result state to update the zTranslation values
+     * @param algorithmState The state in which the current pass of the algorithm is currently in
+     */
+    private void updateZValuesForState(StackScrollState resultState,
+            StackScrollAlgorithmState algorithmState) {
+        int childCount = algorithmState.visibleChildren.size();
+        for (int i = 0; i < childCount; i++) {
+            View child = algorithmState.visibleChildren.get(i);
+            StackScrollState.ViewState childViewState = resultState.getViewStateForView(child);
+            if (i < algorithmState.itemsInTopStack) {
+                float stackIndex = algorithmState.itemsInTopStack - i;
+                stackIndex = Math.min(stackIndex, MAX_ITEMS_IN_TOP_STACK + 2);
+                childViewState.zTranslation = mZBasicHeight
+                        + stackIndex * mZDistanceBetweenElements;
+            } else if (i > (childCount - 1 - algorithmState.itemsInBottomStack)) {
+                float numItemsAbove = i - (childCount - 1 - algorithmState.itemsInBottomStack);
+                float translationZ = mZBasicHeight
+                        - numItemsAbove * mZDistanceBetweenElements;
+                childViewState.zTranslation = translationZ;
+            } else {
+                childViewState.zTranslation = mZBasicHeight;
+            }
+        }
+    }
+
+    public void setLayoutHeight(int layoutHeight) {
+        this.mLayoutHeight = layoutHeight;
+        updateInnerHeight();
+    }
+
+    public void setTopPadding(int topPadding) {
+        mTopPadding = topPadding;
+        updateInnerHeight();
+    }
+
+    private void updateInnerHeight() {
+        mInnerHeight = mLayoutHeight - mTopPadding;
+    }
+
+    public void onExpansionStarted(StackScrollState currentState) {
+        mIsExpansionChanging = true;
+        mExpandedOnStart = mIsExpanded;
+        ViewGroup hostView = currentState.getHostView();
+        updateFirstChildHeightWhileExpanding(hostView);
+    }
+
+    private void updateFirstChildHeightWhileExpanding(ViewGroup hostView) {
+        mFirstChildWhileExpanding = (ExpandableView) findFirstVisibleChild(hostView);
+        if (mFirstChildWhileExpanding != null) {
+            if (mExpandedOnStart) {
+
+                // We are collapsing the shade, so the first child can get as most as high as the
+                // current height.
+                mFirstChildMaxHeight = mFirstChildWhileExpanding.getActualHeight();
+            } else {
+
+                // We are expanding the shade, expand it to its full height.
+                if (mFirstChildWhileExpanding.getWidth() == 0) {
+
+                    // This child was not layouted yet, wait for a layout pass
+                    mFirstChildWhileExpanding
+                            .addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
+                                @Override
+                                public void onLayoutChange(View v, int left, int top, int right,
+                                        int bottom, int oldLeft, int oldTop, int oldRight,
+                                        int oldBottom) {
+                                    if (mFirstChildWhileExpanding != null) {
+                                        mFirstChildMaxHeight = getMaxAllowedChildHeight(
+                                                mFirstChildWhileExpanding);
+                                    } else {
+                                        mFirstChildMaxHeight = 0;
+                                    }
+                                    v.removeOnLayoutChangeListener(this);
+                                }
+                            });
+                } else {
+                    mFirstChildMaxHeight = getMaxAllowedChildHeight(mFirstChildWhileExpanding);
+                }
+            }
+        } else {
+            mFirstChildMaxHeight = 0;
+        }
+    }
+
+    private View findFirstVisibleChild(ViewGroup container) {
+        int childCount = container.getChildCount();
+        for (int i = 0; i < childCount; i++) {
+            View child = container.getChildAt(i);
+            if (child.getVisibility() != View.GONE) {
+                return child;
+            }
+        }
+        return null;
+    }
+
+    public void onExpansionStopped() {
+        mIsExpansionChanging = false;
+        mFirstChildWhileExpanding = null;
+    }
+
+    public void setIsExpanded(boolean isExpanded) {
+        this.mIsExpanded = isExpanded;
+    }
+
+    public void notifyChildrenChanged(ViewGroup hostView) {
+        if (mIsExpansionChanging) {
+            updateFirstChildHeightWhileExpanding(hostView);
+        }
+    }
+
+    class StackScrollAlgorithmState {
+
+        /**
+         * The scroll position of the algorithm
+         */
+        public int scrollY;
+
+        /**
+         *  The quantity of items which are in the top stack.
+         */
+        public float itemsInTopStack;
+
+        /**
+         * how far in is the element currently transitioning into the top stack
+         */
+        public float partialInTop;
+
+        /**
+         * The number of pixels the last child in the top stack has scrolled in to the stack
+         */
+        public float scrolledPixelsTop;
+
+        /**
+         * The last item index which is in the top stack.
+         */
+        public int lastTopStackIndex;
+
+        /**
+         * The quantity of items which are in the bottom stack.
+         */
+        public float itemsInBottomStack;
+
+        /**
+         * how far in is the element currently transitioning into the bottom stack
+         */
+        public float partialInBottom;
+
+        /**
+         * The children from the host view which are not gone.
+         */
+        public final ArrayList<ExpandableView> visibleChildren = new ArrayList<ExpandableView>();
+    }
+
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
new file mode 100644
index 0000000..26cef36
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
@@ -0,0 +1,230 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.stack;
+
+import android.graphics.Outline;
+import android.graphics.Rect;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.systemui.statusbar.ExpandableView;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * A state of a {@link com.android.systemui.statusbar.stack.NotificationStackScrollLayout} which
+ * can be applied to a viewGroup.
+ */
+public class StackScrollState {
+
+    private static final String CHILD_NOT_FOUND_TAG = "StackScrollStateNoSuchChild";
+
+    private final ViewGroup mHostView;
+    private Map<ExpandableView, ViewState> mStateMap;
+    private int mScrollY;
+    private final Rect mClipRect = new Rect();
+    private int mBackgroundRoundedRectCornerRadius;
+    private final Outline mChildOutline = new Outline();
+
+    public int getScrollY() {
+        return mScrollY;
+    }
+
+    public void setScrollY(int scrollY) {
+        this.mScrollY = scrollY;
+    }
+
+    public StackScrollState(ViewGroup hostView) {
+        mHostView = hostView;
+        mStateMap = new HashMap<ExpandableView, ViewState>();
+        mBackgroundRoundedRectCornerRadius = hostView.getResources().getDimensionPixelSize(
+                com.android.internal.R.dimen.notification_quantum_rounded_rect_radius);
+    }
+
+    public ViewGroup getHostView() {
+        return mHostView;
+    }
+
+    public void resetViewStates() {
+        int numChildren = mHostView.getChildCount();
+        for (int i = 0; i < numChildren; i++) {
+            ExpandableView child = (ExpandableView) mHostView.getChildAt(i);
+            ViewState viewState = mStateMap.get(child);
+            if (viewState == null) {
+                viewState = new ViewState();
+                mStateMap.put(child, viewState);
+            }
+            // initialize with the default values of the view
+            viewState.height = child.getIntrinsicHeight();
+            viewState.gone = child.getVisibility() == View.GONE;
+            viewState.alpha = 1;
+        }
+    }
+
+    public ViewState getViewStateForView(View requestedView) {
+        return mStateMap.get(requestedView);
+    }
+
+    public void removeViewStateForView(View child) {
+        mStateMap.remove(child);
+    }
+
+    /**
+     * Apply the properties saved in {@link #mStateMap} to the children of the {@link #mHostView}.
+     * The properties are only applied if they effectively changed.
+     */
+    public void apply() {
+        int numChildren = mHostView.getChildCount();
+        float previousNotificationEnd = 0;
+        float previousNotificationStart = 0;
+        for (int i = 0; i < numChildren; i++) {
+            ExpandableView child = (ExpandableView) mHostView.getChildAt(i);
+            ViewState state = mStateMap.get(child);
+            if (state == null) {
+                Log.wtf(CHILD_NOT_FOUND_TAG, "No child state was found when applying this state " +
+                        "to the hostView");
+                continue;
+            }
+            if (!state.gone) {
+                float alpha = child.getAlpha();
+                float yTranslation = child.getTranslationY();
+                float zTranslation = child.getTranslationZ();
+                int height = child.getActualHeight();
+                float newAlpha = state.alpha;
+                float newYTranslation = state.yTranslation;
+                float newZTranslation = state.zTranslation;
+                int newHeight = state.height;
+                boolean becomesInvisible = newAlpha == 0.0f;
+                if (alpha != newAlpha) {
+                    // apply layer type
+                    boolean becomesFullyVisible = newAlpha == 1.0f;
+                    boolean newLayerTypeIsHardware = !becomesInvisible && !becomesFullyVisible;
+                    int layerType = child.getLayerType();
+                    int newLayerType = newLayerTypeIsHardware
+                            ? View.LAYER_TYPE_HARDWARE
+                            : View.LAYER_TYPE_NONE;
+                    if (layerType != newLayerType) {
+                        child.setLayerType(newLayerType, null);
+                    }
+
+                    // apply alpha
+                    if (!becomesInvisible) {
+                        child.setAlpha(newAlpha);
+                    }
+                }
+
+                // apply visibility
+                int oldVisibility = child.getVisibility();
+                int newVisibility = becomesInvisible ? View.INVISIBLE : View.VISIBLE;
+                if (newVisibility != oldVisibility) {
+                    child.setVisibility(newVisibility);
+                }
+
+                // apply yTranslation
+                if (yTranslation != newYTranslation) {
+                    child.setTranslationY(newYTranslation);
+                }
+
+                // apply zTranslation
+                if (zTranslation != newZTranslation) {
+                    child.setTranslationZ(newZTranslation);
+                }
+
+                // apply height
+                if (height != newHeight) {
+                    child.setActualHeight(newHeight);
+                }
+
+                // apply clipping and shadow
+                float newNotificationEnd = newYTranslation + newHeight;
+                updateChildClippingAndBackground(child, newHeight,
+                        newNotificationEnd - (previousNotificationEnd),
+                        (int) (newHeight - (previousNotificationStart - newYTranslation)));
+
+                previousNotificationStart = newYTranslation;
+                previousNotificationEnd = newNotificationEnd;
+            }
+        }
+    }
+
+    /**
+     * Updates the shadow outline and the clipping for a view.
+     *
+     * @param child the view to update
+     * @param realHeight the currently applied height of the view
+     * @param clipHeight the desired clip height, the rest of the view will be clipped from the top
+     * @param backgroundHeight the desired background height. The shadows of the view will be
+     *                         based on this height and the content will be clipped from the top
+     */
+    private void updateChildClippingAndBackground(ExpandableView child, int realHeight,
+            float clipHeight, int backgroundHeight) {
+        if (realHeight > clipHeight) {
+            updateChildClip(child, realHeight, clipHeight);
+        } else {
+            child.setClipBounds(null);
+        }
+        if (realHeight > backgroundHeight) {
+            child.setClipTopAmount(realHeight - backgroundHeight);
+        } else {
+            child.setClipTopAmount(0);
+        }
+    }
+
+    /**
+     * Updates the clipping of a view
+     *
+     * @param child the view to update
+     * @param height the currently applied height of the view
+     * @param clipHeight the desired clip height, the rest of the view will be clipped from the top
+     */
+    private void updateChildClip(View child, int height, float clipHeight) {
+        int clipInset = (int) (height - clipHeight);
+        mClipRect.set(0,
+                clipInset,
+                child.getWidth(),
+                height);
+        child.setClipBounds(mClipRect);
+    }
+
+    public static class ViewState {
+
+        // These are flags such that we can create masks for filtering.
+
+        public static final int LOCATION_UNKNOWN = 0x00;
+        public static final int LOCATION_FIRST_CARD = 0x01;
+        public static final int LOCATION_TOP_STACK_HIDDEN = 0x02;
+        public static final int LOCATION_TOP_STACK_PEEKING = 0x04;
+        public static final int LOCATION_MAIN_AREA = 0x08;
+        public static final int LOCATION_BOTTOM_STACK_PEEKING = 0x10;
+        public static final int LOCATION_BOTTOM_STACK_HIDDEN = 0x20;
+
+        float alpha;
+        float yTranslation;
+        float zTranslation;
+        int height;
+        boolean gone;
+
+        /**
+         * The location this view is currently rendered at.
+         *
+         * <p>See <code>LOCATION_</code> flags.</p>
+         */
+        int location;
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
new file mode 100644
index 0000000..4dce288
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
@@ -0,0 +1,160 @@
+/*
+ * Copyright (C) 2014 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.android.systemui.statusbar.stack;
+
+import android.animation.ValueAnimator;
+import android.view.View;
+import android.view.animation.AnimationUtils;
+import android.view.animation.Interpolator;
+import com.android.systemui.statusbar.ExpandableView;
+
+import java.util.ArrayList;
+
+/**
+ * An stack state animator which handles animations to new StackScrollStates
+ */
+public class StackStateAnimator {
+
+    private static final int ANIMATION_DURATION = 360;
+
+    private final Interpolator mFastOutSlowInInterpolator;
+    public NotificationStackScrollLayout mHostLayout;
+    private boolean mAnimationIsRunning;
+    private ArrayList<NotificationStackScrollLayout.AnimationEvent> mHandledEvents =
+            new ArrayList<>();
+
+    public StackStateAnimator(NotificationStackScrollLayout hostLayout) {
+        mHostLayout = hostLayout;
+        mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(hostLayout.getContext(),
+                        android.R.interpolator.fast_out_slow_in);
+    }
+
+    public boolean isRunning() {
+        return mAnimationIsRunning;
+    }
+
+    public void startAnimationForEvents(
+            ArrayList<NotificationStackScrollLayout.AnimationEvent> mAnimationEvents,
+            StackScrollState finalState) {
+        int numEvents = mAnimationEvents.size();
+        if (numEvents == 0) {
+            // No events, so we don't perform any animation
+            return;
+        }
+        long lastEventStartTime = mAnimationEvents.get(numEvents - 1).eventStartTime;
+        long eventEnd = lastEventStartTime + ANIMATION_DURATION;
+        long currentTime = AnimationUtils.currentAnimationTimeMillis();
+        long newDuration = eventEnd - currentTime;
+        if (newDuration <= 0) {
+            // last event is long before this, so we don't do anything
+            return;
+        }
+        initializeAddedViewStates(mAnimationEvents, finalState);
+        int childCount = mHostLayout.getChildCount();
+        boolean isFirstAnimatingView = true;
+        for (int i = 0; i < childCount; i++) {
+            final ExpandableView child = (ExpandableView) mHostLayout.getChildAt(i);
+            StackScrollState.ViewState viewState = finalState.getViewStateForView(child);
+            if (viewState == null) {
+                continue;
+            }
+            int childVisibility = child.getVisibility();
+            boolean wasVisible = childVisibility == View.VISIBLE;
+            final float alpha = viewState.alpha;
+            if (!wasVisible && alpha != 0 && !viewState.gone) {
+                child.setVisibility(View.VISIBLE);
+            }
+
+            startPropertyAnimation(newDuration, isFirstAnimatingView, child, viewState, alpha);
+
+            // TODO: animate clipBounds
+            child.setClipBounds(null);
+            int currentHeigth = child.getActualHeight();
+            if (viewState.height != currentHeigth) {
+                startHeightAnimation(newDuration, child, viewState, currentHeigth);
+            }
+            isFirstAnimatingView = false;
+        }
+        mAnimationIsRunning = true;
+    }
+
+    private void startPropertyAnimation(long newDuration, final boolean hasFinishAction,
+            final ExpandableView child, StackScrollState.ViewState viewState, final float alpha) {
+        child.animate().setInterpolator(mFastOutSlowInInterpolator)
+                .translationY(viewState.yTranslation)
+                .translationZ(viewState.zTranslation)
+                .setDuration(newDuration)
+                .withEndAction(new Runnable() {
+                    @Override
+                    public void run() {
+                        mAnimationIsRunning = false;
+                        if (hasFinishAction) {
+                            mHandledEvents.clear();
+                            mHostLayout.onChildAnimationFinished();
+                        }
+                        if (alpha == 0) {
+                            child.setVisibility(View.INVISIBLE);
+                        }
+                    }
+                });
+        if (alpha != child.getAlpha()) {
+            child.animate().withLayer().alpha(alpha);
+        }
+    }
+
+    private void startHeightAnimation(long newDuration, final ExpandableView child,
+            StackScrollState.ViewState viewState, int currentHeigth) {
+        ValueAnimator heightAnimator = ValueAnimator.ofInt(currentHeigth, viewState.height);
+        heightAnimator.setInterpolator(mFastOutSlowInInterpolator);
+        heightAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+            @Override
+            public void onAnimationUpdate(ValueAnimator animation) {
+                child.setActualHeight((int) animation.getAnimatedValue());
+            }
+        });
+        heightAnimator.setDuration(newDuration);
+        heightAnimator.start();
+    }
+
+    /**
+     * Initialize the viewStates for the added children
+     *
+     * @param animationEvents the animation events who contain the added children
+     * @param finalState the final state to animate to
+     */
+    private void initializeAddedViewStates(
+            ArrayList<NotificationStackScrollLayout.AnimationEvent> animationEvents,
+            StackScrollState finalState) {
+        for (NotificationStackScrollLayout.AnimationEvent event: animationEvents) {
+            View changingView = event.changingView;
+            if (event.animationType == NotificationStackScrollLayout.AnimationEvent
+                    .ANIMATION_TYPE_ADD && !mHandledEvents.contains(event)) {
+
+                // This item is added, initialize it's properties.
+                StackScrollState.ViewState viewState = finalState.getViewStateForView(changingView);
+                if (viewState == null) {
+                    // The position for this child was never generated, let's continue.
+                    continue;
+                }
+                changingView.setAlpha(0);
+                changingView.setTranslationY(viewState.yTranslation);
+                changingView.setTranslationZ(viewState.zTranslation);
+                mHandledEvents.add(event);
+            }
+        }
+    }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
index dd13e31..d615542 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tv/TvStatusBar.java
@@ -22,6 +22,7 @@
 import android.view.ViewGroup.LayoutParams;
 import android.view.WindowManager;
 
+import com.android.internal.policy.IKeyguardShowCallback;
 import com.android.internal.statusbar.StatusBarIcon;
 import com.android.systemui.statusbar.BaseStatusBar;
 
@@ -93,10 +94,6 @@
     }
 
     @Override
-    protected void createAndAddWindows() {
-    }
-
-    @Override
     protected WindowManager.LayoutParams getSearchLayoutParams(
             LayoutParams layoutParams) {
         return null;
@@ -141,10 +138,19 @@
     }
 
     @Override
+    protected int getMaxKeyguardNotifications() {
+        return 0;
+    }
+
+    @Override
     public void animateExpandSettingsPanel() {
     }
 
     @Override
+    protected void createAndAddWindows() {
+    }
+
+    @Override
     protected void refreshLayout(int layoutDirection) {
     }
 
diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
index 2c36ab7..481266b 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java
@@ -311,6 +311,9 @@
             }
 
             mUsbStorageNotification.setLatestEventInfo(mContext, title, message, pi);
+            mUsbStorageNotification.visibility = Notification.VISIBILITY_PUBLIC;
+            mUsbStorageNotification.category = Notification.CATEGORY_SYSTEM;
+
             final boolean adbOn = 1 == Settings.Global.getInt(
                 mContext.getContentResolver(),
                 Settings.Global.ADB_ENABLED,
@@ -401,6 +404,8 @@
 
             mMediaStorageNotification.icon = icon;
             mMediaStorageNotification.setLatestEventInfo(mContext, title, message, pi);
+            mMediaStorageNotification.visibility = Notification.VISIBILITY_PUBLIC;
+            mMediaStorageNotification.category = Notification.CATEGORY_SYSTEM;
         }
 
         final int notificationId = mMediaStorageNotification.icon;
diff --git a/packages/VpnDialogs/AndroidManifest.xml b/packages/VpnDialogs/AndroidManifest.xml
index ef640d5..03d920a 100644
--- a/packages/VpnDialogs/AndroidManifest.xml
+++ b/packages/VpnDialogs/AndroidManifest.xml
@@ -1,10 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (c) 2014 Google Inc.
+ *
+ * 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.
+ */
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.vpndialogs">
 
     <application android:label="VpnDialogs"
             android:allowBackup="false" >
         <activity android:name=".ConfirmDialog"
-                android:theme="@*android:style/Theme.Holo.Dialog.Alert">
+                android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
                 <category android:name="android.intent.category.DEFAULT"/>
@@ -12,7 +30,7 @@
         </activity>
 
         <activity android:name=".ManageDialog"
-                android:theme="@*android:style/Theme.Holo.Dialog.Alert"
+                android:theme="@*android:style/Theme.DeviceDefault.Light.Dialog.Alert"
                 android:noHistory="true">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN"/>
diff --git a/packages/VpnDialogs/res/values-am/strings.xml b/packages/VpnDialogs/res/values-am/strings.xml
index 7fc9897..a305e30 100644
--- a/packages/VpnDialogs/res/values-am/strings.xml
+++ b/packages/VpnDialogs/res/values-am/strings.xml
@@ -17,8 +17,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> የ VPN ተያያዥ ለመፍጠር ሞክሯል።"</string>
-    <string name="warning" msgid="5470743576660160079">"በማስከተል፣ ትግበራው ሁሉንም የአውታረ መረብ ትራፊክ እንዲያጨናግፍ ፈቃድ እየሰጡ ነው።"<b>"  ትግበራውን ካላመኑት አይቀበሉ።"</b>"  አለበለዚያ፣ ውሂብዎ በተንኮል አዘል ሶፍትዌር ስጋት ውስጥ ይገኛል።"</string>
-    <string name="accept" msgid="2889226408765810173">"ይህን ትግበራ አምናለሁ"</string>
+    <string name="warning" msgid="5470743576660160079">"በማስከተል፣ መተግበሪያው ሁሉንም የአውታረ መረብ ትራፊክ እንዲያጨናግፍ ፈቃድ እየሰጡ ነው።"<b>"  መተግበሪያውን ካላመኑት አይቀበሉ።"</b>"  አለበለዚያ፣ ውሂብዎ በተንኮል አዘል ሶፍትዌር ስጋት ውስጥ ይገኛል።"</string>
+    <string name="accept" msgid="2889226408765810173">"ይህን መተግበሪያ አምናለሁ"</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN ተያይዟል"</string>
     <string name="configure" msgid="4905518375574791375">"አዋቅር"</string>
     <string name="disconnect" msgid="971412338304200056">"አለያይ"</string>
diff --git a/packages/VpnDialogs/res/values-ar/strings.xml b/packages/VpnDialogs/res/values-ar/strings.xml
index 2380fa2..bf83a41 100644
--- a/packages/VpnDialogs/res/values-ar/strings.xml
+++ b/packages/VpnDialogs/res/values-ar/strings.xml
@@ -16,10 +16,10 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="prompt" msgid="8359175999006833462">"يحاول <xliff:g id="APP">%s</xliff:g> إنشاء اتصال شبكة ظاهرية خاصة (VPN)."</string>
+    <string name="prompt" msgid="8359175999006833462">"‏يحاول <xliff:g id="APP">%s</xliff:g> إنشاء اتصال شبكة ظاهرية خاصة (VPN)."</string>
     <string name="warning" msgid="5470743576660160079">"تعد المتابعة بمثابة إذن للتطبيق باعتراض جميع حركات مرور البيانات عبر الشبكة. "<b>"\"لا\" توافق إلا إذا كنت تثق في التطبيق."</b>" وإلا فقد تتعرض بياناتك لخطورة الاختراق بواسطة برامج ضارة."</string>
     <string name="accept" msgid="2889226408765810173">"أثق في هذا التطبيق."</string>
-    <string name="legacy_title" msgid="192936250066580964">"VPN متصلة"</string>
+    <string name="legacy_title" msgid="192936250066580964">"‏VPN متصلة"</string>
     <string name="configure" msgid="4905518375574791375">"تهيئة"</string>
     <string name="disconnect" msgid="971412338304200056">"قطع الاتصال"</string>
     <string name="session" msgid="6470628549473641030">"الجلسة"</string>
diff --git a/packages/VpnDialogs/res/values-az-rAZ/strings.xml b/packages/VpnDialogs/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..fdeb06f
--- /dev/null
+++ b/packages/VpnDialogs/res/values-az-rAZ/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"VPN bağlantısı yaratmaq üçün <xliff:g id="APP">%s</xliff:g> cəhdləri."</string>
+    <string name="warning" msgid="5470743576660160079">"Bunu həyata keçirməklə, siz tətbiqə bütün şəbəkə hərəkətinə qarışmağa icazə verirsiniz. "<b>" Tətbiqə güvənmirsizsə qəbul etməyin. "</b>" Əks halda, datanızın təhlükəli proqramlar tərəfindən ələ keçirilmə riskini alırsınız."</string>
+    <string name="accept" msgid="2889226408765810173">"Bu tətbiqə güvənirəm."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN qoşuludur"</string>
+    <string name="configure" msgid="4905518375574791375">"Konfiqurasiya edin"</string>
+    <string name="disconnect" msgid="971412338304200056">"Əlaqəni kəs"</string>
+    <string name="session" msgid="6470628549473641030">"Sessiya:"</string>
+    <string name="duration" msgid="3584782459928719435">"Müddət:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"Göndərilən:"</string>
+    <string name="data_received" msgid="4062776929376067820">"Qəbul edilən:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bayt / <xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-az/strings.xml b/packages/VpnDialogs/res/values-az/strings.xml
new file mode 100644
index 0000000..fdeb06f
--- /dev/null
+++ b/packages/VpnDialogs/res/values-az/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"VPN bağlantısı yaratmaq üçün <xliff:g id="APP">%s</xliff:g> cəhdləri."</string>
+    <string name="warning" msgid="5470743576660160079">"Bunu həyata keçirməklə, siz tətbiqə bütün şəbəkə hərəkətinə qarışmağa icazə verirsiniz. "<b>" Tətbiqə güvənmirsizsə qəbul etməyin. "</b>" Əks halda, datanızın təhlükəli proqramlar tərəfindən ələ keçirilmə riskini alırsınız."</string>
+    <string name="accept" msgid="2889226408765810173">"Bu tətbiqə güvənirəm."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN qoşuludur"</string>
+    <string name="configure" msgid="4905518375574791375">"Konfiqurasiya edin"</string>
+    <string name="disconnect" msgid="971412338304200056">"Əlaqəni kəs"</string>
+    <string name="session" msgid="6470628549473641030">"Sessiya:"</string>
+    <string name="duration" msgid="3584782459928719435">"Müddət:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"Göndərilən:"</string>
+    <string name="data_received" msgid="4062776929376067820">"Qəbul edilən:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bayt / <xliff:g id="NUMBER_1">%2$s</xliff:g> paket"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-be/strings.xml b/packages/VpnDialogs/res/values-be/strings.xml
deleted file mode 100644
index af43aef..0000000
--- a/packages/VpnDialogs/res/values-be/strings.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--  Copyright (C) 2011 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.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> спрабуе стварыць злучэнне VPN."</string>
-    <string name="warning" msgid="5470743576660160079">"Працягваючы, вы дазваляеце праграме перахапіць ўвесь сеткавы трафік. "<b>" НЕ выкарыстовывайце, пакуль вы не давяраеце праграме. "</b>" У адваротным выпадку вы рызыкуеце пашкодзіць вашы дадзеныя шкоднаснымі праграмамі."</string>
-    <string name="accept" msgid="2889226408765810173">"Я давяраю гэтаму дадатку."</string>
-    <string name="legacy_title" msgid="192936250066580964">"VPN падключаны"</string>
-    <string name="configure" msgid="4905518375574791375">"Наладзіць"</string>
-    <string name="disconnect" msgid="971412338304200056">"Адключыцца"</string>
-    <string name="session" msgid="6470628549473641030">"Сессія"</string>
-    <string name="duration" msgid="3584782459928719435">"Працягласць:"</string>
-    <string name="data_transmitted" msgid="7988167672982199061">"Адпраўлена:"</string>
-    <string name="data_received" msgid="4062776929376067820">"Атрымана:"</string>
-    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> байт / <xliff:g id="NUMBER_1">%2$s</xliff:g> пакеты"</string>
-</resources>
diff --git a/packages/VpnDialogs/res/values-en-rIN/strings.xml b/packages/VpnDialogs/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..afc46d8
--- /dev/null
+++ b/packages/VpnDialogs/res/values-en-rIN/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> attempts to create a VPN connection."</string>
+    <string name="warning" msgid="5470743576660160079">"By proceeding, you are giving the application permission to intercept all network traffic. "<b>"Do NOT accept unless you trust the application."</b>" Otherwise, you run the risk of having your data compromised by malicious software."</string>
+    <string name="accept" msgid="2889226408765810173">"I trust this application."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN is connected"</string>
+    <string name="configure" msgid="4905518375574791375">"Configure"</string>
+    <string name="disconnect" msgid="971412338304200056">"Disconnect"</string>
+    <string name="session" msgid="6470628549473641030">"Session:"</string>
+    <string name="duration" msgid="3584782459928719435">"Duration:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"Sent:"</string>
+    <string name="data_received" msgid="4062776929376067820">"Received:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> bytes / <xliff:g id="NUMBER_1">%2$s</xliff:g> packets"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-et/strings.xml b/packages/VpnDialogs/res/values-et-rEE/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-et/strings.xml
rename to packages/VpnDialogs/res/values-et-rEE/strings.xml
diff --git a/packages/VpnDialogs/res/values-fa/strings.xml b/packages/VpnDialogs/res/values-fa/strings.xml
index ec163af..7c0aafe 100644
--- a/packages/VpnDialogs/res/values-fa/strings.xml
+++ b/packages/VpnDialogs/res/values-fa/strings.xml
@@ -16,10 +16,10 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> تلاش می‌کند یک اتصال VPN ایجاد کند."</string>
+    <string name="prompt" msgid="8359175999006833462">"‏<xliff:g id="APP">%s</xliff:g> تلاش می‌کند یک اتصال VPN ایجاد کند."</string>
     <string name="warning" msgid="5470743576660160079">"با ادامه دادن، به برنامهٔ کاربردی اجازه می‌دهید تمام ترافیک شبکه را رهگیری کند. "<b>"تا به برنامه اعتماد نکردید آن را قبول نکنید."</b>" در غیر این صورت، این ریسک را قبول می‌کنید که داده‌های شما توسط یک نرم‌افزار مخرب به خطر بیفتد."</string>
     <string name="accept" msgid="2889226408765810173">"من به این برنامه اعتماد دارم."</string>
-    <string name="legacy_title" msgid="192936250066580964">"VPN متصل است"</string>
+    <string name="legacy_title" msgid="192936250066580964">"‏VPN متصل است"</string>
     <string name="configure" msgid="4905518375574791375">"پیکربندی"</string>
     <string name="disconnect" msgid="971412338304200056">"قطع اتصال"</string>
     <string name="session" msgid="6470628549473641030">"جلسه:"</string>
diff --git a/packages/VpnDialogs/res/values-fr-rCA/strings.xml b/packages/VpnDialogs/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..1028f83
--- /dev/null
+++ b/packages/VpnDialogs/res/values-fr-rCA/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> tente de créer une connexion VPN."</string>
+    <string name="warning" msgid="5470743576660160079">"En continuant, vous autorisez l\'application à intercepter l\'ensemble du trafic réseau. "<b>"N\'acceptez PAS, sauf si vous avez confiance en l\'application."</b>"Sinon, vos données risquent d\'être piratées par un logiciel malveillant."</string>
+    <string name="accept" msgid="2889226408765810173">"J\'ai confiance en cette application."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN connecté"</string>
+    <string name="configure" msgid="4905518375574791375">"Configurer"</string>
+    <string name="disconnect" msgid="971412338304200056">"Déconnecter"</string>
+    <string name="session" msgid="6470628549473641030">"Session :"</string>
+    <string name="duration" msgid="3584782459928719435">"Durée :"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"Date d\'envoi :"</string>
+    <string name="data_received" msgid="4062776929376067820">"Reçu le :"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> octets / <xliff:g id="NUMBER_1">%2$s</xliff:g> paquets"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-hi/strings.xml b/packages/VpnDialogs/res/values-hi/strings.xml
index e2cb51a..b570a6d 100644
--- a/packages/VpnDialogs/res/values-hi/strings.xml
+++ b/packages/VpnDialogs/res/values-hi/strings.xml
@@ -17,8 +17,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> एक VPN कनेक्‍शन बनाने का प्रयास करता है."</string>
-    <string name="warning" msgid="5470743576660160079">"जारी रखकर, आप एप्लिकेशन को सभी नेटवर्क ट्रैफ़िक अवरोधित करने की अनुमति देते हैं. "<b>"जब तक आपको एप्लिकेशन पर विश्वास न हो स्‍वीकार न करें."</b>" अन्‍यथा, आपको अपने डेटा के साथ किसी दुर्भावनापूर्ण सॉफ़्टवेयर द्वारा छेड़छाड़ किए जाने का जोखिम हो सकता है."</string>
-    <string name="accept" msgid="2889226408765810173">"मुझे इस एप्लिकेशन पर विश्वास है."</string>
+    <string name="warning" msgid="5470743576660160079">"जारी रखकर, आप ऐप्स  को सभी नेटवर्क ट्रैफ़िक अवरोधित करने की अनुमति देते हैं. "<b>"जब तक आपको ऐप्स  पर विश्वास न हो स्‍वीकार न करें."</b>" अन्‍यथा, आपको अपने डेटा के साथ किसी दुर्भावनापूर्ण सॉफ़्टवेयर द्वारा छेड़छाड़ किए जाने का जोखिम हो सकता है."</string>
+    <string name="accept" msgid="2889226408765810173">"मुझे इस ऐप्स  पर विश्वास है."</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN कनेक्‍ट है"</string>
     <string name="configure" msgid="4905518375574791375">"कॉन्फ़िगर करें"</string>
     <string name="disconnect" msgid="971412338304200056">"डिस्‍कनेक्‍ट करें"</string>
diff --git a/packages/VpnDialogs/res/values-hy-rAM/strings.xml b/packages/VpnDialogs/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..85db579
--- /dev/null
+++ b/packages/VpnDialogs/res/values-hy-rAM/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g>-ը փորձում է ստեղծել VPN կապ:"</string>
+    <string name="warning" msgid="5470743576660160079">"Շարունակելով` դուք հավելվածին թույլատրում եք կանգնեցնել ամբողջ ցանցային շարժը: "<b>"Մի ընդունեք, եթե չեք վստահում հավելվածին:"</b>" Այլապես ռիսկ կա ձեր տվյալները վտանգելու վնասարար հավելվածների կողմից:"</string>
+    <string name="accept" msgid="2889226408765810173">"Ես վստահում եմ այս ծրագրին:"</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN-ը կապակցված է"</string>
+    <string name="configure" msgid="4905518375574791375">"Կարգավորել"</string>
+    <string name="disconnect" msgid="971412338304200056">"Անջատել"</string>
+    <string name="session" msgid="6470628549473641030">"Աշխատաշրջան`"</string>
+    <string name="duration" msgid="3584782459928719435">"Տևողությունը՝"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"Ուղարկվել է՝"</string>
+    <string name="data_received" msgid="4062776929376067820">"Ստացվել է՝"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> բայթ / <xliff:g id="NUMBER_1">%2$s</xliff:g> փաթեթ"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-iw/strings.xml b/packages/VpnDialogs/res/values-iw/strings.xml
index bb845ee..335f5e4 100644
--- a/packages/VpnDialogs/res/values-iw/strings.xml
+++ b/packages/VpnDialogs/res/values-iw/strings.xml
@@ -16,10 +16,10 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> מנסה ליצור חיבור VPN."</string>
-    <string name="warning" msgid="5470743576660160079">"אם תמשיך, אתה מעניק ליישום הרשאה לעכב את כל התנועה ברשת. "<b>" אל תקבל אלא אם כן אתה סומך על היישום. "</b>" אחרת, אתה חושף את הנתונים שלך לסכנה של פגיעה על-ידי תוכנה זדונית."</string>
-    <string name="accept" msgid="2889226408765810173">"אני סומך על יישום זה."</string>
-    <string name="legacy_title" msgid="192936250066580964">"VPN מחובר"</string>
+    <string name="prompt" msgid="8359175999006833462">"‏<xliff:g id="APP">%s</xliff:g> מנסה ליצור חיבור VPN."</string>
+    <string name="warning" msgid="5470743576660160079">"אם תמשיך, אתה מעניק לאפליקציה הרשאה לעכב את כל התנועה ברשת. "<b>" אל תקבל אלא אם כן אתה סומך על האפליקציה. "</b>" אחרת, אתה חושף את הנתונים שלך לסכנה של פגיעה על-ידי תוכנה זדונית."</string>
+    <string name="accept" msgid="2889226408765810173">"אני סומך על אפליקציה זו."</string>
+    <string name="legacy_title" msgid="192936250066580964">"‏VPN מחובר"</string>
     <string name="configure" msgid="4905518375574791375">"הגדר"</string>
     <string name="disconnect" msgid="971412338304200056">"נתק"</string>
     <string name="session" msgid="6470628549473641030">"הפעלה"</string>
diff --git a/packages/VpnDialogs/res/values-ka-rGE/strings.xml b/packages/VpnDialogs/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..960d3f6
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ka-rGE/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> ცდილობს VPN კავშირის შექმნას."</string>
+    <string name="warning" msgid="5470743576660160079">"გაგრძელების შემთხვევაში, აპლიკაციას ექნება ქსელში გადაცემული მონაცემების მოპოვების საშუალება. "<b>"არ განაგრძოთ, თუ არ ენდობით აპლიკაციას."</b>" წინააღმდეგ შემთვევაში შესაძლოა მავნე პროგრამას თქვენ მონაცემებთან წვდომის საშუალება მიეცეს."</string>
+    <string name="accept" msgid="2889226408765810173">"ვენდობი ამ აპლიკაციას."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN დაკავშირებულია"</string>
+    <string name="configure" msgid="4905518375574791375">"კონფიგურაცია"</string>
+    <string name="disconnect" msgid="971412338304200056">"კავშირის გაწყვეტა"</string>
+    <string name="session" msgid="6470628549473641030">"სესია:"</string>
+    <string name="duration" msgid="3584782459928719435">"ხანგრძლივობა:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"გაგზავნილი:"</string>
+    <string name="data_received" msgid="4062776929376067820">"მიღებული:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> ბაიტი / <xliff:g id="NUMBER_1">%2$s</xliff:g> პაკეტი"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-km-rKH/strings.xml b/packages/VpnDialogs/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..2c79e26
--- /dev/null
+++ b/packages/VpnDialogs/res/values-km-rKH/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> ព្យាយាម​បង្កើត​ការ​តភ្ជាប់ VPN ។"</string>
+    <string name="warning" msgid="5470743576660160079">"ដោយ​បន្ត អ្នក​កំពុង​ផ្ដល់​សិទ្ធិ​ឲ្យ​កម្មវិធី​ទប់ស្កាត់​ចរាចរណ៍​បណ្ដាញ។ "<b>"កុំ​ទទួល​ លុះ​ត្រា​តែ​អ្នក​ទុក​ចិត្ត​កម្មវិធី។"</b>" បើ​មិន​ដូច្នេះ​ទេ អ្នក​ដំណើរការ​ប្រឈម​នឹង​គ្រោះថ្នាក់ ដោយ​ទិន្នន័យ​របស់​អ្នក​បាន​សម្របសម្រួល​ដោយ​កម្មវិធី​ព្យាបាទ។"</string>
+    <string name="accept" msgid="2889226408765810173">"ខ្ញុំ​ទុកចិត្ត​​​កម្មវិធី​នេះ​។"</string>
+    <string name="legacy_title" msgid="192936250066580964">"បា​ន​ភ្ជាប់ VPN"</string>
+    <string name="configure" msgid="4905518375574791375">"កំណត់​រចនាសម្ព័ន្ធ"</string>
+    <string name="disconnect" msgid="971412338304200056">"ផ្ដាច់"</string>
+    <string name="session" msgid="6470628549473641030">"សម័យ៖"</string>
+    <string name="duration" msgid="3584782459928719435">"ថិរវេលា៖"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"បាន​ផ្ញើ៖"</string>
+    <string name="data_received" msgid="4062776929376067820">"បាន​ទទួល៖"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> បៃ / <xliff:g id="NUMBER_1">%2$s</xliff:g> កញ្ចប់​ព័ត៌មាន"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-lo-rLA/strings.xml b/packages/VpnDialogs/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..9f5216b
--- /dev/null
+++ b/packages/VpnDialogs/res/values-lo-rLA/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> ພະຍາຍາມສ້າງການເຊື່ອມຕໍ່ VPN."</string>
+    <string name="warning" msgid="5470743576660160079">"ຖ້າດຳເນີນຕໍ່, ແມ່ນທ່ານກຳລັງຈະໃຫ້ສິດແກ່ແອັບພລິເຄຊັນ ໃນການດັກຂໍ້ມູນຈະລາຈອນໃນເຄືອຂ່າຍທັງໝົດ. "<b>"ຢ່າຍອມຮັບ ນອກຈາກວ່າທ່ານຈະເຊື່ອໃຈແອັບພລິເຄຊັນດັ່ງກ່າວ."</b>" ຖ້າບໍ່ດັ່ງນັ້ນ, ທ່ານຈະຕົກຢູ່ໃນຄວາມສ່ຽງ ທີ່ຂໍ້ມູນຂອງທ່ານຈະຖືກຄຸກຄາມໂດຍຊອບແວທີ່ເປັນອັນຕະລາຍ."</string>
+    <string name="accept" msgid="2889226408765810173">"ຂ້ອຍເຊື່ອແອັບພລິເຄຊັນນີ້."</string>
+    <string name="legacy_title" msgid="192936250066580964">"ເຊື່ອມຕໍ່ VPN ແລ້ວ"</string>
+    <string name="configure" msgid="4905518375574791375">"ປັບຄ່າ"</string>
+    <string name="disconnect" msgid="971412338304200056">"ຕັດການເຊື່ອມຕໍ່"</string>
+    <string name="session" msgid="6470628549473641030">"ເຊສຊັນ:"</string>
+    <string name="duration" msgid="3584782459928719435">"ໄລຍະເວລາ:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"ສົ່ງ:"</string>
+    <string name="data_received" msgid="4062776929376067820">"ຮັບ:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> ໄບ / <xliff:g id="NUMBER_1">%2$s</xliff:g> ແພັກເກັດ"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-mn-rMN/strings.xml b/packages/VpnDialogs/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..887bb73
--- /dev/null
+++ b/packages/VpnDialogs/res/values-mn-rMN/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> VPN холболтыг үүсгэх гэж байна."</string>
+    <string name="warning" msgid="5470743576660160079">"Үргэлжлүүлсэнээр та аппликешнд бүх сүлжээний урсгалыг таслах зөвшөөрлийг өгөх болно. "<b>"Аппикешн баталгаагүй гэж үзсэн тохиолдолд л зөвшөөрч болорхгүй."</b>" Бусад тохиолдолд та өөрийн датаг хортой софтверийн аюулд өртөх эрсдэлийг үүсгэж байна."</string>
+    <string name="accept" msgid="2889226408765810173">"Би энэ аппликешнд итгэж байна."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN холбогдов"</string>
+    <string name="configure" msgid="4905518375574791375">"Тохируулах"</string>
+    <string name="disconnect" msgid="971412338304200056">"Салгах"</string>
+    <string name="session" msgid="6470628549473641030">"Сешн:"</string>
+    <string name="duration" msgid="3584782459928719435">"Үргэлжлэх хугацаа:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"Илгээсэн:"</string>
+    <string name="data_received" msgid="4062776929376067820">"Хүлээн авсан:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> байт/ <xliff:g id="NUMBER_1">%2$s</xliff:g> пакет"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ms/strings.xml b/packages/VpnDialogs/res/values-ms-rMY/strings.xml
similarity index 100%
rename from packages/VpnDialogs/res/values-ms/strings.xml
rename to packages/VpnDialogs/res/values-ms-rMY/strings.xml
diff --git a/packages/VpnDialogs/res/values-nb/strings.xml b/packages/VpnDialogs/res/values-nb/strings.xml
index f716422..6bffc98 100644
--- a/packages/VpnDialogs/res/values-nb/strings.xml
+++ b/packages/VpnDialogs/res/values-nb/strings.xml
@@ -17,8 +17,8 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> forsøker å etablere en VPN-tilkobling."</string>
-    <string name="warning" msgid="5470743576660160079">"Ved å fortsette gir du applikasjonen tillatelse til å fange opp all nettverkstrafikk. "<b>"IKKE godta med mindre du stoler på applikasjonen."</b>" Ellers risikerer du at dataene dine kompromitteres av en ondsinnet programvare."</string>
-    <string name="accept" msgid="2889226408765810173">"Jeg stoler på denne applikasjonen."</string>
+    <string name="warning" msgid="5470743576660160079">"Ved å fortsette gir du appen tillatelse til å fange opp all nettverkstrafikk. "<b>"IKKE godta med mindre du stoler på appen."</b>" Ellers risikerer du at dataene dine kompromitteres av en ondsinnet programvare."</string>
+    <string name="accept" msgid="2889226408765810173">"Jeg stoler på denne appen."</string>
     <string name="legacy_title" msgid="192936250066580964">"VPN er tilkoblet"</string>
     <string name="configure" msgid="4905518375574791375">"Konfigurer"</string>
     <string name="disconnect" msgid="971412338304200056">"Koble fra"</string>
diff --git a/packages/VpnDialogs/res/values-ne-rNP/strings.xml b/packages/VpnDialogs/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..03211cb
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ne-rNP/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> एउटा VPN जडान सिर्जना गर्ने प्रयासहरू।"</string>
+    <string name="warning" msgid="5470743576660160079">"अगाडी बढेर, तपाईँले यस अनुप्रयोगलाई सबै नेटवर्कको ट्राफिक अवरोध गर्न अनुमति दिनु हुँदैछ। "<b>"तपाईँलाई अनुप्रयोगको विश्वास नलागेसम्म यसलाई स्वीकार नगर्नुहोस्।"</b>" अन्यथा, तपाईँ आफ्नो डेटा खराब सफ्टवेरद्वारा जोखिममा पर्नु हुनेछ।"</string>
+    <string name="accept" msgid="2889226408765810173">"म यस अनुप्रयोगलाई विश्वास गर्छु।"</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN जोडिएको छ"</string>
+    <string name="configure" msgid="4905518375574791375">"कन्फिगर गर्नुहोस्"</string>
+    <string name="disconnect" msgid="971412338304200056">"विच्छेदन गर्नुहोस्"</string>
+    <string name="session" msgid="6470628549473641030">"सत्र:"</string>
+    <string name="duration" msgid="3584782459928719435">"अवधि:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"पठाइयो:"</string>
+    <string name="data_received" msgid="4062776929376067820">"प्राप्त भयो:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> बाइटहरू / <xliff:g id="NUMBER_1">%2$s</xliff:g> प्याकेटहरू"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-ne/strings.xml b/packages/VpnDialogs/res/values-ne/strings.xml
new file mode 100644
index 0000000..03211cb
--- /dev/null
+++ b/packages/VpnDialogs/res/values-ne/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> एउटा VPN जडान सिर्जना गर्ने प्रयासहरू।"</string>
+    <string name="warning" msgid="5470743576660160079">"अगाडी बढेर, तपाईँले यस अनुप्रयोगलाई सबै नेटवर्कको ट्राफिक अवरोध गर्न अनुमति दिनु हुँदैछ। "<b>"तपाईँलाई अनुप्रयोगको विश्वास नलागेसम्म यसलाई स्वीकार नगर्नुहोस्।"</b>" अन्यथा, तपाईँ आफ्नो डेटा खराब सफ्टवेरद्वारा जोखिममा पर्नु हुनेछ।"</string>
+    <string name="accept" msgid="2889226408765810173">"म यस अनुप्रयोगलाई विश्वास गर्छु।"</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN जोडिएको छ"</string>
+    <string name="configure" msgid="4905518375574791375">"कन्फिगर गर्नुहोस्"</string>
+    <string name="disconnect" msgid="971412338304200056">"विच्छेदन गर्नुहोस्"</string>
+    <string name="session" msgid="6470628549473641030">"सत्र:"</string>
+    <string name="duration" msgid="3584782459928719435">"अवधि:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"पठाइयो:"</string>
+    <string name="data_received" msgid="4062776929376067820">"प्राप्त भयो:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> बाइटहरू / <xliff:g id="NUMBER_1">%2$s</xliff:g> प्याकेटहरू"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-si-rLK/strings.xml b/packages/VpnDialogs/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..67e0ed6
--- /dev/null
+++ b/packages/VpnDialogs/res/values-si-rLK/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"VPN සම්බන්ධතාවයක් සැදීමට <xliff:g id="APP">%s</xliff:g> උත්සාහ කරයි."</string>
+    <string name="warning" msgid="5470743576660160079">"ඉදිරියට යාමෙන්, සියලු ජාල තදබදය මගදී අල්ලා ගැනීමට ඔබ යෙදුමට අවසර දෙයි. "<b>"ඔබ යෙදුම විශ්වාස නොකරයි නම් පිළිගන්න එපා"</b>" නැතහොත්, අනිෂ්ට මෘදුකාංගයක් මඟින් ඔබගේ දත්ත නිරාවරණය වීමේ අවදානමක් ඔබට ඇත."</string>
+    <string name="accept" msgid="2889226408765810173">"මෙම යෙදුම මට විශ්වාසයි."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN සම්බන්ධිතයි"</string>
+    <string name="configure" msgid="4905518375574791375">"වින්‍යාස කිරීම"</string>
+    <string name="disconnect" msgid="971412338304200056">"විසන්ධි කරන්න"</string>
+    <string name="session" msgid="6470628549473641030">"සැසිය:"</string>
+    <string name="duration" msgid="3584782459928719435">"කාල සීමාව:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"යවන ලද:"</string>
+    <string name="data_received" msgid="4062776929376067820">"ලැබිණි:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"බයිට <xliff:g id="NUMBER_0">%1$s</xliff:g> / පැකැට්ටු <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-si/strings.xml b/packages/VpnDialogs/res/values-si/strings.xml
new file mode 100644
index 0000000..67e0ed6
--- /dev/null
+++ b/packages/VpnDialogs/res/values-si/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"VPN සම්බන්ධතාවයක් සැදීමට <xliff:g id="APP">%s</xliff:g> උත්සාහ කරයි."</string>
+    <string name="warning" msgid="5470743576660160079">"ඉදිරියට යාමෙන්, සියලු ජාල තදබදය මගදී අල්ලා ගැනීමට ඔබ යෙදුමට අවසර දෙයි. "<b>"ඔබ යෙදුම විශ්වාස නොකරයි නම් පිළිගන්න එපා"</b>" නැතහොත්, අනිෂ්ට මෘදුකාංගයක් මඟින් ඔබගේ දත්ත නිරාවරණය වීමේ අවදානමක් ඔබට ඇත."</string>
+    <string name="accept" msgid="2889226408765810173">"මෙම යෙදුම මට විශ්වාසයි."</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN සම්බන්ධිතයි"</string>
+    <string name="configure" msgid="4905518375574791375">"වින්‍යාස කිරීම"</string>
+    <string name="disconnect" msgid="971412338304200056">"විසන්ධි කරන්න"</string>
+    <string name="session" msgid="6470628549473641030">"සැසිය:"</string>
+    <string name="duration" msgid="3584782459928719435">"කාල සීමාව:"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"යවන ලද:"</string>
+    <string name="data_received" msgid="4062776929376067820">"ලැබිණි:"</string>
+    <string name="data_value_format" msgid="2192466557826897580">"බයිට <xliff:g id="NUMBER_0">%1$s</xliff:g> / පැකැට්ටු <xliff:g id="NUMBER_1">%2$s</xliff:g>"</string>
+</resources>
diff --git a/packages/VpnDialogs/res/values-zh-rHK/strings.xml b/packages/VpnDialogs/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..8b25d41
--- /dev/null
+++ b/packages/VpnDialogs/res/values-zh-rHK/strings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2011 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="prompt" msgid="8359175999006833462">"<xliff:g id="APP">%s</xliff:g> 嘗試建立 VPN 連線。"</string>
+    <string name="warning" msgid="5470743576660160079">"如果繼續進行，即表示您允許該應用程式攔截所有網絡流量。"<b>"除非您信任該應用程式，否則不應接受。"</b>"不然就會讓您的資料陷於遭惡意程式入侵的風險。"</string>
+    <string name="accept" msgid="2889226408765810173">"我信任這個應用程式。"</string>
+    <string name="legacy_title" msgid="192936250066580964">"VPN 已連線"</string>
+    <string name="configure" msgid="4905518375574791375">"設定"</string>
+    <string name="disconnect" msgid="971412338304200056">"中斷連線"</string>
+    <string name="session" msgid="6470628549473641030">"時段："</string>
+    <string name="duration" msgid="3584782459928719435">"持續時間︰"</string>
+    <string name="data_transmitted" msgid="7988167672982199061">"已傳送："</string>
+    <string name="data_received" msgid="4062776929376067820">"已接收："</string>
+    <string name="data_value_format" msgid="2192466557826897580">"<xliff:g id="NUMBER_0">%1$s</xliff:g> 位元組 / <xliff:g id="NUMBER_1">%2$s</xliff:g> 封包"</string>
+</resources>
diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
index 6faf4e0..ddafc66 100644
--- a/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
+++ b/packages/VpnDialogs/src/com/android/vpndialogs/ConfirmDialog.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.net.IConnectivityManager;
diff --git a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
index 3d5654a..eb20995 100644
--- a/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
+++ b/packages/VpnDialogs/src/com/android/vpndialogs/ManageDialog.java
@@ -18,7 +18,6 @@
 
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.net.IConnectivityManager;
@@ -28,9 +27,6 @@
 import android.os.SystemClock;
 import android.util.Log;
 import android.view.View;
-import android.widget.Button;
-import android.widget.CompoundButton;
-import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.android.internal.app.AlertActivity;
diff --git a/packages/WallpaperCropper/AndroidManifest.xml b/packages/WallpaperCropper/AndroidManifest.xml
index 27755bd..81d1085 100644
--- a/packages/WallpaperCropper/AndroidManifest.xml
+++ b/packages/WallpaperCropper/AndroidManifest.xml
@@ -1,3 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (c) 2014 Google Inc.
+ *
+ * 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.
+ */
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.android.wallpapercropper" >
         <uses-permission android:name="android.permission.SET_WALLPAPER" />
diff --git a/packages/WallpaperCropper/res/layout/wallpaper_cropper.xml b/packages/WallpaperCropper/res/layout/wallpaper_cropper.xml
index 97d7001..cf78989 100644
--- a/packages/WallpaperCropper/res/layout/wallpaper_cropper.xml
+++ b/packages/WallpaperCropper/res/layout/wallpaper_cropper.xml
@@ -28,7 +28,7 @@
         android:layout_height="match_parent" />
     <ProgressBar
         android:id="@+id/loading"
-        style="@android:style/Widget.Holo.ProgressBar.Large"
+        style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Large"
         android:visibility="invisible"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
diff --git a/packages/WallpaperCropper/res/values/styles.xml b/packages/WallpaperCropper/res/values/styles.xml
index 2b63fe0..b27a387 100644
--- a/packages/WallpaperCropper/res/values/styles.xml
+++ b/packages/WallpaperCropper/res/values/styles.xml
@@ -15,13 +15,13 @@
 -->
 
 <resources>
-    <style name="Theme.WallpaperCropper" parent="@android:style/Theme.Holo">
+    <style name="Theme.WallpaperCropper" parent="@android:style/Theme.DeviceDefault.Light">
         <item name="android:actionBarStyle">@style/WallpaperCropperActionBar</item>
         <item name="android:windowFullscreen">true</item>
         <item name="android:windowActionBarOverlay">true</item>
     </style>
 
-    <style name="WallpaperCropperActionBar" parent="android:style/Widget.Holo.ActionBar">
+    <style name="WallpaperCropperActionBar" parent="android:style/Widget.DeviceDefault.Light.ActionBar">
         <item name="android:displayOptions">showCustom</item>
         <item name="android:background">#88000000</item>
     </style>
diff --git a/packages/WallpaperCropper/src/com/android/gallery3d/exif/ExifModifier.java b/packages/WallpaperCropper/src/com/android/gallery3d/exif/ExifModifier.java
index f00362b..0531cba 100644
--- a/packages/WallpaperCropper/src/com/android/gallery3d/exif/ExifModifier.java
+++ b/packages/WallpaperCropper/src/com/android/gallery3d/exif/ExifModifier.java
@@ -18,7 +18,6 @@
 
 import android.util.Log;
 
-import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
diff --git a/packages/WallpaperCropper/src/com/android/gallery3d/glrenderer/GLCanvas.java b/packages/WallpaperCropper/src/com/android/gallery3d/glrenderer/GLCanvas.java
index 305e905..5b07477 100644
--- a/packages/WallpaperCropper/src/com/android/gallery3d/glrenderer/GLCanvas.java
+++ b/packages/WallpaperCropper/src/com/android/gallery3d/glrenderer/GLCanvas.java
@@ -20,8 +20,6 @@
 import android.graphics.Rect;
 import android.graphics.RectF;
 
-import javax.microedition.khronos.opengles.GL11;
-
 //
 // GLCanvas gives a convenient interface to draw using OpenGL.
 //
diff --git a/packages/WallpaperCropper/src/com/android/photos/BitmapRegionTileSource.java b/packages/WallpaperCropper/src/com/android/photos/BitmapRegionTileSource.java
index 8511de2..764156d 100644
--- a/packages/WallpaperCropper/src/com/android/photos/BitmapRegionTileSource.java
+++ b/packages/WallpaperCropper/src/com/android/photos/BitmapRegionTileSource.java
@@ -24,9 +24,7 @@
 import android.graphics.BitmapFactory;
 import android.graphics.BitmapRegionDecoder;
 import android.graphics.Canvas;
-import android.graphics.Matrix;
 import android.graphics.Paint;
-import android.graphics.PorterDuff;
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Build;
@@ -247,6 +245,9 @@
             try {
                 ei.readExif(mPath);
                 return true;
+            } catch (NullPointerException e) {
+                Log.w("BitmapRegionTileSource", "reading exif failed", e);
+                return false;
             } catch (IOException e) {
                 Log.w("BitmapRegionTileSource", "getting decoder failed", e);
                 return false;
@@ -313,6 +314,9 @@
             } catch (IOException e) {
                 Log.e("BitmapRegionTileSource", "Failed to load URI " + mUri, e);
                 return false;
+            } catch (NullPointerException e) {
+                Log.e("BitmapRegionTileSource", "Failed to read EXIF for URI " + mUri, e);
+                return false;
             } finally {
                 Utils.closeSilently(is);
             }
diff --git a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
index a070e5e..5c8a8ef8 100644
--- a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
+++ b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java
@@ -71,6 +71,8 @@
     public static final int MAX_BMAP_IN_INTENT = 750000;
     private static final float WALLPAPER_SCREENS_SPAN = 2f;
 
+    protected static Point sDefaultWallpaperSize;
+
     protected CropView mCropView;
     protected Uri mUri;
     private View mSetWallpaperButton;
@@ -139,7 +141,21 @@
         final AsyncTask<Void, Void, Void> loadBitmapTask = new AsyncTask<Void, Void, Void>() {
             protected Void doInBackground(Void...args) {
                 if (!isCancelled()) {
-                    bitmapSource.loadInBackground();
+                    try {
+                        bitmapSource.loadInBackground();
+                    } catch (SecurityException securityException) {
+                        if (isDestroyed()) {
+                            // Temporarily granted permissions are revoked when the activity
+                            // finishes, potentially resulting in a SecurityException here.
+                            // Even though {@link #isDestroyed} might also return true in different
+                            // situations where the configuration changes, we are fine with
+                            // catching these cases here as well.
+                            cancel(false);
+                        } else {
+                            // otherwise it had a different cause and we throw it further
+                            throw securityException;
+                        }
+                    }
                 }
                 return null;
             }
@@ -209,32 +225,34 @@
     }
 
     static protected Point getDefaultWallpaperSize(Resources res, WindowManager windowManager) {
-        Point minDims = new Point();
-        Point maxDims = new Point();
-        windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims);
+        if (sDefaultWallpaperSize == null) {
+            Point minDims = new Point();
+            Point maxDims = new Point();
+            windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims);
 
-        int maxDim = Math.max(maxDims.x, maxDims.y);
-        int minDim = Math.max(minDims.x, minDims.y);
+            int maxDim = Math.max(maxDims.x, maxDims.y);
+            int minDim = Math.max(minDims.x, minDims.y);
 
-        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
-            Point realSize = new Point();
-            windowManager.getDefaultDisplay().getRealSize(realSize);
-            maxDim = Math.max(realSize.x, realSize.y);
-            minDim = Math.min(realSize.x, realSize.y);
+            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
+                Point realSize = new Point();
+                windowManager.getDefaultDisplay().getRealSize(realSize);
+                maxDim = Math.max(realSize.x, realSize.y);
+                minDim = Math.min(realSize.x, realSize.y);
+            }
+
+            // We need to ensure that there is enough extra space in the wallpaper
+            // for the intended parallax effects
+            final int defaultWidth, defaultHeight;
+            if (isScreenLarge(res)) {
+                defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim));
+                defaultHeight = maxDim;
+            } else {
+                defaultWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim);
+                defaultHeight = maxDim;
+            }
+            sDefaultWallpaperSize = new Point(defaultWidth, defaultHeight);
         }
-
-        // We need to ensure that there is enough extra space in the wallpaper
-        // for the intended
-        // parallax effects
-        final int defaultWidth, defaultHeight;
-        if (isScreenLarge(res)) {
-            defaultWidth = (int) (maxDim * wallpaperTravelToScreenWidthRatio(maxDim, minDim));
-            defaultHeight = maxDim;
-        } else {
-            defaultWidth = Math.max((int) (minDim * WALLPAPER_SCREENS_SPAN), maxDim);
-            defaultHeight = maxDim;
-        }
-        return new Point(defaultWidth, defaultHeight);
+        return sDefaultWallpaperSize;
     }
 
     public static int getRotationFromExif(String path) {
@@ -272,6 +290,9 @@
             }
         } catch (IOException e) {
             Log.w(LOGTAG, "Getting exif data failed", e);
+        } catch (NullPointerException e) {
+            // Sometimes the ExifInterface has an internal NPE if Exif data isn't valid
+            Log.w(LOGTAG, "Getting exif data failed", e);
         } finally {
             Utils.closeSilently(bis);
             Utils.closeSilently(is);
@@ -286,7 +307,6 @@
         final Point bounds = cropTask.getImageBounds();
         Runnable onEndCrop = new Runnable() {
             public void run() {
-                updateWallpaperDimensions(bounds.x, bounds.y);
                 if (finishActivityWhenDone) {
                     setResult(Activity.RESULT_OK);
                     finish();
@@ -310,9 +330,6 @@
                 inSize.x, inSize.y, outSize.x, outSize.y, false);
         Runnable onEndCrop = new Runnable() {
             public void run() {
-                // Passing 0, 0 will cause launcher to revert to using the
-                // default wallpaper size
-                updateWallpaperDimensions(0, 0);
                 if (finishActivityWhenDone) {
                     setResult(Activity.RESULT_OK);
                     finish();
@@ -406,7 +423,6 @@
 
         Runnable onEndCrop = new Runnable() {
             public void run() {
-                updateWallpaperDimensions(outWidth, outHeight);
                 if (finishActivityWhenDone) {
                     setResult(Activity.RESULT_OK);
                     finish();
@@ -787,40 +803,6 @@
         }
     }
 
-    protected void updateWallpaperDimensions(int width, int height) {
-        String spKey = getSharedPreferencesKey();
-        SharedPreferences sp = getSharedPreferences(spKey, Context.MODE_MULTI_PROCESS);
-        SharedPreferences.Editor editor = sp.edit();
-        if (width != 0 && height != 0) {
-            editor.putInt(WALLPAPER_WIDTH_KEY, width);
-            editor.putInt(WALLPAPER_HEIGHT_KEY, height);
-        } else {
-            editor.remove(WALLPAPER_WIDTH_KEY);
-            editor.remove(WALLPAPER_HEIGHT_KEY);
-        }
-        editor.commit();
-
-        suggestWallpaperDimension(getResources(),
-                sp, getWindowManager(), WallpaperManager.getInstance(this));
-    }
-
-    static public void suggestWallpaperDimension(Resources res,
-            final SharedPreferences sharedPrefs,
-            WindowManager windowManager,
-            final WallpaperManager wallpaperManager) {
-        final Point defaultWallpaperSize = getDefaultWallpaperSize(res, windowManager);
-
-        new AsyncTask<Void, Void, Void>() {
-            public Void doInBackground(Void ... args) {
-                // If we have saved a wallpaper width/height, use that instead
-                int savedWidth = sharedPrefs.getInt(WALLPAPER_WIDTH_KEY, defaultWallpaperSize.x);
-                int savedHeight = sharedPrefs.getInt(WALLPAPER_HEIGHT_KEY, defaultWallpaperSize.y);
-                wallpaperManager.suggestDesiredDimensions(savedWidth, savedHeight);
-                return null;
-            }
-        }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, (Void) null);
-    }
-
     protected static RectF getMaxCropRect(
             int inWidth, int inHeight, int outWidth, int outHeight, boolean leftAligned) {
         RectF cropRect = new RectF();
diff --git a/packages/services/PacProcessor/Android.mk b/packages/services/PacProcessor/Android.mk
index 3c4e951..79f8a1f 100644
--- a/packages/services/PacProcessor/Android.mk
+++ b/packages/services/PacProcessor/Android.mk
@@ -27,6 +27,8 @@
 
 LOCAL_JNI_SHARED_LIBRARIES := libjni_pacprocessor
 
+LOCAL_MULTILIB := 32
+
 include $(BUILD_PACKAGE)
 
 include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java
index 10bcdad..edb1630 100644
--- a/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java
+++ b/packages/services/Proxy/src/com/android/proxyhandler/ProxyServer.java
@@ -15,7 +15,6 @@
  */
 package com.android.proxyhandler;
 
-import android.net.ProxyProperties;
 import android.os.RemoteException;
 import android.util.Log;
 
@@ -25,7 +24,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.Proxy;
 import java.net.ProxySelector;
diff --git a/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java b/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java
index 109435c..cbea188 100644
--- a/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java
+++ b/packages/services/Proxy/src/com/android/proxyhandler/ProxyService.java
@@ -17,12 +17,8 @@
 
 import android.app.Service;
 import android.content.Intent;
-import android.net.Proxy;
-import android.net.ProxyProperties;
-import android.os.Bundle;
 import android.os.IBinder;
 import android.os.RemoteException;
-import android.text.TextUtils;
 
 import com.android.net.IProxyCallback;
 import com.android.net.IProxyPortListener;
diff --git a/policy/src/com/android/internal/policy/impl/BarController.java b/policy/src/com/android/internal/policy/impl/BarController.java
index 0ce4b12..fc49a569 100644
--- a/policy/src/com/android/internal/policy/impl/BarController.java
+++ b/policy/src/com/android/internal/policy/impl/BarController.java
@@ -108,7 +108,7 @@
         if (mWin != null) {
             if (win != null && (win.getAttrs().privateFlags
                     & WindowManager.LayoutParams.PRIVATE_FLAG_INHERIT_TRANSLUCENT_DECOR) == 0) {
-                if ((win.getAttrs().flags & mTranslucentWmFlag) != 0) {
+                if ((PolicyControl.getWindowFlags(win, null) & mTranslucentWmFlag) != 0) {
                     vis |= mTranslucentFlag;
                 } else {
                     vis &= ~mTranslucentFlag;
diff --git a/policy/src/com/android/internal/policy/impl/GlobalActions.java b/policy/src/com/android/internal/policy/impl/GlobalActions.java
index b8300af..fec9dda 100644
--- a/policy/src/com/android/internal/policy/impl/GlobalActions.java
+++ b/policy/src/com/android/internal/policy/impl/GlobalActions.java
@@ -417,36 +417,38 @@
     }
 
     private void addUsersToMenu(ArrayList<Action> items) {
-        List<UserInfo> users = ((UserManager) mContext.getSystemService(Context.USER_SERVICE))
-                .getUsers();
-        if (users.size() > 1) {
+        UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        if (um.isUserSwitcherEnabled()) {
+            List<UserInfo> users = um.getUsers();
             UserInfo currentUser = getCurrentUser();
             for (final UserInfo user : users) {
-                boolean isCurrentUser = currentUser == null
-                        ? user.id == 0 : (currentUser.id == user.id);
-                Drawable icon = user.iconPath != null ? Drawable.createFromPath(user.iconPath)
-                        : null;
-                SinglePressAction switchToUser = new SinglePressAction(
-                        com.android.internal.R.drawable.ic_menu_cc, icon,
-                        (user.name != null ? user.name : "Primary")
-                        + (isCurrentUser ? " \u2714" : "")) {
-                    public void onPress() {
-                        try {
-                            ActivityManagerNative.getDefault().switchUser(user.id);
-                        } catch (RemoteException re) {
-                            Log.e(TAG, "Couldn't switch user " + re);
+                if (user.supportsSwitchTo()) {
+                    boolean isCurrentUser = currentUser == null
+                            ? user.id == 0 : (currentUser.id == user.id);
+                    Drawable icon = user.iconPath != null ? Drawable.createFromPath(user.iconPath)
+                            : null;
+                    SinglePressAction switchToUser = new SinglePressAction(
+                            com.android.internal.R.drawable.ic_menu_cc, icon,
+                            (user.name != null ? user.name : "Primary")
+                            + (isCurrentUser ? " \u2714" : "")) {
+                        public void onPress() {
+                            try {
+                                ActivityManagerNative.getDefault().switchUser(user.id);
+                            } catch (RemoteException re) {
+                                Log.e(TAG, "Couldn't switch user " + re);
+                            }
                         }
-                    }
 
-                    public boolean showDuringKeyguard() {
-                        return true;
-                    }
+                        public boolean showDuringKeyguard() {
+                            return true;
+                        }
 
-                    public boolean showBeforeProvisioning() {
-                        return false;
-                    }
-                };
-                items.add(switchToUser);
+                        public boolean showBeforeProvisioning() {
+                            return false;
+                        }
+                    };
+                    items.add(switchToUser);
+                }
             }
         }
     }
@@ -645,7 +647,7 @@
                 icon.setImageDrawable(mIcon);
                 icon.setScaleType(ScaleType.CENTER_CROP);
             } else if (mIconResId != 0) {
-                icon.setImageDrawable(context.getResources().getDrawable(mIconResId));
+                icon.setImageDrawable(context.getDrawable(mIconResId));
             }
             if (mMessage != null) {
                 messageView.setText(mMessage);
@@ -735,7 +737,7 @@
 
             boolean on = ((mState == State.On) || (mState == State.TurningOn));
             if (icon != null) {
-                icon.setImageDrawable(context.getResources().getDrawable(
+                icon.setImageDrawable(context.getDrawable(
                         (on ? mEnabledIconResId : mDisabledIconResid)));
                 icon.setEnabled(enabled);
             }
diff --git a/policy/src/com/android/internal/policy/impl/IconUtilities.java b/policy/src/com/android/internal/policy/impl/IconUtilities.java
index a47c904..82f26ad 100644
--- a/policy/src/com/android/internal/policy/impl/IconUtilities.java
+++ b/policy/src/com/android/internal/policy/impl/IconUtilities.java
@@ -24,22 +24,13 @@
 import android.graphics.BlurMaskFilter;
 import android.graphics.Canvas;
 import android.graphics.ColorMatrix;
-import android.graphics.ColorMatrixColorFilter;
 import android.graphics.Paint;
 import android.graphics.PaintFlagsDrawFilter;
-import android.graphics.PixelFormat;
 import android.graphics.PorterDuff;
 import android.graphics.Rect;
-import android.graphics.RectF;
 import android.graphics.TableMaskFilter;
-import android.graphics.Typeface;
-import android.text.Layout.Alignment;
-import android.text.StaticLayout;
-import android.text.TextPaint;
 import android.util.DisplayMetrics;
-import android.util.Log;
 import android.util.TypedValue;
-import android.view.ContextThemeWrapper;
 import android.content.res.Resources;
 import android.content.Context;
 
diff --git a/policy/src/com/android/internal/policy/impl/ImmersiveModeConfirmation.java b/policy/src/com/android/internal/policy/impl/ImmersiveModeConfirmation.java
index b734c41..5602206 100644
--- a/policy/src/com/android/internal/policy/impl/ImmersiveModeConfirmation.java
+++ b/policy/src/com/android/internal/policy/impl/ImmersiveModeConfirmation.java
@@ -19,6 +19,7 @@
 import android.animation.ArgbEvaluator;
 import android.animation.ValueAnimator;
 import android.app.ActivityManager;
+import android.app.ActivityManagerNative;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -27,12 +28,12 @@
 import android.graphics.drawable.ColorDrawable;
 import android.os.Handler;
 import android.os.Message;
+import android.os.RemoteException;
 import android.os.UserHandle;
 import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.ArraySet;
 import android.util.DisplayMetrics;
 import android.util.Slog;
+import android.util.SparseBooleanArray;
 import android.view.Gravity;
 import android.view.MotionEvent;
 import android.view.View;
@@ -46,8 +47,6 @@
 
 import com.android.internal.R;
 
-import java.util.Arrays;
-
 /**
  *  Helper to manage showing/hiding a confirmation prompt when the navigation bar is hidden
  *  entering immersive mode.
@@ -56,19 +55,19 @@
     private static final String TAG = "ImmersiveModeConfirmation";
     private static final boolean DEBUG = false;
     private static final boolean DEBUG_SHOW_EVERY_TIME = false; // super annoying, use with caution
+    private static final String CONFIRMED = "confirmed";
 
     private final Context mContext;
     private final H mHandler;
-    private final ArraySet<String> mConfirmedPackages = new ArraySet<String>();
     private final long mShowDelayMs;
     private final long mPanicThresholdMs;
+    private final SparseBooleanArray mUserPanicResets = new SparseBooleanArray();
 
+    private boolean mConfirmed;
     private ClingWindowView mClingWindow;
-    private String mLastPackage;
-    private String mPromptPackage;
     private long mPanicTime;
-    private String mPanicPackage;
     private WindowManager mWindowManager;
+    private int mCurrentUserId;
 
     public ImmersiveModeConfirmation(Context context) {
         mContext = context;
@@ -85,83 +84,84 @@
         return exit != null ? exit.getDuration() : 0;
     }
 
-    public void loadSetting() {
-        if (DEBUG) Slog.d(TAG, "loadSetting()");
-        mConfirmedPackages.clear();
-        String packages = null;
+    public void loadSetting(int currentUserId) {
+        mConfirmed = false;
+        mCurrentUserId = currentUserId;
+        if (DEBUG) Slog.d(TAG, String.format("loadSetting() mCurrentUserId=%d resetForPanic=%s",
+                mCurrentUserId, mUserPanicResets.get(mCurrentUserId, false)));
+        String value = null;
         try {
-            packages = Settings.Secure.getStringForUser(mContext.getContentResolver(),
+            value = Settings.Secure.getStringForUser(mContext.getContentResolver(),
                     Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
                     UserHandle.USER_CURRENT);
-            if (packages != null) {
-                mConfirmedPackages.addAll(Arrays.asList(packages.split(",")));
-                if (DEBUG) Slog.d(TAG, "Loaded mConfirmedPackages=" + mConfirmedPackages);
-            }
+            mConfirmed = CONFIRMED.equals(value);
+            if (DEBUG) Slog.d(TAG, "Loaded mConfirmed=" + mConfirmed);
         } catch (Throwable t) {
-            Slog.w(TAG, "Error loading confirmations, packages=" + packages, t);
+            Slog.w(TAG, "Error loading confirmations, value=" + value, t);
         }
     }
 
     private void saveSetting() {
         if (DEBUG) Slog.d(TAG, "saveSetting()");
         try {
-            final String packages = TextUtils.join(",", mConfirmedPackages);
+            final String value = mConfirmed ? CONFIRMED : null;
             Settings.Secure.putStringForUser(mContext.getContentResolver(),
                     Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS,
-                    packages,
+                    value,
                     UserHandle.USER_CURRENT);
-            if (DEBUG) Slog.d(TAG, "Saved packages=" + packages);
+            if (DEBUG) Slog.d(TAG, "Saved value=" + value);
         } catch (Throwable t) {
-            Slog.w(TAG, "Error saving confirmations, mConfirmedPackages=" + mConfirmedPackages, t);
+            Slog.w(TAG, "Error saving confirmations, mConfirmed=" + mConfirmed, t);
         }
     }
 
     public void immersiveModeChanged(String pkg, boolean isImmersiveMode) {
-        if (pkg == null) {
-            return;
-        }
         mHandler.removeMessages(H.SHOW);
         if (isImmersiveMode) {
-            mLastPackage = pkg;
-            if (DEBUG_SHOW_EVERY_TIME || !mConfirmedPackages.contains(pkg)) {
-                mHandler.sendMessageDelayed(mHandler.obtainMessage(H.SHOW, pkg), mShowDelayMs);
+            final boolean disabled = PolicyControl.disableImmersiveConfirmation(pkg);
+            if (DEBUG) Slog.d(TAG, String.format("immersiveModeChanged() disabled=%s mConfirmed=%s",
+                    disabled, mConfirmed));
+            if (!disabled && (DEBUG_SHOW_EVERY_TIME || !mConfirmed)) {
+                mHandler.sendEmptyMessageDelayed(H.SHOW, mShowDelayMs);
             }
         } else {
-            mLastPackage = null;
             mHandler.sendEmptyMessage(H.HIDE);
         }
     }
 
-    public void onPowerKeyDown(boolean isScreenOn, long time, boolean inImmersiveMode) {
-        if (mPanicPackage != null && !isScreenOn && (time - mPanicTime < mPanicThresholdMs)) {
+    public boolean onPowerKeyDown(boolean isScreenOn, long time, boolean inImmersiveMode) {
+        if (!isScreenOn && (time - mPanicTime < mPanicThresholdMs)) {
             // turning the screen back on within the panic threshold
-            unconfirmPackage(mPanicPackage);
+            mHandler.sendEmptyMessage(H.PANIC);
+            return mClingWindow == null;
         }
         if (isScreenOn && inImmersiveMode) {
             // turning the screen off, remember if we were in immersive mode
             mPanicTime = time;
-            mPanicPackage = mLastPackage;
         } else {
             mPanicTime = 0;
-            mPanicPackage = null;
         }
+        return false;
     }
 
     public void confirmCurrentPrompt() {
-        mHandler.post(confirmAction(mPromptPackage));
+        if (mClingWindow != null) {
+            if (DEBUG) Slog.d(TAG, "confirmCurrentPrompt()");
+            mHandler.post(mConfirm);
+        }
     }
 
-    private void unconfirmPackage(String pkg) {
-        if (pkg != null) {
-            if (DEBUG) Slog.d(TAG, "Unconfirming immersive mode confirmation for " + pkg);
-            mConfirmedPackages.remove(pkg);
-            saveSetting();
-        }
+    private void handlePanic() {
+        if (DEBUG) Slog.d(TAG, "handlePanic()");
+        if (mUserPanicResets.get(mCurrentUserId, false)) return;  // already reset for panic
+        mUserPanicResets.put(mCurrentUserId, true);
+        mConfirmed = false;
+        saveSetting();
     }
 
     private void handleHide() {
         if (mClingWindow != null) {
-            if (DEBUG) Slog.d(TAG, "Hiding immersive mode confirmation for " + mPromptPackage);
+            if (DEBUG) Slog.d(TAG, "Hiding immersive mode confirmation");
             mWindowManager.removeView(mClingWindow);
             mClingWindow = null;
         }
@@ -297,11 +297,10 @@
         }
     }
 
-    private void handleShow(String pkg) {
-        mPromptPackage = pkg;
-        if (DEBUG) Slog.d(TAG, "Showing immersive mode confirmation for " + pkg);
+    private void handleShow() {
+        if (DEBUG) Slog.d(TAG, "Showing immersive mode confirmation");
 
-        mClingWindow = new ClingWindowView(mContext, confirmAction(pkg));
+        mClingWindow = new ClingWindowView(mContext, mConfirm);
 
         // we will be hiding the nav bar, so layout as if it's already hidden
         mClingWindow.setSystemUiVisibility(
@@ -313,33 +312,35 @@
         mWindowManager.addView(mClingWindow, lp);
     }
 
-    private Runnable confirmAction(final String pkg) {
-        return new Runnable() {
-            @Override
-            public void run() {
-                if (pkg != null && !mConfirmedPackages.contains(pkg)) {
-                    if (DEBUG) Slog.d(TAG, "Confirming immersive mode for " + pkg);
-                    mConfirmedPackages.add(pkg);
-                    saveSetting();
-                }
-                handleHide();
+    private final Runnable mConfirm = new Runnable() {
+        @Override
+        public void run() {
+            if (DEBUG) Slog.d(TAG, "mConfirm.run()");
+            if (!mConfirmed) {
+                mConfirmed = true;
+                saveSetting();
             }
-        };
-    }
+            handleHide();
+        }
+    };
 
     private final class H extends Handler {
-        private static final int SHOW = 0;
-        private static final int HIDE = 1;
+        private static final int SHOW = 1;
+        private static final int HIDE = 2;
+        private static final int PANIC = 3;
 
         @Override
         public void handleMessage(Message msg) {
             switch(msg.what) {
                 case SHOW:
-                    handleShow((String)msg.obj);
+                    handleShow();
                     break;
                 case HIDE:
                     handleHide();
                     break;
+                case PANIC:
+                    handlePanic();
+                    break;
             }
         }
     }
diff --git a/policy/src/com/android/internal/policy/impl/PhoneLayoutInflater.java b/policy/src/com/android/internal/policy/impl/PhoneLayoutInflater.java
index 968976b..df6fca4c 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneLayoutInflater.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneLayoutInflater.java
@@ -16,8 +16,6 @@
 
 package com.android.internal.policy.impl;
 
-import java.util.Map;
-
 import android.content.Context;
 import android.util.AttributeSet;
 import android.view.View;
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index fb4466d..50e2a2e 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -22,8 +22,6 @@
 import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
 import static android.view.WindowManager.LayoutParams.*;
 
-import android.view.ViewConfiguration;
-
 import com.android.internal.R;
 import com.android.internal.view.RootViewSurfaceTaker;
 import com.android.internal.view.StandaloneActionMode;
@@ -40,6 +38,9 @@
 import com.android.internal.widget.ActionBarView;
 import com.android.internal.widget.SwipeDismissLayout;
 
+import android.animation.Animator;
+import android.animation.ObjectAnimator;
+import android.app.ActivityOptions;
 import android.app.KeyguardManager;
 import android.content.Context;
 import android.content.pm.ActivityInfo;
@@ -53,17 +54,26 @@
 import android.media.AudioManager;
 import android.net.Uri;
 import android.os.Bundle;
-import android.os.Debug;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.transition.ChangeBounds;
+import android.transition.Explode;
+import android.transition.Fade;
+import android.transition.MoveImage;
+import android.transition.Scene;
+import android.transition.Transition;
+import android.transition.TransitionInflater;
+import android.transition.TransitionManager;
+import android.transition.TransitionSet;
 import android.util.AndroidRuntimeException;
+import android.util.ArrayMap;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
 import android.util.Log;
-import android.util.Slog;
 import android.util.SparseArray;
 import android.util.TypedValue;
 import android.view.ActionMode;
@@ -81,11 +91,13 @@
 import android.view.MotionEvent;
 import android.view.SurfaceHolder;
 import android.view.View;
+import android.view.ViewConfiguration;
 import android.view.ViewGroup;
 import android.view.ViewManager;
 import android.view.ViewParent;
 import android.view.ViewRootImpl;
 import android.view.ViewStub;
+import android.view.ViewTreeObserver;
 import android.view.Window;
 import android.view.WindowManager;
 import android.view.accessibility.AccessibilityEvent;
@@ -100,6 +112,8 @@
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Map;
 
 /**
  * Android-specific Window.
@@ -112,7 +126,6 @@
     private final static String TAG = "PhoneWindow";
 
     private final static boolean SWEEP_OPEN_MENU = false;
-
     /**
      * Simple callback used by the context menu and its submenus. The options
      * menu submenus do not use this (their behavior is more complex).
@@ -135,19 +148,22 @@
     private ViewGroup mContentParent;
 
     SurfaceHolder.Callback2 mTakeSurfaceCallback;
-    
+
     InputQueue.Callback mTakeInputQueueCallback;
-    
+
     private boolean mIsFloating;
 
     private LayoutInflater mLayoutInflater;
 
     private TextView mTitleView;
-    
+
     private ActionBarView mActionBar;
     private ActionMenuPresenterCallback mActionMenuPresenterCallback;
     private PanelMenuPresenterCallback mPanelMenuPresenterCallback;
 
+    private TransitionManager mTransitionManager;
+    private Scene mContentScene;
+
     // The icon resource has been explicitly set elsewhere
     // and should not be overwritten with a default.
     static final int FLAG_RESOURCE_SET_ICON = 1 << 0;
@@ -228,6 +244,13 @@
         }
     };
 
+    private Transition mEnterTransition;
+    private Transition mExitTransition;
+    private Transition mSharedElementEnterTransition;
+    private Transition mSharedElementExitTransition;
+    private Boolean mAllowExitTransitionOverlap;
+    private Boolean mAllowEnterTransitionOverlap;
+
     static class WindowManagerHolder {
         static final IWindowManager sWindowManager = IWindowManager.Stub.asInterface(
                 ServiceManager.getService("window"));
@@ -292,13 +315,38 @@
     }
 
     @Override
+    public TransitionManager getTransitionManager() {
+        return mTransitionManager;
+    }
+
+    @Override
+    public void setTransitionManager(TransitionManager tm) {
+        mTransitionManager = tm;
+    }
+
+    @Override
+    public Scene getContentScene() {
+        return mContentScene;
+    }
+
+    @Override
     public void setContentView(int layoutResID) {
+        // Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window
+        // decor, when theme attributes and the like are crystalized. Do not check the feature
+        // before this happens.
         if (mContentParent == null) {
             installDecor();
-        } else {
+        } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
             mContentParent.removeAllViews();
         }
-        mLayoutInflater.inflate(layoutResID, mContentParent);
+
+        if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
+            final Scene newScene = Scene.getSceneForLayout(mContentParent, layoutResID,
+                    getContext());
+            transitionTo(newScene);
+        } else {
+            mLayoutInflater.inflate(layoutResID, mContentParent);
+        }
         final Callback cb = getCallback();
         if (cb != null && !isDestroyed()) {
             cb.onContentChanged();
@@ -312,12 +360,22 @@
 
     @Override
     public void setContentView(View view, ViewGroup.LayoutParams params) {
+        // Note: FEATURE_CONTENT_TRANSITIONS may be set in the process of installing the window
+        // decor, when theme attributes and the like are crystalized. Do not check the feature
+        // before this happens.
         if (mContentParent == null) {
             installDecor();
-        } else {
+        } else if (!hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
             mContentParent.removeAllViews();
         }
-        mContentParent.addView(view, params);
+
+        if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
+            view.setLayoutParams(params);
+            final Scene newScene = new Scene(mContentParent, view);
+            transitionTo(newScene);
+        } else {
+            mContentParent.addView(view, params);
+        }
         final Callback cb = getCallback();
         if (cb != null && !isDestroyed()) {
             cb.onContentChanged();
@@ -329,6 +387,11 @@
         if (mContentParent == null) {
             installDecor();
         }
+        if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
+            // TODO Augment the scenes/transitions API to support this.
+            throw new UnsupportedOperationException(
+                    "addContentView does not support content transitions");
+        }
         mContentParent.addView(view, params);
         final Callback cb = getCallback();
         if (cb != null && !isDestroyed()) {
@@ -336,6 +399,15 @@
         }
     }
 
+    private void transitionTo(Scene scene) {
+        if (mContentScene == null) {
+            scene.enter();
+        } else {
+            mTransitionManager.transitionTo(scene);
+        }
+        mContentScene = scene;
+    }
+
     @Override
     public View getCurrentFocus() {
         return mDecor != null ? mDecor.findFocus() : null;
@@ -345,11 +417,11 @@
     public void takeSurface(SurfaceHolder.Callback2 callback) {
         mTakeSurfaceCallback = callback;
     }
-    
+
     public void takeInputQueue(InputQueue.Callback callback) {
         mTakeInputQueueCallback = callback;
     }
-    
+
     @Override
     public boolean isFloating() {
         return mIsFloating;
@@ -377,6 +449,7 @@
     }
 
     @Override
+    @Deprecated
     public void setTitleColor(int textColor) {
         if (mTitleView != null) {
             mTitleView.setTextColor(textColor);
@@ -635,7 +708,7 @@
                 // Otherwise, set the normal panel background
                 backgroundResId = st.background;
             }
-            st.decorView.setWindowBackground(getContext().getResources().getDrawable(
+            st.decorView.setWindowBackground(getContext().getDrawable(
                     backgroundResId));
 
             ViewParent shownPanelParent = st.shownPanelView.getParent();
@@ -1220,7 +1293,7 @@
             if (st.resid != resId) {
                 st.resid = resId;
                 st.uri = null;
-                st.local = getContext().getResources().getDrawable(resId);
+                st.local = getContext().getDrawable(resId);
                 updateDrawable(featureId, st, false);
             }
         } else {
@@ -2236,7 +2309,7 @@
                     if (mMenuBackground == null && mFeatureId < 0
                             && getAttributes().height
                             == WindowManager.LayoutParams.MATCH_PARENT) {
-                        mMenuBackground = getContext().getResources().getDrawable(
+                        mMenuBackground = getContext().getDrawable(
                                 com.android.internal.R.drawable.menu_background);
                     }
                     if (mMenuBackground != null) {
@@ -2513,6 +2586,11 @@
             return super.fitSystemWindows(insets);
         }
 
+        @Override
+        public boolean isTransitionGroup() {
+            return false;
+        }
+
         private void updateStatusGuard(Rect insets) {
             boolean showStatusGuard = false;
             // Show the status guard when the non-overlay contextual action bar is showing
@@ -2913,6 +2991,9 @@
             a.getValue(com.android.internal.R.styleable.Window_windowFixedHeightMinor,
                     mFixedHeightMinor);
         }
+        if (a.getBoolean(com.android.internal.R.styleable.Window_windowContentTransitions, false)) {
+            requestFeature(FEATURE_CONTENT_TRANSITIONS);
+        }
         if (a.hasValue(com.android.internal.R.styleable.Window_windowOutsetBottom)) {
             if (mOutsetBottom == null) mOutsetBottom = new TypedValue();
             a.getValue(com.android.internal.R.styleable.Window_windowOutsetBottom, mOutsetBottom);
@@ -3072,12 +3153,12 @@
         if (getContainer() == null) {
             Drawable drawable = mBackgroundDrawable;
             if (mBackgroundResource != 0) {
-                drawable = getContext().getResources().getDrawable(mBackgroundResource);
+                drawable = getContext().getDrawable(mBackgroundResource);
             }
             mDecor.setWindowBackground(drawable);
             drawable = null;
             if (mFrameResource != 0) {
-                drawable = getContext().getResources().getDrawable(mFrameResource);
+                drawable = getContext().getDrawable(mFrameResource);
             }
             mDecor.setWindowFrame(drawable);
 
@@ -3212,13 +3293,63 @@
                     });
                 }
             }
+
+            // Only inflate or create a new TransitionManager if the caller hasn't
+            // already set a custom one.
+            if (hasFeature(FEATURE_CONTENT_TRANSITIONS)) {
+                if (mTransitionManager == null) {
+                    final int transitionRes = getWindowStyle().getResourceId(
+                            com.android.internal.R.styleable.Window_windowContentTransitionManager,
+                            0);
+                    if (transitionRes != 0) {
+                        final TransitionInflater inflater = TransitionInflater.from(getContext());
+                        mTransitionManager = inflater.inflateTransitionManager(transitionRes,
+                                mContentParent);
+                    } else {
+                        mTransitionManager = new TransitionManager();
+                    }
+                }
+
+                mEnterTransition = getTransition(mEnterTransition,
+                        com.android.internal.R.styleable.Window_windowEnterTransition);
+                mExitTransition = getTransition(mExitTransition,
+                        com.android.internal.R.styleable.Window_windowExitTransition);
+                mSharedElementEnterTransition = getTransition(mSharedElementEnterTransition,
+                        com.android.internal.R.styleable.Window_windowSharedElementEnterTransition);
+                mSharedElementExitTransition = getTransition(mSharedElementExitTransition,
+                        com.android.internal.R.styleable.Window_windowSharedElementExitTransition);
+                if (mAllowEnterTransitionOverlap == null) {
+                    mAllowEnterTransitionOverlap = getWindowStyle().getBoolean(
+                            com.android.internal.R.styleable.
+                                    Window_windowAllowEnterTransitionOverlap, true);
+                }
+                if (mAllowExitTransitionOverlap == null) {
+                    mAllowExitTransitionOverlap = getWindowStyle().getBoolean(
+                            com.android.internal.R.styleable.
+                                    Window_windowAllowExitTransitionOverlap, true);
+                }
+            }
         }
     }
 
+    private Transition getTransition(Transition currentValue, int id) {
+        if (currentValue != null) {
+            return currentValue;
+        }
+        int transitionId = getWindowStyle().getResourceId(id, -1);
+        Transition transition = null;
+        if (transitionId != -1 && transitionId != com.android.internal.R.transition.no_transition) {
+            TransitionInflater inflater = TransitionInflater.from(getContext());
+            transition = inflater.inflateTransition(transitionId);
+        }
+        return transition;
+    }
+
     private Drawable loadImageURI(Uri uri) {
         try {
-            return Drawable.createFromStream(
-                    getContext().getContentResolver().openInputStream(uri), null);
+            final Context context = getContext();
+            return Drawable.createFromStreamThemed(
+                    context.getContentResolver().openInputStream(uri), null, context.getTheme());
         } catch (Exception e) {
             Log.w(TAG, "Unable to open content: " + uri);
         }
@@ -3538,6 +3669,72 @@
         return mVolumeControlStreamType;
     }
 
+    private boolean isTranslucent() {
+        TypedArray a = getWindowStyle();
+        return a.getBoolean(a.getResourceId(
+                com.android.internal.R.styleable.Window_windowIsTranslucent, 0), false);
+    }
+
+    @Override
+    public void setEnterTransition(Transition enterTransition) {
+        mEnterTransition = enterTransition;
+    }
+
+    @Override
+    public void setExitTransition(Transition exitTransition) {
+        mExitTransition = exitTransition;
+    }
+
+    @Override
+    public void setSharedElementEnterTransition(Transition sharedElementEnterTransition) {
+        mSharedElementEnterTransition = sharedElementEnterTransition;
+    }
+
+    @Override
+    public void setSharedElementExitTransition(Transition sharedElementExitTransition) {
+        mSharedElementExitTransition = sharedElementExitTransition;
+    }
+
+    @Override
+    public Transition getEnterTransition() {
+        return mEnterTransition;
+    }
+
+    @Override
+    public Transition getExitTransition() {
+        return mExitTransition;
+    }
+
+    @Override
+    public Transition getSharedElementEnterTransition() {
+        return mSharedElementEnterTransition;
+    }
+
+    @Override
+    public Transition getSharedElementExitTransition() {
+        return mSharedElementExitTransition;
+    }
+
+    @Override
+    public void setAllowEnterTransitionOverlap(boolean allow) {
+        mAllowEnterTransitionOverlap = allow;
+    }
+
+    @Override
+    public boolean getAllowEnterTransitionOverlap() {
+        return (mAllowEnterTransitionOverlap == null) ? true : mAllowEnterTransitionOverlap;
+    }
+
+    @Override
+    public void setAllowExitTransitionOverlap(boolean allowExitTransitionOverlap) {
+        mAllowExitTransitionOverlap = allowExitTransitionOverlap;
+    }
+
+    @Override
+    public boolean getAllowExitTransitionOverlap() {
+        return (mAllowExitTransitionOverlap == null) ? true : mAllowExitTransitionOverlap;
+    }
+
     private static final class DrawableFeatureState {
         DrawableFeatureState(int _featureId) {
             featureId = _featureId;
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 72f1e4f..ae6aeee 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -91,10 +91,13 @@
 import android.view.WindowManagerGlobal;
 import android.view.WindowManagerPolicy;
 import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityManager;
 import android.view.animation.Animation;
 import android.view.animation.AnimationUtils;
 
 import com.android.internal.R;
+import com.android.internal.policy.IKeyguardService;
+import com.android.internal.policy.IKeyguardServiceConstants;
 import com.android.internal.policy.PolicyManager;
 import com.android.internal.policy.impl.keyguard.KeyguardServiceDelegate;
 import com.android.internal.statusbar.IStatusBarService;
@@ -173,6 +176,8 @@
      * Keyguard stuff
      */
     private WindowState mKeyguardScrim;
+    private boolean mKeyguardHidden;
+    private boolean mKeyguardDrawn;
 
     /* Table of Application Launch keys.  Maps from key codes to intent categories.
      *
@@ -213,6 +218,7 @@
     final Object mServiceAquireLock = new Object();
     Vibrator mVibrator; // Vibrator for giving feedback of orientation changes
     SearchManager mSearchManager;
+    AccessibilityManager mAccessibilityManager;
 
     // Vibrator pattern for haptic feedback of a long press.
     long[] mLongPressVibePattern;
@@ -223,6 +229,9 @@
     // Vibrator pattern for a short vibration.
     long[] mKeyboardTapVibePattern;
 
+    // Vibrator pattern for a short vibration when tapping on an hour/minute tick of a Clock.
+    long[] mClockTickVibePattern;
+
     // Vibrator pattern for haptic feedback during boot when safe mode is disabled.
     long[] mSafeModeDisabledVibePattern;
 
@@ -243,7 +252,6 @@
     int[] mNavigationBarHeightForRotation = new int[4];
     int[] mNavigationBarWidthForRotation = new int[4];
 
-    WindowState mKeyguard = null;
     KeyguardServiceDelegate mKeyguardDelegate;
     GlobalActions mGlobalActions;
     volatile boolean mPowerKeyHandled; // accessed from input reader and handler thread
@@ -297,7 +305,6 @@
     boolean mOrientationSensorEnabled = false;
     int mCurrentAppOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
     boolean mHasSoftInput = false;
-    boolean mTouchExplorationEnabled = false;
     boolean mTranslucentDecorEnabled = true;
 
     int mPointerLocationMode = 0; // guarded by mLock
@@ -306,17 +313,6 @@
     WindowState mFocusedWindow;
     IApplicationToken mFocusedApp;
 
-    private final class PointerLocationPointerEventListener implements PointerEventListener {
-        @Override
-        public void onPointerEvent(MotionEvent motionEvent) {
-            if (mPointerLocationView != null) {
-                mPointerLocationView.addPointerEvent(motionEvent);
-            }
-        }
-    }
-
-    // Pointer location view state, only modified on the mHandler Looper.
-    PointerLocationPointerEventListener mPointerLocationPointerEventListener;
     PointerLocationView mPointerLocationView;
 
     // The current size of the screen; really; extends into the overscan area of
@@ -534,9 +530,12 @@
             resolver.registerContentObserver(Settings.Secure.getUriFor(
                     Settings.Secure.DEFAULT_INPUT_METHOD), false, this,
                     UserHandle.USER_ALL);
-            resolver.registerContentObserver(Settings.System.getUriFor(
+            resolver.registerContentObserver(Settings.Secure.getUriFor(
                     Settings.Secure.IMMERSIVE_MODE_CONFIRMATIONS), false, this,
                     UserHandle.USER_ALL);
+            resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.POLICY_CONTROL), false, this,
+                    UserHandle.USER_ALL);
             updateSettings();
         }
 
@@ -912,6 +911,9 @@
                 com.android.internal.R.bool.config_enableTranslucentDecor);
         readConfigurationDependentBehaviors();
 
+        mAccessibilityManager = (AccessibilityManager) context.getSystemService(
+                Context.ACCESSIBILITY_SERVICE);
+
         // register for dock events
         IntentFilter filter = new IntentFilter();
         filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
@@ -972,6 +974,8 @@
                 com.android.internal.R.array.config_virtualKeyVibePattern);
         mKeyboardTapVibePattern = getLongIntArray(mContext.getResources(),
                 com.android.internal.R.array.config_keyboardTapVibePattern);
+        mClockTickVibePattern = getLongIntArray(mContext.getResources(),
+                com.android.internal.R.array.config_clockTickVibePattern);
         mSafeModeDisabledVibePattern = getLongIntArray(mContext.getResources(),
                 com.android.internal.R.array.config_safeModeDisabledVibePattern);
         mSafeModeEnabledVibePattern = getLongIntArray(mContext.getResources(),
@@ -986,7 +990,7 @@
         initializeHdmiState();
 
         // Match current screen state.
-        if (mPowerManager.isScreenOn()) {
+        if (mPowerManager.isInteractive()) {
             wakingUp(null);
         } else {
             goingToSleep(WindowManagerPolicy.OFF_BECAUSE_OF_USER);
@@ -1110,7 +1114,8 @@
      *         navigation bar and touch exploration is not enabled
      */
     private boolean canHideNavigationBar() {
-        return mHasNavigationBar && !mTouchExplorationEnabled;
+        return mHasNavigationBar
+                && !mAccessibilityManager.isTouchExplorationEnabled();
     }
 
     @Override
@@ -1179,8 +1184,9 @@
                 updateRotation = true;
             }
             if (mImmersiveModeConfirmation != null) {
-                mImmersiveModeConfirmation.loadSetting();
+                mImmersiveModeConfirmation.loadSetting(mCurrentUserId);
             }
+            PolicyControl.reloadFromSetting(mContext);
         }
         if (updateRotation) {
             updateRotation(true);
@@ -1191,7 +1197,6 @@
         if (mPointerLocationView == null) {
             mPointerLocationView = new PointerLocationView(mContext);
             mPointerLocationView.setPrintCoords(false);
-
             WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
                     WindowManager.LayoutParams.MATCH_PARENT,
                     WindowManager.LayoutParams.MATCH_PARENT);
@@ -1211,22 +1216,14 @@
                     mContext.getSystemService(Context.WINDOW_SERVICE);
             lp.inputFeatures |= WindowManager.LayoutParams.INPUT_FEATURE_NO_INPUT_CHANNEL;
             wm.addView(mPointerLocationView, lp);
-
-            mPointerLocationPointerEventListener = new PointerLocationPointerEventListener();
-            mWindowManagerFuncs.registerPointerEventListener(mPointerLocationPointerEventListener);
+            mWindowManagerFuncs.registerPointerEventListener(mPointerLocationView);
         }
     }
 
     private void disablePointerLocation() {
-        if (mPointerLocationPointerEventListener != null) {
-            mWindowManagerFuncs.unregisterPointerEventListener(
-                    mPointerLocationPointerEventListener);
-            mPointerLocationPointerEventListener = null;
-        }
-
         if (mPointerLocationView != null) {
-            WindowManager wm = (WindowManager)
-                    mContext.getSystemService(Context.WINDOW_SERVICE);
+            mWindowManagerFuncs.unregisterPointerEventListener(mPointerLocationView);
+            WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
             wm.removeView(mPointerLocationView);
             mPointerLocationView = null;
         }
@@ -1318,7 +1315,6 @@
             case TYPE_BOOT_PROGRESS:
             case TYPE_DISPLAY_OVERLAY:
             case TYPE_HIDDEN_NAV_CONSUMER:
-            case TYPE_KEYGUARD:
             case TYPE_KEYGUARD_SCRIM:
             case TYPE_KEYGUARD_DIALOG:
             case TYPE_MAGNIFICATION_OVERLAY:
@@ -1355,6 +1351,22 @@
                         | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
                 attrs.flags &= ~WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
                 break;
+            case TYPE_STATUS_BAR:
+
+                // If the Keyguard is in a hidden state (occluded by another window), we force to
+                // remove the wallpaper and keyguard flag so that any change in-flight after setting
+                // the keyguard as occluded wouldn't set these flags again.
+                // See {@link #processKeyguardSetHiddenResultLw}.
+                if (mKeyguardHidden) {
+                    attrs.flags &= ~WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
+                    attrs.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
+                }
+                break;
+        }
+
+        if (attrs.type != TYPE_STATUS_BAR) {
+            // The status bar is the only window allowed to exhibit keyguard behavior.
+            attrs.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
         }
     }
     
@@ -1441,54 +1453,50 @@
         case TYPE_KEYGUARD_SCRIM:
             // the safety window that shows behind keyguard while keyguard is starting
             return 12;
-        case TYPE_KEYGUARD:
-            // the keyguard; nothing on top of these can take focus, since they are
-            // responsible for power management when displayed.
-            return 13;
-        case TYPE_KEYGUARD_DIALOG:
-            return 14;
         case TYPE_STATUS_BAR_SUB_PANEL:
-            return 15;
+            return 13;
         case TYPE_STATUS_BAR:
-            return 16;
+            return 14;
         case TYPE_STATUS_BAR_PANEL:
-            return 17;
+            return 15;
+        case TYPE_KEYGUARD_DIALOG:
+            return 16;
         case TYPE_VOLUME_OVERLAY:
             // the on-screen volume indicator and controller shown when the user
             // changes the device volume
-            return 18;
+            return 17;
         case TYPE_SYSTEM_OVERLAY:
             // the on-screen volume indicator and controller shown when the user
             // changes the device volume
-            return 19;
+            return 18;
         case TYPE_NAVIGATION_BAR:
             // the navigation bar, if available, shows atop most things
-            return 20;
+            return 19;
         case TYPE_NAVIGATION_BAR_PANEL:
             // some panels (e.g. search) need to show on top of the navigation bar
-            return 21;
+            return 20;
         case TYPE_SYSTEM_ERROR:
             // system-level error dialogs
-            return 22;
+            return 21;
         case TYPE_MAGNIFICATION_OVERLAY:
             // used to highlight the magnified portion of a display
-            return 23;
+            return 22;
         case TYPE_DISPLAY_OVERLAY:
             // used to simulate secondary display devices
-            return 24;
+            return 23;
         case TYPE_DRAG:
             // the drag layer: input for drag-and-drop is associated with this window,
             // which sits above all other focusable windows
-            return 25;
+            return 24;
         case TYPE_SECURE_SYSTEM_OVERLAY:
-            return 26;
+            return 25;
         case TYPE_BOOT_PROGRESS:
-            return 27;
+            return 26;
         case TYPE_POINTER:
             // the (mouse) pointer layer
-            return 28;
+            return 27;
         case TYPE_HIDDEN_NAV_CONSUMER:
-            return 29;
+            return 28;
         }
         Log.e(TAG, "Unknown window type: " + type);
         return 2;
@@ -1558,7 +1566,7 @@
 
     @Override
     public boolean doesForceHide(WindowState win, WindowManager.LayoutParams attrs) {
-        return attrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD;
+        return (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0;
     }
 
     @Override
@@ -1569,7 +1577,6 @@
             case TYPE_WALLPAPER:
             case TYPE_DREAM:
             case TYPE_UNIVERSE_BACKGROUND:
-            case TYPE_KEYGUARD:
             case TYPE_KEYGUARD_SCRIM:
                 return false;
             default:
@@ -1768,12 +1775,6 @@
                         android.Manifest.permission.STATUS_BAR_SERVICE,
                         "PhoneWindowManager");
                 break;
-            case TYPE_KEYGUARD:
-                if (mKeyguard != null) {
-                    return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON;
-                }
-                mKeyguard = win;
-                break;
             case TYPE_KEYGUARD_SCRIM:
                 if (mKeyguardScrim != null) {
                     return WindowManagerGlobal.ADD_MULTIPLE_SINGLETON;
@@ -1790,9 +1791,6 @@
         if (mStatusBar == win) {
             mStatusBar = null;
             mStatusBarController.setWindow(null);
-        } else if (mKeyguard == win) {
-            Log.v(TAG, "Removing keyguard window (Did it crash?)");
-            mKeyguard = null;
             mKeyguardDelegate.showScrim();
         } else if (mKeyguardScrim == win) {
             Log.v(TAG, "Removing keyguard scrim");
@@ -1811,12 +1809,13 @@
         if (PRINT_ANIM) Log.i(TAG, "selectAnimation in " + win
               + ": transit=" + transit);
         if (win == mStatusBar) {
+            boolean isKeyguard = (win.getAttrs().privateFlags & PRIVATE_FLAG_KEYGUARD) != 0;
             if (transit == TRANSIT_EXIT
                     || transit == TRANSIT_HIDE) {
-                return R.anim.dock_top_exit;
+                return isKeyguard ? -1 : R.anim.dock_top_exit;
             } else if (transit == TRANSIT_ENTER
                     || transit == TRANSIT_SHOW) {
-                return R.anim.dock_top_enter;
+                return isKeyguard ? -1 : R.anim.dock_top_enter;
             }
         } else if (win == mNavigationBar) {
             // This can be on either the bottom or the right.
@@ -2037,9 +2036,9 @@
             WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;
             if (attrs != null) {
                 final int type = attrs.type;
-                if (type == WindowManager.LayoutParams.TYPE_KEYGUARD
-                        || type == WindowManager.LayoutParams.TYPE_KEYGUARD_SCRIM
-                        || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {
+                if (type == WindowManager.LayoutParams.TYPE_KEYGUARD_SCRIM
+                        || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG
+                        || (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
                     // the "app" is keyguard, so give it the key
                     return 0;
                 }
@@ -2468,7 +2467,7 @@
      * given the situation with the keyguard.
      */
     void launchHomeFromHotKey() {
-        if (mKeyguardDelegate != null && mKeyguardDelegate.isShowingAndNotHidden()) {
+        if (mKeyguardDelegate != null && mKeyguardDelegate.isShowingAndNotOccluded()) {
             // don't launch home if keyguard showing
         } else if (!mHideLockScreen && mKeyguardDelegate.isInputRestricted()) {
             // when in keyguard restricted mode, must first verify unlock
@@ -2588,8 +2587,9 @@
 
     @Override
     public void getContentInsetHintLw(WindowManager.LayoutParams attrs, Rect contentInset) {
-        final int fl = attrs.flags;
-        final int systemUiVisibility = (attrs.systemUiVisibility|attrs.subtreeSystemUiVisibility);
+        final int fl = PolicyControl.getWindowFlags(null, attrs);
+        final int sysuiVis = PolicyControl.getSystemUiVisibility(null, attrs);
+        final int systemUiVisibility = (sysuiVis | attrs.subtreeSystemUiVisibility);
 
         if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR))
                 == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) {
@@ -2761,7 +2761,8 @@
                         // We currently want to hide the navigation UI.
                         mNavigationBarController.setBarShowingLw(false);
                     }
-                    if (navVisible && !navTranslucent && !mNavigationBar.isAnimatingLw()
+                    if (navVisible && !navTranslucent && !navAllowedHidden
+                            && !mNavigationBar.isAnimatingLw()
                             && !mNavigationBarController.wasRecentlyTranslucent()) {
                         // If the opaque nav bar is currently requested to be visible,
                         // and not in the process of animating on or off, then
@@ -2970,9 +2971,9 @@
             offsetInputMethodWindowLw(mLastInputMethodWindow);
         }
 
-        final int fl = attrs.flags;
+        final int fl = PolicyControl.getWindowFlags(win, attrs);
         final int sim = attrs.softInputMode;
-        final int sysUiFl = win.getSystemUiVisibility();
+        final int sysUiFl = PolicyControl.getSystemUiVisibility(win, null);
 
         final Rect pf = mTmpParentFrame;
         final Rect df = mTmpDisplayFrame;
@@ -3088,9 +3089,8 @@
                                 + mOverscanScreenHeight;
                     } else if (canHideNavigationBar()
                             && (sysUiFl & View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) != 0
-                            && (attrs.type == WindowManager.LayoutParams.TYPE_KEYGUARD || (
-                                attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
-                             && attrs.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW))) {
+                            && attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
+                            && attrs.type <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
                         // Asking for layout as if the nav bar is hidden, lets the
                         // application extend into the unrestricted overscan screen area.  We
                         // only do this for application windows to ensure no window that
@@ -3391,21 +3391,25 @@
                                 WindowManager.LayoutParams attrs) {
         if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw="
                 + win.isVisibleOrBehindKeyguardLw());
+        final int fl = PolicyControl.getWindowFlags(win, attrs);
         if (mTopFullscreenOpaqueWindowState == null
                 && win.isVisibleLw() && attrs.type == TYPE_INPUT_METHOD) {
             mForcingShowNavBar = true;
             mForcingShowNavBarLayer = win.getSurfaceLayer();
         }
+        if (attrs.type == TYPE_STATUS_BAR && (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
+            mForceStatusBarFromKeyguard = true;
+        }
         if (mTopFullscreenOpaqueWindowState == null &&
                 win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw()) {
-            if ((attrs.flags & FLAG_FORCE_NOT_FULLSCREEN) != 0) {
-                if (attrs.type == TYPE_KEYGUARD) {
+            if ((fl & FLAG_FORCE_NOT_FULLSCREEN) != 0) {
+                if ((attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
                     mForceStatusBarFromKeyguard = true;
                 } else {
                     mForceStatusBar = true;
                 }
             }
-            if (attrs.type == TYPE_KEYGUARD) {
+            if ((attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
                 mShowingLockscreen = true;
             }
             boolean appWindow = attrs.type >= FIRST_APPLICATION_WINDOW
@@ -3420,8 +3424,8 @@
                 }
             }
 
-            final boolean showWhenLocked = (attrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0;
-            final boolean dismissKeyguard = (attrs.flags & FLAG_DISMISS_KEYGUARD) != 0;
+            final boolean showWhenLocked = (fl & FLAG_SHOW_WHEN_LOCKED) != 0;
+            final boolean dismissKeyguard = (fl & FLAG_DISMISS_KEYGUARD) != 0;
             if (appWindow) {
                 if (showWhenLocked || (dismissKeyguard && !isKeyguardSecure())) {
                     mAppsToBeHidden.remove(win.getAppToken());
@@ -3441,14 +3445,15 @@
                             mForceStatusBarFromKeyguard = false;
                         }
                         if (dismissKeyguard && mDismissKeyguard == DISMISS_KEYGUARD_NONE) {
-                            if (DEBUG_LAYOUT) Slog.v(TAG, "Setting mDismissKeyguard true by win " + win);
+                            if (DEBUG_LAYOUT) Slog.v(TAG,
+                                    "Setting mDismissKeyguard true by win " + win);
                             mDismissKeyguard = mWinDismissingKeyguard == win ?
                                     DISMISS_KEYGUARD_CONTINUE : DISMISS_KEYGUARD_START;
                             mWinDismissingKeyguard = win;
                             mForceStatusBarFromKeyguard = mShowingLockscreen && isKeyguardSecure();
                         }
                     }
-                    if ((attrs.flags & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON) != 0) {
+                    if ((fl & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON) != 0) {
                         mAllowLockscreenWhenOn = true;
                     }
                 }
@@ -3491,13 +3496,14 @@
                             mLastSystemUiFlags, mLastSystemUiFlags);
                 }
             } else if (mTopFullscreenOpaqueWindowState != null) {
+                final int fl = PolicyControl.getWindowFlags(null, lp);
                 if (localLOGV) {
                     Slog.d(TAG, "frame: " + mTopFullscreenOpaqueWindowState.getFrameLw()
                             + " shown frame: " + mTopFullscreenOpaqueWindowState.getShownFrameLw());
                     Slog.d(TAG, "attr: " + mTopFullscreenOpaqueWindowState.getAttrs()
-                            + " lp.flags=0x" + Integer.toHexString(lp.flags));
+                            + " lp.flags=0x" + Integer.toHexString(fl));
                 }
-                topIsFullscreen = (lp.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0
+                topIsFullscreen = (fl & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0
                         || (mLastSystemUiFlags & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;
                 // The subtle difference between the window for mTopFullscreenOpaqueWindowState
                 // and mTopIsFullscreen is that that mTopIsFullscreen is set only if the window
@@ -3533,11 +3539,12 @@
 
         // Hide the key guard if a visible window explicitly specifies that it wants to be
         // displayed when the screen is locked.
-        if (mKeyguard != null) {
+        if (mKeyguardDelegate != null && mStatusBar != null) {
             if (localLOGV) Slog.v(TAG, "finishPostLayoutPolicyLw: mHideKeyguard="
                     + mHideLockScreen);
             if (mDismissKeyguard != DISMISS_KEYGUARD_NONE && !isKeyguardSecure()) {
-                if (mKeyguard.hideLw(true)) {
+                mKeyguardHidden = true;
+                if (processKeyguardSetHiddenResultLw(mKeyguardDelegate.setOccluded(true))) {
                     changes |= FINISH_LAYOUT_REDO_LAYOUT
                             | FINISH_LAYOUT_REDO_CONFIG
                             | FINISH_LAYOUT_REDO_WALLPAPER;
@@ -3551,24 +3558,22 @@
                     });
                 }
             } else if (mHideLockScreen) {
-                if (mKeyguard.hideLw(true)) {
+                mKeyguardHidden = true;
+                if (processKeyguardSetHiddenResultLw(mKeyguardDelegate.setOccluded(true))) {
                     changes |= FINISH_LAYOUT_REDO_LAYOUT
                             | FINISH_LAYOUT_REDO_CONFIG
                             | FINISH_LAYOUT_REDO_WALLPAPER;
                 }
-                if (!mShowingDream) {
-                    mKeyguardDelegate.setHidden(true);
-                }
             } else if (mDismissKeyguard != DISMISS_KEYGUARD_NONE) {
                 // This is the case of keyguard isSecure() and not mHideLockScreen.
                 if (mDismissKeyguard == DISMISS_KEYGUARD_START) {
                     // Only launch the next keyguard unlock window once per window.
-                    if (mKeyguard.showLw(true)) {
+                    mKeyguardHidden = false;
+                    if (processKeyguardSetHiddenResultLw(mKeyguardDelegate.setOccluded(false))) {
                         changes |= FINISH_LAYOUT_REDO_LAYOUT
                                 | FINISH_LAYOUT_REDO_CONFIG
                                 | FINISH_LAYOUT_REDO_WALLPAPER;
                     }
-                    mKeyguardDelegate.setHidden(false);
                     mHandler.post(new Runnable() {
                         @Override
                         public void run() {
@@ -3578,12 +3583,12 @@
                 }
             } else {
                 mWinDismissingKeyguard = null;
-                if (mKeyguard.showLw(true)) {
+                mKeyguardHidden = false;
+                if (processKeyguardSetHiddenResultLw(mKeyguardDelegate.setOccluded(false))) {
                     changes |= FINISH_LAYOUT_REDO_LAYOUT
                             | FINISH_LAYOUT_REDO_CONFIG
                             | FINISH_LAYOUT_REDO_WALLPAPER;
                 }
-                mKeyguardDelegate.setHidden(false);
             }
         }
 
@@ -3598,9 +3603,39 @@
         return changes;
     }
 
+    /**
+     * Processes the result code of {@link IKeyguardService#setOccluded}. This is needed because we
+     * immediately need to put the wallpaper directly behind the Keyguard when a window with flag
+     * {@link android.view.WindowManager.LayoutParams#FLAG_SHOW_WHEN_LOCKED} gets dismissed. If we
+     * would wait for Keyguard to change the flags, that would be running asynchronously and thus be
+     * too late so the user might see the window behind.
+     *
+     * @param setHiddenResult The result code from {@link IKeyguardService#setOccluded}.
+     * @return Whether the flags have changed and we have to redo the layout.
+     */
+    private boolean processKeyguardSetHiddenResultLw(int setHiddenResult) {
+        if (setHiddenResult
+                == IKeyguardServiceConstants.KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_SET_FLAGS) {
+            mStatusBar.getAttrs().privateFlags |= PRIVATE_FLAG_KEYGUARD;
+            mStatusBar.getAttrs().flags |= FLAG_SHOW_WALLPAPER;
+            return true;
+        } else if (setHiddenResult
+                == IKeyguardServiceConstants.KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_UNSET_FLAGS) {
+            mStatusBar.getAttrs().privateFlags &= ~PRIVATE_FLAG_KEYGUARD;
+            mStatusBar.getAttrs().flags &= ~FLAG_SHOW_WALLPAPER;
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    private boolean isStatusBarKeyguard() {
+        return mStatusBar != null
+                && (mStatusBar.getAttrs().privateFlags & PRIVATE_FLAG_KEYGUARD) != 0;
+    }
+
     public boolean allowAppAnimationsLw() {
-        if (mKeyguard != null && mKeyguard.isVisibleLw() && !mKeyguard.isAnimatingLw()
-                || mShowingDream) {
+        if (isStatusBarKeyguard() || mShowingDream) {
             // If keyguard or dreams is currently visible, no reason to animate behind it.
             return false;
         }
@@ -3822,15 +3857,9 @@
         // when the keyguard is hidden by another activity.
         final boolean keyguardActive = (mKeyguardDelegate == null ? false :
                                             (interactive ?
-                                                mKeyguardDelegate.isShowingAndNotHidden() :
+                                                mKeyguardDelegate.isShowingAndNotOccluded() :
                                                 mKeyguardDelegate.isShowing()));
 
-        if (keyCode == KeyEvent.KEYCODE_POWER
-                || keyCode == KeyEvent.KEYCODE_SLEEP
-                || keyCode == KeyEvent.KEYCODE_WAKEUP) {
-            policyFlags |= WindowManagerPolicy.FLAG_WAKE;
-        }
-
         if (DEBUG_INPUT) {
             Log.d(TAG, "interceptKeyTq keycode=" + keyCode
                     + " interactive=" + interactive + " keyguardActive=" + keyguardActive
@@ -3844,8 +3873,8 @@
 
         // Basic policy based on interactive state.
         int result;
-        boolean isWakeKey = (policyFlags & (WindowManagerPolicy.FLAG_WAKE
-                | WindowManagerPolicy.FLAG_WAKE_DROPPED)) != 0;
+        boolean isWakeKey = (policyFlags & WindowManagerPolicy.FLAG_WAKE) != 0
+                || event.isWakeKey();
         if (interactive || (isInjected && !isWakeKey)) {
             // When the screen is on or if the key is injected pass the key to the application.
             result = ACTION_PASS_TO_USER;
@@ -3975,8 +4004,11 @@
             case KeyEvent.KEYCODE_POWER: {
                 result &= ~ACTION_PASS_TO_USER;
                 if (down) {
-                    mImmersiveModeConfirmation.onPowerKeyDown(interactive, event.getDownTime(),
-                            isImmersiveMode(mLastSystemUiFlags));
+                    boolean panic = mImmersiveModeConfirmation.onPowerKeyDown(interactive,
+                            event.getDownTime(), isImmersiveMode(mLastSystemUiFlags));
+                    if (panic) {
+                        mHandler.post(mRequestTransientNav);
+                    }
                     if (interactive && !mPowerKeyTriggered
                             && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
                         mPowerKeyTriggered = true;
@@ -3994,7 +4026,7 @@
                                 telephonyService.silenceRinger();
                             } else if ((mIncallPowerBehavior
                                     & Settings.Secure.INCALL_POWER_BUTTON_BEHAVIOR_HANGUP) != 0
-                                    && telephonyService.isOffhook() && isScreenOn) {
+                                    && telephonyService.isOffhook() && interactive) {
                                 // Otherwise, if "Power button ends call" is enabled,
                                 // the Power button will hang up any current active call.
                                 hungUp = telephonyService.endCall();
@@ -4257,6 +4289,13 @@
         }
     };
 
+    private final Runnable mRequestTransientNav = new Runnable() {
+        @Override
+        public void run() {
+            requestTransientBars(mNavigationBar);
+        }
+    };
+
     private void requestTransientBars(WindowState swipeTarget) {
         synchronized (mWindowManagerFuncs.getWindowManagerLock()) {
             boolean sb = mStatusBarController.checkShowTransientBarLw();
@@ -4311,21 +4350,16 @@
 
     private void waitForKeyguard(final ScreenOnListener screenOnListener) {
         if (mKeyguardDelegate != null) {
-            if (screenOnListener != null) {
-                mKeyguardDelegate.onScreenTurnedOn(new KeyguardServiceDelegate.ShowListener() {
-                    @Override
-                    public void onShown(IBinder windowToken) {
-                        waitForKeyguardWindowDrawn(windowToken, screenOnListener);
-                    }
-                });
-                return;
-            } else {
-                mKeyguardDelegate.onScreenTurnedOn(null);
-            }
+            mKeyguardDelegate.onScreenTurnedOn(new KeyguardServiceDelegate.ShowListener() {
+                @Override
+                public void onShown(IBinder windowToken) {
+                    waitForKeyguardWindowDrawn(windowToken, screenOnListener);
+                }
+            });
         } else {
             Slog.i(TAG, "No keyguard interface!");
+            finishScreenTurningOn(screenOnListener);
         }
-        finishScreenTurningOn(screenOnListener);
     }
 
     private void waitForKeyguardWindowDrawn(IBinder windowToken,
@@ -4338,6 +4372,7 @@
                     public void sendResult(Bundle data) {
                         Slog.i(TAG, "Lock screen displayed!");
                         finishScreenTurningOn(screenOnListener);
+                        setKeyguardDrawn();
                     }
                 })) {
                     return;
@@ -4351,6 +4386,7 @@
 
         Slog.i(TAG, "No lock screen! windowToken=" + windowToken);
         finishScreenTurningOn(screenOnListener);
+        setKeyguardDrawn();
     }
 
     private void finishScreenTurningOn(ScreenOnListener screenOnListener) {
@@ -4394,7 +4430,7 @@
 
     private boolean keyguardIsShowingTq() {
         if (mKeyguardDelegate == null) return false;
-        return mKeyguardDelegate.isShowingAndNotHidden();
+        return mKeyguardDelegate.isShowingAndNotOccluded();
     }
 
 
@@ -4431,6 +4467,23 @@
         }
     }
 
+    private void setKeyguardDrawn() {
+        synchronized (mLock) {
+            mKeyguardDrawn = true;
+        }
+        try {
+            mWindowManager.enableScreenIfNeeded();
+        } catch (RemoteException unhandled) {
+        }
+    }
+
+    @Override
+    public boolean isKeyguardDrawnLw() {
+        synchronized (mLock) {
+            return mKeyguardDrawn;
+        }
+    }
+
     void sendCloseSystemWindows() {
         sendCloseSystemWindows(mContext, null);
     }
@@ -4714,6 +4767,7 @@
         synchronized (mLock) {
             mSystemBooted = true;
         }
+        waitForKeyguard(null);
     }
 
     ProgressDialog mBootMsgDialog = null;
@@ -5042,7 +5096,7 @@
         }
         final boolean hapticsDisabled = Settings.System.getIntForUser(mContext.getContentResolver(),
                 Settings.System.HAPTIC_FEEDBACK_ENABLED, 0, UserHandle.USER_CURRENT) == 0;
-        if (!always && (hapticsDisabled || mKeyguardDelegate.isShowingAndNotHidden())) {
+        if (!always && (hapticsDisabled || mKeyguardDelegate.isShowingAndNotOccluded())) {
             return false;
         }
         long[] pattern = null;
@@ -5056,6 +5110,9 @@
             case HapticFeedbackConstants.KEYBOARD_TAP:
                 pattern = mKeyboardTapVibePattern;
                 break;
+            case HapticFeedbackConstants.CLOCK_TICK:
+                pattern = mClockTickVibePattern;
+                break;
             case HapticFeedbackConstants.SAFE_MODE_DISABLED:
                 pattern = mSafeModeDisabledVibePattern;
                 break;
@@ -5076,10 +5133,10 @@
         }
         if (pattern.length == 1) {
             // One-shot vibration
-            mVibrator.vibrate(owningUid, owningPackage, pattern[0]);
+            mVibrator.vibrate(owningUid, owningPackage, pattern[0], AudioManager.STREAM_SYSTEM);
         } else {
             // Pattern vibration
-            mVibrator.vibrate(owningUid, owningPackage, pattern, -1);
+            mVibrator.vibrate(owningUid, owningPackage, pattern, -1, AudioManager.STREAM_SYSTEM);
         }
         return true;
     }
@@ -5090,8 +5147,7 @@
 
     @Override
     public void keepScreenOnStoppedLw() {
-        if (mKeyguardDelegate != null && !mKeyguardDelegate.isShowingAndNotHidden()) {
-            long curTime = SystemClock.uptimeMillis();
+        if (mKeyguardDelegate != null && !mKeyguardDelegate.isShowingAndNotOccluded()) {
             mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
         }
     }
@@ -5103,7 +5159,7 @@
         if (win == null) {
             return 0;
         }
-        if (win.getAttrs().type == TYPE_KEYGUARD && mHideLockScreen == true) {
+        if ((win.getAttrs().privateFlags & PRIVATE_FLAG_KEYGUARD) != 0 && mHideLockScreen == true) {
             // We are updating at a point where the keyguard has gotten
             // focus, but we were last in a state where the top window is
             // hiding it.  This is probably because the keyguard as been
@@ -5113,11 +5169,11 @@
             return 0;
         }
 
-        int tmpVisibility = win.getSystemUiVisibility()
+        int tmpVisibility = PolicyControl.getSystemUiVisibility(win, null)
                 & ~mResettingSystemUiFlags
                 & ~mForceClearedSystemUiFlags;
         if (mForcingShowNavBar && win.getSurfaceLayer() < mForcingShowNavBarLayer) {
-            tmpVisibility &= ~View.SYSTEM_UI_CLEARABLE_FLAGS;
+            tmpVisibility &= ~PolicyControl.adjustClearableFlags(win, View.SYSTEM_UI_CLEARABLE_FLAGS);
         }
         final int visibility = updateSystemBarsLw(win, mLastSystemUiFlags, tmpVisibility);
         final int diff = visibility ^ mLastSystemUiFlags;
@@ -5149,8 +5205,8 @@
 
     private int updateSystemBarsLw(WindowState win, int oldVis, int vis) {
         // apply translucent bar vis flags
-        WindowState transWin = mKeyguard != null && mKeyguard.isVisibleLw() && !mHideLockScreen
-                ? mKeyguard
+        WindowState transWin = isStatusBarKeyguard() && !mHideLockScreen
+                ? mStatusBar
                 : mTopFullscreenOpaqueWindowState;
         vis = mStatusBarController.applyTranslucentFlagLw(transWin, vis, oldVis);
         vis = mNavigationBarController.applyTranslucentFlagLw(transWin, vis, oldVis);
@@ -5161,9 +5217,10 @@
             int flags = View.SYSTEM_UI_FLAG_FULLSCREEN
                     | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                     | View.SYSTEM_UI_FLAG_IMMERSIVE
-                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
-                    | View.STATUS_BAR_TRANSLUCENT
-                    | View.NAVIGATION_BAR_TRANSLUCENT;
+                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
+            if (!isStatusBarKeyguard() || mHideLockScreen) {
+                flags |= View.STATUS_BAR_TRANSLUCENT | View.NAVIGATION_BAR_TRANSLUCENT;
+            }
             vis = (vis & ~flags) | (oldVis & flags);
         }
 
@@ -5176,7 +5233,7 @@
                 (vis & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0;
         boolean hideStatusBarWM =
                 mTopFullscreenOpaqueWindowState != null &&
-                (mTopFullscreenOpaqueWindowState.getAttrs().flags
+                (PolicyControl.getWindowFlags(mTopFullscreenOpaqueWindowState, null)
                         & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
         boolean hideStatusBarSysui =
                 (vis & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;
@@ -5240,7 +5297,8 @@
      * R.boolean.config_enableTranslucentDecor is false.
      */
     private boolean areTranslucentBarsAllowed() {
-        return mTranslucentDecorEnabled && !mTouchExplorationEnabled;
+        return mTranslucentDecorEnabled
+                && !mAccessibilityManager.isTouchExplorationEnabled();
     }
 
     // Use this instead of checking config_showNavigationBar so that it can be consistently
@@ -5257,6 +5315,11 @@
     }
 
     @Override
+    public int getInputMethodWindowVisibleHeightLw() {
+        return mDockBottom - mCurBottom;
+    }
+
+    @Override
     public void setCurrentUserLw(int newUserId) {
         mCurrentUserId = newUserId;
         if (mKeyguardDelegate != null) {
@@ -5286,11 +5349,6 @@
     }
 
     @Override
-    public void setTouchExplorationEnabled(boolean enabled) {
-        mTouchExplorationEnabled = enabled;
-    }
-
-    @Override
     public boolean isTopLevelWindow(int windowType) {
         if (windowType >= WindowManager.LayoutParams.FIRST_SUB_WINDOW
                 && windowType <= WindowManager.LayoutParams.LAST_SUB_WINDOW) {
@@ -5407,15 +5465,13 @@
         if (mStatusBar != null) {
             pw.print(prefix); pw.print("mStatusBar=");
                     pw.println(mStatusBar);
+            pw.print(prefix); pw.print("isStatusBarKeyguard=");
+                    pw.print(isStatusBarKeyguard());
         }
         if (mNavigationBar != null) {
             pw.print(prefix); pw.print("mNavigationBar=");
                     pw.println(mNavigationBar);
         }
-        if (mKeyguard != null) {
-            pw.print(prefix); pw.print("mKeyguard=");
-                    pw.println(mKeyguard);
-        }
         if (mFocusedWindow != null) {
             pw.print(prefix); pw.print("mFocusedWindow=");
                     pw.println(mFocusedWindow);
@@ -5460,5 +5516,6 @@
         pw.print(prefix); pw.print("mUndockedHdmiRotation="); pw.println(mUndockedHdmiRotation);
         mStatusBarController.dump(pw, prefix);
         mNavigationBarController.dump(pw, prefix);
+        PolicyControl.dump(prefix, pw);
     }
 }
diff --git a/policy/src/com/android/internal/policy/impl/PolicyControl.java b/policy/src/com/android/internal/policy/impl/PolicyControl.java
new file mode 100644
index 0000000..ffdb520
--- /dev/null
+++ b/policy/src/com/android/internal/policy/impl/PolicyControl.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2014 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.android.internal.policy.impl;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.util.ArraySet;
+import android.util.Slog;
+import android.view.View;
+import android.view.WindowManager;
+import android.view.WindowManager.LayoutParams;
+import android.view.WindowManagerPolicy.WindowState;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+/**
+ * Runtime adjustments applied to the global window policy.
+ *
+ * This includes forcing immersive mode behavior for one or both system bars (based on a package
+ * list) and permanently disabling immersive mode confirmations for specific packages.
+ *
+ * Control by setting {@link Settings.Global.POLICY_CONTROL} to one or more name-value pairs.
+ * e.g.
+ *   to force immersive mode everywhere:
+ *     "immersive.full=*"
+ *   to force transient status for all apps except a specific package:
+ *     "immersive.status=apps,-com.package"
+ *   to disable the immersive mode confirmations for specific packages:
+ *     "immersive.preconfirms=com.package.one,com.package.two"
+ *
+ * Separate multiple name-value pairs with ':'
+ *   e.g. "immersive.status=apps:immersive.preconfirms=*"
+ */
+public class PolicyControl {
+    private static String TAG = "PolicyControl";
+    private static boolean DEBUG = false;
+
+    private static final String NAME_IMMERSIVE_FULL = "immersive.full";
+    private static final String NAME_IMMERSIVE_STATUS = "immersive.status";
+    private static final String NAME_IMMERSIVE_NAVIGATION = "immersive.navigation";
+    private static final String NAME_IMMERSIVE_PRECONFIRMATIONS = "immersive.preconfirms";
+
+    private static String sSettingValue;
+    private static Filter sImmersivePreconfirmationsFilter;
+    private static Filter sImmersiveStatusFilter;
+    private static Filter sImmersiveNavigationFilter;
+
+    public static int getSystemUiVisibility(WindowState win, LayoutParams attrs) {
+        attrs = attrs != null ? attrs : win.getAttrs();
+        int vis = win != null ? win.getSystemUiVisibility() : attrs.systemUiVisibility;
+        if (sImmersiveStatusFilter != null && sImmersiveStatusFilter.matches(attrs)) {
+            vis |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+                    | View.SYSTEM_UI_FLAG_FULLSCREEN
+                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
+            vis &= ~(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+                    | View.STATUS_BAR_TRANSLUCENT);
+        }
+        if (sImmersiveNavigationFilter != null && sImmersiveNavigationFilter.matches(attrs)) {
+            vis |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
+                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
+                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+            vis &= ~(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
+                    | View.NAVIGATION_BAR_TRANSLUCENT);
+        }
+        return vis;
+    }
+
+    public static int getWindowFlags(WindowState win, LayoutParams attrs) {
+        attrs = attrs != null ? attrs : win.getAttrs();
+        int flags = attrs.flags;
+        if (sImmersiveStatusFilter != null && sImmersiveStatusFilter.matches(attrs)) {
+            flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
+            flags &= ~(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
+                    | WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
+        }
+        if (sImmersiveNavigationFilter != null && sImmersiveNavigationFilter.matches(attrs)) {
+            flags &= ~WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
+        }
+        return flags;
+    }
+
+    public static int adjustClearableFlags(WindowState win, int clearableFlags) {
+        final LayoutParams attrs = win != null ? win.getAttrs() : null;
+        if (sImmersiveStatusFilter != null && sImmersiveStatusFilter.matches(attrs)) {
+            clearableFlags &= ~View.SYSTEM_UI_FLAG_FULLSCREEN;
+        }
+        return clearableFlags;
+    }
+
+    public static boolean disableImmersiveConfirmation(String pkg) {
+        return sImmersivePreconfirmationsFilter != null
+                && sImmersivePreconfirmationsFilter.matches(pkg);
+    }
+
+    public static void reloadFromSetting(Context context) {
+        if (DEBUG) Slog.d(TAG, "reloadFromSetting()");
+        String value = null;
+        try {
+            value = Settings.Global.getStringForUser(context.getContentResolver(),
+                    Settings.Global.POLICY_CONTROL,
+                    UserHandle.USER_CURRENT);
+            if (sSettingValue != null && sSettingValue.equals(value)) return;
+            setFilters(value);
+            sSettingValue = value;
+        } catch (Throwable t) {
+            Slog.w(TAG, "Error loading policy control, value=" + value, t);
+        }
+    }
+
+    public static void dump(String prefix, PrintWriter pw) {
+        dump("sImmersiveStatusFilter", sImmersiveStatusFilter, prefix, pw);
+        dump("sImmersiveNavigationFilter", sImmersiveNavigationFilter, prefix, pw);
+        dump("sImmersivePreconfirmationsFilter", sImmersivePreconfirmationsFilter, prefix, pw);
+    }
+
+    private static void dump(String name, Filter filter, String prefix, PrintWriter pw) {
+        pw.print(prefix); pw.print("PolicyControl."); pw.print(name); pw.print('=');
+        if (filter == null) {
+            pw.println("null");
+        } else {
+            filter.dump(pw); pw.println();
+        }
+    }
+
+    private static void setFilters(String value) {
+        if (DEBUG) Slog.d(TAG, "setFilters: " + value);
+        sImmersiveStatusFilter = null;
+        sImmersiveNavigationFilter = null;
+        sImmersivePreconfirmationsFilter = null;
+        if (value != null) {
+            String[] nvps = value.split(":");
+            for (String nvp : nvps) {
+                int i = nvp.indexOf('=');
+                if (i == -1) continue;
+                String n = nvp.substring(0, i);
+                String v = nvp.substring(i + 1);
+                if (n.equals(NAME_IMMERSIVE_FULL)) {
+                    Filter f = Filter.parse(v);
+                    sImmersiveStatusFilter = sImmersiveNavigationFilter = f;
+                    if (sImmersivePreconfirmationsFilter == null) {
+                        sImmersivePreconfirmationsFilter = f;
+                    }
+                } else if (n.equals(NAME_IMMERSIVE_STATUS)) {
+                    Filter f = Filter.parse(v);
+                    sImmersiveStatusFilter = f;
+                } else if (n.equals(NAME_IMMERSIVE_NAVIGATION)) {
+                    Filter f = Filter.parse(v);
+                    sImmersiveNavigationFilter = f;
+                    if (sImmersivePreconfirmationsFilter == null) {
+                        sImmersivePreconfirmationsFilter = f;
+                    }
+                } else if (n.equals(NAME_IMMERSIVE_PRECONFIRMATIONS)) {
+                    Filter f = Filter.parse(v);
+                    sImmersivePreconfirmationsFilter = f;
+                }
+            }
+        }
+        if (DEBUG) {
+            Slog.d(TAG, "immersiveStatusFilter: " + sImmersiveStatusFilter);
+            Slog.d(TAG, "immersiveNavigationFilter: " + sImmersiveNavigationFilter);
+            Slog.d(TAG, "immersivePreconfirmationsFilter: " + sImmersivePreconfirmationsFilter);
+        }
+    }
+
+    private static class Filter {
+        private static final String ALL = "*";
+        private static final String APPS = "apps";
+
+        private final ArraySet<String> mWhitelist;
+        private final ArraySet<String> mBlacklist;
+
+        private Filter(ArraySet<String> whitelist, ArraySet<String> blacklist) {
+            mWhitelist = whitelist;
+            mBlacklist = blacklist;
+        }
+
+        boolean matches(LayoutParams attrs) {
+            if (attrs == null) return false;
+            boolean isApp = attrs.type >= WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW
+                    && attrs.type <= WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
+            if (isApp && mBlacklist.contains(APPS)) return false;
+            if (onBlacklist(attrs.packageName)) return false;
+            if (isApp && mWhitelist.contains(APPS)) return true;
+            return onWhitelist(attrs.packageName);
+        }
+
+        boolean matches(String packageName) {
+            return !onBlacklist(packageName) && onWhitelist(packageName);
+        }
+
+        private boolean onBlacklist(String packageName) {
+            return mBlacklist.contains(packageName) || mBlacklist.contains(ALL);
+        }
+
+        private boolean onWhitelist(String packageName) {
+            return mWhitelist.contains(ALL) || mWhitelist.contains(packageName);
+        }
+
+        void dump(PrintWriter pw) {
+            pw.print("Filter[");
+            dump("whitelist", mWhitelist, pw); pw.print(',');
+            dump("blacklist", mBlacklist, pw); pw.print(']');
+        }
+
+        private void dump(String name, ArraySet<String> set, PrintWriter pw) {
+            pw.print(name); pw.print("=(");
+            final int n = set.size();
+            for (int i = 0; i < n; i++) {
+                if (i > 0) pw.print(',');
+                pw.print(set.valueAt(i));
+            }
+            pw.print(')');
+        }
+
+        @Override
+        public String toString() {
+            StringWriter sw = new StringWriter();
+            dump(new PrintWriter(sw, true));
+            return sw.toString();
+        }
+
+        // value = comma-delimited list of tokens, where token = (package name|apps|*)
+        // e.g. "com.package1", or "apps, com.android.keyguard" or "*"
+        static Filter parse(String value) {
+            if (value == null) return null;
+            ArraySet<String> whitelist = new ArraySet<String>();
+            ArraySet<String> blacklist = new ArraySet<String>();
+            for (String token : value.split(",")) {
+                token = token.trim();
+                if (token.startsWith("-") && token.length() > 1) {
+                    token = token.substring(1);
+                    blacklist.add(token);
+                } else {
+                    whitelist.add(token);
+                }
+            }
+            return new Filter(whitelist, blacklist);
+        }
+    }
+}
diff --git a/policy/src/com/android/internal/policy/impl/RecentApplicationsBackground.java b/policy/src/com/android/internal/policy/impl/RecentApplicationsBackground.java
index 8d87728..3490bd4 100644
--- a/policy/src/com/android/internal/policy/impl/RecentApplicationsBackground.java
+++ b/policy/src/com/android/internal/policy/impl/RecentApplicationsBackground.java
@@ -21,7 +21,6 @@
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.Gravity;
 import android.view.View;
 import android.widget.LinearLayout;
diff --git a/policy/src/com/android/internal/policy/impl/ShortcutManager.java b/policy/src/com/android/internal/policy/impl/ShortcutManager.java
index 75a1b01..bb898f7 100644
--- a/policy/src/com/android/internal/policy/impl/ShortcutManager.java
+++ b/policy/src/com/android/internal/policy/impl/ShortcutManager.java
@@ -25,7 +25,6 @@
 import android.util.Log;
 import android.util.SparseArray;
 import android.view.KeyCharacterMap;
-import android.view.KeyEvent;
 
 import java.net.URISyntaxException;
 
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
index e5af716..966924b 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceDelegate.java
@@ -12,7 +12,6 @@
 import android.os.UserHandle;
 import android.util.Log;
 import android.util.Slog;
-import android.view.KeyEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.WindowManager;
@@ -30,8 +29,8 @@
  */
 public class KeyguardServiceDelegate {
     // TODO: propagate changes to these to {@link KeyguardTouchDelegate}
-    public static final String KEYGUARD_PACKAGE = "com.android.keyguard";
-    public static final String KEYGUARD_CLASS = "com.android.keyguard.KeyguardService";
+    public static final String KEYGUARD_PACKAGE = "com.android.systemui";
+    public static final String KEYGUARD_CLASS = "com.android.systemui.keyguard.KeyguardService";
 
     private static final String TAG = "KeyguardServiceDelegate";
     private static final boolean DEBUG = true;
@@ -45,13 +44,13 @@
             // the event something checks before the service is actually started.
             // KeyguardService itself should default to this state until the real state is known.
             showing = true;
-            showingAndNotHidden = true;
+            showingAndNotOccluded = true;
             secure = true;
         }
         boolean showing;
-        boolean showingAndNotHidden;
+        boolean showingAndNotOccluded;
         boolean inputRestricted;
-        boolean hidden;
+        boolean occluded;
         boolean secure;
         boolean dreaming;
         boolean systemIsReady;
@@ -110,7 +109,7 @@
                 Context.BIND_AUTO_CREATE, UserHandle.OWNER)) {
             if (DEBUG) Log.v(TAG, "*** Keyguard: can't bind to " + KEYGUARD_CLASS);
             mKeyguardState.showing = false;
-            mKeyguardState.showingAndNotHidden = false;
+            mKeyguardState.showingAndNotOccluded = false;
             mKeyguardState.secure = false;
         } else {
             if (DEBUG) Log.v(TAG, "*** Keyguard started");
@@ -149,11 +148,11 @@
         return mKeyguardState.showing;
     }
 
-    public boolean isShowingAndNotHidden() {
+    public boolean isShowingAndNotOccluded() {
         if (mKeyguardService != null) {
-            mKeyguardState.showingAndNotHidden = mKeyguardService.isShowingAndNotHidden();
+            mKeyguardState.showingAndNotOccluded = mKeyguardService.isShowingAndNotOccluded();
         }
-        return mKeyguardState.showingAndNotHidden;
+        return mKeyguardState.showingAndNotOccluded;
     }
 
     public boolean isInputRestricted() {
@@ -175,11 +174,13 @@
         }
     }
 
-    public void setHidden(boolean isHidden) {
+    public int setOccluded(boolean isOccluded) {
+        int result = 0;
         if (mKeyguardService != null) {
-            mKeyguardService.setHidden(isHidden);
+            result = mKeyguardService.setOccluded(isOccluded);
         }
-        mKeyguardState.hidden = isHidden;
+        mKeyguardState.occluded = isOccluded;
+        return result;
     }
 
     public void dismiss() {
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java
index 9fb2a50..7cb48fa 100644
--- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java
+++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardServiceWrapper.java
@@ -22,6 +22,7 @@
 import android.util.Slog;
 import android.view.MotionEvent;
 
+import com.android.internal.policy.IKeyguardServiceConstants;
 import com.android.internal.policy.IKeyguardShowCallback;
 import com.android.internal.policy.IKeyguardExitCallback;
 import com.android.internal.policy.IKeyguardService;
@@ -57,9 +58,9 @@
         return false; // TODO cache state
     }
 
-    public boolean isShowingAndNotHidden() {
+    public boolean isShowingAndNotOccluded() {
         try {
-            return mService.isShowingAndNotHidden();
+            return mService.isShowingAndNotOccluded();
         } catch (RemoteException e) {
             Slog.w(TAG , "Remote Exception", e);
         }
@@ -100,11 +101,12 @@
         }
     }
 
-    public void setHidden(boolean isHidden) {
+    public int setOccluded(boolean isOccluded) {
         try {
-            mService.setHidden(isHidden);
+            return mService.setOccluded(isOccluded);
         } catch (RemoteException e) {
             Slog.w(TAG , "Remote Exception", e);
+            return IKeyguardServiceConstants.KEYGUARD_SERVICE_SET_OCCLUDED_RESULT_NONE;
         }
     }
 
diff --git a/preloaded-classes b/preloaded-classes
index b60a379..4413cd3 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -601,8 +601,6 @@
 android.media.ResampleInputStream
 android.media.SoundPool
 android.media.ToneGenerator
-android.media.videoeditor.MediaArtistNativeHelper
-android.media.videoeditor.VideoEditorProfile
 android.mtp.MtpDatabase
 android.mtp.MtpDevice
 android.mtp.MtpDeviceInfo
@@ -660,7 +658,6 @@
 android.net.wifi.IWifiManager$Stub$Proxy
 android.net.wifi.WifiManager
 android.net.wifi.WifiManager$ServiceHandler
-android.net.wifi.WifiNative
 android.nfc.IAppCallback
 android.nfc.IAppCallback$Stub
 android.nfc.INfcAdapter
@@ -976,18 +973,14 @@
 android.view.DisplayInfo
 android.view.DisplayInfo$1
 android.view.DisplayList
+android.view.DisplayList$DisplayListFinalizer
 android.view.FallbackEventHandler
 android.view.FocusFinder
 android.view.FocusFinder$1
 android.view.FocusFinder$SequentialFocusComparator
 android.view.GLES20Canvas
 android.view.GLES20Canvas$CanvasFinalizer
-android.view.GLES20DisplayList
-android.view.GLES20DisplayList$DisplayListFinalizer
-android.view.GLES20Layer
-android.view.GLES20Layer$Finalizer
 android.view.GLES20RecordingCanvas
-android.view.GLES20RenderLayer
 android.view.GestureDetector
 android.view.GestureDetector$GestureHandler
 android.view.GestureDetector$OnDoubleTapListener
@@ -997,12 +990,6 @@
 android.view.HardwareCanvas
 android.view.HardwareLayer
 android.view.HardwareRenderer
-android.view.HardwareRenderer$Gl20Renderer
-android.view.HardwareRenderer$Gl20Renderer$1
-android.view.HardwareRenderer$Gl20Renderer$2
-android.view.HardwareRenderer$Gl20Renderer$Gl20RendererEglContext
-android.view.HardwareRenderer$GlRenderer
-android.view.HardwareRenderer$GlRenderer$FunctorsRunnable
 android.view.HardwareRenderer$HardwareDrawCallbacks
 android.view.IRotationWatcher
 android.view.IRotationWatcher$Stub
@@ -1113,7 +1100,6 @@
 android.view.ViewParent
 android.view.ViewRootImpl
 android.view.ViewRootImpl$3
-android.view.ViewRootImpl$4
 android.view.ViewRootImpl$AccessibilityInteractionConnectionManager
 android.view.ViewRootImpl$AsyncInputStage
 android.view.ViewRootImpl$ConsumeBatchedInputRunnable
@@ -1452,14 +1438,6 @@
 com.android.internal.view.RootViewSurfaceTaker
 com.android.internal.view.menu.ActionMenuItem
 com.android.internal.view.menu.ActionMenuItemView
-com.android.internal.view.menu.ActionMenuPresenter
-com.android.internal.view.menu.ActionMenuPresenter$OverflowMenuButton
-com.android.internal.view.menu.ActionMenuPresenter$PopupPresenterCallback
-com.android.internal.view.menu.ActionMenuPresenter$SavedState
-com.android.internal.view.menu.ActionMenuPresenter$SavedState$1
-com.android.internal.view.menu.ActionMenuView
-com.android.internal.view.menu.ActionMenuView$ActionMenuChildView
-com.android.internal.view.menu.ActionMenuView$LayoutParams
 com.android.internal.view.menu.BaseMenuPresenter
 com.android.internal.view.menu.ListMenuItemView
 com.android.internal.view.menu.MenuBuilder
@@ -1700,7 +1678,6 @@
 com.android.org.conscrypt.OpenSSLX509CertificateFactory$Parser
 com.android.org.conscrypt.ProtocolVersion
 com.android.org.conscrypt.SSLClientSessionCache
-com.android.org.conscrypt.SSLContextImpl
 com.android.org.conscrypt.SSLParametersImpl
 com.android.org.conscrypt.ServerSessionContext
 com.android.org.conscrypt.TrustManagerFactoryImpl
@@ -1887,7 +1864,6 @@
 java.lang.ThreadLocal$Values
 java.lang.Throwable
 java.lang.TypeNotPresentException
-java.lang.UnsafeByteSequence
 java.lang.UnsatisfiedLinkError
 java.lang.UnsupportedOperationException
 java.lang.VMClassLoader
@@ -2196,8 +2172,6 @@
 java.util.concurrent.Callable
 java.util.concurrent.CancellationException
 java.util.concurrent.ConcurrentHashMap
-java.util.concurrent.ConcurrentHashMap$HashEntry
-java.util.concurrent.ConcurrentHashMap$HashIterator
 java.util.concurrent.ConcurrentHashMap$Segment
 java.util.concurrent.ConcurrentLinkedQueue
 java.util.concurrent.ConcurrentLinkedQueue$Node
@@ -2257,7 +2231,6 @@
 java.util.jar.Attributes$Name
 java.util.jar.JarEntry
 java.util.jar.JarFile
-java.util.jar.JarFile$1JarFileEnumerator
 java.util.jar.JarVerifier
 java.util.jar.Manifest
 java.util.logging.ConsoleHandler
@@ -2382,7 +2355,6 @@
 libcore.io.StructUtsname
 libcore.math.MathUtils
 libcore.net.MimeUtils
-libcore.net.RawSocket
 libcore.net.UriCodec
 libcore.net.http.HttpDate
 libcore.net.http.HttpDate$1
diff --git a/rs/java/android/renderscript/Allocation.java b/rs/java/android/renderscript/Allocation.java
index c2bab91..2191b54 100644
--- a/rs/java/android/renderscript/Allocation.java
+++ b/rs/java/android/renderscript/Allocation.java
@@ -16,16 +16,12 @@
 
 package android.renderscript;
 
-import java.io.IOException;
-import java.io.InputStream;
 import java.util.HashMap;
 import android.content.res.Resources;
-import android.content.res.AssetManager;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.view.Surface;
 import android.util.Log;
-import android.util.TypedValue;
 import android.graphics.Canvas;
 import android.os.Trace;
 
@@ -602,7 +598,6 @@
      * without reinterpretation.
      *
      * @param array The source data array
-     * @hide
      */
     public void copyFromUnchecked(Object array) {
         Trace.traceBegin(RenderScript.TRACE_TAG, "copyFromUnchecked");
@@ -662,8 +657,7 @@
      * android.renderscript.Element} does not match the array's
      * primitive type.
      *
-     * @param d the source data array
-     * @hide
+     * @param array The source data array
      */
     public void copyFrom(Object array) {
         Trace.traceBegin(RenderScript.TRACE_TAG, "copyFrom");
@@ -862,7 +856,6 @@
      * @param off The offset of the first element to be copied.
      * @param count The number of elements to be copied.
      * @param array The source data array
-     * @hide
      */
     public void copy1DRangeFromUnchecked(int off, int count, Object array) {
         copy1DRangeFromUnchecked(off, count, array,
@@ -927,7 +920,6 @@
      * @param off The offset of the first element to be copied.
      * @param count The number of elements to be copied.
      * @param array The source data array.
-     * @hide
      */
     public void copy1DRangeFrom(int off, int count, Object array) {
         copy1DRangeFromUnchecked(off, count, array,
@@ -1043,8 +1035,7 @@
      * @param yoff Y offset of the region to update in this Allocation
      * @param w Width of the region to update
      * @param h Height of the region to update
-     * @param data to be placed into the Allocation
-     * @hide
+     * @param array Data to be placed into the Allocation
      */
     public void copy2DRangeFrom(int xoff, int yoff, int w, int h, Object array) {
         Trace.traceBegin(RenderScript.TRACE_TAG, "copy2DRangeFrom");
@@ -1274,7 +1265,6 @@
      * type of the array passed in.
      *
      * @param array The array to be set from the Allocation.
-     * @hide
      */
     public void copyTo(Object array) {
         copyTo(array, validateObjectIsPrimitiveArray(array, true),
@@ -1876,4 +1866,3 @@
     }
 
 }
-
diff --git a/rs/java/android/renderscript/AllocationAdapter.java b/rs/java/android/renderscript/AllocationAdapter.java
index fd20cae..3522a52 100644
--- a/rs/java/android/renderscript/AllocationAdapter.java
+++ b/rs/java/android/renderscript/AllocationAdapter.java
@@ -16,11 +16,6 @@
 
 package android.renderscript;
 
-import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.util.TypedValue;
-
 /**
  * Only intended for use by generated reflected code.
  *
diff --git a/rs/java/android/renderscript/Byte2.java b/rs/java/android/renderscript/Byte2.java
index f796de3..3ad79e4 100644
--- a/rs/java/android/renderscript/Byte2.java
+++ b/rs/java/android/renderscript/Byte2.java
@@ -16,9 +16,6 @@
 
 package android.renderscript;
 
-import java.lang.Math;
-import android.util.Log;
-
 
 /**
  * Class for exposing the native RenderScript byte2 type back to the Android system.
diff --git a/rs/java/android/renderscript/Byte3.java b/rs/java/android/renderscript/Byte3.java
index f2a95ac..a138313 100644
--- a/rs/java/android/renderscript/Byte3.java
+++ b/rs/java/android/renderscript/Byte3.java
@@ -16,9 +16,6 @@
 
 package android.renderscript;
 
-import java.lang.Math;
-import android.util.Log;
-
 
 /**
  * Class for exposing the native RenderScript byte3 type back to the Android system.
diff --git a/rs/java/android/renderscript/Byte4.java b/rs/java/android/renderscript/Byte4.java
index b8a8a6b..fa4c13d 100644
--- a/rs/java/android/renderscript/Byte4.java
+++ b/rs/java/android/renderscript/Byte4.java
@@ -16,9 +16,6 @@
 
 package android.renderscript;
 
-import java.lang.Math;
-import android.util.Log;
-
 
 /**
  * Class for exposing the native RenderScript byte4 type back to the Android system.
diff --git a/rs/java/android/renderscript/Element.java b/rs/java/android/renderscript/Element.java
index aa5d687..55b671d 100644
--- a/rs/java/android/renderscript/Element.java
+++ b/rs/java/android/renderscript/Element.java
@@ -16,9 +16,6 @@
 
 package android.renderscript;
 
-import java.lang.reflect.Field;
-import android.util.Log;
-
 /**
  * <p>An Element represents one item within an {@link
  * android.renderscript.Allocation}.  An Element is roughly equivalent to a C
diff --git a/rs/java/android/renderscript/FieldPacker.java b/rs/java/android/renderscript/FieldPacker.java
index cf20e63..723ab24 100644
--- a/rs/java/android/renderscript/FieldPacker.java
+++ b/rs/java/android/renderscript/FieldPacker.java
@@ -16,7 +16,6 @@
 
 package android.renderscript;
 
-import android.util.Log;
 import java.util.BitSet;
 
 /**
diff --git a/rs/java/android/renderscript/FileA3D.java b/rs/java/android/renderscript/FileA3D.java
index 04bc7c6..4164810 100644
--- a/rs/java/android/renderscript/FileA3D.java
+++ b/rs/java/android/renderscript/FileA3D.java
@@ -17,15 +17,10 @@
 package android.renderscript;
 
 import java.io.File;
-import java.io.IOException;
 import java.io.InputStream;
 
 import android.content.res.AssetManager;
 import android.content.res.Resources;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-import android.util.Log;
-import android.util.TypedValue;
 
 /**
  * @hide
diff --git a/rs/java/android/renderscript/Float2.java b/rs/java/android/renderscript/Float2.java
index 26193d2..e9f8ca7 100644
--- a/rs/java/android/renderscript/Float2.java
+++ b/rs/java/android/renderscript/Float2.java
@@ -26,7 +26,7 @@
 
     public Float2() {
     }
-    /** @hide */ 
+    /** @hide */
     public Float2(Float2 data) {
         this.x = data.x;
         this.y = data.y;
diff --git a/rs/java/android/renderscript/Font.java b/rs/java/android/renderscript/Font.java
index cfd11c0..b22aeb7 100644
--- a/rs/java/android/renderscript/Font.java
+++ b/rs/java/android/renderscript/Font.java
@@ -17,7 +17,6 @@
 package android.renderscript;
 
 import java.io.File;
-import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
@@ -26,8 +25,6 @@
 
 import android.content.res.AssetManager;
 import android.content.res.Resources;
-import android.util.Log;
-import android.util.TypedValue;
 
 /**
  * @hide
diff --git a/rs/java/android/renderscript/Int3.java b/rs/java/android/renderscript/Int3.java
index c770395..5431b9a7 100644
--- a/rs/java/android/renderscript/Int3.java
+++ b/rs/java/android/renderscript/Int3.java
@@ -27,7 +27,7 @@
 
     public Int3() {
     }
-    
+
     /** @hide */
     public Int3(int i) {
         this.x = this.y = this.z = i;
diff --git a/rs/java/android/renderscript/Long3.java b/rs/java/android/renderscript/Long3.java
index 88ff855..8e243cc 100644
--- a/rs/java/android/renderscript/Long3.java
+++ b/rs/java/android/renderscript/Long3.java
@@ -27,7 +27,7 @@
 
     public Long3() {
     }
-    
+
     /** @hide */
     public Long3(long i) {
         this.x = this.y = this.z = i;
diff --git a/rs/java/android/renderscript/Matrix2f.java b/rs/java/android/renderscript/Matrix2f.java
index d3621fa..048262d 100644
--- a/rs/java/android/renderscript/Matrix2f.java
+++ b/rs/java/android/renderscript/Matrix2f.java
@@ -16,9 +16,6 @@
 
 package android.renderscript;
 
-import java.lang.Math;
-import android.util.Log;
-
 
 /**
  * Class for exposing the native RenderScript rs_matrix2x2 type back to the Android system.
diff --git a/rs/java/android/renderscript/Matrix3f.java b/rs/java/android/renderscript/Matrix3f.java
index 8c3c330..9a4af77 100644
--- a/rs/java/android/renderscript/Matrix3f.java
+++ b/rs/java/android/renderscript/Matrix3f.java
@@ -16,9 +16,6 @@
 
 package android.renderscript;
 
-import java.lang.Math;
-import android.util.Log;
-
 
 /**
  * Class for exposing the native RenderScript rs_matrix3x3 type back to the Android system.
diff --git a/rs/java/android/renderscript/Matrix4f.java b/rs/java/android/renderscript/Matrix4f.java
index cd18e30..5d5bf5f 100644
--- a/rs/java/android/renderscript/Matrix4f.java
+++ b/rs/java/android/renderscript/Matrix4f.java
@@ -17,7 +17,6 @@
 package android.renderscript;
 
 import java.lang.Math;
-import android.util.Log;
 
 
 /**
diff --git a/rs/java/android/renderscript/Mesh.java b/rs/java/android/renderscript/Mesh.java
index ca0da9d..1a5dc9e 100644
--- a/rs/java/android/renderscript/Mesh.java
+++ b/rs/java/android/renderscript/Mesh.java
@@ -18,8 +18,6 @@
 
 import java.util.Vector;
 
-import android.util.Log;
-
 /**
  * @hide
  * @deprecated in API 16
diff --git a/rs/java/android/renderscript/Path.java b/rs/java/android/renderscript/Path.java
index 5cc67de..f3502aa 100644
--- a/rs/java/android/renderscript/Path.java
+++ b/rs/java/android/renderscript/Path.java
@@ -16,9 +16,6 @@
 
 package android.renderscript;
 
-import java.util.Vector;
-import android.util.Log;
-
 /**
  * @hide
  *
diff --git a/rs/java/android/renderscript/ProgramFragment.java b/rs/java/android/renderscript/ProgramFragment.java
index 4bb527b..5f71bd1 100644
--- a/rs/java/android/renderscript/ProgramFragment.java
+++ b/rs/java/android/renderscript/ProgramFragment.java
@@ -17,9 +17,6 @@
 package android.renderscript;
 
 
-import android.util.Log;
-
-
 /**
  * @hide
  * @deprecated in API 16
diff --git a/rs/java/android/renderscript/ProgramFragmentFixedFunction.java b/rs/java/android/renderscript/ProgramFragmentFixedFunction.java
index 2fe68be..2b647c76 100644
--- a/rs/java/android/renderscript/ProgramFragmentFixedFunction.java
+++ b/rs/java/android/renderscript/ProgramFragmentFixedFunction.java
@@ -17,9 +17,6 @@
 package android.renderscript;
 
 
-import android.util.Log;
-
-
 /**
  * @hide
  * @deprecated in API 16
diff --git a/rs/java/android/renderscript/ProgramRaster.java b/rs/java/android/renderscript/ProgramRaster.java
index e294b05..8c7c9aa 100644
--- a/rs/java/android/renderscript/ProgramRaster.java
+++ b/rs/java/android/renderscript/ProgramRaster.java
@@ -17,9 +17,6 @@
 package android.renderscript;
 
 
-import android.util.Log;
-
-
 /**
  * @hide
  * @deprecated in API 16
diff --git a/rs/java/android/renderscript/ProgramStore.java b/rs/java/android/renderscript/ProgramStore.java
index 969cc25..c0fa9c4 100644
--- a/rs/java/android/renderscript/ProgramStore.java
+++ b/rs/java/android/renderscript/ProgramStore.java
@@ -17,9 +17,6 @@
 package android.renderscript;
 
 
-import android.util.Log;
-
-
 /**
  * @hide
  * <p>ProgramStore contains a set of parameters that control how
diff --git a/rs/java/android/renderscript/ProgramVertex.java b/rs/java/android/renderscript/ProgramVertex.java
index d3a51de..0d7e2d9c 100644
--- a/rs/java/android/renderscript/ProgramVertex.java
+++ b/rs/java/android/renderscript/ProgramVertex.java
@@ -39,10 +39,6 @@
 package android.renderscript;
 
 
-import android.graphics.Matrix;
-import android.util.Log;
-
-
 /**
  * @hide
  * @deprecated in API 16
diff --git a/rs/java/android/renderscript/ProgramVertexFixedFunction.java b/rs/java/android/renderscript/ProgramVertexFixedFunction.java
index a350154..5173af2 100644
--- a/rs/java/android/renderscript/ProgramVertexFixedFunction.java
+++ b/rs/java/android/renderscript/ProgramVertexFixedFunction.java
@@ -17,10 +17,6 @@
 package android.renderscript;
 
 
-import android.graphics.Matrix;
-import android.util.Log;
-
-
 /**
  * @hide
  * @deprecated in API 16
diff --git a/rs/java/android/renderscript/RSSurfaceView.java b/rs/java/android/renderscript/RSSurfaceView.java
index 308d97a..5db72d9 100644
--- a/rs/java/android/renderscript/RSSurfaceView.java
+++ b/rs/java/android/renderscript/RSSurfaceView.java
@@ -16,16 +16,8 @@
 
 package android.renderscript;
 
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.concurrent.Semaphore;
-
 import android.content.Context;
-import android.os.Handler;
-import android.os.Message;
 import android.util.AttributeSet;
-import android.util.Log;
-import android.view.Surface;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 
diff --git a/rs/java/android/renderscript/RSTextureView.java b/rs/java/android/renderscript/RSTextureView.java
index 7eeeeae..af3258a 100644
--- a/rs/java/android/renderscript/RSTextureView.java
+++ b/rs/java/android/renderscript/RSTextureView.java
@@ -16,16 +16,9 @@
 
 package android.renderscript;
 
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.concurrent.Semaphore;
-
 import android.content.Context;
 import android.graphics.SurfaceTexture;
-import android.os.Handler;
-import android.os.Message;
 import android.util.AttributeSet;
-import android.util.Log;
 import android.view.TextureView;
 
 /**
diff --git a/rs/java/android/renderscript/RenderScript.java b/rs/java/android/renderscript/RenderScript.java
index ea25f58..dce4f58 100644
--- a/rs/java/android/renderscript/RenderScript.java
+++ b/rs/java/android/renderscript/RenderScript.java
@@ -17,16 +17,12 @@
 package android.renderscript;
 
 import java.io.File;
-import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import android.content.Context;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.PackageManager;
 import android.content.res.AssetManager;
 import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.SurfaceTexture;
 import android.os.Process;
 import android.util.Log;
diff --git a/rs/java/android/renderscript/RenderScriptGL.java b/rs/java/android/renderscript/RenderScriptGL.java
index d6841c8..6178994 100644
--- a/rs/java/android/renderscript/RenderScriptGL.java
+++ b/rs/java/android/renderscript/RenderScriptGL.java
@@ -16,17 +16,10 @@
 
 package android.renderscript;
 
-import java.lang.reflect.Field;
-
 import android.content.Context;
-import android.graphics.PixelFormat;
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
 import android.graphics.SurfaceTexture;
-import android.util.Log;
 import android.view.Surface;
 import android.view.SurfaceHolder;
-import android.view.SurfaceView;
 
 /**
  * @hide
diff --git a/rs/java/android/renderscript/Sampler.java b/rs/java/android/renderscript/Sampler.java
index 8d0e29e..a4edbb5 100644
--- a/rs/java/android/renderscript/Sampler.java
+++ b/rs/java/android/renderscript/Sampler.java
@@ -16,17 +16,6 @@
 
 package android.renderscript;
 
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.util.Log;
-
-import android.graphics.Bitmap;
-import android.graphics.BitmapFactory;
-
 /**
  * Sampler object that defines how Allocations can be read as textures within a
  * kernel. Samplers are used in conjunction with the {@code rsSample} runtime
diff --git a/rs/java/android/renderscript/ScriptC.java b/rs/java/android/renderscript/ScriptC.java
index cdb2b08..9e76f52 100644
--- a/rs/java/android/renderscript/ScriptC.java
+++ b/rs/java/android/renderscript/ScriptC.java
@@ -16,18 +16,11 @@
 
 package android.renderscript;
 
-import android.content.Context;
 import android.content.res.Resources;
-import android.util.Log;
 
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.Map.Entry;
-import java.util.HashMap;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
 
 /**
  * The superclass for all user-defined scripts. This is only
diff --git a/rs/java/android/renderscript/ScriptGroup.java b/rs/java/android/renderscript/ScriptGroup.java
index 1200a66..51c838f 100644
--- a/rs/java/android/renderscript/ScriptGroup.java
+++ b/rs/java/android/renderscript/ScriptGroup.java
@@ -16,7 +16,6 @@
 
 package android.renderscript;
 
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 
 /**
diff --git a/rs/java/android/renderscript/ScriptIntrinsic3DLUT.java b/rs/java/android/renderscript/ScriptIntrinsic3DLUT.java
index 96ec875..ce149d9 100644
--- a/rs/java/android/renderscript/ScriptIntrinsic3DLUT.java
+++ b/rs/java/android/renderscript/ScriptIntrinsic3DLUT.java
@@ -16,8 +16,6 @@
 
 package android.renderscript;
 
-import android.util.Log;
-
 /**
  *
  * Intrinsic for converting RGB to RGBA by using a 3D lookup table.  The
@@ -86,10 +84,23 @@
      * @param aout Output allocation
      */
     public void forEach(Allocation ain, Allocation aout) {
-        forEach(0, ain, aout, null);
+        forEach(ain, aout, null);
     }
 
     /**
+     * Invoke the kernel and apply the lookup to each cell of ain
+     * and copy to aout.
+     *
+     * @param ain Input allocation
+     * @param aout Output allocation
+     * @param opt Launch options for kernel
+     */
+    public void forEach(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        forEach(0, ain, aout, null, opt);
+    }
+
+
+    /**
      * Get a KernelID for this intrinsic kernel.
      *
      * @return Script.KernelID The KernelID object.
diff --git a/rs/java/android/renderscript/ScriptIntrinsicBlend.java b/rs/java/android/renderscript/ScriptIntrinsicBlend.java
index 40f1a3e..d4038c2 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicBlend.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicBlend.java
@@ -40,14 +40,14 @@
 
     }
 
-    private void blend(int id, Allocation ain, Allocation aout) {
+    private void blend(int id, Allocation ain, Allocation aout, Script.LaunchOptions opt) {
         if (!ain.getElement().isCompatible(Element.U8_4(mRS))) {
             throw new RSIllegalArgumentException("Input is not of expected format.");
         }
         if (!aout.getElement().isCompatible(Element.U8_4(mRS))) {
             throw new RSIllegalArgumentException("Output is not of expected format.");
         }
-        forEach(id, ain, aout, null);
+        forEach(id, ain, aout, null, opt);
     }
 
     /**
@@ -57,7 +57,18 @@
      * @param aout The destination buffer
      */
     public void forEachClear(Allocation ain, Allocation aout) {
-        blend(0, ain, aout);
+        forEachClear(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = {0, 0, 0, 0}
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachClear(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(0, ain, aout, opt);
     }
 
     /**
@@ -77,7 +88,18 @@
      * @param aout The destination buffer
      */
     public void forEachSrc(Allocation ain, Allocation aout) {
-        blend(1, ain, aout);
+        forEachSrc(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = src
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachSrc(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        forEachDst(ain, aout, null);
     }
 
     /**
@@ -102,6 +124,19 @@
     }
 
     /**
+     * Sets dst = dst
+     *
+     * This is a NOP.
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachDst(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        // N, optOP
+    }
+
+    /**
      * Get a KernelID for the Dst kernel.
      *
      * @return Script.KernelID The KernelID object.
@@ -117,7 +152,18 @@
      * @param aout The destination buffer
      */
     public void forEachSrcOver(Allocation ain, Allocation aout) {
-        blend(3, ain, aout);
+        forEachSrcOver(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = src + dst * (1.0 - src.a)
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachSrcOver(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(3, ain, aout, opt);
     }
 
     /**
@@ -136,7 +182,18 @@
      * @param aout The destination buffer
      */
     public void forEachDstOver(Allocation ain, Allocation aout) {
-        blend(4, ain, aout);
+        forEachDstOver(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = dst + src * (1.0 - dst.a)
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachDstOver(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(4, ain, aout, opt);
     }
 
     /**
@@ -155,7 +212,18 @@
      * @param aout The destination buffer
      */
     public void forEachSrcIn(Allocation ain, Allocation aout) {
-        blend(5, ain, aout);
+        forEachSrcIn(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = src * dst.a
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachSrcIn(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(5, ain, aout, opt);
     }
 
     /**
@@ -174,7 +242,18 @@
      * @param aout The destination buffer
      */
     public void forEachDstIn(Allocation ain, Allocation aout) {
-        blend(6, ain, aout);
+        forEachDstIn(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = dst * src.a
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachDstIn(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(6, ain, aout, opt);
     }
 
     /**
@@ -193,7 +272,18 @@
      * @param aout The destination buffer
      */
     public void forEachSrcOut(Allocation ain, Allocation aout) {
-        blend(7, ain, aout);
+        forEachSrcOut(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = src * (1.0 - dst.a)
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachSrcOut(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(7, ain, aout, opt);
     }
 
     /**
@@ -212,7 +302,18 @@
      * @param aout The destination buffer
      */
     public void forEachDstOut(Allocation ain, Allocation aout) {
-        blend(8, ain, aout);
+        forEachDstOut(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = dst * (1.0 - src.a)
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachDstOut(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(8, ain, aout, opt);
     }
 
     /**
@@ -232,7 +333,19 @@
      * @param aout The destination buffer
      */
     public void forEachSrcAtop(Allocation ain, Allocation aout) {
-        blend(9, ain, aout);
+        forEachSrcAtop(ain, aout, null);
+    }
+
+    /**
+     * dst.rgb = src.rgb * dst.a + (1.0 - src.a) * dst.rgb
+     * dst.a = dst.a
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachSrcAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(9, ain, aout, opt);
     }
 
     /**
@@ -252,7 +365,19 @@
      * @param aout The destination buffer
      */
     public void forEachDstAtop(Allocation ain, Allocation aout) {
-        blend(10, ain, aout);
+        forEachDstAtop(ain, aout, null);
+    }
+
+    /**
+     * dst = dst.rgb * src.a + (1.0 - dst.a) * src.rgb
+     * dst.a = src.a
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachDstAtop(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(10, ain, aout, opt);
     }
 
     /**
@@ -271,7 +396,18 @@
      * @param aout The destination buffer
      */
     public void forEachXor(Allocation ain, Allocation aout) {
-        blend(11, ain, aout);
+        forEachXor(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = {src.r ^ dst.r, src.g ^ dst.g, src.b ^ dst.b, src.a ^ dst.a}
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachXor(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(11, ain, aout, opt);
     }
 
     /**
@@ -300,7 +436,18 @@
      * @param aout The destination buffer
      */
     public void forEachMultiply(Allocation ain, Allocation aout) {
-        blend(14, ain, aout);
+        forEachMultiply(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = src * dst
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachMultiply(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(14, ain, aout, opt);
     }
 
     /**
@@ -396,7 +543,18 @@
      * @param aout The destination buffer
      */
     public void forEachAdd(Allocation ain, Allocation aout) {
-        blend(34, ain, aout);
+        forEachAdd(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = min(src + dst, 1.0)
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachAdd(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(34, ain, aout, opt);
     }
 
     /**
@@ -415,7 +573,18 @@
      * @param aout The destination buffer
      */
     public void forEachSubtract(Allocation ain, Allocation aout) {
-        blend(35, ain, aout);
+        forEachSubtract(ain, aout, null);
+    }
+
+    /**
+     * Sets dst = max(dst - src, 0.0)
+     *
+     * @param ain The source buffer
+     * @param aout The destination buffer
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEachSubtract(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
+        blend(35, ain, aout, opt);
     }
 
     /**
diff --git a/rs/java/android/renderscript/ScriptIntrinsicBlur.java b/rs/java/android/renderscript/ScriptIntrinsicBlur.java
index d1a6fed..e7e33b8 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicBlur.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicBlur.java
@@ -16,10 +16,6 @@
 
 package android.renderscript;
 
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.Log;
-
 /**
  * Intrinsic Gausian blur filter. Applies a gaussian blur of the
  * specified radius to all elements of an allocation.
@@ -88,10 +84,23 @@
      *             type.
      */
     public void forEach(Allocation aout) {
-        forEach(0, null, aout, null);
+        forEach(aout, null);
     }
 
     /**
+     * Apply the filter to the input and save to the specified
+     * allocation.
+     *
+     * @param aout Output allocation. Must match creation element
+     *             type.
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEach(Allocation aout, Script.LaunchOptions opt) {
+        forEach(0, null, aout, null, opt);
+    }
+
+
+    /**
      * Get a KernelID for this intrinsic kernel.
      *
      * @return Script.KernelID The KernelID object.
diff --git a/rs/java/android/renderscript/ScriptIntrinsicColorMatrix.java b/rs/java/android/renderscript/ScriptIntrinsicColorMatrix.java
index 601db17..57d917c 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicColorMatrix.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicColorMatrix.java
@@ -16,8 +16,6 @@
 
 package android.renderscript;
 
-import android.util.Log;
-
 /**
  * Intrinsic for applying a color matrix to allocations.
  *
@@ -208,7 +206,6 @@
         setMatrix();
     }
 
-
     /**
      * Invoke the kernel and apply the matrix to each cell of input
      * {@link Allocation} and copy to the output {@link Allocation}.
@@ -225,6 +222,26 @@
      * @param aout Output allocation
      */
     public void forEach(Allocation ain, Allocation aout) {
+        forEach(ain, aout, null);
+    }
+
+    /**
+     * Invoke the kernel and apply the matrix to each cell of input
+     * {@link Allocation} and copy to the output {@link Allocation}.
+     *
+     * If the vector size of the input is less than four, the
+     * remaining components are treated as zero for the matrix
+     * multiply.
+     *
+     * If the output vector size is less than four, the unused
+     * vector components are discarded.
+     *
+     *
+     * @param ain Input allocation
+     * @param aout Output allocation
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEach(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
         if (!ain.getElement().isCompatible(Element.U8(mRS)) &&
             !ain.getElement().isCompatible(Element.U8_2(mRS)) &&
             !ain.getElement().isCompatible(Element.U8_3(mRS)) &&
@@ -249,7 +266,7 @@
             throw new RSIllegalArgumentException("Unsuported element type.");
         }
 
-        forEach(0, ain, aout, null);
+        forEach(0, ain, aout, null, opt);
     }
 
     /**
diff --git a/rs/java/android/renderscript/ScriptIntrinsicConvolve3x3.java b/rs/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
index 25f3ee8..fb91fdc 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicConvolve3x3.java
@@ -16,8 +16,6 @@
 
 package android.renderscript;
 
-import android.util.Log;
-
 /**
  * Intrinsic for applying a 3x3 convolve to an allocation.
  *
@@ -108,7 +106,19 @@
      *             type.
      */
     public void forEach(Allocation aout) {
-        forEach(0, null, aout, null);
+        forEach(aout, null);
+    }
+
+    /**
+     * Apply the filter to the input and save to the specified
+     * allocation.
+     *
+     * @param aout Output allocation. Must match creation element
+     *             type.
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEach(Allocation aout, Script.LaunchOptions opt) {
+        forEach(0, null, aout, null, opt);
     }
 
     /**
diff --git a/rs/java/android/renderscript/ScriptIntrinsicConvolve5x5.java b/rs/java/android/renderscript/ScriptIntrinsicConvolve5x5.java
index 71ea4cbc..0357560 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicConvolve5x5.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicConvolve5x5.java
@@ -16,8 +16,6 @@
 
 package android.renderscript;
 
-import android.util.Log;
-
 /**
  * Intrinsic for applying a 5x5 convolve to an allocation.
  *
@@ -109,10 +107,23 @@
      *             type.
      */
     public void forEach(Allocation aout) {
-        forEach(0, null, aout, null);
+        forEach(aout, null);
     }
 
     /**
+     * Apply the filter to the input and save to the specified
+     * allocation.
+     *
+     * @param aout Output allocation. Must match creation element
+     *             type.
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEach(Allocation aout, Script.LaunchOptions opt) {
+        forEach(0, null, aout, null, opt);
+    }
+
+
+    /**
      * Get a KernelID for this intrinsic kernel.
      *
      * @return Script.KernelID The KernelID object.
diff --git a/rs/java/android/renderscript/ScriptIntrinsicHistogram.java b/rs/java/android/renderscript/ScriptIntrinsicHistogram.java
index 42e4d04..95b610a 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicHistogram.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicHistogram.java
@@ -16,10 +16,6 @@
 
 package android.renderscript;
 
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.Log;
-
 /**
  * Intrinsic Histogram filter.
  *
@@ -71,6 +67,24 @@
      * @param ain The input image
      */
     public void forEach(Allocation ain) {
+        forEach(ain, null);
+    }
+
+    /**
+     * Process an input buffer and place the histogram into the
+     * output allocation. The output allocation may be a narrower
+     * vector size than the input. In this case the vector size of
+     * the output is used to determine how many of the input
+     * channels are used in the computation. This is useful if you
+     * have an RGBA input buffer but only want the histogram for
+     * RGB.
+     *
+     * 1D and 2D input allocations are supported.
+     *
+     * @param ain The input image
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEach(Allocation ain, Script.LaunchOptions opt) {
         if (ain.getType().getElement().getVectorSize() <
             mOut.getType().getElement().getVectorSize()) {
 
@@ -82,9 +96,11 @@
             throw new RSIllegalArgumentException("Output type must be U32 or I32.");
         }
 
-        forEach(0, ain, null, null);
+        forEach(0, ain, null, null, opt);
     }
 
+
+
     /**
      * Set the coefficients used for the RGBA to Luminocity
      * calculation. The default is {0.299f, 0.587f, 0.114f, 0.f}.
@@ -141,6 +157,7 @@
         setVar(1, aout);
     }
 
+
     /**
      * Process an input buffer and place the histogram into the
      * output allocation. The dot product of the input channel and
@@ -152,6 +169,21 @@
      * @param ain The input image
      */
     public void forEach_Dot(Allocation ain) {
+        forEach_Dot(ain, null);
+    }
+
+    /**
+     * Process an input buffer and place the histogram into the
+     * output allocation. The dot product of the input channel and
+     * the coefficients from 'setDotCoefficients' are used to
+     * calculate the output values.
+     *
+     * 1D and 2D input allocations are supported.
+     *
+     * @param ain The input image
+     * @param opt LaunchOptions for clipping
+     */
+    public void forEach_Dot(Allocation ain, Script.LaunchOptions opt) {
         if (mOut.getType().getElement().getVectorSize() != 1) {
             throw new RSIllegalArgumentException("Output vector size must be one.");
         }
@@ -160,7 +192,7 @@
             throw new RSIllegalArgumentException("Output type must be U32 or I32.");
         }
 
-        forEach(1, ain, null, null);
+        forEach(1, ain, null, null, opt);
     }
 
 
diff --git a/rs/java/android/renderscript/ScriptIntrinsicLUT.java b/rs/java/android/renderscript/ScriptIntrinsicLUT.java
index c45c015..69ff64a 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicLUT.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicLUT.java
@@ -16,8 +16,6 @@
 
 package android.renderscript;
 
-import android.util.Log;
-
 /**
  * Intrinsic for applying a per-channel lookup table. Each
  * channel of the input has an independant lookup table. The
@@ -116,7 +114,6 @@
         mDirty = true;
     }
 
-
     /**
      * Invoke the kernel and apply the lookup to each cell of ain
      * and copy to aout.
@@ -125,11 +122,23 @@
      * @param aout Output allocation
      */
     public void forEach(Allocation ain, Allocation aout) {
+        forEach(ain, aout, null);
+    }
+
+    /**
+     * Invoke the kernel and apply the lookup to each cell of ain
+     * and copy to aout.
+     *
+     * @param ain Input allocation
+     * @param aout Output allocation
+     * @param opt Options for clipping
+     */
+    public void forEach(Allocation ain, Allocation aout, Script.LaunchOptions opt) {
         if (mDirty) {
             mDirty = false;
             mTables.copyFromUnchecked(mCache);
         }
-        forEach(0, ain, aout, null);
+        forEach(0, ain, aout, null, opt);
     }
 
     /**
diff --git a/rs/java/android/renderscript/ScriptIntrinsicResize.java b/rs/java/android/renderscript/ScriptIntrinsicResize.java
index cc37120..fe56699 100644
--- a/rs/java/android/renderscript/ScriptIntrinsicResize.java
+++ b/rs/java/android/renderscript/ScriptIntrinsicResize.java
@@ -18,7 +18,6 @@
 
 /**
  * Intrinsic for performing a resize of a 2D allocation.
- * @hide
  */
 public final class ScriptIntrinsicResize extends ScriptIntrinsic {
     private Allocation mInput;
diff --git a/rs/java/android/renderscript/Short2.java b/rs/java/android/renderscript/Short2.java
index 070d608..24809f7 100644
--- a/rs/java/android/renderscript/Short2.java
+++ b/rs/java/android/renderscript/Short2.java
@@ -16,7 +16,10 @@
 
 package android.renderscript;
 
-/** 
+
+/**
+ * Class for exposing the native RenderScript Short2 type back to the Android system.
+ *
  * Vector version of the basic short type.
  * Provides two short fields packed.
  */
diff --git a/rs/java/android/renderscript/Type.java b/rs/java/android/renderscript/Type.java
index 1b5f1a2..98aeaa9 100644
--- a/rs/java/android/renderscript/Type.java
+++ b/rs/java/android/renderscript/Type.java
@@ -16,12 +16,6 @@
 
 package android.renderscript;
 
-
-import java.lang.reflect.Field;
-
-import android.graphics.ImageFormat;
-import android.util.Log;
-
 /**
  * <p>A Type describes the {@link android.renderscript.Element} and dimensions used for an {@link
  * android.renderscript.Allocation} or a parallel operation. Types are created through {@link
diff --git a/rs/jni/Android.mk b/rs/jni/Android.mk
index cbb5b3b..07933b4 100644
--- a/rs/jni/Android.mk
+++ b/rs/jni/Android.mk
@@ -23,8 +23,7 @@
 LOCAL_C_INCLUDES += \
 	$(JNI_H_INCLUDE) \
 	frameworks/rs \
-	$(rs_generated_include_dir) \
-	$(call include-path-for, corecg graphics)
+	$(rs_generated_include_dir)
 
 LOCAL_CFLAGS += -Wno-unused-parameter
 
diff --git a/rs/jni/android_renderscript_RenderScript.cpp b/rs/jni/android_renderscript_RenderScript.cpp
index b80ef75..18a2e31 100644
--- a/rs/jni/android_renderscript_RenderScript.cpp
+++ b/rs/jni/android_renderscript_RenderScript.cpp
@@ -23,10 +23,7 @@
 #include <math.h>
 #include <utils/misc.h>
 
-#include <core/SkBitmap.h>
-#include <core/SkPixelRef.h>
-#include <core/SkStream.h>
-#include <core/SkTemplates.h>
+#include <SkBitmap.h>
 
 #include <androidfw/Asset.h>
 #include <androidfw/AssetManager.h>
@@ -397,7 +394,7 @@
     jint len = 0;
     if (data) {
         len = _env->GetArrayLength(data);
-        jint *ptr = _env->GetIntArrayElements(data, NULL);
+        ptr = _env->GetIntArrayElements(data, NULL);
     }
     LOG_API("nContextSendMessage, con(%p), id(%i), len(%i)", (RsContext)con, id, len);
     rsContextSendMessage((RsContext)con, id, (const uint8_t *)ptr, len * sizeof(int));
diff --git a/sax/java/android/sax/Element.java b/sax/java/android/sax/Element.java
index 8c8334c..c3e275f 100644
--- a/sax/java/android/sax/Element.java
+++ b/sax/java/android/sax/Element.java
@@ -21,8 +21,6 @@
 
 import java.util.ArrayList;
 
-import android.util.Log;
-
 /**
  * An XML element. Provides access to child elements and hooks to listen
  * for events related to this element.
diff --git a/services/Android.mk b/services/Android.mk
index 5260540..5fcef64 100644
--- a/services/Android.mk
+++ b/services/Android.mk
@@ -8,6 +8,10 @@
 
 LOCAL_SRC_FILES := $(call all-java-files-under,java)
 
+# EventLogTags files.
+LOCAL_SRC_FILES += \
+        core/java/com/android/server/EventLogTags.logtags
+
 # Uncomment to enable output of certain warnings (deprecated, unchecked)
 # LOCAL_JAVACFLAGS := -Xlint
 
@@ -21,7 +25,8 @@
     backup \
     devicepolicy \
     print \
-    usb
+    usb \
+    voiceinteraction
 
 # The convention is to name each service module 'services.$(module_name)'
 LOCAL_STATIC_JAVA_LIBRARIES := $(addprefix services.,$(services))
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index ccac0d3..3619112 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -61,24 +61,27 @@
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.text.TextUtils.SimpleStringSplitter;
+import android.util.LongArray;
 import android.util.Pools.Pool;
 import android.util.Pools.SimplePool;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.view.Display;
 import android.view.IWindow;
-import android.view.IWindowManager;
 import android.view.InputDevice;
 import android.view.InputEventConsistencyVerifier;
 import android.view.KeyCharacterMap;
 import android.view.KeyEvent;
 import android.view.MagnificationSpec;
+import android.view.WindowInfo;
 import android.view.WindowManager;
+import android.view.WindowManagerInternal;
 import android.view.WindowManagerPolicy;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.accessibility.AccessibilityInteractionClient;
 import android.view.accessibility.AccessibilityManager;
 import android.view.accessibility.AccessibilityNodeInfo;
+import android.view.accessibility.AccessibilityWindowInfo;
 import android.view.accessibility.IAccessibilityInteractionConnection;
 import android.view.accessibility.IAccessibilityInteractionConnectionCallback;
 import android.view.accessibility.IAccessibilityManager;
@@ -87,6 +90,7 @@
 import com.android.internal.R;
 import com.android.internal.content.PackageMonitor;
 import com.android.internal.statusbar.IStatusBarService;
+import com.android.server.LocalServices;
 
 import org.xmlpull.v1.XmlPullParserException;
 
@@ -128,6 +132,8 @@
     private static final String TEMPORARY_ENABLE_ACCESSIBILITY_UNTIL_KEYGUARD_REMOVED =
             "temporaryEnableAccessibilityStateUntilKeyguardRemoved";
 
+    private static final String GET_WINDOW_TOKEN = "getWindowToken";
+
     private static final ComponentName sFakeAccessibilityServiceComponentName =
             new ComponentName("foo.bar", "FakeService");
 
@@ -160,17 +166,15 @@
 
     private final Point mTempPoint = new Point();
 
-    private final Display mDefaultDisplay;
-
     private final PackageManager mPackageManager;
 
-    private final IWindowManager mWindowManagerService;
+    private final WindowManagerInternal mWindowManagerService;
 
     private final SecurityPolicy mSecurityPolicy;
 
     private final MainHandler mMainHandler;
 
-    private Service mQueryBridge;
+    private InteractionBridge mInteractionBridge;
 
     private AlertDialog mEnableTouchExplorationDialog;
 
@@ -195,9 +199,13 @@
 
     private int mCurrentUserId = UserHandle.USER_OWNER;
 
+    private final LongArray mTempLongArray = new LongArray();
+
     //TODO: Remove this hack
     private boolean mInitialized;
 
+    private WindowsForAccessibilityCallback mWindowsForAccessibilityCallback;
+
     private UserState getCurrentUserStateLocked() {
         return getUserStateLocked(mCurrentUserId);
     }
@@ -219,13 +227,9 @@
     public AccessibilityManagerService(Context context) {
         mContext = context;
         mPackageManager = mContext.getPackageManager();
-        mWindowManagerService = (IWindowManager) ServiceManager.getService(Context.WINDOW_SERVICE);
+        mWindowManagerService = LocalServices.getService(WindowManagerInternal.class);
         mSecurityPolicy = new SecurityPolicy();
         mMainHandler = new MainHandler(mContext.getMainLooper());
-        //TODO: (multi-display) We need to support multiple displays.
-        DisplayManager displayManager = (DisplayManager)
-                mContext.getSystemService(Context.DISPLAY_SERVICE);
-        mDefaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
         registerBroadcastReceivers();
         new AccessibilityContentObserver(mMainHandler).register(
                 context.getContentResolver());
@@ -352,6 +356,7 @@
         }, UserHandle.ALL, intentFilter, null, null);
     }
 
+    @Override
     public int addClient(IAccessibilityManagerClient client, int userId) {
         synchronized (mLock) {
             final int resolvedUserId = mSecurityPolicy
@@ -380,6 +385,7 @@
         }
     }
 
+    @Override
     public boolean sendAccessibilityEvent(AccessibilityEvent event, int userId) {
         synchronized (mLock) {
             final int resolvedUserId = mSecurityPolicy
@@ -388,10 +394,10 @@
             if (resolvedUserId != mCurrentUserId) {
                 return true; // yes, recycle the event
             }
-            if (mSecurityPolicy.canDispatchAccessibilityEvent(event)) {
+            if (mSecurityPolicy.canDispatchAccessibilityEventLocked(event)) {
+                mSecurityPolicy.updateActiveAndAccessibilityFocusedWindowLocked(event.getWindowId(),
+                        event.getSourceNodeId(), event.getEventType());
                 mSecurityPolicy.updateEventSourceLocked(event);
-                mMainHandler.obtainMessage(MainHandler.MSG_UPDATE_ACTIVE_WINDOW,
-                        event.getWindowId(), event.getEventType()).sendToTarget();
                 notifyAccessibilityServicesDelayedLocked(event, false);
                 notifyAccessibilityServicesDelayedLocked(event, true);
             }
@@ -405,6 +411,7 @@
         return (OWN_PROCESS_ID != Binder.getCallingPid());
     }
 
+    @Override
     public List<AccessibilityServiceInfo> getInstalledAccessibilityServiceList(int userId) {
         synchronized (mLock) {
             final int resolvedUserId = mSecurityPolicy
@@ -423,6 +430,7 @@
         }
     }
 
+    @Override
     public List<AccessibilityServiceInfo> getEnabledAccessibilityServiceList(int feedbackType,
             int userId) {
         List<AccessibilityServiceInfo> result = null;
@@ -456,6 +464,7 @@
         return result;
     }
 
+    @Override
     public void interrupt(int userId) {
         CopyOnWriteArrayList<Service> services;
         synchronized (mLock) {
@@ -478,6 +487,7 @@
         }
     }
 
+    @Override
     public int addAccessibilityInteractionConnection(IWindow windowToken,
             IAccessibilityInteractionConnection connection, int userId) throws RemoteException {
         synchronized (mLock) {
@@ -495,7 +505,7 @@
                 mGlobalWindowTokens.put(windowId, windowToken.asBinder());
                 if (DEBUG) {
                     Slog.i(LOG_TAG, "Added global connection for pid:" + Binder.getCallingPid()
-                            + " with windowId: " + windowId);
+                            + " with windowId: " + windowId + " and  token: " + windowToken.asBinder());
                 }
             } else {
                 AccessibilityConnectionWrapper wrapper = new AccessibilityConnectionWrapper(
@@ -506,16 +516,15 @@
                 userState.mWindowTokens.put(windowId, windowToken.asBinder());
                 if (DEBUG) {
                     Slog.i(LOG_TAG, "Added user connection for pid:" + Binder.getCallingPid()
-                            + " with windowId: " + windowId + " and userId:" + mCurrentUserId);
+                            + " with windowId: " + windowId + " and userId:" + mCurrentUserId
+                            + " and  token: " + windowToken.asBinder());
                 }
             }
-            if (DEBUG) {
-                Slog.i(LOG_TAG, "Adding interaction connection to windowId: " + windowId);
-            }
             return windowId;
         }
     }
 
+    @Override
     public void removeAccessibilityInteractionConnection(IWindow window) {
         synchronized (mLock) {
             mSecurityPolicy.resolveCallingUserIdEnforcingPermissionsLocked(
@@ -526,7 +535,7 @@
             if (removedWindowId >= 0) {
                 if (DEBUG) {
                     Slog.i(LOG_TAG, "Removed global connection for pid:" + Binder.getCallingPid()
-                            + " with windowId: " + removedWindowId);
+                            + " with windowId: " + removedWindowId + " and token: " + window.asBinder());
                 }
                 return;
             }
@@ -540,7 +549,7 @@
                     if (DEBUG) {
                         Slog.i(LOG_TAG, "Removed user connection for pid:" + Binder.getCallingPid()
                                 + " with windowId: " + removedWindowIdForUser + " and userId:"
-                                + mUserStates.keyAt(i));
+                                + mUserStates.keyAt(i) + " and token: " + window.asBinder());
                     }
                     return;
                 }
@@ -565,6 +574,7 @@
         return -1;
     }
 
+    @Override
     public void registerUiTestAutomationService(IBinder owner,
             IAccessibilityServiceClient serviceClient,
             AccessibilityServiceInfo accessibilityServiceInfo) {
@@ -607,6 +617,7 @@
         }
     }
 
+    @Override
     public void unregisterUiTestAutomationService(IAccessibilityServiceClient serviceClient) {
         synchronized (mLock) {
             UserState userState = getCurrentUserStateLocked();
@@ -625,16 +636,13 @@
         }
     }
 
+    @Override
     public void temporaryEnableAccessibilityStateUntilKeyguardRemoved(
             ComponentName service, boolean touchExplorationEnabled) {
         mSecurityPolicy.enforceCallingPermission(
                 Manifest.permission.TEMPORARY_ENABLE_ACCESSIBILITY,
                 TEMPORARY_ENABLE_ACCESSIBILITY_UNTIL_KEYGUARD_REMOVED);
-        try {
-            if (!mWindowManagerService.isKeyguardLocked()) {
-                return;
-            }
-        } catch (RemoteException re) {
+        if (!mWindowManagerService.isKeyguardLocked()) {
             return;
         }
         synchronized (mLock) {
@@ -661,6 +669,29 @@
         }
     }
 
+    @Override
+    public IBinder getWindowToken(int windowId) {
+        mSecurityPolicy.enforceCallingPermission(
+                Manifest.permission.RETRIEVE_WINDOW_TOKEN,
+                GET_WINDOW_TOKEN);
+        synchronized (mLock) {
+            final int resolvedUserId = mSecurityPolicy
+                    .resolveCallingUserIdEnforcingPermissionsLocked(
+                            UserHandle.getCallingUserId());
+            if (resolvedUserId != mCurrentUserId) {
+                return null;
+            }
+            if (mSecurityPolicy.findWindowById(windowId) == null) {
+                return null;
+            }
+            IBinder token = mGlobalWindowTokens.get(windowId);
+            if (token != null) {
+                return token;
+            }
+            return getCurrentUserStateLocked().mWindowTokens.get(windowId);
+        }
+    }
+
     boolean onGesture(int gestureId) {
         synchronized (mLock) {
             boolean handled = notifyGestureLocked(gestureId, false);
@@ -688,47 +719,9 @@
      * @param outBounds The output to which to write the focus bounds.
      * @return Whether accessibility focus was found and the bounds are populated.
      */
-    // TODO: (multi-display) Make sure this works for multiple displays. 
-    boolean getAccessibilityFocusBoundsInActiveWindow(Rect outBounds) {
-        // Instead of keeping track of accessibility focus events per
-        // window to be able to find the focus in the active window,
-        // we take a stateless approach and look it up. This is fine
-        // since we do this only when the user clicks/long presses.
-        Service service = getQueryBridge();
-        final int connectionId = service.mId;
-        AccessibilityInteractionClient client = AccessibilityInteractionClient.getInstance();
-        client.addConnection(connectionId, service);
-        try {
-            AccessibilityNodeInfo root = AccessibilityInteractionClient.getInstance()
-                    .getRootInActiveWindow(connectionId);
-            if (root == null) {
-                return false;
-            }
-            AccessibilityNodeInfo focus = root.findFocus(
-                    AccessibilityNodeInfo.FOCUS_ACCESSIBILITY);
-            if (focus == null) {
-                return false;
-            }
-            focus.getBoundsInScreen(outBounds);
-
-            MagnificationSpec spec = service.getCompatibleMagnificationSpec(focus.getWindowId());
-            if (spec != null && !spec.isNop()) {
-                outBounds.offset((int) -spec.offsetX, (int) -spec.offsetY);
-                outBounds.scale(1 / spec.scale);
-            }
-
-            // Clip to the window rectangle.
-            Rect windowBounds = mTempRect;
-            getActiveWindowBounds(windowBounds);
-            outBounds.intersect(windowBounds);
-            // Clip to the screen rectangle.
-            mDefaultDisplay.getRealSize(mTempPoint);
-            outBounds.intersect(0,  0,  mTempPoint.x, mTempPoint.y);
-
-            return true;
-        } finally {
-            client.removeConnection(connectionId);
-        }
+    // TODO: (multi-display) Make sure this works for multiple displays.
+    boolean getAccessibilityFocusBounds(Rect outBounds) {
+        return getInteractionBridgeLocked().getAccessibilityFocusBoundsNotLocked(outBounds);
     }
 
     /**
@@ -737,6 +730,8 @@
      * @param outBounds The output to which to write the bounds.
      */
     boolean getActiveWindowBounds(Rect outBounds) {
+        // TODO: This should be refactored to work with accessibility
+        // focus in multiple windows.
         IBinder token;
         synchronized (mLock) {
             final int windowId = mSecurityPolicy.mActiveWindowId;
@@ -745,13 +740,9 @@
                 token = getCurrentUserStateLocked().mWindowTokens.get(windowId);
             }
         }
-        try {
-            mWindowManagerService.getWindowFrame(token, outBounds);
-            if (!outBounds.isEmpty()) {
-                return true;
-            }
-        } catch (RemoteException re) {
-            /* ignore */
+        mWindowManagerService.getWindowFrame(token, outBounds);
+        if (!outBounds.isEmpty()) {
+            return true;
         }
         return false;
     }
@@ -769,7 +760,7 @@
     }
 
     void onMagnificationStateChanged() {
-        notifyClearAccessibilityNodeInfoCacheLocked();
+        notifyClearAccessibilityCacheLocked();
     }
 
     private void switchUser(int userId) {
@@ -821,14 +812,11 @@
         }
     }
 
-    private Service getQueryBridge() {
-        if (mQueryBridge == null) {
-            AccessibilityServiceInfo info = new AccessibilityServiceInfo();
-            info.setCapabilities(AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT);
-            mQueryBridge = new Service(UserHandle.USER_NULL,
-                    sFakeAccessibilityServiceComponentName, info);
+    private InteractionBridge getInteractionBridgeLocked() {
+        if (mInteractionBridge == null) {
+            mInteractionBridge = new InteractionBridge();
         }
-        return mQueryBridge;
+        return mInteractionBridge;
     }
 
     private boolean notifyGestureLocked(int gestureId, boolean isDefault) {
@@ -877,7 +865,7 @@
         return false;
     }
 
-    private void notifyClearAccessibilityNodeInfoCacheLocked() {
+    private void notifyClearAccessibilityCacheLocked() {
         UserState state = getCurrentUserStateLocked();
         for (int i = state.mBoundServices.size() - 1; i >= 0; i--) {
             Service service = state.mBoundServices.get(i);
@@ -885,6 +873,16 @@
         }
     }
 
+    private void notifyWindowsChangedLocked(List<AccessibilityWindowInfo> windows) {
+        UserState state = getCurrentUserStateLocked();
+        for (int i = state.mBoundServices.size() - 1; i >= 0; i--) {
+            Service service = state.mBoundServices.get(i);
+            if (mSecurityPolicy.canRetrieveWindowsLocked(service)) {
+                service.notifyWindowsChangedLocked(windows);
+            }
+        }
+    }
+
     /**
      * Removes an AccessibilityInteractionConnection.
      *
@@ -992,7 +990,8 @@
                 Service service = state.mBoundServices.get(i);
 
                 if (service.mIsDefault == isDefault) {
-                    if (canDispathEventLocked(service, event, state.mHandledFeedbackTypes)) {
+                    if (canDispatchEventToServiceLocked(service, event,
+                            state.mHandledFeedbackTypes)) {
                         state.mHandledFeedbackTypes |= service.mFeedbackType;
                         service.notifyAccessibilityEvent(event);
                     }
@@ -1041,7 +1040,7 @@
      * @param handledFeedbackTypes The feedback types for which services have been notified.
      * @return True if the listener should be notified, false otherwise.
      */
-    private boolean canDispathEventLocked(Service service, AccessibilityEvent event,
+    private boolean canDispatchEventToServiceLocked(Service service, AccessibilityEvent event,
             int handledFeedbackTypes) {
 
         if (!service.canReceiveEventsLocked()) {
@@ -1230,11 +1229,7 @@
             }
         }
         if (setInputFilter) {
-            try {
-                mWindowManagerService.setInputFilter(inputFilter);
-            } catch (RemoteException re) {
-                /* ignore */
-            }
+            mWindowManagerService.setInputFilter(inputFilter);
         }
     }
 
@@ -1292,16 +1287,77 @@
     private void onUserStateChangedLocked(UserState userState) {
         // TODO: Remove this hack
         mInitialized = true;
-        updateLegacyCapabilities(userState);
+        updateLegacyCapabilitiesLocked(userState);
         updateServicesLocked(userState);
+        updateWindowsForAccessibilityCallbackLocked(userState);
+        updateAccessibilityFocusBehaviorLocked(userState);
         updateFilterKeyEventsLocked(userState);
         updateTouchExplorationLocked(userState);
         updateEnhancedWebAccessibilityLocked(userState);
+        updateDisplayColorAdjustmentSettingsLocked(userState);
         scheduleUpdateInputFilter(userState);
         scheduleUpdateClientsIfNeededLocked(userState);
     }
 
-    private void updateLegacyCapabilities(UserState userState) {
+    private void updateAccessibilityFocusBehaviorLocked(UserState userState) {
+        // If there is no service that can operate with interactive windows
+        // then we keep the old behavior where a window loses accessibility
+        // focus if it is no longer active. This still changes the behavior
+        // for services that do not operate with interactive windows and run
+        // at the same time as the one(s) which does. In practice however,
+        // there is only one service that uses accessibility focus and it
+        // is typically the one that operates with interactive windows, So,
+        // this is fine. Note that to allow a service to work across windows
+        // we have to allow accessibility focus stay in any of them. Sigh...
+        List<Service> boundServices = userState.mBoundServices;
+        final int boundServiceCount = boundServices.size();
+        for (int i = 0; i < boundServiceCount; i++) {
+            Service boundService = boundServices.get(i);
+            if (boundService.canRetrieveInteractiveWindowsLocked()) {
+                userState.mAccessibilityFocusOnlyInActiveWindow = false;
+                return;
+            }
+        }
+        userState.mAccessibilityFocusOnlyInActiveWindow = true;
+    }
+
+    private void updateWindowsForAccessibilityCallbackLocked(UserState userState) {
+        if (userState.mIsAccessibilityEnabled) {
+            // We observe windows for accessibility only if there is at least
+            // one bound service that can retrieve window content that specified
+            // it is interested in accessing such windows. For services that are
+            // binding we do an update pass after each bind event, so we run this
+            // code and register the callback if needed.
+            boolean boundServiceCanRetrieveInteractiveWindows = false;
+
+            List<Service> boundServices = userState.mBoundServices;
+            final int boundServiceCount = boundServices.size();
+            for (int i = 0; i < boundServiceCount; i++) {
+                Service boundService = boundServices.get(i);
+                if (boundService.canRetrieveInteractiveWindowsLocked()) {
+                    boundServiceCanRetrieveInteractiveWindows = true;
+                    break;
+                }
+            }
+
+            if (boundServiceCanRetrieveInteractiveWindows) {
+                if (mWindowsForAccessibilityCallback == null) {
+                    mWindowsForAccessibilityCallback = new WindowsForAccessibilityCallback();
+                    mWindowManagerService.setWindowsForAccessibilityCallback(
+                            mWindowsForAccessibilityCallback);
+                }
+                return;
+            }
+        }
+
+        if (mWindowsForAccessibilityCallback != null) {
+            mWindowsForAccessibilityCallback = null;
+            mWindowManagerService.setWindowsForAccessibilityCallback(
+                    mWindowsForAccessibilityCallback);
+        }
+    }
+
+    private void updateLegacyCapabilitiesLocked(UserState userState) {
         // Up to JB-MR1 we had a white list with services that can enable touch
         // exploration. When a service is first started we show a dialog to the
         // use to get a permission to white list the service.
@@ -1355,6 +1411,7 @@
         somthingChanged |= readTouchExplorationEnabledSettingLocked(userState);
         somthingChanged |= readEnhancedWebAccessibilityEnabledChangedLocked(userState);
         somthingChanged |= readDisplayMagnificationEnabledSettingLocked(userState);
+        somthingChanged |= readDisplayColorAdjustmentSettingsLocked(userState);
         return somthingChanged;
     }
 
@@ -1403,6 +1460,18 @@
          return false;
     }
 
+    private boolean readDisplayColorAdjustmentSettingsLocked(UserState userState) {
+        final boolean displayAdjustmentsEnabled = DisplayAdjustmentUtils.hasAdjustments(mContext,
+                userState.mUserId);
+        if (displayAdjustmentsEnabled != userState.mHasDisplayColorAdjustment) {
+            userState.mHasDisplayColorAdjustment = displayAdjustmentsEnabled;
+            return true;
+        }
+        // If display adjustment is enabled, always assume there was a change in
+        // the adjustment settings.
+        return displayAdjustmentsEnabled;
+    }
+
     private void updateTouchExplorationLocked(UserState userState) {
         boolean enabled = false;
         final int serviceCount = userState.mBoundServices.size();
@@ -1419,11 +1488,6 @@
                     Settings.Secure.TOUCH_EXPLORATION_ENABLED, enabled ? 1 : 0,
                     userState.mUserId);
         }
-        try {
-            mWindowManagerService.setTouchExplorationEnabled(enabled);
-        } catch (RemoteException e) {
-            e.printStackTrace();
-        }
     }
 
     private boolean canRequestAndRequestsTouchExplorationLocked(Service service) {
@@ -1490,6 +1554,22 @@
         return false;
     }
 
+    private void updateDisplayColorAdjustmentSettingsLocked(UserState userState) {
+        DisplayAdjustmentUtils.applyAdjustments(mContext, userState.mUserId);
+    }
+
+    private MagnificationSpec getCompatibleMagnificationSpecLocked(int windowId) {
+        IBinder windowToken = mGlobalWindowTokens.get(windowId);
+        if (windowToken == null) {
+            windowToken = getCurrentUserStateLocked().mWindowTokens.get(windowId);
+        }
+        if (windowToken != null) {
+            return mWindowManagerService.getCompatibleMagnificationSpecForWindow(
+                    windowToken);
+        }
+        return null;
+    }
+
     @Override
     public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
         mSecurityPolicy.enforceCallingPermission(Manifest.permission.DUMP, FUNCTION_DUMP);
@@ -1562,11 +1642,11 @@
         public static final int MSG_SEND_ACCESSIBILITY_EVENT_TO_INPUT_FILTER = 1;
         public static final int MSG_SEND_STATE_TO_CLIENTS = 2;
         public static final int MSG_SEND_CLEARED_STATE_TO_CLIENTS_FOR_USER = 3;
-        public static final int MSG_UPDATE_ACTIVE_WINDOW = 4;
         public static final int MSG_ANNOUNCE_NEW_USER_IF_NEEDED = 5;
         public static final int MSG_UPDATE_INPUT_FILTER = 6;
         public static final int MSG_SHOW_ENABLED_TOUCH_EXPLORATION_DIALOG = 7;
         public static final int MSG_SEND_KEY_EVENT_TO_INPUT_FILTER = 8;
+        public static final int MSG_CLEAR_ACCESSIBILITY_FOCUS = 9;
 
         public MainHandler(Looper looper) {
             super(looper);
@@ -1585,6 +1665,7 @@
                     }
                     event.recycle();
                 } break;
+
                 case MSG_SEND_KEY_EVENT_TO_INPUT_FILTER: {
                     KeyEvent event = (KeyEvent) msg.obj;
                     final int policyFlags = msg.arg1;
@@ -1595,32 +1676,41 @@
                     }
                     event.recycle();
                 } break;
+
                 case MSG_SEND_STATE_TO_CLIENTS: {
                     final int clientState = msg.arg1;
                     final int userId = msg.arg2;
                     sendStateToClients(clientState, mGlobalClients);
                     sendStateToClientsForUser(clientState, userId);
                 } break;
+
                 case MSG_SEND_CLEARED_STATE_TO_CLIENTS_FOR_USER: {
                     final int userId = msg.arg1;
                     sendStateToClientsForUser(0, userId);
                 } break;
-                case MSG_UPDATE_ACTIVE_WINDOW: {
-                    final int windowId = msg.arg1;
-                    final int eventType = msg.arg2;
-                    mSecurityPolicy.updateActiveWindow(windowId, eventType);
-                } break;
+
                 case MSG_ANNOUNCE_NEW_USER_IF_NEEDED: {
                     announceNewUserIfNeeded();
                 } break;
+
                 case MSG_UPDATE_INPUT_FILTER: {
                     UserState userState = (UserState) msg.obj;
                     updateInputFilter(userState);
                 } break;
+
                 case MSG_SHOW_ENABLED_TOUCH_EXPLORATION_DIALOG: {
                     Service service = (Service) msg.obj;
                     showEnableTouchExplorationDialog(service);
                 } break;
+
+                case MSG_CLEAR_ACCESSIBILITY_FOCUS: {
+                    final int windowId = msg.arg1;
+                    InteractionBridge bridge;
+                    synchronized (mLock) {
+                        bridge = getInteractionBridgeLocked();
+                    }
+                    bridge.clearAccessibilityFocusNotLocked(windowId);
+                } break;
             }
         }
 
@@ -1635,7 +1725,6 @@
                     AccessibilityEvent event = AccessibilityEvent.obtain(
                             AccessibilityEvent.TYPE_ANNOUNCEMENT);
                     event.getText().add(message);
-                    event.setWindowId(mSecurityPolicy.getRetrievalAllowingWindowLocked());
                     sendAccessibilityEvent(event, mCurrentUserId);
                 }
             }
@@ -1683,6 +1772,19 @@
         mPendingEventPool.release(pendingEvent);
     }
 
+    private int findWindowIdLocked(IBinder token) {
+        final int globalIndex = mGlobalWindowTokens.indexOfValue(token);
+        if (globalIndex >= 0) {
+            return mGlobalWindowTokens.keyAt(globalIndex);
+        }
+        UserState userState = getCurrentUserStateLocked();
+        final int userIndex = userState.mWindowTokens.indexOfValue(token);
+        if (userIndex >= 0) {
+            return userState.mWindowTokens.keyAt(userIndex);
+        }
+        return -1;
+    }
+
     /**
      * This class represents an accessibility service. It stores all per service
      * data required for the service management, provides API for starting/stopping the
@@ -1718,6 +1820,8 @@
 
         boolean mRequestFilterKeyEvents;
 
+        boolean mRetrieveInteractiveWindows;
+
         int mFetchFlags;
 
         long mNotificationTimeout;
@@ -1728,7 +1832,9 @@
 
         boolean mIsAutomation;
 
-        final Rect mTempBounds = new Rect();
+        final Rect mTempBounds1 = new Rect();
+
+        final Rect mTempBounds2 = new Rect();
 
         final ResolveInfo mResolveInfo;
 
@@ -1738,6 +1844,9 @@
 
         final KeyEventDispatcher mKeyEventDispatcher = new KeyEventDispatcher();
 
+        final SparseArray<AccessibilityWindowInfo> mIntrospectedWindows =
+                new SparseArray<AccessibilityWindowInfo>();
+
         boolean mWasConnectedAndDied;
 
         // Handler only for dispatching accessibility events since we use event
@@ -1802,7 +1911,13 @@
             mRequestEnhancedWebAccessibility = (info.flags
                     & AccessibilityServiceInfo.FLAG_REQUEST_ENHANCED_WEB_ACCESSIBILITY) != 0;
             mRequestFilterKeyEvents = (info.flags
-                    & AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS)  != 0;
+                    & AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS) != 0;
+            mRetrieveInteractiveWindows = (info.flags
+                    & AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS) != 0;
+
+            if (!mRetrieveInteractiveWindows) {
+                clearIntrospectedWindows();
+            }
         }
 
         /**
@@ -1864,6 +1979,11 @@
             }
         }
 
+        public boolean canRetrieveInteractiveWindowsLocked() {
+            return mSecurityPolicy.canRetrieveWindowContentLocked(this)
+                    && mRetrieveInteractiveWindows;
+        }
+
         @Override
         public void setServiceInfo(AccessibilityServiceInfo info) {
             final long identity = Binder.clearCallingIdentity();
@@ -1912,6 +2032,59 @@
         }
 
         @Override
+        public List<AccessibilityWindowInfo> getWindows() {
+            synchronized (mLock) {
+                final int resolvedUserId = mSecurityPolicy
+                        .resolveCallingUserIdEnforcingPermissionsLocked(
+                                UserHandle.getCallingUserId());
+                if (resolvedUserId != mCurrentUserId) {
+                    return null;
+                }
+                final boolean permissionGranted =
+                        mSecurityPolicy.canRetrieveWindowsLocked(this);
+                if (!permissionGranted) {
+                    return null;
+                }
+                List<AccessibilityWindowInfo> windows = new ArrayList<AccessibilityWindowInfo>();
+                final int windowCount = mSecurityPolicy.mWindows.size();
+                for (int i = 0; i < windowCount; i++) {
+                    AccessibilityWindowInfo window = mSecurityPolicy.mWindows.get(i);
+                    AccessibilityWindowInfo windowClone =
+                            AccessibilityWindowInfo.obtain(window);
+                    windowClone.setConnectionId(mId);
+                    mIntrospectedWindows.put(window.getId(), windowClone);
+                    windows.add(windowClone);
+                }
+                return windows;
+            }
+        }
+
+        @Override
+        public AccessibilityWindowInfo getWindow(int windowId) {
+            synchronized (mLock) {
+                final int resolvedUserId = mSecurityPolicy
+                        .resolveCallingUserIdEnforcingPermissionsLocked(
+                                UserHandle.getCallingUserId());
+                if (resolvedUserId != mCurrentUserId) {
+                    return null;
+                }
+                final boolean permissionGranted =
+                        mSecurityPolicy.canRetrieveWindowsLocked(this);
+                if (!permissionGranted) {
+                    return null;
+                }
+                AccessibilityWindowInfo window = mSecurityPolicy.findWindowById(windowId);
+                if (window != null) {
+                    AccessibilityWindowInfo windowClone = AccessibilityWindowInfo.obtain(window);
+                    windowClone.setConnectionId(mId);
+                    mIntrospectedWindows.put(windowId, windowClone);
+                    return windowClone;
+                }
+                return null;
+            }
+        }
+
+        @Override
         public boolean findAccessibilityNodeInfosByViewId(int accessibilityWindowId,
                 long accessibilityNodeId, String viewIdResName, int interactionId,
                 IAccessibilityInteractionConnectionCallback callback, long interrogatingTid)
@@ -1925,12 +2098,12 @@
                 if (resolvedUserId != mCurrentUserId) {
                     return false;
                 }
-                mSecurityPolicy.enforceCanRetrieveWindowContent(this);
-                final boolean permissionGranted = mSecurityPolicy.canRetrieveWindowContent(this);
+                resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
+                final boolean permissionGranted =
+                        mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId);
                 if (!permissionGranted) {
                     return false;
                 } else {
-                    resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
                     connection = getConnectionLocked(resolvedWindowId);
                     if (connection == null) {
                         return false;
@@ -1939,7 +2112,7 @@
             }
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
-            MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
+            MagnificationSpec spec = getCompatibleMagnificationSpecLocked(resolvedWindowId);
             try {
                 connection.findAccessibilityNodeInfosByViewId(accessibilityNodeId,
                         viewIdResName, interactionId, callback, mFetchFlags, interrogatingPid,
@@ -1969,7 +2142,6 @@
                 if (resolvedUserId != mCurrentUserId) {
                     return false;
                 }
-                mSecurityPolicy.enforceCanRetrieveWindowContent(this);
                 resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
                 final boolean permissionGranted =
                     mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId);
@@ -1984,7 +2156,7 @@
             }
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
-            MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
+            MagnificationSpec spec = getCompatibleMagnificationSpecLocked(resolvedWindowId);
             try {
                 connection.findAccessibilityNodeInfosByText(accessibilityNodeId, text,
                         interactionId, callback, mFetchFlags, interrogatingPid, interrogatingTid,
@@ -2014,7 +2186,6 @@
                 if (resolvedUserId != mCurrentUserId) {
                     return false;
                 }
-                mSecurityPolicy.enforceCanRetrieveWindowContent(this);
                 resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
                 final boolean permissionGranted =
                     mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId);
@@ -2029,7 +2200,7 @@
             }
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
-            MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
+            MagnificationSpec spec = getCompatibleMagnificationSpecLocked(resolvedWindowId);
             try {
                 connection.findAccessibilityNodeInfoByAccessibilityId(accessibilityNodeId,
                         interactionId, callback, mFetchFlags | flags, interrogatingPid,
@@ -2059,8 +2230,8 @@
                 if (resolvedUserId != mCurrentUserId) {
                     return false;
                 }
-                mSecurityPolicy.enforceCanRetrieveWindowContent(this);
-                resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
+                resolvedWindowId = resolveAccessibilityWindowIdForFindFocusLocked(
+                        accessibilityWindowId, focusType);
                 final boolean permissionGranted =
                     mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId);
                 if (!permissionGranted) {
@@ -2074,14 +2245,14 @@
             }
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
-            MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
+            MagnificationSpec spec = getCompatibleMagnificationSpecLocked(resolvedWindowId);
             try {
                 connection.findFocus(accessibilityNodeId, focusType, interactionId, callback,
                         mFetchFlags, interrogatingPid, interrogatingTid, spec);
                 return true;
             } catch (RemoteException re) {
                 if (DEBUG) {
-                    Slog.e(LOG_TAG, "Error calling findAccessibilityFocus()");
+                    Slog.e(LOG_TAG, "Error calling findFocus()");
                 }
             } finally {
                 Binder.restoreCallingIdentity(identityToken);
@@ -2103,7 +2274,6 @@
                 if (resolvedUserId != mCurrentUserId) {
                     return false;
                 }
-                mSecurityPolicy.enforceCanRetrieveWindowContent(this);
                 resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
                 final boolean permissionGranted =
                     mSecurityPolicy.canGetAccessibilityNodeInfoLocked(this, resolvedWindowId);
@@ -2118,7 +2288,7 @@
             }
             final int interrogatingPid = Binder.getCallingPid();
             final long identityToken = Binder.clearCallingIdentity();
-            MagnificationSpec spec = getCompatibleMagnificationSpec(resolvedWindowId);
+            MagnificationSpec spec = getCompatibleMagnificationSpecLocked(resolvedWindowId);
             try {
                 connection.focusSearch(accessibilityNodeId, direction, interactionId, callback,
                         mFetchFlags, interrogatingPid, interrogatingTid, spec);
@@ -2147,7 +2317,6 @@
                 if (resolvedUserId != mCurrentUserId) {
                     return false;
                 }
-                mSecurityPolicy.enforceCanRetrieveWindowContent(this);
                 resolvedWindowId = resolveAccessibilityWindowIdLocked(accessibilityWindowId);
                 final boolean permissionGranted = mSecurityPolicy.canPerformActionLocked(this,
                         resolvedWindowId, action, arguments);
@@ -2345,7 +2514,7 @@
                 }
 
                 mPendingEvents.remove(eventType);
-                if (mSecurityPolicy.canRetrieveWindowContent(this)) {
+                if (mSecurityPolicy.canRetrieveWindowContentLocked(this)) {
                     event.setConnectionId(mId);
                 } else {
                     event.setSource(null);
@@ -2376,12 +2545,69 @@
         }
 
         public void notifyClearAccessibilityNodeInfoCache() {
+            clearIntrospectedWindows();
             mInvocationHandler.sendEmptyMessage(
-                    InvocationHandler.MSG_CLEAR_ACCESSIBILITY_NODE_INFO_CACHE);
+                    InvocationHandler.MSG_CLEAR_ACCESSIBILITY_CACHE);
+        }
+
+        private void clearIntrospectedWindows() {
+            final int windowCount = mIntrospectedWindows.size();
+            for (int i = windowCount - 1; i >= 0; i--) {
+                mIntrospectedWindows.valueAt(i).recycle();
+                mIntrospectedWindows.removeAt(i);
+            }
+        }
+
+        public void notifyWindowsChangedLocked(List<AccessibilityWindowInfo> windows) {
+            LongArray changedWindows = mTempLongArray;
+            changedWindows.clear();
+
+            // Figure out which windows the service cares about changed.
+            final int windowCount = windows.size();
+            for (int i = 0; i < windowCount; i++) {
+                AccessibilityWindowInfo newState = windows.get(i);
+                final int windowId = newState.getId();
+                AccessibilityWindowInfo oldState = mIntrospectedWindows.get(windowId);
+                if (oldState != null && oldState.changed(newState)) {
+                    oldState.recycle();
+                    mIntrospectedWindows.put(newState.getId(),
+                            AccessibilityWindowInfo.obtain(newState));
+                    changedWindows.add(windowId);
+                }
+            }
+
+            // Figure out which windows the service cares about went away.
+            final int introspectedWindowCount = mIntrospectedWindows.size();
+            for (int i = introspectedWindowCount - 1; i >= 0; i--) {
+                AccessibilityWindowInfo window = mIntrospectedWindows.valueAt(i);
+                if (changedWindows.indexOf(window.getId()) < 0 && !windows.contains(window)) {
+                    changedWindows.add(window.getId());
+                    mIntrospectedWindows.removeAt(i);
+                    window.recycle();
+                }
+            }
+
+            int[] windowIds = null;
+
+            final int changedWindowCount = changedWindows.size();
+            if (changedWindowCount > 0) {
+                windowIds = new int[changedWindowCount];
+                for (int i = 0; i < changedWindowCount; i++) {
+                    // Cast is fine as we use long array to cache ints.
+                    windowIds[i] = (int) changedWindows.get(i);
+                }
+                changedWindows.clear();
+            }
+
+            mInvocationHandler.obtainMessage(InvocationHandler.MSG_ON_WINDOWS_CHANGED,
+                    windowIds).sendToTarget();
         }
 
         private void notifyGestureInternal(int gestureId) {
-            IAccessibilityServiceClient listener = mServiceInterface;
+            final IAccessibilityServiceClient listener;
+            synchronized (mLock) {
+                listener = mServiceInterface;
+            }
             if (listener != null) {
                 try {
                     listener.onGesture(gestureId);
@@ -2396,11 +2622,14 @@
             mKeyEventDispatcher.notifyKeyEvent(event, policyFlags);
         }
 
-        private void notifyClearAccessibilityNodeInfoCacheInternal() {
-            IAccessibilityServiceClient listener = mServiceInterface;
+        private void notifyClearAccessibilityCacheInternal() {
+            final IAccessibilityServiceClient listener;
+            synchronized (mLock) {
+                listener = mServiceInterface;
+            }
             if (listener != null) {
                 try {
-                    listener.clearAccessibilityNodeInfoCache();
+                    listener.clearAccessibilityCache();
                 } catch (RemoteException re) {
                     Slog.e(LOG_TAG, "Error during requesting accessibility info cache"
                             + " to be cleared.", re);
@@ -2408,6 +2637,20 @@
             }
         }
 
+        private void notifyWindowsChangedInternal(int[] windowIds) {
+            final IAccessibilityServiceClient listener;
+            synchronized (mLock) {
+                listener = mServiceInterface;
+            }
+            if (listener != null) {
+                try {
+                    listener.onWindowsChanged(windowIds);
+                } catch (RemoteException re) {
+                    Slog.e(LOG_TAG, "Error during sending windows to: " + mService, re);
+                }
+            }
+        }
+
         private void sendDownAndUpKeyEvents(int keyCode) {
             final long token = Binder.clearCallingIdentity();
 
@@ -2490,28 +2733,26 @@
             return accessibilityWindowId;
         }
 
-        private MagnificationSpec getCompatibleMagnificationSpec(int windowId) {
-            try {
-                IBinder windowToken = mGlobalWindowTokens.get(windowId);
-                if (windowToken == null) {
-                    windowToken = getCurrentUserStateLocked().mWindowTokens.get(windowId);
-                }                    
-                if (windowToken != null) {
-                    return mWindowManagerService.getCompatibleMagnificationSpecForWindow(
-                            windowToken);
-                }
-            } catch (RemoteException re) {
-                /* ignore */
+        private int resolveAccessibilityWindowIdForFindFocusLocked(int windowId, int focusType) {
+            if (windowId == AccessibilityNodeInfo.ACTIVE_WINDOW_ID) {
+                return mSecurityPolicy.mActiveWindowId;
             }
-            return null;
+            if (windowId == AccessibilityNodeInfo.ANY_WINDOW_ID) {
+                if (focusType == AccessibilityNodeInfo.FOCUS_INPUT) {
+                    return mSecurityPolicy.mFocusedWindowId;
+                } else if (focusType == AccessibilityNodeInfo.FOCUS_ACCESSIBILITY) {
+                    return mSecurityPolicy.mAccessibilityFocusedWindowId;
+                }
+            }
+            return windowId;
         }
 
         private final class InvocationHandler extends Handler {
-
             public static final int MSG_ON_GESTURE = 1;
             public static final int MSG_ON_KEY_EVENT = 2;
-            public static final int MSG_CLEAR_ACCESSIBILITY_NODE_INFO_CACHE = 3;
+            public static final int MSG_CLEAR_ACCESSIBILITY_CACHE = 3;
             public static final int MSG_ON_KEY_EVENT_TIMEOUT = 4;
+            public static final int MSG_ON_WINDOWS_CHANGED = 5;
 
             public InvocationHandler(Looper looper) {
                 super(looper, null, true);
@@ -2525,18 +2766,27 @@
                         final int gestureId = message.arg1;
                         notifyGestureInternal(gestureId);
                     } break;
+
                     case MSG_ON_KEY_EVENT: {
                         KeyEvent event = (KeyEvent) message.obj;
                         final int policyFlags = message.arg1;
                         notifyKeyEventInternal(event, policyFlags);
                     } break;
-                    case MSG_CLEAR_ACCESSIBILITY_NODE_INFO_CACHE: {
-                        notifyClearAccessibilityNodeInfoCacheInternal();
+
+                    case MSG_CLEAR_ACCESSIBILITY_CACHE: {
+                        notifyClearAccessibilityCacheInternal();
                     } break;
+
                     case MSG_ON_KEY_EVENT_TIMEOUT: {
                         PendingEvent eventState = (PendingEvent) message.obj;
                         setOnKeyEventResult(false, eventState.sequence);
                     } break;
+
+                    case MSG_ON_WINDOWS_CHANGED: {
+                        final int[] windowIds = (int[]) message.obj;
+                        notifyWindowsChangedInternal(windowIds);
+                    } break;
+
                     default: {
                         throw new IllegalArgumentException("Unknown message: " + type);
                     }
@@ -2680,7 +2930,192 @@
         }
     }
 
+    final class WindowsForAccessibilityCallback implements
+            WindowManagerInternal.WindowsForAccessibilityCallback {
+
+        @Override
+        public void onWindowsForAccessibilityChanged(List<WindowInfo> windows) {
+            synchronized (mLock) {
+                List<WindowInfo> receivedWindows = (List<WindowInfo>) windows;
+
+                // Populate the windows to report.
+                List<AccessibilityWindowInfo> reportedWindows =
+                        new ArrayList<AccessibilityWindowInfo>();
+                final int receivedWindowCount = receivedWindows.size();
+                for (int i = 0; i < receivedWindowCount; i++) {
+                    WindowInfo receivedWindow = receivedWindows.get(i);
+                    AccessibilityWindowInfo reportedWindow = populateReportedWindow(
+                            receivedWindow);
+                    if (reportedWindow != null) {
+                        reportedWindows.add(reportedWindow);
+                    }
+                }
+
+                if (DEBUG) {
+                    Slog.i(LOG_TAG, "Windows changed: " + reportedWindows);
+                }
+
+                // Let the policy update the focused and active windows.
+                mSecurityPolicy.updateWindowsLocked(reportedWindows);
+            }
+        }
+
+        private AccessibilityWindowInfo populateReportedWindow(WindowInfo window) {
+            final int windowId = findWindowIdLocked(window.token);
+            if (windowId < 0) {
+                return null;
+            }
+
+            AccessibilityWindowInfo reportedWindow = AccessibilityWindowInfo.obtain();
+
+            reportedWindow.setId(windowId);
+            reportedWindow.setType(getTypeForWindowManagerWindowType(window.type));
+            reportedWindow.setLayer(window.layer);
+            reportedWindow.setFocused(window.focused);
+            reportedWindow.setBoundsInScreen(window.boundsInScreen);
+
+            final int parentId = findWindowIdLocked(window.parentToken);
+            if (parentId >= 0) {
+                reportedWindow.setParentId(parentId);
+            }
+
+            if (window.childTokens != null) {
+                final int childCount = window.childTokens.size();
+                for (int i = 0; i < childCount; i++) {
+                    IBinder childToken = window.childTokens.get(i);
+                    final int childId = findWindowIdLocked(childToken);
+                    if (childId >= 0) {
+                        reportedWindow.addChild(childId);
+                    }
+                }
+            }
+
+            return reportedWindow;
+        }
+
+        private int getTypeForWindowManagerWindowType(int windowType) {
+            switch (windowType) {
+                case WindowManager.LayoutParams.TYPE_APPLICATION:
+                case WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA:
+                case WindowManager.LayoutParams.TYPE_APPLICATION_PANEL:
+                case WindowManager.LayoutParams.TYPE_APPLICATION_STARTING:
+                case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
+                case WindowManager.LayoutParams.TYPE_BASE_APPLICATION:
+                case WindowManager.LayoutParams.TYPE_PHONE:
+                case WindowManager.LayoutParams.TYPE_PRIORITY_PHONE:
+                case WindowManager.LayoutParams.TYPE_TOAST:
+                case WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG: {
+                    return AccessibilityWindowInfo.TYPE_APPLICATION;
+                }
+
+                case WindowManager.LayoutParams.TYPE_INPUT_METHOD:
+                case WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG: {
+                    return AccessibilityWindowInfo.TYPE_INPUT_METHOD;
+                }
+
+                case WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG:
+                case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR:
+                case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL:
+                case WindowManager.LayoutParams.TYPE_SEARCH_BAR:
+                case WindowManager.LayoutParams.TYPE_STATUS_BAR:
+                case WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL:
+                case WindowManager.LayoutParams.TYPE_STATUS_BAR_SUB_PANEL:
+                case WindowManager.LayoutParams.TYPE_RECENTS_OVERLAY:
+                case WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY:
+                case WindowManager.LayoutParams.TYPE_SYSTEM_ALERT:
+                case WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG:
+                case WindowManager.LayoutParams.TYPE_SYSTEM_ERROR:
+                case WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY: {
+                    return AccessibilityWindowInfo.TYPE_SYSTEM;
+                }
+
+                default: {
+                    return -1;
+                }
+            }
+        }
+    }
+
+    private final class InteractionBridge {
+        private final Display mDefaultDisplay;
+        private final int mConnectionId;
+        private final AccessibilityInteractionClient mClient;
+
+        public InteractionBridge() {
+            AccessibilityServiceInfo info = new AccessibilityServiceInfo();
+            info.setCapabilities(AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT);
+            info.flags |= AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS;
+            info.flags |= AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
+            Service service = new Service(UserHandle.USER_NULL,
+                    sFakeAccessibilityServiceComponentName, info);
+
+            mConnectionId = service.mId;
+
+            mClient = AccessibilityInteractionClient.getInstance();
+            mClient.addConnection(mConnectionId, service);
+
+            //TODO: (multi-display) We need to support multiple displays.
+            DisplayManager displayManager = (DisplayManager)
+                    mContext.getSystemService(Context.DISPLAY_SERVICE);
+            mDefaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
+        }
+
+        public void clearAccessibilityFocusNotLocked(int windowId) {
+            AccessibilityNodeInfo focus = getAccessibilityFocusNotLocked(windowId);
+            if (focus != null) {
+                focus.performAction(AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS);
+            }
+        }
+
+        public boolean getAccessibilityFocusBoundsNotLocked(Rect outBounds) {
+            AccessibilityNodeInfo focus = getAccessibilityFocusNotLocked();
+            if (focus == null) {
+                return false;
+            }
+
+            synchronized (mLock) {
+                focus.getBoundsInScreen(outBounds);
+
+                MagnificationSpec spec = getCompatibleMagnificationSpecLocked(focus.getWindowId());
+                if (spec != null && !spec.isNop()) {
+                    outBounds.offset((int) -spec.offsetX, (int) -spec.offsetY);
+                    outBounds.scale(1 / spec.scale);
+                }
+
+                // Clip to the window rectangle.
+                Rect windowBounds = mTempRect;
+                getActiveWindowBounds(windowBounds);
+                outBounds.intersect(windowBounds);
+
+                // Clip to the screen rectangle.
+                mDefaultDisplay.getRealSize(mTempPoint);
+                outBounds.intersect(0, 0, mTempPoint.x, mTempPoint.y);
+
+                return true;
+            }
+        }
+
+        private AccessibilityNodeInfo getAccessibilityFocusNotLocked() {
+            final int focusedWindowId;
+            synchronized (mLock) {
+                focusedWindowId = mSecurityPolicy.mAccessibilityFocusedWindowId;
+                if (focusedWindowId == SecurityPolicy.INVALID_WINDOW_ID) {
+                    return null;
+                }
+            }
+            return getAccessibilityFocusNotLocked(focusedWindowId);
+        }
+
+        private AccessibilityNodeInfo getAccessibilityFocusNotLocked(int windowId) {
+            return mClient.findFocus(mConnectionId,
+                    windowId, AccessibilityNodeInfo.ROOT_NODE_ID,
+                    AccessibilityNodeInfo.FOCUS_ACCESSIBILITY);
+        }
+    }
+
     final class SecurityPolicy {
+        public static final int INVALID_WINDOW_ID = -1;
+
         private static final int VALID_ACTIONS =
             AccessibilityNodeInfo.ACTION_CLICK
             | AccessibilityNodeInfo.ACTION_LONG_CLICK
@@ -2702,7 +3137,8 @@
             | AccessibilityNodeInfo.ACTION_SET_SELECTION
             | AccessibilityNodeInfo.ACTION_EXPAND
             | AccessibilityNodeInfo.ACTION_COLLAPSE
-            | AccessibilityNodeInfo.ACTION_DISMISS;
+            | AccessibilityNodeInfo.ACTION_DISMISS
+            | AccessibilityNodeInfo.ACTION_SET_TEXT;
 
         private static final int RETRIEVAL_ALLOWING_EVENT_TYPES =
             AccessibilityEvent.TYPE_VIEW_CLICKED
@@ -2717,17 +3153,40 @@
             | AccessibilityEvent.TYPE_VIEW_TEXT_SELECTION_CHANGED
             | AccessibilityEvent.TYPE_VIEW_SCROLLED
             | AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED
-            | AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED;
+            | AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED
+            | AccessibilityEvent.TYPE_VIEW_TEXT_TRAVERSED_AT_MOVEMENT_GRANULARITY;
 
-        private int mActiveWindowId;
+        public final List<AccessibilityWindowInfo> mWindows =
+                new ArrayList<AccessibilityWindowInfo>();
+
+        public int mActiveWindowId = INVALID_WINDOW_ID;
+        public int mFocusedWindowId = INVALID_WINDOW_ID;
+        public int mAccessibilityFocusedWindowId = INVALID_WINDOW_ID;
+        public long mAccessibilityFocusNodeId = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
+
+        public AccessibilityEvent mShowingFocusedWindowEvent;
+
         private boolean mTouchInteractionInProgress;
 
-        private boolean canDispatchAccessibilityEvent(AccessibilityEvent event) {
+        private boolean canDispatchAccessibilityEventLocked(AccessibilityEvent event) {
             final int eventType = event.getEventType();
             switch (eventType) {
                 // All events that are for changes in a global window
                 // state should *always* be dispatched.
                 case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
+                    if (mWindowsForAccessibilityCallback != null) {
+                        // OK, this is fun. Sometimes the focused window is notified
+                        // it has focus before being shown. Historically this event
+                        // means that the window is focused and can be introspected.
+                        // But we still have not gotten the window state from the
+                        // window manager, so delay the notification until then.
+                        AccessibilityWindowInfo window = findWindowById(event.getWindowId());
+                        if (window == null || !window.isFocused()) {
+                            mShowingFocusedWindowEvent = AccessibilityEvent.obtain(event);
+                            return false;
+                        }
+                    }
+                // $fall-through$
                 case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
                 // All events generated by the user touching the
                 // screen should *always* be dispatched.
@@ -2737,15 +3196,81 @@
                 case AccessibilityEvent.TYPE_GESTURE_DETECTION_END:
                 case AccessibilityEvent.TYPE_TOUCH_INTERACTION_START:
                 case AccessibilityEvent.TYPE_TOUCH_INTERACTION_END:
-                // These will change the active window, so dispatch.
                 case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER:
                 case AccessibilityEvent.TYPE_VIEW_HOVER_EXIT: {
                     return true;
                 }
                 // All events for changes in window content should be
-                // dispatched *only* if this window is the active one.
-                default:
-                    return event.getWindowId() == mActiveWindowId;
+                // dispatched *only* if this window is one of the windows
+                // the accessibility layer reports which are windows
+                // that a sighted user can touch.
+                default: {
+                    return isRetrievalAllowingWindow(event.getWindowId());
+                }
+            }
+        }
+
+        public void updateWindowsLocked(List<AccessibilityWindowInfo> windows) {
+            final int oldWindowCount = mWindows.size();
+            for (int i = oldWindowCount - 1; i >= 0; i--) {
+                mWindows.remove(i).recycle();
+            }
+
+            mFocusedWindowId = INVALID_WINDOW_ID;
+            if (!mTouchInteractionInProgress) {
+                mActiveWindowId = INVALID_WINDOW_ID;
+            }
+
+            // If the active window goes away while the user is touch exploring we
+            // reset the active window id and wait for the next hover event from
+            // under the user's finger to determine which one is the new one. It
+            // is possible that the finger is not moving and the input system
+            // filters out such events.
+            boolean activeWindowGone = true;
+
+            final int windowCount = windows.size();
+            if (windowCount > 0) {
+                for (int i = 0; i < windowCount; i++) {
+                    AccessibilityWindowInfo window = windows.get(i);
+                    final int windowId = window.getId();
+                    if (window.isFocused()) {
+                        mFocusedWindowId = windowId;
+                        if (!mTouchInteractionInProgress) {
+                            mActiveWindowId = windowId;
+                            window.setActive(true);
+                        } else if (windowId == mActiveWindowId) {
+                            activeWindowGone = false;
+                        }
+                    }
+                    mWindows.add(window);
+                }
+
+                if (mTouchInteractionInProgress && activeWindowGone) {
+                    mActiveWindowId = INVALID_WINDOW_ID;
+                }
+
+                // Focused window may change the active one, so set the
+                // active window once we decided which it is.
+                for (int i = 0; i < windowCount; i++) {
+                    AccessibilityWindowInfo window = mWindows.get(i);
+                    if (window.getId() == mActiveWindowId) {
+                       window.setActive(true);
+                    }
+                }
+            }
+
+            notifyWindowsChangedLocked(mWindows);
+
+            // If we are delaying a window state change event as the window
+            // source was showing when it was fired, now is the time to send.
+            if (mShowingFocusedWindowEvent != null) {
+                final int windowId = mShowingFocusedWindowEvent.getWindowId();
+                AccessibilityWindowInfo window = findWindowById(windowId);
+                if (window != null && window.isFocused()) {
+                    // Sending does the recycle.
+                    sendAccessibilityEvent(mShowingFocusedWindowEvent, mCurrentUserId);
+                }
+                mShowingFocusedWindowEvent = null;
             }
         }
 
@@ -2755,72 +3280,131 @@
             }
         }
 
-        public void updateActiveWindow(int windowId, int eventType) {
+        public void updateActiveAndAccessibilityFocusedWindowLocked(int windowId, long nodeId,
+                int eventType) {
             // The active window is either the window that has input focus or
             // the window that the user is currently touching. If the user is
             // touching a window that does not have input focus as soon as the
             // the user stops touching that window the focused window becomes
-            // the active one.
+            // the active one. Here we detect the touched window and make it
+            // active. In updateWindowsLocked() we update the focused window
+            // and if the user is not touching the screen, we make the focused
+            // window the active one.
             switch (eventType) {
                 case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED: {
-                    if (getFocusedWindowId() == windowId) {
-                        mActiveWindowId = windowId;
+                    // If no service has the capability to introspect screen,
+                    // we do not register callback in the window manager for
+                    // window changes, so we have to ask the window manager
+                    // what the focused window is to update the active one.
+                    // The active window also determined events from which
+                    // windows are delivered.
+                    synchronized (mLock) {
+                        mFocusedWindowId = getFocusedWindowId();
+                        if (mWindowsForAccessibilityCallback == null
+                                && windowId == mFocusedWindowId) {
+                            mActiveWindowId = windowId;
+                        }
                     }
                 } break;
+
                 case AccessibilityEvent.TYPE_VIEW_HOVER_ENTER: {
                     // Do not allow delayed hover events to confuse us
                     // which the active window is.
-                    if (mTouchInteractionInProgress) {
-                        mActiveWindowId = windowId;
+                    synchronized (mLock) {
+                        if (mTouchInteractionInProgress && mActiveWindowId != windowId) {
+                            setActiveWindowLocked(windowId);
+                        }
+                    }
+                } break;
+
+                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED: {
+                    synchronized (mLock) {
+                        if (mAccessibilityFocusedWindowId != windowId) {
+                            mMainHandler.obtainMessage(MainHandler.MSG_CLEAR_ACCESSIBILITY_FOCUS,
+                                    mAccessibilityFocusedWindowId, 0).sendToTarget();
+                            mAccessibilityFocusedWindowId = windowId;
+                            mAccessibilityFocusNodeId = nodeId;
+                        }
+                    }
+                } break;
+
+                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED: {
+                    synchronized (mLock) {
+                        if (mAccessibilityFocusNodeId == nodeId) {
+                            mAccessibilityFocusNodeId = AccessibilityNodeInfo.UNDEFINED_ITEM_ID;
+                        }
+                        if (mAccessibilityFocusNodeId == AccessibilityNodeInfo.UNDEFINED_ITEM_ID
+                                && mAccessibilityFocusedWindowId == windowId) {
+                            mAccessibilityFocusedWindowId = INVALID_WINDOW_ID;
+                        }
                     }
                 } break;
             }
         }
 
         public void onTouchInteractionStart() {
-            mTouchInteractionInProgress = true;
+            synchronized (mLock) {
+                mTouchInteractionInProgress = true;
+            }
         }
 
         public void onTouchInteractionEnd() {
-            mTouchInteractionInProgress = false;
-            // We want to set the active window to be current immediately
-            // after the user has stopped touching the screen since if the
-            // user types with the IME he should get a feedback for the
-            // letter typed in the text view which is in the input focused
-            // window. Note that we always deliver hover accessibility events
-            // (they are a result of user touching the screen) so change of
-            // the active window before all hover accessibility events from
-            // the touched window are delivered is fine.
-            mActiveWindowId = getFocusedWindowId();
+            synchronized (mLock) {
+                mTouchInteractionInProgress = false;
+                // We want to set the active window to be current immediately
+                // after the user has stopped touching the screen since if the
+                // user types with the IME he should get a feedback for the
+                // letter typed in the text view which is in the input focused
+                // window. Note that we always deliver hover accessibility events
+                // (they are a result of user touching the screen) so change of
+                // the active window before all hover accessibility events from
+                // the touched window are delivered is fine.
+                final int oldActiveWindow = mSecurityPolicy.mActiveWindowId;
+                setActiveWindowLocked(mFocusedWindowId);
+
+                // If there is no service that can operate with active windows
+                // we keep accessibility focus behavior to constrain it only in
+                // the active window. Look at updateAccessibilityFocusBehaviorLocked
+                // for details.
+                if (oldActiveWindow != mSecurityPolicy.mActiveWindowId
+                        && mAccessibilityFocusedWindowId == oldActiveWindow
+                        && getCurrentUserStateLocked().mAccessibilityFocusOnlyInActiveWindow) {
+                    mMainHandler.obtainMessage(MainHandler.MSG_CLEAR_ACCESSIBILITY_FOCUS,
+                            oldActiveWindow, 0).sendToTarget();
+                }
+            }
         }
 
-        public int getRetrievalAllowingWindowLocked() {
-            return mActiveWindowId;
+        private void setActiveWindowLocked(int windowId) {
+            if (mActiveWindowId != windowId) {
+                mActiveWindowId = windowId;
+                final int windowCount = mWindows.size();
+                for (int i = 0; i < windowCount; i++) {
+                    AccessibilityWindowInfo window = mWindows.get(i);
+                    window.setActive(window.getId() == windowId);
+                }
+                notifyWindowsChangedLocked(mWindows);
+            }
         }
 
         public boolean canGetAccessibilityNodeInfoLocked(Service service, int windowId) {
-            return canRetrieveWindowContent(service) && isRetrievalAllowingWindow(windowId);
+            return canRetrieveWindowContentLocked(service) && isRetrievalAllowingWindow(windowId);
         }
 
         public boolean canPerformActionLocked(Service service, int windowId, int action,
                 Bundle arguments) {
-            return canRetrieveWindowContent(service)
+            return canRetrieveWindowContentLocked(service)
                 && isRetrievalAllowingWindow(windowId)
                 && isActionPermitted(action);
         }
 
-        public boolean canRetrieveWindowContent(Service service) {
-            return (service.mAccessibilityServiceInfo.getCapabilities()
-                    & AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT) != 0;
+        public boolean canRetrieveWindowsLocked(Service service) {
+            return canRetrieveWindowContentLocked(service) && service.mRetrieveInteractiveWindows;
         }
 
-        public void enforceCanRetrieveWindowContent(Service service) throws RemoteException {
-            // This happens due to incorrect registration so make it apparent.
-            if (!canRetrieveWindowContent(service)) {
-                Slog.e(LOG_TAG, "Accessibility serivce " + service.mComponentName + " does not " +
-                        "declare android:canRetrieveWindowContent.");
-                throw new RemoteException();
-            }
+        public boolean canRetrieveWindowContentLocked(Service service) {
+            return (service.mAccessibilityServiceInfo.getCapabilities()
+                    & AccessibilityServiceInfo.CAPABILITY_CAN_RETRIEVE_WINDOW_CONTENT) != 0;
         }
 
         public int resolveCallingUserIdEnforcingPermissionsLocked(int userId) {
@@ -2857,7 +3441,21 @@
         }
 
         private boolean isRetrievalAllowingWindow(int windowId) {
-            return (mActiveWindowId == windowId);
+            if (windowId == mActiveWindowId) {
+                return true;
+            }
+            return findWindowById(windowId) != null;
+        }
+
+        private AccessibilityWindowInfo findWindowById(int windowId) {
+            final int windowCount = mWindows.size();
+            for (int i = 0; i < windowCount; i++) {
+                AccessibilityWindowInfo window = mWindows.get(i);
+                if (window.getId() == windowId) {
+                    return window;
+                }
+            }
+            return null;
         }
 
         private boolean isActionPermitted(int action) {
@@ -2880,35 +3478,10 @@
         }
 
         private int getFocusedWindowId() {
-            try {
-                // We call this only on window focus change or after touch
-                // exploration gesture end and the shown windows are not that
-                // many, so the linear look up is just fine.
-                IBinder token = mWindowManagerService.getFocusedWindowToken();
-                if (token != null) {
-                    synchronized (mLock) {
-                        int windowId = getFocusedWindowIdLocked(token, mGlobalWindowTokens);
-                        if (windowId < 0) {
-                            windowId = getFocusedWindowIdLocked(token,
-                                    getCurrentUserStateLocked().mWindowTokens);
-                        }
-                        return windowId;
-                    }
-                }
-            } catch (RemoteException re) {
-                /* ignore */
+            IBinder token = mWindowManagerService.getFocusedWindowToken();
+            synchronized (mLock) {
+                return findWindowIdLocked(token);
             }
-            return -1;
-        }
-
-        private int getFocusedWindowIdLocked(IBinder token, SparseArray<IBinder> windows) {
-            final int windowCount = windows.size();
-            for (int i = 0; i < windowCount; i++) {
-                if (windows.valueAt(i) == token) {
-                    return windows.keyAt(i);
-                }
-            }
-            return -1;
         }
     }
 
@@ -2952,6 +3525,8 @@
         public boolean mIsEnhancedWebAccessibilityEnabled;
         public boolean mIsDisplayMagnificationEnabled;
         public boolean mIsFilterKeyEventsEnabled;
+        public boolean mHasDisplayColorAdjustment;
+        public boolean mAccessibilityFocusOnlyInActiveWindow;
 
         private Service mUiAutomationService;
         private IAccessibilityServiceClient mUiAutomationServiceClient;
@@ -3043,6 +3618,23 @@
         private final Uri mEnhancedWebAccessibilityUri = Settings.Secure
                 .getUriFor(Settings.Secure.ACCESSIBILITY_SCRIPT_INJECTION);
 
+        private final Uri mDisplayContrastEnabledUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED);
+        private final Uri mDisplayContrastUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST);
+        private final Uri mDisplayBrightnessUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS);
+
+        private final Uri mDisplayInversionEnabledUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED);
+        private final Uri mDisplayInversionUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION);
+
+        private final Uri mDisplayDaltonizerEnabledUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED);
+        private final Uri mDisplayDaltonizerUri = Settings.Secure.getUriFor(
+                Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER);
+
         public AccessibilityContentObserver(Handler handler) {
             super(handler);
         }
@@ -3061,6 +3653,20 @@
                     false, this, UserHandle.USER_ALL);
             contentResolver.registerContentObserver(mEnhancedWebAccessibilityUri,
                     false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(
+                    mDisplayContrastEnabledUri, false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(
+                    mDisplayContrastUri, false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(
+                    mDisplayBrightnessUri, false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(
+                    mDisplayInversionEnabledUri, false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(
+                    mDisplayInversionUri, false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(
+                    mDisplayDaltonizerEnabledUri, false, this, UserHandle.USER_ALL);
+            contentResolver.registerContentObserver(
+                    mDisplayDaltonizerUri, false, this, UserHandle.USER_ALL);
         }
 
         @Override
@@ -3125,6 +3731,22 @@
                         }
                     }
                 }
+            } else if (mDisplayContrastEnabledUri.equals(uri)
+                    || mDisplayInversionEnabledUri.equals(uri)
+                    || mDisplayDaltonizerEnabledUri.equals(uri)
+                    || mDisplayContrastUri.equals(uri)
+                    || mDisplayBrightnessUri.equals(uri)
+                    || mDisplayInversionUri.equals(uri)
+                    || mDisplayDaltonizerUri.equals(uri)) {
+                synchronized (mLock) {
+                    // We will update when the automation service dies.
+                    UserState userState = getCurrentUserStateLocked();
+                    if (userState.mUiAutomationService == null) {
+                        if (readDisplayColorAdjustmentSettingsLocked(userState)) {
+                            updateDisplayColorAdjustmentSettingsLocked(userState);
+                        }
+                    }
+                }
             }
         }
     }
diff --git a/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
new file mode 100644
index 0000000..52bdeda
--- /dev/null
+++ b/services/accessibility/java/com/android/server/accessibility/DisplayAdjustmentUtils.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2013 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.android.server.accessibility;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.opengl.Matrix;
+import android.os.IBinder;
+import android.os.Parcel;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+import android.util.Slog;
+import android.view.accessibility.AccessibilityManager;
+
+/**
+ * Utility methods for performing accessibility display adjustments.
+ */
+class DisplayAdjustmentUtils {
+    private static final String LOG_TAG = DisplayAdjustmentUtils.class.getSimpleName();
+
+    /** Matrix and offset used for converting color to gray-scale. */
+    private static final float[] GRAYSCALE_MATRIX = new float[] {
+        .2126f, .2126f, .2126f, 0,
+        .7152f, .7152f, .7152f, 0,
+        .0722f, .0722f, .0722f, 0,
+             0,      0,      0, 1
+    };
+
+    /** Matrix and offset used for standard display inversion. */
+    private static final float[] INVERSION_MATRIX_STANDARD = new float[] {
+        -1,  0,  0, 0,
+         0, -1,  0, 0,
+         0,  0, -1, 0,
+         1,  1,  1, 1
+    };
+
+    /** Matrix and offset used for hue-only display inversion. */
+    private static final float[] INVERSION_MATRIX_HUE_ONLY = new float[] {
+          0, .5f, .5f, 0,
+        .5f,   0, .5f, 0,
+        .5f, .5f,   0, 0,
+          0,   0,   0, 1
+    };
+
+    /** Matrix and offset used for value-only display inversion. */
+    private static final float[] INVERSION_MATRIX_VALUE_ONLY = new float[] {
+           0, -.5f, -.5f, 0,
+        -.5f,    0, -.5f, 0,
+        -.5f, -.5f,    0, 0,
+           1,    1,    1, 1
+    };
+
+    /** Default contrast for display contrast enhancement. */
+    private static final float DEFAULT_DISPLAY_CONTRAST = 2;
+
+    /** Default brightness for display contrast enhancement. */
+    private static final float DEFAULT_DISPLAY_BRIGHTNESS = 0;
+
+    /** Default inversion mode for display color inversion. */
+    private static final int DEFAULT_DISPLAY_INVERSION = AccessibilityManager.INVERSION_STANDARD;
+
+    /** Default inversion mode for display color correction. */
+    private static final int DEFAULT_DISPLAY_DALTONIZER =
+            AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY;
+
+    /**
+     * Returns whether the specified user with has any display color
+     * adjustments.
+     */
+    public static boolean hasAdjustments(Context context, int userId) {
+        final ContentResolver cr = context.getContentResolver();
+
+        boolean hasColorTransform = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, userId) == 1;
+
+        if (!hasColorTransform) {
+            hasColorTransform |= Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED, 0, userId) == 1;
+        }
+
+        if (!hasColorTransform) {
+            hasColorTransform |= Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, userId) == 1;
+        }
+
+        return hasColorTransform;
+    }
+
+    /**
+     * Applies the specified user's display color adjustments.
+     */
+    public static void applyAdjustments(Context context, int userId) {
+        final ContentResolver cr = context.getContentResolver();
+        float[] colorMatrix = new float[16];
+        float[] outputMatrix = new float[16];
+        boolean hasColorTransform = false;
+
+        Matrix.setIdentityM(colorMatrix, 0);
+
+        final boolean inversionEnabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, userId) == 1;
+        if (inversionEnabled) {
+            final int inversionMode = Settings.Secure.getIntForUser(cr,
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_INVERSION, DEFAULT_DISPLAY_INVERSION,
+                    userId);
+            final float[] inversionMatrix;
+            switch (inversionMode) {
+                case AccessibilityManager.INVERSION_HUE_ONLY:
+                    inversionMatrix = INVERSION_MATRIX_HUE_ONLY;
+                    break;
+                case AccessibilityManager.INVERSION_VALUE_ONLY:
+                    inversionMatrix = INVERSION_MATRIX_VALUE_ONLY;
+                    break;
+                default:
+                    inversionMatrix = INVERSION_MATRIX_STANDARD;
+            }
+
+            Matrix.multiplyMM(outputMatrix, 0, colorMatrix, 0, inversionMatrix, 0);
+
+            colorMatrix = outputMatrix;
+            outputMatrix = colorMatrix;
+
+            hasColorTransform = true;
+        }
+
+        final boolean contrastEnabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST_ENABLED, 0, userId) == 1;
+        if (contrastEnabled) {
+            final float contrast = Settings.Secure.getFloatForUser(cr,
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_CONTRAST, DEFAULT_DISPLAY_CONTRAST,
+                    userId);
+            final float brightness = Settings.Secure.getFloatForUser(cr,
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_BRIGHTNESS, DEFAULT_DISPLAY_BRIGHTNESS,
+                    userId);
+            final float off = brightness * contrast - 0.5f * contrast + 0.5f;
+            final float[] contrastMatrix = {
+                    contrast, 0, 0, 0,
+                    0, contrast, 0, 0,
+                    0, 0, contrast, 0,
+                    off, off, off, 1
+            };
+
+            Matrix.multiplyMM(outputMatrix, 0, colorMatrix, 0, contrastMatrix, 0);
+
+            colorMatrix = outputMatrix;
+            outputMatrix = colorMatrix;
+
+            hasColorTransform = true;
+        }
+
+        final boolean daltonizerEnabled = Settings.Secure.getIntForUser(
+                cr, Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, userId) != 0;
+        if (daltonizerEnabled) {
+            final int daltonizerMode = Settings.Secure.getIntForUser(cr,
+                    Settings.Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, DEFAULT_DISPLAY_DALTONIZER,
+                    userId);
+            // Monochromacy isn't supported by the native Daltonizer.
+            if (daltonizerMode == AccessibilityManager.DALTONIZER_SIMULATE_MONOCHROMACY) {
+                Matrix.multiplyMM(outputMatrix, 0, colorMatrix, 0, GRAYSCALE_MATRIX, 0);
+
+                final float[] temp = colorMatrix;
+                colorMatrix = outputMatrix;
+                outputMatrix = temp;
+
+                hasColorTransform = true;
+                nativeSetDaltonizerMode(AccessibilityManager.DALTONIZER_DISABLED);
+            } else {
+                nativeSetDaltonizerMode(daltonizerMode);
+            }
+        } else {
+            nativeSetDaltonizerMode(AccessibilityManager.DALTONIZER_DISABLED);
+        }
+
+        if (hasColorTransform) {
+            nativeSetColorTransform(colorMatrix);
+        } else {
+            nativeSetColorTransform(null);
+        }
+    }
+
+    /**
+     * Sets the surface flinger's Daltonization mode. This adjusts the color
+     * space to correct for or simulate various types of color blindness.
+     *
+     * @param mode new Daltonization mode
+     */
+    private static void nativeSetDaltonizerMode(int mode) {
+        try {
+            final IBinder flinger = ServiceManager.getService("SurfaceFlinger");
+            if (flinger != null) {
+                final Parcel data = Parcel.obtain();
+                data.writeInterfaceToken("android.ui.ISurfaceComposer");
+                data.writeInt(mode);
+                flinger.transact(1014, data, null, 0);
+                data.recycle();
+            }
+        } catch (RemoteException ex) {
+            Slog.e(LOG_TAG, "Failed to set Daltonizer mode", ex);
+        }
+    }
+
+    /**
+     * Sets the surface flinger's color transformation as a 4x4 matrix. If the
+     * matrix is null, color transformations are disabled.
+     *
+     * @param m the float array that holds the transformation matrix, or null to
+     *            disable transformation
+     */
+    private static void nativeSetColorTransform(float[] m) {
+        try {
+            final IBinder flinger = ServiceManager.getService("SurfaceFlinger");
+            if (flinger != null) {
+                final Parcel data = Parcel.obtain();
+                data.writeInterfaceToken("android.ui.ISurfaceComposer");
+                if (m != null) {
+                    data.writeInt(1);
+                    for (int i = 0; i < 16; i++) {
+                        data.writeFloat(m[i]);
+                    }
+                } else {
+                    data.writeInt(0);
+                }
+                flinger.transact(1015, data, null, 0);
+                data.recycle();
+            }
+        } catch (RemoteException ex) {
+            Slog.e(LOG_TAG, "Failed to set color transform", ex);
+        }
+    }
+
+}
diff --git a/services/accessibility/java/com/android/server/accessibility/ScreenMagnifier.java b/services/accessibility/java/com/android/server/accessibility/ScreenMagnifier.java
index 5f12cf4..c8b080e 100644
--- a/services/accessibility/java/com/android/server/accessibility/ScreenMagnifier.java
+++ b/services/accessibility/java/com/android/server/accessibility/ScreenMagnifier.java
@@ -29,8 +29,6 @@
 import android.os.Binder;
 import android.os.Handler;
 import android.os.Message;
-import android.os.RemoteException;
-import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.provider.Settings;
 import android.text.TextUtils;
@@ -38,8 +36,6 @@
 import android.util.Slog;
 import android.view.GestureDetector;
 import android.view.GestureDetector.SimpleOnGestureListener;
-import android.view.IMagnificationCallbacks;
-import android.view.IWindowManager;
 import android.view.MagnificationSpec;
 import android.view.MotionEvent;
 import android.view.MotionEvent.PointerCoords;
@@ -48,10 +44,12 @@
 import android.view.ScaleGestureDetector.OnScaleGestureListener;
 import android.view.View;
 import android.view.ViewConfiguration;
+import android.view.WindowManagerInternal;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.DecelerateInterpolator;
 
 import com.android.internal.os.SomeArgs;
+import com.android.server.LocalServices;
 
 import java.util.Locale;
 
@@ -94,8 +92,8 @@
  *
  * 6. The magnification scale will be persisted in settings and in the cloud.
  */
-public final class ScreenMagnifier extends IMagnificationCallbacks.Stub
-        implements EventStreamTransformation {
+public final class ScreenMagnifier implements WindowManagerInternal.MagnificationCallbacks,
+        EventStreamTransformation {
 
     private static final String LOG_TAG = ScreenMagnifier.class.getSimpleName();
 
@@ -127,7 +125,7 @@
     private final Rect mTempRect1 = new Rect();
 
     private final Context mContext;
-    private final IWindowManager mWindowManager;
+    private final WindowManagerInternal mWindowManager;
     private final MagnificationController mMagnificationController;
     private final ScreenStateObserver mScreenStateObserver;
 
@@ -191,8 +189,7 @@
 
     public ScreenMagnifier(Context context, int displayId, AccessibilityManagerService service) {
         mContext = context;
-        mWindowManager = IWindowManager.Stub.asInterface(
-                ServiceManager.getService("window"));
+        mWindowManager = LocalServices.getService(WindowManagerInternal.class);
         mAms = service;
 
         mLongAnimationDuration = context.getResources().getInteger(
@@ -208,11 +205,7 @@
         mMagnificationController = new MagnificationController(mLongAnimationDuration);
         mScreenStateObserver = new ScreenStateObserver(context, mMagnificationController);
 
-        try {
-            mWindowManager.setMagnificationCallbacks(this);
-        } catch (RemoteException re) {
-            /* ignore */
-        }
+        mWindowManager.setMagnificationCallbacks(this);
 
         transitionToState(STATE_DETECTING);
     }
@@ -378,11 +371,7 @@
     @Override
     public void onDestroy() {
         mScreenStateObserver.destroy();
-        try {
-            mWindowManager.setMagnificationCallbacks(null);
-        } catch (RemoteException re) {
-            /* ignore */
-        }
+        mWindowManager.setMagnificationCallbacks(null);
     }
 
     private void handleMotionEventStateDelegating(MotionEvent event,
@@ -462,7 +451,7 @@
         }
         return mTempPointerProperties;
     }
-    
+
     private void transitionToState(int state) {
         if (DEBUG_STATE_TRANSITIONS) {
             switch (state) {
@@ -1120,15 +1109,10 @@
             if (DEBUG_SET_MAGNIFICATION_SPEC) {
                 Slog.i(LOG_TAG, "Sending: " + spec);
             }
-            try {
-                mSentMagnificationSpec.scale = spec.scale;
-                mSentMagnificationSpec.offsetX = spec.offsetX;
-                mSentMagnificationSpec.offsetY = spec.offsetY;
-                mWindowManager.setMagnificationSpec(
-                        MagnificationSpec.obtain(spec));
-            } catch (RemoteException re) {
-                /* ignore */
-            }
+            mSentMagnificationSpec.scale = spec.scale;
+            mSentMagnificationSpec.offsetX = spec.offsetX;
+            mSentMagnificationSpec.offsetY = spec.offsetY;
+            mWindowManager.setMagnificationSpec(MagnificationSpec.obtain(spec));
         }
     }
 
diff --git a/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java b/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
index 43f12eb..ac0ca0a 100644
--- a/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
+++ b/services/accessibility/java/com/android/server/accessibility/TouchExplorer.java
@@ -1159,7 +1159,7 @@
                 // No last touch explored event but there is accessibility focus in
                 // the active window. We click in the middle of the focus bounds.
                 Rect focusBounds = mTempRect;
-                if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) {
+                if (mAms.getAccessibilityFocusBounds(focusBounds)) {
                     clickLocationX = focusBounds.centerX();
                     clickLocationY = focusBounds.centerY();
                 } else {
@@ -1177,7 +1177,7 @@
                     mAms.getActiveWindowBounds(activeWindowBounds);
                     if (activeWindowBounds.contains(clickLocationX, clickLocationY)) {
                         Rect focusBounds = mTempRect;
-                        if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) {
+                        if (mAms.getAccessibilityFocusBounds(focusBounds)) {
                             if (!focusBounds.contains(clickLocationX, clickLocationY)) {
                                 clickLocationX = focusBounds.centerX();
                                 clickLocationY = focusBounds.centerY();
@@ -1332,7 +1332,7 @@
                 // No last touch explored event but there is accessibility focus in
                 // the active window. We click in the middle of the focus bounds.
                 Rect focusBounds = mTempRect;
-                if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) {
+                if (mAms.getAccessibilityFocusBounds(focusBounds)) {
                     clickLocationX = focusBounds.centerX();
                     clickLocationY = focusBounds.centerY();
                 } else {
@@ -1350,7 +1350,7 @@
                     mAms.getActiveWindowBounds(activeWindowBounds);
                     if (activeWindowBounds.contains(clickLocationX, clickLocationY)) {
                         Rect focusBounds = mTempRect;
-                        if (mAms.getAccessibilityFocusBoundsInActiveWindow(focusBounds)) {
+                        if (mAms.getAccessibilityFocusBounds(focusBounds)) {
                             if (!focusBounds.contains(clickLocationX, clickLocationY)) {
                                 clickLocationX = focusBounds.centerX();
                                 clickLocationY = focusBounds.centerY();
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
index e208677..77d5076 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetService.java
@@ -23,7 +23,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.pm.PackageManager;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Handler;
@@ -38,18 +37,19 @@
 import com.android.internal.appwidget.IAppWidgetService;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.IndentingPrintWriter;
+import com.android.server.AppWidgetBackupBridge;
+import com.android.server.WidgetBackupProvider;
 import com.android.server.SystemService;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
 import java.util.List;
-import java.util.Locale;
 
 
 /**
  * SystemService that publishes an IAppWidgetService.
  */
-public class AppWidgetService extends SystemService {
+public class AppWidgetService extends SystemService implements WidgetBackupProvider {
 
     static final String TAG = "AppWidgetService";
 
@@ -72,6 +72,7 @@
     @Override
     public void onStart() {
         publishBinderService(Context.APPWIDGET_SERVICE, mServiceImpl);
+        AppWidgetBackupBridge.register(this);
     }
 
     @Override
@@ -81,13 +82,40 @@
         }
     }
 
+
+    // backup <-> app widget service bridge surface
+    @Override
+    public List<String> getWidgetParticipants(int userId) {
+        return mServiceImpl.getWidgetParticipants(userId);
+    }
+
+    @Override
+    public byte[] getWidgetState(String packageName, int userId) {
+        return mServiceImpl.getWidgetState(packageName, userId);
+    }
+
+    @Override
+    public void restoreStarting(int userId) {
+        mServiceImpl.restoreStarting(userId);
+    }
+
+    @Override
+    public void restoreWidgetState(String packageName, byte[] restoredState, int userId) {
+        mServiceImpl.restoreWidgetState(packageName, restoredState, userId);
+    }
+
+    @Override
+    public void restoreFinished(int userId) {
+        mServiceImpl.restoreFinished(userId);
+    }
+
+
+    // implementation entry point and binder service
     private final AppWidgetServiceStub mServiceImpl = new AppWidgetServiceStub();
 
-    private class AppWidgetServiceStub extends IAppWidgetService.Stub {
+    class AppWidgetServiceStub extends IAppWidgetService.Stub {
 
         private boolean mSafeMode;
-        private Locale mLocale;
-        private PackageManager mPackageManager;
 
         public void systemRunning(boolean safeMode) {
             mSafeMode = safeMode;
@@ -227,6 +255,29 @@
             }
         }
 
+
+        // support of the widget/backup bridge
+        public List<String> getWidgetParticipants(int userId) {
+            return getImplForUser(userId).getWidgetParticipants();
+        }
+
+        public byte[] getWidgetState(String packageName, int userId) {
+            return getImplForUser(userId).getWidgetState(packageName);
+        }
+
+        public void restoreStarting(int userId) {
+            getImplForUser(userId).restoreStarting();
+        }
+
+        public void restoreWidgetState(String packageName, byte[] restoredState, int userId) {
+            getImplForUser(userId).restoreWidgetState(packageName, restoredState);
+        }
+
+        public void restoreFinished(int userId) {
+            getImplForUser(userId).restoreFinished();
+        }
+
+
         private void checkPermission(int userId) {
             int realUserId = ActivityManager.handleIncomingUser(
                     Binder.getCallingPid(),
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 98dead3..87b1d32 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -31,6 +31,7 @@
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
 import android.content.res.Resources;
@@ -42,18 +43,17 @@
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
-import android.os.HandlerThread;
 import android.os.IBinder;
-import android.os.Looper;
 import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.UserHandle;
 import android.util.AtomicFile;
 import android.util.AttributeSet;
-import android.util.Log;
+import android.util.MutableInt;
 import android.util.Pair;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.util.TypedValue;
 import android.util.Xml;
 import android.view.Display;
@@ -69,6 +69,8 @@
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
@@ -82,6 +84,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map.Entry;
 import java.util.Set;
 
 class AppWidgetServiceImpl {
@@ -92,8 +95,10 @@
     private static final String SETTINGS_FILENAME = "appwidgets.xml";
     private static final int MIN_UPDATE_PERIOD = 30 * 60 * 1000; // 30 minutes
     private static final int CURRENT_VERSION = 1; // Bump if the stored widgets need to be upgraded.
+    private static final int WIDGET_STATE_VERSION = 1;  // version of backed-up widget state
 
-    private static boolean DBG = false;
+    private static boolean DBG = true;
+    private static boolean DEBUG_BACKUP = DBG || true;
 
     /*
      * When identifying a Host or Provider based on the calling process, use the uid field. When
@@ -108,6 +113,25 @@
         boolean zombie; // if we're in safe mode, don't prune this just because nobody references it
 
         int tag; // for use while saving state (the index)
+
+        // is there an instance of this provider hosted by the given app?
+        public boolean isHostedBy(String packageName) {
+            final int N = instances.size();
+            for (int i = 0; i < N; i++) {
+                AppWidgetId id = instances.get(i);
+                if (packageName.equals(id.host.packageName)) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @Override
+        public String toString() {
+            return "Provider{" + ((info == null) ? "null" : info.provider)
+                    + (zombie ? " Z" : "")
+                    + '}';
+        }
     }
 
     static class Host {
@@ -128,14 +152,62 @@
                 return this.uid == callingUid;
             }
         }
+
+        boolean hostsPackage(String pkg) {
+            final int N = instances.size();
+            for (int i = 0; i < N; i++) {
+                Provider p = instances.get(i).provider;
+                if (p != null && p.info != null && pkg.equals(p.info.provider.getPackageName())) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        @Override
+        public String toString() {
+            return "Host{" + packageName + ":" + hostId + '}';
+        }
     }
 
     static class AppWidgetId {
         int appWidgetId;
+        int restoredId;  // tracking & remapping any restored state
         Provider provider;
         RemoteViews views;
         Bundle options;
         Host host;
+
+        @Override
+        public String toString() {
+            return "AppWidgetId{" + appWidgetId + ':' + host + ':' + provider + '}';
+        }
+    }
+
+    AppWidgetId findRestoredWidgetLocked(int restoredId, Host host, Provider p) {
+        if (DEBUG_BACKUP) {
+            Slog.i(TAG, "Find restored widget: id=" + restoredId
+                    + " host=" + host + " provider=" + p);
+        }
+
+        if (p == null || host == null) {
+            return null;
+        }
+
+        final int N = mAppWidgetIds.size();
+        for (int i = 0; i < N; i++) {
+            AppWidgetId widget = mAppWidgetIds.get(i);
+            if (widget.restoredId == restoredId
+                    && widget.host.hostId == host.hostId
+                    && widget.host.packageName.equals(host.packageName)
+                    && widget.provider.info.provider.equals(p.info.provider)) {
+                if (DEBUG_BACKUP) {
+                    Slog.i(TAG, "   Found at " + i + " : " + widget);
+                }
+                return widget;
+            }
+        }
+        return null;
     }
 
     /**
@@ -197,6 +269,22 @@
     boolean mStateLoaded;
     int mMaxWidgetBitmapMemory;
 
+    // Map old (restored) widget IDs to new AppWidgetId instances.  This object is used
+    // as the lock around manipulation of the overall restored-widget state, just as
+    // mAppWidgetIds is used as the lock object around all "live" widget state
+    // manipulations.  Methods that must be called with this lock held are decorated
+    // with the suffix "Lr".
+    //
+    // In cases when both of those locks must be held concurrently, mRestoredWidgetIds
+    // must be acquired *first.*
+    private final SparseArray<AppWidgetId> mRestoredWidgetIds = new SparseArray<AppWidgetId>();
+
+    // We need to make sure to wipe the pre-restore widget state only once for
+    // a given package.  Keep track of what we've done so far here; the list is
+    // cleared at the start of every system restore pass, but preserved through
+    // any install-time restore operations.
+    HashSet<String> mPrunedApps = new HashSet<String>();
+
     private final Handler mSaveStateHandler;
 
     // These are for debugging only -- widgets are going missing in some rare instances
@@ -303,10 +391,19 @@
                         providersModified |= updateProvidersForPackageLocked(pkgName, null);
                     }
                 } else {
-                    // The package was just added
+                    // The package was just added.  Fix up the providers...
                     for (String pkgName : pkgList) {
                         providersModified |= addProvidersForPackageLocked(pkgName);
                     }
+                    // ...and see if these are hosts we've been awaiting
+                    for (String pkg : pkgList) {
+                        try {
+                            int uid = getUidForPackage(pkg);
+                            resolveHostUidLocked(pkg, uid);
+                        } catch (NameNotFoundException e) {
+                            // shouldn't happen; we just installed it!
+                        }
+                    }
                 }
                 saveStateAsync();
             }
@@ -334,6 +431,19 @@
         }
     }
 
+    void resolveHostUidLocked(String pkg, int uid) {
+        final int N = mHosts.size();
+        for (int i = 0; i < N; i++) {
+            Host h = mHosts.get(i);
+            if (h.uid == -1 && pkg.equals(h.packageName)) {
+                if (DEBUG_BACKUP) {
+                    Slog.i(TAG, "host " + pkg + ":" + h.hostId + " resolved to uid " + uid);
+                }
+                h.uid = uid;
+            }
+        }
+    }
+
     private void dumpProvider(Provider p, int index, PrintWriter pw) {
         AppWidgetProviderInfo info = p.info;
         pw.print("  ["); pw.print(index); pw.print("] provider ");
@@ -436,7 +546,7 @@
             if (!mHasFeature) {
                 return;
             }
-            loadAppWidgetListLocked();
+            loadWidgetProviderListLocked();
             loadStateLocked();
             mStateLoaded = true;
         }
@@ -519,6 +629,7 @@
     }
 
     void deleteHostLocked(Host host) {
+        if (DBG) log("Deleting host " + host);
         final int N = host.instances.size();
         for (int i = N - 1; i >= 0; i--) {
             AppWidgetId id = host.instances.get(i);
@@ -722,7 +833,7 @@
             }
             final ComponentName componentName = intent.getComponent();
             try {
-                final ServiceInfo si = AppGlobals.getPackageManager().getServiceInfo(componentName,
+                final ServiceInfo si = mPm.getServiceInfo(componentName,
                         PackageManager.GET_PERMISSIONS, mUserId);
                 if (!android.Manifest.permission.BIND_REMOTEVIEWS.equals(si.permission)) {
                     throw new SecurityException("Selected service does not require "
@@ -984,7 +1095,6 @@
             if (!mHasFeature) {
                 return;
             }
-            options = cloneIfLocalBinder(options);
             ensureStateLoadedLocked();
             AppWidgetId id = lookupAppWidgetIdLocked(appWidgetId);
 
@@ -994,7 +1104,7 @@
 
             Provider p = id.provider;
             // Merge the options
-            id.options.putAll(options);
+            id.options.putAll(cloneIfLocalBinder(options));
 
             // send the broacast saying that this appWidgetId has been deleted
             Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_OPTIONS_CHANGED);
@@ -1281,9 +1391,13 @@
     }
 
     Provider lookupProviderLocked(ComponentName provider) {
-        final int N = mInstalledProviders.size();
+        return lookupProviderLocked(provider, mInstalledProviders);
+    }
+
+    Provider lookupProviderLocked(ComponentName provider, ArrayList<Provider> installedProviders) {
+        final int N = installedProviders.size();
         for (int i = 0; i < N; i++) {
-            Provider p = mInstalledProviders.get(i);
+            Provider p = installedProviders.get(i);
             if (p.info.provider.equals(provider)) {
                 return p;
             }
@@ -1320,11 +1434,12 @@
 
     void pruneHostLocked(Host host) {
         if (host.instances.size() == 0 && host.callbacks == null) {
+            if (DBG) log("Pruning host " + host);
             mHosts.remove(host);
         }
     }
 
-    void loadAppWidgetListLocked() {
+    void loadWidgetProviderListLocked() {
         Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
         try {
             List<ResolveInfo> broadcastReceivers = mPm.queryIntentReceivers(intent,
@@ -1351,7 +1466,23 @@
         Provider p = parseProviderInfoXml(new ComponentName(ri.activityInfo.packageName,
                 ri.activityInfo.name), ri);
         if (p != null) {
-            mInstalledProviders.add(p);
+            // we might have an inactive entry for this provider already due to
+            // a preceding restore operation.  if so, fix it up in place; otherwise
+            // just add this new one.
+            Provider existing = lookupProviderLocked(p.info.provider);
+            if (existing != null) {
+                if (existing.zombie && !mSafeMode) {
+                    // it's a placeholder that was set up during an app restore
+                    existing.zombie = false;
+                    existing.info = p.info; // the real one filled out from the ResolveInfo
+                    existing.uid = p.uid;
+                    if (DEBUG_BACKUP) {
+                        Slog.i(TAG, "Provider placeholder now reified: " + existing);
+                    }
+                }
+            } else {
+                mInstalledProviders.add(p);
+            }
             return true;
         } else {
             return false;
@@ -1466,6 +1597,555 @@
         }
     }
 
+    public List<String> getWidgetParticipants() {
+        HashSet<String> packages = new HashSet<String>();
+        synchronized (mAppWidgetIds) {
+            final int N = mAppWidgetIds.size();
+            for (int i = 0; i < N; i++) {
+                final AppWidgetId id = mAppWidgetIds.get(i);
+                packages.add(id.host.packageName);
+                packages.add(id.provider.info.provider.getPackageName());
+            }
+        }
+        return new ArrayList<String>(packages);
+    }
+
+    private void serializeProvider(XmlSerializer out, Provider p) throws IOException {
+        out.startTag(null, "p");
+        out.attribute(null, "pkg", p.info.provider.getPackageName());
+        out.attribute(null, "cl", p.info.provider.getClassName());
+        out.endTag(null, "p");
+    }
+
+    private void serializeHost(XmlSerializer out, Host host) throws IOException {
+        out.startTag(null, "h");
+        out.attribute(null, "pkg", host.packageName);
+        out.attribute(null, "id", Integer.toHexString(host.hostId));
+        out.endTag(null, "h");
+    }
+
+    private void serializeAppWidgetId(XmlSerializer out, AppWidgetId id) throws IOException {
+        out.startTag(null, "g");
+        out.attribute(null, "id", Integer.toHexString(id.appWidgetId));
+        out.attribute(null, "rid", Integer.toHexString(id.restoredId));
+        out.attribute(null, "h", Integer.toHexString(id.host.tag));
+        if (id.provider != null) {
+            out.attribute(null, "p", Integer.toHexString(id.provider.tag));
+        }
+        if (id.options != null) {
+            out.attribute(null, "min_width", Integer.toHexString(id.options.getInt(
+                    AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)));
+            out.attribute(null, "min_height", Integer.toHexString(id.options.getInt(
+                    AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)));
+            out.attribute(null, "max_width", Integer.toHexString(id.options.getInt(
+                    AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)));
+            out.attribute(null, "max_height", Integer.toHexString(id.options.getInt(
+                    AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)));
+            out.attribute(null, "host_category", Integer.toHexString(id.options.getInt(
+                    AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY)));
+        }
+        out.endTag(null, "g");
+    }
+
+    private Bundle parseWidgetIdOptions(XmlPullParser parser) {
+        Bundle options = new Bundle();
+        String minWidthString = parser.getAttributeValue(null, "min_width");
+        if (minWidthString != null) {
+            options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH,
+                    Integer.parseInt(minWidthString, 16));
+        }
+        String minHeightString = parser.getAttributeValue(null, "min_height");
+        if (minHeightString != null) {
+            options.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT,
+                    Integer.parseInt(minHeightString, 16));
+        }
+        String maxWidthString = parser.getAttributeValue(null, "max_width");
+        if (maxWidthString != null) {
+            options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH,
+                    Integer.parseInt(maxWidthString, 16));
+        }
+        String maxHeightString = parser.getAttributeValue(null, "max_height");
+        if (maxHeightString != null) {
+            options.putInt(AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT,
+                    Integer.parseInt(maxHeightString, 16));
+        }
+        String categoryString = parser.getAttributeValue(null, "host_category");
+        if (categoryString != null) {
+            options.putInt(AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY,
+                    Integer.parseInt(categoryString, 16));
+        }
+        return options;
+    }
+
+    // Does this package either host or provide any active widgets?
+    private boolean packageNeedsWidgetBackupLocked(String packageName) {
+        int N = mAppWidgetIds.size();
+        for (int i = 0; i < N; i++) {
+            AppWidgetId id = mAppWidgetIds.get(i);
+            if (packageName.equals(id.host.packageName)) {
+                // this package is hosting widgets, so it knows widget IDs
+                return true;
+            }
+            Provider p = id.provider;
+            if (p != null && packageName.equals(p.info.provider.getPackageName())) {
+                // someone is hosting this app's widgets, so it knows widget IDs
+                return true;
+            }
+        }
+        return false;
+    }
+
+    // build the widget-state blob that we save for the app during backup.
+    public byte[] getWidgetState(String backupTarget) {
+        if (!mHasFeature) {
+            return null;
+        }
+
+        ByteArrayOutputStream stream = new ByteArrayOutputStream();
+        synchronized (mAppWidgetIds) {
+            // Preflight: if this app neither hosts nor provides any live widgets
+            // we have no work to do.
+            if (!packageNeedsWidgetBackupLocked(backupTarget)) {
+                return null;
+            }
+
+            try {
+                XmlSerializer out = new FastXmlSerializer();
+                out.setOutput(stream, "utf-8");
+                out.startDocument(null, true);
+                out.startTag(null, "ws");      // widget state
+                out.attribute(null, "version", String.valueOf(WIDGET_STATE_VERSION));
+                out.attribute(null, "pkg", backupTarget);
+
+                // Remember all the providers that are currently hosted or published
+                // by this package: that is, all of the entities related to this app
+                // which will need to be told about id remapping.
+                int N = mInstalledProviders.size();
+                int index = 0;
+                for (int i = 0; i < N; i++) {
+                    Provider p = mInstalledProviders.get(i);
+                    if (p.instances.size() > 0) {
+                        if (backupTarget.equals(p.info.provider.getPackageName())
+                                || p.isHostedBy(backupTarget)) {
+                            serializeProvider(out, p);
+                            p.tag = index++;
+                        }
+                    }
+                }
+
+                N = mHosts.size();
+                index = 0;
+                for (int i = 0; i < N; i++) {
+                    Host host = mHosts.get(i);
+                    if (backupTarget.equals(host.packageName)
+                            || host.hostsPackage(backupTarget)) {
+                        serializeHost(out, host);
+                        host.tag = index++;
+                    }
+                }
+
+                // All widget instances involving this package,
+                // either as host or as provider
+                N = mAppWidgetIds.size();
+                for (int i = 0; i < N; i++) {
+                    AppWidgetId id = mAppWidgetIds.get(i);
+                    if (backupTarget.equals(id.host.packageName)
+                            || (id.provider != null && backupTarget.equals(
+                                    id.provider.info.provider.getPackageName()))) {
+                        serializeAppWidgetId(out, id);
+                    }
+                }
+
+                out.endTag(null, "ws");
+                out.endDocument();
+            } catch (IOException e) {
+                Slog.w(TAG, "Unable to save widget state for " + backupTarget);
+                return null;
+            }
+
+        }
+        return stream.toByteArray();
+    }
+
+    public void restoreStarting() {
+        if (DEBUG_BACKUP) {
+            Slog.i(TAG, "restore starting for user " + mUserId);
+        }
+        synchronized (mRestoredWidgetIds) {
+            // We're starting a new "system" restore operation, so any widget restore
+            // state that we see from here on is intended to replace the current
+            // widget configuration of any/all of the affected apps.
+            mPrunedApps.clear();
+            mUpdatesByProvider.clear();
+            mUpdatesByHost.clear();
+        }
+    }
+
+    // We're restoring widget state for 'pkg', so we start by wiping (a) all widget
+    // instances that are hosted by that app, and (b) all instances in other hosts
+    // for which 'pkg' is the provider.  We assume that we'll be restoring all of
+    // these hosts & providers, so will be reconstructing a correct live state.
+    private void pruneWidgetStateLr(String pkg) {
+        if (!mPrunedApps.contains(pkg)) {
+            if (DEBUG_BACKUP) {
+                Slog.i(TAG, "pruning widget state for restoring package " + pkg);
+            }
+            for (int i = mAppWidgetIds.size() - 1; i >= 0; i--) {
+                AppWidgetId id = mAppWidgetIds.get(i);
+                Provider p = id.provider;
+                if (id.host.packageName.equals(pkg)
+                        || p.info.provider.getPackageName().equals(pkg)) {
+                    // 'pkg' is either the host or the provider for this instances,
+                    // so we tear it down in anticipation of it (possibly) being
+                    // reconstructed due to the restore
+                    p.instances.remove(id);
+
+                    unbindAppWidgetRemoteViewsServicesLocked(id);
+                    mAppWidgetIds.remove(i);
+                }
+            }
+            mPrunedApps.add(pkg);
+        } else {
+            if (DEBUG_BACKUP) {
+                Slog.i(TAG, "already pruned " + pkg + ", continuing normally");
+            }
+        }
+    }
+
+    // Accumulate a list of updates that affect the given provider for a final
+    // coalesced notification broadcast once restore is over.
+    class RestoreUpdateRecord {
+        public int oldId;
+        public int newId;
+        public boolean notified;
+
+        public RestoreUpdateRecord(int theOldId, int theNewId) {
+            oldId = theOldId;
+            newId = theNewId;
+            notified = false;
+        }
+    }
+
+    HashMap<Provider, ArrayList<RestoreUpdateRecord>> mUpdatesByProvider
+            = new HashMap<Provider, ArrayList<RestoreUpdateRecord>>();
+    HashMap<Host, ArrayList<RestoreUpdateRecord>> mUpdatesByHost
+            = new HashMap<Host, ArrayList<RestoreUpdateRecord>>();
+
+    private boolean alreadyStashed(ArrayList<RestoreUpdateRecord> stash,
+            final int oldId, final int newId) {
+        final int N = stash.size();
+        for (int i = 0; i < N; i++) {
+            RestoreUpdateRecord r = stash.get(i);
+            if (r.oldId == oldId && r.newId == newId) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void stashProviderRestoreUpdateLr(Provider provider, int oldId, int newId) {
+        ArrayList<RestoreUpdateRecord> r = mUpdatesByProvider.get(provider);
+        if (r == null) {
+            r = new ArrayList<RestoreUpdateRecord>();
+            mUpdatesByProvider.put(provider, r);
+        } else {
+            // don't duplicate
+            if (alreadyStashed(r, oldId, newId)) {
+                if (DEBUG_BACKUP) {
+                    Slog.i(TAG, "ID remap " + oldId + " -> " + newId
+                            + " already stashed for " + provider);
+                }
+                return;
+            }
+        }
+        r.add(new RestoreUpdateRecord(oldId, newId));
+    }
+
+    private void stashHostRestoreUpdateLr(Host host, int oldId, int newId) {
+        ArrayList<RestoreUpdateRecord> r = mUpdatesByHost.get(host);
+        if (r == null) {
+            r = new ArrayList<RestoreUpdateRecord>();
+            mUpdatesByHost.put(host, r);
+        } else {
+            if (alreadyStashed(r, oldId, newId)) {
+                if (DEBUG_BACKUP) {
+                    Slog.i(TAG, "ID remap " + oldId + " -> " + newId
+                            + " already stashed for " + host);
+                }
+                return;
+            }
+        }
+        r.add(new RestoreUpdateRecord(oldId, newId));
+    }
+
+    public void restoreWidgetState(String packageName, byte[] restoredState) {
+        if (!mHasFeature) {
+            return;
+        }
+
+        if (DEBUG_BACKUP) {
+            Slog.i(TAG, "Restoring widget state for " + packageName);
+        }
+
+        ByteArrayInputStream stream = new ByteArrayInputStream(restoredState);
+        try {
+            // Providers mentioned in the widget dataset by ordinal
+            ArrayList<Provider> restoredProviders = new ArrayList<Provider>();
+
+            // Hosts mentioned in the widget dataset by ordinal
+            ArrayList<Host> restoredHosts = new ArrayList<Host>();
+
+            //HashSet<String> toNotify = new HashSet<String>();
+
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setInput(stream, null);
+
+            synchronized (mAppWidgetIds) {
+                synchronized (mRestoredWidgetIds) {
+                    int type;
+                    do {
+                        type = parser.next();
+                        if (type == XmlPullParser.START_TAG) {
+                            final String tag = parser.getName();
+                            if ("ws".equals(tag)) {
+                                String v = parser.getAttributeValue(null, "version");
+                                String pkg = parser.getAttributeValue(null, "pkg");
+
+                                // TODO: fix up w.r.t. canonical vs current package names
+                                if (!packageName.equals(pkg)) {
+                                    Slog.w(TAG, "Package mismatch in ws");
+                                    return;
+                                }
+
+                                int version = Integer.parseInt(v);
+                                if (version > WIDGET_STATE_VERSION) {
+                                    Slog.w(TAG, "Unable to process state version " + version);
+                                    return;
+                                }
+                            } else if ("p".equals(tag)) {
+                                String pkg = parser.getAttributeValue(null, "pkg");
+                                String cl = parser.getAttributeValue(null, "cl");
+
+                                // hostedProviders index will match 'p' attribute in widget's
+                                // entry in the xml file being restored
+                                // If there's no live entry for this provider, add an inactive one
+                                // so that widget IDs referring to them can be properly allocated
+                                final ComponentName cn = new ComponentName(pkg, cl);
+                                Provider p = lookupProviderLocked(cn, mInstalledProviders);
+                                if (p == null) {
+                                    p = new Provider();
+                                    p.info = new AppWidgetProviderInfo();
+                                    p.info.provider = cn;
+                                    p.zombie = true;
+                                    mInstalledProviders.add(p);
+                                }
+                                if (DEBUG_BACKUP) {
+                                    Slog.i(TAG, "   provider " + cn);
+                                }
+                                restoredProviders.add(p);
+                            } else if ("h".equals(tag)) {
+                                // The host app may not yet exist on the device.  If it's here we
+                                // just use the existing Host entry, otherwise we create a
+                                // placeholder whose uid will be fixed up at PACKAGE_ADDED time.
+                                String pkg = parser.getAttributeValue(null, "pkg");
+                                int uid;
+                                try {
+                                    uid = getUidForPackage(pkg);
+                                } catch (NameNotFoundException e) {
+                                    uid = -1;
+                                }
+                                int hostId = Integer.parseInt(
+                                        parser.getAttributeValue(null, "id"), 16);
+                                Host h = lookupOrAddHostLocked(uid, pkg, hostId);
+                                if (DEBUG_BACKUP) {
+                                    Slog.i(TAG, "   host[" + restoredHosts.size()
+                                            + "]: {" + h.packageName + ":" + h.hostId + "}");
+                                }
+                                restoredHosts.add(h);
+                            } else if ("g".equals(tag)) {
+                                int restoredId = Integer.parseInt(
+                                        parser.getAttributeValue(null, "id"), 16);
+                                int hostIndex = Integer.parseInt(
+                                        parser.getAttributeValue(null, "h"), 16);
+                                Host host = restoredHosts.get(hostIndex);
+                                Provider p = null;
+                                String prov = parser.getAttributeValue(null, "p");
+                                if (prov != null) {
+                                    // could have been null if the app had allocated an id
+                                    // but not yet established a binding under that id
+                                    int which = Integer.parseInt(prov, 16);
+                                    p = restoredProviders.get(which);
+                                }
+
+                                // We'll be restoring widget state for both the host and
+                                // provider sides of this widget ID, so make sure we are
+                                // beginning from a clean slate on both fronts.
+                                pruneWidgetStateLr(host.packageName);
+                                if (p != null) {
+                                    pruneWidgetStateLr(p.info.provider.getPackageName());
+                                }
+
+                                // Have we heard about this ancestral widget instance before?
+                                AppWidgetId id = findRestoredWidgetLocked(restoredId, host, p);
+                                if (id == null) {
+                                    id = new AppWidgetId();
+                                    id.appWidgetId = mNextAppWidgetId++;
+                                    id.restoredId = restoredId;
+                                    id.options = parseWidgetIdOptions(parser);
+                                    id.host = host;
+                                    id.host.instances.add(id);
+                                    id.provider = p;
+                                    if (id.provider != null) {
+                                        id.provider.instances.add(id);
+                                    }
+                                    if (DEBUG_BACKUP) {
+                                        Slog.i(TAG, "New restored id " + restoredId
+                                                + " now " + id);
+                                    }
+                                    mAppWidgetIds.add(id);
+                                }
+                                if (id.provider.info != null) {
+                                    stashProviderRestoreUpdateLr(id.provider,
+                                            restoredId, id.appWidgetId);
+                                } else {
+                                    Slog.w(TAG, "Missing provider for restored widget " + id);
+                                }
+                                stashHostRestoreUpdateLr(id.host, restoredId, id.appWidgetId);
+
+                                if (DEBUG_BACKUP) {
+                                    Slog.i(TAG, "   instance: " + restoredId
+                                            + " -> " + id.appWidgetId
+                                            + " :: p=" + id.provider);
+                                }
+                            }
+                        }
+                    } while (type != XmlPullParser.END_DOCUMENT);
+
+                    // We've updated our own bookkeeping.  We'll need to notify the hosts and
+                    // providers about the changes, but we can't do that yet because the restore
+                    // target is not necessarily fully live at this moment.  Set aside the
+                    // information for now; the backup manager will call us once more at the
+                    // end of the process when all of the targets are in a known state, and we
+                    // will update at that point.
+                }
+            }
+        } catch (XmlPullParserException e) {
+            Slog.w(TAG, "Unable to restore widget state for " + packageName);
+        } catch (IOException e) {
+            Slog.w(TAG, "Unable to restore widget state for " + packageName);
+        } finally {
+            saveStateAsync();
+        }
+    }
+
+    // Called once following the conclusion of a restore operation.  This is when we
+    // send out updates to apps involved in widget-state restore telling them about
+    // the new widget ID space.
+    public void restoreFinished() {
+        if (DEBUG_BACKUP) {
+            Slog.i(TAG, "restoreFinished for " + mUserId);
+        }
+
+        final UserHandle userHandle = new UserHandle(mUserId);
+        synchronized (mRestoredWidgetIds) {
+            // Build the providers' broadcasts and send them off
+            Set<Entry<Provider, ArrayList<RestoreUpdateRecord>>> providerEntries
+                    = mUpdatesByProvider.entrySet();
+            for (Entry<Provider, ArrayList<RestoreUpdateRecord>> e : providerEntries) {
+                // For each provider there's a list of affected IDs
+                Provider provider = e.getKey();
+                ArrayList<RestoreUpdateRecord> updates = e.getValue();
+                final int pending = countPendingUpdates(updates);
+                if (DEBUG_BACKUP) {
+                    Slog.i(TAG, "Provider " + provider + " pending: " + pending);
+                }
+                if (pending > 0) {
+                    int[] oldIds = new int[pending];
+                    int[] newIds = new int[pending];
+                    final int N = updates.size();
+                    int nextPending = 0;
+                    for (int i = 0; i < N; i++) {
+                        RestoreUpdateRecord r = updates.get(i);
+                        if (!r.notified) {
+                            r.notified = true;
+                            oldIds[nextPending] = r.oldId;
+                            newIds[nextPending] = r.newId;
+                            nextPending++;
+                            if (DEBUG_BACKUP) {
+                                Slog.i(TAG, "   " + r.oldId + " => " + r.newId);
+                            }
+                        }
+                    }
+                    sendWidgetRestoreBroadcast(AppWidgetManager.ACTION_APPWIDGET_RESTORED,
+                            provider, null, oldIds, newIds, userHandle);
+                }
+            }
+
+            // same thing per host
+            Set<Entry<Host, ArrayList<RestoreUpdateRecord>>> hostEntries
+                    = mUpdatesByHost.entrySet();
+            for (Entry<Host, ArrayList<RestoreUpdateRecord>> e : hostEntries) {
+                Host host = e.getKey();
+                if (host.uid > 0) {
+                    ArrayList<RestoreUpdateRecord> updates = e.getValue();
+                    final int pending = countPendingUpdates(updates);
+                    if (DEBUG_BACKUP) {
+                        Slog.i(TAG, "Host " + host + " pending: " + pending);
+                    }
+                    if (pending > 0) {
+                        int[] oldIds = new int[pending];
+                        int[] newIds = new int[pending];
+                        final int N = updates.size();
+                        int nextPending = 0;
+                        for (int i = 0; i < N; i++) {
+                            RestoreUpdateRecord r = updates.get(i);
+                            if (!r.notified) {
+                                r.notified = true;
+                                oldIds[nextPending] = r.oldId;
+                                newIds[nextPending] = r.newId;
+                                nextPending++;
+                                if (DEBUG_BACKUP) {
+                                    Slog.i(TAG, "   " + r.oldId + " => " + r.newId);
+                                }
+                            }
+                        }
+                        sendWidgetRestoreBroadcast(AppWidgetManager.ACTION_APPWIDGET_HOST_RESTORED,
+                                null, host, oldIds, newIds, userHandle);
+                    }
+                }
+            }
+        }
+    }
+
+    private int countPendingUpdates(ArrayList<RestoreUpdateRecord> updates) {
+        int pending = 0;
+        final int N = updates.size();
+        for (int i = 0; i < N; i++) {
+            RestoreUpdateRecord r = updates.get(i);
+            if (!r.notified) {
+                pending++;
+            }
+        }
+        return pending;
+    }
+
+    void sendWidgetRestoreBroadcast(String action, Provider provider, Host host,
+            int[] oldIds, int[] newIds, UserHandle userHandle) {
+        Intent intent = new Intent(action);
+        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_OLD_IDS, oldIds);
+        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, newIds);
+        if (provider != null) {
+            intent.setComponent(provider.info.provider);
+            mContext.sendBroadcastAsUser(intent, userHandle);
+        }
+        if (host != null) {
+            intent.setComponent(null);
+            intent.setPackage(host.packageName);
+            intent.putExtra(AppWidgetManager.EXTRA_HOST_ID, host.hostId);
+            mContext.sendBroadcastAsUser(intent, userHandle);
+        }
+    }
+
     private Provider parseProviderInfoXml(ComponentName component, ResolveInfo ri) {
         Provider p = null;
 
@@ -1663,10 +2343,7 @@
             for (int i = 0; i < N; i++) {
                 Provider p = mInstalledProviders.get(i);
                 if (p.instances.size() > 0) {
-                    out.startTag(null, "p");
-                    out.attribute(null, "pkg", p.info.provider.getPackageName());
-                    out.attribute(null, "cl", p.info.provider.getClassName());
-                    out.endTag(null, "p");
+                    serializeProvider(out, p);
                     p.tag = providerIndex;
                     providerIndex++;
                 }
@@ -1675,35 +2352,14 @@
             N = mHosts.size();
             for (int i = 0; i < N; i++) {
                 Host host = mHosts.get(i);
-                out.startTag(null, "h");
-                out.attribute(null, "pkg", host.packageName);
-                out.attribute(null, "id", Integer.toHexString(host.hostId));
-                out.endTag(null, "h");
+                serializeHost(out, host);
                 host.tag = i;
             }
 
             N = mAppWidgetIds.size();
             for (int i = 0; i < N; i++) {
                 AppWidgetId id = mAppWidgetIds.get(i);
-                out.startTag(null, "g");
-                out.attribute(null, "id", Integer.toHexString(id.appWidgetId));
-                out.attribute(null, "h", Integer.toHexString(id.host.tag));
-                if (id.provider != null) {
-                    out.attribute(null, "p", Integer.toHexString(id.provider.tag));
-                }
-                if (id.options != null) {
-                    out.attribute(null, "min_width", Integer.toHexString(id.options.getInt(
-                            AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH)));
-                    out.attribute(null, "min_height", Integer.toHexString(id.options.getInt(
-                            AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT)));
-                    out.attribute(null, "max_width", Integer.toHexString(id.options.getInt(
-                            AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH)));
-                    out.attribute(null, "max_height", Integer.toHexString(id.options.getInt(
-                            AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT)));
-                    out.attribute(null, "host_category", Integer.toHexString(id.options.getInt(
-                            AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY)));
-                }
-                out.endTag(null, "g");
+                serializeAppWidgetId(out, id);
             }
 
             Iterator<String> it = mPackagesWithBindWidgetPermission.iterator();
@@ -1804,6 +2460,11 @@
                             mNextAppWidgetId = id.appWidgetId + 1;
                         }
 
+                        // restored ID is allowed to be absent
+                        String restoredIdString = parser.getAttributeValue(null, "rid");
+                        id.restoredId = (restoredIdString == null) ? 0
+                                : Integer.parseInt(restoredIdString, 16);
+
                         Bundle options = new Bundle();
                         String minWidthString = parser.getAttributeValue(null, "min_width");
                         if (minWidthString != null) {
@@ -1978,8 +2639,7 @@
                 continue;
             }
             if (pkgName.equals(ai.packageName)) {
-                addProviderLocked(ri);
-                providersAdded = true;
+                providersAdded = addProviderLocked(ri);
             }
         }
 
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index b3571d7..0082b1e 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -24,6 +24,7 @@
 import android.app.IBackupAgent;
 import android.app.PendingIntent;
 import android.app.backup.BackupAgent;
+import android.app.backup.BackupDataInput;
 import android.app.backup.BackupDataOutput;
 import android.app.backup.FullBackup;
 import android.app.backup.RestoreSet;
@@ -73,6 +74,8 @@
 import android.os.Environment.UserEnvironment;
 import android.os.storage.IMountService;
 import android.provider.Settings;
+import android.system.ErrnoException;
+import android.system.Os;
 import android.util.EventLog;
 import android.util.Log;
 import android.util.Slog;
@@ -82,12 +85,14 @@
 import com.android.internal.backup.BackupConstants;
 import com.android.internal.backup.IBackupTransport;
 import com.android.internal.backup.IObbBackupService;
+import com.android.server.AppWidgetBackupBridge;
 import com.android.server.EventLogTags;
 import com.android.server.SystemService;
 import com.android.server.backup.PackageManagerBackupAgent.Metadata;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
@@ -115,10 +120,13 @@
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Random;
 import java.util.Set;
+import java.util.TreeMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.zip.Deflater;
 import java.util.zip.DeflaterOutputStream;
@@ -142,16 +150,34 @@
     private static final boolean DEBUG = true;
     private static final boolean MORE_DEBUG = false;
 
+    // System-private key used for backing up an app's widget state.  Must
+    // begin with U+FFxx by convention (we reserve all keys starting
+    // with U+FF00 or higher for system use).
+    static final String KEY_WIDGET_STATE = "\uffed\uffedwidget";
+
     // Historical and current algorithm names
     static final String PBKDF_CURRENT = "PBKDF2WithHmacSHA1";
     static final String PBKDF_FALLBACK = "PBKDF2WithHmacSHA1And8bit";
 
     // Name and current contents version of the full-backup manifest file
+    //
+    // Manifest version history:
+    //
+    // 1 : initial release
     static final String BACKUP_MANIFEST_FILENAME = "_manifest";
     static final int BACKUP_MANIFEST_VERSION = 1;
+
+    // External archive format version history:
+    //
+    // 1 : initial release
+    // 2 : no format change per se; version bump to facilitate PBKDF2 version skew detection
+    // 3 : introduced "_meta" metadata file; no other format change per se
+    static final int BACKUP_FILE_VERSION = 3;
     static final String BACKUP_FILE_HEADER_MAGIC = "ANDROID BACKUP\n";
-    static final int BACKUP_FILE_VERSION = 2;
     static final int BACKUP_PW_FILE_VERSION = 2;
+    static final String BACKUP_METADATA_FILENAME = "_meta";
+    static final int BACKUP_METADATA_VERSION = 1;
+    static final int BACKUP_WIDGET_METADATA_TOKEN = 0x01FFED01;
     static final boolean COMPRESS_FULL_BACKUPS = true; // should be true in production
 
     static final String SHARED_BACKUP_AGENT_PACKAGE = "com.android.sharedstoragebackup";
@@ -186,6 +212,7 @@
     private static final int MSG_RUN_FULL_RESTORE = 10;
     private static final int MSG_RETRY_INIT = 11;
     private static final int MSG_RETRY_CLEAR = 12;
+    private static final int MSG_WIDGET_BROADCAST = 13;
 
     // backup task state machine tick
     static final int MSG_BACKUP_RESTORE_STEP = 20;
@@ -337,42 +364,47 @@
         public long token;
         public PackageInfo pkgInfo;
         public int pmToken; // in post-install restore, the PM's token for this transaction
-        public boolean needFullBackup;
+        public boolean isSystemRestore;
         public String[] filterSet;
 
+        // Restore a single package
         RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs,
-                long _token, PackageInfo _pkg, int _pmToken, boolean _needFullBackup) {
+                long _token, PackageInfo _pkg, int _pmToken) {
             transport = _transport;
             dirName = _dirName;
             observer = _obs;
             token = _token;
             pkgInfo = _pkg;
             pmToken = _pmToken;
-            needFullBackup = _needFullBackup;
+            isSystemRestore = false;
             filterSet = null;
         }
 
+        // Restore everything possible.  This is the form that Setup Wizard or similar
+        // restore UXes use.
         RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs,
-                long _token, boolean _needFullBackup) {
+                long _token) {
             transport = _transport;
             dirName = _dirName;
             observer = _obs;
             token = _token;
             pkgInfo = null;
             pmToken = 0;
-            needFullBackup = _needFullBackup;
+            isSystemRestore = true;
             filterSet = null;
         }
 
+        // Restore some set of packages.  Leave this one up to the caller to specify
+        // whether it's to be considered a system-level restore.
         RestoreParams(IBackupTransport _transport, String _dirName, IRestoreObserver _obs,
-                long _token, String[] _filterSet, boolean _needFullBackup) {
+                long _token, String[] _filterSet, boolean _isSystemRestore) {
             transport = _transport;
             dirName = _dirName;
             observer = _obs;
             token = _token;
             pkgInfo = null;
             pmToken = 0;
-            needFullBackup = _needFullBackup;
+            isSystemRestore = _isSystemRestore;
             filterSet = _filterSet;
         }
     }
@@ -413,16 +445,19 @@
         public boolean includeApks;
         public boolean includeObbs;
         public boolean includeShared;
+        public boolean doWidgets;
         public boolean allApps;
         public boolean includeSystem;
         public String[] packages;
 
         FullBackupParams(ParcelFileDescriptor output, boolean saveApks, boolean saveObbs,
-                boolean saveShared, boolean doAllApps, boolean doSystem, String[] pkgList) {
+                boolean saveShared, boolean alsoWidgets, boolean doAllApps, boolean doSystem,
+                String[] pkgList) {
             fd = output;
             includeApks = saveApks;
             includeObbs = saveObbs;
             includeShared = saveShared;
+            doWidgets = alsoWidgets;
             allApps = doAllApps;
             includeSystem = doSystem;
             packages = pkgList;
@@ -618,7 +653,8 @@
                 FullBackupParams params = (FullBackupParams)msg.obj;
                 PerformFullBackupTask task = new PerformFullBackupTask(params.fd,
                         params.observer, params.includeApks, params.includeObbs,
-                        params.includeShared, params.curPassword, params.encryptPassword,
+                        params.includeShared, params.doWidgets,
+                        params.curPassword, params.encryptPassword,
                         params.allApps, params.includeSystem, params.packages, params.latch);
                 (new Thread(task)).start();
                 break;
@@ -631,7 +667,7 @@
                 PerformRestoreTask task = new PerformRestoreTask(
                         params.transport, params.dirName, params.observer,
                         params.token, params.pkgInfo, params.pmToken,
-                        params.needFullBackup, params.filterSet);
+                        params.isSystemRestore, params.filterSet);
                 Message restoreMsg = obtainMessage(MSG_BACKUP_RESTORE_STEP, task);
                 sendMessage(restoreMsg);
                 break;
@@ -770,6 +806,13 @@
                 }
                 break;
             }
+
+            case MSG_WIDGET_BROADCAST:
+            {
+                final Intent intent = (Intent) msg.obj;
+                mContext.sendBroadcastAsUser(intent, UserHandle.OWNER);
+                break;
+            }
             }
         }
     }
@@ -1991,6 +2034,7 @@
         BackupState mCurrentState;
 
         // carried information about the current in-flight operation
+        IBackupAgent mAgentBinder;
         PackageInfo mCurrentPackage;
         File mSavedStateName;
         File mBackupDataName;
@@ -2053,6 +2097,7 @@
                 addBackupTrace(b.toString());
             }
 
+            mAgentBinder = null;
             mStatus = BackupConstants.TRANSPORT_OK;
 
             // Sanity check: if the queue is empty we have no work to do.
@@ -2184,6 +2229,7 @@
                             IApplicationThread.BACKUP_MODE_INCREMENTAL);
                     addBackupTrace("agent bound; a? = " + (agent != null));
                     if (agent != null) {
+                        mAgentBinder = agent;
                         mStatus = invokeAgentForBackup(request.packageName, agent, mTransport);
                         // at this point we'll either get a completion callback from the
                         // agent, or a timeout message on the main handler.  either way, we're
@@ -2209,6 +2255,7 @@
                 // That means we need to direct to the next state ourselves.
                 if (mStatus != BackupConstants.TRANSPORT_OK) {
                     BackupState nextState = BackupState.RUNNING_QUEUE;
+                    mAgentBinder = null;
 
                     // An agent-level failure means we reenqueue this one agent for
                     // a later retry, but otherwise proceed normally.
@@ -2230,6 +2277,7 @@
 
                     executeNextState(nextState);
                 } else {
+                    // success case
                     addBackupTrace("expecting completion/timeout callback");
                 }
             }
@@ -2297,6 +2345,7 @@
             mSavedStateName = new File(mStateDir, packageName);
             mBackupDataName = new File(mDataDir, packageName + ".data");
             mNewStateName = new File(mStateDir, packageName + ".new");
+            if (MORE_DEBUG) Slog.d(TAG, "data file: " + mBackupDataName);
 
             mSavedState = null;
             mBackupData = null;
@@ -2357,12 +2406,79 @@
             return BackupConstants.TRANSPORT_OK;
         }
 
+        public void failAgent(IBackupAgent agent, String message) {
+            try {
+                agent.fail(message);
+            } catch (Exception e) {
+                Slog.w(TAG, "Error conveying failure to " + mCurrentPackage.packageName);
+            }
+        }
+
         @Override
         public void operationComplete() {
-            // Okay, the agent successfully reported back to us.  Spin the data off to the
-            // transport and proceed with the next stage.
+            // Okay, the agent successfully reported back to us!
+            final String pkgName = mCurrentPackage.packageName;
+            final long filepos = mBackupDataName.length();
+            FileDescriptor fd = mBackupData.getFileDescriptor();
+            try {
+                // If it's a 3rd party app, see whether they wrote any protected keys
+                // and complain mightily if they are attempting shenanigans.
+                if (mCurrentPackage.applicationInfo != null &&
+                        (mCurrentPackage.applicationInfo.flags&ApplicationInfo.FLAG_SYSTEM) == 0) {
+                    ParcelFileDescriptor readFd = ParcelFileDescriptor.open(mBackupDataName,
+                            ParcelFileDescriptor.MODE_READ_ONLY);
+                    BackupDataInput in = new BackupDataInput(readFd.getFileDescriptor());
+                    try {
+                        while (in.readNextHeader()) {
+                            final String key = in.getKey();
+                            if (key != null && key.charAt(0) >= 0xff00) {
+                                // Not okay: crash them and bail.
+                                failAgent(mAgentBinder, "Illegal backup key: " + key);
+                                addBackupTrace("illegal key " + key + " from " + pkgName);
+                                EventLog.writeEvent(EventLogTags.BACKUP_AGENT_FAILURE, pkgName,
+                                        "bad key");
+                                mBackupHandler.removeMessages(MSG_TIMEOUT);
+                                agentErrorCleanup();
+                                // agentErrorCleanup() implicitly executes next state properly
+                                return;
+                            }
+                            in.skipEntityData();
+                        }
+                    } finally {
+                        if (readFd != null) {
+                            readFd.close();
+                        }
+                    }
+                }
+
+                // Piggyback the widget state payload, if any
+                BackupDataOutput out = new BackupDataOutput(fd);
+                byte[] widgetState = AppWidgetBackupBridge.getWidgetState(pkgName,
+                        UserHandle.USER_OWNER);
+                if (widgetState != null) {
+                    out.writeEntityHeader(KEY_WIDGET_STATE, widgetState.length);
+                    out.writeEntityData(widgetState, widgetState.length);
+                } else {
+                    // No widget state for this app, but push a 'delete' operation for it
+                    // in case they're trying to play games with the payload.
+                    out.writeEntityHeader(KEY_WIDGET_STATE, -1);
+                }
+            } catch (IOException e) {
+                // Hard disk error; recovery/failure policy TBD.  For now roll back,
+                // but we may want to consider this a transport-level failure (i.e.
+                // we're in such a bad state that we can't contemplate doing backup
+                // operations any more during this pass).
+                Slog.w(TAG, "Unable to save widget state for " + pkgName);
+                try {
+                    Os.ftruncate(fd, filepos);
+                } catch (ErrnoException ee) {
+                    Slog.w(TAG, "Unable to roll back!");
+                }
+            }
+
+            // Spin the data off to the transport and proceed with the next stage.
             if (MORE_DEBUG) Slog.v(TAG, "operationComplete(): sending data to transport for "
-                    + mCurrentPackage.packageName);
+                    + pkgName);
             mBackupHandler.removeMessages(MSG_TIMEOUT);
             clearAgentState();
             addBackupTrace("operation complete");
@@ -2401,17 +2517,14 @@
                 if (mStatus == BackupConstants.TRANSPORT_OK) {
                     mBackupDataName.delete();
                     mNewStateName.renameTo(mSavedStateName);
-                    EventLog.writeEvent(EventLogTags.BACKUP_PACKAGE,
-                            mCurrentPackage.packageName, size);
-                    logBackupComplete(mCurrentPackage.packageName);
+                    EventLog.writeEvent(EventLogTags.BACKUP_PACKAGE, pkgName, size);
+                    logBackupComplete(pkgName);
                 } else {
-                    EventLog.writeEvent(EventLogTags.BACKUP_TRANSPORT_FAILURE,
-                            mCurrentPackage.packageName);
+                    EventLog.writeEvent(EventLogTags.BACKUP_TRANSPORT_FAILURE, pkgName);
                 }
             } catch (Exception e) {
-                Slog.e(TAG, "Transport error backing up " + mCurrentPackage.packageName, e);
-                EventLog.writeEvent(EventLogTags.BACKUP_TRANSPORT_FAILURE,
-                        mCurrentPackage.packageName);
+                Slog.e(TAG, "Transport error backing up " + pkgName, e);
+                EventLog.writeEvent(EventLogTags.BACKUP_TRANSPORT_FAILURE, pkgName);
                 mStatus = BackupConstants.TRANSPORT_ERROR;
             } finally {
                 try { if (backupData != null) backupData.close(); } catch (IOException e) {}
@@ -2630,18 +2743,21 @@
         boolean mIncludeApks;
         boolean mIncludeObbs;
         boolean mIncludeShared;
+        boolean mDoWidgets;
         boolean mAllApps;
         final boolean mIncludeSystem;
-        String[] mPackages;
+        ArrayList<String> mPackages;
         String mCurrentPassword;
         String mEncryptPassword;
         AtomicBoolean mLatchObject;
         File mFilesDir;
         File mManifestFile;
+        File mMetadataFile;
         
 
         class FullBackupRunner implements Runnable {
             PackageInfo mPackage;
+            byte[] mWidgetData;
             IBackupAgent mAgent;
             ParcelFileDescriptor mPipe;
             int mToken;
@@ -2649,8 +2765,10 @@
             boolean mWriteManifest;
 
             FullBackupRunner(PackageInfo pack, IBackupAgent agent, ParcelFileDescriptor pipe,
-                    int token, boolean sendApk, boolean writeManifest)  throws IOException {
+                    int token, boolean sendApk, boolean writeManifest, byte[] widgetData)
+                            throws IOException {
                 mPackage = pack;
+                mWidgetData = widgetData;
                 mAgent = agent;
                 mPipe = ParcelFileDescriptor.dup(pipe.getFileDescriptor());
                 mToken = token;
@@ -2665,12 +2783,24 @@
                             mPipe.getFileDescriptor());
 
                     if (mWriteManifest) {
+                        final boolean writeWidgetData = mWidgetData != null;
                         if (MORE_DEBUG) Slog.d(TAG, "Writing manifest for " + mPackage.packageName);
-                        writeAppManifest(mPackage, mManifestFile, mSendApk);
+                        writeAppManifest(mPackage, mManifestFile, mSendApk, writeWidgetData);
                         FullBackup.backupToTar(mPackage.packageName, null, null,
                                 mFilesDir.getAbsolutePath(),
                                 mManifestFile.getAbsolutePath(),
                                 output);
+                        mManifestFile.delete();
+
+                        // We only need to write a metadata file if we have widget data to stash
+                        if (writeWidgetData) {
+                            writeMetadata(mPackage, mMetadataFile, mWidgetData);
+                            FullBackup.backupToTar(mPackage.packageName, null, null,
+                                    mFilesDir.getAbsolutePath(),
+                                    mMetadataFile.getAbsolutePath(),
+                                    output);
+                            mMetadataFile.delete();
+                        }
                     }
 
                     if (mSendApk) {
@@ -2695,16 +2825,19 @@
 
         PerformFullBackupTask(ParcelFileDescriptor fd, IFullBackupRestoreObserver observer, 
                 boolean includeApks, boolean includeObbs, boolean includeShared,
-                String curPassword, String encryptPassword, boolean doAllApps,
+                boolean doWidgets, String curPassword, String encryptPassword, boolean doAllApps,
                 boolean doSystem, String[] packages, AtomicBoolean latch) {
             mOutputFile = fd;
             mObserver = observer;
             mIncludeApks = includeApks;
             mIncludeObbs = includeObbs;
             mIncludeShared = includeShared;
+            mDoWidgets = doWidgets;
             mAllApps = doAllApps;
             mIncludeSystem = doSystem;
-            mPackages = packages;
+            mPackages = (packages == null)
+                    ? new ArrayList<String>()
+                    : new ArrayList<String>(Arrays.asList(packages));
             mCurrentPassword = curPassword;
             // when backing up, if there is a current backup password, we require that
             // the user use a nonempty encryption password as well.  if one is supplied
@@ -2719,13 +2852,28 @@
 
             mFilesDir = new File("/data/system");
             mManifestFile = new File(mFilesDir, BACKUP_MANIFEST_FILENAME);
+            mMetadataFile = new File(mFilesDir, BACKUP_METADATA_FILENAME);
+        }
+
+        void addPackagesToSet(TreeMap<String, PackageInfo> set, List<String> pkgNames) {
+            for (String pkgName : pkgNames) {
+                if (!set.containsKey(pkgName)) {
+                    try {
+                        PackageInfo info = mPackageManager.getPackageInfo(pkgName,
+                                PackageManager.GET_SIGNATURES);
+                        set.put(pkgName, info);
+                    } catch (NameNotFoundException e) {
+                        Slog.w(TAG, "Unknown package " + pkgName + ", skipping");
+                    }
+                }
+            }
         }
 
         @Override
         public void run() {
             Slog.i(TAG, "--- Performing full-dataset backup ---");
 
-            List<PackageInfo> packagesToBackup = new ArrayList<PackageInfo>();
+            TreeMap<String, PackageInfo> packagesToBackup = new TreeMap<String, PackageInfo>();
             FullBackupObbConnection obbConnection = new FullBackupObbConnection();
             obbConnection.establish();  // we'll want this later
 
@@ -2733,63 +2881,70 @@
 
             // doAllApps supersedes the package set if any
             if (mAllApps) {
-                packagesToBackup = mPackageManager.getInstalledPackages(
+                List<PackageInfo> allPackages = mPackageManager.getInstalledPackages(
                         PackageManager.GET_SIGNATURES);
-                // Exclude system apps if we've been asked to do so
-                if (mIncludeSystem == false) {
-                    for (int i = 0; i < packagesToBackup.size(); ) {
-                        PackageInfo pkg = packagesToBackup.get(i);
-                        if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
-                            packagesToBackup.remove(i);
-                        } else {
-                            i++;
-                        }
+                for (int i = 0; i < allPackages.size(); i++) {
+                    PackageInfo pkg = allPackages.get(i);
+                    // Exclude system apps if we've been asked to do so
+                    if (mIncludeSystem == true
+                            || ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)) {
+                        packagesToBackup.put(pkg.packageName, pkg);
                     }
                 }
             }
 
+            // If we're doing widget state as well, ensure that we have all the involved
+            // host & provider packages in the set
+            if (mDoWidgets) {
+                List<String> pkgs =
+                        AppWidgetBackupBridge.getWidgetParticipants(UserHandle.USER_OWNER);
+                if (pkgs != null) {
+                    if (MORE_DEBUG) {
+                        Slog.i(TAG, "Adding widget participants to backup set:");
+                        StringBuilder sb = new StringBuilder(128);
+                        sb.append("   ");
+                        for (String s : pkgs) {
+                            sb.append(' ');
+                            sb.append(s);
+                        }
+                        Slog.i(TAG, sb.toString());
+                    }
+                    addPackagesToSet(packagesToBackup, pkgs);
+                }
+            }
+
             // Now process the command line argument packages, if any. Note that explicitly-
             // named system-partition packages will be included even if includeSystem was
             // set to false.
             if (mPackages != null) {
-                for (String pkgName : mPackages) {
-                    try {
-                        packagesToBackup.add(mPackageManager.getPackageInfo(pkgName,
-                                PackageManager.GET_SIGNATURES));
-                    } catch (NameNotFoundException e) {
-                        Slog.w(TAG, "Unknown package " + pkgName + ", skipping");
-                    }
-                }
+                addPackagesToSet(packagesToBackup, mPackages);
             }
 
-            // Cull any packages that have indicated that backups are not permitted, as well
-            // as any explicit mention of the 'special' shared-storage agent package (we
-            // handle that one at the end).
-            for (int i = 0; i < packagesToBackup.size(); ) {
-                PackageInfo pkg = packagesToBackup.get(i);
+            // Now we cull any inapplicable / inappropriate packages from the set
+            Iterator<Entry<String, PackageInfo>> iter = packagesToBackup.entrySet().iterator();
+            while (iter.hasNext()) {
+                PackageInfo pkg = iter.next().getValue();
                 if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_ALLOW_BACKUP) == 0
                         || pkg.packageName.equals(SHARED_BACKUP_AGENT_PACKAGE)) {
-                    packagesToBackup.remove(i);
-                } else {
-                    i++;
-                }
-            }
-
-            // Cull any packages that run as system-domain uids but do not define their
-            // own backup agents
-            for (int i = 0; i < packagesToBackup.size(); ) {
-                PackageInfo pkg = packagesToBackup.get(i);
-                if ((pkg.applicationInfo.uid < Process.FIRST_APPLICATION_UID)
+                    // Cull any packages that have indicated that backups are not permitted, as well
+                    // as any explicit mention of the 'special' shared-storage agent package (we
+                    // handle that one at the end).
+                    iter.remove();
+                } else if ((pkg.applicationInfo.uid < Process.FIRST_APPLICATION_UID)
                         && (pkg.applicationInfo.backupAgentName == null)) {
+                    // Cull any packages that run as system-domain uids but do not define their
+                    // own backup agents
                     if (MORE_DEBUG) {
                         Slog.i(TAG, "... ignoring non-agent system package " + pkg.packageName);
                     }
-                    packagesToBackup.remove(i);
-                } else {
-                    i++;
+                    iter.remove();
                 }
             }
 
+            // flatten the set of packages now so we can explicitly control the ordering
+            ArrayList<PackageInfo> backupQueue =
+                    new ArrayList<PackageInfo>(packagesToBackup.values());
+
             FileOutputStream ofstream = new FileOutputStream(mOutputFile.getFileDescriptor());
             OutputStream out = null;
 
@@ -2865,16 +3020,16 @@
                 if (mIncludeShared) {
                     try {
                         pkg = mPackageManager.getPackageInfo(SHARED_BACKUP_AGENT_PACKAGE, 0);
-                        packagesToBackup.add(pkg);
+                        backupQueue.add(pkg);
                     } catch (NameNotFoundException e) {
                         Slog.e(TAG, "Unable to find shared-storage backup handler");
                     }
                 }
 
                 // Now back up the app data via the agent mechanism
-                int N = packagesToBackup.size();
+                int N = backupQueue.size();
                 for (int i = 0; i < N; i++) {
-                    pkg = packagesToBackup.get(i);
+                    pkg = backupQueue.get(i);
                     backupOnePackage(pkg, out);
 
                     // after the app's agent runs to handle its private filesystem
@@ -3005,11 +3160,13 @@
                             && ((app.flags & ApplicationInfo.FLAG_SYSTEM) == 0 ||
                                 (app.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0);
 
+                    byte[] widgetBlob = AppWidgetBackupBridge.getWidgetState(pkg.packageName,
+                            UserHandle.USER_OWNER);
                     sendOnBackupPackage(isSharedStorage ? "Shared storage" : pkg.packageName);
 
                     final int token = generateToken();
                     FullBackupRunner runner = new FullBackupRunner(pkg, agent, pipes[1],
-                            token, sendApk, !isSharedStorage);
+                            token, sendApk, !isSharedStorage, widgetBlob);
                     pipes[1].close();   // the runner has dup'd it
                     pipes[1] = null;
                     Thread t = new Thread(runner);
@@ -3085,8 +3242,8 @@
             }
         }
 
-        private void writeAppManifest(PackageInfo pkg, File manifestFile, boolean withApk)
-                throws IOException {
+        private void writeAppManifest(PackageInfo pkg, File manifestFile,
+                boolean withApk, boolean withWidgets) throws IOException {
             // Manifest format. All data are strings ending in LF:
             //     BACKUP_MANIFEST_VERSION, currently 1
             //
@@ -3124,6 +3281,43 @@
             outstream.close();
         }
 
+        // Widget metadata format. All header entries are strings ending in LF:
+        //
+        // Version 1 header:
+        //     BACKUP_METADATA_VERSION, currently "1"
+        //     package name
+        //
+        // File data (all integers are binary in network byte order)
+        // *N: 4 : integer token identifying which metadata blob
+        //     4 : integer size of this blob = N
+        //     N : raw bytes of this metadata blob
+        //
+        // Currently understood blobs (always in network byte order):
+        //
+        //     widgets : metadata token = 0x01FFED01 (BACKUP_WIDGET_METADATA_TOKEN)
+        //
+        // Unrecognized blobs are *ignored*, not errors.
+        private void writeMetadata(PackageInfo pkg, File destination, byte[] widgetData)
+                throws IOException {
+            StringBuilder b = new StringBuilder(512);
+            StringBuilderPrinter printer = new StringBuilderPrinter(b);
+            printer.println(Integer.toString(BACKUP_METADATA_VERSION));
+            printer.println(pkg.packageName);
+
+            FileOutputStream fout = new FileOutputStream(destination);
+            BufferedOutputStream bout = new BufferedOutputStream(fout);
+            DataOutputStream out = new DataOutputStream(bout);
+            bout.write(b.toString().getBytes());    // bypassing DataOutputStream
+
+            if (widgetData != null && widgetData.length > 0) {
+                out.writeInt(BACKUP_WIDGET_METADATA_TOKEN);
+                out.writeInt(widgetData.length);
+                out.write(widgetData);
+            }
+            bout.flush();
+            out.close();
+        }
+
         private void tearDown(PackageInfo pkg) {
             if (pkg != null) {
                 final ApplicationInfo app = pkg.applicationInfo;
@@ -3227,6 +3421,7 @@
         ApplicationInfo mTargetApp;
         FullBackupObbConnection mObbConnection = null;
         ParcelFileDescriptor[] mPipes = null;
+        byte[] mWidgetData = null;
 
         long mBytes;
 
@@ -3523,7 +3718,8 @@
                         // Clean up the previous agent relationship if necessary,
                         // and let the observer know we're considering a new app.
                         if (mAgent != null) {
-                            if (DEBUG) Slog.d(TAG, "Saw new package; tearing down old one");
+                            if (DEBUG) Slog.d(TAG, "Saw new package; finalizing old one");
+                            // Now we're really done
                             tearDownPipes();
                             tearDownAgent(mTargetApp);
                             mTargetApp = null;
@@ -3539,6 +3735,9 @@
                         // input file
                         skipTarPadding(info.size, instream);
                         sendOnRestorePackage(pkg);
+                    } else if (info.path.equals(BACKUP_METADATA_FILENAME)) {
+                        // Metadata blobs!
+                        readMetadata(info, instream);
                     } else {
                         // Non-manifest, so it's actual file data.  Is this a package
                         // we're ignoring?
@@ -3995,6 +4194,71 @@
             }
         }
 
+        // Read a widget metadata file, returning the restored blob
+        void readMetadata(FileMetadata info, InputStream instream) throws IOException {
+            byte[] data = null;
+
+            // Fail on suspiciously large widget dump files
+            if (info.size > 64 * 1024) {
+                throw new IOException("Metadata too big; corrupt? size=" + info.size);
+            }
+
+            byte[] buffer = new byte[(int) info.size];
+            if (readExactly(instream, buffer, 0, (int)info.size) == info.size) {
+                mBytes += info.size;
+            } else throw new IOException("Unexpected EOF in widget data");
+
+            String[] str = new String[1];
+            int offset = extractLine(buffer, 0, str);
+            int version = Integer.parseInt(str[0]);
+            if (version == BACKUP_MANIFEST_VERSION) {
+                offset = extractLine(buffer, offset, str);
+                final String pkg = str[0];
+                if (info.packageName.equals(pkg)) {
+                    // Data checks out -- the rest of the buffer is a concatenation of
+                    // binary blobs as described in the comment at writeAppWidgetData()
+                    ByteArrayInputStream bin = new ByteArrayInputStream(buffer,
+                            offset, buffer.length - offset);
+                    DataInputStream in = new DataInputStream(bin);
+                    while (bin.available() > 0) {
+                        int token = in.readInt();
+                        int size = in.readInt();
+                        if (size > 64 * 1024) {
+                            throw new IOException("Datum "
+                                    + Integer.toHexString(token)
+                                    + " too big; corrupt? size=" + info.size);
+                        }
+                        switch (token) {
+                            case BACKUP_WIDGET_METADATA_TOKEN:
+                            {
+                                if (MORE_DEBUG) {
+                                    Slog.i(TAG, "Got widget metadata for " + info.packageName);
+                                }
+                                mWidgetData = new byte[size];
+                                in.read(mWidgetData);
+                                break;
+                            }
+                            default:
+                            {
+                                if (DEBUG) {
+                                    Slog.i(TAG, "Ignoring metadata blob "
+                                            + Integer.toHexString(token)
+                                            + " for " + info.packageName);
+                                }
+                                in.skipBytes(size);
+                                break;
+                            }
+                        }
+                    }
+                } else {
+                    Slog.w(TAG, "Metadata mismatch: package " + info.packageName
+                            + " but widget data for " + pkg);
+                }
+            } else {
+                Slog.w(TAG, "Unsupported metadata version " + version);
+            }
+        }
+
         // Returns a policy constant; takes a buffer arg to reduce memory churn
         RestorePolicy readAppManifest(FileMetadata info, InputStream instream)
                 throws IOException {
@@ -4425,7 +4689,11 @@
 
     // ----- Restore handling -----
 
-    private boolean signaturesMatch(Signature[] storedSigs, PackageInfo target) {
+    static boolean signaturesMatch(Signature[] storedSigs, PackageInfo target) {
+        if (target == null) {
+            return false;
+        }
+
         // If the target resides on the system partition, we allow it to restore
         // data from the like-named package in a restore set even if the signatures
         // do not match.  (Unlike general applications, those flashed to the system
@@ -4485,7 +4753,7 @@
         private PackageInfo mTargetPackage;
         private File mStateDir;
         private int mPmToken;
-        private boolean mNeedFullBackup;
+        private boolean mIsSystemRestore;
         private HashSet<String> mFilterSet;
         private long mStartRealtime;
         private PackageManagerBackupAgent mPmAgent;
@@ -4496,11 +4764,13 @@
         private boolean mFinished;
         private int mStatus;
         private File mBackupDataName;
+        private File mStageName;
         private File mNewStateName;
         private File mSavedStateName;
         private ParcelFileDescriptor mBackupData;
         private ParcelFileDescriptor mNewState;
         private PackageInfo mCurrentPackage;
+        private byte[] mWidgetData;
 
 
         class RestoreRequest {
@@ -4515,7 +4785,7 @@
 
         PerformRestoreTask(IBackupTransport transport, String dirName, IRestoreObserver observer,
                 long restoreSetToken, PackageInfo targetPackage, int pmToken,
-                boolean needFullBackup, String[] filterSet) {
+                boolean isSystemRestore, String[] filterSet) {
             mCurrentState = RestoreState.INITIAL;
             mFinished = false;
             mPmAgent = null;
@@ -4525,7 +4795,7 @@
             mToken = restoreSetToken;
             mTargetPackage = targetPackage;
             mPmToken = pmToken;
-            mNeedFullBackup = needFullBackup;
+            mIsSystemRestore = isSystemRestore;
 
             if (filterSet != null) {
                 mFilterSet = new HashSet<String>();
@@ -4695,8 +4965,7 @@
                 omPackage.packageName = PACKAGE_MANAGER_SENTINEL;
                 mPmAgent = new PackageManagerBackupAgent(
                         mPackageManager, mAgentPackages);
-                initiateOneRestore(omPackage, 0, IBackupAgent.Stub.asInterface(mPmAgent.onBind()),
-                        mNeedFullBackup);
+                initiateOneRestore(omPackage, 0, IBackupAgent.Stub.asInterface(mPmAgent.onBind()));
                 // The PM agent called operationComplete() already, because our invocation
                 // of it is process-local and therefore synchronous.  That means that a
                 // RUNNING_QUEUE message is already enqueued.  Only if we're unable to
@@ -4726,6 +4995,12 @@
 
             // Metadata is intact, so we can now run the restore queue.  If we get here,
             // we have already enqueued the necessary next-step message on the looper.
+            // We've deferred telling the App Widget service that we might be replacing
+            // the widget environment with something else, but now we know we've got
+            // data coming, so we do it here.
+            if (mIsSystemRestore) {
+                AppWidgetBackupBridge.restoreStarting(UserHandle.USER_OWNER);
+            }
         }
 
         void restoreNextAgent() {
@@ -4834,7 +5109,7 @@
 
                 // And then finally start the restore on this agent
                 try {
-                    initiateOneRestore(packageInfo, metaInfo.versionCode, agent, mNeedFullBackup);
+                    initiateOneRestore(packageInfo, metaInfo.versionCode, agent);
                     ++mCount;
                 } catch (Exception e) {
                     Slog.e(TAG, "Error when attempting restore: " + e.toString());
@@ -4888,6 +5163,9 @@
             mBackupHandler.sendEmptyMessageDelayed(MSG_RESTORE_TIMEOUT,
                     TIMEOUT_RESTORE_INTERVAL);
 
+            // Kick off any work that may be needed regarding app widget restores
+            AppWidgetBackupBridge.restoreFinished(UserHandle.USER_OWNER);
+
             // done; we can finally release the wakelock
             Slog.i(TAG, "Restore complete.");
             mWakelock.release();
@@ -4895,43 +5173,92 @@
 
         // Call asynchronously into the app, passing it the restore data.  The next step
         // after this is always a callback, either operationComplete() or handleTimeout().
-        void initiateOneRestore(PackageInfo app, int appVersionCode, IBackupAgent agent,
-                boolean needFullBackup) {
+        void initiateOneRestore(PackageInfo app, int appVersionCode, IBackupAgent agent) {
             mCurrentPackage = app;
+            mWidgetData = null;
             final String packageName = app.packageName;
 
             if (DEBUG) Slog.d(TAG, "initiateOneRestore packageName=" + packageName);
 
             // !!! TODO: get the dirs from the transport
             mBackupDataName = new File(mDataDir, packageName + ".restore");
+            mStageName = new File(mDataDir, packageName + ".stage");
             mNewStateName = new File(mStateDir, packageName + ".new");
             mSavedStateName = new File(mStateDir, packageName);
 
+            // don't stage the 'android' package where the wallpaper data lives.  this is
+            // an optimization: we know there's no widget data hosted/published by that
+            // package, and this way we avoid doing a spurious copy of MB-sized wallpaper
+            // data following the download.
+            boolean staging = !packageName.equals("android");
+            ParcelFileDescriptor stage;
+            File downloadFile = (staging) ? mStageName : mBackupDataName;
+
             final int token = generateToken();
             try {
                 // Run the transport's restore pass
-                mBackupData = ParcelFileDescriptor.open(mBackupDataName,
+                stage = ParcelFileDescriptor.open(downloadFile,
                             ParcelFileDescriptor.MODE_READ_WRITE |
                             ParcelFileDescriptor.MODE_CREATE |
                             ParcelFileDescriptor.MODE_TRUNCATE);
 
                 if (!SELinux.restorecon(mBackupDataName)) {
-                    Slog.e(TAG, "SElinux restorecon failed for " + mBackupDataName);
+                    Slog.e(TAG, "SElinux restorecon failed for " + downloadFile);
                 }
 
-                if (mTransport.getRestoreData(mBackupData) != BackupConstants.TRANSPORT_OK) {
+                if (mTransport.getRestoreData(stage) != BackupConstants.TRANSPORT_OK) {
                     // Transport-level failure, so we wind everything up and
                     // terminate the restore operation.
                     Slog.e(TAG, "Error getting restore data for " + packageName);
                     EventLog.writeEvent(EventLogTags.RESTORE_TRANSPORT_FAILURE);
-                    mBackupData.close();
-                    mBackupDataName.delete();
+                    stage.close();
+                    downloadFile.delete();
                     executeNextState(RestoreState.FINAL);
                     return;
                 }
 
+                // We have the data from the transport. Now we extract and strip
+                // any per-package metadata (typically widget-related information)
+                // if appropriate
+                if (staging) {
+                    stage.close();
+                    stage = ParcelFileDescriptor.open(downloadFile,
+                            ParcelFileDescriptor.MODE_READ_ONLY);
+
+                    mBackupData = ParcelFileDescriptor.open(mBackupDataName,
+                            ParcelFileDescriptor.MODE_READ_WRITE |
+                            ParcelFileDescriptor.MODE_CREATE |
+                            ParcelFileDescriptor.MODE_TRUNCATE);
+
+                    BackupDataInput in = new BackupDataInput(stage.getFileDescriptor());
+                    BackupDataOutput out = new BackupDataOutput(mBackupData.getFileDescriptor());
+                    byte[] buffer = new byte[8192]; // will grow when needed
+                    while (in.readNextHeader()) {
+                        final String key = in.getKey();
+                        final int size = in.getDataSize();
+
+                        // is this a special key?
+                        if (key.equals(KEY_WIDGET_STATE)) {
+                            if (DEBUG) {
+                                Slog.i(TAG, "Restoring widget state for " + packageName);
+                            }
+                            mWidgetData = new byte[size];
+                            in.readEntityData(mWidgetData, 0, size);
+                        } else {
+                            if (size > buffer.length) {
+                                buffer = new byte[size];
+                            }
+                            in.readEntityData(buffer, 0, size);
+                            out.writeEntityHeader(key, size);
+                            out.writeEntityData(buffer, size);
+                        }
+                    }
+
+                    mBackupData.close();
+                }
+
                 // Okay, we have the data.  Now have the agent do the restore.
-                mBackupData.close();
+                stage.close();
                 mBackupData = ParcelFileDescriptor.open(mBackupDataName,
                             ParcelFileDescriptor.MODE_READ_ONLY);
 
@@ -4942,7 +5269,8 @@
 
                 // Kick off the restore, checking for hung agents
                 prepareOperationTimeout(token, TIMEOUT_RESTORE_INTERVAL, this);
-                agent.doRestore(mBackupData, appVersionCode, mNewState, token, mBackupManagerBinder);
+                agent.doRestore(mBackupData, appVersionCode, mNewState,
+                        token, mBackupManagerBinder);
             } catch (Exception e) {
                 Slog.e(TAG, "Unable to call app for restore: " + packageName, e);
                 EventLog.writeEvent(EventLogTags.RESTORE_AGENT_FAILURE, packageName, e.toString());
@@ -4965,6 +5293,7 @@
 
         void agentCleanup() {
             mBackupDataName.delete();
+            mStageName.delete();
             try { if (mBackupData != null) mBackupData.close(); } catch (IOException e) {}
             try { if (mNewState != null) mNewState.close(); } catch (IOException e) {}
             mBackupData = mNewState = null;
@@ -5023,9 +5352,17 @@
         public void operationComplete() {
             int size = (int) mBackupDataName.length();
             EventLog.writeEvent(EventLogTags.RESTORE_PACKAGE, mCurrentPackage.packageName, size);
+
             // Just go back to running the restore queue
             agentCleanup();
 
+            // If there was widget state associated with this app, get the OS to
+            // incorporate it into current bookeeping and then pass that along to
+            // the app as part of the restore operation.
+            if (mWidgetData != null) {
+                restoreWidgetData(mCurrentPackage.packageName, mWidgetData);
+            }
+
             executeNextState(RestoreState.RUNNING_QUEUE);
         }
 
@@ -5049,6 +5386,12 @@
         }
     }
 
+    // Used by both incremental and full restore
+    void restoreWidgetData(String packageName, byte[] widgetData) {
+        // Apply the restored widget state and generate the ID update for the app
+        AppWidgetBackupBridge.restoreWidgetState(packageName, widgetData, UserHandle.USER_OWNER);
+    }
+
     class PerformClearTask implements Runnable {
         IBackupTransport mTransport;
         PackageInfo mPackage;
@@ -5344,8 +5687,9 @@
     // Run a *full* backup pass for the given package, writing the resulting data stream
     // to the supplied file descriptor.  This method is synchronous and does not return
     // to the caller until the backup has been completed.
+    @Override
     public void fullBackup(ParcelFileDescriptor fd, boolean includeApks,
-            boolean includeObbs, boolean includeShared,
+            boolean includeObbs, boolean includeShared, boolean doWidgets,
             boolean doAllApps, boolean includeSystem, String[] pkgList) {
         mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, "fullBackup");
 
@@ -5381,7 +5725,7 @@
             Slog.i(TAG, "Beginning full backup...");
 
             FullBackupParams params = new FullBackupParams(fd, includeApks, includeObbs,
-                    includeShared, doAllApps, includeSystem, pkgList);
+                    includeShared, doWidgets, doAllApps, includeSystem, pkgList);
             final int token = generateToken();
             synchronized (mFullConfirmations) {
                 mFullConfirmations.put(token, params);
@@ -5838,7 +6182,7 @@
                 mWakelock.acquire();
                 Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
                 msg.obj = new RestoreParams(transport, dirName, null,
-                        restoreSet, pkg, token, true);
+                        restoreSet, pkg, token);
                 mBackupHandler.sendMessage(msg);
             } catch (RemoteException e) {
                 // Binding to the transport broke; back off and proceed with the installation.
@@ -6019,7 +6363,7 @@
                         mWakelock.acquire();
                         Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
                         msg.obj = new RestoreParams(mRestoreTransport, dirName,
-                                observer, token, true);
+                                observer, token);
                         mBackupHandler.sendMessage(msg);
                         Binder.restoreCallingIdentity(oldId);
                         return 0;
@@ -6031,6 +6375,7 @@
             return -1;
         }
 
+        // Restores of more than a single package are treated as 'system' restores
         public synchronized int restoreSome(long token, IRestoreObserver observer,
                 String[] packages) {
             mContext.enforceCallingOrSelfPermission(android.Manifest.permission.BACKUP,
@@ -6089,7 +6434,7 @@
                         mWakelock.acquire();
                         Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
                         msg.obj = new RestoreParams(mRestoreTransport, dirName, observer, token,
-                                packages, true);
+                                packages, packages.length > 1);
                         mBackupHandler.sendMessage(msg);
                         Binder.restoreCallingIdentity(oldId);
                         return 0;
@@ -6168,7 +6513,7 @@
             mWakelock.acquire();
             Message msg = mBackupHandler.obtainMessage(MSG_RUN_RESTORE);
             msg.obj = new RestoreParams(mRestoreTransport, dirName,
-                    observer, token, app, 0, false);
+                    observer, token, app, 0);
             mBackupHandler.sendMessage(msg);
             Binder.restoreCallingIdentity(oldId);
             return 0;
diff --git a/services/backup/java/com/android/server/backup/PackageManagerBackupAgent.java b/services/backup/java/com/android/server/backup/PackageManagerBackupAgent.java
index 495da88..132579d 100644
--- a/services/backup/java/com/android/server/backup/PackageManagerBackupAgent.java
+++ b/services/backup/java/com/android/server/backup/PackageManagerBackupAgent.java
@@ -19,15 +19,19 @@
 import android.app.backup.BackupAgent;
 import android.app.backup.BackupDataInput;
 import android.app.backup.BackupDataOutput;
+import android.content.ComponentName;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.Signature;
 import android.os.Build;
 import android.os.ParcelFileDescriptor;
 import android.util.Slog;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
@@ -42,6 +46,8 @@
 import java.util.List;
 import java.util.Set;
 
+import java.util.Objects;
+
 /**
  * We back up the signatures of each package so that during a system restore,
  * we can verify that the app whose data we think we have matches the app
@@ -58,6 +64,9 @@
     // is stored using the package name as a key)
     private static final String GLOBAL_METADATA_KEY = "@meta@";
 
+    // key under which we store the identity of the user's chosen default home app
+    private static final String DEFAULT_HOME_KEY = "@home@";
+
     private List<PackageInfo> mAllPackages;
     private PackageManager mPackageManager;
     // version & signature info of each app in a restore set
@@ -68,7 +77,15 @@
     private final HashSet<String> mExisting = new HashSet<String>();
     private int mStoredSdkVersion;
     private String mStoredIncrementalVersion;
+    private ComponentName mStoredHomeComponent;
+    private long mStoredHomeVersion;
+    private Signature[] mStoredHomeSigs;
+
     private boolean mHasMetadata;
+    private ComponentName mRestoredHome;
+    private long mRestoredHomeVersion;
+    private String mRestoredHomeInstaller;
+    private Signature[] mRestoredHomeSignatures;
 
     public class Metadata {
         public int versionCode;
@@ -136,7 +153,50 @@
             mExisting.clear();
         }
 
+        long homeVersion = 0;
+        Signature[] homeSigs = null;
+        PackageInfo homeInfo = null;
+        String homeInstaller = null;
+        ComponentName home = getPreferredHomeComponent();
+        if (home != null) {
+            try {
+                homeInfo = mPackageManager.getPackageInfo(home.getPackageName(),
+                        PackageManager.GET_SIGNATURES);
+                homeInstaller = mPackageManager.getInstallerPackageName(home.getPackageName());
+                homeVersion = homeInfo.versionCode;
+                homeSigs = homeInfo.signatures;
+            } catch (NameNotFoundException e) {
+                Slog.w(TAG, "Can't access preferred home info");
+                // proceed as though there were no preferred home set
+                home = null;
+            }
+        }
+
         try {
+            // We need to push a new preferred-home-app record if:
+            //    1. the version of the home app has changed since our last backup;
+            //    2. the home app [or absence] we now use differs from the prior state,
+            // OR 3. it looks like we use the same home app + version as before, but
+            //       the signatures don't match so we treat them as different apps.
+            final boolean needHomeBackup = (homeVersion != mStoredHomeVersion)
+                    || Objects.equals(home, mStoredHomeComponent)
+                    || (home != null
+                        && !BackupManagerService.signaturesMatch(mStoredHomeSigs, homeInfo));
+            if (needHomeBackup) {
+                if (DEBUG) {
+                    Slog.i(TAG, "Home preference changed; backing up new state " + home);
+                }
+                if (home != null) {
+                    outputBufferStream.writeUTF(home.flattenToString());
+                    outputBufferStream.writeLong(homeVersion);
+                    outputBufferStream.writeUTF(homeInstaller != null ? homeInstaller : "" );
+                    writeSignatureArray(outputBufferStream, homeSigs);
+                    writeEntity(data, DEFAULT_HOME_KEY, outputBuffer.toByteArray());
+                } else {
+                    data.writeEntityHeader(DEFAULT_HOME_KEY, -1);
+                }
+            }
+
             /*
              * Global metadata:
              *
@@ -146,6 +206,7 @@
              * String incremental -- the incremental release name of the OS stored in
              *                       the backup set.
              */
+            outputBuffer.reset();
             if (!mExisting.contains(GLOBAL_METADATA_KEY)) {
                 if (DEBUG) Slog.v(TAG, "Storing global metadata key");
                 outputBufferStream.writeInt(Build.VERSION.SDK_INT);
@@ -238,7 +299,7 @@
         }
 
         // Finally, write the new state blob -- just the list of all apps we handled
-        writeStateFile(mAllPackages, newState);
+        writeStateFile(mAllPackages, home, homeVersion, homeSigs, newState);
     }
     
     private static void writeEntity(BackupDataOutput data, String key, byte[] bytes)
@@ -286,6 +347,19 @@
                             + " (" + mStoredIncrementalVersion + " vs "
                             + Build.VERSION.INCREMENTAL + ")");
                 }
+            } else if (key.equals(DEFAULT_HOME_KEY)) {
+                String cn = inputBufferStream.readUTF();
+                mRestoredHome = ComponentName.unflattenFromString(cn);
+                mRestoredHomeVersion = inputBufferStream.readLong();
+                mRestoredHomeInstaller = inputBufferStream.readUTF();
+                mRestoredHomeSignatures = readSignatureArray(inputBufferStream);
+                if (DEBUG) {
+                    Slog.i(TAG, "   read preferred home app " + mRestoredHome
+                            + " version=" + mRestoredHomeVersion
+                            + " installer=" + mRestoredHomeVersion
+                            + " sig=" + mRestoredHomeVersion);
+                }
+
             } else {
                 // it's a file metadata record
                 int versionCode = inputBufferStream.readInt();
@@ -365,18 +439,34 @@
         mStateVersions.clear();
         mStoredSdkVersion = 0;
         mStoredIncrementalVersion = null;
+        mStoredHomeComponent = null;
+        mStoredHomeVersion = 0;
+        mStoredHomeSigs = null;
 
         // The state file is just the list of app names we have stored signatures for
         // with the exception of the metadata block, to which is also appended the
         // version numbers corresponding with the last time we wrote this PM block.
         // If they mismatch the current system, we'll re-store the metadata key.
         FileInputStream instream = new FileInputStream(stateFile.getFileDescriptor());
-        DataInputStream in = new DataInputStream(instream);
+        BufferedInputStream inbuffer = new BufferedInputStream(instream);
+        DataInputStream in = new DataInputStream(inbuffer);
 
-        int bufSize = 256;
-        byte[] buf = new byte[bufSize];
         try {
             String pkg = in.readUTF();
+
+            // First comes the preferred home app data, if any, headed by the DEFAULT_HOME_KEY tag
+            if (pkg.equals(DEFAULT_HOME_KEY)) {
+                // flattened component name, version, signature of the home app
+                mStoredHomeComponent = ComponentName.unflattenFromString(in.readUTF());
+                mStoredHomeVersion = in.readLong();
+                mStoredHomeSigs = readSignatureArray(in);
+
+                pkg = in.readUTF(); // set up for the next block of state
+            } else {
+                // else no preferred home app on the ancestral device - fall through to the rest
+            }
+
+            // After (possible) home app data comes the global metadata block
             if (pkg.equals(GLOBAL_METADATA_KEY)) {
                 mStoredSdkVersion = in.readInt();
                 mStoredIncrementalVersion = in.readUTF();
@@ -386,7 +476,7 @@
                 return;
             }
 
-            // The global metadata was first; now read all the apps
+            // The global metadata was last; now read all the apps
             while (true) {
                 pkg = in.readUTF();
                 int versionCode = in.readInt();
@@ -401,13 +491,28 @@
         }
     }
 
-    // Util: write out our new backup state file
-    private void writeStateFile(List<PackageInfo> pkgs, ParcelFileDescriptor stateFile) {
-        FileOutputStream outstream = new FileOutputStream(stateFile.getFileDescriptor());
-        DataOutputStream out = new DataOutputStream(outstream);
+    private ComponentName getPreferredHomeComponent() {
+        return mPackageManager.getHomeActivities(new ArrayList<ResolveInfo>());
+    }
 
+    // Util: write out our new backup state file
+    private void writeStateFile(List<PackageInfo> pkgs, ComponentName preferredHome,
+            long homeVersion, Signature[] homeSignatures, ParcelFileDescriptor stateFile) {
+        FileOutputStream outstream = new FileOutputStream(stateFile.getFileDescriptor());
+        BufferedOutputStream outbuf = new BufferedOutputStream(outstream);
+        DataOutputStream out = new DataOutputStream(outbuf);
+
+        // by the time we get here we know we've done all our backing up
         try {
-            // by the time we get here we know we've stored the global metadata record
+            // If we remembered a preferred home app, record that
+            if (preferredHome != null) {
+                out.writeUTF(DEFAULT_HOME_KEY);
+                out.writeUTF(preferredHome.flattenToString());
+                out.writeLong(homeVersion);
+                writeSignatureArray(out, homeSignatures);
+            }
+
+            // Conclude with the metadata block
             out.writeUTF(GLOBAL_METADATA_KEY);
             out.writeInt(Build.VERSION.SDK_INT);
             out.writeUTF(Build.VERSION.INCREMENTAL);
@@ -417,9 +522,10 @@
                 out.writeUTF(pkg.packageName);
                 out.writeInt(pkg.versionCode);
             }
+
+            out.flush();
         } catch (IOException e) {
             Slog.e(TAG, "Unable to write package manager state file!");
-            return;
         }
     }
 }
diff --git a/services/core/java/com/android/server/AlarmManagerService.java b/services/core/java/com/android/server/AlarmManagerService.java
index c14ed8b..168742f 100644
--- a/services/core/java/com/android/server/AlarmManagerService.java
+++ b/services/core/java/com/android/server/AlarmManagerService.java
@@ -39,8 +39,10 @@
 import android.os.UserHandle;
 import android.os.WorkSource;
 import android.text.TextUtils;
+import android.util.ArrayMap;
 import android.util.Pair;
 import android.util.Slog;
+import android.util.SparseArray;
 import android.util.TimeUtils;
 
 import java.io.ByteArrayOutputStream;
@@ -53,9 +55,7 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.LinkedList;
-import java.util.Map;
 import java.util.TimeZone;
 
 import static android.app.AlarmManager.RTC_WAKEUP;
@@ -103,6 +103,7 @@
     private long mNextNonWakeup;
     int mBroadcastRefCount = 0;
     PowerManager.WakeLock mWakeLock;
+    boolean mLastWakeLockUnimportantForLogging;
     ArrayList<InFlight> mInFlight = new ArrayList<InFlight>();
     final AlarmHandler mHandler = new AlarmHandler();
     ClockReceiver mClockReceiver;
@@ -313,7 +314,22 @@
             return 0;
         }
     }
-    
+
+    final Comparator<Alarm> mAlarmDispatchComparator = new Comparator<Alarm>() {
+        @Override
+        public int compare(Alarm lhs, Alarm rhs) {
+            if (lhs.wakeup != rhs.wakeup) {
+                return lhs.wakeup ? -1 : 1;
+            }
+            if (lhs.whenElapsed < rhs.whenElapsed) {
+                return -1;
+            } else if (lhs.whenElapsed > rhs.whenElapsed) {
+                return 1;
+            }
+            return 0;
+        }
+    };
+
     // minimum recurrence period or alarm futurity for us to be able to fuzz it
     static final long MIN_FUZZABLE_INTERVAL = 10000;
     static final BatchTimeOrder sBatchOrder = new BatchTimeOrder();
@@ -411,8 +427,10 @@
         final Pair<String, ComponentName> mTarget;
         final BroadcastStats mBroadcastStats;
         final FilterStats mFilterStats;
+        final int mAlarmType;
 
-        InFlight(AlarmManagerService service, PendingIntent pendingIntent, WorkSource workSource) {
+        InFlight(AlarmManagerService service, PendingIntent pendingIntent, WorkSource workSource,
+                int alarmType) {
             mPendingIntent = pendingIntent;
             mWorkSource = workSource;
             Intent intent = pendingIntent.getIntent();
@@ -426,6 +444,7 @@
                 mBroadcastStats.filterStats.put(mTarget, fs);
             }
             mFilterStats = fs;
+            mAlarmType = alarmType;
         }
     }
 
@@ -446,6 +465,7 @@
     }
     
     static final class BroadcastStats {
+        final int mUid;
         final String mPackageName;
 
         long aggregateTime;
@@ -453,16 +473,17 @@
         int numWakeup;
         long startTime;
         int nesting;
-        final HashMap<Pair<String, ComponentName>, FilterStats> filterStats
-                = new HashMap<Pair<String, ComponentName>, FilterStats>();
+        final ArrayMap<Pair<String, ComponentName>, FilterStats> filterStats
+                = new ArrayMap<Pair<String, ComponentName>, FilterStats>();
 
-        BroadcastStats(String packageName) {
+        BroadcastStats(int uid, String packageName) {
+            mUid = uid;
             mPackageName = packageName;
         }
     }
     
-    final HashMap<String, BroadcastStats> mBroadcastStats
-            = new HashMap<String, BroadcastStats>();
+    final SparseArray<ArrayMap<String, BroadcastStats>> mBroadcastStats
+            = new SparseArray<ArrayMap<String, BroadcastStats>>();
     
     @Override
     public void onStart() {
@@ -474,8 +495,8 @@
         setTimeZoneImpl(SystemProperties.get(TIMEZONE_PROPERTY));
 
         PowerManager pm = (PowerManager) getContext().getSystemService(Context.POWER_SERVICE);
-        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
-        
+        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*alarm*");
+
         mTimeTickSender = PendingIntent.getBroadcastAsUser(getContext(), 0,
                 new Intent(Intent.ACTION_TIME_TICK).addFlags(
                         Intent.FLAG_RECEIVER_REGISTERED_ONLY
@@ -754,24 +775,26 @@
                 }
             };
             int len = 0;
-            for (Map.Entry<String, BroadcastStats> be : mBroadcastStats.entrySet()) {
-                BroadcastStats bs = be.getValue();
-                for (Map.Entry<Pair<String, ComponentName>, FilterStats> fe
-                        : bs.filterStats.entrySet()) {
-                    FilterStats fs = fe.getValue();
-                    int pos = len > 0
-                            ? Arrays.binarySearch(topFilters, 0, len, fs, comparator) : 0;
-                    if (pos < 0) {
-                        pos = -pos - 1;
-                    }
-                    if (pos < topFilters.length) {
-                        int copylen = topFilters.length - pos - 1;
-                        if (copylen > 0) {
-                            System.arraycopy(topFilters, pos, topFilters, pos+1, copylen);
+            for (int iu=0; iu<mBroadcastStats.size(); iu++) {
+                ArrayMap<String, BroadcastStats> uidStats = mBroadcastStats.valueAt(iu);
+                for (int ip=0; ip<uidStats.size(); ip++) {
+                    BroadcastStats bs = uidStats.valueAt(ip);
+                    for (int is=0; is<bs.filterStats.size(); is++) {
+                        FilterStats fs = bs.filterStats.valueAt(is);
+                        int pos = len > 0
+                                ? Arrays.binarySearch(topFilters, 0, len, fs, comparator) : 0;
+                        if (pos < 0) {
+                            pos = -pos - 1;
                         }
-                        topFilters[pos] = fs;
-                        if (len < topFilters.length) {
-                            len++;
+                        if (pos < topFilters.length) {
+                            int copylen = topFilters.length - pos - 1;
+                            if (copylen > 0) {
+                                System.arraycopy(topFilters, pos, topFilters, pos+1, copylen);
+                            }
+                            topFilters[pos] = fs;
+                            if (len < topFilters.length) {
+                                len++;
+                            }
                         }
                     }
                 }
@@ -785,7 +808,8 @@
                     TimeUtils.formatDuration(fs.aggregateTime, pw);
                     pw.print(" running, "); pw.print(fs.numWakeup);
                     pw.print(" wakeups, "); pw.print(fs.count);
-                    pw.print(" alarms: "); pw.print(fs.mBroadcastStats.mPackageName);
+                    pw.print(" alarms: "); UserHandle.formatUid(pw, fs.mBroadcastStats.mUid);
+                    pw.print(":"); pw.print(fs.mBroadcastStats.mPackageName);
                     pw.println();
                     pw.print("      ");
                     if (fs.mTarget.first != null) {
@@ -801,35 +825,39 @@
             pw.println(" ");
             pw.println("  Alarm Stats:");
             final ArrayList<FilterStats> tmpFilters = new ArrayList<FilterStats>();
-            for (Map.Entry<String, BroadcastStats> be : mBroadcastStats.entrySet()) {
-                BroadcastStats bs = be.getValue();
-                pw.print("  ");
-                if (bs.nesting > 0) pw.print("*ACTIVE* ");
-                pw.print(be.getKey());
-                pw.print(" "); TimeUtils.formatDuration(bs.aggregateTime, pw);
-                        pw.print(" running, "); pw.print(bs.numWakeup);
-                        pw.println(" wakeups:");
-                tmpFilters.clear();
-                for (Map.Entry<Pair<String, ComponentName>, FilterStats> fe
-                        : bs.filterStats.entrySet()) {
-                    tmpFilters.add(fe.getValue());
-                }
-                Collections.sort(tmpFilters, comparator);
-                for (int i=0; i<tmpFilters.size(); i++) {
-                    FilterStats fs = tmpFilters.get(i);
-                    pw.print("    ");
-                            if (fs.nesting > 0) pw.print("*ACTIVE* ");
-                            TimeUtils.formatDuration(fs.aggregateTime, pw);
-                            pw.print(" "); pw.print(fs.numWakeup);
-                            pw.print(" wakes " ); pw.print(fs.count);
-                            pw.print(" alarms:");
-                            if (fs.mTarget.first != null) {
-                                pw.print(" act="); pw.print(fs.mTarget.first);
-                            }
-                            if (fs.mTarget.second != null) {
-                                pw.print(" cmp="); pw.print(fs.mTarget.second.toShortString());
-                            }
-                            pw.println();
+            for (int iu=0; iu<mBroadcastStats.size(); iu++) {
+                ArrayMap<String, BroadcastStats> uidStats = mBroadcastStats.valueAt(iu);
+                for (int ip=0; ip<uidStats.size(); ip++) {
+                    BroadcastStats bs = uidStats.valueAt(ip);
+                    pw.print("  ");
+                    if (bs.nesting > 0) pw.print("*ACTIVE* ");
+                    UserHandle.formatUid(pw, bs.mUid);
+                    pw.print(":");
+                    pw.print(bs.mPackageName);
+                    pw.print(" "); TimeUtils.formatDuration(bs.aggregateTime, pw);
+                            pw.print(" running, "); pw.print(bs.numWakeup);
+                            pw.println(" wakeups:");
+                    tmpFilters.clear();
+                    for (int is=0; is<bs.filterStats.size(); is++) {
+                        tmpFilters.add(bs.filterStats.valueAt(is));
+                    }
+                    Collections.sort(tmpFilters, comparator);
+                    for (int i=0; i<tmpFilters.size(); i++) {
+                        FilterStats fs = tmpFilters.get(i);
+                        pw.print("    ");
+                                if (fs.nesting > 0) pw.print("*ACTIVE* ");
+                                TimeUtils.formatDuration(fs.aggregateTime, pw);
+                                pw.print(" "); pw.print(fs.numWakeup);
+                                pw.print(" wakes " ); pw.print(fs.count);
+                                pw.print(" alarms:");
+                                if (fs.mTarget.first != null) {
+                                    pw.print(" act="); pw.print(fs.mTarget.first);
+                                }
+                                if (fs.mTarget.second != null) {
+                                    pw.print(" cmp="); pw.print(fs.mTarget.second.toShortString());
+                                }
+                                pw.println();
+                    }
                 }
             }
 
@@ -1049,7 +1077,8 @@
     private native int setKernelTime(long nativeData, long millis);
     private native int setKernelTimezone(long nativeData, int minuteswest);
 
-    void triggerAlarmsLocked(ArrayList<Alarm> triggerList, long nowELAPSED, long nowRTC) {
+    void triggerAlarmsLocked(ArrayList<Alarm> triggerList, final long nowELAPSED,
+            final long nowRTC) {
         // batches are temporally sorted, so we need only pull from the
         // start of the list until we either empty it or hit a batch
         // that is not yet deliverable
@@ -1088,6 +1117,14 @@
 
             }
         }
+
+        Collections.sort(triggerList, mAlarmDispatchComparator);
+
+        if (localLOGV) {
+            for (int i=0; i<triggerList.size(); i++) {
+                Slog.v(TAG, "Triggering alarm #" + i + ": " + triggerList.get(i));
+            }
+        }
     }
 
     /**
@@ -1108,7 +1145,8 @@
     }
     
     private static class Alarm {
-        public int type;
+        public final int type;
+        public final boolean wakeup;
         public int count;
         public long when;
         public long windowLength;
@@ -1121,6 +1159,8 @@
         public Alarm(int _type, long _when, long _whenElapsed, long _windowLength, long _maxWhen,
                 long _interval, PendingIntent _op, WorkSource _ws) {
             type = _type;
+            wakeup = _type == AlarmManager.ELAPSED_REALTIME_WAKEUP
+                    || _type == AlarmManager.RTC_WAKEUP;
             when = _when;
             whenElapsed = _whenElapsed;
             windowLength = _windowLength;
@@ -1138,6 +1178,8 @@
             sb.append(Integer.toHexString(System.identityHashCode(this)));
             sb.append(" type ");
             sb.append(type);
+            sb.append(" when ");
+            sb.append(when);
             sb.append(" ");
             sb.append(operation.getTargetPackage());
             sb.append('}');
@@ -1242,11 +1284,12 @@
                             
                             // we have an active broadcast so stay awake.
                             if (mBroadcastRefCount == 0) {
-                                setWakelockWorkSource(alarm.operation, alarm.workSource);
+                                setWakelockWorkSource(alarm.operation, alarm.workSource,
+                                        alarm.type, true);
                                 mWakeLock.acquire();
                             }
                             final InFlight inflight = new InFlight(AlarmManagerService.this,
-                                    alarm.operation, alarm.workSource);
+                                    alarm.operation, alarm.workSource, alarm.type);
                             mInFlight.add(inflight);
                             mBroadcastRefCount++;
 
@@ -1270,8 +1313,16 @@
                                     || alarm.type == RTC_WAKEUP) {
                                 bs.numWakeup++;
                                 fs.numWakeup++;
-                                ActivityManagerNative.noteWakeupAlarm(
-                                        alarm.operation);
+                                if (alarm.workSource != null && alarm.workSource.size() > 0) {
+                                    for (int wi=0; wi<alarm.workSource.size(); wi++) {
+                                        ActivityManagerNative.noteWakeupAlarm(
+                                                alarm.operation, alarm.workSource.get(wi),
+                                                alarm.workSource.getName(wi));
+                                    }
+                                } else {
+                                    ActivityManagerNative.noteWakeupAlarm(
+                                            alarm.operation, -1, null);
+                                }
                             }
                         } catch (PendingIntent.CanceledException e) {
                             if (alarm.repeatInterval > 0) {
@@ -1293,8 +1344,18 @@
      * @param pi PendingIntent to attribute blame to if ws is null.
      * @param ws WorkSource to attribute blame.
      */
-    void setWakelockWorkSource(PendingIntent pi, WorkSource ws) {
+    void setWakelockWorkSource(PendingIntent pi, WorkSource ws, int type, boolean first) {
         try {
+            final boolean unimportant = pi == mTimeTickSender;
+            mWakeLock.setUnimportantForLogging(unimportant);
+            if (first || mLastWakeLockUnimportantForLogging) {
+                mWakeLock.setHistoryTag(pi.getTag(
+                        type == ELAPSED_REALTIME_WAKEUP || type == RTC_WAKEUP
+                                ? "*walarm*:" : "*alarm*:"));
+            } else {
+                mWakeLock.setHistoryTag(null);
+            }
+            mLastWakeLockUnimportantForLogging = unimportant;
             if (ws != null) {
                 mWakeLock.setWorkSource(ws);
                 return;
@@ -1454,7 +1515,14 @@
                 if (pkgList != null && (pkgList.length > 0)) {
                     for (String pkg : pkgList) {
                         removeLocked(pkg);
-                        mBroadcastStats.remove(pkg);
+                        for (int i=mBroadcastStats.size()-1; i>=0; i--) {
+                            ArrayMap<String, BroadcastStats> uidStats = mBroadcastStats.valueAt(i);
+                            if (uidStats.remove(pkg) != null) {
+                                if (uidStats.size() <= 0) {
+                                    mBroadcastStats.removeAt(i);
+                                }
+                            }
+                        }
                     }
                 }
             }
@@ -1462,11 +1530,17 @@
     }
     
     private final BroadcastStats getStatsLocked(PendingIntent pi) {
-        String pkg = pi.getTargetPackage();
-        BroadcastStats bs = mBroadcastStats.get(pkg);
+        String pkg = pi.getCreatorPackage();
+        int uid = pi.getCreatorUid();
+        ArrayMap<String, BroadcastStats> uidStats = mBroadcastStats.get(uid);
+        if (uidStats == null) {
+            uidStats = new ArrayMap<String, BroadcastStats>();
+            mBroadcastStats.put(uid, uidStats);
+        }
+        BroadcastStats bs = uidStats.get(pkg);
         if (bs == null) {
-            bs = new BroadcastStats(pkg);
-            mBroadcastStats.put(pkg, bs);
+            bs = new BroadcastStats(uid, pkg);
+            uidStats.put(pkg, bs);
         }
         return bs;
     }
@@ -1514,7 +1588,8 @@
                     // the next of our alarms is now in flight.  reattribute the wakelock.
                     if (mInFlight.size() > 0) {
                         InFlight inFlight = mInFlight.get(0);
-                        setWakelockWorkSource(inFlight.mPendingIntent, inFlight.mWorkSource);
+                        setWakelockWorkSource(inFlight.mPendingIntent, inFlight.mWorkSource,
+                                inFlight.mAlarmType, false);
                     } else {
                         // should never happen
                         mLog.w("Alarm wakelock still held but sent queue empty");
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index e5615c0..e26747c 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -33,6 +33,7 @@
 import android.content.Context;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.media.AudioService;
 import android.os.AsyncTask;
 import android.os.Binder;
 import android.os.Handler;
@@ -42,6 +43,7 @@
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.util.ArrayMap;
+import android.util.ArraySet;
 import android.util.AtomicFile;
 import android.util.Log;
 import android.util.Pair;
@@ -123,6 +125,8 @@
             = new ArrayMap<String, ArrayList<Callback>>();
     final ArrayMap<IBinder, Callback> mModeWatchers
             = new ArrayMap<IBinder, Callback>();
+    final SparseArray<SparseArray<Restriction>> mAudioRestrictions
+            = new SparseArray<SparseArray<Restriction>>();
 
     public final class Callback implements DeathRecipient {
         final IAppOpsCallback mCallback;
@@ -553,6 +557,58 @@
     }
 
     @Override
+    public int checkAudioOperation(int code, int stream, int uid, String packageName) {
+        synchronized (this) {
+            final int mode = checkRestrictionLocked(code, stream, uid, packageName);
+            if (mode != AppOpsManager.MODE_ALLOWED) {
+                return mode;
+            }
+        }
+        return checkOperation(code, uid, packageName);
+    }
+
+    private int checkRestrictionLocked(int code, int stream, int uid, String packageName) {
+        final SparseArray<Restriction> streamRestrictions = mAudioRestrictions.get(code);
+        if (streamRestrictions != null) {
+            final Restriction r = streamRestrictions.get(stream);
+            if (r != null && !r.exceptionPackages.contains(packageName)) {
+                return r.mode;
+            }
+        }
+        return AppOpsManager.MODE_ALLOWED;
+    }
+
+    @Override
+    public void setAudioRestriction(int code, int stream, int uid, int mode,
+            String[] exceptionPackages) {
+        verifyIncomingUid(uid);
+        verifyIncomingOp(code);
+        synchronized (this) {
+            SparseArray<Restriction> streamRestrictions = mAudioRestrictions.get(code);
+            if (streamRestrictions == null) {
+                streamRestrictions = new SparseArray<Restriction>();
+                mAudioRestrictions.put(code, streamRestrictions);
+            }
+            streamRestrictions.remove(stream);
+            if (mode != AppOpsManager.MODE_ALLOWED) {
+                final Restriction r = new Restriction();
+                r.mode = mode;
+                if (exceptionPackages != null) {
+                    final int N = exceptionPackages.length;
+                    r.exceptionPackages = new ArraySet<String>(N);
+                    for (int i = 0; i < N; i++) {
+                        final String pkg = exceptionPackages[i];
+                        if (pkg != null) {
+                            r.exceptionPackages.add(pkg.trim());
+                        }
+                    }
+                }
+                streamRestrictions.put(stream, r);
+            }
+        }
+    }
+
+    @Override
     public int checkPackage(int uid, String packageName) {
         synchronized (this) {
             if (getOpsLocked(uid, packageName, true) != null) {
@@ -1048,6 +1104,31 @@
                     }
                 }
             }
+            if (mAudioRestrictions.size() > 0) {
+                boolean printedHeader = false;
+                for (int o=0; o<mAudioRestrictions.size(); o++) {
+                    final String op = AppOpsManager.opToName(mAudioRestrictions.keyAt(o));
+                    final SparseArray<Restriction> restrictions = mAudioRestrictions.valueAt(o);
+                    for (int i=0; i<restrictions.size(); i++) {
+                        if (!printedHeader){
+                            pw.println("  Audio Restrictions:");
+                            printedHeader = true;
+                            needSep = true;
+                        }
+                        final int stream = restrictions.keyAt(i);
+                        pw.print("    "); pw.print(op);
+                        pw.print(" stream="); pw.print(AudioService.streamToString(stream));
+                        Restriction r = restrictions.valueAt(i);
+                        pw.print(": mode="); pw.println(r.mode);
+                        if (!r.exceptionPackages.isEmpty()) {
+                            pw.println("      Exceptions:");
+                            for (int j=0; j<r.exceptionPackages.size(); j++) {
+                                pw.print("        "); pw.println(r.exceptionPackages.valueAt(j));
+                            }
+                        }
+                    }
+                }
+            }
             if (needSep) {
                 pw.println();
             }
@@ -1080,4 +1161,10 @@
             }
         }
     }
+
+    private static final class Restriction {
+        private static final ArraySet<String> NO_EXCEPTIONS = new ArraySet<String>();
+        int mode;
+        ArraySet<String> exceptionPackages = NO_EXCEPTIONS;
+    }
 }
diff --git a/services/core/java/com/android/server/BatteryService.java b/services/core/java/com/android/server/BatteryService.java
index cc9055d..cb5946a 100644
--- a/services/core/java/com/android/server/BatteryService.java
+++ b/services/core/java/com/android/server/BatteryService.java
@@ -108,6 +108,7 @@
     private final Object mLock = new Object();
 
     private BatteryProperties mBatteryProps;
+    private final BatteryProperties mLastBatteryProps = new BatteryProperties();
     private boolean mBatteryLevelCritical;
     private int mLastBatteryStatus;
     private int mLastBatteryHealth;
@@ -157,7 +158,7 @@
                     "DEVPATH=/devices/virtual/switch/invalid_charger");
         }
 
-        IBinder b = ServiceManager.getService("batterypropreg");
+        IBinder b = ServiceManager.getService("batteryproperties");
         final IBatteryPropertiesRegistrar batteryPropertiesRegistrar =
                 IBatteryPropertiesRegistrar.Stub.asInterface(b);
         try {
@@ -281,6 +282,8 @@
                 mBatteryProps = props;
                 // Process the new values.
                 processValuesLocked();
+            } else {
+                mLastBatteryProps.set(props);
             }
         }
     }
@@ -311,8 +314,6 @@
                     + ", batteryLevel=" + mBatteryProps.batteryLevel
                     + ", batteryTechnology=" + mBatteryProps.batteryTechnology
                     + ", batteryVoltage=" + mBatteryProps.batteryVoltage
-                    + ", batteryCurrentNow=" + mBatteryProps.batteryCurrentNow
-                    + ", batteryChargeCounter=" + mBatteryProps.batteryChargeCounter
                     + ", batteryTemperature=" + mBatteryProps.batteryTemperature
                     + ", mBatteryLevelCritical=" + mBatteryLevelCritical
                     + ", mPlugType=" + mPlugType);
@@ -613,21 +614,15 @@
                 pw.println("  level: " + mBatteryProps.batteryLevel);
                 pw.println("  scale: " + BATTERY_SCALE);
                 pw.println("  voltage: " + mBatteryProps.batteryVoltage);
-
-                if (mBatteryProps.batteryCurrentNow != Integer.MIN_VALUE) {
-                    pw.println("  current now: " + mBatteryProps.batteryCurrentNow);
-                }
-
-                if (mBatteryProps.batteryChargeCounter != Integer.MIN_VALUE) {
-                    pw.println("  charge counter: " + mBatteryProps.batteryChargeCounter);
-                }
-
                 pw.println("  temperature: " + mBatteryProps.batteryTemperature);
                 pw.println("  technology: " + mBatteryProps.batteryTechnology);
             } else if (args.length == 3 && "set".equals(args[0])) {
                 String key = args[1];
                 String value = args[2];
                 try {
+                    if (!mUpdatesStopped) {
+                        mLastBatteryProps.set(mBatteryProps);
+                    }
                     boolean update = true;
                     if ("ac".equals(key)) {
                         mBatteryProps.chargerAcOnline = Integer.parseInt(value) != 0;
@@ -660,13 +655,17 @@
             } else if (args.length == 1 && "reset".equals(args[0])) {
                 long ident = Binder.clearCallingIdentity();
                 try {
-                    mUpdatesStopped = false;
+                    if (mUpdatesStopped) {
+                        mUpdatesStopped = false;
+                        mBatteryProps.set(mLastBatteryProps);
+                        processValuesLocked();
+                    }
                 } finally {
                     Binder.restoreCallingIdentity(ident);
                 }
             } else {
                 pw.println("Dump current battery state, or:");
-                pw.println("  set ac|usb|wireless|status|level|invalid <value>");
+                pw.println("  set [ac|usb|wireless|status|level|invalid] <value>");
                 pw.println("  reset");
             }
         }
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 546324a..0d6f548 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -1005,7 +1005,7 @@
                         mState = BluetoothAdapter.STATE_OFF;
                         // enable
                         handleEnable(mQuietEnable);
-		    } else if (mBinding || mBluetooth != null) {
+                    } else if (mBinding || mBluetooth != null) {
                         Message userMsg = mHandler.obtainMessage(MESSAGE_USER_SWITCHED);
                         userMsg.arg2 = 1 + msg.arg2;
                         // if user is switched when service is being binding
@@ -1014,7 +1014,7 @@
                         if (DBG) {
                             Log.d(TAG, "delay MESSAGE_USER_SWITCHED " + userMsg.arg2);
                         }
-		    }
+                    }
                     break;
                 }
             }
diff --git a/services/core/java/com/android/server/BootReceiver.java b/services/core/java/com/android/server/BootReceiver.java
index bce85ce..7249985 100644
--- a/services/core/java/com/android/server/BootReceiver.java
+++ b/services/core/java/com/android/server/BootReceiver.java
@@ -106,22 +106,33 @@
             .append("Kernel: ")
             .append(FileUtils.readTextFile(new File("/proc/version"), 1024, "...\n"))
             .append("\n").toString();
+        final String bootReason = SystemProperties.get("ro.boot.bootreason", null);
 
         String recovery = RecoverySystem.handleAftermath();
         if (recovery != null && db != null) {
             db.addText("SYSTEM_RECOVERY_LOG", headers + recovery);
         }
 
+        String lastKmsgFooter = "";
+        if (bootReason != null) {
+            lastKmsgFooter = new StringBuilder(512)
+                .append("\n")
+                .append("Boot info:\n")
+                .append("Last boot reason: ").append(bootReason).append("\n")
+                .toString();
+        }
+
         if (SystemProperties.getLong("ro.runtime.firstboot", 0) == 0) {
             String now = Long.toString(System.currentTimeMillis());
             SystemProperties.set("ro.runtime.firstboot", now);
             if (db != null) db.addText("SYSTEM_BOOT", headers);
 
             // Negative sizes mean to take the *tail* of the file (see FileUtils.readTextFile())
-            addFileToDropBox(db, prefs, headers, "/proc/last_kmsg",
-                    -LOG_SIZE, "SYSTEM_LAST_KMSG");
-            addFileToDropBox(db, prefs, headers, "/sys/fs/pstore/console-ramoops",
-                    -LOG_SIZE, "SYSTEM_LAST_KMSG");
+            addFileWithFootersToDropBox(db, prefs, headers, lastKmsgFooter,
+                    "/proc/last_kmsg", -LOG_SIZE, "SYSTEM_LAST_KMSG");
+            addFileWithFootersToDropBox(db, prefs, headers, lastKmsgFooter,
+                    "/sys/fs/pstore/console-ramoops", -LOG_SIZE,
+                    "SYSTEM_LAST_KMSG");
             addFileToDropBox(db, prefs, headers, "/cache/recovery/log",
                     -LOG_SIZE, "SYSTEM_RECOVERY_LOG");
             addFileToDropBox(db, prefs, headers, "/data/dontpanic/apanic_console",
@@ -161,6 +172,14 @@
     private static void addFileToDropBox(
             DropBoxManager db, SharedPreferences prefs,
             String headers, String filename, int maxSize, String tag) throws IOException {
+        addFileWithFootersToDropBox(db, prefs, headers, "", filename, maxSize,
+                tag);
+    }
+
+    private static void addFileWithFootersToDropBox(
+            DropBoxManager db, SharedPreferences prefs,
+            String headers, String footers, String filename, int maxSize,
+            String tag) throws IOException {
         if (db == null || !db.isTagEnabled(tag)) return;  // Logging disabled
 
         File file = new File(filename);
@@ -176,7 +195,7 @@
         }
 
         Slog.i(TAG, "Copying " + filename + " to DropBox (" + tag + ")");
-        db.addText(tag, headers + FileUtils.readTextFile(file, maxSize, "[[TRUNCATED]]\n"));
+        db.addText(tag, headers + FileUtils.readTextFile(file, maxSize, "[[TRUNCATED]]\n") + footers);
     }
 
     private static void addAuditErrorsToDropBox(DropBoxManager db,  SharedPreferences prefs,
diff --git a/services/core/java/com/android/server/CommonTimeManagementService.java b/services/core/java/com/android/server/CommonTimeManagementService.java
index 710fb9d..60b366a 100644
--- a/services/core/java/com/android/server/CommonTimeManagementService.java
+++ b/services/core/java/com/android/server/CommonTimeManagementService.java
@@ -18,7 +18,6 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.net.InetAddress;
 
 import android.content.BroadcastReceiver;
 import android.content.Context;
@@ -26,10 +25,8 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.net.ConnectivityManager;
-import android.net.IConnectivityManager;
 import android.net.INetworkManagementEventObserver;
 import android.net.InterfaceConfiguration;
-import android.net.NetworkInfo;
 import android.os.Binder;
 import android.os.CommonTimeConfig;
 import android.os.Handler;
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 57ee031..45cdb65 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -117,6 +117,7 @@
 import com.android.internal.telephony.DctConstants;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.internal.util.XmlUtils;
 import com.android.server.am.BatteryStatsService;
@@ -147,7 +148,6 @@
 import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.URL;
-import java.net.URLConnection;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -1183,9 +1183,9 @@
 
     private INetworkManagementEventObserver mDataActivityObserver = new BaseNetworkObserver() {
         @Override
-        public void interfaceClassDataActivityChanged(String label, boolean active) {
+        public void interfaceClassDataActivityChanged(String label, boolean active, long tsNanos) {
             int deviceType = Integer.parseInt(label);
-            sendDataActivityBroadcast(deviceType, active);
+            sendDataActivityBroadcast(deviceType, active, tsNanos);
         }
     };
 
@@ -1986,7 +1986,9 @@
         mNetTrackers[prevNetType].setTeardownRequested(false);
 
         // Remove idletimer previously setup in {@code handleConnect}
-        removeDataActivityTracking(prevNetType);
+        if (mNetConfigs[prevNetType].isDefault()) {
+            removeDataActivityTracking(prevNetType);
+        }
 
         /*
          * If the disconnected network is not the active one, then don't report
@@ -2167,10 +2169,11 @@
         sendStickyBroadcastDelayed(makeGeneralIntent(info, bcastType), delayMs);
     }
 
-    private void sendDataActivityBroadcast(int deviceType, boolean active) {
+    private void sendDataActivityBroadcast(int deviceType, boolean active, long tsNanos) {
         Intent intent = new Intent(ConnectivityManager.ACTION_DATA_ACTIVITY_CHANGE);
         intent.putExtra(ConnectivityManager.EXTRA_DEVICE_TYPE, deviceType);
         intent.putExtra(ConnectivityManager.EXTRA_IS_ACTIVE, active);
+        intent.putExtra(ConnectivityManager.EXTRA_REALTIME_NS, tsNanos);
         final long ident = Binder.clearCallingIdentity();
         try {
             mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL,
@@ -2318,8 +2321,6 @@
     private void handleConnect(NetworkInfo info) {
         final int newNetType = info.getType();
 
-        setupDataActivityTracking(newNetType);
-
         // snapshot isFailover, because sendConnectedBroadcast() resets it
         boolean isFailover = info.isFailover();
         final NetworkStateTracker thisNet = mNetTrackers[newNetType];
@@ -2357,6 +2358,7 @@
                         return;
                 }
             }
+            setupDataActivityTracking(newNetType);
             synchronized (ConnectivityService.this) {
                 // have a new default network, release the transition wakelock in a second
                 // if it's held.  The second pause is to allow apps to reconnect over the
@@ -2394,36 +2396,6 @@
         }
     }
 
-    private void handleCaptivePortalTrackerCheck(NetworkInfo info) {
-        if (DBG) log("Captive portal check " + info);
-        int type = info.getType();
-        final NetworkStateTracker thisNet = mNetTrackers[type];
-        if (mNetConfigs[type].isDefault()) {
-            if (mActiveDefaultNetwork != -1 && mActiveDefaultNetwork != type) {
-                if (isNewNetTypePreferredOverCurrentNetType(type)) {
-                    if (DBG) log("Captive check on " + info.getTypeName());
-                    mCaptivePortalTracker.detectCaptivePortal(new NetworkInfo(info));
-                    return;
-                } else {
-                    if (DBG) log("Tear down low priority net " + info.getTypeName());
-                    teardown(thisNet);
-                    return;
-                }
-            }
-        }
-
-        if (DBG) log("handleCaptivePortalTrackerCheck: call captivePortalCheckComplete ni=" + info);
-        thisNet.captivePortalCheckComplete();
-    }
-
-    /** @hide */
-    @Override
-    public void captivePortalCheckComplete(NetworkInfo info) {
-        enforceConnectivityInternalPermission();
-        if (DBG) log("captivePortalCheckComplete: ni=" + info);
-        mNetTrackers[info.getType()].captivePortalCheckComplete();
-    }
-
     /** @hide */
     @Override
     public void captivePortalCheckCompleted(NetworkInfo info, boolean isCaptivePortal) {
@@ -2436,7 +2408,7 @@
      * Setup data activity tracking for the given network interface.
      *
      * Every {@code setupDataActivityTracking} should be paired with a
-     * {@link removeDataActivityTracking} for cleanup.
+     * {@link #removeDataActivityTracking} for cleanup.
      */
     private void setupDataActivityTracking(int type) {
         final NetworkStateTracker thisNet = mNetTrackers[type];
@@ -2447,7 +2419,7 @@
         if (ConnectivityManager.isNetworkTypeMobile(type)) {
             timeout = Settings.Global.getInt(mContext.getContentResolver(),
                                              Settings.Global.DATA_ACTIVITY_TIMEOUT_MOBILE,
-                                             0);
+                                             5);
             // Canonicalize mobile network type
             type = ConnectivityManager.TYPE_MOBILE;
         } else if (ConnectivityManager.TYPE_WIFI == type) {
@@ -2461,8 +2433,10 @@
 
         if (timeout > 0 && iface != null) {
             try {
-                mNetd.addIdleTimer(iface, timeout, Integer.toString(type));
-            } catch (RemoteException e) {
+                mNetd.addIdleTimer(iface, timeout, type);
+            } catch (Exception e) {
+                // You shall not crash!
+                loge("Exception in setupDataActivityTracking " + e);
             }
         }
     }
@@ -2479,7 +2453,8 @@
             try {
                 // the call fails silently if no idletimer setup for this interface
                 mNetd.removeIdleTimer(iface);
-            } catch (RemoteException e) {
+            } catch (Exception e) {
+                loge("Exception in removeDataActivityTracking " + e);
             }
         }
     }
@@ -2534,9 +2509,9 @@
                                     "\n   car=" + car);
                         }
                     } else {
-                        if (DBG) {
-                            log("handleConnectivityChange: address are the same reset per doReset" +
-                                   " linkProperty[" + netType + "]:" +
+                        if (VDBG) {
+                            log("handleConnectivityChange: addresses are the same reset per" +
+                                   " doReset linkProperty[" + netType + "]:" +
                                    " resetMask=" + resetMask);
                         }
                     }
@@ -2727,7 +2702,7 @@
        final int mtu = nt.getLinkProperties().getMtu();
 
        if (mtu < 68 || mtu > 10000) {
-           loge("Unexpected mtu value: " + nt);
+           loge("Unexpected mtu value: " + mtu + ", " + nt);
            return;
        }
 
@@ -2974,6 +2949,9 @@
             }
         }
 
+        pw.print("Active default network: "); pw.println(getNetworkTypeName(mActiveDefaultNetwork));
+        pw.println();
+
         pw.println("Network Requester Pids:");
         pw.increaseIndent();
         for (int net : mPriorityList) {
@@ -3059,9 +3037,6 @@
                     if (info.getDetailedState() ==
                             NetworkInfo.DetailedState.FAILED) {
                         handleConnectionFailure(info);
-                    } else if (info.getDetailedState() ==
-                            DetailedState.CAPTIVE_PORTAL_CHECK) {
-                        handleCaptivePortalTrackerCheck(info);
                     } else if (info.isConnectedToProvisioningNetwork()) {
                         /**
                          * TODO: Create ConnectivityManager.TYPE_MOBILE_PROVISIONING
@@ -4629,10 +4604,13 @@
          * @param seconds
          */
         private static void sleep(int seconds) {
-            try {
-                Thread.sleep(seconds * 1000);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
+            long stopTime = System.nanoTime() + (seconds * 1000000000);
+            long sleepTime;
+            while ((sleepTime = stopTime - System.nanoTime()) > 0) {
+                try {
+                    Thread.sleep(sleepTime / 1000000);
+                } catch (InterruptedException ignored) {
+                }
             }
         }
 
@@ -4668,16 +4646,28 @@
             mdst.setEnableFailFastMobileData(DctConstants.ENABLED);
             mdst.enableMobileProvisioning(url);
         } else {
-            if (DBG) log("handleMobileProvisioningAction: not prov network, launch browser directly");
-            Intent newIntent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
-                    Intent.CATEGORY_APP_BROWSER);
-            newIntent.setData(Uri.parse(url));
-            newIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
-                    Intent.FLAG_ACTIVITY_NEW_TASK);
-            try {
-                mContext.startActivity(newIntent);
-            } catch (ActivityNotFoundException e) {
-                loge("handleMobileProvisioningAction: startActivity failed" + e);
+            if (DBG) log("handleMobileProvisioningAction: not prov network");
+            // Check for  apps that can handle provisioning first
+            Intent provisioningIntent = new Intent(TelephonyIntents.ACTION_CARRIER_SETUP);
+            provisioningIntent.addCategory(TelephonyIntents.CATEGORY_MCCMNC_PREFIX
+                    + mTelephonyManager.getSimOperator());
+            if (mContext.getPackageManager().resolveActivity(provisioningIntent, 0 /* flags */)
+                    != null) {
+                provisioningIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
+                        Intent.FLAG_ACTIVITY_NEW_TASK);
+                mContext.startActivity(provisioningIntent);
+            } else {
+                // If no apps exist, use standard URL ACTION_VIEW method
+                Intent newIntent = Intent.makeMainSelectorActivity(Intent.ACTION_MAIN,
+                        Intent.CATEGORY_APP_BROWSER);
+                newIntent.setData(Uri.parse(url));
+                newIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT |
+                        Intent.FLAG_ACTIVITY_NEW_TASK);
+                try {
+                    mContext.startActivity(newIntent);
+                } catch (ActivityNotFoundException e) {
+                    loge("handleMobileProvisioningAction: startActivity failed" + e);
+                }
             }
         }
     }
diff --git a/services/core/java/com/android/server/ConsumerIrService.java b/services/core/java/com/android/server/ConsumerIrService.java
index 583f1bc..ea6812d 100644
--- a/services/core/java/com/android/server/ConsumerIrService.java
+++ b/services/core/java/com/android/server/ConsumerIrService.java
@@ -16,33 +16,13 @@
 
 package com.android.server;
 
-import android.content.BroadcastReceiver;
 import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.pm.PackageManager;
-import android.database.ContentObserver;
-import android.hardware.input.InputManager;
 import android.hardware.IConsumerIrService;
-import android.os.Handler;
 import android.os.PowerManager;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.IBinder;
-import android.os.Binder;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.os.UserHandle;
-import android.os.WorkSource;
-import android.provider.Settings;
-import android.provider.Settings.SettingNotFoundException;
 import android.util.Slog;
-import android.view.InputDevice;
 
 import java.lang.RuntimeException;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.ListIterator;
 
 public class ConsumerIrService extends IConsumerIrService.Stub {
     private static final String TAG = "ConsumerIrService";
diff --git a/services/core/java/com/android/server/DiskStatsService.java b/services/core/java/com/android/server/DiskStatsService.java
index ac25dc5..bc12fc5 100644
--- a/services/core/java/com/android/server/DiskStatsService.java
+++ b/services/core/java/com/android/server/DiskStatsService.java
@@ -19,7 +19,6 @@
 import android.content.Context;
 import android.os.Binder;
 import android.os.Environment;
-import android.os.FileUtils;
 import android.os.StatFs;
 import android.os.SystemClock;
 
diff --git a/services/core/java/com/android/server/EntropyMixer.java b/services/core/java/com/android/server/EntropyMixer.java
index cfdbf7d..24d8d1e 100644
--- a/services/core/java/com/android/server/EntropyMixer.java
+++ b/services/core/java/com/android/server/EntropyMixer.java
@@ -20,7 +20,6 @@
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.OutputStream;
 import java.io.PrintWriter;
 
 import android.content.BroadcastReceiver;
diff --git a/services/core/java/com/android/server/EventLogTags.logtags b/services/core/java/com/android/server/EventLogTags.logtags
index 399e7d1..5083d44 100644
--- a/services/core/java/com/android/server/EventLogTags.logtags
+++ b/services/core/java/com/android/server/EventLogTags.logtags
@@ -52,13 +52,19 @@
 # NotificationManagerService.java
 # ---------------------------
 # when a NotificationManager.notify is called
-2750 notification_enqueue (pkg|3),(id|1|5),(tag|3),(userid|1|5),(notification|3)
+2750 notification_enqueue (uid|1|5),(pid|1|5),(pkg|3),(id|1|5),(tag|3),(userid|1|5),(notification|3)
 # when someone tries to cancel a notification, the notification manager sometimes
 # calls this with flags too
-2751 notification_cancel (pkg|3),(id|1|5),(tag|3),(userid|1|5),(required_flags|1),(forbidden_flags|1)
+2751 notification_cancel (uid|1|5),(pid|1|5),(pkg|3),(id|1|5),(tag|3),(userid|1|5),(required_flags|1),(forbidden_flags|1),(reason|1|5),(listener|3)
 # when someone tries to cancel all of the notifications for a particular package
-2752 notification_cancel_all (pkg|3),(userid|1|5),(required_flags|1),(forbidden_flags|1)
-
+2752 notification_cancel_all (uid|1|5),(pid|1|5),(pkg|3),(userid|1|5),(required_flags|1),(forbidden_flags|1),(reason|1|5),(listener|3)
+# when the notification panel is shown
+# Note: New tag range starts here since 2753+ have been used below.
+27500 notification_panel_revealed
+# when the notification panel is hidden
+27501 notification_panel_hidden
+# when notifications are newly displayed on screen, or disappear from screen
+27510 notification_visibility_changed (newlyVisibleKeys|3),(noLongerVisibleKeys|3)
 
 # ---------------------------
 # Watchdog.java
diff --git a/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java b/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java
index 6fbf713..0cf9dcd 100644
--- a/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java
+++ b/services/core/java/com/android/server/INativeDaemonConnectorCallbacks.java
@@ -20,5 +20,6 @@
 interface INativeDaemonConnectorCallbacks {
 
     void onDaemonConnected();
+    boolean onCheckHoldWakeLock(int code);
     boolean onEvent(int code, String raw, String[] cooked);
 }
diff --git a/services/core/java/com/android/server/IdleMaintenanceService.java b/services/core/java/com/android/server/IdleMaintenanceService.java
index b0a1aca..acc6abe 100644
--- a/services/core/java/com/android/server/IdleMaintenanceService.java
+++ b/services/core/java/com/android/server/IdleMaintenanceService.java
@@ -16,22 +16,38 @@
 
 package com.android.server;
 
-import android.app.Activity;
-import android.app.ActivityManagerNative;
 import android.app.AlarmManager;
 import android.app.PendingIntent;
+import android.app.maintenance.IIdleCallback;
+import android.app.maintenance.IIdleService;
+import android.app.maintenance.IdleService;
 import android.content.BroadcastReceiver;
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
 import android.os.Handler;
 import android.os.PowerManager;
 import android.os.PowerManager.WakeLock;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.os.WorkSource;
+import android.util.ArrayMap;
 import android.util.Log;
 import android.util.Slog;
+import android.util.SparseArray;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
 
 /**
  * This service observes the device state and when applicable sends
@@ -47,12 +63,15 @@
  *
  * The end of a maintenance window is announced only if: a start was
  * announced AND the screen turned on or a dream was stopped.
+ *
+ * Method naming note:
+ * Methods whose name ends with "Tm" must only be called from the main thread.
  */
 public class IdleMaintenanceService extends BroadcastReceiver {
 
     private static final boolean DEBUG = false;
 
-    private static final String LOG_TAG = IdleMaintenanceService.class.getSimpleName();
+    private static final String TAG = IdleMaintenanceService.class.getSimpleName();
 
     private static final int LAST_USER_ACTIVITY_TIME_INVALID = -1;
 
@@ -74,36 +93,480 @@
     private static final String ACTION_FORCE_IDLE_MAINTENANCE =
         "com.android.server.IdleMaintenanceService.action.FORCE_IDLE_MAINTENANCE";
 
-    private static final Intent sIdleMaintenanceStartIntent;
-    static {
-        sIdleMaintenanceStartIntent = new Intent(Intent.ACTION_IDLE_MAINTENANCE_START);
-        sIdleMaintenanceStartIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
-    };
+    static final int MSG_OP_COMPLETE = 1;
+    static final int MSG_IDLE_FINISHED = 2;
+    static final int MSG_TIMEOUT = 3;
 
-    private static final Intent sIdleMaintenanceEndIntent;
-    static {
-        sIdleMaintenanceEndIntent = new Intent(Intent.ACTION_IDLE_MAINTENANCE_END);
-        sIdleMaintenanceEndIntent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
-    }
+    // when a timeout happened, what were we expecting?
+    static final int VERB_BINDING = 1;
+    static final int VERB_IDLING = 2;
+    static final int VERB_ENDING = 3;
+
+    // What are our relevant timeouts / allocated slices?
+    static final long OP_TIMEOUT = 8 * 1000;  // 8 seconds to bind or ack the start
+    static final long IDLE_TIMESLICE = 10 * 60 * 1000;  // ten minutes for each idler
 
     private final AlarmManager mAlarmService;
-
     private final BatteryService mBatteryService;
-
     private final PendingIntent mUpdateIdleMaintenanceStatePendingIntent;
-
     private final Context mContext;
-
     private final WakeLock mWakeLock;
-
-    private final Handler mHandler;
+    private final WorkSource mSystemWorkSource = new WorkSource(Process.myUid());
 
     private long mLastIdleMaintenanceStartTimeMillis;
-
     private long mLastUserActivityElapsedTimeMillis = LAST_USER_ACTIVITY_TIME_INVALID;
-
     private boolean mIdleMaintenanceStarted;
 
+    final IdleCallback mCallback;
+    final Handler mHandler;
+
+    final Random mTokenGenerator = new Random();
+
+    int makeToken() {
+        int token;
+        do  {
+            token = mTokenGenerator.nextInt(Integer.MAX_VALUE);
+        } while (token == 0);
+        return token;
+    }
+
+    class ActiveTask {
+        public IdleServiceInfo who;
+        public int verb;
+        public int token;
+
+        ActiveTask(IdleServiceInfo target, int action) {
+            who = target;
+            verb = action;
+            token = makeToken();
+        }
+
+        @Override
+        public String toString() {
+            return "ActiveTask{" + Integer.toHexString(this.hashCode())
+                    + " : verb=" + verb
+                    + " : token=" + token
+                    + " : "+ who + "}";
+        }
+    }
+
+    // What operations are in flight?
+    final SparseArray<ActiveTask> mPendingOperations = new SparseArray<ActiveTask>();
+
+    // Idle service queue management
+    class IdleServiceInfo {
+        public final ComponentName componentName;
+        public final int uid;
+        public IIdleService service;
+
+        IdleServiceInfo(ResolveInfo info, ComponentName cname) {
+            componentName = cname;  // derived from 'info' but this avoids an extra object
+            uid = info.serviceInfo.applicationInfo.uid;
+            service = null;
+        }
+
+        @Override
+        public int hashCode() {
+            return componentName.hashCode();
+        }
+
+        @Override
+        public String toString() {
+            return "IdleServiceInfo{" + componentName
+                    + " / " + (service == null ? "null" : service.asBinder()) + "}";
+        }
+    }
+
+    final ArrayMap<ComponentName, IdleServiceInfo> mIdleServices =
+            new ArrayMap<ComponentName, IdleServiceInfo>();
+    final LinkedList<IdleServiceInfo> mIdleServiceQueue = new LinkedList<IdleServiceInfo>();
+    IdleServiceInfo mCurrentIdler;  // set when we've committed to launching an idler
+    IdleServiceInfo mLastIdler;     // end of queue when idling begins
+
+    void reportNoTimeout(int token, boolean result) {
+        final Message msg = mHandler.obtainMessage(MSG_OP_COMPLETE, result ? 1 : 0, token);
+        mHandler.sendMessage(msg);
+    }
+
+    // Binder acknowledgment trampoline
+    class IdleCallback extends IIdleCallback.Stub {
+        @Override
+        public void acknowledgeStart(int token, boolean result) throws RemoteException {
+            reportNoTimeout(token, result);
+        }
+
+        @Override
+        public void acknowledgeStop(int token) throws RemoteException {
+            reportNoTimeout(token, false);
+        }
+
+        @Override
+        public void idleFinished(int token) throws RemoteException {
+            if (DEBUG) {
+                Slog.v(TAG, "idleFinished: " + token);
+            }
+            final Message msg = mHandler.obtainMessage(MSG_IDLE_FINISHED, 0, token);
+            mHandler.sendMessage(msg);
+        }
+    }
+
+    // Stuff that we run on a Handler
+    class IdleHandler extends Handler {
+        public IdleHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            final int token = msg.arg2;
+
+            switch (msg.what) {
+                case MSG_OP_COMPLETE: {
+                    if (DEBUG) {
+                        Slog.i(TAG, "MSG_OP_COMPLETE of " + token);
+                    }
+                    ActiveTask task = mPendingOperations.get(token);
+                    if (task != null) {
+                        mPendingOperations.remove(token);
+                        removeMessages(MSG_TIMEOUT);
+
+                        handleOpCompleteTm(task, msg.arg1);
+                    } else {
+                        // Can happen in a race between timeout and actual
+                        // (belated) completion of a "begin idling" or similar
+                        // operation.  In that state we've already processed the
+                        // timeout, so we intentionally no-op here.
+                        if (DEBUG) {
+                            Slog.w(TAG, "Belated op-complete of " + token);
+                        }
+                    }
+                    break;
+                }
+
+                case MSG_IDLE_FINISHED: {
+                    if (DEBUG) {
+                        Slog.i(TAG, "MSG_IDLE_FINISHED of " + token);
+                    }
+                    ActiveTask task = mPendingOperations.get(token);
+                    if (task != null) {
+                        if (DEBUG) {
+                            Slog.i(TAG, "... removing task " + token);
+                        }
+                        mPendingOperations.remove(token);
+                        removeMessages(MSG_TIMEOUT);
+
+                        handleIdleFinishedTm(task);
+                    } else {
+                        // Can happen "legitimately" from an app explicitly calling
+                        // idleFinished() after already having been told that its slice
+                        // has ended.
+                        if (DEBUG) {
+                            Slog.w(TAG, "Belated idle-finished of " + token);
+                        }
+                    }
+                    break;
+                }
+
+                case MSG_TIMEOUT: {
+                    if (DEBUG) {
+                        Slog.i(TAG, "MSG_TIMEOUT of " + token);
+                    }
+                    ActiveTask task = mPendingOperations.get(token);
+                    if (task != null) {
+                        mPendingOperations.remove(token);
+                        removeMessages(MSG_OP_COMPLETE);
+
+                        handleTimeoutTm(task);
+                    } else {
+                        // This one should not happen; we flushed timeout messages
+                        // whenever we entered a state after which we have established
+                        // that they are not appropriate.
+                        Slog.w(TAG, "Unexpected timeout of " + token);
+                    }
+                    break;
+                }
+
+                default:
+                    Slog.w(TAG, "Unknown message: " + msg.what);
+            }
+        }
+    }
+
+    void handleTimeoutTm(ActiveTask task) {
+        switch (task.verb) {
+        case VERB_BINDING: {
+            // We were trying to bind to this service, but it wedged or otherwise
+            // failed to respond in time.  Let it stay in the queue for the next
+            // time around, but just give up on it for now and go on to the next.
+            startNextIdleServiceTm();
+            break;
+        }
+        case VERB_IDLING: {
+            // The service has reached the end of its designated idle timeslice.
+            // This is not considered an error.
+            if (DEBUG) {
+                Slog.i(TAG, "Idler reached end of timeslice: " + task.who);
+            }
+            sendEndIdleTm(task.who);
+            break;
+        }
+        case VERB_ENDING: {
+            if (mCurrentIdler == task.who) {
+                if (DEBUG) {
+                    Slog.i(TAG, "Task timed out when ending; unbind needed");
+                }
+                handleIdleFinishedTm(task);
+            } else {
+                if (DEBUG) {
+                    Slog.w(TAG, "Ending timeout for non-current idle service!");
+                }
+            }
+            break;
+        }
+        default: {
+            Slog.w(TAG, "Unknown timeout state " + task.verb);
+            break;
+        }
+        }
+    }
+
+    void handleOpCompleteTm(ActiveTask task, int result) {
+        if (DEBUG) {
+            Slog.i(TAG, "handleOpComplete : task=" + task + " result=" + result);
+        }
+        if (task.verb == VERB_IDLING) {
+            // If the service was told to begin idling and responded positively, then
+            // it has begun idling and will eventually either explicitly finish, or
+            // reach the end of its allotted timeslice.  It's running free now, so we
+            // just schedule the idle-expiration timeout under the token it's already been
+            // given and let it keep going.
+            if (result != 0) {
+                scheduleOpTimeoutTm(task);
+            } else {
+                // The idle service has indicated that it does not, in fact,
+                // need to run at present, so we immediately indicate that it's
+                // to finish idling, and go on to the next idler.
+                if (DEBUG) {
+                    Slog.i(TAG, "Idler declined idling; moving along");
+                }
+                sendEndIdleTm(task.who);
+            }
+        } else {
+            // In the idling case, the task will be cleared either as the result of a timeout
+            // or of an explicit idleFinished().  For all other operations (binding, ending) we
+            // are done with the task as such, so we remove it from our bookkeeping.
+            if (DEBUG) {
+                Slog.i(TAG, "Clearing task " + task);
+            }
+            mPendingOperations.remove(task.token);
+            if (task.verb == VERB_ENDING) {
+                // The last bit of handshaking around idle cessation for this target
+                handleIdleFinishedTm(task);
+            }
+        }
+    }
+
+    void handleIdleFinishedTm(ActiveTask task) {
+        final IdleServiceInfo who = task.who;
+        if (who == mCurrentIdler) {
+            if (DEBUG) {
+                Slog.i(TAG, "Current idler has finished: " + who);
+                Slog.i(TAG, "Attributing wakelock to system work source");
+            }
+            mContext.unbindService(mConnection);
+            startNextIdleServiceTm();
+        } else {
+            Slog.w(TAG, "finish from non-current idle service? " + who);
+        }
+    }
+
+    void updateIdleServiceQueueTm() {
+        if (DEBUG) {
+            Slog.i(TAG, "Updating idle service queue");
+        }
+        PackageManager pm = mContext.getPackageManager();
+        Intent idleIntent = new Intent(IdleService.SERVICE_INTERFACE);
+        List<ResolveInfo> services = pm.queryIntentServices(idleIntent, 0);
+        for (ResolveInfo info : services) {
+            if (info.serviceInfo != null) {
+                if (IdleService.PERMISSION_BIND.equals(info.serviceInfo.permission)) {
+                    final ComponentName componentName = new ComponentName(
+                            info.serviceInfo.packageName,
+                            info.serviceInfo.name);
+                    if (DEBUG) {
+                        Slog.i(TAG, "   - " + componentName);
+                    }
+                    if (!mIdleServices.containsKey(componentName)) {
+                        if (DEBUG) {
+                            Slog.i(TAG, "      + not known; adding");
+                        }
+                        IdleServiceInfo serviceInfo = new IdleServiceInfo(info, componentName);
+                        mIdleServices.put(componentName, serviceInfo);
+                        mIdleServiceQueue.add(serviceInfo);
+                    }
+                } else {
+                    if (DEBUG) {
+                        Slog.i(TAG, "Idle service " + info.serviceInfo
+                                + " does not have required permission; ignoring");
+                    }
+                }
+            }
+        }
+    }
+
+    void startNextIdleServiceTm() {
+        mWakeLock.setWorkSource(mSystemWorkSource);
+
+        if (mLastIdler == null) {
+            // we've run the queue; nothing more to do until the next idle interval.
+            if (DEBUG) {
+                Slog.i(TAG, "Queue already drained; nothing more to do");
+            }
+            return;
+        }
+
+        if (DEBUG) {
+            Slog.i(TAG, "startNextIdleService : last=" + mLastIdler + " cur=" + mCurrentIdler);
+            if (mIdleServiceQueue.size() > 0) {
+                int i = 0;
+                Slog.i(TAG, "Queue (" + mIdleServiceQueue.size() + "):");
+                for (IdleServiceInfo info : mIdleServiceQueue) {
+                    Slog.i(TAG, "   " + i + " : " + info);
+                    i++;
+                }
+            }
+        }
+        if (mCurrentIdler != mLastIdler) {
+            if (mIdleServiceQueue.size() > 0) {
+                IdleServiceInfo target = mIdleServiceQueue.pop();
+                if (DEBUG) {
+                    Slog.i(TAG, "starting next idle service " + target);
+                }
+                Intent idleIntent = new Intent(IdleService.SERVICE_INTERFACE);
+                idleIntent.setComponent(target.componentName);
+                mCurrentIdler = target;
+                ActiveTask task = new ActiveTask(target, VERB_BINDING);
+                scheduleOpTimeoutTm(task);
+                boolean bindOk = mContext.bindServiceAsUser(idleIntent, mConnection,
+                        Context.BIND_AUTO_CREATE | Context.BIND_WAIVE_PRIORITY, UserHandle.OWNER);
+                if (!bindOk) {
+                    if (DEBUG) {
+                        Slog.w(TAG, "bindService() to " + target.componentName
+                                + " failed");
+                    }
+                } else {
+                    mIdleServiceQueue.add(target);  // at the end for next time
+                    if (DEBUG) { Slog.i(TAG, "Attributing wakelock to target uid " + target.uid); }
+                    mWakeLock.setWorkSource(new WorkSource(target.uid));
+                }
+            } else {
+                // Queue is empty but mLastIdler is non-null -- eeep.  Clear *everything*
+                // and wind up until the next time around.
+                Slog.e(TAG, "Queue unexpectedly empty; resetting.  last="
+                        + mLastIdler + " cur=" + mCurrentIdler);
+                mHandler.removeMessages(MSG_TIMEOUT);
+                mPendingOperations.clear();
+                stopIdleMaintenanceTm();
+            }
+        } else {
+            // we've reached the place we started, so mark the queue as drained
+            if (DEBUG) {
+                Slog.i(TAG, "Reached end of queue.");
+            }
+            stopIdleMaintenanceTm();
+        }
+    }
+
+    void sendStartIdleTm(IdleServiceInfo who) {
+        ActiveTask task = new ActiveTask(who, VERB_IDLING);
+        scheduleOpTimeoutTm(task);
+        try {
+            who.service.startIdleMaintenance(mCallback, task.token);
+        } catch (RemoteException e) {
+            // We bound to it, but now we can't reach it.  Bail and go on to the
+            // next service.
+            mContext.unbindService(mConnection);
+            if (DEBUG) { Slog.i(TAG, "Attributing wakelock to system work source"); }
+            mHandler.removeMessages(MSG_TIMEOUT);
+            startNextIdleServiceTm();
+        }
+    }
+
+    void sendEndIdleTm(IdleServiceInfo who) {
+        ActiveTask task = new ActiveTask(who, VERB_ENDING);
+        scheduleOpTimeoutTm(task);
+        if (DEBUG) {
+            Slog.i(TAG, "Sending end-idle to " + who);
+        }
+        try {
+            who.service.stopIdleMaintenance(mCallback, task.token);
+        } catch (RemoteException e) {
+            // We bound to it, but now we can't reach it.  Bail and go on to the
+            // next service.
+            mContext.unbindService(mConnection);
+            if (DEBUG) { Slog.i(TAG, "Attributing wakelock to system work source"); }
+            mHandler.removeMessages(MSG_TIMEOUT);
+            startNextIdleServiceTm();
+        }
+    }
+
+    ServiceConnection mConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            if (DEBUG) {
+                Slog.i(TAG, "onServiceConnected(" + name + ")");
+            }
+            IdleServiceInfo info = mIdleServices.get(name);
+            if (info != null) {
+                // Bound!  Cancel the bind timeout
+                mHandler.removeMessages(MSG_TIMEOUT);
+                // Now tell it to start its idle work
+                info.service = IIdleService.Stub.asInterface(service);
+                sendStartIdleTm(info);
+            } else {
+                // We bound to a service we don't know about.  That's ungood.
+                Slog.e(TAG, "Connected to unexpected component " + name);
+                mContext.unbindService(this);
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            if (DEBUG) {
+                Slog.i(TAG, "onServiceDisconnected(" + name + ")");
+            }
+            IdleServiceInfo who = mIdleServices.get(name);
+            if (who == mCurrentIdler) {
+                // Hm, okay; they didn't tell us they were finished but they
+                // went away.  Crashed, probably.  Oh well.  They're gone, so
+                // we can't finish them cleanly; just force things along.
+                Slog.w(TAG, "Idler unexpectedly vanished: " + mCurrentIdler);
+                mContext.unbindService(this);
+                mHandler.removeMessages(MSG_TIMEOUT);
+                startNextIdleServiceTm();
+            } else {
+                // Not the current idler, so we don't interrupt our process...
+                if (DEBUG) {
+                    Slog.w(TAG, "Disconnect of abandoned or unexpected service " + name);
+                }
+            }
+        }
+    };
+
+    // Schedules a timeout / end-of-work based on the task verb
+    void scheduleOpTimeoutTm(ActiveTask task) {
+        final long timeoutMillis = (task.verb == VERB_IDLING) ? IDLE_TIMESLICE : OP_TIMEOUT;
+        if (DEBUG) {
+            Slog.i(TAG, "Scheduling timeout (token " + task.token
+                    + " : verb " + task.verb + ") for " + task + " in " + timeoutMillis);
+        }
+        mPendingOperations.put(task.token, task);
+        mHandler.removeMessages(MSG_TIMEOUT);
+        final Message msg = mHandler.obtainMessage(MSG_TIMEOUT, 0, task.token);
+        mHandler.sendMessageDelayed(msg, timeoutMillis);
+    }
+
+    // -------------------------------------------------------------------------------
     public IdleMaintenanceService(Context context, BatteryService batteryService) {
         mContext = context;
         mBatteryService = batteryService;
@@ -111,9 +574,10 @@
         mAlarmService = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
 
         PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
-        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
+        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
 
-        mHandler = new Handler(mContext.getMainLooper());
+        mHandler = new IdleHandler(mContext.getMainLooper());
+        mCallback = new IdleCallback();
 
         Intent intent = new Intent(ACTION_UPDATE_IDLE_MAINTENANCE_STATE);
         intent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
@@ -159,26 +623,28 @@
         mAlarmService.cancel(mUpdateIdleMaintenanceStatePendingIntent);
     }
 
-    private void updateIdleMaintenanceState(boolean noisy) {
+    private void updateIdleMaintenanceStateTm(boolean noisy) {
         if (mIdleMaintenanceStarted) {
             // Idle maintenance can be interrupted by user activity, or duration
             // time out, or low battery.
-            if (!lastUserActivityPermitsIdleMaintenanceRunning()
-                    || !batteryLevelAndMaintenanceTimeoutPermitsIdleMaintenanceRunning()) {
+            final boolean batteryOk
+                    = batteryLevelAndMaintenanceTimeoutPermitsIdleMaintenanceRunning();
+            if (!lastUserActivityPermitsIdleMaintenanceRunning() || !batteryOk) {
                 unscheduleUpdateIdleMaintenanceState();
                 mIdleMaintenanceStarted = false;
-                EventLogTags.writeIdleMaintenanceWindowFinish(SystemClock.elapsedRealtime(),
-                        mLastUserActivityElapsedTimeMillis, mBatteryService.getBatteryLevel(),
-                        isBatteryCharging() ? 1 : 0);
-                sendIdleMaintenanceEndIntent();
                 // We stopped since we don't have enough battery or timed out but the
                 // user is not using the device, so we should be able to run maintenance
                 // in the next maintenance window since the battery may be charged
                 // without interaction and the min interval between maintenances passed.
-                if (!batteryLevelAndMaintenanceTimeoutPermitsIdleMaintenanceRunning()) {
+                if (!batteryOk) {
                     scheduleUpdateIdleMaintenanceState(
                             getNextIdleMaintenanceIntervalStartFromNow());
                 }
+
+                EventLogTags.writeIdleMaintenanceWindowFinish(SystemClock.elapsedRealtime(),
+                        mLastUserActivityElapsedTimeMillis, mBatteryService.getBatteryLevel(),
+                        isBatteryCharging() ? 1 : 0);
+                scheduleIdleFinishTm();
             }
         } else if (deviceStatePermitsIdleMaintenanceStart(noisy)
                 && lastUserActivityPermitsIdleMaintenanceStart(noisy)
@@ -191,7 +657,7 @@
                     mLastUserActivityElapsedTimeMillis, mBatteryService.getBatteryLevel(),
                     isBatteryCharging() ? 1 : 0);
             mLastIdleMaintenanceStartTimeMillis = SystemClock.elapsedRealtime();
-            sendIdleMaintenanceStartIntent();
+            startIdleMaintenanceTm();
         } else if (lastUserActivityPermitsIdleMaintenanceStart(noisy)) {
              if (lastRunPermitsIdleMaintenanceStart(noisy)) {
                 // The user does not use the device and we did not run maintenance in more
@@ -207,27 +673,57 @@
         }
     }
 
+    void startIdleMaintenanceTm() {
+        if (DEBUG) {
+            Slog.i(TAG, "*** Starting idle maintenance ***");
+        }
+        if (DEBUG) { Slog.i(TAG, "Attributing wakelock to system work source"); }
+        mWakeLock.setWorkSource(mSystemWorkSource);
+        mWakeLock.acquire();
+        updateIdleServiceQueueTm();
+        mCurrentIdler = null;
+        mLastIdler = (mIdleServiceQueue.size() > 0) ? mIdleServiceQueue.peekLast() : null;
+        startNextIdleServiceTm();
+    }
+
+    // Start a graceful wind-down of the idle maintenance state: end the current idler
+    // and pretend that we've finished running the queue.  If there's no current idler,
+    // this is a no-op.
+    void scheduleIdleFinishTm() {
+        if (mCurrentIdler != null) {
+            if (DEBUG) {
+                Slog.i(TAG, "*** Finishing idle maintenance ***");
+            }
+            mLastIdler = mCurrentIdler;
+            sendEndIdleTm(mCurrentIdler);
+        } else {
+            if (DEBUG) {
+                Slog.w(TAG, "Asked to finish idle maintenance but we're done already");
+            }
+        }
+    }
+
+    // Actual finalization of the idle maintenance sequence
+    void stopIdleMaintenanceTm() {
+        if (mLastIdler != null) {
+            if (DEBUG) {
+                Slog.i(TAG, "*** Idle maintenance shutdown ***");
+            }
+            mWakeLock.setWorkSource(mSystemWorkSource);
+            mLastIdler = mCurrentIdler = null;
+            updateIdleMaintenanceStateTm(false);   // resets 'started' and schedules next window
+            mWakeLock.release();
+        } else {
+            Slog.e(TAG, "ERROR: idle shutdown but invariants not held.  last=" + mLastIdler
+                    + " cur=" + mCurrentIdler + " size=" + mIdleServiceQueue.size());
+        }
+    }
+
     private long getNextIdleMaintenanceIntervalStartFromNow() {
         return mLastIdleMaintenanceStartTimeMillis + MIN_IDLE_MAINTENANCE_INTERVAL_MILLIS
                 - SystemClock.elapsedRealtime();
     }
 
-    private void sendIdleMaintenanceStartIntent() {
-        mWakeLock.acquire();
-        try {
-            ActivityManagerNative.getDefault().performIdleMaintenance();
-        } catch (RemoteException e) {
-        }
-        mContext.sendOrderedBroadcastAsUser(sIdleMaintenanceStartIntent, UserHandle.ALL,
-                null, this, mHandler, Activity.RESULT_OK, null, null);
-    }
-
-    private void sendIdleMaintenanceEndIntent() {
-        mWakeLock.acquire();
-        mContext.sendOrderedBroadcastAsUser(sIdleMaintenanceEndIntent, UserHandle.ALL,
-                null, this, mHandler, Activity.RESULT_OK, null, null);
-    }
-
     private boolean deviceStatePermitsIdleMaintenanceStart(boolean noisy) {
         final int minBatteryLevel = isBatteryCharging()
                 ? MIN_BATTERY_LEVEL_IDLE_MAINTENANCE_START_CHARGING
@@ -281,7 +777,7 @@
     @Override
     public void onReceive(Context context, Intent intent) {
         if (DEBUG) {
-            Log.i(LOG_TAG, intent.getAction());
+            Log.i(TAG, intent.getAction());
         }
         String action = intent.getAction();
         if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
@@ -292,7 +788,7 @@
             // next release. The only client for this for now is internal an holds
             // a wake lock correctly.
             if (mIdleMaintenanceStarted) {
-                updateIdleMaintenanceState(false);
+                updateIdleMaintenanceStateTm(false);
             }
         } else if (Intent.ACTION_SCREEN_ON.equals(action)
                 || Intent.ACTION_DREAMING_STOPPED.equals(action)) {
@@ -302,7 +798,7 @@
             unscheduleUpdateIdleMaintenanceState();
             // If the screen went on/stopped dreaming, we know the user is using the
             // device which means that idle maintenance should be stopped if running.
-            updateIdleMaintenanceState(false);
+            updateIdleMaintenanceStateTm(false);
         } else if (Intent.ACTION_SCREEN_OFF.equals(action)
                 || Intent.ACTION_DREAMING_STARTED.equals(action)) {
             mLastUserActivityElapsedTimeMillis = SystemClock.elapsedRealtime();
@@ -311,17 +807,12 @@
             // this timeout elapses since the device may go to sleep by then.
             scheduleUpdateIdleMaintenanceState(MIN_USER_INACTIVITY_IDLE_MAINTENANCE_START);
         } else if (ACTION_UPDATE_IDLE_MAINTENANCE_STATE.equals(action)) {
-            updateIdleMaintenanceState(false);
+            updateIdleMaintenanceStateTm(false);
         } else if (ACTION_FORCE_IDLE_MAINTENANCE.equals(action)) {
             long now = SystemClock.elapsedRealtime() - 1;
             mLastUserActivityElapsedTimeMillis = now - MIN_USER_INACTIVITY_IDLE_MAINTENANCE_START;
             mLastIdleMaintenanceStartTimeMillis = now - MIN_IDLE_MAINTENANCE_INTERVAL_MILLIS;
-            updateIdleMaintenanceState(true);
-        } else if (Intent.ACTION_IDLE_MAINTENANCE_START.equals(action)
-                || Intent.ACTION_IDLE_MAINTENANCE_END.equals(action)) {
-            // We were holding a wake lock while broadcasting the idle maintenance
-            // intents but now that we finished the broadcast release the wake lock.
-            mWakeLock.release();
+            updateIdleMaintenanceStateTm(true);
         }
     }
 }
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index bbec329..6fc3e77 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -16,6 +16,8 @@
 package com.android.server;
 
 import com.android.internal.content.PackageMonitor;
+import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController;
+import com.android.internal.inputmethod.InputMethodSubtypeSwitchingController.ImeSubtypeListItem;
 import com.android.internal.inputmethod.InputMethodUtils;
 import com.android.internal.inputmethod.InputMethodUtils.InputMethodSettings;
 import com.android.internal.os.HandlerCaller;
@@ -57,6 +59,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
+import android.content.pm.UserInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -76,6 +79,7 @@
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.text.style.SuggestionSpan;
@@ -114,12 +118,9 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
-import java.util.TreeMap;
 
 /**
  * This class provides a system service that manages input methods.
@@ -147,10 +148,11 @@
     static final int MSG_UNBIND_METHOD = 3000;
     static final int MSG_BIND_METHOD = 3010;
     static final int MSG_SET_ACTIVE = 3020;
+    static final int MSG_SET_CURSOR_ANCHOR_MONITOR_MODE = 3030;
 
     static final int MSG_HARD_KEYBOARD_SWITCH_CHANGED = 4000;
 
-    static final long TIME_TO_RECONNECT = 10*1000;
+    static final long TIME_TO_RECONNECT = 3 * 1000;
 
     static final int SECURE_SUGGESTION_SPANS_MAX_SIZE = 20;
 
@@ -167,7 +169,6 @@
     final HandlerCaller mCaller;
     final boolean mHasFeature;
     private InputMethodFileManager mFileManager;
-    private InputMethodAndSubtypeListManager mImListManager;
     private final HardKeyboardListener mHardKeyboardListener;
     private final WindowManagerService mWindowManagerService;
 
@@ -179,6 +180,7 @@
     final HashMap<String, InputMethodInfo> mMethodMap = new HashMap<String, InputMethodInfo>();
     private final LruCache<SuggestionSpan, InputMethodInfo> mSecureSuggestionSpans =
             new LruCache<SuggestionSpan, InputMethodInfo>(SECURE_SUGGESTION_SPANS_MAX_SIZE);
+    private final InputMethodSubtypeSwitchingController mSwitchingController;
 
     // Used to bring IME service up to visible adjustment while it is being shown.
     final ServiceConnection mVisibleConnection = new ServiceConnection() {
@@ -442,6 +444,10 @@
                 hideInputMethodMenu();
                 // No need to updateActive
                 return;
+            } else if (Intent.ACTION_USER_ADDED.equals(action)
+                    || Intent.ACTION_USER_REMOVED.equals(action)) {
+                updateCurrentProfileIds();
+                return;
             } else {
                 Slog.w(TAG, "Unexpected intent " + intent);
             }
@@ -576,7 +582,12 @@
 
         @Override
         public void sessionCreated(IInputMethodSession session) {
-            mParentIMMS.onSessionCreated(mMethod, session, mChannel);
+            long ident = Binder.clearCallingIdentity();
+            try {
+                mParentIMMS.onSessionCreated(mMethod, session, mChannel);
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
         }
     }
 
@@ -644,6 +655,8 @@
         broadcastFilter.addAction(Intent.ACTION_SCREEN_ON);
         broadcastFilter.addAction(Intent.ACTION_SCREEN_OFF);
         broadcastFilter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+        broadcastFilter.addAction(Intent.ACTION_USER_ADDED);
+        broadcastFilter.addAction(Intent.ACTION_USER_REMOVED);
         mContext.registerReceiver(new ImmsBroadcastReceiver(), broadcastFilter);
 
         mNotificationShown = false;
@@ -677,8 +690,10 @@
         // mSettings should be created before buildInputMethodListLocked
         mSettings = new InputMethodSettings(
                 mRes, context.getContentResolver(), mMethodMap, mMethodList, userId);
+        updateCurrentProfileIds();
         mFileManager = new InputMethodFileManager(mMethodMap, userId);
-        mImListManager = new InputMethodAndSubtypeListManager(context, this);
+        mSwitchingController = new InputMethodSubtypeSwitchingController(mSettings);
+        mSwitchingController.resetCircularListLocked(context);
 
         // Just checking if defaultImiId is empty or not
         final String defaultImiId = mSettings.getSelectedInputMethod();
@@ -758,8 +773,8 @@
             if (DEBUG) {
                 Slog.i(TAG, "Locale has been changed to " + newLocale);
             }
-            // InputMethodAndSubtypeListManager should be reset when the locale is changed.
-            mImListManager = new InputMethodAndSubtypeListManager(mContext, this);
+            // CircularList should be reset when the locale is changed.
+            mSwitchingController.resetCircularListLocked(mContext);
             buildInputMethodListLocked(mMethodList, mMethodMap, resetDefaultEnabledIme);
             if (!updateOnlyWhenLocaleChanged) {
                 final String selectedImiId = mSettings.getSelectedInputMethod();
@@ -791,6 +806,7 @@
 
     private void switchUserLocked(int newUserId) {
         mSettings.setCurrentUserId(newUserId);
+        updateCurrentProfileIds();
         // InputMethodFileManager should be reset when the user is changed
         mFileManager = new InputMethodFileManager(mMethodMap, newUserId);
         final String defaultImiId = mSettings.getSelectedInputMethod();
@@ -811,6 +827,16 @@
         }
     }
 
+    void updateCurrentProfileIds() {
+        List<UserInfo> profiles =
+                UserManager.get(mContext).getProfiles(mSettings.getCurrentUserId());
+        int[] currentProfileIds = new int[profiles.size()]; // profiles will not be null
+        for (int i = 0; i < currentProfileIds.length; i++) {
+            currentProfileIds[i] = profiles.get(i).id;
+        }
+        mSettings.setCurrentProfileIds(currentProfileIds);
+    }
+
     @Override
     public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
             throws RemoteException {
@@ -906,7 +932,7 @@
                     + mSettings.getCurrentUserId() + ", calling pid = " + Binder.getCallingPid()
                     + InputMethodUtils.getApiCallStack());
         }
-        if (uid == Process.SYSTEM_UID || userId == mSettings.getCurrentUserId()) {
+        if (uid == Process.SYSTEM_UID || mSettings.isCurrentProfile(userId)) {
             return true;
         }
 
@@ -961,17 +987,6 @@
         }
     }
 
-    private HashMap<InputMethodInfo, List<InputMethodSubtype>>
-            getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked() {
-        HashMap<InputMethodInfo, List<InputMethodSubtype>> enabledInputMethodAndSubtypes =
-                new HashMap<InputMethodInfo, List<InputMethodSubtype>>();
-        for (InputMethodInfo imi: mSettings.getEnabledInputMethodListLocked()) {
-            enabledInputMethodAndSubtypes.put(
-                    imi, mSettings.getEnabledInputMethodSubtypeListLocked(mContext, imi, true));
-        }
-        return enabledInputMethodAndSubtypes;
-    }
-
     /**
      * @param imiId if null, returns enabled subtypes for the current imi
      * @return enabled subtypes of the specified imi
@@ -1217,7 +1232,8 @@
         mCurIntent.putExtra(Intent.EXTRA_CLIENT_INTENT, PendingIntent.getActivity(
                 mContext, 0, new Intent(Settings.ACTION_INPUT_METHOD_SETTINGS), 0));
         if (bindCurrentInputMethodService(mCurIntent, this, Context.BIND_AUTO_CREATE
-                | Context.BIND_NOT_VISIBLE | Context.BIND_SHOWING_UI)) {
+                | Context.BIND_NOT_VISIBLE | Context.BIND_NOT_FOREGROUND
+                | Context.BIND_SHOWING_UI)) {
             mLastBindTime = SystemClock.uptimeMillis();
             mHaveConnection = true;
             mCurId = info.getId();
@@ -1775,7 +1791,8 @@
             mInputShown = true;
             if (mHaveConnection && !mVisibleBound) {
                 bindCurrentInputMethodService(
-                        mCurIntent, mVisibleConnection, Context.BIND_AUTO_CREATE);
+                        mCurIntent, mVisibleConnection, Context.BIND_AUTO_CREATE
+                                | Context.BIND_TREAT_LIKE_ACTIVITY);
                 mVisibleBound = true;
             }
             res = true;
@@ -2154,7 +2171,7 @@
             return false;
         }
         synchronized (mMethodMap) {
-            final ImeSubtypeListItem nextSubtype = mImListManager.getNextInputMethod(
+            final ImeSubtypeListItem nextSubtype = mSwitchingController.getNextInputMethod(
                     onlyCurrentIme, mMethodMap.get(mCurMethodId), mCurrentSubtype);
             if (nextSubtype == null) {
                 return false;
@@ -2170,7 +2187,7 @@
             return false;
         }
         synchronized (mMethodMap) {
-            final ImeSubtypeListItem nextSubtype = mImListManager.getNextInputMethod(
+            final ImeSubtypeListItem nextSubtype = mSwitchingController.getNextInputMethod(
                     false /* onlyCurrentIme */, mMethodMap.get(mCurMethodId), mCurrentSubtype);
             if (nextSubtype == null) {
                 return false;
@@ -2243,6 +2260,43 @@
         return;
     }
 
+    @Override
+    public int getInputMethodWindowVisibleHeight() {
+        return mWindowManagerService.getInputMethodWindowVisibleHeight();
+    }
+
+    @Override
+    public void notifyTextCommitted() {
+        if (DEBUG) {
+            Slog.d(TAG, "Got the notification of commitText");
+        }
+        final InputMethodInfo imi = mMethodMap.get(mCurMethodId);
+        if (imi != null) {
+            mSwitchingController.onCommitText(imi, mCurrentSubtype);
+        }
+    }
+
+    @Override
+    public void setCursorAnchorMonitorMode(IBinder token, int monitorMode) {
+        if (DEBUG) {
+            Slog.d(TAG, "setCursorAnchorMonitorMode: monitorMode=" + monitorMode);
+        }
+        if (!calledFromValidUser()) {
+            return;
+        }
+        synchronized (mMethodMap) {
+            if (token == null || mCurToken != token) {
+                if (DEBUG) {
+                    Slog.w(TAG, "Ignoring setCursorAnchorMonitorMode from uid "
+                            + Binder.getCallingUid() + " token: " + token);
+                }
+                return;
+            }
+            executeOrSendMessage(mCurMethod, mCaller.obtainMessageIO(
+                    MSG_SET_CURSOR_ANCHOR_MONITOR_MODE, monitorMode, mCurClient));
+        }
+    }
+
     private void setInputMethodWithSubtypeId(IBinder token, String id, int subtypeId) {
         synchronized (mMethodMap) {
             if (token == null) {
@@ -2474,6 +2528,15 @@
                             + ((ClientState)msg.obj).uid);
                 }
                 return true;
+            case MSG_SET_CURSOR_ANCHOR_MONITOR_MODE:
+                try {
+                    ((ClientState)msg.obj).client.setCursorAnchorMonitorMode(msg.arg1);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Got RemoteException sending setCursorAnchorMonitorMode "
+                            + "notification to pid " + ((ClientState)msg.obj).pid
+                            + " uid " + ((ClientState)msg.obj).uid);
+                }
+                return true;
 
             // --------------------------------------------------------------
             case MSG_HARD_KEYBOARD_SWITCH_CHANGED:
@@ -2621,7 +2684,8 @@
 
         synchronized (mMethodMap) {
             final HashMap<InputMethodInfo, List<InputMethodSubtype>> immis =
-                    getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked();
+                    mSettings.getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked(
+                            mContext);
             if (immis == null || immis.size() == 0) {
                 return;
             }
@@ -2629,7 +2693,7 @@
             hideInputMethodMenuLocked();
 
             final List<ImeSubtypeListItem> imList =
-                    mImListManager.getSortedInputMethodAndSubtypeList(
+                    mSwitchingController.getSortedInputMethodAndSubtypeList(
                             showSubtypes, mInputShown, isScreenLocked);
 
             if (lastInputMethodSubtypeId == NOT_A_SUBTYPE_ID) {
@@ -2748,66 +2812,6 @@
         }
     }
 
-    private static class ImeSubtypeListItem implements Comparable<ImeSubtypeListItem> {
-        public final CharSequence mImeName;
-        public final CharSequence mSubtypeName;
-        public final InputMethodInfo mImi;
-        public final int mSubtypeId;
-        private final boolean mIsSystemLocale;
-        private final boolean mIsSystemLanguage;
-
-        public ImeSubtypeListItem(CharSequence imeName, CharSequence subtypeName,
-                InputMethodInfo imi, int subtypeId, String subtypeLocale, String systemLocale) {
-            mImeName = imeName;
-            mSubtypeName = subtypeName;
-            mImi = imi;
-            mSubtypeId = subtypeId;
-            if (TextUtils.isEmpty(subtypeLocale)) {
-                mIsSystemLocale = false;
-                mIsSystemLanguage = false;
-            } else {
-                mIsSystemLocale = subtypeLocale.equals(systemLocale);
-                mIsSystemLanguage = mIsSystemLocale
-                        || subtypeLocale.startsWith(systemLocale.substring(0, 2));
-            }
-        }
-
-        @Override
-        public int compareTo(ImeSubtypeListItem other) {
-            if (TextUtils.isEmpty(mImeName)) {
-                return 1;
-            }
-            if (TextUtils.isEmpty(other.mImeName)) {
-                return -1;
-            }
-            if (!TextUtils.equals(mImeName, other.mImeName)) {
-                return mImeName.toString().compareTo(other.mImeName.toString());
-            }
-            if (TextUtils.equals(mSubtypeName, other.mSubtypeName)) {
-                return 0;
-            }
-            if (mIsSystemLocale) {
-                return -1;
-            }
-            if (other.mIsSystemLocale) {
-                return 1;
-            }
-            if (mIsSystemLanguage) {
-                return -1;
-            }
-            if (other.mIsSystemLanguage) {
-                return 1;
-            }
-            if (TextUtils.isEmpty(mSubtypeName)) {
-                return 1;
-            }
-            if (TextUtils.isEmpty(other.mSubtypeName)) {
-                return -1;
-            }
-            return mSubtypeName.toString().compareTo(other.mSubtypeName.toString());
-        }
-    }
-
     private static class ImeSubtypeListAdapter extends ArrayAdapter<ImeSubtypeListItem> {
         private final LayoutInflater mInflater;
         private final int mTextViewResourceId;
@@ -3179,123 +3183,6 @@
         }
     }
 
-    private static class InputMethodAndSubtypeListManager {
-        private final Context mContext;
-        // Used to load label
-        private final PackageManager mPm;
-        private final InputMethodManagerService mImms;
-        private final String mSystemLocaleStr;
-        public InputMethodAndSubtypeListManager(Context context, InputMethodManagerService imms) {
-            mContext = context;
-            mPm = context.getPackageManager();
-            mImms = imms;
-            final Locale locale = context.getResources().getConfiguration().locale;
-            mSystemLocaleStr = locale != null ? locale.toString() : "";
-        }
-
-        private final TreeMap<InputMethodInfo, List<InputMethodSubtype>> mSortedImmis =
-                new TreeMap<InputMethodInfo, List<InputMethodSubtype>>(
-                        new Comparator<InputMethodInfo>() {
-                            @Override
-                            public int compare(InputMethodInfo imi1, InputMethodInfo imi2) {
-                                if (imi2 == null) return 0;
-                                if (imi1 == null) return 1;
-                                if (mPm == null) {
-                                    return imi1.getId().compareTo(imi2.getId());
-                                }
-                                CharSequence imiId1 = imi1.loadLabel(mPm) + "/" + imi1.getId();
-                                CharSequence imiId2 = imi2.loadLabel(mPm) + "/" + imi2.getId();
-                                return imiId1.toString().compareTo(imiId2.toString());
-                            }
-                        });
-
-        public ImeSubtypeListItem getNextInputMethod(
-                boolean onlyCurrentIme, InputMethodInfo imi, InputMethodSubtype subtype) {
-            if (imi == null) {
-                return null;
-            }
-            final List<ImeSubtypeListItem> imList = getSortedInputMethodAndSubtypeList();
-            if (imList.size() <= 1) {
-                return null;
-            }
-            final int N = imList.size();
-            final int currentSubtypeId = subtype != null
-                    ? InputMethodUtils.getSubtypeIdFromHashCode(imi, subtype.hashCode())
-                    : NOT_A_SUBTYPE_ID;
-            for (int i = 0; i < N; ++i) {
-                final ImeSubtypeListItem isli = imList.get(i);
-                if (isli.mImi.equals(imi) && isli.mSubtypeId == currentSubtypeId) {
-                    if (!onlyCurrentIme) {
-                        return imList.get((i + 1) % N);
-                    }
-                    for (int j = 0; j < N - 1; ++j) {
-                        final ImeSubtypeListItem candidate = imList.get((i + j + 1) % N);
-                        if (candidate.mImi.equals(imi)) {
-                            return candidate;
-                        }
-                    }
-                    return null;
-                }
-            }
-            return null;
-        }
-
-        public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList() {
-            return getSortedInputMethodAndSubtypeList(true, false, false);
-        }
-
-        public List<ImeSubtypeListItem> getSortedInputMethodAndSubtypeList(boolean showSubtypes,
-                boolean inputShown, boolean isScreenLocked) {
-            final ArrayList<ImeSubtypeListItem> imList = new ArrayList<ImeSubtypeListItem>();
-            final HashMap<InputMethodInfo, List<InputMethodSubtype>> immis =
-                    mImms.getExplicitlyOrImplicitlyEnabledInputMethodsAndSubtypeListLocked();
-            if (immis == null || immis.size() == 0) {
-                return Collections.emptyList();
-            }
-            mSortedImmis.clear();
-            mSortedImmis.putAll(immis);
-            for (InputMethodInfo imi : mSortedImmis.keySet()) {
-                if (imi == null) continue;
-                List<InputMethodSubtype> explicitlyOrImplicitlyEnabledSubtypeList = immis.get(imi);
-                HashSet<String> enabledSubtypeSet = new HashSet<String>();
-                for (InputMethodSubtype subtype: explicitlyOrImplicitlyEnabledSubtypeList) {
-                    enabledSubtypeSet.add(String.valueOf(subtype.hashCode()));
-                }
-                final CharSequence imeLabel = imi.loadLabel(mPm);
-                if (showSubtypes && enabledSubtypeSet.size() > 0) {
-                    final int subtypeCount = imi.getSubtypeCount();
-                    if (DEBUG) {
-                        Slog.v(TAG, "Add subtypes: " + subtypeCount + ", " + imi.getId());
-                    }
-                    for (int j = 0; j < subtypeCount; ++j) {
-                        final InputMethodSubtype subtype = imi.getSubtypeAt(j);
-                        final String subtypeHashCode = String.valueOf(subtype.hashCode());
-                        // We show all enabled IMEs and subtypes when an IME is shown.
-                        if (enabledSubtypeSet.contains(subtypeHashCode)
-                                && ((inputShown && !isScreenLocked) || !subtype.isAuxiliary())) {
-                            final CharSequence subtypeLabel =
-                                    subtype.overridesImplicitlyEnabledSubtype() ? null
-                                            : subtype.getDisplayName(mContext, imi.getPackageName(),
-                                                    imi.getServiceInfo().applicationInfo);
-                            imList.add(new ImeSubtypeListItem(imeLabel, subtypeLabel, imi, j,
-                                    subtype.getLocale(), mSystemLocaleStr));
-
-                            // Removing this subtype from enabledSubtypeSet because we no longer
-                            // need to add an entry of this subtype to imList to avoid duplicated
-                            // entries.
-                            enabledSubtypeSet.remove(subtypeHashCode);
-                        }
-                    }
-                } else {
-                    imList.add(new ImeSubtypeListItem(imeLabel, null, imi, NOT_A_SUBTYPE_ID,
-                            null, mSystemLocaleStr));
-                }
-            }
-            Collections.sort(imList);
-            return imList;
-        }
-    }
-
     // TODO: Cache the state for each user and reset when the cached user is removed.
     private static class InputMethodFileManager {
         private static final String SYSTEM_PATH = "system";
diff --git a/services/core/java/com/android/server/LocationManagerService.java b/services/core/java/com/android/server/LocationManagerService.java
index e0b568b..d6ecb46 100644
--- a/services/core/java/com/android/server/LocationManagerService.java
+++ b/services/core/java/com/android/server/LocationManagerService.java
@@ -73,6 +73,9 @@
 import com.android.server.location.LocationFudger;
 import com.android.server.location.LocationProviderInterface;
 import com.android.server.location.LocationProviderProxy;
+import com.android.server.location.LocationRequestStatistics;
+import com.android.server.location.LocationRequestStatistics.PackageProviderKey;
+import com.android.server.location.LocationRequestStatistics.PackageStatistics;
 import com.android.server.location.MockProvider;
 import com.android.server.location.PassiveProvider;
 
@@ -178,6 +181,8 @@
     private final HashMap<String, ArrayList<UpdateRecord>> mRecordsByProvider =
             new HashMap<String, ArrayList<UpdateRecord>>();
 
+    private final LocationRequestStatistics mRequestStatistics = new LocationRequestStatistics();
+
     // mapping from provider name to last known location
     private final HashMap<String, Location> mLastLocation = new HashMap<String, Location>();
 
@@ -421,29 +426,54 @@
             Slog.e(TAG,  "no geocoder provider found");
         }
 
-        // bind to fused provider
-        FlpHardwareProvider flpHardwareProvider = FlpHardwareProvider.getInstance(mContext);
-        FusedProxy fusedProxy = FusedProxy.createAndBind(
-                mContext,
-                mLocationHandler,
-                flpHardwareProvider.getLocationHardware(),
-                com.android.internal.R.bool.config_enableFusedLocationOverlay,
-                com.android.internal.R.string.config_fusedLocationProviderPackageName,
-                com.android.internal.R.array.config_locationProviderPackageNames);
-        if(fusedProxy == null) {
-            Slog.e(TAG, "No FusedProvider found.");
+        // bind to fused provider if supported
+        if (FlpHardwareProvider.isSupported()) {
+          FlpHardwareProvider flpHardwareProvider = FlpHardwareProvider.getInstance(mContext);
+          FusedProxy fusedProxy = FusedProxy.createAndBind(
+                  mContext,
+                  mLocationHandler,
+                  flpHardwareProvider.getLocationHardware(),
+                  com.android.internal.R.bool.config_enableFusedLocationOverlay,
+                  com.android.internal.R.string.config_fusedLocationProviderPackageName,
+                  com.android.internal.R.array.config_locationProviderPackageNames);
+          if(fusedProxy == null) {
+              Slog.e(TAG, "Unable to bind FusedProxy.");
+          }
+
+          // bind to geofence provider
+          GeofenceProxy provider = GeofenceProxy.createAndBind(mContext,
+                  com.android.internal.R.bool.config_enableGeofenceOverlay,
+                  com.android.internal.R.string.config_geofenceProviderPackageName,
+                  com.android.internal.R.array.config_locationProviderPackageNames,
+                  mLocationHandler,
+                  gpsProvider.getGpsGeofenceProxy(),
+                  flpHardwareProvider.getGeofenceHardware());
+          if (provider == null) {
+              Slog.e(TAG,  "Unable to bind FLP Geofence proxy.");
+          }
+        } else {
+          Slog.e(TAG, "FLP HAL not supported.");
         }
 
-        // bind to geofence provider
-        GeofenceProxy provider = GeofenceProxy.createAndBind(mContext,
-                com.android.internal.R.bool.config_enableGeofenceOverlay,
-                com.android.internal.R.string.config_geofenceProviderPackageName,
-                com.android.internal.R.array.config_locationProviderPackageNames,
-                mLocationHandler,
-                gpsProvider.getGpsGeofenceProxy(),
-                flpHardwareProvider.getGeofenceHardware());
-        if (provider == null) {
-            Slog.e(TAG,  "no geofence provider found");
+        String[] testProviderStrings = resources.getStringArray(
+                com.android.internal.R.array.config_testLocationProviders);
+        for (String testProviderString : testProviderStrings) {
+            String fragments[] = testProviderString.split(",");
+            String name = fragments[0].trim();
+            if (mProvidersByName.get(name) != null) {
+                throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
+            }
+            ProviderProperties properties = new ProviderProperties(
+                    Boolean.parseBoolean(fragments[1]) /* requiresNetwork */,
+                    Boolean.parseBoolean(fragments[2]) /* requiresSatellite */,
+                    Boolean.parseBoolean(fragments[3]) /* requiresCell */,
+                    Boolean.parseBoolean(fragments[4]) /* hasMonetaryCost */,
+                    Boolean.parseBoolean(fragments[5]) /* supportsAltitude */,
+                    Boolean.parseBoolean(fragments[6]) /* supportsSpeed */,
+                    Boolean.parseBoolean(fragments[7]) /* supportsBearing */,
+                    Integer.parseInt(fragments[8]) /* powerRequirement */,
+                    Integer.parseInt(fragments[9]) /* accuracy */);
+            addTestProviderLocked(name, properties);
         }
     }
 
@@ -571,7 +601,7 @@
                     if (isAllowedByCurrentUserSettingsLocked(updateRecord.mProvider)) {
                         requestingLocation = true;
                         LocationProviderInterface locationProvider
-                            = mProvidersByName.get(updateRecord.mProvider);
+                                = mProvidersByName.get(updateRecord.mProvider);
                         ProviderProperties properties = locationProvider != null
                                 ? locationProvider.getProperties() : null;
                         if (properties != null
@@ -816,7 +846,7 @@
                     long identity = Binder.clearCallingIdentity();
                     receiver.decrementPendingBroadcastsLocked();
                     Binder.restoreCallingIdentity(identity);
-               }
+                }
             }
         }
     }
@@ -1291,13 +1321,18 @@
             if (!records.contains(this)) {
                 records.add(this);
             }
+
+            // Update statistics for historical location requests by package/provider
+            mRequestStatistics.startRequesting(
+                    mReceiver.mPackageName, provider, request.getInterval());
         }
 
         /**
-         * Method to be called when a record will no longer be used.  Calling this multiple times
-         * must have the same effect as calling it once.
+         * Method to be called when a record will no longer be used.
          */
         void disposeLocked(boolean removeReceiver) {
+            mRequestStatistics.stopRequesting(mReceiver.mPackageName, mProvider);
+
             // remove from mRecordsByProvider
             ArrayList<UpdateRecord> globalRecords = mRecordsByProvider.get(this.mProvider);
             if (globalRecords != null) {
@@ -1544,6 +1579,7 @@
         if (oldRecords != null) {
             // Call dispose() on the obsolete update records.
             for (UpdateRecord record : oldRecords.values()) {
+                // Update statistics for historical location requests by package/provider
                 record.disposeLocked(false);
             }
             // Accumulate providers
@@ -1765,7 +1801,7 @@
     @Override
     public ProviderProperties getProviderProperties(String provider) {
         if (mProvidersByName.get(provider) == null) {
-          return null;
+            return null;
         }
 
         checkResolutionLevelIsSufficientForProviderUse(getCallerAllowedResolutionLevel(),
@@ -1782,10 +1818,6 @@
 
     @Override
     public boolean isProviderEnabled(String provider) {
-        // TODO: remove this check in next release, see b/10696351
-        checkResolutionLevelIsSufficientForProviderUse(getCallerAllowedResolutionLevel(),
-                provider);
-
         // Fused provider is accessed indirectly via criteria rather than the provider-based APIs,
         // so we discourage its use
         if (LocationManager.FUSED_PROVIDER.equals(provider)) return false;
@@ -1968,7 +2000,7 @@
         // Fetch latest status update time
         long newStatusUpdateTime = p.getStatusUpdateTime();
 
-       // Get latest status
+        // Get latest status
         Bundle extras = new Bundle();
         int status = p.getStatus(extras);
 
@@ -2182,7 +2214,7 @@
         }
 
         if (mContext.checkCallingPermission(ACCESS_MOCK_LOCATION) !=
-            PackageManager.PERMISSION_GRANTED) {
+                PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("Requires ACCESS_MOCK_LOCATION permission");
         }
     }
@@ -2197,7 +2229,6 @@
 
         long identity = Binder.clearCallingIdentity();
         synchronized (mLock) {
-            MockProvider provider = new MockProvider(name, this, properties);
             // remove the real provider if we are replacing GPS or network provider
             if (LocationManager.GPS_PROVIDER.equals(name)
                     || LocationManager.NETWORK_PROVIDER.equals(name)
@@ -2207,22 +2238,34 @@
                     removeProviderLocked(p);
                 }
             }
-            if (mProvidersByName.get(name) != null) {
-                throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
-            }
-            addProviderLocked(provider);
-            mMockProviders.put(name, provider);
-            mLastLocation.put(name, null);
-            mLastLocationCoarseInterval.put(name, null);
+            addTestProviderLocked(name, properties);
             updateProvidersLocked();
         }
         Binder.restoreCallingIdentity(identity);
     }
 
+    private void addTestProviderLocked(String name, ProviderProperties properties) {
+        if (mProvidersByName.get(name) != null) {
+            throw new IllegalArgumentException("Provider \"" + name + "\" already exists");
+        }
+        MockProvider provider = new MockProvider(name, this, properties);
+        addProviderLocked(provider);
+        mMockProviders.put(name, provider);
+        mLastLocation.put(name, null);
+        mLastLocationCoarseInterval.put(name, null);
+    }
+
     @Override
     public void removeTestProvider(String provider) {
         checkMockPermissionsSafe();
         synchronized (mLock) {
+
+            // These methods can't be called after removing the test provider, so first make sure
+            // we don't leave anything dangling.
+            clearTestProviderEnabled(provider);
+            clearTestProviderLocation(provider);
+            clearTestProviderStatus(provider);
+
             MockProvider mockProvider = mMockProviders.remove(provider);
             if (mockProvider == null) {
                 throw new IllegalArgumentException("Provider \"" + provider + "\" unknown");
@@ -2354,13 +2397,20 @@
             for (Receiver receiver : mReceivers.values()) {
                 pw.println("    " + receiver);
             }
-            pw.println("  Records by Provider:");
+            pw.println("  Active Records by Provider:");
             for (Map.Entry<String, ArrayList<UpdateRecord>> entry : mRecordsByProvider.entrySet()) {
                 pw.println("    " + entry.getKey() + ":");
                 for (UpdateRecord record : entry.getValue()) {
                     pw.println("      " + record);
                 }
             }
+            pw.println("  Historical Records by Provider:");
+            for (Map.Entry<PackageProviderKey, PackageStatistics> entry
+                    : mRequestStatistics.statistics.entrySet()) {
+                PackageProviderKey key = entry.getKey();
+                PackageStatistics stats = entry.getValue();
+                pw.println("    " + key.packageName + ": " + key.providerName + ": " + stats);
+            }
             pw.println("  Last Known Locations:");
             for (Map.Entry<String, Location> entry : mLastLocation.entrySet()) {
                 String provider = entry.getKey();
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index 35e7afa..0d2cee8 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -16,7 +16,6 @@
 
 package com.android.server;
 
-import android.app.ActivityManagerNative;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
@@ -29,11 +28,13 @@
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.database.sqlite.SQLiteStatement;
-import android.media.AudioManager;
-import android.media.AudioService;
 import android.os.Binder;
 import android.os.Environment;
+import android.os.IBinder;
 import android.os.RemoteException;
+import android.os.storage.IMountService;
+import android.os.ServiceManager;
+import android.os.storage.StorageManager;
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.os.UserManager;
@@ -82,6 +83,7 @@
 
     private final Context mContext;
     private LockPatternUtils mLockPatternUtils;
+    private boolean mFirstCallToVold;
 
     public LockSettingsService(Context context) {
         mContext = context;
@@ -89,6 +91,7 @@
         mOpenHelper = new DatabaseHelper(mContext);
 
         mLockPatternUtils = new LockPatternUtils(context);
+        mFirstCallToVold = true;
     }
 
     public void systemReady() {
@@ -350,6 +353,51 @@
     }
 
     @Override
+        public boolean checkVoldPassword(int userId) throws RemoteException {
+        if (!mFirstCallToVold) {
+            return false;
+        }
+        mFirstCallToVold = false;
+
+        checkPasswordReadPermission(userId);
+
+        // There's no guarantee that this will safely connect, but if it fails
+        // we will simply show the lock screen when we shouldn't, so relatively
+        // benign. There is an outside chance something nasty would happen if
+        // this service restarted before vold stales out the password in this
+        // case. The nastiness is limited to not showing the lock screen when
+        // we should, within the first minute of decrypting the phone if this
+        // service can't connect to vold, it restarts, and then the new instance
+        // does successfully connect.
+        final IMountService service = getMountService();
+        String password = service.getPassword();
+        service.clearPassword();
+        if (password == null) {
+            return false;
+        }
+
+        try {
+            if (mLockPatternUtils.isLockPatternEnabled()) {
+                if (checkPattern(password, userId)) {
+                    return true;
+                }
+            }
+        } catch (Exception e) {
+        }
+
+        try {
+            if (mLockPatternUtils.isLockPasswordEnabled()) {
+                if (checkPassword(password, userId)) {
+                    return true;
+                }
+            }
+        } catch (Exception e) {
+        }
+
+        return false;
+    }
+
+    @Override
     public void removeUser(int userId) {
         checkWritePermission(userId);
 
@@ -527,4 +575,12 @@
         Secure.LOCK_SCREEN_OWNER_INFO_ENABLED,
         Secure.LOCK_SCREEN_OWNER_INFO
     };
+
+    private IMountService getMountService() {
+        final IBinder service = ServiceManager.getService("mount");
+        if (service != null) {
+            return IMountService.Stub.asInterface(service);
+        }
+        return null;
+    }
 }
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index f73a92b..7ec9b82 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -52,6 +52,7 @@
 import android.os.storage.IMountShutdownObserver;
 import android.os.storage.IObbActionListener;
 import android.os.storage.OnObbStateChangeListener;
+import android.os.storage.StorageManager;
 import android.os.storage.StorageResultCode;
 import android.os.storage.StorageVolume;
 import android.text.TextUtils;
@@ -73,6 +74,8 @@
 import com.google.android.collect.Lists;
 import com.google.android.collect.Maps;
 
+import org.apache.commons.codec.binary.Hex;
+import org.apache.commons.codec.DecoderException;
 import org.xmlpull.v1.XmlPullParserException;
 
 import java.io.File;
@@ -80,6 +83,7 @@
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
 import java.security.NoSuchAlgorithmException;
 import java.security.spec.InvalidKeySpecException;
 import java.security.spec.KeySpec;
@@ -108,6 +112,9 @@
 class MountService extends IMountService.Stub
         implements INativeDaemonConnectorCallbacks, Watchdog.Monitor {
 
+    // Static direct instance pointer for the tightly-coupled idle service to use
+    static MountService sSelf = null;
+
     // TODO: listen for user creation/deletion
 
     private static final boolean LOCAL_LOGD = false;
@@ -152,6 +159,7 @@
         public static final int VolumeListResult               = 110;
         public static final int AsecListResult                 = 111;
         public static final int StorageUsersListResult         = 112;
+        public static final int CryptfsGetfieldResult          = 113;
 
         /*
          * 200 series - Requestion action has been successfully completed.
@@ -187,6 +195,12 @@
         public static final int FstrimCompleted                = 700;
     }
 
+    /** List of crypto types.
+      * These must match CRYPT_TYPE_XXX in cryptfs.h AND their
+      * corresponding commands in CommandListener.cpp */
+    public static final String[] CRYPTO_TYPES
+        = { "password", "default", "pattern", "pin" };
+
     private Context mContext;
     private NativeDaemonConnector mConnector;
 
@@ -346,6 +360,7 @@
     private static final int H_UNMOUNT_PM_DONE = 2;
     private static final int H_UNMOUNT_MS = 3;
     private static final int H_SYSTEM_READY = 4;
+    private static final int H_FSTRIM = 5;
 
     private static final int RETRY_UNMOUNT_DELAY = 30; // in ms
     private static final int MAX_UNMOUNT_RETRIES = 4;
@@ -514,6 +529,24 @@
                     }
                     break;
                 }
+                case H_FSTRIM: {
+                    waitForReady();
+                    Slog.i(TAG, "Running fstrim idle maintenance");
+                    try {
+                        // This method must be run on the main (handler) thread,
+                        // so it is safe to directly call into vold.
+                        mConnector.execute("fstrim", "dotrim");
+                        EventLogTags.writeFstrimStart(SystemClock.elapsedRealtime());
+                    } catch (NativeDaemonConnectorException ndce) {
+                        Slog.e(TAG, "Failed to run fstrim!");
+                    }
+                    // invoke the completion callback, if any
+                    Runnable callback = (Runnable) msg.obj;
+                    if (callback != null) {
+                        callback.run();
+                    }
+                    break;
+                }
             }
         }
     };
@@ -543,6 +576,14 @@
         }
     }
 
+    private boolean isReady() {
+        try {
+            return mConnectedSignal.await(0, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException e) {
+            return false;
+        }
+    }
+
     private void handleSystemReady() {
         // Snapshot current volume states since it's not safe to call into vold
         // while holding locks.
@@ -628,27 +669,6 @@
         }
     };
 
-    private final BroadcastReceiver mIdleMaintenanceReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            waitForReady();
-            String action = intent.getAction();
-            // Since fstrim will be run on a daily basis we do not expect
-            // fstrim to be too long, so it is not interruptible. We will
-            // implement interruption only in case we see issues.
-            if (Intent.ACTION_IDLE_MAINTENANCE_START.equals(action)) {
-                try {
-                    // This method runs on the handler thread,
-                    // so it is safe to directly call into vold.
-                    mConnector.execute("fstrim", "dotrim");
-                    EventLogTags.writeFstrimStart(SystemClock.elapsedRealtime());
-                } catch (NativeDaemonConnectorException ndce) {
-                    Slog.e(TAG, "Failed to run fstrim!");
-                }
-            }
-        }
-    };
-
     private final class MountServiceBinderListener implements IBinder.DeathRecipient {
         final IMountServiceListener mListener;
 
@@ -666,6 +686,10 @@
         }
     }
 
+    void runIdleMaintenance(Runnable callback) {
+        mHandler.sendMessage(mHandler.obtainMessage(H_FSTRIM, callback));
+    }
+
     private void doShareUnshareVolume(String path, String method, boolean enable) {
         // TODO: Add support for multiple share methods
         if (!method.equals("ums")) {
@@ -803,6 +827,13 @@
     /**
      * Callback from NativeDaemonConnector
      */
+    public boolean onCheckHoldWakeLock(int code) {
+        return false;
+    }
+
+    /**
+     * Callback from NativeDaemonConnector
+     */
     public boolean onEvent(int code, String raw, String[] cooked) {
         if (DEBUG_EVENTS) {
             StringBuilder builder = new StringBuilder();
@@ -1357,6 +1388,8 @@
      * @param context  Binder context for this service
      */
     public MountService(Context context) {
+        sSelf = this;
+
         mContext = context;
 
         synchronized (mVolumesLock) {
@@ -1383,12 +1416,6 @@
                     mUsbReceiver, new IntentFilter(UsbManager.ACTION_USB_STATE), null, mHandler);
         }
 
-        // Watch for idle maintenance changes
-        IntentFilter idleMaintenanceFilter = new IntentFilter();
-        idleMaintenanceFilter.addAction(Intent.ACTION_IDLE_MAINTENANCE_START);
-        mContext.registerReceiverAsUser(mIdleMaintenanceReceiver, UserHandle.ALL,
-                idleMaintenanceFilter, null, mHandler);
-
         // Add OBB Action Handler to MountService thread.
         mObbActionHandler = new ObbActionHandler(IoThread.get().getLooper());
 
@@ -1397,7 +1424,8 @@
          * amount of containers we'd ever expect to have. This keeps an
          * "asec list" from blocking a thread repeatedly.
          */
-        mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG, 25);
+        mConnector = new NativeDaemonConnector(this, "vold", MAX_CONTAINERS * 2, VOLD_TAG, 25,
+                null);
 
         Thread thread = new Thread(mConnector, VOLD_TAG);
         thread.start();
@@ -2056,6 +2084,27 @@
         }
     }
 
+    private String toHex(String password) {
+        if (password == null) {
+            return new String();
+        }
+        byte[] bytes = password.getBytes(StandardCharsets.UTF_8);
+        return new String(Hex.encodeHex(bytes));
+    }
+
+    private String fromHex(String hexPassword) {
+        if (hexPassword == null) {
+            return null;
+        }
+
+        try {
+            byte[] bytes = Hex.decodeHex(hexPassword.toCharArray());
+            return new String(bytes, StandardCharsets.UTF_8);
+        } catch (DecoderException e) {
+            return null;
+        }
+    }
+
     @Override
     public int decryptStorage(String password) {
         if (TextUtils.isEmpty(password)) {
@@ -2073,7 +2122,7 @@
 
         final NativeDaemonEvent event;
         try {
-            event = mConnector.execute("cryptfs", "checkpw", new SensitiveArg(password));
+            event = mConnector.execute("cryptfs", "checkpw", new SensitiveArg(toHex(password)));
 
             final int code = Integer.parseInt(event.getMessage());
             if (code == 0) {
@@ -2097,8 +2146,8 @@
         }
     }
 
-    public int encryptStorage(String password) {
-        if (TextUtils.isEmpty(password)) {
+    public int encryptStorage(int type, String password) {
+        if (TextUtils.isEmpty(password) && type != StorageManager.CRYPT_TYPE_DEFAULT) {
             throw new IllegalArgumentException("password cannot be empty");
         }
 
@@ -2112,7 +2161,8 @@
         }
 
         try {
-            mConnector.execute("cryptfs", "enablecrypto", "inplace", new SensitiveArg(password));
+            mConnector.execute("cryptfs", "enablecrypto", "inplace", CRYPTO_TYPES[type],
+                               new SensitiveArg(toHex(password)));
         } catch (NativeDaemonConnectorException e) {
             // Encryption failed
             return e.getCode();
@@ -2121,11 +2171,11 @@
         return 0;
     }
 
-    public int changeEncryptionPassword(String password) {
-        if (TextUtils.isEmpty(password)) {
-            throw new IllegalArgumentException("password cannot be empty");
-        }
-
+    /** Set the password for encrypting the master key.
+     *  @param type One of the CRYPTO_TYPE_XXX consts defined in StorageManager.
+     *  @param password The password to set.
+     */
+    public int changeEncryptionPassword(int type, String password) {
         mContext.enforceCallingOrSelfPermission(Manifest.permission.CRYPT_KEEPER,
             "no permission to access the crypt keeper");
 
@@ -2137,7 +2187,8 @@
 
         final NativeDaemonEvent event;
         try {
-            event = mConnector.execute("cryptfs", "changepw", new SensitiveArg(password));
+            event = mConnector.execute("cryptfs", "changepw", CRYPTO_TYPES[type],
+                                       new SensitiveArg(toHex(password)));
             return Integer.parseInt(event.getMessage());
         } catch (NativeDaemonConnectorException e) {
             // Encryption failed
@@ -2170,7 +2221,7 @@
 
         final NativeDaemonEvent event;
         try {
-            event = mConnector.execute("cryptfs", "verifypw", new SensitiveArg(password));
+            event = mConnector.execute("cryptfs", "verifypw", new SensitiveArg(toHex(password)));
             Slog.i(TAG, "cryptfs verifypw => " + event.getMessage());
             return Integer.parseInt(event.getMessage());
         } catch (NativeDaemonConnectorException e) {
@@ -2179,6 +2230,101 @@
         }
     }
 
+    /**
+     * Get the type of encryption used to encrypt the master key.
+     * @return The type, one of the CRYPT_TYPE_XXX consts from StorageManager.
+     */
+    @Override
+    public int getPasswordType() throws RemoteException {
+
+        waitForReady();
+
+        final NativeDaemonEvent event;
+        try {
+            event = mConnector.execute("cryptfs", "getpwtype");
+            for (int i = 0; i < CRYPTO_TYPES.length; ++i) {
+                if (CRYPTO_TYPES[i].equals(event.getMessage()))
+                    return i;
+            }
+
+            throw new IllegalStateException("unexpected return from cryptfs");
+        } catch (NativeDaemonConnectorException e) {
+            throw e.rethrowAsParcelableException();
+        }
+    }
+
+    /**
+     * Set a field in the crypto header.
+     * @param field field to set
+     * @param contents contents to set in field
+     */
+    @Override
+    public void setField(String field, String contents) throws RemoteException {
+
+        waitForReady();
+
+        final NativeDaemonEvent event;
+        try {
+            event = mConnector.execute("cryptfs", "setfield", field, contents);
+        } catch (NativeDaemonConnectorException e) {
+            throw e.rethrowAsParcelableException();
+        }
+    }
+
+    /**
+     * Gets a field from the crypto header.
+     * @param field field to get
+     * @return contents of field
+     */
+    @Override
+    public String getField(String field) throws RemoteException {
+
+        waitForReady();
+
+        final NativeDaemonEvent event;
+        try {
+            final String[] contents = NativeDaemonEvent.filterMessageList(
+                    mConnector.executeForList("cryptfs", "getfield", field),
+                    VoldResponseCode.CryptfsGetfieldResult);
+            String result = new String();
+            for (String content : contents) {
+                result += content;
+            }
+            return result;
+        } catch (NativeDaemonConnectorException e) {
+            throw e.rethrowAsParcelableException();
+        }
+    }
+
+    @Override
+    public String getPassword() throws RemoteException {
+        if (!isReady()) {
+            return new String();
+        }
+
+        final NativeDaemonEvent event;
+        try {
+            event = mConnector.execute("cryptfs", "getpw");
+            return fromHex(event.getMessage());
+        } catch (NativeDaemonConnectorException e) {
+            throw e.rethrowAsParcelableException();
+        }
+    }
+
+    @Override
+    public void clearPassword() throws RemoteException {
+        if (!isReady()) {
+            return;
+        }
+
+        final NativeDaemonEvent event;
+        try {
+            event = mConnector.execute("cryptfs", "clearpw");
+        } catch (NativeDaemonConnectorException e) {
+            throw e.rethrowAsParcelableException();
+        }
+    }
+
     @Override
     public int mkdirs(String callingPkg, String appPath) {
         final int userId = UserHandle.getUserId(Binder.getCallingUid());
diff --git a/services/core/java/com/android/server/MountServiceIdler.java b/services/core/java/com/android/server/MountServiceIdler.java
new file mode 100644
index 0000000..8b19321
--- /dev/null
+++ b/services/core/java/com/android/server/MountServiceIdler.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 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.android.server;
+
+import android.app.maintenance.IdleService;
+import android.util.Slog;
+
+public class MountServiceIdler extends IdleService {
+    private static final String TAG = "MountServiceIdler";
+
+    private Runnable mFinishCallback = new Runnable() {
+        @Override
+        public void run() {
+            Slog.i(TAG, "Got mount service completion callback");
+            finishIdle();
+        }
+    };
+
+    @Override
+    public boolean onIdleStart() {
+        // The mount service will run an fstrim operation asynchronously
+        // on a designated separate thread, so we provide it with a callback
+        // that lets us cleanly end our idle timeslice.  It's safe to call
+        // finishIdle() from any thread.
+        MountService ms = MountService.sSelf;
+        if (ms != null) {
+            ms.runIdleMaintenance(mFinishCallback);
+        }
+        return ms != null;
+    }
+
+    @Override
+    public void onIdleStop() {
+    }
+}
diff --git a/services/core/java/com/android/server/NativeDaemonConnector.java b/services/core/java/com/android/server/NativeDaemonConnector.java
index 417d6d8..0d1e122 100644
--- a/services/core/java/com/android/server/NativeDaemonConnector.java
+++ b/services/core/java/com/android/server/NativeDaemonConnector.java
@@ -20,7 +20,9 @@
 import android.net.LocalSocketAddress;
 import android.os.Build;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
+import android.os.PowerManager;
 import android.os.SystemClock;
 import android.util.LocalLog;
 import android.util.Slog;
@@ -56,6 +58,10 @@
 
     private final ResponseQueue mResponseQueue;
 
+    private final PowerManager.WakeLock mWakeLock;
+
+    private final Looper mLooper;
+
     private INativeDaemonConnectorCallbacks mCallbacks;
     private Handler mCallbackHandler;
 
@@ -70,10 +76,22 @@
     private final int BUFFER_SIZE = 4096;
 
     NativeDaemonConnector(INativeDaemonConnectorCallbacks callbacks, String socket,
-            int responseQueueSize, String logTag, int maxLogSize) {
+            int responseQueueSize, String logTag, int maxLogSize, PowerManager.WakeLock wl) {
+        this(callbacks, socket, responseQueueSize, logTag, maxLogSize, wl,
+                FgThread.get().getLooper());
+    }
+
+    NativeDaemonConnector(INativeDaemonConnectorCallbacks callbacks, String socket,
+            int responseQueueSize, String logTag, int maxLogSize, PowerManager.WakeLock wl,
+            Looper looper) {
         mCallbacks = callbacks;
         mSocket = socket;
         mResponseQueue = new ResponseQueue(responseQueueSize);
+        mWakeLock = wl;
+        if (mWakeLock != null) {
+            mWakeLock.setReferenceCounted(true);
+        }
+        mLooper = looper;
         mSequenceNumber = new AtomicInteger(0);
         TAG = logTag != null ? logTag : "NativeDaemonConnector";
         mLocalLog = new LocalLog(maxLogSize);
@@ -81,7 +99,7 @@
 
     @Override
     public void run() {
-        mCallbackHandler = new Handler(FgThread.get().getLooper(), this);
+        mCallbackHandler = new Handler(mLooper, this);
 
         while (true) {
             try {
@@ -102,6 +120,10 @@
             }
         } catch (Exception e) {
             loge("Error handling '" + event + "': " + e);
+        } finally {
+            if (mCallbacks.onCheckHoldWakeLock(msg.what) && mWakeLock != null) {
+                mWakeLock.release();
+            }
         }
         return true;
     }
@@ -154,18 +176,30 @@
                                 buffer, start, i - start, StandardCharsets.UTF_8);
                         log("RCV <- {" + rawEvent + "}");
 
+                        boolean releaseWl = false;
                         try {
                             final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent(
                                     rawEvent);
                             if (event.isClassUnsolicited()) {
                                 // TODO: migrate to sending NativeDaemonEvent instances
-                                mCallbackHandler.sendMessage(mCallbackHandler.obtainMessage(
-                                        event.getCode(), event.getRawEvent()));
+                                if (mCallbacks.onCheckHoldWakeLock(event.getCode())
+                                        && mWakeLock != null) {
+                                    mWakeLock.acquire();
+                                    releaseWl = true;
+                                }
+                                if (mCallbackHandler.sendMessage(mCallbackHandler.obtainMessage(
+                                        event.getCode(), event.getRawEvent()))) {
+                                    releaseWl = false;
+                                }
                             } else {
                                 mResponseQueue.add(event.getCmdNumber(), event);
                             }
                         } catch (IllegalArgumentException e) {
                             log("Problem parsing message: " + rawEvent + " - " + e);
+                        } finally {
+                            if (releaseWl) {
+                                mWakeLock.acquire();
+                            }
                         }
 
                         start = i + 1;
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index e83d376..7ce45f7 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -20,6 +20,7 @@
 import static android.Manifest.permission.DUMP;
 import static android.Manifest.permission.SHUTDOWN;
 import static android.net.NetworkStats.SET_DEFAULT;
+import static android.net.NetworkStats.TAG_ALL;
 import static android.net.NetworkStats.TAG_NONE;
 import static android.net.NetworkStats.UID_ALL;
 import static android.net.TrafficStats.UID_TETHERING;
@@ -36,6 +37,7 @@
 import static com.android.server.NetworkManagementSocketTagger.PROP_QTAGUID_ENABLED;
 
 import android.content.Context;
+import android.net.ConnectivityManager;
 import android.net.INetworkManagementEventObserver;
 import android.net.InterfaceConfiguration;
 import android.net.LinkAddress;
@@ -47,13 +49,17 @@
 import android.os.BatteryStats;
 import android.os.Binder;
 import android.os.Handler;
+import android.os.INetworkActivityListener;
 import android.os.INetworkManagementService;
+import android.os.PowerManager;
 import android.os.Process;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.SystemProperties;
+import android.telephony.DataConnectionRealTimeInfo;
+import android.telephony.PhoneStateListener;
 import android.util.Log;
 import android.util.Slog;
 import android.util.SparseBooleanArray;
@@ -80,7 +86,6 @@
 import java.net.NetworkInterface;
 import java.net.SocketException;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -140,19 +145,25 @@
         public static final int InterfaceDnsServerInfo    = 615;
     }
 
+    static final int DAEMON_MSG_MOBILE_CONN_REAL_TIME_INFO = 1;
+
     /**
      * Binder context for this service
      */
-    private Context mContext;
+    private final Context mContext;
 
     /**
      * connector object for communicating with netd
      */
-    private NativeDaemonConnector mConnector;
+    private final NativeDaemonConnector mConnector;
 
-    private final Handler mMainHandler = new Handler();
+    private final Handler mFgHandler;
+    private final Handler mDaemonHandler;
+    private final PhoneStateListener mPhoneStateListener;
 
-    private Thread mThread;
+    private IBatteryStats mBatteryStats;
+
+    private final Thread mThread;
     private CountDownLatch mConnectedSignal = new CountDownLatch(1);
 
     private final RemoteCallbackList<INetworkManagementEventObserver> mObservers =
@@ -172,12 +183,12 @@
     /** Set of interfaces with active idle timers. */
     private static class IdleTimerParams {
         public final int timeout;
-        public final String label;
+        public final int type;
         public int networkCount;
 
-        IdleTimerParams(int timeout, String label) {
+        IdleTimerParams(int timeout, int type) {
             this.timeout = timeout;
-            this.label = label;
+            this.type = type;
             this.networkCount = 1;
         }
     }
@@ -186,6 +197,13 @@
     private volatile boolean mBandwidthControlEnabled;
     private volatile boolean mFirewallEnabled;
 
+    private boolean mMobileActivityFromRadio = false;
+    private int mLastPowerStateFromRadio = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
+
+    private final RemoteCallbackList<INetworkActivityListener> mNetworkActivityListeners =
+            new RemoteCallbackList<INetworkActivityListener>();
+    private boolean mNetworkActive;
+
     /**
      * Constructs a new NetworkManagementService instance
      *
@@ -194,14 +212,39 @@
     private NetworkManagementService(Context context, String socket) {
         mContext = context;
 
+        // make sure this is on the same looper as our NativeDaemonConnector for sync purposes
+        mFgHandler = new Handler(FgThread.get().getLooper());
+
         if ("simulator".equals(SystemProperties.get("ro.product.device"))) {
+            mConnector = null;
+            mThread = null;
+            mDaemonHandler = null;
+            mPhoneStateListener = null;
             return;
         }
 
+        // Don't need this wake lock, since we now have a time stamp for when
+        // the network actually went inactive.  (It might be nice to still do this,
+        // but I don't want to do it through the power manager because that pollutes the
+        // battery stats history with pointless noise.)
+        //PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
+        PowerManager.WakeLock wl = null; //pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, NETD_TAG);
+
         mConnector = new NativeDaemonConnector(
-                new NetdCallbackReceiver(), socket, 10, NETD_TAG, 160);
+                new NetdCallbackReceiver(), socket, 10, NETD_TAG, 160, wl,
+                FgThread.get().getLooper());
         mThread = new Thread(mConnector, NETD_TAG);
 
+        mDaemonHandler = new Handler(FgThread.get().getLooper());
+        mPhoneStateListener = new PhoneStateListener(mDaemonHandler.getLooper()) {
+            public void onDataConnectionRealTimeInfoChanged(
+                    DataConnectionRealTimeInfo dcRtInfo) {
+                // Disabled for now, until we are getting good data.
+                //notifyInterfaceClassActivity(ConnectivityManager.TYPE_MOBILE,
+                //        dcRtInfo.getDcPowerState(), dcRtInfo.getTime(), true);
+            }
+        };
+
         // Add ourself to the Watchdog monitors.
         Watchdog.getInstance().addMonitor(this);
     }
@@ -227,6 +270,17 @@
         if (DBG) Slog.d(TAG, "Prepared");
     }
 
+    private IBatteryStats getBatteryStats() {
+        synchronized (this) {
+            if (mBatteryStats != null) {
+                return mBatteryStats;
+            }
+            mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService(
+                    BatteryStats.SERVICE_NAME));
+            return mBatteryStats;
+        }
+    }
+
     @Override
     public void registerObserver(INetworkManagementEventObserver observer) {
         mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
@@ -244,14 +298,17 @@
      */
     private void notifyInterfaceStatusChanged(String iface, boolean up) {
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).interfaceStatusChanged(iface, up);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).interfaceStatusChanged(iface, up);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     /**
@@ -260,14 +317,17 @@
      */
     private void notifyInterfaceLinkStateChanged(String iface, boolean up) {
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).interfaceLinkStateChanged(iface, up);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).interfaceLinkStateChanged(iface, up);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     /**
@@ -275,14 +335,17 @@
      */
     private void notifyInterfaceAdded(String iface) {
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).interfaceAdded(iface);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).interfaceAdded(iface);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     /**
@@ -295,14 +358,17 @@
         mActiveQuotas.remove(iface);
 
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).interfaceRemoved(iface);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).interfaceRemoved(iface);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     /**
@@ -310,29 +376,83 @@
      */
     private void notifyLimitReached(String limitName, String iface) {
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).limitReached(limitName, iface);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).limitReached(limitName, iface);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     /**
      * Notify our observers of a change in the data activity state of the interface
      */
-    private void notifyInterfaceClassActivity(String label, boolean active) {
-        final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged(label, active);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+    private void notifyInterfaceClassActivity(int type, int powerState, long tsNanos,
+            boolean fromRadio) {
+        final boolean isMobile = ConnectivityManager.isNetworkTypeMobile(type);
+        if (isMobile) {
+            if (!fromRadio) {
+                if (mMobileActivityFromRadio) {
+                    // If this call is not coming from a report from the radio itself, but we
+                    // have previously received reports from the radio, then we will take the
+                    // power state to just be whatever the radio last reported.
+                    powerState = mLastPowerStateFromRadio;
+                }
+            } else {
+                mMobileActivityFromRadio = true;
+            }
+            if (mLastPowerStateFromRadio != powerState) {
+                mLastPowerStateFromRadio = powerState;
+                try {
+                    getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos);
+                } catch (RemoteException e) {
+                }
             }
         }
-        mObservers.finishBroadcast();
+
+        boolean isActive = powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_MEDIUM
+                || powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH;
+
+        if (!isMobile || fromRadio || !mMobileActivityFromRadio) {
+            // Report the change in data activity.  We don't do this if this is a change
+            // on the mobile network, that is not coming from the radio itself, and we
+            // have previously seen change reports from the radio.  In that case only
+            // the radio is the authority for the current state.
+            final int length = mObservers.beginBroadcast();
+            try {
+                for (int i = 0; i < length; i++) {
+                    try {
+                        mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged(
+                                Integer.toString(type), isActive, tsNanos);
+                    } catch (RemoteException e) {
+                    } catch (RuntimeException e) {
+                    }
+                }
+            } finally {
+                mObservers.finishBroadcast();
+            }
+        }
+
+        boolean report = false;
+        synchronized (mIdleTimerLock) {
+            if (mActiveIdleTimers.isEmpty()) {
+                // If there are no idle timers, we are not monitoring activity, so we
+                // are always considered active.
+                isActive = true;
+            }
+            if (mNetworkActive != isActive) {
+                mNetworkActive = isActive;
+                report = isActive;
+            }
+        }
+        if (report) {
+            reportNetworkActive();
+        }
     }
 
     /**
@@ -360,8 +480,7 @@
 
         if (mBandwidthControlEnabled) {
             try {
-                IBatteryStats.Stub.asInterface(ServiceManager.getService(BatteryStats.SERVICE_NAME))
-                        .noteNetworkStatsEnabled();
+                getBatteryStats().noteNetworkStatsEnabled();
             } catch (RemoteException e) {
             }
         }
@@ -408,14 +527,17 @@
      */
     private void notifyAddressUpdated(String iface, LinkAddress address) {
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).addressUpdated(iface, address);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).addressUpdated(iface, address);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     /**
@@ -423,14 +545,17 @@
      */
     private void notifyAddressRemoved(String iface, LinkAddress address) {
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).addressRemoved(iface, address);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).addressRemoved(iface, address);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     /**
@@ -438,14 +563,18 @@
      */
     private void notifyInterfaceDnsServerInfo(String iface, long lifetime, String[] addresses) {
         final int length = mObservers.beginBroadcast();
-        for (int i = 0; i < length; i++) {
-            try {
-                mObservers.getBroadcastItem(i).interfaceDnsServerInfo(iface, lifetime, addresses);
-            } catch (RemoteException e) {
-            } catch (RuntimeException e) {
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mObservers.getBroadcastItem(i).interfaceDnsServerInfo(iface, lifetime,
+                        addresses);
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
             }
+        } finally {
+            mObservers.finishBroadcast();
         }
-        mObservers.finishBroadcast();
     }
 
     //
@@ -461,7 +590,7 @@
                 mConnectedSignal.countDown();
                 mConnectedSignal = null;
             } else {
-                mMainHandler.post(new Runnable() {
+                mFgHandler.post(new Runnable() {
                     @Override
                     public void run() {
                         prepareNativeDaemon();
@@ -471,6 +600,11 @@
         }
 
         @Override
+        public boolean onCheckHoldWakeLock(int code) {
+            return code == NetdResponseCode.InterfaceClassActivity;
+        }
+
+        @Override
         public boolean onEvent(int code, String raw, String[] cooked) {
             String errorMessage = String.format("Invalid event from daemon (%s)", raw);
             switch (code) {
@@ -522,8 +656,18 @@
                     if (cooked.length < 4 || !cooked[1].equals("IfaceClass")) {
                         throw new IllegalStateException(errorMessage);
                     }
+                    long timestampNanos = 0;
+                    if (cooked.length == 5) {
+                        try {
+                            timestampNanos = Long.parseLong(cooked[4]);
+                        } catch(NumberFormatException ne) {}
+                    } else {
+                        timestampNanos = SystemClock.elapsedRealtimeNanos();
+                    }
                     boolean isActive = cooked[2].equals("active");
-                    notifyInterfaceClassActivity(cooked[3], isActive);
+                    notifyInterfaceClassActivity(Integer.parseInt(cooked[3]),
+                            isActive ? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH
+                            : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, timestampNanos, false);
                     return true;
                     // break;
             case NetdResponseCode.InterfaceAddressChange:
@@ -1185,7 +1329,7 @@
     }
 
     @Override
-    public void addIdleTimer(String iface, int timeout, String label) {
+    public void addIdleTimer(String iface, int timeout, final int type) {
         mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
 
         if (DBG) Slog.d(TAG, "Adding idletimer");
@@ -1199,11 +1343,24 @@
             }
 
             try {
-                mConnector.execute("idletimer", "add", iface, Integer.toString(timeout), label);
+                mConnector.execute("idletimer", "add", iface, Integer.toString(timeout),
+                        Integer.toString(type));
             } catch (NativeDaemonConnectorException e) {
                 throw e.rethrowAsParcelableException();
             }
-            mActiveIdleTimers.put(iface, new IdleTimerParams(timeout, label));
+            mActiveIdleTimers.put(iface, new IdleTimerParams(timeout, type));
+
+            // Networks start up.
+            if (ConnectivityManager.isNetworkTypeMobile(type)) {
+                mNetworkActive = false;
+            }
+            mDaemonHandler.post(new Runnable() {
+                @Override public void run() {
+                    notifyInterfaceClassActivity(type,
+                            DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
+                            SystemClock.elapsedRealtimeNanos(), false);
+                }
+            });
         }
     }
 
@@ -1214,18 +1371,25 @@
         if (DBG) Slog.d(TAG, "Removing idletimer");
 
         synchronized (mIdleTimerLock) {
-            IdleTimerParams params = mActiveIdleTimers.get(iface);
+            final IdleTimerParams params = mActiveIdleTimers.get(iface);
             if (params == null || --(params.networkCount) > 0) {
                 return;
             }
 
             try {
                 mConnector.execute("idletimer", "remove", iface,
-                        Integer.toString(params.timeout), params.label);
+                        Integer.toString(params.timeout), Integer.toString(params.type));
             } catch (NativeDaemonConnectorException e) {
                 throw e.rethrowAsParcelableException();
             }
             mActiveIdleTimers.remove(iface);
+            mDaemonHandler.post(new Runnable() {
+                @Override public void run() {
+                    notifyInterfaceClassActivity(params.type,
+                            DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
+                            SystemClock.elapsedRealtimeNanos(), false);
+                }
+            });
         }
     }
 
@@ -1253,7 +1417,7 @@
     public NetworkStats getNetworkStatsDetail() {
         mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
         try {
-            return mStatsFactory.readNetworkStatsDetail(UID_ALL);
+            return mStatsFactory.readNetworkStatsDetail(UID_ALL, null, TAG_ALL, null);
         } catch (IOException e) {
             throw new IllegalStateException(e);
         }
@@ -1414,7 +1578,7 @@
     public NetworkStats getNetworkStatsUidDetail(int uid) {
         mContext.enforceCallingOrSelfPermission(CONNECTIVITY_INTERNAL, TAG);
         try {
-            return mStatsFactory.readNetworkStatsDetail(uid);
+            return mStatsFactory.readNetworkStatsDetail(uid, null, TAG_ALL, null);
         } catch (IOException e) {
             throw new IllegalStateException(e);
         }
@@ -1784,6 +1948,38 @@
         return event.getMessage().endsWith("started");
     }
 
+    @Override
+    public void registerNetworkActivityListener(INetworkActivityListener listener) {
+        mNetworkActivityListeners.register(listener);
+    }
+
+    @Override
+    public void unregisterNetworkActivityListener(INetworkActivityListener listener) {
+        mNetworkActivityListeners.unregister(listener);
+    }
+
+    @Override
+    public boolean isNetworkActive() {
+        synchronized (mNetworkActivityListeners) {
+            return mNetworkActive || mActiveIdleTimers.isEmpty();
+        }
+    }
+
+    private void reportNetworkActive() {
+        final int length = mNetworkActivityListeners.beginBroadcast();
+        try {
+            for (int i = 0; i < length; i++) {
+                try {
+                    mNetworkActivityListeners.getBroadcastItem(i).onNetworkActive();
+                } catch (RemoteException e) {
+                } catch (RuntimeException e) {
+                }
+            }
+        } finally {
+            mNetworkActivityListeners.finishBroadcast();
+        }
+    }
+
     /** {@inheritDoc} */
     @Override
     public void monitor() {
@@ -1801,6 +1997,9 @@
         pw.println();
 
         pw.print("Bandwidth control enabled: "); pw.println(mBandwidthControlEnabled);
+        pw.print("mMobileActivityFromRadio="); pw.print(mMobileActivityFromRadio);
+                pw.print(" mLastPowerStateFromRadio="); pw.println(mLastPowerStateFromRadio);
+        pw.print("mNetworkActive="); pw.println(mNetworkActive);
 
         synchronized (mQuotaLock) {
             pw.print("Active quota ifaces: "); pw.println(mActiveQuotas.toString());
@@ -1817,6 +2016,17 @@
             pw.println("]");
         }
 
+        synchronized (mIdleTimerLock) {
+            pw.println("Idle timers:");
+            for (HashMap.Entry<String, IdleTimerParams> ent : mActiveIdleTimers.entrySet()) {
+                pw.print("  "); pw.print(ent.getKey()); pw.println(":");
+                IdleTimerParams params = ent.getValue();
+                pw.print("    timeout="); pw.print(params.timeout);
+                pw.print(" type="); pw.print(params.type);
+                pw.print(" networkCount="); pw.println(params.networkCount);
+            }
+        }
+
         pw.print("Firewall enabled: "); pw.println(mFirewallEnabled);
     }
 }
diff --git a/services/core/java/com/android/server/NetworkScoreService.java b/services/core/java/com/android/server/NetworkScoreService.java
new file mode 100644
index 0000000..4f0c9b5
--- /dev/null
+++ b/services/core/java/com/android/server/NetworkScoreService.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2014 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.android.server;
+
+import android.Manifest.permission;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.net.INetworkScoreCache;
+import android.net.INetworkScoreService;
+import android.net.NetworkScorerAppManager;
+import android.net.ScoredNetwork;
+import android.os.RemoteException;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.internal.R;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Backing service for {@link android.net.NetworkScoreManager}.
+ * @hide
+ */
+public class NetworkScoreService extends INetworkScoreService.Stub {
+    private static final String TAG = "NetworkScoreService";
+
+    /** SharedPreference bit set to true after the service is first initialized. */
+    private static final String PREF_SCORING_PROVISIONED = "is_provisioned";
+
+    private final Context mContext;
+
+    private final Map<Integer, INetworkScoreCache> mScoreCaches;
+
+    public NetworkScoreService(Context context) {
+        mContext = context;
+        mScoreCaches = new HashMap<>();
+    }
+
+    /** Called when the system is ready to run third-party code but before it actually does so. */
+    void systemReady() {
+        SharedPreferences prefs = mContext.getSharedPreferences(TAG, Context.MODE_PRIVATE);
+        if (!prefs.getBoolean(PREF_SCORING_PROVISIONED, false)) {
+            // On first run, we try to initialize the scorer to the one configured at build time.
+            // This will be a no-op if the scorer isn't actually valid.
+            String defaultPackage = mContext.getResources().getString(
+                    R.string.config_defaultNetworkScorerPackageName);
+            if (!TextUtils.isEmpty(defaultPackage)) {
+                NetworkScorerAppManager.setActiveScorer(mContext, defaultPackage);
+            }
+            prefs.edit().putBoolean(PREF_SCORING_PROVISIONED, true).apply();
+        }
+    }
+
+    @Override
+    public boolean updateScores(ScoredNetwork[] networks) {
+        if (!NetworkScorerAppManager.isCallerActiveScorer(mContext, getCallingUid())) {
+            throw new SecurityException("Caller with UID " + getCallingUid() +
+                    " is not the active scorer.");
+        }
+
+        // Separate networks by type.
+        Map<Integer, List<ScoredNetwork>> networksByType = new HashMap<>();
+        for (ScoredNetwork network : networks) {
+            List<ScoredNetwork> networkList = networksByType.get(network.networkKey.type);
+            if (networkList == null) {
+                networkList = new ArrayList<>();
+                networksByType.put(network.networkKey.type, networkList);
+            }
+            networkList.add(network);
+        }
+
+        // Pass the scores of each type down to the appropriate network scorer.
+        for (Map.Entry<Integer, List<ScoredNetwork>> entry : networksByType.entrySet()) {
+            INetworkScoreCache scoreCache = mScoreCaches.get(entry.getKey());
+            if (scoreCache != null) {
+                try {
+                    scoreCache.updateScores(entry.getValue());
+                } catch (RemoteException e) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "Unable to update scores of type " + entry.getKey(), e);
+                    }
+                }
+            } else if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "No scorer registered for type " + entry.getKey() + ", discarding");
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    public boolean clearScores() {
+        // Only the active scorer or the system (who can broadcast BROADCAST_SCORE_NETWORKS) should
+        // be allowed to flush all scores.
+        if (NetworkScorerAppManager.isCallerActiveScorer(mContext, getCallingUid()) ||
+                mContext.checkCallingOrSelfPermission(permission.BROADCAST_SCORE_NETWORKS) ==
+                        PackageManager.PERMISSION_GRANTED) {
+            clearInternal();
+            return true;
+        } else {
+            throw new SecurityException(
+                    "Caller is neither the active scorer nor the scorer manager.");
+        }
+    }
+
+    @Override
+    public boolean setActiveScorer(String packageName) {
+        mContext.enforceCallingOrSelfPermission(permission.BROADCAST_SCORE_NETWORKS, TAG);
+        // Preemptively clear scores even though the set operation could fail. We do this for safety
+        // as scores should never be compared across apps; in practice, Settings should only be
+        // allowing valid apps to be set as scorers, so failure here should be rare.
+        clearInternal();
+        return NetworkScorerAppManager.setActiveScorer(mContext, packageName);
+    }
+
+    /** Clear scores. Callers are responsible for checking permissions as appropriate. */
+    private void clearInternal() {
+        Set<INetworkScoreCache> cachesToClear = getScoreCaches();
+
+        for (INetworkScoreCache scoreCache : cachesToClear) {
+            try {
+                scoreCache.clearScores();
+            } catch (RemoteException e) {
+                if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                    Log.v(TAG, "Unable to clear scores", e);
+                }
+            }
+        }
+    }
+
+    @Override
+    public void registerNetworkScoreCache(int networkType, INetworkScoreCache scoreCache) {
+        mContext.enforceCallingOrSelfPermission(permission.BROADCAST_SCORE_NETWORKS, TAG);
+        synchronized (mScoreCaches) {
+            if (mScoreCaches.containsKey(networkType)) {
+                throw new IllegalArgumentException(
+                        "Score cache already registered for type " + networkType);
+            }
+            mScoreCaches.put(networkType, scoreCache);
+        }
+    }
+
+    @Override
+    protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
+        mContext.enforceCallingOrSelfPermission(permission.DUMP, TAG);
+        String currentScorer = NetworkScorerAppManager.getActiveScorer(mContext);
+        if (currentScorer == null) {
+            writer.println("Scoring is disabled.");
+            return;
+        }
+        writer.println("Current scorer: " + currentScorer);
+
+        for (INetworkScoreCache scoreCache : getScoreCaches()) {
+            try {
+                scoreCache.asBinder().dump(fd, args);
+            } catch (RemoteException e) {
+                writer.println("Unable to dump score cache");
+                if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                    Log.v(TAG, "Unable to dump score cache", e);
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a set of all score caches that are currently active.
+     *
+     * <p>May be used to perform an action on all score caches without potentially strange behavior
+     * if a new scorer is registered during that action's execution.
+     */
+    private Set<INetworkScoreCache> getScoreCaches() {
+        synchronized (mScoreCaches) {
+            return new HashSet<>(mScoreCaches.values());
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/NsdService.java b/services/core/java/com/android/server/NsdService.java
index 8df93f1..fe97c71 100644
--- a/services/core/java/com/android/server/NsdService.java
+++ b/services/core/java/com/android/server/NsdService.java
@@ -26,11 +26,8 @@
 import android.net.nsd.INsdManager;
 import android.net.nsd.NsdManager;
 import android.os.Binder;
-import android.os.Handler;
-import android.os.HandlerThread;
 import android.os.Message;
 import android.os.Messenger;
-import android.os.IBinder;
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Slog;
@@ -40,22 +37,17 @@
 import java.io.PrintWriter;
 import java.io.UnsupportedEncodingException;
 import java.net.InetAddress;
-import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.util.AsyncChannel;
 import com.android.internal.util.Protocol;
 import com.android.internal.util.State;
 import com.android.internal.util.StateMachine;
-import com.android.server.am.BatteryStatsService;
 import com.android.server.NativeDaemonConnector.Command;
-import com.android.internal.R;
 
 /**
  * Network Service Discovery Service handles remote service discovery operation requests by
@@ -429,11 +421,8 @@
                 }
 
                 /* This goes in response as msg.arg2 */
-                int clientId = -1;
-                int keyId = clientInfo.mClientIds.indexOfValue(id);
-                if (keyId != -1) {
-                    clientId = clientInfo.mClientIds.keyAt(keyId);
-                } else {
+                int clientId = clientInfo.getClientId(id);
+                if (clientId < 0) {
                     // This can happen because of race conditions. For example,
                     // SERVICE_FOUND may race with STOP_SERVICE_DISCOVERY,
                     // and we may get in this situation.
@@ -560,7 +549,7 @@
         mContentResolver = context.getContentResolver();
 
         mNativeConnector = new NativeDaemonConnector(new NativeCallbackReceiver(), "mdns", 10,
-                MDNS_TAG, 25);
+                MDNS_TAG, 25, null);
 
         mNsdStateMachine = new NsdStateMachine(TAG);
         mNsdStateMachine.start();
@@ -648,6 +637,10 @@
             mNativeDaemonConnected.countDown();
         }
 
+        public boolean onCheckHoldWakeLock(int code) {
+            return false;
+        }
+
         public boolean onEvent(int code, String raw, String[] cooked) {
             // TODO: NDC translates a message to a callback, we could enhance NDC to
             // directly interact with a state machine through messages
@@ -908,5 +901,18 @@
             mClientRequests.clear();
         }
 
+        // mClientIds is a sparse array of listener id -> mDnsClient id.  For a given mDnsClient id,
+        // return the corresponding listener id.  mDnsClient id is also called a global id.
+        private int getClientId(final int globalId) {
+            // This doesn't use mClientIds.indexOfValue because indexOfValue uses == (not .equals)
+            // while also coercing the int primitives to Integer objects.
+            for (int i = 0, nSize = mClientIds.size(); i < nSize; i++) {
+                int mDnsId = mClientIds.valueAt(i);
+                if (globalId == mDnsId) {
+                    return mClientIds.keyAt(i);
+                }
+            }
+            return -1;
+        }
     }
 }
diff --git a/services/core/java/com/android/server/ServiceWatcher.java b/services/core/java/com/android/server/ServiceWatcher.java
index 5c7bfab..9274295 100644
--- a/services/core/java/com/android/server/ServiceWatcher.java
+++ b/services/core/java/com/android/server/ServiceWatcher.java
@@ -37,7 +37,6 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 
diff --git a/services/core/java/com/android/server/ShutdownActivity.java b/services/core/java/com/android/server/ShutdownActivity.java
index be65141..56172ed0 100644
--- a/services/core/java/com/android/server/ShutdownActivity.java
+++ b/services/core/java/com/android/server/ShutdownActivity.java
@@ -20,14 +20,11 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
-import android.os.Handler;
 import android.os.IPowerManager;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.util.Slog;
 
-import com.android.server.power.ShutdownThread;
-
 public class ShutdownActivity extends Activity {
 
     private static final String TAG = "ShutdownActivity";
diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java
index 77f5182..d4565b6 100644
--- a/services/core/java/com/android/server/TelephonyRegistry.java
+++ b/services/core/java/com/android/server/TelephonyRegistry.java
@@ -32,6 +32,7 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.telephony.CellLocation;
+import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
@@ -129,6 +130,8 @@
 
     private List<CellInfo> mCellInfo = null;
 
+    private DataConnectionRealTimeInfo mDcRtInfo = new DataConnectionRealTimeInfo();
+
     private int mRingingCallState = PreciseCallState.PRECISE_CALL_STATE_IDLE;
 
     private int mForegroundCallState = PreciseCallState.PRECISE_CALL_STATE_IDLE;
@@ -324,6 +327,13 @@
                             remove(r.binder);
                         }
                     }
+                    if ((events & PhoneStateListener.LISTEN_DATA_CONNECTION_REAL_TIME_INFO) != 0) {
+                        try {
+                            r.callback.onDataConnectionRealTimeInfoChanged(mDcRtInfo);
+                        } catch (RemoteException ex) {
+                            remove(r.binder);
+                        }
+                    }
                     if ((events & PhoneStateListener.LISTEN_PRECISE_CALL_STATE) != 0) {
                         try {
                             r.callback.onPreciseCallStateChanged(mPreciseCallState);
@@ -383,6 +393,14 @@
         if (!checkNotifyPermission("notifyServiceState()")){
             return;
         }
+        long ident = Binder.clearCallingIdentity();
+        try {
+            mBatteryStats.notePhoneState(state.getState());
+        } catch (RemoteException re) {
+            // Can't do much
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
         synchronized (mRecords) {
             mServiceState = state;
             for (Record r : mRecords) {
@@ -451,6 +469,31 @@
         }
     }
 
+    public void notifyDataConnectionRealTimeInfo(DataConnectionRealTimeInfo dcRtInfo) {
+        if (!checkNotifyPermission("notifyDataConnectionRealTimeInfo()")) {
+            return;
+        }
+
+        synchronized (mRecords) {
+            mDcRtInfo = dcRtInfo;
+            for (Record r : mRecords) {
+                if (validateEventsAndUserLocked(r,
+                        PhoneStateListener.LISTEN_DATA_CONNECTION_REAL_TIME_INFO)) {
+                    try {
+                        if (DBG_LOC) {
+                            Slog.d(TAG, "notifyDataConnectionRealTimeInfo: mDcRtInfo="
+                                    + mDcRtInfo + " r=" + r);
+                        }
+                        r.callback.onDataConnectionRealTimeInfoChanged(mDcRtInfo);
+                    } catch (RemoteException ex) {
+                        mRemoveList.add(r.binder);
+                    }
+                }
+            }
+            handleRemoveListLocked();
+        }
+    }
+
     public void notifyMessageWaitingChanged(boolean mwi) {
         if (!checkNotifyPermission("notifyMessageWaitingChanged()")) {
             return;
@@ -754,6 +797,7 @@
             pw.println("  mDataConnectionLinkCapabilities=" + mDataConnectionLinkCapabilities);
             pw.println("  mCellLocation=" + mCellLocation);
             pw.println("  mCellInfo=" + mCellInfo);
+            pw.println("  mDcRtInfo=" + mDcRtInfo);
             pw.println("registrations: count=" + recordCount);
             for (Record r : mRecords) {
                 pw.println("  " + r.pkgForDebug + " 0x" + Integer.toHexString(r.events));
@@ -766,15 +810,6 @@
     //
 
     private void broadcastServiceStateChanged(ServiceState state) {
-        long ident = Binder.clearCallingIdentity();
-        try {
-            mBatteryStats.notePhoneState(state.getState());
-        } catch (RemoteException re) {
-            // Can't do much
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-
         Intent intent = new Intent(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED);
         Bundle data = new Bundle();
         state.fillInNotifierBundle(data);
diff --git a/services/core/java/com/android/server/TextServicesManagerService.java b/services/core/java/com/android/server/TextServicesManagerService.java
index 0964767..d4c436f 100644
--- a/services/core/java/com/android/server/TextServicesManagerService.java
+++ b/services/core/java/com/android/server/TextServicesManagerService.java
@@ -33,7 +33,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.ServiceConnection;
-import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ServiceInfo;
diff --git a/services/core/java/com/android/server/UpdateLockService.java b/services/core/java/com/android/server/UpdateLockService.java
index 0f778cd..7f33973 100644
--- a/services/core/java/com/android/server/UpdateLockService.java
+++ b/services/core/java/com/android/server/UpdateLockService.java
@@ -24,7 +24,6 @@
 import android.os.IBinder;
 import android.os.IUpdateLock;
 import android.os.RemoteException;
-import android.os.SystemClock;
 import android.os.TokenWatcher;
 import android.os.UpdateLock;
 import android.os.UserHandle;
diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java
index 28eb948..132ca00 100644
--- a/services/core/java/com/android/server/VibratorService.java
+++ b/services/core/java/com/android/server/VibratorService.java
@@ -84,26 +84,29 @@
         private final long    mStartTime;
         private final long[]  mPattern;
         private final int     mRepeat;
+        private final int     mStreamHint;
         private final int     mUid;
-        private final String  mPackageName;
+        private final String  mOpPkg;
 
-        Vibration(IBinder token, long millis, int uid, String packageName) {
-            this(token, millis, null, 0, uid, packageName);
+        Vibration(IBinder token, long millis, int streamHint, int uid, String opPkg) {
+            this(token, millis, null, 0, streamHint, uid, opPkg);
         }
 
-        Vibration(IBinder token, long[] pattern, int repeat, int uid, String packageName) {
-            this(token, 0, pattern, repeat, uid, packageName);
+        Vibration(IBinder token, long[] pattern, int repeat, int streamHint, int uid,
+                String opPkg) {
+            this(token, 0, pattern, repeat, streamHint, uid, opPkg);
         }
 
         private Vibration(IBinder token, long millis, long[] pattern,
-                int repeat, int uid, String packageName) {
+                int repeat, int streamHint, int uid, String opPkg) {
             mToken = token;
             mTimeout = millis;
             mStartTime = SystemClock.uptimeMillis();
             mPattern = pattern;
             mRepeat = repeat;
+            mStreamHint = streamHint;
             mUid = uid;
-            mPackageName = packageName;
+            mOpPkg = opPkg;
         }
 
         public void binderDied() {
@@ -191,7 +194,8 @@
                 Binder.getCallingPid(), Binder.getCallingUid(), null);
     }
 
-    public void vibrate(int uid, String packageName, long milliseconds, IBinder token) {
+    public void vibrate(int uid, String opPkg, long milliseconds, int streamHint,
+            IBinder token) {
         if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("Requires VIBRATE permission");
@@ -207,7 +211,7 @@
             return;
         }
 
-        Vibration vib = new Vibration(token, milliseconds, uid, packageName);
+        Vibration vib = new Vibration(token, milliseconds, streamHint, uid, opPkg);
 
         final long ident = Binder.clearCallingIdentity();
         try {
@@ -233,7 +237,7 @@
     }
 
     public void vibratePattern(int uid, String packageName, long[] pattern, int repeat,
-            IBinder token) {
+            int streamHint, IBinder token) {
         if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
                 != PackageManager.PERMISSION_GRANTED) {
             throw new SecurityException("Requires VIBRATE permission");
@@ -258,7 +262,7 @@
                 return;
             }
 
-            Vibration vib = new Vibration(token, pattern, repeat, uid, packageName);
+            Vibration vib = new Vibration(token, pattern, repeat, streamHint, uid, packageName);
             try {
                 token.linkToDeath(vib, 0);
             } catch (RemoteException e) {
@@ -342,8 +346,12 @@
     // Lock held on mVibrations
     private void startVibrationLocked(final Vibration vib) {
         try {
-            int mode = mAppOpsService.startOperation(AppOpsManager.getToken(mAppOpsService),
-                    AppOpsManager.OP_VIBRATE, vib.mUid, vib.mPackageName);
+            int mode = mAppOpsService.checkAudioOperation(AppOpsManager.OP_VIBRATE,
+                    vib.mStreamHint, vib.mUid, vib.mOpPkg);
+            if (mode == AppOpsManager.MODE_ALLOWED) {
+                mode = mAppOpsService.startOperation(AppOpsManager.getToken(mAppOpsService),
+                    AppOpsManager.OP_VIBRATE, vib.mUid, vib.mOpPkg);
+            }
             if (mode != AppOpsManager.MODE_ALLOWED) {
                 if (mode == AppOpsManager.MODE_ERRORED) {
                     Slog.w(TAG, "Would be an error: vibrate from uid " + vib.mUid);
@@ -354,7 +362,7 @@
         } catch (RemoteException e) {
         }
         if (vib.mTimeout != 0) {
-            doVibratorOn(vib.mTimeout, vib.mUid);
+            doVibratorOn(vib.mTimeout, vib.mUid, vib.mStreamHint);
             mH.postDelayed(mVibrationRunnable, vib.mTimeout);
         } else {
             // mThread better be null here. doCancelVibrate should always be
@@ -369,7 +377,7 @@
             try {
                 mAppOpsService.finishOperation(AppOpsManager.getToken(mAppOpsService),
                         AppOpsManager.OP_VIBRATE, mCurrentVibration.mUid,
-                        mCurrentVibration.mPackageName);
+                        mCurrentVibration.mOpPkg);
             } catch (RemoteException e) {
             }
             mCurrentVibration = null;
@@ -473,7 +481,7 @@
         return vibratorExists();
     }
 
-    private void doVibratorOn(long millis, int uid) {
+    private void doVibratorOn(long millis, int uid, int streamHint) {
         synchronized (mInputDeviceVibrators) {
             try {
                 mBatteryStatsService.noteVibratorOn(uid, millis);
@@ -483,7 +491,7 @@
             final int vibratorCount = mInputDeviceVibrators.size();
             if (vibratorCount != 0) {
                 for (int i = 0; i < vibratorCount; i++) {
-                    mInputDeviceVibrators.get(i).vibrate(millis);
+                    mInputDeviceVibrators.get(i).vibrate(millis, streamHint);
                 }
             } else {
                 vibratorOn(millis);
@@ -546,6 +554,7 @@
                 final int len = pattern.length;
                 final int repeat = mVibration.mRepeat;
                 final int uid = mVibration.mUid;
+                final int streamHint = mVibration.mStreamHint;
                 int index = 0;
                 long duration = 0;
 
@@ -566,7 +575,7 @@
                         // duration is saved for delay() at top of loop
                         duration = pattern[index++];
                         if (duration > 0) {
-                            VibratorService.this.doVibratorOn(duration, uid);
+                            VibratorService.this.doVibratorOn(duration, uid, streamHint);
                         }
                     } else {
                         if (repeat < 0) {
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index aa9849e..f587ccc 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -863,6 +863,7 @@
                         "User cannot modify accounts");
             } catch (RemoteException re) {
             }
+            return;
         }
 
         long identityToken = clearCallingIdentity();
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index d66c5a7..033b967 100755
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -28,6 +28,7 @@
 import android.os.Looper;
 import android.os.SystemProperties;
 import android.util.ArrayMap;
+import com.android.internal.app.ProcessMap;
 import com.android.internal.app.ProcessStats;
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.internal.os.TransferPipe;
@@ -596,12 +597,7 @@
                 break;
             }
         }
-        if (anyForeground != proc.foregroundServices) {
-            proc.foregroundServices = anyForeground;
-            if (oomAdj) {
-                mAm.updateOomAdjLocked();
-            }
-        }
+        mAm.updateProcessForegroundLocked(proc, anyForeground, oomAdj);
     }
 
     private boolean updateServiceClientActivitiesLocked(ProcessRecord proc,
@@ -671,8 +667,7 @@
             // what they are, so we can report this elsewhere for
             // others to know why certain services are running.
             try {
-                clientIntent = (PendingIntent)service.getParcelableExtra(
-                        Intent.EXTRA_CLIENT_INTENT);
+                clientIntent = service.getParcelableExtra(Intent.EXTRA_CLIENT_INTENT);
             } catch (RuntimeException e) {
             }
             if (clientIntent != null) {
@@ -686,6 +681,11 @@
             }
         }
 
+        if ((flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) {
+            mAm.enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS,
+                    "BIND_TREAT_LIKE_ACTIVITY");
+        }
+
         final boolean callerFg = callerApp.setSchedGroup != Process.THREAD_GROUP_BG_NONINTERACTIVE;
 
         ServiceLookupResult res =
@@ -759,8 +759,12 @@
             }
 
             if (s.app != null) {
+                if ((flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) {
+                    s.app.treatLikeActivity = true;
+                }
                 // This could have made the service more important.
-                mAm.updateLruProcessLocked(s.app, s.app.hasClientActivities, b.client);
+                mAm.updateLruProcessLocked(s.app, s.app.hasClientActivities
+                        || s.app.treatLikeActivity, b.client);
                 mAm.updateOomAdjLocked(s.app);
             }
 
@@ -862,6 +866,12 @@
 
                 if (r.binding.service.app != null) {
                     // This could have made the service less important.
+                    if ((r.flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) {
+                        r.binding.service.app.treatLikeActivity = true;
+                        mAm.updateLruProcessLocked(r.binding.service.app,
+                                r.binding.service.app.hasClientActivities
+                                || r.binding.service.app.treatLikeActivity, null);
+                    }
                     mAm.updateOomAdjLocked(r.binding.service.app);
                 }
             }
@@ -2077,10 +2087,12 @@
 
             // Sanity check: if the service listed for the app is not one
             // we actually are maintaining, just let it drop.
-            if (smap.mServicesByName.get(sr.name) != sr) {
-                ServiceRecord cur = smap.mServicesByName.get(sr.name);
-                Slog.wtf(TAG, "Service " + sr + " in process " + app
-                        + " not same as in map: " + cur);
+            final ServiceRecord curRec = smap.mServicesByName.get(sr.name);
+            if (curRec != sr) {
+                if (curRec != null) {
+                    Slog.wtf(TAG, "Service " + sr + " in process " + app
+                            + " not same as in map: " + curRec);
+                }
                 continue;
             }
 
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index 8650647..9eaddbd 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -17,8 +17,10 @@
 package com.android.server.am;
 
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static com.android.internal.util.XmlUtils.readBooleanAttribute;
 import static com.android.internal.util.XmlUtils.readIntAttribute;
 import static com.android.internal.util.XmlUtils.readLongAttribute;
+import static com.android.internal.util.XmlUtils.writeBooleanAttribute;
 import static com.android.internal.util.XmlUtils.writeIntAttribute;
 import static com.android.internal.util.XmlUtils.writeLongAttribute;
 import static com.android.server.Watchdog.NATIVE_STACKS_OF_INTEREST;
@@ -26,18 +28,23 @@
 import static org.xmlpull.v1.XmlPullParser.START_TAG;
 import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID;
 
+import android.Manifest;
 import android.app.AppOpsManager;
 import android.app.IActivityContainer;
 import android.app.IActivityContainerCallback;
 import android.appwidget.AppWidgetManager;
 import android.graphics.Rect;
+import android.os.BatteryStats;
+import android.service.voice.IVoiceInteractionSession;
 import android.util.ArrayMap;
 
 import com.android.internal.R;
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.app.IAppOpsService;
+import com.android.internal.app.IVoiceInteractor;
 import com.android.internal.app.ProcessMap;
 import com.android.internal.app.ProcessStats;
+import com.android.internal.content.PackageMonitor;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.internal.os.ProcessCpuTracker;
@@ -53,6 +60,7 @@
 import com.android.server.LocalServices;
 import com.android.server.ServiceThread;
 import com.android.server.SystemService;
+import com.android.server.SystemServiceManager;
 import com.android.server.Watchdog;
 import com.android.server.am.ActivityStack.ActivityState;
 import com.android.server.firewall.IntentFirewall;
@@ -330,6 +338,9 @@
     // How many bytes to write into the dropbox log before truncating
     static final int DROPBOX_MAX_SIZE = 256 * 1024;
 
+    /** All system services */
+    SystemServiceManager mSystemServiceManager;
+
     /** Run all ActivityStacks through this */
     ActivityStackSupervisor mStackSupervisor;
 
@@ -396,7 +407,7 @@
     /**
      * List of intents that were used to start the most recent tasks.
      */
-    private final ArrayList<TaskRecord> mRecentTasks = new ArrayList<TaskRecord>();
+    final ArrayList<TaskRecord> mRecentTasks = new ArrayList<TaskRecord>();
 
     public class PendingAssistExtras extends Binder implements Runnable {
         public final ActivityRecord activity;
@@ -723,6 +734,7 @@
     private static final String ATTR_URI = "uri";
     private static final String ATTR_MODE_FLAGS = "modeFlags";
     private static final String ATTR_CREATED_TIME = "createdTime";
+    private static final String ATTR_PREFIX = "prefix";
 
     /**
      * Global set of specific {@link Uri} permissions that have been granted.
@@ -730,8 +742,41 @@
      * to {@link UriPermission#uri} to {@link UriPermission}.
      */
     @GuardedBy("this")
-    private final SparseArray<ArrayMap<Uri, UriPermission>>
-            mGrantedUriPermissions = new SparseArray<ArrayMap<Uri, UriPermission>>();
+    private final SparseArray<ArrayMap<GrantUri, UriPermission>>
+            mGrantedUriPermissions = new SparseArray<ArrayMap<GrantUri, UriPermission>>();
+
+    public static class GrantUri {
+        public final Uri uri;
+        public final boolean prefix;
+
+        public GrantUri(Uri uri, boolean prefix) {
+            this.uri = uri;
+            this.prefix = prefix;
+        }
+
+        @Override
+        public int hashCode() {
+            return toString().hashCode();
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (o instanceof GrantUri) {
+                GrantUri other = (GrantUri) o;
+                return uri.equals(other.uri) && prefix == other.prefix;
+            }
+            return false;
+        }
+
+        @Override
+        public String toString() {
+            if (prefix) {
+                return uri.toString() + " [prefix]";
+            } else {
+                return uri.toString();
+            }
+        }
+    }
 
     CoreSettingsObserver mCoreSettingsObserver;
 
@@ -842,17 +887,23 @@
      * Set while we are wanting to sleep, to prevent any
      * activities from being started/resumed.
      */
-    boolean mSleeping = false;
+    private boolean mSleeping = false;
+
+    /**
+     * Set while we are running a voice interaction.  This overrides
+     * sleeping while it is active.
+     */
+    private boolean mRunningVoice = false;
 
     /**
      * State of external calls telling us if the device is asleep.
      */
-    boolean mWentToSleep = false;
+    private boolean mWentToSleep = false;
 
     /**
      * State of external call telling us if the lock screen is shown.
      */
-    boolean mLockScreenShown = false;
+    private boolean mLockScreenShown = false;
 
     /**
      * Set if we are shutting down the system, similar to sleeping.
@@ -920,11 +971,25 @@
     long mLowRamTimeSinceLastIdle = 0;
 
     /**
-     * If RAM is currently low, when that horrible situatin started.
+     * If RAM is currently low, when that horrible situation started.
      */
     long mLowRamStartTime = 0;
 
     /**
+     * For reporting to battery stats the current top application.
+     */
+    private String mCurResumedPackage = null;
+    private int mCurResumedUid = -1;
+
+    /**
+     * For reporting to battery stats the apps currently running foreground
+     * service.  The ProcessMap is package/uid tuples; each of these contain
+     * an array of the currently foreground processes.
+     */
+    final ProcessMap<ArrayList<ProcessRecord>> mForegroundPackages
+            = new ProcessMap<ArrayList<ProcessRecord>>();
+
+    /**
      * This is set if we had to do a delayed dexopt of an app before launching
      * it, to increasing the ANR timeouts in that case.
      */
@@ -952,11 +1017,11 @@
 
     static class ProcessChangeItem {
         static final int CHANGE_ACTIVITIES = 1<<0;
-        static final int CHANGE_IMPORTANCE= 1<<1;
+        static final int CHANGE_PROCESS_STATE = 1<<1;
         int changes;
         int uid;
         int pid;
-        int importance;
+        int processState;
         boolean foregroundActivities;
     }
 
@@ -1005,6 +1070,7 @@
     final ActivityThread mSystemThread;
 
     int mCurrentUserId = 0;
+    int[] mCurrentProfileIds = new int[] {UserHandle.USER_OWNER}; // Accessed by ActivityStack
     private UserManagerService mUserManager;
 
     private final class AppDeathRecipient implements IBinder.DeathRecipient {
@@ -1063,7 +1129,10 @@
     static final int IMMERSIVE_MODE_LOCK_MSG = 37;
     static final int PERSIST_URI_GRANTS_MSG = 38;
     static final int REQUEST_ALL_PSS_MSG = 39;
-    static final int UPDATE_TIME = 40;
+    static final int START_PROFILES_MSG = 40;
+    static final int UPDATE_TIME = 41;
+    static final int SYSTEM_USER_START_MSG = 42;
+    static final int SYSTEM_USER_CURRENT_MSG = 43;
 
     static final int FIRST_ACTIVITY_STACK_MSG = 100;
     static final int FIRST_BROADCAST_QUEUE_MSG = 200;
@@ -1337,7 +1406,7 @@
                     String pkg = bundle.getString("pkg");
                     String reason = bundle.getString("reason");
                     forceStopPackageLocked(pkg, appid, restart, false, true, false,
-                            UserHandle.USER_ALL, reason);
+                            false, UserHandle.USER_ALL, reason);
                 }
             } break;
             case FINALIZE_PENDING_INTENT_MSG: {
@@ -1643,15 +1712,15 @@
                 break;
             }
             case REPORT_USER_SWITCH_MSG: {
-                dispatchUserSwitch((UserStartedState)msg.obj, msg.arg1, msg.arg2);
+                dispatchUserSwitch((UserStartedState) msg.obj, msg.arg1, msg.arg2);
                 break;
             }
             case CONTINUE_USER_SWITCH_MSG: {
-                continueUserSwitch((UserStartedState)msg.obj, msg.arg1, msg.arg2);
+                continueUserSwitch((UserStartedState) msg.obj, msg.arg1, msg.arg2);
                 break;
             }
             case USER_SWITCH_TIMEOUT_MSG: {
-                timeoutUserSwitch((UserStartedState)msg.obj, msg.arg1, msg.arg2);
+                timeoutUserSwitch((UserStartedState) msg.obj, msg.arg1, msg.arg2);
                 break;
             }
             case IMMERSIVE_MODE_LOCK_MSG: {
@@ -1677,6 +1746,12 @@
                 requestPssAllProcsLocked(SystemClock.uptimeMillis(), true, false);
                 break;
             }
+            case START_PROFILES_MSG: {
+                synchronized (ActivityManagerService.this) {
+                    startProfilesLocked();
+                }
+                break;
+            }
             case UPDATE_TIME: {
                 synchronized (ActivityManagerService.this) {
                     for (int i = mLruProcesses.size() - 1 ; i >= 0 ; i--) {
@@ -1690,7 +1765,14 @@
                         }
                     }
                 }
-
+                break;
+            }
+            case SYSTEM_USER_START_MSG: {
+                mSystemServiceManager.startUser(msg.arg1);
+                break;
+            }
+            case SYSTEM_USER_CURRENT_MSG: {
+                mSystemServiceManager.switchUser(msg.arg1);
                 break;
             }
             }
@@ -1755,6 +1837,82 @@
         }
     };
 
+    /**
+     * Monitor for package changes and update our internal state.
+     */
+    private final PackageMonitor mPackageMonitor = new PackageMonitor() {
+        @Override
+        public void onPackageRemoved(String packageName, int uid) {
+            // Remove all tasks with activities in the specified package from the list of recent tasks
+            synchronized (ActivityManagerService.this) {
+                for (int i = mRecentTasks.size() - 1; i >= 0; i--) {
+                    TaskRecord tr = mRecentTasks.get(i);
+                    ComponentName cn = tr.intent.getComponent();
+                    if (cn != null && cn.getPackageName().equals(packageName)) {
+                        // If the package name matches, remove the task and kill the process
+                        removeTaskByIdLocked(tr.taskId, ActivityManager.REMOVE_TASK_KILL_PROCESS);
+                    }
+                }
+            }
+        }
+
+        @Override
+        public boolean onPackageChanged(String packageName, int uid, String[] components) {
+            final PackageManager pm = mContext.getPackageManager();
+            final ArrayList<Pair<Intent, Integer>> recentTaskIntents =
+                    new ArrayList<Pair<Intent, Integer>>();
+            final ArrayList<Integer> tasksToRemove = new ArrayList<Integer>();
+            // Copy the list of recent tasks so that we don't hold onto the lock on
+            // ActivityManagerService for long periods while checking if components exist.
+            synchronized (ActivityManagerService.this) {
+                for (int i = mRecentTasks.size() - 1; i >= 0; i--) {
+                    TaskRecord tr = mRecentTasks.get(i);
+                    recentTaskIntents.add(new Pair<Intent, Integer>(tr.intent, tr.taskId));
+                }
+            }
+            // Check the recent tasks and filter out all tasks with components that no longer exist.
+            Intent tmpI = new Intent();
+            for (int i = recentTaskIntents.size() - 1; i >= 0; i--) {
+                Pair<Intent, Integer> p = recentTaskIntents.get(i);
+                ComponentName cn = p.first.getComponent();
+                if (cn != null && cn.getPackageName().equals(packageName)) {
+                    try {
+                        // Add the task to the list to remove if the component no longer exists
+                        tmpI.setComponent(cn);
+                        if (pm.queryIntentActivities(tmpI, PackageManager.MATCH_DEFAULT_ONLY).isEmpty()) {
+                            tasksToRemove.add(p.second);
+                        }
+                    } catch (Exception e) {}
+                }
+            }
+            // Prune all the tasks with removed components from the list of recent tasks
+            synchronized (ActivityManagerService.this) {
+                for (int i = tasksToRemove.size() - 1; i >= 0; i--) {
+                    // Remove the task but don't kill the process (since other components in that
+                    // package may still be running and in the background)
+                    removeTaskByIdLocked(tasksToRemove.get(i), 0);
+                }
+            }
+            return true;
+        }
+
+        @Override
+        public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) {
+            // Force stop the specified packages
+            if (packages != null) {
+                for (String pkg : packages) {
+                    synchronized (ActivityManagerService.this) {
+                        if (forceStopPackageLocked(pkg, -1, false, false, false, false, false, 0,
+                                "finished booting")) {
+                            return true;
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+    };
+
     public void setSystemProcess() {
         try {
             ServiceManager.addService(Context.ACTIVITY_SERVICE, this, true);
@@ -2001,6 +2159,10 @@
         Watchdog.getInstance().addThread(mHandler);
     }
 
+    public void setSystemServiceManager(SystemServiceManager mgr) {
+        mSystemServiceManager = mgr;
+    }
+
     private void start() {
         mProcessCpuThread.start();
 
@@ -2123,29 +2285,24 @@
                                 totalUTime += otherUTime;
                                 totalSTime += otherSTime;
                                 if (pr != null) {
-                                    BatteryStatsImpl.Uid.Proc ps = bstats.getProcessStatsLocked(
-                                            st.name, st.pid);
+                                    BatteryStatsImpl.Uid.Proc ps = pr.curProcBatteryStats;
+                                    if (ps == null || !ps.isActive()) {
+                                        pr.curProcBatteryStats = ps = bstats.getProcessStatsLocked(
+                                                pr.info.uid, pr.processName);
+                                    }
                                     ps.addCpuTimeLocked(st.rel_utime-otherUTime,
                                             st.rel_stime-otherSTime);
                                     ps.addSpeedStepTimes(cpuSpeedTimes);
                                     pr.curCpuTime += (st.rel_utime+st.rel_stime) * 10;
-                                } else if (st.uid >= Process.FIRST_APPLICATION_UID) {
+                                } else {
                                     BatteryStatsImpl.Uid.Proc ps = st.batteryStats;
-                                    if (ps == null) {
-                                        st.batteryStats = ps = bstats.getProcessStatsLocked(st.uid,
-                                                "(Unknown)");
+                                    if (ps == null || !ps.isActive()) {
+                                        st.batteryStats = ps = bstats.getProcessStatsLocked(
+                                                bstats.mapUid(st.uid), st.name);
                                     }
                                     ps.addCpuTimeLocked(st.rel_utime-otherUTime,
                                             st.rel_stime-otherSTime);
                                     ps.addSpeedStepTimes(cpuSpeedTimes);
-                                } else {
-                                    BatteryStatsImpl.Uid.Proc ps =
-                                            bstats.getProcessStatsLocked(st.name, st.pid);
-                                    if (ps != null) {
-                                        ps.addCpuTimeLocked(st.rel_utime-otherUTime,
-                                                st.rel_stime-otherSTime);
-                                        ps.addSpeedStepTimes(cpuSpeedTimes);
-                                    }
                                 }
                             }
                             bstats.finishAddingCpuLocked(perc, totalUTime,
@@ -2201,6 +2358,11 @@
         if (mFocusedActivity != r) {
             if (DEBUG_FOCUS) Slog.d(TAG, "setFocusedActivityLocked: r=" + r);
             mFocusedActivity = r;
+            if (r.task != null && r.task.voiceInteractor != null) {
+                startRunningVoiceLocked();
+            } else {
+                finishRunningVoiceLocked();
+            }
             mStackSupervisor.setFocusedStack(r);
             if (r != null) {
                 mWindowManager.setFocusedApp(r.appToken, true);
@@ -2209,6 +2371,12 @@
         }
     }
 
+    final void clearFocusedActivity(ActivityRecord r) {
+        if (mFocusedActivity == r) {
+            mFocusedActivity = null;
+        }
+    }
+
     @Override
     public void setFocusedStack(int stackId) {
         if (DEBUG_FOCUS) Slog.d(TAG, "setFocusedStack: stackId=" + stackId);
@@ -2303,11 +2471,12 @@
 
     final void updateLruProcessLocked(ProcessRecord app, boolean activityChange,
             ProcessRecord client) {
-        final boolean hasActivity = app.activities.size() > 0 || app.hasClientActivities;
+        final boolean hasActivity = app.activities.size() > 0 || app.hasClientActivities
+                || app.treatLikeActivity;
         final boolean hasService = false; // not impl yet. app.services.size() > 0;
         if (!activityChange && hasActivity) {
-            // The process has activties, so we are only going to allow activity-based
-            // adjustments move it.  It should be kept in the front of the list with other
+            // The process has activities, so we are only allowing activity-based adjustments
+            // to move it.  It should be kept in the front of the list with other
             // processes that have activities, and we don't want those to change their
             // order except due to activity operations.
             return;
@@ -2799,6 +2968,11 @@
                 mHandler.sendMessageDelayed(msg, startResult.usingWrapper
                         ? PROC_START_TIMEOUT_WITH_WRAPPER : PROC_START_TIMEOUT);
             }
+            mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_START,
+                    app.processName, app.info.uid);
+            if (app.isolated) {
+                mBatteryStatsService.addIsolatedUid(app.uid, app.info.uid);
+            }
         } catch (RuntimeException e) {
             // XXX do better error recovery.
             app.setPid(0);
@@ -2931,7 +3105,7 @@
                     intent.setComponent(new ComponentName(
                             ri.activityInfo.packageName, ri.activityInfo.name));
                     mStackSupervisor.startActivityLocked(null, intent, null, ri.activityInfo,
-                            null, null, 0, 0, 0, null, 0, null, false, null, null);
+                            null, null, null, null, 0, 0, 0, null, 0, null, false, null, null);
                 }
             }
         }
@@ -3026,11 +3200,10 @@
                             observer.onForegroundActivitiesChanged(item.pid, item.uid,
                                     item.foregroundActivities);
                         }
-                        if ((item.changes&ProcessChangeItem.CHANGE_IMPORTANCE) != 0) {
-                            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "IMPORTANCE CHANGED pid="
-                                    + item.pid + " uid=" + item.uid + ": " + item.importance);
-                            observer.onImportanceChanged(item.pid, item.uid,
-                                    item.importance);
+                        if ((item.changes&ProcessChangeItem.CHANGE_PROCESS_STATE) != 0) {
+                            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "PROCSTATE CHANGED pid="
+                                    + item.pid + " uid=" + item.uid + ": " + item.processState);
+                            observer.onProcessStateChanged(item.pid, item.uid, item.processState);
                         }
                     }
                 } catch (RemoteException e) {
@@ -3062,7 +3235,7 @@
         }
         for (int i=0; i<N; i++) {
             PendingActivityLaunch pal = mPendingActivityLaunches.get(i);
-            mStackSupervisor.startActivityUncheckedLocked(pal.r, pal.sourceRecord, pal.startFlags,
+            mStackSupervisor.startActivityUncheckedLocked(pal.r, pal.sourceRecord, null, null, pal.startFlags,
                     doResume && i == (N-1), null);
         }
         mPendingActivityLaunches.clear();
@@ -3088,7 +3261,7 @@
                 false, true, "startActivity", null);
         // TODO: Switch to user app stacks here.
         return mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType,
-                resultTo, resultWho, requestCode, startFlags, profileFile, profileFd,
+                null, null, resultTo, resultWho, requestCode, startFlags, profileFile, profileFd,
                 null, null, options, userId, null);
     }
 
@@ -3103,7 +3276,7 @@
         WaitResult res = new WaitResult();
         // TODO: Switch to user app stacks here.
         mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType,
-                resultTo, resultWho, requestCode, startFlags, profileFile, profileFd,
+                null, null, resultTo, resultWho, requestCode, startFlags, profileFile, profileFd,
                 res, null, options, UserHandle.getCallingUserId(), null);
         return res;
     }
@@ -3118,7 +3291,7 @@
                 false, true, "startActivityWithConfig", null);
         // TODO: Switch to user app stacks here.
         int ret = mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent,
-                resolvedType, resultTo, resultWho, requestCode, startFlags,
+                resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
                 null, null, null, config, options, userId, null);
         return ret;
     }
@@ -3156,6 +3329,31 @@
     }
 
     @Override
+    public int startVoiceActivity(String callingPackage, int callingPid, int callingUid,
+            Intent intent, String resolvedType, IVoiceInteractionSession session,
+            IVoiceInteractor interactor, int startFlags, String profileFile,
+            ParcelFileDescriptor profileFd, Bundle options, int userId) {
+        if (checkCallingPermission(Manifest.permission.BIND_VOICE_INTERACTION)
+                != PackageManager.PERMISSION_GRANTED) {
+            String msg = "Permission Denial: startVoiceActivity() from pid="
+                    + Binder.getCallingPid()
+                    + ", uid=" + Binder.getCallingUid()
+                    + " requires " + android.Manifest.permission.BIND_VOICE_INTERACTION;
+            Slog.w(TAG, msg);
+            throw new SecurityException(msg);
+        }
+        if (session == null || interactor == null) {
+            throw new NullPointerException("null session or interactor");
+        }
+        userId = handleIncomingUser(callingPid, callingUid, userId,
+                false, true, "startVoiceActivity", null);
+        // TODO: Switch to user app stacks here.
+        return mStackSupervisor.startActivityMayWait(null, callingUid, callingPackage, intent,
+                resolvedType, session, interactor, null, null, 0, startFlags,
+                profileFile, profileFd, null, null, options, userId, null);
+    }
+
+    @Override
     public boolean startNextMatchingActivity(IBinder callingActivity,
             Intent intent, Bundle options) {
         // Refuse possible leaked file descriptors
@@ -3248,7 +3446,7 @@
 
             final long origId = Binder.clearCallingIdentity();
             int res = mStackSupervisor.startActivityLocked(r.app.thread, intent,
-                    r.resolvedType, aInfo, resultTo != null ? resultTo.appToken : null,
+                    r.resolvedType, aInfo, null, null, resultTo != null ? resultTo.appToken : null,
                     resultWho, requestCode, -1, r.launchedFromUid, r.launchedFromPackage, 0,
                     options, false, null, null);
             Binder.restoreCallingIdentity(origId);
@@ -3271,7 +3469,7 @@
 
         // TODO: Switch to user app stacks here.
         int ret = mStackSupervisor.startActivityMayWait(null, uid, callingPackage, intent, resolvedType,
-                resultTo, resultWho, requestCode, startFlags,
+                null, null, resultTo, resultWho, requestCode, startFlags,
                 null, null, null, null, options, userId, container);
         return ret;
     }
@@ -3307,21 +3505,40 @@
         if (N > 0 && mRecentTasks.get(0) == task) {
             return;
         }
+        // Another quick case: never add voice sessions.
+        if (task.voiceSession != null) {
+            return;
+        }
         // Remove any existing entries that are the same kind of task.
+        final Intent intent = task.intent;
+        final boolean document = intent != null && intent.isDocument();
         for (int i=0; i<N; i++) {
             TaskRecord tr = mRecentTasks.get(i);
-            if (task.userId == tr.userId
-                    && ((task.affinity != null && task.affinity.equals(tr.affinity))
-                    || (task.intent != null && task.intent.filterEquals(tr.intent)))) {
-                tr.disposeThumbnail();
-                mRecentTasks.remove(i);
-                i--;
-                N--;
-                if (task.intent == null) {
-                    // If the new recent task we are adding is not fully
-                    // specified, then replace it with the existing recent task.
-                    task = tr;
+            if (task != tr) {
+                if (task.userId != tr.userId) {
+                    continue;
                 }
+                final Intent trIntent = tr.intent;
+                if ((task.affinity == null || !task.affinity.equals(tr.affinity)) &&
+                    (intent == null || !intent.filterEquals(trIntent))) {
+                    continue;
+                }
+                if (document || trIntent != null && trIntent.isDocument()) {
+                    // Document tasks do not match other tasks.
+                    continue;
+                }
+            }
+
+            // Either task and tr are the same or, their affinities match or their intents match
+            // and neither of them is a document.
+            tr.disposeThumbnail();
+            mRecentTasks.remove(i);
+            i--;
+            N--;
+            if (task.intent == null) {
+                // If the new recent task we are adding is not fully
+                // specified, then replace it with the existing recent task.
+                task = tr;
             }
         }
         if (N >= MAX_RECENT_TASKS) {
@@ -3379,11 +3596,14 @@
      * @param token The Binder token referencing the Activity we want to finish.
      * @param resultCode Result code, if any, from this Activity.
      * @param resultData Result data (Intent), if any, from this Activity.
+     * @param finishTask Whether to finish the task associated with this Activity.  Only applies to
+     *            the root Activity in the task.
      *
      * @return Returns true if the activity successfully finished, or false if it is still running.
      */
     @Override
-    public final boolean finishActivity(IBinder token, int resultCode, Intent resultData) {
+    public final boolean finishActivity(IBinder token, int resultCode, Intent resultData,
+            boolean finishTask) {
         // Refuse possible leaked file descriptors
         if (resultData != null && resultData.hasFileDescriptors() == true) {
             throw new IllegalArgumentException("File descriptors passed in Intent");
@@ -3394,6 +3614,9 @@
             if (r == null) {
                 return true;
             }
+            // Keep track of the root activity of the task before we finish it
+            TaskRecord tr = r.task;
+            ActivityRecord rootR = tr.getRootActivity();
             if (mController != null) {
                 // Find the first activity that is not finishing.
                 ActivityRecord next = r.task.stack.topRunningActivityLocked(token, 0);
@@ -3413,10 +3636,21 @@
                 }
             }
             final long origId = Binder.clearCallingIdentity();
-            boolean res = r.task.stack.requestFinishActivityLocked(token, resultCode,
-                    resultData, "app-request", true);
-            Binder.restoreCallingIdentity(origId);
-            return res;
+            try {
+                boolean res;
+                if (finishTask && r == rootR) {
+                    // If requested, remove the task that is associated to this activity only if it
+                    // was the root activity in the task.  The result code and data is ignored because
+                    // we don't support returning them across task boundaries.
+                    res = removeTaskByIdLocked(tr.taskId, 0);
+                } else {
+                    res = tr.stack.requestFinishActivityLocked(token, resultCode,
+                            resultData, "app-request", true);
+                }
+                return res;
+            } finally {
+                Binder.restoreCallingIdentity(origId);
+            }
         }
     }
 
@@ -4471,7 +4705,7 @@
 
     private void forceStopPackageLocked(final String packageName, int uid, String reason) {
         forceStopPackageLocked(packageName, UserHandle.getAppId(uid), false,
-                false, true, false, UserHandle.getUserId(uid), reason);
+                false, true, false, false, UserHandle.getUserId(uid), reason);
         Intent intent = new Intent(Intent.ACTION_PACKAGE_RESTARTED,
                 Uri.fromParts("package", packageName, null));
         if (!mProcessesReady) {
@@ -4487,7 +4721,7 @@
     }
 
     private void forceStopUserLocked(int userId, String reason) {
-        forceStopPackageLocked(null, -1, false, false, true, false, userId, reason);
+        forceStopPackageLocked(null, -1, false, false, true, false, false, userId, reason);
         Intent intent = new Intent(Intent.ACTION_USER_STOPPED);
         intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
                 | Intent.FLAG_RECEIVER_FOREGROUND);
@@ -4572,7 +4806,7 @@
 
     private final boolean forceStopPackageLocked(String name, int appId,
             boolean callerWillRestart, boolean purgeCache, boolean doit,
-            boolean evenPersistent, int userId, String reason) {
+            boolean evenPersistent, boolean uninstalling, int userId, String reason) {
         int i;
         int N;
 
@@ -4664,7 +4898,7 @@
         // Remove transient permissions granted from/to this package/user
         removeUriPermissionsForPackageLocked(name, userId, false);
 
-        if (name == null) {
+        if (name == null || uninstalling) {
             // Remove pending intents.  For now we only do this when force
             // stopping users, because we have some problems when doing this
             // for packages -- app widgets are not currently cleaned up for
@@ -4754,6 +4988,11 @@
                 mPidsSelfLocked.remove(pid);
                 mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app);
             }
+            mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_FINISH,
+                    app.processName, app.info.uid);
+            if (app.isolated) {
+                mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
+            }
             killUnneededProcessLocked(app, reason);
             handleAppDiedLocked(app, true, allowRestart);
             removeLruProcessLocked(app);
@@ -4794,6 +5033,11 @@
                         mHeavyWeightProcess.userId, 0));
                 mHeavyWeightProcess = null;
             }
+            mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_FINISH,
+                    app.processName, app.info.uid);
+            if (app.isolated) {
+                mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
+            }
             // Take care of any launching providers waiting for this process.
             checkAppInLaunchingProvidersLocked(app, true);
             // Take care of any services that are waiting for the process.
@@ -4878,7 +5122,7 @@
         app.curAdj = app.setAdj = -100;
         app.curSchedGroup = app.setSchedGroup = Process.THREAD_GROUP_DEFAULT;
         app.forcingToForeground = null;
-        app.foregroundServices = false;
+        updateProcessForegroundLocked(app, false, false);
         app.hasShownUi = false;
         app.debugging = false;
         app.cached = false;
@@ -5099,26 +5343,8 @@
     }
 
     final void finishBooting() {
-        IntentFilter pkgFilter = new IntentFilter();
-        pkgFilter.addAction(Intent.ACTION_QUERY_PACKAGE_RESTART);
-        pkgFilter.addDataScheme("package");
-        mContext.registerReceiver(new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                String[] pkgs = intent.getStringArrayExtra(Intent.EXTRA_PACKAGES);
-                if (pkgs != null) {
-                    for (String pkg : pkgs) {
-                        synchronized (ActivityManagerService.this) {
-                            if (forceStopPackageLocked(pkg, -1, false, false, false, false, 0,
-                                    "finished booting")) {
-                                setResultCode(Activity.RESULT_OK);
-                                return;
-                            }
-                        }
-                    }
-                }
-            }
-        }, pkgFilter);
+        // Register receivers to handle package update events
+        mPackageMonitor.register(mContext, Looper.getMainLooper(), false);
 
         synchronized (this) {
             // Ensure that any processes we had put on hold are now started
@@ -5167,10 +5393,11 @@
                                 userId);
                     }
                 }
+                scheduleStartProfilesLocked();
             }
         }
     }
-    
+
     final void ensureBootCompleted() {
         boolean booting;
         boolean enableScreen;
@@ -5180,7 +5407,7 @@
             enableScreen = !mBooted;
             mBooted = true;
         }
-        
+
         if (booting) {
             finishBooting();
         }
@@ -5550,6 +5777,38 @@
     }
 
     @Override
+    public String getTagForIntentSender(IIntentSender pendingResult, String prefix) {
+        if (!(pendingResult instanceof PendingIntentRecord)) {
+            return null;
+        }
+        try {
+            PendingIntentRecord res = (PendingIntentRecord)pendingResult;
+            Intent intent = res.key.requestIntent;
+            if (intent != null) {
+                if (res.lastTag != null && res.lastTagPrefix == prefix && (res.lastTagPrefix == null
+                        || res.lastTagPrefix.equals(prefix))) {
+                    return res.lastTag;
+                }
+                res.lastTagPrefix = prefix;
+                StringBuilder sb = new StringBuilder(128);
+                if (prefix != null) {
+                    sb.append(prefix);
+                }
+                if (intent.getAction() != null) {
+                    sb.append(intent.getAction());
+                } else if (intent.getComponent() != null) {
+                    intent.getComponent().appendShortString(sb);
+                } else {
+                    sb.append("?");
+                }
+                return res.lastTag = sb.toString();
+            }
+        } catch (ClassCastException e) {
+        }
+        return null;
+    }
+
+    @Override
     public void setProcessLimit(int max) {
         enforceCallingPermission(android.Manifest.permission.SET_PROCESS_LIMIT,
                 "setProcessLimit()");
@@ -5581,7 +5840,7 @@
                     return;
                 }
                 pr.forcingToForeground = null;
-                pr.foregroundServices = false;
+                updateProcessForegroundLocked(pr, false, false);
             }
             updateOomAdjLocked();
         }
@@ -5741,7 +6000,7 @@
      * in {@link ContentProvider}.
      */
     private final boolean checkHoldingPermissionsLocked(
-            IPackageManager pm, ProviderInfo pi, Uri uri, int uid, int modeFlags) {
+            IPackageManager pm, ProviderInfo pi, Uri uri, int uid, final int modeFlags) {
         if (DEBUG_URI_PERMISSION) Slog.v(TAG,
                 "checkHoldingPermissionsLocked: uri=" + uri + " uid=" + uid);
 
@@ -5837,18 +6096,17 @@
         return pi;
     }
 
-    private UriPermission findUriPermissionLocked(int targetUid, Uri uri) {
-        ArrayMap<Uri, UriPermission> targetUris = mGrantedUriPermissions.get(targetUid);
+    private UriPermission findUriPermissionLocked(int targetUid, GrantUri uri) {
+        final ArrayMap<GrantUri, UriPermission> targetUris = mGrantedUriPermissions.get(targetUid);
         if (targetUris != null) {
             return targetUris.get(uri);
-        } else {
-            return null;
         }
+        return null;
     }
 
-    private UriPermission findOrCreateUriPermissionLocked(
-            String sourcePkg, String targetPkg, int targetUid, Uri uri) {
-        ArrayMap<Uri, UriPermission> targetUris = mGrantedUriPermissions.get(targetUid);
+    private UriPermission findOrCreateUriPermissionLocked(String sourcePkg,
+            String targetPkg, int targetUid, GrantUri uri) {
+        ArrayMap<GrantUri, UriPermission> targetUris = mGrantedUriPermissions.get(targetUid);
         if (targetUris == null) {
             targetUris = Maps.newArrayMap();
             mGrantedUriPermissions.put(targetUid, targetUris);
@@ -5863,21 +6121,40 @@
         return perm;
     }
 
-    private final boolean checkUriPermissionLocked(
-            Uri uri, int uid, int modeFlags, int minStrength) {
+    private final boolean checkUriPermissionLocked(Uri uri, int uid, final int modeFlags) {
+        final boolean persistable = (modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0;
+        final int minStrength = persistable ? UriPermission.STRENGTH_PERSISTABLE
+                : UriPermission.STRENGTH_OWNED;
+
         // Root gets to do everything.
         if (uid == 0) {
             return true;
         }
-        ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.get(uid);
+
+        final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.get(uid);
         if (perms == null) return false;
-        UriPermission perm = perms.get(uri);
-        if (perm == null) return false;
-        return perm.getStrength(modeFlags) >= minStrength;
+
+        // First look for exact match
+        final UriPermission exactPerm = perms.get(new GrantUri(uri, false));
+        if (exactPerm != null && exactPerm.getStrength(modeFlags) >= minStrength) {
+            return true;
+        }
+
+        // No exact match, look for prefixes
+        final int N = perms.size();
+        for (int i = 0; i < N; i++) {
+            final UriPermission perm = perms.valueAt(i);
+            if (perm.uri.prefix && uri.isPathPrefixMatch(perm.uri.uri)
+                    && perm.getStrength(modeFlags) >= minStrength) {
+                return true;
+            }
+        }
+
+        return false;
     }
 
     @Override
-    public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
+    public int checkUriPermission(Uri uri, int pid, int uid, final int modeFlags) {
         enforceNotIsolatedCaller("checkUriPermission");
 
         // Another redirected-binder-call permissions check as in
@@ -5892,8 +6169,8 @@
         if (pid == MY_PID) {
             return PackageManager.PERMISSION_GRANTED;
         }
-        synchronized(this) {
-            return checkUriPermissionLocked(uri, uid, modeFlags, UriPermission.STRENGTH_OWNED)
+        synchronized (this) {
+            return checkUriPermissionLocked(uri, uid, modeFlags)
                     ? PackageManager.PERMISSION_GRANTED
                     : PackageManager.PERMISSION_DENIED;
         }
@@ -5909,11 +6186,8 @@
      * lastTargetUid else set that to -1.
      */
     int checkGrantUriPermissionLocked(int callingUid, String targetPkg,
-            Uri uri, int modeFlags, int lastTargetUid) {
-        final boolean persistable = (modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0;
-        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
-                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
-        if (modeFlags == 0) {
+            Uri uri, final int modeFlags, int lastTargetUid) {
+        if (!Intent.isAccessUriMode(modeFlags)) {
             return -1;
         }
 
@@ -6008,9 +6282,7 @@
         if (callingUid != Process.myUid()) {
             if (!checkHoldingPermissionsLocked(pm, pi, uri, callingUid, modeFlags)) {
                 // Require they hold a strong enough Uri permission
-                final int minStrength = persistable ? UriPermission.STRENGTH_PERSISTABLE
-                        : UriPermission.STRENGTH_OWNED;
-                if (!checkUriPermissionLocked(uri, callingUid, modeFlags, minStrength)) {
+                if (!checkUriPermissionLocked(uri, callingUid, modeFlags)) {
                     throw new SecurityException("Uid " + callingUid
                             + " does not have permission to uri " + uri);
                 }
@@ -6022,19 +6294,16 @@
 
     @Override
     public int checkGrantUriPermission(int callingUid, String targetPkg,
-            Uri uri, int modeFlags) {
+            Uri uri, final int modeFlags) {
         enforceNotIsolatedCaller("checkGrantUriPermission");
         synchronized(this) {
             return checkGrantUriPermissionLocked(callingUid, targetPkg, uri, modeFlags, -1);
         }
     }
 
-    void grantUriPermissionUncheckedLocked(
-            int targetUid, String targetPkg, Uri uri, int modeFlags, UriPermissionOwner owner) {
-        final boolean persistable = (modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0;
-        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
-                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
-        if (modeFlags == 0) {
+    void grantUriPermissionUncheckedLocked(int targetUid, String targetPkg, Uri uri,
+            final int modeFlags, UriPermissionOwner owner) {
+        if (!Intent.isAccessUriMode(modeFlags)) {
             return;
         }
 
@@ -6052,13 +6321,14 @@
             return;
         }
 
+        final boolean prefix = (modeFlags & Intent.FLAG_GRANT_PREFIX_URI_PERMISSION) != 0;
         final UriPermission perm = findOrCreateUriPermissionLocked(
-                pi.packageName, targetPkg, targetUid, uri);
-        perm.grantModes(modeFlags, persistable, owner);
+                pi.packageName, targetPkg, targetUid, new GrantUri(uri, prefix));
+        perm.grantModes(modeFlags, owner);
     }
 
     void grantUriPermissionLocked(int callingUid, String targetPkg, Uri uri,
-            int modeFlags, UriPermissionOwner owner) {
+            final int modeFlags, UriPermissionOwner owner) {
         if (targetPkg == null) {
             throw new NullPointerException("targetPkg");
         }
@@ -6172,7 +6442,7 @@
 
     @Override
     public void grantUriPermission(IApplicationThread caller, String targetPkg,
-            Uri uri, int modeFlags) {
+            Uri uri, final int modeFlags) {
         enforceNotIsolatedCaller("grantUriPermission");
         synchronized(this) {
             final ProcessRecord r = getRecordForAppLocked(caller);
@@ -6188,32 +6458,32 @@
                 throw new IllegalArgumentException("null uri");
             }
 
-            // Persistable only supported through Intents
-            Preconditions.checkFlagsArgument(modeFlags,
-                    Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+            Preconditions.checkFlagsArgument(modeFlags, Intent.FLAG_GRANT_READ_URI_PERMISSION
+                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION
+                    | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION
+                    | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION);
 
-            grantUriPermissionLocked(r.uid, targetPkg, uri, modeFlags,
-                    null);
+            grantUriPermissionLocked(r.uid, targetPkg, uri, modeFlags, null);
         }
     }
 
     void removeUriPermissionIfNeededLocked(UriPermission perm) {
-        if ((perm.modeFlags&(Intent.FLAG_GRANT_READ_URI_PERMISSION
-                |Intent.FLAG_GRANT_WRITE_URI_PERMISSION)) == 0) {
-            ArrayMap<Uri, UriPermission> perms
-                    = mGrantedUriPermissions.get(perm.targetUid);
+        if (perm.modeFlags == 0) {
+            final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.get(
+                    perm.targetUid);
             if (perms != null) {
                 if (DEBUG_URI_PERMISSION) Slog.v(TAG, 
                         "Removing " + perm.targetUid + " permission to " + perm.uri);
+
                 perms.remove(perm.uri);
-                if (perms.size() == 0) {
+                if (perms.isEmpty()) {
                     mGrantedUriPermissions.remove(perm.targetUid);
                 }
             }
         }
     }
 
-    private void revokeUriPermissionLocked(int callingUid, Uri uri, int modeFlags) {
+    private void revokeUriPermissionLocked(int callingUid, Uri uri, final int modeFlags) {
         if (DEBUG_URI_PERMISSION) Slog.v(TAG, "Revoking all granted permissions to " + uri);
 
         final IPackageManager pm = AppGlobals.getPackageManager();
@@ -6237,46 +6507,29 @@
         boolean persistChanged = false;
 
         // Go through all of the permissions and remove any that match.
-        final List<String> SEGMENTS = uri.getPathSegments();
-        if (SEGMENTS != null) {
-            final int NS = SEGMENTS.size();
-            int N = mGrantedUriPermissions.size();
-            for (int i=0; i<N; i++) {
-                ArrayMap<Uri, UriPermission> perms
-                        = mGrantedUriPermissions.valueAt(i);
-                Iterator<UriPermission> it = perms.values().iterator();
-            toploop:
-                while (it.hasNext()) {
-                    UriPermission perm = it.next();
-                    Uri targetUri = perm.uri;
-                    if (!authority.equals(targetUri.getAuthority())) {
-                        continue;
-                    }
-                    List<String> targetSegments = targetUri.getPathSegments();
-                    if (targetSegments == null) {
-                        continue;
-                    }
-                    if (targetSegments.size() < NS) {
-                        continue;
-                    }
-                    for (int j=0; j<NS; j++) {
-                        if (!SEGMENTS.get(j).equals(targetSegments.get(j))) {
-                            continue toploop;
-                        }
-                    }
-                    if (DEBUG_URI_PERMISSION) Slog.v(TAG, 
-                            "Revoking " + perm.targetUid + " permission to " + perm.uri);
-                    persistChanged |= perm.clearModes(modeFlags, true);
+        int N = mGrantedUriPermissions.size();
+        for (int i = 0; i < N; i++) {
+            final int targetUid = mGrantedUriPermissions.keyAt(i);
+            final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.valueAt(i);
+
+            for (Iterator<UriPermission> it = perms.values().iterator(); it.hasNext();) {
+                final UriPermission perm = it.next();
+                if (perm.uri.uri.isPathPrefixMatch(uri)) {
+                    if (DEBUG_URI_PERMISSION)
+                        Slog.v(TAG,
+                                "Revoking " + perm.targetUid + " permission to " + perm.uri);
+                    persistChanged |= perm.revokeModes(
+                            modeFlags | Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
                     if (perm.modeFlags == 0) {
                         it.remove();
                     }
                 }
-                if (perms.size() == 0) {
-                    mGrantedUriPermissions.remove(
-                            mGrantedUriPermissions.keyAt(i));
-                    N--;
-                    i--;
-                }
+            }
+
+            if (perms.isEmpty()) {
+                mGrantedUriPermissions.remove(targetUid);
+                N--;
+                i--;
             }
         }
 
@@ -6287,7 +6540,7 @@
 
     @Override
     public void revokeUriPermission(IApplicationThread caller, Uri uri,
-            int modeFlags) {
+            final int modeFlags) {
         enforceNotIsolatedCaller("revokeUriPermission");
         synchronized(this) {
             final ProcessRecord r = getRecordForAppLocked(caller);
@@ -6301,9 +6554,7 @@
                 return;
             }
 
-            modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
-                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
-            if (modeFlags == 0) {
+            if (!Intent.isAccessUriMode(modeFlags)) {
                 return;
             }
 
@@ -6338,20 +6589,22 @@
 
         boolean persistChanged = false;
 
-        final int size = mGrantedUriPermissions.size();
-        for (int i = 0; i < size; i++) {
+        int N = mGrantedUriPermissions.size();
+        for (int i = 0; i < N; i++) {
+            final int targetUid = mGrantedUriPermissions.keyAt(i);
+            final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.valueAt(i);
+
             // Only inspect grants matching user
             if (userHandle == UserHandle.USER_ALL
-                    || userHandle == UserHandle.getUserId(mGrantedUriPermissions.keyAt(i))) {
-                final Iterator<UriPermission> it = mGrantedUriPermissions.valueAt(i)
-                        .values().iterator();
-                while (it.hasNext()) {
+                    || userHandle == UserHandle.getUserId(targetUid)) {
+                for (Iterator<UriPermission> it = perms.values().iterator(); it.hasNext();) {
                     final UriPermission perm = it.next();
 
                     // Only inspect grants matching package
                     if (packageName == null || perm.sourcePkg.equals(packageName)
                             || perm.targetPkg.equals(packageName)) {
-                        persistChanged |= perm.clearModes(~0, persistable);
+                        persistChanged |= perm.revokeModes(
+                                persistable ? ~0 : ~Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION);
 
                         // Only remove when no modes remain; any persisted grants
                         // will keep this alive.
@@ -6360,6 +6613,12 @@
                         }
                     }
                 }
+
+                if (perms.isEmpty()) {
+                    mGrantedUriPermissions.remove(targetUid);
+                    N--;
+                    i--;
+                }
             }
         }
 
@@ -6379,7 +6638,7 @@
 
     @Override
     public void grantUriPermissionFromOwner(IBinder token, int fromUid, String targetPkg,
-            Uri uri, int modeFlags) {
+            Uri uri, final int modeFlags) {
         synchronized(this) {
             UriPermissionOwner owner = UriPermissionOwner.fromExternalToken(token);
             if (owner == null) {
@@ -6433,8 +6692,9 @@
         ArrayList<UriPermission.Snapshot> persist = Lists.newArrayList();
         synchronized (this) {
             final int size = mGrantedUriPermissions.size();
-            for (int i = 0 ; i < size; i++) {
-                for (UriPermission perm : mGrantedUriPermissions.valueAt(i).values()) {
+            for (int i = 0; i < size; i++) {
+                final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.valueAt(i);
+                for (UriPermission perm : perms.values()) {
                     if (perm.persistedModeFlags != 0) {
                         persist.add(perm.snapshot());
                     }
@@ -6455,7 +6715,8 @@
                 writeIntAttribute(out, ATTR_USER_HANDLE, perm.userHandle);
                 out.attribute(null, ATTR_SOURCE_PKG, perm.sourcePkg);
                 out.attribute(null, ATTR_TARGET_PKG, perm.targetPkg);
-                out.attribute(null, ATTR_URI, String.valueOf(perm.uri));
+                out.attribute(null, ATTR_URI, String.valueOf(perm.uri.uri));
+                writeBooleanAttribute(out, ATTR_PREFIX, perm.uri.prefix);
                 writeIntAttribute(out, ATTR_MODE_FLAGS, perm.persistedModeFlags);
                 writeLongAttribute(out, ATTR_CREATED_TIME, perm.persistedCreateTime);
                 out.endTag(null, TAG_URI_GRANT);
@@ -6491,6 +6752,7 @@
                         final String sourcePkg = in.getAttributeValue(null, ATTR_SOURCE_PKG);
                         final String targetPkg = in.getAttributeValue(null, ATTR_TARGET_PKG);
                         final Uri uri = Uri.parse(in.getAttributeValue(null, ATTR_URI));
+                        final boolean prefix = readBooleanAttribute(in, ATTR_PREFIX);
                         final int modeFlags = readIntAttribute(in, ATTR_MODE_FLAGS);
                         final long createdTime = readLongAttribute(in, ATTR_CREATED_TIME, now);
 
@@ -6506,7 +6768,7 @@
                             }
                             if (targetUid != -1) {
                                 final UriPermission perm = findOrCreateUriPermissionLocked(
-                                        sourcePkg, targetPkg, targetUid, uri);
+                                        sourcePkg, targetPkg, targetUid, new GrantUri(uri, prefix));
                                 perm.initPersistedModes(modeFlags, createdTime);
                             }
                         } else {
@@ -6528,7 +6790,7 @@
     }
 
     @Override
-    public void takePersistableUriPermission(Uri uri, int modeFlags) {
+    public void takePersistableUriPermission(Uri uri, final int modeFlags) {
         enforceNotIsolatedCaller("takePersistableUriPermission");
 
         Preconditions.checkFlagsArgument(modeFlags,
@@ -6536,13 +6798,28 @@
 
         synchronized (this) {
             final int callingUid = Binder.getCallingUid();
-            final UriPermission perm = findUriPermissionLocked(callingUid, uri);
-            if (perm == null) {
-                throw new SecurityException("No permission grant found for UID " + callingUid
-                        + " and Uri " + uri.toSafeString());
+            boolean persistChanged = false;
+
+            UriPermission exactPerm = findUriPermissionLocked(callingUid, new GrantUri(uri, false));
+            UriPermission prefixPerm = findUriPermissionLocked(callingUid, new GrantUri(uri, true));
+
+            final boolean exactValid = (exactPerm != null)
+                    && ((modeFlags & exactPerm.persistableModeFlags) == modeFlags);
+            final boolean prefixValid = (prefixPerm != null)
+                    && ((modeFlags & prefixPerm.persistableModeFlags) == modeFlags);
+
+            if (!(exactValid || prefixValid)) {
+                throw new SecurityException("No persistable permission grants found for UID "
+                        + callingUid + " and Uri " + uri.toSafeString());
             }
 
-            boolean persistChanged = perm.takePersistableModes(modeFlags);
+            if (exactValid) {
+                persistChanged |= exactPerm.takePersistableModes(modeFlags);
+            }
+            if (prefixValid) {
+                persistChanged |= prefixPerm.takePersistableModes(modeFlags);
+            }
+
             persistChanged |= maybePrunePersistedUriGrantsLocked(callingUid);
 
             if (persistChanged) {
@@ -6552,7 +6829,7 @@
     }
 
     @Override
-    public void releasePersistableUriPermission(Uri uri, int modeFlags) {
+    public void releasePersistableUriPermission(Uri uri, final int modeFlags) {
         enforceNotIsolatedCaller("releasePersistableUriPermission");
 
         Preconditions.checkFlagsArgument(modeFlags,
@@ -6560,16 +6837,24 @@
 
         synchronized (this) {
             final int callingUid = Binder.getCallingUid();
+            boolean persistChanged = false;
 
-            final UriPermission perm = findUriPermissionLocked(callingUid, uri);
-            if (perm == null) {
-                Slog.w(TAG, "No permission grant found for UID " + callingUid + " and Uri "
-                        + uri.toSafeString());
-                return;
+            UriPermission exactPerm = findUriPermissionLocked(callingUid, new GrantUri(uri, false));
+            UriPermission prefixPerm = findUriPermissionLocked(callingUid, new GrantUri(uri, true));
+            if (exactPerm == null && prefixPerm == null) {
+                throw new SecurityException("No permission grants found for UID " + callingUid
+                        + " and Uri " + uri.toSafeString());
             }
 
-            final boolean persistChanged = perm.releasePersistableModes(modeFlags);
-            removeUriPermissionIfNeededLocked(perm);
+            if (exactPerm != null) {
+                persistChanged |= exactPerm.releasePersistableModes(modeFlags);
+                removeUriPermissionIfNeededLocked(exactPerm);
+            }
+            if (prefixPerm != null) {
+                persistChanged |= prefixPerm.releasePersistableModes(modeFlags);
+                removeUriPermissionIfNeededLocked(prefixPerm);
+            }
+
             if (persistChanged) {
                 schedulePersistUriGrants();
             }
@@ -6583,7 +6868,7 @@
      * @return if any mutations occured that require persisting.
      */
     private boolean maybePrunePersistedUriGrantsLocked(int uid) {
-        final ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.get(uid);
+        final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.get(uid);
         if (perms == null) return false;
         if (perms.size() < MAX_PERSISTED_URI_GRANTS) return false;
 
@@ -6633,13 +6918,12 @@
         final ArrayList<android.content.UriPermission> result = Lists.newArrayList();
         synchronized (this) {
             if (incoming) {
-                final ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.get(callingUid);
+                final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.get(
+                        callingUid);
                 if (perms == null) {
                     Slog.w(TAG, "No permission grants found for " + packageName);
                 } else {
-                    final int size = perms.size();
-                    for (int i = 0; i < size; i++) {
-                        final UriPermission perm = perms.valueAt(i);
+                    for (UriPermission perm : perms.values()) {
                         if (packageName.equals(perm.targetPkg) && perm.persistedModeFlags != 0) {
                             result.add(perm.buildPersistedPublicApiObject());
                         }
@@ -6648,10 +6932,9 @@
             } else {
                 final int size = mGrantedUriPermissions.size();
                 for (int i = 0; i < size; i++) {
-                    final ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.valueAt(i);
-                    final int permsSize = perms.size();
-                    for (int j = 0; j < permsSize; j++) {
-                        final UriPermission perm = perms.valueAt(j);
+                    final ArrayMap<GrantUri, UriPermission> perms =
+                            mGrantedUriPermissions.valueAt(i);
+                    for (UriPermission perm : perms.values()) {
                         if (packageName.equals(perm.sourcePkg) && perm.persistedModeFlags != 0) {
                             result.add(perm.buildPersistedPublicApiObject());
                         }
@@ -6750,7 +7033,7 @@
             }
         }
 
-        if (pending == null && receiver != null) {
+        if (pending.pendingRecords.isEmpty() && receiver != null) {
             // In this case all thumbnails were available and the client
             // is being asked to be told when the remaining ones come in...
             // which is unusually, since the top-most currently running
@@ -6787,10 +7070,19 @@
             ArrayList<ActivityManager.RecentTaskInfo> res
                     = new ArrayList<ActivityManager.RecentTaskInfo>(
                             maxNum < N ? maxNum : N);
+
+            final Set<Integer> includedUsers;
+            if ((flags & ActivityManager.RECENT_INCLUDE_PROFILES) != 0) {
+                includedUsers = getProfileIdsLocked(userId);
+            } else {
+                includedUsers = new HashSet<Integer>();
+            }
+            includedUsers.add(Integer.valueOf(userId));
             for (int i=0; i<N && maxNum > 0; i++) {
                 TaskRecord tr = mRecentTasks.get(i);
-                // Only add calling user's recent tasks
-                if (tr.userId != userId) continue;
+                // Only add calling user or related users recent tasks
+                if (!includedUsers.contains(Integer.valueOf(tr.userId))) continue;
+
                 // Return the entry if desired by the caller.  We always return
                 // the first entry, because callers always expect this to be the
                 // foreground app.  We may filter others if the caller has
@@ -6814,6 +7106,31 @@
                     rti.origActivity = tr.origActivity;
                     rti.description = tr.lastDescription;
                     rti.stackId = tr.stack.mStackId;
+                    rti.userId = tr.userId;
+
+                    // Traverse upwards looking for any break between main task activities and
+                    // utility activities.
+                    final ArrayList<ActivityRecord> activities = tr.mActivities;
+                    int activityNdx;
+                    final int numActivities = activities.size();
+                    for (activityNdx = Math.min(numActivities, 1); activityNdx < numActivities;
+                            ++activityNdx) {
+                        final ActivityRecord r = activities.get(activityNdx);
+                        if (r.intent != null &&
+                                (r.intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET)
+                                        != 0) {
+                            break;
+                        }
+                    }
+                    // Traverse downwards starting below break looking for set label and icon.
+                    for (--activityNdx; activityNdx >= 0; --activityNdx) {
+                        final ActivityRecord r = activities.get(activityNdx);
+                        if (r.activityLabel != null || r.activityIcon != null) {
+                            rti.activityLabel = r.activityLabel;
+                            rti.activityIcon = r.activityIcon;
+                            break;
+                        }
+                    }
 
                     if ((flags&ActivityManager.RECENT_IGNORE_UNAVAILABLE) != 0) {
                         // Check whether this activity is currently available.
@@ -6833,7 +7150,7 @@
                             // Will never happen.
                         }
                     }
-                    
+
                     res.add(rti);
                     maxNum--;
                 }
@@ -6880,6 +7197,18 @@
     }
 
     @Override
+    public void setActivityLabelAndIcon(IBinder token, CharSequence activityLabel,
+            Bitmap activityIcon) {
+        synchronized (this) {
+            ActivityRecord r = ActivityRecord.isInStackLocked(token);
+            if (r != null) {
+                r.activityLabel = activityLabel.toString();
+                r.activityIcon = activityIcon;
+            }
+        }
+    }
+
+    @Override
     public boolean removeSubTask(int taskId, int subTaskIndex) {
         synchronized (this) {
             enforceCallingPermission(android.Manifest.permission.REMOVE_TASKS,
@@ -6957,6 +7286,24 @@
         }
     }
 
+    /**
+     * Removes the task with the specified task id.
+     *
+     * @param taskId Identifier of the task to be removed.
+     * @param flags Additional operational flags.  May be 0 or
+     * {@link ActivityManager#REMOVE_TASK_KILL_PROCESS}.
+     * @return Returns true if the given task was found and removed.
+     */
+    private boolean removeTaskByIdLocked(int taskId, int flags) {
+        TaskRecord tr = recentTaskForIdLocked(taskId);
+        if (tr != null) {
+            tr.removeTaskActivitiesLocked(-1, false);
+            cleanUpRemovedTaskLocked(tr, flags);
+            return true;
+        }
+        return false;
+    }
+
     @Override
     public boolean removeTask(int taskId, int flags) {
         synchronized (this) {
@@ -6964,40 +7311,22 @@
                     "removeTask()");
             long ident = Binder.clearCallingIdentity();
             try {
-                TaskRecord tr = recentTaskForIdLocked(taskId);
-                if (tr != null) {
-                    ActivityRecord r = tr.removeTaskActivitiesLocked(-1, false);
-                    if (r != null) {
-                        cleanUpRemovedTaskLocked(tr, flags);
-                        return true;
-                    }
-                    if (tr.mActivities.size() == 0) {
-                        // Caller is just removing a recent task that is
-                        // not actively running.  That is easy!
-                        cleanUpRemovedTaskLocked(tr, flags);
-                        return true;
-                    }
-                    Slog.w(TAG, "removeTask: task " + taskId
-                            + " does not have activities to remove, "
-                            + " but numActivities=" + tr.numActivities
-                            + ": " + tr);
-                }
+                return removeTaskByIdLocked(taskId, flags);
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
         }
-        return false;
     }
     
     /**
      * TODO: Add mController hook
      */
     @Override
-    public void moveTaskToFront(int task, int flags, Bundle options) {
+    public void moveTaskToFront(int taskId, int flags, Bundle options) {
         enforceCallingPermission(android.Manifest.permission.REORDER_TASKS,
                 "moveTaskToFront()");
 
-        if (DEBUG_STACK) Slog.d(TAG, "moveTaskToFront: moving task=" + task);
+        if (DEBUG_STACK) Slog.d(TAG, "moveTaskToFront: moving taskId=" + taskId);
         synchronized(this) {
             if (!checkAppSwitchAllowedLocked(Binder.getCallingPid(),
                     Binder.getCallingUid(), "Task to front")) {
@@ -7006,6 +7335,14 @@
             }
             final long origId = Binder.clearCallingIdentity();
             try {
+                final TaskRecord task = mStackSupervisor.anyTaskForIdLocked(taskId);
+                if (task == null) {
+                    return;
+                }
+                if (mStackSupervisor.isLockTaskModeViolation(task)) {
+                    Slog.e(TAG, "moveTaskToFront: Attempt to violate Lock Task Mode");
+                    return;
+                }
                 mStackSupervisor.findTaskToMoveToFrontLocked(task, flags, options);
             } finally {
                 Binder.restoreCallingIdentity(origId);
@@ -7194,12 +7531,109 @@
     }
 
     @Override
+    public boolean isInHomeStack(int taskId) {
+        enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS,
+                "getStackInfo()");
+        long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (this) {
+                TaskRecord tr = recentTaskForIdLocked(taskId);
+                if (tr != null) {
+                    return tr.stack.isHomeStack();
+                }
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+        return false;
+    }
+
+    @Override
     public int getTaskForActivity(IBinder token, boolean onlyRoot) {
         synchronized(this) {
             return ActivityRecord.getTaskForActivityLocked(token, onlyRoot);
         }
     }
 
+    private boolean isLockTaskAuthorized(ComponentName name) {
+//        enforceCallingPermission(android.Manifest.permission.REORDER_TASKS,
+//                "startLockTaskMode()");
+//        DevicePolicyManager dpm = (DevicePolicyManager)
+//                mContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
+//        return dpm != null && dpm.isLockTaskPermitted(name);
+        return true;
+    }
+
+    private void startLockTaskMode(TaskRecord task) {
+        if (!isLockTaskAuthorized(task.intent.getComponent())) {
+            return;
+        }
+        long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (this) {
+                // Since we lost lock on task, make sure it is still there.
+                task = mStackSupervisor.anyTaskForIdLocked(task.taskId);
+                if (task != null) {
+                    mStackSupervisor.setLockTaskModeLocked(task);
+                }
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public void startLockTaskMode(int taskId) {
+        long ident = Binder.clearCallingIdentity();
+        try {
+            final TaskRecord task;
+            synchronized (this) {
+                task = mStackSupervisor.anyTaskForIdLocked(taskId);
+            }
+            if (task != null) {
+                startLockTaskMode(task);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public void startLockTaskMode(IBinder token) {
+        long ident = Binder.clearCallingIdentity();
+        try {
+            final TaskRecord task;
+            synchronized (this) {
+                final ActivityRecord r = ActivityRecord.forToken(token);
+                if (r == null) {
+                    return;
+                }
+                task = r.task;
+            }
+            if (task != null) {
+                startLockTaskMode(task);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public void stopLockTaskMode() {
+//        enforceCallingPermission(android.Manifest.permission.REORDER_TASKS,
+//                "stopLockTaskMode()");
+        synchronized (this) {
+            mStackSupervisor.setLockTaskModeLocked(null);
+        }
+    }
+
+    @Override
+    public boolean isInLockTaskMode() {
+        synchronized (this) {
+            return mStackSupervisor.isInLockTaskMode();
+        }
+    }
+
     // =========================================================
     // THUMBNAILS
     // =========================================================
@@ -7370,11 +7804,11 @@
                 }
             }
         }
-        
-        ArrayMap<Uri, UriPermission> perms = mGrantedUriPermissions.get(callingUid);
+
+        final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.get(callingUid);
         if (perms != null) {
-            for (Map.Entry<Uri, UriPermission> uri : perms.entrySet()) {
-                if (uri.getKey().getAuthority().equals(cpi.authority)) {
+            for (GrantUri uri : perms.keySet()) {
+                if (uri.uri.getAuthority().equals(cpi.authority)) {
                     return null;
                 }
             }
@@ -7770,22 +8204,27 @@
      */
     public void removeContentProvider(IBinder connection, boolean stable) {
         enforceNotIsolatedCaller("removeContentProvider");
-        synchronized (this) {
-            ContentProviderConnection conn;
-            try {
-                conn = (ContentProviderConnection)connection;
-            } catch (ClassCastException e) {
-                String msg ="removeContentProvider: " + connection
-                        + " not a ContentProviderConnection";
-                Slog.w(TAG, msg);
-                throw new IllegalArgumentException(msg);
+        long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (this) {
+                ContentProviderConnection conn;
+                try {
+                    conn = (ContentProviderConnection)connection;
+                } catch (ClassCastException e) {
+                    String msg ="removeContentProvider: " + connection
+                            + " not a ContentProviderConnection";
+                    Slog.w(TAG, msg);
+                    throw new IllegalArgumentException(msg);
+                }
+                if (conn == null) {
+                    throw new NullPointerException("connection is null");
+                }
+                if (decProviderCountLocked(conn, null, null, stable)) {
+                    updateOomAdjLocked();
+                }
             }
-            if (conn == null) {
-                throw new NullPointerException("connection is null");
-            }
-            if (decProviderCountLocked(conn, null, null, stable)) {
-                updateOomAdjLocked();
-            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
         }
     }
 
@@ -8195,11 +8634,27 @@
         return mSleeping || mShuttingDown;
     }
 
+    public boolean isSleeping() {
+        return mSleeping;
+    }
+
     void goingToSleep() {
         synchronized(this) {
             mWentToSleep = true;
             updateEventDispatchingLocked();
+            goToSleepIfNeededLocked();
+        }
+    }
 
+    void finishRunningVoiceLocked() {
+        if (mRunningVoice) {
+            mRunningVoice = false;
+            goToSleepIfNeededLocked();
+        }
+    }
+
+    void goToSleepIfNeededLocked() {
+        if (mWentToSleep && !mRunningVoice) {
             if (!mSleeping) {
                 mSleeping = true;
                 mStackSupervisor.goingToSleepLocked();
@@ -8262,7 +8717,7 @@
     }
 
     private void comeOutOfSleepIfNeededLocked() {
-        if (!mWentToSleep && !mLockScreenShown) {
+        if ((!mWentToSleep && !mLockScreenShown) || mRunningVoice) {
             if (mSleeping) {
                 mSleeping = false;
                 mStackSupervisor.comeOutOfSleepIfNeededLocked();
@@ -8278,6 +8733,13 @@
         }
     }
 
+    void startRunningVoiceLocked() {
+        if (!mRunningVoice) {
+            mRunningVoice = true;
+            comeOutOfSleepIfNeededLocked();
+        }
+    }
+
     private void updateEventDispatchingLocked() {
         mWindowManager.setEventDispatching(mBooted && !mWentToSleep && !mShuttingDown);
     }
@@ -8380,7 +8842,7 @@
                 mDebugTransient = !persistent;
                 if (packageName != null) {
                     forceStopPackageLocked(packageName, -1, false, false, true, true,
-                            UserHandle.USER_ALL, "set debug app");
+                            false, UserHandle.USER_ALL, "set debug app");
                 }
             }
         } finally {
@@ -8750,7 +9212,7 @@
                 Context.WINDOW_SERVICE)).addView(v, lp);
     }
 
-    public void noteWakeupAlarm(IIntentSender sender) {
+    public void noteWakeupAlarm(IIntentSender sender, int sourceUid, String sourcePkg) {
         if (!(sender instanceof PendingIntentRecord)) {
             return;
         }
@@ -8762,7 +9224,8 @@
                 int MY_UID = Binder.getCallingUid();
                 int uid = rec.uid == MY_UID ? Process.SYSTEM_UID : rec.uid;
                 BatteryStatsImpl.Uid.Pkg pkg =
-                    stats.getPackageStatsLocked(uid, rec.key.packageName);
+                    stats.getPackageStatsLocked(sourceUid >= 0 ? sourceUid : uid,
+                            sourcePkg != null ? sourcePkg : rec.key.packageName);
                 pkg.incWakeupsLocked();
             }
         }
@@ -8983,7 +9446,7 @@
                     proc.notCachedSinceIdle = true;
                     proc.initialIdlePss = 0;
                     proc.nextPssTime = ProcessList.computeNextPssTime(proc.curProcState, true,
-                            mSleeping, now);
+                            isSleeping(), now);
                 }
             }
 
@@ -9282,6 +9745,8 @@
 
         if (goingCallback != null) goingCallback.run();
         
+        mSystemServiceManager.startUser(mCurrentUserId);
+
         synchronized (this) {
             if (mFactoryTest != FactoryTest.FACTORY_TEST_LOW_LEVEL) {
                 try {
@@ -9338,6 +9803,8 @@
                         }, 0, null, null,
                         android.Manifest.permission.INTERACT_ACROSS_USERS, AppOpsManager.OP_NONE,
                         true, false, MY_PID, Process.SYSTEM_UID, UserHandle.USER_ALL);
+            } catch (Throwable t) {
+                Slog.wtf(TAG, "Failed sending first user broadcasts", t);
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
@@ -10167,6 +10634,7 @@
         int adj = app.curAdj;
         outInfo.importance = oomAdjToImportance(adj, outInfo);
         outInfo.importanceReasonCode = app.adjTypeCode;
+        outInfo.processState = app.curProcState;
     }
 
     public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses() {
@@ -10837,8 +11305,8 @@
                 pw.println("  mSleeping=" + mSleeping + " mWentToSleep=" + mWentToSleep
                         + " mLockScreenShown " + mLockScreenShown);
             }
-            if (mShuttingDown) {
-                pw.println("  mShuttingDown=" + mShuttingDown);
+            if (mShuttingDown || mRunningVoice) {
+                pw.print("  mShuttingDown=" + mShuttingDown + " mRunningVoice=" + mRunningVoice);
             }
         }
         if (mDebugApp != null || mOrigDebugApp != null || mDebugTransient
@@ -11335,8 +11803,7 @@
                 if (dumpUid >= -1 && UserHandle.getAppId(uid) != dumpUid) {
                     continue;
                 }
-                ArrayMap<Uri, UriPermission> perms
-                        = mGrantedUriPermissions.valueAt(i);
+                final ArrayMap<GrantUri, UriPermission> perms = mGrantedUriPermissions.valueAt(i);
                 if (!printed) {
                     if (needSep) pw.println();
                     needSep = true;
@@ -11344,8 +11811,7 @@
                     printed = true;
                     printedAnything = true;
                 }
-                pw.print("  * UID "); pw.print(uid);
-                        pw.println(" holds:");
+                pw.print("  * UID "); pw.print(uid); pw.println(" holds:");
                 for (UriPermission perm : perms.values()) {
                     pw.print("    "); pw.println(perm);
                     if (dumpAll) {
@@ -12115,7 +12581,25 @@
             if (!brief) {
                 if (!isCompact) {
                     pw.print("Total RAM: "); pw.print(memInfo.getTotalSizeKb());
-                    pw.println(" kB");
+                    pw.print(" kB (status ");
+                    switch (mLastMemoryLevel) {
+                        case ProcessStats.ADJ_MEM_FACTOR_NORMAL:
+                            pw.println("normal)");
+                            break;
+                        case ProcessStats.ADJ_MEM_FACTOR_MODERATE:
+                            pw.println("moderate)");
+                            break;
+                        case ProcessStats.ADJ_MEM_FACTOR_LOW:
+                            pw.println("low)");
+                            break;
+                        case ProcessStats.ADJ_MEM_FACTOR_CRITICAL:
+                            pw.println("critical)");
+                            break;
+                        default:
+                            pw.print(mLastMemoryLevel);
+                            pw.println(")");
+                            break;
+                    }
                     pw.print(" Free RAM: "); pw.print(cachedPss + memInfo.getCachedSizeKb()
                             + memInfo.getFreeSizeKb()); pw.print(" kB (");
                             pw.print(cachedPss); pw.print(" cached pss + ");
@@ -12330,9 +12814,10 @@
         app.unlinkDeathRecipient();
         app.makeInactive(mProcessStats);
         app.forcingToForeground = null;
-        app.foregroundServices = false;
+        updateProcessForegroundLocked(app, false, false);
         app.foregroundActivities = false;
         app.hasShownUi = false;
+        app.treatLikeActivity = false;
         app.hasAboveClient = false;
         app.hasClientActivities = false;
 
@@ -12460,10 +12945,16 @@
             startProcessLocked(app, "restart", app.processName);
         } else if (app.pid > 0 && app.pid != MY_PID) {
             // Goodbye!
+            boolean removed;
             synchronized (mPidsSelfLocked) {
                 mPidsSelfLocked.remove(app.pid);
                 mHandler.removeMessages(PROC_START_TIMEOUT_MSG, app);
             }
+            mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_PROC_FINISH,
+                    app.processName, app.info.uid);
+            if (app.isolated) {
+                mBatteryStatsService.removeIsolatedUid(app.uid, app.info.uid);
+            }
             app.setPid(0);
         }
     }
@@ -13290,7 +13781,7 @@
                         String list[] = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
                         if (list != null && (list.length > 0)) {
                             for (String pkg : list) {
-                                forceStopPackageLocked(pkg, -1, false, true, true, false, userId,
+                                forceStopPackageLocked(pkg, -1, false, true, true, false, false, userId,
                                         "storage unmount");
                             }
                             sendPackageBroadcastLocked(
@@ -13302,10 +13793,13 @@
                         if (data != null && (ssp=data.getSchemeSpecificPart()) != null) {
                             boolean removed = Intent.ACTION_PACKAGE_REMOVED.equals(
                                     intent.getAction());
+                            boolean fullUninstall = removed &&
+                                    !intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
                             if (!intent.getBooleanExtra(Intent.EXTRA_DONT_KILL_APP, false)) {
                                 forceStopPackageLocked(ssp, UserHandle.getAppId(
                                         intent.getIntExtra(Intent.EXTRA_UID, -1)), false, true, true,
-                                        false, userId, removed ? "pkg removed" : "pkg changed");
+                                        false, fullUninstall, userId,
+                                        removed ? "pkg removed" : "pkg changed");
                             }
                             if (removed) {
                                 sendPackageBroadcastLocked(IApplicationThread.PACKAGE_REMOVED,
@@ -13792,7 +14286,7 @@
 
             final long origId = Binder.clearCallingIdentity();
             // Instrumentation can kill and relaunch even persistent processes
-            forceStopPackageLocked(ii.targetPackage, -1, true, false, true, true, userId,
+            forceStopPackageLocked(ii.targetPackage, -1, true, false, true, true, false, userId,
                     "start instr");
             ProcessRecord app = addAppLocked(ai, false);
             app.instrumentationClass = className;
@@ -13860,7 +14354,7 @@
         app.instrumentationProfileFile = null;
         app.instrumentationArguments = null;
 
-        forceStopPackageLocked(app.info.packageName, -1, false, false, true, true, app.userId,
+        forceStopPackageLocked(app.info.packageName, -1, false, false, true, true, false, app.userId,
                 "finished inst");
     }
 
@@ -14196,7 +14690,7 @@
             app.keeping = true;
             app.curSchedGroup = Process.THREAD_GROUP_DEFAULT;
             app.curProcState = ActivityManager.PROCESS_STATE_PERSISTENT;
-            // System process can do UI, and when they do we want to have
+            // System processes can do UI, and when they do we want to have
             // them trim their memory after the user leaves the UI.  To
             // facilitate this, here we need to determine whether or not it
             // is currently showing UI.
@@ -14616,6 +15110,9 @@
                             app.adjTarget = s.name;
                         }
                     }
+                    if ((cr.flags&Context.BIND_TREAT_LIKE_ACTIVITY) != 0) {
+                        app.treatLikeActivity = true;
+                    }
                     final ActivityRecord a = cr.activity;
                     if ((cr.flags&Context.BIND_ADJUST_WITH_ACTIVITY) != 0) {
                         if (a != null && adj > ProcessList.FOREGROUND_APP_ADJ &&
@@ -14748,10 +15245,17 @@
             }
         }
 
-        if (procState >= ActivityManager.PROCESS_STATE_CACHED_EMPTY && app.hasClientActivities) {
-            // This is a cached process, but with client activities.  Mark it so.
-            procState = ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT;
-            app.adjType = "cch-client-act";
+        if (procState >= ActivityManager.PROCESS_STATE_CACHED_EMPTY) {
+            if (app.hasClientActivities) {
+                // This is a cached process, but with client activities.  Mark it so.
+                procState = ActivityManager.PROCESS_STATE_CACHED_ACTIVITY_CLIENT;
+                app.adjType = "cch-client-act";
+            } else if (app.treatLikeActivity) {
+                // This is a cached process, but somebody wants us to treat it like it has
+                // an activity, okay!
+                procState = ActivityManager.PROCESS_STATE_CACHED_ACTIVITY;
+                app.adjType = "cch-as-act";
+            }
         }
 
         if (adj == ProcessList.SERVICE_ADJ) {
@@ -14804,86 +15308,7 @@
         adj = app.modifyRawOomAdj(adj);
 
         app.curProcState = procState;
-
-        int importance = app.memImportance;
-        if (importance == 0 || adj != app.curAdj || schedGroup != app.curSchedGroup) {
-            app.curAdj = adj;
-            app.curSchedGroup = schedGroup;
-            if (!interesting) {
-                // For this reporting, if there is not something explicitly
-                // interesting in this process then we will push it to the
-                // background importance.
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
-            } else if (adj >= ProcessList.CACHED_APP_MIN_ADJ) {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
-            } else if (adj >= ProcessList.SERVICE_B_ADJ) {
-                importance =  ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE;
-            } else if (adj >= ProcessList.HOME_APP_ADJ) {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND;
-            } else if (adj >= ProcessList.SERVICE_ADJ) {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_SERVICE;
-            } else if (adj >= ProcessList.HEAVY_WEIGHT_APP_ADJ) {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_CANT_SAVE_STATE;
-            } else if (adj >= ProcessList.PERCEPTIBLE_APP_ADJ) {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE;
-            } else if (adj >= ProcessList.VISIBLE_APP_ADJ) {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_VISIBLE;
-            } else if (adj >= ProcessList.FOREGROUND_APP_ADJ) {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;
-            } else {
-                importance = ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERSISTENT;
-            }
-        }
-
-        int changes = importance != app.memImportance ? ProcessChangeItem.CHANGE_IMPORTANCE : 0;
-        if (foregroundActivities != app.foregroundActivities) {
-            changes |= ProcessChangeItem.CHANGE_ACTIVITIES;
-        }
-        if (changes != 0) {
-            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Changes in " + app + ": " + changes);
-            app.memImportance = importance;
-            app.foregroundActivities = foregroundActivities;
-            int i = mPendingProcessChanges.size()-1;
-            ProcessChangeItem item = null;
-            while (i >= 0) {
-                item = mPendingProcessChanges.get(i);
-                if (item.pid == app.pid) {
-                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Re-using existing item: " + item);
-                    break;
-                }
-                i--;
-            }
-            if (i < 0) {
-                // No existing item in pending changes; need a new one.
-                final int NA = mAvailProcessChanges.size();
-                if (NA > 0) {
-                    item = mAvailProcessChanges.remove(NA-1);
-                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Retreiving available item: " + item);
-                } else {
-                    item = new ProcessChangeItem();
-                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Allocating new item: " + item);
-                }
-                item.changes = 0;
-                item.pid = app.pid;
-                item.uid = app.info.uid;
-                if (mPendingProcessChanges.size() == 0) {
-                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG,
-                            "*** Enqueueing dispatch processes changed!");
-                    mHandler.obtainMessage(DISPATCH_PROCESSES_CHANGED).sendToTarget();
-                }
-                mPendingProcessChanges.add(item);
-            }
-            item.changes |= changes;
-            item.importance = importance;
-            item.foregroundActivities = foregroundActivities;
-            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Item "
-                    + Integer.toHexString(System.identityHashCode(item))
-                    + " " + app.toShortString() + ": changes=" + item.changes
-                    + " importance=" + item.importance
-                    + " foreground=" + item.foregroundActivities
-                    + " type=" + app.adjType + " source=" + app.adjSource
-                    + " target=" + app.adjTarget);
-        }
+        app.foregroundActivities = foregroundActivities;
 
         return app.curRawAdj;
     }
@@ -14922,7 +15347,7 @@
             if (memLowered || now > (app.lastStateTime+ProcessList.PSS_ALL_INTERVAL)) {
                 app.pssProcState = app.setProcState;
                 app.nextPssTime = ProcessList.computeNextPssTime(app.curProcState, true,
-                        mSleeping, now);
+                        isSleeping(), now);
                 mPendingPssProcesses.add(app);
             }
         }
@@ -14959,7 +15384,7 @@
             }
         }
         return !processingBroadcasts
-                && (mSleeping || mStackSupervisor.allResumedActivitiesIdle());
+                && (isSleeping() || mStackSupervisor.allResumedActivitiesIdle());
     }
     
     /**
@@ -15156,7 +15581,7 @@
     }
 
     private final boolean applyOomAdjLocked(ProcessRecord app, boolean wasKeeping,
-            ProcessRecord TOP_APP, boolean doingAll, boolean reportingProcessState, long now) {
+            ProcessRecord TOP_APP, boolean doingAll, long now) {
         boolean success = true;
 
         if (app.curRawAdj != app.setRawAdj) {
@@ -15175,6 +15600,8 @@
             app.setRawAdj = app.curRawAdj;
         }
 
+        int changes = 0;
+
         if (app.curAdj != app.setAdj) {
             ProcessList.setOomAdj(app.pid, app.curAdj);
             if (DEBUG_SWITCH || DEBUG_OOM_ADJ) Slog.v(
@@ -15216,9 +15643,14 @@
                         app.curSchedGroup <= Process.THREAD_GROUP_BG_NONINTERACTIVE);
             }
         }
+        if (app.repForegroundActivities != app.foregroundActivities) {
+            app.repForegroundActivities = app.foregroundActivities;
+            changes |= ProcessChangeItem.CHANGE_ACTIVITIES;
+        }
         if (app.repProcState != app.curProcState) {
             app.repProcState = app.curProcState;
-            if (!reportingProcessState && app.thread != null) {
+            changes |= ProcessChangeItem.CHANGE_PROCESS_STATE;
+            if (app.thread != null) {
                 try {
                     if (false) {
                         //RuntimeException h = new RuntimeException("here");
@@ -15234,7 +15666,7 @@
                 app.setProcState)) {
             app.lastStateTime = now;
             app.nextPssTime = ProcessList.computeNextPssTime(app.curProcState, true,
-                    mSleeping, now);
+                    isSleeping(), now);
             if (DEBUG_PSS) Slog.d(TAG, "Process state change from "
                     + ProcessList.makeProcStateString(app.setProcState) + " to "
                     + ProcessList.makeProcStateString(app.curProcState) + " next pss in "
@@ -15244,7 +15676,7 @@
                     && now > (app.lastStateTime+ProcessList.PSS_MIN_TIME_FROM_STATE_CHANGE))) {
                 requestPssLocked(app, app.setProcState);
                 app.nextPssTime = ProcessList.computeNextPssTime(app.curProcState, false,
-                        mSleeping, now);
+                        isSleeping(), now);
             } else if (false && DEBUG_PSS) {
                 Slog.d(TAG, "Not requesting PSS of " + app + ": next=" + (app.nextPssTime-now));
             }
@@ -15263,6 +15695,51 @@
                 app.procStateChanged = true;
             }
         }
+
+        if (changes != 0) {
+            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Changes in " + app + ": " + changes);
+            int i = mPendingProcessChanges.size()-1;
+            ProcessChangeItem item = null;
+            while (i >= 0) {
+                item = mPendingProcessChanges.get(i);
+                if (item.pid == app.pid) {
+                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Re-using existing item: " + item);
+                    break;
+                }
+                i--;
+            }
+            if (i < 0) {
+                // No existing item in pending changes; need a new one.
+                final int NA = mAvailProcessChanges.size();
+                if (NA > 0) {
+                    item = mAvailProcessChanges.remove(NA-1);
+                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Retreiving available item: " + item);
+                } else {
+                    item = new ProcessChangeItem();
+                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Allocating new item: " + item);
+                }
+                item.changes = 0;
+                item.pid = app.pid;
+                item.uid = app.info.uid;
+                if (mPendingProcessChanges.size() == 0) {
+                    if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG,
+                            "*** Enqueueing dispatch processes changed!");
+                    mHandler.obtainMessage(DISPATCH_PROCESSES_CHANGED).sendToTarget();
+                }
+                mPendingProcessChanges.add(item);
+            }
+            item.changes |= changes;
+            item.processState = app.repProcState;
+            item.foregroundActivities = app.repForegroundActivities;
+            if (DEBUG_PROCESS_OBSERVERS) Slog.i(TAG, "Item "
+                    + Integer.toHexString(System.identityHashCode(item))
+                    + " " + app.toShortString() + ": changes=" + item.changes
+                    + " procState=" + item.processState
+                    + " foreground=" + item.foregroundActivities
+                    + " type=" + app.adjType + " source=" + app.adjSource
+                    + " target=" + app.adjTarget);
+        }
+
         return success;
     }
 
@@ -15273,7 +15750,7 @@
     }
 
     private final boolean updateOomAdjLocked(ProcessRecord app, int cachedAdj,
-            ProcessRecord TOP_APP, boolean doingAll, boolean reportingProcessState, long now) {
+            ProcessRecord TOP_APP, boolean doingAll, long now) {
         if (app.thread == null) {
             return false;
         }
@@ -15282,19 +15759,72 @@
 
         computeOomAdjLocked(app, cachedAdj, TOP_APP, doingAll, now);
 
-        return applyOomAdjLocked(app, wasKeeping, TOP_APP, doingAll,
-                reportingProcessState, now);
+        return applyOomAdjLocked(app, wasKeeping, TOP_APP, doingAll, now);
+    }
+
+    final void updateProcessForegroundLocked(ProcessRecord proc, boolean isForeground,
+            boolean oomAdj) {
+        if (isForeground != proc.foregroundServices) {
+            proc.foregroundServices = isForeground;
+            ArrayList<ProcessRecord> curProcs = mForegroundPackages.get(proc.info.packageName,
+                    proc.info.uid);
+            if (isForeground) {
+                if (curProcs == null) {
+                    curProcs = new ArrayList<ProcessRecord>();
+                    mForegroundPackages.put(proc.info.packageName, proc.info.uid, curProcs);
+                }
+                if (!curProcs.contains(proc)) {
+                    curProcs.add(proc);
+                    mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_FOREGROUND_START,
+                            proc.info.packageName, proc.info.uid);
+                }
+            } else {
+                if (curProcs != null) {
+                    if (curProcs.remove(proc)) {
+                        mBatteryStatsService.noteEvent(
+                                BatteryStats.HistoryItem.EVENT_FOREGROUND_FINISH,
+                                proc.info.packageName, proc.info.uid);
+                        if (curProcs.size() <= 0) {
+                            mForegroundPackages.remove(proc.info.packageName, proc.info.uid);
+                        }
+                    }
+                }
+            }
+            if (oomAdj) {
+                updateOomAdjLocked();
+            }
+        }
     }
 
     private final ActivityRecord resumedAppLocked() {
-        return mStackSupervisor.resumedAppLocked();
+        ActivityRecord act = mStackSupervisor.resumedAppLocked();
+        String pkg;
+        int uid;
+        if (act != null && !act.sleeping) {
+            pkg = act.packageName;
+            uid = act.info.applicationInfo.uid;
+        } else {
+            pkg = null;
+            uid = -1;
+        }
+        // Has the UID or resumed package name changed?
+        if (uid != mCurResumedUid || (pkg != mCurResumedPackage
+                && (pkg == null || !pkg.equals(mCurResumedPackage)))) {
+            if (mCurResumedPackage != null) {
+                mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_TOP_FINISH,
+                        mCurResumedPackage, mCurResumedUid);
+            }
+            mCurResumedPackage = pkg;
+            mCurResumedUid = uid;
+            if (mCurResumedPackage != null) {
+                mBatteryStatsService.noteEvent(BatteryStats.HistoryItem.EVENT_TOP_START,
+                        mCurResumedPackage, mCurResumedUid);
+            }
+        }
+        return act;
     }
 
     final boolean updateOomAdjLocked(ProcessRecord app) {
-        return updateOomAdjLocked(app, false);
-    }
-
-    final boolean updateOomAdjLocked(ProcessRecord app, boolean doingProcessState) {
         final ActivityRecord TOP_ACT = resumedAppLocked();
         final ProcessRecord TOP_APP = TOP_ACT != null ? TOP_ACT.app : null;
         final boolean wasCached = app.cached;
@@ -15307,7 +15837,7 @@
         // need to do a complete oom adj.
         final int cachedAdj = app.curRawAdj >= ProcessList.CACHED_APP_MIN_ADJ
                 ? app.curRawAdj : ProcessList.UNKNOWN_ADJ;
-        boolean success = updateOomAdjLocked(app, cachedAdj, TOP_APP, false, doingProcessState,
+        boolean success = updateOomAdjLocked(app, cachedAdj, TOP_APP, false,
                 SystemClock.uptimeMillis());
         if (wasCached != app.cached || app.curRawAdj == ProcessList.UNKNOWN_ADJ) {
             // Changed to/from cached state, so apps after it in the LRU
@@ -15440,7 +15970,7 @@
                     }
                 }
 
-                applyOomAdjLocked(app, wasKeeping, TOP_APP, true, false, now);
+                applyOomAdjLocked(app, wasKeeping, TOP_APP, true, now);
 
                 // Count the number of process types.
                 switch (app.curProcState) {
@@ -15523,7 +16053,7 @@
         }
         mLastMemoryLevel = memFactor;
         mLastNumProcesses = mLruProcesses.size();
-        boolean allChanged = mProcessStats.setMemFactorLocked(memFactor, !mSleeping, now);
+        boolean allChanged = mProcessStats.setMemFactorLocked(memFactor, !isSleeping(), now);
         final int trackerMemFactor = mProcessStats.getMemFactorLocked();
         if (memFactor != ProcessStats.ADJ_MEM_FACTOR_NORMAL) {
             if (mLowRamStartTime == 0) {
@@ -15946,8 +16476,45 @@
 
     // Multi-user methods
 
+    /**
+     * Start user, if its not already running, but don't bring it to foreground.
+     */
+    @Override
+    public boolean startUserInBackground(final int userId) {
+        return startUser(userId, /* foreground */ false);
+    }
+
+    /**
+     * Refreshes the list of users related to the current user when either a
+     * user switch happens or when a new related user is started in the
+     * background.
+     */
+    private void updateCurrentProfileIdsLocked() {
+        final List<UserInfo> profiles = getUserManagerLocked().getProfiles(
+                mCurrentUserId, false /* enabledOnly */);
+        int[] currentProfileIds = new int[profiles.size()]; // profiles will not be null
+        for (int i = 0; i < currentProfileIds.length; i++) {
+            currentProfileIds[i] = profiles.get(i).id;
+        }
+        mCurrentProfileIds = currentProfileIds;
+    }
+
+    private Set getProfileIdsLocked(int userId) {
+        Set userIds = new HashSet<Integer>();
+        final List<UserInfo> profiles = getUserManagerLocked().getProfiles(
+                userId, false /* enabledOnly */);
+        for (UserInfo user : profiles) {
+            userIds.add(Integer.valueOf(user.id));
+        }
+        return userIds;
+    }
+
     @Override
     public boolean switchUser(final int userId) {
+        return startUser(userId, /* foregound */ true);
+    }
+
+    private boolean startUser(final int userId, boolean foreground) {
         if (checkCallingPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
                 != PackageManager.PERMISSION_GRANTED) {
             String msg = "Permission Denial: switchUser() from pid="
@@ -15958,6 +16525,8 @@
             throw new SecurityException(msg);
         }
 
+        if (DEBUG_MU) Slog.i(TAG_MU, "starting userid:" + userId + " fore:" + foreground);
+
         final long ident = Binder.clearCallingIdentity();
         try {
             synchronized (this) {
@@ -15966,14 +16535,18 @@
                     return true;
                 }
 
+                mStackSupervisor.setLockTaskModeLocked(null);
+
                 final UserInfo userInfo = getUserManagerLocked().getUserInfo(userId);
                 if (userInfo == null) {
                     Slog.w(TAG, "No user info for user #" + userId);
                     return false;
                 }
 
-                mWindowManager.startFreezingScreen(R.anim.screen_user_exit,
-                        R.anim.screen_user_enter);
+                if (foreground) {
+                    mWindowManager.startFreezingScreen(R.anim.screen_user_exit,
+                            R.anim.screen_user_enter);
+                }
 
                 boolean needStart = false;
 
@@ -15985,16 +16558,24 @@
                     needStart = true;
                 }
 
-                mCurrentUserId = userId;
                 final Integer userIdInt = Integer.valueOf(userId);
                 mUserLru.remove(userIdInt);
                 mUserLru.add(userIdInt);
 
-                mWindowManager.setCurrentUser(userId);
-
-                // Once the internal notion of the active user has switched, we lock the device
-                // with the option to show the user switcher on the keyguard.
-                mWindowManager.lockNow(null);
+                if (foreground) {
+                    mCurrentUserId = userId;
+                    updateCurrentProfileIdsLocked();
+                    mWindowManager.setCurrentUser(userId, mCurrentProfileIds);
+                    // Once the internal notion of the active user has switched, we lock the device
+                    // with the option to show the user switcher on the keyguard.
+                    mWindowManager.lockNow(null);
+                } else {
+                    final Integer currentUserIdInt = Integer.valueOf(mCurrentUserId);
+                    updateCurrentProfileIdsLocked();
+                    mWindowManager.setCurrentProfileIds(mCurrentProfileIds);
+                    mUserLru.remove(currentUserIdInt);
+                    mUserLru.add(currentUserIdInt);
+                }
 
                 final UserStartedState uss = mStartedUsers.get(userId);
 
@@ -16015,12 +16596,23 @@
                     needStart = true;
                 }
 
-                mHandler.removeMessages(REPORT_USER_SWITCH_MSG);
-                mHandler.removeMessages(USER_SWITCH_TIMEOUT_MSG);
-                mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_MSG,
-                        oldUserId, userId, uss));
-                mHandler.sendMessageDelayed(mHandler.obtainMessage(USER_SWITCH_TIMEOUT_MSG,
-                        oldUserId, userId, uss), USER_SWITCH_TIMEOUT);
+                if (uss.mState == UserStartedState.STATE_BOOTING) {
+                    // Booting up a new user, need to tell system services about it.
+                    // Note that this is on the same handler as scheduling of broadcasts,
+                    // which is important because it needs to go first.
+                    mHandler.sendMessage(mHandler.obtainMessage(SYSTEM_USER_START_MSG, userId));
+                }
+
+                if (foreground) {
+                    mHandler.sendMessage(mHandler.obtainMessage(SYSTEM_USER_CURRENT_MSG, userId));
+                    mHandler.removeMessages(REPORT_USER_SWITCH_MSG);
+                    mHandler.removeMessages(USER_SWITCH_TIMEOUT_MSG);
+                    mHandler.sendMessage(mHandler.obtainMessage(REPORT_USER_SWITCH_MSG,
+                            oldUserId, userId, uss));
+                    mHandler.sendMessageDelayed(mHandler.obtainMessage(USER_SWITCH_TIMEOUT_MSG,
+                            oldUserId, userId, uss), USER_SWITCH_TIMEOUT);
+                }
+
                 if (needStart) {
                     Intent intent = new Intent(Intent.ACTION_USER_STARTED);
                     intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY
@@ -16051,16 +16643,18 @@
                     }
                 }
 
-                boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss);
-                if (homeInFront) {
-                    startHomeActivityLocked(userId);
-                } else {
-                    mStackSupervisor.resumeTopActivitiesLocked();
+                if (foreground) {
+                    boolean homeInFront = mStackSupervisor.switchUserLocked(userId, uss);
+                    if (homeInFront) {
+                        startHomeActivityLocked(userId);
+                    } else {
+                        mStackSupervisor.resumeTopActivitiesLocked();
+                    }
+                    EventLogTags.writeAmSwitchUser(userId);
+                    getUserManagerLocked().userForeground(userId);
+                    sendUserSwitchBroadcastsLocked(oldUserId, userId);
                 }
 
-                EventLogTags.writeAmSwitchUser(userId);
-                getUserManagerLocked().userForeground(userId);
-                sendUserSwitchBroadcastsLocked(oldUserId, userId);
                 if (needStart) {
                     Intent intent = new Intent(Intent.ACTION_USER_STARTING);
                     intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
@@ -16206,6 +16800,34 @@
         }
     }
 
+    void scheduleStartProfilesLocked() {
+        if (!mHandler.hasMessages(START_PROFILES_MSG)) {
+            mHandler.sendMessageDelayed(mHandler.obtainMessage(START_PROFILES_MSG),
+                    DateUtils.SECOND_IN_MILLIS);
+        }
+    }
+
+    void startProfilesLocked() {
+        if (DEBUG_MU) Slog.i(TAG_MU, "startProfilesLocked");
+        List<UserInfo> profiles = getUserManagerLocked().getProfiles(
+                mCurrentUserId, false /* enabledOnly */);
+        List<UserInfo> toStart = new ArrayList<UserInfo>(profiles.size());
+        for (UserInfo user : profiles) {
+            if ((user.flags & UserInfo.FLAG_INITIALIZED) == UserInfo.FLAG_INITIALIZED
+                    && user.id != mCurrentUserId) {
+                toStart.add(user);
+            }
+        }
+        final int n = toStart.size();
+        int i = 0;
+        for (; i < n && i < (MAX_RUNNING_USERS - 1); ++i) {
+            startUserInBackground(toStart.get(i).id);
+        }
+        if (i < n) {
+            Slog.w(TAG_MU, "More profiles than MAX_RUNNING_USERS");
+        }
+    }
+
     void finishUserSwitch(UserStartedState uss) {
         synchronized (this) {
             if (uss.mState == UserStartedState.STATE_BOOTING
@@ -16220,6 +16842,9 @@
                         android.Manifest.permission.RECEIVE_BOOT_COMPLETED, AppOpsManager.OP_NONE,
                         true, false, MY_PID, Process.SYSTEM_UID, userId);
             }
+
+            startProfilesLocked();
+
             int num = mUserLru.size();
             int i = 0;
             while (num > MAX_RUNNING_USERS && i < mUserLru.size()) {
@@ -16271,6 +16896,7 @@
     }
 
     private int stopUserLocked(final int userId, final IStopUserCallback callback) {
+        if (DEBUG_MU) Slog.i(TAG_MU, "stopUserLocked userId=" + userId);
         if (mCurrentUserId == userId) {
             return ActivityManager.USER_OP_IS_CURRENT;
         }
@@ -16333,6 +16959,7 @@
                             }
                             uss.mState = UserStartedState.STATE_SHUTDOWN;
                         }
+                        mSystemServiceManager.stopUser(userId);
                         broadcastIntentLocked(null, null, shutdownIntent,
                                 null, shutdownReceiver, 0, null, null, null, AppOpsManager.OP_NONE,
                                 true, false, MY_PID, Process.SYSTEM_UID, userId);
@@ -16382,7 +17009,12 @@
             }
         }
 
-        mStackSupervisor.removeUserLocked(userId);
+        if (stopped) {
+            mSystemServiceManager.cleanupUser(userId);
+            synchronized (this) {
+                mStackSupervisor.removeUserLocked(userId);
+            }
+        }
     }
 
     @Override
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 37ead27..7a44473 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -145,8 +145,12 @@
 
     private boolean inHistory;  // are we in the history stack?
     final ActivityStackSupervisor mStackSupervisor;
+    boolean mStartingWindowShown = false;
     ActivityContainer mInitialActivityContainer;
 
+    String activityLabel;
+    Bitmap activityIcon;
+
     void dump(PrintWriter pw, String prefix) {
         final long now = SystemClock.uptimeMillis();
         pw.print(prefix); pw.print("packageName="); pw.print(packageName);
@@ -211,14 +215,7 @@
             pw.print(prefix); pw.print("pendingOptions="); pw.println(pendingOptions);
         }
         if (uriPermissions != null) {
-            if (uriPermissions.readUriPermissions != null) {
-                pw.print(prefix); pw.print("readUriPermissions=");
-                        pw.println(uriPermissions.readUriPermissions);
-            }
-            if (uriPermissions.writeUriPermissions != null) {
-                pw.print(prefix); pw.print("writeUriPermissions=");
-                        pw.println(uriPermissions.writeUriPermissions);
-            }
+            uriPermissions.dump(pw, prefix);
         }
         pw.print(prefix); pw.print("launchFailed="); pw.print(launchFailed);
                 pw.print(" launchCount="); pw.print(launchCount);
@@ -518,13 +515,6 @@
         if (fullscreen == toOpaque) {
             return false;
         }
-        AttributeCache.Entry ent =
-                AttributeCache.instance().get(packageName, realTheme, styleable.Window, userId);
-        if (ent == null
-                || !ent.array.getBoolean(styleable.Window_windowIsTranslucent, false)
-                || ent.array.getBoolean(styleable.Window_windowIsFloating, false)) {
-            return false;
-        }
 
         // Keep track of the number of fullscreen activities in this task.
         task.numFullscreen += toOpaque ? +1 : -1;
@@ -597,7 +587,7 @@
             int requestCode, int resultCode,
             Intent resultData) {
         ActivityResult r = new ActivityResult(from, resultWho,
-        		requestCode, resultCode, resultData);
+                requestCode, resultCode, resultData);
         if (results == null) {
             results = new ArrayList<ResultInfo>();
         }
@@ -643,7 +633,7 @@
         // case we will deliver it if this is the current top activity on its
         // stack.
         boolean unsent = true;
-        if ((state == ActivityState.RESUMED || (service.mSleeping
+        if ((state == ActivityState.RESUMED || (service.isSleeping()
                         && task.stack.topRunningActivityLocked(null) == this))
                 && app != null && app.thread != null) {
             try {
@@ -684,7 +674,8 @@
     }
 
     void applyOptionsLocked() {
-        if (pendingOptions != null) {
+        if (pendingOptions != null
+                && pendingOptions.getAnimationType() != ActivityOptions.ANIM_SCENE_TRANSITION) {
             final int animationType = pendingOptions.getAnimationType();
             switch (animationType) {
                 case ActivityOptions.ANIM_CUSTOM:
@@ -727,6 +718,10 @@
         }
     }
 
+    ActivityOptions getOptionsForTargetActivityLocked() {
+        return pendingOptions != null ? pendingOptions.forTargetActivity() : null;
+    }
+
     void clearOptionsLocked() {
         if (pendingOptions != null) {
             pendingOptions.abort();
diff --git a/services/core/java/com/android/server/am/ActivityResult.java b/services/core/java/com/android/server/am/ActivityResult.java
index 6d5bdeb..395918e 100644
--- a/services/core/java/com/android/server/am/ActivityResult.java
+++ b/services/core/java/com/android/server/am/ActivityResult.java
@@ -18,7 +18,6 @@
 
 import android.app.ResultInfo;
 import android.content.Intent;
-import android.os.Bundle;
 
 /**
  * Pending result information to send back to an activity.
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index c6cd312..6769c9c 100755
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -38,6 +38,8 @@
 
 import static com.android.server.am.ActivityStackSupervisor.ActivityContainer.CONTAINER_STATE_HAS_SURFACE;
 
+import android.service.voice.IVoiceInteractionSession;
+import com.android.internal.app.IVoiceInteractor;
 import com.android.internal.os.BatteryStatsImpl;
 import com.android.server.Watchdog;
 import com.android.server.am.ActivityManagerService.ItemMatcher;
@@ -71,6 +73,7 @@
 import android.os.Message;
 import android.os.RemoteException;
 import android.os.SystemClock;
+import android.os.SystemProperties;
 import android.os.Trace;
 import android.os.UserHandle;
 import android.util.EventLog;
@@ -123,8 +126,7 @@
     // convertToTranslucent().
     static final long TRANSLUCENT_CONVERSION_TIMEOUT = 2000;
 
-    static final boolean SCREENSHOT_FORCE_565 = ActivityManager
-            .isLowRamDeviceStatic() ? true : false;
+    static final boolean SCREENSHOT_FORCE_565 = ActivityManager.isLowRamDeviceStatic();
 
     enum ActivityState {
         INITIALIZING,
@@ -342,8 +344,19 @@
         mCurrentUser = mService.mCurrentUserId;
     }
 
-    boolean okToShow(ActivityRecord r) {
-        return r.userId == mCurrentUser
+    /**
+     * Checks whether the userid is a profile of the current user.
+     */
+    private boolean isCurrentProfileLocked(int userId) {
+        if (userId == mCurrentUser) return true;
+        for (int i = 0; i < mService.mCurrentProfileIds.length; i++) {
+            if (mService.mCurrentProfileIds[i] == userId) return true;
+        }
+        return false;
+    }
+
+    boolean okToShowLocked(ActivityRecord r) {
+        return isCurrentProfileLocked(r.userId)
                 || (r.info.flags & ActivityInfo.FLAG_SHOW_ON_LOCK_SCREEN) != 0;
     }
 
@@ -363,7 +376,7 @@
             final ArrayList<ActivityRecord> activities = task.mActivities;
             for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
                 ActivityRecord r = activities.get(activityNdx);
-                if (!r.finishing && !r.delayedResume && r != notTop && okToShow(r)) {
+                if (!r.finishing && !r.delayedResume && r != notTop && okToShowLocked(r)) {
                     return r;
                 }
             }
@@ -390,7 +403,7 @@
             for (int i = activities.size() - 1; i >= 0; --i) {
                 final ActivityRecord r = activities.get(i);
                 // Note: the taskId check depends on real taskId fields being non-zero
-                if (!r.finishing && (token != r.appToken) && okToShow(r)) {
+                if (!r.finishing && (token != r.appToken) && okToShowLocked(r)) {
                     return r;
                 }
             }
@@ -403,8 +416,9 @@
         // be simplified once we stop storing tasks with empty mActivities lists.
         for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
             ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities;
-            for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
-                return activities.get(activityNdx);
+            final int topActivityNdx = activities.size() - 1;
+            if (topActivityNdx >= 0) {
+                return activities.get(topActivityNdx);
             }
         }
         return null;
@@ -482,10 +496,18 @@
             cls = new ComponentName(info.packageName, info.targetActivity);
         }
         final int userId = UserHandle.getUserId(info.applicationInfo.uid);
+        boolean isDocument = intent != null & intent.isDocument();
+        // If documentData is non-null then it must match the existing task data.
+        Uri documentData = isDocument ? intent.getData() : null;
 
         if (DEBUG_TASKS) Slog.d(TAG, "Looking for task of " + target + " in " + this);
         for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
             final TaskRecord task = mTaskHistory.get(taskNdx);
+            if (task.voiceSession != null) {
+                // We never match voice sessions; those always run independently.
+                if (DEBUG_TASKS) Slog.d(TAG, "Skipping " + task + ": voice session");
+                continue;
+            }
             if (task.userId != userId) {
                 // Looking for a different task.
                 if (DEBUG_TASKS) Slog.d(TAG, "Skipping " + task + ": different user");
@@ -498,23 +520,39 @@
                 continue;
             }
 
+            final Intent taskIntent = task.intent;
+            final Intent affinityIntent = task.affinityIntent;
+            final boolean taskIsDocument;
+            final Uri taskDocumentData;
+            if (taskIntent != null && taskIntent.isDocument()) {
+                taskIsDocument = true;
+                taskDocumentData = taskIntent.getData();
+            } else if (affinityIntent != null && affinityIntent.isDocument()) {
+                taskIsDocument = true;
+                taskDocumentData = affinityIntent.getData();
+            } else {
+                taskIsDocument = false;
+                taskDocumentData = null;
+            }
+
             if (DEBUG_TASKS) Slog.d(TAG, "Comparing existing cls="
-                    + r.task.intent.getComponent().flattenToShortString()
+                    + taskIntent.getComponent().flattenToShortString()
                     + "/aff=" + r.task.affinity + " to new cls="
                     + intent.getComponent().flattenToShortString() + "/aff=" + info.taskAffinity);
-            if (task.affinity != null) {
-                if (task.affinity.equals(info.taskAffinity)) {
+            if (!isDocument && !taskIsDocument && task.affinity != null) {
+                if (task.affinity.equals(target.taskAffinity)) {
                     if (DEBUG_TASKS) Slog.d(TAG, "Found matching affinity!");
                     return r;
                 }
-            } else if (task.intent != null && task.intent.getComponent().equals(cls)) {
+            } else if (taskIntent != null && taskIntent.getComponent().equals(cls) &&
+                    Objects.equals(documentData, taskDocumentData)) {
                 if (DEBUG_TASKS) Slog.d(TAG, "Found matching class!");
                 //dump();
                 if (DEBUG_TASKS) Slog.d(TAG, "For Intent " + intent + " bringing to top: "
                         + r.intent);
                 return r;
-            } else if (task.affinityIntent != null
-                    && task.affinityIntent.getComponent().equals(cls)) {
+            } else if (affinityIntent != null && affinityIntent.getComponent().equals(cls) &&
+                    Objects.equals(documentData, taskDocumentData)) {
                 if (DEBUG_TASKS) Slog.d(TAG, "Found matching class!");
                 //dump();
                 if (DEBUG_TASKS) Slog.d(TAG, "For Intent " + intent + " bringing to top: "
@@ -542,7 +580,7 @@
 
         for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
             TaskRecord task = mTaskHistory.get(taskNdx);
-            if (task.userId != mCurrentUser) {
+            if (!isCurrentProfileLocked(task.userId)) {
                 return null;
             }
             final ArrayList<ActivityRecord> activities = task.mActivities;
@@ -573,7 +611,7 @@
         int index = mTaskHistory.size();
         for (int i = 0; i < index; ) {
             TaskRecord task = mTaskHistory.get(i);
-            if (task.userId == userId) {
+            if (isCurrentProfileLocked(task.userId)) {
                 if (DEBUG_TASKS) Slog.d(TAG, "switchUserLocked: stack=" + getStackId() +
                         " moving " + task + " to top");
                 mTaskHistory.remove(i);
@@ -704,10 +742,19 @@
         int w = mThumbnailWidth;
         int h = mThumbnailHeight;
         if (w < 0) {
-            mThumbnailWidth = w =
-                res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_width);
-            mThumbnailHeight = h =
-                res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_height);
+            Configuration config = res.getConfiguration();
+            boolean useAlternateRecents = (config.smallestScreenWidthDp < 600);
+            if (useAlternateRecents) {
+                mThumbnailWidth = w =
+                   res.getDimensionPixelSize(com.android.internal.R.dimen.recents_thumbnail_width);
+                mThumbnailHeight = h =
+                   res.getDimensionPixelSize(com.android.internal.R.dimen.recents_thumbnail_height);
+            } else {
+                mThumbnailWidth = w =
+                    res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_width);
+                mThumbnailHeight = h =
+                    res.getDimensionPixelSize(com.android.internal.R.dimen.thumbnail_height);
+            }
         }
 
         if (w > 0) {
@@ -755,7 +802,7 @@
         prev.task.touchActiveTime();
         clearLaunchTime(prev);
         final ActivityRecord next = mStackSupervisor.topRunningActivityLocked();
-        if (next == null || next.task != prev.task) {
+        if (next == null || next.noDisplay || next.task != prev.task) {
             prev.updateThumbnail(screenshotActivities(prev), null);
         }
         stopFullyDrawnTraceIfNeeded();
@@ -1258,6 +1305,32 @@
         }
     }
 
+    /** If any activities below the top running one are in the INITIALIZING state and they have a
+     * starting window displayed then remove that starting window. It is possible that the activity
+     * in this state will never resumed in which case that starting window will be orphaned. */
+    void cancelInitializingActivities() {
+        final ActivityRecord topActivity = topRunningActivityLocked(null);
+        boolean aboveTop = true;
+        for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
+            final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities;
+            for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
+                final ActivityRecord r = activities.get(activityNdx);
+                if (aboveTop) {
+                    if (r == topActivity) {
+                        aboveTop = false;
+                    }
+                    continue;
+                }
+
+                if (r.state == ActivityState.INITIALIZING && r.mStartingWindowShown) {
+                    if (DEBUG_VISBILITY) Slog.w(TAG, "Found orphaned starting window " + r);
+                    r.mStartingWindowShown = false;
+                    mWindowManager.removeAppStartingWindow(r.appToken);
+                }
+            }
+        }
+    }
+
     /**
      * Ensure that the top activity in the stack is resumed.
      *
@@ -1282,6 +1355,8 @@
             return false;
         }
 
+        cancelInitializingActivities();
+
         // Find the first activity that is not finishing.
         ActivityRecord next = topRunningActivityLocked(null);
 
@@ -1435,7 +1510,7 @@
         // If the most recent activity was noHistory but was only stopped rather
         // than stopped+finished because the device went to sleep, we need to make
         // sure to finish it as we're making a new activity topmost.
-        if (mService.mSleeping && mLastNoHistoryActivity != null &&
+        if (mService.isSleeping() && mLastNoHistoryActivity != null &&
                 !mLastNoHistoryActivity.finishing) {
             if (DEBUG_STATES) Slog.d(TAG, "no-history finish of " + mLastNoHistoryActivity +
                     " on new resume");
@@ -1527,7 +1602,13 @@
                 mWindowManager.prepareAppTransition(AppTransition.TRANSIT_ACTIVITY_OPEN, false);
             }
         }
+
+        Bundle resumeAnimOptions = null;
         if (anim) {
+            ActivityOptions opts = next.getOptionsForTargetActivityLocked();
+            if (opts != null) {
+                resumeAnimOptions = opts.toBundle();
+            }
             next.applyOptionsLocked();
         } else {
             next.clearOptionsLocked();
@@ -1619,8 +1700,9 @@
                 mService.showAskCompatModeDialogLocked(next);
                 next.app.pendingUiClean = true;
                 next.app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_TOP);
+                next.clearOptionsLocked();
                 next.app.thread.scheduleResumeActivity(next.appToken, next.app.repProcState,
-                        mService.isNextTransitionForward());
+                        mService.isNextTransitionForward(), resumeAnimOptions);
 
                 mStackSupervisor.checkReadyForSleepLocked();
 
@@ -1705,10 +1787,10 @@
         mTaskHistory.remove(task);
         // Now put task at top.
         int stackNdx = mTaskHistory.size();
-        if (task.userId != mCurrentUser) {
+        if (!isCurrentProfileLocked(task.userId)) {
             // Put non-current user tasks below current user tasks.
             while (--stackNdx >= 0) {
-                if (mTaskHistory.get(stackNdx).userId != mCurrentUser) {
+                if (!isCurrentProfileLocked(mTaskHistory.get(stackNdx).userId)) {
                     break;
                 }
             }
@@ -1817,7 +1899,7 @@
                 // If the caller has requested that the target task be
                 // reset, then do so.
                 if ((r.intent.getFlags()
-                        &Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) {
+                        & Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED) != 0) {
                     resetTaskIfNeededLocked(r, r);
                     doShow = topRunningNonDelayedActivityLocked(null) == r;
                 }
@@ -1845,6 +1927,7 @@
                                 r.info.applicationInfo), r.nonLocalizedLabel,
                         r.labelRes, r.icon, r.logo, r.windowFlags,
                         prev != null ? prev.appToken : null, showStartingIcon);
+                r.mStartingWindowShown = true;
             }
         } else {
             // If this is the first activity, don't do any fancy animations,
@@ -1958,21 +2041,14 @@
                             + " out to bottom task " + bottom.task);
                 } else {
                     targetTask = createTaskRecord(mStackSupervisor.getNextTaskId(), target.info,
-                            null, false);
+                            null, null, null, false);
                     newThumbHolder = targetTask;
                     targetTask.affinityIntent = target.intent;
                     if (DEBUG_TASKS) Slog.v(TAG, "Start pushing activity " + target
                             + " out to new task " + target.task);
                 }
 
-                if (clearWhenTaskReset) {
-                    // This is the start of a new sub-task.
-                    if (target.thumbHolder == null) {
-                        target.thumbHolder = new ThumbnailHolder();
-                    }
-                } else {
-                    target.thumbHolder = newThumbHolder;
-                }
+                target.thumbHolder = newThumbHolder;
 
                 final int targetTaskId = targetTask.taskId;
                 mWindowManager.setAppGroupId(target.appToken, targetTaskId);
@@ -2253,7 +2329,10 @@
                     mStackSupervisor.moveHomeToTop();
                 }
             }
-            mService.setFocusedActivityLocked(mStackSupervisor.topRunningActivityLocked());
+            ActivityRecord top = mStackSupervisor.topRunningActivityLocked();
+            if (top != null) {
+                mService.setFocusedActivityLocked(top);
+            }
         }
     }
 
@@ -2262,7 +2341,7 @@
         if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_NO_HISTORY) != 0
                 || (r.info.flags&ActivityInfo.FLAG_NO_HISTORY) != 0) {
             if (!r.finishing) {
-                if (!mService.mSleeping) {
+                if (!mService.isSleeping()) {
                     if (DEBUG_STATES) {
                         Slog.d(TAG, "no-history finish of " + r);
                     }
@@ -2435,14 +2514,15 @@
         }
 
         r.makeFinishing();
+        final TaskRecord task = r.task;
         EventLog.writeEvent(EventLogTags.AM_FINISH_ACTIVITY,
                 r.userId, System.identityHashCode(r),
-                r.task.taskId, r.shortComponentName, reason);
-        final ArrayList<ActivityRecord> activities = r.task.mActivities;
+                task.taskId, r.shortComponentName, reason);
+        final ArrayList<ActivityRecord> activities = task.mActivities;
         final int index = activities.indexOf(r);
         if (index < (activities.size() - 1)) {
-            r.task.setFrontOfTask();
-            if ((r.intent.getFlags()&Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0) {
+            task.setFrontOfTask();
+            if ((r.intent.getFlags() & Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET) != 0) {
                 // If the caller asked that this activity (and all above it)
                 // be cleared when the task is reset, don't lose that information,
                 // but propagate it up to the next activity.
@@ -2481,6 +2561,9 @@
                 startPausingLocked(false, false);
             }
 
+            if (endTask) {
+                mStackSupervisor.endLockTaskModeIfTaskEnding(task);
+            }
         } else if (r.state != ActivityState.PAUSING) {
             // If the activity is PAUSING, we will complete the finish once
             // it is done pausing; else we can just directly finish it here.
@@ -2637,7 +2720,7 @@
                     ActivityInfo aInfo = AppGlobals.getPackageManager().getActivityInfo(
                             destIntent.getComponent(), 0, srec.userId);
                     int res = mStackSupervisor.startActivityLocked(srec.app.thread, destIntent,
-                            null, aInfo, parent.appToken, null,
+                            null, aInfo, null, null, parent.appToken, null,
                             0, -1, parent.launchedFromUid, parent.launchedFromPackage,
                             0, null, true, null, null);
                     foundParentInTask = res == ActivityManager.START_SUCCESS;
@@ -2666,9 +2749,7 @@
         if (mPausingActivity == r) {
             mPausingActivity = null;
         }
-        if (mService.mFocusedActivity == r) {
-            mService.mFocusedActivity = null;
-        }
+        mService.clearFocusedActivity(r);
 
         r.configDestroy = false;
         r.frozenBeforeDestroy = false;
@@ -3061,23 +3142,6 @@
         }
     }
 
-    final boolean findTaskToMoveToFrontLocked(int taskId, int flags, Bundle options) {
-        final TaskRecord task = taskForIdLocked(taskId);
-        if (task != null) {
-            if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) {
-                mStackSupervisor.mUserLeaving = true;
-            }
-            if ((flags & ActivityManager.MOVE_TASK_WITH_HOME) != 0) {
-                // Caller wants the home activity moved with it.  To accomplish this,
-                // we'll just indicate that this task returns to the home task.
-                task.mOnTopOfHome = true;
-            }
-            moveTaskToFrontLocked(task, null, options);
-            return true;
-        }
-        return false;
-    }
-
     final void moveTaskToFrontLocked(TaskRecord tr, ActivityRecord reason, Bundle options) {
         if (DEBUG_SWITCH) Slog.v(TAG, "moveTaskToFront: " + tr);
 
@@ -3135,7 +3199,15 @@
      * @return Returns true if the move completed, false if not.
      */
     final boolean moveTaskToBackLocked(int taskId, ActivityRecord reason) {
-        Slog.i(TAG, "moveTaskToBack: " + taskId);
+        final TaskRecord tr = taskForIdLocked(taskId);
+        if (tr == null) {
+            Slog.i(TAG, "moveTaskToBack: bad taskId=" + taskId);
+            return false;
+        }
+
+        Slog.i(TAG, "moveTaskToBack: " + tr);
+
+        mStackSupervisor.endLockTaskModeIfTaskEnding(tr);
 
         // If we have a watcher, preflight the move before committing to it.  First check
         // for *other* available tasks, but if none are available, then try again allowing the
@@ -3163,11 +3235,6 @@
         if (DEBUG_TRANSITION) Slog.v(TAG,
                 "Prepare to back transition: task=" + taskId);
 
-        final TaskRecord tr = taskForIdLocked(taskId);
-        if (tr == null) {
-            return false;
-        }
-
         mTaskHistory.remove(tr);
         mTaskHistory.add(0, tr);
 
@@ -3651,6 +3718,7 @@
     }
 
     void removeTask(TaskRecord task) {
+        mStackSupervisor.endLockTaskModeIfTaskEnding(task);
         mWindowManager.removeTask(task.taskId);
         final ActivityRecord r = mResumedActivity;
         if (r != null && r.task == task) {
@@ -3663,6 +3731,11 @@
             mTaskHistory.get(taskNdx + 1).mOnTopOfHome = true;
         }
         mTaskHistory.remove(task);
+        if (task.voiceInteractor != null) {
+            // This task was a voice interaction, so it should not remain on the
+            // recent tasks list.
+            mService.mRecentTasks.remove(task);
+        }
 
         if (mTaskHistory.isEmpty()) {
             if (DEBUG_STACK) Slog.i(TAG, "removeTask: moving to back stack=" + this);
@@ -3676,8 +3749,10 @@
         }
     }
 
-    TaskRecord createTaskRecord(int taskId, ActivityInfo info, Intent intent, boolean toTop) {
-        TaskRecord task = new TaskRecord(taskId, info, intent);
+    TaskRecord createTaskRecord(int taskId, ActivityInfo info, Intent intent,
+            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
+            boolean toTop) {
+        TaskRecord task = new TaskRecord(taskId, info, intent, voiceSession, voiceInteractor);
         addTask(task, toTop);
         return task;
     }
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 28b1df5..3770a07 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -76,6 +76,7 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.service.voice.IVoiceInteractionSession;
 import android.util.EventLog;
 import android.util.Slog;
 import android.util.SparseArray;
@@ -86,6 +87,7 @@
 import android.view.InputEvent;
 import android.view.Surface;
 import com.android.internal.app.HeavyWeightSwitcherActivity;
+import com.android.internal.app.IVoiceInteractor;
 import com.android.internal.os.TransferPipe;
 import com.android.server.LocalServices;
 import com.android.server.am.ActivityManagerService.PendingActivityLaunch;
@@ -231,6 +233,10 @@
 
     InputManagerInternal mInputManagerInternal;
 
+    /** If non-null then the task specified remains in front and no other tasks may be started
+     * until the task exits or #stopLockTaskMode() is called. */
+    private TaskRecord mLockTaskModeTask;
+
     public ActivityStackSupervisor(ActivityManagerService service) {
         mService = service;
         PowerManager pm = (PowerManager)mService.mContext.getSystemService(Context.POWER_SERVICE);
@@ -523,7 +529,7 @@
     }
 
     void pauseChildStacks(ActivityRecord parent, boolean userLeaving, boolean uiSleeping) {
-		// TODO: Put all stacks in supervisor and iterate through them instead.
+        // TODO: Put all stacks in supervisor and iterate through them instead.
         for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
             ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
             for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
@@ -682,13 +688,14 @@
 
     void startHomeActivity(Intent intent, ActivityInfo aInfo) {
         moveHomeToTop();
-        startActivityLocked(null, intent, null, aInfo, null, null, 0, 0, 0, null, 0,
+        startActivityLocked(null, intent, null, aInfo, null, null, null, null, 0, 0, 0, null, 0,
                 null, false, null, null);
     }
 
     final int startActivityMayWait(IApplicationThread caller, int callingUid,
-            String callingPackage, Intent intent, String resolvedType, IBinder resultTo,
-            String resultWho, int requestCode, int startFlags, String profileFile,
+            String callingPackage, Intent intent, String resolvedType,
+            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
+            IBinder resultTo, String resultWho, int requestCode, int startFlags, String profileFile,
             ParcelFileDescriptor profileFd, WaitResult outResult, Configuration config,
             Bundle options, int userId, IActivityContainer iContainer) {
         // Refuse possible leaked file descriptors
@@ -797,7 +804,8 @@
                 }
             }
 
-            int res = startActivityLocked(caller, intent, resolvedType, aInfo, resultTo, resultWho,
+            int res = startActivityLocked(caller, intent, resolvedType, aInfo,
+                    voiceSession, voiceInteractor, resultTo, resultWho,
                     requestCode, callingPid, callingUid, callingPackage, startFlags, options,
                     componentSpecified, null, container);
 
@@ -913,7 +921,7 @@
                         theseOptions = null;
                     }
                     int res = startActivityLocked(caller, intent, resolvedTypes[i],
-                            aInfo, resultTo, null, -1, callingPid, callingUid, callingPackage,
+                            aInfo, null, null, resultTo, null, -1, callingPid, callingUid, callingPackage,
                             0, theseOptions, componentSpecified, outActivity, null);
                     if (res < 0) {
                         return res;
@@ -1022,13 +1030,16 @@
                     }
                 }
             }
+
             app.forceProcessStateUpTo(ActivityManager.PROCESS_STATE_TOP);
+            Bundle options = (r.pendingOptions == null) ? null : r.pendingOptions.toBundle();
+            r.clearOptionsLocked();
             app.thread.scheduleLaunchActivity(new Intent(r.intent), r.appToken,
                     System.identityHashCode(r), r.info,
                     new Configuration(mService.mConfiguration), r.compat,
-                    app.repProcState, r.icicle, results, newIntents, !andResume,
-                    mService.isNextTransitionForward(), profileFile, profileFd,
-                    profileAutoStop);
+                    r.task.voiceInteractor, app.repProcState, r.icicle, results, newIntents,
+                    !andResume, mService.isNextTransitionForward(), profileFile, profileFd,
+                    profileAutoStop, options);
 
             if ((app.info.flags&ApplicationInfo.FLAG_CANT_SAVE_STATE) != 0) {
                 // This may be a heavy-weight process!  Note that the package
@@ -1135,8 +1146,9 @@
     }
 
     final int startActivityLocked(IApplicationThread caller,
-            Intent intent, String resolvedType, ActivityInfo aInfo, IBinder resultTo,
-            String resultWho, int requestCode,
+            Intent intent, String resolvedType, ActivityInfo aInfo,
+            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
+            IBinder resultTo, String resultWho, int requestCode,
             int callingPid, int callingUid, String callingPackage, int startFlags, Bundle options,
             boolean componentSpecified, ActivityRecord[] outActivity, ActivityContainer container) {
         int err = ActivityManager.START_SUCCESS;
@@ -1179,7 +1191,7 @@
         }
         ActivityStack resultStack = resultRecord == null ? null : resultRecord.task.stack;
 
-        int launchFlags = intent.getFlags();
+        final int launchFlags = intent.getFlags();
 
         if ((launchFlags&Intent.FLAG_ACTIVITY_FORWARD_RESULT) != 0
                 && sourceRecord != null) {
@@ -1224,6 +1236,38 @@
             err = ActivityManager.START_CLASS_NOT_FOUND;
         }
 
+        if (err == ActivityManager.START_SUCCESS && sourceRecord != null
+                && sourceRecord.task.voiceSession != null) {
+            // If this activity is being launched as part of a voice session, we need
+            // to ensure that it is safe to do so.  If the upcoming activity will also
+            // be part of the voice session, we can only launch it if it has explicitly
+            // said it supports the VOICE category, or it is a part of the calling app.
+            if ((launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) == 0
+                    && sourceRecord.info.applicationInfo.uid != aInfo.applicationInfo.uid) {
+                try {
+                    if (!AppGlobals.getPackageManager().activitySupportsIntent(intent.getComponent(),
+                            intent, resolvedType)) {
+                        err = ActivityManager.START_NOT_VOICE_COMPATIBLE;
+                    }
+                } catch (RemoteException e) {
+                    err = ActivityManager.START_NOT_VOICE_COMPATIBLE;
+                }
+            }
+        }
+
+        if (err == ActivityManager.START_SUCCESS && voiceSession != null) {
+            // If the caller is starting a new voice session, just make sure the target
+            // is actually allowing it to run this way.
+            try {
+                if (!AppGlobals.getPackageManager().activitySupportsIntent(intent.getComponent(),
+                        intent, resolvedType)) {
+                    err = ActivityManager.START_NOT_VOICE_COMPATIBLE;
+                }
+            } catch (RemoteException e) {
+                err = ActivityManager.START_NOT_VOICE_COMPATIBLE;
+            }
+        }
+
         if (err != ActivityManager.START_SUCCESS) {
             if (resultRecord != null) {
                 resultStack.sendActivityResultLocked(-1,
@@ -1297,8 +1341,8 @@
         }
 
         final ActivityStack stack = getFocusedStack();
-        if (stack.mResumedActivity == null
-                || stack.mResumedActivity.info.applicationInfo.uid != callingUid) {
+        if (voiceSession == null && (stack.mResumedActivity == null
+                || stack.mResumedActivity.info.applicationInfo.uid != callingUid)) {
             if (!mService.checkAppSwitchAllowedLocked(callingPid, callingUid, "Activity start")) {
                 PendingActivityLaunch pal =
                         new PendingActivityLaunch(r, sourceRecord, startFlags, stack);
@@ -1322,7 +1366,8 @@
 
         mService.doPendingActivityLaunchesLocked(false);
 
-        err = startActivityUncheckedLocked(r, sourceRecord, startFlags, true, options);
+        err = startActivityUncheckedLocked(r, sourceRecord, voiceSession, voiceInteractor,
+                startFlags, true, options);
 
         if (allPausedActivitiesComplete()) {
             // If someone asked to have the keyguard dismissed on the next
@@ -1402,8 +1447,9 @@
     }
 
     final int startActivityUncheckedLocked(ActivityRecord r,
-            ActivityRecord sourceRecord, int startFlags, boolean doResume,
-            Bundle options) {
+            ActivityRecord sourceRecord,
+            IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags,
+            boolean doResume, Bundle options) {
         final Intent intent = r.intent;
         final int callingUid = r.launchedFromUid;
 
@@ -1438,14 +1484,20 @@
             }
         }
 
+        final boolean newDocument = intent.isDocument();
         if (sourceRecord == null) {
             // This activity is not being started from another...  in this
             // case we -always- start a new task.
-            if ((launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
+            if ((launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
                 Slog.w(TAG, "startActivity called from non-Activity context; forcing " +
                         "Intent.FLAG_ACTIVITY_NEW_TASK for: " + intent);
                 launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
             }
+        } else if (newDocument) {
+            if (r.launchMode != ActivityInfo.LAUNCH_MULTIPLE) {
+                Slog.w(TAG, "FLAG_ACTIVITY_NEW_DOCUMENT and launchMode != \"standard\"");
+                r.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
+            }
         } else if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
             // The original activity who is starting us is running as a single
             // instance...  this new activity it is starting must go on its
@@ -1468,7 +1520,7 @@
                 // so we don't want to blindly throw it in to that task.  Instead we will take
                 // the NEW_TASK flow and try to find a task for it. But save the task information
                 // so it can be used when creating the new task.
-                if ((launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
+                if ((launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) == 0) {
                     Slog.w(TAG, "startActivity called from finishing " + sourceRecord
                             + "; forcing " + "Intent.FLAG_ACTIVITY_NEW_TASK for: " + intent);
                     launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK;
@@ -1484,7 +1536,7 @@
             sourceStack = null;
         }
 
-        if (r.resultTo != null && (launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
+        if (r.resultTo != null && (launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
             // For whatever reason this activity is being launched into a new
             // task...  yet the caller has requested a result back.  Well, that
             // is pretty messed up, so instead immediately send back a cancel
@@ -1501,8 +1553,8 @@
         boolean movedHome = false;
         TaskRecord reuseTask = null;
         ActivityStack targetStack;
-        if (((launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0 &&
-                (launchFlags&Intent.FLAG_ACTIVITY_MULTIPLE_TASK) == 0)
+        if (((launchFlags & Intent.FLAG_ACTIVITY_NEW_TASK) != 0 &&
+                (launchFlags & Intent.FLAG_ACTIVITY_MULTIPLE_TASK) == 0)
                 || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK
                 || r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE) {
             // If bring to front is requested, and no result is requested, and
@@ -1517,6 +1569,10 @@
                         ? findTaskLocked(r)
                         : findActivityLocked(intent, r.info);
                 if (intentActivity != null) {
+                    if (isLockTaskModeViolation(intentActivity.task)) {
+                        Slog.e(TAG, "moveTaskToFront: Attempt to violate Lock Task Mode");
+                        return ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION;
+                    }
                     if (r.task == null) {
                         r.task = intentActivity.task;
                     }
@@ -1687,7 +1743,7 @@
             if (top != null && r.resultTo == null) {
                 if (top.realActivity.equals(r.realActivity) && top.userId == r.userId) {
                     if (top.app != null && top.app.thread != null) {
-                        if ((launchFlags&Intent.FLAG_ACTIVITY_SINGLE_TOP) != 0
+                        if ((launchFlags & Intent.FLAG_ACTIVITY_SINGLE_TOP) != 0
                             || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TOP
                             || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK) {
                             ActivityStack.logStartActivity(EventLogTags.AM_NEW_INTENT, top,
@@ -1727,13 +1783,17 @@
         // Should this be considered a new task?
         if (r.resultTo == null && !addingToTask
                 && (launchFlags&Intent.FLAG_ACTIVITY_NEW_TASK) != 0) {
+            if (isLockTaskModeViolation(reuseTask)) {
+                Slog.e(TAG, "Attempted Lock Task Mode violation r=" + r);
+                return ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION;
+            }
             targetStack = adjustStackFocus(r);
             targetStack.moveToFront();
             if (reuseTask == null) {
                 r.setTask(targetStack.createTaskRecord(getNextTaskId(),
                         newTaskInfo != null ? newTaskInfo : r.info,
                         newTaskIntent != null ? newTaskIntent : intent,
-                        true), null, true);
+                        voiceSession, voiceInteractor, true), null, true);
                 if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r + " in new task " +
                         r.task);
             } else {
@@ -1751,6 +1811,10 @@
             }
         } else if (sourceRecord != null) {
             TaskRecord sourceTask = sourceRecord.task;
+            if (isLockTaskModeViolation(sourceTask)) {
+                Slog.e(TAG, "Attempted Lock Task Mode violation r=" + r);
+                return ActivityManager.START_RETURN_LOCK_TASK_MODE_VIOLATION;
+            }
             targetStack = sourceTask.stack;
             targetStack.moveToFront();
             mWindowManager.moveTaskToTop(sourceTask.taskId);
@@ -1807,7 +1871,7 @@
             targetStack.moveToFront();
             ActivityRecord prev = targetStack.topActivity();
             r.setTask(prev != null ? prev.task
-                    : targetStack.createTaskRecord(getNextTaskId(), r.info, intent, true),
+                    : targetStack.createTaskRecord(getNextTaskId(), r.info, intent, null, null, true),
                     null, true);
             mWindowManager.moveTaskToTop(r.task.taskId);
             if (DEBUG_TASKS) Slog.v(TAG, "Starting new activity " + r
@@ -2112,17 +2176,18 @@
         }
     }
 
-    void findTaskToMoveToFrontLocked(int taskId, int flags, Bundle options) {
-        for (int displayNdx = mActivityDisplays.size() - 1; displayNdx >= 0; --displayNdx) {
-            final ArrayList<ActivityStack> stacks = mActivityDisplays.valueAt(displayNdx).mStacks;
-            for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
-                if (stacks.get(stackNdx).findTaskToMoveToFrontLocked(taskId, flags, options)) {
-                    if (DEBUG_STACK) Slog.d(TAG, "findTaskToMoveToFront: moved to front of stack="
-                            + stacks.get(stackNdx));
-                    return;
-                }
-            }
+    void findTaskToMoveToFrontLocked(TaskRecord task, int flags, Bundle options) {
+        if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) {
+            mUserLeaving = true;
         }
+        if ((flags & ActivityManager.MOVE_TASK_WITH_HOME) != 0) {
+            // Caller wants the home activity moved with it.  To accomplish this,
+            // we'll just indicate that this task returns to the home task.
+            task.mOnTopOfHome = true;
+        }
+        task.stack.moveTaskToFrontLocked(task, null, options);
+        if (DEBUG_STACK) Slog.d(TAG, "findTaskToMoveToFront: moved to front of stack="
+                + task.stack);
     }
 
     ActivityStack getStack(int stackId) {
@@ -2274,6 +2339,7 @@
             }
         }
         checkReadyForSleepLocked();
+        setLockTaskModeLocked(null);
     }
 
     boolean shutdownLocked(int timeout) {
@@ -2455,7 +2521,10 @@
             for (int stackNdx = stacks.size() - 1; stackNdx >= 0; --stackNdx) {
                 final ActivityStack stack = stacks.get(stackNdx);
                 stack.switchUserLocked(userId);
-                mWindowManager.moveTaskToTop(stack.topTask().taskId);
+                TaskRecord task = stack.topTask();
+                if (task != null) {
+                    mWindowManager.moveTaskToTop(task.taskId);
+                }
             }
         }
 
@@ -2466,7 +2535,10 @@
         final boolean homeInFront = stack.isHomeStack();
         if (stack.isOnHomeDisplay()) {
             moveHomeStack(homeInFront);
-            mWindowManager.moveTaskToTop(stack.topTask().taskId);
+            TaskRecord task = stack.topTask();
+            if (task != null) {
+                mWindowManager.moveTaskToTop(task.taskId);
+            }
         } else {
             // Stack was moved to another display while user was swapped out.
             resumeHomeActivity(null);
@@ -2852,6 +2924,35 @@
         return list;
     }
 
+    void setLockTaskModeLocked(TaskRecord task) {
+        if (task == null) {
+            // Take out of lock task mode.
+            mLockTaskModeTask = null;
+            return;
+        }
+        if (isLockTaskModeViolation(task)) {
+            Slog.e(TAG, "setLockTaskMode: Attempt to start a second Lock Task Mode task.");
+            return;
+        }
+        mLockTaskModeTask = task;
+        findTaskToMoveToFrontLocked(task, 0, null);
+        resumeTopActivitiesLocked();
+    }
+
+    boolean isLockTaskModeViolation(TaskRecord task) {
+        return mLockTaskModeTask != null && mLockTaskModeTask != task;
+    }
+
+    void endLockTaskModeIfTaskEnding(TaskRecord task) {
+        if (mLockTaskModeTask != null && mLockTaskModeTask == task) {
+            mLockTaskModeTask = null;
+        }
+    }
+
+    boolean isInLockTaskMode() {
+        return mLockTaskModeTask != null;
+    }
+
     private final class ActivityStackSupervisorHandler extends Handler {
 
         public ActivityStackSupervisorHandler(Looper looper) {
@@ -3041,7 +3142,7 @@
                     && "content".equals(intent.getData().getScheme())) {
                 mimeType = mService.getProviderMimeType(intent.getData(), userId);
             }
-            return startActivityMayWait(null, -1, null, intent, mimeType, null, null, 0, 0, null,
+            return startActivityMayWait(null, -1, null, intent, mimeType, null, null, null, null, 0, 0, null,
                     null, null, null, null, userId, this);
         }
 
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index ff06513..83e8a4b 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -29,8 +29,10 @@
 import android.os.Parcel;
 import android.os.Process;
 import android.os.ServiceManager;
+import android.os.SystemClock;
 import android.os.UserHandle;
 import android.os.WorkSource;
+import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.SignalStrength;
 import android.telephony.TelephonyManager;
 import android.util.Slog;
@@ -48,6 +50,8 @@
  * battery life.
  */
 public final class BatteryStatsService extends IBatteryStats.Stub {
+    static final String TAG = "BatteryStatsService";
+
     static IBatteryStats sService;
     
     final BatteryStatsImpl mStats;
@@ -66,7 +70,8 @@
         mStats.setRadioScanningTimeout(mContext.getResources().getInteger(
                 com.android.internal.R.integer.config_radioScanningTimeout)
                 * 1000L);
-    }
+        (new WakeupReasonThread()).start();
+     }
     
     public void shutdown() {
         Slog.w("BatteryStats", "Writing battery stats before shutdown...");
@@ -105,24 +110,74 @@
         return data;
     }
     
-    public void noteStartWakelock(int uid, int pid, String name, int type) {
+    public long computeBatteryTimeRemaining() {
+        synchronized (mStats) {
+            long time = mStats.computeBatteryTimeRemaining(SystemClock.elapsedRealtime());
+            return time >= 0 ? (time/1000) : time;
+        }
+    }
+
+    public long computeChargeTimeRemaining() {
+        synchronized (mStats) {
+            long time = mStats.computeChargeTimeRemaining(SystemClock.elapsedRealtime());
+            return time >= 0 ? (time/1000) : time;
+        }
+    }
+
+    public void addIsolatedUid(int isolatedUid, int appUid) {
         enforceCallingPermission();
         synchronized (mStats) {
-            mStats.noteStartWakeLocked(uid, pid, name, type);
+            mStats.addIsolatedUidLocked(isolatedUid, appUid);
+        }
+    }
+
+    public void removeIsolatedUid(int isolatedUid, int appUid) {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.removeIsolatedUidLocked(isolatedUid, appUid);
+        }
+    }
+
+    public void noteEvent(int code, String name, int uid) {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.noteEventLocked(code, name, uid);
+        }
+    }
+
+    public void noteStartWakelock(int uid, int pid, String name, String historyName, int type,
+            boolean unimportantForLogging) {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.noteStartWakeLocked(uid, pid, name, historyName, type, unimportantForLogging,
+                    SystemClock.elapsedRealtime(), SystemClock.uptimeMillis());
         }
     }
 
     public void noteStopWakelock(int uid, int pid, String name, int type) {
         enforceCallingPermission();
         synchronized (mStats) {
-            mStats.noteStopWakeLocked(uid, pid, name, type);
+            mStats.noteStopWakeLocked(uid, pid, name, type, SystemClock.elapsedRealtime(),
+                    SystemClock.uptimeMillis());
         }
     }
 
-    public void noteStartWakelockFromSource(WorkSource ws, int pid, String name, int type) {
+    public void noteStartWakelockFromSource(WorkSource ws, int pid, String name,
+            String historyName, int type, boolean unimportantForLogging) {
         enforceCallingPermission();
         synchronized (mStats) {
-            mStats.noteStartWakeFromSourceLocked(ws, pid, name, type);
+            mStats.noteStartWakeFromSourceLocked(ws, pid, name, historyName,
+                    type, unimportantForLogging);
+        }
+    }
+
+    public void noteChangeWakelockFromSource(WorkSource ws, int pid, String name, int type,
+            WorkSource newWs, int newPid, String newName,
+            String newHistoryName, int newType, boolean newUnimportantForLogging) {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.noteChangeWakelockFromSourceLocked(ws, pid, name, type,
+                    newWs, newPid, newName, newHistoryName, newType, newUnimportantForLogging);
         }
     }
 
@@ -207,7 +262,14 @@
             mStats.noteUserActivityLocked(uid, event);
         }
     }
-    
+
+    public void noteMobileRadioPowerState(int powerState, long timestampNs) {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.noteMobileRadioPowerState(powerState, timestampNs);
+        }
+    }
+
     public void notePhoneOn() {
         enforceCallingPermission();
         synchronized (mStats) {
@@ -307,6 +369,13 @@
         }
     }
 
+    public void noteWifiState(int wifiState, String accessPoint) {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.noteWifiStateLocked(wifiState, accessPoint);
+        }
+    }
+
     public void noteBluetoothOn() {
         enforceCallingPermission();
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
@@ -350,6 +419,13 @@
         }
     }
     
+    public void noteBluetoothState(int bluetoothState) {
+        enforceCallingPermission();
+        synchronized (mStats) {
+            mStats.noteBluetoothStateLocked(bluetoothState);
+        }
+    }
+
     public void noteFullWifiLockAcquired(int uid) {
         enforceCallingPermission();
         synchronized (mStats) {
@@ -493,12 +569,48 @@
         mContext.enforcePermission(android.Manifest.permission.UPDATE_DEVICE_STATS,
                 Binder.getCallingPid(), Binder.getCallingUid(), null);
     }
-    
+
+    final class WakeupReasonThread extends Thread {
+        final int[] mIrqs = new int[32];
+        final String[] mReasons = new String[32];
+
+        WakeupReasonThread() {
+            super("BatteryStats_wakeupReason");
+        }
+
+        public void run() {
+            Process.setThreadPriority(Process.THREAD_PRIORITY_FOREGROUND);
+
+            try {
+                int num;
+                while ((num=nativeWaitWakeup(mIrqs, mReasons)) >= 0) {
+                    synchronized (mStats) {
+                        if (num > 0) {
+                            for (int i=0; i<num; i++) {
+                                mStats.noteWakeupReasonLocked(mReasons[i]);
+                            }
+                        } else {
+                            mStats.noteWakeupReasonLocked("unknown");
+                        }
+                    }
+                }
+            } catch (RuntimeException e) {
+                Slog.e(TAG, "Failure reading wakeup reasons", e);
+            }
+        }
+    }
+
+    private static native int nativeWaitWakeup(int[] outIrqs, String[] outReasons);
+
     private void dumpHelp(PrintWriter pw) {
         pw.println("Battery stats (batterystats) dump options:");
-        pw.println("  [--checkin] [-c] [--unplugged] [--reset] [--write] [-h] [<package.name>]");
+        pw.println("  [--checkin] [--history] [--history-start] [--unplugged] [--charged] [-c]");
+        pw.println("  [--reset] [--write] [-h] [<package.name>]");
         pw.println("  --checkin: format output for a checkin report.");
+        pw.println("  --history: show only history data.");
+        pw.println("  --history-start <num>: show only history data starting at given time offset.");
         pw.println("  --unplugged: only output data since last unplugged.");
+        pw.println("  --charged: only output data since last charged.");
         pw.println("  --reset: reset the stats, clearing all current data.");
         pw.println("  --write: force write current collected stats to disk.");
         pw.println("  -h: print this help text.");
@@ -515,23 +627,37 @@
             return;
         }
 
+        int flags = 0;
         boolean isCheckin = false;
-        boolean includeHistory = false;
-        boolean isUnpluggedOnly = false;
         boolean noOutput = false;
+        long historyStart = -1;
         int reqUid = -1;
         if (args != null) {
-            for (String arg : args) {
+            for (int i=0; i<args.length; i++) {
+                String arg = args[i];
                 if ("--checkin".equals(arg)) {
                     isCheckin = true;
+                } else if ("--history".equals(arg)) {
+                    flags |= BatteryStats.DUMP_HISTORY_ONLY;
+                } else if ("--history-start".equals(arg)) {
+                    flags |= BatteryStats.DUMP_HISTORY_ONLY;
+                    i++;
+                    if (i >= args.length) {
+                        pw.println("Missing time argument for --history-since");
+                        dumpHelp(pw);
+                        return;
+                    }
+                    historyStart = Long.parseLong(args[i]);
                 } else if ("-c".equals(arg)) {
                     isCheckin = true;
-                    includeHistory = true;
+                    flags |= BatteryStats.DUMP_INCLUDE_HISTORY;
                 } else if ("--unplugged".equals(arg)) {
-                    isUnpluggedOnly = true;
+                    flags |= BatteryStats.DUMP_UNPLUGGED_ONLY;
+                } else if ("--charged".equals(arg)) {
+                    flags |= BatteryStats.DUMP_CHARGED_ONLY;
                 } else if ("--reset".equals(arg)) {
                     synchronized (mStats) {
-                        mStats.resetAllStatsLocked();
+                        mStats.resetAllStatsCmdLocked();
                         pw.println("Battery stats reset.");
                         noOutput = true;
                     }
@@ -545,7 +671,7 @@
                     dumpHelp(pw);
                     return;
                 } else if ("-a".equals(arg)) {
-                    // fall through
+                    flags |= BatteryStats.DUMP_VERBOSE;
                 } else if (arg.length() > 0 && arg.charAt(0) == '-'){
                     pw.println("Unknown option: " + arg);
                     dumpHelp(pw);
@@ -569,11 +695,11 @@
         if (isCheckin) {
             List<ApplicationInfo> apps = mContext.getPackageManager().getInstalledApplications(0);
             synchronized (mStats) {
-                mStats.dumpCheckinLocked(pw, apps, isUnpluggedOnly, includeHistory);
+                mStats.dumpCheckinLocked(mContext, pw, apps, flags, historyStart);
             }
         } else {
             synchronized (mStats) {
-                mStats.dumpLocked(pw, isUnpluggedOnly, reqUid);
+                mStats.dumpLocked(mContext, pw, flags, reqUid, historyStart);
             }
         }
     }
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index aef9e5c..9d6481a 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -27,7 +27,6 @@
 import android.content.IIntentReceiver;
 import android.content.Intent;
 import android.content.pm.ActivityInfo;
-import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.os.Bundle;
@@ -504,7 +503,7 @@
                     // are already core system stuff so don't matter for this.
                     r.curApp = filter.receiverList.app;
                     filter.receiverList.app.curReceiver = r;
-                    mService.updateOomAdjLocked(r.curApp, true);
+                    mService.updateOomAdjLocked(r.curApp);
                 }
             }
             try {
diff --git a/services/core/java/com/android/server/am/ContentProviderRecord.java b/services/core/java/com/android/server/am/ContentProviderRecord.java
index 646b7d2..ff22764 100644
--- a/services/core/java/com/android/server/am/ContentProviderRecord.java
+++ b/services/core/java/com/android/server/am/ContentProviderRecord.java
@@ -31,7 +31,6 @@
 import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.HashSet;
 
 final class ContentProviderRecord {
     final ActivityManagerService service;
diff --git a/services/core/java/com/android/server/am/IntentBindRecord.java b/services/core/java/com/android/server/am/IntentBindRecord.java
index 21cf266..ba6010a 100644
--- a/services/core/java/com/android/server/am/IntentBindRecord.java
+++ b/services/core/java/com/android/server/am/IntentBindRecord.java
@@ -22,8 +22,6 @@
 import android.util.ArrayMap;
 
 import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.Iterator;
 
 /**
  * A particular Intent that has been bound to a Service.
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index 00fa216..98999e9 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -41,6 +41,8 @@
     boolean canceled = false;
 
     String stringName;
+    String lastTagPrefix;
+    String lastTag;
     
     final static class Key {
         final int type;
diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java
index f5920c8..755a23722 100644
--- a/services/core/java/com/android/server/am/ProcessList.java
+++ b/services/core/java/com/android/server/am/ProcessList.java
@@ -16,7 +16,6 @@
 
 package com.android.server.am;
 
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.ByteBuffer;
diff --git a/services/core/java/com/android/server/am/ProcessRecord.java b/services/core/java/com/android/server/am/ProcessRecord.java
index 217a8d61..8d7d300 100644
--- a/services/core/java/com/android/server/am/ProcessRecord.java
+++ b/services/core/java/com/android/server/am/ProcessRecord.java
@@ -59,6 +59,7 @@
                                 // 'persistent' is true (in which case we
                                 // are in the process of launching the app)
     ProcessStats.ProcessState baseProcessTracker;
+    BatteryStatsImpl.Uid.Proc curProcBatteryStats;
     int pid;                    // The process of this application; 0 if none
     boolean starting;           // True if the process is being started
     long lastActivityTime;      // For managing the LRU list
@@ -76,7 +77,6 @@
     int curSchedGroup;          // Currently desired scheduling class
     int setSchedGroup;          // Last set to background scheduling class
     int trimMemoryLevel;        // Last selected memory trimming level
-    int memImportance;          // Importance constant computed from curAdj
     int curProcState = -1;      // Currently computed process state: ActivityManager.PROCESS_STATE_*
     int repProcState = -1;      // Last reported process state
     int setProcState = -1;      // Last set process state in process tracker
@@ -90,10 +90,12 @@
     boolean hasStartedServices; // Are there any started services running in this process?
     boolean foregroundServices; // Running any services that are foreground?
     boolean foregroundActivities; // Running any activities that are foreground?
+    boolean repForegroundActivities; // Last reported foreground activities.
     boolean systemNoUi;         // This is a system process, but not currently showing UI.
     boolean hasShownUi;         // Has UI been shown in this process since it was started?
     boolean pendingUiClean;     // Want to clean up resources from showing UI?
     boolean hasAboveClient;     // Bound using BIND_ABOVE_CLIENT, so want to be lower
+    boolean treatLikeActivity;  // Bound using BIND_TREAT_LIKE_ACTIVITY
     boolean bad;                // True if disabled in the bad process list
     boolean killedByAm;         // True when proc has been killed by activity manager, not for RAM
     boolean procStateChanged;   // Keep track of whether we changed 'setAdj'.
@@ -250,10 +252,11 @@
                 pw.print(" lastStateTime=");
                 TimeUtils.formatDuration(lastStateTime, now, pw);
                 pw.println();
-        if (hasShownUi || pendingUiClean || hasAboveClient) {
+        if (hasShownUi || pendingUiClean || hasAboveClient || treatLikeActivity) {
             pw.print(prefix); pw.print("hasShownUi="); pw.print(hasShownUi);
                     pw.print(" pendingUiClean="); pw.print(pendingUiClean);
-                    pw.print(" hasAboveClient="); pw.println(hasAboveClient);
+                    pw.print(" hasAboveClient="); pw.print(hasAboveClient);
+                    pw.print(" treatLikeActivity="); pw.println(treatLikeActivity);
         }
         if (setIsForeground || foregroundServices || forcingToForeground != null) {
             pw.print(prefix); pw.print("setIsForeground="); pw.print(setIsForeground);
@@ -264,9 +267,10 @@
             pw.print(prefix); pw.print("persistent="); pw.print(persistent);
                     pw.print(" removed="); pw.println(removed);
         }
-        if (hasClientActivities || foregroundActivities) {
+        if (hasClientActivities || foregroundActivities || repForegroundActivities) {
             pw.print(prefix); pw.print("hasClientActivities="); pw.print(hasClientActivities);
-                    pw.print(" foregroundActivities="); pw.println(foregroundActivities);
+                    pw.print(" foregroundActivities="); pw.print(foregroundActivities);
+                    pw.print(" (rep="); pw.print(repForegroundActivities); pw.println(")");
         }
         if (hasStartedServices) {
             pw.print(prefix); pw.print("hasStartedServices="); pw.println(hasStartedServices);
@@ -391,14 +395,15 @@
                 origBase.makeInactive();
             }
             baseProcessTracker = tracker.getProcessStateLocked(info.packageName, info.uid,
-                    processName);
+                    info.versionCode, processName);
             baseProcessTracker.makeActive();
             for (int i=0; i<pkgList.size(); i++) {
                 ProcessStats.ProcessState ps = pkgList.valueAt(i);
                 if (ps != null && ps != origBase) {
                     ps.makeInactive();
                 }
-                ps = tracker.getProcessStateLocked(pkgList.keyAt(i), info.uid, processName);
+                ps = tracker.getProcessStateLocked(pkgList.keyAt(i), info.uid,
+                        info.versionCode, processName);
                 if (ps != baseProcessTracker) {
                     ps.makeActive();
                 }
@@ -571,7 +576,7 @@
         if (!pkgList.containsKey(pkg)) {
             if (baseProcessTracker != null) {
                 ProcessStats.ProcessState state = tracker.getProcessStateLocked(
-                        pkg, info.uid, processName);
+                        pkg, info.uid, info.versionCode, processName);
                 pkgList.put(pkg, state);
                 if (state != baseProcessTracker) {
                     state.makeActive();
@@ -618,7 +623,7 @@
                 }
                 pkgList.clear();
                 ProcessStats.ProcessState ps = tracker.getProcessStateLocked(
-                        info.packageName, info.uid, processName);
+                        info.packageName, info.uid, info.versionCode, processName);
                 pkgList.put(info.packageName, ps);
                 if (ps != baseProcessTracker) {
                     ps.makeActive();
diff --git a/services/core/java/com/android/server/am/ProcessStatsService.java b/services/core/java/com/android/server/am/ProcessStatsService.java
index e05fcda..14f3ef9 100644
--- a/services/core/java/com/android/server/am/ProcessStatsService.java
+++ b/services/core/java/com/android/server/am/ProcessStatsService.java
@@ -16,8 +16,6 @@
 
 package com.android.server.am;
 
-import android.app.AppGlobals;
-import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.os.Binder;
 import android.os.Parcel;
@@ -25,7 +23,6 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.SystemProperties;
-import android.os.UserHandle;
 import android.util.ArrayMap;
 import android.util.AtomicFile;
 import android.util.Slog;
@@ -111,13 +108,14 @@
     }
 
     public ProcessStats.ProcessState getProcessStateLocked(String packageName,
-            int uid, String processName) {
-        return mProcessStats.getProcessStateLocked(packageName, uid, processName);
+            int uid, int versionCode, String processName) {
+        return mProcessStats.getProcessStateLocked(packageName, uid, versionCode, processName);
     }
 
     public ProcessStats.ServiceState getServiceStateLocked(String packageName, int uid,
-            String processName, String className) {
-        return mProcessStats.getServiceStateLocked(packageName, uid, processName, className);
+            int versionCode, String processName, String className) {
+        return mProcessStats.getServiceStateLocked(packageName, uid, versionCode, processName,
+                className);
     }
 
     public boolean isMemFactorLowered() {
@@ -137,25 +135,29 @@
             }
             mProcessStats.mMemFactor = memFactor;
             mProcessStats.mStartTime = now;
-            ArrayMap<String, SparseArray<ProcessStats.PackageState>> pmap
+            final ArrayMap<String, SparseArray<SparseArray<ProcessStats.PackageState>>> pmap
                     = mProcessStats.mPackages.getMap();
-            for (int i=0; i<pmap.size(); i++) {
-                SparseArray<ProcessStats.PackageState> uids = pmap.valueAt(i);
-                for (int j=0; j<uids.size(); j++) {
-                    ProcessStats.PackageState pkg = uids.valueAt(j);
-                    ArrayMap<String, ProcessStats.ServiceState> services = pkg.mServices;
-                    for (int k=0; k<services.size(); k++) {
-                        ProcessStats.ServiceState service = services.valueAt(k);
-                        if (service.isInUse()) {
-                            if (service.mStartedState != ProcessStats.STATE_NOTHING) {
-                                service.setStarted(true, memFactor, now);
+            for (int ipkg=pmap.size()-1; ipkg>=0; ipkg--) {
+                final SparseArray<SparseArray<ProcessStats.PackageState>> uids = pmap.valueAt(ipkg);
+                for (int iuid=uids.size()-1; iuid>=0; iuid--) {
+                    final SparseArray<ProcessStats.PackageState> vers = uids.valueAt(iuid);
+                    for (int iver=vers.size()-1; iver>=0; iver--) {
+                        final ProcessStats.PackageState pkg = vers.valueAt(iver);
+                        final ArrayMap<String, ProcessStats.ServiceState> services = pkg.mServices;
+                        for (int isvc=services.size()-1; isvc>=0; isvc--) {
+                            final ProcessStats.ServiceState service = services.valueAt(isvc);
+                            if (service.isInUse()) {
+                                if (service.mStartedState != ProcessStats.STATE_NOTHING) {
+                                    service.setStarted(true, memFactor, now);
+                                }
+                                if (service.mBoundState != ProcessStats.STATE_NOTHING) {
+                                    service.setBound(true, memFactor, now);
+                                }
+                                if (service.mExecState != ProcessStats.STATE_NOTHING) {
+                                    service.setExecuting(true, memFactor, now);
+                                }
                             }
-                            if (service.mBoundState != ProcessStats.STATE_NOTHING) {
-                                service.setBound(true, memFactor, now);
-                            }
-                            if (service.mExecState != ProcessStats.STATE_NOTHING) {
-                                service.setExecuting(true, memFactor, now);
-                            }
+
                         }
                     }
                 }
@@ -294,25 +296,32 @@
                             Slog.w(TAG, "  Uid " + uids.keyAt(iu) + ": " + uids.valueAt(iu));
                         }
                     }
-                    ArrayMap<String, SparseArray<ProcessStats.PackageState>> pkgMap
+                    ArrayMap<String, SparseArray<SparseArray<ProcessStats.PackageState>>> pkgMap
                             = stats.mPackages.getMap();
                     final int NPKG = pkgMap.size();
                     for (int ip=0; ip<NPKG; ip++) {
                         Slog.w(TAG, "Package: " + pkgMap.keyAt(ip));
-                        SparseArray<ProcessStats.PackageState> uids = pkgMap.valueAt(ip);
+                        SparseArray<SparseArray<ProcessStats.PackageState>> uids
+                                = pkgMap.valueAt(ip);
                         final int NUID = uids.size();
                         for (int iu=0; iu<NUID; iu++) {
                             Slog.w(TAG, "  Uid: " + uids.keyAt(iu));
-                            ProcessStats.PackageState pkgState = uids.valueAt(iu);
-                            final int NPROCS = pkgState.mProcesses.size();
-                            for (int iproc=0; iproc<NPROCS; iproc++) {
-                                Slog.w(TAG, "    Process " + pkgState.mProcesses.keyAt(iproc)
-                                        + ": " + pkgState.mProcesses.valueAt(iproc));
-                            }
-                            final int NSRVS = pkgState.mServices.size();
-                            for (int isvc=0; isvc<NSRVS; isvc++) {
-                                Slog.w(TAG, "    Service " + pkgState.mServices.keyAt(isvc)
-                                        + ": " + pkgState.mServices.valueAt(isvc));
+                            SparseArray<ProcessStats.PackageState> vers = uids.valueAt(iu);
+                            final int NVERS = vers.size();
+                            for (int iv=0; iv<NVERS; iv++) {
+                                Slog.w(TAG, "    Vers: " + vers.keyAt(iv));
+                                ProcessStats.PackageState pkgState = vers.valueAt(iv);
+                                final int NPROCS = pkgState.mProcesses.size();
+                                for (int iproc=0; iproc<NPROCS; iproc++) {
+                                    Slog.w(TAG, "      Process " + pkgState.mProcesses.keyAt(iproc)
+                                            + ": " + pkgState.mProcesses.valueAt(iproc));
+                                }
+                                final int NSRVS = pkgState.mServices.size();
+                                for (int isvc=0; isvc<NSRVS; isvc++) {
+                                    Slog.w(TAG, "      Service " + pkgState.mServices.keyAt(isvc)
+                                            + ": " + pkgState.mServices.valueAt(isvc));
+
+                                }
                             }
                         }
                     }
diff --git a/services/core/java/com/android/server/am/ReceiverList.java b/services/core/java/com/android/server/am/ReceiverList.java
index fa8c1df..6ade736 100644
--- a/services/core/java/com/android/server/am/ReceiverList.java
+++ b/services/core/java/com/android/server/am/ReceiverList.java
@@ -17,11 +17,8 @@
 package com.android.server.am;
 
 import android.content.IIntentReceiver;
-import android.content.Intent;
 import android.os.Binder;
-import android.os.Bundle;
 import android.os.IBinder;
-import android.os.RemoteException;
 import android.util.PrintWriterPrinter;
 import android.util.Printer;
 
diff --git a/services/core/java/com/android/server/am/ServiceRecord.java b/services/core/java/com/android/server/am/ServiceRecord.java
index cb04835..e54c95e 100644
--- a/services/core/java/com/android/server/am/ServiceRecord.java
+++ b/services/core/java/com/android/server/am/ServiceRecord.java
@@ -193,14 +193,7 @@
                         pw.println(si.neededGrants);
             }
             if (si.uriPermissions != null) {
-                if (si.uriPermissions.readUriPermissions != null) {
-                    pw.print(prefix); pw.print("  readUriPermissions=");
-                            pw.println(si.uriPermissions.readUriPermissions);
-                }
-                if (si.uriPermissions.writeUriPermissions != null) {
-                    pw.print(prefix); pw.print("  writeUriPermissions=");
-                            pw.println(si.uriPermissions.writeUriPermissions);
-                }
+                si.uriPermissions.dump(pw, prefix);
             }
         }
     }
@@ -329,7 +322,8 @@
         }
         if ((serviceInfo.applicationInfo.flags&ApplicationInfo.FLAG_PERSISTENT) == 0) {
             tracker = ams.mProcessStats.getServiceStateLocked(serviceInfo.packageName,
-                    serviceInfo.applicationInfo.uid, serviceInfo.processName, serviceInfo.name);
+                    serviceInfo.applicationInfo.uid, serviceInfo.applicationInfo.versionCode,
+                    serviceInfo.processName, serviceInfo.name);
             tracker.applyNewOwner(this);
         }
         return tracker;
@@ -346,7 +340,8 @@
         if (restartTracker == null) {
             if ((serviceInfo.applicationInfo.flags&ApplicationInfo.FLAG_PERSISTENT) == 0) {
                 restartTracker = ams.mProcessStats.getServiceStateLocked(serviceInfo.packageName,
-                        serviceInfo.applicationInfo.uid, serviceInfo.processName, serviceInfo.name);
+                        serviceInfo.applicationInfo.uid, serviceInfo.applicationInfo.versionCode,
+                        serviceInfo.processName, serviceInfo.name);
             }
             if (restartTracker == null) {
                 return;
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index 9740812..68da54d 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -28,7 +28,9 @@
 import android.content.pm.ActivityInfo;
 import android.graphics.Bitmap;
 import android.os.UserHandle;
+import android.service.voice.IVoiceInteractionSession;
 import android.util.Slog;
+import com.android.internal.app.IVoiceInteractor;
 
 import java.io.PrintWriter;
 import java.util.ArrayList;
@@ -36,6 +38,8 @@
 final class TaskRecord extends ThumbnailHolder {
     final int taskId;       // Unique identifier for this task.
     final String affinity;  // The affinity name for this task, or null.
+    final IVoiceInteractionSession voiceSession;    // Voice interaction session driving task
+    final IVoiceInteractor voiceInteractor;         // Associated interactor to provide to app
     Intent intent;          // The original intent that started the task.
     Intent affinityIntent;  // Intent of affinity-moved activity that started this task.
     ComponentName origActivity; // The non-alias activity component of the intent.
@@ -64,9 +68,12 @@
      * Display.DEFAULT_DISPLAY. */
     boolean mOnTopOfHome = false;
 
-    TaskRecord(int _taskId, ActivityInfo info, Intent _intent) {
+    TaskRecord(int _taskId, ActivityInfo info, Intent _intent,
+            IVoiceInteractionSession _voiceSession, IVoiceInteractor _voiceInteractor) {
         taskId = _taskId;
         affinity = info.taskAffinity;
+        voiceSession = _voiceSession;
+        voiceInteractor = _voiceInteractor;
         setIntent(_intent, info);
     }
 
@@ -139,6 +146,18 @@
         }
     }
 
+    /** Returns the first non-finishing activity from the root. */
+    ActivityRecord getRootActivity() {
+        for (int i = 0; i < mActivities.size(); i++) {
+            final ActivityRecord r = mActivities.get(i);
+            if (r.finishing) {
+                continue;
+            }
+            return r;
+        }
+        return null;
+    }
+
     ActivityRecord getTopActivity() {
         for (int i = mActivities.size() - 1; i >= 0; --i) {
             final ActivityRecord r = mActivities.get(i);
@@ -153,7 +172,7 @@
     ActivityRecord topRunningActivityLocked(ActivityRecord notTop) {
         for (int activityNdx = mActivities.size() - 1; activityNdx >= 0; --activityNdx) {
             ActivityRecord r = mActivities.get(activityNdx);
-            if (!r.finishing && r != notTop && stack.okToShow(r)) {
+            if (!r.finishing && r != notTop && stack.okToShowLocked(r)) {
                 return r;
             }
         }
@@ -305,7 +324,7 @@
     }
 
     public ActivityManager.TaskThumbnails getTaskThumbnailsLocked() {
-        TaskAccessInfo info = getTaskAccessInfoLocked(true);
+        TaskAccessInfo info = getTaskAccessInfoLocked();
         final ActivityRecord resumedActivity = stack.mResumedActivity;
         if (resumedActivity != null && resumedActivity.thumbHolder == this) {
             info.mainThumbnail = stack.screenshotActivities(resumedActivity);
@@ -325,7 +344,7 @@
         }
         // Return the information about the task, to figure out the top
         // thumbnail to return.
-        TaskAccessInfo info = getTaskAccessInfoLocked(true);
+        TaskAccessInfo info = getTaskAccessInfoLocked();
         if (info.numSubThumbbails <= 0) {
             return info.mainThumbnail != null ? info.mainThumbnail : lastThumbnail;
         }
@@ -334,7 +353,7 @@
 
     public ActivityRecord removeTaskActivitiesLocked(int subTaskIndex,
             boolean taskRequired) {
-        TaskAccessInfo info = getTaskAccessInfoLocked(false);
+        TaskAccessInfo info = getTaskAccessInfoLocked();
         if (info.root == null) {
             if (taskRequired) {
                 Slog.w(TAG, "removeTaskLocked: unknown taskId " + taskId);
@@ -369,7 +388,7 @@
         return mTaskType == ActivityRecord.APPLICATION_ACTIVITY_TYPE;
     }
 
-    public TaskAccessInfo getTaskAccessInfoLocked(boolean inclThumbs) {
+    public TaskAccessInfo getTaskAccessInfoLocked() {
         final TaskAccessInfo thumbs = new TaskAccessInfo();
         // How many different sub-thumbnails?
         final int NA = mActivities.size();
@@ -461,6 +480,12 @@
         if (affinity != null) {
             pw.print(prefix); pw.print("affinity="); pw.println(affinity);
         }
+        if (voiceSession != null || voiceInteractor != null) {
+            pw.print(prefix); pw.print("VOICE: session=0x");
+            pw.print(Integer.toHexString(System.identityHashCode(voiceSession)));
+            pw.print(" interactor=0x");
+            pw.println(Integer.toHexString(System.identityHashCode(voiceInteractor)));
+        }
         if (intent != null) {
             StringBuilder sb = new StringBuilder(128);
             sb.append(prefix); sb.append("intent={");
diff --git a/services/core/java/com/android/server/am/UriPermission.java b/services/core/java/com/android/server/am/UriPermission.java
index 1f12b74..4970b8d 100644
--- a/services/core/java/com/android/server/am/UriPermission.java
+++ b/services/core/java/com/android/server/am/UriPermission.java
@@ -17,15 +17,16 @@
 package com.android.server.am;
 
 import android.content.Intent;
-import android.net.Uri;
 import android.os.UserHandle;
+import android.util.ArraySet;
 import android.util.Log;
+import android.util.Slog;
 
+import com.android.server.am.ActivityManagerService.GrantUri;
 import com.google.android.collect.Sets;
 
 import java.io.PrintWriter;
 import java.util.Comparator;
-import java.util.HashSet;
 
 /**
  * Description of a permission granted to an app to access a particular URI.
@@ -50,7 +51,7 @@
     /** Cached UID of {@link #targetPkg}; should not be persisted */
     final int targetUid;
 
-    final Uri uri;
+    final GrantUri uri;
 
     /**
      * Allowed modes. All permission enforcement should use this field. Must
@@ -61,12 +62,13 @@
      */
     int modeFlags = 0;
 
-    /** Allowed modes with explicit owner. */
+    /** Allowed modes with active owner. */
     int ownedModeFlags = 0;
     /** Allowed modes without explicit owner. */
     int globalModeFlags = 0;
     /** Allowed modes that have been offered for possible persisting. */
     int persistableModeFlags = 0;
+
     /** Allowed modes that should be persisted across device boots. */
     int persistedModeFlags = 0;
 
@@ -78,12 +80,12 @@
 
     private static final long INVALID_TIME = Long.MIN_VALUE;
 
-    private HashSet<UriPermissionOwner> mReadOwners;
-    private HashSet<UriPermissionOwner> mWriteOwners;
+    private ArraySet<UriPermissionOwner> mReadOwners;
+    private ArraySet<UriPermissionOwner> mWriteOwners;
 
     private String stringName;
 
-    UriPermission(String sourcePkg, String targetPkg, int targetUid, Uri uri) {
+    UriPermission(String sourcePkg, String targetPkg, int targetUid, GrantUri uri) {
         this.userHandle = UserHandle.getUserId(targetUid);
         this.sourcePkg = sourcePkg;
         this.targetPkg = targetPkg;
@@ -100,6 +102,9 @@
      * global or owner grants.
      */
     void initPersistedModes(int modeFlags, long createdTime) {
+        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
+                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
         persistableModeFlags = modeFlags;
         persistedModeFlags = modeFlags;
         persistedCreateTime = createdTime;
@@ -107,7 +112,11 @@
         updateModeFlags();
     }
 
-    void grantModes(int modeFlags, boolean persistable, UriPermissionOwner owner) {
+    void grantModes(int modeFlags, UriPermissionOwner owner) {
+        final boolean persistable = (modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0;
+        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
+                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
         if (persistable) {
             persistableModeFlags |= modeFlags;
         }
@@ -130,10 +139,14 @@
      * @return if mode changes should trigger persisting.
      */
     boolean takePersistableModes(int modeFlags) {
+        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
+                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
         if ((modeFlags & persistableModeFlags) != modeFlags) {
-            throw new SecurityException("Requested flags 0x"
+            Slog.w(TAG, "Requested flags 0x"
                     + Integer.toHexString(modeFlags) + ", but only 0x"
                     + Integer.toHexString(persistableModeFlags) + " are allowed");
+            return false;
         }
 
         final int before = persistedModeFlags;
@@ -148,6 +161,9 @@
     }
 
     boolean releasePersistableModes(int modeFlags) {
+        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
+                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
         final int before = persistedModeFlags;
 
         persistableModeFlags &= ~modeFlags;
@@ -164,7 +180,11 @@
     /**
      * @return if mode changes should trigger persisting.
      */
-    boolean clearModes(int modeFlags, boolean persistable) {
+    boolean revokeModes(int modeFlags) {
+        final boolean persistable = (modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0;
+        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
+                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+
         final int before = persistedModeFlags;
 
         if ((modeFlags & Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0) {
@@ -208,6 +228,8 @@
      * Return strength of this permission grant for the given flags.
      */
     public int getStrength(int modeFlags) {
+        modeFlags &= (Intent.FLAG_GRANT_READ_URI_PERMISSION
+                | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
         if ((persistableModeFlags & modeFlags) == modeFlags) {
             return STRENGTH_PERSISTABLE;
         } else if ((globalModeFlags & modeFlags) == modeFlags) {
@@ -221,7 +243,7 @@
 
     private void addReadOwner(UriPermissionOwner owner) {
         if (mReadOwners == null) {
-            mReadOwners = Sets.newHashSet();
+            mReadOwners = Sets.newArraySet();
             ownedModeFlags |= Intent.FLAG_GRANT_READ_URI_PERMISSION;
             updateModeFlags();
         }
@@ -246,7 +268,7 @@
 
     private void addWriteOwner(UriPermissionOwner owner) {
         if (mWriteOwners == null) {
-            mWriteOwners = Sets.newHashSet();
+            mWriteOwners = Sets.newArraySet();
             ownedModeFlags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
             updateModeFlags();
         }
@@ -333,7 +355,7 @@
         final int userHandle;
         final String sourcePkg;
         final String targetPkg;
-        final Uri uri;
+        final GrantUri uri;
         final int persistedModeFlags;
         final long persistedCreateTime;
 
@@ -352,6 +374,6 @@
     }
 
     public android.content.UriPermission buildPersistedPublicApiObject() {
-        return new android.content.UriPermission(uri, persistedModeFlags, persistedCreateTime);
+        return new android.content.UriPermission(uri.uri, persistedModeFlags, persistedCreateTime);
     }
 }
diff --git a/services/core/java/com/android/server/am/UriPermissionOwner.java b/services/core/java/com/android/server/am/UriPermissionOwner.java
index 7bbd3bc..65d7047 100644
--- a/services/core/java/com/android/server/am/UriPermissionOwner.java
+++ b/services/core/java/com/android/server/am/UriPermissionOwner.java
@@ -20,8 +20,11 @@
 import android.net.Uri;
 import android.os.Binder;
 import android.os.IBinder;
+import android.util.ArraySet;
 
-import java.util.HashSet;
+import com.google.android.collect.Sets;
+
+import java.io.PrintWriter;
 import java.util.Iterator;
 
 final class UriPermissionOwner {
@@ -30,8 +33,8 @@
 
     Binder externalToken;
 
-    HashSet<UriPermission> readUriPermissions; // special access to reading uris.
-    HashSet<UriPermission> writeUriPermissions; // special access to writing uris.
+    private ArraySet<UriPermission> mReadPerms;
+    private ArraySet<UriPermission> mWritePerms;
 
     class ExternalToken extends Binder {
         UriPermissionOwner getOwner() {
@@ -39,9 +42,9 @@
         }
     }
 
-    UriPermissionOwner(ActivityManagerService _service, Object _owner) {
-        service = _service;
-        owner = _owner;
+    UriPermissionOwner(ActivityManagerService service, Object owner) {
+        this.service = service;
+        this.owner = owner;
     }
 
     Binder getExternalTokenLocked() {
@@ -64,82 +67,76 @@
     }
 
     void removeUriPermissionsLocked(int mode) {
-        if ((mode&Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0
-                && readUriPermissions != null) {
-            for (UriPermission perm : readUriPermissions) {
-                perm.removeReadOwner(this);
-                service.removeUriPermissionIfNeededLocked(perm);
-            }
-            readUriPermissions = null;
-        }
-        if ((mode&Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0
-                && writeUriPermissions != null) {
-            for (UriPermission perm : writeUriPermissions) {
-                perm.removeWriteOwner(this);
-                service.removeUriPermissionIfNeededLocked(perm);
-            }
-            writeUriPermissions = null;
-        }
+        removeUriPermissionLocked(null, mode);
     }
 
     void removeUriPermissionLocked(Uri uri, int mode) {
-        if ((mode&Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0
-                && readUriPermissions != null) {
-            Iterator<UriPermission> it = readUriPermissions.iterator();
+        if ((mode & Intent.FLAG_GRANT_READ_URI_PERMISSION) != 0
+                && mReadPerms != null) {
+            Iterator<UriPermission> it = mReadPerms.iterator();
             while (it.hasNext()) {
                 UriPermission perm = it.next();
-                if (uri.equals(perm.uri)) {
+                if (uri == null || uri.equals(perm.uri)) {
                     perm.removeReadOwner(this);
                     service.removeUriPermissionIfNeededLocked(perm);
                     it.remove();
                 }
             }
-            if (readUriPermissions.size() == 0) {
-                readUriPermissions = null;
+            if (mReadPerms.isEmpty()) {
+                mReadPerms = null;
             }
         }
-        if ((mode&Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0
-                && writeUriPermissions != null) {
-            Iterator<UriPermission> it = writeUriPermissions.iterator();
+        if ((mode & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) != 0
+                && mWritePerms != null) {
+            Iterator<UriPermission> it = mWritePerms.iterator();
             while (it.hasNext()) {
                 UriPermission perm = it.next();
-                if (uri.equals(perm.uri)) {
+                if (uri == null || uri.equals(perm.uri)) {
                     perm.removeWriteOwner(this);
                     service.removeUriPermissionIfNeededLocked(perm);
                     it.remove();
                 }
             }
-            if (writeUriPermissions.size() == 0) {
-                writeUriPermissions = null;
+            if (mWritePerms.isEmpty()) {
+                mWritePerms = null;
             }
         }
     }
 
     public void addReadPermission(UriPermission perm) {
-        if (readUriPermissions == null) {
-            readUriPermissions = new HashSet<UriPermission>();
+        if (mReadPerms == null) {
+            mReadPerms = Sets.newArraySet();
         }
-        readUriPermissions.add(perm);
+        mReadPerms.add(perm);
     }
 
     public void addWritePermission(UriPermission perm) {
-        if (writeUriPermissions == null) {
-            writeUriPermissions = new HashSet<UriPermission>();
+        if (mWritePerms == null) {
+            mWritePerms = Sets.newArraySet();
         }
-        writeUriPermissions.add(perm);
+        mWritePerms.add(perm);
     }
 
     public void removeReadPermission(UriPermission perm) {
-        readUriPermissions.remove(perm);
-        if (readUriPermissions.size() == 0) {
-            readUriPermissions = null;
+        mReadPerms.remove(perm);
+        if (mReadPerms.isEmpty()) {
+            mReadPerms = null;
         }
     }
 
     public void removeWritePermission(UriPermission perm) {
-        writeUriPermissions.remove(perm);
-        if (writeUriPermissions.size() == 0) {
-            writeUriPermissions = null;
+        mWritePerms.remove(perm);
+        if (mWritePerms.isEmpty()) {
+            mWritePerms = null;
+        }
+    }
+
+    public void dump(PrintWriter pw, String prefix) {
+        if (mReadPerms != null) {
+            pw.print(prefix); pw.print("readUriPermissions="); pw.println(mReadPerms);
+        }
+        if (mWritePerms != null) {
+            pw.print(prefix); pw.print("writeUriPermissions="); pw.println(mWritePerms);
         }
     }
 
diff --git a/services/core/java/com/android/server/am/UsageStatsService.java b/services/core/java/com/android/server/am/UsageStatsService.java
index 5305c8f2..42cf900 100644
--- a/services/core/java/com/android/server/am/UsageStatsService.java
+++ b/services/core/java/com/android/server/am/UsageStatsService.java
@@ -20,7 +20,6 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.pm.IPackageManager;
-import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.os.Binder;
 import android.os.IBinder;
@@ -54,7 +53,6 @@
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
diff --git a/services/core/java/com/android/server/clipboard/ClipboardService.java b/services/core/java/com/android/server/clipboard/ClipboardService.java
index 6aa596d..f47d66d 100644
--- a/services/core/java/com/android/server/clipboard/ClipboardService.java
+++ b/services/core/java/com/android/server/clipboard/ClipboardService.java
@@ -31,7 +31,6 @@
 import android.content.pm.IPackageManager;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.net.Uri;
 import android.os.Binder;
 import android.os.IBinder;
@@ -40,7 +39,6 @@
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
 import android.os.UserHandle;
-import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseArray;
 
diff --git a/services/core/java/com/android/server/connectivity/PacManager.java b/services/core/java/com/android/server/connectivity/PacManager.java
index 7786fe6..8815d0f 100644
--- a/services/core/java/com/android/server/connectivity/PacManager.java
+++ b/services/core/java/com/android/server/connectivity/PacManager.java
@@ -24,16 +24,13 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
-import android.net.Proxy;
 import android.net.ProxyProperties;
-import android.os.Binder;
 import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.SystemProperties;
-import android.os.UserHandle;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.util.Log;
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index adf1dfc..abe362a 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -28,7 +28,6 @@
 import android.hardware.usb.UsbManager;
 import android.net.ConnectivityManager;
 import android.net.IConnectivityManager;
-import android.net.INetworkManagementEventObserver;
 import android.net.INetworkStatsService;
 import android.net.InterfaceConfiguration;
 import android.net.LinkAddress;
@@ -52,7 +51,6 @@
 import com.android.internal.util.StateMachine;
 import com.android.server.IoThread;
 import com.android.server.net.BaseNetworkObserver;
-import com.google.android.collect.Lists;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -472,7 +470,9 @@
         mTetheredNotification.defaults &= ~Notification.DEFAULT_SOUND;
         mTetheredNotification.flags = Notification.FLAG_ONGOING_EVENT;
         mTetheredNotification.tickerText = title;
+        mTetheredNotification.visibility = Notification.VISIBILITY_PUBLIC;
         mTetheredNotification.setLatestEventInfo(mContext, title, message, pi);
+        mTetheredNotification.category = Notification.CATEGORY_STATUS;
 
         notificationManager.notifyAsUser(null, mTetheredNotification.icon,
                 mTetheredNotification, UserHandle.ALL);
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 376414b..cb1dfe4 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -29,7 +29,6 @@
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageManager;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
@@ -64,14 +63,12 @@
 import android.security.KeyStore;
 import android.util.Log;
 import android.util.SparseBooleanArray;
-import android.widget.Toast;
 
 import com.android.internal.annotations.GuardedBy;
 import com.android.internal.R;
 import com.android.internal.net.LegacyVpnInfo;
 import com.android.internal.net.VpnConfig;
 import com.android.internal.net.VpnProfile;
-import com.android.internal.util.Preconditions;
 import com.android.server.ConnectivityService.VpnCallback;
 import com.android.server.net.BaseNetworkObserver;
 
@@ -80,10 +77,8 @@
 import java.io.OutputStream;
 import java.net.InetAddress;
 import java.net.Inet4Address;
-import java.net.InetAddress;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
-import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import libcore.io.IoUtils;
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index 023bf2b..c7d2871 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -19,11 +19,13 @@
 import android.Manifest;
 import android.accounts.Account;
 import android.app.ActivityManager;
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.IContentService;
 import android.content.ISyncStatusObserver;
 import android.content.PeriodicSync;
+import android.content.pm.PackageManager;
 import android.content.SyncAdapterType;
 import android.content.SyncInfo;
 import android.content.SyncRequest;
@@ -41,7 +43,6 @@
 import android.os.UserHandle;
 import android.text.TextUtils;
 import android.util.Log;
-import android.util.Pair;
 import android.util.Slog;
 import android.util.SparseIntArray;
 
@@ -315,7 +316,6 @@
         }
     }
 
-    @Override
     public void requestSync(Account account, String authority, Bundle extras) {
         ContentResolver.validateSyncExtrasBundle(extras);
         int userId = UserHandle.getCallingUserId();
@@ -345,46 +345,56 @@
      * Depending on the request, we enqueue to suit in the SyncManager.
      * @param request The request object. Validation of this object is done by its builder.
      */
-    @Override
     public void sync(SyncRequest request) {
-        Bundle extras = request.getBundle();
-        long flextime = request.getSyncFlexTime();
-        long runAtTime = request.getSyncRunTime();
         int userId = UserHandle.getCallingUserId();
-        int uId = Binder.getCallingUid();
-
+        int callerUid = Binder.getCallingUid();
         // This makes it so that future permission checks will be in the context of this
         // process rather than the caller's process. We will restore this before returning.
         long identityToken = clearCallingIdentity();
         try {
             SyncManager syncManager = getSyncManager();
-            if (syncManager != null) {
-                if (request.hasAuthority()) {
-                    // Sync Adapter registered with the system - old API.
-                    final  Account account = request.getAccount();
-                    final String provider = request.getProvider();
-                    if (request.isPeriodic()) {
-                        mContext.enforceCallingOrSelfPermission(
-                                Manifest.permission.WRITE_SYNC_SETTINGS,
-                                "no permission to write the sync settings");
-                        if (runAtTime < 60) {
-                            Slog.w(TAG, "Requested poll frequency of " + runAtTime
-                                    + " seconds being rounded up to 60 seconds.");
-                            runAtTime = 60;
-                        }
-                        PeriodicSync syncToAdd =
-                                new PeriodicSync(account, provider, extras, runAtTime, flextime);
-                        getSyncManager().getSyncStorageEngine().addPeriodicSync(syncToAdd, userId);
-                    } else {
-                        long beforeRuntimeMillis = (flextime) * 1000;
-                        long runtimeMillis = runAtTime * 1000;
-                        syncManager.scheduleSync(
-                                account, userId, uId, provider, extras,
-                                beforeRuntimeMillis, runtimeMillis,
-                                false /* onlyThoseWithUnknownSyncableState */);
-                    }
+            if (syncManager == null) {
+                return;
+            }
+
+            Bundle extras = request.getBundle();
+            long flextime = request.getSyncFlexTime();
+            long runAtTime = request.getSyncRunTime();
+            if (request.isPeriodic()) {
+                mContext.enforceCallingOrSelfPermission(
+                        Manifest.permission.WRITE_SYNC_SETTINGS,
+                        "no permission to write the sync settings");
+                SyncStorageEngine.EndPoint info;
+                if (!request.hasAuthority()) {
+                    // Extra permissions checking for sync service.
+                    verifySignatureForPackage(callerUid,
+                            request.getService().getPackageName(), "sync");
+                    info = new SyncStorageEngine.EndPoint(request.getService(), userId);
                 } else {
-                    Log.w(TAG, "Unrecognised sync parameters, doing nothing.");
+                    info = new SyncStorageEngine.EndPoint(
+                            request.getAccount(), request.getProvider(), userId);
+                }
+                if (runAtTime < 60) {
+                    Slog.w(TAG, "Requested poll frequency of " + runAtTime
+                            + " seconds being rounded up to 60 seconds.");
+                    runAtTime = 60;
+                }
+                // Schedule periodic sync.
+                getSyncManager().getSyncStorageEngine()
+                    .updateOrAddPeriodicSync(info, runAtTime, flextime, extras);
+            } else {
+                long beforeRuntimeMillis = (flextime) * 1000;
+                long runtimeMillis = runAtTime * 1000;
+                if (request.hasAuthority()) {
+                syncManager.scheduleSync(
+                        request.getAccount(), userId, callerUid, request.getProvider(), extras,
+                        beforeRuntimeMillis, runtimeMillis,
+                        false /* onlyThoseWithUnknownSyncableState */);
+                } else {
+                    syncManager.scheduleSync(
+                            request.getService(), userId, callerUid, extras,
+                            beforeRuntimeMillis,
+                            runtimeMillis); // Empty function.
                 }
             }
         } finally {
@@ -395,11 +405,14 @@
     /**
      * Clear all scheduled sync operations that match the uri and cancel the active sync
      * if they match the authority and account, if they are present.
-     * @param account filter the pending and active syncs to cancel using this account
-     * @param authority filter the pending and active syncs to cancel using this authority
+     *
+     * @param account filter the pending and active syncs to cancel using this account, or null.
+     * @param authority filter the pending and active syncs to cancel using this authority, or
+     * null.
+     * @param cname cancel syncs running on this service, or null for provider/account.
      */
     @Override
-    public void cancelSync(Account account, String authority) {
+    public void cancelSync(Account account, String authority, ComponentName cname) {
         if (authority != null && authority.length() == 0) {
             throw new IllegalArgumentException("Authority must be non-empty");
         }
@@ -411,14 +424,54 @@
         try {
             SyncManager syncManager = getSyncManager();
             if (syncManager != null) {
-                syncManager.clearScheduledSyncOperations(account, userId, authority);
-                syncManager.cancelActiveSync(account, userId, authority);
+                SyncStorageEngine.EndPoint info;
+                if (cname == null) {
+                    info = new SyncStorageEngine.EndPoint(account, authority, userId);
+                } else {
+                    info = new SyncStorageEngine.EndPoint(cname, userId);
+                }
+                syncManager.clearScheduledSyncOperations(info);
+                syncManager.cancelActiveSync(info, null /* all syncs for this adapter */);
             }
         } finally {
             restoreCallingIdentity(identityToken);
         }
     }
 
+    public void cancelRequest(SyncRequest request) {
+        SyncManager syncManager = getSyncManager();
+        if (syncManager == null) return;
+        int userId = UserHandle.getCallingUserId();
+        int callerUid = Binder.getCallingUid();
+
+        long identityToken = clearCallingIdentity();
+        try {
+            SyncStorageEngine.EndPoint info;
+            Bundle extras = new Bundle(request.getBundle());
+            if (request.hasAuthority()) {
+                Account account = request.getAccount();
+                String provider = request.getProvider();
+                info = new SyncStorageEngine.EndPoint(account, provider, userId);
+            } else {
+                // Only allowed to manipulate syncs for a service which you own.
+                ComponentName service = request.getService();
+                verifySignatureForPackage(callerUid, service.getPackageName(), "cancel");
+                info = new SyncStorageEngine.EndPoint(service, userId);
+            }
+            if (request.isPeriodic()) {
+                // Remove periodic sync.
+                mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
+                        "no permission to write the sync settings");
+                getSyncManager().getSyncStorageEngine().removePeriodicSync(info, extras);
+            }
+            // Cancel active syncs and clear pending syncs from the queue.
+            syncManager.cancelScheduledSyncOperation(info, extras);
+            syncManager.cancelActiveSync(info, extras);
+        } finally {
+            restoreCallingIdentity(identityToken);
+        }
+    }
+
     /**
      * Get information about the SyncAdapters that are known to the system.
      * @return an array of SyncAdapters that have registered with the system
@@ -447,8 +500,8 @@
         try {
             SyncManager syncManager = getSyncManager();
             if (syncManager != null) {
-                return syncManager.getSyncStorageEngine().getSyncAutomatically(
-                        account, userId, providerName);
+                return syncManager.getSyncStorageEngine()
+                        .getSyncAutomatically(account, userId, providerName);
             }
         } finally {
             restoreCallingIdentity(identityToken);
@@ -469,8 +522,8 @@
         try {
             SyncManager syncManager = getSyncManager();
             if (syncManager != null) {
-                syncManager.getSyncStorageEngine().setSyncAutomatically(
-                        account, userId, providerName, sync);
+                syncManager.getSyncStorageEngine()
+                .setSyncAutomatically(account, userId, providerName, sync);
             }
         } finally {
             restoreCallingIdentity(identityToken);
@@ -496,21 +549,22 @@
                     + " seconds being rounded up to 60 seconds.");
             pollFrequency = 60;
         }
+        long defaultFlex = SyncStorageEngine.calculateDefaultFlexTime(pollFrequency);
 
         long identityToken = clearCallingIdentity();
         try {
-            // Add default flex time to this sync.
-            PeriodicSync syncToAdd =
-                    new PeriodicSync(account, authority, extras,
-                            pollFrequency,
-                            SyncStorageEngine.calculateDefaultFlexTime(pollFrequency));
-            getSyncManager().getSyncStorageEngine().addPeriodicSync(syncToAdd, userId);
+            SyncStorageEngine.EndPoint info =
+                    new SyncStorageEngine.EndPoint(account, authority, userId);
+            getSyncManager().getSyncStorageEngine()
+                .updateOrAddPeriodicSync(info,
+                        pollFrequency,
+                        defaultFlex,
+                        extras);
         } finally {
             restoreCallingIdentity(identityToken);
         }
     }
 
-    @Override
     public void removePeriodicSync(Account account, String authority, Bundle extras) {
         if (account == null) {
             throw new IllegalArgumentException("Account must not be null");
@@ -524,24 +578,18 @@
         int userId = UserHandle.getCallingUserId();
         long identityToken = clearCallingIdentity();
         try {
-            PeriodicSync syncToRemove = new PeriodicSync(account, authority, extras,
-                    0 /* Not read for removal */, 0 /* Not read for removal */);
-            getSyncManager().getSyncStorageEngine().removePeriodicSync(syncToRemove, userId);
+            getSyncManager().getSyncStorageEngine()
+                .removePeriodicSync(
+                        new SyncStorageEngine.EndPoint(account, authority, userId),
+                        extras);
         } finally {
             restoreCallingIdentity(identityToken);
         }
     }
 
-    /**
-     * TODO: Implement.
-     * @param request Sync to remove.
-     */
-    public void removeSync(SyncRequest request) {
 
-    }
-
-    @Override
-    public List<PeriodicSync> getPeriodicSyncs(Account account, String providerName) {
+    public List<PeriodicSync> getPeriodicSyncs(Account account, String providerName,
+            ComponentName cname) {
         if (account == null) {
             throw new IllegalArgumentException("Account must not be null");
         }
@@ -551,11 +599,20 @@
         mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_SETTINGS,
                 "no permission to read the sync settings");
 
+        int callerUid = Binder.getCallingUid();
         int userId = UserHandle.getCallingUserId();
         long identityToken = clearCallingIdentity();
         try {
-            return getSyncManager().getSyncStorageEngine().getPeriodicSyncs(
-                    account, userId, providerName);
+            if (cname == null) {
+                return getSyncManager().getSyncStorageEngine().getPeriodicSyncs(
+                        new SyncStorageEngine.EndPoint(account, providerName, userId));
+            } else if (account == null && providerName == null) {
+                verifySignatureForPackage(callerUid, cname.getPackageName(), "getPeriodicSyncs");
+                return getSyncManager().getSyncStorageEngine().getPeriodicSyncs(
+                        new SyncStorageEngine.EndPoint(cname, userId));
+            } else {
+                throw new IllegalArgumentException("Invalid authority specified");
+            }
         } finally {
             restoreCallingIdentity(identityToken);
         }
@@ -579,7 +636,6 @@
         return -1;
     }
 
-    @Override
     public void setIsSyncable(Account account, String providerName, int syncable) {
         if (TextUtils.isEmpty(providerName)) {
             throw new IllegalArgumentException("Authority must not be empty");
@@ -600,6 +656,45 @@
         }
     }
 
+    public void setServiceActive(ComponentName cname, boolean active) {
+        mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS,
+                "no permission to write the sync settings");
+        verifySignatureForPackage(Binder.getCallingUid(), cname.getPackageName(),
+                "setServiceActive");
+
+        int userId = UserHandle.getCallingUserId();
+        long identityToken = clearCallingIdentity();
+        try {
+            SyncManager syncManager = getSyncManager();
+            if (syncManager != null) {
+                syncManager.getSyncStorageEngine().setIsTargetServiceActive(
+                        cname, userId, active);
+            }
+        } finally {
+            restoreCallingIdentity(identityToken);
+        }
+    }
+
+    public boolean isServiceActive(ComponentName cname) {
+        mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_SETTINGS,
+                "no permission to read the sync settings");
+        verifySignatureForPackage(Binder.getCallingUid(), cname.getPackageName(),
+                "isServiceActive");
+
+        int userId = UserHandle.getCallingUserId();
+        long identityToken = clearCallingIdentity();
+        try {
+            SyncManager syncManager = getSyncManager();
+            if (syncManager != null) {
+                return syncManager.getSyncStorageEngine()
+                        .getIsTargetServiceActive(cname, userId);
+            }
+        } finally {
+            restoreCallingIdentity(identityToken);
+        }
+        return false;
+    }
+
     @Override
     public boolean getMasterSyncAutomatically() {
         mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_SETTINGS,
@@ -635,17 +730,24 @@
         }
     }
 
-    public boolean isSyncActive(Account account, String authority) {
+    public boolean isSyncActive(Account account, String authority, ComponentName cname) {
         mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
                 "no permission to read the sync stats");
         int userId = UserHandle.getCallingUserId();
-
+        int callingUid = Binder.getCallingUid();
         long identityToken = clearCallingIdentity();
         try {
             SyncManager syncManager = getSyncManager();
-            if (syncManager != null) {
+            if (syncManager == null) {
+                return false;
+            }
+            if (cname == null) {
                 return syncManager.getSyncStorageEngine().isSyncActive(
-                        account, userId, authority);
+                        new SyncStorageEngine.EndPoint(account, authority, userId));
+            } else if (account == null && authority == null) {
+                verifySignatureForPackage(callingUid, cname.getPackageName(), "isSyncActive");
+                return syncManager.getSyncStorageEngine().isSyncActive(
+                        new SyncStorageEngine.EndPoint(cname, userId));
             }
         } finally {
             restoreCallingIdentity(identityToken);
@@ -666,7 +768,7 @@
         }
     }
 
-    public SyncStatusInfo getSyncStatus(Account account, String authority) {
+    public SyncStatusInfo getSyncStatus(Account account, String authority, ComponentName cname) {
         if (TextUtils.isEmpty(authority)) {
             throw new IllegalArgumentException("Authority must not be empty");
         }
@@ -674,34 +776,52 @@
                 "no permission to read the sync stats");
 
         int userId = UserHandle.getCallingUserId();
+        int callerUid = Binder.getCallingUid();
         long identityToken = clearCallingIdentity();
         try {
             SyncManager syncManager = getSyncManager();
-            if (syncManager != null) {
-                return syncManager.getSyncStorageEngine().getStatusByAccountAndAuthority(
-                        account, userId, authority);
+            if (syncManager == null) {
+                return null;
             }
+            SyncStorageEngine.EndPoint info;
+            if (cname == null) {
+                info = new SyncStorageEngine.EndPoint(account, authority, userId);
+            } else if (account == null && authority == null) {
+                verifySignatureForPackage(callerUid, cname.getPackageName(), "getSyncStatus");
+                info = new SyncStorageEngine.EndPoint(cname, userId);
+            } else {
+                throw new IllegalArgumentException("Must call sync status with valid authority");
+            }
+            return syncManager.getSyncStorageEngine().getStatusByAuthority(info);
         } finally {
             restoreCallingIdentity(identityToken);
         }
-        return null;
     }
 
-    public boolean isSyncPending(Account account, String authority) {
+    public boolean isSyncPending(Account account, String authority, ComponentName cname) {
         mContext.enforceCallingOrSelfPermission(Manifest.permission.READ_SYNC_STATS,
                 "no permission to read the sync stats");
 
+        int callerUid = Binder.getCallingUid();
         int userId = UserHandle.getCallingUserId();
         long identityToken = clearCallingIdentity();
+        SyncManager syncManager = getSyncManager();
+        if (syncManager == null) return false;
+
         try {
-            SyncManager syncManager = getSyncManager();
-            if (syncManager != null) {
-                return syncManager.getSyncStorageEngine().isSyncPending(account, userId, authority);
+            SyncStorageEngine.EndPoint info;
+            if (cname == null) {
+                info = new SyncStorageEngine.EndPoint(account, authority, userId);
+            } else if (account == null && authority == null) {
+                verifySignatureForPackage(callerUid, cname.getPackageName(), "isSyncPending");
+                info = new SyncStorageEngine.EndPoint(cname, userId);
+            } else {
+                throw new IllegalArgumentException("Invalid authority specified");
             }
+            return syncManager.getSyncStorageEngine().isSyncPending(info);
         } finally {
             restoreCallingIdentity(identityToken);
         }
-        return false;
     }
 
     public void addStatusChangeListener(int mask, ISyncStatusObserver callback) {
@@ -735,6 +855,30 @@
     }
 
     /**
+     * Helper to verify that the provided package name shares the same cert as the caller.
+     * @param callerUid uid of the calling process.
+     * @param packageName package to verify against package of calling application.
+     * @param tag a tag to use when throwing an exception if the signatures don't
+     * match. Cannot be null.
+     * @return true if the calling application and the provided package are signed with the same
+     * certificate.
+     */
+    private boolean verifySignatureForPackage(int callerUid, String packageName, String tag) {
+        PackageManager pm = mContext.getPackageManager();
+        try {
+            int serviceUid = pm.getApplicationInfo(packageName, 0).uid;
+            if (pm.checkSignatures(callerUid, serviceUid) == PackageManager.SIGNATURE_MATCH) {
+                return true;
+            } else {
+                throw new SecurityException(tag + ": Caller certificate does not match that for - "
+                        + packageName);
+            }
+        } catch (PackageManager.NameNotFoundException e) {
+            throw new IllegalArgumentException(tag + ": " + packageName + " package not found.");
+        }
+    }
+
+    /**
      * Hide this class since it is not part of api,
      * but current unittest framework requires it to be public
      * @hide
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 9e3dad6..026fd296 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -31,6 +31,7 @@
 import android.content.Context;
 import android.content.ISyncAdapter;
 import android.content.ISyncContext;
+import android.content.ISyncServiceAdapter;
 import android.content.ISyncStatusObserver;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -52,6 +53,7 @@
 import android.content.pm.UserInfo;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
+import android.os.BatteryStats;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
@@ -59,6 +61,7 @@
 import android.os.Message;
 import android.os.PowerManager;
 import android.os.RemoteException;
+import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.UserHandle;
@@ -74,6 +77,7 @@
 
 import com.android.internal.R;
 import com.android.internal.annotations.GuardedBy;
+import com.android.internal.app.IBatteryStats;
 import com.android.internal.os.BackgroundThread;
 import com.android.internal.util.IndentingPrintWriter;
 import com.android.server.accounts.AccountManagerService;
@@ -85,10 +89,8 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
@@ -99,7 +101,6 @@
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
-import java.util.concurrent.CountDownLatch;
 
 /**
  * @hide
@@ -153,7 +154,7 @@
 
     private static final int INITIALIZATION_UNBIND_DELAY_MS = 5000;
 
-    private static final String SYNC_WAKE_LOCK_PREFIX = "*sync*";
+    private static final String SYNC_WAKE_LOCK_PREFIX = "*sync*/";
     private static final String HANDLE_SYNC_ALARM_WAKE_LOCK = "SyncManagerHandleSyncAlarm";
     private static final String SYNC_LOOP_WAKE_LOCK = "SyncLoopWakeLock";
 
@@ -174,6 +175,7 @@
 
     private final NotificationManager mNotificationMgr;
     private AlarmManager mAlarmService = null;
+    private final IBatteryStats mBatteryStats;
 
     private SyncStorageEngine mSyncStorageEngine;
 
@@ -202,8 +204,9 @@
                             Log.v(TAG, "Internal storage is low.");
                         }
                         mStorageIsLow = true;
-                        cancelActiveSync(null /* any account */, UserHandle.USER_ALL,
-                                null /* any authority */);
+                        cancelActiveSync(
+                                SyncStorageEngine.EndPoint.USER_ALL_PROVIDER_ALL_ACCOUNTS_ALL,
+                                null /* any sync */);
                     } else if (Intent.ACTION_DEVICE_STORAGE_OK.equals(action)) {
                         if (Log.isLoggable(TAG, Log.VERBOSE)) {
                             Log.v(TAG, "Internal storage is ok.");
@@ -221,19 +224,6 @@
         }
     };
 
-    private BroadcastReceiver mBackgroundDataSettingChanged = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            if (getConnectivityManager().getBackgroundDataSetting()) {
-                scheduleSync(null /* account */, UserHandle.USER_ALL,
-                        SyncOperation.REASON_BACKGROUND_DATA_SETTINGS_CHANGED,
-                        null /* authority */,
-                        new Bundle(), 0 /* delay */, 0 /* delay */,
-                        false /* onlyThoseWithUnknownSyncableState */);
-            }
-        }
-    };
-
     private BroadcastReceiver mAccountsUpdatedReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -278,16 +268,16 @@
             doDatabaseCleanup();
         }
 
+        AccountAndUser[] accounts = mRunningAccounts;
         for (ActiveSyncContext currentSyncContext : mActiveSyncContexts) {
-            if (!containsAccountAndUser(mRunningAccounts,
-                    currentSyncContext.mSyncOperation.account,
-                    currentSyncContext.mSyncOperation.userId)) {
+            if (!containsAccountAndUser(accounts,
+                    currentSyncContext.mSyncOperation.target.account,
+                    currentSyncContext.mSyncOperation.target.userId)) {
                 Log.d(TAG, "canceling sync since the account is no longer running");
                 sendSyncFinishedOrCanceledMessage(currentSyncContext,
                         null /* no result since this is a cancel */);
             }
         }
-
         // we must do this since we don't bother scheduling alarms when
         // the accounts are not set yet
         sendCheckAlarmsMessage();
@@ -316,9 +306,7 @@
                     if (Log.isLoggable(TAG, Log.VERBOSE)) {
                         Log.v(TAG, "Reconnection detected: clearing all backoffs");
                     }
-                    synchronized(mSyncQueue) {
-                        mSyncStorageEngine.clearAllBackoffsLocked(mSyncQueue);
-                    }
+                    mSyncStorageEngine.clearAllBackoffs(mSyncQueue);
                 }
                 sendCheckAlarmsMessage();
             }
@@ -384,12 +372,17 @@
         mSyncStorageEngine = SyncStorageEngine.getSingleton();
         mSyncStorageEngine.setOnSyncRequestListener(new OnSyncRequestListener() {
             @Override
-            public void onSyncRequest(Account account, int userId, int reason, String authority,
-                    Bundle extras) {
-                scheduleSync(account, userId, reason, authority, extras,
-                    0 /* no delay */,
-                    0 /* no delay */,
-                    false);
+            public void onSyncRequest(SyncStorageEngine.EndPoint info, int reason, Bundle extras) {
+                if (info.target_provider) {
+                    scheduleSync(info.account, info.userId, reason, info.provider, extras,
+                        0 /* no flex */,
+                        0 /* run immediately */,
+                        false);
+                } else if (info.target_service) {
+                    scheduleSync(info.service, info.userId, reason, extras,
+                            0 /* no flex */,
+                            0 /* run immediately */);
+                }
             }
         });
 
@@ -421,9 +414,6 @@
             context.registerReceiver(mBootCompletedReceiver, intentFilter);
         }
 
-        intentFilter = new IntentFilter(ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED);
-        context.registerReceiver(mBackgroundDataSettingChanged, intentFilter);
-
         intentFilter = new IntentFilter(Intent.ACTION_DEVICE_STORAGE_LOW);
         intentFilter.addAction(Intent.ACTION_DEVICE_STORAGE_OK);
         context.registerReceiver(mStorageIntentReceiver, intentFilter);
@@ -449,6 +439,8 @@
         }
         mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
         mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService(
+                BatteryStats.SERVICE_NAME));
 
         // This WakeLock is used to ensure that we stay awake between the time that we receive
         // a sync alarm notification and when we finish processing it. We need to do this
@@ -538,11 +530,78 @@
 
     private void ensureAlarmService() {
         if (mAlarmService == null) {
-            mAlarmService = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
+            mAlarmService = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
         }
     }
 
     /**
+     * Initiate a sync using the new anonymous service API.
+     * @param cname SyncService component bound to in order to perform the sync. 
+     * @param userId the id of the user whose accounts are to be synced. If userId is USER_ALL,
+     *          then all users' accounts are considered.
+     * @param uid Linux uid of the application that is performing the sync. 
+     * @param extras a Map of SyncAdapter-specific information to control
+     *          syncs of a specific provider. Cannot be null.
+     * @param beforeRunTimeMillis milliseconds before <code>runtimeMillis</code> that this sync may
+     * be run.
+     * @param runtimeMillis milliseconds from now by which this sync must be run.
+     */
+    public void scheduleSync(ComponentName cname, int userId, int uid, Bundle extras,
+            long beforeRunTimeMillis, long runtimeMillis) {
+        boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
+        if (isLoggable) {
+            Log.d(TAG, "one off sync for: " + cname + " " + extras.toString());
+        }
+
+        Boolean expedited = extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false);
+        if (expedited) {
+            runtimeMillis = -1; // this means schedule at the front of the queue
+        }
+
+        final boolean ignoreSettings =
+                extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false);
+        int source = SyncStorageEngine.SOURCE_SERVICE;
+        boolean isEnabled = mSyncStorageEngine.getIsTargetServiceActive(cname, userId);
+        // Only schedule this sync if
+        //   - we've explicitly been told to ignore settings.
+        //   - global sync is enabled for this user.
+        boolean syncAllowed =
+                ignoreSettings
+                || mSyncStorageEngine.getMasterSyncAutomatically(userId);
+        if (!syncAllowed) {
+            if (isLoggable) {
+                Log.d(TAG, "scheduleSync: sync of " + cname + " not allowed, dropping request.");
+            }
+            return;
+        }
+        if (!isEnabled) {
+            if (isLoggable) {
+                Log.d(TAG, "scheduleSync: " + cname + " is not enabled, dropping request");
+            }
+            return;
+        }
+        SyncStorageEngine.EndPoint info = new SyncStorageEngine.EndPoint(cname, userId);
+        Pair<Long, Long> backoff = mSyncStorageEngine.getBackoff(info);
+        long delayUntil = mSyncStorageEngine.getDelayUntilTime(info);
+        final long backoffTime = backoff != null ? backoff.first : 0;
+        if (isLoggable) {
+                Log.v(TAG, "schedule Sync:"
+                        + ", delay until " + delayUntil
+                        + ", run by " + runtimeMillis
+                        + ", flex " + beforeRunTimeMillis
+                        + ", source " + source
+                        + ", sync service " + cname
+                        + ", extras " + extras);
+        }
+        scheduleSyncOperation(
+                new SyncOperation(cname, userId, uid, source, extras,
+                        runtimeMillis /* runtime */,
+                        beforeRunTimeMillis /* flextime */,
+                        backoffTime,
+                        delayUntil));
+    }
+
+    /**
      * Initiate a sync. This can start a sync for all providers
      * (pass null to url, set onlyTicklable to false), only those
      * providers that are marked as ticklable (pass null to url,
@@ -588,9 +647,6 @@
             long runtimeMillis, boolean onlyThoseWithUnkownSyncableState) {
         boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
 
-        final boolean backgroundDataUsageAllowed = !mBootCompleted ||
-                getConnectivityManager().getBackgroundDataSetting();
-
         if (extras == null) {
             extras = new Bundle();
         }
@@ -607,8 +663,6 @@
         if (requestedAccount != null && userId != UserHandle.USER_ALL) {
             accounts = new AccountAndUser[] { new AccountAndUser(requestedAccount, userId) };
         } else {
-            // if the accounts aren't configured yet then we can't support an account-less
-            // sync request
             accounts = mRunningAccounts;
             if (accounts.length == 0) {
                 if (isLoggable) {
@@ -683,12 +737,10 @@
                     continue;
                 }
 
-                // always allow if the isSyncable state is unknown
                 boolean syncAllowed =
-                        (isSyncable < 0)
+                        (isSyncable < 0) // always allow if the isSyncable state is unknown
                         || ignoreSettings
-                        || (backgroundDataUsageAllowed
-                                && mSyncStorageEngine.getMasterSyncAutomatically(account.userId)
+                        || (mSyncStorageEngine.getMasterSyncAutomatically(account.userId)
                                 && mSyncStorageEngine.getSyncAutomatically(account.account,
                                         account.userId, authority));
                 if (!syncAllowed) {
@@ -698,11 +750,12 @@
                     }
                     continue;
                 }
-
-                Pair<Long, Long> backoff = mSyncStorageEngine
-                        .getBackoff(account.account, account.userId, authority);
-                long delayUntil = mSyncStorageEngine.getDelayUntilTime(account.account,
-                        account.userId, authority);
+                SyncStorageEngine.EndPoint info =
+                        new SyncStorageEngine.EndPoint(
+                                account.account, authority, account.userId);
+                Pair<Long, Long> backoff = mSyncStorageEngine.getBackoff(info);
+                long delayUntil =
+                        mSyncStorageEngine.getDelayUntilTime(info);
                 final long backoffTime = backoff != null ? backoff.first : 0;
                 if (isSyncable < 0) {
                     // Initialisation sync.
@@ -712,6 +765,7 @@
                         Log.v(TAG, "schedule initialisation Sync:"
                                 + ", delay until " + delayUntil
                                 + ", run by " + 0
+                                + ", flex " + 0
                                 + ", source " + source
                                 + ", account " + account
                                 + ", authority " + authority
@@ -787,13 +841,12 @@
         mSyncHandler.sendMessage(msg);
     }
 
-    private void sendCancelSyncsMessage(final Account account, final int userId,
-            final String authority) {
+    private void sendCancelSyncsMessage(final SyncStorageEngine.EndPoint info, Bundle extras) {
         if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "sending MESSAGE_CANCEL");
         Message msg = mSyncHandler.obtainMessage();
         msg.what = SyncHandler.MESSAGE_CANCEL;
-        msg.obj = Pair.create(account, authority);
-        msg.arg1 = userId;
+        msg.setData(extras);
+        msg.obj = info;
         mSyncHandler.sendMessage(msg);
     }
 
@@ -816,10 +869,11 @@
     }
 
     private void clearBackoffSetting(SyncOperation op) {
-        mSyncStorageEngine.setBackoff(op.account, op.userId, op.authority,
-                SyncStorageEngine.NOT_IN_BACKOFF_MODE, SyncStorageEngine.NOT_IN_BACKOFF_MODE);
+        mSyncStorageEngine.setBackoff(op.target,
+                SyncStorageEngine.NOT_IN_BACKOFF_MODE,
+                SyncStorageEngine.NOT_IN_BACKOFF_MODE);
         synchronized (mSyncQueue) {
-            mSyncQueue.onBackoffChanged(op.account, op.userId, op.authority, 0);
+            mSyncQueue.onBackoffChanged(op.target, 0);
         }
     }
 
@@ -829,7 +883,7 @@
         final long now = SystemClock.elapsedRealtime();
 
         final Pair<Long, Long> previousSettings =
-                mSyncStorageEngine.getBackoff(op.account, op.userId, op.authority);
+                mSyncStorageEngine.getBackoff(op.target);
         long newDelayInMs = -1;
         if (previousSettings != null) {
             // don't increase backoff before current backoff is expired. This will happen for op's
@@ -860,14 +914,12 @@
 
         final long backoff = now + newDelayInMs;
 
-        mSyncStorageEngine.setBackoff(op.account, op.userId, op.authority,
-                backoff, newDelayInMs);
-
+        mSyncStorageEngine.setBackoff(op.target, backoff, newDelayInMs);
         op.backoff = backoff;
         op.updateEffectiveRunTime();
 
         synchronized (mSyncQueue) {
-            mSyncQueue.onBackoffChanged(op.account, op.userId, op.authority, backoff);
+            mSyncQueue.onBackoffChanged(op.target, backoff);
         }
     }
 
@@ -880,20 +932,20 @@
         } else {
             newDelayUntilTime = 0;
         }
-        mSyncStorageEngine
-                .setDelayUntilTime(op.account, op.userId, op.authority, newDelayUntilTime);
+        mSyncStorageEngine.setDelayUntilTime(op.target, newDelayUntilTime);
         synchronized (mSyncQueue) {
-            mSyncQueue.onDelayUntilTimeChanged(op.account, op.authority, newDelayUntilTime);
+            mSyncQueue.onDelayUntilTimeChanged(op.target, newDelayUntilTime);
         }
     }
 
     /**
-     * Cancel the active sync if it matches the authority and account.
-     * @param account limit the cancelations to syncs with this account, if non-null
-     * @param authority limit the cancelations to syncs with this authority, if non-null
+     * Cancel the active sync if it matches the target.
+     * @param info object containing info about which syncs to cancel. The target can
+     * have null account/provider info to specify all accounts/providers.
+     * @param extras if non-null, specifies the exact sync to remove.
      */
-    public void cancelActiveSync(Account account, int userId, String authority) {
-        sendCancelSyncsMessage(account, userId, authority);
+    public void cancelActiveSync(SyncStorageEngine.EndPoint info, Bundle extras) {
+        sendCancelSyncsMessage(info, extras);
     }
 
     /**
@@ -922,24 +974,40 @@
 
     /**
      * Remove scheduled sync operations.
-     * @param account limit the removals to operations with this account, if non-null
-     * @param authority limit the removals to operations with this authority, if non-null
+     * @param info limit the removals to operations that match this target. The target can
+     * have null account/provider info to specify all accounts/providers.
      */
-    public void clearScheduledSyncOperations(Account account, int userId, String authority) {
+    public void clearScheduledSyncOperations(SyncStorageEngine.EndPoint info) {
         synchronized (mSyncQueue) {
-            mSyncQueue.remove(account, userId, authority);
+            mSyncQueue.remove(info, null /* all operations */);
         }
-        mSyncStorageEngine.setBackoff(account, userId, authority,
+        mSyncStorageEngine.setBackoff(info,
                 SyncStorageEngine.NOT_IN_BACKOFF_MODE, SyncStorageEngine.NOT_IN_BACKOFF_MODE);
     }
 
+    /**
+     * Remove a specified sync, if it exists.
+     * @param info Authority for which the sync is to be removed.
+     * @param extras extras bundle to uniquely identify sync.
+     */
+    public void cancelScheduledSyncOperation(SyncStorageEngine.EndPoint info, Bundle extras) {
+        synchronized (mSyncQueue) {
+            mSyncQueue.remove(info, extras);
+        }
+        // Reset the back-off if there are no more syncs pending.
+        if (!mSyncStorageEngine.isSyncPending(info)) {
+            mSyncStorageEngine.setBackoff(info,
+                    SyncStorageEngine.NOT_IN_BACKOFF_MODE, SyncStorageEngine.NOT_IN_BACKOFF_MODE);
+        }
+    }
+
     void maybeRescheduleSync(SyncResult syncResult, SyncOperation operation) {
         boolean isLoggable = Log.isLoggable(TAG, Log.DEBUG);
         if (isLoggable) {
             Log.d(TAG, "encountered error(s) during the sync: " + syncResult + ", " + operation);
         }
 
-        operation = new SyncOperation(operation);
+        operation = new SyncOperation(operation, 0L /* newRunTimeFromNow */);
 
         // The SYNC_EXTRAS_IGNORE_BACKOFF only applies to the first attempt to sync a given
         // request. Retries of the request will always honor the backoff, so clear the
@@ -948,25 +1016,29 @@
             operation.extras.remove(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF);
         }
 
-        // If this sync aborted because the internal sync loop retried too many times then
-        //   don't reschedule. Otherwise we risk getting into a retry loop.
-        // If the operation succeeded to some extent then retry immediately.
-        // If this was a two-way sync then retry soft errors with an exponential backoff.
-        // If this was an upward sync then schedule a two-way sync immediately.
-        // Otherwise do not reschedule.
         if (operation.extras.getBoolean(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY, false)) {
-            Log.d(TAG, "not retrying sync operation because SYNC_EXTRAS_DO_NOT_RETRY was specified "
-                    + operation);
+            if (isLoggable) {
+                Log.d(TAG, "not retrying sync operation because SYNC_EXTRAS_DO_NOT_RETRY was specified "
+                        + operation);
+            }
         } else if (operation.extras.getBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, false)
                 && !syncResult.syncAlreadyInProgress) {
+            // If this was an upward sync then schedule a two-way sync immediately.
             operation.extras.remove(ContentResolver.SYNC_EXTRAS_UPLOAD);
-            Log.d(TAG, "retrying sync operation as a two-way sync because an upload-only sync "
-                    + "encountered an error: " + operation);
+            if (isLoggable) {
+                Log.d(TAG, "retrying sync operation as a two-way sync because an upload-only sync "
+                        + "encountered an error: " + operation);
+            }
             scheduleSyncOperation(operation);
         } else if (syncResult.tooManyRetries) {
-            Log.d(TAG, "not retrying sync operation because it retried too many times: "
-                    + operation);
+            // If this sync aborted because the internal sync loop retried too many times then
+            //   don't reschedule. Otherwise we risk getting into a retry loop.
+            if (isLoggable) {
+                Log.d(TAG, "not retrying sync operation because it retried too many times: "
+                        + operation);
+            }
         } else if (syncResult.madeSomeProgress()) {
+            // If the operation succeeded to some extent then retry immediately.
             if (isLoggable) {
                 Log.d(TAG, "retrying sync operation because even though it had an error "
                         + "it achieved some success");
@@ -979,19 +1051,18 @@
             }
             scheduleSyncOperation(
                 new SyncOperation(
-                    operation.account, operation.userId,
-                    operation.reason,
-                    operation.syncSource,
-                    operation.authority, operation.extras,
-                    DELAY_RETRY_SYNC_IN_PROGRESS_IN_SECONDS * 1000, operation.flexTime,
-                    operation.backoff, operation.delayUntil, operation.allowParallelSyncs));
+                        operation,
+                        DELAY_RETRY_SYNC_IN_PROGRESS_IN_SECONDS * 1000 /* newRunTimeFromNow */)
+                );
         } else if (syncResult.hasSoftError()) {
+            // If this was a two-way sync then retry soft errors with an exponential backoff.
             if (isLoggable) {
                 Log.d(TAG, "retrying sync operation because it encountered a soft error: "
                         + operation);
             }
             scheduleSyncOperation(operation);
         } else {
+            // Otherwise do not reschedule.
             Log.d(TAG, "not retrying sync operation because the error is a hard error: "
                     + operation);
         }
@@ -1024,9 +1095,12 @@
         updateRunningAccounts();
 
         cancelActiveSync(
-                null /* any account */,
-                userId,
-                null /* any authority */);
+                new SyncStorageEngine.EndPoint(
+                        null /* any account */,
+                        null /* any authority */,
+                        userId),
+                        null /* any sync. */
+                );
     }
 
     private void onUserRemoved(int userId) {
@@ -1035,7 +1109,7 @@
         // Clean up the storage engine database
         mSyncStorageEngine.doDatabaseCleanup(new Account[0], userId);
         synchronized (mSyncQueue) {
-            mSyncQueue.removeUser(userId);
+            mSyncQueue.removeUserLocked(userId);
         }
     }
 
@@ -1047,6 +1121,7 @@
         final SyncOperation mSyncOperation;
         final long mHistoryRowId;
         ISyncAdapter mSyncAdapter;
+        ISyncServiceAdapter mSyncServiceAdapter;
         final long mStartTime;
         long mTimeoutStartTime;
         boolean mBound;
@@ -1054,6 +1129,7 @@
         final int mSyncAdapterUid;
         SyncInfo mSyncInfo;
         boolean mIsLinkedToDeath = false;
+        String mEventName;
 
         /**
          * Create an ActiveSyncContext for an impending sync and grab the wakelock for that
@@ -1072,10 +1148,10 @@
             mSyncOperation = syncOperation;
             mHistoryRowId = historyRowId;
             mSyncAdapter = null;
+            mSyncServiceAdapter = null;
             mStartTime = SystemClock.elapsedRealtime();
             mTimeoutStartTime = mStartTime;
-            mSyncWakeLock = mSyncHandler.getSyncWakeLock(
-                    mSyncOperation.account, mSyncOperation.authority);
+            mSyncWakeLock = mSyncHandler.getSyncWakeLock(mSyncOperation);
             mSyncWakeLock.setWorkSource(new WorkSource(syncAdapterUid));
             mSyncWakeLock.acquire();
         }
@@ -1102,7 +1178,7 @@
         public void onServiceConnected(ComponentName name, IBinder service) {
             Message msg = mSyncHandler.obtainMessage();
             msg.what = SyncHandler.MESSAGE_SERVICE_CONNECTED;
-            msg.obj = new ServiceConnectionData(this, ISyncAdapter.Stub.asInterface(service));
+            msg.obj = new ServiceConnectionData(this, service);
             mSyncHandler.sendMessage(msg);
         }
 
@@ -1113,13 +1189,13 @@
             mSyncHandler.sendMessage(msg);
         }
 
-        boolean bindToSyncAdapter(RegisteredServicesCache.ServiceInfo info, int userId) {
+        boolean bindToSyncAdapter(ComponentName serviceComponent, int userId) {
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
-                Log.d(TAG, "bindToSyncAdapter: " + info.componentName + ", connection " + this);
+                Log.d(TAG, "bindToSyncAdapter: " + serviceComponent + ", connection " + this);
             }
             Intent intent = new Intent();
             intent.setAction("android.content.SyncAdapter");
-            intent.setComponent(info.componentName);
+            intent.setComponent(serviceComponent);
             intent.putExtra(Intent.EXTRA_CLIENT_LABEL,
                     com.android.internal.R.string.sync_binding_label);
             intent.putExtra(Intent.EXTRA_CLIENT_INTENT, PendingIntent.getActivityAsUser(
@@ -1129,9 +1205,16 @@
             final boolean bindResult = mContext.bindServiceAsUser(intent, this,
                     Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND
                     | Context.BIND_ALLOW_OOM_MANAGEMENT,
-                    new UserHandle(mSyncOperation.userId));
+                    new UserHandle(mSyncOperation.target.userId));
             if (!bindResult) {
                 mBound = false;
+            } else {
+                try {
+                    mEventName = mSyncOperation.wakeLockName();
+                    mBatteryStats.noteEvent(BatteryStats.HistoryItem.EVENT_SYNC_START,
+                            mEventName, mSyncAdapterUid);
+                } catch (RemoteException e) {
+                }
             }
             return bindResult;
         }
@@ -1147,12 +1230,16 @@
             if (mBound) {
                 mBound = false;
                 mContext.unbindService(this);
+                try {
+                    mBatteryStats.noteEvent(BatteryStats.HistoryItem.EVENT_SYNC_FINISH,
+                            mEventName, mSyncAdapterUid);
+                } catch (RemoteException e) {
+                }
             }
             mSyncWakeLock.release();
             mSyncWakeLock.setWorkSource(null);
         }
 
-        @Override
         public String toString() {
             StringBuilder sb = new StringBuilder();
             toString(sb);
@@ -1291,11 +1378,13 @@
                 int row = table.getNumRows();
                 Pair<AuthorityInfo, SyncStatusInfo> syncAuthoritySyncStatus = 
                         mSyncStorageEngine.getCopyOfAuthorityWithSyncStatus(
-                                account.account, account.userId, syncAdapterType.type.authority);
+                                new SyncStorageEngine.EndPoint(
+                                        account.account,
+                                        syncAdapterType.type.authority,
+                                        account.userId));
                 SyncStorageEngine.AuthorityInfo settings = syncAuthoritySyncStatus.first;
                 SyncStatusInfo status = syncAuthoritySyncStatus.second;
-
-                String authority = settings.authority;
+                String authority = settings.target.provider;
                 if (authority.length() > 50) {
                     authority = authority.substring(authority.length() - 50);
                 }
@@ -1416,14 +1505,25 @@
             int maxAuthority = 0;
             int maxAccount = 0;
             for (SyncStorageEngine.SyncHistoryItem item : items) {
-                SyncStorageEngine.AuthorityInfo authority
+                SyncStorageEngine.AuthorityInfo authorityInfo
                         = mSyncStorageEngine.getAuthority(item.authorityId);
                 final String authorityName;
                 final String accountKey;
-                if (authority != null) {
-                    authorityName = authority.authority;
-                    accountKey = authority.account.name + "/" + authority.account.type
-                            + " u" + authority.userId;
+                if (authorityInfo != null) {
+                    if (authorityInfo.target.target_provider) {
+                        authorityName = authorityInfo.target.provider;
+                        accountKey = authorityInfo.target.account.name + "/"
+                                + authorityInfo.target.account.type
+                                + " u" + authorityInfo.target.userId;
+                    } else if (authorityInfo.target.target_service) {
+                        authorityName = authorityInfo.target.service.getPackageName() + "/"
+                                + authorityInfo.target.service.getClassName()
+                                + " u" + authorityInfo.target.userId;
+                        accountKey = "no account";
+                    } else {
+                        authorityName = "Unknown";
+                        accountKey = "Unknown";
+                    }
                 } else {
                     authorityName = "Unknown";
                     accountKey = "Unknown";
@@ -1544,14 +1644,25 @@
             final PackageManager pm = mContext.getPackageManager();
             for (int i = 0; i < N; i++) {
                 SyncStorageEngine.SyncHistoryItem item = items.get(i);
-                SyncStorageEngine.AuthorityInfo authority
+                SyncStorageEngine.AuthorityInfo authorityInfo
                         = mSyncStorageEngine.getAuthority(item.authorityId);
                 final String authorityName;
                 final String accountKey;
-                if (authority != null) {
-                    authorityName = authority.authority;
-                    accountKey = authority.account.name + "/" + authority.account.type
-                            + " u" + authority.userId;
+                if (authorityInfo != null) {
+                    if (authorityInfo.target.target_provider) {
+                        authorityName = authorityInfo.target.provider;
+                        accountKey = authorityInfo.target.account.name + "/"
+                                + authorityInfo.target.account.type
+                                + " u" + authorityInfo.target.userId;
+                    } else if (authorityInfo.target.target_service) {
+                        authorityName = authorityInfo.target.service.getPackageName() + "/"
+                                + authorityInfo.target.service.getClassName()
+                                + " u" + authorityInfo.target.userId;
+                        accountKey = "none";
+                    } else {
+                        authorityName = "Unknown";
+                        accountKey = "Unknown";
+                    }
                 } else {
                     authorityName = "Unknown";
                     accountKey = "Unknown";
@@ -1610,14 +1721,25 @@
                 if (extras == null || extras.size() == 0) {
                     continue;
                 }
-                final SyncStorageEngine.AuthorityInfo authority
+                final SyncStorageEngine.AuthorityInfo authorityInfo
                         = mSyncStorageEngine.getAuthority(item.authorityId);
                 final String authorityName;
                 final String accountKey;
-                if (authority != null) {
-                    authorityName = authority.authority;
-                    accountKey = authority.account.name + "/" + authority.account.type
-                            + " u" + authority.userId;
+                if (authorityInfo != null) {
+                    if (authorityInfo.target.target_provider) {
+                        authorityName = authorityInfo.target.provider;
+                        accountKey = authorityInfo.target.account.name + "/"
+                                + authorityInfo.target.account.type
+                                + " u" + authorityInfo.target.userId;
+                    } else if (authorityInfo.target.target_service) {
+                        authorityName = authorityInfo.target.service.getPackageName() + "/"
+                                + authorityInfo.target.service.getClassName()
+                                + " u" + authorityInfo.target.userId;
+                        accountKey = "none";
+                    } else {
+                        authorityName = "Unknown";
+                        accountKey = "Unknown";
+                    }
                 } else {
                     authorityName = "Unknown";
                     accountKey = "Unknown";
@@ -1761,10 +1883,11 @@
 
     class ServiceConnectionData {
         public final ActiveSyncContext activeSyncContext;
-        public final ISyncAdapter syncAdapter;
-        ServiceConnectionData(ActiveSyncContext activeSyncContext, ISyncAdapter syncAdapter) {
+        public final IBinder adapter;
+
+        ServiceConnectionData(ActiveSyncContext activeSyncContext, IBinder adapter) {
             this.activeSyncContext = activeSyncContext;
-            this.syncAdapter = syncAdapter;
+            this.adapter = adapter;
         }
     }
 
@@ -1784,11 +1907,11 @@
         public final SyncNotificationInfo mSyncNotificationInfo = new SyncNotificationInfo();
         private Long mAlarmScheduleTime = null;
         public final SyncTimeTracker mSyncTimeTracker = new SyncTimeTracker();
-        private final HashMap<Pair<Account, String>, PowerManager.WakeLock> mWakeLocks =
-                Maps.newHashMap();
+        private final HashMap<String, PowerManager.WakeLock> mWakeLocks = Maps.newHashMap();
+
         private List<Message> mBootQueue = new ArrayList<Message>();
 
-        public void onBootCompleted() {
+      public void onBootCompleted() {
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.v(TAG, "Boot completed, clearing boot queue.");
             }
@@ -1803,12 +1926,11 @@
             }
         }
 
-        private PowerManager.WakeLock getSyncWakeLock(Account account, String authority) {
-            final Pair<Account, String> wakeLockKey = Pair.create(account, authority);
+        private PowerManager.WakeLock getSyncWakeLock(SyncOperation operation) {
+            final String wakeLockKey = operation.wakeLockName();
             PowerManager.WakeLock wakeLock = mWakeLocks.get(wakeLockKey);
             if (wakeLock == null) {
-                final String name = SYNC_WAKE_LOCK_PREFIX + "/" + authority + "/" + account.type
-                        + "/" + account.name;
+                final String name = SYNC_WAKE_LOCK_PREFIX + wakeLockKey;
                 wakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, name);
                 wakeLock.setReferenceCounted(false);
                 mWakeLocks.put(wakeLockKey, wakeLock);
@@ -1861,7 +1983,6 @@
             super(looper);
         }
 
-        @Override
         public void handleMessage(Message msg) {
             if (tryEnqueueMessageUntilReadyToRun(msg)) {
                 return;
@@ -1881,12 +2002,13 @@
                 earliestFuturePollTime = scheduleReadyPeriodicSyncs();
                 switch (msg.what) {
                     case SyncHandler.MESSAGE_CANCEL: {
-                        Pair<Account, String> payload = (Pair<Account, String>) msg.obj;
+                        SyncStorageEngine.EndPoint payload = (SyncStorageEngine.EndPoint) msg.obj;
+                        Bundle extras = msg.peekData();
                         if (Log.isLoggable(TAG, Log.VERBOSE)) {
                             Log.d(TAG, "handleSyncHandlerMessage: MESSAGE_SERVICE_CANCEL: "
-                                    + payload.first + ", " + payload.second);
+                                    + payload + " bundle: " + extras);
                         }
-                        cancelActiveSyncLocked(payload.first, msg.arg1, payload.second);
+                        cancelActiveSyncLocked(payload, extras);
                         nextPendingSyncTime = maybeStartNextSyncLocked();
                         break;
                     }
@@ -1895,35 +2017,38 @@
                         if (Log.isLoggable(TAG, Log.VERBOSE)) {
                             Log.v(TAG, "handleSyncHandlerMessage: MESSAGE_SYNC_FINISHED");
                         }
-                        SyncHandlerMessagePayload payload = (SyncHandlerMessagePayload)msg.obj;
+                        SyncHandlerMessagePayload payload = (SyncHandlerMessagePayload) msg.obj;
                         if (!isSyncStillActive(payload.activeSyncContext)) {
                             Log.d(TAG, "handleSyncHandlerMessage: dropping since the "
                                     + "sync is no longer active: "
                                     + payload.activeSyncContext);
                             break;
                         }
-                        runSyncFinishedOrCanceledLocked(payload.syncResult, payload.activeSyncContext);
+                        runSyncFinishedOrCanceledLocked(payload.syncResult,
+                                payload.activeSyncContext);
 
                         // since a sync just finished check if it is time to start a new sync
                         nextPendingSyncTime = maybeStartNextSyncLocked();
                         break;
 
                     case SyncHandler.MESSAGE_SERVICE_CONNECTED: {
-                        ServiceConnectionData msgData = (ServiceConnectionData)msg.obj;
+                        ServiceConnectionData msgData = (ServiceConnectionData) msg.obj;
                         if (Log.isLoggable(TAG, Log.VERBOSE)) {
                             Log.d(TAG, "handleSyncHandlerMessage: MESSAGE_SERVICE_CONNECTED: "
                                     + msgData.activeSyncContext);
                         }
                         // check that this isn't an old message
                         if (isSyncStillActive(msgData.activeSyncContext)) {
-                            runBoundToSyncAdapter(msgData.activeSyncContext, msgData.syncAdapter);
+                            runBoundToAdapter(
+                                    msgData.activeSyncContext,
+                                    msgData.adapter);
                         }
                         break;
                     }
 
                     case SyncHandler.MESSAGE_SERVICE_DISCONNECTED: {
                         final ActiveSyncContext currentSyncContext =
-                                ((ServiceConnectionData)msg.obj).activeSyncContext;
+                                ((ServiceConnectionData) msg.obj).activeSyncContext;
                         if (Log.isLoggable(TAG, Log.VERBOSE)) {
                             Log.d(TAG, "handleSyncHandlerMessage: MESSAGE_SERVICE_DISCONNECTED: "
                                     + currentSyncContext);
@@ -1932,12 +2057,15 @@
                         if (isSyncStillActive(currentSyncContext)) {
                             // cancel the sync if we have a syncadapter, which means one is
                             // outstanding
-                            if (currentSyncContext.mSyncAdapter != null) {
-                                try {
+                            try {
+                                if (currentSyncContext.mSyncAdapter != null) {
                                     currentSyncContext.mSyncAdapter.cancelSync(currentSyncContext);
-                                } catch (RemoteException e) {
-                                    // we don't need to retry this in this case
+                                } else if (currentSyncContext.mSyncServiceAdapter != null) {
+                                    currentSyncContext.mSyncServiceAdapter
+                                        .cancelSync(currentSyncContext);
                                 }
+                            } catch (RemoteException e) {
+                                // We don't need to retry this in this case.
                             }
 
                             // pretend that the sync failed with an IOException,
@@ -1982,9 +2110,46 @@
             }
         }
 
+        private boolean isDispatchable(SyncStorageEngine.EndPoint target) {
+            final boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
+            if (target.target_provider) {
+                // skip the sync if the account of this operation no longer exists
+                AccountAndUser[] accounts = mRunningAccounts;
+                if (!containsAccountAndUser(
+                        accounts, target.account, target.userId)) {
+                    return false;
+                }
+                if (!mSyncStorageEngine.getMasterSyncAutomatically(target.userId)
+                        || !mSyncStorageEngine.getSyncAutomatically(
+                                target.account,
+                                target.userId,
+                                target.provider)) {
+                    if (isLoggable) {
+                        Log.v(TAG, "    Not scheduling periodic operation: sync turned off.");
+                    }
+                    return false;
+                }
+                if (getIsSyncable(target.account, target.userId, target.provider)
+                        == 0) {
+                    if (isLoggable) {
+                        Log.v(TAG, "    Not scheduling periodic operation: isSyncable == 0.");
+                    }
+                    return false;
+                }
+            } else if (target.target_service) {
+                if (mSyncStorageEngine.getIsTargetServiceActive(target.service, target.userId)) {
+                    if (isLoggable) {
+                        Log.v(TAG, "   Not scheduling periodic operation: isEnabled == 0.");
+                    }
+                    return false;
+                }
+            }
+            return true;
+        }
+
         /**
          * Turn any periodic sync operations that are ready to run into pending sync operations.
-         * @return the desired start time of the earliest future  periodic sync operation,
+         * @return the desired start time of the earliest future periodic sync operation,
          * in milliseconds since boot
          */
         private long scheduleReadyPeriodicSyncs() {
@@ -1992,14 +2157,7 @@
             if (isLoggable) {
                 Log.v(TAG, "scheduleReadyPeriodicSyncs");
             }
-            final boolean backgroundDataUsageAllowed =
-                    getConnectivityManager().getBackgroundDataSetting();
             long earliestFuturePollTime = Long.MAX_VALUE;
-            if (!backgroundDataUsageAllowed) {
-                return earliestFuturePollTime;
-            }
-
-            AccountAndUser[] accounts = mRunningAccounts;
 
             final long nowAbsolute = System.currentTimeMillis();
             final long shiftedNowAbsolute = (0 < nowAbsolute - mSyncRandomOffsetMillis)
@@ -2010,40 +2168,31 @@
             for (Pair<AuthorityInfo, SyncStatusInfo> info : infos) {
                 final AuthorityInfo authorityInfo = info.first;
                 final SyncStatusInfo status = info.second;
-                if (TextUtils.isEmpty(authorityInfo.authority)) {
-                    Log.e(TAG, "Got an empty provider string. Skipping: " + authorityInfo);
-                    continue;
-                }
-                // skip the sync if the account of this operation no longer exists
-                if (!containsAccountAndUser(
-                        accounts, authorityInfo.account, authorityInfo.userId)) {
+
+                if (TextUtils.isEmpty(authorityInfo.target.provider)) {
+                    Log.e(TAG, "Got an empty provider string. Skipping: "
+                        + authorityInfo.target.provider);
                     continue;
                 }
 
-                if (!mSyncStorageEngine.getMasterSyncAutomatically(authorityInfo.userId)
-                        || !mSyncStorageEngine.getSyncAutomatically(
-                                authorityInfo.account, authorityInfo.userId,
-                                authorityInfo.authority)) {
-                    continue;
-                }
-
-                if (getIsSyncable(
-                        authorityInfo.account, authorityInfo.userId, authorityInfo.authority)
-                        == 0) {
+                if (!isDispatchable(authorityInfo.target)) {
                     continue;
                 }
 
                 for (int i = 0, N = authorityInfo.periodicSyncs.size(); i < N; i++) {
                     final PeriodicSync sync = authorityInfo.periodicSyncs.get(i);
                     final Bundle extras = sync.extras;
-                    final long periodInMillis = sync.period * 1000;
-                    final long flexInMillis = sync.flexTime * 1000;
+                    final Long periodInMillis = sync.period * 1000;
+                    final Long flexInMillis = sync.flexTime * 1000;
                     // Skip if the period is invalid.
                     if (periodInMillis <= 0) {
                         continue;
                     }
                     // Find when this periodic sync was last scheduled to run.
                     final long lastPollTimeAbsolute = status.getPeriodicSyncTime(i);
+                    final long shiftedLastPollTimeAbsolute =
+                            (0 < lastPollTimeAbsolute - mSyncRandomOffsetMillis) ?
+                                    (lastPollTimeAbsolute - mSyncRandomOffsetMillis) : 0;
                     long remainingMillis
                         = periodInMillis - (shiftedNowAbsolute % periodInMillis);
                     long timeSinceLastRunMillis
@@ -2054,12 +2203,13 @@
                     boolean runEarly = remainingMillis <= flexInMillis
                             && timeSinceLastRunMillis > periodInMillis - flexInMillis;
                     if (isLoggable) {
-                        Log.v(TAG, "sync: " + i + " for " + authorityInfo.authority + "."
+                        Log.v(TAG, "sync: " + i + " for " + authorityInfo.target + "."
                         + " period: " + (periodInMillis)
                         + " flex: " + (flexInMillis)
                         + " remaining: " + (remainingMillis)
                         + " time_since_last: " + timeSinceLastRunMillis
                         + " last poll absol: " + lastPollTimeAbsolute
+                        + " last poll shifed: " + shiftedLastPollTimeAbsolute
                         + " shifted now: " + shiftedNowAbsolute
                         + " run_early: " + runEarly);
                     }
@@ -2073,41 +2223,49 @@
                      * future, sync now and reinitialize. This can happen for
                      * example if the user changed the time, synced and changed
                      * back.
-                     * Case 3: If we failed to sync at the last scheduled
-                     * time.
+                     * Case 3: If we failed to sync at the last scheduled time.
                      * Case 4: This sync is close enough to the time that we can schedule it.
                      */
-                    if (runEarly // Case 4
-                            || remainingMillis == periodInMillis // Case 1
+                    if (remainingMillis == periodInMillis // Case 1
                             || lastPollTimeAbsolute > nowAbsolute // Case 2
-                            || timeSinceLastRunMillis >= periodInMillis) { // Case 3
+                            || timeSinceLastRunMillis >= periodInMillis // Case 3
+                            || runEarly) { // Case 4
                         // Sync now
-                        
-                        final Pair<Long, Long> backoff = mSyncStorageEngine.getBackoff(
-                                authorityInfo.account, authorityInfo.userId,
-                                authorityInfo.authority);
-                        final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo;
-                        syncAdapterInfo = mSyncAdapters.getServiceInfo(
-                                SyncAdapterType.newKey(
-                                        authorityInfo.authority, authorityInfo.account.type),
-                                authorityInfo.userId);
-                        if (syncAdapterInfo == null) {
-                            continue;
-                        }
+                        SyncStorageEngine.EndPoint target = authorityInfo.target;
+                        final Pair<Long, Long> backoff =
+                                mSyncStorageEngine.getBackoff(target);
                         mSyncStorageEngine.setPeriodicSyncTime(authorityInfo.ident,
                                 authorityInfo.periodicSyncs.get(i), nowAbsolute);
-                        scheduleSyncOperation(
-                                new SyncOperation(authorityInfo.account, authorityInfo.userId,
-                                        SyncOperation.REASON_PERIODIC,
-                                        SyncStorageEngine.SOURCE_PERIODIC,
-                                        authorityInfo.authority, extras,
-                                        0 /* runtime */, 0 /* flex */,
-                                                backoff != null ? backoff.first : 0,
-                                        mSyncStorageEngine.getDelayUntilTime(
-                                                authorityInfo.account, authorityInfo.userId,
-                                                authorityInfo.authority),
-                                        syncAdapterInfo.type.allowParallelSyncs()));
-                        
+
+                        if (target.target_provider) {
+                            final RegisteredServicesCache.ServiceInfo<SyncAdapterType>
+                                syncAdapterInfo = mSyncAdapters.getServiceInfo(
+                                    SyncAdapterType.newKey(
+                                            target.provider, target.account.type),
+                                    target.userId);
+                            if (syncAdapterInfo == null) {
+                                continue;
+                            }
+                            scheduleSyncOperation(
+                                    new SyncOperation(target.account, target.userId,
+                                            SyncOperation.REASON_PERIODIC,
+                                            SyncStorageEngine.SOURCE_PERIODIC,
+                                            target.provider, extras,
+                                            0 /* runtime */, 0 /* flex */,
+                                            backoff != null ? backoff.first : 0,
+                                            mSyncStorageEngine.getDelayUntilTime(target),
+                                            syncAdapterInfo.type.allowParallelSyncs()));
+                        } else if (target.target_service) {
+                            scheduleSyncOperation(
+                                    new SyncOperation(target.service, target.userId,
+                                            SyncOperation.REASON_PERIODIC,
+                                            SyncStorageEngine.SOURCE_PERIODIC,
+                                            extras,
+                                            0 /* runtime */,
+                                            0 /* flex */,
+                                            backoff != null ? backoff.first : 0,
+                                            mSyncStorageEngine.getDelayUntilTime(target)));
+                        }
                     }
                     // Compute when this periodic sync should next run.
                     long nextPollTimeAbsolute;
@@ -2154,8 +2312,7 @@
 
             // If the accounts aren't known yet then we aren't ready to run. We will be kicked
             // when the account lookup request does complete.
-            AccountAndUser[] accounts = mRunningAccounts;
-            if (accounts == INITIAL_ACCOUNTS_ARRAY) {
+            if (mRunningAccounts == INITIAL_ACCOUNTS_ARRAY) {
                 if (isLoggable) {
                     Log.v(TAG, "maybeStartNextSync: accounts not known, skipping");
                 }
@@ -2165,9 +2322,6 @@
             // Otherwise consume SyncOperations from the head of the SyncQueue until one is
             // found that is runnable (not disabled, etc). If that one is ready to run then
             // start it, otherwise just get out.
-            final boolean backgroundDataUsageAllowed =
-                    getConnectivityManager().getBackgroundDataSetting();
-
             final long now = SystemClock.elapsedRealtime();
 
             // will be set to the next time that a sync should be considered for running
@@ -2189,40 +2343,23 @@
                 while (operationIterator.hasNext()) {
                     final SyncOperation op = operationIterator.next();
 
-                    // Drop the sync if the account of this operation no longer exists.
-                    if (!containsAccountAndUser(accounts, op.account, op.userId)) {
-                        operationIterator.remove();
-                        mSyncStorageEngine.deleteFromPending(op.pendingOperation);
-                        if (isLoggable) {
-                            Log.v(TAG, "    Dropping sync operation: account doesn't exist.");
-                        }
-                        continue;
-                    }
-
-                    // Drop this sync request if it isn't syncable.
-                    int syncableState = getIsSyncable(
-                            op.account, op.userId, op.authority);
-                    if (syncableState == 0) {
-                        operationIterator.remove();
-                        mSyncStorageEngine.deleteFromPending(op.pendingOperation);
-                        if (isLoggable) {
-                            Log.v(TAG, "    Dropping sync operation: isSyncable == 0.");
-                        }
-                        continue;
-                    }
-
-                    // If the user is not running, drop the request.
-                    if (!activityManager.isUserRunning(op.userId)) {
-                        final UserInfo userInfo = mUserManager.getUserInfo(op.userId);
+                    // If the user is not running, skip the request.
+                    if (!activityManager.isUserRunning(op.target.userId)) {
+                        final UserInfo userInfo = mUserManager.getUserInfo(op.target.userId);
                         if (userInfo == null) {
-                            removedUsers.add(op.userId);
+                            removedUsers.add(op.target.userId);
                         }
                         if (isLoggable) {
-                            Log.v(TAG, "    Dropping sync operation: user not running.");
+                            Log.v(TAG, "    Dropping all sync operations for + "
+                                    + op.target.userId + ": user not running.");
                         }
                         continue;
                     }
-
+                    if (!isOperationValidLocked(op)) {
+                        operationIterator.remove();
+                        mSyncStorageEngine.deleteFromPending(op.pendingOperation);
+                        continue;
+                    }
                     // If the next run time is in the future, even given the flexible scheduling,
                     // return the time.
                     if (op.effectiveRunTime - op.flexTime > now) {
@@ -2230,51 +2367,16 @@
                             nextReadyToRunTime = op.effectiveRunTime;
                         }
                         if (isLoggable) {
-                            Log.v(TAG, "    Dropping sync operation: Sync too far in future.");
+                            Log.v(TAG, "    Not running sync operation: Sync too far in future."
+                                    + "effective: " + op.effectiveRunTime + " flex: " + op.flexTime
+                                    + " now: " + now);
                         }
                         continue;
                     }
-
-                    // If the op isn't allowed on metered networks and we're on one, drop it.
-                    if (getConnectivityManager().isActiveNetworkMetered()
-                            && op.isMeteredDisallowed()) {
-                        operationIterator.remove();
-                        mSyncStorageEngine.deleteFromPending(op.pendingOperation);
-                        continue;
-                    }
-
-                    // TODO: change this behaviour for non-registered syncs.
-                    final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo;
-                    syncAdapterInfo = mSyncAdapters.getServiceInfo(
-                            SyncAdapterType.newKey(op.authority, op.account.type), op.userId);
-
-                    // only proceed if network is connected for requesting UID
-                    final boolean uidNetworkConnected;
-                    if (syncAdapterInfo != null) {
-                        final NetworkInfo networkInfo = getConnectivityManager()
-                                .getActiveNetworkInfoForUid(syncAdapterInfo.uid);
-                        uidNetworkConnected = networkInfo != null && networkInfo.isConnected();
-                    } else {
-                        uidNetworkConnected = false;
-                    }
-
-                    // skip the sync if it isn't manual, and auto sync or
-                    // background data usage is disabled or network is
-                    // disconnected for the target UID.
-                    if (!op.extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false)
-                            && (syncableState > 0)
-                            && (!mSyncStorageEngine.getMasterSyncAutomatically(op.userId)
-                                || !backgroundDataUsageAllowed
-                                || !uidNetworkConnected
-                                || !mSyncStorageEngine.getSyncAutomatically(
-                                       op.account, op.userId, op.authority))) {
-                        operationIterator.remove();
-                        mSyncStorageEngine.deleteFromPending(op.pendingOperation);
-                        continue;
-                    }
-
+                    // Add this sync to be run.
                     operations.add(op);
                 }
+
                 for (Integer user : removedUsers) {
                     // if it's still removed
                     if (mUserManager.getUserInfo(user) == null) {
@@ -2316,13 +2418,9 @@
                             }
                         }
                     }
-                    if (activeOp.account.type.equals(candidate.account.type)
-                            && activeOp.authority.equals(candidate.authority)
-                            && activeOp.userId == candidate.userId
-                            && (!activeOp.allowParallelSyncs
-                                || activeOp.account.name.equals(candidate.account.name))) {
+                    if (activeOp.isConflict(candidate)) {
                         conflict = activeSyncContext;
-                        // don't break out since we want to do a full count of the varieties
+                        // don't break out since we want to do a full count of the varieties.
                     } else {
                         if (candidateIsInitialization == activeOp.isInitialization()
                                 && activeSyncContext.mStartTime + MAX_TIME_PER_SYNC < now) {
@@ -2372,8 +2470,8 @@
                     // is null. Reschedule the active sync and start the candidate.
                     toReschedule = oldestNonExpeditedRegular;
                     if (Log.isLoggable(TAG, Log.VERBOSE)) {
-                        Log.v(TAG, "canceling and rescheduling sync since an expedited is ready to run, "
-                                + oldestNonExpeditedRegular);
+                        Log.v(TAG, "canceling and rescheduling sync since an expedited is ready to"
+                                + " run, " + oldestNonExpeditedRegular);
                     }
                 } else if (longRunning != null
                         && (candidateIsInitialization
@@ -2402,7 +2500,114 @@
             }
 
             return nextReadyToRunTime;
-     }
+        }
+
+        /**
+         * Determine if a sync is no longer valid and should be dropped from the sync queue and its
+         * pending op deleted.
+         * @param op operation for which the sync is to be scheduled.
+         */
+        private boolean isOperationValidLocked(SyncOperation op) {
+            final boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
+            int targetUid;
+            int state;
+            final SyncStorageEngine.EndPoint target = op.target;
+            boolean syncEnabled = mSyncStorageEngine.getMasterSyncAutomatically(target.userId);
+            if (target.target_provider) {
+                // Drop the sync if the account of this operation no longer exists.
+                AccountAndUser[] accounts = mRunningAccounts;
+                if (!containsAccountAndUser(accounts, target.account, target.userId)) {
+                    if (isLoggable) {
+                        Log.v(TAG, "    Dropping sync operation: account doesn't exist.");
+                    }
+                    return false;
+                }
+                // Drop this sync request if it isn't syncable.
+                state = getIsSyncable(target.account, target.userId, target.provider);
+                if (state == 0) {
+                    if (isLoggable) {
+                        Log.v(TAG, "    Dropping sync operation: isSyncable == 0.");
+                    }
+                    return false;
+                }
+                syncEnabled = syncEnabled && mSyncStorageEngine.getSyncAutomatically(
+                        target.account, target.userId, target.provider);
+
+                final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo;
+                syncAdapterInfo = mSyncAdapters.getServiceInfo(
+                        SyncAdapterType.newKey(
+                                target.provider, target.account.type), target.userId);
+                if (syncAdapterInfo != null) {
+                    targetUid = syncAdapterInfo.uid;
+                } else {
+                    if (isLoggable) {
+                        Log.v(TAG, "    Dropping sync operation: No sync adapter registered"
+                                + "for: " + target);
+                    }
+                    return false;
+                }
+            } else if (target.target_service) {
+                state = mSyncStorageEngine.getIsTargetServiceActive(target.service, target.userId)
+                            ? 1 : 0;
+                if (state == 0) {
+                    // TODO: Change this to not drop disabled syncs - keep them in the pending queue.
+                    if (isLoggable) {
+                        Log.v(TAG, "    Dropping sync operation: isActive == 0.");
+                    }
+                    return false;
+                }
+                try {
+                    targetUid = mContext.getPackageManager()
+                            .getServiceInfo(target.service, 0)
+                            .applicationInfo
+                            .uid;
+                } catch (PackageManager.NameNotFoundException e) {
+                    if (isLoggable) {
+                        Log.v(TAG, "    Dropping sync operation: No service registered for: "
+                                + target.service);
+                    }
+                    return false;
+                }
+            } else {
+                Log.e(TAG, "Unknown target for Sync Op: " + target);
+                return false;
+            }
+
+            // We ignore system settings that specify the sync is invalid if:
+            // 1) It's manual - we try it anyway. When/if it fails it will be rescheduled.
+            //      or
+            // 2) it's an initialisation sync - we just need to connect to it.
+            final boolean ignoreSystemConfiguration =
+                    op.extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false)
+                    || (state < 0);
+
+            // Sync not enabled.
+            if (!syncEnabled && !ignoreSystemConfiguration) {
+                if (isLoggable) {
+                    Log.v(TAG, "    Dropping sync operation: disallowed by settings/network.");
+                }
+                return false;
+            }
+            // Network down.
+            final NetworkInfo networkInfo = getConnectivityManager()
+                    .getActiveNetworkInfoForUid(targetUid);
+            final boolean uidNetworkConnected = networkInfo != null && networkInfo.isConnected();
+            if (!uidNetworkConnected && !ignoreSystemConfiguration) {
+                if (isLoggable) {
+                    Log.v(TAG, "    Dropping sync operation: disallowed by settings/network.");
+                }
+                return false;
+            }
+            // Metered network.
+            if (op.isNotAllowedOnMetered() && getConnectivityManager().isActiveNetworkMetered()
+                    && !ignoreSystemConfiguration) {
+                if (isLoggable) {
+                    Log.v(TAG, "    Dropping sync operation: not allowed on metered network.");
+                }
+                return false;
+            }
+            return true;
+        }
 
         private boolean dispatchSyncOperation(SyncOperation op) {
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
@@ -2412,27 +2617,48 @@
                     Log.v(TAG, syncContext.toString());
                 }
             }
-
-            // connect to the sync adapter
-            SyncAdapterType syncAdapterType = SyncAdapterType.newKey(op.authority, op.account.type);
-            final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo;
-            syncAdapterInfo = mSyncAdapters.getServiceInfo(syncAdapterType, op.userId);
-            if (syncAdapterInfo == null) {
-                Log.d(TAG, "can't find a sync adapter for " + syncAdapterType
-                        + ", removing settings for it");
-                mSyncStorageEngine.removeAuthority(op.account, op.userId, op.authority);
-                return false;
+            // Connect to the sync adapter.
+            int targetUid;
+            ComponentName targetComponent;
+            final SyncStorageEngine.EndPoint info = op.target;
+            if (info.target_provider) {
+                SyncAdapterType syncAdapterType =
+                        SyncAdapterType.newKey(info.provider, info.account.type);
+                final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo;
+                syncAdapterInfo = mSyncAdapters.getServiceInfo(syncAdapterType, info.userId);
+                if (syncAdapterInfo == null) {
+                    Log.d(TAG, "can't find a sync adapter for " + syncAdapterType
+                            + ", removing settings for it");
+                    mSyncStorageEngine.removeAuthority(info);
+                    return false;
+                }
+                targetUid = syncAdapterInfo.uid;
+                targetComponent = syncAdapterInfo.componentName;
+            } else {
+                // TODO: Store the uid of the service as part of the authority info in order to
+                // avoid this call?
+                try {
+                    targetUid = mContext.getPackageManager()
+                            .getServiceInfo(info.service, 0)
+                            .applicationInfo
+                            .uid;
+                    targetComponent = info.service;
+                } catch(PackageManager.NameNotFoundException e) {
+                    Log.d(TAG, "Can't find a service for " + info.service
+                            + ", removing settings for it");
+                    mSyncStorageEngine.removeAuthority(info);
+                    return false;
+                }
             }
-
             ActiveSyncContext activeSyncContext =
-                    new ActiveSyncContext(op, insertStartSyncEvent(op), syncAdapterInfo.uid);
+                    new ActiveSyncContext(op, insertStartSyncEvent(op), targetUid);
             activeSyncContext.mSyncInfo = mSyncStorageEngine.addActiveSync(activeSyncContext);
             mActiveSyncContexts.add(activeSyncContext);
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.v(TAG, "dispatchSyncOperation: starting " + activeSyncContext);
             }
-            if (!activeSyncContext.bindToSyncAdapter(syncAdapterInfo, op.userId)) {
-                Log.e(TAG, "Bind attempt failed to " + syncAdapterInfo);
+            if (!activeSyncContext.bindToSyncAdapter(targetComponent, info.userId)) {
+                Log.e(TAG, "Bind attempt failed - target: " + targetComponent);
                 closeActiveSyncContext(activeSyncContext);
                 return false;
             }
@@ -2440,47 +2666,54 @@
             return true;
         }
 
-        private void runBoundToSyncAdapter(final ActiveSyncContext activeSyncContext,
-              ISyncAdapter syncAdapter) {
-            activeSyncContext.mSyncAdapter = syncAdapter;
+        private void runBoundToAdapter(final ActiveSyncContext activeSyncContext,
+                IBinder syncAdapter) {
             final SyncOperation syncOperation = activeSyncContext.mSyncOperation;
             try {
                 activeSyncContext.mIsLinkedToDeath = true;
-                syncAdapter.asBinder().linkToDeath(activeSyncContext, 0);
+                syncAdapter.linkToDeath(activeSyncContext, 0);
 
-                syncAdapter.startSync(activeSyncContext, syncOperation.authority,
-                        syncOperation.account, syncOperation.extras);
+                if (syncOperation.target.target_provider) {
+                    activeSyncContext.mSyncAdapter = ISyncAdapter.Stub.asInterface(syncAdapter);
+                    activeSyncContext.mSyncAdapter
+                        .startSync(activeSyncContext, syncOperation.target.provider,
+                                syncOperation.target.account, syncOperation.extras);
+                } else if (syncOperation.target.target_service) {
+                    activeSyncContext.mSyncServiceAdapter =
+                            ISyncServiceAdapter.Stub.asInterface(syncAdapter);
+                    activeSyncContext.mSyncServiceAdapter
+                        .startSync(activeSyncContext, syncOperation.extras);
+                }
             } catch (RemoteException remoteExc) {
                 Log.d(TAG, "maybeStartNextSync: caught a RemoteException, rescheduling", remoteExc);
                 closeActiveSyncContext(activeSyncContext);
                 increaseBackoffSetting(syncOperation);
-                scheduleSyncOperation(new SyncOperation(syncOperation));
+                scheduleSyncOperation(
+                        new SyncOperation(syncOperation, 0L /* newRunTimeFromNow */));
             } catch (RuntimeException exc) {
                 closeActiveSyncContext(activeSyncContext);
                 Log.e(TAG, "Caught RuntimeException while starting the sync " + syncOperation, exc);
             }
         }
 
-        private void cancelActiveSyncLocked(Account account, int userId, String authority) {
+        /**
+         * Cancel the sync for the provided target that matches the given bundle.
+         * @param info can have null fields to indicate all the active syncs for that field.
+         */
+        private void cancelActiveSyncLocked(SyncStorageEngine.EndPoint info, Bundle extras) {
             ArrayList<ActiveSyncContext> activeSyncs =
                     new ArrayList<ActiveSyncContext>(mActiveSyncContexts);
             for (ActiveSyncContext activeSyncContext : activeSyncs) {
                 if (activeSyncContext != null) {
-                    // if an account was specified then only cancel the sync if it matches
-                    if (account != null) {
-                        if (!account.equals(activeSyncContext.mSyncOperation.account)) {
-                            continue;
-                        }
+                    final SyncStorageEngine.EndPoint opInfo =
+                            activeSyncContext.mSyncOperation.target;
+                    if (!opInfo.matchesSpec(info)) {
+                        continue;
                     }
-                    // if an authority was specified then only cancel the sync if it matches
-                    if (authority != null) {
-                        if (!authority.equals(activeSyncContext.mSyncOperation.authority)) {
-                            continue;
-                        }
-                    }
-                    // check if the userid matches
-                    if (userId != UserHandle.USER_ALL
-                            && userId != activeSyncContext.mSyncOperation.userId) {
+                    if (extras != null &&
+                            !syncExtrasEquals(activeSyncContext.mSyncOperation.extras,
+                                    extras,
+                                    false /* no config settings */)) {
                         continue;
                     }
                     runSyncFinishedOrCanceledLocked(null /* no result since this is a cancel */,
@@ -2493,16 +2726,20 @@
                 ActiveSyncContext activeSyncContext) {
             boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
 
+            final SyncOperation syncOperation = activeSyncContext.mSyncOperation;
+            final SyncStorageEngine.EndPoint info = syncOperation.target;
+
             if (activeSyncContext.mIsLinkedToDeath) {
-                activeSyncContext.mSyncAdapter.asBinder().unlinkToDeath(activeSyncContext, 0);
+                if (info.target_provider) {
+                    activeSyncContext.mSyncAdapter.asBinder().unlinkToDeath(activeSyncContext, 0);
+                } else {
+                    activeSyncContext.mSyncServiceAdapter.asBinder()
+                        .unlinkToDeath(activeSyncContext, 0);
+                }
                 activeSyncContext.mIsLinkedToDeath = false;
             }
             closeActiveSyncContext(activeSyncContext);
-
-            final SyncOperation syncOperation = activeSyncContext.mSyncOperation;
-
             final long elapsedTime = SystemClock.elapsedRealtime() - activeSyncContext.mStartTime;
-
             String historyMessage;
             int downstreamActivity;
             int upstreamActivity;
@@ -2544,6 +2781,12 @@
                     } catch (RemoteException e) {
                         // we don't need to retry this in this case
                     }
+                } else if (activeSyncContext.mSyncServiceAdapter != null) {
+                    try {
+                        activeSyncContext.mSyncServiceAdapter.cancelSync(activeSyncContext);
+                    } catch (RemoteException e) {
+                        // we don't need to retry this in this case
+                    }
                 }
                 historyMessage = SyncStorageEngine.MESG_CANCELED;
                 downstreamActivity = 0;
@@ -2553,24 +2796,35 @@
             stopSyncEvent(activeSyncContext.mHistoryRowId, syncOperation, historyMessage,
                     upstreamActivity, downstreamActivity, elapsedTime);
 
-            if (syncResult != null && syncResult.tooManyDeletions) {
-                installHandleTooManyDeletesNotification(syncOperation.account,
-                        syncOperation.authority, syncResult.stats.numDeletes,
-                        syncOperation.userId);
+            // Check for full-resync and schedule it after closing off the last sync.
+            if (info.target_provider) {
+                if (syncResult != null && syncResult.tooManyDeletions) {
+                    installHandleTooManyDeletesNotification(info.account,
+                            info.provider, syncResult.stats.numDeletes,
+                            info.userId);
+                } else {
+                    mNotificationMgr.cancelAsUser(null,
+                            info.account.hashCode() ^ info.provider.hashCode(),
+                            new UserHandle(info.userId));
+                }
+                if (syncResult != null && syncResult.fullSyncRequested) {
+                    scheduleSyncOperation(
+                            new SyncOperation(info.account, info.userId,
+                                syncOperation.reason,
+                                syncOperation.syncSource, info.provider, new Bundle(),
+                                0 /* delay */, 0 /* flex */,
+                                syncOperation.backoff, syncOperation.delayUntil,
+                                syncOperation.allowParallelSyncs));
+                }
             } else {
-                mNotificationMgr.cancelAsUser(null,
-                        syncOperation.account.hashCode() ^ syncOperation.authority.hashCode(),
-                        new UserHandle(syncOperation.userId));
-            }
-
-            if (syncResult != null && syncResult.fullSyncRequested) {
-                scheduleSyncOperation(
-                        new SyncOperation(syncOperation.account, syncOperation.userId,
-                            syncOperation.reason,
-                            syncOperation.syncSource, syncOperation.authority, new Bundle(),
-                            0 /* delay */, 0 /* flex */,
-                            syncOperation.backoff, syncOperation.delayUntil,
-                            syncOperation.allowParallelSyncs));
+                if (syncResult != null && syncResult.fullSyncRequested) {
+                    scheduleSyncOperation(
+                            new SyncOperation(info.service, info.userId,
+                                syncOperation.reason,
+                                syncOperation.syncSource, new Bundle(),
+                                0 /* delay */, 0 /* flex */,
+                                syncOperation.backoff, syncOperation.delayUntil));
+                }
             }
             // no need to schedule an alarm, as that will be done by our caller.
         }
@@ -2579,7 +2833,7 @@
             activeSyncContext.close();
             mActiveSyncContexts.remove(activeSyncContext);
             mSyncStorageEngine.removeActiveSync(activeSyncContext.mSyncInfo,
-                    activeSyncContext.mSyncOperation.userId);
+                    activeSyncContext.mSyncOperation.target.userId);
         }
 
         /**
@@ -2842,26 +3096,16 @@
         }
 
         public long insertStartSyncEvent(SyncOperation syncOperation) {
-            final int source = syncOperation.syncSource;
             final long now = System.currentTimeMillis();
-
-            EventLog.writeEvent(2720, syncOperation.authority,
-                                SyncStorageEngine.EVENT_START, source,
-                                syncOperation.account.name.hashCode());
-
-            return mSyncStorageEngine.insertStartSyncEvent(
-                    syncOperation.account, syncOperation.userId, syncOperation.reason,
-                    syncOperation.authority,
-                    now, source, syncOperation.isInitialization(), syncOperation.extras
-            );
+            EventLog.writeEvent(2720,
+                    syncOperation.toEventLog(SyncStorageEngine.EVENT_START));
+            return mSyncStorageEngine.insertStartSyncEvent(syncOperation, now);
         }
 
         public void stopSyncEvent(long rowId, SyncOperation syncOperation, String resultMessage,
                 int upstreamActivity, int downstreamActivity, long elapsedTime) {
-            EventLog.writeEvent(2720, syncOperation.authority,
-                                SyncStorageEngine.EVENT_STOP, syncOperation.syncSource,
-                                syncOperation.account.name.hashCode());
-
+            EventLog.writeEvent(2720,
+                    syncOperation.toEventLog(SyncStorageEngine.EVENT_STOP));
             mSyncStorageEngine.stopSyncEvent(rowId, elapsedTime,
                     resultMessage, downstreamActivity, upstreamActivity);
         }
@@ -2876,6 +3120,83 @@
         return false;
     }
 
+    /**
+     * Sync extra comparison function.
+     * @param b1 bundle to compare
+     * @param b2 other bundle to compare
+     * @param includeSyncSettings if false, ignore system settings in bundle.
+     */
+    public static boolean syncExtrasEquals(Bundle b1, Bundle b2, boolean includeSyncSettings) {
+        if (b1 == b2) {
+            return true;
+        }
+        // Exit early if we can.
+        if (includeSyncSettings && b1.size() != b2.size()) {
+            return false;
+        }
+        Bundle bigger = b1.size() > b2.size() ? b1 : b2;
+        Bundle smaller = b1.size() > b2.size() ? b2 : b1;
+        for (String key : bigger.keySet()) {
+            if (!includeSyncSettings && isSyncSetting(key)) {
+                continue;
+            }
+            if (!smaller.containsKey(key)) {
+                return false;
+            }
+            if (!bigger.get(key).equals(smaller.get(key))) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * TODO: Get rid of this when we separate sync settings extras from dev specified extras.
+     * @return true if the provided key is used by the SyncManager in scheduling the sync.
+     */
+    private static boolean isSyncSetting(String key) {
+        if (key.equals(ContentResolver.SYNC_EXTRAS_EXPEDITED)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_DO_NOT_RETRY)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_MANUAL)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_UPLOAD)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_DISCARD_LOCAL_DELETIONS)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_EXPECTED_UPLOAD)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_EXPECTED_DOWNLOAD)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_PRIORITY)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_DISALLOW_METERED)) {
+            return true;
+        }
+        if (key.equals(ContentResolver.SYNC_EXTRAS_INITIALIZE)) {
+            return true;
+        }
+        return false;
+    }
+
     static class PrintTable {
         private ArrayList<Object[]> mTable = Lists.newArrayList();
         private final int mCols;
@@ -2913,6 +3234,7 @@
                 totalLength += maxLength;
                 formats[col] = String.format("%%-%ds", maxLength);
             }
+            formats[mCols - 1] = "%s";
             printRow(out, formats, mTable.get(0));
             totalLength += (mCols - 1) * 2;
             for (int i = 0; i < totalLength; ++i) {
diff --git a/services/core/java/com/android/server/content/SyncOperation.java b/services/core/java/com/android/server/content/SyncOperation.java
index 67e3b09..9a4abce 100644
--- a/services/core/java/com/android/server/content/SyncOperation.java
+++ b/services/core/java/com/android/server/content/SyncOperation.java
@@ -20,10 +20,9 @@
 import android.content.pm.PackageManager;
 import android.content.ComponentName;
 import android.content.ContentResolver;
-import android.content.SyncRequest;
 import android.os.Bundle;
 import android.os.SystemClock;
-import android.util.Pair;
+import android.util.Log;
 
 /**
  * Value type that represents a sync operation.
@@ -32,10 +31,13 @@
  * {@hide}
  */
 public class SyncOperation implements Comparable {
+    public static final String TAG = "SyncManager";
+
     public static final int REASON_BACKGROUND_DATA_SETTINGS_CHANGED = -1;
     public static final int REASON_ACCOUNTS_UPDATED = -2;
     public static final int REASON_SERVICE_CHANGED = -3;
     public static final int REASON_PERIODIC = -4;
+    /** Sync started because it has just been set to isSyncable. */
     public static final int REASON_IS_SYNCABLE = -5;
     /** Sync started because it has just been set to sync automatically. */
     public static final int REASON_SYNC_AUTO = -6;
@@ -54,25 +56,27 @@
             "UserStart",
     };
 
-    /** Account info to identify a SyncAdapter registered with the system. */
-    public final Account account;
-    /** Authority info to identify a SyncAdapter registered with the system. */
-    public final String authority;
-    /** Service to which this operation will bind to perform the sync. */
-    public final ComponentName service;
-    public final int userId;
+    public static final int SYNC_TARGET_UNKNOWN = 0;
+    public static final int SYNC_TARGET_ADAPTER = 1;
+    public static final int SYNC_TARGET_SERVICE = 2;
+
+    /** Identifying info for the target for this operation. */
+    public final SyncStorageEngine.EndPoint target;
+    /** Why this sync was kicked off. {@link #REASON_NAMES} */
     public final int reason;
-    public int syncSource;
+    /** Where this sync was initiated. */
+    public final int syncSource;
     public final boolean allowParallelSyncs;
-    public Bundle extras;
     public final String key;
     /** Internal boolean to avoid reading a bundle everytime we want to compare operations. */
     private final boolean expedited;
+    public Bundle extras;
+    /** Bare-bones version of this operation that is persisted across reboots. */
     public SyncStorageEngine.PendingOperation pendingOperation;
     /** Elapsed real time in millis at which to run this sync. */
     public long latestRunTime;
     /** Set by the SyncManager in order to delay retries. */
-    public Long backoff;
+    public long backoff;
     /** Specified by the adapter to delay subsequent sync operations. */
     public long delayUntil;
     /**
@@ -83,56 +87,68 @@
     /** Amount of time before {@link #effectiveRunTime} from which this sync can run. */
     public long flexTime;
 
-    public SyncOperation(Account account, int userId, int reason, int source, String authority,
+    /** Descriptive string key for this operation */
+    public String wakeLockName;
+
+    public SyncOperation(Account account, int userId, int reason, int source, String provider,
             Bundle extras, long runTimeFromNow, long flexTime, long backoff,
             long delayUntil, boolean allowParallelSyncs) {
-        this.service = null;
-        this.account = account;
-        this.authority = authority;
-        this.userId = userId;
+        this(new SyncStorageEngine.EndPoint(account, provider, userId),
+                reason, source, extras, runTimeFromNow, flexTime, backoff, delayUntil,
+                allowParallelSyncs);
+    }
+
+    public SyncOperation(ComponentName service, int userId, int reason, int source,
+            Bundle extras, long runTimeFromNow, long flexTime, long backoff,
+            long delayUntil) {
+        this(new SyncStorageEngine.EndPoint(service, userId), reason, source, extras,
+                runTimeFromNow, flexTime, backoff, delayUntil, true /* allowParallelSyncs */);
+    }
+
+    private SyncOperation(SyncStorageEngine.EndPoint info, int reason, int source, Bundle extras,
+            long runTimeFromNow, long flexTime, long backoff, long delayUntil,
+            boolean allowParallelSyncs) {
+        this.target = info;
         this.reason = reason;
         this.syncSource = source;
-        this.allowParallelSyncs = allowParallelSyncs;
         this.extras = new Bundle(extras);
         cleanBundle(this.extras);
         this.delayUntil = delayUntil;
         this.backoff = backoff;
+        this.allowParallelSyncs = allowParallelSyncs;
         final long now = SystemClock.elapsedRealtime();
-        // Checks the extras bundle. Must occur after we set the internal bundle.
+        // Set expedited based on runTimeFromNow. The SyncManager specifies whether the op is
+        // expedited (Not done solely based on bundle).
         if (runTimeFromNow < 0) {
+            this.expedited = true;
             // Sanity check: Will always be true.
             if (!this.extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false)) {
                 this.extras.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
             }
-            this.expedited = true;
             this.latestRunTime = now;
             this.flexTime = 0;
         } else {
-            this.extras.remove(ContentResolver.SYNC_EXTRAS_EXPEDITED);
             this.expedited = false;
+            this.extras.remove(ContentResolver.SYNC_EXTRAS_EXPEDITED);
             this.latestRunTime = now + runTimeFromNow;
             this.flexTime = flexTime;
         }
         updateEffectiveRunTime();
-        this.key = toKey();
+        this.key = toKey(info, this.extras);
     }
 
-    /** Only used to immediately reschedule a sync. */
-    SyncOperation(SyncOperation other) {
-        this.service = other.service;
-        this.account = other.account;
-        this.authority = other.authority;
-        this.userId = other.userId;
-        this.reason = other.reason;
-        this.syncSource = other.syncSource;
-        this.extras = new Bundle(other.extras);
-        this.expedited = other.expedited;
-        this.latestRunTime = SystemClock.elapsedRealtime();
-        this.flexTime = 0L;
-        this.backoff = other.backoff;
-        this.allowParallelSyncs = other.allowParallelSyncs;
-        this.updateEffectiveRunTime();
-        this.key = toKey();
+    /** Used to reschedule a sync at a new point in time. */
+    public SyncOperation(SyncOperation other, long newRunTimeFromNow) {
+        this(other.target, other.reason, other.syncSource, new Bundle(other.extras),
+                newRunTimeFromNow,
+                0L /* In back-off so no flex */,
+                other.backoff,
+                other.delayUntil,
+                other.allowParallelSyncs);
+    }
+
+    public boolean matchesAuthority(SyncOperation other) {
+        return this.target.matchesSpec(other.target);
     }
 
     /**
@@ -150,10 +166,6 @@
         removeFalseExtra(bundle, ContentResolver.SYNC_EXTRAS_EXPEDITED);
         removeFalseExtra(bundle, ContentResolver.SYNC_EXTRAS_OVERRIDE_TOO_MANY_DELETIONS);
         removeFalseExtra(bundle, ContentResolver.SYNC_EXTRAS_DISALLOW_METERED);
-
-        // Remove Config data.
-        bundle.remove(ContentResolver.SYNC_EXTRAS_EXPECTED_UPLOAD);
-        bundle.remove(ContentResolver.SYNC_EXTRAS_EXPECTED_DOWNLOAD);
     }
 
     private void removeFalseExtra(Bundle bundle, String extraName) {
@@ -162,24 +174,52 @@
         }
     }
 
+    /**
+     * Determine whether if this sync operation is running, the provided operation would conflict
+     * with it.
+     * Parallel syncs allow multiple accounts to be synced at the same time. 
+     */
+    public boolean isConflict(SyncOperation toRun) {
+        final SyncStorageEngine.EndPoint other = toRun.target;
+        if (target.target_provider) {
+            return target.account.type.equals(other.account.type)
+                    && target.provider.equals(other.provider)
+                    && target.userId == other.userId
+                    && (!allowParallelSyncs
+                            || target.account.name.equals(other.account.name));
+        } else {
+            // Ops that target a service default to allow parallel syncs, which is handled by the
+            // service returning SYNC_IN_PROGRESS if they don't.
+            return target.service.equals(other.service) && !allowParallelSyncs;
+        }
+    }
+
     @Override
     public String toString() {
         return dump(null, true);
     }
 
     public String dump(PackageManager pm, boolean useOneLine) {
-        StringBuilder sb = new StringBuilder()
-                .append(account.name)
+        StringBuilder sb = new StringBuilder();
+        if (target.target_provider) {
+            sb.append(target.account.name)
                 .append(" u")
-                .append(userId).append(" (")
-                .append(account.type)
+                .append(target.userId).append(" (")
+                .append(target.account.type)
                 .append(")")
                 .append(", ")
-                .append(authority)
-                .append(", ")
-                .append(SyncStorageEngine.SOURCES[syncSource])
-                .append(", latestRunTime ")
-                .append(latestRunTime);
+                .append(target.provider)
+                .append(", ");
+        } else if (target.target_service) {
+            sb.append(target.service.getPackageName())
+                .append(" u")
+                .append(target.userId).append(" (")
+                .append(target.service.getClassName()).append(")")
+                .append(", ");
+        }
+        sb.append(SyncStorageEngine.SOURCES[syncSource])
+            .append(", currentRunTime ")
+            .append(effectiveRunTime);
         if (expedited) {
             sb.append(", EXPEDITED");
         }
@@ -217,10 +257,6 @@
         }
     }
 
-    public boolean isMeteredDisallowed() {
-        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_DISALLOW_METERED, false);
-    }
-
     public boolean isInitialization() {
         return extras.getBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, false);
     }
@@ -233,28 +269,39 @@
         return extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_BACKOFF, false);
     }
 
+    public boolean isNotAllowedOnMetered() {
+        return extras.getBoolean(ContentResolver.SYNC_EXTRAS_DISALLOW_METERED, false);
+    }
+
     /** Changed in V3. */
-    private String toKey() {
+    public static String toKey(SyncStorageEngine.EndPoint info, Bundle extras) {
         StringBuilder sb = new StringBuilder();
-        if (service == null) {
-            sb.append("authority: ").append(authority);
-            sb.append(" account {name=" + account.name + ", user=" + userId + ", type=" + account.type
+        if (info.target_provider) {
+            sb.append("provider: ").append(info.provider);
+            sb.append(" account {name=" + info.account.name
+                    + ", user="
+                    + info.userId
+                    + ", type="
+                    + info.account.type
                     + "}");
-        } else {
+        } else if (info.target_service) {
             sb.append("service {package=" )
-                .append(service.getPackageName())
+                .append(info.service.getPackageName())
                 .append(" user=")
-                .append(userId)
+                .append(info.userId)
                 .append(", class=")
-                .append(service.getClassName())
+                .append(info.service.getClassName())
                 .append("}");
+        } else {
+            Log.v(TAG, "Converting SyncOperaton to key, invalid target: " + info.toString());
+            return "";
         }
         sb.append(" extras: ");
         extrasToStringBuilder(extras, sb);
         return sb.toString();
     }
 
-    public static void extrasToStringBuilder(Bundle bundle, StringBuilder sb) {
+    private static void extrasToStringBuilder(Bundle bundle, StringBuilder sb) {
         sb.append("[");
         for (String key : bundle.keySet()) {
             sb.append(key).append("=").append(bundle.get(key)).append(" ");
@@ -262,6 +309,23 @@
         sb.append("]");
     }
 
+    public String wakeLockName() {
+        if (wakeLockName != null) {
+            return wakeLockName;
+        }
+        if (target.target_provider) {
+            return (wakeLockName = target.provider
+                    + "/" + target.account.type
+                    + "/" + target.account.name);
+        } else if (target.target_service) {
+            return (wakeLockName = target.service.getPackageName()
+                    + "/" + target.service.getClassName());
+        } else {
+            Log.wtf(TAG, "Invalid target getting wakelock name for operation - " + key);
+            return null;
+        }
+    }
+
     /**
      * Update the effective run time of this Operation based on latestRunTime (specified at
      * creation time of sync), delayUntil (specified by SyncAdapter), or backoff (specified by
@@ -297,4 +361,21 @@
             return 0;
         }
     }
+
+    // TODO: Test this to make sure that casting to object doesn't lose the type info for EventLog.
+    public Object[] toEventLog(int event) {
+        Object[] logArray = new Object[4];
+        logArray[1] = event;
+        logArray[2] = syncSource;
+        if (target.target_provider) {
+            logArray[0] = target.provider;
+            logArray[3] = target.account.name.hashCode();
+        } else if (target.target_service) {
+            logArray[0] = target.service.getPackageName();
+            logArray[3] = target.service.hashCode();
+        } else {
+            Log.wtf(TAG, "sync op with invalid target: " + key);
+        }
+        return logArray;
+    }
 }
diff --git a/services/core/java/com/android/server/content/SyncQueue.java b/services/core/java/com/android/server/content/SyncQueue.java
index 22fa2de..587de1c 100644
--- a/services/core/java/com/android/server/content/SyncQueue.java
+++ b/services/core/java/com/android/server/content/SyncQueue.java
@@ -16,12 +16,11 @@
 
 package com.android.server.content;
 
-import android.accounts.Account;
 import android.content.pm.PackageManager;
-import android.content.pm.RegisteredServicesCache;
 import android.content.SyncAdapterType;
 import android.content.SyncAdaptersCache;
 import android.content.pm.RegisteredServicesCache.ServiceInfo;
+import android.os.Bundle;
 import android.os.SystemClock;
 import android.text.format.DateUtils;
 import android.util.Log;
@@ -60,24 +59,49 @@
 
     public void addPendingOperations(int userId) {
         for (SyncStorageEngine.PendingOperation op : mSyncStorageEngine.getPendingOperations()) {
-            if (op.userId != userId) continue;
+            final SyncStorageEngine.EndPoint info = op.target;
+            if (info.userId != userId) continue;
 
-            final Pair<Long, Long> backoff = mSyncStorageEngine.getBackoff(
-                    op.account, op.userId, op.authority);
-            final ServiceInfo<SyncAdapterType> syncAdapterInfo = mSyncAdapters.getServiceInfo(
-                    SyncAdapterType.newKey(op.authority, op.account.type), op.userId);
-            if (syncAdapterInfo == null) {
-                Log.w(TAG, "Missing sync adapter info for authority " + op.authority + ", userId "
-                        + op.userId);
-                continue;
+            final Pair<Long, Long> backoff = mSyncStorageEngine.getBackoff(info);
+            SyncOperation operationToAdd;
+            if (info.target_provider) {
+                final ServiceInfo<SyncAdapterType> syncAdapterInfo = mSyncAdapters.getServiceInfo(
+                        SyncAdapterType.newKey(info.provider, info.account.type), info.userId);
+                if (syncAdapterInfo == null) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "Missing sync adapter info for authority " + op.target);
+                    }
+                    continue;
+                }
+                operationToAdd = new SyncOperation(
+                        info.account, info.userId, op.reason, op.syncSource, info.provider,
+                        op.extras,
+                        op.expedited ? -1 : 0 /* delay */,
+                        0 /* flex */,
+                        backoff != null ? backoff.first : 0L,
+                        mSyncStorageEngine.getDelayUntilTime(info),
+                        syncAdapterInfo.type.allowParallelSyncs());
+                operationToAdd.pendingOperation = op;
+                add(operationToAdd, op);
+            } else if (info.target_service) {
+                try {
+                    mPackageManager.getServiceInfo(info.service, 0);
+                } catch (PackageManager.NameNotFoundException e) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.w(TAG, "Missing sync service for authority " + op.target);
+                    }
+                    continue;
+                }
+                operationToAdd = new SyncOperation(
+                        info.service, info.userId, op.reason, op.syncSource,
+                        op.extras,
+                        op.expedited ? -1 : 0 /* delay */,
+                        0 /* flex */,
+                        backoff != null ? backoff.first : 0,
+                        mSyncStorageEngine.getDelayUntilTime(info));
+                operationToAdd.pendingOperation = op;
+                add(operationToAdd, op);
             }
-            SyncOperation syncOperation = new SyncOperation(
-                    op.account, op.userId, op.reason, op.syncSource, op.authority, op.extras,
-                    op.expedited ? -1: 0 /* delay */, 0 /* flex */, backoff != null ? backoff.first : 0,
-                    mSyncStorageEngine.getDelayUntilTime(op.account, op.userId, op.authority),
-                    syncAdapterInfo.type.allowParallelSyncs());
-            syncOperation.pendingOperation = op;
-            add(syncOperation, op);
         }
     }
 
@@ -117,12 +141,8 @@
         operation.pendingOperation = pop;
         // Don't update the PendingOp if one already exists. This really is just a placeholder,
         // no actual scheduling info is placed here.
-        // TODO: Change this to support service components.
         if (operation.pendingOperation == null) {
-            pop = new SyncStorageEngine.PendingOperation(
-                    operation.account, operation.userId, operation.reason, operation.syncSource,
-                    operation.authority, operation.extras, operation.isExpedited());
-            pop = mSyncStorageEngine.insertIntoPending(pop);
+            pop = mSyncStorageEngine.insertIntoPending(operation);
             if (pop == null) {
                 throw new IllegalStateException("error adding pending sync operation "
                         + operation);
@@ -134,17 +154,16 @@
         return true;
     }
 
-    public void removeUser(int userId) {
+    public void removeUserLocked(int userId) {
         ArrayList<SyncOperation> opsToRemove = new ArrayList<SyncOperation>();
         for (SyncOperation op : mOperationsMap.values()) {
-            if (op.userId == userId) {
+            if (op.target.userId == userId) {
                 opsToRemove.add(op);
             }
         }
-
-        for (SyncOperation op : opsToRemove) {
-            remove(op);
-        }
+            for (SyncOperation op : opsToRemove) {
+                remove(op);
+            }
     }
 
     /**
@@ -152,8 +171,15 @@
      * @param operation the operation to remove
      */
     public void remove(SyncOperation operation) {
+        boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
         SyncOperation operationToRemove = mOperationsMap.remove(operation.key);
+        if (isLoggable) {
+            Log.v(TAG, "Attempting to remove: " + operation.key);
+        }
         if (operationToRemove == null) {
+            if (isLoggable) {
+                Log.v(TAG, "Could not find: " + operation.key);
+            }
             return;
         }
         if (!mSyncStorageEngine.deleteFromPending(operationToRemove.pendingOperation)) {
@@ -162,41 +188,58 @@
         }
     }
 
-    public void onBackoffChanged(Account account, int userId, String providerName, long backoff) {
-        // for each op that matches the account and provider update its
+    /** Reset backoffs for all operations in the queue. */
+    public void clearBackoffs() {
+        for (SyncOperation op : mOperationsMap.values()) {
+            op.backoff = 0L;
+            op.updateEffectiveRunTime();
+        }
+    }
+
+    public void onBackoffChanged(SyncStorageEngine.EndPoint target, long backoff) {
+        // For each op that matches the target of the changed op, update its
         // backoff and effectiveStartTime
         for (SyncOperation op : mOperationsMap.values()) {
-            if (op.account.equals(account) && op.authority.equals(providerName)
-                    && op.userId == userId) {
+            if (op.target.matchesSpec(target)) {
                 op.backoff = backoff;
                 op.updateEffectiveRunTime();
             }
         }
     }
 
-    public void onDelayUntilTimeChanged(Account account, String providerName, long delayUntil) {
-        // for each op that matches the account and provider update its
-        // delayUntilTime and effectiveStartTime
+    public void onDelayUntilTimeChanged(SyncStorageEngine.EndPoint target, long delayUntil) {
+        // for each op that matches the target info of the provided op, change the delay time.
         for (SyncOperation op : mOperationsMap.values()) {
-            if (op.account.equals(account) && op.authority.equals(providerName)) {
+            if (op.target.matchesSpec(target)) {
                 op.delayUntil = delayUntil;
                 op.updateEffectiveRunTime();
             }
         }
     }
 
-    public void remove(Account account, int userId, String authority) {
+    /**
+     * Remove all of the SyncOperations associated with a given target.
+     *
+     * @param info target object provided here can have null Account/provider. This is the case
+     * where you want to remove all ops associated with a provider (null Account) or all ops
+     * associated with an account (null provider).
+     * @param extras option bundle to include to further specify which operation to remove. If this
+     * bundle contains sync settings flags, they are ignored.
+     */
+    public void remove(final SyncStorageEngine.EndPoint info, Bundle extras) {
         Iterator<Map.Entry<String, SyncOperation>> entries = mOperationsMap.entrySet().iterator();
         while (entries.hasNext()) {
             Map.Entry<String, SyncOperation> entry = entries.next();
             SyncOperation syncOperation = entry.getValue();
-            if (account != null && !syncOperation.account.equals(account)) {
+            final SyncStorageEngine.EndPoint opInfo = syncOperation.target;
+            if (!opInfo.matchesSpec(info)) {
                 continue;
             }
-            if (authority != null && !syncOperation.authority.equals(authority)) {
-                continue;
-            }
-            if (userId != syncOperation.userId) {
+            if (extras != null
+                    && !SyncManager.syncExtrasEquals(
+                        syncOperation.extras,
+                        extras,
+                        false /* no config flags*/)) {
                 continue;
             }
             entries.remove();
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index 178c372..35c494d 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -24,6 +24,7 @@
 import android.content.ISyncStatusObserver;
 import android.content.PeriodicSync;
 import android.content.SyncInfo;
+import android.content.SyncRequest;
 import android.content.SyncStatusInfo;
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
@@ -36,10 +37,12 @@
 import android.os.Parcel;
 import android.os.RemoteCallbackList;
 import android.os.RemoteException;
+import android.os.UserHandle;
 import android.util.AtomicFile;
 import android.util.Log;
 import android.util.Pair;
 import android.util.SparseArray;
+import android.util.ArrayMap;
 import android.util.Xml;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -71,7 +74,6 @@
 public class SyncStorageEngine extends Handler {
 
     private static final String TAG = "SyncManager";
-    private static final boolean DEBUG = false;
     private static final String TAG_FILE = "SyncManagerFile";
 
     private static final String XML_ATTR_NEXT_AUTHORITY_ID = "nextAuthorityId";
@@ -108,10 +110,7 @@
 
     /** Enum value for a local-initiated sync. */
     public static final int SOURCE_LOCAL = 1;
-    /**
-     * Enum value for a poll-based sync (e.g., upon connection to
-     * network)
-     */
+    /** Enum value for a poll-based sync (e.g., upon connection to network) */
     public static final int SOURCE_POLL = 2;
 
     /** Enum value for a user-initiated sync. */
@@ -119,6 +118,9 @@
 
     /** Enum value for a periodic sync. */
     public static final int SOURCE_PERIODIC = 4;
+    
+    /** Enum value for a sync started for a service. */
+    public static final int SOURCE_SERVICE = 5;
 
     public static final long NOT_IN_BACKOFF_MODE = -1;
 
@@ -128,7 +130,8 @@
                                              "LOCAL",
                                              "POLL",
                                              "USER",
-                                             "PERIODIC" };
+                                             "PERIODIC",
+                                             "SERVICE"};
 
     // The MESG column will contain one of these or one of the Error types.
     public static final String MESG_SUCCESS = "success";
@@ -156,41 +159,54 @@
     }
 
     public static class PendingOperation {
-        final Account account;
-        final int userId;
+        final EndPoint target;
         final int reason;
         final int syncSource;
-        final String authority;
         final Bundle extras;        // note: read-only.
-        final ComponentName serviceName;
         final boolean expedited;
 
-        int authorityId;
+        final int authorityId;
+        // No longer used.
+        // Keep around for sake up updating from pending.bin to pending.xml
         byte[] flatExtras;
 
-        PendingOperation(Account account, int userId, int reason, int source,
-                String authority, Bundle extras, boolean expedited) {
-            this.account = account;
-            this.userId = userId;
+        PendingOperation(AuthorityInfo authority, int reason, int source,
+                 Bundle extras, boolean expedited) {
+            this.target = authority.target;
             this.syncSource = source;
             this.reason = reason;
-            this.authority = authority;
             this.extras = extras != null ? new Bundle(extras) : extras;
             this.expedited = expedited;
-            this.authorityId = -1;
-            this.serviceName = null;
+            this.authorityId = authority.ident;
         }
 
         PendingOperation(PendingOperation other) {
-            this.account = other.account;
-            this.userId = other.userId;
             this.reason = other.reason;
             this.syncSource = other.syncSource;
-            this.authority = other.authority;
+            this.target = other.target;
             this.extras = other.extras;
             this.authorityId = other.authorityId;
             this.expedited = other.expedited;
-            this.serviceName = other.serviceName;
+        }
+
+        /**
+         * Considered equal if they target the same sync adapter (A
+         * {@link android.content.SyncService}
+         * is considered an adapter), for the same userId.
+         * @param other PendingOperation to compare.
+         * @return true if the two pending ops are the same.
+         */
+        public boolean equals(PendingOperation other) {
+            return target.matchesSpec(other.target);
+        }
+
+        public String toString() {
+            return "service=" + target.service
+                        + " user=" + target.userId
+                        + " auth=" + target
+                        + " account=" + target.account
+                        + " src=" + syncSource
+                        + " extras=" + extras;
         }
     }
 
@@ -204,17 +220,96 @@
         }
     }
 
-    public static class AuthorityInfo {
+    /**  Bare bones representation of a sync target. */
+    public static class EndPoint {
+        public final static EndPoint USER_ALL_PROVIDER_ALL_ACCOUNTS_ALL =
+                new EndPoint(null, null, UserHandle.USER_ALL);
         final ComponentName service;
         final Account account;
         final int userId;
-        final String authority;
+        final String provider;
+        final boolean target_service;
+        final boolean target_provider;
+
+        public EndPoint(ComponentName service, int userId) {
+            this.service = service;
+            this.userId = userId;
+            this.account = null;
+            this.provider = null;
+            this.target_service = true;
+            this.target_provider = false;
+        }
+
+        public EndPoint(Account account, String provider, int userId) {
+            this.account = account;
+            this.provider = provider;
+            this.userId = userId;
+            this.service = null;
+            this.target_service = false;
+            this.target_provider = true;
+        }
+
+        /**
+         * An Endpoint for a sync matches if it targets the same sync adapter for the same user.
+         *
+         * @param spec the Endpoint to match. If the spec has null fields, they indicate a wildcard
+         * and match any. 
+         */
+        public boolean matchesSpec(EndPoint spec) {
+            if (userId != spec.userId
+                    && userId != UserHandle.USER_ALL
+                    && spec.userId != UserHandle.USER_ALL) {
+                return false;
+            }
+            if (target_service && spec.target_service) {
+                return service.equals(spec.service);
+            } else if (target_provider && spec.target_provider) {
+                boolean accountsMatch;
+                if (spec.account == null) {
+                    accountsMatch = true;
+                } else {
+                    accountsMatch = account.equals(spec.account);
+                }
+                boolean providersMatch;
+                if (spec.provider == null) {
+                    providersMatch = true;
+                } else {
+                    providersMatch = provider.equals(spec.provider);
+                }
+                return accountsMatch && providersMatch;
+            }
+            return false;
+        }
+
+        public String toString() {
+            StringBuilder sb = new StringBuilder();
+            if (target_provider) {
+                sb.append(account == null ? "ALL ACCS" : account.name)
+                    .append("/")
+                    .append(provider == null ? "ALL PDRS" : provider);
+            } else if (target_service) {
+                sb.append(service.getPackageName() + "/")
+                  .append(service.getClassName());
+            } else {
+                sb.append("invalid target");
+            }
+            sb.append(":u" + userId);
+            return sb.toString();
+        }
+    }
+
+    public static class AuthorityInfo {
+        final EndPoint target;
         final int ident;
         boolean enabled;
         int syncable;
+        /** Time at which this sync will run, taking into account backoff. */
         long backoffTime;
+        /** Amount of delay due to backoff. */
         long backoffDelay;
+        /** Time offset to add to any requests coming to this target. */
         long delayUntil;
+
         final ArrayList<PeriodicSync> periodicSyncs;
 
         /**
@@ -224,10 +319,7 @@
          * @param toCopy AuthorityInfo to be copied.
          */
         AuthorityInfo(AuthorityInfo toCopy) {
-            account = toCopy.account;
-            userId = toCopy.userId;
-            authority = toCopy.authority;
-            service = toCopy.service;
+            target = toCopy.target;
             ident = toCopy.ident;
             enabled = toCopy.enabled;
             syncable = toCopy.syncable;
@@ -241,56 +333,40 @@
             }
         }
 
-        /**
-         * Create an authority with one periodic sync scheduled with an empty bundle and syncing
-         * every day. An empty bundle is considered equal to any other bundle see
-         * {@link PeriodicSync.syncExtrasEquals}.
-         * @param account Account that this authority syncs.
-         * @param userId which user this sync is registered for.
-         * @param userId user for which this authority is registered.
-         * @param ident id of this authority.
-         */
-        AuthorityInfo(Account account, int userId, String authority, int ident) {
-            this.account = account;
-            this.userId = userId;
-            this.authority = authority;
-            this.service = null;
-            this.ident = ident;
-            enabled = SYNC_ENABLED_DEFAULT;
-            syncable = -1; // default to "unknown"
-            backoffTime = -1; // if < 0 then we aren't in backoff mode
-            backoffDelay = -1; // if < 0 then we aren't in backoff mode
+        AuthorityInfo(EndPoint info, int id) {
+            target = info;
+            ident = id;
+            enabled = info.target_provider ?
+                    SYNC_ENABLED_DEFAULT : true;
+            // Service is active by default,
+            if (info.target_service) {
+                this.syncable = 1;
+            }
             periodicSyncs = new ArrayList<PeriodicSync>();
-            // Old version adds one periodic sync a day.
-            periodicSyncs.add(new PeriodicSync(account, authority,
-                                new Bundle(),
-                                DEFAULT_POLL_FREQUENCY_SECONDS,
-                                calculateDefaultFlexTime(DEFAULT_POLL_FREQUENCY_SECONDS)));
+            defaultInitialisation();
         }
 
-        /**
-         * Create an authority with one periodic sync scheduled with an empty bundle and syncing
-         * every day using a sync service.
-         * @param cname sync service identifier.
-         * @param userId user for which this authority is registered.
-         * @param ident id of this authority.
-         */
-        AuthorityInfo(ComponentName cname, int userId, int ident) {
-            this.account = null;
-            this.userId = userId;
-            this.authority = null;
-            this.service = cname;
-            this.ident = ident;
-            // Sync service is always enabled.
-            enabled = true;
+        private void defaultInitialisation() {
             syncable = -1; // default to "unknown"
             backoffTime = -1; // if < 0 then we aren't in backoff mode
             backoffDelay = -1; // if < 0 then we aren't in backoff mode
-            periodicSyncs = new ArrayList<PeriodicSync>();
-            periodicSyncs.add(new PeriodicSync(account, authority,
-                                new Bundle(),
-                                DEFAULT_POLL_FREQUENCY_SECONDS,
-                                calculateDefaultFlexTime(DEFAULT_POLL_FREQUENCY_SECONDS)));
+            PeriodicSync defaultSync;
+            // Old version is one sync a day. Empty bundle gets replaced by any addPeriodicSync()
+            // call.
+            if (target.target_provider) {
+                defaultSync =
+                        new PeriodicSync(target.account, target.provider,
+                            new Bundle(),
+                            DEFAULT_POLL_FREQUENCY_SECONDS,
+                            calculateDefaultFlexTime(DEFAULT_POLL_FREQUENCY_SECONDS));
+                periodicSyncs.add(defaultSync);
+            }
+        }
+
+        @Override
+        public String toString() {
+            return target + ", enabled=" + enabled + ", syncable=" + syncable + ", backoff="
+                    + backoffTime + ", delay=" + delayUntil;
         }
     }
 
@@ -322,16 +398,9 @@
     }
 
     interface OnSyncRequestListener {
-        /**
-         * Called when a sync is needed on an account(s) due to some change in state.
-         * @param account
-         * @param userId
-         * @param reason
-         * @param authority
-         * @param extras
-         */
-        public void onSyncRequest(Account account, int userId, int reason, String authority,
-                Bundle extras);
+
+        /** Called when a sync is needed on an account(s) due to some change in state. */
+        public void onSyncRequest(EndPoint info, int reason, Bundle extras);
     }
 
     // Primary list of all syncable authorities.  Also our global lock.
@@ -356,9 +425,9 @@
     private final RemoteCallbackList<ISyncStatusObserver> mChangeListeners
             = new RemoteCallbackList<ISyncStatusObserver>();
 
-    /** Reverse mapping for component name -> <userid -> authority id>. */
-    private final HashMap<ComponentName, SparseArray<AuthorityInfo>> mServices =
-            new HashMap<ComponentName, SparseArray<AuthorityInfo>>();
+    /** Reverse mapping for component name -> <userid -> target id>. */
+    private final ArrayMap<ComponentName, SparseArray<AuthorityInfo>> mServices =
+            new ArrayMap<ComponentName, SparseArray<AuthorityInfo>>();
 
     private int mNextAuthorityId = 0;
 
@@ -535,7 +604,7 @@
             mChangeListeners.finishBroadcast();
         }
 
-        if (DEBUG) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.v(TAG, "reportChange " + which + " to: " + reports);
         }
 
@@ -555,7 +624,8 @@
     public boolean getSyncAutomatically(Account account, int userId, String providerName) {
         synchronized (mAuthorities) {
             if (account != null) {
-                AuthorityInfo authority = getAuthorityLocked(account, userId, providerName,
+                AuthorityInfo authority = getAuthorityLocked(
+                        new EndPoint(account, providerName, userId),
                         "getSyncAutomatically");
                 return authority != null && authority.enabled;
             }
@@ -563,10 +633,9 @@
             int i = mAuthorities.size();
             while (i > 0) {
                 i--;
-                AuthorityInfo authority = mAuthorities.valueAt(i);
-                if (authority.authority.equals(providerName)
-                        && authority.userId == userId
-                        && authority.enabled) {
+                AuthorityInfo authorityInfo = mAuthorities.valueAt(i);
+                if (authorityInfo.target.matchesSpec(new EndPoint(account, providerName, userId))
+                        && authorityInfo.enabled) {
                     return true;
                 }
             }
@@ -576,15 +645,18 @@
 
     public void setSyncAutomatically(Account account, int userId, String providerName,
             boolean sync) {
-        if (DEBUG) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
             Log.d(TAG, "setSyncAutomatically: " + /* account + */" provider " + providerName
                     + ", user " + userId + " -> " + sync);
         }
         synchronized (mAuthorities) {
-            AuthorityInfo authority = getOrCreateAuthorityLocked(account, userId, providerName, -1,
-                    false);
+            AuthorityInfo authority =
+                    getOrCreateAuthorityLocked(
+                            new EndPoint(account, providerName, userId),
+                            -1 /* ident */,
+                            false);
             if (authority.enabled == sync) {
-                if (DEBUG) {
+                if (Log.isLoggable(TAG, Log.VERBOSE)) {
                     Log.d(TAG, "setSyncAutomatically: already set to " + sync + ", doing nothing");
                 }
                 return;
@@ -603,8 +675,9 @@
     public int getIsSyncable(Account account, int userId, String providerName) {
         synchronized (mAuthorities) {
             if (account != null) {
-                AuthorityInfo authority = getAuthorityLocked(account, userId, providerName,
-                        "getIsSyncable");
+                AuthorityInfo authority = getAuthorityLocked(
+                        new EndPoint(account, providerName, userId),
+                        "get authority syncable");
                 if (authority == null) {
                     return -1;
                 }
@@ -614,9 +687,10 @@
             int i = mAuthorities.size();
             while (i > 0) {
                 i--;
-                AuthorityInfo authority = mAuthorities.valueAt(i);
-                if (authority.authority.equals(providerName)) {
-                    return authority.syncable;
+                AuthorityInfo authorityInfo = mAuthorities.valueAt(i);
+                if (authorityInfo.target != null
+                        && authorityInfo.target.provider.equals(providerName)) {
+                    return authorityInfo.syncable;
                 }
             }
             return -1;
@@ -624,119 +698,178 @@
     }
 
     public void setIsSyncable(Account account, int userId, String providerName, int syncable) {
-        if (syncable > 1) {
-            syncable = 1;
-        } else if (syncable < -1) {
-            syncable = -1;
-        }
-        if (DEBUG) {
-            Log.d(TAG, "setIsSyncable: " + account + ", provider " + providerName
-                    + ", user " + userId + " -> " + syncable);
-        }
+        setSyncableStateForEndPoint(new EndPoint(account, providerName, userId), syncable);
+    }
+
+    public boolean getIsTargetServiceActive(ComponentName cname, int userId) {
         synchronized (mAuthorities) {
-            AuthorityInfo authority =
-                    getOrCreateAuthorityLocked(account, userId, providerName, -1, false);
-            if (authority.syncable == syncable) {
-                if (DEBUG) {
+            if (cname != null) {
+                AuthorityInfo authority = getAuthorityLocked(
+                        new EndPoint(cname, userId),
+                        "get service active");
+                if (authority == null) {
+                    return false;
+                }
+                return (authority.syncable == 1);
+            }
+            return false;
+        }
+    }
+
+    public void setIsTargetServiceActive(ComponentName cname, int userId, boolean active) {
+        setSyncableStateForEndPoint(new EndPoint(cname, userId), active ? 1 : 0);
+    }
+
+    /**
+     * An enabled sync service and a syncable provider's adapter both get resolved to the same
+     * persisted variable - namely the "syncable" attribute for an AuthorityInfo in accounts.xml.
+     * @param target target to set value for.
+     * @param syncable 0 indicates unsyncable, <0 unknown, >0 is active/syncable.
+     */
+    private void setSyncableStateForEndPoint(EndPoint target, int syncable) {
+        AuthorityInfo aInfo;
+        synchronized (mAuthorities) {
+            aInfo = getOrCreateAuthorityLocked(target, -1, false);
+            if (syncable > 1) {
+                syncable = 1;
+            } else if (syncable < -1) {
+                syncable = -1;
+            }
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.d(TAG, "setIsSyncable: " + aInfo.toString() + " -> " + syncable);
+            }
+            if (aInfo.syncable == syncable) {
+                if (Log.isLoggable(TAG, Log.VERBOSE)) {
                     Log.d(TAG, "setIsSyncable: already set to " + syncable + ", doing nothing");
                 }
                 return;
             }
-            authority.syncable = syncable;
+            aInfo.syncable = syncable;
             writeAccountInfoLocked();
         }
-
         if (syncable > 0) {
-            requestSync(account, userId, SyncOperation.REASON_IS_SYNCABLE,  providerName,
-                    new Bundle());
+            requestSync(aInfo, SyncOperation.REASON_IS_SYNCABLE, new Bundle());
         }
         reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
     }
 
-    public Pair<Long, Long> getBackoff(Account account, int userId, String providerName) {
+    public Pair<Long, Long> getBackoff(EndPoint info) {
         synchronized (mAuthorities) {
-            AuthorityInfo authority = getAuthorityLocked(account, userId, providerName,
-                    "getBackoff");
-            if (authority == null || authority.backoffTime < 0) {
-                return null;
+            AuthorityInfo authority = getAuthorityLocked(info, "getBackoff");
+            if (authority != null) {
+                return Pair.create(authority.backoffTime, authority.backoffDelay);
             }
-            return Pair.create(authority.backoffTime, authority.backoffDelay);
+            return null;
         }
     }
 
-    public void setBackoff(Account account, int userId, String providerName,
-            long nextSyncTime, long nextDelay) {
-        if (DEBUG) {
-            Log.v(TAG, "setBackoff: " + account + ", provider " + providerName
-                    + ", user " + userId
+    /**
+     * Update the backoff for the given endpoint. The endpoint may be for a provider/account and
+     * the account or provider info be null, which signifies all accounts or providers.
+     */
+    public void setBackoff(EndPoint info, long nextSyncTime, long nextDelay) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.v(TAG, "setBackoff: " + info
                     + " -> nextSyncTime " + nextSyncTime + ", nextDelay " + nextDelay);
         }
-        boolean changed = false;
+        boolean changed;
         synchronized (mAuthorities) {
-            if (account == null || providerName == null) {
-                for (AccountInfo accountInfo : mAccounts.values()) {
-                    if (account != null && !account.equals(accountInfo.accountAndUser.account)
-                            && userId != accountInfo.accountAndUser.userId) {
-                        continue;
-                    }
-                    for (AuthorityInfo authorityInfo : accountInfo.authorities.values()) {
-                        if (providerName != null
-                                && !providerName.equals(authorityInfo.authority)) {
-                            continue;
-                        }
-                        if (authorityInfo.backoffTime != nextSyncTime
-                                || authorityInfo.backoffDelay != nextDelay) {
-                            authorityInfo.backoffTime = nextSyncTime;
-                            authorityInfo.backoffDelay = nextDelay;
-                            changed = true;
-                        }
-                    }
-                }
+            if (info.target_provider
+                    && (info.account == null || info.provider == null)) {
+                // Do more work for a provider sync if the provided info has specified all
+                // accounts/providers. 
+                changed = setBackoffLocked(
+                        info.account /* may be null */,
+                        info.userId,
+                        info.provider /* may be null */,
+                        nextSyncTime, nextDelay);
             } else {
-                AuthorityInfo authority =
-                        getOrCreateAuthorityLocked(account, userId, providerName, -1 /* ident */,
-                                true);
-                if (authority.backoffTime == nextSyncTime && authority.backoffDelay == nextDelay) {
-                    return;
+                AuthorityInfo authorityInfo =
+                        getOrCreateAuthorityLocked(info, -1 /* ident */, true);
+                if (authorityInfo.backoffTime == nextSyncTime
+                        && authorityInfo.backoffDelay == nextDelay) {
+                    changed = false;
+                } else {
+                    authorityInfo.backoffTime = nextSyncTime;
+                    authorityInfo.backoffDelay = nextDelay;
+                    changed = true;
                 }
-                authority.backoffTime = nextSyncTime;
-                authority.backoffDelay = nextDelay;
-                changed = true;
             }
         }
-
         if (changed) {
             reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
         }
     }
 
     /**
-     * Callers of this function need to hold a lock for syncQueue object passed in. Bear in mind
-     * this function grabs the lock for {@link #mAuthorities}
-     * @param syncQueue queue containing pending sync operations.
+     * Either set backoff for a specific authority, or set backoff for all the
+     * accounts on a specific adapter/all adapters.
+     *
+     * @param account account for which to set backoff. Null to specify all accounts.
+     * @param userId id of the user making this request.
+     * @param providerName provider for which to set backoff. Null to specify all providers.
+     * @return true if a change occured.
      */
-    public void clearAllBackoffsLocked(SyncQueue syncQueue) {
+    private boolean setBackoffLocked(Account account, int userId, String providerName,
+            long nextSyncTime, long nextDelay) {
+        boolean changed = false;
+        for (AccountInfo accountInfo : mAccounts.values()) {
+            if (account != null && !account.equals(accountInfo.accountAndUser.account)
+                    && userId != accountInfo.accountAndUser.userId) {
+                continue;
+            }
+            for (AuthorityInfo authorityInfo : accountInfo.authorities.values()) {
+                if (providerName != null
+                        && !providerName.equals(authorityInfo.target.provider)) {
+                    continue;
+                }
+                if (authorityInfo.backoffTime != nextSyncTime
+                        || authorityInfo.backoffDelay != nextDelay) {
+                    authorityInfo.backoffTime = nextSyncTime;
+                    authorityInfo.backoffDelay = nextDelay;
+                    changed = true;
+                }
+            }
+        }
+        return changed;
+    }
+
+    public void clearAllBackoffs(SyncQueue syncQueue) {
         boolean changed = false;
         synchronized (mAuthorities) {
-            for (AccountInfo accountInfo : mAccounts.values()) {
-                for (AuthorityInfo authorityInfo : accountInfo.authorities.values()) {
-                    if (authorityInfo.backoffTime != NOT_IN_BACKOFF_MODE
-                            || authorityInfo.backoffDelay != NOT_IN_BACKOFF_MODE) {
-                        if (DEBUG) {
-                            Log.v(TAG, "clearAllBackoffs:"
-                                    + " authority:" + authorityInfo.authority
-                                    + " account:" + accountInfo.accountAndUser.account.name
-                                    + " user:" + accountInfo.accountAndUser.userId
-                                    + " backoffTime was: " + authorityInfo.backoffTime
-                                    + " backoffDelay was: " + authorityInfo.backoffDelay);
+            synchronized (syncQueue) {
+                // Clear backoff for all sync adapters.
+                for (AccountInfo accountInfo : mAccounts.values()) {
+                    for (AuthorityInfo authorityInfo : accountInfo.authorities.values()) {
+                        if (authorityInfo.backoffTime != NOT_IN_BACKOFF_MODE
+                                || authorityInfo.backoffDelay != NOT_IN_BACKOFF_MODE) {
+                            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                                Log.v(TAG, "clearAllBackoffs:"
+                                        + " authority:" + authorityInfo.target
+                                        + " account:" + accountInfo.accountAndUser.account.name
+                                        + " user:" + accountInfo.accountAndUser.userId
+                                        + " backoffTime was: " + authorityInfo.backoffTime
+                                        + " backoffDelay was: " + authorityInfo.backoffDelay);
+                            }
+                            authorityInfo.backoffTime = NOT_IN_BACKOFF_MODE;
+                            authorityInfo.backoffDelay = NOT_IN_BACKOFF_MODE;
+                            changed = true;
                         }
-                        authorityInfo.backoffTime = NOT_IN_BACKOFF_MODE;
-                        authorityInfo.backoffDelay = NOT_IN_BACKOFF_MODE;
-                        syncQueue.onBackoffChanged(accountInfo.accountAndUser.account,
-                                accountInfo.accountAndUser.userId, authorityInfo.authority, 0);
-                        changed = true;
                     }
                 }
+                // Clear backoff for all sync services.
+                for (ComponentName service : mServices.keySet()) {
+                    SparseArray<AuthorityInfo> aInfos = mServices.get(service);
+                    for (int i = 0; i < aInfos.size(); i++) {
+                        AuthorityInfo authorityInfo = aInfos.valueAt(i);
+                        if (authorityInfo.backoffTime != NOT_IN_BACKOFF_MODE
+                                || authorityInfo.backoffDelay != NOT_IN_BACKOFF_MODE) {
+                            authorityInfo.backoffTime = NOT_IN_BACKOFF_MODE;
+                            authorityInfo.backoffDelay = NOT_IN_BACKOFF_MODE;
+                        }
+                    }
+                }
+                syncQueue.clearBackoffs();
             }
         }
 
@@ -745,28 +878,9 @@
         }
     }
 
-    public void setDelayUntilTime(Account account, int userId, String providerName,
-            long delayUntil) {
-        if (DEBUG) {
-            Log.v(TAG, "setDelayUntil: " + account + ", provider " + providerName
-                    + ", user " + userId + " -> delayUntil " + delayUntil);
-        }
+    public long getDelayUntilTime(EndPoint info) {
         synchronized (mAuthorities) {
-            AuthorityInfo authority = getOrCreateAuthorityLocked(
-                    account, userId, providerName, -1 /* ident */, true);
-            if (authority.delayUntil == delayUntil) {
-                return;
-            }
-            authority.delayUntil = delayUntil;
-        }
-
-        reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
-    }
-
-    public long getDelayUntilTime(Account account, int userId, String providerName) {
-        synchronized (mAuthorities) {
-            AuthorityInfo authority = getAuthorityLocked(account, userId, providerName,
-                    "getDelayUntil");
+            AuthorityInfo authority = getAuthorityLocked(info, "getDelayUntil");
             if (authority == null) {
                 return 0;
             }
@@ -774,113 +888,147 @@
         }
     }
 
-    private void updateOrRemovePeriodicSync(PeriodicSync toUpdate, int userId, boolean add) {
-        if (DEBUG) {
-            Log.v(TAG, "addOrRemovePeriodicSync: " + toUpdate.account + ", user " + userId
-                    + ", provider " + toUpdate.authority
-                    + " -> period " + toUpdate.period + ", extras " + toUpdate.extras);
+    public void setDelayUntilTime(EndPoint info, long delayUntil) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.v(TAG, "setDelayUntil: " + info
+                    + " -> delayUntil " + delayUntil);
         }
         synchronized (mAuthorities) {
-            if (toUpdate.period <= 0 && add) {
-                Log.e(TAG, "period < 0, should never happen in updateOrRemovePeriodicSync: add-"
-                        + add);
+            AuthorityInfo authority = getOrCreateAuthorityLocked(info, -1, true);
+            if (authority.delayUntil == delayUntil) {
+                return;
             }
-            if (toUpdate.extras == null) {
-                Log.e(TAG, "null extras, should never happen in updateOrRemovePeriodicSync: add-"
-                        + add);
+            authority.delayUntil = delayUntil;
+        }
+        reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
+    }
+
+    public void updateOrAddPeriodicSync(EndPoint info, long period, long flextime, Bundle extras) {
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.v(TAG, "addPeriodicSync: " + info
+                    + " -> period " + period + ", flex " + flextime + ", extras "
+                    + extras.toString());
+        }
+        synchronized (mAuthorities) {
+            if (period <= 0) {
+                Log.e(TAG, "period < 0, should never happen in updateOrAddPeriodicSync");
+            }
+            if (extras == null) {
+                Log.e(TAG, "null extras, should never happen in updateOrAddPeriodicSync:");
             }
             try {
-                AuthorityInfo authority =
-                        getOrCreateAuthorityLocked(toUpdate.account, userId, toUpdate.authority,
-                                -1, false);
-                if (add) {
-                    // add this periodic sync if an equivalent periodic doesn't already exist.
-                    boolean alreadyPresent = false;
-                    for (int i = 0, N = authority.periodicSyncs.size(); i < N; i++) {
-                        PeriodicSync syncInfo = authority.periodicSyncs.get(i);
-                        if (PeriodicSync.syncExtrasEquals(
-                                toUpdate.extras,
-                                syncInfo.extras)) {
-                            if (toUpdate.period == syncInfo.period &&
-                                    toUpdate.flexTime == syncInfo.flexTime) {
-                                // Absolutely the same.
-                                return;
-                            }
-                            authority.periodicSyncs.set(i, new PeriodicSync(toUpdate));
-                            alreadyPresent = true;
-                            break;
-                        }
-                    }
-                    // If we added an entry to the periodicSyncs array also add an entry to
-                    // the periodic syncs status to correspond to it.
-                    if (!alreadyPresent) {
-                        authority.periodicSyncs.add(new PeriodicSync(toUpdate));
-                        SyncStatusInfo status = getOrCreateSyncStatusLocked(authority.ident);
-                        status.setPeriodicSyncTime(authority.periodicSyncs.size() - 1, 0L);
-                    }
+                PeriodicSync toUpdate;
+                if (info.target_provider) {
+                    toUpdate = new PeriodicSync(info.account,
+                            info.provider,
+                            extras,
+                            period,
+                            flextime);
                 } else {
-                    // Remove any periodic syncs that match the authority and extras.
-                    SyncStatusInfo status = mSyncStatus.get(authority.ident);
-                    boolean changed = false;
-                    Iterator<PeriodicSync> iterator = authority.periodicSyncs.iterator();
-                    int i = 0;
-                    while (iterator.hasNext()) {
-                        PeriodicSync syncInfo = iterator.next();
-                        if (PeriodicSync.syncExtrasEquals(syncInfo.extras, toUpdate.extras)) {
-                            iterator.remove();
-                            changed = true;
-                            // If we removed an entry from the periodicSyncs array also
-                            // remove the corresponding entry from the status
-                            if (status != null) {
-                                status.removePeriodicSyncTime(i);
-                            } else {
-                                Log.e(TAG, "Tried removing sync status on remove periodic sync but"
-                                        + "did not find it.");
-                            }
-                        } else {
-                            i++;
+                    toUpdate = new PeriodicSync(info.service,
+                            extras,
+                            period,
+                            flextime);
+                }
+                AuthorityInfo authority =
+                        getOrCreateAuthorityLocked(info, -1, false);
+                // add this periodic sync if an equivalent periodic doesn't already exist.
+                boolean alreadyPresent = false;
+                for (int i = 0, N = authority.periodicSyncs.size(); i < N; i++) {
+                    PeriodicSync syncInfo = authority.periodicSyncs.get(i);
+                    if (SyncManager.syncExtrasEquals(syncInfo.extras,
+                            extras,
+                            true /* includeSyncSettings*/)) {
+                        if (period == syncInfo.period &&
+                                flextime == syncInfo.flexTime) {
+                            // Absolutely the same.
+                            return;
                         }
+                        authority.periodicSyncs.set(i, toUpdate);
+                        alreadyPresent = true;
+                        break;
                     }
-                    if (!changed) {
-                        return;
-                    }
+                }
+                // If we added an entry to the periodicSyncs array also add an entry to
+                // the periodic syncs status to correspond to it.
+                if (!alreadyPresent) {
+                    authority.periodicSyncs.add(toUpdate);
+                    SyncStatusInfo status = getOrCreateSyncStatusLocked(authority.ident);
+                    // A new periodic sync is initialised as already having been run.
+                    status.setPeriodicSyncTime(
+                            authority.periodicSyncs.size() - 1,
+                            System.currentTimeMillis());
                 }
             } finally {
                 writeAccountInfoLocked();
                 writeStatusLocked();
             }
         }
-
         reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
     }
 
-    public void addPeriodicSync(PeriodicSync toAdd, int userId) {
-        updateOrRemovePeriodicSync(toAdd, userId, true /* add */);
+    public void removePeriodicSync(EndPoint info, Bundle extras) {
+        synchronized(mAuthorities) {
+            try {
+                AuthorityInfo authority =
+                        getOrCreateAuthorityLocked(info, -1, false);
+                // Remove any periodic syncs that match the target and extras.
+                SyncStatusInfo status = mSyncStatus.get(authority.ident);
+                boolean changed = false;
+                Iterator<PeriodicSync> iterator = authority.periodicSyncs.iterator();
+                int i = 0;
+                while (iterator.hasNext()) {
+                    PeriodicSync syncInfo = iterator.next();
+                    if (SyncManager.syncExtrasEquals(syncInfo.extras,
+                            extras,
+                            true /* includeSyncSettings */)) {
+                        iterator.remove();
+                        changed = true;
+                        // If we removed an entry from the periodicSyncs array also
+                        // remove the corresponding entry from the status
+                        if (status != null) {
+                            status.removePeriodicSyncTime(i);
+                        } else {
+                            Log.e(TAG, "Tried removing sync status on remove periodic sync but"
+                                    + " did not find it.");
+                        }
+                    } else {
+                        i++;
+                    }
+                }
+                if (!changed) {
+                    return;
+                }
+            } finally {
+                writeAccountInfoLocked();
+                writeStatusLocked();
+            }
+        }
+        reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
     }
 
-    public void removePeriodicSync(PeriodicSync toRemove, int userId) {
-        updateOrRemovePeriodicSync(toRemove, userId, false /* remove */);
-    }
-
-    public List<PeriodicSync> getPeriodicSyncs(Account account, int userId, String providerName) {
-        ArrayList<PeriodicSync> syncs = new ArrayList<PeriodicSync>();
+    /**
+     * @return list of periodic syncs for a target. Never null. If no such syncs exist, returns an
+     * empty list.
+     */
+    public List<PeriodicSync> getPeriodicSyncs(EndPoint info) {
         synchronized (mAuthorities) {
-            AuthorityInfo authority = getAuthorityLocked(account, userId, providerName,
-                    "getPeriodicSyncs");
-            if (authority != null) {
-                for (PeriodicSync item : authority.periodicSyncs) {
+            AuthorityInfo authorityInfo = getAuthorityLocked(info, "getPeriodicSyncs");
+            ArrayList<PeriodicSync> syncs = new ArrayList<PeriodicSync>();
+            if (authorityInfo != null) {
+                for (PeriodicSync item : authorityInfo.periodicSyncs) {
                     // Copy and send out. Necessary for thread-safety although it's parceled.
                     syncs.add(new PeriodicSync(item));
                 }
             }
+            return syncs;
         }
-        return syncs;
     }
 
     public void setMasterSyncAutomatically(boolean flag, int userId) {
         synchronized (mAuthorities) {
             Boolean auto = mMasterSyncAutomatically.get(userId);
-            if (auto != null && (boolean) auto == flag) {
+            if (auto != null && auto.equals(flag)) {
                 return;
             }
             mMasterSyncAutomatically.put(userId, flag);
@@ -901,12 +1049,6 @@
         }
     }
 
-    public void removeAuthority(Account account, int userId, String authority) {
-        synchronized (mAuthorities) {
-            removeAuthorityLocked(account, userId, authority, true /* doWrite */);
-        }
-    }
-
     public AuthorityInfo getAuthority(int authorityId) {
         synchronized (mAuthorities) {
             return mAuthorities.get(authorityId);
@@ -914,72 +1056,60 @@
     }
 
     /**
-     * Returns true if there is currently a sync operation for the given
-     * account or authority actively being processed.
+     * Returns true if there is currently a sync operation being actively processed for the given
+     * target.
      */
-    public boolean isSyncActive(Account account, int userId, String authority) {
+    public boolean isSyncActive(EndPoint info) {
         synchronized (mAuthorities) {
-            for (SyncInfo syncInfo : getCurrentSyncs(userId)) {
+            for (SyncInfo syncInfo : getCurrentSyncs(info.userId)) {
                 AuthorityInfo ainfo = getAuthority(syncInfo.authorityId);
-                if (ainfo != null && ainfo.account.equals(account)
-                        && ainfo.authority.equals(authority)
-                        && ainfo.userId == userId) {
+                if (ainfo != null && ainfo.target.matchesSpec(info)) {
                     return true;
                 }
             }
         }
-
         return false;
     }
 
-    public PendingOperation insertIntoPending(PendingOperation op) {
+    public PendingOperation insertIntoPending(SyncOperation op) {
+        PendingOperation pop;
         synchronized (mAuthorities) {
-            if (DEBUG) {
-                Log.v(TAG, "insertIntoPending: account=" + op.account
-                        + " user=" + op.userId
-                        + " auth=" + op.authority
-                        + " src=" + op.syncSource
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "insertIntoPending: authority=" + op.target
                         + " extras=" + op.extras);
             }
-
-            AuthorityInfo authority = getOrCreateAuthorityLocked(op.account, op.userId,
-                    op.authority,
-                    -1 /* desired identifier */,
-                    true /* write accounts to storage */);
+            final EndPoint info = op.target;
+            AuthorityInfo authority =
+                    getOrCreateAuthorityLocked(info,
+                            -1 /* desired identifier */,
+                            true /* write accounts to storage */);
             if (authority == null) {
                 return null;
             }
 
-            op = new PendingOperation(op);
-            op.authorityId = authority.ident;
-            mPendingOperations.add(op);
-            appendPendingOperationLocked(op);
+            pop = new PendingOperation(authority, op.reason, op.syncSource, op.extras,
+                    op.isExpedited());
+            mPendingOperations.add(pop);
+            appendPendingOperationLocked(pop);
 
             SyncStatusInfo status = getOrCreateSyncStatusLocked(authority.ident);
             status.pending = true;
         }
-
         reportChange(ContentResolver.SYNC_OBSERVER_TYPE_PENDING);
-        return op;
+        return pop;
     }
 
     /**
      * Remove from list of pending operations. If successful, search through list for matching
-     * authorities. If there are no more pending syncs for the same authority/account/userid,
-     * update the SyncStatusInfo for that authority(authority here is the internal representation
-     * of a 'sync operation'.
-     * @param op
-     * @return
+     * authorities. If there are no more pending syncs for the same target,
+     * update the SyncStatusInfo for that target.
+     * @param op Pending op to delete.
      */
     public boolean deleteFromPending(PendingOperation op) {
         boolean res = false;
         synchronized (mAuthorities) {
-            if (DEBUG) {
-                Log.v(TAG, "deleteFromPending: account=" + op.account
-                    + " user=" + op.userId
-                    + " auth=" + op.authority
-                    + " src=" + op.syncSource
-                    + " extras=" + op.extras);
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "deleteFromPending: account=" + op.toString());
             }
             if (mPendingOperations.remove(op)) {
                 if (mPendingOperations.size() == 0
@@ -989,30 +1119,27 @@
                 } else {
                     mNumPendingFinished++;
                 }
-
-                AuthorityInfo authority = getAuthorityLocked(op.account, op.userId, op.authority,
-                        "deleteFromPending");
+                AuthorityInfo authority = getAuthorityLocked(op.target, "deleteFromPending");
                 if (authority != null) {
-                    if (DEBUG) Log.v(TAG, "removing - " + authority.toString());
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, "removing - " + authority.toString());
+                    }
                     final int N = mPendingOperations.size();
                     boolean morePending = false;
-                    for (int i=0; i<N; i++) {
+                    for (int i = 0; i < N; i++) {
                         PendingOperation cur = mPendingOperations.get(i);
-                        if (cur.account.equals(op.account)
-                                && cur.authority.equals(op.authority)
-                                && cur.userId == op.userId) {
+                        if (cur.equals(op)) {
                             morePending = true;
                             break;
                         }
                     }
 
                     if (!morePending) {
-                        if (DEBUG) Log.v(TAG, "no more pending!");
+                        if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "no more pending!");
                         SyncStatusInfo status = getOrCreateSyncStatusLocked(authority.ident);
                         status.pending = false;
                     }
                 }
-
                 res = true;
             }
         }
@@ -1047,7 +1174,9 @@
      */
     public void doDatabaseCleanup(Account[] accounts, int userId) {
         synchronized (mAuthorities) {
-            if (DEBUG) Log.v(TAG, "Updating for new accounts...");
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "Updating for new accounts...");
+            }
             SparseArray<AuthorityInfo> removing = new SparseArray<AuthorityInfo>();
             Iterator<AccountInfo> accIt = mAccounts.values().iterator();
             while (accIt.hasNext()) {
@@ -1055,7 +1184,7 @@
                 if (!ArrayUtils.contains(accounts, acc.accountAndUser.account)
                         && acc.accountAndUser.userId == userId) {
                     // This account no longer exists...
-                    if (DEBUG) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
                         Log.v(TAG, "Account removed: " + acc.accountAndUser);
                     }
                     for (AuthorityInfo auth : acc.authorities.values()) {
@@ -1102,25 +1231,25 @@
     public SyncInfo addActiveSync(SyncManager.ActiveSyncContext activeSyncContext) {
         final SyncInfo syncInfo;
         synchronized (mAuthorities) {
-            if (DEBUG) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.v(TAG, "setActiveSync: account="
-                    + activeSyncContext.mSyncOperation.account
-                    + " auth=" + activeSyncContext.mSyncOperation.authority
+                    + " auth=" + activeSyncContext.mSyncOperation.target
                     + " src=" + activeSyncContext.mSyncOperation.syncSource
                     + " extras=" + activeSyncContext.mSyncOperation.extras);
             }
-            AuthorityInfo authority = getOrCreateAuthorityLocked(
-                    activeSyncContext.mSyncOperation.account,
-                    activeSyncContext.mSyncOperation.userId,
-                    activeSyncContext.mSyncOperation.authority,
-                    -1 /* assign a new identifier if creating a new authority */,
+            final EndPoint info = activeSyncContext.mSyncOperation.target;
+            AuthorityInfo authorityInfo = getOrCreateAuthorityLocked(
+                    info,
+                    -1 /* assign a new identifier if creating a new target */,
                     true /* write to storage if this results in a change */);
-            syncInfo = new SyncInfo(authority.ident,
-                    authority.account, authority.authority,
+            syncInfo = new SyncInfo(
+                    authorityInfo.ident,
+                    authorityInfo.target.account,
+                    authorityInfo.target.provider,
+                    authorityInfo.target.service,
                     activeSyncContext.mStartTime);
-            getCurrentSyncs(authority.userId).add(syncInfo);
+            getCurrentSyncs(authorityInfo.target.userId).add(syncInfo);
         }
-
         reportActiveChange();
         return syncInfo;
     }
@@ -1130,10 +1259,11 @@
      */
     public void removeActiveSync(SyncInfo syncInfo, int userId) {
         synchronized (mAuthorities) {
-            if (DEBUG) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.v(TAG, "removeActiveSync: account=" + syncInfo.account
                         + " user=" + userId
-                        + " auth=" + syncInfo.authority);
+                        + " auth=" + syncInfo.authority
+                        + " service=" + syncInfo.service);
             }
             getCurrentSyncs(userId).remove(syncInfo);
         }
@@ -1149,37 +1279,34 @@
     }
 
     /**
-     * Note that sync has started for the given account and authority.
+     * Note that sync has started for the given operation.
      */
-    public long insertStartSyncEvent(Account accountName, int userId, int reason,
-            String authorityName, long now, int source, boolean initialization, Bundle extras) {
+    public long insertStartSyncEvent(SyncOperation op, long now) {
         long id;
         synchronized (mAuthorities) {
-            if (DEBUG) {
-                Log.v(TAG, "insertStartSyncEvent: account=" + accountName + "user=" + userId
-                    + " auth=" + authorityName + " source=" + source);
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "insertStartSyncEvent: " + op);
             }
-            AuthorityInfo authority = getAuthorityLocked(accountName, userId, authorityName,
-                    "insertStartSyncEvent");
+            AuthorityInfo authority = getAuthorityLocked(op.target, "insertStartSyncEvent");
             if (authority == null) {
                 return -1;
             }
             SyncHistoryItem item = new SyncHistoryItem();
-            item.initialization = initialization;
+            item.initialization = op.isInitialization();
             item.authorityId = authority.ident;
             item.historyId = mNextHistoryId++;
             if (mNextHistoryId < 0) mNextHistoryId = 0;
             item.eventTime = now;
-            item.source = source;
-            item.reason = reason;
-            item.extras = extras;
+            item.source = op.syncSource;
+            item.reason = op.reason;
+            item.extras = op.extras;
             item.event = EVENT_START;
             mSyncHistory.add(0, item);
             while (mSyncHistory.size() > MAX_HISTORY) {
                 mSyncHistory.remove(mSyncHistory.size()-1);
             }
             id = item.historyId;
-            if (DEBUG) Log.v(TAG, "returning historyId " + id);
+            if (Log.isLoggable(TAG, Log.VERBOSE)) Log.v(TAG, "returning historyId " + id);
         }
 
         reportChange(ContentResolver.SYNC_OBSERVER_TYPE_STATUS);
@@ -1189,7 +1316,7 @@
     public void stopSyncEvent(long historyId, long elapsedTime, String resultMessage,
             long downstreamActivity, long upstreamActivity) {
         synchronized (mAuthorities) {
-            if (DEBUG) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.v(TAG, "stopSyncEvent: historyId=" + historyId);
             }
             SyncHistoryItem item = null;
@@ -1346,13 +1473,12 @@
     }
 
     /**
-     * Return a copy of the specified authority with the corresponding sync status
+     * Return a copy of the specified target with the corresponding sync status
      */
-    public Pair<AuthorityInfo, SyncStatusInfo> getCopyOfAuthorityWithSyncStatus(
-            Account account, int userId, String authority) {
+    public Pair<AuthorityInfo, SyncStatusInfo> getCopyOfAuthorityWithSyncStatus(EndPoint info) {
         synchronized (mAuthorities) {
-            AuthorityInfo authorityInfo = getOrCreateAuthorityLocked(account, userId, authority,
-                    -1 /* assign a new identifier if creating a new authority */,
+            AuthorityInfo authorityInfo = getOrCreateAuthorityLocked(info,
+                    -1 /* assign a new identifier if creating a new target */,
                     true /* write to storage if this results in a change */);
             return createCopyPairOfAuthorityWithSyncStatusLocked(authorityInfo);
         }
@@ -1373,26 +1499,24 @@
     }
 
     /**
-     * Returns the status that matches the authority and account.
+     * Returns the status that matches the target.
      *
-     * @param account the account we want to check
-     * @param authority the authority whose row should be selected
-     * @return the SyncStatusInfo for the authority or null if none found.
+     * @param info the endpoint target we are querying status info for.
+     * @return the SyncStatusInfo for the endpoint.
      */
-    public SyncStatusInfo getStatusByAccountAndAuthority(Account account, int userId,
-            String authority) {
-        if (account == null || authority == null) {
-          return null;
+    public SyncStatusInfo getStatusByAuthority(EndPoint info) {
+        if (info.target_provider && (info.account == null || info.provider == null)) {
+            return null;
+        } else if (info.target_service && info.service == null) {
+            return null;
         }
         synchronized (mAuthorities) {
             final int N = mSyncStatus.size();
-            for (int i=0; i<N; i++) {
+            for (int i = 0; i < N; i++) {
                 SyncStatusInfo cur = mSyncStatus.valueAt(i);
                 AuthorityInfo ainfo = mAuthorities.get(cur.authorityId);
-
-                if (ainfo != null && ainfo.authority.equals(authority)
-                        && ainfo.userId == userId
-                        && account.equals(ainfo.account)) {
+                if (ainfo != null
+                        && ainfo.target.matchesSpec(info)) {
                   return cur;
                 }
             }
@@ -1400,25 +1524,20 @@
         }
     }
 
-    /**
-     * Return true if the pending status is true of any matching authorities.
-     */
-    public boolean isSyncPending(Account account, int userId, String authority) {
+    /** Return true if the pending status is true of any matching authorities. */
+    public boolean isSyncPending(EndPoint info) {
         synchronized (mAuthorities) {
             final int N = mSyncStatus.size();
-            for (int i=0; i<N; i++) {
+            for (int i = 0; i < N; i++) {
                 SyncStatusInfo cur = mSyncStatus.valueAt(i);
                 AuthorityInfo ainfo = mAuthorities.get(cur.authorityId);
                 if (ainfo == null) {
                     continue;
                 }
-                if (userId != ainfo.userId) {
+                if (!ainfo.target.matchesSpec(info)) {
                     continue;
                 }
-                if (account != null && !ainfo.account.equals(account)) {
-                    continue;
-                }
-                if (ainfo.authority.equals(authority) && cur.pending) {
+                if (cur.pending) {
                     return true;
                 }
             }
@@ -1474,128 +1593,133 @@
     }
 
     /**
-     * Retrieve an authority, returning null if one does not exist.
+     * Retrieve a target's full info, returning null if one does not exist.
      *
-     * @param accountName The name of the account for the authority.
-     * @param authorityName The name of the authority itself.
+     * @param info info of the target to look up.
      * @param tag If non-null, this will be used in a log message if the
-     * requested authority does not exist.
+     * requested target does not exist.
      */
-    private AuthorityInfo getAuthorityLocked(Account accountName, int userId, String authorityName,
-            String tag) {
-        AccountAndUser au = new AccountAndUser(accountName, userId);
-        AccountInfo accountInfo = mAccounts.get(au);
-        if (accountInfo == null) {
-            if (tag != null) {
-                if (DEBUG) {
-                    Log.v(TAG, tag + ": unknown account " + au);
-                }
+    private AuthorityInfo getAuthorityLocked(EndPoint info, String tag) {
+        if (info.target_service) {
+            SparseArray<AuthorityInfo> aInfo = mServices.get(info.service);
+            AuthorityInfo authority = null;
+            if (aInfo != null) {
+                authority = aInfo.get(info.userId);
             }
+            if (authority == null) {
+                if (tag != null) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, tag + " No authority info found for " + info.service + " for"
+                                + " user " + info.userId);
+                    }
+                }
+                return null;
+            }
+            return authority;
+        } else if (info.target_provider){
+            AccountAndUser au = new AccountAndUser(info.account, info.userId);
+            AccountInfo accountInfo = mAccounts.get(au);
+            if (accountInfo == null) {
+                if (tag != null) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, tag + ": unknown account " + au);
+                    }
+                }
+                return null;
+            }
+            AuthorityInfo authority = accountInfo.authorities.get(info.provider);
+            if (authority == null) {
+                if (tag != null) {
+                    if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                        Log.v(TAG, tag + ": unknown provider " + info.provider);
+                    }
+                }
+                return null;
+            }
+            return authority;
+        } else {
+            Log.e(TAG, tag + " Authority : " + info + ", invalid target");
             return null;
         }
-        AuthorityInfo authority = accountInfo.authorities.get(authorityName);
-        if (authority == null) {
-            if (tag != null) {
-                if (DEBUG) {
-                    Log.v(TAG, tag + ": unknown authority " + authorityName);
-                }
-            }
-            return null;
-        }
-
-        return authority;
     }
 
     /**
-     * Retrieve an authority, returning null if one does not exist.
-     *
-     * @param service The service name used for this sync.
-     * @param userId The user for whom this sync is scheduled.
-     * @param tag If non-null, this will be used in a log message if the
-     * requested authority does not exist.
-     */
-    private AuthorityInfo getAuthorityLocked(ComponentName service, int userId, String tag) {
-        AuthorityInfo authority = mServices.get(service).get(userId);
-        if (authority == null) {
-            if (tag != null) {
-                if (DEBUG) {
-                    Log.v(TAG, tag + " No authority info found for " + service + " for user "
-                            + userId);
-                }
-            }
-            return null;
-        }
-        return authority;
-    }
-
-    /**
-     * @param cname identifier for the service.
-     * @param userId for the syncs corresponding to this authority.
-     * @param ident unique identifier for authority. -1 for none.
+     * @param info info identifying target.
+     * @param ident unique identifier for target. -1 for none.
      * @param doWrite if true, update the accounts.xml file on the disk.
-     * @return the authority that corresponds to the provided sync service, creating it if none
+     * @return the authority that corresponds to the provided sync target, creating it if none
      * exists.
      */
-    private AuthorityInfo getOrCreateAuthorityLocked(ComponentName cname, int userId, int ident,
-            boolean doWrite) {
-        SparseArray<AuthorityInfo> aInfo = mServices.get(cname);
-        if (aInfo == null) {
-            aInfo = new SparseArray<AuthorityInfo>();
-            mServices.put(cname, aInfo);
-        }
-        AuthorityInfo authority = aInfo.get(userId);
-        if (authority == null) {
-            if (ident < 0) {
-                ident = mNextAuthorityId;
-                mNextAuthorityId++;
-                doWrite = true;
+    private AuthorityInfo getOrCreateAuthorityLocked(EndPoint info, int ident, boolean doWrite) {
+        AuthorityInfo authority = null;
+        if (info.target_service) {
+            SparseArray<AuthorityInfo> aInfo = mServices.get(info.service);
+            if (aInfo == null) {
+                aInfo = new SparseArray<AuthorityInfo>();
+                mServices.put(info.service, aInfo);
             }
-            if (DEBUG) {
-                Log.v(TAG, "created a new AuthorityInfo for " + cname.getPackageName()
-                        + ", " + cname.getClassName()
-                        + ", user: " + userId);
+            authority = aInfo.get(info.userId);
+            if (authority == null) {
+                authority = createAuthorityLocked(info, ident, doWrite);
+                aInfo.put(info.userId, authority);
             }
-            authority = new AuthorityInfo(cname, userId, ident);
-            aInfo.put(userId, authority);
-            mAuthorities.put(ident, authority);
-            if (doWrite) {
-                writeAccountInfoLocked();
+        } else if (info.target_provider) {
+            AccountAndUser au = new AccountAndUser(info.account, info.userId);
+            AccountInfo account = mAccounts.get(au);
+            if (account == null) {
+                account = new AccountInfo(au);
+                mAccounts.put(au, account);
+            }
+            authority = account.authorities.get(info.provider);
+            if (authority == null) {
+                authority = createAuthorityLocked(info, ident, doWrite);
+                account.authorities.put(info.provider, authority);
             }
         }
         return authority;
     }
 
-    private AuthorityInfo getOrCreateAuthorityLocked(Account accountName, int userId,
-            String authorityName, int ident, boolean doWrite) {
-        AccountAndUser au = new AccountAndUser(accountName, userId);
-        AccountInfo account = mAccounts.get(au);
-        if (account == null) {
-            account = new AccountInfo(au);
-            mAccounts.put(au, account);
+    private AuthorityInfo createAuthorityLocked(EndPoint info, int ident, boolean doWrite) {
+        AuthorityInfo authority;
+        if (ident < 0) {
+            ident = mNextAuthorityId;
+            mNextAuthorityId++;
+            doWrite = true;
         }
-        AuthorityInfo authority = account.authorities.get(authorityName);
-        if (authority == null) {
-            if (ident < 0) {
-                ident = mNextAuthorityId;
-                mNextAuthorityId++;
-                doWrite = true;
-            }
-            if (DEBUG) {
-                Log.v(TAG, "created a new AuthorityInfo for " + accountName
-                        + ", user " + userId
-                        + ", provider " + authorityName);
-            }
-            authority = new AuthorityInfo(accountName, userId, authorityName, ident);
-            account.authorities.put(authorityName, authority);
-            mAuthorities.put(ident, authority);
-            if (doWrite) {
-                writeAccountInfoLocked();
-            }
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.v(TAG, "created a new AuthorityInfo for " + info);
         }
-
+        authority = new AuthorityInfo(info, ident);
+        mAuthorities.put(ident, authority);
+        if (doWrite) {
+            writeAccountInfoLocked();
+        }
         return authority;
     }
 
+    public void removeAuthority(EndPoint info) {
+        synchronized (mAuthorities) {
+            if (info.target_provider) {
+                removeAuthorityLocked(info.account, info.userId, info.provider, true /* doWrite */);
+            } else {
+                SparseArray<AuthorityInfo> aInfos = mServices.get(info.service);
+                if (aInfos != null) {
+                    AuthorityInfo authorityInfo = aInfos.get(info.userId);
+                    if (authorityInfo != null) {
+                        mAuthorities.remove(authorityInfo.ident);
+                        aInfos.delete(info.userId);
+                        writeAccountInfoLocked();
+                    }
+                }
+
+            }
+        }
+    }
+
+    /**
+     * Remove an authority associated with a provider. Needs to be a standalone function for
+     * backward compatibility.
+     */
     private void removeAuthorityLocked(Account account, int userId, String authorityName,
             boolean doWrite) {
         AccountInfo accountInfo = mAccounts.get(new AccountAndUser(account, userId));
@@ -1612,10 +1736,9 @@
 
     /**
      * Updates (in a synchronized way) the periodic sync time of the specified
-     * authority id and target periodic sync
+     * target id and target periodic sync
      */
-    public void setPeriodicSyncTime(
-            int authorityId, PeriodicSync targetPeriodicSync, long when) {
+    public void setPeriodicSyncTime(int authorityId, PeriodicSync targetPeriodicSync, long when) {
         boolean found = false;
         final AuthorityInfo authorityInfo;
         synchronized (mAuthorities) {
@@ -1631,7 +1754,7 @@
         }
         if (!found) {
             Log.w(TAG, "Ignoring setPeriodicSyncTime request for a sync that does not exist. " +
-                    "Authority: " + authorityInfo.authority);
+                    "Authority: " + authorityInfo.target);
         }
     }
 
@@ -1692,7 +1815,7 @@
         try {
             fis = mAccountInfoFile.openRead();
             if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-                Log.v(TAG, "Reading " + mAccountInfoFile.getBaseFile());
+                Log.v(TAG_FILE, "Reading " + mAccountInfoFile.getBaseFile());
             }
             XmlPullParser parser = Xml.newPullParser();
             parser.setInput(fis, null);
@@ -1806,10 +1929,14 @@
 
         ArrayList<AuthorityInfo> authoritiesToRemove = new ArrayList<AuthorityInfo>();
         final int N = mAuthorities.size();
-        for (int i=0; i<N; i++) {
+        for (int i = 0; i < N; i++) {
             AuthorityInfo authority = mAuthorities.valueAt(i);
+            // skip this authority if it doesn't target a provider
+            if (authority.target.target_service) {
+                continue;
+            }
             // skip this authority if it isn't one of the renamed ones
-            final String newAuthorityName = sAuthorityRenames.get(authority.authority);
+            final String newAuthorityName = sAuthorityRenames.get(authority.target.provider);
             if (newAuthorityName == null) {
                 continue;
             }
@@ -1825,20 +1952,26 @@
             }
 
             // if we already have a record of this new authority then don't copy over the settings
-            if (getAuthorityLocked(authority.account, authority.userId, newAuthorityName, "cleanup")
-                    != null) {
+            EndPoint newInfo =
+                    new EndPoint(authority.target.account,
+                            newAuthorityName,
+                            authority.target.userId);
+            if (getAuthorityLocked(newInfo, "cleanup") != null) {
                 continue;
             }
 
-            AuthorityInfo newAuthority = getOrCreateAuthorityLocked(authority.account,
-                    authority.userId, newAuthorityName, -1 /* ident */, false /* doWrite */);
+            AuthorityInfo newAuthority =
+                    getOrCreateAuthorityLocked(newInfo, -1 /* ident */, false /* doWrite */);
             newAuthority.enabled = true;
             writeNeeded = true;
         }
 
         for (AuthorityInfo authorityInfo : authoritiesToRemove) {
-            removeAuthorityLocked(authorityInfo.account, authorityInfo.userId,
-                    authorityInfo.authority, false /* doWrite */);
+            removeAuthorityLocked(
+                    authorityInfo.target.account,
+                    authorityInfo.target.userId,
+                    authorityInfo.target.provider,
+                    false /* doWrite */);
             writeNeeded = true;
         }
 
@@ -1880,30 +2013,37 @@
             String packageName = parser.getAttributeValue(null, "package");
             String className = parser.getAttributeValue(null, "class");
             int userId = user == null ? 0 : Integer.parseInt(user);
-            if (accountType == null) {
+            if (accountType == null && packageName == null) {
                 accountType = "com.google";
                 syncable = "unknown";
             }
             authority = mAuthorities.get(id);
             if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-                Log.v(TAG, "Adding authority: account="
-                        + accountName + " auth=" + authorityName
+                Log.v(TAG_FILE, "Adding authority:"
+                        + " account=" + accountName
+                        + " accountType=" + accountType
+                        + " auth=" + authorityName
+                        + " package=" + packageName
+                        + " class=" + className
                         + " user=" + userId
                         + " enabled=" + enabled
                         + " syncable=" + syncable);
             }
             if (authority == null) {
                 if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-                    Log.v(TAG, "Creating entry");
+                    Log.v(TAG_FILE, "Creating authority entry");
                 }
-                if (accountName != null && accountType != null) {
-                    authority = getOrCreateAuthorityLocked(
-                            new Account(accountName, accountType), userId, authorityName, id,
-                                false);
+                EndPoint info;
+                if (accountName != null && authorityName != null) {
+                    info = new EndPoint(
+                            new Account(accountName, accountType),
+                            authorityName, userId);
                 } else {
-                    authority = getOrCreateAuthorityLocked(
-                            new ComponentName(packageName, className), userId, id, false);
+                    info = new EndPoint(
+                            new ComponentName(packageName, className),
+                            userId);
                 }
+                authority = getOrCreateAuthorityLocked(info, id, false);
                 // If the version is 0 then we are upgrading from a file format that did not
                 // know about periodic syncs. In that case don't clear the list since we
                 // want the default, which is a daily periodic sync.
@@ -1934,7 +2074,7 @@
     /**
      * Parse a periodic sync from accounts.xml. Sets the bundle to be empty.
      */
-    private PeriodicSync parsePeriodicSync(XmlPullParser parser, AuthorityInfo authority) {
+    private PeriodicSync parsePeriodicSync(XmlPullParser parser, AuthorityInfo authorityInfo) {
         Bundle extras = new Bundle(); // Gets filled in later.
         String periodValue = parser.getAttributeValue(null, "period");
         String flexValue = parser.getAttributeValue(null, "flex");
@@ -1952,17 +2092,31 @@
         try {
             flextime = Long.parseLong(flexValue);
         } catch (NumberFormatException e) {
-            Log.e(TAG, "Error formatting value parsed for periodic sync flex: " + flexValue);
             flextime = calculateDefaultFlexTime(period);
+            Log.e(TAG, "Error formatting value parsed for periodic sync flex: " + flexValue
+                    + ", using default: "
+                    + flextime);
         } catch (NullPointerException expected) {
             flextime = calculateDefaultFlexTime(period);
             Log.d(TAG, "No flex time specified for this sync, using a default. period: "
             + period + " flex: " + flextime);
         }
-        final PeriodicSync periodicSync =
-                new PeriodicSync(authority.account, authority.authority, extras,
+        PeriodicSync periodicSync;
+        if (authorityInfo.target.target_provider) {
+            periodicSync =
+                new PeriodicSync(authorityInfo.target.account,
+                        authorityInfo.target.provider,
+                        extras,
                         period, flextime);
-        authority.periodicSyncs.add(periodicSync);
+        } else {
+            periodicSync =
+                    new PeriodicSync(
+                            authorityInfo.target.service,
+                            extras,
+                            period,
+                            flextime);
+        }
+        authorityInfo.periodicSyncs.add(periodicSync);
         return periodicSync;
     }
 
@@ -2000,7 +2154,7 @@
      */
     private void writeAccountInfoLocked() {
         if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-            Log.v(TAG, "Writing new " + mAccountInfoFile.getBaseFile());
+            Log.v(TAG_FILE, "Writing new " + mAccountInfoFile.getBaseFile());
         }
         FileOutputStream fos = null;
 
@@ -2030,17 +2184,18 @@
             final int N = mAuthorities.size();
             for (int i = 0; i < N; i++) {
                 AuthorityInfo authority = mAuthorities.valueAt(i);
+                EndPoint info = authority.target;
                 out.startTag(null, "authority");
                 out.attribute(null, "id", Integer.toString(authority.ident));
-                out.attribute(null, XML_ATTR_USER, Integer.toString(authority.userId));
+                out.attribute(null, XML_ATTR_USER, Integer.toString(info.userId));
                 out.attribute(null, XML_ATTR_ENABLED, Boolean.toString(authority.enabled));
-                if (authority.service == null) {
-                    out.attribute(null, "account", authority.account.name);
-                    out.attribute(null, "type", authority.account.type);
-                    out.attribute(null, "authority", authority.authority);
+                if (info.service == null) {
+                    out.attribute(null, "account", info.account.name);
+                    out.attribute(null, "type", info.account.type);
+                    out.attribute(null, "authority", info.provider);
                 } else {
-                    out.attribute(null, "package", authority.service.getPackageName());
-                    out.attribute(null, "class", authority.service.getClassName());
+                    out.attribute(null, "package", info.service.getPackageName());
+                    out.attribute(null, "class", info.service.getClassName());
                 }
                 if (authority.syncable < 0) {
                     out.attribute(null, "syncable", "unknown");
@@ -2100,7 +2255,7 @@
 
             // Copy in all of the status information, as well as accounts.
             if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-                Log.v(TAG, "Reading legacy sync accounts db");
+                Log.v(TAG_FILE, "Reading legacy sync accounts db");
             }
             SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
             qb.setTables("stats, status");
@@ -2134,9 +2289,13 @@
                     accountType = "com.google";
                 }
                 String authorityName = c.getString(c.getColumnIndex("authority"));
-                AuthorityInfo authority = this.getOrCreateAuthorityLocked(
-                        new Account(accountName, accountType), 0 /* legacy is single-user */,
-                        authorityName, -1, false);
+                AuthorityInfo authority =
+                        this.getOrCreateAuthorityLocked(
+                                new EndPoint(new Account(accountName, accountType),
+                                        authorityName,
+                                        0 /* legacy is single-user */)
+                                , -1,
+                                false);
                 if (authority != null) {
                     int i = mSyncStatus.size();
                     boolean found = false;
@@ -2188,7 +2347,7 @@
                     while (i > 0) {
                         i--;
                         AuthorityInfo authority = mAuthorities.valueAt(i);
-                        if (authority.authority.equals(provider)) {
+                        if (authority.target.provider.equals(provider)) {
                             authority.enabled = value == null || Boolean.parseBoolean(value);
                             authority.syncable = 1;
                         }
@@ -2212,7 +2371,7 @@
      */
     private void readStatusLocked() {
         if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-            Log.v(TAG, "Reading " + mStatusFile.getBaseFile());
+            Log.v(TAG_FILE, "Reading " + mStatusFile.getBaseFile());
         }
         try {
             byte[] data = mStatusFile.readFully();
@@ -2226,8 +2385,7 @@
                     if (mAuthorities.indexOfKey(status.authorityId) >= 0) {
                         status.pending = false;
                         if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-                            Log.v(TAG, "Adding status for id "
-                                    + status.authorityId);
+                            Log.v(TAG_FILE, "Adding status for id " + status.authorityId);
                         }
                         mSyncStatus.put(status.authorityId, status);
                     }
@@ -2247,7 +2405,7 @@
      */
     private void writeStatusLocked() {
         if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-            Log.v(TAG, "Writing new " + mStatusFile.getBaseFile());
+            Log.v(TAG_FILE, "Writing new " + mStatusFile.getBaseFile());
         }
 
         // The file is being written, so we don't need to have a scheduled
@@ -2285,11 +2443,14 @@
         if (!mPendingFile.getBaseFile().exists()) {
             if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
                 Log.v(TAG_FILE, "No pending operation file.");
-                return;
             }
+            return;
         }
         try {
             fis = mPendingFile.openRead();
+            if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
+                Log.v(TAG_FILE, "Reading " + mPendingFile.getBaseFile());
+            }
             XmlPullParser parser;
             parser = Xml.newPullParser();
             parser.setInput(fis, null);
@@ -2301,12 +2462,11 @@
             }
             if (eventType == XmlPullParser.END_DOCUMENT) return; // Nothing to read.
 
-            String tagName = parser.getName();
             do {
                 PendingOperation pop = null;
                 if (eventType == XmlPullParser.START_TAG) {
                     try {
-                        tagName = parser.getName();
+                        String tagName = parser.getName();
                         if (parser.getDepth() == 1 && "op".equals(tagName)) {
                             // Verify version.
                             String versionString =
@@ -2331,18 +2491,16 @@
                             }
                             if (authority != null) {
                                 pop = new PendingOperation(
-                                        authority.account, authority.userId, reason,
-                                        syncSource, authority.authority, new Bundle(),
-                                        expedited);
+                                        authority, reason, syncSource, new Bundle(), expedited);
                                 pop.flatExtras = null; // No longer used.
                                 mPendingOperations.add(pop);
                                 if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
                                     Log.v(TAG_FILE, "Adding pending op: "
-                                            + pop.authority
+                                            + pop.target
                                             + " src=" + pop.syncSource
                                             + " reason=" + pop.reason
                                             + " expedited=" + pop.expedited);
-                                }
+                                    }
                             } else {
                                 // Skip non-existent authority.
                                 pop = null;
@@ -2377,11 +2535,40 @@
         }
     }
 
+    static private byte[] flattenBundle(Bundle bundle) {
+        byte[] flatData = null;
+        Parcel parcel = Parcel.obtain();
+        try {
+            bundle.writeToParcel(parcel, 0);
+            flatData = parcel.marshall();
+        } finally {
+            parcel.recycle();
+        }
+        return flatData;
+    }
+
+    static private Bundle unflattenBundle(byte[] flatData) {
+        Bundle bundle;
+        Parcel parcel = Parcel.obtain();
+        try {
+            parcel.unmarshall(flatData, 0, flatData.length);
+            parcel.setDataPosition(0);
+            bundle = parcel.readBundle();
+        } catch (RuntimeException e) {
+            // A RuntimeException is thrown if we were unable to parse the parcel.
+            // Create an empty parcel in this case.
+            bundle = new Bundle();
+        } finally {
+            parcel.recycle();
+        }
+        return bundle;
+    }
+
+    private static final String XML_ATTR_VERSION = "version";
     private static final String XML_ATTR_AUTHORITYID = "authority_id";
     private static final String XML_ATTR_SOURCE = "source";
     private static final String XML_ATTR_EXPEDITED = "expedited";
     private static final String XML_ATTR_REASON = "reason";
-    private static final String XML_ATTR_VERSION = "version";
 
     /**
      * Write all currently pending ops to the pending ops file.
@@ -2391,14 +2578,14 @@
         FileOutputStream fos = null;
         try {
             if (N == 0) {
-                if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-                    Log.v(TAG_FILE, "Truncating " + mPendingFile.getBaseFile());
+                if (Log.isLoggable(TAG_FILE, Log.VERBOSE)){
+                    Log.v(TAG, "Truncating " + mPendingFile.getBaseFile());
                 }
                 mPendingFile.truncate();
                 return;
             }
             if (Log.isLoggable(TAG_FILE, Log.VERBOSE)) {
-                Log.v(TAG_FILE, "Writing new " + mPendingFile.getBaseFile());
+                Log.v(TAG, "Writing new " + mPendingFile.getBaseFile());
             }
             fos = mPendingFile.startWrite();
             XmlSerializer out = new FastXmlSerializer();
@@ -2407,9 +2594,9 @@
             for (int i = 0; i < N; i++) {
                 PendingOperation pop = mPendingOperations.get(i);
                 writePendingOperationLocked(pop, out);
-            }
-            out.endDocument();
-            mPendingFile.finishWrite(fos);
+             }
+             out.endDocument();
+             mPendingFile.finishWrite(fos);
         } catch (java.io.IOException e1) {
             Log.w(TAG, "Error writing pending operations", e1);
             if (fos != null) {
@@ -2469,35 +2656,6 @@
         }
     }
 
-    static private byte[] flattenBundle(Bundle bundle) {
-        byte[] flatData = null;
-        Parcel parcel = Parcel.obtain();
-        try {
-            bundle.writeToParcel(parcel, 0);
-            flatData = parcel.marshall();
-        } finally {
-            parcel.recycle();
-        }
-        return flatData;
-    }
-
-    static private Bundle unflattenBundle(byte[] flatData) {
-        Bundle bundle;
-        Parcel parcel = Parcel.obtain();
-        try {
-            parcel.unmarshall(flatData, 0, flatData.length);
-            parcel.setDataPosition(0);
-            bundle = parcel.readBundle();
-        } catch (RuntimeException e) {
-            // A RuntimeException is thrown if we were unable to parse the parcel.
-            // Create an empty parcel in this case.
-            bundle = new Bundle();
-        } finally {
-            parcel.recycle();
-        }
-        return bundle;
-    }
-
     private void extrasToXml(XmlSerializer out, Bundle extras) throws java.io.IOException {
         for (String key : extras.keySet()) {
             out.startTag(null, "extra");
@@ -2530,6 +2688,24 @@
         }
     }
 
+    private void requestSync(AuthorityInfo authorityInfo, int reason, Bundle extras) {
+        if (android.os.Process.myUid() == android.os.Process.SYSTEM_UID
+                && mSyncRequestListener != null) {
+            mSyncRequestListener.onSyncRequest(authorityInfo.target, reason, extras);
+        } else {
+            SyncRequest.Builder req =
+                    new SyncRequest.Builder()
+                            .syncOnce()
+                            .setExtras(extras);
+            if (authorityInfo.target.target_provider) {
+                req.setSyncAdapter(authorityInfo.target.account, authorityInfo.target.provider);
+            } else {
+                req.setSyncAdapter(authorityInfo.target.service);
+            }
+            ContentResolver.requestSync(req.build());
+        }
+    }
+
     private void requestSync(Account account, int userId, int reason, String authority,
             Bundle extras) {
         // If this is happening in the system process, then call the syncrequest listener
@@ -2538,7 +2714,10 @@
         // which will know which userId to apply based on the Binder id.
         if (android.os.Process.myUid() == android.os.Process.SYSTEM_UID
                 && mSyncRequestListener != null) {
-            mSyncRequestListener.onSyncRequest(account, userId, reason, authority, extras);
+            mSyncRequestListener.onSyncRequest(
+                new EndPoint(account, authority, userId),
+                reason,
+                extras);
         } else {
             ContentResolver.requestSync(account, authority, extras);
         }
@@ -2634,10 +2813,8 @@
     public void dumpPendingOperations(StringBuilder sb) {
         sb.append("Pending Ops: ").append(mPendingOperations.size()).append(" operation(s)\n");
         for (PendingOperation pop : mPendingOperations) {
-            sb.append("(" + pop.account)
-                .append(", u" + pop.userId)
-                .append(", " + pop.authority)
-                .append(", " + pop.extras)
+            sb.append("(info: " + pop.target.toString())
+                .append(", extras: " + pop.extras)
                 .append(")\n");
         }
     }
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
new file mode 100644
index 0000000..5fa1584
--- /dev/null
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -0,0 +1,688 @@
+/*
+ * Copyright (C) 2014 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.android.server.display;
+
+import com.android.server.LocalServices;
+import com.android.server.twilight.TwilightListener;
+import com.android.server.twilight.TwilightManager;
+import com.android.server.twilight.TwilightState;
+
+import android.content.res.Resources;
+import android.hardware.Sensor;
+import android.hardware.SensorEvent;
+import android.hardware.SensorEventListener;
+import android.hardware.SensorManager;
+import android.hardware.display.DisplayManagerInternal;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.PowerManager;
+import android.os.SystemClock;
+import android.text.format.DateUtils;
+import android.util.MathUtils;
+import android.util.Spline;
+import android.util.Slog;
+import android.util.TimeUtils;
+
+import java.io.PrintWriter;
+import java.util.Arrays;
+
+class AutomaticBrightnessController {
+    private static final String TAG = "AutomaticBrightnessController";
+
+    private static final boolean DEBUG = false;
+    private static final boolean DEBUG_PRETEND_LIGHT_SENSOR_ABSENT = false;
+
+    // If true, enables the use of the screen auto-brightness adjustment setting.
+    private static final boolean USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT =
+            PowerManager.useScreenAutoBrightnessAdjustmentFeature();
+
+    // The maximum range of gamma adjustment possible using the screen
+    // auto-brightness adjustment setting.
+    private static final float SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT_MAX_GAMMA = 3.0f;
+
+    // Light sensor event rate in milliseconds.
+    private static final int LIGHT_SENSOR_RATE_MILLIS = 1000;
+
+    // Period of time in which to consider light samples in milliseconds.
+    private static final int AMBIENT_LIGHT_HORIZON = 10000;
+
+    // Stability requirements in milliseconds for accepting a new brightness level.  This is used
+    // for debouncing the light sensor.  Different constants are used to debounce the light sensor
+    // when adapting to brighter or darker environments.  This parameter controls how quickly
+    // brightness changes occur in response to an observed change in light level that exceeds the
+    // hysteresis threshold.
+    private static final long BRIGHTENING_LIGHT_DEBOUNCE = 4000;
+    private static final long DARKENING_LIGHT_DEBOUNCE = 8000;
+
+    // Hysteresis constraints for brightening or darkening.
+    // The recent lux must have changed by at least this fraction relative to the
+    // current ambient lux before a change will be considered.
+    private static final float BRIGHTENING_LIGHT_HYSTERESIS = 0.10f;
+    private static final float DARKENING_LIGHT_HYSTERESIS = 0.20f;
+
+    // The intercept used for the weighting calculation. This is used in order to keep all possible
+    // weighting values positive.
+    private static final int WEIGHTING_INTERCEPT = AMBIENT_LIGHT_HORIZON;
+
+    // How long the current sensor reading is assumed to be valid beyond the current time.
+    // This provides a bit of prediction, as well as ensures that the weight for the last sample is
+    // non-zero, which in turn ensures that the total weight is non-zero.
+    private static final long AMBIENT_LIGHT_PREDICTION_TIME_MILLIS = 100;
+
+    // If true, enables the use of the current time as an auto-brightness adjustment.
+    // The basic idea here is to expand the dynamic range of auto-brightness
+    // when it is especially dark outside.  The light sensor tends to perform
+    // poorly at low light levels so we compensate for it by making an
+    // assumption about the environment.
+    private static final boolean USE_TWILIGHT_ADJUSTMENT =
+            PowerManager.useTwilightAdjustmentFeature();
+
+    // Specifies the maximum magnitude of the time of day adjustment.
+    private static final float TWILIGHT_ADJUSTMENT_MAX_GAMMA = 1.5f;
+
+    // The amount of time after or before sunrise over which to start adjusting
+    // the gamma.  We want the change to happen gradually so that it is below the
+    // threshold of perceptibility and so that the adjustment has maximum effect
+    // well after dusk.
+    private static final long TWILIGHT_ADJUSTMENT_TIME = DateUtils.HOUR_IN_MILLIS * 2;
+
+    private static final int MSG_UPDATE_AMBIENT_LUX = 1;
+
+    // Callbacks for requesting updates to the the display's power state
+    private final Callbacks mCallbacks;
+
+    // The sensor manager.
+    private final SensorManager mSensorManager;
+
+    // The light sensor, or null if not available or needed.
+    private final Sensor mLightSensor;
+
+    // The twilight service.
+    private final TwilightManager mTwilight;
+
+    // The auto-brightness spline adjustment.
+    // The brightness values have been scaled to a range of 0..1.
+    private final Spline mScreenAutoBrightnessSpline;
+
+    // The minimum and maximum screen brightnesses.
+    private final int mScreenBrightnessRangeMinimum;
+    private final int mScreenBrightnessRangeMaximum;
+
+    // Amount of time to delay auto-brightness after screen on while waiting for
+    // the light sensor to warm-up in milliseconds.
+    // May be 0 if no warm-up is required.
+    private int mLightSensorWarmUpTimeConfig;
+
+    // Set to true if the light sensor is enabled.
+    private boolean mLightSensorEnabled;
+
+    // The time when the light sensor was enabled.
+    private long mLightSensorEnableTime;
+
+    // The currently accepted nominal ambient light level.
+    private float mAmbientLux;
+
+    // True if mAmbientLux holds a valid value.
+    private boolean mAmbientLuxValid;
+
+    // The ambient light level threshold at which to brighten or darken the screen.
+    private float mBrighteningLuxThreshold;
+    private float mDarkeningLuxThreshold;
+
+    // The most recent light sample.
+    private float mLastObservedLux;
+
+    // The time of the most light recent sample.
+    private long mLastObservedLuxTime;
+
+    // The number of light samples collected since the light sensor was enabled.
+    private int mRecentLightSamples;
+
+    // A ring buffer containing all of the recent ambient light sensor readings.
+    private AmbientLightRingBuffer mAmbientLightRingBuffer;
+
+    // The handler
+    private AutomaticBrightnessHandler mHandler;
+
+    // The screen brightness level that has been chosen by the auto-brightness
+    // algorithm.  The actual brightness should ramp towards this value.
+    // We preserve this value even when we stop using the light sensor so
+    // that we can quickly revert to the previous auto-brightness level
+    // while the light sensor warms up.
+    // Use -1 if there is no current auto-brightness value available.
+    private int mScreenAutoBrightness = -1;
+
+    // The screen auto-brightness adjustment factor in the range -1 (dimmer) to 1 (brighter)
+    private float mScreenAutoBrightnessAdjustment = 0.0f;
+
+    // The last screen auto-brightness gamma.  (For printing in dump() only.)
+    private float mLastScreenAutoBrightnessGamma = 1.0f;
+
+    public AutomaticBrightnessController(Callbacks callbacks, Looper looper,
+            SensorManager sensorManager, Spline autoBrightnessSpline,
+            int lightSensorWarmUpTime, int brightnessMin, int brightnessMax) {
+        mCallbacks = callbacks;
+        mTwilight = LocalServices.getService(TwilightManager.class);
+        mSensorManager = sensorManager;
+        mScreenAutoBrightnessSpline = autoBrightnessSpline;
+        mScreenBrightnessRangeMinimum = brightnessMin;
+        mScreenBrightnessRangeMaximum = brightnessMax;
+        mLightSensorWarmUpTimeConfig = lightSensorWarmUpTime;
+
+        mHandler = new AutomaticBrightnessHandler(looper);
+        mAmbientLightRingBuffer = new AmbientLightRingBuffer();
+
+        if (!DEBUG_PRETEND_LIGHT_SENSOR_ABSENT) {
+            mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
+        }
+
+        if (USE_TWILIGHT_ADJUSTMENT) {
+            mTwilight.registerListener(mTwilightListener, mHandler);
+        }
+    }
+
+    public int getAutomaticScreenBrightness() {
+        return mScreenAutoBrightness;
+    }
+
+    public void updatePowerState(DisplayManagerInternal.DisplayPowerRequest request) {
+        if (setScreenAutoBrightnessAdjustment(request.screenAutoBrightnessAdjustment)
+                || setLightSensorEnabled(request.wantLightSensorEnabled())) {
+            updateAutoBrightness(false /*sendUpdate*/);
+        }
+    }
+
+    public void dump(PrintWriter pw) {
+        pw.println();
+        pw.println("Automatic Brightness Controller Configuration:");
+        pw.println("  mScreenAutoBrightnessSpline=" + mScreenAutoBrightnessSpline);
+        pw.println("  mScreenBrightnessRangeMinimum=" + mScreenBrightnessRangeMinimum);
+        pw.println("  mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
+        pw.println("  mLightSensorWarmUpTimeConfig=" + mLightSensorWarmUpTimeConfig);
+
+        pw.println();
+        pw.println("Automatic Brightness Controller State:");
+        pw.println("  mLightSensor=" + mLightSensor);
+        pw.println("  mTwilight.getCurrentState()=" + mTwilight.getCurrentState());
+        pw.println("  mLightSensorEnabled=" + mLightSensorEnabled);
+        pw.println("  mLightSensorEnableTime=" + TimeUtils.formatUptime(mLightSensorEnableTime));
+        pw.println("  mAmbientLux=" + mAmbientLux);
+        pw.println("  mBrighteningLuxThreshold=" + mBrighteningLuxThreshold);
+        pw.println("  mDarkeningLuxThreshold=" + mDarkeningLuxThreshold);
+        pw.println("  mLastObservedLux=" + mLastObservedLux);
+        pw.println("  mLastObservedLuxTime=" + TimeUtils.formatUptime(mLastObservedLuxTime));
+        pw.println("  mRecentLightSamples=" + mRecentLightSamples);
+        pw.println("  mAmbientLightRingBuffer=" + mAmbientLightRingBuffer);
+        pw.println("  mScreenAutoBrightness=" + mScreenAutoBrightness);
+        pw.println("  mScreenAutoBrightnessAdjustment=" + mScreenAutoBrightnessAdjustment);
+        pw.println("  mLastScreenAutoBrightnessGamma=" + mLastScreenAutoBrightnessGamma);
+    }
+
+    private boolean setLightSensorEnabled(boolean enable) {
+        if (enable) {
+            if (!mLightSensorEnabled) {
+                mLightSensorEnabled = true;
+                mLightSensorEnableTime = SystemClock.uptimeMillis();
+                mSensorManager.registerListener(mLightSensorListener, mLightSensor,
+                        LIGHT_SENSOR_RATE_MILLIS * 1000, mHandler);
+                return true;
+            }
+        } else {
+            if (mLightSensorEnabled) {
+                mLightSensorEnabled = false;
+                mAmbientLuxValid = false;
+                mRecentLightSamples = 0;
+                mAmbientLightRingBuffer.clear();
+                mHandler.removeMessages(MSG_UPDATE_AMBIENT_LUX);
+                mSensorManager.unregisterListener(mLightSensorListener);
+            }
+        }
+        return false;
+    }
+
+    private void handleLightSensorEvent(long time, float lux) {
+        mHandler.removeMessages(MSG_UPDATE_AMBIENT_LUX);
+
+        applyLightSensorMeasurement(time, lux);
+        updateAmbientLux(time);
+    }
+
+    private void applyLightSensorMeasurement(long time, float lux) {
+        mRecentLightSamples++;
+        mAmbientLightRingBuffer.prune(time - AMBIENT_LIGHT_HORIZON);
+        mAmbientLightRingBuffer.push(time, lux);
+
+        // Remember this sample value.
+        mLastObservedLux = lux;
+        mLastObservedLuxTime = time;
+    }
+
+    private boolean setScreenAutoBrightnessAdjustment(float adjustment) {
+        if (adjustment != mScreenAutoBrightnessAdjustment) {
+            mScreenAutoBrightnessAdjustment = adjustment;
+            return true;
+        }
+        return false;
+    }
+
+    private void setAmbientLux(float lux) {
+        mAmbientLux = lux;
+        mBrighteningLuxThreshold = mAmbientLux * (1.0f + BRIGHTENING_LIGHT_HYSTERESIS);
+        mDarkeningLuxThreshold = mAmbientLux * (1.0f - DARKENING_LIGHT_HYSTERESIS);
+    }
+
+    private float calculateAmbientLux(long now) {
+        final int N = mAmbientLightRingBuffer.size();
+        if (N == 0) {
+            Slog.e(TAG, "calculateAmbientLux: No ambient light readings available");
+            return -1;
+        }
+        float sum = 0;
+        float totalWeight = 0;
+        long endTime = AMBIENT_LIGHT_PREDICTION_TIME_MILLIS;
+        for (int i = N - 1; i >= 0; i--) {
+            long startTime = (mAmbientLightRingBuffer.getTime(i) - now);
+            float weight = calculateWeight(startTime, endTime);
+            float lux = mAmbientLightRingBuffer.getLux(i);
+            if (DEBUG) {
+                Slog.d(TAG, "calculateAmbientLux: [" +
+                        (startTime) + ", " +
+                        (endTime) + "]: lux=" + lux + ", weight=" + weight);
+            }
+            totalWeight += weight;
+            sum += mAmbientLightRingBuffer.getLux(i) * weight;
+            endTime = startTime;
+        }
+        if (DEBUG) {
+            Slog.d(TAG, "calculateAmbientLux: totalWeight=" + totalWeight +
+                    ", newAmbientLux=" + (sum / totalWeight));
+        }
+        return sum / totalWeight;
+    }
+
+    private static float calculateWeight(long startDelta, long endDelta) {
+        return weightIntegral(endDelta) - weightIntegral(startDelta);
+    }
+
+    // Evaluates the integral of y = x + WEIGHTING_INTERCEPT. This is always positive for the
+    // horizon we're looking at and provides a non-linear weighting for light samples.
+    private static float weightIntegral(long x) {
+        return x * (x * 0.5f + WEIGHTING_INTERCEPT);
+    }
+
+    private long nextAmbientLightBrighteningTransition(long time) {
+        final int N = mAmbientLightRingBuffer.size();
+        long earliestValidTime = time;
+        for (int i = N - 1; i >= 0; i--) {
+            if (mAmbientLightRingBuffer.getLux(i) <= mBrighteningLuxThreshold) {
+                break;
+            }
+            earliestValidTime = mAmbientLightRingBuffer.getTime(i);
+        }
+        return earliestValidTime + BRIGHTENING_LIGHT_DEBOUNCE;
+    }
+
+    private long nextAmbientLightDarkeningTransition(long time) {
+        final int N = mAmbientLightRingBuffer.size();
+        long earliestValidTime = time;
+        for (int i = N - 1; i >= 0; i--) {
+            if (mAmbientLightRingBuffer.getLux(i) >= mDarkeningLuxThreshold) {
+                break;
+            }
+            earliestValidTime = mAmbientLightRingBuffer.getTime(i);
+        }
+        return earliestValidTime + DARKENING_LIGHT_DEBOUNCE;
+    }
+
+    private void updateAmbientLux() {
+        long time = SystemClock.uptimeMillis();
+        mAmbientLightRingBuffer.prune(time - AMBIENT_LIGHT_HORIZON);
+        updateAmbientLux(time);
+    }
+
+    private void updateAmbientLux(long time) {
+        // If the light sensor was just turned on then immediately update our initial
+        // estimate of the current ambient light level.
+        if (!mAmbientLuxValid) {
+            final long timeWhenSensorWarmedUp =
+                mLightSensorWarmUpTimeConfig + mLightSensorEnableTime;
+            if (time < timeWhenSensorWarmedUp) {
+                if (DEBUG) {
+                    Slog.d(TAG, "updateAmbientLux: Sensor not  ready yet: "
+                            + "time=" + time
+                            + ", timeWhenSensorWarmedUp=" + timeWhenSensorWarmedUp);
+                }
+                mHandler.sendEmptyMessageAtTime(MSG_UPDATE_AMBIENT_LUX,
+                        timeWhenSensorWarmedUp);
+                return;
+            }
+            setAmbientLux(calculateAmbientLux(time));
+            mAmbientLuxValid = true;
+            if (DEBUG) {
+                Slog.d(TAG, "updateAmbientLux: Initializing: "
+                        + "mAmbientLightRingBuffer=" + mAmbientLightRingBuffer
+                        + ", mAmbientLux=" + mAmbientLux);
+            }
+            updateAutoBrightness(true);
+        }
+
+        long nextBrightenTransition = nextAmbientLightBrighteningTransition(time);
+        long nextDarkenTransition = nextAmbientLightDarkeningTransition(time);
+        float ambientLux = calculateAmbientLux(time);
+
+        if (ambientLux >= mBrighteningLuxThreshold && nextBrightenTransition <= time
+                || ambientLux <= mDarkeningLuxThreshold && nextDarkenTransition <= time) {
+            setAmbientLux(ambientLux);
+            if (DEBUG) {
+                Slog.d(TAG, "updateAmbientLux: "
+                        + ((ambientLux > mAmbientLux) ? "Brightened" : "Darkened") + ": "
+                        + "mBrighteningLuxThreshold=" + mBrighteningLuxThreshold
+                        + ", mAmbientLightRingBuffer=" + mAmbientLightRingBuffer
+                        + ", mAmbientLux=" + mAmbientLux);
+            }
+            updateAutoBrightness(true);
+            nextBrightenTransition = nextAmbientLightBrighteningTransition(time);
+            nextDarkenTransition = nextAmbientLightDarkeningTransition(time);
+        }
+        long nextTransitionTime = Math.min(nextDarkenTransition, nextBrightenTransition);
+        // If one of the transitions is ready to occur, but the total weighted ambient lux doesn't
+        // exceed the necessary threshold, then it's possible we'll get a transition time prior to
+        // now. Rather than continually checking to see whether the weighted lux exceeds the
+        // threshold, schedule an update for when we'd normally expect another light sample, which
+        // should be enough time to decide whether we should actually transition to the new
+        // weighted ambient lux or not.
+        nextTransitionTime =
+                nextTransitionTime > time ? nextTransitionTime : time + LIGHT_SENSOR_RATE_MILLIS;
+        if (DEBUG) {
+            Slog.d(TAG, "updateAmbientLux: Scheduling ambient lux update for "
+                    + nextTransitionTime + TimeUtils.formatUptime(nextTransitionTime));
+        }
+        mHandler.sendEmptyMessageAtTime(MSG_UPDATE_AMBIENT_LUX, nextTransitionTime);
+    }
+
+    private void updateAutoBrightness(boolean sendUpdate) {
+        if (!mAmbientLuxValid) {
+            return;
+        }
+
+        float value = mScreenAutoBrightnessSpline.interpolate(mAmbientLux);
+        float gamma = 1.0f;
+
+        if (USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT
+                && mScreenAutoBrightnessAdjustment != 0.0f) {
+            final float adjGamma = MathUtils.pow(SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT_MAX_GAMMA,
+                    Math.min(1.0f, Math.max(-1.0f, -mScreenAutoBrightnessAdjustment)));
+            gamma *= adjGamma;
+            if (DEBUG) {
+                Slog.d(TAG, "updateAutoBrightness: adjGamma=" + adjGamma);
+            }
+        }
+
+        if (USE_TWILIGHT_ADJUSTMENT) {
+            TwilightState state = mTwilight.getCurrentState();
+            if (state != null && state.isNight()) {
+                final long now = System.currentTimeMillis();
+                final float earlyGamma =
+                        getTwilightGamma(now, state.getYesterdaySunset(), state.getTodaySunrise());
+                final float lateGamma =
+                        getTwilightGamma(now, state.getTodaySunset(), state.getTomorrowSunrise());
+                gamma *= earlyGamma * lateGamma;
+                if (DEBUG) {
+                    Slog.d(TAG, "updateAutoBrightness: earlyGamma=" + earlyGamma
+                            + ", lateGamma=" + lateGamma);
+                }
+            }
+        }
+
+        if (gamma != 1.0f) {
+            final float in = value;
+            value = MathUtils.pow(value, gamma);
+            if (DEBUG) {
+                Slog.d(TAG, "updateAutoBrightness: gamma=" + gamma
+                        + ", in=" + in + ", out=" + value);
+            }
+        }
+
+        int newScreenAutoBrightness =
+            clampScreenBrightness(Math.round(value * PowerManager.BRIGHTNESS_ON));
+        if (mScreenAutoBrightness != newScreenAutoBrightness) {
+            if (DEBUG) {
+                Slog.d(TAG, "updateAutoBrightness: mScreenAutoBrightness="
+                        + mScreenAutoBrightness + ", newScreenAutoBrightness="
+                        + newScreenAutoBrightness);
+            }
+
+            mScreenAutoBrightness = newScreenAutoBrightness;
+            mLastScreenAutoBrightnessGamma = gamma;
+            if (sendUpdate) {
+                mCallbacks.updateBrightness();
+            }
+        }
+    }
+
+    private int clampScreenBrightness(int value) {
+        return MathUtils.constrain(value,
+                mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum);
+    }
+
+    private static float getTwilightGamma(long now, long lastSunset, long nextSunrise) {
+        if (lastSunset < 0 || nextSunrise < 0
+                || now < lastSunset || now > nextSunrise) {
+            return 1.0f;
+        }
+
+        if (now < lastSunset + TWILIGHT_ADJUSTMENT_TIME) {
+            return MathUtils.lerp(1.0f, TWILIGHT_ADJUSTMENT_MAX_GAMMA,
+                    (float)(now - lastSunset) / TWILIGHT_ADJUSTMENT_TIME);
+        }
+
+        if (now > nextSunrise - TWILIGHT_ADJUSTMENT_TIME) {
+            return MathUtils.lerp(1.0f, TWILIGHT_ADJUSTMENT_MAX_GAMMA,
+                    (float)(nextSunrise - now) / TWILIGHT_ADJUSTMENT_TIME);
+        }
+
+        return TWILIGHT_ADJUSTMENT_MAX_GAMMA;
+    }
+
+    private final class AutomaticBrightnessHandler extends Handler {
+        public AutomaticBrightnessHandler(Looper looper) {
+            super(looper, null, true /*async*/);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_UPDATE_AMBIENT_LUX:
+                    updateAmbientLux();
+                    break;
+            }
+        }
+    }
+
+    private final SensorEventListener mLightSensorListener = new SensorEventListener() {
+        @Override
+        public void onSensorChanged(SensorEvent event) {
+            if (mLightSensorEnabled) {
+                final long time = SystemClock.uptimeMillis();
+                final float lux = event.values[0];
+                handleLightSensorEvent(time, lux);
+            }
+        }
+
+        @Override
+        public void onAccuracyChanged(Sensor sensor, int accuracy) {
+            // Not used.
+        }
+    };
+
+    private final TwilightListener mTwilightListener = new TwilightListener() {
+        @Override
+        public void onTwilightStateChanged() {
+            updateAutoBrightness(true /*sendUpdate*/);
+        }
+    };
+
+    /** Callbacks to request updates to the display's power state. */
+    interface Callbacks {
+        void updateBrightness();
+    }
+
+    private static final class AmbientLightRingBuffer{
+        // Proportional extra capacity of the buffer beyond the expected number of light samples
+        // in the horizon
+        private static final float BUFFER_SLACK = 1.5f;
+        private static final int DEFAULT_CAPACITY =
+            (int) Math.ceil(AMBIENT_LIGHT_HORIZON * BUFFER_SLACK / LIGHT_SENSOR_RATE_MILLIS);
+        private float[] mRingLux;
+        private long[] mRingTime;
+        private int mCapacity;
+
+        // The first valid element and the next open slot.
+        // Note that if mCount is zero then there are no valid elements.
+        private int mStart;
+        private int mEnd;
+        private int mCount;
+
+        public AmbientLightRingBuffer() {
+            this(DEFAULT_CAPACITY);
+        }
+
+        public AmbientLightRingBuffer(int initialCapacity) {
+            mCapacity = initialCapacity;
+            mRingLux = new float[mCapacity];
+            mRingTime = new long[mCapacity];
+        }
+
+        public float getLux(int index) {
+            return mRingLux[offsetOf(index)];
+        }
+
+        public long getTime(int index) {
+            return mRingTime[offsetOf(index)];
+        }
+
+        public void push(long time, float lux) {
+            int next = mEnd;
+            if (mCount == mCapacity) {
+                int newSize = mCapacity * 2;
+
+                float[] newRingLux = new float[newSize];
+                long[] newRingTime = new long[newSize];
+                int length = mCapacity - mStart;
+                System.arraycopy(mRingLux, mStart, newRingLux, 0, length);
+                System.arraycopy(mRingTime, mStart, newRingTime, 0, length);
+                if (mStart != 0) {
+                    System.arraycopy(mRingLux, 0, newRingLux, length, mStart);
+                    System.arraycopy(mRingTime, 0, newRingTime, length, mStart);
+                }
+                mRingLux = newRingLux;
+                mRingTime = newRingTime;
+
+                next = mCapacity;
+                mCapacity = newSize;
+                mStart = 0;
+            }
+            mRingTime[next] = time;
+            mRingLux[next] = lux;
+            mEnd = next + 1;
+            if (mEnd == mCapacity) {
+                mEnd = 0;
+            }
+            mCount++;
+        }
+
+        public void prune(long horizon) {
+            if (mCount == 0) {
+                return;
+            }
+
+            while (mCount > 1) {
+                int next = mStart + 1;
+                if (next >= mCapacity) {
+                    next -= mCapacity;
+                }
+                if (mRingTime[next] > horizon) {
+                    // Some light sensors only produce data upon a change in the ambient light
+                    // levels, so we need to consider the previous measurement as the ambient light
+                    // level for all points in time up until we receive a new measurement. Thus, we
+                    // always want to keep the youngest element that would be removed from the
+                    // buffer and just set its measurement time to the horizon time since at that
+                    // point it is the ambient light level, and to remove it would be to drop a
+                    // valid data point within our horizon.
+                    break;
+                }
+                mStart = next;
+                mCount -= 1;
+            }
+
+            if (mRingTime[mStart] < horizon) {
+                mRingTime[mStart] = horizon;
+            }
+        }
+
+        public int size() {
+            return mCount;
+        }
+
+        public boolean isEmpty() {
+            return mCount == 0;
+        }
+
+        public void clear() {
+            mStart = 0;
+            mEnd = 0;
+            mCount = 0;
+        }
+
+        @Override
+        public String toString() {
+            final int length = mCapacity - mStart;
+            float[] lux = new float[mCount];
+            long[] time = new long[mCount];
+
+            if (mCount <= length) {
+                System.arraycopy(mRingLux, mStart, lux, 0, mCount);
+                System.arraycopy(mRingTime, mStart, time, 0, mCount);
+            } else {
+                System.arraycopy(mRingLux, mStart, lux, 0, length);
+                System.arraycopy(mRingLux, 0, lux, length, mCount - length);
+
+                System.arraycopy(mRingTime, mStart, time, 0, length);
+                System.arraycopy(mRingTime, 0, time, length, mCount - length);
+            }
+            return "AmbientLightRingBuffer{mCapacity=" + mCapacity
+                + ", mStart=" + mStart
+                + ", mEnd=" + mEnd
+                + ", mCount=" + mCount
+                + ", mRingLux=" + Arrays.toString(lux)
+                + ", mRingTime=" + Arrays.toString(time)
+                + "}";
+        }
+
+        private int offsetOf(int index) {
+            if (index >= mCount || index < 0) {
+                throw new ArrayIndexOutOfBoundsException(index);
+            }
+            index += mStart;
+            if (index >= mCapacity) {
+                index -= mCapacity;
+            }
+            return index;
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 7abf88c..1f38eb6 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -20,9 +20,6 @@
 import com.android.server.LocalServices;
 import com.android.server.am.BatteryStatsService;
 import com.android.server.lights.LightsManager;
-import com.android.server.twilight.TwilightListener;
-import com.android.server.twilight.TwilightManager;
-import com.android.server.twilight.TwilightState;
 
 import android.animation.Animator;
 import android.animation.ObjectAnimator;
@@ -41,7 +38,7 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.text.format.DateUtils;
-import android.util.FloatMath;
+import android.util.MathUtils;
 import android.util.Slog;
 import android.util.Spline;
 import android.util.TimeUtils;
@@ -71,12 +68,11 @@
  * For debugging, you can make the electron beam and brightness animations run
  * slower by changing the "animator duration scale" option in Development Settings.
  */
-final class DisplayPowerController {
+final class DisplayPowerController implements AutomaticBrightnessController.Callbacks {
     private static final String TAG = "DisplayPowerController";
 
     private static boolean DEBUG = false;
     private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = false;
-    private static final boolean DEBUG_PRETEND_LIGHT_SENSOR_ABSENT = false;
 
     // If true, uses the electron beam on animation.
     // We might want to turn this off if we cannot get a guarantee that the screen
@@ -84,40 +80,15 @@
     // screen state returns.  Playing the animation can also be somewhat slow.
     private static final boolean USE_ELECTRON_BEAM_ON_ANIMATION = false;
 
-    // If true, enables the use of the screen auto-brightness adjustment setting.
-    private static final boolean USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT =
-            PowerManager.useScreenAutoBrightnessAdjustmentFeature();
-
-    // The maximum range of gamma adjustment possible using the screen
-    // auto-brightness adjustment setting.
-    private static final float SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT_MAX_GAMMA = 3.0f;
 
     // The minimum reduction in brightness when dimmed.
     private static final int SCREEN_DIM_MINIMUM_REDUCTION = 10;
 
-    // If true, enables the use of the current time as an auto-brightness adjustment.
-    // The basic idea here is to expand the dynamic range of auto-brightness
-    // when it is especially dark outside.  The light sensor tends to perform
-    // poorly at low light levels so we compensate for it by making an
-    // assumption about the environment.
-    private static final boolean USE_TWILIGHT_ADJUSTMENT =
-            PowerManager.useTwilightAdjustmentFeature();
-
-    // Specifies the maximum magnitude of the time of day adjustment.
-    private static final float TWILIGHT_ADJUSTMENT_MAX_GAMMA = 1.5f;
-
-    // The amount of time after or before sunrise over which to start adjusting
-    // the gamma.  We want the change to happen gradually so that it is below the
-    // threshold of perceptibility and so that the adjustment has maximum effect
-    // well after dusk.
-    private static final long TWILIGHT_ADJUSTMENT_TIME = DateUtils.HOUR_IN_MILLIS * 2;
-
     private static final int ELECTRON_BEAM_ON_ANIMATION_DURATION_MILLIS = 250;
     private static final int ELECTRON_BEAM_OFF_ANIMATION_DURATION_MILLIS = 400;
 
     private static final int MSG_UPDATE_POWER_STATE = 1;
     private static final int MSG_PROXIMITY_SENSOR_DEBOUNCED = 2;
-    private static final int MSG_LIGHT_SENSOR_DEBOUNCED = 3;
 
     private static final int PROXIMITY_UNKNOWN = -1;
     private static final int PROXIMITY_NEGATIVE = 0;
@@ -130,41 +101,10 @@
     // Trigger proximity if distance is less than 5 cm.
     private static final float TYPICAL_PROXIMITY_THRESHOLD = 5.0f;
 
-    // Light sensor event rate in milliseconds.
-    private static final int LIGHT_SENSOR_RATE_MILLIS = 1000;
-
-    // A rate for generating synthetic light sensor events in the case where the light
-    // sensor hasn't reported any new data in a while and we need it to update the
-    // debounce filter.  We only synthesize light sensor measurements when needed.
-    private static final int SYNTHETIC_LIGHT_SENSOR_RATE_MILLIS =
-            LIGHT_SENSOR_RATE_MILLIS * 2;
-
     // Brightness animation ramp rate in brightness units per second.
     private static final int BRIGHTNESS_RAMP_RATE_FAST = 200;
     private static final int BRIGHTNESS_RAMP_RATE_SLOW = 40;
 
-    // IIR filter time constants in milliseconds for computing two moving averages of
-    // the light samples.  One is a long-term average and the other is a short-term average.
-    // We can use these filters to assess trends in ambient brightness.
-    // The short term average gives us a filtered but relatively low latency measurement.
-    // The long term average informs us about the overall trend.
-    private static final long SHORT_TERM_AVERAGE_LIGHT_TIME_CONSTANT = 1000;
-    private static final long LONG_TERM_AVERAGE_LIGHT_TIME_CONSTANT = 5000;
-
-    // Stability requirements in milliseconds for accepting a new brightness
-    // level.  This is used for debouncing the light sensor.  Different constants
-    // are used to debounce the light sensor when adapting to brighter or darker environments.
-    // This parameter controls how quickly brightness changes occur in response to
-    // an observed change in light level that exceeds the hysteresis threshold.
-    private static final long BRIGHTENING_LIGHT_DEBOUNCE = 4000;
-    private static final long DARKENING_LIGHT_DEBOUNCE = 8000;
-
-    // Hysteresis constraints for brightening or darkening.
-    // The recent lux must have changed by at least this fraction relative to the
-    // current ambient lux before a change will be considered.
-    private static final float BRIGHTENING_LIGHT_HYSTERESIS = 0.10f;
-    private static final float DARKENING_LIGHT_HYSTERESIS = 0.20f;
-
     private final Object mLock = new Object();
 
     // Our handler.
@@ -180,9 +120,6 @@
     // The lights service.
     private final LightsManager mLights;
 
-    // The twilight service.
-    private final TwilightManager mTwilight;
-
     // The sensor manager.
     private final SensorManager mSensorManager;
 
@@ -192,9 +129,6 @@
     // The proximity sensor, or null if not available or needed.
     private Sensor mProximitySensor;
 
-    // The light sensor, or null if not available or needed.
-    private Sensor mLightSensor;
-
     // The doze screen brightness.
     private final int mScreenBrightnessDozeConfig;
 
@@ -210,15 +144,6 @@
     // True if auto-brightness should be used.
     private boolean mUseSoftwareAutoBrightnessConfig;
 
-    // The auto-brightness spline adjustment.
-    // The brightness values have been scaled to a range of 0..1.
-    private Spline mScreenAutoBrightnessSpline;
-
-    // Amount of time to delay auto-brightness after screen on while waiting for
-    // the light sensor to warm-up in milliseconds.
-    // May be 0 if no warm-up is required.
-    private int mLightSensorWarmUpTimeConfig;
-
     // True if we should fade the screen while turning it off, false if we should play
     // a stylish electron beam animation instead.
     private boolean mElectronBeamFadesConfig;
@@ -288,67 +213,18 @@
     // The elapsed real time when the screen on was blocked.
     private long mScreenOnBlockStartRealTime;
 
-    // Set to true if the light sensor is enabled.
-    private boolean mLightSensorEnabled;
-
-    // The time when the light sensor was enabled.
-    private long mLightSensorEnableTime;
-
-    // The currently accepted nominal ambient light level.
-    private float mAmbientLux;
-
-    // True if mAmbientLux holds a valid value.
-    private boolean mAmbientLuxValid;
-
-    // The ambient light level threshold at which to brighten or darken the screen.
-    private float mBrighteningLuxThreshold;
-    private float mDarkeningLuxThreshold;
-
-    // The most recent light sample.
-    private float mLastObservedLux;
-
-    // The time of the most light recent sample.
-    private long mLastObservedLuxTime;
-
-    // The number of light samples collected since the light sensor was enabled.
-    private int mRecentLightSamples;
-
-    // The long-term and short-term filtered light measurements.
-    private float mRecentShortTermAverageLux;
-    private float mRecentLongTermAverageLux;
-
-    // The direction in which the average lux is moving relative to the current ambient lux.
-    //    0 if not changing or within hysteresis threshold.
-    //    1 if brightening beyond hysteresis threshold.
-    //   -1 if darkening beyond hysteresis threshold.
-    private int mDebounceLuxDirection;
-
-    // The time when the average lux last changed direction.
-    private long mDebounceLuxTime;
-
-    // The screen brightness level that has been chosen by the auto-brightness
-    // algorithm.  The actual brightness should ramp towards this value.
-    // We preserve this value even when we stop using the light sensor so
-    // that we can quickly revert to the previous auto-brightness level
-    // while the light sensor warms up.
-    // Use -1 if there is no current auto-brightness value available.
-    private int mScreenAutoBrightness = -1;
-
-    // The last screen auto-brightness gamma.  (For printing in dump() only.)
-    private float mLastScreenAutoBrightnessGamma = 1.0f;
-
     // True if the screen auto-brightness value is actually being used to
     // set the display brightness.
     private boolean mUsingScreenAutoBrightness;
 
+    // The controller for the automatic brightness level.
+    private AutomaticBrightnessController mAutomaticBrightnessController;
+
     // Animators.
     private ObjectAnimator mElectronBeamOnAnimator;
     private ObjectAnimator mElectronBeamOffAnimator;
     private RampAnimator<DisplayPowerState> mScreenBrightnessRampAnimator;
 
-    // Twilight changed.  We might recalculate auto-brightness values.
-    private boolean mTwilightChanged;
-
     /**
      * Creates the display power controller.
      */
@@ -360,7 +236,6 @@
 
         mBatteryStats = BatteryStatsService.getService();
         mLights = LocalServices.getService(LightsManager.class);
-        mTwilight = LocalServices.getService(TwilightManager.class);
         mSensorManager = sensorManager;
         mBlanker = blanker;
 
@@ -372,9 +247,11 @@
         mScreenBrightnessDimConfig = clampAbsoluteBrightness(resources.getInteger(
                 com.android.internal.R.integer.config_screenBrightnessDim));
 
-        int screenBrightnessMinimum = Math.min(resources.getInteger(
+        int screenBrightnessRangeMinimum = clampAbsoluteBrightness(Math.min(resources.getInteger(
                 com.android.internal.R.integer.config_screenBrightnessSettingMinimum),
-                mScreenBrightnessDimConfig);
+                mScreenBrightnessDimConfig));
+
+        mScreenBrightnessRangeMaximum = PowerManager.BRIGHTNESS_ON;
 
         mUseSoftwareAutoBrightnessConfig = resources.getBoolean(
                 com.android.internal.R.bool.config_automatic_brightness_available);
@@ -383,9 +260,11 @@
                     com.android.internal.R.array.config_autoBrightnessLevels);
             int[] screenBrightness = resources.getIntArray(
                     com.android.internal.R.array.config_autoBrightnessLcdBacklightValues);
+            int lightSensorWarmUpTimeConfig = resources.getInteger(
+                    com.android.internal.R.integer.config_lightSensorWarmupTime);
 
-            mScreenAutoBrightnessSpline = createAutoBrightnessSpline(lux, screenBrightness);
-            if (mScreenAutoBrightnessSpline == null) {
+            Spline screenAutoBrightnessSpline = createAutoBrightnessSpline(lux, screenBrightness);
+            if (screenAutoBrightnessSpline == null) {
                 Slog.e(TAG, "Error in config.xml.  config_autoBrightnessLcdBacklightValues "
                         + "(size " + screenBrightness.length + ") "
                         + "must be monotic and have exactly one more entry than "
@@ -394,17 +273,17 @@
                         + "Auto-brightness will be disabled.");
                 mUseSoftwareAutoBrightnessConfig = false;
             } else {
-                if (screenBrightness[0] < screenBrightnessMinimum) {
-                    screenBrightnessMinimum = screenBrightness[0];
+                if (screenBrightness[0] < screenBrightnessRangeMinimum) {
+                    screenBrightnessRangeMinimum = clampAbsoluteBrightness(screenBrightness[0]);
                 }
+                mAutomaticBrightnessController = new AutomaticBrightnessController(this,
+                        handler.getLooper(), sensorManager, screenAutoBrightnessSpline,
+                        lightSensorWarmUpTimeConfig, screenBrightnessRangeMinimum,
+                        mScreenBrightnessRangeMaximum);
             }
-
-            mLightSensorWarmUpTimeConfig = resources.getInteger(
-                    com.android.internal.R.integer.config_lightSensorWarmupTime);
         }
 
-        mScreenBrightnessRangeMinimum = clampAbsoluteBrightness(screenBrightnessMinimum);
-        mScreenBrightnessRangeMaximum = PowerManager.BRIGHTNESS_ON;
+        mScreenBrightnessRangeMinimum = screenBrightnessRangeMinimum;
 
         mElectronBeamFadesConfig = resources.getBoolean(
                 com.android.internal.R.bool.config_animateScreenLights);
@@ -417,39 +296,6 @@
             }
         }
 
-        if (mUseSoftwareAutoBrightnessConfig
-                && !DEBUG_PRETEND_LIGHT_SENSOR_ABSENT) {
-            mLightSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
-        }
-
-        if (mUseSoftwareAutoBrightnessConfig && USE_TWILIGHT_ADJUSTMENT) {
-            mTwilight.registerListener(mTwilightListener, mHandler);
-        }
-    }
-
-    private static Spline createAutoBrightnessSpline(int[] lux, int[] brightness) {
-        try {
-            final int n = brightness.length;
-            float[] x = new float[n];
-            float[] y = new float[n];
-            y[0] = normalizeAbsoluteBrightness(brightness[0]);
-            for (int i = 1; i < n; i++) {
-                x[i] = lux[i - 1];
-                y[i] = normalizeAbsoluteBrightness(brightness[i]);
-            }
-
-            Spline spline = Spline.createMonotoneCubicSpline(x, y);
-            if (DEBUG) {
-                Slog.d(TAG, "Auto-brightness spline: " + spline);
-                for (float v = 1f; v < lux[lux.length - 1] * 1.25f; v *= 1.25f) {
-                    Slog.d(TAG, String.format("  %7.1f: %7.1f", v, spline.interpolate(v)));
-                }
-            }
-            return spline;
-        } catch (IllegalArgumentException ex) {
-            Slog.e(TAG, "Could not create auto-brightness spline.", ex);
-            return null;
-        }
     }
 
     /**
@@ -544,6 +390,18 @@
 
         mScreenBrightnessRampAnimator = new RampAnimator<DisplayPowerState>(
                 mPowerState, DisplayPowerState.SCREEN_BRIGHTNESS);
+
+        // Initialize screen state for battery stats.
+        try {
+            if (mPowerState.getScreenState() != Display.STATE_OFF) {
+                mBatteryStats.noteScreenOn();
+            } else {
+                mBatteryStats.noteScreenOff();
+            }
+            mBatteryStats.noteScreenBrightness(mPowerState.getScreenBrightness());
+        } catch (RemoteException ex) {
+            // same process
+        }
     }
 
     private final Animator.AnimatorListener mAnimatorListener = new Animator.AnimatorListener() {
@@ -566,9 +424,7 @@
         // Update the power state request.
         final boolean mustNotify;
         boolean mustInitialize = false;
-        boolean updateAutoBrightness = mTwilightChanged;
         boolean wasDimOrDoze = false;
-        mTwilightChanged = false;
 
         synchronized (mLock) {
             mPendingUpdatePowerStateLocked = false;
@@ -583,10 +439,6 @@
                 mPendingRequestChangedLocked = false;
                 mustInitialize = true;
             } else if (mPendingRequestChangedLocked) {
-                if (mPowerRequest.screenAutoBrightnessAdjustment
-                        != mPendingRequestLocked.screenAutoBrightnessAdjustment) {
-                    updateAutoBrightness = true;
-                }
                 wasDimOrDoze = (mPowerRequest.screenState == DisplayPowerRequest.SCREEN_STATE_DIM
                         || mPowerRequest.screenState == DisplayPowerRequest.SCREEN_STATE_DOZE);
                 mPowerRequest.copyFrom(mPendingRequestLocked);
@@ -633,18 +485,19 @@
         }
 
         // Turn on the light sensor if needed.
-        if (mLightSensor != null) {
-            setLightSensorEnabled(mPowerRequest.wantLightSensorEnabled(),
-                    updateAutoBrightness);
+        if (mAutomaticBrightnessController != null) {
+            mAutomaticBrightnessController.updatePowerState(mPowerRequest);
         }
 
         // Set the screen brightness.
         if (mPowerRequest.wantScreenOnAny()) {
             int target;
             boolean slow;
-            if (mScreenAutoBrightness >= 0 && mLightSensorEnabled) {
+            int screenAutoBrightness = mAutomaticBrightnessController != null ?
+                    mAutomaticBrightnessController.getAutomaticScreenBrightness() : -1;
+            if (screenAutoBrightness >= 0 && mPowerRequest.useAutoBrightness) {
                 // Use current auto-brightness value.
-                target = mScreenAutoBrightness;
+                target = screenAutoBrightness;
                 slow = mUsingScreenAutoBrightness;
                 mUsingScreenAutoBrightness = true;
             } else {
@@ -759,6 +612,11 @@
         }
     }
 
+    @Override
+    public void updateBrightness() {
+        sendUpdatePowerState();
+    }
+
     private void blockScreenOn() {
         if (!mScreenOnWasBlocked) {
             mScreenOnWasBlocked = true;
@@ -795,25 +653,8 @@
     }
 
     private int clampScreenBrightness(int value) {
-        return clamp(value, mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum);
-    }
-
-    private static int clampAbsoluteBrightness(int value) {
-        return clamp(value, PowerManager.BRIGHTNESS_OFF, PowerManager.BRIGHTNESS_ON);
-    }
-
-    private static int clamp(int value, int min, int max) {
-        if (value <= min) {
-            return min;
-        }
-        if (value >= max) {
-            return max;
-        }
-        return value;
-    }
-
-    private static float normalizeAbsoluteBrightness(int value) {
-        return (float)clampAbsoluteBrightness(value) / PowerManager.BRIGHTNESS_ON;
+        return MathUtils.constrain(
+                value, mScreenBrightnessRangeMinimum, mScreenBrightnessRangeMaximum);
     }
 
     private void animateScreenBrightness(int target, int rate) {
@@ -918,270 +759,6 @@
         mPendingProximityDebounceTime = debounceTime;
     }
 
-    private void setLightSensorEnabled(boolean enable, boolean updateAutoBrightness) {
-        if (enable) {
-            if (!mLightSensorEnabled) {
-                updateAutoBrightness = true;
-                mLightSensorEnabled = true;
-                mLightSensorEnableTime = SystemClock.uptimeMillis();
-                mSensorManager.registerListener(mLightSensorListener, mLightSensor,
-                        LIGHT_SENSOR_RATE_MILLIS * 1000, mHandler);
-            }
-        } else {
-            if (mLightSensorEnabled) {
-                mLightSensorEnabled = false;
-                mAmbientLuxValid = false;
-                mRecentLightSamples = 0;
-                mHandler.removeMessages(MSG_LIGHT_SENSOR_DEBOUNCED);
-                mSensorManager.unregisterListener(mLightSensorListener);
-            }
-        }
-        if (updateAutoBrightness) {
-            updateAutoBrightness(false);
-        }
-    }
-
-    private void handleLightSensorEvent(long time, float lux) {
-        mHandler.removeMessages(MSG_LIGHT_SENSOR_DEBOUNCED);
-
-        applyLightSensorMeasurement(time, lux);
-        updateAmbientLux(time);
-    }
-
-    private void applyLightSensorMeasurement(long time, float lux) {
-        // Update our filters.
-        mRecentLightSamples += 1;
-        if (mRecentLightSamples == 1) {
-            mRecentShortTermAverageLux = lux;
-            mRecentLongTermAverageLux = lux;
-        } else {
-            final long timeDelta = time - mLastObservedLuxTime;
-            mRecentShortTermAverageLux += (lux - mRecentShortTermAverageLux)
-                    * timeDelta / (SHORT_TERM_AVERAGE_LIGHT_TIME_CONSTANT + timeDelta);
-            mRecentLongTermAverageLux += (lux - mRecentLongTermAverageLux)
-                    * timeDelta / (LONG_TERM_AVERAGE_LIGHT_TIME_CONSTANT + timeDelta);
-        }
-
-        // Remember this sample value.
-        mLastObservedLux = lux;
-        mLastObservedLuxTime = time;
-    }
-
-    private void setAmbientLux(float lux) {
-        mAmbientLux = lux;
-        mBrighteningLuxThreshold = mAmbientLux * (1.0f + BRIGHTENING_LIGHT_HYSTERESIS);
-        mDarkeningLuxThreshold = mAmbientLux * (1.0f - DARKENING_LIGHT_HYSTERESIS);
-    }
-
-    private void updateAmbientLux(long time) {
-        // If the light sensor was just turned on then immediately update our initial
-        // estimate of the current ambient light level.
-        if (!mAmbientLuxValid) {
-            final long timeWhenSensorWarmedUp =
-                mLightSensorWarmUpTimeConfig + mLightSensorEnableTime;
-            if (time < timeWhenSensorWarmedUp) {
-                mHandler.sendEmptyMessageAtTime(MSG_LIGHT_SENSOR_DEBOUNCED,
-                        timeWhenSensorWarmedUp);
-                return;
-            }
-            setAmbientLux(mRecentShortTermAverageLux);
-            mAmbientLuxValid = true;
-            mDebounceLuxDirection = 0;
-            mDebounceLuxTime = time;
-            if (DEBUG) {
-                Slog.d(TAG, "updateAmbientLux: Initializing: "
-                        + ", mRecentShortTermAverageLux=" + mRecentShortTermAverageLux
-                        + ", mRecentLongTermAverageLux=" + mRecentLongTermAverageLux
-                        + ", mAmbientLux=" + mAmbientLux);
-            }
-            updateAutoBrightness(true);
-        } else if (mRecentShortTermAverageLux > mBrighteningLuxThreshold
-                && mRecentLongTermAverageLux > mBrighteningLuxThreshold) {
-            // The ambient environment appears to be brightening.
-            if (mDebounceLuxDirection <= 0) {
-                mDebounceLuxDirection = 1;
-                mDebounceLuxTime = time;
-                if (DEBUG) {
-                    Slog.d(TAG, "updateAmbientLux: Possibly brightened, waiting for "
-                            + BRIGHTENING_LIGHT_DEBOUNCE + " ms: "
-                            + "mBrighteningLuxThreshold=" + mBrighteningLuxThreshold
-                            + ", mRecentShortTermAverageLux=" + mRecentShortTermAverageLux
-                            + ", mRecentLongTermAverageLux=" + mRecentLongTermAverageLux
-                            + ", mAmbientLux=" + mAmbientLux);
-                }
-            }
-            long debounceTime = mDebounceLuxTime + BRIGHTENING_LIGHT_DEBOUNCE;
-            if (time < debounceTime) {
-                mHandler.sendEmptyMessageAtTime(MSG_LIGHT_SENSOR_DEBOUNCED, debounceTime);
-                return;
-            }
-            setAmbientLux(mRecentShortTermAverageLux);
-            if (DEBUG) {
-                Slog.d(TAG, "updateAmbientLux: Brightened: "
-                        + "mBrighteningLuxThreshold=" + mBrighteningLuxThreshold
-                        + ", mRecentShortTermAverageLux=" + mRecentShortTermAverageLux
-                        + ", mRecentLongTermAverageLux=" + mRecentLongTermAverageLux
-                        + ", mAmbientLux=" + mAmbientLux);
-            }
-            updateAutoBrightness(true);
-        } else if (mRecentShortTermAverageLux < mDarkeningLuxThreshold
-                && mRecentLongTermAverageLux < mDarkeningLuxThreshold) {
-            // The ambient environment appears to be darkening.
-            if (mDebounceLuxDirection >= 0) {
-                mDebounceLuxDirection = -1;
-                mDebounceLuxTime = time;
-                if (DEBUG) {
-                    Slog.d(TAG, "updateAmbientLux: Possibly darkened, waiting for "
-                            + DARKENING_LIGHT_DEBOUNCE + " ms: "
-                            + "mDarkeningLuxThreshold=" + mDarkeningLuxThreshold
-                            + ", mRecentShortTermAverageLux=" + mRecentShortTermAverageLux
-                            + ", mRecentLongTermAverageLux=" + mRecentLongTermAverageLux
-                            + ", mAmbientLux=" + mAmbientLux);
-                }
-            }
-            long debounceTime = mDebounceLuxTime + DARKENING_LIGHT_DEBOUNCE;
-            if (time < debounceTime) {
-                mHandler.sendEmptyMessageAtTime(MSG_LIGHT_SENSOR_DEBOUNCED, debounceTime);
-                return;
-            }
-            // Be conservative about reducing the brightness, only reduce it a little bit
-            // at a time to avoid having to bump it up again soon.
-            setAmbientLux(Math.max(mRecentShortTermAverageLux, mRecentLongTermAverageLux));
-            if (DEBUG) {
-                Slog.d(TAG, "updateAmbientLux: Darkened: "
-                        + "mDarkeningLuxThreshold=" + mDarkeningLuxThreshold
-                        + ", mRecentShortTermAverageLux=" + mRecentShortTermAverageLux
-                        + ", mRecentLongTermAverageLux=" + mRecentLongTermAverageLux
-                        + ", mAmbientLux=" + mAmbientLux);
-            }
-            updateAutoBrightness(true);
-        } else if (mDebounceLuxDirection != 0) {
-            // No change or change is within the hysteresis thresholds.
-            mDebounceLuxDirection = 0;
-            mDebounceLuxTime = time;
-            if (DEBUG) {
-                Slog.d(TAG, "updateAmbientLux: Canceled debounce: "
-                        + "mBrighteningLuxThreshold=" + mBrighteningLuxThreshold
-                        + ", mDarkeningLuxThreshold=" + mDarkeningLuxThreshold
-                        + ", mRecentShortTermAverageLux=" + mRecentShortTermAverageLux
-                        + ", mRecentLongTermAverageLux=" + mRecentLongTermAverageLux
-                        + ", mAmbientLux=" + mAmbientLux);
-            }
-        }
-
-        // Now that we've done all of that, we haven't yet posted a debounce
-        // message. So consider the case where current lux is beyond the
-        // threshold. It's possible that the light sensor may not report values
-        // if the light level does not change, so we need to occasionally
-        // synthesize sensor readings in order to make sure the brightness is
-        // adjusted accordingly. Note these thresholds may have changed since
-        // we entered the function because we called setAmbientLux and
-        // updateAutoBrightness along the way.
-        if (mLastObservedLux > mBrighteningLuxThreshold
-                || mLastObservedLux < mDarkeningLuxThreshold) {
-            mHandler.sendEmptyMessageAtTime(MSG_LIGHT_SENSOR_DEBOUNCED,
-                    time + SYNTHETIC_LIGHT_SENSOR_RATE_MILLIS);
-        }
-    }
-
-    private void debounceLightSensor() {
-        if (mLightSensorEnabled) {
-            long time = SystemClock.uptimeMillis();
-            if (time >= mLastObservedLuxTime + SYNTHETIC_LIGHT_SENSOR_RATE_MILLIS) {
-                if (DEBUG) {
-                    Slog.d(TAG, "debounceLightSensor: Synthesizing light sensor measurement "
-                            + "after " + (time - mLastObservedLuxTime) + " ms.");
-                }
-                applyLightSensorMeasurement(time, mLastObservedLux);
-            }
-            updateAmbientLux(time);
-        }
-    }
-
-    private void updateAutoBrightness(boolean sendUpdate) {
-        if (!mAmbientLuxValid) {
-            return;
-        }
-
-        float value = mScreenAutoBrightnessSpline.interpolate(mAmbientLux);
-        float gamma = 1.0f;
-
-        if (USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT
-                && mPowerRequest.screenAutoBrightnessAdjustment != 0.0f) {
-            final float adjGamma = FloatMath.pow(SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT_MAX_GAMMA,
-                    Math.min(1.0f, Math.max(-1.0f,
-                            -mPowerRequest.screenAutoBrightnessAdjustment)));
-            gamma *= adjGamma;
-            if (DEBUG) {
-                Slog.d(TAG, "updateAutoBrightness: adjGamma=" + adjGamma);
-            }
-        }
-
-        if (USE_TWILIGHT_ADJUSTMENT) {
-            TwilightState state = mTwilight.getCurrentState();
-            if (state != null && state.isNight()) {
-                final long now = System.currentTimeMillis();
-                final float earlyGamma =
-                        getTwilightGamma(now, state.getYesterdaySunset(), state.getTodaySunrise());
-                final float lateGamma =
-                        getTwilightGamma(now, state.getTodaySunset(), state.getTomorrowSunrise());
-                gamma *= earlyGamma * lateGamma;
-                if (DEBUG) {
-                    Slog.d(TAG, "updateAutoBrightness: earlyGamma=" + earlyGamma
-                            + ", lateGamma=" + lateGamma);
-                }
-            }
-        }
-
-        if (gamma != 1.0f) {
-            final float in = value;
-            value = FloatMath.pow(value, gamma);
-            if (DEBUG) {
-                Slog.d(TAG, "updateAutoBrightness: gamma=" + gamma
-                        + ", in=" + in + ", out=" + value);
-            }
-        }
-
-        int newScreenAutoBrightness = clampScreenBrightness(
-                Math.round(value * PowerManager.BRIGHTNESS_ON));
-        if (mScreenAutoBrightness != newScreenAutoBrightness) {
-            if (DEBUG) {
-                Slog.d(TAG, "updateAutoBrightness: mScreenAutoBrightness="
-                        + mScreenAutoBrightness + ", newScreenAutoBrightness="
-                        + newScreenAutoBrightness);
-            }
-
-            mScreenAutoBrightness = newScreenAutoBrightness;
-            mLastScreenAutoBrightnessGamma = gamma;
-            if (sendUpdate) {
-                sendUpdatePowerState();
-            }
-        }
-    }
-
-    private static float getTwilightGamma(long now, long lastSunset, long nextSunrise) {
-        if (lastSunset < 0 || nextSunrise < 0
-                || now < lastSunset || now > nextSunrise) {
-            return 1.0f;
-        }
-
-        if (now < lastSunset + TWILIGHT_ADJUSTMENT_TIME) {
-            return lerp(1.0f, TWILIGHT_ADJUSTMENT_MAX_GAMMA,
-                    (float)(now - lastSunset) / TWILIGHT_ADJUSTMENT_TIME);
-        }
-
-        if (now > nextSunrise - TWILIGHT_ADJUSTMENT_TIME) {
-            return lerp(1.0f, TWILIGHT_ADJUSTMENT_MAX_GAMMA,
-                    (float)(nextSunrise - now) / TWILIGHT_ADJUSTMENT_TIME);
-        }
-
-        return TWILIGHT_ADJUSTMENT_MAX_GAMMA;
-    }
-
-    private static float lerp(float x, float y, float alpha) {
-        return x + (y - x) * alpha;
-    }
-
     private void sendOnStateChangedWithWakelock() {
         mCallbacks.acquireSuspendBlocker();
         mHandler.post(mOnStateChangedRunnable);
@@ -1241,8 +818,6 @@
         pw.println("  mScreenBrightnessRangeMaximum=" + mScreenBrightnessRangeMaximum);
         pw.println("  mUseSoftwareAutoBrightnessConfig="
                 + mUseSoftwareAutoBrightnessConfig);
-        pw.println("  mScreenAutoBrightnessSpline=" + mScreenAutoBrightnessSpline);
-        pw.println("  mLightSensorWarmUpTimeConfig=" + mLightSensorWarmUpTimeConfig);
 
         mHandler.runWithScissors(new Runnable() {
             @Override
@@ -1266,25 +841,7 @@
         pw.println("  mPendingProximityDebounceTime="
                 + TimeUtils.formatUptime(mPendingProximityDebounceTime));
         pw.println("  mScreenOffBecauseOfProximity=" + mScreenOffBecauseOfProximity);
-
-        pw.println("  mLightSensor=" + mLightSensor);
-        pw.println("  mLightSensorEnabled=" + mLightSensorEnabled);
-        pw.println("  mLightSensorEnableTime="
-                + TimeUtils.formatUptime(mLightSensorEnableTime));
-        pw.println("  mAmbientLux=" + mAmbientLux);
-        pw.println("  mAmbientLuxValid=" + mAmbientLuxValid);
-        pw.println("  mLastObservedLux=" + mLastObservedLux);
-        pw.println("  mLastObservedLuxTime="
-                + TimeUtils.formatUptime(mLastObservedLuxTime));
-        pw.println("  mRecentLightSamples=" + mRecentLightSamples);
-        pw.println("  mRecentShortTermAverageLux=" + mRecentShortTermAverageLux);
-        pw.println("  mRecentLongTermAverageLux=" + mRecentLongTermAverageLux);
-        pw.println("  mDebounceLuxDirection=" + mDebounceLuxDirection);
-        pw.println("  mDebounceLuxTime=" + TimeUtils.formatUptime(mDebounceLuxTime));
-        pw.println("  mScreenAutoBrightness=" + mScreenAutoBrightness);
         pw.println("  mUsingScreenAutoBrightness=" + mUsingScreenAutoBrightness);
-        pw.println("  mLastScreenAutoBrightnessGamma=" + mLastScreenAutoBrightnessGamma);
-        pw.println("  mTwilight.getCurrentState()=" + mTwilight.getCurrentState());
 
         if (mElectronBeamOnAnimator != null) {
             pw.println("  mElectronBeamOnAnimator.isStarted()=" +
@@ -1298,6 +855,11 @@
         if (mPowerState != null) {
             mPowerState.dump(pw);
         }
+
+        if (mAutomaticBrightnessController != null) {
+            mAutomaticBrightnessController.dump(pw);
+        }
+
     }
 
     private static String proximityToString(int state) {
@@ -1313,6 +875,39 @@
         }
     }
 
+    private static Spline createAutoBrightnessSpline(int[] lux, int[] brightness) {
+        try {
+            final int n = brightness.length;
+            float[] x = new float[n];
+            float[] y = new float[n];
+            y[0] = normalizeAbsoluteBrightness(brightness[0]);
+            for (int i = 1; i < n; i++) {
+                x[i] = lux[i - 1];
+                y[i] = normalizeAbsoluteBrightness(brightness[i]);
+            }
+
+            Spline spline = Spline.createMonotoneCubicSpline(x, y);
+            if (DEBUG) {
+                Slog.d(TAG, "Auto-brightness spline: " + spline);
+                for (float v = 1f; v < lux[lux.length - 1] * 1.25f; v *= 1.25f) {
+                    Slog.d(TAG, String.format("  %7.1f: %7.1f", v, spline.interpolate(v)));
+                }
+            }
+            return spline;
+        } catch (IllegalArgumentException ex) {
+            Slog.e(TAG, "Could not create auto-brightness spline.", ex);
+            return null;
+        }
+    }
+
+    private static float normalizeAbsoluteBrightness(int value) {
+        return (float)clampAbsoluteBrightness(value) / PowerManager.BRIGHTNESS_ON;
+    }
+
+    private static int clampAbsoluteBrightness(int value) {
+        return MathUtils.constrain(value, PowerManager.BRIGHTNESS_OFF, PowerManager.BRIGHTNESS_ON);
+    }
+
     private final class DisplayControllerHandler extends Handler {
         public DisplayControllerHandler(Looper looper) {
             super(looper, null, true /*async*/);
@@ -1328,10 +923,6 @@
                 case MSG_PROXIMITY_SENSOR_DEBOUNCED:
                     debounceProximitySensor();
                     break;
-
-                case MSG_LIGHT_SENSOR_DEBOUNCED:
-                    debounceLightSensor();
-                    break;
             }
         }
     }
@@ -1352,28 +943,4 @@
             // Not used.
         }
     };
-
-    private final SensorEventListener mLightSensorListener = new SensorEventListener() {
-        @Override
-        public void onSensorChanged(SensorEvent event) {
-            if (mLightSensorEnabled) {
-                final long time = SystemClock.uptimeMillis();
-                final float lux = event.values[0];
-                handleLightSensorEvent(time, lux);
-            }
-        }
-
-        @Override
-        public void onAccuracyChanged(Sensor sensor, int accuracy) {
-            // Not used.
-        }
-    };
-
-    private final TwilightListener mTwilightListener = new TwilightListener() {
-        @Override
-        public void onTwilightStateChanged() {
-            mTwilightChanged = true;
-            updatePowerState();
-        }
-    };
 }
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 096f263..91afec7 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -26,7 +26,6 @@
 import android.view.DisplayEventReceiver;
 import android.view.Surface;
 import android.view.SurfaceControl;
-import android.view.SurfaceControl.PhysicalDisplayInfo;
 
 import java.io.PrintWriter;
 
@@ -175,6 +174,12 @@
                     if ("portrait".equals(SystemProperties.get("persist.demo.hdmirotation"))) {
                         mInfo.rotation = Surface.ROTATION_270;
                     }
+
+                    // For demonstration purposes, allow rotation of the external display
+                    // to follow the built-in display.
+                    if (SystemProperties.getBoolean("persist.demo.hdmirotates", false)) {
+                        mInfo.flags |= DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT;
+                    }
                 }
             }
             return mInfo;
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 5499af6..d61a35b 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -260,8 +260,7 @@
         // The orientation specifies how the physical coordinate system of the display
         // is rotated when the contents of the logical display are rendered.
         int orientation = Surface.ROTATION_0;
-        if (device == mPrimaryDisplayDevice
-                && (displayDeviceInfo.flags & DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT) != 0) {
+        if ((displayDeviceInfo.flags & DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT) != 0) {
             orientation = displayInfo.rotation;
         }
 
diff --git a/services/core/java/com/android/server/firewall/IntentFirewall.java b/services/core/java/com/android/server/firewall/IntentFirewall.java
index eb7a383..62114cd 100644
--- a/services/core/java/com/android/server/firewall/IntentFirewall.java
+++ b/services/core/java/com/android/server/firewall/IntentFirewall.java
@@ -95,6 +95,7 @@
 
                 CategoryFilter.FACTORY,
                 SenderFilter.FACTORY,
+                SenderPackageFilter.FACTORY,
                 SenderPermissionFilter.FACTORY,
                 PortFilter.FACTORY
         };
diff --git a/services/core/java/com/android/server/firewall/SenderPackageFilter.java b/services/core/java/com/android/server/firewall/SenderPackageFilter.java
new file mode 100644
index 0000000..ec9b5de
--- /dev/null
+++ b/services/core/java/com/android/server/firewall/SenderPackageFilter.java
@@ -0,0 +1,73 @@
+/*
+ * Copyright (C) 2014 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.android.server.firewall;
+
+import android.app.AppGlobals;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.pm.IPackageManager;
+import android.os.RemoteException;
+import android.os.UserHandle;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+public class SenderPackageFilter implements Filter {
+    private static final String ATTR_NAME = "name";
+
+    public final String mPackageName;
+
+    public SenderPackageFilter(String packageName) {
+        mPackageName = packageName;
+    }
+
+    @Override
+    public boolean matches(IntentFirewall ifw, ComponentName resolvedComponent, Intent intent,
+            int callerUid, int callerPid, String resolvedType, int receivingUid) {
+        IPackageManager pm = AppGlobals.getPackageManager();
+
+        int packageUid = -1;
+        try {
+            packageUid = pm.getPackageUid(mPackageName, UserHandle.USER_OWNER);
+        } catch (RemoteException ex) {
+            // handled below
+        }
+
+        if (packageUid == -1)  {
+            return false;
+        }
+
+        return UserHandle.isSameApp(packageUid, callerUid);
+    }
+
+    public static final FilterFactory FACTORY = new FilterFactory("sender-package") {
+        @Override
+        public Filter newFilter(XmlPullParser parser)
+                throws IOException, XmlPullParserException {
+            String packageName = parser.getAttributeValue(null, ATTR_NAME);
+
+            if (packageName == null) {
+                throw new XmlPullParserException(
+                    "A package name must be specified.", parser, null);
+            }
+
+            return new SenderPackageFilter(packageName);
+        }
+    };
+}
diff --git a/services/core/java/com/android/server/hdmi/HdmiCecController.java b/services/core/java/com/android/server/hdmi/HdmiCecController.java
new file mode 100644
index 0000000..c87fc99
--- /dev/null
+++ b/services/core/java/com/android/server/hdmi/HdmiCecController.java
@@ -0,0 +1,369 @@
+/*
+ * Copyright (C) 2014 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.android.server.hdmi;
+
+import android.hardware.hdmi.HdmiCec;
+import android.hardware.hdmi.HdmiCecDeviceInfo;
+import android.hardware.hdmi.HdmiCecMessage;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import libcore.util.EmptyArray;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Manages HDMI-CEC command and behaviors. It converts user's command into CEC command
+ * and pass it to CEC HAL so that it sends message to other device. For incoming
+ * message it translates the message and delegates it to proper module.
+ *
+ * <p>It can be created only by {@link HdmiCecController#create}
+ *
+ * <p>Declared as package-private, accessed by {@link HdmiControlService} only.
+ */
+class HdmiCecController {
+    private static final String TAG = "HdmiCecController";
+
+    private static final byte[] EMPTY_BODY = EmptyArray.BYTE;
+
+    // A message to pass cec send command to IO looper.
+    private static final int MSG_SEND_CEC_COMMAND = 1;
+    // A message to delegate logical allocation to IO looper.
+    private static final int MSG_ALLOCATE_LOGICAL_ADDRESS = 2;
+
+    // Message types to handle incoming message in main service looper.
+    private final static int MSG_RECEIVE_CEC_COMMAND = 1;
+    // A message to report allocated logical address to main control looper.
+    private final static int MSG_REPORT_LOGICAL_ADDRESS = 2;
+
+    // TODO: move these values to HdmiCec.java once make it internal constant class.
+    // CEC's ABORT reason values.
+    private static final int ABORT_UNRECOGNIZED_MODE = 0;
+    private static final int ABORT_NOT_IN_CORRECT_MODE = 1;
+    private static final int ABORT_CANNOT_PROVIDE_SOURCE = 2;
+    private static final int ABORT_INVALID_OPERAND = 3;
+    private static final int ABORT_REFUSED = 4;
+    private static final int ABORT_UNABLE_TO_DETERMINE = 5;
+
+    private static final int NUM_LOGICAL_ADDRESS = 16;
+
+    // TODO: define other constants for errors.
+    private static final int ERROR_SUCCESS = 0;
+
+    // Handler instance to process synchronous I/O (mainly send) message.
+    private Handler mIoHandler;
+
+    // Handler instance to process various messages coming from other CEC
+    // device or issued by internal state change.
+    private Handler mControlHandler;
+
+    // Stores the pointer to the native implementation of the service that
+    // interacts with HAL.
+    private long mNativePtr;
+
+    // Map-like container of all cec devices. A logical address of device is
+    // used as key of container.
+    private final SparseArray<HdmiCecDeviceInfo> mDeviceInfos =
+            new SparseArray<HdmiCecDeviceInfo>();
+
+    // Private constructor.  Use HdmiCecController.create().
+    private HdmiCecController() {
+    }
+
+    /**
+     * A factory method to get {@link HdmiCecController}. If it fails to initialize
+     * inner device or has no device it will return {@code null}.
+     *
+     * <p>Declared as package-private, accessed by {@link HdmiControlService} only.
+     * @param service {@link HdmiControlService} instance used to create internal handler
+     *                and to pass callback for incoming message or event.
+     * @return {@link HdmiCecController} if device is initialized successfully. Otherwise,
+     *         returns {@code null}.
+     */
+    static HdmiCecController create(HdmiControlService service) {
+        HdmiCecController handler = new HdmiCecController();
+        long nativePtr = nativeInit(handler);
+        if (nativePtr == 0L) {
+            handler = null;
+            return null;
+        }
+
+        handler.init(service, nativePtr);
+        return handler;
+    }
+
+    /**
+     * Interface to report allocated logical address.
+     */
+    interface AllocateLogicalAddressCallback {
+        /**
+         * Called when a new logical address is allocated.
+         *
+         * @param deviceType requested device type to allocate logical address
+         * @param logicalAddress allocated logical address. If it is
+         *                       {@link HdmiCec#ADDR_UNREGISTERED}, it means that
+         *                       it failed to allocate logical address for the given device type
+         */
+        void onAllocated(int deviceType, int logicalAddress);
+    }
+
+    /**
+     * Allocate a new logical address of the given device type. Allocated
+     * address will be reported through {@link AllocateLogicalAddressCallback}.
+     *
+     * <p> Declared as package-private, accessed by {@link HdmiControlService} only.
+     *
+     * @param deviceType type of device to used to determine logical address
+     * @param preferredAddress a logical address preferred to be allocated.
+     *                         If sets {@link HdmiCec#ADDR_UNREGISTERED}, scans
+     *                         the smallest logical address matched with the given device type.
+     *                         Otherwise, scan address will start from {@code preferredAddress}
+     * @param callback callback interface to report allocated logical address to caller
+     */
+    void allocateLogicalAddress(int deviceType, int preferredAddress,
+            AllocateLogicalAddressCallback callback) {
+        Message msg = mIoHandler.obtainMessage(MSG_ALLOCATE_LOGICAL_ADDRESS);
+        msg.arg1 = deviceType;
+        msg.arg2 = preferredAddress;
+        msg.obj = callback;
+        mIoHandler.sendMessage(msg);
+    }
+
+    private static byte[] buildBody(int opcode, byte[] params) {
+        byte[] body = new byte[params.length + 1];
+        body[0] = (byte) opcode;
+        System.arraycopy(params, 0, body, 1, params.length);
+        return body;
+    }
+
+    private final class IoHandler extends Handler {
+        private IoHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_SEND_CEC_COMMAND:
+                    HdmiCecMessage cecMessage = (HdmiCecMessage) msg.obj;
+                    byte[] body = buildBody(cecMessage.getOpcode(), cecMessage.getParams());
+                    nativeSendCecCommand(mNativePtr, cecMessage.getSource(),
+                            cecMessage.getDestination(), body);
+                    break;
+                case MSG_ALLOCATE_LOGICAL_ADDRESS:
+                    int deviceType = msg.arg1;
+                    int preferredAddress = msg.arg2;
+                    AllocateLogicalAddressCallback callback =
+                            (AllocateLogicalAddressCallback) msg.obj;
+                    handleAllocateLogicalAddress(deviceType, preferredAddress, callback);
+                    break;
+                default:
+                    Slog.w(TAG, "Unsupported CEC Io request:" + msg.what);
+                    break;
+            }
+        }
+
+        private void handleAllocateLogicalAddress(int deviceType, int preferredAddress,
+                AllocateLogicalAddressCallback callback) {
+            int startAddress = preferredAddress;
+            // If preferred address is "unregistered", start_index will be the smallest
+            // address matched with the given device type.
+            if (preferredAddress == HdmiCec.ADDR_UNREGISTERED) {
+                for (int i = 0; i < NUM_LOGICAL_ADDRESS; ++i) {
+                    if (deviceType == HdmiCec.getTypeFromAddress(i)) {
+                        startAddress = i;
+                        break;
+                    }
+                }
+            }
+
+            int logcialAddress = HdmiCec.ADDR_UNREGISTERED;
+            // Iterates all possible addresses which has the same device type.
+            for (int i = 0; i < NUM_LOGICAL_ADDRESS; ++i) {
+                int curAddress = (startAddress + i) % NUM_LOGICAL_ADDRESS;
+                if (curAddress != HdmiCec.ADDR_UNREGISTERED
+                        && deviceType == HdmiCec.getTypeFromAddress(i)) {
+                    // <Polling Message> is a message which has empty body and
+                    // uses same address for both source and destination address.
+                    // If sending <Polling Message> failed (NAK), it becomes
+                    // new logical address for the device because no device uses
+                    // it as logical address of the device.
+                    int error = nativeSendCecCommand(mNativePtr, curAddress, curAddress,
+                            EMPTY_BODY);
+                    if (error != ERROR_SUCCESS) {
+                        logcialAddress = curAddress;
+                        break;
+                    }
+                }
+            }
+
+            Message msg = mControlHandler.obtainMessage(MSG_REPORT_LOGICAL_ADDRESS);
+            msg.arg1 = deviceType;
+            msg.arg2 = logcialAddress;
+            msg.obj = callback;
+            mControlHandler.sendMessage(msg);
+        }
+    }
+
+    private final class ControlHandler extends Handler {
+        private ControlHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_RECEIVE_CEC_COMMAND:
+                    // TODO: delegate it to HdmiControl service.
+                    onReceiveCommand((HdmiCecMessage) msg.obj);
+                    break;
+                case MSG_REPORT_LOGICAL_ADDRESS:
+                    int deviceType = msg.arg1;
+                    int logicalAddress = msg.arg2;
+                    AllocateLogicalAddressCallback callback =
+                            (AllocateLogicalAddressCallback) msg.obj;
+                    callback.onAllocated(deviceType, logicalAddress);
+                    break;
+                default:
+                    Slog.i(TAG, "Unsupported message type:" + msg.what);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Add a new {@link HdmiCecDeviceInfo}. It returns old device info which has the same
+     * logical address as new device info's.
+     *
+     * <p>Declared as package-private. accessed by {@link HdmiControlService} only.
+     *
+     * @param deviceInfo a new {@link HdmiCecDeviceInfo} to be added.
+     * @return {@code null} if it is new device. Otherwise, returns old {@HdmiCecDeviceInfo}
+     *         that has the same logical address as new one has.
+     */
+    HdmiCecDeviceInfo addDeviceInfo(HdmiCecDeviceInfo deviceInfo) {
+        HdmiCecDeviceInfo oldDeviceInfo = getDeviceInfo(deviceInfo.getLogicalAddress());
+        if (oldDeviceInfo != null) {
+            removeDeviceInfo(deviceInfo.getLogicalAddress());
+        }
+        mDeviceInfos.append(deviceInfo.getLogicalAddress(), deviceInfo);
+        return oldDeviceInfo;
+    }
+
+    /**
+     * Remove a device info corresponding to the given {@code logicalAddress}.
+     * It returns removed {@link HdmiCecDeviceInfo} if exists.
+     *
+     * <p>Declared as package-private. accessed by {@link HdmiControlService} only.
+     *
+     * @param logicalAddress logical address of device to be removed
+     * @return removed {@link HdmiCecDeviceInfo} it exists. Otherwise, returns {@code null}
+     */
+    HdmiCecDeviceInfo removeDeviceInfo(int logicalAddress) {
+        HdmiCecDeviceInfo deviceInfo = mDeviceInfos.get(logicalAddress);
+        if (deviceInfo != null) {
+            mDeviceInfos.remove(logicalAddress);
+        }
+        return deviceInfo;
+    }
+
+    /**
+     * Return a list of all {@HdmiCecDeviceInfo}.
+     *
+     * <p>Declared as package-private. accessed by {@link HdmiControlService} only.
+     */
+    List<HdmiCecDeviceInfo> getDeviceInfoList() {
+        List<HdmiCecDeviceInfo> deviceInfoList = new ArrayList<HdmiCecDeviceInfo>(
+                mDeviceInfos.size());
+        for (int i = 0; i < mDeviceInfos.size(); ++i) {
+            deviceInfoList.add(mDeviceInfos.valueAt(i));
+        }
+        return deviceInfoList;
+    }
+
+    /**
+     * Return a {@link HdmiCecDeviceInfo} corresponding to the given {@code logicalAddress}.
+     *
+     * <p>Declared as package-private. accessed by {@link HdmiControlService} only.
+     *
+     * @param logicalAddress logical address to be retrieved
+     * @return {@link HdmiCecDeviceInfo} matched with the given {@code logicalAddress}.
+     *         Returns null if no logical address matched
+     */
+    HdmiCecDeviceInfo getDeviceInfo(int logicalAddress) {
+        return mDeviceInfos.get(logicalAddress);
+    }
+
+    private void init(HdmiControlService service, long nativePtr) {
+        mIoHandler = new IoHandler(service.getServiceLooper());
+        mControlHandler = new ControlHandler(service.getServiceLooper());
+        mNativePtr = nativePtr;
+    }
+
+    private void onReceiveCommand(HdmiCecMessage message) {
+        // TODO: Handle message according to opcode type.
+
+        // TODO: Use device's source address for broadcast message.
+        int sourceAddress = message.getDestination() != HdmiCec.ADDR_BROADCAST ?
+                message.getDestination() : 0;
+        // Reply <Feature Abort> to initiator (source) for all requests.
+        sendFeatureAbort(sourceAddress, message.getSource(), message.getOpcode(),
+                ABORT_REFUSED);
+    }
+
+    private void sendFeatureAbort(int srcAddress, int destAddress, int originalOpcode,
+            int reason) {
+        byte[] params = new byte[2];
+        params[0] = (byte) originalOpcode;
+        params[1] = (byte) reason;
+
+        HdmiCecMessage cecMessage = new HdmiCecMessage(srcAddress, destAddress,
+                HdmiCec.MESSAGE_FEATURE_ABORT, params);
+        Message message = mIoHandler.obtainMessage(MSG_SEND_CEC_COMMAND, cecMessage);
+        mIoHandler.sendMessage(message);
+    }
+
+    /**
+     * Called by native when incoming CEC message arrived.
+     */
+    private void handleIncomingCecCommand(int srcAddress, int dstAddress, byte[] body) {
+        byte opcode = body[0];
+        byte params[] = Arrays.copyOfRange(body, 1, body.length);
+        HdmiCecMessage cecMessage = new HdmiCecMessage(srcAddress, dstAddress, opcode, params);
+
+        // Delegate message to main handler so that it handles in main thread.
+        Message message = mControlHandler.obtainMessage(
+                MSG_RECEIVE_CEC_COMMAND, cecMessage);
+        mControlHandler.sendMessage(message);
+    }
+
+    /**
+     * Called by native when a hotplug event issues.
+     */
+    private void handleHotplug(boolean connected) {
+        // TODO: Delegate event to main message handler.
+    }
+
+    private static native long nativeInit(HdmiCecController handler);
+    private static native int nativeSendCecCommand(long contollerPtr, int srcAddress,
+            int dstAddress, byte[] body);
+}
diff --git a/services/core/java/com/android/server/hdmi/HdmiControlService.java b/services/core/java/com/android/server/hdmi/HdmiControlService.java
new file mode 100644
index 0000000..7c1995e
--- /dev/null
+++ b/services/core/java/com/android/server/hdmi/HdmiControlService.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2014 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.android.server.hdmi;
+
+import android.annotation.Nullable;
+import android.content.Context;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.util.Slog;
+
+import com.android.server.SystemService;
+
+/**
+ * Provides a service for sending and processing HDMI control messages,
+ * HDMI-CEC and MHL control command, and providing the information on both standard.
+ */
+public final class HdmiControlService extends SystemService {
+    private static final String TAG = "HdmiControlService";
+
+    // A thread to handle synchronous IO of CEC and MHL control service.
+    // Since all of CEC and MHL HAL interfaces processed in short time (< 200ms)
+    // and sparse call it shares a thread to handle IO operations.
+    private final HandlerThread mIoThread = new HandlerThread("Hdmi Control Io Thread");
+
+    @Nullable
+    private HdmiCecController mCecController;
+
+    @Nullable
+    private HdmiMhlController mMhlController;
+
+    public HdmiControlService(Context context) {
+        super(context);
+    }
+
+    @Override
+    public void onStart() {
+        mCecController = HdmiCecController.create(this);
+        if (mCecController == null) {
+            Slog.i(TAG, "Device does not support HDMI-CEC.");
+        }
+
+        mMhlController = HdmiMhlController.create(this);
+        if (mMhlController == null) {
+            Slog.i(TAG, "Device does not support MHL-control.");
+        }
+    }
+
+    /**
+     * Returns {@link Looper} for IO operation.
+     *
+     * <p>Declared as package-private.
+     */
+    Looper getIoLooper() {
+        return mIoThread.getLooper();
+    }
+
+    /**
+     * Returns {@link Looper} of main thread. Use this {@link Looper} instance
+     * for tasks that are running on main service thread.
+     *
+     * <p>Declared as package-private.
+     */
+    Looper getServiceLooper() {
+        return Looper.myLooper();
+    }
+}
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index a32f7c1..54cb035 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -52,6 +52,7 @@
 import android.hardware.input.InputManager;
 import android.hardware.input.InputManagerInternal;
 import android.hardware.input.KeyboardLayout;
+import android.hardware.input.TouchCalibration;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Environment;
@@ -76,6 +77,7 @@
 import android.view.InputEvent;
 import android.view.KeyEvent;
 import android.view.PointerIcon;
+import android.view.Surface;
 import android.view.ViewConfiguration;
 import android.view.WindowManagerPolicy;
 import android.widget.Toast;
@@ -184,6 +186,7 @@
     private static native void nativeSetPointerSpeed(long ptr, int speed);
     private static native void nativeSetShowTouches(long ptr, boolean enabled);
     private static native void nativeSetInteractive(long ptr, boolean interactive);
+    private static native void nativeReloadCalibration(long ptr);
     private static native void nativeVibrate(long ptr, int deviceId, long[] pattern,
             int repeat, int token);
     private static native void nativeCancelVibrate(long ptr, int deviceId, int token);
@@ -701,6 +704,47 @@
         mTempFullKeyboards.clear();
     }
 
+    @Override // Binder call & native callback
+    public TouchCalibration getTouchCalibrationForInputDevice(String inputDeviceDescriptor,
+            int surfaceRotation) {
+        if (inputDeviceDescriptor == null) {
+            throw new IllegalArgumentException("inputDeviceDescriptor must not be null");
+        }
+
+        synchronized (mDataStore) {
+            return mDataStore.getTouchCalibration(inputDeviceDescriptor, surfaceRotation);
+        }
+    }
+
+    @Override // Binder call
+    public void setTouchCalibrationForInputDevice(String inputDeviceDescriptor, int surfaceRotation,
+            TouchCalibration calibration) {
+        if (!checkCallingPermission(android.Manifest.permission.SET_INPUT_CALIBRATION,
+                "setTouchCalibrationForInputDevice()")) {
+            throw new SecurityException("Requires SET_INPUT_CALIBRATION permission");
+        }
+        if (inputDeviceDescriptor == null) {
+            throw new IllegalArgumentException("inputDeviceDescriptor must not be null");
+        }
+        if (calibration == null) {
+            throw new IllegalArgumentException("calibration must not be null");
+        }
+        if (surfaceRotation < Surface.ROTATION_0 || surfaceRotation > Surface.ROTATION_270) {
+            throw new IllegalArgumentException("surfaceRotation value out of bounds");
+        }
+
+        synchronized (mDataStore) {
+            try {
+                if (mDataStore.setTouchCalibration(inputDeviceDescriptor, surfaceRotation,
+                        calibration)) {
+                    nativeReloadCalibration(mPtr);
+                }
+            } finally {
+                mDataStore.saveIfNeeded();
+            }
+        }
+    }
+
     // Must be called on handler.
     private void showMissingKeyboardLayoutNotification() {
         if (!mKeyboardLayoutNotificationShown) {
diff --git a/services/core/java/com/android/server/input/PersistentDataStore.java b/services/core/java/com/android/server/input/PersistentDataStore.java
index 71de776..92fa813 100644
--- a/services/core/java/com/android/server/input/PersistentDataStore.java
+++ b/services/core/java/com/android/server/input/PersistentDataStore.java
@@ -24,6 +24,8 @@
 import org.xmlpull.v1.XmlPullParserException;
 import org.xmlpull.v1.XmlSerializer;
 
+import android.view.Surface;
+import android.hardware.input.TouchCalibration;
 import android.util.AtomicFile;
 import android.util.Slog;
 import android.util.Xml;
@@ -82,6 +84,30 @@
         }
     }
 
+    public TouchCalibration getTouchCalibration(String inputDeviceDescriptor, int surfaceRotation) {
+        InputDeviceState state = getInputDeviceState(inputDeviceDescriptor, false);
+        if (state == null) {
+            return TouchCalibration.IDENTITY;
+        }
+
+        TouchCalibration cal = state.getTouchCalibration(surfaceRotation);
+        if (cal == null) {
+            return TouchCalibration.IDENTITY;
+        }
+        return cal;
+    }
+
+    public boolean setTouchCalibration(String inputDeviceDescriptor, int surfaceRotation, TouchCalibration calibration) {
+        InputDeviceState state = getInputDeviceState(inputDeviceDescriptor, true);
+
+        if (state.setTouchCalibration(surfaceRotation, calibration)) {
+            setDirty();
+            return true;
+        }
+
+        return false;
+    }
+
     public String getCurrentKeyboardLayout(String inputDeviceDescriptor) {
         InputDeviceState state = getInputDeviceState(inputDeviceDescriptor, false);
         return state != null ? state.getCurrentKeyboardLayout() : null;
@@ -275,9 +301,35 @@
     }
 
     private static final class InputDeviceState {
+        private static final String[] CALIBRATION_NAME = { "x_scale",
+                "x_ymix", "x_offset", "y_xmix", "y_scale", "y_offset" };
+
+        private TouchCalibration[] mTouchCalibration = new TouchCalibration[4];
         private String mCurrentKeyboardLayout;
         private ArrayList<String> mKeyboardLayouts = new ArrayList<String>();
 
+        public TouchCalibration getTouchCalibration(int surfaceRotation) {
+            try {
+                return mTouchCalibration[surfaceRotation];
+            } catch (ArrayIndexOutOfBoundsException ex) {
+                Slog.w(InputManagerService.TAG, "Cannot get touch calibration.", ex);
+                return null;
+            }
+        }
+
+        public boolean setTouchCalibration(int surfaceRotation, TouchCalibration calibration) {
+            try {
+                if (!calibration.equals(mTouchCalibration[surfaceRotation])) {
+                    mTouchCalibration[surfaceRotation] = calibration;
+                    return true;
+                }
+                return false;
+            } catch (ArrayIndexOutOfBoundsException ex) {
+                Slog.w(InputManagerService.TAG, "Cannot set touch calibration.", ex);
+                return false;
+            }
+        }
+
         public String getCurrentKeyboardLayout() {
             return mCurrentKeyboardLayout;
         }
@@ -389,6 +441,52 @@
                         }
                         mCurrentKeyboardLayout = descriptor;
                     }
+                } else if (parser.getName().equals("calibration")) {
+                    String format = parser.getAttributeValue(null, "format");
+                    String rotation = parser.getAttributeValue(null, "rotation");
+                    int r = -1;
+
+                    if (format == null) {
+                        throw new XmlPullParserException(
+                                "Missing format attribute on calibration.");
+                    }
+                    if (!format.equals("affine")) {
+                        throw new XmlPullParserException(
+                                "Unsupported format for calibration.");
+                    }
+                    if (rotation != null) {
+                        try {
+                            r = stringToSurfaceRotation(rotation);
+                        } catch (IllegalArgumentException e) {
+                            throw new XmlPullParserException(
+                                    "Unsupported rotation for calibration.");
+                        }
+                    }
+
+                    float[] matrix = TouchCalibration.IDENTITY.getAffineTransform();
+                    int depth = parser.getDepth();
+                    while (XmlUtils.nextElementWithin(parser, depth)) {
+                        String tag = parser.getName().toLowerCase();
+                        String value = parser.nextText();
+
+                        for (int i = 0; i < matrix.length && i < CALIBRATION_NAME.length; i++) {
+                            if (tag.equals(CALIBRATION_NAME[i])) {
+                                matrix[i] = Float.parseFloat(value);
+                                break;
+                            }
+                        }
+                    }
+
+                    if (r == -1) {
+                        // Assume calibration applies to all rotations
+                        for (r = 0; r < mTouchCalibration.length; r++) {
+                            mTouchCalibration[r] = new TouchCalibration(matrix[0],
+                                matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
+                        }
+                    } else {
+                        mTouchCalibration[r] = new TouchCalibration(matrix[0],
+                            matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
+                    }
                 }
             }
 
@@ -411,6 +509,49 @@
                 }
                 serializer.endTag(null, "keyboard-layout");
             }
+
+            for (int i = 0; i < mTouchCalibration.length; i++) {
+                if (mTouchCalibration[i] != null) {
+                    String rotation = surfaceRotationToString(i);
+                    float[] transform = mTouchCalibration[i].getAffineTransform();
+
+                    serializer.startTag(null, "calibration");
+                    serializer.attribute(null, "format", "affine");
+                    serializer.attribute(null, "rotation", rotation);
+                    for (int j = 0; j < transform.length && j < CALIBRATION_NAME.length; j++) {
+                        serializer.startTag(null, CALIBRATION_NAME[j]);
+                        serializer.text(Float.toString(transform[j]));
+                        serializer.endTag(null, CALIBRATION_NAME[j]);
+                    }
+                    serializer.endTag(null, "calibration");
+                }
+            }
+        }
+
+        private static String surfaceRotationToString(int surfaceRotation) {
+            switch (surfaceRotation) {
+                case Surface.ROTATION_0:   return "0";
+                case Surface.ROTATION_90:  return "90";
+                case Surface.ROTATION_180: return "180";
+                case Surface.ROTATION_270: return "270";
+            }
+            throw new IllegalArgumentException("Unsupported surface rotation value" + surfaceRotation);
+        }
+
+        private static int stringToSurfaceRotation(String s) {
+            if ("0".equals(s)) {
+                return Surface.ROTATION_0;
+            }
+            if ("90".equals(s)) {
+                return Surface.ROTATION_90;
+            }
+            if ("180".equals(s)) {
+                return Surface.ROTATION_180;
+            }
+            if ("270".equals(s)) {
+                return Surface.ROTATION_270;
+            }
+            throw new IllegalArgumentException("Unsupported surface rotation string '" + s + "'");
         }
     }
-}
\ No newline at end of file
+}
diff --git a/services/core/java/com/android/server/location/ComprehensiveCountryDetector.java b/services/core/java/com/android/server/location/ComprehensiveCountryDetector.java
index 354858b..6117a9b 100644
--- a/services/core/java/com/android/server/location/ComprehensiveCountryDetector.java
+++ b/services/core/java/com/android/server/location/ComprehensiveCountryDetector.java
@@ -26,7 +26,6 @@
 import android.telephony.ServiceState;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
-import android.util.Log;
 import android.util.Slog;
 
 import java.util.Locale;
diff --git a/services/core/java/com/android/server/location/FlpHardwareProvider.java b/services/core/java/com/android/server/location/FlpHardwareProvider.java
index fab84a8..09f1c567 100644
--- a/services/core/java/com/android/server/location/FlpHardwareProvider.java
+++ b/services/core/java/com/android/server/location/FlpHardwareProvider.java
@@ -60,11 +60,16 @@
     private static final int FLP_RESULT_ID_UNKNOWN = -5;
     private static final int FLP_RESULT_INVALID_GEOFENCE_TRANSITION = -6;
 
+    // FlpHal monitor status codes, they must be equal to the ones in fused_location.h
+    private static final int FLP_GEOFENCE_MONITOR_STATUS_UNAVAILABLE = 1<<0;
+    private static final int FLP_GEOFENCE_MONITOR_STATUS_AVAILABLE = 1<<1;
+
     public static FlpHardwareProvider getInstance(Context context) {
         if (sSingletonInstance == null) {
             sSingletonInstance = new FlpHardwareProvider(context);
         }
 
+        nativeInit();
         return sSingletonInstance;
     }
 
@@ -92,6 +97,7 @@
     }
 
     public static boolean isSupported() {
+        nativeInit();
         return nativeIsSupported();
     }
 
@@ -141,6 +147,8 @@
             int transition,
             long timestamp,
             int sourcesUsed) {
+        // the transition Id does not require translation because the values in fused_location.h
+        // and GeofenceHardware are in sync
         getGeofenceHardwareSink().reportGeofenceTransition(
                 geofenceId,
                 updateLocationInformation(location),
@@ -157,9 +165,23 @@
             updatedLocation = updateLocationInformation(location);
         }
 
+        int monitorStatus;
+        switch (status) {
+            case FLP_GEOFENCE_MONITOR_STATUS_UNAVAILABLE:
+                monitorStatus = GeofenceHardware.MONITOR_CURRENTLY_UNAVAILABLE;
+                break;
+            case FLP_GEOFENCE_MONITOR_STATUS_AVAILABLE:
+                monitorStatus = GeofenceHardware.MONITOR_CURRENTLY_AVAILABLE;
+                break;
+            default:
+                Log.e(TAG, "Invalid FlpHal Geofence monitor status: " + status);
+                monitorStatus = GeofenceHardware.MONITOR_CURRENTLY_UNAVAILABLE;
+                break;
+        }
+
         getGeofenceHardwareSink().reportGeofenceMonitorStatus(
                 GeofenceHardware.MONITORING_TYPE_FUSED_HARDWARE,
-                status,
+                monitorStatus,
                 updatedLocation,
                 source);
     }
@@ -196,9 +218,9 @@
     // Core members
     private static native void nativeClassInit();
     private static native boolean nativeIsSupported();
+    private static native void nativeInit();
 
     // FlpLocationInterface members
-    private native void nativeInit();
     private native int nativeGetBatchSize();
     private native void nativeStartBatching(int requestId, FusedBatchOptions options);
     private native void nativeUpdateBatchingOptions(int requestId, FusedBatchOptions optionsObject);
@@ -238,12 +260,10 @@
     public static final String GEOFENCING = "Geofencing";
 
     public IFusedLocationHardware getLocationHardware() {
-        nativeInit();
         return mLocationHardware;
     }
 
     public IFusedGeofenceHardware getGeofenceHardware() {
-        nativeInit();
         return mGeofenceHardwareService;
     }
 
diff --git a/services/core/java/com/android/server/location/GeocoderProxy.java b/services/core/java/com/android/server/location/GeocoderProxy.java
index 5d4a770..422b94b 100644
--- a/services/core/java/com/android/server/location/GeocoderProxy.java
+++ b/services/core/java/com/android/server/location/GeocoderProxy.java
@@ -22,7 +22,6 @@
 import android.location.IGeocodeProvider;
 import android.os.Handler;
 import android.os.RemoteException;
-import android.os.UserHandle;
 import android.util.Log;
 
 import com.android.server.ServiceWatcher;
diff --git a/services/core/java/com/android/server/location/GeofenceProxy.java b/services/core/java/com/android/server/location/GeofenceProxy.java
index bbc1f47..b886eef 100644
--- a/services/core/java/com/android/server/location/GeofenceProxy.java
+++ b/services/core/java/com/android/server/location/GeofenceProxy.java
@@ -32,8 +32,6 @@
 import android.util.Log;
 import com.android.server.ServiceWatcher;
 
-import java.util.List;
-
 /**
  * @hide
  */
diff --git a/services/core/java/com/android/server/location/GpsLocationProvider.java b/services/core/java/com/android/server/location/GpsLocationProvider.java
index 9c76c19..c6cf68f 100644
--- a/services/core/java/com/android/server/location/GpsLocationProvider.java
+++ b/services/core/java/com/android/server/location/GpsLocationProvider.java
@@ -791,6 +791,7 @@
     private void handleDisable() {
         if (DEBUG) Log.d(TAG, "handleDisable");
 
+        updateClientUids(new WorkSource());
         stopNavigating();
         mAlarmManager.cancel(mWakeupIntent);
         mAlarmManager.cancel(mTimeoutIntent);
diff --git a/services/core/java/com/android/server/location/GpsXtraDownloader.java b/services/core/java/com/android/server/location/GpsXtraDownloader.java
index e420073..9dedb35d 100644
--- a/services/core/java/com/android/server/location/GpsXtraDownloader.java
+++ b/services/core/java/com/android/server/location/GpsXtraDownloader.java
@@ -25,7 +25,6 @@
 import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.StatusLine;
-import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.conn.params.ConnRouteParams;
diff --git a/services/core/java/com/android/server/location/LocationFudger.java b/services/core/java/com/android/server/location/LocationFudger.java
index 2a68743..ae71fe3 100644
--- a/services/core/java/com/android/server/location/LocationFudger.java
+++ b/services/core/java/com/android/server/location/LocationFudger.java
@@ -22,10 +22,7 @@
 import android.content.Context;
 import android.database.ContentObserver;
 import android.location.Location;
-import android.location.LocationManager;
-import android.os.Bundle;
 import android.os.Handler;
-import android.os.Parcelable;
 import android.os.SystemClock;
 import android.provider.Settings;
 import android.util.Log;
diff --git a/services/core/java/com/android/server/location/LocationProviderProxy.java b/services/core/java/com/android/server/location/LocationProviderProxy.java
index 14db862..5eb06ed 100644
--- a/services/core/java/com/android/server/location/LocationProviderProxy.java
+++ b/services/core/java/com/android/server/location/LocationProviderProxy.java
@@ -18,7 +18,6 @@
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
-import java.util.List;
 
 import android.content.Context;
 import android.location.LocationProvider;
diff --git a/services/core/java/com/android/server/location/LocationRequestStatistics.java b/services/core/java/com/android/server/location/LocationRequestStatistics.java
new file mode 100644
index 0000000..85231bb
--- /dev/null
+++ b/services/core/java/com/android/server/location/LocationRequestStatistics.java
@@ -0,0 +1,205 @@
+package com.android.server.location;
+
+import android.os.SystemClock;
+import android.util.Log;
+
+import java.util.HashMap;
+
+/**
+ * Holds statistics for location requests (active requests by provider).
+ *
+ * <p>Must be externally synchronized.
+ */
+public class LocationRequestStatistics {
+    private static final String TAG = "LocationStats";
+
+    // Maps package name nad provider to location request statistics.
+    public final HashMap<PackageProviderKey, PackageStatistics> statistics
+            = new HashMap<PackageProviderKey, PackageStatistics>();
+
+    /**
+     * Signals that a package has started requesting locations.
+     *
+     * @param packageName Name of package that has requested locations.
+     * @param providerName Name of provider that is requested (e.g. "gps").
+     * @param intervalMs The interval that is requested in ms.
+     */
+    public void startRequesting(String packageName, String providerName, long intervalMs) {
+        PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+        PackageStatistics stats = statistics.get(key);
+        if (stats == null) {
+            stats = new PackageStatistics();
+            statistics.put(key, stats);
+        }
+        stats.startRequesting(intervalMs);
+    }
+
+    /**
+     * Signals that a package has stopped requesting locations.
+     *
+     * @param packageName Name of package that has stopped requesting locations.
+     * @param providerName Provider that is no longer being requested.
+     */
+    public void stopRequesting(String packageName, String providerName) {
+        PackageProviderKey key = new PackageProviderKey(packageName, providerName);
+        PackageStatistics stats = statistics.get(key);
+        if (stats != null) {
+            stats.stopRequesting();
+        } else {
+            // This shouldn't be a possible code path.
+            Log.e(TAG, "Couldn't find package statistics when removing location request.");
+        }
+    }
+
+    /**
+     * A key that holds both package and provider names.
+     */
+    public static class PackageProviderKey {
+        /**
+         * Name of package requesting location.
+         */
+        public final String packageName;
+        /**
+         * Name of provider being requested (e.g. "gps").
+         */
+        public final String providerName;
+
+        public PackageProviderKey(String packageName, String providerName) {
+            this.packageName = packageName;
+            this.providerName = providerName;
+        }
+
+        @Override
+        public boolean equals(Object other) {
+            if (!(other instanceof PackageProviderKey)) {
+                return false;
+            }
+
+            PackageProviderKey otherKey = (PackageProviderKey) other;
+            return packageName.equals(otherKey.packageName)
+                    && providerName.equals(otherKey.providerName);
+        }
+
+        @Override
+        public int hashCode() {
+            return packageName.hashCode() + 31 * providerName.hashCode();
+        }
+    }
+
+    /**
+     * Usage statistics for a package/provider pair.
+     */
+    public static class PackageStatistics {
+        // Time when this package first requested location.
+        private final long mInitialElapsedTimeMs;
+        // Number of active location requests this package currently has.
+        private int mNumActiveRequests;
+        // Time when this package most recently went from not requesting location to requesting.
+        private long mLastActivitationElapsedTimeMs;
+        // The fastest interval this package has ever requested.
+        private long mFastestIntervalMs;
+        // The slowest interval this package has ever requested.
+        private long mSlowestIntervalMs;
+        // The total time this app has requested location (not including currently running requests).
+        private long mTotalDurationMs;
+
+        private PackageStatistics() {
+            mInitialElapsedTimeMs = SystemClock.elapsedRealtime();
+            mNumActiveRequests = 0;
+            mTotalDurationMs = 0;
+            mFastestIntervalMs = Long.MAX_VALUE;
+            mSlowestIntervalMs = 0;
+        }
+
+        private void startRequesting(long intervalMs) {
+            if (mNumActiveRequests == 0) {
+                mLastActivitationElapsedTimeMs = SystemClock.elapsedRealtime();
+            }
+
+            if (intervalMs < mFastestIntervalMs) {
+                mFastestIntervalMs = intervalMs;
+            }
+
+            if (intervalMs > mSlowestIntervalMs) {
+                mSlowestIntervalMs = intervalMs;
+            }
+
+            mNumActiveRequests++;
+        }
+
+        private void stopRequesting() {
+            if (mNumActiveRequests <= 0) {
+                // Shouldn't be a possible code path
+                Log.e(TAG, "Reference counting corrupted in usage statistics.");
+                return;
+            }
+
+            mNumActiveRequests--;
+            if (mNumActiveRequests == 0) {
+                long lastDurationMs
+                        = SystemClock.elapsedRealtime() - mLastActivitationElapsedTimeMs;
+                mTotalDurationMs += lastDurationMs;
+            }
+        }
+
+        /**
+         * Returns the duration that this request has been active.
+         */
+        public long getDurationMs() {
+            long currentDurationMs = mTotalDurationMs;
+            if (mNumActiveRequests > 0) {
+                currentDurationMs
+                        += SystemClock.elapsedRealtime() - mLastActivitationElapsedTimeMs;
+            }
+            return currentDurationMs;
+        }
+
+        /**
+         * Returns the time since the initial request in ms.
+         */
+        public long getTimeSinceFirstRequestMs() {
+            return SystemClock.elapsedRealtime() - mInitialElapsedTimeMs;
+        }
+
+        /**
+         * Returns the fastest interval that has been tracked.
+         */
+        public long getFastestIntervalMs() {
+            return mFastestIntervalMs;
+        }
+
+        /**
+         * Returns the slowest interval that has been tracked.
+         */
+        public long getSlowestIntervalMs() {
+            return mSlowestIntervalMs;
+        }
+
+        /**
+         * Returns true if a request is active for these tracked statistics.
+         */
+        public boolean isActive() {
+            return mNumActiveRequests > 0;
+        }
+
+        @Override
+        public String toString() {
+            StringBuilder s = new StringBuilder();
+            if (mFastestIntervalMs == mSlowestIntervalMs) {
+                s.append("Interval ").append(mFastestIntervalMs / 1000).append(" seconds");
+            } else {
+                s.append("Min interval ").append(mFastestIntervalMs / 1000).append(" seconds");
+                s.append(": Max interval ").append(mSlowestIntervalMs / 1000).append(" seconds");
+            }
+            s.append(": Duration requested ")
+                    .append((getDurationMs() / 1000) / 60)
+                    .append(" out of the last ")
+                    .append((getTimeSinceFirstRequestMs() / 1000) / 60)
+                    .append(" minutes");
+            if (isActive()) {
+                s.append(": Currently active");
+            }
+            return s.toString();
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/location/MockProvider.java b/services/core/java/com/android/server/location/MockProvider.java
index 36c43ff..8578761 100644
--- a/services/core/java/com/android/server/location/MockProvider.java
+++ b/services/core/java/com/android/server/location/MockProvider.java
@@ -16,7 +16,6 @@
 
 package com.android.server.location;
 
-import android.location.Criteria;
 import android.location.ILocationManager;
 import android.location.Location;
 import android.location.LocationProvider;
diff --git a/services/core/java/com/android/server/media/MediaRouteProviderProxy.java b/services/core/java/com/android/server/media/MediaRouteProviderProxy.java
new file mode 100644
index 0000000..c4e2058
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaRouteProviderProxy.java
@@ -0,0 +1,394 @@
+/*
+ * Copyright (C) 2014 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.android.server.media;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.media.routeprovider.IRouteConnection;
+import android.media.routeprovider.IRouteProvider;
+import android.media.routeprovider.IRouteProviderCallback;
+import android.media.routeprovider.RouteProviderService;
+import android.media.routeprovider.RouteRequest;
+import android.media.session.RouteEvent;
+import android.media.session.RouteInfo;
+import android.media.session.Session;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.UserHandle;
+import android.util.Log;
+import android.util.Slog;
+
+import java.io.PrintWriter;
+import java.lang.ref.WeakReference;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * System representation and interface to a MediaRouteProvider. This class is
+ * not thread safe so all calls should be made on the main thread.
+ */
+public class MediaRouteProviderProxy {
+    private static final String TAG = "MRPProxy";
+    private static final boolean DEBUG = true;
+
+    private static final int MAX_RETRIES = 3;
+
+    private final Object mLock = new Object();
+    private final Context mContext;
+    private final String mId;
+    private final ComponentName mComponentName;
+    private final int mUserId;
+    // Interfaces declared in the manifest
+    private final ArrayList<String> mInterfaces = new ArrayList<String>();
+    private final ArrayList<RouteConnectionRecord> mConnections = new ArrayList<RouteConnectionRecord>();
+    private final Handler mHandler = new Handler();
+
+    private Intent mBindIntent;
+    private IRouteProvider mBinder;
+    private boolean mRunning;
+    private boolean mInterested;
+    private boolean mBound;
+    private int mRetryCount;
+
+    private RoutesListener mRouteListener;
+
+    public MediaRouteProviderProxy(Context context, String id, ComponentName component, int uid,
+            ArrayList<String> interfaces) {
+        mContext = context;
+        mId = id;
+        mComponentName = component;
+        mUserId = uid;
+        if (interfaces != null) {
+            mInterfaces.addAll(interfaces);
+        }
+        mBindIntent = new Intent(RouteProviderService.SERVICE_INTERFACE);
+        mBindIntent.setComponent(mComponentName);
+    }
+
+    /**
+     * Send any cleanup messages and unbind from the media route provider
+     */
+    public void stop() {
+        if (mRunning) {
+            mRunning = false;
+            mRetryCount = 0;
+            updateBinding();
+        }
+    }
+
+    /**
+     * Bind to the media route provider and perform any setup needed
+     */
+    public void start() {
+        if (!mRunning) {
+            mRunning = true;
+            updateBinding();
+        }
+    }
+
+    /**
+     * Set whether or not this provider is currently interesting to the system.
+     * In the future this may take a list of interfaces instead.
+     *
+     * @param interested True if we want to connect to this provider
+     */
+    public void setInterested(boolean interested) {
+        mInterested = interested;
+        updateBinding();
+    }
+
+    /**
+     * Set a listener to get route updates on.
+     *
+     * @param listener The listener to receive updates on.
+     */
+    public void setRoutesListener(RoutesListener listener) {
+        mRouteListener = listener;
+    }
+
+    /**
+     * Send a request to the Provider to get all the routes that the session can
+     * use.
+     *
+     * @param record The session to get routes for.
+     * @param requestId An id to identify this request.
+     */
+    public void getRoutes(MediaSessionRecord record, final int requestId) {
+        // TODO change routes to have a system global id and maintain a mapping
+        // to the original route
+        if (mBinder == null) {
+            Log.wtf(TAG, "Attempted to call getRoutes without a binder connection");
+            return;
+        }
+        List<RouteRequest> requests = record.getRouteRequests();
+        final String sessionId = record.getSessionInfo().getId();
+        try {
+            mBinder.getAvailableRoutes(requests, new ResultReceiver(mHandler) {
+                @Override
+                protected void onReceiveResult(int resultCode, Bundle resultData) {
+                    if (resultCode != RouteProviderService.RESULT_SUCCESS) {
+                        // ignore failures, just means no routes were generated
+                        return;
+                    }
+                    ArrayList<RouteInfo> routes
+                            = resultData.getParcelableArrayList(RouteProviderService.KEY_ROUTES);
+                    ArrayList<RouteInfo> sysRoutes = new ArrayList<RouteInfo>();
+                    for (int i = 0; i < routes.size(); i++) {
+                        RouteInfo route = routes.get(i);
+                        RouteInfo.Builder bob = new RouteInfo.Builder(route);
+                        bob.setProviderId(mId);
+                        sysRoutes.add(bob.build());
+                    }
+                    if (mRouteListener != null) {
+                        mRouteListener.onRoutesUpdated(sessionId, sysRoutes, requestId);
+                    }
+                }
+            });
+        } catch (RemoteException e) {
+            Log.d(TAG, "Error in getRoutes", e);
+        }
+    }
+
+    /**
+     * Try connecting again if we've been disconnected.
+     */
+    public void rebindIfDisconnected() {
+        if (mBinder == null && shouldBind()) {
+            unbind();
+            bind();
+        }
+    }
+
+    /**
+     * Send a request to connect to a route.
+     *
+     * @param session The session that is trying to connect.
+     * @param route The route it is connecting to.
+     * @param request The request with the connection parameters.
+     * @return true if the request was sent, false otherwise.
+     */
+    public boolean connectToRoute(MediaSessionRecord session, final RouteInfo route,
+            final RouteRequest request) {
+        final String sessionId = session.getSessionInfo().getId();
+        try {
+            mBinder.connect(route, request, new ResultReceiver(mHandler) {
+                @Override
+                protected void onReceiveResult(int resultCode, Bundle resultData) {
+                    if (resultCode != RouteProviderService.RESULT_SUCCESS) {
+                        // TODO handle connection failure
+                        return;
+                    }
+                    IBinder binder = resultData.getBinder(RouteProviderService.KEY_CONNECTION);
+                    IRouteConnection connection = null;
+                    if (binder != null) {
+                        connection = IRouteConnection.Stub.asInterface(binder);
+                    }
+
+                    if (connection != null) {
+                        RouteConnectionRecord record = new RouteConnectionRecord(
+                                connection, mComponentName.getPackageName(), mUserId);
+                        mConnections.add(record);
+                        if (mRouteListener != null) {
+                            mRouteListener.onRouteConnected(sessionId, route, request, record);
+                        }
+                    }
+                }
+            });
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error connecting to route.", e);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Check if this is the provider you're looking for.
+     */
+    public boolean hasComponentName(String packageName, String className) {
+        return mComponentName.getPackageName().equals(packageName)
+                && mComponentName.getClassName().equals(className);
+    }
+
+    /**
+     * Get the unique id for this provider.
+     *
+     * @return The provider's id.
+     */
+    public String getId() {
+        return mId;
+    }
+
+    public void dump(PrintWriter pw, String prefix) {
+        pw.println(prefix + mId + " " + this);
+        String indent = prefix + "  ";
+
+        pw.println(indent + "component=" + mComponentName.toString());
+        pw.println(indent + "user id=" + mUserId);
+        pw.println(indent + "interfaces=" + mInterfaces.toString());
+        pw.println(indent + "connections=" + mConnections.toString());
+        pw.println(indent + "running=" + mRunning);
+        pw.println(indent + "interested=" + mInterested);
+        pw.println(indent + "bound=" + mBound);
+    }
+
+    private void updateBinding() {
+        if (shouldBind()) {
+            bind();
+        } else {
+            unbind();
+        }
+    }
+
+    private boolean shouldBind() {
+        return mRunning && mInterested;
+    }
+
+    private void bind() {
+        if (!mBound) {
+            if (DEBUG) {
+                Slog.d(TAG, this + ": Binding");
+            }
+
+            try {
+                mBound = mContext.bindServiceAsUser(mBindIntent, mServiceConn,
+                        Context.BIND_AUTO_CREATE, new UserHandle(mUserId));
+                if (!mBound && DEBUG) {
+                    Slog.d(TAG, this + ": Bind failed");
+                }
+            } catch (SecurityException ex) {
+                if (DEBUG) {
+                    Slog.d(TAG, this + ": Bind failed", ex);
+                }
+            }
+        }
+    }
+
+    private void unbind() {
+        if (mBound) {
+            if (DEBUG) {
+                Slog.d(TAG, this + ": Unbinding");
+            }
+
+            mBound = false;
+            mContext.unbindService(mServiceConn);
+        }
+    }
+
+    private RouteConnectionRecord getConnectionLocked(IBinder binder) {
+        for (int i = mConnections.size() - 1; i >= 0; i--) {
+            RouteConnectionRecord record = mConnections.get(i);
+            if (record.isConnection(binder)) {
+                return record;
+            }
+        }
+        return null;
+    }
+
+    private ServiceConnection mServiceConn = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            mBinder = IRouteProvider.Stub.asInterface(service);
+            if (DEBUG) {
+                Slog.d(TAG, "Connected to route provider");
+            }
+            try {
+                mBinder.registerCallback(mCbStub);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Error registering callback on route provider. Retry count: "
+                        + mRetryCount, e);
+                if (mRetryCount < MAX_RETRIES) {
+                    mRetryCount++;
+                    rebindIfDisconnected();
+                }
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            mBinder = null;
+            if (DEBUG) {
+                Slog.d(TAG, "Disconnected from route provider");
+            }
+        }
+
+    };
+
+    private IRouteProviderCallback.Stub mCbStub = new IRouteProviderCallback.Stub() {
+        @Override
+        public void onConnectionStateChanged(IRouteConnection connection, int state)
+                throws RemoteException {
+            // TODO
+        }
+
+        @Override
+        public void onRouteEvent(RouteEvent event) throws RemoteException {
+            synchronized (mLock) {
+                RouteConnectionRecord record = getConnectionLocked(event.getConnection());
+                Log.d(TAG, "Received route event for record " + record);
+                if (record != null) {
+                    record.sendEvent(event);
+                }
+            }
+        }
+
+        @Override
+        public void onConnectionTerminated(IRouteConnection connection) throws RemoteException {
+            synchronized (mLock) {
+                RouteConnectionRecord record = getConnectionLocked(connection.asBinder());
+                if (record != null) {
+                    record.disconnect();
+                    mConnections.remove(record);
+                }
+            }
+        }
+
+        @Override
+        public void onRoutesChanged() throws RemoteException {
+            // TODO
+        }
+    };
+
+    /**
+     * Listener for receiving responses to route requests on the provider.
+     */
+    public interface RoutesListener {
+        /**
+         * Called when routes have been returned from a request to getRoutes.
+         *
+         * @param record The session that the routes were requested for.
+         * @param routes The matching routes returned by the provider.
+         * @param reqId The request id this is responding to.
+         */
+        public void onRoutesUpdated(String sessionId, ArrayList<RouteInfo> routes,
+                int reqId);
+
+        /**
+         * Called when a route has successfully connected.
+         *
+         * @param session The session that was connected.
+         * @param route The route it connected to.
+         * @param options The options that were used for the connection.
+         * @param connection The connection instance that was created.
+         */
+        public void onRouteConnected(String sessionId, RouteInfo route,
+                RouteRequest options, RouteConnectionRecord connection);
+    }
+}
diff --git a/services/core/java/com/android/server/media/MediaRouteProviderWatcher.java b/services/core/java/com/android/server/media/MediaRouteProviderWatcher.java
new file mode 100644
index 0000000..cf1d95ab
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaRouteProviderWatcher.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2014 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.android.server.media;
+
+import android.Manifest;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.media.routeprovider.RouteProviderService;
+import android.os.Handler;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.Slog;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.UUID;
+
+/**
+ * Watches for media route provider services to be installed. Adds a provider to
+ * the media session service for each registered service. For now just run all
+ * providers. In the future define a policy for when to run providers.
+ */
+public class MediaRouteProviderWatcher {
+    private static final String TAG = "MRPWatcher";
+    private static final boolean DEBUG = true; // Log.isLoggable(TAG,
+                                               // Log.DEBUG);
+
+    private final Context mContext;
+    private final Callback mCallback;
+    private final Handler mHandler;
+    private final int mUserId;
+    private final PackageManager mPackageManager;
+
+    private final ArrayList<MediaRouteProviderProxy> mProviders =
+            new ArrayList<MediaRouteProviderProxy>();
+    private boolean mRunning;
+
+    public MediaRouteProviderWatcher(Context context, Callback callback, Handler handler,
+            int userId) {
+        mContext = context;
+        mCallback = callback;
+        mHandler = handler;
+        mUserId = userId;
+        mPackageManager = context.getPackageManager();
+    }
+
+    public void dump(PrintWriter pw, String prefix) {
+        pw.println(prefix + " mUserId=" + mUserId);
+        pw.println(prefix + " mRunning=" + mRunning);
+        pw.println(prefix + " mProviders.size()=" + mProviders.size());
+    }
+
+    public void start() {
+        if (!mRunning) {
+            mRunning = true;
+
+            IntentFilter filter = new IntentFilter();
+            filter.addAction(Intent.ACTION_PACKAGE_ADDED);
+            filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
+            filter.addAction(Intent.ACTION_PACKAGE_CHANGED);
+            filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
+            filter.addAction(Intent.ACTION_PACKAGE_RESTARTED);
+            filter.addDataScheme("package");
+            mContext.registerReceiverAsUser(mScanPackagesReceiver,
+                    new UserHandle(mUserId), filter, null, mHandler);
+
+            // Scan packages.
+            // Also has the side-effect of restarting providers if needed.
+            mHandler.post(mScanPackagesRunnable);
+        }
+    }
+
+    public void stop() {
+        if (mRunning) {
+            mRunning = false;
+
+            mContext.unregisterReceiver(mScanPackagesReceiver);
+            mHandler.removeCallbacks(mScanPackagesRunnable);
+
+            // Stop all providers.
+            for (int i = mProviders.size() - 1; i >= 0; i--) {
+                mProviders.get(i).stop();
+            }
+        }
+    }
+
+    public ArrayList<MediaRouteProviderProxy> getProviders() {
+        return mProviders;
+    }
+
+    public MediaRouteProviderProxy getProvider(String id) {
+        int providerIndex = findProvider(id);
+        if (providerIndex != -1) {
+            return mProviders.get(providerIndex);
+        }
+        return null;
+    }
+
+    private void scanPackages() {
+        if (!mRunning) {
+            return;
+        }
+
+        // Add providers for all new services.
+        // Reorder the list so that providers left at the end will be the ones
+        // to remove.
+        int targetIndex = 0;
+        Intent intent = new Intent(RouteProviderService.SERVICE_INTERFACE);
+        for (ResolveInfo resolveInfo : mPackageManager.queryIntentServicesAsUser(
+                intent, 0, mUserId)) {
+            ServiceInfo serviceInfo = resolveInfo.serviceInfo;
+            if (DEBUG) {
+                Slog.d(TAG, "Checking service " + (serviceInfo == null ? null : serviceInfo.name));
+            }
+            if (serviceInfo != null && verifyServiceTrusted(serviceInfo)) {
+                int sourceIndex = findProvider(serviceInfo.packageName, serviceInfo.name);
+                if (sourceIndex < 0) {
+                    // TODO get declared interfaces from manifest
+                    if (DEBUG) {
+                        Slog.d(TAG, "Creating new provider proxy for service");
+                    }
+                    MediaRouteProviderProxy provider =
+                            new MediaRouteProviderProxy(mContext, UUID.randomUUID().toString(),
+                                    new ComponentName(serviceInfo.packageName, serviceInfo.name),
+                                    mUserId, null);
+                    provider.start();
+                    mProviders.add(targetIndex++, provider);
+                    mCallback.addProvider(provider);
+                } else if (sourceIndex >= targetIndex) {
+                    MediaRouteProviderProxy provider = mProviders.get(sourceIndex);
+                    provider.start(); // restart the provider if needed
+                    provider.rebindIfDisconnected();
+                    Collections.swap(mProviders, sourceIndex, targetIndex++);
+                }
+            }
+        }
+
+        // Remove providers for missing services.
+        if (targetIndex < mProviders.size()) {
+            for (int i = mProviders.size() - 1; i >= targetIndex; i--) {
+                MediaRouteProviderProxy provider = mProviders.get(i);
+                mCallback.removeProvider(provider);
+                mProviders.remove(provider);
+                provider.stop();
+            }
+        }
+    }
+
+    private boolean verifyServiceTrusted(ServiceInfo serviceInfo) {
+        if (serviceInfo.permission == null || !serviceInfo.permission.equals(
+                Manifest.permission.BIND_ROUTE_PROVIDER)) {
+            // If the service does not require this permission then any app
+            // could potentially bind to it and mess with their routes. So we
+            // only want to trust providers that require the
+            // correct permissions.
+            Slog.w(TAG, "Ignoring route provider service because it did not "
+                    + "require the BIND_ROUTE_PROVIDER permission in its manifest: "
+                    + serviceInfo.packageName + "/" + serviceInfo.name);
+            return false;
+        }
+        // Looks good.
+        return true;
+    }
+
+    private int findProvider(String id) {
+        int count = mProviders.size();
+        for (int i = 0; i < count; i++) {
+            MediaRouteProviderProxy provider = mProviders.get(i);
+            if (TextUtils.equals(id, provider.getId())) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    private int findProvider(String packageName, String className) {
+        int count = mProviders.size();
+        for (int i = 0; i < count; i++) {
+            MediaRouteProviderProxy provider = mProviders.get(i);
+            if (provider.hasComponentName(packageName, className)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    private final BroadcastReceiver mScanPackagesReceiver = new BroadcastReceiver() {
+            @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DEBUG) {
+                Slog.d(TAG, "Received package manager broadcast: " + intent);
+            }
+            scanPackages();
+        }
+    };
+
+    private final Runnable mScanPackagesRunnable = new Runnable() {
+            @Override
+        public void run() {
+            scanPackages();
+        }
+    };
+
+    public interface Callback {
+        void addProvider(MediaRouteProviderProxy provider);
+
+        void removeProvider(MediaRouteProviderProxy provider);
+    }
+}
diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java
new file mode 100644
index 0000000..ab2a723
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaSessionRecord.java
@@ -0,0 +1,725 @@
+/*
+ * Copyright (C) 2014 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.android.server.media;
+
+import android.content.Intent;
+import android.media.routeprovider.RouteRequest;
+import android.media.session.ISessionController;
+import android.media.session.ISessionControllerCallback;
+import android.media.session.ISession;
+import android.media.session.ISessionCallback;
+import android.media.session.SessionController;
+import android.media.session.MediaMetadata;
+import android.media.session.RouteCommand;
+import android.media.session.RouteInfo;
+import android.media.session.RouteOptions;
+import android.media.session.RouteEvent;
+import android.media.session.Session;
+import android.media.session.SessionInfo;
+import android.media.session.RouteInterface;
+import android.media.session.PlaybackState;
+import android.media.Rating;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.os.SystemClock;
+import android.text.TextUtils;
+import android.util.Log;
+import android.util.Pair;
+import android.util.Slog;
+import android.view.KeyEvent;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * This is the system implementation of a Session. Apps will interact with the
+ * MediaSession wrapper class instead.
+ */
+public class MediaSessionRecord implements IBinder.DeathRecipient {
+    private static final String TAG = "MediaSessionRecord";
+
+    private final MessageHandler mHandler;
+
+    private final int mPid;
+    private final SessionInfo mSessionInfo;
+    private final String mTag;
+    private final ControllerStub mController;
+    private final SessionStub mSession;
+    private final SessionCb mSessionCb;
+    private final MediaSessionService mService;
+
+    private final Object mLock = new Object();
+    private final ArrayList<ISessionControllerCallback> mControllerCallbacks =
+            new ArrayList<ISessionControllerCallback>();
+    private final ArrayList<RouteRequest> mRequests = new ArrayList<RouteRequest>();
+
+    private boolean mTransportPerformerEnabled = false;
+    private RouteInfo mRoute;
+    private RouteOptions mRequest;
+    private RouteConnectionRecord mConnection;
+    // TODO define a RouteState class with relevant info
+    private int mRouteState;
+
+    // TransportPerformer fields
+
+    private MediaMetadata mMetadata;
+    private PlaybackState mPlaybackState;
+    private int mRatingType;
+    // End TransportPerformer fields
+
+    private boolean mIsPublished = false;
+
+    public MediaSessionRecord(int pid, String packageName, ISessionCallback cb, String tag,
+            MediaSessionService service, Handler handler) {
+        mPid = pid;
+        mSessionInfo = new SessionInfo(UUID.randomUUID().toString(), packageName);
+        mTag = tag;
+        mController = new ControllerStub();
+        mSession = new SessionStub();
+        mSessionCb = new SessionCb(cb);
+        mService = service;
+        mHandler = new MessageHandler(handler.getLooper());
+    }
+
+    /**
+     * Get the binder for the {@link Session}.
+     *
+     * @return The session binder apps talk to.
+     */
+    public ISession getSessionBinder() {
+        return mSession;
+    }
+
+    /**
+     * Get the binder for the {@link SessionController}.
+     *
+     * @return The controller binder apps talk to.
+     */
+    public ISessionController getControllerBinder() {
+        return mController;
+    }
+
+    /**
+     * Get the set of route requests this session is interested in.
+     *
+     * @return The list of RouteRequests
+     */
+    public List<RouteRequest> getRouteRequests() {
+        return mRequests;
+    }
+
+    /**
+     * Get the route this session is currently on.
+     *
+     * @return The route the session is on.
+     */
+    public RouteInfo getRoute() {
+        return mRoute;
+    }
+
+    /**
+     * Get the info for this session.
+     *
+     * @return Info that identifies this session.
+     */
+    public SessionInfo getSessionInfo() {
+        return mSessionInfo;
+    }
+
+    /**
+     * Set the selected route. This does not connect to the route, just notifies
+     * the app that a new route has been selected.
+     *
+     * @param route The route that was selected.
+     */
+    public void selectRoute(RouteInfo route) {
+        synchronized (mLock) {
+            if (route != mRoute) {
+                if (mConnection != null) {
+                    mConnection.disconnect();
+                    mConnection = null;
+                }
+            }
+            mRoute = route;
+        }
+        mSessionCb.sendRouteChange(route);
+    }
+
+    /**
+     * Update the state of the route this session is using and notify the
+     * session.
+     *
+     * @param state The new state of the route.
+     */
+    public void setRouteState(int state) {
+        mSessionCb.sendRouteStateChange(state);
+    }
+
+    /**
+     * Send an event to this session from the route it is using.
+     *
+     * @param event The event to send.
+     */
+    public void sendRouteEvent(RouteEvent event) {
+        mSessionCb.sendRouteEvent(event);
+    }
+
+    /**
+     * Set the connection to use for the selected route and notify the app it is
+     * now connected.
+     *
+     * @param route The route the connection is to.
+     * @param request The request that was used to connect.
+     * @param connection The connection to the route.
+     * @return True if this connection is still valid, false if it is stale.
+     */
+    public boolean setRouteConnected(RouteInfo route, RouteOptions request,
+            RouteConnectionRecord connection) {
+        synchronized (mLock) {
+            if (mRoute == null || !TextUtils.equals(route.getId(), mRoute.getId())) {
+                Log.w(TAG, "setRouteConnected: connected route is stale");
+                // TODO figure out disconnection path
+                return false;
+            }
+            if (request != mRequest) {
+                Log.w(TAG, "setRouteConnected: connection request is stale");
+                // TODO figure out disconnection path
+                return false;
+            }
+            mConnection = connection;
+            mConnection.setListener(mConnectionListener);
+            mSessionCb.sendRouteConnected();
+        }
+        return true;
+    }
+
+    /**
+     * Check if this session has been published by the app yet.
+     *
+     * @return True if it has been published, false otherwise.
+     */
+    public boolean isPublished() {
+        return mIsPublished;
+    }
+
+    @Override
+    public void binderDied() {
+        mService.sessionDied(this);
+    }
+
+    public void dump(PrintWriter pw, String prefix) {
+        pw.println(prefix + mTag + " " + this);
+
+        final String indent = prefix + "  ";
+        pw.println(indent + "pid=" + mPid);
+        pw.println(indent + "info=" + mSessionInfo.toString());
+        pw.println(indent + "published=" + mIsPublished);
+        pw.println(indent + "transport controls enabled=" + mTransportPerformerEnabled);
+        pw.println(indent + "rating type=" + mRatingType);
+        pw.println(indent + "controllers: " + mControllerCallbacks.size());
+        pw.println(indent + "route requests {");
+        int size = mRequests.size();
+        for (int i = 0; i < size; i++) {
+            pw.println(indent + "  " + mRequests.get(i).toString());
+        }
+        pw.println(indent + "}");
+        pw.println(indent + "route=" + (mRoute == null ? null : mRoute.toString()));
+        pw.println(indent + "connection=" + (mConnection == null ? null : mConnection.toString()));
+        pw.println(indent + "params=" + (mRequest == null ? null : mRequest.toString()));
+    }
+
+    private void onDestroy() {
+        mService.destroySession(this);
+    }
+
+    private void pushPlaybackStateUpdate() {
+        synchronized (mLock) {
+            for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) {
+                ISessionControllerCallback cb = mControllerCallbacks.get(i);
+                try {
+                    cb.onPlaybackStateChanged(mPlaybackState);
+                } catch (RemoteException e) {
+                    Log.w(TAG, "Removing dead callback in pushPlaybackStateUpdate.", e);
+                    mControllerCallbacks.remove(i);
+                }
+            }
+        }
+    }
+
+    private void pushMetadataUpdate() {
+        synchronized (mLock) {
+            for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) {
+                ISessionControllerCallback cb = mControllerCallbacks.get(i);
+                try {
+                    cb.onMetadataChanged(mMetadata);
+                } catch (RemoteException e) {
+                    Log.w(TAG, "Removing dead callback in pushMetadataUpdate.", e);
+                    mControllerCallbacks.remove(i);
+                }
+            }
+        }
+    }
+
+    private void pushRouteUpdate() {
+        synchronized (mLock) {
+            for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) {
+                ISessionControllerCallback cb = mControllerCallbacks.get(i);
+                try {
+                    cb.onRouteChanged(mRoute);
+                } catch (RemoteException e) {
+                    Log.w(TAG, "Removing dead callback in pushRouteUpdate.", e);
+                    mControllerCallbacks.remove(i);
+                }
+            }
+        }
+    }
+
+    private void pushEvent(String event, Bundle data) {
+        synchronized (mLock) {
+            for (int i = mControllerCallbacks.size() - 1; i >= 0; i--) {
+                ISessionControllerCallback cb = mControllerCallbacks.get(i);
+                try {
+                    cb.onEvent(event, data);
+                } catch (RemoteException e) {
+                    Log.w(TAG, "Error with callback in pushEvent.", e);
+                }
+            }
+        }
+    }
+
+    private void pushRouteCommand(RouteCommand command, ResultReceiver cb) {
+        synchronized (mLock) {
+            if (mRoute == null || !TextUtils.equals(command.getRouteInfo(), mRoute.getId())) {
+                if (cb != null) {
+                    cb.send(RouteInterface.RESULT_ROUTE_IS_STALE, null);
+                    return;
+                }
+            }
+            if (mConnection != null) {
+                mConnection.sendCommand(command, cb);
+            } else if (cb != null) {
+                cb.send(RouteInterface.RESULT_NOT_CONNECTED, null);
+            }
+        }
+    }
+
+    private PlaybackState getStateWithUpdatedPosition() {
+        PlaybackState state = mPlaybackState;
+        long duration = -1;
+        if (mMetadata != null && mMetadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
+            duration = mMetadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
+        }
+        PlaybackState result = null;
+        if (state != null) {
+            if (state.getState() == PlaybackState.PLAYSTATE_PLAYING
+                    || state.getState() == PlaybackState.PLAYSTATE_FAST_FORWARDING
+                    || state.getState() == PlaybackState.PLAYSTATE_REWINDING) {
+                long updateTime = state.getLastPositionUpdateTime();
+                if (updateTime > 0) {
+                    long position = (long) (state.getRate()
+                            * (SystemClock.elapsedRealtime() - updateTime)) + state.getPosition();
+                    if (duration >= 0 && position > duration) {
+                        position = duration;
+                    } else if (position < 0) {
+                        position = 0;
+                    }
+                    result = new PlaybackState(state);
+                    result.setState(state.getState(), position, state.getRate());
+                }
+            }
+        }
+        return result == null ? state : result;
+    }
+
+    private final RouteConnectionRecord.Listener mConnectionListener
+            = new RouteConnectionRecord.Listener() {
+        @Override
+        public void onEvent(RouteEvent event) {
+            RouteEvent eventForSession = new RouteEvent(null, event.getIface(),
+                    event.getEvent(), event.getExtras());
+            mSessionCb.sendRouteEvent(eventForSession);
+        }
+
+        @Override
+        public void disconnect() {
+            // TODO
+        }
+    };
+
+    private final class SessionStub extends ISession.Stub {
+        @Override
+        public void destroy() {
+            onDestroy();
+        }
+
+        @Override
+        public void sendEvent(String event, Bundle data) {
+            mHandler.post(MessageHandler.MSG_SEND_EVENT, event, data);
+        }
+
+        @Override
+        public ISessionController getController() {
+            return mController;
+        }
+
+        @Override
+        public void publish() {
+            mIsPublished = true; // TODO push update to service
+        }
+        @Override
+        public void setTransportPerformerEnabled() {
+            mTransportPerformerEnabled = true;
+        }
+
+        @Override
+        public void setMetadata(MediaMetadata metadata) {
+            mMetadata = metadata;
+            mHandler.post(MessageHandler.MSG_UPDATE_METADATA);
+        }
+
+        @Override
+        public void setPlaybackState(PlaybackState state) {
+            mPlaybackState = state;
+            mHandler.post(MessageHandler.MSG_UPDATE_PLAYBACK_STATE);
+        }
+
+        @Override
+        public void setRatingType(int type) {
+            mRatingType = type;
+        }
+
+        @Override
+        public void sendRouteCommand(RouteCommand command, ResultReceiver cb) {
+            mHandler.post(MessageHandler.MSG_SEND_COMMAND,
+                    new Pair<RouteCommand, ResultReceiver>(command, cb));
+        }
+
+        @Override
+        public boolean setRoute(RouteInfo route) throws RemoteException {
+            // TODO decide if allowed to set route and if the route exists
+            return false;
+        }
+
+        @Override
+        public void connectToRoute(RouteInfo route, RouteOptions request)
+                throws RemoteException {
+            if (mRoute == null || !TextUtils.equals(route.getId(), mRoute.getId())) {
+                throw new RemoteException("RouteInfo does not match current route");
+            }
+            mService.connectToRoute(MediaSessionRecord.this, route, request);
+            mRequest = request;
+        }
+
+        @Override
+        public void setRouteOptions(List<RouteOptions> options) throws RemoteException {
+            mRequests.clear();
+            for (int i = options.size() - 1; i >= 0; i--) {
+                RouteRequest request = new RouteRequest(mSessionInfo, options.get(i),
+                        false);
+                mRequests.add(request);
+            }
+        }
+    }
+
+    class SessionCb {
+        private final ISessionCallback mCb;
+
+        public SessionCb(ISessionCallback cb) {
+            mCb = cb;
+        }
+
+        public void sendMediaButton(KeyEvent keyEvent) {
+            Intent mediaButtonIntent = new Intent(Intent.ACTION_MEDIA_BUTTON);
+            mediaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
+            try {
+                mCb.onMediaButton(mediaButtonIntent);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in sendMediaRequest.", e);
+            }
+        }
+
+        public void sendCommand(String command, Bundle extras, ResultReceiver cb) {
+            try {
+                mCb.onCommand(command, extras, cb);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in sendCommand.", e);
+            }
+        }
+
+        public void sendRouteChange(RouteInfo route) {
+            try {
+                mCb.onRequestRouteChange(route);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in sendRouteChange.", e);
+            }
+        }
+
+        public void sendRouteStateChange(int state) {
+            try {
+                mCb.onRouteStateChange(state);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in sendRouteStateChange.", e);
+            }
+        }
+
+        public void sendRouteEvent(RouteEvent event) {
+            try {
+                mCb.onRouteEvent(event);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in sendRouteEvent.", e);
+            }
+        }
+
+        public void sendRouteConnected() {
+            try {
+                mCb.onRouteConnected(mRoute, mRequest);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in sendRouteStateChange.", e);
+            }
+        }
+
+        public void play() {
+            try {
+                mCb.onPlay();
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in play.", e);
+            }
+        }
+
+        public void pause() {
+            try {
+                mCb.onPause();
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in pause.", e);
+            }
+        }
+
+        public void stop() {
+            try {
+                mCb.onStop();
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in stop.", e);
+            }
+        }
+
+        public void next() {
+            try {
+                mCb.onNext();
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in next.", e);
+            }
+        }
+
+        public void previous() {
+            try {
+                mCb.onPrevious();
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in previous.", e);
+            }
+        }
+
+        public void fastForward() {
+            try {
+                mCb.onFastForward();
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in fastForward.", e);
+            }
+        }
+
+        public void rewind() {
+            try {
+                mCb.onRewind();
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in rewind.", e);
+            }
+        }
+
+        public void seekTo(long pos) {
+            try {
+                mCb.onSeekTo(pos);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in seekTo.", e);
+            }
+        }
+
+        public void rate(Rating rating) {
+            try {
+                mCb.onRate(rating);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Remote failure in rate.", e);
+            }
+        }
+    }
+
+    class ControllerStub extends ISessionController.Stub {
+        @Override
+        public void sendCommand(String command, Bundle extras, ResultReceiver cb)
+                throws RemoteException {
+            mSessionCb.sendCommand(command, extras, cb);
+        }
+
+        @Override
+        public void sendMediaButton(KeyEvent mediaButtonIntent) {
+            mSessionCb.sendMediaButton(mediaButtonIntent);
+        }
+
+        @Override
+        public void registerCallbackListener(ISessionControllerCallback cb) {
+            synchronized (mLock) {
+                if (!mControllerCallbacks.contains(cb)) {
+                    mControllerCallbacks.add(cb);
+                }
+            }
+        }
+
+        @Override
+        public void unregisterCallbackListener(ISessionControllerCallback cb)
+                throws RemoteException {
+            synchronized (mLock) {
+                mControllerCallbacks.remove(cb);
+            }
+        }
+
+        @Override
+        public void play() throws RemoteException {
+            mSessionCb.play();
+        }
+
+        @Override
+        public void pause() throws RemoteException {
+            mSessionCb.pause();
+        }
+
+        @Override
+        public void stop() throws RemoteException {
+            mSessionCb.stop();
+        }
+
+        @Override
+        public void next() throws RemoteException {
+            mSessionCb.next();
+        }
+
+        @Override
+        public void previous() throws RemoteException {
+            mSessionCb.previous();
+        }
+
+        @Override
+        public void fastForward() throws RemoteException {
+            mSessionCb.fastForward();
+        }
+
+        @Override
+        public void rewind() throws RemoteException {
+            mSessionCb.rewind();
+        }
+
+        @Override
+        public void seekTo(long pos) throws RemoteException {
+            mSessionCb.seekTo(pos);
+        }
+
+        @Override
+        public void rate(Rating rating) throws RemoteException {
+            mSessionCb.rate(rating);
+        }
+
+
+        @Override
+        public MediaMetadata getMetadata() {
+            return mMetadata;
+        }
+
+        @Override
+        public PlaybackState getPlaybackState() {
+            return getStateWithUpdatedPosition();
+        }
+
+        @Override
+        public int getRatingType() {
+            return mRatingType;
+        }
+
+        @Override
+        public boolean isTransportControlEnabled() {
+            return mTransportPerformerEnabled;
+        }
+
+        @Override
+        public void showRoutePicker() {
+            mService.showRoutePickerForSession(MediaSessionRecord.this);
+        }
+    }
+
+    private class MessageHandler extends Handler {
+        private static final int MSG_UPDATE_METADATA = 1;
+        private static final int MSG_UPDATE_PLAYBACK_STATE = 2;
+        private static final int MSG_UPDATE_ROUTE = 3;
+        private static final int MSG_SEND_EVENT = 4;
+        private static final int MSG_UPDATE_ROUTE_FILTERS = 5;
+        private static final int MSG_SEND_COMMAND = 6;
+
+        public MessageHandler(Looper looper) {
+            super(looper);
+        }
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_UPDATE_METADATA:
+                    pushMetadataUpdate();
+                    break;
+                case MSG_UPDATE_PLAYBACK_STATE:
+                    pushPlaybackStateUpdate();
+                    break;
+                case MSG_UPDATE_ROUTE:
+                    pushRouteUpdate();
+                    break;
+                case MSG_SEND_EVENT:
+                    pushEvent((String) msg.obj, msg.getData());
+                    break;
+                case MSG_SEND_COMMAND:
+                    Pair<RouteCommand, ResultReceiver> cmd =
+                            (Pair<RouteCommand, ResultReceiver>) msg.obj;
+                    pushRouteCommand(cmd.first, cmd.second);
+                    break;
+            }
+        }
+
+        public void post(int what) {
+            post(what, null);
+        }
+
+        public void post(int what, Object obj) {
+            obtainMessage(what, obj).sendToTarget();
+        }
+
+        public void post(int what, Object obj, Bundle data) {
+            Message msg = obtainMessage(what, obj);
+            msg.setData(data);
+            msg.sendToTarget();
+        }
+    }
+
+}
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
new file mode 100644
index 0000000..107f6ad
--- /dev/null
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -0,0 +1,306 @@
+/*
+ * Copyright (C) 2014 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.android.server.media;
+
+import android.Manifest;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.media.routeprovider.RouteRequest;
+import android.media.session.ISession;
+import android.media.session.ISessionCallback;
+import android.media.session.ISessionManager;
+import android.media.session.RouteInfo;
+import android.media.session.RouteOptions;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.RemoteException;
+import android.text.TextUtils;
+import android.util.Log;
+
+import com.android.server.SystemService;
+import com.android.server.Watchdog;
+import com.android.server.Watchdog.Monitor;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+
+/**
+ * System implementation of MediaSessionManager
+ */
+public class MediaSessionService extends SystemService implements Monitor {
+    private static final String TAG = "MediaSessionService";
+    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+
+    private final SessionManagerImpl mSessionManagerImpl;
+    private final MediaRouteProviderWatcher mRouteProviderWatcher;
+
+    private final ArrayList<MediaSessionRecord> mSessions
+            = new ArrayList<MediaSessionRecord>();
+    private final ArrayList<MediaRouteProviderProxy> mProviders
+            = new ArrayList<MediaRouteProviderProxy>();
+    private final Object mLock = new Object();
+    // TODO do we want a separate thread for handling mediasession messages?
+    private final Handler mHandler = new Handler();
+
+    // Used to keep track of the current request to show routes for a specific
+    // session so we drop late callbacks properly.
+    private int mShowRoutesRequestId = 0;
+
+    // TODO refactor to have per user state. See MediaRouterService for an
+    // example
+
+    public MediaSessionService(Context context) {
+        super(context);
+        mSessionManagerImpl = new SessionManagerImpl();
+        mRouteProviderWatcher = new MediaRouteProviderWatcher(context, mProviderWatcherCallback,
+                mHandler, context.getUserId());
+    }
+
+    @Override
+    public void onStart() {
+        publishBinderService(Context.MEDIA_SESSION_SERVICE, mSessionManagerImpl);
+        mRouteProviderWatcher.start();
+        Watchdog.getInstance().addMonitor(this);
+    }
+
+    /**
+     * Should trigger showing the Media route picker dialog. Right now it just
+     * kicks off a query to all the providers to get routes.
+     *
+     * @param record The session to show the picker for.
+     */
+    public void showRoutePickerForSession(MediaSessionRecord record) {
+        // TODO for now just toggle the route to test (we will only have one
+        // match for now)
+        if (record.getRoute() != null) {
+            // For now send null to mean the local route
+            record.selectRoute(null);
+            return;
+        }
+        mShowRoutesRequestId++;
+        ArrayList<MediaRouteProviderProxy> providers = mRouteProviderWatcher.getProviders();
+        for (int i = providers.size() - 1; i >= 0; i--) {
+            MediaRouteProviderProxy provider = providers.get(i);
+            provider.getRoutes(record, mShowRoutesRequestId);
+        }
+    }
+
+    /**
+     * Connect a session to the given route.
+     *
+     * @param session The session to connect.
+     * @param route The route to connect to.
+     * @param options The options to use for the connection.
+     */
+    public void connectToRoute(MediaSessionRecord session, RouteInfo route,
+            RouteOptions options) {
+        synchronized (mLock) {
+            MediaRouteProviderProxy proxy = getProviderLocked(route.getProvider());
+            if (proxy == null) {
+                Log.w(TAG, "Provider for route " + route.getName() + " does not exist.");
+                return;
+            }
+            RouteRequest request = new RouteRequest(session.getSessionInfo(), options, true);
+            // TODO make connect an async call to a ThreadPoolExecutor
+            proxy.connectToRoute(session, route, request);
+        }
+    }
+
+    @Override
+    public void monitor() {
+        synchronized (mLock) {
+            // Check for deadlock
+        }
+    }
+
+    void sessionDied(MediaSessionRecord session) {
+        synchronized (mLock) {
+            destroySessionLocked(session);
+        }
+    }
+
+    void destroySession(MediaSessionRecord session) {
+        synchronized (mLock) {
+            destroySessionLocked(session);
+        }
+    }
+
+    private void destroySessionLocked(MediaSessionRecord session) {
+        mSessions.remove(session);
+    }
+
+    private void enforcePackageName(String packageName, int uid) {
+        if (TextUtils.isEmpty(packageName)) {
+            throw new IllegalArgumentException("packageName may not be empty");
+        }
+        String[] packages = getContext().getPackageManager().getPackagesForUid(uid);
+        final int packageCount = packages.length;
+        for (int i = 0; i < packageCount; i++) {
+            if (packageName.equals(packages[i])) {
+                return;
+            }
+        }
+        throw new IllegalArgumentException("packageName is not owned by the calling process");
+    }
+
+    private MediaSessionRecord createSessionInternal(int pid, String packageName,
+            ISessionCallback cb, String tag) {
+        synchronized (mLock) {
+            return createSessionLocked(pid, packageName, cb, tag);
+        }
+    }
+
+    private MediaSessionRecord createSessionLocked(int pid, String packageName,
+            ISessionCallback cb, String tag) {
+        final MediaSessionRecord session = new MediaSessionRecord(pid, packageName, cb, tag, this,
+                mHandler);
+        try {
+            cb.asBinder().linkToDeath(session, 0);
+        } catch (RemoteException e) {
+            throw new RuntimeException("Media Session owner died prematurely.", e);
+        }
+        mSessions.add(session);
+        if (DEBUG) {
+            Log.d(TAG, "Created session for package " + packageName + " with tag " + tag);
+        }
+        return session;
+    }
+
+    private MediaRouteProviderProxy getProviderLocked(String providerId) {
+        for (int i = mProviders.size() - 1; i >= 0; i--) {
+            MediaRouteProviderProxy provider = mProviders.get(i);
+            if (TextUtils.equals(providerId, provider.getId())) {
+                return provider;
+            }
+        }
+        return null;
+    }
+
+    private int findIndexOfSessionForIdLocked(String sessionId) {
+        for (int i = mSessions.size() - 1; i >= 0; i--) {
+            MediaSessionRecord session = mSessions.get(i);
+            if (TextUtils.equals(session.getSessionInfo().getId(), sessionId)) {
+                return i;
+            }
+        }
+        return -1;
+    }
+
+    private MediaRouteProviderWatcher.Callback mProviderWatcherCallback
+            = new MediaRouteProviderWatcher.Callback() {
+        @Override
+        public void removeProvider(MediaRouteProviderProxy provider) {
+            synchronized (mLock) {
+                mProviders.remove(provider);
+                provider.setRoutesListener(null);
+                provider.setInterested(false);
+            }
+        }
+
+        @Override
+        public void addProvider(MediaRouteProviderProxy provider) {
+            synchronized (mLock) {
+                mProviders.add(provider);
+                provider.setRoutesListener(mRoutesCallback);
+                provider.setInterested(true);
+            }
+        }
+    };
+
+    private MediaRouteProviderProxy.RoutesListener mRoutesCallback
+            = new MediaRouteProviderProxy.RoutesListener() {
+        @Override
+        public void onRoutesUpdated(String sessionId, ArrayList<RouteInfo> routes,
+                int reqId) {
+            // TODO for now select the first route to test, eventually add the
+            // new routes to the dialog if it is still open
+            synchronized (mLock) {
+                int index = findIndexOfSessionForIdLocked(sessionId);
+                if (index != -1 && routes != null && routes.size() > 0) {
+                    MediaSessionRecord record = mSessions.get(index);
+                    record.selectRoute(routes.get(0));
+                }
+            }
+        }
+
+        @Override
+        public void onRouteConnected(String sessionId, RouteInfo route,
+                RouteRequest options, RouteConnectionRecord connection) {
+            synchronized (mLock) {
+                int index = findIndexOfSessionForIdLocked(sessionId);
+                if (index != -1) {
+                    MediaSessionRecord session = mSessions.get(index);
+                    session.setRouteConnected(route, options.getConnectionOptions(), connection);
+                }
+            }
+        }
+    };
+
+    class SessionManagerImpl extends ISessionManager.Stub {
+        // TODO add createSessionAsUser, pass user-id to
+        // ActivityManagerNative.handleIncomingUser and stash result for use
+        // when starting services on that session's behalf.
+        @Override
+        public ISession createSession(String packageName, ISessionCallback cb, String tag)
+                throws RemoteException {
+            final int pid = Binder.getCallingPid();
+            final int uid = Binder.getCallingUid();
+            final long token = Binder.clearCallingIdentity();
+            try {
+                enforcePackageName(packageName, uid);
+                if (cb == null) {
+                    throw new IllegalArgumentException("Controller callback cannot be null");
+                }
+                return createSessionInternal(pid, packageName, cb, tag).getSessionBinder();
+            } finally {
+                Binder.restoreCallingIdentity(token);
+            }
+        }
+
+        @Override
+        public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
+            if (getContext().checkCallingOrSelfPermission(Manifest.permission.DUMP)
+                    != PackageManager.PERMISSION_GRANTED) {
+                pw.println("Permission Denial: can't dump MediaSessionService from from pid="
+                        + Binder.getCallingPid()
+                        + ", uid=" + Binder.getCallingUid());
+                return;
+            }
+
+            pw.println("MEDIA SESSION SERVICE (dumpsys media_session)");
+            pw.println();
+
+            synchronized (mLock) {
+                int count = mSessions.size();
+                pw.println("Sessions - have " + count + " states:");
+                for (int i = 0; i < count; i++) {
+                    MediaSessionRecord record = mSessions.get(i);
+                    pw.println();
+                    record.dump(pw, "");
+                }
+                pw.println("Providers:");
+                count = mProviders.size();
+                for (int i = 0; i < count; i++) {
+                    MediaRouteProviderProxy provider = mProviders.get(i);
+                    provider.dump(pw, "");
+                }
+            }
+        }
+    }
+
+}
diff --git a/services/core/java/com/android/server/media/RouteConnectionRecord.java b/services/core/java/com/android/server/media/RouteConnectionRecord.java
new file mode 100644
index 0000000..90ddf29
--- /dev/null
+++ b/services/core/java/com/android/server/media/RouteConnectionRecord.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2014 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.android.server.media;
+
+import android.media.routeprovider.IRouteConnection;
+import android.media.session.RouteCommand;
+import android.media.session.RouteEvent;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.ResultReceiver;
+import android.util.Log;
+
+/**
+ * A connection between a Session and a Route.
+ */
+public class RouteConnectionRecord {
+    private static final String TAG = "RouteConnRecord";
+    private final IRouteConnection mBinder;
+    private final String mPackageName;
+    private final int mUid;
+    private Listener mListener;
+
+    public RouteConnectionRecord(IRouteConnection binder, String packageName, int uid) {
+        mBinder = binder;
+        mPackageName = packageName;
+        mUid = uid;
+    }
+
+    /**
+     * Add a listener to get route events on.
+     *
+     * @param listener The listener to get events on.
+     */
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+
+    /**
+     * Check if this connection matches the token given.
+     *
+     * @param binder The token to check
+     * @return True if this is the connection you're looking for, false
+     *         otherwise.
+     */
+    public boolean isConnection(IBinder binder) {
+        return binder != null && binder.equals(mBinder.asBinder());
+    }
+
+    /**
+     * Send an event from this connection.
+     *
+     * @param event The event to send.
+     */
+    public void sendEvent(RouteEvent event) {
+        if (mListener != null) {
+            mListener.onEvent(event);
+        }
+    }
+
+    /**
+     * Send a command to this connection.
+     *
+     * @param command The command to send.
+     * @param cb The receiver to get a result on.
+     */
+    public void sendCommand(RouteCommand command, ResultReceiver cb) {
+        try {
+            mBinder.onCommand(command, cb);
+        } catch (RemoteException e) {
+            Log.e(TAG, "Error in sendCommand", e);
+        }
+    }
+
+    /**
+     * Tell the session that the provider has disconnected it.
+     */
+    public void disconnect() {
+        if (mListener != null) {
+            mListener.disconnect();
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "RouteConnection { binder=" + mBinder.toString() + ", package=" + mPackageName
+                + ", uid=" + mUid + "}";
+    }
+
+    /**
+     * Listener to receive updates from the provider for this connection.
+     */
+    public static interface Listener {
+        /**
+         * Called when an event is sent on this connection.
+         *
+         * @param event The event that was sent.
+         */
+        public void onEvent(RouteEvent event);
+
+        /**
+         * Called when the provider has disconnected the route.
+         */
+        public void disconnect();
+    }
+}
\ No newline at end of file
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 855ae23..416a6b1 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -410,7 +410,7 @@
         }
 
         @Override
-        public void onImportanceChanged(int pid, int uid, int importance) {
+        public void onProcessStateChanged(int pid, int uid, int procState) {
         }
 
         @Override
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 5d6adc2..271e9e9 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -464,21 +464,21 @@
             private NetworkStatsCollection mUidTagComplete;
 
             private NetworkStatsCollection getUidComplete() {
-                if (mUidComplete == null) {
-                    synchronized (mStatsLock) {
+                synchronized (mStatsLock) {
+                    if (mUidComplete == null) {
                         mUidComplete = mUidRecorder.getOrLoadCompleteLocked();
                     }
+                    return mUidComplete;
                 }
-                return mUidComplete;
             }
 
             private NetworkStatsCollection getUidTagComplete() {
-                if (mUidTagComplete == null) {
-                    synchronized (mStatsLock) {
+                synchronized (mStatsLock) {
+                    if (mUidTagComplete == null) {
                         mUidTagComplete = mUidTagRecorder.getOrLoadCompleteLocked();
                     }
+                    return mUidTagComplete;
                 }
-                return mUidTagComplete;
             }
 
             @Override
diff --git a/services/core/java/com/android/server/notification/ConditionProviders.java b/services/core/java/com/android/server/notification/ConditionProviders.java
new file mode 100644
index 0000000..d074565
--- /dev/null
+++ b/services/core/java/com/android/server/notification/ConditionProviders.java
@@ -0,0 +1,475 @@
+/**
+ * Copyright (c) 2014, 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.android.server.notification;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.RemoteException;
+import android.provider.Settings;
+import android.provider.Settings.Global;
+import android.service.notification.Condition;
+import android.service.notification.ConditionProviderService;
+import android.service.notification.IConditionListener;
+import android.service.notification.IConditionProvider;
+import android.service.notification.ZenModeConfig;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.Slog;
+
+import com.android.internal.R;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class ConditionProviders extends ManagedServices {
+    private static final Condition[] NO_CONDITIONS = new Condition[0];
+
+    private final ZenModeHelper mZenModeHelper;
+    private final ArrayMap<IBinder, IConditionListener> mListeners
+            = new ArrayMap<IBinder, IConditionListener>();
+    private final ArrayList<ConditionRecord> mRecords = new ArrayList<ConditionRecord>();
+
+    public ConditionProviders(Context context, Handler handler,
+            UserProfiles userProfiles, ZenModeHelper zenModeHelper) {
+        super(context, handler, new Object(), userProfiles);
+        mZenModeHelper = zenModeHelper;
+        mZenModeHelper.addCallback(new ZenModeHelperCallback());
+        loadZenConfig();
+    }
+
+    @Override
+    protected Config getConfig() {
+        Config c = new Config();
+        c.caption = "condition provider";
+        c.serviceInterface = ConditionProviderService.SERVICE_INTERFACE;
+        c.secureSettingName = Settings.Secure.ENABLED_CONDITION_PROVIDERS;
+        c.bindPermission = android.Manifest.permission.BIND_CONDITION_PROVIDER_SERVICE;
+        c.settingsAction = Settings.ACTION_CONDITION_PROVIDER_SETTINGS;
+        c.clientLabel = R.string.condition_provider_service_binding_label;
+        return c;
+    }
+
+    @Override
+    public void dump(PrintWriter pw) {
+        super.dump(pw);
+        synchronized(mMutex) {
+            pw.print("    mListeners("); pw.print(mListeners.size()); pw.println("):");
+            for (int i = 0; i < mListeners.size(); i++) {
+                pw.print("      "); pw.println(mListeners.keyAt(i));
+            }
+            pw.print("    mRecords("); pw.print(mRecords.size()); pw.println("):");
+            for (int i = 0; i < mRecords.size(); i++) {
+                pw.print("      "); pw.println(mRecords.get(i));
+            }
+        }
+    }
+
+    @Override
+    protected IInterface asInterface(IBinder binder) {
+        return IConditionProvider.Stub.asInterface(binder);
+    }
+
+    @Override
+    protected void onServiceAdded(ManagedServiceInfo info) {
+        Slog.d(TAG, "onServiceAdded " + info);
+        final IConditionProvider provider = provider(info);
+        try {
+            provider.onConnected();
+        } catch (RemoteException e) {
+            // we tried
+        }
+        synchronized (mMutex) {
+            final int N = mRecords.size();
+            for(int i = 0; i < N; i++) {
+                final ConditionRecord r = mRecords.get(i);
+                if (!r.component.equals(info.component)) continue;
+                r.info = info;
+                // if automatic, auto-subscribe
+                if (r.isAutomatic) {
+                    try {
+                        final Uri id = r.id;
+                        if (DEBUG) Slog.d(TAG, "Auto-subscribing to configured condition " + id);
+                        provider.onSubscribe(id);
+                    } catch (RemoteException e) {
+                        // we tried
+                    }
+                }
+            }
+        }
+    }
+
+    @Override
+    protected void onServiceRemovedLocked(ManagedServiceInfo removed) {
+        if (removed == null) return;
+        for (int i = mRecords.size() - 1; i >= 0; i--) {
+            final ConditionRecord r = mRecords.get(i);
+            if (!r.component.equals(removed.component)) continue;
+            if (r.isManual) {
+                // removing the current manual condition, exit zen
+                mZenModeHelper.setZenMode(Global.ZEN_MODE_OFF);
+            }
+            if (r.isAutomatic) {
+                // removing an automatic condition, exit zen
+                mZenModeHelper.setZenMode(Global.ZEN_MODE_OFF);
+            }
+            mRecords.remove(i);
+        }
+    }
+
+    public ManagedServiceInfo checkServiceToken(IConditionProvider provider) {
+        synchronized(mMutex) {
+            return checkServiceTokenLocked(provider);
+        }
+    }
+
+    public void requestZenModeConditions(IConditionListener callback, int relevance) {
+        synchronized(mMutex) {
+            if (DEBUG) Slog.d(TAG, "requestZenModeConditions callback=" + callback
+                    + " relevance=" + Condition.relevanceToString(relevance));
+            if (callback == null) return;
+            relevance = relevance & (Condition.FLAG_RELEVANT_NOW | Condition.FLAG_RELEVANT_ALWAYS);
+            if (relevance != 0) {
+                mListeners.put(callback.asBinder(), callback);
+                requestConditionsLocked(relevance);
+            } else {
+                mListeners.remove(callback.asBinder());
+                if (mListeners.isEmpty()) {
+                    requestConditionsLocked(0);
+                }
+            }
+        }
+    }
+
+    private Condition[] validateConditions(String pkg, Condition[] conditions) {
+        if (conditions == null || conditions.length == 0) return null;
+        final int N = conditions.length;
+        final ArrayMap<Uri, Condition> valid = new ArrayMap<Uri, Condition>(N);
+        for (int i = 0; i < N; i++) {
+            final Uri id = conditions[i].id;
+            if (!Condition.isValidId(id, pkg)) {
+                Slog.w(TAG, "Ignoring condition from " + pkg + " for invalid id: " + id);
+                continue;
+            }
+            if (valid.containsKey(id)) {
+                Slog.w(TAG, "Ignoring condition from " + pkg + " for duplicate id: " + id);
+                continue;
+            }
+            valid.put(id, conditions[i]);
+        }
+        if (valid.size() == 0) return null;
+        if (valid.size() == N) return conditions;
+        final Condition[] rt = new Condition[valid.size()];
+        for (int i = 0; i < rt.length; i++) {
+            rt[i] = valid.valueAt(i);
+        }
+        return rt;
+    }
+
+    private ConditionRecord getRecordLocked(Uri id, ComponentName component) {
+        final int N = mRecords.size();
+        for (int i = 0; i < N; i++) {
+            final ConditionRecord r = mRecords.get(i);
+            if (r.id.equals(id) && r.component.equals(component)) {
+                return r;
+            }
+        }
+        final ConditionRecord r = new ConditionRecord(id, component);
+        mRecords.add(r);
+        return r;
+    }
+
+    public void notifyConditions(String pkg, ManagedServiceInfo info, Condition[] conditions) {
+        synchronized(mMutex) {
+            if (DEBUG) Slog.d(TAG, "notifyConditions pkg=" + pkg + " info=" + info + " conditions="
+                    + (conditions == null ? null : Arrays.asList(conditions)));
+            conditions = validateConditions(pkg, conditions);
+            if (conditions == null || conditions.length == 0) return;
+            final int N = conditions.length;
+            for (IConditionListener listener : mListeners.values()) {
+                try {
+                    listener.onConditionsReceived(conditions);
+                } catch (RemoteException e) {
+                    Slog.w(TAG, "Error sending conditions to listener " + listener, e);
+                }
+            }
+            for (int i = 0; i < N; i++) {
+                final Condition c = conditions[i];
+                final ConditionRecord r = getRecordLocked(c.id, info.component);
+                r.info = info;
+                r.condition = c;
+                // if manual, exit zen if false (or failed)
+                if (r.isManual) {
+                    if (c.state == Condition.STATE_FALSE || c.state == Condition.STATE_ERROR) {
+                        final boolean failed = c.state == Condition.STATE_ERROR;
+                        if (failed) {
+                            Slog.w(TAG, "Exit zen: manual condition failed: " + c);
+                        } else if (DEBUG) {
+                            Slog.d(TAG, "Exit zen: manual condition false: " + c);
+                        }
+                        mZenModeHelper.setZenMode(Settings.Global.ZEN_MODE_OFF);
+                        unsubscribeLocked(r);
+                        r.isManual = false;
+                    }
+                }
+                // if automatic, exit zen if false (or failed), enter zen if true
+                if (r.isAutomatic) {
+                    if (c.state == Condition.STATE_FALSE || c.state == Condition.STATE_ERROR) {
+                        final boolean failed = c.state == Condition.STATE_ERROR;
+                        if (failed) {
+                            Slog.w(TAG, "Exit zen: automatic condition failed: " + c);
+                        } else if (DEBUG) {
+                            Slog.d(TAG, "Exit zen: automatic condition false: " + c);
+                        }
+                        mZenModeHelper.setZenMode(Settings.Global.ZEN_MODE_OFF);
+                    } else if (c.state == Condition.STATE_TRUE) {
+                        Slog.d(TAG, "Enter zen: automatic condition true: " + c);
+                        mZenModeHelper.setZenMode(Settings.Global.ZEN_MODE_ON);
+                    }
+                }
+            }
+        }
+    }
+
+    public void setZenModeCondition(Uri conditionId) {
+        if (DEBUG) Slog.d(TAG, "setZenModeCondition " + conditionId);
+        synchronized(mMutex) {
+            final int N = mRecords.size();
+            for (int i = 0; i < N; i++) {
+                final ConditionRecord r = mRecords.get(i);
+                final boolean idEqual = r.id.equals(conditionId);
+                if (r.isManual && !idEqual) {
+                    // was previous manual condition, unsubscribe
+                    unsubscribeLocked(r);
+                    r.isManual = false;
+                } else if (idEqual && !r.isManual) {
+                    // is new manual condition, subscribe
+                    subscribeLocked(r);
+                    r.isManual = true;
+                }
+            }
+        }
+    }
+
+    private void subscribeLocked(ConditionRecord r) {
+        if (DEBUG) Slog.d(TAG, "subscribeLocked " + r);
+        final IConditionProvider provider = provider(r);
+        if (provider == null) {
+            Slog.w(TAG, "subscribeLocked: no provider");
+            return;
+        }
+        try {
+            provider.onSubscribe(r.id);
+        } catch (RemoteException e) {
+            Slog.w(TAG, "Error subscribing to " + r, e);
+        }
+    }
+
+    private static <T> ArraySet<T> safeSet(T... items) {
+        final ArraySet<T> rt = new ArraySet<T>();
+        if (items == null || items.length == 0) return rt;
+        final int N = items.length;
+        for (int i = 0; i < N; i++) {
+            final T item = items[i];
+            if (item != null) {
+                rt.add(item);
+            }
+        }
+        return rt;
+    }
+
+    public void setAutomaticZenModeConditions(Uri[] conditionIds) {
+        setAutomaticZenModeConditions(conditionIds, true /*save*/);
+    }
+
+    private void setAutomaticZenModeConditions(Uri[] conditionIds, boolean save) {
+        if (DEBUG) Slog.d(TAG, "setAutomaticZenModeConditions "
+                + (conditionIds == null ? null : Arrays.asList(conditionIds)));
+        synchronized(mMutex) {
+            final ArraySet<Uri> newIds = safeSet(conditionIds);
+            final int N = mRecords.size();
+            boolean changed = false;
+            for (int i = 0; i < N; i++) {
+                final ConditionRecord r = mRecords.get(i);
+                final boolean automatic = newIds.contains(r.id);
+                if (!r.isAutomatic && automatic) {
+                    // subscribe to new automatic
+                    subscribeLocked(r);
+                    r.isAutomatic = true;
+                    changed = true;
+                } else if (r.isAutomatic && !automatic) {
+                    // unsubscribe from old automatic
+                    unsubscribeLocked(r);
+                    r.isAutomatic = false;
+                    changed = true;
+                }
+            }
+            if (save && changed) {
+                saveZenConfigLocked();
+            }
+        }
+    }
+
+    public Condition[] getAutomaticZenModeConditions() {
+        synchronized(mMutex) {
+            final int N = mRecords.size();
+            ArrayList<Condition> rt = null;
+            for (int i = 0; i < N; i++) {
+                final ConditionRecord r = mRecords.get(i);
+                if (r.isAutomatic && r.condition != null) {
+                    if (rt == null) rt = new ArrayList<Condition>();
+                    rt.add(r.condition);
+                }
+            }
+            return rt == null ? NO_CONDITIONS : rt.toArray(new Condition[rt.size()]);
+        }
+    }
+
+    private void unsubscribeLocked(ConditionRecord r) {
+        if (DEBUG) Slog.d(TAG, "unsubscribeLocked " + r);
+        final IConditionProvider provider = provider(r);
+        if (provider == null) {
+            Slog.w(TAG, "unsubscribeLocked: no provider");
+            return;
+        }
+        try {
+            provider.onUnsubscribe(r.id);
+        } catch (RemoteException e) {
+            Slog.w(TAG, "Error unsubscribing to " + r, e);
+        }
+    }
+
+    private static IConditionProvider provider(ConditionRecord r) {
+        return r == null ? null : provider(r.info);
+    }
+
+    private static IConditionProvider provider(ManagedServiceInfo info) {
+        return info == null ? null : (IConditionProvider) info.service;
+    }
+
+    private void requestConditionsLocked(int flags) {
+        for (ManagedServiceInfo info : mServices) {
+            final IConditionProvider provider = provider(info);
+            if (provider == null) continue;
+            try {
+                provider.onRequestConditions(flags);
+            } catch (RemoteException e) {
+                Slog.w(TAG, "Error requesting conditions from " + info.component, e);
+            }
+        }
+    }
+
+    private void loadZenConfig() {
+        final ZenModeConfig config = mZenModeHelper.getConfig();
+        if (config == null) {
+            if (DEBUG) Slog.d(TAG, "loadZenConfig: no config");
+            return;
+        }
+        synchronized (mMutex) {
+            if (config.conditionComponents == null || config.conditionIds == null
+                    || config.conditionComponents.length != config.conditionIds.length) {
+                if (DEBUG) Slog.d(TAG, "loadZenConfig: no conditions");
+                setAutomaticZenModeConditions(null, false /*save*/);
+                return;
+            }
+            final ArraySet<Uri> newIds = new ArraySet<Uri>();
+            final int N = config.conditionComponents.length;
+            for (int i = 0; i < N; i++) {
+                final ComponentName component = config.conditionComponents[i];
+                final Uri id = config.conditionIds[i];
+                if (component != null && id != null) {
+                    getRecordLocked(id, component);  // ensure record exists
+                    newIds.add(id);
+                }
+            }
+            if (DEBUG) Slog.d(TAG, "loadZenConfig: N=" + N);
+            setAutomaticZenModeConditions(newIds.toArray(new Uri[newIds.size()]), false /*save*/);
+        }
+    }
+
+    private void saveZenConfigLocked() {
+        ZenModeConfig config = mZenModeHelper.getConfig();
+        if (config == null) return;
+        config = config.copy();
+        final ArrayList<ConditionRecord> automatic = new ArrayList<ConditionRecord>();
+        final int automaticN = mRecords.size();
+        for (int i = 0; i < automaticN; i++) {
+            final ConditionRecord r = mRecords.get(i);
+            if (r.isAutomatic) {
+                automatic.add(r);
+            }
+        }
+        if (automatic.isEmpty()) {
+            config.conditionComponents = null;
+            config.conditionIds = null;
+        } else {
+            final int N = automatic.size();
+            config.conditionComponents = new ComponentName[N];
+            config.conditionIds = new Uri[N];
+            for (int i = 0; i < N; i++) {
+                final ConditionRecord r = automatic.get(i);
+                config.conditionComponents[i] = r.component;
+                config.conditionIds[i] = r.id;
+            }
+        }
+        if (DEBUG) Slog.d(TAG, "Setting zen config to: " + config);
+        mZenModeHelper.setConfig(config);
+    }
+
+    private class ZenModeHelperCallback extends ZenModeHelper.Callback {
+        @Override
+        void onConfigChanged() {
+            loadZenConfig();
+        }
+
+        @Override
+        void onZenModeChanged() {
+            final int mode = mZenModeHelper.getZenMode();
+            if (mode == Global.ZEN_MODE_OFF) {
+                // ensure any manual condition is cleared
+                setZenModeCondition(null);
+            }
+        }
+    }
+
+    private static class ConditionRecord {
+        public final Uri id;
+        public final ComponentName component;
+        public Condition condition;
+        public ManagedServiceInfo info;
+        public boolean isAutomatic;
+        public boolean isManual;
+
+        private ConditionRecord(Uri id, ComponentName component) {
+            this.id = id;
+            this.component = component;
+        }
+
+        @Override
+        public String toString() {
+            final StringBuilder sb = new StringBuilder("ConditionRecord[id=")
+                    .append(id).append(",component=").append(component);
+            if (isAutomatic) sb.append(",automatic");
+            if (isManual) sb.append(",manual");
+            return sb.append(']').toString();
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java
new file mode 100644
index 0000000..d34b09c
--- /dev/null
+++ b/services/core/java/com/android/server/notification/ManagedServices.java
@@ -0,0 +1,622 @@
+/**
+ * Copyright (c) 2014, 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.android.server.notification;
+
+import android.app.ActivityManager;
+import android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.content.pm.UserInfo;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.IInterface;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.ArraySet;
+import android.util.Slog;
+import android.util.SparseArray;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Manages the lifecycle of application-provided services bound by system server.
+ *
+ * Services managed by this helper must have:
+ *  - An associated system settings value with a list of enabled component names.
+ *  - A well-known action for services to use in their intent-filter.
+ *  - A system permission for services to require in order to ensure system has exclusive binding.
+ *  - A settings page for user configuration of enabled services, and associated intent action.
+ *  - A remote interface definition (aidl) provided by the service used for communication.
+ */
+abstract public class ManagedServices {
+    protected final String TAG = getClass().getSimpleName();
+    protected static final boolean DEBUG = true;
+
+    private static final String ENABLED_SERVICES_SEPARATOR = ":";
+
+    private final Context mContext;
+    protected final Object mMutex;
+    private final UserProfiles mUserProfiles;
+    private final SettingsObserver mSettingsObserver;
+    private final Config mConfig;
+
+    // contains connections to all connected services, including app services
+    // and system services
+    protected final ArrayList<ManagedServiceInfo> mServices = new ArrayList<ManagedServiceInfo>();
+    // things that will be put into mServices as soon as they're ready
+    private final ArrayList<String> mServicesBinding = new ArrayList<String>();
+    // lists the component names of all enabled (and therefore connected)
+    // app services for current profiles.
+    private ArraySet<ComponentName> mEnabledServicesForCurrentProfiles
+            = new ArraySet<ComponentName>();
+    // Just the packages from mEnabledServicesForCurrentProfiles
+    private ArraySet<String> mEnabledServicesPackageNames = new ArraySet<String>();
+
+    public ManagedServices(Context context, Handler handler, Object mutex,
+            UserProfiles userProfiles) {
+        mContext = context;
+        mMutex = mutex;
+        mUserProfiles = userProfiles;
+        mConfig = getConfig();
+        mSettingsObserver = new SettingsObserver(handler);
+    }
+
+    abstract protected Config getConfig();
+
+    private String getCaption() {
+        return mConfig.caption;
+    }
+
+    abstract protected IInterface asInterface(IBinder binder);
+
+    abstract protected void onServiceAdded(ManagedServiceInfo info);
+
+    protected void onServiceRemovedLocked(ManagedServiceInfo removed) { }
+
+    private ManagedServiceInfo newServiceInfo(IInterface service,
+            ComponentName component, int userid, boolean isSystem, ServiceConnection connection,
+            int targetSdkVersion) {
+        return new ManagedServiceInfo(service, component, userid, isSystem, connection,
+                targetSdkVersion);
+    }
+
+    public void onBootPhaseAppsCanStart() {
+        mSettingsObserver.observe();
+    }
+
+    public void dump(PrintWriter pw) {
+        pw.println("    All " + getCaption() + "s (" + mEnabledServicesForCurrentProfiles.size()
+                + ") enabled for current profiles:");
+        for (ComponentName cmpt : mEnabledServicesForCurrentProfiles) {
+            pw.println("      " + cmpt);
+        }
+
+        pw.println("    Live " + getCaption() + "s (" + mServices.size() + "):");
+        for (ManagedServiceInfo info : mServices) {
+            pw.println("      " + info.component
+                    + " (user " + info.userid + "): " + info.service
+                    + (info.isSystem?" SYSTEM":""));
+        }
+    }
+
+    public void onPackagesChanged(boolean queryReplace, String[] pkgList) {
+        if (DEBUG) Slog.d(TAG, "onPackagesChanged queryReplace=" + queryReplace
+                + " pkgList=" + (pkgList == null ? null : Arrays.asList(pkgList))
+                + " mEnabledServicesPackageNames=" + mEnabledServicesPackageNames);
+        boolean anyServicesInvolved = false;
+        if (pkgList != null && (pkgList.length > 0)) {
+            for (String pkgName : pkgList) {
+                if (mEnabledServicesPackageNames.contains(pkgName)) {
+                    anyServicesInvolved = true;
+                }
+            }
+        }
+
+        if (anyServicesInvolved) {
+            // if we're not replacing a package, clean up orphaned bits
+            if (!queryReplace) {
+                disableNonexistentServices();
+            }
+            // make sure we're still bound to any of our services who may have just upgraded
+            rebindServices();
+        }
+    }
+
+    public ManagedServiceInfo checkServiceTokenLocked(IInterface service) {
+        checkNotNull(service);
+        final IBinder token = service.asBinder();
+        final int N = mServices.size();
+        for (int i=0; i<N; i++) {
+            final ManagedServiceInfo info = mServices.get(i);
+            if (info.service.asBinder() == token) return info;
+        }
+        throw new SecurityException("Disallowed call from unknown " + getCaption() + ": "
+                + service);
+    }
+
+    public void unregisterService(IInterface service, int userid) {
+        checkNotNull(service);
+        // no need to check permissions; if your service binder is in the list,
+        // that's proof that you had permission to add it in the first place
+        unregisterServiceImpl(service, userid);
+    }
+
+    public void registerService(IInterface service, ComponentName component, int userid) {
+        checkNotNull(service);
+        registerServiceImpl(service, component, userid);
+    }
+
+    /**
+     * Remove access for any services that no longer exist.
+     */
+    private void disableNonexistentServices() {
+        int[] userIds = mUserProfiles.getCurrentProfileIds();
+        final int N = userIds.length;
+        for (int i = 0 ; i < N; ++i) {
+            disableNonexistentServices(userIds[i]);
+        }
+    }
+
+    private void disableNonexistentServices(int userId) {
+        String flatIn = Settings.Secure.getStringForUser(
+                mContext.getContentResolver(),
+                mConfig.secureSettingName,
+                userId);
+        if (!TextUtils.isEmpty(flatIn)) {
+            if (DEBUG) Slog.v(TAG, "flat before: " + flatIn);
+            PackageManager pm = mContext.getPackageManager();
+            List<ResolveInfo> installedServices = pm.queryIntentServicesAsUser(
+                    new Intent(mConfig.serviceInterface),
+                    PackageManager.GET_SERVICES | PackageManager.GET_META_DATA,
+                    userId);
+            if (DEBUG) Slog.v(TAG, mConfig.serviceInterface + " services: " + installedServices);
+            Set<ComponentName> installed = new ArraySet<ComponentName>();
+            for (int i = 0, count = installedServices.size(); i < count; i++) {
+                ResolveInfo resolveInfo = installedServices.get(i);
+                ServiceInfo info = resolveInfo.serviceInfo;
+
+                if (!mConfig.bindPermission.equals(info.permission)) {
+                    Slog.w(TAG, "Skipping " + getCaption() + " service "
+                            + info.packageName + "/" + info.name
+                            + ": it does not require the permission "
+                            + mConfig.bindPermission);
+                    continue;
+                }
+                installed.add(new ComponentName(info.packageName, info.name));
+            }
+
+            String flatOut = "";
+            if (!installed.isEmpty()) {
+                String[] enabled = flatIn.split(ENABLED_SERVICES_SEPARATOR);
+                ArrayList<String> remaining = new ArrayList<String>(enabled.length);
+                for (int i = 0; i < enabled.length; i++) {
+                    ComponentName enabledComponent = ComponentName.unflattenFromString(enabled[i]);
+                    if (installed.contains(enabledComponent)) {
+                        remaining.add(enabled[i]);
+                    }
+                }
+                flatOut = TextUtils.join(ENABLED_SERVICES_SEPARATOR, remaining);
+            }
+            if (DEBUG) Slog.v(TAG, "flat after: " + flatOut);
+            if (!flatIn.equals(flatOut)) {
+                Settings.Secure.putStringForUser(mContext.getContentResolver(),
+                        mConfig.secureSettingName,
+                        flatOut, userId);
+            }
+        }
+    }
+
+    /**
+     * Called whenever packages change, the user switches, or the secure setting
+     * is altered. (For example in response to USER_SWITCHED in our broadcast receiver)
+     */
+    private void rebindServices() {
+        if (DEBUG) Slog.d(TAG, "rebindServices");
+        final int[] userIds = mUserProfiles.getCurrentProfileIds();
+        final int nUserIds = userIds.length;
+
+        final SparseArray<String> flat = new SparseArray<String>();
+
+        for (int i = 0; i < nUserIds; ++i) {
+            flat.put(userIds[i], Settings.Secure.getStringForUser(
+                    mContext.getContentResolver(),
+                    mConfig.secureSettingName,
+                    userIds[i]));
+        }
+
+        ManagedServiceInfo[] toRemove = new ManagedServiceInfo[mServices.size()];
+        final SparseArray<ArrayList<ComponentName>> toAdd
+                = new SparseArray<ArrayList<ComponentName>>();
+
+        synchronized (mMutex) {
+            // unbind and remove all existing services
+            toRemove = mServices.toArray(toRemove);
+
+            final ArraySet<ComponentName> newEnabled = new ArraySet<ComponentName>();
+            final ArraySet<String> newPackages = new ArraySet<String>();
+
+            for (int i = 0; i < nUserIds; ++i) {
+                final ArrayList<ComponentName> add = new ArrayList<ComponentName>();
+                toAdd.put(userIds[i], add);
+
+                // decode the list of components
+                String toDecode = flat.get(userIds[i]);
+                if (toDecode != null) {
+                    String[] components = toDecode.split(ENABLED_SERVICES_SEPARATOR);
+                    for (int j = 0; j < components.length; j++) {
+                        final ComponentName component
+                                = ComponentName.unflattenFromString(components[j]);
+                        if (component != null) {
+                            newEnabled.add(component);
+                            add.add(component);
+                            newPackages.add(component.getPackageName());
+                        }
+                    }
+
+                }
+            }
+            mEnabledServicesForCurrentProfiles = newEnabled;
+            mEnabledServicesPackageNames = newPackages;
+        }
+
+        for (ManagedServiceInfo info : toRemove) {
+            final ComponentName component = info.component;
+            final int oldUser = info.userid;
+            Slog.v(TAG, "disabling " + getCaption() + " for user "
+                    + oldUser + ": " + component);
+            unregisterService(component, info.userid);
+        }
+
+        for (int i = 0; i < nUserIds; ++i) {
+            final ArrayList<ComponentName> add = toAdd.get(userIds[i]);
+            final int N = add.size();
+            for (int j = 0; j < N; j++) {
+                final ComponentName component = add.get(j);
+                Slog.v(TAG, "enabling " + getCaption() + " for user " + userIds[i] + ": "
+                        + component);
+                registerService(component, userIds[i]);
+            }
+        }
+    }
+
+    /**
+     * Version of registerService that takes the name of a service component to bind to.
+     */
+    private void registerService(final ComponentName name, final int userid) {
+        if (DEBUG) Slog.v(TAG, "registerService: " + name + " u=" + userid);
+
+        synchronized (mMutex) {
+            final String servicesBindingTag = name.toString() + "/" + userid;
+            if (mServicesBinding.contains(servicesBindingTag)) {
+                // stop registering this thing already! we're working on it
+                return;
+            }
+            mServicesBinding.add(servicesBindingTag);
+
+            final int N = mServices.size();
+            for (int i=N-1; i>=0; i--) {
+                final ManagedServiceInfo info = mServices.get(i);
+                if (name.equals(info.component)
+                        && info.userid == userid) {
+                    // cut old connections
+                    if (DEBUG) Slog.v(TAG, "    disconnecting old " + getCaption() + ": "
+                            + info.service);
+                    removeServiceLocked(i);
+                    if (info.connection != null) {
+                        mContext.unbindService(info.connection);
+                    }
+                }
+            }
+
+            Intent intent = new Intent(mConfig.serviceInterface);
+            intent.setComponent(name);
+
+            intent.putExtra(Intent.EXTRA_CLIENT_LABEL, mConfig.clientLabel);
+
+            final PendingIntent pendingIntent = PendingIntent.getActivity(
+                    mContext, 0, new Intent(mConfig.settingsAction), 0);
+            intent.putExtra(Intent.EXTRA_CLIENT_INTENT, pendingIntent);
+
+            ApplicationInfo appInfo = null;
+            try {
+                appInfo = mContext.getPackageManager().getApplicationInfo(
+                        name.getPackageName(), 0);
+            } catch (NameNotFoundException e) {
+                // Ignore if the package doesn't exist we won't be able to bind to the service.
+            }
+            final int targetSdkVersion =
+                    appInfo != null ? appInfo.targetSdkVersion : Build.VERSION_CODES.BASE;
+
+            try {
+                if (DEBUG) Slog.v(TAG, "binding: " + intent);
+                if (!mContext.bindServiceAsUser(intent,
+                        new ServiceConnection() {
+                            IInterface mService;
+
+                            @Override
+                            public void onServiceConnected(ComponentName name, IBinder binder) {
+                                boolean added = false;
+                                ManagedServiceInfo info = null;
+                                synchronized (mMutex) {
+                                    mServicesBinding.remove(servicesBindingTag);
+                                    try {
+                                        mService = asInterface(binder);
+                                        info = newServiceInfo(mService, name,
+                                                userid, false /*isSystem*/, this, targetSdkVersion);
+                                        binder.linkToDeath(info, 0);
+                                        added = mServices.add(info);
+                                    } catch (RemoteException e) {
+                                        // already dead
+                                    }
+                                }
+                                if (added) {
+                                    onServiceAdded(info);
+                                }
+                            }
+
+                            @Override
+                            public void onServiceDisconnected(ComponentName name) {
+                                Slog.v(TAG, getCaption() + " connection lost: " + name);
+                            }
+                        },
+                        Context.BIND_AUTO_CREATE,
+                        new UserHandle(userid)))
+                {
+                    mServicesBinding.remove(servicesBindingTag);
+                    Slog.w(TAG, "Unable to bind " + getCaption() + " service: " + intent);
+                    return;
+                }
+            } catch (SecurityException ex) {
+                Slog.e(TAG, "Unable to bind " + getCaption() + " service: " + intent, ex);
+                return;
+            }
+        }
+    }
+
+    /**
+     * Remove a service for the given user by ComponentName
+     */
+    private void unregisterService(ComponentName name, int userid) {
+        synchronized (mMutex) {
+            final int N = mServices.size();
+            for (int i=N-1; i>=0; i--) {
+                final ManagedServiceInfo info = mServices.get(i);
+                if (name.equals(info.component)
+                        && info.userid == userid) {
+                    removeServiceLocked(i);
+                    if (info.connection != null) {
+                        try {
+                            mContext.unbindService(info.connection);
+                        } catch (IllegalArgumentException ex) {
+                            // something happened to the service: we think we have a connection
+                            // but it's bogus.
+                            Slog.e(TAG, getCaption() + " " + name + " could not be unbound: " + ex);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Removes a service from the list but does not unbind
+     *
+     * @return the removed service.
+     */
+    private ManagedServiceInfo removeServiceImpl(IInterface service, final int userid) {
+        if (DEBUG) Slog.d(TAG, "removeServiceImpl service=" + service + " u=" + userid);
+        ManagedServiceInfo serviceInfo = null;
+        synchronized (mMutex) {
+            final int N = mServices.size();
+            for (int i=N-1; i>=0; i--) {
+                final ManagedServiceInfo info = mServices.get(i);
+                if (info.service.asBinder() == service.asBinder()
+                        && info.userid == userid) {
+                    if (DEBUG) Slog.d(TAG, "Removing active service " + info.component);
+                    serviceInfo = removeServiceLocked(i);
+                }
+            }
+        }
+        return serviceInfo;
+    }
+
+    private ManagedServiceInfo removeServiceLocked(int i) {
+        final ManagedServiceInfo info = mServices.remove(i);
+        onServiceRemovedLocked(info);
+        return info;
+    }
+
+    private void checkNotNull(IInterface service) {
+        if (service == null) {
+            throw new IllegalArgumentException(getCaption() + " must not be null");
+        }
+    }
+
+    private void registerServiceImpl(final IInterface service,
+            final ComponentName component, final int userid) {
+        synchronized (mMutex) {
+            try {
+                ManagedServiceInfo info = newServiceInfo(service, component, userid,
+                        true /*isSystem*/, null, Build.VERSION_CODES.L);
+                service.asBinder().linkToDeath(info, 0);
+                mServices.add(info);
+            } catch (RemoteException e) {
+                // already dead
+            }
+        }
+    }
+
+    /**
+     * Removes a service from the list and unbinds.
+     */
+    private void unregisterServiceImpl(IInterface service, int userid) {
+        ManagedServiceInfo info = removeServiceImpl(service, userid);
+        if (info != null && info.connection != null) {
+            mContext.unbindService(info.connection);
+        }
+    }
+
+    private class SettingsObserver extends ContentObserver {
+        private final Uri mSecureSettingsUri = Settings.Secure.getUriFor(mConfig.secureSettingName);
+
+        private SettingsObserver(Handler handler) {
+            super(handler);
+        }
+
+        private void observe() {
+            ContentResolver resolver = mContext.getContentResolver();
+            resolver.registerContentObserver(mSecureSettingsUri,
+                    false, this, UserHandle.USER_ALL);
+            update(null);
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            update(uri);
+        }
+
+        private void update(Uri uri) {
+            if (uri == null || mSecureSettingsUri.equals(uri)) {
+                rebindServices();
+            }
+        }
+    }
+
+    public class ManagedServiceInfo implements IBinder.DeathRecipient {
+        public IInterface service;
+        public ComponentName component;
+        public int userid;
+        public boolean isSystem;
+        public ServiceConnection connection;
+        public int targetSdkVersion;
+
+        public ManagedServiceInfo(IInterface service, ComponentName component,
+                int userid, boolean isSystem, ServiceConnection connection, int targetSdkVersion) {
+            this.service = service;
+            this.component = component;
+            this.userid = userid;
+            this.isSystem = isSystem;
+            this.connection = connection;
+            this.targetSdkVersion = targetSdkVersion;
+        }
+
+        @Override
+        public String toString() {
+            return new StringBuilder("ManagedServiceInfo[")
+                    .append("component=").append(component)
+                    .append(",userid=").append(userid)
+                    .append(",isSystem=").append(isSystem)
+                    .append(",targetSdkVersion=").append(targetSdkVersion)
+                    .append(",connection=").append(connection == null ? null : "<connection>")
+                    .append(",service=").append(service)
+                    .append(']').toString();
+        }
+
+        public boolean enabledAndUserMatches(int nid) {
+            if (!isEnabledForCurrentProfiles()) {
+                return false;
+            }
+            if (this.userid == UserHandle.USER_ALL) return true;
+            if (nid == UserHandle.USER_ALL || nid == this.userid) return true;
+            return supportsProfiles() && mUserProfiles.isCurrentProfile(nid);
+        }
+
+        public boolean supportsProfiles() {
+            return targetSdkVersion >= Build.VERSION_CODES.L;
+        }
+
+        @Override
+        public void binderDied() {
+            if (DEBUG) Slog.d(TAG, "binderDied");
+            // Remove the service, but don't unbind from the service. The system will bring the
+            // service back up, and the onServiceConnected handler will readd the service with the
+            // new binding. If this isn't a bound service, and is just a registered
+            // service, just removing it from the list is all we need to do anyway.
+            removeServiceImpl(this.service, this.userid);
+        }
+
+        /** convenience method for looking in mEnabledServicesForCurrentProfiles */
+        public boolean isEnabledForCurrentProfiles() {
+            if (this.isSystem) return true;
+            if (this.connection == null) return false;
+            return mEnabledServicesForCurrentProfiles.contains(this.component);
+        }
+    }
+
+    public static class UserProfiles {
+        // Profiles of the current user.
+        private final SparseArray<UserInfo> mCurrentProfiles = new SparseArray<UserInfo>();
+
+        public void updateCache(Context context) {
+            UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+            if (userManager != null) {
+                int currentUserId = ActivityManager.getCurrentUser();
+                List<UserInfo> profiles = userManager.getProfiles(currentUserId);
+                synchronized (mCurrentProfiles) {
+                    mCurrentProfiles.clear();
+                    for (UserInfo user : profiles) {
+                        mCurrentProfiles.put(user.id, user);
+                    }
+                }
+            }
+        }
+
+        public int[] getCurrentProfileIds() {
+            synchronized (mCurrentProfiles) {
+                int[] users = new int[mCurrentProfiles.size()];
+                final int N = mCurrentProfiles.size();
+                for (int i = 0; i < N; ++i) {
+                    users[i] = mCurrentProfiles.keyAt(i);
+                }
+                return users;
+            }
+        }
+
+        public boolean isCurrentProfile(int userId) {
+            synchronized (mCurrentProfiles) {
+                return mCurrentProfiles.get(userId) != null;
+            }
+        }
+    }
+
+    protected static class Config {
+        String caption;
+        String serviceInterface;
+        String secureSettingName;
+        String bindPermission;
+        String settingsAction;
+        int clientLabel;
+    }
+}
diff --git a/services/core/java/com/android/server/notification/NotificationDelegate.java b/services/core/java/com/android/server/notification/NotificationDelegate.java
index df2aaca..ce4c1ed 100644
--- a/services/core/java/com/android/server/notification/NotificationDelegate.java
+++ b/services/core/java/com/android/server/notification/NotificationDelegate.java
@@ -16,12 +16,21 @@
 
 package com.android.server.notification;
 
+import android.os.IBinder;
+
 public interface NotificationDelegate {
     void onSetDisabled(int status);
-    void onClearAll();
-    void onNotificationClick(String pkg, String tag, int id);
-    void onNotificationClear(String pkg, String tag, int id);
-    void onNotificationError(String pkg, String tag, int id,
-            int uid, int initialPid, String message);
+    void onClearAll(int callingUid, int callingPid, int userId);
+    void onNotificationClick(int callingUid, int callingPid,
+            String pkg, String tag, int id, int userId);
+    void onNotificationClear(int callingUid, int callingPid,
+            String pkg, String tag, int id, int userId);
+    void onNotificationError(int callingUid, int callingPid,
+            String pkg, String tag, int id,
+            int uid, int initialPid, String message, int userId);
     void onPanelRevealed();
+    void onPanelHidden();
+    boolean allowDisable(int what, IBinder token, String pkg);
+    void onNotificationVisibilityChanged(
+            String[] newlyVisibleKeys, String[] noLongerVisibleKeys);
 }
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index 38b8dc6..2e52983 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -36,12 +36,9 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.ServiceConnection;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
 import android.database.ContentObserver;
@@ -50,8 +47,10 @@
 import android.media.IRingtonePlayer;
 import android.net.Uri;
 import android.os.Binder;
+import android.os.Environment;
 import android.os.Handler;
 import android.os.IBinder;
+import android.os.IInterface;
 import android.os.Message;
 import android.os.Process;
 import android.os.RemoteException;
@@ -59,13 +58,16 @@
 import android.os.Vibrator;
 import android.provider.Settings;
 import android.service.notification.INotificationListener;
+import android.service.notification.IConditionListener;
+import android.service.notification.IConditionProvider;
 import android.service.notification.NotificationListenerService;
 import android.service.notification.StatusBarNotification;
+import android.service.notification.Condition;
+import android.service.notification.ZenModeConfig;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.ArrayMap;
 import android.util.AtomicFile;
-import android.util.EventLog;
 import android.util.Log;
 import android.util.Slog;
 import android.util.Xml;
@@ -74,21 +76,28 @@
 import android.widget.Toast;
 
 import com.android.internal.R;
-
 import com.android.internal.notification.NotificationScorer;
+import com.android.internal.util.FastXmlSerializer;
 import com.android.server.EventLogTags;
-import com.android.server.statusbar.StatusBarManagerInternal;
 import com.android.server.SystemService;
 import com.android.server.lights.Light;
 import com.android.server.lights.LightsManager;
+import com.android.server.notification.ManagedServices.ManagedServiceInfo;
+import com.android.server.notification.ManagedServices.UserProfiles;
+import com.android.server.notification.NotificationUsageStats.SingleNotificationStats;
+import com.android.server.statusbar.StatusBarManagerInternal;
+
+import libcore.io.IoUtils;
 
 import org.xmlpull.v1.XmlPullParser;
 import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
 
 import java.io.File;
 import java.io.FileDescriptor;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.lang.reflect.Array;
@@ -97,11 +106,7 @@
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.List;
 import java.util.NoSuchElementException;
-import java.util.Set;
-
-import libcore.io.IoUtils;
 
 /** {@hide} */
 public class NotificationManagerService extends SystemService {
@@ -112,6 +117,7 @@
 
     // message codes
     static final int MESSAGE_TIMEOUT = 2;
+    static final int MESSAGE_SAVE_POLICY_FILE = 3;
 
     static final int LONG_DELAY = 3500; // 3.5 seconds
     static final int SHORT_DELAY = 2000; // 2 seconds
@@ -134,8 +140,6 @@
     static final boolean ENABLE_BLOCKED_NOTIFICATIONS = true;
     static final boolean ENABLE_BLOCKED_TOASTS = true;
 
-    static final String ENABLED_NOTIFICATION_LISTENERS_SEPARATOR = ":";
-
     private IActivityManager mAm;
     AudioManager mAudioManager;
     StatusBarManagerInternal mStatusBar;
@@ -155,7 +159,7 @@
     private long[] mFallbackVibrationPattern;
     boolean mSystemReady;
 
-    int mDisabledNotifications;
+    private boolean mDisableNotificationAlerts;
     NotificationRecord mSoundNotification;
     NotificationRecord mVibrateNotification;
 
@@ -169,7 +173,6 @@
             new ArrayList<NotificationRecord>();
     final ArrayMap<String, NotificationRecord> mNotificationsByKey =
             new ArrayMap<String, NotificationRecord>();
-
     final ArrayList<ToastRecord> mToastQueue = new ArrayList<ToastRecord>();
 
     ArrayList<NotificationRecord> mLights = new ArrayList<NotificationRecord>();
@@ -177,19 +180,6 @@
 
     private AppOpsManager mAppOps;
 
-    // contains connections to all connected listeners, including app services
-    // and system listeners
-    private ArrayList<NotificationListenerInfo> mListeners
-            = new ArrayList<NotificationListenerInfo>();
-    // things that will be put into mListeners as soon as they're ready
-    private ArrayList<String> mServicesBinding = new ArrayList<String>();
-    // lists the component names of all enabled (and therefore connected) listener
-    // app services for the current user only
-    private HashSet<ComponentName> mEnabledListenersForCurrentUser
-            = new HashSet<ComponentName>();
-    // Just the packages from mEnabledListenersForCurrentUser
-    private HashSet<String> mEnabledListenerPackageNames = new HashSet<String>();
-
     // Notification control database. For now just contains disabled packages.
     private AtomicFile mPolicyFile;
     private HashSet<String> mBlockedPackages = new HashSet<String>();
@@ -205,76 +195,27 @@
 
     final ArrayList<NotificationScorer> mScorers = new ArrayList<NotificationScorer>();
 
-    private class NotificationListenerInfo implements IBinder.DeathRecipient {
-        INotificationListener listener;
-        ComponentName component;
-        int userid;
-        boolean isSystem;
-        ServiceConnection connection;
+    private final UserProfiles mUserProfiles = new UserProfiles();
+    private NotificationListeners mListeners;
+    private ConditionProviders mConditionProviders;
 
-        public NotificationListenerInfo(INotificationListener listener, ComponentName component,
-                int userid, boolean isSystem) {
-            this.listener = listener;
-            this.component = component;
-            this.userid = userid;
-            this.isSystem = isSystem;
-            this.connection = null;
-        }
+    private final NotificationUsageStats mUsageStats = new NotificationUsageStats();
 
-        public NotificationListenerInfo(INotificationListener listener, ComponentName component,
-                int userid, ServiceConnection connection) {
-            this.listener = listener;
-            this.component = component;
-            this.userid = userid;
-            this.isSystem = false;
-            this.connection = connection;
-        }
+    private static final String EXTRA_INTERCEPT = "android.intercept";
 
-        boolean enabledAndUserMatches(StatusBarNotification sbn) {
-            final int nid = sbn.getUserId();
-            if (!isEnabledForCurrentUser()) {
-                return false;
-            }
-            if (this.userid == UserHandle.USER_ALL) return true;
-            return (nid == UserHandle.USER_ALL || nid == this.userid);
-        }
-
-        public void notifyPostedIfUserMatch(StatusBarNotification sbn) {
-            if (!enabledAndUserMatches(sbn)) {
-                return;
-            }
-            try {
-                listener.onNotificationPosted(sbn);
-            } catch (RemoteException ex) {
-                Log.e(TAG, "unable to notify listener (posted): " + listener, ex);
-            }
-        }
-
-        public void notifyRemovedIfUserMatch(StatusBarNotification sbn) {
-            if (!enabledAndUserMatches(sbn)) return;
-            try {
-                listener.onNotificationRemoved(sbn);
-            } catch (RemoteException ex) {
-                Log.e(TAG, "unable to notify listener (removed): " + listener, ex);
-            }
-        }
-
-        @Override
-        public void binderDied() {
-            // Remove the listener, but don't unbind from the service. The system will bring the
-            // service back up, and the onServiceConnected handler will readd the listener with the
-            // new binding. If this isn't a bound service, and is just a registered
-            // INotificationListener, just removing it from the list is all we need to do anyway.
-            removeListenerImpl(this.listener, this.userid);
-        }
-
-        /** convenience method for looking in mEnabledListenersForCurrentUser */
-        public boolean isEnabledForCurrentUser() {
-            if (this.isSystem) return true;
-            if (this.connection == null) return false;
-            return mEnabledListenersForCurrentUser.contains(this.component);
-        }
-    }
+    private static final int MY_UID = Process.myUid();
+    private static final int MY_PID = Process.myPid();
+    private static final int REASON_DELEGATE_CLICK = 1;
+    private static final int REASON_DELEGATE_CANCEL = 2;
+    private static final int REASON_DELEGATE_CANCEL_ALL = 3;
+    private static final int REASON_DELEGATE_ERROR = 4;
+    private static final int REASON_PACKAGE_CHANGED = 5;
+    private static final int REASON_USER_STOPPED = 6;
+    private static final int REASON_PACKAGE_BANNED = 7;
+    private static final int REASON_NOMAN_CANCEL = 8;
+    private static final int REASON_NOMAN_CANCEL_ALL = 9;
+    private static final int REASON_LISTENER_CANCEL = 10;
+    private static final int REASON_LISTENER_CANCEL_ALL = 11;
 
     private static class Archive {
         static final int BUFFER_SIZE = 250;
@@ -381,53 +322,82 @@
 
     Archive mArchive = new Archive();
 
-    private void loadBlockDb() {
-        synchronized(mBlockedPackages) {
-            if (mPolicyFile == null) {
-                File dir = new File("/data/system");
-                mPolicyFile = new AtomicFile(new File(dir, "notification_policy.xml"));
+    private void loadPolicyFile() {
+        synchronized(mPolicyFile) {
+            mBlockedPackages.clear();
 
-                mBlockedPackages.clear();
+            FileInputStream infile = null;
+            try {
+                infile = mPolicyFile.openRead();
+                final XmlPullParser parser = Xml.newPullParser();
+                parser.setInput(infile, null);
 
-                FileInputStream infile = null;
-                try {
-                    infile = mPolicyFile.openRead();
-                    final XmlPullParser parser = Xml.newPullParser();
-                    parser.setInput(infile, null);
-
-                    int type;
-                    String tag;
-                    int version = DB_VERSION;
-                    while ((type = parser.next()) != END_DOCUMENT) {
-                        tag = parser.getName();
-                        if (type == START_TAG) {
-                            if (TAG_BODY.equals(tag)) {
-                                version = Integer.parseInt(
-                                        parser.getAttributeValue(null, ATTR_VERSION));
-                            } else if (TAG_BLOCKED_PKGS.equals(tag)) {
-                                while ((type = parser.next()) != END_DOCUMENT) {
-                                    tag = parser.getName();
-                                    if (TAG_PACKAGE.equals(tag)) {
-                                        mBlockedPackages.add(
-                                                parser.getAttributeValue(null, ATTR_NAME));
-                                    } else if (TAG_BLOCKED_PKGS.equals(tag) && type == END_TAG) {
-                                        break;
-                                    }
+                int type;
+                String tag;
+                int version = DB_VERSION;
+                while ((type = parser.next()) != END_DOCUMENT) {
+                    tag = parser.getName();
+                    if (type == START_TAG) {
+                        if (TAG_BODY.equals(tag)) {
+                            version = Integer.parseInt(
+                                    parser.getAttributeValue(null, ATTR_VERSION));
+                        } else if (TAG_BLOCKED_PKGS.equals(tag)) {
+                            while ((type = parser.next()) != END_DOCUMENT) {
+                                tag = parser.getName();
+                                if (TAG_PACKAGE.equals(tag)) {
+                                    mBlockedPackages.add(
+                                            parser.getAttributeValue(null, ATTR_NAME));
+                                } else if (TAG_BLOCKED_PKGS.equals(tag) && type == END_TAG) {
+                                    break;
                                 }
                             }
                         }
                     }
-                } catch (FileNotFoundException e) {
-                    // No data yet
-                } catch (IOException e) {
-                    Log.wtf(TAG, "Unable to read blocked notifications database", e);
-                } catch (NumberFormatException e) {
-                    Log.wtf(TAG, "Unable to parse blocked notifications database", e);
-                } catch (XmlPullParserException e) {
-                    Log.wtf(TAG, "Unable to parse blocked notifications database", e);
-                } finally {
-                    IoUtils.closeQuietly(infile);
+                    mZenModeHelper.readXml(parser);
                 }
+            } catch (FileNotFoundException e) {
+                // No data yet
+            } catch (IOException e) {
+                Log.wtf(TAG, "Unable to read notification policy", e);
+            } catch (NumberFormatException e) {
+                Log.wtf(TAG, "Unable to parse notification policy", e);
+            } catch (XmlPullParserException e) {
+                Log.wtf(TAG, "Unable to parse notification policy", e);
+            } finally {
+                IoUtils.closeQuietly(infile);
+            }
+        }
+    }
+
+    public void savePolicyFile() {
+        mHandler.removeMessages(MESSAGE_SAVE_POLICY_FILE);
+        mHandler.sendEmptyMessage(MESSAGE_SAVE_POLICY_FILE);
+    }
+
+    private void handleSavePolicyFile() {
+        Slog.d(TAG, "handleSavePolicyFile");
+        synchronized (mPolicyFile) {
+            final FileOutputStream stream;
+            try {
+                stream = mPolicyFile.startWrite();
+            } catch (IOException e) {
+                Slog.w(TAG, "Failed to save policy file", e);
+                return;
+            }
+
+            try {
+                final XmlSerializer out = new FastXmlSerializer();
+                out.setOutput(stream, "utf-8");
+                out.startDocument(null, true);
+                out.startTag(null, TAG_BODY);
+                out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION));
+                mZenModeHelper.writeXml(out);
+                out.endTag(null, TAG_BODY);
+                out.endDocument();
+                mPolicyFile.finishWrite(stream);
+            } catch (IOException e) {
+                Slog.w(TAG, "Failed to save policy file, restoring backup", e);
+                mPolicyFile.failWrite(stream);
             }
         }
     }
@@ -471,298 +441,11 @@
     }
 
 
-    /**
-     * Remove notification access for any services that no longer exist.
-     */
-    void disableNonexistentListeners() {
-        int currentUser = ActivityManager.getCurrentUser();
-        String flatIn = Settings.Secure.getStringForUser(
-                getContext().getContentResolver(),
-                Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                currentUser);
-        if (!TextUtils.isEmpty(flatIn)) {
-            if (DBG) Slog.v(TAG, "flat before: " + flatIn);
-            PackageManager pm = getContext().getPackageManager();
-            List<ResolveInfo> installedServices = pm.queryIntentServicesAsUser(
-                    new Intent(NotificationListenerService.SERVICE_INTERFACE),
-                    PackageManager.GET_SERVICES | PackageManager.GET_META_DATA,
-                    currentUser);
-
-            Set<ComponentName> installed = new HashSet<ComponentName>();
-            for (int i = 0, count = installedServices.size(); i < count; i++) {
-                ResolveInfo resolveInfo = installedServices.get(i);
-                ServiceInfo info = resolveInfo.serviceInfo;
-
-                if (!android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE.equals(
-                                info.permission)) {
-                    Slog.w(TAG, "Skipping notification listener service "
-                            + info.packageName + "/" + info.name
-                            + ": it does not require the permission "
-                            + android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE);
-                    continue;
-                }
-                installed.add(new ComponentName(info.packageName, info.name));
-            }
-
-            String flatOut = "";
-            if (!installed.isEmpty()) {
-                String[] enabled = flatIn.split(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR);
-                ArrayList<String> remaining = new ArrayList<String>(enabled.length);
-                for (int i = 0; i < enabled.length; i++) {
-                    ComponentName enabledComponent = ComponentName.unflattenFromString(enabled[i]);
-                    if (installed.contains(enabledComponent)) {
-                        remaining.add(enabled[i]);
-                    }
-                }
-                flatOut = TextUtils.join(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR, remaining);
-            }
-            if (DBG) Slog.v(TAG, "flat after: " + flatOut);
-            if (!flatIn.equals(flatOut)) {
-                Settings.Secure.putStringForUser(getContext().getContentResolver(),
-                        Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                        flatOut, currentUser);
-            }
-        }
-    }
-
-    /**
-     * Called whenever packages change, the user switches, or ENABLED_NOTIFICATION_LISTENERS
-     * is altered. (For example in response to USER_SWITCHED in our broadcast receiver)
-     */
-    void rebindListenerServices() {
-        final int currentUser = ActivityManager.getCurrentUser();
-        String flat = Settings.Secure.getStringForUser(
-                getContext().getContentResolver(),
-                Settings.Secure.ENABLED_NOTIFICATION_LISTENERS,
-                currentUser);
-
-        NotificationListenerInfo[] toRemove = new NotificationListenerInfo[mListeners.size()];
-        final ArrayList<ComponentName> toAdd;
-
-        synchronized (mNotificationList) {
-            // unbind and remove all existing listeners
-            toRemove = mListeners.toArray(toRemove);
-
-            toAdd = new ArrayList<ComponentName>();
-            final HashSet<ComponentName> newEnabled = new HashSet<ComponentName>();
-            final HashSet<String> newPackages = new HashSet<String>();
-
-            // decode the list of components
-            if (flat != null) {
-                String[] components = flat.split(ENABLED_NOTIFICATION_LISTENERS_SEPARATOR);
-                for (int i=0; i<components.length; i++) {
-                    final ComponentName component
-                            = ComponentName.unflattenFromString(components[i]);
-                    if (component != null) {
-                        newEnabled.add(component);
-                        toAdd.add(component);
-                        newPackages.add(component.getPackageName());
-                    }
-                }
-
-                mEnabledListenersForCurrentUser = newEnabled;
-                mEnabledListenerPackageNames = newPackages;
-            }
-        }
-
-        for (NotificationListenerInfo info : toRemove) {
-            final ComponentName component = info.component;
-            final int oldUser = info.userid;
-            Slog.v(TAG, "disabling notification listener for user " + oldUser + ": " + component);
-            unregisterListenerService(component, info.userid);
-        }
-
-        final int N = toAdd.size();
-        for (int i=0; i<N; i++) {
-            final ComponentName component = toAdd.get(i);
-            Slog.v(TAG, "enabling notification listener for user " + currentUser + ": "
-                    + component);
-            registerListenerService(component, currentUser);
-        }
-    }
-
-
-    /**
-     * Version of registerListener that takes the name of a
-     * {@link android.service.notification.NotificationListenerService} to bind to.
-     *
-     * This is the mechanism by which third parties may subscribe to notifications.
-     */
-    private void registerListenerService(final ComponentName name, final int userid) {
-        checkCallerIsSystem();
-
-        if (DBG) Slog.v(TAG, "registerListenerService: " + name + " u=" + userid);
-
-        synchronized (mNotificationList) {
-            final String servicesBindingTag = name.toString() + "/" + userid;
-            if (mServicesBinding.contains(servicesBindingTag)) {
-                // stop registering this thing already! we're working on it
-                return;
-            }
-            mServicesBinding.add(servicesBindingTag);
-
-            final int N = mListeners.size();
-            for (int i=N-1; i>=0; i--) {
-                final NotificationListenerInfo info = mListeners.get(i);
-                if (name.equals(info.component)
-                        && info.userid == userid) {
-                    // cut old connections
-                    if (DBG) Slog.v(TAG, "    disconnecting old listener: " + info.listener);
-                    mListeners.remove(i);
-                    if (info.connection != null) {
-                        getContext().unbindService(info.connection);
-                    }
-                }
-            }
-
-            Intent intent = new Intent(NotificationListenerService.SERVICE_INTERFACE);
-            intent.setComponent(name);
-
-            intent.putExtra(Intent.EXTRA_CLIENT_LABEL,
-                    R.string.notification_listener_binding_label);
-
-            final PendingIntent pendingIntent = PendingIntent.getActivity(
-                    getContext(), 0, new Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS), 0);
-            intent.putExtra(Intent.EXTRA_CLIENT_INTENT, pendingIntent);
-
-            try {
-                if (DBG) Slog.v(TAG, "binding: " + intent);
-                if (!getContext().bindServiceAsUser(intent,
-                        new ServiceConnection() {
-                            INotificationListener mListener;
-
-                            @Override
-                            public void onServiceConnected(ComponentName name, IBinder service) {
-                                boolean added = false;
-                                synchronized (mNotificationList) {
-                                    mServicesBinding.remove(servicesBindingTag);
-                                    try {
-                                        mListener = INotificationListener.Stub.asInterface(service);
-                                        NotificationListenerInfo info
-                                                = new NotificationListenerInfo(
-                                                mListener, name, userid, this);
-                                        service.linkToDeath(info, 0);
-                                        added = mListeners.add(info);
-                                    } catch (RemoteException e) {
-                                        // already dead
-                                    }
-                                }
-                                if (added) {
-                                    final String[] keys =
-                                            getActiveNotificationKeysFromListener(mListener);
-                                    try {
-                                        mListener.onListenerConnected(keys);
-                                    } catch (RemoteException e) {
-                                        // we tried
-                                    }
-                                }
-                            }
-
-                            @Override
-                            public void onServiceDisconnected(ComponentName name) {
-                                Slog.v(TAG, "notification listener connection lost: " + name);
-                            }
-                        },
-                        Context.BIND_AUTO_CREATE,
-                        new UserHandle(userid)))
-                {
-                    mServicesBinding.remove(servicesBindingTag);
-                    Slog.w(TAG, "Unable to bind listener service: " + intent);
-                    return;
-                }
-            } catch (SecurityException ex) {
-                Slog.e(TAG, "Unable to bind listener service: " + intent, ex);
-                return;
-            }
-        }
-    }
-
-
-    /**
-     * Remove a listener service for the given user by ComponentName
-     */
-    private void unregisterListenerService(ComponentName name, int userid) {
-        checkCallerIsSystem();
-
-        synchronized (mNotificationList) {
-            final int N = mListeners.size();
-            for (int i=N-1; i>=0; i--) {
-                final NotificationListenerInfo info = mListeners.get(i);
-                if (name.equals(info.component)
-                        && info.userid == userid) {
-                    mListeners.remove(i);
-                    if (info.connection != null) {
-                        try {
-                            getContext().unbindService(info.connection);
-                        } catch (IllegalArgumentException ex) {
-                            // something happened to the service: we think we have a connection
-                            // but it's bogus.
-                            Slog.e(TAG, "Listener " + name + " could not be unbound: " + ex);
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-    /**
-     * asynchronously notify all listeners about a new notification
-     */
-    void notifyPostedLocked(NotificationRecord n) {
-        // make a copy in case changes are made to the underlying Notification object
-        final StatusBarNotification sbn = n.sbn.clone();
-        for (final NotificationListenerInfo info : mListeners) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    info.notifyPostedIfUserMatch(sbn);
-                }});
-        }
-    }
-
-    /**
-     * asynchronously notify all listeners about a removed notification
-     */
-    void notifyRemovedLocked(NotificationRecord n) {
-        // make a copy in case changes are made to the underlying Notification object
-        // NOTE: this copy is lightweight: it doesn't include heavyweight parts of the notification
-        final StatusBarNotification sbn_light = n.sbn.cloneLight();
-
-        for (final NotificationListenerInfo info : mListeners) {
-            mHandler.post(new Runnable() {
-                @Override
-                public void run() {
-                    info.notifyRemovedIfUserMatch(sbn_light);
-                }});
-        }
-    }
-
-    // -- APIs to support listeners clicking/clearing notifications --
-
-    private void checkNullListener(INotificationListener listener) {
-        if (listener == null) {
-            throw new IllegalArgumentException("Listener must not be null");
-        }
-    }
-
-    private NotificationListenerInfo checkListenerTokenLocked(INotificationListener listener) {
-        checkNullListener(listener);
-        final IBinder token = listener.asBinder();
-        final int N = mListeners.size();
-        for (int i=0; i<N; i++) {
-            final NotificationListenerInfo info = mListeners.get(i);
-            if (info.listener.asBinder() == token) return info;
-        }
-        throw new SecurityException("Disallowed call from unknown listener: " + listener);
-    }
-
-
-
-    // -- end of listener APIs --
 
     public static final class NotificationRecord
     {
         final StatusBarNotification sbn;
+        final SingleNotificationStats stats = new SingleNotificationStats();
         IBinder statusBarKey;
 
         NotificationRecord(StatusBarNotification sbn)
@@ -833,6 +516,7 @@
                 }
                 pw.println(prefix + "  }");
             }
+            pw.println(prefix + "  stats=" + stats.toString());
         }
 
         @Override
@@ -885,8 +569,8 @@
         @Override
         public void onSetDisabled(int status) {
             synchronized (mNotificationList) {
-                mDisabledNotifications = status;
-                if ((mDisabledNotifications & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0) {
+                mDisableNotificationAlerts = (status & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) != 0;
+                if (mDisableNotificationAlerts) {
                     // cancel whatever's going on
                     long identity = Binder.clearCallingIdentity();
                     try {
@@ -910,35 +594,31 @@
         }
 
         @Override
-        public void onClearAll() {
-            // XXX to be totally correct, the caller should tell us which user
-            // this is for.
-            int currentUser = ActivityManager.getCurrentUser();
+        public void onClearAll(int callingUid, int callingPid, int userId) {
             synchronized (mNotificationList) {
-                cancelAllLocked(currentUser);
+                cancelAllLocked(callingUid, callingPid, userId, REASON_DELEGATE_CANCEL_ALL, null,
+                        /*includeCurrentProfiles*/ true);
             }
         }
 
         @Override
-        public void onNotificationClick(String pkg, String tag, int id) {
-            // XXX to be totally correct, the caller should tell us which user
-            // this is for.
-            cancelNotification(pkg, tag, id, Notification.FLAG_AUTO_CANCEL,
-                    Notification.FLAG_FOREGROUND_SERVICE, false,
-                    ActivityManager.getCurrentUser());
+        public void onNotificationClick(int callingUid, int callingPid,
+                String pkg, String tag, int id, int userId) {
+            cancelNotification(callingUid, callingPid, pkg, tag, id, Notification.FLAG_AUTO_CANCEL,
+                    Notification.FLAG_FOREGROUND_SERVICE, false, userId, REASON_DELEGATE_CLICK, null);
         }
 
         @Override
-        public void onNotificationClear(String pkg, String tag, int id) {
-            // XXX to be totally correct, the caller should tell us which user
-            // this is for.
-            cancelNotification(pkg, tag, id, 0,
-                Notification.FLAG_ONGOING_EVENT | Notification.FLAG_FOREGROUND_SERVICE,
-                true, ActivityManager.getCurrentUser());
+        public void onNotificationClear(int callingUid, int callingPid,
+                String pkg, String tag, int id, int userId) {
+            cancelNotification(callingUid, callingPid, pkg, tag, id, 0,
+                    Notification.FLAG_ONGOING_EVENT | Notification.FLAG_FOREGROUND_SERVICE,
+                    true, userId, REASON_DELEGATE_CANCEL, null);
         }
 
         @Override
         public void onPanelRevealed() {
+            EventLogTags.writeNotificationPanelRevealed();
             synchronized (mNotificationList) {
                 // sound
                 mSoundNotification = null;
@@ -971,13 +651,17 @@
         }
 
         @Override
-        public void onNotificationError(String pkg, String tag, int id,
-                int uid, int initialPid, String message) {
+        public void onPanelHidden() {
+            EventLogTags.writeNotificationPanelHidden();
+        }
+
+        @Override
+        public void onNotificationError(int callingUid, int callingPid, String pkg, String tag, int id,
+                int uid, int initialPid, String message, int userId) {
             Slog.d(TAG, "onNotification error pkg=" + pkg + " tag=" + tag + " id=" + id
                     + "; will crashApplication(uid=" + uid + ", pid=" + initialPid + ")");
-            // XXX to be totally correct, the caller should tell us which user
-            // this is for.
-            cancelNotification(pkg, tag, id, 0, 0, false, UserHandle.getUserId(uid));
+            cancelNotification(callingUid, callingPid, pkg, tag, id, 0, 0, false, userId,
+                    REASON_DELEGATE_ERROR, null);
             long ident = Binder.clearCallingIdentity();
             try {
                 ActivityManagerNative.getDefault().crashApplication(uid, initialPid, pkg,
@@ -987,6 +671,21 @@
             }
             Binder.restoreCallingIdentity(ident);
         }
+
+        @Override
+        public boolean allowDisable(int what, IBinder token, String pkg) {
+            return mZenModeHelper.allowDisable(what, token, pkg);
+        }
+
+        @Override
+        public void onNotificationVisibilityChanged(
+                String[] newlyVisibleKeys, String[] noLongerVisibleKeys) {
+            // Using ';' as separator since eventlogs uses ',' to separate
+            // args.
+            EventLogTags.writeNotificationVisibilityChanged(
+                    TextUtils.join(";", newlyVisibleKeys),
+                    TextUtils.join(";", noLongerVisibleKeys));
+        }
     };
 
     private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@@ -1008,7 +707,7 @@
                 String pkgList[] = null;
                 boolean queryReplace = queryRemove &&
                         intent.getBooleanExtra(Intent.EXTRA_REPLACING, false);
-                if (DBG) Slog.i(TAG, "queryReplace=" + queryReplace);
+                if (DBG) Slog.i(TAG, "action=" + action + " queryReplace=" + queryReplace);
                 if (action.equals(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE)) {
                     pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST);
                 } else if (queryRestart) {
@@ -1042,28 +741,16 @@
                     pkgList = new String[]{pkgName};
                 }
 
-                boolean anyListenersInvolved = false;
                 if (pkgList != null && (pkgList.length > 0)) {
                     for (String pkgName : pkgList) {
                         if (cancelNotifications) {
-                            cancelAllNotificationsInt(pkgName, 0, 0, !queryRestart,
-                                    UserHandle.USER_ALL);
-                        }
-                        if (mEnabledListenerPackageNames.contains(pkgName)) {
-                            anyListenersInvolved = true;
+                            cancelAllNotificationsInt(MY_UID, MY_PID, pkgName, 0, 0, !queryRestart,
+                                    UserHandle.USER_ALL, REASON_PACKAGE_CHANGED, null);
                         }
                     }
                 }
-
-                if (anyListenersInvolved) {
-                    // if we're not replacing a package, clean up orphaned bits
-                    if (!queryReplace) {
-                        disableNonexistentListeners();
-                    }
-                    // make sure we're still bound to any of our
-                    // listeners who may have just upgraded
-                    rebindListenerServices();
-                }
+                mListeners.onPackagesChanged(queryReplace, pkgList);
+                mConditionProviders.onPackagesChanged(queryReplace, pkgList);
             } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
                 // Keep track of screen on/off state, but do not turn off the notification light
                 // until user passes through the lock screen or views the notification.
@@ -1071,13 +758,14 @@
             } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
                 mScreenOn = false;
             } else if (action.equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
-                mInCall = (intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(
-                        TelephonyManager.EXTRA_STATE_OFFHOOK));
+                mInCall = TelephonyManager.EXTRA_STATE_OFFHOOK
+                        .equals(intent.getStringExtra(TelephonyManager.EXTRA_STATE));
                 updateNotificationPulse();
             } else if (action.equals(Intent.ACTION_USER_STOPPED)) {
                 int userHandle = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1);
                 if (userHandle >= 0) {
-                    cancelAllNotificationsInt(null, 0, 0, true, userHandle);
+                    cancelAllNotificationsInt(MY_UID, MY_PID, null, 0, 0, true, userHandle,
+                            REASON_USER_STOPPED, null);
                 }
             } else if (action.equals(Intent.ACTION_USER_PRESENT)) {
                 // turn off LED when user passes through lock screen
@@ -1085,6 +773,9 @@
             } else if (action.equals(Intent.ACTION_USER_SWITCHED)) {
                 // reload per-user settings
                 mSettingsObserver.update(null);
+                mUserProfiles.updateCache(context);
+            } else if (action.equals(Intent.ACTION_USER_ADDED)) {
+                mUserProfiles.updateCache(context);
             }
         }
     };
@@ -1093,9 +784,6 @@
         private final Uri NOTIFICATION_LIGHT_PULSE_URI
                 = Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE);
 
-        private final Uri ENABLED_NOTIFICATION_LISTENERS_URI
-                = Settings.Secure.getUriFor(Settings.Secure.ENABLED_NOTIFICATION_LISTENERS);
-
         SettingsObserver(Handler handler) {
             super(handler);
         }
@@ -1104,8 +792,6 @@
             ContentResolver resolver = getContext().getContentResolver();
             resolver.registerContentObserver(NOTIFICATION_LIGHT_PULSE_URI,
                     false, this, UserHandle.USER_ALL);
-            resolver.registerContentObserver(ENABLED_NOTIFICATION_LISTENERS_URI,
-                    false, this, UserHandle.USER_ALL);
             update(null);
         }
 
@@ -1123,13 +809,11 @@
                     updateNotificationPulse();
                 }
             }
-            if (uri == null || ENABLED_NOTIFICATION_LISTENERS_URI.equals(uri)) {
-                rebindListenerServices();
-            }
         }
     }
 
     private SettingsObserver mSettingsObserver;
+    private ZenModeHelper mZenModeHelper;
 
     static long[] getLongArray(Resources r, int resid, int maxlen, long[] def) {
         int[] ar = r.getIntArray(resid);
@@ -1155,9 +839,21 @@
         mVibrator = (Vibrator) getContext().getSystemService(Context.VIBRATOR_SERVICE);
 
         mHandler = new WorkerHandler();
+        mZenModeHelper = new ZenModeHelper(getContext(), mHandler);
+        mZenModeHelper.addCallback(new ZenModeHelper.Callback() {
+            @Override
+            public void onConfigChanged() {
+                savePolicyFile();
+            }
+        });
+        final File systemDir = new File(Environment.getDataDirectory(), "system");
+        mPolicyFile = new AtomicFile(new File(systemDir, "notification_policy.xml"));
 
         importOldBlockDb();
 
+        mListeners = new NotificationListeners();
+        mConditionProviders = new ConditionProviders(getContext(),
+                mHandler, mUserProfiles, mZenModeHelper);
         mStatusBar = getLocalService(StatusBarManagerInternal.class);
         mStatusBar.setNotificationDelegate(mNotificationDelegate);
 
@@ -1189,8 +885,11 @@
         // flag at least once and we'll go back to 0 after that.
         if (0 == Settings.Global.getInt(getContext().getContentResolver(),
                     Settings.Global.DEVICE_PROVISIONED, 0)) {
-            mDisabledNotifications = StatusBarManager.DISABLE_NOTIFICATION_ALERTS;
+            mDisableNotificationAlerts = true;
         }
+        mZenModeHelper.updateZenMode();
+
+        mUserProfiles.updateCache(getContext());
 
         // register for various Intents
         IntentFilter filter = new IntentFilter();
@@ -1200,6 +899,7 @@
         filter.addAction(Intent.ACTION_USER_PRESENT);
         filter.addAction(Intent.ACTION_USER_STOPPED);
         filter.addAction(Intent.ACTION_USER_SWITCHED);
+        filter.addAction(Intent.ACTION_USER_ADDED);
         getContext().registerReceiver(mIntentReceiver, filter);
         IntentFilter pkgFilter = new IntentFilter();
         pkgFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
@@ -1240,7 +940,7 @@
      * Read the old XML-based app block database and import those blockages into the AppOps system.
      */
     private void importOldBlockDb() {
-        loadBlockDb();
+        loadPolicyFile();
 
         PackageManager pm = getContext().getPackageManager();
         for (String pkg : mBlockedPackages) {
@@ -1253,9 +953,6 @@
             }
         }
         mBlockedPackages.clear();
-        if (mPolicyFile != null) {
-            mPolicyFile.delete();
-        }
     }
 
     @Override
@@ -1271,6 +968,8 @@
             // This observer will force an update when observe is called, causing us to
             // bind to listener services.
             mSettingsObserver.observe();
+            mListeners.onBootPhaseAppsCanStart();
+            mConditionProviders.onBootPhaseAppsCanStart();
         }
     }
 
@@ -1282,7 +981,8 @@
 
         // Now, cancel any outstanding notifications that are part of a just-disabled app
         if (ENABLE_BLOCKED_NOTIFICATIONS && !enabled) {
-            cancelAllNotificationsInt(pkg, 0, 0, true, UserHandle.getUserId(uid));
+            cancelAllNotificationsInt(MY_UID, MY_PID, pkg, 0, 0, true, UserHandle.getUserId(uid),
+                    REASON_PACKAGE_BANNED, null);
         }
     }
 
@@ -1386,9 +1086,9 @@
         }
 
         @Override
-        public void enqueueNotificationWithTag(String pkg, String basePkg, String tag, int id,
+        public void enqueueNotificationWithTag(String pkg, String opPkg, String tag, int id,
                 Notification notification, int[] idOut, int userId) throws RemoteException {
-            enqueueNotificationInternal(pkg, basePkg, Binder.getCallingUid(),
+            enqueueNotificationInternal(pkg, opPkg, Binder.getCallingUid(),
                     Binder.getCallingPid(), tag, id, notification, idOut, userId);
         }
 
@@ -1398,9 +1098,10 @@
             userId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
                     Binder.getCallingUid(), userId, true, false, "cancelNotificationWithTag", pkg);
             // Don't allow client applications to cancel foreground service notis.
-            cancelNotification(pkg, tag, id, 0,
+            cancelNotification(Binder.getCallingUid(), Binder.getCallingPid(), pkg, tag, id, 0,
                     Binder.getCallingUid() == Process.SYSTEM_UID
-                    ? 0 : Notification.FLAG_FOREGROUND_SERVICE, false, userId);
+                    ? 0 : Notification.FLAG_FOREGROUND_SERVICE, false, userId, REASON_NOMAN_CANCEL,
+                    null);
         }
 
         @Override
@@ -1412,7 +1113,9 @@
 
             // Calling from user space, don't allow the canceling of actively
             // running foreground services.
-            cancelAllNotificationsInt(pkg, 0, Notification.FLAG_FOREGROUND_SERVICE, true, userId);
+            cancelAllNotificationsInt(Binder.getCallingUid(), Binder.getCallingPid(),
+                    pkg, 0, Notification.FLAG_FOREGROUND_SERVICE, true, userId,
+                    REASON_NOMAN_CANCEL_ALL, null);
         }
 
         @Override
@@ -1496,8 +1199,7 @@
         public void registerListener(final INotificationListener listener,
                 final ComponentName component, final int userid) {
             checkCallerIsSystem();
-            checkNullListener(listener);
-            registerListenerImpl(listener, component, userid);
+            mListeners.registerService(listener, component, userid);
         }
 
         /**
@@ -1505,10 +1207,7 @@
          */
         @Override
         public void unregisterListener(INotificationListener listener, int userid) {
-            checkNullListener(listener);
-            // no need to check permissions; if your listener binder is in the list,
-            // that's proof that you had permission to add it in the first place
-            unregisterListenerImpl(listener, userid);
+            mListeners.unregisterService(listener, userid);
         }
 
         /**
@@ -1520,21 +1219,31 @@
          */
         @Override
         public void cancelNotificationsFromListener(INotificationListener token, String[] keys) {
+            final int callingUid = Binder.getCallingUid();
+            final int callingPid = Binder.getCallingPid();
             long identity = Binder.clearCallingIdentity();
             try {
                 synchronized (mNotificationList) {
-                    final NotificationListenerInfo info = checkListenerTokenLocked(token);
+                    final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token);
                     if (keys != null) {
                         final int N = keys.length;
                         for (int i = 0; i < N; i++) {
                             NotificationRecord r = mNotificationsByKey.get(keys[i]);
+                            final int userId = r.sbn.getUserId();
+                            if (userId != info.userid && userId != UserHandle.USER_ALL &&
+                                    !mUserProfiles.isCurrentProfile(userId)) {
+                                throw new SecurityException("Disallowed call from listener: "
+                                        + info.service);
+                            }
                             if (r != null) {
-                                cancelNotificationFromListenerLocked(info,
-                                        r.sbn.getPackageName(), r.sbn.getTag(), r.sbn.getId());
+                                cancelNotificationFromListenerLocked(info, callingUid, callingPid,
+                                        r.sbn.getPackageName(), r.sbn.getTag(), r.sbn.getId(),
+                                        userId);
                             }
                         }
                     } else {
-                        cancelAllLocked(info.userid);
+                        cancelAllLocked(callingUid, callingPid, info.userid,
+                                REASON_LISTENER_CANCEL_ALL, info, info.supportsProfiles());
                     }
                 }
             } finally {
@@ -1542,12 +1251,12 @@
             }
         }
 
-        private void cancelNotificationFromListenerLocked(NotificationListenerInfo info,
-                String pkg, String tag, int id) {
-            cancelNotification(pkg, tag, id, 0,
+        private void cancelNotificationFromListenerLocked(ManagedServiceInfo info,
+                int callingUid, int callingPid, String pkg, String tag, int id, int userId) {
+            cancelNotification(callingUid, callingPid, pkg, tag, id, 0,
                     Notification.FLAG_ONGOING_EVENT | Notification.FLAG_FOREGROUND_SERVICE,
                     true,
-                    info.userid);
+                    userId, REASON_LISTENER_CANCEL, info);
         }
 
         /**
@@ -1560,12 +1269,20 @@
         @Override
         public void cancelNotificationFromListener(INotificationListener token, String pkg,
                 String tag, int id) {
+            final int callingUid = Binder.getCallingUid();
+            final int callingPid = Binder.getCallingPid();
             long identity = Binder.clearCallingIdentity();
             try {
                 synchronized (mNotificationList) {
-                    final NotificationListenerInfo info = checkListenerTokenLocked(token);
-                    cancelNotificationFromListenerLocked(info,
-                            pkg, tag, id);
+                    final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token);
+                    if (info.supportsProfiles()) {
+                        Log.e(TAG, "Ignoring deprecated cancelNotification(pkg, tag, id) "
+                                + "from " + info.component
+                                + " use cancelNotification(key) instead.");
+                    } else {
+                        cancelNotificationFromListenerLocked(info, callingUid, callingPid,
+                                pkg, tag, id, info.userid);
+                    }
                 }
             } finally {
                 Binder.restoreCallingIdentity(identity);
@@ -1583,14 +1300,14 @@
         public StatusBarNotification[] getActiveNotificationsFromListener(
                 INotificationListener token, String[] keys) {
             synchronized (mNotificationList) {
-                final NotificationListenerInfo info = checkListenerTokenLocked(token);
+                final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token);
                 final ArrayList<StatusBarNotification> list
                         = new ArrayList<StatusBarNotification>();
                 if (keys == null) {
                     final int N = mNotificationList.size();
                     for (int i=0; i<N; i++) {
                         StatusBarNotification sbn = mNotificationList.get(i).sbn;
-                        if (info.enabledAndUserMatches(sbn)) {
+                        if (info.enabledAndUserMatches(sbn.getUserId())) {
                             list.add(sbn);
                         }
                     }
@@ -1598,7 +1315,7 @@
                     final int N = keys.length;
                     for (int i=0; i<N; i++) {
                         NotificationRecord r = mNotificationsByKey.get(keys[i]);
-                        if (r != null && info.enabledAndUserMatches(r.sbn)) {
+                        if (r != null && info.enabledAndUserMatches(r.sbn.getUserId())) {
                             list.add(r.sbn);
                         }
                     }
@@ -1613,6 +1330,61 @@
         }
 
         @Override
+        public ZenModeConfig getZenModeConfig() {
+            checkCallerIsSystem();
+            return mZenModeHelper.getConfig();
+        }
+
+        @Override
+        public boolean setZenModeConfig(ZenModeConfig config) {
+            checkCallerIsSystem();
+            return mZenModeHelper.setConfig(config);
+        }
+
+        @Override
+        public void notifyConditions(String pkg, IConditionProvider provider,
+                Condition[] conditions) {
+            final ManagedServiceInfo info = mConditionProviders.checkServiceToken(provider);
+            checkCallerIsSystemOrSameApp(pkg);
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                mConditionProviders.notifyConditions(pkg, info, conditions);
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void requestZenModeConditions(IConditionListener callback, int relevance) {
+            enforceSystemOrSystemUI("INotificationManager.requestZenModeConditions");
+            mConditionProviders.requestZenModeConditions(callback, relevance);
+        }
+
+        @Override
+        public void setZenModeCondition(Uri conditionId) {
+            enforceSystemOrSystemUI("INotificationManager.setZenModeCondition");
+            mConditionProviders.setZenModeCondition(conditionId);
+        }
+
+        @Override
+        public void setAutomaticZenModeConditions(Uri[] conditionIds) {
+            enforceSystemOrSystemUI("INotificationManager.setAutomaticZenModeConditions");
+            mConditionProviders.setAutomaticZenModeConditions(conditionIds);
+        }
+
+        @Override
+        public Condition[] getAutomaticZenModeConditions() {
+            enforceSystemOrSystemUI("INotificationManager.getAutomaticZenModeConditions");
+            return mConditionProviders.getAutomaticZenModeConditions();
+        }
+
+        private void enforceSystemOrSystemUI(String message) {
+            if (isCallerSystem()) return;
+            getContext().enforceCallingPermission(android.Manifest.permission.STATUS_BAR_SERVICE,
+                    message);
+        }
+
+        @Override
         protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
             if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
                     != PackageManager.PERMISSION_GRANTED) {
@@ -1628,12 +1400,12 @@
 
     private String[] getActiveNotificationKeysFromListener(INotificationListener token) {
         synchronized (mNotificationList) {
-            final NotificationListenerInfo info = checkListenerTokenLocked(token);
+            final ManagedServiceInfo info = mListeners.checkServiceTokenLocked(token);
             final ArrayList<String> keys = new ArrayList<String>();
             final int N = mNotificationList.size();
             for (int i=0; i<N; i++) {
                 final StatusBarNotification sbn = mNotificationList.get(i).sbn;
-                if (info.enabledAndUserMatches(sbn)) {
+                if (info.enabledAndUserMatches(sbn.getUserId())) {
                     keys.add(sbn.getKey());
                 }
             }
@@ -1644,19 +1416,6 @@
     void dumpImpl(PrintWriter pw) {
         pw.println("Current Notification Manager state:");
 
-        pw.println("  Listeners (" + mEnabledListenersForCurrentUser.size()
-                + ") enabled for current user:");
-        for (ComponentName cmpt : mEnabledListenersForCurrentUser) {
-            pw.println("    " + cmpt);
-        }
-
-        pw.println("  Live listeners (" + mListeners.size() + "):");
-        for (NotificationListenerInfo info : mListeners) {
-            pw.println("    " + info.component
-                    + " (user " + info.userid + "): " + info.listener
-                    + (info.isSystem?" SYSTEM":""));
-        }
-
         int N;
 
         synchronized (mToastQueue) {
@@ -1692,8 +1451,7 @@
 
             pw.println("  mSoundNotification=" + mSoundNotification);
             pw.println("  mVibrateNotification=" + mVibrateNotification);
-            pw.println("  mDisabledNotifications=0x"
-                    + Integer.toHexString(mDisabledNotifications));
+            pw.println("  mDisableNotificationAlerts=" + mDisableNotificationAlerts);
             pw.println("  mSystemReady=" + mSystemReady);
             pw.println("  mArchive=" + mArchive.toString());
             Iterator<StatusBarNotification> iter = mArchive.descendingIterator();
@@ -1706,6 +1464,17 @@
                 }
             }
 
+            pw.println("\n  Usage Stats:");
+            mUsageStats.dump(pw, "    ");
+
+            pw.println("\n  Zen Mode:");
+            mZenModeHelper.dump(pw, "    ");
+
+            pw.println("\n  Notification listeners:");
+            mListeners.dump(pw);
+
+            pw.println("\n  Condition providers:");
+            mConditionProviders.dump(pw);
         }
     }
 
@@ -1714,14 +1483,14 @@
      */
     private final NotificationManagerInternal mInternalService = new NotificationManagerInternal() {
         @Override
-        public void enqueueNotification(String pkg, String basePkg, int callingUid, int callingPid,
+        public void enqueueNotification(String pkg, String opPkg, int callingUid, int callingPid,
                 String tag, int id, Notification notification, int[] idReceived, int userId) {
-            enqueueNotificationInternal(pkg, basePkg, callingUid, callingPid, tag, id, notification,
+            enqueueNotificationInternal(pkg, opPkg, callingUid, callingPid, tag, id, notification,
                     idReceived, userId);
         }
     };
 
-    void enqueueNotificationInternal(final String pkg, String basePkg, final int callingUid,
+    void enqueueNotificationInternal(final String pkg, final String opPkg, final int callingUid,
             final int callingPid, final String tag, final int id, final Notification notification,
             int[] idOut, int incomingUserId) {
         if (DBG) {
@@ -1759,8 +1528,8 @@
         //     behalf of the download manager without affecting other apps.
         if (!pkg.equals("com.android.providers.downloads")
                 || Log.isLoggable("DownloadManager", Log.VERBOSE)) {
-            EventLog.writeEvent(EventLogTags.NOTIFICATION_ENQUEUE, pkg, id, tag, userId,
-                    notification.toString());
+            EventLogTags.writeNotificationEnqueue(callingUid, callingPid,
+                    pkg, id, tag, userId, notification.toString());
         }
 
         if (pkg == null || notification == null) {
@@ -1837,21 +1606,28 @@
                     return;
                 }
 
-                // Should this notification make noise, vibe, or use the LED?
-                final boolean canInterrupt = (score >= SCORE_INTERRUPTION_THRESHOLD);
+                // Is this notification intercepted by zen mode?
+                final boolean intercept = mZenModeHelper.shouldIntercept(pkg, notification);
+                notification.extras.putBoolean(EXTRA_INTERCEPT, intercept);
 
+                // Should this notification make noise, vibe, or use the LED?
+                final boolean canInterrupt = (score >= SCORE_INTERRUPTION_THRESHOLD) && !intercept;
+                if (DBG) Slog.v(TAG, "canInterrupt=" + canInterrupt + " intercept=" + intercept);
                 synchronized (mNotificationList) {
                     final StatusBarNotification n = new StatusBarNotification(
-                            pkg, id, tag, callingUid, callingPid, score, notification, user);
+                            pkg, opPkg, id, tag, callingUid, callingPid, score, notification,
+                            user);
                     NotificationRecord r = new NotificationRecord(n);
                     NotificationRecord old = null;
 
                     int index = indexOfNotificationLocked(pkg, tag, id, userId);
                     if (index < 0) {
                         mNotificationList.add(r);
+                        mUsageStats.registerPostedByApp(r);
                     } else {
-                        old = mNotificationList.remove(index);
-                        mNotificationList.add(index, r);
+                        old = mNotificationList.get(index);
+                        mNotificationList.set(index, r);
+                        mUsageStats.registerUpdatedByApp(r);
                         // Make sure we don't lose the foreground service state.
                         if (old != null) {
                             notification.flags |=
@@ -1904,7 +1680,7 @@
                             sendAccessibilityEvent(notification, pkg);
                         }
 
-                        notifyPostedLocked(r);
+                        mListeners.notifyPostedLocked(r.sbn);
                     } else {
                         Slog.e(TAG, "Not posting notification with icon==0: " + notification);
                         if (old != null && old.statusBarKey != null) {
@@ -1915,7 +1691,7 @@
                                 Binder.restoreCallingIdentity(identity);
                             }
 
-                            notifyRemovedLocked(r);
+                            mListeners.notifyRemovedLocked(r.sbn);
                         }
                         // ATTENTION: in a future release we will bail out here
                         // so that we do not play sounds, show lights, etc. for invalid
@@ -1925,16 +1701,16 @@
                     }
 
                     // If we're not supposed to beep, vibrate, etc. then don't.
-                    if (((mDisabledNotifications
-                            & StatusBarManager.DISABLE_NOTIFICATION_ALERTS) == 0)
+                    if (!mDisableNotificationAlerts
                             && (!(old != null
                                 && (notification.flags & Notification.FLAG_ONLY_ALERT_ONCE) != 0 ))
                             && (r.getUserId() == UserHandle.USER_ALL ||
-                                (r.getUserId() == userId && r.getUserId() == currentUser))
+                                (r.getUserId() == userId && r.getUserId() == currentUser) ||
+                                mUserProfiles.isCurrentProfile(r.getUserId()))
                             && canInterrupt
                             && mSystemReady
                             && mAudioManager != null) {
-
+                        if (DBG) Slog.v(TAG, "Interrupting!");
                         // sound
 
                         // should we use the default notification sound? (indicated either by
@@ -1979,6 +1755,8 @@
                                     final IRingtonePlayer player =
                                             mAudioManager.getRingtonePlayer();
                                     if (player != null) {
+                                        if (DBG) Slog.v(TAG, "Playing sound " + soundUri
+                                                + " on stream " + audioStreamType);
                                         player.playAsync(soundUri, user, looping, audioStreamType);
                                     }
                                 } catch (RemoteException e) {
@@ -2014,21 +1792,21 @@
                                 // notifying app does not have the VIBRATE permission.
                                 long identity = Binder.clearCallingIdentity();
                                 try {
-                                    mVibrator.vibrate(r.sbn.getUid(), r.sbn.getBasePkg(),
+                                    mVibrator.vibrate(r.sbn.getUid(), r.sbn.getOpPkg(),
                                         useDefaultVibrate ? mDefaultVibrationPattern
                                             : mFallbackVibrationPattern,
                                         ((notification.flags & Notification.FLAG_INSISTENT) != 0)
-                                                ? 0: -1);
+                                                ? 0: -1, notification.audioStreamType);
                                 } finally {
                                     Binder.restoreCallingIdentity(identity);
                                 }
                             } else if (notification.vibrate.length > 1) {
                                 // If you want your own vibration pattern, you need the VIBRATE
                                 // permission
-                                mVibrator.vibrate(r.sbn.getUid(), r.sbn.getBasePkg(),
+                                mVibrator.vibrate(r.sbn.getUid(), r.sbn.getOpPkg(),
                                         notification.vibrate,
                                     ((notification.flags & Notification.FLAG_INSISTENT) != 0)
-                                            ? 0: -1);
+                                            ? 0: -1, notification.audioStreamType);
                             }
                         }
                     }
@@ -2059,51 +1837,6 @@
         idOut[0] = id;
     }
 
-     void registerListenerImpl(final INotificationListener listener,
-            final ComponentName component, final int userid) {
-        synchronized (mNotificationList) {
-            try {
-                NotificationListenerInfo info
-                        = new NotificationListenerInfo(listener, component, userid, true);
-                listener.asBinder().linkToDeath(info, 0);
-                mListeners.add(info);
-            } catch (RemoteException e) {
-                // already dead
-            }
-        }
-    }
-
-    /**
-     * Removes a listener from the list and unbinds from its service.
-     */
-    void unregisterListenerImpl(final INotificationListener listener, final int userid) {
-        NotificationListenerInfo info = removeListenerImpl(listener, userid);
-        if (info != null && info.connection != null) {
-            getContext().unbindService(info.connection);
-        }
-    }
-
-    /**
-     * Removes a listener from the list but does not unbind from the listener's service.
-     *
-     * @return the removed listener.
-     */
-    NotificationListenerInfo removeListenerImpl(
-            final INotificationListener listener, final int userid) {
-        NotificationListenerInfo listenerInfo = null;
-        synchronized (mNotificationList) {
-            final int N = mListeners.size();
-            for (int i=N-1; i>=0; i--) {
-                final NotificationListenerInfo info = mListeners.get(i);
-                if (info.listener.asBinder() == listener.asBinder()
-                        && info.userid == userid) {
-                    listenerInfo = mListeners.remove(i);
-                }
-            }
-        }
-        return listenerInfo;
-    }
-
     void showNextToastLocked() {
         ToastRecord record = mToastQueue.get(0);
         while (record != null) {
@@ -2213,6 +1946,9 @@
                 case MESSAGE_TIMEOUT:
                     handleTimeout((ToastRecord)msg.obj);
                     break;
+                case MESSAGE_SAVE_POLICY_FILE:
+                    handleSavePolicyFile();
+                    break;
             }
         }
     }
@@ -2243,7 +1979,7 @@
         manager.sendAccessibilityEvent(event);
     }
 
-    private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete) {
+    private void cancelNotificationLocked(NotificationRecord r, boolean sendDelete, int reason) {
         // tell the app
         if (sendDelete) {
             if (r.getNotification().deleteIntent != null) {
@@ -2266,7 +2002,7 @@
                 Binder.restoreCallingIdentity(identity);
             }
             r.statusBarKey = null;
-            notifyRemovedLocked(r);
+            mListeners.notifyRemovedLocked(r.sbn);
         }
 
         // sound
@@ -2302,6 +2038,26 @@
             mLedNotification = null;
         }
 
+        // Record usage stats
+        switch (reason) {
+            case REASON_DELEGATE_CANCEL:
+            case REASON_DELEGATE_CANCEL_ALL:
+            case REASON_LISTENER_CANCEL:
+            case REASON_LISTENER_CANCEL_ALL:
+                mUsageStats.registerDismissedByUser(r);
+                break;
+            case REASON_NOMAN_CANCEL:
+            case REASON_NOMAN_CANCEL_ALL:
+                mUsageStats.registerRemovedByApp(r);
+                break;
+            case REASON_DELEGATE_CLICK:
+                mUsageStats.registerCancelDueToClick(r);
+                break;
+            default:
+                mUsageStats.registerCancelUnknown(r);
+                break;
+        }
+
         // Save it for users of getHistoricalNotifications()
         mArchive.record(r.sbn);
     }
@@ -2310,9 +2066,10 @@
      * Cancels a notification ONLY if it has all of the {@code mustHaveFlags}
      * and none of the {@code mustNotHaveFlags}.
      */
-    void cancelNotification(final String pkg, final String tag, final int id,
+    void cancelNotification(final int callingUid, final int callingPid,
+            final String pkg, final String tag, final int id,
             final int mustHaveFlags, final int mustNotHaveFlags, final boolean sendDelete,
-            final int userId) {
+            final int userId, final int reason, final ManagedServiceInfo listener) {
         // In enqueueNotificationInternal notifications are added by scheduling the
         // work on the worker handler. Hence, we also schedule the cancel on this
         // handler to avoid a scenario where an add notification call followed by a
@@ -2320,14 +2077,21 @@
         mHandler.post(new Runnable() {
             @Override
             public void run() {
-                EventLog.writeEvent(EventLogTags.NOTIFICATION_CANCEL, pkg, id, tag, userId,
-                        mustHaveFlags, mustNotHaveFlags);
+                EventLogTags.writeNotificationCancel(callingUid, callingPid, pkg, id, tag, userId,
+                        mustHaveFlags, mustNotHaveFlags, reason,
+                        listener == null ? null : listener.component.toShortString());
 
                 synchronized (mNotificationList) {
                     int index = indexOfNotificationLocked(pkg, tag, id, userId);
                     if (index >= 0) {
                         NotificationRecord r = mNotificationList.get(index);
 
+                        // Ideally we'd do this in the caller of this method. However, that would
+                        // require the caller to also find the notification.
+                        if (reason == REASON_DELEGATE_CLICK) {
+                            mUsageStats.registerClickedByUser(r);
+                        }
+
                         if ((r.getNotification().flags & mustHaveFlags) != mustHaveFlags) {
                             return;
                         }
@@ -2338,7 +2102,7 @@
                         mNotificationList.remove(index);
                         mNotificationsByKey.remove(r.sbn.getKey());
 
-                        cancelNotificationLocked(r, sendDelete);
+                        cancelNotificationLocked(r, sendDelete, reason);
                         updateLightsLocked();
                     }
                 }
@@ -2361,13 +2125,25 @@
     }
 
     /**
+     * Determine whether the userId applies to the notification in question, either because
+     * they match exactly, or one of them is USER_ALL (which is treated as a wildcard) or
+     * because it matches one of the users profiles.
+     */
+    private boolean notificationMatchesCurrentProfiles(NotificationRecord r, int userId) {
+        return notificationMatchesUserId(r, userId)
+                || mUserProfiles.isCurrentProfile(r.getUserId());
+    }
+
+    /**
      * Cancels all notifications from a given package that have all of the
      * {@code mustHaveFlags}.
      */
-    boolean cancelAllNotificationsInt(String pkg, int mustHaveFlags,
-            int mustNotHaveFlags, boolean doit, int userId) {
-        EventLog.writeEvent(EventLogTags.NOTIFICATION_CANCEL_ALL, pkg, userId,
-                mustHaveFlags, mustNotHaveFlags);
+    boolean cancelAllNotificationsInt(int callingUid, int callingPid, String pkg, int mustHaveFlags,
+            int mustNotHaveFlags, boolean doit, int userId, int reason,
+            ManagedServiceInfo listener) {
+        EventLogTags.writeNotificationCancelAll(callingUid, callingPid,
+                pkg, userId, mustHaveFlags, mustNotHaveFlags, reason,
+                listener == null ? null : listener.component.toShortString());
 
         synchronized (mNotificationList) {
             final int N = mNotificationList.size();
@@ -2396,7 +2172,7 @@
                 }
                 mNotificationList.remove(i);
                 mNotificationsByKey.remove(r.sbn.getKey());
-                cancelNotificationLocked(r, false);
+                cancelNotificationLocked(r, false, reason);
             }
             if (canceledSomething) {
                 updateLightsLocked();
@@ -2405,61 +2181,32 @@
         }
     }
 
+    void cancelAllLocked(int callingUid, int callingPid, int userId, int reason,
+            ManagedServiceInfo listener, boolean includeCurrentProfiles) {
+        EventLogTags.writeNotificationCancelAll(callingUid, callingPid,
+                null, userId, 0, 0, reason,
+                listener == null ? null : listener.component.toShortString());
 
-
-    // Return true if the UID is a system or phone UID and therefore should not have
-    // any notifications or toasts blocked.
-    boolean isUidSystem(int uid) {
-        final int appid = UserHandle.getAppId(uid);
-        return (appid == Process.SYSTEM_UID || appid == Process.PHONE_UID || uid == 0);
-    }
-
-    // same as isUidSystem(int, int) for the Binder caller's UID.
-    boolean isCallerSystem() {
-        return isUidSystem(Binder.getCallingUid());
-    }
-
-    void checkCallerIsSystem() {
-        if (isCallerSystem()) {
-            return;
-        }
-        throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid());
-    }
-
-    void checkCallerIsSystemOrSameApp(String pkg) {
-        if (isCallerSystem()) {
-            return;
-        }
-        final int uid = Binder.getCallingUid();
-        try {
-            ApplicationInfo ai = AppGlobals.getPackageManager().getApplicationInfo(
-                    pkg, 0, UserHandle.getCallingUserId());
-            if (!UserHandle.isSameApp(ai.uid, uid)) {
-                throw new SecurityException("Calling uid " + uid + " gave package"
-                        + pkg + " which is owned by uid " + ai.uid);
-            }
-        } catch (RemoteException re) {
-            throw new SecurityException("Unknown package " + pkg + "\n" + re);
-        }
-    }
-
-    void cancelAllLocked(int userId) {
         final int N = mNotificationList.size();
         for (int i=N-1; i>=0; i--) {
             NotificationRecord r = mNotificationList.get(i);
-
-            if (!notificationMatchesUserId(r, userId)) {
-                continue;
+            if (includeCurrentProfiles) {
+                if (!notificationMatchesCurrentProfiles(r, userId)) {
+                    continue;
+                }
+            } else {
+                if (!notificationMatchesUserId(r, userId)) {
+                    continue;
+                }
             }
 
             if ((r.getFlags() & (Notification.FLAG_ONGOING_EVENT
                             | Notification.FLAG_NO_CLEAR)) == 0) {
                 mNotificationList.remove(i);
                 mNotificationsByKey.remove(r.sbn.getKey());
-                cancelNotificationLocked(r, true);
+                cancelNotificationLocked(r, true, reason);
             }
         }
-
         updateLightsLocked();
     }
 
@@ -2527,4 +2274,131 @@
             updateLightsLocked();
         }
     }
+
+    private static boolean isUidSystem(int uid) {
+        final int appid = UserHandle.getAppId(uid);
+        return (appid == Process.SYSTEM_UID || appid == Process.PHONE_UID || uid == 0);
+    }
+
+    private static boolean isCallerSystem() {
+        return isUidSystem(Binder.getCallingUid());
+    }
+
+    private static void checkCallerIsSystem() {
+        if (isCallerSystem()) {
+            return;
+        }
+        throw new SecurityException("Disallowed call for uid " + Binder.getCallingUid());
+    }
+
+    private static void checkCallerIsSystemOrSameApp(String pkg) {
+        if (isCallerSystem()) {
+            return;
+        }
+        final int uid = Binder.getCallingUid();
+        try {
+            ApplicationInfo ai = AppGlobals.getPackageManager().getApplicationInfo(
+                    pkg, 0, UserHandle.getCallingUserId());
+            if (!UserHandle.isSameApp(ai.uid, uid)) {
+                throw new SecurityException("Calling uid " + uid + " gave package"
+                        + pkg + " which is owned by uid " + ai.uid);
+            }
+        } catch (RemoteException re) {
+            throw new SecurityException("Unknown package " + pkg + "\n" + re);
+        }
+    }
+
+    public class NotificationListeners extends ManagedServices {
+
+        public NotificationListeners() {
+            super(getContext(), mHandler, mNotificationList, mUserProfiles);
+        }
+
+        @Override
+        protected Config getConfig() {
+            Config c = new Config();
+            c.caption = "notification listener";
+            c.serviceInterface = NotificationListenerService.SERVICE_INTERFACE;
+            c.secureSettingName = Settings.Secure.ENABLED_NOTIFICATION_LISTENERS;
+            c.bindPermission = android.Manifest.permission.BIND_NOTIFICATION_LISTENER_SERVICE;
+            c.settingsAction = Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS;
+            c.clientLabel = R.string.notification_listener_binding_label;
+            return c;
+        }
+
+        @Override
+        protected IInterface asInterface(IBinder binder) {
+            return INotificationListener.Stub.asInterface(binder);
+        }
+
+        @Override
+        public void onServiceAdded(ManagedServiceInfo info) {
+            final INotificationListener listener = (INotificationListener) info.service;
+            final String[] keys = getActiveNotificationKeysFromListener(listener);
+            try {
+                listener.onListenerConnected(keys);
+            } catch (RemoteException e) {
+                // we tried
+            }
+        }
+
+        /**
+         * asynchronously notify all listeners about a new notification
+         */
+        public void notifyPostedLocked(StatusBarNotification sbn) {
+            // make a copy in case changes are made to the underlying Notification object
+            final StatusBarNotification sbnClone = sbn.clone();
+            for (final ManagedServiceInfo info : mServices) {
+                mHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        notifyPostedIfUserMatch(info, sbnClone);
+                    }
+                });
+            }
+        }
+
+        /**
+         * asynchronously notify all listeners about a removed notification
+         */
+        public void notifyRemovedLocked(StatusBarNotification sbn) {
+            // make a copy in case changes are made to the underlying Notification object
+            // NOTE: this copy is lightweight: it doesn't include heavyweight parts of the
+            // notification
+            final StatusBarNotification sbnLight = sbn.cloneLight();
+            for (ManagedServiceInfo serviceInfo : mServices) {
+                final ManagedServiceInfo info = (ManagedServiceInfo) serviceInfo;
+                mHandler.post(new Runnable() {
+                    @Override
+                    public void run() {
+                        notifyRemovedIfUserMatch(info, sbnLight);
+                    }
+                });
+            }
+        }
+
+        private void notifyPostedIfUserMatch(ManagedServiceInfo info, StatusBarNotification sbn) {
+            if (!info.enabledAndUserMatches(sbn.getUserId())) {
+                return;
+            }
+            final INotificationListener listener = (INotificationListener)info.service;
+            try {
+                listener.onNotificationPosted(sbn);
+            } catch (RemoteException ex) {
+                Log.e(TAG, "unable to notify listener (posted): " + listener, ex);
+            }
+        }
+
+        private void notifyRemovedIfUserMatch(ManagedServiceInfo info, StatusBarNotification sbn) {
+            if (!info.enabledAndUserMatches(sbn.getUserId())) {
+                return;
+            }
+            final INotificationListener listener = (INotificationListener)info.service;
+            try {
+                listener.onNotificationRemoved(sbn);
+            } catch (RemoteException ex) {
+                Log.e(TAG, "unable to notify listener (removed): " + listener, ex);
+            }
+        }
+    }
 }
diff --git a/services/core/java/com/android/server/notification/NotificationUsageStats.java b/services/core/java/com/android/server/notification/NotificationUsageStats.java
new file mode 100644
index 0000000..d9e2b91
--- /dev/null
+++ b/services/core/java/com/android/server/notification/NotificationUsageStats.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 2014 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.android.server.notification;
+
+import com.android.server.notification.NotificationManagerService.NotificationRecord;
+
+import android.os.SystemClock;
+import android.service.notification.StatusBarNotification;
+
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Keeps track of notification activity, display, and user interaction.
+ *
+ * <p>This class receives signals from NoMan and keeps running stats of
+ * notification usage. Some metrics are updated as events occur. Others, namely
+ * those involving durations, are updated as the notification is canceled.</p>
+ *
+ * <p>This class is thread-safe.</p>
+ *
+ * {@hide}
+ */
+public class NotificationUsageStats {
+
+    // Guarded by synchronized(this).
+    private final Map<String, AggregatedStats> mStats = new HashMap<String, AggregatedStats>();
+
+    /**
+     * Called when a notification has been posted.
+     */
+    public synchronized void registerPostedByApp(NotificationRecord notification) {
+        notification.stats.posttimeElapsedMs = SystemClock.elapsedRealtime();
+        for (AggregatedStats stats : getAggregatedStatsLocked(notification)) {
+            stats.numPostedByApp++;
+        }
+    }
+
+    /**
+     * Called when a notification has been updated.
+     */
+    public void registerUpdatedByApp(NotificationRecord notification) {
+        for (AggregatedStats stats : getAggregatedStatsLocked(notification)) {
+            stats.numUpdatedByApp++;
+        }
+    }
+
+    /**
+     * Called when the originating app removed the notification programmatically.
+     */
+    public synchronized void registerRemovedByApp(NotificationRecord notification) {
+        for (AggregatedStats stats : getAggregatedStatsLocked(notification)) {
+            stats.numRemovedByApp++;
+            stats.collect(notification.stats);
+        }
+    }
+
+    /**
+     * Called when the user dismissed the notification via the UI.
+     */
+    public synchronized void registerDismissedByUser(NotificationRecord notification) {
+        notification.stats.onDismiss();
+        for (AggregatedStats stats : getAggregatedStatsLocked(notification)) {
+            stats.numDismissedByUser++;
+            stats.collect(notification.stats);
+        }
+    }
+
+    /**
+     * Called when the user clicked the notification in the UI.
+     */
+    public synchronized void registerClickedByUser(NotificationRecord notification) {
+        notification.stats.onClick();
+        for (AggregatedStats stats : getAggregatedStatsLocked(notification)) {
+            stats.numClickedByUser++;
+        }
+    }
+
+    /**
+     * Called when the notification is canceled because the user clicked it.
+     *
+     * <p>Called after {@link #registerClickedByUser(NotificationRecord)}.</p>
+     */
+    public synchronized void registerCancelDueToClick(NotificationRecord notification) {
+        // No explicit stats for this (the click has already been registered in
+        // registerClickedByUser), just make sure the single notification stats
+        // are folded up into aggregated stats.
+        for (AggregatedStats stats : getAggregatedStatsLocked(notification)) {
+            stats.collect(notification.stats);
+        }
+    }
+
+    /**
+     * Called when the notification is canceled due to unknown reasons.
+     *
+     * <p>Called for notifications of apps being uninstalled, for example.</p>
+     */
+    public synchronized void registerCancelUnknown(NotificationRecord notification) {
+        // Fold up individual stats.
+        for (AggregatedStats stats : getAggregatedStatsLocked(notification)) {
+            stats.collect(notification.stats);
+        }
+    }
+
+    // Locked by this.
+    private AggregatedStats[] getAggregatedStatsLocked(NotificationRecord record) {
+        StatusBarNotification n = record.sbn;
+
+        String user = String.valueOf(n.getUserId());
+        String userPackage = user + ":" + n.getPackageName();
+
+        // TODO: Use pool of arrays.
+        return new AggregatedStats[] {
+                getOrCreateAggregatedStatsLocked(user),
+                getOrCreateAggregatedStatsLocked(userPackage),
+                getOrCreateAggregatedStatsLocked(n.getKey()),
+        };
+    }
+
+    // Locked by this.
+    private AggregatedStats getOrCreateAggregatedStatsLocked(String key) {
+        AggregatedStats result = mStats.get(key);
+        if (result == null) {
+            result = new AggregatedStats(key);
+            mStats.put(key, result);
+        }
+        return result;
+    }
+
+    public synchronized void dump(PrintWriter pw, String indent) {
+        for (AggregatedStats as : mStats.values()) {
+            as.dump(pw, indent);
+        }
+    }
+
+    /**
+     * Aggregated notification stats.
+     */
+    private static class AggregatedStats {
+        public final String key;
+
+        // ---- Updated as the respective events occur.
+        public int numPostedByApp;
+        public int numUpdatedByApp;
+        public int numRemovedByApp;
+        public int numClickedByUser;
+        public int numDismissedByUser;
+
+        // ----  Updated when a notification is canceled.
+        public final Aggregate posttimeMs = new Aggregate();
+        public final Aggregate posttimeToDismissMs = new Aggregate();
+        public final Aggregate posttimeToFirstClickMs = new Aggregate();
+
+        public AggregatedStats(String key) {
+            this.key = key;
+        }
+
+        public void collect(SingleNotificationStats singleNotificationStats) {
+            posttimeMs.addSample(
+	            SystemClock.elapsedRealtime() - singleNotificationStats.posttimeElapsedMs);
+            if (singleNotificationStats.posttimeToDismissMs >= 0) {
+                posttimeToDismissMs.addSample(singleNotificationStats.posttimeToDismissMs);
+            }
+            if (singleNotificationStats.posttimeToFirstClickMs >= 0) {
+                posttimeToFirstClickMs.addSample(singleNotificationStats.posttimeToFirstClickMs);
+            }
+        }
+
+        public void dump(PrintWriter pw, String indent) {
+            pw.println(toStringWithIndent(indent));
+        }
+
+        @Override
+        public String toString() {
+            return toStringWithIndent("");
+        }
+
+        private String toStringWithIndent(String indent) {
+            return indent + "AggregatedStats{\n" +
+                    indent + "  key='" + key + "',\n" +
+                    indent + "  numPostedByApp=" + numPostedByApp + ",\n" +
+                    indent + "  numUpdatedByApp=" + numUpdatedByApp + ",\n" +
+                    indent + "  numRemovedByApp=" + numRemovedByApp + ",\n" +
+                    indent + "  numClickedByUser=" + numClickedByUser + ",\n" +
+                    indent + "  numDismissedByUser=" + numDismissedByUser + ",\n" +
+                    indent + "  posttimeMs=" + posttimeMs + ",\n" +
+                    indent + "  posttimeToDismissMs=" + posttimeToDismissMs + ",\n" +
+                    indent + "  posttimeToFirstClickMs=" + posttimeToFirstClickMs + ",\n" +
+                    indent + "}";
+        }
+    }
+
+    /**
+     * Tracks usage of an individual notification that is currently active.
+     */
+    public static class SingleNotificationStats {
+        /** SystemClock.elapsedRealtime() when the notification was posted. */
+        public long posttimeElapsedMs = -1;
+        /** Elapsed time since the notification was posted until it was first clicked, or -1. */
+        public long posttimeToFirstClickMs = -1;
+        /** Elpased time since the notification was posted until it was dismissed by the user. */
+        public long posttimeToDismissMs = -1;
+
+        /**
+         * Called when the user clicked the notification.
+         */
+        public void onClick() {
+            if (posttimeToFirstClickMs < 0) {
+                posttimeToFirstClickMs = SystemClock.elapsedRealtime() - posttimeElapsedMs;
+            }
+        }
+
+        /**
+         * Called when the user removed the notification.
+         */
+        public void onDismiss() {
+            if (posttimeToDismissMs < 0) {
+                posttimeToDismissMs = SystemClock.elapsedRealtime() - posttimeElapsedMs;
+            }
+        }
+
+        @Override
+        public String toString() {
+            return "SingleNotificationStats{" +
+                    "posttimeElapsedMs=" + posttimeElapsedMs +
+                    ", posttimeToFirstClickMs=" + posttimeToFirstClickMs +
+                    ", posttimeToDismissMs=" + posttimeToDismissMs +
+                    '}';
+        }
+    }
+
+    /**
+     * Aggregates long samples to sum and averages.
+     */
+    public static class Aggregate {
+        long numSamples;
+        double avg;
+        double sum2;
+        double var;
+
+        public void addSample(long sample) {
+            // Welford's "Method for Calculating Corrected Sums of Squares"
+            // http://www.jstor.org/stable/1266577?seq=2
+            numSamples++;
+            final double n = numSamples;
+            final double delta = sample - avg;
+            avg += (1.0 / n) * delta;
+            sum2 += ((n - 1) / n) * delta * delta;
+            final double divisor = numSamples == 1 ? 1.0 : n - 1.0;
+            var = sum2 / divisor;
+        }
+
+        @Override
+        public String toString() {
+            return "Aggregate{" +
+                    "numSamples=" + numSamples +
+                    ", avg=" + avg +
+                    ", var=" + var +
+                    '}';
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
new file mode 100644
index 0000000..154ac96
--- /dev/null
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -0,0 +1,345 @@
+/**
+ * Copyright (c) 2014, 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.android.server.notification;
+
+import android.app.AlarmManager;
+import android.app.AppOpsManager;
+import android.app.Notification;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.content.res.XmlResourceParser;
+import android.database.ContentObserver;
+import android.media.AudioManager;
+import android.net.Uri;
+import android.os.Handler;
+import android.os.IBinder;
+import android.provider.Settings.Global;
+import android.service.notification.ZenModeConfig;
+import android.util.Slog;
+
+import com.android.internal.R;
+
+import libcore.io.IoUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * NotificationManagerService helper for functionality related to zen mode.
+ */
+public class ZenModeHelper {
+    private static final String TAG = "ZenModeHelper";
+
+    private static final String ACTION_ENTER_ZEN = "enter_zen";
+    private static final int REQUEST_CODE_ENTER = 100;
+    private static final String ACTION_EXIT_ZEN = "exit_zen";
+    private static final int REQUEST_CODE_EXIT = 101;
+    private static final String EXTRA_TIME = "time";
+
+    private final Context mContext;
+    private final Handler mHandler;
+    private final SettingsObserver mSettingsObserver;
+    private final AppOpsManager mAppOps;
+    private final ZenModeConfig mDefaultConfig;
+    private final ArrayList<Callback> mCallbacks = new ArrayList<Callback>();
+
+    private int mZenMode;
+    private ZenModeConfig mConfig;
+
+    // temporary, until we update apps to provide metadata
+    private static final Set<String> CALL_PACKAGES = new HashSet<String>(Arrays.asList(
+            "com.google.android.dialer",
+            "com.android.phone"
+            ));
+    private static final Set<String> MESSAGE_PACKAGES = new HashSet<String>(Arrays.asList(
+            "com.google.android.talk",
+            "com.android.mms"
+            ));
+    private static final Set<String> ALARM_PACKAGES = new HashSet<String>(Arrays.asList(
+            "com.google.android.deskclock"
+            ));
+
+    public ZenModeHelper(Context context, Handler handler) {
+        mContext = context;
+        mHandler = handler;
+        mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
+        mDefaultConfig = readDefaultConfig(context.getResources());
+        mConfig = mDefaultConfig;
+        mSettingsObserver = new SettingsObserver(mHandler);
+        mSettingsObserver.observe();
+
+        final IntentFilter filter = new IntentFilter();
+        filter.addAction(ACTION_ENTER_ZEN);
+        filter.addAction(ACTION_EXIT_ZEN);
+        mContext.registerReceiver(new ZenBroadcastReceiver(), filter);
+    }
+
+    public static ZenModeConfig readDefaultConfig(Resources resources) {
+        XmlResourceParser parser = null;
+        try {
+            parser = resources.getXml(R.xml.default_zen_mode_config);
+            while (parser.next() != XmlPullParser.END_DOCUMENT) {
+                final ZenModeConfig config = ZenModeConfig.readXml(parser);
+                if (config != null) return config;
+            }
+        } catch (Exception e) {
+            Slog.w(TAG, "Error reading default zen mode config from resource", e);
+        } finally {
+            IoUtils.closeQuietly(parser);
+        }
+        return new ZenModeConfig();
+    }
+
+    public void addCallback(Callback callback) {
+        mCallbacks.add(callback);
+    }
+
+    public boolean shouldIntercept(String pkg, Notification n) {
+        if (mZenMode != Global.ZEN_MODE_OFF) {
+            if (isAlarm(pkg, n)) {
+                return false;
+            }
+            if (isCall(pkg, n)) {
+                return !mConfig.allowCalls;
+            }
+            if (isMessage(pkg, n)) {
+                return !mConfig.allowMessages;
+            }
+            return true;
+        }
+        return false;
+    }
+
+    public int getZenMode() {
+        return mZenMode;
+    }
+
+    public void setZenMode(int zenModeValue) {
+        Global.putInt(mContext.getContentResolver(), Global.ZEN_MODE, zenModeValue);
+    }
+
+    public void updateZenMode() {
+        final int mode = Global.getInt(mContext.getContentResolver(),
+                Global.ZEN_MODE, Global.ZEN_MODE_OFF);
+        if (mode != mZenMode) {
+            Slog.d(TAG, String.format("updateZenMode: %s -> %s",
+                    Global.zenModeToString(mZenMode),
+                    Global.zenModeToString(mode)));
+        }
+        mZenMode = mode;
+        final boolean zen = mZenMode != Global.ZEN_MODE_OFF;
+        final String[] exceptionPackages = null; // none (for now)
+
+        // call restrictions
+        final boolean muteCalls = zen && !mConfig.allowCalls;
+        mAppOps.setRestriction(AppOpsManager.OP_VIBRATE, AudioManager.STREAM_RING,
+                muteCalls ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED,
+                exceptionPackages);
+        mAppOps.setRestriction(AppOpsManager.OP_PLAY_AUDIO, AudioManager.STREAM_RING,
+                muteCalls ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED,
+                exceptionPackages);
+
+        // restrict vibrations with no hints
+        mAppOps.setRestriction(AppOpsManager.OP_VIBRATE, AudioManager.USE_DEFAULT_STREAM_TYPE,
+                zen ? AppOpsManager.MODE_IGNORED : AppOpsManager.MODE_ALLOWED,
+                exceptionPackages);
+        dispatchOnZenModeChanged();
+    }
+
+    public boolean allowDisable(int what, IBinder token, String pkg) {
+        if (isCall(pkg, null)) {
+            return mZenMode == Global.ZEN_MODE_OFF || mConfig.allowCalls;
+        }
+        return true;
+    }
+
+    public void dump(PrintWriter pw, String prefix) {
+        pw.print(prefix); pw.print("mZenMode=");
+        pw.println(Global.zenModeToString(mZenMode));
+        pw.print(prefix); pw.print("mConfig="); pw.println(mConfig);
+        pw.print(prefix); pw.print("mDefaultConfig="); pw.println(mDefaultConfig);
+    }
+
+    public void readXml(XmlPullParser parser) throws XmlPullParserException, IOException {
+        final ZenModeConfig config = ZenModeConfig.readXml(parser);
+        if (config != null) {
+            setConfig(config);
+        }
+    }
+
+    public void writeXml(XmlSerializer out) throws IOException {
+        mConfig.writeXml(out);
+    }
+
+    public ZenModeConfig getConfig() {
+        return mConfig;
+    }
+
+    public boolean setConfig(ZenModeConfig config) {
+        if (config == null || !config.isValid()) return false;
+        if (config.equals(mConfig)) return true;
+        mConfig = config;
+        Slog.d(TAG, "mConfig=" + mConfig);
+        dispatchOnConfigChanged();
+        final String val = Integer.toString(mConfig.hashCode());
+        Global.putString(mContext.getContentResolver(), Global.ZEN_MODE_CONFIG_ETAG, val);
+        updateAlarms();
+        updateZenMode();
+        return true;
+    }
+
+    private void dispatchOnConfigChanged() {
+        for (Callback callback : mCallbacks) {
+            callback.onConfigChanged();
+        }
+    }
+
+    private void dispatchOnZenModeChanged() {
+        for (Callback callback : mCallbacks) {
+            callback.onZenModeChanged();
+        }
+    }
+
+    private boolean isAlarm(String pkg, Notification n) {
+        return ALARM_PACKAGES.contains(pkg);
+    }
+
+    private boolean isCall(String pkg, Notification n) {
+        return CALL_PACKAGES.contains(pkg);
+    }
+
+    private boolean isMessage(String pkg, Notification n) {
+        return MESSAGE_PACKAGES.contains(pkg);
+    }
+
+    private void updateAlarms() {
+        updateAlarm(ACTION_ENTER_ZEN, REQUEST_CODE_ENTER,
+                mConfig.sleepStartHour, mConfig.sleepStartMinute);
+        updateAlarm(ACTION_EXIT_ZEN, REQUEST_CODE_EXIT,
+                mConfig.sleepEndHour, mConfig.sleepEndMinute);
+    }
+
+    private void updateAlarm(String action, int requestCode, int hr, int min) {
+        final AlarmManager alarms = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+        final long now = System.currentTimeMillis();
+        final Calendar c = Calendar.getInstance();
+        c.setTimeInMillis(now);
+        c.set(Calendar.HOUR_OF_DAY, hr);
+        c.set(Calendar.MINUTE, min);
+        c.set(Calendar.SECOND, 0);
+        c.set(Calendar.MILLISECOND, 0);
+        if (c.getTimeInMillis() <= now) {
+            c.add(Calendar.DATE, 1);
+        }
+        final long time = c.getTimeInMillis();
+        final PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, requestCode,
+                new Intent(action).putExtra(EXTRA_TIME, time), PendingIntent.FLAG_UPDATE_CURRENT);
+        alarms.cancel(pendingIntent);
+        if (mConfig.sleepMode != null) {
+            Slog.d(TAG, String.format("Scheduling %s for %s, %s in the future, now=%s",
+                    action, ts(time), time - now, ts(now)));
+            alarms.setExact(AlarmManager.RTC_WAKEUP, time, pendingIntent);
+        }
+    }
+
+    private static String ts(long time) {
+        return new Date(time) + " (" + time + ")";
+    }
+
+    public static boolean isWeekend(long time, int offsetDays) {
+        final Calendar c = Calendar.getInstance();
+        c.setTimeInMillis(time);
+        if (offsetDays != 0) {
+            c.add(Calendar.DATE, offsetDays);
+        }
+        final int day = c.get(Calendar.DAY_OF_WEEK);
+        return day == Calendar.SATURDAY || day == Calendar.SUNDAY;
+    }
+
+    private class SettingsObserver extends ContentObserver {
+        private final Uri ZEN_MODE = Global.getUriFor(Global.ZEN_MODE);
+
+        public SettingsObserver(Handler handler) {
+            super(handler);
+        }
+
+        public void observe() {
+            final ContentResolver resolver = mContext.getContentResolver();
+            resolver.registerContentObserver(ZEN_MODE, false /*notifyForDescendents*/, this);
+            update(null);
+        }
+
+        @Override
+        public void onChange(boolean selfChange, Uri uri) {
+            update(uri);
+        }
+
+        public void update(Uri uri) {
+            if (ZEN_MODE.equals(uri)) {
+                updateZenMode();
+            }
+        }
+    }
+
+    private class ZenBroadcastReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (ACTION_ENTER_ZEN.equals(intent.getAction())) {
+                setZenMode(intent, 1, Global.ZEN_MODE_ON);
+            } else if (ACTION_EXIT_ZEN.equals(intent.getAction())) {
+                setZenMode(intent, 0, Global.ZEN_MODE_OFF);
+            }
+        }
+
+        private void setZenMode(Intent intent, int wkendOffsetDays, int zenModeValue) {
+            final long schTime = intent.getLongExtra(EXTRA_TIME, 0);
+            final long now = System.currentTimeMillis();
+            Slog.d(TAG, String.format("%s scheduled for %s, fired at %s, delta=%s",
+                    intent.getAction(), ts(schTime), ts(now), now - schTime));
+
+            final boolean skip = ZenModeConfig.SLEEP_MODE_WEEKNIGHTS.equals(mConfig.sleepMode) &&
+                    isWeekend(schTime, wkendOffsetDays);
+
+            if (skip) {
+                Slog.d(TAG, "Skipping zen mode update for the weekend");
+            } else {
+                ZenModeHelper.this.setZenMode(zenModeValue);
+            }
+            updateAlarms();
+        }
+    }
+
+    public static class Callback {
+        void onConfigChanged() {}
+        void onZenModeChanged() {}
+    }
+}
diff --git a/services/core/java/com/android/server/pm/ForwardingIntentFilter.java b/services/core/java/com/android/server/pm/ForwardingIntentFilter.java
new file mode 100644
index 0000000..aba796b
--- /dev/null
+++ b/services/core/java/com/android/server/pm/ForwardingIntentFilter.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2014, 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.android.server.pm;
+
+import com.android.internal.util.XmlUtils;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+import android.content.IntentFilter;
+import android.util.Log;
+import java.io.IOException;
+import android.os.UserHandle;
+
+/**
+ * The {@link PackageManagerService} maintains some {@link ForwardingIntentFilter}s for every user.
+ * If an {@link Intent} matches the {@link ForwardingIntentFilter}, then it can be forwarded to the
+ * {@link #mUserIdDest}.
+ */
+class ForwardingIntentFilter extends IntentFilter {
+    private static final String ATTR_USER_ID_DEST = "userIdDest";
+    private static final String ATTR_FILTER = "filter";
+
+    private static final String TAG = "ForwardingIntentFilter";
+
+    // If the intent matches the IntentFilter, then it can be forwarded to this userId.
+    final int mUserIdDest;
+
+    ForwardingIntentFilter(IntentFilter filter, int userIdDest) {
+        super(filter);
+        mUserIdDest = userIdDest;
+    }
+
+    public int getUserIdDest() {
+        return mUserIdDest;
+    }
+
+    ForwardingIntentFilter(XmlPullParser parser) throws XmlPullParserException, IOException {
+        String userIdDestString = parser.getAttributeValue(null, ATTR_USER_ID_DEST);
+        if (userIdDestString == null) {
+            String msg = "Missing element under " + TAG +": " + ATTR_USER_ID_DEST + " at " +
+                    parser.getPositionDescription();
+            PackageManagerService.reportSettingsProblem(Log.WARN, msg);
+            mUserIdDest = UserHandle.USER_NULL;
+        } else {
+            mUserIdDest = Integer.parseInt(userIdDestString);
+        }
+        int outerDepth = parser.getDepth();
+        String tagName = parser.getName();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            tagName = parser.getName();
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            } else if (type == XmlPullParser.START_TAG) {
+                if (tagName.equals(ATTR_FILTER)) {
+                    break;
+                } else {
+                    String msg = "Unknown element under " + Settings.TAG_FORWARDING_INTENT_FILTERS
+                            + ": " + tagName + " at " + parser.getPositionDescription();
+                    PackageManagerService.reportSettingsProblem(Log.WARN, msg);
+                    XmlUtils.skipCurrentTag(parser);
+                }
+            }
+        }
+        if (tagName.equals(ATTR_FILTER)) {
+            readFromXml(parser);
+        } else {
+            String msg = "Missing element under " + TAG + ": " + ATTR_FILTER +
+                    " at " + parser.getPositionDescription();
+            PackageManagerService.reportSettingsProblem(Log.WARN, msg);
+            XmlUtils.skipCurrentTag(parser);
+        }
+    }
+
+    public void writeToXml(XmlSerializer serializer) throws IOException {
+        serializer.attribute(null, ATTR_USER_ID_DEST, Integer.toString(mUserIdDest));
+        serializer.startTag(null, ATTR_FILTER);
+            super.writeToXml(serializer);
+        serializer.endTag(null, ATTR_FILTER);
+    }
+
+    @Override
+    public String toString() {
+        return "ForwardingIntentFilter{0x" + Integer.toHexString(System.identityHashCode(this))
+                + " " + Integer.toString(mUserIdDest) + "}";
+    }
+}
diff --git a/services/core/java/com/android/server/pm/ForwardingIntentResolver.java b/services/core/java/com/android/server/pm/ForwardingIntentResolver.java
new file mode 100644
index 0000000..1616395
--- /dev/null
+++ b/services/core/java/com/android/server/pm/ForwardingIntentResolver.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2014, 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.android.server.pm;
+
+
+import java.io.PrintWriter;
+import com.android.server.IntentResolver;
+import java.util.List;
+
+/**
+ * Used to find a list of {@link ForwardingIntentFilter}s that match an intent.
+ */
+class ForwardingIntentResolver
+        extends IntentResolver<ForwardingIntentFilter, ForwardingIntentFilter> {
+    @Override
+    protected ForwardingIntentFilter[] newArray(int size) {
+        return new ForwardingIntentFilter[size];
+    }
+
+    @Override
+    protected boolean isPackageForFilter(String packageName, ForwardingIntentFilter filter) {
+        return false;
+    }
+
+    @Override
+    protected void sortResults(List<ForwardingIntentFilter> results) {
+        //We don't sort the results
+    }
+}
diff --git a/services/core/java/com/android/server/pm/KeySetManager.java b/services/core/java/com/android/server/pm/KeySetManager.java
index 66dc1d1..1056cd0 100644
--- a/services/core/java/com/android/server/pm/KeySetManager.java
+++ b/services/core/java/com/android/server/pm/KeySetManager.java
@@ -20,13 +20,11 @@
 import android.content.pm.PackageParser;
 import android.os.Binder;
 import android.util.Base64;
-import android.util.Log;
 import android.util.LongSparseArray;
 
 import java.io.IOException;
 import java.io.PrintWriter;
 import java.security.PublicKey;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java
new file mode 100644
index 0000000..48e9737
--- /dev/null
+++ b/services/core/java/com/android/server/pm/LauncherAppsService.java
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2014 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.android.server.pm;
+
+import android.app.AppGlobals;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ILauncherApps;
+import android.content.pm.IOnAppsChangedListener;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageInfo;
+import android.content.pm.ResolveInfo;
+import android.content.pm.UserInfo;
+import android.graphics.Rect;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.IInterface;
+import android.os.RemoteCallbackList;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.util.Log;
+import android.util.Slog;
+
+import com.android.internal.content.PackageMonitor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Service that manages requests and callbacks for launchers that support
+ * managed profiles. 
+ */
+public class LauncherAppsService extends ILauncherApps.Stub {
+    private static final boolean DEBUG = false;
+    private static final String TAG = "LauncherAppsService";
+    private final Context mContext;
+    private final PackageManager mPm;
+    private final UserManager mUm;
+    private final PackageCallbackList<IOnAppsChangedListener> mListeners
+            = new PackageCallbackList<IOnAppsChangedListener>();
+
+    private MyPackageMonitor mPackageMonitor = new MyPackageMonitor();
+
+    public LauncherAppsService(Context context) {
+        mContext = context;
+        mPm = mContext.getPackageManager();
+        mUm = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+    }
+
+    /*
+     * @see android.content.pm.ILauncherApps#addOnAppsChangedListener(
+     *          android.content.pm.IOnAppsChangedListener)
+     */
+    @Override
+    public void addOnAppsChangedListener(IOnAppsChangedListener listener) throws RemoteException {
+        synchronized (mListeners) {
+            if (DEBUG) {
+                Log.d(TAG, "Adding listener from " + Binder.getCallingUserHandle());
+            }
+            if (mListeners.getRegisteredCallbackCount() == 0) {
+                if (DEBUG) {
+                    Log.d(TAG, "Starting package monitoring");
+                }
+                startWatchingPackageBroadcasts();
+            }
+            mListeners.unregister(listener);
+            mListeners.register(listener, Binder.getCallingUserHandle());
+        }
+    }
+
+    /*
+     * @see android.content.pm.ILauncherApps#removeOnAppsChangedListener(
+     *          android.content.pm.IOnAppsChangedListener)
+     */
+    @Override
+    public void removeOnAppsChangedListener(IOnAppsChangedListener listener)
+            throws RemoteException {
+        synchronized (mListeners) {
+            if (DEBUG) {
+                Log.d(TAG, "Removing listener from " + Binder.getCallingUserHandle());
+            }
+            mListeners.unregister(listener);
+            if (mListeners.getRegisteredCallbackCount() == 0) {
+                stopWatchingPackageBroadcasts();
+            }
+        }
+    }
+
+    /**
+     * Register a receiver to watch for package broadcasts
+     */
+    private void startWatchingPackageBroadcasts() {
+        mPackageMonitor.register(mContext, null, UserHandle.ALL, true);
+    }
+
+    /**
+     * Unregister package broadcast receiver
+     */
+    private void stopWatchingPackageBroadcasts() {
+        if (DEBUG) {
+            Log.d(TAG, "Stopped watching for packages");
+        }
+        mPackageMonitor.unregister();
+    }
+
+    void checkCallbackCount() {
+        synchronized (mListeners) {
+            if (DEBUG) {
+                Log.d(TAG, "Callback count = " + mListeners.getRegisteredCallbackCount());
+            }
+            if (mListeners.getRegisteredCallbackCount() == 0) {
+                stopWatchingPackageBroadcasts();
+            }
+        }
+    }
+
+    /**
+     * Checks if the caller is in the same group as the userToCheck.
+     */
+    private void ensureInUserProfiles(UserHandle userToCheck, String message) {
+        final int callingUserId = UserHandle.getCallingUserId();
+        final int targetUserId = userToCheck.getIdentifier();
+
+        if (targetUserId == callingUserId) return;
+
+        long ident = Binder.clearCallingIdentity();
+        try {
+            UserInfo callingUserInfo = mUm.getUserInfo(callingUserId);
+            UserInfo targetUserInfo = mUm.getUserInfo(targetUserId);
+            if (targetUserInfo == null
+                    || targetUserInfo.profileGroupId == UserInfo.NO_PROFILE_GROUP_ID
+                    || targetUserInfo.profileGroupId != callingUserInfo.profileGroupId) {
+                throw new SecurityException(message);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public List<ResolveInfo> getLauncherActivities(String packageName, UserHandle user)
+            throws RemoteException {
+        ensureInUserProfiles(user, "Cannot retrieve activities for unrelated profile " + user);
+
+        final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
+        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+        mainIntent.setPackage(packageName);
+        long ident = Binder.clearCallingIdentity();
+        try {
+            List<ResolveInfo> apps = mPm.queryIntentActivitiesAsUser(mainIntent, 0,
+                    user.getIdentifier());
+            return apps;
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public ResolveInfo resolveActivity(Intent intent, UserHandle user)
+            throws RemoteException {
+        ensureInUserProfiles(user, "Cannot resolve activity for unrelated profile " + user);
+
+        long ident = Binder.clearCallingIdentity();
+        try {
+            ResolveInfo app = mPm.resolveActivityAsUser(intent, 0, user.getIdentifier());
+            return app;
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public boolean isPackageEnabled(String packageName, UserHandle user)
+            throws RemoteException {
+        ensureInUserProfiles(user, "Cannot check package for unrelated profile " + user);
+        long ident = Binder.clearCallingIdentity();
+        try {
+            IPackageManager pm = AppGlobals.getPackageManager();
+            PackageInfo info = pm.getPackageInfo(packageName, 0, user.getIdentifier());
+            return info != null && info.applicationInfo.enabled;
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public boolean isActivityEnabled(ComponentName component, UserHandle user)
+            throws RemoteException {
+        ensureInUserProfiles(user, "Cannot check component for unrelated profile " + user);
+        long ident = Binder.clearCallingIdentity();
+        try {
+            IPackageManager pm = AppGlobals.getPackageManager();
+            ActivityInfo info = pm.getActivityInfo(component, 0, user.getIdentifier());
+            return info != null && info.isEnabled();
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    @Override
+    public void startActivityAsUser(ComponentName component, Rect sourceBounds,
+            Bundle opts, UserHandle user) throws RemoteException {
+        ensureInUserProfiles(user, "Cannot start activity for unrelated profile " + user);
+
+        Intent launchIntent = new Intent(Intent.ACTION_MAIN);
+        launchIntent.addCategory(Intent.CATEGORY_LAUNCHER);
+        launchIntent.setComponent(component);
+        launchIntent.setSourceBounds(sourceBounds);
+        launchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+        final int callingUserId = UserHandle.getCallingUserId();
+        long ident = Binder.clearCallingIdentity();
+        try {
+            mContext.startActivityAsUser(launchIntent, opts, user);
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    private class MyPackageMonitor extends PackageMonitor {
+
+        /** Checks if user is a profile of or same as listeningUser. */
+        private boolean isProfileOf(UserHandle user, UserHandle listeningUser, String debugMsg) {
+            if (user.getIdentifier() == listeningUser.getIdentifier()) {
+                if (DEBUG) Log.d(TAG, "Delivering msg to same user " + debugMsg);
+                return true;
+            }
+            long ident = Binder.clearCallingIdentity();
+            try {
+                UserInfo userInfo = mUm.getUserInfo(user.getIdentifier());
+                UserInfo listeningUserInfo = mUm.getUserInfo(listeningUser.getIdentifier());
+                if (userInfo == null || listeningUserInfo == null
+                        || userInfo.profileGroupId == UserInfo.NO_PROFILE_GROUP_ID
+                        || userInfo.profileGroupId != listeningUserInfo.profileGroupId) {
+                    if (DEBUG) {
+                        Log.d(TAG, "Not delivering msg from " + user + " to " + listeningUser + ":"
+                                + debugMsg);
+                    }
+                    return false;
+                } else {
+                    if (DEBUG) {
+                        Log.d(TAG, "Delivering msg from " + user + " to " + listeningUser + ":"
+                                + debugMsg);
+                    }
+                    return true;
+                }
+            } finally {
+                Binder.restoreCallingIdentity(ident);
+            }
+        }
+
+        @Override
+        public void onPackageAdded(String packageName, int uid) {
+            UserHandle user = new UserHandle(getChangingUserId());
+            final int n = mListeners.beginBroadcast();
+            for (int i = 0; i < n; i++) {
+                IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
+                UserHandle listeningUser = (UserHandle) mListeners.getBroadcastCookie(i);
+                if (!isProfileOf(user, listeningUser, "onPackageAdded")) continue;
+                try {
+                    listener.onPackageAdded(user, packageName);
+                } catch (RemoteException re) {
+                    Slog.d(TAG, "Callback failed ", re);
+                }
+            }
+            mListeners.finishBroadcast();
+
+            super.onPackageAdded(packageName, uid);
+        }
+
+        @Override
+        public void onPackageRemoved(String packageName, int uid) {
+            UserHandle user = new UserHandle(getChangingUserId());
+            final int n = mListeners.beginBroadcast();
+            for (int i = 0; i < n; i++) {
+                IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
+                UserHandle listeningUser = (UserHandle) mListeners.getBroadcastCookie(i);
+                if (!isProfileOf(user, listeningUser, "onPackageRemoved")) continue;
+                try {
+                    listener.onPackageRemoved(user, packageName);
+                } catch (RemoteException re) {
+                    Slog.d(TAG, "Callback failed ", re);
+                }
+            }
+            mListeners.finishBroadcast();
+
+            super.onPackageRemoved(packageName, uid);
+        }
+
+        @Override
+        public void onPackageModified(String packageName) {
+            UserHandle user = new UserHandle(getChangingUserId());
+            final int n = mListeners.beginBroadcast();
+            for (int i = 0; i < n; i++) {
+                IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
+                UserHandle listeningUser = (UserHandle) mListeners.getBroadcastCookie(i);
+                if (!isProfileOf(user, listeningUser, "onPackageModified")) continue;
+                try {
+                    listener.onPackageChanged(user, packageName);
+                } catch (RemoteException re) {
+                    Slog.d(TAG, "Callback failed ", re);
+                }
+            }
+            mListeners.finishBroadcast();
+
+            super.onPackageModified(packageName);
+        }
+
+        @Override
+        public void onPackagesAvailable(String[] packages) {
+            UserHandle user = new UserHandle(getChangingUserId());
+            final int n = mListeners.beginBroadcast();
+            for (int i = 0; i < n; i++) {
+                IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
+                UserHandle listeningUser = (UserHandle) mListeners.getBroadcastCookie(i);
+                if (!isProfileOf(user, listeningUser, "onPackagesAvailable")) continue;
+                try {
+                    listener.onPackagesAvailable(user, packages, isReplacing());
+                } catch (RemoteException re) {
+                    Slog.d(TAG, "Callback failed ", re);
+                }
+            }
+            mListeners.finishBroadcast();
+
+            super.onPackagesAvailable(packages);
+        }
+
+        @Override
+        public void onPackagesUnavailable(String[] packages) {
+            UserHandle user = new UserHandle(getChangingUserId());
+            final int n = mListeners.beginBroadcast();
+            for (int i = 0; i < n; i++) {
+                IOnAppsChangedListener listener = mListeners.getBroadcastItem(i);
+                UserHandle listeningUser = (UserHandle) mListeners.getBroadcastCookie(i);
+                if (!isProfileOf(user, listeningUser, "onPackagesUnavailable")) continue;
+                try {
+                    listener.onPackagesUnavailable(user, packages, isReplacing());
+                } catch (RemoteException re) {
+                    Slog.d(TAG, "Callback failed ", re);
+                }
+            }
+            mListeners.finishBroadcast();
+
+            super.onPackagesUnavailable(packages);
+        }
+
+    }
+
+    class PackageCallbackList<T extends IInterface> extends RemoteCallbackList<T> {
+        @Override
+        public void onCallbackDied(T callback, Object cookie) {
+            checkCallbackCount();
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/pm/PackageKeySetData.java b/services/core/java/com/android/server/pm/PackageKeySetData.java
index cb60621..ebded28 100644
--- a/services/core/java/com/android/server/pm/PackageKeySetData.java
+++ b/services/core/java/com/android/server/pm/PackageKeySetData.java
@@ -18,9 +18,7 @@
 
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.Map;
-import java.util.Set;
 
 public class PackageKeySetData {
 
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index b0428cb..a133d42 100755
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -28,6 +28,8 @@
 import static android.system.OsConstants.S_IXGRP;
 import static android.system.OsConstants.S_IROTH;
 import static android.system.OsConstants.S_IXOTH;
+import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_USER_OWNER;
+import static com.android.internal.app.IntentForwarderActivity.FORWARD_INTENT_TO_MANAGED_PROFILE;
 import static com.android.internal.util.ArrayUtils.appendInt;
 import static com.android.internal.util.ArrayUtils.removeInt;
 
@@ -70,6 +72,7 @@
 import android.content.pm.IPackageDataObserver;
 import android.content.pm.IPackageDeleteObserver;
 import android.content.pm.IPackageInstallObserver;
+import android.content.pm.IPackageInstallObserver2;
 import android.content.pm.IPackageManager;
 import android.content.pm.IPackageMoveObserver;
 import android.content.pm.IPackageStatsObserver;
@@ -103,7 +106,6 @@
 import android.os.FileObserver;
 import android.os.FileUtils;
 import android.os.Handler;
-import android.os.HandlerThread;
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
@@ -145,6 +147,8 @@
 import java.io.PrintWriter;
 import java.security.NoSuchAlgorithmException;
 import java.security.PublicKey;
+import java.security.cert.Certificate;
+import java.security.cert.CertificateEncodingException;
 import java.security.cert.CertificateException;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
@@ -164,6 +168,7 @@
 import libcore.io.IoUtils;
 
 import com.android.internal.R;
+import com.android.server.pm.Settings.DatabaseVersion;
 import com.android.server.storage.DeviceStorageMonitorInternal;
 
 /**
@@ -199,7 +204,8 @@
     private static final int BLUETOOTH_UID = Process.BLUETOOTH_UID;
     private static final int SHELL_UID = Process.SHELL_UID;
 
-    private static final boolean GET_CERTIFICATES = true;
+    // Cap the size of permission trees that 3rd party apps can define
+    private static final int MAX_PERMISSION_TREE_FOOTPRINT = 32768;     // characters of text
 
     private static final int REMOVE_EVENTS =
         FileObserver.CLOSE_WRITE | FileObserver.DELETE | FileObserver.MOVED_FROM;
@@ -267,18 +273,16 @@
 
     static final String mTempContainerPrefix = "smdl2tmp";
 
-    final ServiceThread mHandlerThread;
-
     private static String sPreferredInstructionSet;
 
+    final ServiceThread mHandlerThread;
+
     private static final String IDMAP_PREFIX = "/data/resource-cache/";
     private static final String IDMAP_SUFFIX = "@idmap";
 
     final PackageHandler mHandler;
 
     final int mSdkVersion = Build.VERSION.SDK_INT;
-    final String mSdkCodename = "REL".equals(Build.VERSION.CODENAME)
-            ? null : Build.VERSION.CODENAME;
 
     final Context mContext;
     final boolean mFactoryTest;
@@ -306,12 +310,15 @@
     // This is the object monitoring the privileged system app dir.
     final FileObserver mPrivilegedInstallObserver;
 
-    // This is the object monitoring the system app dir.
+    // This is the object monitoring the vendor app dir.
     final FileObserver mVendorInstallObserver;
 
     // This is the object monitoring the vendor overlay package dir.
     final FileObserver mVendorOverlayInstallObserver;
 
+    // This is the object monitoring the OEM app dir.
+    final FileObserver mOemInstallObserver;
+
     // This is the object monitoring mAppInstallDir.
     final FileObserver mAppInstallObserver;
 
@@ -338,7 +345,7 @@
 
     // Lock for state used when installing and doing other long running
     // operations.  Methods that must be called with this lock held have
-    // the prefix "LI".
+    // the suffix "LI".
     final Object mInstallLock = new Object();
 
     // These are the directories in the 3rd party applications installed dir
@@ -697,7 +704,7 @@
                                     // Just post MCS_BOUND message to trigger processing
                                     // of next pending install.
                                     if (DEBUG_SD_INSTALL) Log.i(TAG,
-                                            "Posting MCS_BOUND for next woek");
+                                            "Posting MCS_BOUND for next work");
                                     mHandler.sendEmptyMessage(MCS_BOUND);
                                 }
                             }
@@ -917,6 +924,14 @@
                                 Slog.i(TAG, "Observer no longer exists.");
                             }
                         }
+                        if (args.observer2 != null) {
+                            try {
+                                Bundle extras = extrasForInstallResult(res);
+                                args.observer2.packageInstalled(res.name, extras, res.returnCode);
+                            } catch (RemoteException e) {
+                                Slog.i(TAG, "Observer no longer exists.");
+                            }
+                        }
                     } else {
                         Slog.e(TAG, "Bogus post-install token " + msg.arg1);
                     }
@@ -1045,6 +1060,21 @@
         }
     }
 
+    Bundle extrasForInstallResult(PackageInstalledInfo res) {
+        Bundle extras = null;
+        switch (res.returnCode) {
+            case PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION: {
+                extras = new Bundle();
+                extras.putString(PackageManager.EXTRA_FAILURE_EXISTING_PERMISSION,
+                        res.origPermission);
+                extras.putString(PackageManager.EXTRA_FAILURE_EXISTING_PACKAGE,
+                        res.origPackage);
+                break;
+            }
+        }
+        return extras;
+    }
+
     void scheduleWriteSettingsLocked() {
         if (!mHandler.hasMessages(WRITE_SETTINGS)) {
             mHandler.sendEmptyMessageDelayed(WRITE_SETTINGS, WRITE_SETTINGS_DELAY);
@@ -1164,7 +1194,12 @@
             sUserManager = new UserManagerService(context, this,
                     mInstallLock, mPackages);
 
-            readPermissions();
+            // Read permissions and features from system
+            readPermissions(Environment.buildPath(
+                    Environment.getRootDirectory(), "etc", "permissions"), false);
+            // Only read features from OEM
+            readPermissions(Environment.buildPath(
+                    Environment.getOemDirectory(), "etc", "permissions"), true);
 
             mFoundPolicyFile = SELinuxMMAC.readInstallPolicy();
 
@@ -1349,6 +1384,14 @@
             scanDirLI(vendorAppDir, PackageParser.PARSE_IS_SYSTEM
                     | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode, 0);
 
+            // Collect all OEM packages.
+            File oemAppDir = new File(Environment.getOemDirectory(), "app");
+            mOemInstallObserver = new AppDirObserver(
+                    oemAppDir.getPath(), OBSERVER_EVENTS, true, false);
+            mOemInstallObserver.startWatching();
+            scanDirLI(oemAppDir, PackageParser.PARSE_IS_SYSTEM
+                    | PackageParser.PARSE_IS_SYSTEM_DIR, scanMode, 0);
+
             if (DEBUG_UPGRADE) Log.v(TAG, "Running installd update commands");
             mInstaller.moveFiles();
 
@@ -1502,6 +1545,9 @@
                 mSettings.readDefaultPreferredAppsLPw(this, 0);
             }
 
+            // All the changes are done during package scanning.
+            mSettings.updateInternalDatabaseVersion();
+
             // can downgrade to reader
             mSettings.writeLPr();
 
@@ -1624,9 +1670,8 @@
         mSettings.removePackageLPw(ps.name);
     }
 
-    void readPermissions() {
+    void readPermissions(File libraryDir, boolean onlyFeatures) {
         // Read permissions from .../etc/permission directory.
-        File libraryDir = new File(Environment.getRootDirectory(), "etc/permissions");
         if (!libraryDir.exists() || !libraryDir.isDirectory()) {
             Slog.w(TAG, "No directory " + libraryDir + ", skipping");
             return;
@@ -1652,16 +1697,16 @@
                 continue;
             }
 
-            readPermissionsFromXml(f);
+            readPermissionsFromXml(f, onlyFeatures);
         }
 
         // Read permissions from .../etc/permissions/platform.xml last so it will take precedence
         final File permFile = new File(Environment.getRootDirectory(),
                 "etc/permissions/platform.xml");
-        readPermissionsFromXml(permFile);
+        readPermissionsFromXml(permFile, onlyFeatures);
     }
 
-    private void readPermissionsFromXml(File permFile) {
+    private void readPermissionsFromXml(File permFile, boolean onlyFeatures) {
         FileReader permReader = null;
         try {
             permReader = new FileReader(permFile);
@@ -1683,7 +1728,7 @@
                 }
 
                 String name = parser.getName();
-                if ("group".equals(name)) {
+                if ("group".equals(name) && !onlyFeatures) {
                     String gidStr = parser.getAttributeValue(null, "gid");
                     if (gidStr != null) {
                         int gid = Process.getGidForName(gidStr);
@@ -1695,7 +1740,7 @@
 
                     XmlUtils.skipCurrentTag(parser);
                     continue;
-                } else if ("permission".equals(name)) {
+                } else if ("permission".equals(name) && !onlyFeatures) {
                     String perm = parser.getAttributeValue(null, "name");
                     if (perm == null) {
                         Slog.w(TAG, "<permission> without name at "
@@ -1706,7 +1751,7 @@
                     perm = perm.intern();
                     readPermission(parser, perm);
 
-                } else if ("assign-permission".equals(name)) {
+                } else if ("assign-permission".equals(name) && !onlyFeatures) {
                     String perm = parser.getAttributeValue(null, "name");
                     if (perm == null) {
                         Slog.w(TAG, "<assign-permission> without name at "
@@ -1738,7 +1783,7 @@
                     perms.add(perm);
                     XmlUtils.skipCurrentTag(parser);
 
-                } else if ("library".equals(name)) {
+                } else if ("library".equals(name) && !onlyFeatures) {
                     String lname = parser.getAttributeValue(null, "name");
                     String lfile = parser.getAttributeValue(null, "file");
                     if (lname == null) {
@@ -2161,6 +2206,24 @@
     }
 
     @Override
+    public boolean activitySupportsIntent(ComponentName component, Intent intent,
+            String resolvedType) {
+        synchronized (mPackages) {
+            PackageParser.Activity a = mActivities.mActivities.get(component);
+            if (a == null) {
+                return false;
+            }
+            for (int i=0; i<a.intents.size(); i++) {
+                if (a.intents.get(i).match(intent.getAction(), resolvedType, intent.getScheme(),
+                        intent.getData(), intent.getCategories(), TAG) >= 0) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+    @Override
     public ActivityInfo getReceiverInfo(ComponentName component, int flags, int userId) {
         if (!sUserManager.exists(userId)) return null;
         enforceCrossUserPermission(Binder.getCallingUid(), userId, false, "get receiver info");
@@ -2378,7 +2441,35 @@
         //if (pi1.descriptionRes != pi2.descriptionRes) return false;
         return true;
     }
-    
+
+    int permissionInfoFootprint(PermissionInfo info) {
+        int size = info.name.length();
+        if (info.nonLocalizedLabel != null) size += info.nonLocalizedLabel.length();
+        if (info.nonLocalizedDescription != null) size += info.nonLocalizedDescription.length();
+        return size;
+    }
+
+    int calculateCurrentPermissionFootprintLocked(BasePermission tree) {
+        int size = 0;
+        for (BasePermission perm : mSettings.mPermissions.values()) {
+            if (perm.uid == tree.uid) {
+                size += perm.name.length() + permissionInfoFootprint(perm.perm.info);
+            }
+        }
+        return size;
+    }
+
+    void enforcePermissionCapLocked(PermissionInfo info, BasePermission tree) {
+        // We calculate the max size of permissions defined by this uid and throw
+        // if that plus the size of 'info' would exceed our stated maximum.
+        if (tree.uid != Process.SYSTEM_UID) {
+            final int curTreeSize = calculateCurrentPermissionFootprintLocked(tree);
+            if (curTreeSize + permissionInfoFootprint(info) > MAX_PERMISSION_TREE_FOOTPRINT) {
+                throw new SecurityException("Permission tree size cap exceeded");
+            }
+        }
+    }
+
     boolean addPermissionLocked(PermissionInfo info, boolean async) {
         if (info.labelRes == 0 && info.nonLocalizedLabel == null) {
             throw new SecurityException("Label must be specified in permission");
@@ -2389,6 +2480,7 @@
         boolean changed = true;
         int fixedLevel = PermissionInfo.fixProtectionLevel(info.protectionLevel);
         if (added) {
+            enforcePermissionCapLocked(info, tree);
             bp = new BasePermission(info.name, tree.sourcePackage,
                     BasePermission.TYPE_DYNAMIC);
         } else if (bp.type != BasePermission.TYPE_DYNAMIC) {
@@ -2669,6 +2761,59 @@
         return PackageManager.SIGNATURE_NO_MATCH;
     }
 
+    /**
+     * If the database version for this type of package (internal storage or
+     * external storage) is less than the version where package signatures
+     * were updated, return true.
+     */
+    private boolean isCompatSignatureUpdateNeeded(PackageParser.Package scannedPkg) {
+        return (isExternal(scannedPkg) && mSettings.isExternalDatabaseVersionOlderThan(
+                DatabaseVersion.SIGNATURE_END_ENTITY))
+                || (!isExternal(scannedPkg) && mSettings.isInternalDatabaseVersionOlderThan(
+                        DatabaseVersion.SIGNATURE_END_ENTITY));
+    }
+
+    /**
+     * Used for backward compatibility to make sure any packages with
+     * certificate chains get upgraded to the new style. {@code existingSigs}
+     * will be in the old format (since they were stored on disk from before the
+     * system upgrade) and {@code scannedSigs} will be in the newer format.
+     */
+    private int compareSignaturesCompat(PackageSignatures existingSigs,
+            PackageParser.Package scannedPkg) {
+        if (!isCompatSignatureUpdateNeeded(scannedPkg)) {
+            return PackageManager.SIGNATURE_NO_MATCH;
+        }
+
+        HashSet<Signature> existingSet = new HashSet<Signature>();
+        for (Signature sig : existingSigs.mSignatures) {
+            existingSet.add(sig);
+        }
+        HashSet<Signature> scannedCompatSet = new HashSet<Signature>();
+        for (Signature sig : scannedPkg.mSignatures) {
+            try {
+                Signature[] chainSignatures = sig.getChainSignatures();
+                for (Signature chainSig : chainSignatures) {
+                    scannedCompatSet.add(chainSig);
+                }
+            } catch (CertificateEncodingException e) {
+                scannedCompatSet.add(sig);
+            }
+        }
+        /*
+         * Make sure the expanded scanned set contains all signatures in the
+         * existing one.
+         */
+        if (scannedCompatSet.equals(existingSet)) {
+            // Migrate the old signatures to the new scheme.
+            existingSigs.assignSignatures(scannedPkg.mSignatures);
+            // The new KeySets will be re-added later in the scanning process.
+            mSettings.mKeySetManager.removeAppKeySetData(scannedPkg.packageName);
+            return PackageManager.SIGNATURE_MATCH;
+        }
+        return PackageManager.SIGNATURE_NO_MATCH;
+    }
+
     public String[] getPackagesForUid(int uid) {
         uid = UserHandle.getAppId(uid);
         // reader
@@ -2820,6 +2965,63 @@
         return null;
     }
 
+    private ResolveInfo findPersistentPreferredActivityLP(Intent intent, String resolvedType,
+            int flags, List<ResolveInfo> query, boolean debug, int userId) {
+        final int N = query.size();
+        PersistentPreferredIntentResolver ppir = mSettings.mPersistentPreferredActivities
+                .get(userId);
+        // Get the list of persistent preferred activities that handle the intent
+        if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Looking for presistent preferred activities...");
+        List<PersistentPreferredActivity> pprefs = ppir != null
+                ? ppir.queryIntent(intent, resolvedType,
+                        (flags & PackageManager.MATCH_DEFAULT_ONLY) != 0, userId)
+                : null;
+        if (pprefs != null && pprefs.size() > 0) {
+            final int M = pprefs.size();
+            for (int i=0; i<M; i++) {
+                final PersistentPreferredActivity ppa = pprefs.get(i);
+                if (DEBUG_PREFERRED || debug) {
+                    Slog.v(TAG, "Checking PersistentPreferredActivity ds="
+                            + (ppa.countDataSchemes() > 0 ? ppa.getDataScheme(0) : "<none>")
+                            + "\n  component=" + ppa.mComponent);
+                    ppa.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), "  ");
+                }
+                final ActivityInfo ai = getActivityInfo(ppa.mComponent,
+                        flags | PackageManager.GET_DISABLED_COMPONENTS, userId);
+                if (DEBUG_PREFERRED || debug) {
+                    Slog.v(TAG, "Found persistent preferred activity:");
+                    if (ai != null) {
+                        ai.dump(new LogPrinter(Log.VERBOSE, TAG, Log.LOG_ID_SYSTEM), "  ");
+                    } else {
+                        Slog.v(TAG, "  null");
+                    }
+                }
+                if (ai == null) {
+                    // This previously registered persistent preferred activity
+                    // component is no longer known. Ignore it and do NOT remove it.
+                    continue;
+                }
+                for (int j=0; j<N; j++) {
+                    final ResolveInfo ri = query.get(j);
+                    if (!ri.activityInfo.applicationInfo.packageName
+                            .equals(ai.applicationInfo.packageName)) {
+                        continue;
+                    }
+                    if (!ri.activityInfo.name.equals(ai.name)) {
+                        continue;
+                    }
+                    //  Found a persistent preference that can handle the intent.
+                    if (DEBUG_PREFERRED || debug) {
+                        Slog.v(TAG, "Returning persistent preferred activity: " +
+                                ri.activityInfo.packageName + "/" + ri.activityInfo.name);
+                    }
+                    return ri;
+                }
+            }
+        }
+        return null;
+    }
+
     ResolveInfo findPreferredActivity(Intent intent, String resolvedType, int flags,
             List<ResolveInfo> query, int priority, boolean always,
             boolean removeMatches, boolean debug, int userId) {
@@ -2830,6 +3032,16 @@
                 intent = intent.getSelector();
             }
             if (DEBUG_PREFERRED) intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION);
+
+            // Try to find a matching persistent preferred activity.
+            ResolveInfo pri = findPersistentPreferredActivityLP(intent, resolvedType, flags, query,
+                    debug, userId);
+
+            // If a persistent preferred activity matched, use it.
+            if (pri != null) {
+                return pri;
+            }
+
             PreferredIntentResolver pir = mSettings.mPreferredActivities.get(userId);
             // Get the list of preferred activities that handle the intent
             if (DEBUG_PREFERRED || debug) Slog.v(TAG, "Looking for preferred activities...");
@@ -2952,6 +3164,33 @@
         return null;
     }
 
+    /*
+     * Returns if intent can be forwarded from the userId from to dest
+     */
+    @Override
+    public boolean canForwardTo(Intent intent, String resolvedType, int userIdFrom, int userIdDest) {
+        mContext.enforceCallingOrSelfPermission(
+                android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
+        List<ForwardingIntentFilter> matches =
+                getMatchingForwardingIntentFilters(intent, resolvedType, userIdFrom);
+        if (matches != null) {
+            int size = matches.size();
+            for (int i = 0; i < size; i++) {
+                if (matches.get(i).getUserIdDest() == userIdDest) return true;
+            }
+        }
+        return false;
+    }
+
+    private List<ForwardingIntentFilter> getMatchingForwardingIntentFilters(Intent intent,
+            String resolvedType, int userId) {
+        ForwardingIntentResolver fir = mSettings.mForwardingIntentResolvers.get(userId);
+        if (fir != null) {
+            return fir.queryIntent(intent, resolvedType, false, userId);
+        }
+        return null;
+    }
+
     @Override
     public List<ResolveInfo> queryIntentActivities(Intent intent,
             String resolvedType, int flags, int userId) {
@@ -2980,7 +3219,38 @@
         synchronized (mPackages) {
             final String pkgName = intent.getPackage();
             if (pkgName == null) {
-                return mActivities.queryIntent(intent, resolvedType, flags, userId);
+                List<ResolveInfo> result =
+                        mActivities.queryIntent(intent, resolvedType, flags, userId);
+                // Checking if we can forward the intent to another user
+                List<ForwardingIntentFilter> fifs =
+                        getMatchingForwardingIntentFilters(intent, resolvedType, userId);
+                if (fifs != null) {
+                    ForwardingIntentFilter forwardingIntentFilterWithResult = null;
+                    HashSet<Integer> alreadyTriedUserIds = new HashSet<Integer>();
+                    for (ForwardingIntentFilter fif : fifs) {
+                        int userIdDest = fif.getUserIdDest();
+                        // Two {@link ForwardingIntentFilter}s can have the same userIdDest and
+                        // match the same an intent. For performance reasons, it is better not to
+                        // run queryIntent twice for the same userId
+                        if (!alreadyTriedUserIds.contains(userIdDest)) {
+                            List<ResolveInfo> resultUser = mActivities.queryIntent(intent,
+                                    resolvedType, flags, userIdDest);
+                            if (resultUser != null) {
+                                forwardingIntentFilterWithResult = fif;
+                                // As soon as there is a match in another user, we add the
+                                // intentForwarderActivity to the list of ResolveInfo.
+                                break;
+                            }
+                            alreadyTriedUserIds.add(userIdDest);
+                        }
+                    }
+                    if (forwardingIntentFilterWithResult != null) {
+                        ResolveInfo forwardingResolveInfo = createForwardingResolveInfo(
+                                forwardingIntentFilterWithResult, userId);
+                        result.add(forwardingResolveInfo);
+                    }
+                }
+                return result;
             }
             final PackageParser.Package pkg = mPackages.get(pkgName);
             if (pkg != null) {
@@ -2991,6 +3261,28 @@
         }
     }
 
+    private ResolveInfo createForwardingResolveInfo(ForwardingIntentFilter fif, int userIdFrom) {
+        String className;
+        int userIdDest = fif.getUserIdDest();
+        if (userIdDest == UserHandle.USER_OWNER) {
+            className = FORWARD_INTENT_TO_USER_OWNER;
+        } else {
+            className = FORWARD_INTENT_TO_MANAGED_PROFILE;
+        }
+        ComponentName forwardingActivityComponentName = new ComponentName(
+                mAndroidApplication.packageName, className);
+        ActivityInfo forwardingActivityInfo = getActivityInfo(forwardingActivityComponentName, 0,
+                userIdFrom);
+        ResolveInfo forwardingResolveInfo = new ResolveInfo();
+        forwardingResolveInfo.activityInfo = forwardingActivityInfo;
+        forwardingResolveInfo.priority = 0;
+        forwardingResolveInfo.preferredOrder = 0;
+        forwardingResolveInfo.match = 0;
+        forwardingResolveInfo.isDefault = true;
+        forwardingResolveInfo.filter = fif;
+        return forwardingResolveInfo;
+    }
+
     @Override
     public List<ResolveInfo> queryIntentActivityOptions(ComponentName caller,
             Intent[] specifics, String[] specificTypes, Intent intent,
@@ -3683,27 +3975,26 @@
 
     private boolean collectCertificatesLI(PackageParser pp, PackageSetting ps,
             PackageParser.Package pkg, File srcFile, int parseFlags) {
-        if (GET_CERTIFICATES) {
-            if (ps != null
-                    && ps.codePath.equals(srcFile)
-                    && ps.timeStamp == srcFile.lastModified()) {
-                if (ps.signatures.mSignatures != null
-                        && ps.signatures.mSignatures.length != 0) {
-                    // Optimization: reuse the existing cached certificates
-                    // if the package appears to be unchanged.
-                    pkg.mSignatures = ps.signatures.mSignatures;
-                    return true;
-                }
-                
-                Slog.w(TAG, "PackageSetting for " + ps.name + " is missing signatures.  Collecting certs again to recover them.");
-            } else {
-                Log.i(TAG, srcFile.toString() + " changed; collecting certs");
+        if (ps != null
+                && ps.codePath.equals(srcFile)
+                && ps.timeStamp == srcFile.lastModified()
+                && !isCompatSignatureUpdateNeeded(pkg)) {
+            if (ps.signatures.mSignatures != null
+                    && ps.signatures.mSignatures.length != 0) {
+                // Optimization: reuse the existing cached certificates
+                // if the package appears to be unchanged.
+                pkg.mSignatures = ps.signatures.mSignatures;
+                return true;
             }
-            
-            if (!pp.collectCertificates(pkg, parseFlags)) {
-                mLastScanError = pp.getParseError();
-                return false;
-            }
+
+            Slog.w(TAG, "PackageSetting for " + ps.name + " is missing signatures.  Collecting certs again to recover them.");
+        } else {
+            Log.i(TAG, srcFile.toString() + " changed; collecting certs");
+        }
+
+        if (!pp.collectCertificates(pkg, parseFlags)) {
+            mLastScanError = pp.getParseError();
+            return false;
         }
         return true;
     }
@@ -3937,22 +4228,32 @@
         return processName;
     }
 
-    private boolean verifySignaturesLP(PackageSetting pkgSetting,
-            PackageParser.Package pkg) {
+    private boolean verifySignaturesLP(PackageSetting pkgSetting, PackageParser.Package pkg) {
         if (pkgSetting.signatures.mSignatures != null) {
             // Already existing package. Make sure signatures match
-            if (compareSignatures(pkgSetting.signatures.mSignatures, pkg.mSignatures) !=
-                PackageManager.SIGNATURE_MATCH) {
-                    Slog.e(TAG, "Package " + pkg.packageName
-                            + " signatures do not match the previously installed version; ignoring!");
-                    mLastScanError = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
-                    return false;
-                }
+            boolean match = compareSignatures(pkgSetting.signatures.mSignatures, pkg.mSignatures)
+                    == PackageManager.SIGNATURE_MATCH;
+            if (!match) {
+                match = compareSignaturesCompat(pkgSetting.signatures, pkg)
+                        == PackageManager.SIGNATURE_MATCH;
+            }
+            if (!match) {
+                Slog.e(TAG, "Package " + pkg.packageName
+                        + " signatures do not match the previously installed version; ignoring!");
+                mLastScanError = PackageManager.INSTALL_FAILED_UPDATE_INCOMPATIBLE;
+                return false;
+            }
         }
         // Check for shared user signatures
         if (pkgSetting.sharedUser != null && pkgSetting.sharedUser.signatures.mSignatures != null) {
-            if (compareSignatures(pkgSetting.sharedUser.signatures.mSignatures,
-                    pkg.mSignatures) != PackageManager.SIGNATURE_MATCH) {
+            // Already existing package. Make sure signatures match
+            boolean match = compareSignatures(pkgSetting.sharedUser.signatures.mSignatures,
+                    pkg.mSignatures) == PackageManager.SIGNATURE_MATCH;
+            if (!match) {
+                match = compareSignaturesCompat(pkgSetting.sharedUser.signatures, pkg)
+                        == PackageManager.SIGNATURE_MATCH;
+            }
+            if (!match) {
                 Slog.e(TAG, "Package " + pkg.packageName
                         + " has no signatures that match those in shared user "
                         + pkgSetting.sharedUser.name + "; ignoring!");
@@ -5264,8 +5565,9 @@
                             // discard the previous declaration and consider the system's to be
                             // canonical.
                             if (isSystemApp(p.owner)) {
-                                Slog.i(TAG, "New decl " + p.owner + " of permission  "
-                                        + p.info.name + " is system");
+                                String msg = "New decl " + p.owner + " of permission  "
+                                        + p.info.name + " is system";
+                                reportSettingsProblem(Log.WARN, msg);
                                 bp.sourcePackage = null;
                             }
                         }
@@ -6522,6 +6824,11 @@
         }
 
         public final void addProvider(PackageParser.Provider p) {
+            if (mProviders.containsKey(p.getComponentName())) {
+                Slog.w(TAG, "Provider " + p.getComponentName() + " already defined; ignoring");
+                return;
+            }
+
             mProviders.put(p.getComponentName(), p);
             if (DEBUG_SHOW_INFO) {
                 Log.v(TAG, "  "
@@ -6929,18 +7236,24 @@
         private final boolean mIsPrivileged;
     }
 
+    /*
+     * The old-style observer methods all just trampoline to the newer signature with
+     * expanded install observer API.  The older API continues to work but does not
+     * supply the additional details of the Observer2 API.
+     */
+
     /* Called when a downloaded package installation has been confirmed by the user */
     public void installPackage(
             final Uri packageURI, final IPackageInstallObserver observer, final int flags) {
-        installPackage(packageURI, observer, flags, null);
+        installPackageEtc(packageURI, observer, null, flags, null);
     }
 
     /* Called when a downloaded package installation has been confirmed by the user */
     public void installPackage(
             final Uri packageURI, final IPackageInstallObserver observer, final int flags,
             final String installerPackageName) {
-        installPackageWithVerification(packageURI, observer, flags, installerPackageName, null,
-                null, null);
+        installPackageWithVerificationEtc(packageURI, observer, null, flags,
+                installerPackageName, null, null, null);
     }
 
     @Override
@@ -6949,20 +7262,67 @@
             ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
         VerificationParams verificationParams = new VerificationParams(verificationURI, null, null,
                 VerificationParams.NO_UID, manifestDigest);
-        installPackageWithVerificationAndEncryption(packageURI, observer, flags,
+        installPackageWithVerificationAndEncryptionEtc(packageURI, observer, null, flags,
                 installerPackageName, verificationParams, encryptionParams);
     }
 
     public void installPackageWithVerificationAndEncryption(Uri packageURI,
             IPackageInstallObserver observer, int flags, String installerPackageName,
             VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
+        installPackageWithVerificationAndEncryptionEtc(packageURI, observer, null, flags,
+                installerPackageName, verificationParams, encryptionParams);
+    }
+
+    /*
+     * And here are the "live" versions that take both observer arguments
+     */
+    public void installPackageEtc(
+            final Uri packageURI, final IPackageInstallObserver observer,
+            IPackageInstallObserver2 observer2, final int flags) {
+        installPackageEtc(packageURI, observer, observer2, flags, null);
+    }
+
+    public void installPackageEtc(
+            final Uri packageURI, final IPackageInstallObserver observer,
+            final IPackageInstallObserver2 observer2, final int flags,
+            final String installerPackageName) {
+        installPackageWithVerificationEtc(packageURI, observer, observer2, flags,
+                installerPackageName, null, null, null);
+    }
+
+    @Override
+    public void installPackageWithVerificationEtc(Uri packageURI, IPackageInstallObserver observer,
+            IPackageInstallObserver2 observer2,
+            int flags, String installerPackageName, Uri verificationURI,
+            ManifestDigest manifestDigest, ContainerEncryptionParams encryptionParams) {
+        VerificationParams verificationParams = new VerificationParams(verificationURI, null, null,
+                VerificationParams.NO_UID, manifestDigest);
+        installPackageWithVerificationAndEncryptionEtc(packageURI, observer, observer2, flags,
+                installerPackageName, verificationParams, encryptionParams);
+    }
+
+    /*
+     * All of the installPackage...*() methods redirect to this one for the master implementation
+     */
+    public void installPackageWithVerificationAndEncryptionEtc(Uri packageURI,
+            IPackageInstallObserver observer, IPackageInstallObserver2 observer2,
+            int flags, String installerPackageName,
+            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
+        if (observer == null && observer2 == null) {
+            throw new IllegalArgumentException("No install observer supplied");
+        }
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACKAGES,
                 null);
 
         final int uid = Binder.getCallingUid();
         if (isUserRestricted(UserHandle.getUserId(uid), UserManager.DISALLOW_INSTALL_APPS)) {
             try {
-                observer.packageInstalled("", PackageManager.INSTALL_FAILED_USER_RESTRICTED);
+                if (observer != null) {
+                    observer.packageInstalled("", PackageManager.INSTALL_FAILED_USER_RESTRICTED);
+                }
+                if (observer2 != null) {
+                    observer2.packageInstalled("", null, PackageManager.INSTALL_FAILED_USER_RESTRICTED);
+                }
             } catch (RemoteException re) {
             }
             return;
@@ -6989,8 +7349,8 @@
         verificationParams.setInstallerUid(uid);
 
         final Message msg = mHandler.obtainMessage(INIT_COPY);
-        msg.obj = new InstallParams(packageURI, observer, filteredFlags, installerPackageName,
-                verificationParams, encryptionParams, user);
+        msg.obj = new InstallParams(packageURI, observer, observer2, filteredFlags,
+                installerPackageName, verificationParams, encryptionParams, user);
         mHandler.sendMessage(msg);
     }
 
@@ -7612,32 +7972,34 @@
                 mSuccess = getPackageSizeInfoLI(mStats.packageName, mStats.userHandle, mStats);
             }
 
-            final boolean mounted;
-            if (Environment.isExternalStorageEmulated()) {
-                mounted = true;
-            } else {
-                final String status = Environment.getExternalStorageState();
-                mounted = (Environment.MEDIA_MOUNTED.equals(status)
-                        || Environment.MEDIA_MOUNTED_READ_ONLY.equals(status));
-            }
+            if (mSuccess) {
+                final boolean mounted;
+                if (Environment.isExternalStorageEmulated()) {
+                    mounted = true;
+                } else {
+                    final String status = Environment.getExternalStorageState();
+                    mounted = (Environment.MEDIA_MOUNTED.equals(status)
+                            || Environment.MEDIA_MOUNTED_READ_ONLY.equals(status));
+                }
 
-            if (mounted) {
-                final UserEnvironment userEnv = new UserEnvironment(mStats.userHandle);
+                if (mounted) {
+                    final UserEnvironment userEnv = new UserEnvironment(mStats.userHandle);
 
-                mStats.externalCacheSize = calculateDirectorySize(mContainerService,
-                        userEnv.buildExternalStorageAppCacheDirs(mStats.packageName));
+                    mStats.externalCacheSize = calculateDirectorySize(mContainerService,
+                            userEnv.buildExternalStorageAppCacheDirs(mStats.packageName));
 
-                mStats.externalDataSize = calculateDirectorySize(mContainerService,
-                        userEnv.buildExternalStorageAppDataDirs(mStats.packageName));
+                    mStats.externalDataSize = calculateDirectorySize(mContainerService,
+                            userEnv.buildExternalStorageAppDataDirs(mStats.packageName));
 
-                // Always subtract cache size, since it's a subdirectory
-                mStats.externalDataSize -= mStats.externalCacheSize;
+                    // Always subtract cache size, since it's a subdirectory
+                    mStats.externalDataSize -= mStats.externalCacheSize;
 
-                mStats.externalMediaSize = calculateDirectorySize(mContainerService,
-                        userEnv.buildExternalStorageAppMediaDirs(mStats.packageName));
+                    mStats.externalMediaSize = calculateDirectorySize(mContainerService,
+                            userEnv.buildExternalStorageAppMediaDirs(mStats.packageName));
 
-                mStats.externalObbSize = calculateDirectorySize(mContainerService,
-                        userEnv.buildExternalStorageAppObbDirs(mStats.packageName));
+                    mStats.externalObbSize = calculateDirectorySize(mContainerService,
+                            userEnv.buildExternalStorageAppObbDirs(mStats.packageName));
+                }
             }
         }
 
@@ -7679,6 +8041,7 @@
 
     class InstallParams extends HandlerParams {
         final IPackageInstallObserver observer;
+        final IPackageInstallObserver2 observer2;
         int flags;
 
         private final Uri mPackageURI;
@@ -7690,13 +8053,14 @@
         final ContainerEncryptionParams encryptionParams;
 
         InstallParams(Uri packageURI,
-                IPackageInstallObserver observer, int flags,
-                String installerPackageName, VerificationParams verificationParams,
+                IPackageInstallObserver observer, IPackageInstallObserver2 observer2,
+                int flags, String installerPackageName, VerificationParams verificationParams,
                 ContainerEncryptionParams encryptionParams, UserHandle user) {
             super(user);
             this.mPackageURI = packageURI;
             this.flags = flags;
             this.observer = observer;
+            this.observer2 = observer2;
             this.installerPackageName = installerPackageName;
             this.verificationParams = verificationParams;
             this.encryptionParams = encryptionParams;
@@ -8269,6 +8633,7 @@
 
     static abstract class InstallArgs {
         final IPackageInstallObserver observer;
+        final IPackageInstallObserver2 observer2;
         // Always refers to PackageManager flags only
         final int flags;
         final Uri packageURI;
@@ -8277,12 +8642,14 @@
         final UserHandle user;
         final String instructionSet;
 
-        InstallArgs(Uri packageURI, IPackageInstallObserver observer, int flags,
-                String installerPackageName, ManifestDigest manifestDigest,
+        InstallArgs(Uri packageURI,
+                IPackageInstallObserver observer, IPackageInstallObserver2 observer2,
+                int flags, String installerPackageName, ManifestDigest manifestDigest,
                 UserHandle user, String instructionSet) {
             this.packageURI = packageURI;
             this.flags = flags;
             this.observer = observer;
+            this.observer2 = observer2;
             this.installerPackageName = installerPackageName;
             this.manifestDigest = manifestDigest;
             this.user = user;
@@ -8340,14 +8707,14 @@
         boolean created = false;
 
         FileInstallArgs(InstallParams params) {
-            super(params.getPackageUri(), params.observer, params.flags,
+            super(params.getPackageUri(), params.observer, params.observer2, params.flags,
                     params.installerPackageName, params.getManifestDigest(),
                     params.getUser(), null /* instruction set */);
         }
 
         FileInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath,
                 String instructionSet) {
-            super(null, null, 0, null, null, null, instructionSet);
+            super(null, null, null, 0, null, null, null, instructionSet);
             File codeFile = new File(fullCodePath);
             installDir = codeFile.getParentFile();
             codeFileName = fullCodePath;
@@ -8356,7 +8723,7 @@
         }
 
         FileInstallArgs(Uri packageURI, String pkgName, String dataDir, String instructionSet) {
-            super(packageURI, null, 0, null, null, null, instructionSet);
+            super(packageURI, null, null, 0, null, null, null, instructionSet);
             installDir = isFwdLocked() ? mDrmAppPrivateInstallDir : mAppInstallDir;
             String apkName = getNextCodePath(null, pkgName, ".apk");
             codeFileName = new File(installDir, apkName + ".apk").getPath();
@@ -8680,14 +9047,14 @@
         String libraryPath;
 
         AsecInstallArgs(InstallParams params) {
-            super(params.getPackageUri(), params.observer, params.flags,
+            super(params.getPackageUri(), params.observer, params.observer2, params.flags,
                     params.installerPackageName, params.getManifestDigest(),
                     params.getUser(), null /* instruction set */);
         }
 
         AsecInstallArgs(String fullCodePath, String fullResourcePath, String nativeLibraryPath,
                 String instructionSet, boolean isExternal, boolean isForwardLocked) {
-            super(null, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0)
+            super(null, null, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0)
                     | (isForwardLocked ? PackageManager.INSTALL_FORWARD_LOCK : 0),
                     null, null, null, instructionSet);
             // Extract cid from fullCodePath
@@ -8699,7 +9066,7 @@
         }
 
         AsecInstallArgs(String cid, String instructionSet, boolean isForwardLocked) {
-            super(null, null, (isAsecExternal(cid) ? PackageManager.INSTALL_EXTERNAL : 0)
+            super(null, null, null, (isAsecExternal(cid) ? PackageManager.INSTALL_EXTERNAL : 0)
                     | (isForwardLocked ? PackageManager.INSTALL_FORWARD_LOCK : 0),
                     null, null, null, instructionSet);
             this.cid = cid;
@@ -8708,7 +9075,7 @@
 
         AsecInstallArgs(Uri packageURI, String cid, String instructionSet,
                 boolean isExternal, boolean isForwardLocked) {
-            super(packageURI, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0)
+            super(packageURI, null, null, (isExternal ? PackageManager.INSTALL_EXTERNAL : 0)
                     | (isForwardLocked ? PackageManager.INSTALL_FORWARD_LOCK : 0),
                     null, null, null, instructionSet);
             this.cid = cid;
@@ -9045,6 +9412,10 @@
         PackageParser.Package pkg;
         int returnCode;
         PackageRemovedInfo removedInfo;
+
+        // In some error cases we want to convey more info back to the observer
+        String origPackage;
+        String origPermission;
     }
 
     /*
@@ -9283,7 +9654,7 @@
         }
         
         // Successfully disabled the old package. Now proceed with re-installation
-        mLastScanError = PackageManager.INSTALL_SUCCEEDED;
+        res.returnCode = mLastScanError = PackageManager.INSTALL_SUCCEEDED;
         pkg.applicationInfo.flags |= ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
         newPackage = scanPackageLI(pkg, parseFlags, scanMode, 0, user);
         if (newPackage == null) {
@@ -9296,9 +9667,20 @@
                 final PackageSetting newPkgSetting = (PackageSetting)newPackage.mExtras;
                 newPkgSetting.firstInstallTime = oldPkgSetting.firstInstallTime;
                 newPkgSetting.lastUpdateTime = System.currentTimeMillis();
+
+                // is the update attempting to change shared user? that isn't going to work...
+                if (oldPkgSetting.sharedUser != newPkgSetting.sharedUser) {
+                    Slog.w(TAG, "Forbidding shared user change from " + oldPkgSetting.sharedUser
+                            + " to " + newPkgSetting.sharedUser);
+                    res.returnCode = PackageManager.INSTALL_FAILED_SHARED_USER_INCOMPATIBLE;
+                    updatedSettings = true;
+                }
             }
-            updateSettingsLI(newPackage, installerPackageName, allUsers, perUserInstalled, res);
-            updatedSettings = true;
+
+            if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
+                updateSettingsLI(newPackage, installerPackageName, allUsers, perUserInstalled, res);
+                updatedSettings = true;
+            }
         }
 
         if (res.returnCode != PackageManager.INSTALL_SUCCEEDED) {
@@ -9442,7 +9824,7 @@
                 return;
             }
         }
-        if (GET_CERTIFICATES && !pp.collectCertificates(pkg, parseFlags)) {
+        if (!pp.collectCertificates(pkg, parseFlags)) {
             res.returnCode = pp.getParseError();
             return;
         }
@@ -9471,6 +9853,27 @@
         String oldCodePath = null;
         boolean systemApp = false;
         synchronized (mPackages) {
+            // Check whether the newly-scanned package wants to define an already-defined perm
+            int N = pkg.permissions.size();
+            for (int i = 0; i < N; i++) {
+                PackageParser.Permission perm = pkg.permissions.get(i);
+                BasePermission bp = mSettings.mPermissions.get(perm.info.name);
+                if (bp != null) {
+                    // If the defining package is signed with our cert, it's okay.  This
+                    // also includes the "updating the same package" case, of course.
+                    if (compareSignatures(bp.packageSetting.signatures.mSignatures,
+                            pkg.mSignatures) != PackageManager.SIGNATURE_MATCH) {
+                        Slog.w(TAG, "Package " + pkg.packageName
+                                + " attempting to redeclare permission " + perm.info.name
+                                + " already owned by " + bp.sourcePackage);
+                        res.returnCode = PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION;
+                        res.origPermission = perm.info.name;
+                        res.origPackage = bp.sourcePackage;
+                        return;
+                    }
+                }
+            }
+
             // Check if installing already existing package
             if ((pFlags&PackageManager.INSTALL_REPLACE_EXISTING) != 0) {
                 String oldName = mSettings.mRenamedPackages.get(pkgName);
@@ -10337,6 +10740,9 @@
             final IPackageStatsObserver observer) {
         mContext.enforceCallingOrSelfPermission(
                 android.Manifest.permission.GET_PACKAGE_SIZE, null);
+        if (packageName == null) {
+            throw new IllegalArgumentException("Attempt to get size of null packageName");
+        }
 
         PackageStats stats = new PackageStats(packageName, userHandle);
 
@@ -10642,6 +11048,112 @@
     }
 
     @Override
+    public void addPersistentPreferredActivity(IntentFilter filter, ComponentName activity,
+            int userId) {
+        int callingUid = Binder.getCallingUid();
+        if (callingUid != Process.SYSTEM_UID) {
+            throw new SecurityException(
+                    "addPersistentPreferredActivity can only be run by the system");
+        }
+        if (filter.countActions() == 0) {
+            Slog.w(TAG, "Cannot set a preferred activity with no filter actions");
+            return;
+        }
+        synchronized (mPackages) {
+            Slog.i(TAG, "Adding persistent preferred activity " + activity + " for user " + userId +
+                    " :");
+            filter.dump(new LogPrinter(Log.INFO, TAG), "  ");
+            mSettings.editPersistentPreferredActivitiesLPw(userId).addFilter(
+                    new PersistentPreferredActivity(filter, activity));
+            mSettings.writePackageRestrictionsLPr(userId);
+        }
+    }
+
+    @Override
+    public void clearPackagePersistentPreferredActivities(String packageName, int userId) {
+        int callingUid = Binder.getCallingUid();
+        if (callingUid != Process.SYSTEM_UID) {
+            throw new SecurityException(
+                    "clearPackagePersistentPreferredActivities can only be run by the system");
+        }
+        ArrayList<PersistentPreferredActivity> removed = null;
+        boolean changed = false;
+        synchronized (mPackages) {
+            for (int i=0; i<mSettings.mPersistentPreferredActivities.size(); i++) {
+                final int thisUserId = mSettings.mPersistentPreferredActivities.keyAt(i);
+                PersistentPreferredIntentResolver ppir = mSettings.mPersistentPreferredActivities
+                        .valueAt(i);
+                if (userId != thisUserId) {
+                    continue;
+                }
+                Iterator<PersistentPreferredActivity> it = ppir.filterIterator();
+                while (it.hasNext()) {
+                    PersistentPreferredActivity ppa = it.next();
+                    // Mark entry for removal only if it matches the package name.
+                    if (ppa.mComponent.getPackageName().equals(packageName)) {
+                        if (removed == null) {
+                            removed = new ArrayList<PersistentPreferredActivity>();
+                        }
+                        removed.add(ppa);
+                    }
+                }
+                if (removed != null) {
+                    for (int j=0; j<removed.size(); j++) {
+                        PersistentPreferredActivity ppa = removed.get(j);
+                        ppir.removeFilter(ppa);
+                    }
+                    changed = true;
+                }
+            }
+
+            if (changed) {
+                mSettings.writePackageRestrictionsLPr(userId);
+            }
+        }
+    }
+
+    /*
+     * For filters that are added with this method:
+     * if an intent for the user whose id is userIdOrig matches the filter, then this intent can
+     * also be resolved in the user whose id is userIdDest.
+     */
+    @Override
+    public void addForwardingIntentFilter(IntentFilter filter, int userIdOrig, int userIdDest) {
+        int callingUid = Binder.getCallingUid();
+        if (callingUid != Process.SYSTEM_UID) {
+            throw new SecurityException(
+                    "addForwardingIntentFilter can only be run by the system");
+        }
+        if (filter.countActions() == 0) {
+            Slog.w(TAG, "Cannot set a forwarding intent filter with no filter actions");
+            return;
+        }
+        synchronized (mPackages) {
+            mSettings.editForwardingIntentResolverLPw(userIdOrig).addFilter(
+                    new ForwardingIntentFilter(filter, userIdDest));
+            mSettings.writePackageRestrictionsLPr(userIdOrig);
+        }
+    }
+
+    @Override
+    public void clearForwardingIntentFilters(int userIdOrig) {
+        int callingUid = Binder.getCallingUid();
+        if (callingUid != Process.SYSTEM_UID) {
+            throw new SecurityException(
+                    "clearForwardingIntentFilter can only be run by the system");
+        }
+        synchronized (mPackages) {
+            ForwardingIntentResolver fir = mSettings.editForwardingIntentResolverLPw(userIdOrig);
+            HashSet<ForwardingIntentFilter> set =
+                    new HashSet<ForwardingIntentFilter>(fir.filterSet());
+            for (ForwardingIntentFilter fif : set) {
+                fir.removeFilter(fif);
+            }
+            mSettings.writePackageRestrictionsLPr(userIdOrig);
+        }
+    }
+
+    @Override
     public ComponentName getHomeActivities(List<ResolveInfo> allHomeCandidates) {
         Intent intent = new Intent(Intent.ACTION_MAIN);
         intent.addCategory(Intent.CATEGORY_HOME);
@@ -10967,6 +11479,8 @@
 
         public static final int DUMP_KEYSETS = 1 << 11;
 
+        public static final int DUMP_VERSION = 1 << 12;
+
         public static final int OPTION_SHOW_FILTERS = 1 << 0;
 
         private int mTypes;
@@ -11065,6 +11579,7 @@
                 pw.println("    s[hared-users]: dump shared user IDs");
                 pw.println("    m[essages]: print collected runtime messages");
                 pw.println("    v[erifiers]: print package verifier info");
+                pw.println("    version: print database version info");
                 pw.println("    <package.name>: info about given package");
                 pw.println("    k[eysets]: print known keysets");
                 return;
@@ -11113,6 +11628,8 @@
                 dumpState.setDump(DumpState.DUMP_MESSAGES);
             } else if ("v".equals(cmd) || "verifiers".equals(cmd)) {
                 dumpState.setDump(DumpState.DUMP_VERIFIERS);
+            } else if ("version".equals(cmd)) {
+                dumpState.setDump(DumpState.DUMP_VERSION);
             } else if ("k".equals(cmd) || "keysets".equals(cmd)) {
                 dumpState.setDump(DumpState.DUMP_KEYSETS);
             }
@@ -11124,6 +11641,24 @@
 
         // reader
         synchronized (mPackages) {
+            if (dumpState.isDumping(DumpState.DUMP_VERSION) && packageName == null) {
+                if (!checkin) {
+                    if (dumpState.onTitlePrinted())
+                        pw.println();
+                    pw.println("Database versions:");
+                    pw.print("  SDK Version:");
+                    pw.print(" internal=");
+                    pw.print(mSettings.mInternalSdkPlatform);
+                    pw.print(" external=");
+                    pw.println(mSettings.mExternalSdkPlatform);
+                    pw.print("  DB Version:");
+                    pw.print(" internal=");
+                    pw.print(mSettings.mInternalDatabaseVersion);
+                    pw.print(" external=");
+                    pw.println(mSettings.mExternalDatabaseVersion);
+                }
+            }
+
             if (dumpState.isDumping(DumpState.DUMP_VERIFIERS) && packageName == null) {
                 if (!checkin) {
                     if (dumpState.onTitlePrinted())
@@ -11656,6 +12191,9 @@
                     | (regrantPermissions
                             ? (UPDATE_PERMISSIONS_REPLACE_PKG|UPDATE_PERMISSIONS_REPLACE_ALL)
                             : 0));
+
+            mSettings.updateExternalDatabaseVersion();
+
             // can downgrade to reader
             // Persist settings
             mSettings.writeLPr();
diff --git a/services/core/java/com/android/server/pm/PackageSettingBase.java b/services/core/java/com/android/server/pm/PackageSettingBase.java
index ba95b9a..c8af9d1 100644
--- a/services/core/java/com/android/server/pm/PackageSettingBase.java
+++ b/services/core/java/com/android/server/pm/PackageSettingBase.java
@@ -20,14 +20,11 @@
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
 import static android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
 
-import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageUserState;
-import android.content.pm.UserInfo;
 import android.util.SparseArray;
 
 import java.io.File;
 import java.util.HashSet;
-import java.util.List;
 
 /**
  * Settings base class for pending and resolved classes.
diff --git a/services/core/java/com/android/server/pm/PersistentPreferredActivity.java b/services/core/java/com/android/server/pm/PersistentPreferredActivity.java
new file mode 100644
index 0000000..0d4cdf9
--- /dev/null
+++ b/services/core/java/com/android/server/pm/PersistentPreferredActivity.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2014 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.android.server.pm;
+
+import com.android.internal.util.XmlUtils;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import android.content.ComponentName;
+import android.content.IntentFilter;
+import android.util.Log;
+
+import java.io.IOException;
+
+class PersistentPreferredActivity extends IntentFilter {
+    private static final String ATTR_NAME = "name"; // component name
+    private static final String ATTR_FILTER = "filter"; // filter
+
+    private static final String TAG = "PersistentPreferredActivity";
+
+    private static final boolean DEBUG_FILTERS = false;
+
+    final ComponentName mComponent;
+
+    PersistentPreferredActivity(IntentFilter filter, ComponentName activity) {
+        super(filter);
+        mComponent = activity;
+    }
+
+    PersistentPreferredActivity(XmlPullParser parser) throws XmlPullParserException, IOException {
+        String shortComponent = parser.getAttributeValue(null, ATTR_NAME);
+        mComponent = ComponentName.unflattenFromString(shortComponent);
+        if (mComponent == null) {
+            PackageManagerService.reportSettingsProblem(Log.WARN,
+                    "Error in package manager settings: " +
+                            "Bad activity name " + shortComponent +
+                            " at " + parser.getPositionDescription());
+        }
+        int outerDepth = parser.getDepth();
+        String tagName = parser.getName();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            tagName = parser.getName();
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            } else if (type == XmlPullParser.START_TAG) {
+                if (tagName.equals(ATTR_FILTER)) {
+                    break;
+                } else {
+                    PackageManagerService.reportSettingsProblem(Log.WARN,
+                            "Unknown element: " + tagName +
+                            " at " + parser.getPositionDescription());
+                    XmlUtils.skipCurrentTag(parser);
+                }
+            }
+        }
+        if (tagName.equals(ATTR_FILTER)) {
+            readFromXml(parser);
+        } else {
+            PackageManagerService.reportSettingsProblem(Log.WARN,
+                    "Missing element filter at " +
+                    parser.getPositionDescription());
+            XmlUtils.skipCurrentTag(parser);
+        }
+    }
+
+    public void writeToXml(XmlSerializer serializer) throws IOException {
+        serializer.attribute(null, ATTR_NAME, mComponent.flattenToShortString());
+        serializer.startTag(null, ATTR_FILTER);
+            super.writeToXml(serializer);
+        serializer.endTag(null, ATTR_FILTER);
+    }
+
+    @Override
+    public String toString() {
+        return "PersistentPreferredActivity{0x" + Integer.toHexString(System.identityHashCode(this))
+                + " " + mComponent.flattenToShortString() + "}";
+    }
+}
diff --git a/services/core/java/com/android/server/pm/PersistentPreferredIntentResolver.java b/services/core/java/com/android/server/pm/PersistentPreferredIntentResolver.java
new file mode 100644
index 0000000..9c8a9bd
--- /dev/null
+++ b/services/core/java/com/android/server/pm/PersistentPreferredIntentResolver.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2014 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.android.server.pm;
+
+import java.io.PrintWriter;
+
+import com.android.server.IntentResolver;
+
+public class PersistentPreferredIntentResolver
+        extends IntentResolver<PersistentPreferredActivity, PersistentPreferredActivity> {
+    @Override
+    protected PersistentPreferredActivity[] newArray(int size) {
+        return new PersistentPreferredActivity[size];
+    }
+
+    @Override
+    protected boolean isPackageForFilter(String packageName, PersistentPreferredActivity filter) {
+        return packageName.equals(filter.mComponent.getPackageName());
+    }
+}
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 27ec1bf..599d2a7 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -46,7 +46,6 @@
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.ComponentInfo;
-import android.content.pm.KeySet;
 import android.content.pm.PackageCleanItem;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageParser;
@@ -61,7 +60,6 @@
 import android.os.Process;
 import android.os.UserHandle;
 import android.util.Log;
-import android.util.LongSparseArray;
 import android.util.Slog;
 import android.util.SparseArray;
 import android.util.Xml;
@@ -72,7 +70,6 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.security.PublicKey;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -93,6 +90,34 @@
 final class Settings {
     private static final String TAG = "PackageSettings";
 
+    /**
+     * Current version of the package database. Set it to the latest version in
+     * the {@link DatabaseVersion} class below to ensure the database upgrade
+     * doesn't happen repeatedly.
+     * <p>
+     * Note that care should be taken to make sure all database upgrades are
+     * idempotent.
+     */
+    private static final int CURRENT_DATABASE_VERSION = DatabaseVersion.SIGNATURE_END_ENTITY;
+
+    /**
+     * This class contains constants that can be referred to from upgrade code.
+     * Insert constant values here that describe the upgrade reason. The version
+     * code must be monotonically increasing.
+     */
+    public static class DatabaseVersion {
+        /**
+         * The initial version of the database.
+         */
+        public static final int FIRST_VERSION = 1;
+
+        /**
+         * Migrating the Signature array from the entire certificate chain to
+         * just the signing certificate.
+         */
+        public static final int SIGNATURE_END_ENTITY = 2;
+    }
+
     private static final boolean DEBUG_STOPPED = false;
     private static final boolean DEBUG_MU = false;
 
@@ -104,6 +129,10 @@
     private static final String TAG_ENABLED_COMPONENTS = "enabled-components";
     private static final String TAG_PACKAGE_RESTRICTIONS = "package-restrictions";
     private static final String TAG_PACKAGE = "pkg";
+    private static final String TAG_PERSISTENT_PREFERRED_ACTIVITIES =
+            "persistent-preferred-activities";
+    static final String TAG_FORWARDING_INTENT_FILTERS =
+            "forwarding-intent-filters";
 
     private static final String ATTR_NAME = "name";
     private static final String ATTR_USER = "user";
@@ -135,6 +164,14 @@
     int mInternalSdkPlatform;
     int mExternalSdkPlatform;
 
+    /**
+     * The current database version for apps on internal storage. This is
+     * used to upgrade the format of the packages.xml database not necessarily
+     * tied to an SDK version.
+     */
+    int mInternalDatabaseVersion;
+    int mExternalDatabaseVersion;
+
     Boolean mReadExternalStorageEnforced;
 
     /** Device identity for the purpose of package verification. */
@@ -145,6 +182,15 @@
     final SparseArray<PreferredIntentResolver> mPreferredActivities =
             new SparseArray<PreferredIntentResolver>();
 
+    // The persistent preferred activities of the user's profile/device owner
+    // associated with particular intent filters.
+    final SparseArray<PersistentPreferredIntentResolver> mPersistentPreferredActivities =
+            new SparseArray<PersistentPreferredIntentResolver>();
+
+    // For every user, it is used to find to which other users the intent can be forwarded.
+    final SparseArray<ForwardingIntentResolver> mForwardingIntentResolvers =
+            new SparseArray<ForwardingIntentResolver>();
+
     final HashMap<String, SharedUserSetting> mSharedUsers =
             new HashMap<String, SharedUserSetting>();
     private final ArrayList<Object> mUserIds = new ArrayList<Object>();
@@ -788,6 +834,24 @@
         return pir;
     }
 
+    PersistentPreferredIntentResolver editPersistentPreferredActivitiesLPw(int userId) {
+        PersistentPreferredIntentResolver ppir = mPersistentPreferredActivities.get(userId);
+        if (ppir == null) {
+            ppir = new PersistentPreferredIntentResolver();
+            mPersistentPreferredActivities.put(userId, ppir);
+        }
+        return ppir;
+    }
+
+    ForwardingIntentResolver editForwardingIntentResolverLPw(int userId) {
+        ForwardingIntentResolver fir = mForwardingIntentResolvers.get(userId);
+        if (fir == null) {
+            fir = new ForwardingIntentResolver();
+            mForwardingIntentResolvers.put(userId, fir);
+        }
+        return fir;
+    }
+
     private File getUserPackagesStateFile(int userId) {
         return new File(Environment.getUserSystemDirectory(userId), "package-restrictions.xml");
     }
@@ -818,6 +882,40 @@
         }
     }
 
+    /**
+     * Returns whether the current database has is older than {@code version}
+     * for apps on internal storage.
+     */
+    public boolean isInternalDatabaseVersionOlderThan(int version) {
+        return mInternalDatabaseVersion < version;
+    }
+
+    /**
+     * Returns whether the current database has is older than {@code version}
+     * for apps on external storage.
+     */
+    public boolean isExternalDatabaseVersionOlderThan(int version) {
+        return mExternalDatabaseVersion < version;
+    }
+
+    /**
+     * Updates the database version for apps on internal storage. Called after
+     * call the updates to the database format are done for apps on internal
+     * storage after the initial start-up scan.
+     */
+    public void updateInternalDatabaseVersion() {
+        mInternalDatabaseVersion = CURRENT_DATABASE_VERSION;
+    }
+
+    /**
+     * Updates the database version for apps on internal storage. Called after
+     * call the updates to the database format are done for apps on internal
+     * storage after the initial start-up scan.
+     */
+    public void updateExternalDatabaseVersion() {
+        mExternalDatabaseVersion = CURRENT_DATABASE_VERSION;
+    }
+
     private void readPreferredActivitiesLPw(XmlPullParser parser, int userId)
             throws XmlPullParserException, IOException {
         int outerDepth = parser.getDepth();
@@ -847,6 +945,50 @@
         }
     }
 
+    private void readPersistentPreferredActivitiesLPw(XmlPullParser parser, int userId)
+            throws XmlPullParserException, IOException {
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+            String tagName = parser.getName();
+            if (tagName.equals(TAG_ITEM)) {
+                PersistentPreferredActivity ppa = new PersistentPreferredActivity(parser);
+                editPersistentPreferredActivitiesLPw(userId).addFilter(ppa);
+            } else {
+                PackageManagerService.reportSettingsProblem(Log.WARN,
+                        "Unknown element under <" + TAG_PERSISTENT_PREFERRED_ACTIVITIES + ">: "
+                        + parser.getName());
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
+    private void readForwardingIntentFiltersLPw(XmlPullParser parser, int userId)
+            throws XmlPullParserException, IOException {
+        int outerDepth = parser.getDepth();
+        int type;
+        while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+            if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+                continue;
+            }
+            String tagName = parser.getName();
+            if (tagName.equals(TAG_ITEM)) {
+                ForwardingIntentFilter fif = new ForwardingIntentFilter(parser);
+                editForwardingIntentResolverLPw(userId).addFilter(fif);
+            } else {
+                String msg = "Unknown element under " +  TAG_FORWARDING_INTENT_FILTERS + ": " +
+                        parser.getName();
+                PackageManagerService.reportSettingsProblem(Log.WARN, msg);
+                XmlUtils.skipCurrentTag(parser);
+            }
+        }
+    }
+
     void readPackageRestrictionsLPr(int userId) {
         if (DEBUG_MU) {
             Log.i(TAG, "Reading package restrictions for user=" + userId);
@@ -973,6 +1115,10 @@
                             enabledCaller, enabledComponents, disabledComponents);
                 } else if (tagName.equals("preferred-activities")) {
                     readPreferredActivitiesLPw(parser, userId);
+                } else if (tagName.equals(TAG_PERSISTENT_PREFERRED_ACTIVITIES)) {
+                    readPersistentPreferredActivitiesLPw(parser, userId);
+                } else if (tagName.equals(TAG_FORWARDING_INTENT_FILTERS)) {
+                    readForwardingIntentFiltersLPw(parser, userId);
                 } else {
                     Slog.w(PackageManagerService.TAG, "Unknown element under <stopped-packages>: "
                           + parser.getName());
@@ -1036,6 +1182,34 @@
         serializer.endTag(null, "preferred-activities");
     }
 
+    void writePersistentPreferredActivitiesLPr(XmlSerializer serializer, int userId)
+            throws IllegalArgumentException, IllegalStateException, IOException {
+        serializer.startTag(null, TAG_PERSISTENT_PREFERRED_ACTIVITIES);
+        PersistentPreferredIntentResolver ppir = mPersistentPreferredActivities.get(userId);
+        if (ppir != null) {
+            for (final PersistentPreferredActivity ppa : ppir.filterSet()) {
+                serializer.startTag(null, TAG_ITEM);
+                ppa.writeToXml(serializer);
+                serializer.endTag(null, TAG_ITEM);
+            }
+        }
+        serializer.endTag(null, TAG_PERSISTENT_PREFERRED_ACTIVITIES);
+    }
+
+    void writeForwardingIntentFiltersLPr(XmlSerializer serializer, int userId)
+            throws IllegalArgumentException, IllegalStateException, IOException {
+        serializer.startTag(null, TAG_FORWARDING_INTENT_FILTERS);
+        ForwardingIntentResolver fir = mForwardingIntentResolvers.get(userId);
+        if (fir != null) {
+            for (final ForwardingIntentFilter fif : fir.filterSet()) {
+                serializer.startTag(null, TAG_ITEM);
+                fif.writeToXml(serializer);
+                serializer.endTag(null, TAG_ITEM);
+            }
+        }
+        serializer.endTag(null, TAG_FORWARDING_INTENT_FILTERS);
+    }
+
     void writePackageRestrictionsLPr(int userId) {
         if (DEBUG_MU) {
             Log.i(TAG, "Writing package restrictions for user=" + userId);
@@ -1132,6 +1306,10 @@
 
             writePreferredActivitiesLPr(serializer, userId, true);
 
+            writePersistentPreferredActivitiesLPr(serializer, userId);
+
+            writeForwardingIntentFiltersLPr(serializer, userId);
+
             serializer.endTag(null, TAG_PACKAGE_RESTRICTIONS);
 
             serializer.endDocument();
@@ -1308,6 +1486,11 @@
             serializer.attribute(null, "external", Integer.toString(mExternalSdkPlatform));
             serializer.endTag(null, "last-platform-version");
 
+            serializer.startTag(null, "database-version");
+            serializer.attribute(null, "internal", Integer.toString(mInternalDatabaseVersion));
+            serializer.attribute(null, "external", Integer.toString(mExternalDatabaseVersion));
+            serializer.endTag(null, "database-version");
+
             if (mVerifierDeviceIdentity != null) {
                 serializer.startTag(null, "verifier");
                 serializer.attribute(null, "device", mVerifierDeviceIdentity.toString());
@@ -1740,6 +1923,14 @@
                     // Upgrading from old single-user implementation;
                     // these are the preferred activities for user 0.
                     readPreferredActivitiesLPw(parser, 0);
+                } else if (tagName.equals(TAG_PERSISTENT_PREFERRED_ACTIVITIES)) {
+                    // TODO: check whether this is okay! as it is very
+                    // similar to how preferred-activities are treated
+                    readPersistentPreferredActivitiesLPw(parser, 0);
+                } else if (tagName.equals(TAG_FORWARDING_INTENT_FILTERS)) {
+                    // TODO: check whether this is okay! as it is very
+                    // similar to how preferred-activities are treated
+                    readForwardingIntentFiltersLPw(parser, 0);
                 } else if (tagName.equals("updated-package")) {
                     readDisabledSysPackageLPw(parser);
                 } else if (tagName.equals("cleaning-package")) {
@@ -1779,6 +1970,19 @@
                         }
                     } catch (NumberFormatException e) {
                     }
+                } else if (tagName.equals("database-version")) {
+                    mInternalDatabaseVersion = mExternalDatabaseVersion = 0;
+                    try {
+                        String internalDbVersionString = parser.getAttributeValue(null, "internal");
+                        if (internalDbVersionString != null) {
+                            mInternalDatabaseVersion = Integer.parseInt(internalDbVersionString);
+                        }
+                        String externalDbVersionString = parser.getAttributeValue(null, "external");
+                        if (externalDbVersionString != null) {
+                            mExternalDatabaseVersion = Integer.parseInt(externalDbVersionString);
+                        }
+                    } catch (NumberFormatException ignored) {
+                    }
                 } else if (tagName.equals("verifier")) {
                     final String deviceIdentity = parser.getAttributeValue(null, "device");
                     try {
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index 557b6a3..14df347 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -92,6 +92,7 @@
     private static final String ATTR_NEXT_SERIAL_NO = "nextSerialNumber";
     private static final String ATTR_PARTIAL = "partial";
     private static final String ATTR_USER_VERSION = "version";
+    private static final String ATTR_PROFILE_GROUP_ID = "profileGroupId";
     private static final String TAG_USERS = "users";
     private static final String TAG_USER = "user";
     private static final String TAG_RESTRICTIONS = "restrictions";
@@ -256,6 +257,56 @@
     }
 
     @Override
+    public List<UserInfo> getProfiles(int userId, boolean enabledOnly) {
+        if (userId != UserHandle.getCallingUserId()) {
+            checkManageUsersPermission("getting profiles related to user " + userId);
+        }
+        final long ident = Binder.clearCallingIdentity();
+        try {
+            synchronized (mPackagesLock) {
+                return getProfilesLocked(userId, enabledOnly);
+            }
+        } finally {
+            Binder.restoreCallingIdentity(ident);
+        }
+    }
+
+    /** Assume permissions already checked and caller's identity cleared */
+    private List<UserInfo> getProfilesLocked(int userId, boolean enabledOnly) {
+        UserInfo user = getUserInfoLocked(userId);
+        ArrayList<UserInfo> users = new ArrayList<UserInfo>(mUsers.size());
+        for (int i = 0; i < mUsers.size(); i++) {
+            UserInfo profile = mUsers.valueAt(i);
+            if (!isProfileOf(user, profile)) {
+                continue;
+            }
+            if (enabledOnly && !profile.isEnabled()) {
+                continue;
+            }
+            users.add(profile);
+        }
+        return users;
+    }
+
+    private boolean isProfileOf(UserInfo user, UserInfo profile) {
+        return user.id == profile.id ||
+                (user.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID
+                && user.profileGroupId == profile.profileGroupId);
+    }
+
+    @Override
+    public void setUserEnabled(int userId) {
+        checkManageUsersPermission("enable user");
+        synchronized (mPackagesLock) {
+            UserInfo info = getUserInfoLocked(userId);
+            if (info != null && !info.isEnabled()) {
+                info.flags ^= UserInfo.FLAG_DISABLED;
+                writeUserLocked(info);
+            }
+        }
+    }
+
+    @Override
     public UserInfo getUserInfo(int userId) {
         checkManageUsersPermission("query user");
         synchronized (mPackagesLock) {
@@ -405,7 +456,7 @@
 
         synchronized (mPackagesLock) {
             Bundle restrictions = mUserRestrictions.get(userId);
-            return restrictions != null ? restrictions : Bundle.EMPTY;
+            return restrictions != null ? new Bundle(restrictions) : new Bundle();
         }
     }
 
@@ -431,7 +482,7 @@
 
     /**
      * Enforces that only the system UID or root's UID or apps that have the
-     * {@link android.Manifest.permission.MANAGE_USERS MANAGE_USERS}
+     * {@link android.Manifest.permission#MANAGE_USERS MANAGE_USERS}
      * permission can make certain calls to the UserManager.
      *
      * @param message used as message if SecurityException is thrown
@@ -660,6 +711,10 @@
             if (userInfo.partial) {
                 serializer.attribute(null, ATTR_PARTIAL, "true");
             }
+            if (userInfo.profileGroupId != UserInfo.NO_PROFILE_GROUP_ID) {
+                serializer.attribute(null, ATTR_PROFILE_GROUP_ID,
+                        Integer.toString(userInfo.profileGroupId));
+            }
 
             serializer.startTag(null, TAG_NAME);
             serializer.text(userInfo.name);
@@ -743,6 +798,7 @@
         long salt = 0L;
         String pinHash = null;
         int failedAttempts = 0;
+        int profileGroupId = UserInfo.NO_PROFILE_GROUP_ID;
         long lastAttemptTime = 0L;
         boolean partial = false;
         Bundle restrictions = new Bundle();
@@ -780,6 +836,14 @@
                 pinHash = parser.getAttributeValue(null, ATTR_PIN_HASH);
                 failedAttempts = readIntAttribute(parser, ATTR_FAILED_ATTEMPTS, 0);
                 lastAttemptTime = readLongAttribute(parser, ATTR_LAST_RETRY_MS, 0L);
+                profileGroupId = readIntAttribute(parser, ATTR_PROFILE_GROUP_ID,
+                        UserInfo.NO_PROFILE_GROUP_ID);
+                if (profileGroupId == UserInfo.NO_PROFILE_GROUP_ID) {
+                    // This attribute was added and renamed during development of L.
+                    // TODO Remove upgrade path by 1st May 2014
+                    profileGroupId = readIntAttribute(parser, "relatedGroupId",
+                            UserInfo.NO_PROFILE_GROUP_ID);
+                }
                 String valueString = parser.getAttributeValue(null, ATTR_PARTIAL);
                 if ("true".equals(valueString)) {
                     partial = true;
@@ -818,6 +882,7 @@
             userInfo.creationTime = creationTime;
             userInfo.lastLoggedInTime = lastLoggedInTime;
             userInfo.partial = partial;
+            userInfo.profileGroupId = profileGroupId;
             mUserRestrictions.append(id, restrictions);
             if (salt != 0L) {
                 RestrictionsPinState pinState = mRestrictionsPinStates.get(id);
@@ -932,15 +997,44 @@
         }
     }
 
+    private int getNextProfileGroupIdLocked() {
+        int maxGroupId = UserInfo.NO_PROFILE_GROUP_ID;
+        for (int i = 0; i < mUsers.size(); i++) {
+            UserInfo ui = mUsers.valueAt(i);
+            if (maxGroupId < ui.profileGroupId) {
+                maxGroupId = ui.profileGroupId;
+            }
+        }
+        return maxGroupId + 1;
+    }
+
+    @Override
+    public UserInfo createProfileForUser(String name, int flags, int userId) {
+        checkManageUsersPermission("Only the system can create users");
+        if (userId != UserHandle.USER_OWNER) {
+            Slog.w(LOG_TAG, "Only user owner can have profiles");
+            return null;
+        }
+        return createUserInternal(name, flags, userId);
+    }
+
     @Override
     public UserInfo createUser(String name, int flags) {
         checkManageUsersPermission("Only the system can create users");
+        return createUserInternal(name, flags, UserHandle.USER_NULL);
+    }
 
+    private UserInfo createUserInternal(String name, int flags, int profileId) {
         final long ident = Binder.clearCallingIdentity();
-        final UserInfo userInfo;
+        UserInfo userInfo = null;
         try {
             synchronized (mInstallLock) {
                 synchronized (mPackagesLock) {
+                    UserInfo profile = null;
+                    if (profileId != UserHandle.USER_NULL) {
+                        profile = getUserInfoLocked(profileId);
+                        if (profile == null) return null;
+                    }
                     if (isUserLimitReachedLocked()) return null;
                     int userId = getNextAvailableIdLocked();
                     userInfo = new UserInfo(userId, name, null, flags);
@@ -952,6 +1046,13 @@
                     Environment.getUserSystemDirectory(userInfo.id).mkdirs();
                     mUsers.put(userId, userInfo);
                     writeUserListLocked();
+                    if (profile != null) {
+                        if (profile.profileGroupId == UserInfo.NO_PROFILE_GROUP_ID) {
+                            profile.profileGroupId = getNextProfileGroupIdLocked();
+                            writeUserLocked(profile);
+                        }
+                        userInfo.profileGroupId = profile.profileGroupId;
+                    }
                     writeUserLocked(userInfo);
                     mPm.createNewUserLILPw(userId, userPath);
                     userInfo.partial = false;
@@ -976,7 +1077,7 @@
     /**
      * Removes a user and all data directories created for that user. This method should be called
      * after the user's processes have been terminated.
-     * @param id the user's id
+     * @param userHandle the user's id
      */
     public boolean removeUser(int userHandle) {
         checkManageUsersPermission("Only the system can remove users");
@@ -1118,6 +1219,12 @@
             // Write the restrictions to XML
             writeApplicationRestrictionsLocked(packageName, restrictions, userId);
         }
+
+        // Notify package of changes via an intent - only sent to explicitly registered receivers.
+        Intent changeIntent = new Intent(Intent.ACTION_APPLICATION_RESTRICTIONS_CHANGED);
+        changeIntent.setPackage(packageName);
+        changeIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+        mContext.sendBroadcastAsUser(changeIntent, new UserHandle(userId));
     }
 
     @Override
diff --git a/services/core/java/com/android/server/power/Notifier.java b/services/core/java/com/android/server/power/Notifier.java
index d9c1aa8..d9e95c7 100644
--- a/services/core/java/com/android/server/power/Notifier.java
+++ b/services/core/java/com/android/server/power/Notifier.java
@@ -38,6 +38,7 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.PowerManager;
+import android.os.Process;
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.os.UserHandle;
@@ -137,7 +138,7 @@
      * Called when a wake lock is acquired.
      */
     public void onWakeLockAcquired(int flags, String tag, String packageName,
-            int ownerUid, int ownerPid, WorkSource workSource) {
+            int ownerUid, int ownerPid, WorkSource workSource, String historyTag) {
         if (DEBUG) {
             Slog.d(TAG, "onWakeLockAcquired: flags=" + flags + ", tag=\"" + tag
                     + "\", packageName=" + packageName
@@ -147,10 +148,14 @@
 
         try {
             final int monitorType = getBatteryStatsWakeLockMonitorType(flags);
+            boolean unimportantForLogging = (flags&PowerManager.UNIMPORTANT_FOR_LOGGING) != 0
+                    && ownerUid == Process.SYSTEM_UID;
             if (workSource != null) {
-                mBatteryStats.noteStartWakelockFromSource(workSource, ownerPid, tag, monitorType);
+                mBatteryStats.noteStartWakelockFromSource(workSource, ownerPid, tag, historyTag,
+                        monitorType, unimportantForLogging);
             } else {
-                mBatteryStats.noteStartWakelock(ownerUid, ownerPid, tag, monitorType);
+                mBatteryStats.noteStartWakelock(ownerUid, ownerPid, tag, historyTag,
+                        monitorType, unimportantForLogging);
                 // XXX need to deal with disabled operations.
                 mAppOps.startOperation(AppOpsManager.getToken(mAppOps),
                         AppOpsManager.OP_WAKE_LOCK, ownerUid, packageName);
@@ -161,6 +166,39 @@
     }
 
     /**
+     * Called when a wake lock is changing.
+     */
+    public void onWakeLockChanging(int flags, String tag, String packageName,
+            int ownerUid, int ownerPid, WorkSource workSource, String historyTag,
+            int newFlags, String newTag, String newPackageName, int newOwnerUid,
+            int newOwnerPid, WorkSource newWorkSource, String newHistoryTag) {
+
+        if (workSource != null && newWorkSource != null) {
+            final int monitorType = getBatteryStatsWakeLockMonitorType(flags);
+            final int newMonitorType = getBatteryStatsWakeLockMonitorType(newFlags);
+            boolean unimportantForLogging = (newFlags&PowerManager.UNIMPORTANT_FOR_LOGGING) != 0
+                    && newOwnerUid == Process.SYSTEM_UID;
+            if (DEBUG) {
+                Slog.d(TAG, "onWakeLockChanging: flags=" + newFlags + ", tag=\"" + newTag
+                        + "\", packageName=" + newPackageName
+                        + ", ownerUid=" + newOwnerUid + ", ownerPid=" + newOwnerPid
+                        + ", workSource=" + newWorkSource);
+            }
+            try {
+                mBatteryStats.noteChangeWakelockFromSource(workSource, ownerPid, tag, monitorType,
+                        newWorkSource, newOwnerPid, newTag, newHistoryTag,
+                        newMonitorType, unimportantForLogging);
+            } catch (RemoteException ex) {
+                // Ignore
+            }
+        } else {
+            onWakeLockReleased(flags, tag, packageName, ownerUid, ownerPid, workSource);
+            onWakeLockAcquired(newFlags, newTag, newPackageName, newOwnerUid, newOwnerPid,
+                    newWorkSource, newHistoryTag);
+        }
+    }
+
+    /**
      * Called when a wake lock is released.
      */
     public void onWakeLockReleased(int flags, String tag, String packageName,
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 7138c3e..cfe24fe 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -168,6 +168,10 @@
     // Poll interval in milliseconds for watching boot animation finished.
     private static final int BOOT_ANIMATION_POLL_INTERVAL = 200;
 
+    //powerHint
+    private static final int POWER_HINT_LOW_POWER_MODE = 5;
+    private static boolean mLowPowerModeEnabled;
+
     private final Context mContext;
     private LightsManager mLightsManager;
     private BatteryService mBatteryService;
@@ -401,6 +405,7 @@
     private static native void nativeReleaseSuspendBlocker(String name);
     private static native void nativeSetInteractive(boolean enable);
     private static native void nativeSetAutoSuspend(boolean enable);
+    private static native void nativeSendPowerHint(int hintId, int data);
 
     public PowerManagerService(Context context) {
         super(context);
@@ -529,7 +534,9 @@
             resolver.registerContentObserver(Settings.System.getUriFor(
                     Settings.System.SCREEN_BRIGHTNESS_MODE),
                     false, mSettingsObserver, UserHandle.USER_ALL);
-
+            resolver.registerContentObserver(Settings.Global.getUriFor(
+                    Settings.Global.LOW_POWER_MODE),
+                    false, mSettingsObserver, UserHandle.USER_ALL);
             // Go.
             readConfigurationLocked();
             updateSettingsLocked();
@@ -609,6 +616,14 @@
                 Settings.System.SCREEN_BRIGHTNESS_MODE,
                 Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL, UserHandle.USER_CURRENT);
 
+        boolean mIsEnabled = Settings.Global.getInt(resolver,
+            Settings.Global.LOW_POWER_MODE, 0) != 0;
+        if (mIsEnabled != mLowPowerModeEnabled) {
+            BinderService bs = new BinderService();
+            bs.powerHint(POWER_HINT_LOW_POWER_MODE, mIsEnabled ? 1 : 0);
+            mLowPowerModeEnabled = mIsEnabled;
+        }
+
         mDirty |= DIRTY_SETTINGS;
     }
 
@@ -618,7 +633,7 @@
     }
 
     private void acquireWakeLockInternal(IBinder lock, int flags, String tag, String packageName,
-            WorkSource ws, int uid, int pid) {
+            WorkSource ws, String historyTag, int uid, int pid) {
         synchronized (mLock) {
             if (DEBUG_SPEW) {
                 Slog.d(TAG, "acquireWakeLockInternal: lock=" + Objects.hashCode(lock)
@@ -632,12 +647,12 @@
                 wakeLock = mWakeLocks.get(index);
                 if (!wakeLock.hasSameProperties(flags, tag, ws, uid, pid)) {
                     // Update existing wake lock.  This shouldn't happen but is harmless.
-                    notifyWakeLockReleasedLocked(wakeLock);
-                    wakeLock.updateProperties(flags, tag, packageName, ws, uid, pid);
-                    notifyWakeLockAcquiredLocked(wakeLock);
+                    notifyWakeLockChangingLocked(wakeLock, flags, tag, packageName,
+                            uid, pid, ws, historyTag);
+                    wakeLock.updateProperties(flags, tag, packageName, ws, historyTag, uid, pid);
                 }
             } else {
-                wakeLock = new WakeLock(lock, flags, tag, packageName, ws, uid, pid);
+                wakeLock = new WakeLock(lock, flags, tag, packageName, ws, historyTag, uid, pid);
                 try {
                     lock.linkToDeath(wakeLock, 0);
                 } catch (RemoteException ex) {
@@ -733,7 +748,7 @@
         }
     }
 
-    private void updateWakeLockWorkSourceInternal(IBinder lock, WorkSource ws) {
+    private void updateWakeLockWorkSourceInternal(IBinder lock, WorkSource ws, String historyTag) {
         synchronized (mLock) {
             int index = findWakeLockIndexLocked(lock);
             if (index < 0) {
@@ -751,9 +766,11 @@
             }
 
             if (!wakeLock.hasSameWorkSource(ws)) {
-                notifyWakeLockReleasedLocked(wakeLock);
+                notifyWakeLockChangingLocked(wakeLock, wakeLock.mFlags, wakeLock.mTag,
+                        wakeLock.mPackageName, wakeLock.mOwnerUid, wakeLock.mOwnerPid,
+                        ws, historyTag);
+                wakeLock.mHistoryTag = historyTag;
                 wakeLock.updateWorkSource(ws);
-                notifyWakeLockAcquiredLocked(wakeLock);
             }
         }
     }
@@ -772,7 +789,17 @@
         if (mSystemReady) {
             wakeLock.mNotifiedAcquired = true;
             mNotifier.onWakeLockAcquired(wakeLock.mFlags, wakeLock.mTag, wakeLock.mPackageName,
-                    wakeLock.mOwnerUid, wakeLock.mOwnerPid, wakeLock.mWorkSource);
+                    wakeLock.mOwnerUid, wakeLock.mOwnerPid, wakeLock.mWorkSource,
+                    wakeLock.mHistoryTag);
+        }
+    }
+
+    private void notifyWakeLockChangingLocked(WakeLock wakeLock, int flags, String tag,
+            String packageName, int uid, int pid, WorkSource ws, String historyTag) {
+        if (mSystemReady && wakeLock.mNotifiedAcquired) {
+            mNotifier.onWakeLockChanging(wakeLock.mFlags, wakeLock.mTag, wakeLock.mPackageName,
+                    wakeLock.mOwnerUid, wakeLock.mOwnerPid, wakeLock.mWorkSource,
+                    wakeLock.mHistoryTag, flags, tag, packageName, uid, pid, ws, historyTag);
         }
     }
 
@@ -1999,9 +2026,10 @@
     }
 
     /**
-     * Low-level function to reboot the device. On success, this function
-     * doesn't return. If more than 5 seconds passes from the time,
-     * a reboot is requested, this method returns.
+     * Low-level function to reboot the device. On success, this
+     * function doesn't return. If more than 20 seconds passes from
+     * the time a reboot is requested (120 seconds for reboot to
+     * recovery), this method returns.
      *
      * @param reason code to pass to the kernel (e.g. "recovery"), or null.
      */
@@ -2009,9 +2037,24 @@
         if (reason == null) {
             reason = "";
         }
-        SystemProperties.set("sys.powerctl", "reboot," + reason);
+        long duration;
+        if (reason.equals(PowerManager.REBOOT_RECOVERY)) {
+            // If we are rebooting to go into recovery, instead of
+            // setting sys.powerctl directly we'll start the
+            // pre-recovery service which will do some preparation for
+            // recovery and then reboot for us.
+            //
+            // This preparation can take more than 20 seconds if
+            // there's a very large update package, so lengthen the
+            // timeout.
+            SystemProperties.set("ctl.start", "pre-recovery");
+            duration = 120 * 1000L;
+        } else {
+            SystemProperties.set("sys.powerctl", "reboot," + reason);
+            duration = 20 * 1000L;
+        }
         try {
-            Thread.sleep(20000);
+            Thread.sleep(duration);
         } catch (InterruptedException e) {
             Thread.currentThread().interrupt();
         }
@@ -2267,17 +2310,19 @@
         public String mTag;
         public final String mPackageName;
         public WorkSource mWorkSource;
+        public String mHistoryTag;
         public final int mOwnerUid;
         public final int mOwnerPid;
         public boolean mNotifiedAcquired;
 
         public WakeLock(IBinder lock, int flags, String tag, String packageName,
-                WorkSource workSource, int ownerUid, int ownerPid) {
+                WorkSource workSource, String historyTag, int ownerUid, int ownerPid) {
             mLock = lock;
             mFlags = flags;
             mTag = tag;
             mPackageName = packageName;
             mWorkSource = copyWorkSource(workSource);
+            mHistoryTag = historyTag;
             mOwnerUid = ownerUid;
             mOwnerPid = ownerPid;
         }
@@ -2297,7 +2342,7 @@
         }
 
         public void updateProperties(int flags, String tag, String packageName,
-                WorkSource workSource, int ownerUid, int ownerPid) {
+                WorkSource workSource, String historyTag, int ownerUid, int ownerPid) {
             if (!mPackageName.equals(packageName)) {
                 throw new IllegalStateException("Existing wake lock package name changed: "
                         + mPackageName + " to " + packageName);
@@ -2313,6 +2358,7 @@
             mFlags = flags;
             mTag = tag;
             updateWorkSource(workSource);
+            mHistoryTag = historyTag;
         }
 
         public boolean hasSameWorkSource(WorkSource workSource) {
@@ -2471,12 +2517,21 @@
         @Override // Binder call
         public void acquireWakeLockWithUid(IBinder lock, int flags, String tag,
                 String packageName, int uid) {
-            acquireWakeLock(lock, flags, tag, packageName, new WorkSource(uid));
+            if (uid < 0) {
+                uid = Binder.getCallingUid();
+            }
+            acquireWakeLock(lock, flags, tag, packageName, new WorkSource(uid), null);
+        }
+
+        @Override // Binder call
+        public void powerHint(int hintId, int data) {
+            mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
+            nativeSendPowerHint(hintId, data);
         }
 
         @Override // Binder call
         public void acquireWakeLock(IBinder lock, int flags, String tag, String packageName,
-                WorkSource ws) {
+                WorkSource ws, String historyTag) {
             if (lock == null) {
                 throw new IllegalArgumentException("lock must not be null");
             }
@@ -2497,7 +2552,7 @@
             final int pid = Binder.getCallingPid();
             final long ident = Binder.clearCallingIdentity();
             try {
-                acquireWakeLockInternal(lock, flags, tag, packageName, ws, uid, pid);
+                acquireWakeLockInternal(lock, flags, tag, packageName, ws, historyTag, uid, pid);
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
@@ -2531,11 +2586,11 @@
                     ws.add(uids[i]);
                 }
             }
-            updateWakeLockWorkSource(lock, ws);
+            updateWakeLockWorkSource(lock, ws, null);
         }
 
         @Override // Binder call
-        public void updateWakeLockWorkSource(IBinder lock, WorkSource ws) {
+        public void updateWakeLockWorkSource(IBinder lock, WorkSource ws, String historyTag) {
             if (lock == null) {
                 throw new IllegalArgumentException("lock must not be null");
             }
@@ -2550,7 +2605,7 @@
 
             final long ident = Binder.clearCallingIdentity();
             try {
-                updateWakeLockWorkSourceInternal(lock, ws);
+                updateWakeLockWorkSourceInternal(lock, ws, historyTag);
             } finally {
                 Binder.restoreCallingIdentity(ident);
             }
@@ -2671,6 +2726,9 @@
         @Override // Binder call
         public void reboot(boolean confirm, String reason, boolean wait) {
             mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null);
+            if (PowerManager.REBOOT_RECOVERY.equals(reason)) {
+                mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null);
+            }
 
             final long ident = Binder.clearCallingIdentity();
             try {
diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java
index 88a27f5..8fed79f 100644
--- a/services/core/java/com/android/server/power/ShutdownThread.java
+++ b/services/core/java/com/android/server/power/ShutdownThread.java
@@ -24,6 +24,7 @@
 import android.app.ProgressDialog;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.IBluetoothManager;
+import android.media.AudioManager;
 import android.nfc.NfcAdapter;
 import android.nfc.INfcAdapter;
 import android.content.BroadcastReceiver;
@@ -498,7 +499,7 @@
             // vibrate before shutting down
             Vibrator vibrator = new SystemVibrator();
             try {
-                vibrator.vibrate(SHUTDOWN_VIBRATE_MS);
+                vibrator.vibrate(SHUTDOWN_VIBRATE_MS, AudioManager.STREAM_SYSTEM);
             } catch (Exception e) {
                 // Failure to vibrate shouldn't interrupt shutdown.  Just log it.
                 Log.w(TAG, "Failed to vibrate during shutdown.", e);
diff --git a/services/core/java/com/android/server/search/SearchManagerService.java b/services/core/java/com/android/server/search/SearchManagerService.java
index b5d81d1..486477a 100644
--- a/services/core/java/com/android/server/search/SearchManagerService.java
+++ b/services/core/java/com/android/server/search/SearchManagerService.java
@@ -17,7 +17,6 @@
 package com.android.server.search;
 
 import android.app.ActivityManager;
-import android.app.ActivityManagerNative;
 import android.app.AppGlobals;
 import android.app.ISearchManager;
 import android.app.SearchManager;
@@ -39,7 +38,6 @@
 import android.os.UserManager;
 import android.provider.Settings;
 import android.util.Log;
-import android.util.Slog;
 import android.util.SparseArray;
 
 import com.android.internal.content.PackageMonitor;
diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
index 2ae467e..91f796b 100644
--- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
+++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java
@@ -23,9 +23,7 @@
 import android.os.RemoteException;
 import android.os.UserHandle;
 import android.service.notification.StatusBarNotification;
-import android.content.BroadcastReceiver;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.util.Slog;
@@ -207,6 +205,10 @@
 
     @Override
     public void disable(int what, IBinder token, String pkg) {
+        if (!mNotificationDelegate.allowDisable(what, token, pkg)) {
+            if (SPEW) Slog.d(TAG, "Blocking disable request from " + pkg);
+            return;
+        }
         disableInternal(mCurrentUserId, what, token, pkg);
     }
 
@@ -533,11 +535,24 @@
     }
 
     @Override
-    public void onNotificationClick(String pkg, String tag, int id) {
+    public void onPanelHidden() throws RemoteException {
         enforceStatusBarService();
         long identity = Binder.clearCallingIdentity();
         try {
-            mNotificationDelegate.onNotificationClick(pkg, tag, id);
+            mNotificationDelegate.onPanelHidden();
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public void onNotificationClick(String pkg, String tag, int id, int userId) {
+        enforceStatusBarService();
+        final int callingUid = Binder.getCallingUid();
+        final int callingPid = Binder.getCallingPid();
+        long identity = Binder.clearCallingIdentity();
+        try {
+            mNotificationDelegate.onNotificationClick(callingUid, callingPid, pkg, tag, id, userId);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
@@ -545,34 +560,54 @@
 
     @Override
     public void onNotificationError(String pkg, String tag, int id,
-            int uid, int initialPid, String message) {
+            int uid, int initialPid, String message, int userId) {
         enforceStatusBarService();
+        final int callingUid = Binder.getCallingUid();
+        final int callingPid = Binder.getCallingPid();
         long identity = Binder.clearCallingIdentity();
         try {
             // WARNING: this will call back into us to do the remove.  Don't hold any locks.
-            mNotificationDelegate.onNotificationError(pkg, tag, id, uid, initialPid, message);
+            mNotificationDelegate.onNotificationError(callingUid, callingPid,
+                    pkg, tag, id, uid, initialPid, message, userId);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
     }
 
     @Override
-    public void onNotificationClear(String pkg, String tag, int id) {
+    public void onNotificationClear(String pkg, String tag, int id, int userId) {
         enforceStatusBarService();
+        final int callingUid = Binder.getCallingUid();
+        final int callingPid = Binder.getCallingPid();
         long identity = Binder.clearCallingIdentity();
         try {
-            mNotificationDelegate.onNotificationClear(pkg, tag, id);
+            mNotificationDelegate.onNotificationClear(callingUid, callingPid, pkg, tag, id, userId);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
     }
 
     @Override
-    public void onClearAllNotifications() {
+    public void onNotificationVisibilityChanged(
+            String[] newlyVisibleKeys, String[] noLongerVisibleKeys) throws RemoteException {
         enforceStatusBarService();
         long identity = Binder.clearCallingIdentity();
         try {
-            mNotificationDelegate.onClearAll();
+            mNotificationDelegate.onNotificationVisibilityChanged(
+                    newlyVisibleKeys, noLongerVisibleKeys);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    @Override
+    public void onClearAllNotifications(int userId) {
+        enforceStatusBarService();
+        final int callingUid = Binder.getCallingUid();
+        final int callingPid = Binder.getCallingPid();
+        long identity = Binder.clearCallingIdentity();
+        try {
+            mNotificationDelegate.onClearAll(callingUid, callingPid, userId);
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
@@ -676,26 +711,4 @@
             }
         }
     }
-
-    private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)
-                    || Intent.ACTION_SCREEN_OFF.equals(action)) {
-                collapsePanels();
-            }
-            /*
-            else if (Telephony.Intents.SPN_STRINGS_UPDATED_ACTION.equals(action)) {
-                updateNetworkName(intent.getBooleanExtra(Telephony.Intents.EXTRA_SHOW_SPN, false),
-                        intent.getStringExtra(Telephony.Intents.EXTRA_SPN),
-                        intent.getBooleanExtra(Telephony.Intents.EXTRA_SHOW_PLMN, false),
-                        intent.getStringExtra(Telephony.Intents.EXTRA_PLMN));
-            }
-            else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) {
-                updateResources();
-            }
-            */
-        }
-    };
-
 }
diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
index 43a99e0..eb38f4a 100644
--- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
+++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
@@ -454,6 +454,8 @@
         notification.tickerText = title;
         notification.flags |= Notification.FLAG_NO_CLEAR;
         notification.setLatestEventInfo(context, title, details, intent);
+        notification.visibility = Notification.VISIBILITY_PUBLIC;
+        notification.category = Notification.CATEGORY_SYSTEM;
         mNotificationMgr.notifyAsUser(null, LOW_MEMORY_NOTIFICATION_ID, notification,
                 UserHandle.ALL);
         context.sendStickyBroadcastAsUser(mStorageLowIntent, UserHandle.ALL);
diff --git a/services/core/java/com/android/server/trust/TrustAgentWrapper.java b/services/core/java/com/android/server/trust/TrustAgentWrapper.java
new file mode 100644
index 0000000..a83fa87
--- /dev/null
+++ b/services/core/java/com/android/server/trust/TrustAgentWrapper.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2014 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.android.server.trust;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.util.Log;
+import android.util.Slog;
+import android.service.trust.ITrustAgentService;
+import android.service.trust.ITrustAgentServiceCallback;
+
+/**
+ * A wrapper around a TrustAgentService interface. Coordinates communication between
+ * TrustManager and the actual TrustAgent.
+ */
+public class TrustAgentWrapper {
+    private static final boolean DEBUG = false;
+    private static final String TAG = "TrustAgentWrapper";
+
+    private static final int MSG_ENABLE_TRUST = 1;
+    private static final int MSG_REVOKE_TRUST = 2;
+    private static final int MSG_TRUST_TIMEOUT = 3;
+
+    private final TrustManagerService mTrustManagerService;
+    private final int mUserId;
+    private final Context mContext;
+    private final ComponentName mName;
+
+    private ITrustAgentService mTrustAgentService;
+
+    // Trust state
+    private boolean mTrusted;
+    private String mMessage;
+
+    private final Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_ENABLE_TRUST:
+                    mTrusted = true;
+                    mMessage = (String) msg.obj;
+                    boolean initiatedByUser = msg.arg1 != 0;
+                    // TODO: Handle handle user initiated trust changes.
+                    mTrustManagerService.updateTrust(mUserId);
+                    break;
+                case MSG_TRUST_TIMEOUT:
+                    if (DEBUG) Slog.v(TAG, "Trust timed out : " + mName.flattenToShortString());
+                    // Fall through.
+                case MSG_REVOKE_TRUST:
+                    mTrusted = false;
+                    mMessage = null;
+                    mTrustManagerService.updateTrust(mUserId);
+                    break;
+            }
+        }
+    };
+
+    private ITrustAgentServiceCallback mCallback = new ITrustAgentServiceCallback.Stub() {
+
+        public void enableTrust(String userMessage, long durationMs, boolean initiatedByUser) {
+            if (DEBUG) Slog.v(TAG, "enableTrust(" + userMessage + ", durationMs = " + durationMs
+                        + ", initiatedByUser = " + initiatedByUser + ")");
+
+            mHandler.obtainMessage(MSG_ENABLE_TRUST, initiatedByUser ? 1 : 0, 0, userMessage)
+                    .sendToTarget();
+            if (durationMs > 0) {
+                mHandler.removeMessages(MSG_TRUST_TIMEOUT);
+                mHandler.sendEmptyMessageDelayed(MSG_TRUST_TIMEOUT, durationMs);
+            }
+        }
+
+        public void revokeTrust() {
+            if (DEBUG) Slog.v(TAG, "revokeTrust()");
+            mHandler.sendEmptyMessage(MSG_REVOKE_TRUST);
+        }
+    };
+
+    private final ServiceConnection mConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            if (DEBUG) Log.v(TAG, "TrustAgent started : " + name.flattenToString());
+            mTrustAgentService = ITrustAgentService.Stub.asInterface(service);
+            setCallback(mCallback);
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            if (DEBUG) Log.v(TAG, "TrustAgent disconnected : " + name.flattenToShortString());
+            mTrustAgentService = null;
+            mHandler.sendEmptyMessage(MSG_REVOKE_TRUST);
+        }
+    };
+
+
+    public TrustAgentWrapper(Context context, TrustManagerService trustManagerService,
+            Intent intent, UserHandle user) {
+        mContext = context;
+        mTrustManagerService = trustManagerService;
+        mUserId = user.getIdentifier();
+        mName = intent.getComponent();
+        if (!context.bindServiceAsUser(intent, mConnection, Context.BIND_AUTO_CREATE, user)) {
+            if (DEBUG) Log.v(TAG, "can't bind to TrustAgent " + mName.flattenToShortString());
+            // TODO: retry somehow?
+        }
+    }
+
+    private void onError(Exception e) {
+        Slog.w(TAG , "Remote Exception", e);
+    }
+
+    /**
+     * @see android.service.trust.TrustAgentService#onUnlockAttempt(boolean)
+     */
+    public void onUnlockAttempt(boolean successful) {
+        try {
+            if (mTrustAgentService != null) mTrustAgentService.onUnlockAttempt(successful);
+        } catch (RemoteException e) {
+            onError(e);
+        }
+    }
+
+    private void setCallback(ITrustAgentServiceCallback callback) {
+        try {
+            if (mTrustAgentService != null) {
+                mTrustAgentService.setCallback(callback);
+            }
+        } catch (RemoteException e) {
+            onError(e);
+        }
+    }
+
+    public boolean isTrusted() {
+        return mTrusted;
+    }
+
+    public String getMessage() {
+        return mMessage;
+    }
+
+    public void unbind() {
+        if (DEBUG) Log.v(TAG, "TrustAgent unbound : " + mName.flattenToShortString());
+        mContext.unbindService(mConnection);
+    }
+}
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
new file mode 100644
index 0000000..9061f96
--- /dev/null
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2014 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.android.server.trust;
+
+import com.android.internal.content.PackageMonitor;
+import com.android.internal.widget.LockPatternUtils;
+import com.android.server.SystemService;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import android.Manifest;
+import android.app.trust.ITrustListener;
+import android.app.trust.ITrustManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.UserInfo;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.content.res.XmlResourceParser;
+import android.graphics.drawable.Drawable;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.service.trust.TrustAgentService;
+import android.util.ArraySet;
+import android.util.AttributeSet;
+import android.util.Slog;
+import android.util.Xml;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Manages trust agents and trust listeners.
+ *
+ * It is responsible for binding to the enabled {@link android.service.trust.TrustAgentService}s
+ * of each user and notifies them about events that are relevant to them.
+ * It start and stops them based on the value of
+ * {@link com.android.internal.widget.LockPatternUtils#getEnabledTrustAgents(int)}.
+ *
+ * It also keeps a set of {@link android.app.trust.ITrustListener}s that are notified whenever the
+ * trust state changes for any user.
+ *
+ * Trust state and the setting of enabled agents is kept per user and each user has its own
+ * instance of a {@link android.service.trust.TrustAgentService}.
+ */
+public class TrustManagerService extends SystemService {
+
+    private static final boolean DEBUG = false;
+    private static final String TAG = "TrustManagerService";
+
+    private static final Intent TRUST_AGENT_INTENT =
+            new Intent(TrustAgentService.SERVICE_INTERFACE);
+
+    private static final int MSG_REGISTER_LISTENER = 1;
+    private static final int MSG_UNREGISTER_LISTENER = 2;
+    private static final int MSG_DISPATCH_UNLOCK_ATTEMPT = 3;
+    private static final int MSG_ENABLED_AGENTS_CHANGED = 4;
+
+    private final ArraySet<AgentInfo> mActiveAgents = new ArraySet<AgentInfo>();
+    private final ArrayList<ITrustListener> mTrustListeners = new ArrayList<ITrustListener>();
+    private final Context mContext;
+
+    private UserManager mUserManager;
+
+    /**
+     * Cache for {@link #refreshAgentList()}
+     */
+    private final ArraySet<AgentInfo> mObsoleteAgents = new ArraySet<AgentInfo>();
+
+
+    public TrustManagerService(Context context) {
+        super(context);
+        mContext = context;
+        mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+    }
+
+    @Override
+    public void onStart() {
+        publishBinderService(Context.TRUST_SERVICE, mService);
+    }
+
+    @Override
+    public void onBootPhase(int phase) {
+        if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY && !isSafeMode()) {
+            // Listen for package changes
+            mPackageMonitor.register(mContext, mHandler.getLooper(), UserHandle.ALL, true);
+            refreshAgentList();
+        }
+    }
+
+    // Agent management
+
+    private static final class AgentInfo {
+        CharSequence label;
+        Drawable icon;
+        ComponentName component; // service that implements ITrustAgent
+        ComponentName settings; // setting to launch to modify agent.
+        TrustAgentWrapper agent;
+        int userId;
+
+        @Override
+        public boolean equals(Object other) {
+            if (!(other instanceof AgentInfo)) {
+                return false;
+            }
+            AgentInfo o = (AgentInfo) other;
+            return component.equals(o.component) && userId == o.userId;
+        }
+
+        @Override
+        public int hashCode() {
+            return component.hashCode() * 31 + userId;
+        }
+    }
+
+    private void updateTrustAll() {
+        List<UserInfo> userInfos = mUserManager.getUsers(true /* excludeDying */);
+        for (UserInfo userInfo : userInfos) {
+            updateTrust(userInfo.id);
+        }
+    }
+
+    public void updateTrust(int userId) {
+        dispatchOnTrustChanged(aggregateIsTrusted(userId), userId);
+    }
+
+    protected void refreshAgentList() {
+        if (DEBUG) Slog.d(TAG, "refreshAgentList()");
+        PackageManager pm = mContext.getPackageManager();
+
+        List<UserInfo> userInfos = mUserManager.getUsers(true /* excludeDying */);
+        LockPatternUtils lockPatternUtils = new LockPatternUtils(mContext);
+
+        mObsoleteAgents.clear();
+        mObsoleteAgents.addAll(mActiveAgents);
+
+        for (UserInfo userInfo : userInfos) {
+            List<ComponentName> enabledAgents = lockPatternUtils.getEnabledTrustAgents(userInfo.id);
+            if (enabledAgents == null) {
+                continue;
+            }
+            List<ResolveInfo> resolveInfos = pm.queryIntentServicesAsUser(TRUST_AGENT_INTENT,
+                    PackageManager.GET_META_DATA, userInfo.id);
+            for (ResolveInfo resolveInfo : resolveInfos) {
+                if (resolveInfo.serviceInfo == null) continue;
+                ComponentName name = getComponentName(resolveInfo);
+                if (!enabledAgents.contains(name)) continue;
+
+                AgentInfo agentInfo = new AgentInfo();
+                agentInfo.component = name;
+                agentInfo.userId = userInfo.id;
+                if (!mActiveAgents.contains(agentInfo)) {
+                    agentInfo.label = resolveInfo.loadLabel(pm);
+                    agentInfo.icon = resolveInfo.loadIcon(pm);
+                    agentInfo.settings = getSettingsComponentName(pm, resolveInfo);
+                    agentInfo.agent = new TrustAgentWrapper(mContext, this,
+                            new Intent().setComponent(name), userInfo.getUserHandle());
+                    mActiveAgents.add(agentInfo);
+                } else {
+                    mObsoleteAgents.remove(agentInfo);
+                }
+            }
+        }
+
+        boolean trustMayHaveChanged = false;
+        for (int i = 0; i < mObsoleteAgents.size(); i++) {
+            AgentInfo info = mObsoleteAgents.valueAt(i);
+            if (info.agent.isTrusted()) {
+                trustMayHaveChanged = true;
+            }
+            info.agent.unbind();
+            mActiveAgents.remove(info);
+        }
+
+        if (trustMayHaveChanged) {
+            updateTrustAll();
+        }
+    }
+
+    private ComponentName getSettingsComponentName(PackageManager pm, ResolveInfo resolveInfo) {
+        if (resolveInfo == null || resolveInfo.serviceInfo == null
+                || resolveInfo.serviceInfo.metaData == null) return null;
+        String cn = null;
+        XmlResourceParser parser = null;
+        Exception caughtException = null;
+        try {
+            parser = resolveInfo.serviceInfo.loadXmlMetaData(pm,
+                    TrustAgentService.TRUST_AGENT_META_DATA);
+            if (parser == null) {
+                Slog.w(TAG, "Can't find " + TrustAgentService.TRUST_AGENT_META_DATA + " meta-data");
+                return null;
+            }
+            Resources res = pm.getResourcesForApplication(resolveInfo.serviceInfo.applicationInfo);
+            AttributeSet attrs = Xml.asAttributeSet(parser);
+            int type;
+            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+                    && type != XmlPullParser.START_TAG) {
+                // Drain preamble.
+            }
+            String nodeName = parser.getName();
+            if (!"trust_agent".equals(nodeName)) {
+                Slog.w(TAG, "Meta-data does not start with trust_agent tag");
+                return null;
+            }
+            TypedArray sa = res
+                    .obtainAttributes(attrs, com.android.internal.R.styleable.TrustAgent);
+            cn = sa.getString(com.android.internal.R.styleable.TrustAgent_settingsActivity);
+            sa.recycle();
+        } catch (PackageManager.NameNotFoundException e) {
+            caughtException = e;
+        } catch (IOException e) {
+            caughtException = e;
+        } catch (XmlPullParserException e) {
+            caughtException = e;
+        } finally {
+            if (parser != null) parser.close();
+        }
+        if (caughtException != null) {
+            Slog.w(TAG, "Error parsing : " + resolveInfo.serviceInfo.packageName, caughtException);
+            return null;
+        }
+        if (cn == null) {
+            return null;
+        }
+        if (cn.indexOf('/') < 0) {
+            cn = resolveInfo.serviceInfo.packageName + "/" + cn;
+        }
+        return ComponentName.unflattenFromString(cn);
+    }
+
+    private ComponentName getComponentName(ResolveInfo resolveInfo) {
+        if (resolveInfo == null || resolveInfo.serviceInfo == null) return null;
+        return new ComponentName(resolveInfo.serviceInfo.packageName, resolveInfo.serviceInfo.name);
+    }
+
+    // Agent dispatch and aggregation
+
+    private boolean aggregateIsTrusted(int userId) {
+        for (int i = 0; i < mActiveAgents.size(); i++) {
+            AgentInfo info = mActiveAgents.valueAt(i);
+            if (info.userId == userId) {
+                if (info.agent.isTrusted()) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private void dispatchUnlockAttempt(boolean successful, int userId) {
+        for (int i = 0; i < mActiveAgents.size(); i++) {
+            AgentInfo info = mActiveAgents.valueAt(i);
+            if (info.userId == userId) {
+                info.agent.onUnlockAttempt(successful);
+            }
+        }
+    }
+
+    // Listeners
+
+    private void addListener(ITrustListener listener) {
+        for (int i = 0; i < mTrustListeners.size(); i++) {
+            if (mTrustListeners.get(i).asBinder() == listener.asBinder()) {
+                return;
+            }
+        }
+        mTrustListeners.add(listener);
+    }
+
+    private void removeListener(ITrustListener listener) {
+        for (int i = 0; i < mTrustListeners.size(); i++) {
+            if (mTrustListeners.get(i).asBinder() == listener.asBinder()) {
+                mTrustListeners.get(i);
+                return;
+            }
+        }
+    }
+
+    private void dispatchOnTrustChanged(boolean enabled, int userId) {
+        for (int i = 0; i < mTrustListeners.size(); i++) {
+            try {
+                mTrustListeners.get(i).onTrustChanged(enabled, userId);
+            } catch (RemoteException e) {
+                Slog.e(TAG, "Exception while notifying TrustListener. Removing listener.", e);
+                mTrustListeners.get(i);
+                i--;
+            }
+        }
+    }
+
+    // Plumbing
+
+    private final IBinder mService = new ITrustManager.Stub() {
+        @Override
+        public void reportUnlockAttempt(boolean authenticated, int userId) throws RemoteException {
+            enforceReportPermission();
+            mHandler.obtainMessage(MSG_DISPATCH_UNLOCK_ATTEMPT, authenticated ? 1 : 0, userId)
+                    .sendToTarget();
+        }
+
+        @Override
+        public void reportEnabledTrustAgentsChanged(int userId) throws RemoteException {
+            enforceReportPermission();
+            // coalesce refresh messages.
+            mHandler.removeMessages(MSG_ENABLED_AGENTS_CHANGED);
+            mHandler.sendEmptyMessage(MSG_ENABLED_AGENTS_CHANGED);
+        }
+
+        @Override
+        public void registerTrustListener(ITrustListener trustListener) throws RemoteException {
+            enforceListenerPermission();
+            mHandler.obtainMessage(MSG_REGISTER_LISTENER, trustListener).sendToTarget();
+        }
+
+        @Override
+        public void unregisterTrustListener(ITrustListener trustListener) throws RemoteException {
+            enforceListenerPermission();
+            mHandler.obtainMessage(MSG_UNREGISTER_LISTENER, trustListener).sendToTarget();
+        }
+
+        private void enforceReportPermission() {
+            mContext.enforceCallingPermission(Manifest.permission.ACCESS_KEYGUARD_SECURE_STORAGE,
+                    "reporting trust events");
+        }
+
+        private void enforceListenerPermission() {
+            mContext.enforceCallingPermission(Manifest.permission.TRUST_LISTENER,
+                    "register trust listener");
+        }
+    };
+
+    private final Handler mHandler = new Handler() {
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_REGISTER_LISTENER:
+                    addListener((ITrustListener) msg.obj);
+                    break;
+                case MSG_UNREGISTER_LISTENER:
+                    removeListener((ITrustListener) msg.obj);
+                    break;
+                case MSG_DISPATCH_UNLOCK_ATTEMPT:
+                    dispatchUnlockAttempt(msg.arg1 != 0, msg.arg2);
+                    break;
+                case MSG_ENABLED_AGENTS_CHANGED:
+                    refreshAgentList();
+                    break;
+            }
+        }
+    };
+
+    private final PackageMonitor mPackageMonitor = new PackageMonitor() {
+        @Override
+        public void onSomePackagesChanged() {
+            refreshAgentList();
+        }
+
+        @Override
+        public boolean onPackageChanged(String packageName, int uid, String[] components) {
+            // We're interested in all changes, even if just some components get enabled / disabled.
+            return true;
+        }
+    };
+}
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
new file mode 100644
index 0000000..50dd27d
--- /dev/null
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -0,0 +1,949 @@
+/*
+ * Copyright (C) 2014 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.android.server.tv;
+
+import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ServiceInfo;
+import android.database.Cursor;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Binder;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.os.Process;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.provider.TvContract;
+import android.tv.ITvInputClient;
+import android.tv.ITvInputManager;
+import android.tv.ITvInputService;
+import android.tv.ITvInputServiceCallback;
+import android.tv.ITvInputSession;
+import android.tv.ITvInputSessionCallback;
+import android.tv.TvInputInfo;
+import android.tv.TvInputService;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.view.InputChannel;
+import android.view.Surface;
+
+import com.android.internal.content.PackageMonitor;
+import com.android.internal.os.SomeArgs;
+import com.android.server.IoThread;
+import com.android.server.SystemService;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/** This class provides a system service that manages television inputs. */
+public final class TvInputManagerService extends SystemService {
+    // STOPSHIP: Turn debugging off.
+    private static final boolean DEBUG = true;
+    private static final String TAG = "TvInputManagerService";
+
+    private final Context mContext;
+
+    private final ContentResolver mContentResolver;
+
+    // A global lock.
+    private final Object mLock = new Object();
+
+    // ID of the current user.
+    private int mCurrentUserId = UserHandle.USER_OWNER;
+
+    // A map from user id to UserState.
+    private final SparseArray<UserState> mUserStates = new SparseArray<UserState>();
+
+    private final Handler mLogHandler;
+
+    public TvInputManagerService(Context context) {
+        super(context);
+
+        mContext = context;
+        mContentResolver = context.getContentResolver();
+        mLogHandler = new LogHandler(IoThread.get().getLooper());
+
+        registerBroadcastReceivers();
+
+        synchronized (mLock) {
+            mUserStates.put(mCurrentUserId, new UserState());
+            buildTvInputListLocked(mCurrentUserId);
+        }
+    }
+
+    @Override
+    public void onStart() {
+        publishBinderService(Context.TV_INPUT_SERVICE, new BinderService());
+    }
+
+    private void registerBroadcastReceivers() {
+        PackageMonitor monitor = new PackageMonitor() {
+            @Override
+            public void onSomePackagesChanged() {
+                synchronized (mLock) {
+                    buildTvInputListLocked(mCurrentUserId);
+                }
+            }
+        };
+        monitor.register(mContext, null, UserHandle.ALL, true);
+
+        IntentFilter intentFilter = new IntentFilter();
+        intentFilter.addAction(Intent.ACTION_USER_SWITCHED);
+        intentFilter.addAction(Intent.ACTION_USER_REMOVED);
+        mContext.registerReceiverAsUser(new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                String action = intent.getAction();
+                if (Intent.ACTION_USER_SWITCHED.equals(action)) {
+                    switchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
+                } else if (Intent.ACTION_USER_REMOVED.equals(action)) {
+                    removeUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0));
+                }
+            }
+        }, UserHandle.ALL, intentFilter, null, null);
+    }
+
+    private void buildTvInputListLocked(int userId) {
+        UserState userState = getUserStateLocked(userId);
+        userState.inputList.clear();
+
+        if (DEBUG) Slog.d(TAG, "buildTvInputList");
+        PackageManager pm = mContext.getPackageManager();
+        List<ResolveInfo> services = pm.queryIntentServices(
+                new Intent(TvInputService.SERVICE_INTERFACE), PackageManager.GET_SERVICES);
+        for (ResolveInfo ri : services) {
+            ServiceInfo si = ri.serviceInfo;
+            if (!android.Manifest.permission.BIND_TV_INPUT.equals(si.permission)) {
+                Slog.w(TAG, "Skipping TV input " + si.name + ": it does not require the permission "
+                        + android.Manifest.permission.BIND_TV_INPUT);
+                continue;
+            }
+            TvInputInfo info = new TvInputInfo(ri);
+            if (DEBUG) Slog.d(TAG, "add " + info.getId());
+            userState.inputList.add(info);
+        }
+    }
+
+    private void switchUser(int userId) {
+        synchronized (mLock) {
+            if (mCurrentUserId == userId) {
+                return;
+            }
+            // final int oldUserId = mCurrentUserId;
+            // TODO: Release services and sessions in the old user state, if needed.
+            mCurrentUserId = userId;
+
+            UserState userState = mUserStates.get(userId);
+            if (userState == null) {
+                userState = new UserState();
+            }
+            mUserStates.put(userId, userState);
+            buildTvInputListLocked(userId);
+        }
+    }
+
+    private void removeUser(int userId) {
+        synchronized (mLock) {
+            UserState userState = mUserStates.get(userId);
+            if (userState == null) {
+                return;
+            }
+            // Release created sessions.
+            for (SessionState state : userState.sessionStateMap.values()) {
+                if (state.session != null) {
+                    try {
+                        state.session.release();
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in release", e);
+                    }
+                }
+            }
+            userState.sessionStateMap.clear();
+
+            // Unregister all callbacks and unbind all services.
+            for (ServiceState serviceState : userState.serviceStateMap.values()) {
+                if (serviceState.callback != null) {
+                    try {
+                        serviceState.service.unregisterCallback(serviceState.callback);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in unregisterCallback", e);
+                    }
+                }
+                serviceState.clients.clear();
+                mContext.unbindService(serviceState.connection);
+            }
+            userState.serviceStateMap.clear();
+
+            mUserStates.remove(userId);
+        }
+    }
+
+    private UserState getUserStateLocked(int userId) {
+        UserState userState = mUserStates.get(userId);
+        if (userState == null) {
+            throw new IllegalStateException("User state not found for user ID " + userId);
+        }
+        return userState;
+    }
+
+    private ServiceState getServiceStateLocked(ComponentName name, int userId) {
+        UserState userState = getUserStateLocked(userId);
+        ServiceState serviceState = userState.serviceStateMap.get(name);
+        if (serviceState == null) {
+            throw new IllegalStateException("Service state not found for " + name + " (userId="
+                    + userId + ")");
+        }
+        return serviceState;
+    }
+
+    private ITvInputSession getSessionLocked(IBinder sessionToken, int callingUid, int userId) {
+        UserState userState = getUserStateLocked(userId);
+        SessionState sessionState = userState.sessionStateMap.get(sessionToken);
+        if (sessionState == null) {
+            throw new IllegalArgumentException("Session state not found for token " + sessionToken);
+        }
+        // Only the application that requested this session or the system can access it.
+        if (callingUid != Process.SYSTEM_UID && callingUid != sessionState.callingUid) {
+            throw new SecurityException("Illegal access to the session with token " + sessionToken
+                    + " from uid " + callingUid);
+        }
+        ITvInputSession session = sessionState.session;
+        if (session == null) {
+            throw new IllegalStateException("Session not yet created for token " + sessionToken);
+        }
+        return session;
+    }
+
+    private int resolveCallingUserId(int callingPid, int callingUid, int requestedUserId,
+            String methodName) {
+        return ActivityManager.handleIncomingUser(callingPid, callingUid, requestedUserId, false,
+                false, methodName, null);
+    }
+
+    private void updateServiceConnectionLocked(ComponentName name, int userId) {
+        UserState userState = getUserStateLocked(userId);
+        ServiceState serviceState = userState.serviceStateMap.get(name);
+        if (serviceState == null) {
+            return;
+        }
+        boolean isStateEmpty = serviceState.clients.isEmpty()
+                && serviceState.sessionTokens.isEmpty();
+        if (serviceState.service == null && !isStateEmpty && userId == mCurrentUserId) {
+            // This means that the service is not yet connected but its state indicates that we
+            // have pending requests. Then, connect the service.
+            if (serviceState.bound) {
+                // We have already bound to the service so we don't try to bind again until after we
+                // unbind later on.
+                return;
+            }
+            if (DEBUG) {
+                Slog.d(TAG, "bindServiceAsUser(name=" + name.getClassName() + ", userId=" + userId
+                        + ")");
+            }
+            Intent i = new Intent(TvInputService.SERVICE_INTERFACE).setComponent(name);
+            mContext.bindServiceAsUser(i, serviceState.connection, Context.BIND_AUTO_CREATE,
+                    new UserHandle(userId));
+            serviceState.bound = true;
+        } else if (serviceState.service != null && isStateEmpty) {
+            // This means that the service is already connected but its state indicates that we have
+            // nothing to do with it. Then, disconnect the service.
+            if (DEBUG) {
+                Slog.d(TAG, "unbindService(name=" + name.getClassName() + ")");
+            }
+            mContext.unbindService(serviceState.connection);
+            userState.serviceStateMap.remove(name);
+        }
+    }
+
+    private void createSessionInternalLocked(ITvInputService service, final IBinder sessionToken,
+            final int userId) {
+        final SessionState sessionState =
+                getUserStateLocked(userId).sessionStateMap.get(sessionToken);
+        if (DEBUG) {
+            Slog.d(TAG, "createSessionInternalLocked(name=" + sessionState.name.getClassName()
+                    + ")");
+        }
+
+        final InputChannel[] channels = InputChannel.openInputChannelPair(sessionToken.toString());
+
+        // Set up a callback to send the session token.
+        ITvInputSessionCallback callback = new ITvInputSessionCallback.Stub() {
+            @Override
+            public void onSessionCreated(ITvInputSession session) {
+                if (DEBUG) {
+                    Slog.d(TAG, "onSessionCreated(name=" + sessionState.name.getClassName() + ")");
+                }
+                synchronized (mLock) {
+                    sessionState.session = session;
+                    if (session == null) {
+                        removeSessionStateLocked(sessionToken, userId);
+                        sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null,
+                                null, sessionState.seq, userId);
+                    } else {
+                        sendSessionTokenToClientLocked(sessionState.client, sessionState.name,
+                                sessionToken, channels[0], sessionState.seq, userId);
+                    }
+                    channels[0].dispose();
+                }
+            }
+        };
+
+        // Create a session. When failed, send a null token immediately.
+        try {
+            service.createSession(channels[1], callback);
+        } catch (RemoteException e) {
+            Slog.e(TAG, "error in createSession", e);
+            removeSessionStateLocked(sessionToken, userId);
+            sendSessionTokenToClientLocked(sessionState.client, sessionState.name, null, null,
+                    sessionState.seq, userId);
+        }
+        channels[1].dispose();
+    }
+
+    private void sendSessionTokenToClientLocked(ITvInputClient client, ComponentName name,
+            IBinder sessionToken, InputChannel channel, int seq, int userId) {
+        try {
+            client.onSessionCreated(name, sessionToken, channel, seq);
+        } catch (RemoteException exception) {
+            Slog.e(TAG, "error in onSessionCreated", exception);
+        }
+
+        if (sessionToken == null) {
+            // This means that the session creation failed. We might want to disconnect the service.
+            updateServiceConnectionLocked(name, userId);
+        }
+    }
+
+    private void removeSessionStateLocked(IBinder sessionToken, int userId) {
+        // Remove the session state from the global session state map of the current user.
+        UserState userState = getUserStateLocked(userId);
+        SessionState sessionState = userState.sessionStateMap.remove(sessionToken);
+
+        // Close the open log entry, if any.
+        if (sessionState.logUri != null) {
+            SomeArgs args = SomeArgs.obtain();
+            args.arg1 = sessionState.logUri;
+            args.arg2 = System.currentTimeMillis();
+            mLogHandler.obtainMessage(LogHandler.MSG_CLOSE_ENTRY, args).sendToTarget();
+        }
+
+        // Also remove the session token from the session token list of the current service.
+        ServiceState serviceState = userState.serviceStateMap.get(sessionState.name);
+        if (serviceState != null) {
+            serviceState.sessionTokens.remove(sessionToken);
+        }
+        updateServiceConnectionLocked(sessionState.name, userId);
+    }
+
+    private final class BinderService extends ITvInputManager.Stub {
+        @Override
+        public List<TvInputInfo> getTvInputList(int userId) {
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(),
+                    Binder.getCallingUid(), userId, "getTvInputList");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    UserState userState = getUserStateLocked(resolvedUserId);
+                    return new ArrayList<TvInputInfo>(userState.inputList);
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public boolean getAvailability(final ITvInputClient client, final ComponentName name,
+                int userId) {
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(),
+                    Binder.getCallingUid(), userId, "getAvailability");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    UserState userState = getUserStateLocked(resolvedUserId);
+                    ServiceState serviceState = userState.serviceStateMap.get(name);
+                    if (serviceState != null) {
+                        // We already know the status of this input service. Return the cached
+                        // status.
+                        return serviceState.available;
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+            return false;
+        }
+
+        @Override
+        public void registerCallback(final ITvInputClient client, final ComponentName name,
+                int userId) {
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(),
+                    Binder.getCallingUid(), userId, "registerCallback");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    // Create a new service callback and add it to the callback map of the current
+                    // service.
+                    UserState userState = getUserStateLocked(resolvedUserId);
+                    ServiceState serviceState = userState.serviceStateMap.get(name);
+                    if (serviceState == null) {
+                        serviceState = new ServiceState(resolvedUserId);
+                        userState.serviceStateMap.put(name, serviceState);
+                    }
+                    IBinder iBinder = client.asBinder();
+                    if (!serviceState.clients.contains(iBinder)) {
+                        serviceState.clients.add(iBinder);
+                    }
+                    if (serviceState.service != null) {
+                        if (serviceState.callback != null) {
+                            // We already handled.
+                            return;
+                        }
+                        serviceState.callback = new ServiceCallback(resolvedUserId);
+                        try {
+                            serviceState.service.registerCallback(serviceState.callback);
+                        } catch (RemoteException e) {
+                            Slog.e(TAG, "error in registerCallback", e);
+                        }
+                    } else {
+                        updateServiceConnectionLocked(name, resolvedUserId);
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void unregisterCallback(ITvInputClient client, ComponentName name, int userId) {
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(),
+                    Binder.getCallingUid(), userId, "unregisterCallback");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    UserState userState = getUserStateLocked(resolvedUserId);
+                    ServiceState serviceState = userState.serviceStateMap.get(name);
+                    if (serviceState == null) {
+                        return;
+                    }
+
+                    // Remove this client from the client list and unregister the callback.
+                    serviceState.clients.remove(client.asBinder());
+                    if (!serviceState.clients.isEmpty()) {
+                        // We have other clients who want to keep the callback. Do this later.
+                        return;
+                    }
+                    if (serviceState.service == null || serviceState.callback == null) {
+                        return;
+                    }
+                    try {
+                        serviceState.service.unregisterCallback(serviceState.callback);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in unregisterCallback", e);
+                    } finally {
+                        serviceState.callback = null;
+                        updateServiceConnectionLocked(name, resolvedUserId);
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void createSession(final ITvInputClient client, final ComponentName name,
+                int seq, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "createSession");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    // Create a new session token and a session state.
+                    IBinder sessionToken = new Binder();
+                    SessionState sessionState = new SessionState(name, client, seq, callingUid);
+                    sessionState.session = null;
+
+                    // Add them to the global session state map of the current user.
+                    UserState userState = getUserStateLocked(resolvedUserId);
+                    userState.sessionStateMap.put(sessionToken, sessionState);
+
+                    // Also, add them to the session state map of the current service.
+                    ServiceState serviceState = userState.serviceStateMap.get(name);
+                    if (serviceState == null) {
+                        serviceState = new ServiceState(resolvedUserId);
+                        userState.serviceStateMap.put(name, serviceState);
+                    }
+                    serviceState.sessionTokens.add(sessionToken);
+
+                    if (serviceState.service != null) {
+                        createSessionInternalLocked(serviceState.service, sessionToken,
+                                resolvedUserId);
+                    } else {
+                        updateServiceConnectionLocked(name, resolvedUserId);
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void releaseSession(IBinder sessionToken, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "releaseSession");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    // Release the session.
+                    try {
+                        getSessionLocked(sessionToken, callingUid, resolvedUserId).release();
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in release", e);
+                    }
+
+                    removeSessionStateLocked(sessionToken, resolvedUserId);
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void setSurface(IBinder sessionToken, Surface surface, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "setSurface");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    try {
+                        getSessionLocked(sessionToken, callingUid, resolvedUserId).setSurface(
+                                surface);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in setSurface", e);
+                    }
+                }
+            } finally {
+                if (surface != null) {
+                    // surface is not used in TvInputManagerService.
+                    surface.release();
+                }
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void setVolume(IBinder sessionToken, float volume, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "setVolume");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    try {
+                        getSessionLocked(sessionToken, callingUid, resolvedUserId).setVolume(
+                                volume);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in setVolume", e);
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void tune(IBinder sessionToken, final Uri channelUri, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "tune");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    try {
+                        getSessionLocked(sessionToken, callingUid, resolvedUserId).tune(channelUri);
+
+                        long currentTime = System.currentTimeMillis();
+                        long channelId = ContentUris.parseId(channelUri);
+
+                        // Close the open log entry first, if any.
+                        UserState userState = getUserStateLocked(resolvedUserId);
+                        SessionState sessionState = userState.sessionStateMap.get(sessionToken);
+                        if (sessionState.logUri != null) {
+                            SomeArgs args = SomeArgs.obtain();
+                            args.arg1 = sessionState.logUri;
+                            args.arg2 = currentTime;
+                            mLogHandler.obtainMessage(LogHandler.MSG_CLOSE_ENTRY, args)
+                                    .sendToTarget();
+                        }
+
+                        // Create a log entry and fill it later.
+                        ContentValues values = new ContentValues();
+                        values.put(TvContract.WatchedPrograms.WATCH_START_TIME_UTC_MILLIS,
+                                currentTime);
+                        values.put(TvContract.WatchedPrograms.WATCH_END_TIME_UTC_MILLIS, 0);
+                        values.put(TvContract.WatchedPrograms.CHANNEL_ID, channelId);
+
+                        sessionState.logUri = mContentResolver.insert(
+                                TvContract.WatchedPrograms.CONTENT_URI, values);
+                        SomeArgs args = SomeArgs.obtain();
+                        args.arg1 = sessionState.logUri;
+                        args.arg2 = ContentUris.parseId(channelUri);
+                        args.arg3 = currentTime;
+                        mLogHandler.obtainMessage(LogHandler.MSG_OPEN_ENTRY, args).sendToTarget();
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in tune", e);
+                        return;
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void createOverlayView(IBinder sessionToken, IBinder windowToken, Rect frame,
+                int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "createOverlayView");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    try {
+                        getSessionLocked(sessionToken, callingUid, resolvedUserId)
+                                .createOverlayView(windowToken, frame);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in createOverlayView", e);
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void relayoutOverlayView(IBinder sessionToken, Rect frame, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "relayoutOverlayView");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    try {
+                        getSessionLocked(sessionToken, callingUid, resolvedUserId)
+                                .relayoutOverlayView(frame);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in relayoutOverlayView", e);
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+
+        @Override
+        public void removeOverlayView(IBinder sessionToken, int userId) {
+            final int callingUid = Binder.getCallingUid();
+            final int resolvedUserId = resolveCallingUserId(Binder.getCallingPid(), callingUid,
+                    userId, "removeOverlayView");
+            final long identity = Binder.clearCallingIdentity();
+            try {
+                synchronized (mLock) {
+                    try {
+                        getSessionLocked(sessionToken, callingUid, resolvedUserId)
+                                .removeOverlayView();
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in removeOverlayView", e);
+                    }
+                }
+            } finally {
+                Binder.restoreCallingIdentity(identity);
+            }
+        }
+    }
+
+    private static final class UserState {
+        // A list of all known TV inputs on the system.
+        private final List<TvInputInfo> inputList = new ArrayList<TvInputInfo>();
+
+        // A mapping from the name of a TV input service to its state.
+        private final Map<ComponentName, ServiceState> serviceStateMap =
+                new HashMap<ComponentName, ServiceState>();
+
+        // A mapping from the token of a TV input session to its state.
+        private final Map<IBinder, SessionState> sessionStateMap =
+                new HashMap<IBinder, SessionState>();
+    }
+
+    private final class ServiceState {
+        private final List<IBinder> clients = new ArrayList<IBinder>();
+        private final List<IBinder> sessionTokens = new ArrayList<IBinder>();
+        private final ServiceConnection connection;
+
+        private ITvInputService service;
+        private ServiceCallback callback;
+        private boolean bound;
+        private boolean available;
+
+        private ServiceState(int userId) {
+            this.connection = new InputServiceConnection(userId);
+        }
+    }
+
+    private static final class SessionState {
+        private final ComponentName name;
+        private final ITvInputClient client;
+        private final int seq;
+        private final int callingUid;
+
+        private ITvInputSession session;
+        private Uri logUri;
+
+        private SessionState(ComponentName name, ITvInputClient client, int seq, int callingUid) {
+            this.name = name;
+            this.client = client;
+            this.seq = seq;
+            this.callingUid = callingUid;
+        }
+    }
+
+    private final class InputServiceConnection implements ServiceConnection {
+        private final int mUserId;
+
+        private InputServiceConnection(int userId) {
+            mUserId = userId;
+        }
+
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            if (DEBUG) {
+                Slog.d(TAG, "onServiceConnected(name=" + name.getClassName() + ")");
+            }
+            synchronized (mLock) {
+                ServiceState serviceState = getServiceStateLocked(name, mUserId);
+                serviceState.service = ITvInputService.Stub.asInterface(service);
+
+                // Register a callback, if we need to.
+                if (!serviceState.clients.isEmpty() && serviceState.callback == null) {
+                    serviceState.callback = new ServiceCallback(mUserId);
+                    try {
+                        serviceState.service.registerCallback(serviceState.callback);
+                    } catch (RemoteException e) {
+                        Slog.e(TAG, "error in registerCallback", e);
+                    }
+                }
+
+                // And create sessions, if any.
+                for (IBinder sessionToken : serviceState.sessionTokens) {
+                    createSessionInternalLocked(serviceState.service, sessionToken, mUserId);
+                }
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            if (DEBUG) {
+                Slog.d(TAG, "onServiceDisconnected(name=" + name.getClassName() + ")");
+            }
+        }
+    }
+
+    private final class ServiceCallback extends ITvInputServiceCallback.Stub {
+        private final int mUserId;
+
+        ServiceCallback(int userId) {
+            mUserId = userId;
+        }
+
+        @Override
+        public void onAvailabilityChanged(ComponentName name, boolean isAvailable)
+                throws RemoteException {
+            if (DEBUG) {
+                Slog.d(TAG, "onAvailabilityChanged(name=" + name.getClassName() + ", isAvailable="
+                        + isAvailable + ")");
+            }
+            synchronized (mLock) {
+                ServiceState serviceState = getServiceStateLocked(name, mUserId);
+                serviceState.available = isAvailable;
+                for (IBinder iBinder : serviceState.clients) {
+                    ITvInputClient client = ITvInputClient.Stub.asInterface(iBinder);
+                    client.onAvailabilityChanged(name, isAvailable);
+                }
+            }
+        }
+    }
+
+    private final class LogHandler extends Handler {
+        private static final int MSG_OPEN_ENTRY = 1;
+        private static final int MSG_UPDATE_ENTRY = 2;
+        private static final int MSG_CLOSE_ENTRY = 3;
+
+        public LogHandler(Looper looper) {
+            super(looper);
+        }
+
+        @Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_OPEN_ENTRY: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    Uri uri = (Uri) args.arg1;
+                    long channelId = (long) args.arg2;
+                    long time = (long) args.arg3;
+                    onOpenEntry(uri, channelId, time);
+                    args.recycle();
+                    return;
+                }
+                case MSG_UPDATE_ENTRY: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    Uri uri = (Uri) args.arg1;
+                    long channelId = (long) args.arg2;
+                    long time = (long) args.arg3;
+                    onUpdateEntry(uri, channelId, time);
+                    args.recycle();
+                    return;
+                }
+                case MSG_CLOSE_ENTRY: {
+                    SomeArgs args = (SomeArgs) msg.obj;
+                    Uri uri = (Uri) args.arg1;
+                    long time = (long) args.arg2;
+                    onCloseEntry(uri, time);
+                    args.recycle();
+                    return;
+                }
+                default: {
+                    Slog.w(TAG, "Unhandled message code: " + msg.what);
+                    return;
+                }
+            }
+        }
+
+        private void onOpenEntry(Uri uri, long channelId, long watchStarttime) {
+            String[] projection = {
+                    TvContract.Programs.TITLE,
+                    TvContract.Programs.START_TIME_UTC_MILLIS,
+                    TvContract.Programs.END_TIME_UTC_MILLIS,
+                    TvContract.Programs.DESCRIPTION
+            };
+            String selection = TvContract.Programs.CHANNEL_ID + "=? AND "
+                    + TvContract.Programs.START_TIME_UTC_MILLIS + "<=? AND "
+                    + TvContract.Programs.END_TIME_UTC_MILLIS + ">?";
+            String[] selectionArgs = {
+                    String.valueOf(channelId),
+                    String.valueOf(watchStarttime),
+                    String.valueOf(watchStarttime)
+            };
+            String sortOrder = TvContract.Programs.START_TIME_UTC_MILLIS + " ASC";
+            Cursor cursor = null;
+            try {
+                cursor = mContentResolver.query(TvContract.Programs.CONTENT_URI, projection,
+                        selection, selectionArgs, sortOrder);
+                if (cursor != null && cursor.moveToNext()) {
+                    ContentValues values = new ContentValues();
+                    values.put(TvContract.WatchedPrograms.TITLE, cursor.getString(0));
+                    values.put(TvContract.WatchedPrograms.START_TIME_UTC_MILLIS, cursor.getLong(1));
+                    long endTime = cursor.getLong(2);
+                    values.put(TvContract.WatchedPrograms.END_TIME_UTC_MILLIS, endTime);
+                    values.put(TvContract.WatchedPrograms.DESCRIPTION, cursor.getString(3));
+                    mContentResolver.update(uri, values, null, null);
+
+                    // Schedule an update when the current program ends.
+                    SomeArgs args = SomeArgs.obtain();
+                    args.arg1 = uri;
+                    args.arg2 = channelId;
+                    args.arg3 = endTime;
+                    Message msg = obtainMessage(LogHandler.MSG_UPDATE_ENTRY, args);
+                    sendMessageDelayed(msg, endTime - System.currentTimeMillis());
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+        }
+
+        private void onUpdateEntry(Uri uri, long channelId, long time) {
+            String[] projection = {
+                    TvContract.WatchedPrograms.WATCH_START_TIME_UTC_MILLIS,
+                    TvContract.WatchedPrograms.WATCH_END_TIME_UTC_MILLIS,
+                    TvContract.WatchedPrograms.TITLE,
+                    TvContract.WatchedPrograms.START_TIME_UTC_MILLIS,
+                    TvContract.WatchedPrograms.END_TIME_UTC_MILLIS,
+                    TvContract.WatchedPrograms.DESCRIPTION
+            };
+            Cursor cursor = null;
+            try {
+                cursor = mContentResolver.query(uri, projection, null, null, null);
+                if (cursor != null && cursor.moveToNext()) {
+                    long watchStartTime = cursor.getLong(0);
+                    long watchEndTime = cursor.getLong(1);
+                    String title = cursor.getString(2);
+                    long startTime = cursor.getLong(3);
+                    long endTime = cursor.getLong(4);
+                    String description = cursor.getString(5);
+
+                    // Do nothing if the current log entry is already closed.
+                    if (watchEndTime > 0) {
+                        return;
+                    }
+
+                    // The current program has just ended. Create a (complete) log entry off the
+                    // current entry.
+                    ContentValues values = new ContentValues();
+                    values.put(TvContract.WatchedPrograms.WATCH_START_TIME_UTC_MILLIS,
+                            watchStartTime);
+                    values.put(TvContract.WatchedPrograms.WATCH_END_TIME_UTC_MILLIS, time);
+                    values.put(TvContract.WatchedPrograms.CHANNEL_ID, channelId);
+                    values.put(TvContract.WatchedPrograms.TITLE, title);
+                    values.put(TvContract.WatchedPrograms.START_TIME_UTC_MILLIS, startTime);
+                    values.put(TvContract.WatchedPrograms.END_TIME_UTC_MILLIS, endTime);
+                    values.put(TvContract.WatchedPrograms.DESCRIPTION, description);
+                    mContentResolver.insert(TvContract.WatchedPrograms.CONTENT_URI, values);
+                }
+            } finally {
+                if (cursor != null) {
+                    cursor.close();
+                }
+            }
+            // Re-open the current log entry with the next program information.
+            onOpenEntry(uri, channelId, time);
+        }
+
+        private void onCloseEntry(Uri uri, long watchEndTime) {
+            ContentValues values = new ContentValues();
+            values.put(TvContract.WatchedPrograms.WATCH_END_TIME_UTC_MILLIS, watchEndTime);
+            mContentResolver.update(uri, values, null, null);
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
index 9601e9a..1a68fb3 100644
--- a/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
+++ b/services/core/java/com/android/server/updates/ConfigUpdateInstallReceiver.java
@@ -21,7 +21,6 @@
 import android.content.Context;
 import android.content.Intent;
 import android.provider.Settings;
-import android.os.FileUtils;
 import android.util.Base64;
 import android.util.EventLog;
 import android.util.Slog;
@@ -30,18 +29,15 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.InputStream;
 import java.io.IOException;
-import java.security.cert.Certificate;
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.security.Signature;
-import java.security.SignatureException;
 
 import libcore.io.IoUtils;
 
diff --git a/services/core/java/com/android/server/updates/TZInfoInstallReceiver.java b/services/core/java/com/android/server/updates/TZInfoInstallReceiver.java
index 83adbdb..2fe68f8 100644
--- a/services/core/java/com/android/server/updates/TZInfoInstallReceiver.java
+++ b/services/core/java/com/android/server/updates/TZInfoInstallReceiver.java
@@ -17,7 +17,6 @@
 package com.android.server.updates;
 
 import android.util.Base64;
-import android.util.Slog;
 
 import java.io.IOException;
 
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 97ea52c..3eb2d5f 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -25,6 +25,7 @@
 import android.app.IWallpaperManagerCallback;
 import android.app.PendingIntent;
 import android.app.WallpaperInfo;
+import android.app.WallpaperManager;
 import android.app.backup.BackupManager;
 import android.app.backup.WallpaperBackupHelper;
 import android.content.BroadcastReceiver;
@@ -230,7 +231,6 @@
         public void onServiceConnected(ComponentName name, IBinder service) {
             synchronized (mLock) {
                 if (mWallpaper.connection == this) {
-                    mWallpaper.lastDiedTime = SystemClock.uptimeMillis();
                     mService = IWallpaperService.Stub.asInterface(service);
                     attachServiceLocked(this, mWallpaper);
                     // XXX should probably do saveSettingsLocked() later
@@ -250,11 +250,21 @@
                 if (mWallpaper.connection == this) {
                     Slog.w(TAG, "Wallpaper service gone: " + mWallpaper.wallpaperComponent);
                     if (!mWallpaper.wallpaperUpdating
-                            && (mWallpaper.lastDiedTime + MIN_WALLPAPER_CRASH_TIME)
-                                > SystemClock.uptimeMillis()
                             && mWallpaper.userId == mCurrentUserId) {
-                        Slog.w(TAG, "Reverting to built-in wallpaper!");
-                        clearWallpaperLocked(true, mWallpaper.userId, null);
+                        // There is a race condition which causes
+                        // {@link #mWallpaper.wallpaperUpdating} to be false even if it is
+                        // currently updating since the broadcast notifying us is async.
+                        // This race is overcome by the general rule that we only reset the
+                        // wallpaper if its service was shut down twice
+                        // during {@link #MIN_WALLPAPER_CRASH_TIME} millis.
+                        if (mWallpaper.lastDiedTime != 0
+                                && mWallpaper.lastDiedTime + MIN_WALLPAPER_CRASH_TIME
+                                    > SystemClock.uptimeMillis()) {
+                            Slog.w(TAG, "Reverting to built-in wallpaper!");
+                            clearWallpaperLocked(true, mWallpaper.userId, null);
+                        } else {
+                            mWallpaper.lastDiedTime = SystemClock.uptimeMillis();
+                        }
                     }
                 }
             }
@@ -835,13 +845,7 @@
         
         try {
             if (componentName == null) {
-                String defaultComponent = 
-                    mContext.getString(com.android.internal.R.string.default_wallpaper_component);
-                if (defaultComponent != null) {
-                    // See if there is a default wallpaper component specified
-                    componentName = ComponentName.unflattenFromString(defaultComponent);
-                    if (DEBUG) Slog.v(TAG, "Use default component wallpaper:" + componentName);
-                }
+                componentName = WallpaperManager.getDefaultWallpaperComponent(mContext);
                 if (componentName == null) {
                     // Fall back to static image wallpaper
                     componentName = IMAGE_WALLPAPER;
@@ -938,7 +942,6 @@
             }
             wallpaper.wallpaperComponent = componentName;
             wallpaper.connection = newConn;
-            wallpaper.lastDiedTime = SystemClock.uptimeMillis();
             newConn.mReply = reply;
             try {
                 if (wallpaper.userId == mCurrentUserId) {
diff --git a/services/core/java/com/android/server/wifi/README.txt b/services/core/java/com/android/server/wifi/README.txt
deleted file mode 100644
index 39e14751..0000000
--- a/services/core/java/com/android/server/wifi/README.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-WifiService: Implements the IWifiManager 3rd party API. The API and the device state information (screen on/off, battery state, sleep policy) go as input into the WifiController which tracks high level states as to whether STA or AP mode is operational and controls the WifiStateMachine to handle bringup and shut down.
-
-WifiController: Acts as a controller to the WifiStateMachine based on various inputs (API and device state). Runs on the same thread created in WifiService.
-
-WifiSettingsStore: Tracks the various settings (wifi toggle, airplane toggle, tethering toggle, scan mode toggle) and provides API to figure if wifi should be turned on or off.
-
-WifiTrafficPoller: Polls traffic on wifi and notifies apps listening on it.
-
-WifiNotificationController: Controls whether the open network notification is displayed or not based on the scan results.
-
-WifiStateMachine: Tracks the various states on STA and AP connectivity and handles bring up and shut down.
-
-
-Feature description:
-
-Scan-only mode with Wi-Fi turned off:
- - Setup wizard opts user into allowing scanning for improved location. We show no further dialogs in setup wizard since the user has just opted into the feature. This is the reason WifiService listens to DEVICE_PROVISIONED setting.
- - Once the user has his device provisioned, turning off Wi-Fi from settings or from a third party app will show up a dialog reminding the user that scan mode will be on even though Wi-Fi is being turned off. The user has the choice to turn this notification off.
- - In the scan mode, the device continues to allow scanning from any app with Wi-Fi turned off. This is done by disabling all networks and allowing only scans to be passed.
diff --git a/services/core/java/com/android/server/wifi/WifiController.java b/services/core/java/com/android/server/wifi/WifiController.java
deleted file mode 100644
index bdb0a5e..0000000
--- a/services/core/java/com/android/server/wifi/WifiController.java
+++ /dev/null
@@ -1,761 +0,0 @@
-/*
- * Copyright (C) 2013 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.android.server.wifi;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiManager;
-import static android.net.wifi.WifiManager.WIFI_MODE_FULL;
-import static android.net.wifi.WifiManager.WIFI_MODE_FULL_HIGH_PERF;
-import static android.net.wifi.WifiManager.WIFI_MODE_SCAN_ONLY;
-import android.net.wifi.WifiStateMachine;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.SystemClock;
-import android.os.WorkSource;
-import android.provider.Settings;
-import android.util.Slog;
-
-import com.android.internal.util.Protocol;
-import com.android.internal.util.State;
-import com.android.internal.util.StateMachine;
-import com.android.server.wifi.WifiService.LockList;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-class WifiController extends StateMachine {
-    private static final String TAG = "WifiController";
-    private static final boolean DBG = false;
-    private Context mContext;
-    private boolean mScreenOff;
-    private boolean mDeviceIdle;
-    private int mPluggedType;
-    private int mStayAwakeConditions;
-    private long mIdleMillis;
-    private int mSleepPolicy;
-    private boolean mFirstUserSignOnSeen = false;
-
-    private AlarmManager mAlarmManager;
-    private PendingIntent mIdleIntent;
-    private static final int IDLE_REQUEST = 0;
-
-    /**
-     * See {@link Settings.Global#WIFI_IDLE_MS}. This is the default value if a
-     * Settings.Global value is not present. This timeout value is chosen as
-     * the approximate point at which the battery drain caused by Wi-Fi
-     * being enabled but not active exceeds the battery drain caused by
-     * re-establishing a connection to the mobile data network.
-     */
-    private static final long DEFAULT_IDLE_MS = 15 * 60 * 1000; /* 15 minutes */
-
-    /**
-     * See {@link Settings.Global#WIFI_REENABLE_DELAY_MS}.  This is the default value if a
-     * Settings.Global value is not present.  This is the minimum time after wifi is disabled
-     * we'll act on an enable.  Enable requests received before this delay will be deferred.
-     */
-    private static final long DEFAULT_REENABLE_DELAY_MS = 500;
-
-    // finding that delayed messages can sometimes be delivered earlier than expected
-    // probably rounding errors..  add a margin to prevent problems
-    private static final long DEFER_MARGIN_MS = 5;
-
-    NetworkInfo mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0, "WIFI", "");
-
-    private static final String ACTION_DEVICE_IDLE =
-            "com.android.server.WifiManager.action.DEVICE_IDLE";
-
-    /* References to values tracked in WifiService */
-    final WifiStateMachine mWifiStateMachine;
-    final WifiSettingsStore mSettingsStore;
-    final LockList mLocks;
-
-    /**
-     * Temporary for computing UIDS that are responsible for starting WIFI.
-     * Protected by mWifiStateTracker lock.
-     */
-    private final WorkSource mTmpWorkSource = new WorkSource();
-
-    private long mReEnableDelayMillis;
-
-    private static final int BASE = Protocol.BASE_WIFI_CONTROLLER;
-
-    static final int CMD_EMERGENCY_MODE_CHANGED     = BASE + 1;
-    static final int CMD_SCREEN_ON                  = BASE + 2;
-    static final int CMD_SCREEN_OFF                 = BASE + 3;
-    static final int CMD_BATTERY_CHANGED            = BASE + 4;
-    static final int CMD_DEVICE_IDLE                = BASE + 5;
-    static final int CMD_LOCKS_CHANGED              = BASE + 6;
-    static final int CMD_SCAN_ALWAYS_MODE_CHANGED   = BASE + 7;
-    static final int CMD_WIFI_TOGGLED               = BASE + 8;
-    static final int CMD_AIRPLANE_TOGGLED           = BASE + 9;
-    static final int CMD_SET_AP                     = BASE + 10;
-    static final int CMD_DEFERRED_TOGGLE            = BASE + 11;
-    static final int CMD_USER_PRESENT               = BASE + 12;
-
-    private DefaultState mDefaultState = new DefaultState();
-    private StaEnabledState mStaEnabledState = new StaEnabledState();
-    private ApStaDisabledState mApStaDisabledState = new ApStaDisabledState();
-    private StaDisabledWithScanState mStaDisabledWithScanState = new StaDisabledWithScanState();
-    private ApEnabledState mApEnabledState = new ApEnabledState();
-    private DeviceActiveState mDeviceActiveState = new DeviceActiveState();
-    private DeviceInactiveState mDeviceInactiveState = new DeviceInactiveState();
-    private ScanOnlyLockHeldState mScanOnlyLockHeldState = new ScanOnlyLockHeldState();
-    private FullLockHeldState mFullLockHeldState = new FullLockHeldState();
-    private FullHighPerfLockHeldState mFullHighPerfLockHeldState = new FullHighPerfLockHeldState();
-    private NoLockHeldState mNoLockHeldState = new NoLockHeldState();
-    private EcmState mEcmState = new EcmState();
-
-    WifiController(Context context, WifiService service, Looper looper) {
-        super(TAG, looper);
-        mContext = context;
-        mWifiStateMachine = service.mWifiStateMachine;
-        mSettingsStore = service.mSettingsStore;
-        mLocks = service.mLocks;
-
-        mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
-        Intent idleIntent = new Intent(ACTION_DEVICE_IDLE, null);
-        mIdleIntent = PendingIntent.getBroadcast(mContext, IDLE_REQUEST, idleIntent, 0);
-
-        addState(mDefaultState);
-            addState(mApStaDisabledState, mDefaultState);
-            addState(mStaEnabledState, mDefaultState);
-                addState(mDeviceActiveState, mStaEnabledState);
-                addState(mDeviceInactiveState, mStaEnabledState);
-                    addState(mScanOnlyLockHeldState, mDeviceInactiveState);
-                    addState(mFullLockHeldState, mDeviceInactiveState);
-                    addState(mFullHighPerfLockHeldState, mDeviceInactiveState);
-                    addState(mNoLockHeldState, mDeviceInactiveState);
-            addState(mStaDisabledWithScanState, mDefaultState);
-            addState(mApEnabledState, mDefaultState);
-            addState(mEcmState, mDefaultState);
-
-        boolean isAirplaneModeOn = mSettingsStore.isAirplaneModeOn();
-        boolean isWifiEnabled = mSettingsStore.isWifiToggleEnabled();
-        boolean isScanningAlwaysAvailable = mSettingsStore.isScanAlwaysAvailable();
-
-        log("isAirplaneModeOn = " + isAirplaneModeOn +
-                ", isWifiEnabled = " + isWifiEnabled +
-                ", isScanningAvailable = " + isScanningAlwaysAvailable);
-
-        if (isWifiEnabled && isScanningAlwaysAvailable) {
-            setInitialState(mStaDisabledWithScanState);
-        } else {
-            setInitialState(mApStaDisabledState);
-        }
-
-        setLogRecSize(100);
-        setLogOnlyTransitions(false);
-
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(ACTION_DEVICE_IDLE);
-        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        mContext.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                        String action = intent.getAction();
-                        if (action.equals(ACTION_DEVICE_IDLE)) {
-                            sendMessage(CMD_DEVICE_IDLE);
-                        } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
-                            mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(
-                                    WifiManager.EXTRA_NETWORK_INFO);
-                        }
-                    }
-                },
-                new IntentFilter(filter));
-
-        initializeAndRegisterForSettingsChange(looper);
-    }
-
-    private void initializeAndRegisterForSettingsChange(Looper looper) {
-        Handler handler = new Handler(looper);
-        readStayAwakeConditions();
-        registerForStayAwakeModeChange(handler);
-        readWifiIdleTime();
-        registerForWifiIdleTimeChange(handler);
-        readWifiSleepPolicy();
-        registerForWifiSleepPolicyChange(handler);
-        readWifiReEnableDelay();
-    }
-
-    private void readStayAwakeConditions() {
-        mStayAwakeConditions = Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
-    }
-
-    private void readWifiIdleTime() {
-        mIdleMillis = Settings.Global.getLong(mContext.getContentResolver(),
-                Settings.Global.WIFI_IDLE_MS, DEFAULT_IDLE_MS);
-    }
-
-    private void readWifiSleepPolicy() {
-        mSleepPolicy = Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.WIFI_SLEEP_POLICY,
-                Settings.Global.WIFI_SLEEP_POLICY_NEVER);
-    }
-
-    private void readWifiReEnableDelay() {
-        mReEnableDelayMillis = Settings.Global.getLong(mContext.getContentResolver(),
-                Settings.Global.WIFI_REENABLE_DELAY_MS, DEFAULT_REENABLE_DELAY_MS);
-    }
-
-    /**
-     * Observes settings changes to scan always mode.
-     */
-    private void registerForStayAwakeModeChange(Handler handler) {
-        ContentObserver contentObserver = new ContentObserver(handler) {
-            @Override
-            public void onChange(boolean selfChange) {
-                readStayAwakeConditions();
-            }
-        };
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.STAY_ON_WHILE_PLUGGED_IN),
-                false, contentObserver);
-    }
-
-    /**
-     * Observes settings changes to scan always mode.
-     */
-    private void registerForWifiIdleTimeChange(Handler handler) {
-        ContentObserver contentObserver = new ContentObserver(handler) {
-            @Override
-            public void onChange(boolean selfChange) {
-                readWifiIdleTime();
-            }
-        };
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.WIFI_IDLE_MS),
-                false, contentObserver);
-    }
-
-    /**
-     * Observes changes to wifi sleep policy
-     */
-    private void registerForWifiSleepPolicyChange(Handler handler) {
-        ContentObserver contentObserver = new ContentObserver(handler) {
-            @Override
-            public void onChange(boolean selfChange) {
-                readWifiSleepPolicy();
-            }
-        };
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.WIFI_SLEEP_POLICY),
-                false, contentObserver);
-    }
-
-    /**
-     * Determines whether the Wi-Fi chipset should stay awake or be put to
-     * sleep. Looks at the setting for the sleep policy and the current
-     * conditions.
-     *
-     * @see #shouldDeviceStayAwake(int)
-     */
-    private boolean shouldWifiStayAwake(int pluggedType) {
-        if (mSleepPolicy == Settings.Global.WIFI_SLEEP_POLICY_NEVER) {
-            // Never sleep
-            return true;
-        } else if ((mSleepPolicy == Settings.Global.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED) &&
-                (pluggedType != 0)) {
-            // Never sleep while plugged, and we're plugged
-            return true;
-        } else {
-            // Default
-            return shouldDeviceStayAwake(pluggedType);
-        }
-    }
-
-    /**
-     * Determine whether the bit value corresponding to {@code pluggedType} is set in
-     * the bit string mStayAwakeConditions. This determines whether the device should
-     * stay awake based on the current plugged type.
-     *
-     * @param pluggedType the type of plug (USB, AC, or none) for which the check is
-     * being made
-     * @return {@code true} if {@code pluggedType} indicates that the device is
-     * supposed to stay awake, {@code false} otherwise.
-     */
-    private boolean shouldDeviceStayAwake(int pluggedType) {
-        return (mStayAwakeConditions & pluggedType) != 0;
-    }
-
-    private void updateBatteryWorkSource() {
-        mTmpWorkSource.clear();
-        if (mDeviceIdle) {
-            mLocks.updateWorkSource(mTmpWorkSource);
-        }
-        mWifiStateMachine.updateBatteryWorkSource(mTmpWorkSource);
-    }
-
-    class DefaultState extends State {
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case CMD_SCREEN_ON:
-                    mAlarmManager.cancel(mIdleIntent);
-                    mScreenOff = false;
-                    mDeviceIdle = false;
-                    updateBatteryWorkSource();
-                    break;
-                case CMD_SCREEN_OFF:
-                    mScreenOff = true;
-                    /*
-                    * Set a timer to put Wi-Fi to sleep, but only if the screen is off
-                    * AND the "stay on while plugged in" setting doesn't match the
-                    * current power conditions (i.e, not plugged in, plugged in to USB,
-                    * or plugged in to AC).
-                    */
-                    if (!shouldWifiStayAwake(mPluggedType)) {
-                        //Delayed shutdown if wifi is connected
-                        if (mNetworkInfo.getDetailedState() ==
-                                NetworkInfo.DetailedState.CONNECTED) {
-                            if (DBG) Slog.d(TAG, "set idle timer: " + mIdleMillis + " ms");
-                            mAlarmManager.set(AlarmManager.RTC_WAKEUP,
-                                    System.currentTimeMillis() + mIdleMillis, mIdleIntent);
-                        } else {
-                            sendMessage(CMD_DEVICE_IDLE);
-                        }
-                    }
-                    break;
-                case CMD_DEVICE_IDLE:
-                    mDeviceIdle = true;
-                    updateBatteryWorkSource();
-                    break;
-                case CMD_BATTERY_CHANGED:
-                    /*
-                    * Set a timer to put Wi-Fi to sleep, but only if the screen is off
-                    * AND we are transitioning from a state in which the device was supposed
-                    * to stay awake to a state in which it is not supposed to stay awake.
-                    * If "stay awake" state is not changing, we do nothing, to avoid resetting
-                    * the already-set timer.
-                    */
-                    int pluggedType = msg.arg1;
-                    if (DBG) Slog.d(TAG, "battery changed pluggedType: " + pluggedType);
-                    if (mScreenOff && shouldWifiStayAwake(mPluggedType) &&
-                            !shouldWifiStayAwake(pluggedType)) {
-                        long triggerTime = System.currentTimeMillis() + mIdleMillis;
-                        if (DBG) Slog.d(TAG, "set idle timer for " + mIdleMillis + "ms");
-                        mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerTime, mIdleIntent);
-                    }
-
-                    mPluggedType = pluggedType;
-                    break;
-                case CMD_SET_AP:
-                case CMD_SCAN_ALWAYS_MODE_CHANGED:
-                case CMD_LOCKS_CHANGED:
-                case CMD_WIFI_TOGGLED:
-                case CMD_AIRPLANE_TOGGLED:
-                case CMD_EMERGENCY_MODE_CHANGED:
-                    break;
-                case CMD_USER_PRESENT:
-                    mFirstUserSignOnSeen = true;
-                    break;
-                case CMD_DEFERRED_TOGGLE:
-                    log("DEFERRED_TOGGLE ignored due to state change");
-                    break;
-                default:
-                    throw new RuntimeException("WifiController.handleMessage " + msg.what);
-            }
-            return HANDLED;
-        }
-
-    }
-
-    class ApStaDisabledState extends State {
-        private int mDeferredEnableSerialNumber = 0;
-        private boolean mHaveDeferredEnable = false;
-        private long mDisabledTimestamp;
-
-        @Override
-        public void enter() {
-            mWifiStateMachine.setSupplicantRunning(false);
-            // Supplicant can't restart right away, so not the time we switched off
-            mDisabledTimestamp = SystemClock.elapsedRealtime();
-            mDeferredEnableSerialNumber++;
-            mHaveDeferredEnable = false;
-        }
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case CMD_WIFI_TOGGLED:
-                case CMD_AIRPLANE_TOGGLED:
-                    if (mSettingsStore.isWifiToggleEnabled()) {
-                        if (doDeferEnable(msg)) {
-                            if (mHaveDeferredEnable) {
-                                //  have 2 toggles now, inc serial number an ignore both
-                                mDeferredEnableSerialNumber++;
-                            }
-                            mHaveDeferredEnable = !mHaveDeferredEnable;
-                            break;
-                        }
-                        if (mDeviceIdle == false) {
-                            transitionTo(mDeviceActiveState);
-                        } else {
-                            checkLocksAndTransitionWhenDeviceIdle();
-                        }
-                    }
-                    break;
-                case CMD_SCAN_ALWAYS_MODE_CHANGED:
-                    if (mSettingsStore.isScanAlwaysAvailable()) {
-                        transitionTo(mStaDisabledWithScanState);
-                    }
-                    break;
-                case CMD_SET_AP:
-                    if (msg.arg1 == 1) {
-                        mWifiStateMachine.setHostApRunning((WifiConfiguration) msg.obj,
-                                true);
-                        transitionTo(mApEnabledState);
-                    }
-                    break;
-                case CMD_DEFERRED_TOGGLE:
-                    if (msg.arg1 != mDeferredEnableSerialNumber) {
-                        log("DEFERRED_TOGGLE ignored due to serial mismatch");
-                        break;
-                    }
-                    log("DEFERRED_TOGGLE handled");
-                    sendMessage((Message)(msg.obj));
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        private boolean doDeferEnable(Message msg) {
-            long delaySoFar = SystemClock.elapsedRealtime() - mDisabledTimestamp;
-            if (delaySoFar >= mReEnableDelayMillis) {
-                return false;
-            }
-
-            log("WifiController msg " + msg + " deferred for " +
-                    (mReEnableDelayMillis - delaySoFar) + "ms");
-
-            // need to defer this action.
-            Message deferredMsg = obtainMessage(CMD_DEFERRED_TOGGLE);
-            deferredMsg.obj = Message.obtain(msg);
-            deferredMsg.arg1 = ++mDeferredEnableSerialNumber;
-            sendMessageDelayed(deferredMsg, mReEnableDelayMillis - delaySoFar + DEFER_MARGIN_MS);
-            return true;
-        }
-
-    }
-
-    class StaEnabledState extends State {
-        @Override
-        public void enter() {
-            mWifiStateMachine.setSupplicantRunning(true);
-        }
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case CMD_WIFI_TOGGLED:
-                    if (! mSettingsStore.isWifiToggleEnabled()) {
-                        if (mSettingsStore.isScanAlwaysAvailable()) {
-                            transitionTo(mStaDisabledWithScanState);
-                        } else {
-                            transitionTo(mApStaDisabledState);
-                        }
-                    }
-                    break;
-                case CMD_AIRPLANE_TOGGLED:
-                    /* When wi-fi is turned off due to airplane,
-                    * disable entirely (including scan)
-                    */
-                    if (! mSettingsStore.isWifiToggleEnabled()) {
-                        transitionTo(mApStaDisabledState);
-                    }
-                    break;
-                case CMD_EMERGENCY_MODE_CHANGED:
-                    if (msg.arg1 == 1) {
-                        transitionTo(mEcmState);
-                        break;
-                    }
-                default:
-                    return NOT_HANDLED;
-
-            }
-            return HANDLED;
-        }
-    }
-
-    class StaDisabledWithScanState extends State {
-        private int mDeferredEnableSerialNumber = 0;
-        private boolean mHaveDeferredEnable = false;
-        private long mDisabledTimestamp;
-
-        @Override
-        public void enter() {
-            mWifiStateMachine.setSupplicantRunning(true);
-            mWifiStateMachine.setOperationalMode(WifiStateMachine.SCAN_ONLY_WITH_WIFI_OFF_MODE);
-            mWifiStateMachine.setDriverStart(true);
-            // Supplicant can't restart right away, so not the time we switched off
-            mDisabledTimestamp = SystemClock.elapsedRealtime();
-            mDeferredEnableSerialNumber++;
-            mHaveDeferredEnable = false;
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case CMD_WIFI_TOGGLED:
-                    if (mSettingsStore.isWifiToggleEnabled()) {
-                        if (doDeferEnable(msg)) {
-                            if (mHaveDeferredEnable) {
-                                // have 2 toggles now, inc serial number and ignore both
-                                mDeferredEnableSerialNumber++;
-                            }
-                            mHaveDeferredEnable = !mHaveDeferredEnable;
-                            break;
-                        }
-                        if (mDeviceIdle == false) {
-                            transitionTo(mDeviceActiveState);
-                        } else {
-                            checkLocksAndTransitionWhenDeviceIdle();
-                        }
-                    }
-                    break;
-                case CMD_AIRPLANE_TOGGLED:
-                    if (mSettingsStore.isAirplaneModeOn() &&
-                            ! mSettingsStore.isWifiToggleEnabled()) {
-                        transitionTo(mApStaDisabledState);
-                    }
-                case CMD_SCAN_ALWAYS_MODE_CHANGED:
-                    if (! mSettingsStore.isScanAlwaysAvailable()) {
-                        transitionTo(mApStaDisabledState);
-                    }
-                    break;
-                case CMD_SET_AP:
-                    // Before starting tethering, turn off supplicant for scan mode
-                    if (msg.arg1 == 1) {
-                        deferMessage(msg);
-                        transitionTo(mApStaDisabledState);
-                    }
-                    break;
-                case CMD_DEFERRED_TOGGLE:
-                    if (msg.arg1 != mDeferredEnableSerialNumber) {
-                        log("DEFERRED_TOGGLE ignored due to serial mismatch");
-                        break;
-                    }
-                    logd("DEFERRED_TOGGLE handled");
-                    sendMessage((Message)(msg.obj));
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        private boolean doDeferEnable(Message msg) {
-            long delaySoFar = SystemClock.elapsedRealtime() - mDisabledTimestamp;
-            if (delaySoFar >= mReEnableDelayMillis) {
-                return false;
-            }
-
-            log("WifiController msg " + msg + " deferred for " +
-                    (mReEnableDelayMillis - delaySoFar) + "ms");
-
-            // need to defer this action.
-            Message deferredMsg = obtainMessage(CMD_DEFERRED_TOGGLE);
-            deferredMsg.obj = Message.obtain(msg);
-            deferredMsg.arg1 = ++mDeferredEnableSerialNumber;
-            sendMessageDelayed(deferredMsg, mReEnableDelayMillis - delaySoFar + DEFER_MARGIN_MS);
-            return true;
-        }
-
-    }
-
-    class ApEnabledState extends State {
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case CMD_AIRPLANE_TOGGLED:
-                    if (mSettingsStore.isAirplaneModeOn()) {
-                        mWifiStateMachine.setHostApRunning(null, false);
-                        transitionTo(mApStaDisabledState);
-                    }
-                    break;
-                case CMD_SET_AP:
-                    if (msg.arg1 == 0) {
-                        mWifiStateMachine.setHostApRunning(null, false);
-                        transitionTo(mApStaDisabledState);
-                    }
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class EcmState extends State {
-        @Override
-        public void enter() {
-            mWifiStateMachine.setSupplicantRunning(false);
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            if (msg.what == CMD_EMERGENCY_MODE_CHANGED && msg.arg1 == 0) {
-                if (mSettingsStore.isWifiToggleEnabled()) {
-                    if (mDeviceIdle == false) {
-                        transitionTo(mDeviceActiveState);
-                    } else {
-                        checkLocksAndTransitionWhenDeviceIdle();
-                    }
-                } else if (mSettingsStore.isScanAlwaysAvailable()) {
-                    transitionTo(mStaDisabledWithScanState);
-                } else {
-                    transitionTo(mApStaDisabledState);
-                }
-                return HANDLED;
-            } else {
-                return NOT_HANDLED;
-            }
-        }
-    }
-
-    /* Parent: StaEnabledState */
-    class DeviceActiveState extends State {
-        @Override
-        public void enter() {
-            mWifiStateMachine.setOperationalMode(WifiStateMachine.CONNECT_MODE);
-            mWifiStateMachine.setDriverStart(true);
-            mWifiStateMachine.setHighPerfModeEnabled(false);
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            if (msg.what == CMD_DEVICE_IDLE) {
-                checkLocksAndTransitionWhenDeviceIdle();
-                // We let default state handle the rest of work
-            } else if (msg.what == CMD_USER_PRESENT) {
-                // TLS networks can't connect until user unlocks keystore. KeyStore
-                // unlocks when the user punches PIN after the reboot. So use this
-                // trigger to get those networks connected.
-                if (mFirstUserSignOnSeen == false) {
-                    mWifiStateMachine.reloadTlsNetworksAndReconnect();
-                }
-                mFirstUserSignOnSeen = true;
-                return HANDLED;
-            }
-            return NOT_HANDLED;
-        }
-    }
-
-    /* Parent: StaEnabledState */
-    class DeviceInactiveState extends State {
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case CMD_LOCKS_CHANGED:
-                    checkLocksAndTransitionWhenDeviceIdle();
-                    updateBatteryWorkSource();
-                    return HANDLED;
-                case CMD_SCREEN_ON:
-                    transitionTo(mDeviceActiveState);
-                    // More work in default state
-                    return NOT_HANDLED;
-                default:
-                    return NOT_HANDLED;
-            }
-        }
-    }
-
-    /* Parent: DeviceInactiveState. Device is inactive, but an app is holding a scan only lock. */
-    class ScanOnlyLockHeldState extends State {
-        @Override
-        public void enter() {
-            mWifiStateMachine.setOperationalMode(WifiStateMachine.SCAN_ONLY_MODE);
-            mWifiStateMachine.setDriverStart(true);
-        }
-    }
-
-    /* Parent: DeviceInactiveState. Device is inactive, but an app is holding a full lock. */
-    class FullLockHeldState extends State {
-        @Override
-        public void enter() {
-            mWifiStateMachine.setOperationalMode(WifiStateMachine.CONNECT_MODE);
-            mWifiStateMachine.setDriverStart(true);
-            mWifiStateMachine.setHighPerfModeEnabled(false);
-        }
-    }
-
-    /* Parent: DeviceInactiveState. Device is inactive, but an app is holding a high perf lock. */
-    class FullHighPerfLockHeldState extends State {
-        @Override
-        public void enter() {
-            mWifiStateMachine.setOperationalMode(WifiStateMachine.CONNECT_MODE);
-            mWifiStateMachine.setDriverStart(true);
-            mWifiStateMachine.setHighPerfModeEnabled(true);
-        }
-    }
-
-    /* Parent: DeviceInactiveState. Device is inactive and no app is holding a wifi lock. */
-    class NoLockHeldState extends State {
-        @Override
-        public void enter() {
-            mWifiStateMachine.setDriverStart(false);
-        }
-    }
-
-    private void checkLocksAndTransitionWhenDeviceIdle() {
-        if (mLocks.hasLocks()) {
-            switch (mLocks.getStrongestLockMode()) {
-                case WIFI_MODE_FULL:
-                    transitionTo(mFullLockHeldState);
-                    break;
-                case WIFI_MODE_FULL_HIGH_PERF:
-                    transitionTo(mFullHighPerfLockHeldState);
-                    break;
-                case WIFI_MODE_SCAN_ONLY:
-                    transitionTo(mScanOnlyLockHeldState);
-                    break;
-                default:
-                    loge("Illegal lock " + mLocks.getStrongestLockMode());
-            }
-        } else {
-            if (mSettingsStore.isScanAlwaysAvailable()) {
-                transitionTo(mScanOnlyLockHeldState);
-            } else {
-                transitionTo(mNoLockHeldState);
-            }
-        }
-    }
-
-    @Override
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        super.dump(fd, pw, args);
-
-        pw.println("mScreenOff " + mScreenOff);
-        pw.println("mDeviceIdle " + mDeviceIdle);
-        pw.println("mPluggedType " + mPluggedType);
-        pw.println("mIdleMillis " + mIdleMillis);
-        pw.println("mSleepPolicy " + mSleepPolicy);
-    }
-}
diff --git a/services/core/java/com/android/server/wifi/WifiNotificationController.java b/services/core/java/com/android/server/wifi/WifiNotificationController.java
deleted file mode 100644
index a9206e0..0000000
--- a/services/core/java/com/android/server/wifi/WifiNotificationController.java
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * Copyright (C) 2013 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.android.server.wifi;
-
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.TaskStackBuilder;
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
-import android.net.NetworkInfo;
-import android.net.wifi.ScanResult;
-import android.net.wifi.WifiManager;
-import android.net.wifi.WifiStateMachine;
-import android.os.Handler;
-import android.os.Message;
-import android.os.UserHandle;
-import android.provider.Settings;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.util.List;
-
-/* Takes care of handling the "open wi-fi network available" notification @hide */
-final class WifiNotificationController {
-    /**
-     * The icon to show in the 'available networks' notification. This will also
-     * be the ID of the Notification given to the NotificationManager.
-     */
-    private static final int ICON_NETWORKS_AVAILABLE =
-            com.android.internal.R.drawable.stat_notify_wifi_in_range;
-    /**
-     * When a notification is shown, we wait this amount before possibly showing it again.
-     */
-    private final long NOTIFICATION_REPEAT_DELAY_MS;
-    /**
-     * Whether the user has set the setting to show the 'available networks' notification.
-     */
-    private boolean mNotificationEnabled;
-    /**
-     * Observes the user setting to keep {@link #mNotificationEnabled} in sync.
-     */
-    private NotificationEnabledSettingObserver mNotificationEnabledSettingObserver;
-    /**
-     * The {@link System#currentTimeMillis()} must be at least this value for us
-     * to show the notification again.
-     */
-    private long mNotificationRepeatTime;
-    /**
-     * The Notification object given to the NotificationManager.
-     */
-    private Notification mNotification;
-    /**
-     * Whether the notification is being shown, as set by us. That is, if the
-     * user cancels the notification, we will not receive the callback so this
-     * will still be true. We only guarantee if this is false, then the
-     * notification is not showing.
-     */
-    private boolean mNotificationShown;
-    /**
-     * The number of continuous scans that must occur before consider the
-     * supplicant in a scanning state. This allows supplicant to associate with
-     * remembered networks that are in the scan results.
-     */
-    private static final int NUM_SCANS_BEFORE_ACTUALLY_SCANNING = 3;
-    /**
-     * The number of scans since the last network state change. When this
-     * exceeds {@link #NUM_SCANS_BEFORE_ACTUALLY_SCANNING}, we consider the
-     * supplicant to actually be scanning. When the network state changes to
-     * something other than scanning, we reset this to 0.
-     */
-    private int mNumScansSinceNetworkStateChange;
-
-    private final Context mContext;
-    private final WifiStateMachine mWifiStateMachine;
-    private NetworkInfo mNetworkInfo;
-    private volatile int mWifiState;
-
-    WifiNotificationController(Context context, WifiStateMachine wsm) {
-        mContext = context;
-        mWifiStateMachine = wsm;
-        mWifiState = WifiManager.WIFI_STATE_UNKNOWN;
-
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
-
-        mContext.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                        if (intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
-                            mWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE,
-                                    WifiManager.WIFI_STATE_UNKNOWN);
-                            resetNotification();
-                        } else if (intent.getAction().equals(
-                                WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
-                            mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(
-                                    WifiManager.EXTRA_NETWORK_INFO);
-                            // reset & clear notification on a network connect & disconnect
-                            switch(mNetworkInfo.getDetailedState()) {
-                                case CONNECTED:
-                                case DISCONNECTED:
-                                case CAPTIVE_PORTAL_CHECK:
-                                    resetNotification();
-                                    break;
-                            }
-                        } else if (intent.getAction().equals(
-                                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
-                            checkAndSetNotification(mNetworkInfo,
-                                    mWifiStateMachine.syncGetScanResultsList());
-                        }
-                    }
-                }, filter);
-
-        // Setting is in seconds
-        NOTIFICATION_REPEAT_DELAY_MS = Settings.Global.getInt(context.getContentResolver(),
-                Settings.Global.WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, 900) * 1000l;
-        mNotificationEnabledSettingObserver = new NotificationEnabledSettingObserver(new Handler());
-        mNotificationEnabledSettingObserver.register();
-    }
-
-    private synchronized void checkAndSetNotification(NetworkInfo networkInfo,
-            List<ScanResult> scanResults) {
-        // TODO: unregister broadcast so we do not have to check here
-        // If we shouldn't place a notification on available networks, then
-        // don't bother doing any of the following
-        if (!mNotificationEnabled) return;
-        if (networkInfo == null) return;
-        if (mWifiState != WifiManager.WIFI_STATE_ENABLED) return;
-
-        NetworkInfo.State state = networkInfo.getState();
-        if ((state == NetworkInfo.State.DISCONNECTED)
-                || (state == NetworkInfo.State.UNKNOWN)) {
-            if (scanResults != null) {
-                int numOpenNetworks = 0;
-                for (int i = scanResults.size() - 1; i >= 0; i--) {
-                    ScanResult scanResult = scanResults.get(i);
-
-                    //A capability of [ESS] represents an open access point
-                    //that is available for an STA to connect
-                    if (scanResult.capabilities != null &&
-                            scanResult.capabilities.equals("[ESS]")) {
-                        numOpenNetworks++;
-                    }
-                }
-
-                if (numOpenNetworks > 0) {
-                    if (++mNumScansSinceNetworkStateChange >= NUM_SCANS_BEFORE_ACTUALLY_SCANNING) {
-                        /*
-                         * We've scanned continuously at least
-                         * NUM_SCANS_BEFORE_NOTIFICATION times. The user
-                         * probably does not have a remembered network in range,
-                         * since otherwise supplicant would have tried to
-                         * associate and thus resetting this counter.
-                         */
-                        setNotificationVisible(true, numOpenNetworks, false, 0);
-                    }
-                    return;
-                }
-            }
-        }
-
-        // No open networks in range, remove the notification
-        setNotificationVisible(false, 0, false, 0);
-    }
-
-    /**
-     * Clears variables related to tracking whether a notification has been
-     * shown recently and clears the current notification.
-     */
-    private synchronized void resetNotification() {
-        mNotificationRepeatTime = 0;
-        mNumScansSinceNetworkStateChange = 0;
-        setNotificationVisible(false, 0, false, 0);
-    }
-
-    /**
-     * Display or don't display a notification that there are open Wi-Fi networks.
-     * @param visible {@code true} if notification should be visible, {@code false} otherwise
-     * @param numNetworks the number networks seen
-     * @param force {@code true} to force notification to be shown/not-shown,
-     * even if it is already shown/not-shown.
-     * @param delay time in milliseconds after which the notification should be made
-     * visible or invisible.
-     */
-    private void setNotificationVisible(boolean visible, int numNetworks, boolean force,
-            int delay) {
-
-        // Since we use auto cancel on the notification, when the
-        // mNetworksAvailableNotificationShown is true, the notification may
-        // have actually been canceled.  However, when it is false we know
-        // for sure that it is not being shown (it will not be shown any other
-        // place than here)
-
-        // If it should be hidden and it is already hidden, then noop
-        if (!visible && !mNotificationShown && !force) {
-            return;
-        }
-
-        NotificationManager notificationManager = (NotificationManager) mContext
-                .getSystemService(Context.NOTIFICATION_SERVICE);
-
-        Message message;
-        if (visible) {
-
-            // Not enough time has passed to show the notification again
-            if (System.currentTimeMillis() < mNotificationRepeatTime) {
-                return;
-            }
-
-            if (mNotification == null) {
-                // Cache the Notification object.
-                mNotification = new Notification();
-                mNotification.when = 0;
-                mNotification.icon = ICON_NETWORKS_AVAILABLE;
-                mNotification.flags = Notification.FLAG_AUTO_CANCEL;
-                mNotification.contentIntent = TaskStackBuilder.create(mContext)
-                        .addNextIntentWithParentStack(
-                                new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK))
-                        .getPendingIntent(0, 0, null, UserHandle.CURRENT);
-            }
-
-            CharSequence title = mContext.getResources().getQuantityText(
-                    com.android.internal.R.plurals.wifi_available, numNetworks);
-            CharSequence details = mContext.getResources().getQuantityText(
-                    com.android.internal.R.plurals.wifi_available_detailed, numNetworks);
-            mNotification.tickerText = title;
-            mNotification.setLatestEventInfo(mContext, title, details, mNotification.contentIntent);
-
-            mNotificationRepeatTime = System.currentTimeMillis() + NOTIFICATION_REPEAT_DELAY_MS;
-
-            notificationManager.notifyAsUser(null, ICON_NETWORKS_AVAILABLE, mNotification,
-                    UserHandle.ALL);
-        } else {
-            notificationManager.cancelAsUser(null, ICON_NETWORKS_AVAILABLE, UserHandle.ALL);
-        }
-
-        mNotificationShown = visible;
-    }
-
-    void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println("mNotificationEnabled " + mNotificationEnabled);
-        pw.println("mNotificationRepeatTime " + mNotificationRepeatTime);
-        pw.println("mNotificationShown " + mNotificationShown);
-        pw.println("mNumScansSinceNetworkStateChange " + mNumScansSinceNetworkStateChange);
-    }
-
-    private class NotificationEnabledSettingObserver extends ContentObserver {
-        public NotificationEnabledSettingObserver(Handler handler) {
-            super(handler);
-        }
-
-        public void register() {
-            ContentResolver cr = mContext.getContentResolver();
-            cr.registerContentObserver(Settings.Global.getUriFor(
-                    Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON), true, this);
-            synchronized (WifiNotificationController.this) {
-                mNotificationEnabled = getValue();
-            }
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            super.onChange(selfChange);
-
-            synchronized (WifiNotificationController.this) {
-                mNotificationEnabled = getValue();
-                resetNotification();
-            }
-        }
-
-        private boolean getValue() {
-            return Settings.Global.getInt(mContext.getContentResolver(),
-                    Settings.Global.WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, 1) == 1;
-        }
-    }
-
-}
diff --git a/services/core/java/com/android/server/wifi/WifiService.java b/services/core/java/com/android/server/wifi/WifiService.java
deleted file mode 100644
index aecf9ae..0000000
--- a/services/core/java/com/android/server/wifi/WifiService.java
+++ /dev/null
@@ -1,1599 +0,0 @@
-/*
- * Copyright (C) 2010 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.android.server.wifi;
-
-import android.app.ActivityManager;
-import android.app.AppOpsManager;
-import android.bluetooth.BluetoothAdapter;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.database.ContentObserver;
-import android.net.DhcpInfo;
-import android.net.DhcpResults;
-import android.net.LinkAddress;
-import android.net.NetworkUtils;
-import android.net.RouteInfo;
-import android.net.wifi.IWifiManager;
-import android.net.wifi.ScanResult;
-import android.net.wifi.BatchedScanResult;
-import android.net.wifi.BatchedScanSettings;
-import android.net.wifi.WifiConfiguration;
-import android.net.wifi.WifiConfiguration.ProxySettings;
-import android.net.wifi.WifiInfo;
-import android.net.wifi.WifiManager;
-import android.net.wifi.WifiStateMachine;
-import android.net.wifi.WifiWatchdogStateMachine;
-import android.os.Binder;
-import android.os.Handler;
-import android.os.Messenger;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.INetworkManagementService;
-import android.os.Message;
-import android.os.RemoteException;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.os.WorkSource;
-import android.os.AsyncTask;
-import android.provider.Settings;
-import android.util.Log;
-import android.util.Slog;
-
-import java.io.FileNotFoundException;
-import java.io.BufferedReader;
-import java.io.FileDescriptor;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import java.net.InetAddress;
-import java.net.Inet4Address;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import com.android.internal.R;
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.internal.util.AsyncChannel;
-import com.android.server.am.BatteryStatsService;
-import static com.android.server.wifi.WifiController.CMD_AIRPLANE_TOGGLED;
-import static com.android.server.wifi.WifiController.CMD_BATTERY_CHANGED;
-import static com.android.server.wifi.WifiController.CMD_EMERGENCY_MODE_CHANGED;
-import static com.android.server.wifi.WifiController.CMD_LOCKS_CHANGED;
-import static com.android.server.wifi.WifiController.CMD_SCAN_ALWAYS_MODE_CHANGED;
-import static com.android.server.wifi.WifiController.CMD_SCREEN_OFF;
-import static com.android.server.wifi.WifiController.CMD_SCREEN_ON;
-import static com.android.server.wifi.WifiController.CMD_SET_AP;
-import static com.android.server.wifi.WifiController.CMD_USER_PRESENT;
-import static com.android.server.wifi.WifiController.CMD_WIFI_TOGGLED;
-/**
- * WifiService handles remote WiFi operation requests by implementing
- * the IWifiManager interface.
- *
- * @hide
- */
-public final class WifiService extends IWifiManager.Stub {
-    private static final String TAG = "WifiService";
-    private static final boolean DBG = false;
-
-    final WifiStateMachine mWifiStateMachine;
-
-    private final Context mContext;
-
-    final LockList mLocks = new LockList();
-    // some wifi lock statistics
-    private int mFullHighPerfLocksAcquired;
-    private int mFullHighPerfLocksReleased;
-    private int mFullLocksAcquired;
-    private int mFullLocksReleased;
-    private int mScanLocksAcquired;
-    private int mScanLocksReleased;
-
-    private final List<Multicaster> mMulticasters =
-            new ArrayList<Multicaster>();
-    private int mMulticastEnabled;
-    private int mMulticastDisabled;
-
-    private final IBatteryStats mBatteryStats;
-    private final AppOpsManager mAppOps;
-
-    private String mInterfaceName;
-
-    /* Tracks the open wi-fi network notification */
-    private WifiNotificationController mNotificationController;
-    /* Polls traffic stats and notifies clients */
-    private WifiTrafficPoller mTrafficPoller;
-    /* Tracks the persisted states for wi-fi & airplane mode */
-    final WifiSettingsStore mSettingsStore;
-
-    final boolean mBatchedScanSupported;
-
-    /**
-     * Asynchronous channel to WifiStateMachine
-     */
-    private AsyncChannel mWifiStateMachineChannel;
-
-    /**
-     * Handles client connections
-     */
-    private class ClientHandler extends Handler {
-
-        ClientHandler(android.os.Looper looper) {
-            super(looper);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: {
-                    if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
-                        if (DBG) Slog.d(TAG, "New client listening to asynchronous messages");
-                        // We track the clients by the Messenger
-                        // since it is expected to be always available
-                        mTrafficPoller.addClient(msg.replyTo);
-                    } else {
-                        Slog.e(TAG, "Client connection failure, error=" + msg.arg1);
-                    }
-                    break;
-                }
-                case AsyncChannel.CMD_CHANNEL_DISCONNECTED: {
-                    if (msg.arg1 == AsyncChannel.STATUS_SEND_UNSUCCESSFUL) {
-                        if (DBG) Slog.d(TAG, "Send failed, client connection lost");
-                    } else {
-                        if (DBG) Slog.d(TAG, "Client connection lost with reason: " + msg.arg1);
-                    }
-                    mTrafficPoller.removeClient(msg.replyTo);
-                    break;
-                }
-                case AsyncChannel.CMD_CHANNEL_FULL_CONNECTION: {
-                    AsyncChannel ac = new AsyncChannel();
-                    ac.connect(mContext, this, msg.replyTo);
-                    break;
-                }
-                /* Client commands are forwarded to state machine */
-                case WifiManager.CONNECT_NETWORK:
-                case WifiManager.SAVE_NETWORK: {
-                    WifiConfiguration config = (WifiConfiguration) msg.obj;
-                    int networkId = msg.arg1;
-                    if (config != null && config.isValid()) {
-                        // This is restricted because there is no UI for the user to
-                        // monitor/control PAC.
-                        if (config.proxySettings != ProxySettings.PAC) {
-                            if (DBG) Slog.d(TAG, "Connect with config" + config);
-                            mWifiStateMachine.sendMessage(Message.obtain(msg));
-                        } else {
-                            Slog.e(TAG,  "ClientHandler.handleMessage cannot process msg with PAC");
-                            if (msg.what == WifiManager.CONNECT_NETWORK) {
-                                replyFailed(msg, WifiManager.CONNECT_NETWORK_FAILED);
-                            } else {
-                                replyFailed(msg, WifiManager.SAVE_NETWORK_FAILED);
-                            }
-                        }
-                    } else if (config == null
-                            && networkId != WifiConfiguration.INVALID_NETWORK_ID) {
-                        if (DBG) Slog.d(TAG, "Connect with networkId" + networkId);
-                        mWifiStateMachine.sendMessage(Message.obtain(msg));
-                    } else {
-                        Slog.e(TAG, "ClientHandler.handleMessage ignoring invalid msg=" + msg);
-                        if (msg.what == WifiManager.CONNECT_NETWORK) {
-                            replyFailed(msg, WifiManager.CONNECT_NETWORK_FAILED);
-                        } else {
-                            replyFailed(msg, WifiManager.SAVE_NETWORK_FAILED);
-                        }
-                    }
-                    break;
-                }
-                case WifiManager.FORGET_NETWORK:
-                case WifiManager.START_WPS:
-                case WifiManager.CANCEL_WPS:
-                case WifiManager.DISABLE_NETWORK:
-                case WifiManager.RSSI_PKTCNT_FETCH: {
-                    mWifiStateMachine.sendMessage(Message.obtain(msg));
-                    break;
-                }
-                default: {
-                    Slog.d(TAG, "ClientHandler.handleMessage ignoring msg=" + msg);
-                    break;
-                }
-            }
-        }
-
-        private void replyFailed(Message msg, int what) {
-            Message reply = msg.obtain();
-            reply.what = what;
-            reply.arg1 = WifiManager.INVALID_ARGS;
-            try {
-                msg.replyTo.send(reply);
-            } catch (RemoteException e) {
-                // There's not much we can do if reply can't be sent!
-            }
-        }
-    }
-    private ClientHandler mClientHandler;
-
-    /**
-     * Handles interaction with WifiStateMachine
-     */
-    private class WifiStateMachineHandler extends Handler {
-        private AsyncChannel mWsmChannel;
-
-        WifiStateMachineHandler(android.os.Looper looper) {
-            super(looper);
-            mWsmChannel = new AsyncChannel();
-            mWsmChannel.connect(mContext, this, mWifiStateMachine.getHandler());
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED: {
-                    if (msg.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
-                        mWifiStateMachineChannel = mWsmChannel;
-                    } else {
-                        Slog.e(TAG, "WifiStateMachine connection failure, error=" + msg.arg1);
-                        mWifiStateMachineChannel = null;
-                    }
-                    break;
-                }
-                case AsyncChannel.CMD_CHANNEL_DISCONNECTED: {
-                    Slog.e(TAG, "WifiStateMachine channel lost, msg.arg1 =" + msg.arg1);
-                    mWifiStateMachineChannel = null;
-                    //Re-establish connection to state machine
-                    mWsmChannel.connect(mContext, this, mWifiStateMachine.getHandler());
-                    break;
-                }
-                default: {
-                    Slog.d(TAG, "WifiStateMachineHandler.handleMessage ignoring msg=" + msg);
-                    break;
-                }
-            }
-        }
-    }
-    WifiStateMachineHandler mWifiStateMachineHandler;
-
-    private WifiWatchdogStateMachine mWifiWatchdogStateMachine;
-
-    public WifiService(Context context) {
-        mContext = context;
-
-        mInterfaceName =  SystemProperties.get("wifi.interface", "wlan0");
-
-        mWifiStateMachine = new WifiStateMachine(mContext, mInterfaceName);
-        mWifiStateMachine.enableRssiPolling(true);
-        mBatteryStats = BatteryStatsService.getService();
-        mAppOps = (AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE);
-
-        mNotificationController = new WifiNotificationController(mContext, mWifiStateMachine);
-        mTrafficPoller = new WifiTrafficPoller(mContext, mInterfaceName);
-        mSettingsStore = new WifiSettingsStore(mContext);
-
-        HandlerThread wifiThread = new HandlerThread("WifiService");
-        wifiThread.start();
-        mClientHandler = new ClientHandler(wifiThread.getLooper());
-        mWifiStateMachineHandler = new WifiStateMachineHandler(wifiThread.getLooper());
-        mWifiController = new WifiController(mContext, this, wifiThread.getLooper());
-        mWifiController.start();
-
-        mBatchedScanSupported = mContext.getResources().getBoolean(
-                R.bool.config_wifi_batched_scan_supported);
-
-        registerForScanModeChange();
-        mContext.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                        if (mSettingsStore.handleAirplaneModeToggled()) {
-                            mWifiController.sendMessage(CMD_AIRPLANE_TOGGLED);
-                        }
-                    }
-                },
-                new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));
-
-        // Adding optimizations of only receiving broadcasts when wifi is enabled
-        // can result in race conditions when apps toggle wifi in the background
-        // without active user involvement. Always receive broadcasts.
-        registerForBroadcasts();
-    }
-
-    private WifiController mWifiController;
-
-    /**
-     * Check if Wi-Fi needs to be enabled and start
-     * if needed
-     *
-     * This function is used only at boot time
-     */
-    public void checkAndStartWifi() {
-        /* Check if wi-fi needs to be enabled */
-        boolean wifiEnabled = mSettingsStore.isWifiToggleEnabled();
-        Slog.i(TAG, "WifiService starting up with Wi-Fi " +
-                (wifiEnabled ? "enabled" : "disabled"));
-
-        // If we are already disabled (could be due to airplane mode), avoid changing persist
-        // state here
-        if (wifiEnabled) setWifiEnabled(wifiEnabled);
-
-        mWifiWatchdogStateMachine = WifiWatchdogStateMachine.
-               makeWifiWatchdogStateMachine(mContext);
-
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#pingSupplicant()}
-     * @return {@code true} if the operation succeeds, {@code false} otherwise
-     */
-    public boolean pingSupplicant() {
-        enforceAccessPermission();
-        if (mWifiStateMachineChannel != null) {
-            return mWifiStateMachine.syncPingSupplicant(mWifiStateMachineChannel);
-        } else {
-            Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
-            return false;
-        }
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#startScan()}
-     *
-     * <p>If workSource is null, all blame is given to the calling uid.
-     */
-    public void startScan(WorkSource workSource) {
-        enforceChangePermission();
-        if (workSource != null) {
-            enforceWorkSourcePermission();
-            // WifiManager currently doesn't use names, so need to clear names out of the
-            // supplied WorkSource to allow future WorkSource combining.
-            workSource.clearNames();
-        }
-        mWifiStateMachine.startScan(Binder.getCallingUid(), workSource);
-    }
-
-    private class BatchedScanRequest extends DeathRecipient {
-        final BatchedScanSettings settings;
-        final int uid;
-        final int pid;
-        final WorkSource workSource;
-
-        BatchedScanRequest(BatchedScanSettings settings, IBinder binder, WorkSource ws) {
-            super(0, null, binder, null);
-            this.settings = settings;
-            this.uid = getCallingUid();
-            this.pid = getCallingPid();
-            workSource = ws;
-        }
-        public void binderDied() {
-            stopBatchedScan(settings, uid, pid);
-        }
-        public String toString() {
-            return "BatchedScanRequest{settings=" + settings + ", binder=" + mBinder + "}";
-        }
-
-        public boolean isSameApp(int uid, int pid) {
-            return (this.uid == uid && this.pid == pid);
-        }
-    }
-
-    private final List<BatchedScanRequest> mBatchedScanners = new ArrayList<BatchedScanRequest>();
-
-    public boolean isBatchedScanSupported() {
-        return mBatchedScanSupported;
-    }
-
-    public void pollBatchedScan() {
-        enforceChangePermission();
-        if (mBatchedScanSupported == false) return;
-        mWifiStateMachine.requestBatchedScanPoll();
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#requestBatchedScan()}
-     */
-    public boolean requestBatchedScan(BatchedScanSettings requested, IBinder binder,
-            WorkSource workSource) {
-        enforceChangePermission();
-        if (workSource != null) {
-            enforceWorkSourcePermission();
-            // WifiManager currently doesn't use names, so need to clear names out of the
-            // supplied WorkSource to allow future WorkSource combining.
-            workSource.clearNames();
-        }
-        if (mBatchedScanSupported == false) return false;
-        requested = new BatchedScanSettings(requested);
-        if (requested.isInvalid()) return false;
-        BatchedScanRequest r = new BatchedScanRequest(requested, binder, workSource);
-        synchronized(mBatchedScanners) {
-            mBatchedScanners.add(r);
-            resolveBatchedScannersLocked();
-        }
-        return true;
-    }
-
-    public List<BatchedScanResult> getBatchedScanResults(String callingPackage) {
-        enforceAccessPermission();
-        if (mBatchedScanSupported == false) return new ArrayList<BatchedScanResult>();
-        int userId = UserHandle.getCallingUserId();
-        int uid = Binder.getCallingUid();
-        long ident = Binder.clearCallingIdentity();
-        try {
-            if (mAppOps.noteOp(AppOpsManager.OP_WIFI_SCAN, uid, callingPackage)
-                    != AppOpsManager.MODE_ALLOWED) {
-                return new ArrayList<BatchedScanResult>();
-            }
-            int currentUser = ActivityManager.getCurrentUser();
-            if (userId != currentUser) {
-                return new ArrayList<BatchedScanResult>();
-            } else {
-                return mWifiStateMachine.syncGetBatchedScanResultsList();
-            }
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
-
-    public void stopBatchedScan(BatchedScanSettings settings) {
-        enforceChangePermission();
-        if (mBatchedScanSupported == false) return;
-        stopBatchedScan(settings, getCallingUid(), getCallingPid());
-    }
-
-    private void stopBatchedScan(BatchedScanSettings settings, int uid, int pid) {
-        ArrayList<BatchedScanRequest> found = new ArrayList<BatchedScanRequest>();
-        synchronized(mBatchedScanners) {
-            for (BatchedScanRequest r : mBatchedScanners) {
-                if (r.isSameApp(uid, pid) && (settings == null || settings.equals(r.settings))) {
-                    found.add(r);
-                    if (settings != null) break;
-                }
-            }
-            for (BatchedScanRequest r : found) {
-                mBatchedScanners.remove(r);
-            }
-            if (found.size() != 0) {
-                resolveBatchedScannersLocked();
-            }
-        }
-    }
-
-    private void resolveBatchedScannersLocked() {
-        BatchedScanSettings setting = new BatchedScanSettings();
-        WorkSource responsibleWorkSource = null;
-        int responsibleUid = 0;
-        double responsibleCsph = 0; // Channel Scans Per Hour
-
-        if (mBatchedScanners.size() == 0) {
-            mWifiStateMachine.setBatchedScanSettings(null, 0, 0, null);
-            return;
-        }
-        for (BatchedScanRequest r : mBatchedScanners) {
-            BatchedScanSettings s = r.settings;
-
-            // evaluate responsibility
-            int currentChannelCount;
-            int currentScanInterval;
-            double currentCsph;
-
-            if (s.channelSet == null || s.channelSet.isEmpty()) {
-                // all channels - 11 B and 9 A channels roughly.
-                currentChannelCount = 9 + 11;
-            } else {
-                currentChannelCount = s.channelSet.size();
-                // these are rough est - no real need to correct for reg-domain;
-                if (s.channelSet.contains("A")) currentChannelCount += (9 - 1);
-                if (s.channelSet.contains("B")) currentChannelCount += (11 - 1);
-
-            }
-            if (s.scanIntervalSec == BatchedScanSettings.UNSPECIFIED) {
-                currentScanInterval = BatchedScanSettings.DEFAULT_INTERVAL_SEC;
-            } else {
-                currentScanInterval = s.scanIntervalSec;
-            }
-            currentCsph = 60 * 60 * currentChannelCount / currentScanInterval;
-
-            if (currentCsph > responsibleCsph) {
-                responsibleUid = r.uid;
-                responsibleWorkSource = r.workSource;
-                responsibleCsph = currentCsph;
-            }
-
-            if (s.maxScansPerBatch != BatchedScanSettings.UNSPECIFIED &&
-                    s.maxScansPerBatch < setting.maxScansPerBatch) {
-                setting.maxScansPerBatch = s.maxScansPerBatch;
-            }
-            if (s.maxApPerScan != BatchedScanSettings.UNSPECIFIED &&
-                    (setting.maxApPerScan == BatchedScanSettings.UNSPECIFIED ||
-                    s.maxApPerScan > setting.maxApPerScan)) {
-                setting.maxApPerScan = s.maxApPerScan;
-            }
-            if (s.scanIntervalSec != BatchedScanSettings.UNSPECIFIED &&
-                    s.scanIntervalSec < setting.scanIntervalSec) {
-                setting.scanIntervalSec = s.scanIntervalSec;
-            }
-            if (s.maxApForDistance != BatchedScanSettings.UNSPECIFIED &&
-                    (setting.maxApForDistance == BatchedScanSettings.UNSPECIFIED ||
-                    s.maxApForDistance > setting.maxApForDistance)) {
-                setting.maxApForDistance = s.maxApForDistance;
-            }
-            if (s.channelSet != null && s.channelSet.size() != 0) {
-                if (setting.channelSet == null || setting.channelSet.size() != 0) {
-                    if (setting.channelSet == null) setting.channelSet = new ArrayList<String>();
-                    for (String i : s.channelSet) {
-                        if (setting.channelSet.contains(i) == false) setting.channelSet.add(i);
-                    }
-                } // else, ignore the constraint - we already use all channels
-            } else {
-                if (setting.channelSet == null || setting.channelSet.size() != 0) {
-                    setting.channelSet = new ArrayList<String>();
-                }
-            }
-        }
-
-        setting.constrain();
-        mWifiStateMachine.setBatchedScanSettings(setting, responsibleUid, (int)responsibleCsph,
-                responsibleWorkSource);
-    }
-
-    private void enforceAccessPermission() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_WIFI_STATE,
-                                                "WifiService");
-    }
-
-    private void enforceChangePermission() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CHANGE_WIFI_STATE,
-                                                "WifiService");
-
-    }
-
-    private void enforceWorkSourcePermission() {
-        mContext.enforceCallingPermission(android.Manifest.permission.UPDATE_DEVICE_STATS,
-                                                "WifiService");
-
-    }
-
-    private void enforceMulticastChangePermission() {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.CHANGE_WIFI_MULTICAST_STATE,
-                "WifiService");
-    }
-
-    private void enforceConnectivityInternalPermission() {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.CONNECTIVITY_INTERNAL,
-                "ConnectivityService");
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#setWifiEnabled(boolean)}
-     * @param enable {@code true} to enable, {@code false} to disable.
-     * @return {@code true} if the enable/disable operation was
-     *         started or is already in the queue.
-     */
-    public synchronized boolean setWifiEnabled(boolean enable) {
-        enforceChangePermission();
-        Slog.d(TAG, "setWifiEnabled: " + enable + " pid=" + Binder.getCallingPid()
-                    + ", uid=" + Binder.getCallingUid());
-        if (DBG) {
-            Slog.e(TAG, "Invoking mWifiStateMachine.setWifiEnabled\n");
-        }
-
-        /*
-        * Caller might not have WRITE_SECURE_SETTINGS,
-        * only CHANGE_WIFI_STATE is enforced
-        */
-
-        long ident = Binder.clearCallingIdentity();
-        try {
-            if (! mSettingsStore.handleWifiToggled(enable)) {
-                // Nothing to do if wifi cannot be toggled
-                return true;
-            }
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-
-        mWifiController.sendMessage(CMD_WIFI_TOGGLED);
-        return true;
-    }
-
-    /**
-     * see {@link WifiManager#getWifiState()}
-     * @return One of {@link WifiManager#WIFI_STATE_DISABLED},
-     *         {@link WifiManager#WIFI_STATE_DISABLING},
-     *         {@link WifiManager#WIFI_STATE_ENABLED},
-     *         {@link WifiManager#WIFI_STATE_ENABLING},
-     *         {@link WifiManager#WIFI_STATE_UNKNOWN}
-     */
-    public int getWifiEnabledState() {
-        enforceAccessPermission();
-        return mWifiStateMachine.syncGetWifiState();
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#setWifiApEnabled(WifiConfiguration, boolean)}
-     * @param wifiConfig SSID, security and channel details as
-     *        part of WifiConfiguration
-     * @param enabled true to enable and false to disable
-     */
-    public void setWifiApEnabled(WifiConfiguration wifiConfig, boolean enabled) {
-        enforceChangePermission();
-        // null wifiConfig is a meaningful input for CMD_SET_AP
-        if (wifiConfig == null || wifiConfig.isValid()) {
-            mWifiController.obtainMessage(CMD_SET_AP, enabled ? 1 : 0, 0, wifiConfig).sendToTarget();
-        } else {
-            Slog.e(TAG, "Invalid WifiConfiguration");
-        }
-    }
-
-    /**
-     * see {@link WifiManager#getWifiApState()}
-     * @return One of {@link WifiManager#WIFI_AP_STATE_DISABLED},
-     *         {@link WifiManager#WIFI_AP_STATE_DISABLING},
-     *         {@link WifiManager#WIFI_AP_STATE_ENABLED},
-     *         {@link WifiManager#WIFI_AP_STATE_ENABLING},
-     *         {@link WifiManager#WIFI_AP_STATE_FAILED}
-     */
-    public int getWifiApEnabledState() {
-        enforceAccessPermission();
-        return mWifiStateMachine.syncGetWifiApState();
-    }
-
-    /**
-     * see {@link WifiManager#getWifiApConfiguration()}
-     * @return soft access point configuration
-     */
-    public WifiConfiguration getWifiApConfiguration() {
-        enforceAccessPermission();
-        return mWifiStateMachine.syncGetWifiApConfiguration();
-    }
-
-    /**
-     * see {@link WifiManager#setWifiApConfiguration(WifiConfiguration)}
-     * @param wifiConfig WifiConfiguration details for soft access point
-     */
-    public void setWifiApConfiguration(WifiConfiguration wifiConfig) {
-        enforceChangePermission();
-        if (wifiConfig == null)
-            return;
-        if (wifiConfig.isValid()) {
-            mWifiStateMachine.setWifiApConfiguration(wifiConfig);
-        } else {
-            Slog.e(TAG, "Invalid WifiConfiguration");
-        }
-    }
-
-    /**
-     * @param enable {@code true} to enable, {@code false} to disable.
-     * @return {@code true} if the enable/disable operation was
-     *         started or is already in the queue.
-     */
-    public boolean isScanAlwaysAvailable() {
-        enforceAccessPermission();
-        return mSettingsStore.isScanAlwaysAvailable();
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#disconnect()}
-     */
-    public void disconnect() {
-        enforceChangePermission();
-        mWifiStateMachine.disconnectCommand();
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#reconnect()}
-     */
-    public void reconnect() {
-        enforceChangePermission();
-        mWifiStateMachine.reconnectCommand();
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#reassociate()}
-     */
-    public void reassociate() {
-        enforceChangePermission();
-        mWifiStateMachine.reassociateCommand();
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#getConfiguredNetworks()}
-     * @return the list of configured networks
-     */
-    public List<WifiConfiguration> getConfiguredNetworks() {
-        enforceAccessPermission();
-        if (mWifiStateMachineChannel != null) {
-            return mWifiStateMachine.syncGetConfiguredNetworks(mWifiStateMachineChannel);
-        } else {
-            Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
-            return null;
-        }
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#addOrUpdateNetwork(WifiConfiguration)}
-     * @return the supplicant-assigned identifier for the new or updated
-     * network if the operation succeeds, or {@code -1} if it fails
-     */
-    public int addOrUpdateNetwork(WifiConfiguration config) {
-        enforceChangePermission();
-        if (config.proxySettings == ProxySettings.PAC) {
-            enforceConnectivityInternalPermission();
-        }
-        if (config.isValid()) {
-            if (mWifiStateMachineChannel != null) {
-                return mWifiStateMachine.syncAddOrUpdateNetwork(mWifiStateMachineChannel, config);
-            } else {
-                Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
-                return -1;
-            }
-        } else {
-            Slog.e(TAG, "bad network configuration");
-            return -1;
-        }
-    }
-
-     /**
-     * See {@link android.net.wifi.WifiManager#removeNetwork(int)}
-     * @param netId the integer that identifies the network configuration
-     * to the supplicant
-     * @return {@code true} if the operation succeeded
-     */
-    public boolean removeNetwork(int netId) {
-        enforceChangePermission();
-        if (mWifiStateMachineChannel != null) {
-            return mWifiStateMachine.syncRemoveNetwork(mWifiStateMachineChannel, netId);
-        } else {
-            Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
-            return false;
-        }
-    }
-
-    /**
-     * See {@link android.net.wifi.WifiManager#enableNetwork(int, boolean)}
-     * @param netId the integer that identifies the network configuration
-     * to the supplicant
-     * @param disableOthers if true, disable all other networks.
-     * @return {@code true} if the operation succeeded
-     */
-    public boolean enableNetwork(int netId, boolean disableOthers) {
-        enforceChangePermission();
-        if (mWifiStateMachineChannel != null) {
-            return mWifiStateMachine.syncEnableNetwork(mWifiStateMachineChannel, netId,
-                    disableOthers);
-        } else {
-            Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
-            return false;
-        }
-    }
-
-    /**
-     * See {@link android.net.wifi.WifiManager#disableNetwork(int)}
-     * @param netId the integer that identifies the network configuration
-     * to the supplicant
-     * @return {@code true} if the operation succeeded
-     */
-    public boolean disableNetwork(int netId) {
-        enforceChangePermission();
-        if (mWifiStateMachineChannel != null) {
-            return mWifiStateMachine.syncDisableNetwork(mWifiStateMachineChannel, netId);
-        } else {
-            Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
-            return false;
-        }
-    }
-
-    /**
-     * See {@link android.net.wifi.WifiManager#getConnectionInfo()}
-     * @return the Wi-Fi information, contained in {@link WifiInfo}.
-     */
-    public WifiInfo getConnectionInfo() {
-        enforceAccessPermission();
-        /*
-         * Make sure we have the latest information, by sending
-         * a status request to the supplicant.
-         */
-        return mWifiStateMachine.syncRequestConnectionInfo();
-    }
-
-    /**
-     * Return the results of the most recent access point scan, in the form of
-     * a list of {@link ScanResult} objects.
-     * @return the list of results
-     */
-    public List<ScanResult> getScanResults(String callingPackage) {
-        enforceAccessPermission();
-        int userId = UserHandle.getCallingUserId();
-        int uid = Binder.getCallingUid();
-        long ident = Binder.clearCallingIdentity();
-        try {
-            if (mAppOps.noteOp(AppOpsManager.OP_WIFI_SCAN, uid, callingPackage)
-                    != AppOpsManager.MODE_ALLOWED) {
-                return new ArrayList<ScanResult>();
-            }
-            int currentUser = ActivityManager.getCurrentUser();
-            if (userId != currentUser) {
-                return new ArrayList<ScanResult>();
-            } else {
-                return mWifiStateMachine.syncGetScanResultsList();
-            }
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
-    /**
-     * Tell the supplicant to persist the current list of configured networks.
-     * @return {@code true} if the operation succeeded
-     *
-     * TODO: deprecate this
-     */
-    public boolean saveConfiguration() {
-        boolean result = true;
-        enforceChangePermission();
-        if (mWifiStateMachineChannel != null) {
-            return mWifiStateMachine.syncSaveConfig(mWifiStateMachineChannel);
-        } else {
-            Slog.e(TAG, "mWifiStateMachineChannel is not initialized");
-            return false;
-        }
-    }
-
-    /**
-     * Set the country code
-     * @param countryCode ISO 3166 country code.
-     * @param persist {@code true} if the setting should be remembered.
-     *
-     * The persist behavior exists so that wifi can fall back to the last
-     * persisted country code on a restart, when the locale information is
-     * not available from telephony.
-     */
-    public void setCountryCode(String countryCode, boolean persist) {
-        Slog.i(TAG, "WifiService trying to set country code to " + countryCode +
-                " with persist set to " + persist);
-        enforceConnectivityInternalPermission();
-        final long token = Binder.clearCallingIdentity();
-        try {
-            mWifiStateMachine.setCountryCode(countryCode, persist);
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-    /**
-     * Set the operational frequency band
-     * @param band One of
-     *     {@link WifiManager#WIFI_FREQUENCY_BAND_AUTO},
-     *     {@link WifiManager#WIFI_FREQUENCY_BAND_5GHZ},
-     *     {@link WifiManager#WIFI_FREQUENCY_BAND_2GHZ},
-     * @param persist {@code true} if the setting should be remembered.
-     *
-     */
-    public void setFrequencyBand(int band, boolean persist) {
-        enforceChangePermission();
-        if (!isDualBandSupported()) return;
-        Slog.i(TAG, "WifiService trying to set frequency band to " + band +
-                " with persist set to " + persist);
-        final long token = Binder.clearCallingIdentity();
-        try {
-            mWifiStateMachine.setFrequencyBand(band, persist);
-        } finally {
-            Binder.restoreCallingIdentity(token);
-        }
-    }
-
-
-    /**
-     * Get the operational frequency band
-     */
-    public int getFrequencyBand() {
-        enforceAccessPermission();
-        return mWifiStateMachine.getFrequencyBand();
-    }
-
-    public boolean isDualBandSupported() {
-        //TODO: Should move towards adding a driver API that checks at runtime
-        return mContext.getResources().getBoolean(
-                com.android.internal.R.bool.config_wifi_dual_band_support);
-    }
-
-    /**
-     * Return the DHCP-assigned addresses from the last successful DHCP request,
-     * if any.
-     * @return the DHCP information
-     * @deprecated
-     */
-    public DhcpInfo getDhcpInfo() {
-        enforceAccessPermission();
-        DhcpResults dhcpResults = mWifiStateMachine.syncGetDhcpResults();
-        if (dhcpResults.linkProperties == null) return null;
-
-        DhcpInfo info = new DhcpInfo();
-        for (LinkAddress la : dhcpResults.linkProperties.getLinkAddresses()) {
-            InetAddress addr = la.getAddress();
-            if (addr instanceof Inet4Address) {
-                info.ipAddress = NetworkUtils.inetAddressToInt((Inet4Address)addr);
-                break;
-            }
-        }
-        for (RouteInfo r : dhcpResults.linkProperties.getRoutes()) {
-            if (r.isDefaultRoute()) {
-                InetAddress gateway = r.getGateway();
-                if (gateway instanceof Inet4Address) {
-                    info.gateway = NetworkUtils.inetAddressToInt((Inet4Address)gateway);
-                }
-            } else if (r.hasGateway() == false) {
-                LinkAddress dest = r.getDestination();
-                if (dest.getAddress() instanceof Inet4Address) {
-                    info.netmask = NetworkUtils.prefixLengthToNetmaskInt(
-                            dest.getNetworkPrefixLength());
-                }
-            }
-        }
-        int dnsFound = 0;
-        for (InetAddress dns : dhcpResults.linkProperties.getDnses()) {
-            if (dns instanceof Inet4Address) {
-                if (dnsFound == 0) {
-                    info.dns1 = NetworkUtils.inetAddressToInt((Inet4Address)dns);
-                } else {
-                    info.dns2 = NetworkUtils.inetAddressToInt((Inet4Address)dns);
-                }
-                if (++dnsFound > 1) break;
-            }
-        }
-        InetAddress serverAddress = dhcpResults.serverAddress;
-        if (serverAddress instanceof Inet4Address) {
-            info.serverAddress = NetworkUtils.inetAddressToInt((Inet4Address)serverAddress);
-        }
-        info.leaseDuration = dhcpResults.leaseDuration;
-
-        return info;
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#startWifi}
-     *
-     */
-    public void startWifi() {
-        enforceConnectivityInternalPermission();
-        /* TODO: may be add permissions for access only to connectivity service
-         * TODO: if a start issued, keep wifi alive until a stop issued irrespective
-         * of WifiLock & device idle status unless wifi enabled status is toggled
-         */
-
-        mWifiStateMachine.setDriverStart(true);
-        mWifiStateMachine.reconnectCommand();
-    }
-
-    public void captivePortalCheckComplete() {
-        enforceConnectivityInternalPermission();
-        mWifiStateMachine.captivePortalCheckComplete();
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#stopWifi}
-     *
-     */
-    public void stopWifi() {
-        enforceConnectivityInternalPermission();
-        /*
-         * TODO: if a stop is issued, wifi is brought up only by startWifi
-         * unless wifi enabled status is toggled
-         */
-        mWifiStateMachine.setDriverStart(false);
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#addToBlacklist}
-     *
-     */
-    public void addToBlacklist(String bssid) {
-        enforceChangePermission();
-
-        mWifiStateMachine.addToBlacklist(bssid);
-    }
-
-    /**
-     * see {@link android.net.wifi.WifiManager#clearBlacklist}
-     *
-     */
-    public void clearBlacklist() {
-        enforceChangePermission();
-
-        mWifiStateMachine.clearBlacklist();
-    }
-
-    /**
-     * enable TDLS for the local NIC to remote NIC
-     * The APPs don't know the remote MAC address to identify NIC though,
-     * so we need to do additional work to find it from remote IP address
-     */
-
-    class TdlsTaskParams {
-        public String remoteIpAddress;
-        public boolean enable;
-    }
-
-    class TdlsTask extends AsyncTask<TdlsTaskParams, Integer, Integer> {
-        @Override
-        protected Integer doInBackground(TdlsTaskParams... params) {
-
-            // Retrieve parameters for the call
-            TdlsTaskParams param = params[0];
-            String remoteIpAddress = param.remoteIpAddress.trim();
-            boolean enable = param.enable;
-
-            // Get MAC address of Remote IP
-            String macAddress = null;
-
-            BufferedReader reader = null;
-
-            try {
-                reader = new BufferedReader(new FileReader("/proc/net/arp"));
-
-                // Skip over the line bearing colum titles
-                String line = reader.readLine();
-
-                while ((line = reader.readLine()) != null) {
-                    String[] tokens = line.split("[ ]+");
-                    if (tokens.length < 6) {
-                        continue;
-                    }
-
-                    // ARP column format is
-                    // Address HWType HWAddress Flags Mask IFace
-                    String ip = tokens[0];
-                    String mac = tokens[3];
-
-                    if (remoteIpAddress.equals(ip)) {
-                        macAddress = mac;
-                        break;
-                    }
-                }
-
-                if (macAddress == null) {
-                    Slog.w(TAG, "Did not find remoteAddress {" + remoteIpAddress + "} in " +
-                            "/proc/net/arp");
-                } else {
-                    enableTdlsWithMacAddress(macAddress, enable);
-                }
-
-            } catch (FileNotFoundException e) {
-                Slog.e(TAG, "Could not open /proc/net/arp to lookup mac address");
-            } catch (IOException e) {
-                Slog.e(TAG, "Could not read /proc/net/arp to lookup mac address");
-            } finally {
-                try {
-                    if (reader != null) {
-                        reader.close();
-                    }
-                }
-                catch (IOException e) {
-                    // Do nothing
-                }
-            }
-
-            return 0;
-        }
-    }
-
-    public void enableTdls(String remoteAddress, boolean enable) {
-        TdlsTaskParams params = new TdlsTaskParams();
-        params.remoteIpAddress = remoteAddress;
-        params.enable = enable;
-        new TdlsTask().execute(params);
-    }
-
-
-    public void enableTdlsWithMacAddress(String remoteMacAddress, boolean enable) {
-        mWifiStateMachine.enableTdls(remoteMacAddress, enable);
-    }
-
-    /**
-     * Get a reference to handler. This is used by a client to establish
-     * an AsyncChannel communication with WifiService
-     */
-    public Messenger getWifiServiceMessenger() {
-        enforceAccessPermission();
-        enforceChangePermission();
-        return new Messenger(mClientHandler);
-    }
-
-    /** Get a reference to WifiStateMachine handler for AsyncChannel communication */
-    public Messenger getWifiStateMachineMessenger() {
-        enforceAccessPermission();
-        enforceChangePermission();
-        return mWifiStateMachine.getMessenger();
-    }
-
-    /**
-     * Get the IP and proxy configuration file
-     */
-    public String getConfigFile() {
-        enforceAccessPermission();
-        return mWifiStateMachine.getConfigFile();
-    }
-
-    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            if (action.equals(Intent.ACTION_SCREEN_ON)) {
-                mWifiController.sendMessage(CMD_SCREEN_ON);
-            } else if (action.equals(Intent.ACTION_USER_PRESENT)) {
-                mWifiController.sendMessage(CMD_USER_PRESENT);
-            } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
-                mWifiController.sendMessage(CMD_SCREEN_OFF);
-            } else if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
-                int pluggedType = intent.getIntExtra("plugged", 0);
-                mWifiController.sendMessage(CMD_BATTERY_CHANGED, pluggedType, 0, null);
-            } else if (action.equals(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED)) {
-                int state = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE,
-                        BluetoothAdapter.STATE_DISCONNECTED);
-                mWifiStateMachine.sendBluetoothAdapterStateChange(state);
-            } else if (action.equals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED)) {
-                boolean emergencyMode = intent.getBooleanExtra("phoneinECMState", false);
-                mWifiController.sendMessage(CMD_EMERGENCY_MODE_CHANGED, emergencyMode ? 1 : 0, 0);
-            }
-        }
-    };
-
-    /**
-     * Observes settings changes to scan always mode.
-     */
-    private void registerForScanModeChange() {
-        ContentObserver contentObserver = new ContentObserver(null) {
-            @Override
-            public void onChange(boolean selfChange) {
-                mSettingsStore.handleWifiScanAlwaysAvailableToggled();
-                mWifiController.sendMessage(CMD_SCAN_ALWAYS_MODE_CHANGED);
-            }
-        };
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE),
-                false, contentObserver);
-    }
-
-    private void registerForBroadcasts() {
-        IntentFilter intentFilter = new IntentFilter();
-        intentFilter.addAction(Intent.ACTION_SCREEN_ON);
-        intentFilter.addAction(Intent.ACTION_USER_PRESENT);
-        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
-        intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
-        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        intentFilter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
-        intentFilter.addAction(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED);
-        mContext.registerReceiver(mReceiver, intentFilter);
-    }
-
-    @Override
-    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
-                != PackageManager.PERMISSION_GRANTED) {
-            pw.println("Permission Denial: can't dump WifiService from from pid="
-                    + Binder.getCallingPid()
-                    + ", uid=" + Binder.getCallingUid());
-            return;
-        }
-        pw.println("Wi-Fi is " + mWifiStateMachine.syncGetWifiStateByName());
-        pw.println("Stay-awake conditions: " +
-                Settings.Global.getInt(mContext.getContentResolver(),
-                                       Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0));
-        pw.println("mMulticastEnabled " + mMulticastEnabled);
-        pw.println("mMulticastDisabled " + mMulticastDisabled);
-        mWifiController.dump(fd, pw, args);
-        mSettingsStore.dump(fd, pw, args);
-        mNotificationController.dump(fd, pw, args);
-        mTrafficPoller.dump(fd, pw, args);
-
-        pw.println("Latest scan results:");
-        List<ScanResult> scanResults = mWifiStateMachine.syncGetScanResultsList();
-        if (scanResults != null && scanResults.size() != 0) {
-            pw.println("  BSSID              Frequency   RSSI  Flags             SSID");
-            for (ScanResult r : scanResults) {
-                pw.printf("  %17s  %9d  %5d  %-16s  %s%n",
-                                         r.BSSID,
-                                         r.frequency,
-                                         r.level,
-                                         r.capabilities,
-                                         r.SSID == null ? "" : r.SSID);
-            }
-        }
-        pw.println();
-        pw.println("Locks acquired: " + mFullLocksAcquired + " full, " +
-                mFullHighPerfLocksAcquired + " full high perf, " +
-                mScanLocksAcquired + " scan");
-        pw.println("Locks released: " + mFullLocksReleased + " full, " +
-                mFullHighPerfLocksReleased + " full high perf, " +
-                mScanLocksReleased + " scan");
-        pw.println();
-        pw.println("Locks held:");
-        mLocks.dump(pw);
-
-        mWifiWatchdogStateMachine.dump(fd, pw, args);
-        pw.println();
-        mWifiStateMachine.dump(fd, pw, args);
-        pw.println();
-    }
-
-    private class WifiLock extends DeathRecipient {
-        WifiLock(int lockMode, String tag, IBinder binder, WorkSource ws) {
-            super(lockMode, tag, binder, ws);
-        }
-
-        public void binderDied() {
-            synchronized (mLocks) {
-                releaseWifiLockLocked(mBinder);
-            }
-        }
-
-        public String toString() {
-            return "WifiLock{" + mTag + " type=" + mMode + " binder=" + mBinder + "}";
-        }
-    }
-
-    class LockList {
-        private List<WifiLock> mList;
-
-        private LockList() {
-            mList = new ArrayList<WifiLock>();
-        }
-
-        synchronized boolean hasLocks() {
-            return !mList.isEmpty();
-        }
-
-        synchronized int getStrongestLockMode() {
-            if (mList.isEmpty()) {
-                return WifiManager.WIFI_MODE_FULL;
-            }
-
-            if (mFullHighPerfLocksAcquired > mFullHighPerfLocksReleased) {
-                return WifiManager.WIFI_MODE_FULL_HIGH_PERF;
-            }
-
-            if (mFullLocksAcquired > mFullLocksReleased) {
-                return WifiManager.WIFI_MODE_FULL;
-            }
-
-            return WifiManager.WIFI_MODE_SCAN_ONLY;
-        }
-
-        synchronized void updateWorkSource(WorkSource ws) {
-            for (int i = 0; i < mLocks.mList.size(); i++) {
-                ws.add(mLocks.mList.get(i).mWorkSource);
-            }
-        }
-
-        private void addLock(WifiLock lock) {
-            if (findLockByBinder(lock.mBinder) < 0) {
-                mList.add(lock);
-            }
-        }
-
-        private WifiLock removeLock(IBinder binder) {
-            int index = findLockByBinder(binder);
-            if (index >= 0) {
-                WifiLock ret = mList.remove(index);
-                ret.unlinkDeathRecipient();
-                return ret;
-            } else {
-                return null;
-            }
-        }
-
-        private int findLockByBinder(IBinder binder) {
-            int size = mList.size();
-            for (int i = size - 1; i >= 0; i--) {
-                if (mList.get(i).mBinder == binder)
-                    return i;
-            }
-            return -1;
-        }
-
-        private void dump(PrintWriter pw) {
-            for (WifiLock l : mList) {
-                pw.print("    ");
-                pw.println(l);
-            }
-        }
-    }
-
-    void enforceWakeSourcePermission(int uid, int pid) {
-        if (uid == android.os.Process.myUid()) {
-            return;
-        }
-        mContext.enforcePermission(android.Manifest.permission.UPDATE_DEVICE_STATS,
-                pid, uid, null);
-    }
-
-    public boolean acquireWifiLock(IBinder binder, int lockMode, String tag, WorkSource ws) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK, null);
-        if (lockMode != WifiManager.WIFI_MODE_FULL &&
-                lockMode != WifiManager.WIFI_MODE_SCAN_ONLY &&
-                lockMode != WifiManager.WIFI_MODE_FULL_HIGH_PERF) {
-            Slog.e(TAG, "Illegal argument, lockMode= " + lockMode);
-            if (DBG) throw new IllegalArgumentException("lockMode=" + lockMode);
-            return false;
-        }
-        if (ws != null && ws.size() == 0) {
-            ws = null;
-        }
-        if (ws != null) {
-            enforceWakeSourcePermission(Binder.getCallingUid(), Binder.getCallingPid());
-        }
-        if (ws == null) {
-            ws = new WorkSource(Binder.getCallingUid());
-        }
-        WifiLock wifiLock = new WifiLock(lockMode, tag, binder, ws);
-        synchronized (mLocks) {
-            return acquireWifiLockLocked(wifiLock);
-        }
-    }
-
-    private void noteAcquireWifiLock(WifiLock wifiLock) throws RemoteException {
-        switch(wifiLock.mMode) {
-            case WifiManager.WIFI_MODE_FULL:
-            case WifiManager.WIFI_MODE_FULL_HIGH_PERF:
-            case WifiManager.WIFI_MODE_SCAN_ONLY:
-                mBatteryStats.noteFullWifiLockAcquiredFromSource(wifiLock.mWorkSource);
-                break;
-        }
-    }
-
-    private void noteReleaseWifiLock(WifiLock wifiLock) throws RemoteException {
-        switch(wifiLock.mMode) {
-            case WifiManager.WIFI_MODE_FULL:
-            case WifiManager.WIFI_MODE_FULL_HIGH_PERF:
-            case WifiManager.WIFI_MODE_SCAN_ONLY:
-                mBatteryStats.noteFullWifiLockReleasedFromSource(wifiLock.mWorkSource);
-                break;
-        }
-    }
-
-    private boolean acquireWifiLockLocked(WifiLock wifiLock) {
-        if (DBG) Slog.d(TAG, "acquireWifiLockLocked: " + wifiLock);
-
-        mLocks.addLock(wifiLock);
-
-        long ident = Binder.clearCallingIdentity();
-        try {
-            noteAcquireWifiLock(wifiLock);
-            switch(wifiLock.mMode) {
-            case WifiManager.WIFI_MODE_FULL:
-                ++mFullLocksAcquired;
-                break;
-            case WifiManager.WIFI_MODE_FULL_HIGH_PERF:
-                ++mFullHighPerfLocksAcquired;
-                break;
-
-            case WifiManager.WIFI_MODE_SCAN_ONLY:
-                ++mScanLocksAcquired;
-                break;
-            }
-            mWifiController.sendMessage(CMD_LOCKS_CHANGED);
-            return true;
-        } catch (RemoteException e) {
-            return false;
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
-    public void updateWifiLockWorkSource(IBinder lock, WorkSource ws) {
-        int uid = Binder.getCallingUid();
-        int pid = Binder.getCallingPid();
-        if (ws != null && ws.size() == 0) {
-            ws = null;
-        }
-        if (ws != null) {
-            enforceWakeSourcePermission(uid, pid);
-        }
-        long ident = Binder.clearCallingIdentity();
-        try {
-            synchronized (mLocks) {
-                int index = mLocks.findLockByBinder(lock);
-                if (index < 0) {
-                    throw new IllegalArgumentException("Wifi lock not active");
-                }
-                WifiLock wl = mLocks.mList.get(index);
-                noteReleaseWifiLock(wl);
-                wl.mWorkSource = ws != null ? new WorkSource(ws) : new WorkSource(uid);
-                noteAcquireWifiLock(wl);
-            }
-        } catch (RemoteException e) {
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
-    public boolean releaseWifiLock(IBinder lock) {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.WAKE_LOCK, null);
-        synchronized (mLocks) {
-            return releaseWifiLockLocked(lock);
-        }
-    }
-
-    private boolean releaseWifiLockLocked(IBinder lock) {
-        boolean hadLock;
-
-        WifiLock wifiLock = mLocks.removeLock(lock);
-
-        if (DBG) Slog.d(TAG, "releaseWifiLockLocked: " + wifiLock);
-
-        hadLock = (wifiLock != null);
-
-        long ident = Binder.clearCallingIdentity();
-        try {
-            if (hadLock) {
-                noteReleaseWifiLock(wifiLock);
-                switch(wifiLock.mMode) {
-                    case WifiManager.WIFI_MODE_FULL:
-                        ++mFullLocksReleased;
-                        break;
-                    case WifiManager.WIFI_MODE_FULL_HIGH_PERF:
-                        ++mFullHighPerfLocksReleased;
-                        break;
-                    case WifiManager.WIFI_MODE_SCAN_ONLY:
-                        ++mScanLocksReleased;
-                        break;
-                }
-                mWifiController.sendMessage(CMD_LOCKS_CHANGED);
-            }
-        } catch (RemoteException e) {
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-
-        return hadLock;
-    }
-
-    private abstract class DeathRecipient
-            implements IBinder.DeathRecipient {
-        String mTag;
-        int mMode;
-        IBinder mBinder;
-        WorkSource mWorkSource;
-
-        DeathRecipient(int mode, String tag, IBinder binder, WorkSource ws) {
-            super();
-            mTag = tag;
-            mMode = mode;
-            mBinder = binder;
-            mWorkSource = ws;
-            try {
-                mBinder.linkToDeath(this, 0);
-            } catch (RemoteException e) {
-                binderDied();
-            }
-        }
-
-        void unlinkDeathRecipient() {
-            mBinder.unlinkToDeath(this, 0);
-        }
-    }
-
-    private class Multicaster extends DeathRecipient {
-        Multicaster(String tag, IBinder binder) {
-            super(Binder.getCallingUid(), tag, binder, null);
-        }
-
-        public void binderDied() {
-            Slog.e(TAG, "Multicaster binderDied");
-            synchronized (mMulticasters) {
-                int i = mMulticasters.indexOf(this);
-                if (i != -1) {
-                    removeMulticasterLocked(i, mMode);
-                }
-            }
-        }
-
-        public String toString() {
-            return "Multicaster{" + mTag + " binder=" + mBinder + "}";
-        }
-
-        public int getUid() {
-            return mMode;
-        }
-    }
-
-    public void initializeMulticastFiltering() {
-        enforceMulticastChangePermission();
-
-        synchronized (mMulticasters) {
-            // if anybody had requested filters be off, leave off
-            if (mMulticasters.size() != 0) {
-                return;
-            } else {
-                mWifiStateMachine.startFilteringMulticastV4Packets();
-            }
-        }
-    }
-
-    public void acquireMulticastLock(IBinder binder, String tag) {
-        enforceMulticastChangePermission();
-
-        synchronized (mMulticasters) {
-            mMulticastEnabled++;
-            mMulticasters.add(new Multicaster(tag, binder));
-            // Note that we could call stopFilteringMulticastV4Packets only when
-            // our new size == 1 (first call), but this function won't
-            // be called often and by making the stopPacket call each
-            // time we're less fragile and self-healing.
-            mWifiStateMachine.stopFilteringMulticastV4Packets();
-        }
-
-        int uid = Binder.getCallingUid();
-        final long ident = Binder.clearCallingIdentity();
-        try {
-            mBatteryStats.noteWifiMulticastEnabled(uid);
-        } catch (RemoteException e) {
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
-    public void releaseMulticastLock() {
-        enforceMulticastChangePermission();
-
-        int uid = Binder.getCallingUid();
-        synchronized (mMulticasters) {
-            mMulticastDisabled++;
-            int size = mMulticasters.size();
-            for (int i = size - 1; i >= 0; i--) {
-                Multicaster m = mMulticasters.get(i);
-                if ((m != null) && (m.getUid() == uid)) {
-                    removeMulticasterLocked(i, uid);
-                }
-            }
-        }
-    }
-
-    private void removeMulticasterLocked(int i, int uid)
-    {
-        Multicaster removed = mMulticasters.remove(i);
-
-        if (removed != null) {
-            removed.unlinkDeathRecipient();
-        }
-        if (mMulticasters.size() == 0) {
-            mWifiStateMachine.startFilteringMulticastV4Packets();
-        }
-
-        final long ident = Binder.clearCallingIdentity();
-        try {
-            mBatteryStats.noteWifiMulticastDisabled(uid);
-        } catch (RemoteException e) {
-        } finally {
-            Binder.restoreCallingIdentity(ident);
-        }
-    }
-
-    public boolean isMulticastEnabled() {
-        enforceAccessPermission();
-
-        synchronized (mMulticasters) {
-            return (mMulticasters.size() > 0);
-        }
-    }
-}
diff --git a/services/core/java/com/android/server/wifi/WifiSettingsStore.java b/services/core/java/com/android/server/wifi/WifiSettingsStore.java
deleted file mode 100644
index 3ff8061..0000000
--- a/services/core/java/com/android/server/wifi/WifiSettingsStore.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2013 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.android.server.wifi;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.provider.Settings;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-/* Tracks persisted settings for Wi-Fi and airplane mode interaction */
-final class WifiSettingsStore {
-    /* Values tracked in Settings.Global.WIFI_ON */
-    private static final int WIFI_DISABLED                      = 0;
-    private static final int WIFI_ENABLED                       = 1;
-    /* Wifi enabled while in airplane mode */
-    private static final int WIFI_ENABLED_AIRPLANE_OVERRIDE     = 2;
-    /* Wifi disabled due to airplane mode on */
-    private static final int WIFI_DISABLED_AIRPLANE_ON          = 3;
-
-    /* Persisted state that tracks the wifi & airplane interaction from settings */
-    private int mPersistWifiState = WIFI_DISABLED;
-    /* Tracks current airplane mode state */
-    private boolean mAirplaneModeOn = false;
-
-    /* Tracks the setting of scan being available even when wi-fi is turned off
-     */
-    private boolean mScanAlwaysAvailable;
-
-    private final Context mContext;
-
-    /* Tracks if we have checked the saved wi-fi state after boot */
-    private boolean mCheckSavedStateAtBoot = false;
-
-    WifiSettingsStore(Context context) {
-        mContext = context;
-        mAirplaneModeOn = getPersistedAirplaneModeOn();
-        mPersistWifiState = getPersistedWifiState();
-        mScanAlwaysAvailable = getPersistedScanAlwaysAvailable();
-    }
-
-    synchronized boolean isWifiToggleEnabled() {
-        if (!mCheckSavedStateAtBoot) {
-            mCheckSavedStateAtBoot = true;
-            if (testAndClearWifiSavedState()) return true;
-        }
-
-        if (mAirplaneModeOn) {
-            return mPersistWifiState == WIFI_ENABLED_AIRPLANE_OVERRIDE;
-        } else {
-            return mPersistWifiState != WIFI_DISABLED;
-        }
-    }
-
-    /**
-     * Returns true if airplane mode is currently on.
-     * @return {@code true} if airplane mode is on.
-     */
-    synchronized boolean isAirplaneModeOn() {
-       return mAirplaneModeOn;
-    }
-
-    synchronized boolean isScanAlwaysAvailable() {
-        return mScanAlwaysAvailable;
-    }
-
-    synchronized boolean handleWifiToggled(boolean wifiEnabled) {
-        // Can Wi-Fi be toggled in airplane mode ?
-        if (mAirplaneModeOn && !isAirplaneToggleable()) {
-            return false;
-        }
-
-        if (wifiEnabled) {
-            if (mAirplaneModeOn) {
-                persistWifiState(WIFI_ENABLED_AIRPLANE_OVERRIDE);
-            } else {
-                persistWifiState(WIFI_ENABLED);
-            }
-        } else {
-            // When wifi state is disabled, we do not care
-            // if airplane mode is on or not. The scenario of
-            // wifi being disabled due to airplane mode being turned on
-            // is handled handleAirplaneModeToggled()
-            persistWifiState(WIFI_DISABLED);
-        }
-        return true;
-    }
-
-    synchronized boolean handleAirplaneModeToggled() {
-        // Is Wi-Fi sensitive to airplane mode changes ?
-        if (!isAirplaneSensitive()) {
-            return false;
-        }
-
-        mAirplaneModeOn = getPersistedAirplaneModeOn();
-        if (mAirplaneModeOn) {
-            // Wifi disabled due to airplane on
-            if (mPersistWifiState == WIFI_ENABLED) {
-                persistWifiState(WIFI_DISABLED_AIRPLANE_ON);
-            }
-        } else {
-            /* On airplane mode disable, restore wifi state if necessary */
-            if (testAndClearWifiSavedState() ||
-                    mPersistWifiState == WIFI_ENABLED_AIRPLANE_OVERRIDE) {
-                persistWifiState(WIFI_ENABLED);
-            }
-        }
-        return true;
-    }
-
-    synchronized void handleWifiScanAlwaysAvailableToggled() {
-        mScanAlwaysAvailable = getPersistedScanAlwaysAvailable();
-    }
-
-    void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println("mPersistWifiState " + mPersistWifiState);
-        pw.println("mAirplaneModeOn " + mAirplaneModeOn);
-    }
-
-    private void persistWifiState(int state) {
-        final ContentResolver cr = mContext.getContentResolver();
-        mPersistWifiState = state;
-        Settings.Global.putInt(cr, Settings.Global.WIFI_ON, state);
-    }
-
-    /* Does Wi-Fi need to be disabled when airplane mode is on ? */
-    private boolean isAirplaneSensitive() {
-        String airplaneModeRadios = Settings.Global.getString(mContext.getContentResolver(),
-                Settings.Global.AIRPLANE_MODE_RADIOS);
-        return airplaneModeRadios == null
-                || airplaneModeRadios.contains(Settings.Global.RADIO_WIFI);
-    }
-
-    /* Is Wi-Fi allowed to be re-enabled while airplane mode is on ? */
-    private boolean isAirplaneToggleable() {
-        String toggleableRadios = Settings.Global.getString(mContext.getContentResolver(),
-                Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
-        return toggleableRadios != null
-                && toggleableRadios.contains(Settings.Global.RADIO_WIFI);
-    }
-
-     /* After a reboot, we restore wi-fi to be on if it was turned off temporarily for tethering.
-      * The settings app tracks the saved state, but the framework has to check it at boot to
-      * make sure the wi-fi is turned on in case it was turned off for the purpose of tethering.
-      *
-      * Note that this is not part of the regular WIFI_ON setting because this only needs to
-      * be controlled through the settings app and not the Wi-Fi public API.
-      */
-    private boolean testAndClearWifiSavedState() {
-        final ContentResolver cr = mContext.getContentResolver();
-        int wifiSavedState = 0;
-        try {
-            wifiSavedState = Settings.Global.getInt(cr, Settings.Global.WIFI_SAVED_STATE);
-            if(wifiSavedState == 1)
-                Settings.Global.putInt(cr, Settings.Global.WIFI_SAVED_STATE, 0);
-        } catch (Settings.SettingNotFoundException e) {
-            ;
-        }
-        return (wifiSavedState == 1);
-    }
-
-    private int getPersistedWifiState() {
-        final ContentResolver cr = mContext.getContentResolver();
-        try {
-            return Settings.Global.getInt(cr, Settings.Global.WIFI_ON);
-        } catch (Settings.SettingNotFoundException e) {
-            Settings.Global.putInt(cr, Settings.Global.WIFI_ON, WIFI_DISABLED);
-            return WIFI_DISABLED;
-        }
-    }
-
-    private boolean getPersistedAirplaneModeOn() {
-        return Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.AIRPLANE_MODE_ON, 0) == 1;
-    }
-
-    private boolean getPersistedScanAlwaysAvailable() {
-        return Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.WIFI_SCAN_ALWAYS_AVAILABLE,
-                0) == 1;
-    }
-}
diff --git a/services/core/java/com/android/server/wifi/WifiTrafficPoller.java b/services/core/java/com/android/server/wifi/WifiTrafficPoller.java
deleted file mode 100644
index b498550..0000000
--- a/services/core/java/com/android/server/wifi/WifiTrafficPoller.java
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- * Copyright (C) 2013 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.android.server.wifi;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.NetworkInfo;
-import static android.net.NetworkInfo.DetailedState.CONNECTED;
-import android.net.TrafficStats;
-import android.net.wifi.WifiManager;
-import android.os.Messenger;
-import android.os.RemoteException;
-import android.util.Log;
-import android.os.Handler;
-import android.os.Message;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import com.android.internal.util.AsyncChannel;
-
-/* Polls for traffic stats and notifies the clients */
-final class WifiTrafficPoller {
-    /**
-     * Interval in milliseconds between polling for traffic
-     * statistics
-     */
-    private static final int POLL_TRAFFIC_STATS_INTERVAL_MSECS = 1000;
-
-    private static final int ENABLE_TRAFFIC_STATS_POLL  = 1;
-    private static final int TRAFFIC_STATS_POLL         = 2;
-    private static final int ADD_CLIENT                 = 3;
-    private static final int REMOVE_CLIENT              = 4;
-
-    private boolean mEnableTrafficStatsPoll = false;
-    private int mTrafficStatsPollToken = 0;
-    private long mTxPkts;
-    private long mRxPkts;
-    /* Tracks last reported data activity */
-    private int mDataActivity;
-
-    private final List<Messenger> mClients = new ArrayList<Messenger>();
-    // err on the side of updating at boot since screen on broadcast may be missed
-    // the first time
-    private AtomicBoolean mScreenOn = new AtomicBoolean(true);
-    private final TrafficHandler mTrafficHandler;
-    private NetworkInfo mNetworkInfo;
-    private final String mInterface;
-
-    WifiTrafficPoller(Context context, String iface) {
-        mInterface = iface;
-        mTrafficHandler = new TrafficHandler();
-
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        filter.addAction(Intent.ACTION_SCREEN_OFF);
-        filter.addAction(Intent.ACTION_SCREEN_ON);
-
-        context.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                        if (intent.getAction().equals(
-                                WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
-                            mNetworkInfo = (NetworkInfo) intent.getParcelableExtra(
-                                    WifiManager.EXTRA_NETWORK_INFO);
-                        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
-                            mScreenOn.set(false);
-                        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
-                            mScreenOn.set(true);
-                        }
-                        evaluateTrafficStatsPolling();
-                    }
-                }, filter);
-    }
-
-    void addClient(Messenger client) {
-        Message.obtain(mTrafficHandler, ADD_CLIENT, client).sendToTarget();
-    }
-
-    void removeClient(Messenger client) {
-        Message.obtain(mTrafficHandler, REMOVE_CLIENT, client).sendToTarget();
-    }
-
-
-    private class TrafficHandler extends Handler {
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case ENABLE_TRAFFIC_STATS_POLL:
-                    mEnableTrafficStatsPoll = (msg.arg1 == 1);
-                    mTrafficStatsPollToken++;
-                    if (mEnableTrafficStatsPoll) {
-                        notifyOnDataActivity();
-                        sendMessageDelayed(Message.obtain(this, TRAFFIC_STATS_POLL,
-                                mTrafficStatsPollToken, 0), POLL_TRAFFIC_STATS_INTERVAL_MSECS);
-                    }
-                    break;
-                case TRAFFIC_STATS_POLL:
-                    if (msg.arg1 == mTrafficStatsPollToken) {
-                        notifyOnDataActivity();
-                        sendMessageDelayed(Message.obtain(this, TRAFFIC_STATS_POLL,
-                                mTrafficStatsPollToken, 0), POLL_TRAFFIC_STATS_INTERVAL_MSECS);
-                    }
-                    break;
-                case ADD_CLIENT:
-                    mClients.add((Messenger) msg.obj);
-                    break;
-                case REMOVE_CLIENT:
-                    mClients.remove(msg.obj);
-                    break;
-            }
-
-        }
-    }
-
-    private void evaluateTrafficStatsPolling() {
-        Message msg;
-        if (mNetworkInfo == null) return;
-        if (mNetworkInfo.getDetailedState() == CONNECTED && mScreenOn.get()) {
-            msg = Message.obtain(mTrafficHandler,
-                    ENABLE_TRAFFIC_STATS_POLL, 1, 0);
-        } else {
-            msg = Message.obtain(mTrafficHandler,
-                    ENABLE_TRAFFIC_STATS_POLL, 0, 0);
-        }
-        msg.sendToTarget();
-    }
-
-    private void notifyOnDataActivity() {
-        long sent, received;
-        long preTxPkts = mTxPkts, preRxPkts = mRxPkts;
-        int dataActivity = WifiManager.DATA_ACTIVITY_NONE;
-
-        mTxPkts = TrafficStats.getTxPackets(mInterface);
-        mRxPkts = TrafficStats.getRxPackets(mInterface);
-
-        if (preTxPkts > 0 || preRxPkts > 0) {
-            sent = mTxPkts - preTxPkts;
-            received = mRxPkts - preRxPkts;
-            if (sent > 0) {
-                dataActivity |= WifiManager.DATA_ACTIVITY_OUT;
-            }
-            if (received > 0) {
-                dataActivity |= WifiManager.DATA_ACTIVITY_IN;
-            }
-
-            if (dataActivity != mDataActivity && mScreenOn.get()) {
-                mDataActivity = dataActivity;
-                for (Messenger client : mClients) {
-                    Message msg = Message.obtain();
-                    msg.what = WifiManager.DATA_ACTIVITY_NOTIFICATION;
-                    msg.arg1 = mDataActivity;
-                    try {
-                        client.send(msg);
-                    } catch (RemoteException e) {
-                        // Failed to reach, skip
-                        // Client removal is handled in WifiService
-                    }
-                }
-            }
-        }
-    }
-
-    void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println("mEnableTrafficStatsPoll " + mEnableTrafficStatsPoll);
-        pw.println("mTrafficStatsPollToken " + mTrafficStatsPollToken);
-        pw.println("mTxPkts " + mTxPkts);
-        pw.println("mRxPkts " + mRxPkts);
-        pw.println("mDataActivity " + mDataActivity);
-    }
-
-}
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
new file mode 100644
index 0000000..35b7f99
--- /dev/null
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -0,0 +1,1173 @@
+/*
+ * Copyright (C) 2014 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.android.server.wm;
+
+import android.animation.ObjectAnimator;
+import android.animation.ValueAnimator;
+import android.app.Service;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Matrix;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.PixelFormat;
+import android.graphics.Point;
+import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
+import android.graphics.RectF;
+import android.graphics.Region;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.Looper;
+import android.os.Message;
+import android.util.ArraySet;
+import android.util.Log;
+import android.util.Slog;
+import android.util.SparseArray;
+import android.util.TypedValue;
+import android.view.MagnificationSpec;
+import android.view.Surface;
+import android.view.Surface.OutOfResourcesException;
+import android.view.SurfaceControl;
+import android.view.WindowInfo;
+import android.view.WindowManager;
+import android.view.WindowManagerInternal.MagnificationCallbacks;
+import android.view.WindowManagerInternal.WindowsForAccessibilityCallback;
+import android.view.WindowManagerPolicy;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+
+import com.android.internal.R;
+import com.android.internal.os.SomeArgs;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * This class contains the accessibility related logic of the window manger.
+ */
+final class AccessibilityController {
+
+    private final WindowManagerService mWindowManagerService;
+
+    private static final float[] sTempFloats = new float[9];
+
+    public AccessibilityController(WindowManagerService service) {
+        mWindowManagerService = service;
+    }
+
+    private DisplayMagnifier mDisplayMagnifier;
+
+    private WindowsForAccessibilityObserver mWindowsForAccessibilityObserver;
+
+    public void setMagnificationCallbacksLocked(MagnificationCallbacks callbacks) {
+        if (callbacks != null) {
+            if (mDisplayMagnifier != null) {
+                throw new IllegalStateException("Magnification callbacks already set!");
+            }
+            mDisplayMagnifier = new DisplayMagnifier(mWindowManagerService, callbacks);
+        } else {
+            if  (mDisplayMagnifier == null) {
+                throw new IllegalStateException("Magnification callbacks already cleared!");
+            }
+            mDisplayMagnifier.destroyLocked();
+            mDisplayMagnifier = null;
+        }
+    }
+
+    public void setWindowsForAccessibilityCallback(WindowsForAccessibilityCallback callback) {
+        if (callback != null) {
+            if (mWindowsForAccessibilityObserver != null) {
+                throw new IllegalStateException(
+                        "Windows for accessibility callback already set!");
+            }
+            mWindowsForAccessibilityObserver = new WindowsForAccessibilityObserver(
+                    mWindowManagerService, callback);
+        } else {
+            if (mWindowsForAccessibilityObserver == null) {
+                throw new IllegalStateException(
+                        "Windows for accessibility callback already cleared!");
+            }
+            mWindowsForAccessibilityObserver = null;
+        }
+    }
+
+    public void setMagnificationSpecLocked(MagnificationSpec spec) {
+        if (mDisplayMagnifier != null) {
+            mDisplayMagnifier.setMagnificationSpecLocked(spec);
+        }
+        if (mWindowsForAccessibilityObserver != null) {
+            mWindowsForAccessibilityObserver.computeChangedWindows();
+        }
+    }
+
+    public void onRectangleOnScreenRequestedLocked(Rect rectangle, boolean immediate) {
+        if (mDisplayMagnifier != null) {
+            mDisplayMagnifier.onRectangleOnScreenRequestedLocked(rectangle, immediate);
+        }
+        // Not relevant for the window observer.
+    }
+
+    public void onWindowLayersChangedLocked() {
+        if (mDisplayMagnifier != null) {
+            mDisplayMagnifier.onWindowLayersChangedLocked();
+        }
+        if (mWindowsForAccessibilityObserver != null) {
+            mWindowsForAccessibilityObserver.computeChangedWindows();
+        }
+    }
+
+    public void onRotationChangedLocked(DisplayContent displayContent, int rotation) {
+        if (mDisplayMagnifier != null) {
+            mDisplayMagnifier.onRotationChangedLocked(displayContent, rotation);
+        }
+        if (mWindowsForAccessibilityObserver != null) {
+            mWindowsForAccessibilityObserver.computeChangedWindows();
+        }
+    }
+
+    public void onAppWindowTransitionLocked(WindowState windowState, int transition) {
+        if (mDisplayMagnifier != null) {
+            mDisplayMagnifier.onAppWindowTransitionLocked(windowState, transition);
+        }
+        // Not relevant for the window observer.
+    }
+
+    public void onWindowTransitionLocked(WindowState windowState, int transition) {
+        if (mDisplayMagnifier != null) {
+            mDisplayMagnifier.onWindowTransitionLocked(windowState, transition);
+        }
+        if (mWindowsForAccessibilityObserver != null) {
+            mWindowsForAccessibilityObserver.computeChangedWindows();
+        }
+    }
+
+    public void onWindowFocusChangedLocked() {
+        // Not relevant for the display magnifier.
+
+        if (mWindowsForAccessibilityObserver != null) {
+            mWindowsForAccessibilityObserver.computeChangedWindows();
+        }
+    }
+
+    /** NOTE: This has to be called within a surface transaction. */
+    public void drawMagnifiedRegionBorderIfNeededLocked() {
+        if (mDisplayMagnifier != null) {
+            mDisplayMagnifier.drawMagnifiedRegionBorderIfNeededLocked();
+        }
+        // Not relevant for the window observer.
+    }
+
+    public MagnificationSpec getMagnificationSpecForWindowLocked(WindowState windowState) {
+        if (mDisplayMagnifier != null) {
+            return mDisplayMagnifier.getMagnificationSpecForWindowLocked(windowState);
+        }
+        return null;
+    }
+
+    public boolean hasCallbacksLocked() {
+        return (mDisplayMagnifier != null
+                || mWindowsForAccessibilityObserver != null);
+    }
+
+    private static void populateTransformationMatrixLocked(WindowState windowState,
+            Matrix outMatrix) {
+        sTempFloats[Matrix.MSCALE_X] = windowState.mWinAnimator.mDsDx;
+        sTempFloats[Matrix.MSKEW_Y] = windowState.mWinAnimator.mDtDx;
+        sTempFloats[Matrix.MSKEW_X] = windowState.mWinAnimator.mDsDy;
+        sTempFloats[Matrix.MSCALE_Y] = windowState.mWinAnimator.mDtDy;
+        sTempFloats[Matrix.MTRANS_X] = windowState.mShownFrame.left;
+        sTempFloats[Matrix.MTRANS_Y] = windowState.mShownFrame.top;
+        sTempFloats[Matrix.MPERSP_0] = 0;
+        sTempFloats[Matrix.MPERSP_1] = 0;
+        sTempFloats[Matrix.MPERSP_2] = 1;
+        outMatrix.setValues(sTempFloats);
+    }
+
+    /**
+     * This class encapsulates the functionality related to display magnification.
+     */
+    private static final class DisplayMagnifier {
+
+        private static final String LOG_TAG = "DisplayMagnifier";
+
+        private static final boolean DEBUG_WINDOW_TRANSITIONS = false;
+        private static final boolean DEBUG_ROTATION = false;
+        private static final boolean DEBUG_LAYERS = false;
+        private static final boolean DEBUG_RECTANGLE_REQUESTED = false;
+        private static final boolean DEBUG_VIEWPORT_WINDOW = false;
+
+        private final Rect mTempRect1 = new Rect();
+        private final Rect mTempRect2 = new Rect();
+
+        private final Region mTempRegion1 = new Region();
+        private final Region mTempRegion2 = new Region();
+        private final Region mTempRegion3 = new Region();
+        private final Region mTempRegion4 = new Region();
+
+        private final Context mContext;
+        private final WindowManagerService mWindowManagerService;
+        private final MagnifiedViewport mMagnifedViewport;
+        private final Handler mHandler;
+
+        private final MagnificationCallbacks mCallbacks;
+
+        private final long mLongAnimationDuration;
+
+        public DisplayMagnifier(WindowManagerService windowManagerService,
+                MagnificationCallbacks callbacks) {
+            mContext = windowManagerService.mContext;
+            mWindowManagerService = windowManagerService;
+            mCallbacks = callbacks;
+            mHandler = new MyHandler(mWindowManagerService.mH.getLooper());
+            mMagnifedViewport = new MagnifiedViewport();
+            mLongAnimationDuration = mContext.getResources().getInteger(
+                    com.android.internal.R.integer.config_longAnimTime);
+        }
+
+        public void setMagnificationSpecLocked(MagnificationSpec spec) {
+            mMagnifedViewport.updateMagnificationSpecLocked(spec);
+            mMagnifedViewport.recomputeBoundsLocked();
+            mWindowManagerService.scheduleAnimationLocked();
+        }
+
+        public void onRectangleOnScreenRequestedLocked(Rect rectangle, boolean immediate) {
+            if (DEBUG_RECTANGLE_REQUESTED) {
+                Slog.i(LOG_TAG, "Rectangle on screen requested: " + rectangle);
+            }
+            if (!mMagnifedViewport.isMagnifyingLocked()) {
+                return;
+            }
+            Rect magnifiedRegionBounds = mTempRect2;
+            mMagnifedViewport.getMagnifiedFrameInContentCoordsLocked(magnifiedRegionBounds);
+            if (magnifiedRegionBounds.contains(rectangle)) {
+                return;
+            }
+            SomeArgs args = SomeArgs.obtain();
+            args.argi1 = rectangle.left;
+            args.argi2 = rectangle.top;
+            args.argi3 = rectangle.right;
+            args.argi4 = rectangle.bottom;
+            mHandler.obtainMessage(MyHandler.MESSAGE_NOTIFY_RECTANGLE_ON_SCREEN_REQUESTED,
+                    args).sendToTarget();
+        }
+
+        public void onWindowLayersChangedLocked() {
+            if (DEBUG_LAYERS) {
+                Slog.i(LOG_TAG, "Layers changed.");
+            }
+            mMagnifedViewport.recomputeBoundsLocked();
+            mWindowManagerService.scheduleAnimationLocked();
+        }
+
+        public void onRotationChangedLocked(DisplayContent displayContent, int rotation) {
+            if (DEBUG_ROTATION) {
+                Slog.i(LOG_TAG, "Rotaton: " + Surface.rotationToString(rotation)
+                        + " displayId: " + displayContent.getDisplayId());
+            }
+            mMagnifedViewport.onRotationChangedLocked();
+            mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_ROTATION_CHANGED);
+        }
+
+        public void onAppWindowTransitionLocked(WindowState windowState, int transition) {
+            if (DEBUG_WINDOW_TRANSITIONS) {
+                Slog.i(LOG_TAG, "Window transition: "
+                        + AppTransition.appTransitionToString(transition)
+                        + " displayId: " + windowState.getDisplayId());
+            }
+            final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
+            if (magnifying) {
+                switch (transition) {
+                    case AppTransition.TRANSIT_ACTIVITY_OPEN:
+                    case AppTransition.TRANSIT_TASK_OPEN:
+                    case AppTransition.TRANSIT_TASK_TO_FRONT:
+                    case AppTransition.TRANSIT_WALLPAPER_OPEN:
+                    case AppTransition.TRANSIT_WALLPAPER_CLOSE:
+                    case AppTransition.TRANSIT_WALLPAPER_INTRA_OPEN: {
+                        mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_USER_CONTEXT_CHANGED);
+                    }
+                }
+            }
+        }
+
+        public void onWindowTransitionLocked(WindowState windowState, int transition) {
+            if (DEBUG_WINDOW_TRANSITIONS) {
+                Slog.i(LOG_TAG, "Window transition: "
+                        + AppTransition.appTransitionToString(transition)
+                        + " displayId: " + windowState.getDisplayId());
+            }
+            final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
+            final int type = windowState.mAttrs.type;
+            switch (transition) {
+                case WindowManagerPolicy.TRANSIT_ENTER:
+                case WindowManagerPolicy.TRANSIT_SHOW: {
+                    if (!magnifying) {
+                        break;
+                    }
+                    switch (type) {
+                        case WindowManager.LayoutParams.TYPE_APPLICATION:
+                        case WindowManager.LayoutParams.TYPE_APPLICATION_PANEL:
+                        case WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA:
+                        case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
+                        case WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG:
+                        case WindowManager.LayoutParams.TYPE_SEARCH_BAR:
+                        case WindowManager.LayoutParams.TYPE_PHONE:
+                        case WindowManager.LayoutParams.TYPE_SYSTEM_ALERT:
+                        case WindowManager.LayoutParams.TYPE_TOAST:
+                        case WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY:
+                        case WindowManager.LayoutParams.TYPE_PRIORITY_PHONE:
+                        case WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG:
+                        case WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG:
+                        case WindowManager.LayoutParams.TYPE_SYSTEM_ERROR:
+                        case WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY:
+                        case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL:
+                        case WindowManager.LayoutParams.TYPE_RECENTS_OVERLAY: {
+                            Rect magnifiedRegionBounds = mTempRect2;
+                            mMagnifedViewport.getMagnifiedFrameInContentCoordsLocked(
+                                    magnifiedRegionBounds);
+                            Rect touchableRegionBounds = mTempRect1;
+                            windowState.getTouchableRegion(mTempRegion1);
+                            mTempRegion1.getBounds(touchableRegionBounds);
+                            if (!magnifiedRegionBounds.intersect(touchableRegionBounds)) {
+                                mCallbacks.onRectangleOnScreenRequested(
+                                        touchableRegionBounds.left,
+                                        touchableRegionBounds.top,
+                                        touchableRegionBounds.right,
+                                        touchableRegionBounds.bottom);
+                            }
+                        } break;
+                    } break;
+                }
+            }
+        }
+
+        public MagnificationSpec getMagnificationSpecForWindowLocked(WindowState windowState) {
+            MagnificationSpec spec = mMagnifedViewport.getMagnificationSpecLocked();
+            if (spec != null && !spec.isNop()) {
+                WindowManagerPolicy policy = mWindowManagerService.mPolicy;
+                final int windowType = windowState.mAttrs.type;
+                if (!policy.isTopLevelWindow(windowType) && windowState.mAttachedWindow != null
+                        && !policy.canMagnifyWindow(windowType)) {
+                    return null;
+                }
+                if (!policy.canMagnifyWindow(windowState.mAttrs.type)) {
+                    return null;
+                }
+            }
+            return spec;
+        }
+
+        public void destroyLocked() {
+            mMagnifedViewport.destroyWindow();
+        }
+
+        /** NOTE: This has to be called within a surface transaction. */
+        public void drawMagnifiedRegionBorderIfNeededLocked() {
+            mMagnifedViewport.drawWindowIfNeededLocked();
+        }
+
+        private final class MagnifiedViewport {
+
+            private static final int DEFAUTLT_BORDER_WIDTH_DIP = 5;
+
+            private final SparseArray<WindowState> mTempWindowStates =
+                    new SparseArray<WindowState>();
+
+            private final RectF mTempRectF = new RectF();
+
+            private final Point mTempPoint = new Point();
+
+            private final Matrix mTempMatrix = new Matrix();
+
+            private final Region mMagnifiedBounds = new Region();
+            private final Region mOldMagnifiedBounds = new Region();
+
+            private final MagnificationSpec mMagnificationSpec = MagnificationSpec.obtain();
+
+            private final WindowManager mWindowManager;
+
+            private final int mBorderWidth;
+            private final int mHalfBorderWidth;
+
+            private final ViewportWindow mWindow;
+
+            private boolean mFullRedrawNeeded;
+
+            public MagnifiedViewport() {
+                mWindowManager = (WindowManager) mContext.getSystemService(Service.WINDOW_SERVICE);
+                mBorderWidth = (int) TypedValue.applyDimension(
+                        TypedValue.COMPLEX_UNIT_DIP, DEFAUTLT_BORDER_WIDTH_DIP,
+                                mContext.getResources().getDisplayMetrics());
+                mHalfBorderWidth = (int) (mBorderWidth + 0.5) / 2;
+                mWindow = new ViewportWindow(mContext);
+                recomputeBoundsLocked();
+            }
+
+            public void updateMagnificationSpecLocked(MagnificationSpec spec) {
+                if (spec != null) {
+                    mMagnificationSpec.initialize(spec.scale, spec.offsetX, spec.offsetY);
+                } else {
+                    mMagnificationSpec.clear();
+                }
+                // If this message is pending we are in a rotation animation and do not want
+                // to show the border. We will do so when the pending message is handled.
+                if (!mHandler.hasMessages(MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED)) {
+                    setMagnifiedRegionBorderShownLocked(isMagnifyingLocked(), true);
+                }
+            }
+
+            public void recomputeBoundsLocked() {
+                mWindowManager.getDefaultDisplay().getRealSize(mTempPoint);
+                final int screenWidth = mTempPoint.x;
+                final int screenHeight = mTempPoint.y;
+
+                Region magnifiedBounds = mMagnifiedBounds;
+                magnifiedBounds.set(0, 0, 0, 0);
+
+                Region availableBounds = mTempRegion1;
+                availableBounds.set(0, 0, screenWidth, screenHeight);
+
+                Region nonMagnifiedBounds = mTempRegion4;
+                nonMagnifiedBounds.set(0,  0,  0,  0);
+
+                SparseArray<WindowState> visibleWindows = mTempWindowStates;
+                visibleWindows.clear();
+                populateWindowsOnScreenLocked(visibleWindows);
+
+                final int visibleWindowCount = visibleWindows.size();
+                for (int i = visibleWindowCount - 1; i >= 0; i--) {
+                    WindowState windowState = visibleWindows.valueAt(i);
+                    if (windowState.mAttrs.type == WindowManager
+                            .LayoutParams.TYPE_MAGNIFICATION_OVERLAY) {
+                        continue;
+                    }
+
+                    Region windowBounds = mTempRegion2;
+                    Matrix matrix = mTempMatrix;
+                    populateTransformationMatrixLocked(windowState, matrix);
+                    RectF windowFrame = mTempRectF;
+
+                    if (mWindowManagerService.mPolicy.canMagnifyWindow(windowState.mAttrs.type)) {
+                        windowFrame.set(windowState.mFrame);
+                        windowFrame.offset(-windowFrame.left, -windowFrame.top);
+                        matrix.mapRect(windowFrame);
+                        windowBounds.set((int) windowFrame.left, (int) windowFrame.top,
+                                (int) windowFrame.right, (int) windowFrame.bottom);
+                        magnifiedBounds.op(windowBounds, Region.Op.UNION);
+                        magnifiedBounds.op(availableBounds, Region.Op.INTERSECT);
+                    } else {
+                        Region touchableRegion = mTempRegion3;
+                        windowState.getTouchableRegion(touchableRegion);
+                        Rect touchableFrame = mTempRect1;
+                        touchableRegion.getBounds(touchableFrame);
+                        windowFrame.set(touchableFrame);
+                        windowFrame.offset(-windowState.mFrame.left, -windowState.mFrame.top);
+                        matrix.mapRect(windowFrame);
+                        windowBounds.set((int) windowFrame.left, (int) windowFrame.top,
+                                (int) windowFrame.right, (int) windowFrame.bottom);
+                        nonMagnifiedBounds.op(windowBounds, Region.Op.UNION);
+                        windowBounds.op(magnifiedBounds, Region.Op.DIFFERENCE);
+                        availableBounds.op(windowBounds, Region.Op.DIFFERENCE);
+                    }
+
+                    Region accountedBounds = mTempRegion2;
+                    accountedBounds.set(magnifiedBounds);
+                    accountedBounds.op(nonMagnifiedBounds, Region.Op.UNION);
+                    accountedBounds.op(0, 0, screenWidth, screenHeight, Region.Op.INTERSECT);
+
+                    if (accountedBounds.isRect()) {
+                        Rect accountedFrame = mTempRect1;
+                        accountedBounds.getBounds(accountedFrame);
+                        if (accountedFrame.width() == screenWidth
+                                && accountedFrame.height() == screenHeight) {
+                            break;
+                        }
+                    }
+                }
+
+                visibleWindows.clear();
+
+                magnifiedBounds.op(mHalfBorderWidth, mHalfBorderWidth,
+                        screenWidth - mHalfBorderWidth, screenHeight - mHalfBorderWidth,
+                        Region.Op.INTERSECT);
+
+                if (!mOldMagnifiedBounds.equals(magnifiedBounds)) {
+                    Region bounds = Region.obtain();
+                    bounds.set(magnifiedBounds);
+                    mHandler.obtainMessage(MyHandler.MESSAGE_NOTIFY_MAGNIFIED_BOUNDS_CHANGED,
+                            bounds).sendToTarget();
+
+                    mWindow.setBounds(magnifiedBounds);
+                    Rect dirtyRect = mTempRect1;
+                    if (mFullRedrawNeeded) {
+                        mFullRedrawNeeded = false;
+                        dirtyRect.set(mHalfBorderWidth, mHalfBorderWidth,
+                                screenWidth - mHalfBorderWidth, screenHeight - mHalfBorderWidth);
+                        mWindow.invalidate(dirtyRect);
+                    } else {
+                        Region dirtyRegion = mTempRegion3;
+                        dirtyRegion.set(magnifiedBounds);
+                        dirtyRegion.op(mOldMagnifiedBounds, Region.Op.UNION);
+                        dirtyRegion.op(nonMagnifiedBounds, Region.Op.INTERSECT);
+                        dirtyRegion.getBounds(dirtyRect);
+                        mWindow.invalidate(dirtyRect);
+                    }
+
+                    mOldMagnifiedBounds.set(magnifiedBounds);
+                }
+            }
+
+            public void onRotationChangedLocked() {
+                // If we are magnifying, hide the magnified border window immediately so
+                // the user does not see strange artifacts during rotation. The screenshot
+                // used for rotation has already the border. After the rotation is complete
+                // we will show the border.
+                if (isMagnifyingLocked()) {
+                    setMagnifiedRegionBorderShownLocked(false, false);
+                    final long delay = (long) (mLongAnimationDuration
+                            * mWindowManagerService.mWindowAnimationScale);
+                    Message message = mHandler.obtainMessage(
+                            MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED);
+                    mHandler.sendMessageDelayed(message, delay);
+                }
+                recomputeBoundsLocked();
+                mWindow.updateSize();
+            }
+
+            public void setMagnifiedRegionBorderShownLocked(boolean shown, boolean animate) {
+                if (shown) {
+                    mFullRedrawNeeded = true;
+                    mOldMagnifiedBounds.set(0,  0,  0,  0);
+                }
+                mWindow.setShown(shown, animate);
+            }
+
+            public void getMagnifiedFrameInContentCoordsLocked(Rect rect) {
+                MagnificationSpec spec = mMagnificationSpec;
+                mMagnifiedBounds.getBounds(rect);
+                rect.offset((int) -spec.offsetX, (int) -spec.offsetY);
+                rect.scale(1.0f / spec.scale);
+            }
+
+            public boolean isMagnifyingLocked() {
+                return mMagnificationSpec.scale > 1.0f;
+            }
+
+            public MagnificationSpec getMagnificationSpecLocked() {
+                return mMagnificationSpec;
+            }
+
+            /** NOTE: This has to be called within a surface transaction. */
+            public void drawWindowIfNeededLocked() {
+                recomputeBoundsLocked();
+                mWindow.drawIfNeeded();
+            }
+
+            public void destroyWindow() {
+                mWindow.releaseSurface();
+            }
+
+            private void populateWindowsOnScreenLocked(SparseArray<WindowState> outWindows) {
+                DisplayContent displayContent = mWindowManagerService
+                        .getDefaultDisplayContentLocked();
+                WindowList windowList = displayContent.getWindowList();
+                final int windowCount = windowList.size();
+                for (int i = 0; i < windowCount; i++) {
+                    WindowState windowState = windowList.get(i);
+                    if ((windowState.isOnScreen() || windowState.mAttrs.type == WindowManager
+                            .LayoutParams.TYPE_UNIVERSE_BACKGROUND)
+                            && !windowState.mWinAnimator.mEnterAnimationPending) {
+                        outWindows.put(windowState.mLayer, windowState);
+                    }
+                }
+            }
+
+            private final class ViewportWindow {
+                private static final String SURFACE_TITLE = "Magnification Overlay";
+
+                private static final String PROPERTY_NAME_ALPHA = "alpha";
+
+                private static final int MIN_ALPHA = 0;
+                private static final int MAX_ALPHA = 255;
+
+                private final Region mBounds = new Region();
+                private final Rect mDirtyRect = new Rect();
+                private final Paint mPaint = new Paint();
+
+                private final ValueAnimator mShowHideFrameAnimator;
+                private final SurfaceControl mSurfaceControl;
+                private final Surface mSurface = new Surface();
+
+                private boolean mShown;
+                private int mAlpha;
+
+                private boolean mInvalidated;
+
+                public ViewportWindow(Context context) {
+                    SurfaceControl surfaceControl = null;
+                    try {
+                        mWindowManager.getDefaultDisplay().getRealSize(mTempPoint);
+                        surfaceControl = new SurfaceControl(mWindowManagerService.mFxSession,
+                                SURFACE_TITLE, mTempPoint.x, mTempPoint.y, PixelFormat.TRANSLUCENT,
+                                SurfaceControl.HIDDEN);
+                    } catch (OutOfResourcesException oore) {
+                        /* ignore */
+                    }
+                    mSurfaceControl = surfaceControl;
+                    mSurfaceControl.setLayerStack(mWindowManager.getDefaultDisplay()
+                            .getLayerStack());
+                    mSurfaceControl.setLayer(mWindowManagerService.mPolicy.windowTypeToLayerLw(
+                            WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY)
+                            * WindowManagerService.TYPE_LAYER_MULTIPLIER);
+                    mSurfaceControl.setPosition(0, 0);
+                    mSurface.copyFrom(mSurfaceControl);
+
+                    TypedValue typedValue = new TypedValue();
+                    context.getTheme().resolveAttribute(R.attr.colorActivatedHighlight,
+                            typedValue, true);
+                    final int borderColor = context.getResources().getColor(typedValue.resourceId);
+
+                    mPaint.setStyle(Paint.Style.STROKE);
+                    mPaint.setStrokeWidth(mBorderWidth);
+                    mPaint.setColor(borderColor);
+
+                    Interpolator interpolator = new DecelerateInterpolator(2.5f);
+                    final long longAnimationDuration = context.getResources().getInteger(
+                            com.android.internal.R.integer.config_longAnimTime);
+
+                    mShowHideFrameAnimator = ObjectAnimator.ofInt(this, PROPERTY_NAME_ALPHA,
+                            MIN_ALPHA, MAX_ALPHA);
+                    mShowHideFrameAnimator.setInterpolator(interpolator);
+                    mShowHideFrameAnimator.setDuration(longAnimationDuration);
+                    mInvalidated = true;
+                }
+
+                public void setShown(boolean shown, boolean animate) {
+                    synchronized (mWindowManagerService.mWindowMap) {
+                        if (mShown == shown) {
+                            return;
+                        }
+                        mShown = shown;
+                        if (animate) {
+                            if (mShowHideFrameAnimator.isRunning()) {
+                                mShowHideFrameAnimator.reverse();
+                            } else {
+                                if (shown) {
+                                    mShowHideFrameAnimator.start();
+                                } else {
+                                    mShowHideFrameAnimator.reverse();
+                                }
+                            }
+                        } else {
+                            mShowHideFrameAnimator.cancel();
+                            if (shown) {
+                                setAlpha(MAX_ALPHA);
+                            } else {
+                                setAlpha(MIN_ALPHA);
+                            }
+                        }
+                        if (DEBUG_VIEWPORT_WINDOW) {
+                            Slog.i(LOG_TAG, "ViewportWindow shown: " + mShown);
+                        }
+                    }
+                }
+
+                @SuppressWarnings("unused")
+                // Called reflectively from an animator.
+                public int getAlpha() {
+                    synchronized (mWindowManagerService.mWindowMap) {
+                        return mAlpha;
+                    }
+                }
+
+                public void setAlpha(int alpha) {
+                    synchronized (mWindowManagerService.mWindowMap) {
+                        if (mAlpha == alpha) {
+                            return;
+                        }
+                        mAlpha = alpha;
+                        invalidate(null);
+                        if (DEBUG_VIEWPORT_WINDOW) {
+                            Slog.i(LOG_TAG, "ViewportWindow set alpha: " + alpha);
+                        }
+                    }
+                }
+
+                public void setBounds(Region bounds) {
+                    synchronized (mWindowManagerService.mWindowMap) {
+                        if (mBounds.equals(bounds)) {
+                            return;
+                        }
+                        mBounds.set(bounds);
+                        invalidate(mDirtyRect);
+                        if (DEBUG_VIEWPORT_WINDOW) {
+                            Slog.i(LOG_TAG, "ViewportWindow set bounds: " + bounds);
+                        }
+                    }
+                }
+
+                public void updateSize() {
+                    synchronized (mWindowManagerService.mWindowMap) {
+                        mWindowManager.getDefaultDisplay().getRealSize(mTempPoint);
+                        mSurfaceControl.setSize(mTempPoint.x, mTempPoint.y);
+                        invalidate(mDirtyRect);
+                    }
+                }
+
+                public void invalidate(Rect dirtyRect) {
+                    if (dirtyRect != null) {
+                        mDirtyRect.set(dirtyRect);
+                    } else {
+                        mDirtyRect.setEmpty();
+                    }
+                    mInvalidated = true;
+                    mWindowManagerService.scheduleAnimationLocked();
+                }
+
+                /** NOTE: This has to be called within a surface transaction. */
+                public void drawIfNeeded() {
+                    synchronized (mWindowManagerService.mWindowMap) {
+                        if (!mInvalidated) {
+                            return;
+                        }
+                        mInvalidated = false;
+                        Canvas canvas = null;
+                        try {
+                            // Empty dirty rectangle means unspecified.
+                            if (mDirtyRect.isEmpty()) {
+                                mBounds.getBounds(mDirtyRect);
+                            }
+                            mDirtyRect.inset(- mHalfBorderWidth, - mHalfBorderWidth);
+                            canvas = mSurface.lockCanvas(mDirtyRect);
+                            if (DEBUG_VIEWPORT_WINDOW) {
+                                Slog.i(LOG_TAG, "Dirty rect: " + mDirtyRect);
+                            }
+                        } catch (IllegalArgumentException iae) {
+                            /* ignore */
+                        } catch (Surface.OutOfResourcesException oore) {
+                            /* ignore */
+                        }
+                        if (canvas == null) {
+                            return;
+                        }
+                        if (DEBUG_VIEWPORT_WINDOW) {
+                            Slog.i(LOG_TAG, "Bounds: " + mBounds);
+                        }
+                        canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
+                        mPaint.setAlpha(mAlpha);
+                        Path path = mBounds.getBoundaryPath();
+                        canvas.drawPath(path, mPaint);
+
+                        mSurface.unlockCanvasAndPost(canvas);
+
+                        if (mAlpha > 0) {
+                            mSurfaceControl.show();
+                        } else {
+                            mSurfaceControl.hide();
+                        }
+                    }
+                }
+
+                public void releaseSurface() {
+                    mSurfaceControl.release();
+                    mSurface.release();
+                }
+            }
+        }
+
+        private class MyHandler extends Handler {
+            public static final int MESSAGE_NOTIFY_MAGNIFIED_BOUNDS_CHANGED = 1;
+            public static final int MESSAGE_NOTIFY_RECTANGLE_ON_SCREEN_REQUESTED = 2;
+            public static final int MESSAGE_NOTIFY_USER_CONTEXT_CHANGED = 3;
+            public static final int MESSAGE_NOTIFY_ROTATION_CHANGED = 4;
+            public static final int MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED = 5;
+
+            public MyHandler(Looper looper) {
+                super(looper);
+            }
+
+            @Override
+            public void handleMessage(Message message) {
+                switch (message.what) {
+                    case MESSAGE_NOTIFY_MAGNIFIED_BOUNDS_CHANGED: {
+                        Region bounds = (Region) message.obj;
+                        mCallbacks.onMagnifedBoundsChanged(bounds);
+                        bounds.recycle();
+                    } break;
+
+                    case MESSAGE_NOTIFY_RECTANGLE_ON_SCREEN_REQUESTED: {
+                        SomeArgs args = (SomeArgs) message.obj;
+                        final int left = args.argi1;
+                        final int top = args.argi2;
+                        final int right = args.argi3;
+                        final int bottom = args.argi4;
+                        mCallbacks.onRectangleOnScreenRequested(left, top, right, bottom);
+                        args.recycle();
+                    } break;
+
+                    case MESSAGE_NOTIFY_USER_CONTEXT_CHANGED: {
+                        mCallbacks.onUserContextChanged();
+                    } break;
+
+                    case MESSAGE_NOTIFY_ROTATION_CHANGED: {
+                        final int rotation = message.arg1;
+                        mCallbacks.onRotationChanged(rotation);
+                    } break;
+
+                    case MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED : {
+                        synchronized (mWindowManagerService.mWindowMap) {
+                            if (mMagnifedViewport.isMagnifyingLocked()) {
+                                mMagnifedViewport.setMagnifiedRegionBorderShownLocked(true, true);
+                                mWindowManagerService.scheduleAnimationLocked();
+                            }
+                        }
+                    } break;
+                }
+            }
+        }
+    }
+
+    /**
+     * This class encapsulates the functionality related to computing the windows
+     * reported for accessibility purposes. These windows are all windows a sighted
+     * user can see on the screen.
+     */
+    private static final class WindowsForAccessibilityObserver {
+        private static final String LOG_TAG = "WindowsForAccessibilityObserver";
+
+        private static final boolean DEBUG = false;
+
+        private final SparseArray<WindowState> mTempWindowStates =
+                new SparseArray<WindowState>();
+
+        private final List<WindowInfo> mOldWindows = new ArrayList<WindowInfo>();
+
+        private final Set<IBinder> mTempBinderSet = new ArraySet<IBinder>();
+
+        private final RectF mTempRectF = new RectF();
+
+        private final Matrix mTempMatrix = new Matrix();
+
+        private final Point mTempPoint = new Point();
+
+        private final Rect mTempRect = new Rect();
+
+        private final Region mTempRegion = new Region();
+
+        private final Region mTempRegion1 = new Region();
+
+        private final Context mContext;
+
+        private final WindowManagerService mWindowManagerService;
+
+        private final Handler mHandler;
+
+        private final WindowsForAccessibilityCallback mCallback;
+
+        public WindowsForAccessibilityObserver(WindowManagerService windowManagerService,
+                WindowsForAccessibilityCallback callback) {
+            mContext = windowManagerService.mContext;
+            mWindowManagerService = windowManagerService;
+            mCallback = callback;
+            mHandler = new MyHandler(mWindowManagerService.mH.getLooper());
+            computeChangedWindows();
+        }
+
+        public void computeChangedWindows() {
+            if (DEBUG) {
+                Slog.i(LOG_TAG, "computeChangedWindows()");
+            }
+
+            synchronized (mWindowManagerService.mWindowMap) {
+                WindowManager windowManager = (WindowManager)
+                        mContext.getSystemService(Context.WINDOW_SERVICE);
+                windowManager.getDefaultDisplay().getRealSize(mTempPoint);
+                final int screenWidth = mTempPoint.x;
+                final int screenHeight = mTempPoint.y;
+
+                Region unaccountedSpace = mTempRegion;
+                unaccountedSpace.set(0, 0, screenWidth, screenHeight);
+
+                SparseArray<WindowState> visibleWindows = mTempWindowStates;
+                populateVisibleWindowsOnScreenLocked(visibleWindows);
+
+                List<WindowInfo> windows = new ArrayList<WindowInfo>();
+
+                Set<IBinder> addedWindows = mTempBinderSet;
+                addedWindows.clear();
+
+                final int visibleWindowCount = visibleWindows.size();
+                for (int i = visibleWindowCount - 1; i >= 0; i--) {
+                    WindowState windowState = visibleWindows.valueAt(i);
+                    // Compute the window touchable frame as shown on the screen.
+
+                    // Get the touchable frame.
+                    Region touchableRegion = mTempRegion1;
+                    windowState.getTouchableRegion(touchableRegion);
+                    Rect touchableFrame = mTempRect;
+                    touchableRegion.getBounds(touchableFrame);
+
+                    // Move to origin as all transforms are captured by the matrix.
+                    RectF windowFrame = mTempRectF;
+                    windowFrame.set(touchableFrame);
+                    windowFrame.offset(-windowState.mFrame.left, -windowState.mFrame.top);
+
+                    // Map the frame to get what appears on the screen.
+                    Matrix matrix = mTempMatrix;
+                    populateTransformationMatrixLocked(windowState, matrix);
+                    matrix.mapRect(windowFrame);
+
+                    // Got the bounds.
+                    Rect boundsInScreen = mTempRect;
+                    boundsInScreen.set((int) windowFrame.left, (int) windowFrame.top,
+                            (int) windowFrame.right, (int) windowFrame.bottom);
+
+                    final int flags = windowState.mAttrs.flags;
+
+                    // If the window is not touchable, do not report it but take into account
+                    // the space it takes since the content behind it cannot be touched.
+                    if ((flags & WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE) == 1) {
+                        unaccountedSpace.op(boundsInScreen, unaccountedSpace,
+                                Region.Op.DIFFERENCE);
+                        continue;
+                    }
+
+                    // If the window is completely covered by other windows - ignore.
+                    if (unaccountedSpace.quickReject(boundsInScreen)) {
+                        continue;
+                    }
+
+                    // Add windows of certain types not covered by modal windows.
+                    if (isReportedWindowType(windowState.mAttrs.type)) {
+                        // Add the window to the ones to be reported.
+                        WindowInfo window = WindowInfo.obtain();
+                        window.type = windowState.mAttrs.type;
+                        window.layer = windowState.mLayer;
+                        window.token = windowState.mClient.asBinder();
+
+                        addedWindows.add(window.token);
+
+                        WindowState attachedWindow = windowState.mAttachedWindow;
+                        if (attachedWindow != null) {
+                            window.parentToken = attachedWindow.mClient.asBinder();
+                        }
+
+                        window.focused = windowState.isFocused();
+                        window.boundsInScreen.set(boundsInScreen);
+
+                        final int childCount = windowState.mChildWindows.size();
+                        if (childCount > 0) {
+                            if (window.childTokens == null) {
+                                window.childTokens = new ArrayList<IBinder>();
+                            }
+                            for (int j = 0; j < childCount; j++) {
+                                WindowState child = windowState.mChildWindows.get(j);
+                                window.childTokens.add(child.mClient.asBinder());
+                            }
+                        }
+
+                        windows.add(window);
+                    }
+
+                    // Account for the space this window takes.
+                    unaccountedSpace.op(boundsInScreen, unaccountedSpace,
+                            Region.Op.REVERSE_DIFFERENCE);
+
+                    // We figured out what is touchable for the entire screen - done.
+                    if (unaccountedSpace.isEmpty()) {
+                        break;
+                    }
+
+                    // If a window is modal, no other below can be touched - done.
+                    if ((flags & (WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
+                            | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)) == 0) {
+                        break;
+                    }
+                }
+
+                // Remove child/parent references to windows that were not added.
+                final int windowCount = windows.size();
+                for (int i = 0; i < windowCount; i++) {
+                    WindowInfo window = windows.get(i);
+                    if (!addedWindows.contains(window.parentToken)) {
+                        window.parentToken = null;
+                    }
+                    if (window.childTokens != null) {
+                        final int childTokenCount = window.childTokens.size();
+                        for (int j = childTokenCount - 1; j >= 0; j--) {
+                            if (!addedWindows.contains(window.childTokens.get(j))) {
+                                window.childTokens.remove(j);
+                            }
+                        }
+                        // Leave the child token list if empty.
+                    }
+                }
+
+                visibleWindows.clear();
+                addedWindows.clear();
+
+                // We computed the windows and if they changed notify the client.
+                boolean windowsChanged = false;
+                if (mOldWindows.size() != windows.size()) {
+                    // Different size means something changed.
+                    windowsChanged = true;
+                } else if (!mOldWindows.isEmpty() || !windows.isEmpty()) {
+                    // Since we always traverse windows from high to low layer
+                    // the old and new windows at the same index should be the
+                    // same, otherwise something changed.
+                    for (int i = 0; i < windowCount; i++) {
+                        WindowInfo oldWindow = mOldWindows.get(i);
+                        WindowInfo newWindow = windows.get(i);
+                        // We do not care for layer changes given the window
+                        // order does not change. This brings no new information
+                        // to the clients.
+                        if (windowChangedNoLayer(oldWindow, newWindow)) {
+                            windowsChanged = true;
+                            break;
+                        }
+                    }
+                }
+
+                if (windowsChanged) {
+                    if (DEBUG) {
+                        Log.i(LOG_TAG, "Windows changed:" + windows);
+                    }
+                    // Remember the old windows to detect changes.
+                    cacheWindows(windows);
+                    // Announce the change.
+                    mHandler.obtainMessage(MyHandler.MESSAGE_NOTIFY_WINDOWS_CHANGED,
+                            windows).sendToTarget();
+                } else {
+                    if (DEBUG) {
+                        Log.i(LOG_TAG, "No windows changed.");
+                    }
+                    // Recycle the nodes as we do not need them.
+                    clearAndRecycleWindows(windows);
+                }
+            }
+        }
+
+        private void cacheWindows(List<WindowInfo> windows) {
+            final int oldWindowCount = mOldWindows.size();
+            for (int i = oldWindowCount - 1; i >= 0; i--) {
+                mOldWindows.remove(i).recycle();
+            }
+            final int newWindowCount = windows.size();
+            for (int i = 0; i < newWindowCount; i++) {
+                WindowInfo newWindow = windows.get(i);
+                mOldWindows.add(WindowInfo.obtain(newWindow));
+            }
+        }
+
+        private boolean windowChangedNoLayer(WindowInfo oldWindow, WindowInfo newWindow) {
+            if (oldWindow == newWindow) {
+                return false;
+            }
+            if (oldWindow == null && newWindow != null) {
+                return true;
+            }
+            if (oldWindow != null && newWindow == null) {
+                return true;
+            }
+            if (oldWindow.type != newWindow.type) {
+                return true;
+            }
+            if (oldWindow.focused != newWindow.focused) {
+                return true;
+            }
+            if (oldWindow.token == null) {
+                if (newWindow.token != null) {
+                    return true;
+                }
+            } else if (!oldWindow.token.equals(newWindow.token)) {
+                return true;
+            }
+            if (oldWindow.parentToken == null) {
+                if (newWindow.parentToken != null) {
+                    return true;
+                }
+            } else if (!oldWindow.parentToken.equals(newWindow.parentToken)) {
+                return true;
+            }
+            if (!oldWindow.boundsInScreen.equals(newWindow.boundsInScreen)) {
+                return true;
+            }
+            if (oldWindow.childTokens != null && newWindow.childTokens != null
+                    && !oldWindow.childTokens.equals(newWindow.childTokens)) {
+                return true;
+            }
+            return false;
+        }
+
+        private void clearAndRecycleWindows(List<WindowInfo> windows) {
+            final int windowCount = windows.size();
+            for (int i = windowCount - 1; i >= 0; i--) {
+                windows.remove(i).recycle();
+            }
+        }
+
+        private static boolean isReportedWindowType(int windowType) {
+            return (windowType != WindowManager.LayoutParams.TYPE_KEYGUARD_SCRIM
+                    && windowType != WindowManager.LayoutParams.TYPE_WALLPAPER
+                    && windowType != WindowManager.LayoutParams.TYPE_BOOT_PROGRESS
+                    && windowType != WindowManager.LayoutParams.TYPE_DISPLAY_OVERLAY
+                    && windowType != WindowManager.LayoutParams.TYPE_DRAG
+                    && windowType != WindowManager.LayoutParams.TYPE_HIDDEN_NAV_CONSUMER
+                    && windowType != WindowManager.LayoutParams.TYPE_POINTER
+                    && windowType != WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND
+                    && windowType != WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY
+                    && windowType != WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY
+                    && windowType != WindowManager.LayoutParams.TYPE_SECURE_SYSTEM_OVERLAY
+                    && windowType != WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION);
+        }
+
+        private void populateVisibleWindowsOnScreenLocked(SparseArray<WindowState> outWindows) {
+            DisplayContent displayContent = mWindowManagerService
+                    .getDefaultDisplayContentLocked();
+            WindowList windowList = displayContent.getWindowList();
+            final int windowCount = windowList.size();
+            for (int i = 0; i < windowCount; i++) {
+                WindowState windowState = windowList.get(i);
+                if (windowState.isVisibleLw()) {
+                    outWindows.put(windowState.mLayer, windowState);
+                }
+            }
+        }
+
+        private class MyHandler extends Handler {
+            public static final int MESSAGE_NOTIFY_WINDOWS_CHANGED = 1;
+
+            public MyHandler(Looper looper) {
+                super(looper, null, false);
+            }
+
+            @Override
+            @SuppressWarnings("unchecked")
+            public void handleMessage(Message message) {
+                switch (message.what) {
+                    case MESSAGE_NOTIFY_WINDOWS_CHANGED: {
+                        List<WindowInfo> windows = (List<WindowInfo>) message.obj;
+                        mCallback.onWindowsForAccessibilityChanged(windows);
+                        clearAndRecycleWindows(windows);
+                    } break;
+                }
+            }
+        }
+    }
+}
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 756e06a..9039236 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -17,20 +17,25 @@
 package com.android.server.wm;
 
 import android.content.Context;
+import android.content.res.Configuration;
 import android.graphics.Bitmap;
 import android.graphics.Point;
+import android.graphics.Rect;
 import android.os.Debug;
 import android.os.Handler;
 import android.os.IRemoteCallback;
+import android.os.SystemProperties;
 import android.util.Slog;
 import android.view.WindowManager;
 import android.view.animation.AlphaAnimation;
 import android.view.animation.Animation;
 import android.view.animation.AnimationSet;
 import android.view.animation.AnimationUtils;
+import android.view.animation.ClipRectAnimation;
 import android.view.animation.Interpolator;
 import android.view.animation.ScaleAnimation;
 
+import android.view.animation.TranslateAnimation;
 import com.android.internal.util.DumpUtils.Dump;
 import com.android.server.AttributeCache;
 import com.android.server.wm.WindowManagerService.H;
@@ -125,6 +130,12 @@
     private static final int NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN = 4;
     private int mNextAppTransitionType = NEXT_TRANSIT_TYPE_NONE;
 
+    // These are the possible states for the enter/exit activities during a thumbnail transition
+    private static final int THUMBNAIL_TRANSITION_ENTER_SCALE_UP = 0;
+    private static final int THUMBNAIL_TRANSITION_EXIT_SCALE_UP = 1;
+    private static final int THUMBNAIL_TRANSITION_ENTER_SCALE_DOWN = 2;
+    private static final int THUMBNAIL_TRANSITION_EXIT_SCALE_DOWN = 3;
+
     private String mNextAppTransitionPackage;
     private Bitmap mNextAppTransitionThumbnail;
     // Used for thumbnail transitions. True if we're scaling up, false if scaling down
@@ -137,6 +148,9 @@
     private int mNextAppTransitionStartWidth;
     private int mNextAppTransitionStartHeight;
 
+    private Rect mTmpFromClipRect = new Rect();
+    private Rect mTmpToClipRect = new Rect();
+
     private final static int APP_STATE_IDLE = 0;
     private final static int APP_STATE_READY = 1;
     private final static int APP_STATE_RUNNING = 2;
@@ -384,80 +398,10 @@
         return a;
     }
 
-    Animation createThumbnailAnimationLocked(int transit, boolean enter, boolean thumb,
-                                    int appWidth, int appHeight) {
-        Animation a;
-        final int thumbWidthI = mNextAppTransitionThumbnail.getWidth();
-        final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1;
-        final int thumbHeightI = mNextAppTransitionThumbnail.getHeight();
-        final float thumbHeight = thumbHeightI > 0 ? thumbHeightI : 1;
-        if (thumb) {
-            // Animation for zooming thumbnail from its initial size to
-            // filling the screen.
-            if (mNextAppTransitionScaleUp) {
-                float scaleW = appWidth / thumbWidth;
-                float scaleH = appHeight / thumbHeight;
-                Animation scale = new ScaleAnimation(1, scaleW, 1, scaleH,
-                        computePivot(mNextAppTransitionStartX, 1 / scaleW),
-                        computePivot(mNextAppTransitionStartY, 1 / scaleH));
-                scale.setInterpolator(mDecelerateInterpolator);
-
-                Animation alpha = new AlphaAnimation(1, 0);
-                alpha.setInterpolator(mThumbnailFadeoutInterpolator);
-
-                // This AnimationSet uses the Interpolators assigned above.
-                AnimationSet set = new AnimationSet(false);
-                set.addAnimation(scale);
-                set.addAnimation(alpha);
-                a = set;
-            } else {
-                float scaleW = appWidth / thumbWidth;
-                float scaleH = appHeight / thumbHeight;
-                a = new ScaleAnimation(scaleW, 1, scaleH, 1,
-                        computePivot(mNextAppTransitionStartX, 1 / scaleW),
-                        computePivot(mNextAppTransitionStartY, 1 / scaleH));
-            }
-        } else if (enter) {
-            // Entering app zooms out from the center of the thumbnail.
-            if (mNextAppTransitionScaleUp) {
-                float scaleW = thumbWidth / appWidth;
-                float scaleH = thumbHeight / appHeight;
-                a = new ScaleAnimation(scaleW, 1, scaleH, 1,
-                        computePivot(mNextAppTransitionStartX, scaleW),
-                        computePivot(mNextAppTransitionStartY, scaleH));
-            } else {
-                // noop animation
-                a = new AlphaAnimation(1, 1);
-            }
-        } else {
-            // Exiting app
-            if (mNextAppTransitionScaleUp) {
-                if (transit == TRANSIT_WALLPAPER_INTRA_OPEN) {
-                    // Fade out while bringing up selected activity. This keeps the
-                    // current activity from showing through a launching wallpaper
-                    // activity.
-                    a = new AlphaAnimation(1, 0);
-                } else {
-                    // noop animation
-                    a = new AlphaAnimation(1, 1);
-                }
-            } else {
-                float scaleW = thumbWidth / appWidth;
-                float scaleH = thumbHeight / appHeight;
-                Animation scale = new ScaleAnimation(1, scaleW, 1, scaleH,
-                        computePivot(mNextAppTransitionStartX, scaleW),
-                        computePivot(mNextAppTransitionStartY, scaleH));
-
-                Animation alpha = new AlphaAnimation(1, 0);
-
-                AnimationSet set = new AnimationSet(true);
-                set.addAnimation(scale);
-                set.addAnimation(alpha);
-                set.setZAdjustment(Animation.ZORDER_TOP);
-                a = set;
-            }
-        }
-
+    /**
+     * Prepares the specified animation with a standard duration, interpolator, etc.
+     */
+    Animation prepareThumbnailAnimation(Animation a, int appWidth, int appHeight, int transit) {
         // Pick the desired duration.  If this is an inter-activity transition,
         // it  is the standard duration for that.  Otherwise we use the longer
         // task transition duration.
@@ -478,9 +422,250 @@
         return a;
     }
 
+    /**
+     * Return the current thumbnail transition state.
+     */
+    int getThumbnailTransitionState(boolean enter) {
+        if (enter) {
+            if (mNextAppTransitionScaleUp) {
+                return THUMBNAIL_TRANSITION_ENTER_SCALE_UP;
+            } else {
+                return THUMBNAIL_TRANSITION_ENTER_SCALE_DOWN;
+            }
+        } else {
+            if (mNextAppTransitionScaleUp) {
+                return THUMBNAIL_TRANSITION_EXIT_SCALE_UP;
+            } else {
+                return THUMBNAIL_TRANSITION_EXIT_SCALE_DOWN;
+            }
+        }
+    }
+
+    /**
+     * This animation runs for the thumbnail that gets cross faded with the enter/exit activity
+     * when a thumbnail is specified with the activity options.
+     */
+    Animation createThumbnailScaleAnimationLocked(int appWidth, int appHeight, int transit) {
+        Animation a;
+        final int thumbWidthI = mNextAppTransitionThumbnail.getWidth();
+        final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1;
+        final int thumbHeightI = mNextAppTransitionThumbnail.getHeight();
+        final float thumbHeight = thumbHeightI > 0 ? thumbHeightI : 1;
+
+        if (mNextAppTransitionScaleUp) {
+            // Animation for the thumbnail zooming from its initial size to the full screen
+            float scaleW = appWidth / thumbWidth;
+            float scaleH = appHeight / thumbHeight;
+            Animation scale = new ScaleAnimation(1, scaleW, 1, scaleH,
+                    computePivot(mNextAppTransitionStartX, 1 / scaleW),
+                    computePivot(mNextAppTransitionStartY, 1 / scaleH));
+            scale.setInterpolator(mDecelerateInterpolator);
+
+            Animation alpha = new AlphaAnimation(1, 0);
+            alpha.setInterpolator(mThumbnailFadeoutInterpolator);
+
+            // This AnimationSet uses the Interpolators assigned above.
+            AnimationSet set = new AnimationSet(false);
+            set.addAnimation(scale);
+            set.addAnimation(alpha);
+            a = set;
+        } else {
+            // Animation for the thumbnail zooming down from the full screen to its final size
+            float scaleW = appWidth / thumbWidth;
+            float scaleH = appHeight / thumbHeight;
+            a = new ScaleAnimation(scaleW, 1, scaleH, 1,
+                    computePivot(mNextAppTransitionStartX, 1 / scaleW),
+                    computePivot(mNextAppTransitionStartY, 1 / scaleH));
+        }
+
+        return prepareThumbnailAnimation(a, appWidth, appHeight, transit);
+    }
+
+    /**
+     * This alternate animation is created when we are doing a thumbnail transition, for the
+     * activity that is leaving, and the activity that is entering.
+     */
+    Animation createAlternateThumbnailEnterExitAnimationLocked(int thumbTransitState, int appWidth,
+                                                    int appHeight, int orientation, int transit,
+                                                    Rect containingFrame, Rect contentInsets) {
+        Animation a;
+        final int thumbWidthI = mNextAppTransitionThumbnail.getWidth();
+        final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1;
+        final int thumbHeightI = mNextAppTransitionThumbnail.getHeight();
+        final float thumbHeight = thumbHeightI > 0 ? thumbHeightI : 1;
+
+        // Used for the ENTER_SCALE_UP and EXIT_SCALE_DOWN transitions
+        float scale = 1f;
+        int scaledTopDecor = 0;
+
+        switch (thumbTransitState) {
+            case THUMBNAIL_TRANSITION_ENTER_SCALE_UP: {
+                // Entering app scales up with the thumbnail
+                if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+                    // In portrait, we scale the width and clip to the top/left square
+                    scale = thumbWidth / appWidth;
+                    scaledTopDecor = (int) (scale * contentInsets.top);
+                    int unscaledThumbHeight = (int) (thumbHeight / scale);
+                    mTmpFromClipRect.set(containingFrame);
+                    mTmpFromClipRect.bottom = (mTmpFromClipRect.top + unscaledThumbHeight);
+                    mTmpToClipRect.set(containingFrame);
+                } else {
+                    // In landscape, we scale the height and clip to the top/left square
+                    scale = thumbHeight / (appHeight - contentInsets.top);
+                    scaledTopDecor = (int) (scale * contentInsets.top);
+                    int unscaledThumbWidth = (int) (thumbWidth / scale);
+                    mTmpFromClipRect.set(containingFrame);
+                    mTmpFromClipRect.right = (mTmpFromClipRect.left + unscaledThumbWidth);
+                    mTmpToClipRect.set(containingFrame);
+                }
+
+                Animation scaleAnim = new ScaleAnimation(scale, 1, scale, 1,
+                        computePivot(mNextAppTransitionStartX, scale),
+                        computePivot(mNextAppTransitionStartY, scale));
+                Animation alphaAnim = new AlphaAnimation(1, 1);
+                Animation clipAnim = new ClipRectAnimation(mTmpFromClipRect, mTmpToClipRect);
+                Animation translateAnim = new TranslateAnimation(0, 0, -scaledTopDecor, 0);
+
+                AnimationSet set = new AnimationSet(true);
+                set.addAnimation(alphaAnim);
+                set.addAnimation(clipAnim);
+                set.addAnimation(scaleAnim);
+                set.addAnimation(translateAnim);
+                a = set;
+                break;
+            }
+            case THUMBNAIL_TRANSITION_EXIT_SCALE_UP: {
+                // Exiting app while the thumbnail is scaling up should fade
+                if (transit == TRANSIT_WALLPAPER_INTRA_OPEN) {
+                    // Fade out while bringing up selected activity. This keeps the
+                    // current activity from showing through a launching wallpaper
+                    // activity.
+                    a = new AlphaAnimation(1, 0);
+                } else {
+                    // noop animation
+                    a = new AlphaAnimation(1, 1);
+                }
+                break;
+            }
+            case THUMBNAIL_TRANSITION_ENTER_SCALE_DOWN: {
+                // Entering the other app, it should just be visible while we scale the thumbnail
+                // down above it
+                a = new AlphaAnimation(1, 1);
+                break;
+            }
+            case THUMBNAIL_TRANSITION_EXIT_SCALE_DOWN: {
+                // Exiting the current app, the app should scale down with the thumbnail
+                if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+                    // In portrait, we scale the width and clip to the top/left square
+                    scale = thumbWidth / appWidth;
+                    scaledTopDecor = (int) (scale * contentInsets.top);
+                    int unscaledThumbHeight = (int) (thumbHeight / scale);
+                    mTmpFromClipRect.set(containingFrame);
+                    mTmpToClipRect.set(containingFrame);
+                    mTmpToClipRect.bottom = (mTmpToClipRect.top + unscaledThumbHeight);
+                } else {
+                    // In landscape, we scale the height and clip to the top/left square
+                    scale = thumbHeight / (appHeight - contentInsets.top);
+                    scaledTopDecor = (int) (scale * contentInsets.top);
+                    int unscaledThumbWidth = (int) (thumbWidth / scale);
+                    mTmpFromClipRect.set(containingFrame);
+                    mTmpToClipRect.set(containingFrame);
+                    mTmpToClipRect.right = (mTmpToClipRect.left + unscaledThumbWidth);
+                }
+
+                Animation scaleAnim = new ScaleAnimation(1, scale, 1, scale,
+                        computePivot(mNextAppTransitionStartX, scale),
+                        computePivot(mNextAppTransitionStartY, scale));
+                Animation alphaAnim = new AlphaAnimation(1, 1);
+                Animation clipAnim = new ClipRectAnimation(mTmpFromClipRect, mTmpToClipRect);
+                Animation translateAnim = new TranslateAnimation(0, 0, 0, -scaledTopDecor);
+
+                AnimationSet set = new AnimationSet(true);
+                set.addAnimation(alphaAnim);
+                set.addAnimation(clipAnim);
+                set.addAnimation(scaleAnim);
+                set.addAnimation(translateAnim);
+
+                a = set;
+                a.setZAdjustment(Animation.ZORDER_TOP);
+                break;
+            }
+            default:
+                throw new RuntimeException("Invalid thumbnail transition state");
+        }
+
+        return prepareThumbnailAnimation(a, appWidth, appHeight, transit);
+    }
+
+    /**
+     * This animation is created when we are doing a thumbnail transition, for the activity that is
+     * leaving, and the activity that is entering.
+     */
+    Animation createThumbnailEnterExitAnimationLocked(int thumbTransitState, int appWidth,
+                                                    int appHeight, int transit) {
+        Animation a;
+        final int thumbWidthI = mNextAppTransitionThumbnail.getWidth();
+        final float thumbWidth = thumbWidthI > 0 ? thumbWidthI : 1;
+        final int thumbHeightI = mNextAppTransitionThumbnail.getHeight();
+        final float thumbHeight = thumbHeightI > 0 ? thumbHeightI : 1;
+
+        switch (thumbTransitState) {
+            case THUMBNAIL_TRANSITION_ENTER_SCALE_UP: {
+                // Entering app scales up with the thumbnail
+                float scaleW = thumbWidth / appWidth;
+                float scaleH = thumbHeight / appHeight;
+                a = new ScaleAnimation(scaleW, 1, scaleH, 1,
+                        computePivot(mNextAppTransitionStartX, scaleW),
+                        computePivot(mNextAppTransitionStartY, scaleH));
+                break;
+            }
+            case THUMBNAIL_TRANSITION_EXIT_SCALE_UP: {
+                // Exiting app while the thumbnail is scaling up should fade or stay in place
+                if (transit == TRANSIT_WALLPAPER_INTRA_OPEN) {
+                    // Fade out while bringing up selected activity. This keeps the
+                    // current activity from showing through a launching wallpaper
+                    // activity.
+                    a = new AlphaAnimation(1, 0);
+                } else {
+                    // noop animation
+                    a = new AlphaAnimation(1, 1);
+                }
+                break;
+            }
+            case THUMBNAIL_TRANSITION_ENTER_SCALE_DOWN: {
+                // Entering the other app, it should just be visible while we scale the thumbnail
+                // down above it
+                a = new AlphaAnimation(1, 1);
+                break;
+            }
+            case THUMBNAIL_TRANSITION_EXIT_SCALE_DOWN: {
+                // Exiting the current app, the app should scale down with the thumbnail
+                float scaleW = thumbWidth / appWidth;
+                float scaleH = thumbHeight / appHeight;
+                Animation scale = new ScaleAnimation(1, scaleW, 1, scaleH,
+                        computePivot(mNextAppTransitionStartX, scaleW),
+                        computePivot(mNextAppTransitionStartY, scaleH));
+
+                Animation alpha = new AlphaAnimation(1, 0);
+
+                AnimationSet set = new AnimationSet(true);
+                set.addAnimation(scale);
+                set.addAnimation(alpha);
+                set.setZAdjustment(Animation.ZORDER_TOP);
+                a = set;
+                break;
+            }
+            default:
+                throw new RuntimeException("Invalid thumbnail transition state");
+        }
+
+        return prepareThumbnailAnimation(a, appWidth, appHeight, transit);
+    }
+
 
     Animation loadAnimation(WindowManager.LayoutParams lp, int transit, boolean enter,
-                            int appWidth, int appHeight) {
+                            int appWidth, int appHeight, int orientation,
+                            Rect containingFrame, Rect contentInsets, Configuration configuration) {
         Animation a;
         if (mNextAppTransitionType == NEXT_TRANSIT_TYPE_CUSTOM) {
             a = loadAnimation(mNextAppTransitionPackage, enter ?
@@ -501,7 +686,15 @@
                 mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_DOWN) {
             mNextAppTransitionScaleUp =
                     (mNextAppTransitionType == NEXT_TRANSIT_TYPE_THUMBNAIL_SCALE_UP);
-            a = createThumbnailAnimationLocked(transit, enter, false, appWidth, appHeight);
+            boolean useAlternateThumbnailAnimation = (configuration.smallestScreenWidthDp < 600);
+            if (useAlternateThumbnailAnimation) {
+                a = createAlternateThumbnailEnterExitAnimationLocked(
+                        getThumbnailTransitionState(enter), appWidth, appHeight, orientation,
+                        transit, containingFrame, contentInsets);
+            } else {
+                a = createThumbnailEnterExitAnimationLocked(getThumbnailTransitionState(enter),
+                        appWidth, appHeight, transit);
+            }
             if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) {
                 String animName = mNextAppTransitionScaleUp ?
                         "ANIM_THUMBNAIL_SCALE_UP" : "ANIM_THUMBNAIL_SCALE_DOWN";
diff --git a/services/core/java/com/android/server/wm/DisplayMagnifier.java b/services/core/java/com/android/server/wm/DisplayMagnifier.java
deleted file mode 100644
index 382d7b4..0000000
--- a/services/core/java/com/android/server/wm/DisplayMagnifier.java
+++ /dev/null
@@ -1,756 +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.android.server.wm;
-
-import android.animation.ObjectAnimator;
-import android.animation.ValueAnimator;
-import android.app.Service;
-import android.content.Context;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Path;
-import android.graphics.PixelFormat;
-import android.graphics.Point;
-import android.graphics.PorterDuff.Mode;
-import android.graphics.Rect;
-import android.graphics.RectF;
-import android.graphics.Region;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.util.Pools.SimplePool;
-import android.util.Slog;
-import android.util.SparseArray;
-import android.util.TypedValue;
-import android.view.IMagnificationCallbacks;
-import android.view.MagnificationSpec;
-import android.view.Surface;
-import android.view.Surface.OutOfResourcesException;
-import android.view.SurfaceControl;
-import android.view.WindowManager;
-import android.view.WindowManagerPolicy;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-
-import com.android.internal.R;
-import com.android.internal.os.SomeArgs;
-
-/**
- * This class is a part of the window manager and encapsulates the
- * functionality related to display magnification.
- */
-final class DisplayMagnifier {
-    private static final String LOG_TAG = DisplayMagnifier.class.getSimpleName();
-
-    private static final boolean DEBUG_WINDOW_TRANSITIONS = false;
-    private static final boolean DEBUG_ROTATION = false;
-    private static final boolean DEBUG_LAYERS = false;
-    private static final boolean DEBUG_RECTANGLE_REQUESTED = false;
-    private static final boolean DEBUG_VIEWPORT_WINDOW = false;
-
-    private final Rect mTempRect1 = new Rect();
-    private final Rect mTempRect2 = new Rect();
-
-    private final Region mTempRegion1 = new Region();
-    private final Region mTempRegion2 = new Region();
-    private final Region mTempRegion3 = new Region();
-    private final Region mTempRegion4 = new Region();
-
-    private final Context mContext;
-    private final WindowManagerService mWindowManagerService;
-    private final MagnifiedViewport mMagnifedViewport;
-    private final Handler mHandler;
-
-    private final IMagnificationCallbacks mCallbacks;
-
-    private final long mLongAnimationDuration;
-
-    public DisplayMagnifier(WindowManagerService windowManagerService,
-            IMagnificationCallbacks callbacks) {
-        mContext = windowManagerService.mContext;
-        mWindowManagerService = windowManagerService;
-        mCallbacks = callbacks;
-        mHandler = new MyHandler(mWindowManagerService.mH.getLooper());
-        mMagnifedViewport = new MagnifiedViewport();
-        mLongAnimationDuration = mContext.getResources().getInteger(
-                com.android.internal.R.integer.config_longAnimTime);
-    }
-
-    public void setMagnificationSpecLocked(MagnificationSpec spec) {
-        mMagnifedViewport.updateMagnificationSpecLocked(spec);
-        mMagnifedViewport.recomputeBoundsLocked();
-        mWindowManagerService.scheduleAnimationLocked();
-    }
-
-    public void onRectangleOnScreenRequestedLocked(Rect rectangle, boolean immediate) {
-        if (DEBUG_RECTANGLE_REQUESTED) {
-            Slog.i(LOG_TAG, "Rectangle on screen requested: " + rectangle);
-        }
-        if (!mMagnifedViewport.isMagnifyingLocked()) {
-            return;
-        }
-        Rect magnifiedRegionBounds = mTempRect2;
-        mMagnifedViewport.getMagnifiedFrameInContentCoordsLocked(magnifiedRegionBounds);
-        if (magnifiedRegionBounds.contains(rectangle)) {
-            return;
-        }
-        SomeArgs args = SomeArgs.obtain();
-        args.argi1 = rectangle.left;
-        args.argi2 = rectangle.top;
-        args.argi3 = rectangle.right;
-        args.argi4 = rectangle.bottom;
-        mHandler.obtainMessage(MyHandler.MESSAGE_NOTIFY_RECTANGLE_ON_SCREEN_REQUESTED,
-                args).sendToTarget();
-    }
-
-    public void onWindowLayersChangedLocked() {
-        if (DEBUG_LAYERS) {
-            Slog.i(LOG_TAG, "Layers changed.");
-        }
-        mMagnifedViewport.recomputeBoundsLocked();
-        mWindowManagerService.scheduleAnimationLocked();
-    }
-
-    public void onRotationChangedLocked(DisplayContent displayContent, int rotation) {
-        if (DEBUG_ROTATION) {
-            Slog.i(LOG_TAG, "Rotaton: " + Surface.rotationToString(rotation)
-                    + " displayId: " + displayContent.getDisplayId());
-        }
-        mMagnifedViewport.onRotationChangedLocked();
-        mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_ROTATION_CHANGED);
-    }
-
-    public void onAppWindowTransitionLocked(WindowState windowState, int transition) {
-        if (DEBUG_WINDOW_TRANSITIONS) {
-            Slog.i(LOG_TAG, "Window transition: "
-                    + AppTransition.appTransitionToString(transition)
-                    + " displayId: " + windowState.getDisplayId());
-        }
-        final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
-        if (magnifying) {
-            switch (transition) {
-                case AppTransition.TRANSIT_ACTIVITY_OPEN:
-                case AppTransition.TRANSIT_TASK_OPEN:
-                case AppTransition.TRANSIT_TASK_TO_FRONT:
-                case AppTransition.TRANSIT_WALLPAPER_OPEN:
-                case AppTransition.TRANSIT_WALLPAPER_CLOSE:
-                case AppTransition.TRANSIT_WALLPAPER_INTRA_OPEN: {
-                    mHandler.sendEmptyMessage(MyHandler.MESSAGE_NOTIFY_USER_CONTEXT_CHANGED);
-                }
-            }
-        }
-    }
-
-    public void onWindowTransitionLocked(WindowState windowState, int transition) {
-        if (DEBUG_WINDOW_TRANSITIONS) {
-            Slog.i(LOG_TAG, "Window transition: "
-                    + AppTransition.appTransitionToString(transition)
-                    + " displayId: " + windowState.getDisplayId());
-        }
-        final boolean magnifying = mMagnifedViewport.isMagnifyingLocked();
-        final int type = windowState.mAttrs.type;
-        switch (transition) {
-            case WindowManagerPolicy.TRANSIT_ENTER:
-            case WindowManagerPolicy.TRANSIT_SHOW: {
-                if (!magnifying) {
-                    break;
-                }
-                switch (type) {
-                    case WindowManager.LayoutParams.TYPE_APPLICATION:
-                    case WindowManager.LayoutParams.TYPE_APPLICATION_PANEL:
-                    case WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA:
-                    case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
-                    case WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG:
-                    case WindowManager.LayoutParams.TYPE_SEARCH_BAR:
-                    case WindowManager.LayoutParams.TYPE_PHONE:
-                    case WindowManager.LayoutParams.TYPE_SYSTEM_ALERT:
-                    case WindowManager.LayoutParams.TYPE_TOAST:
-                    case WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY:
-                    case WindowManager.LayoutParams.TYPE_PRIORITY_PHONE:
-                    case WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG:
-                    case WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG:
-                    case WindowManager.LayoutParams.TYPE_SYSTEM_ERROR:
-                    case WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY:
-                    case WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL:
-                    case WindowManager.LayoutParams.TYPE_RECENTS_OVERLAY: {
-                        Rect magnifiedRegionBounds = mTempRect2;
-                        mMagnifedViewport.getMagnifiedFrameInContentCoordsLocked(
-                                magnifiedRegionBounds);
-                        Rect touchableRegionBounds = mTempRect1;
-                        windowState.getTouchableRegion(mTempRegion1);
-                        mTempRegion1.getBounds(touchableRegionBounds);
-                        if (!magnifiedRegionBounds.intersect(touchableRegionBounds)) {
-                            try {
-                                mCallbacks.onRectangleOnScreenRequested(
-                                        touchableRegionBounds.left,
-                                        touchableRegionBounds.top,
-                                        touchableRegionBounds.right,
-                                        touchableRegionBounds.bottom);
-                            } catch (RemoteException re) {
-                                /* ignore */
-                            }
-                        }
-                    } break;
-                } break;
-            }
-        }
-    }
-
-    public MagnificationSpec getMagnificationSpecForWindowLocked(WindowState windowState) {
-        MagnificationSpec spec = mMagnifedViewport.getMagnificationSpecLocked();
-        if (spec != null && !spec.isNop()) {
-            WindowManagerPolicy policy = mWindowManagerService.mPolicy;
-            final int windowType = windowState.mAttrs.type;
-            if (!policy.isTopLevelWindow(windowType) && windowState.mAttachedWindow != null
-                    && !policy.canMagnifyWindow(windowType)) {
-                return null;
-            }
-            if (!policy.canMagnifyWindow(windowState.mAttrs.type)) {
-                return null;
-            }
-        }
-        return spec;
-    }
-
-    public void destroyLocked() {
-        mMagnifedViewport.destroyWindow();
-    }
-
-    /** NOTE: This has to be called within a surface transaction. */
-    public void drawMagnifiedRegionBorderIfNeededLocked() {
-        mMagnifedViewport.drawWindowIfNeededLocked();
-    }
-
-    private final class MagnifiedViewport {
-
-        private static final int DEFAUTLT_BORDER_WIDTH_DIP = 5;
-
-        private final SparseArray<WindowStateInfo> mTempWindowStateInfos =
-                new SparseArray<WindowStateInfo>();
-
-        private final float[] mTempFloats = new float[9];
-
-        private final RectF mTempRectF = new RectF();
-
-        private final Point mTempPoint = new Point();
-
-        private final Matrix mTempMatrix = new Matrix();
-
-        private final Region mMagnifiedBounds = new Region();
-        private final Region mOldMagnifiedBounds = new Region();
-
-        private final MagnificationSpec mMagnificationSpec = MagnificationSpec.obtain();
-
-        private final WindowManager mWindowManager;
-
-        private final int mBorderWidth;
-        private final int mHalfBorderWidth;
-
-        private final ViewportWindow mWindow;
-
-        private boolean mFullRedrawNeeded;
-
-        public MagnifiedViewport() {
-            mWindowManager = (WindowManager) mContext.getSystemService(Service.WINDOW_SERVICE);
-            mBorderWidth = (int) TypedValue.applyDimension(
-                    TypedValue.COMPLEX_UNIT_DIP, DEFAUTLT_BORDER_WIDTH_DIP,
-                            mContext.getResources().getDisplayMetrics());
-            mHalfBorderWidth = (int) (mBorderWidth + 0.5) / 2;
-            mWindow = new ViewportWindow(mContext);
-            recomputeBoundsLocked();
-        }
-
-        public void updateMagnificationSpecLocked(MagnificationSpec spec) {
-            if (spec != null) {
-                mMagnificationSpec.initialize(spec.scale, spec.offsetX, spec.offsetY);
-            } else {
-                mMagnificationSpec.clear();
-            }
-            // If this message is pending we are in a rotation animation and do not want
-            // to show the border. We will do so when the pending message is handled.
-            if (!mHandler.hasMessages(MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED)) {
-                setMagnifiedRegionBorderShownLocked(isMagnifyingLocked(), true);
-            }
-        }
-
-        public void recomputeBoundsLocked() {
-            mWindowManager.getDefaultDisplay().getRealSize(mTempPoint);
-            final int screenWidth = mTempPoint.x;
-            final int screenHeight = mTempPoint.y;
-
-            Region magnifiedBounds = mMagnifiedBounds;
-            magnifiedBounds.set(0, 0, 0, 0);
-
-            Region availableBounds = mTempRegion1;
-            availableBounds.set(0, 0, screenWidth, screenHeight);
-
-            Region nonMagnifiedBounds = mTempRegion4;
-            nonMagnifiedBounds.set(0,  0,  0,  0);
-
-            SparseArray<WindowStateInfo> visibleWindows = mTempWindowStateInfos;
-            visibleWindows.clear();
-            getWindowsOnScreenLocked(visibleWindows);
-
-            final int visibleWindowCount = visibleWindows.size();
-            for (int i = visibleWindowCount - 1; i >= 0; i--) {
-                WindowStateInfo info = visibleWindows.valueAt(i);
-                if (info.mWindowState.mAttrs.type == WindowManager
-                        .LayoutParams.TYPE_MAGNIFICATION_OVERLAY) {
-                    continue;
-                }
-
-                Region windowBounds = mTempRegion2;
-                Matrix matrix = mTempMatrix;
-                populateTransformationMatrix(info.mWindowState, matrix);
-                RectF windowFrame = mTempRectF;
-
-                if (mWindowManagerService.mPolicy.canMagnifyWindow(info.mWindowState.mAttrs.type)) {
-                    windowFrame.set(info.mWindowState.mFrame);
-                    windowFrame.offset(-windowFrame.left, -windowFrame.top);
-                    matrix.mapRect(windowFrame);
-                    windowBounds.set((int) windowFrame.left, (int) windowFrame.top,
-                            (int) windowFrame.right, (int) windowFrame.bottom);
-                    magnifiedBounds.op(windowBounds, Region.Op.UNION);
-                    magnifiedBounds.op(availableBounds, Region.Op.INTERSECT);
-                } else {
-                    windowFrame.set(info.mTouchableRegion);
-                    windowFrame.offset(-info.mWindowState.mFrame.left,
-                            -info.mWindowState.mFrame.top);
-                    matrix.mapRect(windowFrame);
-                    windowBounds.set((int) windowFrame.left, (int) windowFrame.top,
-                            (int) windowFrame.right, (int) windowFrame.bottom);
-                    nonMagnifiedBounds.op(windowBounds, Region.Op.UNION);
-                    windowBounds.op(magnifiedBounds, Region.Op.DIFFERENCE);
-                    availableBounds.op(windowBounds, Region.Op.DIFFERENCE);
-                }
-
-                Region accountedBounds = mTempRegion2;
-                accountedBounds.set(magnifiedBounds);
-                accountedBounds.op(nonMagnifiedBounds, Region.Op.UNION);
-                accountedBounds.op(0, 0, screenWidth, screenHeight, Region.Op.INTERSECT);
-
-                if (accountedBounds.isRect()) {
-                    Rect accountedFrame = mTempRect1;
-                    accountedBounds.getBounds(accountedFrame);
-                    if (accountedFrame.width() == screenWidth
-                            && accountedFrame.height() == screenHeight) {
-                        break;
-                    }
-                }
-            }
-
-            for (int i = visibleWindowCount - 1; i >= 0; i--) {
-                WindowStateInfo info = visibleWindows.valueAt(i);
-                info.recycle();
-                visibleWindows.removeAt(i);
-            }
-
-            magnifiedBounds.op(mHalfBorderWidth, mHalfBorderWidth,
-                    screenWidth - mHalfBorderWidth, screenHeight - mHalfBorderWidth,
-                    Region.Op.INTERSECT);
-
-            if (!mOldMagnifiedBounds.equals(magnifiedBounds)) {
-                Region bounds = Region.obtain();
-                bounds.set(magnifiedBounds);
-                mHandler.obtainMessage(MyHandler.MESSAGE_NOTIFY_MAGNIFIED_BOUNDS_CHANGED,
-                        bounds).sendToTarget();
-
-                mWindow.setBounds(magnifiedBounds);
-                Rect dirtyRect = mTempRect1;
-                if (mFullRedrawNeeded) {
-                    mFullRedrawNeeded = false;
-                    dirtyRect.set(mHalfBorderWidth, mHalfBorderWidth,
-                            screenWidth - mHalfBorderWidth, screenHeight - mHalfBorderWidth);
-                    mWindow.invalidate(dirtyRect);
-                } else {
-                    Region dirtyRegion = mTempRegion3;
-                    dirtyRegion.set(magnifiedBounds);
-                    dirtyRegion.op(mOldMagnifiedBounds, Region.Op.UNION);
-                    dirtyRegion.op(nonMagnifiedBounds, Region.Op.INTERSECT);
-                    dirtyRegion.getBounds(dirtyRect);
-                    mWindow.invalidate(dirtyRect);
-                }
-
-                mOldMagnifiedBounds.set(magnifiedBounds);
-            }
-        }
-
-        private void populateTransformationMatrix(WindowState windowState, Matrix outMatrix) {
-            mTempFloats[Matrix.MSCALE_X] = windowState.mWinAnimator.mDsDx;
-            mTempFloats[Matrix.MSKEW_Y] = windowState.mWinAnimator.mDtDx;
-            mTempFloats[Matrix.MSKEW_X] = windowState.mWinAnimator.mDsDy;
-            mTempFloats[Matrix.MSCALE_Y] = windowState.mWinAnimator.mDtDy;
-            mTempFloats[Matrix.MTRANS_X] = windowState.mShownFrame.left;
-            mTempFloats[Matrix.MTRANS_Y] = windowState.mShownFrame.top;
-            mTempFloats[Matrix.MPERSP_0] = 0;
-            mTempFloats[Matrix.MPERSP_1] = 0;
-            mTempFloats[Matrix.MPERSP_2] = 1;
-            outMatrix.setValues(mTempFloats);
-        }
-
-        private void getWindowsOnScreenLocked(SparseArray<WindowStateInfo> outWindowStates) {
-            DisplayContent displayContent = mWindowManagerService.getDefaultDisplayContentLocked();
-            WindowList windowList = displayContent.getWindowList();
-            final int windowCount = windowList.size();
-            for (int i = 0; i < windowCount; i++) {
-                WindowState windowState = windowList.get(i);
-                if ((windowState.isOnScreen() || windowState.mAttrs.type == WindowManager
-                        .LayoutParams.TYPE_UNIVERSE_BACKGROUND)
-                        && !windowState.mWinAnimator.mEnterAnimationPending) {
-                    outWindowStates.put(windowState.mLayer, WindowStateInfo.obtain(windowState));
-                }
-            }
-        }
-
-        public void onRotationChangedLocked() {
-            // If we are magnifying, hide the magnified border window immediately so
-            // the user does not see strange artifacts during rotation. The screenshot
-            // used for rotation has already the border. After the rotation is complete
-            // we will show the border.
-            if (isMagnifyingLocked()) {
-                setMagnifiedRegionBorderShownLocked(false, false);
-                final long delay = (long) (mLongAnimationDuration
-                        * mWindowManagerService.mWindowAnimationScale);
-                Message message = mHandler.obtainMessage(
-                        MyHandler.MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED);
-                mHandler.sendMessageDelayed(message, delay);
-            }
-            recomputeBoundsLocked();
-            mWindow.updateSize();
-        }
-
-        public void setMagnifiedRegionBorderShownLocked(boolean shown, boolean animate) {
-            if (shown) {
-                mFullRedrawNeeded = true;
-                mOldMagnifiedBounds.set(0,  0,  0,  0);
-            }
-            mWindow.setShown(shown, animate);
-        }
-
-        public void getMagnifiedFrameInContentCoordsLocked(Rect rect) {
-            MagnificationSpec spec = mMagnificationSpec;
-            mMagnifiedBounds.getBounds(rect);
-            rect.offset((int) -spec.offsetX, (int) -spec.offsetY);
-            rect.scale(1.0f / spec.scale);
-        }
-
-        public boolean isMagnifyingLocked() {
-            return mMagnificationSpec.scale > 1.0f;
-        }
-
-        public MagnificationSpec getMagnificationSpecLocked() {
-            return mMagnificationSpec;
-        }
-
-        /** NOTE: This has to be called within a surface transaction. */
-        public void drawWindowIfNeededLocked() {
-            recomputeBoundsLocked();
-            mWindow.drawIfNeeded();
-        }
-
-        public void destroyWindow() {
-            mWindow.releaseSurface();
-        }
-
-        private final class ViewportWindow {
-            private static final String SURFACE_TITLE = "Magnification Overlay";
-
-            private static final String PROPERTY_NAME_ALPHA = "alpha";
-
-            private static final int MIN_ALPHA = 0;
-            private static final int MAX_ALPHA = 255;
-
-            private final Region mBounds = new Region();
-            private final Rect mDirtyRect = new Rect();
-            private final Paint mPaint = new Paint();
-
-            private final ValueAnimator mShowHideFrameAnimator;
-            private final SurfaceControl mSurfaceControl;
-            private final Surface mSurface = new Surface();
-
-            private boolean mShown;
-            private int mAlpha;
-
-            private boolean mInvalidated;
-
-            public ViewportWindow(Context context) {
-                SurfaceControl surfaceControl = null;
-                try {
-                    mWindowManager.getDefaultDisplay().getRealSize(mTempPoint);
-                    surfaceControl = new SurfaceControl(mWindowManagerService.mFxSession, SURFACE_TITLE,
-                            mTempPoint.x, mTempPoint.y, PixelFormat.TRANSLUCENT, SurfaceControl.HIDDEN);
-                } catch (OutOfResourcesException oore) {
-                    /* ignore */
-                }
-                mSurfaceControl = surfaceControl;
-                mSurfaceControl.setLayerStack(mWindowManager.getDefaultDisplay().getLayerStack());
-                mSurfaceControl.setLayer(mWindowManagerService.mPolicy.windowTypeToLayerLw(
-                        WindowManager.LayoutParams.TYPE_MAGNIFICATION_OVERLAY)
-                        * WindowManagerService.TYPE_LAYER_MULTIPLIER);
-                mSurfaceControl.setPosition(0, 0);
-                mSurface.copyFrom(mSurfaceControl);
-
-                TypedValue typedValue = new TypedValue();
-                context.getTheme().resolveAttribute(R.attr.colorActivatedHighlight,
-                        typedValue, true);
-                final int borderColor = context.getResources().getColor(typedValue.resourceId);
-
-                mPaint.setStyle(Paint.Style.STROKE);
-                mPaint.setStrokeWidth(mBorderWidth);
-                mPaint.setColor(borderColor);
-
-                Interpolator interpolator = new DecelerateInterpolator(2.5f);
-                final long longAnimationDuration = context.getResources().getInteger(
-                        com.android.internal.R.integer.config_longAnimTime);
-
-                mShowHideFrameAnimator = ObjectAnimator.ofInt(this, PROPERTY_NAME_ALPHA,
-                        MIN_ALPHA, MAX_ALPHA);
-                mShowHideFrameAnimator.setInterpolator(interpolator);
-                mShowHideFrameAnimator.setDuration(longAnimationDuration);
-                mInvalidated = true;
-            }
-
-            public void setShown(boolean shown, boolean animate) {
-                synchronized (mWindowManagerService.mWindowMap) {
-                    if (mShown == shown) {
-                        return;
-                    }
-                    mShown = shown;
-                    if (animate) {
-                        if (mShowHideFrameAnimator.isRunning()) {
-                            mShowHideFrameAnimator.reverse();
-                        } else {
-                            if (shown) {
-                                mShowHideFrameAnimator.start();
-                            } else {
-                                mShowHideFrameAnimator.reverse();
-                            }
-                        }
-                    } else {
-                        mShowHideFrameAnimator.cancel();
-                        if (shown) {
-                            setAlpha(MAX_ALPHA);
-                        } else {
-                            setAlpha(MIN_ALPHA);
-                        }
-                    }
-                    if (DEBUG_VIEWPORT_WINDOW) {
-                        Slog.i(LOG_TAG, "ViewportWindow shown: " + mShown);
-                    }
-                }
-            }
-
-            @SuppressWarnings("unused")
-            // Called reflectively from an animator.
-            public int getAlpha() {
-                synchronized (mWindowManagerService.mWindowMap) {
-                    return mAlpha;
-                }
-            }
-
-            public void setAlpha(int alpha) {
-                synchronized (mWindowManagerService.mWindowMap) {
-                    if (mAlpha == alpha) {
-                        return;
-                    }
-                    mAlpha = alpha;
-                    invalidate(null);
-                    if (DEBUG_VIEWPORT_WINDOW) {
-                        Slog.i(LOG_TAG, "ViewportWindow set alpha: " + alpha);
-                    }
-                }
-            }
-
-            public void setBounds(Region bounds) {
-                synchronized (mWindowManagerService.mWindowMap) {
-                    if (mBounds.equals(bounds)) {
-                        return;
-                    }
-                    mBounds.set(bounds);
-                    invalidate(mDirtyRect);
-                    if (DEBUG_VIEWPORT_WINDOW) {
-                        Slog.i(LOG_TAG, "ViewportWindow set bounds: " + bounds);
-                    }
-                }
-            }
-
-            public void updateSize() {
-                synchronized (mWindowManagerService.mWindowMap) {
-                    mWindowManager.getDefaultDisplay().getRealSize(mTempPoint);
-                    mSurfaceControl.setSize(mTempPoint.x, mTempPoint.y);
-                    invalidate(mDirtyRect);
-                }
-            }
-
-            public void invalidate(Rect dirtyRect) {
-                if (dirtyRect != null) {
-                    mDirtyRect.set(dirtyRect);
-                } else {
-                    mDirtyRect.setEmpty();
-                }
-                mInvalidated = true;
-                mWindowManagerService.scheduleAnimationLocked();
-            }
-
-            /** NOTE: This has to be called within a surface transaction. */
-            public void drawIfNeeded() {
-                synchronized (mWindowManagerService.mWindowMap) {
-                    if (!mInvalidated) {
-                        return;
-                    }
-                    mInvalidated = false;
-                    Canvas canvas = null;
-                    try {
-                        // Empty dirty rectangle means unspecified.
-                        if (mDirtyRect.isEmpty()) {
-                            mBounds.getBounds(mDirtyRect);
-                        }
-                        mDirtyRect.inset(- mHalfBorderWidth, - mHalfBorderWidth);
-                        canvas = mSurface.lockCanvas(mDirtyRect);
-                        if (DEBUG_VIEWPORT_WINDOW) {
-                            Slog.i(LOG_TAG, "Dirty rect: " + mDirtyRect);
-                        }
-                    } catch (IllegalArgumentException iae) {
-                        /* ignore */
-                    } catch (Surface.OutOfResourcesException oore) {
-                        /* ignore */
-                    }
-                    if (canvas == null) {
-                        return;
-                    }
-                    if (DEBUG_VIEWPORT_WINDOW) {
-                        Slog.i(LOG_TAG, "Bounds: " + mBounds);
-                    }
-                    canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
-                    mPaint.setAlpha(mAlpha);
-                    Path path = mBounds.getBoundaryPath();
-                    canvas.drawPath(path, mPaint);
-
-                    mSurface.unlockCanvasAndPost(canvas);
-
-                    if (mAlpha > 0) {
-                        mSurfaceControl.show();
-                    } else {
-                        mSurfaceControl.hide();
-                    }
-                }
-            }
-
-            public void releaseSurface() {
-                mSurfaceControl.release();
-                mSurface.release();
-            }
-        }
-    }
-
-    private static final class WindowStateInfo {
-        private static final int MAX_POOL_SIZE = 30;
-
-        private static final SimplePool<WindowStateInfo> sPool =
-                new SimplePool<WindowStateInfo>(MAX_POOL_SIZE);
-
-        private static final Region mTempRegion = new Region();
-
-        public WindowState mWindowState;
-        public final Rect mTouchableRegion = new Rect();
-
-        public static WindowStateInfo obtain(WindowState windowState) {
-            WindowStateInfo info = sPool.acquire();
-            if (info == null) {
-                info = new WindowStateInfo();
-            }
-            info.mWindowState = windowState;
-            windowState.getTouchableRegion(mTempRegion);
-            mTempRegion.getBounds(info.mTouchableRegion);
-            return info;
-        }
-
-        public void recycle() {
-            mWindowState = null;
-            mTouchableRegion.setEmpty();
-            sPool.release(this);
-        }
-    }
-
-    private class MyHandler extends Handler {
-        public static final int MESSAGE_NOTIFY_MAGNIFIED_BOUNDS_CHANGED = 1;
-        public static final int MESSAGE_NOTIFY_RECTANGLE_ON_SCREEN_REQUESTED = 2;
-        public static final int MESSAGE_NOTIFY_USER_CONTEXT_CHANGED = 3;
-        public static final int MESSAGE_NOTIFY_ROTATION_CHANGED = 4;
-        public static final int MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED = 5;
-
-        public MyHandler(Looper looper) {
-            super(looper);
-        }
-
-        @Override
-        public void handleMessage(Message message) {
-            switch (message.what) {
-                case MESSAGE_NOTIFY_MAGNIFIED_BOUNDS_CHANGED: {
-                    Region bounds = (Region) message.obj;
-                    try {
-                        mCallbacks.onMagnifedBoundsChanged(bounds);
-                    } catch (RemoteException re) {
-                        /* ignore */
-                    } finally {
-                        bounds.recycle();
-                    }
-                } break;
-                case MESSAGE_NOTIFY_RECTANGLE_ON_SCREEN_REQUESTED: {
-                    SomeArgs args = (SomeArgs) message.obj;
-                    final int left = args.argi1;
-                    final int top = args.argi2;
-                    final int right = args.argi3;
-                    final int bottom = args.argi4;
-                    try {
-                        mCallbacks.onRectangleOnScreenRequested(left, top, right, bottom);
-                    } catch (RemoteException re) {
-                        /* ignore */
-                    } finally {
-                        args.recycle();
-                    }
-                } break;
-                case MESSAGE_NOTIFY_USER_CONTEXT_CHANGED: {
-                    try {
-                        mCallbacks.onUserContextChanged();
-                    } catch (RemoteException re) {
-                        /* ignore */
-                    }
-                } break;
-                case MESSAGE_NOTIFY_ROTATION_CHANGED: {
-                    final int rotation = message.arg1;
-                    try {
-                        mCallbacks.onRotationChanged(rotation);
-                    } catch (RemoteException re) {
-                        /* ignore */
-                    }
-                } break;
-                case MESSAGE_SHOW_MAGNIFIED_REGION_BOUNDS_IF_NEEDED : {
-                    synchronized (mWindowManagerService.mWindowMap) {
-                        if (mMagnifedViewport.isMagnifyingLocked()) {
-                            mMagnifedViewport.setMagnifiedRegionBorderShownLocked(true, true);
-                            mWindowManagerService.scheduleAnimationLocked();
-                        }
-                    }
-                } break;
-            }
-        }
-    }
-}
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index a737939..edc7c93 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -33,7 +33,6 @@
 import android.view.Display;
 import android.view.DragEvent;
 import android.view.InputChannel;
-import android.view.Surface;
 import android.view.SurfaceControl;
 import android.view.View;
 import android.view.WindowManager;
diff --git a/services/core/java/com/android/server/wm/FakeWindowImpl.java b/services/core/java/com/android/server/wm/FakeWindowImpl.java
index 5a3471b..c18ea01 100644
--- a/services/core/java/com/android/server/wm/FakeWindowImpl.java
+++ b/services/core/java/com/android/server/wm/FakeWindowImpl.java
@@ -21,11 +21,9 @@
 
 import android.os.Looper;
 import android.os.Process;
-import android.util.Slog;
 import android.view.Display;
 import android.view.InputChannel;
 import android.view.InputEventReceiver;
-import android.view.InputQueue;
 import android.view.WindowManagerPolicy;
 
 public final class FakeWindowImpl implements WindowManagerPolicy.FakeWindow {
diff --git a/services/core/java/com/android/server/wm/InputMonitor.java b/services/core/java/com/android/server/wm/InputMonitor.java
index b27c8d6..f02c0e6 100644
--- a/services/core/java/com/android/server/wm/InputMonitor.java
+++ b/services/core/java/com/android/server/wm/InputMonitor.java
@@ -284,7 +284,7 @@
                 final boolean hasFocus = (child == mInputFocus);
                 final boolean isVisible = child.isVisibleLw();
                 final boolean hasWallpaper = (child == mService.mWallpaperTarget)
-                        && (type != WindowManager.LayoutParams.TYPE_KEYGUARD);
+                        && (privateFlags & WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD) == 0;
                 final boolean onDefaultDisplay = (child.getDisplayId() == Display.DEFAULT_DISPLAY);
 
                 // If there's a drag in progress and 'child' is a potential drop target,
diff --git a/services/core/java/com/android/server/wm/KeyguardDisableHandler.java b/services/core/java/com/android/server/wm/KeyguardDisableHandler.java
index 859df51..c1420a8 100644
--- a/services/core/java/com/android/server/wm/KeyguardDisableHandler.java
+++ b/services/core/java/com/android/server/wm/KeyguardDisableHandler.java
@@ -24,7 +24,6 @@
 import android.os.Message;
 import android.os.RemoteException;
 import android.os.TokenWatcher;
-import android.os.UserHandle;
 import android.util.Log;
 import android.util.Pair;
 import android.view.WindowManagerPolicy;
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index 0c68258..266527d 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -529,8 +529,9 @@
                 mAnimating |= mService.getDisplayContentLocked(displayId).animateDimLayers();
 
                 //TODO (multidisplay): Magnification is supported only for the default display.
-                if (mService.mDisplayMagnifier != null && displayId == Display.DEFAULT_DISPLAY) {
-                    mService.mDisplayMagnifier.drawMagnifiedRegionBorderIfNeededLocked();
+                if (mService.mAccessibilityController != null
+                        && displayId == Display.DEFAULT_DISPLAY) {
+                    mService.mAccessibilityController.drawMagnifiedRegionBorderIfNeededLocked();
                 }
             }
 
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 6cdbdeb..637beec 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -19,12 +19,12 @@
 import static android.view.WindowManager.LayoutParams.*;
 
 import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
-
 import android.app.AppOpsManager;
 import android.util.ArraySet;
 import android.util.TimeUtils;
 import android.view.IWindowId;
 
+import android.view.WindowContentFrameStats;
 import com.android.internal.app.IBatteryStats;
 import com.android.internal.policy.PolicyManager;
 import com.android.internal.policy.impl.PhoneWindowManager;
@@ -87,6 +87,7 @@
 import android.os.SystemClock;
 import android.os.SystemProperties;
 import android.os.Trace;
+import android.os.UserHandle;
 import android.os.WorkSource;
 import android.provider.Settings;
 import android.util.DisplayMetrics;
@@ -104,7 +105,6 @@
 import android.view.Gravity;
 import android.view.IApplicationToken;
 import android.view.IInputFilter;
-import android.view.IMagnificationCallbacks;
 import android.view.IOnKeyguardExitResult;
 import android.view.IRotationWatcher;
 import android.view.IWindow;
@@ -257,9 +257,6 @@
     /** Amount of time (in milliseconds) to delay before declaring a window freeze timeout. */
     static final int WINDOW_FREEZE_TIMEOUT_DURATION = 2000;
 
-    /** Amount of time (in milliseconds) to delay before declaring a starting window leaked. */
-    static final int STARTING_WINDOW_TIMEOUT_DURATION = 10000;
-
     /**
      * If true, the window manager will do its own custom freezing and general
      * management of the screen during rotation.
@@ -305,8 +302,16 @@
         }
     };
 
-    // Current user when multi-user is enabled. Don't show windows of non-current user.
+    /**
+     * Current user when multi-user is enabled. Don't show windows of
+     * non-current user. Also see mCurrentProfileIds.
+     */
     int mCurrentUserId;
+    /**
+     * Users that are profiles of the current user. These are also allowed to show windows
+     * on the current user.
+     */
+    int[] mCurrentProfileIds = new int[] {UserHandle.USER_OWNER};
 
     final Context mContext;
 
@@ -414,7 +419,7 @@
 
     IInputMethodManager mInputMethodManager;
 
-    DisplayMagnifier mDisplayMagnifier;
+    AccessibilityController mAccessibilityController;
 
     final SurfaceSession mFxSession;
     Watermark mWatermark;
@@ -444,10 +449,10 @@
     boolean mAltOrientation = false;
     class RotationWatcher {
         IRotationWatcher watcher;
-        IBinder.DeathRecipient dr;
+        IBinder.DeathRecipient deathRecipient;
         RotationWatcher(IRotationWatcher w, IBinder.DeathRecipient d) {
             watcher = w;
-            dr = d;
+            deathRecipient = d;
         }
     }
     ArrayList<RotationWatcher> mRotationWatchers = new ArrayList<RotationWatcher>();
@@ -620,6 +625,8 @@
 
     private final PointerEventDispatcher mPointerEventDispatcher;
 
+    private WindowContentFrameStats mTempWindowRenderStats;
+
     final class DragInputEventReceiver extends InputEventReceiver {
         public DragInputEventReceiver(InputChannel inputChannel, Looper looper) {
             super(inputChannel, looper);
@@ -1884,7 +1891,9 @@
                 int insertionIndex = 0;
                 if (visible && foundW != null) {
                     final int type = foundW.mAttrs.type;
-                    if (type == TYPE_KEYGUARD || type == TYPE_KEYGUARD_SCRIM) {
+                    final int privateFlags = foundW.mAttrs.privateFlags;
+                    if ((privateFlags & PRIVATE_FLAG_KEYGUARD) != 0
+                            || type == TYPE_KEYGUARD_SCRIM) {
                         insertionIndex = windows.indexOf(foundW);
                     }
                 }
@@ -2305,8 +2314,6 @@
                 token.appWindowToken.startingWindow = win;
                 if (DEBUG_STARTING_WINDOW) Slog.v (TAG, "addWindow: " + token.appWindowToken
                         + " startingWindow=" + win);
-                Message m = mH.obtainMessage(H.REMOVE_STARTING_TIMEOUT, token.appWindowToken);
-                mH.sendMessageDelayed(m, STARTING_WINDOW_TIMEOUT_DURATION);
             }
 
             boolean imMayMove = true;
@@ -2409,7 +2416,6 @@
     public void removeWindowLocked(Session session, WindowState win) {
         if (win.mAttrs.type == TYPE_APPLICATION_STARTING) {
             if (DEBUG_STARTING_WINDOW) Slog.d(TAG, "Starting window removed " + win);
-            removeStartingWindowTimeout(win.mAppToken);
         }
 
         if (localLOGV || DEBUG_FOCUS || DEBUG_FOCUS_LIGHT && win==mCurrentFocus) Slog.v(
@@ -2452,9 +2458,9 @@
                     win.mExiting = true;
                 }
                 //TODO (multidisplay): Magnification is supported only for the default display.
-                if (mDisplayMagnifier != null
+                if (mAccessibilityController != null
                         && win.getDisplayId() == Display.DEFAULT_DISPLAY) {
-                    mDisplayMagnifier.onWindowTransitionLocked(win, transit);
+                    mAccessibilityController.onWindowTransitionLocked(win, transit);
                 }
             }
             if (win.mExiting || win.mWinAnimator.isAnimating()) {
@@ -2554,7 +2560,6 @@
         if (atoken != null) {
             if (atoken.startingWindow == win) {
                 if (DEBUG_STARTING_WINDOW) Slog.v(TAG, "Nulling startingWindow " + win);
-                removeStartingWindowTimeout(atoken);
                 atoken.startingWindow = null;
             } else if (atoken.allAppWindows.size() == 0 && atoken.startingData != null) {
                 // If this is the last window and we had requested a starting
@@ -2773,11 +2778,12 @@
 
     public void onRectangleOnScreenRequested(IBinder token, Rect rectangle, boolean immediate) {
         synchronized (mWindowMap) {
-            if (mDisplayMagnifier != null) {
+            if (mAccessibilityController != null) {
                 WindowState window = mWindowMap.get(token);
                 //TODO (multidisplay): Magnification is supported only for the default display.
                 if (window != null && window.getDisplayId() == Display.DEFAULT_DISPLAY) {
-                    mDisplayMagnifier.onRectangleOnScreenRequestedLocked(rectangle, immediate);
+                    mAccessibilityController.onRectangleOnScreenRequestedLocked(rectangle,
+                            immediate);
                 }
             }
         }
@@ -3012,9 +3018,9 @@
                             winAnimator.destroySurfaceLocked();
                         }
                         //TODO (multidisplay): Magnification is supported only for the default
-                        if (mDisplayMagnifier != null
+                        if (mAccessibilityController != null
                                 && win.getDisplayId() == Display.DEFAULT_DISPLAY) {
-                            mDisplayMagnifier.onWindowTransitionLocked(win, transit);
+                            mAccessibilityController.onWindowTransitionLocked(win, transit);
                         }
                     }
                 }
@@ -3157,86 +3163,6 @@
         }
     }
 
-    @Override
-    public void getWindowFrame(IBinder token, Rect outBounds) {
-        if (!checkCallingPermission(android.Manifest.permission.RETRIEVE_WINDOW_INFO,
-                "getWindowInfo()")) {
-            throw new SecurityException("Requires RETRIEVE_WINDOW_INFO permission.");
-        }
-        synchronized (mWindowMap) {
-            WindowState windowState = mWindowMap.get(token);
-            if (windowState != null) {
-                outBounds.set(windowState.mFrame);
-            } else {
-                outBounds.setEmpty();
-            }
-        }
-    }
-
-    @Override
-    public void setMagnificationSpec(MagnificationSpec spec) {
-        if (!checkCallingPermission(android.Manifest.permission.MAGNIFY_DISPLAY,
-                "setMagnificationSpec()")) {
-            throw new SecurityException("Requires MAGNIFY_DISPLAY permission.");
-        }
-        synchronized (mWindowMap) {
-            if (mDisplayMagnifier != null) {
-                mDisplayMagnifier.setMagnificationSpecLocked(spec);
-            } else {
-                throw new IllegalStateException("Magnification callbacks not set!");
-            }
-        }
-        if (Binder.getCallingPid() != android.os.Process.myPid()) {
-            spec.recycle();
-        }
-    }
-
-    @Override
-    public MagnificationSpec getCompatibleMagnificationSpecForWindow(IBinder windowToken) {
-        if (!checkCallingPermission(android.Manifest.permission.MAGNIFY_DISPLAY,
-                "getCompatibleMagnificationSpecForWindow()")) {
-            throw new SecurityException("Requires MAGNIFY_DISPLAY permission.");
-        }
-        synchronized (mWindowMap) {
-            WindowState windowState = mWindowMap.get(windowToken);
-            if (windowState == null) {
-                return null;
-            }
-            MagnificationSpec spec = null;
-            if (mDisplayMagnifier != null) {
-                spec = mDisplayMagnifier.getMagnificationSpecForWindowLocked(windowState);
-            }
-            if ((spec == null || spec.isNop()) && windowState.mGlobalScale == 1.0f) {
-                return null;
-            }
-            spec = (spec == null) ? MagnificationSpec.obtain() : MagnificationSpec.obtain(spec);
-            spec.scale *= windowState.mGlobalScale;
-            return spec;
-        }
-    }
-
-    @Override
-    public void setMagnificationCallbacks(IMagnificationCallbacks callbacks) {
-        if (!checkCallingPermission(android.Manifest.permission.MAGNIFY_DISPLAY,
-                "setMagnificationCallbacks()")) {
-            throw new SecurityException("Requires MAGNIFY_DISPLAY permission.");
-        }
-        synchronized (mWindowMap) {
-            if (mDisplayMagnifier == null) {
-                mDisplayMagnifier = new DisplayMagnifier(this, callbacks);
-            } else {
-                if (callbacks == null) {
-                    if (mDisplayMagnifier != null) {
-                        mDisplayMagnifier.destroyLocked();
-                        mDisplayMagnifier = null;
-                    }
-                } else {
-                    throw new IllegalStateException("Magnification callbacks already set!");
-                }
-            }
-        }
-    }
-
     private boolean applyAnimationLocked(AppWindowToken atoken,
             WindowManager.LayoutParams lp, int transit, boolean enter) {
         // Only apply an animation if the display isn't frozen.  If it is
@@ -3249,7 +3175,22 @@
             final int height = displayInfo.appHeight;
             if (DEBUG_APP_TRANSITIONS || DEBUG_ANIM) Slog.v(TAG, "applyAnimation: atoken="
                     + atoken);
-            Animation a = mAppTransition.loadAnimation(lp, transit, enter, width, height);
+
+            // Determine the visible rect to calculate the thumbnail clip
+            WindowState win = atoken.findMainWindow();
+            Rect containingFrame = new Rect(0, 0, width, height);
+            Rect contentInsets = new Rect();
+            if (win != null) {
+                if (win.mContainingFrame != null) {
+                    containingFrame.set(win.mContainingFrame);
+                }
+                if (win.mContentInsets != null) {
+                    contentInsets.set(win.mContentInsets);
+                }
+            }
+
+            Animation a = mAppTransition.loadAnimation(lp, transit, enter, width, height,
+                    mCurConfiguration.orientation, containingFrame, contentInsets, mCurConfiguration);
             if (a != null) {
                 if (DEBUG_ANIM) {
                     RuntimeException e = null;
@@ -3416,8 +3357,8 @@
                             win.mWinAnimator.applyAnimationLocked(WindowManagerPolicy.TRANSIT_EXIT,
                                     false);
                             //TODO (multidisplay): Magnification is supported only for the default
-                            if (mDisplayMagnifier != null && win.isDefaultDisplay()) {
-                                mDisplayMagnifier.onWindowTransitionLocked(win,
+                            if (mAccessibilityController != null && win.isDefaultDisplay()) {
+                                mAccessibilityController.onWindowTransitionLocked(win,
                                         WindowManagerPolicy.TRANSIT_EXIT);
                             }
                             changed = true;
@@ -3902,22 +3843,22 @@
                     + " " + mAppTransition
                     + " alwaysKeepCurrent=" + alwaysKeepCurrent
                     + " Callers=" + Debug.getCallers(3));
-            if (okToDisplay()) {
-                if (!mAppTransition.isTransitionSet() || mAppTransition.isTransitionNone()) {
+            if (!mAppTransition.isTransitionSet() || mAppTransition.isTransitionNone()) {
+                mAppTransition.setAppTransition(transit);
+            } else if (!alwaysKeepCurrent) {
+                if (transit == AppTransition.TRANSIT_TASK_OPEN
+                        && mAppTransition.isTransitionEqual(
+                                AppTransition.TRANSIT_TASK_CLOSE)) {
+                    // Opening a new task always supersedes a close for the anim.
                     mAppTransition.setAppTransition(transit);
-                } else if (!alwaysKeepCurrent) {
-                    if (transit == AppTransition.TRANSIT_TASK_OPEN
-                            && mAppTransition.isTransitionEqual(
-                                    AppTransition.TRANSIT_TASK_CLOSE)) {
-                        // Opening a new task always supersedes a close for the anim.
-                        mAppTransition.setAppTransition(transit);
-                    } else if (transit == AppTransition.TRANSIT_ACTIVITY_OPEN
-                            && mAppTransition.isTransitionEqual(
-                                AppTransition.TRANSIT_ACTIVITY_CLOSE)) {
-                        // Opening a new activity always supersedes a close for the anim.
-                        mAppTransition.setAppTransition(transit);
-                    }
+                } else if (transit == AppTransition.TRANSIT_ACTIVITY_OPEN
+                        && mAppTransition.isTransitionEqual(
+                            AppTransition.TRANSIT_ACTIVITY_CLOSE)) {
+                    // Opening a new activity always supersedes a close for the anim.
+                    mAppTransition.setAppTransition(transit);
                 }
+            }
+            if (okToDisplay()) {
                 mAppTransition.prepare();
                 mStartingIconInTransition = false;
                 mSkipAppTransitionAnimation = false;
@@ -4049,7 +3990,6 @@
                         if (DEBUG_WINDOW_MOVEMENT || DEBUG_ADD_REMOVE || DEBUG_STARTING_WINDOW) {
                             Slog.v(TAG, "Removing starting window: " + startingWindow);
                         }
-                        removeStartingWindowTimeout(ttoken);
                         startingWindow.getWindowList().remove(startingWindow);
                         mWindowsChanged = true;
                         if (DEBUG_ADD_REMOVE) Slog.v(TAG,
@@ -4196,6 +4136,15 @@
         }
     }
 
+    public void removeAppStartingWindow(IBinder token) {
+        synchronized (mWindowMap) {
+            AppWindowToken wtoken = mTokenMap.get(token).appWindowToken;
+            if (wtoken.startingWindow != null) {
+                scheduleRemoveStartingWindow(wtoken);
+            }
+        }
+    }
+
     @Override
     public void setAppWillBeHidden(IBinder token) {
         if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,
@@ -4265,9 +4214,9 @@
                 }
                 WindowState window = wtoken.findMainWindow();
                 //TODO (multidisplay): Magnification is supported only for the default display.
-                if (window != null && mDisplayMagnifier != null
+                if (window != null && mAccessibilityController != null
                         && window.getDisplayId() == Display.DEFAULT_DISPLAY) {
-                    mDisplayMagnifier.onAppWindowTransitionLocked(window, transit);
+                    mAccessibilityController.onAppWindowTransitionLocked(window, transit);
                 }
                 changed = true;
             }
@@ -4287,9 +4236,9 @@
                             win.mWinAnimator.applyAnimationLocked(
                                     WindowManagerPolicy.TRANSIT_ENTER, true);
                             //TODO (multidisplay): Magnification is supported only for the default
-                            if (mDisplayMagnifier != null
+                            if (mAccessibilityController != null
                                     && win.getDisplayId() == Display.DEFAULT_DISPLAY) {
-                                mDisplayMagnifier.onWindowTransitionLocked(win,
+                                mAccessibilityController.onWindowTransitionLocked(win,
                                         WindowManagerPolicy.TRANSIT_ENTER);
                             }
                         }
@@ -4304,9 +4253,9 @@
                         win.mWinAnimator.applyAnimationLocked(
                                 WindowManagerPolicy.TRANSIT_EXIT, false);
                         //TODO (multidisplay): Magnification is supported only for the default
-                        if (mDisplayMagnifier != null
+                        if (mAccessibilityController != null
                                 && win.getDisplayId() == Display.DEFAULT_DISPLAY) {
-                            mDisplayMagnifier.onWindowTransitionLocked(win,
+                            mAccessibilityController.onWindowTransitionLocked(win,
                                     WindowManagerPolicy.TRANSIT_EXIT);
                         }
                     }
@@ -4643,21 +4592,11 @@
         scheduleRemoveStartingWindow(startingToken);
     }
 
-    void removeStartingWindowTimeout(AppWindowToken wtoken) {
-        if (wtoken != null) {
-            if (DEBUG_STARTING_WINDOW) Slog.v(TAG, Debug.getCallers(1) +
-                    ": Remove starting window timeout " + wtoken + (wtoken != null ?
-                    " startingWindow=" + wtoken.startingWindow : ""));
-            mH.removeMessages(H.REMOVE_STARTING_TIMEOUT, wtoken);
-        }
-    }
-
     void scheduleRemoveStartingWindow(AppWindowToken wtoken) {
         if (wtoken != null && wtoken.startingWindow != null) {
             if (DEBUG_STARTING_WINDOW) Slog.v(TAG, Debug.getCallers(1) +
                     ": Schedule remove starting " + wtoken + (wtoken != null ?
                     " startingWindow=" + wtoken.startingWindow : ""));
-            removeStartingWindowTimeout(wtoken);
             Message m = mH.obtainMessage(H.REMOVE_STARTING, wtoken);
             mH.sendMessage(m);
         }
@@ -5294,23 +5233,16 @@
         ShutdownThread.rebootSafeMode(mContext, confirm);
     }
 
-    @Override
-    public void setInputFilter(IInputFilter filter) {
-        if (!checkCallingPermission(android.Manifest.permission.FILTER_EVENTS, "setInputFilter()")) {
-            throw new SecurityException("Requires FILTER_EVENTS permission");
-        }
-        mInputManager.setInputFilter(filter);
-    }
-
-    @Override
-    public void setTouchExplorationEnabled(boolean enabled) {
-        mPolicy.setTouchExplorationEnabled(enabled);
-    }
-
-    public void setCurrentUser(final int newUserId) {
+    public void setCurrentProfileIds(final int[] currentProfileIds) {
         synchronized (mWindowMap) {
-            int oldUserId = mCurrentUserId;
+            mCurrentProfileIds = currentProfileIds;
+        }
+    }
+
+    public void setCurrentUser(final int newUserId, final int[] currentProfileIds) {
+        synchronized (mWindowMap) {
             mCurrentUserId = newUserId;
+            mCurrentProfileIds = currentProfileIds;
             mAppTransition.setCurrentUser(newUserId);
             mPolicy.setCurrentUserLw(newUserId);
 
@@ -5325,6 +5257,15 @@
         }
     }
 
+    /* Called by WindowState */
+    boolean isCurrentProfileLocked(int userId) {
+        if (userId == mCurrentUserId) return true;
+        for (int i = 0; i < mCurrentProfileIds.length; i++) {
+            if (mCurrentProfileIds[i] == userId) return true;
+        }
+        return false;
+    }
+
     public void enableScreenAfterBoot() {
         synchronized(mWindowMap) {
             if (DEBUG_BOOT) {
@@ -5350,6 +5291,13 @@
         performEnableScreen();
     }
 
+    @Override
+    public void enableScreenIfNeeded() {
+        synchronized (mWindowMap) {
+            enableScreenIfNeededLocked();
+        }
+    }
+
     void enableScreenIfNeededLocked() {
         if (DEBUG_BOOT) {
             RuntimeException here = new RuntimeException("here");
@@ -5414,18 +5362,6 @@
                 final int N = windows.size();
                 for (int i=0; i<N; i++) {
                     WindowState w = windows.get(i);
-                    if (w.mAttrs.type == TYPE_KEYGUARD) {
-                        // Only if there is a keyguard attached to the window manager
-                        // will we consider ourselves as having a keyguard.  If it
-                        // isn't attached, we don't know if it wants to be shown or
-                        // hidden.  If it is attached, we will say we have a keyguard
-                        // if the window doesn't want to be visible, because in that
-                        // case it explicitly doesn't want to be shown so we should
-                        // not delay turning the screen on for it.
-                        boolean vis = w.mViewVisibility == View.VISIBLE
-                                && w.mPolicyVisibility;
-                        haveKeyguard = !vis;
-                    }
                     if (w.isVisibleLw() && !w.mObscured && !w.isDrawnLw()) {
                         return;
                     }
@@ -5436,8 +5372,8 @@
                             haveApp = true;
                         } else if (w.mAttrs.type == TYPE_WALLPAPER) {
                             haveWallpaper = true;
-                        } else if (w.mAttrs.type == TYPE_KEYGUARD) {
-                            haveKeyguard = true;
+                        } else if (w.mAttrs.type == TYPE_STATUS_BAR) {
+                            haveKeyguard = mPolicy.isKeyguardDrawnLw();
                         }
                     }
                 }
@@ -5836,7 +5772,11 @@
                                 + " surfaceLayer=" + win.mWinAnimator.mSurfaceLayer);
                     }
                 }
-                rawss = SurfaceControl.screenshot(dw, dh, minLayer, maxLayer);
+                // TODO: Replace 'false' in the following line with a variable that indicates
+                // whether the screenshot should use the identity transformation matrix
+                // (e.g., enable it when taking a screenshot for recents, since we might be in
+                // the middle of the rotation animation, but don't want a rotated recent image).
+                rawss = SurfaceControl.screenshot(dw, dh, minLayer, maxLayer, false);
             }
         } while (!screenshotReady && retryCount <= MAX_SCREENSHOT_RETRIES);
         if (retryCount > MAX_SCREENSHOT_RETRIES)  Slog.i(TAG, "Screenshot max retries " +
@@ -6136,9 +6076,9 @@
         }
 
         //TODO (multidisplay): Magnification is supported only for the default display.
-        if (mDisplayMagnifier != null
+        if (mAccessibilityController != null
                 && displayContent.getDisplayId() == Display.DEFAULT_DISPLAY) {
-            mDisplayMagnifier.onRotationChangedLocked(getDefaultDisplayContentLocked(), rotation);
+            mAccessibilityController.onRotationChangedLocked(getDefaultDisplayContentLocked(), rotation);
         }
 
         return true;
@@ -6164,8 +6104,9 @@
                     for (int i=0; i<mRotationWatchers.size(); i++) {
                         if (watcherBinder == mRotationWatchers.get(i).watcher.asBinder()) {
                             RotationWatcher removed = mRotationWatchers.remove(i);
-                            if (removed != null) {
-                                removed.watcher.asBinder().unlinkToDeath(this, 0);
+                            IBinder binder = removed.watcher.asBinder();
+                            if (binder != null) {
+                                binder.unlinkToDeath(this, 0);
                             }
                             i--;
                         }
@@ -6194,10 +6135,11 @@
                 RotationWatcher rotationWatcher = mRotationWatchers.get(i);
                 if (watcherBinder == rotationWatcher.watcher.asBinder()) {
                     RotationWatcher removed = mRotationWatchers.remove(i);
-                    if (removed != null) {
-                        removed.watcher.asBinder().unlinkToDeath(removed.dr, 0);
-                        i--;
+                    IBinder binder = removed.watcher.asBinder();
+                    if (binder != null) {
+                        binder.unlinkToDeath(removed.deathRecipient, 0);
                     }
+                    i--;
                 }
             }
         }
@@ -7042,21 +6984,6 @@
         }
     }
 
-    @Override
-    public IBinder getFocusedWindowToken() {
-        if (!checkCallingPermission(android.Manifest.permission.RETRIEVE_WINDOW_INFO,
-                "getFocusedWindowToken()")) {
-            throw new SecurityException("Requires RETRIEVE_WINDOW_INFO permission.");
-        }
-        synchronized (mWindowMap) {
-            WindowState windowState = getFocusedWindowLocked();
-            if (windowState != null) {
-                return windowState.mClient.asBinder();
-            }
-            return null;
-        }
-    }
-
     private WindowState getFocusedWindow() {
         synchronized (mWindowMap) {
             return getFocusedWindowLocked();
@@ -7298,7 +7225,6 @@
                                             "Aborted starting " + wtoken
                                             + ": removed=" + wtoken.removed
                                             + " startingData=" + wtoken.startingData);
-                                    removeStartingWindowTimeout(wtoken);
                                     wtoken.startingWindow = null;
                                     wtoken.startingData = null;
                                     abort = true;
@@ -7323,11 +7249,6 @@
                     }
                 } break;
 
-                case REMOVE_STARTING_TIMEOUT: {
-                    final AppWindowToken wtoken = (AppWindowToken)msg.obj;
-                    Slog.e(TAG, "Starting window " + wtoken + " timed out");
-                    // Fall through.
-                }
                 case REMOVE_STARTING: {
                     final AppWindowToken wtoken = (AppWindowToken)msg.obj;
                     IBinder token = null;
@@ -8232,9 +8153,9 @@
         }
 
         //TODO (multidisplay): Magnification is supported only for the default display.
-        if (mDisplayMagnifier != null && anyLayerChanged
+        if (mAccessibilityController != null && anyLayerChanged
                 && windows.get(windows.size() - 1).getDisplayId() == Display.DEFAULT_DISPLAY) {
-            mDisplayMagnifier.onWindowLayersChangedLocked();
+            mAccessibilityController.onWindowLayersChangedLocked();
         }
     }
 
@@ -8411,7 +8332,7 @@
             // just don't display").
             if (!gone || !win.mHaveFrame || win.mLayoutNeeded
                     || ((win.isConfigChanged() || win.setInsetsChanged()) &&
-                            (win.mAttrs.type == TYPE_KEYGUARD ||
+                            ((win.mAttrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0 ||
                             win.mAppToken != null && win.mAppToken.layoutConfigChanges))
                     || win.mAttrs.type == TYPE_UNIVERSE_BACKGROUND) {
                 if (!win.mLayoutAttached) {
@@ -8739,11 +8660,12 @@
                 wtoken.deferClearAllDrawn = false;
             }
 
+            boolean useAlternateThumbnailAnimation = (mCurConfiguration.smallestScreenWidthDp < 600);
             AppWindowAnimator appAnimator =
                     topOpeningApp == null ? null : topOpeningApp.mAppAnimator;
             Bitmap nextAppTransitionThumbnail = mAppTransition.getNextAppTransitionThumbnail();
-            if (nextAppTransitionThumbnail != null && appAnimator != null
-                    && appAnimator.animation != null) {
+            if (!useAlternateThumbnailAnimation && nextAppTransitionThumbnail != null
+                    && appAnimator != null && appAnimator.animation != null) {
                 // This thumbnail animation is very special, we need to have
                 // an extra surface with the thumbnail included with the animation.
                 Rect dirty = new Rect(0, 0, nextAppTransitionThumbnail.getWidth(),
@@ -8767,8 +8689,8 @@
                     drawSurface.release();
                     appAnimator.thumbnailLayer = topOpeningLayer;
                     DisplayInfo displayInfo = getDefaultDisplayInfoLocked();
-                    Animation anim = mAppTransition.createThumbnailAnimationLocked(
-                            transit, true, true, displayInfo.appWidth, displayInfo.appHeight);
+                    Animation anim = mAppTransition.createThumbnailScaleAnimationLocked(
+                            displayInfo.appWidth, displayInfo.appHeight, transit);
                     appAnimator.thumbnailAnimation = anim;
                     anim.restrictDuration(MAX_ANIMATION_DURATION);
                     anim.scaleCurrentDuration(mTransitionAnimationScale);
@@ -8949,8 +8871,8 @@
             if (canBeSeen
                     && (type == TYPE_SYSTEM_DIALOG
                      || type == TYPE_RECENTS_OVERLAY
-                     || type == TYPE_KEYGUARD
-                     || type == TYPE_SYSTEM_ERROR)) {
+                     || type == TYPE_SYSTEM_ERROR
+                     || (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0)) {
                 mInnerFields.mSyswin = true;
             }
 
@@ -8963,7 +8885,7 @@
                     // content on secondary displays (by forcibly enabling mirroring unless
                     // there is other content we want to show) but still allow opaque
                     // keyguard dialogs to be shown.
-                    if (type == TYPE_DREAM || type == TYPE_KEYGUARD) {
+                    if (type == TYPE_DREAM || (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
                         mInnerFields.mObscureApplicationContentOnSecondaryDisplays = true;
                     }
                     mInnerFields.mDisplayHasContent = true;
@@ -9870,6 +9792,11 @@
             final WindowState oldFocus = mCurrentFocus;
             mCurrentFocus = newFocus;
             mLosingFocus.remove(newFocus);
+
+            if (mAccessibilityController != null) {
+                mAccessibilityController.onWindowFocusChangedLocked();
+            }
+
             int focusChanged = mPolicy.focusChangedLw(oldFocus, newFocus);
 
             if (imWindowChanged && oldFocus != mInputMethodWindow) {
@@ -10297,6 +10224,12 @@
         }
     }
 
+    public int getInputMethodWindowVisibleHeight() {
+        synchronized (mWindowMap) {
+            return mPolicy.getInputMethodWindowVisibleHeightLw();
+        }
+    }
+
     @Override
     public boolean hasNavigationBar() {
         return mPolicy.hasNavigationBar();
@@ -10312,6 +10245,51 @@
         return mSafeMode;
     }
 
+    @Override
+    public boolean clearWindowContentFrameStats(IBinder token) {
+        if (!checkCallingPermission(Manifest.permission.FRAME_STATS,
+                "clearWindowContentFrameStats()")) {
+            throw new SecurityException("Requires FRAME_STATS permission");
+        }
+        synchronized (mWindowMap) {
+            WindowState windowState = mWindowMap.get(token);
+            if (windowState == null) {
+                return false;
+            }
+            SurfaceControl surfaceControl = windowState.mWinAnimator.mSurfaceControl;
+            if (surfaceControl == null) {
+                return false;
+            }
+            return surfaceControl.clearContentFrameStats();
+        }
+    }
+
+    @Override
+    public WindowContentFrameStats getWindowContentFrameStats(IBinder token) {
+        if (!checkCallingPermission(Manifest.permission.FRAME_STATS,
+                "getWindowContentFrameStats()")) {
+            throw new SecurityException("Requires FRAME_STATS permission");
+        }
+        synchronized (mWindowMap) {
+            WindowState windowState = mWindowMap.get(token);
+            if (windowState == null) {
+                return null;
+            }
+            SurfaceControl surfaceControl = windowState.mWinAnimator.mSurfaceControl;
+            if (surfaceControl == null) {
+                return null;
+            }
+            if (mTempWindowRenderStats == null) {
+                mTempWindowRenderStats = new WindowContentFrameStats();
+            }
+            WindowContentFrameStats stats = mTempWindowRenderStats;
+            if (!surfaceControl.getContentFrameStats(stats)) {
+                return null;
+            }
+            return stats;
+        }
+    }
+
     void dumpPolicyLocked(PrintWriter pw, String[] args, boolean dumpAll) {
         pw.println("WINDOW MANAGER POLICY STATE (dumpsys window policy)");
         mPolicy.dump("    ", pw, args);
@@ -10989,5 +10967,100 @@
         public void requestTraversalFromDisplayManager() {
             requestTraversal();
         }
+
+        @Override
+        public void setMagnificationSpec(MagnificationSpec spec) {
+            synchronized (mWindowMap) {
+                if (mAccessibilityController != null) {
+                    mAccessibilityController.setMagnificationSpecLocked(spec);
+                } else {
+                    throw new IllegalStateException("Magnification callbacks not set!");
+                }
+            }
+            if (Binder.getCallingPid() != android.os.Process.myPid()) {
+                spec.recycle();
+            }
+        }
+
+        @Override
+        public MagnificationSpec getCompatibleMagnificationSpecForWindow(IBinder windowToken) {
+            synchronized (mWindowMap) {
+                WindowState windowState = mWindowMap.get(windowToken);
+                if (windowState == null) {
+                    return null;
+                }
+                MagnificationSpec spec = null;
+                if (mAccessibilityController != null) {
+                    spec = mAccessibilityController.getMagnificationSpecForWindowLocked(windowState);
+                }
+                if ((spec == null || spec.isNop()) && windowState.mGlobalScale == 1.0f) {
+                    return null;
+                }
+                spec = (spec == null) ? MagnificationSpec.obtain() : MagnificationSpec.obtain(spec);
+                spec.scale *= windowState.mGlobalScale;
+                return spec;
+            }
+        }
+
+        @Override
+        public void setMagnificationCallbacks(MagnificationCallbacks callbacks) {
+            synchronized (mWindowMap) {
+                if (mAccessibilityController == null) {
+                    mAccessibilityController = new AccessibilityController(
+                            WindowManagerService.this);
+                }
+                mAccessibilityController.setMagnificationCallbacksLocked(callbacks);
+                if (!mAccessibilityController.hasCallbacksLocked()) {
+                     mAccessibilityController = null;
+                }
+            }
+        }
+
+        @Override
+        public void setWindowsForAccessibilityCallback(WindowsForAccessibilityCallback callback) {
+            synchronized (mWindowMap) {
+                if (mAccessibilityController == null) {
+                    mAccessibilityController = new AccessibilityController(
+                            WindowManagerService.this);
+                }
+                mAccessibilityController.setWindowsForAccessibilityCallback(callback);
+                if (!mAccessibilityController.hasCallbacksLocked()) {
+                     mAccessibilityController = null;
+                }
+            }
+        }
+
+        @Override
+        public void setInputFilter(IInputFilter filter) {
+            mInputManager.setInputFilter(filter);
+        }
+
+        @Override
+        public IBinder getFocusedWindowToken() {
+            synchronized (mWindowMap) {
+                WindowState windowState = getFocusedWindowLocked();
+                if (windowState != null) {
+                    return windowState.mClient.asBinder();
+                }
+                return null;
+            }
+        }
+
+        @Override
+        public boolean isKeyguardLocked() {
+            return isKeyguardLocked();
+        }
+
+        @Override
+        public void getWindowFrame(IBinder token, Rect outBounds) {
+            synchronized (mWindowMap) {
+                WindowState windowState = mWindowMap.get(token);
+                if (windowState != null) {
+                    outBounds.set(windowState.mFrame);
+                } else {
+                    outBounds.setEmpty();
+                }
+            }
+        }
     }
 }
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index 9f3415e..4318b0e 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -23,12 +23,12 @@
 import static com.android.server.wm.WindowManagerService.DEBUG_VISIBILITY;
 
 import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
+import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_COMPATIBLE_WINDOW;
 import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
 import static android.view.WindowManager.LayoutParams.PRIVATE_FLAG_NO_MOVE_ANIMATION;
 import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
 import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD;
 import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
 
 import android.app.AppOpsManager;
@@ -375,17 +375,19 @@
                 mAttachedWindow.mChildWindows.add(this);
             } else {
                 for (int i = 0; i < children_size; i++) {
-                    WindowState child = mAttachedWindow.mChildWindows.get(i);
-                    if (mSubLayer < child.mSubLayer) {
+                    WindowState child = (WindowState)mAttachedWindow.mChildWindows.get(i);
+                    if (this.mSubLayer < child.mSubLayer) {
                         mAttachedWindow.mChildWindows.add(i, this);
                         break;
-                    } else if (mSubLayer > child.mSubLayer) {
+                    } else if (this.mSubLayer > child.mSubLayer) {
                         continue;
                     }
 
-                    if (mBaseLayer <= child.mBaseLayer) {
+                    if (this.mBaseLayer <= child.mBaseLayer) {
                         mAttachedWindow.mChildWindows.add(i, this);
                         break;
+                    } else {
+                        continue;
                     }
                 }
                 if (children_size == mAttachedWindow.mChildWindows.size()) {
@@ -1008,7 +1010,7 @@
                 && (mConfiguration == null
                         || (mConfiguration.diff(mService.mCurConfiguration) != 0));
 
-        if (mAttrs.type == TYPE_KEYGUARD) {
+        if ((mAttrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
             // Retain configuration changed status until resetConfiguration called.
             mConfigHasChanged |= configChanged;
             configChanged = mConfigHasChanged;
@@ -1247,7 +1249,7 @@
         }
 
         return win.mShowToOwnerOnly
-                && UserHandle.getUserId(win.mOwnerUid) != mService.mCurrentUserId;
+                && !mService.isCurrentProfileLocked(UserHandle.getUserId(win.mOwnerUid));
     }
 
     private static void applyInsets(Region outRegion, Rect frame, Rect inset) {
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index 1ff0afb..3c9d53e 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -113,6 +113,11 @@
     float mAlpha = 0;
     float mLastAlpha = 0;
 
+    boolean mHasClipRect;
+    Rect mClipRect = new Rect();
+    Rect mTmpClipRect = new Rect();
+    Rect mLastClipRect = new Rect();
+
     // Used to save animation distances between the time they are calculated and when they are
     // used.
     int mAnimDw;
@@ -957,9 +962,10 @@
             if (screenAnimation) {
                 tmpMatrix.postConcat(screenRotationAnimation.getEnterTransformation().getMatrix());
             }
+
             //TODO (multidisplay): Magnification is supported only for the default display.
-            if (mService.mDisplayMagnifier != null && displayId == Display.DEFAULT_DISPLAY) {
-                MagnificationSpec spec = mService.mDisplayMagnifier
+            if (mService.mAccessibilityController != null && displayId == Display.DEFAULT_DISPLAY) {
+                MagnificationSpec spec = mService.mAccessibilityController
                         .getMagnificationSpecForWindowLocked(mWin);
                 if (spec != null && !spec.isNop()) {
                     tmpMatrix.postScale(spec.scale, spec.scale);
@@ -991,6 +997,7 @@
             // transforming since it is more important to have that
             // animation be smooth.
             mShownAlpha = mAlpha;
+            mHasClipRect = false;
             if (!mService.mLimitedAlphaCompositing
                     || (!PixelFormat.formatHasAlpha(mWin.mAttrs.format)
                     || (mWin.isIdentityMatrix(mDsDx, mDtDx, mDsDy, mDtDy)
@@ -1004,6 +1011,10 @@
                 }
                 if (appTransformation != null) {
                     mShownAlpha *= appTransformation.getAlpha();
+                    if (appTransformation.hasClipRect()) {
+                        mClipRect.set(appTransformation.getClipRect());
+                        mHasClipRect = true;
+                    }
                 }
                 if (mAnimator.mUniverseBackground != null) {
                     mShownAlpha *= mAnimator.mUniverseBackground.mUniverseTransform.getAlpha();
@@ -1038,8 +1049,8 @@
                 && mWin.mBaseLayer < mAnimator.mAboveUniverseLayer);
         MagnificationSpec spec = null;
         //TODO (multidisplay): Magnification is supported only for the default display.
-        if (mService.mDisplayMagnifier != null && displayId == Display.DEFAULT_DISPLAY) {
-            spec = mService.mDisplayMagnifier.getMagnificationSpecForWindowLocked(mWin);
+        if (mService.mAccessibilityController != null && displayId == Display.DEFAULT_DISPLAY) {
+            spec = mService.mAccessibilityController.getMagnificationSpecForWindowLocked(mWin);
         }
         if (applyUniverseTransformation || spec != null) {
             final Rect frame = mWin.mFrame;
@@ -1155,15 +1166,32 @@
             applyDecorRect(w.mDecorFrame);
         }
 
-        if (!w.mSystemDecorRect.equals(w.mLastSystemDecorRect)) {
-            w.mLastSystemDecorRect.set(w.mSystemDecorRect);
+        // By default, the clip rect is the system decor rect
+        Rect clipRect = w.mSystemDecorRect;
+        if (mHasClipRect) {
+
+            // If we have an animated clip rect, intersect it with the system decor rect
+            // NOTE: We are adding a temporary workaround due to the status bar not always reporting
+            // the correct system decor rect.  In such cases, we take into account the specified
+            // content insets as well.
+            int offsetTop = Math.max(w.mSystemDecorRect.top, w.mContentInsets.top);
+            mTmpClipRect.set(w.mSystemDecorRect);
+            mTmpClipRect.offset(0, -offsetTop);
+            mTmpClipRect.intersect(mClipRect);
+            mTmpClipRect.offset(0, offsetTop);
+            clipRect = mTmpClipRect;
+
+        }
+
+        if (!clipRect.equals(mLastClipRect)) {
+            mLastClipRect.set(clipRect);
             try {
                 if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(w,
-                        "CROP " + w.mSystemDecorRect.toShortString(), null);
-                mSurfaceControl.setWindowCrop(w.mSystemDecorRect);
+                        "CROP " + clipRect.toShortString(), null);
+                mSurfaceControl.setWindowCrop(clipRect);
             } catch (RuntimeException e) {
                 Slog.w(TAG, "Error setting crop surface of " + w
-                        + " crop=" + w.mSystemDecorRect.toShortString(), e);
+                        + " crop=" + clipRect.toShortString(), e);
                 if (!recoveringMemory) {
                     mService.reclaimSomeSurfaceMemoryLocked(this, "crop", true);
                 }
@@ -1308,8 +1336,8 @@
                     mSurfaceLayer = mAnimLayer;
                     mSurfaceControl.setLayer(mAnimLayer);
                     mSurfaceControl.setMatrix(
-                        mDsDx*w.mHScale, mDtDx*w.mVScale,
-                        mDsDy*w.mHScale, mDtDy*w.mVScale);
+                            mDsDx * w.mHScale, mDtDx * w.mVScale,
+                            mDsDy * w.mHScale, mDtDy * w.mVScale);
 
                     if (mLastHidden && mDrawState == HAS_DRAWN) {
                         if (WindowManagerService.SHOW_TRANSACTIONS) WindowManagerService.logSurface(w,
@@ -1571,9 +1599,9 @@
         }
         applyAnimationLocked(transit, true);
         //TODO (multidisplay): Magnification is supported only for the default display.
-        if (mService.mDisplayMagnifier != null
+        if (mService.mAccessibilityController != null
                 && mWin.getDisplayId() == Display.DEFAULT_DISPLAY) {
-            mService.mDisplayMagnifier.onWindowTransitionLocked(mWin, transit);
+            mService.mAccessibilityController.onWindowTransitionLocked(mWin, transit);
         }
     }
 
diff --git a/services/core/jni/Android.mk b/services/core/jni/Android.mk
index 0843e94..51583a5 100644
--- a/services/core/jni/Android.mk
+++ b/services/core/jni/Android.mk
@@ -2,13 +2,18 @@
 # files
 LOCAL_REL_DIR := core/jni
 
+LOCAL_CFLAGS += -Wno-unused-parameter
+
 LOCAL_SRC_FILES += \
     $(LOCAL_REL_DIR)/com_android_server_AlarmManagerService.cpp \
+    $(LOCAL_REL_DIR)/com_android_server_am_BatteryStatsService.cpp \
     $(LOCAL_REL_DIR)/com_android_server_AssetAtlasService.cpp \
     $(LOCAL_REL_DIR)/com_android_server_connectivity_Vpn.cpp \
     $(LOCAL_REL_DIR)/com_android_server_ConsumerIrService.cpp \
     $(LOCAL_REL_DIR)/com_android_server_dreams_McuHal.cpp \
+    $(LOCAL_REL_DIR)/com_android_server_hdmi_HdmiCecController.cpp \
     $(LOCAL_REL_DIR)/com_android_server_hdmi_HdmiCecService.cpp \
+    $(LOCAL_REL_DIR)/com_android_server_hdmi_HdmiMhlController.cpp \
     $(LOCAL_REL_DIR)/com_android_server_input_InputApplicationHandle.cpp \
     $(LOCAL_REL_DIR)/com_android_server_input_InputManagerService.cpp \
     $(LOCAL_REL_DIR)/com_android_server_input_InputWindowHandle.cpp \
@@ -31,7 +36,6 @@
     frameworks/base/libs \
     frameworks/base/core/jni \
     frameworks/native/services \
-    external/skia/include/core \
     libcore/include \
     libcore/include/libsuspend \
 	$(call include-path-for, libhardware)/hardware \
@@ -49,6 +53,7 @@
     libutils \
     libui \
     libinput \
+    libinputflinger \
     libinputservice \
     libsensorservice \
     libskia \
diff --git a/services/core/jni/com_android_server_UsbHostManager.cpp b/services/core/jni/com_android_server_UsbHostManager.cpp
index fc6de60..bc866d3 100644
--- a/services/core/jni/com_android_server_UsbHostManager.cpp
+++ b/services/core/jni/com_android_server_UsbHostManager.cpp
@@ -41,7 +41,11 @@
     jmethodID mConstructor;
 } gParcelFileDescriptorOffsets;
 
-static jmethodID method_usbDeviceAdded;
+static jmethodID method_beginUsbDeviceAdded;
+static jmethodID method_addUsbConfiguration;
+static jmethodID method_addUsbInterface;
+static jmethodID method_addUsbEndpoint;
+static jmethodID method_endUsbDeviceAdded;
 static jmethodID method_usbDeviceRemoved;
 
 static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
@@ -68,64 +72,69 @@
     Vector<int> endpointValues;
     const usb_device_descriptor* deviceDesc = usb_device_get_device_descriptor(device);
 
-    uint16_t vendorId = usb_device_get_vendor_id(device);
-    uint16_t productId = usb_device_get_product_id(device);
-    uint8_t deviceClass = deviceDesc->bDeviceClass;
-    uint8_t deviceSubClass = deviceDesc->bDeviceSubClass;
-    uint8_t protocol = deviceDesc->bDeviceProtocol;
     char *manufacturer = usb_device_get_manufacturer_name(device);
     char *product = usb_device_get_product_name(device);
     char *serial = usb_device_get_serial(device);
 
-    usb_descriptor_iter_init(device, &iter);
-
-    while ((desc = usb_descriptor_iter_next(&iter)) != NULL) {
-        if (desc->bDescriptorType == USB_DT_INTERFACE) {
-            struct usb_interface_descriptor *interface = (struct usb_interface_descriptor *)desc;
-
-            // push class, subclass, protocol and number of endpoints into interfaceValues vector
-            interfaceValues.add(interface->bInterfaceNumber);
-            interfaceValues.add(interface->bInterfaceClass);
-            interfaceValues.add(interface->bInterfaceSubClass);
-            interfaceValues.add(interface->bInterfaceProtocol);
-            interfaceValues.add(interface->bNumEndpoints);
-        } else if (desc->bDescriptorType == USB_DT_ENDPOINT) {
-            struct usb_endpoint_descriptor *endpoint = (struct usb_endpoint_descriptor *)desc;
-
-            // push address, attributes, max packet size and interval into endpointValues vector
-            endpointValues.add(endpoint->bEndpointAddress);
-            endpointValues.add(endpoint->bmAttributes);
-            endpointValues.add(__le16_to_cpu(endpoint->wMaxPacketSize));
-            endpointValues.add(endpoint->bInterval);
-        }
-    }
-
-    usb_device_close(device);
-
-    // handle generic device notification
-    int length = interfaceValues.size();
-    jintArray interfaceArray = env->NewIntArray(length);
-    env->SetIntArrayRegion(interfaceArray, 0, length, interfaceValues.array());
-
-    length = endpointValues.size();
-    jintArray endpointArray = env->NewIntArray(length);
-    env->SetIntArrayRegion(endpointArray, 0, length, endpointValues.array());
-
     jstring deviceName = env->NewStringUTF(devname);
     jstring manufacturerName = env->NewStringUTF(manufacturer);
     jstring productName = env->NewStringUTF(product);
     jstring serialNumber = env->NewStringUTF(serial);
-    env->CallVoidMethod(thiz, method_usbDeviceAdded,
-            deviceName, vendorId, productId, deviceClass,
-            deviceSubClass, protocol, manufacturerName,
-            productName, serialNumber, interfaceArray, endpointArray);
 
-    env->DeleteLocalRef(interfaceArray);
-    env->DeleteLocalRef(endpointArray);
+    jboolean result = env->CallBooleanMethod(thiz, method_beginUsbDeviceAdded,
+            deviceName, usb_device_get_vendor_id(device), usb_device_get_product_id(device),
+            deviceDesc->bDeviceClass, deviceDesc->bDeviceSubClass, deviceDesc->bDeviceProtocol,
+            manufacturerName, productName, serialNumber);
+
     env->DeleteLocalRef(serialNumber);
     env->DeleteLocalRef(productName);
     env->DeleteLocalRef(manufacturerName);
     env->DeleteLocalRef(deviceName);
+    free(manufacturer);
+    free(product);
+    free(serial);
+
+    if (!result) goto fail;
+
+    usb_descriptor_iter_init(device, &iter);
+
+    while ((desc = usb_descriptor_iter_next(&iter)) != NULL) {
+        if (desc->bDescriptorType == USB_DT_CONFIG) {
+            struct usb_config_descriptor *config = (struct usb_config_descriptor *)desc;
+            char *name = usb_device_get_string(device, config->iConfiguration);
+            jstring configName = env->NewStringUTF(name);
+
+            env->CallVoidMethod(thiz, method_addUsbConfiguration,
+                    config->bConfigurationValue, configName, config->bmAttributes,
+                    config->bMaxPower);
+
+            env->DeleteLocalRef(configName);
+            free(name);
+        } else if (desc->bDescriptorType == USB_DT_INTERFACE) {
+            struct usb_interface_descriptor *interface = (struct usb_interface_descriptor *)desc;
+            char *name = usb_device_get_string(device, interface->iInterface);
+            jstring interfaceName = env->NewStringUTF(name);
+
+            env->CallVoidMethod(thiz, method_addUsbInterface,
+                    interface->bInterfaceNumber, interfaceName, interface->bAlternateSetting,
+                    interface->bInterfaceClass, interface->bInterfaceSubClass,
+                    interface->bInterfaceProtocol);
+
+            env->DeleteLocalRef(interfaceName);
+            free(name);
+        } else if (desc->bDescriptorType == USB_DT_ENDPOINT) {
+            struct usb_endpoint_descriptor *endpoint = (struct usb_endpoint_descriptor *)desc;
+
+            env->CallVoidMethod(thiz, method_addUsbEndpoint,
+                    endpoint->bEndpointAddress, endpoint->bmAttributes,
+                    __le16_to_cpu(endpoint->wMaxPacketSize), endpoint->bInterval);
+        }
+    }
+
+    env->CallVoidMethod(thiz, method_endUsbDeviceAdded);
+
+fail:
+    usb_device_close(device);
     checkAndClearExceptionFromCallback(env, __FUNCTION__);
 
     return 0;
@@ -191,12 +200,36 @@
         ALOGE("Can't find com/android/server/usb/UsbHostManager");
         return -1;
     }
-    method_usbDeviceAdded = env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[I[I)V");
-    if (method_usbDeviceAdded == NULL) {
-        ALOGE("Can't find usbDeviceAdded");
+    method_beginUsbDeviceAdded = env->GetMethodID(clazz, "beginUsbDeviceAdded",
+            "(Ljava/lang/String;IIIIILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z");
+    if (method_beginUsbDeviceAdded == NULL) {
+        ALOGE("Can't find beginUsbDeviceAdded");
         return -1;
     }
-    method_usbDeviceRemoved = env->GetMethodID(clazz, "usbDeviceRemoved", "(Ljava/lang/String;)V");
+    method_addUsbConfiguration = env->GetMethodID(clazz, "addUsbConfiguration",
+            "(ILjava/lang/String;II)V");
+    if (method_addUsbConfiguration == NULL) {
+        ALOGE("Can't find addUsbConfiguration");
+        return -1;
+    }
+    method_addUsbInterface = env->GetMethodID(clazz, "addUsbInterface",
+            "(ILjava/lang/String;IIII)V");
+    if (method_addUsbInterface == NULL) {
+        ALOGE("Can't find addUsbInterface");
+        return -1;
+    }
+    method_addUsbEndpoint = env->GetMethodID(clazz, "addUsbEndpoint", "(IIII)V");
+    if (method_addUsbEndpoint == NULL) {
+        ALOGE("Can't find addUsbEndpoint");
+        return -1;
+    }
+    method_endUsbDeviceAdded = env->GetMethodID(clazz, "endUsbDeviceAdded", "()V");
+    if (method_endUsbDeviceAdded == NULL) {
+        ALOGE("Can't find endUsbDeviceAdded");
+        return -1;
+    }
+    method_usbDeviceRemoved = env->GetMethodID(clazz, "usbDeviceRemoved",
+            "(Ljava/lang/String;)V");
     if (method_usbDeviceRemoved == NULL) {
         ALOGE("Can't find usbDeviceRemoved");
         return -1;
@@ -205,7 +238,8 @@
     clazz = env->FindClass("android/os/ParcelFileDescriptor");
     LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
     gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
-    gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V");
+    gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>",
+            "(Ljava/io/FileDescriptor;)V");
     LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL,
                  "Unable to find constructor for android.os.ParcelFileDescriptor");
 
diff --git a/services/core/jni/com_android_server_am_BatteryStatsService.cpp b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
new file mode 100644
index 0000000..da4cc48
--- /dev/null
+++ b/services/core/jni/com_android_server_am_BatteryStatsService.cpp
@@ -0,0 +1,201 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define LOG_TAG "BatteryStatsService"
+//#define LOG_NDEBUG 0
+
+#include <android_runtime/AndroidRuntime.h>
+#include <jni.h>
+
+#include <ScopedLocalRef.h>
+#include <ScopedPrimitiveArray.h>
+
+#include <cutils/log.h>
+#include <utils/misc.h>
+#include <utils/Log.h>
+#include <hardware/hardware.h>
+#include <suspend/autosuspend.h>
+
+#include <stdio.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <semaphore.h>
+#include <stddef.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+namespace android
+{
+
+#define LAST_RESUME_REASON "/sys/kernel/wakeup_reasons/last_resume_reason"
+#define MAX_REASON_SIZE 512
+
+static bool wakeup_init = false;
+static sem_t wakeup_sem;
+
+static void wakeup_callback(void)
+{
+    ALOGV("In wakeup_callback");
+    int ret = sem_post(&wakeup_sem);
+    if (ret < 0) {
+        char buf[80];
+        strerror_r(errno, buf, sizeof(buf));
+        ALOGE("Error posting wakeup sem: %s\n", buf);
+    }
+}
+
+static jint nativeWaitWakeup(JNIEnv *env, jobject clazz, jintArray outIrqs,
+        jobjectArray outReasons)
+{
+    bool first_time = false;
+
+    if (outIrqs == NULL || outReasons == NULL) {
+        jniThrowException(env, "java/lang/NullPointerException", "null argument");
+        return -1;
+    }
+
+    // Register our wakeup callback if not yet done.
+    if (!wakeup_init) {
+        wakeup_init = true;
+        ALOGV("Creating semaphore...");
+        int ret = sem_init(&wakeup_sem, 0, 0);
+        if (ret < 0) {
+            char buf[80];
+            strerror_r(errno, buf, sizeof(buf));
+            ALOGE("Error creating semaphore: %s\n", buf);
+            jniThrowException(env, "java/lang/IllegalStateException", buf);
+            return -1;
+        }
+        ALOGV("Registering callback...");
+        set_wakeup_callback(&wakeup_callback);
+        // First time through, we will just drain the current wakeup reasons.
+        first_time = true;
+    } else {
+        // On following calls, we need to wait for wakeup.
+        ALOGV("Waiting for wakeup...");
+        int ret = sem_wait(&wakeup_sem);
+        if (ret < 0) {
+            char buf[80];
+            strerror_r(errno, buf, sizeof(buf));
+            ALOGE("Error waiting on semaphore: %s\n", buf);
+            // Return 0 here to let it continue looping but not return results.
+            return 0;
+        }
+    }
+
+    FILE *fp = fopen(LAST_RESUME_REASON, "r");
+    if (fp == NULL) {
+        ALOGE("Failed to open %s", LAST_RESUME_REASON);
+        return -1;
+    }
+
+    int numOut = env->GetArrayLength(outIrqs);
+    ScopedIntArrayRW irqs(env, outIrqs);
+
+    ALOGV("Reading up to %d wakeup reasons", numOut);
+
+    char mergedreason[MAX_REASON_SIZE];
+    char* mergedreasonpos = mergedreason;
+    int remainreasonlen = MAX_REASON_SIZE;
+    int firstirq = 0;
+    char reasonline[128];
+    int i = 0;
+    while (fgets(reasonline, sizeof(reasonline), fp) != NULL && i < numOut) {
+        char* pos = reasonline;
+        char* endPos;
+        // First field is the index.
+        int irq = (int)strtol(pos, &endPos, 10);
+        if (pos == endPos) {
+            // Ooops.
+            ALOGE("Bad reason line: %s", reasonline);
+            continue;
+        }
+        pos = endPos;
+        // Skip whitespace; rest of the buffer is the reason string.
+        while (*pos == ' ') {
+            pos++;
+        }
+        // Chop newline at end.
+        char* endpos = pos;
+        while (*endpos != 0) {
+            if (*endpos == '\n') {
+                *endpos = 0;
+                break;
+            }
+            endpos++;
+        }
+        // For now we are not separating out the first irq.
+        // This is because in practice there are always multiple
+        // lines of wakeup reasons, so it is better to just treat
+        // them all together as a single string.
+        if (false && i == 0) {
+            firstirq = irq;
+        } else {
+            int len = snprintf(mergedreasonpos, remainreasonlen,
+                    i == 0 ? "%d" : ":%d", irq);
+            if (len >= 0 && len < remainreasonlen) {
+                mergedreasonpos += len;
+                remainreasonlen -= len;
+            }
+        }
+        int len = snprintf(mergedreasonpos, remainreasonlen, ":%s", pos);
+        if (len >= 0 && len < remainreasonlen) {
+            mergedreasonpos += len;
+            remainreasonlen -= len;
+        }
+        // For now it is better to combine all of these in to one entry in the
+        // battery history.  In the future, it might be nice to figure out a way
+        // to efficiently store multiple lines as a single entry in the history.
+        //irqs[i] = irq;
+        //ScopedLocalRef<jstring> reasonString(env, env->NewStringUTF(pos));
+        //env->SetObjectArrayElement(outReasons, i, reasonString.get());
+        //ALOGV("Wakeup reason #%d: irw %d reason %s", i, irq, pos);
+        i++;
+    }
+
+    ALOGV("Got %d reasons", i);
+    if (first_time) {
+        i = 0;
+    }
+    if (i > 0) {
+        irqs[0] = firstirq;
+        *mergedreasonpos = 0;
+        ScopedLocalRef<jstring> reasonString(env, env->NewStringUTF(mergedreason));
+        env->SetObjectArrayElement(outReasons, 0, reasonString.get());
+        i = 1;
+    }
+
+    if (fclose(fp) != 0) {
+        ALOGE("Failed to close %s", LAST_RESUME_REASON);
+        return -1;
+    }
+
+    return first_time ? 0 : i;
+}
+
+static JNINativeMethod method_table[] = {
+    { "nativeWaitWakeup", "([I[Ljava/lang/String;)I", (void*)nativeWaitWakeup },
+};
+
+int register_android_server_BatteryStatsService(JNIEnv *env)
+{
+    return jniRegisterNativeMethods(env, "com/android/server/am/BatteryStatsService",
+            method_table, NELEM(method_table));
+}
+
+};
diff --git a/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
new file mode 100644
index 0000000..527216d
--- /dev/null
+++ b/services/core/jni/com_android_server_hdmi_HdmiCecController.cpp
@@ -0,0 +1,199 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#define LOG_TAG "HdmiCecControllerJni"
+
+#define LOG_NDEBUG 1
+
+#include "JNIHelp.h"
+#include "ScopedPrimitiveArray.h"
+
+#include <string>
+
+#include <android_runtime/AndroidRuntime.h>
+#include <android_runtime/Log.h>
+#include <hardware/hdmi_cec.h>
+#include <sys/param.h>
+
+namespace android {
+
+static struct {
+    jmethodID handleIncomingCecCommand;
+    jmethodID handleHotplug;
+} gHdmiCecControllerClassInfo;
+
+class HdmiCecController {
+public:
+    HdmiCecController(hdmi_cec_device_t* device, jobject callbacksObj);
+
+    void init();
+
+    // Send message to other device. Note that it runs in IO thread.
+    int sendMessage(const cec_message_t& message);
+
+private:
+    // Propagate the message up to Java layer.
+    void propagateCecCommand(const cec_message_t& message);
+    void propagateHotplugEvent(const hotplug_event_t& event);
+
+    static void onReceived(const hdmi_event_t* event, void* arg);
+    static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName);
+
+    hdmi_cec_device_t* mDevice;
+    jobject mCallbacksObj;
+};
+
+HdmiCecController::HdmiCecController(hdmi_cec_device_t* device, jobject callbacksObj) :
+    mDevice(device),
+    mCallbacksObj(callbacksObj) {
+}
+
+void HdmiCecController::init() {
+    mDevice->register_event_callback(mDevice, HdmiCecController::onReceived, this);
+}
+
+void HdmiCecController::propagateCecCommand(const cec_message_t& message) {
+    jint srcAddr = message.initiator;
+    jint dstAddr = message.destination;
+    JNIEnv* env = AndroidRuntime::getJNIEnv();
+    jbyteArray body = env->NewByteArray(message.length);
+    const jbyte* bodyPtr = reinterpret_cast<const jbyte *>(message.body);
+    env->SetByteArrayRegion(body, 0, message.length, bodyPtr);
+
+    env->CallVoidMethod(mCallbacksObj,
+            gHdmiCecControllerClassInfo.handleIncomingCecCommand,
+            srcAddr, dstAddr, body);
+    env->DeleteLocalRef(body);
+
+    checkAndClearExceptionFromCallback(env, __FUNCTION__);
+}
+
+void HdmiCecController::propagateHotplugEvent(const hotplug_event_t& event) {
+    JNIEnv* env = AndroidRuntime::getJNIEnv();
+    env->CallVoidMethod(mCallbacksObj,
+            gHdmiCecControllerClassInfo.handleHotplug, event.connected);
+
+    checkAndClearExceptionFromCallback(env, __FUNCTION__);
+}
+
+int HdmiCecController::sendMessage(const cec_message_t& message) {
+    // TODO: propagate send_message's return value.
+    return mDevice->send_message(mDevice, &message);
+}
+
+// static
+void HdmiCecController::checkAndClearExceptionFromCallback(JNIEnv* env,
+        const char* methodName) {
+    if (env->ExceptionCheck()) {
+        ALOGE("An exception was thrown by callback '%s'.", methodName);
+        LOGE_EX(env);
+        env->ExceptionClear();
+    }
+}
+
+// static
+void HdmiCecController::onReceived(const hdmi_event_t* event, void* arg) {
+    HdmiCecController* controller = static_cast<HdmiCecController*>(arg);
+    if (controller == NULL) {
+        return;
+    }
+
+    switch (event->type) {
+    case HDMI_EVENT_CEC_MESSAGE:
+        controller->propagateCecCommand(event->cec);
+        break;
+    case HDMI_EVENT_HOT_PLUG:
+        controller->propagateHotplugEvent(event->hotplug);
+        break;
+    default:
+        ALOGE("Unsupported event type: %d", event->type);
+        break;
+    }
+}
+
+//------------------------------------------------------------------------------
+#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
+        var = env->GetMethodID(clazz, methodName, methodDescriptor); \
+        LOG_FATAL_IF(! var, "Unable to find method " methodName);
+
+static jlong nativeInit(JNIEnv* env, jclass clazz, jobject callbacksObj) {
+    int err;
+    // If use same hardware module id between HdmiCecService and
+    // HdmiControlSservice it may conflict and cause abnormal state of HAL.
+    // TODO: use HDMI_CEC_HARDWARE_MODULE_ID of hdmi_cec.h for module id
+    //       once migration to HdmiControlService is done.
+    hw_module_t* module;
+    err = hw_get_module("hdmi_cec_module",
+            const_cast<const hw_module_t **>(&module));
+    if (err != 0) {
+        ALOGE("Error acquiring hardware module: %d", err);
+        return 0;
+    }
+    hw_device_t* device;
+    // TODO: use HDMI_CEC_HARDWARE_INTERFACE of hdmi_cec.h for interface name
+    //       once migration to HdmiControlService is done.
+    err = module->methods->open(module, "hdmi_cec_module_hw_if", &device);
+    if (err != 0) {
+        ALOGE("Error opening hardware module: %d", err);
+        return 0;
+    }
+
+    HdmiCecController* controller = new HdmiCecController(
+            reinterpret_cast<hdmi_cec_device*>(device),
+            env->NewGlobalRef(callbacksObj));
+    controller->init();
+
+    GET_METHOD_ID(gHdmiCecControllerClassInfo.handleIncomingCecCommand, clazz,
+            "handleIncomingCecCommand", "(II[B)V");
+    GET_METHOD_ID(gHdmiCecControllerClassInfo.handleHotplug, clazz,
+            "handleHotplug", "(Z)V");
+
+    return reinterpret_cast<jlong>(controller);
+}
+
+static jint nativeSendCecCommand(JNIEnv* env, jclass clazz, jlong controllerPtr,
+        jint srcAddr, jint dstAddr, jbyteArray body) {
+    cec_message_t message;
+    message.initiator = static_cast<cec_logical_address_t>(srcAddr);
+    message.destination = static_cast<cec_logical_address_t>(dstAddr);
+
+    jsize len = env->GetArrayLength(body);
+    message.length = MIN(len, CEC_MESSAGE_BODY_MAX_LENGTH);
+    ScopedByteArrayRO bodyPtr(env, body);
+    std::memcpy(message.body, bodyPtr.get(), len);
+
+    HdmiCecController* controller =
+            reinterpret_cast<HdmiCecController*>(controllerPtr);
+    return controller->sendMessage(message);
+}
+
+static JNINativeMethod sMethods[] = {
+    /* name, signature, funcPtr */
+    { "nativeInit", "(Lcom/android/server/hdmi/HdmiCecController;)J",
+            (void *) nativeInit },
+    { "nativeSendCecCommand", "(JII[B)I",
+            (void *) nativeSendCecCommand },
+};
+
+#define CLASS_PATH "com/android/server/hdmi/HdmiCecController"
+
+int register_android_server_hdmi_HdmiCecController(JNIEnv* env) {
+    int res = jniRegisterNativeMethods(env, CLASS_PATH, sMethods, NELEM(sMethods));
+    LOG_FATAL_IF(res < 0, "Unable to register native methods.");
+    return 0;
+}
+
+}  /* namespace android */
diff --git a/services/core/jni/com_android_server_input_InputApplicationHandle.h b/services/core/jni/com_android_server_input_InputApplicationHandle.h
index 89d48c6..62c8570 100644
--- a/services/core/jni/com_android_server_input_InputApplicationHandle.h
+++ b/services/core/jni/com_android_server_input_InputApplicationHandle.h
@@ -17,7 +17,7 @@
 #ifndef _ANDROID_SERVER_INPUT_APPLICATION_HANDLE_H
 #define _ANDROID_SERVER_INPUT_APPLICATION_HANDLE_H
 
-#include <input/InputApplication.h>
+#include <inputflinger/InputApplication.h>
 
 #include "JNIHelp.h"
 #include "jni.h"
diff --git a/services/core/jni/com_android_server_input_InputManagerService.cpp b/services/core/jni/com_android_server_input_InputManagerService.cpp
index a4f4a0b..34ae8b4 100644
--- a/services/core/jni/com_android_server_input_InputManagerService.cpp
+++ b/services/core/jni/com_android_server_input_InputManagerService.cpp
@@ -35,10 +35,11 @@
 #include <utils/Looper.h>
 #include <utils/threads.h>
 
-#include <input/InputManager.h>
 #include <input/PointerController.h>
 #include <input/SpriteController.h>
 
+#include <inputflinger/InputManager.h>
+
 #include <android_os_MessageQueue.h>
 #include <android_view_InputDevice.h>
 #include <android_view_KeyEvent.h>
@@ -48,6 +49,7 @@
 #include <android/graphics/GraphicsJNI.h>
 
 #include <ScopedLocalRef.h>
+#include <ScopedPrimitiveArray.h>
 #include <ScopedUtfChars.h>
 
 #include "com_android_server_power_PowerManagerService.h"
@@ -85,6 +87,7 @@
     jmethodID getPointerIcon;
     jmethodID getKeyboardLayoutOverlay;
     jmethodID getDeviceAlias;
+    jmethodID getTouchCalibrationForInputDevice;
 } gServiceClassInfo;
 
 static struct {
@@ -104,6 +107,11 @@
     jmethodID constructor;
 } gInputDeviceIdentifierInfo;
 
+static struct {
+    jclass clazz;
+    jmethodID getAffineTransform;
+} gTouchCalibrationClassInfo;
+
 
 
 // --- Global functions ---
@@ -142,7 +150,7 @@
     status_t status = android_view_PointerIcon_loadSystemIcon(env,
             contextObj, style, &pointerIcon);
     if (!status) {
-        pointerIcon.bitmap.copyTo(&outSpriteIcon->bitmap, SkBitmap::kARGB_8888_Config);
+        pointerIcon.bitmap.copyTo(&outSpriteIcon->bitmap, kNative_8888_SkColorType);
         outSpriteIcon->hotSpotX = pointerIcon.hotSpotX;
         outSpriteIcon->hotSpotY = pointerIcon.hotSpotY;
     }
@@ -182,6 +190,7 @@
     void setPointerSpeed(int32_t speed);
     void setShowTouches(bool enabled);
     void setInteractive(bool interactive);
+    void reloadCalibration();
 
     /* --- InputReaderPolicyInterface implementation --- */
 
@@ -190,6 +199,10 @@
     virtual void notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices);
     virtual sp<KeyCharacterMap> getKeyboardLayoutOverlay(const InputDeviceIdentifier& identifier);
     virtual String8 getDeviceAlias(const InputDeviceIdentifier& identifier);
+    virtual TouchAffineTransformation getTouchAffineTransformation(JNIEnv *env,
+            jfloatArray matrixArr);
+    virtual TouchAffineTransformation getTouchAffineTransformation(
+            const String8& inputDeviceDescriptor, int32_t surfaceRotation);
 
     /* --- InputDispatcherPolicyInterface implementation --- */
 
@@ -737,6 +750,48 @@
     mInteractive = interactive;
 }
 
+void NativeInputManager::reloadCalibration() {
+    mInputManager->getReader()->requestRefreshConfiguration(
+            InputReaderConfiguration::TOUCH_AFFINE_TRANSFORMATION);
+}
+
+TouchAffineTransformation NativeInputManager::getTouchAffineTransformation(
+        JNIEnv *env, jfloatArray matrixArr) {
+    ScopedFloatArrayRO matrix(env, matrixArr);
+    assert(matrix.size() == 6);
+
+    TouchAffineTransformation transform;
+    transform.x_scale  = matrix[0];
+    transform.x_ymix   = matrix[1];
+    transform.x_offset = matrix[2];
+    transform.y_xmix   = matrix[3];
+    transform.y_scale  = matrix[4];
+    transform.y_offset = matrix[5];
+
+    return transform;
+}
+
+TouchAffineTransformation NativeInputManager::getTouchAffineTransformation(
+        const String8& inputDeviceDescriptor, int32_t surfaceRotation) {
+    JNIEnv* env = jniEnv();
+
+    ScopedLocalRef<jstring> descriptorObj(env, env->NewStringUTF(inputDeviceDescriptor.string()));
+
+    jobject cal = env->CallObjectMethod(mServiceObj,
+            gServiceClassInfo.getTouchCalibrationForInputDevice, descriptorObj.get(),
+            surfaceRotation);
+
+    jfloatArray matrixArr = jfloatArray(env->CallObjectMethod(cal,
+            gTouchCalibrationClassInfo.getAffineTransform));
+
+    TouchAffineTransformation transform = getTouchAffineTransformation(env, matrixArr);
+
+    env->DeleteLocalRef(matrixArr);
+    env->DeleteLocalRef(cal);
+
+    return transform;
+}
+
 bool NativeInputManager::filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags) {
     jobject inputEventObj;
 
@@ -815,7 +870,7 @@
     if ((policyFlags & POLICY_FLAG_TRUSTED) && !(policyFlags & POLICY_FLAG_INJECTED)) {
         if (policyFlags & POLICY_FLAG_INTERACTIVE) {
             policyFlags |= POLICY_FLAG_PASS_TO_USER;
-        } else if (policyFlags & (POLICY_FLAG_WAKE | POLICY_FLAG_WAKE_DROPPED)) {
+        } else if (policyFlags & POLICY_FLAG_WAKE) {
             JNIEnv* env = jniEnv();
             jint wmActions = env->CallIntMethod(mServiceObj,
                         gServiceClassInfo.interceptWakeMotionBeforeQueueing,
@@ -1214,6 +1269,11 @@
     im->setInteractive(interactive);
 }
 
+static void nativeReloadCalibration(JNIEnv* env, jclass clazz, jlong ptr) {
+    NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
+    im->reloadCalibration();
+}
+
 static void nativeVibrate(JNIEnv* env,
         jclass clazz, jlong ptr, jint deviceId, jlongArray patternObj,
         jint repeat, jint token) {
@@ -1221,7 +1281,7 @@
 
     size_t patternSize = env->GetArrayLength(patternObj);
     if (patternSize > MAX_VIBRATE_PATTERN_SIZE) {
-        ALOGI("Skipped requested vibration because the pattern size is %d "
+        ALOGI("Skipped requested vibration because the pattern size is %zu "
                 "which is more than the maximum supported size of %d.",
                 patternSize, MAX_VIBRATE_PATTERN_SIZE);
         return; // limit to reasonable size
@@ -1321,6 +1381,8 @@
             (void*) nativeSetShowTouches },
     { "nativeSetInteractive", "(JZ)V",
             (void*) nativeSetInteractive },
+    { "nativeReloadCalibration", "(J)V",
+            (void*) nativeReloadCalibration },
     { "nativeVibrate", "(JI[JII)V",
             (void*) nativeVibrate },
     { "nativeCancelVibrate", "(JII)V",
@@ -1430,6 +1492,10 @@
     GET_METHOD_ID(gServiceClassInfo.getDeviceAlias, clazz,
             "getDeviceAlias", "(Ljava/lang/String;)Ljava/lang/String;");
 
+    GET_METHOD_ID(gServiceClassInfo.getTouchCalibrationForInputDevice, clazz,
+            "getTouchCalibrationForInputDevice",
+            "(Ljava/lang/String;I)Landroid/hardware/input/TouchCalibration;");
+
     // InputDevice
 
     FIND_CLASS(gInputDeviceClassInfo.clazz, "android/view/InputDevice");
@@ -1452,6 +1518,14 @@
     GET_METHOD_ID(gInputDeviceIdentifierInfo.constructor, gInputDeviceIdentifierInfo.clazz,
             "<init>", "(Ljava/lang/String;II)V");
 
+    // TouchCalibration
+
+    FIND_CLASS(gTouchCalibrationClassInfo.clazz, "android/hardware/input/TouchCalibration");
+    gTouchCalibrationClassInfo.clazz = jclass(env->NewGlobalRef(gTouchCalibrationClassInfo.clazz));
+
+    GET_METHOD_ID(gTouchCalibrationClassInfo.getAffineTransform, gTouchCalibrationClassInfo.clazz,
+            "getAffineTransform", "()[F");
+
     return 0;
 }
 
diff --git a/services/core/jni/com_android_server_input_InputWindowHandle.cpp b/services/core/jni/com_android_server_input_InputWindowHandle.cpp
index b80183c..03bf7eb 100644
--- a/services/core/jni/com_android_server_input_InputWindowHandle.cpp
+++ b/services/core/jni/com_android_server_input_InputWindowHandle.cpp
@@ -23,6 +23,7 @@
 
 #include <android_view_InputChannel.h>
 #include <android/graphics/Region.h>
+#include <ui/Region.h>
 
 #include "com_android_server_input_InputWindowHandle.h"
 #include "com_android_server_input_InputApplicationHandle.h"
@@ -86,6 +87,8 @@
 
     if (!mInfo) {
         mInfo = new InputWindowInfo();
+    } else {
+        mInfo->touchableRegion.clear();
     }
 
     jobject inputChannelObj = env->GetObjectField(obj,
@@ -131,10 +134,11 @@
             gInputWindowHandleClassInfo.touchableRegion);
     if (regionObj) {
         SkRegion* region = android_graphics_Region_getSkRegion(env, regionObj);
-        mInfo->touchableRegion.set(*region);
+        for (SkRegion::Iterator it(*region); !it.done(); it.next()) {
+            const SkIRect& rect = it.rect();
+            mInfo->addTouchableRegion(Rect(rect.fLeft, rect.fTop, rect.fRight, rect.fBottom));
+        }
         env->DeleteLocalRef(regionObj);
-    } else {
-        mInfo->touchableRegion.setEmpty();
     }
 
     mInfo->visible = env->GetBooleanField(obj,
diff --git a/services/core/jni/com_android_server_input_InputWindowHandle.h b/services/core/jni/com_android_server_input_InputWindowHandle.h
index 2cfa17d3..8d9e7d7 100644
--- a/services/core/jni/com_android_server_input_InputWindowHandle.h
+++ b/services/core/jni/com_android_server_input_InputWindowHandle.h
@@ -17,7 +17,7 @@
 #ifndef _ANDROID_SERVER_INPUT_WINDOW_HANDLE_H
 #define _ANDROID_SERVER_INPUT_WINDOW_HANDLE_H
 
-#include <input/InputWindow.h>
+#include <inputflinger/InputWindow.h>
 
 #include "JNIHelp.h"
 #include "jni.h"
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.cpp b/services/core/jni/com_android_server_power_PowerManagerService.cpp
index af09861..33e0bd7 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.cpp
+++ b/services/core/jni/com_android_server_power_PowerManagerService.cpp
@@ -144,6 +144,18 @@
     }
 }
 
+static void nativeSendPowerHint(JNIEnv *env, jclass clazz, jint hintId, jint data) {
+    int data_param = data;
+
+    if (gPowerModule && gPowerModule->powerHint) {
+        if(data)
+            gPowerModule->powerHint(gPowerModule, (power_hint_t)hintId, &data_param);
+        else {
+            gPowerModule->powerHint(gPowerModule, (power_hint_t)hintId, NULL);
+        }
+    }
+}
+
 // ----------------------------------------------------------------------------
 
 static JNINativeMethod gPowerManagerServiceMethods[] = {
@@ -158,6 +170,8 @@
             (void*) nativeSetInteractive },
     { "nativeSetAutoSuspend", "(Z)V",
             (void*) nativeSetAutoSuspend },
+    { "nativeSendPowerHint", "(II)V",
+            (void*) nativeSendPowerHint },
 };
 
 #define FIND_CLASS(var, className) \
diff --git a/services/core/jni/com_android_server_power_PowerManagerService.h b/services/core/jni/com_android_server_power_PowerManagerService.h
index fb8153f..f5fd3d6 100644
--- a/services/core/jni/com_android_server_power_PowerManagerService.h
+++ b/services/core/jni/com_android_server_power_PowerManagerService.h
@@ -20,7 +20,7 @@
 #include "JNIHelp.h"
 #include "jni.h"
 
-#include <androidfw/PowerManager.h>
+#include <powermanager/PowerManager.h>
 
 namespace android {
 
diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp
index 904966a..1feb325 100644
--- a/services/core/jni/onload.cpp
+++ b/services/core/jni/onload.cpp
@@ -22,6 +22,7 @@
 namespace android {
 int register_android_server_AlarmManagerService(JNIEnv* env);
 int register_android_server_AssetAtlasService(JNIEnv* env);
+int register_android_server_BatteryStatsService(JNIEnv* env);
 int register_android_server_ConsumerIrService(JNIEnv *env);
 int register_android_server_InputApplicationHandle(JNIEnv* env);
 int register_android_server_InputWindowHandle(JNIEnv* env);
@@ -37,7 +38,9 @@
 int register_android_server_location_FlpHardwareProvider(JNIEnv* env);
 int register_android_server_connectivity_Vpn(JNIEnv* env);
 int register_android_server_dreams_McuHal(JNIEnv* env);
+int register_android_server_hdmi_HdmiCecController(JNIEnv* env);
 int register_android_server_hdmi_HdmiCecService(JNIEnv* env);
+int register_android_server_hdmi_HdmiMhlController(JNIEnv* env);
 };
 
 using namespace android;
@@ -70,7 +73,11 @@
     register_android_server_AssetAtlasService(env);
     register_android_server_ConsumerIrService(env);
     register_android_server_dreams_McuHal(env);
+    register_android_server_BatteryStatsService(env);
+    register_android_server_hdmi_HdmiCecController(env);
+    // TODO: remove this once replaces HdmiCecService with HdmiControlService.
     register_android_server_hdmi_HdmiCecService(env);
+    register_android_server_hdmi_HdmiMhlController(env);
 
     return JNI_VERSION_1_4;
 }
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java
new file mode 100644
index 0000000..1647425
--- /dev/null
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DeviceOwner.java
@@ -0,0 +1,282 @@
+/*
+ * Copyright (C) 2014 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.android.server.devicepolicy;
+
+import android.app.AppGlobals;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.os.Environment;
+import android.os.RemoteException;
+import android.util.AtomicFile;
+import android.util.Slog;
+import android.util.Xml;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.FastXmlSerializer;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.HashMap;
+
+/**
+ * Stores and restores state for the Device and Profile owners. By definition there can be
+ * only one device owner, but there may be a profile owner for each user.
+ */
+public class DeviceOwner {
+    private static final String TAG = "DevicePolicyManagerService";
+
+    private static final String DEVICE_OWNER_XML = "device_owner.xml";
+    private static final String TAG_DEVICE_OWNER = "device-owner";
+    private static final String TAG_PROFILE_OWNER = "profile-owner";
+    private static final String ATTR_NAME = "name";
+    private static final String ATTR_PACKAGE = "package";
+    private static final String ATTR_USERID = "userId";
+
+    private AtomicFile fileForWriting;
+
+    // Input/Output streams for testing.
+    private InputStream mInputStreamForTest;
+    private OutputStream mOutputStreamForTest;
+
+    // Internal state for the device owner package.
+    private OwnerInfo mDeviceOwner;
+
+    // Internal state for the profile owner packages.
+    private final HashMap<Integer, OwnerInfo> mProfileOwners = new HashMap<Integer, OwnerInfo>();
+
+    // Private default constructor.
+    private DeviceOwner() {
+    }
+
+    @VisibleForTesting
+    DeviceOwner(InputStream in, OutputStream out) {
+        mInputStreamForTest = in;
+        mOutputStreamForTest = out;
+    }
+
+    /**
+     * Loads the device owner state from disk.
+     */
+    static DeviceOwner load() {
+        DeviceOwner owner = new DeviceOwner();
+        if (new File(Environment.getSystemSecureDirectory(), DEVICE_OWNER_XML).exists()) {
+            owner.readOwnerFile();
+            return owner;
+        } else {
+            return null;
+        }
+    }
+
+    /**
+     * Creates an instance of the device owner object with the device owner set.
+     */
+    static DeviceOwner createWithDeviceOwner(String packageName, String ownerName) {
+        DeviceOwner owner = new DeviceOwner();
+        owner.mDeviceOwner = new OwnerInfo(ownerName, packageName);
+        return owner;
+    }
+
+    /**
+     * Creates an instance of the device owner object with the profile owner set.
+     */
+    static DeviceOwner createWithProfileOwner(String packageName, String ownerName, int userId) {
+        DeviceOwner owner = new DeviceOwner();
+        owner.mProfileOwners.put(userId, new OwnerInfo(ownerName, packageName));
+        return owner;
+    }
+
+    String getDeviceOwnerPackageName() {
+        return mDeviceOwner != null ? mDeviceOwner.packageName : null;
+    }
+
+    String getDeviceOwnerName() {
+        return mDeviceOwner != null ? mDeviceOwner.name : null;
+    }
+
+    void setDeviceOwner(String packageName, String ownerName) {
+        mDeviceOwner = new OwnerInfo(ownerName, packageName);
+    }
+
+    void setProfileOwner(String packageName, String ownerName, int userId) {
+        mProfileOwners.put(userId, new OwnerInfo(ownerName, packageName));
+    }
+
+    void removeProfileOwner(int userId) {
+        mProfileOwners.remove(userId);
+    }
+
+    String getProfileOwnerPackageName(int userId) {
+        OwnerInfo profileOwner = mProfileOwners.get(userId);
+        return profileOwner != null ? profileOwner.packageName : null;
+    }
+
+    String getProfileOwnerName(int userId) {
+        OwnerInfo profileOwner = mProfileOwners.get(userId);
+        return profileOwner != null ? profileOwner.name : null;
+    }
+
+    boolean hasDeviceOwner() {
+        return mDeviceOwner != null;
+    }
+
+    static boolean isInstalled(String packageName, PackageManager pm) {
+        try {
+            PackageInfo pi;
+            if ((pi = pm.getPackageInfo(packageName, 0)) != null) {
+                if ((pi.applicationInfo.flags) != 0) {
+                    return true;
+                }
+            }
+        } catch (NameNotFoundException nnfe) {
+            Slog.w(TAG, "Device Owner package " + packageName + " not installed.");
+        }
+        return false;
+    }
+
+    static boolean isInstalledForUser(String packageName, int userHandle) {
+        try {
+            PackageInfo pi = (AppGlobals.getPackageManager())
+                    .getPackageInfo(packageName, 0, userHandle);
+            if (pi != null && pi.applicationInfo.flags != 0) {
+                return true;
+            }
+        } catch (RemoteException re) {
+            throw new RuntimeException("Package manager has died", re);
+        }
+
+        return false;
+    }
+
+    void readOwnerFile() {
+        try {
+            InputStream input = openRead();
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setInput(input, null);
+            int type;
+            while ((type=parser.next()) != XmlPullParser.END_DOCUMENT) {
+                if (type!=XmlPullParser.START_TAG) {
+                    continue;
+                }
+
+                String tag = parser.getName();
+                if (tag.equals(TAG_DEVICE_OWNER)) {
+                    mDeviceOwner = new OwnerInfo(
+                            parser.getAttributeValue(null, ATTR_NAME),
+                            parser.getAttributeValue(null, ATTR_PACKAGE));
+                } else if (tag.equals(TAG_PROFILE_OWNER)) {
+                    String profileOwnerPackageName = parser.getAttributeValue(null, ATTR_PACKAGE);
+                    String profileOwnerName = parser.getAttributeValue(null, ATTR_NAME);
+                    int userId = Integer.parseInt(parser.getAttributeValue(null, ATTR_USERID));
+                    mProfileOwners.put(userId,
+                            new OwnerInfo(profileOwnerName, profileOwnerPackageName));
+                } else {
+                    throw new XmlPullParserException(
+                            "Unexpected tag in device owner file: " + tag);
+                }
+            }
+            input.close();
+        } catch (XmlPullParserException xppe) {
+            Slog.e(TAG, "Error parsing device-owner file\n" + xppe);
+        } catch (IOException ioe) {
+            Slog.e(TAG, "IO Exception when reading device-owner file\n" + ioe);
+        }
+    }
+
+    void writeOwnerFile() {
+        synchronized (this) {
+            writeOwnerFileLocked();
+        }
+    }
+
+    private void writeOwnerFileLocked() {
+        try {
+            OutputStream outputStream = startWrite();
+            XmlSerializer out = new FastXmlSerializer();
+            out.setOutput(outputStream, "utf-8");
+            out.startDocument(null, true);
+
+            // Write device owner tag
+            if (mDeviceOwner != null) {
+                out.startTag(null, TAG_DEVICE_OWNER);
+                out.attribute(null, ATTR_PACKAGE, mDeviceOwner.packageName);
+                if (mDeviceOwner.packageName != null) {
+                    out.attribute(null, ATTR_NAME, mDeviceOwner.packageName);
+                }
+                out.endTag(null, TAG_DEVICE_OWNER);
+            }
+
+            // Write profile owner tags
+            if (mProfileOwners.size() > 0) {
+                for (HashMap.Entry<Integer, OwnerInfo> owner : mProfileOwners.entrySet()) {
+                    out.startTag(null, TAG_PROFILE_OWNER);
+                    out.attribute(null, ATTR_PACKAGE, owner.getValue().packageName);
+                    out.attribute(null, ATTR_NAME, owner.getValue().name);
+                    out.attribute(null, ATTR_USERID, Integer.toString(owner.getKey()));
+                    out.endTag(null, TAG_PROFILE_OWNER);
+                }
+            }
+            out.endDocument();
+            out.flush();
+            finishWrite(outputStream);
+        } catch (IOException ioe) {
+            Slog.e(TAG, "IO Exception when writing device-owner file\n" + ioe);
+        }
+    }
+
+    private InputStream openRead() throws IOException {
+        if (mInputStreamForTest != null) {
+            return mInputStreamForTest;
+        }
+
+        return new AtomicFile(new File(Environment.getSystemSecureDirectory(),
+                DEVICE_OWNER_XML)).openRead();
+    }
+
+    private OutputStream startWrite() throws IOException {
+        if (mOutputStreamForTest != null) {
+            return mOutputStreamForTest;
+        }
+
+        fileForWriting = new AtomicFile(new File(Environment.getSystemSecureDirectory(),
+                DEVICE_OWNER_XML));
+        return fileForWriting.startWrite();
+    }
+
+    private void finishWrite(OutputStream stream) {
+        if (fileForWriting != null) {
+            fileForWriting.finishWrite((FileOutputStream) stream);
+        }
+    }
+
+    static class OwnerInfo {
+        public String name;
+        public String packageName;
+
+        public OwnerInfo(String name, String packageName) {
+            this.name = name;
+            this.packageName = packageName;
+        }
+    }
+}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 296d852..aaa97eb 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -27,15 +27,10 @@
 import com.android.org.conscrypt.TrustedCertificateStore;
 import com.android.server.SystemService;
 
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-import org.xmlpull.v1.XmlSerializer;
-
 import android.app.Activity;
 import android.app.ActivityManagerNative;
 import android.app.AlarmManager;
 import android.app.AppGlobals;
-import android.app.INotificationManager;
 import android.app.Notification;
 import android.app.NotificationManager;
 import android.app.PendingIntent;
@@ -51,15 +46,10 @@
 import android.content.IntentFilter;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.IPackageManager;
-import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.Signature;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
 import android.content.pm.UserInfo;
 import android.net.ProxyProperties;
-import android.net.Uri;
-import android.os.AsyncTask;
 import android.os.Binder;
 import android.os.Bundle;
 import android.os.Environment;
@@ -81,7 +71,6 @@
 import android.security.IKeyChainService;
 import android.security.KeyChain;
 import android.security.KeyChain.KeyChainConnection;
-import android.util.AtomicFile;
 import android.util.Log;
 import android.util.PrintWriterPrinter;
 import android.util.Printer;
@@ -89,7 +78,10 @@
 import android.util.SparseArray;
 import android.util.Xml;
 import android.view.IWindowManager;
-import android.view.WindowManagerPolicy;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import org.xmlpull.v1.XmlSerializer;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
@@ -99,14 +91,11 @@
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.PrintWriter;
-import java.security.KeyStore.TrustedCertificateEntry;
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
 import java.text.DateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.HashMap;
@@ -142,6 +131,7 @@
     IWindowManager mIWindowManager;
     NotificationManager mNotificationManager;
 
+    // Stores and loads state on device and profile owners.
     private DeviceOwner mDeviceOwner;
 
     /**
@@ -181,7 +171,7 @@
         int mActivePasswordNonLetter = 0;
         int mFailedPasswordAttempts = 0;
 
-        int mUserHandle;;
+        int mUserHandle;
         int mPasswordOwner = -1;
         long mLastMaximumTimeToLock = -1;
 
@@ -631,6 +621,11 @@
                 Slog.w(LOG_TAG, "Tried to remove device policy file for user 0! Ignoring.");
                 return;
             }
+            if (mDeviceOwner != null) {
+                mDeviceOwner.removeProfileOwner(userHandle);
+                mDeviceOwner.writeOwnerFile();
+            }
+
             DevicePolicyData policy = mUserData.get(userHandle);
             if (policy != null) {
                 mUserData.remove(userHandle);
@@ -644,9 +639,7 @@
 
     void loadDeviceOwner() {
         synchronized (this) {
-            if (DeviceOwner.isRegistered()) {
-                mDeviceOwner = new DeviceOwner();
-            }
+            mDeviceOwner = DeviceOwner.load();
         }
     }
 
@@ -730,6 +723,10 @@
         final int callingUid = Binder.getCallingUid();
         final int userHandle = UserHandle.getUserId(callingUid);
         final DevicePolicyData policy = getUserData(userHandle);
+
+        List<ActiveAdmin> candidates = new ArrayList<ActiveAdmin>();
+
+        // Build a list of admins for this uid matching the given ComponentName
         if (who != null) {
             ActiveAdmin admin = policy.mAdminMap.get(who);
             if (admin == null) {
@@ -739,22 +736,43 @@
                 throw new SecurityException("Admin " + who + " is not owned by uid "
                         + Binder.getCallingUid());
             }
-            if (!admin.info.usesPolicy(reqPolicy)) {
-                throw new SecurityException("Admin " + admin.info.getComponent()
-                        + " did not specify uses-policy for: "
-                        + admin.info.getTagForPolicy(reqPolicy));
-            }
-            return admin;
+            candidates.add(admin);
         } else {
-            final int N = policy.mAdminList.size();
-            for (int i=0; i<N; i++) {
-                ActiveAdmin admin = policy.mAdminList.get(i);
-                if (admin.getUid() == callingUid && admin.info.usesPolicy(reqPolicy)) {
+            for (ActiveAdmin admin : policy.mAdminList) {
+                if (admin.getUid() == callingUid) {
+                    candidates.add(admin);
+                }
+            }
+        }
+
+        // Try to find an admin which can use reqPolicy
+        for (ActiveAdmin admin : candidates) {
+            boolean ownsDevice = isDeviceOwner(admin.info.getPackageName());
+            boolean ownsProfile = (getProfileOwner(userHandle) != null
+                    && getProfileOwner(userHandle).equals(admin.info.getPackageName()));
+
+            if (reqPolicy == DeviceAdminInfo.USES_POLICY_DEVICE_OWNER) {
+                if (ownsDevice) {
+                    return admin;
+                }
+            } else if (reqPolicy == DeviceAdminInfo.USES_POLICY_PROFILE_OWNER) {
+                if (ownsDevice || ownsProfile) {
+                    return admin;
+                }
+            } else {
+                if (admin.info.usesPolicy(reqPolicy)) {
                     return admin;
                 }
             }
+        }
+
+        if (who != null) {
+            throw new SecurityException("Admin " + candidates.get(0).info.getComponent()
+                    + " did not specify uses-policy for: "
+                    + candidates.get(0).info.getTagForPolicy(reqPolicy));
+        } else {
             throw new SecurityException("No active admin owned by uid "
-                    + Binder.getCallingUid() + " for policy #" + reqPolicy);
+                    + Binder.getCallingUid() + " for policy:" + reqPolicy);
         }
     }
 
@@ -1323,8 +1341,7 @@
             }
             if (admin.getUid() != Binder.getCallingUid()) {
                 // If trying to remove device owner, refuse when the caller is not the owner.
-                if (mDeviceOwner != null
-                        && adminReceiver.getPackageName().equals(mDeviceOwner.getPackageName())) {
+                if (isDeviceOwner(adminReceiver.getPackageName())) {
                     return;
                 }
                 mContext.enforceCallingOrSelfPermission(
@@ -2769,14 +2786,26 @@
                     + " for device owner");
         }
         synchronized (this) {
-            if (mDeviceOwner == null && !isDeviceProvisioned()) {
-                mDeviceOwner = new DeviceOwner(packageName, ownerName);
+            if (isDeviceProvisioned()) {
+                throw new IllegalStateException(
+                        "Trying to set device owner but device is already provisioned.");
+            }
+
+            if (mDeviceOwner != null && mDeviceOwner.hasDeviceOwner()) {
+                throw new IllegalStateException(
+                        "Trying to set device owner but device owner is already set.");
+            }
+
+            if (mDeviceOwner == null) {
+                // Device owner is not set and does not exist, set it.
+                mDeviceOwner = DeviceOwner.createWithDeviceOwner(packageName, ownerName);
                 mDeviceOwner.writeOwnerFile();
                 return true;
             } else {
-                throw new IllegalStateException("Trying to set device owner to " + packageName
-                        + ", owner=" + mDeviceOwner.getPackageName()
-                        + ", device_provisioned=" + isDeviceProvisioned());
+                // Device owner is not set but a profile owner exists, update Device owner state.
+                mDeviceOwner.setDeviceOwner(packageName, ownerName);
+                mDeviceOwner.writeOwnerFile();
+                return true;
             }
         }
     }
@@ -2788,7 +2817,8 @@
         }
         synchronized (this) {
             return mDeviceOwner != null
-                    && mDeviceOwner.getPackageName().equals(packageName);
+                    && mDeviceOwner.hasDeviceOwner()
+                    && mDeviceOwner.getDeviceOwnerPackageName().equals(packageName);
         }
     }
 
@@ -2798,8 +2828,8 @@
             return null;
         }
         synchronized (this) {
-            if (mDeviceOwner != null) {
-                return mDeviceOwner.getPackageName();
+            if (mDeviceOwner != null && mDeviceOwner.hasDeviceOwner()) {
+                return mDeviceOwner.getDeviceOwnerPackageName();
             }
         }
         return null;
@@ -2813,7 +2843,105 @@
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
         synchronized (this) {
             if (mDeviceOwner != null) {
-                return mDeviceOwner.getName();
+                return mDeviceOwner.getDeviceOwnerName();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public boolean setProfileOwner(String packageName, String ownerName, int userHandle) {
+        if (!mHasFeature) {
+            return false;
+        }
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
+
+        UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+        if (um.getUserInfo(userHandle) == null) {
+            // User doesn't exist.
+            throw new IllegalArgumentException(
+                    "Attempted to set profile owner for invalid userId: " + userHandle);
+        }
+
+        if (packageName == null
+                || !DeviceOwner.isInstalledForUser(packageName, userHandle)) {
+            throw new IllegalArgumentException("Package name " + packageName
+                    + " not installed for userId:" + userHandle);
+        }
+        synchronized (this) {
+            if (isUserSetupComplete(userHandle)) {
+                throw new IllegalStateException(
+                        "Trying to set profile owner but user is already set-up.");
+            }
+            if (mDeviceOwner == null) {
+                // Device owner state does not exist, create it.
+                mDeviceOwner = DeviceOwner.createWithProfileOwner(packageName, ownerName,
+                        userHandle);
+                mDeviceOwner.writeOwnerFile();
+                return true;
+            } else {
+                // Device owner already exists, update it.
+                mDeviceOwner.setProfileOwner(packageName, ownerName, userHandle);
+                mDeviceOwner.writeOwnerFile();
+                return true;
+            }
+        }
+    }
+
+    @Override
+    public void setProfileEnabled(ComponentName who) {
+        if (!mHasFeature) {
+            return;
+        }
+        synchronized (this) {
+            // Check for permissions
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            // Check if this is the profile owner who is calling
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+            int userId = UserHandle.getCallingUserId();
+            Slog.d(LOG_TAG, "Enabling the profile for: " + userId);
+
+            UserManager um = UserManager.get(mContext);
+            long id = Binder.clearCallingIdentity();
+            try {
+                um.setUserEnabled(userId);
+                Intent intent = new Intent(Intent.ACTION_MANAGED_PROFILE_ADDED);
+                intent.putExtra(Intent.EXTRA_USER, new UserHandle(UserHandle.getCallingUserId()));
+                intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY |
+                        Intent.FLAG_RECEIVER_FOREGROUND);
+                mContext.sendBroadcastAsUser(intent, UserHandle.OWNER);
+            } finally {
+                restoreCallingIdentity(id);
+            }
+        }
+    }
+
+    @Override
+    public String getProfileOwner(int userHandle) {
+        if (!mHasFeature) {
+            return null;
+        }
+
+        synchronized (this) {
+            if (mDeviceOwner != null) {
+                return mDeviceOwner.getProfileOwnerPackageName(userHandle);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public String getProfileOwnerName(int userHandle) {
+        if (!mHasFeature) {
+            return null;
+        }
+        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MANAGE_USERS, null);
+
+        synchronized (this) {
+            if (mDeviceOwner != null) {
+                return mDeviceOwner.getProfileOwnerName(userHandle);
             }
         }
         return null;
@@ -2824,6 +2952,11 @@
                 Settings.Global.DEVICE_PROVISIONED, 0) > 0;
     }
 
+    private boolean isUserSetupComplete(int userId) {
+        return Settings.Secure.getIntForUser(mContext.getContentResolver(),
+                Settings.Secure.USER_SETUP_COMPLETE, 0, userId) > 0;
+    }
+
     private void enforceCrossUserPermission(int userHandle) {
         if (userHandle < 0) {
             throw new IllegalArgumentException("Invalid userId " + userHandle);
@@ -2889,101 +3022,146 @@
         }
     }
 
-    static class DeviceOwner {
-        private static final String DEVICE_OWNER_XML = "device_owner.xml";
-        private static final String TAG_DEVICE_OWNER = "device-owner";
-        private static final String ATTR_NAME = "name";
-        private static final String ATTR_PACKAGE = "package";
-        private String mPackageName;
-        private String mOwnerName;
-
-        DeviceOwner() {
-            readOwnerFile();
-        }
-
-        DeviceOwner(String packageName, String ownerName) {
-            this.mPackageName = packageName;
-            this.mOwnerName = ownerName;
-        }
-
-        static boolean isRegistered() {
-            return new File(Environment.getSystemSecureDirectory(),
-                    DEVICE_OWNER_XML).exists();
-        }
-
-        String getPackageName() {
-            return mPackageName;
-        }
-
-        String getName() {
-            return mOwnerName;
-        }
-
-        static boolean isInstalled(String packageName, PackageManager pm) {
-            try {
-                PackageInfo pi;
-                if ((pi = pm.getPackageInfo(packageName, 0)) != null) {
-                    if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
-                        return true;
-                    }
-                }
-            } catch (NameNotFoundException nnfe) {
-                Slog.w(LOG_TAG, "Device Owner package " + packageName + " not installed.");
+    public void addPersistentPreferredActivity(ComponentName who, IntentFilter filter,
+            ComponentName activity) {
+        synchronized (this) {
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
             }
-            return false;
-        }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
 
-        void readOwnerFile() {
-            AtomicFile file = new AtomicFile(new File(Environment.getSystemSecureDirectory(),
-                    DEVICE_OWNER_XML));
+            IPackageManager pm = AppGlobals.getPackageManager();
+            long id = Binder.clearCallingIdentity();
             try {
-                FileInputStream input = file.openRead();
-                XmlPullParser parser = Xml.newPullParser();
-                parser.setInput(input, null);
-                int type;
-                while ((type=parser.next()) != XmlPullParser.END_DOCUMENT
-                        && type != XmlPullParser.START_TAG) {
-                }
-                String tag = parser.getName();
-                if (!TAG_DEVICE_OWNER.equals(tag)) {
-                    throw new XmlPullParserException(
-                            "Device Owner file does not start with device-owner tag: found " + tag);
-                }
-                mPackageName = parser.getAttributeValue(null, ATTR_PACKAGE);
-                mOwnerName = parser.getAttributeValue(null, ATTR_NAME);
-                input.close();
-            } catch (XmlPullParserException xppe) {
-                Slog.e(LOG_TAG, "Error parsing device-owner file\n" + xppe);
-            } catch (IOException ioe) {
-                Slog.e(LOG_TAG, "IO Exception when reading device-owner file\n" + ioe);
+                pm.addPersistentPreferredActivity(filter, activity, UserHandle.getCallingUserId());
+            } catch (RemoteException re) {
+                // Shouldn't happen
+            } finally {
+                restoreCallingIdentity(id);
             }
         }
+    }
 
-        void writeOwnerFile() {
-            synchronized (this) {
-                writeOwnerFileLocked();
+    public void clearPackagePersistentPreferredActivities(ComponentName who, String packageName) {
+        synchronized (this) {
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+
+            IPackageManager pm = AppGlobals.getPackageManager();
+            long id = Binder.clearCallingIdentity();
+            try {
+                pm.clearPackagePersistentPreferredActivities(packageName, UserHandle.getCallingUserId());
+            } catch (RemoteException re) {
+                // Shouldn't happen
+            } finally {
+                restoreCallingIdentity(id);
             }
         }
+    }
 
-        private void writeOwnerFileLocked() {
-            AtomicFile file = new AtomicFile(new File(Environment.getSystemSecureDirectory(),
-                    DEVICE_OWNER_XML));
+    @Override
+    public void setApplicationRestrictions(ComponentName who, String packageName, Bundle settings) {
+        final UserHandle userHandle = new UserHandle(UserHandle.getCallingUserId());
+
+        synchronized (this) {
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+
+            UserManager um = UserManager.get(mContext);
+            long id = Binder.clearCallingIdentity();
             try {
-                FileOutputStream output = file.startWrite();
-                XmlSerializer out = new FastXmlSerializer();
-                out.setOutput(output, "utf-8");
-                out.startDocument(null, true);
-                out.startTag(null, TAG_DEVICE_OWNER);
-                out.attribute(null, ATTR_PACKAGE, mPackageName);
-                if (mOwnerName != null) {
-                    out.attribute(null, ATTR_NAME, mOwnerName);
+                um.setApplicationRestrictions(packageName, settings, userHandle);
+            } finally {
+                restoreCallingIdentity(id);
+            }
+        }
+    }
+
+    public void forwardMatchingIntents(ComponentName who, IntentFilter filter, int flags) {
+        int callingUserId = UserHandle.getCallingUserId();
+        synchronized (this) {
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+
+            IPackageManager pm = AppGlobals.getPackageManager();
+            long id = Binder.clearCallingIdentity();
+            try {
+                if ((flags & DevicePolicyManager.FLAG_TO_PRIMARY_USER) != 0) {
+                    pm.addForwardingIntentFilter(filter, callingUserId, UserHandle.USER_OWNER);
                 }
-                out.endTag(null, TAG_DEVICE_OWNER);
-                out.endDocument();
-                out.flush();
-                file.finishWrite(output);
-            } catch (IOException ioe) {
-                Slog.e(LOG_TAG, "IO Exception when writing device-owner file\n" + ioe);
+                if ((flags & DevicePolicyManager.FLAG_TO_MANAGED_PROFILE) != 0) {
+                    pm.addForwardingIntentFilter(filter, UserHandle.USER_OWNER, callingUserId);
+                }
+            } catch (RemoteException re) {
+                // Shouldn't happen
+            } finally {
+                restoreCallingIdentity(id);
+            }
+        }
+    }
+
+    public void clearForwardingIntentFilters(ComponentName who) {
+        int callingUserId = UserHandle.getCallingUserId();
+        synchronized (this) {
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+            IPackageManager pm = AppGlobals.getPackageManager();
+            long id = Binder.clearCallingIdentity();
+            try {
+                pm.clearForwardingIntentFilters(callingUserId);
+                pm.clearForwardingIntentFilters(UserHandle.USER_OWNER);
+            } catch (RemoteException re) {
+                // Shouldn't happen
+            } finally {
+                restoreCallingIdentity(id);
+            }
+        }
+    }
+
+    @Override
+    public Bundle getApplicationRestrictions(ComponentName who, String packageName) {
+        final UserHandle userHandle = new UserHandle(UserHandle.getCallingUserId());
+
+        synchronized (this) {
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+
+            UserManager um = UserManager.get(mContext);
+            long id = Binder.clearCallingIdentity();
+            try {
+                return um.getApplicationRestrictions(packageName, userHandle);
+            } finally {
+                restoreCallingIdentity(id);
+            }
+        }
+    }
+
+    @Override
+    public void setUserRestriction(ComponentName who, String key, boolean enabled) {
+        final UserHandle userHandle = new UserHandle(UserHandle.getCallingUserId());
+
+        synchronized (this) {
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER);
+
+            UserManager um = UserManager.get(mContext);
+            long id = Binder.clearCallingIdentity();
+            try {
+                um.setUserRestriction(key, enabled, userHandle);
+            } finally {
+                restoreCallingIdentity(id);
             }
         }
     }
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index 6845e8c..7c9f7a8 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -29,7 +29,7 @@
 import android.content.pm.PackageManager;
 import android.content.res.Configuration;
 import android.media.AudioService;
-import android.net.wifi.p2p.WifiP2pService;
+import android.os.Build;
 import android.os.Environment;
 import android.os.FactoryTest;
 import android.os.Handler;
@@ -43,6 +43,7 @@
 import android.os.SystemProperties;
 import android.os.UserHandle;
 import android.service.dreams.DreamService;
+import android.tv.TvInputManager;
 import android.util.DisplayMetrics;
 import android.util.EventLog;
 import android.util.Log;
@@ -62,15 +63,18 @@
 import com.android.server.devicepolicy.DevicePolicyManagerService;
 import com.android.server.display.DisplayManagerService;
 import com.android.server.dreams.DreamManagerService;
+import com.android.server.hdmi.HdmiControlService;
 import com.android.server.input.InputManagerService;
 import com.android.server.lights.LightsManager;
 import com.android.server.lights.LightsService;
 import com.android.server.media.MediaRouterService;
+import com.android.server.media.MediaSessionService;
 import com.android.server.net.NetworkPolicyManagerService;
 import com.android.server.net.NetworkStatsService;
 import com.android.server.notification.NotificationManagerService;
 import com.android.server.os.SchedulingPolicyService;
 import com.android.server.pm.Installer;
+import com.android.server.pm.LauncherAppsService;
 import com.android.server.pm.PackageManagerService;
 import com.android.server.pm.UserManagerService;
 import com.android.server.power.PowerManagerService;
@@ -78,10 +82,11 @@
 import com.android.server.search.SearchManagerService;
 import com.android.server.statusbar.StatusBarManagerService;
 import com.android.server.storage.DeviceStorageMonitorService;
+import com.android.server.trust.TrustManagerService;
+import com.android.server.tv.TvInputManagerService;
 import com.android.server.twilight.TwilightService;
 import com.android.server.usb.UsbService;
 import com.android.server.wallpaper.WallpaperManagerService;
-import com.android.server.wifi.WifiService;
 import com.android.server.wm.WindowManagerService;
 
 import dalvik.system.VMRuntime;
@@ -110,10 +115,18 @@
             "com.android.server.backup.BackupManagerService$Lifecycle";
     private static final String APPWIDGET_SERVICE_CLASS =
             "com.android.server.appwidget.AppWidgetService";
+    private static final String VOICE_RECOGNITION_MANAGER_SERVICE_CLASS =
+            "com.android.server.voiceinteraction.VoiceInteractionManagerService";
     private static final String PRINT_MANAGER_SERVICE_CLASS =
             "com.android.server.print.PrintManagerService";
     private static final String USB_SERVICE_CLASS =
             "com.android.server.usb.UsbService$Lifecycle";
+    private static final String WIFI_SERVICE_CLASS =
+            "com.android.server.wifi.WifiService";
+    private static final String WIFI_HOTSPOT_SERVICE_CLASS =
+            "com.android.server.wifi.hotspot.WifiHotspotService";
+    private static final String WIFI_P2P_SERVICE_CLASS =
+            "com.android.server.wifi.p2p.WifiP2pService";
     private static final String HDMI_CEC_SERVICE_CLASS =
             "com.android.server.hdmi.HdmiCecService";
 
@@ -188,6 +201,10 @@
         // as efficient as possible with its memory usage.
         VMRuntime.getRuntime().setTargetHeapUtilization(0.8f);
 
+        // Some devices rely on runtime fingerprint generation, so make sure
+        // we've defined it before booting further.
+        Build.ensureFingerprintProperty();
+
         // Within the system server, it is an error to access Environment paths without
         // explicitly specifying a user.
         Environment.setUserRequired(true);
@@ -262,7 +279,7 @@
     private void createSystemContext() {
         ActivityThread activityThread = ActivityThread.systemMain();
         mSystemContext = activityThread.getSystemContext();
-        mSystemContext.setTheme(android.R.style.Theme_Holo);
+        mSystemContext.setTheme(android.R.style.Theme_DeviceDefault_Light_DarkActionBar);
     }
 
     private void startBootstrapServices() {
@@ -280,6 +297,7 @@
         // Activity manager runs the show.
         mActivityManagerService = mSystemServiceManager.startService(
                 ActivityManagerService.Lifecycle.class).getService();
+        mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
     }
 
     private void startCoreServices() {
@@ -301,8 +319,7 @@
         NetworkStatsService networkStats = null;
         NetworkPolicyManagerService networkPolicy = null;
         ConnectivityService connectivity = null;
-        WifiP2pService wifiP2p = null;
-        WifiService wifi = null;
+        NetworkScoreService networkScore = null;
         NsdService serviceDiscovery= null;
         IPackageManager pm = null;
         WindowManagerService wm = null;
@@ -605,18 +622,20 @@
                     reportWtf("starting NetworkPolicy Service", e);
                 }
 
-               try {
-                    Slog.i(TAG, "Wi-Fi P2pService");
-                    wifiP2p = new WifiP2pService(context);
-                    ServiceManager.addService(Context.WIFI_P2P_SERVICE, wifiP2p);
+                try {
+                    mSystemServiceManager.startService(WIFI_P2P_SERVICE_CLASS);
                 } catch (Throwable e) {
                     reportWtf("starting Wi-Fi P2pService", e);
                 }
 
-               try {
-                    Slog.i(TAG, "Wi-Fi Service");
-                    wifi = new WifiService(context);
-                    ServiceManager.addService(Context.WIFI_SERVICE, wifi);
+                try {
+                    mSystemServiceManager.startService(WIFI_HOTSPOT_SERVICE_CLASS);
+                } catch (Throwable e) {
+                    reportWtf("starting Wi-Fi HotspotService", e);
+                }
+
+                try {
+                    mSystemServiceManager.startService(WIFI_SERVICE_CLASS);
                 } catch (Throwable e) {
                     reportWtf("starting Wi-Fi Service", e);
                 }
@@ -628,14 +647,19 @@
                     ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);
                     networkStats.bindConnectivityManager(connectivity);
                     networkPolicy.bindConnectivityManager(connectivity);
-
-                    wifiP2p.connectivityServiceReady();
-                    wifi.checkAndStartWifi();
                 } catch (Throwable e) {
                     reportWtf("starting Connectivity Service", e);
                 }
 
                 try {
+                    Slog.i(TAG, "Network Score Service");
+                    networkScore = new NetworkScoreService(context);
+                    ServiceManager.addService(Context.NETWORK_SCORE_SERVICE, networkScore);
+                } catch (Throwable e) {
+                    reportWtf("starting Network Score Service", e);
+                }
+
+                try {
                     Slog.i(TAG, "Network Service Discovery Service");
                     serviceDiscovery = NsdService.create(context);
                     ServiceManager.addService(
@@ -810,6 +834,15 @@
                 } catch (Throwable e) {
                     reportWtf("starting Recognition Service", e);
                 }
+
+                try {
+                    if (pm.hasSystemFeature(PackageManager.FEATURE_VOICE_RECOGNIZERS)) {
+                        Slog.i(TAG, "Voice Recognition Service");
+                        mSystemServiceManager.startService(VOICE_RECOGNITION_MANAGER_SERVICE_CLASS);
+                    }
+                } catch (Throwable e) {
+                    reportWtf("starting Voice Recognition Service", e);
+                }
             }
 
             try {
@@ -890,11 +923,30 @@
             }
 
             try {
+                mSystemServiceManager.startService(MediaSessionService.class);
+            } catch (Throwable e) {
+                reportWtf("starting MediaSessionService", e);
+            }
+
+            try {
                 mSystemServiceManager.startService(HDMI_CEC_SERVICE_CLASS);
             } catch (Throwable e) {
                 reportWtf("starting HdmiCec Service", e);
             }
 
+            try {
+                mSystemServiceManager.startService(HdmiControlService.class);
+            } catch (Throwable e) {
+                reportWtf("starting HdmiControlService", e);
+            }
+
+            try {
+                Slog.i(TAG, "TvInputManagerService");
+                mSystemServiceManager.startService(TvInputManagerService.class);
+            } catch (Throwable e) {
+                reportWtf("starting TvInputManagerService", e);
+            }
+
             if (!disableNonCoreServices) {
                 try {
                     Slog.i(TAG, "Media Router Service");
@@ -903,6 +955,21 @@
                 } catch (Throwable e) {
                     reportWtf("starting MediaRouterService", e);
                 }
+
+                try {
+                    Slog.i(TAG, "Trust Manager");
+                    mSystemServiceManager.startService(TrustManagerService.class);
+                } catch (Throwable e) {
+                    Slog.e(TAG, "Failure starting TrustManagerService", e);
+                }
+            }
+
+            try {
+                Slog.i(TAG, "LauncherAppsService");
+                LauncherAppsService las = new LauncherAppsService(context);
+                ServiceManager.addService(Context.LAUNCHER_APPS_SERVICE, las);
+            } catch (Throwable t) {
+                reportWtf("starting LauncherAppsService", t);
             }
         }
 
@@ -985,6 +1052,7 @@
         final NetworkStatsService networkStatsF = networkStats;
         final NetworkPolicyManagerService networkPolicyF = networkPolicy;
         final ConnectivityService connectivityF = connectivity;
+        final NetworkScoreService networkScoreF = networkScore;
         final DockObserver dockF = dock;
         final WallpaperManagerService wallpaperF = wallpaper;
         final InputMethodManagerService immF = imm;
@@ -1033,6 +1101,11 @@
                     reportWtf("making Battery Service ready", e);
                 }
                 try {
+                    if (networkScoreF != null) networkScoreF.systemReady();
+                } catch (Throwable e) {
+                    reportWtf("making Network Score Service ready", e);
+                }
+                try {
                     if (networkManagementF != null) networkManagementF.systemReady();
                 } catch (Throwable e) {
                     reportWtf("making Network Managment Service ready", e);
diff --git a/services/print/java/com/android/server/print/PrintManagerService.java b/services/print/java/com/android/server/print/PrintManagerService.java
index c6fdbe5..f7bec6e 100644
--- a/services/print/java/com/android/server/print/PrintManagerService.java
+++ b/services/print/java/com/android/server/print/PrintManagerService.java
@@ -405,7 +405,6 @@
         private void registerContentObservers() {
             final Uri enabledPrintServicesUri = Settings.Secure.getUriFor(
                     Settings.Secure.ENABLED_PRINT_SERVICES);
-
             ContentObserver observer = new ContentObserver(BackgroundThread.getHandler()) {
                 @Override
                 public void onChange(boolean selfChange, Uri uri) {
@@ -425,39 +424,42 @@
         private void registerBoradcastReceivers() {
             PackageMonitor monitor = new PackageMonitor() {
                 @Override
-                public boolean onPackageChanged(String packageName, int uid, String[] components) {
+                public void onPackageModified(String packageName) {
                     synchronized (mLock) {
+                        boolean servicesChanged = false;
                         UserState userState = getOrCreateUserStateLocked(getChangingUserId());
-                        Iterator<ComponentName> iterator = userState.getEnabledServices()
-                                .iterator();
+                        Iterator<ComponentName> iterator = userState.getEnabledServices().iterator();
                         while (iterator.hasNext()) {
                             ComponentName componentName = iterator.next();
                             if (packageName.equals(componentName.getPackageName())) {
-                                userState.updateIfNeededLocked();
-                                return true;
+                                servicesChanged = true;
                             }
                         }
+                        if (servicesChanged) {
+                            userState.updateIfNeededLocked();
+                        }
                     }
-                    return false;
                 }
 
                 @Override
                 public void onPackageRemoved(String packageName, int uid) {
                     synchronized (mLock) {
+                        boolean servicesRemoved = false;
                         UserState userState = getOrCreateUserStateLocked(getChangingUserId());
-                        Iterator<ComponentName> iterator = userState.getEnabledServices()
-                                .iterator();
+                        Iterator<ComponentName> iterator = userState.getEnabledServices().iterator();
                         while (iterator.hasNext()) {
                             ComponentName componentName = iterator.next();
                             if (packageName.equals(componentName.getPackageName())) {
                                 iterator.remove();
-                                persistComponentNamesToSettingLocked(
-                                        Settings.Secure.ENABLED_PRINT_SERVICES,
-                                        userState.getEnabledServices(), getChangingUserId());
-                                userState.updateIfNeededLocked();
-                                return;
+                                servicesRemoved = true;
                             }
                         }
+                        if (servicesRemoved) {
+                            persistComponentNamesToSettingLocked(
+                                    Settings.Secure.ENABLED_PRINT_SERVICES,
+                                    userState.getEnabledServices(), getChangingUserId());
+                            userState.updateIfNeededLocked();
+                        }
                     }
                 }
 
diff --git a/services/print/java/com/android/server/print/UserState.java b/services/print/java/com/android/server/print/UserState.java
index f23a992..f647814 100644
--- a/services/print/java/com/android/server/print/UserState.java
+++ b/services/print/java/com/android/server/print/UserState.java
@@ -71,6 +71,7 @@
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -594,6 +595,8 @@
                     .append(installedService.getSettingsActivityName()).println();
             pw.append(installedServicePrefix).append(tab).append("addPrintersActivity=")
                     .append(installedService.getAddPrintersActivityName()).println();
+            pw.append(installedServicePrefix).append(tab).append("avancedOptionsActivity=")
+                   .append(installedService.getAdvancedOptionsActivityName()).println();
         }
 
         pw.append(prefix).append(tab).append("enabled services:").println();
@@ -657,7 +660,33 @@
             tempPrintServices.add(PrintServiceInfo.create(installedService, mContext));
         }
 
-        if (!tempPrintServices.equals(mInstalledServices)) {
+        boolean someServiceChanged = false;
+
+        if (tempPrintServices.size() != mInstalledServices.size()) {
+            someServiceChanged = true;
+        } else {
+            for (PrintServiceInfo newService: tempPrintServices) {
+                final int oldServiceIndex = mInstalledServices.indexOf(newService);
+                if (oldServiceIndex < 0) {
+                    someServiceChanged = true;
+                    break;
+                }
+                // PrintServiceInfo#equals compares only the id not all members,
+                // so we are also comparing the members coming from meta-data.
+                PrintServiceInfo oldService = mInstalledServices.get(oldServiceIndex);
+                if (!TextUtils.equals(oldService.getAddPrintersActivityName(),
+                            newService.getAddPrintersActivityName())
+                        || !TextUtils.equals(oldService.getAdvancedOptionsActivityName(),
+                                newService.getAdvancedOptionsActivityName())
+                        || !TextUtils.equals(oldService.getSettingsActivityName(),
+                                newService.getSettingsActivityName())) {
+                    someServiceChanged = true;
+                    break;
+                }
+            }
+        }
+
+        if (someServiceChanged) {
             mInstalledServices.clear();
             mInstalledServices.addAll(tempPrintServices);
             return true;
@@ -761,11 +790,16 @@
     }
 
     private void onConfigurationChangedLocked() {
+        Set<ComponentName> installedComponents = new ArraySet<ComponentName>();
+
         final int installedCount = mInstalledServices.size();
         for (int i = 0; i < installedCount; i++) {
             ResolveInfo resolveInfo = mInstalledServices.get(i).getResolveInfo();
             ComponentName serviceName = new ComponentName(resolveInfo.serviceInfo.packageName,
                     resolveInfo.serviceInfo.name);
+
+            installedComponents.add(serviceName);
+
             if (mEnabledServices.contains(serviceName)) {
                 if (!mActiveServices.containsKey(serviceName)) {
                     RemotePrintService service = new RemotePrintService(
@@ -779,6 +813,18 @@
                 }
             }
         }
+
+        Iterator<Map.Entry<ComponentName, RemotePrintService>> iterator =
+                mActiveServices.entrySet().iterator();
+        while (iterator.hasNext()) {
+            Map.Entry<ComponentName, RemotePrintService> entry = iterator.next();
+            ComponentName serviceName = entry.getKey();
+            RemotePrintService service = entry.getValue();
+            if (!installedComponents.contains(serviceName)) {
+                removeServiceLocked(service);
+                iterator.remove();
+            }
+        }
     }
 
     private void addServiceLocked(RemotePrintService service) {
diff --git a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
index 7a30d31..0d5daa5 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkManagementServiceTest.java
@@ -141,14 +141,21 @@
         /**
          * Interface class activity.
          */
+
         sendMessage("613 IfaceClass active rmnet0");
-        expectSoon(observer).interfaceClassDataActivityChanged("rmnet0", true);
+        expectSoon(observer).interfaceClassDataActivityChanged("rmnet0", true, 0);
+
+        sendMessage("613 IfaceClass active rmnet0 1234");
+        expectSoon(observer).interfaceClassDataActivityChanged("rmnet0", true, 1234);
 
         sendMessage("613 IfaceClass idle eth0");
-        expectSoon(observer).interfaceClassDataActivityChanged("eth0", false);
+        expectSoon(observer).interfaceClassDataActivityChanged("eth0", false, 0);
 
-        sendMessage("613 IfaceClass reallyactive rmnet0");
-        expectSoon(observer).interfaceClassDataActivityChanged("rmnet0", false);
+        sendMessage("613 IfaceClass idle eth0 1234");
+        expectSoon(observer).interfaceClassDataActivityChanged("eth0", false, 1234);
+
+        sendMessage("613 IfaceClass reallyactive rmnet0 1234");
+        expectSoon(observer).interfaceClassDataActivityChanged("rmnet0", false, 1234);
 
         sendMessage("613 InterfaceClass reallyactive rmnet0");
         // Invalid group.
diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
index 8ae3824..0f20dde 100644
--- a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
@@ -226,9 +226,9 @@
                 final Handler handler) {
         }
 
-		@Override
-		public void invalidateCache(int userId) {
-		}
+        @Override
+        public void invalidateCache(int userId) {
+        }
     }
 
     static public class MyMockContext extends MockContext {
diff --git a/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java b/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
index 910b685..b0296a0 100644
--- a/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
+++ b/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java
@@ -18,12 +18,13 @@
 
 import android.accounts.Account;
 import android.content.ContentResolver;
+import android.content.Context;
 import android.os.Bundle;
+import android.os.SystemClock;
+import android.provider.Settings;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
 
-import com.android.server.content.SyncOperation;
-
 /**
  * You can run those tests with:
  *
@@ -35,6 +36,21 @@
 
 public class SyncOperationTest extends AndroidTestCase {
 
+    Account mDummy;
+    /** Indicate an unimportant long that we're not testing. */
+    long mUnimportantLong = 0L;
+    /** Empty bundle. */
+    Bundle mEmpty;
+    /** Silly authority. */
+    String mAuthority;
+
+    @Override
+    public void setUp() {
+        mDummy = new Account("account1", "type1");
+        mEmpty = new Bundle();
+        mAuthority = "authority1";
+    }
+
     @SmallTest
     public void testToKey() {
         Account account1 = new Account("account1", "type1");
@@ -111,36 +127,64 @@
 
     @SmallTest
     public void testCompareTo() {
-        Account dummy = new Account("account1", "type1");
-        Bundle b1 = new Bundle();
-        final long unimportant = 0L;
         long soon = 1000;
         long soonFlex = 50;
         long after = 1500;
         long afterFlex = 100;
-        SyncOperation op1 = new SyncOperation(dummy, 0, 0, SyncOperation.REASON_PERIODIC,
-                "authority1", b1, soon, soonFlex, unimportant, unimportant, true);
+        SyncOperation op1 = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_PERIODIC,
+                "authority1", mEmpty, soon, soonFlex, mUnimportantLong, mUnimportantLong, true);
 
         // Interval disjoint from and after op1.
-        SyncOperation op2 = new SyncOperation(dummy, 0, 0, SyncOperation.REASON_PERIODIC,
-                "authority1", b1, after, afterFlex, unimportant, unimportant, true);
+        SyncOperation op2 = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_PERIODIC,
+                "authority1", mEmpty, after, afterFlex, mUnimportantLong, mUnimportantLong, true);
 
         // Interval equivalent to op1, but expedited.
         Bundle b2 = new Bundle();
         b2.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
-        SyncOperation op3 = new SyncOperation(dummy, 0, 0, 0,
-                "authority1", b2, soon, soonFlex, unimportant, unimportant, true);
+        SyncOperation op3 = new SyncOperation(mDummy, 0, 0, 0,
+                "authority1", b2, -1, soonFlex, mUnimportantLong, mUnimportantLong, true);
 
         // Interval overlaps but not equivalent to op1.
-        SyncOperation op4 = new SyncOperation(dummy, 0, 0, SyncOperation.REASON_PERIODIC,
-                "authority1", b1, soon + 100, soonFlex + 100, unimportant, unimportant, true);
+        SyncOperation op4 = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_PERIODIC,
+                "authority1", mEmpty, soon + 100, soonFlex + 100, mUnimportantLong, mUnimportantLong, true);
 
         assertTrue(op1.compareTo(op2) == -1);
-        assertTrue("Less than not transitive.", op2.compareTo(op1) == 1);
-        assertEquals("Expedited not smaller than non-expedited.", -1, op1.compareTo(op3));
-        assertEquals("Greater than not transitive for expedited. ", 1, op3.compareTo(op1));
-        assertTrue("overlapping intervals not compared based on start interval.",
-                op1.compareTo(op4) == -1);
-        assertTrue("overlapping interval comparison not transitive.", op4.compareTo(op1) == 1);
+        assertTrue("less than not transitive.", op2.compareTo(op1) == 1);
+        assertTrue("Expedited sync not smaller than non-expedited.", op1.compareTo(op3) == 1);
+        assertTrue("greater than not transitive. ", op3.compareTo(op1) == -1);
+        assertTrue("overlapping intervals not correctly compared.", op1.compareTo(op4) == -1);
+        assertTrue("equality not transitive.", op4.compareTo(op1) == 1);
+    }
+
+    @SmallTest
+    public void testCopyConstructor() {
+        long fiveSecondsFromNow = 5 * 1000L;
+        long twoSecondsFlex = 2 * 1000L;
+        long eightSeconds = 8 * 1000L;
+        long fourSeconds = 4 * 1000L;
+
+        Bundle withExpedited = new Bundle();
+        withExpedited.putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true);
+        SyncOperation op = new SyncOperation(mDummy, 0, 0, SyncOperation.REASON_USER_START,
+                mAuthority, withExpedited, fiveSecondsFromNow, twoSecondsFlex,
+                eightSeconds /* backoff */, fourSeconds /* delayUntil */, true);
+        // Create another sync op to be rerun in 5 minutes.
+        long now = SystemClock.elapsedRealtime();
+        SyncOperation copy = new SyncOperation(op, fiveSecondsFromNow * 60);
+        // Copying an expedited sync to be re-run should not keep expedited property.
+        assertFalse("A rescheduled sync based off an expedited should not be expedited!",
+                copy.isExpedited());
+        assertFalse("A rescheduled sync based off an expedited should not have expedited=true in"
+                + "its bundle.",
+                copy.extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false));
+        assertTrue("Copied sync is not respecting new provided run-time.",
+                copy.latestRunTime == (now + fiveSecondsFromNow * 60));
+        assertTrue("A rescheduled sync should not have any flex.",
+                copy.flexTime == 0L);
+        assertTrue("A rescheduled op should honour the old op's backoff.",
+                copy.backoff == eightSeconds);
+        assertTrue("A rescheduled op should honour the old op's delayUntil param.",
+                copy.delayUntil == fourSeconds);
+
     }
 }
diff --git a/services/tests/servicestests/src/com/android/server/content/SyncStorageEngineTest.java b/services/tests/servicestests/src/com/android/server/content/SyncStorageEngineTest.java
index f870e4c..ae1967e 100644
--- a/services/tests/servicestests/src/com/android/server/content/SyncStorageEngineTest.java
+++ b/services/tests/servicestests/src/com/android/server/content/SyncStorageEngineTest.java
@@ -17,6 +17,7 @@
 package com.android.server.content;
 
 import android.accounts.Account;
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.ContextWrapper;
@@ -32,22 +33,34 @@
 import android.test.suitebuilder.annotation.MediumTest;
 import android.test.suitebuilder.annotation.SmallTest;
 
+import com.android.server.content.SyncStorageEngine.EndPoint;
+
 import com.android.internal.os.AtomicFile;
 
 import java.io.File;
 import java.io.FileOutputStream;
 import java.util.List;
 
+import com.android.server.content.SyncStorageEngine.EndPoint;
+
 public class SyncStorageEngineTest extends AndroidTestCase {
 
     protected Account account1;
+    protected Account account2;
+    protected ComponentName syncService1;
     protected String authority1 = "testprovider";
     protected Bundle defaultBundle;
     protected final int DEFAULT_USER = 0;
-    
+
+    /* Some default poll frequencies. */
+    final long dayPoll = (60 * 60 * 24);
+    final long dayFuzz = 60;
+    final long thousandSecs = 1000;
+    final long thousandSecsFuzz = 100;
+
     MockContentResolver mockResolver;
     SyncStorageEngine engine;
-    
+
     private File getSyncDir() {
         return new File(new File(getContext().getFilesDir(), "system"), "sync");
     }
@@ -55,6 +68,8 @@
     @Override
     public void setUp() {
         account1 = new Account("a@example.com", "example.type");
+        account2 = new Account("b@example.com", "example.type");
+        syncService1 = new ComponentName("com.example", "SyncService");
         // Default bundle.
         defaultBundle = new Bundle();
         defaultBundle.putInt("int_key", 0);
@@ -80,11 +95,13 @@
 
         SyncStorageEngine engine = SyncStorageEngine.newTestInstance(
                 new TestContext(mockResolver, getContext()));
-
         long time0 = 1000;
-        long historyId = engine.insertStartSyncEvent(
-                account, 0, SyncOperation.REASON_PERIODIC, authority, time0,
-                SyncStorageEngine.SOURCE_LOCAL, false /* initialization */, null /* extras */);
+        SyncOperation op = new SyncOperation(account, 0,
+                SyncOperation.REASON_PERIODIC,
+                SyncStorageEngine.SOURCE_LOCAL,
+                authority,
+                Bundle.EMPTY, time0, 0 /* flex*/, 0, 0, true);
+        long historyId = engine.insertStartSyncEvent(op, time0);
         long time1 = time0 + SyncStorageEngine.MILLIS_IN_4WEEKS * 2;
         engine.stopSyncEvent(historyId, time1 - time0, "yay", 0, 0);
     }
@@ -93,28 +110,100 @@
      * Test persistence of pending operations.
      */
     @MediumTest
-    public void testPending() throws Exception {
-        SyncStorageEngine.PendingOperation pop =
-                new SyncStorageEngine.PendingOperation(account1, DEFAULT_USER,
-                        SyncOperation.REASON_PERIODIC, SyncStorageEngine.SOURCE_LOCAL,
-                        authority1, defaultBundle, false);
-        
-        engine.insertIntoPending(pop);
+    public void testAppendPending() throws Exception {
+        SyncOperation sop = new SyncOperation(account1,
+                DEFAULT_USER,
+                SyncOperation.REASON_PERIODIC,
+                SyncStorageEngine.SOURCE_LOCAL, authority1, Bundle.EMPTY,
+                0 /* runtime */, 0 /* flex */, 0 /* backoff */, 0 /* delayuntil */,
+                true /* expedited */);
+        engine.insertIntoPending(sop);
+
         // Force engine to read from disk.
         engine.clearAndReadState();
 
-        assert(engine.getPendingOperationCount() == 1);
+        assertTrue(engine.getPendingOperationCount() == 1);
         List<SyncStorageEngine.PendingOperation> pops = engine.getPendingOperations();
         SyncStorageEngine.PendingOperation popRetrieved = pops.get(0);
-        assertEquals(pop.account, popRetrieved.account);
-        assertEquals(pop.reason, popRetrieved.reason);
-        assertEquals(pop.userId, popRetrieved.userId);
-        assertEquals(pop.syncSource, popRetrieved.syncSource);
-        assertEquals(pop.authority, popRetrieved.authority);
-        assertEquals(pop.expedited, popRetrieved.expedited);
-        assertEquals(pop.serviceName, popRetrieved.serviceName);
-        assert(android.content.PeriodicSync.syncExtrasEquals(pop.extras, popRetrieved.extras));
+        assertEquals(sop.target.account, popRetrieved.target.account);
+        assertEquals(sop.target.provider, popRetrieved.target.provider);
+        assertEquals(sop.target.service, popRetrieved.target.service);
+        assertEquals(sop.target.userId, popRetrieved.target.userId);
+        assertEquals(sop.reason, popRetrieved.reason);
+        assertEquals(sop.syncSource, popRetrieved.syncSource);
+        assertEquals(sop.isExpedited(), popRetrieved.expedited);
+        assert(android.content.PeriodicSync.syncExtrasEquals(sop.extras, popRetrieved.extras));
+    }
 
+    /**
+     * Verify {@link com.android.server.content.SyncStorageEngine#writePendingOperationsLocked()}
+     */
+    public void testWritePendingOperationsLocked() throws Exception {
+        SyncOperation sop = new SyncOperation(account1,
+                DEFAULT_USER,
+                SyncOperation.REASON_IS_SYNCABLE,
+                SyncStorageEngine.SOURCE_LOCAL, authority1, Bundle.EMPTY,
+                1000L /* runtime */, 57L /* flex */, 0 /* backoff */, 0 /* delayuntil */,
+                true /* expedited */);
+        SyncOperation sop1 = new SyncOperation(account2,
+                DEFAULT_USER,
+                SyncOperation.REASON_PERIODIC,
+                SyncStorageEngine.SOURCE_LOCAL, authority1, defaultBundle,
+                0 /* runtime */, 0 /* flex */, 20L /* backoff */, 100L /* delayuntil */,
+                false /* expedited */);
+        SyncOperation deleted = new SyncOperation(account2,
+                DEFAULT_USER,
+                SyncOperation.REASON_SYNC_AUTO,
+                SyncStorageEngine.SOURCE_LOCAL, authority1, Bundle.EMPTY,
+                0 /* runtime */, 0 /* flex */, 20L /* backoff */, 100L /* delayuntil */,
+                false /* expedited */);
+        engine.insertIntoPending(sop);
+        engine.insertIntoPending(sop1);
+        engine.insertIntoPending(deleted);
+
+        SyncStorageEngine.PendingOperation popDeleted = engine.getPendingOperations().get(2);
+        // Free verifying, going to delete it anyway.
+        assertEquals(deleted.target.account, popDeleted.target.account);
+        assertEquals(deleted.target.provider, popDeleted.target.provider);
+        assertEquals(deleted.target.service, popDeleted.target.service);
+        assertEquals(deleted.target.userId, popDeleted.target.userId);
+        assertEquals(deleted.reason, popDeleted.reason);
+        assertEquals(deleted.syncSource, popDeleted.syncSource);
+        assertEquals(deleted.isExpedited(), popDeleted.expedited);
+        assert(android.content.PeriodicSync.syncExtrasEquals(deleted.extras, popDeleted.extras));
+        // Delete one to force write-all
+        engine.deleteFromPending(popDeleted);
+        assertEquals("Delete of pending op failed.", 2, engine.getPendingOperationCount());
+        // If there's dirty pending data (which there is because we deleted a pending op) this
+        // re-writes the entire file.
+        engine.writeAllState();
+
+        engine.clearAndReadState();
+
+        // Validate state read back out.
+        assertEquals("Delete of pending op failed.", 2, engine.getPendingOperationCount());
+
+        List<SyncStorageEngine.PendingOperation> pops = engine.getPendingOperations();
+
+        SyncStorageEngine.PendingOperation popRetrieved = pops.get(0);
+        assertEquals(sop.target.account, popRetrieved.target.account);
+        assertEquals(sop.target.provider, popRetrieved.target.provider);
+        assertEquals(sop.target.service, popRetrieved.target.service);
+        assertEquals(sop.target.userId, popRetrieved.target.userId);
+        assertEquals(sop.reason, popRetrieved.reason);
+        assertEquals(sop.syncSource, popRetrieved.syncSource);
+        assertEquals(sop.isExpedited(), popRetrieved.expedited);
+        assert(android.content.PeriodicSync.syncExtrasEquals(sop.extras, popRetrieved.extras));
+
+        popRetrieved = pops.get(1);
+        assertEquals(sop1.target.account, popRetrieved.target.account);
+        assertEquals(sop1.target.provider, popRetrieved.target.provider);
+        assertEquals(sop1.target.service, popRetrieved.target.service);
+        assertEquals(sop1.target.userId, popRetrieved.target.userId);
+        assertEquals(sop1.reason, popRetrieved.reason);
+        assertEquals(sop1.syncSource, popRetrieved.syncSource);
+        assertEquals(sop1.isExpedited(), popRetrieved.expedited);
+        assert(android.content.PeriodicSync.syncExtrasEquals(sop1.extras, popRetrieved.extras));
     }
 
     /**
@@ -134,42 +223,44 @@
         final int period2 = 1000;
 
         PeriodicSync sync1 = new PeriodicSync(account1, authority, extras1, period1);
+        EndPoint end1 = new EndPoint(account1, authority, 0);
+
         PeriodicSync sync2 = new PeriodicSync(account1, authority, extras2, period1);
         PeriodicSync sync3 = new PeriodicSync(account1, authority, extras2, period2);
         PeriodicSync sync4 = new PeriodicSync(account2, authority, extras2, period2);
 
-        
+
 
         removePeriodicSyncs(engine, account1, 0, authority);
         removePeriodicSyncs(engine, account2, 0, authority);
         removePeriodicSyncs(engine, account1, 1, authority);
 
         // this should add two distinct periodic syncs for account1 and one for account2
-        engine.addPeriodicSync(sync1, 0);
-        engine.addPeriodicSync(sync2, 0);
-        engine.addPeriodicSync(sync3, 0);
-        engine.addPeriodicSync(sync4, 0);
+        engine.updateOrAddPeriodicSync(new EndPoint(account1, authority, 0), period1, 0, extras1);
+        engine.updateOrAddPeriodicSync(new EndPoint(account1, authority, 0), period1, 0, extras2);
+        engine.updateOrAddPeriodicSync(new EndPoint(account1, authority, 0), period2, 0, extras2);
+        engine.updateOrAddPeriodicSync(new EndPoint(account2, authority, 0), period2, 0, extras2);
         // add a second user
-        engine.addPeriodicSync(sync2, 1);
+        engine.updateOrAddPeriodicSync(new EndPoint(account1, authority, 1), period1, 0, extras2);
 
-        List<PeriodicSync> syncs = engine.getPeriodicSyncs(account1, 0, authority);
+        List<PeriodicSync> syncs = engine.getPeriodicSyncs(new EndPoint(account1, authority, 0));
 
         assertEquals(2, syncs.size());
 
         assertEquals(sync1, syncs.get(0));
         assertEquals(sync3, syncs.get(1));
 
-        engine.removePeriodicSync(sync1, 0);
+        engine.removePeriodicSync(new EndPoint(account1, authority, 0), extras1);
 
-        syncs = engine.getPeriodicSyncs(account1, 0, authority);
+        syncs = engine.getPeriodicSyncs(new EndPoint(account1, authority, 0));
         assertEquals(1, syncs.size());
         assertEquals(sync3, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account2, 0, authority);
+        syncs = engine.getPeriodicSyncs(new EndPoint(account2, authority, 0));
         assertEquals(1, syncs.size());
         assertEquals(sync4, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(sync2.account, 1, sync2.authority);
+        syncs = engine.getPeriodicSyncs(new EndPoint(sync2.account, sync2.authority, 1));
         assertEquals(1, syncs.size());
         assertEquals(sync2, syncs.get(0));
     }
@@ -190,12 +281,19 @@
         final int period2 = 1000;
         final int flex1 = 10;
         final int flex2 = 100;
+        EndPoint point1 = new EndPoint(account1, authority, 0);
+        EndPoint point2 = new EndPoint(account2, authority, 0);
+        EndPoint point1User2 = new EndPoint(account1, authority, 1);
 
         PeriodicSync sync1 = new PeriodicSync(account1, authority, extras1, period1, flex1);
         PeriodicSync sync2 = new PeriodicSync(account1, authority, extras2, period1, flex1);
         PeriodicSync sync3 = new PeriodicSync(account1, authority, extras2, period2, flex2);
         PeriodicSync sync4 = new PeriodicSync(account2, authority, extras2, period2, flex2);
 
+        EndPoint target1 = new EndPoint(account1, authority, 0);
+        EndPoint target2 = new EndPoint(account2, authority, 0);
+        EndPoint target1UserB = new EndPoint(account1, authority, 1);
+
         MockContentResolver mockResolver = new MockContentResolver();
 
         SyncStorageEngine engine = SyncStorageEngine.newTestInstance(
@@ -206,40 +304,42 @@
         removePeriodicSyncs(engine, account1, 1, authority);
 
         // This should add two distinct periodic syncs for account1 and one for account2
-        engine.addPeriodicSync(sync1, 0);
-        engine.addPeriodicSync(sync2, 0);
-        engine.addPeriodicSync(sync3, 0); // Should edit sync2 and update the period.
-        engine.addPeriodicSync(sync4, 0);
-        // add a second user
-        engine.addPeriodicSync(sync2, 1);
+        engine.updateOrAddPeriodicSync(target1, period1, flex1, extras1);
+        engine.updateOrAddPeriodicSync(target1, period1, flex1, extras2);
+        // Edit existing sync and update the period and flex.
+        engine.updateOrAddPeriodicSync(target1, period2, flex2, extras2);
+        engine.updateOrAddPeriodicSync(target2, period2, flex2, extras2);
+        // add a target for a second user.
+        engine.updateOrAddPeriodicSync(target1UserB, period1, flex1, extras2);
 
-        List<PeriodicSync> syncs = engine.getPeriodicSyncs(account1, 0, authority);
+        List<PeriodicSync> syncs = engine.getPeriodicSyncs(target1);
 
         assertEquals(2, syncs.size());
 
         assertEquals(sync1, syncs.get(0));
         assertEquals(sync3, syncs.get(1));
 
-        engine.removePeriodicSync(sync1, 0);
+        engine.removePeriodicSync(target1, extras1);
 
-        syncs = engine.getPeriodicSyncs(account1, 0, authority);
+        syncs = engine.getPeriodicSyncs(target1);
         assertEquals(1, syncs.size());
         assertEquals(sync3, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account2, 0, authority);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(1, syncs.size());
         assertEquals(sync4, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(sync2.account, 1, sync2.authority);
+        syncs = engine.getPeriodicSyncs(target1UserB);
         assertEquals(1, syncs.size());
         assertEquals(sync2, syncs.get(0));
     }
 
     private void removePeriodicSyncs(SyncStorageEngine engine, Account account, int userId, String authority) {
-        engine.setIsSyncable(account, userId, authority, engine.getIsSyncable(account, 0, authority));
-        List<PeriodicSync> syncs = engine.getPeriodicSyncs(account, userId, authority);
+        EndPoint target = new EndPoint(account, authority, userId);
+        engine.setIsSyncable(account, userId, authority, engine.getIsSyncable(account, userId, authority));
+        List<PeriodicSync> syncs = engine.getPeriodicSyncs(target);
         for (PeriodicSync sync : syncs) {
-            engine.removePeriodicSync(sync, userId);
+            engine.removePeriodicSync(target, sync.extras);
         }
     }
 
@@ -264,16 +364,19 @@
         final int flex1 = 10;
         final int flex2 = 100;
 
+        EndPoint point1 = new EndPoint(account1, authority1, 0);
+        EndPoint point2 = new EndPoint(account1, authority2, 0);
+        EndPoint point3 = new EndPoint(account2, authority1, 0);
+
         PeriodicSync sync1 = new PeriodicSync(account1, authority1, extras1, period1, flex1);
         PeriodicSync sync2 = new PeriodicSync(account1, authority1, extras2, period1, flex1);
         PeriodicSync sync3 = new PeriodicSync(account1, authority2, extras1, period1, flex1);
         PeriodicSync sync4 = new PeriodicSync(account1, authority2, extras2, period2, flex2);
         PeriodicSync sync5 = new PeriodicSync(account2, authority1, extras1, period1, flex1);
 
-        MockContentResolver mockResolver = new MockContentResolver();
-
-        SyncStorageEngine engine = SyncStorageEngine.newTestInstance(
-                new TestContext(mockResolver, getContext()));
+        EndPoint target1 = new EndPoint(account1, authority1, 0);
+        EndPoint target2 = new EndPoint(account1, authority2, 0);
+        EndPoint target3 = new EndPoint(account2, authority1, 0);
 
         removePeriodicSyncs(engine, account1, 0, authority1);
         removePeriodicSyncs(engine, account2, 0, authority1);
@@ -294,26 +397,26 @@
         engine.setIsSyncable(account2, 0, authority2, 0);
         engine.setSyncAutomatically(account2, 0, authority2, true);
 
-        engine.addPeriodicSync(sync1, 0);
-        engine.addPeriodicSync(sync2, 0);
-        engine.addPeriodicSync(sync3, 0);
-        engine.addPeriodicSync(sync4, 0);
-        engine.addPeriodicSync(sync5, 0);
+        engine.updateOrAddPeriodicSync(target1, period1, flex1, extras1);
+        engine.updateOrAddPeriodicSync(target1, period1, flex1, extras2);
+        engine.updateOrAddPeriodicSync(target2, period1, flex1, extras1);
+        engine.updateOrAddPeriodicSync(target2, period2, flex2, extras2);
+        engine.updateOrAddPeriodicSync(target3, period1, flex1, extras1);
 
         engine.writeAllState();
         engine.clearAndReadState();
 
-        List<PeriodicSync> syncs = engine.getPeriodicSyncs(account1, 0, authority1);
+        List<PeriodicSync> syncs = engine.getPeriodicSyncs(target1);
         assertEquals(2, syncs.size());
         assertEquals(sync1, syncs.get(0));
         assertEquals(sync2, syncs.get(1));
 
-        syncs = engine.getPeriodicSyncs(account1, 0, authority2);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(2, syncs.size());
         assertEquals(sync3, syncs.get(0));
         assertEquals(sync4, syncs.get(1));
 
-        syncs = engine.getPeriodicSyncs(account2, 0, authority1);
+        syncs = engine.getPeriodicSyncs(target3);
         assertEquals(1, syncs.size());
         assertEquals(sync5, syncs.get(0));
 
@@ -328,6 +431,50 @@
         assertEquals(0, engine.getIsSyncable(account2, 0, authority2));
     }
 
+    @SmallTest
+    public void testComponentParsing() throws Exception {
+
+        byte[] accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+                + "<accounts version=\"2\" >\n"
+                + "<authority id=\"0\" user=\"0\" package=\"" + syncService1.getPackageName() + "\""
+                + " class=\"" + syncService1.getClassName() + "\" syncable=\"true\">"
+                + "\n<periodicSync period=\"" + dayPoll + "\" flex=\"" + dayFuzz + "\"/>"
+                + "\n</authority>"
+                + "</accounts>").getBytes();
+
+        File syncDir = getSyncDir();
+        syncDir.mkdirs();
+        AtomicFile accountInfoFile = new AtomicFile(new File(syncDir, "accounts.xml"));
+        FileOutputStream fos = accountInfoFile.startWrite();
+        fos.write(accountsFileData);
+        accountInfoFile.finishWrite(fos);
+
+        engine.clearAndReadState();
+
+        SyncStorageEngine.AuthorityInfo aInfo = engine.getAuthority(0);
+        assertNotNull(aInfo);
+
+        // Test service component read
+        List<PeriodicSync> syncs = engine.getPeriodicSyncs(
+                new SyncStorageEngine.EndPoint(syncService1, 0));
+        assertEquals(1, syncs.size());
+        assertEquals(true, engine.getIsTargetServiceActive(syncService1, 0));
+    }
+
+    @SmallTest
+    public void testComponentSettings() throws Exception {
+        EndPoint target1 = new EndPoint(syncService1, 0);
+        engine.updateOrAddPeriodicSync(target1, dayPoll, dayFuzz, Bundle.EMPTY);
+        
+        engine.setIsTargetServiceActive(target1.service, 0, true);
+        boolean active = engine.getIsTargetServiceActive(target1.service, 0);
+        assert(active);
+
+        engine.setIsTargetServiceActive(target1.service, 1, false);
+        active = engine.getIsTargetServiceActive(target1.service, 1);
+        assert(!active);
+    }
+
     @MediumTest
     /**
      * V2 introduces flex time as well as service components.
@@ -339,20 +486,20 @@
         final String authority2 = "auth2";
         final String authority3 = "auth3";
 
-        final long dayPoll = (60 * 60 * 24);
-        final long dayFuzz = 60;
-        final long thousandSecs = 1000;
-        final long thousandSecsFuzz = 100;
-        final Bundle extras = new Bundle();
-        PeriodicSync sync1 = new PeriodicSync(account, authority1, extras, dayPoll, dayFuzz);
-        PeriodicSync sync2 = new PeriodicSync(account, authority2, extras, dayPoll, dayFuzz);
-        PeriodicSync sync3 = new PeriodicSync(account, authority3, extras, dayPoll, dayFuzz);
-        PeriodicSync sync1s = new PeriodicSync(account, authority1, extras, thousandSecs, thousandSecsFuzz);
-        PeriodicSync sync2s = new PeriodicSync(account, authority2, extras, thousandSecs, thousandSecsFuzz);
-        PeriodicSync sync3s = new PeriodicSync(account, authority3, extras, thousandSecs, thousandSecsFuzz);
-        MockContentResolver mockResolver = new MockContentResolver();
+        EndPoint target1 = new EndPoint(account, authority1, 0);
+        EndPoint target2 = new EndPoint(account, authority2, 0);
+        EndPoint target3 = new EndPoint(account, authority3, 0);
+        EndPoint target4 = new EndPoint(account, authority3, 1);
 
-        final TestContext testContext = new TestContext(mockResolver, getContext());
+        PeriodicSync sync1 = new PeriodicSync(account, authority1, Bundle.EMPTY, dayPoll, dayFuzz);
+        PeriodicSync sync2 = new PeriodicSync(account, authority2, Bundle.EMPTY, dayPoll, dayFuzz);
+        PeriodicSync sync3 = new PeriodicSync(account, authority3, Bundle.EMPTY, dayPoll, dayFuzz);
+        PeriodicSync sync1s = new PeriodicSync(account, authority1, Bundle.EMPTY, thousandSecs,
+                thousandSecsFuzz);
+        PeriodicSync sync2s = new PeriodicSync(account, authority2, Bundle.EMPTY, thousandSecs,
+                thousandSecsFuzz);
+        PeriodicSync sync3s = new PeriodicSync(account, authority3, Bundle.EMPTY, thousandSecs,
+                thousandSecsFuzz);
 
         byte[] accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
                 + "<accounts version=\"2\" >\n"
@@ -378,21 +525,22 @@
         fos.write(accountsFileData);
         accountInfoFile.finishWrite(fos);
 
-        SyncStorageEngine engine = SyncStorageEngine.newTestInstance(testContext);
+        engine.clearAndReadState();
 
-        List<PeriodicSync> syncs = engine.getPeriodicSyncs(account, 0, authority1);
+        List<PeriodicSync> syncs = engine.getPeriodicSyncs(target1);
         assertEquals("Got incorrect # of syncs", 1, syncs.size());
         assertEquals(sync1, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority2);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(1, syncs.size());
         assertEquals(sync2, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority3);
+        syncs = engine.getPeriodicSyncs(target3);
         assertEquals(1, syncs.size());
         assertEquals(sync3, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 1, authority3);
+        syncs = engine.getPeriodicSyncs(target4);
+
         assertEquals(1, syncs.size());
         assertEquals(sync3, syncs.get(0));
 
@@ -411,13 +559,13 @@
 
         engine.clearAndReadState();
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority1);
+        syncs = engine.getPeriodicSyncs(target1);
         assertEquals(0, syncs.size());
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority2);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(0, syncs.size());
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority3);
+        syncs = engine.getPeriodicSyncs(target3);
         assertEquals(0, syncs.size());
 
         accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
@@ -440,15 +588,15 @@
 
         engine.clearAndReadState();
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority1);
+        syncs = engine.getPeriodicSyncs(target1);
         assertEquals(1, syncs.size());
         assertEquals(sync1s, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority2);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(1, syncs.size());
         assertEquals(sync2s, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority3);
+        syncs = engine.getPeriodicSyncs(target3);
         assertEquals(1, syncs.size());
         assertEquals(sync3s, syncs.get(0));
     }
@@ -460,6 +608,12 @@
         final String authority2 = "auth2";
         final String authority3 = "auth3";
         final Bundle extras = new Bundle();
+
+        EndPoint target1 = new EndPoint(account, authority1, 0);
+        EndPoint target2 = new EndPoint(account, authority2, 0);
+        EndPoint target3 = new EndPoint(account, authority3, 0);
+        EndPoint target4 = new EndPoint(account, authority3, 1);
+
         PeriodicSync sync1 = new PeriodicSync(account, authority1, extras, (long) (60 * 60 * 24));
         PeriodicSync sync2 = new PeriodicSync(account, authority2, extras, (long) (60 * 60 * 24));
         PeriodicSync sync3 = new PeriodicSync(account, authority3, extras, (long) (60 * 60 * 24));
@@ -488,19 +642,20 @@
 
         SyncStorageEngine engine = SyncStorageEngine.newTestInstance(testContext);
 
-        List<PeriodicSync> syncs = engine.getPeriodicSyncs(account, 0, authority1);
+        List<PeriodicSync> syncs = engine.getPeriodicSyncs(target1);
         assertEquals(1, syncs.size());
         assertEquals("expected sync1: " + sync1.toString() + " == sync 2" + syncs.get(0).toString(), sync1, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority2);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(1, syncs.size());
         assertEquals(sync2, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority3);
+        syncs = engine.getPeriodicSyncs(target3);
         assertEquals(1, syncs.size());
         assertEquals(sync3, syncs.get(0));
+        syncs = engine.getPeriodicSyncs(target4);
 
-        syncs = engine.getPeriodicSyncs(account, 1, authority3);
+
         assertEquals(1, syncs.size());
         assertEquals(sync3, syncs.get(0));
 
@@ -518,13 +673,13 @@
 
         engine.clearAndReadState();
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority1);
+        syncs = engine.getPeriodicSyncs(target1);
         assertEquals(0, syncs.size());
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority2);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(0, syncs.size());
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority3);
+        syncs = engine.getPeriodicSyncs(target3);
         assertEquals(0, syncs.size());
 
         accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
@@ -547,15 +702,15 @@
 
         engine.clearAndReadState();
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority1);
+        syncs = engine.getPeriodicSyncs(target1);
         assertEquals(1, syncs.size());
         assertEquals(sync1s, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority2);
+        syncs = engine.getPeriodicSyncs(target2);
         assertEquals(1, syncs.size());
         assertEquals(sync2s, syncs.get(0));
 
-        syncs = engine.getPeriodicSyncs(account, 0, authority3);
+        syncs = engine.getPeriodicSyncs(target3);
         assertEquals(1, syncs.size());
         assertEquals(sync3s, syncs.get(0));
     }
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DeviceOwnerTest.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DeviceOwnerTest.java
new file mode 100644
index 0000000..f913b97
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DeviceOwnerTest.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2014 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.android.server.devicepolicy;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+/**
+ * Tests for the DeviceOwner object that saves & loads device and policy owner information.
+ * run this test with:
+ *   make -j FrameworksServicesTests
+ *   runtest --path frameworks/base/services/tests/servicestests/ \
+ *       src/com/android/server/devicepolicy/DeviceOwnerTest.java
+ */
+public class DeviceOwnerTest extends AndroidTestCase {
+
+    private ByteArrayInputStream mInputStreamForTest;
+    private ByteArrayOutputStream mOutputStreamForTest = new ByteArrayOutputStream();
+
+    @SmallTest
+    public void testDeviceOwnerOnly() throws Exception {
+        DeviceOwner out = new DeviceOwner(null, mOutputStreamForTest);
+        out.setDeviceOwner("some.device.owner.package", "owner");
+        out.writeOwnerFile();
+
+        mInputStreamForTest = new ByteArrayInputStream(mOutputStreamForTest.toByteArray());
+        DeviceOwner in = new DeviceOwner(mInputStreamForTest, null);
+        in.readOwnerFile();
+
+        assertEquals("some.device.owner.package", in.getDeviceOwnerPackageName());
+        assertEquals("owner", in.getDeviceOwnerName());
+        assertNull(in.getProfileOwnerPackageName(1));
+    }
+
+    @SmallTest
+    public void testProfileOwnerOnly() throws Exception {
+        DeviceOwner out = new DeviceOwner(null, mOutputStreamForTest);
+        out.setProfileOwner("some.profile.owner.package", "some-company", 1);
+        out.writeOwnerFile();
+
+        mInputStreamForTest = new ByteArrayInputStream(mOutputStreamForTest.toByteArray());
+        DeviceOwner in = new DeviceOwner(mInputStreamForTest, null);
+        in.readOwnerFile();
+
+        assertNull(in.getDeviceOwnerPackageName());
+        assertNull(in.getDeviceOwnerName());
+        assertEquals("some.profile.owner.package", in.getProfileOwnerPackageName(1));
+        assertEquals("some-company", in.getProfileOwnerName(1));
+    }
+
+    @SmallTest
+    public void testDeviceAndProfileOwners() throws Exception {
+        DeviceOwner out = new DeviceOwner(null, mOutputStreamForTest);
+        out.setDeviceOwner("some.device.owner.package", "owner");
+        out.setProfileOwner("some.profile.owner.package", "some-company", 1);
+        out.setProfileOwner("some.other.profile.owner", "some-other-company", 2);
+        out.writeOwnerFile();
+
+        mInputStreamForTest = new ByteArrayInputStream(mOutputStreamForTest.toByteArray());
+
+        DeviceOwner in = new DeviceOwner(mInputStreamForTest, null);
+        in.readOwnerFile();
+
+        assertEquals("some.device.owner.package", in.getDeviceOwnerPackageName());
+        assertEquals("owner", in.getDeviceOwnerName());
+        assertEquals("some.profile.owner.package", in.getProfileOwnerPackageName(1));
+        assertEquals("some-company", in.getProfileOwnerName(1));
+        assertEquals("some.other.profile.owner", in.getProfileOwnerPackageName(2));
+        assertEquals("some-other-company", in.getProfileOwnerName(2));
+    }
+}
\ No newline at end of file
diff --git a/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java b/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
new file mode 100644
index 0000000..33f604d
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/location/LocationRequestStatisticsTest.java
@@ -0,0 +1,175 @@
+package com.android.server.location;
+
+import com.android.server.location.LocationRequestStatistics.PackageProviderKey;
+import com.android.server.location.LocationRequestStatistics.PackageStatistics;
+
+import android.os.SystemClock;
+import android.test.AndroidTestCase;
+
+/**
+ * Unit tests for {@link LocationRequestStatistics}.
+ */
+public class LocationRequestStatisticsTest extends AndroidTestCase {
+    private static final String PACKAGE1 = "package1";
+    private static final String PACKAGE2 = "package2";
+    private static final String PROVIDER1 = "provider1";
+    private static final String PROVIDER2 = "provider2";
+    private static final long INTERVAL1 = 5000;
+    private static final long INTERVAL2 = 100000;
+
+    private LocationRequestStatistics mStatistics;
+    private long mStartElapsedRealtimeMs;
+
+    @Override
+    public void setUp() {
+        mStatistics = new LocationRequestStatistics();
+        mStartElapsedRealtimeMs = SystemClock.elapsedRealtime();
+    }
+
+    /**
+     * Tests that adding a single package works correctly.
+     */
+    public void testSinglePackage() {
+        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1);
+
+        assertEquals(1, mStatistics.statistics.size());
+        PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
+        assertEquals(PACKAGE1, key.packageName);
+        assertEquals(PROVIDER1, key.providerName);
+        PackageStatistics stats = mStatistics.statistics.values().iterator().next();
+        verifyStatisticsTimes(stats);
+        assertEquals(INTERVAL1, stats.getFastestIntervalMs());
+        assertEquals(INTERVAL1, stats.getSlowestIntervalMs());
+        assertTrue(stats.isActive());
+    }
+
+    /**
+     * Tests that adding a single package works correctly when it is stopped and restarted.
+     */
+    public void testSinglePackage_stopAndRestart() {
+        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1);
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1);
+
+        assertEquals(1, mStatistics.statistics.size());
+        PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
+        assertEquals(PACKAGE1, key.packageName);
+        assertEquals(PROVIDER1, key.providerName);
+        PackageStatistics stats = mStatistics.statistics.values().iterator().next();
+        verifyStatisticsTimes(stats);
+        assertEquals(INTERVAL1, stats.getFastestIntervalMs());
+        assertEquals(INTERVAL1, stats.getSlowestIntervalMs());
+        assertTrue(stats.isActive());
+
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        assertFalse(stats.isActive());
+    }
+
+    /**
+     * Tests that adding a single package works correctly when multiple intervals are used.
+     */
+    public void testSinglePackage_multipleIntervals() {
+        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1);
+        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL2);
+
+        assertEquals(1, mStatistics.statistics.size());
+        PackageProviderKey key = mStatistics.statistics.keySet().iterator().next();
+        assertEquals(PACKAGE1, key.packageName);
+        assertEquals(PROVIDER1, key.providerName);
+        PackageStatistics stats = mStatistics.statistics.values().iterator().next();
+        verifyStatisticsTimes(stats);
+        assertEquals(INTERVAL1, stats.getFastestIntervalMs());
+        assertTrue(stats.isActive());
+
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        assertTrue(stats.isActive());
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        assertFalse(stats.isActive());
+    }
+
+    /**
+     * Tests that adding a single package works correctly when multiple providers are used.
+     */
+    public void testSinglePackage_multipleProviders() {
+        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1);
+        mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL2);
+
+        assertEquals(2, mStatistics.statistics.size());
+        PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, PROVIDER1);
+        PackageStatistics stats1 = mStatistics.statistics.get(key1);
+        verifyStatisticsTimes(stats1);
+        assertEquals(INTERVAL1, stats1.getSlowestIntervalMs());
+        assertEquals(INTERVAL1, stats1.getFastestIntervalMs());
+        assertTrue(stats1.isActive());
+        PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, PROVIDER2);
+        PackageStatistics stats2 = mStatistics.statistics.get(key2);
+        verifyStatisticsTimes(stats2);
+        assertEquals(INTERVAL2, stats2.getSlowestIntervalMs());
+        assertEquals(INTERVAL2, stats2.getFastestIntervalMs());
+        assertTrue(stats2.isActive());
+
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        assertFalse(stats1.isActive());
+        assertTrue(stats2.isActive());
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+        assertFalse(stats1.isActive());
+        assertFalse(stats2.isActive());
+    }
+
+    /**
+     * Tests that adding multiple packages works correctly.
+     */
+    public void testMultiplePackages() {
+        mStatistics.startRequesting(PACKAGE1, PROVIDER1, INTERVAL1);
+        mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL1);
+        mStatistics.startRequesting(PACKAGE1, PROVIDER2, INTERVAL2);
+        mStatistics.startRequesting(PACKAGE2, PROVIDER1, INTERVAL1);
+
+        assertEquals(3, mStatistics.statistics.size());
+        PackageProviderKey key1 = new PackageProviderKey(PACKAGE1, PROVIDER1);
+        PackageStatistics stats1 = mStatistics.statistics.get(key1);
+        verifyStatisticsTimes(stats1);
+        assertEquals(INTERVAL1, stats1.getSlowestIntervalMs());
+        assertEquals(INTERVAL1, stats1.getFastestIntervalMs());
+        assertTrue(stats1.isActive());
+
+        PackageProviderKey key2 = new PackageProviderKey(PACKAGE1, PROVIDER2);
+        PackageStatistics stats2 = mStatistics.statistics.get(key2);
+        verifyStatisticsTimes(stats2);
+        assertEquals(INTERVAL2, stats2.getSlowestIntervalMs());
+        assertEquals(INTERVAL1, stats2.getFastestIntervalMs());
+        assertTrue(stats2.isActive());
+
+        PackageProviderKey key3 = new PackageProviderKey(PACKAGE2, PROVIDER1);
+        PackageStatistics stats3 = mStatistics.statistics.get(key3);
+        verifyStatisticsTimes(stats3);
+        assertEquals(INTERVAL1, stats3.getSlowestIntervalMs());
+        assertEquals(INTERVAL1, stats3.getFastestIntervalMs());
+        assertTrue(stats3.isActive());
+
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER1);
+        assertFalse(stats1.isActive());
+        assertTrue(stats2.isActive());
+        assertTrue(stats3.isActive());
+
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+        assertFalse(stats1.isActive());
+        assertTrue(stats2.isActive());
+        assertTrue(stats3.isActive());
+        mStatistics.stopRequesting(PACKAGE1, PROVIDER2);
+        assertFalse(stats2.isActive());
+
+        mStatistics.stopRequesting(PACKAGE2, PROVIDER1);
+        assertFalse(stats1.isActive());
+        assertFalse(stats2.isActive());
+        assertFalse(stats3.isActive());
+    }
+
+    private void verifyStatisticsTimes(PackageStatistics stats) {
+        long durationMs = stats.getDurationMs();
+        long timeSinceFirstRequestMs = stats.getTimeSinceFirstRequestMs();
+        long maxDeltaMs = SystemClock.elapsedRealtime() - mStartElapsedRealtimeMs;
+        assertTrue("Duration is too large", durationMs <= maxDeltaMs);
+        assertTrue("Time since first request is too large", timeSinceFirstRequestMs <= maxDeltaMs);
+    }
+}
diff --git a/services/usb/java/com/android/server/usb/UsbDeviceManager.java b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
index 5d22ffc..f5ac178 100644
--- a/services/usb/java/com/android/server/usb/UsbDeviceManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDeviceManager.java
@@ -53,6 +53,7 @@
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.List;
@@ -297,12 +298,7 @@
     }
 
     private static boolean containsFunction(String functions, String function) {
-        int index = functions.indexOf(function);
-        if (index < 0) return false;
-        if (index > 0 && functions.charAt(index - 1) != ',') return false;
-        int charAfter = index + function.length();
-        if (charAfter < functions.length() && functions.charAt(charAfter) != ',') return false;
-        return true;
+        return Arrays.asList(functions.split(",")).contains(function);
     }
 
     private final class UsbHandler extends Handler {
@@ -725,6 +721,7 @@
                     PendingIntent pi = PendingIntent.getActivityAsUser(mContext, 0,
                             intent, 0, null, UserHandle.CURRENT);
                     notification.setLatestEventInfo(mContext, title, message, pi);
+                    notification.visibility = Notification.VISIBILITY_PUBLIC;
                     mNotificationManager.notifyAsUser(null, id, notification,
                             UserHandle.ALL);
                     mUsbNotificationId = id;
@@ -760,6 +757,7 @@
                     PendingIntent pi = PendingIntent.getActivityAsUser(mContext, 0,
                             intent, 0, null, UserHandle.CURRENT);
                     notification.setLatestEventInfo(mContext, title, message, pi);
+                    notification.visibility = Notification.VISIBILITY_PUBLIC;
                     mAdbNotificationShown = true;
                     mNotificationManager.notifyAsUser(null, id, notification,
                             UserHandle.ALL);
diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java
index dfaad0b..8b54264 100644
--- a/services/usb/java/com/android/server/usb/UsbHostManager.java
+++ b/services/usb/java/com/android/server/usb/UsbHostManager.java
@@ -17,6 +17,8 @@
 package com.android.server.usb;
 
 import android.content.Context;
+import android.content.Intent;
+import android.hardware.usb.UsbConfiguration;
 import android.hardware.usb.UsbConstants;
 import android.hardware.usb.UsbDevice;
 import android.hardware.usb.UsbEndpoint;
@@ -24,12 +26,18 @@
 import android.os.Bundle;
 import android.os.ParcelFileDescriptor;
 import android.os.Parcelable;
+import android.os.UserHandle;
 import android.util.Slog;
 
+import com.android.alsascan.AlsaCardsParser;
+import com.android.alsascan.AlsaDevicesParser;
 import com.android.internal.annotations.GuardedBy;
 
+import java.io.File;
 import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
 import java.io.PrintWriter;
+import java.util.ArrayList;
 import java.util.HashMap;
 
 /**
@@ -37,7 +45,7 @@
  */
 public class UsbHostManager {
     private static final String TAG = UsbHostManager.class.getSimpleName();
-    private static final boolean LOG = false;
+    private static final boolean DEBUG_AUDIO = false;
 
     // contains all connected USB devices
     private final HashMap<String, UsbDevice> mDevices = new HashMap<String, UsbDevice>();
@@ -48,6 +56,22 @@
     private final Context mContext;
     private final Object mLock = new Object();
 
+    private UsbDevice mNewDevice;
+    private UsbConfiguration mNewConfiguration;
+    private UsbInterface mNewInterface;
+    private ArrayList<UsbConfiguration> mNewConfigurations;
+    private ArrayList<UsbInterface> mNewInterfaces;
+    private ArrayList<UsbEndpoint> mNewEndpoints;
+
+    // Attributes of any connected USB audio device.
+    //TODO(pmclean) When we extend to multiple, USB Audio devices, we will need to get
+    // more clever about this.
+    private int mConnectedUsbCard = -1;
+    private int mConnectedUsbDeviceNum = -1;
+    private boolean mConnectedHasPlayback = false;
+    private boolean mConnectedHasCapture = false;
+    private boolean mConnectedHasMIDI = false;
+
     @GuardedBy("mLock")
     private UsbSettingsManager mCurrentSettings;
 
@@ -93,74 +117,244 @@
         return false;
     }
 
-    /* Called from JNI in monitorUsbHostBus() to report new USB devices */
-    private void usbDeviceAdded(String deviceName, int vendorID, int productID,
+    // Broadcasts the arrival/departure of a USB audio interface
+    // card - the ALSA card number of the physical interface
+    // device - the ALSA device number of the physical interface
+    // enabled - if true, we're connecting a device (it's arrived), else disconnecting
+    private void sendDeviceNotification(int card, int device, boolean enabled,
+            boolean hasPlayback, boolean hasCapture, boolean hasMIDI) {
+        // send a sticky broadcast containing current USB state
+        Intent intent = new Intent(Intent.ACTION_USB_AUDIO_DEVICE_PLUG);
+        intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
+        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+        intent.putExtra("state", enabled ? 1 : 0);
+        intent.putExtra("card", card);
+        intent.putExtra("device", device);
+        intent.putExtra("hasPlayback", hasPlayback);
+        intent.putExtra("hasCapture", hasCapture);
+        intent.putExtra("hasMIDI", hasMIDI);
+        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
+    }
+
+    private boolean waitForAlsaFile(int card, int device, boolean capture) {
+        // These values were empirically determined.
+        final int kNumRetries = 5;
+        final int kSleepTime = 500; // ms
+        String alsaDevPath = "/dev/snd/pcmC" + card + "D" + device + (capture ? "c" : "p");
+        File alsaDevFile = new File(alsaDevPath);
+        boolean exists = false;
+        for (int retry = 0; !exists && retry < kNumRetries; retry++) {
+            exists = alsaDevFile.exists();
+            if (!exists) {
+                try {
+                    Thread.sleep(kSleepTime);
+                } catch (IllegalThreadStateException ex) {
+                    Slog.d(TAG, "usb: IllegalThreadStateException while waiting for ALSA file.");
+                } catch (java.lang.InterruptedException ex) {
+                    Slog.d(TAG, "usb: InterruptedException while waiting for ALSA file.");
+                }
+            }
+        }
+
+        return exists;
+    }
+
+    /* Called from JNI in monitorUsbHostBus() to report new USB devices
+       Returns true if successful, in which case the JNI code will continue adding configurations,
+       interfaces and endpoints, and finally call endUsbDeviceAdded after all descriptors
+       have been processed
+     */
+    private boolean beginUsbDeviceAdded(String deviceName, int vendorID, int productID,
             int deviceClass, int deviceSubclass, int deviceProtocol,
-            String manufacturerName, String productName, String serialNumber,
-            /* array of quintuples containing id, class, subclass, protocol
-               and number of endpoints for each interface */
-            int[] interfaceValues,
-           /* array of quadruples containing address, attributes, max packet size
-              and interval for each endpoint */
-            int[] endpointValues) {
+            String manufacturerName, String productName, String serialNumber) {
+
+        if (DEBUG_AUDIO) {
+            Slog.d(TAG, "usb:UsbHostManager.beginUsbDeviceAdded(" + deviceName + ")");
+            // Audio Class Codes:
+            // Audio: 0x01
+            // Audio Subclass Codes:
+            // undefined: 0x00
+            // audio control: 0x01
+            // audio streaming: 0x02
+            // midi streaming: 0x03
+
+            // some useful debugging info
+            Slog.d(TAG, "usb: nm:" + deviceName + " vnd:" + vendorID + " prd:" + productID + " cls:"
+                    + deviceClass + " sub:" + deviceSubclass + " proto:" + deviceProtocol);
+        }
+
+        // OK this is non-obvious, but true. One can't tell if the device being attached is even
+        // potentially an audio device without parsing the interface descriptors, so punt on any
+        // such test until endUsbDeviceAdded() when we have that info.
 
         if (isBlackListed(deviceName) ||
                 isBlackListed(deviceClass, deviceSubclass, deviceProtocol)) {
-            return;
+            return false;
         }
 
         synchronized (mLock) {
             if (mDevices.get(deviceName) != null) {
                 Slog.w(TAG, "device already on mDevices list: " + deviceName);
-                return;
+                return false;
             }
 
-            int numInterfaces = interfaceValues.length / 5;
-            Parcelable[] interfaces = new UsbInterface[numInterfaces];
-            try {
-                // repackage interfaceValues as an array of UsbInterface
-                int intf, endp, ival = 0, eval = 0;
-                for (intf = 0; intf < numInterfaces; intf++) {
-                    int interfaceId = interfaceValues[ival++];
-                    int interfaceClass = interfaceValues[ival++];
-                    int interfaceSubclass = interfaceValues[ival++];
-                    int interfaceProtocol = interfaceValues[ival++];
-                    int numEndpoints = interfaceValues[ival++];
-
-                    Parcelable[] endpoints = new UsbEndpoint[numEndpoints];
-                    for (endp = 0; endp < numEndpoints; endp++) {
-                        int address = endpointValues[eval++];
-                        int attributes = endpointValues[eval++];
-                        int maxPacketSize = endpointValues[eval++];
-                        int interval = endpointValues[eval++];
-                        endpoints[endp] = new UsbEndpoint(address, attributes,
-                                maxPacketSize, interval);
-                    }
-
-                    // don't allow if any interfaces are blacklisted
-                    if (isBlackListed(interfaceClass, interfaceSubclass, interfaceProtocol)) {
-                        return;
-                    }
-                    interfaces[intf] = new UsbInterface(interfaceId, interfaceClass,
-                            interfaceSubclass, interfaceProtocol, endpoints);
-                }
-            } catch (Exception e) {
-                // beware of index out of bound exceptions, which might happen if
-                // a device does not set bNumEndpoints correctly
-                Slog.e(TAG, "error parsing USB descriptors", e);
-                return;
+            if (mNewDevice != null) {
+                Slog.e(TAG, "mNewDevice is not null in endUsbDeviceAdded");
+                return false;
             }
 
-            UsbDevice device = new UsbDevice(deviceName, vendorID, productID,
+            mNewDevice = new UsbDevice(deviceName, vendorID, productID,
                     deviceClass, deviceSubclass, deviceProtocol,
-                    manufacturerName, productName, serialNumber, interfaces);
-            mDevices.put(deviceName, device);
-            getCurrentSettings().deviceAttached(device);
+                    manufacturerName, productName, serialNumber);
+
+            mNewConfigurations = new ArrayList<UsbConfiguration>();
+            mNewInterfaces = new ArrayList<UsbInterface>();
+            mNewEndpoints = new ArrayList<UsbEndpoint>();
         }
+
+        return true;
+    }
+
+    /* Called from JNI in monitorUsbHostBus() to report new USB configuration for the device
+       currently being added.  Returns true if successful, false in case of error.
+     */
+    private void addUsbConfiguration(int id, String name, int attributes, int maxPower) {
+        if (mNewConfiguration != null) {
+            mNewConfiguration.setInterfaces(
+                    mNewInterfaces.toArray(new UsbInterface[mNewInterfaces.size()]));
+            mNewInterfaces.clear();
+        }
+
+        mNewConfiguration = new UsbConfiguration(id, name, attributes, maxPower);
+        mNewConfigurations.add(mNewConfiguration);
+    }
+
+    /* Called from JNI in monitorUsbHostBus() to report new USB interface for the device
+       currently being added.  Returns true if successful, false in case of error.
+     */
+    private void addUsbInterface(int id, String name, int altSetting,
+            int Class, int subClass, int protocol) {
+        if (mNewInterface != null) {
+            mNewInterface.setEndpoints(
+                    mNewEndpoints.toArray(new UsbEndpoint[mNewEndpoints.size()]));
+            mNewEndpoints.clear();
+        }
+
+        mNewInterface = new UsbInterface(id, altSetting, name, Class, subClass, protocol);
+        mNewInterfaces.add(mNewInterface);
+    }
+
+    /* Called from JNI in monitorUsbHostBus() to report new USB endpoint for the device
+       currently being added.  Returns true if successful, false in case of error.
+     */
+    private void addUsbEndpoint(int address, int attributes, int maxPacketSize, int interval) {
+        mNewEndpoints.add(new UsbEndpoint(address, attributes, maxPacketSize, interval));
+    }
+
+    /* Called from JNI in monitorUsbHostBus() to finish adding a new device */
+    private void endUsbDeviceAdded() {
+        if (DEBUG_AUDIO) {
+            Slog.d(TAG, "usb:UsbHostManager.endUsbDeviceAdded()");
+        }
+        if (mNewInterface != null) {
+            mNewInterface.setEndpoints(
+                    mNewEndpoints.toArray(new UsbEndpoint[mNewEndpoints.size()]));
+        }
+        if (mNewConfiguration != null) {
+            mNewConfiguration.setInterfaces(
+                    mNewInterfaces.toArray(new UsbInterface[mNewInterfaces.size()]));
+        }
+
+        // Is there an audio interface in there?
+        final int kUsbClassId_Audio = 0x01;
+        boolean isAudioDevice = false;
+        for (int ntrfaceIndex = 0; !isAudioDevice && ntrfaceIndex < mNewInterfaces.size();
+                ntrfaceIndex++) {
+            UsbInterface ntrface = mNewInterfaces.get(ntrfaceIndex);
+            if (ntrface.getInterfaceClass() == kUsbClassId_Audio) {
+                isAudioDevice = true;
+            }
+        }
+
+        synchronized (mLock) {
+            if (mNewDevice != null) {
+                mNewDevice.setConfigurations(
+                        mNewConfigurations.toArray(new UsbConfiguration[mNewConfigurations.size()]));
+                mDevices.put(mNewDevice.getDeviceName(), mNewDevice);
+                Slog.d(TAG, "Added device " + mNewDevice);
+                getCurrentSettings().deviceAttached(mNewDevice);
+            } else {
+                Slog.e(TAG, "mNewDevice is null in endUsbDeviceAdded");
+            }
+            mNewDevice = null;
+            mNewConfigurations = null;
+            mNewInterfaces = null;
+            mNewEndpoints = null;
+        }
+
+        if (!isAudioDevice) {
+            return; // bail
+        }
+
+        //TODO(pmclean) The "Parser" objects inspect files in "/proc/asound" which we presume is
+        // present, unlike the waitForAlsaFile() which waits on a file in /dev/snd. It is not
+        // clear why this works, or that it can be relied on going forward.  Needs further
+        // research.
+        AlsaCardsParser cardsParser = new AlsaCardsParser();
+        cardsParser.scan();
+        // cardsParser.Log();
+
+        // But we need to parse the device to determine its capabilities.
+        AlsaDevicesParser devicesParser = new AlsaDevicesParser();
+        devicesParser.scan();
+        // devicesParser.Log();
+
+        // The protocol for now will be to select the last-connected (highest-numbered)
+        // Alsa Card.
+        mConnectedUsbCard = cardsParser.getNumCardRecords() - 1;
+        mConnectedUsbDeviceNum = 0;
+
+        if (!waitForAlsaFile(mConnectedUsbCard, mConnectedUsbDeviceNum, false)) {
+            return;
+        }
+
+        mConnectedHasPlayback = devicesParser.hasPlaybackDevices(mConnectedUsbCard);
+        mConnectedHasCapture = devicesParser.hasCaptureDevices(mConnectedUsbCard);
+        mConnectedHasMIDI = devicesParser.hasMIDIDevices(mConnectedUsbCard);
+
+        if (DEBUG_AUDIO) {
+            Slog.d(TAG,
+                    "usb: hasPlayback:" + mConnectedHasPlayback + " hasCapture:" + mConnectedHasCapture);
+        }
+
+        sendDeviceNotification(mConnectedUsbCard,
+                mConnectedUsbDeviceNum,
+                true,
+                mConnectedHasPlayback,
+                mConnectedHasCapture,
+                mConnectedHasMIDI);
     }
 
     /* Called from JNI in monitorUsbHostBus to report USB device removal */
     private void usbDeviceRemoved(String deviceName) {
+        if (DEBUG_AUDIO) {
+          Slog.d(TAG, "usb:UsbHostManager.usbDeviceRemoved() nm:" + deviceName);
+        }
+
+        if (mConnectedUsbCard != -1 && mConnectedUsbDeviceNum != -1) {
+            sendDeviceNotification(mConnectedUsbCard,
+                    mConnectedUsbDeviceNum,
+                    false,
+                    mConnectedHasPlayback,
+                    mConnectedHasCapture,
+                    mConnectedHasMIDI);
+            mConnectedUsbCard = -1;
+            mConnectedUsbDeviceNum = -1;
+            mConnectedHasPlayback = false;
+            mConnectedHasCapture = false;
+            mConnectedHasMIDI = false;
+        }
+
         synchronized (mLock) {
             UsbDevice device = mDevices.remove(deviceName);
             if (device != null) {
diff --git a/services/usb/java/com/android/server/usb/UsbSettingsManager.java b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
index ff4857b..37b5c51 100644
--- a/services/usb/java/com/android/server/usb/UsbSettingsManager.java
+++ b/services/usb/java/com/android/server/usb/UsbSettingsManager.java
@@ -27,6 +27,7 @@
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
 import android.hardware.usb.UsbAccessory;
 import android.hardware.usb.UsbDevice;
@@ -73,6 +74,7 @@
 
     private final UserHandle mUser;
     private final AtomicFile mSettingsFile;
+    private final boolean mDisablePermissionDialogs;
 
     private final Context mContext;
     private final Context mUserContext;
@@ -510,6 +512,9 @@
                 Environment.getUserSystemDirectory(user.getIdentifier()),
                 "usb_device_manager.xml"));
 
+        mDisablePermissionDialogs = context.getResources().getBoolean(
+                com.android.internal.R.bool.config_disableUsbPermissionDialogs);
+
         synchronized (mLock) {
             if (UserHandle.OWNER.equals(user)) {
                 upgradeSingleUserLocked();
@@ -815,6 +820,14 @@
                     (rInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
                 defaultRI = rInfo;
             }
+
+            if (mDisablePermissionDialogs) {
+                // bypass dialog and launch the only matching activity
+                rInfo = matches.get(0);
+                if (rInfo.activityInfo != null) {
+                    defaultPackage = rInfo.activityInfo.packageName;
+                }
+            }
         }
 
         if (defaultRI == null && defaultPackage != null) {
@@ -970,7 +983,7 @@
     public boolean hasPermission(UsbDevice device) {
         synchronized (mLock) {
             int uid = Binder.getCallingUid();
-            if (uid == Process.SYSTEM_UID) {
+            if (uid == Process.SYSTEM_UID || mDisablePermissionDialogs) {
                 return true;
             }
             SparseBooleanArray uidList = mDevicePermissionMap.get(device.getDeviceName());
@@ -984,7 +997,7 @@
     public boolean hasPermission(UsbAccessory accessory) {
         synchronized (mLock) {
             int uid = Binder.getCallingUid();
-            if (uid == Process.SYSTEM_UID) {
+            if (uid == Process.SYSTEM_UID || mDisablePermissionDialogs) {
                 return true;
             }
             SparseBooleanArray uidList = mAccessoryPermissionMap.get(accessory);
diff --git a/services/voiceinteraction/Android.mk b/services/voiceinteraction/Android.mk
new file mode 100644
index 0000000..c9e5dd0
--- /dev/null
+++ b/services/voiceinteraction/Android.mk
@@ -0,0 +1,12 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := services.voiceinteraction
+
+LOCAL_SRC_FILES += \
+      $(call all-java-files-under,java)
+
+LOCAL_JAVA_LIBRARIES := services.core
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
new file mode 100644
index 0000000..045c0f6
--- /dev/null
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -0,0 +1,247 @@
+/*
+ * Copyright (C) 2014 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.android.server.voiceinteraction;
+
+import android.Manifest;
+import android.app.ActivityManager;
+import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.database.ContentObserver;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.UserHandle;
+import android.provider.Settings;
+import android.service.voice.IVoiceInteractionService;
+import android.service.voice.IVoiceInteractionSession;
+import android.util.Slog;
+import com.android.internal.app.IVoiceInteractionManagerService;
+import com.android.internal.app.IVoiceInteractor;
+import com.android.internal.content.PackageMonitor;
+import com.android.internal.os.BackgroundThread;
+import com.android.server.SystemService;
+import com.android.server.UiThread;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+
+/**
+ * SystemService that publishes an IVoiceInteractionManagerService.
+ */
+public class VoiceInteractionManagerService extends SystemService {
+
+    static final String TAG = "VoiceInteractionManagerService";
+
+    final Context mContext;
+    final ContentResolver mResolver;
+
+    public VoiceInteractionManagerService(Context context) {
+        super(context);
+        mContext = context;
+        mResolver = context.getContentResolver();
+    }
+
+    @Override
+    public void onStart() {
+        publishBinderService(Context.VOICE_INTERACTION_MANAGER_SERVICE, mServiceStub);
+    }
+
+    @Override
+    public void onBootPhase(int phase) {
+        if (phase == PHASE_THIRD_PARTY_APPS_CAN_START) {
+            mServiceStub.systemRunning(isSafeMode());
+        }
+    }
+
+    @Override
+    public void onSwitchUser(int userHandle) {
+        mServiceStub.switchUser(userHandle);
+    }
+
+    // implementation entry point and binder service
+    private final VoiceInteractionManagerServiceStub mServiceStub
+            = new VoiceInteractionManagerServiceStub();
+
+    class VoiceInteractionManagerServiceStub extends IVoiceInteractionManagerService.Stub {
+
+        VoiceInteractionManagerServiceImpl mImpl;
+
+        private boolean mSafeMode;
+        private int mCurUser;
+
+        public void systemRunning(boolean safeMode) {
+            mSafeMode = safeMode;
+
+            mPackageMonitor.register(mContext, BackgroundThread.getHandler().getLooper(),
+                    UserHandle.ALL, true);
+            new SettingsObserver(UiThread.getHandler());
+
+            synchronized (this) {
+                mCurUser = ActivityManager.getCurrentUser();
+                switchImplementationIfNeededLocked();
+            }
+        }
+
+        public void switchUser(int userHandle) {
+            synchronized (this) {
+                mCurUser = userHandle;
+                switchImplementationIfNeededLocked();
+            }
+        }
+
+        void switchImplementationIfNeededLocked() {
+            if (!mSafeMode) {
+                String curService = Settings.Secure.getStringForUser(
+                        mResolver, Settings.Secure.VOICE_INTERACTION_SERVICE, mCurUser);
+                ComponentName serviceComponent = null;
+                if (curService != null && !curService.isEmpty()) {
+                    try {
+                        serviceComponent = ComponentName.unflattenFromString(curService);
+                    } catch (RuntimeException e) {
+                        Slog.wtf(TAG, "Bad voice interaction service name " + curService, e);
+                        serviceComponent = null;
+                    }
+                }
+                if (mImpl == null || mImpl.mUser != mCurUser
+                        || !mImpl.mComponent.equals(serviceComponent)) {
+                    if (mImpl != null) {
+                        mImpl.shutdownLocked();
+                    }
+                    if (serviceComponent != null) {
+                        mImpl = new VoiceInteractionManagerServiceImpl(mContext,
+                                UiThread.getHandler(), this, mCurUser, serviceComponent);
+                        mImpl.startLocked();
+                    } else {
+                        mImpl = null;
+                    }
+                }
+            }
+        }
+
+        @Override
+        public void startVoiceActivity(Intent intent, String resolvedType,
+                IVoiceInteractionService service, Bundle args) {
+            synchronized (this) {
+                if (mImpl == null || service.asBinder() != mImpl.mService.asBinder()) {
+                    throw new SecurityException(
+                            "Caller is not the current voice interaction service");
+                }
+                final int callingPid = Binder.getCallingPid();
+                final int callingUid = Binder.getCallingUid();
+                final long caller = Binder.clearCallingIdentity();
+                try {
+                    mImpl.startVoiceActivityLocked(callingPid, callingUid,
+                            intent, resolvedType, args);
+                } finally {
+                    Binder.restoreCallingIdentity(caller);
+                }
+            }
+        }
+
+        @Override
+        public int deliverNewSession(IBinder token, IVoiceInteractionSession session,
+                IVoiceInteractor interactor) {
+            synchronized (this) {
+                if (mImpl == null) {
+                    Slog.w(TAG, "deliverNewSession without running voice interaction service");
+                    return ActivityManager.START_CANCELED;
+                }
+                final int callingPid = Binder.getCallingPid();
+                final int callingUid = Binder.getCallingUid();
+                final long caller = Binder.clearCallingIdentity();
+                try {
+                    return mImpl.deliverNewSessionLocked(callingPid, callingUid, token, session,
+                            interactor);
+                } finally {
+                    Binder.restoreCallingIdentity(caller);
+                }
+            }
+
+        }
+
+        @Override
+        public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
+            if (mContext.checkCallingOrSelfPermission(Manifest.permission.DUMP)
+                    != PackageManager.PERMISSION_GRANTED) {
+                pw.println("Permission Denial: can't dump PowerManager from from pid="
+                        + Binder.getCallingPid()
+                        + ", uid=" + Binder.getCallingUid());
+                return;
+            }
+            synchronized (this) {
+                pw.println("VOICE INTERACTION MANAGER (dumpsys voiceinteraction)\n");
+                if (mImpl == null) {
+                    pw.println("  (No active implementation)");
+                    return;
+                }
+                mImpl.dumpLocked(fd, pw, args);
+            }
+        }
+
+        class SettingsObserver extends ContentObserver {
+            SettingsObserver(Handler handler) {
+                super(handler);
+                ContentResolver resolver = mContext.getContentResolver();
+                resolver.registerContentObserver(Settings.Secure.getUriFor(
+                        Settings.Secure.VOICE_INTERACTION_SERVICE), false, this);
+            }
+
+            @Override public void onChange(boolean selfChange) {
+                synchronized (VoiceInteractionManagerServiceStub.this) {
+                    switchImplementationIfNeededLocked();
+                }
+            }
+        }
+
+        PackageMonitor mPackageMonitor = new PackageMonitor() {
+            @Override
+            public boolean onHandleForceStop(Intent intent, String[] packages, int uid, boolean doit) {
+                return super.onHandleForceStop(intent, packages, uid, doit);
+            }
+
+            @Override
+            public void onHandleUserStop(Intent intent, int userHandle) {
+                super.onHandleUserStop(intent, userHandle);
+            }
+
+            @Override
+            public void onPackageDisappeared(String packageName, int reason) {
+                super.onPackageDisappeared(packageName, reason);
+            }
+
+            @Override
+            public void onPackageAppeared(String packageName, int reason) {
+                super.onPackageAppeared(packageName, reason);
+            }
+
+            @Override
+            public void onPackageModified(String packageName) {
+                super.onPackageModified(packageName);
+            }
+
+            @Override
+            public void onSomePackagesChanged() {
+                super.onSomePackagesChanged();
+            }
+        };
+    }
+}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
new file mode 100644
index 0000000..6bbd1c1
--- /dev/null
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerServiceImpl.java
@@ -0,0 +1,238 @@
+/*
+ * Copyright (C) 2014 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.android.server.voiceinteraction;
+
+import android.app.ActivityManager;
+import android.app.ActivityManagerNative;
+import android.app.IActivityManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
+import android.content.pm.ServiceInfo;
+import android.os.Binder;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.os.UserHandle;
+import android.service.voice.IVoiceInteractionService;
+import android.service.voice.IVoiceInteractionSession;
+import android.service.voice.IVoiceInteractionSessionService;
+import android.service.voice.VoiceInteractionService;
+import android.service.voice.VoiceInteractionServiceInfo;
+import android.util.Slog;
+import com.android.internal.app.IVoiceInteractor;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
+class VoiceInteractionManagerServiceImpl {
+    final static String TAG = "VoiceInteractionServiceManager";
+
+    final boolean mValid;
+
+    final Context mContext;
+    final Handler mHandler;
+    final Object mLock;
+    final int mUser;
+    final ComponentName mComponent;
+    final IActivityManager mAm;
+    final VoiceInteractionServiceInfo mInfo;
+    final ComponentName mSessionComponentName;
+    boolean mBound = false;
+    IVoiceInteractionService mService;
+
+    SessionConnection mActiveSession;
+
+    final ServiceConnection mConnection = new ServiceConnection() {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            synchronized (mLock) {
+                mService = IVoiceInteractionService.Stub.asInterface(service);
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            mService = null;
+        }
+    };
+
+    final class SessionConnection implements ServiceConnection {
+        final IBinder mToken = new Binder();
+        final Intent mIntent;
+        final String mResolvedType;
+        final Bundle mArgs;
+        boolean mBound;
+        IVoiceInteractionSessionService mService;
+        IVoiceInteractionSession mSession;
+        IVoiceInteractor mInteractor;
+
+        SessionConnection(Intent intent, String resolvedType, Bundle args) {
+            mIntent = intent;
+            mResolvedType = resolvedType;
+            mArgs = args;
+            Intent serviceIntent = new Intent(VoiceInteractionService.SERVICE_INTERFACE);
+            serviceIntent.setComponent(mSessionComponentName);
+            mBound = mContext.bindServiceAsUser(serviceIntent, this,
+                    Context.BIND_AUTO_CREATE, new UserHandle(mUser));
+            if (!mBound) {
+                Slog.w(TAG, "Failed binding to voice interaction session service " + mComponent);
+            }
+        }
+
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            synchronized (mLock) {
+                mService = IVoiceInteractionSessionService.Stub.asInterface(service);
+                if (mActiveSession == this) {
+                    try {
+                        mService.newSession(mToken, mArgs);
+                    } catch (RemoteException e) {
+                        Slog.w(TAG, "Failed making new session", e);
+                    }
+                }
+            }
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            mService = null;
+        }
+
+        public void cancel() {
+            if (mBound) {
+                mContext.unbindService(this);
+                mBound = false;
+                mService = null;
+                mSession = null;
+                mInteractor = null;
+            }
+        }
+
+        public void dump(String prefix, PrintWriter pw) {
+            pw.print(prefix); pw.print("mToken="); pw.println(mToken);
+            pw.print(prefix); pw.print("mIntent="); pw.println(mIntent);
+                    pw.print(" mResolvedType="); pw.println(mResolvedType);
+            pw.print(prefix); pw.print("mArgs="); pw.println(mArgs);
+            pw.print(prefix); pw.print("mBound="); pw.println(mBound);
+            if (mBound) {
+                pw.print(prefix); pw.print("mService="); pw.println(mService);
+                pw.print(prefix); pw.print("mSession="); pw.println(mSession);
+                pw.print(prefix); pw.print("mInteractor="); pw.println(mInteractor);
+            }
+        }
+    };
+
+    VoiceInteractionManagerServiceImpl(Context context, Handler handler, Object lock,
+            int userHandle, ComponentName service) {
+        mContext = context;
+        mHandler = handler;
+        mLock = lock;
+        mUser = userHandle;
+        mComponent = service;
+        mAm = ActivityManagerNative.getDefault();
+        VoiceInteractionServiceInfo info;
+        try {
+            info = new VoiceInteractionServiceInfo(context.getPackageManager(), service);
+        } catch (PackageManager.NameNotFoundException e) {
+            Slog.w(TAG, "Voice interaction service not found: " + service);
+            mInfo = null;
+            mSessionComponentName = null;
+            mValid = false;
+            return;
+        }
+        mInfo = info;
+        if (mInfo.getParseError() != null) {
+            Slog.w(TAG, "Bad voice interaction service: " + mInfo.getParseError());
+            mSessionComponentName = null;
+            mValid = false;
+            return;
+        }
+        mValid = true;
+        mSessionComponentName = new ComponentName(service.getPackageName(),
+                mInfo.getSessionService());
+    }
+
+    public void startVoiceActivityLocked(int callingPid, int callingUid, Intent intent,
+            String resolvedType, Bundle args) {
+        if (mActiveSession != null) {
+            mActiveSession.cancel();
+            mActiveSession = null;
+        }
+        mActiveSession = new SessionConnection(intent, resolvedType, args);
+        intent.addCategory(Intent.CATEGORY_VOICE);
+        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
+    }
+
+    public int deliverNewSessionLocked(int callingPid, int callingUid, IBinder token,
+            IVoiceInteractionSession session, IVoiceInteractor interactor) {
+        try {
+            if (mActiveSession == null || token != mActiveSession.mToken) {
+                Slog.w(TAG, "deliverNewSession does not match active session");
+                return ActivityManager.START_CANCELED;
+            }
+            mActiveSession.mSession = session;
+            mActiveSession.mInteractor = interactor;
+            return mAm.startVoiceActivity(mComponent.getPackageName(), callingPid, callingUid,
+                    mActiveSession.mIntent, mActiveSession.mResolvedType,
+                    mActiveSession.mSession, mActiveSession.mInteractor,
+                    0, null, null, null, mUser);
+        } catch (RemoteException e) {
+            throw new IllegalStateException("Unexpected remote error", e);
+        }
+    }
+
+    public void dumpLocked(FileDescriptor fd, PrintWriter pw, String[] args) {
+        if (!mValid) {
+            pw.print("  NOT VALID: ");
+            if (mInfo == null) {
+                pw.println("no info");
+            } else {
+                pw.println(mInfo.getParseError());
+            }
+            return;
+        }
+        pw.print("  mComponent="); pw.println(mComponent.flattenToShortString());
+        pw.print("  Session service="); pw.println(mInfo.getSessionService());
+        pw.print("  Settings activity="); pw.println(mInfo.getSettingsActivity());
+        pw.print("  mBound="); pw.print(mBound);  pw.print(" mService="); pw.println(mService);
+        if (mActiveSession != null) {
+            pw.println("  Active session:");
+            mActiveSession.dump("    ", pw);
+        }
+    }
+
+    void startLocked() {
+        Intent intent = new Intent(VoiceInteractionService.SERVICE_INTERFACE);
+        intent.setComponent(mComponent);
+        mBound = mContext.bindServiceAsUser(intent, mConnection,
+                Context.BIND_AUTO_CREATE, new UserHandle(mUser));
+        if (!mBound) {
+            Slog.w(TAG, "Failed binding to voice interaction service " + mComponent);
+        }
+    }
+
+    void shutdownLocked() {
+        if (mBound) {
+            mContext.unbindService(mConnection);
+            mBound = false;
+        }
+    }
+}
diff --git a/telephony/java/android/telephony/CellInfo.java b/telephony/java/android/telephony/CellInfo.java
index bfa0942..b5e4eef 100644
--- a/telephony/java/android/telephony/CellInfo.java
+++ b/telephony/java/android/telephony/CellInfo.java
@@ -76,7 +76,7 @@
         return mRegistered;
     }
     /** @hide */
-    public void setRegisterd(boolean registered) {
+    public void setRegistered(boolean registered) {
         mRegistered = registered;
     }
 
diff --git a/telephony/java/android/telephony/CellLocation.java b/telephony/java/android/telephony/CellLocation.java
index 42c2aff..f9a222f 100644
--- a/telephony/java/android/telephony/CellLocation.java
+++ b/telephony/java/android/telephony/CellLocation.java
@@ -19,9 +19,6 @@
 import android.os.Bundle;
 import android.os.RemoteException;
 import android.os.ServiceManager;
-import android.os.SystemProperties;
-import android.provider.Settings;
-
 
 import android.telephony.cdma.CdmaCellLocation;
 import android.telephony.gsm.GsmCellLocation;
diff --git a/telephony/java/android/telephony/CellSignalStrength.java b/telephony/java/android/telephony/CellSignalStrength.java
index 3b470fc..9c23f78 100644
--- a/telephony/java/android/telephony/CellSignalStrength.java
+++ b/telephony/java/android/telephony/CellSignalStrength.java
@@ -16,9 +16,6 @@
 
 package android.telephony;
 
-import android.os.Parcel;
-import android.os.Parcelable;
-
 /**
  * Abstract base class for cell phone signal strength related information.
  */
diff --git a/telephony/java/android/telephony/CellSignalStrengthCdma.java b/telephony/java/android/telephony/CellSignalStrengthCdma.java
index 46d09f6..be13acc 100644
--- a/telephony/java/android/telephony/CellSignalStrengthCdma.java
+++ b/telephony/java/android/telephony/CellSignalStrengthCdma.java
@@ -137,7 +137,6 @@
 
     /**
      * Get the signal level as an asu value between 0..97, 99 is unknown
-     * Asu is calculated based on 3GPP RSRP. Refer to 3GPP 27.007 (Ver 10.3.0) Sec 8.69
      */
     @Override
     public int getAsuLevel() {
@@ -342,7 +341,7 @@
 
     /**
      * Construct a SignalStrength object from the given parcel
-     * where the TYPE_LTE token is already been processed.
+     * where the TYPE_CDMA token is already been processed.
      */
     private CellSignalStrengthCdma(Parcel in) {
         // CdmaDbm, CdmaEcio, EvdoDbm and EvdoEcio are written into
diff --git a/telephony/java/android/telephony/DataConnectionRealTimeInfo.aidl b/telephony/java/android/telephony/DataConnectionRealTimeInfo.aidl
new file mode 100644
index 0000000..70fbb11
--- /dev/null
+++ b/telephony/java/android/telephony/DataConnectionRealTimeInfo.aidl
@@ -0,0 +1,20 @@
+/*
+**
+** Copyright 2007, 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 android.telephony;
+
+parcelable DataConnectionRealTimeInfo;
diff --git a/telephony/java/android/telephony/DataConnectionRealTimeInfo.java b/telephony/java/android/telephony/DataConnectionRealTimeInfo.java
new file mode 100644
index 0000000..96069213
--- /dev/null
+++ b/telephony/java/android/telephony/DataConnectionRealTimeInfo.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2014 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 android.telephony;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Data connection real time information
+ *
+ * TODO: How to handle multiple subscriptions?
+ * @hide
+ */
+public class DataConnectionRealTimeInfo implements Parcelable {
+    private long mTime;             // Time the info was collected since boot in nanos;
+
+    public static int DC_POWER_STATE_LOW       = 1;
+    public static int DC_POWER_STATE_MEDIUM    = 2;
+    public static int DC_POWER_STATE_HIGH      = 3;
+    public static int DC_POWER_STATE_UNKNOWN   = Integer.MAX_VALUE;
+
+    private int mDcPowerState;      // DC_POWER_STATE_[LOW | MEDIUM | HIGH | UNKNOWN]
+
+    /**
+     * Constructor
+     *
+     * @hide
+     */
+    public DataConnectionRealTimeInfo(long time, int dcPowerState) {
+        mTime = time;
+        mDcPowerState = dcPowerState;
+    }
+
+    /**
+     * Constructor
+     *
+     * @hide
+     */
+    public DataConnectionRealTimeInfo() {
+        mTime = Long.MAX_VALUE;
+        mDcPowerState = DC_POWER_STATE_UNKNOWN;
+    }
+
+    /**
+     * Construct a PreciseCallState object from the given parcel.
+     */
+    private DataConnectionRealTimeInfo(Parcel in) {
+        mTime = in.readLong();
+        mDcPowerState = in.readInt();
+    }
+
+    /**
+     * @return time the information was collected or Long.MAX_VALUE if unknown
+     */
+    public long getTime() {
+        return mTime;
+    }
+
+    /**
+     * @return DC_POWER_STATE_[LOW | MEDIUM | HIGH | UNKNOWN]
+     */
+    public int getDcPowerState() {
+        return mDcPowerState;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeLong(mTime);
+        out.writeInt(mDcPowerState);
+    }
+
+    public static final Parcelable.Creator<DataConnectionRealTimeInfo> CREATOR
+            = new Parcelable.Creator<DataConnectionRealTimeInfo>() {
+
+        @Override
+        public DataConnectionRealTimeInfo createFromParcel(Parcel in) {
+            return new DataConnectionRealTimeInfo(in);
+        }
+
+        @Override
+        public DataConnectionRealTimeInfo[] newArray(int size) {
+            return new DataConnectionRealTimeInfo[size];
+        }
+    };
+
+    @Override
+    public int hashCode() {
+        final long prime = 17;
+        long result = 1;
+        result = (prime * result) + mTime;
+        result += (prime * result) + mDcPowerState;
+        return (int)result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        DataConnectionRealTimeInfo other = (DataConnectionRealTimeInfo) obj;
+        return (mTime == other.mTime)
+                && (mDcPowerState == other.mDcPowerState);
+    }
+
+    @Override
+    public String toString() {
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("mTime=").append(mTime);
+        sb.append(" mDcPowerState=").append(mDcPowerState);
+
+        return sb.toString();
+    }
+}
diff --git a/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java b/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
index 983c349..438b572 100644
--- a/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
+++ b/telephony/java/android/telephony/PhoneNumberFormattingTextWatcher.java
@@ -65,8 +65,6 @@
      *
      * @param countryCode the ISO 3166-1 two-letter country code that indicates the country/region
      * where the phone number is being entered.
-     *
-     * @hide
      */
     public PhoneNumberFormattingTextWatcher(String countryCode) {
         if (countryCode == null) throw new IllegalArgumentException();
diff --git a/telephony/java/android/telephony/PhoneNumberUtils.java b/telephony/java/android/telephony/PhoneNumberUtils.java
index e3a1aa6..c79e9bf 100644
--- a/telephony/java/android/telephony/PhoneNumberUtils.java
+++ b/telephony/java/android/telephony/PhoneNumberUtils.java
@@ -1143,6 +1143,8 @@
      * @param source The phone number to format
      * @return A locally acceptable formatting of the input, or the raw input if
      *  formatting rules aren't known for the number
+     *
+     * @deprecated Use {@link #formatNumber(String phoneNumber, String defaultCountryIso)} instead
      */
     public static String formatNumber(String source) {
         SpannableStringBuilder text = new SpannableStringBuilder(source);
@@ -1159,7 +1161,8 @@
      * not begin with +[country_code]
      * @return The phone number formatted with the given formatting type.
      *
-     * @hide TODO: Should be unhidden.
+     * @hide
+     * @deprecated Use {@link #formatNumber(String phoneNumber, String defaultCountryIso)} instead
      */
     public static String formatNumber(String source, int defaultFormattingType) {
         SpannableStringBuilder text = new SpannableStringBuilder(source);
@@ -1173,6 +1176,8 @@
      * @param locale The locale of interest, usually {@link Locale#getDefault()}
      * @return The formatting type for the given locale, or FORMAT_UNKNOWN if the formatting
      * rules are not known for the given locale
+     *
+     * @deprecated Use {@link #formatNumber(String phoneNumber, String defaultCountryIso)} instead
      */
     public static int getFormatTypeForLocale(Locale locale) {
         String country = locale.getCountry();
@@ -1187,6 +1192,8 @@
      * @param text The number to be formatted, will be modified with the formatting
      * @param defaultFormattingType The default formatting rules to apply if the number does
      * not begin with +[country_code]
+     *
+     * @deprecated Use {@link #formatNumber(String phoneNumber, String defaultCountryIso)} instead
      */
     public static void formatNumber(Editable text, int defaultFormattingType) {
         int formatType = defaultFormattingType;
@@ -1233,6 +1240,8 @@
      * </code></p>
      *
      * @param text the number to be formatted, will be modified with the formatting
+     *
+     * @deprecated Use {@link #formatNumber(String phoneNumber, String defaultCountryIso)} instead
      */
     public static void formatNanpNumber(Editable text) {
         int length = text.length();
@@ -1346,6 +1355,8 @@
      *
      * @param text the number to be formatted, will be modified with
      * the formatting
+     *
+     * @deprecated Use {@link #formatNumber(String phoneNumber, String defaultCountryIso)} instead
      */
     public static void formatJapaneseNumber(Editable text) {
         JapanesePhoneNumberFormatter.format(text);
@@ -1382,8 +1393,6 @@
      *            the ISO 3166-1 two letters country code
      * @return the E.164 representation, or null if the given phone number is
      *         not valid.
-     *
-     * @hide
      */
     public static String formatNumberToE164(String phoneNumber, String defaultCountryIso) {
         PhoneNumberUtil util = PhoneNumberUtil.getInstance();
@@ -1410,8 +1419,6 @@
      *            the ISO 3166-1 two letters country code whose convention will
      *            be used if the given number doesn't have the country code.
      * @return the formatted number, or null if the given number is not valid.
-     *
-     * @hide
      */
     public static String formatNumber(String phoneNumber, String defaultCountryIso) {
         // Do not attempt to format numbers that start with a hash or star symbol.
@@ -1446,8 +1453,6 @@
      *            contains IDD.
      * @return the formatted number if the given number has been formatted,
      *            otherwise, return the given number.
-     *
-     * @hide
      */
     public static String formatNumber(
             String phoneNumber, String phoneNumberE164, String defaultCountryIso) {
@@ -1483,11 +1488,8 @@
      * the given number has keypad letters, the letters will be converted to
      * digits first.
      *
-     * @param phoneNumber
-     *            the number to be normalized.
+     * @param phoneNumber the number to be normalized.
      * @return the normalized number.
-     *
-     * @hide
      */
     public static String normalizeNumber(String phoneNumber) {
         StringBuilder sb = new StringBuilder();
@@ -1508,12 +1510,10 @@
     }
 
     /**
-     * Replace arabic/unicode digits with decimal digits.
-     * @param number
-     *            the number to be normalized.
-     * @return the replaced number.
+     * Replaces all unicode(e.g. Arabic, Persian) digits with their decimal digit equivalents.
      *
-     * @hide
+     * @param number the number to perform the replacement on.
+     * @return the replaced number.
      */
     public static String replaceUnicodeDigits(String number) {
         StringBuilder normalizedDigits = new StringBuilder(number.length());
@@ -1737,16 +1737,12 @@
     }
 
     /**
-     * Checks if a given number is an emergency number for the country that the user is in. The
-     * current country is determined using the CountryDetector.
+     * Checks if a given number is an emergency number for the country that the user is in.
      *
      * @param number the number to look up.
      * @param context the specific context which the number should be checked against
-     * @return true if the specified number is an emergency number for a local country, based on the
-     *              CountryDetector.
-     *
-     * @see android.location.CountryDetector
-     * @hide
+     * @return true if the specified number is an emergency number for the country the user
+     * is currently in.
      */
     public static boolean isLocalEmergencyNumber(String number, Context context) {
         return isLocalEmergencyNumberInternal(number,
@@ -1825,7 +1821,6 @@
      * @return true if the number is in the list of voicemail. False
      * otherwise, including if the caller does not have the permission
      * to read the VM number.
-     * @hide TODO: pending API Council approval
      */
     public static boolean isVoiceMailNumber(String number) {
         String vmNumber;
diff --git a/telephony/java/android/telephony/PhoneStateListener.java b/telephony/java/android/telephony/PhoneStateListener.java
index 538548d..59ec6f5 100644
--- a/telephony/java/android/telephony/PhoneStateListener.java
+++ b/telephony/java/android/telephony/PhoneStateListener.java
@@ -18,6 +18,7 @@
 
 import android.os.Bundle;
 import android.os.Handler;
+import android.os.Looper;
 import android.os.Message;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
@@ -188,7 +189,78 @@
      */
     public static final int LISTEN_PRECISE_DATA_CONNECTION_STATE            = 0x00001000;
 
+    /**
+     * Listen for real time info for all data connections (cellular)).
+     * {@more}
+     * Requires Permission: {@link android.Manifest.permission#READ_PRECISE_PHONE_STATE
+     * READ_PRECISE_PHONE_STATE}
+     *
+     * @see #onDataConnectionRealTimeInfoChanged(DataConnectionRealTimeInfo)
+     * @hide
+     */
+    public static final int LISTEN_DATA_CONNECTION_REAL_TIME_INFO           = 0x00002000;
+
+    private final Handler mHandler;
+
     public PhoneStateListener() {
+        this(Looper.myLooper());
+    }
+
+    /** @hide */
+    public PhoneStateListener(Looper looper) {
+        mHandler = new Handler(looper) {
+            public void handleMessage(Message msg) {
+                //Rlog.d("TelephonyRegistry", "what=0x" + Integer.toHexString(msg.what)
+                // + " msg=" + msg);
+                switch (msg.what) {
+                    case LISTEN_SERVICE_STATE:
+                        PhoneStateListener.this.onServiceStateChanged((ServiceState)msg.obj);
+                        break;
+                    case LISTEN_SIGNAL_STRENGTH:
+                        PhoneStateListener.this.onSignalStrengthChanged(msg.arg1);
+                        break;
+                    case LISTEN_MESSAGE_WAITING_INDICATOR:
+                        PhoneStateListener.this.onMessageWaitingIndicatorChanged(msg.arg1 != 0);
+                        break;
+                    case LISTEN_CALL_FORWARDING_INDICATOR:
+                        PhoneStateListener.this.onCallForwardingIndicatorChanged(msg.arg1 != 0);
+                        break;
+                    case LISTEN_CELL_LOCATION:
+                        PhoneStateListener.this.onCellLocationChanged((CellLocation)msg.obj);
+                        break;
+                    case LISTEN_CALL_STATE:
+                        PhoneStateListener.this.onCallStateChanged(msg.arg1, (String)msg.obj);
+                        break;
+                    case LISTEN_DATA_CONNECTION_STATE:
+                        PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1, msg.arg2);
+                        PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1);
+                        break;
+                    case LISTEN_DATA_ACTIVITY:
+                        PhoneStateListener.this.onDataActivity(msg.arg1);
+                        break;
+                    case LISTEN_SIGNAL_STRENGTHS:
+                        PhoneStateListener.this.onSignalStrengthsChanged((SignalStrength)msg.obj);
+                        break;
+                    case LISTEN_OTASP_CHANGED:
+                        PhoneStateListener.this.onOtaspChanged(msg.arg1);
+                        break;
+                    case LISTEN_CELL_INFO:
+                        PhoneStateListener.this.onCellInfoChanged((List<CellInfo>)msg.obj);
+                        break;
+                    case LISTEN_PRECISE_CALL_STATE:
+                        PhoneStateListener.this.onPreciseCallStateChanged((PreciseCallState)msg.obj);
+                        break;
+                    case LISTEN_PRECISE_DATA_CONNECTION_STATE:
+                        PhoneStateListener.this.onPreciseDataConnectionStateChanged(
+                                (PreciseDataConnectionState)msg.obj);
+                        break;
+                    case LISTEN_DATA_CONNECTION_REAL_TIME_INFO:
+                        PhoneStateListener.this.onDataConnectionRealTimeInfoChanged(
+                                (DataConnectionRealTimeInfo)msg.obj);
+                        break;
+                }
+            }
+        };
     }
 
     /**
@@ -299,7 +371,7 @@
      * @param otaspMode is integer <code>OTASP_UNKNOWN=1<code>
      *   means the value is currently unknown and the system should wait until
      *   <code>OTASP_NEEDED=2<code> or <code>OTASP_NOT_NEEDED=3<code> is received before
-     *   making the decisision to perform OTASP or not.
+     *   making the decision to perform OTASP or not.
      *
      * @hide
      */
@@ -335,6 +407,16 @@
     }
 
     /**
+     * Callback invoked when data connection state changes with precise information.
+     *
+     * @hide
+     */
+    public void onDataConnectionRealTimeInfoChanged(
+            DataConnectionRealTimeInfo dcRtInfo) {
+        // default implementation empty
+    }
+
+    /**
      * The callback methods need to be called on the handler thread where
      * this object was created.  If the binder did that for us it'd be nice.
      */
@@ -396,52 +478,11 @@
             Message.obtain(mHandler, LISTEN_PRECISE_DATA_CONNECTION_STATE, 0, 0,
                     dataConnectionState).sendToTarget();
         }
-    };
 
-    Handler mHandler = new Handler() {
-        public void handleMessage(Message msg) {
-            //Rlog.d("TelephonyRegistry", "what=0x" + Integer.toHexString(msg.what) + " msg=" + msg);
-            switch (msg.what) {
-                case LISTEN_SERVICE_STATE:
-                    PhoneStateListener.this.onServiceStateChanged((ServiceState)msg.obj);
-                    break;
-                case LISTEN_SIGNAL_STRENGTH:
-                    PhoneStateListener.this.onSignalStrengthChanged(msg.arg1);
-                    break;
-                case LISTEN_MESSAGE_WAITING_INDICATOR:
-                    PhoneStateListener.this.onMessageWaitingIndicatorChanged(msg.arg1 != 0);
-                    break;
-                case LISTEN_CALL_FORWARDING_INDICATOR:
-                    PhoneStateListener.this.onCallForwardingIndicatorChanged(msg.arg1 != 0);
-                    break;
-                case LISTEN_CELL_LOCATION:
-                    PhoneStateListener.this.onCellLocationChanged((CellLocation)msg.obj);
-                    break;
-                case LISTEN_CALL_STATE:
-                    PhoneStateListener.this.onCallStateChanged(msg.arg1, (String)msg.obj);
-                    break;
-                case LISTEN_DATA_CONNECTION_STATE:
-                    PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1, msg.arg2);
-                    PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1);
-                    break;
-                case LISTEN_DATA_ACTIVITY:
-                    PhoneStateListener.this.onDataActivity(msg.arg1);
-                    break;
-                case LISTEN_SIGNAL_STRENGTHS:
-                    PhoneStateListener.this.onSignalStrengthsChanged((SignalStrength)msg.obj);
-                    break;
-                case LISTEN_OTASP_CHANGED:
-                    PhoneStateListener.this.onOtaspChanged(msg.arg1);
-                    break;
-                case LISTEN_CELL_INFO:
-                    PhoneStateListener.this.onCellInfoChanged((List<CellInfo>)msg.obj);
-                    break;
-                case LISTEN_PRECISE_CALL_STATE:
-                    PhoneStateListener.this.onPreciseCallStateChanged((PreciseCallState)msg.obj);
-                    break;
-                case LISTEN_PRECISE_DATA_CONNECTION_STATE:
-                    PhoneStateListener.this.onPreciseDataConnectionStateChanged((PreciseDataConnectionState)msg.obj);
-            }
+        public void onDataConnectionRealTimeInfoChanged(
+                DataConnectionRealTimeInfo dcRtInfo) {
+            Message.obtain(mHandler, LISTEN_DATA_CONNECTION_REAL_TIME_INFO, 0, 0,
+                    dcRtInfo).sendToTarget();
         }
     };
 }
diff --git a/telephony/java/android/telephony/Rlog.java b/telephony/java/android/telephony/Rlog.java
index 9ac7bda..2a7f7af 100644
--- a/telephony/java/android/telephony/Rlog.java
+++ b/telephony/java/android/telephony/Rlog.java
@@ -16,13 +16,8 @@
 
 package android.telephony;
 
-import com.android.internal.os.RuntimeInit;
-
 import android.util.Log;
 
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
 /**
  * A class to log strings to the RADIO LOG.
  *
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 4d69c9b..df972d5 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -733,7 +733,7 @@
         case RILConstants.NETWORK_MODE_GSM_UMTS:
         case RILConstants.NETWORK_MODE_LTE_GSM_WCDMA:
         case RILConstants.NETWORK_MODE_LTE_WCDMA:
-        case RILConstants.NETWORK_MODE_LTE_CMDA_EVDO_GSM_WCDMA:
+        case RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA:
             return PhoneConstants.PHONE_TYPE_GSM;
 
         // Use CDMA Phone for the global mode including CDMA
@@ -1571,7 +1571,7 @@
      * At registration, and when a specified telephony state
      * changes, the telephony manager invokes the appropriate
      * callback method on the listener object and passes the
-     * current (udpated) values.
+     * current (updated) values.
      * <p>
      * To unregister a listener, pass the listener object and set the
      * events argument to
@@ -1753,6 +1753,189 @@
                 com.android.internal.R.string.config_mms_user_agent_profile_url);
     }
 
+    /**
+     * Opens a logical channel to the ICC card.
+     *
+     * Input parameters equivalent to TS 27.007 AT+CCHO command.
+     *
+     * @param AID Application id. See ETSI 102.221 and 101.220.
+     * @return The logical channel id which is negative on error.
+     */
+    public int iccOpenLogicalChannel(String AID) {
+        try {
+          return getITelephony().iccOpenLogicalChannel(AID);
+        } catch (RemoteException ex) {
+        } catch (NullPointerException ex) {
+        }
+        return -1;
+    }
+
+    /**
+     * Closes a previously opened logical channel to the ICC card.
+     *
+     * Input parameters equivalent to TS 27.007 AT+CCHC command.
+     *
+     * @param channel is the channel id to be closed as retruned by a successful
+     *            iccOpenLogicalChannel.
+     * @return true if the channel was closed successfully.
+     */
+    public boolean iccCloseLogicalChannel(int channel) {
+        try {
+          return getITelephony().iccCloseLogicalChannel(channel);
+        } catch (RemoteException ex) {
+        } catch (NullPointerException ex) {
+        }
+        return false;
+    }
+
+    /**
+     * Transmit an APDU to the ICC card over a logical channel.
+     *
+     * Input parameters equivalent to TS 27.007 AT+CGLA command.
+     *
+     * @param channel is the channel id to be closed as returned by a successful
+     *            iccOpenLogicalChannel.
+     * @param cla Class of the APDU command.
+     * @param instruction Instruction of the APDU command.
+     * @param p1 P1 value of the APDU command.
+     * @param p2 P2 value of the APDU command.
+     * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU
+     *            is sent to the SIM.
+     * @param data Data to be sent with the APDU.
+     * @return The APDU response from the ICC card with the status appended at
+     *            the end. If an error occurs, an empty string is returned.
+     */
+    public String iccTransmitApduLogicalChannel(int channel, int cla,
+            int instruction, int p1, int p2, int p3, String data) {
+        try {
+          return getITelephony().iccTransmitApduLogicalChannel(channel, cla,
+                  instruction, p1, p2, p3, data);
+        } catch (RemoteException ex) {
+        } catch (NullPointerException ex) {
+        }
+        return "";
+    }
+
+    /**
+     * Read one of the NV items defined in {@link com.android.internal.telephony.RadioNVItems}.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param itemID the ID of the item to read.
+     * @return the NV item as a String, or null on any failure.
+     * @hide
+     */
+    public String nvReadItem(int itemID) {
+        try {
+            return getITelephony().nvReadItem(itemID);
+        } catch (RemoteException ex) {
+            Rlog.e(TAG, "nvReadItem RemoteException", ex);
+        } catch (NullPointerException ex) {
+            Rlog.e(TAG, "nvReadItem NPE", ex);
+        }
+        return "";
+    }
+
+
+    /**
+     * Write one of the NV items defined in {@link com.android.internal.telephony.RadioNVItems}.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param itemID the ID of the item to read.
+     * @param itemValue the value to write, as a String.
+     * @return true on success; false on any failure.
+     * @hide
+     */
+    public boolean nvWriteItem(int itemID, String itemValue) {
+        try {
+            return getITelephony().nvWriteItem(itemID, itemValue);
+        } catch (RemoteException ex) {
+            Rlog.e(TAG, "nvWriteItem RemoteException", ex);
+        } catch (NullPointerException ex) {
+            Rlog.e(TAG, "nvWriteItem NPE", ex);
+        }
+        return false;
+    }
+
+    /**
+     * Update the CDMA Preferred Roaming List (PRL) in the radio NV storage.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param preferredRoamingList byte array containing the new PRL.
+     * @return true on success; false on any failure.
+     * @hide
+     */
+    public boolean nvWriteCdmaPrl(byte[] preferredRoamingList) {
+        try {
+            return getITelephony().nvWriteCdmaPrl(preferredRoamingList);
+        } catch (RemoteException ex) {
+            Rlog.e(TAG, "nvWriteCdmaPrl RemoteException", ex);
+        } catch (NullPointerException ex) {
+            Rlog.e(TAG, "nvWriteCdmaPrl NPE", ex);
+        }
+        return false;
+    }
+
+    /**
+     * Perform the specified type of NV config reset. The radio will be taken offline
+     * and the device must be rebooted after the operation. Used for device
+     * configuration by some CDMA operators.
+     *
+     * @param resetType reset type: 1: reload NV reset, 2: erase NV reset, 3: factory NV reset
+     * @return true on success; false on any failure.
+     * @hide
+     */
+    public boolean nvResetConfig(int resetType) {
+        try {
+            return getITelephony().nvResetConfig(resetType);
+        } catch (RemoteException ex) {
+            Rlog.e(TAG, "nvResetConfig RemoteException", ex);
+        } catch (NullPointerException ex) {
+            Rlog.e(TAG, "nvResetConfig NPE", ex);
+        }
+        return false;
+    }
+
+    /**
+     * Get the preferred network type.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @return the preferred network type, defined in RILConstants.java.
+     * @hide
+     */
+    public int getPreferredNetworkType() {
+        try {
+            return getITelephony().getPreferredNetworkType();
+        } catch (RemoteException ex) {
+            Rlog.e(TAG, "getPreferredNetworkType RemoteException", ex);
+        } catch (NullPointerException ex) {
+            Rlog.e(TAG, "getPreferredNetworkType NPE", ex);
+        }
+        return -1;
+    }
+
+    /**
+     * Set the preferred network type.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param networkType the preferred network type, defined in RILConstants.java.
+     * @return true on success; false on any failure.
+     * @hide
+     */
+    public boolean setPreferredNetworkType(int networkType) {
+        try {
+            return getITelephony().setPreferredNetworkType(networkType);
+        } catch (RemoteException ex) {
+            Rlog.e(TAG, "setPreferredNetworkType RemoteException", ex);
+        } catch (NullPointerException ex) {
+            Rlog.e(TAG, "setPreferredNetworkType NPE", ex);
+        }
+        return false;
+    }
+
+    /**
+     * Expose the rest of ITelephony to @PrivateApi
+     */
+
     /** @hide */
     @PrivateApi
     public void dial(String number) {
diff --git a/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java b/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
index c63be91..74f73b5 100644
--- a/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
+++ b/telephony/java/com/android/internal/telephony/CallerInfoAsyncQuery.java
@@ -24,7 +24,6 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.os.SystemProperties;
 import android.provider.ContactsContract.CommonDataKinds.SipAddress;
 import android.provider.ContactsContract.Data;
 import android.provider.ContactsContract.PhoneLookup;
diff --git a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
index f228d4e..3f36645 100644
--- a/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
+++ b/telephony/java/com/android/internal/telephony/IPhoneStateListener.aidl
@@ -20,6 +20,7 @@
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
 import android.telephony.CellInfo;
+import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.PreciseCallState;
 import android.telephony.PreciseDataConnectionState;
 
@@ -39,5 +40,6 @@
     void onCellInfoChanged(in List<CellInfo> cellInfo);
     void onPreciseCallStateChanged(in PreciseCallState callState);
     void onPreciseDataConnectionStateChanged(in PreciseDataConnectionState dataConnectionState);
+    void onDataConnectionRealTimeInfoChanged(in DataConnectionRealTimeInfo dcRtInfo);
 }
 
diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl
index 9c73059..fa74494 100644
--- a/telephony/java/com/android/internal/telephony/ITelephony.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl
@@ -329,6 +329,102 @@
     void setCellInfoListRate(int rateInMillis);
 
     /**
+     * Opens a logical channel to the ICC card.
+     *
+     * Input parameters equivalent to TS 27.007 AT+CCHO command.
+     *
+     * @param AID Application id. See ETSI 102.221 and 101.220.
+     * @return The logical channel id which is set to -1 on error.
+     */
+    int iccOpenLogicalChannel(String AID);
+
+    /**
+     * Closes a previously opened logical channel to the ICC card.
+     *
+     * Input parameters equivalent to TS 27.007 AT+CCHC command.
+     *
+     * @param channel is the channel id to be closed as retruned by a
+     *            successful iccOpenLogicalChannel.
+     * @return true if the channel was closed successfully.
+     */
+    boolean iccCloseLogicalChannel(int channel);
+
+    /**
+     * Transmit an APDU to the ICC card over a logical channel.
+     *
+     * Input parameters equivalent to TS 27.007 AT+CGLA command.
+     *
+     * @param channel is the channel id to be closed as retruned by a
+     *            successful iccOpenLogicalChannel.
+     * @param cla Class of the APDU command.
+     * @param instruction Instruction of the APDU command.
+     * @param p1 P1 value of the APDU command.
+     * @param p2 P2 value of the APDU command.
+     * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU
+     *            is sent to the SIM.
+     * @param data Data to be sent with the APDU.
+     * @return The APDU response from the ICC card with the status appended at
+     *            the end. If an error occurs, an empty string is returned.
+     */
+    String iccTransmitApduLogicalChannel(int channel, int cla, int instruction,
+            int p1, int p2, int p3, String data);
+
+    /**
+     * Read one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param itemID the ID of the item to read.
+     * @return the NV item as a String, or null on any failure.
+     */
+    String nvReadItem(int itemID);
+
+    /**
+     * Write one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param itemID the ID of the item to read.
+     * @param itemValue the value to write, as a String.
+     * @return true on success; false on any failure.
+     */
+    boolean nvWriteItem(int itemID, String itemValue);
+
+    /**
+     * Update the CDMA Preferred Roaming List (PRL) in the radio NV storage.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param preferredRoamingList byte array containing the new PRL.
+     * @return true on success; false on any failure.
+     */
+    boolean nvWriteCdmaPrl(in byte[] preferredRoamingList);
+
+    /**
+     * Perform the specified type of NV config reset. The radio will be taken offline
+     * and the device must be rebooted after the operation. Used for device
+     * configuration by some CDMA operators.
+     *
+     * @param resetType the type of reset to perform (1 == factory reset; 2 == NV-only reset).
+     * @return true on success; false on any failure.
+     */
+    boolean nvResetConfig(int resetType);
+
+    /**
+     * Get the preferred network type.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @return the preferred network type, defined in RILConstants.java.
+     */
+    int getPreferredNetworkType();
+
+    /**
+     * Set the preferred network type.
+     * Used for device configuration by some CDMA operators.
+     *
+     * @param networkType the preferred network type, defined in RILConstants.java.
+     * @return true on success; false on any failure.
+     */
+    boolean setPreferredNetworkType(int networkType);
+
+    /**
      * Put a call on hold.
      */
      void toggleHold();
@@ -371,4 +467,3 @@
        */
       void removeListener(ITelephonyListener listener);
 }
-
diff --git a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
index 546ce17..8ea9b0d 100644
--- a/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
+++ b/telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl
@@ -20,9 +20,10 @@
 import android.net.LinkProperties;
 import android.net.LinkCapabilities;
 import android.os.Bundle;
+import android.telephony.CellInfo;
+import android.telephony.DataConnectionRealTimeInfo;
 import android.telephony.ServiceState;
 import android.telephony.SignalStrength;
-import android.telephony.CellInfo;
 import com.android.internal.telephony.IPhoneStateListener;
 
 interface ITelephonyRegistry {
@@ -46,4 +47,5 @@
     void notifyDisconnectCause(int disconnectCause, int preciseDisconnectCause);
     void notifyPreciseDataConnectionFailed(String reason, String apnType, String apn,
             String failCause);
+    void notifyDataConnectionRealTimeInfo(in DataConnectionRealTimeInfo dcRtInfo);
 }
diff --git a/telephony/java/com/android/internal/telephony/PhoneConstants.java b/telephony/java/com/android/internal/telephony/PhoneConstants.java
index 1fed417d..8c42d25 100644
--- a/telephony/java/com/android/internal/telephony/PhoneConstants.java
+++ b/telephony/java/com/android/internal/telephony/PhoneConstants.java
@@ -63,11 +63,11 @@
     public static final int LTE_ON_CDMA_FALSE = RILConstants.LTE_ON_CDMA_FALSE;
     public static final int LTE_ON_CDMA_TRUE = RILConstants.LTE_ON_CDMA_TRUE;
 
-    // Number presentation type for caller id display (From internal/Conneciton.java)
-    public static int PRESENTATION_ALLOWED = 1;    // normal
-    public static int PRESENTATION_RESTRICTED = 2; // block by user
-    public static int PRESENTATION_UNKNOWN = 3;    // no specified or unknown by network
-    public static int PRESENTATION_PAYPHONE = 4;   // show pay phone info
+    // Number presentation type for caller id display (From internal/Connection.java)
+    public static final int PRESENTATION_ALLOWED = 1;    // normal
+    public static final int PRESENTATION_RESTRICTED = 2; // block by user
+    public static final int PRESENTATION_UNKNOWN = 3;    // no specified or unknown by network
+    public static final int PRESENTATION_PAYPHONE = 4;   // show pay phone info
 
 
     public static final String PHONE_NAME_KEY = "phoneName";
diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java
index 8e445d9..d338857 100644
--- a/telephony/java/com/android/internal/telephony/RILConstants.java
+++ b/telephony/java/com/android/internal/telephony/RILConstants.java
@@ -72,7 +72,7 @@
                                             AVAILABLE Application Settings menu*/
     int NETWORK_MODE_LTE_CDMA_EVDO  = 8; /* LTE, CDMA and EvDo */
     int NETWORK_MODE_LTE_GSM_WCDMA  = 9; /* LTE, GSM/WCDMA */
-    int NETWORK_MODE_LTE_CMDA_EVDO_GSM_WCDMA = 10; /* LTE, CDMA, EvDo, GSM/WCDMA */
+    int NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA = 10; /* LTE, CDMA, EvDo, GSM/WCDMA */
     int NETWORK_MODE_LTE_ONLY       = 11; /* LTE Only mode. */
     int NETWORK_MODE_LTE_WCDMA      = 12; /* LTE/WCDMA */
     int PREFERRED_NETWORK_MODE      = NETWORK_MODE_WCDMA_PREF;
@@ -114,6 +114,11 @@
     int DEACTIVATE_REASON_RADIO_OFF = 1;
     int DEACTIVATE_REASON_PDP_RESET = 2;
 
+    /* NV config radio reset types. */
+    int NV_CONFIG_RELOAD_RESET = 1;
+    int NV_CONFIG_ERASE_RESET = 2;
+    int NV_CONFIG_FACTORY_RESET = 3;
+
 /*
 cat include/telephony/ril.h | \
    egrep '^#define' | \
@@ -271,6 +276,12 @@
     int RIL_REQUEST_SIM_OPEN_CHANNEL = 115;
     int RIL_REQUEST_SIM_CLOSE_CHANNEL = 116;
     int RIL_REQUEST_SIM_TRANSMIT_APDU_CHANNEL = 117;
+    int RIL_REQUEST_NV_READ_ITEM = 118;
+    int RIL_REQUEST_NV_WRITE_ITEM = 119;
+    int RIL_REQUEST_NV_WRITE_CDMA_PRL = 120;
+    int RIL_REQUEST_NV_RESET_CONFIG = 121;
+    int RIL_REQUEST_SET_RADIO_MODE = 122;
+
     int RIL_UNSOL_RESPONSE_BASE = 1000;
     int RIL_UNSOL_RESPONSE_RADIO_STATE_CHANGED = 1000;
     int RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED = 1001;
diff --git a/telephony/java/com/android/internal/telephony/TelephonyIntents.java b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
index a7baf1c..9ad2d42 100644
--- a/telephony/java/com/android/internal/telephony/TelephonyIntents.java
+++ b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
@@ -125,16 +125,14 @@
      * Broadcast Action: The data connection state has changed for any one of the
      * phone's mobile data connections (eg, default, MMS or GPS specific connection).
      * The intent will have the following extra values:</p>
-     * <ul>
-     *   <li><em>phoneName</em> - A string version of the phone name.</li>
-     *   <li><em>state</em> - One of <code>"CONNECTED"</code>
-     *      <code>"CONNECTING"</code> or <code>"DISCONNNECTED"</code></li>
-     *   <li><em>apn</em> - A string that is the APN associated with this
-     *      connection.</li>
-     *   <li><em>apnType</em> - A string array of APN types associated with
-     *      this connection.  The APN type <code>"*"</code> is a special
-     *      type that means this APN services all types.</li>
-     * </ul>
+     * <dl>
+     *   <dt>phoneName</dt><dd>A string version of the phone name.</dd>
+     *   <dt>state</dt><dd>One of {@code CONNECTED}, {@code CONNECTING},
+     *      or {@code DISCONNECTED}.</dd>
+     *   <dt>apn</dt><dd>A string that is the APN associated with this connection.</dd>
+     *   <dt>apnType</dt><dd>A string array of APN types associated with this connection.
+     *      The APN type {@code *} is a special type that means this APN services all types.</dd>
+     * </dl>
      *
      * <p class="note">
      * Requires the READ_PHONE_STATE permission.
@@ -149,16 +147,14 @@
      * Broadcast Action: Occurs when a data connection connects to a provisioning apn
      * and is broadcast by the low level data connection code.
      * The intent will have the following extra values:</p>
-     * <ul>
-     *   <li><em>apn</em> - A string that is the APN associated with this
-     *      connection.</li>
-     *   <li><em>apnType</em> - A string array of APN types associated with
-     *      this connection.  The APN type <code>"*"</code> is a special
-     *      type that means this APN services all types.</li>
-     *   <li><em>linkProperties</em> - The <code>LinkProperties</code> for this APN</li>
-     *   <li><em>linkCapabilities</em> - The <code>linkCapabilities</code> for this APN</li>
-     *   <li><em>iface</em> - A string that is the name of the interface</li>
-     * </ul>
+     * <dl>
+     *   <dt>apn</dt><dd>A string that is the APN associated with this connection.</dd>
+     *   <dt>apnType</dt><dd>A string array of APN types associated with this connection.
+     *      The APN type {@code *} is a special type that means this APN services all types.</dd>
+     *   <dt>linkProperties</dt><dd>{@code LinkProperties} for this APN.</dd>
+     *   <dt>linkCapabilities</dt><dd>The {@code LinkCapabilities} for this APN.</dd>
+     *   <dt>iface</dt><dd>A string that is the name of the interface.</dd>
+     * </dl>
      *
      * <p class="note">
      * Requires the READ_PHONE_STATE permission.
@@ -172,12 +168,11 @@
     /**
      * Broadcast Action: An attempt to establish a data connection has failed.
      * The intent will have the following extra values:</p>
-     * <ul>
-     *   <li><em>phoneName</em> &mdash A string version of the phone name.</li>
-     *   <li><em>state</em> &mdash; One of <code>"CONNECTED"</code>
-     *      <code>"CONNECTING"</code> or <code>"DISCONNNECTED"</code></li>
-     * <li><em>reason</em> &mdash; A string indicating the reason for the failure, if available</li>
-     * </ul>
+     * <dl>
+     *   <dt>phoneName</dt><dd>A string version of the phone name.</dd>
+     *   <dt>state</dt><dd>One of {@code CONNECTED}, {@code CONNECTING}, or {code DISCONNECTED}.</dd>
+     *   <dt>reason</dt><dd>A string indicating the reason for the failure, if available.</dd>
+     * </dl>
      *
      * <p class="note">
      * Requires the READ_PHONE_STATE permission.
@@ -192,16 +187,23 @@
     /**
      * Broadcast Action: The sim card state has changed.
      * The intent will have the following extra values:</p>
-     * <ul>
-     *   <li><em>phoneName</em> - A string version of the phone name.</li>
-     *   <li><em>ss</em> - The sim state.  One of
-     *   <code>"ABSENT"</code> <code>"LOCKED"</code>
-     *   <code>"READY"</code> <code>"ISMI"</code> <code>"LOADED"</code> </li>
-     *   <li><em>reason</em> - The reason while ss is LOCKED, otherwise is null
-     *   <code>"PIN"</code> locked on PIN1
-     *   <code>"PUK"</code> locked on PUK1
-     *   <code>"NETWORK"</code> locked on Network Personalization </li>
-     * </ul>
+     * <dl>
+     *   <dt>phoneName</dt><dd>A string version of the phone name.</dd>
+     *   <dt>ss</dt><dd>The sim state. One of:
+     *     <dl>
+     *       <dt>{@code ABSENT}</dt><dd>SIM card not found</dd>
+     *       <dt>{@code LOCKED}</dt><dd>SIM card locked (see {@code reason})</dd>
+     *       <dt>{@code READY}</dt><dd>SIM card ready</dd>
+     *       <dt>{@code IMSI}</dt><dd>FIXME: what is this state?</dd>
+     *       <dt>{@code LOADED}</dt><dd>SIM card data loaded</dd>
+     *     </dl></dd>
+     *   <dt>reason</dt><dd>The reason why ss is {@code LOCKED}; null otherwise.</dd>
+     *   <dl>
+     *       <dt>{@code PIN}</dt><dd>locked on PIN1</dd>
+     *       <dt>{@code PUK}</dt><dd>locked on PUK1</dd>
+     *       <dt>{@code NETWORK}</dt><dd>locked on network personalization</dd>
+     *   </dl>
+     * </dl>
      *
      * <p class="note">
      * Requires the READ_PHONE_STATE permission.
@@ -272,31 +274,30 @@
     /**
      * A <em>prefix</em> for the MCC/MNC filtering used with {@link #ACTION_CARRIER_SETUP}.
      * The MCC/MNC will be concatenated (zero-padded to 3 digits each) to create a final
-     * string of the form:
-     * <br />
-     * <code>android.intent.category.MCCMNC_310260</code>
+     * string of the form: {@code android.intent.category.MCCMNC_310260}
      */
     public static final String CATEGORY_MCCMNC_PREFIX = "android.intent.category.MCCMNC_";
 
     /**
      * Broadcast Action: A "secret code" has been entered in the dialer. Secret codes are
-     * of the form *#*#<code>#*#*. The intent will have the data URI:</p>
+     * of the form {@code *#*#<code>#*#*}. The intent will have the data URI:
      *
-     * <p><code>android_secret_code://&lt;code&gt;</code></p>
+     * {@code android_secret_code://<code>}
      */
-    public static final String SECRET_CODE_ACTION =
-            "android.provider.Telephony.SECRET_CODE";
+    public static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
 
     /**
      * Broadcast Action: The Service Provider string(s) have been updated.  Activities or
      * services that use these strings should update their display.
      * The intent will have the following extra values:</p>
-     * <ul>
-     *   <li><em>showPlmn</em> - Boolean that indicates whether the PLMN should be shown.</li>
-     *   <li><em>plmn</em> - The operator name of the registered network, as a string.</li>
-     *   <li><em>showSpn</em> - Boolean that indicates whether the SPN should be shown.</li>
-     *   <li><em>spn</em> - The service provider name, as a string.</li>
-     * </ul>
+     *
+     * <dl>
+     *   <dt>showPlmn</dt><dd>Boolean that indicates whether the PLMN should be shown.</dd>
+     *   <dt>plmn</dt><dd>The operator name of the registered network, as a string.</dd>
+     *   <dt>showSpn</dt><dd>Boolean that indicates whether the SPN should be shown.</dd>
+     *   <dt>spn</dt><dd>The service provider name, as a string.</dd>
+     * </dl>
+     *
      * Note that <em>showPlmn</em> may indicate that <em>plmn</em> should be displayed, even
      * though the value for <em>plmn</em> is null.  This can happen, for example, if the phone
      * has not registered to a network yet.  In this case the receiver may substitute an
@@ -305,8 +306,7 @@
      * It is recommended to display <em>plmn</em> before / above <em>spn</em> if
      * both are displayed.
      *
-     * <p>Note this is a protected intent that can only be sent
-     * by the system.
+     * <p>Note: this is a protected intent that can only be sent by the system.
      */
     public static final String SPN_STRINGS_UPDATED_ACTION =
             "android.provider.Telephony.SPN_STRINGS_UPDATED";
diff --git a/test-runner/src/android/test/ActivityInstrumentationTestCase.java b/test-runner/src/android/test/ActivityInstrumentationTestCase.java
index d12ff6f..a59ee35 100644
--- a/test-runner/src/android/test/ActivityInstrumentationTestCase.java
+++ b/test-runner/src/android/test/ActivityInstrumentationTestCase.java
@@ -18,8 +18,6 @@
 
 import android.app.Activity;
 
-import java.lang.reflect.Field;
-
 /**
  * This class provides functional testing of a single activity.  The activity under test will
  * be created using the system infrastructure (by calling InstrumentationTestCase.launchActivity())
diff --git a/test-runner/src/android/test/ApplicationTestCase.java b/test-runner/src/android/test/ApplicationTestCase.java
index ae5fa4d..f093181 100644
--- a/test-runner/src/android/test/ApplicationTestCase.java
+++ b/test-runner/src/android/test/ApplicationTestCase.java
@@ -16,8 +16,6 @@
 
 package android.test;
 
-import java.lang.reflect.Field;
-
 import android.app.Application;
 import android.app.Instrumentation;
 import android.content.Context;
diff --git a/test-runner/src/android/test/InstrumentationUtils.java b/test-runner/src/android/test/InstrumentationUtils.java
index 4c59097..1a7002a 100644
--- a/test-runner/src/android/test/InstrumentationUtils.java
+++ b/test-runner/src/android/test/InstrumentationUtils.java
@@ -16,8 +16,6 @@
 
 package android.test;
 
-import java.lang.reflect.Field;
-
 /**
  * 
  * The InstrumentationUtils class has all the utility functions needed for
diff --git a/test-runner/src/android/test/IsolatedContext.java b/test-runner/src/android/test/IsolatedContext.java
index bc00f68..f971b5d 100644
--- a/test-runner/src/android/test/IsolatedContext.java
+++ b/test-runner/src/android/test/IsolatedContext.java
@@ -39,8 +39,6 @@
 import java.io.File;
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
 import java.util.List;
 
 
diff --git a/test-runner/src/android/test/LaunchPerformanceBase.java b/test-runner/src/android/test/LaunchPerformanceBase.java
index c324446..d423e62 100644
--- a/test-runner/src/android/test/LaunchPerformanceBase.java
+++ b/test-runner/src/android/test/LaunchPerformanceBase.java
@@ -19,13 +19,6 @@
 import android.app.Instrumentation;
 import android.content.Intent;
 import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.Debug;
-import android.os.Process;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-
-import java.util.ArrayList;
 
 
 /**
diff --git a/test-runner/src/android/test/MoreAsserts.java b/test-runner/src/android/test/MoreAsserts.java
index 83cc420..fb0faba 100644
--- a/test-runner/src/android/test/MoreAsserts.java
+++ b/test-runner/src/android/test/MoreAsserts.java
@@ -16,7 +16,6 @@
 
 package android.test;
 
-import com.google.android.collect.Lists;
 import junit.framework.Assert;
 
 import java.util.Arrays;
diff --git a/test-runner/src/android/test/ServiceTestCase.java b/test-runner/src/android/test/ServiceTestCase.java
index d8ced38..ba20c09 100644
--- a/test-runner/src/android/test/ServiceTestCase.java
+++ b/test-runner/src/android/test/ServiceTestCase.java
@@ -18,14 +18,11 @@
 
 import android.app.Application;
 import android.app.Service;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.os.IBinder;
-import android.os.RemoteException;
 import android.test.mock.MockApplication;
 
-import java.lang.reflect.Field;
 import java.util.Random;
 
 /**
@@ -263,6 +260,7 @@
         }
         if (mServiceCreated) {
             mService.onDestroy();
+            mServiceCreated = false;
         }
     }
 
diff --git a/test-runner/src/android/test/SingleLaunchActivityTestCase.java b/test-runner/src/android/test/SingleLaunchActivityTestCase.java
index 79c554a..72c93ce 100644
--- a/test-runner/src/android/test/SingleLaunchActivityTestCase.java
+++ b/test-runner/src/android/test/SingleLaunchActivityTestCase.java
@@ -17,8 +17,6 @@
 package android.test;
 
 import android.app.Activity;
-import android.view.IWindowManager;
-import android.os.ServiceManager;
 
 /**
  * If you would like to test a single activity with an
diff --git a/test-runner/src/android/test/mock/MockCursor.java b/test-runner/src/android/test/mock/MockCursor.java
index 5b8a4f4..a37c6eb 100644
--- a/test-runner/src/android/test/mock/MockCursor.java
+++ b/test-runner/src/android/test/mock/MockCursor.java
@@ -24,8 +24,6 @@
 import android.net.Uri;
 import android.os.Bundle;
 
-import java.util.Map;
-
 /**
  * <P>
  * A mock {@link android.database.Cursor} class that isolates the test code from real
diff --git a/test-runner/src/android/test/mock/MockPackageManager.java b/test-runner/src/android/test/mock/MockPackageManager.java
index 89c951b..992ef4b 100644
--- a/test-runner/src/android/test/mock/MockPackageManager.java
+++ b/test-runner/src/android/test/mock/MockPackageManager.java
@@ -16,6 +16,7 @@
 
 package android.test.mock;
 
+import android.app.PackageInstallObserver;
 import android.content.ComponentName;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -40,13 +41,10 @@
 import android.content.pm.ServiceInfo;
 import android.content.pm.VerificationParams;
 import android.content.pm.VerifierDeviceIdentity;
-import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
 import android.content.res.XmlResourceParser;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.os.Binder;
-import android.os.RemoteException;
 import android.os.UserHandle;
 
 import java.util.List;
@@ -673,4 +671,34 @@
     public VerifierDeviceIdentity getVerifierDeviceIdentity() {
         throw new UnsupportedOperationException();
     }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void installPackage(Uri packageURI, PackageInstallObserver observer,
+            int flags, String installerPackageName) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void installPackageWithVerification(Uri packageURI,
+            PackageInstallObserver observer, int flags, String installerPackageName,
+            Uri verificationURI, ManifestDigest manifestDigest,
+            ContainerEncryptionParams encryptionParams) {
+        throw new UnsupportedOperationException();
+    }
+
+    /**
+     * @hide
+     */
+    @Override
+    public void installPackageWithVerificationAndEncryption(Uri packageURI,
+            PackageInstallObserver observer, int flags, String installerPackageName,
+            VerificationParams verificationParams, ContainerEncryptionParams encryptionParams) {
+        throw new UnsupportedOperationException();
+    }
 }
diff --git a/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java b/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
index 28f7216..8c89489 100644
--- a/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
+++ b/test-runner/src/android/test/suitebuilder/TestSuiteBuilder.java
@@ -29,8 +29,6 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
-import java.lang.reflect.InvocationTargetException;
-import java.util.Enumeration;
 import java.util.List;
 import java.util.Set;
 import java.util.HashSet;
diff --git a/test-runner/src/junit/runner/FailureDetailView.java b/test-runner/src/junit/runner/FailureDetailView.java
index 1b8365a..c846191 100644
--- a/test-runner/src/junit/runner/FailureDetailView.java
+++ b/test-runner/src/junit/runner/FailureDetailView.java
@@ -12,7 +12,7 @@
 public interface FailureDetailView {
     // The following definition was removed for compatibility with Android
     // libraries.
-    // 	/**
+    //  /**
     //   * Returns the component used to present the TraceView
     //   */
     //  public Component getComponent();
diff --git a/test-runner/src/junit/runner/LoadingTestCollector.java b/test-runner/src/junit/runner/LoadingTestCollector.java
index 489d9d6..9101900 100644
--- a/test-runner/src/junit/runner/LoadingTestCollector.java
+++ b/test-runner/src/junit/runner/LoadingTestCollector.java
@@ -1,7 +1,6 @@
 package junit.runner;
 
 import java.lang.reflect.*;
-import junit.runner.*;
 import junit.framework.*;
 
 /**
diff --git a/test-runner/src/junit/runner/Sorter.java b/test-runner/src/junit/runner/Sorter.java
index 7731f66..8d9341d 100644
--- a/test-runner/src/junit/runner/Sorter.java
+++ b/test-runner/src/junit/runner/Sorter.java
@@ -2,8 +2,6 @@
 
 import java.util.*;
 
-import junit.runner.*;
-
 /**
  * A custom quick sort with support to customize the swap behaviour.
  * NOTICE: We can't use the the sorting support from the JDK 1.2 collection
diff --git a/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java b/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java
index daec845..8189fa9 100644
--- a/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java
+++ b/tests/AccessoryDisplay/sink/src/com/android/accessorydisplay/sink/DisplaySinkService.java
@@ -30,6 +30,7 @@
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 
 public class DisplaySinkService extends Service implements SurfaceHolder.Callback {
@@ -150,7 +151,12 @@
             if (mSurface != null) {
                 MediaFormat format = MediaFormat.createVideoFormat(
                         "video/avc", mSurfaceWidth, mSurfaceHeight);
-                mCodec = MediaCodec.createDecoderByType("video/avc");
+                try {
+                    mCodec = MediaCodec.createDecoderByType("video/avc");
+                } catch (IOException e) {
+                    throw new RuntimeException(
+                            "failed to create video/avc decoder", e);
+                }
                 mCodec.configure(format, mSurface, null, 0);
                 mCodec.start();
                 mCodecBufferInfo = new BufferInfo();
diff --git a/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java b/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java
index 256f900..a4faca5 100644
--- a/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java
+++ b/tests/AccessoryDisplay/source/src/com/android/accessorydisplay/source/DisplaySourceService.java
@@ -32,6 +32,7 @@
 import android.view.Display;
 import android.view.Surface;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 
 public class DisplaySourceService extends Service {
@@ -191,8 +192,13 @@
             format.setInteger(MediaFormat.KEY_BIT_RATE, BIT_RATE);
             format.setInteger(MediaFormat.KEY_FRAME_RATE, FRAME_RATE);
             format.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, I_FRAME_INTERVAL);
-
-            MediaCodec codec = MediaCodec.createEncoderByType("video/avc");
+            MediaCodec codec;
+            try {
+                codec = MediaCodec.createEncoderByType("video/avc");
+            } catch (IOException e) {
+                throw new RuntimeException(
+                        "failed to create video/avc encoder", e);
+            }
             codec.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
             Surface surface = codec.createInputSurface();
             codec.start();
diff --git a/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeLtr.java b/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeLtr.java
index 2b5e674..ea08a6a 100644
--- a/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeLtr.java
+++ b/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeLtr.java
@@ -22,11 +22,25 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.FrameLayout;
 import android.widget.GridLayout;
-import android.widget.*;
+import android.widget.Space;
+import android.widget.TextView;
 
-import static android.text.InputType.*;
-import static android.widget.GridLayout.*;
+import static android.text.InputType.TYPE_CLASS_TEXT;
+import static android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
+import static android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD;
+import static android.widget.GridLayout.ALIGN_BOUNDS;
+import static android.widget.GridLayout.BASELINE;
+import static android.widget.GridLayout.CENTER;
+import static android.widget.GridLayout.FILL;
+import static android.widget.GridLayout.LEFT;
+import static android.widget.GridLayout.RIGHT;
+import static android.widget.GridLayout.START;
+import static android.widget.GridLayout.Spec;
+import static android.widget.GridLayout.spec;
 
 public class BiDiTestGridLayoutCodeLtr extends Fragment {
 
diff --git a/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeRtl.java b/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeRtl.java
index 3a03c6c..fc3a92c 100644
--- a/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeRtl.java
+++ b/tests/BiDiTests/src/com/android/bidi/BiDiTestGridLayoutCodeRtl.java
@@ -22,11 +22,25 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.FrameLayout;
 import android.widget.GridLayout;
-import android.widget.*;
+import android.widget.Space;
+import android.widget.TextView;
 
-import static android.text.InputType.*;
-import static android.widget.GridLayout.*;
+import static android.text.InputType.TYPE_CLASS_TEXT;
+import static android.text.InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
+import static android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD;
+import static android.widget.GridLayout.ALIGN_BOUNDS;
+import static android.widget.GridLayout.BASELINE;
+import static android.widget.GridLayout.CENTER;
+import static android.widget.GridLayout.FILL;
+import static android.widget.GridLayout.LEFT;
+import static android.widget.GridLayout.RIGHT;
+import static android.widget.GridLayout.START;
+import static android.widget.GridLayout.Spec;
+import static android.widget.GridLayout.spec;
 
 public class BiDiTestGridLayoutCodeRtl extends Fragment {
 
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/GraphReader.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/GraphReader.java
index ef885e3..ec02d34 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/GraphReader.java
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/GraphReader.java
@@ -117,7 +117,7 @@
         }
 
         @Override
-	public void execute(CommandStack stack) {
+        public void execute(CommandStack stack) {
             Filter filter = null;
             try {
                 filter = stack.getFactory().createFilterByClassName(mClassName,
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java
index 0219fd7..3b3de9f 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/AudioTrackDecoder.java
@@ -59,8 +59,15 @@
 
     @Override
     protected MediaCodec initMediaCodec(MediaFormat format) {
-        MediaCodec mediaCodec = MediaCodec.createDecoderByType(
-                format.getString(MediaFormat.KEY_MIME));
+        MediaCodec mediaCodec;
+        try {
+            mediaCodec = MediaCodec.createDecoderByType(
+                    format.getString(MediaFormat.KEY_MIME));
+        } catch (IOException e) {
+            throw new RuntimeException(
+                    "failed to create decoder for "
+                    + format.getString(MediaFormat.KEY_MIME), e);
+        }
         mediaCodec.configure(format, null, null, 0);
         return mediaCodec;
     }
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java
index 96f3059..a624010 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/CpuVideoTrackDecoder.java
@@ -29,6 +29,7 @@
 import androidx.media.filterfw.FrameImage2D;
 import androidx.media.filterfw.PixelUtils;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.Arrays;
 import java.util.HashSet;
@@ -214,7 +215,13 @@
             return null;
         } else {
             String bestCodec = candidateCodecs.firstEntry().getValue();
-            return MediaCodec.createByCodecName(bestCodec);
+            try {
+                return MediaCodec.createByCodecName(bestCodec);
+            } catch (IOException e) {
+                throw new RuntimeException(
+                        "failed to create codec for "
+                        + bestCodec, e);
+            }
         }
     }
 
diff --git a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java
index bbba9d8..f5eb513 100644
--- a/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java
+++ b/tests/Camera2Tests/SmartCamera/SimpleCamera/src/androidx/media/filterfw/decoder/GpuVideoTrackDecoder.java
@@ -28,6 +28,7 @@
 import androidx.media.filterfw.ImageShader;
 import androidx.media.filterfw.TextureSource;
 
+import java.io.IOException;
 import java.nio.ByteBuffer;
 
 /**
@@ -86,9 +87,16 @@
 
     @Override
     protected MediaCodec initMediaCodec(MediaFormat format) {
+        MediaCodec mediaCodec;
+        try {
+            mediaCodec = MediaCodec.createDecoderByType(
+                    format.getString(MediaFormat.KEY_MIME));
+        } catch (IOException e) {
+            throw new RuntimeException(
+                    "failed to create decoder for "
+                    + format.getString(MediaFormat.KEY_MIME), e);
+        }
         Surface surface = new Surface(mSurfaceTexture);
-        MediaCodec mediaCodec = MediaCodec.createDecoderByType(
-                format.getString(MediaFormat.KEY_MIME));
         mediaCodec.configure(format, surface, null, 0);
         surface.release();
         return mediaCodec;
diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/CompareActivity.java b/tests/CanvasCompare/src/com/android/test/hwuicompare/CompareActivity.java
index 0b85189..8d8d9de 100644
--- a/tests/CanvasCompare/src/com/android/test/hwuicompare/CompareActivity.java
+++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/CompareActivity.java
@@ -97,7 +97,7 @@
                 Log.d(LOG_TAG, "failure to access hardware layer");
                 return;
             }
-            Method copyInto = hardwareLayer.getClass().getSuperclass()
+            Method copyInto = hardwareLayer.getClass()
                     .getDeclaredMethod("copyInto", Bitmap.class);
             if (!copyInto.isAccessible())
                 copyInto.setAccessible(true);
diff --git a/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java b/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java
index a08b558..c90b626 100644
--- a/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java
+++ b/tests/CanvasCompare/src/com/android/test/hwuicompare/ErrorCalculator.java
@@ -35,23 +35,24 @@
     private static final boolean LOG_TIMING = false;
     private static final boolean LOG_CALC = false;
 
-    private final RenderScript mRS;
+    private RenderScript mRS;
     private Allocation mIdealPixelsAllocation;
     private Allocation mGivenPixelsAllocation;
     private Allocation mOutputPixelsAllocation;
 
-    private final Allocation mInputRowsAllocation;
-    private final Allocation mOutputRegionsAllocation;
+    private Allocation mInputRowsAllocation;
+    private Allocation mOutputRegionsAllocation;
 
-    private final ScriptC_errorCalculator mScript;
+    private ScriptC_errorCalculator mScript;
 
-    private final int[] mOutputRowRegions;
+    private int[] mOutputRowRegions;
 
     public ErrorCalculator(Context c, Resources resources) {
         int width = resources.getDimensionPixelSize(R.dimen.layer_width);
         int height = resources.getDimensionPixelSize(R.dimen.layer_height);
         mOutputRowRegions = new int[height / REGION_SIZE];
 
+/*
         mRS = RenderScript.create(c);
         int[] rowIndices = new int[height / REGION_SIZE];
         for (int i = 0; i < rowIndices.length; i++)
@@ -67,12 +68,15 @@
         mInputRowsAllocation.copyFrom(rowIndices);
         mOutputRegionsAllocation = Allocation.createSized(mRS, Element.I32(mRS),
                 mOutputRowRegions.length, Allocation.USAGE_SCRIPT);
+*/
     }
 
 
     private static long startMillis, middleMillis;
 
     public float calcErrorRS(Bitmap ideal, Bitmap given) {
+        if (true)
+            return calcError(ideal, given);
         if (LOG_TIMING) {
             startMillis = System.currentTimeMillis();
         }
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/AbstractLayoutTest.java b/tests/GridLayoutTest/src/com/android/test/layout/AbstractLayoutTest.java
index 4d3a843..196a5c1 100644
--- a/tests/GridLayoutTest/src/com/android/test/layout/AbstractLayoutTest.java
+++ b/tests/GridLayoutTest/src/com/android/test/layout/AbstractLayoutTest.java
@@ -24,7 +24,13 @@
 import android.view.ViewGroup;
 import android.widget.Button;
 
-import static android.view.Gravity.*;
+import static android.view.Gravity.BOTTOM;
+import static android.view.Gravity.CENTER;
+import static android.view.Gravity.FILL;
+import static android.view.Gravity.LEFT;
+import static android.view.Gravity.NO_GRAVITY;
+import static android.view.Gravity.RIGHT;
+import static android.view.Gravity.TOP;
 
 public abstract class AbstractLayoutTest extends Activity {
 
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/AlignmentTest.java b/tests/GridLayoutTest/src/com/android/test/layout/AlignmentTest.java
index b1c4486..5559707 100644
--- a/tests/GridLayoutTest/src/com/android/test/layout/AlignmentTest.java
+++ b/tests/GridLayoutTest/src/com/android/test/layout/AlignmentTest.java
@@ -20,15 +20,25 @@
 import android.content.Context;
 import android.os.Bundle;
 import android.view.View;
+import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.Button;
 import android.widget.EditText;
 import android.widget.GridLayout;
+import android.widget.GridLayout.Alignment;
+import android.widget.GridLayout.LayoutParams;
 import android.widget.TextView;
 
-import static android.widget.GridLayout.*;
+import static android.widget.GridLayout.BASELINE;
+import static android.widget.GridLayout.BOTTOM;
+import static android.widget.GridLayout.CENTER;
+import static android.widget.GridLayout.FILL;
+import static android.widget.GridLayout.LEFT;
+import static android.widget.GridLayout.RIGHT;
+import static android.widget.GridLayout.TOP;
+import static android.widget.GridLayout.spec;
 
-public class AlignmentTest  extends Activity {
+public class AlignmentTest extends Activity {
 
     public static final String[] HORIZONTAL_NAMES = {"LEFT", "center", "east", "fill"};
     public static final Alignment[] HORIZONTAL_ALIGNMENTS = {LEFT, CENTER, RIGHT, FILL};
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/GridLayoutTest.java b/tests/GridLayoutTest/src/com/android/test/layout/GridLayoutTest.java
index 4ce449a..8047c5f1 100644
--- a/tests/GridLayoutTest/src/com/android/test/layout/GridLayoutTest.java
+++ b/tests/GridLayoutTest/src/com/android/test/layout/GridLayoutTest.java
@@ -21,7 +21,10 @@
 import android.view.ViewGroup;
 import android.widget.GridLayout;
 
-import static android.widget.GridLayout.*;
+import static android.widget.GridLayout.Spec;
+import static android.widget.GridLayout.UNDEFINED;
+import static android.widget.GridLayout.VERTICAL;
+import static android.widget.GridLayout.spec;
 
 public class GridLayoutTest extends AbstractLayoutTest {
     public ViewGroup create(Context context) {
diff --git a/tests/GridLayoutTest/src/com/android/test/layout/LinearLayoutTest.java b/tests/GridLayoutTest/src/com/android/test/layout/LinearLayoutTest.java
index c7f4665..dc5b12c 100644
--- a/tests/GridLayoutTest/src/com/android/test/layout/LinearLayoutTest.java
+++ b/tests/GridLayoutTest/src/com/android/test/layout/LinearLayoutTest.java
@@ -20,9 +20,9 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.LinearLayout;
+import android.widget.LinearLayout.LayoutParams;
 
-import static android.widget.LinearLayout.*;
-import static android.widget.LinearLayout.LayoutParams.*;
+import static android.widget.LinearLayout.LayoutParams.WRAP_CONTENT;
 
 public class LinearLayoutTest extends AbstractLayoutTest {
     public ViewGroup create(Context context) {
diff --git a/tests/HwAccelerationTest/AndroidManifest.xml b/tests/HwAccelerationTest/AndroidManifest.xml
index 1bb0db0..5c2583b 100644
--- a/tests/HwAccelerationTest/AndroidManifest.xml
+++ b/tests/HwAccelerationTest/AndroidManifest.xml
@@ -706,6 +706,15 @@
         </activity>
 
         <activity
+                android:name="ColorFiltersMutateActivity"
+                android:label="ColorFilters/Mutate Filters">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.test.hwui.TEST" />
+            </intent-filter>
+        </activity>
+
+        <activity
                 android:name="LinesActivity"
                 android:label="Draw/Lines">
             <intent-filter>
@@ -849,5 +858,22 @@
             </intent-filter>
         </activity>
 
+        <activity
+                android:name="ProjectionActivity"
+                android:label="Reordering/Projection">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.test.hwui.TEST" />
+            </intent-filter>
+        </activity>
+
+        <activity
+                android:name=".ProjectionClippingActivity"
+                android:label="Reordering/Projection Clipping">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="com.android.test.hwui.TEST" />
+            </intent-filter>
+        </activity>
     </application>
 </manifest>
diff --git a/tests/HwAccelerationTest/res/drawable/round_rect_background.xml b/tests/HwAccelerationTest/res/drawable/round_rect_background.xml
new file mode 100644
index 0000000..14d4073
--- /dev/null
+++ b/tests/HwAccelerationTest/res/drawable/round_rect_background.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape
+    xmlns:android="http://schemas.android.com/apk/res/android" >
+    <solid android:color="#eee" />
+    <corners android:radius="30dp" />
+</shape>
\ No newline at end of file
diff --git a/tests/HwAccelerationTest/res/layout/projection.xml b/tests/HwAccelerationTest/res/layout/projection.xml
new file mode 100644
index 0000000..b6e4c5e
--- /dev/null
+++ b/tests/HwAccelerationTest/res/layout/projection.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/container"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    android:background="#66ff0000"
+    tools:context="com.example.projection.ProjectionActivity"
+    tools:ignore="MergeRootFrame">
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="100dp"
+        android:textSize="50sp"
+        android:text="TextView"/>
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="100dp"
+        android:clipChildren="false">
+        <view class="com.android.test.hwui.ProjectionActivity$ProjectedView"
+            android:id="@+id/projection"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"/>
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:textSize="50sp"
+            android:text="TextView"/>
+    </FrameLayout>
+
+    <TextView
+        android:layout_width="match_parent"
+        android:layout_height="100dp"
+        android:textSize="50sp"
+        android:text="TextView"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/tests/HwAccelerationTest/res/layout/projection_clipping.xml b/tests/HwAccelerationTest/res/layout/projection_clipping.xml
new file mode 100644
index 0000000..7177fc8f
--- /dev/null
+++ b/tests/HwAccelerationTest/res/layout/projection_clipping.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+    <FrameLayout
+        android:translationX="50dp"
+        android:translationY="50dp"
+        android:elevation="30dp"
+        android:layout_width="200dp"
+        android:layout_height="200dp"
+        android:background="@drawable/round_rect_background">
+        <View
+            android:id="@+id/clickable1"
+            android:layout_width="100dp"
+            android:layout_height="100dp"
+            android:background="?android:attr/selectableItemBackground"/>
+        <View
+            android:id="@+id/clickable2"
+            android:translationX="50dp"
+            android:translationY="10dp"
+            android:layout_width="150dp"
+            android:layout_height="100dp"
+            android:background="?android:attr/selectableItemBackground"/>
+    </FrameLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/tests/HwAccelerationTest/res/values/styles.xml b/tests/HwAccelerationTest/res/values/styles.xml
new file mode 100644
index 0000000..cde5d20
--- /dev/null
+++ b/tests/HwAccelerationTest/res/values/styles.xml
@@ -0,0 +1,34 @@
+<resources>
+    <style name="ReorderTextView" parent="@android:style/TextAppearance.Medium">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">100dp</item>
+        <item name="android:gravity">center</item>
+    </style>
+    <style name="LeftReorderTextView" parent="@style/ReorderTextView">
+        <item name="android:translationX">20dp</item>
+    </style>
+    <style name="RightReorderTextView" parent="@style/ReorderTextView">
+        <item name="android:translationX">-20dp</item>
+    </style>
+
+    <style name="TopLeftReorderTextView" parent="@style/LeftReorderTextView">
+        <item name="android:background">#666</item>
+        <item name="android:text">100</item>
+        <item name="android:translationZ">100dp</item>
+    </style>
+    <style name="BottomLeftReorderTextView" parent="@style/LeftReorderTextView">
+        <item name="android:background">#bbb</item>
+        <item name="android:text">300</item>
+        <item name="android:translationZ">300dp</item>
+    </style>
+    <style name="TopRightReorderTextView" parent="@style/RightReorderTextView">
+        <item name="android:background">#888</item>
+        <item name="android:text">200</item>
+        <item name="android:translationZ">200dp</item>
+    </style>
+    <style name="BottomRightReorderTextView" parent="@style/RightReorderTextView">
+        <item name="android:background">#ccc</item>
+        <item name="android:text">400</item>
+        <item name="android:translationZ">400dp</item>
+    </style>
+</resources>
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java
new file mode 100644
index 0000000..808b5d3
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ColorFiltersMutateActivity.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2010 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.android.test.hwui;
+
+import android.animation.ArgbEvaluator;
+import android.animation.ObjectAnimator;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.ColorMatrix;
+import android.graphics.ColorMatrixColorFilter;
+import android.graphics.LightingColorFilter;
+import android.graphics.Paint;
+import android.graphics.PorterDuff;
+import android.graphics.PorterDuffColorFilter;
+import android.os.Bundle;
+import android.view.View;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class ColorFiltersMutateActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        final BitmapsView view = new BitmapsView(this);
+        setContentView(view);
+    }
+
+    static class BitmapsView extends View {
+        private final Bitmap mBitmap1;
+        private final Bitmap mBitmap2;
+        private final Paint mColorMatrixPaint;
+        private final Paint mLightingPaint;
+        private final Paint mBlendPaint;
+
+        private float mSaturation = 0.0f;
+        private int mLightAdd = 0;
+        private int mLightMul = 0;
+        private int mPorterDuffColor = 0;
+
+        BitmapsView(Context c) {
+            super(c);
+
+            mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
+            mBitmap2 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset2);
+
+            mColorMatrixPaint = new Paint();
+            final ColorMatrix colorMatrix = new ColorMatrix();
+            colorMatrix.setSaturation(0);
+            mColorMatrixPaint.setColorFilter(new ColorMatrixColorFilter(colorMatrix));
+
+            mLightingPaint = new Paint();
+            mLightingPaint.setColorFilter(new LightingColorFilter(0, 0));
+
+            mBlendPaint = new Paint();
+            mBlendPaint.setColorFilter(new PorterDuffColorFilter(0, PorterDuff.Mode.SRC_OVER));
+
+            ObjectAnimator sat = ObjectAnimator.ofFloat(this, "saturation", 1.0f);
+            sat.setDuration(1000);
+            sat.setRepeatCount(ObjectAnimator.INFINITE);
+            sat.setRepeatMode(ObjectAnimator.REVERSE);
+            sat.start();
+
+            ObjectAnimator light = ObjectAnimator.ofInt(this, "lightAdd", 0x00101030);
+            light.setEvaluator(new ArgbEvaluator());
+            light.setDuration(1000);
+            light.setRepeatCount(ObjectAnimator.INFINITE);
+            light.setRepeatMode(ObjectAnimator.REVERSE);
+            light.start();
+
+            ObjectAnimator mult = ObjectAnimator.ofInt(this, "lightMul", 0x0060ffff);
+            mult.setEvaluator(new ArgbEvaluator());
+            mult.setDuration(1000);
+            mult.setRepeatCount(ObjectAnimator.INFINITE);
+            mult.setRepeatMode(ObjectAnimator.REVERSE);
+            mult.start();
+
+            ObjectAnimator color = ObjectAnimator.ofInt(this, "porterDuffColor", 0x7f990040);
+            color.setEvaluator(new ArgbEvaluator());
+            color.setDuration(1000);
+            color.setRepeatCount(ObjectAnimator.INFINITE);
+            color.setRepeatMode(ObjectAnimator.REVERSE);
+            color.start();
+        }
+
+        public int getPorterDuffColor() {
+            return mPorterDuffColor;
+        }
+
+        public void setPorterDuffColor(int porterDuffColor) {
+            mPorterDuffColor = porterDuffColor;
+            final PorterDuffColorFilter filter =
+                    (PorterDuffColorFilter) mBlendPaint.getColorFilter();
+            filter.setColor(mPorterDuffColor);
+            invalidate();
+        }
+
+        public int getLightAdd() {
+            return mLightAdd;
+        }
+
+        public void setLightAdd(int lightAdd) {
+            mLightAdd = lightAdd;
+            final LightingColorFilter filter =
+                    (LightingColorFilter) mLightingPaint.getColorFilter();
+            filter.setColorAdd(lightAdd);
+            invalidate();
+        }
+
+        public int getLightMul() {
+            return mLightAdd;
+        }
+
+        public void setLightMul(int lightMul) {
+            mLightMul = lightMul;
+            final LightingColorFilter filter =
+                    (LightingColorFilter) mLightingPaint.getColorFilter();
+            filter.setColorMultiply(lightMul);
+            invalidate();
+        }
+
+        public void setSaturation(float saturation) {
+            mSaturation = saturation;
+            final ColorMatrixColorFilter filter =
+                    (ColorMatrixColorFilter) mColorMatrixPaint.getColorFilter();
+            final ColorMatrix m = filter.getColorMatrix();
+            m.setSaturation(saturation);
+            filter.setColorMatrix(m);
+            invalidate();
+        }
+
+        public float getSaturation() {
+            return mSaturation;
+        }
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            super.onDraw(canvas);
+
+            canvas.drawARGB(255, 255, 255, 255);
+
+            canvas.save();
+            canvas.translate(120.0f, 50.0f);
+            canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mColorMatrixPaint);
+
+            canvas.translate(0.0f, 50.0f + mBitmap1.getHeight());
+            canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mLightingPaint);
+
+            canvas.translate(0.0f, 50.0f + mBitmap1.getHeight());
+            canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mBlendPaint);
+            canvas.restore();
+
+            canvas.save();
+            canvas.translate(120.0f + mBitmap1.getWidth() + 120.0f, 50.0f);
+            canvas.drawBitmap(mBitmap2, 0.0f, 0.0f, mColorMatrixPaint);
+
+            canvas.translate(0.0f, 50.0f + mBitmap2.getHeight());
+            canvas.drawBitmap(mBitmap2, 0.0f, 0.0f, mLightingPaint);
+
+            canvas.translate(0.0f, 50.0f + mBitmap2.getHeight());
+            canvas.drawBitmap(mBitmap2, 0.0f, 0.0f, mBlendPaint);
+            canvas.restore();
+        }
+    }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java
new file mode 100644
index 0000000..5ba3ad9
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionActivity.java
@@ -0,0 +1,83 @@
+package com.android.test.hwui;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.os.Bundle;
+
+import android.app.Activity;
+import android.util.AttributeSet;
+import android.view.RenderNode;
+import android.view.View;
+import android.widget.LinearLayout;
+
+public class ProjectionActivity extends Activity {
+    /**
+     * The content from this view should be projected in between the background of the
+     * ProjecteeLayout and its children, unclipped.
+     *
+     * This view doesn't clip to its bounds (because its parent has clipChildren=false) so that
+     * when it is projected onto the ProjecteeLayout, it draws outside its view bounds.
+     */
+    public static class ProjectedView extends View {
+        private final Paint mPaint = new Paint();
+        private final RectF mRectF = new RectF();
+
+        public ProjectedView(Context context) {
+            this(context, null);
+        }
+
+        public ProjectedView(Context context, AttributeSet attrs) {
+            this(context, attrs, 0);
+        }
+
+        public ProjectedView(Context context, AttributeSet attrs, int defStyleAttr) {
+            super(context, attrs, defStyleAttr);
+
+            setOnClickListener(new OnClickListener() {
+                boolean toggle = false;
+                @Override
+                public void onClick(View v) {
+                    toggle = !toggle;
+                    setProject(toggle);
+                }
+            });
+        }
+
+        private void setProject(boolean value) {
+            RenderNode displayList = getDisplayList();
+            if (displayList != null) {
+                displayList.setProjectBackwards(value);
+            }
+            // NOTE: we can't invalidate ProjectedView for the redraw because:
+            // 1) the view won't preserve displayList properties that it doesn't know about
+            // 2) the damage rect won't be big enough
+
+            // instead, twiddle properties on the container, so that enough area of the screen is
+            // redrawn without rerecording any DisplayLists.
+            container.setTranslationX(100f);
+            container.setTranslationX(0.0f);
+        }
+
+        @Override
+        protected void onDraw(Canvas canvas) {
+            // TODO: set projection flag
+            final int w = getWidth();
+            final int h = getHeight();
+            mRectF.set(0, -h, w, 2 * h);
+            mPaint.setAntiAlias(true);
+            mPaint.setColor(0x5f00ff00);
+            canvas.drawOval(mRectF, mPaint);
+        }
+    }
+
+    static View container;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.projection);
+        container = findViewById(R.id.container);
+    }
+}
diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java
new file mode 100644
index 0000000..2ae960b
--- /dev/null
+++ b/tests/HwAccelerationTest/src/com/android/test/hwui/ProjectionClippingActivity.java
@@ -0,0 +1,27 @@
+package com.android.test.hwui;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.RectF;
+import android.os.Bundle;
+import android.util.AttributeSet;
+import android.view.RenderNode;
+import android.view.View;
+
+public class ProjectionClippingActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.projection_clipping);
+        View.OnClickListener listener = new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                // woo! nothing!
+            }
+        };
+        findViewById(R.id.clickable1).setOnClickListener(listener);
+        findViewById(R.id.clickable2).setOnClickListener(listener);
+    }
+}
diff --git a/tests/IdleServiceTest/Android.mk b/tests/IdleServiceTest/Android.mk
new file mode 100644
index 0000000..a7879c5
--- /dev/null
+++ b/tests/IdleServiceTest/Android.mk
@@ -0,0 +1,13 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := IdleServiceTest
+LOCAL_CERTIFICATE := platform
+
+LOCAL_PROGUARD_ENABLED := disabled
+
+include $(BUILD_PACKAGE)
diff --git a/tests/IdleServiceTest/AndroidManifest.xml b/tests/IdleServiceTest/AndroidManifest.xml
new file mode 100644
index 0000000..16d2324
--- /dev/null
+++ b/tests/IdleServiceTest/AndroidManifest.xml
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.idleservicetest">
+
+    <application>
+        <service android:name="TestService"
+                 android:exported="true"
+                 android:enabled="true"
+                 android:permission="android.permission.BIND_IDLE_SERVICE" >
+            <intent-filter>
+                <action android:name="android.service.idle.IdleService" />
+            </intent-filter>
+        </service>
+
+        <service android:name="CrashingTestService"
+                 android:exported="true"
+                 android:enabled="true"
+                 android:permission="android.permission.BIND_IDLE_SERVICE" >
+            <intent-filter>
+                <action android:name="android.service.idle.IdleService" />
+            </intent-filter>
+        </service>
+
+        <service android:name="TimeoutTestService"
+                 android:exported="true"
+                 android:enabled="true"
+                 android:permission="android.permission.BIND_IDLE_SERVICE" >
+            <intent-filter>
+                <action android:name="android.service.idle.IdleService" />
+            </intent-filter>
+        </service>
+
+        <!-- UnpermissionedTestService should never run because it does
+             not require the necessary permission in its <service> block -->
+        <service android:name="UnpermissionedTestService"
+                 android:exported="true"
+                 android:enabled="true" >
+            <intent-filter>
+                <action android:name="android.service.idle.IdleService" />
+            </intent-filter>
+        </service>
+
+    </application>
+</manifest>
diff --git a/tests/IdleServiceTest/src/com/android/idleservicetest/CrashingTestService.java b/tests/IdleServiceTest/src/com/android/idleservicetest/CrashingTestService.java
new file mode 100644
index 0000000..022ebcf
--- /dev/null
+++ b/tests/IdleServiceTest/src/com/android/idleservicetest/CrashingTestService.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2014 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.android.idleservicetest;
+
+import android.app.maintenance.IdleService;
+import android.os.Handler;
+import android.util.Log;
+
+public class CrashingTestService extends IdleService {
+    static final String TAG = "CrashingTestService";
+
+    String mNull = null;
+
+    @Override
+    public boolean onIdleStart() {
+        Log.i(TAG, "Idle maintenance: onIdleStart()");
+
+        Handler h = new Handler();
+        Runnable r = new Runnable() {
+            @Override
+            public void run() {
+                Log.i(TAG, "Explicitly crashing");
+                if (mNull.equals("")) {
+                    Log.i(TAG, "won't happen");
+                }
+            }
+        };
+        Log.i(TAG, "Posting explicit crash in 15 seconds");
+        h.postDelayed(r, 15 * 1000);
+        return true;
+    }
+
+    @Override
+    public void onIdleStop() {
+        Log.i(TAG, "Idle maintenance: onIdleStop()");
+    }
+
+}
diff --git a/tests/IdleServiceTest/src/com/android/idleservicetest/TestService.java b/tests/IdleServiceTest/src/com/android/idleservicetest/TestService.java
new file mode 100644
index 0000000..7e9805f
--- /dev/null
+++ b/tests/IdleServiceTest/src/com/android/idleservicetest/TestService.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2014 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.android.idleservicetest;
+
+import android.app.maintenance.IdleService;
+import android.os.Handler;
+import android.util.Log;
+
+public class TestService extends IdleService {
+    static final String TAG = "TestService";
+
+    @Override
+    public boolean onIdleStart() {
+        Log.i(TAG, "Idle maintenance: onIdleStart()");
+
+        Handler h = new Handler();
+        Runnable r = new Runnable() {
+            @Override
+            public void run() {
+                Log.i(TAG, "Explicitly finishing idle");
+                finishIdle();
+            }
+        };
+        Log.i(TAG, "Posting explicit finish in 15 seconds");
+        h.postDelayed(r, 15 * 1000);
+        return true;
+    }
+
+    @Override
+    public void onIdleStop() {
+        Log.i(TAG, "Idle maintenance: onIdleStop()");
+    }
+
+}
diff --git a/tests/IdleServiceTest/src/com/android/idleservicetest/TimeoutTestService.java b/tests/IdleServiceTest/src/com/android/idleservicetest/TimeoutTestService.java
new file mode 100644
index 0000000..b2ba21b
--- /dev/null
+++ b/tests/IdleServiceTest/src/com/android/idleservicetest/TimeoutTestService.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2014 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.android.idleservicetest;
+
+import android.app.maintenance.IdleService;
+import android.util.Log;
+
+public class TimeoutTestService extends IdleService {
+    private static final String TAG = "TimeoutTestService";
+
+    @Override
+    public boolean onIdleStart() {
+        Log.i(TAG, "onIdleStart() but anticipating time-slice timeout");
+        return true;
+    }
+
+    @Override
+    public void onIdleStop() {
+        Log.i(TAG, "onIdleStop() so we're done");
+    }
+
+}
diff --git a/tests/IdleServiceTest/src/com/android/idleservicetest/UnpermissionedTestService.java b/tests/IdleServiceTest/src/com/android/idleservicetest/UnpermissionedTestService.java
new file mode 100644
index 0000000..b9fe32b
--- /dev/null
+++ b/tests/IdleServiceTest/src/com/android/idleservicetest/UnpermissionedTestService.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2014 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.android.idleservicetest;
+
+import android.app.maintenance.IdleService;
+import android.util.Log;
+
+// Should never be invoked because its manifest declaration does not
+// require the necessary permission.
+public class UnpermissionedTestService extends IdleService {
+    private static final String TAG = "UnpermissionedTestService";
+
+    @Override
+    public boolean onIdleStart() {
+        Log.e(TAG, "onIdleStart() for this service should never be called!");
+        return false;
+    }
+
+    @Override
+    public void onIdleStop() {
+        Log.e(TAG, "onIdleStop() for this service should never be called!");
+    }
+
+}
diff --git a/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java b/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
index 25ac2f0..299e6bb 100644
--- a/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
+++ b/tests/ImfTest/src/com/android/imftest/samples/InputTypeActivity.java
@@ -81,11 +81,11 @@
         
         /* Uri Edit Text */
         mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_URI, 
-        		R.string.uri_edit_text_label));
+                R.string.uri_edit_text_label));
         
         /* Email Address Edit Text */
         mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_EMAIL_ADDRESS, 
-        		R.string.email_address_edit_text_label));
+                R.string.email_address_edit_text_label));
         
         /* Email Subject Text */
         mLayout.addView(buildEntryView(EditorInfo.TYPE_CLASS_TEXT|EditorInfo.TYPE_TEXT_VARIATION_EMAIL_SUBJECT, 
@@ -142,7 +142,7 @@
     private View buildEntryView(int inputType, int label) {
 
         
-    	View view = mInflater.inflate(R.layout.sample_edit_text, mParent, false);
+        View view = mInflater.inflate(R.layout.sample_edit_text, mParent, false);
         
         EditText editText = (EditText) view.findViewById(R.id.data);
         editText.setInputType(inputType);
diff --git a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollablePanScanTests.java b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollablePanScanTests.java
index a1c5fd2..2db11c5 100644
--- a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollablePanScanTests.java
+++ b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollablePanScanTests.java
@@ -24,26 +24,26 @@
 
 public class BigEditTextActivityNonScrollablePanScanTests extends ImfBaseTestCase<BigEditTextActivityNonScrollablePanScan> {
 
-	public final String TAG = "BigEditTextActivityNonScrollablePanScanTests";
-	
+    public final String TAG = "BigEditTextActivityNonScrollablePanScanTests";
+    
     public BigEditTextActivityNonScrollablePanScanTests() {
         super(BigEditTextActivityNonScrollablePanScan.class);
     }
-	
-	@LargeTest
-	public void testAppAdjustmentPanScan() {
-	    // Give the IME 2 seconds to appear.
-	    pause(2000);
+    
+    @LargeTest
+    public void testAppAdjustmentPanScan() {
+        // Give the IME 2 seconds to appear.
+        pause(2000);
         
-	    View rootView = ((BigEditTextActivityNonScrollablePanScan) mTargetActivity).getRootView();
-	    View servedView = ((BigEditTextActivityNonScrollablePanScan) mTargetActivity).getDefaultFocusedView();
-	        
-	    assertNotNull(rootView);
-	    assertNotNull(servedView);
-	    
-	    destructiveCheckImeInitialState(rootView, servedView);
-	    
+        View rootView = ((BigEditTextActivityNonScrollablePanScan) mTargetActivity).getRootView();
+        View servedView = ((BigEditTextActivityNonScrollablePanScan) mTargetActivity).getDefaultFocusedView();
+            
+        assertNotNull(rootView);
+        assertNotNull(servedView);
+        
+        destructiveCheckImeInitialState(rootView, servedView);
+        
         verifyEditTextAdjustment(servedView, rootView.getMeasuredHeight());
-	}
-	
+    }
+    
 }
diff --git a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollableResizeTests.java b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollableResizeTests.java
index 2e0b0eb..1050794 100644
--- a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollableResizeTests.java
+++ b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityNonScrollableResizeTests.java
@@ -24,14 +24,14 @@
 
 public class BigEditTextActivityNonScrollableResizeTests extends ImfBaseTestCase<BigEditTextActivityNonScrollableResize> {
 
-	public final String TAG = "BigEditTextActivityNonScrollableResizeTests";
-	
+    public final String TAG = "BigEditTextActivityNonScrollableResizeTests";
+    
     public BigEditTextActivityNonScrollableResizeTests() {
         super(BigEditTextActivityNonScrollableResize.class);
     }
-	
-	@LargeTest
-	public void testAppAdjustmentPanScan() {       // Give the IME 2 seconds to appear.
+    
+    @LargeTest
+    public void testAppAdjustmentPanScan() {       // Give the IME 2 seconds to appear.
         pause(2000);
         
         View rootView = ((BigEditTextActivityNonScrollableResize) mTargetActivity).getRootView();
@@ -43,6 +43,6 @@
         destructiveCheckImeInitialState(rootView, servedView);
             
         verifyEditTextAdjustment(servedView, rootView.getMeasuredHeight());
-	}
-	
+    }
+    
 }
diff --git a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollablePanScanTests.java b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollablePanScanTests.java
index d3eefb5..1e848b0 100644
--- a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollablePanScanTests.java
+++ b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollablePanScanTests.java
@@ -24,14 +24,14 @@
 
 public class BigEditTextActivityScrollablePanScanTests extends ImfBaseTestCase<BigEditTextActivityScrollablePanScan> {
 
-	public final String TAG = "BigEditTextActivityScrollablePanScanTests";
-	
+    public final String TAG = "BigEditTextActivityScrollablePanScanTests";
+    
     public BigEditTextActivityScrollablePanScanTests() {
         super(BigEditTextActivityScrollablePanScan.class);
     }
-	
-	@LargeTest
-	public void testAppAdjustmentPanScan() {       // Give the IME 2 seconds to appear.
+    
+    @LargeTest
+    public void testAppAdjustmentPanScan() {       // Give the IME 2 seconds to appear.
         pause(2000);
         
         View rootView = ((BigEditTextActivityScrollablePanScan) mTargetActivity).getRootView();
@@ -43,6 +43,6 @@
         destructiveCheckImeInitialState(rootView, servedView);
             
         verifyEditTextAdjustment(servedView, rootView.getMeasuredHeight());
-	}
-	
+    }
+    
 }
diff --git a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollableResizeTests.java b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollableResizeTests.java
index 5c40e6d..de607d6 100644
--- a/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollableResizeTests.java
+++ b/tests/ImfTest/tests/src/com/android/imftest/samples/BigEditTextActivityScrollableResizeTests.java
@@ -24,15 +24,15 @@
 
 public class BigEditTextActivityScrollableResizeTests extends ImfBaseTestCase<BigEditTextActivityScrollableResize> {
 
-	public final String TAG = "BigEditTextActivityScrollableResizeTests";
-	
+    public final String TAG = "BigEditTextActivityScrollableResizeTests";
+    
     public BigEditTextActivityScrollableResizeTests() {
         super(BigEditTextActivityScrollableResize.class);
     }
-	
-	@LargeTest
-	public void testAppAdjustmentPanScan() {       
-	    // Give the IME 2 seconds to appear.
+    
+    @LargeTest
+    public void testAppAdjustmentPanScan() {       
+        // Give the IME 2 seconds to appear.
         pause(2000);
         
         View rootView = ((BigEditTextActivityScrollableResize) mTargetActivity).getRootView();
@@ -44,6 +44,6 @@
         destructiveCheckImeInitialState(rootView, servedView);
             
         verifyEditTextAdjustment(servedView, rootView.getMeasuredHeight());
-	}
-	
+    }
+    
 }
diff --git a/tests/ImfTest/tests/src/com/android/imftest/samples/BottomEditTextActivityPanScanTests.java b/tests/ImfTest/tests/src/com/android/imftest/samples/BottomEditTextActivityPanScanTests.java
index 9a93133..c521905 100644
--- a/tests/ImfTest/tests/src/com/android/imftest/samples/BottomEditTextActivityPanScanTests.java
+++ b/tests/ImfTest/tests/src/com/android/imftest/samples/BottomEditTextActivityPanScanTests.java
@@ -24,14 +24,14 @@
 
 public class BottomEditTextActivityPanScanTests extends ImfBaseTestCase<BottomEditTextActivityPanScan> {
 
-	public final String TAG = "BottomEditTextActivityPanScanTests";
-	
+    public final String TAG = "BottomEditTextActivityPanScanTests";
+    
     public BottomEditTextActivityPanScanTests() {
         super(BottomEditTextActivityPanScan.class);
     }
-	
-	@LargeTest
-	public void testAppAdjustmentPanScan() {
+    
+    @LargeTest
+    public void testAppAdjustmentPanScan() {
         // Give the IME 2 seconds to appear.
         pause(2000);
         
@@ -44,6 +44,6 @@
         destructiveCheckImeInitialState(rootView, servedView);
         
         verifyEditTextAdjustment(servedView, rootView.getMeasuredHeight());
-	}
-	
+    }
+    
 }
diff --git a/tests/ImfTest/tests/src/com/android/imftest/samples/ButtonActivityTest.java b/tests/ImfTest/tests/src/com/android/imftest/samples/ButtonActivityTest.java
index ae900c3..f6f97b5 100644
--- a/tests/ImfTest/tests/src/com/android/imftest/samples/ButtonActivityTest.java
+++ b/tests/ImfTest/tests/src/com/android/imftest/samples/ButtonActivityTest.java
@@ -23,8 +23,8 @@
 
 public class ButtonActivityTest extends ImfBaseTestCase<ButtonActivity> {
 
-	final public String TAG = "ButtonActivityTest";
-	
+    final public String TAG = "ButtonActivityTest";
+    
     public ButtonActivityTest() {
         super(ButtonActivity.class);
     }
diff --git a/tests/ImfTest/tests/src/com/android/imftest/samples/OneEditTextActivityNotSelectedTests.java b/tests/ImfTest/tests/src/com/android/imftest/samples/OneEditTextActivityNotSelectedTests.java
index ed5b0c9..6147d3c 100644
--- a/tests/ImfTest/tests/src/com/android/imftest/samples/OneEditTextActivityNotSelectedTests.java
+++ b/tests/ImfTest/tests/src/com/android/imftest/samples/OneEditTextActivityNotSelectedTests.java
@@ -22,21 +22,21 @@
 
 public class OneEditTextActivityNotSelectedTests extends ImfBaseTestCase<OneEditTextActivityNotSelected> {
 
-	public final String TAG = "OneEditTextActivityNotSelectedTests";
-	
+    public final String TAG = "OneEditTextActivityNotSelectedTests";
+    
     public OneEditTextActivityNotSelectedTests() {
         super(OneEditTextActivityNotSelected.class);
     }
     
-	@LargeTest
-	public void testSoftKeyboardNoAutoPop() {
-	    
-	    // Give the IME 2 seconds to appear.
-	    pause(2000);
-	    
-	    assertFalse(mImm.isAcceptingText());
-	    
-	    View rootView = ((OneEditTextActivityNotSelected) mTargetActivity).getRootView();
+    @LargeTest
+    public void testSoftKeyboardNoAutoPop() {
+        
+        // Give the IME 2 seconds to appear.
+        pause(2000);
+        
+        assertFalse(mImm.isAcceptingText());
+        
+        View rootView = ((OneEditTextActivityNotSelected) mTargetActivity).getRootView();
         View servedView = ((OneEditTextActivityNotSelected) mTargetActivity).getDefaultFocusedView();
         
         assertNotNull(rootView);
@@ -45,6 +45,6 @@
         destructiveCheckImeInitialState(rootView, servedView);
         
         verifyEditTextAdjustment(servedView, rootView.getMeasuredHeight());
-	}
-	
+    }
+    
 }
diff --git a/tests/OneMedia/Android.mk b/tests/OneMedia/Android.mk
new file mode 100644
index 0000000..93b9c9a
--- /dev/null
+++ b/tests/OneMedia/Android.mk
@@ -0,0 +1,18 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files) \
+        $(call all-Iaidl-files-under, src)
+
+LOCAL_PACKAGE_NAME := OneMedia
+LOCAL_CERTIFICATE := platform
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+        android-support-v7-appcompat \
+        android-support-v7-mediarouter
+
+LOCAL_PROGUARD_ENABLED := disabled
+
+include $(BUILD_PACKAGE)
diff --git a/tests/OneMedia/AndroidManifest.xml b/tests/OneMedia/AndroidManifest.xml
new file mode 100644
index 0000000..504d471
--- /dev/null
+++ b/tests/OneMedia/AndroidManifest.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.onemedia"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk android:minSdkVersion="19"/>
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name="com.android.onemedia.OnePlayerActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <service
+            android:name="com.android.onemedia.OnePlayerService"
+            android:exported="false"
+            android:process="com.android.onemedia.service" />
+        <service
+            android:name=".provider.OneMediaRouteProvider"
+            android:permission="android.permission.BIND_ROUTE_PROVIDER"
+            android:exported="true"
+            android:process="com.android.onemedia.provider">
+            <intent-filter>
+                <action android:name="com.android.media.session.MediaRouteProvider" />
+            </intent-filter>
+          </service>
+    </application>
+
+</manifest>
diff --git a/tests/OneMedia/res/drawable-hdpi/ic_launcher.png b/tests/OneMedia/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..288b665
--- /dev/null
+++ b/tests/OneMedia/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/tests/OneMedia/res/drawable-mdpi/ic_launcher.png b/tests/OneMedia/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..6ae570b4
--- /dev/null
+++ b/tests/OneMedia/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/tests/OneMedia/res/drawable-xhdpi/ic_launcher.png b/tests/OneMedia/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..d4fb7cd
--- /dev/null
+++ b/tests/OneMedia/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/tests/OneMedia/res/drawable-xxhdpi/ic_launcher.png b/tests/OneMedia/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..85a6081
--- /dev/null
+++ b/tests/OneMedia/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/tests/OneMedia/res/layout/activity_main.xml b/tests/OneMedia/res/layout/activity_main.xml
new file mode 100644
index 0000000..168c9b8ce
--- /dev/null
+++ b/tests/OneMedia/res/layout/activity_main.xml
@@ -0,0 +1,16 @@
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:paddingBottom="@dimen/activity_vertical_margin"
+    android:paddingLeft="@dimen/activity_horizontal_margin"
+    android:paddingRight="@dimen/activity_horizontal_margin"
+    android:paddingTop="@dimen/activity_vertical_margin"
+    tools:context=".MainActivity" >
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/hello_world" />
+
+</RelativeLayout>
diff --git a/tests/OneMedia/res/layout/activity_one_player.xml b/tests/OneMedia/res/layout/activity_one_player.xml
new file mode 100644
index 0000000..516562f
--- /dev/null
+++ b/tests/OneMedia/res/layout/activity_one_player.xml
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright 2014 Google Inc. All Rights Reserved. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:gravity="center_horizontal"
+        android:orientation="vertical">
+    <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:text="@string/app_name"
+            style="@style/Title" />
+    <EditText
+            android:id="@+id/content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:inputType="textUri"
+            android:hint="@string/media_content_hint"
+            android:gravity="center"
+            android:textSize="24sp" />
+    <EditText
+            android:id="@+id/next_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:inputType="textNoSuggestions"
+            android:hint="@string/media_next_hint"
+            android:gravity="center"
+            android:textSize="24sp" />
+    <CheckBox
+            android:id="@+id/has_video"
+            android:layout_marginRight="8dip"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/has_video" />
+    <LinearLayout
+            android:id="@+id/controls"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal" >
+        <Button
+                android:id="@+id/start_button"
+                style="@style/BottomBarButton"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="@string/start_button" />
+        <Button
+                android:id="@+id/play_button"
+                style="@style/BottomBarButton"
+                android:layout_width="0dip"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:text="@string/play_button" />
+    </LinearLayout>
+    <Button
+            android:id="@+id/route_button"
+            style="@style/BottomBarButton"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="@string/route_button" />
+    <TextView
+            android:id="@+id/status"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content" />
+
+</LinearLayout>
diff --git a/tests/OneMedia/res/menu/main.xml b/tests/OneMedia/res/menu/main.xml
new file mode 100644
index 0000000..c002028
--- /dev/null
+++ b/tests/OneMedia/res/menu/main.xml
@@ -0,0 +1,9 @@
+<menu xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <item
+        android:id="@+id/action_settings"
+        android:orderInCategory="100"
+        android:showAsAction="never"
+        android:title="@string/action_settings"/>
+
+</menu>
diff --git a/tests/OneMedia/res/values/colors.xml b/tests/OneMedia/res/values/colors.xml
new file mode 100644
index 0000000..9b9dc2a
--- /dev/null
+++ b/tests/OneMedia/res/values/colors.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ * Copyright (C) 2014 Google Inc.
+ *
+ * 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.
+ */
+-->
+
+<resources>
+    <color name="title_color">#33B5E5</color>
+</resources>
diff --git a/tests/OneMedia/res/values/dimens.xml b/tests/OneMedia/res/values/dimens.xml
new file mode 100644
index 0000000..562edef
--- /dev/null
+++ b/tests/OneMedia/res/values/dimens.xml
@@ -0,0 +1,9 @@
+<resources>
+
+    <!-- Default screen margins, per the Android Design guidelines. -->
+    <dimen name="activity_horizontal_margin">16dp</dimen>
+    <dimen name="activity_vertical_margin">16dp</dimen>
+    <dimen name="title_size">22sp</dimen>
+    <dimen name="small_size">11sp</dimen>
+
+</resources>
diff --git a/tests/OneMedia/res/values/strings.xml b/tests/OneMedia/res/values/strings.xml
new file mode 100644
index 0000000..3735c8d
--- /dev/null
+++ b/tests/OneMedia/res/values/strings.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">OneMedia</string>
+    <string name="action_settings">Settings</string>
+    <string name="hello_world">Test app for trying out new media components</string>
+
+    <string name="start_button">Start</string>
+    <string name="play_button">Play</string>
+    <string name="route_button">Change route</string>
+    <string name="media_content_hint">Content</string>
+    <string name="media_next_hint">Next content</string>
+    <string name="has_video">Is video</string>
+    <string name="has_duration">Has duration</string>
+
+</resources>
diff --git a/tests/OneMedia/res/values/styles.xml b/tests/OneMedia/res/values/styles.xml
new file mode 100644
index 0000000..60f3139
--- /dev/null
+++ b/tests/OneMedia/res/values/styles.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!--
+        Base application theme, dependent on API level. This theme is replaced
+        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
+    -->
+    <style name="AppBaseTheme" parent="android:Theme.Light">
+        <!--
+            Theme customizations available in newer API levels can go in
+            res/values-vXX/styles.xml, while customizations related to
+            backward-compatibility can go here.
+        -->
+    </style>
+
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="AppBaseTheme">
+        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
+    </style>
+
+    <style name="Title">
+        <item name="android:textSize">@dimen/title_size</item>
+        <item name="android:textColor">@color/title_color</item>
+        <item name="android:clickable">false</item>
+        <item name="android:longClickable">false</item>
+    </style>
+
+    <style name="Text">
+        <item name="android:textSize">@dimen/small_size</item>
+        <item name="android:textColor">@color/title_color</item>
+        <item name="android:clickable">false</item>
+        <item name="android:longClickable">false</item>
+    </style>
+
+    <style name="BottomBarButton">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:paddingTop">0dip</item>
+        <item name="android:paddingLeft">0dip</item>
+        <item name="android:paddingRight">0dip</item>
+        <item name="android:paddingBottom">0dip</item>
+        <item name="android:textSize">12sp</item>
+        <item name="android:textStyle">bold</item>
+    </style>
+</resources>
diff --git a/tests/OneMedia/src/com/android/onemedia/IPlayerCallback.aidl b/tests/OneMedia/src/com/android/onemedia/IPlayerCallback.aidl
new file mode 100644
index 0000000..189fa6a
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/IPlayerCallback.aidl
@@ -0,0 +1,22 @@
+/* Copyright (C) 2014 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.android.onemedia;
+
+import android.media.session.SessionToken;
+
+interface IPlayerCallback {
+    void onSessionChanged(in SessionToken session);
+}
\ No newline at end of file
diff --git a/tests/OneMedia/src/com/android/onemedia/IPlayerService.aidl b/tests/OneMedia/src/com/android/onemedia/IPlayerService.aidl
new file mode 100644
index 0000000..15ea25f
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/IPlayerService.aidl
@@ -0,0 +1,29 @@
+/* Copyright (C) 2014 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.android.onemedia;
+
+import android.media.session.SessionToken;
+import android.os.Bundle;
+
+import com.android.onemedia.IPlayerCallback;
+import com.android.onemedia.playback.IRequestCallback;
+
+interface IPlayerService {
+    SessionToken getSessionToken();
+    void registerCallback(in IPlayerCallback cb);
+    void unregisterCallback(in IPlayerCallback cb);
+    void sendRequest(String action, in Bundle params, in IRequestCallback cb);
+}
\ No newline at end of file
diff --git a/tests/OneMedia/src/com/android/onemedia/OnePlayerActivity.java b/tests/OneMedia/src/com/android/onemedia/OnePlayerActivity.java
new file mode 100644
index 0000000..b9a6470
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/OnePlayerActivity.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia;
+
+
+import android.app.Activity;
+import android.media.session.MediaMetadata;
+import android.media.session.PlaybackState;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Menu;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.android.onemedia.playback.Renderer;
+
+public class OnePlayerActivity extends Activity {
+    private static final String TAG = "OnePlayerActivity";
+
+    protected PlayerController mPlayer;
+
+    private Button mStartButton;
+    private Button mPlayButton;
+    private Button mRouteButton;
+    private TextView mStatusView;
+
+    private EditText mContentText;
+    private EditText mNextContentText;
+    private CheckBox mHasVideo;
+
+    private int mPlaybackState;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_one_player);
+        mPlayer = new PlayerController(this, OnePlayerService.getServiceIntent(this));
+
+
+        mStartButton = (Button) findViewById(R.id.start_button);
+        mPlayButton = (Button) findViewById(R.id.play_button);
+        mRouteButton = (Button) findViewById(R.id.route_button);
+        mStatusView = (TextView) findViewById(R.id.status);
+        mContentText = (EditText) findViewById(R.id.content);
+        mNextContentText = (EditText) findViewById(R.id.next_content);
+        mHasVideo = (CheckBox) findViewById(R.id.has_video);
+
+        mStartButton.setOnClickListener(mButtonListener);
+        mPlayButton.setOnClickListener(mButtonListener);
+        mRouteButton.setOnClickListener(mButtonListener);
+
+    }
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        // Inflate the menu; this adds items to the action bar if it is present.
+        getMenuInflater().inflate(R.menu.main, menu);
+        return true;
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        mPlayer.onResume();
+        mPlayer.setListener(mListener);
+    }
+
+    @Override
+    public void onPause() {
+        mPlayer.setListener(null);
+        mPlayer.onPause();
+        super.onPause();
+    }
+
+    private void setControlsEnabled(boolean enabled) {
+        mStartButton.setEnabled(enabled);
+        mPlayButton.setEnabled(enabled);
+    }
+
+    private View.OnClickListener mButtonListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            switch (v.getId()) {
+                case R.id.play_button:
+                    Log.d(TAG, "Play button pressed, in state " + mPlaybackState);
+                    if (mPlaybackState == PlaybackState.PLAYSTATE_PAUSED
+                            || mPlaybackState == PlaybackState.PLAYSTATE_STOPPED) {
+                        mPlayer.play();
+                    } else if (mPlaybackState == PlaybackState.PLAYSTATE_PLAYING) {
+                        mPlayer.pause();
+                    }
+                    break;
+                case R.id.start_button:
+                    Log.d(TAG, "Start button pressed, in state " + mPlaybackState);
+                    mPlayer.setContent(mContentText.getText().toString());
+                    break;
+                case R.id.route_button:
+                    mPlayer.showRoutePicker();
+                    break;
+            }
+
+        }
+    };
+
+    private PlayerController.Listener mListener = new PlayerController.Listener() {
+        @Override
+        public void onPlaybackStateChange(PlaybackState state) {
+            mPlaybackState = state.getState();
+            boolean enablePlay = false;
+            boolean enableControls = true;
+            StringBuilder statusBuilder = new StringBuilder();
+            switch (mPlaybackState) {
+                case PlaybackState.PLAYSTATE_PLAYING:
+                    statusBuilder.append("playing");
+                    mPlayButton.setText("Pause");
+                    enablePlay = true;
+                    break;
+                case PlaybackState.PLAYSTATE_PAUSED:
+                    statusBuilder.append("paused");
+                    mPlayButton.setText("Play");
+                    enablePlay = true;
+                    break;
+                case PlaybackState.PLAYSTATE_STOPPED:
+                    statusBuilder.append("ended");
+                    mPlayButton.setText("Play");
+                    enablePlay = true;
+                    break;
+                case PlaybackState.PLAYSTATE_ERROR:
+                    statusBuilder.append("error: ").append(state.getErrorMessage());
+                    break;
+                case PlaybackState.PLAYSTATE_BUFFERING:
+                    statusBuilder.append("buffering");
+                    break;
+                case PlaybackState.PLAYSTATE_NONE:
+                    statusBuilder.append("none");
+                    break;
+                case PlaybackState.PLAYSTATE_CONNECTING:
+                    statusBuilder.append("connecting");
+                    enableControls = false;
+                    break;
+                default:
+                    statusBuilder.append(mPlaybackState);
+            }
+            statusBuilder.append(" -- At position: ").append(state.getPosition());
+            mStatusView.setText(statusBuilder.toString());
+            mPlayButton.setEnabled(enablePlay);
+            setControlsEnabled(enableControls);
+        }
+
+        @Override
+        public void onConnectionStateChange(int state) {
+            if (state == PlayerController.STATE_DISCONNECTED) {
+                setControlsEnabled(false);
+            } else if (state == PlayerController.STATE_CONNECTED) {
+                setControlsEnabled(true);
+            }
+        }
+
+        @Override
+        public void onMetadataChange(MediaMetadata metadata) {
+            Log.d(TAG, "Metadata update! Title: " + metadata);
+        }
+    };
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/OnePlayerService.java b/tests/OneMedia/src/com/android/onemedia/OnePlayerService.java
new file mode 100644
index 0000000..573f7ff
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/OnePlayerService.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia;
+
+import android.content.Context;
+import android.content.Intent;
+
+import java.util.ArrayList;
+
+public class OnePlayerService extends PlayerService {
+    private static final String TAG = "OnePlayerService";
+
+    public static Intent getServiceIntent(Context context) {
+        return new Intent(context, OnePlayerService.class).setPackage(
+                OnePlayerService.class.getPackage().getName());
+    }
+
+    @Override
+    protected Intent onCreateServiceIntent() {
+        return getServiceIntent(this);
+    }
+
+    @Override
+    protected ArrayList<String> getAllowedPackages() {
+        ArrayList<String> allowedPackages = new ArrayList<String>();
+        allowedPackages.add("com.android.onemedia");
+        return allowedPackages;
+    }
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/PlayerController.java b/tests/OneMedia/src/com/android/onemedia/PlayerController.java
new file mode 100644
index 0000000..e3f5c0c
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/PlayerController.java
@@ -0,0 +1,214 @@
+
+/*
+ * Copyright (C) 2014 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.android.onemedia;
+
+import android.media.session.SessionController;
+import android.media.session.MediaMetadata;
+import android.media.session.RouteInfo;
+import android.media.session.SessionManager;
+import android.media.session.PlaybackState;
+import android.media.session.TransportController;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.util.Log;
+
+import com.android.onemedia.playback.RequestUtils;
+
+public class PlayerController {
+    private static final String TAG = "PlayerController";
+
+    public static final int STATE_DISCONNECTED = 0;
+    public static final int STATE_CONNECTED = 1;
+
+    protected SessionController mController;
+    protected IPlayerService mBinder;
+    protected TransportController mTransportControls;
+
+    private final Intent mServiceIntent;
+    private Context mContext;
+    private Listener mListener;
+    private TransportListener mTransportListener = new TransportListener();
+    private SessionCallback mControllerCb;
+    private SessionManager mManager;
+    private Handler mHandler = new Handler();
+
+    private boolean mResumed;
+
+    public PlayerController(Context context, Intent serviceIntent) {
+        mContext = context;
+        if (serviceIntent == null) {
+            mServiceIntent = new Intent(mContext, PlayerService.class);
+        } else {
+            mServiceIntent = serviceIntent;
+        }
+        mControllerCb = new SessionCallback();
+        mManager = (SessionManager) context
+                .getSystemService(Context.MEDIA_SESSION_SERVICE);
+
+        mResumed = false;
+    }
+
+    public void setListener(Listener listener) {
+        mListener = listener;
+        Log.d(TAG, "Listener set to " + listener + " session is " + mController);
+        if (mListener != null) {
+            mHandler = new Handler();
+            mListener.onConnectionStateChange(
+                    mController == null ? STATE_DISCONNECTED : STATE_CONNECTED);
+        }
+    }
+
+    public void onResume() {
+        mResumed = true;
+        Log.d(TAG, "onResume. Binding to service with intent " + mServiceIntent.toString());
+        bindToService();
+    }
+
+    public void onPause() {
+        mResumed = false;
+        Log.d(TAG, "onPause, unbinding from service");
+        unbindFromService();
+    }
+
+    public void play() {
+        if (mTransportControls != null) {
+            mTransportControls.play();
+        }
+    }
+
+    public void pause() {
+        if (mTransportControls != null) {
+            mTransportControls.pause();
+        }
+    }
+
+    public void setContent(String source) {
+        RequestUtils.ContentBuilder bob = new RequestUtils.ContentBuilder();
+        bob.setSource(source);
+        try {
+            mBinder.sendRequest(RequestUtils.ACTION_SET_CONTENT, bob.build(), null);
+        } catch (RemoteException e) {
+            Log.d(TAG, "setContent failed, service may have died.", e);
+        }
+    }
+
+    public void setNextContent(String source) {
+        RequestUtils.ContentBuilder bob = new RequestUtils.ContentBuilder();
+        bob.setSource(source);
+        try {
+            mBinder.sendRequest(RequestUtils.ACTION_SET_NEXT_CONTENT, bob.build(), null);
+        } catch (RemoteException e) {
+            Log.d(TAG, "setNexctContent failed, service may have died.", e);
+        }
+    }
+
+    public void showRoutePicker() {
+        mController.showRoutePicker();
+    }
+
+    private void unbindFromService() {
+        mContext.unbindService(mServiceConnection);
+    }
+
+    private void bindToService() {
+        mContext.bindService(mServiceIntent, mServiceConnection, Context.BIND_AUTO_CREATE);
+    }
+
+    private ServiceConnection mServiceConnection = new ServiceConnection() {
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            if (mController != null) {
+                mController.removeCallback(mControllerCb);
+            }
+            mBinder = null;
+            mController = null;
+            mTransportControls = null;
+            Log.d(TAG, "Disconnected from PlayerService");
+
+            if (mListener != null) {
+                mListener.onConnectionStateChange(STATE_DISCONNECTED);
+            }
+        }
+
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            mBinder = IPlayerService.Stub.asInterface(service);
+            Log.d(TAG, "service is " + service + " binder is " + mBinder);
+            try {
+                mController = SessionController.fromToken(mBinder.getSessionToken());
+            } catch (RemoteException e) {
+                Log.e(TAG, "Error getting session", e);
+                return;
+            }
+            mController.addCallback(mControllerCb, mHandler);
+            mTransportControls = mController.getTransportController();
+            if (mTransportControls != null) {
+                mTransportControls.addStateListener(mTransportListener);
+            }
+            Log.d(TAG, "Ready to use PlayerService");
+
+            if (mListener != null) {
+                mListener.onConnectionStateChange(STATE_CONNECTED);
+                if (mTransportControls != null) {
+                    mListener.onPlaybackStateChange(mTransportControls.getPlaybackState());
+                }
+            }
+        }
+    };
+
+    private class SessionCallback extends SessionController.Callback {
+        @Override
+        public void onRouteChanged(RouteInfo route) {
+            // TODO
+        }
+    }
+
+    private class TransportListener extends TransportController.TransportStateListener {
+        @Override
+        public void onPlaybackStateChanged(PlaybackState state) {
+            if (state == null) {
+                return;
+            }
+            Log.d(TAG, "Received playback state change to state " + state.getState());
+            if (mListener != null) {
+                mListener.onPlaybackStateChange(state);
+            }
+        }
+
+        @Override
+        public void onMetadataChanged(MediaMetadata metadata) {
+            if (metadata == null) {
+                return;
+            }
+            Log.d(TAG, "Received metadata change, title is "
+                    + metadata.getString(MediaMetadata.METADATA_KEY_TITLE));
+        }
+    }
+
+    public interface Listener {
+        public void onPlaybackStateChange(PlaybackState state);
+        public void onMetadataChange(MediaMetadata metadata);
+        public void onConnectionStateChange(int state);
+    }
+
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/PlayerService.java b/tests/OneMedia/src/com/android/onemedia/PlayerService.java
new file mode 100644
index 0000000..8b53ddf
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/PlayerService.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia;
+
+import android.app.Service;
+import android.content.Intent;
+import android.media.session.SessionToken;
+import android.media.session.PlaybackState;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.os.RemoteException;
+import android.util.Log;
+
+import com.android.onemedia.playback.IRequestCallback;
+import com.android.onemedia.playback.RequestUtils;
+
+import java.util.ArrayList;
+
+public class PlayerService extends Service {
+    private static final String TAG = "PlayerService";
+
+    private PlayerBinder mBinder;
+    private PlayerSession mSession;
+    private Intent mIntent;
+    private boolean mStarted = false;
+
+    private ArrayList<IPlayerCallback> mCbs = new ArrayList<IPlayerCallback>();
+
+    @Override
+    public void onCreate() {
+        Log.d(TAG, "onCreate");
+        mIntent = onCreateServiceIntent();
+        if (mSession == null) {
+            mSession = onCreatePlayerController();
+            mSession.createSession();
+            mSession.setListener(mPlayerListener);
+        }
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (mBinder == null) {
+            mBinder = new PlayerBinder();
+        }
+        return mBinder;
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        Log.d(TAG, "onStartCommand");
+        return START_STICKY;
+    }
+
+    @Override
+    public void onDestroy() {
+        Log.d(TAG, "onDestroy");
+        mSession.onDestroy();
+        mSession = null;
+    }
+
+    public void onPlaybackStarted() {
+        if (!mStarted) {
+            Log.d(TAG, "Starting self");
+            startService(onCreateServiceIntent());
+            mStarted = true;
+        }
+    }
+
+    public void onPlaybackEnded() {
+        if (mStarted) {
+            Log.d(TAG, "Stopping self");
+            stopSelf();
+            mStarted = false;
+        }
+    }
+
+    protected Intent onCreateServiceIntent() {
+        return new Intent(this, PlayerService.class).setPackage(getBasePackageName());
+    }
+
+    protected PlayerSession onCreatePlayerController() {
+        return new PlayerSession(this);
+    }
+
+    protected ArrayList<String> getAllowedPackages() {
+        return null;
+    }
+
+    private final PlayerSession.Listener mPlayerListener = new PlayerSession.Listener() {
+        @Override
+        public void onPlayStateChanged(PlaybackState state) {
+            switch (state.getState()) {
+                case PlaybackState.PLAYSTATE_PLAYING:
+                    onPlaybackStarted();
+                    break;
+                case PlaybackState.PLAYSTATE_STOPPED:
+                case PlaybackState.PLAYSTATE_ERROR:
+                    onPlaybackEnded();
+                    break;
+            }
+        }
+    };
+
+    public class PlayerBinder extends IPlayerService.Stub {
+        @Override
+        public void sendRequest(String action, Bundle params, IRequestCallback cb) {
+            if (RequestUtils.ACTION_SET_CONTENT.equals(action)) {
+                mSession.setContent(params);
+            } else if (RequestUtils.ACTION_SET_NEXT_CONTENT.equals(action)) {
+                mSession.setNextContent(params);
+            }
+        }
+
+        @Override
+        public void registerCallback(final IPlayerCallback cb) throws RemoteException {
+            if (!mCbs.contains(cb)) {
+                mCbs.add(cb);
+                cb.asBinder().linkToDeath(new IBinder.DeathRecipient() {
+                    @Override
+                    public void binderDied() {
+                        mCbs.remove(cb);
+                    }
+                }, 0);
+            }
+            try {
+                cb.onSessionChanged(getSessionToken());
+            } catch (RemoteException e) {
+                mCbs.remove(cb);
+                throw e;
+            }
+        }
+
+        @Override
+        public void unregisterCallback(IPlayerCallback cb) throws RemoteException {
+            mCbs.remove(cb);
+        }
+
+        @Override
+        public SessionToken getSessionToken() throws RemoteException {
+            return mSession.getSessionToken();
+        }
+    }
+
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/PlayerSession.java b/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
new file mode 100644
index 0000000..2e029f0
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/PlayerSession.java
@@ -0,0 +1,280 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia;
+
+import android.content.Context;
+import android.content.Intent;
+import android.media.session.Route;
+import android.media.session.RouteInfo;
+import android.media.session.RouteOptions;
+import android.media.session.RoutePlaybackControls;
+import android.media.session.Session;
+import android.media.session.SessionManager;
+import android.media.session.SessionToken;
+import android.media.session.PlaybackState;
+import android.media.session.TransportPerformer;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import com.android.onemedia.playback.LocalRenderer;
+import com.android.onemedia.playback.OneMRPRenderer;
+import com.android.onemedia.playback.Renderer;
+import com.android.onemedia.playback.RequestUtils;
+
+import java.util.ArrayList;
+
+public class PlayerSession {
+    private static final String TAG = "PlayerSession";
+
+    protected Session mSession;
+    protected Context mContext;
+    protected Renderer mRenderer;
+    protected Session.Callback mCallback;
+    protected Renderer.Listener mRenderListener;
+    protected TransportPerformer mPerformer;
+
+    protected PlaybackState mPlaybackState;
+    protected Listener mListener;
+    protected ArrayList<RouteOptions> mRouteOptions;
+    protected Route mRoute;
+    protected RoutePlaybackControls mRouteControls;
+    protected RouteListener mRouteListener;
+
+    private String mContent;
+
+    public PlayerSession(Context context) {
+        mContext = context;
+        mRenderer = new LocalRenderer(context, null);
+        mCallback = new SessionCb();
+        mRenderListener = new RenderListener();
+        mPlaybackState = new PlaybackState();
+        mPlaybackState.setActions(PlaybackState.ACTION_PAUSE
+                | PlaybackState.ACTION_PLAY);
+
+        mRenderer.registerListener(mRenderListener);
+
+        // TODO need an easier way to build route options
+        mRouteOptions = new ArrayList<RouteOptions>();
+        RouteOptions.Builder bob = new RouteOptions.Builder();
+        bob.addInterface(RoutePlaybackControls.NAME);
+        mRouteOptions.add(bob.build());
+        mRouteListener = new RouteListener();
+    }
+
+    public void createSession() {
+        if (mSession != null) {
+            mSession.release();
+        }
+        SessionManager man = (SessionManager) mContext
+                .getSystemService(Context.MEDIA_SESSION_SERVICE);
+        Log.d(TAG, "Creating session for package " + mContext.getBasePackageName());
+        mSession = man.createSession("OneMedia");
+        mSession.addCallback(mCallback);
+        mPerformer = mSession.setTransportPerformerEnabled();
+        mPerformer.addListener(new TransportListener());
+        mPerformer.setPlaybackState(mPlaybackState);
+        mSession.setRouteOptions(mRouteOptions);
+        mSession.publish();
+    }
+
+    public void onDestroy() {
+        if (mSession != null) {
+            mSession.release();
+        }
+        if (mRenderer != null) {
+            mRenderer.unregisterListener(mRenderListener);
+            mRenderer.onDestroy();
+        }
+    }
+
+    public void setListener(Listener listener) {
+        mListener = listener;
+    }
+
+    public SessionToken getSessionToken() {
+        return mSession.getSessionToken();
+    }
+
+    public void setContent(Bundle request) {
+        mRenderer.setContent(request);
+        mContent = request.getString(RequestUtils.EXTRA_KEY_SOURCE);
+    }
+
+    public void setNextContent(Bundle request) {
+        mRenderer.setNextContent(request);
+    }
+
+    private void updateState(int newState) {
+        float rate = newState == PlaybackState.PLAYSTATE_PLAYING ? 1 : 0;
+        long position = mRenderer == null ? -1 : mRenderer.getSeekPosition();
+        mPlaybackState.setState(newState, position, rate);
+        mPerformer.setPlaybackState(mPlaybackState);
+    }
+
+    public interface Listener {
+        public void onPlayStateChanged(PlaybackState state);
+    }
+
+    private class RenderListener implements Renderer.Listener {
+
+        @Override
+        public void onError(int type, int extra, Bundle extras, Throwable error) {
+            Log.d(TAG, "Sending onError with type " + type + " and extra " + extra);
+            mPlaybackState.setState(PlaybackState.PLAYSTATE_ERROR, -1, 0);
+            if (error != null) {
+                mPlaybackState.setErrorMessage(error.getLocalizedMessage());
+            }
+            mPerformer.setPlaybackState(mPlaybackState);
+            if (mListener != null) {
+                mListener.onPlayStateChanged(mPlaybackState);
+            }
+        }
+
+        @Override
+        public void onStateChanged(int newState) {
+            if (newState != Renderer.STATE_ERROR) {
+                mPlaybackState.setErrorMessage(null);
+            }
+            long position = -1;
+            if (mRenderer != null) {
+                position = mRenderer.getSeekPosition();
+            }
+            switch (newState) {
+                case Renderer.STATE_ENDED:
+                case Renderer.STATE_STOPPED:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_STOPPED, position, 0);
+                    break;
+                case Renderer.STATE_INIT:
+                case Renderer.STATE_PREPARING:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_BUFFERING, position, 0);
+                    break;
+                case Renderer.STATE_ERROR:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_ERROR, position, 0);
+                    break;
+                case Renderer.STATE_PAUSED:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_PAUSED, position, 0);
+                    break;
+                case Renderer.STATE_PLAYING:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_PLAYING, position, 1);
+                    break;
+                default:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_ERROR, position, 0);
+                    mPlaybackState.setErrorMessage("unkown state");
+                    break;
+            }
+            mPerformer.setPlaybackState(mPlaybackState);
+            if (mListener != null) {
+                mListener.onPlayStateChanged(mPlaybackState);
+            }
+        }
+
+        @Override
+        public void onBufferingUpdate(int percent) {
+        }
+
+        @Override
+        public void onFocusLost() {
+            Log.d(TAG, "Focus lost, changing state to " + Renderer.STATE_PAUSED);
+            long position = mRenderer == null ? -1 : mRenderer.getSeekPosition();
+            mPlaybackState.setState(PlaybackState.PLAYSTATE_PAUSED, position, 0);
+            mPerformer.setPlaybackState(mPlaybackState);
+            if (mListener != null) {
+                mListener.onPlayStateChanged(mPlaybackState);
+            }
+        }
+
+        @Override
+        public void onNextStarted() {
+        }
+
+    }
+
+    private class SessionCb extends Session.Callback {
+        @Override
+        public void onMediaButton(Intent mediaRequestIntent) {
+            if (Intent.ACTION_MEDIA_BUTTON.equals(mediaRequestIntent.getAction())) {
+                KeyEvent event = (KeyEvent) mediaRequestIntent
+                        .getParcelableExtra(Intent.EXTRA_KEY_EVENT);
+                switch (event.getKeyCode()) {
+                    case KeyEvent.KEYCODE_MEDIA_PLAY:
+                        Log.d(TAG, "play button received");
+                        mRenderer.onPlay();
+                        break;
+                    case KeyEvent.KEYCODE_MEDIA_PAUSE:
+                        Log.d(TAG, "pause button received");
+                        mRenderer.onPause();
+                        break;
+                }
+            }
+        }
+
+        @Override
+        public void onRequestRouteChange(RouteInfo route) {
+            if (mRenderer != null) {
+                mRenderer.onStop();
+            }
+            if (route == null) {
+                // Use local route
+                mRoute = null;
+                mRenderer = new LocalRenderer(mContext, null);
+                mRenderer.registerListener(mRenderListener);
+                updateState(PlaybackState.PLAYSTATE_NONE);
+            } else {
+                // Use remote route
+                mSession.connect(route, mRouteOptions.get(0));
+                mRenderer = null;
+                updateState(PlaybackState.PLAYSTATE_CONNECTING);
+            }
+        }
+
+        @Override
+        public void onRouteConnected(Route route) {
+            mRoute = route;
+            mRouteControls = RoutePlaybackControls.from(route);
+            mRouteControls.addListener(mRouteListener);
+            Log.d(TAG, "Connected to route, registering listener");
+            mRenderer = new OneMRPRenderer(mRouteControls);
+            updateState(PlaybackState.PLAYSTATE_NONE);
+        }
+
+        @Override
+        public void onRouteDisconnected(Route route, int reason) {
+
+        }
+    }
+
+    private class TransportListener extends TransportPerformer.Listener {
+        @Override
+        public void onPlay() {
+            mRenderer.onPlay();
+        }
+
+        @Override
+        public void onPause() {
+            mRenderer.onPause();
+        }
+    }
+
+    private class RouteListener extends RoutePlaybackControls.Listener {
+        @Override
+        public void onPlaybackStateChange(int state) {
+            Log.d(TAG, "Updating state to " + state);
+            updateState(state);
+        }
+    }
+
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/IRequestCallback.aidl b/tests/OneMedia/src/com/android/onemedia/playback/IRequestCallback.aidl
new file mode 100644
index 0000000..c5a30a8
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/playback/IRequestCallback.aidl
@@ -0,0 +1,22 @@
+/* Copyright (C) 2014 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.android.onemedia.playback;
+
+import android.os.Bundle;
+
+oneway interface IRequestCallback {
+    void onResult(in Bundle result);
+}
\ No newline at end of file
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/LocalRenderer.java b/tests/OneMedia/src/com/android/onemedia/playback/LocalRenderer.java
new file mode 100644
index 0000000..c8a8d6c
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/playback/LocalRenderer.java
@@ -0,0 +1,721 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia.playback;
+
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.methods.HttpGet;
+
+import android.content.Context;
+import android.media.AudioManager;
+import android.media.AudioManager.OnAudioFocusChangeListener;
+import android.media.MediaPlayer;
+import android.media.MediaPlayer.OnBufferingUpdateListener;
+import android.media.MediaPlayer.OnCompletionListener;
+import android.media.MediaPlayer.OnErrorListener;
+import android.media.MediaPlayer.OnPreparedListener;
+import android.net.Uri;
+import android.net.http.AndroidHttpClient;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+import android.view.SurfaceHolder;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * Helper class for wrapping a MediaPlayer and doing a lot of the default work
+ * to play audio. This class is not currently thread safe and all calls to it
+ * should be made on the same thread.
+ */
+public class LocalRenderer extends Renderer implements OnPreparedListener,
+        OnBufferingUpdateListener, OnCompletionListener, OnErrorListener,
+        OnAudioFocusChangeListener {
+    private static final String TAG = "MediaPlayerManager";
+    private static final boolean DEBUG = true;
+    private static long sDebugInstanceId = 0;
+
+    private static final String[] SUPPORTED_FEATURES = {
+            FEATURE_SET_CONTENT,
+            FEATURE_SET_NEXT_CONTENT,
+            FEATURE_PLAY,
+            FEATURE_PAUSE,
+            FEATURE_NEXT,
+            FEATURE_PREVIOUS,
+            FEATURE_SEEK_TO,
+            FEATURE_STOP
+    };
+
+    /**
+     * These are the states where it is valid to call play directly on the
+     * MediaPlayer.
+     */
+    private static final int CAN_PLAY = STATE_READY | STATE_PAUSED | STATE_ENDED;
+    /**
+     * These are the states where we expect the MediaPlayer to be ready in the
+     * future, so we can set a flag to start playing when it is.
+     */
+    private static final int CAN_READY_PLAY = STATE_INIT | STATE_PREPARING;
+    /**
+     * The states when it is valid to call pause on the MediaPlayer.
+     */
+    private static final int CAN_PAUSE = STATE_PLAYING;
+    /**
+     * The states where it is valid to call seek on the MediaPlayer.
+     */
+    private static final int CAN_SEEK = STATE_READY | STATE_PLAYING | STATE_PAUSED | STATE_ENDED;
+    /**
+     * The states where we expect the MediaPlayer to be ready in the future and
+     * can store a seek position to set later.
+     */
+    private static final int CAN_READY_SEEK = STATE_INIT | STATE_PREPARING;
+    /**
+     * The states where it is valid to call stop on the MediaPlayer.
+     */
+    private static final int CAN_STOP = STATE_READY | STATE_PLAYING | STATE_PAUSED | STATE_ENDED;
+    /**
+     * The states where it is valid to get the current play position and the
+     * duration from the MediaPlayer.
+     */
+    private static final int CAN_GET_POSITION = STATE_READY | STATE_PLAYING | STATE_PAUSED;
+
+
+
+    private class PlayerContent {
+        public final String source;
+        public final Map<String, String> headers;
+
+        public PlayerContent(String source, Map<String, String> headers) {
+            this.source = source;
+            this.headers = headers;
+        }
+    }
+
+    private class AsyncErrorRetriever extends AsyncTask<HttpGet, Void, Void> {
+        private final long errorId;
+        private boolean closeHttpClient;
+
+        public AsyncErrorRetriever(long errorId) {
+            this.errorId = errorId;
+            closeHttpClient = false;
+        }
+
+        public boolean cancelRequestLocked(boolean closeHttp) {
+            closeHttpClient = closeHttp;
+            return this.cancel(false);
+        }
+
+        @Override
+        protected Void doInBackground(HttpGet[] params) {
+            synchronized (mErrorLock) {
+                if (isCancelled() || mHttpClient == null) {
+                    if (mErrorRetriever == this) {
+                        mErrorRetriever = null;
+                    }
+                    return null;
+                }
+                mSafeToCloseClient = false;
+            }
+            final PlaybackError error = new PlaybackError();
+            try {
+                HttpResponse response = mHttpClient.execute(params[0]);
+                synchronized (mErrorLock) {
+                    if (mErrorId != errorId || mError == null) {
+                        // A new error has occurred, abort
+                        return null;
+                    }
+                    error.type = mError.type;
+                    error.extra = mError.extra;
+                    error.errorMessage = mError.errorMessage;
+                }
+                final int code = response.getStatusLine().getStatusCode();
+                if (code >= 300) {
+                    error.extra = code;
+                }
+                final Bundle errorExtras = new Bundle();
+                Header[] headers = response.getAllHeaders();
+                if (headers != null && headers.length > 0) {
+                    for (Header header : headers) {
+                        errorExtras.putString(header.getName(), header.getValue());
+                    }
+                    error.errorExtras = errorExtras;
+                }
+            } catch (IOException e) {
+                Log.e(TAG, "IOException requesting from server, unable to get more exact error");
+            } finally {
+                synchronized (mErrorLock) {
+                    mSafeToCloseClient = true;
+                    if (mErrorRetriever == this) {
+                        mErrorRetriever = null;
+                    }
+                    if (isCancelled()) {
+                        if (closeHttpClient) {
+                            mHttpClient.close();
+                            mHttpClient = null;
+                        }
+                        return null;
+                    }
+                }
+            }
+            mHandler.post(new Runnable() {
+                    @Override
+                public void run() {
+                    synchronized (mErrorLock) {
+                        if (mErrorId == errorId) {
+                            setError(error.type, error.extra, error.errorExtras, null);
+                        }
+                    }
+                }
+            });
+            return null;
+        }
+    }
+
+    private int mState = STATE_INIT;
+
+    private AudioManager mAudioManager;
+    private MediaPlayer mPlayer;
+    private PlayerContent mContent;
+    private MediaPlayer mNextPlayer;
+    private PlayerContent mNextContent;
+    private SurfaceHolder mHolder;
+    private SurfaceHolder.Callback mHolderCB;
+    private Context mContext;
+
+    private Handler mHandler = new Handler();
+
+    private AndroidHttpClient mHttpClient = AndroidHttpClient.newInstance("TUQ");
+    // The ongoing error request thread if there is one. This should only be
+    // modified while mErrorLock is held.
+    private AsyncErrorRetriever mErrorRetriever;
+    // This is set to false while a server request is being made to retrieve
+    // the current error. It should only be set while mErrorLock is held.
+    private boolean mSafeToCloseClient = true;
+    private final Object mErrorLock = new Object();
+    // A tracking id for the current error. This should only be modified while
+    // mErrorLock is held.
+    private long mErrorId = 0;
+    // The current error state of this player. This is cleared when the state
+    // leaves an error state and set when it enters one. This should only be
+    // modified when mErrorLock is held.
+    private PlaybackError mError;
+
+    private boolean mPlayOnReady;
+    private int mSeekOnReady;
+    private boolean mHasAudioFocus;
+    private long mDebugId = sDebugInstanceId++;
+
+    public LocalRenderer(Context context, Bundle params) {
+        super(context, params);
+        mContext = context;
+        mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
+    }
+
+    @Override
+    protected void initFeatures(Bundle params) {
+        for (String feature : SUPPORTED_FEATURES) {
+            mFeatures.add(feature);
+        }
+    }
+
+    /**
+     * Call this when completely finished with the MediaPlayerManager to have it
+     * clean up. The instance may not be used again after this is called.
+     */
+    @Override
+    public void onDestroy() {
+        synchronized (mErrorLock) {
+            if (DEBUG) {
+                Log.d(TAG, "onDestroy, error retriever? " + mErrorRetriever + " safe to close? "
+                        + mSafeToCloseClient + " client? " + mHttpClient);
+            }
+            if (mErrorRetriever != null) {
+                mErrorRetriever.cancelRequestLocked(true);
+                mErrorRetriever = null;
+            }
+            // Increment the error id to ensure no errors are sent after this
+            // point.
+            mErrorId++;
+            if (mSafeToCloseClient) {
+                mHttpClient.close();
+                mHttpClient = null;
+            }
+        }
+    }
+
+    @Override
+    public void onPrepared(MediaPlayer player) {
+        if (!isCurrentPlayer(player)) {
+            return;
+        }
+        setState(STATE_READY);
+        if (DEBUG) {
+            Log.d(TAG, mDebugId + ": Finished preparing, seekOnReady is " + mSeekOnReady);
+        }
+        if (mSeekOnReady >= 0) {
+            onSeekTo(mSeekOnReady);
+            mSeekOnReady = -1;
+        }
+        if (mPlayOnReady) {
+            player.start();
+            setState(STATE_PLAYING);
+        }
+    }
+
+    @Override
+    public void onBufferingUpdate(MediaPlayer player, int percent) {
+        if (!isCurrentPlayer(player)) {
+            return;
+        }
+        pushOnBufferingUpdate(percent);
+    }
+
+    @Override
+    public void onCompletion(MediaPlayer player) {
+        if (!isCurrentPlayer(player)) {
+            return;
+        }
+        if (DEBUG) {
+            Log.d(TAG, mDebugId + ": Completed item. Have next item? " + (mNextPlayer != null));
+        }
+        if (mNextPlayer != null) {
+            if (mPlayer != null) {
+                mPlayer.release();
+            }
+            mPlayer = mNextPlayer;
+            mContent = mNextContent;
+            mNextPlayer = null;
+            mNextContent = null;
+            pushOnNextStarted();
+            return;
+        }
+        setState(STATE_ENDED);
+    }
+
+    @Override
+    public boolean onError(MediaPlayer player, int what, int extra) {
+        if (!isCurrentPlayer(player)) {
+            return false;
+        }
+        if (DEBUG) {
+            Log.d(TAG, mDebugId + ": Entered error state, what: " + what + " extra: " + extra);
+        }
+        synchronized (mErrorLock) {
+            ++mErrorId;
+            mError = new PlaybackError();
+            mError.type = what;
+            mError.extra = extra;
+        }
+
+        if (what == MediaPlayer.MEDIA_ERROR_UNKNOWN && extra == MediaPlayer.MEDIA_ERROR_IO
+                && mContent != null && mContent.source.startsWith("http")) {
+            HttpGet request = new HttpGet(mContent.source);
+            if (mContent.headers != null) {
+                for (String key : mContent.headers.keySet()) {
+                    request.addHeader(key, mContent.headers.get(key));
+                }
+            }
+            synchronized (mErrorLock) {
+                if (mErrorRetriever != null) {
+                    mErrorRetriever.cancelRequestLocked(false);
+                }
+                mErrorRetriever = new AsyncErrorRetriever(mErrorId);
+                mErrorRetriever.execute(request);
+            }
+        } else {
+            setError(what, extra, null, null);
+        }
+        return true;
+    }
+
+    @Override
+    public void onAudioFocusChange(int focusChange) {
+        // TODO figure out appropriate logic for handling focus loss at the TUQ
+        // level.
+        switch (focusChange) {
+            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
+            case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
+                if (mState == STATE_PLAYING) {
+                    onPause();
+                    mPlayOnReady = true;
+                }
+                mHasAudioFocus = false;
+                break;
+            case AudioManager.AUDIOFOCUS_LOSS:
+                if (mState == STATE_PLAYING) {
+                    onPause();
+                    mPlayOnReady = false;
+                }
+                pushOnFocusLost();
+                mHasAudioFocus = false;
+                break;
+            case AudioManager.AUDIOFOCUS_GAIN:
+                mHasAudioFocus = true;
+                if (mPlayOnReady) {
+                    onPlay();
+                }
+                break;
+            default:
+                Log.d(TAG, "Unknown focus change event " + focusChange);
+                break;
+        }
+    }
+
+    @Override
+    public void setContent(Bundle request) {
+        setContent(request, null);
+    }
+
+    /**
+     * Prepares the player for the given playback request. If the holder is null
+     * it is assumed this is an audio only source. If playOnReady is set to true
+     * the media will begin playing as soon as it can.
+     *
+     * @see RequestUtils for the set of valid keys.
+     */
+    public void setContent(Bundle request, SurfaceHolder holder) {
+        String source = request.getString(RequestUtils.EXTRA_KEY_SOURCE);
+        Map<String, String> headers = null; // request.mHeaders;
+        boolean playOnReady = true; // request.mPlayOnReady;
+        if (DEBUG) {
+            Log.d(TAG, mDebugId + ": Settings new content. Have a player? " + (mPlayer != null)
+                    + " have a next player? " + (mNextPlayer != null));
+        }
+        cleanUpPlayer();
+        setState(STATE_PREPARING);
+        mPlayOnReady = playOnReady;
+        mSeekOnReady = -1;
+        final MediaPlayer newPlayer = new MediaPlayer();
+
+        requestAudioFocus();
+
+        mPlayer = newPlayer;
+        mContent = new PlayerContent(source, headers);
+        try {
+            if (headers != null) {
+                Uri sourceUri = Uri.parse(source);
+                newPlayer.setDataSource(mContext, sourceUri, headers);
+            } else {
+                newPlayer.setDataSource(source);
+            }
+        } catch (Exception e) {
+            setError(Listener.ERROR_LOAD_FAILED, 0, null, e);
+            return;
+        }
+        if (isHolderReady(holder, newPlayer)) {
+            preparePlayer(newPlayer, true);
+        }
+    }
+
+    @Override
+    public void setNextContent(Bundle request) {
+        String source = request.getString(RequestUtils.EXTRA_KEY_SOURCE);
+        Map<String, String> headers = null; // request.mHeaders;
+
+        // TODO support video
+
+        if (DEBUG) {
+            Log.d(TAG, mDebugId + ": Setting next content. Have player? " + (mPlayer != null)
+                    + " have next player? " + (mNextPlayer != null));
+        }
+
+        if (mPlayer == null) {
+            // The manager isn't being used to play anything, don't try to
+            // set a next.
+            return;
+        }
+        if (mNextPlayer != null) {
+            // Before setting up the new one clear out the old one and release
+            // it to ensure it doesn't play.
+            mPlayer.setNextMediaPlayer(null);
+            mNextPlayer.release();
+            mNextPlayer = null;
+            mNextContent = null;
+        }
+        if (source == null) {
+            // If there's no new content we're done
+            return;
+        }
+        final MediaPlayer newPlayer = new MediaPlayer();
+
+        try {
+            if (headers != null) {
+                Uri sourceUri = Uri.parse(source);
+                newPlayer.setDataSource(mContext, sourceUri, headers);
+            } else {
+                newPlayer.setDataSource(source);
+            }
+        } catch (Exception e) {
+            newPlayer.release();
+            // Don't return an error until we get to this item in playback
+            return;
+        }
+
+        if (preparePlayer(newPlayer, false)) {
+            mPlayer.setNextMediaPlayer(newPlayer);
+            mNextPlayer = newPlayer;
+            mNextContent = new PlayerContent(source, headers);
+        }
+    }
+
+    private void requestAudioFocus() {
+        int result = mAudioManager.requestAudioFocus(this, AudioManager.STREAM_MUSIC,
+                AudioManager.AUDIOFOCUS_GAIN);
+        mHasAudioFocus = result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
+    }
+
+    /**
+     * Start the player if possible or queue it to play when ready. If the
+     * player is in a state where it will never be ready returns false.
+     *
+     * @return true if the content was started or will be started later
+     */
+    @Override
+    public boolean onPlay() {
+        MediaPlayer player = mPlayer;
+        if (player != null && mState == STATE_PLAYING) {
+            // already playing, just return
+            return true;
+        }
+        if (!mHasAudioFocus) {
+            requestAudioFocus();
+        }
+        if (player != null && canPlay()) {
+            player.start();
+            setState(STATE_PLAYING);
+        } else if (canReadyPlay()) {
+            mPlayOnReady = true;
+        } else if (!isPlaying()) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Pause the player if possible or set it to not play when ready. If the
+     * player is in a state where it will never be ready returns false.
+     *
+     * @return true if the content was paused or will wait to play when ready
+     *         later
+     */
+    @Override
+    public boolean onPause() {
+        MediaPlayer player = mPlayer;
+        // If the user paused us make sure we won't start playing again until
+        // asked to
+        mPlayOnReady = false;
+        if (player != null && (mState & CAN_PAUSE) != 0) {
+            player.pause();
+            setState(STATE_PAUSED);
+        } else if (!isPaused()) {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Seek to a given position in the media. If the seek succeeded or will be
+     * performed when loading is complete returns true. If the position is not
+     * in range or the player will never be ready returns false.
+     *
+     * @param position The position to seek to in milliseconds
+     * @return true if playback was moved or will be moved when ready
+     */
+    @Override
+    public boolean onSeekTo(int position) {
+        MediaPlayer player = mPlayer;
+        if (player != null && (mState & CAN_SEEK) != 0) {
+            if (position < 0 || position >= getDuration()) {
+                return false;
+            } else {
+                if (mState == STATE_ENDED) {
+                    player.start();
+                    player.pause();
+                    setState(STATE_PAUSED);
+                }
+                player.seekTo(position);
+            }
+        } else if ((mState & CAN_READY_SEEK) != 0) {
+            mSeekOnReady = position;
+        } else {
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Stop the player. It cannot be used again until
+     * {@link #setContent(String, boolean)} is called.
+     *
+     * @return true if stopping the player succeeded
+     */
+    @Override
+    public boolean onStop() {
+        cleanUpPlayer();
+        setState(STATE_STOPPED);
+        return true;
+    }
+
+    public boolean isPlaying() {
+        return mState == STATE_PLAYING;
+    }
+
+    public boolean isPaused() {
+        return mState == STATE_PAUSED;
+    }
+
+    @Override
+    public long getSeekPosition() {
+        return ((mState & CAN_GET_POSITION) == 0) ? -1 : mPlayer.getCurrentPosition();
+    }
+
+    @Override
+    public long getDuration() {
+        return ((mState & CAN_GET_POSITION) == 0) ? -1 : mPlayer.getDuration();
+    }
+
+    private boolean canPlay() {
+        return ((mState & CAN_PLAY) != 0) && mHasAudioFocus;
+    }
+
+    private boolean canReadyPlay() {
+        return (mState & CAN_PLAY) != 0 || (mState & CAN_READY_PLAY) != 0;
+    }
+
+    /**
+     * Sends a state update if the listener exists
+     */
+    private void setState(int state) {
+        if (state == mState) {
+            return;
+        }
+        Log.d(TAG, "Entering state " + state + " from state " + mState);
+        mState = state;
+        if (state != STATE_ERROR) {
+            // Don't notify error here, it'll get sent via onError
+            pushOnStateChanged(state);
+        }
+    }
+
+    private boolean preparePlayer(final MediaPlayer player, boolean current) {
+        player.setOnPreparedListener(this);
+        player.setOnBufferingUpdateListener(this);
+        player.setOnCompletionListener(this);
+        player.setOnErrorListener(this);
+        try {
+            player.prepareAsync();
+            if (current) {
+                setState(STATE_PREPARING);
+            }
+        } catch (IllegalStateException e) {
+            if (current) {
+                setError(Listener.ERROR_PREPARE_ERROR, 0, null, e);
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * @param extra
+     * @param e
+     */
+    private void setError(int type, int extra, Bundle extras, Exception e) {
+        setState(STATE_ERROR);
+        pushOnError(type, extra, extras, e);
+        cleanUpPlayer();
+        return;
+    }
+
+    /**
+     * Checks if the holder is ready and either sets up a callback to wait for
+     * it or sets it directly. If
+     *
+     * @param holder
+     * @param player
+     * @return
+     */
+    private boolean isHolderReady(final SurfaceHolder holder, final MediaPlayer player) {
+        mHolder = holder;
+        if (holder != null) {
+            if (holder.getSurface() != null && holder.getSurface().isValid()) {
+                player.setDisplay(holder);
+                return true;
+            } else {
+                Log.w(TAG, "Holder not null, waiting for it to be ready");
+                // If the holder isn't ready yet add a callback to set the
+                // holder when it's ready.
+                SurfaceHolder.Callback cb = new SurfaceHolder.Callback() {
+                        @Override
+                    public void surfaceDestroyed(SurfaceHolder arg0) {
+                    }
+
+                        @Override
+                    public void surfaceCreated(SurfaceHolder arg0) {
+                        if (player.equals(mPlayer)) {
+                            player.setDisplay(arg0);
+                            preparePlayer(player, true);
+                        }
+                    }
+
+                        @Override
+                    public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
+                    }
+                };
+                mHolderCB = cb;
+                holder.addCallback(cb);
+                return false;
+            }
+        }
+        return true;
+    }
+
+    private void cleanUpPlayer() {
+        if (DEBUG) {
+            Log.d(TAG, mDebugId + ": Cleaning up current player");
+        }
+        synchronized (mErrorLock) {
+            mError = null;
+            if (mErrorRetriever != null) {
+                mErrorRetriever.cancelRequestLocked(false);
+                // Don't set to null as we may need to cancel again with true if
+                // the object gets destroyed.
+            }
+        }
+        mAudioManager.abandonAudioFocus(this);
+
+        SurfaceHolder.Callback cb = mHolderCB;
+        mHolderCB = null;
+        SurfaceHolder holder = mHolder;
+        mHolder = null;
+        if (holder != null && cb != null) {
+            holder.removeCallback(cb);
+        }
+
+        MediaPlayer player = mPlayer;
+        mPlayer = null;
+        if (player != null) {
+            player.reset();
+            player.release();
+        }
+    }
+
+    private boolean isCurrentPlayer(MediaPlayer player) {
+        return player.equals(mPlayer);
+    }
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/MediaItem.java b/tests/OneMedia/src/com/android/onemedia/playback/MediaItem.java
new file mode 100644
index 0000000..05516d2
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/playback/MediaItem.java
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia.playback;
+
+import android.os.Bundle;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.v7.media.MediaItemMetadata;
+
+/**
+ * TODO: Insert description here. (generated by epastern)
+ */
+public class MediaItem implements Parcelable {
+    private Bundle mBundle;
+
+    public MediaItem() {
+
+    }
+
+    private MediaItem(Parcel in) {
+        mBundle = in.readBundle();
+    }
+
+    public String getTitle() {
+        return mBundle.getString(MediaItemMetadata.KEY_TITLE);
+    }
+
+    public String getArtist() {
+        return mBundle.getString(MediaItemMetadata.KEY_ALBUM_ARTIST);
+    }
+
+    /* (non-Javadoc)
+     * @see android.os.Parcelable#describeContents()
+     */
+    @Override
+    public int describeContents() {
+        // TODO(epastern): Auto-generated method stub
+        return 0;
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see android.os.Parcelable#writeToParcel(android.os.Parcel, int)
+     */
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeBundle(mBundle);
+    }
+
+    public static final Parcelable.Creator<MediaItem> CREATOR
+            = new Parcelable.Creator<MediaItem>() {
+                public MediaItem createFromParcel(Parcel in) {
+                    return new MediaItem(in);
+                }
+
+                public MediaItem[] newArray(int size) {
+                    return new MediaItem[size];
+                }
+            };
+
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/OneMRPRenderer.java b/tests/OneMedia/src/com/android/onemedia/playback/OneMRPRenderer.java
new file mode 100644
index 0000000..9b0a2b2
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/playback/OneMRPRenderer.java
@@ -0,0 +1,44 @@
+package com.android.onemedia.playback;
+
+import android.media.session.RoutePlaybackControls;
+import android.os.Bundle;
+
+/**
+ * Renderer for communicating with the OneMRP route
+ */
+public class OneMRPRenderer extends Renderer {
+    private final RoutePlaybackControls mControls;
+
+    public OneMRPRenderer(RoutePlaybackControls controls) {
+        super(null, null);
+        mControls = controls;
+    }
+
+    @Override
+    public void setContent(Bundle request) {
+        mControls.playNow(request.getString(RequestUtils.EXTRA_KEY_SOURCE));
+    }
+
+    @Override
+    public boolean onStop() {
+        mControls.pause();
+        return true;
+    }
+
+    @Override
+    public boolean onPlay() {
+        mControls.resume();
+        return true;
+    }
+
+    @Override
+    public boolean onPause() {
+        mControls.pause();
+        return true;
+    }
+
+    @Override
+    public long getSeekPosition() {
+        return -1;
+    }
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/PlaybackError.java b/tests/OneMedia/src/com/android/onemedia/playback/PlaybackError.java
new file mode 100644
index 0000000..ac9da23
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/playback/PlaybackError.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia.playback;
+
+import android.os.Bundle;
+
+public class PlaybackError {
+    public int type;
+    public int extra;
+    public String errorMessage;
+    public Bundle errorExtras;
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/Renderer.java b/tests/OneMedia/src/com/android/onemedia/playback/Renderer.java
new file mode 100644
index 0000000..09debcf
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/playback/Renderer.java
@@ -0,0 +1,229 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia.playback;
+
+import android.content.Context;
+import android.media.MediaPlayer;
+import android.os.Bundle;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * TODO: Insert description here. (generated by epastern)
+ */
+public abstract class Renderer {
+    public static final String FEATURE_SET_CONTENT = "com.android.media.SET_CONTENT";
+    public static final String FEATURE_SET_NEXT_CONTENT = "com.android.media.SET_NEXT_CONTENT";
+    public static final String FEATURE_PLAY = "com.android.media.PLAY";
+    public static final String FEATURE_PAUSE = "com.android.media.PAUSE";
+    public static final String FEATURE_NEXT = "com.android.media.NEXT";
+    public static final String FEATURE_PREVIOUS = "com.android.media.PREVIOUS";
+    public static final String FEATURE_SEEK_TO = "com.android.media.SEEK_TO";
+    public static final String FEATURE_STOP = "com.android.media.STOP";
+    // TODO move states somewhere else
+    public static final int STATE_ERROR = 0;
+    /**
+     * The state MediaPlayerManager starts in before any action has been
+     * performed.
+     */
+    public static final int STATE_INIT = 1 << 0;
+    /**
+     * Indicates the source has been set and it is being prepared/buffered
+     * before starting playback.
+     */
+    public static final int STATE_PREPARING = 1 << 1;
+    /**
+     * The media is ready and playback can be started.
+     */
+    public static final int STATE_READY = 1 << 2;
+    /**
+     * The media is currently playing.
+     */
+    public static final int STATE_PLAYING = 1 << 3;
+    /**
+     * The media is currently paused.
+     */
+    public static final int STATE_PAUSED = 1 << 4;
+    /**
+     * The service has been stopped and cannot be started again until a new
+     * source has been set.
+     */
+    public static final int STATE_STOPPED = 1 << 5;
+    /**
+     * The playback has reached the end. It can be restarted by calling play().
+     */
+    public static final int STATE_ENDED = 1 << 6;
+
+    // TODO decide on proper way of describing features
+    protected List<String> mFeatures = new ArrayList<String>();
+    protected List<Listener> mListeners = new ArrayList<Listener>();
+
+    public Renderer(Context context, Bundle params) {
+        onCreate(params);
+        initFeatures(params);
+    }
+
+    abstract public void setContent(Bundle request);
+
+    public void onCreate(Bundle params) {
+        // Do nothing by default
+    }
+
+    public void setNextContent(Bundle request) {
+        throw new UnsupportedOperationException("setNextContent() is not supported.");
+    }
+
+    public List<String> getFeatures() {
+        return mFeatures;
+    }
+
+    public boolean onPlay() {
+        // TODO consider making these log warnings instead of crashes (or
+        // Log.wtf)
+        // throw new UnsupportedOperationException("play is not supported.");
+        return false;
+    }
+
+    public boolean onPause() {
+        // throw new UnsupportedOperationException("pause is not supported.");
+        return false;
+    }
+
+    public boolean onNext() {
+        // throw new UnsupportedOperationException("next is not supported.");
+        return false;
+    }
+
+    public boolean onPrevious() {
+        // throw new
+        // UnsupportedOperationException("previous is not supported.");
+        return false;
+    }
+
+    public boolean onStop() {
+        // throw new UnsupportedOperationException("stop is not supported.");
+        return false;
+    }
+
+    public boolean onSeekTo(int time) {
+        // throw new UnsupportedOperationException("seekTo is not supported.");
+        return false;
+    }
+
+    public long getSeekPosition() {
+        // throw new
+        // UnsupportedOperationException("getSeekPosition is not supported.");
+        return -1;
+    }
+
+    public long getDuration() {
+        // throw new
+        // UnsupportedOperationException("getDuration is not supported.");
+        return -1;
+    }
+
+    public int getPlayState() {
+        // throw new
+        // UnsupportedOperationException("getPlayState is not supported.");
+        return 0;
+    }
+
+    public void onDestroy() {
+        // Do nothing by default
+    }
+
+    public void registerListener(Listener listener) {
+        if (!mListeners.contains(listener)) {
+            mListeners.add(listener);
+        }
+    }
+
+    public void unregisterListener(Listener listener) {
+        mListeners.remove(listener);
+    }
+
+    protected void initFeatures(Bundle params) {
+        mFeatures.add(FEATURE_SET_CONTENT);
+    }
+
+    protected void pushOnError(int type, int extra, Bundle extras, Throwable error) {
+        for (Listener listener : mListeners) {
+            listener.onError(type, extra, extras, error);
+        }
+    }
+
+    protected void pushOnStateChanged(int newState) {
+        for (Listener listener : mListeners) {
+            listener.onStateChanged(newState);
+        }
+    }
+
+    protected void pushOnBufferingUpdate(int percent) {
+        for (Listener listener : mListeners) {
+            listener.onBufferingUpdate(percent);
+        }
+    }
+
+    protected void pushOnFocusLost() {
+        for (Listener listener : mListeners) {
+            listener.onFocusLost();
+        }
+    }
+
+    protected void pushOnNextStarted() {
+        for (Listener listener : mListeners) {
+            listener.onNextStarted();
+        }
+    }
+
+    public interface Listener {
+        public static final int ERROR_LOAD_FAILED = 1770;
+        public static final int ERROR_PREPARE_ERROR = 1771;
+        public static final int ERROR_PLAYBACK_FAILED = 1772;
+
+        /**
+         * When an error occurs onError will be called but not onStateChanged.
+         * The Manager will remain in the error state until
+         * {@link #setContent()} is called again.
+         */
+        public void onError(int type, int extra, Bundle extras,
+                Throwable error);
+
+        /**
+         * onStateChanged will be called whenever the state of the manager
+         * transitions except to an error state.
+         */
+        public void onStateChanged(int newState);
+
+        /**
+         * This is a passthrough of
+         * {@link MediaPlayer.OnBufferingUpdateListener}.
+         */
+        public void onBufferingUpdate(int percent);
+
+        /**
+         * Called when audio focus is lost and it is not transient or ducking.
+         */
+        public void onFocusLost();
+
+        /**
+         * Called when the next item was started playing. Only called if a next
+         * item has been set and the current item has ended.
+         */
+        public void onNextStarted();
+    }
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/playback/RequestUtils.java b/tests/OneMedia/src/com/android/onemedia/playback/RequestUtils.java
new file mode 100644
index 0000000..dd0d982
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/playback/RequestUtils.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia.playback;
+
+import android.os.Bundle;
+import android.support.v7.media.MediaItemMetadata;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * TODO: Insert description here. (generated by epastern)
+ */
+public class RequestUtils {
+    public static final String ACTION_SET_CONTENT = "set_content";
+    public static final String ACTION_SET_NEXT_CONTENT = "set_next_content";
+
+    public static final String EXTRA_KEY_SOURCE = "source";
+    public static final String EXTRA_KEY_METADATA = "metadata";
+    public static final String EXTRA_KEY_HEADERS = "headers";
+
+    private RequestUtils() {
+    }
+
+    public static class ContentBuilder {
+        private Bundle mBundle;
+
+        public ContentBuilder() {
+            mBundle = new Bundle();
+        }
+
+        public ContentBuilder setSource(String source) {
+            mBundle.putString(EXTRA_KEY_SOURCE, source);
+            return this;
+        }
+
+        /**
+         * @see MediaItemMetadata
+         * @param metadata The metadata for this item
+         */
+        public ContentBuilder setMetadata(Bundle metadata) {
+            mBundle.putBundle(EXTRA_KEY_METADATA, metadata);
+            return this;
+        }
+
+        public ContentBuilder setHeaders(HashMap<String, String> headers) {
+            mBundle.putSerializable(EXTRA_KEY_HEADERS, headers);
+            return this;
+        }
+
+        public Bundle build() {
+            return mBundle;
+        }
+    }
+}
diff --git a/tests/OneMedia/src/com/android/onemedia/provider/OneMediaRouteProvider.java b/tests/OneMedia/src/com/android/onemedia/provider/OneMediaRouteProvider.java
new file mode 100644
index 0000000..6537d49
--- /dev/null
+++ b/tests/OneMedia/src/com/android/onemedia/provider/OneMediaRouteProvider.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2014 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.android.onemedia.provider;
+
+import android.media.routeprovider.RouteConnection;
+import android.media.routeprovider.RouteInterfaceHandler;
+import android.media.routeprovider.RoutePlaybackControlsHandler;
+import android.media.routeprovider.RouteProviderService;
+import android.media.routeprovider.RouteRequest;
+import android.media.session.RouteInfo;
+import android.media.session.RoutePlaybackControls;
+import android.media.session.RouteInterface;
+import android.media.session.PlaybackState;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.ResultReceiver;
+import android.util.Log;
+
+import com.android.onemedia.playback.LocalRenderer;
+import com.android.onemedia.playback.Renderer;
+import com.android.onemedia.playback.RequestUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Test of MediaRouteProvider. Show a dummy provider with a simple interface for
+ * playing music.
+ */
+public class OneMediaRouteProvider extends RouteProviderService {
+    private static final String TAG = "OneMRP";
+    private static final boolean DEBUG = true;
+
+    private Renderer mRenderer;
+    private RenderListener mRenderListener;
+    private PlaybackState mPlaybackState;
+    private RouteConnection mConnection;
+    private RoutePlaybackControlsHandler mControls;
+    private String mRouteId;
+    private Handler mHandler;
+
+    @Override
+    public void onCreate() {
+        mHandler = new Handler();
+        mRouteId = UUID.randomUUID().toString();
+        mRenderer = new LocalRenderer(this, null);
+        mRenderListener = new RenderListener();
+        mPlaybackState = new PlaybackState();
+        mPlaybackState.setActions(PlaybackState.ACTION_PAUSE
+                | PlaybackState.ACTION_PLAY);
+
+        mRenderer.registerListener(mRenderListener);
+
+        if (DEBUG) {
+            Log.d(TAG, "onCreate, routeId is " + mRouteId);
+        }
+    }
+
+    @Override
+    public List<RouteInfo> getMatchingRoutes(List<RouteRequest> requests) {
+        RouteInfo.Builder bob = new RouteInfo.Builder();
+        bob.setName("OneMedia").setId(mRouteId);
+        // TODO add a helper library for generating route info with the correct
+        // options
+        Log.d(TAG, "Requests:");
+        for (RouteRequest request : requests) {
+            List<String> ifaces = request.getConnectionOptions().getInterfaceNames();
+            Log.d(TAG, "  request ifaces:" + ifaces.toString());
+            if (ifaces != null && ifaces.size() == 1
+                    && RoutePlaybackControls.NAME.equals(ifaces.get(0))) {
+                bob.addRouteOptions(request.getConnectionOptions());
+            }
+        }
+        ArrayList<RouteInfo> result = new ArrayList<RouteInfo>();
+        if (bob.getOptionsSize() > 0) {
+            RouteInfo info = bob.build();
+            result.add(info);
+        }
+        if (DEBUG) {
+            Log.d(TAG, "getRoutes returning " + result.toString());
+        }
+        return result;
+    }
+
+    @Override
+    public RouteConnection connect(RouteInfo route, RouteRequest request) {
+        if (mConnection != null) {
+            disconnect(mConnection);
+        }
+        RouteConnection connection = new RouteConnection(this, route);
+        mControls = RoutePlaybackControlsHandler.addTo(connection);
+        mControls.addListener(new PlayHandler(mRouteId), mHandler);
+        if (DEBUG) {
+            Log.d(TAG, "Connected to route");
+        }
+        return connection;
+    }
+
+    private class PlayHandler extends RoutePlaybackControlsHandler.Listener {
+        private final String mRouteId;
+
+        public PlayHandler(String routeId) {
+            mRouteId = routeId;
+        }
+
+        @Override
+        public void playNow(String content, ResultReceiver cb) {
+            if (DEBUG) {
+                Log.d(TAG, "Attempting to play " + content);
+            }
+            // look up the route and send a play command to it
+            Bundle bundle = new Bundle();
+            bundle.putString(RequestUtils.EXTRA_KEY_SOURCE, content);
+            mRenderer.setContent(bundle);
+            RouteInterfaceHandler.sendResult(cb, RouteInterface.RESULT_SUCCESS, null);
+        }
+
+        @Override
+        public boolean resume() {
+            mRenderer.onPlay();
+            return true;
+        }
+
+        @Override
+        public boolean pause() {
+            mRenderer.onPause();
+            return true;
+        }
+    }
+
+    private class RenderListener implements Renderer.Listener {
+
+        @Override
+        public void onError(int type, int extra, Bundle extras, Throwable error) {
+            Log.d(TAG, "Sending onError with type " + type + " and extra " + extra);
+            if (mControls != null) {
+                mControls.sendPlaybackChangeEvent(PlaybackState.PLAYSTATE_ERROR);
+            }
+        }
+
+        @Override
+        public void onStateChanged(int newState) {
+            if (newState != Renderer.STATE_ERROR) {
+                mPlaybackState.setErrorMessage(null);
+            }
+            long position = -1;
+            if (mRenderer != null) {
+                position = mRenderer.getSeekPosition();
+            }
+            switch (newState) {
+                case Renderer.STATE_ENDED:
+                case Renderer.STATE_STOPPED:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_STOPPED, position, 0);
+                    break;
+                case Renderer.STATE_INIT:
+                case Renderer.STATE_PREPARING:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_BUFFERING, position, 0);
+                    break;
+                case Renderer.STATE_ERROR:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_ERROR, position, 0);
+                    break;
+                case Renderer.STATE_PAUSED:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_PAUSED, position, 0);
+                    break;
+                case Renderer.STATE_PLAYING:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_PLAYING, position, 1);
+                    break;
+                default:
+                    mPlaybackState.setState(PlaybackState.PLAYSTATE_ERROR, position, 0);
+                    mPlaybackState.setErrorMessage("unkown state");
+                    break;
+            }
+
+            mControls.sendPlaybackChangeEvent(mPlaybackState.getState());
+        }
+
+        @Override
+        public void onBufferingUpdate(int percent) {
+        }
+
+        @Override
+        public void onFocusLost() {
+            Log.d(TAG, "Focus lost, changing state to " + Renderer.STATE_PAUSED);
+            mPlaybackState.setState(PlaybackState.PLAYSTATE_PAUSED, mRenderer.getSeekPosition(), 0);
+            mRenderer.onPause();
+        }
+
+        @Override
+        public void onNextStarted() {
+        }
+    }
+}
diff --git a/tests/RenderThreadTest/Android.mk b/tests/RenderThreadTest/Android.mk
new file mode 100644
index 0000000..bdcba2e
--- /dev/null
+++ b/tests/RenderThreadTest/Android.mk
@@ -0,0 +1,18 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+# Only compile source java files in this apk.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := RenderThreadTest
+
+LOCAL_STATIC_JAVA_LIBRARIES += android-common
+
+LOCAL_PROGUARD_ENABLED := disabled
+
+include $(BUILD_PACKAGE)
+
+# Use the following include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/tests/RenderThreadTest/AndroidManifest.xml b/tests/RenderThreadTest/AndroidManifest.xml
new file mode 100644
index 0000000..c76cfce
--- /dev/null
+++ b/tests/RenderThreadTest/AndroidManifest.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.renderthread"
+    android:versionCode="1"
+    android:versionName="1.0" >
+
+    <uses-sdk
+        android:minSdkVersion="18"
+        android:targetSdkVersion="18" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
+        android:label="@string/app_name"
+        android:theme="@style/AppTheme" >
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity android:name=".SubActivity"
+            android:theme="@style/AppTheme.Transparent" />
+    </application>
+
+</manifest>
diff --git a/tests/RenderThreadTest/res/drawable-hdpi/ic_launcher.png b/tests/RenderThreadTest/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..96a442e
--- /dev/null
+++ b/tests/RenderThreadTest/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/tests/RenderThreadTest/res/drawable-mdpi/ic_launcher.png b/tests/RenderThreadTest/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..359047d
--- /dev/null
+++ b/tests/RenderThreadTest/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/tests/RenderThreadTest/res/drawable-xhdpi/ic_launcher.png b/tests/RenderThreadTest/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..71c6d76
--- /dev/null
+++ b/tests/RenderThreadTest/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/tests/RenderThreadTest/res/drawable-xhdpi/starry_night_bg.jpg b/tests/RenderThreadTest/res/drawable-xhdpi/starry_night_bg.jpg
new file mode 100644
index 0000000..755232d
--- /dev/null
+++ b/tests/RenderThreadTest/res/drawable-xhdpi/starry_night_bg.jpg
Binary files differ
diff --git a/tests/RenderThreadTest/res/layout/activity_main.xml b/tests/RenderThreadTest/res/layout/activity_main.xml
new file mode 100644
index 0000000..1fd5459
--- /dev/null
+++ b/tests/RenderThreadTest/res/layout/activity_main.xml
@@ -0,0 +1,12 @@
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context=".MainActivity" >
+
+    <ListView android:id="@android:id/list"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:divider="@null" />
+
+</FrameLayout>
diff --git a/tests/RenderThreadTest/res/layout/activity_sub.xml b/tests/RenderThreadTest/res/layout/activity_sub.xml
new file mode 100644
index 0000000..713cee4
--- /dev/null
+++ b/tests/RenderThreadTest/res/layout/activity_sub.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent" >
+
+    <View
+        android:id="@+id/bg_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@drawable/starry_night_bg" />
+
+    <LinearLayout
+        android:id="@+id/my_container"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical" >
+
+        <View
+            android:id="@+id/from_left"
+            android:layout_width="match_parent"
+            android:layout_height="48dip"
+            android:background="#7000FF00" />
+
+        <View
+            android:id="@+id/from_right"
+            android:layout_width="match_parent"
+            android:layout_height="0dip"
+            android:layout_margin="80dip"
+            android:layout_weight="1"
+            android:background="#90FF0000" />
+
+        <View
+            android:id="@+id/from_left"
+            android:layout_width="match_parent"
+            android:layout_height="48dip"
+            android:background="#7000FF00" />
+    </LinearLayout>
+
+</FrameLayout>
\ No newline at end of file
diff --git a/tests/RenderThreadTest/res/layout/item_layout.xml b/tests/RenderThreadTest/res/layout/item_layout.xml
new file mode 100644
index 0000000..5bdb1ac
--- /dev/null
+++ b/tests/RenderThreadTest/res/layout/item_layout.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:textAppearance="?android:attr/textAppearanceListItemSmall"
+    android:gravity="center_vertical"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:background="#33b5e5"
+/>
\ No newline at end of file
diff --git a/tests/RenderThreadTest/res/values/strings.xml b/tests/RenderThreadTest/res/values/strings.xml
new file mode 100644
index 0000000..f782e98
--- /dev/null
+++ b/tests/RenderThreadTest/res/values/strings.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+    <string name="app_name">Render Thread</string>
+    <string name="action_settings">Settings</string>
+    <string name="hello_world">Hello world!</string>
+
+</resources>
diff --git a/tests/RenderThreadTest/res/values/styles.xml b/tests/RenderThreadTest/res/values/styles.xml
new file mode 100644
index 0000000..f6b5d6a
--- /dev/null
+++ b/tests/RenderThreadTest/res/values/styles.xml
@@ -0,0 +1,11 @@
+<resources>
+    <!-- Application theme. -->
+    <style name="AppTheme" parent="android:Theme.Holo.Light">
+    </style>
+
+    <style name="AppTheme.Transparent">
+        <item name="android:windowIsTranslucent">true</item>
+        <item name="android:windowBackground">@android:color/transparent</item>
+    </style>
+
+</resources>
diff --git a/tests/RenderThreadTest/src/com/example/renderthread/MainActivity.java b/tests/RenderThreadTest/src/com/example/renderthread/MainActivity.java
new file mode 100644
index 0000000..1d209dd
--- /dev/null
+++ b/tests/RenderThreadTest/src/com/example/renderthread/MainActivity.java
@@ -0,0 +1,95 @@
+
+package com.example.renderthread;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.Handler;
+import android.view.HardwareRenderer;
+import android.view.RenderNodeAnimator;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+public class MainActivity extends Activity implements OnItemClickListener {
+
+    static final int TRANSLATION_Y = 1;
+    static final int DELTA_TYPE_DELTA = 1;
+    static final int DURATION = 400;
+
+    static final String KEY_NAME = "name";
+    static final String KEY_CLASS = "clazz";
+
+    static Map<String,?> make(String name) {
+        Map<String,Object> ret = new HashMap<String,Object>();
+        ret.put(KEY_NAME, name);
+        return ret;
+    }
+
+    @SuppressWarnings("serial")
+    static final ArrayList<Map<String,?>> SAMPLES = new ArrayList<Map<String,?>>() {{
+        for (int i = 1; i < 25; i++) {
+            add(make("List Item: " + i));
+        }
+    }};
+
+    Handler mHandler = new Handler();
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        HardwareRenderer.sUseRenderThread = true;
+        setContentView(R.layout.activity_main);
+        ListView lv = (ListView) findViewById(android.R.id.list);
+        lv.setDrawSelectorOnTop(true);
+        lv.setAdapter(new SimpleAdapter(this, SAMPLES,
+                R.layout.item_layout, new String[] { KEY_NAME },
+                new int[] { android.R.id.text1 }));
+        lv.setOnItemClickListener(this);
+        getActionBar().setTitle("MainActivity");
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        ListView lv = (ListView) findViewById(android.R.id.list);
+        for (int i = 0; i < lv.getChildCount(); i++) {
+            lv.getChildAt(i).animate().translationY(0).setDuration(DURATION);
+        }
+    }
+
+    @Override
+    public void onItemClick(final AdapterView<?> adapterView, View clickedView,
+            int clickedPosition, long clickedId) {
+        int topPosition = adapterView.getFirstVisiblePosition();
+        int dy = adapterView.getHeight();
+        for (int i = 0; i < adapterView.getChildCount(); i++) {
+            int pos = topPosition + i;
+            View child = adapterView.getChildAt(i);
+            float delta = (pos - clickedPosition) * 1.1f;
+            if (delta == 0) delta = -1;
+            RenderNodeAnimator animator = new RenderNodeAnimator(
+                    TRANSLATION_Y, DELTA_TYPE_DELTA, dy * delta);
+            animator.setDuration(DURATION);
+            animator.start(child);
+        }
+        //mHandler.postDelayed(mLaunchActivity, (long) (DURATION * .4));
+        mLaunchActivity.run();
+    }
+
+    private Runnable mLaunchActivity = new Runnable() {
+
+        @Override
+        public void run() {
+            startActivity(new Intent(MainActivity.this, SubActivity.class));
+            overridePendingTransition(0, 0);
+        }
+    };
+
+}
diff --git a/tests/RenderThreadTest/src/com/example/renderthread/SubActivity.java b/tests/RenderThreadTest/src/com/example/renderthread/SubActivity.java
new file mode 100644
index 0000000..892cbae
--- /dev/null
+++ b/tests/RenderThreadTest/src/com/example/renderthread/SubActivity.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2013 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.example.renderthread;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.os.Process;
+import android.os.SystemClock;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class SubActivity extends Activity {
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        long before = SystemClock.currentThreadTimeMillis();
+        setContentView(R.layout.activity_sub);
+        getActionBar().setTitle("SubActivity");
+        // Simulate being a real app!
+        while (SystemClock.currentThreadTimeMillis() - before < 100) {
+            View v = new View(this, null);
+        }
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        ViewGroup container = (ViewGroup) findViewById(R.id.my_container);
+        int dx = getWindowManager().getDefaultDisplay().getWidth();
+        for (int i = 0; i < container.getChildCount(); i++) {
+            View child = container.getChildAt(i);
+            int dir = child.getId() == R.id.from_left ? 1 : -1;
+            child.setTranslationX(dx * dir);
+            child.animate().translationX(0).setDuration(MainActivity.DURATION);
+        }
+        View bg = findViewById(R.id.bg_container);
+        bg.setAlpha(0f);
+        bg.animate().alpha(1f).setDuration(MainActivity.DURATION);
+    }
+
+    @Override
+    public void onBackPressed() {
+        super.onBackPressed();
+        overridePendingTransition(0, 0);
+    }
+}
diff --git a/tests/SharedLibrary/client/Android.mk b/tests/SharedLibrary/client/Android.mk
index 60ef92a..1d66bb9 100644
--- a/tests/SharedLibrary/client/Android.mk
+++ b/tests/SharedLibrary/client/Android.mk
@@ -3,7 +3,7 @@
 
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
-LOCAL_APK_LIBRARIES := SharedLibrary
+LOCAL_RES_LIBRARIES := SharedLibrary
 
 LOCAL_PACKAGE_NAME := SharedLibraryClient
 
diff --git a/tests/SharedLibrary/client/AndroidManifest.xml b/tests/SharedLibrary/client/AndroidManifest.xml
index c6a43c0..a39c754 100644
--- a/tests/SharedLibrary/client/AndroidManifest.xml
+++ b/tests/SharedLibrary/client/AndroidManifest.xml
@@ -16,7 +16,7 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.google.android.test.lib_client">
-    <application android:label="@string/app_title">
+    <application android:label="@string/app_title" android:theme="@style/Theme">
         <uses-library android:name="android.test.runner" />
         <uses-library android:name="com.google.android.test.shared_library" />
         <activity android:name="ActivityMain">
diff --git a/tests/SharedLibrary/client/res/layout/main.xml b/tests/SharedLibrary/client/res/layout/main.xml
new file mode 100644
index 0000000..067ef9f
--- /dev/null
+++ b/tests/SharedLibrary/client/res/layout/main.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView android:id="@+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="@com.google.android.test.shared_library:string/shared_string"
+        style="@com.google.android.test.shared_library:style/CodeFont"/>
+
+    <com.google.android.test.shared_library.AddressView
+        xmlns:custom="http://schemas.android.com/apk/res/com.google.android.test.shared_library"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        custom:name="Professor Android"
+        custom:streetNumber="44"
+        custom:streetName="KitKat Lane"
+        custom:city="AndroidVille"
+        custom:state="OS"
+        custom:country="Mobile"
+        custom:zip="12345"/>
+</LinearLayout>
diff --git a/tests/SharedLibrary/client/res/values/strings.xml b/tests/SharedLibrary/client/res/values/strings.xml
index 3757a25..d9efdc7 100644
--- a/tests/SharedLibrary/client/res/values/strings.xml
+++ b/tests/SharedLibrary/client/res/values/strings.xml
@@ -16,4 +16,5 @@
 
 <resources>
     <string name="app_title">SharedLibrary client</string>
+    <string name="changes">@com.google.android.test.shared_library:string/shared_string</string>
 </resources>
diff --git a/tests/SharedLibrary/client/res/values/themes.xml b/tests/SharedLibrary/client/res/values/themes.xml
new file mode 100644
index 0000000..a14f98a
--- /dev/null
+++ b/tests/SharedLibrary/client/res/values/themes.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<resources>
+    <style name="Theme" parent="com.google.android.test.shared_library:Theme">
+    </style>
+</resources>
diff --git a/tests/SharedLibrary/client/src/com/google/android/test/lib_client/ActivityMain.java b/tests/SharedLibrary/client/src/com/google/android/test/lib_client/ActivityMain.java
index d6121a5..7276b3c 100644
--- a/tests/SharedLibrary/client/src/com/google/android/test/lib_client/ActivityMain.java
+++ b/tests/SharedLibrary/client/src/com/google/android/test/lib_client/ActivityMain.java
@@ -18,18 +18,33 @@
 
 import android.app.Activity;
 import android.os.Bundle;
-import android.widget.TextView;
 import com.google.android.test.shared_library.SharedLibraryMain;
 
 public class ActivityMain extends Activity {
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
 
-        TextView content = new TextView(this);
-        content.setText("Library version: " + SharedLibraryMain.getVersion(this) + "!");
+        String[] expectedAnimals = new String[] {
+                "Racoon",
+                "Rhino",
+                "Elephant"
+        };
+
+        String[] animals = getResources().getStringArray(com.google.android.test.shared_library.R.array.animals);
+        if (animals == null || animals.length != expectedAnimals.length) {
+            throw new AssertionError("Animal list from shared library is null or wrong length.");
+        }
+
+        for (int i = 0; i < expectedAnimals.length; i++) {
+            if (!expectedAnimals[i].equals(animals[i])) {
+                throw new AssertionError("Expected '" + expectedAnimals[i]
+                        + "' at index " + i + " but got '" + animals[i]);
+            }
+        }
 
         SharedLibraryMain.ensureVersion(this, SharedLibraryMain.VERSION_BASE);
-        setContentView(content);
     }
 }
diff --git a/tests/SharedLibrary/lib/Android.mk b/tests/SharedLibrary/lib/Android.mk
index c19e23a..b2fc369 100644
--- a/tests/SharedLibrary/lib/Android.mk
+++ b/tests/SharedLibrary/lib/Android.mk
@@ -3,8 +3,13 @@
 
 LOCAL_SRC_FILES := $(call all-subdir-java-files)
 
+LOCAL_AAPT_FLAGS := --shared-lib
 LOCAL_PACKAGE_NAME := SharedLibrary
 
-LOCAL_MODULE_TAGS := tests
+LOCAL_EXPORT_PACKAGE_RESOURCES := true
+LOCAL_PRIVILEGED_MODULE := true
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_PROGUARD_FLAG_FILES := proguard.proguard
 
 include $(BUILD_PACKAGE)
diff --git a/tests/SharedLibrary/lib/proguard.proguard b/tests/SharedLibrary/lib/proguard.proguard
new file mode 100644
index 0000000..e5dfbe1
--- /dev/null
+++ b/tests/SharedLibrary/lib/proguard.proguard
@@ -0,0 +1,7 @@
+-keepparameternames
+-keepattributes Exceptions,InnerClasses,Signature,Deprecated,
+                SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
+
+-keep public class * {
+    public protected *;
+}
diff --git a/tests/SharedLibrary/lib/res/layout/address.xml b/tests/SharedLibrary/lib/res/layout/address.xml
new file mode 100644
index 0000000..835f43e
--- /dev/null
+++ b/tests/SharedLibrary/lib/res/layout/address.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<merge xmlns:android="http://schemas.android.com/apk/res/android">
+    <TextView android:id="@+id/name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+    <TextView android:id="@+id/street"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+    <TextView android:id="@+id/cityStateZip"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+    <TextView android:id="@+id/country"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"/>
+</merge>
diff --git a/tests/SharedLibrary/lib/res/values/attrs.xml b/tests/SharedLibrary/lib/res/values/attrs.xml
new file mode 100644
index 0000000..8cefe92
--- /dev/null
+++ b/tests/SharedLibrary/lib/res/values/attrs.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<resources>
+    <declare-styleable name="AddressView">
+        <attr name="name" format="string" />
+        <attr name="streetNumber" format="integer" />
+        <attr name="streetName" format="string" />
+        <attr name="city" format="string" />
+        <attr name="state" format="string" />
+        <attr name="zip" format="string" />
+        <attr name="country" format="string" />
+    </declare-styleable>
+</resources>
diff --git a/tests/SharedLibrary/lib/res/values/public.xml b/tests/SharedLibrary/lib/res/values/public.xml
new file mode 100644
index 0000000..37b1ec9
--- /dev/null
+++ b/tests/SharedLibrary/lib/res/values/public.xml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<resources>
+    <public type="string" name="shared_string" id="0x00020003" />
+    <public type="style" name="CodeFont" id="0x00040000" />
+    <public type="style" name="Theme" id="0x00040001" />
+
+    <public type="attr" name="name"         id="0x00010000" />
+    <public type="attr" name="streetNumber" id="0x00010001" />
+    <public type="attr" name="streetName"   id="0x00010002" />
+    <public type="attr" name="city"         id="0x00010003" />
+    <public type="attr" name="state"        id="0x00010004" />
+    <public type="attr" name="zip"          id="0x00010005" />
+    <public type="attr" name="country"      id="0x00010006" />
+
+    <public type="array" name="animals"     id="0x02050000" />
+</resources>
diff --git a/tests/SharedLibrary/lib/res/values/strings.xml b/tests/SharedLibrary/lib/res/values/strings.xml
index bbfb0b4..6827f93 100644
--- a/tests/SharedLibrary/lib/res/values/strings.xml
+++ b/tests/SharedLibrary/lib/res/values/strings.xml
@@ -19,4 +19,13 @@
     <string name="upgrade_body"><xliff:g id="app">%1$s</xliff:g> requires a newer version
             of <xliff:g id="lib">%2$s</xliff:g> to run.</string>
     <string name="upgrade_button">Upgrade</string>
+    <string name="shared_string">Shared string!</string>
+
+    <string-array name="animals">
+        <item>@string/racoon</item>
+        <item>Rhino</item>
+        <item>Elephant</item>
+    </string-array>
+
+    <string name="racoon">Racoon</string>
 </resources>
diff --git a/tests/SharedLibrary/lib/res/values/themes.xml b/tests/SharedLibrary/lib/res/values/themes.xml
new file mode 100644
index 0000000..f1081ac
--- /dev/null
+++ b/tests/SharedLibrary/lib/res/values/themes.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<resources>
+    <style name="CodeFont" parent="@android:style/TextAppearance.Medium">
+        <item name="android:textColor">#00FF00</item>
+        <item name="android:typeface">monospace</item>
+    </style>
+
+    <style name="Theme" parent="android:Theme.Holo.Light">
+        <item name="android:actionBarStyle">@style/ActionBar</item>
+    </style>
+
+    <style name="ActionBar" parent="android:Widget.Holo.Light.ActionBar.Solid.Inverse">
+        <item name="android:background">@color/orange</item>
+    </style>
+
+    <color name="orange">#f0ad4e</color>
+</resources>
diff --git a/tests/SharedLibrary/lib/src/com/google/android/test/shared_library/AddressView.java b/tests/SharedLibrary/lib/src/com/google/android/test/shared_library/AddressView.java
new file mode 100644
index 0000000..dcaf68c
--- /dev/null
+++ b/tests/SharedLibrary/lib/src/com/google/android/test/shared_library/AddressView.java
@@ -0,0 +1,44 @@
+package com.google.android.test.shared_library;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.util.AttributeSet;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+public class AddressView extends LinearLayout {
+    private TextView mNameView;
+    private TextView mStreetView;
+    private TextView mCityStateZipView;
+    private TextView mCountryView;
+
+    public AddressView(Context context, AttributeSet attrs) {
+        super(context, attrs);
+        setOrientation(VERTICAL);
+
+        View view = LayoutInflater.from(context).inflate(R.layout.address, this);
+        mNameView = (TextView) view.findViewById(R.id.name);
+        mStreetView = (TextView) view.findViewById(R.id.street);
+        mCityStateZipView = (TextView) view.findViewById(R.id.cityStateZip);
+        mCountryView = (TextView) view.findViewById(R.id.country);
+
+        TypedArray a = context.getTheme().obtainStyledAttributes(
+                attrs,
+                R.styleable.AddressView,
+                0, 0);
+        try {
+            mNameView.setText(a.getString(R.styleable.AddressView_name));
+            int streetNumber = a.getInteger(R.styleable.AddressView_streetNumber, -1);
+            mStreetView.setText((streetNumber <= 0 ? "" : Integer.toString(streetNumber)) +
+                    " " + a.getString(R.styleable.AddressView_streetName));
+            mCityStateZipView.setText(a.getString(R.styleable.AddressView_city) + ", " +
+                    a.getString(R.styleable.AddressView_state) + " " +
+                    a.getString(R.styleable.AddressView_zip));
+            mCountryView.setText(a.getString(R.styleable.AddressView_country));
+        } finally {
+            a.recycle();
+        }
+    }
+}
diff --git a/tests/VectorDrawableTest/Android.mk b/tests/VectorDrawableTest/Android.mk
new file mode 100644
index 0000000..dd8a4d4
--- /dev/null
+++ b/tests/VectorDrawableTest/Android.mk
@@ -0,0 +1,26 @@
+#
+# Copyright (C) 2014 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.
+#
+
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := VectorDrawableTest
+
+LOCAL_MODULE_TAGS := tests
+
+include $(BUILD_PACKAGE)
diff --git a/tests/VectorDrawableTest/AndroidManifest.xml b/tests/VectorDrawableTest/AndroidManifest.xml
new file mode 100644
index 0000000..28c5f33
--- /dev/null
+++ b/tests/VectorDrawableTest/AndroidManifest.xml
@@ -0,0 +1,99 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.test.dynamic" >
+    <uses-sdk android:minSdkVersion="20" />
+
+    <application
+        android:hardwareAccelerated="true"
+        android:label="vector" >
+        <activity
+            android:name="VectorDrawableTest"
+            android:label="Vector Icon" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <activity
+            android:name="VectorDrawable01"
+            android:label="VectorTest1" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="com.android.test.dynamic.TEST" />
+            </intent-filter>
+        </activity>
+
+         <activity
+            android:name="VectorDrawablePerformance"
+            android:label="Vector Performance" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="com.android.test.dynamic.TEST" />
+            </intent-filter>
+
+        </activity>
+
+         <activity
+            android:name="VectorDrawableDupPerf"
+            android:label="Vector Performance of clones" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="com.android.test.dynamic.TEST" />
+            </intent-filter>
+
+        </activity>
+        <activity
+            android:name="VectorDrawableStaticPerf"
+            android:label="Performance of vector images" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="com.android.test.dynamic.TEST" />
+            </intent-filter>
+
+        </activity>
+
+        <activity
+            android:name="VectorCheckbox"
+            android:label="On a Checkbox" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="com.android.test.dynamic.TEST" />
+            </intent-filter>
+
+        </activity>
+        <activity
+            android:name="VectorPathChecking"
+            android:label="Path Checking graphics" >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+
+                <category android:name="com.android.test.dynamic.TEST" />
+            </intent-filter>
+
+        </activity>
+    </application>
+
+</manifest>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable-hdpi/icon.png b/tests/VectorDrawableTest/res/drawable-hdpi/icon.png
new file mode 100644
index 0000000..60fbdf5
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable-hdpi/icon.png
Binary files differ
diff --git a/tests/VectorDrawableTest/res/drawable/icon.png b/tests/VectorDrawableTest/res/drawable/icon.png
new file mode 100644
index 0000000..cb40a19
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/icon.png
Binary files differ
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable01.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable01.xml
new file mode 100644
index 0000000..bb2bebf
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable01.xml
@@ -0,0 +1,78 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:trigger="state_checked" android:versionCode="1" >
+
+    <size
+        android:height="48dp"
+        android:width="48dp" />
+
+    <viewport
+        android:viewportHeight="480"
+        android:viewportWidth="480" />
+
+    <group>
+        <path
+            android:name="check"
+            android:pathData="m20,200l100,90l180,-180l-35,-35l-145,145l-60,-60l-40,40z"
+            android:fill="?android:attr/colorControlActivated" />
+    </group>
+    <group>
+        <path
+            android:name="box1"
+            android:pathData="m127,171l37,38l33,-31l-37,-40l-1,3l-2,0l-30,30z"
+            android:fill="?android:attr/colorControlActivated"
+            android:stroke="?android:attr/colorControlActivated"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+    <group>
+        <path
+            android:name="box2"
+            android:pathData="m127,171l37,38l33,-31l-37,-40l-1,3l-2,0l-30,30z"
+            android:rotation="46.757"
+            android:pivotX="162"
+            android:pivotY="173.5"
+            android:fill="?android:attr/colorControlNormal"
+            android:stroke="?android:attr/colorControlNormal"
+            android:strokeWidth="3"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+    <group>
+        <path
+            android:name="box3"
+            android:pathData="m187,147l-1,55l-49,-1l2,-53l48,0z"
+            android:stroke="?android:attr/colorControlNormal"
+            android:strokeWidth="10"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+    <group>
+        <path
+            android:name="box4"
+            android:pathData="m248,74l0,164l-177,0l1,-165l173,-1l3,2z"
+            android:stroke="?android:attr/colorControlNormal"
+            android:strokeWidth="30"
+            android:strokeLineCap="round"
+            android:strokeLineJoin="round" />
+    </group>
+
+    <animation
+        android:durations="300,100,0,300"
+        android:sequence="check,box1,box2,box3,box4" />
+
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable02.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable02.xml
new file mode 100644
index 0000000..49906d17
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable02.xml
@@ -0,0 +1,46 @@
+<!-- Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+            android:width="64dp"
+            android:height="64dp"/>
+
+    <viewport android:viewportWidth="320"
+          android:viewportHeight="320"/>
+
+    <group>
+        <path
+                android:name="arrow"
+                android:pathData="M 100,225 L 100,115 L 130,115 L 70,15 L 10,115 L 40,115 L 40,225 z"
+                android:fill="#ffffffff"
+                android:stroke="#FF00FF00"
+                android:strokeWidth="1"/>
+    </group>
+    <group>
+        <path
+                android:name="house"
+                android:pathData="M 130,225 L 130,115 L 130,115 L 70,15 L 10,115 L 10,115 L 10,225 z"
+                android:fill="#ff440000"
+                android:stroke="#FF00FF00"
+                android:strokeWidth="10"
+                android:rotation="180"
+                android:pivotX="70"
+                android:pivotY="120"
+                android:trimPathStart=".1"
+                android:trimPathEnd=".9"/>
+    </group>
+    <animation android:sequence="arrow,house"/>
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable03.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable03.xml
new file mode 100644
index 0000000..137049d
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable03.xml
@@ -0,0 +1,137 @@
+<!-- Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+            android:width="64dp"
+            android:height="64dp"/>
+
+    <viewport
+            android:viewportWidth="7.30625"
+            android:viewportHeight="12.25"/>
+
+    <group>
+
+        <path
+                android:name="clip1"
+                android:pathData="
+                M 0, 0
+                l 7.3, 0
+                l 0, 0
+                l -7.3, 0
+                z"
+                android:clipToPath="true"
+                android:rotation="-30"
+                android:pivotX="3.65"
+                android:pivotY="6.125"
+                />
+        <path
+                android:name="one"
+                android:pathData="M 1.215625,9.5l 1.9375,0.0 0.0,-6.671875 -2.109375,0.421875 0.0,-1.078125
+                l 2.09375,-0.421875 1.1874998,0.0 0.0,7.75 1.9375,0.0 0.0,1.0
+                l -5.046875,0.0 0.0,-1.0Z"
+                android:fill="#ff88ff"
+                />
+        <path
+                android:name="clip2"
+                android:pathData="
+                M 0, 0
+                l 7.3, 0
+                l 0, 12.25
+                l -7.3, 0
+                z"
+                android:clipToPath="true"
+                android:rotation="-30"
+                android:pivotX="3.65"
+                android:pivotY="6.125"
+                />
+        <path
+                android:name="two"
+                android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z"
+                android:fill="#ff88ff"
+                />
+    </group>
+    <group>
+        <path
+                android:name="clip1"
+                android:pathData="
+                M 0, 0
+                l 7.3, 0
+                l 0, 12.25
+                l -7.3, 0
+                z"
+                android:clipToPath="true"
+                android:rotation="-30"
+                android:pivotX="3.65"
+                android:pivotY="6.125"
+                />
+        <path
+                android:name="one"
+                android:pathData="M 1.215625,9.5l 1.9375,0.0 0.0,-6.671875 -2.109375,0.421875 0.0,-1.078125
+                l 2.09375,-0.421875 1.1874998,0.0 0.0,7.75 1.9375,0.0 0.0,1.0
+                l -5.046875,0.0 0.0,-1.0Z"
+                android:fill="#ff88ff"
+                />
+        <path
+                android:name="clip2"
+                android:pathData="
+                M 0, 12.25
+                l 7.3, 0
+                l 0, 12.25
+                l -7.3, 0
+                z"
+                android:clipToPath="true"
+                android:rotation="-30"
+                android:pivotX="3.65"
+                android:pivotY="6.125"
+                />
+        <path
+                android:name="two"
+                android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z"
+                android:fill="#ff88ff"
+                />
+    </group>
+
+
+    <animation
+            android:sequence="one,one"
+            android:durations="4000"/>
+    <animation
+            android:sequence="two,two"
+            android:durations="4000"/>
+    <animation
+            android:sequence="clip1,clip1"
+            android:durations="4000"/>
+    <animation
+            android:sequence="clip2,clip2"
+            android:durations="4000"/>
+
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable04.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable04.xml
new file mode 100644
index 0000000..cffb73f
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable04.xml
@@ -0,0 +1,126 @@
+<!-- Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android">
+
+    <size
+            android:width="64dp"
+            android:height="64dp"/>
+
+    <viewport
+            android:viewportWidth="7.30625"
+            android:viewportHeight="12.25"/>
+
+    <group>
+        <path
+                android:name="clip1"
+                android:pathData="
+                M 3.65, 6.125
+                m -.001, 0
+                a .001,.001 0 1,0 .002,0
+                a .001,.001 0 1,0 -.002,0z"
+                android:clipToPath="true"
+                android:fill="#112233"
+                />
+
+        <path
+                android:name="one"
+                android:pathData="M 1.215625,9.5l 1.9375,0.0 0.0,-6.671875 -2.109375,0.421875 0.0,-1.078125
+                l 2.09375,-0.421875 1.1874998,0.0 0.0,7.75 1.9375,0.0 0.0,1.0
+                l -5.046875,0.0 0.0,-1.0Z"
+                android:fill="#ff88ff"
+                />
+        <path
+                android:name="clip2"
+                android:pathData="
+                M 3.65, 6.125
+                m -6, 0
+                a 6,6 0 1,0 12,0
+                a 6,6 0 1,0 -12,0z"
+                android:clipToPath="true"
+                android:fill="#112233"
+                />
+        <path
+                android:name="two"
+                android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z"
+                android:fill="#ff88ff"
+                />
+    </group>
+    <group>
+        <path
+                android:name="clip1"
+                android:pathData="
+                M 3.65, 6.125
+                m -6, 0
+                a 6,6 0 1,0 12,0
+                a 6,6 0 1,0 -12,0z"
+                android:clipToPath="true"
+                android:fill="#332233"
+                />
+        <path
+                android:name="one"
+                android:pathData="M 1.215625,9.5l 1.9375,0.0 0.0,-6.671875 -2.109375,0.421875 0.0,-1.078125
+                l 2.09375,-0.421875 1.1874998,0.0 0.0,7.75 1.9375,0.0 0.0,1.0
+                l -5.046875,0.0 0.0,-1.0Z"
+                android:fill="#ff88ff"
+                />
+        <path
+                android:name="clip2"
+                android:pathData="
+                 M 3.65, 6.125
+                m -.001, 0
+                a .001,.001 0 1,0 .002,0
+                a .001,.001 0 1,0 -.002,0z"
+                android:clipToPath="true"
+                android:fill="#662233"
+                />
+        <path
+                android:name="two"
+                android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z"
+                android:fill="#ff88ff"
+                />
+    </group>
+
+
+
+    <animation
+            android:sequence="one,one"
+            android:durations="4000"/>
+    <animation
+            android:sequence="two,two"
+            android:durations="4000"/>
+    <animation
+            android:sequence="clip1,clip1"
+            android:durations="4000"/>
+    <animation
+            android:sequence="clip2,clip2"
+            android:durations="4000"/>
+
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable05.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable05.xml
new file mode 100644
index 0000000..0be6755
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable05.xml
@@ -0,0 +1,138 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="12.25"
+        android:viewportWidth="7.30625" />
+
+    <group>
+        <path
+            android:name="one"
+            android:fill="#ffff00"
+            android:pathData="M 1.215625,9.5l 1.9375,0.0 0.0,-6.671875 -2.109375,0.421875 0.0,-1.078125
+                l 2.09375,-0.421875 1.1874998,0.0 0.0,7.75 1.9375,0.0 0.0,1.0
+                l -5.046875,0.0 0.0,-1.0Z" />
+        <path
+            android:name="two"
+            android:fill="#ffff00"
+            android:fillOpacity="0"
+            android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z" />
+    </group>
+    <group>
+        <path
+            android:name="one"
+            android:fill="#ffff00"
+            android:fillOpacity="0"
+            android:pathData="M 1.215625,9.5l 1.9375,0.0 0.0,-6.671875 -2.109375,0.421875 0.0,-1.078125
+l 2.09375,-0.421875 1.1874998,0.0 0.0,7.75 1.9375,0.0 0.0,1.0
+l -5.046875,0.0 0.0,-1.0Z" />
+        <path
+            android:name="two"
+            android:fill="#ffff00"
+            android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z" />
+    </group>
+    <group>
+        <path
+            android:name="two"
+            android:fill="#ffff00"
+            android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z" />
+        <path
+            android:name="three"
+            android:fill="#ffff00"
+            android:fillOpacity="0"
+            android:pathData="M 5.103125,6.003125q 0.84375,0.1875 1.3125,0.765625 0.484375,0.5625 0.484375,1.40625
+                        q 0.0,1.296875 -0.890625,2.015625 -0.890625,0.703125 -2.53125,0.703125
+                        q -0.546875,0.0 -1.140625,-0.109375 -0.5781251,-0.109375 -1.1875001,-0.328125
+                        l 0.0,-1.140625q 0.484375,0.28125 1.0625001,0.4375 0.59375,0.140625 1.234375,0.140625
+                        q 1.109375,0.0 1.6875,-0.4375 0.59375,-0.4375 0.59375,-1.28125
+                        q 0.0,-0.765625 -0.546875,-1.203125 -0.546875,-0.4375 -1.5,-0.4375
+                        l -1.03125,0.0 0.0,-0.96875 1.078125,0.0q 0.859375,0.0 1.328125,-0.34375
+                        q 0.46875,-0.359375 0.46875,-1.015625 0.0,-0.671875 -0.484375,-1.03125
+                        q -0.46875,-0.359375 -1.359375,-0.359375 -0.5,0.0 -1.0625,0.109375
+                        q -0.546875,0.09375 -1.2187501,0.3125l 0.0,-1.046875q 0.6875001,-0.1875 1.2656251,-0.28125
+                        q 0.59375,-0.09375 1.109375,-0.09375 1.359375,0.0 2.140625,0.609375
+                        q 0.78125,0.609375 0.78125,1.65625 0.0,0.734375 -0.421875,1.234375
+                        q -0.40625,0.5 -1.171875,0.6875Z" />
+    </group>
+    <group>
+        <path
+            android:name="two"
+            android:fill="#ffff00"
+            android:fillOpacity="0"
+            android:pathData="M 2.534375,9.6875l 4.140625,0.0 0.0,1.0 -5.5625,0.0 0.0,-1.0q 0.671875,-0.6875 1.828125,-1.859375
+                        q 1.1718752,-1.1875 1.4687502,-1.53125 0.578125,-0.625 0.796875,-1.0625
+                        q 0.234375,-0.453125 0.234375,-0.875 0.0,-0.703125 -0.5,-1.140625
+                        q -0.484375,-0.4375 -1.2656252,-0.4375 -0.5625,0.0 -1.1875,0.1875
+                        q -0.609375,0.1875 -1.3125,0.59375l 0.0,-1.203125q 0.71875,-0.28125 1.328125,-0.421875
+                        q 0.625,-0.15625 1.140625,-0.15625 1.3593752,0.0 2.1718752,0.6875
+                        q 0.8125,0.671875 0.8125,1.8125 0.0,0.53125 -0.203125,1.015625
+                        q -0.203125,0.484375 -0.734375,1.140625 -0.15625,0.171875 -0.9375,0.984375
+                        q -0.78125024,0.8125 -2.2187502,2.265625Z" />
+        <path
+            android:name="three"
+            android:fill="#ffff00"
+            android:pathData="M 5.103125,6.003125q 0.84375,0.1875 1.3125,0.765625 0.484375,0.5625 0.484375,1.40625
+                        q 0.0,1.296875 -0.890625,2.015625 -0.890625,0.703125 -2.53125,0.703125
+                        q -0.546875,0.0 -1.140625,-0.109375 -0.5781251,-0.109375 -1.1875001,-0.328125
+                        l 0.0,-1.140625q 0.484375,0.28125 1.0625001,0.4375 0.59375,0.140625 1.234375,0.140625
+                        q 1.109375,0.0 1.6875,-0.4375 0.59375,-0.4375 0.59375,-1.28125
+                        q 0.0,-0.765625 -0.546875,-1.203125 -0.546875,-0.4375 -1.5,-0.4375
+                        l -1.03125,0.0 0.0,-0.96875 1.078125,0.0q 0.859375,0.0 1.328125,-0.34375
+                        q 0.46875,-0.359375 0.46875,-1.015625 0.0,-0.671875 -0.484375,-1.03125
+                        q -0.46875,-0.359375 -1.359375,-0.359375 -0.5,0.0 -1.0625,0.109375
+                        q -0.546875,0.09375 -1.2187501,0.3125l 0.0,-1.046875q 0.6875001,-0.1875 1.2656251,-0.28125
+                        q 0.59375,-0.09375 1.109375,-0.09375 1.359375,0.0 2.140625,0.609375
+                        q 0.78125,0.609375 0.78125,1.65625 0.0,0.734375 -0.421875,1.234375
+                        q -0.40625,0.5 -1.171875,0.6875Z" />
+    </group>
+
+    <animation
+        android:durations="2000,0,2000"
+        android:sequence="one,one,three,three" />
+    <animation
+        android:durations="2000,0,2000"
+        android:sequence="two,two,two,two" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable06.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable06.xml
new file mode 100644
index 0000000..73ff5e2
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable06.xml
@@ -0,0 +1,76 @@
+<!-- Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+            android:width="64dp"
+            android:height="64dp"/>
+
+    <viewport
+            android:viewportWidth="700"
+            android:viewportHeight="700"/>
+
+    <group>
+    </group>
+    <path android:pathData="M 569.374 461.472L 569.374 160.658L 160.658 160.658L 160.658 461.472L 569.374 461.472z"
+          android:name="path2451"
+          android:stroke="#FF000000"
+          android:strokeWidth="30.65500000000000"/>
+    <path android:pathData="M 365.015 311.066"
+          android:name="path2453"
+          android:stroke="#FF000000"
+          android:strokeWidth="30.655000000000001"/>
+    <path android:pathData="M 164.46 164.49L 340.78 343.158C 353.849 356.328 377.63 356.172 390.423 343.278L 566.622 165.928"
+          android:name="path2455"
+          android:stroke="#FF000000"
+          android:fill="#FF0000FF"
+          android:strokeWidth="30.655000000000001"/>
+    <path android:pathData="M 170.515 451.566L 305.61 313.46"
+          android:name="path2457"
+          android:stroke="#000000"
+          android:strokeWidth="30.655000000000001"/>
+    <path android:pathData="M 557.968 449.974L 426.515 315.375"
+          android:name="path2459"
+          android:stroke="#000000"
+          android:strokeWidth="30.655000000000001"/>
+    <group>
+        <path android:pathData="M 569.374 461.472L 569.374 160.658L 160.658 160.658L 160.658 461.472L 569.374 461.472z"
+              android:name="path2451"
+              android:stroke="#FF000000"
+              android:strokeWidth="30.65500000000000"/>
+        <path android:pathData="M 365.015 311.066"
+              android:name="path2453"
+              android:stroke="#FF000000"
+              android:strokeWidth="30.655000000000001"/>
+        <path android:pathData="M 164.46 164.49L 340.78 343.158C 353.849 356.328 377.63 356.172 390.423 343.278L 566.622 165.928"
+              android:name="path2455"
+              android:stroke="#FF000000"
+              android:fill="#FFFFFFFF"
+              android:strokeWidth="30.655000000000001"/>
+        <path android:pathData="M 170.515 451.566L 305.61 313.46"
+              android:name="path2457"
+              android:stroke="#000000"
+              android:strokeWidth="30.655000000000001"/>
+        <path android:pathData="M 557.968 449.974L 426.515 315.375"
+              android:name="path2459"
+              android:stroke="#000000"
+              android:strokeWidth="30.655000000000001"/>
+    </group>
+
+    <animation android:sequence="path2451,path2451"
+        android:durations="1000"/>
+
+
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable07.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable07.xml
new file mode 100644
index 0000000..99d37ef
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable07.xml
@@ -0,0 +1,45 @@
+<!-- Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"   >
+    <size
+            android:width="64dp"
+            android:height="64dp"/>
+
+    <viewport android:viewportWidth="140"
+          android:viewportHeight="110"/>
+    <group>
+        <path
+                android:name="menu"
+                android:pathData="M 20,20 l 100,0 0,10 -100,0 z
+              M 20,50 l 100,0 0,10 -100,0 z
+              M 20,80 l 0,-10 100,0 0,10 z"
+                android:fill="#ffffffff"/>
+    </group>
+    <group>
+        <path
+                android:name="back"
+                android:pathData="M 20,55 l 35.3,-35.3 7.07,7.07 -35.3,35.3 z
+              M 27,50 l 97,0 0,10 -97,0 z
+              M 20,55 l 7.07,-7.07 35.3,35.3 -7.07,7.07 z"
+                android:fill="#ffffffff"
+                android:rotation="180"
+                android:pivotX="70"
+                android:pivotY="55"
+                />
+    </group>
+    <animation android:sequence="menu,back"/>
+
+
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable08.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable08.xml
new file mode 100644
index 0000000..f8a03d7
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable08.xml
@@ -0,0 +1,48 @@
+<!-- Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+            android:width="64dp"
+            android:height="64dp"/>
+
+
+    <viewport android:viewportWidth="600"
+          android:viewportHeight="600"/>
+
+    <group>
+        <path
+                android:name="pie1"
+                android:pathData="M535.441,412.339A280.868,280.868 0 1,1 536.186,161.733L284.493,286.29Z"
+                android:fill="#ffffcc00"
+                android:stroke="#FF00FF00"
+                android:strokeWidth="1"/>
+    </group>
+
+    <group>
+        <path
+                android:name="pie2"
+                android:pathData="M564.441,287A280.868,280.868 0 1,1 564.441,285L284.493,286.29Z"
+                android:fill="#FFccaa00"
+                android:stroke="#FF000000"
+                android:strokeWidth="10"
+                android:pivotX="90"
+                android:pivotY="100"/>
+    </group>
+
+    <animation android:sequence="pie1,pie2"/>
+
+
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable09.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable09.xml
new file mode 100644
index 0000000..b3c91a88
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable09.xml
@@ -0,0 +1,44 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="200"
+        android:viewportWidth="200" />
+
+    <group>
+        <path
+            android:name="arrow"
+            android:fill="#ffffffff"
+            android:pathData="M 20,20 l 60,0 0,140 -60,0 z M 120,20 l 60,0 0,140 -60,0 z" />
+    </group>
+    <group>
+        <path
+            android:name="house"
+            android:fill="#ffffffff"
+            android:pathData="M 100,20 l 0,0 0,140 -80,0 z M 100,20 l 0,0 80,140 -80,0 z"
+            android:pivotX="100"
+            android:pivotY="100"
+            android:rotation="90" />
+    </group>
+
+    <animation android:sequence="arrow,house" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable10.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable10.xml
new file mode 100644
index 0000000..7aca169
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable10.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="200"
+        android:viewportWidth="200" />
+
+    <group>
+        <path
+            android:name="bar3"
+            android:fill="#FFFFFFFF"
+            android:pathData="M49.001,60c-5.466,0 -9.899,4.478 -9.899,10s4.434,10,9.899,10c5.468,0,9.899 -4.478,9.899 -10S54.469,60,49.001,60z" />
+        <path
+            android:name="bar2"
+            android:fill="#FF555555"
+            android:pathData="M28.001,48.787l7,7.07c7.731 -7.811,20.269 -7.81,28.001,0l6.999 -7.07C58.403,37.071,39.599,37.071,28.001,48.787z" />
+        <path
+            android:name="bar1"
+            android:fill="#FF555555"
+            android:pathData="M14.001,34.645   L21,41.716c15.464 -15.621,40.536 -15.621,56,0l7.001 -7.071C64.672,15.119,33.33,15.119,14.001,34.645z" />
+        <path
+            android:name="bar0"
+            android:fill="#FF555555"
+            android:pathData="M0,20.502l6.999,7.071   c23.196 -23.431,60.806 -23.431,84.002,0L98,20.503C70.938 -6.834,27.063 -6.834,0,20.502z" />
+    </group>
+    <group>
+        <path
+            android:name="bar3"
+            android:fill="#FFFFFFFF"
+            android:pathData="M49.001,60c-5.466,0 -9.899,4.478 -9.899,10s4.434,10,9.899,10c5.468,0,9.899 -4.478,9.899 -10S54.469,60,49.001,60z" />
+        <path
+            android:name="bar2"
+            android:fill="#FFFFFFFF"
+            android:pathData="M28.001,48.787l7,7.07c7.731 -7.811,20.269 -7.81,28.001,0l6.999 -7.07C58.403,37.071,39.599,37.071,28.001,48.787z" />
+        <path
+            android:name="bar1"
+            android:fill="#FF555555"
+            android:pathData="M14.001,34.645   L21,41.716c15.464 -15.621,40.536 -15.621,56,0l7.001 -7.071C64.672,15.119,33.33,15.119,14.001,34.645z" />
+        <path
+            android:name="bar0"
+            android:fill="#FF555555"
+            android:pathData="M0,20.502l6.999,7.071   c23.196 -23.431,60.806 -23.431,84.002,0L98,20.503C70.938 -6.834,27.063 -6.834,0,20.502z" />
+    </group>
+    <group>
+        <path
+            android:name="bar3"
+            android:fill="#FFFFFFFF"
+            android:pathData="M49.001,60c-5.466,0 -9.899,4.478 -9.899,10s4.434,10,9.899,10c5.468,0,9.899 -4.478,9.899 -10S54.469,60,49.001,60z" />
+        <path
+            android:name="bar2"
+            android:fill="#FFFFFFFF"
+            android:pathData="M28.001,48.787l7,7.07c7.731 -7.811,20.269 -7.81,28.001,0l6.999 -7.07C58.403,37.071,39.599,37.071,28.001,48.787z" />
+        <path
+            android:name="bar1"
+            android:fill="#FFFFFFFF"
+            android:pathData="M14.001,34.645   L21,41.716c15.464 -15.621,40.536 -15.621,56,0l7.001 -7.071C64.672,15.119,33.33,15.119,14.001,34.645z" />
+        <path
+            android:name="bar0"
+            android:fill="#FF555555"
+            android:pathData="M0,20.502l6.999,7.071   c23.196 -23.431,60.806 -23.431,84.002,0L98,20.503C70.938 -6.834,27.063 -6.834,0,20.502z" />
+    </group>
+    <group>
+        <path
+            android:name="bar3"
+            android:fill="#FFFFFFFF"
+            android:pathData="M49.001,60c-5.466,0 -9.899,4.478 -9.899,10s4.434,10,9.899,10c5.468,0,9.899 -4.478,9.899 -10S54.469,60,49.001,60z" />
+        <path
+            android:name="bar2"
+            android:fill="#FFFFFFFF"
+            android:pathData="M28.001,48.787l7,7.07c7.731 -7.811,20.269 -7.81,28.001,0l6.999 -7.07C58.403,37.071,39.599,37.071,28.001,48.787z" />
+        <path
+            android:name="bar1"
+            android:fill="#FFFFFFFF"
+            android:pathData="M14.001,34.645   L21,41.716c15.464 -15.621,40.536 -15.621,56,0l7.001 -7.071C64.672,15.119,33.33,15.119,14.001,34.645z" />
+        <path
+            android:name="bar0"
+            android:fill="#FFFFFFFF"
+            android:pathData="M0,20.502l6.999,7.071   c23.196 -23.431,60.806 -23.431,84.002,0L98,20.503C70.938 -6.834,27.063 -6.834,0,20.502z" />
+    </group>
+
+    <animation
+        android:durations="500,500,500"
+        android:sequence="bar0,bar0,bar0,bar0" />
+    <animation
+        android:durations="500,500,500"
+        android:sequence="bar1,bar1,bar1,bar1" />
+    <animation
+        android:durations="500,500,500"
+        android:sequence="bar2,bar2,bar2,bar2" />
+    <animation
+        android:durations="500,500,500"
+        android:sequence="bar3,bar3,bar3,bar3" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable11.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable11.xml
new file mode 100644
index 0000000..a4403c5
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable11.xml
@@ -0,0 +1,60 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="80"
+        android:viewportWidth="40" />
+
+    <group>
+        <path
+            android:name="battery"
+            android:fill="#3388ff"
+            android:pathData="M 20.28125,2.0000002 C 17.352748,2.0000002 15,4.3527485 15,7.2812502 L 15,8.0000002 L 13.15625,8.0000002 C 9.7507553,8.0000002 7,10.750759 7,14.15625 L 7,39.84375 C 7,43.24924 9.7507558,46 13.15625,46 L 33.84375,46 C 37.249245,46 39.999999,43.24924 40,39.84375 L 40,14.15625 C 40,10.75076 37.249243,8.0000002 33.84375,8.0000002 L 32,8.0000002 L 32,7.2812502 C 32,4.3527485 29.647252,2.0000002 26.71875,2.0000002 L 20.28125,2.0000002 z"
+            android:rotation="0"
+            android:stroke="#ff8833"
+            android:strokeWidth="1" />
+        <path
+            android:name="spark"
+            android:fill="#FFFF0000"
+            android:pathData="M 30,18.031528 L 25.579581,23.421071 L 29.370621,26.765348 L 20.096792,37 L 21.156922,28.014053 L 17,24.902844 L 20.880632,18 L 30,18.031528 z" />
+    </group>
+    <group>
+        <path
+            android:name="battery"
+            android:fill="#ff8833"
+            android:pathData="M 20.28125,2.0000002 C 17.352748,2.0000002 15,4.3527485 15,7.2812502 L 15,8.0000002 L 13.15625,8.0000002 C 9.7507553,8.0000002 7,10.750759 7,14.15625 L 7,39.84375 C 7,43.24924 9.7507558,46 13.15625,46 L 33.84375,46 C 37.249245,46 39.999999,43.24924 40,39.84375 L 40,14.15625 C 40,10.75076 37.249243,8.0000002 33.84375,8.0000002 L 32,8.0000002 L 32,7.2812502 C 32,4.3527485 29.647252,2.0000002 26.71875,2.0000002 L 20.28125,2.0000002 z"
+            android:rotation="0"
+            android:stroke="#3388ff"
+            android:strokeWidth="1" />
+        <path
+            android:name="spark"
+            android:fill="#FFFF0000"
+            android:pathData="M 30,18.031528 L 25.579581,23.421071 L 29.370621,26.765348 L 20.096792,37 L 21.156922,28.014053 L 17,24.902844 L 20.880632,18 L 30,18.031528 z" />
+    </group>
+
+    <animation
+        android:durations="2000"
+        android:sequence="spark,spark" />
+    <animation
+        android:durations="2000"
+        android:sequence="battery,battery" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable12.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable12.xml
new file mode 100644
index 0000000..207879d
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable12.xml
@@ -0,0 +1,87 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="600"
+        android:viewportWidth="600" />
+
+    <group>
+        <path
+            android:name="pie1"
+            android:pathData="M300,70 a230,230 0 1,0 1,0 z"
+            android:stroke="#FF00FF00"
+            android:strokeWidth="70"
+            android:trimPathEnd=".75"
+            android:trimPathOffset="0"
+            android:trimPathStart="0" />
+        <path
+            android:name="v"
+            android:fill="#FF00FF00"
+            android:pathData="M300,70 l 0,-70 70,70 -70,70z"
+            android:pivotX="300"
+            android:pivotY="300"
+            android:rotation="0" />
+    </group>
+    <group>
+        <path
+            android:name="v"
+            android:pathData="M300,70 l 0,-70 70,70 -70,70z"
+            android:pivotX="300"
+            android:pivotY="300"
+            android:rotation="360" />
+        <path
+            android:name="pie2"
+            android:pathData="M300,70 a230,230 0 1,0 1,0 z"
+            android:pivotX="300"
+            android:pivotY="300"
+            android:rotation="360"
+            android:stroke="#FF00FF00"
+            android:strokeLineCap="round"
+            android:strokeWidth="70"
+            android:trimPathEnd=".5"
+            android:trimPathOffset="0"
+            android:trimPathStart="0" />
+    </group>
+
+    <animation
+        android:animate="easeInOut"
+        android:durations="2000"
+        android:repeatCount="-1"
+        android:repeatStyle="forward"
+        android:sequence="pie1,pie2"
+        android:startOffset="500" />
+    <animation
+        android:animate="easeInOut"
+        android:durations="2000"
+        android:repeatCount="-1"
+        android:repeatStyle="forward"
+        android:sequence="v,v"
+        android:startOffset="500" />
+    <animation
+        android:animate="easeInOut"
+        android:durations="2800"
+        android:limitTo="trimPathEnd"
+        android:repeatCount="-1"
+        android:repeatStyle="reverse"
+        android:sequence="pie1,pie2"
+        android:startOffset="500" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable13.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable13.xml
new file mode 100644
index 0000000..4a2ed90
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable13.xml
@@ -0,0 +1,79 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="400"
+        android:viewportWidth="600" />
+
+    <group>
+        <path
+            android:name="pie1"
+            android:fill="#ffffffff"
+            android:pathData="M300,200 h-150 a150,150 0 1,0 150,-150 z"
+            android:stroke="#FF00FF00"
+            android:strokeWidth="1" />
+        <path
+            android:name="half"
+            android:fill="#FFFF0000"
+            android:pathData="M275,175 v-150 a150,150 0 0,0 -150,150 z"
+            android:pivotX="300"
+            android:pivotY="200"
+            android:rotation="0"
+            android:stroke="#FF0000FF"
+            android:strokeWidth="5" />
+    </group>
+    <group>
+        <path
+            android:name="pie2"
+            android:fill="#ffff0000"
+            android:pathData="M300,200 h-150 a150,150 0 1,0 150,-150 z"
+            android:pivotX="300"
+            android:pivotY="200"
+            android:rotation="360"
+            android:stroke="#FF00FF00"
+            android:strokeWidth="10" />
+        <path
+            android:name="half"
+            android:fill="#FFFFFF00"
+            android:pathData="M275,175 v-150 a150,150 0 0,0 -150,150 z"
+            android:pivotX="300"
+            android:pivotY="200"
+            android:rotation="-360"
+            android:stroke="#FF0000FF"
+            android:strokeWidth="5" />
+    </group>
+
+    <animation
+        android:animate="easeInOut"
+        android:durations="1000"
+        android:repeatCount="2"
+        android:repeatStyle="forward"
+        android:sequence="pie1,pie2"
+        android:startOffset="500" />
+    <animation
+        android:animate="easeInOut"
+        android:durations="1000"
+        android:repeatCount="5"
+        android:repeatStyle="forward"
+        android:sequence="half,half"
+        android:startOffset="500" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable14.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable14.xml
new file mode 100644
index 0000000..6ebd56b
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable14.xml
@@ -0,0 +1,54 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="500"
+        android:viewportWidth="800" />
+
+    <group>
+        <path
+            android:name="pie1"
+            android:pathData="M200,450 l 50,-25
+           a25,25 -30 0,1 100,-50 l 50,-25
+           a25,50 -30 0,1 100,-50 l 50,-25
+           a25,75 -30 0,1 100,-50 l 50,-25
+           a25,100 -30 0,1 100,-50 l 50,-25"
+            android:stroke="#FF00FF00"
+            android:strokeWidth="10" />
+    </group>
+    <group>
+        <path
+            android:name="pie2"
+            android:pathData="M200,350 l 50,-25
+           a25,12 -30 0,1 100,-50 l 50,-25
+           a25,25 -30 0,1 100,-50 l 50,-25
+           a25,37 -30 0,1 100,-50 l 50,-25
+           a25,50 -30 0,1 100,-50 l 50,-25"
+            android:pivotX="90"
+            android:pivotY="100"
+            android:rotation="20"
+            android:stroke="#FF00FF00"
+            android:strokeWidth="10" />
+    </group>
+
+    <animation android:sequence="pie1,pie2" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable15.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable15.xml
new file mode 100644
index 0000000..3c92d25
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable15.xml
@@ -0,0 +1,48 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="400"
+        android:viewportWidth="500" />
+
+    <group>
+        <path
+            android:name="arrow"
+            android:fill="#ffffffff"
+            android:pathData="M100,200 C100,100 250,100 250,200 S400,300 400,200"
+            android:stroke="#FFFF0000"
+            android:strokeWidth="1" />
+    </group>
+    <group>
+        <path
+            android:name="house"
+            android:fill="#ff440000"
+            android:pathData="M100,200 C100,100 250,100 250,200 S400,300 400,200"
+            android:pivotX="250"
+            android:pivotY="200"
+            android:rotation="180"
+            android:stroke="#FFFF0000"
+            android:strokeWidth="10" />
+    </group>
+
+    <animation android:sequence="arrow,house" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable16.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable16.xml
new file mode 100644
index 0000000..7e757a5
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable16.xml
@@ -0,0 +1,46 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="200"
+        android:viewportWidth="200" />
+
+    <group>
+        <path
+            android:name="arrow"
+            android:pathData="M 100,10 v 180 M 10,100 h 180"
+            android:stroke="#FF00FF00"
+            android:strokeWidth="1" />
+    </group>
+    <group>
+        <path
+            android:name="house"
+            android:pathData="M 100,10 v 90 M 10,100 h 90"
+            android:pivotX="100"
+            android:pivotY="100"
+            android:rotation="360"
+            android:stroke="#FF00FF00"
+            android:strokeWidth="10" />
+    </group>
+
+    <animation android:sequence="arrow,house" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable17.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable17.xml
new file mode 100644
index 0000000..9427652
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable17.xml
@@ -0,0 +1,46 @@
+<!-- Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+            android:width="64dp"
+            android:height="64dp"/>
+
+    <viewport android:viewportWidth="1200"
+          android:viewportHeight="600"/>
+
+    <group>
+        <path
+                android:name="arrow"
+                android:pathData="M200,300 Q400,50 600,300 T1000,300"
+                android:stroke="#FF00FF00"
+                android:strokeWidth="1"/>
+    </group>
+
+    <group>
+        <path
+                android:name="house"
+                android:pathData="M200,300 Q400,50 600,300 T1000,300"
+                android:stroke="#FFFF0000"
+                android:strokeWidth="10"
+                android:rotation="360"
+                android:pivotX="600"
+                android:pivotY="300"/>
+    </group>
+
+    <animation android:sequence="arrow,house"/>
+
+
+</vector>
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable18.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable18.xml
new file mode 100644
index 0000000..69212f5
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable18.xml
@@ -0,0 +1,45 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="400"
+        android:viewportWidth="500" />
+
+    <group>
+        <path
+            android:name="arrow"
+            android:pathData="M100,200 C100,100 250,100 250,200 S400,300 400,200"
+            android:stroke="#FFFFFF00"
+            android:strokeWidth="10" />
+    </group>
+    <group>
+        <path
+            android:name="house"
+            android:pathData="M100,200 C100,100 250,100 250,200 S400,300 400,200"
+            android:pivotX="250"
+            android:pivotY="200"
+            android:rotation="360"
+            android:strokeWidth="10" />
+    </group>
+
+    <animation android:sequence="arrow,house" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable19.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable19.xml
new file mode 100644
index 0000000..2dca48d
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable19.xml
@@ -0,0 +1,45 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="800"
+        android:viewportWidth="1000" />
+
+    <group>
+        <path
+            android:name="arrow"
+            android:pathData="M10,300 Q400,50 600,300 T1000,300"
+            android:stroke="#FF00FFFF"
+            android:strokeWidth="40" />
+    </group>
+    <group>
+        <path
+            android:name="house"
+            android:pathData="M10,300 Q400,550 600,300 T1000,300"
+            android:pivotX="90"
+            android:pivotY="100"
+            android:stroke="#FFFF0000"
+            android:strokeWidth="60" />
+    </group>
+
+    <animation android:sequence="arrow,house" />
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_drawable20.xml b/tests/VectorDrawableTest/res/drawable/vector_drawable20.xml
new file mode 100644
index 0000000..b8af7e2
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_drawable20.xml
@@ -0,0 +1,38 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="480"
+        android:viewportWidth="480" />
+
+    <group>
+        <path
+            android:name="edit"
+            android:fill="#FF00FFFF"
+            android:pathData="M406.667,180c0,0 -100 -100 -113.334 -113.333
+    c-13.333 -13.334 -33.333,0 -33.333,0l-160,160c0,0 -40,153.333 -40,173.333c0,13.333,13.333,13.333,13.333,13.333l173.334 -40
+    c0,0,146.666 -146.666,160 -160C420,200,406.667,180,406.667,180z M226.399,356.823L131.95,378.62l-38.516 -38.522
+    c7.848 -34.675,20.152 -82.52,23.538 -95.593l3.027,2.162l106.667,106.666L226.399,356.823z"
+            android:stroke="#FF000000"
+            android:strokeWidth="10" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_icon_create.xml b/tests/VectorDrawableTest/res/drawable/vector_icon_create.xml
new file mode 100644
index 0000000..22ce795
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_icon_create.xml
@@ -0,0 +1,32 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="24"
+        android:viewportWidth="24" />
+
+    <group>
+        <path
+            android:fill="#FF000000"
+            android:pathData="M3.0,17.25L3.0,21.0l3.75,0.0L17.813995,9.936001l-3.75,-3.75L3.0,17.25zM20.707,7.0429993c0.391,-0.391 0.391,-1.023 0.0,-1.414l-2.336,-2.336c-0.391,-0.391 -1.023,-0.391 -1.414,0.0l-1.832,1.832l3.75,3.75L20.707,7.0429993z" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_icon_delete.xml b/tests/VectorDrawableTest/res/drawable/vector_icon_delete.xml
new file mode 100644
index 0000000..042173c
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_icon_delete.xml
@@ -0,0 +1,32 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="24"
+        android:viewportWidth="24" />
+
+    <group>
+        <path
+            android:fill="#FF000000"
+            android:pathData="M6.0,19.0c0.0,1.104 0.896,2.0 2.0,2.0l8.0,0.0c1.104,0.0 2.0,-0.896 2.0,-2.0l0.0,-12.0L6.0,7.0L6.0,19.0zM18.0,4.0l-2.5,0.0l-1.0,-1.0l-5.0,0.0l-1.0,1.0L6.0,4.0C5.4469986,4.0 5.0,4.4469986 5.0,5.0l0.0,1.0l14.0,0.0l0.0,-1.0C19.0,4.4469986 18.552002,4.0 18.0,4.0z" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_icon_heart.xml b/tests/VectorDrawableTest/res/drawable/vector_icon_heart.xml
new file mode 100644
index 0000000..6b6f43d
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_icon_heart.xml
@@ -0,0 +1,32 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="24"
+        android:viewportWidth="24" />
+
+    <group>
+        <path
+            android:fill="#FF000000"
+            android:pathData="M16.0,5.0c-1.955,0.0 -3.83,1.268 -4.5,3.0c-0.67,-1.732 -2.547,-3.0 -4.5,-3.0C4.4570007,5.0 2.5,6.931999 2.5,9.5c0.0,3.529 3.793,6.258 9.0,11.5c5.207,-5.242 9.0,-7.971 9.0,-11.5C20.5,6.931999 18.543,5.0 16.0,5.0z" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_icon_schedule.xml b/tests/VectorDrawableTest/res/drawable/vector_icon_schedule.xml
new file mode 100644
index 0000000..ba8ebca
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_icon_schedule.xml
@@ -0,0 +1,35 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="24"
+        android:viewportWidth="24" />
+
+    <group>
+        <path
+            android:fillOpacity="0.9"
+            android:pathData="M11.994999,2.0C6.4679985,2.0 2.0,6.4780006 2.0,12.0s4.468,10.0 9.995,10.0S22.0,17.522 22.0,12.0S17.521,2.0 11.994999,2.0zM12.0,20.0c-4.42,0.0 -8.0,-3.582 -8.0,-8.0s3.58,-8.0 8.0,-8.0s8.0,3.582 8.0,8.0S16.419998,20.0 12.0,20.0z" />
+        <path
+            android:fillOpacity="0.9"
+            android:pathData="M12.5,6.0l-1.5,0.0 0.0,7.0 5.3029995,3.1819992 0.75,-1.249999 -4.5529995,-2.7320004z" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_icon_settings.xml b/tests/VectorDrawableTest/res/drawable/vector_icon_settings.xml
new file mode 100644
index 0000000..896a938
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_icon_settings.xml
@@ -0,0 +1,32 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="64dp"
+        android:width="64dp" />
+
+    <viewport
+        android:viewportHeight="24"
+        android:viewportWidth="24" />
+
+    <group>
+        <path
+            android:fill="#FF000000"
+            android:pathData="M19.429,12.975998c0.042,-0.32 0.07,-0.645 0.07,-0.976s-0.029,-0.655 -0.07,-0.976l2.113,-1.654c0.188,-0.151 0.243,-0.422 0.118,-0.639l-2.0,-3.463c-0.125,-0.217 -0.386,-0.304 -0.612,-0.218l-2.49,1.004c-0.516,-0.396 -1.081,-0.731 -1.69,-0.984l-0.375,-2.648C14.456,2.1829987 14.25,2.0 14.0,2.0l-4.0,0.0C9.75,2.0 9.544,2.1829987 9.506,2.422001L9.131,5.0699997C8.521,5.322998 7.957,5.6570015 7.44,6.054001L4.952,5.0509987C4.726,4.965 4.464,5.052002 4.34,5.269001l-2.0,3.463C2.2150002,8.947998 2.27,9.219002 2.4580002,9.369999l2.112,1.653C4.528,11.344002 4.5,11.668999 4.5,12.0s0.029,0.656 0.071,0.977L2.4580002,14.630001c-0.188,0.151 -0.243,0.422 -0.118,0.639l2.0,3.463c0.125,0.217 0.386,0.304 0.612,0.218l2.489,-1.004c0.516,0.396 1.081,0.731 1.69,0.984l0.375,2.648C9.544,21.817001 9.75,22.0 10.0,22.0l4.0,0.0c0.25,0.0 0.456,-0.183 0.494,-0.422l0.375,-2.648c0.609,-0.253 1.174,-0.588 1.689,-0.984l2.49,1.004c0.226,0.086 0.487,-0.001 0.612,-0.218l2.0,-3.463c0.125,-0.217 0.07,-0.487 -0.118,-0.639L19.429,12.975998zM12.0,16.0c-2.21,0.0 -4.0,-1.791 -4.0,-4.0c0.0,-2.21 1.79,-4.0 4.0,-4.0c2.208,0.0 4.0,1.79 4.0,4.0C16.0,14.209 14.208,16.0 12.0,16.0z" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_test01.xml b/tests/VectorDrawableTest/res/drawable/vector_test01.xml
new file mode 100644
index 0000000..a9091ab
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_test01.xml
@@ -0,0 +1,34 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="128dp"
+        android:width="128dp" />
+
+    <viewport
+        android:viewportHeight="512"
+        android:viewportWidth="512" />
+
+    <group>
+        <path
+            android:name="002b"
+            android:pathData="M100,200c0,-100 150,-100 150,0s150,100 150,0t-200,299"
+            android:stroke="#FF0000FF"
+            android:strokeWidth="4" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/drawable/vector_test02.xml b/tests/VectorDrawableTest/res/drawable/vector_test02.xml
new file mode 100644
index 0000000..ab58c06
--- /dev/null
+++ b/tests/VectorDrawableTest/res/drawable/vector_test02.xml
@@ -0,0 +1,34 @@
+<!--
+ Copyright (C) 2014 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android" >
+
+    <size
+        android:height="128dp"
+        android:width="128dp" />
+
+    <viewport
+        android:viewportHeight="512"
+        android:viewportWidth="512" />
+
+    <group>
+        <path
+            android:name="002b"
+            android:pathData="M100,200c0,-100 150,-100 150,0s150,100 150,0T-200,299"
+            android:stroke="#FF0000FF"
+            android:strokeWidth="4" />
+    </group>
+
+</vector>
\ No newline at end of file
diff --git a/tests/VectorDrawableTest/res/values/strings.xml b/tests/VectorDrawableTest/res/values/strings.xml
new file mode 100644
index 0000000..64163c2
--- /dev/null
+++ b/tests/VectorDrawableTest/res/values/strings.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<resources>
+</resources>
diff --git a/tests/VectorDrawableTest/res/values/styles.xml b/tests/VectorDrawableTest/res/values/styles.xml
new file mode 100644
index 0000000..460c0db
--- /dev/null
+++ b/tests/VectorDrawableTest/res/values/styles.xml
@@ -0,0 +1,16 @@
+<!-- Copyright (C) 2014 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.
+-->
+<resources>
+</resources>
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorCheckbox.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorCheckbox.java
new file mode 100644
index 0000000..0b3ea4d
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorCheckbox.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2014 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.android.test.dynamic;
+
+import android.app.Activity;
+import android.graphics.drawable.VectorDrawable;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.GridLayout;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class VectorCheckbox extends Activity {
+    private static final String LOGCAT = "VectorDrawable1";
+    int[] icon = {
+            R.drawable.vector_drawable01,
+            R.drawable.vector_drawable02,
+            R.drawable.vector_drawable03,
+            R.drawable.vector_drawable04,
+            R.drawable.vector_drawable05,
+            R.drawable.vector_drawable06,
+            R.drawable.vector_drawable07,
+            R.drawable.vector_drawable08,
+            R.drawable.vector_drawable09,
+            R.drawable.vector_drawable10,
+            R.drawable.vector_drawable11,
+            R.drawable.vector_drawable12,
+            R.drawable.vector_drawable13,
+            R.drawable.vector_drawable14,
+            R.drawable.vector_drawable15,
+            R.drawable.vector_drawable16,
+            R.drawable.vector_drawable17,
+            R.drawable.vector_drawable18,
+            R.drawable.vector_drawable19,
+            R.drawable.vector_drawable20
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        GridLayout container = new GridLayout(this);
+        container.setColumnCount(5);
+        container.setBackgroundColor(0xFF888888);
+        final Button []bArray = new Button[icon.length];
+
+        for (int i = 0; i < icon.length; i++) {
+            CheckBox checkBox = new CheckBox(this);
+            bArray[i] = checkBox;
+            checkBox.setWidth(200);
+            checkBox.setButtonDrawable(icon[i]);
+            container.addView(checkBox);
+        }
+        setContentView(container);
+    }
+}
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawable01.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawable01.java
new file mode 100644
index 0000000..88ae398
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawable01.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright (C) 2014 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.android.test.dynamic;
+
+import android.app.Activity;
+import android.graphics.drawable.VectorDrawable;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.GridLayout;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class VectorDrawable01 extends Activity implements View.OnClickListener {
+    private static final String LOGCAT = "VectorDrawable1";
+    int[] icon = {
+            R.drawable.vector_drawable01,
+            R.drawable.vector_drawable02,
+            R.drawable.vector_drawable03,
+            R.drawable.vector_drawable04,
+            R.drawable.vector_drawable05,
+            R.drawable.vector_drawable06,
+            R.drawable.vector_drawable07,
+            R.drawable.vector_drawable08,
+            R.drawable.vector_drawable09,
+            R.drawable.vector_drawable10,
+            R.drawable.vector_drawable11,
+            R.drawable.vector_drawable12,
+            R.drawable.vector_drawable13,
+            R.drawable.vector_drawable14,
+            R.drawable.vector_drawable15,
+            R.drawable.vector_drawable16,
+            R.drawable.vector_drawable17,
+            R.drawable.vector_drawable18,
+            R.drawable.vector_drawable19,
+            R.drawable.vector_drawable20
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        GridLayout container = new GridLayout(this);
+        container.setColumnCount(5);
+        container.setBackgroundColor(0xFF888888);
+        final Button []bArray = new Button[icon.length];
+
+        for (int i = 0; i < icon.length; i++) {
+            Button button = new Button(this);
+            bArray[i] = button;
+            button.setWidth(200);
+            button.setBackgroundResource(icon[i]);
+            container.addView(button);
+            button.setOnClickListener(this);
+        }
+        Button b = new Button(this);
+        b.setText("Run All");
+        b.setOnClickListener(new View.OnClickListener(){
+
+            @Override
+            public void onClick(View v) {
+                for (int i = 0; i < bArray.length; i++) {
+                    VectorDrawable d = (VectorDrawable)  bArray[i].getBackground();
+                    d.start();
+                }
+            }});
+        container.addView(b);
+        setContentView(container);
+
+    }
+
+    @Override
+    public void onClick(View v) {
+        VectorDrawable d = (VectorDrawable) v.getBackground();
+        d.start();
+    }
+
+}
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableDupPerf.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableDupPerf.java
new file mode 100644
index 0000000..a00bc5e
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableDupPerf.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2014 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.android.test.dynamic;
+
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class VectorDrawableDupPerf extends VectorDrawablePerformance {
+    {
+        icon = new int[]{
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+                R.drawable.vector_drawable04,
+        };
+    }
+}
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawablePerformance.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawablePerformance.java
new file mode 100644
index 0000000..3929298
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawablePerformance.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (C) 2014 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.android.test.dynamic;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.graphics.drawable.VectorDrawable;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Button;
+import android.widget.GridLayout;
+import android.widget.ScrollView;
+import java.text.DecimalFormat;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class VectorDrawablePerformance extends Activity implements View.OnClickListener {
+    private static final String LOGCAT = "VectorDrawable1";
+    protected int[] icon = {
+            R.drawable.vector_drawable01,
+            R.drawable.vector_drawable02,
+            R.drawable.vector_drawable03,
+            R.drawable.vector_drawable04,
+            R.drawable.vector_drawable05,
+            R.drawable.vector_drawable06,
+            R.drawable.vector_drawable07,
+            R.drawable.vector_drawable08,
+            R.drawable.vector_drawable09,
+            R.drawable.vector_drawable10,
+            R.drawable.vector_drawable11,
+            R.drawable.vector_drawable12,
+            R.drawable.vector_drawable13,
+            R.drawable.vector_drawable14,
+            R.drawable.vector_drawable15,
+            R.drawable.vector_drawable16,
+            R.drawable.vector_drawable17,
+            R.drawable.vector_drawable18,
+            R.drawable.vector_drawable19,
+            R.drawable.vector_drawable20
+    };
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        ScrollView scrollView = new ScrollView(this);
+        GridLayout container = new GridLayout(this);
+        scrollView.addView(container);
+        container.setColumnCount(5);
+        Resources res = this.getResources();
+        container.setBackgroundColor(0xFF888888);
+        VectorDrawable []d = new VectorDrawable[icon.length];
+        long time =  android.os.SystemClock.elapsedRealtimeNanos();
+        for (int i = 0; i < icon.length; i++) {
+             d[i] = VectorDrawable.create(res,icon[i]);
+        }
+        time =  android.os.SystemClock.elapsedRealtimeNanos()-time;
+        TextView t = new TextView(this);
+        DecimalFormat df = new DecimalFormat("#.##");
+        t.setText("avgL=" + df.format(time / (icon.length * 1000000.)) + " ms");
+        t.setBackgroundColor(0xFF000000);
+        container.addView(t);
+        time =  android.os.SystemClock.elapsedRealtimeNanos();
+        for (int i = 0; i < icon.length; i++) {
+            Button button = new Button(this);
+            button.setWidth(200);
+            button.setBackgroundResource(icon[i]);
+            container.addView(button);
+            button.setOnClickListener(this);
+        }
+        setContentView(scrollView);
+        time =  android.os.SystemClock.elapsedRealtimeNanos()-time;
+        t = new TextView(this);
+        t.setText("avgS=" + df.format(time / (icon.length * 1000000.)) + " ms");
+        t.setBackgroundColor(0xFF000000);
+        container.addView(t);
+    }
+
+    @Override
+    public void onClick(View v) {
+        VectorDrawable d = (VectorDrawable) v.getBackground();
+        d.start();
+    }
+}
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableStaticPerf.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableStaticPerf.java
new file mode 100644
index 0000000..9d3eded
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableStaticPerf.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2014 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.android.test.dynamic;
+
+import android.app.Activity;
+import android.content.res.Resources;
+import android.graphics.drawable.VectorDrawable;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.TextView;
+import android.widget.Button;
+import android.widget.GridLayout;
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class VectorDrawableStaticPerf extends VectorDrawablePerformance {
+    {
+        icon = new int[]{
+                R.drawable.vector_icon_create,
+                R.drawable.vector_icon_delete,
+                R.drawable.vector_icon_heart,
+                R.drawable.vector_icon_schedule,
+                R.drawable.vector_icon_settings,
+        };
+    }
+}
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableTest.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableTest.java
new file mode 100644
index 0000000..704d3d7
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorDrawableTest.java
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2014 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.android.test.dynamic;
+
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.ListView;
+import android.widget.SimpleAdapter;
+
+import java.text.Collator;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@SuppressWarnings("UnusedDeclaration")
+public class VectorDrawableTest extends android.app.ListActivity {
+    private static final String EXTRA_PATH = "com.android.test.dynamic.Path";
+    private static final String CATEGORY_HWUI_TEST = "com.android.test.dynamic.TEST";
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        Intent intent = getIntent();
+        String path = intent.getStringExtra("com.android.test.hwui.Path");
+
+        if (path == null) {
+            path = "";
+        }
+
+        setListAdapter(new SimpleAdapter(this, getData(path),
+                android.R.layout.simple_list_item_1, new String[] { "title" },
+                new int[] { android.R.id.text1 }));
+        getListView().setTextFilterEnabled(true);
+    }
+
+    protected List<Map<String, Object>> getData(String prefix) {
+        List<Map<String, Object>> myData = new ArrayList<Map<String, Object>>();
+
+        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
+        mainIntent.addCategory(CATEGORY_HWUI_TEST);
+
+        PackageManager pm = getPackageManager();
+        List<ResolveInfo> list = pm.queryIntentActivities(mainIntent, 0);
+
+        if (null == list)
+            return myData;
+
+        String[] prefixPath;
+        String prefixWithSlash = prefix;
+
+        if (prefix.equals("")) {
+            prefixPath = null;
+        } else {
+            prefixPath = prefix.split("/");
+            prefixWithSlash = prefix + "/";
+        }
+
+        int len = list.size();
+
+        Map<String, Boolean> entries = new HashMap<String, Boolean>();
+
+        for (int i = 0; i < len; i++) {
+            ResolveInfo info = list.get(i);
+            CharSequence labelSeq = info.loadLabel(pm);
+            String label = labelSeq != null
+                    ? labelSeq.toString()
+                            : info.activityInfo.name;
+
+                    if (prefixWithSlash.length() == 0 || label.startsWith(prefixWithSlash)) {
+
+                        String[] labelPath = label.split("/");
+
+                        String nextLabel = prefixPath == null ? labelPath[0] : labelPath[prefixPath.length];
+
+                        if ((prefixPath != null ? prefixPath.length : 0) == labelPath.length - 1) {
+                            addItem(myData, nextLabel, activityIntent(
+                                    info.activityInfo.applicationInfo.packageName,
+                                    info.activityInfo.name));
+                        } else {
+                            if (entries.get(nextLabel) == null) {
+                                addItem(myData, nextLabel, browseIntent(prefix.equals("") ?
+                                        nextLabel : prefix + "/" + nextLabel));
+                                entries.put(nextLabel, true);
+                            }
+                        }
+                    }
+        }
+
+        Collections.sort(myData, sDisplayNameComparator);
+
+        return myData;
+    }
+
+    private final static Comparator<Map<String, Object>> sDisplayNameComparator =
+            new Comparator<Map<String, Object>>() {
+        private final Collator collator = Collator.getInstance();
+
+        public int compare(Map<String, Object> map1, Map<String, Object> map2) {
+            return collator.compare(map1.get("title"), map2.get("title"));
+        }
+    };
+
+    protected Intent activityIntent(String pkg, String componentName) {
+        Intent result = new Intent();
+        result.setClassName(pkg, componentName);
+        return result;
+    }
+
+    protected Intent browseIntent(String path) {
+        Intent result = new Intent();
+        result.setClass(this, VectorDrawableTest.class);
+        result.putExtra(EXTRA_PATH, path);
+        return result;
+    }
+
+    protected void addItem(List<Map<String, Object>> data, String name, Intent intent) {
+        Map<String, Object> temp = new HashMap<String, Object>();
+        temp.put("title", name);
+        temp.put("intent", intent);
+        data.add(temp);
+    }
+
+    @Override
+    @SuppressWarnings({ "unchecked", "UnusedParameters" })
+    protected void onListItemClick(ListView l, View v, int position, long id) {
+        Map<String, Object> map = (Map<String, Object>)l.getItemAtPosition(position);
+
+        Intent intent = (Intent) map.get("intent");
+        startActivity(intent);
+    }
+}
diff --git a/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorPathChecking.java b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorPathChecking.java
new file mode 100644
index 0000000..3430192
--- /dev/null
+++ b/tests/VectorDrawableTest/src/com/android/test/dynamic/VectorPathChecking.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2014 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.android.test.dynamic;
+
+
+@SuppressWarnings({"UnusedDeclaration"})
+public class VectorPathChecking extends VectorDrawablePerformance {
+    {
+        icon = new int[]{
+                R.drawable.vector_test01,
+                R.drawable.vector_test02
+        };
+    }
+}
diff --git a/tests/VoiceInteraction/Android.mk b/tests/VoiceInteraction/Android.mk
new file mode 100644
index 0000000..8decca7
--- /dev/null
+++ b/tests/VoiceInteraction/Android.mk
@@ -0,0 +1,10 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+
+LOCAL_PACKAGE_NAME := VoiceInteraction
+
+include $(BUILD_PACKAGE)
diff --git a/tests/VoiceInteraction/AndroidManifest.xml b/tests/VoiceInteraction/AndroidManifest.xml
new file mode 100644
index 0000000..ac0f701
--- /dev/null
+++ b/tests/VoiceInteraction/AndroidManifest.xml
@@ -0,0 +1,33 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.android.test.voiceinteraction">
+
+    <application>
+        <activity android:name="VoiceInteractionMain" android:label="Voice Interaction">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+        <service android:name="MainInteractionService"
+                android:permission="android.permission.BIND_VOICE_INTERACTION"
+                android:process=":interactor">
+            <meta-data android:name="android.voice_interaction"
+                       android:resource="@xml/interaction_service" />
+            <intent-filter>
+                <action android:name="android.service.voice.VoiceInteractionService" />
+            </intent-filter>
+        </service>
+        <service android:name="MainInteractionSessionService"
+                android:permission="android.permission.BIND_VOICE_INTERACTION"
+                android:process=":session">
+        </service>
+        <activity android:name="TestInteractionActivity" android:label="Voice Interaction Target">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.VOICE" />
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/tests/VoiceInteraction/res/layout/main.xml b/tests/VoiceInteraction/res/layout/main.xml
new file mode 100644
index 0000000..3d7a418
--- /dev/null
+++ b/tests/VoiceInteraction/res/layout/main.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    >
+
+    <Button android:id="@+id/start"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/start"
+        />
+
+</LinearLayout>
+
+
diff --git a/tests/VoiceInteraction/res/layout/test_interaction.xml b/tests/VoiceInteraction/res/layout/test_interaction.xml
new file mode 100644
index 0000000..2abf65194
--- /dev/null
+++ b/tests/VoiceInteraction/res/layout/test_interaction.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    >
+
+    <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:text="We are interacting!"
+        />
+
+    <TextView android:id="@+id/log"
+        android:layout_width="match_parent"
+        android:layout_height="0px"
+        android:layout_weight="1"
+        android:layout_marginTop="10dp"
+        android:textSize="12sp"
+        android:textColor="#ffffffff"
+        />
+
+</LinearLayout>
diff --git a/tests/VoiceInteraction/res/values/strings.xml b/tests/VoiceInteraction/res/values/strings.xml
new file mode 100644
index 0000000..12edb31
--- /dev/null
+++ b/tests/VoiceInteraction/res/values/strings.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<resources>
+
+    <string name="start">Start!</string>
+
+</resources>
+
diff --git a/tests/VoiceInteraction/res/xml/interaction_service.xml b/tests/VoiceInteraction/res/xml/interaction_service.xml
new file mode 100644
index 0000000..45bd994d
--- /dev/null
+++ b/tests/VoiceInteraction/res/xml/interaction_service.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/**
+ * Copyright (c) 2014, 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.
+ */
+-->
+
+<voice-interaction-service xmlns:android="http://schemas.android.com/apk/res/android"
+    android:sessionService="com.android.test.voiceinteraction.MainInteractionSessionService" />
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionService.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionService.java
new file mode 100644
index 0000000..008d97b
--- /dev/null
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionService.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2014 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.android.test.voiceinteraction;
+
+import android.content.Intent;
+import android.service.voice.VoiceInteractionService;
+import android.util.Log;
+
+public class MainInteractionService extends VoiceInteractionService {
+    static final String TAG = "MainInteractionService";
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        Log.i(TAG, "Creating " + this);
+    }
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        startVoiceActivity(new Intent(this, TestInteractionActivity.class), null);
+        stopSelf(startId);
+        return START_NOT_STICKY;
+    }
+}
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
new file mode 100644
index 0000000..0fc563b3
--- /dev/null
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSession.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2014 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.android.test.voiceinteraction;
+
+import android.content.Context;
+import android.os.Bundle;
+import android.service.voice.VoiceInteractionSession;
+import android.util.Log;
+
+public class MainInteractionSession extends VoiceInteractionSession {
+    static final String TAG = "MainInteractionSession";
+
+    final Bundle mArgs;
+
+    MainInteractionSession(Context context, Bundle args) {
+        super(context);
+        mArgs = args;
+    }
+
+    @Override
+    public boolean[] onGetSupportedCommands(Caller caller, String[] commands) {
+        return new boolean[commands.length];
+    }
+
+    @Override
+    public void onConfirm(Caller caller, Request request, String prompt, Bundle extras) {
+        Log.i(TAG, "onConform: prompt=" + prompt + " extras=" + extras);
+        request.sendConfirmResult(true, null);
+    }
+
+    @Override
+    public void onCommand(Caller caller, Request request, String command, Bundle extras) {
+        Log.i(TAG, "onCommand: command=" + command + " extras=" + extras);
+        request.sendCommandResult(true, null);
+    }
+
+    @Override
+    public void onCancel(Request request) {
+        Log.i(TAG, "onCancel");
+        request.sendCancelResult();
+    }
+}
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSessionService.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSessionService.java
new file mode 100644
index 0000000..8864d71
--- /dev/null
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/MainInteractionSessionService.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2014 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.android.test.voiceinteraction;
+
+import android.os.Bundle;
+import android.service.voice.VoiceInteractionSession;
+import android.service.voice.VoiceInteractionSessionService;
+
+public class MainInteractionSessionService extends VoiceInteractionSessionService {
+    @Override
+    public VoiceInteractionSession onNewSession(Bundle args) {
+        return new MainInteractionSession(this, args);
+    }
+}
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/TestInteractionActivity.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/TestInteractionActivity.java
new file mode 100644
index 0000000..9c772ff
--- /dev/null
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/TestInteractionActivity.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2014 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.android.test.voiceinteraction;
+
+import android.app.Activity;
+import android.app.VoiceInteractor;
+import android.os.Bundle;
+import android.util.Log;
+
+public class TestInteractionActivity extends Activity {
+    static final String TAG = "TestInteractionActivity";
+
+    VoiceInteractor mInteractor;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        if (!isVoiceInteraction()) {
+            Log.w(TAG, "Not running as a voice interaction!");
+            finish();
+            return;
+        }
+
+        setContentView(R.layout.test_interaction);
+
+        mInteractor = getVoiceInteractor();
+        VoiceInteractor.ConfirmationRequest req = new VoiceInteractor.ConfirmationRequest(
+                "This is a confirmation", null) {
+            @Override
+            public void onCancel() {
+                Log.i(TAG, "Canceled!");
+                getActivity().finish();
+            }
+
+            @Override
+            public void onConfirmationResult(boolean confirmed, Bundle result) {
+                Log.i(TAG, "Confirmation result: confirmed=" + confirmed + " result=" + result);
+                getActivity().finish();
+            }
+        };
+        mInteractor.submitRequest(req);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+}
diff --git a/tests/VoiceInteraction/src/com/android/test/voiceinteraction/VoiceInteractionMain.java b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/VoiceInteractionMain.java
new file mode 100644
index 0000000..5d212a4
--- /dev/null
+++ b/tests/VoiceInteraction/src/com/android/test/voiceinteraction/VoiceInteractionMain.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 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.android.test.voiceinteraction;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.view.View;
+
+public class VoiceInteractionMain extends Activity {
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        setContentView(R.layout.main);
+        findViewById(R.id.start).setOnClickListener(mStartListener);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+    View.OnClickListener mStartListener = new View.OnClickListener() {
+        public void onClick(View v) {
+            startService(new Intent(VoiceInteractionMain.this, MainInteractionService.class));
+        }
+    };
+}
diff --git a/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java
index cceed16..3bd35a7 100644
--- a/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/ActivityManagerPermissionTests.java
@@ -37,7 +37,7 @@
     }
 
     @SmallTest
-	public void testREORDER_TASKS() {
+    public void testREORDER_TASKS() {
         try {
             mAm.moveTaskToFront(0, 0, null);
             fail("IActivityManager.moveTaskToFront did not throw SecurityException as"
@@ -67,7 +67,7 @@
         } catch (RemoteException e) {
             fail("Unexpected remote exception");
         }
-	}
+    }
 
     @SmallTest
     public void testCHANGE_CONFIGURATION() {
diff --git a/tests/permission/src/com/android/framework/permission/tests/PmPermissionsTests.java b/tests/permission/src/com/android/framework/permission/tests/PmPermissionsTests.java
index b690c45..93aa555 100644
--- a/tests/permission/src/com/android/framework/permission/tests/PmPermissionsTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/PmPermissionsTests.java
@@ -16,7 +16,7 @@
 
 package com.android.framework.permission.tests;
 
-import junit.framework.TestCase;
+import android.app.PackageInstallObserver;
 import android.content.pm.PackageManager;
 import android.test.AndroidTestCase;
 import android.test.suitebuilder.annotation.SmallTest;
@@ -68,10 +68,14 @@
      * This test verifies that PackageManger.installPackage enforces permission
      * android.permission.INSTALL_PACKAGES
      */
+    private class TestInstallObserver extends PackageInstallObserver {
+    }
+
     @SmallTest
     public void testInstallPackage() {
+        TestInstallObserver observer = new TestInstallObserver();
         try {
-            mPm.installPackage(null, null, 0, null);
+            mPm.installPackage(null, observer, 0, null);
             fail("PackageManager.installPackage" +
                     "did not throw SecurityException as expected");
         } catch (SecurityException e) {
diff --git a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
index 4dfe0fe..322b853 100644
--- a/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/ServiceManagerPermissionTests.java
@@ -32,7 +32,7 @@
  */
 public class ServiceManagerPermissionTests extends TestCase {
     @SmallTest
-	public void testAddService() {
+    public void testAddService() {
         try {
             // The security in the service manager is that you can't replace
             // a service that is already published.
@@ -43,7 +43,7 @@
         } catch (SecurityException e) {
             // expected
         }
-	}
+    }
 
     @SmallTest
     public void testSetPermissionController() {
diff --git a/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java b/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java
index 90b6abc..b12ed94 100644
--- a/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java
+++ b/tests/permission/src/com/android/framework/permission/tests/VibratorServicePermissionTest.java
@@ -18,6 +18,7 @@
 
 import junit.framework.TestCase;
 
+import android.media.AudioManager;
 import android.os.Binder;
 import android.os.IVibratorService;
 import android.os.Process;
@@ -47,7 +48,8 @@
      */
     public void testVibrate() throws RemoteException {
         try {
-            mVibratorService.vibrate(Process.myUid(), null, 2000, new Binder());
+            mVibratorService.vibrate(Process.myUid(), null, 2000, AudioManager.STREAM_ALARM,
+                    new Binder());
             fail("vibrate did not throw SecurityException as expected");
         } catch (SecurityException e) {
             // expected
@@ -63,7 +65,8 @@
      */
     public void testVibratePattern() throws RemoteException {
         try {
-            mVibratorService.vibratePattern(Process.myUid(), null, new long[] {0}, 0, new Binder());
+            mVibratorService.vibratePattern(Process.myUid(), null, new long[] {0}, 0,
+                    AudioManager.STREAM_ALARM, new Binder());
             fail("vibratePattern did not throw SecurityException as expected");
         } catch (SecurityException e) {
             // expected
diff --git a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
index df32ee1..6f5788a 100644
--- a/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
+++ b/tests/permission/src/com/android/framework/permission/tests/WindowManagerPermissionTests.java
@@ -41,7 +41,7 @@
     }
 
     @SmallTest
-	public void testMANAGE_APP_TOKENS() {
+    public void testMANAGE_APP_TOKENS() {
         try {
             mWm.pauseKeyDispatching(null);
             fail("IWindowManager.pauseKeyDispatching did not throw SecurityException as"
diff --git a/tools/aapt/AaptAssets.cpp b/tools/aapt/AaptAssets.cpp
index 1f17316..e0dab78 100644
--- a/tools/aapt/AaptAssets.cpp
+++ b/tools/aapt/AaptAssets.cpp
@@ -1803,6 +1803,11 @@
     return buf;
 }
 
+void* AaptFile::editDataInRange(size_t offset, size_t size)
+{
+    return (void*)(((uint8_t*) editData(offset + size)) + offset);
+}
+
 void* AaptFile::editData(size_t* outSize)
 {
     if (outSize) {
@@ -2383,6 +2388,9 @@
                     current->setFullResPaths(mFullResPaths);
                 }
                 count = current->slurpResourceTree(bundle, String8(res));
+                if (i > 0 && count > 0) {
+                  count = current->filter(bundle);
+                }
 
                 if (count < 0) {
                     totalCount = count;
diff --git a/tools/aapt/AaptAssets.h b/tools/aapt/AaptAssets.h
index 336d08b..82dda5f 100644
--- a/tools/aapt/AaptAssets.h
+++ b/tools/aapt/AaptAssets.h
@@ -251,6 +251,7 @@
     size_t getSize() const { return mDataSize; }
     void* editData(size_t size);
     void* editData(size_t* outSize = NULL);
+    void* editDataInRange(size_t offset, size_t size);
     void* padData(size_t wordSize);
     status_t writeData(const void* data, size_t size);
     void clearData();
diff --git a/tools/aapt/Bundle.h b/tools/aapt/Bundle.h
index 382cf5e..ebe1bed 100644
--- a/tools/aapt/Bundle.h
+++ b/tools/aapt/Bundle.h
@@ -60,7 +60,7 @@
           mForce(false), mGrayscaleTolerance(0), mMakePackageDirs(false),
           mUpdate(false), mExtending(false),
           mRequireLocalization(false), mPseudolocalize(NO_PSEUDOLOCALIZATION),
-          mWantUTF16(false), mValues(false),
+          mWantUTF16(false), mValues(false), mIncludeMetaData(false),
           mCompressionMethod(0), mJunkPath(false), mOutputAPKFile(NULL),
           mManifestPackageNameOverride(NULL), mInstrumentationPackageNameOverride(NULL),
           mAutoAddOverlay(false), mGenDependencies(false),
@@ -68,10 +68,12 @@
           mAndroidManifestFile(NULL), mPublicOutputFile(NULL),
           mRClassDir(NULL), mResourceIntermediatesDir(NULL), mManifestMinSdkVersion(NULL),
           mMinSdkVersion(NULL), mTargetSdkVersion(NULL), mMaxSdkVersion(NULL),
-          mVersionCode(NULL), mVersionName(NULL), mCustomPackage(NULL), mExtraPackages(NULL),
-          mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false), mProduct(NULL),
-          mUseCrunchCache(false), mErrorOnFailedInsert(false), mOutputTextSymbols(NULL),
+          mVersionCode(NULL), mVersionName(NULL), mReplaceVersion(false), mCustomPackage(NULL),
+          mExtraPackages(NULL), mMaxResVersion(NULL), mDebugMode(false), mNonConstantId(false),
+          mProduct(NULL), mUseCrunchCache(false), mErrorOnFailedInsert(false),
+          mErrorOnMissingConfigEntry(false), mOutputTextSymbols(NULL),
           mSingleCrunchInputFile(NULL), mSingleCrunchOutputFile(NULL),
+          mBuildSharedLibrary(false),
           mArgc(0), mArgv(NULL)
         {}
     ~Bundle(void) {}
@@ -107,6 +109,8 @@
     void setWantUTF16(bool val) { mWantUTF16 = val; }
     bool getValues(void) const { return mValues; }
     void setValues(bool val) { mValues = val; }
+    bool getIncludeMetaData(void) const { return mIncludeMetaData; }
+    void setIncludeMetaData(bool val) { mIncludeMetaData = val; }
     int getCompressionMethod(void) const { return mCompressionMethod; }
     void setCompressionMethod(int val) { mCompressionMethod = val; }
     bool getJunkPath(void) const { return mJunkPath; }
@@ -123,6 +127,8 @@
     void setGenDependencies(bool val) { mGenDependencies = val; }
     bool getErrorOnFailedInsert() { return mErrorOnFailedInsert; }
     void setErrorOnFailedInsert(bool val) { mErrorOnFailedInsert = val; }
+    bool getErrorOnMissingConfigEntry() { return mErrorOnMissingConfigEntry; }
+    void setErrorOnMissingConfigEntry(bool val) { mErrorOnMissingConfigEntry = val; }
 
     bool getUTF16StringsOption() {
         return mWantUTF16 || !isMinSdkAtLeast(SDK_FROYO);
@@ -170,6 +176,8 @@
     void setVersionCode(const char*  val) { mVersionCode = val; }
     const char* getVersionName() const { return mVersionName; }
     void setVersionName(const char* val) { mVersionName = val; }
+    bool getReplaceVersion() { return mReplaceVersion; }
+    void setReplaceVersion(bool val) { mReplaceVersion = val; }
     const char* getCustomPackage() const { return mCustomPackage; }
     void setCustomPackage(const char* val) { mCustomPackage = val; }
     const char* getExtraPackages() const { return mExtraPackages; }
@@ -190,6 +198,8 @@
     void setSingleCrunchInputFile(const char* val) { mSingleCrunchInputFile = val; }
     const char* getSingleCrunchOutputFile() const { return mSingleCrunchOutputFile; }
     void setSingleCrunchOutputFile(const char* val) { mSingleCrunchOutputFile = val; }
+    bool getBuildSharedLibrary() const { return mBuildSharedLibrary; }
+    void setBuildSharedLibrary(bool val) { mBuildSharedLibrary = val; }
 
     /*
      * Set and get the file specification.
@@ -261,6 +271,7 @@
     short       mPseudolocalize;
     bool        mWantUTF16;
     bool        mValues;
+    bool        mIncludeMetaData;
     int         mCompressionMethod;
     bool        mJunkPath;
     const char* mOutputAPKFile;
@@ -268,7 +279,6 @@
     const char* mInstrumentationPackageNameOverride;
     bool        mAutoAddOverlay;
     bool        mGenDependencies;
-    const char* mAssetSourceDir;
     const char* mCrunchedOutputDir;
     const char* mProguardFile;
     const char* mAndroidManifestFile;
@@ -289,6 +299,7 @@
     const char* mMaxSdkVersion;
     const char* mVersionCode;
     const char* mVersionName;
+    bool        mReplaceVersion;
     const char* mCustomPackage;
     const char* mExtraPackages;
     const char* mMaxResVersion;
@@ -297,9 +308,11 @@
     const char* mProduct;
     bool        mUseCrunchCache;
     bool        mErrorOnFailedInsert;
+    bool        mErrorOnMissingConfigEntry;
     const char* mOutputTextSymbols;
     const char* mSingleCrunchInputFile;
     const char* mSingleCrunchOutputFile;
+    bool        mBuildSharedLibrary;
 
     /* file specification */
     int         mArgc;
diff --git a/tools/aapt/Command.cpp b/tools/aapt/Command.cpp
index 34292fe..0af1ce1 100644
--- a/tools/aapt/Command.cpp
+++ b/tools/aapt/Command.cpp
@@ -25,8 +25,9 @@
  */
 int doVersion(Bundle* bundle)
 {
-    if (bundle->getFileSpecCount() != 0)
+    if (bundle->getFileSpecCount() != 0) {
         printf("(ignoring extra arguments)\n");
+    }
     printf("Android Asset Packaging Tool, v0.2\n");
 
     return 0;
@@ -46,13 +47,14 @@
     zip = new ZipFile;
     result = zip->open(fileName, ZipFile::kOpenReadOnly);
     if (result != NO_ERROR) {
-        if (result == NAME_NOT_FOUND)
+        if (result == NAME_NOT_FOUND) {
             fprintf(stderr, "ERROR: '%s' not found\n", fileName);
-        else if (result == PERMISSION_DENIED)
+        } else if (result == PERMISSION_DENIED) {
             fprintf(stderr, "ERROR: '%s' access denied\n", fileName);
-        else
+        } else {
             fprintf(stderr, "ERROR: failed opening '%s' as Zip file\n",
                 fileName);
+        }
         delete zip;
         return NULL;
     }
@@ -73,8 +75,9 @@
     int flags;
 
     flags = ZipFile::kOpenReadWrite;
-    if (okayToCreate)
+    if (okayToCreate) {
         flags |= ZipFile::kOpenCreate;
+    }
 
     zip = new ZipFile;
     result = zip->open(fileName, flags);
@@ -94,12 +97,13 @@
  */
 const char* compressionName(int method)
 {
-    if (method == ZipEntry::kCompressStored)
+    if (method == ZipEntry::kCompressStored) {
         return "Stored";
-    else if (method == ZipEntry::kCompressDeflated)
+    } else if (method == ZipEntry::kCompressDeflated) {
         return "Deflated";
-    else
+    } else {
         return "Unknown";
+    }
 }
 
 /*
@@ -107,10 +111,11 @@
  */
 int calcPercent(long uncompressedLen, long compressedLen)
 {
-    if (!uncompressedLen)
+    if (!uncompressedLen) {
         return 0;
-    else
+    } else {
         return (int) (100.0 - (compressedLen * 100.0) / uncompressedLen + 0.5);
+    }
 }
 
 /*
@@ -135,8 +140,9 @@
     zipFileName = bundle->getFileSpecEntry(0);
 
     zip = openReadOnly(zipFileName);
-    if (zip == NULL)
+    if (zip == NULL) {
         goto bail;
+    }
 
     int count, i;
 
@@ -248,7 +254,9 @@
     Res_value value;
     if (tree.getAttributeValue(idx, &value) != NO_ERROR) {
         if (value.dataType != Res_value::TYPE_STRING) {
-            if (outError != NULL) *outError = "attribute is not a string value";
+            if (outError != NULL) {
+                *outError = "attribute is not a string value";
+            }
             return String8();
         }
     }
@@ -266,7 +274,9 @@
     Res_value value;
     if (tree.getAttributeValue(idx, &value) != NO_ERROR) {
         if (value.dataType != Res_value::TYPE_STRING) {
-            if (outError != NULL) *outError = "attribute is not a string value";
+            if (outError != NULL) {
+                *outError = "attribute is not a string value";
+            }
             return String8();
         }
     }
@@ -286,7 +296,9 @@
     if (tree.getAttributeValue(idx, &value) != NO_ERROR) {
         if (value.dataType < Res_value::TYPE_FIRST_INT
                 || value.dataType > Res_value::TYPE_LAST_INT) {
-            if (outError != NULL) *outError = "attribute is not an integer value";
+            if (outError != NULL) {
+                *outError = "attribute is not an integer value";
+            }
             return defValue;
         }
     }
@@ -307,7 +319,9 @@
         }
         if (value.dataType < Res_value::TYPE_FIRST_INT
                 || value.dataType > Res_value::TYPE_LAST_INT) {
-            if (outError != NULL) *outError = "attribute is not an integer value";
+            if (outError != NULL) {
+                *outError = "attribute is not an integer value";
+            }
             return defValue;
         }
     }
@@ -330,7 +344,9 @@
         }
         resTable->resolveReference(&value, 0);
         if (value.dataType != Res_value::TYPE_STRING) {
-            if (outError != NULL) *outError = "attribute is not a string value";
+            if (outError != NULL) {
+                *outError = "attribute is not a string value";
+            }
             return String8();
         }
     }
@@ -340,6 +356,49 @@
     return str ? String8(str, len) : String8();
 }
 
+static void getResolvedResourceAttribute(Res_value* value, const ResTable* resTable,
+        const ResXMLTree& tree, uint32_t attrRes, String8* outError)
+{
+    ssize_t idx = indexOfAttribute(tree, attrRes);
+    if (idx < 0) {
+        if (outError != NULL) {
+            *outError = "attribute could not be found";
+        }
+        return;
+    }
+    if (tree.getAttributeValue(idx, value) != NO_ERROR) {
+        if (value->dataType == Res_value::TYPE_REFERENCE) {
+            resTable->resolveReference(value, 0);
+        }
+        // The attribute was found and was resolved if need be.
+        return;
+    }
+    if (outError != NULL) {
+        *outError = "error getting resolved resource attribute";
+    }
+}
+
+static void printResolvedResourceAttribute(const ResTable* resTable, const ResXMLTree& tree,
+        uint32_t attrRes, String8 attrLabel, String8* outError)
+{
+    Res_value value;
+    getResolvedResourceAttribute(&value, resTable, tree, attrRes, outError);
+    if (*outError != "") {
+        *outError = "error print resolved resource attribute";
+        return;
+    }
+    if (value.dataType == Res_value::TYPE_STRING) {
+        String8 result = getResolvedAttribute(resTable, tree, attrRes, outError);
+        printf("%s='%s'", attrLabel.string(),
+                ResTable::normalizeForOutput(result.string()).string());
+    } else if (Res_value::TYPE_FIRST_INT <= value.dataType &&
+            value.dataType <= Res_value::TYPE_LAST_INT) {
+        printf("%s='%d'", attrLabel.string(), value.data);
+    } else {
+        printf("%s='0x%x'", attrLabel.string(), (int)value.data);
+    }
+}
+
 // These are attribute resource constants for the platform, as found
 // in android.R.attr
 enum {
@@ -349,6 +408,7 @@
     PERMISSION_ATTR = 0x01010006,
     RESOURCE_ATTR = 0x01010025,
     DEBUGGABLE_ATTR = 0x0101000f,
+    VALUE_ATTR = 0x01010024,
     VERSION_CODE_ATTR = 0x0101021b,
     VERSION_NAME_ATTR = 0x0101021c,
     SCREEN_ORIENTATION_ATTR = 0x0101001e,
@@ -378,7 +438,7 @@
     BANNER_ATTR = 0x10103f2,
 };
 
-const char *getComponentName(String8 &pkgName, String8 &componentName) {
+String8 getComponentName(String8 &pkgName, String8 &componentName) {
     ssize_t idx = componentName.find(".");
     String8 retStr(pkgName);
     if (idx == 0) {
@@ -387,9 +447,9 @@
         retStr += ".";
         retStr += componentName;
     } else {
-        return componentName.string();
+        return componentName;
     }
-    return retStr.string();
+    return retStr;
 }
 
 static void printCompatibleScreens(ResXMLTree& tree) {
@@ -428,6 +488,29 @@
     printf("\n");
 }
 
+static void printUsesPermission(const String8& name, bool optional=false, int maxSdkVersion=-1) {
+    printf("uses-permission: name='%s'", ResTable::normalizeForOutput(name.string()).string());
+    if (maxSdkVersion != -1) {
+         printf(" maxSdkVersion='%d'", maxSdkVersion);
+    }
+    printf("\n");
+
+    if (optional) {
+        printf("optional-permission: name='%s'",
+                ResTable::normalizeForOutput(name.string()).string());
+        if (maxSdkVersion != -1) {
+            printf(" maxSdkVersion='%d'", maxSdkVersion);
+        }
+        printf("\n");
+    }
+}
+
+static void printUsesImpliedPermission(const String8& name, const String8& reason) {
+    printf("uses-implied-permission: name='%s' reason='%s'\n",
+            ResTable::normalizeForOutput(name.string()).string(),
+            ResTable::normalizeForOutput(reason.string()).string());
+}
+
 Vector<String8> getNfcAidCategories(AssetManager& assets, String8 xmlPath, bool offHost,
         String8 *outError = NULL)
 {
@@ -635,7 +718,7 @@
                         goto bail;
                     }
                     String8 pkg = getAttribute(tree, NULL, "package", NULL);
-                    printf("package: %s\n", pkg.string());
+                    printf("package: %s\n", ResTable::normalizeForOutput(pkg.string()).string());
                 } else if (depth == 2 && tag == "permission") {
                     String8 error;
                     String8 name = getAttribute(tree, NAME_ATTR, &error);
@@ -643,7 +726,8 @@
                         fprintf(stderr, "ERROR: %s\n", error.string());
                         goto bail;
                     }
-                    printf("permission: %s\n", name.string());
+                    printf("permission: %s\n",
+                            ResTable::normalizeForOutput(name.string()).string());
                 } else if (depth == 2 && tag == "uses-permission") {
                     String8 error;
                     String8 name = getAttribute(tree, NAME_ATTR, &error);
@@ -651,11 +735,9 @@
                         fprintf(stderr, "ERROR: %s\n", error.string());
                         goto bail;
                     }
-                    printf("uses-permission: %s\n", name.string());
-                    int req = getIntegerAttribute(tree, REQUIRED_ATTR, NULL, 1);
-                    if (!req) {
-                        printf("optional-permission: %s\n", name.string());
-                    }
+                    printUsesPermission(name,
+                            getIntegerAttribute(tree, REQUIRED_ATTR, NULL, 1) == 0,
+                            getIntegerAttribute(tree, MAX_SDK_VERSION_ATTR, NULL, -1));
                 }
             }
         } else if (strcmp("badging", option) == 0) {
@@ -668,7 +750,9 @@
             const size_t NC = configs.size();
             for (size_t i=0; i<NC; i++) {
                 int dens = configs[i].density;
-                if (dens == 0) dens = 160;
+                if (dens == 0) {
+                    dens = 160;
+                }
                 densities.add(dens);
             }
 
@@ -802,7 +886,8 @@
                             printf("supports-input: '");
                             const size_t N = supportedInput.size();
                             for (size_t i=0; i<N; i++) {
-                                printf("%s", supportedInput[i].string());
+                                printf("%s", ResTable::normalizeForOutput(
+                                        supportedInput[i].string()).string());
                                 if (i != N - 1) {
                                     printf("' '");
                                 } else {
@@ -815,25 +900,27 @@
                         withinSupportsInput = false;
                     } else if (depth < 3) {
                         if (withinActivity && isMainActivity) {
-                            const char *aName = getComponentName(pkg, activityName);
+                            String8 aName(getComponentName(pkg, activityName));
                             if (isLauncherActivity) {
                                 printf("launchable-activity:");
-                                if (aName != NULL) {
-                                    printf(" name='%s' ", aName);
+                                if (aName.length() > 0) {
+                                    printf(" name='%s' ",
+                                            ResTable::normalizeForOutput(aName.string()).string());
                                 }
                                 printf(" label='%s' icon='%s'\n",
-                                        activityLabel.string(),
-                                        activityIcon.string());
+                                        ResTable::normalizeForOutput(activityLabel.string()).string(),
+                                        ResTable::normalizeForOutput(activityIcon.string()).string());
                             }
                             if (isLeanbackLauncherActivity) {
                                 printf("leanback-launchable-activity:");
-                                if (aName != NULL) {
-                                    printf(" name='%s' ", aName);
+                                if (aName.length() > 0) {
+                                    printf(" name='%s' ",
+                                            ResTable::normalizeForOutput(aName.string()).string());
                                 }
                                 printf(" label='%s' icon='%s' banner='%s'\n",
-                                        activityLabel.string(),
-                                        activityIcon.string(),
-                                        activityBanner.string());
+                                        ResTable::normalizeForOutput(activityLabel.string()).string(),
+                                        ResTable::normalizeForOutput(activityIcon.string()).string(),
+                                        ResTable::normalizeForOutput(activityBanner.string()).string());
                             }
                         }
                         if (!hasIntentFilter) {
@@ -890,7 +977,8 @@
                         goto bail;
                     }
                     pkg = getAttribute(tree, NULL, "package", NULL);
-                    printf("package: name='%s' ", pkg.string());
+                    printf("package: name='%s' ",
+                            ResTable::normalizeForOutput(pkg.string()).string());
                     int32_t versionCode = getIntegerAttribute(tree, VERSION_CODE_ATTR, &error);
                     if (error != "") {
                         fprintf(stderr, "ERROR getting 'android:versionCode' attribute: %s\n", error.string());
@@ -906,7 +994,8 @@
                         fprintf(stderr, "ERROR getting 'android:versionName' attribute: %s\n", error.string());
                         goto bail;
                     }
-                    printf("versionName='%s'\n", versionName.string());
+                    printf("versionName='%s'\n",
+                            ResTable::normalizeForOutput(versionName.string()).string());
                 } else if (depth == 2) {
                     withinApplication = false;
                     if (tag == "application") {
@@ -921,13 +1010,14 @@
                             if (llabel != "") {
                                 if (localeStr == NULL || strlen(localeStr) == 0) {
                                     label = llabel;
-                                    printf("application-label:'%s'\n", llabel.string());
+                                    printf("application-label:'%s'\n",
+                                            ResTable::normalizeForOutput(llabel.string()).string());
                                 } else {
                                     if (label == "") {
                                         label = llabel;
                                     }
                                     printf("application-label-%s:'%s'\n", localeStr,
-                                            llabel.string());
+                                           ResTable::normalizeForOutput(llabel.string()).string());
                                 }
                             }
                         }
@@ -939,7 +1029,8 @@
                             assets.setConfiguration(tmpConfig);
                             String8 icon = getResolvedAttribute(&res, tree, ICON_ATTR, &error);
                             if (icon != "") {
-                                printf("application-icon-%d:'%s'\n", densities[i], icon.string());
+                                printf("application-icon-%d:'%s'\n", densities[i],
+                                        ResTable::normalizeForOutput(icon.string()).string());
                             }
                         }
                         assets.setConfiguration(config);
@@ -954,8 +1045,9 @@
                             fprintf(stderr, "ERROR getting 'android:testOnly' attribute: %s\n", error.string());
                             goto bail;
                         }
-                        printf("application: label='%s' ", label.string());
-                        printf("icon='%s'\n", icon.string());
+                        printf("application: label='%s' ",
+                                ResTable::normalizeForOutput(label.string()).string());
+                        printf("icon='%s'\n", ResTable::normalizeForOutput(icon.string()).string());
                         if (testOnly != 0) {
                             printf("testOnly='%d'\n", testOnly);
                         }
@@ -979,7 +1071,8 @@
                                 goto bail;
                             }
                             if (name == "Donut") targetSdk = 4;
-                            printf("sdkVersion:'%s'\n", name.string());
+                            printf("sdkVersion:'%s'\n",
+                                    ResTable::normalizeForOutput(name.string()).string());
                         } else if (code != -1) {
                             targetSdk = code;
                             printf("sdkVersion:'%d'\n", code);
@@ -998,7 +1091,8 @@
                                 goto bail;
                             }
                             if (name == "Donut" && targetSdk < 4) targetSdk = 4;
-                            printf("targetSdkVersion:'%s'\n", name.string());
+                            printf("targetSdkVersion:'%s'\n",
+                                    ResTable::normalizeForOutput(name.string()).string());
                         } else if (code != -1) {
                             if (targetSdk < code) {
                                 targetSdk = code;
@@ -1103,7 +1197,8 @@
                                 specScreenLandscapeFeature = true;
                             }
                             printf("uses-feature%s:'%s'\n",
-                                    req ? "" : "-not-required", name.string());
+                                    req ? "" : "-not-required",
+                                            ResTable::normalizeForOutput(name.string()).string());
                         } else {
                             int vers = getIntegerAttribute(tree,
                                     GL_ES_VERSION_ATTR, &error);
@@ -1161,12 +1256,11 @@
                             } else if (name == "android.permission.WRITE_CALL_LOG") {
                                 hasWriteCallLogPermission = true;
                             }
-                            printf("uses-permission:'%s'\n", name.string());
-                            int req = getIntegerAttribute(tree, REQUIRED_ATTR, NULL, 1);
-                            if (!req) {
-                                printf("optional-permission:'%s'\n", name.string());
-                            }
-                        } else {
+
+                            printUsesPermission(name,
+                                    getIntegerAttribute(tree, REQUIRED_ATTR, NULL, 1) == 0,
+                                    getIntegerAttribute(tree, MAX_SDK_VERSION_ATTR, NULL, -1));
+                       } else {
                             fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
                                     error.string());
                             goto bail;
@@ -1174,7 +1268,8 @@
                     } else if (tag == "uses-package") {
                         String8 name = getAttribute(tree, NAME_ATTR, &error);
                         if (name != "" && error == "") {
-                            printf("uses-package:'%s'\n", name.string());
+                            printf("uses-package:'%s'\n",
+                                    ResTable::normalizeForOutput(name.string()).string());
                         } else {
                             fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
                                     error.string());
@@ -1183,7 +1278,8 @@
                     } else if (tag == "original-package") {
                         String8 name = getAttribute(tree, NAME_ATTR, &error);
                         if (name != "" && error == "") {
-                            printf("original-package:'%s'\n", name.string());
+                            printf("original-package:'%s'\n",
+                                    ResTable::normalizeForOutput(name.string()).string());
                         } else {
                             fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
                                     error.string());
@@ -1192,7 +1288,8 @@
                     } else if (tag == "supports-gl-texture") {
                         String8 name = getAttribute(tree, NAME_ATTR, &error);
                         if (name != "" && error == "") {
-                            printf("supports-gl-texture:'%s'\n", name.string());
+                            printf("supports-gl-texture:'%s'\n",
+                                    ResTable::normalizeForOutput(name.string()).string());
                         } else {
                             fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
                                     error.string());
@@ -1207,7 +1304,8 @@
                             String8 publicKey = getAttribute(tree, PUBLIC_KEY_ATTR, &error);
                             if (publicKey != "" && error == "") {
                                 printf("package-verifier: name='%s' publicKey='%s'\n",
-                                        name.string(), publicKey.string());
+                                        ResTable::normalizeForOutput(name.string()).string(),
+                                        ResTable::normalizeForOutput(publicKey.string()).string());
                             }
                         }
                     }
@@ -1276,7 +1374,8 @@
                             int req = getIntegerAttribute(tree,
                                     REQUIRED_ATTR, NULL, 1);
                             printf("uses-library%s:'%s'\n",
-                                    req ? "" : "-not-required", libraryName.string());
+                                    req ? "" : "-not-required", ResTable::normalizeForOutput(
+                                            libraryName.string()).string());
                         } else if (tag == "receiver") {
                             withinReceiver = true;
                             receiverName = getAttribute(tree, NAME_ATTR, &error);
@@ -1302,8 +1401,8 @@
                             serviceName = getAttribute(tree, NAME_ATTR, &error);
 
                             if (error != "") {
-                                fprintf(stderr, "ERROR getting 'android:name' attribute for"
-                                        " service: %s\n", error.string());
+                                fprintf(stderr, "ERROR getting 'android:name' attribute for "
+                                        "service:%s\n", error.string());
                                 goto bail;
                             }
 
@@ -1322,15 +1421,39 @@
                                 fprintf(stderr, "ERROR getting 'android:permission' attribute for"
                                         " service '%s': %s\n", serviceName.string(), error.string());
                             }
-                        }
-                    } else if (withinSupportsInput && tag == "input-type") {
-                        String8 name = getAttribute(tree, NAME_ATTR, &error);
-                        if (name != "" && error == "") {
-                            supportedInput.add(name);
-                        } else {
-                            fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
-                                    error.string());
-                            goto bail;
+                        } else if (bundle->getIncludeMetaData() && tag == "meta-data") {
+                            String8 metaDataName = getAttribute(tree, NAME_ATTR, &error);
+                            if (error != "") {
+                                fprintf(stderr, "ERROR getting 'android:name' attribute for "
+                                        "meta-data:%s\n", error.string());
+                                goto bail;
+                            }
+                            printf("meta-data: name='%s' ",
+                                    ResTable::normalizeForOutput(metaDataName.string()).string());
+                            printResolvedResourceAttribute(&res, tree, VALUE_ATTR, String8("value"),
+                                    &error);
+                            if (error != "") {
+                                // Try looking for a RESOURCE_ATTR
+                                error = "";
+                                printResolvedResourceAttribute(&res, tree, RESOURCE_ATTR,
+                                        String8("resource"), &error);
+                                if (error != "") {
+                                    fprintf(stderr, "ERROR getting 'android:value' or "
+                                            "'android:resource' attribute for "
+                                            "meta-data:%s\n", error.string());
+                                    goto bail;
+                                }
+                            }
+                            printf("\n");
+                        } else if (withinSupportsInput && tag == "input-type") {
+                            String8 name = getAttribute(tree, NAME_ATTR, &error);
+                            if (name != "" && error == "") {
+                                supportedInput.add(name);
+                            } else {
+                                fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
+                                        error.string());
+                                goto bail;
+                            }
                         }
                     }
                 } else if (depth == 4) {
@@ -1387,14 +1510,16 @@
                             }
                         }
                     }
-                } else if ((depth == 5) && withinIntentFilter){
+                } else if ((depth == 5) && withinIntentFilter) {
                     String8 action;
                     if (tag == "action") {
                         action = getAttribute(tree, NAME_ATTR, &error);
                         if (error != "") {
-                            fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n", error.string());
+                            fprintf(stderr, "ERROR getting 'android:name' attribute: %s\n",
+                                    error.string());
                             goto bail;
                         }
+
                         if (withinActivity) {
                             if (action == "android.intent.action.MAIN") {
                                 isMainActivity = true;
@@ -1429,7 +1554,8 @@
                     if (tag == "category") {
                         String8 category = getAttribute(tree, NAME_ATTR, &error);
                         if (error != "") {
-                            fprintf(stderr, "ERROR getting 'name' attribute: %s\n", error.string());
+                            fprintf(stderr, "ERROR getting 'name' attribute: %s\n",
+                                    error.string());
                             goto bail;
                         }
                         if (withinActivity) {
@@ -1446,15 +1572,15 @@
             // Pre-1.6 implicitly granted permission compatibility logic
             if (targetSdk < 4) {
                 if (!hasWriteExternalStoragePermission) {
-                    printf("uses-permission:'android.permission.WRITE_EXTERNAL_STORAGE'\n");
-                    printf("uses-implied-permission:'android.permission.WRITE_EXTERNAL_STORAGE'," \
-                            "'targetSdkVersion < 4'\n");
+                    printUsesPermission(String8("android.permission.WRITE_EXTERNAL_STORAGE"));
+                    printUsesImpliedPermission(String8("android.permission.WRITE_EXTERNAL_STORAGE"),
+                            String8("targetSdkVersion < 4"));
                     hasWriteExternalStoragePermission = true;
                 }
                 if (!hasReadPhoneStatePermission) {
-                    printf("uses-permission:'android.permission.READ_PHONE_STATE'\n");
-                    printf("uses-implied-permission:'android.permission.READ_PHONE_STATE'," \
-                            "'targetSdkVersion < 4'\n");
+                    printUsesPermission(String8("android.permission.READ_PHONE_STATE"));
+                    printUsesImpliedPermission(String8("android.permission.READ_PHONE_STATE"),
+                            String8("targetSdkVersion < 4"));
                 }
             }
 
@@ -1463,22 +1589,22 @@
             // do this (regardless of target API version) because we can't have
             // an app with write permission but not read permission.
             if (!hasReadExternalStoragePermission && hasWriteExternalStoragePermission) {
-                printf("uses-permission:'android.permission.READ_EXTERNAL_STORAGE'\n");
-                printf("uses-implied-permission:'android.permission.READ_EXTERNAL_STORAGE'," \
-                        "'requested WRITE_EXTERNAL_STORAGE'\n");
+                printUsesPermission(String8("android.permission.READ_EXTERNAL_STORAGE"));
+                printUsesImpliedPermission(String8("android.permission.READ_EXTERNAL_STORAGE"),
+                        String8("requested WRITE_EXTERNAL_STORAGE"));
             }
 
             // Pre-JellyBean call log permission compatibility.
             if (targetSdk < 16) {
                 if (!hasReadCallLogPermission && hasReadContactsPermission) {
-                    printf("uses-permission:'android.permission.READ_CALL_LOG'\n");
-                    printf("uses-implied-permission:'android.permission.READ_CALL_LOG'," \
-                            "'targetSdkVersion < 16 and requested READ_CONTACTS'\n");
+                    printUsesPermission(String8("android.permission.READ_CALL_LOG"));
+                    printUsesImpliedPermission(String8("android.permission.READ_CALL_LOG"),
+                            String8("targetSdkVersion < 16 and requested READ_CONTACTS"));
                 }
                 if (!hasWriteCallLogPermission && hasWriteContactsPermission) {
-                    printf("uses-permission:'android.permission.WRITE_CALL_LOG'\n");
-                    printf("uses-implied-permission:'android.permission.WRITE_CALL_LOG'," \
-                            "'targetSdkVersion < 16 and requested WRITE_CONTACTS'\n");
+                    printUsesPermission(String8("android.permission.WRITE_CALL_LOG"));
+                    printUsesImpliedPermission(String8("android.permission.WRITE_CALL_LOG"),
+                            String8("targetSdkVersion < 16 and requested WRITE_CONTACTS"));
                 }
             }
 
@@ -1503,7 +1629,7 @@
                     printf("uses-implied-feature:'android.hardware.camera'," \
                             "'requested android.hardware.camera.autofocus feature'\n");
                 } else if (hasCameraPermission) {
-                    // if app wants to use camera but didn't request the feature, we infer 
+                    // if app wants to use camera but didn't request the feature, we infer
                     // that it meant to, and further that it wants autofocus
                     // (which was the 1.0 - 1.5 behavior)
                     printf("uses-feature:'android.hardware.camera'\n");
@@ -1656,7 +1782,9 @@
             if (smallScreen > 0 && normalScreen > 0 && largeScreen > 0 && xlargeScreen > 0
                     && requiresSmallestWidthDp > 0) {
                 int compatWidth = compatibleWidthLimitDp;
-                if (compatWidth <= 0) compatWidth = requiresSmallestWidthDp;
+                if (compatWidth <= 0) {
+                    compatWidth = requiresSmallestWidthDp;
+                }
                 if (requiresSmallestWidthDp <= 240 && compatWidth >= 240) {
                     smallScreen = -1;
                 } else {
@@ -1701,10 +1829,18 @@
                         || compatibleWidthLimitDp > 0) ? -1 : 0;
             }
             printf("supports-screens:");
-            if (smallScreen != 0) printf(" 'small'");
-            if (normalScreen != 0) printf(" 'normal'");
-            if (largeScreen != 0) printf(" 'large'");
-            if (xlargeScreen != 0) printf(" 'xlarge'");
+            if (smallScreen != 0) {
+                printf(" 'small'");
+            }
+            if (normalScreen != 0) {
+                printf(" 'normal'");
+            }
+            if (largeScreen != 0) {
+                printf(" 'large'");
+            }
+            if (xlargeScreen != 0) {
+                printf(" 'xlarge'");
+            }
             printf("\n");
             printf("supports-any-density: '%s'\n", anyDensity ? "true" : "false");
             if (requiresSmallestWidthDp > 0) {
@@ -1740,7 +1876,8 @@
                 if (dir->getFileCount() > 0) {
                     printf("native-code:");
                     for (size_t i=0; i<dir->getFileCount(); i++) {
-                        printf(" '%s'", dir->getFileName(i).string());
+                        printf(" '%s'", ResTable::normalizeForOutput(
+                                dir->getFileName(i).string()).string());
                     }
                     printf("\n");
                 }
@@ -1813,7 +1950,8 @@
         } else {
             if (bundle->getJunkPath()) {
                 String8 storageName = String8(fileName).getPathLeaf();
-                printf(" '%s' as '%s'...\n", fileName, storageName.string());
+                printf(" '%s' as '%s'...\n", fileName,
+                        ResTable::normalizeForOutput(storageName.string()).string());
                 result = zip->add(fileName, storageName.string(),
                                   bundle->getCompressionMethod(), NULL);
             } else {
@@ -1823,12 +1961,13 @@
         }
         if (result != NO_ERROR) {
             fprintf(stderr, "Unable to add '%s' to '%s'", bundle->getFileSpecEntry(i), zipFileName);
-            if (result == NAME_NOT_FOUND)
+            if (result == NAME_NOT_FOUND) {
                 fprintf(stderr, ": file not found\n");
-            else if (result == ALREADY_EXISTS)
+            } else if (result == ALREADY_EXISTS) {
                 fprintf(stderr, ": already exists in archive\n");
-            else
+            } else {
                 fprintf(stderr, "\n");
+            }
             goto bail;
         }
     }
@@ -2096,7 +2235,7 @@
  *
  * POSTCONDITIONS
  *  Destination directory will be updated to match the PNG files in
- *  the source directory. 
+ *  the source directory.
  */
 int doCrunch(Bundle* bundle)
 {
diff --git a/tools/aapt/Images.cpp b/tools/aapt/Images.cpp
index db74831..12f5b92 100644
--- a/tools/aapt/Images.cpp
+++ b/tools/aapt/Images.cpp
@@ -81,6 +81,12 @@
     png_bytepp allocRows;
 };
 
+static void log_warning(png_structp png_ptr, png_const_charp warning_message)
+{
+    const char* imageName = (const char*) png_get_error_ptr(png_ptr);
+    fprintf(stderr, "%s: libpng warning: %s\n", imageName, warning_message);
+}
+
 static void read_png(const char* imageName,
                      png_structp read_ptr, png_infop read_info,
                      image_info* outImageInfo)
@@ -89,6 +95,8 @@
     int bit_depth, interlace_type, compression_type;
     int i;
 
+    png_set_error_fn(read_ptr, const_cast<char*>(imageName),
+            NULL /* use default errorfn */, log_warning);
     png_read_info(read_ptr, read_info);
 
     png_get_IHDR(read_ptr, read_info, &outImageInfo->width,
@@ -119,6 +127,8 @@
     if (color_type == PNG_COLOR_TYPE_GRAY || color_type == PNG_COLOR_TYPE_GRAY_ALPHA)
         png_set_gray_to_rgb(read_ptr);
 
+    png_set_interlace_handling(read_ptr);
+
     png_read_update_info(read_ptr, read_info);
 
     outImageInfo->rows = (png_bytepp)malloc(
@@ -931,7 +941,7 @@
                 gg = *row++;
                 bb = *row++;
                 aa = *row++;
-
+                
                 if (isGrayscale) {
                     *out++ = rr;
                 } else {
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index d1d3deb..1cf4783 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -47,7 +47,7 @@
         " %s l[ist] [-v] [-a] file.{zip,jar,apk}\n"
         "   List contents of Zip-compatible archive.\n\n", gProgName);
     fprintf(stderr,
-        " %s d[ump] [--values] WHAT file.{apk} [asset [asset ...]]\n"
+        " %s d[ump] [--values] [--include-meta-data] WHAT file.{apk} [asset [asset ...]]\n"
         "   strings          Print the contents of the resource table string pool in the APK.\n"
         "   badging          Print the label and icon for the app declared in APK.\n"
         "   permissions      Print the permissions from the APK.\n"
@@ -138,6 +138,8 @@
         "   --debug-mode\n"
         "       inserts android:debuggable=\"true\" in to the application node of the\n"
         "       manifest, making the application debuggable even on production devices.\n"
+        "   --include-meta-data\n"
+        "       when used with \"dump badging\" also includes meta-data tags.\n"
         "   --min-sdk-version\n"
         "       inserts android:minSdkVersion in to manifest.  If the version is 7 or\n"
         "       higher, the default encoding for resources will be in UTF-8.\n"
@@ -151,6 +153,11 @@
         "       inserts android:versionCode in to manifest.\n"
         "   --version-name\n"
         "       inserts android:versionName in to manifest.\n"
+        "   --replace-version\n"
+        "       If --version-code and/or --version-name are specified, these\n"
+        "       values will replace any value already in the manifest. By\n"
+        "       default, nothing is changed if the manifest already defines\n"
+        "       these attributes.\n"
         "   --custom-package\n"
         "       generates R.java into a different package.\n"
         "   --extra-packages\n"
@@ -183,11 +190,16 @@
         "       Make the resources ID non constant. This is required to make an R java class\n"
         "       that does not contain the final value but is used to make reusable compiled\n"
         "       libraries that need to access resources.\n"
+        "   --shared-lib\n"
+        "       Make a shared library resource package that can be loaded by an application\n"
+        "       at runtime to access the libraries resources. Implies --non-constant-id.\n"
         "   --error-on-failed-insert\n"
         "       Forces aapt to return an error if it fails to insert values into the manifest\n"
         "       with --debug-mode, --min-sdk-version, --target-sdk-version --version-code\n"
         "       and --version-name.\n"
         "       Insertion typically fails if the manifest already defines the attribute.\n"
+        "   --error-on-missing-config-entry\n"
+        "       Forces aapt to return an error if it fails to find an entry for a configuration.\n"
         "   --output-text-symbols\n"
         "       Generates a text file containing the resource symbols of the R class in the\n"
         "       specified folder.\n"
@@ -528,8 +540,12 @@
                         goto bail;
                     }
                     bundle.setVersionName(argv[0]);
+                } else if (strcmp(cp, "-replace-version") == 0) {
+                    bundle.setReplaceVersion(true);
                 } else if (strcmp(cp, "-values") == 0) {
                     bundle.setValues(true);
+                } else if (strcmp(cp, "-include-meta-data") == 0) {
+                    bundle.setIncludeMetaData(true);
                 } else if (strcmp(cp, "-custom-package") == 0) {
                     argc--;
                     argv++;
@@ -583,6 +599,8 @@
                     bundle.setAutoAddOverlay(true);
                 } else if (strcmp(cp, "-error-on-failed-insert") == 0) {
                     bundle.setErrorOnFailedInsert(true);
+                } else if (strcmp(cp, "-error-on-missing-config-entry") == 0) {
+                    bundle.setErrorOnMissingConfigEntry(true);
                 } else if (strcmp(cp, "-output-text-symbols") == 0) {
                     argc--;
                     argv++;
@@ -603,6 +621,9 @@
                     bundle.setProduct(argv[0]);
                 } else if (strcmp(cp, "-non-constant-id") == 0) {
                     bundle.setNonConstantId(true);
+                } else if (strcmp(cp, "-shared-lib") == 0) {
+                    bundle.setNonConstantId(true);
+                    bundle.setBuildSharedLibrary(true);
                 } else if (strcmp(cp, "-no-crunch") == 0) {
                     bundle.setUseCrunchCache(true);
                 } else if (strcmp(cp, "-ignore-assets") == 0) {
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index 4d29ff7..d0581f6 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -470,7 +470,7 @@
                         value.data);
                 return ATTR_NOT_FOUND;
             }
-
+            
             pool = table.getTableStringBlock(strIdx);
             #if 0
             if (pool != NULL) {
@@ -676,13 +676,15 @@
 }
 
 /*
- * Inserts an attribute in a given node, only if the attribute does not
- * exist.
+ * Inserts an attribute in a given node.
  * If errorOnFailedInsert is true, and the attribute already exists, returns false.
- * Returns true otherwise, even if the attribute already exists.
+ * If replaceExisting is true, the attribute will be updated if it already exists.
+ * Returns true otherwise, even if the attribute already exists, and does not modify
+ * the existing attribute's value.
  */
 bool addTagAttribute(const sp<XMLNode>& node, const char* ns8,
-        const char* attr8, const char* value, bool errorOnFailedInsert)
+        const char* attr8, const char* value, bool errorOnFailedInsert,
+        bool replaceExisting)
 {
     if (value == NULL) {
         return true;
@@ -691,7 +693,16 @@
     const String16 ns(ns8);
     const String16 attr(attr8);
 
-    if (node->getAttribute(ns, attr) != NULL) {
+    XMLNode::attribute_entry* existingEntry = node->editAttribute(ns, attr);
+    if (existingEntry != NULL) {
+        if (replaceExisting) {
+            NOISY(printf("Info: AndroidManifest.xml already defines %s (in %s);"
+                         " overwriting existing value from manifest.\n",
+                         String8(attr).string(), String8(ns).string()));
+            existingEntry->string = String16(value);
+            return true;
+        }
+
         if (errorOnFailedInsert) {
             fprintf(stderr, "Error: AndroidManifest.xml already defines %s (in %s);"
                             " cannot insert new value %s.\n",
@@ -706,11 +717,23 @@
         // don't stop the build.
         return true;
     }
-
+    
     node->addAttribute(ns, attr, String16(value));
     return true;
 }
 
+/*
+ * Inserts an attribute in a given node, only if the attribute does not
+ * exist.
+ * If errorOnFailedInsert is true, and the attribute already exists, returns false.
+ * Returns true otherwise, even if the attribute already exists.
+ */
+bool addTagAttribute(const sp<XMLNode>& node, const char* ns8,
+        const char* attr8, const char* value, bool errorOnFailedInsert)
+{
+    return addTagAttribute(node, ns8, attr8, value, errorOnFailedInsert, false);
+}
+
 static void fullyQualifyClassName(const String8& package, sp<XMLNode> node,
         const String16& attrName) {
     XMLNode::attribute_entry* attr = node->editAttribute(
@@ -748,16 +771,17 @@
     }
 
     bool errorOnFailedInsert = bundle->getErrorOnFailedInsert();
+    bool replaceVersion = bundle->getReplaceVersion();
 
     if (!addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionCode",
-            bundle->getVersionCode(), errorOnFailedInsert)) {
+            bundle->getVersionCode(), errorOnFailedInsert, replaceVersion)) {
         return UNKNOWN_ERROR;
     }
     if (!addTagAttribute(root, RESOURCES_ANDROID_NAMESPACE, "versionName",
-            bundle->getVersionName(), errorOnFailedInsert)) {
+            bundle->getVersionName(), errorOnFailedInsert, replaceVersion)) {
         return UNKNOWN_ERROR;
     }
-
+    
     if (bundle->getMinSdkVersion() != NULL
             || bundle->getTargetSdkVersion() != NULL
             || bundle->getMaxSdkVersion() != NULL) {
@@ -766,7 +790,7 @@
             vers = XMLNode::newElement(root->getFilename(), String16(), String16("uses-sdk"));
             root->insertChildAt(vers, 0);
         }
-
+        
         if (!addTagAttribute(vers, RESOURCES_ANDROID_NAMESPACE, "minSdkVersion",
                 bundle->getMinSdkVersion(), errorOnFailedInsert)) {
             return UNKNOWN_ERROR;
@@ -841,7 +865,7 @@
             }
         }
     }
-
+    
     return NO_ERROR;
 }
 
@@ -925,7 +949,7 @@
     // --------------------------------------------------------------
 
     // resType -> leafName -> group
-    KeyedVector<String8, sp<ResourceTypeSet> > *resources =
+    KeyedVector<String8, sp<ResourceTypeSet> > *resources = 
             new KeyedVector<String8, sp<ResourceTypeSet> >;
     collect_files(assets, resources);
 
@@ -957,7 +981,7 @@
     // now go through any resource overlays and collect their files
     sp<AaptAssets> current = assets->getOverlay();
     while(current.get()) {
-        KeyedVector<String8, sp<ResourceTypeSet> > *resources =
+        KeyedVector<String8, sp<ResourceTypeSet> > *resources = 
                 new KeyedVector<String8, sp<ResourceTypeSet> >;
         current->setResources(resources);
         collect_files(current, resources);
@@ -1060,7 +1084,7 @@
     // compile resources
     current = assets;
     while(current.get()) {
-        KeyedVector<String8, sp<ResourceTypeSet> > *resources =
+        KeyedVector<String8, sp<ResourceTypeSet> > *resources = 
                 current->getResources();
 
         ssize_t index = resources->indexOfKey(String8("values"));
@@ -1069,7 +1093,7 @@
             ssize_t res;
             while ((res=it.next()) == NO_ERROR) {
                 sp<AaptFile> file = it.getFile();
-                res = compileResourceFile(bundle, assets, file, it.getParams(),
+                res = compileResourceFile(bundle, assets, file, it.getParams(), 
                                           (current!=assets), &table);
                 if (res != NO_ERROR) {
                     hasErrors = true;
@@ -1254,7 +1278,7 @@
     if (table.validateLocalizations()) {
         hasErrors = true;
     }
-
+    
     if (hasErrors) {
         return UNKNOWN_ERROR;
     }
@@ -1287,7 +1311,7 @@
 
     ResTable finalResTable;
     sp<AaptFile> resFile;
-
+    
     if (table.hasResources()) {
         sp<AaptSymbols> symbols = assets->getSymbolsFor(String8("R"));
         err = table.addSymbols(symbols);
@@ -1319,9 +1343,10 @@
             table.writePublicDefinitions(String16(assets->getPackage()), fp);
             fclose(fp);
         }
-
+        
         // Read resources back in,
         finalResTable.add(resFile->getData(), resFile->getSize());
+        
 #if 0
         NOISY(
               printf("Generated resources:\n");
@@ -1329,7 +1354,7 @@
         )
 #endif
     }
-
+    
     // Perform a basic validation of the manifest file.  This time we
     // parse it with the comments intact, so that we can use them to
     // generate java docs...  so we are not going to write this one
@@ -1424,7 +1449,7 @@
                 ssize_t index = block.indexOfAttribute(RESOURCES_ANDROID_NAMESPACE, "name");
                 const uint16_t* id = block.getAttributeStringValue(index, &len);
                 if (id == NULL) {
-                    fprintf(stderr, "%s:%d: missing name attribute in element <%s>.\n",
+                    fprintf(stderr, "%s:%d: missing name attribute in element <%s>.\n", 
                             manifestPath.string(), block.getLineNumber(),
                             String8(block.getElementName(&len)).string());
                     hasErrors = true;
@@ -1582,7 +1607,7 @@
             return err;
         }
     }
-
+    
     return err;
 }
 
@@ -1704,7 +1729,7 @@
         NA = idents.size();
 
         bool deprecated = false;
-
+        
         String16 comment = symbols->getComment(realClassName);
         fprintf(fp, "%s/** ", indentStr);
         if (comment.size() > 0) {
@@ -1787,7 +1812,7 @@
         if (deprecated) {
             fprintf(fp, "%s@Deprecated\n", indentStr);
         }
-
+        
         fprintf(fp,
                 "%spublic static final int[] %s = {\n"
                 "%s",
@@ -1832,9 +1857,9 @@
                 //printf("%s:%s/%s: 0x%08x\n", String8(package16).string(),
                 //    String8(attr16).string(), String8(name16).string(), typeSpecFlags);
                 const bool pub = (typeSpecFlags&ResTable_typeSpec::SPEC_PUBLIC) != 0;
-
+                
                 bool deprecated = false;
-
+                
                 fprintf(fp, "%s/**\n", indentStr);
                 if (comment.size() > 0) {
                     String8 cmt(comment);
@@ -2437,7 +2462,7 @@
 
 status_t
 writeProguardForXml(ProguardKeepSet* keep, const sp<AaptFile>& layoutFile,
-        const char* startTag, const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs)
+        const Vector<String8>& startTags, const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs)
 {
     status_t err;
     ResXMLTree tree;
@@ -2451,15 +2476,18 @@
 
     tree.restart();
 
-    if (startTag != NULL) {
+    if (!startTags.isEmpty()) {
         bool haveStart = false;
         while ((code=tree.next()) != ResXMLTree::END_DOCUMENT && code != ResXMLTree::BAD_DOCUMENT) {
             if (code != ResXMLTree::START_TAG) {
                 continue;
             }
             String8 tag(tree.getElementName(&len));
-            if (tag == startTag) {
-                haveStart = true;
+            const size_t numStartTags = startTags.size();
+            for (size_t i = 0; i < numStartTags; i++) {
+                if (tag == startTags[i]) {
+                    haveStart = true;
+                }
             }
             break;
         }
@@ -2546,15 +2574,17 @@
     for (size_t k=0; k<K; k++) {
         const sp<AaptDir>& d = dirs.itemAt(k);
         const String8& dirName = d->getLeaf();
+        Vector<String8> startTags;
         const char* startTag = NULL;
         const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs = NULL;
         if ((dirName == String8("layout")) || (strncmp(dirName.string(), "layout-", 7) == 0)) {
             tagAttrPairs = &kLayoutTagAttrPairs;
         } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) {
-            startTag = "PreferenceScreen";
+            startTags.add(String8("PreferenceScreen"));
+            startTags.add(String8("preference-headers"));
             tagAttrPairs = &kXmlTagAttrPairs;
         } else if ((dirName == String8("menu")) || (strncmp(dirName.string(), "menu-", 5) == 0)) {
-            startTag = "menu";
+            startTags.add(String8("menu"));
             tagAttrPairs = NULL;
         } else {
             continue;
@@ -2567,7 +2597,7 @@
             const DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> >& files = group->getFiles();
             const size_t M = files.size();
             for (size_t j=0; j<M; j++) {
-                err = writeProguardForXml(keep, files.valueAt(j), startTag, tagAttrPairs);
+                err = writeProguardForXml(keep, files.valueAt(j), startTags, tagAttrPairs);
                 if (err < 0) {
                     return err;
                 }
diff --git a/tools/aapt/ResourceIdCache.cpp b/tools/aapt/ResourceIdCache.cpp
index e03f4f6..d60a07fc 100644
--- a/tools/aapt/ResourceIdCache.cpp
+++ b/tools/aapt/ResourceIdCache.cpp
@@ -98,10 +98,10 @@
 
 void ResourceIdCache::dump() {
     printf("ResourceIdCache dump:\n");
-    printf("Size: %ld\n", mIdMap.size());
-    printf("Hits:   %ld\n", mHits);
-    printf("Misses: %ld\n", mMisses);
-    printf("(Collisions: %ld)\n", mCollisions);
+    printf("Size: %zd\n", mIdMap.size());
+    printf("Hits:   %zd\n", mHits);
+    printf("Misses: %zd\n", mMisses);
+    printf("(Collisions: %zd)\n", mCollisions);
 }
 
 }
diff --git a/tools/aapt/ResourceIdCache.h b/tools/aapt/ResourceIdCache.h
index e6bcda2..3acdee1 100644
--- a/tools/aapt/ResourceIdCache.h
+++ b/tools/aapt/ResourceIdCache.h
@@ -6,18 +6,20 @@
 #ifndef RESOURCE_ID_CACHE_H
 #define RESOURCE_ID_CACHE_H
 
+#include <utils/String16.h>
+
 namespace android {
 
 class ResourceIdCache {
 public:
-    static uint32_t lookup(const android::String16& package,
-            const android::String16& type,
-            const android::String16& name,
+    static uint32_t lookup(const String16& package,
+            const String16& type,
+            const String16& name,
             bool onlyPublic);
 
-    static uint32_t store(const android::String16& package,
-            const android::String16& type,
-            const android::String16& name,
+    static uint32_t store(const String16& package,
+            const String16& type,
+            const String16& name,
             bool onlyPublic,
             uint32_t resId);
 
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index a8ef0a0..b445b8a 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -1700,7 +1700,7 @@
 
 ResourceTable::ResourceTable(Bundle* bundle, const String16& assetsPackage)
     : mAssetsPackage(assetsPackage), mNextPackageId(1), mHaveAppPackage(false),
-      mIsAppPackage(!bundle->getExtending()),
+      mIsAppPackage(!bundle->getExtending()), mIsSharedLibrary(bundle->getBuildSharedLibrary()),
       mNumLocal(0),
       mBundle(bundle)
 {
@@ -1722,8 +1722,9 @@
     const size_t N = incl.getBasePackageCount();
     for (size_t phase=0; phase<2; phase++) {
         for (size_t i=0; i<N; i++) {
-            String16 name(incl.getBasePackageName(i));
+            const String16 name = incl.getBasePackageName(i);
             uint32_t id = incl.getBasePackageId(i);
+
             // First time through: only add base packages (id
             // is not 0); second time through add the other
             // packages.
@@ -1749,7 +1750,7 @@
                 }
             }
             if (id != 0) {
-                NOISY(printf("Including package %s with ID=%d\n",
+                NOISY(fprintf(stderr, "Including package %s with ID=%d\n",
                              String8(name).string(), id));
                 sp<Package> p = new Package(name, id);
                 mPackages.add(name, p);
@@ -2714,6 +2715,9 @@
 
     bool useUTF8 = !bundle->getUTF16StringsOption();
 
+    // The libraries this table references.
+    Vector<sp<Package> > libraryPackages;
+
     // Iterate through all data, collecting all values (strings,
     // references, etc).
     StringPool valueStrings(useUTF8);
@@ -2721,8 +2725,22 @@
     for (pi=0; pi<N; pi++) {
         sp<Package> p = mOrderedPackages.itemAt(pi);
         if (p->getTypes().size() == 0) {
-            // Empty, skip!
+            // Empty, this is an imported package being used as
+            // a shared library. We do not flatten this package.
+            if (p->getAssignedId() != 0x01 && p->getName() != String16("android")) {
+                // This is not the base Android package, and it is a library
+                // so we must add a reference to the library when flattening.
+                libraryPackages.add(p);
+            }
             continue;
+        } else if (p->getAssignedId() == 0x00) {
+            if (!bundle->getBuildSharedLibrary()) {
+                fprintf(stderr, "ERROR: Package %s can not have ID=0x00 unless building a shared library.",
+                        String8(p->getName()).string());
+                return UNKNOWN_ERROR;
+            }
+            // If this is a shared library, we also include ourselves as an entry.
+            libraryPackages.add(p);
         }
 
         StringPool typeStrings(useUTF8);
@@ -2805,7 +2823,7 @@
     }
 
     ssize_t strAmt = 0;
-    
+
     // Now build the array of package chunks.
     Vector<sp<AaptFile> > flatPackages;
     for (pi=0; pi<N; pi++) {
@@ -2854,6 +2872,12 @@
             return amt;
         }
 
+        err = flattenLibraryTable(data, libraryPackages);
+        if (err != NO_ERROR) {
+            fprintf(stderr, "ERROR: failed to write library table\n");
+            return err;
+        }
+
         // Build the type chunks inside of this package.
         for (size_t ti=0; ti<N; ti++) {
             // Retrieve them in the same order as the type string block.
@@ -3023,13 +3047,21 @@
                 tHeader->header.size = htodl(data->getSize()-typeStart);
             }
 
+            bool missing_entry = false;
+            const char* log_prefix = bundle->getErrorOnMissingConfigEntry() ?
+                    "error" : "warning";
             for (size_t i = 0; i < N; ++i) {
                 if (!validResources[i]) {
                     sp<ConfigList> c = t->getOrderedConfigs().itemAt(i);
-                    fprintf(stderr, "warning: no entries written for %s/%s\n",
+                    fprintf(stderr, "%s: no entries written for %s/%s\n", log_prefix,
                             String8(typeName).string(), String8(c->getName()).string());
+                    missing_entry = true;
                 }
             }
+            if (bundle->getErrorOnMissingConfigEntry() && missing_entry) {
+                fprintf(stderr, "Error: Missing entries, quit!\n");
+                return NOT_ENOUGH_DATA;
+            }
         }
 
         // Fill in the rest of the package information.
@@ -3072,7 +3104,7 @@
     fprintf(stderr, "**** value strings: %d\n", amt);
     fprintf(stderr, "**** total strings: %d\n", strAmt);
     #endif
-    
+
     for (pi=0; pi<flatPackages.size(); pi++) {
         err = dest->writeData(flatPackages[pi]->getData(),
                               flatPackages[pi]->getSize());
@@ -3097,6 +3129,38 @@
     return NO_ERROR;
 }
 
+status_t ResourceTable::flattenLibraryTable(const sp<AaptFile>& dest, const Vector<sp<Package> >& libs) {
+    // Write out the library table if necessary
+    if (libs.size() > 0) {
+        NOISY(fprintf(stderr, "Writing library reference table\n"));
+
+        const size_t libStart = dest->getSize();
+        const size_t count = libs.size();
+        ResTable_lib_header* libHeader = (ResTable_lib_header*) dest->editDataInRange(libStart, sizeof(ResTable_lib_header));
+
+        memset(libHeader, 0, sizeof(*libHeader));
+        libHeader->header.type = htods(RES_TABLE_LIBRARY_TYPE);
+        libHeader->header.headerSize = htods(sizeof(*libHeader));
+        libHeader->header.size = htodl(sizeof(*libHeader) + (sizeof(ResTable_lib_entry) * count));
+        libHeader->count = htodl(count);
+
+        // Write the library entries
+        for (size_t i = 0; i < count; i++) {
+            const size_t entryStart = dest->getSize();
+            sp<Package> libPackage = libs[i];
+            NOISY(fprintf(stderr, "  Entry %s -> 0x%02x\n",
+                        String8(libPackage->getName()).string(),
+                        (uint8_t)libPackage->getAssignedId()));
+
+            ResTable_lib_entry* entry = (ResTable_lib_entry*) dest->editDataInRange(entryStart, sizeof(ResTable_lib_entry));
+            memset(entry, 0, sizeof(*entry));
+            entry->packageId = htodl(libPackage->getAssignedId());
+            strcpy16_htod(entry->packageName, libPackage->getName().string());
+        }
+    }
+    return NO_ERROR;
+}
+
 void ResourceTable::writePublicDefinitions(const String16& package, FILE* fp)
 {
     fprintf(fp,
@@ -3866,7 +3930,7 @@
                 return NULL;
             }
             mHaveAppPackage = true;
-            p = new Package(package, 127);
+            p = new Package(package, mIsSharedLibrary ? 0 : 127);
         } else {
             p = new Package(package, mNextPackageId);
         }
diff --git a/tools/aapt/ResourceTable.h b/tools/aapt/ResourceTable.h
index 75005cd..ec8fd175e 100644
--- a/tools/aapt/ResourceTable.h
+++ b/tools/aapt/ResourceTable.h
@@ -224,6 +224,7 @@
     status_t validateLocalizations(void);
 
     status_t flatten(Bundle*, const sp<AaptFile>& dest);
+    status_t flattenLibraryTable(const sp<AaptFile>& dest, const Vector<sp<Package> >& libs);
 
     void writePublicDefinitions(const String16& package, FILE* fp);
 
@@ -546,6 +547,7 @@
     uint32_t mNextPackageId;
     bool mHaveAppPackage;
     bool mIsAppPackage;
+    bool mIsSharedLibrary;
     size_t mNumLocal;
     SourcePos mCurrentXmlPos;
     Bundle* mBundle;
diff --git a/tools/aapt/printapk.cpp b/tools/aapt/printapk.cpp
index 4cf73d8..def6e2e 100644
--- a/tools/aapt/printapk.cpp
+++ b/tools/aapt/printapk.cpp
@@ -115,8 +115,8 @@
         size_t basePackageCount = res.getBasePackageCount();
         printf("Base Packages: %d\n", (int)basePackageCount);
         for (size_t bpIndex=0; bpIndex<basePackageCount; bpIndex++) {
-            const char16_t* ch = res.getBasePackageName(bpIndex);
-            String8 s = String8(String16(ch));
+            const String16 ch = res.getBasePackageName(bpIndex);
+            String8 s = String8(ch);
             printf("  [%3d] %s\n", (int)bpIndex, s.string());
         }
 #endif
diff --git a/tools/aidl/aidl.cpp b/tools/aidl/aidl.cpp
index a84d743..9c1867e 100644
--- a/tools/aidl/aidl.cpp
+++ b/tools/aidl/aidl.cpp
@@ -207,7 +207,7 @@
     p = strchr(name->data, '.');
     len = p ? p-name->data : strlen(name->data);
     expected.append(name->data, len);
-
+    
     expected += ".aidl";
 
     len = fn.length();
@@ -473,7 +473,7 @@
             err = 1;
             goto next;
         }
-
+        
         if (!(kind == INTERFACE_TYPE_BINDER ? t->CanWriteToParcel() : t->CanWriteToRpcData())) {
             fprintf(stderr, "%s:%d parameter %d: '%s %s' can't be marshalled.\n",
                         filename, m->type.type.lineno, index,
@@ -536,7 +536,7 @@
                     filename, m->name.lineno, index, arg->name.data);
             err = 1;
         }
-
+        
 next:
         index++;
         arg = arg->next;
@@ -797,7 +797,7 @@
         //printf("%s:%d:...%s...%s...%s...\n", filename.c_str(), lineno,
         //        type, packagename, classname);
         document_item_type* doc;
-
+        
         if (0 == strcmp("parcelable", type)) {
             user_data_type* parcl = (user_data_type*)malloc(
                     sizeof(user_data_type));
@@ -1104,13 +1104,13 @@
     }
 
     // write preprocessed file
-    int fd = open( options.outputFileName.c_str(),
+    int fd = open( options.outputFileName.c_str(), 
                    O_RDWR|O_CREAT|O_TRUNC|O_BINARY,
 #ifdef HAVE_MS_C_RUNTIME
                    _S_IREAD|_S_IWRITE);
-#else
+#else    
                    S_IRUSR|S_IWUSR|S_IRGRP);
-#endif
+#endif            
     if (fd == -1) {
         fprintf(stderr, "aidl: could not open file for write: %s\n",
                 options.outputFileName.c_str());
diff --git a/tools/layoutlib/bridge/.classpath b/tools/layoutlib/bridge/.classpath
index 2e4274da..aef3efa 100644
--- a/tools/layoutlib/bridge/.classpath
+++ b/tools/layoutlib/bridge/.classpath
@@ -1,12 +1,14 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry excluding="org/kxml2/io/" kind="src" path="src"/>
+	<classpathentry kind="src" path="tests/src"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/layoutlib_api/layoutlib_api-prebuilt.jar"/>
+	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/layoutlib_api/layoutlib_api-prebuilt.jar" sourcepath="/ANDROID_SRC/tools/base/layoutlib-api/src/main"/>
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/kxml2/kxml2-2.3.0.jar" sourcepath="/ANDROID_PLAT_SRC/dalvik/libcore/xml/src/main/java"/>
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/out/host/common/obj/JAVA_LIBRARIES/temp_layoutlib_intermediates/javalib.jar" sourcepath="/ANDROID_PLAT_SRC/frameworks/base"/>
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/ninepatch/ninepatch-prebuilt.jar"/>
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/tools-common/tools-common-prebuilt.jar"/>
 	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/icu4j/icu4j.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java b/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java
index 224eac6..4603b63 100644
--- a/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/animation/PropertyValuesHolder_Delegate.java
@@ -48,6 +48,20 @@
     }
 
     @LayoutlibDelegate
+    /*package*/ static long nGetMultipleIntMethod(Class<?> targetClass, String methodName,
+            int numParams) {
+        // TODO: return the right thing.
+        return 0;
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static long nGetMultipleFloatMethod(Class<?> targetClass, String methodName,
+            int numParams) {
+        // TODO: return the right thing.
+        return 0;
+    }
+
+    @LayoutlibDelegate
     /*package*/ static void nCallIntMethod(Object target, long methodID, int arg) {
         // do nothing
     }
@@ -56,4 +70,40 @@
     /*package*/ static void nCallFloatMethod(Object target, long methodID, float arg) {
         // do nothing
     }
+
+    @LayoutlibDelegate
+    /*package*/ static void nCallTwoIntMethod(Object target, long methodID, int arg1,
+            int arg2) {
+        // do nothing
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static void nCallFourIntMethod(Object target, long methodID, int arg1,
+            int arg2, int arg3, int arg4) {
+        // do nothing
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static void nCallMultipleIntMethod(Object target, long methodID,
+            int[] args) {
+        // do nothing
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static void nCallTwoFloatMethod(Object target, long methodID, float arg1,
+            float arg2) {
+        // do nothing
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static void nCallFourFloatMethod(Object target, long methodID, float arg1,
+            float arg2, float arg3, float arg4) {
+        // do nothing
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static void nCallMultipleFloatMethod(Object target, long methodID,
+            float[] args) {
+        // do nothing
+    }
 }
diff --git a/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java
index 5c2b793..914a359 100644
--- a/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/content/res/AssetManager_Delegate.java
@@ -40,9 +40,6 @@
 
     @LayoutlibDelegate
     /*package*/ static void applyThemeStyle(long theme, int styleRes, boolean force) {
-        Resources_Theme_Delegate delegate = Resources_Theme_Delegate.getDelegateManager()
-                .getDelegate(theme);
-        delegate.mThemeResId = styleRes;
-        delegate.force = force;
+        Resources_Theme_Delegate.getDelegateManager().getDelegate(theme).force = force;
     }
 }
diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java
index 8794452..dd573be 100644
--- a/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java
+++ b/tools/layoutlib/bridge/src/android/content/res/BridgeResources.java
@@ -51,6 +51,7 @@
     private BridgeContext mContext;
     private IProjectCallback mProjectCallback;
     private boolean[] mPlatformResourceFlag = new boolean[1];
+    private TypedValue mTmpValue = new TypedValue();
 
     /**
      * Simpler wrapper around FileInputStream. This is used when the input stream represent
@@ -154,6 +155,11 @@
 
     @Override
     public Drawable getDrawable(int id) throws NotFoundException {
+        return getDrawable(id, null);
+    }
+
+    @Override
+    public Drawable getDrawable(int id, Theme theme) {
         Pair<String, ResourceValue> value = getResourceValue(id, mPlatformResourceFlag);
 
         if (value != null) {
diff --git a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
index 446d139..cc621c4 100644
--- a/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
+++ b/tools/layoutlib/bridge/src/android/content/res/BridgeTypedArray.java
@@ -52,13 +52,13 @@
     private final BridgeContext mContext;
     private final boolean mPlatformFile;
 
-    private ResourceValue[] mResourceData;
-    private String[] mNames;
-    private boolean[] mIsFramework;
+    private final ResourceValue[] mResourceData;
+    private final String[] mNames;
+    private final boolean[] mIsFramework;
 
     public BridgeTypedArray(BridgeResources resources, BridgeContext context, int len,
             boolean platformFile) {
-        super(null, null, null, 0);
+        super(resources, null, null, 0);
         mBridgeResources = resources;
         mContext = context;
         mPlatformFile = platformFile;
@@ -81,8 +81,8 @@
     }
 
     /**
-     * Seals the array after all calls to {@link #bridgeSetValue(int, String, ResourceValue)} have
-     * been done.
+     * Seals the array after all calls to
+     * {@link #bridgeSetValue(int, String, boolean, ResourceValue)} have been done.
      * <p/>This allows to compute the list of non default values, permitting
      * {@link #getIndexCount()} to return the proper value.
      */
@@ -252,7 +252,7 @@
             for (String keyword : keywords) {
                 Integer i = map.get(keyword.trim());
                 if (i != null) {
-                    result |= i.intValue();
+                    result |= i;
                 } else {
                     Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_FORMAT,
                             String.format(
@@ -731,7 +731,7 @@
         }
 
         // not a direct id valid reference? resolve it
-        Integer idValue = null;
+        Integer idValue;
 
         if (resValue.isFramework()) {
             idValue = Bridge.getResourceId(resValue.getResourceType(),
@@ -742,7 +742,7 @@
         }
 
         if (idValue != null) {
-            return idValue.intValue();
+            return idValue;
         }
 
         Bridge.getLog().warning(LayoutLog.TAG_RESOURCES_RESOLVE,
@@ -753,6 +753,12 @@
         return defValue;
     }
 
+    @Override
+    public int getThemeAttributeId(int index, int defValue) {
+        // TODO: Get the right Theme Attribute ID to enable caching of the drawables.
+        return defValue;
+    }
+
     /**
      * Retrieve the Drawable for the attribute at <var>index</var>.  This
      * gets the resource ID of the selected attribute, and uses
@@ -854,6 +860,7 @@
      */
     @Override
     public boolean hasValue(int index) {
+        //noinspection SimplifiableIfStatement
         if (index < 0 || index >= mResourceData.length) {
             return false;
         }
diff --git a/tools/layoutlib/bridge/src/android/content/res/Resources_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/Resources_Delegate.java
new file mode 100644
index 0000000..112250d
--- /dev/null
+++ b/tools/layoutlib/bridge/src/android/content/res/Resources_Delegate.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 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 android.content.res;
+
+import java.util.Locale;
+
+import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
+import com.ibm.icu.util.ULocale;
+
+/**
+ * Delegate used to provide new implementation of a select few methods of {@link Resources}
+ *
+ * Through the layoutlib_create tool, the original  methods of Resources have been replaced
+ * by calls to methods of the same name in this delegate class.
+ *
+ */
+public class Resources_Delegate {
+
+    @LayoutlibDelegate
+    /*package*/ static String localeToLanguageTag(Resources res, Locale locale)  {
+        return ULocale.forLocale(locale).toLanguageTag();
+    }
+}
diff --git a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
index b89d15f..31d1594 100644
--- a/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/content/res/Resources_Theme_Delegate.java
@@ -39,8 +39,6 @@
  */
 public class Resources_Theme_Delegate {
 
-    // Resource identifier for the theme.
-    int mThemeResId;
     // Whether to use the Theme.mThemeResId as primary theme.
     boolean force;
 
@@ -103,7 +101,7 @@
 
     private static boolean setupResources(Theme thisTheme) {
         Resources_Theme_Delegate themeDelegate = sManager.getDelegate(thisTheme.getNativeTheme());
-        StyleResourceValue style = resolveStyle(themeDelegate.mThemeResId);
+        StyleResourceValue style = resolveStyle(thisTheme.getAppliedStyleResId());
         if (style != null) {
             RenderSessionImpl.getCurrentContext().getRenderResources()
                     .applyStyle(style, themeDelegate.force);
diff --git a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
index 73d274c..bb05d45 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Canvas_Delegate.java
@@ -344,7 +344,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_saveLayer(long nativeCanvas, RectF bounds,
+    /*package*/ static int native_saveLayer(long nativeCanvas, RectF bounds,
                                                long paint, int layerFlags) {
         // get the delegate from the native int.
         Canvas_Delegate canvasDelegate = sManager.getDelegate(nativeCanvas);
@@ -361,7 +361,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_saveLayer(long nativeCanvas, float l,
+    /*package*/ static int native_saveLayer(long nativeCanvas, float l,
                                                float t, float r, float b,
                                                long paint, int layerFlags) {
         // get the delegate from the native int.
@@ -380,7 +380,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_saveLayerAlpha(long nativeCanvas,
+    /*package*/ static int native_saveLayerAlpha(long nativeCanvas,
                                                     RectF bounds, int alpha,
                                                     int layerFlags) {
         // get the delegate from the native int.
@@ -393,7 +393,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_saveLayerAlpha(long nativeCanvas, float l,
+    /*package*/ static int native_saveLayerAlpha(long nativeCanvas, float l,
                                                     float t, float r, float b,
                                                     int alpha, int layerFlags) {
         // get the delegate from the native int.
@@ -975,8 +975,10 @@
     @LayoutlibDelegate
     /*package*/ static void native_drawText(long nativeCanvas,
             final char[] text, final int index, final int count,
-            final float startX, final float startY, final int flags, long paint) {
+            final float startX, final float startY, final int flags, long paint,
+            long typeface) {
 
+        // TODO: use typeface.
         draw(nativeCanvas, paint, false /*compositeOnly*/, false /*forceSrcMode*/,
                 new GcSnapshot.Drawable() {
             @Override
@@ -1006,30 +1008,31 @@
 
     @LayoutlibDelegate
     /*package*/ static void native_drawText(long nativeCanvas, String text,
-            int start, int end, float x, float y, final int flags, long paint) {
+            int start, int end, float x, float y, final int flags, long paint,
+            long typeface) {
         int count = end - start;
         char[] buffer = TemporaryBuffer.obtain(count);
         TextUtils.getChars(text, start, end, buffer, 0);
 
-        native_drawText(nativeCanvas, buffer, 0, count, x, y, flags, paint);
+        native_drawText(nativeCanvas, buffer, 0, count, x, y, flags, paint, typeface);
     }
 
     @LayoutlibDelegate
     /*package*/ static void native_drawTextRun(long nativeCanvas, String text,
             int start, int end, int contextStart, int contextEnd,
-            float x, float y, int flags, long paint) {
+            float x, float y, int flags, long paint, long typeface) {
         int count = end - start;
         char[] buffer = TemporaryBuffer.obtain(count);
         TextUtils.getChars(text, start, end, buffer, 0);
 
-        native_drawText(nativeCanvas, buffer, 0, count, x, y, flags, paint);
+        native_drawText(nativeCanvas, buffer, 0, count, x, y, flags, paint, typeface);
     }
 
     @LayoutlibDelegate
     /*package*/ static void native_drawTextRun(long nativeCanvas, char[] text,
             int start, int count, int contextStart, int contextCount,
-            float x, float y, int flags, long paint) {
-        native_drawText(nativeCanvas, text, start, count, x, y, flags, paint);
+            float x, float y, int flags, long paint, long typeface) {
+        native_drawText(nativeCanvas, text, start, count, x, y, flags, paint, typeface);
     }
 
     @LayoutlibDelegate
diff --git a/tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java
index d6b3da1..bf03a5e 100644
--- a/tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/ColorFilter_Delegate.java
@@ -56,7 +56,7 @@
     // ---- native methods ----
 
     @LayoutlibDelegate
-    /*package*/ static void finalizer(long native_instance, long nativeColorFilter) {
+    /*package*/ static void destroyFilter(long native_instance) {
         sManager.removeJavaReferenceFor(native_instance);
     }
 
diff --git a/tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java
index ca8f450..9aac2bd 100644
--- a/tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/ColorMatrixColorFilter_Delegate.java
@@ -60,11 +60,5 @@
         return sManager.addNewDelegate(newDelegate);
     }
 
-    @LayoutlibDelegate
-    /*package*/ static long nColorMatrixFilter(long nativeFilter, float[] array) {
-        // pass
-        return 0;
-    }
-
     // ---- Private delegate/helper methods ----
 }
diff --git a/tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java
index defaac3..501d55c 100644
--- a/tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/LightingColorFilter_Delegate.java
@@ -60,11 +60,5 @@
         return sManager.addNewDelegate(newDelegate);
     }
 
-    @LayoutlibDelegate
-    /*package*/ static int nCreateLightingFilter(long nativeFilter, int mul, int add) {
-        // pass
-        return 0;
-    }
-
     // ---- Private delegate/helper methods ----
 }
diff --git a/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java
index ebfe9bc..8862f5b 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Matrix_Delegate.java
@@ -355,227 +355,162 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_setConcat(long native_object, long a, long b) {
+    /*package*/ static void native_setConcat(long native_object, long a, long b) {
         if (a == native_object) {
-            return native_preConcat(native_object, b);
+            native_preConcat(native_object, b);
+            return;
         } else if (b == native_object) {
-            return native_postConcat(native_object, a);
+            native_postConcat(native_object, a);
+            return;
         }
 
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
-        }
-
         Matrix_Delegate a_mtx = sManager.getDelegate(a);
-        if (a_mtx == null) {
-            return false;
-        }
-
         Matrix_Delegate b_mtx = sManager.getDelegate(b);
-        if (b_mtx == null) {
-            return false;
+        if (d != null && a_mtx != null && b_mtx != null) {
+            multiply(d.mValues, a_mtx.mValues, b_mtx.mValues);
         }
-
-        multiply(d.mValues, a_mtx.mValues, b_mtx.mValues);
-
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preTranslate(long native_object, float dx, float dy) {
+    /*package*/ static void native_preTranslate(long native_object, float dx, float dy) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.preTransform(getTranslate(dx, dy));
         }
-
-        d.preTransform(getTranslate(dx, dy));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preScale(long native_object, float sx, float sy,
+    /*package*/ static void native_preScale(long native_object, float sx, float sy,
             float px, float py) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.preTransform(getScale(sx, sy, px, py));
         }
-
-        d.preTransform(getScale(sx, sy, px, py));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preScale(long native_object, float sx, float sy) {
+    /*package*/ static void native_preScale(long native_object, float sx, float sy) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.preTransform(getScale(sx, sy));
         }
-
-        d.preTransform(getScale(sx, sy));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preRotate(long native_object, float degrees,
+    /*package*/ static void native_preRotate(long native_object, float degrees,
             float px, float py) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.preTransform(getRotate(degrees, px, py));
         }
-
-        d.preTransform(getRotate(degrees, px, py));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preRotate(long native_object, float degrees) {
+    /*package*/ static void native_preRotate(long native_object, float degrees) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+
+            double rad = Math.toRadians(degrees);
+            float sin = (float) Math.sin(rad);
+            float cos = (float) Math.cos(rad);
+
+            d.preTransform(getRotate(sin, cos));
         }
-
-        double rad = Math.toRadians(degrees);
-        float sin = (float)Math.sin(rad);
-        float cos = (float)Math.cos(rad);
-
-        d.preTransform(getRotate(sin, cos));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preSkew(long native_object, float kx, float ky,
+    /*package*/ static void native_preSkew(long native_object, float kx, float ky,
             float px, float py) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.preTransform(getSkew(kx, ky, px, py));
         }
-
-        d.preTransform(getSkew(kx, ky, px, py));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preSkew(long native_object, float kx, float ky) {
+    /*package*/ static void native_preSkew(long native_object, float kx, float ky) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.preTransform(getSkew(kx, ky));
         }
-
-        d.preTransform(getSkew(kx, ky));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_preConcat(long native_object, long other_matrix) {
+    /*package*/ static void native_preConcat(long native_object, long other_matrix) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
-        }
-
         Matrix_Delegate other = sManager.getDelegate(other_matrix);
-        if (other == null) {
-            return false;
+        if (d != null && other != null) {
+            d.preTransform(other.mValues);
         }
-
-        d.preTransform(other.mValues);
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postTranslate(long native_object, float dx, float dy) {
+    /*package*/ static void native_postTranslate(long native_object, float dx, float dy) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.postTransform(getTranslate(dx, dy));
         }
-
-        d.postTransform(getTranslate(dx, dy));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postScale(long native_object, float sx, float sy,
+    /*package*/ static void native_postScale(long native_object, float sx, float sy,
             float px, float py) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.postTransform(getScale(sx, sy, px, py));
         }
-
-        d.postTransform(getScale(sx, sy, px, py));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postScale(long native_object, float sx, float sy) {
+    /*package*/ static void native_postScale(long native_object, float sx, float sy) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.postTransform(getScale(sx, sy));
         }
-
-        d.postTransform(getScale(sx, sy));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postRotate(long native_object, float degrees,
+    /*package*/ static void native_postRotate(long native_object, float degrees,
             float px, float py) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.postTransform(getRotate(degrees, px, py));
         }
-
-        d.postTransform(getRotate(degrees, px, py));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postRotate(long native_object, float degrees) {
+    /*package*/ static void native_postRotate(long native_object, float degrees) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.postTransform(getRotate(degrees));
         }
-
-        d.postTransform(getRotate(degrees));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postSkew(long native_object, float kx, float ky,
+    /*package*/ static void native_postSkew(long native_object, float kx, float ky,
             float px, float py) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.postTransform(getSkew(kx, ky, px, py));
         }
-
-        d.postTransform(getSkew(kx, ky, px, py));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postSkew(long native_object, float kx, float ky) {
+    /*package*/ static void native_postSkew(long native_object, float kx, float ky) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
+        if (d != null) {
+            d.postTransform(getSkew(kx, ky));
         }
-
-        d.postTransform(getSkew(kx, ky));
-        return true;
     }
 
     @LayoutlibDelegate
-    /*package*/ static boolean native_postConcat(long native_object, long other_matrix) {
+    /*package*/ static void native_postConcat(long native_object, long other_matrix) {
         Matrix_Delegate d = sManager.getDelegate(native_object);
-        if (d == null) {
-            return false;
-        }
-
         Matrix_Delegate other = sManager.getDelegate(other_matrix);
-        if (other == null) {
-            return false;
+        if (d != null && other != null) {
+            d.postTransform(other.mValues);
         }
-
-        d.postTransform(other.mValues);
-        return true;
     }
 
     @LayoutlibDelegate
diff --git a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
index 7007b71..25eaaf5 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Paint_Delegate.java
@@ -428,6 +428,16 @@
     }
 
     @LayoutlibDelegate
+    /*package*/ static boolean isElegantTextHeight(Paint thisPaint) {
+        return false;
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static void setElegantTextHeight(Paint thisPaint, boolean elegant) {
+        // TODO
+    }
+
+    @LayoutlibDelegate
     /*package*/ static float getTextSize(Paint thisPaint) {
         // get the delegate from the native int.
         Paint_Delegate delegate = sManager.getDelegate(thisPaint.mNativePaint);
@@ -688,7 +698,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getStyle(long native_object) {
+    /*package*/ static int native_getStyle(long native_object) {
         // get the delegate from the native int.
         Paint_Delegate delegate = sManager.getDelegate(native_object);
         if (delegate == null) {
@@ -710,7 +720,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getStrokeCap(long native_object) {
+    /*package*/ static int native_getStrokeCap(long native_object) {
         // get the delegate from the native int.
         Paint_Delegate delegate = sManager.getDelegate(native_object);
         if (delegate == null) {
@@ -732,7 +742,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getStrokeJoin(long native_object) {
+    /*package*/ static int native_getStrokeJoin(long native_object) {
         // get the delegate from the native int.
         Paint_Delegate delegate = sManager.getDelegate(native_object);
         if (delegate == null) {
@@ -889,7 +899,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getTextAlign(long native_object) {
+    /*package*/ static int native_getTextAlign(long native_object) {
         // get the delegate from the native int.
         Paint_Delegate delegate = sManager.getDelegate(native_object);
         if (delegate == null) {
@@ -922,7 +932,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getTextWidths(long native_object, char[] text, int index,
+    /*package*/ static int native_getTextWidths(long native_object, char[] text, int index,
             int count, int bidiFlags, float[] widths) {
         // get the delegate from the native int.
         Paint_Delegate delegate = sManager.getDelegate(native_object);
@@ -964,14 +974,14 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getTextWidths(long native_object, String text, int start,
+    /*package*/ static int native_getTextWidths(long native_object, String text, int start,
             int end, int bidiFlags, float[] widths) {
         return native_getTextWidths(native_object, text.toCharArray(), start, end - start,
                 bidiFlags, widths);
     }
 
     @LayoutlibDelegate
-    /* package */static long native_getTextGlyphs(long native_object, String text, int start,
+    /* package */static int native_getTextGlyphs(long native_object, String text, int start,
             int end, int contextStart, int contextEnd, int flags, char[] glyphs) {
         // FIXME
         return 0;
@@ -1012,7 +1022,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getTextRunCursor(Paint thisPaint, long native_object, char[] text,
+    /*package*/ static int native_getTextRunCursor(Paint thisPaint, long native_object, char[] text,
             int contextStart, int contextLength, int flags, int offset, int cursorOpt) {
         // FIXME
         Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
@@ -1021,7 +1031,7 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getTextRunCursor(Paint thisPaint, long native_object, String text,
+    /*package*/ static int native_getTextRunCursor(Paint thisPaint, long native_object, String text,
             int contextStart, int contextEnd, int flags, int offset, int cursorOpt) {
         // FIXME
         Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
diff --git a/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java
index 6f6ef20..b235408 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Path_Delegate.java
@@ -142,7 +142,14 @@
     }
 
     @LayoutlibDelegate
-    /*package*/ static long native_getFillType(long nPath) {
+    /*package*/ static boolean native_isConvex(long nPath) {
+        Bridge.getLog().fidelityWarning(LayoutLog.TAG_UNSUPPORTED,
+                "Path.isConvex is not supported.", null, null);
+        return true;
+    }
+
+    @LayoutlibDelegate
+    /*package*/ static int native_getFillType(long nPath) {
         Path_Delegate pathDelegate = sManager.getDelegate(nPath);
         if (pathDelegate == null) {
             return 0;
@@ -484,6 +491,11 @@
         sManager.removeJavaReferenceFor(nPath);
     }
 
+    @LayoutlibDelegate
+    /*package*/ static float[] native_approximate(long nPath, float error) {
+        Bridge.getLog().error(LayoutLog.TAG_UNSUPPORTED, "Path.approximate() not supported", null);
+        return new float[0];
+    }
 
     // ---- Private helper methods ----
 
diff --git a/tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java
index 6049919..1bc3033 100644
--- a/tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/PorterDuffColorFilter_Delegate.java
@@ -60,12 +60,5 @@
         return sManager.addNewDelegate(newDelegate);
     }
 
-    @LayoutlibDelegate
-    /*package*/ static long nCreatePorterDuffFilter(long nativeFilter, int srcColor,
-            int porterDuffMode) {
-        // pass
-        return 0;
-    }
-
     // ---- Private delegate/helper methods ----
 }
diff --git a/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java
index d2aae92..edb7025 100644
--- a/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java
@@ -289,7 +289,6 @@
         dstRegion.mArea.reset();
         dstRegion.mArea.add(srcRegion.mArea);
 
-        return;
     }
 
     @LayoutlibDelegate
diff --git a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
index a2e93a7..af22f44 100644
--- a/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
+++ b/tools/layoutlib/bridge/src/android/view/BridgeInflater.java
@@ -121,10 +121,11 @@
     }
 
     @Override
-    public View createViewFromTag(View parent, String name, AttributeSet attrs) {
+    public View createViewFromTag(View parent, String name, AttributeSet attrs,
+            boolean inheritContext) {
         View view = null;
         try {
-            view = super.createViewFromTag(parent, name, attrs);
+            view = super.createViewFromTag(parent, name, attrs, inheritContext);
         } catch (InflateException e) {
             // try to load the class from using the custom view loader
             try {
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index dd2cbc1..757cdd2 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -23,22 +23,13 @@
 import android.content.res.CompatibilityInfo;
 import android.content.res.Configuration;
 import android.graphics.Bitmap;
-import android.graphics.Rect;
 import android.os.Bundle;
 import android.os.IBinder;
 import android.os.IRemoteCallback;
 import android.os.RemoteException;
 import android.util.DisplayMetrics;
-import android.view.Display;
-import android.view.Gravity;
-import android.view.IApplicationToken;
-import android.view.IInputFilter;
-import android.view.IOnKeyguardExitResult;
-import android.view.IRotationWatcher;
-import android.view.IWindowManager;
-import android.view.IWindowSession;
 
-import java.util.List;
+import java.lang.Override;
 
 /**
  * Basic implementation of {@link IWindowManager} so that {@link Display} (and
@@ -458,44 +449,26 @@
     }
 
     @Override
-    public IBinder getFocusedWindowToken() {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void setInputFilter(IInputFilter filter) throws RemoteException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void getWindowFrame(IBinder token, Rect outFrame) {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void setMagnificationCallbacks(IMagnificationCallbacks callbacks) {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void setMagnificationSpec(MagnificationSpec spec) {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public MagnificationSpec getCompatibleMagnificationSpecForWindow(IBinder windowToken) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
     public boolean isRotationFrozen() throws RemoteException {
         // TODO Auto-generated method stub
         return false;
     }
 
     @Override
-    public void setTouchExplorationEnabled(boolean enabled) {
+    public void enableScreenIfNeeded() throws RemoteException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public boolean clearWindowContentFrameStats(IBinder token) throws RemoteException {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
+    @Override
+    public WindowContentFrameStats getWindowContentFrameStats(IBinder token)
+            throws RemoteException {
+        // TODO Auto-generated method stub
+        return null;
     }
 }
diff --git a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
index 3db3a1b..7a73fae 100644
--- a/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/LayoutInflater_Delegate.java
@@ -48,9 +48,9 @@
      * This implementation just records the merge status before calling the default implementation.
      */
     @LayoutlibDelegate
-    /*package*/ static void rInflate(LayoutInflater thisInflater,
-            XmlPullParser parser, View parent, final AttributeSet attrs,
-            boolean finishInflate) throws XmlPullParserException, IOException {
+    /* package */ static void rInflate(LayoutInflater thisInflater, XmlPullParser parser,
+            View parent, final AttributeSet attrs, boolean finishInflate, boolean inheritContext)
+            throws XmlPullParserException, IOException {
 
         if (finishInflate == false) {
             // this is a merge rInflate!
@@ -61,7 +61,7 @@
 
         // ---- START DEFAULT IMPLEMENTATION.
 
-        thisInflater.rInflate_Original(parser, parent, attrs, finishInflate);
+        thisInflater.rInflate_Original(parser, parent, attrs, finishInflate, inheritContext);
 
         // ---- END DEFAULT IMPLEMENTATION.
 
@@ -74,10 +74,8 @@
     }
 
     @LayoutlibDelegate
-    public static void parseInclude(
-            LayoutInflater thisInflater,
-            XmlPullParser parser, View parent, AttributeSet attrs)
-            throws XmlPullParserException, IOException {
+    public static void parseInclude(LayoutInflater thisInflater, XmlPullParser parser, View parent,
+            AttributeSet attrs, boolean inheritContext) throws XmlPullParserException, IOException {
 
         int type;
 
@@ -113,9 +111,11 @@
 
                     if (TAG_MERGE.equals(childName)) {
                         // Inflate all children.
-                        thisInflater.rInflate(childParser, parent, childAttrs, false);
+                        thisInflater.rInflate(childParser, parent, childAttrs, false,
+                                inheritContext);
                     } else {
-                        final View view = thisInflater.createViewFromTag(parent, childName, childAttrs);
+                        final View view = thisInflater.createViewFromTag(parent, childName,
+                                childAttrs, inheritContext);
                         final ViewGroup group = (ViewGroup) parent;
 
                         // We try to load the layout params set in the <include /> tag. If
@@ -151,7 +151,7 @@
                         }
 
                         // Inflate all children.
-                        thisInflater.rInflate(childParser, view, childAttrs, true);
+                        thisInflater.rInflate(childParser, view, childAttrs, true, true);
 
                         // Attempt to override the included layout's android:id with the
                         // one set on the <include /> tag itself.
diff --git a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
index e34ad38b..0dddf3d 100644
--- a/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
+++ b/tools/layoutlib/bridge/src/android/view/MenuInflater_Delegate.java
@@ -23,7 +23,6 @@
 import com.android.internal.view.menu.MenuView;
 import com.android.layoutlib.bridge.Bridge;
 import com.android.layoutlib.bridge.android.BridgeContext;
-import com.android.layoutlib.bridge.android.BridgeXmlBlockParser;
 import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
 
 import android.util.AttributeSet;
diff --git a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
index 4bef424..cdb839a 100644
--- a/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
+++ b/tools/layoutlib/bridge/src/com/android/internal/view/menu/BridgeMenuItemImpl.java
@@ -16,6 +16,12 @@
 
 package com.android.internal.view.menu;
 
+import com.android.layoutlib.bridge.android.BridgeContext;
+
+import android.content.Context;
+import android.view.ContextThemeWrapper;
+import android.view.View;
+
 /**
  * An extension of the {@link MenuItemImpl} to store the view cookie also.
  */
@@ -27,6 +33,7 @@
      * at the time of rendering.
      */
     private Object viewCookie;
+    private BridgeContext mContext;
 
     /**
      * Instantiates this menu item.
@@ -34,14 +41,28 @@
     BridgeMenuItemImpl(MenuBuilder menu, int group, int id, int categoryOrder, int ordering,
             CharSequence title, int showAsAction) {
         super(menu, group, id, categoryOrder, ordering, title, showAsAction);
+        Context context = menu.getContext();
+        if (context instanceof ContextThemeWrapper) {
+            context = ((ContextThemeWrapper) context).getBaseContext();
+        }
+        if (context instanceof BridgeContext) {
+            mContext = ((BridgeContext) context);
+        }
     }
 
-
     public Object getViewCookie() {
         return viewCookie;
     }
 
     public void setViewCookie(Object viewCookie) {
+        // If the menu item has an associated action provider view,
+        // directly set the cookie in the view to cookie map stored in BridgeContext.
+        View actionView = getActionView();
+        if (actionView != null && mContext != null) {
+            mContext.addViewKey(actionView, viewCookie);
+            // We don't need to add the view cookie to the this item now. But there's no harm in
+            // storing it, in case we need it in the future.
+        }
         this.viewCookie = viewCookie;
     }
 }
diff --git a/tools/layoutlib/bridge/src/com/android/internal/view/menu/MenuBuilderAccessor.java b/tools/layoutlib/bridge/src/com/android/internal/view/menu/MenuBuilderAccessor.java
deleted file mode 100644
index f0798cb..0000000
--- a/tools/layoutlib/bridge/src/com/android/internal/view/menu/MenuBuilderAccessor.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.android.internal.view.menu;
-
-import java.util.ArrayList;
-
-/**
- * To access non public members of {@link MenuBuilder}
- */
-public class MenuBuilderAccessor {
-    public static ArrayList<MenuItemImpl> getNonActionItems(MenuBuilder builder) {
-        return builder.getNonActionItems();
-    }
-}
diff --git a/tools/layoutlib/bridge/src/com/android/internal/widget/ActionBarAccessor.java b/tools/layoutlib/bridge/src/com/android/internal/widget/ActionBarAccessor.java
index 47a3679..40b6220 100644
--- a/tools/layoutlib/bridge/src/com/android/internal/widget/ActionBarAccessor.java
+++ b/tools/layoutlib/bridge/src/com/android/internal/widget/ActionBarAccessor.java
@@ -16,7 +16,7 @@
 
 package com.android.internal.widget;
 
-import com.android.internal.view.menu.ActionMenuPresenter;
+import android.widget.ActionMenuPresenter;
 
 /**
  * To access non public members of AbsActionBarView
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
index 01740b1..89288bf 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContentProvider.java
@@ -135,6 +135,7 @@
         return null;
     }
 
+
     @Override
     public Uri canonicalize(String callingPkg, Uri uri) throws RemoteException {
         return null;
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
index 6595ce1..08e9d99 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java
@@ -58,6 +58,7 @@
 import android.database.sqlite.SQLiteDatabase.CursorFactory;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.hardware.display.DisplayManager;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -101,6 +102,7 @@
     private final ApplicationInfo mApplicationInfo;
     private final IProjectCallback mProjectCallback;
     private final WindowManager mWindowManager;
+    private final DisplayManager mDisplayManager;
 
     private Resources.Theme mTheme;
 
@@ -149,6 +151,7 @@
         }
 
         mWindowManager = new WindowManagerImpl(mMetrics);
+        mDisplayManager = new DisplayManager(this);
     }
 
     /**
@@ -455,6 +458,10 @@
             return new PowerManager(this, new BridgePowerManager(), new Handler());
         }
 
+        if (DISPLAY_SERVICE.equals(service)) {
+            return mDisplayManager;
+        }
+
         throw new UnsupportedOperationException("Unsupported Service: " + service);
     }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
index 3cf5ed5..0bb7fc2 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
@@ -209,6 +209,17 @@
     }
 
     @Override
+        public int getInputMethodWindowVisibleHeight() throws RemoteException {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    @Override
+        public void notifyTextCommitted() throws RemoteException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
     public void updateStatusIcon(IBinder arg0, String arg1, int arg2) throws RemoteException {
         // TODO Auto-generated method stub
 
@@ -227,4 +238,9 @@
         // TODO Auto-generated method stub
         return null;
     }
+
+    @Override
+    public void setCursorAnchorMonitorMode(IBinder arg0, int arg1) {
+      // TODO Auto-generated method stub
+    }
 }
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
index 908fc47..4eb70aa 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgePowerManager.java
@@ -39,7 +39,7 @@
     }
 
     @Override
-    public void acquireWakeLock(IBinder arg0, int arg1, String arg2, String arg2_5, WorkSource arg3)
+    public void acquireWakeLock(IBinder arg0, int arg1, String arg2, String arg2_5, WorkSource arg3, String arg4)
             throws RemoteException {
         // pass for now.
     }
@@ -51,6 +51,11 @@
     }
 
     @Override
+    public void powerHint(int hintId, int data) {
+        // pass for now.
+    }
+
+    @Override
     public void crash(String arg0) throws RemoteException {
         // pass for now.
     }
@@ -111,7 +116,7 @@
     }
 
     @Override
-    public void updateWakeLockWorkSource(IBinder arg0, WorkSource arg1) throws RemoteException {
+    public void updateWakeLockWorkSource(IBinder arg0, WorkSource arg1, String arg2) throws RemoteException {
         // pass for now.
     }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java
index f82ca65..936ab4f 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/ActionBarLayout.java
@@ -25,10 +25,9 @@
 import com.android.ide.common.rendering.api.SessionParams;
 import com.android.ide.common.rendering.api.SystemViewCookie;
 import com.android.internal.R;
-import com.android.internal.app.ActionBarImpl;
+import com.android.internal.app.WindowDecorActionBar;
 import com.android.internal.util.Predicate;
 import com.android.internal.view.menu.MenuBuilder;
-import com.android.internal.view.menu.MenuBuilderAccessor;
 import com.android.internal.view.menu.MenuItemImpl;
 import com.android.internal.widget.ActionBarAccessor;
 import com.android.internal.widget.ActionBarContainer;
@@ -51,6 +50,7 @@
 import android.view.MenuInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.ActionMenuView;
 import android.widget.FrameLayout;
 import android.widget.LinearLayout;
 import android.widget.ListAdapter;
@@ -100,7 +100,7 @@
         // Inflate action bar layout.
         LayoutInflater.from(context).inflate(R.layout.screen_action_bar, this,
                 true /*attachToRoot*/);
-        mActionBar = new ActionBarImpl(this);
+        mActionBar = new WindowDecorActionBar(this);
 
         // Set contexts.
         mBridgeContext = context;
@@ -180,8 +180,9 @@
             Predicate<View> overflowMenuButtonTest = new Predicate<View>() {
                 @Override
                 public boolean apply(View view) {
-                    return view.getClass().getName().equals("com.android.internal.view.menu." +
-                            "ActionMenuPresenter$OverflowMenuButton");
+                    ViewGroup.LayoutParams lp = view.getLayoutParams();
+                    return lp instanceof ActionMenuView.LayoutParams &&
+                            ((ActionMenuView.LayoutParams) lp).isOverflowButton;
                 }
             };
             View overflowMenu = null;
@@ -321,7 +322,7 @@
             return false;
         }
         // Copied from android.widget.ActionMenuPresenter.updateMenuView()
-        ArrayList<MenuItemImpl> menus = MenuBuilderAccessor.getNonActionItems(mMenuBuilder);
+        ArrayList<MenuItemImpl> menus = mMenuBuilder.getNonActionItems();
         if (ActionBarAccessor.getActionMenuPresenter(mActionBarView).isOverflowReserved() &&
                 menus != null) {
             final int count = menus.size();
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
index bcd08eb4..86797e5 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/CustomBar.java
@@ -87,7 +87,7 @@
         }
     }
 
-    private InputStream getIcon(String iconName, Density[] densityInOut, LayoutDirection direction, 
+    private InputStream getIcon(String iconName, Density[] densityInOut, LayoutDirection direction,
             String[] pathOut, boolean tryOtherDensities) {
         // current density
         Density density = densityInOut[0];
@@ -111,10 +111,10 @@
                         return stream;
                     }
                 }
-            }
-            // couldn't find resource with direction qualifier. try without.
-            if (direction != null) {
-                return getIcon(iconName, densityInOut, null, pathOut, true);
+                // couldn't find resource with direction qualifier. try without.
+                if (direction != null) {
+                    return getIcon(iconName, densityInOut, null, pathOut, true);
+                }
             }
         }
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
index 84e676e..112c267 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/NavigationBar.java
@@ -17,7 +17,6 @@
 package com.android.layoutlib.bridge.bars;
 
 import com.android.resources.Density;
-import com.android.layoutlib.bridge.Bridge;
 
 import org.xmlpull.v1.XmlPullParserException;
 
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/OverflowMenuAdapter.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/OverflowMenuAdapter.java
index 79e231c..778305d 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/OverflowMenuAdapter.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/OverflowMenuAdapter.java
@@ -17,7 +17,6 @@
 package com.android.layoutlib.bridge.bars;
 
 import com.android.internal.view.menu.MenuBuilder;
-import com.android.internal.view.menu.MenuBuilderAccessor;
 import com.android.internal.view.menu.MenuItemImpl;
 import com.android.internal.view.menu.MenuView;
 
@@ -47,7 +46,7 @@
 
     @Override
     public int getCount() {
-        ArrayList<MenuItemImpl> items = MenuBuilderAccessor.getNonActionItems(mMenu);
+        ArrayList<MenuItemImpl> items = mMenu.getNonActionItems();
         if (mExpandedIndex < 0) {
             return items.size();
         }
@@ -56,7 +55,7 @@
 
     @Override
     public MenuItemImpl getItem(int position) {
-        ArrayList<MenuItemImpl> items = MenuBuilderAccessor.getNonActionItems(mMenu);
+        ArrayList<MenuItemImpl> items = mMenu.getNonActionItems();
         if (mExpandedIndex >= 0 && position >= mExpandedIndex) {
             position++;
         }
@@ -86,7 +85,7 @@
     private void findExpandedIndex() {
         final MenuItemImpl expandedItem = mMenu.getExpandedItem();
         if (expandedItem != null) {
-            final ArrayList<MenuItemImpl> items = MenuBuilderAccessor.getNonActionItems(mMenu);
+            final ArrayList<MenuItemImpl> items = mMenu.getNonActionItems();
             final int count = items.size();
             for (int i = 0; i < count; i++) {
                 final MenuItemImpl item = items.get(i);
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
index 3692d96..1498044 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/bars/StatusBar.java
@@ -33,7 +33,6 @@
     public StatusBar(Context context, Density density, int direction, boolean RtlEnabled)
             throws XmlPullParserException {
         // FIXME: if direction is RTL but it's not enabled in application manifest, mirror this bar.
-
         super(context, density, LinearLayout.HORIZONTAL, "/bars/status_bar.xml", "status_bar.xml");
 
         // FIXME: use FILL_H?
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java
index 53e1640..a2a8aa9 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/util/SparseWeakArray.java
@@ -18,6 +18,7 @@
 
 
 import com.android.internal.util.ArrayUtils;
+import com.android.internal.util.GrowingArrayUtils;
 
 import android.util.SparseArray;
 
@@ -59,10 +60,8 @@
      * number of mappings.
      */
     public SparseWeakArray(int initialCapacity) {
-        initialCapacity = ArrayUtils.idealLongArraySize(initialCapacity);
-
-        mKeys = new long[initialCapacity];
-        mValues = new WeakReference[initialCapacity];
+        mKeys = ArrayUtils.newUnpaddedLongArray(initialCapacity);
+        mValues = new WeakReference[mKeys.length];
         mSize = 0;
     }
 
@@ -142,18 +141,6 @@
 
         mGarbage = false;
         mSize = o;
-
-        int newSize = ArrayUtils.idealLongArraySize(mSize);
-        if (newSize < mKeys.length) {
-            long[] nkeys = new long[newSize];
-            WeakReference<?>[] nvalues = new WeakReference[newSize];
-
-            System.arraycopy(mKeys, 0, nkeys, 0, newSize);
-            System.arraycopy(mValues, 0, nvalues, 0, newSize);
-
-            mKeys = nkeys;
-            mValues = nvalues;
-        }
     }
 
     /**
@@ -182,28 +169,8 @@
                 i = ~binarySearch(mKeys, 0, mSize, key);
             }
 
-            if (mSize >= mKeys.length) {
-                int n = ArrayUtils.idealLongArraySize(mSize + 1);
-
-                long[] nkeys = new long[n];
-                WeakReference<?>[] nvalues = new WeakReference[n];
-
-                // Log.e("SparseArray", "grow " + mKeys.length + " to " + n);
-                System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-                System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-                mKeys = nkeys;
-                mValues = nvalues;
-            }
-
-            if (mSize - i != 0) {
-                // Log.e("SparseArray", "move " + (mSize - i));
-                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
-                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
-            }
-
-            mKeys[i] = key;
-            mValues[i] = new WeakReference(value);
+            mKeys = GrowingArrayUtils.insert(mKeys, mSize, i, key);
+            mValues = GrowingArrayUtils.insert(mValues, mSize, i, new WeakReference(value));
             mSize++;
         }
     }
@@ -321,24 +288,9 @@
             gc();
         }
 
-        int pos = mSize;
-        if (pos >= mKeys.length) {
-            int n = ArrayUtils.idealLongArraySize(pos + 1);
-
-            long[] nkeys = new long[n];
-            WeakReference<?>[] nvalues = new WeakReference[n];
-
-            // Log.e("SparseArray", "grow " + mKeys.length + " to " + n);
-            System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
-            System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
-
-            mKeys = nkeys;
-            mValues = nvalues;
-        }
-
-        mKeys[pos] = key;
-        mValues[pos] = new WeakReference(value);
-        mSize = pos + 1;
+        mKeys = GrowingArrayUtils.append(mKeys, mSize, key);
+        mValues = GrowingArrayUtils.append(mValues, mSize, new WeakReference(value));
+        mSize++;
     }
 
     private boolean hasReclaimedRefs() {
diff --git a/tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java b/tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java
index 0f66fd7..19d249b 100644
--- a/tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java
+++ b/tools/layoutlib/bridge/src/libcore/icu/ICU_Delegate.java
@@ -18,6 +18,7 @@
 
 import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
 import com.ibm.icu.text.DateTimePatternGenerator;
+import com.ibm.icu.util.Currency;
 import com.ibm.icu.util.ULocale;
 
 import java.util.Locale;
@@ -117,6 +118,11 @@
     }
 
     @LayoutlibDelegate
+    /*package*/ static int getCurrencyNumericCode(String currencyCode) {
+        return Currency.getInstance(currencyCode).getNumericCode();
+    }
+
+    @LayoutlibDelegate
     /*package*/ static String getCurrencySymbol(String locale, String currencyCode) {
         return "";
     }
diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java
index 7c0bc84..274516c 100644
--- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java
+++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/TestDelegates.java
@@ -121,14 +121,6 @@
                 Method delegateMethod = delegateClass.getDeclaredMethod(originalMethod.getName(),
                         parameters);
 
-                // check that the method has the annotation
-                assertNotNull(
-                        String.format(
-                                "Delegate method %1$s for class %2$s does not have the @LayoutlibDelegate annotation",
-                                delegateMethod.getName(),
-                                originalClass.getName()),
-                        delegateMethod.getAnnotation(LayoutlibDelegate.class));
-
                 // check the return type of the methods match.
                 assertTrue(
                         String.format("Delegate method %1$s.%2$s does not match the corresponding " +
@@ -138,6 +130,14 @@
                                 originalMethod.getReturnType().getName()),
                         delegateMethod.getReturnType() == originalMethod.getReturnType());
 
+                // check that the method has the annotation
+                assertNotNull(
+                        String.format(
+                                "Delegate method %1$s for class %2$s does not have the @LayoutlibDelegate annotation",
+                                delegateMethod.getName(),
+                                originalClass.getName()),
+                        delegateMethod.getAnnotation(LayoutlibDelegate.class));
+
                 // check that the method is static
                 assertTrue(
                         String.format(
diff --git a/tools/layoutlib/create/.classpath b/tools/layoutlib/create/.classpath
index cd8bb0d..25c3b3e 100644
--- a/tools/layoutlib/create/.classpath
+++ b/tools/layoutlib/create/.classpath
@@ -4,6 +4,6 @@
 	<classpathentry excluding="mock_data/" kind="src" path="tests"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
-	<classpathentry kind="var" path="ANDROID_SRC/prebuilts/tools/common/asm-tools/asm-4.0.jar" sourcepath="/ANDROID_PLAT/prebuilts/tools/common/asm-tools/src-4.0.zip"/>
+	<classpathentry kind="var" path="ANDROID_PLAT_SRC/prebuilts/misc/common/asm/asm-4.0.jar" sourcepath="/ANDROID_PLAT_SRC/prebuilts/misc/common/asm/src.zip"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tools/layoutlib/create/README.txt b/tools/layoutlib/create/README.txt
index ef2b185..6e0a300 100644
--- a/tools/layoutlib/create/README.txt
+++ b/tools/layoutlib/create/README.txt
@@ -4,46 +4,45 @@
 - Description -
 ---------------
 
-Layoutlib_create generates a JAR library used by the Eclipse graphical layout editor
-to perform layout.
+Layoutlib_create generates a JAR library used by the Eclipse graphical layout editor to perform
+layout.
 
 
 - Usage -
 ---------
 
- ./layoutlib_create path/to/android.jar destination.jar
+ ./layoutlib_create destination.jar path/to/android1.jar path/to/android2.jar
 
 
 - Design Overview -
 -------------------
 
-Layoutlib_create uses the "android.jar" containing all the Java code used by Android
-as generated by the Android build, right before the classes are converted to a DEX format.
+Layoutlib_create uses a few jars from the framework containing the Java code used by Android as
+generated by the Android build, right before the classes are converted to a DEX format.
 
-The Android JAR can't be used directly in Eclipse:
-- it contains references to native code (which we want to avoid in Eclipse),
-- some classes need to be overridden, for example all the drawing code that is
-  replaced by Java 2D calls in Eclipse.
-- some of the classes that need to be changed are final and/or we need access
-  to their private internal state.
+These jars can't be used directly in Eclipse as:
+- they contains references to native code (which we want to avoid in Eclipse),
+- some classes need to be overridden, for example all the drawing code that is replaced by Java 2D
+  calls in Eclipse.
+- some of the classes that need to be changed are final and/or we need access to their private
+  internal state.
 
 Consequently this tool:
 - parses the input JAR,
 - modifies some of the classes directly using some bytecode manipulation,
 - filters some packages and removes those we don't want in the output JAR,
 - injects some new classes,
-- generates a modified JAR file that is suitable for the Android plugin
-  for Eclipse to perform rendering.
+- generates a modified JAR file that is suitable for the Android plugin for Eclipse to perform
+  rendering.
 
 The ASM library is used to do the bytecode modification using its visitor pattern API.
 
-The layoutlib_create is *NOT* generic. There is no configuration file. Instead all the
-configuration is done in the main() method and the CreateInfo structure is expected to
-change with the Android platform as new classes are added, changed or removed.
+The layoutlib_create is *NOT* generic. There is no configuration file. Instead all the configuration
+is done in the main() method and the CreateInfo structure is expected to change with the Android
+platform as new classes are added, changed or removed.
 
-The resulting JAR is used by layoutlib_bridge (a.k.a. "the bridge"), also part of the
-platform, that provides all the necessary missing implementation for rendering graphics
-in Eclipse.
+The resulting JAR is used by layoutlib_bridge (a.k.a. "the bridge"), also part of the platform, that
+provides all the necessary missing implementation for rendering graphics in Eclipse.
 
 
 
@@ -58,97 +57,96 @@
 - Analyzer
 ----------
 
-The goal of the analyzer is to create a graph of all the classes from the input JAR
-with their dependencies and then only keep the ones we want.
+The goal of the analyzer is to create a graph of all the classes from the input JAR with their
+dependencies and then only keep the ones we want.
 
-To do that, the analyzer is created with a list of base classes to keep -- everything
-that derives from these is kept. Currently the one such class is android.view.View:
-since we want to render layouts, anything that is sort of a view needs to be kept.
+To do that, the analyzer is created with a list of base classes to keep -- everything that derives
+from these is kept. Currently the one such class is android.view.View: since we want to render
+layouts, anything that is sort of a view needs to be kept.
 
-The analyzer is also given a list of class names to keep in the output.
-This is done using shell-like glob patterns that filter on the fully-qualified
-class names, for example "android.*.R**" ("*" does not matches dots whilst "**" does,
-and "." and "$" are interpreted as-is).
-In practice we almost but not quite request the inclusion of full packages.
+The analyzer is also given a list of class names to keep in the output. This is done using
+shell-like glob patterns that filter on the fully-qualified class names, for example "android.*.R**"
+("*" does not matches dots whilst "**" does, and "." and "$" are interpreted as-is). In practice we
+almost but not quite request the inclusion of full packages.
 
-The analyzer is also given a list of classes to exclude. A fake implementation of these
-classes is injected by the Generator.
+The analyzer is also given a list of classes to exclude. A fake implementation of these classes is
+injected by the Generator.
 
-With this information, the analyzer parses the input zip to find all the classes.
-All classes deriving from the requested bases classes are kept.
-All classes which name matched the glob pattern are kept.
-The analysis then finds all the dependencies of the classes that are to be kept
-using an ASM visitor on the class, the field types, the method types and annotations types.
-Classes that belong to the current JRE are excluded.
+With this information, the analyzer parses the input zip to find all the classes. All classes
+deriving from the requested bases classes are kept. All classes whose name match the glob pattern
+are kept. The analysis then finds all the dependencies of the classes that are to be kept using an
+ASM visitor on the class, the field types, the method types and annotations types. Classes that
+belong to the current JRE are excluded.
 
-The output of the analyzer is a set of ASM ClassReader instances which are then
-fed to the generator.
+The output of the analyzer is a set of ASM ClassReader instances which are then fed to the
+generator.
 
 
 - Generator
 -----------
 
-The generator is constructed from a CreateInfo struct that acts as a config file
-and lists:
-- the classes to inject in the output JAR -- these classes are directly implemented
-  in layoutlib_create and will be used to interface with the renderer in Eclipse.
+The generator is constructed from a CreateInfo struct that acts as a config file and lists:
+- the classes to inject in the output JAR -- these classes are directly implemented in
+  layoutlib_create and will be used to interface with the renderer in Eclipse.
 - specific methods to override (see method stubs details below).
 - specific methods for which to delegate calls.
 - specific methods to remove based on their return type.
 - specific classes to rename.
 - specific classes to refactor.
 
-Each of these are specific strategies we use to be able to modify the Android code
-to fit within the Eclipse renderer. These strategies are explained beow.
+Each of these are specific strategies we use to be able to modify the Android code to fit within the
+Eclipse renderer. These strategies are explained beow.
 
-The core method of the generator is transform(): it takes an input ASM ClassReader
-and modifies it to produce a byte array suitable for the final JAR file.
+The core method of the generator is transform(): it takes an input ASM ClassReader and modifies it
+to produce a byte array suitable for the final JAR file.
 
 The first step of the transformation is to implement the method delegates.
 
-The TransformClassAdapter is then used to process the potentially renamed class.
-All protected or private classes are market as public.
-All classes are made non-final.
-Interfaces are left as-is.
+The TransformClassAdapter is then used to process the potentially renamed class.  All protected or
+private classes are market as public. All classes are made non-final. Interfaces are left as-is.
 
-If a method has a return type that must be erased, the whole method is skipped.
-Methods are also changed from protected/private to public.
-The code of the methods is then kept as-is, except for native methods which are
-replaced by a stub. Methods that are to be overridden are also replaced by a stub.
+If a method has a return type that must be erased, the whole method is skipped.  Methods are also
+changed from protected/private to public. The code of the methods is then kept as-is, except for
+native methods which are replaced by a stub. Methods that are to be overridden are also replaced by
+a stub.
 
 Finally fields are also visited and changed from protected/private to public.
 
-The next step of the transformation is changing the name of the class in case
-we requested the class to be renamed. This uses the RenameClassAdapter to also rename
-all inner classes and references in methods and types. Note that other classes are
-not transformed and keep referencing the original name.
+The next step of the transformation is changing the name of the class in case we requested the class
+to be renamed. This uses the RenameClassAdapter to also rename all inner classes and references in
+methods and types. Note that other classes are not transformed and keep referencing the original
+name.
 
-The class is then fed to RefactorClassAdapter which is like RenameClassAdapter but
-updates the references in all classes. This is used to update the references of classes
-in the java package that were added in the Dalvik VM but are not a part of the standard
-JVM. The existing classes are modified to update all references to these non-standard
-classes. An alternate implementation of these (com.android.tools.layoutlib.java.*) is
-injected.
+The class is then fed to RefactorClassAdapter which is like RenameClassAdapter but updates the
+references in all classes. This is used to update the references of classes in the java package that
+were added in the Dalvik VM but are not a part of the standard JVM. The existing classes are
+modified to update all references to these non-standard classes. An alternate implementation of
+these (com.android.tools.layoutlib.java.*) is injected.
 
-The ClassAdapters are chained together to achieve the desired output. (Look at section
-2.2.7 Transformation chains in the asm user guide, link in the References.) The order of
-execution of these is:
+RenameClassAdapter and RefactorClassAdapter both inherit from AbstractClassAdapter which changes the
+class version (version of the JDK used to compile the class) to 50 (corresponding to Java 6), if the
+class was originally compiled with Java 7 (version 51). This is because we don't currently generate
+the StackMapTable correctly and Java 7 VM enforces that classes with version greater than 51 have
+valid StackMapTable. As a side benefit of this, we can continue to support Java 6 because Java 7 on
+Mac has horrible font rendering support.
+
+The ClassAdapters are chained together to achieve the desired output. (Look at section 2.2.7
+Transformation chains in the asm user guide, link in the References.) The order of execution of
+these is:
 ClassReader -> [DelegateClassAdapter] -> TransformClassAdapter -> [RenameClassAdapter] ->
 RefactorClassAdapter -> ClassWriter
 
 - Method stubs
 --------------
 
-As indicated above, all native and overridden methods are replaced by a stub.
-We don't have the code to replace with in layoutlib_create.
-Instead the StubMethodAdapter replaces the code of the method by a call to
-OverrideMethod.invokeX(). When using the final JAR, the bridge can register
+As indicated above, all native and overridden methods are replaced by a stub.  We don't have the
+code to replace with in layoutlib_create. Instead the StubMethodAdapter replaces the code of the
+method by a call to OverrideMethod.invokeX(). When using the final JAR, the bridge can register
 listeners from these overridden method calls based on the method signatures.
 
-The listeners are currently pretty basic: we only pass the signature of the
-method being called, its caller object and a flag indicating whether the
-method was native. We do not currently provide the parameters. The listener
-can however specify the return value of the overridden method.
+The listeners are currently pretty basic: we only pass the signature of the method being called, its
+caller object and a flag indicating whether the method was native. We do not currently provide the
+parameters. The listener can however specify the return value of the overridden method.
 
 This strategy is now obsolete and replaced by the method delegates.
 
@@ -156,97 +154,89 @@
 - Strategies
 ------------
 
-We currently have 6 strategies to deal with overriding the rendering code
-and make it run in Eclipse. Most of these strategies are implemented hand-in-hand
-by the bridge (which runs in Eclipse) and the generator.
+We currently have 6 strategies to deal with overriding the rendering code and make it run in
+Eclipse. Most of these strategies are implemented hand-in-hand by the bridge (which runs in Eclipse)
+and the generator.
 
 
 1- Class Injection
 
 This is the easiest: we currently inject the following classes:
-- OverrideMethod and its associated MethodListener and MethodAdapter are used
-  to intercept calls to some specific methods that are stubbed out and change
-  their return value.
-- CreateInfo class, which configured the generator. Not used yet, but could
-  in theory help us track what the generator changed.
-- AutoCloseable and Objects are part of Java 7. To enable us to still run on Java 6, new
-  classes are injected. The implementation for these classes has been taken from
-  Android's libcore (platform/libcore/luni/src/main/java/java/...).
-- Charsets, IntegralToString and UnsafeByteSequence are not part of the standard JAVA VM.
-  They are added to the Dalvik VM for performance reasons. An implementation that is very
-  close to the original (which is at platform/libcore/luni/src/main/java/...) is injected.
-  Since these classees were in part of the java package, where we can't inject classes,
-  all references to these have been updated (See strategy 4- Refactoring Classes).
+- OverrideMethod and its associated MethodListener and MethodAdapter are used to intercept calls to
+  some specific methods that are stubbed out and change their return value.
+- CreateInfo class, which configured the generator. Not used yet, but could in theory help us track
+  what the generator changed.
+- AutoCloseable and Objects are part of Java 7. To enable us to still run on Java 6, new classes are
+  injected. The implementation for these classes has been taken from Android's libcore
+  (platform/libcore/luni/src/main/java/java/...).
+- Charsets, IntegralToString and UnsafeByteSequence are not part of the standard JAVA VM. They are
+  added to the Dalvik VM for performance reasons. An implementation that is very close to the
+  original (which is at platform/libcore/luni/src/main/java/...) is injected. Since these classees
+  were in part of the java package, where we can't inject classes, all references to these have been
+  updated (See strategy 4- Refactoring Classes).
 
 
 2- Overriding methods
 
-As explained earlier, the creator doesn't have any replacement code for
-methods to override. Instead it removes the original code and replaces it
-by a call to a specific OveriddeMethod.invokeX(). The bridge then registers
-a listener on the method signature and can provide an implementation.
+As explained earlier, the creator doesn't have any replacement code for methods to override. Instead
+it removes the original code and replaces it by a call to a specific OveriddeMethod.invokeX(). The
+bridge then registers a listener on the method signature and can provide an implementation.
 
-This strategy is now obsolete and replaced by the method delegates.
-See strategy 5 below.
+This strategy is now obsolete and replaced by the method delegates (See strategy 6- Method
+Delegates).
 
 
 3- Renaming classes
 
-This simply changes the name of a class in its definition, as well as all its
-references in internal inner classes and methods.
-Calls from other classes are not modified -- they keep referencing the original
-class name. This allows the bridge to literally replace an implementation.
+This simply changes the name of a class in its definition, as well as all its references in internal
+inner classes and methods. Calls from other classes are not modified -- they keep referencing the
+original class name. This allows the bridge to literally replace an implementation.
 
-An example will make this easier: android.graphics.Paint is the main drawing
-class that we need to replace. To do so, the generator renames Paint to _original_Paint.
-Later the bridge provides its own replacement version of Paint which will be used
-by the rest of the Android stack. The replacement version of Paint can still use
-(either by inheritance or delegation) all the original non-native code of _original_Paint
-if it so desires.
+An example will make this easier: android.graphics.Paint is the main drawing class that we need to
+replace. To do so, the generator renames Paint to _original_Paint. Later the bridge provides its own
+replacement version of Paint which will be used by the rest of the Android stack. The replacement
+version of Paint can still use (either by inheritance or delegation) all the original non-native
+code of _original_Paint if it so desires.
 
-Some of the Android classes are basically wrappers over native objects and since
-we don't have the native code in Eclipse, we need to provide a full alternate
-implementation. Sub-classing doesn't work as some native methods are static and
-we don't control object creation.
+Some of the Android classes are basically wrappers over native objects and since we don't have the
+native code in Eclipse, we need to provide a full alternate implementation. Sub-classing doesn't
+work as some native methods are static and we don't control object creation.
 
 This won't rename/replace the inner static methods of a given class.
 
 
 4- Refactoring classes
 
-This is very similar to the Renaming classes except that it also updates the reference in
-all classes. This is done for classes which are added to the Dalvik VM for performance
-reasons but are not present in the Standard Java VM. An implementation for these classes
-is also injected.
+This is very similar to the Renaming classes except that it also updates the reference in all
+classes. This is done for classes which are added to the Dalvik VM for performance reasons but are
+not present in the Standard Java VM. An implementation for these classes is also injected.
 
 
 5- Method erasure based on return type
 
-This is mostly an implementation detail of the bridge: in the Paint class
-mentioned above, some inner static classes are used to pass around
-attributes (e.g. FontMetrics, or the Style enum) and all the original implementation
-is native.
+This is mostly an implementation detail of the bridge: in the Paint class mentioned above, some
+inner static classes are used to pass around attributes (e.g. FontMetrics, or the Style enum) and
+all the original implementation is native.
 
-In this case we have a strategy that tells the generator that anything returning, for
-example, the inner class Paint$Style in the Paint class should be discarded and the
-bridge will provide its own implementation.
+In this case we have a strategy that tells the generator that anything returning, for example, the
+inner class Paint$Style in the Paint class should be discarded and the bridge will provide its own
+implementation.
 
 
 6- Method Delegates
 
-This strategy is used to override method implementations.
-Given a method SomeClass.MethodName(), 1 or 2 methods are generated:
-a- A copy of the original method named SomeClass.MethodName_Original().
-   The content is the original method as-is from the reader.
-   This step is omitted if the method is native, since it has no Java implementation.
-b- A brand new implementation of SomeClass.MethodName() which calls to a
-   non-existing static method named SomeClass_Delegate.MethodName().
-   The implementation of this 'delegate' method is done in layoutlib_brigde.
+This strategy is used to override method implementations. Given a method SomeClass.MethodName(), 1
+or 2 methods are generated:
+a- A copy of the original method named SomeClass.MethodName_Original(). The content is the original
+method as-is from the reader. This step is omitted if the method is native, since it has no Java
+implementation.
+b- A brand new implementation of SomeClass.MethodName() which calls to a non-existing static method
+named SomeClass_Delegate.MethodName(). The implementation of this 'delegate' method is done in
+layoutlib_brigde.
 
-The delegate method is a static method.
-If the original method is non-static, the delegate method receives the original 'this'
-as its first argument. If the original method is an inner non-static method, it also
-receives the inner 'this' as the second argument.
+The delegate method is a static method. If the original method is non-static, the delegate method
+receives the original 'this' as its first argument. If the original method is an inner non-static
+method, it also receives the inner 'this' as the second argument.
 
 
 
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AbstractClassAdapter.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AbstractClassAdapter.java
index b2caa25..323a791 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AbstractClassAdapter.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/AbstractClassAdapter.java
@@ -177,6 +177,17 @@
             }
         }
 
+        /* Java 7 verifies the StackMapTable of a class if its version number is greater than 50.0.
+         * However, the check is disabled if the class version number is 50.0 or less. Generation
+         * of the StackMapTable requires a rewrite using the tree API of ASM. As a workaround,
+         * we rewrite the version number of the class to be 50.0
+         *
+         * http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6693236
+         */
+        if (version > 50) {
+            version = 50;
+        }
+
         super.visit(version, access, name, signature, superName, interfaces);
     }
 
diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
index 7b0f8f5..813a895 100644
--- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
+++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java
@@ -125,6 +125,7 @@
         "android.app.Fragment#instantiate", //(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;",
         "android.content.res.Resources$Theme#obtainStyledAttributes",
         "android.content.res.Resources$Theme#resolveAttribute",
+        "android.content.res.Resources#localeToLanguageTag",
         "android.content.res.AssetManager#newTheme",
         "android.content.res.AssetManager#deleteTheme",
         "android.content.res.AssetManager#applyThemeStyle",
diff --git a/wifi/java/android/net/wifi/BatchedScanResult.java b/wifi/java/android/net/wifi/BatchedScanResult.java
index eb4e0276..7598b92 100644
--- a/wifi/java/android/net/wifi/BatchedScanResult.java
+++ b/wifi/java/android/net/wifi/BatchedScanResult.java
@@ -20,7 +20,6 @@
 import android.os.Parcel;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
 
 /**
diff --git a/wifi/java/android/net/wifi/BatchedScanSettings.java b/wifi/java/android/net/wifi/BatchedScanSettings.java
index f7ebc17..54801ad 100644
--- a/wifi/java/android/net/wifi/BatchedScanSettings.java
+++ b/wifi/java/android/net/wifi/BatchedScanSettings.java
@@ -34,17 +34,17 @@
     /** Used to indicate no preference for an int value */
     public final static int UNSPECIFIED = Integer.MAX_VALUE;
 
-    // TODO - make MIN/mAX dynamic and gservices adjustable.
+    // TODO - make MIN/mAX as standard for wifi batch capability requirement.
     public final static int MIN_SCANS_PER_BATCH = 2;
-    public final static int MAX_SCANS_PER_BATCH = 255;
+    public final static int MAX_SCANS_PER_BATCH = 20;
     public final static int DEFAULT_SCANS_PER_BATCH = MAX_SCANS_PER_BATCH;
 
     public final static int MIN_AP_PER_SCAN = 2;
-    public final static int MAX_AP_PER_SCAN = 255;
+    public final static int MAX_AP_PER_SCAN = 16;
     public final static int DEFAULT_AP_PER_SCAN = 16;
 
-    public final static int MIN_INTERVAL_SEC = 0;
-    public final static int MAX_INTERVAL_SEC = 3600;
+    public final static int MIN_INTERVAL_SEC = 10;
+    public final static int MAX_INTERVAL_SEC = 500;
     public final static int DEFAULT_INTERVAL_SEC = 30;
 
     public final static int MIN_AP_FOR_DISTANCE = 0;
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl
index 149bda6..0535fe0 100644
--- a/wifi/java/android/net/wifi/IWifiManager.aidl
+++ b/wifi/java/android/net/wifi/IWifiManager.aidl
@@ -20,6 +20,8 @@
 import android.net.wifi.BatchedScanSettings;
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiInfo;
+import android.net.wifi.ScanSettings;
+import android.net.wifi.WifiChannel;
 import android.net.wifi.ScanResult;
 import android.net.DhcpInfo;
 
@@ -45,7 +47,9 @@
 
     boolean pingSupplicant();
 
-    void startScan(in WorkSource ws);
+    List<WifiChannel> getChannelList();
+
+    void startScan(in ScanSettings requested, in WorkSource ws);
 
     List<ScanResult> getScanResults(String callingPackage);
 
@@ -111,8 +115,6 @@
 
     String getConfigFile();
 
-    void captivePortalCheckComplete();
-
     void enableTdls(String remoteIPAddress, boolean enable);
 
     void enableTdlsWithMacAddress(String remoteMacAddress, boolean enable);
@@ -126,5 +128,7 @@
     boolean isBatchedScanSupported();
 
     void pollBatchedScan();
+
+    String getWpsNfcConfigurationToken(int netId);
 }
 
diff --git a/wifi/java/android/net/wifi/NetworkUpdateResult.java b/wifi/java/android/net/wifi/NetworkUpdateResult.java
deleted file mode 100644
index 234bbe1..0000000
--- a/wifi/java/android/net/wifi/NetworkUpdateResult.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.net.wifi;
-
-import static android.net.wifi.WifiConfiguration.INVALID_NETWORK_ID;
-
-class NetworkUpdateResult {
-    int netId;
-    boolean ipChanged;
-    boolean proxyChanged;
-    boolean isNewNetwork = false;
-
-    public NetworkUpdateResult(int id) {
-        netId = id;
-        ipChanged = false;
-        proxyChanged = false;
-    }
-
-    public NetworkUpdateResult(boolean ip, boolean proxy) {
-        netId = INVALID_NETWORK_ID;
-        ipChanged = ip;
-        proxyChanged = proxy;
-    }
-
-    public void setNetworkId(int id) {
-        netId = id;
-    }
-
-    public int getNetworkId() {
-        return netId;
-    }
-
-    public void setIpChanged(boolean ip) {
-        ipChanged = ip;
-    }
-
-    public boolean hasIpChanged() {
-        return ipChanged;
-    }
-
-    public void setProxyChanged(boolean proxy) {
-        proxyChanged = proxy;
-    }
-
-    public boolean hasProxyChanged() {
-        return proxyChanged;
-    }
-
-    public boolean isNewNetwork() {
-        return isNewNetwork;
-    }
-
-    public void setIsNewNetwork(boolean isNew) {
-        isNewNetwork = isNew;
-    }
-}
diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java
index 12729d2..d7ecaff 100644
--- a/wifi/java/android/net/wifi/ScanResult.java
+++ b/wifi/java/android/net/wifi/ScanResult.java
@@ -40,8 +40,7 @@
      */
     public String capabilities;
     /**
-     * The detected signal level in dBm. At least those are the units used by
-     * the TI driver.
+     * The detected signal level in dBm.
      */
     public int level;
     /**
diff --git a/wifi/java/android/net/wifi/ScanSettings.aidl b/wifi/java/android/net/wifi/ScanSettings.aidl
new file mode 100644
index 0000000..ebd2a39
--- /dev/null
+++ b/wifi/java/android/net/wifi/ScanSettings.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.net.wifi;
+
+parcelable ScanSettings;
diff --git a/wifi/java/android/net/wifi/ScanSettings.java b/wifi/java/android/net/wifi/ScanSettings.java
new file mode 100644
index 0000000..094ce34
--- /dev/null
+++ b/wifi/java/android/net/wifi/ScanSettings.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2014, 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 android.net.wifi;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+/**
+ * Bundle of customized scan settings
+ *
+ * @see WifiManager#startCustomizedScan
+ *
+ * @hide
+ */
+public class ScanSettings implements Parcelable {
+
+    /** channel set to scan. this can be null or empty, indicating a full scan */
+    public Collection<WifiChannel> channelSet;
+
+    /** public constructor */
+    public ScanSettings() { }
+
+    /** copy constructor */
+    public ScanSettings(ScanSettings source) {
+        if (source.channelSet != null)
+            channelSet = new ArrayList<WifiChannel>(source.channelSet);
+    }
+
+    /** check for validity */
+    public boolean isValid() {
+        for (WifiChannel channel : channelSet)
+            if (!channel.isValid()) return false;
+        return true;
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(channelSet == null ? 0 : channelSet.size());
+        if (channelSet != null)
+            for (WifiChannel channel : channelSet) channel.writeToParcel(out, flags);
+    }
+
+    /** implement Parcelable interface */
+    public static final Parcelable.Creator<ScanSettings> CREATOR =
+            new Parcelable.Creator<ScanSettings>() {
+        @Override
+        public ScanSettings createFromParcel(Parcel in) {
+            ScanSettings settings = new ScanSettings();
+            int size = in.readInt();
+            if (size > 0) {
+                settings.channelSet = new ArrayList<WifiChannel>(size);
+                while (size-- > 0)
+                    settings.channelSet.add(WifiChannel.CREATOR.createFromParcel(in));
+            }
+            return settings;
+        }
+
+        @Override
+        public ScanSettings[] newArray(int size) {
+            return new ScanSettings[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/StateChangeResult.java b/wifi/java/android/net/wifi/StateChangeResult.java
deleted file mode 100644
index c334b91..0000000
--- a/wifi/java/android/net/wifi/StateChangeResult.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.net.wifi;
-
-/**
- * Stores supplicant state change information passed from WifiMonitor to
- * a state machine. WifiStateMachine, SupplicantStateTracker and WpsStateMachine
- * are example state machines that handle it.
- * @hide
- */
-public class StateChangeResult {
-    StateChangeResult(int networkId, WifiSsid wifiSsid, String BSSID,
-            SupplicantState state) {
-        this.state = state;
-        this.wifiSsid= wifiSsid;
-        this.BSSID = BSSID;
-        this.networkId = networkId;
-    }
-
-    int networkId;
-    WifiSsid wifiSsid;
-    String BSSID;
-    SupplicantState state;
-}
diff --git a/wifi/java/android/net/wifi/SupplicantState.java b/wifi/java/android/net/wifi/SupplicantState.java
index 4a2037d..369d3a8 100644
--- a/wifi/java/android/net/wifi/SupplicantState.java
+++ b/wifi/java/android/net/wifi/SupplicantState.java
@@ -194,7 +194,8 @@
         }
     }
 
-    static boolean isConnecting(SupplicantState state) {
+    /** @hide */
+    public static boolean isConnecting(SupplicantState state) {
         switch(state) {
             case AUTHENTICATING:
             case ASSOCIATING:
@@ -216,7 +217,8 @@
         }
     }
 
-    static boolean isDriverActive(SupplicantState state) {
+    /** @hide */
+    public static boolean isDriverActive(SupplicantState state) {
         switch(state) {
             case DISCONNECTED:
             case DORMANT:
diff --git a/wifi/java/android/net/wifi/SupplicantStateTracker.java b/wifi/java/android/net/wifi/SupplicantStateTracker.java
deleted file mode 100644
index e76eb17..0000000
--- a/wifi/java/android/net/wifi/SupplicantStateTracker.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.net.wifi;
-
-import com.android.internal.util.State;
-import com.android.internal.util.StateMachine;
-
-import android.net.wifi.StateChangeResult;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Parcelable;
-import android.os.UserHandle;
-import android.util.Log;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-
-/**
- * Tracks the state changes in supplicant and provides functionality
- * that is based on these state changes:
- * - detect a failed WPA handshake that loops indefinitely
- * - authentication failure handling
- */
-class SupplicantStateTracker extends StateMachine {
-
-    private static final String TAG = "SupplicantStateTracker";
-    private static final boolean DBG = false;
-
-    private WifiStateMachine mWifiStateMachine;
-    private WifiConfigStore mWifiConfigStore;
-    private int mAuthenticationFailuresCount = 0;
-    private int mAssociationRejectCount = 0;
-    /* Indicates authentication failure in supplicant broadcast.
-     * TODO: enhance auth failure reporting to include notification
-     * for all type of failures: EAP, WPS & WPA networks */
-    private boolean mAuthFailureInSupplicantBroadcast = false;
-
-    /* Maximum retries on a authentication failure notification */
-    private static final int MAX_RETRIES_ON_AUTHENTICATION_FAILURE = 2;
-
-    /* Maximum retries on assoc rejection events */
-    private static final int MAX_RETRIES_ON_ASSOCIATION_REJECT = 16;
-
-    /* Tracks if networks have been disabled during a connection */
-    private boolean mNetworksDisabledDuringConnect = false;
-
-    private Context mContext;
-
-    private State mUninitializedState = new UninitializedState();
-    private State mDefaultState = new DefaultState();
-    private State mInactiveState = new InactiveState();
-    private State mDisconnectState = new DisconnectedState();
-    private State mScanState = new ScanState();
-    private State mHandshakeState = new HandshakeState();
-    private State mCompletedState = new CompletedState();
-    private State mDormantState = new DormantState();
-
-    public SupplicantStateTracker(Context c, WifiStateMachine wsm, WifiConfigStore wcs, Handler t) {
-        super(TAG, t.getLooper());
-
-        mContext = c;
-        mWifiStateMachine = wsm;
-        mWifiConfigStore = wcs;
-        addState(mDefaultState);
-            addState(mUninitializedState, mDefaultState);
-            addState(mInactiveState, mDefaultState);
-            addState(mDisconnectState, mDefaultState);
-            addState(mScanState, mDefaultState);
-            addState(mHandshakeState, mDefaultState);
-            addState(mCompletedState, mDefaultState);
-            addState(mDormantState, mDefaultState);
-
-        setInitialState(mUninitializedState);
-        setLogRecSize(50);
-        setLogOnlyTransitions(true);
-        //start the state machine
-        start();
-    }
-
-    private void handleNetworkConnectionFailure(int netId, int disableReason) {
-        /* If other networks disabled during connection, enable them */
-        if (mNetworksDisabledDuringConnect) {
-            mWifiConfigStore.enableAllNetworks();
-            mNetworksDisabledDuringConnect = false;
-        }
-        /* Disable failed network */
-        mWifiConfigStore.disableNetwork(netId, disableReason);
-    }
-
-    private void transitionOnSupplicantStateChange(StateChangeResult stateChangeResult) {
-        SupplicantState supState = (SupplicantState) stateChangeResult.state;
-
-        if (DBG) Log.d(TAG, "Supplicant state: " + supState.toString() + "\n");
-
-        switch (supState) {
-           case DISCONNECTED:
-                transitionTo(mDisconnectState);
-                break;
-            case INTERFACE_DISABLED:
-                //we should have received a disconnection already, do nothing
-                break;
-            case SCANNING:
-                transitionTo(mScanState);
-                break;
-            case AUTHENTICATING:
-            case ASSOCIATING:
-            case ASSOCIATED:
-            case FOUR_WAY_HANDSHAKE:
-            case GROUP_HANDSHAKE:
-                transitionTo(mHandshakeState);
-                break;
-            case COMPLETED:
-                transitionTo(mCompletedState);
-                break;
-            case DORMANT:
-                transitionTo(mDormantState);
-                break;
-            case INACTIVE:
-                transitionTo(mInactiveState);
-                break;
-            case UNINITIALIZED:
-            case INVALID:
-                transitionTo(mUninitializedState);
-                break;
-            default:
-                Log.e(TAG, "Unknown supplicant state " + supState);
-                break;
-        }
-    }
-
-    private void sendSupplicantStateChangedBroadcast(SupplicantState state, boolean failedAuth) {
-        Intent intent = new Intent(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
-                | Intent.FLAG_RECEIVER_REPLACE_PENDING);
-        intent.putExtra(WifiManager.EXTRA_NEW_STATE, (Parcelable) state);
-        if (failedAuth) {
-            intent.putExtra(
-                WifiManager.EXTRA_SUPPLICANT_ERROR,
-                WifiManager.ERROR_AUTHENTICATING);
-        }
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    /********************************************************
-     * HSM states
-     *******************************************************/
-
-    class DefaultState extends State {
-        @Override
-         public void enter() {
-             if (DBG) Log.d(TAG, getName() + "\n");
-         }
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
-            switch (message.what) {
-                case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
-                    mAuthenticationFailuresCount++;
-                    mAuthFailureInSupplicantBroadcast = true;
-                    break;
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
-                    SupplicantState state = stateChangeResult.state;
-                    sendSupplicantStateChangedBroadcast(state, mAuthFailureInSupplicantBroadcast);
-                    mAuthFailureInSupplicantBroadcast = false;
-                    transitionOnSupplicantStateChange(stateChangeResult);
-                    break;
-                case WifiStateMachine.CMD_RESET_SUPPLICANT_STATE:
-                    transitionTo(mUninitializedState);
-                    break;
-                case WifiManager.CONNECT_NETWORK:
-                    mNetworksDisabledDuringConnect = true;
-                    mAssociationRejectCount = 0;
-                    break;
-                case WifiMonitor.ASSOCIATION_REJECTION_EVENT:
-                    mAssociationRejectCount++;
-                    break;
-                default:
-                    Log.e(TAG, "Ignoring " + message);
-                    break;
-            }
-            return HANDLED;
-        }
-    }
-
-    /*
-     * This indicates that the supplicant state as seen
-     * by the framework is not initialized yet. We are
-     * in this state right after establishing a control
-     * channel connection before any supplicant events
-     * or after we have lost the control channel
-     * connection to the supplicant
-     */
-    class UninitializedState extends State {
-        @Override
-         public void enter() {
-             if (DBG) Log.d(TAG, getName() + "\n");
-         }
-    }
-
-    class InactiveState extends State {
-        @Override
-         public void enter() {
-             if (DBG) Log.d(TAG, getName() + "\n");
-         }
-    }
-
-    class DisconnectedState extends State {
-        @Override
-         public void enter() {
-             if (DBG) Log.d(TAG, getName() + "\n");
-             /* If a disconnect event happens after authentication failure
-              * exceeds maximum retries, disable the network
-              */
-             Message message = getCurrentMessage();
-             StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
-
-             if (mAuthenticationFailuresCount >= MAX_RETRIES_ON_AUTHENTICATION_FAILURE) {
-                 Log.d(TAG, "Failed to authenticate, disabling network " +
-                         stateChangeResult.networkId);
-                 handleNetworkConnectionFailure(stateChangeResult.networkId,
-                         WifiConfiguration.DISABLED_AUTH_FAILURE);
-                 mAuthenticationFailuresCount = 0;
-             }
-             else if (mAssociationRejectCount >= MAX_RETRIES_ON_ASSOCIATION_REJECT) {
-                 Log.d(TAG, "Association getting rejected, disabling network " +
-                         stateChangeResult.networkId);
-                 handleNetworkConnectionFailure(stateChangeResult.networkId,
-                         WifiConfiguration.DISABLED_ASSOCIATION_REJECT);
-                 mAssociationRejectCount = 0;
-            }
-         }
-    }
-
-    class ScanState extends State {
-        @Override
-         public void enter() {
-             if (DBG) Log.d(TAG, getName() + "\n");
-         }
-    }
-
-    class HandshakeState extends State {
-        /**
-         * The max number of the WPA supplicant loop iterations before we
-         * decide that the loop should be terminated:
-         */
-        private static final int MAX_SUPPLICANT_LOOP_ITERATIONS = 4;
-        private int mLoopDetectIndex;
-        private int mLoopDetectCount;
-
-        @Override
-         public void enter() {
-             if (DBG) Log.d(TAG, getName() + "\n");
-             mLoopDetectIndex = 0;
-             mLoopDetectCount = 0;
-         }
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
-            switch (message.what) {
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
-                    SupplicantState state = stateChangeResult.state;
-                    if (SupplicantState.isHandshakeState(state)) {
-                        if (mLoopDetectIndex > state.ordinal()) {
-                            mLoopDetectCount++;
-                        }
-                        if (mLoopDetectCount > MAX_SUPPLICANT_LOOP_ITERATIONS) {
-                            Log.d(TAG, "Supplicant loop detected, disabling network " +
-                                    stateChangeResult.networkId);
-                            handleNetworkConnectionFailure(stateChangeResult.networkId,
-                                    WifiConfiguration.DISABLED_AUTH_FAILURE);
-                        }
-                        mLoopDetectIndex = state.ordinal();
-                        sendSupplicantStateChangedBroadcast(state,
-                                mAuthFailureInSupplicantBroadcast);
-                    } else {
-                        //Have the DefaultState handle the transition
-                        return NOT_HANDLED;
-                    }
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class CompletedState extends State {
-        @Override
-         public void enter() {
-             if (DBG) Log.d(TAG, getName() + "\n");
-             /* Reset authentication failure count */
-             mAuthenticationFailuresCount = 0;
-             mAssociationRejectCount = 0;
-             if (mNetworksDisabledDuringConnect) {
-                 mWifiConfigStore.enableAllNetworks();
-                 mNetworksDisabledDuringConnect = false;
-             }
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) Log.d(TAG, getName() + message.toString() + "\n");
-            switch(message.what) {
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
-                    SupplicantState state = stateChangeResult.state;
-                    sendSupplicantStateChangedBroadcast(state, mAuthFailureInSupplicantBroadcast);
-                    /* Ignore any connecting state in completed state. Group re-keying
-                     * events and other auth events that do not affect connectivity are
-                     * ignored
-                     */
-                    if (SupplicantState.isConnecting(state)) {
-                        break;
-                    }
-                    transitionOnSupplicantStateChange(stateChangeResult);
-                    break;
-                case WifiStateMachine.CMD_RESET_SUPPLICANT_STATE:
-                    sendSupplicantStateChangedBroadcast(SupplicantState.DISCONNECTED, false);
-                    transitionTo(mUninitializedState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    //TODO: remove after getting rid of the state in supplicant
-    class DormantState extends State {
-        @Override
-        public void enter() {
-            if (DBG) Log.d(TAG, getName() + "\n");
-        }
-    }
-
-    @Override
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        super.dump(fd, pw, args);
-        pw.println("mAuthenticationFailuresCount " + mAuthenticationFailuresCount);
-        pw.println("mAuthFailureInSupplicantBroadcast " + mAuthFailureInSupplicantBroadcast);
-        pw.println("mNetworksDisabledDuringConnect " + mNetworksDisabledDuringConnect);
-        pw.println();
-    }
-}
diff --git a/wifi/java/android/net/wifi/WifiApConfigStore.java b/wifi/java/android/net/wifi/WifiApConfigStore.java
deleted file mode 100644
index 0531ca3..0000000
--- a/wifi/java/android/net/wifi/WifiApConfigStore.java
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.net.wifi;
-
-import android.content.Context;
-import android.net.wifi.WifiConfiguration.KeyMgmt;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.Message;
-import android.os.Messenger;
-import android.util.Log;
-
-import com.android.internal.util.AsyncChannel;
-import com.android.internal.R;
-import com.android.internal.util.State;
-import com.android.internal.util.StateMachine;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.util.UUID;
-
-/**
- * Provides API to the WifiStateMachine for doing read/write access
- * to soft access point configuration
- */
-class WifiApConfigStore extends StateMachine {
-
-    private Context mContext;
-    private static final String TAG = "WifiApConfigStore";
-
-    private static final String AP_CONFIG_FILE = Environment.getDataDirectory() +
-        "/misc/wifi/softap.conf";
-
-    private static final int AP_CONFIG_FILE_VERSION = 1;
-
-    private State mDefaultState = new DefaultState();
-    private State mInactiveState = new InactiveState();
-    private State mActiveState = new ActiveState();
-
-    private WifiConfiguration mWifiApConfig = null;
-    private AsyncChannel mReplyChannel = new AsyncChannel();
-
-    WifiApConfigStore(Context context, Handler target) {
-        super(TAG, target.getLooper());
-
-        mContext = context;
-        addState(mDefaultState);
-            addState(mInactiveState, mDefaultState);
-            addState(mActiveState, mDefaultState);
-
-        setInitialState(mInactiveState);
-    }
-
-    public static WifiApConfigStore makeWifiApConfigStore(Context context, Handler target) {
-        WifiApConfigStore s = new WifiApConfigStore(context, target);
-        s.start();
-        return s;
-    }
-
-    class DefaultState extends State {
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case WifiStateMachine.CMD_SET_AP_CONFIG:
-                case WifiStateMachine.CMD_SET_AP_CONFIG_COMPLETED:
-                    Log.e(TAG, "Unexpected message: " + message);
-                    break;
-                case WifiStateMachine.CMD_REQUEST_AP_CONFIG:
-                    mReplyChannel.replyToMessage(message,
-                            WifiStateMachine.CMD_RESPONSE_AP_CONFIG, mWifiApConfig);
-                    break;
-                default:
-                    Log.e(TAG, "Failed to handle " + message);
-                    break;
-            }
-            return HANDLED;
-        }
-    }
-
-    class InactiveState extends State {
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case WifiStateMachine.CMD_SET_AP_CONFIG:
-                    mWifiApConfig = (WifiConfiguration) message.obj;
-                    transitionTo(mActiveState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class ActiveState extends State {
-        public void enter() {
-            new Thread(new Runnable() {
-                public void run() {
-                    writeApConfiguration(mWifiApConfig);
-                    sendMessage(WifiStateMachine.CMD_SET_AP_CONFIG_COMPLETED);
-                }
-            }).start();
-        }
-
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                //TODO: have feedback to the user when we do this
-                //to indicate the write is currently in progress
-                case WifiStateMachine.CMD_SET_AP_CONFIG:
-                    deferMessage(message);
-                    break;
-                case WifiStateMachine.CMD_SET_AP_CONFIG_COMPLETED:
-                    transitionTo(mInactiveState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    void loadApConfiguration() {
-        DataInputStream in = null;
-        try {
-            WifiConfiguration config = new WifiConfiguration();
-            in = new DataInputStream(new BufferedInputStream(new FileInputStream(
-                            AP_CONFIG_FILE)));
-
-            int version = in.readInt();
-            if (version != 1) {
-                Log.e(TAG, "Bad version on hotspot configuration file, set defaults");
-                setDefaultApConfiguration();
-                return;
-            }
-            config.SSID = in.readUTF();
-            int authType = in.readInt();
-            config.allowedKeyManagement.set(authType);
-            if (authType != KeyMgmt.NONE) {
-                config.preSharedKey = in.readUTF();
-            }
-            mWifiApConfig = config;
-        } catch (IOException ignore) {
-            setDefaultApConfiguration();
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    Messenger getMessenger() {
-        return new Messenger(getHandler());
-    }
-
-    private void writeApConfiguration(final WifiConfiguration config) {
-        DataOutputStream out = null;
-        try {
-            out = new DataOutputStream(new BufferedOutputStream(
-                        new FileOutputStream(AP_CONFIG_FILE)));
-
-            out.writeInt(AP_CONFIG_FILE_VERSION);
-            out.writeUTF(config.SSID);
-            int authType = config.getAuthType();
-            out.writeInt(authType);
-            if(authType != KeyMgmt.NONE) {
-                out.writeUTF(config.preSharedKey);
-            }
-        } catch (IOException e) {
-            Log.e(TAG, "Error writing hotspot configuration" + e);
-        } finally {
-            if (out != null) {
-                try {
-                    out.close();
-                } catch (IOException e) {}
-            }
-        }
-    }
-
-    /* Generate a default WPA2 based configuration with a random password.
-       We are changing the Wifi Ap configuration storage from secure settings to a
-       flat file accessible only by the system. A WPA2 based default configuration
-       will keep the device secure after the update */
-    private void setDefaultApConfiguration() {
-        WifiConfiguration config = new WifiConfiguration();
-        config.SSID = mContext.getString(R.string.wifi_tether_configure_ssid_default);
-        config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
-        String randomUUID = UUID.randomUUID().toString();
-        //first 12 chars from xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
-        config.preSharedKey = randomUUID.substring(0, 8) + randomUUID.substring(9,13);
-        sendMessage(WifiStateMachine.CMD_SET_AP_CONFIG, config);
-    }
-}
diff --git a/wifi/java/android/net/wifi/WifiChannel.aidl b/wifi/java/android/net/wifi/WifiChannel.aidl
new file mode 100644
index 0000000..c3d06bd
--- /dev/null
+++ b/wifi/java/android/net/wifi/WifiChannel.aidl
@@ -0,0 +1,19 @@
+/**
+ * Copyright (c) 2014, 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 android.net.wifi;
+
+parcelable WifiChannel;
diff --git a/wifi/java/android/net/wifi/WifiChannel.java b/wifi/java/android/net/wifi/WifiChannel.java
new file mode 100644
index 0000000..640481e
--- /dev/null
+++ b/wifi/java/android/net/wifi/WifiChannel.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2014, 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 android.net.wifi;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * Wifi Channel
+ *
+ * @see ScanSettings
+ *
+ * @hide
+ */
+public class WifiChannel implements Parcelable {
+
+    private static final int MIN_FREQ_MHZ = 2412;
+    private static final int MAX_FREQ_MHZ = 5825;
+
+    private static final int MIN_CHANNEL_NUM = 1;
+    private static final int MAX_CHANNEL_NUM = 196;
+
+    /** frequency */
+    public int freqMHz;
+
+    /** channel number */
+    public int channelNum;
+
+    /** is it a DFS channel? */
+    public boolean isDFS;
+
+    /** public constructor */
+    public WifiChannel() { }
+
+    /** check for validity */
+    public boolean isValid() {
+        if (freqMHz < MIN_FREQ_MHZ || freqMHz > MAX_FREQ_MHZ) return false;
+        if (channelNum < MIN_CHANNEL_NUM || channelNum > MAX_CHANNEL_NUM) return false;
+        return true;
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    /** implement Parcelable interface */
+    @Override
+    public void writeToParcel(Parcel out, int flags) {
+        out.writeInt(freqMHz);
+        out.writeInt(channelNum);
+        out.writeInt(isDFS ? 1 : 0);
+    }
+
+    /** implement Parcelable interface */
+    public static final Parcelable.Creator<WifiChannel> CREATOR =
+            new Parcelable.Creator<WifiChannel>() {
+        @Override
+        public WifiChannel createFromParcel(Parcel in) {
+            WifiChannel channel = new WifiChannel();
+            channel.freqMHz = in.readInt();
+            channel.channelNum = in.readInt();
+            channel.isDFS = in.readInt() != 0;
+            return channel;
+        }
+
+        @Override
+        public WifiChannel[] newArray(int size) {
+            return new WifiChannel[size];
+        }
+    };
+}
diff --git a/wifi/java/android/net/wifi/WifiConfigStore.java b/wifi/java/android/net/wifi/WifiConfigStore.java
deleted file mode 100644
index a6ae215..0000000
--- a/wifi/java/android/net/wifi/WifiConfigStore.java
+++ /dev/null
@@ -1,1728 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.net.wifi;
-
-import android.content.Context;
-import android.content.Intent;
-import android.net.LinkAddress;
-import android.net.LinkProperties;
-import android.net.NetworkUtils;
-import android.net.NetworkInfo.DetailedState;
-import android.net.ProxyProperties;
-import android.net.RouteInfo;
-import android.net.wifi.WifiConfiguration.IpAssignment;
-import android.net.wifi.WifiConfiguration.KeyMgmt;
-import android.net.wifi.WifiConfiguration.ProxySettings;
-import android.net.wifi.WifiConfiguration.Status;
-import android.net.wifi.NetworkUpdateResult;
-import static android.net.wifi.WifiConfiguration.INVALID_NETWORK_ID;
-import android.os.Environment;
-import android.os.FileObserver;
-import android.os.Message;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.UserHandle;
-import android.security.KeyStore;
-import android.text.TextUtils;
-import android.util.LocalLog;
-import android.util.Log;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.EOFException;
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.security.PublicKey;
-import java.util.ArrayList;
-import java.util.BitSet;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicInteger;
-
-/**
- * This class provides the API to manage configured
- * wifi networks. The API is not thread safe is being
- * used only from WifiStateMachine.
- *
- * It deals with the following
- * - Add/update/remove a WifiConfiguration
- *   The configuration contains two types of information.
- *     = IP and proxy configuration that is handled by WifiConfigStore and
- *       is saved to disk on any change.
- *
- *       The format of configuration file is as follows:
- *       <version>
- *       <netA_key1><netA_value1><netA_key2><netA_value2>...<EOS>
- *       <netB_key1><netB_value1><netB_key2><netB_value2>...<EOS>
- *       ..
- *
- *       (key, value) pairs for a given network are grouped together and can
- *       be in any order. A EOS at the end of a set of (key, value) pairs
- *       indicates that the next set of (key, value) pairs are for a new
- *       network. A network is identified by a unique ID_KEY. If there is no
- *       ID_KEY in the (key, value) pairs, the data is discarded.
- *
- *       An invalid version on read would result in discarding the contents of
- *       the file. On the next write, the latest version is written to file.
- *
- *       Any failures during read or write to the configuration file are ignored
- *       without reporting to the user since the likelihood of these errors are
- *       low and the impact on connectivity is low.
- *
- *     = SSID & security details that is pushed to the supplicant.
- *       supplicant saves these details to the disk on calling
- *       saveConfigCommand().
- *
- *       We have two kinds of APIs exposed:
- *        > public API calls that provide fine grained control
- *          - enableNetwork, disableNetwork, addOrUpdateNetwork(),
- *          removeNetwork(). For these calls, the config is not persisted
- *          to the disk. (TODO: deprecate these calls in WifiManager)
- *        > The new API calls - selectNetwork(), saveNetwork() & forgetNetwork().
- *          These calls persist the supplicant config to disk.
- *
- * - Maintain a list of configured networks for quick access
- *
- */
-class WifiConfigStore {
-
-    private Context mContext;
-    private static final String TAG = "WifiConfigStore";
-    private static final boolean DBG = true;
-    private static final boolean VDBG = false;
-
-    private static final String SUPPLICANT_CONFIG_FILE = "/data/misc/wifi/wpa_supplicant.conf";
-
-    /* configured networks with network id as the key */
-    private HashMap<Integer, WifiConfiguration> mConfiguredNetworks =
-            new HashMap<Integer, WifiConfiguration>();
-
-    /* A network id is a unique identifier for a network configured in the
-     * supplicant. Network ids are generated when the supplicant reads
-     * the configuration file at start and can thus change for networks.
-     * We store the IP configuration for networks along with a unique id
-     * that is generated from SSID and security type of the network. A mapping
-     * from the generated unique id to network id of the network is needed to
-     * map supplicant config to IP configuration. */
-    private HashMap<Integer, Integer> mNetworkIds =
-            new HashMap<Integer, Integer>();
-
-    /* Tracks the highest priority of configured networks */
-    private int mLastPriority = -1;
-
-    private static final String ipConfigFile = Environment.getDataDirectory() +
-            "/misc/wifi/ipconfig.txt";
-
-    private static final int IPCONFIG_FILE_VERSION = 2;
-
-    /* IP and proxy configuration keys */
-    private static final String ID_KEY = "id";
-    private static final String IP_ASSIGNMENT_KEY = "ipAssignment";
-    private static final String LINK_ADDRESS_KEY = "linkAddress";
-    private static final String GATEWAY_KEY = "gateway";
-    private static final String DNS_KEY = "dns";
-    private static final String PROXY_SETTINGS_KEY = "proxySettings";
-    private static final String PROXY_HOST_KEY = "proxyHost";
-    private static final String PROXY_PORT_KEY = "proxyPort";
-    private static final String PROXY_PAC_FILE = "proxyPac";
-    private static final String EXCLUSION_LIST_KEY = "exclusionList";
-    private static final String EOS = "eos";
-
-    private final LocalLog mLocalLog;
-    private final WpaConfigFileObserver mFileObserver;
-
-    private WifiNative mWifiNative;
-    private final KeyStore mKeyStore = KeyStore.getInstance();
-
-    WifiConfigStore(Context c, WifiNative wn) {
-        mContext = c;
-        mWifiNative = wn;
-
-        if (VDBG) {
-            mLocalLog = mWifiNative.getLocalLog();
-            mFileObserver = new WpaConfigFileObserver();
-            mFileObserver.startWatching();
-        } else {
-            mLocalLog = null;
-            mFileObserver = null;
-        }
-    }
-
-    class WpaConfigFileObserver extends FileObserver {
-
-        public WpaConfigFileObserver() {
-            super(SUPPLICANT_CONFIG_FILE, CLOSE_WRITE);
-        }
-
-        @Override
-        public void onEvent(int event, String path) {
-            if (event == CLOSE_WRITE) {
-                File file = new File(SUPPLICANT_CONFIG_FILE);
-                if (VDBG) localLog("wpa_supplicant.conf changed; new size = " + file.length());
-            }
-        }
-    }
-
-
-    /**
-     * Fetch the list of configured networks
-     * and enable all stored networks in supplicant.
-     */
-    void loadAndEnableAllNetworks() {
-        if (DBG) log("Loading config and enabling all networks");
-        loadConfiguredNetworks();
-        enableAllNetworks();
-    }
-
-    /**
-     * Fetch the list of currently configured networks
-     * @return List of networks
-     */
-    List<WifiConfiguration> getConfiguredNetworks() {
-        List<WifiConfiguration> networks = new ArrayList<WifiConfiguration>();
-        for(WifiConfiguration config : mConfiguredNetworks.values()) {
-            networks.add(new WifiConfiguration(config));
-        }
-        return networks;
-    }
-
-    /**
-     * enable all networks and save config. This will be a no-op if the list
-     * of configured networks indicates all networks as being enabled
-     */
-    void enableAllNetworks() {
-        boolean networkEnabledStateChanged = false;
-        for(WifiConfiguration config : mConfiguredNetworks.values()) {
-            if(config != null && config.status == Status.DISABLED) {
-                if(mWifiNative.enableNetwork(config.networkId, false)) {
-                    networkEnabledStateChanged = true;
-                    config.status = Status.ENABLED;
-                } else {
-                    loge("Enable network failed on " + config.networkId);
-                }
-            }
-        }
-
-        if (networkEnabledStateChanged) {
-            mWifiNative.saveConfig();
-            sendConfiguredNetworksChangedBroadcast();
-        }
-    }
-
-
-    /**
-     * Selects the specified network for connection. This involves
-     * updating the priority of all the networks and enabling the given
-     * network while disabling others.
-     *
-     * Selecting a network will leave the other networks disabled and
-     * a call to enableAllNetworks() needs to be issued upon a connection
-     * or a failure event from supplicant
-     *
-     * @param netId network to select for connection
-     * @return false if the network id is invalid
-     */
-    boolean selectNetwork(int netId) {
-        if (VDBG) localLog("selectNetwork", netId);
-        if (netId == INVALID_NETWORK_ID) return false;
-
-        // Reset the priority of each network at start or if it goes too high.
-        if (mLastPriority == -1 || mLastPriority > 1000000) {
-            for(WifiConfiguration config : mConfiguredNetworks.values()) {
-                if (config.networkId != INVALID_NETWORK_ID) {
-                    config.priority = 0;
-                    addOrUpdateNetworkNative(config);
-                }
-            }
-            mLastPriority = 0;
-        }
-
-        // Set to the highest priority and save the configuration.
-        WifiConfiguration config = new WifiConfiguration();
-        config.networkId = netId;
-        config.priority = ++mLastPriority;
-
-        addOrUpdateNetworkNative(config);
-        mWifiNative.saveConfig();
-
-        /* Enable the given network while disabling all other networks */
-        enableNetworkWithoutBroadcast(netId, true);
-
-       /* Avoid saving the config & sending a broadcast to prevent settings
-        * from displaying a disabled list of networks */
-        return true;
-    }
-
-    /**
-     * Add/update the specified configuration and save config
-     *
-     * @param config WifiConfiguration to be saved
-     * @return network update result
-     */
-    NetworkUpdateResult saveNetwork(WifiConfiguration config) {
-        if (VDBG) localLog("saveNetwork", config.networkId);
-        // A new network cannot have null SSID
-        if (config == null || (config.networkId == INVALID_NETWORK_ID &&
-                config.SSID == null)) {
-            return new NetworkUpdateResult(INVALID_NETWORK_ID);
-        }
-
-        boolean newNetwork = (config.networkId == INVALID_NETWORK_ID);
-        NetworkUpdateResult result = addOrUpdateNetworkNative(config);
-        int netId = result.getNetworkId();
-        /* enable a new network */
-        if (newNetwork && netId != INVALID_NETWORK_ID) {
-            mWifiNative.enableNetwork(netId, false);
-            mConfiguredNetworks.get(netId).status = Status.ENABLED;
-        }
-        mWifiNative.saveConfig();
-        sendConfiguredNetworksChangedBroadcast(config, result.isNewNetwork() ?
-                WifiManager.CHANGE_REASON_ADDED : WifiManager.CHANGE_REASON_CONFIG_CHANGE);
-        return result;
-    }
-
-    void updateStatus(int netId, DetailedState state) {
-        if (netId != INVALID_NETWORK_ID) {
-            WifiConfiguration config = mConfiguredNetworks.get(netId);
-            if (config == null) return;
-            switch (state) {
-                case CONNECTED:
-                    config.status = Status.CURRENT;
-                    break;
-                case DISCONNECTED:
-                    //If network is already disabled, keep the status
-                    if (config.status == Status.CURRENT) {
-                        config.status = Status.ENABLED;
-                    }
-                    break;
-                default:
-                    //do nothing, retain the existing state
-                    break;
-            }
-        }
-    }
-
-    /**
-     * Forget the specified network and save config
-     *
-     * @param netId network to forget
-     * @return {@code true} if it succeeds, {@code false} otherwise
-     */
-    boolean forgetNetwork(int netId) {
-        if (VDBG) localLog("forgetNetwork", netId);
-        if (mWifiNative.removeNetwork(netId)) {
-            mWifiNative.saveConfig();
-            removeConfigAndSendBroadcastIfNeeded(netId);
-            return true;
-        } else {
-            loge("Failed to remove network " + netId);
-            return false;
-        }
-    }
-
-    /**
-     * Add/update a network. Note that there is no saveConfig operation.
-     * This function is retained for compatibility with the public
-     * API. The more powerful saveNetwork() is used by the
-     * state machine
-     *
-     * @param config wifi configuration to add/update
-     * @return network Id
-     */
-    int addOrUpdateNetwork(WifiConfiguration config) {
-        if (VDBG) localLog("addOrUpdateNetwork", config.networkId);
-        NetworkUpdateResult result = addOrUpdateNetworkNative(config);
-        if (result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID) {
-            sendConfiguredNetworksChangedBroadcast(mConfiguredNetworks.get(result.getNetworkId()),
-                    result.isNewNetwork ? WifiManager.CHANGE_REASON_ADDED :
-                            WifiManager.CHANGE_REASON_CONFIG_CHANGE);
-        }
-        return result.getNetworkId();
-    }
-
-    /**
-     * Remove a network. Note that there is no saveConfig operation.
-     * This function is retained for compatibility with the public
-     * API. The more powerful forgetNetwork() is used by the
-     * state machine for network removal
-     *
-     * @param netId network to be removed
-     * @return {@code true} if it succeeds, {@code false} otherwise
-     */
-    boolean removeNetwork(int netId) {
-        if (VDBG) localLog("removeNetwork", netId);
-        boolean ret = mWifiNative.removeNetwork(netId);
-        if (ret) {
-            removeConfigAndSendBroadcastIfNeeded(netId);
-        }
-        return ret;
-    }
-
-    private void removeConfigAndSendBroadcastIfNeeded(int netId) {
-        WifiConfiguration config = mConfiguredNetworks.get(netId);
-        if (config != null) {
-            // Remove any associated keys
-            if (config.enterpriseConfig != null) {
-                config.enterpriseConfig.removeKeys(mKeyStore);
-            }
-            mConfiguredNetworks.remove(netId);
-            mNetworkIds.remove(configKey(config));
-
-            writeIpAndProxyConfigurations();
-            sendConfiguredNetworksChangedBroadcast(config, WifiManager.CHANGE_REASON_REMOVED);
-        }
-    }
-
-    /**
-     * Enable a network. Note that there is no saveConfig operation.
-     * This function is retained for compatibility with the public
-     * API. The more powerful selectNetwork()/saveNetwork() is used by the
-     * state machine for connecting to a network
-     *
-     * @param netId network to be enabled
-     * @return {@code true} if it succeeds, {@code false} otherwise
-     */
-    boolean enableNetwork(int netId, boolean disableOthers) {
-        boolean ret = enableNetworkWithoutBroadcast(netId, disableOthers);
-        if (disableOthers) {
-            if (VDBG) localLog("enableNetwork(disableOthers=true) ", netId);
-            sendConfiguredNetworksChangedBroadcast();
-        } else {
-            if (VDBG) localLog("enableNetwork(disableOthers=false) ", netId);
-            WifiConfiguration enabledNetwork = null;
-            synchronized(mConfiguredNetworks) {
-                enabledNetwork = mConfiguredNetworks.get(netId);
-            }
-            // check just in case the network was removed by someone else.
-            if (enabledNetwork != null) {
-                sendConfiguredNetworksChangedBroadcast(enabledNetwork,
-                        WifiManager.CHANGE_REASON_CONFIG_CHANGE);
-            }
-        }
-        return ret;
-    }
-
-    boolean enableNetworkWithoutBroadcast(int netId, boolean disableOthers) {
-        boolean ret = mWifiNative.enableNetwork(netId, disableOthers);
-
-        WifiConfiguration config = mConfiguredNetworks.get(netId);
-        if (config != null) config.status = Status.ENABLED;
-
-        if (disableOthers) {
-            markAllNetworksDisabledExcept(netId);
-        }
-        return ret;
-    }
-
-    void disableAllNetworks() {
-        if (VDBG) localLog("disableAllNetworks");
-        boolean networkDisabled = false;
-        for(WifiConfiguration config : mConfiguredNetworks.values()) {
-            if(config != null && config.status != Status.DISABLED) {
-                if(mWifiNative.disableNetwork(config.networkId)) {
-                    networkDisabled = true;
-                    config.status = Status.DISABLED;
-                } else {
-                    loge("Disable network failed on " + config.networkId);
-                }
-            }
-        }
-
-        if (networkDisabled) {
-            sendConfiguredNetworksChangedBroadcast();
-        }
-    }
-    /**
-     * Disable a network. Note that there is no saveConfig operation.
-     * @param netId network to be disabled
-     * @return {@code true} if it succeeds, {@code false} otherwise
-     */
-    boolean disableNetwork(int netId) {
-        return disableNetwork(netId, WifiConfiguration.DISABLED_UNKNOWN_REASON);
-    }
-
-    /**
-     * Disable a network. Note that there is no saveConfig operation.
-     * @param netId network to be disabled
-     * @param reason reason code network was disabled
-     * @return {@code true} if it succeeds, {@code false} otherwise
-     */
-    boolean disableNetwork(int netId, int reason) {
-        if (VDBG) localLog("disableNetwork", netId);
-        boolean ret = mWifiNative.disableNetwork(netId);
-        WifiConfiguration network = null;
-        WifiConfiguration config = mConfiguredNetworks.get(netId);
-        /* Only change the reason if the network was not previously disabled */
-        if (config != null && config.status != Status.DISABLED) {
-            config.status = Status.DISABLED;
-            config.disableReason = reason;
-            network = config;
-        }
-        if (network != null) {
-            sendConfiguredNetworksChangedBroadcast(network,
-                    WifiManager.CHANGE_REASON_CONFIG_CHANGE);
-        }
-        return ret;
-    }
-
-    /**
-     * Save the configured networks in supplicant to disk
-     * @return {@code true} if it succeeds, {@code false} otherwise
-     */
-    boolean saveConfig() {
-        return mWifiNative.saveConfig();
-    }
-
-    /**
-     * Start WPS pin method configuration with pin obtained
-     * from the access point
-     * @param config WPS configuration
-     * @return Wps result containing status and pin
-     */
-    WpsResult startWpsWithPinFromAccessPoint(WpsInfo config) {
-        WpsResult result = new WpsResult();
-        if (mWifiNative.startWpsRegistrar(config.BSSID, config.pin)) {
-            /* WPS leaves all networks disabled */
-            markAllNetworksDisabled();
-            result.status = WpsResult.Status.SUCCESS;
-        } else {
-            loge("Failed to start WPS pin method configuration");
-            result.status = WpsResult.Status.FAILURE;
-        }
-        return result;
-    }
-
-    /**
-     * Start WPS pin method configuration with pin obtained
-     * from the device
-     * @return WpsResult indicating status and pin
-     */
-    WpsResult startWpsWithPinFromDevice(WpsInfo config) {
-        WpsResult result = new WpsResult();
-        result.pin = mWifiNative.startWpsPinDisplay(config.BSSID);
-        /* WPS leaves all networks disabled */
-        if (!TextUtils.isEmpty(result.pin)) {
-            markAllNetworksDisabled();
-            result.status = WpsResult.Status.SUCCESS;
-        } else {
-            loge("Failed to start WPS pin method configuration");
-            result.status = WpsResult.Status.FAILURE;
-        }
-        return result;
-    }
-
-    /**
-     * Start WPS push button configuration
-     * @param config WPS configuration
-     * @return WpsResult indicating status and pin
-     */
-    WpsResult startWpsPbc(WpsInfo config) {
-        WpsResult result = new WpsResult();
-        if (mWifiNative.startWpsPbc(config.BSSID)) {
-            /* WPS leaves all networks disabled */
-            markAllNetworksDisabled();
-            result.status = WpsResult.Status.SUCCESS;
-        } else {
-            loge("Failed to start WPS push button configuration");
-            result.status = WpsResult.Status.FAILURE;
-        }
-        return result;
-    }
-
-    /**
-     * Fetch the link properties for a given network id
-     * @return LinkProperties for the given network id
-     */
-    LinkProperties getLinkProperties(int netId) {
-        WifiConfiguration config = mConfiguredNetworks.get(netId);
-        if (config != null) return new LinkProperties(config.linkProperties);
-        return null;
-    }
-
-    /**
-     * set IP configuration for a given network id
-     */
-    void setLinkProperties(int netId, LinkProperties linkProperties) {
-        WifiConfiguration config = mConfiguredNetworks.get(netId);
-        if (config != null) {
-            // add old proxy details - TODO - is this still needed?
-            if(config.linkProperties != null) {
-                linkProperties.setHttpProxy(config.linkProperties.getHttpProxy());
-            }
-            config.linkProperties = linkProperties;
-        }
-    }
-
-    /**
-     * clear IP configuration for a given network id
-     * @param network id
-     */
-    void clearLinkProperties(int netId) {
-        WifiConfiguration config = mConfiguredNetworks.get(netId);
-        if (config != null && config.linkProperties != null) {
-            // Clear everything except proxy
-            ProxyProperties proxy = config.linkProperties.getHttpProxy();
-            config.linkProperties.clear();
-            config.linkProperties.setHttpProxy(proxy);
-        }
-    }
-
-
-    /**
-     * Fetch the proxy properties for a given network id
-     * @param network id
-     * @return ProxyProperties for the network id
-     */
-    ProxyProperties getProxyProperties(int netId) {
-        LinkProperties linkProperties = getLinkProperties(netId);
-        if (linkProperties != null) {
-            return new ProxyProperties(linkProperties.getHttpProxy());
-        }
-        return null;
-    }
-
-    /**
-     * Return if the specified network is using static IP
-     * @param network id
-     * @return {@code true} if using static ip for netId
-     */
-    boolean isUsingStaticIp(int netId) {
-        WifiConfiguration config = mConfiguredNetworks.get(netId);
-        if (config != null && config.ipAssignment == IpAssignment.STATIC) {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Should be called when a single network configuration is made.
-     * @param network The network configuration that changed.
-     * @param reason The reason for the change, should be one of WifiManager.CHANGE_REASON_ADDED,
-     * WifiManager.CHANGE_REASON_REMOVED, or WifiManager.CHANGE_REASON_CHANGE.
-     */
-    private void sendConfiguredNetworksChangedBroadcast(WifiConfiguration network,
-            int reason) {
-        Intent intent = new Intent(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_MULTIPLE_NETWORKS_CHANGED, false);
-        intent.putExtra(WifiManager.EXTRA_WIFI_CONFIGURATION, network);
-        intent.putExtra(WifiManager.EXTRA_CHANGE_REASON, reason);
-        mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    /**
-     * Should be called when multiple network configuration changes are made.
-     */
-    private void sendConfiguredNetworksChangedBroadcast() {
-        Intent intent = new Intent(WifiManager.CONFIGURED_NETWORKS_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_MULTIPLE_NETWORKS_CHANGED, true);
-        mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    void loadConfiguredNetworks() {
-        String listStr = mWifiNative.listNetworks();
-        mLastPriority = 0;
-
-        mConfiguredNetworks.clear();
-        mNetworkIds.clear();
-
-        if (listStr == null)
-            return;
-
-        String[] lines = listStr.split("\n");
-        // Skip the first line, which is a header
-        for (int i = 1; i < lines.length; i++) {
-            String[] result = lines[i].split("\t");
-            // network-id | ssid | bssid | flags
-            WifiConfiguration config = new WifiConfiguration();
-            try {
-                config.networkId = Integer.parseInt(result[0]);
-            } catch(NumberFormatException e) {
-                loge("Failed to read network-id '" + result[0] + "'");
-                continue;
-            }
-            if (result.length > 3) {
-                if (result[3].indexOf("[CURRENT]") != -1)
-                    config.status = WifiConfiguration.Status.CURRENT;
-                else if (result[3].indexOf("[DISABLED]") != -1)
-                    config.status = WifiConfiguration.Status.DISABLED;
-                else
-                    config.status = WifiConfiguration.Status.ENABLED;
-            } else {
-                config.status = WifiConfiguration.Status.ENABLED;
-            }
-            readNetworkVariables(config);
-            if (config.priority > mLastPriority) {
-                mLastPriority = config.priority;
-            }
-            config.ipAssignment = IpAssignment.DHCP;
-            config.proxySettings = ProxySettings.NONE;
-
-            if (mNetworkIds.containsKey(configKey(config))) {
-                // That SSID is already known, just ignore this duplicate entry
-                if (VDBG) localLog("discarded duplicate network", config.networkId);
-            } else {
-                mConfiguredNetworks.put(config.networkId, config);
-                mNetworkIds.put(configKey(config), config.networkId);
-                if (VDBG) localLog("loaded configured network", config.networkId);
-            }
-        }
-
-        readIpAndProxyConfigurations();
-        sendConfiguredNetworksChangedBroadcast();
-
-        if (VDBG) localLog("loadConfiguredNetworks loaded " + mNetworkIds.size() + " networks");
-
-        if (mNetworkIds.size() == 0) {
-            // no networks? Lets log if the wpa_supplicant.conf file contents
-            BufferedReader reader = null;
-            try {
-                reader = new BufferedReader(new FileReader(SUPPLICANT_CONFIG_FILE));
-                if (VDBG) localLog("--- Begin wpa_supplicant.conf Contents ---");
-                for (String line = reader.readLine(); line != null; line = reader.readLine()) {
-                    if (VDBG) localLog(line);
-                }
-                if (VDBG) localLog("--- End wpa_supplicant.conf Contents ---");
-            } catch (FileNotFoundException e) {
-                if (VDBG) localLog("Could not open " + SUPPLICANT_CONFIG_FILE + ", " + e);
-            } catch (IOException e) {
-                if (VDBG) localLog("Could not read " + SUPPLICANT_CONFIG_FILE + ", " + e);
-            } finally {
-                try {
-                    if (reader != null) {
-                        reader.close();
-                    }
-                } catch (IOException e) {
-                    // Just ignore the fact that we couldn't close
-                }
-            }
-        }
-    }
-
-    /* Mark all networks except specified netId as disabled */
-    private void markAllNetworksDisabledExcept(int netId) {
-        for(WifiConfiguration config : mConfiguredNetworks.values()) {
-            if(config != null && config.networkId != netId) {
-                if (config.status != Status.DISABLED) {
-                    config.status = Status.DISABLED;
-                    config.disableReason = WifiConfiguration.DISABLED_UNKNOWN_REASON;
-                }
-            }
-        }
-    }
-
-    private void markAllNetworksDisabled() {
-        markAllNetworksDisabledExcept(INVALID_NETWORK_ID);
-    }
-
-    boolean needsUnlockedKeyStore() {
-
-        // Any network using certificates to authenticate access requires
-        // unlocked key store; unless the certificates can be stored with
-        // hardware encryption
-
-        for(WifiConfiguration config : mConfiguredNetworks.values()) {
-
-            if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP)
-                    && config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
-
-                if (config.enterpriseConfig.needsSoftwareBackedKeyStore()) {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    private void writeIpAndProxyConfigurations() {
-
-        /* Make a copy */
-        List<WifiConfiguration> networks = new ArrayList<WifiConfiguration>();
-        for(WifiConfiguration config : mConfiguredNetworks.values()) {
-            networks.add(new WifiConfiguration(config));
-        }
-
-        DelayedDiskWrite.write(networks);
-    }
-
-    private static class DelayedDiskWrite {
-
-        private static HandlerThread sDiskWriteHandlerThread;
-        private static Handler sDiskWriteHandler;
-        /* Tracks multiple writes on the same thread */
-        private static int sWriteSequence = 0;
-        private static final String TAG = "DelayedDiskWrite";
-
-        static void write (final List<WifiConfiguration> networks) {
-
-            /* Do a delayed write to disk on a seperate handler thread */
-            synchronized (DelayedDiskWrite.class) {
-                if (++sWriteSequence == 1) {
-                    sDiskWriteHandlerThread = new HandlerThread("WifiConfigThread");
-                    sDiskWriteHandlerThread.start();
-                    sDiskWriteHandler = new Handler(sDiskWriteHandlerThread.getLooper());
-                }
-            }
-
-            sDiskWriteHandler.post(new Runnable() {
-                    @Override
-                    public void run() {
-                        onWriteCalled(networks);
-                    }
-                });
-        }
-
-        private static void onWriteCalled(List<WifiConfiguration> networks) {
-
-            DataOutputStream out = null;
-            try {
-                out = new DataOutputStream(new BufferedOutputStream(
-                            new FileOutputStream(ipConfigFile)));
-
-                out.writeInt(IPCONFIG_FILE_VERSION);
-
-                for(WifiConfiguration config : networks) {
-                    boolean writeToFile = false;
-
-                    try {
-                        LinkProperties linkProperties = config.linkProperties;
-                        switch (config.ipAssignment) {
-                            case STATIC:
-                                out.writeUTF(IP_ASSIGNMENT_KEY);
-                                out.writeUTF(config.ipAssignment.toString());
-                                for (LinkAddress linkAddr : linkProperties.getLinkAddresses()) {
-                                    out.writeUTF(LINK_ADDRESS_KEY);
-                                    out.writeUTF(linkAddr.getAddress().getHostAddress());
-                                    out.writeInt(linkAddr.getNetworkPrefixLength());
-                                }
-                                for (RouteInfo route : linkProperties.getRoutes()) {
-                                    out.writeUTF(GATEWAY_KEY);
-                                    LinkAddress dest = route.getDestination();
-                                    if (dest != null) {
-                                        out.writeInt(1);
-                                        out.writeUTF(dest.getAddress().getHostAddress());
-                                        out.writeInt(dest.getNetworkPrefixLength());
-                                    } else {
-                                        out.writeInt(0);
-                                    }
-                                    if (route.getGateway() != null) {
-                                        out.writeInt(1);
-                                        out.writeUTF(route.getGateway().getHostAddress());
-                                    } else {
-                                        out.writeInt(0);
-                                    }
-                                }
-                                for (InetAddress inetAddr : linkProperties.getDnses()) {
-                                    out.writeUTF(DNS_KEY);
-                                    out.writeUTF(inetAddr.getHostAddress());
-                                }
-                                writeToFile = true;
-                                break;
-                            case DHCP:
-                                out.writeUTF(IP_ASSIGNMENT_KEY);
-                                out.writeUTF(config.ipAssignment.toString());
-                                writeToFile = true;
-                                break;
-                            case UNASSIGNED:
-                                /* Ignore */
-                                break;
-                            default:
-                                loge("Ignore invalid ip assignment while writing");
-                                break;
-                        }
-
-                        switch (config.proxySettings) {
-                            case STATIC:
-                                ProxyProperties proxyProperties = linkProperties.getHttpProxy();
-                                String exclusionList = proxyProperties.getExclusionList();
-                                out.writeUTF(PROXY_SETTINGS_KEY);
-                                out.writeUTF(config.proxySettings.toString());
-                                out.writeUTF(PROXY_HOST_KEY);
-                                out.writeUTF(proxyProperties.getHost());
-                                out.writeUTF(PROXY_PORT_KEY);
-                                out.writeInt(proxyProperties.getPort());
-                                out.writeUTF(EXCLUSION_LIST_KEY);
-                                out.writeUTF(exclusionList);
-                                writeToFile = true;
-                                break;
-                            case PAC:
-                                ProxyProperties proxyPacProperties = linkProperties.getHttpProxy();
-                                out.writeUTF(PROXY_SETTINGS_KEY);
-                                out.writeUTF(config.proxySettings.toString());
-                                out.writeUTF(PROXY_PAC_FILE);
-                                out.writeUTF(proxyPacProperties.getPacFileUrl());
-                                writeToFile = true;
-                                break;
-                            case NONE:
-                                out.writeUTF(PROXY_SETTINGS_KEY);
-                                out.writeUTF(config.proxySettings.toString());
-                                writeToFile = true;
-                                break;
-                            case UNASSIGNED:
-                                /* Ignore */
-                                break;
-                            default:
-                                loge("Ignthisore invalid proxy settings while writing");
-                                break;
-                        }
-                        if (writeToFile) {
-                            out.writeUTF(ID_KEY);
-                            out.writeInt(configKey(config));
-                        }
-                    } catch (NullPointerException e) {
-                        loge("Failure in writing " + config.linkProperties + e);
-                    }
-                    out.writeUTF(EOS);
-                }
-
-            } catch (IOException e) {
-                loge("Error writing data file");
-            } finally {
-                if (out != null) {
-                    try {
-                        out.close();
-                    } catch (Exception e) {}
-                }
-
-                //Quit if no more writes sent
-                synchronized (DelayedDiskWrite.class) {
-                    if (--sWriteSequence == 0) {
-                        sDiskWriteHandler.getLooper().quit();
-                        sDiskWriteHandler = null;
-                        sDiskWriteHandlerThread = null;
-                    }
-                }
-            }
-        }
-
-        private static void loge(String s) {
-            Log.e(TAG, s);
-        }
-    }
-
-    private void readIpAndProxyConfigurations() {
-
-        DataInputStream in = null;
-        try {
-            in = new DataInputStream(new BufferedInputStream(new FileInputStream(
-                    ipConfigFile)));
-
-            int version = in.readInt();
-            if (version != 2 && version != 1) {
-                loge("Bad version on IP configuration file, ignore read");
-                return;
-            }
-
-            while (true) {
-                int id = -1;
-                // Default is DHCP with no proxy
-                IpAssignment ipAssignment = IpAssignment.DHCP;
-                ProxySettings proxySettings = ProxySettings.NONE;
-                LinkProperties linkProperties = new LinkProperties();
-                String proxyHost = null;
-                String pacFileUrl = null;
-                int proxyPort = -1;
-                String exclusionList = null;
-                String key;
-
-                do {
-                    key = in.readUTF();
-                    try {
-                        if (key.equals(ID_KEY)) {
-                            id = in.readInt();
-                        } else if (key.equals(IP_ASSIGNMENT_KEY)) {
-                            ipAssignment = IpAssignment.valueOf(in.readUTF());
-                        } else if (key.equals(LINK_ADDRESS_KEY)) {
-                            LinkAddress linkAddr = new LinkAddress(
-                                    NetworkUtils.numericToInetAddress(in.readUTF()), in.readInt());
-                            linkProperties.addLinkAddress(linkAddr);
-                        } else if (key.equals(GATEWAY_KEY)) {
-                            LinkAddress dest = null;
-                            InetAddress gateway = null;
-                            if (version == 1) {
-                                // only supported default gateways - leave the dest/prefix empty
-                                gateway = NetworkUtils.numericToInetAddress(in.readUTF());
-                            } else {
-                                if (in.readInt() == 1) {
-                                    dest = new LinkAddress(
-                                            NetworkUtils.numericToInetAddress(in.readUTF()),
-                                            in.readInt());
-                                }
-                                if (in.readInt() == 1) {
-                                    gateway = NetworkUtils.numericToInetAddress(in.readUTF());
-                                }
-                            }
-                            linkProperties.addRoute(new RouteInfo(dest, gateway));
-                        } else if (key.equals(DNS_KEY)) {
-                            linkProperties.addDns(
-                                    NetworkUtils.numericToInetAddress(in.readUTF()));
-                        } else if (key.equals(PROXY_SETTINGS_KEY)) {
-                            proxySettings = ProxySettings.valueOf(in.readUTF());
-                        } else if (key.equals(PROXY_HOST_KEY)) {
-                            proxyHost = in.readUTF();
-                        } else if (key.equals(PROXY_PORT_KEY)) {
-                            proxyPort = in.readInt();
-                        } else if (key.equals(PROXY_PAC_FILE)) {
-                            pacFileUrl = in.readUTF();
-                        } else if (key.equals(EXCLUSION_LIST_KEY)) {
-                            exclusionList = in.readUTF();
-                        } else if (key.equals(EOS)) {
-                            break;
-                        } else {
-                            loge("Ignore unknown key " + key + "while reading");
-                        }
-                    } catch (IllegalArgumentException e) {
-                        loge("Ignore invalid address while reading" + e);
-                    }
-                } while (true);
-
-                if (id != -1) {
-                    WifiConfiguration config = mConfiguredNetworks.get(
-                            mNetworkIds.get(id));
-
-                    if (config == null) {
-                        loge("configuration found for missing network, ignored");
-                    } else {
-                        config.linkProperties = linkProperties;
-                        switch (ipAssignment) {
-                            case STATIC:
-                            case DHCP:
-                                config.ipAssignment = ipAssignment;
-                                break;
-                            case UNASSIGNED:
-                                loge("BUG: Found UNASSIGNED IP on file, use DHCP");
-                                config.ipAssignment = IpAssignment.DHCP;
-                                break;
-                            default:
-                                loge("Ignore invalid ip assignment while reading");
-                                break;
-                        }
-
-                        switch (proxySettings) {
-                            case STATIC:
-                                config.proxySettings = proxySettings;
-                                ProxyProperties proxyProperties =
-                                    new ProxyProperties(proxyHost, proxyPort, exclusionList);
-                                linkProperties.setHttpProxy(proxyProperties);
-                                break;
-                            case PAC:
-                                config.proxySettings = proxySettings;
-                                ProxyProperties proxyPacProperties = 
-                                        new ProxyProperties(pacFileUrl);
-                                linkProperties.setHttpProxy(proxyPacProperties);
-                                break;
-                            case NONE:
-                                config.proxySettings = proxySettings;
-                                break;
-                            case UNASSIGNED:
-                                loge("BUG: Found UNASSIGNED proxy on file, use NONE");
-                                config.proxySettings = ProxySettings.NONE;
-                                break;
-                            default:
-                                loge("Ignore invalid proxy settings while reading");
-                                break;
-                        }
-                    }
-                } else {
-                    if (DBG) log("Missing id while parsing configuration");
-                }
-            }
-        } catch (EOFException ignore) {
-        } catch (IOException e) {
-            loge("Error parsing configuration" + e);
-        } finally {
-            if (in != null) {
-                try {
-                    in.close();
-                } catch (Exception e) {}
-            }
-        }
-    }
-
-    private NetworkUpdateResult addOrUpdateNetworkNative(WifiConfiguration config) {
-        /*
-         * If the supplied networkId is INVALID_NETWORK_ID, we create a new empty
-         * network configuration. Otherwise, the networkId should
-         * refer to an existing configuration.
-         */
-
-        if (VDBG) localLog("addOrUpdateNetworkNative " + config.getPrintableSsid());
-
-        int netId = config.networkId;
-        boolean newNetwork = false;
-        // networkId of INVALID_NETWORK_ID means we want to create a new network
-        if (netId == INVALID_NETWORK_ID) {
-            Integer savedNetId = mNetworkIds.get(configKey(config));
-            if (savedNetId != null) {
-                netId = savedNetId;
-            } else {
-                newNetwork = true;
-                netId = mWifiNative.addNetwork();
-                if (netId < 0) {
-                    loge("Failed to add a network!");
-                    return new NetworkUpdateResult(INVALID_NETWORK_ID);
-                }
-            }
-        }
-
-        boolean updateFailed = true;
-
-        setVariables: {
-
-            if (config.SSID != null &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.ssidVarName,
-                        config.SSID)) {
-                loge("failed to set SSID: "+config.SSID);
-                break setVariables;
-            }
-
-            if (config.BSSID != null &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.bssidVarName,
-                        config.BSSID)) {
-                loge("failed to set BSSID: "+config.BSSID);
-                break setVariables;
-            }
-
-            String allowedKeyManagementString =
-                makeString(config.allowedKeyManagement, WifiConfiguration.KeyMgmt.strings);
-            if (config.allowedKeyManagement.cardinality() != 0 &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.KeyMgmt.varName,
-                        allowedKeyManagementString)) {
-                loge("failed to set key_mgmt: "+
-                        allowedKeyManagementString);
-                break setVariables;
-            }
-
-            String allowedProtocolsString =
-                makeString(config.allowedProtocols, WifiConfiguration.Protocol.strings);
-            if (config.allowedProtocols.cardinality() != 0 &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.Protocol.varName,
-                        allowedProtocolsString)) {
-                loge("failed to set proto: "+
-                        allowedProtocolsString);
-                break setVariables;
-            }
-
-            String allowedAuthAlgorithmsString =
-                makeString(config.allowedAuthAlgorithms, WifiConfiguration.AuthAlgorithm.strings);
-            if (config.allowedAuthAlgorithms.cardinality() != 0 &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.AuthAlgorithm.varName,
-                        allowedAuthAlgorithmsString)) {
-                loge("failed to set auth_alg: "+
-                        allowedAuthAlgorithmsString);
-                break setVariables;
-            }
-
-            String allowedPairwiseCiphersString =
-                    makeString(config.allowedPairwiseCiphers,
-                    WifiConfiguration.PairwiseCipher.strings);
-            if (config.allowedPairwiseCiphers.cardinality() != 0 &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.PairwiseCipher.varName,
-                        allowedPairwiseCiphersString)) {
-                loge("failed to set pairwise: "+
-                        allowedPairwiseCiphersString);
-                break setVariables;
-            }
-
-            String allowedGroupCiphersString =
-                makeString(config.allowedGroupCiphers, WifiConfiguration.GroupCipher.strings);
-            if (config.allowedGroupCiphers.cardinality() != 0 &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.GroupCipher.varName,
-                        allowedGroupCiphersString)) {
-                loge("failed to set group: "+
-                        allowedGroupCiphersString);
-                break setVariables;
-            }
-
-            // Prevent client screw-up by passing in a WifiConfiguration we gave it
-            // by preventing "*" as a key.
-            if (config.preSharedKey != null && !config.preSharedKey.equals("*") &&
-                    !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.pskVarName,
-                        config.preSharedKey)) {
-                loge("failed to set psk");
-                break setVariables;
-            }
-
-            boolean hasSetKey = false;
-            if (config.wepKeys != null) {
-                for (int i = 0; i < config.wepKeys.length; i++) {
-                    // Prevent client screw-up by passing in a WifiConfiguration we gave it
-                    // by preventing "*" as a key.
-                    if (config.wepKeys[i] != null && !config.wepKeys[i].equals("*")) {
-                        if (!mWifiNative.setNetworkVariable(
-                                    netId,
-                                    WifiConfiguration.wepKeyVarNames[i],
-                                    config.wepKeys[i])) {
-                            loge("failed to set wep_key" + i + ": " + config.wepKeys[i]);
-                            break setVariables;
-                        }
-                        hasSetKey = true;
-                    }
-                }
-            }
-
-            if (hasSetKey) {
-                if (!mWifiNative.setNetworkVariable(
-                            netId,
-                            WifiConfiguration.wepTxKeyIdxVarName,
-                            Integer.toString(config.wepTxKeyIndex))) {
-                    loge("failed to set wep_tx_keyidx: " + config.wepTxKeyIndex);
-                    break setVariables;
-                }
-            }
-
-            if (!mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.priorityVarName,
-                        Integer.toString(config.priority))) {
-                loge(config.SSID + ": failed to set priority: "
-                        +config.priority);
-                break setVariables;
-            }
-
-            if (config.hiddenSSID && !mWifiNative.setNetworkVariable(
-                        netId,
-                        WifiConfiguration.hiddenSSIDVarName,
-                        Integer.toString(config.hiddenSSID ? 1 : 0))) {
-                loge(config.SSID + ": failed to set hiddenSSID: "+
-                        config.hiddenSSID);
-                break setVariables;
-            }
-
-            if (config.enterpriseConfig != null &&
-                    config.enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE) {
-
-                WifiEnterpriseConfig enterpriseConfig = config.enterpriseConfig;
-
-                if (enterpriseConfig.needsKeyStore()) {
-                    /**
-                     * Keyguard settings may eventually be controlled by device policy.
-                     * We check here if keystore is unlocked before installing
-                     * credentials.
-                     * TODO: Do we need a dialog here ?
-                     */
-                    if (mKeyStore.state() != KeyStore.State.UNLOCKED) {
-                        loge(config.SSID + ": key store is locked");
-                        break setVariables;
-                    }
-
-                    try {
-                        /* config passed may include only fields being updated.
-                         * In order to generate the key id, fetch uninitialized
-                         * fields from the currently tracked configuration
-                         */
-                        WifiConfiguration currentConfig = mConfiguredNetworks.get(netId);
-                        String keyId = config.getKeyIdForCredentials(currentConfig);
-
-                        if (!enterpriseConfig.installKeys(mKeyStore, keyId)) {
-                            loge(config.SSID + ": failed to install keys");
-                            break setVariables;
-                        }
-                    } catch (IllegalStateException e) {
-                        loge(config.SSID + " invalid config for key installation");
-                        break setVariables;
-                    }
-                }
-
-                HashMap<String, String> enterpriseFields = enterpriseConfig.getFields();
-                for (String key : enterpriseFields.keySet()) {
-                        String value = enterpriseFields.get(key);
-                        if (!mWifiNative.setNetworkVariable(
-                                    netId,
-                                    key,
-                                    value)) {
-                            enterpriseConfig.removeKeys(mKeyStore);
-                            loge(config.SSID + ": failed to set " + key +
-                                    ": " + value);
-                            break setVariables;
-                        }
-                }
-            }
-            updateFailed = false;
-        } //end of setVariables
-
-        if (updateFailed) {
-            if (newNetwork) {
-                mWifiNative.removeNetwork(netId);
-                loge("Failed to set a network variable, removed network: " + netId);
-            }
-            return new NetworkUpdateResult(INVALID_NETWORK_ID);
-        }
-
-        /* An update of the network variables requires reading them
-         * back from the supplicant to update mConfiguredNetworks.
-         * This is because some of the variables (SSID, wep keys &
-         * passphrases) reflect different values when read back than
-         * when written. For example, wep key is stored as * irrespective
-         * of the value sent to the supplicant
-         */
-        WifiConfiguration currentConfig = mConfiguredNetworks.get(netId);
-        if (currentConfig == null) {
-            currentConfig = new WifiConfiguration();
-            currentConfig.ipAssignment = IpAssignment.DHCP;
-            currentConfig.proxySettings = ProxySettings.NONE;
-            currentConfig.networkId = netId;
-        }
-
-        readNetworkVariables(currentConfig);
-
-        mConfiguredNetworks.put(netId, currentConfig);
-        mNetworkIds.put(configKey(currentConfig), netId);
-
-        NetworkUpdateResult result = writeIpAndProxyConfigurationsOnChange(currentConfig, config);
-        result.setIsNewNetwork(newNetwork);
-        result.setNetworkId(netId);
-        return result;
-    }
-
-    /* Compare current and new configuration and write to file on change */
-    private NetworkUpdateResult writeIpAndProxyConfigurationsOnChange(
-            WifiConfiguration currentConfig,
-            WifiConfiguration newConfig) {
-        boolean ipChanged = false;
-        boolean proxyChanged = false;
-        LinkProperties linkProperties = null;
-
-        switch (newConfig.ipAssignment) {
-            case STATIC:
-                Collection<LinkAddress> currentLinkAddresses = currentConfig.linkProperties
-                        .getLinkAddresses();
-                Collection<LinkAddress> newLinkAddresses = newConfig.linkProperties
-                        .getLinkAddresses();
-                Collection<InetAddress> currentDnses = currentConfig.linkProperties.getDnses();
-                Collection<InetAddress> newDnses = newConfig.linkProperties.getDnses();
-                Collection<RouteInfo> currentRoutes = currentConfig.linkProperties.getRoutes();
-                Collection<RouteInfo> newRoutes = newConfig.linkProperties.getRoutes();
-
-                boolean linkAddressesDiffer =
-                        (currentLinkAddresses.size() != newLinkAddresses.size()) ||
-                        !currentLinkAddresses.containsAll(newLinkAddresses);
-                boolean dnsesDiffer = (currentDnses.size() != newDnses.size()) ||
-                        !currentDnses.containsAll(newDnses);
-                boolean routesDiffer = (currentRoutes.size() != newRoutes.size()) ||
-                        !currentRoutes.containsAll(newRoutes);
-
-                if ((currentConfig.ipAssignment != newConfig.ipAssignment) ||
-                        linkAddressesDiffer ||
-                        dnsesDiffer ||
-                        routesDiffer) {
-                    ipChanged = true;
-                }
-                break;
-            case DHCP:
-                if (currentConfig.ipAssignment != newConfig.ipAssignment) {
-                    ipChanged = true;
-                }
-                break;
-            case UNASSIGNED:
-                /* Ignore */
-                break;
-            default:
-                loge("Ignore invalid ip assignment during write");
-                break;
-        }
-
-        switch (newConfig.proxySettings) {
-            case STATIC:
-            case PAC:
-                ProxyProperties newHttpProxy = newConfig.linkProperties.getHttpProxy();
-                ProxyProperties currentHttpProxy = currentConfig.linkProperties.getHttpProxy();
-
-                if (newHttpProxy != null) {
-                    proxyChanged = !newHttpProxy.equals(currentHttpProxy);
-                } else {
-                    proxyChanged = (currentHttpProxy != null);
-                }
-                break;
-            case NONE:
-                if (currentConfig.proxySettings != newConfig.proxySettings) {
-                    proxyChanged = true;
-                }
-                break;
-            case UNASSIGNED:
-                /* Ignore */
-                break;
-            default:
-                loge("Ignore invalid proxy configuration during write");
-                break;
-        }
-
-        if (!ipChanged) {
-            linkProperties = copyIpSettingsFromConfig(currentConfig);
-        } else {
-            currentConfig.ipAssignment = newConfig.ipAssignment;
-            linkProperties = copyIpSettingsFromConfig(newConfig);
-            log("IP config changed SSID = " + currentConfig.SSID + " linkProperties: " +
-                    linkProperties.toString());
-        }
-
-
-        if (!proxyChanged) {
-            linkProperties.setHttpProxy(currentConfig.linkProperties.getHttpProxy());
-        } else {
-            currentConfig.proxySettings = newConfig.proxySettings;
-            linkProperties.setHttpProxy(newConfig.linkProperties.getHttpProxy());
-            log("proxy changed SSID = " + currentConfig.SSID);
-            if (linkProperties.getHttpProxy() != null) {
-                log(" proxyProperties: " + linkProperties.getHttpProxy().toString());
-            }
-        }
-
-        if (ipChanged || proxyChanged) {
-            currentConfig.linkProperties = linkProperties;
-            writeIpAndProxyConfigurations();
-            sendConfiguredNetworksChangedBroadcast(currentConfig,
-                    WifiManager.CHANGE_REASON_CONFIG_CHANGE);
-        }
-        return new NetworkUpdateResult(ipChanged, proxyChanged);
-    }
-
-    private LinkProperties copyIpSettingsFromConfig(WifiConfiguration config) {
-        LinkProperties linkProperties = new LinkProperties();
-        linkProperties.setInterfaceName(config.linkProperties.getInterfaceName());
-        for (LinkAddress linkAddr : config.linkProperties.getLinkAddresses()) {
-            linkProperties.addLinkAddress(linkAddr);
-        }
-        for (RouteInfo route : config.linkProperties.getRoutes()) {
-            linkProperties.addRoute(route);
-        }
-        for (InetAddress dns : config.linkProperties.getDnses()) {
-            linkProperties.addDns(dns);
-        }
-        return linkProperties;
-    }
-
-    /**
-     * Read the variables from the supplicant daemon that are needed to
-     * fill in the WifiConfiguration object.
-     *
-     * @param config the {@link WifiConfiguration} object to be filled in.
-     */
-    private void readNetworkVariables(WifiConfiguration config) {
-
-        int netId = config.networkId;
-        if (netId < 0)
-            return;
-
-        /*
-         * TODO: maybe should have a native method that takes an array of
-         * variable names and returns an array of values. But we'd still
-         * be doing a round trip to the supplicant daemon for each variable.
-         */
-        String value;
-
-        value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.ssidVarName);
-        if (!TextUtils.isEmpty(value)) {
-            if (value.charAt(0) != '"') {
-                config.SSID = "\"" + WifiSsid.createFromHex(value).toString() + "\"";
-                //TODO: convert a hex string that is not UTF-8 decodable to a P-formatted
-                //supplicant string
-            } else {
-                config.SSID = value;
-            }
-        } else {
-            config.SSID = null;
-        }
-
-        value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.bssidVarName);
-        if (!TextUtils.isEmpty(value)) {
-            config.BSSID = value;
-        } else {
-            config.BSSID = null;
-        }
-
-        value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.priorityVarName);
-        config.priority = -1;
-        if (!TextUtils.isEmpty(value)) {
-            try {
-                config.priority = Integer.parseInt(value);
-            } catch (NumberFormatException ignore) {
-            }
-        }
-
-        value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.hiddenSSIDVarName);
-        config.hiddenSSID = false;
-        if (!TextUtils.isEmpty(value)) {
-            try {
-                config.hiddenSSID = Integer.parseInt(value) != 0;
-            } catch (NumberFormatException ignore) {
-            }
-        }
-
-        value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.wepTxKeyIdxVarName);
-        config.wepTxKeyIndex = -1;
-        if (!TextUtils.isEmpty(value)) {
-            try {
-                config.wepTxKeyIndex = Integer.parseInt(value);
-            } catch (NumberFormatException ignore) {
-            }
-        }
-
-        for (int i = 0; i < 4; i++) {
-            value = mWifiNative.getNetworkVariable(netId,
-                    WifiConfiguration.wepKeyVarNames[i]);
-            if (!TextUtils.isEmpty(value)) {
-                config.wepKeys[i] = value;
-            } else {
-                config.wepKeys[i] = null;
-            }
-        }
-
-        value = mWifiNative.getNetworkVariable(netId, WifiConfiguration.pskVarName);
-        if (!TextUtils.isEmpty(value)) {
-            config.preSharedKey = value;
-        } else {
-            config.preSharedKey = null;
-        }
-
-        value = mWifiNative.getNetworkVariable(config.networkId,
-                WifiConfiguration.Protocol.varName);
-        if (!TextUtils.isEmpty(value)) {
-            String vals[] = value.split(" ");
-            for (String val : vals) {
-                int index =
-                    lookupString(val, WifiConfiguration.Protocol.strings);
-                if (0 <= index) {
-                    config.allowedProtocols.set(index);
-                }
-            }
-        }
-
-        value = mWifiNative.getNetworkVariable(config.networkId,
-                WifiConfiguration.KeyMgmt.varName);
-        if (!TextUtils.isEmpty(value)) {
-            String vals[] = value.split(" ");
-            for (String val : vals) {
-                int index =
-                    lookupString(val, WifiConfiguration.KeyMgmt.strings);
-                if (0 <= index) {
-                    config.allowedKeyManagement.set(index);
-                }
-            }
-        }
-
-        value = mWifiNative.getNetworkVariable(config.networkId,
-                WifiConfiguration.AuthAlgorithm.varName);
-        if (!TextUtils.isEmpty(value)) {
-            String vals[] = value.split(" ");
-            for (String val : vals) {
-                int index =
-                    lookupString(val, WifiConfiguration.AuthAlgorithm.strings);
-                if (0 <= index) {
-                    config.allowedAuthAlgorithms.set(index);
-                }
-            }
-        }
-
-        value = mWifiNative.getNetworkVariable(config.networkId,
-                WifiConfiguration.PairwiseCipher.varName);
-        if (!TextUtils.isEmpty(value)) {
-            String vals[] = value.split(" ");
-            for (String val : vals) {
-                int index =
-                    lookupString(val, WifiConfiguration.PairwiseCipher.strings);
-                if (0 <= index) {
-                    config.allowedPairwiseCiphers.set(index);
-                }
-            }
-        }
-
-        value = mWifiNative.getNetworkVariable(config.networkId,
-                WifiConfiguration.GroupCipher.varName);
-        if (!TextUtils.isEmpty(value)) {
-            String vals[] = value.split(" ");
-            for (String val : vals) {
-                int index =
-                    lookupString(val, WifiConfiguration.GroupCipher.strings);
-                if (0 <= index) {
-                    config.allowedGroupCiphers.set(index);
-                }
-            }
-        }
-
-        if (config.enterpriseConfig == null) {
-            config.enterpriseConfig = new WifiEnterpriseConfig();
-        }
-        HashMap<String, String> enterpriseFields = config.enterpriseConfig.getFields();
-        for (String key : WifiEnterpriseConfig.getSupplicantKeys()) {
-            value = mWifiNative.getNetworkVariable(netId, key);
-            if (!TextUtils.isEmpty(value)) {
-                enterpriseFields.put(key, removeDoubleQuotes(value));
-            } else {
-                enterpriseFields.put(key, WifiEnterpriseConfig.EMPTY_VALUE);
-            }
-        }
-
-        if (config.enterpriseConfig.migrateOldEapTlsNative(mWifiNative, netId)) {
-            saveConfig();
-        }
-
-        config.enterpriseConfig.migrateCerts(mKeyStore);
-        config.enterpriseConfig.initializeSoftwareKeystoreFlag(mKeyStore);
-    }
-
-    private String removeDoubleQuotes(String string) {
-        int length = string.length();
-        if ((length > 1) && (string.charAt(0) == '"')
-                && (string.charAt(length - 1) == '"')) {
-            return string.substring(1, length - 1);
-        }
-        return string;
-    }
-
-    private String convertToQuotedString(String string) {
-        return "\"" + string + "\"";
-    }
-
-    private String makeString(BitSet set, String[] strings) {
-        StringBuffer buf = new StringBuffer();
-        int nextSetBit = -1;
-
-        /* Make sure all set bits are in [0, strings.length) to avoid
-         * going out of bounds on strings.  (Shouldn't happen, but...) */
-        set = set.get(0, strings.length);
-
-        while ((nextSetBit = set.nextSetBit(nextSetBit + 1)) != -1) {
-            buf.append(strings[nextSetBit].replace('_', '-')).append(' ');
-        }
-
-        // remove trailing space
-        if (set.cardinality() > 0) {
-            buf.setLength(buf.length() - 1);
-        }
-
-        return buf.toString();
-    }
-
-    private int lookupString(String string, String[] strings) {
-        int size = strings.length;
-
-        string = string.replace('-', '_');
-
-        for (int i = 0; i < size; i++)
-            if (string.equals(strings[i]))
-                return i;
-
-        // if we ever get here, we should probably add the
-        // value to WifiConfiguration to reflect that it's
-        // supported by the WPA supplicant
-        loge("Failed to look-up a string: " + string);
-
-        return -1;
-    }
-
-    /* Returns a unique for a given configuration */
-    private static int configKey(WifiConfiguration config) {
-        String key;
-
-        if (config.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
-            key = config.SSID + KeyMgmt.strings[KeyMgmt.WPA_PSK];
-        } else if (config.allowedKeyManagement.get(KeyMgmt.WPA_EAP) ||
-                config.allowedKeyManagement.get(KeyMgmt.IEEE8021X)) {
-            key = config.SSID + KeyMgmt.strings[KeyMgmt.WPA_EAP];
-        } else if (config.wepKeys[0] != null) {
-            key = config.SSID + "WEP";
-        } else {
-            key = config.SSID + KeyMgmt.strings[KeyMgmt.NONE];
-        }
-
-        return key.hashCode();
-    }
-
-    void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println("WifiConfigStore");
-        pw.println("mLastPriority " + mLastPriority);
-        pw.println("Configured networks");
-        for (WifiConfiguration conf : getConfiguredNetworks()) {
-            pw.println(conf);
-        }
-        pw.println();
-
-        if (mLocalLog != null) {
-            pw.println("WifiConfigStore - Log Begin ----");
-            mLocalLog.dump(fd, pw, args);
-            pw.println("WifiConfigStore - Log End ----");
-        }
-    }
-
-    public String getConfigFile() {
-        return ipConfigFile;
-    }
-
-    private void loge(String s) {
-        Log.e(TAG, s);
-    }
-
-    private void log(String s) {
-        Log.d(TAG, s);
-    }
-
-    private void localLog(String s) {
-        if (mLocalLog != null) {
-            mLocalLog.log(s);
-        }
-    }
-
-    private void localLog(String s, int netId) {
-        if (mLocalLog == null) {
-            return;
-        }
-
-        WifiConfiguration config;
-        synchronized(mConfiguredNetworks) {
-            config = mConfiguredNetworks.get(netId);
-        }
-
-        if (config != null) {
-            mLocalLog.log(s + " " + config.getPrintableSsid());
-        } else {
-            mLocalLog.log(s + " " + netId);
-        }
-    }
-
-}
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 87afa88..6562462 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -499,7 +499,7 @@
      * @throws IllegalStateException if config is invalid for key id generation
      * @hide
      */
-    String getKeyIdForCredentials(WifiConfiguration current) {
+    public String getKeyIdForCredentials(WifiConfiguration current) {
         String keyMgmt = null;
 
         try {
diff --git a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
index c7ebecb..69be2cf2 100644
--- a/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
+++ b/wifi/java/android/net/wifi/WifiEnterpriseConfig.java
@@ -17,19 +17,13 @@
 
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.os.Process;
 import android.security.Credentials;
-import android.security.KeyChain;
-import android.security.KeyStore;
 import android.text.TextUtils;
-import android.util.Slog;
 
 import java.io.ByteArrayInputStream;
-import java.io.IOException;
 import java.security.KeyFactory;
 import java.security.NoSuchAlgorithmException;
 import java.security.PrivateKey;
-import java.security.cert.Certificate;
 import java.security.cert.CertificateEncodingException;
 import java.security.cert.CertificateException;
 import java.security.cert.CertificateFactory;
@@ -39,67 +33,71 @@
 import java.util.HashMap;
 import java.util.Map;
 
-/** 
+/**
  * Enterprise configuration details for Wi-Fi. Stores details about the EAP method
  * and any associated credentials.
  */
 public class WifiEnterpriseConfig implements Parcelable {
-    private static final String TAG = "WifiEnterpriseConfig";
-    private static final boolean DBG = false;
-    /**
-     * In old configurations, the "private_key" field was used. However, newer
-     * configurations use the key_id field with the engine_id set to "keystore".
-     * If this field is found in the configuration, the migration code is
-     * triggered.
-     */
-    private static final String OLD_PRIVATE_KEY_NAME = "private_key";
 
+    /** @hide */
+    public static final String EMPTY_VALUE         = "NULL";
+    /** @hide */
+    public static final String EAP_KEY             = "eap";
+    /** @hide */
+    public static final String PHASE2_KEY          = "phase2";
+    /** @hide */
+    public static final String IDENTITY_KEY        = "identity";
+    /** @hide */
+    public static final String ANON_IDENTITY_KEY   = "anonymous_identity";
+    /** @hide */
+    public static final String PASSWORD_KEY        = "password";
+    /** @hide */
+    public static final String SUBJECT_MATCH_KEY   = "subject_match";
+    /** @hide */
+    public static final String OPP_KEY_CACHING     = "proactive_key_caching";
     /**
      * String representing the keystore OpenSSL ENGINE's ID.
+     * @hide
      */
-    private static final String ENGINE_ID_KEYSTORE = "keystore";
+    public static final String ENGINE_ID_KEYSTORE = "keystore";
 
     /**
      * String representing the keystore URI used for wpa_supplicant.
+     * @hide
      */
-    private static final String KEYSTORE_URI = "keystore://";
+    public static final String KEYSTORE_URI = "keystore://";
 
     /**
      * String to set the engine value to when it should be enabled.
+     * @hide
      */
-    private static final String ENGINE_ENABLE = "1";
+    public static final String ENGINE_ENABLE = "1";
 
     /**
      * String to set the engine value to when it should be disabled.
+     * @hide
      */
-    private static final String ENGINE_DISABLE = "0";
+    public static final String ENGINE_DISABLE = "0";
 
-    private static final String CA_CERT_PREFIX = KEYSTORE_URI + Credentials.CA_CERTIFICATE;
-    private static final String CLIENT_CERT_PREFIX = KEYSTORE_URI + Credentials.USER_CERTIFICATE;
-
-    private static final String EAP_KEY             = "eap";
-    private static final String PHASE2_KEY          = "phase2";
-    private static final String IDENTITY_KEY        = "identity";
-    private static final String ANON_IDENTITY_KEY   = "anonymous_identity";
-    private static final String PASSWORD_KEY        = "password";
-    private static final String CLIENT_CERT_KEY     = "client_cert";
-    private static final String CA_CERT_KEY         = "ca_cert";
-    private static final String SUBJECT_MATCH_KEY   = "subject_match";
-    private static final String ENGINE_KEY          = "engine";
-    private static final String ENGINE_ID_KEY       = "engine_id";
-    private static final String PRIVATE_KEY_ID_KEY  = "key_id";
-    private static final String OPP_KEY_CACHING     = "proactive_key_caching";
+    /** @hide */
+    public static final String CA_CERT_PREFIX = KEYSTORE_URI + Credentials.CA_CERTIFICATE;
+    /** @hide */
+    public static final String CLIENT_CERT_PREFIX = KEYSTORE_URI + Credentials.USER_CERTIFICATE;
+    /** @hide */
+    public static final String CLIENT_CERT_KEY     = "client_cert";
+    /** @hide */
+    public static final String CA_CERT_KEY         = "ca_cert";
+    /** @hide */
+    public static final String ENGINE_KEY          = "engine";
+    /** @hide */
+    public static final String ENGINE_ID_KEY       = "engine_id";
+    /** @hide */
+    public static final String PRIVATE_KEY_ID_KEY  = "key_id";
 
     private HashMap<String, String> mFields = new HashMap<String, String>();
     private X509Certificate mCaCert;
     private PrivateKey mClientPrivateKey;
     private X509Certificate mClientCertificate;
-    private boolean mNeedsSoftwareKeystore = false;
-
-    /** This represents an empty value of an enterprise field.
-     * NULL is used at wpa_supplicant to indicate an empty value
-     */
-    static final String EMPTY_VALUE = "NULL";
 
     public WifiEnterpriseConfig() {
         // Do not set defaults so that the enterprise fields that are not changed
@@ -246,24 +244,20 @@
         public static final int GTC         = 4;
         private static final String PREFIX = "auth=";
         /** @hide */
-        public static final String[] strings = {EMPTY_VALUE, "PAP", "MSCHAP", "MSCHAPV2", "GTC" };
+        public static final String[] strings = {EMPTY_VALUE, "PAP", "MSCHAP",
+                "MSCHAPV2", "GTC" };
 
         /** Prevent initialization */
         private Phase2() {}
     }
 
-    /** Internal use only */
-    HashMap<String, String> getFields() {
+    /** Internal use only
+     * @hide
+     */
+    public HashMap<String, String> getFields() {
         return mFields;
     }
 
-    /** Internal use only */
-    static String[] getSupplicantKeys() {
-        return new String[] { EAP_KEY, PHASE2_KEY, IDENTITY_KEY, ANON_IDENTITY_KEY, PASSWORD_KEY,
-                CLIENT_CERT_KEY, CA_CERT_KEY, SUBJECT_MATCH_KEY, ENGINE_KEY, ENGINE_ID_KEY,
-                PRIVATE_KEY_ID_KEY };
-    }
-
     /**
      * Set the EAP authentication method.
      * @param  eapMethod is one {@link Eap#PEAP}, {@link Eap#TLS}, {@link Eap#TTLS} or
@@ -431,7 +425,6 @@
 
     /**
      * Get CA certificate
-     *
      * @return X.509 CA certificate
      */
     public X509Certificate getCaCertificate() {
@@ -439,7 +432,13 @@
     }
 
     /**
-     * Set Client certificate alias.
+     * @hide
+     */
+    public void resetCaCertificate() {
+        mCaCert = null;
+    }
+
+    /** Set Client certificate alias.
      *
      * <p> See the {@link android.security.KeyChain} for details on installing or choosing
      * a certificate
@@ -507,116 +506,19 @@
         return mClientCertificate;
     }
 
-    boolean needsKeyStore() {
-        // Has no keys to be installed
-        if (mClientCertificate == null && mCaCert == null) return false;
-        return true;
+    /**
+     * @hide
+     */
+    public void resetClientKeyEntry() {
+        mClientPrivateKey = null;
+        mClientCertificate = null;
     }
 
-    static boolean isHardwareBackedKey(PrivateKey key) {
-        return KeyChain.isBoundKeyAlgorithm(key.getAlgorithm());
-    }
-
-    static boolean hasHardwareBackedKey(Certificate certificate) {
-        return KeyChain.isBoundKeyAlgorithm(certificate.getPublicKey().getAlgorithm());
-    }
-
-    boolean needsSoftwareBackedKeyStore() {
-        return mNeedsSoftwareKeystore;
-    }
-
-    boolean installKeys(android.security.KeyStore keyStore, String name) {
-        boolean ret = true;
-        String privKeyName = Credentials.USER_PRIVATE_KEY + name;
-        String userCertName = Credentials.USER_CERTIFICATE + name;
-        String caCertName = Credentials.CA_CERTIFICATE + name;
-        if (mClientCertificate != null) {
-            byte[] privKeyData = mClientPrivateKey.getEncoded();
-            if (isHardwareBackedKey(mClientPrivateKey)) {
-                // Hardware backed key store is secure enough to store keys un-encrypted, this
-                // removes the need for user to punch a PIN to get access to these keys
-                if (DBG) Slog.d(TAG, "importing keys " + name + " in hardware backed " +
-                        "store");
-                ret = keyStore.importKey(privKeyName, privKeyData, Process.WIFI_UID,
-                                KeyStore.FLAG_NONE);
-            } else {
-                // Software backed key store is NOT secure enough to store keys un-encrypted.
-                // Save keys encrypted so they are protected with user's PIN. User will
-                // have to unlock phone before being able to use these keys and connect to
-                // networks.
-                if (DBG) Slog.d(TAG, "importing keys " + name + " in software backed store");
-                ret = keyStore.importKey(privKeyName, privKeyData, Process.WIFI_UID,
-                        KeyStore.FLAG_ENCRYPTED);
-                mNeedsSoftwareKeystore = true;
-            }
-            if (ret == false) {
-                return ret;
-            }
-
-            ret = putCertInKeyStore(keyStore, userCertName, mClientCertificate);
-            if (ret == false) {
-                // Remove private key installed
-                keyStore.delKey(privKeyName, Process.WIFI_UID);
-                return ret;
-            }
-        }
-
-        if (mCaCert != null) {
-            ret = putCertInKeyStore(keyStore, caCertName, mCaCert);
-            if (ret == false) {
-                if (mClientCertificate != null) {
-                    // Remove client key+cert
-                    keyStore.delKey(privKeyName, Process.WIFI_UID);
-                    keyStore.delete(userCertName, Process.WIFI_UID);
-                }
-                return ret;
-            }
-        }
-
-        // Set alias names
-        if (mClientCertificate != null) {
-            setClientCertificateAlias(name);
-            mClientPrivateKey = null;
-            mClientCertificate = null;
-        }
-
-        if (mCaCert != null) {
-            setCaCertificateAlias(name);
-            mCaCert = null;
-        }
-
-        return ret;
-    }
-
-    private boolean putCertInKeyStore(android.security.KeyStore keyStore, String name,
-            Certificate cert) {
-        try {
-            byte[] certData = Credentials.convertToPem(cert);
-            if (DBG) Slog.d(TAG, "putting certificate " + name + " in keystore");
-            return keyStore.put(name, certData, Process.WIFI_UID, KeyStore.FLAG_NONE);
-
-        } catch (IOException e1) {
-            return false;
-        } catch (CertificateException e2) {
-            return false;
-        }
-    }
-
-    void removeKeys(KeyStore keyStore) {
-        String client = getFieldValue(CLIENT_CERT_KEY, CLIENT_CERT_PREFIX);
-        // a valid client certificate is configured
-        if (!TextUtils.isEmpty(client)) {
-            if (DBG) Slog.d(TAG, "removing client private key and user cert");
-            keyStore.delKey(Credentials.USER_PRIVATE_KEY + client, Process.WIFI_UID);
-            keyStore.delete(Credentials.USER_CERTIFICATE + client, Process.WIFI_UID);
-        }
-
-        String ca = getFieldValue(CA_CERT_KEY, CA_CERT_PREFIX);
-        // a valid ca certificate is configured
-        if (!TextUtils.isEmpty(ca)) {
-            if (DBG) Slog.d(TAG, "removing CA cert");
-            keyStore.delete(Credentials.CA_CERTIFICATE + ca, Process.WIFI_UID);
-        }
+    /**
+     * @hide
+     */
+    public PrivateKey getClientPrivateKey() {
+        return mClientPrivateKey;
     }
 
     /**
@@ -651,129 +553,6 @@
         return eap + "_" + phase2;
     }
 
-    /** Migrates the old style TLS config to the new config style. This should only be used
-     * when restoring an old wpa_supplicant.conf or upgrading from a previous
-     * platform version.
-     * @return true if the config was updated
-     * @hide
-     */
-    boolean migrateOldEapTlsNative(WifiNative wifiNative, int netId) {
-        String oldPrivateKey = wifiNative.getNetworkVariable(netId, OLD_PRIVATE_KEY_NAME);
-        /*
-         * If the old configuration value is not present, then there is nothing
-         * to do.
-         */
-        if (TextUtils.isEmpty(oldPrivateKey)) {
-            return false;
-        } else {
-            // Also ignore it if it's empty quotes.
-            oldPrivateKey = removeDoubleQuotes(oldPrivateKey);
-            if (TextUtils.isEmpty(oldPrivateKey)) {
-                return false;
-            }
-        }
-
-        mFields.put(ENGINE_KEY, ENGINE_ENABLE);
-        mFields.put(ENGINE_ID_KEY, convertToQuotedString(ENGINE_ID_KEYSTORE));
-
-        /*
-        * The old key started with the keystore:// URI prefix, but we don't
-        * need that anymore. Trim it off if it exists.
-        */
-        final String keyName;
-        if (oldPrivateKey.startsWith(KEYSTORE_URI)) {
-            keyName = new String(oldPrivateKey.substring(KEYSTORE_URI.length()));
-        } else {
-            keyName = oldPrivateKey;
-        }
-        mFields.put(PRIVATE_KEY_ID_KEY, convertToQuotedString(keyName));
-
-        wifiNative.setNetworkVariable(netId, ENGINE_KEY, mFields.get(ENGINE_KEY));
-        wifiNative.setNetworkVariable(netId, ENGINE_ID_KEY, mFields.get(ENGINE_ID_KEY));
-        wifiNative.setNetworkVariable(netId, PRIVATE_KEY_ID_KEY, mFields.get(PRIVATE_KEY_ID_KEY));
-        // Remove old private_key string so we don't run this again.
-        wifiNative.setNetworkVariable(netId, OLD_PRIVATE_KEY_NAME, EMPTY_VALUE);
-        return true;
-    }
-
-    /** Migrate certs from global pool to wifi UID if not already done */
-    void migrateCerts(android.security.KeyStore keyStore) {
-        String client = getFieldValue(CLIENT_CERT_KEY, CLIENT_CERT_PREFIX);
-        // a valid client certificate is configured
-        if (!TextUtils.isEmpty(client)) {
-            if (!keyStore.contains(Credentials.USER_PRIVATE_KEY + client, Process.WIFI_UID)) {
-                keyStore.duplicate(Credentials.USER_PRIVATE_KEY + client, -1,
-                        Credentials.USER_PRIVATE_KEY + client, Process.WIFI_UID);
-                keyStore.duplicate(Credentials.USER_CERTIFICATE + client, -1,
-                        Credentials.USER_CERTIFICATE + client, Process.WIFI_UID);
-            }
-        }
-
-        String ca = getFieldValue(CA_CERT_KEY, CA_CERT_PREFIX);
-        // a valid ca certificate is configured
-        if (!TextUtils.isEmpty(ca)) {
-            if (!keyStore.contains(Credentials.CA_CERTIFICATE + ca, Process.WIFI_UID)) {
-                keyStore.duplicate(Credentials.CA_CERTIFICATE + ca, -1,
-                        Credentials.CA_CERTIFICATE + ca, Process.WIFI_UID);
-            }
-        }
-    }
-
-    void initializeSoftwareKeystoreFlag(android.security.KeyStore keyStore) {
-        String client = getFieldValue(CLIENT_CERT_KEY, CLIENT_CERT_PREFIX);
-        if (!TextUtils.isEmpty(client)) {
-            // a valid client certificate is configured
-
-            // BUGBUG: keyStore.get() never returns certBytes; because it is not
-            // taking WIFI_UID as a parameter. It always looks for certificate
-            // with SYSTEM_UID, and never finds any Wifi certificates. Assuming that
-            // all certificates need software keystore until we get the get() API
-            // fixed.
-
-            mNeedsSoftwareKeystore = true;
-
-            /*
-            try {
-
-                if (DBG) Slog.d(TAG, "Loading client certificate " + Credentials
-                        .USER_CERTIFICATE + client);
-
-                CertificateFactory factory = CertificateFactory.getInstance("X.509");
-                if (factory == null) {
-                    Slog.e(TAG, "Error getting certificate factory");
-                    return;
-                }
-
-                byte[] certBytes = keyStore.get(Credentials.USER_CERTIFICATE + client);
-                if (certBytes != null) {
-                    Certificate cert = (X509Certificate) factory.generateCertificate(
-                            new ByteArrayInputStream(certBytes));
-
-                    if (cert != null) {
-                        mNeedsSoftwareKeystore = hasHardwareBackedKey(cert);
-
-                        if (DBG) Slog.d(TAG, "Loaded client certificate " + Credentials
-                                .USER_CERTIFICATE + client);
-                        if (DBG) Slog.d(TAG, "It " + (mNeedsSoftwareKeystore ? "needs" :
-                                "does not need" ) + " software key store");
-                    } else {
-                        Slog.d(TAG, "could not generate certificate");
-                    }
-                } else {
-                    Slog.e(TAG, "Could not load client certificate " + Credentials
-                            .USER_CERTIFICATE + client);
-                    mNeedsSoftwareKeystore = true;
-                }
-
-            } catch(CertificateException e) {
-                Slog.e(TAG, "Could not read certificates");
-                mCaCert = null;
-                mClientCertificate = null;
-            }
-            */
-        }
-    }
-
     private String removeDoubleQuotes(String string) {
         if (TextUtils.isEmpty(string)) return "";
         int length = string.length();
@@ -806,8 +585,9 @@
      * @param key into the hash
      * @param prefix is the prefix that the value may have
      * @return value
+     * @hide
      */
-    private String getFieldValue(String key, String prefix) {
+    public String getFieldValue(String key, String prefix) {
         String value = mFields.get(key);
         // Uninitialized or known to be empty after reading from supplicant
         if (TextUtils.isEmpty(value) || EMPTY_VALUE.equals(value)) return "";
@@ -824,8 +604,9 @@
      * @param key into the hash
      * @param value to be set
      * @param prefix an optional value to be prefixed to actual value
+     * @hide
      */
-    private void setFieldValue(String key, String value, String prefix) {
+    public void setFieldValue(String key, String value, String prefix) {
         if (TextUtils.isEmpty(value)) {
             mFields.put(key, EMPTY_VALUE);
         } else {
@@ -833,6 +614,21 @@
         }
     }
 
+
+    /** Set a value with an optional prefix at key
+     * @param key into the hash
+     * @param value to be set
+     * @param prefix an optional value to be prefixed to actual value
+     * @hide
+     */
+    public void setFieldValue(String key, String value) {
+        if (TextUtils.isEmpty(value)) {
+           mFields.put(key, EMPTY_VALUE);
+        } else {
+            mFields.put(key, convertToQuotedString(value));
+        }
+    }
+
     @Override
     public String toString() {
         StringBuffer sb = new StringBuffer();
diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java
index 5d130c6..f44cb0a 100644
--- a/wifi/java/android/net/wifi/WifiInfo.java
+++ b/wifi/java/android/net/wifi/WifiInfo.java
@@ -62,7 +62,6 @@
     private String mBSSID;
     private WifiSsid mWifiSsid;
     private int mNetworkId;
-    private boolean mHiddenSSID;
     /** Received Signal Strength Indicator */
     private int mRssi;
 
@@ -70,6 +69,10 @@
     public static final String LINK_SPEED_UNITS = "Mbps";
     private int mLinkSpeed;
 
+    /** Frequency in MHz */
+    public static final String FREQUENCY_UNITS = "MHz";
+    private int mFrequency;
+
     private InetAddress mIpAddress;
     private String mMacAddress;
 
@@ -79,14 +82,15 @@
      */
     private boolean mMeteredHint;
 
-    WifiInfo() {
+    /** @hide */
+    public WifiInfo() {
         mWifiSsid = null;
         mBSSID = null;
         mNetworkId = -1;
         mSupplicantState = SupplicantState.UNINITIALIZED;
         mRssi = -9999;
         mLinkSpeed = -1;
-        mHiddenSSID = false;
+        mFrequency = -1;
     }
 
     /**
@@ -99,19 +103,18 @@
             mBSSID = source.mBSSID;
             mWifiSsid = source.mWifiSsid;
             mNetworkId = source.mNetworkId;
-            mHiddenSSID = source.mHiddenSSID;
             mRssi = source.mRssi;
             mLinkSpeed = source.mLinkSpeed;
+            mFrequency = source.mFrequency;
             mIpAddress = source.mIpAddress;
             mMacAddress = source.mMacAddress;
             mMeteredHint = source.mMeteredHint;
         }
     }
 
-    void setSSID(WifiSsid wifiSsid) {
+    /** @hide */
+    public void setSSID(WifiSsid wifiSsid) {
         mWifiSsid = wifiSsid;
-        // network is considered not hidden by default
-        mHiddenSSID = false;
     }
 
     /**
@@ -138,7 +141,8 @@
         return mWifiSsid;
     }
 
-    void setBSSID(String BSSID) {
+    /** @hide */
+    public void setBSSID(String BSSID) {
         mBSSID = BSSID;
     }
 
@@ -153,15 +157,15 @@
 
     /**
      * Returns the received signal strength indicator of the current 802.11
-     * network.
-     * <p><strong>This is not normalized, but should be!</strong></p>
-     * @return the RSSI, in the range ??? to ???
+     * network, in dBm.
+     * @return the RSSI, in the range -110 to 10
      */
     public int getRssi() {
         return mRssi;
     }
 
-    void setRssi(int rssi) {
+    /** @hide */
+    public void setRssi(int rssi) {
         mRssi = rssi;
     }
 
@@ -174,15 +178,31 @@
         return mLinkSpeed;
     }
 
-    void setLinkSpeed(int linkSpeed) {
+    /** @hide */
+    public void setLinkSpeed(int linkSpeed) {
         this.mLinkSpeed = linkSpeed;
     }
 
     /**
+     * Returns the current frequency in {@link #FREQUENCY_UNITS}.
+     * @return the frequency.
+     * @see #FREQUENCY_UNITS
+     */
+    public int getFrequency() {
+        return mFrequency;
+    }
+
+    /** @hide */
+    public void setFrequency(int frequency) {
+        this.mFrequency = frequency;
+    }
+
+    /**
      * Record the MAC address of the WLAN interface
      * @param macAddress the MAC address in {@code XX:XX:XX:XX:XX:XX} form
+     * @hide
      */
-    void setMacAddress(String macAddress) {
+    public void setMacAddress(String macAddress) {
         this.mMacAddress = macAddress;
     }
 
@@ -200,7 +220,8 @@
         return mMeteredHint;
     }
 
-    void setNetworkId(int id) {
+    /** @hide */
+    public void setNetworkId(int id) {
         mNetworkId = id;
     }
 
@@ -223,11 +244,13 @@
         return mSupplicantState;
     }
 
-    void setSupplicantState(SupplicantState state) {
+    /** @hide */
+    public void setSupplicantState(SupplicantState state) {
         mSupplicantState = state;
     }
 
-    void setInetAddress(InetAddress address) {
+    /** @hide */
+    public void setInetAddress(InetAddress address) {
         mIpAddress = address;
     }
 
@@ -244,12 +267,7 @@
      * SSID-specific probe request must be used for scans.
      */
     public boolean getHiddenSSID() {
-        return mHiddenSSID;
-    }
-
-    /** {@hide} */
-    public void setHiddenSSID(boolean hiddenSSID) {
-        mHiddenSSID = hiddenSSID;
+        return mWifiSsid.isHidden();
     }
 
    /**
@@ -304,7 +322,8 @@
             append(", Supplicant state: ").
             append(mSupplicantState == null ? none : mSupplicantState).
             append(", RSSI: ").append(mRssi).
-            append(", Link speed: ").append(mLinkSpeed).
+            append(", Link speed: ").append(mLinkSpeed).append(LINK_SPEED_UNITS).
+            append(", Frequency: ").append(mFrequency).append(FREQUENCY_UNITS).
             append(", Net ID: ").append(mNetworkId).
             append(", Metered hint: ").append(mMeteredHint);
 
@@ -321,6 +340,7 @@
         dest.writeInt(mNetworkId);
         dest.writeInt(mRssi);
         dest.writeInt(mLinkSpeed);
+        dest.writeInt(mFrequency);
         if (mIpAddress != null) {
             dest.writeByte((byte)1);
             dest.writeByteArray(mIpAddress.getAddress());
@@ -347,6 +367,7 @@
                 info.setNetworkId(in.readInt());
                 info.setRssi(in.readInt());
                 info.setLinkSpeed(in.readInt());
+                info.setFrequency(in.readInt());
                 if (in.readByte() == 1) {
                     try {
                         info.setInetAddress(InetAddress.getByAddress(in.createByteArray()));
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index 3b47e63..5af1e4e 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -20,6 +20,8 @@
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.Context;
 import android.net.DhcpInfo;
+import android.net.wifi.ScanSettings;
+import android.net.wifi.WifiChannel;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.Handler;
@@ -35,7 +37,6 @@
 import java.net.InetAddress;
 import java.util.concurrent.CountDownLatch;
 
-import com.android.internal.R;
 import com.android.internal.util.AsyncChannel;
 import com.android.internal.util.Protocol;
 
@@ -523,6 +524,9 @@
     /** @hide */
     public static final int DATA_ACTIVITY_INOUT        = 0x03;
 
+    /** @hide */
+    public static final boolean DEFAULT_POOR_NETWORK_AVOIDANCE_ENABLED = false;
+
     /* Maximum number of active locks we allow.
      * This limit was added to prevent apps from creating a ridiculous number
      * of locks and crashing the system by overflowing the global ref table.
@@ -761,6 +765,22 @@
     }
 
     /**
+     * Get a list of available channels for customized scan.
+     *
+     * @see {@link WifiChannel}
+     *
+     * @return the channel list, or null if not available
+     * @hide
+     */
+    public List<WifiChannel> getChannelList() {
+        try {
+            return mService.getChannelList();
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /**
      * Request a scan for access points. Returns immediately. The availability
      * of the results is made known later by means of an asynchronous event sent
      * on completion of the scan.
@@ -768,8 +788,7 @@
      */
     public boolean startScan() {
         try {
-            final WorkSource workSource = null;
-            mService.startScan(workSource);
+            mService.startScan(null, null);
             return true;
         } catch (RemoteException e) {
             return false;
@@ -779,7 +798,42 @@
     /** @hide */
     public boolean startScan(WorkSource workSource) {
         try {
-            mService.startScan(workSource);
+            mService.startScan(null, workSource);
+            return true;
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+
+    /**
+     * Request a scan for access points in specified channel list. Each channel is specified by its
+     * frequency in MHz, e.g. "5500" (do NOT include "DFS" even though it is). The availability of
+     * the results is made known later in the same way as {@link #startScan}.
+     *
+     * Note:
+     *
+     * 1. Customized scan is for non-connection purposes, i.e. it won't trigger a wifi connection
+     *    even though it finds some known networks.
+     *
+     * 2. Customized scan result may include access points that is not specified in the channel
+     *    list. An app will need to do frequency filtering if it wants to get pure results for the
+     *    channel list it specified.
+     *
+     * @hide
+     */
+    public boolean startCustomizedScan(ScanSettings requested) {
+        try {
+            mService.startScan(requested, null);
+            return true;
+        } catch (RemoteException e) {
+            return false;
+        }
+    }
+
+    /** @hide */
+    public boolean startCustomizedScan(ScanSettings requested, WorkSource workSource) {
+        try {
+            mService.startScan(requested, workSource);
             return true;
         } catch (RemoteException e) {
             return false;
@@ -876,6 +930,21 @@
     }
 
     /**
+     * Creates a configuration token describing the network referenced by {@code netId}
+     * of MIME type application/vnd.wfa.wsc. Can be used to configure WiFi networks via NFC.
+     *
+     * @return hex-string encoded configuration token
+     * @hide
+     */
+    public String getWpsNfcConfigurationToken(int netId) {
+        try {
+            return mService.getWpsNfcConfigurationToken(netId);
+        } catch (RemoteException e) {
+            return null;
+        }
+    }
+
+    /**
      * Return dynamic information about the current Wi-Fi connection, if any is active.
      * @return the Wi-Fi information, contained in {@link WifiInfo}.
      */
@@ -2163,13 +2232,6 @@
         }
     }
 
-    /** @hide */
-    public void captivePortalCheckComplete() {
-        try {
-            mService.captivePortalCheckComplete();
-        } catch (RemoteException e) {}
-    }
-
     protected void finalize() throws Throwable {
         try {
             synchronized (sThreadRefLock) {
diff --git a/wifi/java/android/net/wifi/WifiMonitor.java b/wifi/java/android/net/wifi/WifiMonitor.java
deleted file mode 100644
index 6817777..0000000
--- a/wifi/java/android/net/wifi/WifiMonitor.java
+++ /dev/null
@@ -1,951 +0,0 @@
-/*
- * Copyright (C) 2008 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 android.net.wifi;
-
-import android.net.NetworkInfo;
-import android.net.wifi.p2p.WifiP2pConfig;
-import android.net.wifi.p2p.WifiP2pDevice;
-import android.net.wifi.p2p.WifiP2pGroup;
-import android.net.wifi.p2p.WifiP2pService;
-import android.net.wifi.p2p.WifiP2pService.P2pStatus;
-import android.net.wifi.p2p.WifiP2pProvDiscEvent;
-import android.net.wifi.p2p.nsd.WifiP2pServiceResponse;
-import android.net.wifi.StateChangeResult;
-import android.os.Message;
-import android.util.Log;
-
-
-import com.android.internal.util.Protocol;
-import com.android.internal.util.StateMachine;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-/**
- * Listens for events from the wpa_supplicant server, and passes them on
- * to the {@link StateMachine} for handling. Runs in its own thread.
- *
- * @hide
- */
-public class WifiMonitor {
-
-    private static final boolean DBG = false;
-    private static final String TAG = "WifiMonitor";
-
-    /** Events we receive from the supplicant daemon */
-
-    private static final int CONNECTED    = 1;
-    private static final int DISCONNECTED = 2;
-    private static final int STATE_CHANGE = 3;
-    private static final int SCAN_RESULTS = 4;
-    private static final int LINK_SPEED   = 5;
-    private static final int TERMINATING  = 6;
-    private static final int DRIVER_STATE = 7;
-    private static final int EAP_FAILURE  = 8;
-    private static final int ASSOC_REJECT = 9;
-    private static final int UNKNOWN      = 10;
-
-    /** All events coming from the supplicant start with this prefix */
-    private static final String EVENT_PREFIX_STR = "CTRL-EVENT-";
-    private static final int EVENT_PREFIX_LEN_STR = EVENT_PREFIX_STR.length();
-
-    /** All WPA events coming from the supplicant start with this prefix */
-    private static final String WPA_EVENT_PREFIX_STR = "WPA:";
-    private static final String PASSWORD_MAY_BE_INCORRECT_STR =
-       "pre-shared key may be incorrect";
-
-    /* WPS events */
-    private static final String WPS_SUCCESS_STR = "WPS-SUCCESS";
-
-    /* Format: WPS-FAIL msg=%d [config_error=%d] [reason=%d (%s)] */
-    private static final String WPS_FAIL_STR    = "WPS-FAIL";
-    private static final String WPS_FAIL_PATTERN =
-            "WPS-FAIL msg=\\d+(?: config_error=(\\d+))?(?: reason=(\\d+))?";
-
-    /* config error code values for config_error=%d */
-    private static final int CONFIG_MULTIPLE_PBC_DETECTED = 12;
-    private static final int CONFIG_AUTH_FAILURE = 18;
-
-    /* reason code values for reason=%d */
-    private static final int REASON_TKIP_ONLY_PROHIBITED = 1;
-    private static final int REASON_WEP_PROHIBITED = 2;
-
-    private static final String WPS_OVERLAP_STR = "WPS-OVERLAP-DETECTED";
-    private static final String WPS_TIMEOUT_STR = "WPS-TIMEOUT";
-
-    /**
-     * Names of events from wpa_supplicant (minus the prefix). In the
-     * format descriptions, * &quot;<code>x</code>&quot;
-     * designates a dynamic value that needs to be parsed out from the event
-     * string
-     */
-    /**
-     * <pre>
-     * CTRL-EVENT-CONNECTED - Connection to xx:xx:xx:xx:xx:xx completed
-     * </pre>
-     * <code>xx:xx:xx:xx:xx:xx</code> is the BSSID of the associated access point
-     */
-    private static final String CONNECTED_STR =    "CONNECTED";
-    /**
-     * <pre>
-     * CTRL-EVENT-DISCONNECTED - Disconnect event - remove keys
-     * </pre>
-     */
-    private static final String DISCONNECTED_STR = "DISCONNECTED";
-    /**
-     * <pre>
-     * CTRL-EVENT-STATE-CHANGE x
-     * </pre>
-     * <code>x</code> is the numerical value of the new state.
-     */
-    private static final String STATE_CHANGE_STR =  "STATE-CHANGE";
-    /**
-     * <pre>
-     * CTRL-EVENT-SCAN-RESULTS ready
-     * </pre>
-     */
-    private static final String SCAN_RESULTS_STR =  "SCAN-RESULTS";
-
-    /**
-     * <pre>
-     * CTRL-EVENT-LINK-SPEED x Mb/s
-     * </pre>
-     * {@code x} is the link speed in Mb/sec.
-     */
-    private static final String LINK_SPEED_STR = "LINK-SPEED";
-    /**
-     * <pre>
-     * CTRL-EVENT-TERMINATING - signal x
-     * </pre>
-     * <code>x</code> is the signal that caused termination.
-     */
-    private static final String TERMINATING_STR =  "TERMINATING";
-    /**
-     * <pre>
-     * CTRL-EVENT-DRIVER-STATE state
-     * </pre>
-     * <code>state</code> can be HANGED
-     */
-    private static final String DRIVER_STATE_STR = "DRIVER-STATE";
-    /**
-     * <pre>
-     * CTRL-EVENT-EAP-FAILURE EAP authentication failed
-     * </pre>
-     */
-    private static final String EAP_FAILURE_STR = "EAP-FAILURE";
-
-    /**
-     * This indicates an authentication failure on EAP FAILURE event
-     */
-    private static final String EAP_AUTH_FAILURE_STR = "EAP authentication failed";
-
-    /**
-     * This indicates an assoc reject event
-     */
-    private static final String ASSOC_REJECT_STR = "ASSOC-REJECT";
-
-    /**
-     * Regex pattern for extracting an Ethernet-style MAC address from a string.
-     * Matches a strings like the following:<pre>
-     * CTRL-EVENT-CONNECTED - Connection to 00:1e:58:ec:d5:6d completed (reauth) [id=1 id_str=]</pre>
-     */
-    private static Pattern mConnectedEventPattern =
-        Pattern.compile("((?:[0-9a-f]{2}:){5}[0-9a-f]{2}) .* \\[id=([0-9]+) ");
-
-    /** P2P events */
-    private static final String P2P_EVENT_PREFIX_STR = "P2P";
-
-    /* P2P-DEVICE-FOUND fa:7b:7a:42:02:13 p2p_dev_addr=fa:7b:7a:42:02:13 pri_dev_type=1-0050F204-1
-       name='p2p-TEST1' config_methods=0x188 dev_capab=0x27 group_capab=0x0 */
-    private static final String P2P_DEVICE_FOUND_STR = "P2P-DEVICE-FOUND";
-
-    /* P2P-DEVICE-LOST p2p_dev_addr=42:fc:89:e1:e2:27 */
-    private static final String P2P_DEVICE_LOST_STR = "P2P-DEVICE-LOST";
-
-    /* P2P-FIND-STOPPED */
-    private static final String P2P_FIND_STOPPED_STR = "P2P-FIND-STOPPED";
-
-    /* P2P-GO-NEG-REQUEST 42:fc:89:a8:96:09 dev_passwd_id=4 */
-    private static final String P2P_GO_NEG_REQUEST_STR = "P2P-GO-NEG-REQUEST";
-
-    private static final String P2P_GO_NEG_SUCCESS_STR = "P2P-GO-NEG-SUCCESS";
-
-    /* P2P-GO-NEG-FAILURE status=x */
-    private static final String P2P_GO_NEG_FAILURE_STR = "P2P-GO-NEG-FAILURE";
-
-    private static final String P2P_GROUP_FORMATION_SUCCESS_STR =
-            "P2P-GROUP-FORMATION-SUCCESS";
-
-    private static final String P2P_GROUP_FORMATION_FAILURE_STR =
-            "P2P-GROUP-FORMATION-FAILURE";
-
-    /* P2P-GROUP-STARTED p2p-wlan0-0 [client|GO] ssid="DIRECT-W8" freq=2437
-       [psk=2182b2e50e53f260d04f3c7b25ef33c965a3291b9b36b455a82d77fd82ca15bc|passphrase="fKG4jMe3"]
-       go_dev_addr=fa:7b:7a:42:02:13 [PERSISTENT] */
-    private static final String P2P_GROUP_STARTED_STR = "P2P-GROUP-STARTED";
-
-    /* P2P-GROUP-REMOVED p2p-wlan0-0 [client|GO] reason=REQUESTED */
-    private static final String P2P_GROUP_REMOVED_STR = "P2P-GROUP-REMOVED";
-
-    /* P2P-INVITATION-RECEIVED sa=fa:7b:7a:42:02:13 go_dev_addr=f8:7b:7a:42:02:13
-        bssid=fa:7b:7a:42:82:13 unknown-network */
-    private static final String P2P_INVITATION_RECEIVED_STR = "P2P-INVITATION-RECEIVED";
-
-    /* P2P-INVITATION-RESULT status=1 */
-    private static final String P2P_INVITATION_RESULT_STR = "P2P-INVITATION-RESULT";
-
-    /* P2P-PROV-DISC-PBC-REQ 42:fc:89:e1:e2:27 p2p_dev_addr=42:fc:89:e1:e2:27
-       pri_dev_type=1-0050F204-1 name='p2p-TEST2' config_methods=0x188 dev_capab=0x27
-       group_capab=0x0 */
-    private static final String P2P_PROV_DISC_PBC_REQ_STR = "P2P-PROV-DISC-PBC-REQ";
-
-    /* P2P-PROV-DISC-PBC-RESP 02:12:47:f2:5a:36 */
-    private static final String P2P_PROV_DISC_PBC_RSP_STR = "P2P-PROV-DISC-PBC-RESP";
-
-    /* P2P-PROV-DISC-ENTER-PIN 42:fc:89:e1:e2:27 p2p_dev_addr=42:fc:89:e1:e2:27
-       pri_dev_type=1-0050F204-1 name='p2p-TEST2' config_methods=0x188 dev_capab=0x27
-       group_capab=0x0 */
-    private static final String P2P_PROV_DISC_ENTER_PIN_STR = "P2P-PROV-DISC-ENTER-PIN";
-    /* P2P-PROV-DISC-SHOW-PIN 42:fc:89:e1:e2:27 44490607 p2p_dev_addr=42:fc:89:e1:e2:27
-       pri_dev_type=1-0050F204-1 name='p2p-TEST2' config_methods=0x188 dev_capab=0x27
-       group_capab=0x0 */
-    private static final String P2P_PROV_DISC_SHOW_PIN_STR = "P2P-PROV-DISC-SHOW-PIN";
-    /* P2P-PROV-DISC-FAILURE p2p_dev_addr=42:fc:89:e1:e2:27 */
-    private static final String P2P_PROV_DISC_FAILURE_STR = "P2P-PROV-DISC-FAILURE";
-
-    /*
-     * Protocol format is as follows.<br>
-     * See the Table.62 in the WiFi Direct specification for the detail.
-     * ______________________________________________________________
-     * |           Length(2byte)     | Type(1byte) | TransId(1byte)}|
-     * ______________________________________________________________
-     * | status(1byte)  |            vendor specific(variable)      |
-     *
-     * P2P-SERV-DISC-RESP 42:fc:89:e1:e2:27 1 0300000101
-     * length=3, service type=0(ALL Service), transaction id=1,
-     * status=1(service protocol type not available)<br>
-     *
-     * P2P-SERV-DISC-RESP 42:fc:89:e1:e2:27 1 0300020201
-     * length=3, service type=2(UPnP), transaction id=2,
-     * status=1(service protocol type not available)
-     *
-     * P2P-SERV-DISC-RESP 42:fc:89:e1:e2:27 1 990002030010757569643a3131323
-     * 2646534652d383537342d353961622d393332322d3333333435363738393034343a3
-     * a75726e3a736368656d61732d75706e702d6f72673a736572766963653a436f6e746
-     * 56e744469726563746f72793a322c757569643a36383539646564652d383537342d3
-     * 53961622d393333322d3132333435363738393031323a3a75706e703a726f6f74646
-     * 576696365
-     * length=153,type=2(UPnP),transaction id=3,status=0
-     *
-     * UPnP Protocol format is as follows.
-     * ______________________________________________________
-     * |  Version (1)  |          USN (Variable)            |
-     *
-     * version=0x10(UPnP1.0) data=usn:uuid:1122de4e-8574-59ab-9322-33345678
-     * 9044::urn:schemas-upnp-org:service:ContentDirectory:2,usn:uuid:6859d
-     * ede-8574-59ab-9332-123456789012::upnp:rootdevice
-     *
-     * P2P-SERV-DISC-RESP 58:17:0c:bc:dd:ca 21 1900010200045f6970
-     * 70c00c000c01094d795072696e746572c027
-     * length=25, type=1(Bonjour),transaction id=2,status=0
-     *
-     * Bonjour Protocol format is as follows.
-     * __________________________________________________________
-     * |DNS Name(Variable)|DNS Type(1)|Version(1)|RDATA(Variable)|
-     *
-     * DNS Name=_ipp._tcp.local.,DNS type=12(PTR), Version=1,
-     * RDATA=MyPrinter._ipp._tcp.local.
-     *
-     */
-    private static final String P2P_SERV_DISC_RESP_STR = "P2P-SERV-DISC-RESP";
-
-    private static final String HOST_AP_EVENT_PREFIX_STR = "AP";
-    /* AP-STA-CONNECTED 42:fc:89:a8:96:09 dev_addr=02:90:4c:a0:92:54 */
-    private static final String AP_STA_CONNECTED_STR = "AP-STA-CONNECTED";
-    /* AP-STA-DISCONNECTED 42:fc:89:a8:96:09 */
-    private static final String AP_STA_DISCONNECTED_STR = "AP-STA-DISCONNECTED";
-
-    /* Supplicant events reported to a state machine */
-    private static final int BASE = Protocol.BASE_WIFI_MONITOR;
-
-    /* Connection to supplicant established */
-    public static final int SUP_CONNECTION_EVENT                 = BASE + 1;
-    /* Connection to supplicant lost */
-    public static final int SUP_DISCONNECTION_EVENT              = BASE + 2;
-   /* Network connection completed */
-    public static final int NETWORK_CONNECTION_EVENT             = BASE + 3;
-    /* Network disconnection completed */
-    public static final int NETWORK_DISCONNECTION_EVENT          = BASE + 4;
-    /* Scan results are available */
-    public static final int SCAN_RESULTS_EVENT                   = BASE + 5;
-    /* Supplicate state changed */
-    public static final int SUPPLICANT_STATE_CHANGE_EVENT        = BASE + 6;
-    /* Password failure and EAP authentication failure */
-    public static final int AUTHENTICATION_FAILURE_EVENT         = BASE + 7;
-    /* WPS success detected */
-    public static final int WPS_SUCCESS_EVENT                    = BASE + 8;
-    /* WPS failure detected */
-    public static final int WPS_FAIL_EVENT                       = BASE + 9;
-     /* WPS overlap detected */
-    public static final int WPS_OVERLAP_EVENT                    = BASE + 10;
-     /* WPS timeout detected */
-    public static final int WPS_TIMEOUT_EVENT                    = BASE + 11;
-    /* Driver was hung */
-    public static final int DRIVER_HUNG_EVENT                    = BASE + 12;
-
-    /* P2P events */
-    public static final int P2P_DEVICE_FOUND_EVENT               = BASE + 21;
-    public static final int P2P_DEVICE_LOST_EVENT                = BASE + 22;
-    public static final int P2P_GO_NEGOTIATION_REQUEST_EVENT     = BASE + 23;
-    public static final int P2P_GO_NEGOTIATION_SUCCESS_EVENT     = BASE + 25;
-    public static final int P2P_GO_NEGOTIATION_FAILURE_EVENT     = BASE + 26;
-    public static final int P2P_GROUP_FORMATION_SUCCESS_EVENT    = BASE + 27;
-    public static final int P2P_GROUP_FORMATION_FAILURE_EVENT    = BASE + 28;
-    public static final int P2P_GROUP_STARTED_EVENT              = BASE + 29;
-    public static final int P2P_GROUP_REMOVED_EVENT              = BASE + 30;
-    public static final int P2P_INVITATION_RECEIVED_EVENT        = BASE + 31;
-    public static final int P2P_INVITATION_RESULT_EVENT          = BASE + 32;
-    public static final int P2P_PROV_DISC_PBC_REQ_EVENT          = BASE + 33;
-    public static final int P2P_PROV_DISC_PBC_RSP_EVENT          = BASE + 34;
-    public static final int P2P_PROV_DISC_ENTER_PIN_EVENT        = BASE + 35;
-    public static final int P2P_PROV_DISC_SHOW_PIN_EVENT         = BASE + 36;
-    public static final int P2P_FIND_STOPPED_EVENT               = BASE + 37;
-    public static final int P2P_SERV_DISC_RESP_EVENT             = BASE + 38;
-    public static final int P2P_PROV_DISC_FAILURE_EVENT          = BASE + 39;
-
-    /* hostap events */
-    public static final int AP_STA_DISCONNECTED_EVENT            = BASE + 41;
-    public static final int AP_STA_CONNECTED_EVENT               = BASE + 42;
-
-    /* Indicates assoc reject event */
-    public static final int ASSOCIATION_REJECTION_EVENT          = BASE + 43;
-    /**
-     * This indicates the supplicant connection for the monitor is closed
-     */
-    private static final String MONITOR_SOCKET_CLOSED_STR = "connection closed";
-
-    /**
-     * This indicates a read error on the monitor socket conenction
-     */
-    private static final String WPA_RECV_ERROR_STR = "recv error";
-
-    /**
-     * Max errors before we close supplicant connection
-     */
-    private static final int MAX_RECV_ERRORS    = 10;
-
-    private final String mInterfaceName;
-    private final WifiNative mWifiNative;
-    private final StateMachine mWifiStateMachine;
-    private boolean mMonitoring;
-
-    public WifiMonitor(StateMachine wifiStateMachine, WifiNative wifiNative) {
-        if (DBG) Log.d(TAG, "Creating WifiMonitor");
-        mWifiNative = wifiNative;
-        mInterfaceName = wifiNative.mInterfaceName;
-        mWifiStateMachine = wifiStateMachine;
-        mMonitoring = false;
-
-        WifiMonitorSingleton.getMonitor().registerInterfaceMonitor(mInterfaceName, this);
-    }
-
-    public void startMonitoring() {
-        WifiMonitorSingleton.getMonitor().startMonitoring(mInterfaceName);
-    }
-
-    public void stopMonitoring() {
-        WifiMonitorSingleton.getMonitor().stopMonitoring(mInterfaceName);
-    }
-
-    public void stopSupplicant() {
-        WifiMonitorSingleton.getMonitor().stopSupplicant();
-    }
-
-    public void killSupplicant(boolean p2pSupported) {
-        WifiMonitorSingleton.getMonitor().killSupplicant(p2pSupported);
-    }
-
-    private static class WifiMonitorSingleton {
-        private static Object sSingletonLock = new Object();
-        private static WifiMonitorSingleton sWifiMonitorSingleton = null;
-        private HashMap<String, WifiMonitor> mIfaceMap = new HashMap<String, WifiMonitor>();
-        private boolean mConnected = false;
-        private WifiNative mWifiNative;
-
-        private WifiMonitorSingleton() {
-        }
-
-        static WifiMonitorSingleton getMonitor() {
-            if (DBG) Log.d(TAG, "WifiMonitorSingleton gotten");
-            synchronized (sSingletonLock) {
-                if (sWifiMonitorSingleton == null) {
-                    if (DBG) Log.d(TAG, "WifiMonitorSingleton created");
-                    sWifiMonitorSingleton = new WifiMonitorSingleton();
-                }
-            }
-            return sWifiMonitorSingleton;
-        }
-
-        public synchronized void startMonitoring(String iface) {
-            WifiMonitor m = mIfaceMap.get(iface);
-            if (m == null) {
-                Log.e(TAG, "startMonitor called with unknown iface=" + iface);
-                return;
-            }
-
-            Log.d(TAG, "startMonitoring(" + iface + ") with mConnected = " + mConnected);
-
-            if (mConnected) {
-                m.mMonitoring = true;
-                m.mWifiStateMachine.sendMessage(SUP_CONNECTION_EVENT);
-            } else {
-                if (DBG) Log.d(TAG, "connecting to supplicant");
-                int connectTries = 0;
-                while (true) {
-                    if (mWifiNative.connectToSupplicant()) {
-                        m.mMonitoring = true;
-                        m.mWifiStateMachine.sendMessage(SUP_CONNECTION_EVENT);
-                        new MonitorThread(mWifiNative, this).start();
-                        mConnected = true;
-                        break;
-                    }
-                    if (connectTries++ < 5) {
-                        try {
-                            Thread.sleep(1000);
-                        } catch (InterruptedException ignore) {
-                        }
-                    } else {
-                        mIfaceMap.remove(iface);
-                        m.mWifiStateMachine.sendMessage(SUP_DISCONNECTION_EVENT);
-                        Log.e(TAG, "startMonitoring(" + iface + ") failed!");
-                        break;
-                    }
-                }
-            }
-        }
-
-        public synchronized void stopMonitoring(String iface) {
-            WifiMonitor m = mIfaceMap.get(iface);
-            if (DBG) Log.d(TAG, "stopMonitoring(" + iface + ") = " + m.mWifiStateMachine);
-            m.mMonitoring = false;
-            m.mWifiStateMachine.sendMessage(SUP_DISCONNECTION_EVENT);
-        }
-
-        public synchronized void registerInterfaceMonitor(String iface, WifiMonitor m) {
-            if (DBG) Log.d(TAG, "registerInterface(" + iface + "+" + m.mWifiStateMachine + ")");
-            mIfaceMap.put(iface, m);
-            if (mWifiNative == null) {
-                mWifiNative = m.mWifiNative;
-            }
-        }
-
-        public synchronized void unregisterInterfaceMonitor(String iface) {
-            // REVIEW: When should we call this? If this isn't called, then WifiMonitor
-            // objects will remain in the mIfaceMap; and won't ever get deleted
-
-            WifiMonitor m = mIfaceMap.remove(iface);
-            if (DBG) Log.d(TAG, "unregisterInterface(" + iface + "+" + m.mWifiStateMachine + ")");
-        }
-
-        public synchronized void stopSupplicant() {
-            mWifiNative.stopSupplicant();
-        }
-
-        public synchronized void killSupplicant(boolean p2pSupported) {
-            mWifiNative.killSupplicant(p2pSupported);
-            mConnected = false;
-            Iterator<Map.Entry<String, WifiMonitor>> it = mIfaceMap.entrySet().iterator();
-            while (it.hasNext()) {
-                Map.Entry<String, WifiMonitor> e = it.next();
-                WifiMonitor m = e.getValue();
-                m.mMonitoring = false;
-            }
-        }
-
-        private synchronized WifiMonitor getMonitor(String iface) {
-            return mIfaceMap.get(iface);
-        }
-    }
-
-    private static class MonitorThread extends Thread {
-        private final WifiNative mWifiNative;
-        private final WifiMonitorSingleton mWifiMonitorSingleton;
-        private int mRecvErrors = 0;
-        private StateMachine mStateMachine = null;
-
-        public MonitorThread(WifiNative wifiNative, WifiMonitorSingleton wifiMonitorSingleton) {
-            super("WifiMonitor");
-            mWifiNative = wifiNative;
-            mWifiMonitorSingleton = wifiMonitorSingleton;
-        }
-
-        public void run() {
-            //noinspection InfiniteLoopStatement
-            for (;;) {
-                String eventStr = mWifiNative.waitForEvent();
-
-                // Skip logging the common but mostly uninteresting scan-results event
-                if (DBG && eventStr.indexOf(SCAN_RESULTS_STR) == -1) {
-                    Log.d(TAG, "Event [" + eventStr + "]");
-                }
-
-                String iface = "p2p0";
-                WifiMonitor m = null;
-                mStateMachine = null;
-
-                if (eventStr.startsWith("IFNAME=")) {
-                    int space = eventStr.indexOf(' ');
-                    if (space != -1) {
-                        iface = eventStr.substring(7,space);
-                        m = mWifiMonitorSingleton.getMonitor(iface);
-                        if (m == null && iface.startsWith("p2p-")) {
-                            // p2p interfaces are created dynamically, but we have
-                            // only one P2p state machine monitoring all of them; look
-                            // for it explicitly, and send messages there ..
-                            m = mWifiMonitorSingleton.getMonitor("p2p0");
-                        }
-                        eventStr = eventStr.substring(space + 1);
-                    }
-                } else {
-                    // events without prefix belong to p2p0 monitor
-                    m = mWifiMonitorSingleton.getMonitor("p2p0");
-                }
-
-                if (m != null) {
-                    if (m.mMonitoring) {
-                        mStateMachine = m.mWifiStateMachine;
-                    } else {
-                        if (DBG) Log.d(TAG, "Dropping event because monitor (" + iface +
-                                            ") is stopped");
-                        continue;
-                    }
-                }
-
-                if (mStateMachine != null) {
-                    if (dispatchEvent(eventStr)) {
-                        break;
-                    }
-                } else {
-                    if (DBG) Log.d(TAG, "Sending to all monitors because there's no interface id");
-                    boolean done = false;
-                    Iterator<Map.Entry<String, WifiMonitor>> it =
-                            mWifiMonitorSingleton.mIfaceMap.entrySet().iterator();
-                    while (it.hasNext()) {
-                        Map.Entry<String, WifiMonitor> e = it.next();
-                        m = e.getValue();
-                        mStateMachine = m.mWifiStateMachine;
-                        if (dispatchEvent(eventStr)) {
-                            done = true;
-                        }
-                    }
-
-                    if (done) {
-                        // After this thread terminates, we'll no longer
-                        // be connected to the supplicant
-                        if (DBG) Log.d(TAG, "Disconnecting from the supplicant, no more events");
-                        mWifiMonitorSingleton.mConnected = false;
-                        break;
-                    }
-                }
-            }
-        }
-
-        /* @return true if the event was supplicant disconnection */
-        private boolean dispatchEvent(String eventStr) {
-
-            if (!eventStr.startsWith(EVENT_PREFIX_STR)) {
-                if (eventStr.startsWith(WPA_EVENT_PREFIX_STR) &&
-                        0 < eventStr.indexOf(PASSWORD_MAY_BE_INCORRECT_STR)) {
-                    mStateMachine.sendMessage(AUTHENTICATION_FAILURE_EVENT);
-                } else if (eventStr.startsWith(WPS_SUCCESS_STR)) {
-                    mStateMachine.sendMessage(WPS_SUCCESS_EVENT);
-                } else if (eventStr.startsWith(WPS_FAIL_STR)) {
-                    handleWpsFailEvent(eventStr);
-                } else if (eventStr.startsWith(WPS_OVERLAP_STR)) {
-                    mStateMachine.sendMessage(WPS_OVERLAP_EVENT);
-                } else if (eventStr.startsWith(WPS_TIMEOUT_STR)) {
-                    mStateMachine.sendMessage(WPS_TIMEOUT_EVENT);
-                } else if (eventStr.startsWith(P2P_EVENT_PREFIX_STR)) {
-                    handleP2pEvents(eventStr);
-                } else if (eventStr.startsWith(HOST_AP_EVENT_PREFIX_STR)) {
-                    handleHostApEvents(eventStr);
-                }
-                else {
-                    if (DBG) Log.w(TAG, "couldn't identify event type - " + eventStr);
-                }
-                return false;
-            }
-
-            String eventName = eventStr.substring(EVENT_PREFIX_LEN_STR);
-            int nameEnd = eventName.indexOf(' ');
-            if (nameEnd != -1)
-                eventName = eventName.substring(0, nameEnd);
-            if (eventName.length() == 0) {
-                if (DBG) Log.i(TAG, "Received wpa_supplicant event with empty event name");
-                return false;
-            }
-            /*
-             * Map event name into event enum
-             */
-            int event;
-            if (eventName.equals(CONNECTED_STR))
-                event = CONNECTED;
-            else if (eventName.equals(DISCONNECTED_STR))
-                event = DISCONNECTED;
-            else if (eventName.equals(STATE_CHANGE_STR))
-                event = STATE_CHANGE;
-            else if (eventName.equals(SCAN_RESULTS_STR))
-                event = SCAN_RESULTS;
-            else if (eventName.equals(LINK_SPEED_STR))
-                event = LINK_SPEED;
-            else if (eventName.equals(TERMINATING_STR))
-                event = TERMINATING;
-            else if (eventName.equals(DRIVER_STATE_STR))
-                event = DRIVER_STATE;
-            else if (eventName.equals(EAP_FAILURE_STR))
-                event = EAP_FAILURE;
-            else if (eventName.equals(ASSOC_REJECT_STR))
-                event = ASSOC_REJECT;
-            else
-                event = UNKNOWN;
-
-            String eventData = eventStr;
-            if (event == DRIVER_STATE || event == LINK_SPEED)
-                eventData = eventData.split(" ")[1];
-            else if (event == STATE_CHANGE || event == EAP_FAILURE) {
-                int ind = eventStr.indexOf(" ");
-                if (ind != -1) {
-                    eventData = eventStr.substring(ind + 1);
-                }
-            } else {
-                int ind = eventStr.indexOf(" - ");
-                if (ind != -1) {
-                    eventData = eventStr.substring(ind + 3);
-                }
-            }
-
-            if (event == STATE_CHANGE) {
-                handleSupplicantStateChange(eventData);
-            } else if (event == DRIVER_STATE) {
-                handleDriverEvent(eventData);
-            } else if (event == TERMINATING) {
-                /**
-                 * Close the supplicant connection if we see
-                 * too many recv errors
-                 */
-                if (eventData.startsWith(WPA_RECV_ERROR_STR)) {
-                    if (++mRecvErrors > MAX_RECV_ERRORS) {
-                        if (DBG) {
-                            Log.d(TAG, "too many recv errors, closing connection");
-                        }
-                    } else {
-                        return false;
-                    }
-                }
-
-                // notify and exit
-                mStateMachine.sendMessage(SUP_DISCONNECTION_EVENT);
-                return true;
-            } else if (event == EAP_FAILURE) {
-                if (eventData.startsWith(EAP_AUTH_FAILURE_STR)) {
-                    mStateMachine.sendMessage(AUTHENTICATION_FAILURE_EVENT);
-                }
-            } else if (event == ASSOC_REJECT) {
-                mStateMachine.sendMessage(ASSOCIATION_REJECTION_EVENT);
-            } else {
-                handleEvent(event, eventData);
-            }
-            mRecvErrors = 0;
-            return false;
-        }
-
-        private void handleDriverEvent(String state) {
-            if (state == null) {
-                return;
-            }
-            if (state.equals("HANGED")) {
-                mStateMachine.sendMessage(DRIVER_HUNG_EVENT);
-            }
-        }
-
-        /**
-         * Handle all supplicant events except STATE-CHANGE
-         * @param event the event type
-         * @param remainder the rest of the string following the
-         * event name and &quot;&#8195;&#8212;&#8195;&quot;
-         */
-        void handleEvent(int event, String remainder) {
-            switch (event) {
-                case DISCONNECTED:
-                    handleNetworkStateChange(NetworkInfo.DetailedState.DISCONNECTED, remainder);
-                    break;
-
-                case CONNECTED:
-                    handleNetworkStateChange(NetworkInfo.DetailedState.CONNECTED, remainder);
-                    break;
-
-                case SCAN_RESULTS:
-                    mStateMachine.sendMessage(SCAN_RESULTS_EVENT);
-                    break;
-
-                case UNKNOWN:
-                    break;
-            }
-        }
-
-        private void handleWpsFailEvent(String dataString) {
-            final Pattern p = Pattern.compile(WPS_FAIL_PATTERN);
-            Matcher match = p.matcher(dataString);
-            if (match.find()) {
-                String cfgErr = match.group(1);
-                String reason = match.group(2);
-
-                if (reason != null) {
-                    switch(Integer.parseInt(reason)) {
-                        case REASON_TKIP_ONLY_PROHIBITED:
-                            mStateMachine.sendMessage(mStateMachine.obtainMessage(WPS_FAIL_EVENT,
-                                    WifiManager.WPS_TKIP_ONLY_PROHIBITED, 0));
-                            return;
-                        case REASON_WEP_PROHIBITED:
-                            mStateMachine.sendMessage(mStateMachine.obtainMessage(WPS_FAIL_EVENT,
-                                    WifiManager.WPS_WEP_PROHIBITED, 0));
-                            return;
-                    }
-                }
-                if (cfgErr != null) {
-                    switch(Integer.parseInt(cfgErr)) {
-                        case CONFIG_AUTH_FAILURE:
-                            mStateMachine.sendMessage(mStateMachine.obtainMessage(WPS_FAIL_EVENT,
-                                    WifiManager.WPS_AUTH_FAILURE, 0));
-                            return;
-                        case CONFIG_MULTIPLE_PBC_DETECTED:
-                            mStateMachine.sendMessage(mStateMachine.obtainMessage(WPS_FAIL_EVENT,
-                                    WifiManager.WPS_OVERLAP_ERROR, 0));
-                            return;
-                    }
-                }
-            }
-            //For all other errors, return a generic internal error
-            mStateMachine.sendMessage(mStateMachine.obtainMessage(WPS_FAIL_EVENT,
-                    WifiManager.ERROR, 0));
-        }
-
-        /* <event> status=<err> and the special case of <event> reason=FREQ_CONFLICT */
-        private P2pStatus p2pError(String dataString) {
-            P2pStatus err = P2pStatus.UNKNOWN;
-            String[] tokens = dataString.split(" ");
-            if (tokens.length < 2) return err;
-            String[] nameValue = tokens[1].split("=");
-            if (nameValue.length != 2) return err;
-
-            /* Handle the special case of reason=FREQ+CONFLICT */
-            if (nameValue[1].equals("FREQ_CONFLICT")) {
-                return P2pStatus.NO_COMMON_CHANNEL;
-            }
-            try {
-                err = P2pStatus.valueOf(Integer.parseInt(nameValue[1]));
-            } catch (NumberFormatException e) {
-                e.printStackTrace();
-            }
-            return err;
-        }
-
-        /**
-         * Handle p2p events
-         */
-        private void handleP2pEvents(String dataString) {
-            if (dataString.startsWith(P2P_DEVICE_FOUND_STR)) {
-                mStateMachine.sendMessage(P2P_DEVICE_FOUND_EVENT, new WifiP2pDevice(dataString));
-            } else if (dataString.startsWith(P2P_DEVICE_LOST_STR)) {
-                mStateMachine.sendMessage(P2P_DEVICE_LOST_EVENT, new WifiP2pDevice(dataString));
-            } else if (dataString.startsWith(P2P_FIND_STOPPED_STR)) {
-                mStateMachine.sendMessage(P2P_FIND_STOPPED_EVENT);
-            } else if (dataString.startsWith(P2P_GO_NEG_REQUEST_STR)) {
-                mStateMachine.sendMessage(P2P_GO_NEGOTIATION_REQUEST_EVENT,
-                        new WifiP2pConfig(dataString));
-            } else if (dataString.startsWith(P2P_GO_NEG_SUCCESS_STR)) {
-                mStateMachine.sendMessage(P2P_GO_NEGOTIATION_SUCCESS_EVENT);
-            } else if (dataString.startsWith(P2P_GO_NEG_FAILURE_STR)) {
-                mStateMachine.sendMessage(P2P_GO_NEGOTIATION_FAILURE_EVENT, p2pError(dataString));
-            } else if (dataString.startsWith(P2P_GROUP_FORMATION_SUCCESS_STR)) {
-                mStateMachine.sendMessage(P2P_GROUP_FORMATION_SUCCESS_EVENT);
-            } else if (dataString.startsWith(P2P_GROUP_FORMATION_FAILURE_STR)) {
-                mStateMachine.sendMessage(P2P_GROUP_FORMATION_FAILURE_EVENT, p2pError(dataString));
-            } else if (dataString.startsWith(P2P_GROUP_STARTED_STR)) {
-                mStateMachine.sendMessage(P2P_GROUP_STARTED_EVENT, new WifiP2pGroup(dataString));
-            } else if (dataString.startsWith(P2P_GROUP_REMOVED_STR)) {
-                mStateMachine.sendMessage(P2P_GROUP_REMOVED_EVENT, new WifiP2pGroup(dataString));
-            } else if (dataString.startsWith(P2P_INVITATION_RECEIVED_STR)) {
-                mStateMachine.sendMessage(P2P_INVITATION_RECEIVED_EVENT,
-                        new WifiP2pGroup(dataString));
-            } else if (dataString.startsWith(P2P_INVITATION_RESULT_STR)) {
-                mStateMachine.sendMessage(P2P_INVITATION_RESULT_EVENT, p2pError(dataString));
-            } else if (dataString.startsWith(P2P_PROV_DISC_PBC_REQ_STR)) {
-                mStateMachine.sendMessage(P2P_PROV_DISC_PBC_REQ_EVENT,
-                        new WifiP2pProvDiscEvent(dataString));
-            } else if (dataString.startsWith(P2P_PROV_DISC_PBC_RSP_STR)) {
-                mStateMachine.sendMessage(P2P_PROV_DISC_PBC_RSP_EVENT,
-                        new WifiP2pProvDiscEvent(dataString));
-            } else if (dataString.startsWith(P2P_PROV_DISC_ENTER_PIN_STR)) {
-                mStateMachine.sendMessage(P2P_PROV_DISC_ENTER_PIN_EVENT,
-                        new WifiP2pProvDiscEvent(dataString));
-            } else if (dataString.startsWith(P2P_PROV_DISC_SHOW_PIN_STR)) {
-                mStateMachine.sendMessage(P2P_PROV_DISC_SHOW_PIN_EVENT,
-                        new WifiP2pProvDiscEvent(dataString));
-            } else if (dataString.startsWith(P2P_PROV_DISC_FAILURE_STR)) {
-                mStateMachine.sendMessage(P2P_PROV_DISC_FAILURE_EVENT);
-            } else if (dataString.startsWith(P2P_SERV_DISC_RESP_STR)) {
-                List<WifiP2pServiceResponse> list = WifiP2pServiceResponse.newInstance(dataString);
-                if (list != null) {
-                    mStateMachine.sendMessage(P2P_SERV_DISC_RESP_EVENT, list);
-                } else {
-                    Log.e(TAG, "Null service resp " + dataString);
-                }
-            }
-        }
-
-        /**
-         * Handle hostap events
-         */
-        private void handleHostApEvents(String dataString) {
-            String[] tokens = dataString.split(" ");
-            /* AP-STA-CONNECTED 42:fc:89:a8:96:09 p2p_dev_addr=02:90:4c:a0:92:54 */
-            if (tokens[0].equals(AP_STA_CONNECTED_STR)) {
-                mStateMachine.sendMessage(AP_STA_CONNECTED_EVENT, new WifiP2pDevice(dataString));
-            /* AP-STA-DISCONNECTED 42:fc:89:a8:96:09 p2p_dev_addr=02:90:4c:a0:92:54 */
-            } else if (tokens[0].equals(AP_STA_DISCONNECTED_STR)) {
-                mStateMachine.sendMessage(AP_STA_DISCONNECTED_EVENT, new WifiP2pDevice(dataString));
-            }
-        }
-
-        /**
-         * Handle the supplicant STATE-CHANGE event
-         * @param dataString New supplicant state string in the format:
-         * id=network-id state=new-state
-         */
-        private void handleSupplicantStateChange(String dataString) {
-            WifiSsid wifiSsid = null;
-            int index = dataString.lastIndexOf("SSID=");
-            if (index != -1) {
-                wifiSsid = WifiSsid.createFromAsciiEncoded(
-                        dataString.substring(index + 5));
-            }
-            String[] dataTokens = dataString.split(" ");
-
-            String BSSID = null;
-            int networkId = -1;
-            int newState  = -1;
-            for (String token : dataTokens) {
-                String[] nameValue = token.split("=");
-                if (nameValue.length != 2) {
-                    continue;
-                }
-
-                if (nameValue[0].equals("BSSID")) {
-                    BSSID = nameValue[1];
-                    continue;
-                }
-
-                int value;
-                try {
-                    value = Integer.parseInt(nameValue[1]);
-                } catch (NumberFormatException e) {
-                    continue;
-                }
-
-                if (nameValue[0].equals("id")) {
-                    networkId = value;
-                } else if (nameValue[0].equals("state")) {
-                    newState = value;
-                }
-            }
-
-            if (newState == -1) return;
-
-            SupplicantState newSupplicantState = SupplicantState.INVALID;
-            for (SupplicantState state : SupplicantState.values()) {
-                if (state.ordinal() == newState) {
-                    newSupplicantState = state;
-                    break;
-                }
-            }
-            if (newSupplicantState == SupplicantState.INVALID) {
-                Log.w(TAG, "Invalid supplicant state: " + newState);
-            }
-            notifySupplicantStateChange(networkId, wifiSsid, BSSID, newSupplicantState);
-        }
-
-        private void handleNetworkStateChange(NetworkInfo.DetailedState newState, String data) {
-            String BSSID = null;
-            int networkId = -1;
-            if (newState == NetworkInfo.DetailedState.CONNECTED) {
-                Matcher match = mConnectedEventPattern.matcher(data);
-                if (!match.find()) {
-                    if (DBG) Log.d(TAG, "Could not find BSSID in CONNECTED event string");
-                } else {
-                    BSSID = match.group(1);
-                    try {
-                        networkId = Integer.parseInt(match.group(2));
-                    } catch (NumberFormatException e) {
-                        networkId = -1;
-                    }
-                }
-                notifyNetworkStateChange(newState, BSSID, networkId);
-            }
-        }
-
-        /**
-         * Send the state machine a notification that the state of Wifi connectivity
-         * has changed.
-         * @param networkId the configured network on which the state change occurred
-         * @param newState the new network state
-         * @param BSSID when the new state is {@link DetailedState#CONNECTED
-         * NetworkInfo.DetailedState.CONNECTED},
-         * this is the MAC address of the access point. Otherwise, it
-         * is {@code null}.
-         */
-        void notifyNetworkStateChange(NetworkInfo.DetailedState newState, String BSSID, int netId) {
-            if (newState == NetworkInfo.DetailedState.CONNECTED) {
-                Message m = mStateMachine.obtainMessage(NETWORK_CONNECTION_EVENT,
-                        netId, 0, BSSID);
-                mStateMachine.sendMessage(m);
-            } else {
-                Message m = mStateMachine.obtainMessage(NETWORK_DISCONNECTION_EVENT,
-                        netId, 0, BSSID);
-                mStateMachine.sendMessage(m);
-            }
-        }
-
-        /**
-         * Send the state machine a notification that the state of the supplicant
-         * has changed.
-         * @param networkId the configured network on which the state change occurred
-         * @param wifiSsid network name
-         * @param BSSID network address
-         * @param newState the new {@code SupplicantState}
-         */
-        void notifySupplicantStateChange(int networkId, WifiSsid wifiSsid, String BSSID,
-                SupplicantState newState) {
-            mStateMachine.sendMessage(mStateMachine.obtainMessage(SUPPLICANT_STATE_CHANGE_EVENT,
-                    new StateChangeResult(networkId, wifiSsid, BSSID, newState)));
-        }
-    }
-}
diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java
deleted file mode 100644
index c2f278a..0000000
--- a/wifi/java/android/net/wifi/WifiNative.java
+++ /dev/null
@@ -1,970 +0,0 @@
-/*
- * Copyright (C) 2008 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 android.net.wifi;
-
-import android.net.wifi.p2p.WifiP2pConfig;
-import android.net.wifi.p2p.WifiP2pGroup;
-import android.text.TextUtils;
-import android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
-import android.util.LocalLog;
-import android.util.Log;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-
-/**
- * Native calls for bring up/shut down of the supplicant daemon and for
- * sending requests to the supplicant daemon
- *
- * waitForEvent() is called on the monitor thread for events. All other methods
- * must be serialized from the framework.
- *
- * {@hide}
- */
-public class WifiNative {
-
-    private static final boolean DBG = false;
-    private final String mTAG;
-    private static final int DEFAULT_GROUP_OWNER_INTENT     = 6;
-
-    static final int BLUETOOTH_COEXISTENCE_MODE_ENABLED     = 0;
-    static final int BLUETOOTH_COEXISTENCE_MODE_DISABLED    = 1;
-    static final int BLUETOOTH_COEXISTENCE_MODE_SENSE       = 2;
-
-    static final int SCAN_WITHOUT_CONNECTION_SETUP          = 1;
-    static final int SCAN_WITH_CONNECTION_SETUP             = 2;
-
-    // Hold this lock before calling supplicant - it is required to
-    // mutually exclude access from Wifi and P2p state machines
-    static final Object mLock = new Object();
-
-    public final String mInterfaceName;
-    public final String mInterfacePrefix;
-
-    private boolean mSuspendOptEnabled = false;
-
-    public native static boolean loadDriver();
-
-    public native static boolean isDriverLoaded();
-
-    public native static boolean unloadDriver();
-
-    public native static boolean startSupplicant(boolean p2pSupported);
-
-    /* Sends a kill signal to supplicant. To be used when we have lost connection
-       or when the supplicant is hung */
-    public native static boolean killSupplicant(boolean p2pSupported);
-
-    private native boolean connectToSupplicantNative();
-
-    private native void closeSupplicantConnectionNative();
-
-    /**
-     * Wait for the supplicant to send an event, returning the event string.
-     * @return the event string sent by the supplicant.
-     */
-    private native String waitForEventNative();
-
-    private native boolean doBooleanCommandNative(String command);
-
-    private native int doIntCommandNative(String command);
-
-    private native String doStringCommandNative(String command);
-
-    public WifiNative(String interfaceName) {
-        mInterfaceName = interfaceName;
-        mTAG = "WifiNative-" + interfaceName;
-        if (!interfaceName.equals("p2p0")) {
-            mInterfacePrefix = "IFNAME=" + interfaceName + " ";
-        } else {
-            // commands for p2p0 interface don't need prefix
-            mInterfacePrefix = "";
-        }
-    }
-
-    private static final LocalLog mLocalLog = new LocalLog(1024);
-
-    // hold mLock before accessing mCmdIdLock
-    private int mCmdId;
-
-    public LocalLog getLocalLog() {
-        return mLocalLog;
-    }
-
-    private int getNewCmdIdLocked() {
-        return mCmdId++;
-    }
-
-    private void localLog(String s) {
-        if (mLocalLog != null)
-            mLocalLog.log(mInterfaceName + ": " + s);
-    }
-
-    public boolean connectToSupplicant() {
-        // No synchronization necessary .. it is implemented in WifiMonitor
-        localLog(mInterfacePrefix + "connectToSupplicant");
-        return connectToSupplicantNative();
-    }
-
-    public void closeSupplicantConnection() {
-        localLog(mInterfacePrefix + "closeSupplicantConnection");
-        closeSupplicantConnectionNative();
-    }
-
-    public String waitForEvent() {
-        // No synchronization necessary .. it is implemented in WifiMonitor
-        return waitForEventNative();
-    }
-
-    private boolean doBooleanCommand(String command) {
-        if (DBG) Log.d(mTAG, "doBoolean: " + command);
-        synchronized (mLock) {
-            int cmdId = getNewCmdIdLocked();
-            localLog(cmdId + "->" + mInterfacePrefix + command);
-            boolean result = doBooleanCommandNative(mInterfacePrefix + command);
-            localLog(cmdId + "<-" + result);
-            if (DBG) Log.d(mTAG, "   returned " + result);
-            return result;
-        }
-    }
-
-    private int doIntCommand(String command) {
-        if (DBG) Log.d(mTAG, "doInt: " + command);
-        synchronized (mLock) {
-            int cmdId = getNewCmdIdLocked();
-            localLog(cmdId + "->" + mInterfacePrefix + command);
-            int result = doIntCommandNative(mInterfacePrefix + command);
-            localLog(cmdId + "<-" + result);
-            if (DBG) Log.d(mTAG, "   returned " + result);
-            return result;
-        }
-    }
-
-    private String doStringCommand(String command) {
-        if (DBG) Log.d(mTAG, "doString: " + command);
-        synchronized (mLock) {
-            int cmdId = getNewCmdIdLocked();
-            localLog(cmdId + "->" + mInterfacePrefix + command);
-            String result = doStringCommandNative(mInterfacePrefix + command);
-            localLog(cmdId + "<-" + result);
-            if (DBG) Log.d(mTAG, "   returned " + result);
-            return result;
-        }
-    }
-
-    private String doStringCommandWithoutLogging(String command) {
-        if (DBG) Log.d(mTAG, "doString: " + command);
-        synchronized (mLock) {
-            return doStringCommandNative(mInterfacePrefix + command);
-        }
-    }
-
-    public boolean ping() {
-        String pong = doStringCommand("PING");
-        return (pong != null && pong.equals("PONG"));
-    }
-
-    public boolean scan(int type) {
-        if (type == SCAN_WITHOUT_CONNECTION_SETUP) {
-            return doBooleanCommand("SCAN TYPE=ONLY");
-        } else if (type == SCAN_WITH_CONNECTION_SETUP) {
-            return doBooleanCommand("SCAN");
-        } else {
-            throw new IllegalArgumentException("Invalid scan type");
-        }
-    }
-
-    /* Does a graceful shutdown of supplicant. Is a common stop function for both p2p and sta.
-     *
-     * Note that underneath we use a harsh-sounding "terminate" supplicant command
-     * for a graceful stop and a mild-sounding "stop" interface
-     * to kill the process
-     */
-    public boolean stopSupplicant() {
-        return doBooleanCommand("TERMINATE");
-    }
-
-    public String listNetworks() {
-        return doStringCommand("LIST_NETWORKS");
-    }
-
-    public int addNetwork() {
-        return doIntCommand("ADD_NETWORK");
-    }
-
-    public boolean setNetworkVariable(int netId, String name, String value) {
-        if (TextUtils.isEmpty(name) || TextUtils.isEmpty(value)) return false;
-        return doBooleanCommand("SET_NETWORK " + netId + " " + name + " " + value);
-    }
-
-    public String getNetworkVariable(int netId, String name) {
-        if (TextUtils.isEmpty(name)) return null;
-
-        // GET_NETWORK will likely flood the logs ...
-        return doStringCommandWithoutLogging("GET_NETWORK " + netId + " " + name);
-    }
-
-    public boolean removeNetwork(int netId) {
-        return doBooleanCommand("REMOVE_NETWORK " + netId);
-    }
-
-    public boolean enableNetwork(int netId, boolean disableOthers) {
-        if (disableOthers) {
-            return doBooleanCommand("SELECT_NETWORK " + netId);
-        } else {
-            return doBooleanCommand("ENABLE_NETWORK " + netId);
-        }
-    }
-
-    public boolean disableNetwork(int netId) {
-        return doBooleanCommand("DISABLE_NETWORK " + netId);
-    }
-
-    public boolean reconnect() {
-        return doBooleanCommand("RECONNECT");
-    }
-
-    public boolean reassociate() {
-        return doBooleanCommand("REASSOCIATE");
-    }
-
-    public boolean disconnect() {
-        return doBooleanCommand("DISCONNECT");
-    }
-
-    public String status() {
-        return doStringCommand("STATUS");
-    }
-
-    public String getMacAddress() {
-        //Macaddr = XX.XX.XX.XX.XX.XX
-        String ret = doStringCommand("DRIVER MACADDR");
-        if (!TextUtils.isEmpty(ret)) {
-            String[] tokens = ret.split(" = ");
-            if (tokens.length == 2) return tokens[1];
-        }
-        return null;
-    }
-
-    /**
-     * Format of results:
-     * =================
-     * id=1
-     * bssid=68:7f:74:d7:1b:6e
-     * freq=2412
-     * level=-43
-     * tsf=1344621975160944
-     * age=2623
-     * flags=[WPA2-PSK-CCMP][WPS][ESS]
-     * ssid=zubyb
-     * ====
-     *
-     * RANGE=ALL gets all scan results
-     * RANGE=ID- gets results from ID
-     * MASK=<N> see wpa_supplicant/src/common/wpa_ctrl.h for details
-     */
-    public String scanResults(int sid) {
-        return doStringCommandWithoutLogging("BSS RANGE=" + sid + "- MASK=0x21987");
-    }
-
-    /**
-     * Format of command
-     * DRIVER WLS_BATCHING SET SCANFREQ=x MSCAN=r BESTN=y CHANNEL=<z, w, t> RTT=s
-     * where x is an ascii representation of an integer number of seconds between scans
-     *       r is an ascii representation of an integer number of scans per batch
-     *       y is an ascii representation of an integer number of the max AP to remember per scan
-     *       z, w, t represent a 1..n size list of channel numbers and/or 'A', 'B' values
-     *           indicating entire ranges of channels
-     *       s is an ascii representation of an integer number of highest-strength AP
-     *           for which we'd like approximate distance reported
-     *
-     * The return value is an ascii integer representing a guess of the number of scans
-     * the firmware can remember before it runs out of buffer space or -1 on error
-     */
-    public String setBatchedScanSettings(BatchedScanSettings settings) {
-        if (settings == null) {
-            return doStringCommand("DRIVER WLS_BATCHING STOP");
-        }
-        String cmd = "DRIVER WLS_BATCHING SET SCANFREQ=" + settings.scanIntervalSec;
-        cmd += " MSCAN=" + settings.maxScansPerBatch;
-        if (settings.maxApPerScan != BatchedScanSettings.UNSPECIFIED) {
-            cmd += " BESTN=" + settings.maxApPerScan;
-        }
-        if (settings.channelSet != null && !settings.channelSet.isEmpty()) {
-            cmd += " CHANNEL=<";
-            int i = 0;
-            for (String channel : settings.channelSet) {
-                cmd += (i > 0 ? "," : "") + channel;
-                ++i;
-            }
-            cmd += ">";
-        }
-        if (settings.maxApForDistance != BatchedScanSettings.UNSPECIFIED) {
-            cmd += " RTT=" + settings.maxApForDistance;
-        }
-        return doStringCommand(cmd);
-    }
-
-    public String getBatchedScanResults() {
-        return doStringCommand("DRIVER WLS_BATCHING GET");
-    }
-
-    public boolean startDriver() {
-        return doBooleanCommand("DRIVER START");
-    }
-
-    public boolean stopDriver() {
-        return doBooleanCommand("DRIVER STOP");
-    }
-
-
-    /**
-     * Start filtering out Multicast V4 packets
-     * @return {@code true} if the operation succeeded, {@code false} otherwise
-     *
-     * Multicast filtering rules work as follows:
-     *
-     * The driver can filter multicast (v4 and/or v6) and broadcast packets when in
-     * a power optimized mode (typically when screen goes off).
-     *
-     * In order to prevent the driver from filtering the multicast/broadcast packets, we have to
-     * add a DRIVER RXFILTER-ADD rule followed by DRIVER RXFILTER-START to make the rule effective
-     *
-     * DRIVER RXFILTER-ADD Num
-     *   where Num = 0 - Unicast, 1 - Broadcast, 2 - Mutil4 or 3 - Multi6
-     *
-     * and DRIVER RXFILTER-START
-     * In order to stop the usage of these rules, we do
-     *
-     * DRIVER RXFILTER-STOP
-     * DRIVER RXFILTER-REMOVE Num
-     *   where Num is as described for RXFILTER-ADD
-     *
-     * The  SETSUSPENDOPT driver command overrides the filtering rules
-     */
-    public boolean startFilteringMulticastV4Packets() {
-        return doBooleanCommand("DRIVER RXFILTER-STOP")
-            && doBooleanCommand("DRIVER RXFILTER-REMOVE 2")
-            && doBooleanCommand("DRIVER RXFILTER-START");
-    }
-
-    /**
-     * Stop filtering out Multicast V4 packets.
-     * @return {@code true} if the operation succeeded, {@code false} otherwise
-     */
-    public boolean stopFilteringMulticastV4Packets() {
-        return doBooleanCommand("DRIVER RXFILTER-STOP")
-            && doBooleanCommand("DRIVER RXFILTER-ADD 2")
-            && doBooleanCommand("DRIVER RXFILTER-START");
-    }
-
-    /**
-     * Start filtering out Multicast V6 packets
-     * @return {@code true} if the operation succeeded, {@code false} otherwise
-     */
-    public boolean startFilteringMulticastV6Packets() {
-        return doBooleanCommand("DRIVER RXFILTER-STOP")
-            && doBooleanCommand("DRIVER RXFILTER-REMOVE 3")
-            && doBooleanCommand("DRIVER RXFILTER-START");
-    }
-
-    /**
-     * Stop filtering out Multicast V6 packets.
-     * @return {@code true} if the operation succeeded, {@code false} otherwise
-     */
-    public boolean stopFilteringMulticastV6Packets() {
-        return doBooleanCommand("DRIVER RXFILTER-STOP")
-            && doBooleanCommand("DRIVER RXFILTER-ADD 3")
-            && doBooleanCommand("DRIVER RXFILTER-START");
-    }
-
-    public int getBand() {
-       String ret = doStringCommand("DRIVER GETBAND");
-        if (!TextUtils.isEmpty(ret)) {
-            //reply is "BAND X" where X is the band
-            String[] tokens = ret.split(" ");
-            try {
-                if (tokens.length == 2) return Integer.parseInt(tokens[1]);
-            } catch (NumberFormatException e) {
-                return -1;
-            }
-        }
-        return -1;
-    }
-
-    public boolean setBand(int band) {
-        return doBooleanCommand("DRIVER SETBAND " + band);
-    }
-
-   /**
-     * Sets the bluetooth coexistence mode.
-     *
-     * @param mode One of {@link #BLUETOOTH_COEXISTENCE_MODE_DISABLED},
-     *            {@link #BLUETOOTH_COEXISTENCE_MODE_ENABLED}, or
-     *            {@link #BLUETOOTH_COEXISTENCE_MODE_SENSE}.
-     * @return Whether the mode was successfully set.
-     */
-    public boolean setBluetoothCoexistenceMode(int mode) {
-        return doBooleanCommand("DRIVER BTCOEXMODE " + mode);
-    }
-
-    /**
-     * Enable or disable Bluetooth coexistence scan mode. When this mode is on,
-     * some of the low-level scan parameters used by the driver are changed to
-     * reduce interference with A2DP streaming.
-     *
-     * @param isSet whether to enable or disable this mode
-     * @return {@code true} if the command succeeded, {@code false} otherwise.
-     */
-    public boolean setBluetoothCoexistenceScanMode(boolean setCoexScanMode) {
-        if (setCoexScanMode) {
-            return doBooleanCommand("DRIVER BTCOEXSCAN-START");
-        } else {
-            return doBooleanCommand("DRIVER BTCOEXSCAN-STOP");
-        }
-    }
-
-    public boolean saveConfig() {
-        return doBooleanCommand("SAVE_CONFIG");
-    }
-
-    public boolean addToBlacklist(String bssid) {
-        if (TextUtils.isEmpty(bssid)) return false;
-        return doBooleanCommand("BLACKLIST " + bssid);
-    }
-
-    public boolean clearBlacklist() {
-        return doBooleanCommand("BLACKLIST clear");
-    }
-
-    public boolean setSuspendOptimizations(boolean enabled) {
-        if (mSuspendOptEnabled == enabled) return true;
-        mSuspendOptEnabled = enabled;
-        if (enabled) {
-            return doBooleanCommand("DRIVER SETSUSPENDMODE 1");
-        } else {
-            return doBooleanCommand("DRIVER SETSUSPENDMODE 0");
-        }
-    }
-
-    public boolean setCountryCode(String countryCode) {
-        return doBooleanCommand("DRIVER COUNTRY " + countryCode.toUpperCase(Locale.ROOT));
-    }
-
-    public void enableBackgroundScan(boolean enable) {
-        if (enable) {
-            doBooleanCommand("SET pno 1");
-        } else {
-            doBooleanCommand("SET pno 0");
-        }
-    }
-
-    public void setScanInterval(int scanInterval) {
-        doBooleanCommand("SCAN_INTERVAL " + scanInterval);
-    }
-
-    public void startTdls(String macAddr, boolean enable) {
-        if (enable) {
-            doBooleanCommand("TDLS_DISCOVER " + macAddr);
-            doBooleanCommand("TDLS_SETUP " + macAddr);
-        } else {
-            doBooleanCommand("TDLS_TEARDOWN " + macAddr);
-        }
-    }
-
-    /** Example output:
-     * RSSI=-65
-     * LINKSPEED=48
-     * NOISE=9999
-     * FREQUENCY=0
-     */
-    public String signalPoll() {
-        return doStringCommandWithoutLogging("SIGNAL_POLL");
-    }
-
-    /** Example outout:
-     * TXGOOD=396
-     * TXBAD=1
-     */
-    public String pktcntPoll() {
-        return doStringCommand("PKTCNT_POLL");
-    }
-
-    public void bssFlush() {
-        doBooleanCommand("BSS_FLUSH 0");
-    }
-
-    public boolean startWpsPbc(String bssid) {
-        if (TextUtils.isEmpty(bssid)) {
-            return doBooleanCommand("WPS_PBC");
-        } else {
-            return doBooleanCommand("WPS_PBC " + bssid);
-        }
-    }
-
-    public boolean startWpsPbc(String iface, String bssid) {
-        synchronized (mLock) {
-            if (TextUtils.isEmpty(bssid)) {
-                return doBooleanCommandNative("IFNAME=" + iface + " WPS_PBC");
-            } else {
-                return doBooleanCommandNative("IFNAME=" + iface + " WPS_PBC " + bssid);
-            }
-        }
-    }
-
-    public boolean startWpsPinKeypad(String pin) {
-        if (TextUtils.isEmpty(pin)) return false;
-        return doBooleanCommand("WPS_PIN any " + pin);
-    }
-
-    public boolean startWpsPinKeypad(String iface, String pin) {
-        if (TextUtils.isEmpty(pin)) return false;
-        synchronized (mLock) {
-            return doBooleanCommandNative("IFNAME=" + iface + " WPS_PIN any " + pin);
-        }
-    }
-
-
-    public String startWpsPinDisplay(String bssid) {
-        if (TextUtils.isEmpty(bssid)) {
-            return doStringCommand("WPS_PIN any");
-        } else {
-            return doStringCommand("WPS_PIN " + bssid);
-        }
-    }
-
-    public String startWpsPinDisplay(String iface, String bssid) {
-        synchronized (mLock) {
-            if (TextUtils.isEmpty(bssid)) {
-                return doStringCommandNative("IFNAME=" + iface + " WPS_PIN any");
-            } else {
-                return doStringCommandNative("IFNAME=" + iface + " WPS_PIN " + bssid);
-            }
-        }
-    }
-
-    /* Configures an access point connection */
-    public boolean startWpsRegistrar(String bssid, String pin) {
-        if (TextUtils.isEmpty(bssid) || TextUtils.isEmpty(pin)) return false;
-        return doBooleanCommand("WPS_REG " + bssid + " " + pin);
-    }
-
-    public boolean cancelWps() {
-        return doBooleanCommand("WPS_CANCEL");
-    }
-
-    public boolean setPersistentReconnect(boolean enabled) {
-        int value = (enabled == true) ? 1 : 0;
-        return doBooleanCommand("SET persistent_reconnect " + value);
-    }
-
-    public boolean setDeviceName(String name) {
-        return doBooleanCommand("SET device_name " + name);
-    }
-
-    public boolean setDeviceType(String type) {
-        return doBooleanCommand("SET device_type " + type);
-    }
-
-    public boolean setConfigMethods(String cfg) {
-        return doBooleanCommand("SET config_methods " + cfg);
-    }
-
-    public boolean setManufacturer(String value) {
-        return doBooleanCommand("SET manufacturer " + value);
-    }
-
-    public boolean setModelName(String value) {
-        return doBooleanCommand("SET model_name " + value);
-    }
-
-    public boolean setModelNumber(String value) {
-        return doBooleanCommand("SET model_number " + value);
-    }
-
-    public boolean setSerialNumber(String value) {
-        return doBooleanCommand("SET serial_number " + value);
-    }
-
-    public boolean setP2pSsidPostfix(String postfix) {
-        return doBooleanCommand("SET p2p_ssid_postfix " + postfix);
-    }
-
-    public boolean setP2pGroupIdle(String iface, int time) {
-        synchronized (mLock) {
-            return doBooleanCommandNative("IFNAME=" + iface + " SET p2p_group_idle " + time);
-        }
-    }
-
-    public void setPowerSave(boolean enabled) {
-        if (enabled) {
-            doBooleanCommand("SET ps 1");
-        } else {
-            doBooleanCommand("SET ps 0");
-        }
-    }
-
-    public boolean setP2pPowerSave(String iface, boolean enabled) {
-        synchronized (mLock) {
-            if (enabled) {
-                return doBooleanCommandNative("IFNAME=" + iface + " P2P_SET ps 1");
-            } else {
-                return doBooleanCommandNative("IFNAME=" + iface + " P2P_SET ps 0");
-            }
-        }
-    }
-
-    public boolean setWfdEnable(boolean enable) {
-        return doBooleanCommand("SET wifi_display " + (enable ? "1" : "0"));
-    }
-
-    public boolean setWfdDeviceInfo(String hex) {
-        return doBooleanCommand("WFD_SUBELEM_SET 0 " + hex);
-    }
-
-    /**
-     * "sta" prioritizes STA connection over P2P and "p2p" prioritizes
-     * P2P connection over STA
-     */
-    public boolean setConcurrencyPriority(String s) {
-        return doBooleanCommand("P2P_SET conc_pref " + s);
-    }
-
-    public boolean p2pFind() {
-        return doBooleanCommand("P2P_FIND");
-    }
-
-    public boolean p2pFind(int timeout) {
-        if (timeout <= 0) {
-            return p2pFind();
-        }
-        return doBooleanCommand("P2P_FIND " + timeout);
-    }
-
-    public boolean p2pStopFind() {
-       return doBooleanCommand("P2P_STOP_FIND");
-    }
-
-    public boolean p2pListen() {
-        return doBooleanCommand("P2P_LISTEN");
-    }
-
-    public boolean p2pListen(int timeout) {
-        if (timeout <= 0) {
-            return p2pListen();
-        }
-        return doBooleanCommand("P2P_LISTEN " + timeout);
-    }
-
-    public boolean p2pExtListen(boolean enable, int period, int interval) {
-        if (enable && interval < period) {
-            return false;
-        }
-        return doBooleanCommand("P2P_EXT_LISTEN"
-                    + (enable ? (" " + period + " " + interval) : ""));
-    }
-
-    public boolean p2pSetChannel(int lc, int oc) {
-        if (DBG) Log.d(mTAG, "p2pSetChannel: lc="+lc+", oc="+oc);
-
-        if (lc >=1 && lc <= 11) {
-            if (!doBooleanCommand("P2P_SET listen_channel " + lc)) {
-                return false;
-            }
-        } else if (lc != 0) {
-            return false;
-        }
-
-        if (oc >= 1 && oc <= 165 ) {
-            int freq = (oc <= 14 ? 2407 : 5000) + oc * 5;
-            return doBooleanCommand("P2P_SET disallow_freq 1000-"
-                    + (freq - 5) + "," + (freq + 5) + "-6000");
-        } else if (oc == 0) {
-            /* oc==0 disables "P2P_SET disallow_freq" (enables all freqs) */
-            return doBooleanCommand("P2P_SET disallow_freq \"\"");
-        }
-
-        return false;
-    }
-
-    public boolean p2pFlush() {
-        return doBooleanCommand("P2P_FLUSH");
-    }
-
-    /* p2p_connect <peer device address> <pbc|pin|PIN#> [label|display|keypad]
-        [persistent] [join|auth] [go_intent=<0..15>] [freq=<in MHz>] */
-    public String p2pConnect(WifiP2pConfig config, boolean joinExistingGroup) {
-        if (config == null) return null;
-        List<String> args = new ArrayList<String>();
-        WpsInfo wps = config.wps;
-        args.add(config.deviceAddress);
-
-        switch (wps.setup) {
-            case WpsInfo.PBC:
-                args.add("pbc");
-                break;
-            case WpsInfo.DISPLAY:
-                if (TextUtils.isEmpty(wps.pin)) {
-                    args.add("pin");
-                } else {
-                    args.add(wps.pin);
-                }
-                args.add("display");
-                break;
-            case WpsInfo.KEYPAD:
-                args.add(wps.pin);
-                args.add("keypad");
-                break;
-            case WpsInfo.LABEL:
-                args.add(wps.pin);
-                args.add("label");
-            default:
-                break;
-        }
-
-        if (config.netId == WifiP2pGroup.PERSISTENT_NET_ID) {
-            args.add("persistent");
-        }
-
-        if (joinExistingGroup) {
-            args.add("join");
-        } else {
-            //TODO: This can be adapted based on device plugged in state and
-            //device battery state
-            int groupOwnerIntent = config.groupOwnerIntent;
-            if (groupOwnerIntent < 0 || groupOwnerIntent > 15) {
-                groupOwnerIntent = DEFAULT_GROUP_OWNER_INTENT;
-            }
-            args.add("go_intent=" + groupOwnerIntent);
-        }
-
-        String command = "P2P_CONNECT ";
-        for (String s : args) command += s + " ";
-
-        return doStringCommand(command);
-    }
-
-    public boolean p2pCancelConnect() {
-        return doBooleanCommand("P2P_CANCEL");
-    }
-
-    public boolean p2pProvisionDiscovery(WifiP2pConfig config) {
-        if (config == null) return false;
-
-        switch (config.wps.setup) {
-            case WpsInfo.PBC:
-                return doBooleanCommand("P2P_PROV_DISC " + config.deviceAddress + " pbc");
-            case WpsInfo.DISPLAY:
-                //We are doing display, so provision discovery is keypad
-                return doBooleanCommand("P2P_PROV_DISC " + config.deviceAddress + " keypad");
-            case WpsInfo.KEYPAD:
-                //We are doing keypad, so provision discovery is display
-                return doBooleanCommand("P2P_PROV_DISC " + config.deviceAddress + " display");
-            default:
-                break;
-        }
-        return false;
-    }
-
-    public boolean p2pGroupAdd(boolean persistent) {
-        if (persistent) {
-            return doBooleanCommand("P2P_GROUP_ADD persistent");
-        }
-        return doBooleanCommand("P2P_GROUP_ADD");
-    }
-
-    public boolean p2pGroupAdd(int netId) {
-        return doBooleanCommand("P2P_GROUP_ADD persistent=" + netId);
-    }
-
-    public boolean p2pGroupRemove(String iface) {
-        if (TextUtils.isEmpty(iface)) return false;
-        synchronized (mLock) {
-            return doBooleanCommandNative("IFNAME=" + iface + " P2P_GROUP_REMOVE " + iface);
-        }
-    }
-
-    public boolean p2pReject(String deviceAddress) {
-        return doBooleanCommand("P2P_REJECT " + deviceAddress);
-    }
-
-    /* Invite a peer to a group */
-    public boolean p2pInvite(WifiP2pGroup group, String deviceAddress) {
-        if (TextUtils.isEmpty(deviceAddress)) return false;
-
-        if (group == null) {
-            return doBooleanCommand("P2P_INVITE peer=" + deviceAddress);
-        } else {
-            return doBooleanCommand("P2P_INVITE group=" + group.getInterface()
-                    + " peer=" + deviceAddress + " go_dev_addr=" + group.getOwner().deviceAddress);
-        }
-    }
-
-    /* Reinvoke a persistent connection */
-    public boolean p2pReinvoke(int netId, String deviceAddress) {
-        if (TextUtils.isEmpty(deviceAddress) || netId < 0) return false;
-
-        return doBooleanCommand("P2P_INVITE persistent=" + netId + " peer=" + deviceAddress);
-    }
-
-    public String p2pGetSsid(String deviceAddress) {
-        return p2pGetParam(deviceAddress, "oper_ssid");
-    }
-
-    public String p2pGetDeviceAddress() {
-        String status = status();
-        if (status == null) return "";
-
-        String[] tokens = status.split("\n");
-        for (String token : tokens) {
-            if (token.startsWith("p2p_device_address=")) {
-                String[] nameValue = token.split("=");
-                if (nameValue.length != 2) break;
-                return nameValue[1];
-            }
-        }
-        return "";
-    }
-
-    public int getGroupCapability(String deviceAddress) {
-        int gc = 0;
-        if (TextUtils.isEmpty(deviceAddress)) return gc;
-        String peerInfo = p2pPeer(deviceAddress);
-        if (TextUtils.isEmpty(peerInfo)) return gc;
-
-        String[] tokens = peerInfo.split("\n");
-        for (String token : tokens) {
-            if (token.startsWith("group_capab=")) {
-                String[] nameValue = token.split("=");
-                if (nameValue.length != 2) break;
-                try {
-                    return Integer.decode(nameValue[1]);
-                } catch(NumberFormatException e) {
-                    return gc;
-                }
-            }
-        }
-        return gc;
-    }
-
-    public String p2pPeer(String deviceAddress) {
-        return doStringCommand("P2P_PEER " + deviceAddress);
-    }
-
-    private String p2pGetParam(String deviceAddress, String key) {
-        if (deviceAddress == null) return null;
-
-        String peerInfo = p2pPeer(deviceAddress);
-        if (peerInfo == null) return null;
-        String[] tokens= peerInfo.split("\n");
-
-        key += "=";
-        for (String token : tokens) {
-            if (token.startsWith(key)) {
-                String[] nameValue = token.split("=");
-                if (nameValue.length != 2) break;
-                return nameValue[1];
-            }
-        }
-        return null;
-    }
-
-    public boolean p2pServiceAdd(WifiP2pServiceInfo servInfo) {
-        /*
-         * P2P_SERVICE_ADD bonjour <query hexdump> <RDATA hexdump>
-         * P2P_SERVICE_ADD upnp <version hex> <service>
-         *
-         * e.g)
-         * [Bonjour]
-         * # IP Printing over TCP (PTR) (RDATA=MyPrinter._ipp._tcp.local.)
-         * P2P_SERVICE_ADD bonjour 045f697070c00c000c01 094d795072696e746572c027
-         * # IP Printing over TCP (TXT) (RDATA=txtvers=1,pdl=application/postscript)
-         * P2P_SERVICE_ADD bonjour 096d797072696e746572045f697070c00c001001
-         *  09747874766572733d311a70646c3d6170706c69636174696f6e2f706f7374736372797074
-         *
-         * [UPnP]
-         * P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012
-         * P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::upnp:rootdevice
-         * P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9332-123456789012::urn:schemas-upnp
-         * -org:device:InternetGatewayDevice:1
-         * P2P_SERVICE_ADD upnp 10 uuid:6859dede-8574-59ab-9322-123456789012::urn:schemas-upnp
-         * -org:service:ContentDirectory:2
-         */
-        for (String s : servInfo.getSupplicantQueryList()) {
-            String command = "P2P_SERVICE_ADD";
-            command += (" " + s);
-            if (!doBooleanCommand(command)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public boolean p2pServiceDel(WifiP2pServiceInfo servInfo) {
-        /*
-         * P2P_SERVICE_DEL bonjour <query hexdump>
-         * P2P_SERVICE_DEL upnp <version hex> <service>
-         */
-        for (String s : servInfo.getSupplicantQueryList()) {
-            String command = "P2P_SERVICE_DEL ";
-
-            String[] data = s.split(" ");
-            if (data.length < 2) {
-                return false;
-            }
-            if ("upnp".equals(data[0])) {
-                command += s;
-            } else if ("bonjour".equals(data[0])) {
-                command += data[0];
-                command += (" " + data[1]);
-            } else {
-                return false;
-            }
-            if (!doBooleanCommand(command)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    public boolean p2pServiceFlush() {
-        return doBooleanCommand("P2P_SERVICE_FLUSH");
-    }
-
-    public String p2pServDiscReq(String addr, String query) {
-        String command = "P2P_SERV_DISC_REQ";
-        command += (" " + addr);
-        command += (" " + query);
-
-        return doStringCommand(command);
-    }
-
-    public boolean p2pServDiscCancelReq(String id) {
-        return doBooleanCommand("P2P_SERV_DISC_CANCEL_REQ " + id);
-    }
-
-    /* Set the current mode of miracast operation.
-     *  0 = disabled
-     *  1 = operating as source
-     *  2 = operating as sink
-     */
-    public void setMiracastMode(int mode) {
-        // Note: optional feature on the driver. It is ok for this to fail.
-        doBooleanCommand("DRIVER MIRACAST " + mode);
-    }
-}
diff --git a/wifi/java/android/net/wifi/WifiSsid.java b/wifi/java/android/net/wifi/WifiSsid.java
index a35a34b..f8ba95d 100644
--- a/wifi/java/android/net/wifi/WifiSsid.java
+++ b/wifi/java/android/net/wifi/WifiSsid.java
@@ -16,9 +16,8 @@
 
 package android.net.wifi;
 
-import android.os.Parcelable;
 import android.os.Parcel;
-import android.util.Log;
+import android.os.Parcelable;
 
 import java.io.ByteArrayOutputStream;
 import java.nio.ByteBuffer;
@@ -42,7 +41,7 @@
 public class WifiSsid implements Parcelable {
     private static final String TAG = "WifiSsid";
 
-    public ByteArrayOutputStream octets = new ByteArrayOutputStream(32);
+    public final ByteArrayOutputStream octets = new ByteArrayOutputStream(32);
 
     private static final int HEX_RADIX = 16;
     public static final String NONE = "<unknown ssid>";
@@ -58,7 +57,6 @@
 
     public static WifiSsid createFromHex(String hexStr) {
         WifiSsid a = new WifiSsid();
-        int length = 0;
         if (hexStr == null) return a;
 
         if (hexStr.startsWith("0x") || hexStr.startsWith("0X")) {
@@ -191,8 +189,13 @@
     }
 
     /** @hide */
+    public boolean isHidden() {
+        return isArrayAllZeroes(octets.toByteArray());
+    }
+
+    /** @hide */
     public byte[] getOctets() {
-        return  octets.toByteArray();
+        return octets.toByteArray();
     }
 
     /** @hide */
diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java
deleted file mode 100644
index 1dc7da8..0000000
--- a/wifi/java/android/net/wifi/WifiStateMachine.java
+++ /dev/null
@@ -1,4455 +0,0 @@
-/*
- * Copyright (C) 2010 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 android.net.wifi;
-
-import static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;
-import static android.net.wifi.WifiManager.WIFI_STATE_DISABLING;
-import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;
-import static android.net.wifi.WifiManager.WIFI_STATE_ENABLING;
-import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN;
-
-/**
- * TODO:
- * Deprecate WIFI_STATE_UNKNOWN
- */
-import static android.net.wifi.WifiManager.WIFI_AP_STATE_DISABLED;
-import static android.net.wifi.WifiManager.WIFI_AP_STATE_DISABLING;
-import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLED;
-import static android.net.wifi.WifiManager.WIFI_AP_STATE_ENABLING;
-import static android.net.wifi.WifiManager.WIFI_AP_STATE_FAILED;
-
-import android.app.AlarmManager;
-import android.app.PendingIntent;
-import android.app.backup.IBackupManager;
-import android.bluetooth.BluetoothAdapter;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.database.ContentObserver;
-import android.net.ConnectivityManager;
-import android.net.DhcpResults;
-import android.net.DhcpStateMachine;
-import android.net.InterfaceConfiguration;
-import android.net.LinkAddress;
-import android.net.LinkProperties;
-import android.net.NetworkInfo;
-import android.net.NetworkInfo.DetailedState;
-import android.net.NetworkUtils;
-import android.net.RouteInfo;
-import android.net.wifi.WpsResult.Status;
-import android.net.wifi.p2p.WifiP2pManager;
-import android.net.wifi.p2p.WifiP2pService;
-import android.os.BatteryStats;
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.INetworkManagementService;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.PowerManager;
-import android.os.Process;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemClock;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.os.WorkSource;
-import android.provider.Settings;
-import android.util.Log;
-import android.util.LruCache;
-import android.text.TextUtils;
-
-import com.android.internal.R;
-import com.android.internal.app.IBatteryStats;
-import com.android.internal.util.AsyncChannel;
-import com.android.internal.util.Protocol;
-import com.android.internal.util.State;
-import com.android.internal.util.StateMachine;
-
-import com.android.server.net.BaseNetworkObserver;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.net.InetAddress;
-import java.net.Inet6Address;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.Iterator;
-import java.util.regex.Pattern;
-
-/**
- * Track the state of Wifi connectivity. All event handling is done here,
- * and all changes in connectivity state are initiated here.
- *
- * Wi-Fi now supports three modes of operation: Client, SoftAp and p2p
- * In the current implementation, we support concurrent wifi p2p and wifi operation.
- * The WifiStateMachine handles SoftAp and Client operations while WifiP2pService
- * handles p2p operation.
- *
- * @hide
- */
-public class WifiStateMachine extends StateMachine {
-
-    private static final String NETWORKTYPE = "WIFI";
-    private static final boolean DBG = false;
-
-    private WifiMonitor mWifiMonitor;
-    private WifiNative mWifiNative;
-    private WifiConfigStore mWifiConfigStore;
-    private INetworkManagementService mNwService;
-    private ConnectivityManager mCm;
-
-    private final boolean mP2pSupported;
-    private final AtomicBoolean mP2pConnected = new AtomicBoolean(false);
-    private boolean mTemporarilyDisconnectWifi = false;
-    private final String mPrimaryDeviceType;
-
-    /* Scan results handling */
-    private List<ScanResult> mScanResults = new ArrayList<ScanResult>();
-    private static final Pattern scanResultPattern = Pattern.compile("\t+");
-    private static final int SCAN_RESULT_CACHE_SIZE = 80;
-    private final LruCache<String, ScanResult> mScanResultCache;
-
-    /* Batch scan results */
-    private final List<BatchedScanResult> mBatchedScanResults =
-            new ArrayList<BatchedScanResult>();
-    private int mBatchedScanOwnerUid = UNKNOWN_SCAN_SOURCE;
-    private int mExpectedBatchedScans = 0;
-    private long mBatchedScanMinPollTime = 0;
-
-    /* Chipset supports background scan */
-    private final boolean mBackgroundScanSupported;
-
-    private String mInterfaceName;
-    /* Tethering interface could be separate from wlan interface */
-    private String mTetherInterfaceName;
-
-    private int mLastSignalLevel = -1;
-    private String mLastBssid;
-    private int mLastNetworkId;
-    private boolean mEnableRssiPolling = false;
-    private boolean mEnableBackgroundScan = false;
-    private int mRssiPollToken = 0;
-    private int mReconnectCount = 0;
-    /* 3 operational states for STA operation: CONNECT_MODE, SCAN_ONLY_MODE, SCAN_ONLY_WIFI_OFF_MODE
-    * In CONNECT_MODE, the STA can scan and connect to an access point
-    * In SCAN_ONLY_MODE, the STA can only scan for access points
-    * In SCAN_ONLY_WIFI_OFF_MODE, the STA can only scan for access points with wifi toggle being off
-    */
-    private int mOperationalMode = CONNECT_MODE;
-    private boolean mScanResultIsPending = false;
-    private WorkSource mScanWorkSource = null;
-    private static final int UNKNOWN_SCAN_SOURCE = -1;
-    /* Tracks if state machine has received any screen state change broadcast yet.
-     * We can miss one of these at boot.
-     */
-    private AtomicBoolean mScreenBroadcastReceived = new AtomicBoolean(false);
-
-    private boolean mBluetoothConnectionActive = false;
-
-    private PowerManager.WakeLock mSuspendWakeLock;
-
-    /**
-     * Interval in milliseconds between polling for RSSI
-     * and linkspeed information
-     */
-    private static final int POLL_RSSI_INTERVAL_MSECS = 3000;
-
-    /**
-     * Delay between supplicant restarts upon failure to establish connection
-     */
-    private static final int SUPPLICANT_RESTART_INTERVAL_MSECS = 5000;
-
-    /**
-     * Number of times we attempt to restart supplicant
-     */
-    private static final int SUPPLICANT_RESTART_TRIES = 5;
-
-    private int mSupplicantRestartCount = 0;
-    /* Tracks sequence number on stop failure message */
-    private int mSupplicantStopFailureToken = 0;
-
-    /**
-     * Tether state change notification time out
-     */
-    private static final int TETHER_NOTIFICATION_TIME_OUT_MSECS = 5000;
-
-    /* Tracks sequence number on a tether notification time out */
-    private int mTetherToken = 0;
-
-    /**
-     * Driver start time out.
-     */
-    private static final int DRIVER_START_TIME_OUT_MSECS = 10000;
-
-    /* Tracks sequence number on a driver time out */
-    private int mDriverStartToken = 0;
-
-    /**
-     * The link properties of the wifi interface.
-     * Do not modify this directly; use updateLinkProperties instead.
-     */
-    private LinkProperties mLinkProperties;
-
-    /**
-     * Subset of link properties coming from netlink.
-     * Currently includes IPv4 and IPv6 addresses. In the future will also include IPv6 DNS servers
-     * and domains obtained from router advertisements (RFC 6106).
-     */
-    private final LinkProperties mNetlinkLinkProperties;
-
-    /* Tracks sequence number on a periodic scan message */
-    private int mPeriodicScanToken = 0;
-
-    // Wakelock held during wifi start/stop and driver load/unload
-    private PowerManager.WakeLock mWakeLock;
-
-    private Context mContext;
-
-    private final Object mDhcpResultsLock = new Object();
-    private DhcpResults mDhcpResults;
-    private WifiInfo mWifiInfo;
-    private NetworkInfo mNetworkInfo;
-    private SupplicantStateTracker mSupplicantStateTracker;
-    private DhcpStateMachine mDhcpStateMachine;
-    private boolean mDhcpActive = false;
-
-    private final AtomicInteger mCountryCodeSequence = new AtomicInteger();
-
-    private class InterfaceObserver extends BaseNetworkObserver {
-        private WifiStateMachine mWifiStateMachine;
-
-        InterfaceObserver(WifiStateMachine wifiStateMachine) {
-            super();
-            mWifiStateMachine = wifiStateMachine;
-        }
-
-        private void maybeLog(String operation, String iface, LinkAddress address) {
-            if (DBG) {
-                log(operation + ": " + address + " on " + iface +
-                    " flags " + address.getFlags() + " scope " + address.getScope());
-            }
-        }
-
-        @Override
-        public void addressUpdated(String iface, LinkAddress address) {
-            if (mWifiStateMachine.mInterfaceName.equals(iface)) {
-                maybeLog("addressUpdated", iface, address);
-                mWifiStateMachine.sendMessage(CMD_IP_ADDRESS_UPDATED, address);
-            }
-        }
-
-        @Override
-        public void addressRemoved(String iface, LinkAddress address) {
-            if (mWifiStateMachine.mInterfaceName.equals(iface)) {
-                maybeLog("addressRemoved", iface, address);
-                mWifiStateMachine.sendMessage(CMD_IP_ADDRESS_REMOVED, address);
-            }
-        }
-    }
-
-    private InterfaceObserver mInterfaceObserver;
-
-    private AlarmManager mAlarmManager;
-    private PendingIntent mScanIntent;
-    private PendingIntent mDriverStopIntent;
-    private PendingIntent mBatchedScanIntervalIntent;
-
-    /* Tracks current frequency mode */
-    private AtomicInteger mFrequencyBand = new AtomicInteger(WifiManager.WIFI_FREQUENCY_BAND_AUTO);
-
-    /* Tracks if we are filtering Multicast v4 packets. Default is to filter. */
-    private AtomicBoolean mFilteringMulticastV4Packets = new AtomicBoolean(true);
-
-    // Channel for sending replies.
-    private AsyncChannel mReplyChannel = new AsyncChannel();
-
-    private WifiP2pManager mWifiP2pManager;
-    //Used to initiate a connection with WifiP2pService
-    private AsyncChannel mWifiP2pChannel;
-    private AsyncChannel mWifiApConfigChannel;
-
-    /* The base for wifi message types */
-    static final int BASE = Protocol.BASE_WIFI;
-    /* Start the supplicant */
-    static final int CMD_START_SUPPLICANT                 = BASE + 11;
-    /* Stop the supplicant */
-    static final int CMD_STOP_SUPPLICANT                  = BASE + 12;
-    /* Start the driver */
-    static final int CMD_START_DRIVER                     = BASE + 13;
-    /* Stop the driver */
-    static final int CMD_STOP_DRIVER                      = BASE + 14;
-    /* Indicates Static IP succeeded */
-    static final int CMD_STATIC_IP_SUCCESS                = BASE + 15;
-    /* Indicates Static IP failed */
-    static final int CMD_STATIC_IP_FAILURE                = BASE + 16;
-    /* Indicates supplicant stop failed */
-    static final int CMD_STOP_SUPPLICANT_FAILED           = BASE + 17;
-    /* Delayed stop to avoid shutting down driver too quick*/
-    static final int CMD_DELAYED_STOP_DRIVER              = BASE + 18;
-    /* A delayed message sent to start driver when it fail to come up */
-    static final int CMD_DRIVER_START_TIMED_OUT           = BASE + 19;
-    /* Ready to switch to network as default */
-    static final int CMD_CAPTIVE_CHECK_COMPLETE           = BASE + 20;
-
-    /* Start the soft access point */
-    static final int CMD_START_AP                         = BASE + 21;
-    /* Indicates soft ap start succeeded */
-    static final int CMD_START_AP_SUCCESS                 = BASE + 22;
-    /* Indicates soft ap start failed */
-    static final int CMD_START_AP_FAILURE                 = BASE + 23;
-    /* Stop the soft access point */
-    static final int CMD_STOP_AP                          = BASE + 24;
-    /* Set the soft access point configuration */
-    static final int CMD_SET_AP_CONFIG                    = BASE + 25;
-    /* Soft access point configuration set completed */
-    static final int CMD_SET_AP_CONFIG_COMPLETED          = BASE + 26;
-    /* Request the soft access point configuration */
-    static final int CMD_REQUEST_AP_CONFIG                = BASE + 27;
-    /* Response to access point configuration request */
-    static final int CMD_RESPONSE_AP_CONFIG               = BASE + 28;
-    /* Invoked when getting a tether state change notification */
-    static final int CMD_TETHER_STATE_CHANGE              = BASE + 29;
-    /* A delayed message sent to indicate tether state change failed to arrive */
-    static final int CMD_TETHER_NOTIFICATION_TIMED_OUT    = BASE + 30;
-
-    static final int CMD_BLUETOOTH_ADAPTER_STATE_CHANGE   = BASE + 31;
-
-    /* Supplicant commands */
-    /* Is supplicant alive ? */
-    static final int CMD_PING_SUPPLICANT                  = BASE + 51;
-    /* Add/update a network configuration */
-    static final int CMD_ADD_OR_UPDATE_NETWORK            = BASE + 52;
-    /* Delete a network */
-    static final int CMD_REMOVE_NETWORK                   = BASE + 53;
-    /* Enable a network. The device will attempt a connection to the given network. */
-    static final int CMD_ENABLE_NETWORK                   = BASE + 54;
-    /* Enable all networks */
-    static final int CMD_ENABLE_ALL_NETWORKS              = BASE + 55;
-    /* Blacklist network. De-prioritizes the given BSSID for connection. */
-    static final int CMD_BLACKLIST_NETWORK                = BASE + 56;
-    /* Clear the blacklist network list */
-    static final int CMD_CLEAR_BLACKLIST                  = BASE + 57;
-    /* Save configuration */
-    static final int CMD_SAVE_CONFIG                      = BASE + 58;
-    /* Get configured networks*/
-    static final int CMD_GET_CONFIGURED_NETWORKS          = BASE + 59;
-
-    /* Supplicant commands after driver start*/
-    /* Initiate a scan */
-    static final int CMD_START_SCAN                       = BASE + 71;
-    /* Set operational mode. CONNECT, SCAN ONLY, SCAN_ONLY with Wi-Fi off mode */
-    static final int CMD_SET_OPERATIONAL_MODE             = BASE + 72;
-    /* Disconnect from a network */
-    static final int CMD_DISCONNECT                       = BASE + 73;
-    /* Reconnect to a network */
-    static final int CMD_RECONNECT                        = BASE + 74;
-    /* Reassociate to a network */
-    static final int CMD_REASSOCIATE                      = BASE + 75;
-    /* Controls suspend mode optimizations
-     *
-     * When high perf mode is enabled, suspend mode optimizations are disabled
-     *
-     * When high perf mode is disabled, suspend mode optimizations are enabled
-     *
-     * Suspend mode optimizations include:
-     * - packet filtering
-     * - turn off roaming
-     * - DTIM wake up settings
-     */
-    static final int CMD_SET_HIGH_PERF_MODE               = BASE + 77;
-    /* Set the country code */
-    static final int CMD_SET_COUNTRY_CODE                 = BASE + 80;
-    /* Enables RSSI poll */
-    static final int CMD_ENABLE_RSSI_POLL                 = BASE + 82;
-    /* RSSI poll */
-    static final int CMD_RSSI_POLL                        = BASE + 83;
-    /* Set up packet filtering */
-    static final int CMD_START_PACKET_FILTERING           = BASE + 84;
-    /* Clear packet filter */
-    static final int CMD_STOP_PACKET_FILTERING            = BASE + 85;
-    /* Enable suspend mode optimizations in the driver */
-    static final int CMD_SET_SUSPEND_OPT_ENABLED          = BASE + 86;
-    /* When there are no saved networks, we do a periodic scan to notify user of
-     * an open network */
-    static final int CMD_NO_NETWORKS_PERIODIC_SCAN        = BASE + 88;
-
-    /* arg1 values to CMD_STOP_PACKET_FILTERING and CMD_START_PACKET_FILTERING */
-    static final int MULTICAST_V6  = 1;
-    static final int MULTICAST_V4  = 0;
-
-   /* Set the frequency band */
-    static final int CMD_SET_FREQUENCY_BAND               = BASE + 90;
-    /* Enable background scan for configured networks */
-    static final int CMD_ENABLE_BACKGROUND_SCAN           = BASE + 91;
-    /* Enable TDLS on a specific MAC address */
-    static final int CMD_ENABLE_TDLS                      = BASE + 92;
-
-    /* Commands from/to the SupplicantStateTracker */
-    /* Reset the supplicant state tracker */
-    static final int CMD_RESET_SUPPLICANT_STATE           = BASE + 111;
-
-    /* P2p commands */
-    /* We are ok with no response here since we wont do much with it anyway */
-    public static final int CMD_ENABLE_P2P                = BASE + 131;
-    /* In order to shut down supplicant cleanly, we wait till p2p has
-     * been disabled */
-    public static final int CMD_DISABLE_P2P_REQ           = BASE + 132;
-    public static final int CMD_DISABLE_P2P_RSP           = BASE + 133;
-
-    public static final int CMD_BOOT_COMPLETED            = BASE + 134;
-
-    /* change the batch scan settings.
-     * arg1 = responsible UID
-     * arg2 = csph (channel scans per hour)
-     * obj = bundle with the new settings and the optional worksource
-     */
-    public static final int CMD_SET_BATCHED_SCAN          = BASE + 135;
-    public static final int CMD_START_NEXT_BATCHED_SCAN   = BASE + 136;
-    public static final int CMD_POLL_BATCHED_SCAN         = BASE + 137;
-
-    /* Link configuration (IP address, DNS, ...) changes */
-    /* An new IP address was added to our interface, or an existing IP address was updated */
-    static final int CMD_IP_ADDRESS_UPDATED               = BASE + 140;
-    /* An IP address was removed from our interface */
-    static final int CMD_IP_ADDRESS_REMOVED               = BASE + 141;
-    /* Reload all networks and reconnect */
-    static final int CMD_RELOAD_TLS_AND_RECONNECT         = BASE + 142;
-
-    /* Wifi state machine modes of operation */
-    /* CONNECT_MODE - connect to any 'known' AP when it becomes available */
-    public static final int CONNECT_MODE                   = 1;
-    /* SCAN_ONLY_MODE - don't connect to any APs; scan, but only while apps hold lock */
-    public static final int SCAN_ONLY_MODE                 = 2;
-    /* SCAN_ONLY_WITH_WIFI_OFF - scan, but don't connect to any APs */
-    public static final int SCAN_ONLY_WITH_WIFI_OFF_MODE   = 3;
-
-    private static final int SUCCESS = 1;
-    private static final int FAILURE = -1;
-
-    /**
-     * The maximum number of times we will retry a connection to an access point
-     * for which we have failed in acquiring an IP address from DHCP. A value of
-     * N means that we will make N+1 connection attempts in all.
-     * <p>
-     * See {@link Settings.Secure#WIFI_MAX_DHCP_RETRY_COUNT}. This is the default
-     * value if a Settings value is not present.
-     */
-    private static final int DEFAULT_MAX_DHCP_RETRIES = 9;
-
-    /* Tracks if suspend optimizations need to be disabled by DHCP,
-     * screen or due to high perf mode.
-     * When any of them needs to disable it, we keep the suspend optimizations
-     * disabled
-     */
-    private int mSuspendOptNeedsDisabled = 0;
-
-    private static final int SUSPEND_DUE_TO_DHCP       = 1;
-    private static final int SUSPEND_DUE_TO_HIGH_PERF  = 1<<1;
-    private static final int SUSPEND_DUE_TO_SCREEN     = 1<<2;
-
-    /* Tracks if user has enabled suspend optimizations through settings */
-    private AtomicBoolean mUserWantsSuspendOpt = new AtomicBoolean(true);
-
-    /**
-     * Default framework scan interval in milliseconds. This is used in the scenario in which
-     * wifi chipset does not support background scanning to set up a
-     * periodic wake up scan so that the device can connect to a new access
-     * point on the move. {@link Settings.Global#WIFI_FRAMEWORK_SCAN_INTERVAL_MS} can
-     * override this.
-     */
-    private final int mDefaultFrameworkScanIntervalMs;
-
-    /**
-     * Supplicant scan interval in milliseconds.
-     * Comes from {@link Settings.Global#WIFI_SUPPLICANT_SCAN_INTERVAL_MS} or
-     * from the default config if the setting is not set
-     */
-    private long mSupplicantScanIntervalMs;
-
-    /**
-     * Minimum time interval between enabling all networks.
-     * A device can end up repeatedly connecting to a bad network on screen on/off toggle
-     * due to enabling every time. We add a threshold to avoid this.
-     */
-    private static final int MIN_INTERVAL_ENABLE_ALL_NETWORKS_MS = 10 * 60 * 1000; /* 10 minutes */
-    private long mLastEnableAllNetworksTime;
-
-    /**
-     * Starting and shutting down driver too quick causes problems leading to driver
-     * being in a bad state. Delay driver stop.
-     */
-    private final int mDriverStopDelayMs;
-    private int mDelayedStopCounter;
-    private boolean mInDelayedStop = false;
-
-    // sometimes telephony gives us this data before boot is complete and we can't store it
-    // until after, so the write is deferred
-    private volatile String mPersistedCountryCode;
-
-    // Supplicant doesn't like setting the same country code multiple times (it may drop
-    // currently connected network), so we save the country code here to avoid redundency
-    private String mLastSetCountryCode;
-
-    private static final int MIN_RSSI = -200;
-    private static final int MAX_RSSI = 256;
-
-    /* Default parent state */
-    private State mDefaultState = new DefaultState();
-    /* Temporary initial state */
-    private State mInitialState = new InitialState();
-    /* Driver loaded, waiting for supplicant to start */
-    private State mSupplicantStartingState = new SupplicantStartingState();
-    /* Driver loaded and supplicant ready */
-    private State mSupplicantStartedState = new SupplicantStartedState();
-    /* Waiting for supplicant to stop and monitor to exit */
-    private State mSupplicantStoppingState = new SupplicantStoppingState();
-    /* Driver start issued, waiting for completed event */
-    private State mDriverStartingState = new DriverStartingState();
-    /* Driver started */
-    private State mDriverStartedState = new DriverStartedState();
-    /* Wait until p2p is disabled
-     * This is a special state which is entered right after we exit out of DriverStartedState
-     * before transitioning to another state.
-     */
-    private State mWaitForP2pDisableState = new WaitForP2pDisableState();
-    /* Driver stopping */
-    private State mDriverStoppingState = new DriverStoppingState();
-    /* Driver stopped */
-    private State mDriverStoppedState = new DriverStoppedState();
-    /* Scan for networks, no connection will be established */
-    private State mScanModeState = new ScanModeState();
-    /* Connecting to an access point */
-    private State mConnectModeState = new ConnectModeState();
-    /* Connected at 802.11 (L2) level */
-    private State mL2ConnectedState = new L2ConnectedState();
-    /* fetching IP after connection to access point (assoc+auth complete) */
-    private State mObtainingIpState = new ObtainingIpState();
-    /* Waiting for link quality verification to be complete */
-    private State mVerifyingLinkState = new VerifyingLinkState();
-    /* Waiting for captive portal check to be complete */
-    private State mCaptivePortalCheckState = new CaptivePortalCheckState();
-    /* Connected with IP addr */
-    private State mConnectedState = new ConnectedState();
-    /* disconnect issued, waiting for network disconnect confirmation */
-    private State mDisconnectingState = new DisconnectingState();
-    /* Network is not connected, supplicant assoc+auth is not complete */
-    private State mDisconnectedState = new DisconnectedState();
-    /* Waiting for WPS to be completed*/
-    private State mWpsRunningState = new WpsRunningState();
-
-    /* Soft ap is starting up */
-    private State mSoftApStartingState = new SoftApStartingState();
-    /* Soft ap is running */
-    private State mSoftApStartedState = new SoftApStartedState();
-    /* Soft ap is running and we are waiting for tether notification */
-    private State mTetheringState = new TetheringState();
-    /* Soft ap is running and we are tethered through connectivity service */
-    private State mTetheredState = new TetheredState();
-    /* Waiting for untether confirmation before stopping soft Ap */
-    private State mUntetheringState = new UntetheringState();
-
-    private class TetherStateChange {
-        ArrayList<String> available;
-        ArrayList<String> active;
-        TetherStateChange(ArrayList<String> av, ArrayList<String> ac) {
-            available = av;
-            active = ac;
-        }
-    }
-
-
-    /**
-     * One of  {@link WifiManager#WIFI_STATE_DISABLED},
-     *         {@link WifiManager#WIFI_STATE_DISABLING},
-     *         {@link WifiManager#WIFI_STATE_ENABLED},
-     *         {@link WifiManager#WIFI_STATE_ENABLING},
-     *         {@link WifiManager#WIFI_STATE_UNKNOWN}
-     *
-     */
-    private final AtomicInteger mWifiState = new AtomicInteger(WIFI_STATE_DISABLED);
-
-    /**
-     * One of  {@link WifiManager#WIFI_AP_STATE_DISABLED},
-     *         {@link WifiManager#WIFI_AP_STATE_DISABLING},
-     *         {@link WifiManager#WIFI_AP_STATE_ENABLED},
-     *         {@link WifiManager#WIFI_AP_STATE_ENABLING},
-     *         {@link WifiManager#WIFI_AP_STATE_FAILED}
-     *
-     */
-    private final AtomicInteger mWifiApState = new AtomicInteger(WIFI_AP_STATE_DISABLED);
-
-    private static final int SCAN_REQUEST = 0;
-    private static final String ACTION_START_SCAN =
-        "com.android.server.WifiManager.action.START_SCAN";
-
-    private static final String DELAYED_STOP_COUNTER = "DelayedStopCounter";
-    private static final int DRIVER_STOP_REQUEST = 0;
-    private static final String ACTION_DELAYED_DRIVER_STOP =
-        "com.android.server.WifiManager.action.DELAYED_DRIVER_STOP";
-
-    private static final String ACTION_REFRESH_BATCHED_SCAN =
-            "com.android.server.WifiManager.action.REFRESH_BATCHED_SCAN";
-    /**
-     * Keep track of whether WIFI is running.
-     */
-    private boolean mIsRunning = false;
-
-    /**
-     * Keep track of whether we last told the battery stats we had started.
-     */
-    private boolean mReportedRunning = false;
-
-    /**
-     * Most recently set source of starting WIFI.
-     */
-    private final WorkSource mRunningWifiUids = new WorkSource();
-
-    /**
-     * The last reported UIDs that were responsible for starting WIFI.
-     */
-    private final WorkSource mLastRunningWifiUids = new WorkSource();
-
-    private final IBatteryStats mBatteryStats;
-
-    private BatchedScanSettings mBatchedScanSettings = null;
-
-    /**
-     * Track the worksource/cost of the current settings and track what's been noted
-     * to the battery stats, so we can mark the end of the previous when changing.
-     */
-    private WorkSource mBatchedScanWorkSource = null;
-    private int mBatchedScanCsph = 0;
-    private WorkSource mNotedBatchedScanWorkSource = null;
-    private int mNotedBatchedScanCsph = 0;
-
-
-    public WifiStateMachine(Context context, String wlanInterface) {
-        super("WifiStateMachine");
-        mContext = context;
-        mInterfaceName = wlanInterface;
-
-        mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_WIFI, 0, NETWORKTYPE, "");
-        mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService(
-                BatteryStats.SERVICE_NAME));
-
-        IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
-        mNwService = INetworkManagementService.Stub.asInterface(b);
-
-        mP2pSupported = mContext.getPackageManager().hasSystemFeature(
-                PackageManager.FEATURE_WIFI_DIRECT);
-
-        mWifiNative = new WifiNative(mInterfaceName);
-        mWifiConfigStore = new WifiConfigStore(context, mWifiNative);
-        mWifiMonitor = new WifiMonitor(this, mWifiNative);
-        mWifiInfo = new WifiInfo();
-        mSupplicantStateTracker = new SupplicantStateTracker(context, this, mWifiConfigStore,
-                getHandler());
-        mLinkProperties = new LinkProperties();
-        mNetlinkLinkProperties = new LinkProperties();
-
-        mWifiP2pManager = (WifiP2pManager) mContext.getSystemService(Context.WIFI_P2P_SERVICE);
-
-        mNetworkInfo.setIsAvailable(false);
-        mLastBssid = null;
-        mLastNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
-        mLastSignalLevel = -1;
-
-        mInterfaceObserver = new InterfaceObserver(this);
-        try {
-            mNwService.registerObserver(mInterfaceObserver);
-        } catch (RemoteException e) {
-            loge("Couldn't register interface observer: " + e.toString());
-        }
-
-        mAlarmManager = (AlarmManager)mContext.getSystemService(Context.ALARM_SERVICE);
-        Intent scanIntent = new Intent(ACTION_START_SCAN, null);
-        mScanIntent = PendingIntent.getBroadcast(mContext, SCAN_REQUEST, scanIntent, 0);
-
-        Intent batchedIntent = new Intent(ACTION_REFRESH_BATCHED_SCAN, null);
-        mBatchedScanIntervalIntent = PendingIntent.getBroadcast(mContext, 0, batchedIntent, 0);
-
-        mDefaultFrameworkScanIntervalMs = mContext.getResources().getInteger(
-                R.integer.config_wifi_framework_scan_interval);
-
-        mDriverStopDelayMs = mContext.getResources().getInteger(
-                R.integer.config_wifi_driver_stop_delay);
-
-        mBackgroundScanSupported = mContext.getResources().getBoolean(
-                R.bool.config_wifi_background_scan_support);
-
-        mPrimaryDeviceType = mContext.getResources().getString(
-                R.string.config_wifi_p2p_device_type);
-
-        mUserWantsSuspendOpt.set(Settings.Global.getInt(mContext.getContentResolver(),
-                    Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 1) == 1);
-
-        mContext.registerReceiver(
-            new BroadcastReceiver() {
-                @Override
-                public void onReceive(Context context, Intent intent) {
-                    ArrayList<String> available = intent.getStringArrayListExtra(
-                            ConnectivityManager.EXTRA_AVAILABLE_TETHER);
-                    ArrayList<String> active = intent.getStringArrayListExtra(
-                            ConnectivityManager.EXTRA_ACTIVE_TETHER);
-                    sendMessage(CMD_TETHER_STATE_CHANGE, new TetherStateChange(available, active));
-                }
-            },new IntentFilter(ConnectivityManager.ACTION_TETHER_STATE_CHANGED));
-
-        mContext.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                        final WorkSource workSource = null;
-                        startScan(UNKNOWN_SCAN_SOURCE, workSource);
-                    }
-                },
-                new IntentFilter(ACTION_START_SCAN));
-
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(Intent.ACTION_SCREEN_ON);
-        filter.addAction(Intent.ACTION_SCREEN_OFF);
-        filter.addAction(ACTION_REFRESH_BATCHED_SCAN);
-        mContext.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                        String action = intent.getAction();
-
-                        if (action.equals(Intent.ACTION_SCREEN_ON)) {
-                            handleScreenStateChanged(true);
-                        } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
-                            handleScreenStateChanged(false);
-                        } else if (action.equals(ACTION_REFRESH_BATCHED_SCAN)) {
-                            startNextBatchedScanAsync();
-                        }
-                    }
-                }, filter);
-
-        mContext.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                       int counter = intent.getIntExtra(DELAYED_STOP_COUNTER, 0);
-                       sendMessage(CMD_DELAYED_STOP_DRIVER, counter, 0);
-                    }
-                },
-                new IntentFilter(ACTION_DELAYED_DRIVER_STOP));
-
-        mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor(
-                Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED), false,
-                new ContentObserver(getHandler()) {
-                    @Override
-                    public void onChange(boolean selfChange) {
-                        mUserWantsSuspendOpt.set(Settings.Global.getInt(mContext.getContentResolver(),
-                                Settings.Global.WIFI_SUSPEND_OPTIMIZATIONS_ENABLED, 1) == 1);
-                    }
-                });
-
-        mContext.registerReceiver(
-                new BroadcastReceiver() {
-                    @Override
-                    public void onReceive(Context context, Intent intent) {
-                        sendMessage(CMD_BOOT_COMPLETED);
-                    }
-                },
-                new IntentFilter(Intent.ACTION_BOOT_COMPLETED));
-
-        mScanResultCache = new LruCache<String, ScanResult>(SCAN_RESULT_CACHE_SIZE);
-
-        PowerManager powerManager = (PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
-        mWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, getName());
-
-        mSuspendWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "WifiSuspend");
-        mSuspendWakeLock.setReferenceCounted(false);
-
-        addState(mDefaultState);
-            addState(mInitialState, mDefaultState);
-            addState(mSupplicantStartingState, mDefaultState);
-            addState(mSupplicantStartedState, mDefaultState);
-                addState(mDriverStartingState, mSupplicantStartedState);
-                addState(mDriverStartedState, mSupplicantStartedState);
-                    addState(mScanModeState, mDriverStartedState);
-                    addState(mConnectModeState, mDriverStartedState);
-                        addState(mL2ConnectedState, mConnectModeState);
-                            addState(mObtainingIpState, mL2ConnectedState);
-                            addState(mVerifyingLinkState, mL2ConnectedState);
-                            addState(mCaptivePortalCheckState, mL2ConnectedState);
-                            addState(mConnectedState, mL2ConnectedState);
-                        addState(mDisconnectingState, mConnectModeState);
-                        addState(mDisconnectedState, mConnectModeState);
-                        addState(mWpsRunningState, mConnectModeState);
-                addState(mWaitForP2pDisableState, mSupplicantStartedState);
-                addState(mDriverStoppingState, mSupplicantStartedState);
-                addState(mDriverStoppedState, mSupplicantStartedState);
-            addState(mSupplicantStoppingState, mDefaultState);
-            addState(mSoftApStartingState, mDefaultState);
-            addState(mSoftApStartedState, mDefaultState);
-                addState(mTetheringState, mSoftApStartedState);
-                addState(mTetheredState, mSoftApStartedState);
-                addState(mUntetheringState, mSoftApStartedState);
-
-        setInitialState(mInitialState);
-
-        setLogRecSize(2000);
-        setLogOnlyTransitions(false);
-        if (DBG) setDbg(true);
-
-        //start the state machine
-        start();
-
-        final Intent intent = new Intent(WifiManager.WIFI_SCAN_AVAILABLE);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_SCAN_AVAILABLE, WIFI_STATE_DISABLED);
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    /*********************************************************
-     * Methods exposed for public use
-     ********************************************************/
-
-    public Messenger getMessenger() {
-        return new Messenger(getHandler());
-    }
-    /**
-     * TODO: doc
-     */
-    public boolean syncPingSupplicant(AsyncChannel channel) {
-        Message resultMsg = channel.sendMessageSynchronously(CMD_PING_SUPPLICANT);
-        boolean result = (resultMsg.arg1 != FAILURE);
-        resultMsg.recycle();
-        return result;
-    }
-
-    /**
-     * Initiate a wifi scan.  If workSource is not null, blame is given to it,
-     * otherwise blame is given to callingUid.
-     *
-     * @param callingUid The uid initiating the wifi scan.  Blame will be given
-     *                   here unless workSource is specified.
-     * @param workSource If not null, blame is given to workSource.
-     */
-    public void startScan(int callingUid, WorkSource workSource) {
-        sendMessage(CMD_START_SCAN, callingUid, 0, workSource);
-    }
-
-    /**
-     * start or stop batched scanning using the given settings
-     */
-    private static final String BATCHED_SETTING = "batched_settings";
-    private static final String BATCHED_WORKSOURCE = "batched_worksource";
-    public void setBatchedScanSettings(BatchedScanSettings settings, int callingUid, int csph,
-            WorkSource workSource) {
-        Bundle bundle = new Bundle();
-        bundle.putParcelable(BATCHED_SETTING, settings);
-        bundle.putParcelable(BATCHED_WORKSOURCE, workSource);
-        sendMessage(CMD_SET_BATCHED_SCAN, callingUid, csph, bundle);
-    }
-
-    public List<BatchedScanResult> syncGetBatchedScanResultsList() {
-        synchronized (mBatchedScanResults) {
-            List<BatchedScanResult> batchedScanList =
-                    new ArrayList<BatchedScanResult>(mBatchedScanResults.size());
-            for(BatchedScanResult result: mBatchedScanResults) {
-                batchedScanList.add(new BatchedScanResult(result));
-            }
-            return batchedScanList;
-        }
-    }
-
-    public void requestBatchedScanPoll() {
-        sendMessage(CMD_POLL_BATCHED_SCAN);
-    }
-
-    private void startBatchedScan() {
-        if (mBatchedScanSettings == null) return;
-
-        if (mDhcpActive) {
-            if (DBG) log("not starting Batched Scans due to DHCP");
-            return;
-        }
-
-        // first grab any existing data
-        retrieveBatchedScanData();
-
-        mAlarmManager.cancel(mBatchedScanIntervalIntent);
-
-        String scansExpected = mWifiNative.setBatchedScanSettings(mBatchedScanSettings);
-        try {
-            mExpectedBatchedScans = Integer.parseInt(scansExpected);
-            setNextBatchedAlarm(mExpectedBatchedScans);
-            if (mExpectedBatchedScans > 0) noteBatchedScanStart();
-        } catch (NumberFormatException e) {
-            stopBatchedScan();
-            loge("Exception parsing WifiNative.setBatchedScanSettings response " + e);
-        }
-    }
-
-    // called from BroadcastListener
-    private void startNextBatchedScanAsync() {
-        sendMessage(CMD_START_NEXT_BATCHED_SCAN);
-    }
-
-    private void startNextBatchedScan() {
-        // first grab any existing data
-        retrieveBatchedScanData();
-
-        setNextBatchedAlarm(mExpectedBatchedScans);
-    }
-
-    private void handleBatchedScanPollRequest() {
-        if (DBG) {
-            log("handleBatchedScanPoll Request - mBatchedScanMinPollTime=" +
-                    mBatchedScanMinPollTime + " , mBatchedScanSettings=" +
-                    mBatchedScanSettings);
-        }
-        // if there is no appropriate PollTime that's because we either aren't
-        // batching or we've already set a time for a poll request
-        if (mBatchedScanMinPollTime == 0) return;
-        if (mBatchedScanSettings == null) return;
-
-        long now = System.currentTimeMillis();
-
-        if (now > mBatchedScanMinPollTime) {
-            // do the poll and reset our timers
-            startNextBatchedScan();
-        } else {
-            mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, mBatchedScanMinPollTime,
-                    mBatchedScanIntervalIntent);
-            mBatchedScanMinPollTime = 0;
-        }
-    }
-
-    // return true if new/different
-    private boolean recordBatchedScanSettings(int responsibleUid, int csph, Bundle bundle) {
-        BatchedScanSettings settings = bundle.getParcelable(BATCHED_SETTING);
-        WorkSource responsibleWorkSource = bundle.getParcelable(BATCHED_WORKSOURCE);
-
-        if (DBG) {
-            log("set batched scan to " + settings + " for uid=" + responsibleUid +
-                    ", worksource=" + responsibleWorkSource);
-        }
-        if (settings != null) {
-            if (settings.equals(mBatchedScanSettings)) return false;
-        } else {
-            if (mBatchedScanSettings == null) return false;
-        }
-        mBatchedScanSettings = settings;
-        if (responsibleWorkSource == null) responsibleWorkSource = new WorkSource(responsibleUid);
-        mBatchedScanWorkSource = responsibleWorkSource;
-        mBatchedScanCsph = csph;
-        return true;
-    }
-
-    private void stopBatchedScan() {
-        mAlarmManager.cancel(mBatchedScanIntervalIntent);
-        retrieveBatchedScanData();
-        mWifiNative.setBatchedScanSettings(null);
-        noteBatchedScanStop();
-    }
-
-    private void setNextBatchedAlarm(int scansExpected) {
-
-        if (mBatchedScanSettings == null || scansExpected < 1) return;
-
-        mBatchedScanMinPollTime = System.currentTimeMillis() +
-                mBatchedScanSettings.scanIntervalSec * 1000;
-
-        if (mBatchedScanSettings.maxScansPerBatch < scansExpected) {
-            scansExpected = mBatchedScanSettings.maxScansPerBatch;
-        }
-
-        int secToFull = mBatchedScanSettings.scanIntervalSec;
-        secToFull *= scansExpected;
-
-        int debugPeriod = SystemProperties.getInt("wifi.batchedScan.pollPeriod", 0);
-        if (debugPeriod > 0) secToFull = debugPeriod;
-
-        // set the alarm to do the next poll.  We set it a little short as we'd rather
-        // wake up wearly than miss a scan due to buffer overflow
-        mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
-                + ((secToFull - (mBatchedScanSettings.scanIntervalSec / 2)) * 1000),
-                mBatchedScanIntervalIntent);
-    }
-
-    /**
-     * Start reading new scan data
-     * Data comes in as:
-     * "scancount=5\n"
-     * "nextcount=5\n"
-     *   "apcount=3\n"
-     *   "trunc\n" (optional)
-     *     "bssid=...\n"
-     *     "ssid=...\n"
-     *     "freq=...\n" (in Mhz)
-     *     "level=...\n"
-     *     "dist=...\n" (in cm)
-     *     "distsd=...\n" (standard deviation, in cm)
-     *     "===="
-     *     "bssid=...\n"
-     *     etc
-     *     "===="
-     *     "bssid=...\n"
-     *     etc
-     *     "%%%%"
-     *   "apcount=2\n"
-     *     "bssid=...\n"
-     *     etc
-     *     "%%%%
-     *   etc
-     *   "----"
-     */
-    private final static boolean DEBUG_PARSE = false;
-    private void retrieveBatchedScanData() {
-        String rawData = mWifiNative.getBatchedScanResults();
-        if (DEBUG_PARSE) log("rawData = " + rawData);
-        mBatchedScanMinPollTime = 0;
-        if (rawData == null || rawData.equalsIgnoreCase("OK")) {
-            loge("Unexpected BatchedScanResults :" + rawData);
-            return;
-        }
-
-        int scanCount = 0;
-        final String END_OF_BATCHES = "----";
-        final String SCANCOUNT = "scancount=";
-        final String TRUNCATED = "trunc";
-        final String AGE = "age=";
-        final String DIST = "dist=";
-        final String DISTSD = "distSd=";
-
-        String splitData[] = rawData.split("\n");
-        int n = 0;
-        if (splitData[n].startsWith(SCANCOUNT)) {
-            try {
-                scanCount = Integer.parseInt(splitData[n++].substring(SCANCOUNT.length()));
-            } catch (NumberFormatException e) {
-                loge("scancount parseInt Exception from " + splitData[n]);
-            }
-        } else log("scancount not found");
-        if (scanCount == 0) {
-            loge("scanCount==0 - aborting");
-            return;
-        }
-
-        final Intent intent = new Intent(WifiManager.BATCHED_SCAN_RESULTS_AVAILABLE_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-
-        synchronized (mBatchedScanResults) {
-            mBatchedScanResults.clear();
-            BatchedScanResult batchedScanResult = new BatchedScanResult();
-
-            String bssid = null;
-            WifiSsid wifiSsid = null;
-            int level = 0;
-            int freq = 0;
-            int dist, distSd;
-            long tsf = 0;
-            dist = distSd = ScanResult.UNSPECIFIED;
-            final long now = SystemClock.elapsedRealtime();
-            final int bssidStrLen = BSSID_STR.length();
-
-            while (true) {
-                while (n < splitData.length) {
-                    if (DEBUG_PARSE) logd("parsing " + splitData[n]);
-                    if (splitData[n].equals(END_OF_BATCHES)) {
-                        if (n+1 != splitData.length) {
-                            loge("didn't consume " + (splitData.length-n));
-                        }
-                        if (mBatchedScanResults.size() > 0) {
-                            mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-                        }
-                        logd("retrieveBatchedScanResults X");
-                        return;
-                    }
-                    if ((splitData[n].equals(END_STR)) || splitData[n].equals(DELIMITER_STR)) {
-                        if (bssid != null) {
-                            batchedScanResult.scanResults.add(new ScanResult(
-                                    wifiSsid, bssid, "", level, freq, tsf, dist, distSd));
-                            wifiSsid = null;
-                            bssid = null;
-                            level = 0;
-                            freq = 0;
-                            tsf = 0;
-                            dist = distSd = ScanResult.UNSPECIFIED;
-                        }
-                        if (splitData[n].equals(END_STR)) {
-                            if (batchedScanResult.scanResults.size() != 0) {
-                                mBatchedScanResults.add(batchedScanResult);
-                                batchedScanResult = new BatchedScanResult();
-                            } else {
-                                logd("Found empty batch");
-                            }
-                        }
-                    } else if (splitData[n].equals(TRUNCATED)) {
-                        batchedScanResult.truncated = true;
-                    } else if (splitData[n].startsWith(BSSID_STR)) {
-                        bssid = new String(splitData[n].getBytes(), bssidStrLen,
-                                splitData[n].length() - bssidStrLen);
-                    } else if (splitData[n].startsWith(FREQ_STR)) {
-                        try {
-                            freq = Integer.parseInt(splitData[n].substring(FREQ_STR.length()));
-                        } catch (NumberFormatException e) {
-                            loge("Invalid freqency: " + splitData[n]);
-                            freq = 0;
-                        }
-                    } else if (splitData[n].startsWith(AGE)) {
-                        try {
-                            tsf = now - Long.parseLong(splitData[n].substring(AGE.length()));
-                            tsf *= 1000; // convert mS -> uS
-                        } catch (NumberFormatException e) {
-                            loge("Invalid timestamp: " + splitData[n]);
-                            tsf = 0;
-                        }
-                    } else if (splitData[n].startsWith(SSID_STR)) {
-                        wifiSsid = WifiSsid.createFromAsciiEncoded(
-                                splitData[n].substring(SSID_STR.length()));
-                    } else if (splitData[n].startsWith(LEVEL_STR)) {
-                        try {
-                            level = Integer.parseInt(splitData[n].substring(LEVEL_STR.length()));
-                            if (level > 0) level -= 256;
-                        } catch (NumberFormatException e) {
-                            loge("Invalid level: " + splitData[n]);
-                            level = 0;
-                        }
-                    } else if (splitData[n].startsWith(DIST)) {
-                        try {
-                            dist = Integer.parseInt(splitData[n].substring(DIST.length()));
-                        } catch (NumberFormatException e) {
-                            loge("Invalid distance: " + splitData[n]);
-                            dist = ScanResult.UNSPECIFIED;
-                        }
-                    } else if (splitData[n].startsWith(DISTSD)) {
-                        try {
-                            distSd = Integer.parseInt(splitData[n].substring(DISTSD.length()));
-                        } catch (NumberFormatException e) {
-                            loge("Invalid distanceSd: " + splitData[n]);
-                            distSd = ScanResult.UNSPECIFIED;
-                        }
-                    } else {
-                        loge("Unable to parse batched scan result line: " + splitData[n]);
-                    }
-                    n++;
-                }
-                rawData = mWifiNative.getBatchedScanResults();
-                if (DEBUG_PARSE) log("reading more data:\n" + rawData);
-                if (rawData == null) {
-                    loge("Unexpected null BatchedScanResults");
-                    return;
-                }
-                splitData = rawData.split("\n");
-                if (splitData.length == 0 || splitData[0].equals("ok")) {
-                    loge("batch scan results just ended!");
-                    if (mBatchedScanResults.size() > 0) {
-                        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-                    }
-                    return;
-                }
-                n = 0;
-            }
-        }
-    }
-
-    // If workSource is not null, blame is given to it, otherwise blame is given to callingUid.
-    private void noteScanStart(int callingUid, WorkSource workSource) {
-        if (mScanWorkSource == null && (callingUid != UNKNOWN_SCAN_SOURCE || workSource != null)) {
-            mScanWorkSource = workSource != null ? workSource : new WorkSource(callingUid);
-            try {
-                mBatteryStats.noteWifiScanStartedFromSource(mScanWorkSource);
-            } catch (RemoteException e) {
-                log(e.toString());
-            }
-        }
-    }
-
-    private void noteScanEnd() {
-        if (mScanWorkSource != null) {
-            try {
-                mBatteryStats.noteWifiScanStoppedFromSource(mScanWorkSource);
-            } catch (RemoteException e) {
-                log(e.toString());
-            } finally {
-                mScanWorkSource = null;
-            }
-        }
-    }
-
-    private void noteBatchedScanStart() {
-        // note the end of a previous scan set
-        if (mNotedBatchedScanWorkSource != null &&
-                (mNotedBatchedScanWorkSource.equals(mBatchedScanWorkSource) == false ||
-                 mNotedBatchedScanCsph != mBatchedScanCsph)) {
-            try {
-                mBatteryStats.noteWifiBatchedScanStoppedFromSource(mNotedBatchedScanWorkSource);
-            } catch (RemoteException e) {
-                log(e.toString());
-            } finally {
-                mNotedBatchedScanWorkSource = null;
-                mNotedBatchedScanCsph = 0;
-            }
-        }
-        // note the start of the new
-        try {
-            mBatteryStats.noteWifiBatchedScanStartedFromSource(mBatchedScanWorkSource,
-                    mBatchedScanCsph);
-            mNotedBatchedScanWorkSource = mBatchedScanWorkSource;
-            mNotedBatchedScanCsph = mBatchedScanCsph;
-        } catch (RemoteException e) {
-            log(e.toString());
-        }
-    }
-
-    private void noteBatchedScanStop() {
-        if (mNotedBatchedScanWorkSource != null) {
-            try {
-                mBatteryStats.noteWifiBatchedScanStoppedFromSource(mNotedBatchedScanWorkSource);
-            } catch (RemoteException e) {
-                log(e.toString());
-            } finally {
-                mNotedBatchedScanWorkSource = null;
-                mNotedBatchedScanCsph = 0;
-            }
-        }
-    }
-
-    private void startScanNative(int type) {
-        mWifiNative.scan(type);
-        mScanResultIsPending = true;
-    }
-
-    /**
-     * TODO: doc
-     */
-    public void setSupplicantRunning(boolean enable) {
-        if (enable) {
-            sendMessage(CMD_START_SUPPLICANT);
-        } else {
-            sendMessage(CMD_STOP_SUPPLICANT);
-        }
-    }
-
-    /**
-     * TODO: doc
-     */
-    public void setHostApRunning(WifiConfiguration wifiConfig, boolean enable) {
-        if (enable) {
-            sendMessage(CMD_START_AP, wifiConfig);
-        } else {
-            sendMessage(CMD_STOP_AP);
-        }
-    }
-
-    public void setWifiApConfiguration(WifiConfiguration config) {
-        mWifiApConfigChannel.sendMessage(CMD_SET_AP_CONFIG, config);
-    }
-
-    public WifiConfiguration syncGetWifiApConfiguration() {
-        Message resultMsg = mWifiApConfigChannel.sendMessageSynchronously(CMD_REQUEST_AP_CONFIG);
-        WifiConfiguration ret = (WifiConfiguration) resultMsg.obj;
-        resultMsg.recycle();
-        return ret;
-    }
-
-    /**
-     * TODO: doc
-     */
-    public int syncGetWifiState() {
-        return mWifiState.get();
-    }
-
-    /**
-     * TODO: doc
-     */
-    public String syncGetWifiStateByName() {
-        switch (mWifiState.get()) {
-            case WIFI_STATE_DISABLING:
-                return "disabling";
-            case WIFI_STATE_DISABLED:
-                return "disabled";
-            case WIFI_STATE_ENABLING:
-                return "enabling";
-            case WIFI_STATE_ENABLED:
-                return "enabled";
-            case WIFI_STATE_UNKNOWN:
-                return "unknown state";
-            default:
-                return "[invalid state]";
-        }
-    }
-
-    /**
-     * TODO: doc
-     */
-    public int syncGetWifiApState() {
-        return mWifiApState.get();
-    }
-
-    /**
-     * TODO: doc
-     */
-    public String syncGetWifiApStateByName() {
-        switch (mWifiApState.get()) {
-            case WIFI_AP_STATE_DISABLING:
-                return "disabling";
-            case WIFI_AP_STATE_DISABLED:
-                return "disabled";
-            case WIFI_AP_STATE_ENABLING:
-                return "enabling";
-            case WIFI_AP_STATE_ENABLED:
-                return "enabled";
-            case WIFI_AP_STATE_FAILED:
-                return "failed";
-            default:
-                return "[invalid state]";
-        }
-    }
-
-    /**
-     * Get status information for the current connection, if any.
-     * @return a {@link WifiInfo} object containing information about the current connection
-     *
-     */
-    public WifiInfo syncRequestConnectionInfo() {
-        return mWifiInfo;
-    }
-
-    public DhcpResults syncGetDhcpResults() {
-        synchronized (mDhcpResultsLock) {
-            return new DhcpResults(mDhcpResults);
-        }
-    }
-
-    /**
-     * TODO: doc
-     */
-    public void setDriverStart(boolean enable) {
-        if (enable) {
-            sendMessage(CMD_START_DRIVER);
-        } else {
-            sendMessage(CMD_STOP_DRIVER);
-        }
-    }
-
-    public void captivePortalCheckComplete() {
-        sendMessage(CMD_CAPTIVE_CHECK_COMPLETE);
-    }
-
-    /**
-     * TODO: doc
-     */
-    public void setOperationalMode(int mode) {
-        if (DBG) log("setting operational mode to " + String.valueOf(mode));
-        sendMessage(CMD_SET_OPERATIONAL_MODE, mode, 0);
-    }
-
-    /**
-     * TODO: doc
-     */
-    public List<ScanResult> syncGetScanResultsList() {
-        synchronized (mScanResultCache) {
-            List<ScanResult> scanList = new ArrayList<ScanResult>();
-            for(ScanResult result: mScanResults) {
-                scanList.add(new ScanResult(result));
-            }
-            return scanList;
-        }
-    }
-
-    /**
-     * Disconnect from Access Point
-     */
-    public void disconnectCommand() {
-        sendMessage(CMD_DISCONNECT);
-    }
-
-    /**
-     * Initiate a reconnection to AP
-     */
-    public void reconnectCommand() {
-        sendMessage(CMD_RECONNECT);
-    }
-
-    /**
-     * Initiate a re-association to AP
-     */
-    public void reassociateCommand() {
-        sendMessage(CMD_REASSOCIATE);
-    }
-
-    /**
-     * Reload networks and then reconnect; helps load correct data for TLS networks
-     */
-
-    public void reloadTlsNetworksAndReconnect() {
-        sendMessage(CMD_RELOAD_TLS_AND_RECONNECT);
-    }
-
-    /**
-     * Add a network synchronously
-     *
-     * @return network id of the new network
-     */
-    public int syncAddOrUpdateNetwork(AsyncChannel channel, WifiConfiguration config) {
-        Message resultMsg = channel.sendMessageSynchronously(CMD_ADD_OR_UPDATE_NETWORK, config);
-        int result = resultMsg.arg1;
-        resultMsg.recycle();
-        return result;
-    }
-
-    public List<WifiConfiguration> syncGetConfiguredNetworks(AsyncChannel channel) {
-        Message resultMsg = channel.sendMessageSynchronously(CMD_GET_CONFIGURED_NETWORKS);
-        List<WifiConfiguration> result = (List<WifiConfiguration>) resultMsg.obj;
-        resultMsg.recycle();
-        return result;
-    }
-
-    /**
-     * Delete a network
-     *
-     * @param networkId id of the network to be removed
-     */
-    public boolean syncRemoveNetwork(AsyncChannel channel, int networkId) {
-        Message resultMsg = channel.sendMessageSynchronously(CMD_REMOVE_NETWORK, networkId);
-        boolean result = (resultMsg.arg1 != FAILURE);
-        resultMsg.recycle();
-        return result;
-    }
-
-    /**
-     * Enable a network
-     *
-     * @param netId network id of the network
-     * @param disableOthers true, if all other networks have to be disabled
-     * @return {@code true} if the operation succeeds, {@code false} otherwise
-     */
-    public boolean syncEnableNetwork(AsyncChannel channel, int netId, boolean disableOthers) {
-        Message resultMsg = channel.sendMessageSynchronously(CMD_ENABLE_NETWORK, netId,
-                disableOthers ? 1 : 0);
-        boolean result = (resultMsg.arg1 != FAILURE);
-        resultMsg.recycle();
-        return result;
-    }
-
-    /**
-     * Disable a network
-     *
-     * @param netId network id of the network
-     * @return {@code true} if the operation succeeds, {@code false} otherwise
-     */
-    public boolean syncDisableNetwork(AsyncChannel channel, int netId) {
-        Message resultMsg = channel.sendMessageSynchronously(WifiManager.DISABLE_NETWORK, netId);
-        boolean result = (resultMsg.arg1 != WifiManager.DISABLE_NETWORK_FAILED);
-        resultMsg.recycle();
-        return result;
-    }
-
-    /**
-     * Blacklist a BSSID. This will avoid the AP if there are
-     * alternate APs to connect
-     *
-     * @param bssid BSSID of the network
-     */
-    public void addToBlacklist(String bssid) {
-        sendMessage(CMD_BLACKLIST_NETWORK, bssid);
-    }
-
-    /**
-     * Clear the blacklist list
-     *
-     */
-    public void clearBlacklist() {
-        sendMessage(CMD_CLEAR_BLACKLIST);
-    }
-
-    public void enableRssiPolling(boolean enabled) {
-       sendMessage(CMD_ENABLE_RSSI_POLL, enabled ? 1 : 0, 0);
-    }
-
-    public void enableBackgroundScanCommand(boolean enabled) {
-       sendMessage(CMD_ENABLE_BACKGROUND_SCAN, enabled ? 1 : 0, 0);
-    }
-
-    public void enableAllNetworks() {
-        sendMessage(CMD_ENABLE_ALL_NETWORKS);
-    }
-
-    /**
-     * Start filtering Multicast v4 packets
-     */
-    public void startFilteringMulticastV4Packets() {
-        mFilteringMulticastV4Packets.set(true);
-        sendMessage(CMD_START_PACKET_FILTERING, MULTICAST_V4, 0);
-    }
-
-    /**
-     * Stop filtering Multicast v4 packets
-     */
-    public void stopFilteringMulticastV4Packets() {
-        mFilteringMulticastV4Packets.set(false);
-        sendMessage(CMD_STOP_PACKET_FILTERING, MULTICAST_V4, 0);
-    }
-
-    /**
-     * Start filtering Multicast v4 packets
-     */
-    public void startFilteringMulticastV6Packets() {
-        sendMessage(CMD_START_PACKET_FILTERING, MULTICAST_V6, 0);
-    }
-
-    /**
-     * Stop filtering Multicast v4 packets
-     */
-    public void stopFilteringMulticastV6Packets() {
-        sendMessage(CMD_STOP_PACKET_FILTERING, MULTICAST_V6, 0);
-    }
-
-    /**
-     * Set high performance mode of operation.
-     * Enabling would set active power mode and disable suspend optimizations;
-     * disabling would set auto power mode and enable suspend optimizations
-     * @param enable true if enable, false otherwise
-     */
-    public void setHighPerfModeEnabled(boolean enable) {
-        sendMessage(CMD_SET_HIGH_PERF_MODE, enable ? 1 : 0, 0);
-    }
-
-    /**
-     * Set the country code
-     * @param countryCode following ISO 3166 format
-     * @param persist {@code true} if the setting should be remembered.
-     */
-    public void setCountryCode(String countryCode, boolean persist) {
-        // If it's a good country code, apply after the current
-        // wifi connection is terminated; ignore resetting of code
-        // for now (it is unclear what the chipset should do when
-        // country code is reset)
-        int countryCodeSequence = mCountryCodeSequence.incrementAndGet();
-        if (TextUtils.isEmpty(countryCode)) {
-            log("Ignoring resetting of country code");
-        } else {
-            sendMessage(CMD_SET_COUNTRY_CODE, countryCodeSequence, persist ? 1 : 0, countryCode);
-        }
-    }
-
-    /**
-     * Set the operational frequency band
-     * @param band
-     * @param persist {@code true} if the setting should be remembered.
-     */
-    public void setFrequencyBand(int band, boolean persist) {
-        if (persist) {
-            Settings.Global.putInt(mContext.getContentResolver(),
-                    Settings.Global.WIFI_FREQUENCY_BAND,
-                    band);
-        }
-        sendMessage(CMD_SET_FREQUENCY_BAND, band, 0);
-    }
-
-    /**
-     * Enable TDLS for a specific MAC address
-     */
-    public void enableTdls(String remoteMacAddress, boolean enable) {
-        int enabler = enable ? 1 : 0;
-        sendMessage(CMD_ENABLE_TDLS, enabler, 0, remoteMacAddress);
-    }
-
-    /**
-     * Returns the operational frequency band
-     */
-    public int getFrequencyBand() {
-        return mFrequencyBand.get();
-    }
-
-    /**
-     * Returns the wifi configuration file
-     */
-    public String getConfigFile() {
-        return mWifiConfigStore.getConfigFile();
-    }
-
-    /**
-     * Send a message indicating bluetooth adapter connection state changed
-     */
-    public void sendBluetoothAdapterStateChange(int state) {
-        sendMessage(CMD_BLUETOOTH_ADAPTER_STATE_CHANGE, state, 0);
-    }
-
-    /**
-     * Save configuration on supplicant
-     *
-     * @return {@code true} if the operation succeeds, {@code false} otherwise
-     *
-     * TODO: deprecate this
-     */
-    public boolean syncSaveConfig(AsyncChannel channel) {
-        Message resultMsg = channel.sendMessageSynchronously(CMD_SAVE_CONFIG);
-        boolean result = (resultMsg.arg1 != FAILURE);
-        resultMsg.recycle();
-        return result;
-    }
-
-    public void updateBatteryWorkSource(WorkSource newSource) {
-        synchronized (mRunningWifiUids) {
-            try {
-                if (newSource != null) {
-                    mRunningWifiUids.set(newSource);
-                }
-                if (mIsRunning) {
-                    if (mReportedRunning) {
-                        // If the work source has changed since last time, need
-                        // to remove old work from battery stats.
-                        if (mLastRunningWifiUids.diff(mRunningWifiUids)) {
-                            mBatteryStats.noteWifiRunningChanged(mLastRunningWifiUids,
-                                    mRunningWifiUids);
-                            mLastRunningWifiUids.set(mRunningWifiUids);
-                        }
-                    } else {
-                        // Now being started, report it.
-                        mBatteryStats.noteWifiRunning(mRunningWifiUids);
-                        mLastRunningWifiUids.set(mRunningWifiUids);
-                        mReportedRunning = true;
-                    }
-                } else {
-                    if (mReportedRunning) {
-                        // Last reported we were running, time to stop.
-                        mBatteryStats.noteWifiStopped(mLastRunningWifiUids);
-                        mLastRunningWifiUids.clear();
-                        mReportedRunning = false;
-                    }
-                }
-                mWakeLock.setWorkSource(newSource);
-            } catch (RemoteException ignore) {
-            }
-        }
-    }
-
-    @Override
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        super.dump(fd, pw, args);
-        mSupplicantStateTracker.dump(fd, pw, args);
-        pw.println("mLinkProperties " + mLinkProperties);
-        pw.println("mWifiInfo " + mWifiInfo);
-        pw.println("mDhcpResults " + mDhcpResults);
-        pw.println("mNetworkInfo " + mNetworkInfo);
-        pw.println("mLastSignalLevel " + mLastSignalLevel);
-        pw.println("mLastBssid " + mLastBssid);
-        pw.println("mLastNetworkId " + mLastNetworkId);
-        pw.println("mReconnectCount " + mReconnectCount);
-        pw.println("mOperationalMode " + mOperationalMode);
-        pw.println("mUserWantsSuspendOpt " + mUserWantsSuspendOpt);
-        pw.println("mSuspendOptNeedsDisabled " + mSuspendOptNeedsDisabled);
-        pw.println("Supplicant status " + mWifiNative.status());
-        pw.println("mEnableBackgroundScan " + mEnableBackgroundScan);
-        pw.println("mLastSetCountryCode " + mLastSetCountryCode);
-        pw.println("mPersistedCountryCode " + mPersistedCountryCode);
-        pw.println();
-        mWifiConfigStore.dump(fd, pw, args);
-    }
-
-    /*********************************************************
-     * Internal private functions
-     ********************************************************/
-
-    private void handleScreenStateChanged(boolean screenOn) {
-        if (DBG) log("handleScreenStateChanged: " + screenOn);
-        enableRssiPolling(screenOn);
-        if (mBackgroundScanSupported) {
-            enableBackgroundScanCommand(screenOn == false);
-        }
-
-        if (screenOn) enableAllNetworks();
-        if (mUserWantsSuspendOpt.get()) {
-            if (screenOn) {
-                sendMessage(CMD_SET_SUSPEND_OPT_ENABLED, 0, 0);
-            } else {
-                //Allow 2s for suspend optimizations to be set
-                mSuspendWakeLock.acquire(2000);
-                sendMessage(CMD_SET_SUSPEND_OPT_ENABLED, 1, 0);
-            }
-        }
-        mScreenBroadcastReceived.set(true);
-    }
-
-    private void checkAndSetConnectivityInstance() {
-        if (mCm == null) {
-            mCm = (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
-        }
-    }
-
-    private boolean startTethering(ArrayList<String> available) {
-
-        boolean wifiAvailable = false;
-
-        checkAndSetConnectivityInstance();
-
-        String[] wifiRegexs = mCm.getTetherableWifiRegexs();
-
-        for (String intf : available) {
-            for (String regex : wifiRegexs) {
-                if (intf.matches(regex)) {
-
-                    InterfaceConfiguration ifcg = null;
-                    try {
-                        ifcg = mNwService.getInterfaceConfig(intf);
-                        if (ifcg != null) {
-                            /* IP/netmask: 192.168.43.1/255.255.255.0 */
-                            ifcg.setLinkAddress(new LinkAddress(
-                                    NetworkUtils.numericToInetAddress("192.168.43.1"), 24));
-                            ifcg.setInterfaceUp();
-
-                            mNwService.setInterfaceConfig(intf, ifcg);
-                        }
-                    } catch (Exception e) {
-                        loge("Error configuring interface " + intf + ", :" + e);
-                        return false;
-                    }
-
-                    if(mCm.tether(intf) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
-                        loge("Error tethering on " + intf);
-                        return false;
-                    }
-                    mTetherInterfaceName = intf;
-                    return true;
-                }
-            }
-        }
-        // We found no interfaces to tether
-        return false;
-    }
-
-    private void stopTethering() {
-
-        checkAndSetConnectivityInstance();
-
-        /* Clear the interface config to allow dhcp correctly configure new
-           ip settings */
-        InterfaceConfiguration ifcg = null;
-        try {
-            ifcg = mNwService.getInterfaceConfig(mTetherInterfaceName);
-            if (ifcg != null) {
-                ifcg.setLinkAddress(
-                        new LinkAddress(NetworkUtils.numericToInetAddress("0.0.0.0"), 0));
-                mNwService.setInterfaceConfig(mTetherInterfaceName, ifcg);
-            }
-        } catch (Exception e) {
-            loge("Error resetting interface " + mTetherInterfaceName + ", :" + e);
-        }
-
-        if (mCm.untether(mTetherInterfaceName) != ConnectivityManager.TETHER_ERROR_NO_ERROR) {
-            loge("Untether initiate failed!");
-        }
-    }
-
-    private boolean isWifiTethered(ArrayList<String> active) {
-
-        checkAndSetConnectivityInstance();
-
-        String[] wifiRegexs = mCm.getTetherableWifiRegexs();
-        for (String intf : active) {
-            for (String regex : wifiRegexs) {
-                if (intf.matches(regex)) {
-                    return true;
-                }
-            }
-        }
-        // We found no interfaces that are tethered
-        return false;
-    }
-
-    /**
-     * Set the country code from the system setting value, if any.
-     */
-    private void setCountryCode() {
-        String countryCode = Settings.Global.getString(mContext.getContentResolver(),
-                Settings.Global.WIFI_COUNTRY_CODE);
-        if (countryCode != null && !countryCode.isEmpty()) {
-            setCountryCode(countryCode, false);
-        } else {
-            //use driver default
-        }
-    }
-
-    /**
-     * Set the frequency band from the system setting value, if any.
-     */
-    private void setFrequencyBand() {
-        int band = Settings.Global.getInt(mContext.getContentResolver(),
-                Settings.Global.WIFI_FREQUENCY_BAND, WifiManager.WIFI_FREQUENCY_BAND_AUTO);
-        setFrequencyBand(band, false);
-    }
-
-    private void setSuspendOptimizationsNative(int reason, boolean enabled) {
-        if (DBG) log("setSuspendOptimizationsNative: " + reason + " " + enabled);
-        if (enabled) {
-            mSuspendOptNeedsDisabled &= ~reason;
-            /* None of dhcp, screen or highperf need it disabled and user wants it enabled */
-            if (mSuspendOptNeedsDisabled == 0 && mUserWantsSuspendOpt.get()) {
-                mWifiNative.setSuspendOptimizations(true);
-            }
-        } else {
-            mSuspendOptNeedsDisabled |= reason;
-            mWifiNative.setSuspendOptimizations(false);
-        }
-    }
-
-    private void setSuspendOptimizations(int reason, boolean enabled) {
-        if (DBG) log("setSuspendOptimizations: " + reason + " " + enabled);
-        if (enabled) {
-            mSuspendOptNeedsDisabled &= ~reason;
-        } else {
-            mSuspendOptNeedsDisabled |= reason;
-        }
-        if (DBG) log("mSuspendOptNeedsDisabled " + mSuspendOptNeedsDisabled);
-    }
-
-    private void setWifiState(int wifiState) {
-        final int previousWifiState = mWifiState.get();
-
-        try {
-            if (wifiState == WIFI_STATE_ENABLED) {
-                mBatteryStats.noteWifiOn();
-            } else if (wifiState == WIFI_STATE_DISABLED) {
-                mBatteryStats.noteWifiOff();
-            }
-        } catch (RemoteException e) {
-            loge("Failed to note battery stats in wifi");
-        }
-
-        mWifiState.set(wifiState);
-
-        if (DBG) log("setWifiState: " + syncGetWifiStateByName());
-
-        final Intent intent = new Intent(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_WIFI_STATE, wifiState);
-        intent.putExtra(WifiManager.EXTRA_PREVIOUS_WIFI_STATE, previousWifiState);
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void setWifiApState(int wifiApState) {
-        final int previousWifiApState = mWifiApState.get();
-
-        try {
-            if (wifiApState == WIFI_AP_STATE_ENABLED) {
-                mBatteryStats.noteWifiOn();
-            } else if (wifiApState == WIFI_AP_STATE_DISABLED) {
-                mBatteryStats.noteWifiOff();
-            }
-        } catch (RemoteException e) {
-            loge("Failed to note battery stats in wifi");
-        }
-
-        // Update state
-        mWifiApState.set(wifiApState);
-
-        if (DBG) log("setWifiApState: " + syncGetWifiApStateByName());
-
-        final Intent intent = new Intent(WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_WIFI_AP_STATE, wifiApState);
-        intent.putExtra(WifiManager.EXTRA_PREVIOUS_WIFI_AP_STATE, previousWifiApState);
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private static final String ID_STR = "id=";
-    private static final String BSSID_STR = "bssid=";
-    private static final String FREQ_STR = "freq=";
-    private static final String LEVEL_STR = "level=";
-    private static final String TSF_STR = "tsf=";
-    private static final String FLAGS_STR = "flags=";
-    private static final String SSID_STR = "ssid=";
-    private static final String DELIMITER_STR = "====";
-    private static final String END_STR = "####";
-
-    /**
-     * Format:
-     *
-     * id=1
-     * bssid=68:7f:76:d7:1a:6e
-     * freq=2412
-     * level=-44
-     * tsf=1344626243700342
-     * flags=[WPA2-PSK-CCMP][WPS][ESS]
-     * ssid=zfdy
-     * ====
-     * id=2
-     * bssid=68:5f:74:d7:1a:6f
-     * freq=5180
-     * level=-73
-     * tsf=1344626243700373
-     * flags=[WPA2-PSK-CCMP][WPS][ESS]
-     * ssid=zuby
-     * ====
-     */
-    private void setScanResults() {
-        String bssid = "";
-        int level = 0;
-        int freq = 0;
-        long tsf = 0;
-        String flags = "";
-        WifiSsid wifiSsid = null;
-        String scanResults;
-        String tmpResults;
-        StringBuffer scanResultsBuf = new StringBuffer();
-        int sid = 0;
-
-        while (true) {
-            tmpResults = mWifiNative.scanResults(sid);
-            if (TextUtils.isEmpty(tmpResults)) break;
-            scanResultsBuf.append(tmpResults);
-            scanResultsBuf.append("\n");
-            String[] lines = tmpResults.split("\n");
-            sid = -1;
-            for (int i=lines.length - 1; i >= 0; i--) {
-                if (lines[i].startsWith(END_STR)) {
-                    break;
-                } else if (lines[i].startsWith(ID_STR)) {
-                    try {
-                        sid = Integer.parseInt(lines[i].substring(ID_STR.length())) + 1;
-                    } catch (NumberFormatException e) {
-                        // Nothing to do
-                    }
-                    break;
-                }
-            }
-            if (sid == -1) break;
-        }
-
-        scanResults = scanResultsBuf.toString();
-        if (TextUtils.isEmpty(scanResults)) {
-           return;
-        }
-
-        // note that all these splits and substrings keep references to the original
-        // huge string buffer while the amount we really want is generally pretty small
-        // so make copies instead (one example b/11087956 wasted 400k of heap here).
-        synchronized(mScanResultCache) {
-            mScanResults = new ArrayList<ScanResult>();
-            String[] lines = scanResults.split("\n");
-            final int bssidStrLen = BSSID_STR.length();
-            final int flagLen = FLAGS_STR.length();
-
-            for (String line : lines) {
-                if (line.startsWith(BSSID_STR)) {
-                    bssid = new String(line.getBytes(), bssidStrLen, line.length() - bssidStrLen);
-                } else if (line.startsWith(FREQ_STR)) {
-                    try {
-                        freq = Integer.parseInt(line.substring(FREQ_STR.length()));
-                    } catch (NumberFormatException e) {
-                        freq = 0;
-                    }
-                } else if (line.startsWith(LEVEL_STR)) {
-                    try {
-                        level = Integer.parseInt(line.substring(LEVEL_STR.length()));
-                        /* some implementations avoid negative values by adding 256
-                         * so we need to adjust for that here.
-                         */
-                        if (level > 0) level -= 256;
-                    } catch(NumberFormatException e) {
-                        level = 0;
-                    }
-                } else if (line.startsWith(TSF_STR)) {
-                    try {
-                        tsf = Long.parseLong(line.substring(TSF_STR.length()));
-                    } catch (NumberFormatException e) {
-                        tsf = 0;
-                    }
-                } else if (line.startsWith(FLAGS_STR)) {
-                    flags = new String(line.getBytes(), flagLen, line.length() - flagLen);
-                } else if (line.startsWith(SSID_STR)) {
-                    wifiSsid = WifiSsid.createFromAsciiEncoded(
-                            line.substring(SSID_STR.length()));
-                } else if (line.startsWith(DELIMITER_STR) || line.startsWith(END_STR)) {
-                    if (bssid != null) {
-                        String ssid = (wifiSsid != null) ? wifiSsid.toString() : WifiSsid.NONE;
-                        String key = bssid + ssid;
-                        ScanResult scanResult = mScanResultCache.get(key);
-                        if (scanResult != null) {
-                            scanResult.level = level;
-                            scanResult.wifiSsid = wifiSsid;
-                            // Keep existing API
-                            scanResult.SSID = (wifiSsid != null) ? wifiSsid.toString() :
-                                    WifiSsid.NONE;
-                            scanResult.capabilities = flags;
-                            scanResult.frequency = freq;
-                            scanResult.timestamp = tsf;
-                        } else {
-                            scanResult =
-                                new ScanResult(
-                                        wifiSsid, bssid, flags, level, freq, tsf);
-                            mScanResultCache.put(key, scanResult);
-                        }
-                        mScanResults.add(scanResult);
-                    }
-                    bssid = null;
-                    level = 0;
-                    freq = 0;
-                    tsf = 0;
-                    flags = "";
-                    wifiSsid = null;
-                }
-            }
-        }
-    }
-
-    /*
-     * Fetch RSSI and linkspeed on current connection
-     */
-    private void fetchRssiAndLinkSpeedNative() {
-        int newRssi = -1;
-        int newLinkSpeed = -1;
-
-        String signalPoll = mWifiNative.signalPoll();
-
-        if (signalPoll != null) {
-            String[] lines = signalPoll.split("\n");
-            for (String line : lines) {
-                String[] prop = line.split("=");
-                if (prop.length < 2) continue;
-                try {
-                    if (prop[0].equals("RSSI")) {
-                        newRssi = Integer.parseInt(prop[1]);
-                    } else if (prop[0].equals("LINKSPEED")) {
-                        newLinkSpeed = Integer.parseInt(prop[1]);
-                    }
-                } catch (NumberFormatException e) {
-                    //Ignore, defaults on rssi and linkspeed are assigned
-                }
-            }
-        }
-
-        if (newRssi != -1 && MIN_RSSI < newRssi && newRssi < MAX_RSSI) { // screen out invalid values
-            /* some implementations avoid negative values by adding 256
-             * so we need to adjust for that here.
-             */
-            if (newRssi > 0) newRssi -= 256;
-            mWifiInfo.setRssi(newRssi);
-            /*
-             * Rather then sending the raw RSSI out every time it
-             * changes, we precalculate the signal level that would
-             * be displayed in the status bar, and only send the
-             * broadcast if that much more coarse-grained number
-             * changes. This cuts down greatly on the number of
-             * broadcasts, at the cost of not informing others
-             * interested in RSSI of all the changes in signal
-             * level.
-             */
-            int newSignalLevel = WifiManager.calculateSignalLevel(newRssi, WifiManager.RSSI_LEVELS);
-            if (newSignalLevel != mLastSignalLevel) {
-                sendRssiChangeBroadcast(newRssi);
-            }
-            mLastSignalLevel = newSignalLevel;
-        } else {
-            mWifiInfo.setRssi(MIN_RSSI);
-        }
-
-        if (newLinkSpeed != -1) {
-            mWifiInfo.setLinkSpeed(newLinkSpeed);
-        }
-    }
-
-    /*
-     * Fetch TX packet counters on current connection
-     */
-    private void fetchPktcntNative(RssiPacketCountInfo info) {
-        String pktcntPoll = mWifiNative.pktcntPoll();
-
-        if (pktcntPoll != null) {
-            String[] lines = pktcntPoll.split("\n");
-            for (String line : lines) {
-                String[] prop = line.split("=");
-                if (prop.length < 2) continue;
-                try {
-                    if (prop[0].equals("TXGOOD")) {
-                        info.txgood = Integer.parseInt(prop[1]);
-                    } else if (prop[0].equals("TXBAD")) {
-                        info.txbad = Integer.parseInt(prop[1]);
-                    }
-                } catch (NumberFormatException e) {
-                    //Ignore
-                }
-            }
-        }
-    }
-
-    /**
-     * Updates mLinkProperties by merging information from various sources.
-     *
-     * This is needed because the information in mLinkProperties comes from multiple sources (DHCP,
-     * netlink, static configuration, ...). When one of these sources of information has updated
-     * link properties, we can't just assign them to mLinkProperties or we'd lose track of the
-     * information that came from other sources. Instead, when one of those sources has new
-     * information, we update the object that tracks the information from that source and then
-     * call this method to apply the change to mLinkProperties.
-     *
-     * The information in mLinkProperties is currently obtained as follows:
-     * - Interface name: set in the constructor.
-     * - IPv4 and IPv6 addresses: netlink, via mInterfaceObserver.
-     * - IPv4 routes, DNS servers, and domains: DHCP.
-     * - HTTP proxy: the wifi config store.
-     */
-    private void updateLinkProperties() {
-        LinkProperties newLp = new LinkProperties();
-
-        // Interface name and proxy are locally configured.
-        newLp.setInterfaceName(mInterfaceName);
-        newLp.setHttpProxy(mWifiConfigStore.getProxyProperties(mLastNetworkId));
-
-        // IPv4 and IPv6 addresses come from netlink.
-        newLp.setLinkAddresses(mNetlinkLinkProperties.getLinkAddresses());
-
-        // For now, routing and DNS only come from DHCP or static configuration. In the future,
-        // we'll need to merge IPv6 DNS servers and domains coming from netlink.
-        synchronized (mDhcpResultsLock) {
-            // Even when we're using static configuration, we don't need to look at the config
-            // store, because static IP configuration also populates mDhcpResults.
-            if ((mDhcpResults != null) && (mDhcpResults.linkProperties != null)) {
-                LinkProperties lp = mDhcpResults.linkProperties;
-                for (RouteInfo route: lp.getRoutes()) {
-                    newLp.addRoute(route);
-                }
-                for (InetAddress dns: lp.getDnses()) {
-                    newLp.addDns(dns);
-                }
-                newLp.setDomains(lp.getDomains());
-            }
-        }
-
-        // If anything has changed, and we're already connected, send out a notification.
-        // If we're still connecting, apps will be notified when we connect.
-        if (!newLp.equals(mLinkProperties)) {
-            if (DBG) {
-                log("Link configuration changed for netId: " + mLastNetworkId
-                        + " old: " + mLinkProperties + "new: " + newLp);
-            }
-            mLinkProperties = newLp;
-            if (getNetworkDetailedState() == DetailedState.CONNECTED) {
-                sendLinkConfigurationChangedBroadcast();
-            }
-        }
-    }
-
-    /**
-     * Clears all our link properties.
-     */
-    private void clearLinkProperties() {
-        // If the network used DHCP, clear the LinkProperties we stored in the config store.
-        if (!mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
-            mWifiConfigStore.clearLinkProperties(mLastNetworkId);
-        }
-
-        // Clear the link properties obtained from DHCP and netlink.
-        synchronized(mDhcpResultsLock) {
-            if (mDhcpResults != null && mDhcpResults.linkProperties != null) {
-                mDhcpResults.linkProperties.clear();
-            }
-        }
-        mNetlinkLinkProperties.clear();
-
-        // Now clear the merged link properties.
-        mLinkProperties.clear();
-    }
-
-    private int getMaxDhcpRetries() {
-        return Settings.Global.getInt(mContext.getContentResolver(),
-                                      Settings.Global.WIFI_MAX_DHCP_RETRY_COUNT,
-                                      DEFAULT_MAX_DHCP_RETRIES);
-    }
-
-    private void sendScanResultsAvailableBroadcast() {
-        noteScanEnd();
-        Intent intent = new Intent(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendRssiChangeBroadcast(final int newRssi) {
-        Intent intent = new Intent(WifiManager.RSSI_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_NEW_RSSI, newRssi);
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendNetworkStateChangeBroadcast(String bssid) {
-        Intent intent = new Intent(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_NETWORK_INFO, new NetworkInfo(mNetworkInfo));
-        intent.putExtra(WifiManager.EXTRA_LINK_PROPERTIES, new LinkProperties (mLinkProperties));
-        if (bssid != null)
-            intent.putExtra(WifiManager.EXTRA_BSSID, bssid);
-        if (mNetworkInfo.getDetailedState() == DetailedState.VERIFYING_POOR_LINK ||
-                mNetworkInfo.getDetailedState() == DetailedState.CONNECTED) {
-            intent.putExtra(WifiManager.EXTRA_WIFI_INFO, new WifiInfo(mWifiInfo));
-        }
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendLinkConfigurationChangedBroadcast() {
-        Intent intent = new Intent(WifiManager.LINK_CONFIGURATION_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_LINK_PROPERTIES, new LinkProperties(mLinkProperties));
-        mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendSupplicantConnectionChangedBroadcast(boolean connected) {
-        Intent intent = new Intent(WifiManager.SUPPLICANT_CONNECTION_CHANGE_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiManager.EXTRA_SUPPLICANT_CONNECTED, connected);
-        mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    /**
-     * Record the detailed state of a network.
-     * @param state the new {@code DetailedState}
-     */
-    private void setNetworkDetailedState(NetworkInfo.DetailedState state) {
-        if (DBG) {
-            log("setDetailed state, old ="
-                    + mNetworkInfo.getDetailedState() + " and new state=" + state);
-        }
-
-        if (state != mNetworkInfo.getDetailedState()) {
-            mNetworkInfo.setDetailedState(state, null, mWifiInfo.getSSID());
-        }
-    }
-
-    private DetailedState getNetworkDetailedState() {
-        return mNetworkInfo.getDetailedState();
-    }
-
-
-    private SupplicantState handleSupplicantStateChange(Message message) {
-        StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
-        SupplicantState state = stateChangeResult.state;
-        // Supplicant state change
-        // [31-13] Reserved for future use
-        // [8 - 0] Supplicant state (as defined in SupplicantState.java)
-        // 50023 supplicant_state_changed (custom|1|5)
-        mWifiInfo.setSupplicantState(state);
-        // Network id is only valid when we start connecting
-        if (SupplicantState.isConnecting(state)) {
-            mWifiInfo.setNetworkId(stateChangeResult.networkId);
-        } else {
-            mWifiInfo.setNetworkId(WifiConfiguration.INVALID_NETWORK_ID);
-        }
-
-        mWifiInfo.setBSSID(stateChangeResult.BSSID);
-        mWifiInfo.setSSID(stateChangeResult.wifiSsid);
-
-        mSupplicantStateTracker.sendMessage(Message.obtain(message));
-
-        return state;
-    }
-
-    /**
-     * Resets the Wi-Fi Connections by clearing any state, resetting any sockets
-     * using the interface, stopping DHCP & disabling interface
-     */
-    private void handleNetworkDisconnect() {
-        if (DBG) log("Stopping DHCP and clearing IP");
-
-        stopDhcp();
-
-        try {
-            mNwService.clearInterfaceAddresses(mInterfaceName);
-            mNwService.disableIpv6(mInterfaceName);
-        } catch (Exception e) {
-            loge("Failed to clear addresses or disable ipv6" + e);
-        }
-
-        /* Reset data structures */
-        mWifiInfo.setInetAddress(null);
-        mWifiInfo.setBSSID(null);
-        mWifiInfo.setSSID(null);
-        mWifiInfo.setNetworkId(WifiConfiguration.INVALID_NETWORK_ID);
-        mWifiInfo.setRssi(MIN_RSSI);
-        mWifiInfo.setLinkSpeed(-1);
-        mWifiInfo.setMeteredHint(false);
-
-        setNetworkDetailedState(DetailedState.DISCONNECTED);
-        mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.DISCONNECTED);
-
-        /* Clear network properties */
-        clearLinkProperties();
-
-        /* send event to CM & network change broadcast */
-        sendNetworkStateChangeBroadcast(mLastBssid);
-
-        mLastBssid= null;
-        mLastNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
-    }
-
-    private void handleSupplicantConnectionLoss() {
-        /* Socket connection can be lost when we do a graceful shutdown
-        * or when the driver is hung. Ensure supplicant is stopped here.
-        */
-        mWifiMonitor.killSupplicant(mP2pSupported);
-        sendSupplicantConnectionChangedBroadcast(false);
-        setWifiState(WIFI_STATE_DISABLED);
-    }
-
-    void handlePreDhcpSetup() {
-        mDhcpActive = true;
-        if (!mBluetoothConnectionActive) {
-            /*
-             * There are problems setting the Wi-Fi driver's power
-             * mode to active when bluetooth coexistence mode is
-             * enabled or sense.
-             * <p>
-             * We set Wi-Fi to active mode when
-             * obtaining an IP address because we've found
-             * compatibility issues with some routers with low power
-             * mode.
-             * <p>
-             * In order for this active power mode to properly be set,
-             * we disable coexistence mode until we're done with
-             * obtaining an IP address.  One exception is if we
-             * are currently connected to a headset, since disabling
-             * coexistence would interrupt that connection.
-             */
-            // Disable the coexistence mode
-            mWifiNative.setBluetoothCoexistenceMode(
-                    mWifiNative.BLUETOOTH_COEXISTENCE_MODE_DISABLED);
-        }
-
-        /* Disable power save and suspend optimizations during DHCP */
-        // Note: The order here is important for now. Brcm driver changes
-        // power settings when we control suspend mode optimizations.
-        // TODO: Remove this comment when the driver is fixed.
-        setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, false);
-        mWifiNative.setPowerSave(false);
-
-        stopBatchedScan();
-
-        /* P2p discovery breaks dhcp, shut it down in order to get through this */
-        Message msg = new Message();
-        msg.what = WifiP2pService.BLOCK_DISCOVERY;
-        msg.arg1 = WifiP2pService.ENABLED;
-        msg.arg2 = DhcpStateMachine.CMD_PRE_DHCP_ACTION_COMPLETE;
-        msg.obj = mDhcpStateMachine;
-        mWifiP2pChannel.sendMessage(msg);
-    }
-
-
-    void startDhcp() {
-        if (mDhcpStateMachine == null) {
-            mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(
-                    mContext, WifiStateMachine.this, mInterfaceName);
-
-        }
-        mDhcpStateMachine.registerForPreDhcpNotification();
-        mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP);
-    }
-
-    void stopDhcp() {
-        if (mDhcpStateMachine != null) {
-            /* In case we were in middle of DHCP operation restore back powermode */
-            handlePostDhcpSetup();
-            mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_STOP_DHCP);
-        }
-    }
-
-    void handlePostDhcpSetup() {
-        /* Restore power save and suspend optimizations */
-        setSuspendOptimizationsNative(SUSPEND_DUE_TO_DHCP, true);
-        mWifiNative.setPowerSave(true);
-
-        mWifiP2pChannel.sendMessage(WifiP2pService.BLOCK_DISCOVERY, WifiP2pService.DISABLED);
-
-        // Set the coexistence mode back to its default value
-        mWifiNative.setBluetoothCoexistenceMode(
-                mWifiNative.BLUETOOTH_COEXISTENCE_MODE_SENSE);
-
-        mDhcpActive = false;
-
-        startBatchedScan();
-    }
-
-    private void handleSuccessfulIpConfiguration(DhcpResults dhcpResults) {
-        mLastSignalLevel = -1; // force update of signal strength
-        mReconnectCount = 0; //Reset IP failure tracking
-        synchronized (mDhcpResultsLock) {
-            mDhcpResults = dhcpResults;
-        }
-        LinkProperties linkProperties = dhcpResults.linkProperties;
-        mWifiConfigStore.setLinkProperties(mLastNetworkId, new LinkProperties(linkProperties));
-        InetAddress addr = null;
-        Iterator<InetAddress> addrs = linkProperties.getAddresses().iterator();
-        if (addrs.hasNext()) {
-            addr = addrs.next();
-        }
-        mWifiInfo.setInetAddress(addr);
-        mWifiInfo.setMeteredHint(dhcpResults.hasMeteredHint());
-        updateLinkProperties();
-    }
-
-    private void handleFailedIpConfiguration() {
-        loge("IP configuration failed");
-
-        mWifiInfo.setInetAddress(null);
-        mWifiInfo.setMeteredHint(false);
-        /**
-         * If we've exceeded the maximum number of retries for DHCP
-         * to a given network, disable the network
-         */
-        int maxRetries = getMaxDhcpRetries();
-        // maxRetries == 0 means keep trying forever
-        if (maxRetries > 0 && ++mReconnectCount > maxRetries) {
-            loge("Failed " +
-                    mReconnectCount + " times, Disabling " + mLastNetworkId);
-            mWifiConfigStore.disableNetwork(mLastNetworkId,
-                    WifiConfiguration.DISABLED_DHCP_FAILURE);
-            mReconnectCount = 0;
-        }
-
-        /* DHCP times out after about 30 seconds, we do a
-         * disconnect and an immediate reconnect to try again
-         */
-        mWifiNative.disconnect();
-        mWifiNative.reconnect();
-    }
-
-    /* Current design is to not set the config on a running hostapd but instead
-     * stop and start tethering when user changes config on a running access point
-     *
-     * TODO: Add control channel setup through hostapd that allows changing config
-     * on a running daemon
-     */
-    private void startSoftApWithConfig(final WifiConfiguration config) {
-        // start hostapd on a seperate thread
-        new Thread(new Runnable() {
-            public void run() {
-                try {
-                    mNwService.startAccessPoint(config, mInterfaceName);
-                } catch (Exception e) {
-                    loge("Exception in softap start " + e);
-                    try {
-                        mNwService.stopAccessPoint(mInterfaceName);
-                        mNwService.startAccessPoint(config, mInterfaceName);
-                    } catch (Exception e1) {
-                        loge("Exception in softap re-start " + e1);
-                        sendMessage(CMD_START_AP_FAILURE);
-                        return;
-                    }
-                }
-                if (DBG) log("Soft AP start successful");
-                sendMessage(CMD_START_AP_SUCCESS);
-            }
-        }).start();
-    }
-
-    /********************************************************
-     * HSM states
-     *******************************************************/
-
-    class DefaultState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
-                    if (message.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
-                        mWifiP2pChannel.sendMessage(AsyncChannel.CMD_CHANNEL_FULL_CONNECTION);
-                    } else {
-                        loge("WifiP2pService connection failure, error=" + message.arg1);
-                    }
-                    break;
-                case AsyncChannel.CMD_CHANNEL_DISCONNECTED:
-                    loge("WifiP2pService channel lost, message.arg1 =" + message.arg1);
-                    //TODO: Re-establish connection to state machine after a delay
-                    //mWifiP2pChannel.connect(mContext, getHandler(), mWifiP2pManager.getMessenger());
-                    break;
-                case CMD_BLUETOOTH_ADAPTER_STATE_CHANGE:
-                    mBluetoothConnectionActive = (message.arg1 !=
-                            BluetoothAdapter.STATE_DISCONNECTED);
-                    break;
-                    /* Synchronous call returns */
-                case CMD_PING_SUPPLICANT:
-                case CMD_ENABLE_NETWORK:
-                case CMD_ADD_OR_UPDATE_NETWORK:
-                case CMD_REMOVE_NETWORK:
-                case CMD_SAVE_CONFIG:
-                    replyToMessage(message, message.what, FAILURE);
-                    break;
-                case CMD_GET_CONFIGURED_NETWORKS:
-                    replyToMessage(message, message.what, (List<WifiConfiguration>) null);
-                    break;
-                case CMD_ENABLE_RSSI_POLL:
-                    mEnableRssiPolling = (message.arg1 == 1);
-                    break;
-                case CMD_ENABLE_BACKGROUND_SCAN:
-                    mEnableBackgroundScan = (message.arg1 == 1);
-                    break;
-                case CMD_SET_HIGH_PERF_MODE:
-                    if (message.arg1 == 1) {
-                        setSuspendOptimizations(SUSPEND_DUE_TO_HIGH_PERF, false);
-                    } else {
-                        setSuspendOptimizations(SUSPEND_DUE_TO_HIGH_PERF, true);
-                    }
-                    break;
-                case CMD_BOOT_COMPLETED:
-                    String countryCode = mPersistedCountryCode;
-                    if (TextUtils.isEmpty(countryCode) == false) {
-                        Settings.Global.putString(mContext.getContentResolver(),
-                                Settings.Global.WIFI_COUNTRY_CODE,
-                                countryCode);
-                        // it may be that the state transition that should send this info
-                        // to the driver happened between mPersistedCountryCode getting set
-                        // and now, so simply persisting it here would mean we have sent
-                        // nothing to the driver.  Send the cmd so it might be set now.
-                        int sequenceNum = mCountryCodeSequence.incrementAndGet();
-                        sendMessageAtFrontOfQueue(CMD_SET_COUNTRY_CODE,
-                                sequenceNum, 0, countryCode);
-                    }
-                    break;
-                case CMD_SET_BATCHED_SCAN:
-                    recordBatchedScanSettings(message.arg1, message.arg2, (Bundle)message.obj);
-                    break;
-                case CMD_POLL_BATCHED_SCAN:
-                    handleBatchedScanPollRequest();
-                    break;
-                case CMD_START_NEXT_BATCHED_SCAN:
-                    startNextBatchedScan();
-                    break;
-                    /* Discard */
-                case CMD_START_SCAN:
-                case CMD_START_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT_FAILED:
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_DELAYED_STOP_DRIVER:
-                case CMD_DRIVER_START_TIMED_OUT:
-                case CMD_CAPTIVE_CHECK_COMPLETE:
-                case CMD_START_AP:
-                case CMD_START_AP_SUCCESS:
-                case CMD_START_AP_FAILURE:
-                case CMD_STOP_AP:
-                case CMD_TETHER_STATE_CHANGE:
-                case CMD_TETHER_NOTIFICATION_TIMED_OUT:
-                case CMD_DISCONNECT:
-                case CMD_RECONNECT:
-                case CMD_REASSOCIATE:
-                case CMD_RELOAD_TLS_AND_RECONNECT:
-                case WifiMonitor.SUP_CONNECTION_EVENT:
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                case WifiMonitor.NETWORK_CONNECTION_EVENT:
-                case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
-                case WifiMonitor.SCAN_RESULTS_EVENT:
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
-                case WifiMonitor.ASSOCIATION_REJECTION_EVENT:
-                case WifiMonitor.WPS_OVERLAP_EVENT:
-                case CMD_BLACKLIST_NETWORK:
-                case CMD_CLEAR_BLACKLIST:
-                case CMD_SET_OPERATIONAL_MODE:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_RSSI_POLL:
-                case CMD_ENABLE_ALL_NETWORKS:
-                case DhcpStateMachine.CMD_PRE_DHCP_ACTION:
-                case DhcpStateMachine.CMD_POST_DHCP_ACTION:
-                /* Handled by WifiApConfigStore */
-                case CMD_SET_AP_CONFIG:
-                case CMD_SET_AP_CONFIG_COMPLETED:
-                case CMD_REQUEST_AP_CONFIG:
-                case CMD_RESPONSE_AP_CONFIG:
-                case WifiWatchdogStateMachine.POOR_LINK_DETECTED:
-                case WifiWatchdogStateMachine.GOOD_LINK_DETECTED:
-                case CMD_NO_NETWORKS_PERIODIC_SCAN:
-                case CMD_DISABLE_P2P_RSP:
-                    break;
-                case DhcpStateMachine.CMD_ON_QUIT:
-                    mDhcpStateMachine = null;
-                    break;
-                case CMD_SET_SUSPEND_OPT_ENABLED:
-                    if (message.arg1 == 1) {
-                        mSuspendWakeLock.release();
-                        setSuspendOptimizations(SUSPEND_DUE_TO_SCREEN, true);
-                    } else {
-                        setSuspendOptimizations(SUSPEND_DUE_TO_SCREEN, false);
-                    }
-                    break;
-                case WifiMonitor.DRIVER_HUNG_EVENT:
-                    setSupplicantRunning(false);
-                    setSupplicantRunning(true);
-                    break;
-                case WifiManager.CONNECT_NETWORK:
-                    replyToMessage(message, WifiManager.CONNECT_NETWORK_FAILED,
-                            WifiManager.BUSY);
-                    break;
-                case WifiManager.FORGET_NETWORK:
-                    replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
-                            WifiManager.BUSY);
-                    break;
-                case WifiManager.SAVE_NETWORK:
-                    replyToMessage(message, WifiManager.SAVE_NETWORK_FAILED,
-                            WifiManager.BUSY);
-                    break;
-                case WifiManager.START_WPS:
-                    replyToMessage(message, WifiManager.WPS_FAILED,
-                            WifiManager.BUSY);
-                    break;
-                case WifiManager.CANCEL_WPS:
-                    replyToMessage(message, WifiManager.CANCEL_WPS_FAILED,
-                            WifiManager.BUSY);
-                    break;
-                case WifiManager.DISABLE_NETWORK:
-                    replyToMessage(message, WifiManager.DISABLE_NETWORK_FAILED,
-                            WifiManager.BUSY);
-                    break;
-                case WifiManager.RSSI_PKTCNT_FETCH:
-                    replyToMessage(message, WifiManager.RSSI_PKTCNT_FETCH_FAILED,
-                            WifiManager.BUSY);
-                    break;
-                case WifiP2pService.P2P_CONNECTION_CHANGED:
-                    NetworkInfo info = (NetworkInfo) message.obj;
-                    mP2pConnected.set(info.isConnected());
-                    break;
-                case WifiP2pService.DISCONNECT_WIFI_REQUEST:
-                    mTemporarilyDisconnectWifi = (message.arg1 == 1);
-                    replyToMessage(message, WifiP2pService.DISCONNECT_WIFI_RESPONSE);
-                    break;
-                case CMD_IP_ADDRESS_UPDATED:
-                    // addLinkAddress is a no-op if called more than once with the same address.
-                    if (mNetlinkLinkProperties.addLinkAddress((LinkAddress) message.obj)) {
-                        updateLinkProperties();
-                    }
-                    break;
-                case CMD_IP_ADDRESS_REMOVED:
-                    if (mNetlinkLinkProperties.removeLinkAddress((LinkAddress) message.obj)) {
-                        updateLinkProperties();
-                    }
-                    break;
-                default:
-                    loge("Error! unhandled message" + message);
-                    break;
-            }
-            return HANDLED;
-        }
-    }
-
-    class InitialState extends State {
-        @Override
-        public void enter() {
-            mWifiNative.unloadDriver();
-
-            if (mWifiP2pChannel == null) {
-                mWifiP2pChannel = new AsyncChannel();
-                mWifiP2pChannel.connect(mContext, getHandler(), mWifiP2pManager.getMessenger());
-            }
-
-            if (mWifiApConfigChannel == null) {
-                mWifiApConfigChannel = new AsyncChannel();
-                WifiApConfigStore wifiApConfigStore = WifiApConfigStore.makeWifiApConfigStore(
-                        mContext, getHandler());
-                wifiApConfigStore.loadApConfiguration();
-                mWifiApConfigChannel.connectSync(mContext, getHandler(),
-                        wifiApConfigStore.getMessenger());
-            }
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case CMD_START_SUPPLICANT:
-                    if (mWifiNative.loadDriver()) {
-                        try {
-                            mNwService.wifiFirmwareReload(mInterfaceName, "STA");
-                        } catch (Exception e) {
-                            loge("Failed to reload STA firmware " + e);
-                            // continue
-                        }
-
-                        try {
-                            // A runtime crash can leave the interface up and
-                            // this affects connectivity when supplicant starts up.
-                            // Ensure interface is down before a supplicant start.
-                            mNwService.setInterfaceDown(mInterfaceName);
-                            // Set privacy extensions
-                            mNwService.setInterfaceIpv6PrivacyExtensions(mInterfaceName, true);
-
-                           // IPv6 is enabled only as long as access point is connected since:
-                           // - IPv6 addresses and routes stick around after disconnection
-                           // - kernel is unaware when connected and fails to start IPv6 negotiation
-                           // - kernel can start autoconfiguration when 802.1x is not complete
-                            mNwService.disableIpv6(mInterfaceName);
-                        } catch (RemoteException re) {
-                            loge("Unable to change interface settings: " + re);
-                        } catch (IllegalStateException ie) {
-                            loge("Unable to change interface settings: " + ie);
-                        }
-
-                       /* Stop a running supplicant after a runtime restart
-                        * Avoids issues with drivers that do not handle interface down
-                        * on a running supplicant properly.
-                        */
-                        mWifiMonitor.killSupplicant(mP2pSupported);
-                        if(mWifiNative.startSupplicant(mP2pSupported)) {
-                            setWifiState(WIFI_STATE_ENABLING);
-                            if (DBG) log("Supplicant start successful");
-                            mWifiMonitor.startMonitoring();
-                            transitionTo(mSupplicantStartingState);
-                        } else {
-                            loge("Failed to start supplicant!");
-                        }
-                    } else {
-                        loge("Failed to load driver");
-                    }
-                    break;
-                case CMD_START_AP:
-                    if (mWifiNative.loadDriver()) {
-                        setWifiApState(WIFI_AP_STATE_ENABLING);
-                        transitionTo(mSoftApStartingState);
-                    } else {
-                        loge("Failed to load driver for softap");
-                    }
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class SupplicantStartingState extends State {
-        private void initializeWpsDetails() {
-            String detail;
-            detail = SystemProperties.get("ro.product.name", "");
-            if (!mWifiNative.setDeviceName(detail)) {
-                loge("Failed to set device name " +  detail);
-            }
-            detail = SystemProperties.get("ro.product.manufacturer", "");
-            if (!mWifiNative.setManufacturer(detail)) {
-                loge("Failed to set manufacturer " + detail);
-            }
-            detail = SystemProperties.get("ro.product.model", "");
-            if (!mWifiNative.setModelName(detail)) {
-                loge("Failed to set model name " + detail);
-            }
-            detail = SystemProperties.get("ro.product.model", "");
-            if (!mWifiNative.setModelNumber(detail)) {
-                loge("Failed to set model number " + detail);
-            }
-            detail = SystemProperties.get("ro.serialno", "");
-            if (!mWifiNative.setSerialNumber(detail)) {
-                loge("Failed to set serial number " + detail);
-            }
-            if (!mWifiNative.setConfigMethods("physical_display virtual_push_button")) {
-                loge("Failed to set WPS config methods");
-            }
-            if (!mWifiNative.setDeviceType(mPrimaryDeviceType)) {
-                loge("Failed to set primary device type " + mPrimaryDeviceType);
-            }
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case WifiMonitor.SUP_CONNECTION_EVENT:
-                    if (DBG) log("Supplicant connection established");
-                    setWifiState(WIFI_STATE_ENABLED);
-                    mSupplicantRestartCount = 0;
-                    /* Reset the supplicant state to indicate the supplicant
-                     * state is not known at this time */
-                    mSupplicantStateTracker.sendMessage(CMD_RESET_SUPPLICANT_STATE);
-                    /* Initialize data structures */
-                    mLastBssid = null;
-                    mLastNetworkId = WifiConfiguration.INVALID_NETWORK_ID;
-                    mLastSignalLevel = -1;
-
-                    mWifiInfo.setMacAddress(mWifiNative.getMacAddress());
-                    mWifiConfigStore.loadAndEnableAllNetworks();
-                    initializeWpsDetails();
-
-                    sendSupplicantConnectionChangedBroadcast(true);
-                    transitionTo(mDriverStartedState);
-                    break;
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                    if (++mSupplicantRestartCount <= SUPPLICANT_RESTART_TRIES) {
-                        loge("Failed to setup control channel, restart supplicant");
-                        mWifiMonitor.killSupplicant(mP2pSupported);
-                        transitionTo(mInitialState);
-                        sendMessageDelayed(CMD_START_SUPPLICANT, SUPPLICANT_RESTART_INTERVAL_MSECS);
-                    } else {
-                        loge("Failed " + mSupplicantRestartCount +
-                                " times to start supplicant, unload driver");
-                        mSupplicantRestartCount = 0;
-                        setWifiState(WIFI_STATE_UNKNOWN);
-                        transitionTo(mInitialState);
-                    }
-                    break;
-                case CMD_START_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT:
-                case CMD_START_AP:
-                case CMD_STOP_AP:
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_SET_OPERATIONAL_MODE:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class SupplicantStartedState extends State {
-        @Override
-        public void enter() {
-            /* Wifi is available as long as we have a connection to supplicant */
-            mNetworkInfo.setIsAvailable(true);
-
-            int defaultInterval = mContext.getResources().getInteger(
-                    R.integer.config_wifi_supplicant_scan_interval);
-
-            mSupplicantScanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
-                    Settings.Global.WIFI_SUPPLICANT_SCAN_INTERVAL_MS,
-                    defaultInterval);
-
-            mWifiNative.setScanInterval((int)mSupplicantScanIntervalMs / 1000);
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_STOP_SUPPLICANT:   /* Supplicant stopped by user */
-                    if (mP2pSupported) {
-                        transitionTo(mWaitForP2pDisableState);
-                    } else {
-                        transitionTo(mSupplicantStoppingState);
-                    }
-                    break;
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:  /* Supplicant connection lost */
-                    loge("Connection lost, restart supplicant");
-                    handleSupplicantConnectionLoss();
-                    handleNetworkDisconnect();
-                    mSupplicantStateTracker.sendMessage(CMD_RESET_SUPPLICANT_STATE);
-                    if (mP2pSupported) {
-                        transitionTo(mWaitForP2pDisableState);
-                    } else {
-                        transitionTo(mInitialState);
-                    }
-                    sendMessageDelayed(CMD_START_SUPPLICANT, SUPPLICANT_RESTART_INTERVAL_MSECS);
-                    break;
-                case WifiMonitor.SCAN_RESULTS_EVENT:
-                    setScanResults();
-                    sendScanResultsAvailableBroadcast();
-                    mScanResultIsPending = false;
-                    break;
-                case CMD_PING_SUPPLICANT:
-                    boolean ok = mWifiNative.ping();
-                    replyToMessage(message, message.what, ok ? SUCCESS : FAILURE);
-                    break;
-                    /* Cannot start soft AP while in client mode */
-                case CMD_START_AP:
-                    loge("Failed to start soft AP with a running supplicant");
-                    setWifiApState(WIFI_AP_STATE_FAILED);
-                    break;
-                case CMD_SET_OPERATIONAL_MODE:
-                    mOperationalMode = message.arg1;
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        @Override
-        public void exit() {
-            mNetworkInfo.setIsAvailable(false);
-        }
-    }
-
-    class SupplicantStoppingState extends State {
-        @Override
-        public void enter() {
-            /* Send any reset commands to supplicant before shutting it down */
-            handleNetworkDisconnect();
-            if (mDhcpStateMachine != null) {
-                mDhcpStateMachine.doQuit();
-            }
-
-            if (DBG) log("stopping supplicant");
-            mWifiMonitor.stopSupplicant();
-
-            /* Send ourselves a delayed message to indicate failure after a wait time */
-            sendMessageDelayed(obtainMessage(CMD_STOP_SUPPLICANT_FAILED,
-                    ++mSupplicantStopFailureToken, 0), SUPPLICANT_RESTART_INTERVAL_MSECS);
-            setWifiState(WIFI_STATE_DISABLING);
-            mSupplicantStateTracker.sendMessage(CMD_RESET_SUPPLICANT_STATE);
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case WifiMonitor.SUP_CONNECTION_EVENT:
-                    loge("Supplicant connection received while stopping");
-                    break;
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                    if (DBG) log("Supplicant connection lost");
-                    handleSupplicantConnectionLoss();
-                    transitionTo(mInitialState);
-                    break;
-                case CMD_STOP_SUPPLICANT_FAILED:
-                    if (message.arg1 == mSupplicantStopFailureToken) {
-                        loge("Timed out on a supplicant stop, kill and proceed");
-                        handleSupplicantConnectionLoss();
-                        transitionTo(mInitialState);
-                    }
-                    break;
-                case CMD_START_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT:
-                case CMD_START_AP:
-                case CMD_STOP_AP:
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_SET_OPERATIONAL_MODE:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class DriverStartingState extends State {
-        private int mTries;
-        @Override
-        public void enter() {
-            mTries = 1;
-            /* Send ourselves a delayed message to start driver a second time */
-            sendMessageDelayed(obtainMessage(CMD_DRIVER_START_TIMED_OUT,
-                        ++mDriverStartToken, 0), DRIVER_START_TIME_OUT_MSECS);
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-               case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    SupplicantState state = handleSupplicantStateChange(message);
-                    /* If suplicant is exiting out of INTERFACE_DISABLED state into
-                     * a state that indicates driver has started, it is ready to
-                     * receive driver commands
-                     */
-                    if (SupplicantState.isDriverActive(state)) {
-                        transitionTo(mDriverStartedState);
-                    }
-                    break;
-                case CMD_DRIVER_START_TIMED_OUT:
-                    if (message.arg1 == mDriverStartToken) {
-                        if (mTries >= 2) {
-                            loge("Failed to start driver after " + mTries);
-                            transitionTo(mDriverStoppedState);
-                        } else {
-                            loge("Driver start failed, retrying");
-                            mWakeLock.acquire();
-                            mWifiNative.startDriver();
-                            mWakeLock.release();
-
-                            ++mTries;
-                            /* Send ourselves a delayed message to start driver again */
-                            sendMessageDelayed(obtainMessage(CMD_DRIVER_START_TIMED_OUT,
-                                        ++mDriverStartToken, 0), DRIVER_START_TIME_OUT_MSECS);
-                        }
-                    }
-                    break;
-                    /* Queue driver commands & connection events */
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case WifiMonitor.NETWORK_CONNECTION_EVENT:
-                case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
-                case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
-                case WifiMonitor.ASSOCIATION_REJECTION_EVENT:
-                case WifiMonitor.WPS_OVERLAP_EVENT:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                case CMD_START_SCAN:
-                case CMD_DISCONNECT:
-                case CMD_REASSOCIATE:
-                case CMD_RECONNECT:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class DriverStartedState extends State {
-        @Override
-        public void enter() {
-            mIsRunning = true;
-            mInDelayedStop = false;
-            mDelayedStopCounter++;
-            updateBatteryWorkSource(null);
-            /**
-             * Enable bluetooth coexistence scan mode when bluetooth connection is active.
-             * When this mode is on, some of the low-level scan parameters used by the
-             * driver are changed to reduce interference with bluetooth
-             */
-            mWifiNative.setBluetoothCoexistenceScanMode(mBluetoothConnectionActive);
-            /* set country code */
-            setCountryCode();
-            /* set frequency band of operation */
-            setFrequencyBand();
-            /* initialize network state */
-            setNetworkDetailedState(DetailedState.DISCONNECTED);
-
-            /* Remove any filtering on Multicast v6 at start */
-            mWifiNative.stopFilteringMulticastV6Packets();
-
-            /* Reset Multicast v4 filtering state */
-            if (mFilteringMulticastV4Packets.get()) {
-                mWifiNative.startFilteringMulticastV4Packets();
-            } else {
-                mWifiNative.stopFilteringMulticastV4Packets();
-            }
-
-            mDhcpActive = false;
-
-            startBatchedScan();
-
-            if (mOperationalMode != CONNECT_MODE) {
-                mWifiNative.disconnect();
-                mWifiConfigStore.disableAllNetworks();
-                if (mOperationalMode == SCAN_ONLY_WITH_WIFI_OFF_MODE) {
-                    setWifiState(WIFI_STATE_DISABLED);
-                }
-                transitionTo(mScanModeState);
-            } else {
-                /* Driver stop may have disabled networks, enable right after start */
-                mWifiConfigStore.enableAllNetworks();
-
-                if (DBG) log("Attempting to reconnect to wifi network ..");
-                mWifiNative.reconnect();
-
-                // Status pulls in the current supplicant state and network connection state
-                // events over the monitor connection. This helps framework sync up with
-                // current supplicant state
-                mWifiNative.status();
-                transitionTo(mDisconnectedState);
-            }
-
-            // We may have missed screen update at boot
-            if (mScreenBroadcastReceived.get() == false) {
-                PowerManager powerManager = (PowerManager)mContext.getSystemService(
-                        Context.POWER_SERVICE);
-                handleScreenStateChanged(powerManager.isScreenOn());
-            } else {
-                // Set the right suspend mode settings
-                mWifiNative.setSuspendOptimizations(mSuspendOptNeedsDisabled == 0
-                        && mUserWantsSuspendOpt.get());
-            }
-            mWifiNative.setPowerSave(true);
-
-            if (mP2pSupported) {
-                if (mOperationalMode == CONNECT_MODE) {
-                    mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_ENABLE_P2P);
-                } else {
-                    // P2P statemachine starts in disabled state, and is not enabled until
-                    // CMD_ENABLE_P2P is sent from here; so, nothing needs to be done to
-                    // keep it disabled.
-                }
-            }
-
-            final Intent intent = new Intent(WifiManager.WIFI_SCAN_AVAILABLE);
-            intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-            intent.putExtra(WifiManager.EXTRA_SCAN_AVAILABLE, WIFI_STATE_ENABLED);
-            mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_START_SCAN:
-                    noteScanStart(message.arg1, (WorkSource) message.obj);
-                    startScanNative(WifiNative.SCAN_WITH_CONNECTION_SETUP);
-                    break;
-                case CMD_SET_BATCHED_SCAN:
-                    if (recordBatchedScanSettings(message.arg1, message.arg2,
-                            (Bundle)message.obj)) {
-                        if (mBatchedScanSettings != null) {
-                            startBatchedScan();
-                        } else {
-                            stopBatchedScan();
-                        }
-                    }
-                    break;
-                case CMD_SET_COUNTRY_CODE:
-                    String country = (String) message.obj;
-                    final boolean persist = (message.arg2 == 1);
-                    final int sequence = message.arg1;
-                    if (sequence != mCountryCodeSequence.get()) {
-                        if (DBG) log("set country code ignored due to sequence num");
-                        break;
-                    }
-                    if (DBG) log("set country code " + country);
-                    if (persist) {
-                        mPersistedCountryCode = country;
-                        Settings.Global.putString(mContext.getContentResolver(),
-                                Settings.Global.WIFI_COUNTRY_CODE,
-                                country);
-                    }
-                    country = country.toUpperCase(Locale.ROOT);
-                    if (mLastSetCountryCode == null
-                            || country.equals(mLastSetCountryCode) == false) {
-                        if (mWifiNative.setCountryCode(country)) {
-                            mLastSetCountryCode = country;
-                        } else {
-                            loge("Failed to set country code " + country);
-                        }
-                    }
-                    mWifiP2pChannel.sendMessage(WifiP2pService.SET_COUNTRY_CODE, country);
-                    break;
-                case CMD_SET_FREQUENCY_BAND:
-                    int band =  message.arg1;
-                    if (DBG) log("set frequency band " + band);
-                    if (mWifiNative.setBand(band)) {
-                        mFrequencyBand.set(band);
-                        // flush old data - like scan results
-                        mWifiNative.bssFlush();
-                        //Fetch the latest scan results when frequency band is set
-                        startScanNative(WifiNative.SCAN_WITH_CONNECTION_SETUP);
-                    } else {
-                        loge("Failed to set frequency band " + band);
-                    }
-                    break;
-                case CMD_BLUETOOTH_ADAPTER_STATE_CHANGE:
-                    mBluetoothConnectionActive = (message.arg1 !=
-                            BluetoothAdapter.STATE_DISCONNECTED);
-                    mWifiNative.setBluetoothCoexistenceScanMode(mBluetoothConnectionActive);
-                    break;
-                case CMD_STOP_DRIVER:
-                    int mode = message.arg1;
-
-                    /* Already doing a delayed stop */
-                    if (mInDelayedStop) {
-                        if (DBG) log("Already in delayed stop");
-                        break;
-                    }
-                    /* disconnect right now, but leave the driver running for a bit */
-                    mWifiConfigStore.disableAllNetworks();
-
-                    mInDelayedStop = true;
-                    mDelayedStopCounter++;
-                    if (DBG) log("Delayed stop message " + mDelayedStopCounter);
-
-                    /* send regular delayed shut down */
-                    Intent driverStopIntent = new Intent(ACTION_DELAYED_DRIVER_STOP, null);
-                    driverStopIntent.putExtra(DELAYED_STOP_COUNTER, mDelayedStopCounter);
-                    mDriverStopIntent = PendingIntent.getBroadcast(mContext,
-                            DRIVER_STOP_REQUEST, driverStopIntent,
-                            PendingIntent.FLAG_UPDATE_CURRENT);
-
-                    mAlarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
-                            + mDriverStopDelayMs, mDriverStopIntent);
-                    break;
-                case CMD_START_DRIVER:
-                    if (mInDelayedStop) {
-                        mInDelayedStop = false;
-                        mDelayedStopCounter++;
-                        mAlarmManager.cancel(mDriverStopIntent);
-                        if (DBG) log("Delayed stop ignored due to start");
-                        if (mOperationalMode == CONNECT_MODE) {
-                            mWifiConfigStore.enableAllNetworks();
-                        }
-                    }
-                    break;
-                case CMD_DELAYED_STOP_DRIVER:
-                    if (DBG) log("delayed stop " + message.arg1 + " " + mDelayedStopCounter);
-                    if (message.arg1 != mDelayedStopCounter) break;
-                    if (getCurrentState() != mDisconnectedState) {
-                        mWifiNative.disconnect();
-                        handleNetworkDisconnect();
-                    }
-                    mWakeLock.acquire();
-                    mWifiNative.stopDriver();
-                    mWakeLock.release();
-                    if (mP2pSupported) {
-                        transitionTo(mWaitForP2pDisableState);
-                    } else {
-                        transitionTo(mDriverStoppingState);
-                    }
-                    break;
-                case CMD_START_PACKET_FILTERING:
-                    if (message.arg1 == MULTICAST_V6) {
-                        mWifiNative.startFilteringMulticastV6Packets();
-                    } else if (message.arg1 == MULTICAST_V4) {
-                        mWifiNative.startFilteringMulticastV4Packets();
-                    } else {
-                        loge("Illegal arugments to CMD_START_PACKET_FILTERING");
-                    }
-                    break;
-                case CMD_STOP_PACKET_FILTERING:
-                    if (message.arg1 == MULTICAST_V6) {
-                        mWifiNative.stopFilteringMulticastV6Packets();
-                    } else if (message.arg1 == MULTICAST_V4) {
-                        mWifiNative.stopFilteringMulticastV4Packets();
-                    } else {
-                        loge("Illegal arugments to CMD_STOP_PACKET_FILTERING");
-                    }
-                    break;
-                case CMD_SET_SUSPEND_OPT_ENABLED:
-                    if (message.arg1 == 1) {
-                        setSuspendOptimizationsNative(SUSPEND_DUE_TO_SCREEN, true);
-                        mSuspendWakeLock.release();
-                    } else {
-                        setSuspendOptimizationsNative(SUSPEND_DUE_TO_SCREEN, false);
-                    }
-                    break;
-                case CMD_SET_HIGH_PERF_MODE:
-                    if (message.arg1 == 1) {
-                        setSuspendOptimizationsNative(SUSPEND_DUE_TO_HIGH_PERF, false);
-                    } else {
-                        setSuspendOptimizationsNative(SUSPEND_DUE_TO_HIGH_PERF, true);
-                    }
-                    break;
-                case CMD_ENABLE_TDLS:
-                    if (message.obj != null) {
-                        String remoteAddress = (String) message.obj;
-                        boolean enable = (message.arg1 == 1);
-                        mWifiNative.startTdls(remoteAddress, enable);
-                    }
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-        @Override
-        public void exit() {
-            mIsRunning = false;
-            updateBatteryWorkSource(null);
-            mScanResults = new ArrayList<ScanResult>();
-
-            stopBatchedScan();
-
-            final Intent intent = new Intent(WifiManager.WIFI_SCAN_AVAILABLE);
-            intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-            intent.putExtra(WifiManager.EXTRA_SCAN_AVAILABLE, WIFI_STATE_DISABLED);
-            mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-            noteScanEnd(); // wrap up any pending request.
-
-            mLastSetCountryCode = null;
-        }
-    }
-
-    class WaitForP2pDisableState extends State {
-        private State mTransitionToState;
-        @Override
-        public void enter() {
-            switch (getCurrentMessage().what) {
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                    mTransitionToState = mInitialState;
-                    break;
-                case CMD_DELAYED_STOP_DRIVER:
-                    mTransitionToState = mDriverStoppingState;
-                    break;
-                case CMD_STOP_SUPPLICANT:
-                    mTransitionToState = mSupplicantStoppingState;
-                    break;
-                default:
-                    mTransitionToState = mDriverStoppingState;
-                    break;
-            }
-            mWifiP2pChannel.sendMessage(WifiStateMachine.CMD_DISABLE_P2P_REQ);
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case WifiStateMachine.CMD_DISABLE_P2P_RSP:
-                    transitionTo(mTransitionToState);
-                    break;
-                /* Defer wifi start/shut and driver commands */
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                case CMD_START_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT:
-                case CMD_START_AP:
-                case CMD_STOP_AP:
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_SET_OPERATIONAL_MODE:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                case CMD_START_SCAN:
-                case CMD_DISCONNECT:
-                case CMD_REASSOCIATE:
-                case CMD_RECONNECT:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class DriverStoppingState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    SupplicantState state = handleSupplicantStateChange(message);
-                    if (state == SupplicantState.INTERFACE_DISABLED) {
-                        transitionTo(mDriverStoppedState);
-                    }
-                    break;
-                    /* Queue driver commands */
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                case CMD_START_SCAN:
-                case CMD_DISCONNECT:
-                case CMD_REASSOCIATE:
-                case CMD_RECONNECT:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class DriverStoppedState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
-                    SupplicantState state = stateChangeResult.state;
-                    // A WEXT bug means that we can be back to driver started state
-                    // unexpectedly
-                    if (SupplicantState.isDriverActive(state)) {
-                        transitionTo(mDriverStartedState);
-                    }
-                    break;
-                case CMD_START_DRIVER:
-                    mWakeLock.acquire();
-                    mWifiNative.startDriver();
-                    mWakeLock.release();
-                    transitionTo(mDriverStartingState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class ScanModeState extends State {
-        private int mLastOperationMode;
-        @Override
-        public void enter() {
-            mLastOperationMode = mOperationalMode;
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_SET_OPERATIONAL_MODE:
-                    if (message.arg1 == CONNECT_MODE) {
-
-                        if (mLastOperationMode == SCAN_ONLY_WITH_WIFI_OFF_MODE) {
-                            setWifiState(WIFI_STATE_ENABLED);
-                            // Load and re-enable networks when going back to enabled state
-                            // This is essential for networks to show up after restore
-                            mWifiConfigStore.loadAndEnableAllNetworks();
-                            mWifiP2pChannel.sendMessage(CMD_ENABLE_P2P);
-                        } else {
-                            mWifiConfigStore.enableAllNetworks();
-                        }
-
-                        mWifiNative.reconnect();
-
-                        mOperationalMode = CONNECT_MODE;
-                        transitionTo(mDisconnectedState);
-                    } else {
-                        // Nothing to do
-                        return HANDLED;
-                    }
-                    break;
-                // Handle scan. All the connection related commands are
-                // handled only in ConnectModeState
-                case CMD_START_SCAN:
-                    noteScanStart(message.arg1, (WorkSource) message.obj);
-                    startScanNative(WifiNative.SCAN_WITHOUT_CONNECTION_SETUP);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class ConnectModeState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            WifiConfiguration config;
-            boolean ok;
-            switch(message.what) {
-                case WifiMonitor.ASSOCIATION_REJECTION_EVENT:
-                    mSupplicantStateTracker.sendMessage(WifiMonitor.ASSOCIATION_REJECTION_EVENT);
-                    break;
-                case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
-                    mSupplicantStateTracker.sendMessage(WifiMonitor.AUTHENTICATION_FAILURE_EVENT);
-                    break;
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    SupplicantState state = handleSupplicantStateChange(message);
-                    // A driver/firmware hang can now put the interface in a down state.
-                    // We detect the interface going down and recover from it
-                    if (!SupplicantState.isDriverActive(state)) {
-                        if (mNetworkInfo.getState() != NetworkInfo.State.DISCONNECTED) {
-                            handleNetworkDisconnect();
-                        }
-                        log("Detected an interface down, restart driver");
-                        transitionTo(mDriverStoppedState);
-                        sendMessage(CMD_START_DRIVER);
-                        break;
-                    }
-
-                    // Supplicant can fail to report a NETWORK_DISCONNECTION_EVENT
-                    // when authentication times out after a successful connection,
-                    // we can figure this from the supplicant state. If supplicant
-                    // state is DISCONNECTED, but the mNetworkInfo says we are not
-                    // disconnected, we need to handle a disconnection
-                    if (state == SupplicantState.DISCONNECTED &&
-                            mNetworkInfo.getState() != NetworkInfo.State.DISCONNECTED) {
-                        if (DBG) log("Missed CTRL-EVENT-DISCONNECTED, disconnect");
-                        handleNetworkDisconnect();
-                        transitionTo(mDisconnectedState);
-                    }
-                    break;
-                case WifiP2pService.DISCONNECT_WIFI_REQUEST:
-                    if (message.arg1 == 1) {
-                        mWifiNative.disconnect();
-                        mTemporarilyDisconnectWifi = true;
-                    } else {
-                        mWifiNative.reconnect();
-                        mTemporarilyDisconnectWifi = false;
-                    }
-                    break;
-                case CMD_ADD_OR_UPDATE_NETWORK:
-                    config = (WifiConfiguration) message.obj;
-                    replyToMessage(message, CMD_ADD_OR_UPDATE_NETWORK,
-                            mWifiConfigStore.addOrUpdateNetwork(config));
-                    break;
-                case CMD_REMOVE_NETWORK:
-                    ok = mWifiConfigStore.removeNetwork(message.arg1);
-                    replyToMessage(message, message.what, ok ? SUCCESS : FAILURE);
-                    break;
-                case CMD_ENABLE_NETWORK:
-                    ok = mWifiConfigStore.enableNetwork(message.arg1, message.arg2 == 1);
-                    replyToMessage(message, message.what, ok ? SUCCESS : FAILURE);
-                    break;
-                case CMD_ENABLE_ALL_NETWORKS:
-                    long time =  android.os.SystemClock.elapsedRealtime();
-                    if (time - mLastEnableAllNetworksTime > MIN_INTERVAL_ENABLE_ALL_NETWORKS_MS) {
-                        mWifiConfigStore.enableAllNetworks();
-                        mLastEnableAllNetworksTime = time;
-                    }
-                    break;
-                case WifiManager.DISABLE_NETWORK:
-                    if (mWifiConfigStore.disableNetwork(message.arg1,
-                            WifiConfiguration.DISABLED_UNKNOWN_REASON) == true) {
-                        replyToMessage(message, WifiManager.DISABLE_NETWORK_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiManager.DISABLE_NETWORK_FAILED,
-                                WifiManager.ERROR);
-                    }
-                    break;
-                case CMD_BLACKLIST_NETWORK:
-                    mWifiNative.addToBlacklist((String)message.obj);
-                    break;
-                case CMD_CLEAR_BLACKLIST:
-                    mWifiNative.clearBlacklist();
-                    break;
-                case CMD_SAVE_CONFIG:
-                    ok = mWifiConfigStore.saveConfig();
-                    replyToMessage(message, CMD_SAVE_CONFIG, ok ? SUCCESS : FAILURE);
-
-                    // Inform the backup manager about a data change
-                    IBackupManager ibm = IBackupManager.Stub.asInterface(
-                            ServiceManager.getService(Context.BACKUP_SERVICE));
-                    if (ibm != null) {
-                        try {
-                            ibm.dataChanged("com.android.providers.settings");
-                        } catch (Exception e) {
-                            // Try again later
-                        }
-                    }
-                    break;
-                case CMD_GET_CONFIGURED_NETWORKS:
-                    replyToMessage(message, message.what,
-                            mWifiConfigStore.getConfiguredNetworks());
-                    break;
-                    /* Do a redundant disconnect without transition */
-                case CMD_DISCONNECT:
-                    mWifiNative.disconnect();
-                    break;
-                case CMD_RECONNECT:
-                    mWifiNative.reconnect();
-                    break;
-                case CMD_REASSOCIATE:
-                    mWifiNative.reassociate();
-                    break;
-                case CMD_RELOAD_TLS_AND_RECONNECT:
-                    if (mWifiConfigStore.needsUnlockedKeyStore()) {
-                        logd("Reconnecting to give a chance to un-connected TLS networks");
-                        mWifiNative.disconnect();
-                        mWifiNative.reconnect();
-                    }
-                    break;
-                case WifiManager.CONNECT_NETWORK:
-                    /* The connect message can contain a network id passed as arg1 on message or
-                     * or a config passed as obj on message.
-                     * For a new network, a config is passed to create and connect.
-                     * For an existing network, a network id is passed
-                     */
-                    int netId = message.arg1;
-                    config = (WifiConfiguration) message.obj;
-
-                    /* Save the network config */
-                    if (config != null) {
-                        NetworkUpdateResult result = mWifiConfigStore.saveNetwork(config);
-                        netId = result.getNetworkId();
-                    }
-
-                    if (mWifiConfigStore.selectNetwork(netId) &&
-                            mWifiNative.reconnect()) {
-                        /* The state tracker handles enabling networks upon completion/failure */
-                        mSupplicantStateTracker.sendMessage(WifiManager.CONNECT_NETWORK);
-                        replyToMessage(message, WifiManager.CONNECT_NETWORK_SUCCEEDED);
-                        /* Expect a disconnection from the old connection */
-                        transitionTo(mDisconnectingState);
-                    } else {
-                        loge("Failed to connect config: " + config + " netId: " + netId);
-                        replyToMessage(message, WifiManager.CONNECT_NETWORK_FAILED,
-                                WifiManager.ERROR);
-                        break;
-                    }
-                    break;
-                case WifiManager.SAVE_NETWORK:
-                    config = (WifiConfiguration) message.obj;
-                    NetworkUpdateResult result = mWifiConfigStore.saveNetwork(config);
-                    if (result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID) {
-                        replyToMessage(message, WifiManager.SAVE_NETWORK_SUCCEEDED);
-                    } else {
-                        loge("Failed to save network");
-                        replyToMessage(message, WifiManager.SAVE_NETWORK_FAILED,
-                                WifiManager.ERROR);
-                    }
-                    break;
-                case WifiManager.FORGET_NETWORK:
-                    if (mWifiConfigStore.forgetNetwork(message.arg1)) {
-                        replyToMessage(message, WifiManager.FORGET_NETWORK_SUCCEEDED);
-                    } else {
-                        loge("Failed to forget network");
-                        replyToMessage(message, WifiManager.FORGET_NETWORK_FAILED,
-                                WifiManager.ERROR);
-                    }
-                    break;
-                case WifiManager.START_WPS:
-                    WpsInfo wpsInfo = (WpsInfo) message.obj;
-                    WpsResult wpsResult;
-                    switch (wpsInfo.setup) {
-                        case WpsInfo.PBC:
-                            wpsResult = mWifiConfigStore.startWpsPbc(wpsInfo);
-                            break;
-                        case WpsInfo.KEYPAD:
-                            wpsResult = mWifiConfigStore.startWpsWithPinFromAccessPoint(wpsInfo);
-                            break;
-                        case WpsInfo.DISPLAY:
-                            wpsResult = mWifiConfigStore.startWpsWithPinFromDevice(wpsInfo);
-                            break;
-                        default:
-                            wpsResult = new WpsResult(Status.FAILURE);
-                            loge("Invalid setup for WPS");
-                            break;
-                    }
-                    if (wpsResult.status == Status.SUCCESS) {
-                        replyToMessage(message, WifiManager.START_WPS_SUCCEEDED, wpsResult);
-                        transitionTo(mWpsRunningState);
-                    } else {
-                        loge("Failed to start WPS with config " + wpsInfo.toString());
-                        replyToMessage(message, WifiManager.WPS_FAILED, WifiManager.ERROR);
-                    }
-                    break;
-                case WifiMonitor.NETWORK_CONNECTION_EVENT:
-                    if (DBG) log("Network connection established");
-                    mLastNetworkId = message.arg1;
-                    mLastBssid = (String) message.obj;
-
-                    mWifiInfo.setBSSID(mLastBssid);
-                    mWifiInfo.setNetworkId(mLastNetworkId);
-                    /* send event to CM & network change broadcast */
-                    setNetworkDetailedState(DetailedState.OBTAINING_IPADDR);
-                    sendNetworkStateChangeBroadcast(mLastBssid);
-                    transitionTo(mObtainingIpState);
-                    break;
-                case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
-                    if (DBG) log("Network connection lost");
-                    handleNetworkDisconnect();
-                    transitionTo(mDisconnectedState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class L2ConnectedState extends State {
-        @Override
-        public void enter() {
-            mRssiPollToken++;
-            if (mEnableRssiPolling) {
-                sendMessage(CMD_RSSI_POLL, mRssiPollToken, 0);
-            }
-        }
-
-        @Override
-        public void exit() {
-            handleNetworkDisconnect();
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-              case DhcpStateMachine.CMD_PRE_DHCP_ACTION:
-                  handlePreDhcpSetup();
-                  break;
-              case DhcpStateMachine.CMD_POST_DHCP_ACTION:
-                  handlePostDhcpSetup();
-                  if (message.arg1 == DhcpStateMachine.DHCP_SUCCESS) {
-                      if (DBG) log("DHCP successful");
-                      handleSuccessfulIpConfiguration((DhcpResults) message.obj);
-                      transitionTo(mVerifyingLinkState);
-                  } else if (message.arg1 == DhcpStateMachine.DHCP_FAILURE) {
-                      if (DBG) log("DHCP failed");
-                      handleFailedIpConfiguration();
-                      transitionTo(mDisconnectingState);
-                  }
-                  break;
-                case CMD_DISCONNECT:
-                    mWifiNative.disconnect();
-                    transitionTo(mDisconnectingState);
-                    break;
-                case WifiP2pService.DISCONNECT_WIFI_REQUEST:
-                    if (message.arg1 == 1) {
-                        mWifiNative.disconnect();
-                        mTemporarilyDisconnectWifi = true;
-                        transitionTo(mDisconnectingState);
-                    }
-                    break;
-                case CMD_SET_OPERATIONAL_MODE:
-                    if (message.arg1 != CONNECT_MODE) {
-                        sendMessage(CMD_DISCONNECT);
-                        deferMessage(message);
-                    }
-                    break;
-                case CMD_SET_COUNTRY_CODE:
-                    deferMessage(message);
-                    break;
-                case CMD_START_SCAN:
-                    /* Do not attempt to connect when we are already connected */
-                    noteScanStart(message.arg1, (WorkSource) message.obj);
-                    startScanNative(WifiNative.SCAN_WITHOUT_CONNECTION_SETUP);
-                    break;
-                    /* Ignore connection to same network */
-                case WifiManager.CONNECT_NETWORK:
-                    int netId = message.arg1;
-                    if (mWifiInfo.getNetworkId() == netId) {
-                        break;
-                    }
-                    return NOT_HANDLED;
-                case WifiManager.SAVE_NETWORK:
-                    WifiConfiguration config = (WifiConfiguration) message.obj;
-                    NetworkUpdateResult result = mWifiConfigStore.saveNetwork(config);
-                    if (mWifiInfo.getNetworkId() == result.getNetworkId()) {
-                        if (result.hasIpChanged()) {
-                            log("Reconfiguring IP on connection");
-                            transitionTo(mObtainingIpState);
-                        }
-                        if (result.hasProxyChanged()) {
-                            log("Reconfiguring proxy on connection");
-                            updateLinkProperties();
-                        }
-                    }
-
-                    if (result.getNetworkId() != WifiConfiguration.INVALID_NETWORK_ID) {
-                        replyToMessage(message, WifiManager.SAVE_NETWORK_SUCCEEDED);
-                    } else {
-                        loge("Failed to save network");
-                        replyToMessage(message, WifiManager.SAVE_NETWORK_FAILED,
-                                WifiManager.ERROR);
-                    }
-                    break;
-                    /* Ignore */
-                case WifiMonitor.NETWORK_CONNECTION_EVENT:
-                    break;
-                case CMD_RSSI_POLL:
-                    if (message.arg1 == mRssiPollToken) {
-                        // Get Info and continue polling
-                        fetchRssiAndLinkSpeedNative();
-                        sendMessageDelayed(obtainMessage(CMD_RSSI_POLL,
-                                mRssiPollToken, 0), POLL_RSSI_INTERVAL_MSECS);
-                    } else {
-                        // Polling has completed
-                    }
-                    break;
-                case CMD_ENABLE_RSSI_POLL:
-                    mEnableRssiPolling = (message.arg1 == 1);
-                    mRssiPollToken++;
-                    if (mEnableRssiPolling) {
-                        // first poll
-                        fetchRssiAndLinkSpeedNative();
-                        sendMessageDelayed(obtainMessage(CMD_RSSI_POLL,
-                                mRssiPollToken, 0), POLL_RSSI_INTERVAL_MSECS);
-                    }
-                    break;
-                case WifiManager.RSSI_PKTCNT_FETCH:
-                    RssiPacketCountInfo info = new RssiPacketCountInfo();
-                    fetchRssiAndLinkSpeedNative();
-                    info.rssi = mWifiInfo.getRssi();
-                    fetchPktcntNative(info);
-                    replyToMessage(message, WifiManager.RSSI_PKTCNT_FETCH_SUCCEEDED, info);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-
-            return HANDLED;
-        }
-    }
-
-    class ObtainingIpState extends State {
-        @Override
-        public void enter() {
-            if (!mWifiConfigStore.isUsingStaticIp(mLastNetworkId)) {
-                // TODO: If we're switching between static IP configuration and DHCP, remove the
-                // static configuration first.
-                startDhcp();
-            } else {
-                // stop any running dhcp before assigning static IP
-                stopDhcp();
-                DhcpResults dhcpResults = new DhcpResults(
-                        mWifiConfigStore.getLinkProperties(mLastNetworkId));
-                InterfaceConfiguration ifcg = new InterfaceConfiguration();
-                Iterator<LinkAddress> addrs =
-                        dhcpResults.linkProperties.getLinkAddresses().iterator();
-                if (!addrs.hasNext()) {
-                    loge("Static IP lacks address");
-                    sendMessage(CMD_STATIC_IP_FAILURE);
-                } else {
-                    ifcg.setLinkAddress(addrs.next());
-                    ifcg.setInterfaceUp();
-                    try {
-                        mNwService.setInterfaceConfig(mInterfaceName, ifcg);
-                        if (DBG) log("Static IP configuration succeeded");
-                        sendMessage(CMD_STATIC_IP_SUCCESS, dhcpResults);
-                    } catch (RemoteException re) {
-                        loge("Static IP configuration failed: " + re);
-                        sendMessage(CMD_STATIC_IP_FAILURE);
-                    } catch (IllegalStateException e) {
-                        loge("Static IP configuration failed: " + e);
-                        sendMessage(CMD_STATIC_IP_FAILURE);
-                    }
-                }
-            }
-        }
-      @Override
-      public boolean processMessage(Message message) {
-          if (DBG) log(getName() + message.toString() + "\n");
-          switch(message.what) {
-            case CMD_STATIC_IP_SUCCESS:
-                  handleSuccessfulIpConfiguration((DhcpResults) message.obj);
-                  transitionTo(mVerifyingLinkState);
-                  break;
-              case CMD_STATIC_IP_FAILURE:
-                  handleFailedIpConfiguration();
-                  transitionTo(mDisconnectingState);
-                  break;
-             case WifiManager.SAVE_NETWORK:
-                  deferMessage(message);
-                  break;
-                  /* Defer any power mode changes since we must keep active power mode at DHCP */
-              case CMD_SET_HIGH_PERF_MODE:
-                  deferMessage(message);
-                  break;
-                  /* Defer scan request since we should not switch to other channels at DHCP */
-              case CMD_START_SCAN:
-                  deferMessage(message);
-                  break;
-              default:
-                  return NOT_HANDLED;
-          }
-          return HANDLED;
-      }
-    }
-
-    class VerifyingLinkState extends State {
-        @Override
-        public void enter() {
-            log(getName() + " enter");
-            setNetworkDetailedState(DetailedState.VERIFYING_POOR_LINK);
-            mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.VERIFYING_POOR_LINK);
-            sendNetworkStateChangeBroadcast(mLastBssid);
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case WifiWatchdogStateMachine.POOR_LINK_DETECTED:
-                    //stay here
-                    log(getName() + " POOR_LINK_DETECTED: no transition");
-                    break;
-                case WifiWatchdogStateMachine.GOOD_LINK_DETECTED:
-                    log(getName() + " GOOD_LINK_DETECTED: transition to captive portal check");
-                    transitionTo(mCaptivePortalCheckState);
-                    break;
-                default:
-                    if (DBG) log(getName() + " what=" + message.what + " NOT_HANDLED");
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class CaptivePortalCheckState extends State {
-        @Override
-        public void enter() {
-            log(getName() + " enter");
-            setNetworkDetailedState(DetailedState.CAPTIVE_PORTAL_CHECK);
-            mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.CAPTIVE_PORTAL_CHECK);
-            sendNetworkStateChangeBroadcast(mLastBssid);
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case CMD_CAPTIVE_CHECK_COMPLETE:
-                    log(getName() + " CMD_CAPTIVE_CHECK_COMPLETE");
-                    try {
-                        mNwService.enableIpv6(mInterfaceName);
-                    } catch (RemoteException re) {
-                        loge("Failed to enable IPv6: " + re);
-                    } catch (IllegalStateException e) {
-                        loge("Failed to enable IPv6: " + e);
-                    }
-                    setNetworkDetailedState(DetailedState.CONNECTED);
-                    mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.CONNECTED);
-                    sendNetworkStateChangeBroadcast(mLastBssid);
-                    transitionTo(mConnectedState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class ConnectedState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-               case WifiWatchdogStateMachine.POOR_LINK_DETECTED:
-                    if (DBG) log("Watchdog reports poor link");
-                    try {
-                        mNwService.disableIpv6(mInterfaceName);
-                    } catch (RemoteException re) {
-                        loge("Failed to disable IPv6: " + re);
-                    } catch (IllegalStateException e) {
-                        loge("Failed to disable IPv6: " + e);
-                    }
-                    /* Report a disconnect */
-                    setNetworkDetailedState(DetailedState.DISCONNECTED);
-                    mWifiConfigStore.updateStatus(mLastNetworkId, DetailedState.DISCONNECTED);
-                    sendNetworkStateChangeBroadcast(mLastBssid);
-
-                    transitionTo(mVerifyingLinkState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-        @Override
-        public void exit() {
-            /* Request a CS wakelock during transition to mobile */
-            checkAndSetConnectivityInstance();
-            mCm.requestNetworkTransitionWakelock(getName());
-        }
-    }
-
-    class DisconnectingState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case CMD_SET_OPERATIONAL_MODE:
-                    if (message.arg1 != CONNECT_MODE) {
-                        deferMessage(message);
-                    }
-                    break;
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    /* If we get a SUPPLICANT_STATE_CHANGE_EVENT before NETWORK_DISCONNECTION_EVENT
-                     * we have missed the network disconnection, transition to mDisconnectedState
-                     * and handle the rest of the events there
-                     */
-                    deferMessage(message);
-                    handleNetworkDisconnect();
-                    transitionTo(mDisconnectedState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class DisconnectedState extends State {
-        private boolean mAlarmEnabled = false;
-        /* This is set from the overlay config file or from a secure setting.
-         * A value of 0 disables scanning in the framework.
-         */
-        private long mFrameworkScanIntervalMs;
-
-        private void setScanAlarm(boolean enabled) {
-            if (enabled == mAlarmEnabled) return;
-            if (enabled) {
-                if (mFrameworkScanIntervalMs > 0) {
-                    mAlarmManager.setRepeating(AlarmManager.RTC_WAKEUP,
-                            System.currentTimeMillis() + mFrameworkScanIntervalMs,
-                            mFrameworkScanIntervalMs,
-                            mScanIntent);
-                    mAlarmEnabled = true;
-                }
-            } else {
-                mAlarmManager.cancel(mScanIntent);
-                mAlarmEnabled = false;
-            }
-        }
-
-        @Override
-        public void enter() {
-            // We dont scan frequently if this is a temporary disconnect
-            // due to p2p
-            if (mTemporarilyDisconnectWifi) {
-                mWifiP2pChannel.sendMessage(WifiP2pService.DISCONNECT_WIFI_RESPONSE);
-                return;
-            }
-
-            mFrameworkScanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
-                    Settings.Global.WIFI_FRAMEWORK_SCAN_INTERVAL_MS,
-                    mDefaultFrameworkScanIntervalMs);
-            /*
-             * We initiate background scanning if it is enabled, otherwise we
-             * initiate an infrequent scan that wakes up the device to ensure
-             * a user connects to an access point on the move
-             */
-            if (mEnableBackgroundScan) {
-                /* If a regular scan result is pending, do not initiate background
-                 * scan until the scan results are returned. This is needed because
-                 * initiating a background scan will cancel the regular scan and
-                 * scan results will not be returned until background scanning is
-                 * cleared
-                 */
-                if (!mScanResultIsPending) {
-                    mWifiNative.enableBackgroundScan(true);
-                }
-            } else {
-                setScanAlarm(true);
-            }
-
-            /**
-             * If we have no networks saved, the supplicant stops doing the periodic scan.
-             * The scans are useful to notify the user of the presence of an open network.
-             * Note that these are not wake up scans.
-             */
-            if (!mP2pConnected.get() && mWifiConfigStore.getConfiguredNetworks().size() == 0) {
-                sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
-                            ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
-            }
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            boolean ret = HANDLED;
-            switch (message.what) {
-                case CMD_NO_NETWORKS_PERIODIC_SCAN:
-                    if (mP2pConnected.get()) break;
-                    if (message.arg1 == mPeriodicScanToken &&
-                            mWifiConfigStore.getConfiguredNetworks().size() == 0) {
-                        sendMessage(CMD_START_SCAN, UNKNOWN_SCAN_SOURCE, 0, (WorkSource) null);
-                        sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
-                                    ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
-                    }
-                    break;
-                case WifiManager.FORGET_NETWORK:
-                case CMD_REMOVE_NETWORK:
-                    // Set up a delayed message here. After the forget/remove is handled
-                    // the handled delayed message will determine if there is a need to
-                    // scan and continue
-                    sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
-                                ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
-                    ret = NOT_HANDLED;
-                    break;
-                case CMD_SET_OPERATIONAL_MODE:
-                    if (message.arg1 != CONNECT_MODE) {
-                        mOperationalMode = message.arg1;
-
-                        mWifiConfigStore.disableAllNetworks();
-                        if (mOperationalMode == SCAN_ONLY_WITH_WIFI_OFF_MODE) {
-                            mWifiP2pChannel.sendMessage(CMD_DISABLE_P2P_REQ);
-                            setWifiState(WIFI_STATE_DISABLED);
-                        }
-
-                        transitionTo(mScanModeState);
-                    }
-                    break;
-                case CMD_ENABLE_BACKGROUND_SCAN:
-                    mEnableBackgroundScan = (message.arg1 == 1);
-                    if (mEnableBackgroundScan) {
-                        mWifiNative.enableBackgroundScan(true);
-                        setScanAlarm(false);
-                    } else {
-                        mWifiNative.enableBackgroundScan(false);
-                        setScanAlarm(true);
-                    }
-                    break;
-                    /* Ignore network disconnect */
-                case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
-                    break;
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    StateChangeResult stateChangeResult = (StateChangeResult) message.obj;
-                    setNetworkDetailedState(WifiInfo.getDetailedStateOf(stateChangeResult.state));
-                    /* ConnectModeState does the rest of the handling */
-                    ret = NOT_HANDLED;
-                    break;
-                case CMD_START_SCAN:
-                    /* Disable background scan temporarily during a regular scan */
-                    if (mEnableBackgroundScan) {
-                        mWifiNative.enableBackgroundScan(false);
-                    }
-                    /* Handled in parent state */
-                    ret = NOT_HANDLED;
-                    break;
-                case WifiMonitor.SCAN_RESULTS_EVENT:
-                    /* Re-enable background scan when a pending scan result is received */
-                    if (mEnableBackgroundScan && mScanResultIsPending) {
-                        mWifiNative.enableBackgroundScan(true);
-                    }
-                    /* Handled in parent state */
-                    ret = NOT_HANDLED;
-                    break;
-                case WifiP2pService.P2P_CONNECTION_CHANGED:
-                    NetworkInfo info = (NetworkInfo) message.obj;
-                    mP2pConnected.set(info.isConnected());
-                    if (mP2pConnected.get()) {
-                        int defaultInterval = mContext.getResources().getInteger(
-                                R.integer.config_wifi_scan_interval_p2p_connected);
-                        long scanIntervalMs = Settings.Global.getLong(mContext.getContentResolver(),
-                                Settings.Global.WIFI_SCAN_INTERVAL_WHEN_P2P_CONNECTED_MS,
-                                defaultInterval);
-                        mWifiNative.setScanInterval((int) scanIntervalMs/1000);
-                    } else if (mWifiConfigStore.getConfiguredNetworks().size() == 0) {
-                        if (DBG) log("Turn on scanning after p2p disconnected");
-                        sendMessageDelayed(obtainMessage(CMD_NO_NETWORKS_PERIODIC_SCAN,
-                                    ++mPeriodicScanToken, 0), mSupplicantScanIntervalMs);
-                    }
-                case CMD_RECONNECT:
-                case CMD_REASSOCIATE:
-                    if (mTemporarilyDisconnectWifi) {
-                        // Drop a third party reconnect/reassociate if STA is
-                        // temporarily disconnected for p2p
-                        break;
-                    } else {
-                        // ConnectModeState handles it
-                        ret = NOT_HANDLED;
-                    }
-                    break;
-                default:
-                    ret = NOT_HANDLED;
-            }
-            return ret;
-        }
-
-        @Override
-        public void exit() {
-            /* No need for a background scan upon exit from a disconnected state */
-            if (mEnableBackgroundScan) {
-                mWifiNative.enableBackgroundScan(false);
-            }
-            setScanAlarm(false);
-        }
-    }
-
-    class WpsRunningState extends State {
-        //Tracks the source to provide a reply
-        private Message mSourceMessage;
-        @Override
-        public void enter() {
-            mSourceMessage = Message.obtain(getCurrentMessage());
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-                case WifiMonitor.WPS_SUCCESS_EVENT:
-                    // Ignore intermediate success, wait for full connection
-                    break;
-                case WifiMonitor.NETWORK_CONNECTION_EVENT:
-                    replyToMessage(mSourceMessage, WifiManager.WPS_COMPLETED);
-                    mSourceMessage.recycle();
-                    mSourceMessage = null;
-                    deferMessage(message);
-                    transitionTo(mDisconnectedState);
-                    break;
-                case WifiMonitor.WPS_OVERLAP_EVENT:
-                    replyToMessage(mSourceMessage, WifiManager.WPS_FAILED,
-                            WifiManager.WPS_OVERLAP_ERROR);
-                    mSourceMessage.recycle();
-                    mSourceMessage = null;
-                    transitionTo(mDisconnectedState);
-                    break;
-                case WifiMonitor.WPS_FAIL_EVENT:
-                    //arg1 has the reason for the failure
-                    replyToMessage(mSourceMessage, WifiManager.WPS_FAILED, message.arg1);
-                    mSourceMessage.recycle();
-                    mSourceMessage = null;
-                    transitionTo(mDisconnectedState);
-                    break;
-                case WifiMonitor.WPS_TIMEOUT_EVENT:
-                    replyToMessage(mSourceMessage, WifiManager.WPS_FAILED,
-                            WifiManager.WPS_TIMED_OUT);
-                    mSourceMessage.recycle();
-                    mSourceMessage = null;
-                    transitionTo(mDisconnectedState);
-                    break;
-                case WifiManager.START_WPS:
-                    replyToMessage(message, WifiManager.WPS_FAILED, WifiManager.IN_PROGRESS);
-                    break;
-                case WifiManager.CANCEL_WPS:
-                    if (mWifiNative.cancelWps()) {
-                        replyToMessage(message, WifiManager.CANCEL_WPS_SUCCEDED);
-                    } else {
-                        replyToMessage(message, WifiManager.CANCEL_WPS_FAILED, WifiManager.ERROR);
-                    }
-                    transitionTo(mDisconnectedState);
-                    break;
-                /* Defer all commands that can cause connections to a different network
-                 * or put the state machine out of connect mode
-                 */
-                case CMD_STOP_DRIVER:
-                case CMD_SET_OPERATIONAL_MODE:
-                case WifiManager.CONNECT_NETWORK:
-                case CMD_ENABLE_NETWORK:
-                case CMD_RECONNECT:
-                case CMD_REASSOCIATE:
-                    deferMessage(message);
-                    break;
-                case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
-                    if (DBG) log("Network connection lost");
-                    handleNetworkDisconnect();
-                    break;
-                case WifiMonitor.ASSOCIATION_REJECTION_EVENT:
-                    if (DBG) log("Ignore Assoc reject event during WPS Connection");
-                    break;
-                case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
-                    // Disregard auth failure events during WPS connection. The
-                    // EAP sequence is retried several times, and there might be
-                    // failures (especially for wps pin). We will get a WPS_XXX
-                    // event at the end of the sequence anyway.
-                    if (DBG) log("Ignore auth failure during WPS connection");
-                    break;
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                    //Throw away supplicant state changes when WPS is running.
-                    //We will start getting supplicant state changes once we get
-                    //a WPS success or failure
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        @Override
-        public void exit() {
-            mWifiConfigStore.enableAllNetworks();
-            mWifiConfigStore.loadConfiguredNetworks();
-        }
-    }
-
-    class SoftApStartingState extends State {
-        @Override
-        public void enter() {
-            final Message message = getCurrentMessage();
-            if (message.what == CMD_START_AP) {
-                final WifiConfiguration config = (WifiConfiguration) message.obj;
-
-                if (config == null) {
-                    mWifiApConfigChannel.sendMessage(CMD_REQUEST_AP_CONFIG);
-                } else {
-                    mWifiApConfigChannel.sendMessage(CMD_SET_AP_CONFIG, config);
-                    startSoftApWithConfig(config);
-                }
-            } else {
-                throw new RuntimeException("Illegal transition to SoftApStartingState: " + message);
-            }
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_START_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT:
-                case CMD_START_AP:
-                case CMD_STOP_AP:
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_SET_OPERATIONAL_MODE:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                case CMD_TETHER_STATE_CHANGE:
-                    deferMessage(message);
-                    break;
-                case WifiStateMachine.CMD_RESPONSE_AP_CONFIG:
-                    WifiConfiguration config = (WifiConfiguration) message.obj;
-                    if (config != null) {
-                        startSoftApWithConfig(config);
-                    } else {
-                        loge("Softap config is null!");
-                        sendMessage(CMD_START_AP_FAILURE);
-                    }
-                    break;
-                case CMD_START_AP_SUCCESS:
-                    setWifiApState(WIFI_AP_STATE_ENABLED);
-                    transitionTo(mSoftApStartedState);
-                    break;
-                case CMD_START_AP_FAILURE:
-                    setWifiApState(WIFI_AP_STATE_FAILED);
-                    transitionTo(mInitialState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class SoftApStartedState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_STOP_AP:
-                    if (DBG) log("Stopping Soft AP");
-                    /* We have not tethered at this point, so we just shutdown soft Ap */
-                    try {
-                        mNwService.stopAccessPoint(mInterfaceName);
-                    } catch(Exception e) {
-                        loge("Exception in stopAccessPoint()");
-                    }
-                    setWifiApState(WIFI_AP_STATE_DISABLED);
-                    transitionTo(mInitialState);
-                    break;
-                case CMD_START_AP:
-                    // Ignore a start on a running access point
-                    break;
-                    /* Fail client mode operation when soft AP is enabled */
-                case CMD_START_SUPPLICANT:
-                    loge("Cannot start supplicant with a running soft AP");
-                    setWifiState(WIFI_STATE_UNKNOWN);
-                    break;
-                case CMD_TETHER_STATE_CHANGE:
-                    TetherStateChange stateChange = (TetherStateChange) message.obj;
-                    if (startTethering(stateChange.available)) {
-                        transitionTo(mTetheringState);
-                    }
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class TetheringState extends State {
-        @Override
-        public void enter() {
-            /* Send ourselves a delayed message to shut down if tethering fails to notify */
-            sendMessageDelayed(obtainMessage(CMD_TETHER_NOTIFICATION_TIMED_OUT,
-                    ++mTetherToken, 0), TETHER_NOTIFICATION_TIME_OUT_MSECS);
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_TETHER_STATE_CHANGE:
-                    TetherStateChange stateChange = (TetherStateChange) message.obj;
-                    if (isWifiTethered(stateChange.active)) {
-                        transitionTo(mTetheredState);
-                    }
-                    return HANDLED;
-                case CMD_TETHER_NOTIFICATION_TIMED_OUT:
-                    if (message.arg1 == mTetherToken) {
-                        loge("Failed to get tether update, shutdown soft access point");
-                        transitionTo(mSoftApStartedState);
-                        // Needs to be first thing handled
-                        sendMessageAtFrontOfQueue(CMD_STOP_AP);
-                    }
-                    break;
-                case CMD_START_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT:
-                case CMD_START_AP:
-                case CMD_STOP_AP:
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_SET_OPERATIONAL_MODE:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class TetheredState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_TETHER_STATE_CHANGE:
-                    TetherStateChange stateChange = (TetherStateChange) message.obj;
-                    if (!isWifiTethered(stateChange.active)) {
-                        loge("Tethering reports wifi as untethered!, shut down soft Ap");
-                        setHostApRunning(null, false);
-                        setHostApRunning(null, true);
-                    }
-                    return HANDLED;
-                case CMD_STOP_AP:
-                    if (DBG) log("Untethering before stopping AP");
-                    setWifiApState(WIFI_AP_STATE_DISABLING);
-                    stopTethering();
-                    transitionTo(mUntetheringState);
-                    // More work to do after untethering
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class UntetheringState extends State {
-        @Override
-        public void enter() {
-            /* Send ourselves a delayed message to shut down if tethering fails to notify */
-            sendMessageDelayed(obtainMessage(CMD_TETHER_NOTIFICATION_TIMED_OUT,
-                    ++mTetherToken, 0), TETHER_NOTIFICATION_TIME_OUT_MSECS);
-
-        }
-        @Override
-        public boolean processMessage(Message message) {
-            switch(message.what) {
-                case CMD_TETHER_STATE_CHANGE:
-                    TetherStateChange stateChange = (TetherStateChange) message.obj;
-
-                    /* Wait till wifi is untethered */
-                    if (isWifiTethered(stateChange.active)) break;
-
-                    transitionTo(mSoftApStartedState);
-                    break;
-                case CMD_TETHER_NOTIFICATION_TIMED_OUT:
-                    if (message.arg1 == mTetherToken) {
-                        loge("Failed to get tether update, force stop access point");
-                        transitionTo(mSoftApStartedState);
-                    }
-                    break;
-                case CMD_START_SUPPLICANT:
-                case CMD_STOP_SUPPLICANT:
-                case CMD_START_AP:
-                case CMD_STOP_AP:
-                case CMD_START_DRIVER:
-                case CMD_STOP_DRIVER:
-                case CMD_SET_OPERATIONAL_MODE:
-                case CMD_SET_COUNTRY_CODE:
-                case CMD_SET_FREQUENCY_BAND:
-                case CMD_START_PACKET_FILTERING:
-                case CMD_STOP_PACKET_FILTERING:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    //State machine initiated requests can have replyTo set to null indicating
-    //there are no recepients, we ignore those reply actions
-    private void replyToMessage(Message msg, int what) {
-        if (msg.replyTo == null) return;
-        Message dstMsg = obtainMessageWithArg2(msg);
-        dstMsg.what = what;
-        mReplyChannel.replyToMessage(msg, dstMsg);
-    }
-
-    private void replyToMessage(Message msg, int what, int arg1) {
-        if (msg.replyTo == null) return;
-        Message dstMsg = obtainMessageWithArg2(msg);
-        dstMsg.what = what;
-        dstMsg.arg1 = arg1;
-        mReplyChannel.replyToMessage(msg, dstMsg);
-    }
-
-    private void replyToMessage(Message msg, int what, Object obj) {
-        if (msg.replyTo == null) return;
-        Message dstMsg = obtainMessageWithArg2(msg);
-        dstMsg.what = what;
-        dstMsg.obj = obj;
-        mReplyChannel.replyToMessage(msg, dstMsg);
-    }
-
-    /**
-     * arg2 on the source message has a unique id that needs to be retained in replies
-     * to match the request
-
-     * see WifiManager for details
-     */
-    private Message obtainMessageWithArg2(Message srcMsg) {
-        Message msg = Message.obtain();
-        msg.arg2 = srcMsg.arg2;
-        return msg;
-    }
-}
diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java
index 615c893..7ded171 100644
--- a/wifi/java/android/net/wifi/WifiStateTracker.java
+++ b/wifi/java/android/net/wifi/WifiStateTracker.java
@@ -115,14 +115,6 @@
         return true;
     }
 
-    /**
-     * Captive check is complete, switch to network
-     */
-    @Override
-    public void captivePortalCheckComplete() {
-        mWifiManager.captivePortalCheckComplete();
-    }
-
     @Override
     public void captivePortalCheckCompleted(boolean isCaptivePortal) {
         // not implemented
diff --git a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java b/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
deleted file mode 100644
index 6278c89..0000000
--- a/wifi/java/android/net/wifi/WifiWatchdogStateMachine.java
+++ /dev/null
@@ -1,1212 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.net.wifi;
-
-import android.content.BroadcastReceiver;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.database.ContentObserver;
-import android.net.ConnectivityManager;
-import android.net.LinkProperties;
-import android.net.NetworkInfo;
-import android.net.wifi.RssiPacketCountInfo;
-import android.os.Message;
-import android.os.SystemClock;
-import android.provider.Settings;
-import android.provider.Settings.Secure;
-import android.util.Log;
-import android.util.LruCache;
-
-import com.android.internal.R;
-import com.android.internal.util.AsyncChannel;
-import com.android.internal.util.Protocol;
-import com.android.internal.util.State;
-import com.android.internal.util.StateMachine;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.text.DecimalFormat;
-
-/**
- * WifiWatchdogStateMachine monitors the connection to a WiFi network. When WiFi
- * connects at L2 layer, the beacons from access point reach the device and it
- * can maintain a connection, but the application connectivity can be flaky (due
- * to bigger packet size exchange).
- * <p>
- * We now monitor the quality of the last hop on WiFi using packet loss ratio as
- * an indicator to decide if the link is good enough to switch to Wi-Fi as the
- * uplink.
- * <p>
- * When WiFi is connected, the WiFi watchdog keeps sampling the RSSI and the
- * instant packet loss, and record it as per-AP loss-to-rssi statistics. When
- * the instant packet loss is higher than a threshold, the WiFi watchdog sends a
- * poor link notification to avoid WiFi connection temporarily.
- * <p>
- * While WiFi is being avoided, the WiFi watchdog keep watching the RSSI to
- * bring the WiFi connection back. Once the RSSI is high enough to achieve a
- * lower packet loss, a good link detection is sent such that the WiFi
- * connection become available again.
- * <p>
- * BSSID roaming has been taken into account. When user is moving across
- * multiple APs, the WiFi watchdog will detect that and keep watching the
- * currently connected AP.
- * <p>
- * Power impact should be minimal since much of the measurement relies on
- * passive statistics already being tracked at the driver and the polling is
- * done when screen is turned on and the RSSI is in a certain range.
- *
- * @hide
- */
-public class WifiWatchdogStateMachine extends StateMachine {
-
-    private static final boolean DBG = false;
-
-    private static final int BASE = Protocol.BASE_WIFI_WATCHDOG;
-
-    /* Internal events */
-    private static final int EVENT_WATCHDOG_TOGGLED                 = BASE + 1;
-    private static final int EVENT_NETWORK_STATE_CHANGE             = BASE + 2;
-    private static final int EVENT_RSSI_CHANGE                      = BASE + 3;
-    private static final int EVENT_SUPPLICANT_STATE_CHANGE          = BASE + 4;
-    private static final int EVENT_WIFI_RADIO_STATE_CHANGE          = BASE + 5;
-    private static final int EVENT_WATCHDOG_SETTINGS_CHANGE         = BASE + 6;
-    private static final int EVENT_BSSID_CHANGE                     = BASE + 7;
-    private static final int EVENT_SCREEN_ON                        = BASE + 8;
-    private static final int EVENT_SCREEN_OFF                       = BASE + 9;
-
-    /* Internal messages */
-    private static final int CMD_RSSI_FETCH                         = BASE + 11;
-
-    /* Notifications from/to WifiStateMachine */
-    static final int POOR_LINK_DETECTED                             = BASE + 21;
-    static final int GOOD_LINK_DETECTED                             = BASE + 22;
-
-    public static final boolean DEFAULT_POOR_NETWORK_AVOIDANCE_ENABLED = false;
-
-    /*
-     * RSSI levels as used by notification icon
-     * Level 4  -55 <= RSSI
-     * Level 3  -66 <= RSSI < -55
-     * Level 2  -77 <= RSSI < -67
-     * Level 1  -88 <= RSSI < -78
-     * Level 0         RSSI < -88
-     */
-
-    /**
-     * WiFi link statistics is monitored and recorded actively below this threshold.
-     * <p>
-     * Larger threshold is more adaptive but increases sampling cost.
-     */
-    private static final int LINK_MONITOR_LEVEL_THRESHOLD = WifiManager.RSSI_LEVELS - 1;
-
-    /**
-     * Remember packet loss statistics of how many BSSIDs.
-     * <p>
-     * Larger size is usually better but requires more space.
-     */
-    private static final int BSSID_STAT_CACHE_SIZE = 20;
-
-    /**
-     * RSSI range of a BSSID statistics.
-     * Within the range, (RSSI -> packet loss %) mappings are stored.
-     * <p>
-     * Larger range is usually better but requires more space.
-     */
-    private static final int BSSID_STAT_RANGE_LOW_DBM  = -105;
-
-    /**
-     * See {@link #BSSID_STAT_RANGE_LOW_DBM}.
-     */
-    private static final int BSSID_STAT_RANGE_HIGH_DBM = -45;
-
-    /**
-     * How many consecutive empty data point to trigger a empty-cache detection.
-     * In this case, a preset/default loss value (function on RSSI) is used.
-     * <p>
-     * In normal uses, some RSSI values may never be seen due to channel randomness.
-     * However, the size of such empty RSSI chunk in normal use is generally 1~2.
-     */
-    private static final int BSSID_STAT_EMPTY_COUNT = 3;
-
-    /**
-     * Sample interval for packet loss statistics, in msec.
-     * <p>
-     * Smaller interval is more accurate but increases sampling cost (battery consumption).
-     */
-    private static final long LINK_SAMPLING_INTERVAL_MS = 1 * 1000;
-
-    /**
-     * Coefficients (alpha) for moving average for packet loss tracking.
-     * Must be within (0.0, 1.0).
-     * <p>
-     * Equivalent number of samples: N = 2 / alpha - 1 .
-     * We want the historic loss to base on more data points to be statistically reliable.
-     * We want the current instant loss to base on less data points to be responsive.
-     */
-    private static final double EXP_COEFFICIENT_RECORD  = 0.1;
-
-    /**
-     * See {@link #EXP_COEFFICIENT_RECORD}.
-     */
-    private static final double EXP_COEFFICIENT_MONITOR = 0.5;
-
-    /**
-     * Thresholds for sending good/poor link notifications, in packet loss %.
-     * Good threshold must be smaller than poor threshold.
-     * Use smaller poor threshold to avoid WiFi more aggressively.
-     * Use smaller good threshold to bring back WiFi more conservatively.
-     * <p>
-     * When approaching the boundary, loss ratio jumps significantly within a few dBs.
-     * 50% loss threshold is a good balance between accuracy and reponsiveness.
-     * <=10% good threshold is a safe value to avoid jumping back to WiFi too easily.
-     */
-    private static final double POOR_LINK_LOSS_THRESHOLD = 0.5;
-
-    /**
-     * See {@link #POOR_LINK_LOSS_THRESHOLD}.
-     */
-    private static final double GOOD_LINK_LOSS_THRESHOLD = 0.1;
-
-    /**
-     * Number of samples to confirm before sending a poor link notification.
-     * Response time = confirm_count * sample_interval .
-     * <p>
-     * A smaller threshold improves response speed but may suffer from randomness.
-     * According to experiments, 3~5 are good values to achieve a balance.
-     * These parameters should be tuned along with {@link #LINK_SAMPLING_INTERVAL_MS}.
-     */
-    private static final int POOR_LINK_SAMPLE_COUNT = 3;
-
-    /**
-     * Minimum volume (converted from pkt/sec) to detect a poor link, to avoid randomness.
-     * <p>
-     * According to experiments, 1pkt/sec is too sensitive but 3pkt/sec is slightly unresponsive.
-     */
-    private static final double POOR_LINK_MIN_VOLUME = 2.0 * LINK_SAMPLING_INTERVAL_MS / 1000.0;
-
-    /**
-     * When a poor link is detected, we scan over this range (based on current
-     * poor link RSSI) for a target RSSI that satisfies a target packet loss.
-     * Refer to {@link #GOOD_LINK_TARGET}.
-     * <p>
-     * We want range_min not too small to avoid jumping back to WiFi too easily.
-     */
-    private static final int GOOD_LINK_RSSI_RANGE_MIN = 3;
-
-    /**
-     * See {@link #GOOD_LINK_RSSI_RANGE_MIN}.
-     */
-    private static final int GOOD_LINK_RSSI_RANGE_MAX = 20;
-
-    /**
-     * Adaptive good link target to avoid flapping.
-     * When a poor link is detected, a good link target is calculated as follows:
-     * <p>
-     *      targetRSSI = min { rssi | loss(rssi) < GOOD_LINK_LOSS_THRESHOLD } + rssi_adj[i],
-     *                   where rssi is within the above GOOD_LINK_RSSI_RANGE.
-     *      targetCount = sample_count[i] .
-     * <p>
-     * While WiFi is being avoided, we keep monitoring its signal strength.
-     * Good link notification is sent when we see current RSSI >= targetRSSI
-     * for targetCount consecutive times.
-     * <p>
-     * Index i is incremented each time after a poor link detection.
-     * Index i is decreased to at most k if the last poor link was at lease reduce_time[k] ago.
-     * <p>
-     * Intuitively, larger index i makes it more difficult to get back to WiFi, avoiding flapping.
-     * In experiments, (+9 dB / 30 counts) makes it quite difficult to achieve.
-     * Avoid using it unless flapping is really bad (say, last poor link is < 1 min ago).
-     */
-    private static final GoodLinkTarget[] GOOD_LINK_TARGET = {
-        /*                  rssi_adj,       sample_count,   reduce_time */
-        new GoodLinkTarget( 0,              3,              30 * 60000   ),
-        new GoodLinkTarget( 3,              5,              5  * 60000   ),
-        new GoodLinkTarget( 6,              10,             1  * 60000   ),
-        new GoodLinkTarget( 9,              30,             0  * 60000   ),
-    };
-
-    /**
-     * The max time to avoid a BSSID, to prevent avoiding forever.
-     * If current RSSI is at least min_rssi[i], the max avoidance time is at most max_time[i]
-     * <p>
-     * It is unusual to experience high packet loss at high RSSI. Something unusual must be
-     * happening (e.g. strong interference). For higher signal strengths, we set the avoidance
-     * time to be low to allow for quick turn around from temporary interference.
-     * <p>
-     * See {@link BssidStatistics#poorLinkDetected}.
-     */
-    private static final MaxAvoidTime[] MAX_AVOID_TIME = {
-        /*                  max_time,           min_rssi */
-        new MaxAvoidTime(   30 * 60000,         -200      ),
-        new MaxAvoidTime(   5  * 60000,         -70       ),
-        new MaxAvoidTime(   0  * 60000,         -55       ),
-    };
-
-    /* Framework related */
-    private Context mContext;
-    private ContentResolver mContentResolver;
-    private WifiManager mWifiManager;
-    private IntentFilter mIntentFilter;
-    private BroadcastReceiver mBroadcastReceiver;
-    private AsyncChannel mWsmChannel = new AsyncChannel();
-    private WifiInfo mWifiInfo;
-    private LinkProperties mLinkProperties;
-
-    /* System settingss related */
-    private static boolean sWifiOnly = false;
-    private boolean mPoorNetworkDetectionEnabled;
-
-    /* Poor link detection related */
-    private LruCache<String, BssidStatistics> mBssidCache =
-            new LruCache<String, BssidStatistics>(BSSID_STAT_CACHE_SIZE);
-    private int mRssiFetchToken = 0;
-    private int mCurrentSignalLevel;
-    private BssidStatistics mCurrentBssid;
-    private VolumeWeightedEMA mCurrentLoss;
-    private boolean mIsScreenOn = true;
-    private static double sPresetLoss[];
-
-    /* WiFi watchdog state machine related */
-    private DefaultState mDefaultState = new DefaultState();
-    private WatchdogDisabledState mWatchdogDisabledState = new WatchdogDisabledState();
-    private WatchdogEnabledState mWatchdogEnabledState = new WatchdogEnabledState();
-    private NotConnectedState mNotConnectedState = new NotConnectedState();
-    private VerifyingLinkState mVerifyingLinkState = new VerifyingLinkState();
-    private ConnectedState mConnectedState = new ConnectedState();
-    private OnlineWatchState mOnlineWatchState = new OnlineWatchState();
-    private LinkMonitoringState mLinkMonitoringState = new LinkMonitoringState();
-    private OnlineState mOnlineState = new OnlineState();
-
-    /**
-     * STATE MAP
-     *          Default
-     *         /       \
-     * Disabled      Enabled
-     *             /     \     \
-     * NotConnected  Verifying  Connected
-     *                         /---------\
-     *                       (all other states)
-     */
-    private WifiWatchdogStateMachine(Context context) {
-        super("WifiWatchdogStateMachine");
-        mContext = context;
-        mContentResolver = context.getContentResolver();
-        mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
-        mWsmChannel.connectSync(mContext, getHandler(),
-                mWifiManager.getWifiStateMachineMessenger());
-
-        setupNetworkReceiver();
-
-        // the content observer to listen needs a handler
-        registerForSettingsChanges();
-        registerForWatchdogToggle();
-        addState(mDefaultState);
-            addState(mWatchdogDisabledState, mDefaultState);
-            addState(mWatchdogEnabledState, mDefaultState);
-                addState(mNotConnectedState, mWatchdogEnabledState);
-                addState(mVerifyingLinkState, mWatchdogEnabledState);
-                addState(mConnectedState, mWatchdogEnabledState);
-                    addState(mOnlineWatchState, mConnectedState);
-                    addState(mLinkMonitoringState, mConnectedState);
-                    addState(mOnlineState, mConnectedState);
-
-        if (isWatchdogEnabled()) {
-            setInitialState(mNotConnectedState);
-        } else {
-            setInitialState(mWatchdogDisabledState);
-        }
-        setLogRecSize(25);
-        setLogOnlyTransitions(true);
-        updateSettings();
-    }
-
-    public static WifiWatchdogStateMachine makeWifiWatchdogStateMachine(Context context) {
-        ContentResolver contentResolver = context.getContentResolver();
-
-        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(
-                Context.CONNECTIVITY_SERVICE);
-        sWifiOnly = (cm.isNetworkSupported(ConnectivityManager.TYPE_MOBILE) == false);
-
-        // Watchdog is always enabled. Poor network detection can be seperately turned on/off
-        // TODO: Remove this setting & clean up state machine since we always have
-        // watchdog in an enabled state
-        putSettingsGlobalBoolean(contentResolver, Settings.Global.WIFI_WATCHDOG_ON, true);
-
-        WifiWatchdogStateMachine wwsm = new WifiWatchdogStateMachine(context);
-        wwsm.start();
-        return wwsm;
-    }
-
-    private void setupNetworkReceiver() {
-        mBroadcastReceiver = new BroadcastReceiver() {
-            @Override
-            public void onReceive(Context context, Intent intent) {
-                String action = intent.getAction();
-                if (action.equals(WifiManager.RSSI_CHANGED_ACTION)) {
-                    obtainMessage(EVENT_RSSI_CHANGE,
-                            intent.getIntExtra(WifiManager.EXTRA_NEW_RSSI, -200), 0).sendToTarget();
-                } else if (action.equals(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION)) {
-                    sendMessage(EVENT_SUPPLICANT_STATE_CHANGE, intent);
-                } else if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
-                    sendMessage(EVENT_NETWORK_STATE_CHANGE, intent);
-                } else if (action.equals(Intent.ACTION_SCREEN_ON)) {
-                    sendMessage(EVENT_SCREEN_ON);
-                } else if (action.equals(Intent.ACTION_SCREEN_OFF)) {
-                    sendMessage(EVENT_SCREEN_OFF);
-                } else if (action.equals(WifiManager.WIFI_STATE_CHANGED_ACTION)) {
-                    sendMessage(EVENT_WIFI_RADIO_STATE_CHANGE,intent.getIntExtra(
-                            WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN));
-                }
-            }
-        };
-
-        mIntentFilter = new IntentFilter();
-        mIntentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION);
-        mIntentFilter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION);
-        mIntentFilter.addAction(Intent.ACTION_SCREEN_ON);
-        mIntentFilter.addAction(Intent.ACTION_SCREEN_OFF);
-        mContext.registerReceiver(mBroadcastReceiver, mIntentFilter);
-    }
-
-    /**
-     * Observes the watchdog on/off setting, and takes action when changed.
-     */
-    private void registerForWatchdogToggle() {
-        ContentObserver contentObserver = new ContentObserver(this.getHandler()) {
-            @Override
-            public void onChange(boolean selfChange) {
-                sendMessage(EVENT_WATCHDOG_TOGGLED);
-            }
-        };
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.WIFI_WATCHDOG_ON),
-                false, contentObserver);
-    }
-
-    /**
-     * Observes watchdogs secure setting changes.
-     */
-    private void registerForSettingsChanges() {
-        ContentObserver contentObserver = new ContentObserver(this.getHandler()) {
-            @Override
-            public void onChange(boolean selfChange) {
-                sendMessage(EVENT_WATCHDOG_SETTINGS_CHANGE);
-            }
-        };
-
-        mContext.getContentResolver().registerContentObserver(
-                Settings.Global.getUriFor(Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED),
-                false, contentObserver);
-    }
-
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        super.dump(fd, pw, args);
-        pw.println("mWifiInfo: [" + mWifiInfo + "]");
-        pw.println("mLinkProperties: [" + mLinkProperties + "]");
-        pw.println("mCurrentSignalLevel: [" + mCurrentSignalLevel + "]");
-        pw.println("mPoorNetworkDetectionEnabled: [" + mPoorNetworkDetectionEnabled + "]");
-    }
-
-    private boolean isWatchdogEnabled() {
-        boolean ret = getSettingsGlobalBoolean(
-                mContentResolver, Settings.Global.WIFI_WATCHDOG_ON, true);
-        if (DBG) logd("Watchdog enabled " + ret);
-        return ret;
-    }
-
-    private void updateSettings() {
-        if (DBG) logd("Updating secure settings");
-
-        // disable poor network avoidance
-        if (sWifiOnly) {
-            logd("Disabling poor network avoidance for wi-fi only device");
-            mPoorNetworkDetectionEnabled = false;
-        } else {
-            mPoorNetworkDetectionEnabled = getSettingsGlobalBoolean(mContentResolver,
-                    Settings.Global.WIFI_WATCHDOG_POOR_NETWORK_TEST_ENABLED,
-                    DEFAULT_POOR_NETWORK_AVOIDANCE_ENABLED);
-        }
-    }
-
-    /**
-     * Default state, guard for unhandled messages.
-     */
-    class DefaultState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case EVENT_WATCHDOG_SETTINGS_CHANGE:
-                    updateSettings();
-                    if (DBG) logd("Updating wifi-watchdog secure settings");
-                    break;
-                case EVENT_RSSI_CHANGE:
-                    mCurrentSignalLevel = calculateSignalLevel(msg.arg1);
-                    break;
-                case EVENT_WIFI_RADIO_STATE_CHANGE:
-                case EVENT_NETWORK_STATE_CHANGE:
-                case EVENT_SUPPLICANT_STATE_CHANGE:
-                case EVENT_BSSID_CHANGE:
-                case CMD_RSSI_FETCH:
-                case WifiManager.RSSI_PKTCNT_FETCH_SUCCEEDED:
-                case WifiManager.RSSI_PKTCNT_FETCH_FAILED:
-                    // ignore
-                    break;
-                case EVENT_SCREEN_ON:
-                    mIsScreenOn = true;
-                    break;
-                case EVENT_SCREEN_OFF:
-                    mIsScreenOn = false;
-                    break;
-                default:
-                    loge("Unhandled message " + msg + " in state " + getCurrentState().getName());
-                    break;
-            }
-            return HANDLED;
-        }
-    }
-
-    /**
-     * WiFi watchdog is disabled by the setting.
-     */
-    class WatchdogDisabledState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case EVENT_WATCHDOG_TOGGLED:
-                    if (isWatchdogEnabled())
-                        transitionTo(mNotConnectedState);
-                    return HANDLED;
-                case EVENT_NETWORK_STATE_CHANGE:
-                    Intent intent = (Intent) msg.obj;
-                    NetworkInfo networkInfo = (NetworkInfo)
-                            intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
-
-                    switch (networkInfo.getDetailedState()) {
-                        case VERIFYING_POOR_LINK:
-                            if (DBG) logd("Watchdog disabled, verify link");
-                            sendLinkStatusNotification(true);
-                            break;
-                        default:
-                            break;
-                    }
-                    break;
-            }
-            return NOT_HANDLED;
-        }
-    }
-
-    /**
-     * WiFi watchdog is enabled by the setting.
-     */
-    class WatchdogEnabledState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            Intent intent;
-            switch (msg.what) {
-                case EVENT_WATCHDOG_TOGGLED:
-                    if (!isWatchdogEnabled())
-                        transitionTo(mWatchdogDisabledState);
-                    break;
-
-                case EVENT_NETWORK_STATE_CHANGE:
-                    intent = (Intent) msg.obj;
-                    NetworkInfo networkInfo =
-                            (NetworkInfo) intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
-                    if (DBG) logd("Network state change " + networkInfo.getDetailedState());
-
-                    mWifiInfo = (WifiInfo) intent.getParcelableExtra(WifiManager.EXTRA_WIFI_INFO);
-                    updateCurrentBssid(mWifiInfo != null ? mWifiInfo.getBSSID() : null);
-
-                    switch (networkInfo.getDetailedState()) {
-                        case VERIFYING_POOR_LINK:
-                            mLinkProperties = (LinkProperties) intent.getParcelableExtra(
-                                    WifiManager.EXTRA_LINK_PROPERTIES);
-                            if (mPoorNetworkDetectionEnabled) {
-                                if (mWifiInfo == null || mCurrentBssid == null) {
-                                    loge("Ignore, wifiinfo " + mWifiInfo +" bssid " + mCurrentBssid);
-                                    sendLinkStatusNotification(true);
-                                } else {
-                                    transitionTo(mVerifyingLinkState);
-                                }
-                            } else {
-                                sendLinkStatusNotification(true);
-                            }
-                            break;
-                        case CONNECTED:
-                            transitionTo(mOnlineWatchState);
-                            break;
-                        default:
-                            transitionTo(mNotConnectedState);
-                            break;
-                    }
-                    break;
-
-                case EVENT_SUPPLICANT_STATE_CHANGE:
-                    intent = (Intent) msg.obj;
-                    SupplicantState supplicantState = (SupplicantState) intent.getParcelableExtra(
-                            WifiManager.EXTRA_NEW_STATE);
-                    if (supplicantState == SupplicantState.COMPLETED) {
-                        mWifiInfo = mWifiManager.getConnectionInfo();
-                        updateCurrentBssid(mWifiInfo.getBSSID());
-                    }
-                    break;
-
-                case EVENT_WIFI_RADIO_STATE_CHANGE:
-                    if (msg.arg1 == WifiManager.WIFI_STATE_DISABLING) {
-                        transitionTo(mNotConnectedState);
-                    }
-                    break;
-
-                default:
-                    return NOT_HANDLED;
-            }
-
-            return HANDLED;
-        }
-    }
-
-    /**
-     * WiFi is disconnected.
-     */
-    class NotConnectedState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-    }
-
-    /**
-     * WiFi is connected, but waiting for good link detection message.
-     */
-    class VerifyingLinkState extends State {
-
-        private int mSampleCount;
-
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            mSampleCount = 0;
-            mCurrentBssid.newLinkDetected();
-            sendMessage(obtainMessage(CMD_RSSI_FETCH, ++mRssiFetchToken, 0));
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case EVENT_WATCHDOG_SETTINGS_CHANGE:
-                    updateSettings();
-                    if (!mPoorNetworkDetectionEnabled) {
-                        sendLinkStatusNotification(true);
-                    }
-                    break;
-
-                case EVENT_BSSID_CHANGE:
-                    transitionTo(mVerifyingLinkState);
-                    break;
-
-                case CMD_RSSI_FETCH:
-                    if (msg.arg1 == mRssiFetchToken) {
-                        mWsmChannel.sendMessage(WifiManager.RSSI_PKTCNT_FETCH);
-                        sendMessageDelayed(obtainMessage(CMD_RSSI_FETCH, ++mRssiFetchToken, 0),
-                                LINK_SAMPLING_INTERVAL_MS);
-                    }
-                    break;
-
-                case WifiManager.RSSI_PKTCNT_FETCH_SUCCEEDED:
-                    RssiPacketCountInfo info = (RssiPacketCountInfo) msg.obj;
-                    int rssi = info.rssi;
-                    if (DBG) logd("Fetch RSSI succeed, rssi=" + rssi);
-
-                    long time = mCurrentBssid.mBssidAvoidTimeMax - SystemClock.elapsedRealtime();
-                    if (time <= 0) {
-                        // max avoidance time is met
-                        if (DBG) logd("Max avoid time elapsed");
-                        sendLinkStatusNotification(true);
-                    } else {
-                        if (rssi >= mCurrentBssid.mGoodLinkTargetRssi) {
-                            if (++mSampleCount >= mCurrentBssid.mGoodLinkTargetCount) {
-                                // link is good again
-                                if (DBG) logd("Good link detected, rssi=" + rssi);
-                                mCurrentBssid.mBssidAvoidTimeMax = 0;
-                                sendLinkStatusNotification(true);
-                            }
-                        } else {
-                            mSampleCount = 0;
-                            if (DBG) logd("Link is still poor, time left=" + time);
-                        }
-                    }
-                    break;
-
-                case WifiManager.RSSI_PKTCNT_FETCH_FAILED:
-                    if (DBG) logd("RSSI_FETCH_FAILED");
-                    break;
-
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    /**
-     * WiFi is connected and link is verified.
-     */
-    class ConnectedState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case EVENT_WATCHDOG_SETTINGS_CHANGE:
-                    updateSettings();
-                    if (mPoorNetworkDetectionEnabled) {
-                        transitionTo(mOnlineWatchState);
-                    } else {
-                        transitionTo(mOnlineState);
-                    }
-                    return HANDLED;
-            }
-            return NOT_HANDLED;
-        }
-    }
-
-    /**
-     * RSSI is high enough and don't need link monitoring.
-     */
-    class OnlineWatchState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            if (mPoorNetworkDetectionEnabled) {
-                // treat entry as an rssi change
-                handleRssiChange();
-            } else {
-                transitionTo(mOnlineState);
-            }
-        }
-
-        private void handleRssiChange() {
-            if (mCurrentSignalLevel <= LINK_MONITOR_LEVEL_THRESHOLD && mCurrentBssid != null) {
-                transitionTo(mLinkMonitoringState);
-            } else {
-                // stay here
-            }
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case EVENT_RSSI_CHANGE:
-                    mCurrentSignalLevel = calculateSignalLevel(msg.arg1);
-                    handleRssiChange();
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    /**
-     * Keep sampling the link and monitor any poor link situation.
-     */
-    class LinkMonitoringState extends State {
-
-        private int mSampleCount;
-
-        private int mLastRssi;
-        private int mLastTxGood;
-        private int mLastTxBad;
-
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            mSampleCount = 0;
-            mCurrentLoss = new VolumeWeightedEMA(EXP_COEFFICIENT_MONITOR);
-            sendMessage(obtainMessage(CMD_RSSI_FETCH, ++mRssiFetchToken, 0));
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case EVENT_RSSI_CHANGE:
-                    mCurrentSignalLevel = calculateSignalLevel(msg.arg1);
-                    if (mCurrentSignalLevel <= LINK_MONITOR_LEVEL_THRESHOLD) {
-                        // stay here;
-                    } else {
-                        // we don't need frequent RSSI monitoring any more
-                        transitionTo(mOnlineWatchState);
-                    }
-                    break;
-
-                case EVENT_BSSID_CHANGE:
-                    transitionTo(mLinkMonitoringState);
-                    break;
-
-                case CMD_RSSI_FETCH:
-                    if (!mIsScreenOn) {
-                        transitionTo(mOnlineState);
-                    } else if (msg.arg1 == mRssiFetchToken) {
-                        mWsmChannel.sendMessage(WifiManager.RSSI_PKTCNT_FETCH);
-                        sendMessageDelayed(obtainMessage(CMD_RSSI_FETCH, ++mRssiFetchToken, 0),
-                                LINK_SAMPLING_INTERVAL_MS);
-                    }
-                    break;
-
-                case WifiManager.RSSI_PKTCNT_FETCH_SUCCEEDED:
-                    RssiPacketCountInfo info = (RssiPacketCountInfo) msg.obj;
-                    int rssi = info.rssi;
-                    int mrssi = (mLastRssi + rssi) / 2;
-                    int txbad = info.txbad;
-                    int txgood = info.txgood;
-                    if (DBG) logd("Fetch RSSI succeed, rssi=" + rssi + " mrssi=" + mrssi + " txbad="
-                            + txbad + " txgood=" + txgood);
-
-                    // skip the first data point as we want incremental values
-                    long now = SystemClock.elapsedRealtime();
-                    if (now - mCurrentBssid.mLastTimeSample < LINK_SAMPLING_INTERVAL_MS * 2) {
-
-                        // update packet loss statistics
-                        int dbad = txbad - mLastTxBad;
-                        int dgood = txgood - mLastTxGood;
-                        int dtotal = dbad + dgood;
-
-                        if (dtotal > 0) {
-                            // calculate packet loss in the last sampling interval
-                            double loss = ((double) dbad) / ((double) dtotal);
-
-                            mCurrentLoss.update(loss, dtotal);
-
-                            if (DBG) {
-                                DecimalFormat df = new DecimalFormat("#.##");
-                                logd("Incremental loss=" + dbad + "/" + dtotal + " Current loss="
-                                        + df.format(mCurrentLoss.mValue * 100) + "% volume="
-                                        + df.format(mCurrentLoss.mVolume));
-                            }
-
-                            mCurrentBssid.updateLoss(mrssi, loss, dtotal);
-
-                            // check for high packet loss and send poor link notification
-                            if (mCurrentLoss.mValue > POOR_LINK_LOSS_THRESHOLD
-                                    && mCurrentLoss.mVolume > POOR_LINK_MIN_VOLUME) {
-                                if (++mSampleCount >= POOR_LINK_SAMPLE_COUNT)
-                                    if (mCurrentBssid.poorLinkDetected(rssi)) {
-                                        sendLinkStatusNotification(false);
-                                        ++mRssiFetchToken;
-                                    }
-                            } else {
-                                mSampleCount = 0;
-                            }
-                        }
-                    }
-
-                    mCurrentBssid.mLastTimeSample = now;
-                    mLastTxBad = txbad;
-                    mLastTxGood = txgood;
-                    mLastRssi = rssi;
-                    break;
-
-                case WifiManager.RSSI_PKTCNT_FETCH_FAILED:
-                    // can happen if we are waiting to get a disconnect notification
-                    if (DBG) logd("RSSI_FETCH_FAILED");
-                    break;
-
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-   }
-
-    /**
-     * Child state of ConnectedState indicating that we are online and there is nothing to do.
-     */
-    class OnlineState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message msg) {
-            switch (msg.what) {
-                case EVENT_SCREEN_ON:
-                    mIsScreenOn = true;
-                    if (mPoorNetworkDetectionEnabled)
-                        transitionTo(mOnlineWatchState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    private void updateCurrentBssid(String bssid) {
-        if (DBG) logd("Update current BSSID to " + (bssid != null ? bssid : "null"));
-
-        // if currently not connected, then set current BSSID to null
-        if (bssid == null) {
-            if (mCurrentBssid == null) return;
-            mCurrentBssid = null;
-            if (DBG) logd("BSSID changed");
-            sendMessage(EVENT_BSSID_CHANGE);
-            return;
-        }
-
-        // if it is already the current BSSID, then done
-        if (mCurrentBssid != null && bssid.equals(mCurrentBssid.mBssid)) return;
-
-        // search for the new BSSID in the cache, add to cache if not found
-        mCurrentBssid = mBssidCache.get(bssid);
-        if (mCurrentBssid == null) {
-            mCurrentBssid = new BssidStatistics(bssid);
-            mBssidCache.put(bssid, mCurrentBssid);
-        }
-
-        // send BSSID change notification
-        if (DBG) logd("BSSID changed");
-        sendMessage(EVENT_BSSID_CHANGE);
-    }
-
-    private int calculateSignalLevel(int rssi) {
-        int signalLevel = WifiManager.calculateSignalLevel(rssi, WifiManager.RSSI_LEVELS);
-        if (DBG)
-            logd("RSSI current: " + mCurrentSignalLevel + " new: " + rssi + ", " + signalLevel);
-        return signalLevel;
-    }
-
-    private void sendLinkStatusNotification(boolean isGood) {
-        if (DBG) logd("########################################");
-        if (isGood) {
-            mWsmChannel.sendMessage(GOOD_LINK_DETECTED);
-            if (mCurrentBssid != null) {
-                mCurrentBssid.mLastTimeGood = SystemClock.elapsedRealtime();
-            }
-            if (DBG) logd("Good link notification is sent");
-        } else {
-            mWsmChannel.sendMessage(POOR_LINK_DETECTED);
-            if (mCurrentBssid != null) {
-                mCurrentBssid.mLastTimePoor = SystemClock.elapsedRealtime();
-            }
-            logd("Poor link notification is sent");
-        }
-    }
-
-    /**
-     * Convenience function for retrieving a single secure settings value as a
-     * boolean. Note that internally setting values are always stored as
-     * strings; this function converts the string to a boolean for you. The
-     * default value will be returned if the setting is not defined or not a
-     * valid boolean.
-     *
-     * @param cr The ContentResolver to access.
-     * @param name The name of the setting to retrieve.
-     * @param def Value to return if the setting is not defined.
-     * @return The setting's current value, or 'def' if it is not defined or not
-     *         a valid boolean.
-     */
-    private static boolean getSettingsGlobalBoolean(ContentResolver cr, String name, boolean def) {
-        return Settings.Global.getInt(cr, name, def ? 1 : 0) == 1;
-    }
-
-    /**
-     * Convenience function for updating a single settings value as an integer.
-     * This will either create a new entry in the table if the given name does
-     * not exist, or modify the value of the existing row with that name. Note
-     * that internally setting values are always stored as strings, so this
-     * function converts the given value to a string before storing it.
-     *
-     * @param cr The ContentResolver to access.
-     * @param name The name of the setting to modify.
-     * @param value The new value for the setting.
-     * @return true if the value was set, false on database errors
-     */
-    private static boolean putSettingsGlobalBoolean(ContentResolver cr, String name, boolean value) {
-        return Settings.Global.putInt(cr, name, value ? 1 : 0);
-    }
-
-    /**
-     * Bundle of good link count parameters
-     */
-    private static class GoodLinkTarget {
-        public final int RSSI_ADJ_DBM;
-        public final int SAMPLE_COUNT;
-        public final int REDUCE_TIME_MS;
-        public GoodLinkTarget(int adj, int count, int time) {
-            RSSI_ADJ_DBM = adj;
-            SAMPLE_COUNT = count;
-            REDUCE_TIME_MS = time;
-        }
-    }
-
-    /**
-     * Bundle of max avoidance time parameters
-     */
-    private static class MaxAvoidTime {
-        public final int TIME_MS;
-        public final int MIN_RSSI_DBM;
-        public MaxAvoidTime(int time, int rssi) {
-            TIME_MS = time;
-            MIN_RSSI_DBM = rssi;
-        }
-    }
-
-    /**
-     * Volume-weighted Exponential Moving Average (V-EMA)
-     *    - volume-weighted:  each update has its own weight (number of packets)
-     *    - exponential:      O(1) time and O(1) space for both update and query
-     *    - moving average:   reflect most recent results and expire old ones
-     */
-    private class VolumeWeightedEMA {
-        private double mValue;
-        private double mVolume;
-        private double mProduct;
-        private final double mAlpha;
-
-        public VolumeWeightedEMA(double coefficient) {
-            mValue   = 0.0;
-            mVolume  = 0.0;
-            mProduct = 0.0;
-            mAlpha   = coefficient;
-        }
-
-        public void update(double newValue, int newVolume) {
-            if (newVolume <= 0) return;
-            // core update formulas
-            double newProduct = newValue * newVolume;
-            mProduct = mAlpha * newProduct + (1 - mAlpha) * mProduct;
-            mVolume  = mAlpha * newVolume  + (1 - mAlpha) * mVolume;
-            mValue   = mProduct / mVolume;
-        }
-    }
-
-    /**
-     * Record (RSSI -> pakce loss %) mappings of one BSSID
-     */
-    private class BssidStatistics {
-
-        /* MAC address of this BSSID */
-        private final String mBssid;
-
-        /* RSSI -> packet loss % mappings */
-        private VolumeWeightedEMA[] mEntries;
-        private int mRssiBase;
-        private int mEntriesSize;
-
-        /* Target to send good link notification, set when poor link is detected */
-        private int mGoodLinkTargetRssi;
-        private int mGoodLinkTargetCount;
-
-        /* Index of GOOD_LINK_TARGET array */
-        private int mGoodLinkTargetIndex;
-
-        /* Timestamps of some last events */
-        private long mLastTimeSample;
-        private long mLastTimeGood;
-        private long mLastTimePoor;
-
-        /* Max time to avoid this BSSID */
-        private long mBssidAvoidTimeMax;
-
-        /**
-         * Constructor
-         *
-         * @param bssid is the address of this BSSID
-         */
-        public BssidStatistics(String bssid) {
-            this.mBssid = bssid;
-            mRssiBase = BSSID_STAT_RANGE_LOW_DBM;
-            mEntriesSize = BSSID_STAT_RANGE_HIGH_DBM - BSSID_STAT_RANGE_LOW_DBM + 1;
-            mEntries = new VolumeWeightedEMA[mEntriesSize];
-            for (int i = 0; i < mEntriesSize; i++)
-                mEntries[i] = new VolumeWeightedEMA(EXP_COEFFICIENT_RECORD);
-        }
-
-        /**
-         * Update this BSSID cache
-         *
-         * @param rssi is the RSSI
-         * @param value is the new instant loss value at this RSSI
-         * @param volume is the volume for this single update
-         */
-        public void updateLoss(int rssi, double value, int volume) {
-            if (volume <= 0) return;
-            int index = rssi - mRssiBase;
-            if (index < 0 || index >= mEntriesSize) return;
-            mEntries[index].update(value, volume);
-            if (DBG) {
-                DecimalFormat df = new DecimalFormat("#.##");
-                logd("Cache updated: loss[" + rssi + "]=" + df.format(mEntries[index].mValue * 100)
-                        + "% volume=" + df.format(mEntries[index].mVolume));
-            }
-        }
-
-        /**
-         * Get preset loss if the cache has insufficient data, observed from experiments.
-         *
-         * @param rssi is the input RSSI
-         * @return preset loss of the given RSSI
-         */
-        public double presetLoss(int rssi) {
-            if (rssi <= -90) return 1.0;
-            if (rssi > 0) return 0.0;
-
-            if (sPresetLoss == null) {
-                // pre-calculate all preset losses only once, then reuse them
-                final int size = 90;
-                sPresetLoss = new double[size];
-                for (int i = 0; i < size; i++) sPresetLoss[i] = 1.0 / Math.pow(90 - i, 1.5);
-            }
-            return sPresetLoss[-rssi];
-        }
-
-        /**
-         * A poor link is detected, calculate a target RSSI to bring WiFi back.
-         *
-         * @param rssi is the current RSSI
-         * @return true iff the current BSSID should be avoided
-         */
-        public boolean poorLinkDetected(int rssi) {
-            if (DBG) logd("Poor link detected, rssi=" + rssi);
-
-            long now = SystemClock.elapsedRealtime();
-            long lastGood = now - mLastTimeGood;
-            long lastPoor = now - mLastTimePoor;
-
-            // reduce the difficulty of good link target if last avoidance was long time ago
-            while (mGoodLinkTargetIndex > 0
-                    && lastPoor >= GOOD_LINK_TARGET[mGoodLinkTargetIndex - 1].REDUCE_TIME_MS)
-                mGoodLinkTargetIndex--;
-            mGoodLinkTargetCount = GOOD_LINK_TARGET[mGoodLinkTargetIndex].SAMPLE_COUNT;
-
-            // scan for a target RSSI at which the link is good
-            int from = rssi + GOOD_LINK_RSSI_RANGE_MIN;
-            int to = rssi + GOOD_LINK_RSSI_RANGE_MAX;
-            mGoodLinkTargetRssi = findRssiTarget(from, to, GOOD_LINK_LOSS_THRESHOLD);
-            mGoodLinkTargetRssi += GOOD_LINK_TARGET[mGoodLinkTargetIndex].RSSI_ADJ_DBM;
-            if (mGoodLinkTargetIndex < GOOD_LINK_TARGET.length - 1) mGoodLinkTargetIndex++;
-
-            // calculate max avoidance time to prevent avoiding forever
-            int p = 0, pmax = MAX_AVOID_TIME.length - 1;
-            while (p < pmax && rssi >= MAX_AVOID_TIME[p + 1].MIN_RSSI_DBM) p++;
-            long avoidMax = MAX_AVOID_TIME[p].TIME_MS;
-
-            // don't avoid if max avoidance time is 0 (RSSI is super high)
-            if (avoidMax <= 0) return false;
-
-            // set max avoidance time, send poor link notification
-            mBssidAvoidTimeMax = now + avoidMax;
-
-            if (DBG) logd("goodRssi=" + mGoodLinkTargetRssi + " goodCount=" + mGoodLinkTargetCount
-                    + " lastGood=" + lastGood + " lastPoor=" + lastPoor + " avoidMax=" + avoidMax);
-
-            return true;
-        }
-
-        /**
-         * A new BSSID is connected, recalculate target RSSI threshold
-         */
-        public void newLinkDetected() {
-            // if this BSSID is currently being avoided, the reuse those values
-            if (mBssidAvoidTimeMax > 0) {
-                if (DBG) logd("Previous avoidance still in effect, rssi=" + mGoodLinkTargetRssi
-                        + " count=" + mGoodLinkTargetCount);
-                return;
-            }
-
-            // calculate a new RSSI threshold for new link verifying
-            int from = BSSID_STAT_RANGE_LOW_DBM;
-            int to = BSSID_STAT_RANGE_HIGH_DBM;
-            mGoodLinkTargetRssi = findRssiTarget(from, to, GOOD_LINK_LOSS_THRESHOLD);
-            mGoodLinkTargetCount = 1;
-            mBssidAvoidTimeMax = SystemClock.elapsedRealtime() + MAX_AVOID_TIME[0].TIME_MS;
-            if (DBG) logd("New link verifying target set, rssi=" + mGoodLinkTargetRssi + " count="
-                    + mGoodLinkTargetCount);
-        }
-
-        /**
-         * Return the first RSSI within the range where loss[rssi] < threshold
-         *
-         * @param from start scanning from this RSSI
-         * @param to stop scanning at this RSSI
-         * @param threshold target threshold for scanning
-         * @return target RSSI
-         */
-        public int findRssiTarget(int from, int to, double threshold) {
-            from -= mRssiBase;
-            to -= mRssiBase;
-            int emptyCount = 0;
-            int d = from < to ? 1 : -1;
-            for (int i = from; i != to; i += d)
-                // don't use a data point if it volume is too small (statistically unreliable)
-                if (i >= 0 && i < mEntriesSize && mEntries[i].mVolume > 1.0) {
-                    emptyCount = 0;
-                    if (mEntries[i].mValue < threshold) {
-                        // scan target found
-                        int rssi = mRssiBase + i;
-                        if (DBG) {
-                            DecimalFormat df = new DecimalFormat("#.##");
-                            logd("Scan target found: rssi=" + rssi + " threshold="
-                                    + df.format(threshold * 100) + "% value="
-                                    + df.format(mEntries[i].mValue * 100) + "% volume="
-                                    + df.format(mEntries[i].mVolume));
-                        }
-                        return rssi;
-                    }
-                } else if (++emptyCount >= BSSID_STAT_EMPTY_COUNT) {
-                    // cache has insufficient data around this RSSI, use preset loss instead
-                    int rssi = mRssiBase + i;
-                    double lossPreset = presetLoss(rssi);
-                    if (lossPreset < threshold) {
-                        if (DBG) {
-                            DecimalFormat df = new DecimalFormat("#.##");
-                            logd("Scan target found: rssi=" + rssi + " threshold="
-                                    + df.format(threshold * 100) + "% value="
-                                    + df.format(lossPreset * 100) + "% volume=preset");
-                        }
-                        return rssi;
-                    }
-                }
-
-            return mRssiBase + to;
-        }
-    }
-}
diff --git a/wifi/java/android/net/wifi/WpsInfo.java b/wifi/java/android/net/wifi/WpsInfo.java
index b80df21..2ad4ad0 100644
--- a/wifi/java/android/net/wifi/WpsInfo.java
+++ b/wifi/java/android/net/wifi/WpsInfo.java
@@ -19,8 +19,6 @@
 import android.os.Parcelable;
 import android.os.Parcel;
 
-import java.util.BitSet;
-
 /**
  * A class representing Wi-Fi Protected Setup
  *
diff --git a/wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl b/wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl
new file mode 100644
index 0000000..2b1601b
--- /dev/null
+++ b/wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl
@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 2014, 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 android.net.wifi.hotspot;
+
+/**
+ * Interface that allows controlling and querying Hotspot connectivity.
+ *
+ * {@hide}
+ */
+interface IWifiHotspotManager
+{
+    void test();
+}
+
diff --git a/wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java b/wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java
new file mode 100644
index 0000000..ac15017
--- /dev/null
+++ b/wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2014 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 android.net.wifi.hotspot;
+
+import android.content.Context;
+import android.os.RemoteException;
+import android.util.Log;
+
+/**
+ * TODO: doc
+ */
+public class WifiHotspotManager {
+
+    private static final String TAG = "WifiHotspotManager";
+
+    private Context mContext;
+    IWifiHotspotManager mService;
+
+    public WifiHotspotManager(Context context, IWifiHotspotManager service) {
+        mContext = context;
+        mService = service;
+    }
+
+    public void test() {
+        try{
+            Log.d(TAG, "test()");
+            mService.test();
+        }
+        catch (RemoteException e) {
+            Log.e(TAG, "test() exception");
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
index 482d9cb..b019fd7 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pConfig.java
@@ -60,7 +60,8 @@
         wps.setup = WpsInfo.PBC;
     }
 
-    void invalidate() {
+    /** @hide */
+    public void invalidate() {
         deviceAddress = "";
     }
 
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
index 7196c1b..a0cb035 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pDevice.java
@@ -126,7 +126,7 @@
         "config_methods=(0x[0-9a-fA-F]+) " +
         "dev_capab=(0x[0-9a-fA-F]+) " +
         "group_capab=(0x[0-9a-fA-F]+)" +
-        "( wfd_dev_info=0x000006([0-9a-fA-F]{12}))?"
+        "( wfd_dev_info=0x([0-9a-fA-F]{12}))?"
     );
 
     /** 2 token device address pattern
@@ -274,7 +274,7 @@
     }
 
     /** Updates details obtained from supplicant @hide */
-    void updateSupplicantDetails(WifiP2pDevice device) {
+    public void updateSupplicantDetails(WifiP2pDevice device) {
         if (device == null) {
             throw new IllegalArgumentException("device is null");
         }
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
index 0900351..3d0bb3d 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pDeviceList.java
@@ -20,7 +20,6 @@
 import android.os.Parcel;
 import android.net.wifi.p2p.WifiP2pDevice;
 import android.text.TextUtils;
-import android.util.Log;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -90,7 +89,7 @@
     }
 
     /** Only updates details fetched from the supplicant @hide */
-    void updateSupplicantDetails(WifiP2pDevice device) {
+    public void updateSupplicantDetails(WifiP2pDevice device) {
         validateDevice(device);
         WifiP2pDevice d = mDevices.get(device.deviceAddress);
         if (d != null) {
@@ -108,7 +107,7 @@
     }
 
     /** @hide */
-    void updateGroupCapability(String deviceAddress, int groupCapab) {
+    public void updateGroupCapability(String deviceAddress, int groupCapab) {
         validateDeviceAddress(deviceAddress);
         WifiP2pDevice d = mDevices.get(deviceAddress);
         if (d != null) {
@@ -117,7 +116,7 @@
     }
 
     /** @hide */
-    void updateStatus(String deviceAddress, int status) {
+    public void updateStatus(String deviceAddress, int status) {
         validateDeviceAddress(deviceAddress);
         WifiP2pDevice d = mDevices.get(deviceAddress);
         if (d != null) {
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
index 98f0972..64bb00b 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pGroupList.java
@@ -42,11 +42,13 @@
         public void onDeleteGroup(int netId);
     }
 
-    WifiP2pGroupList() {
+    /** @hide */
+    public WifiP2pGroupList() {
         this(null, null);
     }
 
-    WifiP2pGroupList(WifiP2pGroupList source, GroupDeleteListener listener) {
+    /** @hide */
+    public WifiP2pGroupList(WifiP2pGroupList source, GroupDeleteListener listener) {
         mListener = listener;
         mGroups = new LruCache<Integer, WifiP2pGroup>(CREDENTIAL_MAX_NUM) {
             @Override
@@ -78,8 +80,9 @@
      * Add the specified group to this group list.
      *
      * @param group
+     * @hide
      */
-    void add(WifiP2pGroup group) {
+    public void add(WifiP2pGroup group) {
         mGroups.put(group.getNetworkId(), group);
     }
 
@@ -87,8 +90,9 @@
      * Remove the group with the specified network id from this group list.
      *
      * @param netId
+     * @hide
      */
-    void remove(int netId) {
+    public void remove(int netId) {
         mGroups.remove(netId);
     }
 
@@ -103,8 +107,9 @@
 
     /**
      * Clear the group.
+     * @hide
      */
-    boolean clear() {
+    public boolean clear() {
         if (mGroups.size() == 0) return false;
         isClearCalled = true;
         mGroups.evictAll();
@@ -120,8 +125,9 @@
      *
      * @param deviceAddress p2p device address.
      * @return the network id. if not found, return -1.
+     * @hide
      */
-    int getNetworkId(String deviceAddress) {
+    public int getNetworkId(String deviceAddress) {
         if (deviceAddress == null) return -1;
 
         final Collection<WifiP2pGroup> groups = mGroups.snapshot().values();
@@ -142,8 +148,9 @@
      * @param deviceAddress p2p device address.
      * @param ssid ssid.
      * @return the network id. if not found, return -1.
+     * @hide
      */
-    int getNetworkId(String deviceAddress, String ssid) {
+    public int getNetworkId(String deviceAddress, String ssid) {
         if (deviceAddress == null || ssid == null) {
             return -1;
         }
@@ -166,8 +173,9 @@
      *
      * @param netId network id.
      * @return the address. if not found, return null.
+     * @hide
      */
-    String getOwnerAddr(int netId) {
+    public String getOwnerAddr(int netId) {
         WifiP2pGroup grp = mGroups.get(netId);
         if (grp != null) {
             return grp.getOwner().deviceAddress;
@@ -182,8 +190,9 @@
      *
      * @param netId network id.
      * @return true if the specified network id is present in this group list.
+     * @hide
      */
-    boolean contains(int netId) {
+    public boolean contains(int netId) {
         final Collection<WifiP2pGroup> groups = mGroups.snapshot().values();
         for (WifiP2pGroup grp: groups) {
             if (netId == grp.getNetworkId()) {
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
index 4988b92..3ed2406 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pManager.java
@@ -19,8 +19,6 @@
 import android.annotation.SdkConstant;
 import android.annotation.SdkConstant.SdkConstantType;
 import android.content.Context;
-import android.net.ConnectivityManager;
-import android.net.IConnectivityManager;
 import android.net.wifi.WpsInfo;
 import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceInfo;
 import android.net.wifi.p2p.nsd.WifiP2pDnsSdServiceResponse;
@@ -29,16 +27,12 @@
 import android.net.wifi.p2p.nsd.WifiP2pServiceResponse;
 import android.net.wifi.p2p.nsd.WifiP2pUpnpServiceInfo;
 import android.net.wifi.p2p.nsd.WifiP2pUpnpServiceResponse;
-import android.os.Binder;
 import android.os.Bundle;
-import android.os.IBinder;
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
 import android.os.Messenger;
 import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.WorkSource;
 import android.text.TextUtils;
 import android.util.Log;
 
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java b/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java
index b3f34b4..98683cb 100644
--- a/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java
+++ b/wifi/java/android/net/wifi/p2p/WifiP2pProvDiscEvent.java
@@ -16,10 +16,6 @@
 
 package android.net.wifi.p2p;
 
-import android.os.Parcelable;
-import android.os.Parcel;
-import android.util.Log;
-
 /**
  * A class representing a Wi-Fi p2p provisional discovery request/response
  * See {@link #WifiP2pProvDiscEvent} for supported types
diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java
deleted file mode 100644
index 8b07208..0000000
--- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java
+++ /dev/null
@@ -1,2959 +0,0 @@
-/*
- * Copyright (C) 2011 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 android.net.wifi.p2p;
-
-import android.app.AlertDialog;
-import android.app.Notification;
-import android.app.NotificationManager;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnClickListener;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.content.res.Configuration;
-import android.content.res.Resources;
-import android.net.IConnectivityManager;
-import android.net.ConnectivityManager;
-import android.net.DhcpResults;
-import android.net.DhcpStateMachine;
-import android.net.InterfaceConfiguration;
-import android.net.LinkAddress;
-import android.net.LinkProperties;
-import android.net.NetworkInfo;
-import android.net.NetworkUtils;
-import android.net.wifi.WifiManager;
-import android.net.wifi.WifiMonitor;
-import android.net.wifi.WifiNative;
-import android.net.wifi.WifiStateMachine;
-import android.net.wifi.WpsInfo;
-import android.net.wifi.p2p.WifiP2pGroupList.GroupDeleteListener;
-import android.net.wifi.p2p.nsd.WifiP2pServiceInfo;
-import android.net.wifi.p2p.nsd.WifiP2pServiceRequest;
-import android.net.wifi.p2p.nsd.WifiP2pServiceResponse;
-import android.os.Binder;
-import android.os.Bundle;
-import android.os.IBinder;
-import android.os.INetworkManagementService;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Message;
-import android.os.Messenger;
-import android.os.RemoteException;
-import android.os.ServiceManager;
-import android.os.SystemProperties;
-import android.os.UserHandle;
-import android.provider.Settings;
-import android.text.TextUtils;
-import android.util.Slog;
-import android.util.SparseArray;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowManager;
-import android.widget.EditText;
-import android.widget.TextView;
-
-import com.android.internal.R;
-import com.android.internal.telephony.TelephonyIntents;
-import com.android.internal.util.AsyncChannel;
-import com.android.internal.util.Protocol;
-import com.android.internal.util.State;
-import com.android.internal.util.StateMachine;
-
-import java.io.FileDescriptor;
-import java.io.PrintWriter;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-
-
-/**
- * WifiP2pService includes a state machine to perform Wi-Fi p2p operations. Applications
- * communicate with this service to issue device discovery and connectivity requests
- * through the WifiP2pManager interface. The state machine communicates with the wifi
- * driver through wpa_supplicant and handles the event responses through WifiMonitor.
- *
- * Note that the term Wifi when used without a p2p suffix refers to the client mode
- * of Wifi operation
- * @hide
- */
-public class WifiP2pService extends IWifiP2pManager.Stub {
-    private static final String TAG = "WifiP2pService";
-    private static final boolean DBG = false;
-    private static final String NETWORKTYPE = "WIFI_P2P";
-
-    private Context mContext;
-    private String mInterface;
-    private Notification mNotification;
-
-    INetworkManagementService mNwService;
-    private DhcpStateMachine mDhcpStateMachine;
-
-    private P2pStateMachine mP2pStateMachine;
-    private AsyncChannel mReplyChannel = new AsyncChannel();
-    private AsyncChannel mWifiChannel;
-
-    private static final Boolean JOIN_GROUP = true;
-    private static final Boolean FORM_GROUP = false;
-
-    private static final Boolean RELOAD = true;
-    private static final Boolean NO_RELOAD = false;
-
-    /* Two minutes comes from the wpa_supplicant setting */
-    private static final int GROUP_CREATING_WAIT_TIME_MS = 120 * 1000;
-    private static int mGroupCreatingTimeoutIndex = 0;
-
-    private static final int DISABLE_P2P_WAIT_TIME_MS = 5 * 1000;
-    private static int mDisableP2pTimeoutIndex = 0;
-
-    /* Set a two minute discover timeout to avoid STA scans from being blocked */
-    private static final int DISCOVER_TIMEOUT_S = 120;
-
-    /* Idle time after a peer is gone when the group is torn down */
-    private static final int GROUP_IDLE_TIME_S = 10;
-
-    private static final int BASE = Protocol.BASE_WIFI_P2P_SERVICE;
-
-    /* Delayed message to timeout group creation */
-    public static final int GROUP_CREATING_TIMED_OUT        =   BASE + 1;
-
-    /* User accepted a peer request */
-    private static final int PEER_CONNECTION_USER_ACCEPT    =   BASE + 2;
-    /* User rejected a peer request */
-    private static final int PEER_CONNECTION_USER_REJECT    =   BASE + 3;
-    /* User wants to disconnect wifi in favour of p2p */
-    private static final int DROP_WIFI_USER_ACCEPT          =   BASE + 4;
-    /* User wants to keep his wifi connection and drop p2p */
-    private static final int DROP_WIFI_USER_REJECT          =   BASE + 5;
-    /* Delayed message to timeout p2p disable */
-    public static final int DISABLE_P2P_TIMED_OUT           =   BASE + 6;
-
-
-    /* Commands to the WifiStateMachine */
-    public static final int P2P_CONNECTION_CHANGED          =   BASE + 11;
-
-    /* These commands are used to temporarily disconnect wifi when we detect
-     * a frequency conflict which would make it impossible to have with p2p
-     * and wifi active at the same time.
-     *
-     * If the user chooses to disable wifi temporarily, we keep wifi disconnected
-     * until the p2p connection is done and terminated at which point we will
-     * bring back wifi up
-     *
-     * DISCONNECT_WIFI_REQUEST
-     *      msg.arg1 = 1 enables temporary disconnect and 0 disables it.
-     */
-    public static final int DISCONNECT_WIFI_REQUEST         =   BASE + 12;
-    public static final int DISCONNECT_WIFI_RESPONSE        =   BASE + 13;
-
-    public static final int SET_MIRACAST_MODE               =   BASE + 14;
-
-    // During dhcp (and perhaps other times) we can't afford to drop packets
-    // but Discovery will switch our channel enough we will.
-    //   msg.arg1 = ENABLED for blocking, DISABLED for resumed.
-    //   msg.arg2 = msg to send when blocked
-    //   msg.obj  = StateMachine to send to when blocked
-    public static final int BLOCK_DISCOVERY                 =   BASE + 15;
-
-    // set country code
-    public static final int SET_COUNTRY_CODE                =   BASE + 16;
-
-    public static final int ENABLED                         = 1;
-    public static final int DISABLED                        = 0;
-
-    private final boolean mP2pSupported;
-
-    private WifiP2pDevice mThisDevice = new WifiP2pDevice();
-
-    /* When a group has been explicitly created by an app, we persist the group
-     * even after all clients have been disconnected until an explicit remove
-     * is invoked */
-    private boolean mAutonomousGroup;
-
-    /* Invitation to join an existing p2p group */
-    private boolean mJoinExistingGroup;
-
-    /* Track whether we are in p2p discovery. This is used to avoid sending duplicate
-     * broadcasts
-     */
-    private boolean mDiscoveryStarted;
-    /* Track whether servcice/peer discovery is blocked in favor of other wifi actions
-     * (notably dhcp)
-     */
-    private boolean mDiscoveryBlocked;
-
-    // Supplicant doesn't like setting the same country code multiple times (it may drop
-    // current connected network), so we save the country code here to avoid redundency
-    private String mLastSetCountryCode;
-
-    /*
-     * remember if we were in a scan when it had to be stopped
-     */
-    private boolean mDiscoveryPostponed = false;
-
-    private NetworkInfo mNetworkInfo;
-
-    private boolean mTempoarilyDisconnectedWifi = false;
-
-    /* The transaction Id of service discovery request */
-    private byte mServiceTransactionId = 0;
-
-    /* Service discovery request ID of wpa_supplicant.
-     * null means it's not set yet. */
-    private String mServiceDiscReqId;
-
-    /* clients(application) information list. */
-    private HashMap<Messenger, ClientInfo> mClientInfoList = new HashMap<Messenger, ClientInfo>();
-
-    /* Is chosen as a unique range to avoid conflict with
-       the range defined in Tethering.java */
-    private static final String[] DHCP_RANGE = {"192.168.49.2", "192.168.49.254"};
-    private static final String SERVER_ADDRESS = "192.168.49.1";
-
-    /**
-     * Error code definition.
-     * see the Table.8 in the WiFi Direct specification for the detail.
-     */
-    public static enum P2pStatus {
-        /* Success. */
-        SUCCESS,
-
-        /* The target device is currently unavailable. */
-        INFORMATION_IS_CURRENTLY_UNAVAILABLE,
-
-        /* Protocol error. */
-        INCOMPATIBLE_PARAMETERS,
-
-        /* The target device reached the limit of the number of the connectable device.
-         * For example, device limit or group limit is set. */
-        LIMIT_REACHED,
-
-        /* Protocol error. */
-        INVALID_PARAMETER,
-
-        /* Unable to accommodate request. */
-        UNABLE_TO_ACCOMMODATE_REQUEST,
-
-        /* Previous protocol error, or disruptive behavior. */
-        PREVIOUS_PROTOCOL_ERROR,
-
-        /* There is no common channels the both devices can use. */
-        NO_COMMON_CHANNEL,
-
-        /* Unknown p2p group. For example, Device A tries to invoke the previous persistent group,
-         *  but device B has removed the specified credential already. */
-        UNKNOWN_P2P_GROUP,
-
-        /* Both p2p devices indicated an intent of 15 in group owner negotiation. */
-        BOTH_GO_INTENT_15,
-
-        /* Incompatible provisioning method. */
-        INCOMPATIBLE_PROVISIONING_METHOD,
-
-        /* Rejected by user */
-        REJECTED_BY_USER,
-
-        /* Unknown error */
-        UNKNOWN;
-
-        public static P2pStatus valueOf(int error) {
-            switch(error) {
-            case 0 :
-                return SUCCESS;
-            case 1:
-                return INFORMATION_IS_CURRENTLY_UNAVAILABLE;
-            case 2:
-                return INCOMPATIBLE_PARAMETERS;
-            case 3:
-                return LIMIT_REACHED;
-            case 4:
-                return INVALID_PARAMETER;
-            case 5:
-                return UNABLE_TO_ACCOMMODATE_REQUEST;
-            case 6:
-                return PREVIOUS_PROTOCOL_ERROR;
-            case 7:
-                return NO_COMMON_CHANNEL;
-            case 8:
-                return UNKNOWN_P2P_GROUP;
-            case 9:
-                return BOTH_GO_INTENT_15;
-            case 10:
-                return INCOMPATIBLE_PROVISIONING_METHOD;
-            case 11:
-                return REJECTED_BY_USER;
-            default:
-                return UNKNOWN;
-            }
-        }
-    }
-
-    public WifiP2pService(Context context) {
-        mContext = context;
-
-        //STOPSHIP: get this from native side
-        mInterface = "p2p0";
-        mNetworkInfo = new NetworkInfo(ConnectivityManager.TYPE_WIFI_P2P, 0, NETWORKTYPE, "");
-
-        mP2pSupported = mContext.getPackageManager().hasSystemFeature(
-                PackageManager.FEATURE_WIFI_DIRECT);
-
-        mThisDevice.primaryDeviceType = mContext.getResources().getString(
-                com.android.internal.R.string.config_wifi_p2p_device_type);
-
-        mP2pStateMachine = new P2pStateMachine(TAG, mP2pSupported);
-        mP2pStateMachine.start();
-    }
-
-    public void connectivityServiceReady() {
-        IBinder b = ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE);
-        mNwService = INetworkManagementService.Stub.asInterface(b);
-    }
-
-    private void enforceAccessPermission() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.ACCESS_WIFI_STATE,
-                "WifiP2pService");
-    }
-
-    private void enforceChangePermission() {
-        mContext.enforceCallingOrSelfPermission(android.Manifest.permission.CHANGE_WIFI_STATE,
-                "WifiP2pService");
-    }
-
-    private void enforceConnectivityInternalPermission() {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.CONNECTIVITY_INTERNAL,
-                "WifiP2pService");
-    }
-
-    /**
-     * Get a reference to handler. This is used by a client to establish
-     * an AsyncChannel communication with WifiP2pService
-     */
-    public Messenger getMessenger() {
-        enforceAccessPermission();
-        enforceChangePermission();
-        return new Messenger(mP2pStateMachine.getHandler());
-    }
-
-    /** This is used to provide information to drivers to optimize performance depending
-     * on the current mode of operation.
-     * 0 - disabled
-     * 1 - source operation
-     * 2 - sink operation
-     *
-     * As an example, the driver could reduce the channel dwell time during scanning
-     * when acting as a source or sink to minimize impact on miracast.
-     */
-    public void setMiracastMode(int mode) {
-        enforceConnectivityInternalPermission();
-        mP2pStateMachine.sendMessage(SET_MIRACAST_MODE, mode);
-    }
-
-    @Override
-    protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
-                != PackageManager.PERMISSION_GRANTED) {
-            pw.println("Permission Denial: can't dump WifiP2pService from from pid="
-                    + Binder.getCallingPid()
-                    + ", uid=" + Binder.getCallingUid());
-            return;
-        }
-        mP2pStateMachine.dump(fd, pw, args);
-        pw.println("mAutonomousGroup " + mAutonomousGroup);
-        pw.println("mJoinExistingGroup " + mJoinExistingGroup);
-        pw.println("mDiscoveryStarted " + mDiscoveryStarted);
-        pw.println("mNetworkInfo " + mNetworkInfo);
-        pw.println("mTempoarilyDisconnectedWifi " + mTempoarilyDisconnectedWifi);
-        pw.println("mServiceDiscReqId " + mServiceDiscReqId);
-        pw.println();
-    }
-
-
-    /**
-     * Handles interaction with WifiStateMachine
-     */
-    private class P2pStateMachine extends StateMachine {
-
-        private DefaultState mDefaultState = new DefaultState();
-        private P2pNotSupportedState mP2pNotSupportedState = new P2pNotSupportedState();
-        private P2pDisablingState mP2pDisablingState = new P2pDisablingState();
-        private P2pDisabledState mP2pDisabledState = new P2pDisabledState();
-        private P2pEnablingState mP2pEnablingState = new P2pEnablingState();
-        private P2pEnabledState mP2pEnabledState = new P2pEnabledState();
-        // Inactive is when p2p is enabled with no connectivity
-        private InactiveState mInactiveState = new InactiveState();
-        private GroupCreatingState mGroupCreatingState = new GroupCreatingState();
-        private UserAuthorizingInviteRequestState mUserAuthorizingInviteRequestState
-                = new UserAuthorizingInviteRequestState();
-        private UserAuthorizingNegotiationRequestState mUserAuthorizingNegotiationRequestState
-                = new UserAuthorizingNegotiationRequestState();
-        private ProvisionDiscoveryState mProvisionDiscoveryState = new ProvisionDiscoveryState();
-        private GroupNegotiationState mGroupNegotiationState = new GroupNegotiationState();
-        private FrequencyConflictState mFrequencyConflictState =new FrequencyConflictState();
-
-        private GroupCreatedState mGroupCreatedState = new GroupCreatedState();
-        private UserAuthorizingJoinState mUserAuthorizingJoinState = new UserAuthorizingJoinState();
-        private OngoingGroupRemovalState mOngoingGroupRemovalState = new OngoingGroupRemovalState();
-
-        private WifiNative mWifiNative = new WifiNative(mInterface);
-        private WifiMonitor mWifiMonitor = new WifiMonitor(this, mWifiNative);
-
-        private final WifiP2pDeviceList mPeers = new WifiP2pDeviceList();
-        /* During a connection, supplicant can tell us that a device was lost. From a supplicant's
-         * perspective, the discovery stops during connection and it purges device since it does
-         * not get latest updates about the device without being in discovery state.
-         *
-         * From the framework perspective, the device is still there since we are connecting or
-         * connected to it. so we keep these devices in a separate list, so that they are removed
-         * when connection is cancelled or lost
-         */
-        private final WifiP2pDeviceList mPeersLostDuringConnection = new WifiP2pDeviceList();
-        private final WifiP2pGroupList mGroups = new WifiP2pGroupList(null,
-                new GroupDeleteListener() {
-            @Override
-            public void onDeleteGroup(int netId) {
-                if (DBG) logd("called onDeleteGroup() netId=" + netId);
-                mWifiNative.removeNetwork(netId);
-                mWifiNative.saveConfig();
-                sendP2pPersistentGroupsChangedBroadcast();
-            }
-        });
-        private final WifiP2pInfo mWifiP2pInfo = new WifiP2pInfo();
-        private WifiP2pGroup mGroup;
-
-        // Saved WifiP2pConfig for an ongoing peer connection. This will never be null.
-        // The deviceAddress will be an empty string when the device is inactive
-        // or if it is connected without any ongoing join request
-        private WifiP2pConfig mSavedPeerConfig = new WifiP2pConfig();
-
-        // Saved WifiP2pGroup from invitation request
-        private WifiP2pGroup mSavedP2pGroup;
-
-        P2pStateMachine(String name, boolean p2pSupported) {
-            super(name);
-
-            addState(mDefaultState);
-                addState(mP2pNotSupportedState, mDefaultState);
-                addState(mP2pDisablingState, mDefaultState);
-                addState(mP2pDisabledState, mDefaultState);
-                addState(mP2pEnablingState, mDefaultState);
-                addState(mP2pEnabledState, mDefaultState);
-                    addState(mInactiveState, mP2pEnabledState);
-                    addState(mGroupCreatingState, mP2pEnabledState);
-                        addState(mUserAuthorizingInviteRequestState, mGroupCreatingState);
-                        addState(mUserAuthorizingNegotiationRequestState, mGroupCreatingState);
-                        addState(mProvisionDiscoveryState, mGroupCreatingState);
-                        addState(mGroupNegotiationState, mGroupCreatingState);
-                        addState(mFrequencyConflictState, mGroupCreatingState);
-                    addState(mGroupCreatedState, mP2pEnabledState);
-                        addState(mUserAuthorizingJoinState, mGroupCreatedState);
-                        addState(mOngoingGroupRemovalState, mGroupCreatedState);
-
-            if (p2pSupported) {
-                setInitialState(mP2pDisabledState);
-            } else {
-                setInitialState(mP2pNotSupportedState);
-            }
-            setLogRecSize(50);
-            setLogOnlyTransitions(true);
-        }
-
-    class DefaultState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case AsyncChannel.CMD_CHANNEL_HALF_CONNECTED:
-                    if (message.arg1 == AsyncChannel.STATUS_SUCCESSFUL) {
-                        if (DBG) logd("Full connection with WifiStateMachine established");
-                        mWifiChannel = (AsyncChannel) message.obj;
-                    } else {
-                        loge("Full connection failure, error = " + message.arg1);
-                        mWifiChannel = null;
-                    }
-                    break;
-
-                case AsyncChannel.CMD_CHANNEL_DISCONNECTED:
-                    if (message.arg1 == AsyncChannel.STATUS_SEND_UNSUCCESSFUL) {
-                        loge("Send failed, client connection lost");
-                    } else {
-                        loge("Client connection lost with reason: " + message.arg1);
-                    }
-                    mWifiChannel = null;
-                    break;
-
-                case AsyncChannel.CMD_CHANNEL_FULL_CONNECTION:
-                    AsyncChannel ac = new AsyncChannel();
-                    ac.connect(mContext, getHandler(), message.replyTo);
-                    break;
-                case BLOCK_DISCOVERY:
-                    mDiscoveryBlocked = (message.arg1 == ENABLED ? true : false);
-                    // always reset this - we went to a state that doesn't support discovery so
-                    // it would have stopped regardless
-                    mDiscoveryPostponed = false;
-                    if (mDiscoveryBlocked) {
-                        try {
-                            StateMachine m = (StateMachine)message.obj;
-                            m.sendMessage(message.arg2);
-                        } catch (Exception e) {
-                            loge("unable to send BLOCK_DISCOVERY response: " + e);
-                        }
-                    }
-                    break;
-                case WifiP2pManager.DISCOVER_PEERS:
-                    replyToMessage(message, WifiP2pManager.DISCOVER_PEERS_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.STOP_DISCOVERY:
-                    replyToMessage(message, WifiP2pManager.STOP_DISCOVERY_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.DISCOVER_SERVICES:
-                    replyToMessage(message, WifiP2pManager.DISCOVER_SERVICES_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.CONNECT:
-                    replyToMessage(message, WifiP2pManager.CONNECT_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.CANCEL_CONNECT:
-                    replyToMessage(message, WifiP2pManager.CANCEL_CONNECT_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.CREATE_GROUP:
-                    replyToMessage(message, WifiP2pManager.CREATE_GROUP_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.REMOVE_GROUP:
-                    replyToMessage(message, WifiP2pManager.REMOVE_GROUP_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.ADD_LOCAL_SERVICE:
-                    replyToMessage(message, WifiP2pManager.ADD_LOCAL_SERVICE_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.REMOVE_LOCAL_SERVICE:
-                    replyToMessage(message, WifiP2pManager.REMOVE_LOCAL_SERVICE_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.CLEAR_LOCAL_SERVICES:
-                    replyToMessage(message, WifiP2pManager.CLEAR_LOCAL_SERVICES_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.ADD_SERVICE_REQUEST:
-                    replyToMessage(message, WifiP2pManager.ADD_SERVICE_REQUEST_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.REMOVE_SERVICE_REQUEST:
-                    replyToMessage(message,
-                            WifiP2pManager.REMOVE_SERVICE_REQUEST_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.CLEAR_SERVICE_REQUESTS:
-                    replyToMessage(message,
-                            WifiP2pManager.CLEAR_SERVICE_REQUESTS_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.SET_DEVICE_NAME:
-                    replyToMessage(message, WifiP2pManager.SET_DEVICE_NAME_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.DELETE_PERSISTENT_GROUP:
-                    replyToMessage(message, WifiP2pManager.DELETE_PERSISTENT_GROUP,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.SET_WFD_INFO:
-                    replyToMessage(message, WifiP2pManager.SET_WFD_INFO_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.REQUEST_PEERS:
-                    replyToMessage(message, WifiP2pManager.RESPONSE_PEERS,
-                            new WifiP2pDeviceList(mPeers));
-                    break;
-                case WifiP2pManager.REQUEST_CONNECTION_INFO:
-                    replyToMessage(message, WifiP2pManager.RESPONSE_CONNECTION_INFO,
-                            new WifiP2pInfo(mWifiP2pInfo));
-                    break;
-                case WifiP2pManager.REQUEST_GROUP_INFO:
-                    replyToMessage(message, WifiP2pManager.RESPONSE_GROUP_INFO,
-                            mGroup != null ? new WifiP2pGroup(mGroup) : null);
-                    break;
-                case WifiP2pManager.REQUEST_PERSISTENT_GROUP_INFO:
-                    replyToMessage(message, WifiP2pManager.RESPONSE_PERSISTENT_GROUP_INFO,
-                            new WifiP2pGroupList(mGroups, null));
-                    break;
-                case WifiP2pManager.START_WPS:
-                    replyToMessage(message, WifiP2pManager.START_WPS_FAILED,
-                        WifiP2pManager.BUSY);
-                    break;
-                    // Ignore
-                case WifiMonitor.P2P_INVITATION_RESULT_EVENT:
-                case WifiMonitor.SCAN_RESULTS_EVENT:
-                case WifiMonitor.SUP_CONNECTION_EVENT:
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                case WifiMonitor.NETWORK_CONNECTION_EVENT:
-                case WifiMonitor.NETWORK_DISCONNECTION_EVENT:
-                case WifiMonitor.SUPPLICANT_STATE_CHANGE_EVENT:
-                case WifiMonitor.AUTHENTICATION_FAILURE_EVENT:
-                case WifiMonitor.WPS_SUCCESS_EVENT:
-                case WifiMonitor.WPS_FAIL_EVENT:
-                case WifiMonitor.WPS_OVERLAP_EVENT:
-                case WifiMonitor.WPS_TIMEOUT_EVENT:
-                case WifiMonitor.P2P_GROUP_REMOVED_EVENT:
-                case WifiMonitor.P2P_DEVICE_FOUND_EVENT:
-                case WifiMonitor.P2P_DEVICE_LOST_EVENT:
-                case WifiMonitor.P2P_FIND_STOPPED_EVENT:
-                case WifiMonitor.P2P_SERV_DISC_RESP_EVENT:
-                case PEER_CONNECTION_USER_ACCEPT:
-                case PEER_CONNECTION_USER_REJECT:
-                case DISCONNECT_WIFI_RESPONSE:
-                case DROP_WIFI_USER_ACCEPT:
-                case DROP_WIFI_USER_REJECT:
-                case GROUP_CREATING_TIMED_OUT:
-                case DISABLE_P2P_TIMED_OUT:
-                case DhcpStateMachine.CMD_PRE_DHCP_ACTION:
-                case DhcpStateMachine.CMD_POST_DHCP_ACTION:
-                case DhcpStateMachine.CMD_ON_QUIT:
-                case WifiMonitor.P2P_PROV_DISC_FAILURE_EVENT:
-                case SET_MIRACAST_MODE:
-                case WifiP2pManager.START_LISTEN:
-                case WifiP2pManager.STOP_LISTEN:
-                case WifiP2pManager.SET_CHANNEL:
-                case SET_COUNTRY_CODE:
-                    break;
-                case WifiStateMachine.CMD_ENABLE_P2P:
-                    // Enable is lazy and has no response
-                    break;
-                case WifiStateMachine.CMD_DISABLE_P2P_REQ:
-                    // If we end up handling in default, p2p is not enabled
-                    mWifiChannel.sendMessage(WifiStateMachine.CMD_DISABLE_P2P_RSP);
-                    break;
-                    /* unexpected group created, remove */
-                case WifiMonitor.P2P_GROUP_STARTED_EVENT:
-                    mGroup = (WifiP2pGroup) message.obj;
-                    loge("Unexpected group creation, remove " + mGroup);
-                    mWifiNative.p2pGroupRemove(mGroup.getInterface());
-                    break;
-                // A group formation failure is always followed by
-                // a group removed event. Flushing things at group formation
-                // failure causes supplicant issues. Ignore right now.
-                case WifiMonitor.P2P_GROUP_FORMATION_FAILURE_EVENT:
-                    break;
-                default:
-                    loge("Unhandled message " + message);
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class P2pNotSupportedState extends State {
-        @Override
-        public boolean processMessage(Message message) {
-            switch (message.what) {
-               case WifiP2pManager.DISCOVER_PEERS:
-                    replyToMessage(message, WifiP2pManager.DISCOVER_PEERS_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.STOP_DISCOVERY:
-                    replyToMessage(message, WifiP2pManager.STOP_DISCOVERY_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.DISCOVER_SERVICES:
-                    replyToMessage(message, WifiP2pManager.DISCOVER_SERVICES_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.CONNECT:
-                    replyToMessage(message, WifiP2pManager.CONNECT_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.CANCEL_CONNECT:
-                    replyToMessage(message, WifiP2pManager.CANCEL_CONNECT_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-               case WifiP2pManager.CREATE_GROUP:
-                    replyToMessage(message, WifiP2pManager.CREATE_GROUP_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.REMOVE_GROUP:
-                    replyToMessage(message, WifiP2pManager.REMOVE_GROUP_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.ADD_LOCAL_SERVICE:
-                    replyToMessage(message, WifiP2pManager.ADD_LOCAL_SERVICE_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.REMOVE_LOCAL_SERVICE:
-                    replyToMessage(message, WifiP2pManager.REMOVE_LOCAL_SERVICE_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.CLEAR_LOCAL_SERVICES:
-                    replyToMessage(message, WifiP2pManager.CLEAR_LOCAL_SERVICES_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.ADD_SERVICE_REQUEST:
-                    replyToMessage(message, WifiP2pManager.ADD_SERVICE_REQUEST_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.REMOVE_SERVICE_REQUEST:
-                    replyToMessage(message,
-                            WifiP2pManager.REMOVE_SERVICE_REQUEST_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.CLEAR_SERVICE_REQUESTS:
-                    replyToMessage(message,
-                            WifiP2pManager.CLEAR_SERVICE_REQUESTS_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.SET_DEVICE_NAME:
-                    replyToMessage(message, WifiP2pManager.SET_DEVICE_NAME_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.DELETE_PERSISTENT_GROUP:
-                    replyToMessage(message, WifiP2pManager.DELETE_PERSISTENT_GROUP,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.SET_WFD_INFO:
-                    replyToMessage(message, WifiP2pManager.SET_WFD_INFO_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.START_WPS:
-                    replyToMessage(message, WifiP2pManager.START_WPS_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.START_LISTEN:
-                    replyToMessage(message, WifiP2pManager.START_LISTEN_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-                case WifiP2pManager.STOP_LISTEN:
-                    replyToMessage(message, WifiP2pManager.STOP_LISTEN_FAILED,
-                            WifiP2pManager.P2P_UNSUPPORTED);
-                    break;
-
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class P2pDisablingState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            sendMessageDelayed(obtainMessage(DISABLE_P2P_TIMED_OUT,
-                    ++mDisableP2pTimeoutIndex, 0), DISABLE_P2P_WAIT_TIME_MS);
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                    if (DBG) logd("p2p socket connection lost");
-                    transitionTo(mP2pDisabledState);
-                    break;
-                case WifiStateMachine.CMD_ENABLE_P2P:
-                case WifiStateMachine.CMD_DISABLE_P2P_REQ:
-                    deferMessage(message);
-                    break;
-                case DISABLE_P2P_TIMED_OUT:
-                    if (mGroupCreatingTimeoutIndex == message.arg1) {
-                        loge("P2p disable timed out");
-                        transitionTo(mP2pDisabledState);
-                    }
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        @Override
-        public void exit() {
-            mWifiChannel.sendMessage(WifiStateMachine.CMD_DISABLE_P2P_RSP);
-        }
-    }
-
-    class P2pDisabledState extends State {
-       @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiStateMachine.CMD_ENABLE_P2P:
-                    try {
-                        mNwService.setInterfaceUp(mInterface);
-                    } catch (RemoteException re) {
-                        loge("Unable to change interface settings: " + re);
-                    } catch (IllegalStateException ie) {
-                        loge("Unable to change interface settings: " + ie);
-                    }
-                    mWifiMonitor.startMonitoring();
-                    transitionTo(mP2pEnablingState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class P2pEnablingState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiMonitor.SUP_CONNECTION_EVENT:
-                    if (DBG) logd("P2p socket connection successful");
-                    transitionTo(mInactiveState);
-                    break;
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                    loge("P2p socket connection failed");
-                    transitionTo(mP2pDisabledState);
-                    break;
-                case WifiStateMachine.CMD_ENABLE_P2P:
-                case WifiStateMachine.CMD_DISABLE_P2P_REQ:
-                    deferMessage(message);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class P2pEnabledState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            sendP2pStateChangedBroadcast(true);
-            mNetworkInfo.setIsAvailable(true);
-            sendP2pConnectionChangedBroadcast();
-            initializeP2pSettings();
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiMonitor.SUP_DISCONNECTION_EVENT:
-                    loge("Unexpected loss of p2p socket connection");
-                    transitionTo(mP2pDisabledState);
-                    break;
-                case WifiStateMachine.CMD_ENABLE_P2P:
-                    //Nothing to do
-                    break;
-                case WifiStateMachine.CMD_DISABLE_P2P_REQ:
-                    if (mPeers.clear()) {
-                        sendPeersChangedBroadcast();
-                    }
-                    if (mGroups.clear()) sendP2pPersistentGroupsChangedBroadcast();
-
-                    mWifiMonitor.stopMonitoring();
-                    transitionTo(mP2pDisablingState);
-                    break;
-                case WifiP2pManager.SET_DEVICE_NAME:
-                {
-                    WifiP2pDevice d = (WifiP2pDevice) message.obj;
-                    if (d != null && setAndPersistDeviceName(d.deviceName)) {
-                        if (DBG) logd("set device name " + d.deviceName);
-                        replyToMessage(message, WifiP2pManager.SET_DEVICE_NAME_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.SET_DEVICE_NAME_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    break;
-                }
-                case WifiP2pManager.SET_WFD_INFO:
-                {
-                    WifiP2pWfdInfo d = (WifiP2pWfdInfo) message.obj;
-                    if (d != null && setWfdInfo(d)) {
-                        replyToMessage(message, WifiP2pManager.SET_WFD_INFO_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.SET_WFD_INFO_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    break;
-                }
-                case BLOCK_DISCOVERY:
-                    boolean blocked = (message.arg1 == ENABLED ? true : false);
-                    if (mDiscoveryBlocked == blocked) break;
-                    mDiscoveryBlocked = blocked;
-                    if (blocked && mDiscoveryStarted) {
-                        mWifiNative.p2pStopFind();
-                        mDiscoveryPostponed = true;
-                    }
-                    if (!blocked && mDiscoveryPostponed) {
-                        mDiscoveryPostponed = false;
-                        mWifiNative.p2pFind(DISCOVER_TIMEOUT_S);
-                    }
-                    if (blocked) {
-                        try {
-                            StateMachine m = (StateMachine)message.obj;
-                            m.sendMessage(message.arg2);
-                        } catch (Exception e) {
-                            loge("unable to send BLOCK_DISCOVERY response: " + e);
-                        }
-                    }
-                    break;
-                case WifiP2pManager.DISCOVER_PEERS:
-                    if (mDiscoveryBlocked) {
-                        replyToMessage(message, WifiP2pManager.DISCOVER_PEERS_FAILED,
-                                WifiP2pManager.BUSY);
-                        break;
-                    }
-                    // do not send service discovery request while normal find operation.
-                    clearSupplicantServiceRequest();
-                    if (mWifiNative.p2pFind(DISCOVER_TIMEOUT_S)) {
-                        replyToMessage(message, WifiP2pManager.DISCOVER_PEERS_SUCCEEDED);
-                        sendP2pDiscoveryChangedBroadcast(true);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.DISCOVER_PEERS_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    break;
-                case WifiMonitor.P2P_FIND_STOPPED_EVENT:
-                    sendP2pDiscoveryChangedBroadcast(false);
-                    break;
-                case WifiP2pManager.STOP_DISCOVERY:
-                    if (mWifiNative.p2pStopFind()) {
-                        replyToMessage(message, WifiP2pManager.STOP_DISCOVERY_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.STOP_DISCOVERY_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    break;
-                case WifiP2pManager.DISCOVER_SERVICES:
-                    if (mDiscoveryBlocked) {
-                        replyToMessage(message, WifiP2pManager.DISCOVER_SERVICES_FAILED,
-                                WifiP2pManager.BUSY);
-                        break;
-                    }
-                    if (DBG) logd(getName() + " discover services");
-                    if (!updateSupplicantServiceRequest()) {
-                        replyToMessage(message, WifiP2pManager.DISCOVER_SERVICES_FAILED,
-                                WifiP2pManager.NO_SERVICE_REQUESTS);
-                        break;
-                    }
-                    if (mWifiNative.p2pFind(DISCOVER_TIMEOUT_S)) {
-                        replyToMessage(message, WifiP2pManager.DISCOVER_SERVICES_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.DISCOVER_SERVICES_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    break;
-                case WifiMonitor.P2P_DEVICE_FOUND_EVENT:
-                    WifiP2pDevice device = (WifiP2pDevice) message.obj;
-                    if (mThisDevice.deviceAddress.equals(device.deviceAddress)) break;
-                    mPeers.updateSupplicantDetails(device);
-                    sendPeersChangedBroadcast();
-                    break;
-                case WifiMonitor.P2P_DEVICE_LOST_EVENT:
-                    device = (WifiP2pDevice) message.obj;
-                    // Gets current details for the one removed
-                    device = mPeers.remove(device.deviceAddress);
-                    if (device != null) {
-                        sendPeersChangedBroadcast();
-                    }
-                    break;
-                case WifiP2pManager.ADD_LOCAL_SERVICE:
-                    if (DBG) logd(getName() + " add service");
-                    WifiP2pServiceInfo servInfo = (WifiP2pServiceInfo)message.obj;
-                    if (addLocalService(message.replyTo, servInfo)) {
-                        replyToMessage(message, WifiP2pManager.ADD_LOCAL_SERVICE_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.ADD_LOCAL_SERVICE_FAILED);
-                    }
-                    break;
-                case WifiP2pManager.REMOVE_LOCAL_SERVICE:
-                    if (DBG) logd(getName() + " remove service");
-                    servInfo = (WifiP2pServiceInfo)message.obj;
-                    removeLocalService(message.replyTo, servInfo);
-                    replyToMessage(message, WifiP2pManager.REMOVE_LOCAL_SERVICE_SUCCEEDED);
-                    break;
-                case WifiP2pManager.CLEAR_LOCAL_SERVICES:
-                    if (DBG) logd(getName() + " clear service");
-                    clearLocalServices(message.replyTo);
-                    replyToMessage(message, WifiP2pManager.CLEAR_LOCAL_SERVICES_SUCCEEDED);
-                    break;
-                case WifiP2pManager.ADD_SERVICE_REQUEST:
-                    if (DBG) logd(getName() + " add service request");
-                    if (!addServiceRequest(message.replyTo, (WifiP2pServiceRequest)message.obj)) {
-                        replyToMessage(message, WifiP2pManager.ADD_SERVICE_REQUEST_FAILED);
-                        break;
-                    }
-                    replyToMessage(message, WifiP2pManager.ADD_SERVICE_REQUEST_SUCCEEDED);
-                    break;
-                case WifiP2pManager.REMOVE_SERVICE_REQUEST:
-                    if (DBG) logd(getName() + " remove service request");
-                    removeServiceRequest(message.replyTo, (WifiP2pServiceRequest)message.obj);
-                    replyToMessage(message, WifiP2pManager.REMOVE_SERVICE_REQUEST_SUCCEEDED);
-                    break;
-                case WifiP2pManager.CLEAR_SERVICE_REQUESTS:
-                    if (DBG) logd(getName() + " clear service request");
-                    clearServiceRequests(message.replyTo);
-                    replyToMessage(message, WifiP2pManager.CLEAR_SERVICE_REQUESTS_SUCCEEDED);
-                    break;
-                case WifiMonitor.P2P_SERV_DISC_RESP_EVENT:
-                    if (DBG) logd(getName() + " receive service response");
-                    List<WifiP2pServiceResponse> sdRespList =
-                        (List<WifiP2pServiceResponse>) message.obj;
-                    for (WifiP2pServiceResponse resp : sdRespList) {
-                        WifiP2pDevice dev =
-                            mPeers.get(resp.getSrcDevice().deviceAddress);
-                        resp.setSrcDevice(dev);
-                        sendServiceResponse(resp);
-                    }
-                    break;
-                case WifiP2pManager.DELETE_PERSISTENT_GROUP:
-                   if (DBG) logd(getName() + " delete persistent group");
-                   mGroups.remove(message.arg1);
-                   replyToMessage(message, WifiP2pManager.DELETE_PERSISTENT_GROUP_SUCCEEDED);
-                   break;
-                case SET_MIRACAST_MODE:
-                    mWifiNative.setMiracastMode(message.arg1);
-                    break;
-                case WifiP2pManager.START_LISTEN:
-                    if (DBG) logd(getName() + " start listen mode");
-                    mWifiNative.p2pFlush();
-                    if (mWifiNative.p2pExtListen(true, 500, 500)) {
-                        replyToMessage(message, WifiP2pManager.START_LISTEN_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.START_LISTEN_FAILED);
-                    }
-                    break;
-                case WifiP2pManager.STOP_LISTEN:
-                    if (DBG) logd(getName() + " stop listen mode");
-                    if (mWifiNative.p2pExtListen(false, 0, 0)) {
-                        replyToMessage(message, WifiP2pManager.STOP_LISTEN_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.STOP_LISTEN_FAILED);
-                    }
-                    mWifiNative.p2pFlush();
-                    break;
-                case WifiP2pManager.SET_CHANNEL:
-                    Bundle p2pChannels = (Bundle) message.obj;
-                    int lc = p2pChannels.getInt("lc", 0);
-                    int oc = p2pChannels.getInt("oc", 0);
-                    if (DBG) logd(getName() + " set listen and operating channel");
-                    if (mWifiNative.p2pSetChannel(lc, oc)) {
-                        replyToMessage(message, WifiP2pManager.SET_CHANNEL_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.SET_CHANNEL_FAILED);
-                    }
-                    break;
-                case SET_COUNTRY_CODE:
-                    String countryCode = (String) message.obj;
-                    countryCode = countryCode.toUpperCase(Locale.ROOT);
-                    if (mLastSetCountryCode == null ||
-                            countryCode.equals(mLastSetCountryCode) == false) {
-                        if (mWifiNative.setCountryCode(countryCode)) {
-                            mLastSetCountryCode = countryCode;
-                        }
-                    }
-                    break;
-                default:
-                   return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        @Override
-        public void exit() {
-            sendP2pStateChangedBroadcast(false);
-            mNetworkInfo.setIsAvailable(false);
-
-            mLastSetCountryCode = null;
-        }
-    }
-
-    class InactiveState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            mSavedPeerConfig.invalidate();
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiP2pManager.CONNECT:
-                    if (DBG) logd(getName() + " sending connect");
-                    WifiP2pConfig config = (WifiP2pConfig) message.obj;
-                    if (isConfigInvalid(config)) {
-                        loge("Dropping connect requeset " + config);
-                        replyToMessage(message, WifiP2pManager.CONNECT_FAILED);
-                        break;
-                    }
-
-                    mAutonomousGroup = false;
-                    mWifiNative.p2pStopFind();
-                    if (reinvokePersistentGroup(config)) {
-                        transitionTo(mGroupNegotiationState);
-                    } else {
-                        transitionTo(mProvisionDiscoveryState);
-                    }
-                    mSavedPeerConfig = config;
-                    mPeers.updateStatus(mSavedPeerConfig.deviceAddress, WifiP2pDevice.INVITED);
-                    sendPeersChangedBroadcast();
-                    replyToMessage(message, WifiP2pManager.CONNECT_SUCCEEDED);
-                    break;
-                case WifiP2pManager.STOP_DISCOVERY:
-                    if (mWifiNative.p2pStopFind()) {
-                        // When discovery stops in inactive state, flush to clear
-                        // state peer data
-                        mWifiNative.p2pFlush();
-                        mServiceDiscReqId = null;
-                        replyToMessage(message, WifiP2pManager.STOP_DISCOVERY_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.STOP_DISCOVERY_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    break;
-                case WifiMonitor.P2P_GO_NEGOTIATION_REQUEST_EVENT:
-                    config = (WifiP2pConfig) message.obj;
-                    if (isConfigInvalid(config)) {
-                        loge("Dropping GO neg request " + config);
-                        break;
-                    }
-                    mSavedPeerConfig = config;
-                    mAutonomousGroup = false;
-                    mJoinExistingGroup = false;
-                    transitionTo(mUserAuthorizingNegotiationRequestState);
-                    break;
-                case WifiMonitor.P2P_INVITATION_RECEIVED_EVENT:
-                    WifiP2pGroup group = (WifiP2pGroup) message.obj;
-                    WifiP2pDevice owner = group.getOwner();
-
-                    if (owner == null) {
-                        loge("Ignored invitation from null owner");
-                        break;
-                    }
-
-                    config = new WifiP2pConfig();
-                    config.deviceAddress = group.getOwner().deviceAddress;
-
-                    if (isConfigInvalid(config)) {
-                        loge("Dropping invitation request " + config);
-                        break;
-                    }
-                    mSavedPeerConfig = config;
-
-                    //Check if we have the owner in peer list and use appropriate
-                    //wps method. Default is to use PBC.
-                    if ((owner = mPeers.get(owner.deviceAddress)) != null) {
-                        if (owner.wpsPbcSupported()) {
-                            mSavedPeerConfig.wps.setup = WpsInfo.PBC;
-                        } else if (owner.wpsKeypadSupported()) {
-                            mSavedPeerConfig.wps.setup = WpsInfo.KEYPAD;
-                        } else if (owner.wpsDisplaySupported()) {
-                            mSavedPeerConfig.wps.setup = WpsInfo.DISPLAY;
-                        }
-                    }
-
-                    mAutonomousGroup = false;
-                    mJoinExistingGroup = true;
-                    transitionTo(mUserAuthorizingInviteRequestState);
-                    break;
-                case WifiMonitor.P2P_PROV_DISC_PBC_REQ_EVENT:
-                case WifiMonitor.P2P_PROV_DISC_ENTER_PIN_EVENT:
-                case WifiMonitor.P2P_PROV_DISC_SHOW_PIN_EVENT:
-                    //We let the supplicant handle the provision discovery response
-                    //and wait instead for the GO_NEGOTIATION_REQUEST_EVENT.
-                    //Handling provision discovery and issuing a p2p_connect before
-                    //group negotiation comes through causes issues
-                    break;
-                case WifiP2pManager.CREATE_GROUP:
-                    mAutonomousGroup = true;
-                    int netId = message.arg1;
-                    boolean ret = false;
-                    if (netId == WifiP2pGroup.PERSISTENT_NET_ID) {
-                        // check if the go persistent group is present.
-                        netId = mGroups.getNetworkId(mThisDevice.deviceAddress);
-                        if (netId != -1) {
-                            ret = mWifiNative.p2pGroupAdd(netId);
-                        } else {
-                            ret = mWifiNative.p2pGroupAdd(true);
-                        }
-                    } else {
-                        ret = mWifiNative.p2pGroupAdd(false);
-                    }
-
-                    if (ret) {
-                        replyToMessage(message, WifiP2pManager.CREATE_GROUP_SUCCEEDED);
-                        transitionTo(mGroupNegotiationState);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.CREATE_GROUP_FAILED,
-                                WifiP2pManager.ERROR);
-                        // remain at this state.
-                    }
-                    break;
-                case WifiMonitor.P2P_GROUP_STARTED_EVENT:
-                    mGroup = (WifiP2pGroup) message.obj;
-                    if (DBG) logd(getName() + " group started");
-
-                    // We hit this scenario when a persistent group is reinvoked
-                    if (mGroup.getNetworkId() == WifiP2pGroup.PERSISTENT_NET_ID) {
-                        mAutonomousGroup = false;
-                        deferMessage(message);
-                        transitionTo(mGroupNegotiationState);
-                    } else {
-                        loge("Unexpected group creation, remove " + mGroup);
-                        mWifiNative.p2pGroupRemove(mGroup.getInterface());
-                    }
-                    break;
-                case WifiP2pManager.START_LISTEN:
-                    if (DBG) logd(getName() + " start listen mode");
-                    mWifiNative.p2pFlush();
-                    if (mWifiNative.p2pExtListen(true, 500, 500)) {
-                        replyToMessage(message, WifiP2pManager.START_LISTEN_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.START_LISTEN_FAILED);
-                    }
-                    break;
-                case WifiP2pManager.STOP_LISTEN:
-                    if (DBG) logd(getName() + " stop listen mode");
-                    if (mWifiNative.p2pExtListen(false, 0, 0)) {
-                        replyToMessage(message, WifiP2pManager.STOP_LISTEN_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.STOP_LISTEN_FAILED);
-                    }
-                    mWifiNative.p2pFlush();
-                    break;
-                case WifiP2pManager.SET_CHANNEL:
-                    Bundle p2pChannels = (Bundle) message.obj;
-                    int lc = p2pChannels.getInt("lc", 0);
-                    int oc = p2pChannels.getInt("oc", 0);
-                    if (DBG) logd(getName() + " set listen and operating channel");
-                    if (mWifiNative.p2pSetChannel(lc, oc)) {
-                        replyToMessage(message, WifiP2pManager.SET_CHANNEL_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.SET_CHANNEL_FAILED);
-                    }
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class GroupCreatingState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            sendMessageDelayed(obtainMessage(GROUP_CREATING_TIMED_OUT,
-                    ++mGroupCreatingTimeoutIndex, 0), GROUP_CREATING_WAIT_TIME_MS);
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            boolean ret = HANDLED;
-            switch (message.what) {
-               case GROUP_CREATING_TIMED_OUT:
-                    if (mGroupCreatingTimeoutIndex == message.arg1) {
-                        if (DBG) logd("Group negotiation timed out");
-                        handleGroupCreationFailure();
-                        transitionTo(mInactiveState);
-                    }
-                    break;
-                case WifiMonitor.P2P_DEVICE_LOST_EVENT:
-                    WifiP2pDevice device = (WifiP2pDevice) message.obj;
-                    if (!mSavedPeerConfig.deviceAddress.equals(device.deviceAddress)) {
-                        if (DBG) {
-                            logd("mSavedPeerConfig " + mSavedPeerConfig.deviceAddress +
-                                "device " + device.deviceAddress);
-                        }
-                        // Do the regular device lost handling
-                        ret = NOT_HANDLED;
-                        break;
-                    }
-                    // Do nothing
-                    if (DBG) logd("Add device to lost list " + device);
-                    mPeersLostDuringConnection.updateSupplicantDetails(device);
-                    break;
-                case WifiP2pManager.DISCOVER_PEERS:
-                    /* Discovery will break negotiation */
-                    replyToMessage(message, WifiP2pManager.DISCOVER_PEERS_FAILED,
-                            WifiP2pManager.BUSY);
-                    break;
-                case WifiP2pManager.CANCEL_CONNECT:
-                    //Do a supplicant p2p_cancel which only cancels an ongoing
-                    //group negotiation. This will fail for a pending provision
-                    //discovery or for a pending user action, but at the framework
-                    //level, we always treat cancel as succeeded and enter
-                    //an inactive state
-                    mWifiNative.p2pCancelConnect();
-                    handleGroupCreationFailure();
-                    transitionTo(mInactiveState);
-                    replyToMessage(message, WifiP2pManager.CANCEL_CONNECT_SUCCEEDED);
-                    break;
-                default:
-                    ret = NOT_HANDLED;
-            }
-            return ret;
-        }
-    }
-
-    class UserAuthorizingNegotiationRequestState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            notifyInvitationReceived();
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            boolean ret = HANDLED;
-            switch (message.what) {
-                case PEER_CONNECTION_USER_ACCEPT:
-                    mWifiNative.p2pStopFind();
-                    p2pConnectWithPinDisplay(mSavedPeerConfig);
-                    mPeers.updateStatus(mSavedPeerConfig.deviceAddress, WifiP2pDevice.INVITED);
-                    sendPeersChangedBroadcast();
-                    transitionTo(mGroupNegotiationState);
-                   break;
-                case PEER_CONNECTION_USER_REJECT:
-                    if (DBG) logd("User rejected negotiation " + mSavedPeerConfig);
-                    transitionTo(mInactiveState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return ret;
-        }
-
-        @Override
-        public void exit() {
-            //TODO: dismiss dialog if not already done
-        }
-    }
-
-    class UserAuthorizingInviteRequestState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            notifyInvitationReceived();
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            boolean ret = HANDLED;
-            switch (message.what) {
-                case PEER_CONNECTION_USER_ACCEPT:
-                    mWifiNative.p2pStopFind();
-                    if (!reinvokePersistentGroup(mSavedPeerConfig)) {
-                        // Do negotiation when persistence fails
-                        p2pConnectWithPinDisplay(mSavedPeerConfig);
-                    }
-                    mPeers.updateStatus(mSavedPeerConfig.deviceAddress, WifiP2pDevice.INVITED);
-                    sendPeersChangedBroadcast();
-                    transitionTo(mGroupNegotiationState);
-                   break;
-                case PEER_CONNECTION_USER_REJECT:
-                    if (DBG) logd("User rejected invitation " + mSavedPeerConfig);
-                    transitionTo(mInactiveState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return ret;
-        }
-
-        @Override
-        public void exit() {
-            //TODO: dismiss dialog if not already done
-        }
-    }
-
-
-
-    class ProvisionDiscoveryState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            mWifiNative.p2pProvisionDiscovery(mSavedPeerConfig);
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            WifiP2pProvDiscEvent provDisc;
-            WifiP2pDevice device;
-            switch (message.what) {
-                case WifiMonitor.P2P_PROV_DISC_PBC_RSP_EVENT:
-                    provDisc = (WifiP2pProvDiscEvent) message.obj;
-                    device = provDisc.device;
-                    if (!device.deviceAddress.equals(mSavedPeerConfig.deviceAddress)) break;
-
-                    if (mSavedPeerConfig.wps.setup == WpsInfo.PBC) {
-                        if (DBG) logd("Found a match " + mSavedPeerConfig);
-                        p2pConnectWithPinDisplay(mSavedPeerConfig);
-                        transitionTo(mGroupNegotiationState);
-                    }
-                    break;
-                case WifiMonitor.P2P_PROV_DISC_ENTER_PIN_EVENT:
-                    provDisc = (WifiP2pProvDiscEvent) message.obj;
-                    device = provDisc.device;
-                    if (!device.deviceAddress.equals(mSavedPeerConfig.deviceAddress)) break;
-
-                    if (mSavedPeerConfig.wps.setup == WpsInfo.KEYPAD) {
-                        if (DBG) logd("Found a match " + mSavedPeerConfig);
-                        /* we already have the pin */
-                        if (!TextUtils.isEmpty(mSavedPeerConfig.wps.pin)) {
-                            p2pConnectWithPinDisplay(mSavedPeerConfig);
-                            transitionTo(mGroupNegotiationState);
-                        } else {
-                            mJoinExistingGroup = false;
-                            transitionTo(mUserAuthorizingNegotiationRequestState);
-                        }
-                    }
-                    break;
-                case WifiMonitor.P2P_PROV_DISC_SHOW_PIN_EVENT:
-                    provDisc = (WifiP2pProvDiscEvent) message.obj;
-                    device = provDisc.device;
-                    if (!device.deviceAddress.equals(mSavedPeerConfig.deviceAddress)) break;
-
-                    if (mSavedPeerConfig.wps.setup == WpsInfo.DISPLAY) {
-                        if (DBG) logd("Found a match " + mSavedPeerConfig);
-                        mSavedPeerConfig.wps.pin = provDisc.pin;
-                        p2pConnectWithPinDisplay(mSavedPeerConfig);
-                        notifyInvitationSent(provDisc.pin, device.deviceAddress);
-                        transitionTo(mGroupNegotiationState);
-                    }
-                    break;
-                case WifiMonitor.P2P_PROV_DISC_FAILURE_EVENT:
-                    loge("provision discovery failed");
-                    handleGroupCreationFailure();
-                    transitionTo(mInactiveState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class GroupNegotiationState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                // We ignore these right now, since we get a GROUP_STARTED notification
-                // afterwards
-                case WifiMonitor.P2P_GO_NEGOTIATION_SUCCESS_EVENT:
-                case WifiMonitor.P2P_GROUP_FORMATION_SUCCESS_EVENT:
-                    if (DBG) logd(getName() + " go success");
-                    break;
-                case WifiMonitor.P2P_GROUP_STARTED_EVENT:
-                    mGroup = (WifiP2pGroup) message.obj;
-                    if (DBG) logd(getName() + " group started");
-
-                    if (mGroup.getNetworkId() == WifiP2pGroup.PERSISTENT_NET_ID) {
-                        /*
-                         * update cache information and set network id to mGroup.
-                         */
-                        updatePersistentNetworks(NO_RELOAD);
-                        String devAddr = mGroup.getOwner().deviceAddress;
-                        mGroup.setNetworkId(mGroups.getNetworkId(devAddr,
-                                mGroup.getNetworkName()));
-                    }
-
-                    if (mGroup.isGroupOwner()) {
-                        /* Setting an idle time out on GO causes issues with certain scenarios
-                         * on clients where it can be off-channel for longer and with the power
-                         * save modes used.
-                         *
-                         * TODO: Verify multi-channel scenarios and supplicant behavior are
-                         * better before adding a time out in future
-                         */
-                        //Set group idle timeout of 10 sec, to avoid GO beaconing incase of any
-                        //failure during 4-way Handshake.
-                        if (!mAutonomousGroup) {
-                            mWifiNative.setP2pGroupIdle(mGroup.getInterface(), GROUP_IDLE_TIME_S);
-                        }
-                        startDhcpServer(mGroup.getInterface());
-                    } else {
-                        mWifiNative.setP2pGroupIdle(mGroup.getInterface(), GROUP_IDLE_TIME_S);
-                        mDhcpStateMachine = DhcpStateMachine.makeDhcpStateMachine(mContext,
-                                P2pStateMachine.this, mGroup.getInterface());
-                        // TODO: We should use DHCP state machine PRE message like WifiStateMachine
-                        mWifiNative.setP2pPowerSave(mGroup.getInterface(), false);
-                        mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_START_DHCP);
-                        WifiP2pDevice groupOwner = mGroup.getOwner();
-                        WifiP2pDevice peer = mPeers.get(groupOwner.deviceAddress);
-                        if (peer != null) {
-                            // update group owner details with peer details found at discovery
-                            groupOwner.updateSupplicantDetails(peer);
-                            mPeers.updateStatus(groupOwner.deviceAddress, WifiP2pDevice.CONNECTED);
-                            sendPeersChangedBroadcast();
-                        } else {
-                            // A supplicant bug can lead to reporting an invalid
-                            // group owner address (all zeroes) at times. Avoid a
-                            // crash, but continue group creation since it is not
-                            // essential.
-                            logw("Unknown group owner " + groupOwner);
-                        }
-                    }
-                    transitionTo(mGroupCreatedState);
-                    break;
-                case WifiMonitor.P2P_GO_NEGOTIATION_FAILURE_EVENT:
-                    P2pStatus status = (P2pStatus) message.obj;
-                    if (status == P2pStatus.NO_COMMON_CHANNEL) {
-                        transitionTo(mFrequencyConflictState);
-                        break;
-                    }
-                    /* continue with group removal handling */
-                case WifiMonitor.P2P_GROUP_REMOVED_EVENT:
-                    if (DBG) logd(getName() + " go failure");
-                    handleGroupCreationFailure();
-                    transitionTo(mInactiveState);
-                    break;
-                // A group formation failure is always followed by
-                // a group removed event. Flushing things at group formation
-                // failure causes supplicant issues. Ignore right now.
-                case WifiMonitor.P2P_GROUP_FORMATION_FAILURE_EVENT:
-                    status = (P2pStatus) message.obj;
-                    if (status == P2pStatus.NO_COMMON_CHANNEL) {
-                        transitionTo(mFrequencyConflictState);
-                        break;
-                    }
-                    break;
-                case WifiMonitor.P2P_INVITATION_RESULT_EVENT:
-                    status = (P2pStatus)message.obj;
-                    if (status == P2pStatus.SUCCESS) {
-                        // invocation was succeeded.
-                        // wait P2P_GROUP_STARTED_EVENT.
-                        break;
-                    }
-                    loge("Invitation result " + status);
-                    if (status == P2pStatus.UNKNOWN_P2P_GROUP) {
-                        // target device has already removed the credential.
-                        // So, remove this credential accordingly.
-                        int netId = mSavedPeerConfig.netId;
-                        if (netId >= 0) {
-                            if (DBG) logd("Remove unknown client from the list");
-                            removeClientFromList(netId, mSavedPeerConfig.deviceAddress, true);
-                        }
-
-                        // Reinvocation has failed, try group negotiation
-                        mSavedPeerConfig.netId = WifiP2pGroup.PERSISTENT_NET_ID;
-                        p2pConnectWithPinDisplay(mSavedPeerConfig);
-                    } else if (status == P2pStatus.INFORMATION_IS_CURRENTLY_UNAVAILABLE) {
-
-                        // Devices setting persistent_reconnect to 0 in wpa_supplicant
-                        // always defer the invocation request and return
-                        // "information is currently unable" error.
-                        // So, try another way to connect for interoperability.
-                        mSavedPeerConfig.netId = WifiP2pGroup.PERSISTENT_NET_ID;
-                        p2pConnectWithPinDisplay(mSavedPeerConfig);
-                    } else if (status == P2pStatus.NO_COMMON_CHANNEL) {
-                        transitionTo(mFrequencyConflictState);
-                    } else {
-                        handleGroupCreationFailure();
-                        transitionTo(mInactiveState);
-                    }
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    class FrequencyConflictState extends State {
-        private AlertDialog mFrequencyConflictDialog;
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            notifyFrequencyConflict();
-        }
-
-        private void notifyFrequencyConflict() {
-            logd("Notify frequency conflict");
-            Resources r = Resources.getSystem();
-
-            AlertDialog dialog = new AlertDialog.Builder(mContext)
-                .setMessage(r.getString(R.string.wifi_p2p_frequency_conflict_message,
-                        getDeviceName(mSavedPeerConfig.deviceAddress)))
-                .setPositiveButton(r.getString(R.string.dlg_ok), new OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                            sendMessage(DROP_WIFI_USER_ACCEPT);
-                        }
-                    })
-                .setNegativeButton(r.getString(R.string.decline), new OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                            sendMessage(DROP_WIFI_USER_REJECT);
-                        }
-                    })
-                .setOnCancelListener(new DialogInterface.OnCancelListener() {
-                        @Override
-                        public void onCancel(DialogInterface arg0) {
-                            sendMessage(DROP_WIFI_USER_REJECT);
-                        }
-                    })
-                .create();
-
-            dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-            dialog.show();
-            mFrequencyConflictDialog = dialog;
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiMonitor.P2P_GO_NEGOTIATION_SUCCESS_EVENT:
-                case WifiMonitor.P2P_GROUP_FORMATION_SUCCESS_EVENT:
-                    loge(getName() + "group sucess during freq conflict!");
-                    break;
-                case WifiMonitor.P2P_GROUP_STARTED_EVENT:
-                    loge(getName() + "group started after freq conflict, handle anyway");
-                    deferMessage(message);
-                    transitionTo(mGroupNegotiationState);
-                    break;
-                case WifiMonitor.P2P_GO_NEGOTIATION_FAILURE_EVENT:
-                case WifiMonitor.P2P_GROUP_REMOVED_EVENT:
-                case WifiMonitor.P2P_GROUP_FORMATION_FAILURE_EVENT:
-                    // Ignore failures since we retry again
-                    break;
-                case DROP_WIFI_USER_REJECT:
-                    // User rejected dropping wifi in favour of p2p
-                    handleGroupCreationFailure();
-                    transitionTo(mInactiveState);
-                    break;
-                case DROP_WIFI_USER_ACCEPT:
-                    // User accepted dropping wifi in favour of p2p
-                    mWifiChannel.sendMessage(WifiP2pService.DISCONNECT_WIFI_REQUEST, 1);
-                    mTempoarilyDisconnectedWifi = true;
-                    break;
-                case DISCONNECT_WIFI_RESPONSE:
-                    // Got a response from wifistatemachine, retry p2p
-                    if (DBG) logd(getName() + "Wifi disconnected, retry p2p");
-                    transitionTo(mInactiveState);
-                    sendMessage(WifiP2pManager.CONNECT, mSavedPeerConfig);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        public void exit() {
-            if (mFrequencyConflictDialog != null) mFrequencyConflictDialog.dismiss();
-        }
-    }
-
-    class GroupCreatedState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            // Once connected, peer config details are invalid
-            mSavedPeerConfig.invalidate();
-            mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.CONNECTED, null, null);
-
-            updateThisDevice(WifiP2pDevice.CONNECTED);
-
-            //DHCP server has already been started if I am a group owner
-            if (mGroup.isGroupOwner()) {
-                setWifiP2pInfoOnGroupFormation(NetworkUtils.numericToInetAddress(SERVER_ADDRESS));
-            }
-
-            // In case of a negotiation group, connection changed is sent
-            // after a client joins. For autonomous, send now
-            if (mAutonomousGroup) {
-                sendP2pConnectionChangedBroadcast();
-            }
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiMonitor.AP_STA_CONNECTED_EVENT:
-                    WifiP2pDevice device = (WifiP2pDevice) message.obj;
-                    String deviceAddress = device.deviceAddress;
-                    // Clear timeout that was set when group was started.
-                    mWifiNative.setP2pGroupIdle(mGroup.getInterface(), 0);
-                    if (deviceAddress != null) {
-                        if (mPeers.get(deviceAddress) != null) {
-                            mGroup.addClient(mPeers.get(deviceAddress));
-                        } else {
-                            mGroup.addClient(deviceAddress);
-                        }
-                        mPeers.updateStatus(deviceAddress, WifiP2pDevice.CONNECTED);
-                        if (DBG) logd(getName() + " ap sta connected");
-                        sendPeersChangedBroadcast();
-                    } else {
-                        loge("Connect on null device address, ignore");
-                    }
-                    sendP2pConnectionChangedBroadcast();
-                    break;
-                case WifiMonitor.AP_STA_DISCONNECTED_EVENT:
-                    device = (WifiP2pDevice) message.obj;
-                    deviceAddress = device.deviceAddress;
-                    if (deviceAddress != null) {
-                        mPeers.updateStatus(deviceAddress, WifiP2pDevice.AVAILABLE);
-                        if (mGroup.removeClient(deviceAddress)) {
-                            if (DBG) logd("Removed client " + deviceAddress);
-                            if (!mAutonomousGroup && mGroup.isClientListEmpty()) {
-                                logd("Client list empty, remove non-persistent p2p group");
-                                mWifiNative.p2pGroupRemove(mGroup.getInterface());
-                                // We end up sending connection changed broadcast
-                                // when this happens at exit()
-                            } else {
-                                // Notify when a client disconnects from group
-                                sendP2pConnectionChangedBroadcast();
-                            }
-                        } else {
-                            if (DBG) logd("Failed to remove client " + deviceAddress);
-                            for (WifiP2pDevice c : mGroup.getClientList()) {
-                                if (DBG) logd("client " + c.deviceAddress);
-                            }
-                        }
-                        sendPeersChangedBroadcast();
-                        if (DBG) logd(getName() + " ap sta disconnected");
-                    } else {
-                        loge("Disconnect on unknown device: " + device);
-                    }
-                    break;
-                case DhcpStateMachine.CMD_POST_DHCP_ACTION:
-                    DhcpResults dhcpResults = (DhcpResults) message.obj;
-                    if (message.arg1 == DhcpStateMachine.DHCP_SUCCESS &&
-                            dhcpResults != null) {
-                        if (DBG) logd("DhcpResults: " + dhcpResults);
-                        setWifiP2pInfoOnGroupFormation(dhcpResults.serverAddress);
-                        sendP2pConnectionChangedBroadcast();
-                        //Turn on power save on client
-                        mWifiNative.setP2pPowerSave(mGroup.getInterface(), true);
-                    } else {
-                        loge("DHCP failed");
-                        mWifiNative.p2pGroupRemove(mGroup.getInterface());
-                    }
-                    break;
-                case WifiP2pManager.REMOVE_GROUP:
-                    if (DBG) logd(getName() + " remove group");
-                    if (mWifiNative.p2pGroupRemove(mGroup.getInterface())) {
-                        transitionTo(mOngoingGroupRemovalState);
-                        replyToMessage(message, WifiP2pManager.REMOVE_GROUP_SUCCEEDED);
-                    } else {
-                        handleGroupRemoved();
-                        transitionTo(mInactiveState);
-                        replyToMessage(message, WifiP2pManager.REMOVE_GROUP_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    break;
-                /* We do not listen to NETWORK_DISCONNECTION_EVENT for group removal
-                 * handling since supplicant actually tries to reconnect after a temporary
-                 * disconnect until group idle time out. Eventually, a group removal event
-                 * will come when group has been removed.
-                 *
-                 * When there are connectivity issues during temporary disconnect, the application
-                 * will also just remove the group.
-                 *
-                 * Treating network disconnection as group removal causes race conditions since
-                 * supplicant would still maintain the group at that stage.
-                 */
-                case WifiMonitor.P2P_GROUP_REMOVED_EVENT:
-                    if (DBG) logd(getName() + " group removed");
-                    handleGroupRemoved();
-                    transitionTo(mInactiveState);
-                    break;
-                case WifiMonitor.P2P_DEVICE_LOST_EVENT:
-                    device = (WifiP2pDevice) message.obj;
-                    //Device loss for a connected device indicates it is not in discovery any more
-                    if (mGroup.contains(device)) {
-                        if (DBG) logd("Add device to lost list " + device);
-                        mPeersLostDuringConnection.updateSupplicantDetails(device);
-                        return HANDLED;
-                    }
-                    // Do the regular device lost handling
-                    return NOT_HANDLED;
-                case WifiStateMachine.CMD_DISABLE_P2P_REQ:
-                    sendMessage(WifiP2pManager.REMOVE_GROUP);
-                    deferMessage(message);
-                    break;
-                    // This allows any client to join the GO during the
-                    // WPS window
-                case WifiP2pManager.START_WPS:
-                    WpsInfo wps = (WpsInfo) message.obj;
-                    if (wps == null) {
-                        replyToMessage(message, WifiP2pManager.START_WPS_FAILED);
-                        break;
-                    }
-                    boolean ret = true;
-                    if (wps.setup == WpsInfo.PBC) {
-                        ret = mWifiNative.startWpsPbc(mGroup.getInterface(), null);
-                    } else {
-                        if (wps.pin == null) {
-                            String pin = mWifiNative.startWpsPinDisplay(mGroup.getInterface());
-                            try {
-                                Integer.parseInt(pin);
-                                notifyInvitationSent(pin, "any");
-                            } catch (NumberFormatException ignore) {
-                                ret = false;
-                            }
-                        } else {
-                            ret = mWifiNative.startWpsPinKeypad(mGroup.getInterface(),
-                                    wps.pin);
-                        }
-                    }
-                    replyToMessage(message, ret ? WifiP2pManager.START_WPS_SUCCEEDED :
-                            WifiP2pManager.START_WPS_FAILED);
-                    break;
-                case WifiP2pManager.CONNECT:
-                    WifiP2pConfig config = (WifiP2pConfig) message.obj;
-                    if (isConfigInvalid(config)) {
-                        loge("Dropping connect requeset " + config);
-                        replyToMessage(message, WifiP2pManager.CONNECT_FAILED);
-                        break;
-                    }
-                    logd("Inviting device : " + config.deviceAddress);
-                    mSavedPeerConfig = config;
-                    if (mWifiNative.p2pInvite(mGroup, config.deviceAddress)) {
-                        mPeers.updateStatus(config.deviceAddress, WifiP2pDevice.INVITED);
-                        sendPeersChangedBroadcast();
-                        replyToMessage(message, WifiP2pManager.CONNECT_SUCCEEDED);
-                    } else {
-                        replyToMessage(message, WifiP2pManager.CONNECT_FAILED,
-                                WifiP2pManager.ERROR);
-                    }
-                    // TODO: figure out updating the status to declined when invitation is rejected
-                    break;
-                case WifiMonitor.P2P_INVITATION_RESULT_EVENT:
-                    P2pStatus status = (P2pStatus)message.obj;
-                    if (status == P2pStatus.SUCCESS) {
-                        // invocation was succeeded.
-                        break;
-                    }
-                    loge("Invitation result " + status);
-                    if (status == P2pStatus.UNKNOWN_P2P_GROUP) {
-                        // target device has already removed the credential.
-                        // So, remove this credential accordingly.
-                        int netId = mGroup.getNetworkId();
-                        if (netId >= 0) {
-                            if (DBG) logd("Remove unknown client from the list");
-                            if (!removeClientFromList(netId,
-                                    mSavedPeerConfig.deviceAddress, false)) {
-                                // not found the client on the list
-                                loge("Already removed the client, ignore");
-                                break;
-                            }
-                            // try invitation.
-                            sendMessage(WifiP2pManager.CONNECT, mSavedPeerConfig);
-                        }
-                    }
-                    break;
-                case WifiMonitor.P2P_PROV_DISC_PBC_REQ_EVENT:
-                case WifiMonitor.P2P_PROV_DISC_ENTER_PIN_EVENT:
-                case WifiMonitor.P2P_PROV_DISC_SHOW_PIN_EVENT:
-                    WifiP2pProvDiscEvent provDisc = (WifiP2pProvDiscEvent) message.obj;
-                    mSavedPeerConfig = new WifiP2pConfig();
-                    mSavedPeerConfig.deviceAddress = provDisc.device.deviceAddress;
-                    if (message.what == WifiMonitor.P2P_PROV_DISC_ENTER_PIN_EVENT) {
-                        mSavedPeerConfig.wps.setup = WpsInfo.KEYPAD;
-                    } else if (message.what == WifiMonitor.P2P_PROV_DISC_SHOW_PIN_EVENT) {
-                        mSavedPeerConfig.wps.setup = WpsInfo.DISPLAY;
-                        mSavedPeerConfig.wps.pin = provDisc.pin;
-                    } else {
-                        mSavedPeerConfig.wps.setup = WpsInfo.PBC;
-                    }
-                    transitionTo(mUserAuthorizingJoinState);
-                    break;
-                case WifiMonitor.P2P_GROUP_STARTED_EVENT:
-                    loge("Duplicate group creation event notice, ignore");
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        public void exit() {
-            updateThisDevice(WifiP2pDevice.AVAILABLE);
-            resetWifiP2pInfo();
-            mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.DISCONNECTED, null, null);
-            sendP2pConnectionChangedBroadcast();
-        }
-    }
-
-    class UserAuthorizingJoinState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-            notifyInvitationReceived();
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                case WifiMonitor.P2P_PROV_DISC_PBC_REQ_EVENT:
-                case WifiMonitor.P2P_PROV_DISC_ENTER_PIN_EVENT:
-                case WifiMonitor.P2P_PROV_DISC_SHOW_PIN_EVENT:
-                    //Ignore more client requests
-                    break;
-                case PEER_CONNECTION_USER_ACCEPT:
-                    //Stop discovery to avoid failure due to channel switch
-                    mWifiNative.p2pStopFind();
-                    if (mSavedPeerConfig.wps.setup == WpsInfo.PBC) {
-                        mWifiNative.startWpsPbc(mGroup.getInterface(), null);
-                    } else {
-                        mWifiNative.startWpsPinKeypad(mGroup.getInterface(),
-                                mSavedPeerConfig.wps.pin);
-                    }
-                    transitionTo(mGroupCreatedState);
-                    break;
-                case PEER_CONNECTION_USER_REJECT:
-                    if (DBG) logd("User rejected incoming request");
-                    transitionTo(mGroupCreatedState);
-                    break;
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-
-        @Override
-        public void exit() {
-            //TODO: dismiss dialog if not already done
-        }
-    }
-
-    class OngoingGroupRemovalState extends State {
-        @Override
-        public void enter() {
-            if (DBG) logd(getName());
-        }
-
-        @Override
-        public boolean processMessage(Message message) {
-            if (DBG) logd(getName() + message.toString());
-            switch (message.what) {
-                // Group removal ongoing. Multiple calls
-                // end up removing persisted network. Do nothing.
-                case WifiP2pManager.REMOVE_GROUP:
-                    replyToMessage(message, WifiP2pManager.REMOVE_GROUP_SUCCEEDED);
-                    break;
-                // Parent state will transition out of this state
-                // when removal is complete
-                default:
-                    return NOT_HANDLED;
-            }
-            return HANDLED;
-        }
-    }
-
-    @Override
-    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        super.dump(fd, pw, args);
-        pw.println("mWifiP2pInfo " + mWifiP2pInfo);
-        pw.println("mGroup " + mGroup);
-        pw.println("mSavedPeerConfig " + mSavedPeerConfig);
-        pw.println("mSavedP2pGroup " + mSavedP2pGroup);
-        pw.println();
-    }
-
-    private void sendP2pStateChangedBroadcast(boolean enabled) {
-        final Intent intent = new Intent(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        if (enabled) {
-            intent.putExtra(WifiP2pManager.EXTRA_WIFI_STATE,
-                    WifiP2pManager.WIFI_P2P_STATE_ENABLED);
-        } else {
-            intent.putExtra(WifiP2pManager.EXTRA_WIFI_STATE,
-                    WifiP2pManager.WIFI_P2P_STATE_DISABLED);
-        }
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendP2pDiscoveryChangedBroadcast(boolean started) {
-        if (mDiscoveryStarted == started) return;
-        mDiscoveryStarted = started;
-
-        if (DBG) logd("discovery change broadcast " + started);
-
-        final Intent intent = new Intent(WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiP2pManager.EXTRA_DISCOVERY_STATE, started ?
-                WifiP2pManager.WIFI_P2P_DISCOVERY_STARTED :
-                WifiP2pManager.WIFI_P2P_DISCOVERY_STOPPED);
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendThisDeviceChangedBroadcast() {
-        final Intent intent = new Intent(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        intent.putExtra(WifiP2pManager.EXTRA_WIFI_P2P_DEVICE, new WifiP2pDevice(mThisDevice));
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendPeersChangedBroadcast() {
-        final Intent intent = new Intent(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION);
-        intent.putExtra(WifiP2pManager.EXTRA_P2P_DEVICE_LIST, new WifiP2pDeviceList(mPeers));
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void sendP2pConnectionChangedBroadcast() {
-        if (DBG) logd("sending p2p connection changed broadcast");
-        Intent intent = new Intent(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT
-                | Intent.FLAG_RECEIVER_REPLACE_PENDING);
-        intent.putExtra(WifiP2pManager.EXTRA_WIFI_P2P_INFO, new WifiP2pInfo(mWifiP2pInfo));
-        intent.putExtra(WifiP2pManager.EXTRA_NETWORK_INFO, new NetworkInfo(mNetworkInfo));
-        intent.putExtra(WifiP2pManager.EXTRA_WIFI_P2P_GROUP, new WifiP2pGroup(mGroup));
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-        mWifiChannel.sendMessage(WifiP2pService.P2P_CONNECTION_CHANGED,
-                new NetworkInfo(mNetworkInfo));
-    }
-
-    private void sendP2pPersistentGroupsChangedBroadcast() {
-        if (DBG) logd("sending p2p persistent groups changed broadcast");
-        Intent intent = new Intent(WifiP2pManager.WIFI_P2P_PERSISTENT_GROUPS_CHANGED_ACTION);
-        intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT);
-        mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);
-    }
-
-    private void startDhcpServer(String intf) {
-        InterfaceConfiguration ifcg = null;
-        try {
-            ifcg = mNwService.getInterfaceConfig(intf);
-            ifcg.setLinkAddress(new LinkAddress(NetworkUtils.numericToInetAddress(
-                        SERVER_ADDRESS), 24));
-            ifcg.setInterfaceUp();
-            mNwService.setInterfaceConfig(intf, ifcg);
-            /* This starts the dnsmasq server */
-            mNwService.startTethering(DHCP_RANGE);
-        } catch (Exception e) {
-            loge("Error configuring interface " + intf + ", :" + e);
-            return;
-        }
-
-        logd("Started Dhcp server on " + intf);
-   }
-
-    private void stopDhcpServer(String intf) {
-        try {
-            mNwService.stopTethering();
-        } catch (Exception e) {
-            loge("Error stopping Dhcp server" + e);
-            return;
-        }
-
-        logd("Stopped Dhcp server");
-    }
-
-    private void notifyP2pEnableFailure() {
-        Resources r = Resources.getSystem();
-        AlertDialog dialog = new AlertDialog.Builder(mContext)
-            .setTitle(r.getString(R.string.wifi_p2p_dialog_title))
-            .setMessage(r.getString(R.string.wifi_p2p_failed_message))
-            .setPositiveButton(r.getString(R.string.ok), null)
-            .create();
-        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-        dialog.show();
-    }
-
-    private void addRowToDialog(ViewGroup group, int stringId, String value) {
-        Resources r = Resources.getSystem();
-        View row = LayoutInflater.from(mContext).inflate(R.layout.wifi_p2p_dialog_row,
-                group, false);
-        ((TextView) row.findViewById(R.id.name)).setText(r.getString(stringId));
-        ((TextView) row.findViewById(R.id.value)).setText(value);
-        group.addView(row);
-    }
-
-    private void notifyInvitationSent(String pin, String peerAddress) {
-        Resources r = Resources.getSystem();
-
-        final View textEntryView = LayoutInflater.from(mContext)
-                .inflate(R.layout.wifi_p2p_dialog, null);
-
-        ViewGroup group = (ViewGroup) textEntryView.findViewById(R.id.info);
-        addRowToDialog(group, R.string.wifi_p2p_to_message, getDeviceName(peerAddress));
-        addRowToDialog(group, R.string.wifi_p2p_show_pin_message, pin);
-
-        AlertDialog dialog = new AlertDialog.Builder(mContext)
-            .setTitle(r.getString(R.string.wifi_p2p_invitation_sent_title))
-            .setView(textEntryView)
-            .setPositiveButton(r.getString(R.string.ok), null)
-            .create();
-        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-        dialog.show();
-    }
-
-    private void notifyInvitationReceived() {
-        Resources r = Resources.getSystem();
-        final WpsInfo wps = mSavedPeerConfig.wps;
-        final View textEntryView = LayoutInflater.from(mContext)
-                .inflate(R.layout.wifi_p2p_dialog, null);
-
-        ViewGroup group = (ViewGroup) textEntryView.findViewById(R.id.info);
-        addRowToDialog(group, R.string.wifi_p2p_from_message, getDeviceName(
-                mSavedPeerConfig.deviceAddress));
-
-        final EditText pin = (EditText) textEntryView.findViewById(R.id.wifi_p2p_wps_pin);
-
-        AlertDialog dialog = new AlertDialog.Builder(mContext)
-            .setTitle(r.getString(R.string.wifi_p2p_invitation_to_connect_title))
-            .setView(textEntryView)
-            .setPositiveButton(r.getString(R.string.accept), new OnClickListener() {
-                        public void onClick(DialogInterface dialog, int which) {
-                            if (wps.setup == WpsInfo.KEYPAD) {
-                                mSavedPeerConfig.wps.pin = pin.getText().toString();
-                            }
-                            if (DBG) logd(getName() + " accept invitation " + mSavedPeerConfig);
-                            sendMessage(PEER_CONNECTION_USER_ACCEPT);
-                        }
-                    })
-            .setNegativeButton(r.getString(R.string.decline), new OnClickListener() {
-                        @Override
-                        public void onClick(DialogInterface dialog, int which) {
-                            if (DBG) logd(getName() + " ignore connect");
-                            sendMessage(PEER_CONNECTION_USER_REJECT);
-                        }
-                    })
-            .setOnCancelListener(new DialogInterface.OnCancelListener() {
-                        @Override
-                        public void onCancel(DialogInterface arg0) {
-                            if (DBG) logd(getName() + " ignore connect");
-                            sendMessage(PEER_CONNECTION_USER_REJECT);
-                        }
-                    })
-            .create();
-
-        //make the enter pin area or the display pin area visible
-        switch (wps.setup) {
-            case WpsInfo.KEYPAD:
-                if (DBG) logd("Enter pin section visible");
-                textEntryView.findViewById(R.id.enter_pin_section).setVisibility(View.VISIBLE);
-                break;
-            case WpsInfo.DISPLAY:
-                if (DBG) logd("Shown pin section visible");
-                addRowToDialog(group, R.string.wifi_p2p_show_pin_message, wps.pin);
-                break;
-            default:
-                break;
-        }
-
-        if ((r.getConfiguration().uiMode & Configuration.UI_MODE_TYPE_APPLIANCE) ==
-                Configuration.UI_MODE_TYPE_APPLIANCE) {
-            // For appliance devices, add a key listener which accepts.
-            dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
-
-                @Override
-                public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
-                    // TODO: make the actual key come from a config value.
-                    if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {
-                        sendMessage(PEER_CONNECTION_USER_ACCEPT);
-                        dialog.dismiss();
-                        return true;
-                    }
-                    return false;
-                }
-            });
-            // TODO: add timeout for this dialog.
-            // TODO: update UI in appliance mode to tell user what to do.
-        }
-
-        dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
-        dialog.show();
-    }
-
-    /**
-     * Synchronize the persistent group list between
-     * wpa_supplicant and mGroups.
-     */
-    private void updatePersistentNetworks(boolean reload) {
-        String listStr = mWifiNative.listNetworks();
-        if (listStr == null) return;
-
-        boolean isSaveRequired = false;
-        String[] lines = listStr.split("\n");
-        if (lines == null) return;
-
-        if (reload) mGroups.clear();
-
-        // Skip the first line, which is a header
-        for (int i = 1; i < lines.length; i++) {
-            String[] result = lines[i].split("\t");
-            if (result == null || result.length < 4) {
-                continue;
-            }
-            // network-id | ssid | bssid | flags
-            int netId = -1;
-            String ssid = result[1];
-            String bssid = result[2];
-            String flags = result[3];
-            try {
-                netId = Integer.parseInt(result[0]);
-            } catch(NumberFormatException e) {
-                e.printStackTrace();
-                continue;
-            }
-
-            if (flags.indexOf("[CURRENT]") != -1) {
-                continue;
-            }
-            if (flags.indexOf("[P2P-PERSISTENT]") == -1) {
-                /*
-                 * The unused profile is sometimes remained when the p2p group formation is failed.
-                 * So, we clean up the p2p group here.
-                 */
-                if (DBG) logd("clean up the unused persistent group. netId=" + netId);
-                mWifiNative.removeNetwork(netId);
-                isSaveRequired = true;
-                continue;
-            }
-
-            if (mGroups.contains(netId)) {
-                continue;
-            }
-
-            WifiP2pGroup group = new WifiP2pGroup();
-            group.setNetworkId(netId);
-            group.setNetworkName(ssid);
-            String mode = mWifiNative.getNetworkVariable(netId, "mode");
-            if (mode != null && mode.equals("3")) {
-                group.setIsGroupOwner(true);
-            }
-            if (bssid.equalsIgnoreCase(mThisDevice.deviceAddress)) {
-                group.setOwner(mThisDevice);
-            } else {
-                WifiP2pDevice device = new WifiP2pDevice();
-                device.deviceAddress = bssid;
-                group.setOwner(device);
-            }
-            mGroups.add(group);
-            isSaveRequired = true;
-        }
-
-        if (reload || isSaveRequired) {
-            mWifiNative.saveConfig();
-            sendP2pPersistentGroupsChangedBroadcast();
-        }
-    }
-
-    /**
-     * A config is valid if it has a peer address that has already been
-     * discovered
-     * @return true if it is invalid, false otherwise
-     */
-    private boolean isConfigInvalid(WifiP2pConfig config) {
-        if (config == null) return true;
-        if (TextUtils.isEmpty(config.deviceAddress)) return true;
-        if (mPeers.get(config.deviceAddress) == null) return true;
-        return false;
-    }
-
-    /* TODO: The supplicant does not provide group capability changes as an event.
-     * Having it pushed as an event would avoid polling for this information right
-     * before a connection
-     */
-    private WifiP2pDevice fetchCurrentDeviceDetails(WifiP2pConfig config) {
-        /* Fetch & update group capability from supplicant on the device */
-        int gc = mWifiNative.getGroupCapability(config.deviceAddress);
-        mPeers.updateGroupCapability(config.deviceAddress, gc);
-        return mPeers.get(config.deviceAddress);
-    }
-
-    /**
-     * Start a p2p group negotiation and display pin if necessary
-     * @param config for the peer
-     */
-    private void p2pConnectWithPinDisplay(WifiP2pConfig config) {
-        WifiP2pDevice dev = fetchCurrentDeviceDetails(config);
-
-        String pin = mWifiNative.p2pConnect(config, dev.isGroupOwner());
-        try {
-            Integer.parseInt(pin);
-            notifyInvitationSent(pin, config.deviceAddress);
-        } catch (NumberFormatException ignore) {
-            // do nothing if p2pConnect did not return a pin
-        }
-    }
-
-    /**
-     * Reinvoke a persistent group.
-     *
-     * @param config for the peer
-     * @return true on success, false on failure
-     */
-    private boolean reinvokePersistentGroup(WifiP2pConfig config) {
-        WifiP2pDevice dev = fetchCurrentDeviceDetails(config);
-
-        boolean join = dev.isGroupOwner();
-        String ssid = mWifiNative.p2pGetSsid(dev.deviceAddress);
-        if (DBG) logd("target ssid is " + ssid + " join:" + join);
-
-        if (join && dev.isGroupLimit()) {
-            if (DBG) logd("target device reaches group limit.");
-
-            // if the target group has reached the limit,
-            // try group formation.
-            join = false;
-        } else if (join) {
-            int netId = mGroups.getNetworkId(dev.deviceAddress, ssid);
-            if (netId >= 0) {
-                // Skip WPS and start 4way handshake immediately.
-                if (!mWifiNative.p2pGroupAdd(netId)) {
-                    return false;
-                }
-                return true;
-            }
-        }
-
-        if (!join && dev.isDeviceLimit()) {
-            loge("target device reaches the device limit.");
-            return false;
-        }
-
-        if (!join && dev.isInvitationCapable()) {
-            int netId = WifiP2pGroup.PERSISTENT_NET_ID;
-            if (config.netId >= 0) {
-                if (config.deviceAddress.equals(mGroups.getOwnerAddr(config.netId))) {
-                    netId = config.netId;
-                }
-            } else {
-                netId = mGroups.getNetworkId(dev.deviceAddress);
-            }
-            if (netId < 0) {
-                netId = getNetworkIdFromClientList(dev.deviceAddress);
-            }
-            if (DBG) logd("netId related with " + dev.deviceAddress + " = " + netId);
-            if (netId >= 0) {
-                // Invoke the persistent group.
-                if (mWifiNative.p2pReinvoke(netId, dev.deviceAddress)) {
-                    // Save network id. It'll be used when an invitation result event is received.
-                    config.netId = netId;
-                    return true;
-                } else {
-                    loge("p2pReinvoke() failed, update networks");
-                    updatePersistentNetworks(RELOAD);
-                    return false;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Return the network id of the group owner profile which has the p2p client with
-     * the specified device address in it's client list.
-     * If more than one persistent group of the same address is present in its client
-     * lists, return the first one.
-     *
-     * @param deviceAddress p2p device address.
-     * @return the network id. if not found, return -1.
-     */
-    private int getNetworkIdFromClientList(String deviceAddress) {
-        if (deviceAddress == null) return -1;
-
-        Collection<WifiP2pGroup> groups = mGroups.getGroupList();
-        for (WifiP2pGroup group : groups) {
-            int netId = group.getNetworkId();
-            String[] p2pClientList = getClientList(netId);
-            if (p2pClientList == null) continue;
-            for (String client : p2pClientList) {
-                if (deviceAddress.equalsIgnoreCase(client)) {
-                    return netId;
-                }
-            }
-        }
-        return -1;
-    }
-
-    /**
-     * Return p2p client list associated with the specified network id.
-     * @param netId network id.
-     * @return p2p client list. if not found, return null.
-     */
-    private String[] getClientList(int netId) {
-        String p2pClients = mWifiNative.getNetworkVariable(netId, "p2p_client_list");
-        if (p2pClients == null) {
-            return null;
-        }
-        return p2pClients.split(" ");
-    }
-
-    /**
-     * Remove the specified p2p client from the specified profile.
-     * @param netId network id of the profile.
-     * @param addr p2p client address to be removed.
-     * @param isRemovable if true, remove the specified profile if its client list becomes empty.
-     * @return whether removing the specified p2p client is successful or not.
-     */
-    private boolean removeClientFromList(int netId, String addr, boolean isRemovable) {
-        StringBuilder modifiedClientList =  new StringBuilder();
-        String[] currentClientList = getClientList(netId);
-        boolean isClientRemoved = false;
-        if (currentClientList != null) {
-            for (String client : currentClientList) {
-                if (!client.equalsIgnoreCase(addr)) {
-                    modifiedClientList.append(" ");
-                    modifiedClientList.append(client);
-                } else {
-                    isClientRemoved = true;
-                }
-            }
-        }
-        if (modifiedClientList.length() == 0 && isRemovable) {
-            // the client list is empty. so remove it.
-            if (DBG) logd("Remove unknown network");
-            mGroups.remove(netId);
-            return true;
-        }
-
-        if (!isClientRemoved) {
-            // specified p2p client is not found. already removed.
-            return false;
-        }
-
-        if (DBG) logd("Modified client list: " + modifiedClientList);
-        if (modifiedClientList.length() == 0) {
-            modifiedClientList.append("\"\"");
-        }
-        mWifiNative.setNetworkVariable(netId,
-                "p2p_client_list", modifiedClientList.toString());
-        mWifiNative.saveConfig();
-        return true;
-    }
-
-    private void setWifiP2pInfoOnGroupFormation(InetAddress serverInetAddress) {
-        mWifiP2pInfo.groupFormed = true;
-        mWifiP2pInfo.isGroupOwner = mGroup.isGroupOwner();
-        mWifiP2pInfo.groupOwnerAddress = serverInetAddress;
-    }
-
-    private void resetWifiP2pInfo() {
-        mWifiP2pInfo.groupFormed = false;
-        mWifiP2pInfo.isGroupOwner = false;
-        mWifiP2pInfo.groupOwnerAddress = null;
-    }
-
-    private String getDeviceName(String deviceAddress) {
-        WifiP2pDevice d = mPeers.get(deviceAddress);
-        if (d != null) {
-                return d.deviceName;
-        }
-        //Treat the address as name if there is no match
-        return deviceAddress;
-    }
-
-    private String getPersistedDeviceName() {
-        String deviceName = Settings.Global.getString(mContext.getContentResolver(),
-                Settings.Global.WIFI_P2P_DEVICE_NAME);
-        if (deviceName == null) {
-            /* We use the 4 digits of the ANDROID_ID to have a friendly
-             * default that has low likelihood of collision with a peer */
-            String id = Settings.Secure.getString(mContext.getContentResolver(),
-                    Settings.Secure.ANDROID_ID);
-            return "Android_" + id.substring(0,4);
-        }
-        return deviceName;
-    }
-
-    private boolean setAndPersistDeviceName(String devName) {
-        if (devName == null) return false;
-
-        if (!mWifiNative.setDeviceName(devName)) {
-            loge("Failed to set device name " + devName);
-            return false;
-        }
-
-        mThisDevice.deviceName = devName;
-        mWifiNative.setP2pSsidPostfix("-" + mThisDevice.deviceName);
-
-        Settings.Global.putString(mContext.getContentResolver(),
-                Settings.Global.WIFI_P2P_DEVICE_NAME, devName);
-        sendThisDeviceChangedBroadcast();
-        return true;
-    }
-
-    private boolean setWfdInfo(WifiP2pWfdInfo wfdInfo) {
-        boolean success;
-
-        if (!wfdInfo.isWfdEnabled()) {
-            success = mWifiNative.setWfdEnable(false);
-        } else {
-            success =
-                mWifiNative.setWfdEnable(true)
-                && mWifiNative.setWfdDeviceInfo(wfdInfo.getDeviceInfoHex());
-        }
-
-        if (!success) {
-            loge("Failed to set wfd properties");
-            return false;
-        }
-
-        mThisDevice.wfdInfo = wfdInfo;
-        sendThisDeviceChangedBroadcast();
-        return true;
-    }
-
-    private void initializeP2pSettings() {
-        mWifiNative.setPersistentReconnect(true);
-        mThisDevice.deviceName = getPersistedDeviceName();
-        mWifiNative.setDeviceName(mThisDevice.deviceName);
-        // DIRECT-XY-DEVICENAME (XY is randomly generated)
-        mWifiNative.setP2pSsidPostfix("-" + mThisDevice.deviceName);
-        mWifiNative.setDeviceType(mThisDevice.primaryDeviceType);
-        // Supplicant defaults to using virtual display with display
-        // which refers to a remote display. Use physical_display
-        mWifiNative.setConfigMethods("virtual_push_button physical_display keypad");
-        // STA has higher priority over P2P
-        mWifiNative.setConcurrencyPriority("sta");
-
-        mThisDevice.deviceAddress = mWifiNative.p2pGetDeviceAddress();
-        updateThisDevice(WifiP2pDevice.AVAILABLE);
-        if (DBG) logd("DeviceAddress: " + mThisDevice.deviceAddress);
-
-        mClientInfoList.clear();
-        mWifiNative.p2pFlush();
-        mWifiNative.p2pServiceFlush();
-        mServiceTransactionId = 0;
-        mServiceDiscReqId = null;
-
-        String countryCode = Settings.Global.getString(mContext.getContentResolver(),
-                Settings.Global.WIFI_COUNTRY_CODE);
-        if (countryCode != null && !countryCode.isEmpty()) {
-            mP2pStateMachine.sendMessage(SET_COUNTRY_CODE, countryCode);
-        }
-
-        updatePersistentNetworks(RELOAD);
-    }
-
-    private void updateThisDevice(int status) {
-        mThisDevice.status = status;
-        sendThisDeviceChangedBroadcast();
-    }
-
-    private void handleGroupCreationFailure() {
-        resetWifiP2pInfo();
-        mNetworkInfo.setDetailedState(NetworkInfo.DetailedState.FAILED, null, null);
-        sendP2pConnectionChangedBroadcast();
-
-        // Remove only the peer we failed to connect to so that other devices discovered
-        // that have not timed out still remain in list for connection
-        boolean peersChanged = mPeers.remove(mPeersLostDuringConnection);
-        if (mPeers.remove(mSavedPeerConfig.deviceAddress) != null) {
-            peersChanged = true;
-        }
-        if (peersChanged) {
-            sendPeersChangedBroadcast();
-        }
-
-        mPeersLostDuringConnection.clear();
-        mServiceDiscReqId = null;
-        sendMessage(WifiP2pManager.DISCOVER_PEERS);
-    }
-
-    private void handleGroupRemoved() {
-        if (mGroup.isGroupOwner()) {
-            stopDhcpServer(mGroup.getInterface());
-        } else {
-            if (DBG) logd("stop DHCP client");
-            mDhcpStateMachine.sendMessage(DhcpStateMachine.CMD_STOP_DHCP);
-            mDhcpStateMachine.doQuit();
-            mDhcpStateMachine = null;
-        }
-
-        try {
-            mNwService.clearInterfaceAddresses(mGroup.getInterface());
-        } catch (Exception e) {
-            loge("Failed to clear addresses " + e);
-        }
-        NetworkUtils.resetConnections(mGroup.getInterface(), NetworkUtils.RESET_ALL_ADDRESSES);
-
-        // Clear any timeout that was set. This is essential for devices
-        // that reuse the main p2p interface for a created group.
-        mWifiNative.setP2pGroupIdle(mGroup.getInterface(), 0);
-
-        boolean peersChanged = false;
-        // Remove only peers part of the group, so that other devices discovered
-        // that have not timed out still remain in list for connection
-        for (WifiP2pDevice d : mGroup.getClientList()) {
-            if (mPeers.remove(d)) peersChanged = true;
-        }
-        if (mPeers.remove(mGroup.getOwner())) peersChanged = true;
-        if (mPeers.remove(mPeersLostDuringConnection)) peersChanged = true;
-        if (peersChanged) {
-            sendPeersChangedBroadcast();
-        }
-
-        mGroup = null;
-        mPeersLostDuringConnection.clear();
-        mServiceDiscReqId = null;
-
-        if (mTempoarilyDisconnectedWifi) {
-            mWifiChannel.sendMessage(WifiP2pService.DISCONNECT_WIFI_REQUEST, 0);
-            mTempoarilyDisconnectedWifi = false;
-        }
-   }
-
-    //State machine initiated requests can have replyTo set to null indicating
-    //there are no recipients, we ignore those reply actions
-    private void replyToMessage(Message msg, int what) {
-        if (msg.replyTo == null) return;
-        Message dstMsg = obtainMessage(msg);
-        dstMsg.what = what;
-        mReplyChannel.replyToMessage(msg, dstMsg);
-    }
-
-    private void replyToMessage(Message msg, int what, int arg1) {
-        if (msg.replyTo == null) return;
-        Message dstMsg = obtainMessage(msg);
-        dstMsg.what = what;
-        dstMsg.arg1 = arg1;
-        mReplyChannel.replyToMessage(msg, dstMsg);
-    }
-
-    private void replyToMessage(Message msg, int what, Object obj) {
-        if (msg.replyTo == null) return;
-        Message dstMsg = obtainMessage(msg);
-        dstMsg.what = what;
-        dstMsg.obj = obj;
-        mReplyChannel.replyToMessage(msg, dstMsg);
-    }
-
-    /* arg2 on the source message has a hash code that needs to be retained in replies
-     * see WifiP2pManager for details */
-    private Message obtainMessage(Message srcMsg) {
-        Message msg = Message.obtain();
-        msg.arg2 = srcMsg.arg2;
-        return msg;
-    }
-
-    @Override
-    protected void logd(String s) {
-        Slog.d(TAG, s);
-    }
-
-    @Override
-    protected void loge(String s) {
-        Slog.e(TAG, s);
-    }
-
-    /**
-     * Update service discovery request to wpa_supplicant.
-     */
-    private boolean updateSupplicantServiceRequest() {
-        clearSupplicantServiceRequest();
-
-        StringBuffer sb = new StringBuffer();
-        for (ClientInfo c: mClientInfoList.values()) {
-            int key;
-            WifiP2pServiceRequest req;
-            for (int i=0; i < c.mReqList.size(); i++) {
-                req = c.mReqList.valueAt(i);
-                if (req != null) {
-                    sb.append(req.getSupplicantQuery());
-                }
-            }
-        }
-
-        if (sb.length() == 0) {
-            return false;
-        }
-
-        mServiceDiscReqId = mWifiNative.p2pServDiscReq("00:00:00:00:00:00", sb.toString());
-        if (mServiceDiscReqId == null) {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Clear service discovery request in wpa_supplicant
-     */
-    private void clearSupplicantServiceRequest() {
-        if (mServiceDiscReqId == null) return;
-
-        mWifiNative.p2pServDiscCancelReq(mServiceDiscReqId);
-        mServiceDiscReqId = null;
-    }
-
-    /* TODO: We could track individual service adds separately and avoid
-     * having to do update all service requests on every new request
-     */
-    private boolean addServiceRequest(Messenger m, WifiP2pServiceRequest req) {
-        clearClientDeadChannels();
-        ClientInfo clientInfo = getClientInfo(m, true);
-        if (clientInfo == null) {
-            return false;
-        }
-
-        ++mServiceTransactionId;
-        //The Wi-Fi p2p spec says transaction id should be non-zero
-        if (mServiceTransactionId == 0) ++mServiceTransactionId;
-        req.setTransactionId(mServiceTransactionId);
-        clientInfo.mReqList.put(mServiceTransactionId, req);
-
-        if (mServiceDiscReqId == null) {
-            return true;
-        }
-
-        return updateSupplicantServiceRequest();
-    }
-
-    private void removeServiceRequest(Messenger m, WifiP2pServiceRequest req) {
-        ClientInfo clientInfo = getClientInfo(m, false);
-        if (clientInfo == null) {
-            return;
-        }
-
-        //Application does not have transaction id information
-        //go through stored requests to remove
-        boolean removed = false;
-        for (int i=0; i<clientInfo.mReqList.size(); i++) {
-            if (req.equals(clientInfo.mReqList.valueAt(i))) {
-                removed = true;
-                clientInfo.mReqList.removeAt(i);
-                break;
-            }
-        }
-
-        if (!removed) return;
-
-        if (clientInfo.mReqList.size() == 0 && clientInfo.mServList.size() == 0) {
-            if (DBG) logd("remove client information from framework");
-            mClientInfoList.remove(clientInfo.mMessenger);
-        }
-
-        if (mServiceDiscReqId == null) {
-            return;
-        }
-
-        updateSupplicantServiceRequest();
-    }
-
-    private void clearServiceRequests(Messenger m) {
-
-        ClientInfo clientInfo = getClientInfo(m, false);
-        if (clientInfo == null) {
-            return;
-        }
-
-        if (clientInfo.mReqList.size() == 0) {
-            return;
-        }
-
-        clientInfo.mReqList.clear();
-
-        if (clientInfo.mServList.size() == 0) {
-            if (DBG) logd("remove channel information from framework");
-            mClientInfoList.remove(clientInfo.mMessenger);
-        }
-
-        if (mServiceDiscReqId == null) {
-            return;
-        }
-
-        updateSupplicantServiceRequest();
-    }
-
-    private boolean addLocalService(Messenger m, WifiP2pServiceInfo servInfo) {
-        clearClientDeadChannels();
-        ClientInfo clientInfo = getClientInfo(m, true);
-        if (clientInfo == null) {
-            return false;
-        }
-
-        if (!clientInfo.mServList.add(servInfo)) {
-            return false;
-        }
-
-        if (!mWifiNative.p2pServiceAdd(servInfo)) {
-            clientInfo.mServList.remove(servInfo);
-            return false;
-        }
-
-        return true;
-    }
-
-    private void removeLocalService(Messenger m, WifiP2pServiceInfo servInfo) {
-        ClientInfo clientInfo = getClientInfo(m, false);
-        if (clientInfo == null) {
-            return;
-        }
-
-        mWifiNative.p2pServiceDel(servInfo);
-
-        clientInfo.mServList.remove(servInfo);
-        if (clientInfo.mReqList.size() == 0 && clientInfo.mServList.size() == 0) {
-            if (DBG) logd("remove client information from framework");
-            mClientInfoList.remove(clientInfo.mMessenger);
-        }
-    }
-
-    private void clearLocalServices(Messenger m) {
-        ClientInfo clientInfo = getClientInfo(m, false);
-        if (clientInfo == null) {
-            return;
-        }
-
-        for (WifiP2pServiceInfo servInfo: clientInfo.mServList) {
-            mWifiNative.p2pServiceDel(servInfo);
-        }
-
-        clientInfo.mServList.clear();
-        if (clientInfo.mReqList.size() == 0) {
-            if (DBG) logd("remove client information from framework");
-            mClientInfoList.remove(clientInfo.mMessenger);
-        }
-    }
-
-    private void clearClientInfo(Messenger m) {
-        clearLocalServices(m);
-        clearServiceRequests(m);
-    }
-
-    /**
-     * Send the service response to the WifiP2pManager.Channel.
-     *
-     * @param resp
-     */
-    private void sendServiceResponse(WifiP2pServiceResponse resp) {
-        for (ClientInfo c : mClientInfoList.values()) {
-            WifiP2pServiceRequest req = c.mReqList.get(resp.getTransactionId());
-            if (req != null) {
-                Message msg = Message.obtain();
-                msg.what = WifiP2pManager.RESPONSE_SERVICE;
-                msg.arg1 = 0;
-                msg.arg2 = 0;
-                msg.obj = resp;
-                try {
-                    c.mMessenger.send(msg);
-                } catch (RemoteException e) {
-                    if (DBG) logd("detect dead channel");
-                    clearClientInfo(c.mMessenger);
-                    return;
-                }
-            }
-        }
-    }
-
-    /**
-     * We dont get notifications of clients that have gone away.
-     * We detect this actively when services are added and throw
-     * them away.
-     *
-     * TODO: This can be done better with full async channels.
-     */
-    private void clearClientDeadChannels() {
-        ArrayList<Messenger> deadClients = new ArrayList<Messenger>();
-
-        for (ClientInfo c : mClientInfoList.values()) {
-            Message msg = Message.obtain();
-            msg.what = WifiP2pManager.PING;
-            msg.arg1 = 0;
-            msg.arg2 = 0;
-            msg.obj = null;
-            try {
-                c.mMessenger.send(msg);
-            } catch (RemoteException e) {
-                if (DBG) logd("detect dead channel");
-                deadClients.add(c.mMessenger);
-            }
-        }
-
-        for (Messenger m : deadClients) {
-            clearClientInfo(m);
-        }
-    }
-
-    /**
-     * Return the specified ClientInfo.
-     * @param m Messenger
-     * @param createIfNotExist if true and the specified channel info does not exist,
-     * create new client info.
-     * @return the specified ClientInfo.
-     */
-    private ClientInfo getClientInfo(Messenger m, boolean createIfNotExist) {
-        ClientInfo clientInfo = mClientInfoList.get(m);
-
-        if (clientInfo == null && createIfNotExist) {
-            if (DBG) logd("add a new client");
-            clientInfo = new ClientInfo(m);
-            mClientInfoList.put(m, clientInfo);
-        }
-
-        return clientInfo;
-    }
-
-    }
-
-    /**
-     * Information about a particular client and we track the service discovery requests
-     * and the local services registered by the client.
-     */
-    private class ClientInfo {
-
-        /*
-         * A reference to WifiP2pManager.Channel handler.
-         * The response of this request is notified to WifiP2pManager.Channel handler
-         */
-        private Messenger mMessenger;
-
-        /*
-         * A service discovery request list.
-         */
-        private SparseArray<WifiP2pServiceRequest> mReqList;
-
-        /*
-         * A local service information list.
-         */
-        private List<WifiP2pServiceInfo> mServList;
-
-        private ClientInfo(Messenger m) {
-            mMessenger = m;
-            mReqList = new SparseArray();
-            mServList = new ArrayList<WifiP2pServiceInfo>();
-        }
-    }
-}
